From mboxrd@z Thu Jan 1 00:00:00 1970 Message-ID: <429F0F07.30601@domain.hid> Date: Thu, 02 Jun 2005 16:52:07 +0300 From: Heikki Lindholm MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="------------020304010001040304030207" Subject: [Adeos-main] PATCH: Adeos and Fusion PPC64 port (first attempt) Sender: adeos-main-admin@domain.hid Errors-To: adeos-main-admin@domain.hid List-Help: List-Post: List-Subscribe: , List-Id: General discussion about Adeos List-Unsubscribe: , List-Archive: To: rtai-dev@domain.hid Cc: adeos-main@gna.org This is a multi-part message in MIME format. --------------020304010001040304030207 Content-Type: text/plain; charset="utf-8"; format="flowed" Content-Transfer-Encoding: 8bit Hello all, Here's an initial port of adeos and rtai/fusion to 64-bit powerpc Taneli Vähäkangas and myself have been working on. Unfortunately the port isn't yet fully functional, but due to timing constraints I have to shove it in (out) now ("kunhan hänessä on"). It's developed and tested on a G5 PowerMac; IBM Iseries code is untouched. Current status is: * compiles - makefile structure should be ok * Linux/adeos boots * fusion modules load and unload * fusion timers probably don't work * fusion fpu support is untested and probably doesn't work * A hello world rt thread seems to work :) * much of the stuff could be integrated with the ppc32 from which it differs very little, but should probably be made more stable before that Regards, Heikki Lindholm --------------020304010001040304030207 Content-Type: text/plain; x-mac-type="0"; x-mac-creator="0"; name="fusion-0.7.1-ppc64-r1.patch" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="fusion-0.7.1-ppc64-r1.patch" ZGlmZiAtTnJ1IGZ1c2lvbi0wLjcuMS9HTlVtYWtlZmlsZS5pbiBmdXNpb24tMC43LjEtcHBj NjQtZGV2ZWwvR05VbWFrZWZpbGUuaW4KLS0tIGZ1c2lvbi0wLjcuMS9HTlVtYWtlZmlsZS5p bgkyMDA1LTA0LTAyIDE3OjI2OjI4LjAwMDAwMDAwMCArMDMwMAorKysgZnVzaW9uLTAuNy4x LXBwYzY0LWRldmVsL0dOVW1ha2VmaWxlLmluCTIwMDUtMDUtMTYgMTU6MTk6MzEuMDAwMDAw MDAwICswMzAwCkBAIC05Myw2ICs5Myw4IEBACiBDT05GSUdfTFRUX1RSVUUgPSBAQ09ORklH X0xUVF9UUlVFQAogQ09ORklHX1BQQ19GQUxTRSA9IEBDT05GSUdfUFBDX0ZBTFNFQAogQ09O RklHX1BQQ19UUlVFID0gQENPTkZJR19QUENfVFJVRUAKK0NPTkZJR19QUEM2NF9GQUxTRSA9 IEBDT05GSUdfUFBDNjRfRkFMU0VACitDT05GSUdfUFBDNjRfVFJVRSA9IEBDT05GSUdfUFBD NjRfVFJVRUAKIENPTkZJR19SVEFJX0RPQ19ET1hfRkFMU0UgPSBAQ09ORklHX1JUQUlfRE9D X0RPWF9GQUxTRUAKIENPTkZJR19SVEFJX0RPQ19ET1hfVFJVRSA9IEBDT05GSUdfUlRBSV9E T0NfRE9YX1RSVUVACiBDT05GSUdfUlRBSV9EUklWRVJTXzE2NTUwQV9GQUxTRSA9IEBDT05G SUdfUlRBSV9EUklWRVJTXzE2NTUwQV9GQUxTRUAKZGlmZiAtTnJ1IGZ1c2lvbi0wLjcuMS9h cmNoL0dOVW1ha2VmaWxlLmFtIGZ1c2lvbi0wLjcuMS1wcGM2NC1kZXZlbC9hcmNoL0dOVW1h a2VmaWxlLmFtCi0tLSBmdXNpb24tMC43LjEvYXJjaC9HTlVtYWtlZmlsZS5hbQkyMDA0LTEy LTI0IDExOjEyOjExLjAwMDAwMDAwMCArMDIwMAorKysgZnVzaW9uLTAuNy4xLXBwYzY0LWRl dmVsL2FyY2gvR05VbWFrZWZpbGUuYW0JMjAwNS0wNS0xNiAxNDo1NTozNy4wMDAwMDAwMDAg KzAzMDAKQEAgLTYsNCArNiw4IEBACiBBUkNIRElSID0gcHBjCiBlbmRpZgogCitpZiBDT05G SUdfUFBDNjQKK0FSQ0hESVIgPSBwcGM2NAorZW5kaWYKKwogU1VCRElSUyA9ICQoQVJDSERJ UikKZGlmZiAtTnJ1IGZ1c2lvbi0wLjcuMS9hcmNoL0dOVW1ha2VmaWxlLmluIGZ1c2lvbi0w LjcuMS1wcGM2NC1kZXZlbC9hcmNoL0dOVW1ha2VmaWxlLmluCi0tLSBmdXNpb24tMC43LjEv YXJjaC9HTlVtYWtlZmlsZS5pbgkyMDA1LTA0LTAyIDE3OjI2OjIxLjAwMDAwMDAwMCArMDMw MAorKysgZnVzaW9uLTAuNy4xLXBwYzY0LWRldmVsL2FyY2gvR05VbWFrZWZpbGUuaW4JMjAw NS0wNS0xNiAxNDo1NzoxNi4wMDAwMDAwMDAgKzAzMDAKQEAgLTU1LDcgKzU1LDcgQEAKIAl1 bmluc3RhbGwtcmVjdXJzaXZlCiBFVEFHUyA9IGV0YWdzCiBDVEFHUyA9IGN0YWdzCi1ESVNU X1NVQkRJUlMgPSBwcGMgaTM4NgorRElTVF9TVUJESVJTID0gcHBjIHBwYzY0IGkzODYKIERJ U1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAk KEVYVFJBX0RJU1QpCiBBQ0xPQ0FMID0gQEFDTE9DQUxACiBBTURFUF9GQUxTRSA9IEBBTURF UF9GQUxTRUAKQEAgLTI2Nyw2ICsyNjcsNyBAQAogc3lzY29uZmRpciA9IEBzeXNjb25mZGly QAogdGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKIEBDT05GSUdfUFBDX1RSVUVAQVJD SERJUiA9IHBwYworQENPTkZJR19QUEM2NF9UUlVFQEFSQ0hESVIgPSBwcGM2NAogQENPTkZJ R19YODZfVFJVRUBBUkNIRElSID0gaTM4NgogU1VCRElSUyA9ICQoQVJDSERJUikKIGFsbDog YWxsLXJlY3Vyc2l2ZQpkaWZmIC1OcnUgZnVzaW9uLTAuNy4xL2FyY2gvcHBjNjQvR05VbWFr ZWZpbGUuYW0gZnVzaW9uLTAuNy4xLXBwYzY0LWRldmVsL2FyY2gvcHBjNjQvR05VbWFrZWZp bGUuYW0KLS0tIGZ1c2lvbi0wLjcuMS9hcmNoL3BwYzY0L0dOVW1ha2VmaWxlLmFtCTE5NzAt MDEtMDEgMDI6MDA6MDAuMDAwMDAwMDAwICswMjAwCisrKyBmdXNpb24tMC43LjEtcHBjNjQt ZGV2ZWwvYXJjaC9wcGM2NC9HTlVtYWtlZmlsZS5hbQkyMDA0LTEyLTI0IDExOjEyOjExLjAw MDAwMDAwMCArMDIwMApAQCAtMCwwICsxLDMgQEAKK1NVQkRJUlMgPSBoYWwKKworRVhUUkFf RElTVCA9IEtjb25maWcgZGVmY29uZmlnIHBhdGNoZXMKZGlmZiAtTnJ1IGZ1c2lvbi0wLjcu MS9hcmNoL3BwYzY0L0dOVW1ha2VmaWxlLmluIGZ1c2lvbi0wLjcuMS1wcGM2NC1kZXZlbC9h cmNoL3BwYzY0L0dOVW1ha2VmaWxlLmluCi0tLSBmdXNpb24tMC43LjEvYXJjaC9wcGM2NC9H TlVtYWtlZmlsZS5pbgkxOTcwLTAxLTAxIDAyOjAwOjAwLjAwMDAwMDAwMCArMDIwMAorKysg ZnVzaW9uLTAuNy4xLXBwYzY0LWRldmVsL2FyY2gvcHBjNjQvR05VbWFrZWZpbGUuaW4JMjAw NS0wNS0xNiAxNToyNjoyMC4wMDAwMDAwMDAgKzAzMDAKQEAgLTAsMCArMSw1NjkgQEAKKyMg R05VbWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuOS4yIGZyb20gR05VbWFr ZWZpbGUuYW0uCisjIEBjb25maWd1cmVfaW5wdXRACisKKyMgQ29weXJpZ2h0IChDKSAxOTk0 LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLAorIyAy MDAzLCAyMDA0ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBNYWtl ZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u CisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1 dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRo aXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0 ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQg QU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQK KyMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU TkVTUyBGT1IgQQorIyBQQVJUSUNVTEFSIFBVUlBPU0UuCisKK0BTRVRfTUFLRUAKK3NyY2Rp ciA9IEBzcmNkaXJACit0b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACitWUEFUSCA9IEBzcmNk aXJACitwa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmRpciA9ICQo bGliZGlyKS9AUEFDS0FHRUAKK3BrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNL QUdFQAordG9wX2J1aWxkZGlyID0gLi4vLi4KK2FtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZF UlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKK0lOU1RBTEwgPSBASU5TVEFMTEAK K2luc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0CitpbnN0YWxsX3No X1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCitpbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5z dGFsbF9zaCkgLWMKK0lOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCit0cmFuc2Zv cm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCitOT1JNQUxfSU5TVEFMTCA9IDoKK1BS RV9JTlNUQUxMID0gOgorUE9TVF9JTlNUQUxMID0gOgorTk9STUFMX1VOSU5TVEFMTCA9IDoK K1BSRV9VTklOU1RBTEwgPSA6CitQT1NUX1VOSU5TVEFMTCA9IDoKK2J1aWxkX3RyaXBsZXQg PSBAYnVpbGRACitob3N0X3RyaXBsZXQgPSBAaG9zdEAKK3N1YmRpciA9IGFyY2gvcHBjNjQK K0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL0dOVW1ha2VmaWxlLmFtICQoc3JjZGlyKS9HTlVt YWtlZmlsZS5pbgorQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAorYW1f X2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvY29uZmlnL2F1dG9jb25mL2RvY2Jv b2subTQgXAorCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmluCithbV9fY29uZmlndXJlX2Rl cHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykg XAorCSQoQUNMT0NBTF9NNCkKK21raW5zdGFsbGRpcnMgPSAkKFNIRUxMKSAkKHRvcF9zcmNk aXIpL2NvbmZpZy9hdXRvY29uZi9ta2luc3RhbGxkaXJzCitDT05GSUdfSEVBREVSID0gJCh0 b3BfYnVpbGRkaXIpL3J0YWlfY29uZmlnLmgKK0NPTkZJR19DTEVBTl9GSUxFUyA9CitTT1VS Q0VTID0KK0RJU1RfU09VUkNFUyA9CitSRUNVUlNJVkVfVEFSR0VUUyA9IGFsbC1yZWN1cnNp dmUgY2hlY2stcmVjdXJzaXZlIGR2aS1yZWN1cnNpdmUgXAorCWh0bWwtcmVjdXJzaXZlIGlu Zm8tcmVjdXJzaXZlIGluc3RhbGwtZGF0YS1yZWN1cnNpdmUgXAorCWluc3RhbGwtZXhlYy1y ZWN1cnNpdmUgaW5zdGFsbC1pbmZvLXJlY3Vyc2l2ZSBcCisJaW5zdGFsbC1yZWN1cnNpdmUg aW5zdGFsbGNoZWNrLXJlY3Vyc2l2ZSBpbnN0YWxsZGlycy1yZWN1cnNpdmUgXAorCXBkZi1y ZWN1cnNpdmUgcHMtcmVjdXJzaXZlIHVuaW5zdGFsbC1pbmZvLXJlY3Vyc2l2ZSBcCisJdW5p bnN0YWxsLXJlY3Vyc2l2ZQorRVRBR1MgPSBldGFncworQ1RBR1MgPSBjdGFncworRElTVF9T VUJESVJTID0gJChTVUJESVJTKQorRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNU X1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKK0FDTE9DQUwgPSBAQUNMT0NB TEAKK0FNREVQX0ZBTFNFID0gQEFNREVQX0ZBTFNFQAorQU1ERVBfVFJVRSA9IEBBTURFUF9U UlVFQAorQU1UQVIgPSBAQU1UQVJACitBUiA9IEBBUkAKK0FVVE9DT05GID0gQEFVVE9DT05G QAorQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAorQVVUT01BS0UgPSBAQVVUT01BS0VACitB V0sgPSBAQVdLQAorQ0MgPSBAQ0NACitDQ0FTID0gQENDQVNACitDQ0FTRkxBR1MgPSBAQ0NB U0ZMQUdTQAorQ0NERVBNT0RFID0gQENDREVQTU9ERUAKK0NGTEFHUyA9IEBDRkxBR1NACitD T05GSUdfTFRUX0ZBTFNFID0gQENPTkZJR19MVFRfRkFMU0VACitDT05GSUdfTFRUX1RSVUUg PSBAQ09ORklHX0xUVF9UUlVFQAorQ09ORklHX1BQQzY0X0ZBTFNFID0gQENPTkZJR19QUEM2 NF9GQUxTRUAKK0NPTkZJR19QUEM2NF9UUlVFID0gQENPTkZJR19QUEM2NF9UUlVFQAorQ09O RklHX1JUQUlfRE9DX0RPWF9GQUxTRSA9IEBDT05GSUdfUlRBSV9ET0NfRE9YX0ZBTFNFQAor Q09ORklHX1JUQUlfRE9DX0RPWF9UUlVFID0gQENPTkZJR19SVEFJX0RPQ19ET1hfVFJVRUAK K0NPTkZJR19SVEFJX0RSSVZFUlNfMTY1NTBBX0ZBTFNFID0gQENPTkZJR19SVEFJX0RSSVZF UlNfMTY1NTBBX0ZBTFNFQAorQ09ORklHX1JUQUlfRFJJVkVSU18xNjU1MEFfVFJVRSA9IEBD T05GSUdfUlRBSV9EUklWRVJTXzE2NTUwQV9UUlVFQAorQ09ORklHX1JUQUlfSFdfRlBVX0ZB TFNFID0gQENPTkZJR19SVEFJX0hXX0ZQVV9GQUxTRUAKK0NPTkZJR19SVEFJX0hXX0ZQVV9U UlVFID0gQENPTkZJR19SVEFJX0hXX0ZQVV9UUlVFQAorQ09ORklHX1JUQUlfSFdfU01JX0RF VEVDVF9GQUxTRSA9IEBDT05GSUdfUlRBSV9IV19TTUlfREVURUNUX0ZBTFNFQAorQ09ORklH X1JUQUlfSFdfU01JX0RFVEVDVF9UUlVFID0gQENPTkZJR19SVEFJX0hXX1NNSV9ERVRFQ1Rf VFJVRUAKK0NPTkZJR19SVEFJX01BSU5UX0ZBTFNFID0gQENPTkZJR19SVEFJX01BSU5UX0ZB TFNFQAorQ09ORklHX1JUQUlfTUFJTlRfR0NIX0ZBTFNFID0gQENPTkZJR19SVEFJX01BSU5U X0dDSF9GQUxTRUAKK0NPTkZJR19SVEFJX01BSU5UX0dDSF9UUlVFID0gQENPTkZJR19SVEFJ X01BSU5UX0dDSF9UUlVFQAorQ09ORklHX1JUQUlfTUFJTlRfUEdNX0ZBTFNFID0gQENPTkZJ R19SVEFJX01BSU5UX1BHTV9GQUxTRUAKK0NPTkZJR19SVEFJX01BSU5UX1BHTV9UUlVFID0g QENPTkZJR19SVEFJX01BSU5UX1BHTV9UUlVFQAorQ09ORklHX1JUQUlfTUFJTlRfVFJVRSA9 IEBDT05GSUdfUlRBSV9NQUlOVF9UUlVFQAorQ09ORklHX1JUQUlfT0xEX0ZBU0hJT05FRF9C VUlMRF9GQUxTRSA9IEBDT05GSUdfUlRBSV9PTERfRkFTSElPTkVEX0JVSUxEX0ZBTFNFQAor Q09ORklHX1JUQUlfT0xEX0ZBU0hJT05FRF9CVUlMRF9UUlVFID0gQENPTkZJR19SVEFJX09M RF9GQVNISU9ORURfQlVJTERfVFJVRUAKK0NPTkZJR19SVEFJX09QVF9GVVNJT05fRkFMU0Ug PSBAQ09ORklHX1JUQUlfT1BUX0ZVU0lPTl9GQUxTRUAKK0NPTkZJR19SVEFJX09QVF9GVVNJ T05fVFJVRSA9IEBDT05GSUdfUlRBSV9PUFRfRlVTSU9OX1RSVUVACitDT05GSUdfUlRBSV9P UFRfTkFUSVZFX0FMQVJNX0ZBTFNFID0gQENPTkZJR19SVEFJX09QVF9OQVRJVkVfQUxBUk1f RkFMU0VACitDT05GSUdfUlRBSV9PUFRfTkFUSVZFX0FMQVJNX1RSVUUgPSBAQ09ORklHX1JU QUlfT1BUX05BVElWRV9BTEFSTV9UUlVFQAorQ09ORklHX1JUQUlfT1BUX05BVElWRV9DT05E X0ZBTFNFID0gQENPTkZJR19SVEFJX09QVF9OQVRJVkVfQ09ORF9GQUxTRUAKK0NPTkZJR19S VEFJX09QVF9OQVRJVkVfQ09ORF9UUlVFID0gQENPTkZJR19SVEFJX09QVF9OQVRJVkVfQ09O RF9UUlVFQAorQ09ORklHX1JUQUlfT1BUX05BVElWRV9FVkVOVF9GQUxTRSA9IEBDT05GSUdf UlRBSV9PUFRfTkFUSVZFX0VWRU5UX0ZBTFNFQAorQ09ORklHX1JUQUlfT1BUX05BVElWRV9F VkVOVF9UUlVFID0gQENPTkZJR19SVEFJX09QVF9OQVRJVkVfRVZFTlRfVFJVRUAKK0NPTkZJ R19SVEFJX09QVF9OQVRJVkVfSEVBUF9GQUxTRSA9IEBDT05GSUdfUlRBSV9PUFRfTkFUSVZF X0hFQVBfRkFMU0VACitDT05GSUdfUlRBSV9PUFRfTkFUSVZFX0hFQVBfVFJVRSA9IEBDT05G SUdfUlRBSV9PUFRfTkFUSVZFX0hFQVBfVFJVRUAKK0NPTkZJR19SVEFJX09QVF9OQVRJVkVf SU5UUl9GQUxTRSA9IEBDT05GSUdfUlRBSV9PUFRfTkFUSVZFX0lOVFJfRkFMU0VACitDT05G SUdfUlRBSV9PUFRfTkFUSVZFX0lOVFJfVFJVRSA9IEBDT05GSUdfUlRBSV9PUFRfTkFUSVZF X0lOVFJfVFJVRUAKK0NPTkZJR19SVEFJX09QVF9OQVRJVkVfTVVURVhfRkFMU0UgPSBAQ09O RklHX1JUQUlfT1BUX05BVElWRV9NVVRFWF9GQUxTRUAKK0NPTkZJR19SVEFJX09QVF9OQVRJ VkVfTVVURVhfVFJVRSA9IEBDT05GSUdfUlRBSV9PUFRfTkFUSVZFX01VVEVYX1RSVUVACitD T05GSUdfUlRBSV9PUFRfTkFUSVZFX1BJUEVfRkFMU0UgPSBAQ09ORklHX1JUQUlfT1BUX05B VElWRV9QSVBFX0ZBTFNFQAorQ09ORklHX1JUQUlfT1BUX05BVElWRV9QSVBFX1RSVUUgPSBA Q09ORklHX1JUQUlfT1BUX05BVElWRV9QSVBFX1RSVUVACitDT05GSUdfUlRBSV9PUFRfTkFU SVZFX1FVRVVFX0ZBTFNFID0gQENPTkZJR19SVEFJX09QVF9OQVRJVkVfUVVFVUVfRkFMU0VA CitDT05GSUdfUlRBSV9PUFRfTkFUSVZFX1FVRVVFX1RSVUUgPSBAQ09ORklHX1JUQUlfT1BU X05BVElWRV9RVUVVRV9UUlVFQAorQ09ORklHX1JUQUlfT1BUX05BVElWRV9SRUdJU1RSWV9G QUxTRSA9IEBDT05GSUdfUlRBSV9PUFRfTkFUSVZFX1JFR0lTVFJZX0ZBTFNFQAorQ09ORklH X1JUQUlfT1BUX05BVElWRV9SRUdJU1RSWV9UUlVFID0gQENPTkZJR19SVEFJX09QVF9OQVRJ VkVfUkVHSVNUUllfVFJVRUAKK0NPTkZJR19SVEFJX09QVF9OQVRJVkVfU0VNX0ZBTFNFID0g QENPTkZJR19SVEFJX09QVF9OQVRJVkVfU0VNX0ZBTFNFQAorQ09ORklHX1JUQUlfT1BUX05B VElWRV9TRU1fVFJVRSA9IEBDT05GSUdfUlRBSV9PUFRfTkFUSVZFX1NFTV9UUlVFQAorQ09O RklHX1JUQUlfT1BUX1BJUEVfRkFMU0UgPSBAQ09ORklHX1JUQUlfT1BUX1BJUEVfRkFMU0VA CitDT05GSUdfUlRBSV9PUFRfUElQRV9UUlVFID0gQENPTkZJR19SVEFJX09QVF9QSVBFX1RS VUVACitDT05GSUdfUlRBSV9PUFRfVVZNX0ZBTFNFID0gQENPTkZJR19SVEFJX09QVF9VVk1f RkFMU0VACitDT05GSUdfUlRBSV9PUFRfVVZNX1RSVUUgPSBAQ09ORklHX1JUQUlfT1BUX1VW TV9UUlVFQAorQ09ORklHX1JUQUlfU0tJTl9OQVRJVkVfRkFMU0UgPSBAQ09ORklHX1JUQUlf U0tJTl9OQVRJVkVfRkFMU0VACitDT05GSUdfUlRBSV9TS0lOX05BVElWRV9UUlVFID0gQENP TkZJR19SVEFJX1NLSU5fTkFUSVZFX1RSVUVACitDT05GSUdfUlRBSV9TS0lOX1BPU0lYX0ZB TFNFID0gQENPTkZJR19SVEFJX1NLSU5fUE9TSVhfRkFMU0VACitDT05GSUdfUlRBSV9TS0lO X1BPU0lYX1RSVUUgPSBAQ09ORklHX1JUQUlfU0tJTl9QT1NJWF9UUlVFQAorQ09ORklHX1JU QUlfU0tJTl9QU09TX0ZBTFNFID0gQENPTkZJR19SVEFJX1NLSU5fUFNPU19GQUxTRUAKK0NP TkZJR19SVEFJX1NLSU5fUFNPU19UUlVFID0gQENPTkZJR19SVEFJX1NLSU5fUFNPU19UUlVF QAorQ09ORklHX1JUQUlfU0tJTl9VSVRST05fRkFMU0UgPSBAQ09ORklHX1JUQUlfU0tJTl9V SVRST05fRkFMU0VACitDT05GSUdfUlRBSV9TS0lOX1VJVFJPTl9UUlVFID0gQENPTkZJR19S VEFJX1NLSU5fVUlUUk9OX1RSVUVACitDT05GSUdfUlRBSV9TS0lOX1ZSVFhfRkFMU0UgPSBA Q09ORklHX1JUQUlfU0tJTl9WUlRYX0ZBTFNFQAorQ09ORklHX1JUQUlfU0tJTl9WUlRYX1RS VUUgPSBAQ09ORklHX1JUQUlfU0tJTl9WUlRYX1RSVUVACitDT05GSUdfUlRBSV9TS0lOX1ZY V09SS1NfRkFMU0UgPSBAQ09ORklHX1JUQUlfU0tJTl9WWFdPUktTX0ZBTFNFQAorQ09ORklH X1JUQUlfU0tJTl9WWFdPUktTX1RSVUUgPSBAQ09ORklHX1JUQUlfU0tJTl9WWFdPUktTX1RS VUVACitDT05GSUdfU01QX0ZBTFNFID0gQENPTkZJR19TTVBfRkFMU0VACitDT05GSUdfU01Q X1RSVUUgPSBAQ09ORklHX1NNUF9UUlVFQAorQ09ORklHX1g4Nl9GQUxTRSA9IEBDT05GSUdf WDg2X0ZBTFNFQAorQ09ORklHX1g4Nl9MT0NBTF9BUElDX0ZBTFNFID0gQENPTkZJR19YODZf TE9DQUxfQVBJQ19GQUxTRUAKK0NPTkZJR19YODZfTE9DQUxfQVBJQ19UUlVFID0gQENPTkZJ R19YODZfTE9DQUxfQVBJQ19UUlVFQAorQ09ORklHX1g4Nl9UUlVFID0gQENPTkZJR19YODZf VFJVRUAKK0NQUCA9IEBDUFBACitDUFBGTEFHUyA9IEBDUFBGTEFHU0AKK0NST1NTX0NPTVBJ TEUgPSBAQ1JPU1NfQ09NUElMRUAKK0NYWCA9IEBDWFhACitDWFhDUFAgPSBAQ1hYQ1BQQAor Q1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAorQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACitDWUdQ QVRIX1cgPSBAQ1lHUEFUSF9XQAorREJYX0FCU19TUkNESVJfRkFMU0UgPSBAREJYX0FCU19T UkNESVJfRkFMU0VACitEQlhfQUJTX1NSQ0RJUl9UUlVFID0gQERCWF9BQlNfU1JDRElSX1RS VUVACitEQlhfRE9DX0ZBTFNFID0gQERCWF9ET0NfRkFMU0VACitEQlhfRE9DX1JPT1QgPSBA REJYX0RPQ19ST09UQAorREJYX0RPQ19UUlVFID0gQERCWF9ET0NfVFJVRUAKK0RCWF9GT1Ag PSBAREJYX0ZPUEAKK0RCWF9HRU5fRE9DX1JPT1QgPSBAREJYX0dFTl9ET0NfUk9PVEAKK0RC WF9MSU5UID0gQERCWF9MSU5UQAorREJYX01BWUJFX05PTkVUID0gQERCWF9NQVlCRV9OT05F VEAKK0RCWF9ST09UID0gQERCWF9ST09UQAorREJYX1hTTFRQUk9DID0gQERCWF9YU0xUUFJP Q0AKK0RCWF9YU0xfUk9PVCA9IEBEQlhfWFNMX1JPT1RACitERUZTID0gQERFRlNACitERVBE SVIgPSBAREVQRElSQAorRE9YWUdFTiA9IEBET1hZR0VOQAorRE9YWUdFTl9IQVZFX0RPVCA9 IEBET1hZR0VOX0hBVkVfRE9UQAorRE9YWUdFTl9TSE9XX0lOQ0xVREVfRklMRVMgPSBARE9Y WUdFTl9TSE9XX0lOQ0xVREVfRklMRVNACitFQ0hPID0gQEVDSE9ACitFQ0hPX0MgPSBARUNI T19DQAorRUNIT19OID0gQEVDSE9fTkAKK0VDSE9fVCA9IEBFQ0hPX1RACitFR1JFUCA9IEBF R1JFUEAKK0VYRUVYVCA9IEBFWEVFWFRACitGNzcgPSBARjc3QAorRkZMQUdTID0gQEZGTEFH U0AKK0lOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACitJTlNUQUxMX1BST0dSQU0gPSBA SU5TVEFMTF9QUk9HUkFNQAorSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACitJ TlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAorTEFURVhf QkFUQ0hNT0RFID0gQExBVEVYX0JBVENITU9ERUAKK0xBVEVYX01PREUgPSBATEFURVhfTU9E RUAKK0xERkxBR1MgPSBATERGTEFHU0AKK0xFWCA9IEBMRVhACitMRVhMSUIgPSBATEVYTElC QAorTEVYX09VVFBVVF9ST09UID0gQExFWF9PVVRQVVRfUk9PVEAKK0xJQk9CSlMgPSBATElC T0JKU0AKK0xJQlMgPSBATElCU0AKK0xJQlRPT0wgPSBATElCVE9PTEAKK0xOX1MgPSBATE5f U0AKK0xUTElCT0JKUyA9IEBMVExJQk9CSlNACitNQUlOVCA9IEBNQUlOVEAKK01BSU5UQUlO RVJfTU9ERV9GQUxTRSA9IEBNQUlOVEFJTkVSX01PREVfRkFMU0VACitNQUlOVEFJTkVSX01P REVfVFJVRSA9IEBNQUlOVEFJTkVSX01PREVfVFJVRUAKK01BS0VJTkZPID0gQE1BS0VJTkZP QAorT0JKRVhUID0gQE9CSkVYVEAKK1BBQ0tBR0UgPSBAUEFDS0FHRUAKK1BBQ0tBR0VfQlVH UkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAorUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0Vf TkFNRUAKK1BBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAorUEFDS0FHRV9UQVJO QU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKK1BBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZF UlNJT05ACitQQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKK1JBTkxJQiA9IEBS QU5MSUJACitSVEFJX0JVSUxEX1NUUklORyA9IEBSVEFJX0JVSUxEX1NUUklOR0AKK1JUQUlf RlBfQ0ZMQUdTID0gQFJUQUlfRlBfQ0ZMQUdTQAorUlRBSV9IT1NUX1NUUklORyA9IEBSVEFJ X0hPU1RfU1RSSU5HQAorUlRBSV9LQlVJTERfQk9UVE9NID0gQFJUQUlfS0JVSUxEX0JPVFRP TUAKK1JUQUlfS0JVSUxEX0NMRUFOID0gQFJUQUlfS0JVSUxEX0NMRUFOQAorUlRBSV9LQlVJ TERfQ01EID0gQFJUQUlfS0JVSUxEX0NNREAKK1JUQUlfS0JVSUxEX0RJU1RDTEVBTiA9IEBS VEFJX0tCVUlMRF9ESVNUQ0xFQU5ACitSVEFJX0tCVUlMRF9FTlYgPSBAUlRBSV9LQlVJTERf RU5WQAorUlRBSV9LQlVJTERfVE9QID0gQFJUQUlfS0JVSUxEX1RPUEAKK1JUQUlfS01PRF9B UFBfQ0ZMQUdTID0gQFJUQUlfS01PRF9BUFBfQ0ZMQUdTQAorUlRBSV9LTU9EX0NGTEFHUyA9 IEBSVEFJX0tNT0RfQ0ZMQUdTQAorUlRBSV9MSU5VWF9ESVIgPSBAUlRBSV9MSU5VWF9ESVJA CitSVEFJX0xJTlVYX1ZFUlNJT04gPSBAUlRBSV9MSU5VWF9WRVJTSU9OQAorUlRBSV9NQVlC RV9ET0NESVIgPSBAUlRBSV9NQVlCRV9ET0NESVJACitSVEFJX01BWUJFX1NJTURJUiA9IEBS VEFJX01BWUJFX1NJTURJUkAKK1JUQUlfTU9EVUxFX0RJUiA9IEBSVEFJX01PRFVMRV9ESVJA CitSVEFJX01PRFVMRV9FWFQgPSBAUlRBSV9NT0RVTEVfRVhUQAorUlRBSV9QSVBFX05SREVW ID0gQFJUQUlfUElQRV9OUkRFVkAKK1JUQUlfVEFSR0VUX0FSQ0ggPSBAUlRBSV9UQVJHRVRf QVJDSEAKK1JUQUlfVEFSR0VUX1NVQkFSQ0ggPSBAUlRBSV9UQVJHRVRfU1VCQVJDSEAKK1JU QUlfVVNFUl9BUFBfQ0ZMQUdTID0gQFJUQUlfVVNFUl9BUFBfQ0ZMQUdTQAorUlRBSV9VU0VS X0NGTEFHUyA9IEBSVEFJX1VTRVJfQ0ZMQUdTQAorU0VUX01BS0UgPSBAU0VUX01BS0VACitT SEVMTCA9IEBTSEVMTEAKK1NUUklQID0gQFNUUklQQAorVkVSU0lPTiA9IEBWRVJTSU9OQAor YWNfY3RfQVIgPSBAYWNfY3RfQVJACithY19jdF9DQyA9IEBhY19jdF9DQ0AKK2FjX2N0X0NY WCA9IEBhY19jdF9DWFhACithY19jdF9GNzcgPSBAYWNfY3RfRjc3QAorYWNfY3RfUkFOTElC ID0gQGFjX2N0X1JBTkxJQkAKK2FjX2N0X1NUUklQID0gQGFjX2N0X1NUUklQQAorYW1fX2Zh c3RkZXBDQ19GQUxTRSA9IEBhbV9fZmFzdGRlcENDX0ZBTFNFQAorYW1fX2Zhc3RkZXBDQ19U UlVFID0gQGFtX19mYXN0ZGVwQ0NfVFJVRUAKK2FtX19mYXN0ZGVwQ1hYX0ZBTFNFID0gQGFt X19mYXN0ZGVwQ1hYX0ZBTFNFQAorYW1fX2Zhc3RkZXBDWFhfVFJVRSA9IEBhbV9fZmFzdGRl cENYWF9UUlVFQAorYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACithbV9fbGVhZGluZ19k b3QgPSBAYW1fX2xlYWRpbmdfZG90QAorYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKK2FtX190 YXIgPSBAYW1fX3RhckAKK2FtX191bnRhciA9IEBhbV9fdW50YXJACitiaW5kaXIgPSBAYmlu ZGlyQAorYnVpbGQgPSBAYnVpbGRACitidWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKK2J1 aWxkX2NwdSA9IEBidWlsZF9jcHVACitidWlsZF9vcyA9IEBidWlsZF9vc0AKK2J1aWxkX3Zl bmRvciA9IEBidWlsZF92ZW5kb3JACitkYXRhZGlyID0gQGRhdGFkaXJACitleGVjX3ByZWZp eCA9IEBleGVjX3ByZWZpeEAKK2hvc3QgPSBAaG9zdEAKK2hvc3RfYWxpYXMgPSBAaG9zdF9h bGlhc0AKK2hvc3RfY3B1ID0gQGhvc3RfY3B1QAoraG9zdF9vcyA9IEBob3N0X29zQAoraG9z dF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACitpbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACitp bmZvZGlyID0gQGluZm9kaXJACitpbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACitsaWJkaXIg PSBAbGliZGlyQAorbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAorbG9jYWxzdGF0ZWRpciA9 IEBsb2NhbHN0YXRlZGlyQAorbWFuZGlyID0gQG1hbmRpckAKK21rZGlyX3AgPSBAbWtkaXJf cEAKK29sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKK3ByZWZpeCA9IEBwcmVmaXhA Citwcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACitz YmluZGlyID0gQHNiaW5kaXJACitzaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAK K3N1YmRpcnMgPSBAc3ViZGlyc0AKK3N5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKK3Rhcmdl dF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACitTVUJESVJTID0gaGFsCitFWFRSQV9ESVNUID0g S2NvbmZpZyBkZWZjb25maWcgcGF0Y2hlcworYWxsOiBhbGwtcmVjdXJzaXZlCisKKy5TVUZG SVhFUzoKKyQoc3JjZGlyKS9HTlVtYWtlZmlsZS5pbjogQE1BSU5UQUlORVJfTU9ERV9UUlVF QCAkKHNyY2RpcikvR05VbWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCUBm b3IgZGVwIGluICQ/OyBkbyBcCisJICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGlu IFwKKwkgICAgKiQkZGVwKikgXAorCSAgICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1B S0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCBcCisJCSYmIGV4aXQgMDsgXAorCSAg ICAgIGV4aXQgMTs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZWNobyAnIGNkICQodG9w X3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1mb3JlaWduICBhcmNoL3BwYzY0L0dOVW1ha2Vm aWxlJzsgXAorCWNkICQodG9wX3NyY2RpcikgJiYgXAorCSAgJChBVVRPTUFLRSkgLS1mb3Jl aWduICBhcmNoL3BwYzY0L0dOVW1ha2VmaWxlCisuUFJFQ0lPVVM6IEdOVW1ha2VmaWxlCitH TlVtYWtlZmlsZTogJChzcmNkaXIpL0dOVW1ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9j b25maWcuc3RhdHVzCisJQGNhc2UgJyQ/JyBpbiBcCisJICAqY29uZmlnLnN0YXR1cyopIFwK KwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFt LS1yZWZyZXNoOzsgXAorCSAgKikgXAorCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIp ICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmls ZXNfbWF5YmUpJzsgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9j b25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCisJ ZXNhYzsKKworJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2Rpcikv Y29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCisJY2QgJCh0b3BfYnVp bGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCisKKyQodG9w X3NyY2RpcikvY29uZmlndXJlOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2NvbmZp Z3VyZV9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZM QUdTKSBhbS0tcmVmcmVzaAorJChBQ0xPQ0FMX000KTogQE1BSU5UQUlORVJfTU9ERV9UUlVF QCAkKGFtX19hY2xvY2FsX200X2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFL RSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCisKK21vc3RseWNsZWFuLWxpYnRvb2w6 CisJLXJtIC1mICoubG8KKworY2xlYW4tbGlidG9vbDoKKwktcm0gLXJmIC5saWJzIF9saWJz CisKK2Rpc3RjbGVhbi1saWJ0b29sOgorCS1ybSAtZiBsaWJ0b29sCit1bmluc3RhbGwtaW5m by1hbToKKworIyBUaGlzIGRpcmVjdG9yeSdzIHN1YmRpcmVjdG9yaWVzIGFyZSBtb3N0bHkg aW5kZXBlbmRlbnQ7IHlvdSBjYW4gY2QKKyMgaW50byB0aGVtIGFuZCBydW4gYG1ha2UnIHdp dGhvdXQgZ29pbmcgdGhyb3VnaCB0aGlzIE1ha2VmaWxlLgorIyBUbyBjaGFuZ2UgdGhlIHZh bHVlcyBvZiBgbWFrZScgdmFyaWFibGVzOiBpbnN0ZWFkIG9mIGVkaXRpbmcgTWFrZWZpbGVz LAorIyAoMSkgaWYgdGhlIHZhcmlhYmxlIGlzIHNldCBpbiBgY29uZmlnLnN0YXR1cycsIGVk aXQgYGNvbmZpZy5zdGF0dXMnCisjICAgICAod2hpY2ggd2lsbCBjYXVzZSB0aGUgTWFrZWZp bGVzIHRvIGJlIHJlZ2VuZXJhdGVkIHdoZW4geW91IHJ1biBgbWFrZScpOworIyAoMikgb3Ro ZXJ3aXNlLCBwYXNzIHRoZSBkZXNpcmVkIHZhbHVlcyBvbiB0aGUgYG1ha2UnIGNvbW1hbmQg bGluZS4KKyQoUkVDVVJTSVZFX1RBUkdFVFMpOgorCUBzZXQgZm5vcmQgJCRNQUtFRkxBR1M7 IGFtZj0kJDI7IFwKKwlkb3Rfc2Vlbj1ubzsgXAorCXRhcmdldD1gZWNobyAkQCB8IHNlZCBz Ly1yZWN1cnNpdmUvL2A7IFwKKwlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAk JGxpc3Q7IGRvIFwKKwkgIGVjaG8gIk1ha2luZyAkJHRhcmdldCBpbiAkJHN1YmRpciI7IFwK KwkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9ICIuIjsgdGhlbiBcCisJICAgIGRvdF9zZWVuPXll czsgXAorCSAgICBsb2NhbF90YXJnZXQ9IiQkdGFyZ2V0LWFtIjsgXAorCSAgZWxzZSBcCisJ ICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQiOyBcCisJICBmaTsgXAorCSAgKGNkICQkc3Vi ZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICQkbG9jYWxfdGFyZ2V0KSBcCisJICAg fHwgY2FzZSAiJCRhbWYiIGluICo9KikgZXhpdCAxOzsgKmsqKSBmYWlsPXllczs7ICopIGV4 aXQgMTs7IGVzYWM7IFwKKwlkb25lOyBcCisJaWYgdGVzdCAiJCRkb3Rfc2VlbiIgPSAibm8i OyB0aGVuIFwKKwkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICIkJHRhcmdldC1hbSIgfHwg ZXhpdCAxOyBcCisJZmk7IHRlc3QgLXogIiQkZmFpbCIKKworbW9zdGx5Y2xlYW4tcmVjdXJz aXZlIGNsZWFuLXJlY3Vyc2l2ZSBkaXN0Y2xlYW4tcmVjdXJzaXZlIFwKK21haW50YWluZXIt Y2xlYW4tcmVjdXJzaXZlOgorCUBzZXQgZm5vcmQgJCRNQUtFRkxBR1M7IGFtZj0kJDI7IFwK Kwlkb3Rfc2Vlbj1ubzsgXAorCWNhc2UgIiRAIiBpbiBcCisJICBkaXN0Y2xlYW4tKiB8IG1h aW50YWluZXItY2xlYW4tKikgbGlzdD0nJChESVNUX1NVQkRJUlMpJyA7OyBcCisJICAqKSBs aXN0PSckKFNVQkRJUlMpJyA7OyBcCisJZXNhYzsgXAorCXJldj0nJzsgZm9yIHN1YmRpciBp biAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9ICIuIjsgdGhlbiA6OyBl bHNlIFwKKwkgICAgcmV2PSIkJHN1YmRpciAkJHJldiI7IFwKKwkgIGZpOyBcCisJZG9uZTsg XAorCXJldj0iJCRyZXYgLiI7IFwKKwl0YXJnZXQ9YGVjaG8gJEAgfCBzZWQgcy8tcmVjdXJz aXZlLy9gOyBcCisJZm9yIHN1YmRpciBpbiAkJHJldjsgZG8gXAorCSAgZWNobyAiTWFraW5n ICQkdGFyZ2V0IGluICQkc3ViZGlyIjsgXAorCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gIi4i OyB0aGVuIFwKKwkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldC1hbSI7IFwKKwkgIGVsc2Ug XAorCSAgICBsb2NhbF90YXJnZXQ9IiQkdGFyZ2V0IjsgXAorCSAgZmk7IFwKKwkgIChjZCAk JHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSAkJGxvY2FsX3RhcmdldCkgXAor CSAgIHx8IGNhc2UgIiQkYW1mIiBpbiAqPSopIGV4aXQgMTs7ICprKikgZmFpbD15ZXM7OyAq KSBleGl0IDE7OyBlc2FjOyBcCisJZG9uZSAmJiB0ZXN0IC16ICIkJGZhaWwiCit0YWdzLXJl Y3Vyc2l2ZToKKwlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRv IFwKKwkgIHRlc3QgIiQkc3ViZGlyIiA9IC4gfHwgKGNkICQkc3ViZGlyICYmICQoTUFLRSkg JChBTV9NQUtFRkxBR1MpIHRhZ3MpOyBcCisJZG9uZQorY3RhZ3MtcmVjdXJzaXZlOgorCWxp c3Q9JyQoU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgdGVzdCAi JCRzdWJkaXIiID0gLiB8fCAoY2QgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFH UykgY3RhZ3MpOyBcCisJZG9uZQorCitJRDogJChIRUFERVJTKSAkKFNPVVJDRVMpICQoTElT UCkgJChUQUdTX0ZJTEVTKQorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAkKExJU1Ap ICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkg ICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGly KS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBd ID0gMTsgfSBcCisJICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdg OyBcCisJbWtpZCAtZklEICQkdW5pcXVlCit0YWdzOiBUQUdTCisKK1RBR1M6IHRhZ3MtcmVj dXJzaXZlICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAor CQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwl0YWdzPTsgXAorCWhlcmU9YHB3ZGA7IFwKKwlp ZiAoJChFVEFHUykgLS1ldGFncy1pbmNsdWRlIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYx OyB0aGVuIFwKKwkgIGluY2x1ZGVfb3B0aW9uPS0tZXRhZ3MtaW5jbHVkZTsgXAorCSAgZW1w dHlfZml4PS47IFwKKwllbHNlIFwKKwkgIGluY2x1ZGVfb3B0aW9uPS0taW5jbHVkZTsgXAor CSAgZW1wdHlfZml4PTsgXAorCWZpOyBcCisJbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJk aXIgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAuOyB0aGVuIDo7 IGVsc2UgXAorCSAgICB0ZXN0ICEgLWYgJCRzdWJkaXIvVEFHUyB8fCBcCisJICAgICAgdGFn cz0iJCR0YWdzICQkaW5jbHVkZV9vcHRpb249JCRoZXJlLyQkc3ViZGlyL1RBR1MiOyBcCisJ ICBmaTsgXAorCWRvbmU7IFwKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElT UCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAor CSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNk aXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJyAgICB7IGZpbGVzWyQk MF0gPSAxOyB9IFwKKwkgICAgICAgRU5EIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9 J2A7IFwKKwlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCR0YWdzJCR1bmlxdWUiOyB0aGVu IDo7IGVsc2UgXAorCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2Zp eDsgXAorCSAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRB R1NfQVJHUykgXAorCSAgICAkJHRhZ3MgJCR1bmlxdWU7IFwKKwlmaQorY3RhZ3M6IENUQUdT CitDVEFHUzogY3RhZ3MtcmVjdXJzaXZlICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdT X0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwl0YWdzPTsgXAor CWhlcmU9YHB3ZGA7IFwKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkg JChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAg ICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIp LyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJyAgICB7IGZpbGVzWyQkMF0g PSAxOyB9IFwKKwkgICAgICAgRU5EIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9J2A7 IFwKKwl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR0YWdzJCR1bmlxdWUiIFwKKwkgIHx8ICQo Q1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwK KwkgICAgICQkdGFncyAkJHVuaXF1ZQorCitHVEFHUzoKKwloZXJlPWAkKGFtX19jZCkgJCh0 b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAorCSAgJiYgY2QgJCh0b3Bfc3JjZGlyKSBcCisJICAm JiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICQkaGVyZQorCitkaXN0Y2xlYW4tdGFnczoKKwkt cm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncworCitkaXN0ZGly OiAkKERJU1RGSUxFUykKKwlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQg J3N8LnwufGcnYDsgXAorCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8 IHNlZCAnc3wufC58ZydgOyBcCisJbGlzdD0nJChESVNURklMRVMpJzsgZm9yIGZpbGUgaW4g JCRsaXN0OyBkbyBcCisJICBjYXNlICQkZmlsZSBpbiBcCisJICAgICQoc3JjZGlyKS8qKSBm aWxlPWBlY2hvICIkJGZpbGUiIHwgc2VkICJzfF4kJHNyY2RpcnN0cmlwL3x8ImA7OyBcCisJ ICAgICQodG9wX3NyY2RpcikvKikgZmlsZT1gZWNobyAiJCRmaWxlIiB8IHNlZCAic3xeJCR0 b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3wiYDs7IFwKKwkgIGVzYWM7IFwKKwkg IGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBk PSQoc3JjZGlyKTsgZmk7IFwKKwkgIGRpcj1gZWNobyAiJCRmaWxlIiB8IHNlZCAtZSAncywv W14vXSokJCwsJ2A7IFwKKwkgIGlmIHRlc3QgIiQkZGlyIiAhPSAiJCRmaWxlIiAmJiB0ZXN0 ICIkJGRpciIgIT0gIi4iOyB0aGVuIFwKKwkgICAgZGlyPSIvJCRkaXIiOyBcCisJICAgICQo bWtkaXJfcCkgIiQoZGlzdGRpcikkJGRpciI7IFwKKwkgIGVsc2UgXAorCSAgICBkaXI9Jyc7 IFwKKwkgIGZpOyBcCisJICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAorCSAgICBp ZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0 aGVuIFwKKwkgICAgICBjcCAtcFIgJChzcmNkaXIpLyQkZmlsZSAkKGRpc3RkaXIpJCRkaXIg fHwgZXhpdCAxOyBcCisJICAgIGZpOyBcCisJICAgIGNwIC1wUiAkJGQvJCRmaWxlICQoZGlz dGRpcikkJGRpciB8fCBleGl0IDE7IFwKKwkgIGVsc2UgXAorCSAgICB0ZXN0IC1mICQoZGlz dGRpcikvJCRmaWxlIFwKKwkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAkKGRpc3RkaXIpLyQk ZmlsZSBcCisJICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCisJbGlzdD0nJChE SVNUX1NVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3Qg IiQkc3ViZGlyIiA9IC47IHRoZW4gOjsgZWxzZSBcCisJICAgIHRlc3QgLWQgIiQoZGlzdGRp cikvJCRzdWJkaXIiIFwKKwkgICAgfHwgJChta2Rpcl9wKSAiJChkaXN0ZGlyKS8kJHN1YmRp ciIgXAorCSAgICB8fCBleGl0IDE7IFwKKwkgICAgZGlzdGRpcj1gJChhbV9fY2QpICQoZGlz dGRpcikgJiYgcHdkYDsgXAorCSAgICB0b3BfZGlzdGRpcj1gJChhbV9fY2QpICQodG9wX2Rp c3RkaXIpICYmIHB3ZGA7IFwKKwkgICAgKGNkICQkc3ViZGlyICYmIFwKKwkgICAgICAkKE1B S0UpICQoQU1fTUFLRUZMQUdTKSBcCisJICAgICAgICB0b3BfZGlzdGRpcj0iJCR0b3BfZGlz dGRpciIgXAorCSAgICAgICAgZGlzdGRpcj0iJCRkaXN0ZGlyLyQkc3ViZGlyIiBcCisJICAg ICAgICBkaXN0ZGlyKSBcCisJICAgICAgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUK K2NoZWNrLWFtOiBhbGwtYW0KK2NoZWNrOiBjaGVjay1yZWN1cnNpdmUKK2FsbC1hbTogR05V bWFrZWZpbGUKK2luc3RhbGxkaXJzOiBpbnN0YWxsZGlycy1yZWN1cnNpdmUKK2luc3RhbGxk aXJzLWFtOgoraW5zdGFsbDogaW5zdGFsbC1yZWN1cnNpdmUKK2luc3RhbGwtZXhlYzogaW5z dGFsbC1leGVjLXJlY3Vyc2l2ZQoraW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtcmVjdXJz aXZlCit1bmluc3RhbGw6IHVuaW5zdGFsbC1yZWN1cnNpdmUKKworaW5zdGFsbC1hbTogYWxs LWFtCisJQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxs LWRhdGEtYW0KKworaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stcmVjdXJzaXZlCitpbnN0 YWxsLXN0cmlwOgorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0i JChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICBpbnN0YWxsX3NoX1BST0dSQU09IiQo SU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKwkgIGB0 ZXN0IC16ICckKFNUUklQKScgfHwgXAorCSAgICBlY2hvICJJTlNUQUxMX1BST0dSQU1fRU5W PVNUUklQUFJPRz0nJChTVFJJUCknImAgaW5zdGFsbAorbW9zdGx5Y2xlYW4tZ2VuZXJpYzoK KworY2xlYW4tZ2VuZXJpYzoKKworZGlzdGNsZWFuLWdlbmVyaWM6CisJLXRlc3QgLXogIiQo Q09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCisK K21haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKKwlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGlu dGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCisJQGVjaG8gIml0IGRlbGV0ZXMgZmls ZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgorY2xlYW46 IGNsZWFuLXJlY3Vyc2l2ZQorCitjbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0 b29sIG1vc3RseWNsZWFuLWFtCisKK2Rpc3RjbGVhbjogZGlzdGNsZWFuLXJlY3Vyc2l2ZQor CS1ybSAtZiBHTlVtYWtlZmlsZQorZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4t Z2VuZXJpYyBkaXN0Y2xlYW4tbGlidG9vbCBcCisJZGlzdGNsZWFuLXRhZ3MKKworZHZpOiBk dmktcmVjdXJzaXZlCisKK2R2aS1hbToKKworaHRtbDogaHRtbC1yZWN1cnNpdmUKKworaW5m bzogaW5mby1yZWN1cnNpdmUKKworaW5mby1hbToKKworaW5zdGFsbC1kYXRhLWFtOgorCitp bnN0YWxsLWV4ZWMtYW06CisKK2luc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLXJlY3Vyc2l2 ZQorCitpbnN0YWxsLW1hbjoKKworaW5zdGFsbGNoZWNrLWFtOgorCittYWludGFpbmVyLWNs ZWFuOiBtYWludGFpbmVyLWNsZWFuLXJlY3Vyc2l2ZQorCS1ybSAtZiBHTlVtYWtlZmlsZQor bWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2Vu ZXJpYworCittb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tcmVjdXJzaXZlCisKK21vc3RseWNs ZWFuLWFtOiBtb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wKKworcGRm OiBwZGYtcmVjdXJzaXZlCisKK3BkZi1hbToKKworcHM6IHBzLXJlY3Vyc2l2ZQorCitwcy1h bToKKwordW5pbnN0YWxsLWFtOiB1bmluc3RhbGwtaW5mby1hbQorCit1bmluc3RhbGwtaW5m bzogdW5pbnN0YWxsLWluZm8tcmVjdXJzaXZlCisKKy5QSE9OWTogJChSRUNVUlNJVkVfVEFS R0VUUykgQ1RBR1MgR1RBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBcCisJY2xlYW4g Y2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIGNsZWFuLXJlY3Vyc2l2ZSBjdGFncyBcCisJ Y3RhZ3MtcmVjdXJzaXZlIGRpc3RjbGVhbiBkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4t bGlidG9vbCBcCisJZGlzdGNsZWFuLXJlY3Vyc2l2ZSBkaXN0Y2xlYW4tdGFncyBkaXN0ZGly IGR2aSBkdmktYW0gaHRtbCBcCisJaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBpbnN0 YWxsLWFtIGluc3RhbGwtZGF0YSBcCisJaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZXhlYyBp bnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1pbmZvIFwKKwlpbnN0YWxsLWluZm8tYW0gaW5zdGFs bC1tYW4gaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgXAorCWluc3RhbGxjaGVjay1hbSBp bnN0YWxsZGlycyBpbnN0YWxsZGlycy1hbSBtYWludGFpbmVyLWNsZWFuIFwKKwltYWludGFp bmVyLWNsZWFuLWdlbmVyaWMgbWFpbnRhaW5lci1jbGVhbi1yZWN1cnNpdmUgXAorCW1vc3Rs eWNsZWFuIG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBcCisJbW9z dGx5Y2xlYW4tcmVjdXJzaXZlIHBkZiBwZGYtYW0gcHMgcHMtYW0gdGFncyB0YWdzLXJlY3Vy c2l2ZSBcCisJdW5pbnN0YWxsIHVuaW5zdGFsbC1hbSB1bmluc3RhbGwtaW5mby1hbQorCisj IFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBh bGwgdmFyaWFibGVzLgorIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0 IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCisuTk9FWFBPUlQ6CmRpZmYgLU5ydSBmdXNpb24t MC43LjEvYXJjaC9wcGM2NC9LY29uZmlnIGZ1c2lvbi0wLjcuMS1wcGM2NC1kZXZlbC9hcmNo L3BwYzY0L0tjb25maWcKLS0tIGZ1c2lvbi0wLjcuMS9hcmNoL3BwYzY0L0tjb25maWcJMTk3 MC0wMS0wMSAwMjowMDowMC4wMDAwMDAwMDAgKzAyMDAKKysrIGZ1c2lvbi0wLjcuMS1wcGM2 NC1kZXZlbC9hcmNoL3BwYzY0L0tjb25maWcJMjAwNS0wNS0xNiAxNTozNToxOC4wMDAwMDAw MDAgKzAzMDAKQEAgLTAsMCArMSw3MCBAQAorbWFpbm1lbnUgIlJUQUkvcG93ZXJwYzY0IGNv bmZpZ3VyYXRpb24iCisKK3NvdXJjZSBLY29uZmlnCisKK3NvdXJjZSAibnVjbGV1cy9LY29u ZmlnIgorCittZW51ICJNYWNoaW5lIChwb3dlcnBjNjQpIgorCitjb25maWcgUlRBSV9IV19G UFUKKwlib29sICJFbmFibGUgRlBVIHN1cHBvcnQiCisJZGVmYXVsdCB5CisJaGVscAorCVRo ZSBGUFUgZXhlY3V0ZXMgaW5zdHJ1Y3Rpb25zIGZyb20gdGhlIHByb2Nlc3NvcidzIG5vcm1h bAorCWluc3RydWN0aW9uIHN0cmVhbS4gSXQgY2FuIGhhbmRsZSB0aGUgdHlwZXMgb2YgaGln aC1wcmVjaXNpb24KKwlmbG9hdGluZy1wb2ludCBwcm9jZXNzaW5nIG9wZXJhdGlvbnMgY29t bW9ubHkgZm91bmQgaW4KKwlzY2llbnRpZmljLCBlbmdpbmVlcmluZywgYW5kIGJ1c2luZXNz IGFwcGxpY2F0aW9ucy4gIEVuYWJsaW5nCisJRlBVIHN1cHBvcnQgb24gYSBwbGF0Zm9ybSBw cm92aWRpbmcgdGhpcyBoYXJkd2FyZSBjb21wb25lbnQKKwltYXkgZ3JlYXRseSBpbXByb3Zl IHBlcmZvcm1hbmNlcy4KKworY29uZmlnIFJUQUlfSFdfQVBFUklPRElDX1RJTUVSCisJYm9v bCAiRW5hYmxlIGFwZXJpb2RpYyB0aW1lciBzdXBwb3J0IgorCWRlZmF1bHQgeQorCWhlbHAK KwlUaGUgbnVjbGV1cyBjYW4gaGFuZGxlIGFwZXJpb2RpYyB0aW1lcnMgdGhhdCBjYW4gYmUK Kwlwcm9ncmFtbWVkIGluIG9uZS1zaG90IG1vZGUgb24gdGhpcyBhcmNoaXRlY3R1cmUuIElu IHRoaXMKKwltb2RlLCB0aW1pbmcgYWNjdXJhY3kgaXMgaGlnaGVyIC0gc2luY2UgaXQgaXMg bm90IHJvdW5kZWQgdG8gYQorCWNvbnN0YW50IHRpbWUgc2xpY2UgLSBhdCB0aGUgZXhwZW5z ZSBvZiBhIGxlc3NlciBlZmZpY2ljZW5jeQorCXdoZW4gbWFueSB0aW1lcnMgYXJlIHNpbXVs dGFuZW91c2x5IGFjdGl2ZS4gVGhlIGFwZXJpb2RpYyBtb2RlCisJZ2l2ZXMgYmV0dGVyIHJl c3VsdHMgaW4gY29uZmlndXJhdGlvbiBpbnZvbHZpbmcgYSBmZXcgdGhyZWFkcworCXJlcXVl c3RpbmcgdGltaW5nIHNlcnZpY2VzIG92ZXIgZGlmZmVyZW50IHRpbWUgc2NhbGVzIHRoYXQK KwljYW5ub3QgYmUgZWFzaWx5IGV4cHJlc3NlZCBhcyBtdWx0aXBsZXMgb2YgYSBzaW5nbGUg YmFzZSB0aWNrLAorCW9yIHdvdWxkIGxlYWQgdG8gYSB3YXN0ZSBvZiBoaWdoIGZyZXF1ZW5j eSBwZXJpb2RpY2FsCisJdGlja3MuIFlvdSBjYW4gZGlzYWJsZSB0aGlzIHN1cHBvcnQgZm9y IHRoaXMgYXJjaGl0ZWN0dXJlIHRvCisJc2F2ZSBhIGZldyBodW5kcmVkcyBieXRlcyBpZiB5 b3UgcGxhbiB0byB1c2UgdGhlIHN5c3RlbSB0aW1lcgorCWluIHBlcmlvZGljIG1vZGUgb25s eS4KKworY29uZmlnIFJUQUlfSFdfVElNRVJfTEFURU5DWQorCWRlcGVuZHMgb24gUlRBSV9P UFRfRVhQRVJUCisJc3RyaW5nICJUaW1lciB0dW5pbmcgbGF0ZW5jeSAobnMpIgorCWRlZmF1 bHQgMAorCWhlbHAKKwlUaGlzIHBhcmFtZXRlciBhY2NvdW50cyBmb3IgdGhlIHRpbWUgKGlu IG5hbm9zZWNvbmRzKSBuZWVkZWQKKwl0byBwcm9ncmFtIHRoZSB1bmRlcmx5aW5nIHRpbWUg c291cmNlIGluIG9uZS1zaG90IHRpbWluZyBtb2RlLgorCVRoaXMgdmFsdWUgd2lsbCBiZSB1 c2VkIHRvIHJlZHVjZSB0aGUgc2NoZWR1bGluZyBqaXR0ZXIgaW5kdWNlZAorCWJ5IHRoZSB0 aW1lIG5lZWRlZCB0byBzZXR1cCB0aGUgdGltZXIgZm9yIGl0cyBuZXh0IHNob3QuIEEKKwlk ZWZhdWx0IHZhbHVlIG9mIDAgKHJlY29tbWVuZGVkKSB3aWxsIGNhdXNlIHRoaXMgdmFsdWUg dG8gYmUKKwllc3RpbWF0ZWQgYnkgdGhlIG51Y2xldXMgYXQgc3RhcnR1cC4KKworY29uZmln IFJUQUlfSFdfU0NIRURfTEFURU5DWQorCWRlcGVuZHMgb24gUlRBSV9PUFRfRVhQRVJUCisJ c3RyaW5nICJTY2hlZHVsaW5nIGxhdGVuY3kgKG5zKSIKKwlkZWZhdWx0IDAKKwloZWxwCisJ U2NoZWR1bGluZyBsYXRlbmN5IGlzIHRoZSB0aW1lIGJldHdlZW4gdGhlIHRlcm1pbmF0aW9u IG9mIGFuCisJaW50ZXJydXB0IGhhbmRsZXIgYW5kIHRoZSBleGVjdXRpb24gb2YgdGhlIGZp cnN0IGluc3RydWN0aW9uCisJb2YgdGhlIHJlYWwtdGltZSB0aHJlYWQgdGhpcyBoYW5kbGVy IHJlc3VtZXMuIEEKKwlkZWZhdWx0IHZhbHVlIG9mIDAgKHJlY29tbWVuZGVkKSB3aWxsIGNh dXNlIHRoaXMgdmFsdWUgdG8gYmUKKwllc3RpbWF0ZWQgYnkgdGhlIG51Y2xldXMgYXQgc3Rh cnR1cC4KKworZW5kbWVudQorCitzb3VyY2UgInNraW5zL0tjb25maWciCisKK21lbnUgIkRy aXZlcnMiCisKK3NvdXJjZSAiZHJpdmVycy9LY29uZmlnIgorCitlbmRtZW51CisKK3NvdXJj ZSAic2ltL0tjb25maWciCmRpZmYgLU5ydSBmdXNpb24tMC43LjEvYXJjaC9wcGM2NC9kZWZj b25maWcgZnVzaW9uLTAuNy4xLXBwYzY0LWRldmVsL2FyY2gvcHBjNjQvZGVmY29uZmlnCi0t LSBmdXNpb24tMC43LjEvYXJjaC9wcGM2NC9kZWZjb25maWcJMTk3MC0wMS0wMSAwMjowMDow MC4wMDAwMDAwMDAgKzAyMDAKKysrIGZ1c2lvbi0wLjcuMS1wcGM2NC1kZXZlbC9hcmNoL3Bw YzY0L2RlZmNvbmZpZwkyMDA1LTA1LTE2IDE1OjI1OjA1LjAwMDAwMDAwMCArMDMwMApAQCAt MCwwICsxLDY2IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmln OiBkb24ndCBlZGl0CisjCitDT05GSUdfTU9EVUxFUz15CitDT05GSUdfUlRBSV9WRVJTSU9O PSIwLjcgKGZ1c2lvbikiCisKKyMKKyMgR2VuZXJhbAorIworQ09ORklHX1JUQUlfSU5TVEFM TERJUj0iL3Vzci9yZWFsdGltZSIKK0NPTkZJR19SVEFJX0xJTlVYRElSPSIvbGliL21vZHVs ZXMvYHVuYW1lIC1yYC9idWlsZCIKKworIworIyBEb2N1bWVudGF0aW9uCisjCisjIENPTkZJ R19SVEFJX0RPQ19ET1ggaXMgbm90IHNldAorIyBDT05GSUdfUlRBSV9ET0NfTEFURVhfTk9O U1RPUCBpcyBub3Qgc2V0CisjIENPTkZJR19SVEFJX0RPQ19EQlggaXMgbm90IHNldAorIyBD T05GSUdfUlRBSV9PUFRfRVhQRVJUIGlzIG5vdCBzZXQKKworIworIyBOdWNsZXVzCisjCitD T05GSUdfUlRBSV9PUFRfRlVTSU9OPXkKK0NPTkZJR19SVEFJX09QVF9QSVBFPXkKK0NPTkZJ R19SVEFJX09QVF9QSVBFX05SREVWPSIzMiIKK0NPTkZJR19SVEFJX09QVF9QRVJDUFVfVElN RVI9eQorCisjCisjIE1hY2hpbmUgKHBvd2VycGM2NCkKKyMKK0NPTkZJR19SVEFJX0hXX0ZQ VT15CitDT05GSUdfUlRBSV9IV19BUEVSSU9ESUNfVElNRVI9eQorCisjCisjIEFQSXMKKyMK K0NPTkZJR19SVEFJX1NLSU5fTkFUSVZFPXkKK0NPTkZJR19SVEFJX09QVF9OQVRJVkVfUkVH SVNUUlk9eQorQ09ORklHX1JUQUlfT1BUX05BVElWRV9SRUdJU1RSWV9OUlNMT1RTPSI1MTIi CitDT05GSUdfUlRBSV9PUFRfTkFUSVZFX1BJUEU9eQorQ09ORklHX1JUQUlfT1BUX05BVElW RV9QSVBFX0JVRlNaPSI0MDk2IgorQ09ORklHX1JUQUlfT1BUX05BVElWRV9TRU09eQorQ09O RklHX1JUQUlfT1BUX05BVElWRV9FVkVOVD15CitDT05GSUdfUlRBSV9PUFRfTkFUSVZFX01V VEVYPXkKK0NPTkZJR19SVEFJX09QVF9OQVRJVkVfQ09ORD15CitDT05GSUdfUlRBSV9PUFRf TkFUSVZFX1FVRVVFPXkKK0NPTkZJR19SVEFJX09QVF9OQVRJVkVfSEVBUD15CitDT05GSUdf UlRBSV9PUFRfTkFUSVZFX0FMQVJNPXkKK0NPTkZJR19SVEFJX09QVF9OQVRJVkVfSU5UUj15 CisjIENPTkZJR19SVEFJX1NLSU5fUE9TSVggaXMgbm90IHNldAorIyBDT05GSUdfUlRBSV9T S0lOX1BTT1MgaXMgbm90IHNldAorIyBDT05GSUdfUlRBSV9TS0lOX1VJVFJPTiBpcyBub3Qg c2V0CisjIENPTkZJR19SVEFJX1NLSU5fVlJUWCBpcyBub3Qgc2V0CisjIENPTkZJR19SVEFJ X1NLSU5fVlhXT1JLUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVEFJX09QVF9VVk0gaXMgbm90 IHNldAorCisjCisjIERyaXZlcnMKKyMKKyMgQ09ORklHX1JUQUlfRFJJVkVSU18xNjU1MEEg aXMgbm90IHNldAorCisjCisjIFNpbXVsYXRvcgorIworIyBDT05GSUdfUlRBSV9NVk0gaXMg bm90IHNldApkaWZmIC1OcnUgZnVzaW9uLTAuNy4xL2FyY2gvcHBjNjQvaGFsL0dOVW1ha2Vm aWxlLmFtIGZ1c2lvbi0wLjcuMS1wcGM2NC1kZXZlbC9hcmNoL3BwYzY0L2hhbC9HTlVtYWtl ZmlsZS5hbQotLS0gZnVzaW9uLTAuNy4xL2FyY2gvcHBjNjQvaGFsL0dOVW1ha2VmaWxlLmFt CTE5NzAtMDEtMDEgMDI6MDA6MDAuMDAwMDAwMDAwICswMjAwCisrKyBmdXNpb24tMC43LjEt cHBjNjQtZGV2ZWwvYXJjaC9wcGM2NC9oYWwvR05VbWFrZWZpbGUuYW0JMjAwNC0xMi0yNCAx MToxMjoxMS4wMDAwMDAwMDAgKzAyMDAKQEAgLTAsMCArMSwzNCBAQAorbW9kdWxlZGlyID0g JChERVNURElSKUBSVEFJX01PRFVMRV9ESVJACisKK21vZGV4dCA9IEBSVEFJX01PRFVMRV9F WFRACisKK0NST1NTX0NPTVBJTEUgPSBAQ1JPU1NfQ09NUElMRUAKKworbGliaGFsX1NSQyA9 IGhhbC5jIHN3aXRjaC5TCisKK2lmIENPTkZJR19SVEFJX0hXX0ZQVQorbGliaGFsX1NSQyAr PSBmcHUuUworZW5kaWYKKworcnRhaV9oYWwua286IEBSVEFJX0tCVUlMRF9FTlZACitydGFp X2hhbC5rbzogJChsaWJoYWxfU1JDKSBGT1JDRQorCUBSVEFJX0tCVUlMRF9UT1BAIFwKKwlA UlRBSV9LQlVJTERfQ01EQCBydGFpX2V4dHJhZGVmPSJAUlRBSV9LTU9EX0NGTEFHU0AiIFwK KwlAUlRBSV9LQlVJTERfQk9UVE9NQAorCitjbGVhbi1sb2NhbDoKKwlAUlRBSV9LQlVJTERf Q0xFQU5ACisKK2FsbC1sb2NhbDogcnRhaV9oYWwkKG1vZGV4dCkKK2lmIENPTkZJR19SVEFJ X09MRF9GQVNISU9ORURfQlVJTEQKKwkkKG1raW5zdGFsbGRpcnMpICQodG9wX3NyY2Rpcikv bW9kdWxlcworCSQoSU5TVEFMTF9EQVRBKSAkXiAkKHRvcF9zcmNkaXIpL21vZHVsZXMKK2Vu ZGlmCisKK2luc3RhbGwtZXhlYy1sb2NhbDogcnRhaV9oYWwkKG1vZGV4dCkKKwkkKG1raW5z dGFsbGRpcnMpICQobW9kdWxlZGlyKQorCSQoSU5TVEFMTF9EQVRBKSAkPCAkKG1vZHVsZWRp cikKKworLlBIT05ZOiBGT1JDRQorCitFWFRSQV9ESVNUID0gJChsaWJoYWxfU1JDKSBmcHUu UyBNYWtlZmlsZS5rYnVpbGQKZGlmZiAtTnJ1IGZ1c2lvbi0wLjcuMS9hcmNoL3BwYzY0L2hh bC9HTlVtYWtlZmlsZS5pbiBmdXNpb24tMC43LjEtcHBjNjQtZGV2ZWwvYXJjaC9wcGM2NC9o YWwvR05VbWFrZWZpbGUuaW4KLS0tIGZ1c2lvbi0wLjcuMS9hcmNoL3BwYzY0L2hhbC9HTlVt YWtlZmlsZS5pbgkxOTcwLTAxLTAxIDAyOjAwOjAwLjAwMDAwMDAwMCArMDIwMAorKysgZnVz aW9uLTAuNy4xLXBwYzY0LWRldmVsL2FyY2gvcHBjNjQvaGFsL0dOVW1ha2VmaWxlLmluCTIw MDUtMDUtMTYgMTU6MzI6NTguMDAwMDAwMDAwICswMzAwCkBAIC0wLDAgKzEsNDQ3IEBACisj IEdOVW1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjkuMiBmcm9tIEdOVW1h a2VmaWxlLmFtLgorIyBAY29uZmlndXJlX2lucHV0QAorCisjIENvcHlyaWdodCAoQykgMTk5 NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwKKyMg MjAwMywgMjAwNCAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIFRoaXMgTWFr ZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv bgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmli dXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0 aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1 dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VU IEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0 CisjIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ VE5FU1MgRk9SIEEKKyMgUEFSVElDVUxBUiBQVVJQT1NFLgorCitAU0VUX01BS0VACitzcmNk aXIgPSBAc3JjZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAorVlBBVEggPSBAc3Jj ZGlyQAorcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACitwa2dsaWJkaXIgPSAk KGxpYmRpcikvQFBBQ0tBR0VACitwa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFD S0FHRUAKK3RvcF9idWlsZGRpciA9IC4uLy4uLy4uCithbV9fY2QgPSBDRFBBVEg9IiQke1pT SF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCitJTlNUQUxMID0gQElOU1RB TExACitpbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAoraW5zdGFs bF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYworaW5zdGFsbF9zaF9TQ1JJUFQgPSAk KGluc3RhbGxfc2gpIC1jCitJTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQordHJh bnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQorTk9STUFMX0lOU1RBTEwgPSA6 CitQUkVfSU5TVEFMTCA9IDoKK1BPU1RfSU5TVEFMTCA9IDoKK05PUk1BTF9VTklOU1RBTEwg PSA6CitQUkVfVU5JTlNUQUxMID0gOgorUE9TVF9VTklOU1RBTEwgPSA6CitidWlsZF90cmlw bGV0ID0gQGJ1aWxkQAoraG9zdF90cmlwbGV0ID0gQGhvc3RACitAQ09ORklHX1JUQUlfSFdf RlBVX1RSVUVAYW1fX2FwcGVuZF8xID0gZnB1LlMKK3N1YmRpciA9IGFyY2gvcHBjNjQvaGFs CitESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9HTlVtYWtlZmlsZS5hbSAkKHNyY2RpcikvR05V bWFrZWZpbGUuaW4KK0FDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKK2Ft X19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL2NvbmZpZy9hdXRvY29uZi9kb2Ni b29rLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5pbgorYW1fX2NvbmZpZ3VyZV9k ZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMp IFwKKwkkKEFDTE9DQUxfTTQpCitta2luc3RhbGxkaXJzID0gJChTSEVMTCkgJCh0b3Bfc3Jj ZGlyKS9jb25maWcvYXV0b2NvbmYvbWtpbnN0YWxsZGlycworQ09ORklHX0hFQURFUiA9ICQo dG9wX2J1aWxkZGlyKS9ydGFpX2NvbmZpZy5oCitDT05GSUdfQ0xFQU5fRklMRVMgPQorU09V UkNFUyA9CitESVNUX1NPVVJDRVMgPQorRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChE SVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKK0FDTE9DQUwgPSBAQUNM T0NBTEAKK0FNREVQX0ZBTFNFID0gQEFNREVQX0ZBTFNFQAorQU1ERVBfVFJVRSA9IEBBTURF UF9UUlVFQAorQU1UQVIgPSBAQU1UQVJACitBUiA9IEBBUkAKK0FVVE9DT05GID0gQEFVVE9D T05GQAorQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAorQVVUT01BS0UgPSBAQVVUT01BS0VA CitBV0sgPSBAQVdLQAorQ0MgPSBAQ0NACitDQ0FTID0gQENDQVNACitDQ0FTRkxBR1MgPSBA Q0NBU0ZMQUdTQAorQ0NERVBNT0RFID0gQENDREVQTU9ERUAKK0NGTEFHUyA9IEBDRkxBR1NA CitDT05GSUdfTFRUX0ZBTFNFID0gQENPTkZJR19MVFRfRkFMU0VACitDT05GSUdfTFRUX1RS VUUgPSBAQ09ORklHX0xUVF9UUlVFQAorQ09ORklHX1BQQzY0X0ZBTFNFID0gQENPTkZJR19Q UEM2NF9GQUxTRUAKK0NPTkZJR19QUEM2NF9UUlVFID0gQENPTkZJR19QUEM2NF9UUlVFQAor Q09ORklHX1JUQUlfRE9DX0RPWF9GQUxTRSA9IEBDT05GSUdfUlRBSV9ET0NfRE9YX0ZBTFNF QAorQ09ORklHX1JUQUlfRE9DX0RPWF9UUlVFID0gQENPTkZJR19SVEFJX0RPQ19ET1hfVFJV RUAKK0NPTkZJR19SVEFJX0RSSVZFUlNfMTY1NTBBX0ZBTFNFID0gQENPTkZJR19SVEFJX0RS SVZFUlNfMTY1NTBBX0ZBTFNFQAorQ09ORklHX1JUQUlfRFJJVkVSU18xNjU1MEFfVFJVRSA9 IEBDT05GSUdfUlRBSV9EUklWRVJTXzE2NTUwQV9UUlVFQAorQ09ORklHX1JUQUlfSFdfRlBV X0ZBTFNFID0gQENPTkZJR19SVEFJX0hXX0ZQVV9GQUxTRUAKK0NPTkZJR19SVEFJX0hXX0ZQ VV9UUlVFID0gQENPTkZJR19SVEFJX0hXX0ZQVV9UUlVFQAorQ09ORklHX1JUQUlfSFdfU01J X0RFVEVDVF9GQUxTRSA9IEBDT05GSUdfUlRBSV9IV19TTUlfREVURUNUX0ZBTFNFQAorQ09O RklHX1JUQUlfSFdfU01JX0RFVEVDVF9UUlVFID0gQENPTkZJR19SVEFJX0hXX1NNSV9ERVRF Q1RfVFJVRUAKK0NPTkZJR19SVEFJX01BSU5UX0ZBTFNFID0gQENPTkZJR19SVEFJX01BSU5U X0ZBTFNFQAorQ09ORklHX1JUQUlfTUFJTlRfR0NIX0ZBTFNFID0gQENPTkZJR19SVEFJX01B SU5UX0dDSF9GQUxTRUAKK0NPTkZJR19SVEFJX01BSU5UX0dDSF9UUlVFID0gQENPTkZJR19S VEFJX01BSU5UX0dDSF9UUlVFQAorQ09ORklHX1JUQUlfTUFJTlRfUEdNX0ZBTFNFID0gQENP TkZJR19SVEFJX01BSU5UX1BHTV9GQUxTRUAKK0NPTkZJR19SVEFJX01BSU5UX1BHTV9UUlVF ID0gQENPTkZJR19SVEFJX01BSU5UX1BHTV9UUlVFQAorQ09ORklHX1JUQUlfTUFJTlRfVFJV RSA9IEBDT05GSUdfUlRBSV9NQUlOVF9UUlVFQAorQ09ORklHX1JUQUlfT0xEX0ZBU0hJT05F RF9CVUlMRF9GQUxTRSA9IEBDT05GSUdfUlRBSV9PTERfRkFTSElPTkVEX0JVSUxEX0ZBTFNF QAorQ09ORklHX1JUQUlfT0xEX0ZBU0hJT05FRF9CVUlMRF9UUlVFID0gQENPTkZJR19SVEFJ X09MRF9GQVNISU9ORURfQlVJTERfVFJVRUAKK0NPTkZJR19SVEFJX09QVF9GVVNJT05fRkFM U0UgPSBAQ09ORklHX1JUQUlfT1BUX0ZVU0lPTl9GQUxTRUAKK0NPTkZJR19SVEFJX09QVF9G VVNJT05fVFJVRSA9IEBDT05GSUdfUlRBSV9PUFRfRlVTSU9OX1RSVUVACitDT05GSUdfUlRB SV9PUFRfTkFUSVZFX0FMQVJNX0ZBTFNFID0gQENPTkZJR19SVEFJX09QVF9OQVRJVkVfQUxB Uk1fRkFMU0VACitDT05GSUdfUlRBSV9PUFRfTkFUSVZFX0FMQVJNX1RSVUUgPSBAQ09ORklH X1JUQUlfT1BUX05BVElWRV9BTEFSTV9UUlVFQAorQ09ORklHX1JUQUlfT1BUX05BVElWRV9D T05EX0ZBTFNFID0gQENPTkZJR19SVEFJX09QVF9OQVRJVkVfQ09ORF9GQUxTRUAKK0NPTkZJ R19SVEFJX09QVF9OQVRJVkVfQ09ORF9UUlVFID0gQENPTkZJR19SVEFJX09QVF9OQVRJVkVf Q09ORF9UUlVFQAorQ09ORklHX1JUQUlfT1BUX05BVElWRV9FVkVOVF9GQUxTRSA9IEBDT05G SUdfUlRBSV9PUFRfTkFUSVZFX0VWRU5UX0ZBTFNFQAorQ09ORklHX1JUQUlfT1BUX05BVElW RV9FVkVOVF9UUlVFID0gQENPTkZJR19SVEFJX09QVF9OQVRJVkVfRVZFTlRfVFJVRUAKK0NP TkZJR19SVEFJX09QVF9OQVRJVkVfSEVBUF9GQUxTRSA9IEBDT05GSUdfUlRBSV9PUFRfTkFU SVZFX0hFQVBfRkFMU0VACitDT05GSUdfUlRBSV9PUFRfTkFUSVZFX0hFQVBfVFJVRSA9IEBD T05GSUdfUlRBSV9PUFRfTkFUSVZFX0hFQVBfVFJVRUAKK0NPTkZJR19SVEFJX09QVF9OQVRJ VkVfSU5UUl9GQUxTRSA9IEBDT05GSUdfUlRBSV9PUFRfTkFUSVZFX0lOVFJfRkFMU0VACitD T05GSUdfUlRBSV9PUFRfTkFUSVZFX0lOVFJfVFJVRSA9IEBDT05GSUdfUlRBSV9PUFRfTkFU SVZFX0lOVFJfVFJVRUAKK0NPTkZJR19SVEFJX09QVF9OQVRJVkVfTVVURVhfRkFMU0UgPSBA Q09ORklHX1JUQUlfT1BUX05BVElWRV9NVVRFWF9GQUxTRUAKK0NPTkZJR19SVEFJX09QVF9O QVRJVkVfTVVURVhfVFJVRSA9IEBDT05GSUdfUlRBSV9PUFRfTkFUSVZFX01VVEVYX1RSVUVA CitDT05GSUdfUlRBSV9PUFRfTkFUSVZFX1BJUEVfRkFMU0UgPSBAQ09ORklHX1JUQUlfT1BU X05BVElWRV9QSVBFX0ZBTFNFQAorQ09ORklHX1JUQUlfT1BUX05BVElWRV9QSVBFX1RSVUUg PSBAQ09ORklHX1JUQUlfT1BUX05BVElWRV9QSVBFX1RSVUVACitDT05GSUdfUlRBSV9PUFRf TkFUSVZFX1FVRVVFX0ZBTFNFID0gQENPTkZJR19SVEFJX09QVF9OQVRJVkVfUVVFVUVfRkFM U0VACitDT05GSUdfUlRBSV9PUFRfTkFUSVZFX1FVRVVFX1RSVUUgPSBAQ09ORklHX1JUQUlf T1BUX05BVElWRV9RVUVVRV9UUlVFQAorQ09ORklHX1JUQUlfT1BUX05BVElWRV9SRUdJU1RS WV9GQUxTRSA9IEBDT05GSUdfUlRBSV9PUFRfTkFUSVZFX1JFR0lTVFJZX0ZBTFNFQAorQ09O RklHX1JUQUlfT1BUX05BVElWRV9SRUdJU1RSWV9UUlVFID0gQENPTkZJR19SVEFJX09QVF9O QVRJVkVfUkVHSVNUUllfVFJVRUAKK0NPTkZJR19SVEFJX09QVF9OQVRJVkVfU0VNX0ZBTFNF ID0gQENPTkZJR19SVEFJX09QVF9OQVRJVkVfU0VNX0ZBTFNFQAorQ09ORklHX1JUQUlfT1BU X05BVElWRV9TRU1fVFJVRSA9IEBDT05GSUdfUlRBSV9PUFRfTkFUSVZFX1NFTV9UUlVFQAor Q09ORklHX1JUQUlfT1BUX1BJUEVfRkFMU0UgPSBAQ09ORklHX1JUQUlfT1BUX1BJUEVfRkFM U0VACitDT05GSUdfUlRBSV9PUFRfUElQRV9UUlVFID0gQENPTkZJR19SVEFJX09QVF9QSVBF X1RSVUVACitDT05GSUdfUlRBSV9PUFRfVVZNX0ZBTFNFID0gQENPTkZJR19SVEFJX09QVF9V Vk1fRkFMU0VACitDT05GSUdfUlRBSV9PUFRfVVZNX1RSVUUgPSBAQ09ORklHX1JUQUlfT1BU X1VWTV9UUlVFQAorQ09ORklHX1JUQUlfU0tJTl9OQVRJVkVfRkFMU0UgPSBAQ09ORklHX1JU QUlfU0tJTl9OQVRJVkVfRkFMU0VACitDT05GSUdfUlRBSV9TS0lOX05BVElWRV9UUlVFID0g QENPTkZJR19SVEFJX1NLSU5fTkFUSVZFX1RSVUVACitDT05GSUdfUlRBSV9TS0lOX1BPU0lY X0ZBTFNFID0gQENPTkZJR19SVEFJX1NLSU5fUE9TSVhfRkFMU0VACitDT05GSUdfUlRBSV9T S0lOX1BPU0lYX1RSVUUgPSBAQ09ORklHX1JUQUlfU0tJTl9QT1NJWF9UUlVFQAorQ09ORklH X1JUQUlfU0tJTl9QU09TX0ZBTFNFID0gQENPTkZJR19SVEFJX1NLSU5fUFNPU19GQUxTRUAK K0NPTkZJR19SVEFJX1NLSU5fUFNPU19UUlVFID0gQENPTkZJR19SVEFJX1NLSU5fUFNPU19U UlVFQAorQ09ORklHX1JUQUlfU0tJTl9VSVRST05fRkFMU0UgPSBAQ09ORklHX1JUQUlfU0tJ Tl9VSVRST05fRkFMU0VACitDT05GSUdfUlRBSV9TS0lOX1VJVFJPTl9UUlVFID0gQENPTkZJ R19SVEFJX1NLSU5fVUlUUk9OX1RSVUVACitDT05GSUdfUlRBSV9TS0lOX1ZSVFhfRkFMU0Ug PSBAQ09ORklHX1JUQUlfU0tJTl9WUlRYX0ZBTFNFQAorQ09ORklHX1JUQUlfU0tJTl9WUlRY X1RSVUUgPSBAQ09ORklHX1JUQUlfU0tJTl9WUlRYX1RSVUVACitDT05GSUdfUlRBSV9TS0lO X1ZYV09SS1NfRkFMU0UgPSBAQ09ORklHX1JUQUlfU0tJTl9WWFdPUktTX0ZBTFNFQAorQ09O RklHX1JUQUlfU0tJTl9WWFdPUktTX1RSVUUgPSBAQ09ORklHX1JUQUlfU0tJTl9WWFdPUktT X1RSVUVACitDT05GSUdfU01QX0ZBTFNFID0gQENPTkZJR19TTVBfRkFMU0VACitDT05GSUdf U01QX1RSVUUgPSBAQ09ORklHX1NNUF9UUlVFQAorQ09ORklHX1g4Nl9GQUxTRSA9IEBDT05G SUdfWDg2X0ZBTFNFQAorQ09ORklHX1g4Nl9MT0NBTF9BUElDX0ZBTFNFID0gQENPTkZJR19Y ODZfTE9DQUxfQVBJQ19GQUxTRUAKK0NPTkZJR19YODZfTE9DQUxfQVBJQ19UUlVFID0gQENP TkZJR19YODZfTE9DQUxfQVBJQ19UUlVFQAorQ09ORklHX1g4Nl9UUlVFID0gQENPTkZJR19Y ODZfVFJVRUAKK0NQUCA9IEBDUFBACitDUFBGTEFHUyA9IEBDUFBGTEFHU0AKK0NST1NTX0NP TVBJTEUgPSBAQ1JPU1NfQ09NUElMRUAKK0NYWCA9IEBDWFhACitDWFhDUFAgPSBAQ1hYQ1BQ QAorQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAorQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACitD WUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAorREJYX0FCU19TUkNESVJfRkFMU0UgPSBAREJYX0FC U19TUkNESVJfRkFMU0VACitEQlhfQUJTX1NSQ0RJUl9UUlVFID0gQERCWF9BQlNfU1JDRElS X1RSVUVACitEQlhfRE9DX0ZBTFNFID0gQERCWF9ET0NfRkFMU0VACitEQlhfRE9DX1JPT1Qg PSBAREJYX0RPQ19ST09UQAorREJYX0RPQ19UUlVFID0gQERCWF9ET0NfVFJVRUAKK0RCWF9G T1AgPSBAREJYX0ZPUEAKK0RCWF9HRU5fRE9DX1JPT1QgPSBAREJYX0dFTl9ET0NfUk9PVEAK K0RCWF9MSU5UID0gQERCWF9MSU5UQAorREJYX01BWUJFX05PTkVUID0gQERCWF9NQVlCRV9O T05FVEAKK0RCWF9ST09UID0gQERCWF9ST09UQAorREJYX1hTTFRQUk9DID0gQERCWF9YU0xU UFJPQ0AKK0RCWF9YU0xfUk9PVCA9IEBEQlhfWFNMX1JPT1RACitERUZTID0gQERFRlNACitE RVBESVIgPSBAREVQRElSQAorRE9YWUdFTiA9IEBET1hZR0VOQAorRE9YWUdFTl9IQVZFX0RP VCA9IEBET1hZR0VOX0hBVkVfRE9UQAorRE9YWUdFTl9TSE9XX0lOQ0xVREVfRklMRVMgPSBA RE9YWUdFTl9TSE9XX0lOQ0xVREVfRklMRVNACitFQ0hPID0gQEVDSE9ACitFQ0hPX0MgPSBA RUNIT19DQAorRUNIT19OID0gQEVDSE9fTkAKK0VDSE9fVCA9IEBFQ0hPX1RACitFR1JFUCA9 IEBFR1JFUEAKK0VYRUVYVCA9IEBFWEVFWFRACitGNzcgPSBARjc3QAorRkZMQUdTID0gQEZG TEFHU0AKK0lOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACitJTlNUQUxMX1BST0dSQU0g PSBASU5TVEFMTF9QUk9HUkFNQAorSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRA CitJTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAorTEFU RVhfQkFUQ0hNT0RFID0gQExBVEVYX0JBVENITU9ERUAKK0xBVEVYX01PREUgPSBATEFURVhf TU9ERUAKK0xERkxBR1MgPSBATERGTEFHU0AKK0xFWCA9IEBMRVhACitMRVhMSUIgPSBATEVY TElCQAorTEVYX09VVFBVVF9ST09UID0gQExFWF9PVVRQVVRfUk9PVEAKK0xJQk9CSlMgPSBA TElCT0JKU0AKK0xJQlMgPSBATElCU0AKK0xJQlRPT0wgPSBATElCVE9PTEAKK0xOX1MgPSBA TE5fU0AKK0xUTElCT0JKUyA9IEBMVExJQk9CSlNACitNQUlOVCA9IEBNQUlOVEAKK01BSU5U QUlORVJfTU9ERV9GQUxTRSA9IEBNQUlOVEFJTkVSX01PREVfRkFMU0VACitNQUlOVEFJTkVS X01PREVfVFJVRSA9IEBNQUlOVEFJTkVSX01PREVfVFJVRUAKK01BS0VJTkZPID0gQE1BS0VJ TkZPQAorT0JKRVhUID0gQE9CSkVYVEAKK1BBQ0tBR0UgPSBAUEFDS0FHRUAKK1BBQ0tBR0Vf QlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAorUEFDS0FHRV9OQU1FID0gQFBBQ0tB R0VfTkFNRUAKK1BBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAorUEFDS0FHRV9U QVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKK1BBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdF X1ZFUlNJT05ACitQQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKK1JBTkxJQiA9 IEBSQU5MSUJACitSVEFJX0JVSUxEX1NUUklORyA9IEBSVEFJX0JVSUxEX1NUUklOR0AKK1JU QUlfRlBfQ0ZMQUdTID0gQFJUQUlfRlBfQ0ZMQUdTQAorUlRBSV9IT1NUX1NUUklORyA9IEBS VEFJX0hPU1RfU1RSSU5HQAorUlRBSV9LQlVJTERfQk9UVE9NID0gQFJUQUlfS0JVSUxEX0JP VFRPTUAKK1JUQUlfS0JVSUxEX0NMRUFOID0gQFJUQUlfS0JVSUxEX0NMRUFOQAorUlRBSV9L QlVJTERfQ01EID0gQFJUQUlfS0JVSUxEX0NNREAKK1JUQUlfS0JVSUxEX0RJU1RDTEVBTiA9 IEBSVEFJX0tCVUlMRF9ESVNUQ0xFQU5ACitSVEFJX0tCVUlMRF9FTlYgPSBAUlRBSV9LQlVJ TERfRU5WQAorUlRBSV9LQlVJTERfVE9QID0gQFJUQUlfS0JVSUxEX1RPUEAKK1JUQUlfS01P RF9BUFBfQ0ZMQUdTID0gQFJUQUlfS01PRF9BUFBfQ0ZMQUdTQAorUlRBSV9LTU9EX0NGTEFH UyA9IEBSVEFJX0tNT0RfQ0ZMQUdTQAorUlRBSV9MSU5VWF9ESVIgPSBAUlRBSV9MSU5VWF9E SVJACitSVEFJX0xJTlVYX1ZFUlNJT04gPSBAUlRBSV9MSU5VWF9WRVJTSU9OQAorUlRBSV9N QVlCRV9ET0NESVIgPSBAUlRBSV9NQVlCRV9ET0NESVJACitSVEFJX01BWUJFX1NJTURJUiA9 IEBSVEFJX01BWUJFX1NJTURJUkAKK1JUQUlfTU9EVUxFX0RJUiA9IEBSVEFJX01PRFVMRV9E SVJACitSVEFJX01PRFVMRV9FWFQgPSBAUlRBSV9NT0RVTEVfRVhUQAorUlRBSV9QSVBFX05S REVWID0gQFJUQUlfUElQRV9OUkRFVkAKK1JUQUlfVEFSR0VUX0FSQ0ggPSBAUlRBSV9UQVJH RVRfQVJDSEAKK1JUQUlfVEFSR0VUX1NVQkFSQ0ggPSBAUlRBSV9UQVJHRVRfU1VCQVJDSEAK K1JUQUlfVVNFUl9BUFBfQ0ZMQUdTID0gQFJUQUlfVVNFUl9BUFBfQ0ZMQUdTQAorUlRBSV9V U0VSX0NGTEFHUyA9IEBSVEFJX1VTRVJfQ0ZMQUdTQAorU0VUX01BS0UgPSBAU0VUX01BS0VA CitTSEVMTCA9IEBTSEVMTEAKK1NUUklQID0gQFNUUklQQAorVkVSU0lPTiA9IEBWRVJTSU9O QAorYWNfY3RfQVIgPSBAYWNfY3RfQVJACithY19jdF9DQyA9IEBhY19jdF9DQ0AKK2FjX2N0 X0NYWCA9IEBhY19jdF9DWFhACithY19jdF9GNzcgPSBAYWNfY3RfRjc3QAorYWNfY3RfUkFO TElCID0gQGFjX2N0X1JBTkxJQkAKK2FjX2N0X1NUUklQID0gQGFjX2N0X1NUUklQQAorYW1f X2Zhc3RkZXBDQ19GQUxTRSA9IEBhbV9fZmFzdGRlcENDX0ZBTFNFQAorYW1fX2Zhc3RkZXBD Q19UUlVFID0gQGFtX19mYXN0ZGVwQ0NfVFJVRUAKK2FtX19mYXN0ZGVwQ1hYX0ZBTFNFID0g QGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAorYW1fX2Zhc3RkZXBDWFhfVFJVRSA9IEBhbV9fZmFz dGRlcENYWF9UUlVFQAorYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACithbV9fbGVhZGlu Z19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAorYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKK2Ft X190YXIgPSBAYW1fX3RhckAKK2FtX191bnRhciA9IEBhbV9fdW50YXJACitiaW5kaXIgPSBA YmluZGlyQAorYnVpbGQgPSBAYnVpbGRACitidWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AK K2J1aWxkX2NwdSA9IEBidWlsZF9jcHVACitidWlsZF9vcyA9IEBidWlsZF9vc0AKK2J1aWxk X3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACitkYXRhZGlyID0gQGRhdGFkaXJACitleGVjX3By ZWZpeCA9IEBleGVjX3ByZWZpeEAKK2hvc3QgPSBAaG9zdEAKK2hvc3RfYWxpYXMgPSBAaG9z dF9hbGlhc0AKK2hvc3RfY3B1ID0gQGhvc3RfY3B1QAoraG9zdF9vcyA9IEBob3N0X29zQAor aG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACitpbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJA CitpbmZvZGlyID0gQGluZm9kaXJACitpbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACitsaWJk aXIgPSBAbGliZGlyQAorbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAorbG9jYWxzdGF0ZWRp ciA9IEBsb2NhbHN0YXRlZGlyQAorbWFuZGlyID0gQG1hbmRpckAKK21rZGlyX3AgPSBAbWtk aXJfcEAKK29sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKK3ByZWZpeCA9IEBwcmVm aXhACitwcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVA CitzYmluZGlyID0gQHNiaW5kaXJACitzaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRp ckAKK3N1YmRpcnMgPSBAc3ViZGlyc0AKK3N5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKK3Rh cmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACittb2R1bGVkaXIgPSAkKERFU1RESVIpQFJU QUlfTU9EVUxFX0RJUkAKK21vZGV4dCA9IEBSVEFJX01PRFVMRV9FWFRACitsaWJoYWxfU1JD ID0gaGFsLmMgc3dpdGNoLlMgJChhbV9fYXBwZW5kXzEpCitFWFRSQV9ESVNUID0gJChsaWJo YWxfU1JDKSBmcHUuUyBNYWtlZmlsZS5rYnVpbGQKK2FsbDogYWxsLWFtCisKKy5TVUZGSVhF UzoKKyQoc3JjZGlyKS9HTlVtYWtlZmlsZS5pbjogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAk KHNyY2RpcikvR05VbWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCUBmb3Ig ZGVwIGluICQ/OyBkbyBcCisJICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwK KwkgICAgKiQkZGVwKikgXAorCSAgICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0Up ICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCBcCisJCSYmIGV4aXQgMDsgXAorCSAgICAg IGV4aXQgMTs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZWNobyAnIGNkICQodG9wX3Ny Y2RpcikgJiYgJChBVVRPTUFLRSkgLS1mb3JlaWduICBhcmNoL3BwYzY0L2hhbC9HTlVtYWtl ZmlsZSc7IFwKKwljZCAkKHRvcF9zcmNkaXIpICYmIFwKKwkgICQoQVVUT01BS0UpIC0tZm9y ZWlnbiAgYXJjaC9wcGM2NC9oYWwvR05VbWFrZWZpbGUKKy5QUkVDSU9VUzogR05VbWFrZWZp bGUKK0dOVW1ha2VmaWxlOiAkKHNyY2RpcikvR05VbWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRk aXIpL2NvbmZpZy5zdGF0dXMKKwlAY2FzZSAnJD8nIGluIFwKKwkgICpjb25maWcuc3RhdHVz KikgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFH UykgYW0tLXJlZnJlc2g7OyBcCisJICAqKSBcCisJICAgIGVjaG8gJyBjZCAkKHRvcF9idWls ZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19k ZXBmaWxlc19tYXliZSknOyBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxM KSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7 IFwKKwllc2FjOworCiskKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3Jj ZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKKwljZCAkKHRv cF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKwor JCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9f Y29uZmlndXJlX2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9N QUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKEFDTE9DQUxfTTQpOiBATUFJTlRBSU5FUl9NT0RF X1RSVUVAICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYg JChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKworbW9zdGx5Y2xlYW4tbGli dG9vbDoKKwktcm0gLWYgKi5sbworCitjbGVhbi1saWJ0b29sOgorCS1ybSAtcmYgLmxpYnMg X2xpYnMKKworZGlzdGNsZWFuLWxpYnRvb2w6CisJLXJtIC1mIGxpYnRvb2wKK3VuaW5zdGFs bC1pbmZvLWFtOgordGFnczogVEFHUworVEFHUzoKKworY3RhZ3M6IENUQUdTCitDVEFHUzoK KworCitkaXN0ZGlyOiAkKERJU1RGSUxFUykKKwlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3Jj ZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsgXAorCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRv cF9zcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOyBcCisJbGlzdD0nJChESVNURklMRVMpJzsg Zm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBcCisJICBjYXNlICQkZmlsZSBpbiBcCisJICAgICQo c3JjZGlyKS8qKSBmaWxlPWBlY2hvICIkJGZpbGUiIHwgc2VkICJzfF4kJHNyY2RpcnN0cmlw L3x8ImA7OyBcCisJICAgICQodG9wX3NyY2RpcikvKikgZmlsZT1gZWNobyAiJCRmaWxlIiB8 IHNlZCAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3wiYDs7IFwKKwkg IGVzYWM7IFwKKwkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVu IGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKKwkgIGRpcj1gZWNobyAiJCRmaWxlIiB8 IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKKwkgIGlmIHRlc3QgIiQkZGlyIiAhPSAiJCRm aWxlIiAmJiB0ZXN0ICIkJGRpciIgIT0gIi4iOyB0aGVuIFwKKwkgICAgZGlyPSIvJCRkaXIi OyBcCisJICAgICQobWtkaXJfcCkgIiQoZGlzdGRpcikkJGRpciI7IFwKKwkgIGVsc2UgXAor CSAgICBkaXI9Jyc7IFwKKwkgIGZpOyBcCisJICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRo ZW4gXAorCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0g JChzcmNkaXIpOyB0aGVuIFwKKwkgICAgICBjcCAtcFIgJChzcmNkaXIpLyQkZmlsZSAkKGRp c3RkaXIpJCRkaXIgfHwgZXhpdCAxOyBcCisJICAgIGZpOyBcCisJICAgIGNwIC1wUiAkJGQv JCRmaWxlICQoZGlzdGRpcikkJGRpciB8fCBleGl0IDE7IFwKKwkgIGVsc2UgXAorCSAgICB0 ZXN0IC1mICQoZGlzdGRpcikvJCRmaWxlIFwKKwkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAk KGRpc3RkaXIpLyQkZmlsZSBcCisJICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25l CitjaGVjay1hbTogYWxsLWFtCitjaGVjazogY2hlY2stYW0KK2FsbC1hbTogR05VbWFrZWZp bGUgYWxsLWxvY2FsCitpbnN0YWxsZGlyczoKK2luc3RhbGw6IGluc3RhbGwtYW0KK2luc3Rh bGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCitpbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1h bQordW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KKworaW5zdGFsbC1hbTogYWxsLWFtCisJQCQo TUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0K KworaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KK2luc3RhbGwtc3RyaXA6CisJJChN QUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBf UFJPR1JBTSkiIFwKKwkgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BS T0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgYHRlc3QgLXogJyQoU1RSSVAp JyB8fCBcCisJICAgIGVjaG8gIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNU UklQKSciYCBpbnN0YWxsCittb3N0bHljbGVhbi1nZW5lcmljOgorCitjbGVhbi1nZW5lcmlj OgorCitkaXN0Y2xlYW4tZ2VuZXJpYzoKKwktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklM RVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKKworbWFpbnRhaW5lci1jbGVh bi1nZW5lcmljOgorCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50 YWluZXJzIHRvIHVzZSIKKwlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1 aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCitjbGVhbjogY2xlYW4tYW0KKworY2xl YW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBjbGVhbi1sb2NhbCBtb3N0bHlj bGVhbi1hbQorCitkaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQorCS1ybSAtZiBHTlVtYWtlZmls ZQorZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4t bGlidG9vbAorCitkdmk6IGR2aS1hbQorCitkdmktYW06CisKK2h0bWw6IGh0bWwtYW0KKwor aW5mbzogaW5mby1hbQorCitpbmZvLWFtOgorCitpbnN0YWxsLWRhdGEtYW06CisKK2luc3Rh bGwtZXhlYy1hbTogaW5zdGFsbC1leGVjLWxvY2FsCisKK2luc3RhbGwtaW5mbzogaW5zdGFs bC1pbmZvLWFtCisKK2luc3RhbGwtbWFuOgorCitpbnN0YWxsY2hlY2stYW06CisKK21haW50 YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tYW0KKwktcm0gLWYgR05VbWFrZWZpbGUK K21haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdl bmVyaWMKKworbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCisKK21vc3RseWNsZWFuLWFt OiBtb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wKKworcGRmOiBwZGYt YW0KKworcGRmLWFtOgorCitwczogcHMtYW0KKworcHMtYW06CisKK3VuaW5zdGFsbC1hbTog dW5pbnN0YWxsLWluZm8tYW0KKworLlBIT05ZOiBhbGwgYWxsLWFtIGFsbC1sb2NhbCBjaGVj ayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIFwKKwljbGVhbi1saWJ0b29sIGNsZWFu LWxvY2FsIGRpc3RjbGVhbiBkaXN0Y2xlYW4tZ2VuZXJpYyBcCisJZGlzdGNsZWFuLWxpYnRv b2wgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgaHRtbC1hbSBpbmZvIGluZm8tYW0gXAorCWlu c3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwt ZXhlYyBcCisJaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZXhlYy1sb2NhbCBpbnN0YWxsLWlu Zm8gXAorCWluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBpbnN0YWxsLXN0cmlwIGluc3Rh bGxjaGVjayBcCisJaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIG1haW50YWluZXItY2xl YW4gXAorCW1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBtb3N0bHljbGVh bi1nZW5lcmljIFwKKwltb3N0bHljbGVhbi1saWJ0b29sIHBkZiBwZGYtYW0gcHMgcHMtYW0g dW5pbnN0YWxsIHVuaW5zdGFsbC1hbSBcCisJdW5pbnN0YWxsLWluZm8tYW0KKworCitydGFp X2hhbC5rbzogQFJUQUlfS0JVSUxEX0VOVkAKK3J0YWlfaGFsLmtvOiAkKGxpYmhhbF9TUkMp IEZPUkNFCisJQFJUQUlfS0JVSUxEX1RPUEAgXAorCUBSVEFJX0tCVUlMRF9DTURAIHJ0YWlf ZXh0cmFkZWY9IkBSVEFJX0tNT0RfQ0ZMQUdTQCIgXAorCUBSVEFJX0tCVUlMRF9CT1RUT01A CisKK2NsZWFuLWxvY2FsOgorCUBSVEFJX0tCVUlMRF9DTEVBTkAKKworYWxsLWxvY2FsOiBy dGFpX2hhbCQobW9kZXh0KQorQENPTkZJR19SVEFJX09MRF9GQVNISU9ORURfQlVJTERfVFJV RUAJJChta2luc3RhbGxkaXJzKSAkKHRvcF9zcmNkaXIpL21vZHVsZXMKK0BDT05GSUdfUlRB SV9PTERfRkFTSElPTkVEX0JVSUxEX1RSVUVACSQoSU5TVEFMTF9EQVRBKSAkXiAkKHRvcF9z cmNkaXIpL21vZHVsZXMKKworaW5zdGFsbC1leGVjLWxvY2FsOiBydGFpX2hhbCQobW9kZXh0 KQorCSQobWtpbnN0YWxsZGlycykgJChtb2R1bGVkaXIpCisJJChJTlNUQUxMX0RBVEEpICQ8 ICQobW9kdWxlZGlyKQorCisuUEhPTlk6IEZPUkNFCisjIFRlbGwgdmVyc2lvbnMgWzMuNTks My42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgorIyBPdGhl cndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVk ZWQuCisuTk9FWFBPUlQ6CmRpZmYgLU5ydSBmdXNpb24tMC43LjEvYXJjaC9wcGM2NC9oYWwv TWFrZWZpbGUua2J1aWxkIGZ1c2lvbi0wLjcuMS1wcGM2NC1kZXZlbC9hcmNoL3BwYzY0L2hh bC9NYWtlZmlsZS5rYnVpbGQKLS0tIGZ1c2lvbi0wLjcuMS9hcmNoL3BwYzY0L2hhbC9NYWtl ZmlsZS5rYnVpbGQJMTk3MC0wMS0wMSAwMjowMDowMC4wMDAwMDAwMDAgKzAyMDAKKysrIGZ1 c2lvbi0wLjcuMS1wcGM2NC1kZXZlbC9hcmNoL3BwYzY0L2hhbC9NYWtlZmlsZS5rYnVpbGQJ MjAwNC0xMi0yNCAxMToxMjoxMS4wMDAwMDAwMDAgKzAyMDAKQEAgLTAsMCArMSwxMyBAQAor RVhUUkFfQ0ZMQUdTICs9IC1JJChydGFpX3NyY3RyZWUpL2luY2x1ZGUgXAorCQktSSQoc3Jj KS8uLi8uLi8uLi9pbmNsdWRlIFwKKwkJLUkkKHNyYykvLi4vLi4vLi4gXAorCQkkKHJ0YWlf ZXh0cmFkZWYpCisKK0VYVFJBX0FGTEFHUyArPSAtSSQocnRhaV9zcmN0cmVlKS9pbmNsdWRl IFwKKwkJLUkkKHNyYykvLi4vLi4vLi4vaW5jbHVkZSBcCisJCS1JJChzcmMpLy4uLy4uLy4u IFwKKwkJJChydGFpX2V4dHJhZGVmKQorCitvYmotbSArPSBydGFpX2hhbC5vCisKK3J0YWlf aGFsLW9ianMgOj0gJChydGFpX29ianMpCmRpZmYgLU5ydSBmdXNpb24tMC43LjEvYXJjaC9w cGM2NC9oYWwvZnB1LlMgZnVzaW9uLTAuNy4xLXBwYzY0LWRldmVsL2FyY2gvcHBjNjQvaGFs L2ZwdS5TCi0tLSBmdXNpb24tMC43LjEvYXJjaC9wcGM2NC9oYWwvZnB1LlMJMTk3MC0wMS0w MSAwMjowMDowMC4wMDAwMDAwMDAgKzAyMDAKKysrIGZ1c2lvbi0wLjcuMS1wcGM2NC1kZXZl bC9hcmNoL3BwYzY0L2hhbC9mcHUuUwkyMDA1LTA2LTAxIDE2OjE4OjQ3LjAwMDAwMDAwMCAr MDMwMApAQCAtMCwwICsxLDc0IEBACisvKgorICogYXJjaC9wcGM2NC9oYWwvZnB1LlMKKyAq CisgKiBGdXNpb24gNjQtYml0IFBvd2VyUEMgYWRvcHRpb24KKyAqIENvcHlyaWdodCAoQykg MjAwNSBUYW5lbGkgVsOkaMOka2FuZ2FzIGFuZCBIZWlra2kgTGluZGhvbG0KKyAqIGJhc2Vk IG9uIHByZXZpb3VzIHdvcms6CisgKgorICogQ29weXJpZ2h0IChDKSAyMDAxLDIwMDIsMjAw MywyMDA0IFBoaWxpcHBlIEdlcnVtLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1 bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1 Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNjc1 IE1hc3MgQXZlLCBDYW1icmlkZ2UgTUEgMDIxMzksCisgKiBVU0E7IGVpdGhlciB2ZXJzaW9u IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisgKiB2 ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAq IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRl IHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUg UGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisK KyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8YXNtL3BwY19hc20uaD4K KyNpbmNsdWRlIDxydGFpX2NvbmZpZy5oPiAKKworI2RlZmluZSBSVEhBTF9GUFNBVkUobiwg YmFzZSkJc3RmZCBuLDgqKG4pKGJhc2UpCisjZGVmaW5lIFJUSEFMX0ZQU0FWRTIobiwgYmFz ZSkJUlRIQUxfRlBTQVZFKG4sIGJhc2UpOyBSVEhBTF9GUFNBVkUobisxLCBiYXNlKQorI2Rl ZmluZSBSVEhBTF9GUFNBVkU0KG4sIGJhc2UpCVJUSEFMX0ZQU0FWRTIobiwgYmFzZSk7IFJU SEFMX0ZQU0FWRTIobisyLCBiYXNlKQorI2RlZmluZSBSVEhBTF9GUFNBVkU4KG4sIGJhc2Up CVJUSEFMX0ZQU0FWRTQobiwgYmFzZSk7IFJUSEFMX0ZQU0FWRTQobis0LCBiYXNlKQorI2Rl ZmluZSBSVEhBTF9GUFNBVkUxNihuLCBiYXNlKQlSVEhBTF9GUFNBVkU4KG4sIGJhc2UpOyBS VEhBTF9GUFNBVkU4KG4rOCwgYmFzZSkKKyNkZWZpbmUgUlRIQUxfRlBTQVZFMzIobiwgYmFz ZSkJUlRIQUxfRlBTQVZFMTYobiwgYmFzZSk7IFJUSEFMX0ZQU0FWRTE2KG4rMTYsIGJhc2Up CisKKy8qIHIzID0gJnRjYi0+ZnB1ZW52ICovCitfR0xPQkFMKHJ0aGFsX3NhdmVfZnB1KQor CW1mbXNyCXI1CisJb3JpCXI1LHI1LE1TUl9GUAkJLyogUmUtZW5hYmxlIHVzZSBvZiBGUFUu ICovCisJbXRtc3JkCXI1CQkJLyogRW5hYmxlIHVzZSBvZiBmcHUuICovCisJaXN5bmMKKwlS VEhBTF9GUFNBVkUzMigwLHIzKQorCW1mZnMJZnIwCisJc3RmZAlmcjAsOCozMihyMykKKwli bHIKKworI2RlZmluZSBSVEhBTF9GUExPQUQobiwgYmFzZSkJbGZkIG4sOCoobikoYmFzZSkK KyNkZWZpbmUgUlRIQUxfRlBMT0FEMihuLCBiYXNlKQlSVEhBTF9GUExPQUQobiwgYmFzZSk7 IFJUSEFMX0ZQTE9BRChuKzEsIGJhc2UpCisjZGVmaW5lIFJUSEFMX0ZQTE9BRDQobiwgYmFz ZSkJUlRIQUxfRlBMT0FEMihuLCBiYXNlKTsgUlRIQUxfRlBMT0FEMihuKzIsIGJhc2UpCisj ZGVmaW5lIFJUSEFMX0ZQTE9BRDgobiwgYmFzZSkJUlRIQUxfRlBMT0FENChuLCBiYXNlKTsg UlRIQUxfRlBMT0FENChuKzQsIGJhc2UpCisjZGVmaW5lIFJUSEFMX0ZQTE9BRDE2KG4sIGJh c2UpCVJUSEFMX0ZQTE9BRDgobiwgYmFzZSk7IFJUSEFMX0ZQTE9BRDgobis4LCBiYXNlKQor I2RlZmluZSBSVEhBTF9GUExPQUQzMihuLCBiYXNlKQlSVEhBTF9GUExPQUQxNihuLCBiYXNl KTsgUlRIQUxfRlBMT0FEMTYobisxNiwgYmFzZSkKKworLyogcjMgPSAmdGNiLT5mcHVlbnYg Ki8KK19HTE9CQUwocnRoYWxfaW5pdF9mcHUpCisJbWZtc3IJcjUKKwlvcmkJcjUscjUsTVNS X0ZQfE1TUl9GRTEJLyogUlQga2VybmVsIHRocmVhZHMgYWx3YXlzIG9wZXJhdGUgaW4gKi8K KwlsaQlyNCxNU1JfRkUwCQkvKiBpbXByZWNpc2Ugbm9uLXJlY292ZXJhYmxlIGV4Y2VwdGlv biBtb2RlLiAqLworCWFuZGMJcjUscjUscjQKKwltdG1zcmQJcjUKKworCS8qIEZhbGxiYWNr IHdhbnRlZC4gKi8KKwkKKy8qIHIzID0gJnRjYi0+ZnB1ZW52ICovCitfR0xPQkFMKHJ0aGFs X3Jlc3RvcmVfZnB1KQorCW1mbXNyCXI1CisJb3JpCXI1LHI1LE1TUl9GUAkJLyogUmUtZW5h YmxlIHVzZSBvZiBGUFUuICovCisJbXRtc3JkCXI1CQkJLyogRW5hYmxlIHVzZSBvZiBmcHUu ICovCisJaXN5bmMKKwlsZmQJZnIwLDgqMzIocjMpCisJbXRmc2YJMHhmZiwwCisJUlRIQUxf RlBMT0FEMzIoMCxyMykKKwlibHIKZGlmZiAtTnJ1IGZ1c2lvbi0wLjcuMS9hcmNoL3BwYzY0 L2hhbC9oYWwuYyBmdXNpb24tMC43LjEtcHBjNjQtZGV2ZWwvYXJjaC9wcGM2NC9oYWwvaGFs LmMKLS0tIGZ1c2lvbi0wLjcuMS9hcmNoL3BwYzY0L2hhbC9oYWwuYwkxOTcwLTAxLTAxIDAy OjAwOjAwLjAwMDAwMDAwMCArMDIwMAorKysgZnVzaW9uLTAuNy4xLXBwYzY0LWRldmVsL2Fy Y2gvcHBjNjQvaGFsL2hhbC5jCTIwMDUtMDUtMjMgMTU6MTg6NTkuMDAwMDAwMDAwICswMzAw CkBAIC0wLDAgKzEsOTU2IEBACisvKioKKyAqICAgQGluZ3JvdXAgaGFsX3BwYzY0CisgKiAg IEBmaWxlCisgKgorICogICBBZGVvcy1iYXNlZCBSZWFsLVRpbWUgQWJzdHJhY3Rpb24gTGF5 ZXIgZm9yIFBQQzY0LgorICoKKyAqICAgT3JpZ2luYWwgUlRBSS94ODYgbGF5ZXIgaW1wbGVt ZW50YXRpb246IFxuCisgKiAgIENvcHlyaWdodCAmY29weTsgMjAwMCBQYW9sbyBNYW50ZWdh enphLCBcbgorICogICBDb3B5cmlnaHQgJmNvcHk7IDIwMDAgU3RldmUgUGFwYWNoYXJhbGFt Ym91cywgXG4KKyAqICAgQ29weXJpZ2h0ICZjb3B5OyAyMDAwIFN0dWFydCBIdWdoZXMsIFxu CisgKiAgIGFuZCBvdGhlcnMuCisgKgorICogICBSVEFJL3g4NiByZXdyaXRlIG92ZXIgQWRl b3M6IFxuCisgKiAgIENvcHlyaWdodCAmY29weTsgMjAwMiBQaGlsaXBwZSBHZXJ1bS4KKyAq IAorICogICBQUEM2NCBjaGFuZ2VzOiBcbgorICogICBDb3B5cmlnaHQgJmNvcHk7IDIwMDUg SGVpa2tpIExpbmRob2xtLgorICogCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3 YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgIGl0IHVu ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVi bGlzaGVkIGJ5CisgKiAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDY3 NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlIE1BIDAyMTM5LAorICogICBVU0E7IGVpdGhlciB2ZXJz aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisg KiAgIHZlcnNpb24uCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgYnV0IFdJVEhPVVQgQU5Z IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAg TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg U2VlIHRoZQorICogICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh aWxzLgorICoKKyAqICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYWxvbmcgd2l0aCB0aGlzIHByb2dy YW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICAgRm91bmRhdGlv biwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTEx LTEzMDcsIFVTQS4KKyAqLworCisvKioKKyAqIEBkZWZncm91cCBoYWxfcHBjNjQgSEFML3Bw YzY0LgorICoKKyAqIEJhc2ljIFBvd2VyUEMtZGVwZW5kZW50IHNlcnZpY2VzIHVzZWQgYnkg dGhlIHJlYWwtdGltZSBudWNsZXVzLgorICoKKyAqQHsqLworCisjaW5jbHVkZSA8bGludXgv dmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9l cnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lu dGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nv bnNvbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgorI2luY2x1ZGUgPGFzbS9z eXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vaHdfaXJxLmg+CisjaW5jbHVkZSA8YXNtL2lycS5o PgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5j bHVkZSA8YXNtL3VuaXN0ZC5oPgorI2luY2x1ZGUgPG51Y2xldXMvYXNtL2hhbC5oPgorI2lm ZGVmIENPTkZJR19QUk9DX0ZTCisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2VuZGlm IC8qIENPTkZJR19QUk9DX0ZTICovCisjaW5jbHVkZSA8c3RkYXJnLmg+CisKK01PRFVMRV9M SUNFTlNFKCJHUEwiKTsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgcnRoYWxfY3B1ZnJlcV9h cmc7Cittb2R1bGVfcGFyYW1fbmFtZWQoY3B1ZnJlcSxydGhhbF9jcHVmcmVxX2FyZyx1bG9u ZywwNDQ0KTsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgcnRoYWxfdGltZXJmcmVxX2FyZzsK K21vZHVsZV9wYXJhbV9uYW1lZCh0aW1lcmZyZXEscnRoYWxfdGltZXJmcmVxX2FyZyx1bG9u ZywwNDQ0KTsKKworYWRvbWFpbl90IHJ0aGFsX2RvbWFpbjsKKworc3RhdGljIHN0cnVjdCB7 CisKKyAgICB2b2lkICgqaGFuZGxlcikodW5zaWduZWQgaXJxLCB2b2lkICpjb29raWUpOwor ICAgIHZvaWQgKmNvb2tpZTsKKyAgICB1bnNpZ25lZCBsb25nIGhpdHNbUlRIQUxfTlJfQ1BV U107CisKK30gcnRoYWxfcmVhbHRpbWVfaXJxW0lQSVBFX05SX0lSUVNdOworCitzdGF0aWMg c3RydWN0IHsKKworICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CisgICAgaW50IGNvdW50Owor Cit9IHJ0aGFsX2xpbnV4X2lycVtJUElQRV9OUl9YSVJRU107CisKK3N0YXRpYyBzdHJ1Y3Qg eworCisgICAgdm9pZCAoKmhhbmRsZXIpKHZvaWQpOworICAgIHVuc2lnbmVkIGxhYmVsOwor Cit9IHJ0aGFsX3N5c3JlcV90YWJsZVtSVEhBTF9OUl9TUlFTXTsKKworc3RhdGljIGludCBy dGhhbF9yZWFsdGltZV9mYXVsdHNbUlRIQUxfTlJfQ1BVU11bQURFT1NfTlJfRkFVTFRTXTsK Kworc3RhdGljIGludCBydGhhbF9pbml0X2RvbmU7CisKK3N0YXRpYyB1bnNpZ25lZCBydGhh bF9zeXNyZXFfdmlycTsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgcnRoYWxfc3lzcmVxX21h cCA9IDE7IC8qICMwIGlzIGludmFsaWQuICovCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHJ0 aGFsX3N5c3JlcV9wZW5kaW5nOworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBydGhhbF9zeXNy ZXFfcnVubmluZzsKKworc3RhdGljIHNwaW5sb2NrX3QgcnRoYWxfc3NycV9sb2NrID0gU1BJ Tl9MT0NLX1VOTE9DS0VEOworCitzdGF0aWMgdm9sYXRpbGUgaW50IHJ0aGFsX3N5bmNfb3A7 CisKK3N0YXRpYyBhdG9taWNfdCBydGhhbF9zeW5jX2NvdW50ID0gQVRPTUlDX0lOSVQoMSk7 CisKK3N0YXRpYyBydGhhbF90cmFwX2hhbmRsZXJfdCBydGhhbF90cmFwX2hhbmRsZXI7CisK K3N0YXRpYyBpbnQgcnRoYWxfcGVyaW9kaWNfcDsKKworc3RydWN0IHJ0aGFsX2NhbGlicmF0 aW9uX2RhdGEgcnRoYWxfdHVuYWJsZXM7CisKK3ZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgcnRo YWxfY3B1X3JlYWx0aW1lOworCitpbnQgcnRoYWxfcmVxdWVzdF90aW1lciAodm9pZCAoKmhh bmRsZXIpKHZvaWQpLAorCQkJIHVuc2lnbmVkIGxvbmcgbnN0aWNrKQoreworICAgIHVuc2ln bmVkIGxvbmcgZmxhZ3M7CisgICAgaW50IGVycjsKKworICAgIGZsYWdzID0gcnRoYWxfY3Jp dGljYWxfZW50ZXIoTlVMTCk7CisKKyAgICBpZiAobnN0aWNrID4gMCkKKwl7CisJLyogUGVy aW9kaWMgc2V0dXAgLS0KKwkgICBVc2UgdGhlIGJ1aWx0LWluIEFkZW9zIHNlcnZpY2UgZGly ZWN0bHkuICovCisJZXJyID0gYWRlb3NfdHVuZV90aW1lcihuc3RpY2ssMCk7CisJcnRoYWxf cGVyaW9kaWNfcCA9IDE7CisJfQorICAgIGVsc2UKKwl7CisJLyogT25lc2hvdCBzZXR1cC4g Ki8KKwkvKmRpc2FybV9kZWNyW2FkZW9zX3Byb2Nlc3Nvcl9pZCgpXSA9IDE7Ki8KKwlydGhh bF9wZXJpb2RpY19wID0gMDsKKwlydGhhbF9zZXRfdGltZXJfc2hvdCh0Yl90aWNrc19wZXJf amlmZnkpOworCX0KKworICAgIHJ0aGFsX3JlbGVhc2VfaXJxKFJUSEFMX1RJTUVSX0lSUSk7 CisKKyAgICBlcnIgPSBydGhhbF9yZXF1ZXN0X2lycShSVEhBTF9USU1FUl9JUlEsCisJCQkg ICAgKHJ0aGFsX2lycV9oYW5kbGVyX3QpaGFuZGxlciwKKwkJCSAgICBOVUxMKTsKKworICAg IHJ0aGFsX2NyaXRpY2FsX2V4aXQoZmxhZ3MpOworCisgICAgcmV0dXJuIGVycjsKK30KKwor dm9pZCBydGhhbF9yZWxlYXNlX3RpbWVyICh2b2lkKQorCit7CisgICAgdW5zaWduZWQgbG9u ZyBmbGFnczsKKworICAgIGZsYWdzID0gcnRoYWxfY3JpdGljYWxfZW50ZXIoTlVMTCk7CisK KyAgICBpZiAocnRoYWxfcGVyaW9kaWNfcCkKKwlhZGVvc190dW5lX3RpbWVyKDAsQURFT1Nf UkVTRVRfVElNRVIpOworICAgIGVsc2UKKwl7CisJLypkaXNhcm1fZGVjclthZGVvc19wcm9j ZXNzb3JfaWQoKV0gPSAwOyovCisJc2V0X2RlYyh0Yl90aWNrc19wZXJfamlmZnkpOworCX0K KworICAgIHJ0aGFsX3JlbGVhc2VfaXJxKFJUSEFMX1RJTUVSX0lSUSk7CisKKyAgICBydGhh bF9jcml0aWNhbF9leGl0KGZsYWdzKTsKK30KKwordW5zaWduZWQgbG9uZyBydGhhbF9jYWxp YnJhdGVfdGltZXIgKHZvaWQpCisKK3sKKyAgICAvKiBPbiBQb3dlclBDIHN5c3RlbXMsIHRo ZSBjb3N0IG9mIHNldHRpbmcgdGhlIGRlY3JlbWVudGVyIG9yIHRoZQorICAgICAgIFBJVCBk b2VzIG5vdCBpbmR1Y2Ugc2lnbmlmaWNhbnQgbGF0ZW5jeS4gSW4gc3VjaCBhIGNhc2UsIGxl dCdzCisgICAgICAgcmV0dXJuIHRoZSBzaG9ydGVzdCBwb3NzaWJsZSBkZWxheSBmb3IgYSBv bmUtc2hvdCBzZXR1cC4gSW4gYW55CisgICAgICAgY2FzZSwgYWx3YXlzIHJldHVybiBhIG5v bi16ZXJvIHZhbHVlLiAgZS5nLiAxIGRlY3JlbWVudGVyIHRpY2sKKyAgICAgICBoZXJlLiAq LworICAgIHJldHVybiAxMDAwMDAwMDAwIC8gUlRIQUxfQ1BVX0ZSRVE7Cit9CisKK3Vuc2ln bmVkIGxvbmcgcnRoYWxfY3JpdGljYWxfZW50ZXIgKHZvaWQgKCpzeW5jaCkodm9pZCkpCisK K3sKKyAgICB1bnNpZ25lZCBsb25nIGZsYWdzID0gYWRlb3NfY3JpdGljYWxfZW50ZXIoc3lu Y2gpOworCisgICAgaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnJ0aGFsX3N5bmNfY291bnQp KQorCXJ0aGFsX3N5bmNfb3AgPSAwOworICAgIGVsc2UgaWYgKHN5bmNoICE9IE5VTEwpCisJ cHJpbnRrKEtFUk5fV0FSTklORyAiUlRBSTogTmVzdGVkIGNyaXRpY2FsIHN5bmMgd2lsbCBm YWlsLlxuIik7CisKKyAgICByZXR1cm4gZmxhZ3M7Cit9CisKK3ZvaWQgcnRoYWxfY3JpdGlj YWxfZXhpdCAodW5zaWduZWQgbG9uZyBmbGFncykKKworeworICAgIGF0b21pY19pbmMoJnJ0 aGFsX3N5bmNfY291bnQpOworICAgIGFkZW9zX2NyaXRpY2FsX2V4aXQoZmxhZ3MpOworfQor CitzdGF0aWMgdm9pZCBydGhhbF9pcnFfdHJhbXBvbGluZSAodW5zaWduZWQgaXJxKQorCit7 CisgICAgcnRoYWxfcmVhbHRpbWVfaXJxW2lycV0uaGl0c1thZGVvc19wcm9jZXNzb3JfaWQo KV0rKzsKKyAgICBydGhhbF9yZWFsdGltZV9pcnFbaXJxXS5oYW5kbGVyKGlycSxydGhhbF9y ZWFsdGltZV9pcnFbaXJxXS5jb29raWUpOworfQorCitpbnQgcnRoYWxfcmVxdWVzdF9pcnEg KHVuc2lnbmVkIGlycSwKKwkJICAgICAgIHZvaWQgKCpoYW5kbGVyKSh1bnNpZ25lZCBpcnEs IHZvaWQgKmNvb2tpZSksCisJCSAgICAgICB2b2lkICpjb29raWUpCit7CisgICAgdW5zaWdu ZWQgbG9uZyBmbGFnczsKKyAgICBpbnQgZXJyID0gMDsKKworICAgIGlmIChoYW5kbGVyID09 IE5VTEwgfHwgaXJxID49IElQSVBFX05SX0lSUVMpCisJcmV0dXJuIC1FSU5WQUw7CisKKyAg ICBmbGFncyA9IHJ0aGFsX2NyaXRpY2FsX2VudGVyKE5VTEwpOworCisgICAgaWYgKHJ0aGFs X3JlYWx0aW1lX2lycVtpcnFdLmhhbmRsZXIgIT0gTlVMTCkKKwl7CisJZXJyID0gLUVCVVNZ OworCWdvdG8gdW5sb2NrX2FuZF9leGl0OworCX0KKworICAgIGVyciA9IGFkZW9zX3ZpcnR1 YWxpemVfaXJxX2Zyb20oJnJ0aGFsX2RvbWFpbiwKKwkJCQkgICAgaXJxLAorCQkJCSAgICAm cnRoYWxfaXJxX3RyYW1wb2xpbmUsCisJCQkJICAgIE5VTEwsCisJCQkJICAgIElQSVBFX0RZ TkFNSUNfTUFTSyk7CisgICAgaWYgKCFlcnIpCisJeworCXJ0aGFsX3JlYWx0aW1lX2lycVtp cnFdLmhhbmRsZXIgPSBoYW5kbGVyOworCXJ0aGFsX3JlYWx0aW1lX2lycVtpcnFdLmNvb2tp ZSA9IGNvb2tpZTsKKwl9CisKKyB1bmxvY2tfYW5kX2V4aXQ6CisKKyAgICBydGhhbF9jcml0 aWNhbF9leGl0KGZsYWdzKTsKKworICAgIHJldHVybiBlcnI7Cit9CisKK2ludCBydGhhbF9y ZWxlYXNlX2lycSAodW5zaWduZWQgaXJxKQorCit7CisgICAgaW50IGVyciA9IDA7CisgICAg CisgICAgaWYgKGlycSA+PSBJUElQRV9OUl9JUlFTKQorCXJldHVybiAtRUlOVkFMOworCisg ICAgZXJyID0gYWRlb3NfdmlydHVhbGl6ZV9pcnFfZnJvbSgmcnRoYWxfZG9tYWluLAorCQkJ ICAgICAgaXJxLAorCQkJICAgICAgTlVMTCwKKwkJCSAgICAgIE5VTEwsCisJCQkgICAgICBJ UElQRV9QQVNTX01BU0spOworCisgICAgaWYgKCFlcnIpCisgICAgICAgIHhjaGcoJnJ0aGFs X3JlYWx0aW1lX2lycVtpcnFdLmhhbmRsZXIsTlVMTCk7CisKKyAgICByZXR1cm4gZXJyOwor fQorCisvKioKKyAqIEVuYWJsZSBhbiBJUlEgc291cmNlLgorICoKKyAqLworaW50IHJ0aGFs X2VuYWJsZV9pcnEgKHVuc2lnbmVkIGlycSkKKworeworICAgIGlmIChpcnEgPj0gSVBJUEVf TlJfWElSUVMpCisJcmV0dXJuIC1FSU5WQUw7CisKKyAgICBpZiAoaXJxX2Rlc2NbaXJxXS5o YW5kbGVyID09IE5VTEwgfHwKKwlpcnFfZGVzY1tpcnFdLmhhbmRsZXItPmVuYWJsZSA9PSBO VUxMKQorCXJldHVybiAtRU5PREVWOworCisgICAgaXJxX2Rlc2NbaXJxXS5oYW5kbGVyLT5l bmFibGUoaXJxKTsKKworICAgIHJldHVybiAwOworfQorCisvKioKKyAqIERpc2FibGUgYW4g SVJRIHNvdXJjZS4KKyAqCisgKi8KK2ludCBydGhhbF9kaXNhYmxlX2lycSAodW5zaWduZWQg aXJxKQorCit7CisgICAgaWYgKGlycSA+PSBJUElQRV9OUl9YSVJRUykKKwlyZXR1cm4gLUVJ TlZBTDsKKworICAgIGlmIChpcnFfZGVzY1tpcnFdLmhhbmRsZXIgPT0gTlVMTCB8fAorCWly cV9kZXNjW2lycV0uaGFuZGxlci0+ZGlzYWJsZSA9PSBOVUxMKQorCXJldHVybiAtRU5PREVW OworCisgICAgaXJxX2Rlc2NbaXJxXS5oYW5kbGVyLT5kaXNhYmxlKGlycSk7CisKKyAgICBy ZXR1cm4gMDsKK30KKworLyoqCisgKiBJbnN0YWxsIGEgc2hhcmVkIExpbnV4IGludGVycnVw dCBoYW5kbGVyLgorICoKKyAqIHJ0aGFsX3JlcXVlc3RfbGludXhfaXJxIGluc3RhbGxzIGZ1 bmN0aW9uIEBhIGhhbmRsZXIgYXMgYSBzdGFuZGFyZAorICogTGludXggaW50ZXJydXB0IHNl cnZpY2Ugcm91dGluZSBmb3IgSVJRIGxldmVsIEBhIGlycSBmb3JjaW5nIExpbnV4CisgKiB0 byBzaGFyZSB0aGUgSVJRIHdpdGggb3RoZXIgaW50ZXJydXB0IGhhbmRsZXJzLiBUaGUgaGFu ZGxlciBpcworICogYXBwZW5kZWQgdG8gYW55IGFscmVhZHkgZXhpc3RpbmcgTGludXggaGFu ZGxlciBmb3IgdGhlIHNhbWUgaXJxIGFuZAorICogaXMgcnVuIGJ5IExpbnV4IGlycSBhcyBh bnkgb2YgaXRzIGhhbmRsZXIuIEluIHRoaXMgd2F5IGEgcmVhbCB0aW1lCisgKiBhcHBsaWNh dGlvbiBjYW4gbW9uaXRvciBMaW51eCBpbnRlcnJ1cHRzIGhhbmRsaW5nIGF0IGl0cyB3aWxs LiBUaGUKKyAqIGhhbmRsZXIgYXBwZWFycyBpbiAvcHJvYy9pbnRlcnJ1cHRzLgorICoKKyAq IEBwYXJhbSBpcnEgaXMgdGhlIElSUSBsZXZlbCB0byB3aGljaCB0aGUgaGFuZGxlciB3aWxs IGJlIGFzc29jaWF0ZWQuCisgKgorICogQHBhcmFtIGhhbmRsZXIgcG9pbnRlciBvbiB0aGUg aW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZSB0byBiZSBpbnN0YWxsZWQuCisgKgorICogQHBh cmFtIG5hbWUgaXMgYSBuYW1lIGZvciAvcHJvYy9pbnRlcnJ1cHRzLgorICoKKyAqIEBwYXJh bSBkZXZfaWQgaXMgdG8gcGFzcyB0byB0aGUgaW50ZXJydXB0IGhhbmRsZXIsIGluIHRoZSBz YW1lIHdheSBhcyB0aGUKKyAqIHN0YW5kYXJkIExpbnV4IGlycSByZXF1ZXN0IGNhbGwuCisg KgorICogVGhlIGludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUgY2FuIGJlIHVuaW5zdGFsbGVk IHVzaW5nCisgKiBydGhhbF9yZWxlYXNlX2xpbnV4X2lycSgpLgorICoKKyAqIEByZXR2YWwg MCBvbiBzdWNjZXNzLgorICogQHJldHZhbCAtRUlOVkFMIGlmIEBhIGlycSBpcyBub3QgYSB2 YWxpZCBleHRlcm5hbCBJUlEgbnVtYmVyIG9yIGhhbmRsZXIKKyAqIGlzIEBjIE5VTEwuCisg Ki8KK2ludCBydGhhbF9yZXF1ZXN0X2xpbnV4X2lycSAodW5zaWduZWQgaXJxLAorCQkJICAg ICBpcnFyZXR1cm5fdCAoKmhhbmRsZXIpKGludCBpcnEsCisJCQkJCQkgICAgdm9pZCAqZGV2 X2lkLAorCQkJCQkJICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKSwgCisJCQkgICAgIGNoYXIg Km5hbWUsCisJCQkgICAgIHZvaWQgKmRldl9pZCkKK3sKKyAgICB1bnNpZ25lZCBsb25nIGZs YWdzOworICAgIGludCBlcnIgPSAwOworCisgICAgaWYgKGlycSA+PSBJUElQRV9OUl9YSVJR UyB8fCAhaGFuZGxlcikKKwlyZXR1cm4gLUVJTlZBTDsKKworICAgIGZsYWdzID0gcnRoYWxf c3Bpbl9sb2NrX2lycXNhdmUoJmlycV9kZXNjW2lycV0ubG9jayk7CisKKyAgICBpZiAocnRo YWxfbGludXhfaXJxW2lycV0uY291bnQrKyA9PSAwICYmIGlycV9kZXNjW2lycV0uYWN0aW9u KQorCXsKKwlydGhhbF9saW51eF9pcnFbaXJxXS5mbGFncyA9IGlycV9kZXNjW2lycV0uYWN0 aW9uLT5mbGFnczsKKwlpcnFfZGVzY1tpcnFdLmFjdGlvbi0+ZmxhZ3MgfD0gU0FfU0hJUlE7 CisJfQorCisgICAgcnRoYWxfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShmbGFncywmaXJxX2Rl c2NbaXJxXS5sb2NrKTsKKworICAgIGVyciA9IHJlcXVlc3RfaXJxKGlycSxoYW5kbGVyLFNB X1NISVJRLG5hbWUsZGV2X2lkKTsKKworICAgIHJldHVybiBlcnI7Cit9CisKKy8qKgorICog VW5pbnN0YWxsIHNoYXJlZCBMaW51eCBpbnRlcnJ1cHQgaGFuZGxlci4KKyAqCisgKiBAcGFy YW0gZGV2X2lkIGlzIHRvIHBhc3MgdG8gdGhlIGludGVycnVwdCBoYW5kbGVyLCBpbiB0aGUg c2FtZSB3YXkgYXMgdGhlCisgKiBzdGFuZGFyZCBMaW51eCBpcnEgcmVxdWVzdCBjYWxsLgor ICoKKyAqIEBwYXJhbSBpcnEgaXMgdGhlIElSUSBsZXZlbCBvZiB0aGUgaW50ZXJydXB0IGhh bmRsZXIgdG8gYmUgZnJlZWQuCisgKgorICogQHJldHZhbCAwIG9uIHN1Y2Nlc3MuCisgKiBA cmV0dmFsIC1FSU5WQUwgaWYgQGEgaXJxIGlzIG5vdCBhIHZhbGlkIGV4dGVybmFsIElSUSBu dW1iZXIuCisgKi8KK2ludCBydGhhbF9yZWxlYXNlX2xpbnV4X2lycSAodW5zaWduZWQgaXJx LCB2b2lkICpkZXZfaWQpCisKK3sKKyAgICB1bnNpZ25lZCBsb25nIGZsYWdzOworCisgICAg aWYgKGlycSA+PSBJUElQRV9OUl9YSVJRUyB8fCBydGhhbF9saW51eF9pcnFbaXJxXS5jb3Vu dCA9PSAwKQorCXJldHVybiAtRUlOVkFMOworCisgICAgZnJlZV9pcnEoaXJxLGRldl9pZCk7 CisKKyAgICBmbGFncyA9IHJ0aGFsX3NwaW5fbG9ja19pcnFzYXZlKCZpcnFfZGVzY1tpcnFd LmxvY2spOworCisgICAgaWYgKC0tcnRoYWxfbGludXhfaXJxW2lycV0uY291bnQgPT0gMCAm JiBpcnFfZGVzY1tpcnFdLmFjdGlvbikKKwlpcnFfZGVzY1tpcnFdLmFjdGlvbi0+ZmxhZ3Mg PSBydGhhbF9saW51eF9pcnFbaXJxXS5mbGFnczsKKworICAgIHJ0aGFsX3NwaW5fdW5sb2Nr X2lycXJlc3RvcmUoZmxhZ3MsJmlycV9kZXNjW2lycV0ubG9jayk7CisKKyAgICByZXR1cm4g MDsKK30KKworLyoqCisgKiBQZW5kIGFuIElSUSB0byBMaW51eC4KKyAqCisgKiBydGhhbF9w ZW5kX2xpbnV4X2lycSBhcHBlbmRzIGEgTGludXggaW50ZXJydXB0IGlycSBmb3IgcHJvY2Vz c2luZyBpbiBMaW51eCBJUlEKKyAqIG1vZGUsIGkuZS4gd2l0aCBoYXJkd2FyZSBpbnRlcnJ1 cHRzIGZ1bGx5IGVuYWJsZWQuCisgKi8KK2ludCBydGhhbF9wZW5kX2xpbnV4X2lycSAodW5z aWduZWQgaXJxKQorCit7CisgICAgcmV0dXJuIGFkZW9zX3Byb3BhZ2F0ZV9pcnEoaXJxKTsK K30KKworLyoqCisgKiBJbnN0YWxsIGEgc3lzdGVtIHJlcXVlc3QgaGFuZGxlcgorICoKKyAq IHJ0aGFsX3JlcXVlc3Rfc3JxIGluc3RhbGxzIGEgUlRBSSBzeXN0ZW0gcmVxdWVzdCAoc3Jx KSBieSBhc3NpZ25pbmcKKyAqIEBhIGhhbmRsZXIsIHRoZSBmdW5jdGlvbiB0byBiZSBjYWxs ZWQgaW4ga2VybmVsIHNwYWNlIGZvbGxvd2luZyBpdHMKKyAqIGFjdGl2YXRpb24gYnkgYSBj YWxsIHRvIHJ0aGFsX3BlbmRfbGludXhfc3JxKCkuIEBhIGhhbmRsZXIgaXMgaW4KKyAqIHBy YWN0aWNlIHVzZWQgdG8gcmVxdWVzdCBhIHNlcnZpY2UgZnJvbSB0aGUga2VybmVsLiBJbiBm YWN0IExpbnV4CisgKiBzeXN0ZW0gcmVxdWVzdHMgY2Fubm90IGJlIHVzZWQgc2FmZWx5IGZy b20gUlRBSSBzbyB5b3UgY2FuIHNldHVwIGEKKyAqIGhhbmRsZXIgdGhhdCByZWNlaXZlcyBy ZWFsIHRpbWUgcmVxdWVzdHMgYW5kIHNhZmVseSBleGVjdXRlcyB0aGVtCisgKiB3aGVuIExp bnV4IGlzIHJ1bm5pbmcuCisgKgorICogQHJldHVybiB0aGUgbnVtYmVyIG9mIHRoZSBhc3Np Z25lZCBzeXN0ZW0gcmVxdWVzdCBvbiBzdWNjZXNzLgorICogQHJldHZhbCAtRUlOVkFMIGlm IEBhIGhhbmRsZXIgaXMgQGMgTlVMTC4KKyAqIEByZXR2YWwgLUVCVVNZIGlmIG5vIGZyZWUg c3JxIHNsb3QgaXMgYXZhaWxhYmxlLgorICovCitpbnQgcnRoYWxfcmVxdWVzdF9zcnEgKHVu c2lnbmVkIGxhYmVsLAorCQkgICAgICAgdm9pZCAoKmhhbmRsZXIpKHZvaWQpKQoreworICAg IHVuc2lnbmVkIGxvbmcgZmxhZ3M7CisgICAgaW50IHNycTsKKworICAgIGlmIChoYW5kbGVy ID09IE5VTEwpCisJcmV0dXJuIC1FSU5WQUw7CisKKyAgICBmbGFncyA9IHJ0aGFsX3NwaW5f bG9ja19pcnFzYXZlKCZydGhhbF9zc3JxX2xvY2spOworCisgICAgaWYgKHJ0aGFsX3N5c3Jl cV9tYXAgIT0gfjApCisJeworCXNycSA9IGZmeihydGhhbF9zeXNyZXFfbWFwKTsKKwlzZXRf Yml0KHNycSwmcnRoYWxfc3lzcmVxX21hcCk7CisJcnRoYWxfc3lzcmVxX3RhYmxlW3NycV0u aGFuZGxlciA9IGhhbmRsZXI7CisJcnRoYWxfc3lzcmVxX3RhYmxlW3NycV0ubGFiZWwgPSBs YWJlbDsKKwl9CisgICAgZWxzZQorCXNycSA9IC1FQlVTWTsKKworICAgIHJ0aGFsX3NwaW5f dW5sb2NrX2lycXJlc3RvcmUoZmxhZ3MsJnJ0aGFsX3NzcnFfbG9jayk7CisKKyAgICByZXR1 cm4gc3JxOworfQorCisvKioKKyAqIFVuaW5zdGFsbCBhIHN5c3RlbSByZXF1ZXN0IGhhbmRs ZXIKKyAqCisgKiBydGhhbF9yZWxlYXNlX3NycSB1bmluc3RhbGxzIHRoZSBzcGVjaWZpZWQg c3lzdGVtIGNhbGwgQGEgc3JxLCByZXR1cm5lZCBieQorICogaW5zdGFsbGluZyB0aGUgcmVs YXRlZCBoYW5kbGVyIHdpdGggYSBwcmV2aW91cyBjYWxsIHRvIHJ0aGFsX3JlcXVlc3Rfc3Jx KCkuCisgKgorICogQHJldHZhbCBFSU5WQUwgaWYgQGEgc3JxIGlzIGludmFsaWQuCisgKi8K K2ludCBydGhhbF9yZWxlYXNlX3NycSAodW5zaWduZWQgc3JxKQorCit7CisgICAgaWYgKHNy cSA8IDEgfHwKKwlzcnEgPj0gUlRIQUxfTlJfU1JRUyB8fAorCSF0ZXN0X2FuZF9jbGVhcl9i aXQoc3JxLCZydGhhbF9zeXNyZXFfbWFwKSkKKwlyZXR1cm4gLUVJTlZBTDsKKworICAgIHJl dHVybiAwOworfQorCisvKioKKyAqIEFwcGVuZCBhIExpbnV4IElSUS4KKyAqCisgKiBydGhh bF9wZW5kX2xpbnV4X3NycSBhcHBlbmRzIGEgc3lzdGVtIGNhbGwgcmVxdWVzdCBzcnEgdG8g YmUgdXNlZCBhcyBhIHNlcnZpY2UKKyAqIHJlcXVlc3QgdG8gdGhlIExpbnV4IGtlcm5lbC4K KyAqCisgKiBAcGFyYW0gc3JxIGlzIHRoZSB2YWx1ZSByZXR1cm5lZCBieSBydGhhbF9yZXF1 ZXN0X3NycS4KKyAqLworaW50IHJ0aGFsX3BlbmRfbGludXhfc3JxICh1bnNpZ25lZCBzcnEp CisKK3sKKyAgICBpZiAoc3JxID4gMCAmJiBzcnEgPCBSVEhBTF9OUl9TUlFTKQorCXsKKwlp ZiAoIXRlc3RfYW5kX3NldF9iaXQoc3JxLCZydGhhbF9zeXNyZXFfcGVuZGluZykpCisJICAg IHsKKwkgICAgYWRlb3Nfc2NoZWR1bGVfaXJxKHJ0aGFsX3N5c3JlcV92aXJxKTsKKwkgICAg cmV0dXJuIDE7CisJICAgIH0KKworCXJldHVybiAwOwkvKiBBbHJlYWR5IHBlbmRpbmcuICov CisJfQorCisgICAgcmV0dXJuIC1FSU5WQUw7Cit9CisKKyNpZmRlZiBDT05GSUdfU01QCisK K2ludCBydGhhbF9zZXRfaXJxX2FmZmluaXR5ICh1bnNpZ25lZCBpcnEsIGNwdW1hc2tfdCBj cHVtYXNrLCBjcHVtYXNrX3QgKm9sZG1hc2spCisKK3sKKyAgICBjcHVtYXNrX3QgX29sZG1h c2s7CisKKyAgICBpZiAoaXJxID49IElQSVBFX05SX1hJUlFTKQorCXJldHVybiAtRUlOVkFM OworCisgICAgX29sZG1hc2sgPSBhZGVvc19zZXRfaXJxX2FmZmluaXR5KGlycSxjcHVtYXNr KTsKKworICAgIGlmIChvbGRtYXNrKQorCSpvbGRtYXNrID0gX29sZG1hc2s7CisKKyAgICBy ZXR1cm4gY3B1c19lbXB0eShfb2xkbWFzaykgPyAtRUlOVkFMIDogMDsKK30KKworI2Vsc2Ug LyogIUNPTkZJR19TTVAgKi8KKworaW50IHJ0aGFsX3NldF9pcnFfYWZmaW5pdHkgKHVuc2ln bmVkIGlycSwgY3B1bWFza190IGNwdW1hc2ssIGNwdW1hc2tfdCAqb2xkbWFzaykgeworCisg ICAgcmV0dXJuIDA7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfU01QICovCisKK3J0aGFsX3Ry YXBfaGFuZGxlcl90IHJ0aGFsX3NldF90cmFwX2hhbmRsZXIgKHJ0aGFsX3RyYXBfaGFuZGxl cl90IGhhbmRsZXIpIHsKKworICAgIHJldHVybiAocnRoYWxfdHJhcF9oYW5kbGVyX3QpeGNo ZygmcnRoYWxfdHJhcF9oYW5kbGVyLGhhbmRsZXIpOworfQorCitzdGF0aWMgdm9pZCBydGhh bF90cmFwX2ZhdWx0IChhZGV2aW5mb190ICpldmluZm8pCisKK3sKKyAgICBhZGVvc19kZWNs YXJlX2NwdWlkOworCisgICAgYWRlb3NfbG9hZF9jcHVpZCgpOworCisgICAgaWYgKGV2aW5m by0+ZG9taWQgPT0gUlRIQUxfRE9NQUlOX0lEKQorCXsKKwlydGhhbF9yZWFsdGltZV9mYXVs dHNbY3B1aWRdW2V2aW5mby0+ZXZlbnRdKys7CisKKwlpZiAocnRoYWxfdHJhcF9oYW5kbGVy ICE9IE5VTEwgJiYKKwkgICAgdGVzdF9iaXQoY3B1aWQsJnJ0aGFsX2NwdV9yZWFsdGltZSkg JiYKKwkgICAgcnRoYWxfdHJhcF9oYW5kbGVyKGV2aW5mbykgIT0gMCkKKwkgICAgcmV0dXJu OworCX0KKworICAgIGFkZW9zX3Byb3BhZ2F0ZV9ldmVudChldmluZm8pOworfQorCitzdGF0 aWMgdm9pZCBydGhhbF9zc3JxX3RyYW1wb2xpbmUgKHVuc2lnbmVkIHZpcnEpCisKK3sKKyAg ICB1bnNpZ25lZCBsb25nIHBlbmRpbmc7CisKKyAgICBydGhhbF9zcGluX2xvY2soJnJ0aGFs X3NzcnFfbG9jayk7CisKKyAgICB3aGlsZSAoKHBlbmRpbmcgPSBydGhhbF9zeXNyZXFfcGVu ZGluZyAmIH5ydGhhbF9zeXNyZXFfcnVubmluZykgIT0gMCkKKwl7CisJdW5zaWduZWQgc3Jx ID0gZmZueihwZW5kaW5nKTsKKwlzZXRfYml0KHNycSwmcnRoYWxfc3lzcmVxX3J1bm5pbmcp OworCWNsZWFyX2JpdChzcnEsJnJ0aGFsX3N5c3JlcV9wZW5kaW5nKTsKKwlydGhhbF9zcGlu X3VubG9jaygmcnRoYWxfc3NycV9sb2NrKTsKKworCWlmICh0ZXN0X2JpdChzcnEsJnJ0aGFs X3N5c3JlcV9tYXApKQorCSAgICBydGhhbF9zeXNyZXFfdGFibGVbc3JxXS5oYW5kbGVyKCk7 CisKKwljbGVhcl9iaXQoc3JxLCZydGhhbF9zeXNyZXFfcnVubmluZyk7CisJcnRoYWxfc3Bp bl9sb2NrKCZydGhhbF9zc3JxX2xvY2spOworCX0KKworICAgIHJ0aGFsX3NwaW5fdW5sb2Nr KCZydGhhbF9zc3JxX2xvY2spOworfQorCitzdGF0aWMgdm9pZCBydGhhbF9kb21haW5fZW50 cnkgKGludCBpZmxhZykKKworeworICAgIHVuc2lnbmVkIHRyYXBucjsKKworI2lmICFkZWZp bmVkKENPTkZJR19BREVPU19OT1RIUkVBRFMpCisgICAgaWYgKCFpZmxhZykKKwlnb3RvIHNw aW47CisjZW5kaWYgLyogIUNPTkZJR19BREVPU19OT1RIUkVBRFMgKi8KKworICAgIC8qIFRy YXAgYWxsIGZhdWx0cy4gKi8KKyAgICBmb3IgKHRyYXBuciA9IDA7IHRyYXBuciA8IEFERU9T X05SX0ZBVUxUUzsgdHJhcG5yKyspCisJYWRlb3NfY2F0Y2hfZXZlbnQodHJhcG5yLCZydGhh bF90cmFwX2ZhdWx0KTsKKworICAgIHByaW50ayhLRVJOX0lORk8gIlJUQUk6IGhhbC9wcGM2 NCBsb2FkZWQuXG4iKTsKKworI2lmICFkZWZpbmVkKENPTkZJR19BREVPU19OT1RIUkVBRFMp Cisgc3BpbjoKKworICAgIGZvciAoOzspCisJYWRlb3Nfc3VzcGVuZF9kb21haW4oKTsKKyNl bmRpZiAvKiAhQ09ORklHX0FERU9TX05PVEhSRUFEUyAqLworfQorCisjaWZkZWYgQ09ORklH X1BST0NfRlMKKworc3RydWN0IHByb2NfZGlyX2VudHJ5ICpydGhhbF9wcm9jX3Jvb3Q7CisK K3N0YXRpYyBzc2l6ZV90IGhhbF9yZWFkX3Byb2MgKGNoYXIgKnBhZ2UsCisJCQkgICAgICBj aGFyICoqc3RhcnQsCisJCQkgICAgICBvZmZfdCBvZmYsCisJCQkgICAgICBpbnQgY291bnQs CisJCQkgICAgICBpbnQgKmVvZiwKKwkJCSAgICAgIHZvaWQgKmRhdGEpCit7CisgICAgaW50 IGxlbiwgbWFqb3IsIG1pbm9yLCBwYXRjaGxldmVsOworCisgICAgLyogQ2Fub25pY2FsaXpl IHRoZSBBZGVvcyByZWxuby1jYW5kaWRhdGUgaW5mb3JtYXRpb24gdG8gc29tZQorICAgICAg IG1ham9yLm1pbm9yLnBhdGNobGV2ZWwgZm9ybWF0IHRvIGJlIHBhcnNlci1mcmllbmRseS4g Ki8KKworICAgIG1ham9yID0gQURFT1NfTUFKT1JfTlVNQkVSOworCisgICAgaWYgKEFERU9T X01JTk9SX05VTUJFUiA8IDI1NSkKKwl7CisJLS1tYWpvcjsKKwltaW5vciA9IDk5OworCXBh dGNobGV2ZWwgPSBBREVPU19NSU5PUl9OVU1CRVI7CisJfQorICAgIGVsc2UKKwl7CisJbWlu b3IgPSAwOworCXBhdGNobGV2ZWwgPSAwOworCX0KKworICAgIGxlbiA9IHNwcmludGYocGFn ZSwiJWQuJWQuJWRcbiIsbWFqb3IsbWlub3IscGF0Y2hsZXZlbCk7CisgICAgbGVuIC09IG9m ZjsKKyAgICBpZiAobGVuIDw9IG9mZiArIGNvdW50KSAqZW9mID0gMTsKKyAgICAqc3RhcnQg PSBwYWdlICsgb2ZmOworICAgIGlmKGxlbiA+IGNvdW50KSBsZW4gPSBjb3VudDsKKyAgICBp ZihsZW4gPCAwKSBsZW4gPSAwOworCisgICAgcmV0dXJuIGxlbjsKK30KKworc3RhdGljIHNz aXplX3QgY29tcGlsZXJfcmVhZF9wcm9jIChjaGFyICpwYWdlLAorCQkJCSAgIGNoYXIgKipz dGFydCwKKwkJCQkgICBvZmZfdCBvZmYsCisJCQkJICAgaW50IGNvdW50LAorCQkJCSAgIGlu dCAqZW9mLAorCQkJCSAgIHZvaWQgKmRhdGEpCit7CisgICAgaW50IGxlbjsKKworICAgIGxl biA9IHNwcmludGYocGFnZSwiJXNcbiIsQ09ORklHX1JUQUlfQ09NUElMRVIpOworICAgIGxl biAtPSBvZmY7CisgICAgaWYgKGxlbiA8PSBvZmYgKyBjb3VudCkgKmVvZiA9IDE7CisgICAg KnN0YXJ0ID0gcGFnZSArIG9mZjsKKyAgICBpZihsZW4gPiBjb3VudCkgbGVuID0gY291bnQ7 CisgICAgaWYobGVuIDwgMCkgbGVuID0gMDsKKworICAgIHJldHVybiBsZW47Cit9CisKK3N0 YXRpYyBpbnQgaXJxX3JlYWRfcHJvYyAoY2hhciAqcGFnZSwKKwkJCSAgY2hhciAqKnN0YXJ0 LAorCQkJICBvZmZfdCBvZmYsCisJCQkgIGludCBjb3VudCwKKwkJCSAgaW50ICplb2YsCisJ CQkgIHZvaWQgKmRhdGEpCit7CisgICAgaW50IGxlbiA9IDAsIGNwdWlkLCBpcnE7CisgICAg Y2hhciAqcCA9IHBhZ2U7CisKKyAgICBwICs9IHNwcmludGYocCwiSVJRICIpOworCisgICAg Zm9yIChjcHVpZCA9IDA7IGNwdWlkIDwgbnVtX29ubGluZV9jcHVzKCk7IGNwdWlkKyspCisJ cCArPSBzcHJpbnRmKHAsIiAgICAgICAgQ1BVJWQiLGNwdWlkKTsKKworICAgIGZvciAoaXJx ID0gMDsgaXJxIDwgSVBJUEVfTlJfSVJRUzsgaXJxKyspCisJeworCWlmIChydGhhbF9yZWFs dGltZV9pcnFbaXJxXS5oYW5kbGVyID09IE5VTEwpCisJICAgIGNvbnRpbnVlOworCisJcCAr PSBzcHJpbnRmKHAsIlxuJTNkOiIsaXJxKTsKKworCWZvciAoY3B1aWQgPSAwOyBjcHVpZCA8 IG51bV9vbmxpbmVfY3B1cygpOyBjcHVpZCsrKQorCSAgICBwICs9IHNwcmludGYocCwiJTEy bHUiLHJ0aGFsX3JlYWx0aW1lX2lycVtpcnFdLmhpdHNbY3B1aWRdKTsKKwl9CisKKyAgICBw ICs9IHNwcmludGYocCwiXG4iKTsKKworICAgIGxlbiA9IHAgLSBwYWdlIC0gb2ZmOworICAg IGlmIChsZW4gPD0gb2ZmICsgY291bnQpICplb2YgPSAxOworICAgICpzdGFydCA9IHBhZ2Ug KyBvZmY7CisgICAgaWYgKGxlbiA+IGNvdW50KSBsZW4gPSBjb3VudDsKKyAgICBpZiAobGVu IDwgMCkgbGVuID0gMDsKKworICAgIHJldHVybiBsZW47Cit9CisKK3N0YXRpYyBpbnQgZmF1 bHRzX3JlYWRfcHJvYyAoY2hhciAqcGFnZSwKKwkJCSAgICAgY2hhciAqKnN0YXJ0LAorCQkJ ICAgICBvZmZfdCBvZmYsCisJCQkgICAgIGludCBjb3VudCwKKwkJCSAgICAgaW50ICplb2Ys CisJCQkgICAgIHZvaWQgKmRhdGEpCit7CisgICAgc3RhdGljIGNoYXIgKmZhdWx0X2xhYmVs c1tdID0geworCVswXSA9ICJEYXRhIG9yIGluc3RydWN0aW9uIGFjY2VzcyIsCisJWzFdID0g IkFsaWdubWVudCIsCisJWzJdID0gIkFsdGl2ZWMgdW5hdmFpbGFibGUiLAorCVszXSA9ICJQ cm9ncmFtIGNoZWNrIGV4Y2VwdGlvbiIsCisJWzRdID0gIk1hY2hpbmUgY2hlY2sgZXhjZXB0 aW9uIiwKKwlbNV0gPSAiVW5rbm93biIsCisJWzZdID0gIkluc3RydWN0aW9uIGJyZWFrcG9p bnQiLAorCVs3XSA9ICJSdW4gbW9kZSBleGNlcHRpb24iLAorCVs4XSA9ICJTaW5nbGUtc3Rl cCBleGNlcHRpb24iLAorCVs5XSA9ICJOb24tcmVjb3ZlcmFibGUgZXhjZXB0aW9uIiwKKwlb MTBdID0gIlNvZnR3YXJlIGVtdWxhdGlvbiIsCisJWzExXSA9ICJEZWJ1ZyIsCisJWzEyXSA9 ICJTUEUiLAorCVsxM10gPSAiQWx0aXZlYyBhc3Npc3QiCisgICAgfTsKKyAgICBpbnQgbGVu ID0gMCwgY3B1aWQsIHRyYXA7CisgICAgY2hhciAqcCA9IHBhZ2U7CisKKyAgICBwICs9IHNw cmludGYocCwiVFJBUCAiKTsKKworICAgIGZvciAoY3B1aWQgPSAwOyBjcHVpZCA8IG51bV9v bmxpbmVfY3B1cygpOyBjcHVpZCsrKQorCXAgKz0gc3ByaW50ZihwLCIgICAgICAgIENQVSVk IixjcHVpZCk7CisKKyAgICBmb3IgKHRyYXAgPSAwOyB0cmFwIDwgMTQ7IHRyYXArKykKKwl7 CisJcCArPSBzcHJpbnRmKHAsIlxuJTNkOiAiLHRyYXApOworCisJZm9yIChjcHVpZCA9IDA7 IGNwdWlkIDwgbnVtX29ubGluZV9jcHVzKCk7IGNwdWlkKyspCisJICAgIHAgKz0gc3ByaW50 ZihwLCIlMTJkIiwKKwkJCSBydGhhbF9yZWFsdGltZV9mYXVsdHNbY3B1aWRdW3RyYXBdKTsK KworCXAgKz0gc3ByaW50ZihwLCIgICAgKCVzKSIsZmF1bHRfbGFiZWxzW3RyYXBdKTsKKwl9 CisKKyAgICBwICs9IHNwcmludGYocCwiXG4iKTsKKworICAgIGxlbiA9IHAgLSBwYWdlIC0g b2ZmOworICAgIGlmIChsZW4gPD0gb2ZmICsgY291bnQpICplb2YgPSAxOworICAgICpzdGFy dCA9IHBhZ2UgKyBvZmY7CisgICAgaWYgKGxlbiA+IGNvdW50KSBsZW4gPSBjb3VudDsKKyAg ICBpZiAobGVuIDwgMCkgbGVuID0gMDsKKworICAgIHJldHVybiBsZW47Cit9CisKK3N0YXRp YyBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmFkZF9wcm9jX2xlYWYgKGNvbnN0IGNoYXIgKm5h bWUsCisJCQkJCSAgICAgcmVhZF9wcm9jX3QgcmRwcm9jLAorCQkJCQkgICAgIHdyaXRlX3By b2NfdCB3cnByb2MsCisJCQkJCSAgICAgdm9pZCAqZGF0YSwKKwkJCQkJICAgICBzdHJ1Y3Qg cHJvY19kaXJfZW50cnkgKnBhcmVudCkKK3sKKyAgICBpbnQgbW9kZSA9IHdycHJvYyA/IDA2 NDQgOiAwNDQ0OworICAgIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZW50cnk7CisKKyAgICBl bnRyeSA9IGNyZWF0ZV9wcm9jX2VudHJ5KG5hbWUsbW9kZSxwYXJlbnQpOworCisgICAgaWYg KGVudHJ5KQorCXsKKwllbnRyeS0+bmxpbmsgPSAxOworCWVudHJ5LT5kYXRhID0gZGF0YTsK KwllbnRyeS0+cmVhZF9wcm9jID0gcmRwcm9jOworCWVudHJ5LT53cml0ZV9wcm9jID0gd3Jw cm9jOworCWVudHJ5LT5vd25lciA9IFRISVNfTU9EVUxFOworCX0KKworICAgIHJldHVybiBl bnRyeTsKK30KKworc3RhdGljIGludCBydGhhbF9wcm9jX3JlZ2lzdGVyICh2b2lkKQorCit7 CisgICAgcnRoYWxfcHJvY19yb290ID0gY3JlYXRlX3Byb2NfZW50cnkoInJ0YWkiLFNfSUZE SVIsIDApOworCisgICAgaWYgKCFydGhhbF9wcm9jX3Jvb3QpCisJeworCXByaW50ayhLRVJO X0VSUiAiUlRBSTogVW5hYmxlIHRvIGluaXRpYWxpemUgL3Byb2MvcnRhaS5cbiIpOworCXJl dHVybiAtMTsKKyAgICAgICAgfQorCisgICAgcnRoYWxfcHJvY19yb290LT5vd25lciA9IFRI SVNfTU9EVUxFOworCisgICAgYWRkX3Byb2NfbGVhZigiaGFsIiwKKwkJICAmaGFsX3JlYWRf cHJvYywKKwkJICBOVUxMLAorCQkgIE5VTEwsCisJCSAgcnRoYWxfcHJvY19yb290KTsKKwor ICAgIGFkZF9wcm9jX2xlYWYoImNvbXBpbGVyIiwKKwkJICAmY29tcGlsZXJfcmVhZF9wcm9j LAorCQkgIE5VTEwsCisJCSAgTlVMTCwKKwkJICBydGhhbF9wcm9jX3Jvb3QpOworCisgICAg YWRkX3Byb2NfbGVhZigiaXJxIiwKKwkJICAmaXJxX3JlYWRfcHJvYywKKwkJICBOVUxMLAor CQkgIE5VTEwsCisJCSAgcnRoYWxfcHJvY19yb290KTsKKworICAgIGFkZF9wcm9jX2xlYWYo ImZhdWx0cyIsCisJCSAgJmZhdWx0c19yZWFkX3Byb2MsCisJCSAgTlVMTCwKKwkJICBOVUxM LAorCQkgIHJ0aGFsX3Byb2Nfcm9vdCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2 b2lkIHJ0aGFsX3Byb2NfdW5yZWdpc3RlciAodm9pZCkKKworeworICAgIHJlbW92ZV9wcm9j X2VudHJ5KCJoYWwiLHJ0aGFsX3Byb2Nfcm9vdCk7CisgICAgcmVtb3ZlX3Byb2NfZW50cnko ImNvbXBpbGVyIixydGhhbF9wcm9jX3Jvb3QpOworICAgIHJlbW92ZV9wcm9jX2VudHJ5KCJp cnEiLHJ0aGFsX3Byb2Nfcm9vdCk7CisgICAgcmVtb3ZlX3Byb2NfZW50cnkoImZhdWx0cyIs cnRoYWxfcHJvY19yb290KTsKKyAgICByZW1vdmVfcHJvY19lbnRyeSgicnRhaSIsTlVMTCk7 Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfUFJPQ19GUyAqLworCitpbnQgX19ydGhhbF9pbml0 ICh2b2lkKQorCit7CisgICAgYWRhdHRyX3QgYXR0cjsKKyAgICBpbnQgZXJyOworCisjaWZk ZWYgQ09ORklHX1NNUAorICAgIC8qIFRoZSBudWNsZXVzIGFsc28gc2V0cyB0aGUgc2FtZSBD UFUgYWZmaW5pdHkgc28gdGhhdCBib3RoCisgICAgICAgbW9kdWxlcyBrZWVwIHRoZWlyIGV4 ZWN1dGlvbiBzZXF1ZW5jZSBvbiBTTVAgYm94ZW4uICovCisgICAgc2V0X2NwdXNfYWxsb3dl ZChjdXJyZW50LGNwdW1hc2tfb2ZfY3B1KDApKTsKKyNlbmRpZiAvKiBDT05GSUdfU01QICov CisKKyAgICAvKiBBbGxvY2F0ZSBhIHZpcnR1YWwgaW50ZXJydXB0IHRvIGhhbmRsZSBzeXNy ZXFzIHdpdGhpbiB0aGUgTGludXgKKyAgICAgICBkb21haW4uICovCisgICAgcnRoYWxfc3lz cmVxX3ZpcnEgPSBhZGVvc19hbGxvY19pcnEoKTsKKworICAgIGlmICghcnRoYWxfc3lzcmVx X3ZpcnEpCisJeworCXByaW50ayhLRVJOX0VSUiAiUlRBSTogTm8gdmlydHVhbCBpbnRlcnJ1 cHQgYXZhaWxhYmxlLlxuIik7CisJcmV0dXJuIC1FQlVTWTsKKwl9CisKKyAgICBlcnIgPSBh ZGVvc192aXJ0dWFsaXplX2lycShydGhhbF9zeXNyZXFfdmlycSwKKwkJCSAmcnRoYWxfc3Ny cV90cmFtcG9saW5lLAorCQkJIE5VTEwsCisJCQkgSVBJUEVfSEFORExFX01BU0spOworICAg IGlmIChlcnIpCisgICAgeworICAgICAgICBwcmludGsoS0VSTl9FUlIgIlJUQUk6IEZhaWxl ZCB0byB2aXJ0dWFsaXplIElSUS5cbiIpOworICAgICAgICBnb3RvIG91dF9mcmVlX2lycTsK KyAgICB9CisKKyAgICBpZiAocnRoYWxfY3B1ZnJlcV9hcmcgPT0gMCkKKwl7CisJYWRzeXNp bmZvX3Qgc3lzaW5mbzsKKwlhZGVvc19nZXRfc3lzaW5mbygmc3lzaW5mbyk7CisJLyogVGhl IENQVSBmcmVxdWVuY3kgaXMgZXhwcmVzc2VkIGFzIHRoZSB0aW1lYmFzZSBmcmVxdWVuY3kK KwkgICBmb3IgdGhpcyBwb3J0LiAqLworCXJ0aGFsX2NwdWZyZXFfYXJnID0gKHVuc2lnbmVk IGxvbmcpc3lzaW5mby5jcHVmcmVxOworCX0KKworICAgIHJ0aGFsX3R1bmFibGVzLmNwdV9m cmVxID0gcnRoYWxfY3B1ZnJlcV9hcmc7CisKKyAgICBpZiAocnRoYWxfdGltZXJmcmVxX2Fy ZyA9PSAwKQorCXJ0aGFsX3RpbWVyZnJlcV9hcmcgPSBydGhhbF90dW5hYmxlcy5jcHVfZnJl cTsKKworICAgIHJ0aGFsX3R1bmFibGVzLnRpbWVyX2ZyZXEgPSBydGhhbF90aW1lcmZyZXFf YXJnOworCisjaWZkZWYgQ09ORklHX1BST0NfRlMKKyAgICBydGhhbF9wcm9jX3JlZ2lzdGVy KCk7CisjZW5kaWYgLyogQ09ORklHX1BST0NfRlMgKi8KKworICAgIC8qIExldCBBZGVvcyBk byBpdHMgbWFnaWMgZm9yIG91ciByZWFsLXRpbWUgZG9tYWluLiAqLworICAgIGFkZW9zX2lu aXRfYXR0cigmYXR0cik7CisgICAgYXR0ci5uYW1lID0gIlJUQUkiOworICAgIGF0dHIuZG9t aWQgPSBSVEhBTF9ET01BSU5fSUQ7CisgICAgYXR0ci5lbnRyeSA9ICZydGhhbF9kb21haW5f ZW50cnk7CisgICAgYXR0ci5wcmlvcml0eSA9IEFERU9TX1JPT1RfUFJJICsgMTAwOyAvKiBQ cmVjZWRlIExpbnV4IGluIHRoZSBwaXBlbGluZSAqLworCisgICAgZXJyID0gYWRlb3NfcmVn aXN0ZXJfZG9tYWluKCZydGhhbF9kb21haW4sJmF0dHIpOworCisgICAgaWYgKCFlcnIpCisJ ICAgIHJ0aGFsX2luaXRfZG9uZSA9IDE7CisgICAgZWxzZSAKKyAgICB7CisgICAgICAgIHBy aW50ayhLRVJOX0VSUiAiUlRBSTogRG9tYWluIHJlZ2lzdHJhdGlvbiBmYWlsZWQuXG4iKTsK KyAgICAgICAgZ290byBvdXRfcHJvY191bnJlZ2lzdGVyOworICAgIH0KKworICAgIHJldHVy biAwOworCitvdXRfcHJvY191bnJlZ2lzdGVyOgorI2lmZGVmIENPTkZJR19QUk9DX0ZTCisg ICAgcnRoYWxfcHJvY191bnJlZ2lzdGVyKCk7CisjZW5kaWYKKyAgICBhZGVvc192aXJ0dWFs aXplX2lycShydGhhbF9zeXNyZXFfdmlycSxOVUxMLE5VTEwsMCk7CisgICAKK291dF9mcmVl X2lycToKKyAgICBhZGVvc19mcmVlX2lycShydGhhbF9zeXNyZXFfdmlycSk7CisKKyAgICBy ZXR1cm4gZXJyOworfQorCit2b2lkIF9fcnRoYWxfZXhpdCAodm9pZCkKKworeworI2lmZGVm IENPTkZJR19TTVAKKyAgICAvKiBUaGUgbnVjbGV1cyBhbHNvIHNldHMgdGhlIHNhbWUgQ1BV IGFmZmluaXR5IHNvIHRoYXQgYm90aAorICAgICAgIG1vZHVsZXMga2VlcCB0aGVpciBleGVj dXRpb24gc2VxdWVuY2Ugb24gU01QIGJveGVuLiAqLworICAgIHNldF9jcHVzX2FsbG93ZWQo Y3VycmVudCxjcHVtYXNrX29mX2NwdSgwKSk7CisjZW5kaWYgLyogQ09ORklHX1NNUCAqLwor CisjaWZkZWYgQ09ORklHX1BST0NfRlMKKyAgICBydGhhbF9wcm9jX3VucmVnaXN0ZXIoKTsK KyNlbmRpZgorCisgICAgaWYgKHJ0aGFsX3N5c3JlcV92aXJxKQorCXsKKwlhZGVvc192aXJ0 dWFsaXplX2lycShydGhhbF9zeXNyZXFfdmlycSxOVUxMLE5VTEwsMCk7CisJYWRlb3NfZnJl ZV9pcnEocnRoYWxfc3lzcmVxX3ZpcnEpOworCX0KKworICAgIGlmIChydGhhbF9pbml0X2Rv bmUpCisJYWRlb3NfdW5yZWdpc3Rlcl9kb21haW4oJnJ0aGFsX2RvbWFpbik7CisKKyAgICBw cmludGsoS0VSTl9JTkZPICJSVEFJOiBoYWwvcHBjNjQgdW5sb2FkZWQuXG4iKTsKK30KKwor LypAfSovCisKK21vZHVsZV9pbml0KF9fcnRoYWxfaW5pdCk7Cittb2R1bGVfZXhpdChfX3J0 aGFsX2V4aXQpOworCitFWFBPUlRfU1lNQk9MKHJ0aGFsX3JlcXVlc3RfaXJxKTsKK0VYUE9S VF9TWU1CT0wocnRoYWxfcmVsZWFzZV9pcnEpOworRVhQT1JUX1NZTUJPTChydGhhbF9lbmFi bGVfaXJxKTsKK0VYUE9SVF9TWU1CT0wocnRoYWxfZGlzYWJsZV9pcnEpOworRVhQT1JUX1NZ TUJPTChydGhhbF9yZXF1ZXN0X2xpbnV4X2lycSk7CitFWFBPUlRfU1lNQk9MKHJ0aGFsX3Jl bGVhc2VfbGludXhfaXJxKTsKK0VYUE9SVF9TWU1CT0wocnRoYWxfcGVuZF9saW51eF9pcnEp OworRVhQT1JUX1NZTUJPTChydGhhbF9yZXF1ZXN0X3NycSk7CitFWFBPUlRfU1lNQk9MKHJ0 aGFsX3JlbGVhc2Vfc3JxKTsKK0VYUE9SVF9TWU1CT0wocnRoYWxfcGVuZF9saW51eF9zcnEp OworRVhQT1JUX1NZTUJPTChydGhhbF9zZXRfaXJxX2FmZmluaXR5KTsKK0VYUE9SVF9TWU1C T0wocnRoYWxfcmVxdWVzdF90aW1lcik7CitFWFBPUlRfU1lNQk9MKHJ0aGFsX3JlbGVhc2Vf dGltZXIpOworRVhQT1JUX1NZTUJPTChydGhhbF9zZXRfdHJhcF9oYW5kbGVyKTsKK0VYUE9S VF9TWU1CT0wocnRoYWxfY2FsaWJyYXRlX3RpbWVyKTsKKworRVhQT1JUX1NZTUJPTChydGhh bF9jcml0aWNhbF9lbnRlcik7CitFWFBPUlRfU1lNQk9MKHJ0aGFsX2NyaXRpY2FsX2V4aXQp OworRVhQT1JUX1NZTUJPTChydGhhbF9zd2l0Y2hfY29udGV4dCk7CisKK0VYUE9SVF9TWU1C T0wocnRoYWxfZG9tYWluKTsKK0VYUE9SVF9TWU1CT0wocnRoYWxfdHVuYWJsZXMpOworRVhQ T1JUX1NZTUJPTChydGhhbF9jcHVfcmVhbHRpbWUpOworI2lmZGVmIENPTkZJR19QUk9DX0ZT CitFWFBPUlRfU1lNQk9MKHJ0aGFsX3Byb2Nfcm9vdCk7CisjZW5kaWYgLyogQ09ORklHX1BS T0NfRlMgKi8KKworI2lmZGVmIENPTkZJR19SVEFJX0hXX0ZQVQorRVhQT1JUX1NZTUJPTChy dGhhbF9pbml0X2ZwdSk7CitFWFBPUlRfU1lNQk9MKHJ0aGFsX3NhdmVfZnB1KTsKK0VYUE9S VF9TWU1CT0wocnRoYWxfcmVzdG9yZV9mcHUpOworI2VuZGlmIC8qIENPTkZJR19SVEFJX0hX X0ZQVSAqLwpkaWZmIC1OcnUgZnVzaW9uLTAuNy4xL2FyY2gvcHBjNjQvaGFsL3N3aXRjaC5T IGZ1c2lvbi0wLjcuMS1wcGM2NC1kZXZlbC9hcmNoL3BwYzY0L2hhbC9zd2l0Y2guUwotLS0g ZnVzaW9uLTAuNy4xL2FyY2gvcHBjNjQvaGFsL3N3aXRjaC5TCTE5NzAtMDEtMDEgMDI6MDA6 MDAuMDAwMDAwMDAwICswMjAwCisrKyBmdXNpb24tMC43LjEtcHBjNjQtZGV2ZWwvYXJjaC9w cGM2NC9oYWwvc3dpdGNoLlMJMjAwNS0wNi0wMSAxNjoyMDo1Mi4wMDAwMDAwMDAgKzAzMDAK QEAgLTAsMCArMSwxMjggQEAKKy8qCisgKiBhcmNoL3BwYzY0L2hhbC9zd2l0Y2guUworICoK KyAqIEZ1c2lvbiA2NC1iaXQgUG93ZXJQQyBhZG9wdGlvbgorICogQ29weXJpZ2h0IChDKSAy MDA1IFRhbmVsaSBWw6Row6RrYW5nYXMgYW5kIEhlaWtraSBMaW5kaG9sbQorICogYmFzZWQg b24gcHJldmlvdXMgd29yazoKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgUGhpbGlwcGUg R2VydW0uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g cmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0 aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJy aWRnZSBNQSAwMjEzOSwKKyAqIFVTQTsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKyAqIHZlcnNpb24uCisgKgorICog VGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0 aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog YWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29m dHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMz MCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGFzbS9w cm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxhc20vY3B1dGFibGUuaD4KKyNpbmNsdWRlIDxhc20v cGFnZS5oPgorI2luY2x1ZGUgPGFzbS9vZmZzZXRzLmg+CisjaW5jbHVkZSA8YXNtL3BwY19h c20uaD4KKyNpbmNsdWRlIDxydGFpX2NvbmZpZy5oPiAKKworI2RlZmluZSBSVEhBTF9TQVZF UkVHKHJlZywgcG9zKQlzdGQgcmVnLFNUQUNLX0ZSQU1FX09WRVJIRUFEKzQqKHBvcykocjEp CisjZGVmaW5lIFJUSEFMX0xPQURSRUcocmVnLCBwb3MpCWxkIHJlZyxTVEFDS19GUkFNRV9P VkVSSEVBRCs0Kihwb3MpKHIxKQorCisvKgorICogcjM9b3V0X2tzcHAsIHI0PWluX2tzcHAK KyAqLworX0dMT0JBTChydGhhbF9zd2l0Y2hfY29udGV4dCkKKwkvKiBvcmlnLiAxMjQgLSBX SFk/ICovCisJLyogMTA4KzE2ID0gMTI0ICAoMTYgPSBTVEFDS19GUkFNRV9PVkVSSEVBRCBv biBwcGMzMikKKyAgICAgICAgc3RkdSAgICByMSwtMjI0LVNUQUNLX0ZSQU1FX09WRVJIRUFE KHIxKQorCisgICAgICAgIC8qIFNhdmUgZ2VuZXJhbCBwdXJwb3NlIHJlZ2lzdGVycy4gKi8K KworCVJUSEFMX1NBVkVSRUcocjMxLDApCisJUlRIQUxfU0FWRVJFRyhyMzAsMSkKKwlSVEhB TF9TQVZFUkVHKHIyOSwyKQorCVJUSEFMX1NBVkVSRUcocjI4LDMpCisJUlRIQUxfU0FWRVJF RyhyMjcsNCkKKwlSVEhBTF9TQVZFUkVHKHIyNiw1KQorCVJUSEFMX1NBVkVSRUcocjI1LDYp CisJUlRIQUxfU0FWRVJFRyhyMjQsNykKKwlSVEhBTF9TQVZFUkVHKHIyMyw4KQorCVJUSEFM X1NBVkVSRUcocjIyLDkpCisJUlRIQUxfU0FWRVJFRyhyMjEsMTApCisJUlRIQUxfU0FWRVJF RyhyMjAsMTEpCisJUlRIQUxfU0FWRVJFRyhyMTksMTIpCisJUlRIQUxfU0FWRVJFRyhyMTgs MTMpCisJUlRIQUxfU0FWRVJFRyhyMTcsMTQpCisJUlRIQUxfU0FWRVJFRyhyMTYsMTUpCisJ UlRIQUxfU0FWRVJFRyhyMTUsMTYpCisJUlRIQUxfU0FWRVJFRyhyMTQsMTcpCisJUlRIQUxf U0FWRVJFRyhyMTMsMTgpCisJUlRIQUxfU0FWRVJFRyhyMywxOSkKKwlSVEhBTF9TQVZFUkVH KHIyLDIwKQorCVJUSEFMX1NBVkVSRUcocjAsMjEpCisKKyAgICAgICAgLyogU2F2ZSBzcGVj aWFsIHJlZ2lzdGVycy4gKi8KKwkKKwltZmN0ciAgICByMgorCVJUSEFMX1NBVkVSRUcocjIs MjIpCisgICAgICAgIG1mY3IgICAgIHIyCisJUlRIQUxfU0FWRVJFRyhyMiwyMykKKyAgICAg ICAgbWZ4ZXIgICAgcjIKKwlSVEhBTF9TQVZFUkVHKHIyLDI0KQorICAgICAgICBtZmxyICAg ICByMgorCVJUSEFMX1NBVkVSRUcocjIsMjUpCisgICAgICAgIG1mbXNyICAgIHIyCisJUlRI QUxfU0FWRVJFRyhyMiwyNikKKworICAgICAgICAvKiBTd2l0Y2ggc3RhY2tzLiAqLworCQor ICAgICAgICBzdGQgICAgICByMSwwKHIzKSAgICAgICAvKiAqb3V0X2tzcHAgPSBzcCAqLwor CS8qIFRPRE86IFZTSURzICovCisgICAgICAgIGxkICAgICAgcjEsMChyNCkgICAgICAgLyog c3AgPSAqaW5fa3NwcCAqLworCisgICAgICAgIC8qIFJlc3RvcmUgc3BlY2lhbCByZWdpc3Rl cnMuICovCisKKwlSVEhBTF9MT0FEUkVHKHIyLDI2KQorICAgICAgICBtdG1zcmQgICByMgor CVJUSEFMX0xPQURSRUcocjIsMjUpCisgICAgICAgIG10bHIgICAgIHIyCisJUlRIQUxfTE9B RFJFRyhyMiwyNCkKKyAgICAgICAgbXR4ZXIgICAgcjIKKwlSVEhBTF9MT0FEUkVHKHIyLDIz KQorICAgICAgICBtdGNyICAgICByMgorCVJUSEFMX0xPQURSRUcocjIsMjIpCisgICAgICAg IG10Y3RyICAgIHIyCisKKwkvKiBSZXN0b3JlIGdlbmVyYWwgcHVycG9zZSByZWdpc3RlcnMu ICovCisJCisJUlRIQUxfTE9BRFJFRyhyMCwyMSkKKwlSVEhBTF9MT0FEUkVHKHIyLDIwKQor CVJUSEFMX0xPQURSRUcocjMsMTkpCisJUlRIQUxfTE9BRFJFRyhyMTMsMTgpCisJUlRIQUxf TE9BRFJFRyhyMTQsMTcpCisJUlRIQUxfTE9BRFJFRyhyMTUsMTYpCisJUlRIQUxfTE9BRFJF RyhyMTYsMTUpCisJUlRIQUxfTE9BRFJFRyhyMTcsMTQpCisJUlRIQUxfTE9BRFJFRyhyMTgs MTMpCisJUlRIQUxfTE9BRFJFRyhyMTksMTIpCisJUlRIQUxfTE9BRFJFRyhyMjAsMTEpCisJ UlRIQUxfTE9BRFJFRyhyMjEsMTApCisJUlRIQUxfTE9BRFJFRyhyMjIsOSkKKwlSVEhBTF9M T0FEUkVHKHIyMyw4KQorCVJUSEFMX0xPQURSRUcocjI0LDcpCisJUlRIQUxfTE9BRFJFRyhy MjUsNikKKwlSVEhBTF9MT0FEUkVHKHIyNiw1KQorCVJUSEFMX0xPQURSRUcocjI3LDQpCisJ UlRIQUxfTE9BRFJFRyhyMjgsMykKKwlSVEhBTF9MT0FEUkVHKHIyOSwyKQorCVJUSEFMX0xP QURSRUcocjMwLDEpCisJUlRIQUxfTE9BRFJFRyhyMzEsMCkKKworICAgICAgICBhZGRpICAg IHIxLHIxLDIyNCtTVEFDS19GUkFNRV9PVkVSSEVBRAorCisgICAgICAgIGJscgpkaWZmIC1O cnUgZnVzaW9uLTAuNy4xL2NvbmZpZy9hdXRvY29uZi9hcmNoMmhvc3Quc2ggZnVzaW9uLTAu Ny4xLXBwYzY0LWRldmVsL2NvbmZpZy9hdXRvY29uZi9hcmNoMmhvc3Quc2gKLS0tIGZ1c2lv bi0wLjcuMS9jb25maWcvYXV0b2NvbmYvYXJjaDJob3N0LnNoCTIwMDQtMDgtMjggMTM6NDU6 MzAuMDAwMDAwMDAwICswMzAwCisrKyBmdXNpb24tMC43LjEtcHBjNjQtZGV2ZWwvY29uZmln L2F1dG9jb25mL2FyY2gyaG9zdC5zaAkyMDA1LTA1LTE2IDE0OjU4OjM4LjAwMDAwMDAwMCAr MDMwMApAQCAtMTAsNiArMTAsOSBAQAogcHBjfHBvd2VycGMpCiAgICAgZWNobyBwb3dlcnBj LXVua25vd24tbGludXgtZ251CiAgICAgOzsKK3BwYzY0fHBvd2VycGM2NCkKKyAgICBlY2hv IHBvd2VycGM2NC11bmtub3duLWxpbnV4LWdudQorICAgIDs7CiAiIikKICAgICAjIFNob3J0 aGFuZCBub3Qgc3BlY2lmaWVkOiByZXR1cm4gZGVmYXVsdCB2YWx1ZS4KICAgICBlY2hvICQy CmRpZmYgLU5ydSBmdXNpb24tMC43LjEvY29uZmlndXJlIGZ1c2lvbi0wLjcuMS1wcGM2NC1k ZXZlbC9jb25maWd1cmUKLS0tIGZ1c2lvbi0wLjcuMS9jb25maWd1cmUJMjAwNS0wNC0wMiAx NzoyNjoxNi4wMDAwMDAwMDAgKzAzMDAKKysrIGZ1c2lvbi0wLjcuMS1wcGM2NC1kZXZlbC9j b25maWd1cmUJMjAwNS0wNS0xNiAxNToxMjo0Mi4wMDAwMDAwMDAgKzAzMDAKQEAgLTQ2Nyw3 ICs0NjcsNyBAQAogI2VuZGlmIgogCiBhY19zdWJkaXJzX2FsbD0iJGFjX3N1YmRpcnNfYWxs IHNpbSIKLWFjX3N1YnN0X3ZhcnM9J1NIRUxMIFBBVEhfU0VQQVJBVE9SIFBBQ0tBR0VfTkFN RSBQQUNLQUdFX1RBUk5BTUUgUEFDS0FHRV9WRVJTSU9OIFBBQ0tBR0VfU1RSSU5HIFBBQ0tB R0VfQlVHUkVQT1JUIGV4ZWNfcHJlZml4IHByZWZpeCBwcm9ncmFtX3RyYW5zZm9ybV9uYW1l IGJpbmRpciBzYmluZGlyIGxpYmV4ZWNkaXIgZGF0YWRpciBzeXNjb25mZGlyIHNoYXJlZHN0 YXRlZGlyIGxvY2Fsc3RhdGVkaXIgbGliZGlyIGluY2x1ZGVkaXIgb2xkaW5jbHVkZWRpciBp bmZvZGlyIG1hbmRpciBidWlsZF9hbGlhcyBob3N0X2FsaWFzIHRhcmdldF9hbGlhcyBERUZT IEVDSE9fQyBFQ0hPX04gRUNIT19UIExJQlMgYnVpbGQgYnVpbGRfY3B1IGJ1aWxkX3ZlbmRv ciBidWlsZF9vcyBob3N0IGhvc3RfY3B1IGhvc3RfdmVuZG9yIGhvc3Rfb3MgSU5TVEFMTF9Q Uk9HUkFNIElOU1RBTExfU0NSSVBUIElOU1RBTExfREFUQSBDQyBDRkxBR1MgTERGTEFHUyBD UFBGTEFHUyBhY19jdF9DQyBFWEVFWFQgT0JKRVhUIENZR1BBVEhfVyBQQUNLQUdFIFZFUlNJ T04gQUNMT0NBTCBBVVRPQ09ORiBBVVRPTUFLRSBBVVRPSEVBREVSIE1BS0VJTkZPIGluc3Rh bGxfc2ggU1RSSVAgYWNfY3RfU1RSSVAgSU5TVEFMTF9TVFJJUF9QUk9HUkFNIG1rZGlyX3Ag QVdLIFNFVF9NQUtFIGFtX19sZWFkaW5nX2RvdCBBTVRBUiBhbV9fdGFyIGFtX191bnRhciBE RVBESVIgYW1fX2luY2x1ZGUgYW1fX3F1b3RlIEFNREVQX1RSVUUgQU1ERVBfRkFMU0UgQU1E RVBCQUNLU0xBU0ggQ0NERVBNT0RFIGFtX19mYXN0ZGVwQ0NfVFJVRSBhbV9fZmFzdGRlcEND X0ZBTFNFIE1BSU5UQUlORVJfTU9ERV9UUlVFIE1BSU5UQUlORVJfTU9ERV9GQUxTRSBNQUlO VCBFR1JFUCBMTl9TIEVDSE8gQVIgYWNfY3RfQVIgUkFOTElCIGFjX2N0X1JBTkxJQiBDUFAg Q1hYIENYWEZMQUdTIGFjX2N0X0NYWCBDWFhERVBNT0RFIGFtX19mYXN0ZGVwQ1hYX1RSVUUg YW1fX2Zhc3RkZXBDWFhfRkFMU0UgQ1hYQ1BQIEY3NyBGRkxBR1MgYWNfY3RfRjc3IExJQlRP T0wgQ0NBUyBDQ0FTRkxBR1MgTEVYIExFWExJQiBMRVhfT1VUUFVUX1JPT1QgQ09ORklHX1JU QUlfSFdfU01JX0RFVEVDVF9UUlVFIENPTkZJR19SVEFJX0hXX1NNSV9ERVRFQ1RfRkFMU0Ug UlRBSV9NQVlCRV9TSU1ESVIgUlRBSV9NQVlCRV9ET0NESVIgRE9YWUdFTiBET1hZR0VOX0hB VkVfRE9UIERCWF9ET0NfUk9PVCBEQlhfRE9DX1RSVUUgREJYX0RPQ19GQUxTRSBEQlhfR0VO X0RPQ19ST09UIERCWF9MSU5UIERCWF9YU0xUUFJPQyBEQlhfRk9QIERCWF9NQVlCRV9OT05F VCBEQlhfUk9PVCBEQlhfWFNMX1JPT1QgREJYX0FCU19TUkNESVJfVFJVRSBEQlhfQUJTX1NS Q0RJUl9GQUxTRSBDT05GSUdfWDg2X0xPQ0FMX0FQSUNfVFJVRSBDT05GSUdfWDg2X0xPQ0FM X0FQSUNfRkFMU0UgQ09ORklHX1g4Nl9UUlVFIENPTkZJR19YODZfRkFMU0UgQ09ORklHX1BQ Q19UUlVFIENPTkZJR19QUENfRkFMU0UgQ09ORklHX1NNUF9UUlVFIENPTkZJR19TTVBfRkFM U0UgQ09ORklHX0xUVF9UUlVFIENPTkZJR19MVFRfRkFMU0UgQ09ORklHX1JUQUlfSFdfRlBV X1RSVUUgQ09ORklHX1JUQUlfSFdfRlBVX0ZBTFNFIENPTkZJR19SVEFJX09QVF9GVVNJT05f VFJVRSBDT05GSUdfUlRBSV9PUFRfRlVTSU9OX0ZBTFNFIENPTkZJR19SVEFJX09QVF9QSVBF X1RSVUUgQ09ORklHX1JUQUlfT1BUX1BJUEVfRkFMU0UgQ09ORklHX1JUQUlfU0tJTl9QT1NJ WF9UUlVFIENPTkZJR19SVEFJX1NLSU5fUE9TSVhfRkFMU0UgQ09ORklHX1JUQUlfU0tJTl9O QVRJVkVfVFJVRSBDT05GSUdfUlRBSV9TS0lOX05BVElWRV9GQUxTRSBDT05GSUdfUlRBSV9T S0lOX1BTT1NfVFJVRSBDT05GSUdfUlRBSV9TS0lOX1BTT1NfRkFMU0UgQ09ORklHX1JUQUlf U0tJTl9WWFdPUktTX1RSVUUgQ09ORklHX1JUQUlfU0tJTl9WWFdPUktTX0ZBTFNFIENPTkZJ R19SVEFJX1NLSU5fVlJUWF9UUlVFIENPTkZJR19SVEFJX1NLSU5fVlJUWF9GQUxTRSBDT05G SUdfUlRBSV9TS0lOX1VJVFJPTl9UUlVFIENPTkZJR19SVEFJX1NLSU5fVUlUUk9OX0ZBTFNF IENPTkZJR19SVEFJX09QVF9VVk1fVFJVRSBDT05GSUdfUlRBSV9PUFRfVVZNX0ZBTFNFIENP TkZJR19SVEFJX0RSSVZFUlNfMTY1NTBBX1RSVUUgQ09ORklHX1JUQUlfRFJJVkVSU18xNjU1 MEFfRkFMU0UgQ09ORklHX1JUQUlfT1BUX05BVElWRV9SRUdJU1RSWV9UUlVFIENPTkZJR19S VEFJX09QVF9OQVRJVkVfUkVHSVNUUllfRkFMU0UgQ09ORklHX1JUQUlfT1BUX05BVElWRV9Q SVBFX1RSVUUgQ09ORklHX1JUQUlfT1BUX05BVElWRV9QSVBFX0ZBTFNFIENPTkZJR19SVEFJ X09QVF9OQVRJVkVfU0VNX1RSVUUgQ09ORklHX1JUQUlfT1BUX05BVElWRV9TRU1fRkFMU0Ug Q09ORklHX1JUQUlfT1BUX05BVElWRV9FVkVOVF9UUlVFIENPTkZJR19SVEFJX09QVF9OQVRJ VkVfRVZFTlRfRkFMU0UgQ09ORklHX1JUQUlfT1BUX05BVElWRV9NVVRFWF9UUlVFIENPTkZJ R19SVEFJX09QVF9OQVRJVkVfTVVURVhfRkFMU0UgQ09ORklHX1JUQUlfT1BUX05BVElWRV9D T05EX1RSVUUgQ09ORklHX1JUQUlfT1BUX05BVElWRV9DT05EX0ZBTFNFIENPTkZJR19SVEFJ X09QVF9OQVRJVkVfUVVFVUVfVFJVRSBDT05GSUdfUlRBSV9PUFRfTkFUSVZFX1FVRVVFX0ZB TFNFIENPTkZJR19SVEFJX09QVF9OQVRJVkVfSEVBUF9UUlVFIENPTkZJR19SVEFJX09QVF9O QVRJVkVfSEVBUF9GQUxTRSBDT05GSUdfUlRBSV9PUFRfTkFUSVZFX0FMQVJNX1RSVUUgQ09O RklHX1JUQUlfT1BUX05BVElWRV9BTEFSTV9GQUxTRSBDT05GSUdfUlRBSV9PUFRfTkFUSVZF X0lOVFJfVFJVRSBDT05GSUdfUlRBSV9PUFRfTkFUSVZFX0lOVFJfRkFMU0UgQ09ORklHX1JU QUlfRE9DX0RPWF9UUlVFIENPTkZJR19SVEFJX0RPQ19ET1hfRkFMU0UgQ09ORklHX1JUQUlf TUFJTlRfVFJVRSBDT05GSUdfUlRBSV9NQUlOVF9GQUxTRSBDT05GSUdfUlRBSV9NQUlOVF9H Q0hfVFJVRSBDT05GSUdfUlRBSV9NQUlOVF9HQ0hfRkFMU0UgQ09ORklHX1JUQUlfTUFJTlRf UEdNX1RSVUUgQ09ORklHX1JUQUlfTUFJTlRfUEdNX0ZBTFNFIENPTkZJR19SVEFJX09MRF9G QVNISU9ORURfQlVJTERfVFJVRSBDT05GSUdfUlRBSV9PTERfRkFTSElPTkVEX0JVSUxEX0ZB TFNFIENST1NTX0NPTVBJTEUgRE9YWUdFTl9TSE9XX0lOQ0xVREVfRklMRVMgTEFURVhfQkFU Q0hNT0RFIExBVEVYX01PREUgUlRBSV9CVUlMRF9TVFJJTkcgUlRBSV9IT1NUX1NUUklORyBS VEFJX1RBUkdFVF9BUkNIIFJUQUlfVEFSR0VUX1NVQkFSQ0ggUlRBSV9LTU9EX0NGTEFHUyBS VEFJX1VTRVJfQ0ZMQUdTIFJUQUlfS01PRF9BUFBfQ0ZMQUdTIFJUQUlfVVNFUl9BUFBfQ0ZM QUdTIFJUQUlfRlBfQ0ZMQUdTIFJUQUlfTElOVVhfRElSIFJUQUlfTElOVVhfVkVSU0lPTiBS VEFJX01PRFVMRV9ESVIgUlRBSV9NT0RVTEVfRVhUIFJUQUlfS0JVSUxEX0VOViBSVEFJX0tC VUlMRF9UT1AgUlRBSV9LQlVJTERfQk9UVE9NIFJUQUlfS0JVSUxEX0NNRCBSVEFJX0tCVUlM RF9DTEVBTiBSVEFJX0tCVUlMRF9ESVNUQ0xFQU4gUlRBSV9QSVBFX05SREVWIHN1YmRpcnMg TElCT0JKUyBMVExJQk9CSlMnCithY19zdWJzdF92YXJzPSdTSEVMTCBQQVRIX1NFUEFSQVRP UiBQQUNLQUdFX05BTUUgUEFDS0FHRV9UQVJOQU1FIFBBQ0tBR0VfVkVSU0lPTiBQQUNLQUdF X1NUUklORyBQQUNLQUdFX0JVR1JFUE9SVCBleGVjX3ByZWZpeCBwcmVmaXggcHJvZ3JhbV90 cmFuc2Zvcm1fbmFtZSBiaW5kaXIgc2JpbmRpciBsaWJleGVjZGlyIGRhdGFkaXIgc3lzY29u ZmRpciBzaGFyZWRzdGF0ZWRpciBsb2NhbHN0YXRlZGlyIGxpYmRpciBpbmNsdWRlZGlyIG9s ZGluY2x1ZGVkaXIgaW5mb2RpciBtYW5kaXIgYnVpbGRfYWxpYXMgaG9zdF9hbGlhcyB0YXJn ZXRfYWxpYXMgREVGUyBFQ0hPX0MgRUNIT19OIEVDSE9fVCBMSUJTIGJ1aWxkIGJ1aWxkX2Nw dSBidWlsZF92ZW5kb3IgYnVpbGRfb3MgaG9zdCBob3N0X2NwdSBob3N0X3ZlbmRvciBob3N0 X29zIElOU1RBTExfUFJPR1JBTSBJTlNUQUxMX1NDUklQVCBJTlNUQUxMX0RBVEEgQ0MgQ0ZM QUdTIExERkxBR1MgQ1BQRkxBR1MgYWNfY3RfQ0MgRVhFRVhUIE9CSkVYVCBDWUdQQVRIX1cg UEFDS0FHRSBWRVJTSU9OIEFDTE9DQUwgQVVUT0NPTkYgQVVUT01BS0UgQVVUT0hFQURFUiBN QUtFSU5GTyBpbnN0YWxsX3NoIFNUUklQIGFjX2N0X1NUUklQIElOU1RBTExfU1RSSVBfUFJP R1JBTSBta2Rpcl9wIEFXSyBTRVRfTUFLRSBhbV9fbGVhZGluZ19kb3QgQU1UQVIgYW1fX3Rh ciBhbV9fdW50YXIgREVQRElSIGFtX19pbmNsdWRlIGFtX19xdW90ZSBBTURFUF9UUlVFIEFN REVQX0ZBTFNFIEFNREVQQkFDS1NMQVNIIENDREVQTU9ERSBhbV9fZmFzdGRlcENDX1RSVUUg YW1fX2Zhc3RkZXBDQ19GQUxTRSBNQUlOVEFJTkVSX01PREVfVFJVRSBNQUlOVEFJTkVSX01P REVfRkFMU0UgTUFJTlQgRUdSRVAgTE5fUyBFQ0hPIEFSIGFjX2N0X0FSIFJBTkxJQiBhY19j dF9SQU5MSUIgQ1BQIENYWCBDWFhGTEFHUyBhY19jdF9DWFggQ1hYREVQTU9ERSBhbV9fZmFz dGRlcENYWF9UUlVFIGFtX19mYXN0ZGVwQ1hYX0ZBTFNFIENYWENQUCBGNzcgRkZMQUdTIGFj X2N0X0Y3NyBMSUJUT09MIENDQVMgQ0NBU0ZMQUdTIExFWCBMRVhMSUIgTEVYX09VVFBVVF9S T09UIENPTkZJR19SVEFJX0hXX1NNSV9ERVRFQ1RfVFJVRSBDT05GSUdfUlRBSV9IV19TTUlf REVURUNUX0ZBTFNFIFJUQUlfTUFZQkVfU0lNRElSIFJUQUlfTUFZQkVfRE9DRElSIERPWFlH RU4gRE9YWUdFTl9IQVZFX0RPVCBEQlhfRE9DX1JPT1QgREJYX0RPQ19UUlVFIERCWF9ET0Nf RkFMU0UgREJYX0dFTl9ET0NfUk9PVCBEQlhfTElOVCBEQlhfWFNMVFBST0MgREJYX0ZPUCBE QlhfTUFZQkVfTk9ORVQgREJYX1JPT1QgREJYX1hTTF9ST09UIERCWF9BQlNfU1JDRElSX1RS VUUgREJYX0FCU19TUkNESVJfRkFMU0UgQ09ORklHX1g4Nl9MT0NBTF9BUElDX1RSVUUgQ09O RklHX1g4Nl9MT0NBTF9BUElDX0ZBTFNFIENPTkZJR19YODZfVFJVRSBDT05GSUdfWDg2X0ZB TFNFIENPTkZJR19QUENfVFJVRSBDT05GSUdfUFBDX0ZBTFNFIENPTkZJR19QUEM2NF9UUlVF IENPTkZJR19QUEM2NF9GQUxTRSBDT05GSUdfU01QX1RSVUUgQ09ORklHX1NNUF9GQUxTRSBD T05GSUdfTFRUX1RSVUUgQ09ORklHX0xUVF9GQUxTRSBDT05GSUdfUlRBSV9IV19GUFVfVFJV RSBDT05GSUdfUlRBSV9IV19GUFVfRkFMU0UgQ09ORklHX1JUQUlfT1BUX0ZVU0lPTl9UUlVF IENPTkZJR19SVEFJX09QVF9GVVNJT05fRkFMU0UgQ09ORklHX1JUQUlfT1BUX1BJUEVfVFJV RSBDT05GSUdfUlRBSV9PUFRfUElQRV9GQUxTRSBDT05GSUdfUlRBSV9TS0lOX1BPU0lYX1RS VUUgQ09ORklHX1JUQUlfU0tJTl9QT1NJWF9GQUxTRSBDT05GSUdfUlRBSV9TS0lOX05BVElW RV9UUlVFIENPTkZJR19SVEFJX1NLSU5fTkFUSVZFX0ZBTFNFIENPTkZJR19SVEFJX1NLSU5f UFNPU19UUlVFIENPTkZJR19SVEFJX1NLSU5fUFNPU19GQUxTRSBDT05GSUdfUlRBSV9TS0lO X1ZYV09SS1NfVFJVRSBDT05GSUdfUlRBSV9TS0lOX1ZYV09SS1NfRkFMU0UgQ09ORklHX1JU QUlfU0tJTl9WUlRYX1RSVUUgQ09ORklHX1JUQUlfU0tJTl9WUlRYX0ZBTFNFIENPTkZJR19S VEFJX1NLSU5fVUlUUk9OX1RSVUUgQ09ORklHX1JUQUlfU0tJTl9VSVRST05fRkFMU0UgQ09O RklHX1JUQUlfT1BUX1VWTV9UUlVFIENPTkZJR19SVEFJX09QVF9VVk1fRkFMU0UgQ09ORklH X1JUQUlfRFJJVkVSU18xNjU1MEFfVFJVRSBDT05GSUdfUlRBSV9EUklWRVJTXzE2NTUwQV9G QUxTRSBDT05GSUdfUlRBSV9PUFRfTkFUSVZFX1JFR0lTVFJZX1RSVUUgQ09ORklHX1JUQUlf T1BUX05BVElWRV9SRUdJU1RSWV9GQUxTRSBDT05GSUdfUlRBSV9PUFRfTkFUSVZFX1BJUEVf VFJVRSBDT05GSUdfUlRBSV9PUFRfTkFUSVZFX1BJUEVfRkFMU0UgQ09ORklHX1JUQUlfT1BU X05BVElWRV9TRU1fVFJVRSBDT05GSUdfUlRBSV9PUFRfTkFUSVZFX1NFTV9GQUxTRSBDT05G SUdfUlRBSV9PUFRfTkFUSVZFX0VWRU5UX1RSVUUgQ09ORklHX1JUQUlfT1BUX05BVElWRV9F VkVOVF9GQUxTRSBDT05GSUdfUlRBSV9PUFRfTkFUSVZFX01VVEVYX1RSVUUgQ09ORklHX1JU QUlfT1BUX05BVElWRV9NVVRFWF9GQUxTRSBDT05GSUdfUlRBSV9PUFRfTkFUSVZFX0NPTkRf VFJVRSBDT05GSUdfUlRBSV9PUFRfTkFUSVZFX0NPTkRfRkFMU0UgQ09ORklHX1JUQUlfT1BU X05BVElWRV9RVUVVRV9UUlVFIENPTkZJR19SVEFJX09QVF9OQVRJVkVfUVVFVUVfRkFMU0Ug Q09ORklHX1JUQUlfT1BUX05BVElWRV9IRUFQX1RSVUUgQ09ORklHX1JUQUlfT1BUX05BVElW RV9IRUFQX0ZBTFNFIENPTkZJR19SVEFJX09QVF9OQVRJVkVfQUxBUk1fVFJVRSBDT05GSUdf UlRBSV9PUFRfTkFUSVZFX0FMQVJNX0ZBTFNFIENPTkZJR19SVEFJX09QVF9OQVRJVkVfSU5U Ul9UUlVFIENPTkZJR19SVEFJX09QVF9OQVRJVkVfSU5UUl9GQUxTRSBDT05GSUdfUlRBSV9E T0NfRE9YX1RSVUUgQ09ORklHX1JUQUlfRE9DX0RPWF9GQUxTRSBDT05GSUdfUlRBSV9NQUlO VF9UUlVFIENPTkZJR19SVEFJX01BSU5UX0ZBTFNFIENPTkZJR19SVEFJX01BSU5UX0dDSF9U UlVFIENPTkZJR19SVEFJX01BSU5UX0dDSF9GQUxTRSBDT05GSUdfUlRBSV9NQUlOVF9QR01f VFJVRSBDT05GSUdfUlRBSV9NQUlOVF9QR01fRkFMU0UgQ09ORklHX1JUQUlfT0xEX0ZBU0hJ T05FRF9CVUlMRF9UUlVFIENPTkZJR19SVEFJX09MRF9GQVNISU9ORURfQlVJTERfRkFMU0Ug Q1JPU1NfQ09NUElMRSBET1hZR0VOX1NIT1dfSU5DTFVERV9GSUxFUyBMQVRFWF9CQVRDSE1P REUgTEFURVhfTU9ERSBSVEFJX0JVSUxEX1NUUklORyBSVEFJX0hPU1RfU1RSSU5HIFJUQUlf VEFSR0VUX0FSQ0ggUlRBSV9UQVJHRVRfU1VCQVJDSCBSVEFJX0tNT0RfQ0ZMQUdTIFJUQUlf VVNFUl9DRkxBR1MgUlRBSV9LTU9EX0FQUF9DRkxBR1MgUlRBSV9VU0VSX0FQUF9DRkxBR1Mg UlRBSV9GUF9DRkxBR1MgUlRBSV9MSU5VWF9ESVIgUlRBSV9MSU5VWF9WRVJTSU9OIFJUQUlf TU9EVUxFX0RJUiBSVEFJX01PRFVMRV9FWFQgUlRBSV9LQlVJTERfRU5WIFJUQUlfS0JVSUxE X1RPUCBSVEFJX0tCVUlMRF9CT1RUT00gUlRBSV9LQlVJTERfQ01EIFJUQUlfS0JVSUxEX0NM RUFOIFJUQUlfS0JVSUxEX0RJU1RDTEVBTiBSVEFJX1BJUEVfTlJERVYgc3ViZGlycyBMSUJP QkpTIExUTElCT0JKUycKIGFjX3N1YnN0X2ZpbGVzPScnCiAKICMgSW5pdGlhbGl6ZSBzb21l IHZhcmlhYmxlcyBzZXQgYnkgb3B0aW9ucy4KQEAgLTE5NTY1LDYgKzE5NTY1LDExIEBACiAJ d2FudGVkX2tlcm5lbF9hcmNoPUNPTkZJR19QUEMKIAlhcmNoX2hhdmVfc2ltPXkKICAgICAg ICAgOzsKKyBwb3dlcnBjNjQtKnxwcGM2NC0qKQorCVJUQUlfVEFSR0VUX0FSQ0g9cHBjNjQK Kwl3YW50ZWRfa2VybmVsX2FyY2g9Q09ORklHX1BQQzY0CisJYXJjaF9oYXZlX3NpbT1uCisg ICAgICAgIDs7CiAgKikgZWNobyAiIgogICAgZWNobyAiKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKiIKICAgIGVjaG8gIlN0aWxsIHVuc3VwcG9ydGVkIGhv c3Q6ICRob3N0IC0tIFNvcnJ5LiIKQEAgLTIwMjQ4LDcgKzIwMjUzLDcgQEAKIAkgICB0aW1l cl90eXBlPSI4MjU0IFBJVCIKIAlmaQogICAgICAgICA7OwotIHBwYykKKyBwcGN8cHBjNjQp CiAJdGltZXJfdHlwZT1kZWNyZW1lbnRlcgogICAgICAgICA7OwogZXNhYwpAQCAtMjEzMjUs NiArMjEzMzAsMTYgQEAKIAogCiAKK2lmIHRlc3QgIiRDT05GSUdfUFBDNjQiID0geTsgdGhl bgorICBDT05GSUdfUFBDNjRfVFJVRT0KKyAgQ09ORklHX1BQQzY0X0ZBTFNFPScjJworZWxz ZQorICBDT05GSUdfUFBDNjRfVFJVRT0nIycKKyAgQ09ORklHX1BQQzY0X0ZBTFNFPQorZmkK KworCisKIGlmIHRlc3QgIiRDT05GSUdfU01QIiA9IHk7IHRoZW4KICAgQ09ORklHX1NNUF9U UlVFPQogICBDT05GSUdfU01QX0ZBTFNFPScjJwpAQCAtMjE3MjMsNiArMjE3MzgsMTEgQEAK IAlSVEFJX1VTRVJfQ0ZMQUdTPSIkUlRBSV9VU0VSX0NGTEFHUyAtV2FsbCAtV3N0cmljdC1w cm90b3R5cGVzIC1waXBlIgogCVJUQUlfRlBfQ0ZMQUdTPSItZmZhc3QtbWF0aCAtbWhhcmQt ZmxvYXQiCiAgICAgICAgIDs7CisgcHBjNjQpCisJUlRBSV9UQVJHRVRfU1VCQVJDSD0KKwlS VEFJX1VTRVJfQ0ZMQUdTPSIkUlRBSV9VU0VSX0NGTEFHUyAtV2FsbCAtV3N0cmljdC1wcm90 b3R5cGVzIC1waXBlIgorCVJUQUlfRlBfQ0ZMQUdTPSItZmZhc3QtbWF0aCAtbWhhcmQtZmxv YXQiCisgICAgICAgIDs7CiBlc2FjCiAKIGlmIHRlc3QgeCRDT05GSUdfUlRBSV9PUFRfS1NZ TVMgPSB4eTsgdGhlbgpAQCAtMjE4MDYsNyArMjE4MjYsNyBAQAogCiAKIAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNf Y29uZmlnX2ZpbGVzPSIkYWNfY29uZmlnX2ZpbGVzIEdOVW1ha2VmaWxlIGNvbmZpZy9HTlVt YWtlZmlsZSBhcmNoL0dOVW1ha2VmaWxlIGFyY2gvaTM4Ni9HTlVtYWtlZmlsZSBhcmNoL2kz ODYvaGFsL0dOVW1ha2VmaWxlIGFyY2gvcHBjL0dOVW1ha2VmaWxlIGFyY2gvcHBjL2hhbC9H TlVtYWtlZmlsZSBpbmNsdWRlL0dOVW1ha2VmaWxlIGluY2x1ZGUvbnVjbGV1cy9HTlVtYWtl ZmlsZSBpbmNsdWRlL251Y2xldXMvYXNtLWkzODYvR05VbWFrZWZpbGUgaW5jbHVkZS9udWNs ZXVzL2FzbS1wcGMvR05VbWFrZWZpbGUgaW5jbHVkZS9udWNsZXVzL2FzbS11dm0vR05VbWFr ZWZpbGUgbnVjbGV1cy9HTlVtYWtlZmlsZSBudWNsZXVzL2xpYi9HTlVtYWtlZmlsZSBzY3Jp cHRzL0dOVW1ha2VmaWxlIHNjcmlwdHMvcnRhaS1jb25maWcgc2NyaXB0cy9ydGFpLWxvYWQg dGVzdHN1aXRlL0dOVW1ha2VmaWxlIHRlc3RzdWl0ZS9sYXRlbmN5L0dOVW1ha2VmaWxlIHRl c3RzdWl0ZS9rbGF0ZW5jeS9HTlVtYWtlZmlsZSB0ZXN0c3VpdGUvY3J1bmNoZXIvR05VbWFr ZWZpbGUgdGVzdHN1aXRlL3N3aXRjaC9HTlVtYWtlZmlsZSBza2lucy9HTlVtYWtlZmlsZSBz a2lucy9wb3NpeC9HTlVtYWtlZmlsZSBza2lucy9ydGFpL0dOVW1ha2VmaWxlIHNraW5zL3J0 YWkvbGliL0dOVW1ha2VmaWxlIHNraW5zL3Bzb3MrL0dOVW1ha2VmaWxlIHNraW5zL3VpdHJv bi9HTlVtYWtlZmlsZSBza2lucy92cnR4L0dOVW1ha2VmaWxlIHNraW5zL3Z4d29ya3MvR05V bWFrZWZpbGUgZHJpdmVycy9HTlVtYWtlZmlsZSBkcml2ZXJzLzE2NTUwQS9HTlVtYWtlZmls ZSBkcml2ZXJzLzE2NTUwQS9saWIvR05VbWFrZWZpbGUiCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY19jb25maWdfZmls ZXM9IiRhY19jb25maWdfZmlsZXMgR05VbWFrZWZpbGUgY29uZmlnL0dOVW1ha2VmaWxlIGFy Y2gvR05VbWFrZWZpbGUgYXJjaC9pMzg2L0dOVW1ha2VmaWxlIGFyY2gvaTM4Ni9oYWwvR05V bWFrZWZpbGUgYXJjaC9wcGMvR05VbWFrZWZpbGUgYXJjaC9wcGMvaGFsL0dOVW1ha2VmaWxl IGFyY2gvcHBjNjQvR05VbWFrZWZpbGUgYXJjaC9wcGM2NC9oYWwvR05VbWFrZWZpbGUgaW5j bHVkZS9HTlVtYWtlZmlsZSBpbmNsdWRlL251Y2xldXMvR05VbWFrZWZpbGUgaW5jbHVkZS9u dWNsZXVzL2FzbS1pMzg2L0dOVW1ha2VmaWxlIGluY2x1ZGUvbnVjbGV1cy9hc20tcHBjL0dO VW1ha2VmaWxlIGluY2x1ZGUvbnVjbGV1cy9hc20tcHBjNjQvR05VbWFrZWZpbGUgaW5jbHVk ZS9udWNsZXVzL2FzbS11dm0vR05VbWFrZWZpbGUgbnVjbGV1cy9HTlVtYWtlZmlsZSBudWNs ZXVzL2xpYi9HTlVtYWtlZmlsZSBzY3JpcHRzL0dOVW1ha2VmaWxlIHNjcmlwdHMvcnRhaS1j b25maWcgc2NyaXB0cy9ydGFpLWxvYWQgdGVzdHN1aXRlL0dOVW1ha2VmaWxlIHRlc3RzdWl0 ZS9sYXRlbmN5L0dOVW1ha2VmaWxlIHRlc3RzdWl0ZS9rbGF0ZW5jeS9HTlVtYWtlZmlsZSB0 ZXN0c3VpdGUvY3J1bmNoZXIvR05VbWFrZWZpbGUgdGVzdHN1aXRlL3N3aXRjaC9HTlVtYWtl ZmlsZSBza2lucy9HTlVtYWtlZmlsZSBza2lucy9wb3NpeC9HTlVtYWtlZmlsZSBza2lucy9y dGFpL0dOVW1ha2VmaWxlIHNraW5zL3J0YWkvbGliL0dOVW1ha2VmaWxlIHNraW5zL3Bzb3Mr L0dOVW1ha2VmaWxlIHNraW5zL3VpdHJvbi9HTlVtYWtlZmlsZSBza2lucy92cnR4L0dOVW1h a2VmaWxlIHNraW5zL3Z4d29ya3MvR05VbWFrZWZpbGUgZHJpdmVycy9HTlVtYWtlZmlsZSBk cml2ZXJzLzE2NTUwQS9HTlVtYWtlZmlsZSBkcml2ZXJzLzE2NTUwQS9saWIvR05VbWFrZWZp bGUiCiAKIAogaWYgdGVzdCBcISB4JFJUQUlfTUFZQkVfRE9DRElSID0geDsgdGhlbgpAQCAt MjE5ODIsNiArMjIwMDIsMTMgQEAKIFVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2Fz IG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgPiYyO30KICAgIHsgKGV4aXQgMSk7IGV4 aXQgMTsgfTsgfQogZmkKK2lmIHRlc3QgLXogIiR7Q09ORklHX1BQQzY0X1RSVUV9IiAmJiB0 ZXN0IC16ICIke0NPTkZJR19QUEM2NF9GQUxTRX0iOyB0aGVuCisgIHsgeyBlY2hvICIkYXNf bWU6JExJTkVOTzogZXJyb3I6IGNvbmRpdGlvbmFsIFwiQ09ORklHX1BQQzY0XCIgd2FzIG5l dmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGlu dm9rZWQgY29uZGl0aW9uYWxseS4iID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogY29uZGl0 aW9uYWwgXCJDT05GSUdfUFBDNjRcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhp cyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgPiYy O30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorZmkKIGlmIHRlc3QgLXogIiR7Q09O RklHX1NNUF9UUlVFfSIgJiYgdGVzdCAteiAiJHtDT05GSUdfU01QX0ZBTFNFfSI7IHRoZW4K ICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY29uZGl0aW9uYWwgXCJDT05G SUdfU01QXCIgd2FzIG5ldmVyIGRlZmluZWQuCiBVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1h Y3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iID4mNQpAQCAtMjI2MzIsMTAg KzIyNjU5LDEzIEBACiAgICJhcmNoL2kzODYvaGFsL0dOVW1ha2VmaWxlIiApIENPTkZJR19G SUxFUz0iJENPTkZJR19GSUxFUyBhcmNoL2kzODYvaGFsL0dOVW1ha2VmaWxlIiA7OwogICAi YXJjaC9wcGMvR05VbWFrZWZpbGUiICkgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGFy Y2gvcHBjL0dOVW1ha2VmaWxlIiA7OwogICAiYXJjaC9wcGMvaGFsL0dOVW1ha2VmaWxlIiAp IENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBhcmNoL3BwYy9oYWwvR05VbWFrZWZpbGUi IDs7CisgICJhcmNoL3BwYzY0L0dOVW1ha2VmaWxlIiApIENPTkZJR19GSUxFUz0iJENPTkZJ R19GSUxFUyBhcmNoL3BwYzY0L0dOVW1ha2VmaWxlIiA7OworICAiYXJjaC9wcGM2NC9oYWwv R05VbWFrZWZpbGUiICkgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGFyY2gvcHBjNjQv aGFsL0dOVW1ha2VmaWxlIiA7OwogICAiaW5jbHVkZS9HTlVtYWtlZmlsZSIgKSBDT05GSUdf RklMRVM9IiRDT05GSUdfRklMRVMgaW5jbHVkZS9HTlVtYWtlZmlsZSIgOzsKICAgImluY2x1 ZGUvbnVjbGV1cy9HTlVtYWtlZmlsZSIgKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMg aW5jbHVkZS9udWNsZXVzL0dOVW1ha2VmaWxlIiA7OwogICAiaW5jbHVkZS9udWNsZXVzL2Fz bS1pMzg2L0dOVW1ha2VmaWxlIiApIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBpbmNs dWRlL251Y2xldXMvYXNtLWkzODYvR05VbWFrZWZpbGUiIDs7CiAgICJpbmNsdWRlL251Y2xl dXMvYXNtLXBwYy9HTlVtYWtlZmlsZSIgKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMg aW5jbHVkZS9udWNsZXVzL2FzbS1wcGMvR05VbWFrZWZpbGUiIDs7CisgICJpbmNsdWRlL251 Y2xldXMvYXNtLXBwYzY0L0dOVW1ha2VmaWxlIiApIENPTkZJR19GSUxFUz0iJENPTkZJR19G SUxFUyBpbmNsdWRlL251Y2xldXMvYXNtLXBwYzY0L0dOVW1ha2VmaWxlIiA7OwogICAiaW5j bHVkZS9udWNsZXVzL2FzbS11dm0vR05VbWFrZWZpbGUiICkgQ09ORklHX0ZJTEVTPSIkQ09O RklHX0ZJTEVTIGluY2x1ZGUvbnVjbGV1cy9hc20tdXZtL0dOVW1ha2VmaWxlIiA7OwogICAi bnVjbGV1cy9HTlVtYWtlZmlsZSIgKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgbnVj bGV1cy9HTlVtYWtlZmlsZSIgOzsKICAgIm51Y2xldXMvbGliL0dOVW1ha2VmaWxlIiApIENP TkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBudWNsZXVzL2xpYi9HTlVtYWtlZmlsZSIgOzsK QEAgLTIyODY3LDYgKzIyODk3LDggQEAKIHMsQENPTkZJR19YODZfRkFMU0VALCRDT05GSUdf WDg2X0ZBTFNFLDt0IHQKIHMsQENPTkZJR19QUENfVFJVRUAsJENPTkZJR19QUENfVFJVRSw7 dCB0CiBzLEBDT05GSUdfUFBDX0ZBTFNFQCwkQ09ORklHX1BQQ19GQUxTRSw7dCB0CitzLEBD T05GSUdfUFBDNjRfVFJVRUAsJENPTkZJR19QUEM2NF9UUlVFLDt0IHQKK3MsQENPTkZJR19Q UEM2NF9GQUxTRUAsJENPTkZJR19QUEM2NF9GQUxTRSw7dCB0CiBzLEBDT05GSUdfU01QX1RS VUVALCRDT05GSUdfU01QX1RSVUUsO3QgdAogcyxAQ09ORklHX1NNUF9GQUxTRUAsJENPTkZJ R19TTVBfRkFMU0UsO3QgdAogcyxAQ09ORklHX0xUVF9UUlVFQCwkQ09ORklHX0xUVF9UUlVF LDt0IHQKZGlmZiAtTnJ1IGZ1c2lvbi0wLjcuMS9jb25maWd1cmUuaW4gZnVzaW9uLTAuNy4x LXBwYzY0LWRldmVsL2NvbmZpZ3VyZS5pbgotLS0gZnVzaW9uLTAuNy4xL2NvbmZpZ3VyZS5p bgkyMDA1LTAzLTMwIDE2OjQ5OjUzLjAwMDAwMDAwMCArMDMwMAorKysgZnVzaW9uLTAuNy4x LXBwYzY0LWRldmVsL2NvbmZpZ3VyZS5pbgkyMDA1LTA1LTE2IDE1OjE4OjQwLjAwMDAwMDAw MCArMDMwMApAQCAtNTMsNiArNTMsMTEgQEAKIAl3YW50ZWRfa2VybmVsX2FyY2g9Q09ORklH X1BQQwogCWFyY2hfaGF2ZV9zaW09eQogICAgICAgICA7OworIHBvd2VycGM2NC0qfHBwYzY0 LSopCisJUlRBSV9UQVJHRVRfQVJDSD1wcGM2NAorCXdhbnRlZF9rZXJuZWxfYXJjaD1DT05G SUdfUFBDNjQKKwlhcmNoX2hhdmVfc2ltPW4KKyAgICAgICAgOzsKICAqKSBlY2hvICIiCiAg ICBlY2hvICIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIgog ICAgZWNobyAiU3RpbGwgdW5zdXBwb3J0ZWQgaG9zdDogJGhvc3QgLS0gU29ycnkuIgpAQCAt NTkyLDcgKzU5Nyw3IEBACiAJICAgdGltZXJfdHlwZT0iODI1NCBQSVQiCiAJZmkKICAgICAg ICAgOzsKLSBwcGMpCisgcHBjfHBwYzY0KQogCXRpbWVyX3R5cGU9ZGVjcmVtZW50ZXIKICAg ICAgICAgOzsKIGVzYWMKQEAgLTEwMzUsNiArMTA0MCw3IEBACiBkbmwgQ1BVIGFyY2hpdGVj dHVyZQogQU1fQ09ORElUSU9OQUwoQ09ORklHX1g4NixbdGVzdCAiJENPTkZJR19YODYiID0g eV0pCiBBTV9DT05ESVRJT05BTChDT05GSUdfUFBDLFt0ZXN0ICIkQ09ORklHX1BQQyIgPSB5 XSkKK0FNX0NPTkRJVElPTkFMKENPTkZJR19QUEM2NCxbdGVzdCAiJENPTkZJR19QUEM2NCIg PSB5XSkKIEFNX0NPTkRJVElPTkFMKENPTkZJR19TTVAsW3Rlc3QgIiRDT05GSUdfU01QIiA9 IHldKQogQU1fQ09ORElUSU9OQUwoQ09ORklHX0xUVCxbdGVzdCAiJENPTkZJR19MVFQiID0g eV0pCiAKQEAgLTExMzIsNiArMTEzOCwxMSBAQAogCVJUQUlfVVNFUl9DRkxBR1M9IiRSVEFJ X1VTRVJfQ0ZMQUdTIC1XYWxsIC1Xc3RyaWN0LXByb3RvdHlwZXMgLXBpcGUiCiAJUlRBSV9G UF9DRkxBR1M9Ii1mZmFzdC1tYXRoIC1taGFyZC1mbG9hdCIKICAgICAgICAgOzsKKyBwcGM2 NCkKKwlSVEFJX1RBUkdFVF9TVUJBUkNIPQorCVJUQUlfVVNFUl9DRkxBR1M9IiRSVEFJX1VT RVJfQ0ZMQUdTIC1XYWxsIC1Xc3RyaWN0LXByb3RvdHlwZXMgLXBpcGUiCisJUlRBSV9GUF9D RkxBR1M9Ii1mZmFzdC1tYXRoIC1taGFyZC1mbG9hdCIKKyAgICAgICAgOzsKIGVzYWMKIAog aWYgdGVzdCB4JENPTkZJR19SVEFJX09QVF9LU1lNUyA9IHh5OyB0aGVuCkBAIC0xMjEyLDEw ICsxMjIzLDEzIEBACiAJYXJjaC9pMzg2L2hhbC9HTlVtYWtlZmlsZSBcCiAgICAgICAgIGFy Y2gvcHBjL0dOVW1ha2VmaWxlIFwKIAlhcmNoL3BwYy9oYWwvR05VbWFrZWZpbGUgXAorICAg ICAgICBhcmNoL3BwYzY0L0dOVW1ha2VmaWxlIFwKKwlhcmNoL3BwYzY0L2hhbC9HTlVtYWtl ZmlsZSBcCiAJaW5jbHVkZS9HTlVtYWtlZmlsZSBcCiAJaW5jbHVkZS9udWNsZXVzL0dOVW1h a2VmaWxlIFwKIAlpbmNsdWRlL251Y2xldXMvYXNtLWkzODYvR05VbWFrZWZpbGUgXAogCWlu Y2x1ZGUvbnVjbGV1cy9hc20tcHBjL0dOVW1ha2VmaWxlIFwKKwlpbmNsdWRlL251Y2xldXMv YXNtLXBwYzY0L0dOVW1ha2VmaWxlIFwKIAlpbmNsdWRlL251Y2xldXMvYXNtLXV2bS9HTlVt YWtlZmlsZSBcCiAJbnVjbGV1cy9HTlVtYWtlZmlsZSBcCiAJbnVjbGV1cy9saWIvR05VbWFr ZWZpbGUgXApkaWZmIC1OcnUgZnVzaW9uLTAuNy4xL2luY2x1ZGUvbnVjbGV1cy9HTlVtYWtl ZmlsZS5hbSBmdXNpb24tMC43LjEtcHBjNjQtZGV2ZWwvaW5jbHVkZS9udWNsZXVzL0dOVW1h a2VmaWxlLmFtCi0tLSBmdXNpb24tMC43LjEvaW5jbHVkZS9udWNsZXVzL0dOVW1ha2VmaWxl LmFtCTIwMDUtMDMtMDUgMTg6MTM6MDUuMDAwMDAwMDAwICswMjAwCisrKyBmdXNpb24tMC43 LjEtcHBjNjQtZGV2ZWwvaW5jbHVkZS9udWNsZXVzL0dOVW1ha2VmaWxlLmFtCTIwMDUtMDUt MTYgMTU6MjA6MjAuMDAwMDAwMDAwICswMzAwCkBAIC04LDYgKzgsMTAgQEAKIEFSQ0hESVIg PSBhc20tcHBjCiBlbmRpZgogCitpZiBDT05GSUdfUFBDNjQKK0FSQ0hESVIgPSBhc20tcHBj NjQKK2VuZGlmCisKIGluY2x1ZGVfSEVBREVSUyA9IFwKIAkJZnVzaW9uLmggXAogCQloZWFw LmggXApkaWZmIC1OcnUgZnVzaW9uLTAuNy4xL2luY2x1ZGUvbnVjbGV1cy9HTlVtYWtlZmls ZS5pbiBmdXNpb24tMC43LjEtcHBjNjQtZGV2ZWwvaW5jbHVkZS9udWNsZXVzL0dOVW1ha2Vm aWxlLmluCi0tLSBmdXNpb24tMC43LjEvaW5jbHVkZS9udWNsZXVzL0dOVW1ha2VmaWxlLmlu CTIwMDUtMDQtMDIgMTc6MjY6MjQuMDAwMDAwMDAwICswMzAwCisrKyBmdXNpb24tMC43LjEt cHBjNjQtZGV2ZWwvaW5jbHVkZS9udWNsZXVzL0dOVW1ha2VmaWxlLmluCTIwMDUtMDUtMTYg MTU6MjE6NTUuMDAwMDAwMDAwICswMzAwCkBAIC02Nyw3ICs2Nyw3IEBACiBIRUFERVJTID0g JChpbmNsdWRlX0hFQURFUlMpCiBFVEFHUyA9IGV0YWdzCiBDVEFHUyA9IGN0YWdzCi1ESVNU X1NVQkRJUlMgPSBhc20tcHBjIGFzbS1pMzg2IGFzbS11dm0KK0RJU1RfU1VCRElSUyA9IGFz bS1wcGMgYXNtLXBwYzY0IGFzbS1pMzg2IGFzbS11dm0KIERJU1RGSUxFUyA9ICQoRElTVF9D T01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCiBBQ0xP Q0FMID0gQEFDTE9DQUxACiBBTURFUF9GQUxTRSA9IEBBTURFUF9GQUxTRUAKQEAgLTg3LDYg Kzg3LDggQEAKIENPTkZJR19MVFRfVFJVRSA9IEBDT05GSUdfTFRUX1RSVUVACiBDT05GSUdf UFBDX0ZBTFNFID0gQENPTkZJR19QUENfRkFMU0VACiBDT05GSUdfUFBDX1RSVUUgPSBAQ09O RklHX1BQQ19UUlVFQAorQ09ORklHX1BQQzY0X0ZBTFNFID0gQENPTkZJR19QUEM2NF9GQUxT RUAKK0NPTkZJR19QUEM2NF9UUlVFID0gQENPTkZJR19QUEM2NF9UUlVFQAogQ09ORklHX1JU QUlfRE9DX0RPWF9GQUxTRSA9IEBDT05GSUdfUlRBSV9ET0NfRE9YX0ZBTFNFQAogQ09ORklH X1JUQUlfRE9DX0RPWF9UUlVFID0gQENPTkZJR19SVEFJX0RPQ19ET1hfVFJVRUAKIENPTkZJ R19SVEFJX0RSSVZFUlNfMTY1NTBBX0ZBTFNFID0gQENPTkZJR19SVEFJX0RSSVZFUlNfMTY1 NTBBX0ZBTFNFQApAQCAtMjc5LDYgKzI4MSw3IEBACiBzeXNjb25mZGlyID0gQHN5c2NvbmZk aXJACiB0YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAogQENPTkZJR19QUENfVFJVRUBB UkNIRElSID0gYXNtLXBwYworQENPTkZJR19QUEM2NF9UUlVFQEFSQ0hESVIgPSBhc20tcHBj NjQKIEBDT05GSUdfWDg2X1RSVUVAQVJDSERJUiA9IGFzbS1pMzg2CiBpbmNsdWRlX0hFQURF UlMgPSBcCiAJCWZ1c2lvbi5oIFwKZGlmZiAtTnJ1IGZ1c2lvbi0wLjcuMS9pbmNsdWRlL251 Y2xldXMvYXNtLXBwYzY0L0dOVW1ha2VmaWxlLmFtIGZ1c2lvbi0wLjcuMS1wcGM2NC1kZXZl bC9pbmNsdWRlL251Y2xldXMvYXNtLXBwYzY0L0dOVW1ha2VmaWxlLmFtCi0tLSBmdXNpb24t MC43LjEvaW5jbHVkZS9udWNsZXVzL2FzbS1wcGM2NC9HTlVtYWtlZmlsZS5hbQkxOTcwLTAx LTAxIDAyOjAwOjAwLjAwMDAwMDAwMCArMDIwMAorKysgZnVzaW9uLTAuNy4xLXBwYzY0LWRl dmVsL2luY2x1ZGUvbnVjbGV1cy9hc20tcHBjNjQvR05VbWFrZWZpbGUuYW0JMjAwNS0wNS0x NiAxNTozODo0NC4wMDAwMDAwMDAgKzAzMDAKQEAgLTAsMCArMSwxNCBAQAoraW5jbHVkZWRp ciA9ICQocHJlZml4KS9pbmNsdWRlL251Y2xldXMvYXNtLXBwYzY0CisKK2luY2x1ZGVfSEVB REVSUyA9IFwKKwkJYXRvbWljLmggXAorCQljYWxpYnJhdGlvbi5oIFwKKwkJaGFsLmggXAor CQlzeXN0ZW0uaCBcCisJCXN5c2NhbGwuaCBcCisJCXVhcnQuaAorCitpbnN0YWxsLWRhdGEt bG9jYWw6CisJJChta2luc3RhbGxkaXJzKSAkKERFU1RESVIpJChpbmNsdWRlZGlyKQorCXJt IC1mICQoREVTVERJUikkKGluY2x1ZGVkaXIpLy4uL2FzbQorCSQoTE5fUykgYXNtLXBwYzY0 ICQoREVTVERJUikkKGluY2x1ZGVkaXIpLy4uL2FzbQpkaWZmIC1OcnUgZnVzaW9uLTAuNy4x L2luY2x1ZGUvbnVjbGV1cy9hc20tcHBjNjQvR05VbWFrZWZpbGUuaW4gZnVzaW9uLTAuNy4x LXBwYzY0LWRldmVsL2luY2x1ZGUvbnVjbGV1cy9hc20tcHBjNjQvR05VbWFrZWZpbGUuaW4K LS0tIGZ1c2lvbi0wLjcuMS9pbmNsdWRlL251Y2xldXMvYXNtLXBwYzY0L0dOVW1ha2VmaWxl LmluCTE5NzAtMDEtMDEgMDI6MDA6MDAuMDAwMDAwMDAwICswMjAwCisrKyBmdXNpb24tMC43 LjEtcHBjNjQtZGV2ZWwvaW5jbHVkZS9udWNsZXVzL2FzbS1wcGM2NC9HTlVtYWtlZmlsZS5p bgkyMDA1LTA1LTE2IDE1OjM5OjQxLjAwMDAwMDAwMCArMDMwMApAQCAtMCwwICsxLDUxMyBA QAorIyBHTlVtYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS45LjIgZnJvbSBH TlVtYWtlZmlsZS5hbS4KKyMgQGNvbmZpZ3VyZV9pbnB1dEAKKworIyBDb3B5cmlnaHQgKEMp IDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIs CisjIDIwMDMsIDIwMDQgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBUaGlz IE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlz dHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcg YXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0 cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lU SE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0 aG91dAorIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBv ciBGSVRORVNTIEZPUiBBCisjIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworQFNFVF9NQUtFQAor CitzcmNkaXIgPSBAc3JjZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAorVlBBVEgg PSBAc3JjZGlyQAorcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACitwa2dsaWJk aXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACitwa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGly KS9AUEFDS0FHRUAKK3RvcF9idWlsZGRpciA9IC4uLy4uLy4uCithbV9fY2QgPSBDRFBBVEg9 IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCitJTlNUQUxMID0g QElOU1RBTExACitpbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAor aW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYworaW5zdGFsbF9zaF9TQ1JJ UFQgPSAkKGluc3RhbGxfc2gpIC1jCitJTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRB KQordHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQorTk9STUFMX0lOU1RB TEwgPSA6CitQUkVfSU5TVEFMTCA9IDoKK1BPU1RfSU5TVEFMTCA9IDoKK05PUk1BTF9VTklO U1RBTEwgPSA6CitQUkVfVU5JTlNUQUxMID0gOgorUE9TVF9VTklOU1RBTEwgPSA6CitidWls ZF90cmlwbGV0ID0gQGJ1aWxkQAoraG9zdF90cmlwbGV0ID0gQGhvc3RACitzdWJkaXIgPSBp bmNsdWRlL251Y2xldXMvYXNtLXBwYzY0CitESVNUX0NPTU1PTiA9ICQoaW5jbHVkZV9IRUFE RVJTKSAkKHNyY2RpcikvR05VbWFrZWZpbGUuYW0gXAorCSQoc3JjZGlyKS9HTlVtYWtlZmls ZS5pbgorQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAorYW1fX2FjbG9j YWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvY29uZmlnL2F1dG9jb25mL2RvY2Jvb2subTQg XAorCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmluCithbV9fY29uZmlndXJlX2RlcHMgPSAk KGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAorCSQo QUNMT0NBTF9NNCkKK21raW5zdGFsbGRpcnMgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2Nv bmZpZy9hdXRvY29uZi9ta2luc3RhbGxkaXJzCitDT05GSUdfSEVBREVSID0gJCh0b3BfYnVp bGRkaXIpL3J0YWlfY29uZmlnLmgKK0NPTkZJR19DTEVBTl9GSUxFUyA9CitTT1VSQ0VTID0K K0RJU1RfU09VUkNFUyA9CithbV9fdnBhdGhfYWRqX3NldHVwID0gc3JjZGlyc3RyaXA9YGVj aG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsKK2FtX192cGF0aF9hZGogPSBjYXNl ICQkcCBpbiBcCisgICAgJChzcmNkaXIpLyopIGY9YGVjaG8gIiQkcCIgfCBzZWQgInN8XiQk c3JjZGlyc3RyaXAvfHwiYDs7IFwKKyAgICAqKSBmPSQkcDs7IFwKKyAgZXNhYzsKK2FtX19z dHJpcF9kaXIgPSBgZWNobyAkJHAgfCBzZWQgLWUgJ3N8Xi4qL3x8J2A7CithbV9faW5zdGFs bGRpcnMgPSAiJChERVNURElSKSQoaW5jbHVkZWRpcikiCitpbmNsdWRlSEVBREVSU19JTlNU QUxMID0gJChJTlNUQUxMX0hFQURFUikKK0hFQURFUlMgPSAkKGluY2x1ZGVfSEVBREVSUykK K0VUQUdTID0gZXRhZ3MKK0NUQUdTID0gY3RhZ3MKK0RJU1RGSUxFUyA9ICQoRElTVF9DT01N T04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCitBQ0xPQ0FM ID0gQEFDTE9DQUxACitBTURFUF9GQUxTRSA9IEBBTURFUF9GQUxTRUAKK0FNREVQX1RSVUUg PSBAQU1ERVBfVFJVRUAKK0FNVEFSID0gQEFNVEFSQAorQVIgPSBAQVJACitBVVRPQ09ORiA9 IEBBVVRPQ09ORkAKK0FVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKK0FVVE9NQUtFID0gQEFV VE9NQUtFQAorQVdLID0gQEFXS0AKK0NDID0gQENDQAorQ0NBUyA9IEBDQ0FTQAorQ0NBU0ZM QUdTID0gQENDQVNGTEFHU0AKK0NDREVQTU9ERSA9IEBDQ0RFUE1PREVACitDRkxBR1MgPSBA Q0ZMQUdTQAorQ09ORklHX0xUVF9GQUxTRSA9IEBDT05GSUdfTFRUX0ZBTFNFQAorQ09ORklH X0xUVF9UUlVFID0gQENPTkZJR19MVFRfVFJVRUAKK0NPTkZJR19QUEM2NF9GQUxTRSA9IEBD T05GSUdfUFBDNjRfRkFMU0VACitDT05GSUdfUFBDNjRfVFJVRSA9IEBDT05GSUdfUFBDNjRf VFJVRUAKK0NPTkZJR19SVEFJX0RPQ19ET1hfRkFMU0UgPSBAQ09ORklHX1JUQUlfRE9DX0RP WF9GQUxTRUAKK0NPTkZJR19SVEFJX0RPQ19ET1hfVFJVRSA9IEBDT05GSUdfUlRBSV9ET0Nf RE9YX1RSVUVACitDT05GSUdfUlRBSV9EUklWRVJTXzE2NTUwQV9GQUxTRSA9IEBDT05GSUdf UlRBSV9EUklWRVJTXzE2NTUwQV9GQUxTRUAKK0NPTkZJR19SVEFJX0RSSVZFUlNfMTY1NTBB X1RSVUUgPSBAQ09ORklHX1JUQUlfRFJJVkVSU18xNjU1MEFfVFJVRUAKK0NPTkZJR19SVEFJ X0hXX0ZQVV9GQUxTRSA9IEBDT05GSUdfUlRBSV9IV19GUFVfRkFMU0VACitDT05GSUdfUlRB SV9IV19GUFVfVFJVRSA9IEBDT05GSUdfUlRBSV9IV19GUFVfVFJVRUAKK0NPTkZJR19SVEFJ X0hXX1NNSV9ERVRFQ1RfRkFMU0UgPSBAQ09ORklHX1JUQUlfSFdfU01JX0RFVEVDVF9GQUxT RUAKK0NPTkZJR19SVEFJX0hXX1NNSV9ERVRFQ1RfVFJVRSA9IEBDT05GSUdfUlRBSV9IV19T TUlfREVURUNUX1RSVUVACitDT05GSUdfUlRBSV9NQUlOVF9GQUxTRSA9IEBDT05GSUdfUlRB SV9NQUlOVF9GQUxTRUAKK0NPTkZJR19SVEFJX01BSU5UX0dDSF9GQUxTRSA9IEBDT05GSUdf UlRBSV9NQUlOVF9HQ0hfRkFMU0VACitDT05GSUdfUlRBSV9NQUlOVF9HQ0hfVFJVRSA9IEBD T05GSUdfUlRBSV9NQUlOVF9HQ0hfVFJVRUAKK0NPTkZJR19SVEFJX01BSU5UX1BHTV9GQUxT RSA9IEBDT05GSUdfUlRBSV9NQUlOVF9QR01fRkFMU0VACitDT05GSUdfUlRBSV9NQUlOVF9Q R01fVFJVRSA9IEBDT05GSUdfUlRBSV9NQUlOVF9QR01fVFJVRUAKK0NPTkZJR19SVEFJX01B SU5UX1RSVUUgPSBAQ09ORklHX1JUQUlfTUFJTlRfVFJVRUAKK0NPTkZJR19SVEFJX09MRF9G QVNISU9ORURfQlVJTERfRkFMU0UgPSBAQ09ORklHX1JUQUlfT0xEX0ZBU0hJT05FRF9CVUlM RF9GQUxTRUAKK0NPTkZJR19SVEFJX09MRF9GQVNISU9ORURfQlVJTERfVFJVRSA9IEBDT05G SUdfUlRBSV9PTERfRkFTSElPTkVEX0JVSUxEX1RSVUVACitDT05GSUdfUlRBSV9PUFRfRlVT SU9OX0ZBTFNFID0gQENPTkZJR19SVEFJX09QVF9GVVNJT05fRkFMU0VACitDT05GSUdfUlRB SV9PUFRfRlVTSU9OX1RSVUUgPSBAQ09ORklHX1JUQUlfT1BUX0ZVU0lPTl9UUlVFQAorQ09O RklHX1JUQUlfT1BUX05BVElWRV9BTEFSTV9GQUxTRSA9IEBDT05GSUdfUlRBSV9PUFRfTkFU SVZFX0FMQVJNX0ZBTFNFQAorQ09ORklHX1JUQUlfT1BUX05BVElWRV9BTEFSTV9UUlVFID0g QENPTkZJR19SVEFJX09QVF9OQVRJVkVfQUxBUk1fVFJVRUAKK0NPTkZJR19SVEFJX09QVF9O QVRJVkVfQ09ORF9GQUxTRSA9IEBDT05GSUdfUlRBSV9PUFRfTkFUSVZFX0NPTkRfRkFMU0VA CitDT05GSUdfUlRBSV9PUFRfTkFUSVZFX0NPTkRfVFJVRSA9IEBDT05GSUdfUlRBSV9PUFRf TkFUSVZFX0NPTkRfVFJVRUAKK0NPTkZJR19SVEFJX09QVF9OQVRJVkVfRVZFTlRfRkFMU0Ug PSBAQ09ORklHX1JUQUlfT1BUX05BVElWRV9FVkVOVF9GQUxTRUAKK0NPTkZJR19SVEFJX09Q VF9OQVRJVkVfRVZFTlRfVFJVRSA9IEBDT05GSUdfUlRBSV9PUFRfTkFUSVZFX0VWRU5UX1RS VUVACitDT05GSUdfUlRBSV9PUFRfTkFUSVZFX0hFQVBfRkFMU0UgPSBAQ09ORklHX1JUQUlf T1BUX05BVElWRV9IRUFQX0ZBTFNFQAorQ09ORklHX1JUQUlfT1BUX05BVElWRV9IRUFQX1RS VUUgPSBAQ09ORklHX1JUQUlfT1BUX05BVElWRV9IRUFQX1RSVUVACitDT05GSUdfUlRBSV9P UFRfTkFUSVZFX0lOVFJfRkFMU0UgPSBAQ09ORklHX1JUQUlfT1BUX05BVElWRV9JTlRSX0ZB TFNFQAorQ09ORklHX1JUQUlfT1BUX05BVElWRV9JTlRSX1RSVUUgPSBAQ09ORklHX1JUQUlf T1BUX05BVElWRV9JTlRSX1RSVUVACitDT05GSUdfUlRBSV9PUFRfTkFUSVZFX01VVEVYX0ZB TFNFID0gQENPTkZJR19SVEFJX09QVF9OQVRJVkVfTVVURVhfRkFMU0VACitDT05GSUdfUlRB SV9PUFRfTkFUSVZFX01VVEVYX1RSVUUgPSBAQ09ORklHX1JUQUlfT1BUX05BVElWRV9NVVRF WF9UUlVFQAorQ09ORklHX1JUQUlfT1BUX05BVElWRV9QSVBFX0ZBTFNFID0gQENPTkZJR19S VEFJX09QVF9OQVRJVkVfUElQRV9GQUxTRUAKK0NPTkZJR19SVEFJX09QVF9OQVRJVkVfUElQ RV9UUlVFID0gQENPTkZJR19SVEFJX09QVF9OQVRJVkVfUElQRV9UUlVFQAorQ09ORklHX1JU QUlfT1BUX05BVElWRV9RVUVVRV9GQUxTRSA9IEBDT05GSUdfUlRBSV9PUFRfTkFUSVZFX1FV RVVFX0ZBTFNFQAorQ09ORklHX1JUQUlfT1BUX05BVElWRV9RVUVVRV9UUlVFID0gQENPTkZJ R19SVEFJX09QVF9OQVRJVkVfUVVFVUVfVFJVRUAKK0NPTkZJR19SVEFJX09QVF9OQVRJVkVf UkVHSVNUUllfRkFMU0UgPSBAQ09ORklHX1JUQUlfT1BUX05BVElWRV9SRUdJU1RSWV9GQUxT RUAKK0NPTkZJR19SVEFJX09QVF9OQVRJVkVfUkVHSVNUUllfVFJVRSA9IEBDT05GSUdfUlRB SV9PUFRfTkFUSVZFX1JFR0lTVFJZX1RSVUVACitDT05GSUdfUlRBSV9PUFRfTkFUSVZFX1NF TV9GQUxTRSA9IEBDT05GSUdfUlRBSV9PUFRfTkFUSVZFX1NFTV9GQUxTRUAKK0NPTkZJR19S VEFJX09QVF9OQVRJVkVfU0VNX1RSVUUgPSBAQ09ORklHX1JUQUlfT1BUX05BVElWRV9TRU1f VFJVRUAKK0NPTkZJR19SVEFJX09QVF9QSVBFX0ZBTFNFID0gQENPTkZJR19SVEFJX09QVF9Q SVBFX0ZBTFNFQAorQ09ORklHX1JUQUlfT1BUX1BJUEVfVFJVRSA9IEBDT05GSUdfUlRBSV9P UFRfUElQRV9UUlVFQAorQ09ORklHX1JUQUlfT1BUX1VWTV9GQUxTRSA9IEBDT05GSUdfUlRB SV9PUFRfVVZNX0ZBTFNFQAorQ09ORklHX1JUQUlfT1BUX1VWTV9UUlVFID0gQENPTkZJR19S VEFJX09QVF9VVk1fVFJVRUAKK0NPTkZJR19SVEFJX1NLSU5fTkFUSVZFX0ZBTFNFID0gQENP TkZJR19SVEFJX1NLSU5fTkFUSVZFX0ZBTFNFQAorQ09ORklHX1JUQUlfU0tJTl9OQVRJVkVf VFJVRSA9IEBDT05GSUdfUlRBSV9TS0lOX05BVElWRV9UUlVFQAorQ09ORklHX1JUQUlfU0tJ Tl9QT1NJWF9GQUxTRSA9IEBDT05GSUdfUlRBSV9TS0lOX1BPU0lYX0ZBTFNFQAorQ09ORklH X1JUQUlfU0tJTl9QT1NJWF9UUlVFID0gQENPTkZJR19SVEFJX1NLSU5fUE9TSVhfVFJVRUAK K0NPTkZJR19SVEFJX1NLSU5fUFNPU19GQUxTRSA9IEBDT05GSUdfUlRBSV9TS0lOX1BTT1Nf RkFMU0VACitDT05GSUdfUlRBSV9TS0lOX1BTT1NfVFJVRSA9IEBDT05GSUdfUlRBSV9TS0lO X1BTT1NfVFJVRUAKK0NPTkZJR19SVEFJX1NLSU5fVUlUUk9OX0ZBTFNFID0gQENPTkZJR19S VEFJX1NLSU5fVUlUUk9OX0ZBTFNFQAorQ09ORklHX1JUQUlfU0tJTl9VSVRST05fVFJVRSA9 IEBDT05GSUdfUlRBSV9TS0lOX1VJVFJPTl9UUlVFQAorQ09ORklHX1JUQUlfU0tJTl9WUlRY X0ZBTFNFID0gQENPTkZJR19SVEFJX1NLSU5fVlJUWF9GQUxTRUAKK0NPTkZJR19SVEFJX1NL SU5fVlJUWF9UUlVFID0gQENPTkZJR19SVEFJX1NLSU5fVlJUWF9UUlVFQAorQ09ORklHX1JU QUlfU0tJTl9WWFdPUktTX0ZBTFNFID0gQENPTkZJR19SVEFJX1NLSU5fVlhXT1JLU19GQUxT RUAKK0NPTkZJR19SVEFJX1NLSU5fVlhXT1JLU19UUlVFID0gQENPTkZJR19SVEFJX1NLSU5f VlhXT1JLU19UUlVFQAorQ09ORklHX1NNUF9GQUxTRSA9IEBDT05GSUdfU01QX0ZBTFNFQAor Q09ORklHX1NNUF9UUlVFID0gQENPTkZJR19TTVBfVFJVRUAKK0NPTkZJR19YODZfRkFMU0Ug PSBAQ09ORklHX1g4Nl9GQUxTRUAKK0NPTkZJR19YODZfTE9DQUxfQVBJQ19GQUxTRSA9IEBD T05GSUdfWDg2X0xPQ0FMX0FQSUNfRkFMU0VACitDT05GSUdfWDg2X0xPQ0FMX0FQSUNfVFJV RSA9IEBDT05GSUdfWDg2X0xPQ0FMX0FQSUNfVFJVRUAKK0NPTkZJR19YODZfVFJVRSA9IEBD T05GSUdfWDg2X1RSVUVACitDUFAgPSBAQ1BQQAorQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACitD Uk9TU19DT01QSUxFID0gQENST1NTX0NPTVBJTEVACitDWFggPSBAQ1hYQAorQ1hYQ1BQID0g QENYWENQUEAKK0NYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKK0NYWEZMQUdTID0gQENYWEZM QUdTQAorQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKK0RCWF9BQlNfU1JDRElSX0ZBTFNFID0g QERCWF9BQlNfU1JDRElSX0ZBTFNFQAorREJYX0FCU19TUkNESVJfVFJVRSA9IEBEQlhfQUJT X1NSQ0RJUl9UUlVFQAorREJYX0RPQ19GQUxTRSA9IEBEQlhfRE9DX0ZBTFNFQAorREJYX0RP Q19ST09UID0gQERCWF9ET0NfUk9PVEAKK0RCWF9ET0NfVFJVRSA9IEBEQlhfRE9DX1RSVUVA CitEQlhfRk9QID0gQERCWF9GT1BACitEQlhfR0VOX0RPQ19ST09UID0gQERCWF9HRU5fRE9D X1JPT1RACitEQlhfTElOVCA9IEBEQlhfTElOVEAKK0RCWF9NQVlCRV9OT05FVCA9IEBEQlhf TUFZQkVfTk9ORVRACitEQlhfUk9PVCA9IEBEQlhfUk9PVEAKK0RCWF9YU0xUUFJPQyA9IEBE QlhfWFNMVFBST0NACitEQlhfWFNMX1JPT1QgPSBAREJYX1hTTF9ST09UQAorREVGUyA9IEBE RUZTQAorREVQRElSID0gQERFUERJUkAKK0RPWFlHRU4gPSBARE9YWUdFTkAKK0RPWFlHRU5f SEFWRV9ET1QgPSBARE9YWUdFTl9IQVZFX0RPVEAKK0RPWFlHRU5fU0hPV19JTkNMVURFX0ZJ TEVTID0gQERPWFlHRU5fU0hPV19JTkNMVURFX0ZJTEVTQAorRUNITyA9IEBFQ0hPQAorRUNI T19DID0gQEVDSE9fQ0AKK0VDSE9fTiA9IEBFQ0hPX05ACitFQ0hPX1QgPSBARUNIT19UQAor RUdSRVAgPSBARUdSRVBACitFWEVFWFQgPSBARVhFRVhUQAorRjc3ID0gQEY3N0AKK0ZGTEFH UyA9IEBGRkxBR1NACitJTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAorSU5TVEFMTF9Q Uk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKK0lOU1RBTExfU0NSSVBUID0gQElOU1RBTExf U0NSSVBUQAorSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JB TUAKK0xBVEVYX0JBVENITU9ERSA9IEBMQVRFWF9CQVRDSE1PREVACitMQVRFWF9NT0RFID0g QExBVEVYX01PREVACitMREZMQUdTID0gQExERkxBR1NACitMRVggPSBATEVYQAorTEVYTElC ID0gQExFWExJQkAKK0xFWF9PVVRQVVRfUk9PVCA9IEBMRVhfT1VUUFVUX1JPT1RACitMSUJP QkpTID0gQExJQk9CSlNACitMSUJTID0gQExJQlNACitMSUJUT09MID0gQExJQlRPT0xACitM Tl9TID0gQExOX1NACitMVExJQk9CSlMgPSBATFRMSUJPQkpTQAorTUFJTlQgPSBATUFJTlRA CitNQUlOVEFJTkVSX01PREVfRkFMU0UgPSBATUFJTlRBSU5FUl9NT0RFX0ZBTFNFQAorTUFJ TlRBSU5FUl9NT0RFX1RSVUUgPSBATUFJTlRBSU5FUl9NT0RFX1RSVUVACitNQUtFSU5GTyA9 IEBNQUtFSU5GT0AKK09CSkVYVCA9IEBPQkpFWFRACitQQUNLQUdFID0gQFBBQ0tBR0VACitQ QUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKK1BBQ0tBR0VfTkFNRSA9 IEBQQUNLQUdFX05BTUVACitQQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKK1BB Q0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACitQQUNLQUdFX1ZFUlNJT04gPSBA UEFDS0FHRV9WRVJTSU9OQAorUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACitS QU5MSUIgPSBAUkFOTElCQAorUlRBSV9CVUlMRF9TVFJJTkcgPSBAUlRBSV9CVUlMRF9TVFJJ TkdACitSVEFJX0ZQX0NGTEFHUyA9IEBSVEFJX0ZQX0NGTEFHU0AKK1JUQUlfSE9TVF9TVFJJ TkcgPSBAUlRBSV9IT1NUX1NUUklOR0AKK1JUQUlfS0JVSUxEX0JPVFRPTSA9IEBSVEFJX0tC VUlMRF9CT1RUT01ACitSVEFJX0tCVUlMRF9DTEVBTiA9IEBSVEFJX0tCVUlMRF9DTEVBTkAK K1JUQUlfS0JVSUxEX0NNRCA9IEBSVEFJX0tCVUlMRF9DTURACitSVEFJX0tCVUlMRF9ESVNU Q0xFQU4gPSBAUlRBSV9LQlVJTERfRElTVENMRUFOQAorUlRBSV9LQlVJTERfRU5WID0gQFJU QUlfS0JVSUxEX0VOVkAKK1JUQUlfS0JVSUxEX1RPUCA9IEBSVEFJX0tCVUlMRF9UT1BACitS VEFJX0tNT0RfQVBQX0NGTEFHUyA9IEBSVEFJX0tNT0RfQVBQX0NGTEFHU0AKK1JUQUlfS01P RF9DRkxBR1MgPSBAUlRBSV9LTU9EX0NGTEFHU0AKK1JUQUlfTElOVVhfRElSID0gQFJUQUlf TElOVVhfRElSQAorUlRBSV9MSU5VWF9WRVJTSU9OID0gQFJUQUlfTElOVVhfVkVSU0lPTkAK K1JUQUlfTUFZQkVfRE9DRElSID0gQFJUQUlfTUFZQkVfRE9DRElSQAorUlRBSV9NQVlCRV9T SU1ESVIgPSBAUlRBSV9NQVlCRV9TSU1ESVJACitSVEFJX01PRFVMRV9ESVIgPSBAUlRBSV9N T0RVTEVfRElSQAorUlRBSV9NT0RVTEVfRVhUID0gQFJUQUlfTU9EVUxFX0VYVEAKK1JUQUlf UElQRV9OUkRFViA9IEBSVEFJX1BJUEVfTlJERVZACitSVEFJX1RBUkdFVF9BUkNIID0gQFJU QUlfVEFSR0VUX0FSQ0hACitSVEFJX1RBUkdFVF9TVUJBUkNIID0gQFJUQUlfVEFSR0VUX1NV QkFSQ0hACitSVEFJX1VTRVJfQVBQX0NGTEFHUyA9IEBSVEFJX1VTRVJfQVBQX0NGTEFHU0AK K1JUQUlfVVNFUl9DRkxBR1MgPSBAUlRBSV9VU0VSX0NGTEFHU0AKK1NFVF9NQUtFID0gQFNF VF9NQUtFQAorU0hFTEwgPSBAU0hFTExACitTVFJJUCA9IEBTVFJJUEAKK1ZFUlNJT04gPSBA VkVSU0lPTkAKK2FjX2N0X0FSID0gQGFjX2N0X0FSQAorYWNfY3RfQ0MgPSBAYWNfY3RfQ0NA CithY19jdF9DWFggPSBAYWNfY3RfQ1hYQAorYWNfY3RfRjc3ID0gQGFjX2N0X0Y3N0AKK2Fj X2N0X1JBTkxJQiA9IEBhY19jdF9SQU5MSUJACithY19jdF9TVFJJUCA9IEBhY19jdF9TVFJJ UEAKK2FtX19mYXN0ZGVwQ0NfRkFMU0UgPSBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAKK2FtX19m YXN0ZGVwQ0NfVFJVRSA9IEBhbV9fZmFzdGRlcENDX1RSVUVACithbV9fZmFzdGRlcENYWF9G QUxTRSA9IEBhbV9fZmFzdGRlcENYWF9GQUxTRUAKK2FtX19mYXN0ZGVwQ1hYX1RSVUUgPSBA YW1fX2Zhc3RkZXBDWFhfVFJVRUAKK2FtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAorYW1f X2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKK2FtX19xdW90ZSA9IEBhbV9fcXVv dGVACithbV9fdGFyID0gQGFtX190YXJACithbV9fdW50YXIgPSBAYW1fX3VudGFyQAorYmlu ZGlyID0gQGJpbmRpckAKK2J1aWxkID0gQGJ1aWxkQAorYnVpbGRfYWxpYXMgPSBAYnVpbGRf YWxpYXNACitidWlsZF9jcHUgPSBAYnVpbGRfY3B1QAorYnVpbGRfb3MgPSBAYnVpbGRfb3NA CitidWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAorZGF0YWRpciA9IEBkYXRhZGlyQAor ZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACitob3N0ID0gQGhvc3RACitob3N0X2FsaWFz ID0gQGhvc3RfYWxpYXNACitob3N0X2NwdSA9IEBob3N0X2NwdUAKK2hvc3Rfb3MgPSBAaG9z dF9vc0AKK2hvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAoraW5jbHVkZWRpciA9ICQocHJl Zml4KS9pbmNsdWRlL251Y2xldXMvYXNtLXBwYzY0CitpbmZvZGlyID0gQGluZm9kaXJACitp bnN0YWxsX3NoID0gQGluc3RhbGxfc2hACitsaWJkaXIgPSBAbGliZGlyQAorbGliZXhlY2Rp ciA9IEBsaWJleGVjZGlyQAorbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAorbWFu ZGlyID0gQG1hbmRpckAKK21rZGlyX3AgPSBAbWtkaXJfcEAKK29sZGluY2x1ZGVkaXIgPSBA b2xkaW5jbHVkZWRpckAKK3ByZWZpeCA9IEBwcmVmaXhACitwcm9ncmFtX3RyYW5zZm9ybV9u YW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACitzYmluZGlyID0gQHNiaW5kaXJACitz aGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKK3N1YmRpcnMgPSBAc3ViZGlyc0AK K3N5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKK3RhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxp YXNACitpbmNsdWRlX0hFQURFUlMgPSBcCisJCWF0b21pYy5oIFwKKwkJY2FsaWJyYXRpb24u aCBcCisJCWhhbC5oIFwKKwkJc3lzdGVtLmggXAorCQlzeXNjYWxsLmggXAorCQl1YXJ0LmgK KworYWxsOiBhbGwtYW0KKworLlNVRkZJWEVTOgorJChzcmNkaXIpL0dOVW1ha2VmaWxlLmlu OiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoc3JjZGlyKS9HTlVtYWtlZmlsZS5hbSAgJChh bV9fY29uZmlndXJlX2RlcHMpCisJQGZvciBkZXAgaW4gJD87IGRvIFwKKwkgIGNhc2UgJyQo YW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAorCSAgICAqJCRkZXAqKSBcCisJICAgICAgY2Qg JCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNo IFwKKwkJJiYgZXhpdCAwOyBcCisJICAgICAgZXhpdCAxOzsgXAorCSAgZXNhYzsgXAorCWRv bmU7IFwKKwllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWZvcmVp Z24gIGluY2x1ZGUvbnVjbGV1cy9hc20tcHBjNjQvR05VbWFrZWZpbGUnOyBcCisJY2QgJCh0 b3Bfc3JjZGlyKSAmJiBcCisJICAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gIGluY2x1ZGUvbnVj bGV1cy9hc20tcHBjNjQvR05VbWFrZWZpbGUKKy5QUkVDSU9VUzogR05VbWFrZWZpbGUKK0dO VW1ha2VmaWxlOiAkKHNyY2RpcikvR05VbWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2Nv bmZpZy5zdGF0dXMKKwlAY2FzZSAnJD8nIGluIFwKKwkgICpjb25maWcuc3RhdHVzKikgXAor CSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0t LXJlZnJlc2g7OyBcCisJICAqKSBcCisJICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikg JiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxl c19tYXliZSknOyBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2Nv bmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKKwll c2FjOworCiskKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9j b25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKKwljZCAkKHRvcF9idWls ZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKworJCh0b3Bf c3JjZGlyKS9jb25maWd1cmU6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fY29uZmln dXJlX2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxB R1MpIGFtLS1yZWZyZXNoCiskKEFDTE9DQUxfTTQpOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVA ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtF KSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKworbW9zdGx5Y2xlYW4tbGlidG9vbDoK Kwktcm0gLWYgKi5sbworCitjbGVhbi1saWJ0b29sOgorCS1ybSAtcmYgLmxpYnMgX2xpYnMK KworZGlzdGNsZWFuLWxpYnRvb2w6CisJLXJtIC1mIGxpYnRvb2wKK3VuaW5zdGFsbC1pbmZv LWFtOgoraW5zdGFsbC1pbmNsdWRlSEVBREVSUzogJChpbmNsdWRlX0hFQURFUlMpCisJQCQo Tk9STUFMX0lOU1RBTEwpCisJdGVzdCAteiAiJChpbmNsdWRlZGlyKSIgfHwgJChta2Rpcl9w KSAiJChERVNURElSKSQoaW5jbHVkZWRpcikiCisJQGxpc3Q9JyQoaW5jbHVkZV9IRUFERVJT KSc7IGZvciBwIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAtZiAiJCRwIjsgdGhlbiBk PTsgZWxzZSBkPSIkKHNyY2RpcikvIjsgZmk7IFwKKwkgIGY9JChhbV9fc3RyaXBfZGlyKSBc CisJICBlY2hvICIgJChpbmNsdWRlSEVBREVSU19JTlNUQUxMKSAnJCRkJCRwJyAnJChERVNU RElSKSQoaW5jbHVkZWRpcikvJCRmJyI7IFwKKwkgICQoaW5jbHVkZUhFQURFUlNfSU5TVEFM TCkgIiQkZCQkcCIgIiQoREVTVERJUikkKGluY2x1ZGVkaXIpLyQkZiI7IFwKKwlkb25lCisK K3VuaW5zdGFsbC1pbmNsdWRlSEVBREVSUzoKKwlAJChOT1JNQUxfVU5JTlNUQUxMKQorCUBs aXN0PSckKGluY2x1ZGVfSEVBREVSUyknOyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgIGY9 JChhbV9fc3RyaXBfZGlyKSBcCisJICBlY2hvICIgcm0gLWYgJyQoREVTVERJUikkKGluY2x1 ZGVkaXIpLyQkZiciOyBcCisJICBybSAtZiAiJChERVNURElSKSQoaW5jbHVkZWRpcikvJCRm IjsgXAorCWRvbmUKKworSUQ6ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKExJU1ApICQoVEFH U19GSUxFUykKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgJChMSVNQKSAkKFRBR1Nf RklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRl c3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBm aTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAnICAgIHsgZmlsZXNbJCQwXSA9IDE7IH0g XAorCSAgICAgICBFTkQgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH0nYDsgXAorCW1r aWQgLWZJRCAkJHVuaXF1ZQordGFnczogVEFHUworCitUQUdTOiAgJChIRUFERVJTKSAkKFNP VVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCisJCSQoVEFHU19GSUxFUykgJChMSVNQ KQorCXRhZ3M9OyBcCisJaGVyZT1gcHdkYDsgXAorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFE RVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRs aXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2Ug ZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAnICAg IHsgZmlsZXNbJCQwXSA9IDE7IH0gXAorCSAgICAgICBFTkQgeyBmb3IgKGkgaW4gZmlsZXMp IHByaW50IGk7IH0nYDsgXAorCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJHRhZ3MkJHVu aXF1ZSI7IHRoZW4gOjsgZWxzZSBcCisJICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVl PSQkZW1wdHlfZml4OyBcCisJICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NG TEFHUykgJChFVEFHU19BUkdTKSBcCisJICAgICQkdGFncyAkJHVuaXF1ZTsgXAorCWZpCitj dGFnczogQ1RBR1MKK0NUQUdTOiAgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQ RU5ERU5DSUVTKSBcCisJCSQoVEFHU19GSUxFUykgJChMSVNQKQorCXRhZ3M9OyBcCisJaGVy ZT1gcHdkYDsgXAorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRB R1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlm IHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRp OyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAnICAgIHsgZmlsZXNbJCQwXSA9IDE7 IH0gXAorCSAgICAgICBFTkQgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH0nYDsgXAor CXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHRhZ3MkJHVuaXF1ZSIgXAorCSAgfHwgJChDVEFH UykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAorCSAg ICAgJCR0YWdzICQkdW5pcXVlCisKK0dUQUdTOgorCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9i dWlsZGRpcikgJiYgcHdkYCBcCisJICAmJiBjZCAkKHRvcF9zcmNkaXIpIFwKKwkgICYmIGd0 YWdzIC1pICQoR1RBR1NfQVJHUykgJCRoZXJlCisKK2Rpc3RjbGVhbi10YWdzOgorCS1ybSAt ZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCisKK2Rpc3RkaXI6ICQo RElTVEZJTEVTKQorCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wu fC58ZydgOyBcCisJdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2Vk ICdzfC58LnxnJ2A7IFwKKwlsaXN0PSckKERJU1RGSUxFUyknOyBmb3IgZmlsZSBpbiAkJGxp c3Q7IGRvIFwKKwkgIGNhc2UgJCRmaWxlIGluIFwKKwkgICAgJChzcmNkaXIpLyopIGZpbGU9 YGVjaG8gIiQkZmlsZSIgfCBzZWQgInN8XiQkc3JjZGlyc3RyaXAvfHwiYDs7IFwKKwkgICAg JCh0b3Bfc3JjZGlyKS8qKSBmaWxlPWBlY2hvICIkJGZpbGUiIHwgc2VkICJzfF4kJHRvcHNy Y2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfCJgOzsgXAorCSAgZXNhYzsgXAorCSAgaWYg dGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChz cmNkaXIpOyBmaTsgXAorCSAgZGlyPWBlY2hvICIkJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9d KiQkLCwnYDsgXAorCSAgaWYgdGVzdCAiJCRkaXIiICE9ICIkJGZpbGUiICYmIHRlc3QgIiQk ZGlyIiAhPSAiLiI7IHRoZW4gXAorCSAgICBkaXI9Ii8kJGRpciI7IFwKKwkgICAgJChta2Rp cl9wKSAiJChkaXN0ZGlyKSQkZGlyIjsgXAorCSAgZWxzZSBcCisJICAgIGRpcj0nJzsgXAor CSAgZmk7IFwKKwkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCisJICAgIGlmIHRl c3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4g XAorCSAgICAgIGNwIC1wUiAkKHNyY2RpcikvJCRmaWxlICQoZGlzdGRpcikkJGRpciB8fCBl eGl0IDE7IFwKKwkgICAgZmk7IFwKKwkgICAgY3AgLXBSICQkZC8kJGZpbGUgJChkaXN0ZGly KSQkZGlyIHx8IGV4aXQgMTsgXAorCSAgZWxzZSBcCisJICAgIHRlc3QgLWYgJChkaXN0ZGly KS8kJGZpbGUgXAorCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICQoZGlzdGRpcikvJCRmaWxl IFwKKwkgICAgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUKK2NoZWNrLWFtOiBhbGwt YW0KK2NoZWNrOiBjaGVjay1hbQorYWxsLWFtOiBHTlVtYWtlZmlsZSAkKEhFQURFUlMpCitp bnN0YWxsZGlyczoKKwlmb3IgZGlyIGluICIkKERFU1RESVIpJChpbmNsdWRlZGlyKSI7IGRv IFwKKwkgIHRlc3QgLXogIiQkZGlyIiB8fCAkKG1rZGlyX3ApICIkJGRpciI7IFwKKwlkb25l CitpbnN0YWxsOiBpbnN0YWxsLWFtCitpbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1hbQor aW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtYW0KK3VuaW5zdGFsbDogdW5pbnN0YWxsLWFt CisKK2luc3RhbGwtYW06IGFsbC1hbQorCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0 YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCisKK2luc3RhbGxjaGVjazogaW5zdGFsbGNo ZWNrLWFtCitpbnN0YWxsLXN0cmlwOgorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RB TExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICBpbnN0YWxsX3No X1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFH PS1zIFwKKwkgIGB0ZXN0IC16ICckKFNUUklQKScgfHwgXAorCSAgICBlY2hvICJJTlNUQUxM X1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknImAgaW5zdGFsbAorbW9zdGx5Y2xl YW4tZ2VuZXJpYzoKKworY2xlYW4tZ2VuZXJpYzoKKworZGlzdGNsZWFuLWdlbmVyaWM6CisJ LXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xF QU5fRklMRVMpCisKK21haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKKwlAZWNobyAiVGhpcyBj b21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCisJQGVjaG8gIml0 IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVp bGQuIgorY2xlYW46IGNsZWFuLWFtCisKK2NsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFu LWxpYnRvb2wgbW9zdGx5Y2xlYW4tYW0KKworZGlzdGNsZWFuOiBkaXN0Y2xlYW4tYW0KKwkt cm0gLWYgR05VbWFrZWZpbGUKK2Rpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWdl bmVyaWMgZGlzdGNsZWFuLWxpYnRvb2wgXAorCWRpc3RjbGVhbi10YWdzCisKK2R2aTogZHZp LWFtCisKK2R2aS1hbToKKworaHRtbDogaHRtbC1hbQorCitpbmZvOiBpbmZvLWFtCisKK2lu Zm8tYW06CisKK2luc3RhbGwtZGF0YS1hbTogaW5zdGFsbC1kYXRhLWxvY2FsIGluc3RhbGwt aW5jbHVkZUhFQURFUlMKKworaW5zdGFsbC1leGVjLWFtOgorCitpbnN0YWxsLWluZm86IGlu c3RhbGwtaW5mby1hbQorCitpbnN0YWxsLW1hbjoKKworaW5zdGFsbGNoZWNrLWFtOgorCitt YWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCisJLXJtIC1mIEdOVW1ha2Vm aWxlCittYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVh bi1nZW5lcmljCisKK21vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1hbQorCittb3N0bHljbGVh bi1hbTogbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sCisKK3BkZjog cGRmLWFtCisKK3BkZi1hbToKKworcHM6IHBzLWFtCisKK3BzLWFtOgorCit1bmluc3RhbGwt YW06IHVuaW5zdGFsbC1pbmNsdWRlSEVBREVSUyB1bmluc3RhbGwtaW5mby1hbQorCisuUEhP Tlk6IENUQUdTIEdUQUdTIGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4t Z2VuZXJpYyBcCisJY2xlYW4tbGlidG9vbCBjdGFncyBkaXN0Y2xlYW4gZGlzdGNsZWFuLWdl bmVyaWMgXAorCWRpc3RjbGVhbi1saWJ0b29sIGRpc3RjbGVhbi10YWdzIGRpc3RkaXIgZHZp IGR2aS1hbSBodG1sIFwKKwlodG1sLWFtIGluZm8gaW5mby1hbSBpbnN0YWxsIGluc3RhbGwt YW0gaW5zdGFsbC1kYXRhIFwKKwlpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kYXRhLWxvY2Fs IGluc3RhbGwtZXhlYyBcCisJaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaW5jbHVkZUhFQURF UlMgaW5zdGFsbC1pbmZvIFwKKwlpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gaW5zdGFs bC1zdHJpcCBpbnN0YWxsY2hlY2sgXAorCWluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBt YWludGFpbmVyLWNsZWFuIFwKKwltYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xl YW4gbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCisJbW9zdGx5Y2xlYW4tbGlidG9vbCBwZGYgcGRm LWFtIHBzIHBzLWFtIHRhZ3MgdW5pbnN0YWxsIFwKKwl1bmluc3RhbGwtYW0gdW5pbnN0YWxs LWluY2x1ZGVIRUFERVJTIHVuaW5zdGFsbC1pbmZvLWFtCisKKworaW5zdGFsbC1kYXRhLWxv Y2FsOgorCSQobWtpbnN0YWxsZGlycykgJChERVNURElSKSQoaW5jbHVkZWRpcikKKwlybSAt ZiAkKERFU1RESVIpJChpbmNsdWRlZGlyKS8uLi9hc20KKwkkKExOX1MpIGFzbS1wcGM2NCAk KERFU1RESVIpJChpbmNsdWRlZGlyKS8uLi9hc20KKyMgVGVsbCB2ZXJzaW9ucyBbMy41OSwz LjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisjIE90aGVy d2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRl ZC4KKy5OT0VYUE9SVDoKZGlmZiAtTnJ1IGZ1c2lvbi0wLjcuMS9pbmNsdWRlL251Y2xldXMv YXNtLXBwYzY0L2F0b21pYy5oIGZ1c2lvbi0wLjcuMS1wcGM2NC1kZXZlbC9pbmNsdWRlL251 Y2xldXMvYXNtLXBwYzY0L2F0b21pYy5oCi0tLSBmdXNpb24tMC43LjEvaW5jbHVkZS9udWNs ZXVzL2FzbS1wcGM2NC9hdG9taWMuaAkxOTcwLTAxLTAxIDAyOjAwOjAwLjAwMDAwMDAwMCAr MDIwMAorKysgZnVzaW9uLTAuNy4xLXBwYzY0LWRldmVsL2luY2x1ZGUvbnVjbGV1cy9hc20t cHBjNjQvYXRvbWljLmgJMjAwNS0wNi0wMSAxNjozMTo0My4wMDAwMDAwMDAgKzAzMDAKQEAg LTAsMCArMSwyMjEgQEAKKy8qCisgKiBSVEFJL2Z1c2lvbiA2NC1iaXQgUG93ZXJQQyBhZG9w dGlvbgorICogQ29weXJpZ2h0IChDKSAyMDA1IFRhbmVsaSBWw6Row6RrYW5nYXMgYW5kIEhl aWtraSBMaW5kaG9sbQorICogYmFzZWQgb24gcHJldmlvdXMgd29yazoKKyAqICAgICAKKyAq IENvcHlyaWdodCAoQykgMjAwMywyMDA0IFBoaWxpcHBlIEdlcnVtIDxycG1AeGVub21haS5v cmc+LgorICoKKyAqIFJUQUkvZnVzaW9uIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk aXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisgKiBieSB0aGUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNl bnNlLAorICogb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg KiBSVEFJL2Z1c2lvbiBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg YmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq IGFsb25nIHdpdGggUlRBSS9mdXNpb247IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29m dHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMz MCwgQm9zdG9uLCBNQQorICogMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpZm5kZWYgX1JU QUlfQVNNX1BQQzY0X0FUT01JQ19ICisjZGVmaW5lIF9SVEFJX0FTTV9QUEM2NF9BVE9NSUNf SAorCisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorCisvKiBvbiBpMzg2IHRoZXNlIGFyZSBp biBHTlUgYXNtL2F0b21pYy5oICovCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGF0b21pY19z ZXRfbWFzayh1bnNpZ25lZCBpbnQgbWFzaywKKwkJCQkgICAgICAgdW5zaWduZWQgaW50ICpw dHIpCit7CisgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJcblwKKzE6CWx3YXJ4CTUsMCwl MCBcblwKKwlvcgk1LDUsJTFcbiIKKyIJc3R3Y3guCTUsMCwlMCBcblwKKwlibmUtCTFiIgor CTogLypubyBvdXRwdXQqLworCTogInIiIChwdHIpLCAiciIgKG1hc2spCisJOiAicjUiLCAi Y2MiLCAibWVtb3J5Iik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgYXRvbWljX2Ns ZWFyX21hc2sodW5zaWduZWQgaW50IG1hc2ssCisJCQkJCSB1bnNpZ25lZCBpbnQgKnB0cikK K3sKKyAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIlxuXAorMToJbHdhcngJNSwwLCUwIFxu XAorCWFuZGMJNSw1LCUxXG4iCisiCXN0d2N4Lgk1LDAsJTAgXG5cCisJYm5lLQkxYiIKKwk6 IC8qbm8gb3V0cHV0Ki8KKwk6ICJyIiAocHRyKSwgInIiIChtYXNrKQorCTogInI1IiwgImNj IiwgIm1lbW9yeSIpOworfQorCisjaWZkZWYgX19LRVJORUxfXworCisjaW5jbHVkZSA8bGlu dXgvYml0b3BzLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorCisjZGVmaW5lIGF0b21p Y194Y2hnKHB0cix2KSAgICAgICB4Y2hnKHB0cix2KQorI2RlZmluZSBhdG9taWNfY21weGNo ZyhwdHIsbyxuKSAgY21weGNoZyhwdHIsbyxuKQorI2RlZmluZSB4bmFyY2hfbWVtb3J5X2Jh cnJpZXIoKSAgc21wX21iKCkKKworI2RlZmluZSB4bmFyY2hfYXRvbWljX3NldChwY291bnRl cixpKSAgICAgICAgICBhdG9taWNfc2V0KHBjb3VudGVyLGkpCisjZGVmaW5lIHhuYXJjaF9h dG9taWNfZ2V0KHBjb3VudGVyKSAgICAgICAgICAgIGF0b21pY19yZWFkKHBjb3VudGVyKQor I2RlZmluZSB4bmFyY2hfYXRvbWljX2luYyhwY291bnRlcikgICAgICAgICAgICBhdG9taWNf aW5jKHBjb3VudGVyKQorI2RlZmluZSB4bmFyY2hfYXRvbWljX2RlYyhwY291bnRlcikgICAg ICAgICAgICBhdG9taWNfZGVjKHBjb3VudGVyKQorI2RlZmluZSB4bmFyY2hfYXRvbWljX2lu Y19hbmRfdGVzdChwY291bnRlcikgICBhdG9taWNfaW5jX2FuZF90ZXN0KHBjb3VudGVyKQor I2RlZmluZSB4bmFyY2hfYXRvbWljX2RlY19hbmRfdGVzdChwY291bnRlcikgICBhdG9taWNf ZGVjX2FuZF90ZXN0KHBjb3VudGVyKQorI2RlZmluZSB4bmFyY2hfYXRvbWljX3NldF9tYXNr KHBmbGFncyxtYXNrKSAgICBhdG9taWNfc2V0X21hc2sobWFzayxwZmxhZ3MpCisjZGVmaW5l IHhuYXJjaF9hdG9taWNfY2xlYXJfbWFzayhwZmxhZ3MsbWFzaykgIGF0b21pY19jbGVhcl9t YXNrKG1hc2sscGZsYWdzKQorCisjZWxzZSAvKiAhX19LRVJORUxfXyAqLworI2lmZGVmIFBF S0tBX1BVVVBBQQorI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisvKgorICogU2hhbWVs ZXNzbHkgbGlmdGVkIGZyb20gPGxpbnV4L2FzbS1wcGM2NC9zeXN0ZW0uaD4KKyAqIGFuZCA8 bGludXgvYXNtLXBwYzY0L2F0b21pYy5oPgorICovCisKKy8qIGZyb20gYXNtLXBwYzY0L21l bW9yeS5oICovCisvKgorICogQXJndWFibHkgdGhlIGJpdG9wcyBhbmQgKnhjaGcgb3BlcmF0 aW9ucyBkb24ndCBpbXBseSBhbnkgbWVtb3J5IGJhcnJpZXIKKyAqIG9yIFNNUCBvcmRlcmlu ZywgYnV0IGluIGZhY3QgYSBsb3Qgb2YgZHJpdmVycyBleHBlY3QgdGhlbSB0byBpbXBseQor ICogYm90aCwgc2luY2UgdGhleSBkbyBvbiB4ODYgY3B1cy4KKyAqLworI2lmZGVmIENPTkZJ R19TTVAKKyNkZWZpbmUgRUlFSU9fT05fU01QCSJlaWVpb1xuIgorI2RlZmluZSBJU1lOQ19P Tl9TTVAJIlxuXHRpc3luYyIKKyNlbHNlCisjZGVmaW5lIEVJRUlPX09OX1NNUAorI2RlZmlu ZSBJU1lOQ19PTl9TTVAKKyNlbmRpZgorCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBs b25nCithdG9taWNfY21weGNoZyh2b2xhdGlsZSBsb25nICpwLCB1bnNpZ25lZCBsb25nIG9s ZCwgdW5zaWduZWQgbG9uZyBuZXcpCit7CisJdW5zaWduZWQgbG9uZyBwcmV2OworCisJX19h c21fXyBfX3ZvbGF0aWxlX18gKAorCUVJRUlPX09OX1NNUAorIjE6CWxkYXJ4CSUwLDAsJTIJ CSMgX19jbXB4Y2hnX3U2NFxuXAorCWNtcGQJMCwlMCwlM1xuXAorCWJuZS0JMmZcblwKKwlz dGRjeC4JJTQsMCwlMlxuXAorCWJuZS0JMWIiCisJSVNZTkNfT05fU01QCisJIlxuXAorMjoi CisJOiAiPSZyIiAocHJldiksICI9bSIgKCpwKQorCTogInIiIChwKSwgInIiIChvbGQpLCAi ciIgKG5ldyksICJtIiAoKnApCisJOiAiY2MiLCAibWVtb3J5Iik7CisKKwlyZXR1cm4gcHJl djsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZworYXRvbWljX3hjaGco dm9sYXRpbGUgbG9uZyAqbSwgdW5zaWduZWQgbG9uZyB2YWwpCit7CisJdW5zaWduZWQgbG9u ZyBkdW1teTsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCUVJRUlPX09OX1NNUAorIjE6 CWxkYXJ4ICUwLDAsJTMJCSMgX194Y2hnX3U2NFxuXAorCXN0ZGN4LiAlMiwwLCUzXG5cCisy OglibmUtIDFiIgorCUlTWU5DX09OX1NNUAorCTogIj0mciIgKGR1bW15KSwgIj1tIiAoKm0p CisJOiAiciIgKHZhbCksICJyIiAobSkKKwk6ICJjYyIsICJtZW1vcnkiKTsKKworCXJldHVy biAoZHVtbXkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGF0b21pY19pbmMoYXRv bWljX3QgKnYpCit7CisJaW50IHQ7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKyIxOgls d2FyeAklMCwwLCUyCQkjIGF0b21pY19pbmNcblwKKwlhZGRpYwklMCwlMCwxXG5cCisJc3R3 Y3guCSUwLDAsJTJcblwKKwlibmUtCTFiIgorCTogIj0mciIgKHQpLCAiPW0iICh2LT5jb3Vu dGVyKQorCTogInIiICgmdi0+Y291bnRlciksICJtIiAodi0+Y291bnRlcikKKwk6ICJjYyIp OworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgYXRvbWljX2luY19yZXR1cm4oYXRvbWlj X3QgKnYpCit7CisJaW50IHQ7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwlFSUVJT19P Tl9TTVAKKyIxOglsd2FyeAklMCwwLCUxCQkjIGF0b21pY19pbmNfcmV0dXJuXG5cCisJYWRk aWMJJTAsJTAsMVxuXAorCXN0d2N4LgklMCwwLCUxXG5cCisJYm5lLQkxYiIKKwlJU1lOQ19P Tl9TTVAKKwk6ICI9JnIiICh0KQorCTogInIiICgmdi0+Y291bnRlcikKKwk6ICJjYyIsICJt ZW1vcnkiKTsKKworCXJldHVybiB0OworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGF0 b21pY19kZWMoYXRvbWljX3QgKnYpCit7CisJaW50IHQ7CisKKwlfX2FzbV9fIF9fdm9sYXRp bGVfXygKKyIxOglsd2FyeAklMCwwLCUyCQkjIGF0b21pY19kZWNcblwKKwlhZGRpYwklMCwl MCwtMVxuXAorCXN0d2N4LgklMCwwLCUyXG5cCisJYm5lLQkxYiIKKwk6ICI9JnIiICh0KSwg Ij1tIiAodi0+Y291bnRlcikKKwk6ICJyIiAoJnYtPmNvdW50ZXIpLCAibSIgKHYtPmNvdW50 ZXIpCisJOiAiY2MiKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IGF0b21pY19kZWNf cmV0dXJuKGF0b21pY190ICp2KQoreworCWludCB0OworCisJX19hc21fXyBfX3ZvbGF0aWxl X18oCisJRUlFSU9fT05fU01QCisiMToJbHdhcngJJTAsMCwlMQkJIyBhdG9taWNfZGVjX3Jl dHVyblxuXAorCWFkZGljCSUwLCUwLC0xXG5cCisJc3R3Y3guCSUwLDAsJTFcblwKKwlibmUt CTFiIgorCUlTWU5DX09OX1NNUAorCTogIj0mciIgKHQpCisJOiAiciIgKCZ2LT5jb3VudGVy KQorCTogImNjIiwgIm1lbW9yeSIpOworCisJcmV0dXJuIHQ7Cit9CisKKworCisjZGVmaW5l IHhuYXJjaF9tZW1vcnlfYmFycmllcigpIF9fYXNtX18gX192b2xhdGlsZV9fICgic3luYyIg OiA6IDogIm1lbW9yeSIpCisKKyNkZWZpbmUgeG5hcmNoX2F0b21pY19zZXQocGNvdW50ZXIs aSkgICAgICAgICAgKCgocGNvdW50ZXIpLT5jb3VudGVyKSA9IChpKSkKKyNkZWZpbmUgeG5h cmNoX2F0b21pY19nZXQocGNvdW50ZXIpICAgICAgICAgICAgKChwY291bnRlciktPmNvdW50 ZXIpCisjZGVmaW5lIHhuYXJjaF9hdG9taWNfaW5jKHBjb3VudGVyKSAgICAgICAgICAgIGF0 b21pY19pbmMocGNvdW50ZXIpCisjZGVmaW5lIHhuYXJjaF9hdG9taWNfZGVjKHBjb3VudGVy KSAgICAgICAgICAgIGF0b21pY19kZWMocGNvdW50ZXIpCisjZGVmaW5lIHhuYXJjaF9hdG9t aWNfaW5jX2FuZF90ZXN0KHBjb3VudGVyKSAgIChhdG9taWNfaW5jX3JldHVybihwY291bnRl cikgPT0gMCkKKyNkZWZpbmUgeG5hcmNoX2F0b21pY19kZWNfYW5kX3Rlc3QocGNvdW50ZXIp ICAgKGF0b21pY19kZWNfcmV0dXJuKHBjb3VudGVyKSA9PSAwKQorI2RlZmluZSB4bmFyY2hf YXRvbWljX3NldF9tYXNrKHBmbGFncyxtYXNrKSAgICBhdG9taWNfc2V0X21hc2sobWFzayxw ZmxhZ3MpCisjZGVmaW5lIHhuYXJjaF9hdG9taWNfY2xlYXJfbWFzayhwZmxhZ3MsbWFzaykg IGF0b21pY19jbGVhcl9tYXNrKG1hc2sscGZsYWdzKQorI2VuZGlmCisjZW5kaWYgLyogX19L RVJORUxfXyAqLworCit0eXBlZGVmIGF0b21pY190IGF0b21pY19jb3VudGVyX3Q7Cit0eXBl ZGVmIHVuc2lnbmVkIGludCBhdG9taWNfZmxhZ3NfdDsKKworI2RlZmluZSB4bmFyY2hfYXRv bWljX3hjaGcocHRyLHgpIGF0b21pY194Y2hnKHB0cix4KQorCisjZW5kaWYgLyogIV9SVEFJ X0FTTV9QUEM2NF9BVE9NSUNfSCAqLwpkaWZmIC1OcnUgZnVzaW9uLTAuNy4xL2luY2x1ZGUv bnVjbGV1cy9hc20tcHBjNjQvY2FsaWJyYXRpb24uaCBmdXNpb24tMC43LjEtcHBjNjQtZGV2 ZWwvaW5jbHVkZS9udWNsZXVzL2FzbS1wcGM2NC9jYWxpYnJhdGlvbi5oCi0tLSBmdXNpb24t MC43LjEvaW5jbHVkZS9udWNsZXVzL2FzbS1wcGM2NC9jYWxpYnJhdGlvbi5oCTE5NzAtMDEt MDEgMDI6MDA6MDAuMDAwMDAwMDAwICswMjAwCisrKyBmdXNpb24tMC43LjEtcHBjNjQtZGV2 ZWwvaW5jbHVkZS9udWNsZXVzL2FzbS1wcGM2NC9jYWxpYnJhdGlvbi5oCTIwMDUtMDEtMDIg MjE6Mjg6NDguMDAwMDAwMDAwICswMjAwCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5 cmlnaHQgKEMpIDIwMDEsMjAwMiwyMDAzLDIwMDQsMjAwNSBQaGlsaXBwZSBHZXJ1bSA8cnBt QHhlbm9tYWkub3JnPi4KKyAqCisgKiBSVEFJL2Z1c2lvbiBpcyBmcmVlIHNvZnR3YXJlOyB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi eQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBv ZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp b24uCisgKgorICogUlRBSS9mdXNpb24gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh dCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0 aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBz aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlCisgKiBhbG9uZyB3aXRoIFJUQUkvZnVzaW9uOyBpZiBub3QsIHdyaXRlIHRvIHRo ZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2Ug LSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAqIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisj aWZuZGVmIF9SVEFJX0FTTV9QUENfQ0FMSUJSQVRJT05fSAorI2RlZmluZSBfUlRBSV9BU01f UFBDX0NBTElCUkFUSU9OX0gKKworI2luY2x1ZGUgPHJ0YWlfY29uZmlnLmg+CisjaW5jbHVk ZSA8YXNtL2RlbGF5Lmg+CisKKyNkZWZpbmUgX19ib2dvbWlwcyAobG9vcHNfcGVyX2ppZmZ5 Lyg1MDAwMDAvSFopKQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgeG5hcmNoX2dl dF9zY2hlZF9sYXRlbmN5ICh2b2lkKQorCit7CisjaWYgQ09ORklHX1JUQUlfSFdfU0NIRURf TEFURU5DWSAhPSAwCisjZGVmaW5lIF9fc2NoZWRfbGF0ZW5jeSBDT05GSUdfUlRBSV9IV19T Q0hFRF9MQVRFTkNZCisjZWxzZQorCisjZGVmaW5lIF9fc2NoZWRfbGF0ZW5jeSAxODUwMAor CisjZW5kaWYgLyogQ09ORklHX1JUQUlfSFdfU0NIRURfTEFURU5DWSAqLworCisgICAgcmV0 dXJuIF9fc2NoZWRfbGF0ZW5jeTsKK30KKworI3VuZGVmIF9fc2NoZWRfbGF0ZW5jeQorI3Vu ZGVmIF9fYm9nb21pcHMKKworI2VuZGlmIC8qICFfUlRBSV9BU01fUFBDX0NBTElCUkFUSU9O X0ggKi8KZGlmZiAtTnJ1IGZ1c2lvbi0wLjcuMS9pbmNsdWRlL251Y2xldXMvYXNtLXBwYzY0 L2hhbC5oIGZ1c2lvbi0wLjcuMS1wcGM2NC1kZXZlbC9pbmNsdWRlL251Y2xldXMvYXNtLXBw YzY0L2hhbC5oCi0tLSBmdXNpb24tMC43LjEvaW5jbHVkZS9udWNsZXVzL2FzbS1wcGM2NC9o YWwuaAkxOTcwLTAxLTAxIDAyOjAwOjAwLjAwMDAwMDAwMCArMDIwMAorKysgZnVzaW9uLTAu Ny4xLXBwYzY0LWRldmVsL2luY2x1ZGUvbnVjbGV1cy9hc20tcHBjNjQvaGFsLmgJMjAwNS0w Ni0wMSAyMToyODoxNC4wMDAwMDAwMDAgKzAzMDAKQEAgLTAsMCArMSw0MDYgQEAKKy8qKgor ICogICBAaW5ncm91cCBoYWxfcHBjNjQKKyAqICAgQGZpbGUKKyAqCisgKiAgIEFkZW9zLWJh c2VkIFJlYWwtVGltZSBIYXJkd2FyZSBBYnN0cmFjdGlvbiBMYXllciBmb3IgUFBDNjQuCisg KgorICogICBSVEFJL2Z1c2lvbiA2NC1iaXQgUG93ZXJQQyBhZG9wdGlvbgorICogICBDb3B5 cmlnaHQgKEMpIDIwMDUgVGFuZWxpIFbDpGjDpGthbmdhcyBhbmQgSGVpa2tpIExpbmRob2xt CisgKiAgIGJhc2VkIG9uIHByZXZpb3VzIHdvcms6CisgKiAgICAgCisgKiAgIE9yaWdpbmFs IFJUQUkvcHBjIGxheWVyIGltcGxlbWVudGF0aW9uOiBcbgorICogICBDb3B5cmlnaHQgJmNv cHk7IDIwMDAgUGFvbG8gTWFudGVnYXp6YSwgXG4KKyAqICAgQ29weXJpZ2h0ICZjb3B5OyAy MDAxIERhdmlkIFNjaGxlZWYsIFxuCisgKiAgIENvcHlyaWdodCAmY29weTsgMjAwMSBMaW5l bywgSW5jLCBcbgorICogICBDb3B5cmlnaHQgJmNvcHk7IDIwMDQgV29sZmdhbmcgR3JhbmRl Z2dlciwgXG4KKyAqICAgYW5kIG90aGVycy4KKyAqCisgKiAgIENvcHlyaWdodCAmY29weTsg MjAwMi0yMDA0IFBoaWxpcHBlIEdlcnVtLgorICoKKyAqICAgUlRBSS9mdXNpb24gaXMgZnJl ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgIG1vZGlm eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGFzCisgKiAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ bmMuLCA2NzUgTWFzcyBBdmUsCisgKiAgIENhbWJyaWRnZSBNQSAwMjEzOSwgVVNBOyBlaXRo ZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQKKyAqICAgeW91ciBvcHRpb24p IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgUlRBSS9mdXNpb24gaXMgZGlzdHJpYnV0 ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgYnV0IFdJVEhP VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK KyAqICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFLiAgU2VlIHRoZSBHTlUKKyAqICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y ZSBkZXRhaWxzLgorICoKKyAqICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYWxvbmcgd2l0aCBSVEFJ L2Z1c2lvbjsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogICBGb3Vu ZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEK KyAqICAgMDIxMTEtMTMwNywgVVNBLgorICovCisKKy8qKgorICogQGFkZHRvZ3JvdXAgaGFs X3BwYzY0CisgKkB7Ki8KKworI2lmbmRlZiBfUlRBSV9BU01fUFBDNjRfSEFMX0gKKyNkZWZp bmUgX1JUQUlfQVNNX1BQQzY0X0hBTF9ICisKKworI2luY2x1ZGUgPHJ0YWlfY29uZmlnLmg+ CisjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CisKKyNkZWZpbmUgUlRIQUxfTlJfQ1BVUyAgQURF T1NfTlJfQ1BVUworCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgcnRoYWxfdGltZV90OworCisv KgorI2RlZmluZSBfX3J0aGFsX3U2NHRvdTMyKHVsbCwgaCwgbCkgKHsgICAgICAgICAgICAg ICAgICBcCisgICAgICAgIHVuaW9uIHsgdW5zaWduZWQgbG9uZyBsb25nIF91bGw7ICAgICAg ICAgICAgICAgIFwKKyAgICAgICAgICAgIHN0cnVjdCB7IHVfbG9uZyBfaDsgdV9sb25nIF9s OyB9IF9zOyB9IF91OyAgXAorICAgICAgICBfdS5fdWxsID0gKHVsbCk7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIChoKSA9IF91Ll9zLl9oOyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKGwpID0gX3UuX3MuX2w7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9KQorCisjZGVmaW5l IF9fcnRoYWxfdTY0ZnJvbXUzMihoLCBsKSAoeyAgICAgICAgICAgICAgICAgICAgIFwKKyAg ICAgICAgdW5pb24geyB1bnNpZ25lZCBsb25nIGxvbmcgX3VsbDsgICAgICAgICAgICAgICAg XAorICAgICAgICAgICAgc3RydWN0IHsgdV9sb25nIF9oOyB1X2xvbmcgX2w7IH0gX3M7IH0g X3U7ICBcCisgICAgICAgIF91Ll9zLl9oID0gKGgpOyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKKyAgICAgICAgX3UuX3MuX2wgPSAobCk7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAorICAgICAgICBfdS5fdWxsOyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0pCisqLworCitzdGF0aWMgaW5saW5l IHVuc2lnbmVkIGxvbmcgbG9uZyBydGhhbF91bGxtdWwoY29uc3QgdW5zaWduZWQgbG9uZyBt MCwgCisJCQkJCSAgICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgbTEpCit7CisgICAgcmV0dXJu ICh1bnNpZ25lZCBsb25nIGxvbmcpbTAgKiBtMTsKK30KKworc3RhdGljIGlubGluZSB1bnNp Z25lZCBsb25nIGxvbmcgcnRoYWxfdWxsZGl2ICh1bnNpZ25lZCBsb25nIGxvbmcgdWxsLAor CQkJCQkgICAgICAgY29uc3QgdW5zaWduZWQgbG9uZyB1bGQsCisJCQkJCSAgICAgICB1bnNp Z25lZCBsb25nICpjb25zdCBycCkKK3sKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgciA9IHVs bCAlIHVsZDsKKyAgICB1bGwgLz0gdWxkOworCisgICAgaWYgKHJwKQorCSpycCA9IHI7CisK KyAgICByZXR1cm4gdWxsOworfQorCisjZGVmaW5lIHJ0aGFsX3VsZGl2cmVtKHVsbCx1bCxy cCkgKCh1X2xvbmcpIHJ0aGFsX3VsbGRpdigodWxsKSwodWwpLChycCkpKQorCitzdGF0aWMg aW5saW5lIGludCBydGhhbF9pbXVsZGl2IChpbnQgaSwgaW50IG11bHQsIGludCBkaXYpIHsK KworICAgIC8qIFJldHVybnMgKGludClpID0gKHVuc2lnbmVkIGxvbmcgbG9uZylpKih1X2xv bmcpKG11bHQpLyh1X2xvbmcpZGl2LiAqLworICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgbG9u ZyB1bGwgPSBydGhhbF91bGxtdWwoaSwgbXVsdCk7CisgICAgcmV0dXJuIHJ0aGFsX3VsZGl2 cmVtKHVsbCwgZGl2LCBOVUxMKTsKK30KKworc3RhdGljIGlubGluZSBfX2F0dHJpYnV0ZV9j b25zdF9fCit1bnNpZ25lZCBsb25nIGxvbmcgX19ydGhhbF91bGxpbWQgKGNvbnN0IHVuc2ln bmVkIGxvbmcgbG9uZyBvcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgdW5zaWduZWQgbG9uZyBtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCB1bnNpZ25lZCBsb25nIGQpCit7CisJcmV0dXJuIChvcCptKS9kOworfQor CisvKgorc3RhdGljIGlubGluZSBfX2F0dHJpYnV0ZV9jb25zdF9fCit1bnNpZ25lZCBsb25n IGxvbmcgX19ydGhhbF91bGxpbWQgKGNvbnN0IHVuc2lnbmVkIGxvbmcgbG9uZyBvcCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgbG9uZyBt LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBs b25nIGQpCit7CisgICAgdV9sb25nIG9waCwgb3BsLCB0bGgsIHRsbCwgcWgsIHJoLCBxbDsK KyAgICB1bnNpZ25lZCBsb25nIGxvbmcgdGgsIHRsOworCisgICAgX19ydGhhbF91NjR0b3Uz MihvcCwgb3BoLCBvcGwpOworICAgIHRsID0gcnRoYWxfdWxsbXVsKG9wbCwgbSk7CisgICAg X19ydGhhbF91NjR0b3UzMih0bCwgdGxoLCB0bGwpOworICAgIHRoID0gcnRoYWxfdWxsbXVs KG9waCwgbSk7CisgICAgdGggKz0gdGxoOworCisgICAgcWggPSBydGhhbF91bGRpdnJlbSh0 aCwgZCwgJnJoKTsKKyAgICB0aCA9IF9fcnRoYWxfdTY0ZnJvbXUzMihyaCwgdGxsKTsKKyAg ICBxbCA9IHJ0aGFsX3VsZGl2cmVtKHRoLCBkLCBOVUxMKTsKKyAgICByZXR1cm4gX19ydGhh bF91NjRmcm9tdTMyKHFoLCBxbCk7Cit9CisqLworCitzdGF0aWMgaW5saW5lIGxvbmcgbG9u ZyBydGhhbF9sbGltZCAobG9uZyBsb25nIG9wLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGQpCit7CisKKyAgICBpZihvcCA8IDBMTCkK KyAgICAgICAgcmV0dXJuIC1fX3J0aGFsX3VsbGltZCgtb3AsIG0sIGQpOworICAgIHJldHVy biBfX3J0aGFsX3VsbGltZChvcCwgbSwgZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWdu ZWQgbG9uZyBmZm56ICh1bnNpZ25lZCBsb25nIHVsKSB7CisKKyAgICBfX2FzbV9fIF9fdm9s YXRpbGVfXyAoImNudGx6ZCAlMCwgJTEiIDogIj1yIiAodWwpIDogInIiICh1bCAmICgtdWwp KSk7CisgICAgcmV0dXJuIDYzIC0gdWw7Cit9CisKKyNpZiBkZWZpbmVkKF9fS0VSTkVMX18p ICYmICFkZWZpbmVkKF9fY3BsdXNwbHVzKQorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Cisj aW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgor I2luY2x1ZGUgPGFzbS90aW1lLmg+CisjaW5jbHVkZSA8YXNtL3RpbWV4Lmg+CisjaW5jbHVk ZSA8bnVjbGV1cy9hc20vYXRvbWljLmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgor Cit0eXBlZGVmIHZvaWQgKCpydGhhbF9pcnFfaGFuZGxlcl90KSh1bnNpZ25lZCBpcnEsCisJ CQkJICAgIHZvaWQgKmNvb2tpZSk7CisKK3N0cnVjdCBydGhhbF9jYWxpYnJhdGlvbl9kYXRh IHsKKworICAgIHVuc2lnbmVkIGxvbmcgY3B1X2ZyZXE7CisgICAgdW5zaWduZWQgbG9uZyB0 aW1lcl9mcmVxOworfTsKKworZXh0ZXJuIHN0cnVjdCBydGhhbF9jYWxpYnJhdGlvbl9kYXRh IHJ0aGFsX3R1bmFibGVzOworCitleHRlcm4gdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBydGhh bF9jcHVfcmVhbHRpbWU7CisKK2V4dGVybiBhZG9tYWluX3QgcnRoYWxfZG9tYWluOworCisj ZGVmaW5lIFJUSEFMX0RPTUFJTl9JRCAgMHg1MjU0NDE0OQorCisjZGVmaW5lIFJUSEFMX05S X1NSUVMgICAgMzIKKworI2RlZmluZSBSVEhBTF9USU1FUl9JUlEgICBBREVPU19USU1FUl9W SVJRCisjZGVmaW5lIFJUSEFMX1RJTUVSX0ZSRVEgIChydGhhbF90dW5hYmxlcy50aW1lcl9m cmVxKQorI2RlZmluZSBSVEhBTF9DUFVfRlJFUSAgICAocnRoYWxfdHVuYWJsZXMuY3B1X2Zy ZXEpCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBsb25nIHJ0aGFsX3JkdHNjICh2 b2lkKSB7CisgICAgdW5zaWduZWQgbG9uZyBsb25nIHQ7CisgICAgYWRlb3NfaHdfdHNjKHQp OworICAgIHJldHVybiB0OworfQorCisjZGVmaW5lIHJ0aGFsX2NsaSgpICAgICAgICAgICAg ICAgICAgICAgYWRlb3Nfc3RhbGxfcGlwZWxpbmVfZnJvbSgmcnRoYWxfZG9tYWluKQorI2Rl ZmluZSBydGhhbF9zdGkoKSAgICAgICAgICAgICAgICAgICAgIGFkZW9zX3Vuc3RhbGxfcGlw ZWxpbmVfZnJvbSgmcnRoYWxfZG9tYWluKQorI2RlZmluZSBydGhhbF9sb2NhbF9pcnFfc2F2 ZSh4KSAgICAgICAgICgoeCkgPSAhIWFkZW9zX3Rlc3RfYW5kX3N0YWxsX3BpcGVsaW5lX2Zy b20oJnJ0aGFsX2RvbWFpbikpCisjZGVmaW5lIHJ0aGFsX2xvY2FsX2lycV9yZXN0b3JlKHgp ICAgICAgYWRlb3NfcmVzdG9yZV9waXBlbGluZV9mcm9tKCZydGhhbF9kb21haW4sKHgpKQor I2RlZmluZSBydGhhbF9sb2NhbF9pcnFfZmxhZ3MoeCkgICAgICAgICgoeCkgPSAhIWFkZW9z X3Rlc3RfcGlwZWxpbmVfZnJvbSgmcnRoYWxfZG9tYWluKSkKKyNkZWZpbmUgcnRoYWxfbG9j YWxfaXJxX3Rlc3QoKSAgICAgICAgICAoISFhZGVvc190ZXN0X3BpcGVsaW5lX2Zyb20oJnJ0 aGFsX2RvbWFpbikpCisjZGVmaW5lIHJ0aGFsX2xvY2FsX2lycV9zeW5jKHgpICAgICAgICAg KCh4KSA9ICEhYWRlb3NfdGVzdF9hbmRfdW5zdGFsbF9waXBlbGluZV9mcm9tKCZydGhhbF9k b21haW4pKQorCisjZGVmaW5lIHJ0aGFsX2h3X2xvY2soZmxhZ3MpICAgICAgICAgICAgYWRl b3NfaHdfbG9jYWxfaXJxX3NhdmUoZmxhZ3MpCisjZGVmaW5lIHJ0aGFsX2h3X3VubG9jayhm bGFncykgICAgICAgICAgYWRlb3NfaHdfbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpCisjZGVm aW5lIHJ0aGFsX2h3X2VuYWJsZSgpICAgICAgICAgICAgICAgYWRlb3NfaHdfc3RpKCkKKyNk ZWZpbmUgcnRoYWxfaHdfZGlzYWJsZSgpICAgICAgICAgICAgICBhZGVvc19od19jbGkoKQor CisjZGVmaW5lIHJ0aGFsX2xpbnV4X3N0aSgpICAgICAgICAgICAgICAgIGFkZW9zX3Vuc3Rh bGxfcGlwZWxpbmVfZnJvbShhZHBfcm9vdCkKKyNkZWZpbmUgcnRoYWxfbGludXhfY2xpKCkg ICAgICAgICAgICAgICAgYWRlb3Nfc3RhbGxfcGlwZWxpbmVfZnJvbShhZHBfcm9vdCkKKyNk ZWZpbmUgcnRoYWxfbGludXhfbG9jYWxfaXJxX3NhdmUoeCkgICAgKCh4KSA9ICEhYWRlb3Nf dGVzdF9hbmRfc3RhbGxfcGlwZWxpbmVfZnJvbShhZHBfcm9vdCkpCisjZGVmaW5lIHJ0aGFs X2xpbnV4X2xvY2FsX2lycV9yZXN0b3JlKHgpIGFkZW9zX3Jlc3RvcmVfcGlwZWxpbmVfZnJv bShhZHBfcm9vdCx4KQorI2RlZmluZSBydGhhbF9saW51eF9sb2NhbF9pcnFfcmVzdG9yZV9u b3N5bmMoeCxjcHVpZCkgYWRlb3NfcmVzdG9yZV9waXBlbGluZV9ub3N5bmMoYWRwX3Jvb3Qs eCxjcHVpZCkKKworI2RlZmluZSBydGhhbF9zcGluX2xvY2sobG9jaykgICAgYWRlb3Nfc3Bp bl9sb2NrKGxvY2spCisjZGVmaW5lIHJ0aGFsX3NwaW5fdW5sb2NrKGxvY2spICBhZGVvc19z cGluX3VubG9jayhsb2NrKQorCitzdGF0aWMgaW5saW5lIHZvaWQgcnRoYWxfc3Bpbl9sb2Nr X2lycShzcGlubG9ja190ICpsb2NrKSB7CisKKyAgICBydGhhbF9jbGkoKTsKKyAgICBydGhh bF9zcGluX2xvY2sobG9jayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBydGhhbF9zcGlu X3VubG9ja19pcnEoc3BpbmxvY2tfdCAqbG9jaykgeworCisgICAgcnRoYWxfc3Bpbl91bmxv Y2sobG9jayk7CisgICAgcnRoYWxfc3RpKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWdu ZWQgbG9uZyBydGhhbF9zcGluX2xvY2tfaXJxc2F2ZShzcGlubG9ja190ICpsb2NrKSB7CisK KyAgICB1bnNpZ25lZCBsb25nIGZsYWdzOworICAgIHJ0aGFsX2xvY2FsX2lycV9zYXZlKGZs YWdzKTsKKyAgICBydGhhbF9zcGluX2xvY2sobG9jayk7CisgICAgcmV0dXJuIGZsYWdzOwor fQorCitzdGF0aWMgaW5saW5lIHZvaWQgcnRoYWxfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSh1 bnNpZ25lZCBsb25nIGZsYWdzLAorCQkJCQkJc3BpbmxvY2tfdCAqbG9jaykgeworICAgIHJ0 aGFsX3NwaW5fdW5sb2NrKGxvY2spOworICAgIHJ0aGFsX2xvY2FsX2lycV9yZXN0b3JlKGZs YWdzKTsKK30KKworI2lmICFkZWZpbmVkKENPTkZJR19BREVPU19OT1RIUkVBRFMpCisKKy8q IFNpbmNlIHJlYWwtdGltZSBpbnRlcnJ1cHQgaGFuZGxlcnMgYXJlIGNhbGxlZCBvbiBiZWhh bGYgb2YgdGhlIFJUQUkKKyAgIGRvbWFpbiBzdGFjaywgd2UgY2Fubm90IGluZmVyZSB0aGUg ImN1cnJlbnQiIExpbnV4IHRhc2sgYWRkcmVzcworICAgdXNpbmcgJWVzcC4gV2UgbXVzdCB1 c2UgdGhlIHN1c3BlbmRlZCBMaW51eCBkb21haW4ncyBzdGFjayBwb2ludGVyCisgICBpbnN0 ZWFkLiAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnJ0aGFsX2dldF9y b290X2N1cnJlbnQgKGludCBjcHVpZCkgeworICAgIHJldHVybiAoKHN0cnVjdCB0aHJlYWRf aW5mbyAqKShhZHBfcm9vdC0+ZXNwW2NwdWlkXSAmICh+KDE2Mzg0LTEpKSkpLT50YXNrOwor fQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCB0YXNrX3N0cnVjdCAqcnRoYWxfZ2V0X2N1cnJl bnQgKGludCBjcHVpZCkKKworeworICAgIHJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgZXNwIGFz bSAoInIxIik7CisgICAgLyogUFBDMzI6IEZJWE1FOiByMiBzaG91bGQgYmUgb2sgb3IgZXZl biBfX2FkZW9zX2N1cnJlbnRfdGhyZWFkaW5mbygpIC0gb2Zmc2V0b2YoVEhSRUFEKSAqLwor ICAgIC8qIGlmIF4sIHRoZW4gb24gUFBDNjQgc2hvdWxkIHVzZSBwYWNhICovCisgICAgaWYg KGVzcCA+PSBydGhhbF9kb21haW4uZXN0YWNrYmFzZVtjcHVpZF0gJiYgZXNwIDwgcnRoYWxf ZG9tYWluLmVzdGFja2Jhc2VbY3B1aWRdICsgMTYzODQpCisJcmV0dXJuIHJ0aGFsX2dldF9y b290X2N1cnJlbnQoY3B1aWQpOworCisgICAgcmV0dXJuIGN1cnJlbnQ7Cit9CisKKyNlbHNl IC8qIENPTkZJR19BREVPU19OT1RIUkVBRFMgKi8KKworc3RhdGljIGlubGluZSBzdHJ1Y3Qg dGFza19zdHJ1Y3QgKnJ0aGFsX2dldF9yb290X2N1cnJlbnQgKGludCBjcHVpZCkgeworICAg IHJldHVybiBjdXJyZW50OworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCB0YXNrX3N0cnVj dCAqcnRoYWxfZ2V0X2N1cnJlbnQgKGludCBjcHVpZCkgeworICAgIHJldHVybiBjdXJyZW50 OworfQorCisjZW5kaWYgLyogIUNPTkZJR19BREVPU19OT1RIUkVBRFMgKi8KKworc3RhdGlj IGlubGluZSB2b2lkIHJ0aGFsX3NldF90aW1lcl9zaG90ICh1bnNpZ25lZCBsb25nIGRlbGF5 KSB7CisKKyAgICBpZiAoZGVsYXkpIHsKKwlzZXRfZGVjKGRlbGF5KTsKKyAgICB9Cit9CisK KyAgICAvKiBQcml2YXRlIGludGVyZmFjZSAtLSBJbnRlcm5hbCB1c2Ugb25seSAqLworCit1 bnNpZ25lZCBsb25nIHJ0aGFsX2NyaXRpY2FsX2VudGVyKHZvaWQgKCpzeW5jaCkodm9pZCkp OworCit2b2lkIHJ0aGFsX2NyaXRpY2FsX2V4aXQodW5zaWduZWQgbG9uZyBmbGFncyk7CisK Ky8qIFRoZSBmb2xsb3dpbmcgbXVzdCBiZSBpbiBzeW5jIHcvIHJ0aGFsX3N3aXRjaF9jb250 ZXh0KCkgaW4KKyAgIHN3aXRjaC5TICovCisjZGVmaW5lIFJUSEFMX1NXSVRDSF9GUkFNRV9T SVpFICAyMjQKKwordm9pZCBydGhhbF9zd2l0Y2hfY29udGV4dCh1bnNpZ25lZCBsb25nICpv dXRfa3NwcCwKKwkJCSAgdW5zaWduZWQgbG9uZyAqaW5fa3NwcCk7CisKKyNpZmRlZiBDT05G SUdfUlRBSV9IV19GUFUKKwordHlwZWRlZiBzdHJ1Y3QgcnRoYWxfZnBlbnYgeworICAgIAor ICAgIC8qIFRoaXMgbGF5b3V0IG11c3QgZm9sbG93IGV4YWN0ZWx5IHRoZSBkZWZpbml0aW9u IG9mIHRoZSBGUFUKKyAgICAgICBiYWNrdXAgYXJlYSBpbiBhIFBQQyB0aHJlYWQgc3RydWN0 IGF2YWlsYWJsZSBmcm9tCisgICAgICAgPGFzbS1wcGMvcHJvY2Vzc29yLmg+LiBTcGVjaWZp Y2FsbHksIGZwcltdIGFuIGZwc2NyIHdvcmRzIG11c3QKKyAgICAgICBiZSBjb250aWd1b3Vz IGluIG1lbW9yeSAoc2VlIGFyY2gvcHBjL2hhbC9mcHUuUykuICovCisKKyAgICBkb3VibGUg ZnByWzMyXTsKKyAgICB1bnNpZ25lZCBsb25nIGZwc2NyOwkvKiBtZmZzIHVzZXMgNjQtYml0 IChwYWQgaW4gaGkvZnBzY3IgaW4gbG8pICovCit9IHJ0aGFsX2ZwZW52X3Q7CisKK3ZvaWQg cnRoYWxfaW5pdF9mcHUocnRoYWxfZnBlbnZfdCAqZnB1ZW52KTsKKwordm9pZCBydGhhbF9z YXZlX2ZwdShydGhhbF9mcGVudl90ICpmcHVlbnYpOworCit2b2lkIHJ0aGFsX3Jlc3RvcmVf ZnB1KHJ0aGFsX2ZwZW52X3QgKmZwdWVudik7CisKKyNpZm5kZWYgQ09ORklHX1NNUAorI2Rl ZmluZSBydGhhbF9nZXRfZnB1X293bmVyKGN1cikgbGFzdF90YXNrX3VzZWRfbWF0aAorI2Vs c2UgLyogQ09ORklHX1NNUCAqLworI2RlZmluZSBydGhhbF9nZXRfZnB1X293bmVyKGN1cikg KHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBzdHJ1Y3QgdGFza19zdHJ1 Y3QgKiBfY3VyID0gKGN1cik7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKChf Y3VyLT50aHJlYWQucmVncyAmJiAoX2N1ci0+dGhyZWFkLnJlZ3MtPm1zciAmIE1TUl9GUCkp ICAgXAorICAgICA/IF9jdXIgOiBOVUxMKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKK30pCisjZW5kaWYgLyogQ09ORklHX1NNUCAqLworICAgIAor I2RlZmluZSBydGhhbF9kaXNhYmxlX2ZwdSgpICh7ICAgICAgICAgICAgICAgICAgICAgICAg ICBcCisgICAgcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfbXNyOyAgICAgICAgICAgICAgICAg ICAgICAgIFwKKyAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoICJtZm1zciAlMCIgOiAiPXIi KF9tc3IpICk7ICAgXAorICAgIF9fYXNtX18gX192b2xhdGlsZV9fICggIm10bXNyZCAlMCIg ICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICA6IC8qIG5v IG91dHB1dCAqLyAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDog InIiKF9tc3IgJiB+KE1TUl9GUCkpICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgOiAibWVtb3J5IiApOyAgICAgICAgICAgICAgICBcCit9KQorCisjZGVmaW5lIHJ0aGFs X2VuYWJsZV9mcHUoKSAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICByZWdp c3RlciB1bnNpZ25lZCBsb25nIF9tc3I7ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg IF9fYXNtX18gX192b2xhdGlsZV9fICggIm1mbXNyICUwIiA6ICI9ciIoX21zcikgKTsgICBc CisgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCAibXRtc3JkICUwIiAgICAgICAgICAgICAg ICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDogLyogbm8gb3V0cHV0ICovICAg ICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiciIoX21zciB8IE1T Ul9GUCkgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICJtZW1vcnki ICk7ICAgICAgICAgICAgICAgIFwKK30pCisKKyNlbmRpZiAvKiBDT05GSUdfUlRBSV9IV19G UFUgKi8KKworI2VuZGlmIC8qIF9fS0VSTkVMX18gJiYgIV9fY3BsdXNwbHVzICovCisKKyAg ICAvKiBQdWJsaWMgaW50ZXJmYWNlICovCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpbmNs dWRlIDxsaW51eC9rZXJuZWwuaD4KKwordHlwZWRlZiBpbnQgKCpydGhhbF90cmFwX2hhbmRs ZXJfdCkoYWRldmluZm9fdCAqZXZpbmZvKTsKKworI2RlZmluZSBydGhhbF9wcmludGsgICAg cHJpbnRrIC8qIFRoaXMgaXMgc2FmZSBvdmVyIEFkZW9zICovCisKKyNpZmRlZiBfX2NwbHVz cGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworaW50IHJ0 aGFsX3JlcXVlc3RfaXJxKHVuc2lnbmVkIGlycSwKKwkJICAgICAgdm9pZCAoKmhhbmRsZXIp KHVuc2lnbmVkIGlycSwgdm9pZCAqY29va2llKSwKKwkJICAgICAgdm9pZCAqY29va2llKTsK KworaW50IHJ0aGFsX3JlbGVhc2VfaXJxKHVuc2lnbmVkIGlycSk7CisKKy8qKgorICogQG5h bWUgUHJvZ3JhbW1hYmxlIEludGVycnVwdCBDb250cm9sbGVycyAoUElDKSBtYW5hZ2VtZW50 IGZ1bmN0aW9ucy4KKyAqCisgKkB7Ki8KKworaW50IHJ0aGFsX2VuYWJsZV9pcnEodW5zaWdu ZWQgaXJxKTsKKworaW50IHJ0aGFsX2Rpc2FibGVfaXJxKHVuc2lnbmVkIGlycSk7CisKKy8q QH0qLworCitpbnQgcnRoYWxfcmVxdWVzdF9saW51eF9pcnEodW5zaWduZWQgaXJxLAorCQkJ ICAgIGlycXJldHVybl90ICgqaGFuZGxlcikoaW50IGlycSwKKwkJCQkJCSAgIHZvaWQgKmRl dl9pZCwKKwkJCQkJCSAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKSwgCisJCQkgICAgY2hhciAq bmFtZSwKKwkJCSAgICB2b2lkICpkZXZfaWQpOworCitpbnQgcnRoYWxfcmVsZWFzZV9saW51 eF9pcnEodW5zaWduZWQgaXJxLAorCQkJICAgIHZvaWQgKmRldl9pZCk7CisKK2ludCBydGhh bF9wZW5kX2xpbnV4X2lycSh1bnNpZ25lZCBpcnEpOworCitpbnQgcnRoYWxfcGVuZF9saW51 eF9zcnEodW5zaWduZWQgc3JxKTsKKworaW50IHJ0aGFsX3JlcXVlc3Rfc3JxKHVuc2lnbmVk IGxhYmVsLAorCQkgICAgICB2b2lkICgqaGFuZGxlcikodm9pZCkpOworCitpbnQgcnRoYWxf cmVsZWFzZV9zcnEodW5zaWduZWQgc3JxKTsKKworaW50IHJ0aGFsX3NldF9pcnFfYWZmaW5p dHkodW5zaWduZWQgaXJxLAorCQkJICAgY3B1bWFza190IGNwdW1hc2ssCisJCQkgICBjcHVt YXNrX3QgKm9sZG1hc2spOworCitpbnQgcnRoYWxfcmVxdWVzdF90aW1lcih2b2lkICgqaGFu ZGxlcikodm9pZCksCisJCQl1bnNpZ25lZCBsb25nIG5zdGljayk7CisKK3ZvaWQgcnRoYWxf cmVsZWFzZV90aW1lcih2b2lkKTsKKworcnRoYWxfdHJhcF9oYW5kbGVyX3QgcnRoYWxfc2V0 X3RyYXBfaGFuZGxlcihydGhhbF90cmFwX2hhbmRsZXJfdCBoYW5kbGVyKTsKKwordW5zaWdu ZWQgbG9uZyBydGhhbF9jYWxpYnJhdGVfdGltZXIodm9pZCk7CisKKyNpZmRlZiBfX2NwbHVz cGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNlbmRpZiAvKiBfX0tFUk5F TF9fICovCisKKy8qQH0qLworCisjZW5kaWYgLyogIV9SVEFJX0FTTV9QUENfSEFMX0ggKi8K ZGlmZiAtTnJ1IGZ1c2lvbi0wLjcuMS9pbmNsdWRlL251Y2xldXMvYXNtLXBwYzY0L3N5c2Nh bGwuaCBmdXNpb24tMC43LjEtcHBjNjQtZGV2ZWwvaW5jbHVkZS9udWNsZXVzL2FzbS1wcGM2 NC9zeXNjYWxsLmgKLS0tIGZ1c2lvbi0wLjcuMS9pbmNsdWRlL251Y2xldXMvYXNtLXBwYzY0 L3N5c2NhbGwuaAkxOTcwLTAxLTAxIDAyOjAwOjAwLjAwMDAwMDAwMCArMDIwMAorKysgZnVz aW9uLTAuNy4xLXBwYzY0LWRldmVsL2luY2x1ZGUvbnVjbGV1cy9hc20tcHBjNjQvc3lzY2Fs bC5oCTIwMDUtMDYtMDEgMjE6Mjg6MjMuMDAwMDAwMDAwICswMzAwCkBAIC0wLDAgKzEsMTgx IEBACisvKgorICogUlRBSS9mdXNpb24gNjQtYml0IFBvd2VyUEMgYWRvcHRpb24KKyAqIENv cHlyaWdodCAoQykgMjAwNSBUYW5lbGkgVsOkaMOka2FuZ2FzIGFuZCBIZWlra2kgTGluZGhv bG0KKyAqIGJhc2VkIG9uIHByZXZpb3VzIHdvcms6CisgKiAgICAgCisgKiBDb3B5cmlnaHQg KEMpIDIwMDEsMjAwMiwyMDAzLDIwMDQgUGhpbGlwcGUgR2VydW0gPHJwbUB4ZW5vbWFpLm9y Zz4uCisgKgorICogUlRBSS9mdXNpb24gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp c3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKyAqIGJ5IHRoZSBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu c2UsCisgKiBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq IFJUQUkvZnVzaW9uIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi ZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0 aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog YWxvbmcgd2l0aCBSVEFJL2Z1c2lvbjsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0 d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMw LCBCb3N0b24sIE1BCisgKiAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2lmbmRlZiBfUlRB SV9BU01fUFBDNjRfU1lTQ0FMTF9ICisjZGVmaW5lIF9SVEFJX0FTTV9QUEM2NF9TWVNDQUxM X0gKKworI2luY2x1ZGUgPHJ0YWlfY29uZmlnLmg+CisjaW5jbHVkZSA8YXNtL3B0cmFjZS5o PgorCisvKgorICogU29tZSBvZiB0aGUgZm9sbG93aW5nIG1hY3JvcyBoYXZlIGJlZW4gYWRh cHRlZCBmcm9tIExpbnV4J3MKKyAqIGltcGxlbWVudGF0aW9uIG9mIHRoZSBzeXNjYWxsIG1l Y2hhbmlzbSBpbiA8YXNtLXBwYzY0L3VuaXN0ZC5oPjoKKyAqCisgKiBUaGUgZm9sbG93aW5n IGNvZGUgZGVmaW5lcyBhbiBpbmxpbmUgc3lzY2FsbCBtZWNoYW5pc20gdXNlZCBieQorICog UlRBSS9mdXNpb24ncyByZWFsLXRpbWUgaW50ZXJmYWNlcyB0byBpbnZva2UgdGhlIHNraW4g bW9kdWxlCisgKiBzZXJ2aWNlcyBpbiBrZXJuZWwgc3BhY2UuCisgKi8KKworI2RlZmluZSBY RU5PTUFJX0RPX1NZU0NBTEwobnIsIGlkLCBvcCwgYXJncy4uLikJCQlcCisgICh7CQkJCQkJ CQlcCisJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX3NjXzAgIF9fYXNtX18gKCJyMCIpOwkJ XAorCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19zY18zICBfX2FzbV9fICgicjMiKTsJCVwK KwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fc2NfNCAgX19hc21fXyAoInI0Iik7CQlcCisJ cmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX3NjXzUgIF9fYXNtX18gKCJyNSIpOwkJXAorCXJl Z2lzdGVyIHVuc2lnbmVkIGxvbmcgX19zY182ICBfX2FzbV9fICgicjYiKTsJCVwKKwlyZWdp c3RlciB1bnNpZ25lZCBsb25nIF9fc2NfNyAgX19hc21fXyAoInI3Iik7CQlcCisJCQkJCQkJ CVwKKwlMT0FEQVJHU18jI25yKF9feG5fbXV4X2NvZGUoaWQsb3ApLCBhcmdzKTsJCVwKKwlf X2FzbV9fIF9fdm9sYXRpbGVfXwkJCQkJXAorCQkoInNjICAgICAgICAgICBcblx0IgkJCQlc CisJCSAibWZjciAlMCAgICAgICIJCQkJXAorCQk6ICI9JnIiIChfX3NjXzApLAkJCQlcCisJ CSAgIj0mciIgKF9fc2NfMyksICAiPSZyIiAoX19zY180KSwJCVwKKwkJICAiPSZyIiAoX19z Y181KSwgICI9JnIiIChfX3NjXzYpLAkJXAorCQkgICI9JnIiIChfX3NjXzcpCQkJCVwKKwkJ OiBBU01fSU5QVVRfIyNucgkJCQlcCisJCTogImNyMCIsICJjdHIiLCAibWVtb3J5IiwJCQlc CisJCSAgInI4IiwgInI5IiwgInIxMCIsInIxMSIsICJyMTIiKTsJCVwKKwkoaW50KSgoX19z Y18wICYgKDEgPDwgMjgpKSA/IC1fX3NjXzMgOiBfX3NjXzMpOwkJXAorICB9KQorCisjZGVm aW5lIExPQURBUkdTXzAobXV4Y29kZSwgZHVtbXkuLi4pCQkJCVwKKwlfX3NjXzAgPSBtdXhj b2RlCisjZGVmaW5lIExPQURBUkdTXzEobXV4Y29kZSwgYXJnMSkJCQkJXAorCUxPQURBUkdT XzAobXV4Y29kZSk7CQkJCQlcCisJX19zY18zID0gKHVuc2lnbmVkIGxvbmcpIChhcmcxKQor I2RlZmluZSBMT0FEQVJHU18yKG11eGNvZGUsIGFyZzEsIGFyZzIpCQkJCVwKKwlMT0FEQVJH U18xKG11eGNvZGUsIGFyZzEpOwkJCQlcCisJX19zY180ID0gKHVuc2lnbmVkIGxvbmcpIChh cmcyKQorI2RlZmluZSBMT0FEQVJHU18zKG11eGNvZGUsIGFyZzEsIGFyZzIsIGFyZzMpCQkJ XAorCUxPQURBUkdTXzIobXV4Y29kZSwgYXJnMSwgYXJnMik7CQkJXAorCV9fc2NfNSA9ICh1 bnNpZ25lZCBsb25nKSAoYXJnMykKKyNkZWZpbmUgTE9BREFSR1NfNChtdXhjb2RlLCBhcmcx LCBhcmcyLCBhcmczLCBhcmc0KQkJXAorCUxPQURBUkdTXzMobXV4Y29kZSwgYXJnMSwgYXJn MiwgYXJnMyk7CQkJXAorCV9fc2NfNiA9ICh1bnNpZ25lZCBsb25nKSAoYXJnNCkKKyNkZWZp bmUgTE9BREFSR1NfNShtdXhjb2RlLCBhcmcxLCBhcmcyLCBhcmczLCBhcmc0LCBhcmc1KQlc CisJTE9BREFSR1NfNChtdXhjb2RlLCBhcmcxLCBhcmcyLCBhcmczLCBhcmc0KTsJCVwKKwlf X3NjXzcgPSAodW5zaWduZWQgbG9uZykgKGFyZzUpCisKKyNkZWZpbmUgQVNNX0lOUFVUXzAg IjAiIChfX3NjXzApCisjZGVmaW5lIEFTTV9JTlBVVF8xIEFTTV9JTlBVVF8wLCAiMSIgKF9f c2NfMykKKyNkZWZpbmUgQVNNX0lOUFVUXzIgQVNNX0lOUFVUXzEsICIyIiAoX19zY180KQor I2RlZmluZSBBU01fSU5QVVRfMyBBU01fSU5QVVRfMiwgIjMiIChfX3NjXzUpCisjZGVmaW5l IEFTTV9JTlBVVF80IEFTTV9JTlBVVF8zLCAiNCIgKF9fc2NfNikKKyNkZWZpbmUgQVNNX0lO UFVUXzUgQVNNX0lOUFVUXzQsICI1IiAoX19zY183KQorCisvKiBSZWdpc3RlciBtYXBwaW5n IGZvciBhY2Nlc3Npbmcgc3lzY2FsbCBhcmdzLiAqLworCisjZGVmaW5lIF9feG5fcmVnX211 eChyZWdzKSAgICAoKHJlZ3MpLT5ncHJbMF0pCisjZGVmaW5lIF9feG5fcmVnX3J2YWwocmVn cykgICAoKHJlZ3MpLT5ncHJbM10pCisjZGVmaW5lIF9feG5fcmVnX2FyZzEocmVncykgICAo KHJlZ3MpLT5ncHJbM10pCisjZGVmaW5lIF9feG5fcmVnX2FyZzIocmVncykgICAoKHJlZ3Mp LT5ncHJbNF0pCisjZGVmaW5lIF9feG5fcmVnX2FyZzMocmVncykgICAoKHJlZ3MpLT5ncHJb NV0pCisjZGVmaW5lIF9feG5fcmVnX2FyZzQocmVncykgICAoKHJlZ3MpLT5ncHJbNl0pCisj ZGVmaW5lIF9feG5fcmVnX2FyZzUocmVncykgICAoKHJlZ3MpLT5ncHJbN10pCisKKyNkZWZp bmUgX194bl9yZWdfbXV4X3AocmVncykgICAgICAgICgoX194bl9yZWdfbXV4KHJlZ3MpICYg MHhmZmZmKSA9PSBfX3huX3N5c19tdXgpCisjZGVmaW5lIF9feG5fbXV4X2lkKHJlZ3MpICAg ICAgICAgICAoKF9feG5fcmVnX211eChyZWdzKSA+PiAxNikgJiAweGZmKQorI2RlZmluZSBf X3huX211eF9vcChyZWdzKSAgICAgICAgICAgKChfX3huX3JlZ19tdXgocmVncykgPj4gMjQp ICYgMHhmZikKKyNkZWZpbmUgX194bl9tdXhfY29kZShpZCxvcCkgICAgICAgICgob3AgPDwg MjQpfCgoaWQgPDwgMTYpICYgMHhmZjAwMDApfChfX3huX3N5c19tdXggJiAweGZmZmYpKQor CisjZGVmaW5lIFhFTk9NQUlfU1lTQ0FMTDAob3ApICAgICAgICAgICAgICAgIFhFTk9NQUlf RE9fU1lTQ0FMTCgwLDAsb3ApCisjZGVmaW5lIFhFTk9NQUlfU1lTQ0FMTDEob3AsYTEpICAg ICAgICAgICAgIFhFTk9NQUlfRE9fU1lTQ0FMTCgxLDAsb3AsYTEpCisjZGVmaW5lIFhFTk9N QUlfU1lTQ0FMTDIob3AsYTEsYTIpICAgICAgICAgIFhFTk9NQUlfRE9fU1lTQ0FMTCgyLDAs b3AsYTEsYTIpCisjZGVmaW5lIFhFTk9NQUlfU1lTQ0FMTDMob3AsYTEsYTIsYTMpICAgICAg IFhFTk9NQUlfRE9fU1lTQ0FMTCgzLDAsb3AsYTEsYTIsYTMpCisjZGVmaW5lIFhFTk9NQUlf U1lTQ0FMTDQob3AsYTEsYTIsYTMsYTQpICAgIFhFTk9NQUlfRE9fU1lTQ0FMTCg0LDAsb3As YTEsYTIsYTMsYTQpCisjZGVmaW5lIFhFTk9NQUlfU1lTQ0FMTDUob3AsYTEsYTIsYTMsYTQs YTUpIFhFTk9NQUlfRE9fU1lTQ0FMTCg1LDAsb3AsYTEsYTIsYTMsYTQsYTUpCisKKyNkZWZp bmUgWEVOT01BSV9TS0lOQ0FMTDAoaWQsb3ApICAgICAgICAgICAgICAgIFhFTk9NQUlfRE9f U1lTQ0FMTCgwLGlkLG9wKQorI2RlZmluZSBYRU5PTUFJX1NLSU5DQUxMMShpZCxvcCxhMSkg ICAgICAgICAgICAgWEVOT01BSV9ET19TWVNDQUxMKDEsaWQsb3AsYTEpCisjZGVmaW5lIFhF Tk9NQUlfU0tJTkNBTEwyKGlkLG9wLGExLGEyKSAgICAgICAgICBYRU5PTUFJX0RPX1NZU0NB TEwoMixpZCxvcCxhMSxhMikKKyNkZWZpbmUgWEVOT01BSV9TS0lOQ0FMTDMoaWQsb3AsYTEs YTIsYTMpICAgICAgIFhFTk9NQUlfRE9fU1lTQ0FMTCgzLGlkLG9wLGExLGEyLGEzKQorI2Rl ZmluZSBYRU5PTUFJX1NLSU5DQUxMNChpZCxvcCxhMSxhMixhMyxhNCkgICAgWEVOT01BSV9E T19TWVNDQUxMKDQsaWQsb3AsYTEsYTIsYTMsYTQpCisjZGVmaW5lIFhFTk9NQUlfU0tJTkNB TEw1KGlkLG9wLGExLGEyLGEzLGE0LGE1KSBYRU5PTUFJX0RPX1NZU0NBTEwoNSxpZCxvcCxh MSxhMixhMyxhNCxhNSkKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2luY2x1ZGUgPGxpbnV4 L2Vycm5vLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKworLyogT3VyIG93biBzZXQg b2YgY29weS10by9mcm9tLXVzZXIgbWFjcm9zIHdoaWNoIG11c3QgYnlwYXNzCisgICBtaWdo dF9zbGVlcCgpIGNoZWNrcy4gVGhlIGNhbGxlciBjYW5ub3QgZmF1bHQgYW5kIGlzIGV4cGVj dGVkIHRvCisgICBoYXZlIGNoZWNrZWQgZm9yIGJhZCByYW5nZSBiZWZvcmUgdXNpbmcgdGhl IGNvcHkgbWFjcm9zLCBzbyB3ZQorICAgc2hvdWxkIG5vdCBoYXZlIHRvIGNhcmUgYWJvdXQg dGhlIHJlc3VsdC4gVGhlIGFwcGFyZW50bHkKKyAgIHByZXBvc3Rlcm91cyBkby13aGlsZSBi cmFja2V0aW5nIGp1c3QgaGVscHMgc2lsZW5jaW5nIEdDQydzCisgICAid2Fybl91bnVzZWRf cmVzdWx0IiBhdHRyaWJ1dGUgb24gdGhlIHJlbGF0ZWQga2VybmVsIG1hY3Jvcy4gKi8KKyNk ZWZpbmUgX194bl9jb3B5X2Zyb21fdXNlcih0YXNrLGRzdFAsc3JjUCxuKSAgXAorZG8geyBc CisgICAgaWYgKF9fY29weV9mcm9tX3VzZXJfaW5hdG9taWMoZHN0UCxzcmNQLG4pKSBcCisg ICAgICAgIDsgXAorfSB3aGlsZSgwKQorI2RlZmluZSBfX3huX2NvcHlfdG9fdXNlcih0YXNr LGRzdFAsc3JjUCxuKSAgXAorZG8geyBcCisgICAgaWYgKF9fY29weV90b191c2VyX2luYXRv bWljKGRzdFAsc3JjUCxuKSkgXAorICAgICAgICA7IFwKK30gd2hpbGUoMCkKKyNkZWZpbmUg X194bl9wdXRfdXNlcih0YXNrLHNyYyxkc3RQKSAgICAgICAgICAgX19wdXRfdXNlcihzcmMs ZHN0UCkKKyNkZWZpbmUgX194bl9nZXRfdXNlcih0YXNrLGRzdCxzcmNQKSAgICAgICAgICAg X19nZXRfdXNlcihkc3Qsc3JjUCkKKworI2RlZmluZSBfX3huX3JhbmdlX29rKHRhc2ssYWRk cixzaXplKSBcCisJX19hY2Nlc3Nfb2soKChfX2ZvcmNlIHVuc2lnbmVkIGxvbmcpKGFkZHIp KSwoc2l6ZSksKHRhc2stPnRocmVhZC5mcykpCisKKyNkZWZpbmUgX194bl9hY2Nlc3Nfb2so dGFzayx0eXBlLGFkZHIsc2l6ZSkgIF9feG5fcmFuZ2Vfb2sodGFzayxhZGRyLHNpemUpCisK Ky8qIFB1cnBvc2VkbHkgdXNlZCBpbmxpbmVzIGFuZCBub3QgbWFjcm9zIGZvciB0aGUgZm9s bG93aW5nIHJvdXRpbmVzCisgICBzbyB0aGF0IHdlIGRvbid0IHJpc2sgc3B1cmlvdXMgc2lk ZS1lZmZlY3RzIG9uIHRoZSB2YWx1ZSBhcmcuICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBf X3huX3N1Y2Nlc3NfcmV0dXJuKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgdikgeworICAg IF9feG5fcmVnX3J2YWwocmVncykgPSB2OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX194 bl9lcnJvcl9yZXR1cm4oc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCB2KSB7CisgICAgLyog V2UgY3VycmVudGx5IG5ldmVyIHNldCB0aGUgU08gYml0IGZvciBtYXJraW5nIGVycm9ycywg ZXZlbiBpZgorICAgICAqIHdlIGFsd2F5cyB0ZXN0IGl0IHVwb24gc3lzY2FsbCByZXR1cm4u ICovCisgICAgX194bl9yZWdfcnZhbChyZWdzKSA9IHY7Cit9CisKK3N0YXRpYyBpbmxpbmUg dm9pZCBfX3huX3N0YXR1c19yZXR1cm4oc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCB2KSB7 CisgICAgX194bl9yZWdfcnZhbChyZWdzKSA9IHY7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50 IF9feG5faW50ZXJydXB0ZWRfcChzdHJ1Y3QgcHRfcmVncyAqcmVncykgeworICAgIHJldHVy biBfX3huX3JlZ19ydmFsKHJlZ3MpID09IC1FSU5UUjsKK30KKworI2Vsc2UgLyogIV9fS0VS TkVMX18gKi8KKworI2RlZmluZSBDT05GSUdfUlRBSV9IV19ESVJFQ1RfVFNDIDEKKworc3Rh dGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxvbmcgX194bl9yZHRzYyAodm9pZCkKKworewor ICAgIHVuc2lnbmVkIGxvbmcgbG9uZyB0OworCisgICAgX19hc21fXyBfX3ZvbGF0aWxlX18g KCJtZnRiICUwXG4iIDogIj1yIiAodCkpOworICAgIHJldHVybiB0OworfQorCisjZW5kaWYg LyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogIV9SVEFJX0FTTV9QUENfU1lTQ0FMTF9I ICovCmRpZmYgLU5ydSBmdXNpb24tMC43LjEvaW5jbHVkZS9udWNsZXVzL2FzbS1wcGM2NC9z eXN0ZW0uaCBmdXNpb24tMC43LjEtcHBjNjQtZGV2ZWwvaW5jbHVkZS9udWNsZXVzL2FzbS1w cGM2NC9zeXN0ZW0uaAotLS0gZnVzaW9uLTAuNy4xL2luY2x1ZGUvbnVjbGV1cy9hc20tcHBj NjQvc3lzdGVtLmgJMTk3MC0wMS0wMSAwMjowMDowMC4wMDAwMDAwMDAgKzAyMDAKKysrIGZ1 c2lvbi0wLjcuMS1wcGM2NC1kZXZlbC9pbmNsdWRlL251Y2xldXMvYXNtLXBwYzY0L3N5c3Rl bS5oCTIwMDUtMDYtMDEgMTY6Mjg6MTguMDAwMDAwMDAwICswMzAwCkBAIC0wLDAgKzEsOTY4 IEBACisvKgorICogUlRBSS9mdXNpb24gNjQtYml0IFBvd2VyUEMgYWRvcHRpb24KKyAqIENv cHlyaWdodCAoQykgMjAwNSBUYW5lbGkgVsOkaMOka2FuZ2FzIGFuZCBIZWlra2kgTGluZGhv bG0KKyAqIGJhc2VkIG9uIHByZXZpb3VzIHdvcms6CisgKiAgICAgCisgKiBDb3B5cmlnaHQg KEMpIDIwMDEsMjAwMiwyMDAzLDIwMDQgUGhpbGlwcGUgR2VydW0gPHJwbUB4ZW5vbWFpLm9y Zz4uCisgKgorICogUlRBSS9mdXNpb24gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp c3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu c2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq IFJUQUkvZnVzaW9uIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi ZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0 aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog YWxvbmcgd2l0aCBSVEFJL2Z1c2lvbjsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0 d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMw LCBCb3N0b24sIE1BCisgKiAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2lmbmRlZiBfUlRB SV9BU01fUFBDNjRfU1lTVEVNX0gKKyNkZWZpbmUgX1JUQUlfQVNNX1BQQzY0X1NZU1RFTV9I CisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNp bmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Cisj aW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5j bHVkZSA8bGludXgvYWRlb3MuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5j bHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxhc20vcGFyYW0uaD4KKyNpbmNsdWRl IDxhc20vbW11X2NvbnRleHQuaD4KKyNpbmNsdWRlIDxydGFpX2NvbmZpZy5oPgorI2luY2x1 ZGUgPG51Y2xldXMvYXNtL2hhbC5oPgorI2luY2x1ZGUgPG51Y2xldXMvYXNtL2F0b21pYy5o PgorI2luY2x1ZGUgPG51Y2xldXMvc2hhZG93Lmg+CisKKyNpZiBBREVPU19SRUxFQVNFX05V TUJFUiA8IDB4MDIwNjA2MGYKKyNlcnJvciAiQWRlb3MgMi42cjZjMTUvcHBjIG9yIGFib3Zl IGlzIHJlcXVpcmVkIHRvIHJ1biB0aGlzIHNvZnR3YXJlOyBwbGVhc2UgdXBncmFkZS4iCisj ZXJyb3IgIlNlZSBodHRwOi8vZG93bmxvYWQuZ25hLm9yZy9hZGVvcy9wYXRjaGVzL3YyLjYv cHBjLyIKKyNlbmRpZgorCisjZGVmaW5lIG1vZHVsZV9wYXJhbV92YWx1ZShwYXJtKSAocGFy bSkKKwordHlwZWRlZiB1bnNpZ25lZCBsb25nIHNwbF90OworCisjZGVmaW5lIHNwbGhpZ2go eCkgIHJ0aGFsX2xvY2FsX2lycV9zYXZlKHgpCisjaWZkZWYgQ09ORklHX1NNUAorI2RlZmlu ZSBzcGxleGl0KHgpICBydGhhbF9sb2NhbF9pcnFfcmVzdG9yZSgoeCkgJiAxKQorI2Vsc2Ug LyogIUNPTkZJR19TTVAgKi8KKyNkZWZpbmUgc3BsZXhpdCh4KSAgcnRoYWxfbG9jYWxfaXJx X3Jlc3RvcmUoeCkKKyNlbmRpZiAvKiBDT05GSUdfU01QICovCisjZGVmaW5lIHNwbG5vbmUo KSAgIHJ0aGFsX3N0aSgpCisjZGVmaW5lIHNwbHRlc3QoKSAgIHJ0aGFsX2xvY2FsX2lycV90 ZXN0KCkKKyNkZWZpbmUgc3BsZ2V0KHgpICAgcnRoYWxfbG9jYWxfaXJxX2ZsYWdzKHgpCisj ZGVmaW5lIHNwbHN5bmMoeCkgIHJ0aGFsX2xvY2FsX2lycV9zeW5jKHgpCisKK3R5cGVkZWYg dW5zaWduZWQgbG9uZyB4bmxvY2tfdDsKKworI2RlZmluZSBYTkFSQ0hfTE9DS19VTkxPQ0tF RCAwCisKKyNpZmRlZiBDT05GSUdfU01QCisKKyNkZWZpbmUgeG5sb2NrX2dldF9pcnFzYXZl KGxvY2sseCkgICgoeCkgPSBfX3hubG9ja19nZXRfaXJxc2F2ZShsb2NrKSkKKyNkZWZpbmUg eG5sb2NrX2NsZWFyX2lycW9mZihsb2NrKSAgIHhubG9ja19wdXRfaXJxcmVzdG9yZShsb2Nr LDEpCisjZGVmaW5lIHhubG9ja19jbGVhcl9pcnFvbihsb2NrKSAgICB4bmxvY2tfcHV0X2ly cXJlc3RvcmUobG9jaywwKQorCitzdGF0aWMgaW5saW5lIHZvaWQgeG5sb2NrX2luaXQgKHhu bG9ja190ICpsb2NrKSB7CisKKyAgICAqbG9jayA9IFhOQVJDSF9MT0NLX1VOTE9DS0VEOwor fQorCitzdGF0aWMgaW5saW5lIHNwbF90IF9feG5sb2NrX2dldF9pcnFzYXZlICh4bmxvY2tf dCAqbG9jaykKKworeworICAgIGFkZW9zX2RlY2xhcmVfY3B1aWQ7CisgICAgc3BsX3QgZmxh Z3M7CisKKyAgICBydGhhbF9sb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKyAgICBhZGVvc19s b2FkX2NwdWlkKCk7CisKKyAgICBpZiAoIXRlc3RfYW5kX3NldF9iaXQoY3B1aWQsbG9jaykp CisJeworCXdoaWxlICh0ZXN0X2FuZF9zZXRfYml0KEJJVFNfUEVSX0xPTkcgLSAxLGxvY2sp KQorICAgICAgICAgICAgLyogVXNlIGEgbm9uLWxvY2tpbmcgdGVzdCBpbiB0aGUgaW5uZXIg bG9vcCwgYXMgTGludXgnZXMKKyAgICAgICAgICAgICAgIGJpdF9zcGluX2xvY2suICovCisg ICAgICAgICAgICB3aGlsZSAodGVzdF9iaXQoQklUU19QRVJfTE9ORyAtIDEsIGxvY2spKQor ICAgICAgICAgICAgICAgIGNwdV9yZWxheCgpOworCX0KKyAgICBlbHNlCisgICAgICAgIGZs YWdzIHw9IDI7CisKKyAgICByZXR1cm4gZmxhZ3M7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9p ZCB4bmxvY2tfcHV0X2lycXJlc3RvcmUgKHhubG9ja190ICpsb2NrLCBzcGxfdCBmbGFncykK KworeworICAgIGlmICghKGZsYWdzICYgMikpCisgICAgICAgIHsKKyAgICAgICAgYWRlb3Nf ZGVjbGFyZV9jcHVpZDsKKworICAgICAgICBydGhhbF9jbGkoKTsKKworICAgICAgICBhZGVv c19sb2FkX2NwdWlkKCk7CisKKyAgICAgICAgaWYgKHRlc3RfYml0KGNwdWlkLGxvY2spKQor ICAgICAgICAgICAgeworICAgICAgICAgICAgY2xlYXJfYml0KGNwdWlkLGxvY2spOworICAg ICAgICAgICAgY2xlYXJfYml0KEJJVFNfUEVSX0xPTkcgLSAxLGxvY2spOworICAgICAgICAg ICAgfQorICAgICAgICB9CisKKyAgICBydGhhbF9sb2NhbF9pcnFfcmVzdG9yZShmbGFncyAm IDEpOworfQorCisjZGVmaW5lIFhOQVJDSF9QQVNTVEhST1VHSF9JUlFTIC8qZW1wdHkqLwor CisjZWxzZSAvKiAhQ09ORklHX1NNUCAqLworCisjZGVmaW5lIHhubG9ja19pbml0KGxvY2sp ICAgICAgICAgICAgICBkbyB7IH0gd2hpbGUoMCkKKyNkZWZpbmUgeG5sb2NrX2dldF9pcnFz YXZlKGxvY2sseCkgICAgIHJ0aGFsX2xvY2FsX2lycV9zYXZlKHgpCisjZGVmaW5lIHhubG9j a19wdXRfaXJxcmVzdG9yZShsb2NrLHgpICBydGhhbF9sb2NhbF9pcnFfcmVzdG9yZSh4KQor I2RlZmluZSB4bmxvY2tfY2xlYXJfaXJxb2ZmKGxvY2spICAgICAgcnRoYWxfY2xpKCkKKyNk ZWZpbmUgeG5sb2NrX2NsZWFyX2lycW9uKGxvY2spICAgICAgIHJ0aGFsX3N0aSgpCisKKyNl bmRpZiAvKiBDT05GSUdfU01QICovCisKKyNkZWZpbmUgWE5BUkNIX05SX0NQVVMgICAgICAg ICAgICAgICBSVEhBTF9OUl9DUFVTCisKKyNkZWZpbmUgWE5BUkNIX0RFRkFVTFRfVElDSyAg ICAgICAgICAxMDAwMDAwIC8qIG5zLCBpLmUuIDFtcyAqLworI2RlZmluZSBYTkFSQ0hfSE9T VF9USUNLICAgICAgICAgICAgICgxMDAwMDAwMDAwVUwvSFopCisKKyNkZWZpbmUgWE5BUkNI X1RIUkVBRF9TVEFDS1NaIDE2Mzg0CisjZGVmaW5lIFhOQVJDSF9ST09UX1NUQUNLU1ogICAw CS8qIE9ubHkgYSBwbGFjZWhvbGRlciAtLSBubyBzdGFjayAqLworCisjZGVmaW5lIFhOQVJD SF9QUk9NUFQgIlJUQUk6ICIKKyNkZWZpbmUgeG5hcmNoX2xvZ2luZm8oZm10LGFyZ3MuLi4p ICBwcmludGsoS0VSTl9JTkZPIFhOQVJDSF9QUk9NUFQgZm10LCAjI2FyZ3MpCisjZGVmaW5l IHhuYXJjaF9sb2d3YXJuKGZtdCxhcmdzLi4uKSAgcHJpbnRrKEtFUk5fV0FSTklORyBYTkFS Q0hfUFJPTVBUIGZtdCwgIyNhcmdzKQorI2RlZmluZSB4bmFyY2hfbG9nZXJyKGZtdCxhcmdz Li4uKSAgIHByaW50ayhLRVJOX0VSUiBYTkFSQ0hfUFJPTVBUIGZtdCwgIyNhcmdzKQorI2Rl ZmluZSB4bmFyY2hfcHJpbnRmKGZtdCxhcmdzLi4uKSAgIHByaW50ayhLRVJOX0lORk8gWE5B UkNIX1BST01QVCBmbXQsICMjYXJncykKKworI2RlZmluZSB4bmFyY2hfdWxsbW9kKHVsbCx1 bGQscmVtKSAgICh7IHhuYXJjaF91bGxkaXYodWxsLHVsZCxyZW0pOyAoKnJlbSk7IH0pCisj ZGVmaW5lIHhuYXJjaF91bGRpdih1bGwsIGQpICAgICAgICAgcnRoYWxfdWxkaXZyZW0odWxs LCBkLCBOVUxMKQorI2RlZmluZSB4bmFyY2hfdWxtb2QodWxsLCBkKSAgICAgICAgICh7IHVf bG9uZyBfcmVtOyAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHJ0aGFsX3VsZGl2cmVtKHVsbCxkLCZfcmVtKTsgX3JlbTsg fSkKKworI2RlZmluZSB4bmFyY2hfdWxsbXVsICAgICAgICAgICAgICAgIHJ0aGFsX3VsbG11 bAorI2RlZmluZSB4bmFyY2hfdWxkaXZyZW0gICAgICAgICAgICAgIHJ0aGFsX3VsZGl2cmVt CisjZGVmaW5lIHhuYXJjaF91bGxkaXYgICAgICAgICAgICAgICAgcnRoYWxfdWxsZGl2Cisj ZGVmaW5lIHhuYXJjaF9pbXVsZGl2ICAgICAgICAgICAgICAgcnRoYWxfaW11bGRpdgorI2Rl ZmluZSB4bmFyY2hfbGxpbWQgICAgICAgICAgICAgICAgIHJ0aGFsX2xsaW1kCisjZGVmaW5l IHhuYXJjaF9nZXRfY3B1X3RzYyAgICAgICAgICAgcnRoYWxfcmR0c2MKKwordHlwZWRlZiBj cHVtYXNrX3QgeG5hcmNoX2NwdW1hc2tfdDsKKyNpZmRlZiBDT05GSUdfU01QCisjZGVmaW5l IHhuYXJjaF9jcHVfb25saW5lX21hcCAgICAgICAgICAgIGNwdV9vbmxpbmVfbWFwCisjZWxz ZQorI2RlZmluZSB4bmFyY2hfY3B1X29ubGluZV9tYXAgICAgICAgICAgICBjcHVtYXNrX29m X2NwdSgwKQorI2VuZGlmCisjZGVmaW5lIHhuYXJjaF9udW1fb25saW5lX2NwdXMoKSAgICAg ICAgIG51bV9vbmxpbmVfY3B1cygpCisjZGVmaW5lIHhuYXJjaF9jcHVfc2V0KGNwdSwgbWFz aykgICAgICAgIGNwdV9zZXQoY3B1LCBtYXNrKQorI2RlZmluZSB4bmFyY2hfY3B1X2NsZWFy KGNwdSwgbWFzaykgICAgICBjcHVfY2xlYXIoY3B1LCBtYXNrKQorI2RlZmluZSB4bmFyY2hf Y3B1c19jbGVhcihtYXNrKSAgICAgICAgICBjcHVzX2NsZWFyKG1hc2spCisjZGVmaW5lIHhu YXJjaF9jcHVfaXNzZXQoY3B1LCBtYXNrKSAgICAgIGNwdV9pc3NldChjcHUsIG1hc2spCisj ZGVmaW5lIHhuYXJjaF9jcHVzX2FuZChkc3QsIHNyYzEsIHNyYzIpIGNwdXNfYW5kKGRzdCwg c3JjMSwgc3JjMikKKyNkZWZpbmUgeG5hcmNoX2NwdXNfZXF1YWwobWFzazEsIG1hc2syKSAg Y3B1c19lcXVhbChtYXNrMSwgbWFzazIpCisjZGVmaW5lIHhuYXJjaF9jcHVzX2VtcHR5KG1h c2spICAgICAgICAgIGNwdXNfZW1wdHkobWFzaykKKyNkZWZpbmUgeG5hcmNoX2NwdW1hc2tf b2ZfY3B1KGNwdSkgICAgICAgY3B1bWFza19vZl9jcHUoY3B1KQorI2RlZmluZSB4bmFyY2hf Zmlyc3RfY3B1KG1hc2spICAgICAgICAgICBmaXJzdF9jcHUobWFzaykKKyNkZWZpbmUgWE5B UkNIX0NQVV9NQVNLX0FMTCAgICAgICAgICAgICAgQ1BVX01BU0tfQUxMCisKK3N0cnVjdCB4 bnRocmVhZDsKK3N0cnVjdCB4bmhlYXA7CitzdHJ1Y3QgdGFza19zdHJ1Y3Q7CisKKyNkZWZp bmUgeG5hcmNoX3N0YWNrX3NpemUodGNiKSAgKCh0Y2IpLT5zdGFja3NpemUpCisjZGVmaW5l IHhuYXJjaF91c2VyX3Rhc2sodGNiKSAgICgodGNiKS0+dXNlcl90YXNrKQorCit0eXBlZGVm IHN0cnVjdCB4bmFyY2h0Y2IgewkvKiBQZXItdGhyZWFkIGFyY2gtZGVwZW5kZW50IGJsb2Nr ICovCisKKyAgICAvKiBLZXJuZWwgbW9kZSBzaWRlICovCisKKyNpZmRlZiBDT05GSUdfUlRB SV9IV19GUFUKKyAgICAvKiBXZSBvbmx5IGNhcmUgZm9yIGJhc2ljIEZQVSBoYW5kbGluZyBp biBrZXJuZWwtc3BhY2U7IEFsdGl2ZWMKKyAgICAgICBhbmQgU1BFIGFyZSBub3QgYXZhaWxh YmxlIHRvIGtlcm5lbC1iYXNlZCBudWNsZXVzIHRocmVhZHMuICovCisgICAgcnRoYWxfZnBl bnZfdCBmcHVlbnYgIF9fYXR0cmlidXRlX18gKChhbGlnbmVkICgxNikpKTsKKyAgICBydGhh bF9mcGVudl90ICpmcHVwOwkvKiBQb2ludGVyIHRvIHRoZSBGUFUgYmFja3VwIGFyZWEgKi8K KyAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnVzZXJfZnB1X293bmVyOworICAgIC8qIFBvaW50 ZXIgdGhlIHRoZSBGUFUgb3duZXIgaW4gdXNlcnNwYWNlOgorICAgICAgIC0gTlVMTCBmb3Ig UlQgSyB0aHJlYWRzLAorICAgICAgIC0gbGFzdF90YXNrX3VzZWRfbWF0aCBmb3IgTGludXgg VVMgdGhyZWFkcyAob25seSBjdXJyZW50IG9yIE5VTEwgd2hlbiBNUCkKKyAgICAgICAtIGN1 cnJlbnQgZm9yIFJUIFVTIHRocmVhZHMuCisgICAgKi8KKyNkZWZpbmUgeG5hcmNoX2ZwdV9w dHIodGNiKSAgICAgKCh0Y2IpLT5mcHVwKQorI2Vsc2UgLyogIUNPTkZJR19SVEFJX0hXX0ZQ VSAqLworI2RlZmluZSB4bmFyY2hfZnB1X3B0cih0Y2IpICAgICBOVUxMCisjZW5kaWYgLyog Q09ORklHX1JUQUlfSFdfRlBVICovCisKKyAgICB1bnNpZ25lZCBzdGFja3NpemU7CQkvKiBB bGlnbmVkIHNpemUgb2Ygc3RhY2sgKGJ5dGVzKSAqLworICAgIHVuc2lnbmVkIGxvbmcgKnN0 YWNrYmFzZTsJLyogU3RhY2sgc3BhY2UgKi8KKyAgICB1bnNpZ25lZCBsb25nIGtzcDsJCS8q IFNhdmVkIEtTUCBmb3Iga2VybmVsLWJhc2VkIHRocmVhZHMgKi8KKyAgICB1bnNpZ25lZCBs b25nIGtzcF92c2lkOworICAgIHVuc2lnbmVkIGxvbmcgKmtzcHA7CS8qIFBvaW50ZXIgdG8g c2F2ZWQgS1NQICgma3NwIG9yICZ1c2VyLT50aHJlYWQua3NwKSAqLworCisgICAgLyogVXNl ciBtb2RlIHNpZGUgKi8KKyAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnVzZXJfdGFzazsJLyog U2hhZG93ZWQgdXNlci1zcGFjZSB0YXNrICovCisgICAgc3RydWN0IHRhc2tfc3RydWN0ICph Y3RpdmVfdGFzazsJLyogQWN0aXZlIHVzZXItc3BhY2UgdGFzayAqLworCisgICAgLyogSW5p dCBibG9jayAqLworICAgIHN0cnVjdCB4bnRocmVhZCAqc2VsZjsKKyAgICBpbnQgaW1hc2s7 CisgICAgY29uc3QgY2hhciAqbmFtZTsKKyAgICB2b2lkICgqZW50cnkpKHZvaWQgKmNvb2tp ZSk7CisgICAgdm9pZCAqY29va2llOworCit9IHhuYXJjaHRjYl90OworCit0eXBlZGVmIHN0 cnVjdCB4bmFyY2hfZmx0aW5mbyB7CisKKyAgICBzdHJ1Y3QgcHRfcmVncyAqcmVnczsKKwor fSB4bmFyY2hfZmx0aW5mb190OworCisjZGVmaW5lIHhuYXJjaF9mYXVsdF90cmFwKGZpKSAg KCh1bnNpZ25lZCBpbnQpKGZpKS0+cmVncy0+dHJhcCkKKyNkZWZpbmUgeG5hcmNoX2ZhdWx0 X2NvZGUoZmkpICAoKGZpKS0+cmVncy0+ZGFyKQorI2RlZmluZSB4bmFyY2hfZmF1bHRfcGMo ZmkpICAgICgoZmkpLT5yZWdzLT5uaXApCisKK3R5cGVkZWYgc3RydWN0IHhuYXJjaF9oZWFw Y2IgeworCisgICAgYXRvbWljX3QgbnVtYXBzOwkvKiAjIG9mIGFjdGl2ZSB1c2VyLXNwYWNl IG1hcHBpbmdzLiAqLworCisgICAgaW50IGttZmxhZ3M7CS8qIEtlcm5lbCBtZW1vcnkgZmxh Z3MgKDAgaWYgdm1hbGxvYygpKS4gKi8KKworICAgIHZvaWQgKmhlYXBiYXNlOwkvKiBTaGFy ZWQgaGVhcCBtZW1vcnkgYmFzZS4gKi8KKworfSB4bmFyY2hfaGVhcGNiX3Q7CisKKyNpZmRl ZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworc3RhdGljIGlubGluZSBs b25nIGxvbmcgeG5hcmNoX3RzY190b19ucyAobG9uZyBsb25nIHRzKSB7CisgICAgcmV0dXJu IHhuYXJjaF9sbGltZCh0cywxMDAwMDAwMDAwLFJUSEFMX0NQVV9GUkVRKTsKK30KKworc3Rh dGljIGlubGluZSBsb25nIGxvbmcgeG5hcmNoX25zX3RvX3RzYyAobG9uZyBsb25nIG5zKSB7 CisgICAgcmV0dXJuIHhuYXJjaF9sbGltZChucyxSVEhBTF9DUFVfRlJFUSwxMDAwMDAwMDAw KTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxvbmcgeG5hcmNoX2dldF9j cHVfdGltZSAodm9pZCkgeworICAgIHJldHVybiB4bmFyY2hfdHNjX3RvX25zKHhuYXJjaF9n ZXRfY3B1X3RzYygpKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxvbmcg eG5hcmNoX2dldF9jcHVfZnJlcSAodm9pZCkgeworICAgIHJldHVybiBSVEhBTF9DUFVfRlJF UTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCB4bmFyY2hfY3VycmVudF9jcHUgKHZv aWQpIHsKKyAgICByZXR1cm4gYWRlb3NfcHJvY2Vzc29yX2lkKCk7Cit9CisKK3N0YXRpYyBp bmxpbmUgdm9pZCAqeG5hcmNoX3N5c2FsbG9jICh1X2xvbmcgYnl0ZXMpCisKK3sKKyNpZiAw CS8qIEZJWE1FOiBsaWtlbHkgb24tZGVtYW5kIG1hcHBpbmcgYnVnIGhlcmUgKi8KKyAgICBp ZiAoYnl0ZXMgPj0gMTI4KjEwMjQpCisJcmV0dXJuIHZtYWxsb2MoYnl0ZXMpOworI2VuZGlm CisKKyAgICByZXR1cm4ga21hbGxvYyhieXRlcyxHRlBfS0VSTkVMKTsKK30KKworc3RhdGlj IGlubGluZSB2b2lkIHhuYXJjaF9zeXNmcmVlICh2b2lkICpjaHVuaywgdV9sb25nIGJ5dGVz KQorCit7CisjaWYgMAkvKiBGSVhNRTogbGlrZWx5IG9uLWRlbWFuZCBtYXBwaW5nIGJ1ZyBo ZXJlICovCisgICAgaWYgKGJ5dGVzID49IDEyOCoxMDI0KQorCXZmcmVlKGNodW5rKTsKKyAg ICBlbHNlCisjZW5kaWYKKwlrZnJlZShjaHVuayk7Cit9CisKKyNkZWZpbmUgeG5hcmNoX2Rl Y2xhcmVfY3B1aWQgIGFkZW9zX2RlY2xhcmVfY3B1aWQKKyNkZWZpbmUgeG5hcmNoX2dldF9j cHUoZmxhZ3MpIGFkZW9zX2dldF9jcHUoZmxhZ3MpCisjZGVmaW5lIHhuYXJjaF9wdXRfY3B1 KGZsYWdzKSBhZGVvc19wdXRfY3B1KGZsYWdzKQorCisjZGVmaW5lIHhuYXJjaF9oYWx0KGVt c2cpIFwKK2RvIHsgXAorICAgIGFkZW9zX3NldF9wcmludGtfc3luYyhhZHBfY3VycmVudCk7 IFwKKyAgICB4bmFyY2hfbG9nZXJyKCJmYXRhbDogJXNcbiIsZW1zZyk7IFwKKyAgICBzaG93 X3N0YWNrKE5VTEwsTlVMTCk7CQlcCisgICAgZm9yICg7OykgOwkJCQlcCit9IHdoaWxlKDAp CisKKyNkZWZpbmUgeG5hcmNoX2FsbG9jX3N0YWNrIHhubWFsbG9jCisjZGVmaW5lIHhuYXJj aF9mcmVlX3N0YWNrICB4bmZyZWUKKworc3RhdGljIGlubGluZSBpbnQgeG5hcmNoX3NldGlt YXNrIChpbnQgaW1hc2spCisKK3sKKyAgICBzcGxfdCBzOworICAgIHNwbGhpZ2gocyk7Cisg ICAgc3BsZXhpdCghIWltYXNrKTsKKyAgICByZXR1cm4gISFzOworfQorCisjaWZkZWYgWEVO T19JTlRSX01PRFVMRQorCitzdGF0aWMgaW5saW5lIGludCB4bmFyY2hfaG9va19pcnEgKHVu c2lnbmVkIGlycSwKKwkJCQkgICB2b2lkICgqaGFuZGxlcikodW5zaWduZWQgaXJxLAorCQkJ CQkJICAgdm9pZCAqY29va2llKSwKKwkJCQkgICB2b2lkICpjb29raWUpCit7CisgICAgcmV0 dXJuIHJ0aGFsX3JlcXVlc3RfaXJxKGlycSxoYW5kbGVyLGNvb2tpZSk7Cit9CisKK3N0YXRp YyBpbmxpbmUgaW50IHhuYXJjaF9yZWxlYXNlX2lycSAodW5zaWduZWQgaXJxKSB7CisKKyAg ICByZXR1cm4gcnRoYWxfcmVsZWFzZV9pcnEoaXJxKTsKK30KKworc3RhdGljIGlubGluZSBp bnQgeG5hcmNoX2VuYWJsZV9pcnEgKHVuc2lnbmVkIGlycSkKKworeworICAgIHJldHVybiBy dGhhbF9lbmFibGVfaXJxKGlycSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHhuYXJjaF9k aXNhYmxlX2lycSAodW5zaWduZWQgaXJxKQorCit7CisgICAgcmV0dXJuIHJ0aGFsX2Rpc2Fi bGVfaXJxKGlycSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB4bmFyY2hfY2hhaW5faXJx ICh1bnNpZ25lZCBpcnEpCisKK3sKKyAgICBydGhhbF9wZW5kX2xpbnV4X2lycShpcnEpOwor fQorCitzdGF0aWMgaW5saW5lIHZvaWQgeG5hcmNoX3JlbGF5X3RpY2sgKHZvaWQpCisKK3sK KyAgICBydGhhbF9wZW5kX2xpbnV4X2lycShBREVPU19USU1FUl9WSVJRKTsKK30KKworc3Rh dGljIGlubGluZSBjcHVtYXNrX3QgeG5hcmNoX3NldF9pcnFfYWZmaW5pdHkgKHVuc2lnbmVk IGlycSwKKwkJCQkJCSB4bmFyY2hfY3B1bWFza190IGFmZmluaXR5KQoreworICAgIHJldHVy biBhZGVvc19zZXRfaXJxX2FmZmluaXR5KGlycSxhZmZpbml0eSk7Cit9CisKKyNlbmRpZiAv KiBYRU5PX0lOVFJfTU9EVUxFICovCisKKyNpZmRlZiBYRU5PX1BPRF9NT0RVTEUKKwordm9p ZCB4bnBvZF93ZWxjb21lX3RocmVhZChzdHJ1Y3QgeG50aHJlYWQgKik7CisKK3ZvaWQgeG5w b2RfZGVsZXRlX3RocmVhZChzdHJ1Y3QgeG50aHJlYWQgKik7CisKK3N0YXRpYyBpbmxpbmUg aW50IHhuYXJjaF9zdGFydF90aW1lciAodW5zaWduZWQgbG9uZyBucywKKwkJCQkgICAgICB2 b2lkICgqdGlja2hhbmRsZXIpKHZvaWQpKQoreworICAgIHJldHVybiBydGhhbF9yZXF1ZXN0 X3RpbWVyKHRpY2toYW5kbGVyLG5zKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHhuYXJj aF9sZWF2ZV9yb290ICh4bmFyY2h0Y2JfdCAqcm9vdGNiKQorCit7CisgICAgYWRlb3NfZGVj bGFyZV9jcHVpZDsKKworICAgIGFkZW9zX2xvYWRfY3B1aWQoKTsKKworICAgIC8qIHJ0aGFs X2NwdV9yZWFsdGltZSBpcyBvbmx5IHRlc3RlZCBmb3IgdGhlIGN1cnJlbnQgcHJvY2Vzc29y LAorICAgICAgIGFuZCBhbHdheXMgaW5zaWRlIGEgY3JpdGljYWwgc2VjdGlvbi4gKi8KKyAg ICBfX3NldF9iaXQoY3B1aWQsJnJ0aGFsX2NwdV9yZWFsdGltZSk7CisgICAgLyogUmVtZW1i ZXIgdGhlIHByZWVtcHRlZCBMaW51eCB0YXNrIHBvaW50ZXIuICovCisgICAgcm9vdGNiLT51 c2VyX3Rhc2sgPSByb290Y2ItPmFjdGl2ZV90YXNrID0gcnRoYWxfZ2V0X2N1cnJlbnQoY3B1 aWQpOworI2lmZGVmIENPTkZJR19SVEFJX0hXX0ZQVQorICAgIHJvb3RjYi0+dXNlcl9mcHVf b3duZXIgPSBydGhhbF9nZXRfZnB1X293bmVyKHJvb3RjYi0+dXNlcl90YXNrKTsKKyAgICAv KiBTbyB0aGF0IHhuYXJjaF9zYXZlX2ZwdSgpIHdpbGwgb3BlcmF0ZSBvbiB0aGUgcmlnaHQg RlBVIGFyZWEuICovCisgICAgcm9vdGNiLT5mcHVwID0gKHJvb3RjYi0+dXNlcl9mcHVfb3du ZXIKKyAgICAgICAgICAgICAgICAgICAgPyAocnRoYWxfZnBlbnZfdCAqKSZyb290Y2ItPnVz ZXJfZnB1X293bmVyLT50aHJlYWQuZnByWzBdCisgICAgICAgICAgICAgICAgICAgIDogTlVM TCk7CisjZW5kaWYgLyogQ09ORklHX1JUQUlfSFdfRlBVICovCit9CisKK3N0YXRpYyBpbmxp bmUgdm9pZCB4bmFyY2hfZW50ZXJfcm9vdCAoeG5hcmNodGNiX3QgKnJvb3RjYikgeworICAg IF9fY2xlYXJfYml0KHhuYXJjaF9jdXJyZW50X2NwdSgpLCZydGhhbF9jcHVfcmVhbHRpbWUp OworfQorCisvKiBmcm9tIGFzbS9tbXVfY29udGV4dC5oICovCitzdGF0aWMgaW5saW5lIHZv aWQgeG5hcmNoX3N3aXRjaF90byAoeG5hcmNodGNiX3QgKm91dF90Y2IsCisJCQkJICAgICB4 bmFyY2h0Y2JfdCAqaW5fdGNiKQoreworICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldiA9 IG91dF90Y2ItPmFjdGl2ZV90YXNrOworICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqbmV4dCA9 IGluX3RjYi0+dXNlcl90YXNrOworICAgIAorICAgIGluX3RjYi0+YWN0aXZlX3Rhc2sgPSBu ZXh0ID86IHByZXY7CisKKyAgICBpZiAobmV4dCAmJiBuZXh0ICE9IHByZXYpIC8qIFN3aXRj aCB0byBuZXcgdXNlci1zcGFjZSB0aHJlYWQ/ICovCisJeworCXN0cnVjdCBtbV9zdHJ1Y3Qg Km1tID0gbmV4dC0+YWN0aXZlX21tOworCisJLyogU3dpdGNoIHRoZSBtbSBjb250ZXh0Liov CisJCisjaWZkZWYgQ09ORklHX0FMVElWRUMKKwkvKiBEb24ndCByZWx5IG9uIEZUUiBmaXh1 cHMgLS0KKwkgICB0aGV5IGRvbid0IHdvcmsgcHJvcGVybHkgaW4gb3VyIGNvbnRleHQuICov CisJaWYgKGN1cl9jcHVfc3BlY1swXS0+Y3B1X2ZlYXR1cmVzICYgQ1BVX0ZUUl9BTFRJVkVD KSB7CisJICAgIGFzbSB2b2xhdGlsZSAoCisJCSJkc3NhbGw7XG4iCisJCTogOiApOworCX0K KyNlbmRpZiAvKiBDT05GSUdfQUxUSVZFQyAqLworCisJaWYgKCFjcHVfaXNzZXQoc21wX3By b2Nlc3Nvcl9pZCgpLCBtbS0+Y3B1X3ZtX21hc2spKSB7CisJCWNwdV9zZXQoc21wX3Byb2Nl c3Nvcl9pZCgpLCBtbS0+Y3B1X3ZtX21hc2spOworCX0KKworCWlmIChjdXJfY3B1X3NwZWMt PmNwdV9mZWF0dXJlcyAmIENQVV9GVFJfU0xCKSB7CisJCXN3aXRjaF9zbGIobmV4dCwgbW0p OworCX0KKwllbHNlIHsKKwkJc3dpdGNoX3N0YWIobmV4dCwgbW0pOworCX0KKworCWZsdXNo X3RsYl9wZW5kaW5nKCk7CisKKyAgICAgICAgX3N3aXRjaCgmcHJldi0+dGhyZWFkLCAmbmV4 dC0+dGhyZWFkKTsKKworCWJhcnJpZXIoKTsKKwl9CisgICAgZWxzZSB7CisgICAgICAgIC8q IEtlcm5lbC10by1rZXJuZWwgY29udGV4dCBzd2l0Y2guICovCisJcnRoYWxfc3dpdGNoX2Nv bnRleHQob3V0X3RjYi0+a3NwcCxpbl90Y2ItPmtzcHApOworICAgIH0KK30KKworc3RhdGlj IGlubGluZSB2b2lkIHhuYXJjaF9maW5hbGl6ZV9hbmRfc3dpdGNoICh4bmFyY2h0Y2JfdCAq ZGVhZF90Y2IsCisJCQkJCSAgICAgICB4bmFyY2h0Y2JfdCAqbmV4dF90Y2IpCit7CisgICAg eG5hcmNoX3N3aXRjaF90byhkZWFkX3RjYixuZXh0X3RjYik7Cit9CisKK3N0YXRpYyBpbmxp bmUgdm9pZCB4bmFyY2hfZmluYWxpemVfbm9fc3dpdGNoICh4bmFyY2h0Y2JfdCAqZGVhZF90 Y2IpCisKK3sKKyAgICAvKiBFbXB0eSAqLworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgeG5h cmNoX2luaXRfcm9vdF90Y2IgKHhuYXJjaHRjYl90ICp0Y2IsCisJCQkJCSBzdHJ1Y3QgeG50 aHJlYWQgKnRocmVhZCwKKwkJCQkJIGNvbnN0IGNoYXIgKm5hbWUpCit7CisgICAgdGNiLT51 c2VyX3Rhc2sgPSBjdXJyZW50OworICAgIHRjYi0+YWN0aXZlX3Rhc2sgPSBOVUxMOworICAg IHRjYi0+a3NwID0gMDsKKyAgICB0Y2ItPmtzcHAgPSAmdGNiLT5rc3A7CisjaWZkZWYgQ09O RklHX1JUQUlfSFdfRlBVCisgICAgdGNiLT51c2VyX2ZwdV9vd25lciA9IE5VTEw7CisgICAg dGNiLT5mcHVwID0gTlVMTDsKKyNlbmRpZiAvKiBDT05GSUdfUlRBSV9IV19GUFUgKi8KKyAg ICB0Y2ItPmVudHJ5ID0gTlVMTDsKKyAgICB0Y2ItPmNvb2tpZSA9IE5VTEw7CisgICAgdGNi LT5zZWxmID0gdGhyZWFkOworICAgIHRjYi0+aW1hc2sgPSAwOworICAgIHRjYi0+bmFtZSA9 IG5hbWU7Cit9CisKK2FzbWxpbmthZ2Ugc3RhdGljIHZvaWQgeG5hcmNoX3RocmVhZF90cmFt cG9saW5lICh4bmFyY2h0Y2JfdCAqdGNiKQorCit7CisgICAgcnRoYWxfbG9jYWxfaXJxX3Jl c3RvcmUoISF0Y2ItPmltYXNrKTsKKyAgICB4bnBvZF93ZWxjb21lX3RocmVhZCh0Y2ItPnNl bGYpOworICAgIHRjYi0+ZW50cnkodGNiLT5jb29raWUpOworICAgIHhucG9kX2RlbGV0ZV90 aHJlYWQodGNiLT5zZWxmKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHhuYXJjaF9pbml0 X3RocmVhZCAoeG5hcmNodGNiX3QgKnRjYiwKKwkJCQkgICAgICAgdm9pZCAoKmVudHJ5KSh2 b2lkICopLAorCQkJCSAgICAgICB2b2lkICpjb29raWUsCisJCQkJICAgICAgIGludCBpbWFz aywKKwkJCQkgICAgICAgc3RydWN0IHhudGhyZWFkICp0aHJlYWQsCisJCQkJICAgICAgIGNo YXIgKm5hbWUpCit7CisgICAgdW5zaWduZWQgbG9uZyAqa3NwLCBmbGFnczsKKworICAgIGFk ZW9zX2h3X2xvY2FsX2lycV9mbGFncyhmbGFncyk7CisKKyAgICAqdGNiLT5zdGFja2Jhc2Ug PSAwOworICAgIGtzcCA9ICh1bnNpZ25lZCBsb25nICopKCgoKHVuc2lnbmVkIGxvbmcpdGNi LT5zdGFja2Jhc2UgKyB0Y2ItPnN0YWNrc2l6ZSAtIDB4MTApICYgfjB4ZikgLSBSVEhBTF9T V0lUQ0hfRlJBTUVfU0laRSk7CisgICAgdGNiLT5rc3AgPSAodW5zaWduZWQgbG9uZylrc3Ag LSBTVEFDS19GUkFNRV9PVkVSSEVBRDsKKyAgICBrc3BbMTldID0gKHVuc2lnbmVkIGxvbmcp dGNiOyAvKiByMyAqLworICAgIGtzcFsyNV0gPSAodW5zaWduZWQgbG9uZykmeG5hcmNoX3Ro cmVhZF90cmFtcG9saW5lOyAvKiBsciAqLworICAgIGtzcFsyNl0gPSBmbGFncyAmIH4oTVNS X0VFIHwgTVNSX0ZQKTsgLyogbXNyICovCisKKyAgICB0Y2ItPmVudHJ5ID0gZW50cnk7Cisg ICAgdGNiLT5jb29raWUgPSBjb29raWU7CisgICAgdGNiLT5zZWxmID0gdGhyZWFkOworICAg IHRjYi0+aW1hc2sgPSBpbWFzazsKKyAgICB0Y2ItPm5hbWUgPSBuYW1lOworfQorCitzdGF0 aWMgaW5saW5lIHZvaWQgeG5hcmNoX2VuYWJsZV9mcHUgKHhuYXJjaHRjYl90ICpjdXJyZW50 X3RjYikKKworeworI2lmZGVmIENPTkZJR19SVEFJX0hXX0ZQVQorICAgaWYoIWN1cnJlbnRf dGNiLT51c2VyX3Rhc2spCisgICAgICAgIHJ0aGFsX2VuYWJsZV9mcHUoKTsKKyNlbmRpZiAv KiBDT05GSUdfUlRBSV9IV19GUFUgKi8KK30KKworc3RhdGljIGlubGluZSB2b2lkIHhuYXJj aF9pbml0X2ZwdSAoeG5hcmNodGNiX3QgKnRjYikKKworeworI2lmZGVmIENPTkZJR19SVEFJ X0hXX0ZQVQorICAgIC8qIEluaXRpYWxpemUgdGhlIEZQVSBmb3IgYW4gZW1lcmdpbmcga2Vy bmVsLWJhc2VkIFJUIHRocmVhZC4gVGhpcworICAgICAgIG11c3QgYmUgcnVuIG9uIGJlaGFs ZiBvZiB0aGUgZW1lcmdpbmcgdGhyZWFkLiAqLworICAgIG1lbXNldCgmdGNiLT5mcHVlbnYs MCxzaXplb2YodGNiLT5mcHVlbnYpKTsKKyAgICBydGhhbF9pbml0X2ZwdSgmdGNiLT5mcHVl bnYpOworI2VuZGlmIC8qIENPTkZJR19SVEFJX0hXX0ZQVSAqLworfQorCitzdGF0aWMgaW5s aW5lIHZvaWQgeG5hcmNoX3NhdmVfZnB1ICh4bmFyY2h0Y2JfdCAqdGNiKQorCit7CisjaWZk ZWYgQ09ORklHX1JUQUlfSFdfRlBVCisgICAgaWYodGNiLT5mcHVwKQorICAgICAgICB7Cisg ICAgICAgIHJ0aGFsX3NhdmVfZnB1KHRjYi0+ZnB1cCk7CisKKyAgICAgICAgaWYodGNiLT51 c2VyX2ZwdV9vd25lciAmJiB0Y2ItPnVzZXJfZnB1X293bmVyLT50aHJlYWQucmVncykKKyAg ICAgICAgICAgIHRjYi0+dXNlcl9mcHVfb3duZXItPnRocmVhZC5yZWdzLT5tc3IgJj0gfk1T Ul9GUDsKKyAgICAgICAgfSAgIAorCisjZW5kaWYgLyogQ09ORklHX1JUQUlfSFdfRlBVICov Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB4bmFyY2hfcmVzdG9yZV9mcHUgKHhuYXJjaHRj Yl90ICp0Y2IpCisKK3sKKyNpZmRlZiBDT05GSUdfUlRBSV9IV19GUFUKKyAgICBpZih0Y2It PmZwdXApCisgICAgICAgIHsKKyAgICAgICAgcnRoYWxfcmVzdG9yZV9mcHUodGNiLT5mcHVw KTsKKworICAgICAgICBpZih0Y2ItPnVzZXJfZnB1X293bmVyICYmIHRjYi0+dXNlcl9mcHVf b3duZXItPnRocmVhZC5yZWdzKQorICAgICAgICAgICAgdGNiLT51c2VyX2ZwdV9vd25lci0+ dGhyZWFkLnJlZ3MtPm1zciB8PSBNU1JfRlA7CisgICAgICAgIH0gICAKKworICAgIC8qIEZJ WE1FOiBXZSByZXN0b3JlIEZQVSAiYXMgaXQgd2FzIiB3aGVuIFJUQUkgcHJlZW1wdGVkIExp bnV4LCB3aGVyZWFzIHdlCisgICAgICAgY291bGQgYmUgbXVjaCBsYXppZXIuICovCisgICAg aWYodGNiLT51c2VyX3Rhc2spCisgICAgICAgIHJ0aGFsX2Rpc2FibGVfZnB1KCk7CisKKyNl bmRpZiAvKiBDT05GSUdfUlRBSV9IV19GUFUgKi8KK30KKworI2lmZGVmIENPTkZJR19TTVAK Kworc3RhdGljIGlubGluZSBpbnQgeG5hcmNoX3NlbmRfaXBpICh4bmFyY2hfY3B1bWFza190 IGNwdW1hc2spIHsKKworICAgIHJldHVybiBhZGVvc19zZW5kX2lwaShBREVPU19TRVJWSUNF X0lQSTAsIGNwdW1hc2spOworfQorCitzdGF0aWMgaW5saW5lIGludCB4bmFyY2hfaG9va19p cGkgKHZvaWQgKCpoYW5kbGVyKSh2b2lkKSkKKworeworICAgIHJldHVybiBhZGVvc192aXJ0 dWFsaXplX2lycV9mcm9tKCZydGhhbF9kb21haW4sCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgQURFT1NfU0VSVklDRV9JUEkwLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICh2b2lkICgqKSh1bnNpZ25lZCkpIGhhbmRsZXIsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBJUElQRV9IQU5ETEVfTUFTSyk7Cit9CisKK3N0YXRp YyBpbmxpbmUgaW50IHhuYXJjaF9yZWxlYXNlX2lwaSAodm9pZCkKKworeworICAgIHJldHVy biBhZGVvc192aXJ0dWFsaXplX2lycV9mcm9tKCZydGhhbF9kb21haW4sCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgQURFT1NfU0VSVklDRV9JUEkwLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBJUElQRV9QQVNTX01BU0spOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQg eG5hcmNoX25vdGlmeV9oYWx0KHZvaWQpCisKK3sKKyAgICB1bnNpZ25lZCBsb25nIGZsYWdz ID0gYWRlb3NfY3JpdGljYWxfZW50ZXIoTlVMTCk7CisgICAgYWRlb3NfY3JpdGljYWxfZXhp dChmbGFncyk7Cit9CisKKyNlbHNlIC8qICFDT05GSUdfU01QICovCisKK3N0YXRpYyBpbmxp bmUgaW50IHhuYXJjaF9zZW5kX2lwaSAoeG5hcmNoX2NwdW1hc2tfdCBjcHVtYXNrKQorCit7 CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHhuYXJjaF9ob29rX2lw aSAodm9pZCAoKmhhbmRsZXIpKHZvaWQpKQorCit7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0 YXRpYyBpbmxpbmUgaW50IHhuYXJjaF9yZWxlYXNlX2lwaSAodm9pZCkKKworeworICAgIHJl dHVybiAwOworfQorCisjZGVmaW5lIHhuYXJjaF9ub3RpZnlfaGFsdCgpIC8qIE51bGxpZmll ZCAqLworCisjZW5kaWYgLyogQ09ORklHX1NNUCAqLworCitzdGF0aWMgaW5saW5lIHZvaWQg eG5hcmNoX25vdGlmeV9zaHV0ZG93bih2b2lkKQorCit7CisjaWZkZWYgQ09ORklHX1NNUAor ICAgIC8qIFRoZSBIQUwgbGF5ZXIgYWxzbyBzZXRzIHRoZSBzYW1lIENQVSBhZmZpbml0eSBz byB0aGF0IGJvdGgKKyAgICAgICBtb2R1bGVzIGtlZXAgdGhlaXIgZXhlY3V0aW9uIHNlcXVl bmNlIG9uIFNNUCBib3hlbi4gKi8KKyAgICBzZXRfY3B1c19hbGxvd2VkKGN1cnJlbnQsY3B1 bWFza19vZl9jcHUoMCkpOworI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KKyNpZmRlZiBDT05G SUdfUlRBSV9PUFRfRlVTSU9OCisgICAgeG5zaGFkb3dfcmVsZWFzZV9ldmVudHMoKTsKKyNl bmRpZiAvKiBDT05GSUdfUlRBSV9PUFRfRlVTSU9OICovCisgICAgLyogV2FpdCBmb3IgdGhl IGN1cnJlbnRseSBwcm9jZXNzZWQgZXZlbnRzIHRvIGRyYWluLiAqLworICAgIHNldF9jdXJy ZW50X3N0YXRlKFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKKyAgICBzY2hlZHVsZV90aW1lb3V0 KDUwKTsKKyAgICB4bmFyY2hfcmVsZWFzZV9pcGkoKTsKK30KKworc3RhdGljIGlubGluZSBp bnQgeG5hcmNoX2VzY2FsYXRlICh2b2lkKQorCit7CisgICAgZXh0ZXJuIGludCB4bmFyY2hf ZXNjYWxhdGlvbl92aXJxOworCisgICAgaWYgKGFkcF9jdXJyZW50ID09IGFkcF9yb290KQor CXsKKwlzcGxfdCBzOworCXNwbHN5bmMocyk7CisJYWRlb3NfdHJpZ2dlcl9pcnEoeG5hcmNo X2VzY2FsYXRpb25fdmlycSk7CisJc3BsZXhpdChzKTsKKwlyZXR1cm4gMTsKKwl9CisKKyAg ICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgeG5hcmNoX25vdGlmeV9yZWFkeSAodm9p ZCkKKworeworI2lmZGVmIENPTkZJR19SVEFJX09QVF9GVVNJT04KKyAgICB4bnNoYWRvd19n cmFiX2V2ZW50cygpOworI2VuZGlmIC8qIENPTkZJR19SVEFJX09QVF9GVVNJT04gKi8KK30K KworI2VuZGlmIC8qIFhFTk9fUE9EX01PRFVMRSAqLworCisjaWZkZWYgWEVOT19USFJFQURf TU9EVUxFCisKK3N0YXRpYyBpbmxpbmUgdm9pZCB4bmFyY2hfaW5pdF90Y2IgKHhuYXJjaHRj Yl90ICp0Y2IpIHsKKworICAgIHRjYi0+dXNlcl90YXNrID0gTlVMTDsKKyAgICB0Y2ItPmFj dGl2ZV90YXNrID0gTlVMTDsKKyAgICB0Y2ItPmtzcHAgPSAmdGNiLT5rc3A7CisjaWZkZWYg Q09ORklHX1JUQUlfSFdfRlBVCisgICAgdGNiLT51c2VyX2ZwdV9vd25lciA9IE5VTEw7Cisg ICAgdGNiLT5mcHVwID0gJnRjYi0+ZnB1ZW52OworI2VuZGlmIC8qIENPTkZJR19SVEFJX0hX X0ZQVSAqLworICAgIC8qIE11c3QgYmUgZm9sbG93ZWQgYnkgeG5hcmNoX2luaXRfdGhyZWFk KCkuICovCit9CisKKyNlbmRpZiAvKiBYRU5PX1RIUkVBRF9NT0RVTEUgKi8KKworI2lmZGVm IFhFTk9fU0hBRE9XX01PRFVMRQorCitzdGF0aWMgaW5saW5lIHZvaWQgeG5hcmNoX2luaXRf c2hhZG93X3RjYiAoeG5hcmNodGNiX3QgKnRjYiwKKwkJCQkJICAgc3RydWN0IHhudGhyZWFk ICp0aHJlYWQsCisJCQkJCSAgIGNvbnN0IGNoYXIgKm5hbWUpCit7CisgICAgc3RydWN0IHRh c2tfc3RydWN0ICp0YXNrID0gY3VycmVudDsKKworICAgIHRjYi0+dXNlcl90YXNrID0gdGFz azsKKyAgICB0Y2ItPmFjdGl2ZV90YXNrID0gTlVMTDsKKyAgICB0Y2ItPmtzcCA9IDA7Cisg ICAgdGNiLT5rc3BwID0gJnRhc2stPnRocmVhZC5rc3A7CisjaWZkZWYgQ09ORklHX1JUQUlf SFdfRlBVCisgICAgdGNiLT51c2VyX2ZwdV9vd25lciA9IHRhc2s7CisgICAgdGNiLT5mcHVw ID0gKHJ0aGFsX2ZwZW52X3QgKikmdGFzay0+dGhyZWFkLmZwclswXTsKKyNlbmRpZiAvKiBD T05GSUdfUlRBSV9IV19GUFUgKi8KKyAgICB0Y2ItPmVudHJ5ID0gTlVMTDsKKyAgICB0Y2It PmNvb2tpZSA9IE5VTEw7CisgICAgdGNiLT5zZWxmID0gdGhyZWFkOworICAgIHRjYi0+aW1h c2sgPSAwOworICAgIHRjYi0+bmFtZSA9IG5hbWU7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9p ZCB4bmFyY2hfZ3JhYl94aXJxcyAodm9pZCAoKmhhbmRsZXIpKHVuc2lnbmVkIGlycSkpCisK K3sKKyAgICB1bnNpZ25lZCBpcnE7CisKKyAgICBmb3IgKGlycSA9IDA7IGlycSA8IElQSVBF X05SX1hJUlFTOyBpcnErKykKKwlhZGVvc192aXJ0dWFsaXplX2lycShpcnEsCisJCQkgICAg IGhhbmRsZXIsCisJCQkgICAgIE5VTEwsCisJCQkgICAgIElQSVBFX0RZTkFNSUNfTUFTSyk7 CisKKyAgICAvKiBPbiB0aGlzIGFyY2gsIHRoZSBkZWNyZW1lbnRlciB0cmFwIGlzIG5vdCBh biBleHRlcm5hbCBJUlEgYnV0CisgICAgICAgaXQgaXMgaW5zdGVhZCBtYXBwZWQgdG8gYSB2 aXJ0dWFsIElSUSwgc28gd2UgbXVzdCBncmFiIGl0CisgICAgICAgaW5kaXZpZHVhbGx5LiAq LworCisgICAgYWRlb3NfdmlydHVhbGl6ZV9pcnEoQURFT1NfVElNRVJfVklSUSwKKwkJCSBo YW5kbGVyLAorCQkJIE5VTEwsCisJCQkgSVBJUEVfRFlOQU1JQ19NQVNLKTsKK30KKworc3Rh dGljIGlubGluZSB2b2lkIHhuYXJjaF9sb2NrX3hpcnFzIChhZG9tYWluX3QgKmFkcCwgaW50 IGNwdWlkKQorCit7CisgICAgdW5zaWduZWQgaXJxOworCisgICAgZm9yIChpcnEgPSAwOyBp cnEgPCBJUElQRV9OUl9YSVJRUzsgaXJxKyspCisJeworCXN3aXRjaCAoaXJxKQorCSAgICB7 CisjaWZkZWYgQ09ORklHX1NNUAorCSAgICBjYXNlIEFERU9TX0NSSVRJQ0FMX0lQSToKKwor CQkvKiBOZXZlciBsb2NrIG91dCB0aGlzIG9uZS4gKi8KKwkJY29udGludWU7CisjZW5kaWYg LyogQ09ORklHX1NNUCAqLworCisJICAgIGRlZmF1bHQ6CisKKwkJX19hZGVvc19sb2NrX2ly cShhZHAsY3B1aWQsaXJxKTsKKwkgICAgfQorCX0KKworICAgIF9fYWRlb3NfbG9ja19pcnEo YWRwLGNwdWlkLEFERU9TX1RJTUVSX1ZJUlEpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQg eG5hcmNoX3VubG9ja194aXJxcyAoYWRvbWFpbl90ICphZHAsIGludCBjcHVpZCkKKworewor ICAgIHVuc2lnbmVkIGlycTsKKworICAgIGZvciAoaXJxID0gMDsgaXJxIDwgSVBJUEVfTlJf WElSUVM7IGlycSsrKQorCXsKKwlzd2l0Y2ggKGlycSkKKwkgICAgeworI2lmZGVmIENPTkZJ R19TTVAKKwkgICAgY2FzZSBBREVPU19DUklUSUNBTF9JUEk6CisKKwkJY29udGludWU7Cisj ZW5kaWYgLyogQ09ORklHX1NNUCAqLworCisJICAgIGRlZmF1bHQ6CisKKwkJX19hZGVvc191 bmxvY2tfaXJxKGFkcCxpcnEpOworCSAgICB9CisJfQorCisgICAgX19hZGVvc191bmxvY2tf aXJxKGFkcCxBREVPU19USU1FUl9WSVJRKTsKK30KKworI2VuZGlmIC8qIFhFTk9fU0hBRE9X X01PRFVMRSAqLworCisjaWZkZWYgWEVOT19USU1FUl9NT0RVTEUKKworc3RhdGljIGlubGlu ZSB2b2lkIHhuYXJjaF9wcm9ncmFtX3RpbWVyX3Nob3QgKHVuc2lnbmVkIGxvbmcgZGVsYXkp IHsKKyAgICAvKiBFdmVuIHRob3VnaCBzb21lIGFyY2hpdGVjdHVyZXMgbWF5IHVzZSBhIDY0 IGJpdHMgZGVsYXkgaGVyZSwgd2UKKyAgICAgICB2b2x1bnRhcmlseSBsaW1pdCB0byAzMiBi aXRzLCA0IGJpbGxpb25zIHRpY2tzIHNob3VsZCBiZSBlbm91Z2gKKyAgICAgICBmb3Igbm93 LiBJZiBhIHRpbWVyIG5lZWRzIG1vcmUsIGEgc3B1cmlvdXMgYnV0IGhhcm1sZXNzIGNhbGwg dG8KKyAgICAgICB0aGUgdGljayBoYW5kbGVyIHdpbGwgb2NjdXIgYWZ0ZXIgNCBiaWxsaW9u cyB0aWNrcy4gU2luY2UgdGhlCisgICAgICAgdGltZWJhc2UgdmFsdWUgaXMgdXNlZCB0byBl eHByZXNzIENQVSB0aWNrcyBvbiB0aGUgUG93ZXJQQworICAgICAgIHBvcnQsIHRoZXJlIGlz IG5vIG5lZWQgdG8gcmVzY2FsZSB0aGUgZGVsYXkgdmFsdWUuICovCisgICAgcnRoYWxfc2V0 X3RpbWVyX3Nob3QoZGVsYXkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgeG5hcmNoX3N0 b3BfdGltZXIgKHZvaWQpIHsKKyAgICBydGhhbF9yZWxlYXNlX3RpbWVyKCk7Cit9CisKK3N0 YXRpYyBpbmxpbmUgaW50IHhuYXJjaF9zZW5kX3RpbWVyX2lwaSAoeG5hcmNoX2NwdW1hc2tf dCBtYXNrKQorCit7CisjaWZkZWYgQ09ORklHX1NNUAorICAgIHJldHVybiAtMTsJCS8qIEZJ WE1FICovCisjZWxzZSAvKiAhIENPTkZJR19TTVAgKi8KKyAgICByZXR1cm4gMDsKKyNlbmRp ZiAvKiBDT05GSUdfU01QICovCit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB4bmFyY2hfcmVh ZF90aW1pbmdzICh1bnNpZ25lZCBsb25nIGxvbmcgKnNob3QsCisJCQkJCXVuc2lnbmVkIGxv bmcgbG9uZyAqZGVsaXZlcnksCisJCQkJCXVuc2lnbmVkIGxvbmcgbG9uZyBkZWZ2YWwpCit7 CisjaWZkZWYgQ09ORklHX0FERU9TX1BST0ZJTElORworICAgIGludCBjcHVpZCA9IGFkZW9z X3Byb2Nlc3Nvcl9pZCgpOworICAgICpzaG90ID0gX19hZGVvc19wcm9maWxlX2RhdGFbY3B1 aWRdLmlycXNbX19hZGVvc190aWNrX2lycV0udF9oYW5kbGVkOworICAgICpkZWxpdmVyeSA9 IF9fYWRlb3NfcHJvZmlsZV9kYXRhW2NwdWlkXS5pcnFzW19fYWRlb3NfdGlja19pcnFdLnRf c3luY2VkOworI2Vsc2UgLyogIUNPTkZJR19BREVPU19QUk9GSUxJTkcgKi8KKyAgICAqc2hv dCA9IGRlZnZhbDsKKyAgICAqZGVsaXZlcnkgPSBkZWZ2YWw7CisjZW5kaWYgLyogQ09ORklH X0FERU9TX1BST0ZJTElORyAqLworfQorCisjZW5kaWYgLyogWEVOT19USU1FUl9NT0RVTEUg Ki8KKworI2lmZGVmIFhFTk9fSEVBUF9NT0RVTEUKKworI2luY2x1ZGUgPGxpbnV4L21tLmg+ CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB4bmFyY2hfaW5pdF9oZWFwY2IgKHhuYXJjaF9oZWFw Y2JfdCAqaGNiKQorCit7CisgICAgYXRvbWljX3NldCgmaGNiLT5udW1hcHMsMCk7CisgICAg aGNiLT5rbWZsYWdzID0gMDsKKyAgICBoY2ItPmhlYXBiYXNlID0gTlVMTDsKK30KKworc3Rh dGljIGlubGluZSBpbnQgeG5hcmNoX3JlbWFwX3BhZ2VfcmFuZ2Uoc3RydWN0IHZtX2FyZWFf c3RydWN0ICp2bWEsCisJCQkJCSAgdW5zaWduZWQgbG9uZyB1dmFkZHIsCisJCQkJCSAgdW5z aWduZWQgbG9uZyBwYWRkciwKKwkJCQkJICB1bnNpZ25lZCBsb25nIHNpemUsCisJCQkJCSAg cGdwcm90X3QgcHJvdCkKK3sKKyAgICByZXR1cm4gcmVtYXBfcGZuX3JhbmdlKHZtYSx1dmFk ZHIscGFkZHIgPj4gUEFHRV9TSElGVCxzaXplLHByb3QpOworfQorCisjZW5kaWYgLyogWEVO T19IRUFQX01PRFVMRSAqLworCisjaWZkZWYgWEVOT19NQUlOX01PRFVMRQorCisjaW5jbHVk ZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPG51Y2xldXMvYXNtL2NhbGlicmF0aW9uLmg+ CisKK2V4dGVybiB1X2xvbmcgbmtzY2hlZGxhdDsKKworZXh0ZXJuIHVfbG9uZyBua3RpbWVy bGF0OworCitpbnQgeG5hcmNoX2VzY2FsYXRpb25fdmlycTsKKworaW50IHhucG9kX3RyYXBf ZmF1bHQoeG5hcmNoX2ZsdGluZm9fdCAqZmx0aW5mbyk7CisKK3ZvaWQgeG5wb2Rfc2NoZWR1 bGVfaGFuZGxlcih2b2lkKTsKKworc3RhdGljIHJ0aGFsX3RyYXBfaGFuZGxlcl90IHhuYXJj aF9vbGRfdHJhcF9oYW5kbGVyOworCitzdGF0aWMgaW50IHhuYXJjaF90cmFwX2ZhdWx0IChh ZGV2aW5mb190ICpldmluZm8pCisKK3sKKyAgICB4bmFyY2hfZmx0aW5mb190IGZsdGluZm87 CisgICAgZmx0aW5mby5yZWdzID0gKHN0cnVjdCBwdF9yZWdzICopZXZpbmZvLT5ldmRhdGE7 CisgICAgcmV0dXJuIHhucG9kX3RyYXBfZmF1bHQoJmZsdGluZm8pOworfQorCit1bnNpZ25l ZCBsb25nIHhuYXJjaF9jYWxpYnJhdGVfdGltZXIgKHZvaWQpCisKK3sKKyNpZiBDT05GSUdf UlRBSV9IV19USU1FUl9MQVRFTkNZICE9IDAKKyAgICByZXR1cm4geG5hcmNoX25zX3RvX3Rz YyhDT05GSUdfUlRBSV9IV19USU1FUl9MQVRFTkNZKSA/OiAxOworI2Vsc2UgLyogQ09ORklH X1JUQUlfSFdfVElNRVJfTEFURU5DWSB1bnNwZWNpZmllZC4gKi8KKyAgICAvKiBDb21wdXRl IHRoZSB0aW1lIG5lZWRlZCB0byBwcm9ncmFtIHRoZSBkZWNyZW1lbnRlciBpbiBhcGVyaW9k aWMKKyAgICAgICBtb2RlLiBUaGUgcmV0dXJuIHZhbHVlIGlzIGV4cHJlc3NlZCBpbiB0aW1l YmFzZSB0aWNrcy4gKi8KKyAgICByZXR1cm4geG5hcmNoX25zX3RvX3RzYyhydGhhbF9jYWxp YnJhdGVfdGltZXIoKSkgPzogMTsKKyNlbmRpZiAvKiBDT05GSUdfUlRBSV9IV19USU1FUl9M QVRFTkNZICE9IDAgKi8KK30KKworaW50IHhuYXJjaF9jYWxpYnJhdGVfc2NoZWQgKHZvaWQp CisKK3sKKyAgICBua3RpbWVybGF0ID0geG5hcmNoX2NhbGlicmF0ZV90aW1lcigpOworCisg ICAgaWYgKCFua3RpbWVybGF0KQorCXJldHVybiAtRU5PREVWOworCisgICAgbmtzY2hlZGxh dCA9IHhuYXJjaF9uc190b190c2MoeG5hcmNoX2dldF9zY2hlZF9sYXRlbmN5KCkpOworCisg ICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHhuYXJjaF9pbml0ICh2b2lk KQorCit7CisgICAgaW50IGVycjsKKworI2lmZGVmIENPTkZJR19TTVAKKyAgICAvKiBUaGUg SEFMIGxheWVyIGFsc28gc2V0cyB0aGUgc2FtZSBDUFUgYWZmaW5pdHkgc28gdGhhdCBib3Ro CisgICAgICAgbW9kdWxlcyBrZWVwIHRoZWlyIGV4ZWN1dGlvbiBzZXF1ZW5jZSBvbiBTTVAg Ym94ZW4uICovCisgICAgc2V0X2NwdXNfYWxsb3dlZChjdXJyZW50LGNwdW1hc2tfb2ZfY3B1 KDApKTsKKyNlbmRpZiAvKiBDT05GSUdfU01QICovCisKKyAgICBlcnIgPSB4bmFyY2hfY2Fs aWJyYXRlX3NjaGVkKCk7CisKKyAgICBpZiAoZXJyKQorCXJldHVybiBlcnI7CisKKyAgICB4 bmFyY2hfZXNjYWxhdGlvbl92aXJxID0gYWRlb3NfYWxsb2NfaXJxKCk7CisKKyAgICBpZiAo eG5hcmNoX2VzY2FsYXRpb25fdmlycSA9PSAwKQorCXJldHVybiAtRU5PU1lTOworCisgICAg YWRlb3NfdmlydHVhbGl6ZV9pcnFfZnJvbSgmcnRoYWxfZG9tYWluLAorCQkJICAgICAgeG5h cmNoX2VzY2FsYXRpb25fdmlycSwKKwkJCSAgICAgICh2b2lkICgqKSh1bnNpZ25lZCkpJnhu cG9kX3NjaGVkdWxlX2hhbmRsZXIsCisJCQkgICAgICBOVUxMLAorCQkJICAgICAgSVBJUEVf SEFORExFX01BU0spOworCisgICAgeG5hcmNoX29sZF90cmFwX2hhbmRsZXIgPSBydGhhbF9z ZXRfdHJhcF9oYW5kbGVyKCZ4bmFyY2hfdHJhcF9mYXVsdCk7CisKKyNpZmRlZiBDT05GSUdf UlRBSV9PUFRfRlVTSU9OCisgICAgZXJyID0geG5zaGFkb3dfbW91bnQoKTsKKyNlbmRpZiAv KiBDT05GSUdfUlRBSV9PUFRfRlVTSU9OICovCisKKyAgICBpZiAoZXJyKQorCXsKKwlydGhh bF9zZXRfdHJhcF9oYW5kbGVyKHhuYXJjaF9vbGRfdHJhcF9oYW5kbGVyKTsKKyAgICAgICAg YWRlb3NfZnJlZV9pcnEoeG5hcmNoX2VzY2FsYXRpb25fdmlycSk7CisJfQorCisgICAgcmV0 dXJuIGVycjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHhuYXJjaF9leGl0ICh2b2lkKQor Cit7CisjaWZkZWYgQ09ORklHX1JUQUlfT1BUX0ZVU0lPTgorICAgIHhuc2hhZG93X2NsZWFu dXAoKTsKKyNlbmRpZiAvKiBDT05GSUdfUlRBSV9PUFRfRlVTSU9OICovCisgICAgcnRoYWxf c2V0X3RyYXBfaGFuZGxlcih4bmFyY2hfb2xkX3RyYXBfaGFuZGxlcik7CisgICAgYWRlb3Nf ZnJlZV9pcnEoeG5hcmNoX2VzY2FsYXRpb25fdmlycSk7Cit9CisKKyNlbmRpZiAvKiBYRU5P X01BSU5fTU9EVUxFICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKy8q IERhc2hib2FyZCBhbmQgZ3JhcGggY29udHJvbC4gKi8KKyNkZWZpbmUgWE5BUkNIX0RFQ0xf RElTUExBWV9DT05URVhUKCk7CisjZGVmaW5lIHhuYXJjaF9pbml0X2Rpc3BsYXlfY29udGV4 dChvYmopCisjZGVmaW5lIHhuYXJjaF9jcmVhdGVfZGlzcGxheShvYmosbmFtZSx0YWcpCisj ZGVmaW5lIHhuYXJjaF9kZWxldGVfZGlzcGxheShvYmopCisjZGVmaW5lIHhuYXJjaF9wb3N0 X2dyYXBoKG9iaixzdGF0ZSkKKyNkZWZpbmUgeG5hcmNoX3Bvc3RfZ3JhcGhfaWYob2JqLHN0 YXRlLGNvbmQpCisKKyNlbHNlIC8qICFfX0tFUk5FTF9fICovCisKKyNpbmNsdWRlIDxudWNs ZXVzL3N5c3RlbS5oPgorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyog IV9SVEFJX0FTTV9QUEM2NF9TWVNURU1fSCAqLwpkaWZmIC1OcnUgZnVzaW9uLTAuNy4xL2lu Y2x1ZGUvbnVjbGV1cy9hc20tcHBjNjQvdWFydC5oIGZ1c2lvbi0wLjcuMS1wcGM2NC1kZXZl bC9pbmNsdWRlL251Y2xldXMvYXNtLXBwYzY0L3VhcnQuaAotLS0gZnVzaW9uLTAuNy4xL2lu Y2x1ZGUvbnVjbGV1cy9hc20tcHBjNjQvdWFydC5oCTE5NzAtMDEtMDEgMDI6MDA6MDAuMDAw MDAwMDAwICswMjAwCisrKyBmdXNpb24tMC43LjEtcHBjNjQtZGV2ZWwvaW5jbHVkZS9udWNs ZXVzL2FzbS1wcGM2NC91YXJ0LmgJMjAwNS0wMy0wNiAyMTowNDozMy4wMDAwMDAwMDAgKzAy MDAKQEAgLTAsMCArMSwzNSBAQAorLyoqDQorICogQGZpbGUNCisgKiBUaGlzIGZpbGUgaXMg cGFydCBvZiB0aGUgUlRBSSBwcm9qZWN0Lg0KKyAqDQorICogQG5vdGUgQ29weXJpZ2h0IChD KSAyMDA0IFBoaWxpcHBlIEdlcnVtIDxycG1AeGVub21haS5vcmc+IA0KKyAqDQorICogVGhp cyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu ZC9vcg0KKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGFzDQorICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlDQorICogTGljZW5zZSwgb3Ig KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4NCisgKg0KKyAqIFRoaXMgcHJv Z3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs LA0KKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs aWVkIHdhcnJhbnR5IG9mDQorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQ0KKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQorICoNCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQ0KKyAqIGFs b25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3 YXJlDQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMw LCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4NCisgKi8NCisNCisjaWZuZGVmIF9SVEFJ X0FTTV9QUENfVUFSVF9IDQorI2RlZmluZSBfUlRBSV9BU01fUFBDX1VBUlRfSA0KKw0KKyNp bmNsdWRlIDxsaW51eC9jb25maWcuaD4NCisNCisjaWYgZGVmaW5lZChDT05GSUdfU0FORFBP SU5UKQ0KKw0KKyNkZWZpbmUgVFRZUzAgIHsgMHhmZTAwMDNmOCwgNCB9DQorI2RlZmluZSBU VFlTMSAgeyAweGZlMDAwMmY4LCAzIH0NCisjZWxzZQ0KKyNlcnJvciAiVUFSVCBjb25maWd1 cmF0aW9uIGlzIHVuZGVmaW5lZCBmb3IgdGhpcyBQb3dlclBDIHBsYXRmb3JtIg0KKyNlbmRp Zg0KKw0KKyNlbmRpZiAvKiAhX1JUQUlfQVNNX1BQQ19VQVJUX0ggKi8NCmRpZmYgLU5ydSBm dXNpb24tMC43LjEvc2tpbnMvcnRhaS9saWIvcXVldWUuYyBmdXNpb24tMC43LjEtcHBjNjQt ZGV2ZWwvc2tpbnMvcnRhaS9saWIvcXVldWUuYwotLS0gZnVzaW9uLTAuNy4xL3NraW5zL3J0 YWkvbGliL3F1ZXVlLmMJMjAwNC0xMi0yNCAxMToxMjoxMy4wMDAwMDAwMDAgKzAyMDAKKysr IGZ1c2lvbi0wLjcuMS1wcGM2NC1kZXZlbC9za2lucy9ydGFpL2xpYi9xdWV1ZS5jCTIwMDUt MDUtMjMgMTY6MDk6MzQuMDAwMDAwMDAwICswMzAwCkBAIC0xODcsNyArMTg3LDcgQEAKIAkJ CSAgICAgbW9kZSk7CiB9CiAKLWludCBydF9xdWV1ZV9yZWN2IChSVF9RVUVVRSAqcSwKK3Nz aXplX3QgcnRfcXVldWVfcmVjdiAoUlRfUVVFVUUgKnEsCiAJCSAgIHZvaWQgKipidWZwLAog CQkgICBSVElNRSB0aW1lb3V0KQogewo= --------------020304010001040304030207 Content-Type: text/plain; x-mac-type="0"; x-mac-creator="0"; name="adeos-linux-2.6.10-ppc64-r6c1.patch" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="adeos-linux-2.6.10-ppc64-r6c1.patch" ZGlmZiAtTnJ1IGxpbnV4LTIuNi4xMC9hZGVvcy9nZW5lcmljLmMgbGludXgtMi42LjEwLWFk ZW9zLXBwYzY0LWRldmVsL2FkZW9zL2dlbmVyaWMuYwotLS0gbGludXgtMi42LjEwL2FkZW9z L2dlbmVyaWMuYwkxOTcwLTAxLTAxIDAyOjAwOjAwLjAwMDAwMDAwMCArMDIwMAorKysgbGlu dXgtMi42LjEwLWFkZW9zLXBwYzY0LWRldmVsL2FkZW9zL2dlbmVyaWMuYwkyMDA1LTA1LTEy IDEzOjM2OjUxLjAwMDAwMDAwMCArMDMwMApAQCAtMCwwICsxLDYzOSBAQAorLyoKKyAqICAg bGludXgvYWRlb3MvZ2VuZXJpYy5jCisgKgorICogICBDb3B5cmlnaHQgKEMpIDIwMDIgUGhp bGlwcGUgR2VydW0uCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsg eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogICBpdCB1bmRlciB0 aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hl ZCBieQorICogICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFz cyBBdmUsIENhbWJyaWRnZSBNQSAwMjEzOSwKKyAqICAgVVNBOyBlaXRoZXIgdmVyc2lvbiAy IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorICogICB2 ZXJzaW9uLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJS QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNI QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0 aGUKKyAqICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K KyAqCisgKiAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBp ZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgIEZvdW5kYXRpb24sIElu Yy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3 LCBVU0EuCisgKgorICogICBBcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgQURFT1Mgc2Vydmlj ZXMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51 eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgv a2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9p cnEuaD4KKworTU9EVUxFX0RFU0NSSVBUSU9OKCJBZGVvcyBuYW5va2VybmVsIik7CitNT0RV TEVfQVVUSE9SKCJQaGlsaXBwZSBHZXJ1bSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwor CisvKiBhZGVvc19yZWdpc3Rlcl9kb21haW4oKSAtLSBBZGQgYSBuZXcgZG9tYWluIHRvIHRo ZSBzeXN0ZW0uIEFsbAorICAgY2xpZW50IGRvbWFpbnMgbXVzdCBjYWxsIHRoaXMgcm91dGlu ZSB0byByZWdpc3RlciB0aGVtc2VsdmVzIHRvCisgICBBREVPUyBiZWZvcmUgdXNpbmcgaXRz IHNlcnZpY2VzLiAqLworCitpbnQgYWRlb3NfcmVnaXN0ZXJfZG9tYWluIChhZG9tYWluX3Qg KmFkcCwgYWRhdHRyX3QgKmF0dHIpCisKK3sKKyAgICBzdHJ1Y3QgbGlzdF9oZWFkICpwb3M7 CisgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKKyAgICBpbnQgbjsKKworICAgIGlmIChhZHBf Y3VycmVudCAhPSBhZHBfcm9vdCkKKwl7CisJcHJpbnRrKEtFUk5fV0FSTklORyAiQWRlb3M6 IE9ubHkgdGhlIHJvb3QgZG9tYWluIG1heSByZWdpc3RlciBhIG5ldyBkb21haW4uXG4iKTsK KwlyZXR1cm4gLUVQRVJNOworCX0KKworICAgIGZsYWdzID0gYWRlb3NfY3JpdGljYWxfZW50 ZXIoTlVMTCk7CisKKyAgICBsaXN0X2Zvcl9lYWNoKHBvcywmX19hZGVvc19waXBlbGluZSkg eworICAgIAlhZG9tYWluX3QgKl9hZHAgPSBsaXN0X2VudHJ5KHBvcyxhZG9tYWluX3QscF9s aW5rKTsKKwlpZiAoX2FkcC0+ZG9taWQgPT0gYXR0ci0+ZG9taWQpCisgICAgICAgICAgICBi cmVhazsKKyAgICB9CisKKyAgICBhZGVvc19jcml0aWNhbF9leGl0KGZsYWdzKTsKKworICAg IGlmIChwb3MgIT0gJl9fYWRlb3NfcGlwZWxpbmUpCisJLyogQSBkb21haW4gd2l0aCB0aGUg Z2l2ZW4gaWQgYWxyZWFkeSBleGlzdHMgLS0gZmFpbC4gKi8KKwlyZXR1cm4gLUVCVVNZOwor CisgICAgZm9yIChuID0gMDsgbiA8IEFERU9TX05SX0NQVVM7IG4rKykKKwl7CisJLyogRWFj aCBkb21haW4gc3RhcnRzIGluIHNsZWVwaW5nIHN0YXRlIG9uIGV2ZXJ5IENQVS4gKi8KKwlh ZHAtPmNwdWRhdGFbbl0uc3RhdHVzID0gKDEgPDwgSVBJUEVfU0xFRVBfRkxBRyk7CisjaWZk ZWYgQ09ORklHX0FERU9TX1RIUkVBRFMKKwlhZHAtPmVzdGFja2Jhc2Vbbl0gPSAwOworI2Vu ZGlmIC8qIENPTkZJR19BREVPU19USFJFQURTICovCisJfQorCisgICAgYWRwLT5uYW1lID0g YXR0ci0+bmFtZTsKKyAgICBhZHAtPnByaW9yaXR5ID0gYXR0ci0+cHJpb3JpdHk7CisgICAg YWRwLT5kb21pZCA9IGF0dHItPmRvbWlkOworICAgIGFkcC0+ZHN3aXRjaCA9IGF0dHItPmRz d2l0Y2g7CisgICAgYWRwLT5mbGFncyA9IDA7CisgICAgYWRwLT5wdGRfc2V0ZnVuID0gYXR0 ci0+cHRkc2V0OworICAgIGFkcC0+cHRkX2dldGZ1biA9IGF0dHItPnB0ZGdldDsKKyAgICBh ZHAtPnB0ZF9rZXltYXAgPSAwOworICAgIGFkcC0+cHRkX2tleWNvdW50ID0gMDsKKyAgICBh ZHAtPnB0ZF9rZXltYXggPSBhdHRyLT5ucHRka2V5czsKKworICAgIGZvciAobiA9IDA7IG4g PCBBREVPU19OUl9FVkVOVFM7IG4rKykKKwkvKiBFdmVudCBoYW5kbGVycyBtdXN0IGJlIGNs ZWFyZWQgYmVmb3JlIHRoZSBpLXBpcGUgc3RhZ2UgaXMKKwkgICBpbnNlcnRlZCBzaW5jZSBh biBleGNlcHRpb24gbWF5IG9jY3VyIG9uIGJlaGFsZiBvZiB0aGUgbmV3CisJICAgZW1lcmdp bmcgZG9tYWluLiAqLworCWFkcC0+ZXZlbnRzW25dLmhhbmRsZXIgPSBOVUxMOworCisgICAg aWYgKGF0dHItPmVudHJ5ICE9IE5VTEwpCisJX19hZGVvc19pbml0X2RvbWFpbihhZHAsYXR0 cik7CisKKyAgICAvKiBJbnNlcnQgdGhlIGRvbWFpbiBpbiB0aGUgaW50ZXJydXB0IHBpcGVs aW5lIGxhc3QsIHNvIGl0IHdvbid0CisgICAgICAgYmUgcmVzdW1lZCBmb3IgcHJvY2Vzc2lu ZyBpbnRlcnJ1cHRzIHVudGlsIGl0IGhhcyBhIHZhbGlkIHN0YWNrCisgICAgICAgY29udGV4 dC4gKi8KKworICAgIF9fYWRlb3NfaW5pdF9zdGFnZShhZHApOworCisgICAgSU5JVF9MSVNU X0hFQUQoJmFkcC0+cF9saW5rKTsKKworICAgIGZsYWdzID0gYWRlb3NfY3JpdGljYWxfZW50 ZXIoTlVMTCk7CisKKyAgICBsaXN0X2Zvcl9lYWNoKHBvcywmX19hZGVvc19waXBlbGluZSkg eworICAgIAlhZG9tYWluX3QgKl9hZHAgPSBsaXN0X2VudHJ5KHBvcyxhZG9tYWluX3QscF9s aW5rKTsKKwlpZiAoYWRwLT5wcmlvcml0eSA+IF9hZHAtPnByaW9yaXR5KQorICAgICAgICAg ICAgYnJlYWs7CisgICAgfQorCisgICAgbGlzdF9hZGRfdGFpbCgmYWRwLT5wX2xpbmsscG9z KTsKKworICAgIGFkZW9zX2NyaXRpY2FsX2V4aXQoZmxhZ3MpOworCisgICAgcHJpbnRrKEtF Uk5fV0FSTklORyAiQWRlb3M6IERvbWFpbiAlcyByZWdpc3RlcmVkLlxuIixhZHAtPm5hbWUp OworCisgICAgLyogRmluYWxseSwgYWxsb3cgdGhlIG5ldyBkb21haW4gdG8gcGVyZm9ybSBp dHMgaW5pdGlhbGl6YXRpb24KKyAgICAgICBjaG9yZXMuICovCisKKyAgICBpZiAoYXR0ci0+ ZW50cnkgIT0gTlVMTCkKKwl7CisJYWRlb3NfZGVjbGFyZV9jcHVpZDsKKworCWFkZW9zX2xv Y2tfY3B1KGZsYWdzKTsKKworI2lmZGVmIENPTkZJR19BREVPU19USFJFQURTCisJX19hZGVv c19zd2l0Y2hfdG8oYWRwX3Jvb3QsYWRwLGNwdWlkKTsKKyNlbHNlIC8qICFDT05GSUdfQURF T1NfVEhSRUFEUyAqLworCWFkcF9jcHVfY3VycmVudFtjcHVpZF0gPSBhZHA7CisJYXR0ci0+ ZW50cnkoMSk7CisJYWRwX2NwdV9jdXJyZW50W2NwdWlkXSA9IGFkcF9yb290OworI2VuZGlm IC8qIENPTkZJR19BREVPU19USFJFQURTICovCisKKwlhZGVvc19sb2FkX2NwdWlkKCk7CS8q IFByb2Nlc3NvciBtaWdodCBoYXZlIGNoYW5nZWQuICovCisKKwlpZiAoYWRwX3Jvb3QtPmNw dWRhdGFbY3B1aWRdLmlycV9wZW5kaW5nX2hpICE9IDAgJiYKKwkgICAgIXRlc3RfYml0KElQ SVBFX1NUQUxMX0ZMQUcsJmFkcF9yb290LT5jcHVkYXRhW2NwdWlkXS5zdGF0dXMpKQorCSAg ICBfX2FkZW9zX3N5bmNfc3RhZ2UoSVBJUEVfSVJRTUFTS19BTlkpOworCisJYWRlb3NfdW5s b2NrX2NwdShmbGFncyk7CisJfQorCisgICAgcmV0dXJuIDA7Cit9CisKKy8qIGFkZW9zX3Vu cmVnaXN0ZXJfZG9tYWluKCkgLS0gUmVtb3ZlIGEgZG9tYWluIGZyb20gdGhlIHN5c3RlbS4g QWxsCisgICBjbGllbnQgZG9tYWlucyBtdXN0IGNhbGwgdGhpcyByb3V0aW5lIHRvIHVucmVn aXN0ZXIgdGhlbXNlbHZlcyBmcm9tCisgICB0aGUgQURFT1MgbGF5ZXIuICovCisKK2ludCBh ZGVvc191bnJlZ2lzdGVyX2RvbWFpbiAoYWRvbWFpbl90ICphZHApCisKK3sKKyAgICB1bnNp Z25lZCBsb25nIGZsYWdzOworICAgIHVuc2lnbmVkIGV2ZW50OworCisgICAgaWYgKGFkcF9j dXJyZW50ICE9IGFkcF9yb290KQorCXsKKwlwcmludGsoS0VSTl9XQVJOSU5HICJBZGVvczog T25seSB0aGUgcm9vdCBkb21haW4gbWF5IHVucmVnaXN0ZXIgYSBkb21haW4uXG4iKTsKKwly ZXR1cm4gLUVQRVJNOworCX0KKworICAgIGlmIChhZHAgPT0gYWRwX3Jvb3QpCisJeworCXBy aW50ayhLRVJOX1dBUk5JTkcgIkFkZW9zOiBDYW5ub3QgdW5yZWdpc3RlciB0aGUgcm9vdCBk b21haW4uXG4iKTsKKwlyZXR1cm4gLUVQRVJNOworCX0KKworICAgIGZvciAoZXZlbnQgPSAw OyBldmVudCA8IEFERU9TX05SX0VWRU5UUzsgZXZlbnQrKykKKwkvKiBOZWVkIHRoaXMgdG8g dXBkYXRlIHRoZSBtb25pdG9yIGNvdW50LiAqLworCWFkZW9zX2NhdGNoX2V2ZW50X2Zyb20o YWRwLGV2ZW50LE5VTEwpOworCisjaWZkZWYgQ09ORklHX1NNUAorICAgIHsKKyAgICBpbnQg bnJfY3B1cyA9IG51bV9vbmxpbmVfY3B1cygpLCBfY3B1aWQ7CisgICAgdW5zaWduZWQgaXJx OworCisgICAgLyogSW4gdGhlIFNNUCBjYXNlLCB3YWl0IGZvciB0aGUgbG9nZ2VkIGV2ZW50 cyB0byBkcmFpbiBvbiBvdGhlcgorICAgICAgIHByb2Nlc3NvcnMgYmVmb3JlIGV2ZW50dWFs bHkgcmVtb3ZpbmcgdGhlIGRvbWFpbiBmcm9tIHRoZQorICAgICAgIHBpcGVsaW5lLiAqLwor CisgICAgYWRlb3NfdW5zdGFsbF9waXBlbGluZV9mcm9tKGFkcCk7CisKKyAgICBmbGFncyA9 IGFkZW9zX2NyaXRpY2FsX2VudGVyKE5VTEwpOworCisgICAgZm9yIChpcnEgPSAwOyBpcnEg PCBJUElQRV9OUl9JUlFTOyBpcnErKykKKwl7CisJY2xlYXJfYml0KElQSVBFX0hBTkRMRV9G TEFHLCZhZHAtPmlycXNbaXJxXS5jb250cm9sKTsKKwljbGVhcl9iaXQoSVBJUEVfU1RJQ0tZ X0ZMQUcsJmFkcC0+aXJxc1tpcnFdLmNvbnRyb2wpOworCXNldF9iaXQoSVBJUEVfUEFTU19G TEFHLCZhZHAtPmlycXNbaXJxXS5jb250cm9sKTsKKwl9CisKKyAgICBhZGVvc19jcml0aWNh bF9leGl0KGZsYWdzKTsKKworICAgIGZvciAoX2NwdWlkID0gMDsgX2NwdWlkIDwgbnJfY3B1 czsgX2NwdWlkKyspCisJeworCWZvciAoaXJxID0gMDsgaXJxIDwgSVBJUEVfTlJfSVJRUzsg aXJxKyspCisJICAgIHdoaWxlIChhZHAtPmNwdWRhdGFbX2NwdWlkXS5pcnFfaGl0c1tpcnFd ID4gMCkKKwkJY3B1X3JlbGF4KCk7CisKKwl3aGlsZSAodGVzdF9iaXQoSVBJUEVfWFBFTkRf RkxBRywmYWRwLT5jcHVkYXRhW19jcHVpZF0uc3RhdHVzKSkKKwkgICAgY3B1X3JlbGF4KCk7 CisKKwl3aGlsZSAoIXRlc3RfYml0KElQSVBFX1NMRUVQX0ZMQUcsJmFkcC0+Y3B1ZGF0YVtf Y3B1aWRdLnN0YXR1cykpCisJICAgICBjcHVfcmVsYXgoKTsKKwl9CisgICAgfQorI2VuZGlm IC8qIENPTkZJR19TTVAgKi8KKworICAgIC8qIFNpbXBseSByZW1vdmUgdGhlIGRvbWFpbiBm cm9tIHRoZSBwaXBlbGluZSBhbmQgd2UgYXJlIGFsbW9zdAorICAgICAgIGRvbmUuICovCisK KyAgICBmbGFncyA9IGFkZW9zX2NyaXRpY2FsX2VudGVyKE5VTEwpOworICAgIGxpc3RfZGVs X2luaXQoJmFkcC0+cF9saW5rKTsKKyAgICBhZGVvc19jcml0aWNhbF9leGl0KGZsYWdzKTsK KworICAgIF9fYWRlb3NfY2xlYW51cF9kb21haW4oYWRwKTsKKworICAgIHByaW50ayhLRVJO X1dBUk5JTkcgIkFkZW9zOiBEb21haW4gJXMgdW5yZWdpc3RlcmVkLlxuIixhZHAtPm5hbWUp OworCisgICAgcmV0dXJuIDA7Cit9CisKKy8qIGFkZW9zX3Byb3BhZ2F0ZV9pcnEoKSAtLSBG b3JjZSBhIGdpdmVuIElSUSBwcm9wYWdhdGlvbiBvbiBiZWhhbGYgb2YKKyAgIGEgcnVubmlu ZyBpbnRlcnJ1cHQgaGFuZGxlciB0byB0aGUgbmV4dCBkb21haW4gZG93biB0aGUgcGlwZWxp bmUuCisgICBSZXR1cm5zIG5vbi16ZXJvIGlmIGEgZG9tYWluIGhhcyByZWNlaXZlZCB0aGUg aW50ZXJydXB0CisgICBub3RpZmljYXRpb24sIHplcm8gb3RoZXJ3aXNlLgorICAgVGhpcyBj YWxsIGlzIHVzZWZ1bCBmb3IgaGFuZGxpbmcgc2hhcmVkIGludGVycnVwdHMgYW1vbmcgZG9t YWlucy4KKyAgIGUuZy4gcGlwZWxpbmUgPSBbZG9tYWluLUFdLS0tW2RvbWFpbi1CXS4uLgor ICAgQm90aCBkb21haW5zIHNoYXJlIElSUSAjWC4KKyAgIC0gZG9tYWluLUEgaGFuZGxlcyBJ UlEgI1ggYnV0IGRvZXMgbm90IHBhc3MgaXQgZG93biAoaS5lLiBUZXJtaW5hdGUKKyAgIG9y IER5bmFtaWMgaW50ZXJydXB0IGNvbnRyb2wgbW9kZSkKKyAgIC0gZG9tYWluLUIgaGFuZGxl cyBJUlEgI1ggKGkuZS4gVGVybWluYXRlIG9yIEFjY2VwdCBpbnRlcnJ1cHQKKyAgIGNvbnRy b2wgbW9kZXMpLgorICAgV2hlbiBJUlEgI1ggaXMgcmFpc2VkLCBkb21haW4tQSdzIGhhbmRs ZXIgZGV0ZXJtaW5lcyB3aGV0aGVyIGl0CisgICBzaG91bGQgcHJvY2VzcyB0aGUgaW50ZXJy dXB0IGJ5IGlkZW50aWZ5aW5nIGl0cyBzb3VyY2UuIElmIG5vdCwKKyAgIGFkZW9zX3Byb3Bh Z2F0ZV9pcnEoKSBpcyBjYWxsZWQgc28gdGhhdCB0aGUgbmV4dCBkb21haW4gZG93biB0aGUK KyAgIHBpcGVsaW5lIHdoaWNoIGhhbmRsZXMgSVJRICNYIGlzIGdpdmVuIGEgY2hhbmNlIHRv IHByb2Nlc3MgaXQuIFRoaXMKKyAgIHByb2Nlc3MgY2FuIGJlIHJlcGVhdGVkIHVudGlsIHRo ZSBlbmQgb2YgdGhlIHBpcGVsaW5lIGlzCisgICByZWFjaGVkLiAqLworCisvKiBhZGVvc19z Y2hlZHVsZV9pcnEoKSAtLSBBbG1vc3QgdGhlIHNhbWUgYXMgYWRlb3NfcHJvcGFnYXRlX2ly cSgpLAorICAgYnV0IGF0dGVtcHRzIHRvIHBlbmQgdGhlIGludGVycnVwdCBmb3IgdGhlIGN1 cnJlbnQgZG9tYWluIGZpcnN0LiAqLworCitpbnQgZmFzdGNhbGwgX19hZGVvc19zY2hlZHVs ZV9pcnEgKHVuc2lnbmVkIGlycSwgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKKworeworICAg IHN0cnVjdCBsaXN0X2hlYWQgKmxuOworICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CisgICAg YWRlb3NfZGVjbGFyZV9jcHVpZDsKKworICAgIGlmIChpcnEgPj0gSVBJUEVfTlJfSVJRUyB8 fAorCShhZGVvc192aXJ0dWFsX2lycV9wKGlycSkgJiYgIXRlc3RfYml0KGlycSAtIElQSVBF X1ZJUlFfQkFTRSwmX19hZGVvc192aXJ0dWFsX2lycV9tYXApKSkKKwlyZXR1cm4gLUVJTlZB TDsKKworICAgIGFkZW9zX2xvY2tfY3B1KGZsYWdzKTsKKworICAgIGxuID0gaGVhZDsKKwor ICAgIHdoaWxlIChsbiAhPSAmX19hZGVvc19waXBlbGluZSkKKwl7CisJYWRvbWFpbl90ICph ZHAgPSBsaXN0X2VudHJ5KGxuLGFkb21haW5fdCxwX2xpbmspOworCisJaWYgKHRlc3RfYml0 KElQSVBFX0hBTkRMRV9GTEFHLCZhZHAtPmlycXNbaXJxXS5jb250cm9sKSkKKwkgICAgewor CSAgICBhZHAtPmNwdWRhdGFbY3B1aWRdLmlycV9oaXRzW2lycV0rKzsKKwkgICAgX19hZGVv c19zZXRfaXJxX2JpdChhZHAsY3B1aWQsaXJxKTsKKwkgICAgYWRlb3NfdW5sb2NrX2NwdShm bGFncyk7CisJICAgIHJldHVybiAxOworCSAgICB9CisKKwlsbiA9IGFkcC0+cF9saW5rLm5l eHQ7CisJfQorCisgICAgYWRlb3NfdW5sb2NrX2NwdShmbGFncyk7CisKKyAgICByZXR1cm4g MDsKK30KKworLyogYWRlb3NfZnJlZV9pcnEoKSAtLSBSZXR1cm4gYSBwcmV2aW91c2x5IGFs bG9jYXRlZCB2aXJ0dWFsL3NvZnQKKyAgIHBpcGVsaW5lZCBpbnRlcnJ1cHQgdG8gdGhlIHBv b2wgb2YgYWxsb2NhdGFibGUgaW50ZXJydXB0cy4gKi8KKworaW50IGFkZW9zX2ZyZWVfaXJx ICh1bnNpZ25lZCBpcnEpCisKK3sKKyAgICBpZiAoaXJxID49IElQSVBFX05SX0lSUVMpCisJ cmV0dXJuIC1FSU5WQUw7CisKKyAgICBjbGVhcl9iaXQoaXJxIC0gSVBJUEVfVklSUV9CQVNF LCZfX2FkZW9zX3ZpcnR1YWxfaXJxX21hcCk7CisKKyAgICByZXR1cm4gMDsKK30KKworY3B1 bWFza190IGFkZW9zX3NldF9pcnFfYWZmaW5pdHkgKHVuc2lnbmVkIGlycSwgY3B1bWFza190 IGNwdW1hc2spCisKK3sKKyNpZmRlZiBDT05GSUdfU01QCisgICAgIGlmIChpcnEgPj0gSVBJ UEVfTlJfWElSUVMpCisJIC8qIEFsbG93IGNoYW5naW5nIGFmZmluaXR5IG9mIGV4dGVybmFs IElSUXMgb25seS4gKi8KKwkgcmV0dXJuIENQVV9NQVNLX05PTkU7CisKKyAgICAgaWYgKG51 bV9vbmxpbmVfY3B1cygpID4gMSkKKwkgLyogQWxsb3cgY2hhbmdpbmcgYWZmaW5pdHkgb2Yg ZXh0ZXJuYWwgSVJRcyBvbmx5LiAqLworCSByZXR1cm4gX19hZGVvc19zZXRfaXJxX2FmZmlu aXR5KGlycSxjcHVtYXNrKTsKKyNlbmRpZiAvKiBDT05GSUdfU01QICovCisKKyAgICByZXR1 cm4gQ1BVX01BU0tfTk9ORTsKK30KKworLyogYWRlb3NfY2F0Y2hfZXZlbnRfZnJvbSgpIC0t IEludGVycG9zZSBhbiBldmVudCBoYW5kbGVyIHN0YXJ0aW5nCisgICBmcm9tIGEgZ2l2ZW4g ZG9tYWluLiAqLworCitpbnQgYWRlb3NfY2F0Y2hfZXZlbnRfZnJvbSAoYWRvbWFpbl90ICph ZHAsIHVuc2lnbmVkIGV2ZW50LCB2b2lkICgqaGFuZGxlcikoYWRldmluZm9fdCAqKSkKKwor eworICAgIGlmIChldmVudCA+PSBBREVPU19OUl9FVkVOVFMpCisJcmV0dXJuIC1FSU5WQUw7 CisKKyAgICBpZiAoIXhjaGcoJmFkcC0+ZXZlbnRzW2V2ZW50XS5oYW5kbGVyLGhhbmRsZXIp KQorCXsKKwlpZiAoaGFuZGxlcikKKwkgICAgX19hZGVvc19ldmVudF9tb25pdG9yc1tldmVu dF0rKzsKKwl9CisgICAgZWxzZSBpZiAoIWhhbmRsZXIpCisJX19hZGVvc19ldmVudF9tb25p dG9yc1tldmVudF0tLTsKKworICAgIHJldHVybiAwOworfQorCit2b2lkIGFkZW9zX2luaXRf YXR0ciAoYWRhdHRyX3QgKmF0dHIpCisKK3sKKyAgICBhdHRyLT5uYW1lID0gIkFub255bW91 cyI7CisgICAgYXR0ci0+ZG9taWQgPSAxOworICAgIGF0dHItPmVudHJ5ID0gTlVMTDsKKyAg ICBhdHRyLT5lc3RhY2tzeiA9IDA7CS8qIExldCBBREVPUyBjaG9vc2UgYSByZWFzb25hYmxl IHN0YWNrIHNpemUgKi8KKyAgICBhdHRyLT5wcmlvcml0eSA9IEFERU9TX1JPT1RfUFJJOwor ICAgIGF0dHItPmRzd2l0Y2ggPSBOVUxMOworICAgIGF0dHItPm5wdGRrZXlzID0gMDsKKyAg ICBhdHRyLT5wdGRzZXQgPSBOVUxMOworICAgIGF0dHItPnB0ZGdldCA9IE5VTEw7Cit9CisK K2ludCBhZGVvc19hbGxvY19wdGRrZXkgKHZvaWQpCisKK3sKKyAgICB1bnNpZ25lZCBsb25n IGZsYWdzOworICAgIGludCBrZXkgPSAtMTsKKworICAgIGFkZW9zX3NwaW5fbG9ja19pcnFz YXZlKCZfX2FkZW9zX3BpcGVsb2NrLGZsYWdzKTsKKworICAgIGlmIChhZHBfY3VycmVudC0+ cHRkX2tleWNvdW50IDwgYWRwX2N1cnJlbnQtPnB0ZF9rZXltYXgpCisJeworCWtleSA9IGZm eihhZHBfY3VycmVudC0+cHRkX2tleW1hcCk7CisJc2V0X2JpdChrZXksJmFkcF9jdXJyZW50 LT5wdGRfa2V5bWFwKTsKKwlhZHBfY3VycmVudC0+cHRkX2tleWNvdW50Kys7CisJfQorCisg ICAgYWRlb3Nfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmX19hZGVvc19waXBlbG9jayxmbGFn cyk7CisKKyAgICByZXR1cm4ga2V5OworfQorCitpbnQgYWRlb3NfZnJlZV9wdGRrZXkgKGlu dCBrZXkpCisKK3sKKyAgICB1bnNpZ25lZCBsb25nIGZsYWdzOyAKKworICAgIGlmIChrZXkg PCAwIHx8IGtleSA+PSBhZHBfY3VycmVudC0+cHRkX2tleW1heCkKKwlyZXR1cm4gLUVJTlZB TDsKKworICAgIGFkZW9zX3NwaW5fbG9ja19pcnFzYXZlKCZfX2FkZW9zX3BpcGVsb2NrLGZs YWdzKTsKKworICAgIGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoa2V5LCZhZHBfY3VycmVudC0+ cHRkX2tleW1hcCkpCisJYWRwX2N1cnJlbnQtPnB0ZF9rZXljb3VudC0tOworCisgICAgYWRl b3Nfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmX19hZGVvc19waXBlbG9jayxmbGFncyk7CisK KyAgICByZXR1cm4gMDsKK30KKworaW50IGFkZW9zX3NldF9wdGQgKGludCBrZXksIHZvaWQg KnZhbHVlKQorCit7CisgICAgaWYgKGtleSA8IDAgfHwga2V5ID49IGFkcF9jdXJyZW50LT5w dGRfa2V5bWF4KQorCXJldHVybiAtRUlOVkFMOworCisgICAgaWYgKCFhZHBfY3VycmVudC0+ cHRkX3NldGZ1bikKKwl7CisJcHJpbnRrKEtFUk5fV0FSTklORyAiQWRlb3M6IE5vIHB0ZHNl dCBob29rIGZvciAlc1xuIixhZHBfY3VycmVudC0+bmFtZSk7CisJcmV0dXJuIC1FSU5WQUw7 CisJfQorCisgICAgYWRwX2N1cnJlbnQtPnB0ZF9zZXRmdW4oa2V5LHZhbHVlKTsKKworICAg IHJldHVybiAwOworfQorCit2b2lkICphZGVvc19nZXRfcHRkIChpbnQga2V5KQorCit7Cisg ICAgaWYgKGtleSA8IDAgfHwga2V5ID49IGFkcF9jdXJyZW50LT5wdGRfa2V5bWF4KQorCXJl dHVybiBOVUxMOworCisgICAgaWYgKCFhZHBfY3VycmVudC0+cHRkX2dldGZ1bikKKwl7CisJ cHJpbnRrKEtFUk5fV0FSTklORyAiQWRlb3M6IE5vIHB0ZGdldCBob29rIGZvciAlc1xuIixh ZHBfY3VycmVudC0+bmFtZSk7CisJcmV0dXJuIE5VTEw7CisJfQorCisgICAgcmV0dXJuIGFk cF9jdXJyZW50LT5wdGRfZ2V0ZnVuKGtleSk7Cit9CisKK2ludCBhZGVvc19pbml0X211dGV4 IChhZG11dGV4X3QgKm11dGV4KQorCit7CisgICAgYWRtdXRleF90IGluaXRtID0gQURFT1Nf TVVURVhfVU5MT0NLRUQ7CisgICAgKm11dGV4ID0gaW5pdG07CisgICAgcmV0dXJuIDA7Cit9 CisKKyNpZmRlZiBDT05GSUdfQURFT1NfVEhSRUFEUworCitpbnQgYWRlb3NfZGVzdHJveV9t dXRleCAoYWRtdXRleF90ICptdXRleCkKKworeworICAgIGlmICghYWRlb3Nfc3Bpbl90cnls b2NrKCZtdXRleC0+bG9jaykgJiYKKwlhZHBfY3VycmVudCAhPSBhZHBfcm9vdCAmJgorCW11 dGV4LT5vd25lciAhPSBhZHBfY3VycmVudCkKKwlyZXR1cm4gLUVCVVNZOworCisgICAgcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2FkZW9zX3NsZWVwb25fbXV0ZXgg KGFkbXV0ZXhfdCAqbXV0ZXgsIGFkb21haW5fdCAqc2xlZXBlciwgaW50IGNwdWlkKQorCit7 CisgICAgYWRvbWFpbl90ICpvd25lciA9IG11dGV4LT5vd25lcjsKKworICAgIC8qIE1ha2Ug dGhlIGN1cnJlbnQgZG9tYWluICg9PSBzbGVlcGVyKSB3YWl0IGZvciB0aGUgbXV0ZXggdG8g YmUKKyAgICAgICByZWxlYXNlZC4gQWRlb3MnIHBpcGVsaW5lZCBzY2hlbWUgZ3VhcmFudGVl cyB0aGF0IHRoZSBuZXcKKyAgICAgICBzbGVlcGVyIF9pc18gaGlnaGVyIHByaW9yaXR5IHRo YW4gYW55IGFzbGVwdCBkb21haW4gc2luY2Ugd2UKKyAgICAgICBoYXZlIHN0YWxsZWQgZWFj aCBzbGVlcGVyJ3Mgc3RhZ2UuIE11c3QgYmUgY2FsbGVkIHdpdGggbG9jYWwgaHcKKyAgICAg ICBpbnRlcnJ1cHRzIG9mZi4gKi8KKworICAgIHNsZWVwZXItPm1fbGluayA9IG11dGV4LT5z bGVlcHE7CisgICAgbXV0ZXgtPnNsZWVwcSA9IHNsZWVwZXI7CisgICAgX19hZGVvc19zd2l0 Y2hfdG8oYWRwX2NwdV9jdXJyZW50W2NwdWlkXSxvd25lcixjcHVpZCk7CisgICAgbXV0ZXgt Pm93bmVyID0gc2xlZXBlcjsKKyAgICBhZGVvc19zcGluX3VubG9jaygmbXV0ZXgtPmxvY2sp OworfQorCit1bnNpZ25lZCBsb25nIGZhc3RjYWxsIGFkZW9zX2xvY2tfbXV0ZXggKGFkbXV0 ZXhfdCAqbXV0ZXgpCisKK3sKKyAgICB1bnNpZ25lZCBsb25nIGZsYWdzLCBod2ZsYWdzOwor ICAgIGFkZW9zX2RlY2xhcmVfY3B1aWQ7CisgICAgYWRvbWFpbl90ICphZHA7CisKKyAgICBp ZiAoIWFkcF9waXBlbGluZWQpCisJeworCWFkZW9zX2h3X2xvY2FsX2lycV9zYXZlKGh3Zmxh Z3MpOworCWZsYWdzID0gIWFkZW9zX2h3X3Rlc3RfaWZsYWcoaHdmbGFncyk7CisJYWRlb3Nf c3Bpbl9sb2NrKCZtdXRleC0+bG9jayk7CisJcmV0dXJuIGZsYWdzOworCX0KKworICAgIGFk ZW9zX2xvY2tfY3B1KGh3ZmxhZ3MpOworCisgICAgYWRwID0gYWRwX2NwdV9jdXJyZW50W2Nw dWlkXTsKKworICAgIGZsYWdzID0gX190ZXN0X2FuZF9zZXRfYml0KElQSVBFX1NUQUxMX0ZM QUcsJmFkcC0+Y3B1ZGF0YVtjcHVpZF0uc3RhdHVzKTsKKworICAgIC8qIFR3byBjYXNlcyB0 byBoYW5kbGUgaGVyZSBvbiBTTVAgc3lzdGVtcywgb25seSBvbmUgZm9yIFVQOiAxKSBpbgor ICAgICAgIGNhc2Ugb2YgYSBjb25mbGljdGluZyBhY2Nlc3MgZnJvbSBhIGhpZ2hlciBwcmlv cml0eSBkb21haW4KKyAgICAgICBydW5uaW5nIG9uIHRoZSBzYW1lIGNwdSwgbWFrZSB0aGlz IGRvbWFpbiBzbGVlcCBvbiB0aGUgbXV0ZXgsCisgICAgICAgYW5kIHJlc3VtZSB0aGUgY3Vy cmVudCBvd25lciBzbyBpdCBjYW4gcmVsZWFzZSB0aGUgbG9jayBhc2FwLgorICAgICAgIDIp IGluIGNhc2Ugb2YgYSBjb25mbGljdGluZyBhY2Nlc3MgZnJvbSBhbnkgZG9tYWluIG9uIGEK KyAgICAgICBkaWZmZXJlbnQgY3B1IHRoYW4gdGhlIGN1cnJlbnQgb3duZXIncywgc2ltcGx5 IGVudGVyIGEgc3Bpbm5pbmcKKyAgICAgICBsb29wLiBOb3RlIHRoYXQgdGVzdGluZyBtdXRl eC0+b3duY3B1IGlzIHNhZmUgc2luY2UgaXQgaXMgb25seQorICAgICAgIGNoYW5nZWQgYnkg dGhlIGN1cnJlbnQgb3duZXIsIGFuZCBzZXQgdG8gLTEgd2hlbiB0aGUgbXV0ZXggaXMKKyAg ICAgICB1bmxvY2tlZC4gKi8KKworI2lmZGVmIENPTkZJR19TTVAKKyAgICB3aGlsZSAoIWFk ZW9zX3NwaW5fdHJ5bG9jaygmbXV0ZXgtPmxvY2spKQorCXsKKwlpZiAobXV0ZXgtPm93bmNw dSA9PSBjcHVpZCkKKwkgICAgeworCSAgICBfX2FkZW9zX3NsZWVwb25fbXV0ZXgobXV0ZXgs YWRwLGNwdWlkKTsKKwkgICAgYWRlb3NfbG9hZF9jcHVpZCgpOworCSAgICB9CisJfQorCisg ICAgbXV0ZXgtPm93bmNwdSA9IGNwdWlkOworI2Vsc2UgIC8qICFDT05GSUdfU01QICovCisg ICAgd2hpbGUgKG11dGV4LT5vd25lciAhPSBOVUxMICYmIG11dGV4LT5vd25lciAhPSBhZHAp CisJX19hZGVvc19zbGVlcG9uX211dGV4KG11dGV4LGFkcCxjcHVpZCk7CisjZW5kaWYgLyog Q09ORklHX1NNUCAqLworCisgICAgbXV0ZXgtPm93bmVyID0gYWRwOworCisgICAgYWRlb3Nf dW5sb2NrX2NwdShod2ZsYWdzKTsKKworICAgIHJldHVybiBmbGFnczsKK30KKwordm9pZCBm YXN0Y2FsbCBhZGVvc191bmxvY2tfbXV0ZXggKGFkbXV0ZXhfdCAqbXV0ZXgsIHVuc2lnbmVk IGxvbmcgZmxhZ3MpCisKK3sKKyAgICB1bnNpZ25lZCBsb25nIGh3ZmxhZ3M7CisgICAgYWRl b3NfZGVjbGFyZV9jcHVpZDsKKyAgICBhZG9tYWluX3QgKmFkcDsKKworICAgIGlmICghYWRw X3BpcGVsaW5lZCkKKwl7CisJYWRlb3Nfc3Bpbl91bmxvY2soJm11dGV4LT5sb2NrKTsKKwor CWlmIChmbGFncykKKwkgICAgYWRlb3NfaHdfY2xpKCk7CisJZWxzZQorCSAgICBhZGVvc19o d19zdGkoKTsKKworCXJldHVybjsKKwl9CisKKyNpZmRlZiBDT05GSUdfU01QCisgICAgbXV0 ZXgtPm93bmNwdSA9IC0xOworI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KKworICAgIGlmICgh ZmxhZ3MpCisJYWRlb3NfaHdfc3RpKCk7CS8qIEFic29sdXRlbHkgbmVlZGVkLiAqLworCQor ICAgIGFkZW9zX2xvY2tfY3B1KGh3ZmxhZ3MpOworCisgICAgaWYgKG11dGV4LT5zbGVlcHEg IT0gTlVMTCkKKwl7CisJYWRvbWFpbl90ICpzbGVlcGVyID0gbXV0ZXgtPnNsZWVwcTsKKwkv KiBXYWtlIHVwIHRoZSBoaWdoZXN0IHByaW9yaXR5IHNsZWVwZXIuICovCisJbXV0ZXgtPnNs ZWVwcSA9IHNsZWVwZXItPm1fbGluazsKKwlfX2FkZW9zX3N3aXRjaF90byhhZHBfY3B1X2N1 cnJlbnRbY3B1aWRdLHNsZWVwZXIsY3B1aWQpOworCWFkZW9zX2xvYWRfY3B1aWQoKTsKKwl9 CisgICAgZWxzZQorCXsKKwltdXRleC0+b3duZXIgPSBOVUxMOworCWFkZW9zX3NwaW5fdW5s b2NrKCZtdXRleC0+bG9jayk7CisJfQorCisgICAgYWRwID0gYWRwX2NwdV9jdXJyZW50W2Nw dWlkXTsKKworICAgIGlmIChmbGFncykKKwlfX3NldF9iaXQoSVBJUEVfU1RBTExfRkxBRywm YWRwLT5jcHVkYXRhW2NwdWlkXS5zdGF0dXMpOworICAgIGVsc2UKKwl7CisJX19jbGVhcl9i aXQoSVBJUEVfU1RBTExfRkxBRywmYWRwLT5jcHVkYXRhW2NwdWlkXS5zdGF0dXMpOworCQor CWlmIChhZHAtPmNwdWRhdGFbY3B1aWRdLmlycV9wZW5kaW5nX2hpICE9IDApCisJICAgIF9f YWRlb3Nfc3luY19zdGFnZShJUElQRV9JUlFNQVNLX0FOWSk7CisJfQorCisgICAgYWRlb3Nf dW5sb2NrX2NwdShod2ZsYWdzKTsKK30KKworI2Vsc2UgLyogIUNPTkZJR19BREVPU19USFJF QURTICovCisKK2ludCBhZGVvc19kZXN0cm95X211dGV4IChhZG11dGV4X3QgKm11dGV4KQor Cit7CisgICAgaWYgKCFhZGVvc19zcGluX3RyeWxvY2soJm11dGV4LT5sb2NrKSAmJgorCWFk cF9jdXJyZW50ICE9IGFkcF9yb290KQorCXJldHVybiAtRUJVU1k7CisKKyAgICByZXR1cm4g MDsKK30KKwordW5zaWduZWQgbG9uZyBmYXN0Y2FsbCBhZGVvc19sb2NrX211dGV4IChhZG11 dGV4X3QgKm11dGV4KQorCit7CisgICAgdW5zaWduZWQgbG9uZyBmbGFnczsgLyogRklYTUU6 IHdvbid0IHdvcmsgb24gU1BBUkMgKi8KKyAgICBhZGVvc19zcGluX2xvY2tfaXJxc2F2ZSgm bXV0ZXgtPmxvY2ssZmxhZ3MpOworICAgIHJldHVybiBmbGFnczsKK30KKwordm9pZCBmYXN0 Y2FsbCBhZGVvc191bmxvY2tfbXV0ZXggKGFkbXV0ZXhfdCAqbXV0ZXgsIHVuc2lnbmVkIGxv bmcgZmxhZ3MpCisKK3sKKyAgICBhZGVvc19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZtdXRl eC0+bG9jayxmbGFncyk7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfQURFT1NfVEhSRUFEUyAq LworCit2b2lkIF9fYWRlb3NfdGFrZW92ZXIgKHZvaWQpCisKK3sKKyAgICBfX2FkZW9zX2Vu YWJsZV9waXBlbGluZSgpOworICAgIHByaW50ayhLRVJOX1dBUk5JTkcgIkFkZW9zOiBQaXBl bGluaW5nIHN0YXJ0ZWQuXG4iKTsKK30KKworI2lmZGVmIE1PRFVMRQorCitzdGF0aWMgaW50 IF9faW5pdCBhZGVvc19pbml0X21vZHVsZSAodm9pZCkKKworeworICAgIF9fYWRlb3NfdGFr ZW92ZXIoKTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGFkZW9z X2V4aXRfbW9kdWxlICh2b2lkKQorCit7CisgICAgX19hZGVvc19kaXNhYmxlX3BpcGVsaW5l KCk7CisgICAgcHJpbnRrKEtFUk5fV0FSTklORyAiQWRlb3M6IFBpcGVsaW5pbmcgc3RvcHBl ZC5cbiIpOworfQorCittb2R1bGVfaW5pdChhZGVvc19pbml0X21vZHVsZSk7Cittb2R1bGVf ZXhpdChhZGVvc19leGl0X21vZHVsZSk7CisKKyNlbmRpZiAvKiBNT0RVTEUgKi8KKworRVhQ T1JUX1NZTUJPTChhZGVvc19yZWdpc3Rlcl9kb21haW4pOworRVhQT1JUX1NZTUJPTChhZGVv c191bnJlZ2lzdGVyX2RvbWFpbik7CitFWFBPUlRfU1lNQk9MKGFkZW9zX3ZpcnR1YWxpemVf aXJxX2Zyb20pOworRVhQT1JUX1NZTUJPTChhZGVvc19jb250cm9sX2lycSk7CitFWFBPUlRf U1lNQk9MKGFkZW9zX3Byb3BhZ2F0ZV9pcnEpOworRVhQT1JUX1NZTUJPTChfX2FkZW9zX3Nj aGVkdWxlX2lycSk7CitFWFBPUlRfU1lNQk9MKGFkZW9zX2ZyZWVfaXJxKTsKK0VYUE9SVF9T WU1CT0woYWRlb3Nfc2VuZF9pcGkpOworRVhQT1JUX1NZTUJPTChhZGVvc19jYXRjaF9ldmVu dF9mcm9tKTsKK0VYUE9SVF9TWU1CT0woYWRlb3NfaW5pdF9hdHRyKTsKK0VYUE9SVF9TWU1C T0woYWRlb3NfZ2V0X3N5c2luZm8pOworRVhQT1JUX1NZTUJPTChhZGVvc190dW5lX3RpbWVy KTsKK0VYUE9SVF9TWU1CT0woYWRlb3NfYWxsb2NfcHRka2V5KTsKK0VYUE9SVF9TWU1CT0wo YWRlb3NfZnJlZV9wdGRrZXkpOworRVhQT1JUX1NZTUJPTChhZGVvc19zZXRfcHRkKTsKK0VY UE9SVF9TWU1CT0woYWRlb3NfZ2V0X3B0ZCk7CitFWFBPUlRfU1lNQk9MKGFkZW9zX3NldF9p cnFfYWZmaW5pdHkpOworRVhQT1JUX1NZTUJPTChhZGVvc19pbml0X211dGV4KTsKK0VYUE9S VF9TWU1CT0woYWRlb3NfZGVzdHJveV9tdXRleCk7CitFWFBPUlRfU1lNQk9MKGFkZW9zX2xv Y2tfbXV0ZXgpOworRVhQT1JUX1NZTUJPTChhZGVvc191bmxvY2tfbXV0ZXgpOwpkaWZmIC1O cnUgbGludXgtMi42LjEwL2FkZW9zL0tjb25maWcgbGludXgtMi42LjEwLWFkZW9zLXBwYzY0 LWRldmVsL2FkZW9zL0tjb25maWcKLS0tIGxpbnV4LTIuNi4xMC9hZGVvcy9LY29uZmlnCTE5 NzAtMDEtMDEgMDI6MDA6MDAuMDAwMDAwMDAwICswMjAwCisrKyBsaW51eC0yLjYuMTAtYWRl b3MtcHBjNjQtZGV2ZWwvYWRlb3MvS2NvbmZpZwkyMDA1LTA1LTEyIDEzOjM2OjUxLjAwMDAw MDAwMCArMDMwMApAQCAtMCwwICsxLDM3IEBACittZW51ICJBZGVvcyBzdXBwb3J0IgorCitj b25maWcgQURFT1MKKwl0cmlzdGF0ZSAiQWRlb3Mgc3VwcG9ydCIKKwlkZWZhdWx0IHkKKwkt LS1oZWxwLS0tCisJICBBY3RpdmF0ZSB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0aGUgQWRl b3MgbmFub2tlcm5lbCB0byBiZQorCSAgY29tcGlsZWQgaW4uCisKK2NvbmZpZyBBREVPU19D T1JFCisJZGVmX2Jvb2wgQURFT1MKKworY29uZmlnIEFERU9TX1RIUkVBRFMKKwlib29sICJU aHJlYWRlZCBkb21haW5zIgorCWRlcGVuZHMgb24gQURFT1MKKwlkZWZhdWx0IHkKKwktLS1o ZWxwLS0tCisJICBUaGlzIG9wdGlvbiBjYXVzZXMgdGhlIGRvbWFpbnMgdG8gcnVuIGFzIGxp Z2h0d2VpZ2h0CisJICB0aHJlYWRzLCB3aGljaCBpcyB1c2VmdWwgZm9yIGhhdmluZyBzZXBl cmF0ZSBzdGFja3MKKwkgIGZvciBkb21haW5zLiBFbmFibGluZyB0aGlzIG9wdGlvbiBpcyB0 aGUgc2FmZXN0IHNldHRpbmcgZm9yCisJICBub3c7IGRpc2FibGluZyBpdCBjYXVzZXMgYW4g ZXhwZXJpbWVudGFsIG1vZGUgdG8gYmUgdXNlZAorCSAgd2hlcmUgaW50ZXJydXB0cy9ldmVu dHMgYXJlIGRpcmVjdGx5IHByb2Nlc3NlZCBvbiBiZWhhbGYgb2YKKwkgIHRoZSBwcmVlbXB0 ZWQgY29udGV4dC4gU2F5IFkgaWYgdW5zdXJlLgorCitjb25maWcgQURFT1NfTk9USFJFQURT CisJZGVmX2Jvb2wgIUFERU9TX1RIUkVBRFMKKworY29uZmlnIEFERU9TX1BST0ZJTElORwor CWJvb2wgIlBpcGVsaW5lIHByb2ZpbGluZyIKKwlkZXBlbmRzIG9uIEFERU9TCisJZGVmYXVs dCBuCisJLS0taGVscC0tLQorCSAgVGhpcyBvcHRpb24gYWN0aXZhdGVzIHRoZSBwcm9maWxp bmcgY29kZSB3aGljaCBjb2xsZWN0cyB0aGUKKwkgIHRpbWVzdGFtcHMgbmVlZGVkIHRvIG1l YXN1cmUgdGhlIHByb3BhZ2F0aW9uIHRpbWUgb2YKKwkgIGludGVycnVwdHMgdGhyb3VnaCB0 aGUgcGlwZWxpbmUuIFNheSBOIGlmIHVuc3VyZS4KKworZW5kbWVudQpkaWZmIC1OcnUgbGlu dXgtMi42LjEwL2FkZW9zL01ha2VmaWxlIGxpbnV4LTIuNi4xMC1hZGVvcy1wcGM2NC1kZXZl bC9hZGVvcy9NYWtlZmlsZQotLS0gbGludXgtMi42LjEwL2FkZW9zL01ha2VmaWxlCTE5NzAt MDEtMDEgMDI6MDA6MDAuMDAwMDAwMDAwICswMjAwCisrKyBsaW51eC0yLjYuMTAtYWRlb3Mt cHBjNjQtZGV2ZWwvYWRlb3MvTWFrZWZpbGUJMjAwNS0wNi0wMSAxNjowNzo1Mi4wMDAwMDAw MDAgKzAzMDAKQEAgLTAsMCArMSwxNSBAQAorIworIyBNYWtlZmlsZSBmb3IgdGhlIEFkZW9z IGxheWVyLgorIworCitvYmotJChDT05GSUdfQURFT1MpCSs9IGFkZW9zLm8KKworYWRlb3Mt b2JqcwkJOj0gZ2VuZXJpYy5vCisKK2FkZW9zLSQoQ09ORklHX1g4NikJKz0geDg2Lm8KKwor YWRlb3MtJChDT05GSUdfSUE2NCkJKz0gaWE2NC5vCisKK2FkZW9zLSQoQ09ORklHX1BQQzMy KQkrPSBwcGMubworCithZGVvcy0kKENPTkZJR19QUEM2NCkJKz0gcHBjNjQubwpkaWZmIC1O cnUgbGludXgtMi42LjEwL2FkZW9zL3BwYzY0LmMgbGludXgtMi42LjEwLWFkZW9zLXBwYzY0 LWRldmVsL2FkZW9zL3BwYzY0LmMKLS0tIGxpbnV4LTIuNi4xMC9hZGVvcy9wcGM2NC5jCTE5 NzAtMDEtMDEgMDI6MDA6MDAuMDAwMDAwMDAwICswMjAwCisrKyBsaW51eC0yLjYuMTAtYWRl b3MtcHBjNjQtZGV2ZWwvYWRlb3MvcHBjNjQuYwkyMDA1LTA2LTAxIDE1OjQ2OjE3LjAwMDAw MDAwMCArMDMwMApAQCAtMCwwICsxLDUyNyBAQAorLyoKKyAqICAgbGludXgvYWRlb3MvcHBj NjQuYworICogIAorICogICBBZGVvcyA2NC1iaXQgUG93ZXJQQyBhZG9wdGlvbiAKKyAqICAg Q29weXJpZ2h0IChDKSAyMDA1IFRhbmVsaSBWw6Row6RrYW5nYXMgYW5kIEhlaWtraSBMaW5k aG9sbQorICogICBiYXNlZCBvbiBwcmV2aW91cyB3b3JrOgorICogCisgKiAgIENvcHlyaWdo dCAoQykgMjAwNCBQaGlsaXBwZSBHZXJ1bS4KKyAqIAorICogICBBZGVvcy9QUEMgcG9ydCBv dmVyIDIuNiBiYXNlZCBvbiB0aGUgcHJldmlvdXMgMi40IGltcGxlbWVudGF0aW9uIGJ5Ogor ICoKKyAqICAgQ29weXJpZ2h0IChDKSAyMDA0IFdvbGZnYW5nIEdyYW5kZWdnZXIuCisgKgor ICogICBJdCBmb2xsb3dzIGNsb3NlbHkgdGhlIEFSTSBhbmQgeDg2IHBvcnRzIG9mIEFERU9T LgorICoKKyAqICAgQ29weXJpZ2h0IChDKSAyMDAzIFBoaWxpcHBlIEdlcnVtLgorICoKKyAq ICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl IGl0IGFuZC9vciBtb2RpZnkKKyAqICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICAgdGhlIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UgTUEg MDIxMzksCisgKiAgIFVTQTsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKyAqICAgdmVyc2lvbi4KKyAqCisgKiAgIFRo aXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg dXNlZnVsLAorICogICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0 aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICBZb3Ugc2hvdWxk IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZQorICogICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUg RnJlZSBTb2Z0d2FyZQorICogICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2Ug LSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqICAgQXJj aGl0ZWN0dXJlLWRlcGVuZGVudCBBREVPUyBzdXBwb3J0IGZvciBQb3dlclBDLgorICovCisK KyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4K KyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNp bmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNp bmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNs dWRlIDxhc20vaHdfaXJxLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFz bS9hdG9taWMuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vdGltZS5o PgorI2luY2x1ZGUgPGFzbS9jcHV0YWJsZS5oPiAvKiBjdXJfY3B1X3NwZWMgJiBDUFVfRlRS KiAqLworI2luY2x1ZGUgPGFzbS9tbXVfY29udGV4dC5oPiAvKiBnZXRfa2VybmVsX3ZzaWQg Ki8KKworZXh0ZXJuIHNwaW5sb2NrX3QgX19hZGVvc19waXBlbG9jazsKKworZXh0ZXJuIHVu c2lnbmVkIGxvbmcgX19hZGVvc192aXJ0dWFsX2lycV9tYXA7CisKK2V4dGVybiBzdHJ1Y3Qg bGlzdF9oZWFkIF9fYWRlb3NfcGlwZWxpbmU7CisKK2V4dGVybiBpcnFfZGVzY190IGlycV9k ZXNjW107CisKK3N0YXRpYyBzdHJ1Y3QgaHdfaW50ZXJydXB0X3R5cGUgX19hZGVvc19zdGRf aXJxX2R0eXBlW05SX0lSUVNdOworCisvKgorICogQ2hlY2sgTlVMTHMgd2hlbiBjYWxsaW5n IGR0eXBlW10uWCA/CisgKiAgKC5lbmQpCisgKi8KKworc3RhdGljIHZvaWQgX19hZGVvc19v dmVycmlkZV9pcnFfZW5hYmxlICh1bnNpZ25lZCBpcnEpCisKK3sKKyAgICB1bnNpZ25lZCBs b25nIGFkZmxhZ3MsIGh3ZmxhZ3M7CisgICAgYWRlb3NfZGVjbGFyZV9jcHVpZDsKKworICAg IGFkZW9zX2h3X2xvY2FsX2lycV9zYXZlKGh3ZmxhZ3MpOworICAgIGFkZmxhZ3MgPSBhZGVv c190ZXN0X2FuZF9zdGFsbF9waXBlbGluZSgpOworICAgIHByZWVtcHRfZGlzYWJsZSgpOwor ICAgIF9fYWRlb3NfdW5sb2NrX2lycShhZHBfY3B1X2N1cnJlbnRbY3B1aWRdLGlycSk7Cisg ICAgX19hZGVvc19zdGRfaXJxX2R0eXBlW2lycV0uZW5hYmxlKGlycSk7CisgICAgcHJlZW1w dF9lbmFibGVfbm9fcmVzY2hlZCgpOworICAgIGFkZW9zX3Jlc3RvcmVfcGlwZWxpbmVfbm9z eW5jKGFkcF9jcHVfY3VycmVudFtjcHVpZF0sYWRmbGFncyxjcHVpZCk7CisgICAgYWRlb3Nf aHdfbG9jYWxfaXJxX3Jlc3RvcmUoaHdmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fYWRl b3Nfb3ZlcnJpZGVfaXJxX2Rpc2FibGUgKHVuc2lnbmVkIGlycSkKKworeworICAgIHVuc2ln bmVkIGxvbmcgYWRmbGFncywgaHdmbGFnczsKKyAgICBhZGVvc19kZWNsYXJlX2NwdWlkOwor CisgICAgYWRlb3NfaHdfbG9jYWxfaXJxX3NhdmUoaHdmbGFncyk7CisgICAgYWRmbGFncyA9 IGFkZW9zX3Rlc3RfYW5kX3N0YWxsX3BpcGVsaW5lKCk7CisgICAgcHJlZW1wdF9kaXNhYmxl KCk7CisgICAgX19hZGVvc19zdGRfaXJxX2R0eXBlW2lycV0uZGlzYWJsZShpcnEpOworICAg IF9fYWRlb3NfbG9ja19pcnEoYWRwX2NwdV9jdXJyZW50W2NwdWlkXSxjcHVpZCxpcnEpOwor ICAgIHByZWVtcHRfZW5hYmxlX25vX3Jlc2NoZWQoKTsKKyAgICBhZGVvc19yZXN0b3JlX3Bp cGVsaW5lX25vc3luYyhhZHBfY3B1X2N1cnJlbnRbY3B1aWRdLGFkZmxhZ3MsY3B1aWQpOwor ICAgIGFkZW9zX2h3X2xvY2FsX2lycV9yZXN0b3JlKGh3ZmxhZ3MpOworfQorCitzdGF0aWMg dm9pZCBfX2FkZW9zX292ZXJyaWRlX2lycV9lbmQgKHVuc2lnbmVkIGlycSkKKworeworICAg IHVuc2lnbmVkIGxvbmcgYWRmbGFncywgaHdmbGFnczsKKyAgICBhZGVvc19kZWNsYXJlX2Nw dWlkOworCisgICAgYWRlb3NfaHdfbG9jYWxfaXJxX3NhdmUoaHdmbGFncyk7CisgICAgYWRm bGFncyA9IGFkZW9zX3Rlc3RfYW5kX3N0YWxsX3BpcGVsaW5lKCk7CisgICAgcHJlZW1wdF9k aXNhYmxlKCk7CisKKyAgICBpZiAoIShpcnFfZGVzY1tpcnFdLnN0YXR1cyAmIChJUlFfRElT QUJMRUR8SVJRX0lOUFJPR1JFU1MpKSkKKwlfX2FkZW9zX3VubG9ja19pcnEoYWRwX2NwdV9j dXJyZW50W2NwdWlkXSxpcnEpOworCisgICAgX19hZGVvc19zdGRfaXJxX2R0eXBlW2lycV0u ZW5kKGlycSk7CisKKyAgICBwcmVlbXB0X2VuYWJsZV9ub19yZXNjaGVkKCk7CisgICAgYWRl b3NfcmVzdG9yZV9waXBlbGluZV9ub3N5bmMoYWRwX2NwdV9jdXJyZW50W2NwdWlkXSxhZGZs YWdzLGNwdWlkKTsKKyAgICBhZGVvc19od19sb2NhbF9pcnFfcmVzdG9yZShod2ZsYWdzKTsK K30KKworc3RhdGljIHZvaWQgX19hZGVvc19vdmVycmlkZV9pcnFfYWZmaW5pdHkgKHVuc2ln bmVkIGlycSwgY3B1bWFza190IG1hc2spCisKK3sKKyAgICB1bnNpZ25lZCBsb25nIGFkZmxh Z3MsIGh3ZmxhZ3M7CisgICAgYWRlb3NfZGVjbGFyZV9jcHVpZDsKKworICAgIGFkZW9zX2h3 X2xvY2FsX2lycV9zYXZlKGh3ZmxhZ3MpOworICAgIGFkZmxhZ3MgPSBhZGVvc190ZXN0X2Fu ZF9zdGFsbF9waXBlbGluZSgpOworICAgIHByZWVtcHRfZGlzYWJsZSgpOworICAgIF9fYWRl b3Nfc3RkX2lycV9kdHlwZVtpcnFdLnNldF9hZmZpbml0eShpcnEsbWFzayk7CisgICAgcHJl ZW1wdF9lbmFibGVfbm9fcmVzY2hlZCgpOworICAgIGFkZW9zX3Jlc3RvcmVfcGlwZWxpbmVf bm9zeW5jKGFkcF9jcHVfY3VycmVudFtjcHVpZF0sYWRmbGFncyxjcHVpZCk7CisgICAgYWRl b3NfaHdfbG9jYWxfaXJxX3Jlc3RvcmUoaHdmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkICBf X2FkZW9zX2VuYWJsZV9zeW5jICh2b2lkKQorCit7CisgICAgX19hZGVvc19kZWNyX25leHRb YWRlb3NfcHJvY2Vzc29yX2lkKCldID0gX19hZGVvc19yZWFkX3RpbWViYXNlKCkgKyBnZXRf ZGVjKCk7Cit9CisKKy8qIF9fYWRlb3NfZW5hYmxlX3BpcGVsaW5lKCkgLS0gVGFrZSBvdmVy IHRoZSBpbnRlcnJ1cHQgY29udHJvbCBmcm9tCisgICB0aGUgcm9vdCBkb21haW4gKGkuZS4g TGludXgpLiBBZnRlciB0aGlzIHJvdXRpbmUgaGFzIHJldHVybmVkLCBhbGwKKyAgIGludGVy cnVwdHMgZ28gdGhyb3VnaCB0aGUgcGlwZWxpbmUuICovCisKK3ZvaWQgX19hZGVvc19lbmFi bGVfcGlwZWxpbmUgKHZvaWQpCisKK3sKKyAgICB1bnNpZ25lZCBsb25nIGZsYWdzOworICAg IHVuc2lnbmVkIGlycTsKKworICAgIGZsYWdzID0gYWRlb3NfY3JpdGljYWxfZW50ZXIoJl9f YWRlb3NfZW5hYmxlX3N5bmMpOworCisgICAgLyogRmlyc3QsIHZpcnR1YWxpemUgYWxsIGlu dGVycnVwdHMgZnJvbSB0aGUgcm9vdCBkb21haW4uICovCisKKyAgICBmb3IgKGlycSA9IDA7 IGlycSA8IE5SX0lSUVM7IGlycSsrKQorCWFkZW9zX3ZpcnR1YWxpemVfaXJxKGlycSwKKwkJ CSAgICAgKHZvaWQgKCopKHVuc2lnbmVkKSkmX19hZGVvc19kb19JUlEsCisJCQkgICAgICZf X2FkZW9zX2Fja19pcnEsCisJCQkgICAgIElQSVBFX0hBTkRMRV9NQVNLfElQSVBFX1BBU1Nf TUFTSyk7CisKKyAgICAvKiBXZSB1c2UgYSB2aXJ0dWFsIElSUSB0byBoYW5kbGUgdGhlIHRp bWVyIGlycSAoZGVjcmVtZW50ZXIgdHJhcCkKKyAgICAgICB3aGljaCBoYXMgYmVlbiBhbGxv Y2F0ZWQgZWFybHkgaW4gX19hZGVvc19pbml0X3BsYXRmb3JtKCkuICovCisKKyAgICBhZGVv c192aXJ0dWFsaXplX2lycShBREVPU19USU1FUl9WSVJRLAorCQkJICh2b2lkICgqKSh1bnNp Z25lZCkpJl9fYWRlb3NfZG9fdGltZXIsCisJCQkgTlVMTCwKKwkJCSBJUElQRV9IQU5ETEVf TUFTS3xJUElQRV9QQVNTX01BU0spOworICAKKworICAgIC8qIEludGVycG9zZSBvbiB0aGUg SVJRIGNvbnRyb2wgcm91dGluZXMgc28gd2UgY2FuIG1ha2UgdGhlbQorICAgICAgIGF0b21p YyB1c2luZyBodyBtYXNraW5nIGFuZCBwcmV2ZW50IHRoZSBpbnRlcnJ1cHQgbG9nIGZyb20K KyAgICAgICBiZWluZyB1bnRpbWVseSBmbHVzaGVkLiAqLworCisgICAgZm9yIChpcnEgPSAw OyBpcnEgPCBOUl9JUlFTOyBpcnErKykgCisJeworCWlmIChpcnFfZGVzY1tpcnFdLmhhbmRs ZXIgIT0gTlVMTCkKKwkgICAgX19hZGVvc19zdGRfaXJxX2R0eXBlW2lycV0gPSAqaXJxX2Rl c2NbaXJxXS5oYW5kbGVyOworCX0KKworICAgIC8qIFRoZSBvcmlnaW5hbCBjb250cm9sbGVy IHN0cnVjdHMgYXJlIG9mdGVuIHNoYXJlZCwgc28gd2UgZmlyc3QKKyAgICAgICBzYXZlIHRo ZW0gYWxsIGJlZm9yZSBjaGFuZ2luZyBhbnkgb2YgdGhlbS4gTm90aWNlIHRoYXQgd2UgZG9u J3QKKyAgICAgICBvdmVycmlkZSB0aGUgYWNrKCkgaGFuZGxlciBzaW5jZSB3ZSB3aWxsIGVu Zm9yY2UgdGhlIG5lY2Vzc2FyeQorICAgICAgIHNldHVwIGluIF9fYWRlb3NfYWNrX2lycSgp LiAqLworCisgICAgZm9yIChpcnEgPSAwOyBpcnEgPCBOUl9JUlFTOyBpcnErKykKKwl7CisJ c3RydWN0IGh3X2ludGVycnVwdF90eXBlICpoYW5kbGVyID0gaXJxX2Rlc2NbaXJxXS5oYW5k bGVyOworCisJaWYgKGhhbmRsZXIgPT0gTlVMTCkKKwkgICAgY29udGludWU7CisKKwlpZiAo aGFuZGxlci0+ZW5hYmxlICE9IE5VTEwpCisJICAgIGhhbmRsZXItPmVuYWJsZSA9ICZfX2Fk ZW9zX292ZXJyaWRlX2lycV9lbmFibGU7CisKKwlpZiAoaGFuZGxlci0+ZGlzYWJsZSAhPSBO VUxMKQorCSAgICBoYW5kbGVyLT5kaXNhYmxlID0gJl9fYWRlb3Nfb3ZlcnJpZGVfaXJxX2Rp c2FibGU7CisKKwlpZiAoaGFuZGxlci0+ZW5kICE9IE5VTEwpCisJICAgIGhhbmRsZXItPmVu ZCA9ICZfX2FkZW9zX292ZXJyaWRlX2lycV9lbmQ7CisKKwlpZiAoaGFuZGxlci0+c2V0X2Fm ZmluaXR5ICE9IE5VTEwpCisJICAgIGhhbmRsZXItPnNldF9hZmZpbml0eSA9ICZfX2FkZW9z X292ZXJyaWRlX2lycV9hZmZpbml0eTsKKwl9CisKKyAgICBfX2FkZW9zX2RlY3JfbmV4dFth ZGVvc19wcm9jZXNzb3JfaWQoKV0gPSBfX2FkZW9zX3JlYWRfdGltZWJhc2UoKSArIGdldF9k ZWMoKTsKKworICAgIGFkcF9waXBlbGluZWQgPSAxOworCisgICAgYWRlb3NfY3JpdGljYWxf ZXhpdChmbGFncyk7Cit9CisKKy8qIF9fYWRlb3NfZGlzYWJsZV9waXBlbGluZSgpIC0tIERp c2VuZ2FnZSB0aGUgcGlwZWxpbmUuICovCisKK3ZvaWQgX19hZGVvc19kaXNhYmxlX3BpcGVs aW5lICh2b2lkKQorCit7CisgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKKyAgICB1bnNpZ25l ZCBpcnE7CisKKyAgICBmbGFncyA9IGFkZW9zX2NyaXRpY2FsX2VudGVyKE5VTEwpOworCisg ICAgLyogUmVzdG9yZSBpbnRlcnJ1cHQgY29udHJvbGxlcnMuICovCisKKyAgICBmb3IgKGly cSA9IDA7IGlycSA8IE5SX0lSUVM7IGlycSsrKQorCXsKKwlpZiAoaXJxX2Rlc2NbaXJxXS5o YW5kbGVyICE9IE5VTEwpCisJICAgICppcnFfZGVzY1tpcnFdLmhhbmRsZXIgPSBfX2FkZW9z X3N0ZF9pcnFfZHR5cGVbaXJxXTsKKwl9CisKKyAgICBhZHBfcGlwZWxpbmVkID0gMDsKKwor ICAgIGFkZW9zX2NyaXRpY2FsX2V4aXQoZmxhZ3MpOworfQorCisvKiBhZGVvc192aXJ0dWFs aXplX2lycV9mcm9tKCkgLS0gQXR0YWNoIGEgaGFuZGxlciAoYW5kIG9wdGlvbmFsbHkgYQor ICAgaHcgYWNrbm93bGVkZ2Ugcm91dGluZSkgdG8gYW4gaW50ZXJydXB0IGZvciB0aGUgZ2l2 ZW4gZG9tYWluLiAqLworCitpbnQgYWRlb3NfdmlydHVhbGl6ZV9pcnFfZnJvbSAoYWRvbWFp bl90ICphZHAsCisJCQkgICAgICAgdW5zaWduZWQgaXJxLAorCQkJICAgICAgIHZvaWQgKCpo YW5kbGVyKSh1bnNpZ25lZCBpcnEpLAorCQkJICAgICAgIGludCAoKmFja25vd2xlZGdlKSh1 bnNpZ25lZCBpcnEpLAorCQkJICAgICAgIHVuc2lnbmVkIG1vZGVtYXNrKQoreworICAgIHVu c2lnbmVkIGxvbmcgZmxhZ3M7CisgICAgaW50IGVycjsKKworICAgIGlmIChpcnEgPj0gSVBJ UEVfTlJfSVJRUykKKwlyZXR1cm4gLUVJTlZBTDsKKworICAgIGlmIChhZHAtPmlycXNbaXJx XS5jb250cm9sICYgSVBJUEVfU1lTVEVNX01BU0spCisJcmV0dXJuIC1FUEVSTTsKKwkKKyAg ICBhZGVvc19zcGluX2xvY2tfaXJxc2F2ZSgmX19hZGVvc19waXBlbG9jayxmbGFncyk7CisK KyAgICBpZiAoaGFuZGxlciAhPSBOVUxMKQorCXsKKwkvKiBBIGJpdCBvZiBoYWNrIGhlcmU6 IGlmIHdlIGFyZSByZS12aXJ0dWFsaXppbmcgYW4gSVJRIGp1c3QKKwkgICB0byBjaGFuZ2Ug dGhlIGFja25vd2xlZGdlIHJvdXRpbmUgYnkgcGFzc2luZyB0aGUgc3BlY2lhbAorCSAgIEFE RU9TX1NBTUVfSEFORExFUiB2YWx1ZSwgdGhlbiBhbGxvdyB0byByZWN5Y2xlIHRoZSBjdXJy ZW50CisJICAgaGFuZGxlciBmb3IgdGhlIElSUS4gVGhpcyBhbGxvd3MgTGludXggZGV2aWNl IGRyaXZlcnMKKwkgICBtYW5hZ2luZyBzaGFyZWQgSVJRIGxpbmVzIHRvIGNhbGwgYWRlb3Nf dmlydHVhbGl6ZV9pcnEoKSBpbgorCSAgIGFkZGl0aW9uIHRvIHJlcXVlc3RfaXJxKCkganVz dCBmb3IgdGhlIHB1cnBvc2Ugb2YKKwkgICBpbnRlcnBvc2luZyB0aGVpciBvd24gc2hhcmVk IGFja25vd2xlZGdlIHJvdXRpbmUuICovCisKKwlpZiAoaGFuZGxlciA9PSBBREVPU19TQU1F X0hBTkRMRVIpCisJICAgIHsKKwkgICAgaGFuZGxlciA9IGFkcC0+aXJxc1tpcnFdLmhhbmRs ZXI7CisKKwkgICAgaWYgKGhhbmRsZXIgPT0gTlVMTCkKKwkJeworCQllcnIgPSAtRUlOVkFM OworCQlnb3RvIHVubG9ja19hbmRfZXhpdDsKKwkJfQorCSAgICB9CisJZWxzZSBpZiAoKG1v ZGVtYXNrICYgSVBJUEVfRVhDTFVTSVZFX01BU0spICE9IDAgJiYKKwkJIGFkcC0+aXJxc1tp cnFdLmhhbmRsZXIgIT0gTlVMTCkKKwkgICAgeworCSAgICBlcnIgPSAtRUJVU1k7CisJICAg IGdvdG8gdW5sb2NrX2FuZF9leGl0OworCSAgICB9CisJCisJaWYgKChtb2RlbWFzayAmIChJ UElQRV9TSEFSRURfTUFTS3xJUElQRV9QQVNTX01BU0spKSA9PSBJUElQRV9TSEFSRURfTUFT SykKKwkgICAgeworCSAgICBlcnIgPSAtRUlOVkFMOworCSAgICBnb3RvIHVubG9ja19hbmRf ZXhpdDsKKwkgICAgfQorCisJaWYgKChtb2RlbWFzayAmIElQSVBFX1NUSUNLWV9NQVNLKSAh PSAwKQorCSAgICBtb2RlbWFzayB8PSBJUElQRV9IQU5ETEVfTUFTSzsKKwl9CisgICAgZWxz ZQorCW1vZGVtYXNrICY9IH4oSVBJUEVfSEFORExFX01BU0t8SVBJUEVfU1RJQ0tZX01BU0t8 SVBJUEVfU0hBUkVEX01BU0spOworCisgICAgaWYgKGFja25vd2xlZGdlID09IE5VTEwpCisJ eworCWlmICgobW9kZW1hc2sgJiBJUElQRV9TSEFSRURfTUFTSykgPT0gMCkKKwkgICAgLyog QWNrbm93bGVkZ2UgaGFuZGxlciB1bnNwZWNpZmllZCAtLSB0aGlzIGlzIG9rIGluCisJICAg ICAgIG5vbi1zaGFyZWQgbWFuYWdlbWVudCBtb2RlLCBidXQgd2Ugd2lsbCBmb3JjZSB0aGUg dXNlCisJICAgICAgIG9mIHRoZSBMaW51eC1kZWZpbmVkIGhhbmRsZXIgaW5zdGVhZC4gKi8K KwkgICAgYWNrbm93bGVkZ2UgPSBhZHBfcm9vdC0+aXJxc1tpcnFdLmFja25vd2xlZGdlOwor CWVsc2UKKwkgICAgeworCSAgICAvKiBBIHZhbGlkIGFja25vd2xlZGdlIGhhbmRsZXIgdG8g YmUgY2FsbGVkIGluIHNoYXJlZCBtb2RlCisJICAgICAgIGlzIHJlcXVpcmVkIHdoZW4gZGVj bGFyaW5nIGEgc2hhcmVkIElSUS4gKi8KKwkgICAgZXJyID0gLUVJTlZBTDsKKwkgICAgZ290 byB1bmxvY2tfYW5kX2V4aXQ7CisJICAgIH0KKwl9CisKKyAgICBhZHAtPmlycXNbaXJxXS5o YW5kbGVyID0gaGFuZGxlcjsKKyAgICBhZHAtPmlycXNbaXJxXS5hY2tub3dsZWRnZSA9IGFj a25vd2xlZGdlOworICAgIGFkcC0+aXJxc1tpcnFdLmNvbnRyb2wgPSBtb2RlbWFzazsKKwor ICAgIGlmIChpcnEgPCBOUl9JUlFTICYmCisJaGFuZGxlciAhPSBOVUxMICYmCisJIWFkZW9z X3ZpcnR1YWxfaXJxX3AoaXJxKSAmJgorCShtb2RlbWFzayAmIElQSVBFX0VOQUJMRV9NQVNL KSAhPSAwKQorCXsKKwlpZiAoYWRwICE9IGFkcF9jdXJyZW50KQorCSAgICB7CisJICAgIC8q IElSUSBlbmFibGUvZGlzYWJsZSBzdGF0ZSBpcyBkb21haW4tc2Vuc2l0aXZlLCBzbyB3ZSBt YXkKKwkgICAgICAgbm90IGNoYW5nZSBpdCBmb3IgYW5vdGhlciBkb21haW4uIFdoYXQgaXMg YWxsb3dlZAorCSAgICAgICBob3dldmVyIGlzIGZvcmNpbmcgc29tZSBkb21haW4gdG8gaGFu ZGxlIGFuIGludGVycnVwdAorCSAgICAgICBzb3VyY2UsIGJ5IHBhc3NpbmcgdGhlIHByb3Bl ciAnYWRwJyBkZXNjcmlwdG9yIHdoaWNoCisJICAgICAgIHRodXMgbWF5IGJlIGRpZmZlcmVu dCBmcm9tIGFkcF9jdXJyZW50LiAqLworCSAgICBlcnIgPSAtRVBFUk07CisJICAgIGdvdG8g dW5sb2NrX2FuZF9leGl0OworCSAgICB9CisKKwllbmFibGVfaXJxKGlycSk7CisJfQorCisg ICAgZXJyID0gMDsKKwordW5sb2NrX2FuZF9leGl0OgorCisgICAgYWRlb3Nfc3Bpbl91bmxv Y2tfaXJxcmVzdG9yZSgmX19hZGVvc19waXBlbG9jayxmbGFncyk7CisKKyAgICByZXR1cm4g ZXJyOworfQorCisvKiBhZGVvc19jb250cm9sX2lycSgpIC0tIENoYW5nZSBhbiBpbnRlcnJ1 cHQgbW9kZS4gVGhpcyBhZmZlY3RzIHRoZQorICAgd2F5IGEgZ2l2ZW4gaW50ZXJydXB0IGlz IGhhbmRsZWQgYnkgQURFT1MgZm9yIHRoZSBjdXJyZW50CisgICBkb21haW4uIHNldG1hc2sg aXMgYSBiaXRtYXNrIHRlbGxpbmcgd2hldGhlcjoKKyAgIC0gdGhlIGludGVycnVwdCBzaG91 bGQgYmUgcGFzc2VkIHRvIHRoZSBkb21haW4gKElQSVBFX0hBTkRMRV9NQVNLKSwKKyAgICAg YW5kL29yCisgICAtIHRoZSBpbnRlcnJ1cHQgc2hvdWxkIGJlIHBhc3NlZCBkb3duIHRvIHRo ZSBsb3dlciBwcmlvcml0eSBkb21haW4ocykKKyAgICAgaW4gdGhlIHBpcGVsaW5lIChJUElQ RV9QQVNTX01BU0spLgorICAgVGhpcyBsZWFkcyB0byBmb3VyIHBvc3NpYmlsaXRpZXM6Cisg ICAtIFBBU1Mgb25seSA9PiBJZ25vcmUgdGhlIGludGVycnVwdAorICAgLSBIQU5ETEUgb25s eSA9PiBUZXJtaW5hdGUgdGhlIGludGVycnVwdCAocHJvY2VzcyBidXQgZG9uJ3QgcGFzcyBk b3duKQorICAgLSBQQVNTICsgSEFORExFID0+IEFjY2VwdCB0aGUgaW50ZXJydXB0IChwcm9j ZXNzIGFuZCBwYXNzIGRvd24pCisgICAtIDxub25lPiA9PiBEaXNjYXJkIHRoZSBpbnRlcnJ1 cHQKKyAgIC0gRFlOQU1JQyBpcyBjdXJyZW50bHkgYW4gYWxpYXMgb2YgSEFORExFIHNpbmNl IGl0IG1hcmtzIGFuIGludGVycnVwdAorICAgd2hpY2ggaXMgcHJvY2Vzc2VkIGJ5IHRoZSBj dXJyZW50IGRvbWFpbiBidXQgbm90IGltcGxpY2l0ZWx5IHBhc3NlZAorICAgZG93biB0byB0 aGUgcGlwZWxpbmUsIGxldHRpbmcgdGhlIGRvbWFpbidzIGhhbmRsZXIgY2hvb3NlIG9uIGEg Y2FzZS0KKyAgIGJ5LWNhc2UgYmFzaXMgd2hldGhlciB0aGUgaW50ZXJydXB0IHByb3BhZ2F0 aW9uIHNob3VsZCBiZSBmb3JjZWQKKyAgIHVzaW5nIGFkZW9zX3Byb3BhZ2F0ZV9pcnEoKS4K KyAgIGNscm1hc2sgY2xlYXJzIHRoZSBjb3JyZXNwb25kaW5nIGJpdHMgZnJvbSB0aGUgY29u dHJvbCBmaWVsZCBiZWZvcmUKKyAgIHNldG1hc2sgaXMgYXBwbGllZC4KKyovCisKK2ludCBh ZGVvc19jb250cm9sX2lycSAodW5zaWduZWQgaXJxLAorCQkgICAgICAgdW5zaWduZWQgY2xy bWFzaywKKwkJICAgICAgIHVuc2lnbmVkIHNldG1hc2spCit7CisgICAgaXJxX2Rlc2NfdCAq ZGVzYzsKKyAgICB1bnNpZ25lZCBsb25nIGZsYWdzOworCisgICAgaWYgKGlycSA+PSBJUElQ RV9OUl9JUlFTKQorCXJldHVybiAtRUlOVkFMOworCisgICAgaWYgKGFkcF9jdXJyZW50LT5p cnFzW2lycV0uY29udHJvbCAmIElQSVBFX1NZU1RFTV9NQVNLKQorCXJldHVybiAtRVBFUk07 CisJCisgICAgaWYgKCgoc2V0bWFza3xjbHJtYXNrKSAmIElQSVBFX1NIQVJFRF9NQVNLKSAh PSAwKQorCXJldHVybiAtRUlOVkFMOworCQorICAgIGRlc2MgPSBpcnFfZGVzYyArIGlycTsK KworICAgIGlmIChhZHBfY3VycmVudC0+aXJxc1tpcnFdLmhhbmRsZXIgPT0gTlVMTCkKKwlz ZXRtYXNrICY9IH4oSVBJUEVfSEFORExFX01BU0t8SVBJUEVfU1RJQ0tZX01BU0spOworCisg ICAgaWYgKChzZXRtYXNrICYgSVBJUEVfU1RJQ0tZX01BU0spICE9IDApCisJc2V0bWFzayB8 PSBJUElQRV9IQU5ETEVfTUFTSzsKKworICAgIGlmICgoY2xybWFzayAmIChJUElQRV9IQU5E TEVfTUFTS3xJUElQRV9TVElDS1lfTUFTSykpICE9IDApCS8qIElmIG9uZSBnb2VzLCBib3Ro IGdvLiAqLworCWNscm1hc2sgfD0gKElQSVBFX0hBTkRMRV9NQVNLfElQSVBFX1NUSUNLWV9N QVNLKTsKKworICAgIGFkZW9zX3NwaW5fbG9ja19pcnFzYXZlKCZfX2FkZW9zX3BpcGVsb2Nr LGZsYWdzKTsKKworICAgIGFkcF9jdXJyZW50LT5pcnFzW2lycV0uY29udHJvbCAmPSB+Y2xy bWFzazsKKyAgICBhZHBfY3VycmVudC0+aXJxc1tpcnFdLmNvbnRyb2wgfD0gc2V0bWFzazsK KworICAgIGlmICgoc2V0bWFzayAmIElQSVBFX0VOQUJMRV9NQVNLKSAhPSAwKQorCWVuYWJs ZV9pcnEoaXJxKTsKKyAgICBlbHNlIGlmICgoY2xybWFzayAmIElQSVBFX0VOQUJMRV9NQVNL KSAhPSAwKQorCWRpc2FibGVfaXJxKGlycSk7CisKKyAgICBhZGVvc19zcGluX3VubG9ja19p cnFyZXN0b3JlKCZfX2FkZW9zX3BpcGVsb2NrLGZsYWdzKTsKKworICAgIHJldHVybiAwOwor fQorCisjaWZkZWYgQ09ORklHX0FERU9TX1RIUkVBRFMKKwordm9pZCBfX2FkZW9zX2luaXRf ZG9tYWluIChhZG9tYWluX3QgKmFkcCwgYWRhdHRyX3QgKmF0dHIpCisKK3sKKyAgICBpbnQg ZXN0YWNrc3ogPSBhdHRyLT5lc3RhY2tzeiA+IDAgPyBhdHRyLT5lc3RhY2tzeiA6IDE2Mzg0 LCBfY3B1aWQ7CisgICAgdW5zaWduZWQgbG9uZyBmbGFncywgKmtzcDsKKyAgICBhZGVvc19k ZWNsYXJlX2NwdWlkOworCisgICAgYWRlb3NfaHdfbG9jYWxfaXJxX2ZsYWdzKGZsYWdzKTsK KworICAgIGZvciAoX2NwdWlkID0gMDsgX2NwdWlkIDwgbnVtX29ubGluZV9jcHVzKCk7IF9j cHVpZCsrKQorCXsKKwlhZHAtPmVzdGFja2Jhc2VbX2NwdWlkXSA9ICh1bnNpZ25lZCBsb25n KWttYWxsb2MoZXN0YWNrc3osR0ZQX0tFUk5FTCk7CisgICAgCisJaWYgKGFkcC0+ZXN0YWNr YmFzZVtfY3B1aWRdID09IDApCisJICAgIHBhbmljKCJBZGVvczogTm8gbWVtb3J5IGZvciBk b21haW4gc3RhY2sgb24gQ1BVICMlZCIsX2NwdWlkKTsKKwkKKwlhZHAtPmVzcFtfY3B1aWRd ID0gYWRwLT5lc3RhY2tiYXNlW19jcHVpZF07CisJa3NwID0gKHVuc2lnbmVkIGxvbmcgKiko KGFkcC0+ZXNwW19jcHVpZF0gKyBlc3RhY2tzeiAtIDE2KSAmIH4weGYpOworCSprc3AgPSAw TDsgLyogZmlyc3Qgc3RhY2sgZnJhbWUgYmFjay1jaGFpbiAqLworCWtzcCA9IGtzcCAtIFNU QUNLX0ZSQU1FX09WRVJIRUFEOyAvKiBmaXJzdCBzdGFjayBmcmFtZSAoZW50cnkgdXNlcykg CisJCQkJCSAgICogKGxlc3Mgd291bGQgZG8pICovCisJKmtzcCA9ICh1bnNpZ25lZCBsb25n KWtzcCtTVEFDS19GUkFNRV9PVkVSSEVBRDsgLyogc2Vjb25kIGJhY2stY2hhaW4gKi8KKwlr c3AgPSBrc3AgLSAyMjQ7IC8qIGRvbWFpbiBjb250ZXh0ICovCisJYWRwLT5lc3BbX2NwdWlk XSA9ICh1bnNpZ25lZCBsb25nKWtzcCAtIFNUQUNLX0ZSQU1FX09WRVJIRUFEOworCSooKHVu c2lnbmVkIGxvbmcgKilhZHAtPmVzcFtfY3B1aWRdKSA9ICh1bnNpZ25lZCBsb25nKWtzcCAr IDIyNDsgLypiYWNrLWNoYWluKi8KKwkvKiBOT1RFOiB0aGVzZSBkZXBlbmQgb24gX2FkZW9z X3N3aXRjaF9kb21haW4gb3JkZXJpbmcgKi8KKwlrc3BbMThdID0gKHVuc2lnbmVkIGxvbmcp Z2V0X3BhY2EoKTsgLyogcjEzIG5lZWRzIHRvIGhvbGQgcGFjYSAqLworCWtzcFsxOV0gPSAo X2NwdWlkID09IGNwdWlkKTsgLyogcjMgKi8KKwlrc3BbMjBdID0gKCh1bnNpZ25lZCBsb25n ICopYXR0ci0+ZW50cnkpWzFdOyAvKiByMiA9IFRPQyBiYXNlICovCisJa3NwWzI1XSA9ICgo dW5zaWduZWQgbG9uZyAqKWF0dHItPmVudHJ5KVswXTsgLyogbHIgPSBlbnRyeSBhZGRyLiAq LworCWtzcFsyNl0gPSBmbGFncyAmIH5NU1JfRUU7IC8qIG1zciAqLwkKKwl9Cit9CisKKyNl bHNlIC8qICFDT05GSUdfQURFT1NfVEhSRUFEUyAqLworCit2b2lkIF9fYWRlb3NfaW5pdF9k b21haW4gKGFkb21haW5fdCAqYWRwLCBhZGF0dHJfdCAqYXR0cikKKwore30KKworI2VuZGlm IC8qIENPTkZJR19BREVPU19USFJFQURTICovCisKK3ZvaWQgX19hZGVvc19jbGVhbnVwX2Rv bWFpbiAoYWRvbWFpbl90ICphZHApCisKK3sKKyAgICBpbnQgbnJfY3B1cyA9IG51bV9vbmxp bmVfY3B1cygpOworICAgIGludCBfY3B1aWQ7CisKKyAgICBhZGVvc191bnN0YWxsX3BpcGVs aW5lX2Zyb20oYWRwKTsKKworICAgIGZvciAoX2NwdWlkID0gMDsgX2NwdWlkIDwgbnJfY3B1 czsgX2NwdWlkKyspCisJeworI2lmZGVmIENPTkZJR19TTVAKKwl3aGlsZSAoYWRwLT5jcHVk YXRhW19jcHVpZF0uaXJxX3BlbmRpbmdfaGkgIT0gMCkKKwkgICAgY3B1X3JlbGF4KCk7CisK Kwl3aGlsZSAodGVzdF9iaXQoSVBJUEVfWFBFTkRfRkxBRywmYWRwLT5jcHVkYXRhW19jcHVp ZF0uc3RhdHVzKSkKKwkgICAgY3B1X3JlbGF4KCk7CisjZW5kaWYgLyogQ09ORklHX1NNUCAq LworCisjaWZkZWYgQ09ORklHX0FERU9TX1RIUkVBRFMKKwlpZiAoYWRwLT5lc3RhY2tiYXNl W19jcHVpZF0gIT0gMCkKKwkgICAga2ZyZWUoKHZvaWQgKilhZHAtPmVzdGFja2Jhc2VbX2Nw dWlkXSk7CisjZW5kaWYgLyogQ09ORklHX0FERU9TX1RIUkVBRFMgKi8KKwl9Cit9CisKK2lu dCBhZGVvc19nZXRfc3lzaW5mbyAoYWRzeXNpbmZvX3QgKmluZm8pCisKK3sKKyAgICBpbmZv LT5uY3B1cyA9IG51bV9vbmxpbmVfY3B1cygpOworICAgIGluZm8tPmNwdWZyZXEgPSBhZGVv c19jcHVfZnJlcSgpOworICAgIGluZm8tPmFyY2hkZXAudG1pcnEgPSBBREVPU19USU1FUl9W SVJROworICAgIGluZm8tPmFyY2hkZXAudG1mcmVxID0gaW5mby0+Y3B1ZnJlcTsKKworICAg IHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2FkZW9zX3NldF9kZWNyICh2b2lkKQor Cit7CisgICAgYWRlb3NfZGVjbGFyZV9jcHVpZDsKKworICAgIGFkZW9zX2xvYWRfY3B1aWQo KTsKKworICAgIC8qZGlzYXJtX2RlY3JbY3B1aWRdID0gKF9fYWRlb3NfZGVjcl90aWNrcyAh PSB0Yl90aWNrc19wZXJfamlmZnkpOyovCisgICAgX19hZGVvc19kZWNyX25leHRbY3B1aWRd ID0gX19hZGVvc19yZWFkX3RpbWViYXNlKCkgKyBfX2FkZW9zX2RlY3JfdGlja3M7CisgICAg c2V0X2RlYyhfX2FkZW9zX2RlY3JfdGlja3MpOworfQorCitpbnQgYWRlb3NfdHVuZV90aW1l ciAodW5zaWduZWQgbG9uZyBucywgaW50IGZsYWdzKQorCit7CisgICAgdW5zaWduZWQgbG9u ZyB4LCB0aWNrczsKKworICAgIGlmIChmbGFncyAmIEFERU9TX1JFU0VUX1RJTUVSKQorCXRp Y2tzID0gdGJfdGlja3NfcGVyX2ppZmZ5OworICAgIGVsc2UKKwl7CisJdGlja3MgPSBucyAq IHRiX3RpY2tzX3Blcl9qaWZmeSAvICgxMDAwMDAwMDAwIC8gSFopOworCisJaWYgKHRpY2tz ID4gdGJfdGlja3NfcGVyX2ppZmZ5KQorCSAgICByZXR1cm4gLUVJTlZBTDsKKwl9CisKKyAg ICB4ID0gYWRlb3NfY3JpdGljYWxfZW50ZXIoJl9fYWRlb3Nfc2V0X2RlY3IpOyAvKiBTeW5j IHdpdGggYWxsIENQVXMgKi8KKyAgICBfX2FkZW9zX2RlY3JfdGlja3MgPSB0aWNrczsKKyAg ICBfX2FkZW9zX3NldF9kZWNyKCk7CisgICAgYWRlb3NfY3JpdGljYWxfZXhpdCh4KTsKKwor ICAgIHJldHVybiAwOworfQorCisvKiBhZGVvc19zZW5kX2lwaSgpIC0tIFNlbmQgYSBzcGVj aWZpZWQgc2VydmljZSBJUEkgdG8gYSBzZXQgb2YKKyAgIHByb2Nlc3NvcnMuICovCisKK2lu dCBhZGVvc19zZW5kX2lwaSAodW5zaWduZWQgaXBpLCBjcHVtYXNrX3QgY3B1bWFzaykKKwor eworICAgIHByaW50ayhLRVJOX1dBUk5JTkcgIkFkZW9zOiBDYWxsIHRvIHVuaW1wbGVtZW50 ZWQgYWRlb3Nfc2VuZF9pcGkoKSBmcm9tICVzXG4iLGFkcF9jdXJyZW50LT5uYW1lKTsKKyAg ICByZXR1cm4gMDsKK30KZGlmZiAtTnJ1IGxpbnV4LTIuNi4xMC9hcmNoL3BwYzY0L0tjb25m aWcgbGludXgtMi42LjEwLWFkZW9zLXBwYzY0LWRldmVsL2FyY2gvcHBjNjQvS2NvbmZpZwot LS0gbGludXgtMi42LjEwL2FyY2gvcHBjNjQvS2NvbmZpZwkyMDA0LTEyLTI0IDIzOjM0OjU4 LjAwMDAwMDAwMCArMDIwMAorKysgbGludXgtMi42LjEwLWFkZW9zLXBwYzY0LWRldmVsL2Fy Y2gvcHBjNjQvS2NvbmZpZwkyMDA1LTA1LTEyIDEzOjM2OjUxLjAwMDAwMDAwMCArMDMwMApA QCAtMzcwLDYgKzM3MCw4IEBACiAJZGVwZW5kcyBvbiBWSU9DT05TIHx8IFZJT0RBU0QgfHwg VklPQ0QgfHwgVklPVEFQRSB8fCBWRVRICiAJZGVmYXVsdCB5CiAKK3NvdXJjZSAiYWRlb3Mv S2NvbmZpZyIKKwogc291cmNlICJhcmNoL3BwYzY0L29wcm9maWxlL0tjb25maWciCiAKIHNv dXJjZSAiYXJjaC9wcGM2NC9LY29uZmlnLmRlYnVnIgpkaWZmIC1OcnUgbGludXgtMi42LjEw L2FyY2gvcHBjNjQva2VybmVsL2FkZW9zLmMgbGludXgtMi42LjEwLWFkZW9zLXBwYzY0LWRl dmVsL2FyY2gvcHBjNjQva2VybmVsL2FkZW9zLmMKLS0tIGxpbnV4LTIuNi4xMC9hcmNoL3Bw YzY0L2tlcm5lbC9hZGVvcy5jCTE5NzAtMDEtMDEgMDI6MDA6MDAuMDAwMDAwMDAwICswMjAw CisrKyBsaW51eC0yLjYuMTAtYWRlb3MtcHBjNjQtZGV2ZWwvYXJjaC9wcGM2NC9rZXJuZWwv YWRlb3MuYwkyMDA1LTA2LTAxIDE1OjUyOjM3LjAwMDAwMDAwMCArMDMwMApAQCAtMCwwICsx LDY3MSBAQAorLyoKKyAqICAgbGludXgvYXJjaC9wcGM2NC9rZXJuZWwvYWRlb3MuYworICoK KyAqICAgQWRlb3MgNjQtYml0IFBvd2VyUEMgYWRvcHRpb24KKyAqICAgQ29weXJpZ2h0IChD KSAyMDA1IFRhbmVsaSBWw6Row6RrYW5nYXMgYW5kIEhlaWtraSBMaW5kaG9sbQorICogICBi YXNlZCBvbiBwcmV2aW91cyB3b3JrOgorICogICAgIAorICogICBDb3B5cmlnaHQgKEMpIDIw MDQgUGhpbGlwcGUgR2VydW0uCisgKgorICogICBBZGVvcy9QUEMgcG9ydCBvdmVyIDIuNiBi YXNlZCBvbiB0aGUgcHJldmlvdXMgMi40IGltcGxlbWVudGF0aW9uIGJ5OgorICoKKyAqICAg Q29weXJpZ2h0IChDKSAyMDA0IFdvbGZnYW5nIEdyYW5kZWdnZXIuCisgKgorICogICBJdCBm b2xsb3dzIGNsb3NlbHkgdGhlIEFSTSBhbmQgeDg2IHBvcnRzIG9mIEFERU9TLgorICoKKyAq ICAgQ29weXJpZ2h0IChDKSAyMDAzIFBoaWxpcHBlIEdlcnVtLgorICoKKyAqICAgVGhpcyBw cm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v ciBtb2RpZnkKKyAqICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICAgdGhlIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UgTUEgMDIxMzksCisg KiAgIFVTQTsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg b3B0aW9uKSBhbnkgbGF0ZXIKKyAqICAgdmVyc2lvbi4KKyAqCisgKiAgIFRoaXMgcHJvZ3Jh bSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor ICogICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll ZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICBZb3Ugc2hvdWxkIGhhdmUgcmVj ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBh bG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0 d2FyZQorICogICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAz MzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqICAgQXJjaGl0ZWN0dXJl LWRlcGVuZGVudCBBREVPUyBjb3JlIHN1cHBvcnQgZm9yIFBvd2VyUEMKKyAqLworCisjaW5j bHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5j bHVkZSA8bGludXgvc21wLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRl IDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8 bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8 bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFz bS9hdG9taWMuaD4KKyNpbmNsdWRlIDxhc20vaHdfaXJxLmg+CisjaW5jbHVkZSA8YXNtL2ly cS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS90aW1lLmg+CisjaW5j bHVkZSA8YXNtL21hY2hkZXAuaD4gLyogcHBjX21kICovCisKKyNpZmRlZiBDT05GSUdfU01Q CisKK3N0YXRpYyBjcHVtYXNrX3QgX19hZGVvc19jcHVfc3luY19tYXA7CisKK3N0YXRpYyBj cHVtYXNrX3QgX19hZGVvc19jcHVfbG9ja19tYXA7CisKK3N0YXRpYyBzcGlubG9ja190IF9f YWRlb3NfY3B1X2JhcnJpZXIgPSBTUElOX0xPQ0tfVU5MT0NLRUQ7CisKK3N0YXRpYyBhdG9t aWNfdCBfX2FkZW9zX2NyaXRpY2FsX2NvdW50ID0gQVRPTUlDX0lOSVQoMCk7CisKK3N0YXRp YyB2b2lkICgqX19hZGVvc19jcHVfc3luYykodm9pZCk7CisKKyNlbmRpZiAvKiBDT05GSUdf U01QICovCisKK3ZvaWQgZG9fSVJRKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKworZXh0ZXJu IHN0cnVjdCBsaXN0X2hlYWQgX19hZGVvc19waXBlbGluZTsKKworc3RydWN0IHB0X3JlZ3Mg X19hZGVvc19pcnFfcmVnczsKKworLyogQ3VycmVudCByZWxvYWQgdmFsdWUgZm9yIHRoZSBk ZWNyZW1lbnRlci4gKi8KK3Vuc2lnbmVkIGxvbmcgX19hZGVvc19kZWNyX3RpY2tzOworCisv KiBOZXh0IHRpY2sgZGF0ZSAodGltZWJhc2UgdmFsdWUpLiAqLwordW5zaWduZWQgbG9uZyBf X2FkZW9zX2RlY3JfbmV4dFtBREVPU19OUl9DUFVTXTsKKworc3RhdGljIGlubGluZSB1bnNp Z25lZCBsb25nIGZmbnogKHVuc2lnbmVkIGxvbmcgdWwpIHsKKworICAgIF9fYXNtX18gX192 b2xhdGlsZV9fICgiY250bHpkICUwLCAlMSIgOiAiPXIiICh1bCkgOiAiciIgKHVsICYgKC11 bCkpKTsKKyAgICByZXR1cm4gNjMgLSB1bDsKK30KKworI2lmZGVmIENPTkZJR19TTVAKKwor LyogQWx3YXlzIGNhbGxlZCB3aXRoIGh3IGludGVycnVwdHMgb2ZmLiAqLworCitzdGF0aWMg dm9pZCBfX2FkZW9zX2RvX2NyaXRpY2FsX3N5bmMgKHVuc2lnbmVkIGlycSkKKworeworICAg IGFkZW9zX2RlY2xhcmVfY3B1aWQ7CisKKyAgICBhZGVvc19sb2FkX2NwdWlkKCk7CisKKyAg ICBjcHVfc2V0KGNwdWlkLF9fYWRlb3NfY3B1X3N5bmNfbWFwKTsKKworICAgIC8qIE5vdyB3 ZSBhcmUgaW4gc3luYyB3aXRoIHRoZSBsb2NrIHJlcXVlc3RvciBydW5uaW5nIG9uIGFub3Ro ZXIKKyAgICAgICBDUFUuIEVudGVyIGEgc3Bpbm5pbmcgd2FpdCB1bnRpbCBoZSByZWxlYXNl cyB0aGUgZ2xvYmFsCisgICAgICAgbG9jay4gKi8KKyAgICBhZGVvc19zcGluX2xvY2soJl9f YWRlb3NfY3B1X2JhcnJpZXIpOworCisgICAgLyogR290IGl0LiBOb3cgZ2V0IG91dC4gKi8K KworICAgIGlmIChfX2FkZW9zX2NwdV9zeW5jKQorCS8qIENhbGwgdGhlIHN5bmMgcm91dGlu ZSBpZiBhbnkuICovCisJX19hZGVvc19jcHVfc3luYygpOworCisgICAgYWRlb3Nfc3Bpbl91 bmxvY2soJl9fYWRlb3NfY3B1X2JhcnJpZXIpOworCisgICAgY3B1X2NsZWFyKGNwdWlkLF9f YWRlb3NfY3B1X3N5bmNfbWFwKTsKK30KKworI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KKwor LyogYWRlb3NfY3JpdGljYWxfZW50ZXIoKSAtLSBHcmFiIHRoZSBzdXBlcmxvY2sgZm9yIGVu dGVyaW5nIGEgZ2xvYmFsCisgICBjcml0aWNhbCBzZWN0aW9uLiBPbiB0aGlzIHVuaXByb2Nl c3Nvci1vbmx5IGFyY2gsIHRoaXMgaXMgaWRlbnRpY2FsCisgICB0byBodyBjbGkoKS4gKi8K KwordW5zaWduZWQgbG9uZyBhZGVvc19jcml0aWNhbF9lbnRlciAodm9pZCAoKnN5bmNmbiko dm9pZCkpCisKK3sKKyAgICB1bnNpZ25lZCBsb25nIGZsYWdzOworCisgICAgYWRlb3NfaHdf bG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisjaWZkZWYgQ09ORklHX1NNUAorICAgIGlmIChu dW1fb25saW5lX2NwdXMoKSA+IDEpIC8qIFdlIG1pZ2h0IGJlIHJ1bm5pbmcgYSBTTVAta2Vy bmVsIG9uIGEgVVAgYm94Li4uICovCisJeworCWFkZW9zX2RlY2xhcmVfY3B1aWQ7CisJY3B1 bWFza190IGxvY2tfbWFwOworCisJYWRlb3NfbG9hZF9jcHVpZCgpOworCisJaWYgKCFjcHVf dGVzdF9hbmRfc2V0KGNwdWlkLF9fYWRlb3NfY3B1X2xvY2tfbWFwKSkKKwkgICAgeworCSAg ICB3aGlsZSAoY3B1X3Rlc3RfYW5kX3NldChCSVRTX1BFUl9MT05HIC0gMSxfX2FkZW9zX2Nw dV9sb2NrX21hcCkpCisJCXsKKwkJLyogUmVmZXIgdG8gdGhlIGV4cGxhbmF0aW9ucyBmb3Vu ZCBpbgorCQkgICBsaW51eC9hcmNoL2FzbS1pMzg2L2lycS5jIGFib3V0CisJCSAgIFNVU1BF Q1RFRF9DUFVfT1JfQ0hJUFNFVF9CVUdfV09SS0FST1VORCBmb3IgbW9yZSBhYm91dAorCQkg ICB0aGlzIHN0cmFuZ2UgbG9vcC4gKi8KKwkJaW50IG4gPSAwOworCQlkbyB7IGNwdV9yZWxh eCgpOyB9IHdoaWxlICgrK24gPCBjcHVpZCk7CisJCX0KKworCSAgICBhZGVvc19zcGluX2xv Y2soJl9fYWRlb3NfY3B1X2JhcnJpZXIpOworCisJICAgIF9fYWRlb3NfY3B1X3N5bmMgPSBz eW5jZm47CisKKwkgICAgLyogU2VuZCB0aGUgc3luYyBJUEkgdG8gYWxsIHByb2Nlc3NvcnMg YnV0IHRoZSBjdXJyZW50IG9uZS4gKi8KKwkgICAgX19hZGVvc19zZW5kX0lQSV9hbGxidXRz ZWxmKEFERU9TX0NSSVRJQ0FMX1ZFQ1RPUik7CisKKwkgICAgY3B1c19hbmRub3QobG9ja19t YXAsY3B1X29ubGluZV9tYXAsX19hZGVvc19jcHVfbG9ja19tYXApOworCisJICAgIHdoaWxl ICghY3B1c19lcXVhbChfX2FkZW9zX2NwdV9zeW5jX21hcCxsb2NrX21hcCkpCisJCWNwdV9y ZWxheCgpOworCSAgICB9CisKKwlhdG9taWNfaW5jKCZfX2FkZW9zX2NyaXRpY2FsX2NvdW50 KTsKKwl9CisjZW5kaWYgLyogQ09ORklHX1NNUCAqLworCisgICAgcmV0dXJuIGZsYWdzOwor fQorCisvKiBhZGVvc19jcml0aWNhbF9leGl0KCkgLS0gUmVsZWFzZSB0aGUgc3VwZXJsb2Nr LiAqLworCit2b2lkIGFkZW9zX2NyaXRpY2FsX2V4aXQgKHVuc2lnbmVkIGxvbmcgZmxhZ3Mp CisKK3sKKyNpZmRlZiBDT05GSUdfU01QCisgICAgaWYgKG51bV9vbmxpbmVfY3B1cygpID4g MSkgLyogV2UgbWlnaHQgYmUgcnVubmluZyBhIFNNUC1rZXJuZWwgb24gYSBVUCBib3guLi4g Ki8KKwl7CisJYWRlb3NfZGVjbGFyZV9jcHVpZDsKKworCWFkZW9zX2xvYWRfY3B1aWQoKTsK KworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZfX2FkZW9zX2NyaXRpY2FsX2NvdW50KSkK KwkgICAgeworCSAgICBhZGVvc19zcGluX3VubG9jaygmX19hZGVvc19jcHVfYmFycmllcik7 CisKKwkgICAgd2hpbGUgKCFjcHVzX2VtcHR5KF9fYWRlb3NfY3B1X3N5bmNfbWFwKSkKKwkJ Y3B1X3JlbGF4KCk7CisKKwkgICAgY3B1X2NsZWFyKGNwdWlkLF9fYWRlb3NfY3B1X2xvY2tf bWFwKTsKKwkgICAgY3B1X2NsZWFyKEJJVFNfUEVSX0xPTkcgLSAxLF9fYWRlb3NfY3B1X2xv Y2tfbWFwKTsKKwkgICAgfQorCX0KKyNlbmRpZiAvKiBDT05GSUdfU01QICovCisKKyAgICBh ZGVvc19od19sb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKK3ZvaWQgX19hZGVvc19p bml0X3BsYXRmb3JtICh2b2lkKQorCit7CisgICAgdW5zaWduZWQgdGltZXJfdmlycTsKKwor ICAgIC8qIEFsbG9jYXRlIGEgdmlydHVhbCBJUlEgZm9yIHRoZSBkZWNyZW1lbnRlciB0cmFw IGVhcmx5IHRvIGdldCBpdAorICAgICAgIG1hcHBlZCB0byBJUElQRV9WSVJRX0JBU0UgKi8K KworICAgIHRpbWVyX3ZpcnEgPSBhZGVvc19hbGxvY19pcnEoKTsKKworICAgIGlmICh0aW1l cl92aXJxICE9IEFERU9TX1RJTUVSX1ZJUlEpCisJcGFuaWMoIkFkZW9zOiBjYW5ub3QgcmVz ZXJ2ZSB0aW1lciB2aXJxICMlZCAoZ290ICMlZCkiLAorCSAgICAgIEFERU9TX1RJTUVSX1ZJ UlEsCisJICAgICAgdGltZXJfdmlycSk7CisKKyAgICBfX2FkZW9zX2RlY3JfdGlja3MgPSB0 Yl90aWNrc19wZXJfamlmZnk7Cit9CisKK3ZvaWQgX19hZGVvc19pbml0X3N0YWdlIChhZG9t YWluX3QgKmFkcCkKKworeworICAgIGludCBjcHVpZCwgbjsKKworICAgIGZvciAoY3B1aWQg PSAwOyBjcHVpZCA8IEFERU9TX05SX0NQVVM7IGNwdWlkKyspCisJeworCWFkcC0+Y3B1ZGF0 YVtjcHVpZF0uaXJxX3BlbmRpbmdfaGkgPSAwOworCisJZm9yIChuID0gMDsgbiA8IElQSVBF X0lSUV9JV09SRFM7IG4rKykKKwkgICAgYWRwLT5jcHVkYXRhW2NwdWlkXS5pcnFfcGVuZGlu Z19sb1tuXSA9IDA7CisKKwlmb3IgKG4gPSAwOyBuIDwgSVBJUEVfTlJfSVJRUzsgbisrKQor CSAgICBhZHAtPmNwdWRhdGFbY3B1aWRdLmlycV9oaXRzW25dID0gMDsKKwl9CisKKyAgICBm b3IgKG4gPSAwOyBuIDwgSVBJUEVfTlJfSVJRUzsgbisrKQorCXsKKwlhZHAtPmlycXNbbl0u YWNrbm93bGVkZ2UgPSBOVUxMOworCWFkcC0+aXJxc1tuXS5oYW5kbGVyID0gTlVMTDsKKwlh ZHAtPmlycXNbbl0uY29udHJvbCA9IElQSVBFX1BBU1NfTUFTSzsJLyogUGFzcyBidXQgZG9u J3QgaGFuZGxlICovCisJfQorCisjaWZkZWYgQ09ORklHX1NNUAorICAgIGFkcC0+aXJxc1tB REVPU19DUklUSUNBTF9JUEldLmFja25vd2xlZGdlID0gJl9fYWRlb3NfYWNrX2lycTsKKyAg ICBhZHAtPmlycXNbQURFT1NfQ1JJVElDQUxfSVBJXS5oYW5kbGVyID0gJl9fYWRlb3NfZG9f Y3JpdGljYWxfc3luYzsKKyAgICAvKiBJbW1lZGlhdGVseSBoYW5kbGUgaW4gdGhlIGN1cnJl bnQgZG9tYWluIGJ1dCAqbmV2ZXIqIHBhc3MgKi8KKyAgICBhZHAtPmlycXNbQURFT1NfQ1JJ VElDQUxfSVBJXS5jb250cm9sID0gSVBJUEVfSEFORExFX01BU0t8SVBJUEVfU1RJQ0tZX01B U0t8SVBJUEVfU1lTVEVNX01BU0s7CisjZW5kaWYgLyogQ09ORklHX1NNUCAqLworfQorCisv KiBfX2FkZW9zX3N5bmNfc3RhZ2UoKSAtLSBGbHVzaCB0aGUgcGVuZGluZyBJUlFzIGZvciB0 aGUgY3VycmVudAorICAgZG9tYWluIChhbmQgcHJvY2Vzc29yKS4gIFRoaXMgcm91dGluZSBm bHVzaGVzIHRoZSBpbnRlcnJ1cHQgbG9nCisgICAoc2VlICJPcHRpbWlzdGljIGludGVycnVw dCBwcm90ZWN0aW9uIiBmcm9tIEQuIFN0b2RvbHNreSBldCBhbC4gZm9yCisgICBtb3JlIG9u IHRoZSBkZWZlcnJlZCBpbnRlcnJ1cHQgc2NoZW1lKS4gRXZlcnkgaW50ZXJydXB0IHRoYXQK KyAgIG9jY3VycmVkIHdoaWxlIHRoZSBwaXBlbGluZSB3YXMgc3RhbGxlZCBnZXRzIHBsYXll ZC4gIFdBUk5JTkc6CisgICBjYWxsZXJzIG9uIFNNUCBib3hlbiBzaG91bGQgYWx3YXlzIGNo ZWNrIGZvciBDUFUgbWlncmF0aW9uIG9uCisgICByZXR1cm4gb2YgdGhpcyByb3V0aW5lLiBP bmUgY2FuIGNvbnRyb2wgdGhlIGtpbmQgb2YgaW50ZXJydXB0cworICAgd2hpY2ggYXJlIGdv aW5nIHRvIGJlIHN5bmMnZWQgdXNpbmcgdGhlIHN5bmNtYXNrCisgICBwYXJhbWV0ZXIuIElQ SVBFX0lSUU1BU0tfQU5ZIHBsYXlzIHRoZW0gYWxsLCBJUElQRV9JUlFNQVNLX1ZJUlQKKyAg IHBsYXlzIHZpcnR1YWwgaW50ZXJydXB0cyBvbmx5LiBUaGlzIHJvdXRpbmUgbXVzdCBiZSBj YWxsZWQgd2l0aCBodworICAgaW50ZXJydXB0cyBvZmYuICovCisKK3ZvaWQgX19hZGVvc19z eW5jX3N0YWdlICh1bnNpZ25lZCBsb25nIHN5bmNtYXNrKQorCit7CisgICAgdW5zaWduZWQg bG9uZyBtYXNrLCBzdWJtYXNrOworICAgIHN0cnVjdCBhZGNwdWRhdGEgKmNwdWRhdGE7Cisg ICAgaW50IGxldmVsLCByYW5rLCBzeW5jOworICAgIGFkZW9zX2RlY2xhcmVfY3B1aWQ7Cisg ICAgYWRvbWFpbl90ICphZHA7CisgICAgdW5zaWduZWQgaXJxOworCisgICAgYWRlb3NfbG9h ZF9jcHVpZCgpOworICAgIGFkcCA9IGFkcF9jcHVfY3VycmVudFtjcHVpZF07CisgICAgY3B1 ZGF0YSA9ICZhZHAtPmNwdWRhdGFbY3B1aWRdOworCisgICAgc3luYyA9IF9fdGVzdF9hbmRf c2V0X2JpdChJUElQRV9TWU5DX0ZMQUcsJmNwdWRhdGEtPnN0YXR1cyk7CisKKyAgICAvKiBU aGUgcG9saWN5IGhlcmUgaXMgdG8ga2VlcCB0aGUgZGlzcGF0Y2hpbmcgY29kZSBpbnRlcnJ1 cHQtZnJlZQorICAgICAgIGJ5IHN0YWxsaW5nIHRoZSBjdXJyZW50IHN0YWdlLiBJZiB0aGUg dXBwZXIgZG9tYWluIGhhbmRsZXIKKyAgICAgICAod2hpY2ggd2UgY2FsbCkgd2FudHMgdG8g cmUtZW5hYmxlIGludGVycnVwdHMgd2hpbGUgaW4gYSBzYWZlCisgICAgICAgcG9ydGlvbiBv ZiB0aGUgY29kZSAoZS5nLiBTQV9JTlRFUlJVUFQgZmxhZyB1bnNldCBmb3IgTGludXgncwor ICAgICAgIHNpZ2FjdGlvbigpKSwgaXQgd2lsbCBoYXZlIHRvIHVuc3RhbGwgKHRoZW4gc3Rh bGwgYWdhaW4gYmVmb3JlCisgICAgICAgcmV0dXJuaW5nIHRvIHVzISkgdGhlIHN0YWdlIHdo ZW4gaXQgc2VlcyBmaXQuICovCisKKyAgICB3aGlsZSAoKG1hc2sgPSAoY3B1ZGF0YS0+aXJx X3BlbmRpbmdfaGkgJiBzeW5jbWFzaykpICE9IDApCisJeworCS8qIEdpdmUgYSBzbGlnaHQg cHJpb3JpdHkgYWR2YW50YWdlIHRvIGhpZ2gtbnVtYmVyZWQgSVJRcworCSAgIGxpa2UgdGhl IHZpcnR1YWwgb25lcy4gKi8KKwlsZXZlbCA9IGZmbnoobWFzayk7CisJX19jbGVhcl9iaXQo bGV2ZWwsJmNwdWRhdGEtPmlycV9wZW5kaW5nX2hpKTsKKworCXdoaWxlICgoc3VibWFzayA9 IGNwdWRhdGEtPmlycV9wZW5kaW5nX2xvW2xldmVsXSkgIT0gMCkKKwkgICAgeworCSAgICBy YW5rID0gZmZueihzdWJtYXNrKTsKKwkgICAgaXJxID0gKGxldmVsIDw8IElQSVBFX0lSUV9J U0hJRlQpICsgcmFuazsKKworCSAgICBpZiAodGVzdF9iaXQoSVBJUEVfTE9DS19GTEFHLCZh ZHAtPmlycXNbaXJxXS5jb250cm9sKSkKKwkJeworCQlfX2NsZWFyX2JpdChyYW5rLCZjcHVk YXRhLT5pcnFfcGVuZGluZ19sb1tsZXZlbF0pOworCQljb250aW51ZTsKKwkJfQorCisJICAg IGlmICgtLWNwdWRhdGEtPmlycV9oaXRzW2lycV0gPT0gMCkKKwkJX19jbGVhcl9iaXQocmFu aywmY3B1ZGF0YS0+aXJxX3BlbmRpbmdfbG9bbGV2ZWxdKTsKKworCSAgICBfX3NldF9iaXQo SVBJUEVfU1RBTExfRkxBRywmY3B1ZGF0YS0+c3RhdHVzKTsKKworI2lmZGVmIENPTkZJR19B REVPU19QUk9GSUxJTkcKKwkgICAgX19hZGVvc19wcm9maWxlX2RhdGFbY3B1aWRdLmlycXNb aXJxXS5uX3N5bmNlZCsrOworCSAgICBhZGVvc19od190c2MoX19hZGVvc19wcm9maWxlX2Rh dGFbY3B1aWRdLmlycXNbaXJxXS50X3N5bmNlZCk7CisjZW5kaWYgLyogQ09ORklHX0FERU9T X1BST0ZJTElORyAqLworCisJICAgIGlmIChhZHAgPT0gYWRwX3Jvb3QpCisJCWFkZW9zX2h3 X3N0aSgpOworCisJICAgICgodm9pZCAoKikodW5zaWduZWQsIHN0cnVjdCBwdF9yZWdzICop KWFkcC0+aXJxc1tpcnFdLmhhbmRsZXIpKGlycSwmX19hZGVvc19pcnFfcmVncyk7CisKKwkg ICAgYWRlb3NfaHdfY2xpKCk7CisKKyNpZmRlZiBDT05GSUdfU01QCisJICAgIGlmIChhZGVv c19wcm9jZXNzb3JfaWQoKSAhPSBjcHVpZCkgLyogSGFuZGxlIENQVSBtaWdyYXRpb24uICov CisJCS8qIFdlIGV4cGVjdCBhbnkgZG9tYWluIHRvIGNsZWFyIHRoZSBTWU5DIGJpdCBlYWNo CisJCSAgIHRpbWUgaXQgc3dpdGNoZXMgaW4gYSBuZXcgdGFzaywgc28gdGhhdCBwcmVlbXB0 aW9ucworCQkgICBhbmQvb3IgQ1BVIG1pZ3JhdGlvbnMgKGluIHRoZSBTTVAgY2FzZSkgb3Zl ciB0aGUKKwkJICAgSVNSIGRvIG5vdCBsb2NrIG91dCB0aGUgbG9nIHN5bmNlciBmb3Igc29t ZQorCQkgICBpbmRlZmluaXRlIGFtb3VudCBvZiB0aW1lLiBJbiB0aGUgTGludXggY2FzZSwK KwkJICAgc2NoZWR1bGUoKSBoYW5kbGVzIHRoaXMgKHNlZSBrZXJuZWwvc2NoZWQuYykuIEZv cgorCQkgICB0aGlzIHJlYXNvbiwgd2UgZG9uJ3QgYm90aGVyIGNsZWFyaW5nIGl0IGhlcmUg Zm9yCisJCSAgIHRoZSBzb3VyY2UgQ1BVIGluIHRoZSBtaWdyYXRpb24gaGFuZGxpbmcgY2Fz ZSwKKwkJICAgc2luY2UgaXQgbXVzdCBoYXZlIHNjaGVkdWxlZCBhbm90aGVyIHRhc2sgaW4g YnkKKwkJICAgbm93LiAqLworCQlyZXR1cm47CisjZW5kaWYgLyogQ09ORklHX1NNUCAqLwor CisJICAgIF9fY2xlYXJfYml0KElQSVBFX1NUQUxMX0ZMQUcsJmNwdWRhdGEtPnN0YXR1cyk7 CisJICAgIH0KKwl9CisKKyAgICBpZiAoIXN5bmMpCisJX19jbGVhcl9iaXQoSVBJUEVfU1lO Q19GTEFHLCZjcHVkYXRhLT5zdGF0dXMpOworfQorCitpbnQgX19hZGVvc19hY2tfaXJxICh1 bnNpZ25lZCBpcnEpCisKK3sKKyAgICBpcnFfZGVzY190ICpkZXNjID0gZ2V0X2lycV9kZXNj KGlycSk7CisKKyAgICBpZiAoZGVzYy0+aGFuZGxlci0+YWNrICE9IE5VTEwpCisJeworCXVu c2lnbmVkIGxvbmcgYWRmbGFnczsKKwlhZGVvc19kZWNsYXJlX2NwdWlkOworCisJLyogTm8g bmVlZCB0byBtYXNrIElSUXMgYXQgaHcgbGV2ZWw6IHdlIGFyZSBhbHdheXMgY2FsbGVkIGZy b20KKwkgICBfX2FkZW9zX2hhbmRsZV9pcnEoKSwgc28gaW50ZXJydXB0cyBhcmUgYWxyZWFk eSBvZmYuIFdlCisJICAgc3RhbGwgdGhlIHBpcGVsaW5lIHNvIHRoYXQgc3Bpbl9sb2NrX2ly cSooKSBvcHMgd29uJ3QKKwkgICB1bmludGVudGlvbmFsbHkgZmx1c2ggaXQsIHNpbmNlIHRo aXMgY291bGQgY2F1c2UgaW5maW5pdGUKKwkgICByZWN1cnNpb24uICovCisKKwlhZGVvc19s b2FkX2NwdWlkKCk7CisJYWRmbGFncyA9IGFkZW9zX3Rlc3RfYW5kX3N0YWxsX3BpcGVsaW5l KCk7CisjaWZkZWYgQ09ORklHX1BSRUVNUFQKKwlwcmVlbXB0X2Rpc2FibGUoKTsKKyNlbmRp ZiAvKiBDT05GSUdfUFJFRU1QVCAqLworCXNwaW5fbG9jaygmZGVzYy0+bG9jayk7CisJZGVz Yy0+aGFuZGxlci0+YWNrKGlycSk7CisJc3Bpbl91bmxvY2soJmRlc2MtPmxvY2spOworI2lm ZGVmIENPTkZJR19QUkVFTVBUCisJcHJlZW1wdF9lbmFibGVfbm9fcmVzY2hlZCgpOworI2Vu ZGlmIC8qIENPTkZJR19QUkVFTVBUICovCisJYWRlb3NfcmVzdG9yZV9waXBlbGluZV9ub3N5 bmMoYWRwX2NwdV9jdXJyZW50W2NwdWlkXSxhZGZsYWdzLGNwdWlkKTsKKwl9CisKKyAgICBy ZXR1cm4gMTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fYWRlb3Nfd2Fsa19waXBlbGlu ZSAoc3RydWN0IGxpc3RfaGVhZCAqcG9zLCBpbnQgY3B1aWQpCisKK3sKKyAgICBhZG9tYWlu X3QgKnRoaXNfZG9tYWluID0gYWRwX2NwdV9jdXJyZW50W2NwdWlkXTsKKworICAgIHdoaWxl IChwb3MgIT0gJl9fYWRlb3NfcGlwZWxpbmUpCisJeworICAgIAlhZG9tYWluX3QgKm5leHRf ZG9tYWluID0gbGlzdF9lbnRyeShwb3MsYWRvbWFpbl90LHBfbGluayk7CisKKwlpZiAodGVz dF9iaXQoSVBJUEVfU1RBTExfRkxBRywmbmV4dF9kb21haW4tPmNwdWRhdGFbY3B1aWRdLnN0 YXR1cykpCisJICAgIGJyZWFrOyAvKiBTdGFsbGVkIHN0YWdlIC0tIGRvIG5vdCBnbyBmdXJ0 aGVyLiAqLworCisJaWYgKG5leHRfZG9tYWluLT5jcHVkYXRhW2NwdWlkXS5pcnFfcGVuZGlu Z19oaSAhPSAwKQorCSAgICB7CisJICAgIC8qIFNpbmNlIHRoZSBjcml0aWNhbCBJUEkgbWln aHQgYmUgZGlzcGF0Y2hlZCBieSB0aGUKKwkgICAgICAgZm9sbG93aW5nIGFjdGlvbnMsIHRo ZSBjdXJyZW50IGRvbWFpbiBtaWdodCBub3QgYmUKKwkgICAgICAgbGlua2VkIHRvIHRoZSBw aXBlbGluZSBhbnltb3JlIGFmdGVyIGl0cyBoYW5kbGVyCisJICAgICAgIHJldHVybnMgb24g U01QIGJveGVzLCBldmVuIGlmIHRoZSBkb21haW4gcmVtYWlucyB2YWxpZAorCSAgICAgICAo c2VlIGFkZW9zX3VucmVnaXN0ZXJfZG9tYWluKCkpLCBzbyBkb24ndCBtYWtlIGFueQorCSAg ICAgICBkYW5nZXJvdXMgYXNzdW1wdGlvbnMgaGVyZS4gKi8KKworCSAgICBpZiAobmV4dF9k b21haW4gPT0gdGhpc19kb21haW4pCisJCV9fYWRlb3Nfc3luY19zdGFnZShJUElQRV9JUlFN QVNLX0FOWSk7CisJICAgIGVsc2UKKwkJeworCQlfX2FkZW9zX3N3aXRjaF90byh0aGlzX2Rv bWFpbixuZXh0X2RvbWFpbixjcHVpZCk7CisKKwkJYWRlb3NfbG9hZF9jcHVpZCgpOyAvKiBQ cm9jZXNzb3IgbWlnaHQgaGF2ZSBjaGFuZ2VkLiAqLworCisJCWlmICh0aGlzX2RvbWFpbi0+ Y3B1ZGF0YVtjcHVpZF0uaXJxX3BlbmRpbmdfaGkgIT0gMCAmJgorCQkgICAgIXRlc3RfYml0 KElQSVBFX1NUQUxMX0ZMQUcsJnRoaXNfZG9tYWluLT5jcHVkYXRhW2NwdWlkXS5zdGF0dXMp ICYmCisJCSAgICAhdGVzdF9iaXQoSVBJUEVfU1lOQ19GTEFHLCZ0aGlzX2RvbWFpbi0+Y3B1 ZGF0YVtjcHVpZF0uc3RhdHVzKSkKKwkJICAgIF9fYWRlb3Nfc3luY19zdGFnZShJUElQRV9J UlFNQVNLX0FOWSk7CisJCX0KKworCSAgICBicmVhazsKKwkgICAgfQorCWVsc2UgaWYgKG5l eHRfZG9tYWluID09IHRoaXNfZG9tYWluKQorCSAgICBicmVhazsKKworCXBvcyA9IG5leHRf ZG9tYWluLT5wX2xpbmsubmV4dDsKKwl9Cit9CisKKy8qIF9fYWRlb3NfaGFuZGxlX2lycSgp IC0tIEFERU9TJ3MgZ2VuZXJpYyBJUlEgaGFuZGxlci4gQW4gb3B0aW1pc3RpYworICAgaW50 ZXJydXB0IHByb3RlY3Rpb24gbG9nIGlzIG1haW50YWluZWQgaGVyZSBmb3IgZWFjaAorICAg ZG9tYWluLiBJbnRlcnJ1cHRzIGFyZSBvZmYgb24gZW50cnkuICovCisKK3ZvaWQgX19hZGVv c19oYW5kbGVfaXJxIChpbnQgaXJxLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKKworeworICAg IHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsICpwb3M7CisgICAgYWRlb3NfZGVjbGFyZV9jcHVp ZDsKKyAgICBpbnQgbV9hY2ssIHNfYWNrOworCisgICAgbV9hY2sgPSBpcnEgJiBBREVPU19J UlFfQUNLRUQ7CisgICAgaXJxICY9IEFERU9TX0lSUV9BQ0tFRF9NQVNLOworCisgICAgaWYg KGlycSA+PSBJUElQRV9OUl9JUlFTKQorCXsKKwlwcmludGsoS0VSTl9FUlIgIkFkZW9zOiBz cHVyaW91cyBpbnRlcnJ1cHQgJWRcbiIsaXJxKTsKKwlyZXR1cm47CisJfQorCisgICAgYWRl b3NfbG9hZF9jcHVpZCgpOworCisjaWZkZWYgQ09ORklHX0FERU9TX1BST0ZJTElORworICAg IF9fYWRlb3NfcHJvZmlsZV9kYXRhW2NwdWlkXS5pcnFzW2lycV0ubl9oYW5kbGVkKys7Cisg ICAgYWRlb3NfaHdfdHNjKF9fYWRlb3NfcHJvZmlsZV9kYXRhW2NwdWlkXS5pcnFzW2lycV0u dF9oYW5kbGVkKTsKKyNlbmRpZiAvKiBDT05GSUdfQURFT1NfUFJPRklMSU5HICovCisKKyAg ICBzX2FjayA9IG1fYWNrOworCisgICAgaWYgKHRlc3RfYml0KElQSVBFX1NUSUNLWV9GTEFH LCZhZHBfY3B1X2N1cnJlbnRbY3B1aWRdLT5pcnFzW2lycV0uY29udHJvbCkpCisJaGVhZCA9 ICZhZHBfY3B1X2N1cnJlbnRbY3B1aWRdLT5wX2xpbms7CisgICAgZWxzZQorCWhlYWQgPSBf X2FkZW9zX3BpcGVsaW5lLm5leHQ7CisKKyAgICAvKiBBY2sgdGhlIGludGVycnVwdC4gKi8K KworICAgIHBvcyA9IGhlYWQ7CisKKyAgICB3aGlsZSAocG9zICE9ICZfX2FkZW9zX3BpcGVs aW5lKQorCXsKKyAgICAJYWRvbWFpbl90ICpfYWRwID0gbGlzdF9lbnRyeShwb3MsYWRvbWFp bl90LHBfbGluayk7CisKKwkvKiBGb3IgZWFjaCBkb21haW4gaGFuZGxpbmcgdGhlIGluY29t aW5nIElSUSwgbWFyayBpdCBhcworICAgICAgICAgICBwZW5kaW5nIGluIGl0cyBsb2cuICov CisKKwlpZiAodGVzdF9iaXQoSVBJUEVfSEFORExFX0ZMQUcsJl9hZHAtPmlycXNbaXJxXS5j b250cm9sKSkKKwkgICAgeworCSAgICAvKiBEb21haW5zIHRoYXQgaGFuZGxlIHRoaXMgSVJR IGFyZSBwb2xsZWQgZm9yCisJICAgICAgIGFja25vd2xlZGdpbmcgaXQgYnkgZGVjcmVhc2lu ZyBwcmlvcml0eSBvcmRlci4gVGhlCisJICAgICAgIGludGVycnVwdCBtdXN0IGJlIG1hZGUg cGVuZGluZyBfZmlyc3RfIGluIHRoZSBkb21haW4ncworCSAgICAgICBzdGF0dXMgZmxhZ3Mg YmVmb3JlIHRoZSBQSUMgaXMgdW5sb2NrZWQuICovCisKKwkgICAgX2FkcC0+Y3B1ZGF0YVtj cHVpZF0uaXJxX2hpdHNbaXJxXSsrOworCSAgICBfX2FkZW9zX3NldF9pcnFfYml0KF9hZHAs Y3B1aWQsaXJxKTsKKworCSAgICAvKiBBbHdheXMgZ2V0IHRoZSBmaXJzdCBtYXN0ZXIgYWNr bm93bGVkZ2UgYXZhaWxhYmxlLiBPbmNlCisJICAgICAgIHdlJ3ZlIGdvdCBpdCwgYWxsb3cg c2xhdmUgYWNrbm93bGVkZ2UgaGFuZGxlcnMgdG8gcnVuCisJICAgICAgICh1bnRpbCBvbmUg b2YgdGhlbSBzdG9wcyB1cykuICovCisKKwkgICAgaWYgKF9hZHAtPmlycXNbaXJxXS5hY2tu b3dsZWRnZSAhPSBOVUxMKQorCQl7CisJCWlmICghbV9hY2spCisJCSAgICBtX2FjayA9IF9h ZHAtPmlycXNbaXJxXS5hY2tub3dsZWRnZShpcnEpOworCQllbHNlIGlmICh0ZXN0X2JpdChJ UElQRV9TSEFSRURfRkxBRywmX2FkcC0+aXJxc1tpcnFdLmNvbnRyb2wpICYmICFzX2FjaykK KwkJICAgIHNfYWNrID0gX2FkcC0+aXJxc1tpcnFdLmFja25vd2xlZGdlKGlycSk7CisJCX0K KwkgICAgfQorCisJLyogSWYgdGhlIGRvbWFpbiBkb2VzIG5vdCB3YW50IHRoZSBJUlEgdG8g YmUgcGFzc2VkIGRvd24gdGhlCisJICAgaW50ZXJydXB0IHBpcGUsIGV4aXQgdGhlIGxvb3Ag bm93LiAqLworCisJaWYgKCF0ZXN0X2JpdChJUElQRV9QQVNTX0ZMQUcsJl9hZHAtPmlycXNb aXJxXS5jb250cm9sKSkKKwkgICAgYnJlYWs7CisKKwlwb3MgPSBfYWRwLT5wX2xpbmsubmV4 dDsKKwl9CisKKyAgICAvKiBOb3cgd2FsayB0aGUgcGlwZWxpbmUsIHlpZWxkaW5nIGNvbnRy b2wgdG8gdGhlIGhpZ2hlc3QgcHJpb3JpdHkKKyAgICAgICBkb21haW4gdGhhdCBoYXMgcGVu ZGluZyBpbnRlcnJ1cHQocykgb3IgaW1tZWRpYXRlbHkgdG8gdGhlCisgICAgICAgY3VycmVu dCBkb21haW4gaWYgdGhlIGludGVycnVwdCBoYXMgYmVlbiBtYXJrZWQgYXMKKyAgICAgICAn c3RpY2t5Jy4gVGhpcyBzZWFyY2ggZG9lcyBub3QgZ28gYmV5b25kIHRoZSBjdXJyZW50IGRv bWFpbiBpbgorICAgICAgIHRoZSBwaXBlbGluZS4gVG8gdW5kZXJzdGFuZCB0aGlzIGNvZGUg cHJvcGVybHksIG9uZSBtdXN0IGtlZXAKKyAgICAgICBpbiBtaW5kIHRoYXQgZG9tYWlucyBo YXZpbmcgYSBoaWdoZXIgcHJpb3JpdHkgdGhhbiB0aGUgY3VycmVudAorICAgICAgIG9uZSBh cmUgc2xlZXBpbmcgb24gdGhlIGFkZW9zX3N1c3BlbmRfZG9tYWluKCkgc2VydmljZS4gSW4K KyAgICAgICBhZGRpdGlvbiwgZG9tYWlucyBoYXZpbmcgYSBsb3dlciBwcmlvcml0eSBoYXZl IGJlZW4gcHJlZW1wdGVkCisgICAgICAgYnkgYW4gaW50ZXJydXB0IGRpc3BhdGNoZWQgdG8g YSBoaWdoZXIgcHJpb3JpdHkgZG9tYWluLiBPbmNlCisgICAgICAgdGhlIGZpcnN0IGFuZCBo aWdoZXN0IHByaW9yaXR5IHN0YWdlIGhhcyBiZWVuIHNlbGVjdGVkIGhlcmUsCisgICAgICAg dGhlIHN1YnNlcXVlbnQgc3RhZ2VzIHdpbGwgYmUgYWN0aXZhdGVkIGluIHR1cm4gd2hlbiBl YWNoCisgICAgICAgdmlzaXRlZCBkb21haW4gY2FsbHMgYWRlb3Nfc3VzcGVuZF9kb21haW4o KSB0byB3YWtlIHVwIGl0cworICAgICAgIG5laWdoYm91ciBkb3duIHRoZSBwaXBlbGluZS4g Ki8KKworICAgIF9fYWRlb3Nfd2Fsa19waXBlbGluZShoZWFkLGNwdWlkKTsKK30KKworLyog QURFT1MncyB2ZXJzaW9uIG9mIHRoZSBpbnRlcnJ1cHQgdHJhcCBoYW5kbGVyLiAqLworCitp bnQgX19hZGVvc19ncmFiX2lycSAoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCisKK3sKKyAgICBl eHRlcm4gaW50IHBwY19zcHVyaW91c19pbnRlcnJ1cHRzOworICAgIGFkZW9zX2RlY2xhcmVf Y3B1aWQ7CisgICAgaW50IGlycTsKKworICAgIGlmICghYWRwX3BpcGVsaW5lZCkKKwl7CisJ ZG9fSVJRKHJlZ3MpOworCXJldHVybiAxOworCX0KKworICAgIGlycSA9IHBwY19tZC5nZXRf aXJxKHJlZ3MpOworICAgIGlmIChpcnEgPj0gMCkKKwl7CisJX19hZGVvc19oYW5kbGVfaXJx KGlycSxyZWdzKTsKKwl9CisgICAgZWxzZSAKKwlwcGNfc3B1cmlvdXNfaW50ZXJydXB0cysr OworCisgICAgYWRlb3NfbG9hZF9jcHVpZCgpOworCisgICAgcmV0dXJuIChhZHBfY3B1X2N1 cnJlbnRbY3B1aWRdID09IGFkcF9yb290ICYmCisJICAgICF0ZXN0X2JpdChJUElQRV9TVEFM TF9GTEFHLCZhZHBfcm9vdC0+Y3B1ZGF0YVtjcHVpZF0uc3RhdHVzKSk7Cit9CisKKy8qIEFE RU9TJ3MgdmVyc2lvbiBvZiBpcnEuYzpkb19JUlEoKS4gKi8KKwordm9pZCBfX2FkZW9zX2Rv X0lSUSAoaW50IGlycSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpIHsKKwlpcnFfZW50ZXIoKTsK KwlwcGNfaXJxX2Rpc3BhdGNoX2hhbmRsZXIocmVncywgaXJxKTsKKwlpcnFfZXhpdCgpOwor fQorCisvKiBBREVPUydzIHZlcnNpb24gb2YgdGhlIGRlY3JlbWVudGVyIHRyYXAgaGFuZGxl ci4gKi8KKworaW50IF9fYWRlb3NfZ3JhYl90aW1lciAoc3RydWN0IHB0X3JlZ3MgKnJlZ3Mp CisKK3sKKyAgICBhZGVvc19kZWNsYXJlX2NwdWlkOworCisgICAgaWYgKCFhZHBfcGlwZWxp bmVkKQorCXsKKwl0aW1lcl9pbnRlcnJ1cHQocmVncyk7CisJcmV0dXJuIDE7CisJfQorCisg ICAgLyogT24gOTcwIENQVXMgREVDIGNhbm5vdCBiZSBkaXNhYmxlZCBhbmQgd2l0aG91dCBz ZXR0aW5nIERFQworICAgICAqIGhlcmUsIERFQyBpbnRlcnJ1cHQgd291bGQgYmUgdHJpZ2dl cmVkIGFzIHNvb24gYXMgaW50ZXJydXB0cyBhcmUKKyAgICAgKiBlbmFibGVkIGluIF9fYWRl b3Nfc3luY19zdGFnZSAKKyAgICAgKi8KKyAgICBzZXRfZGVjKDB4N2ZmZmZmZmYpOworICAg IAorICAgIF9fYWRlb3NfaXJxX3JlZ3MubXNyID0gcmVncy0+bXNyOyAvKiBmb3IgZG9fdGlt ZXIoKSAqLworCisgICAgX19hZGVvc19oYW5kbGVfaXJxKEFERU9TX1RJTUVSX1ZJUlEscmVn cyk7CisKKyAgICBhZGVvc19sb2FkX2NwdWlkKCk7CisKKyAgICBpZiAoX19hZGVvc19kZWNy X3RpY2tzICE9IHRiX3RpY2tzX3Blcl9qaWZmeSkKKwl7CisJdW5zaWduZWQgbG9uZyBuZXh0 X2RhdGUsIG5vdzsKKworCW5leHRfZGF0ZSA9IF9fYWRlb3NfZGVjcl9uZXh0W2NwdWlkXTsK KworCXdoaWxlICgobm93ID0gX19hZGVvc19yZWFkX3RpbWViYXNlKCkpID49IG5leHRfZGF0 ZSkKKwkgICAgbmV4dF9kYXRlICs9IF9fYWRlb3NfZGVjcl90aWNrczsKKworCXNldF9kZWMo bmV4dF9kYXRlIC0gbm93KTsKKworCV9fYWRlb3NfZGVjcl9uZXh0W2NwdWlkXSA9IG5leHRf ZGF0ZTsKKwl9CisKKyAgICByZXR1cm4gKGFkcF9jcHVfY3VycmVudFtjcHVpZF0gPT0gYWRw X3Jvb3QgJiYKKwkgICAgIXRlc3RfYml0KElQSVBFX1NUQUxMX0ZMQUcsJmFkcF9yb290LT5j cHVkYXRhW2NwdWlkXS5zdGF0dXMpKTsKK30KKwordm9pZCBfX2FkZW9zX2RvX3RpbWVyIChp bnQgaXJxLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKKworeworICAgIHRpbWVyX2ludGVycnVw dChyZWdzKTsKK30KKworYXNtbGlua2FnZSBpbnQgX19hZGVvc19jaGVja19yb290IChzdHJ1 Y3QgcHRfcmVncyAqcmVncykKKworeworICAgIGFkZW9zX2RlY2xhcmVfY3B1aWQ7CisgICAg LyogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCB3aXRoIGh3IGludGVycnVwdHMgb2ZmLCBzbyBu byBtaWdyYXRpb24KKyAgICAgICBjYW4gb2NjdXIgd2hpbGUgY2hlY2tpbmcgdGhlIGlkZW50 aXR5IG9mIHRoZSBjdXJyZW50IGRvbWFpbi4gKi8KKyAgICBhZGVvc19sb2FkX2NwdWlkKCk7 CisgICAgcmV0dXJuIChhZHBfY3B1X2N1cnJlbnRbY3B1aWRdID09IGFkcF9yb290ICYmCisJ ICAgICF0ZXN0X2JpdChJUElQRV9TVEFMTF9GTEFHLCZhZHBfcm9vdC0+Y3B1ZGF0YVtjcHVp ZF0uc3RhdHVzKSk7Cit9CisKKy8qIGFkZW9zX3RyaWdnZXJfaXJxKCkgLS0gUHVzaCB0aGUg aW50ZXJydXB0IHRvIHRoZSBwaXBlbGluZSBlbnRyeQorICAganVzdCBsaWtlIGlmIGl0IGhh cyBiZWVuIGFjdHVhbGx5IHJlY2VpdmVkIGZyb20gYSBodyBzb3VyY2UuIFRoaXMKKyAgIGJv dGggd29ya3MgZm9yIHJlYWwgYW5kIHZpcnR1YWwgaW50ZXJydXB0cy4gVGhpcyBhbHNvIG1l YW5zIHRoYXQKKyAgIHRoZSBjdXJyZW50IGRvbWFpbiBtaWdodCBiZSBpbW1lZGlhdGVseSBw cmVlbXB0ZWQgYnkgYSBoaWdoZXIKKyAgIHByaW9yaXR5IGRvbWFpbiB3aG8gaGFwcGVucyB0 byBoYW5kbGUgdGhpcyBpbnRlcnJ1cHQuICovCisKK2ludCBhZGVvc190cmlnZ2VyX2lycSAo dW5zaWduZWQgaXJxKQorCit7CisgICAgc3RydWN0IHB0X3JlZ3MgcmVnczsKKyAgICB1bnNp Z25lZCBsb25nIGZsYWdzOworCisgICAgaWYgKGlycSA+PSBJUElQRV9OUl9JUlFTIHx8CisJ KGFkZW9zX3ZpcnR1YWxfaXJxX3AoaXJxKSAmJiAhdGVzdF9iaXQoaXJxIC0gSVBJUEVfVklS UV9CQVNFLCZfX2FkZW9zX3ZpcnR1YWxfaXJxX21hcCkpKQorCXJldHVybiAtRUlOVkFMOwor CisgICAgYWRlb3NfaHdfbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisgICAgcmVncy5tc3Ig PSBmbGFnczsKKworICAgIF9fYWRlb3NfaGFuZGxlX2lycShpcnEgfCBBREVPU19JUlFfQUNL RUQsICZyZWdzKTsKKworICAgIGFkZW9zX2h3X2xvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsK KworICAgIHJldHVybiAxOworfQorCitpbnQgX19hZGVvc19lbnRlcl9zeXNjYWxsIChzdHJ1 Y3QgcHRfcmVncyAqcmVncykKKworeworICAgIC8qIEJ5IGNvbnZlbnRpb24sIHRoaXMgcm91 dGluZSBzaG91bGQgZWl0aGVyIHJldHVybjoKKyAgICAgICAwIC0tIGlmIHRoZSBzeXNjYWxs IGlzIHRvIGJlIHBhc3NlZCB0byBMaW51eDsKKyAgICAgICAxIC0tIGlmIHRoZSBzeXNjYWxs IHNob3VsZCBub3QgYmUgcGFzc2VkIHRvIExpbnV4LCBhbmQgbm8KKyAgICAgICB0YWlsIHdv cmsgc2hvdWxkIGJlIHBlcmZvcm1lZDsKKyAgICAgICAtMSAtLSBpZiB0aGUgc3lzY2FsbCBz aG91bGQgbm90IGJlIHBhc3NlZCB0byBMaW51eCBidXQgdGhlCisgICAgICAgdGFpbCB3b3Jr IGhhcyB0byBiZSBwZXJmb3JtZWQuICovCisKKyAgICBpZiAoX19hZGVvc19ldmVudF9tb25p dG9yc1tBREVPU19TWVNDQUxMX1BST0xPR1VFXSA+IDAgJiYKKwlfX2FkZW9zX2hhbmRsZV9l dmVudChBREVPU19TWVNDQUxMX1BST0xPR1VFLHJlZ3MpID4gMCkKKwlyZXR1cm4gYWRwX2N1 cnJlbnQgPT0gYWRwX3Jvb3QgJiYgIWluX2F0b21pYygpID8gLTEgOiAxOworCisgICAgcmV0 dXJuIDA7Cit9CisKK2ludCBfX2FkZW9zX2V4aXRfc3lzY2FsbCAodm9pZCkgCisKK3sKKyAg ICBpZiAoX19hZGVvc19ldmVudF9tb25pdG9yc1tBREVPU19TWVNDQUxMX0VQSUxPR1VFXSA+ IDApCisJcmV0dXJuIF9fYWRlb3NfaGFuZGxlX2V2ZW50KEFERU9TX1NZU0NBTExfRVBJTE9H VUUsTlVMTCk7CisKKyAgICByZXR1cm4gMDsKK30KKworRVhQT1JUX1NZTUJPTChfX2FkZW9z X2luaXRfc3RhZ2UpOworRVhQT1JUX1NZTUJPTChfX2FkZW9zX3N5bmNfc3RhZ2UpOworRVhQ T1JUX1NZTUJPTChfX2FkZW9zX2lycV9yZWdzKTsKKyNpZmRlZiBDT05GSUdfQURFT1NfVEhS RUFEUworRVhQT1JUX1NZTUJPTChfX2FkZW9zX3N3aXRjaF9kb21haW4pOworI2VuZGlmIC8q IENPTkZJR19BREVPU19USFJFQURTICovCitFWFBPUlRfU1lNQk9MKF9fYWRlb3NfZG9fSVJR KTsKK0VYUE9SVF9TWU1CT0woX19hZGVvc19kb190aW1lcik7CitFWFBPUlRfU1lNQk9MKF9f YWRlb3NfZGVjcl90aWNrcyk7CitFWFBPUlRfU1lNQk9MKF9fYWRlb3NfZGVjcl9uZXh0KTsK K0VYUE9SVF9TWU1CT0woX19hZGVvc19jdXJyZW50X3RocmVhZGluZm8pOworRVhQT1JUX1NZ TUJPTChhZGVvc19jcml0aWNhbF9lbnRlcik7CitFWFBPUlRfU1lNQk9MKGFkZW9zX2NyaXRp Y2FsX2V4aXQpOworRVhQT1JUX1NZTUJPTChhZGVvc190cmlnZ2VyX2lycSk7CmRpZmYgLU5y dSBsaW51eC0yLjYuMTAvYXJjaC9wcGM2NC9rZXJuZWwvZW50cnkuUyBsaW51eC0yLjYuMTAt YWRlb3MtcHBjNjQtZGV2ZWwvYXJjaC9wcGM2NC9rZXJuZWwvZW50cnkuUwotLS0gbGludXgt Mi42LjEwL2FyY2gvcHBjNjQva2VybmVsL2VudHJ5LlMJMjAwNC0xMi0yNCAyMzozMzo0OS4w MDAwMDAwMDAgKzAyMDAKKysrIGxpbnV4LTIuNi4xMC1hZGVvcy1wcGM2NC1kZXZlbC9hcmNo L3BwYzY0L2tlcm5lbC9lbnRyeS5TCTIwMDUtMDYtMDEgMTU6NTE6MDIuMDAwMDAwMDAwICsw MzAwCkBAIC0xMDgsNiArMTA4LDIzIEBACiAJb3JpCXIxMSxyMTEsTVNSX0VFCiAJbXRtc3Jk CXIxMSwxCiAKKyNpZmRlZiBDT05GSUdfQURFT1NfQ09SRQorCWFkZGkJcjMscjEsR1BSMAor CWJsCS5fX2FkZW9zX2VudGVyX3N5c2NhbGwKKwljbXBkaQlyMywwCisJbGQJcjAsR1BSMChy MSkKKwlsZAlyMyxHUFIzKHIxKQorCWxkCXI0LEdQUjQocjEpCisJbGQJcjUsR1BSNShyMSkK KwlsZAlyNixHUFI2KHIxKQorCWxkCXI3LEdQUjcocjEpCisJbGQJcjgsR1BSOChyMSkKKwls ZAlyOSxHUFI5KHIxKQorCWJndAlhZGVvc19lbmRfc3lzY2FsbAorCWJsdAlzeXNjYWxsX2V4 aXRfYWRlb3MKKwlhZGRpCXI5LHIxLFNUQUNLX0ZSQU1FX09WRVJIRUFECisjZW5kaWYgLyog Q09ORklHX0FERU9TX0NPUkUgKi8KKwogI2lmZGVmIFNIT1dfU1lTQ0FMTFMKIAlibAkuZG9f c2hvd19zeXNjYWxsCiAJUkVTVF9HUFIoMCxyMSkKQEAgLTE0NSw3ICsxNjIsMTMgQEAKIAls ZHgJcjEwLHIxMSxyMAkvKiBGZXRjaCBzeXN0ZW0gY2FsbCBoYW5kbGVyIFtwdHJdICovCiAJ bXRjdHIgICByMTAKIAliY3RybAkJCS8qIENhbGwgaGFuZGxlciAqLwotCisjaWZkZWYgQ09O RklHX0FERU9TX0NPUkUKKwlzdGQJcjMsUkVTVUxUKHIxKQorCWJsCS5fX2FkZW9zX2V4aXRf c3lzY2FsbAorCWNtcGRpCXIzLDAKKwlsZAlyMyxSRVNVTFQocjEpCisJYm5lLQlzeXNjYWxs X2V4aXRfYWRlb3MKKyNlbmRpZiAvKiBDT05GSUdfQURFT1NfQ09SRSAqLwogc3lzY2FsbF9l eGl0OgogI2lmZGVmIFNIT1dfU1lTQ0FMTFMKIAlzdGQJcjMsR1BSMyhyMSkKQEAgLTE5NSw2 ICsyMTgsMzkgQEAKIAltdHNwcglTUlIxLHI4CiAJcmZpZAogCWIJLgkvKiBwcmV2ZW50IHNw ZWN1bGF0aXZlIGV4ZWN1dGlvbiAqLworI2lmZGVmIENPTkZJR19BREVPU19DT1JFCitzeXNj YWxsX2V4aXRfYWRlb3M6CisJbGQJcjUsX0NDUihyMSkKKwlsZAlyOCxfTVNSKHIxKQorCWxk CXI3LF9OSVAocjEpCisJc3RkY3guCXIwLDAscjEJCQkvKiA/IT8gdG8gY2xlYXIgdGhlIHJl c2VydmF0aW9uICovCisJYW5kaS4JcjYscjgsTVNSX1BSCisJbGQJcjQsX0xJTksocjEpCisJ YmVxLQkxZgkJCS8qIG9ubHkgcmVzdG9yZSByMTMgaWYgKi8KKwlsZAlyMTMsR1BSMTMocjEp CQkvKiByZXR1cm5pbmcgdG8gdXNlcm1vZGUgKi8KKzE6CWxkCXIyLEdQUjIocjEpCisJbGQJ cjEsR1BSMShyMSkKKwlsaQlyMTIsTVNSX1JJCisJbWZtc3IJcjEwCQkJLyogc2hvdWxkIHRo aXMgYmUgZG9uZSBoZXJlPyAqLworCWFuZGMJcjEwLHIxMCxyMTIKKwltdG1zcmQJcjEwLDEJ CQkvKiBjbGVhciBNU1IuUkkgKi8KKwltdGxyCXI0CisJbXRjcglyNQorCW10c3ByCVNSUjAs cjcKKwltdHNwcglTUlIxLHI4CisJcmZpZAorCWIJLgkvKiBwcmV2ZW50IHNwZWN1bGF0aXZl IGV4ZWN1dGlvbiAqLworI2VuZGlmIC8qIENPTkZJR19BREVPU19DT1JFICovCisKKyNpZmRl ZiBDT05GSUdfQURFT1NfQ09SRQorCS5nbG9ibAlhZGVvc19lbmRfc3lzY2FsbAorYWRlb3Nf ZW5kX3N5c2NhbGw6CisJbWZtc3IJcjEwCisJcmxkaWNsCXIxMCxyMTAsNDgsMQorCXJvdGxk aQlyMTAscjEwLDE2CisJbXRtc3JkCXIxMCwxCisJYglzeXNjYWxsX2V4aXRfYWRlb3MKKyNl bmRpZiAvKiBDT05GSUdfQURFT1NfQ09SRSAqLwogCiBzeXNjYWxsX2Vub3N5czoKIAlsaQly MywtRU5PU1lTCkBAIC00NjgsNiArNTI0LDEzIEBACiAJcm90bGRpCXI5LHI5LDE2CiAJbXRt c3JkCXI5LDEJCS8qIFVwZGF0ZSBtYWNoaW5lIHN0YXRlICovCiAKKyNpZmRlZiBDT05GSUdf QURFT1NfQ09SRQorCWJsCS5fX2FkZW9zX2NoZWNrX3Jvb3QKKwljbXBkaQlyMywwCisJbWZt c3IJcjEwCQkvKiB0aGlzIGlzIHVzZWQgbGF0ZXIsIG1pZ2h0IGJlIG1lc3NlZCAqLworCWJl cS0JcmVzdG9yZQorI2VuZGlmIC8qIENPTkZJR19BREVPU19DT1JFICovCisKICNpZmRlZiBD T05GSUdfUFJFRU1QVAogCWNscnJkaQlyOSxyMSxUSFJFQURfU0hJRlQJLyogY3VycmVudF90 aHJlYWRfaW5mbygpICovCiAJbGkJcjAsX1RJRl9ORUVEX1JFU0NIRUQJLyogYml0cyB0byBj aGVjayAqLwpAQCAtODQ0LDMgKzkwNywxMjYgQEAKICAgICAgICAgYmxyCiAJCiAjZW5kaWYJ LyogQ09ORklHX1BQQ19NVUxUSVBMQVRGT1JNICovCisKKyNpZmRlZiBDT05GSUdfQURFT1Nf Q09SRQorCitfR0xPQkFMKF9fYWRlb3NfcmV0X2Zyb21fZXhjZXB0X2xpdGUpCisJY21wZGkJ cjMsMAorCWJuZSsJLnJldF9mcm9tX2V4Y2VwdF9saXRlCisJYglyZXN0b3JlCisKKyNpZmRl ZiBDT05GSUdfQURFT1NfVEhSRUFEUworCisvKgorICogcjMgPSBhZHBfbmV4dCwgcjQgPSBh ZHBfY3B1X2N1cnJlbnRbYWRlb3NfcHJvY2Vzc29yX2lkKCldLgorICogTk9URTogVGhpcyBj b2RlIGlzIF9ub3RfIFNNUC1jb21wbGlhbnQuIEFsd2F5cyBjYWxsZWQgd2l0aCBodworICog aW50ZXJydXB0cyBvZmYuCisgKiBUT0RPOiBpbXBsZW1lbnQgKGNvbmZpZ3VyZSB0aW1lKSBz dXBwb3J0IGZvciBkaWZmZXJlbnQgQUJJcz8KKyAqLyAgIAorX0dMT0JBTChfX2FkZW9zX3N3 aXRjaF9kb21haW4pCisKKwkvKiAyNyo4ID0gMjE2IGZvciByZWdpc3RlcnMKKwkgKiArOCBw YWRkaW5nIGZvciBxdWFkLXdvcmQgYWxpZ25tZW50IGFzIHJlcXVpcmVkIGJ5IHNwZWMKKwkg KiA9IDIyNCAqLworCS8qIGFsbG9jIHN0YWNrIGZyYW1lIChzdG9yZSBhbmQgdXBkYXRlIHIx KSAqLworCXN0ZHUJcjEsLTIyNC1TVEFDS19GUkFNRV9PVkVSSEVBRChyMSkKKworCS8qIFNh dmUgZ2VuZXJhbCBwdXJwb3NlIHJlZ2lzdGVycy4gKDIyKSAqLworCXN0ZAlyMzEsU1RBQ0tf RlJBTUVfT1ZFUkhFQUQrMCo4KHIxKQorCXN0ZAlyMzAsU1RBQ0tfRlJBTUVfT1ZFUkhFQUQr MSo4KHIxKQorCXN0ZAlyMjksU1RBQ0tfRlJBTUVfT1ZFUkhFQUQrMio4KHIxKQorCXN0ZAly MjgsU1RBQ0tfRlJBTUVfT1ZFUkhFQUQrMyo4KHIxKQorCXN0ZAlyMjcsU1RBQ0tfRlJBTUVf T1ZFUkhFQUQrNCo4KHIxKQorCXN0ZAlyMjYsU1RBQ0tfRlJBTUVfT1ZFUkhFQUQrNSo4KHIx KQorCXN0ZAlyMjUsU1RBQ0tfRlJBTUVfT1ZFUkhFQUQrNio4KHIxKQorCXN0ZAlyMjQsU1RB Q0tfRlJBTUVfT1ZFUkhFQUQrNyo4KHIxKQorCXN0ZAlyMjMsU1RBQ0tfRlJBTUVfT1ZFUkhF QUQrOCo4KHIxKQorCXN0ZAlyMjIsU1RBQ0tfRlJBTUVfT1ZFUkhFQUQrOSo4KHIxKQorCXN0 ZAlyMjEsU1RBQ0tfRlJBTUVfT1ZFUkhFQUQrMTAqOChyMSkKKwlzdGQJcjIwLFNUQUNLX0ZS QU1FX09WRVJIRUFEKzExKjgocjEpCisJc3RkCXIxOSxTVEFDS19GUkFNRV9PVkVSSEVBRCsx Mio4KHIxKQorCXN0ZAlyMTgsU1RBQ0tfRlJBTUVfT1ZFUkhFQUQrMTMqOChyMSkKKwlzdGQJ cjE3LFNUQUNLX0ZSQU1FX09WRVJIRUFEKzE0KjgocjEpCisJc3RkCXIxNixTVEFDS19GUkFN RV9PVkVSSEVBRCsxNSo4KHIxKQorCXN0ZAlyMTUsU1RBQ0tfRlJBTUVfT1ZFUkhFQUQrMTYq OChyMSkKKwlzdGQJcjE0LFNUQUNLX0ZSQU1FX09WRVJIRUFEKzE3KjgocjEpCisJc3RkCXIx MyxTVEFDS19GUkFNRV9PVkVSSEVBRCsxOCo4KHIxKQorCXN0ZAkgcjMsU1RBQ0tfRlJBTUVf T1ZFUkhFQUQrMTkqOChyMSkKKwlzdGQJIHIyLFNUQUNLX0ZSQU1FX09WRVJIRUFEKzIwKjgo cjEpCisJc3RkCSByMCxTVEFDS19GUkFNRV9PVkVSSEVBRCsyMSo4KHIxKQorCisJLyogU2F2 ZSBzcGVjaWFsIHJlZ2lzdGVycy4gKDUpICovCisJbWZjdHIJIHIyCisJc3RkCSByMixTVEFD S19GUkFNRV9PVkVSSEVBRCsyMio4KHIxKQorCW1mY3IJIHIyCisJc3RkCSByMixTVEFDS19G UkFNRV9PVkVSSEVBRCsyMyo4KHIxKQorCW1meGVyCSByMgorCXN0ZAkgcjIsU1RBQ0tfRlJB TUVfT1ZFUkhFQUQrMjQqOChyMSkKKwltZmxyCSByMgorCXN0ZAkgcjIsU1RBQ0tfRlJBTUVf T1ZFUkhFQUQrMjUqOChyMSkKKwltZm1zcgkgcjIKKwlzdGQJIHIyLFNUQUNLX0ZSQU1FX09W RVJIRUFEKzI2KjgocjEpCisKKwkvKiBBY3R1YWwgc3dpdGNoIGJsb2NrLiAqLworCWxkCSBy MiwwKHI0KQkvKiByMiA9IG9sZF9hZHAgPSBhZHBfY3B1X2N1cnJlbnRbY3B1aWRdICovCisJ c3RkCSByMSwwKHIyKQkvKiBvbGRfYWRwLT5lc3BbMF0gPSBzcCAqLworCXN0ZAkgcjMsMChy NCkJLyogYWRwX2NwdV9jdXJyZW50W2NwdWlkXSA9IG5ld19hZHAgKi8KKwkvKiBDT05GSUdf U01QIHNob3VsZCBzeW5jIGhlcmU7IGJ1dCBmaXJzdCwgYWNjZXNzZXMgdG8gZXNwW10KKwl3 b3VsZCByZXF1aXJlIGNwdWlkLWluZGV4aW5nLiAqLworCWxkCSByMSwwKHIzKQkvKiBzcCA9 IG5ld19hZHAtPmVzcFswXSAqLworCisJLyogUmVzdG9yZSBzcGVjaWFsIHJlZ2lzdGVycy4g Ki8KKwlsZAkgcjIsU1RBQ0tfRlJBTUVfT1ZFUkhFQUQrMjYqOChyMSkKKwltdG1zcmQJIHIy CisJbGQJIHIyLFNUQUNLX0ZSQU1FX09WRVJIRUFEKzI1KjgocjEpCisJbXRscgkgcjIKKwls ZAkgcjIsU1RBQ0tfRlJBTUVfT1ZFUkhFQUQrMjQqOChyMSkKKwltdHhlcgkgcjIKKwlsZAkg cjIsU1RBQ0tfRlJBTUVfT1ZFUkhFQUQrMjMqOChyMSkKKwltdGNyCSByMgorCWxkCSByMixT VEFDS19GUkFNRV9PVkVSSEVBRCsyMio4KHIxKQorCW10Y3RyCSByMgorCisJLyogUmVzdG9y ZSBnZW5lcmFsIHB1cnBvc2UgcmVnaXN0ZXJzLiAqLworCWxkCSByMCxTVEFDS19GUkFNRV9P VkVSSEVBRCsyMSo4KHIxKQorCWxkCSByMixTVEFDS19GUkFNRV9PVkVSSEVBRCsyMCo4KHIx KQorCWxkCSByMyxTVEFDS19GUkFNRV9PVkVSSEVBRCsxOSo4KHIxKQorCWxkCXIxMyxTVEFD S19GUkFNRV9PVkVSSEVBRCsxOCo4KHIxKQorCWxkCXIxNCxTVEFDS19GUkFNRV9PVkVSSEVB RCsxNyo4KHIxKQorCWxkCXIxNSxTVEFDS19GUkFNRV9PVkVSSEVBRCsxNio4KHIxKQorCWxk CXIxNixTVEFDS19GUkFNRV9PVkVSSEVBRCsxNSo4KHIxKQorCWxkCXIxNyxTVEFDS19GUkFN RV9PVkVSSEVBRCsxNCo4KHIxKQorCWxkCXIxOCxTVEFDS19GUkFNRV9PVkVSSEVBRCsxMyo4 KHIxKQorCWxkCXIxOSxTVEFDS19GUkFNRV9PVkVSSEVBRCsxMio4KHIxKQorCWxkCXIyMCxT VEFDS19GUkFNRV9PVkVSSEVBRCsxMSo4KHIxKQorCWxkCXIyMSxTVEFDS19GUkFNRV9PVkVS SEVBRCsxMCo4KHIxKQorCWxkCXIyMixTVEFDS19GUkFNRV9PVkVSSEVBRCs5KjgocjEpCisJ bGQJcjIzLFNUQUNLX0ZSQU1FX09WRVJIRUFEKzgqOChyMSkKKwlsZAlyMjQsU1RBQ0tfRlJB TUVfT1ZFUkhFQUQrNyo4KHIxKQorCWxkCXIyNSxTVEFDS19GUkFNRV9PVkVSSEVBRCs2Kjgo cjEpCisJbGQJcjI2LFNUQUNLX0ZSQU1FX09WRVJIRUFEKzUqOChyMSkKKwlsZAlyMjcsU1RB Q0tfRlJBTUVfT1ZFUkhFQUQrNCo4KHIxKQorCWxkCXIyOCxTVEFDS19GUkFNRV9PVkVSSEVB RCszKjgocjEpCisJbGQJcjI5LFNUQUNLX0ZSQU1FX09WRVJIRUFEKzIqOChyMSkKKwlsZAly MzAsU1RBQ0tfRlJBTUVfT1ZFUkhFQUQrMSo4KHIxKQorCWxkCXIzMSxTVEFDS19GUkFNRV9P VkVSSEVBRCswKjgocjEpCisKKwlhZGRpCXIxLHIxLDIyNCtTVEFDS19GUkFNRV9PVkVSSEVB RAorCisJYmxyCisKKyNlbmRpZiAvKiBDT05GSUdfQURFT1NfVEhSRUFEUyAqLworCisvKiBU T0RPOiBub3QgdG91Y2hlZCBvciBjaGVja2VkIGluIGFueSB3YXkgKi8KKy8qIFJldHVybnMg dGhlIGN1cnJlbnQgdGhyZWFkaW5mbyBwb2ludGVyIGluIGEgd2F5IHdoaWNoIGlzCisgICBp bnNlbnNpdGl2ZSB0byB0aGUgdW5kZXJseWluZyBzdGFjaywgYnkgZGlyZWN0bHkgcmVhZGlu ZyB0aGUKKyAgIHNwZWNpYWwgcHVycG9zZSByZWdpc3RlciAjMy4gKi8KKwkKK19HTE9CQUwo X19hZGVvc19jdXJyZW50X3RocmVhZGluZm8pCisJbWZzcHIJcjMsU1BSRzMKKwlhZGRpCXIz LHIzLC1USFJFQUQKKwl0b3ZpcnQocjMscjMpCisJYmxyCisJCisjZW5kaWYgLyogQ09ORklH X0FERU9TX0NPUkUgKi8KKwpkaWZmIC1OcnUgbGludXgtMi42LjEwL2FyY2gvcHBjNjQva2Vy bmVsL2hlYWQuUyBsaW51eC0yLjYuMTAtYWRlb3MtcHBjNjQtZGV2ZWwvYXJjaC9wcGM2NC9r ZXJuZWwvaGVhZC5TCi0tLSBsaW51eC0yLjYuMTAvYXJjaC9wcGM2NC9rZXJuZWwvaGVhZC5T CTIwMDQtMTItMjQgMjM6MzQ6NDguMDAwMDAwMDAwICswMjAwCisrKyBsaW51eC0yLjYuMTAt YWRlb3MtcHBjNjQtZGV2ZWwvYXJjaC9wcGM2NC9rZXJuZWwvaGVhZC5TCTIwMDUtMDYtMDEg MTU6NTE6MTcuMDAwMDAwMDAwICswMzAwCkBAIC0zODEsNiArMzgxLDE4IEBACiAJYmwJaGRs cjsJCQkJCVwKIAliCS5yZXRfZnJvbV9leGNlcHRfbGl0ZQogCisjaWZkZWYgQ09ORklHX0FE RU9TX0NPUkUKKyNkZWZpbmUgQURFT1NfRVhDRVBUSU9OX0NPTU1PTl9MSVRFKHRyYXAsIGxh YmVsLCBoZGxyKQlcCisJLmFsaWduCTc7CQkJCQlcCisJLmdsb2JsIGxhYmVsIyNfY29tbW9u OwkJCQlcCitsYWJlbCMjX2NvbW1vbjoJCQkJCQlcCisJRVhDRVBUSU9OX1BST0xPR19DT01N T04odHJhcCwgUEFDQV9FWEdFTik7CVwKKwlESVNBQkxFX0lOVFM7CQkJCQlcCisJYWRkaQly MyxyMSxTVEFDS19GUkFNRV9PVkVSSEVBRDsJCVwKKwlibAloZGxyOwkJCQkJXAorCWIJLl9f YWRlb3NfcmV0X2Zyb21fZXhjZXB0X2xpdGUKKyNlbmRpZiAvKiBDT05GSUdfQURFT1NfQ09S RSAqLworCiAvKgogICogU3RhcnQgb2YgcFNlcmllcyBzeXN0ZW0gaW50ZXJydXB0IHJvdXRp bmVzCiAgKi8KQEAgLTc2MSw3ICs3NzMsMTIgQEAKIAlibAkuTWFjaGluZUNoZWNrRXhjZXB0 aW9uCiAJYgkucmV0X2Zyb21fZXhjZXB0CiAKKworI2lmZGVmIENPTkZJR19BREVPU19DT1JF CisJQURFT1NfRVhDRVBUSU9OX0NPTU1PTl9MSVRFKDB4OTAwLCBEZWNyZW1lbnRlciwgLl9f YWRlb3NfZ3JhYl90aW1lcikgCisjZWxzZSAvKiAhQ09ORklHX0FERU9TX0NPUkUgKi8KIAlT VERfRVhDRVBUSU9OX0NPTU1PTl9MSVRFKDB4OTAwLCBEZWNyZW1lbnRlciwgLnRpbWVyX2lu dGVycnVwdCkKKyNlbmRpZiAvKiBDT05GSUdfQURFT1NfQ09SRSAqLwogCVNURF9FWENFUFRJ T05fQ09NTU9OKDB4YTAwLCBUcmFwXzBhLCAuVW5rbm93bkV4Y2VwdGlvbikKIAlTVERfRVhD RVBUSU9OX0NPTU1PTigweGIwMCwgVHJhcF8wYiwgLlVua25vd25FeGNlcHRpb24pCiAJU1RE X0VYQ0VQVElPTl9DT01NT04oMHhkMDAsIFNpbmdsZVN0ZXAsIC5TaW5nbGVTdGVwRXhjZXB0 aW9uKQpAQCAtODkwLDggKzkwNywxMyBAQAogSGFyZHdhcmVJbnRlcnJ1cHRfZW50cnk6CiAJ RElTQUJMRV9JTlRTCiAJYWRkaQlyMyxyMSxTVEFDS19GUkFNRV9PVkVSSEVBRAorI2lmZGVm IENPTkZJR19BREVPU19DT1JFCisJYmwJLl9fYWRlb3NfZ3JhYl9pcnEKKwliCS5fX2FkZW9z X3JldF9mcm9tX2V4Y2VwdF9saXRlCisjZWxzZSAvKiAhQ09ORklHX0FERU9TX0NPUkUgKi8K IAlibAkuZG9fSVJRCiAJYgkucmV0X2Zyb21fZXhjZXB0X2xpdGUKKyNlbmRpZiAvKiBDT05G SUdfQURFT1NfQ09SRSAqLwogCiAJLmFsaWduCTcKIAkuZ2xvYmwgQWxpZ25tZW50X2NvbW1v bgpkaWZmIC1OcnUgbGludXgtMi42LjEwL2FyY2gvcHBjNjQva2VybmVsL2lkbGUuYyBsaW51 eC0yLjYuMTAtYWRlb3MtcHBjNjQtZGV2ZWwvYXJjaC9wcGM2NC9rZXJuZWwvaWRsZS5jCi0t LSBsaW51eC0yLjYuMTAvYXJjaC9wcGM2NC9rZXJuZWwvaWRsZS5jCTIwMDQtMTItMjQgMjM6 MzU6MjQuMDAwMDAwMDAwICswMjAwCisrKyBsaW51eC0yLjYuMTAtYWRlb3MtcHBjNjQtZGV2 ZWwvYXJjaC9wcGM2NC9rZXJuZWwvaWRsZS5jCTIwMDUtMDUtMTIgMTM6MzY6NTEuMDAwMDAw MDAwICswMzAwCkBAIC0xMzEsNiArMTMxLDkgQEAKIAogCQkJd2hpbGUgKCFuZWVkX3Jlc2No ZWQoKSAmJiAhY3B1X2lzX29mZmxpbmUoY3B1KSkgewogCQkJCWJhcnJpZXIoKTsKKyNpZmRl ZiBDT05GSUdfQURFT1NfQ09SRQorCQkJCWFkZW9zX3N1c3BlbmRfZG9tYWluKCk7CisjZW5k aWYgLyogQ09ORklHX0FERU9TX0NPUkUgKi8KIAkJCQkvKgogCQkJCSAqIEdvIGludG8gbG93 IHRocmVhZCBwcmlvcml0eSBhbmQgcG9zc2libHkKIAkJCQkgKiBsb3cgcG93ZXIgbW9kZS4K QEAgLTI4OCw4ICsyOTEsMTUgQEAKIHsKIAl3aGlsZSgxKSB7CiAJCS8qIGNoZWNrIENQVSB0 eXBlIGhlcmUgKi8KLQkJaWYgKCFuZWVkX3Jlc2NoZWQoKSkKKwkJaWYgKCFuZWVkX3Jlc2No ZWQoKSkgCisjaWZkZWYgQ09ORklHX0FERU9TX0NPUkUKKwkJeworCQkJYWRlb3Nfc3VzcGVu ZF9kb21haW4oKTsKIAkJCXBvd2VyNF9pZGxlKCk7CisJCX0KKyNlbHNlIC8qICFDT05GSUdf QURFT1NfQ09SRSAqLworCQkJcG93ZXI0X2lkbGUoKTsKKyNlbmRpZiAvKiBDT05GSUdfQURF T1NfQ09SRSAqLwkJCiAJCWlmIChuZWVkX3Jlc2NoZWQoKSkKIAkJCXNjaGVkdWxlKCk7CiAJ fQpkaWZmIC1OcnUgbGludXgtMi42LjEwL2FyY2gvcHBjNjQva2VybmVsL2lycS5jIGxpbnV4 LTIuNi4xMC1hZGVvcy1wcGM2NC1kZXZlbC9hcmNoL3BwYzY0L2tlcm5lbC9pcnEuYwotLS0g bGludXgtMi42LjEwL2FyY2gvcHBjNjQva2VybmVsL2lycS5jCTIwMDQtMTItMjQgMjM6MzQ6 MzIuMDAwMDAwMDAwICswMjAwCisrKyBsaW51eC0yLjYuMTAtYWRlb3MtcHBjNjQtZGV2ZWwv YXJjaC9wcGM2NC9rZXJuZWwvaXJxLmMJMjAwNS0wNS0xMiAxMzozNjo1MS4wMDAwMDAwMDAg KzAzMDAKQEAgLTEzNCwxNCArMTM0LDI1IEBACiAKIAlpZiAoZGVzYy0+c3RhdHVzICYgSVJR X1BFUl9DUFUpIHsKIAkJLyogbm8gbG9ja2luZyByZXF1aXJlZCBmb3IgQ1BVLWxvY2FsIGlu dGVycnVwdHM6ICovCisjaWZkZWYgQ09ORklHX0FERU9TX0NPUkUKKwkJaWYgKCFhZHBfcGlw ZWxpbmVkKQorCQkJYWNrX2lycShpcnEpOworI2Vsc2UKIAkJYWNrX2lycShpcnEpOworI2Vu ZGlmIC8qIENPTkZJR19BREVPU19DT1JFICovCiAJCWFjdGlvbl9yZXQgPSBoYW5kbGVfSVJR X2V2ZW50KGlycSwgcmVncywgZGVzYy0+YWN0aW9uKTsKIAkJZGVzYy0+aGFuZGxlci0+ZW5k KGlycSk7CiAJCXJldHVybjsKIAl9CiAKIAlzcGluX2xvY2soJmRlc2MtPmxvY2spOworI2lm ZGVmIENPTkZJR19BREVPU19DT1JFCisJaWYgKCFhZHBfcGlwZWxpbmVkKQorCQlhY2tfaXJx KGlycSk7CisjZWxzZQogCWFja19pcnEoaXJxKTsJCisjZW5kaWYgLyogQ09ORklHX0FERU9T X0NPUkUgKi8KKwkKIAkvKgogCSAgIFJFUExBWSBpcyB3aGVuIExpbnV4IHJlc2VuZHMgYW4g SVJRIHRoYXQgd2FzIGRyb3BwZWQgZWFybGllcgogCSAgIFdBSVRJTkcgaXMgdXNlZCBieSBw cm9iZSB0byBtYXJrIGlycXMgdGhhdCBhcmUgYmVpbmcgdGVzdGVkCmRpZmYgLU5ydSBsaW51 eC0yLjYuMTAvYXJjaC9wcGM2NC9rZXJuZWwvTWFrZWZpbGUgbGludXgtMi42LjEwLWFkZW9z LXBwYzY0LWRldmVsL2FyY2gvcHBjNjQva2VybmVsL01ha2VmaWxlCi0tLSBsaW51eC0yLjYu MTAvYXJjaC9wcGM2NC9rZXJuZWwvTWFrZWZpbGUJMjAwNC0xMi0yNCAyMzozNTozOS4wMDAw MDAwMDAgKzAyMDAKKysrIGxpbnV4LTIuNi4xMC1hZGVvcy1wcGM2NC1kZXZlbC9hcmNoL3Bw YzY0L2tlcm5lbC9NYWtlZmlsZQkyMDA1LTA1LTEyIDEzOjM2OjUxLjAwMDAwMDAwMCArMDMw MApAQCAtNjIsNCArNjIsNiBAQAogCiBvYmotJChDT05GSUdfQUxUSVZFQykJCSs9IHZlY2Vt dS5vIHZlY3Rvci5vCiAKK29iai0kKENPTkZJR19BREVPU19DT1JFKQkrPSBhZGVvcy5vCisK IENGTEFHU19pb2N0bDMyLm8gKz0gLUlmcy8KZGlmZiAtTnJ1IGxpbnV4LTIuNi4xMC9hcmNo L3BwYzY0L2tlcm5lbC9wcGNfa3N5bXMuYyBsaW51eC0yLjYuMTAtYWRlb3MtcHBjNjQtZGV2 ZWwvYXJjaC9wcGM2NC9rZXJuZWwvcHBjX2tzeW1zLmMKLS0tIGxpbnV4LTIuNi4xMC9hcmNo L3BwYzY0L2tlcm5lbC9wcGNfa3N5bXMuYwkyMDA0LTEyLTI0IDIzOjM0OjI2LjAwMDAwMDAw MCArMDIwMAorKysgbGludXgtMi42LjEwLWFkZW9zLXBwYzY0LWRldmVsL2FyY2gvcHBjNjQv a2VybmVsL3BwY19rc3ltcy5jCTIwMDUtMDYtMDEgMTU6MTc6MjEuMDAwMDAwMDAwICswMzAw CkBAIC0xNjMsMyArMTYzLDMyIEBACiBFWFBPUlRfU1lNQk9MKHBhY2EpOwogRVhQT1JUX1NZ TUJPTChjdXJfY3B1X3NwZWMpOwogRVhQT1JUX1NZTUJPTChzeXN0ZW1jZmcpOworCisjaWZk ZWYgQ09ORklHX0FERU9TX0NPUkUKKy8qIFRoZSBmb2xsb3dpbmcgYXJlIHBlci1wbGF0Zm9y bSBjb252ZW5pZW5jZSBleHBvcnRzIHdoaWNoIGFyZSBuZWVkZWQKKyAgIGJ5IHNvbWUgQWRl b3MgZG9tYWlucyBsb2FkZWQgYXMga2VybmVsIG1vZHVsZXMuICovCitFWFBPUlRfU1lNQk9M KHRiX3RpY2tzX3Blcl9qaWZmeSk7CitFWFBPUlRfU1lNQk9MKF9fc3dpdGNoX3RvKTsKK3Zv aWQgc2hvd19zdGFjayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssCisJCXVuc2lnbmVkIGxv bmcgKmVzcCk7CitFWFBPUlRfU1lNQk9MKHNob3dfc3RhY2spOworCisvKiB0aGVzZSB0d28g YXJlIG5lZWRlZCBieSB0aGUgdGFzayBzd2l0Y2hpbmcgY29kZSBpbiBmdXNpb24gKi8KK2V4 dGVybiB2b2lkIHN3aXRjaF9zdGFiKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3Qg bW1fc3RydWN0ICptbSk7CitleHRlcm4gdm9pZCBzd2l0Y2hfc2xiKHN0cnVjdCB0YXNrX3N0 cnVjdCAqdHNrLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSk7CitFWFBPUlRfU1lNQk9MKHN3aXRj aF9zdGFiKTsKK0VYUE9SVF9TWU1CT0woc3dpdGNoX3NsYik7CisKKy8qIGZsdXNoX3RsYl9w ZW5kaW5nKCkgKi8KK0VYUE9SVF9QRVJfQ1BVX1NZTUJPTChwcGM2NF90bGJfYmF0Y2gpOwor RVhQT1JUX1NZTUJPTChfX2ZsdXNoX3RsYl9wZW5kaW5nKTsKKworRVhQT1JUX1NZTUJPTChf c3dpdGNoKTsKKyNpZmRlZiBGRVdfQ09OVEVYVFMKK0VYUE9SVF9TWU1CT0wobnJfZnJlZV9j b250ZXh0cyk7CitFWFBPUlRfU1lNQk9MKGNvbnRleHRfbW0pOworRVhQT1JUX1NZTUJPTChz dGVhbF9jb250ZXh0KTsKKyNlbmRpZgorZXh0ZXJuIHN0cnVjdCB0YXNrX3N0cnVjdCAqbGFz dF90YXNrX3VzZWRfbWF0aDsKK0VYUE9SVF9TWU1CT0wobGFzdF90YXNrX3VzZWRfbWF0aCk7 CisjZW5kaWYgLyogQ09ORklHX0FERU9TX0NPUkUgKi8KZGlmZiAtTnJ1IGxpbnV4LTIuNi4x MC9hcmNoL3BwYzY0L2tlcm5lbC90cmFwcy5jIGxpbnV4LTIuNi4xMC1hZGVvcy1wcGM2NC1k ZXZlbC9hcmNoL3BwYzY0L2tlcm5lbC90cmFwcy5jCi0tLSBsaW51eC0yLjYuMTAvYXJjaC9w cGM2NC9rZXJuZWwvdHJhcHMuYwkyMDA0LTEyLTI0IDIzOjM0OjQ3LjAwMDAwMDAwMCArMDIw MAorKysgbGludXgtMi42LjEwLWFkZW9zLXBwYzY0LWRldmVsL2FyY2gvcHBjNjQva2VybmVs L3RyYXBzLmMJMjAwNS0wNi0wMSAxNjo1ODo1OS4wMDAwMDAwMDAgKzAzMDAKQEAgLTc1LDYg Kzc1LDExIEBACiAJaWYgKGRlYnVnZ2VyKHJlZ3MpKQogCQlyZXR1cm4gMTsKIAorI2lmZGVm IENPTkZJR19BREVPU19DT1JFCisJLyogbGV0cyB1cyBzZWUgT29wc2VzIGZyb20gb3RoZXIg ZG9tYWlucywgdG9vICovCisJaWYgKGFkcF9jdXJyZW50ICE9IGFkcF9yb290KQorCQlhZGVv c19zZXRfcHJpbnRrX3N5bmMoYWRwX2N1cnJlbnQpOworI2VuZGlmIC8qIENPTkZJR19BREVP U19DT1JFICovCiAJY29uc29sZV92ZXJib3NlKCk7CiAJc3Bpbl9sb2NrX2lycSgmZGllX2xv Y2spOwogCWJ1c3Rfc3BpbmxvY2tzKDEpOwpAQCAtMTg1LDkgKzE5MCwyMCBAQAogfQogI2Vu ZGlmCiAKKyNpZmRlZiBDT05GSUdfQURFT1NfQ09SRQorc3RhdGljIGlubGluZSBpbnQgX19h ZGVvc19waXBlbGluZV90cmFwKGludCB0cmFwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sK KyAgICByZXR1cm4gX19hZGVvc19ldmVudF9tb25pdG9yc1t0cmFwXSA+IDAgPyBfX2FkZW9z X2hhbmRsZV9ldmVudCh0cmFwLHJlZ3MpIDogMDsKK30KKyNlbmRpZiAvKiBDT05GSUdfQURF T1NfQ09SRSAqLworCiB2b2lkCiBTeXN0ZW1SZXNldEV4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVn cyAqcmVncykKIHsKKyNpZmRlZiBDT05GSUdfQURFT1NfQ09SRQorCWlmIChfX2FkZW9zX3Bp cGVsaW5lX3RyYXAoQURFT1NfU1lTUkVTRVRfVFJBUCxyZWdzKSkKKwkJcmV0dXJuOworI2Vu ZGlmIC8qIENPTkZJR19BREVPU19DT1JFICovCiAjaWZkZWYgQ09ORklHX1BQQ19QU0VSSUVT CiAJaWYgKGZ3bm1pX2FjdGl2ZSkgewogCQlzdHJ1Y3QgcnRhc19lcnJvcl9sb2cgKmVycmhk ciA9IEZXTk1JX2dldF9lcnJpbmZvKHJlZ3MpOwpAQCAtMjY1LDcgKzI4MSwxMSBAQAogCQkJ cmV0dXJuOwogCX0KICNlbmRpZgotCisjaWZkZWYgQ09ORklHX0FERU9TX0NPUkUKKwlpZiAo X19hZGVvc19waXBlbGluZV90cmFwKEFERU9TX01DRV9UUkFQLHJlZ3MpKQorCSAgICByZXR1 cm47CisjZW5kaWYgLyogQ09ORklHX0FERU9TX0NPUkUgKi8KKwkKIAlpZiAoZGVidWdnZXJf ZmF1bHRfaGFuZGxlcihyZWdzKSkKIAkJcmV0dXJuOwogCWRpZSgiTWFjaGluZSBjaGVjayIs IHJlZ3MsIDApOwpAQCAtMjc4LDYgKzI5OCwxMSBAQAogdm9pZAogVW5rbm93bkV4Y2VwdGlv bihzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKKyNpZmRlZiBDT05GSUdfQURFT1NfQ09SRQor ICAgICAgIGlmIChfX2FkZW9zX3BpcGVsaW5lX3RyYXAoQURFT1NfVU5LTk9XTl9UUkFQLHJl Z3MpKQorCSAgIHJldHVybjsKKyNlbmRpZiAvKiBDT05GSUdfQURFT1NfQ09SRSAqLworCiAJ cHJpbnRrKCJCYWQgdHJhcCBhdCBQQzogJWx4LCBTUjogJWx4LCB2ZWN0b3I9JWx4XG4iLAog CSAgICAgICByZWdzLT5uaXAsIHJlZ3MtPm1zciwgcmVncy0+dHJhcCk7CiAKQEAgLTI4OSwx MiArMzE0LDIwIEBACiB7CiAJaWYgKGRlYnVnZ2VyX2lhYnJfbWF0Y2gocmVncykpCiAJCXJl dHVybjsKKyNpZmRlZiBDT05GSUdfQURFT1NfQ09SRQorCWlmIChfX2FkZW9zX3BpcGVsaW5l X3RyYXAoQURFT1NfSUFCUl9UUkFQLHJlZ3MpKQorCSAgICByZXR1cm47CisjZW5kaWYgLyog Q09ORklHX0FERU9TX0NPUkUgKi8KIAlfZXhjZXB0aW9uKFNJR1RSQVAsIHJlZ3MsIFRSQVBf QlJLUFQsIHJlZ3MtPm5pcCk7CiB9CiAKIHZvaWQKIFNpbmdsZVN0ZXBFeGNlcHRpb24oc3Ry dWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CisjaWZkZWYgQ09ORklHX0FERU9TX0NPUkUKKwlpZiAo X19hZGVvc19waXBlbGluZV90cmFwKEFERU9TX1NTVEVQX1RSQVAscmVncykpCisJICAgIHJl dHVybjsKKyNlbmRpZiAvKiBDT05GSUdfQURFT1NfQ09SRSAqLwogCXJlZ3MtPm1zciAmPSB+ TVNSX1NFOyAgLyogVHVybiBvZmYgJ3RyYWNlJyBiaXQgKi8KIAogCWlmIChkZWJ1Z2dlcl9z c3RlcChyZWdzKSkKQEAgLTQ1OSw2ICs0OTIsMTEgQEAKIHZvaWQKIFByb2dyYW1DaGVja0V4 Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKKyNpZmRlZiBDT05GSUdfQURFT1Nf Q09SRQorCWlmIChfX2FkZW9zX3BpcGVsaW5lX3RyYXAoQURFT1NfUENFX1RSQVAscmVncykp CisJICAgIHJldHVybjsKKyNlbmRpZiAvKiBDT05GSUdfQURFT1NfQ09SRSAqLworCiAJaWYg KHJlZ3MtPm1zciAmIDB4MTAwMDAwKSB7CiAJCS8qIElFRUUgRlAgZXhjZXB0aW9uICovCiAJ CXBhcnNlX2ZwZShyZWdzKTsKQEAgLTUwMCw2ICs1MzgsMTAgQEAKIAogdm9pZCBLZXJuZWxG UFVuYXZhaWxhYmxlRXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogeworI2lmZGVm IENPTkZJR19BREVPU19DT1JFCisJaWYgKF9fYWRlb3NfcGlwZWxpbmVfdHJhcChBREVPU19L RlBVTkFWQUlMX1RSQVAscmVncykpCisJCXJldHVybjsKKyNlbmRpZiAvKiBDT05GSUdfQURF T1NfQ09SRSAqLwogCXByaW50ayhLRVJOX0VNRVJHICJVbnJlY292ZXJhYmxlIEZQIFVuYXZh aWxhYmxlIEV4Y2VwdGlvbiAiCiAJCQkgICIlbHggYXQgJWx4XG4iLCByZWdzLT50cmFwLCBy ZWdzLT5uaXApOwogCWRpZSgiVW5yZWNvdmVyYWJsZSBGUCBVbmF2YWlsYWJsZSBFeGNlcHRp b24iLCByZWdzLCBTSUdBQlJUKTsKQEAgLTUwNyw2ICs1NDksMTEgQEAKIAogdm9pZCBBbHRp dmVjVW5hdmFpbGFibGVFeGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CisjaWZk ZWYgQ09ORklHX0FERU9TX0NPUkUKKwlpZiAoX19hZGVvc19waXBlbGluZV90cmFwKEFERU9T X0FMVFVOQVZBSUxfVFJBUCxyZWdzKSkKKwkgICAgcmV0dXJuOworI2VuZGlmIC8qIENPTkZJ R19BREVPU19DT1JFICovCisKICNpZm5kZWYgQ09ORklHX0FMVElWRUMKIAlpZiAodXNlcl9t b2RlKHJlZ3MpKSB7CiAJCS8qIEEgdXNlciBwcm9ncmFtIGhhcyBleGVjdXRlZCBhbiBhbHRp dmVjIGluc3RydWN0aW9uLApAQCAtNTM5LDYgKzU4NiwxMCBAQAogdm9pZAogUGVyZm9ybWFu Y2VNb25pdG9yRXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogeworI2lmZGVmIENP TkZJR19BREVPU19DT1JFCisJaWYgKF9fYWRlb3NfcGlwZWxpbmVfdHJhcChBREVPU19QRVJG TU9OX1RSQVAscmVncykpCisJCXJldHVybjsKKyNlbmRpZiAvKiBDT05GSUdfQURFT1NfQ09S RSAqLwogCXBlcmZfaXJxKHJlZ3MpOwogfQogCkBAIC01NTQsNyArNjA1LDEyIEBACiAJCWVt dWxhdGVfc2luZ2xlX3N0ZXAocmVncyk7CiAJCXJldHVybjsKIAl9Ci0KKyNpZmRlZiBDT05G SUdfQURFT1NfQ09SRQorCS8qIEFzc3VtZSB0aGF0IGZpeGluZyBhbGlnbm1lbnQgY2FuIGFs d2F5cyBiZSBkb25lIHJlZ2FyZGxlc3MKKwkgICBvZiB0aGUgY3VycmVudCBkb21haW4uICov CisJaWYgKF9fYWRlb3NfcGlwZWxpbmVfdHJhcChBREVPU19BTElHTk1FTlRfVFJBUCxyZWdz KSkKKwkgICAgcmV0dXJuOworI2VuZGlmIC8qIENPTkZJR19BREVPU19DT1JFICovCiAJLyog T3BlcmFuZCBhZGRyZXNzIHdhcyBiYWQgKi8JCiAJaWYgKGZpeGVkID09IC1FRkFVTFQpIHsK IAkJaWYgKHVzZXJfbW9kZShyZWdzKSkgewpAQCAtNTc3LDYgKzYzMywxMSBAQAogCWludCBl cnI7CiAJc2lnaW5mb190IGluZm87CiAKKyNpZmRlZiBDT05GSUdfQURFT1NfQ09SRQorCWlm IChfX2FkZW9zX3BpcGVsaW5lX3RyYXAoQURFT1NfQUxUQVNTSVNUX1RSQVAscmVncykpCisJ ICAgIHJldHVybjsKKyNlbmRpZiAvKiBDT05GSUdfQURFT1NfQ09SRSAqLworCiAJaWYgKCF1 c2VyX21vZGUocmVncykpIHsKIAkJcHJpbnRrKEtFUk5fRU1FUkcgIlZNWC9BbHRpdmVjIGFz c2lzdCBleGNlcHRpb24gaW4ga2VybmVsIG1vZGUiCiAJCSAgICAgICAiIGF0ICVseFxuIiwg cmVncy0+bmlwKTsKQEAgLTYxOCw2ICs2NzksMTAgQEAKICAqLwogdm9pZCB1bnJlY292ZXJh YmxlX2V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKKyNpZmRlZiBDT05GSUdf QURFT1NfQ09SRQorCWlmIChfX2FkZW9zX3BpcGVsaW5lX3RyYXAoQURFT1NfTlJFQ19UUkFQ LHJlZ3MpKQorCSAgICByZXR1cm47CisjZW5kaWYgLyogQ09ORklHX0FERU9TX0NPUkUgKi8K IAlwcmludGsoS0VSTl9FTUVSRyAiVW5yZWNvdmVyYWJsZSBleGNlcHRpb24gJWx4IGF0ICVs eFxuIiwKIAkgICAgICAgcmVncy0+dHJhcCwgcmVncy0+bmlwKTsKIAlkaWUoIlVucmVjb3Zl cmFibGUgZXhjZXB0aW9uIiwgcmVncywgU0lHQUJSVCk7CmRpZmYgLU5ydSBsaW51eC0yLjYu MTAvYXJjaC9wcGM2NC9tbS9mYXVsdC5jIGxpbnV4LTIuNi4xMC1hZGVvcy1wcGM2NC1kZXZl bC9hcmNoL3BwYzY0L21tL2ZhdWx0LmMKLS0tIGxpbnV4LTIuNi4xMC9hcmNoL3BwYzY0L21t L2ZhdWx0LmMJMjAwNC0xMi0yNCAyMzozNToyMy4wMDAwMDAwMDAgKzAyMDAKKysrIGxpbnV4 LTIuNi4xMC1hZGVvcy1wcGM2NC1kZXZlbC9hcmNoL3BwYzY0L21tL2ZhdWx0LmMJMjAwNS0w NS0xMiAxMzozNjo1MS4wMDAwMDAwMDAgKzAzMDAKQEAgLTk1LDYgKzk1LDEyIEBACiAKIAlC VUdfT04oKHRyYXAgPT0gMHgzODApIHx8ICh0cmFwID09IDB4NDgwKSk7CiAKKyNpZmRlZiBD T05GSUdfQURFT1NfQ09SRQorCWlmIChfX2FkZW9zX2V2ZW50X21vbml0b3JzW0FERU9TX0FD Q0VTU19UUkFQXSA+IDAgJiYKKwkgICAgX19hZGVvc19oYW5kbGVfZXZlbnQoQURFT1NfQUND RVNTX1RSQVAscmVncykgIT0gMCkKKwkgICAgcmV0dXJuIDA7CisjZW5kaWYgLyogQ09ORklH X0FERU9TX0NPUkUgKi8KKwogCWlmICh0cmFwID09IDB4MzAwKSB7CiAJCWlmIChkZWJ1Z2dl cl9mYXVsdF9oYW5kbGVyKHJlZ3MpKQogCQkJcmV0dXJuIDA7CmRpZmYgLU5ydSBsaW51eC0y LjYuMTAvRG9jdW1lbnRhdGlvbi9hZGVvcy50eHQgbGludXgtMi42LjEwLWFkZW9zLXBwYzY0 LWRldmVsL0RvY3VtZW50YXRpb24vYWRlb3MudHh0Ci0tLSBsaW51eC0yLjYuMTAvRG9jdW1l bnRhdGlvbi9hZGVvcy50eHQJMTk3MC0wMS0wMSAwMjowMDowMC4wMDAwMDAwMDAgKzAyMDAK KysrIGxpbnV4LTIuNi4xMC1hZGVvcy1wcGM2NC1kZXZlbC9Eb2N1bWVudGF0aW9uL2FkZW9z LnR4dAkyMDA1LTA1LTEyIDEzOjM2OjUxLjAwMDAwMDAwMCArMDMwMApAQCAtMCwwICsxLDE3 NiBAQAorCitUaGUgQWRlb3MgbmFub2tlcm5lbCBpcyBiYXNlZCBvbiByZXNlYXJjaCBhbmQg cHVibGljYXRpb25zIG1hZGUgaW4gdGhlCitlYXJseSAnOTBzIG9uIHRoZSBzdWJqZWN0IG9m IG5hbm9rZXJuZWxzLiBPdXIgYmFzaWMgbWV0aG9kIHdhcyB0bworcmV2ZXJzZSB0aGUgYXBw cm9hY2ggZGVzY3JpYmVkIGluIG1vc3Qgb2YgdGhlIHBhcGVycyBvbiB0aGUgc3ViamVjdC4K K0luc3RlYWQgb2YgZmlyc3QgYnVpbGRpbmcgdGhlIG5hbm9rZXJuZWwgYW5kIHRoZW4gYnVp bGRpbmcgdGhlIGNsaWVudAorT1Nlcywgd2Ugc3RhcnRlZCBmcm9tIGEgbGl2ZSBhbmQga25v d24tdG8tYmUtZnVuY3Rpb25hbCBPUywgTGludXgsIGFuZAoraW5zZXJ0ZWQgYSBuYW5va2Vy bmVsIGJlbmVhdGggaXQuIFN0YXJ0aW5nIGZyb20gQWRlb3MsIG90aGVyIGNsaWVudAorT1Nl cyBjYW4gbm93IGJlIHB1dCBzaWRlLWJ5LXNpZGUgd2l0aCB0aGUgTGludXgga2VybmVsLgor CitUbyB0aGlzIGVuZCwgQWRlb3MgZW5hYmxlcyBtdWx0aXBsZSBkb21haW5zIHRvIGV4aXN0 IHNpbXVsdGFuZW91c2x5IG9uCit0aGUgc2FtZSBoYXJkd2FyZS4gTm9uZSBvZiB0aGVzZSBk b21haW5zIHNlZSBlYWNoIG90aGVyLCBidXQgYWxsIG9mCit0aGVtIHNlZSBBZGVvcy4gQSBk b21haW4gaXMgbW9zdCBwcm9iYWJseSBhIGNvbXBsZXRlIE9TLCBidXQgdGhlcmUgaXMKK25v IGFzc3VtcHRpb24gYmVpbmcgbWFkZSByZWdhcmRpbmcgdGhlIHNvcGhpc3RpY2F0aW9uIG9m IHdoYXQncyBpbgorYSBkb21haW4uCisKK1RvIHNoYXJlIHRoZSBoYXJkd2FyZSBhbW9uZyB0 aGUgZGlmZmVyZW50IE9TZXMsIEFkZW9zIGltcGxlbWVudHMgYW4KK2ludGVycnVwdCBwaXBl bGluZSAoaXBpcGUpLiBFdmVyeSBPUyBkb21haW4gaGFzIGFuIGVudHJ5IGluIHRoZSBpcGlw ZS4KK0VhY2ggaW50ZXJydXB0IHRoYXQgY29tZXMgaW4gdGhlIGlwaXBlIGlzIHBhc3NlZCBv biB0byBldmVyeSBkb21haW4KK2luIHRoZSBpcGlwZS4gSW5zdGVhZCBvZiBkaXNhYmxpbmcv ZW5hYmxpbmcgaW50ZXJydXB0cywgZWFjaCBkb21haW4KK2luIHRoZSBwaXBlbGluZSBvbmx5 IG5lZWRzIHRvIHN0YWxsL3Vuc3RhbGwgaGlzIHBpcGVsaW5lIHN0YWdlLiBJZgorYW4gaXBp cGUgc3RhZ2UgaXMgc3RhbGxlZCwgdGhlbiB0aGUgaW50ZXJydXB0cyBkbyBub3QgcHJvZ3Jl c3MgaW4gdGhlCitpcGlwZSB1bnRpbCB0aGF0IHN0YWdlIGhhcyBiZWVuIHVuc3RhbGxlZC4g RWFjaCBzdGFnZSBvZiB0aGUgaXBpcGUKK2Nhbiwgb2YgY291cnNlLCBkZWNpZGUgdG8gZG8g YSBudW1iZXIgb2YgdGhpbmdzIHdpdGggYW4gaW50ZXJydXB0LgorQW1vbmcgb3RoZXIgdGhp bmdzLCBpdCBjYW4gZGVjaWRlIHRoYXQgaXQncyB0aGUgbGFzdCByZWNpcGllbnQgb2YgdGhl CitpbnRlcnJ1cHQuIEluIHRoYXQgY2FzZSwgdGhlIGlwaXBlIGRvZXMgbm90IHByb3BhZ2F0 ZSB0aGUgaW50ZXJydXB0Cit0byB0aGUgcmVzdCBvZiB0aGUgZG9tYWlucyBpbiB0aGUgaXBp cGUuCisKK1JlZ2FyZGxlc3Mgb2YgdGhlIG9wZXJhdGlvbnMgYmVpbmcgZG9uZSBpbiB0aGUg aXBpcGUsIHRoZSBBZGVvcyBjb2RlCitkb2VzIF9fbm90X18gcGxheSB3aXRoIHRoZSBpbnRl cnJ1cHQgbWFza3MuIFRoZSBvbmx5IGNhc2Ugd2hlcmUgdGhlCitoYXJkd2FyZSBtYXNrcyBh cmUgYWx0ZXJlZCBpcyBkdXJpbmcgdGhlIGFkZGl0aW9uL3JlbW92YWwgb2YgYSBkb21haW4K K2Zyb20gdGhlIGlwaXBlLiBUaGlzIGFsc28gbWVhbnMgdGhhdCBubyBPUyBpcyBhbGxvd2Vk IHRvIHVzZSB0aGUgcmVhbAoraGFyZHdhcmUgY2xpL3N0aS4gQnV0IHRoaXMgaXMgT0ssIHNp bmNlIHRoZSBzdGFsbC91bnN0YWxsIGNhbGxzCithY2hpZXZlIHRoZSBzYW1lIGZ1bmN0aW9u YWxpdHkuCisKK091ciBhcHByb2FjaCBpcyBiYXNlZCBvbiB0aGUgZm9sbG93aW5nIHBhcGVy cyAobGlua3MgdG8gdGhlc2UKK3BhcGVycyBhcmUgcHJvdmlkZWQgYXQgdGhlIGJvdHRvbSBv ZiB0aGlzIG1lc3NhZ2UpOgorWzFdIEQuIFByb2JlcnQsIEouIEJydW5vLCBhbmQgTS4gS2Fy emFvcm1hbi4gIlNwYWNlOiBhIG5ldyBhcHByb2FjaCB0bworb3BlcmF0aW5nIHN5c3RlbSBh YnN0cmFjdGlvbi4iIEluOiBJbnRlcm5hdGlvbmFsIFdvcmtzaG9wIG9uIE9iamVjdAorT3Jp ZW50YXRpb24gaW4gT3BlcmF0aW5nIFN5c3RlbXMsIHBhZ2VzIDEzMy0xMzcsIE9jdG9iZXIg MTk5MS4KK1syXSBELiBQcm9iZXJ0LCBKLiBCcnVuby4gIkJ1aWxkaW5nIGZ1bmRhbWVudGFs bHkgZXh0ZW5zaWJsZSBhcHBsaWNhdGlvbi0KK3NwZWNpZmljIG9wZXJhdGluZyBzeXN0ZW1z IGluIFNwYWNlIiwgTWFyY2ggMTk5NS4KK1szXSBELiBDaGVyaXRvbiwgSy4gRHVkYS4gIkEg Y2FjaGluZyBtb2RlbCBvZiBvcGVyYXRpbmcgc3lzdGVtIGtlcm5lbAorZnVuY3Rpb25hbGl0 eSIuIEluOiBQcm9jLiBTeW1wLiBvbiBPcGVyYXRpbmcgU3lzdGVtcyBEZXNpZ24gYW5kCitJ bXBsZW1lbnRhdGlvbiwgcGFnZXMgMTc5LTE5NCwgTW9udGVyZXkgQ0EgKFVTQSksIDE5OTQu CitbNF0gRC4gRW5nbGVyLCBNLiBLYWFzaG9laywgYW5kIEouIE8nVG9vbGUgSnIuICJFeG9r ZXJuZWw6IGFuIG9wZXJhdGluZworc3lzdGVtIGFyY2hpdGVjdHVyZSBmb3IgYXBwbGljYXRp b24tc3BlY2lmaWMgcmVzb3VyY2UgbWFuYWdlbWVudCIsCitEZWNlbWJlciAxOTk1LgorCitJ ZiB5b3UgZG9uJ3Qgd2FudCB0byBnbyBmZXRjaCB0aGUgY29tcGxldGUgcGFwZXJzLCBoZXJl J3MgYSBzdW1tYXJ5LgorVGhlIGZpcnN0IDIgZGlzY3VzcyB0aGUgU3BhY2UgbmFub2tlcm5l bCwgdGhlIDNyZCBkaXNjdXNzZWQgdGhlIGNhY2hlCituYW5va2VybmVsLCBhbmQgdGhlIGxh c3QgZGlzY3Vzc2VzIGV4b2tlcm5lbC4KKworVGhlIGNvbXBsZXRlIEFkZW9zIGFwcHJvYWNo IGhhcyBiZWVuIHRob3JvdWdobHkgZG9jdW1lbnRlZCBpbiBhIHdoaXRlcGFwZXIKK3B1Ymxp c2hlZCBtb3JlIHRoYW4gYSB5ZWFyIGFnbyBlbnRpdGxlZCAiQWRhcHRpdmUgRG9tYWluIEVu dmlyb25tZW50Citmb3IgT3BlcmF0aW5nIFN5c3RlbXMiIGFuZCBhdmFpbGFibGUgaGVyZTog aHR0cDovL3d3dy5vcGVyc3lzLmNvbS9hZGVvcworVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRp b24gaXMgc2xpZ2h0bHkgZGlmZmVyZW50LiBNYWlubHksIHdlIGRvIG5vdAoraW1wbGVtZW50 IHRoZSBmdW5jdGlvbmFsaXR5IHRvIG1vdmUgTGludXggb3V0IG9mIHJpbmcgMC4gQWx0aG91 Z2ggb2YKK2ludGVyZXN0LCB0aGlzIGFwcHJvYWNoIGlzIG5vdCB2ZXJ5IHBvcnRhYmxlLgor CitJbnN0ZWFkLCBvdXIgcGF0Y2ggdGFwcyByaWdodCBpbnRvIExpbnV4J3MgbWFpbiBzb3Vy Y2Ugb2YgY29udHJvbAorb3ZlciB0aGUgaGFyZHdhcmUsIHRoZSBpbnRlcnJ1cHQgZGlzcGF0 Y2hpbmcgY29kZSwgYW5kIGluc2VydHMgYW4KK2ludGVycnVwdCBwaXBlbGluZSB3aGljaCBj YW4gdGhlbiBzZXJ2ZSBhbGwgdGhlIG5hbm9rZXJuZWwncyBjbGllbnRzLAoraW5jbHVkaW5n IExpbnV4LgorCitUaGlzIGlzIG5vdCBhIG5vdmVsdHkgaW4gaXRzZWxmLiBPdGhlciBPU2Vz IGhhdmUgYmVlbiBtb2RpZmllZCBpbiBzdWNoCithIHdheSBmb3IgYSB3aWRlIHJhbmdlIG9m IHB1cnBvc2VzLiBPbmUgb2YgdGhlIG1vc3QgaW50ZXJlc3RpbmcKK2V4YW1wbGVzIGlzIGRl c2NyaWJlZCBieSBTdG9kb2xza3ksIENoZW4sIGFuZCBCZXJzaGFkIGluIGEgcGFwZXIKK2Vu dGl0bGVkICJGYXN0IEludGVycnVwdCBQcmlvcml0eSBNYW5hZ2VtZW50IGluIE9wZXJhdGlu ZyBTeXN0ZW0KK0tlcm5lbHMiIHB1Ymxpc2hlZCBpbiAxOTkzIGFzIHBhcnQgb2YgdGhlIFVz ZW5peCBNaWNyb2tlcm5lbHMgYW5kCitPdGhlciBLZXJuZWwgQXJjaGl0ZWN0dXJlcyBTeW1w b3NpdW0uIEluIHRoYXQgY2FzZSwgY2xpL3N0aSB3ZXJlCityZXBsYWNlZCBieSB2aXJ0dWFs IGNsaS9zdGkgd2hpY2ggZGlkIG5vdCBtb2RpZnkgdGhlIHJlYWwgaW50ZXJydXB0CittYXNr IGluIGFueSB3YXkuIEluc3RlYWQsIGludGVycnVwdHMgd2VyZSBkZWZlcmVkIGFuZCBkZWxp dmVyZWQgdG8KK3RoZSBPUyB1cG9uIGEgY2FsbCB0byB0aGUgdmlydHVhbGl6ZWQgc3RpLgor CitNYWlubHksIHRoaXMgcmVzdWx0ZWQgaW4gaW5jcmVhc2VkIHBlcmZvcm1hbmNlIGZvciB0 aGUgT1MuIEFsdGhvdWdoCit3ZSBoYXZlbid0IGRvbmUgYW55IG1lYXN1cmVtZW50cyBvbiBM aW51eCdzIGludGVycnVwdCBoYW5kbGluZworcGVyZm9ybWFuY2Ugd2l0aCBBZGVvcywgb3Vy IG5hbm9rZXJuZWwgaW5jbHVkZXMgYnkgZGVmaW5pdGlvbiB0aGUKK2NvZGUgaW1wbGVtZW50 aW5nIHRoZSB0ZWNobmlxdWUgZGVzY3JpYmVkIGluIHRoZSBhYm92ZW1lbnRpb25lZAorU3Rv ZG9sc2t5IHBhcGVyLCB3aGljaCB3ZSB1c2UgdG8gcmVkaXJlY3QgdGhlIGhhcmR3YXJlIGlu dGVycnVwdCBmbG93Cit0byB0aGUgcGlwZWxpbmUuCisKK2kzODYgYW5kIGFybW5vbW11IGFy ZSBjdXJyZW50bHkgc3VwcG9ydGVkLiBNb3N0IG9mIHRoZQorYXJjaGl0ZWN0dXJlLWRlcGVu ZGVudCBjb2RlIGlzIGVhc2lseSBwb3J0YWJsZSB0byBvdGhlciBhcmNoaXRlY3R1cmVzLgor CitBc2lkZSBvZiBhZGRpbmcgdGhlIEFkZW9zIG1vZHVsZSAoZHJpdmVyL2FkZW9zKSwgd2Ug YWxzbyBtb2RpZmllZCBzb21lCitmaWxlcyB0byB0YXAgaW50byBMaW51eCBpbnRlcnJ1cHQg YW5kIHN5c3RlbSBldmVudCBkaXNwYXRjaGluZyAoYWxsCit0aGUgbW9kaWZpY2F0aW9ucyBh cmUgZW5jYXBzdWxhdGVkIGluICNpZmRlZiBDT05GSUdfQURFT1NfKi8jZW5kaWYpLgorCitX ZSBtb2RpZmllZCB0aGUgaWRsZSB0YXNrIHNvIGl0IGdpdmVzIGNvbnRyb2wgYmFjayB0byBB ZGVvcyBpbiBvcmRlciBmb3IKK3RoZSBpcGlwZSB0byBjb250aW51ZSBwcm9wYWdhdGlvbi4K KworV2UgbW9kaWZpZWQgaW5pdC9tYWluLmMgdG8gaW5pdGlhbGl6ZSBBZGVvcyB2ZXJ5IGVh cmx5IGluIHRoZSBzdGFydHVwLgorCitPZiBjb3Vyc2UsIHdlIGFsc28gYWRkZWQgdGhlIGFw cHJvcHJpYXRlIG1ha2VmaWxlIG1vZGlmaWNhdGlvbnMgYW5kCitjb25maWcgb3B0aW9ucyBz byB0aGF0IHlvdSBjYW4gY2hvb3NlIHRvIGVuYWJsZS9kaXNhYmxlIEFkZW9zIGFzCitwYXJ0 IG9mIHRoZSBrZXJuZWwgYnVpbGQgY29uZmlndXJhdGlvbi4KKworQWRlb3MnIHB1YmxpYyBB UEkgaXMgZnVsbHkgZG9jdW1lbnRlZCBoZXJlOgoraHR0cDovL3d3dy5mcmVlc29mdHdhcmUu ZnNmLm9yZy9hZGVvcy9kb2MvYXBpL2luZGV4Lmh0bWwuCisKK0luIExpbnV4J3MgY2FzZSwg YWRlb3NfcmVnaXN0ZXJfZG9tYWluKCkgaXMgY2FsbGVkIHZlcnkgZWFybHkgZHVyaW5nCitz eXN0ZW0gc3RhcnR1cC4KKworVG8gYWRkIHlvdXIgZG9tYWluIHRvIHRoZSBpcGlwZSwgeW91 IG5lZWQgdG86CisxKSBSZWdpc3RlciB5b3VyIGRvbWFpbiB3aXRoIEFkZW9zIHVzaW5nIGFk ZW9zX3JlZ2lzdGVyX2RvbWFpbigpCisyKSBDYWxsIGFkZW9zX3ZpcnR1YWxpemVfaXJxKCkg Zm9yIGFsbCB0aGUgSVJRcyB5b3Ugd2lzaCB0byBiZQorbm90aWZpZWQgYWJvdXQgaW4gdGhl IGlwaXBlLgorCitUaGF0J3MgaXQuIFByb3ZpZGVkIHlvdSBnYXZlIEFkZW9zIGFwcHJvcHJp YXRlIGhhbmRsZXJzIGluIHN0ZXAKKyMyLCB5b3VyIGludGVycnVwdHMgd2lsbCBiZSBkZWxp dmVyZWQgdmlhIHRoZSBpcGlwZS4KKworRHVyaW5nIHJ1bnRpbWUsIHlvdSBtYXkgY2hhbmdl IHlvdXIgcG9zaXRpb24gaW4gdGhlIGlwaXBlIHVzaW5nCithZGVvc19yZW5pY2VfZG9tYWlu KCkuIFlvdSBtYXkgYWxzbyBzdGFsbC91bnN0YWxsIHRoZSBwaXBlbGluZQorYW5kIGNoYW5n ZSB0aGUgaXBpcGUncyBoYW5kbGluZyBvZiB0aGUgaW50ZXJydXB0cyBhY2NvcmRpbmcgdG8g eW91cgorbmVlZHMuCisKK0FkZW9zIHN1cHBvcnRzIFNNUCwgYW5kIEFQSUMgc3VwcG9ydCBv biBVUC4KKworSGVyZSBhcmUgc29tZSBvZiB0aGUgcG9zc2libGUgdXNlcyBmb3IgQWRlb3Mg KHRoaXMgbGlzdCBpcyBmYXIKK2Zyb20gY29tcGxldGUpOgorMSkgTXVjaCBsaWtlIFVzZXIt TW9kZSBMaW51eCwgaXQgc2hvdWxkIG5vdyBiZSBwb3NzaWJsZSB0byBoYXZlIDIKK0xpbnV4 IGtlcm5lbHMgbGl2aW5nIHNpZGUtYnktc2lkZSBvbiB0aGUgc2FtZSBoYXJkd2FyZS4gSW4g Y29udHJhc3QKK3RvIFVNTCwgdGhpcyB3b3VsZCBub3QgYmUgMiBrZXJuZWxzIG9uZSBvbnRv cCBvZiB0aGUgb3RoZXIsIGJ1dAorcmVhbGx5IHNpZGUtYnktc2lkZS4gU2luY2UgTGludXgg Y2FuIGJlIHRvbGQgYXQgYm9vdCB0aW1lIHRvIHVzZQorb25seSBvbmUgcG9ydGlvbiBvZiB0 aGUgYXZhaWxhYmxlIFJBTSwgb24gYSAxMjhNQiBtYWNoaW5lIHRoaXMKK3dvdWxkIG1lYW4g dGhhdCB0aGUgZmlyc3QgY291bGQgYmUgbWFkZSB0byB1c2UgdGhlIDAtNjRNQiBzcGFjZSBh bmQKK3RoZSBzZWNvbmQgd291bGQgdXNlIHRoZSA2NC0xMjhNQiBzcGFjZS4gV2UgcmVhbGl6 ZSB0aGF0IG1hbnkKK21vZGlmaWNhdGlvbnMgYXJlIHJlcXVpcmVkLiBBbW9uZyBvdGhlciB0 aGluZ3MsIG9uZSBvZiB0aGUgMiBrZXJuZWxzCit3aWxsIG5vdCBuZWVkIHRvIGNvbmR1Y3Qg aGFyZHdhcmUgaW5pdGlhbGl6YXRpb24uIE5ldmVydGhlbGVzcywgdGhpcworcG9zc2liaWxp dHkgc2hvdWxkIGJlIHN0dWRpZWQgY2xvc2VyLgorCisyKSBJdCBmb2xsb3dzIGZyb20gIzEg dGhhdCBhZGRpbmcgb3RoZXIga2VybmVscyBiZXNpZGUgTGludXggc2hvdWxkCitiZSBmZWFz aWJsZS4gQlNEIGlzIGEgcHJpbWUgY2FuZGlkYXRlLCBidXQgaXQgd291bGQgYWxzbyBiZSBu aWNlIHRvCitzZWUgd2hhdCB2aXJ0dWFsaXplcnMgc3VjaCBhcyBWTVdhcmUgYW5kIFBsZXg4 NiBjb3VsZCBkbyB3aXRoIEFkZW9zLgorUHJvcHJpZXRhcnkgb3BlcmF0aW5nIHN5c3RlbXMg Y291bGQgcG90ZW50aWFsbHkgYWxzbyBiZSBhY2NvbW9kYXRlZC4KKworMykgQWxsIHRoZSBw cmV2aW91cyB3b3JrIHRoYXQgaGFzIGJlZW4gZG9uZSBvbiBuYW5va2VybmVscyBzaG91bGQg bm93CitiZSBlYXNpbHkgcG9ydGVkIHRvIExpbnV4LiBNYWlubHksIHdlIHdvdWxkIGJlIHZl cnkgaW50ZXJlc3RlZCB0bworaGVhciBhYm91dCBleHRlbnNpb25zIHRvIEFkZW9zLiBQcmlt YXJpbHksIHdlIGhhdmUgbm8gbWVjaGFuaXNtcworY3VycmVudGx5IGVuYWJsaW5nIG11bHRp cGxlIGRvbWFpbnMgdG8gc2hhcmUgaW5mb3JtYXRpb24uIFRoZSBwYXBlcnMKK21lbnRpb25l ZCBlYXJsaWVyIHByb3ZpZGUgc3VjaCBtZWNoYW5pc21zLCBidXQgd2UnZCBsaWtlIHRvIHNl ZQorYWN0dWFsIHByYWN0aWNhbCBleGFtcGxlcy4KKworNCkgS2VybmVsIGRlYnVnZ2Vycycg bWFpbiBwcm9ibGVtICh0YXBwaW5nIGludG8gdGhlIGtlcm5lbCdzCitpbnRlcnJ1cHRzKSBp cyBzb2x2ZWQgYW5kIGl0IHNob3VsZCB0aGVuIGJlIHBvc3NpYmxlIHRvIHByb3ZpZGUKK3Bh dGNobGVzcyBrZXJuZWwgZGVidWdnZXJzLiBUaGV5IHdvdWxkIHRoZW4gYmVjb21lIGxvYWRh YmxlIGtlcm5lbAorbW9kdWxlcy4KKworNSkgRHJpdmVycyB3aG8gcmVxdWlyZSBhYnNvbHV0 ZSBwcmlvcml0eSBhbmQgZGlzbGlrZSBvdGhlciBrZXJuZWwKK3BvcnRpb25zIHdobyB1c2Ug Y2xpL3N0aSBjYW4gbm93IGNyZWF0ZSBhIGRvbWFpbiBvZiB0aGVpciBvd24KK2FuZCBwbGFj ZSB0aGVtc2VsdmVzIGJlZm9yZSBMaW51eCBpbiB0aGUgaXBpcGUuIFRoaXMgcHJvdmlkZXMg YQorbWVjaGFuaXNtIGZvciB0aGUgaW1wbGVtZW50YXRpb24gb2Ygc3lzdGVtcyB0aGF0IGNh biBwcm92aWRlIGd1YXJhbnRlZWQKK3JlYWx0aW1lIHJlc3BvbnNlLgorCitQaGlsaXBwZSBH ZXJ1bSA8cnBtQHhlbm9tYWkub3JnPgorS2FyaW0gWWFnaG1vdXIgPGthcmltQG9wZXJzeXMu Y29tPgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitMaW5rcyB0byBwYXBlcnM6CisxLQoraHR0cDov L2NpdGVzZWVyLm5qLm5lYy5jb20vcHJvYmVydDkxc3BhY2UuaHRtbAorZnRwOi8vZnRwLmNz LnVjc2IuZWR1L3B1Yi9wYXBlcnMvc3BhY2UvaXdvb29zOTEucHMuZ3ogKG5vdCB3b3JraW5n KQoraHR0cDovL3d3dzQuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGUvfnRzdGhpZWwvUGFw ZXJzL1NwYWNlLWl3b29vczkxLnBzLmd6CisKKzItCitodHRwOi8vd3d3LmNzLnVjc2IuZWR1 L3Jlc2VhcmNoL3RyY3MvYWJzdHJhY3RzLzE5OTUtMDYuc2h0bWwKK2h0dHA6Ly93d3c0Lmlu Zm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlL350c3RoaWVsL1BhcGVycy9TcGFjZS10cmNzOTUt MDYucHMuZ3oKKworMy0KK2h0dHA6Ly9jaXRlc2Vlci5uai5uZWMuY29tL2tlbm5ldGg5NGNh Y2hpbmcuaHRtbAoraHR0cDovL2d1aXIuY3MuYmVya2VsZXkuZWR1L3Byb2plY3RzL29zcHJl bGltcy9wYXBlcnMvY2FjaG1vZGVsLU9Ta2VybmVsLnBzLmd6CisKKzQtCitodHRwOi8vY2l0 ZXNlZXIubmoubmVjLmNvbS9lbmdsZXI5NWV4b2tlcm5lbC5odG1sCitmdHA6Ly9mdHAuY2Fn Lmxjcy5taXQuZWR1L211bHRpc2NhbGUvZXhva2VybmVsLnBzLloKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KZGlmZiAtTnJ1IGxpbnV4LTIuNi4xMC9pbmNsdWRlL2FzbS1wcGM2NC9hZGVvcy5oIGxp bnV4LTIuNi4xMC1hZGVvcy1wcGM2NC1kZXZlbC9pbmNsdWRlL2FzbS1wcGM2NC9hZGVvcy5o Ci0tLSBsaW51eC0yLjYuMTAvaW5jbHVkZS9hc20tcHBjNjQvYWRlb3MuaAkxOTcwLTAxLTAx IDAyOjAwOjAwLjAwMDAwMDAwMCArMDIwMAorKysgbGludXgtMi42LjEwLWFkZW9zLXBwYzY0 LWRldmVsL2luY2x1ZGUvYXNtLXBwYzY0L2FkZW9zLmgJMjAwNS0wNi0wMSAxNzowNTozMS4w MDAwMDAwMDAgKzAzMDAKQEAgLTAsMCArMSw0MzcgQEAKKy8qCisgKiAgIGluY2x1ZGUvYXNt LXBwYzY0L2FkZW9zLmgKKyAqCisgKiAgIEFkZW9zIDY0LWJpdCBQb3dlclBDIGFkb3B0aW9u CisgKiAgIENvcHlyaWdodCAoQykgMjAwNSBUYW5lbGkgVsOkaMOka2FuZ2FzIGFuZCBIZWlr a2kgTGluZGhvbG0KKyAqICAgYmFzZWQgb24gcHJldmlvdXMgd29yazoKKyAqICAgICAKKyAq ICAgQ29weXJpZ2h0IChDKSAyMDA0IFBoaWxpcHBlIEdlcnVtLgorICoKKyAqICAgQWRlb3Mv UFBDIHBvcnQgb3ZlciAyLjYgYmFzZWQgb24gdGhlIHByZXZpb3VzIDIuNCBpbXBsZW1lbnRh dGlvbiBieToKKyAqCisgKiAgIENvcHlyaWdodCAoQykgMjAwNCBXb2xmZ2FuZyBHcmFuZGVn Z2VyLgorICoKKyAqICAgSXQgZm9sbG93cyBjbG9zZWx5IHRoZSBBUk0gYW5kIHg4NiBwb3J0 cyBvZiBBREVPUy4KKyAqCisgKiAgIENvcHlyaWdodCAoQykgMjAwMiBQaGlsaXBwZSBHZXJ1 bS4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl ZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAg IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2Ft YnJpZGdlIE1BIDAyMTM5LAorICogICBVU0E7IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExp Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisgKiAgIHZlcnNpb24uCisg KgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp dCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZ IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAg WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UKKyAqICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3Jp dGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVt cGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAq LworCisjaWZuZGVmIF9fUFBDNjRfQURFT1NfSAorI2RlZmluZSBfX1BQQzY0X0FERU9TX0gK KworI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5j bHVkZSA8YXNtL2JpdG9wcy5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRl IDxsaW51eC9jcHVtYXNrLmg+CisjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgorCisjZGVm aW5lIEFERU9TX0FSQ0hfU1RSSU5HICAgICAicjYvcHBjNjQiCisjZGVmaW5lIEFERU9TX01B Sk9SX05VTUJFUiAgICA2CisjZGVmaW5lIEFERU9TX01JTk9SX05VTUJFUiAgICAyNTUKKwor I2RlZmluZSBBREVPU19JUlFfQUNLRUQJCTB4MTAwMAorI2RlZmluZSBBREVPU19JUlFfQUNL RURfTUFTSwkoQURFT1NfSVJRX0FDS0VEIC0gMSkKKworI2lmZGVmIENPTkZJR19TTVAKKwor I2Vycm9yICJBZGVvcy9wcGM2NDogU01QIG5vdCB5ZXQgaW1wbGVtZW50ZWQiCisKKyNkZWZp bmUgQURFT1NfTlJfQ1BVUyAgICAgICAgICBOUl9DUFVTCisjZGVmaW5lIEFERU9TX0NSSVRJ Q0FMX0lQSSAgICAgMAorCisjZGVmaW5lIGFkZW9zX3Byb2Nlc3Nvcl9pZCgpICAgKF9fYWRl b3NfY3VycmVudF90aHJlYWRpbmZvKCktPmNwdSkKKworI2RlZmluZSBhZGVvc19kZWNsYXJl X2NwdWlkICAgIGludCBjcHVpZAorI2RlZmluZSBhZGVvc19sb2FkX2NwdWlkKCkgICAgIGRv IHsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjcHVpZCkgPSBhZGVv c19wcm9jZXNzb3JfaWQoKTsJXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0g d2hpbGUoMCkKKyNkZWZpbmUgYWRlb3NfbG9ja19jcHUoZmxhZ3MpICBkbyB7IFwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGVvc19od19sb2NhbF9pcnFfc2F2ZShm bGFncyk7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY3B1aWQpID0g YWRlb3NfcHJvY2Vzc29yX2lkKCk7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB9IHdoaWxlKDApCisjZGVmaW5lIGFkZW9zX3VubG9ja19jcHUoZmxhZ3MpIGFkZW9zX2h3 X2xvY2FsX2lycV9yZXN0b3JlKGZsYWdzKQorI2RlZmluZSBhZGVvc19nZXRfY3B1KGZsYWdz KSAgICBhZGVvc19sb2NrX2NwdShmbGFncykKKyNkZWZpbmUgYWRlb3NfcHV0X2NwdShmbGFn cykgICAgYWRlb3NfdW5sb2NrX2NwdShmbGFncykKKyNkZWZpbmUgYWRwX2N1cnJlbnQgICAg ICAgICAgICAgKGFkcF9jcHVfY3VycmVudFthZGVvc19wcm9jZXNzb3JfaWQoKV0pCisKKyNl bHNlICAvKiAhQ09ORklHX1NNUCAqLworCisjZGVmaW5lIEFERU9TX05SX0NQVVMgICAgICAg ICAgMQorI2RlZmluZSBhZGVvc19wcm9jZXNzb3JfaWQoKSAgIDAKKy8qIEFycmF5IHJlZmVy ZW5jZXMgdXNpbmcgdGhpcyBpbmRleCBzaG91bGQgYmUgb3B0aW1pemVkIG91dC4gKi8KKyNk ZWZpbmUgYWRlb3NfZGVjbGFyZV9jcHVpZCAgICBjb25zdCBpbnQgY3B1aWQgPSAwCisjZGVm aW5lIGFkZW9zX2xvYWRfY3B1aWQoKSAgICAgIC8qIG5vcCAqLworI2RlZmluZSBhZGVvc19s b2NrX2NwdShmbGFncykgICBhZGVvc19od19sb2NhbF9pcnFfc2F2ZShmbGFncykKKyNkZWZp bmUgYWRlb3NfdW5sb2NrX2NwdShmbGFncykgYWRlb3NfaHdfbG9jYWxfaXJxX3Jlc3RvcmUo ZmxhZ3MpCisjZGVmaW5lIGFkZW9zX2dldF9jcHUoZmxhZ3MpICAgIGRvIHsgZmxhZ3MgPSBm bGFnczsgfSB3aGlsZSgwKQorI2RlZmluZSBhZGVvc19wdXRfY3B1KGZsYWdzKSAgICAvKiBu b3AgKi8KKyNkZWZpbmUgYWRwX2N1cnJlbnQgICAgICAgICAgICAgKGFkcF9jcHVfY3VycmVu dFswXSkKKworI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KKworIC8qIFBQQyB0cmFwcyAqLwor I2RlZmluZSBBREVPU19BQ0NFU1NfVFJBUCAgICAgMAkvKiBEYXRhIG9yIGluc3RydWN0aW9u IGFjY2VzcyBleGNlcHRpb24gKi8KKyNkZWZpbmUgQURFT1NfQUxJR05NRU5UX1RSQVAgIDEJ LyogQWxpZ25tZW50IGV4Y2VwdGlvbiAqLworI2RlZmluZSBBREVPU19BTFRVTkFWQUlMX1RS QVAgMgkvKiBBbHRpdmVjIHVuYXZhaWxhYmxlICovCisjZGVmaW5lIEFERU9TX1BDRV9UUkFQ ICAgICAgICAzCS8qIFByb2dyYW0gY2hlY2sgZXhjZXB0aW9uICovCisjZGVmaW5lIEFERU9T X01DRV9UUkFQICAgICAgICA0CS8qIE1hY2hpbmUgY2hlY2sgZXhjZXB0aW9uICovCisjZGVm aW5lIEFERU9TX1VOS05PV05fVFJBUCAgICA1CS8qIFVua25vd24gZXhjZXB0aW9uICovCisj ZGVmaW5lIEFERU9TX0lBQlJfVFJBUCAgICAgICA2CS8qIEluc3RydWN0aW9uIGJyZWFrcG9p bnQgKi8KKyNkZWZpbmUgQURFT1NfU1NURVBfVFJBUCAgICAgIDcJLyogU2luZ2xlLXN0ZXAg ZXhjZXB0aW9uICAqLworI2RlZmluZSBBREVPU19OUkVDX1RSQVAgICAgICAgOAkvKiBOb24t cmVjb3ZlcmFibGUgZXhjZXB0aW9uICAqLworI2RlZmluZSBBREVPU19BTFRBU1NJU1RfVFJB UCAgOSAvKiBBbHRpdmVjIGFzc2lzdCBleGNlcHRpb24gKi8KKyNkZWZpbmUgQURFT1NfU1lT UkVTRVRfVFJBUCAgIDEwIC8qIFN5c3RlbSByZXNldCBleGNlcHRpb24gKi8KKyNkZWZpbmUg QURFT1NfS0ZQVU5BVkFJTF9UUkFQIDExIC8qIEtlcm5lbCBGUCBVbmF2YWlsYWJsZSBleGNl cHRpb24gKi8KKyNkZWZpbmUgQURFT1NfUEVSRk1PTl9UUkFQICAgIDEyIC8qIFBlcmZvcm1h bmNlIE1vbml0b3IgZXhjZXB0aW9uICovCisjZGVmaW5lIEFERU9TX05SX0ZBVUxUUyAgICAg ICAxMworLyogUHNldWRvLXZlY3RvcnMgdXNlZCBmb3Iga2VybmVsIGV2ZW50cyAqLworI2Rl ZmluZSBBREVPU19GSVJTVF9LRVZFTlQgICAgICBBREVPU19OUl9GQVVMVFMKKyNkZWZpbmUg QURFT1NfU1lTQ0FMTF9QUk9MT0dVRSAgKEFERU9TX0ZJUlNUX0tFVkVOVCkKKyNkZWZpbmUg QURFT1NfU1lTQ0FMTF9FUElMT0dVRSAgKEFERU9TX0ZJUlNUX0tFVkVOVCArIDEpCisjZGVm aW5lIEFERU9TX1NDSEVEVUxFX0hFQUQgICAgIChBREVPU19GSVJTVF9LRVZFTlQgKyAyKQor I2RlZmluZSBBREVPU19TQ0hFRFVMRV9UQUlMICAgICAoQURFT1NfRklSU1RfS0VWRU5UICsg MykKKyNkZWZpbmUgQURFT1NfRU5URVJfUFJPQ0VTUyAgICAgKEFERU9TX0ZJUlNUX0tFVkVO VCArIDQpCisjZGVmaW5lIEFERU9TX0VYSVRfUFJPQ0VTUyAgICAgIChBREVPU19GSVJTVF9L RVZFTlQgKyA1KQorI2RlZmluZSBBREVPU19TSUdOQUxfUFJPQ0VTUyAgICAoQURFT1NfRklS U1RfS0VWRU5UICsgNikKKyNkZWZpbmUgQURFT1NfS0lDS19QUk9DRVNTICAgICAgKEFERU9T X0ZJUlNUX0tFVkVOVCArIDcpCisjZGVmaW5lIEFERU9TX1JFTklDRV9QUk9DRVNTICAgIChB REVPU19GSVJTVF9LRVZFTlQgKyA4KQorI2RlZmluZSBBREVPU19VU0VSX0VWRU5UICAgICAg ICAoQURFT1NfRklSU1RfS0VWRU5UICsgOSkKKyNkZWZpbmUgQURFT1NfTEFTVF9LRVZFTlQg ICAgICAgKEFERU9TX1VTRVJfRVZFTlQpCisKKyNkZWZpbmUgQURFT1NfTlJfRVZFTlRTICAg ICAgICAgKEFERU9TX0xBU1RfS0VWRU5UICsgMSkKKwordHlwZWRlZiBzdHJ1Y3QgYWRldmlu Zm8geworCisgICAgdW5zaWduZWQgZG9taWQ7CisgICAgdW5zaWduZWQgZXZlbnQ7CisgICAg dm9pZCAqZXZkYXRhOworCisgICAgdm9sYXRpbGUgaW50IHByb3BhZ2F0ZTsJLyogUHJpdmF0 ZSAqLworCit9IGFkZXZpbmZvX3Q7CisKK3R5cGVkZWYgc3RydWN0IGFkc3lzaW5mbyB7CisK KyAgICBpbnQgbmNwdXM7CQkJLyogTnVtYmVyIG9mIENQVXMgb24gYm9hcmQgKi8KKworICAg IHU2NCBjcHVmcmVxOwkJLyogQ1BVIGZyZXF1ZW5jeSAoaW4gSHopICovCisKKyAgICAvKiBB cmNoLWRlcGVuZGVudCBibG9jayAqLworCisgICAgc3RydWN0IHsKKwl1bnNpZ25lZCB0bWly cTsJCS8qIERlY3JlbWVudGVyIHZpcnR1YWwgSVJRICovCisJdTY0IHRtZnJlcTsJCS8qIFRp bWViYXNlIGZyZXF1ZW5jeSAqLworICAgIH0gYXJjaGRlcDsKKworfSBhZHN5c2luZm9fdDsK KworI2RlZmluZSBJUElQRV9OUl9YSVJRUyAgIE5SX0lSUVMKKy8qIE51bWJlciBvZiB2aXJ0 dWFsIElSUXMgKi8KKyNkZWZpbmUgSVBJUEVfTlJfVklSUVMgICBCSVRTX1BFUl9MT05HCisv KiBGaXJzdCB2aXJ0dWFsIElSUSAjICovCisjZGVmaW5lIElQSVBFX1ZJUlFfQkFTRSAgKCgo SVBJUEVfTlJfWElSUVMgKyBCSVRTX1BFUl9MT05HIC0gMSkgLyBCSVRTX1BFUl9MT05HKSAq IEJJVFNfUEVSX0xPTkcpCisvKiBUb3RhbCBudW1iZXIgb2YgSVJRIHNsb3RzICovCisjZGVm aW5lIElQSVBFX05SX0lSUVMgICAgIChJUElQRV9WSVJRX0JBU0UgKyBJUElQRV9OUl9WSVJR UykKKy8qIE51bWJlciBvZiBpbmRpcmVjdCB3b3JkcyBuZWVkZWQgdG8gbWFwIHRoZSB3aG9s ZSBJUlEgc3BhY2UuICovCisjZGVmaW5lIElQSVBFX0lSUV9JV09SRFMgICgoSVBJUEVfTlJf SVJRUyArIEJJVFNfUEVSX0xPTkcgLSAxKSAvIEJJVFNfUEVSX0xPTkcpCisjZGVmaW5lIElQ SVBFX0lSUV9JTUFTSyAgIChCSVRTX1BFUl9MT05HIC0gMSkKKyNkZWZpbmUgSVBJUEVfSVJR X0lTSElGVCAgNgkvKiAyXjYgZm9yIDY0Yml0cyBhcmNoLiAqLworCisjZGVmaW5lIElQSVBF X0lSUU1BU0tfQU5ZICAgKH4wTCkKKyNkZWZpbmUgSVBJUEVfSVJRTUFTS19WSVJUICAoSVBJ UEVfSVJRTUFTS19BTlkgPDwgKElQSVBFX1ZJUlFfQkFTRSAvIEJJVFNfUEVSX0xPTkcpKQor CisvKiBUaGUgZmlyc3QgdmlydHVhbCBpbnRlcnJ1cHQgaXMgcmVzZXJ2ZWQgZm9yIHRoZSB0 aW1lciAoc2VlCisgICBfX2FkZW9zX2luaXRfcGxhdGZvcm0pLiAqLworI2RlZmluZSBBREVP U19USU1FUl9WSVJRICAgIElQSVBFX1ZJUlFfQkFTRQorCit0eXBlZGVmIHN0cnVjdCBhZG9t YWluIHsKKworICAgIC8qIC0tIFNlY3Rpb246IG9mZnNldC1iYXNlZCByZWZlcmVuY2VzIGFy ZSBtYWRlIG9uIHRoZXNlIGZpZWxkcworICAgICAgIGZyb20gaW5saW5lIGFzc2VtYmx5IGNv ZGUuIFBsZWFzZSBkb24ndCBtb3ZlIG9yIHJlb3JkZXIuICovCisjaWZkZWYgQ09ORklHX0FE RU9TX1RIUkVBRFMKKyAgICB1bnNpZ25lZCBsb25nIGVzcFtBREVPU19OUl9DUFVTXTsJLyog RG9tYWluIHN0YWNrIHBvaW50ZXJzICovCisjZW5kaWYgLyogQ09ORklHX0FERU9TX1RIUkVB RFMgKi8KKyAgICB2b2lkICgqZHN3aXRjaCkodm9pZCk7CS8qIERvbWFpbiBzd2l0Y2ggaG9v ayAqLworICAgIC8qIC0tIEVuZCBvZiBzZWN0aW9uLiAqLworCisgICAgc3RydWN0IGxpc3Rf aGVhZCBwX2xpbms7CS8qIExpbmsgaW4gcGlwZWxpbmUgKi8KKworICAgIHN0cnVjdCBhZGNw dWRhdGEgeworCXVuc2lnbmVkIGxvbmcgc3RhdHVzOworCXVuc2lnbmVkIGxvbmcgaXJxX3Bl bmRpbmdfaGk7CisJdW5zaWduZWQgbG9uZyBpcnFfcGVuZGluZ19sb1tJUElQRV9JUlFfSVdP UkRTXTsKKwl1bnNpZ25lZCBpcnFfaGl0c1tJUElQRV9OUl9JUlFTXTsKKyNpZmRlZiBDT05G SUdfQURFT1NfVEhSRUFEUworCWFkZXZpbmZvX3QgZXZlbnRfaW5mbzsKKyNlbmRpZiAvKiBD T05GSUdfQURFT1NfVEhSRUFEUyAqLworICAgIH0gY3B1ZGF0YVtBREVPU19OUl9DUFVTXTsK KworICAgIHN0cnVjdCB7CisJaW50ICgqYWNrbm93bGVkZ2UpKHVuc2lnbmVkIGlycSk7CisJ dm9pZCAoKmhhbmRsZXIpKHVuc2lnbmVkIGlycSk7CisJdW5zaWduZWQgbG9uZyBjb250cm9s OworICAgIH0gaXJxc1tJUElQRV9OUl9JUlFTXTsKKworICAgIHN0cnVjdCB7CisJdm9pZCAo KmhhbmRsZXIpKGFkZXZpbmZvX3QgKmV2aW5mbyk7CisgICAgfSBldmVudHNbQURFT1NfTlJf RVZFTlRTXTsKKworICAgIHN0cnVjdCBhZG9tYWluICptX2xpbms7CS8qIExpbmsgaW4gbXV0 ZXggc2xlZXAgcXVldWUgKi8KKworICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKyAgICB1 bnNpZ25lZCBkb21pZDsKKworICAgIGNvbnN0IGNoYXIgKm5hbWU7CisKKyAgICBpbnQgcHJp b3JpdHk7CisKKyAgICBpbnQgcHRkX2tleW1heDsKKyAgICBpbnQgcHRkX2tleWNvdW50Owor ICAgIHVuc2lnbmVkIGxvbmcgcHRkX2tleW1hcDsKKyAgICB2b2lkICgqcHRkX3NldGZ1biko aW50LCB2b2lkICopOworICAgIHZvaWQgKigqcHRkX2dldGZ1bikoaW50KTsKKworI2lmZGVm IENPTkZJR19BREVPU19USFJFQURTCisgICAgdW5zaWduZWQgbG9uZyBlc3RhY2tiYXNlW0FE RU9TX05SX0NQVVNdOworI2VuZGlmIC8qIENPTkZJR19BREVPU19USFJFQURTICovCisKK30g YWRvbWFpbl90OworCisvKiBUaGUgZm9sbG93aW5nIG1hY3JvcyBtdXN0IGJlIHVzZWQgaHcg aW50ZXJydXB0cyBvZmYuICovCisKKyNkZWZpbmUgX19hZGVvc19zZXRfaXJxX2JpdChhZHAs Y3B1aWQsaXJxKSBcCitkbyB7IFwKKyAgICBpZiAoIXRlc3RfYml0KElQSVBFX0xPQ0tfRkxB RywmKGFkcCktPmlycXNbaXJxXS5jb250cm9sKSkgeyBcCisgICAgICAgIF9fc2V0X2JpdChp cnEgJiBJUElQRV9JUlFfSU1BU0ssJihhZHApLT5jcHVkYXRhW2NwdWlkXS5pcnFfcGVuZGlu Z19sb1tpcnEgPj4gSVBJUEVfSVJRX0lTSElGVF0pOyBcCisgICAgICAgIF9fc2V0X2JpdChp cnEgPj4gSVBJUEVfSVJRX0lTSElGVCwmKGFkcCktPmNwdWRhdGFbY3B1aWRdLmlycV9wZW5k aW5nX2hpKTsgXAorICAgICAgIH0gXAorfSB3aGlsZSgwKQorCisjZGVmaW5lIF9fYWRlb3Nf Y2xlYXJfcGVuZChhZHAsY3B1aWQsaXJxKSBcCitkbyB7IFwKKyAgICBfX2NsZWFyX2JpdChp cnEgJiBJUElQRV9JUlFfSU1BU0ssJihhZHApLT5jcHVkYXRhW2NwdWlkXS5pcnFfcGVuZGlu Z19sb1tpcnEgPj4gSVBJUEVfSVJRX0lTSElGVF0pOyBcCisgICAgaWYgKChhZHApLT5jcHVk YXRhW2NwdWlkXS5pcnFfcGVuZGluZ19sb1tpcnEgPj4gSVBJUEVfSVJRX0lTSElGVF0gPT0g MCkgXAorICAgICAgICBfX2NsZWFyX2JpdChpcnEgPj4gSVBJUEVfSVJRX0lTSElGVCwmKGFk cCktPmNwdWRhdGFbY3B1aWRdLmlycV9wZW5kaW5nX2hpKTsgXAorfSB3aGlsZSgwKQorCisj ZGVmaW5lIF9fYWRlb3NfbG9ja19pcnEoYWRwLGNwdWlkLGlycSkgXAorZG8geyBcCisgICAg aWYgKCF0ZXN0X2FuZF9zZXRfYml0KElQSVBFX0xPQ0tfRkxBRywmKGFkcCktPmlycXNbaXJx XS5jb250cm9sKSkgXAorCV9fYWRlb3NfY2xlYXJfcGVuZChhZHAsY3B1aWQsaXJxKTsgXAor fSB3aGlsZSgwKQorCisjZGVmaW5lIF9fYWRlb3NfdW5sb2NrX2lycShhZHAsaXJxKSBcCitk byB7IFwKKyAgICBpZiAodGVzdF9hbmRfY2xlYXJfYml0KElQSVBFX0xPQ0tfRkxBRywmKGFk cCktPmlycXNbaXJxXS5jb250cm9sKSkgeyBcCisgICAgICAgIGludCBfX2NwdWlkLCBfX25y X2NwdXMgPSBudW1fb25saW5lX2NwdXMoKTsJICAgICAgXAorCWZvciAoX19jcHVpZCA9IDA7 IF9fY3B1aWQgPCBfX25yX2NwdXM7IF9fY3B1aWQrKykgICAgICBcCisgICAgICAgICBpZiAo KGFkcCktPmNwdWRhdGFbX19jcHVpZF0uaXJxX2hpdHNbaXJxXSA+IDApIHsgLyogV2UgbmVl ZCBhdG9taWMgb3BzIG5leHQuICovIFwKKyAgICAgICAgICAgc2V0X2JpdChpcnEgJiBJUElQ RV9JUlFfSU1BU0ssJihhZHApLT5jcHVkYXRhW19fY3B1aWRdLmlycV9wZW5kaW5nX2xvW2ly cSA+PiBJUElQRV9JUlFfSVNISUZUXSk7IFwKKyAgICAgICAgICAgc2V0X2JpdChpcnEgPj4g SVBJUEVfSVJRX0lTSElGVCwmKGFkcCktPmNwdWRhdGFbX19jcHVpZF0uaXJxX3BlbmRpbmdf aGkpOyBcCisgICAgICAgICB9IFwKKyAgICB9IFwKK30gd2hpbGUoMCkKKworI2RlZmluZSBf X2FkZW9zX2NsZWFyX2lycShhZHAsaXJxKSBcCitkbyB7IFwKKyAgICBpbnQgX19jcHVpZCwg X19ucl9jcHVzID0gbnVtX29ubGluZV9jcHVzKCk7IFwKKyAgICBjbGVhcl9iaXQoSVBJUEVf TE9DS19GTEFHLCYoYWRwKS0+aXJxc1tpcnFdLmNvbnRyb2wpOyBcCisgICAgZm9yIChfX2Nw dWlkID0gMDsgX19jcHVpZCA8IF9fbnJfY3B1czsgX19jcHVpZCsrKSB7CVwKKyAgICAgICAo YWRwKS0+Y3B1ZGF0YVtfX2NwdWlkXS5pcnFfaGl0c1tpcnFdID0gMDsgXAorICAgICAgIF9f YWRlb3NfY2xlYXJfcGVuZChhZHAsX19jcHVpZCxpcnEpOyBcCisgICAgfSBcCit9IHdoaWxl KDApCisKKyNkZWZpbmUgYWRlb3NfdmlydHVhbF9pcnFfcChpcnEpICgoaXJxKSA+PSBJUElQ RV9WSVJRX0JBU0UgJiYgXAorCQkJCSAgKGlycSkgPCBJUElQRV9OUl9JUlFTKQorCitzdGF0 aWMgaW5saW5lIHZvaWQgYWRlb3NfaHdfbG9jYWxfaXJxX3NhdmVfcHRyKHVuc2lnbmVkIGxv bmcgKmZsYWdzKQoreworICAgIHVuc2lnbmVkIGxvbmcgbXNyOworICAgIG1zciA9IG1mbXNy KCk7CisgICAgKmZsYWdzID0gbXNyOworICAgIF9fbXRtc3JkKG1zciAmIH5NU1JfRUUsIDEp OworICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCIiOiA6IDoibWVtb3J5Iik7Cit9CisKKyNk ZWZpbmUgYWRlb3NfaHdfbG9jYWxfaXJxX3NhdmVfZmxhZ3MoZmxhZ3MpIGFkZW9zX2h3X2xv Y2FsX2lycV9zYXZlX3B0cigmKGZsYWdzKSkKKyNkZWZpbmUgYWRlb3NfaHdfbG9jYWxfaXJx X3Jlc3RvcmUoZmxhZ3MpICAgIGRvIHsgXAorCV9fYXNtX18gX192b2xhdGlsZV9fKCIiOiA6 IDoibWVtb3J5Iik7IFwKKwlfX210bXNyZCgoZmxhZ3MpLCAxKTsgXAorfSB3aGlsZSgwKQor CitzdGF0aWMgaW5saW5lIHZvaWQgYWRlb3NfaHdfbG9jYWxfaXJxX2Rpc2FibGUodm9pZCkK K3sKKyAgICB1bnNpZ25lZCBsb25nIG1zcjsKKyAgICBtc3IgPSBtZm1zcigpOworICAgIF9f bXRtc3JkKG1zciAmIH5NU1JfRUUsIDEpOworICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCIi OiA6IDoibWVtb3J5Iik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhZGVvc19od19sb2Nh bF9pcnFfZW5hYmxlKHZvaWQpCit7CisgICAgdW5zaWduZWQgbG9uZyBtc3I7CisgICAgX19h c21fXyBfX3ZvbGF0aWxlX18oIiI6IDogOiJtZW1vcnkiKTsKKyAgICBtc3IgPSBtZm1zcigp OworICAgIF9fbXRtc3JkKG1zciB8IE1TUl9FRSwgMSk7Cit9CisKKyNkZWZpbmUgYWRlb3Nf aHdfbG9jYWxfaXJxX3NhdmUoZmxhZ3MpICh7YWRlb3NfaHdfbG9jYWxfaXJxX3NhdmVfZmxh Z3MoZmxhZ3MpO2FkZW9zX2h3X2xvY2FsX2lycV9kaXNhYmxlKCk7fSkKKyNkZWZpbmUgYWRl b3NfaHdfc2F2ZV9mbGFnc19hbmRfc3RpKGZsYWdzKSAoe2FkZW9zX2h3X2xvY2FsX2lycV9z YXZlX2ZsYWdzKGZsYWdzKTthZGVvc19od19sb2NhbF9pcnFfZW5hYmxlKCk7fSkKKworI2Rl ZmluZSBhZGVvc19od19jbGkoKSBhZGVvc19od19sb2NhbF9pcnFfZGlzYWJsZSgpCisjZGVm aW5lIGFkZW9zX2h3X3N0aSgpIGFkZW9zX2h3X2xvY2FsX2lycV9lbmFibGUoKQorCisjZGVm aW5lIGFkZW9zX2h3X2xvY2FsX2lycV9mbGFncyhmbGFncykJKChmbGFncykgPSBtZm1zcigp KQorI2RlZmluZSBhZGVvc19od190ZXN0X2lmbGFnKHgpCQkoKHgpICYgTVNSX0VFKQorI2Rl ZmluZSBhZGVvc19od19pcnFzX2Rpc2FibGVkKCkJXAorKHsJCQkJCVwKKwl1bnNpZ25lZCBs b25nIGZsYWdzOwkJXAorCWFkZW9zX2h3X2xvY2FsX2lycV9mbGFncyhmbGFncyk7XAorCSFh ZGVvc19od190ZXN0X2lmbGFnKGZsYWdzKTsJXAorfSkKKworI2RlZmluZSBhZGVvc19od190 c2ModCkgKHQgPSBtZnRiKCkpCisKK2V4dGVybiB1bnNpZ25lZCBsb25nIHRiX3RpY2tzX3Bl cl9qaWZmeTsKKworI2RlZmluZSBhZGVvc19jcHVfZnJlcSgpIChIWiAqIHRiX3RpY2tzX3Bl cl9qaWZmeSkKKworI2RlZmluZSBhZGVvc19zcGluX2xvY2soeCkgICAgIF9yYXdfc3Bpbl9s b2NrKHgpCisjZGVmaW5lIGFkZW9zX3NwaW5fdW5sb2NrKHgpICAgX3Jhd19zcGluX3VubG9j ayh4KQorI2RlZmluZSBhZGVvc19zcGluX3RyeWxvY2soeCkgIF9yYXdfc3Bpbl90cnlsb2Nr KHgpCisjZGVmaW5lIGFkZW9zX3dyaXRlX2xvY2soeCkgICAgX3Jhd193cml0ZV9sb2NrKHgp CisjZGVmaW5lIGFkZW9zX3dyaXRlX3VubG9jayh4KSAgX3Jhd193cml0ZV91bmxvY2soeCkK KyNkZWZpbmUgYWRlb3Nfd3JpdGVfdHJ5bG9jayh4KSBfcmF3X3dyaXRlX3RyeWxvY2soeCkK KyNkZWZpbmUgYWRlb3NfcmVhZF9sb2NrKHgpICAgICBfcmF3X3JlYWRfbG9jayh4KQorI2Rl ZmluZSBhZGVvc19yZWFkX3VubG9jayh4KSAgIF9yYXdfcmVhZF91bmxvY2soeCkKKworI2Rl ZmluZSBhZGVvc19zcGluX2xvY2tfaXJxc2F2ZSh4LGZsYWdzKSAgXAorZG8geyBcCisgICBh ZGVvc19od19sb2NhbF9pcnFfc2F2ZShmbGFncyk7IFwKKyAgIGFkZW9zX3NwaW5fbG9jayh4 KTsgXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBhZGVvc19zcGluX3VubG9ja19pcnFyZXN0 b3JlKHgsZmxhZ3MpICBcCitkbyB7IFwKKyAgIGFkZW9zX3NwaW5fdW5sb2NrKHgpOyBcCisg ICBhZGVvc19od19sb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7IFwKK30gd2hpbGUgKDApCisK KyNkZWZpbmUgYWRlb3Nfc3Bpbl9sb2NrX2Rpc2FibGUoeCkgIFwKK2RvIHsgXAorICAgYWRl b3NfaHdfY2xpKCk7IFwKKyAgIGFkZW9zX3NwaW5fbG9jayh4KTsgXAorfSB3aGlsZSAoMCkK KworI2RlZmluZSBhZGVvc19zcGluX3VubG9ja19lbmFibGUoeCkgIFwKK2RvIHsgXAorICAg YWRlb3Nfc3Bpbl91bmxvY2soeCk7IFwKKyAgIGFkZW9zX2h3X3N0aSgpOyBcCit9IHdoaWxl ICgwKQorCisjZGVmaW5lIGFkZW9zX3JlYWRfbG9ja19pcnFzYXZlKGxvY2ssIGZsYWdzKSBc CitkbyB7IFwKKyAgIGFkZW9zX2h3X2xvY2FsX2lycV9zYXZlKGZsYWdzKTsgXAorICAgYWRl b3NfcmVhZF9sb2NrKGxvY2spOyBcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIGFkZW9zX3Jl YWRfdW5sb2NrX2lycXJlc3RvcmUobG9jaywgZmxhZ3MpIFwKK2RvIHsgXAorICAgYWRlb3Nf cmVhZF91bmxvY2sobG9jayk7IFwKKyAgIGFkZW9zX2h3X2xvY2FsX2lycV9yZXN0b3JlKGZs YWdzKTsgXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBhZGVvc193cml0ZV9sb2NrX2lycXNh dmUobG9jaywgZmxhZ3MpIFwKK2RvIHsgXAorICAgYWRlb3NfaHdfbG9jYWxfaXJxX3NhdmUo ZmxhZ3MpOyBcCisgICBhZGVvc193cml0ZV9sb2NrKGxvY2spOyBcCit9IHdoaWxlICgwKQor CisjZGVmaW5lIGFkZW9zX3dyaXRlX3VubG9ja19pcnFyZXN0b3JlKGxvY2ssIGZsYWdzKSBc CitkbyB7IFwKKyAgIGFkZW9zX3dyaXRlX3VubG9jayhsb2NrKTsgXAorICAgYWRlb3NfaHdf bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOyBcCit9IHdoaWxlICgwKQorCisvKiBQcml2YXRl IGludGVyZmFjZSAtLSBJbnRlcm5hbCB1c2Ugb25seSAqLworCitzdHJ1Y3QgYWRhdHRyOwor Cit2b2lkIF9fYWRlb3NfaW5pdCh2b2lkKTsKKwordm9pZCBfX2FkZW9zX2luaXRfZG9tYWlu KGFkb21haW5fdCAqYWRwLAorCQkJIHN0cnVjdCBhZGF0dHIgKmF0dHIpOworCit2b2lkIF9f YWRlb3NfY2xlYW51cF9kb21haW4oYWRvbWFpbl90ICphZHApOworCisjZGVmaW5lIF9fYWRl b3NfY2hlY2tfcGxhdGZvcm0oKSBkbyB7IH0gd2hpbGUoMCkKKworI2RlZmluZSBfX2FkZW9z X3JlYWRfdGltZWJhc2UoKSAoeyB1bnNpZ25lZCBsb25nIHQ7IGFkZW9zX2h3X3RzYyh0KTsg dDsgfSkKKwordm9pZCBfX2FkZW9zX2luaXRfcGxhdGZvcm0odm9pZCk7CisKK3ZvaWQgX19h ZGVvc19lbmFibGVfcGlwZWxpbmUodm9pZCk7CisKK3ZvaWQgX19hZGVvc19kaXNhYmxlX3Bp cGVsaW5lKHZvaWQpOworCit2b2lkIF9fYWRlb3NfaW5pdF9zdGFnZShhZG9tYWluX3QgKmFk cCk7CisKK3ZvaWQgX19hZGVvc19zeW5jX3N0YWdlKHVuc2lnbmVkIGxvbmcgc3luY21hc2sp OworCitpbnQgX19hZGVvc19hY2tfaXJxKHVuc2lnbmVkIGlycSk7CisKK3ZvaWQgX19hZGVv c19kb19JUlEoaW50IGlycSwKKwkJICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKwordm9p ZCBfX2FkZW9zX2RvX3RpbWVyKGludCBpcnEsCisJCSAgICAgIHN0cnVjdCBwdF9yZWdzICpy ZWdzKTsKKworc3RydWN0IHRocmVhZF9pbmZvICpfX2FkZW9zX2N1cnJlbnRfdGhyZWFkaW5m byh2b2lkKTsKKworI2lmZGVmIENPTkZJR19BREVPU19USFJFQURTCisKK2ludCBfX2FkZW9z X3N3aXRjaF9kb21haW4oYWRvbWFpbl90ICphZHAsCisJCQkgIGFkb21haW5fdCAqKmN1cnJl bnRwKTsKKworLyogQ2FsbGVkIHdpdGggaHcgaW50ZXJydXB0cyBvZmYuICovCitzdGF0aWMg aW5saW5lIHZvaWQgX19hZGVvc19zd2l0Y2hfdG8gKGFkb21haW5fdCAqb3V0LAorCQkJCSAg ICAgIGFkb21haW5fdCAqaW4sCisJCQkJICAgICAgaW50IGNwdWlkKQoreworICAgIGV4dGVy biBhZG9tYWluX3QgKmFkcF9jcHVfY3VycmVudFtdOworICAgIAorICAgIF9fYWRlb3Nfc3dp dGNoX2RvbWFpbihpbiwmYWRwX2NwdV9jdXJyZW50W2NwdWlkXSk7CisKKyAgICBpZiAob3V0 LT5kc3dpdGNoICE9IE5VTEwpCisJb3V0LT5kc3dpdGNoKCk7Cit9CisKKyNlbmRpZiAvKiBD T05GSUdfQURFT1NfVEhSRUFEUyAqLworCitleHRlcm4gc3RydWN0IHB0X3JlZ3MgX19hZGVv c19pcnFfcmVnczsKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19hZGVvc192aXJ0dWFsX2ly cV9tYXA7CisKK2V4dGVybiB1bnNpZ25lZCBsb25nIF9fYWRlb3NfZGVjcl90aWNrczsKKwor ZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19hZGVvc19kZWNyX25leHRbXTsKKworI2VuZGlmIC8q ICFfX1BQQzY0X0FERU9TX0ggKi8KZGlmZiAtTnJ1IGxpbnV4LTIuNi4xMC9pbmNsdWRlL2Fz bS1wcGM2NC9od19pcnEuaCBsaW51eC0yLjYuMTAtYWRlb3MtcHBjNjQtZGV2ZWwvaW5jbHVk ZS9hc20tcHBjNjQvaHdfaXJxLmgKLS0tIGxpbnV4LTIuNi4xMC9pbmNsdWRlL2FzbS1wcGM2 NC9od19pcnEuaAkyMDA0LTEyLTI0IDIzOjM1OjQwLjAwMDAwMDAwMCArMDIwMAorKysgbGlu dXgtMi42LjEwLWFkZW9zLXBwYzY0LWRldmVsL2luY2x1ZGUvYXNtLXBwYzY0L2h3X2lycS5o CTIwMDUtMDUtMTIgMTM6MzY6NTEuMDAwMDAwMDAwICswMzAwCkBAIC0xOSw2ICsxOSwzNyBA QAogaW50IHRpbWVyX2ludGVycnVwdChzdHJ1Y3QgcHRfcmVncyAqKTsKIGV4dGVybiB2b2lk IHBwY19pcnFfZGlzcGF0Y2hfaGFuZGxlcihzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IGly cSk7CiAKKyNpZmRlZiBDT05GSUdfQURFT1NfQ09SRQorCit2b2lkIF9fYWRlb3Nfc3RhbGxf cm9vdCh2b2lkKTsKK3ZvaWQgX19hZGVvc191bnN0YWxsX3Jvb3Qodm9pZCk7Cit1bnNpZ25l ZCBsb25nIF9fYWRlb3NfdGVzdF9yb290KHZvaWQpOwordW5zaWduZWQgbG9uZyBfX2FkZW9z X3Rlc3RfYW5kX3N0YWxsX3Jvb3Qodm9pZCk7Cit2b2lkIF9fYWRlb3NfcmVzdG9yZV9yb290 KHVuc2lnbmVkIGxvbmcgZmxhZ3MpOworCisjZGVmaW5lIGlycXNfZGlzYWJsZWQoKSAgX19h ZGVvc190ZXN0X3Jvb3QoKQorCitzdGF0aWMgaW5saW5lIHZvaWQgbG9jYWxfaXJxX2Rpc2Fi bGUodm9pZCkgeworICAgIF9fYWRlb3Nfc3RhbGxfcm9vdCgpOworfQorCitzdGF0aWMgaW5s aW5lIHZvaWQgbG9jYWxfaXJxX2VuYWJsZSh2b2lkKSB7CisgICAgX19hZGVvc191bnN0YWxs X3Jvb3QoKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGxvY2FsX2lycV9zYXZlX3B0cih1 bnNpZ25lZCBsb25nICpmbGFncykgeworICAgICpmbGFncyA9IF9fYWRlb3NfdGVzdF9hbmRf c3RhbGxfcm9vdCgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbG9jYWxfaXJxX3Jlc3Rv cmUodW5zaWduZWQgbG9uZyBmbGFncykgeworICAgIF9fYWRlb3NfcmVzdG9yZV9yb290KGZs YWdzKTsKK30KKworI2RlZmluZSBsb2NhbF9zYXZlX2ZsYWdzKGZsYWdzKQkJKChmbGFncykg PSBfX2FkZW9zX3Rlc3Rfcm9vdCgpKQorI2RlZmluZSBsb2NhbF9pcnFfc2F2ZShmbGFncykJ CWxvY2FsX2lycV9zYXZlX3B0cigmZmxhZ3MpCisKKyNlbHNlIC8qICFDT05GSUdfQURFT1Nf Q09SRSAqLworCiAjaWZkZWYgQ09ORklHX1BQQ19JU0VSSUVTCiAKIGV4dGVybiB1bnNpZ25l ZCBsb25nIGxvY2FsX2dldF9mbGFncyh2b2lkKTsKQEAgLTc1LDYgKzEwNiw4IEBACiAKICNl bmRpZiAvKiBDT05GSUdfUFBDX0lTRVJJRVMgKi8KIAorI2VuZGlmIC8qIENPTkZJR19BREVP U19DT1JFICovCisKICNkZWZpbmUgbWFza19pcnEoaXJxKQkJCQkJCVwKIAkoewkJCQkJCQlc CiAJIAlpcnFfZGVzY190ICpkZXNjID0gZ2V0X2lycV9kZXNjKGlycSk7CQlcCmRpZmYgLU5y dSBsaW51eC0yLjYuMTAvaW5jbHVkZS9hc20tcHBjNjQvc21wLmggbGludXgtMi42LjEwLWFk ZW9zLXBwYzY0LWRldmVsL2luY2x1ZGUvYXNtLXBwYzY0L3NtcC5oCi0tLSBsaW51eC0yLjYu MTAvaW5jbHVkZS9hc20tcHBjNjQvc21wLmgJMjAwNC0xMi0yNCAyMzozMzo0Ny4wMDAwMDAw MDAgKzAyMDAKKysrIGxpbnV4LTIuNi4xMC1hZGVvcy1wcGM2NC1kZXZlbC9pbmNsdWRlL2Fz bS1wcGM2NC9zbXAuaAkyMDA1LTA1LTEyIDEzOjM2OjUxLjAwMDAwMDAwMCArMDMwMApAQCAt MzcsOCArMzcsMTIgQEAKIHN0cnVjdCBwdF9yZWdzOwogZXh0ZXJuIHZvaWQgc21wX21lc3Nh Z2VfcmVjdihpbnQsIHN0cnVjdCBwdF9yZWdzICopOwogCi0KKyNpZmRlZiBDT05GSUdfQURF T1NfQ09SRQorI2luY2x1ZGUgPGFzbS9hZGVvcy5oPgorI2RlZmluZSBzbXBfcHJvY2Vzc29y X2lkKCkgYWRlb3NfcHJvY2Vzc29yX2lkKCkKKyNlbHNlIC8qICFDT05GSUdfQURFT1NfQ09S RSAqLwogI2RlZmluZSBzbXBfcHJvY2Vzc29yX2lkKCkgKGdldF9wYWNhKCktPnBhY2FfaW5k ZXgpCisjZW5kaWYgLyogQ09ORklHX0FERU9TX0NPUkUgKi8KICNkZWZpbmUgaGFyZF9zbXBf cHJvY2Vzc29yX2lkKCkgKGdldF9wYWNhKCktPmh3X2NwdV9pZCkKIAogZXh0ZXJuIGNwdW1h c2tfdCBjcHVfc2libGluZ19tYXBbTlJfQ1BVU107CmRpZmYgLU5ydSBsaW51eC0yLjYuMTAv aW5jbHVkZS9saW51eC9hZGVvcy5oIGxpbnV4LTIuNi4xMC1hZGVvcy1wcGM2NC1kZXZlbC9p bmNsdWRlL2xpbnV4L2FkZW9zLmgKLS0tIGxpbnV4LTIuNi4xMC9pbmNsdWRlL2xpbnV4L2Fk ZW9zLmgJMTk3MC0wMS0wMSAwMjowMDowMC4wMDAwMDAwMDAgKzAyMDAKKysrIGxpbnV4LTIu Ni4xMC1hZGVvcy1wcGM2NC1kZXZlbC9pbmNsdWRlL2xpbnV4L2FkZW9zLmgJMjAwNS0wNS0x MiAxMzozNjo1MS4wMDAwMDAwMDAgKzAzMDAKQEAgLTAsMCArMSw1MTggQEAKKy8qCisgKiAg IGluY2x1ZGUvbGludXgvYWRlb3MuaAorICoKKyAqICAgQ29weXJpZ2h0IChDKSAyMDAyLDIw MDMsMjAwNCBQaGlsaXBwZSBHZXJ1bS4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVl IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAg IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug YXMgcHVibGlzaGVkIGJ5CisgKiAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu Yy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlIE1BIDAyMTM5LAorICogICBVU0E7IGVpdGhl ciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh dGVyCisgKiAgIHZlcnNpb24uCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0 ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgYnV0IFdJVEhP VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK KyAqICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFLiAgU2VlIHRoZQorICogICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y ZSBkZXRhaWxzLgorICoKKyAqICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYWxvbmcgd2l0aCB0aGlz IHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICAgRm91 bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1B IDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaWZuZGVmIF9fTElOVVhfQURFT1NfSAorI2Rl ZmluZSBfX0xJTlVYX0FERU9TX0gKKworI2luY2x1ZGUgPGFzbS9hZGVvcy5oPgorI2luY2x1 ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisKKyNkZWZpbmUgQURFT1NfVkVSU0lPTl9QUkVGSVgg ICIyLjYiCisjZGVmaW5lIEFERU9TX1ZFUlNJT05fU1RSSU5HICAoQURFT1NfVkVSU0lPTl9Q UkVGSVggQURFT1NfQVJDSF9TVFJJTkcpCisjZGVmaW5lIEFERU9TX1JFTEVBU0VfTlVNQkVS ICAoMHgwMjA2MDAwMHwoKEFERU9TX01BSk9SX05VTUJFUiYweGZmKTw8OCl8KEFERU9TX01J Tk9SX05VTUJFUiYweGZmKSkKKworI2RlZmluZSBBREVPU19ST09UX1BSSSAgICAgICAxMDAK KyNkZWZpbmUgQURFT1NfUk9PVF9JRCAgICAgICAgMAorI2RlZmluZSBBREVPU19ST09UX05Q VERLRVlTICA0CS8qIE11c3QgYmUgPD0gMzIgKi8KKworI2RlZmluZSBBREVPU19SRVNFVF9U SU1FUiAgMHgxCisjZGVmaW5lIEFERU9TX1NBTUVfSEFORExFUiAoKHZvaWQgKCopKHVuc2ln bmVkKSkoLTEpKQorCisvKiBHbG9iYWwgZG9tYWluIGZsYWdzICovCisjZGVmaW5lIEFERU9T X1NQUklOVEtfRkxBRyAwCS8qIFN5bmNocm9ub3VzIHByaW50aygpIGFsbG93ZWQgKi8KKyNk ZWZpbmUgQURFT1NfUFBSSU5US19GTEFHIDEJLyogQXN5bmNocm9ub3VzIHByaW50aygpIHJl cXVlc3QgcGVuZGluZyAqLworCisvKiBQZXItY3B1IHBpcGVsaW5lIGZsYWdzLgorICAgV0FS TklORzogc29tZSBpbXBsZW1lbnRhdGlvbiBtaWdodCByZWZlciB0byB0aG9zZSBmbGFncwor ICAgbm9uLXN5bWJvbGljYWxseSBpbiBhc3NlbWJseSBwb3J0aW9ucyAoZS5nLiB4ODYpLiAq LworI2RlZmluZSBJUElQRV9TVEFMTF9GTEFHICAgMAkvKiBTdGFsbHMgYSBwaXBlbGluZSBz dGFnZSAqLworI2RlZmluZSBJUElQRV9YUEVORF9GTEFHICAgMQkvKiBFeGNlcHRpb24gbm90 aWZpY2F0aW9uIGlzIHBlbmRpbmcgKi8KKyNkZWZpbmUgSVBJUEVfU0xFRVBfRkxBRyAgIDIJ LyogRG9tYWluIGhhcyBzZWxmLXN1c3BlbmRlZCAqLworI2RlZmluZSBJUElQRV9TWU5DX0ZM QUcgICAgMwkvKiBUaGUgaW50ZXJydXB0IHN5bmNlciBpcyBydW5uaW5nIGZvciB0aGUgZG9t YWluICovCisKKyNkZWZpbmUgSVBJUEVfSEFORExFX0ZMQUcgICAgMAorI2RlZmluZSBJUElQ RV9QQVNTX0ZMQUcgICAgICAxCisjZGVmaW5lIElQSVBFX0VOQUJMRV9GTEFHICAgIDIKKyNk ZWZpbmUgSVBJUEVfRFlOQU1JQ19GTEFHICAgSVBJUEVfSEFORExFX0ZMQUcKKyNkZWZpbmUg SVBJUEVfRVhDTFVTSVZFX0ZMQUcgMworI2RlZmluZSBJUElQRV9TVElDS1lfRkxBRyAgICA0 CisjZGVmaW5lIElQSVBFX1NZU1RFTV9GTEFHICAgIDUKKyNkZWZpbmUgSVBJUEVfTE9DS19G TEFHICAgICAgNgorI2RlZmluZSBJUElQRV9TSEFSRURfRkxBRyAgICA3CisjZGVmaW5lIElQ SVBFX0NBTExBU01fRkxBRyAgIDgJLyogQXJjaC1kZXBlbmRlbnQgLS0gbWlnaHQgYmUgdW51 c2VkLiAqLworCisjZGVmaW5lIElQSVBFX0hBTkRMRV9NQVNLICAgICgxIDw8IElQSVBFX0hB TkRMRV9GTEFHKQorI2RlZmluZSBJUElQRV9QQVNTX01BU0sgICAgICAoMSA8PCBJUElQRV9Q QVNTX0ZMQUcpCisjZGVmaW5lIElQSVBFX0VOQUJMRV9NQVNLICAgICgxIDw8IElQSVBFX0VO QUJMRV9GTEFHKQorI2RlZmluZSBJUElQRV9EWU5BTUlDX01BU0sgICBJUElQRV9IQU5ETEVf TUFTSworI2RlZmluZSBJUElQRV9FWENMVVNJVkVfTUFTSyAoMSA8PCBJUElQRV9FWENMVVNJ VkVfRkxBRykKKyNkZWZpbmUgSVBJUEVfU1RJQ0tZX01BU0sgICAgKDEgPDwgSVBJUEVfU1RJ Q0tZX0ZMQUcpCisjZGVmaW5lIElQSVBFX1NZU1RFTV9NQVNLICAgICgxIDw8IElQSVBFX1NZ U1RFTV9GTEFHKQorI2RlZmluZSBJUElQRV9MT0NLX01BU0sgICAgICAoMSA8PCBJUElQRV9M T0NLX0ZMQUcpCisjZGVmaW5lIElQSVBFX1NIQVJFRF9NQVNLICAgICgxIDw8IElQSVBFX1NI QVJFRF9GTEFHKQorI2RlZmluZSBJUElQRV9TWU5DX01BU0sgICAgICAoMSA8PCBJUElQRV9T WU5DX0ZMQUcpCisjZGVmaW5lIElQSVBFX0NBTExBU01fTUFTSyAgICgxIDw8IElQSVBFX0NB TExBU01fRkxBRykKKworI2RlZmluZSBJUElQRV9ERUZBVUxUX01BU0sgIChJUElQRV9IQU5E TEVfTUFTS3xJUElQRV9QQVNTX01BU0spCisKK3R5cGVkZWYgc3RydWN0IGFkYXR0ciB7CisK KyAgICB1bnNpZ25lZCBkb21pZDsJCS8qIERvbWFpbiBpZGVudGlmaWVyIC0tIE1hZ2ljIHZh bHVlIHNldCBieSBjYWxsZXIgKi8KKyAgICBjb25zdCBjaGFyICpuYW1lOwkJLyogRG9tYWlu IG5hbWUgLS0gV2FybmluZzogd29uJ3QgYmUgZHVwJ2VkISAqLworICAgIGludCBwcmlvcml0 eTsJCS8qIFByaW9yaXR5IGluIGludGVycnVwdCBwaXBlbGluZSAqLworICAgIHZvaWQgKCpl bnRyeSkoaW50KTsJCS8qIERvbWFpbiBlbnRyeSBwb2ludCAqLworICAgIGludCBlc3RhY2tz ejsJCS8qIFN0YWNrIHNpemUgZm9yIGVudHJ5IGNvbnRleHQgLS0gMCBtZWFucyB1bnNwZWMg Ki8KKyAgICB2b2lkICgqZHN3aXRjaCkodm9pZCk7CS8qIEhhbmRsZXIgY2FsbGVkIGVhY2gg dGltZSB0aGUgZG9tYWluIGlzIHN3aXRjaGVkIGluICovCisgICAgaW50IG5wdGRrZXlzOwkJ LyogTWF4LiBudW1iZXIgb2YgcGVyLXRocmVhZCBkYXRhIGtleXMgKi8KKyAgICB2b2lkICgq cHRkc2V0KShpbnQsdm9pZCAqKTsJLyogUm91dGluZSB0byBzZXQgcHQgdmFsdWVzICovCisg ICAgdm9pZCAqKCpwdGRnZXQpKGludCk7CS8qIFJvdXRpbmUgdG8gZ2V0IHB0IHZhbHVlcyAq LworCit9IGFkYXR0cl90OworCit0eXBlZGVmIHN0cnVjdCBhZG11dGV4IHsKKworICAgIHNw aW5sb2NrX3QgbG9jazsKKworI2lmZGVmIENPTkZJR19BREVPU19USFJFQURTCisgICAgYWRv bWFpbl90ICpzbGVlcHEsIC8qIFBlbmRpbmcgZG9tYWluIHF1ZXVlICovCisJICAgICAgKm93 bmVyOwkvKiBEb21haW4gb3duaW5nIHRoZSBtdXRleCAqLworI2lmZGVmIENPTkZJR19TTVAK KyAgICB2b2xhdGlsZSBpbnQgb3duY3B1OworI2RlZmluZSBBREVPU19NVVRFWF9VTkxPQ0tF RCB7IFNQSU5fTE9DS19VTkxPQ0tFRCwgTlVMTCwgTlVMTCwgLTEgfQorI2Vsc2UgIC8qICFD T05GSUdfU01QICovCisjZGVmaW5lIEFERU9TX01VVEVYX1VOTE9DS0VEIHsgU1BJTl9MT0NL X1VOTE9DS0VELCBOVUxMLCBOVUxMIH0KKyNlbmRpZiAvKiBDT05GSUdfU01QICovCisjZWxz ZSAvKiAhQ09ORklHX0FERU9TX1RIUkVBRFMgKi8KKyNkZWZpbmUgQURFT1NfTVVURVhfVU5M T0NLRUQgeyBTUElOX0xPQ0tfVU5MT0NLRUQgfQorI2VuZGlmIC8qIENPTkZJR19BREVPU19U SFJFQURTICovCisKK30gYWRtdXRleF90OworCitleHRlcm4gaW50IGFkcF9waXBlbGluZWQ7 CisKK2V4dGVybiBhZG9tYWluX3QgKmFkcF9jcHVfY3VycmVudFtdLAorICAgICAgICAgICAg ICAgICAqYWRwX3Jvb3Q7CisKK2V4dGVybiBpbnQgX19hZGVvc19ldmVudF9tb25pdG9yc1td OworCitleHRlcm4gdW5zaWduZWQgX19hZGVvc19wcmludGtfdmlycTsKKworZXh0ZXJuIHVu c2lnbmVkIGxvbmcgX19hZGVvc192aXJ0dWFsX2lycV9tYXA7CisKK2V4dGVybiBzdHJ1Y3Qg bGlzdF9oZWFkIF9fYWRlb3NfcGlwZWxpbmU7CisKK2V4dGVybiBzcGlubG9ja190IF9fYWRl b3NfcGlwZWxvY2s7CisKKyNpZmRlZiBDT05GSUdfQURFT1NfUFJPRklMSU5HCisKK3R5cGVk ZWYgc3RydWN0IGFkcHJvZmRhdGEgeworCisgICAgc3RydWN0IHsKKwl1bnNpZ25lZCBsb25n IGxvbmcgdF9oYW5kbGVkOworCXVuc2lnbmVkIGxvbmcgbG9uZyB0X3N5bmNlZDsKKwl1bnNp Z25lZCBsb25nIG5faGFuZGxlZDsKKwl1bnNpZ25lZCBsb25nIG5fc3luY2VkOworICAgIH0g aXJxc1tJUElQRV9OUl9JUlFTXTsKKworfSBhZHByb2ZkYXRhX3Q7CisKK2V4dGVybiBhZHBy b2ZkYXRhX3QgX19hZGVvc19wcm9maWxlX2RhdGFbQURFT1NfTlJfQ1BVU107CisKKyNlbmRp ZiAvKiBDT05GSUdfQURFT1NfUFJPRklMSU5HICovCisKKy8qIFByaXZhdGUgaW50ZXJmYWNl ICovCisKKyNpZmRlZiBDT05GSUdfUFJPQ19GUwordm9pZCBfX2FkZW9zX2luaXRfcHJvYyh2 b2lkKTsKKyNlbmRpZiAvKiBDT05GSUdfUFJPQ19GUyAqLworCit2b2lkIF9fYWRlb3NfdGFr ZW92ZXIodm9pZCk7CisKK2FzbWxpbmthZ2UgaW50IF9fYWRlb3NfaGFuZGxlX2V2ZW50KHVu c2lnbmVkIGV2ZW50LAorCQkJCSAgICB2b2lkICpldmRhdGEpOworCit2b2lkIF9fYWRlb3Nf c3luY19jb25zb2xlKHVuc2lnbmVkIGlycSk7CisKK3ZvaWQgX19hZGVvc19kdW1wX3N0YXRl KHZvaWQpOworCitzdGF0aWMgaW5saW5lIHZvaWQgX19hZGVvc19zY2hlZHVsZV9oZWFkKHZv aWQgKmV2ZGF0YSkgeworCisgICAgaWYgKF9fYWRlb3NfZXZlbnRfbW9uaXRvcnNbQURFT1Nf U0NIRURVTEVfSEVBRF0gPiAwKQorCV9fYWRlb3NfaGFuZGxlX2V2ZW50KEFERU9TX1NDSEVE VUxFX0hFQUQsZXZkYXRhKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgX19hZGVvc19zY2hl ZHVsZV90YWlsKHZvaWQgKmV2ZGF0YSkgeworCisgICAgaWYgKF9fYWRlb3NfZXZlbnRfbW9u aXRvcnNbQURFT1NfU0NIRURVTEVfVEFJTF0gPiAwKQorCXJldHVybiBfX2FkZW9zX2hhbmRs ZV9ldmVudChBREVPU19TQ0hFRFVMRV9UQUlMLGV2ZGF0YSk7CisKKyAgICByZXR1cm4gMDsK K30KKworc3RhdGljIGlubGluZSB2b2lkIF9fYWRlb3NfZW50ZXJfcHJvY2Vzcyh2b2lkKSB7 CisKKyAgICBpZiAoX19hZGVvc19ldmVudF9tb25pdG9yc1tBREVPU19FTlRFUl9QUk9DRVNT XSA+IDApCisJX19hZGVvc19oYW5kbGVfZXZlbnQoQURFT1NfRU5URVJfUFJPQ0VTUyxOVUxM KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fYWRlb3NfZXhpdF9wcm9jZXNzKHZvaWQg KmV2ZGF0YSkgeworCisgICAgaWYgKF9fYWRlb3NfZXZlbnRfbW9uaXRvcnNbQURFT1NfRVhJ VF9QUk9DRVNTXSA+IDApCisJX19hZGVvc19oYW5kbGVfZXZlbnQoQURFT1NfRVhJVF9QUk9D RVNTLGV2ZGF0YSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IF9fYWRlb3Nfc2lnbmFsX3By b2Nlc3Modm9pZCAqZXZkYXRhKSB7CisKKyAgICBpZiAoX19hZGVvc19ldmVudF9tb25pdG9y c1tBREVPU19TSUdOQUxfUFJPQ0VTU10gPiAwKQorCXJldHVybiBfX2FkZW9zX2hhbmRsZV9l dmVudChBREVPU19TSUdOQUxfUFJPQ0VTUyxldmRhdGEpOworCisgICAgcmV0dXJuIDA7Cit9 CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2FkZW9zX2tpY2tfcHJvY2Vzcyh2b2lkICpldmRh dGEpIHsKKworICAgIGlmIChfX2FkZW9zX2V2ZW50X21vbml0b3JzW0FERU9TX0tJQ0tfUFJP Q0VTU10gPiAwKQorCV9fYWRlb3NfaGFuZGxlX2V2ZW50KEFERU9TX0tJQ0tfUFJPQ0VTUyxl dmRhdGEpOworfQorCitzdGF0aWMgaW5saW5lIGludCBfX2FkZW9zX3JlbmljZV9wcm9jZXNz KHZvaWQgKmV2ZGF0YSkgeworCisgICAgaWYgKF9fYWRlb3NfZXZlbnRfbW9uaXRvcnNbQURF T1NfUkVOSUNFX1BST0NFU1NdID4gMCkKKwlyZXR1cm4gX19hZGVvc19oYW5kbGVfZXZlbnQo QURFT1NfUkVOSUNFX1BST0NFU1MsZXZkYXRhKTsKKworICAgIHJldHVybiAwOworfQorCit2 b2lkIF9fYWRlb3Nfc3RhbGxfcm9vdCh2b2lkKTsKKwordm9pZCBfX2FkZW9zX3Vuc3RhbGxf cm9vdCh2b2lkKTsKKwordW5zaWduZWQgbG9uZyBfX2FkZW9zX3Rlc3Rfcm9vdCh2b2lkKTsK KwordW5zaWduZWQgbG9uZyBfX2FkZW9zX3Rlc3RfYW5kX3N0YWxsX3Jvb3Qodm9pZCk7CisK K3ZvaWQgZmFzdGNhbGwgX19hZGVvc19yZXN0b3JlX3Jvb3QodW5zaWduZWQgbG9uZyBmbGFn cyk7CisKK3ZvaWQgX19hZGVvc19zY2hlZHVsZV9iYWNrX3Jvb3Qoc3RydWN0IHRhc2tfc3Ry dWN0ICpwcmV2KTsKKwordm9pZCBfX2FkZW9zX3NldHNjaGVkdWxlcl9yb290KHN0cnVjdCB0 YXNrX3N0cnVjdCAqcCwKKwkJCSAgICAgICBpbnQgcG9saWN5LAorCQkJICAgICAgIGludCBw cmlvKTsKKwordm9pZCBfX2FkZW9zX3JlZW50ZXJfcm9vdChzdHJ1Y3QgdGFza19zdHJ1Y3Qg KnByZXYsCisJCQkgIGludCBwb2xpY3ksCisJCQkgIGludCBwcmlvKTsKKworaW50IGZhc3Rj YWxsIF9fYWRlb3Nfc2NoZWR1bGVfaXJxKHVuc2lnbmVkIGlycSwKKwkJCQkgIHN0cnVjdCBs aXN0X2hlYWQgKmhlYWQpOworCisjZGVmaW5lIF9fYWRlb3NfcGlwZWxpbmVfaGVhZF9wKGFk cCkgKCYoYWRwKS0+cF9saW5rID09IF9fYWRlb3NfcGlwZWxpbmUubmV4dCkKKworI2lmZGVm IENPTkZJR19BREVPU19USFJFQURTCisKK3N0YXRpYyBpbmxpbmUgaW50IF9fYWRlb3NfZG9t YWluX3dvcmtfcCAoYWRvbWFpbl90ICphZHAsIGludCBjcHVpZCkKKworeworICAgIHJldHVy biAoIXRlc3RfYml0KElQSVBFX1NMRUVQX0ZMQUcsJmFkcC0+Y3B1ZGF0YVtjcHVpZF0uc3Rh dHVzKSB8fAorCSAgICAoIXRlc3RfYml0KElQSVBFX1NUQUxMX0ZMQUcsJmFkcC0+Y3B1ZGF0 YVtjcHVpZF0uc3RhdHVzKSAmJgorCSAgICAgYWRwLT5jcHVkYXRhW2NwdWlkXS5pcnFfcGVu ZGluZ19oaSAhPSAwKSB8fAorCSAgICB0ZXN0X2JpdChJUElQRV9YUEVORF9GTEFHLCZhZHAt PmNwdWRhdGFbY3B1aWRdLnN0YXR1cykpOworfQorCisjZWxzZSAvKiAhQ09ORklHX0FERU9T X1RIUkVBRFMgKi8KKworc3RhdGljIGlubGluZSBpbnQgX19hZGVvc19kb21haW5fd29ya19w IChhZG9tYWluX3QgKmFkcCwgaW50IGNwdWlkKQorCit7CisgICAgcmV0dXJuICghdGVzdF9i aXQoSVBJUEVfU1RBTExfRkxBRywmYWRwLT5jcHVkYXRhW2NwdWlkXS5zdGF0dXMpICYmCisJ ICAgIGFkcC0+Y3B1ZGF0YVtjcHVpZF0uaXJxX3BlbmRpbmdfaGkgIT0gMCk7Cit9CisKK3N0 YXRpYyBpbmxpbmUgdm9pZCBfX2FkZW9zX3N3aXRjaF90byAoYWRvbWFpbl90ICpvdXQsIGFk b21haW5fdCAqaW4sIGludCBjcHVpZCkKKworeworICAgIHZvaWQgYWRlb3Nfc3VzcGVuZF9k b21haW4odm9pZCk7CisKKyAgICAvKiAiaW4iIGlzIGd1YXJhbnRlZWQgdG8gYmUgY2xvc2Vy IHRoYW4gIm91dCIgZnJvbSB0aGUgaGVhZCBvZiB0aGUKKyAgICAgICBwaXBlbGluZSAoYW5k IG9idmlvdXNseSBkaWZmZXJlbnQpLiAqLworICAgIAorICAgIGFkcF9jcHVfY3VycmVudFtj cHVpZF0gPSBpbjsKKworICAgIGlmIChpbi0+ZHN3aXRjaCkKKwlpbi0+ZHN3aXRjaCgpOwor CisgICAgYWRlb3Nfc3VzcGVuZF9kb21haW4oKTsgLyogU3luYyBzdGFnZSBhbmQgcHJvcGFn YXRlIGludGVycnVwdHMuICovCisgICAgYWRlb3NfbG9hZF9jcHVpZCgpOyAvKiBQcm9jZXNz b3IgbWlnaHQgaGF2ZSBjaGFuZ2VkLiAqLworCisgICAgaWYgKGFkcF9jcHVfY3VycmVudFtj cHVpZF0gPT0gaW4pCisJLyogT3RoZXJ3aXNlLCBzb21ldGhpbmcgaGFzIGNoYW5nZWQgdGhl IGN1cnJlbnQgZG9tYWluIHVuZGVyCisJICAgb3VyIGZlZXQgcmVjeWNsaW5nIHRoZSByZWdp c3RlciBzZXQ7IGRvIG5vdCBvdmVycmlkZS4gKi8KKwlhZHBfY3B1X2N1cnJlbnRbY3B1aWRd ID0gb3V0OworfQorCisjZW5kaWYgLyogQ09ORklHX0FERU9TX1RIUkVBRFMgKi8KKworLyog UHVibGljIGludGVyZmFjZSAqLworCitpbnQgYWRlb3NfcmVnaXN0ZXJfZG9tYWluKGFkb21h aW5fdCAqYWRwLAorCQkJICBhZGF0dHJfdCAqYXR0cik7CisKK2ludCBhZGVvc191bnJlZ2lz dGVyX2RvbWFpbihhZG9tYWluX3QgKmFkcCk7CisKK3ZvaWQgYWRlb3Nfc3VzcGVuZF9kb21h aW4odm9pZCk7CisKK2ludCBhZGVvc192aXJ0dWFsaXplX2lycV9mcm9tKGFkb21haW5fdCAq YWRwLAorCQkJICAgICAgdW5zaWduZWQgaXJxLAorCQkJICAgICAgdm9pZCAoKmhhbmRsZXIp KHVuc2lnbmVkIGlycSksCisJCQkgICAgICBpbnQgKCphY2tub3dsZWRnZSkodW5zaWduZWQg aXJxKSwKKwkJCSAgICAgIHVuc2lnbmVkIG1vZGVtYXNrKTsKKworc3RhdGljIGlubGluZSBp bnQgYWRlb3NfdmlydHVhbGl6ZV9pcnEodW5zaWduZWQgaXJxLAorCQkJCSAgICAgICB2b2lk ICgqaGFuZGxlcikodW5zaWduZWQgaXJxKSwKKwkJCQkgICAgICAgaW50ICgqYWNrbm93bGVk Z2UpKHVuc2lnbmVkIGlycSksCisJCQkJICAgICAgIHVuc2lnbmVkIG1vZGVtYXNrKSB7CisK KyAgICByZXR1cm4gYWRlb3NfdmlydHVhbGl6ZV9pcnFfZnJvbShhZHBfY3VycmVudCwKKwkJ CQkgICAgIGlycSwKKwkJCQkgICAgIGhhbmRsZXIsCisJCQkJICAgICBhY2tub3dsZWRnZSwK KwkJCQkgICAgIG1vZGVtYXNrKTsKK30KKworaW50IGFkZW9zX2NvbnRyb2xfaXJxKHVuc2ln bmVkIGlycSwKKwkJICAgICAgdW5zaWduZWQgY2xybWFzaywKKwkJICAgICAgdW5zaWduZWQg c2V0bWFzayk7CisKK2NwdW1hc2tfdCBhZGVvc19zZXRfaXJxX2FmZmluaXR5KHVuc2lnbmVk IGlycSwKKwkJCQkgY3B1bWFza190IGNwdW1hc2spOworCitzdGF0aWMgaW5saW5lIGludCBh ZGVvc19zaGFyZV9pcnEgKHVuc2lnbmVkIGlycSwgaW50ICgqYWNrbm93bGVkZ2UpKHVuc2ln bmVkIGlycSkpIHsKKworICAgIHJldHVybiBhZGVvc192aXJ0dWFsaXplX2lycShpcnEsCisJ CQkJQURFT1NfU0FNRV9IQU5ETEVSLAorCQkJCWFja25vd2xlZGdlLAorCQkJCUlQSVBFX1NI QVJFRF9NQVNLfElQSVBFX0hBTkRMRV9NQVNLfElQSVBFX1BBU1NfTUFTSyk7Cit9CisKK3Vu c2lnbmVkIGFkZW9zX2FsbG9jX2lycSh2b2lkKTsKKworaW50IGFkZW9zX2ZyZWVfaXJxKHVu c2lnbmVkIGlycSk7CisKK2ludCBmYXN0Y2FsbCBhZGVvc190cmlnZ2VyX2lycSh1bnNpZ25l ZCBpcnEpOworCitzdGF0aWMgaW5saW5lIGludCBhZGVvc19wcm9wYWdhdGVfaXJxKHVuc2ln bmVkIGlycSkgeworCisgICAgcmV0dXJuIF9fYWRlb3Nfc2NoZWR1bGVfaXJxKGlycSxhZHBf Y3VycmVudC0+cF9saW5rLm5leHQpOworfQorCitzdGF0aWMgaW5saW5lIGludCBhZGVvc19z Y2hlZHVsZV9pcnEodW5zaWduZWQgaXJxKSB7CisKKyAgICByZXR1cm4gX19hZGVvc19zY2hl ZHVsZV9pcnEoaXJxLCZhZHBfY3VycmVudC0+cF9saW5rKTsKK30KKworaW50IGZhc3RjYWxs IGFkZW9zX3NlbmRfaXBpKHVuc2lnbmVkIGlwaSwKKwkJCSAgICBjcHVtYXNrX3QgY3B1bWFz ayk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhZGVvc19zdGFsbF9waXBlbGluZV9mcm9tIChh ZG9tYWluX3QgKmFkcCkKKworeworICAgIGFkZW9zX2RlY2xhcmVfY3B1aWQ7CisjaWZkZWYg Q09ORklHX1NNUAorICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKyAgICBhZGVvc19sb2Nr X2NwdShmbGFncyk7CisKKyAgICBfX3NldF9iaXQoSVBJUEVfU1RBTExfRkxBRywmYWRwLT5j cHVkYXRhW2NwdWlkXS5zdGF0dXMpOworCisgICAgaWYgKCFfX2FkZW9zX3BpcGVsaW5lX2hl YWRfcChhZHApKQorCWFkZW9zX3VubG9ja19jcHUoZmxhZ3MpOworI2Vsc2UgLyogQ09ORklH X1NNUCAqLworICAgIHNldF9iaXQoSVBJUEVfU1RBTExfRkxBRywmYWRwLT5jcHVkYXRhW2Nw dWlkXS5zdGF0dXMpOworCisgICAgaWYgKF9fYWRlb3NfcGlwZWxpbmVfaGVhZF9wKGFkcCkp CisJYWRlb3NfaHdfY2xpKCk7CisjZW5kaWYgLyogQ09ORklHX1NNUCAqLworfQorCitzdGF0 aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgYWRlb3NfdGVzdF9waXBlbGluZV9mcm9tIChhZG9t YWluX3QgKmFkcCkKKworeworICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHM7CisgICAgYWRl b3NfZGVjbGFyZV9jcHVpZDsKKyAgICAKKyAgICBhZGVvc19nZXRfY3B1KGZsYWdzKTsKKyAg ICBzID0gdGVzdF9iaXQoSVBJUEVfU1RBTExfRkxBRywmYWRwLT5jcHVkYXRhW2NwdWlkXS5z dGF0dXMpOworICAgIGFkZW9zX3B1dF9jcHUoZmxhZ3MpOworCisgICAgcmV0dXJuIHM7Cit9 CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBhZGVvc190ZXN0X2FuZF9zdGFsbF9w aXBlbGluZV9mcm9tIChhZG9tYWluX3QgKmFkcCkKKworeworICAgIGFkZW9zX2RlY2xhcmVf Y3B1aWQ7CisgICAgdW5zaWduZWQgbG9uZyBzOworI2lmZGVmIENPTkZJR19TTVAKKyAgICB1 bnNpZ25lZCBsb25nIGZsYWdzOworCisgICAgYWRlb3NfbG9ja19jcHUoZmxhZ3MpOworCisg ICAgcyA9IF9fdGVzdF9hbmRfc2V0X2JpdChJUElQRV9TVEFMTF9GTEFHLCZhZHAtPmNwdWRh dGFbY3B1aWRdLnN0YXR1cyk7CisKKyAgICBpZiAoIV9fYWRlb3NfcGlwZWxpbmVfaGVhZF9w KGFkcCkpCisJYWRlb3NfdW5sb2NrX2NwdShmbGFncyk7CisjZWxzZSAvKiBDT05GSUdfU01Q ICovCisgICAgcyA9IHRlc3RfYW5kX3NldF9iaXQoSVBJUEVfU1RBTExfRkxBRywmYWRwLT5j cHVkYXRhW2NwdWlkXS5zdGF0dXMpOworCisgICAgaWYgKF9fYWRlb3NfcGlwZWxpbmVfaGVh ZF9wKGFkcCkpCisJYWRlb3NfaHdfY2xpKCk7CisjZW5kaWYgLyogQ09ORklHX1NNUCAqLwor ICAgIAorICAgIHJldHVybiBzOworfQorCit2b2lkIGZhc3RjYWxsIGFkZW9zX3Vuc3RhbGxf cGlwZWxpbmVfZnJvbShhZG9tYWluX3QgKmFkcCk7CisKK3N0YXRpYyBpbmxpbmUgdW5zaWdu ZWQgbG9uZyBhZGVvc190ZXN0X2FuZF91bnN0YWxsX3BpcGVsaW5lX2Zyb20oYWRvbWFpbl90 ICphZHApCisKK3sKKyAgICB1bnNpZ25lZCBsb25nIGZsYWdzLCBzOworICAgIGFkZW9zX2Rl Y2xhcmVfY3B1aWQ7CisgICAgCisgICAgYWRlb3NfZ2V0X2NwdShmbGFncyk7CisgICAgcyA9 IHRlc3RfYml0KElQSVBFX1NUQUxMX0ZMQUcsJmFkcC0+Y3B1ZGF0YVtjcHVpZF0uc3RhdHVz KTsKKyAgICBhZGVvc191bnN0YWxsX3BpcGVsaW5lX2Zyb20oYWRwKTsKKyAgICBhZGVvc19w dXRfY3B1KGZsYWdzKTsKKworICAgIHJldHVybiBzOworfQorCitzdGF0aWMgaW5saW5lIHZv aWQgYWRlb3NfdW5zdGFsbF9waXBlbGluZSh2b2lkKQorCit7CisgICAgYWRlb3NfdW5zdGFs bF9waXBlbGluZV9mcm9tKGFkcF9jdXJyZW50KTsKK30KKworc3RhdGljIGlubGluZSB1bnNp Z25lZCBsb25nIGFkZW9zX3Rlc3RfYW5kX3Vuc3RhbGxfcGlwZWxpbmUodm9pZCkKKworewor ICAgIHJldHVybiBhZGVvc190ZXN0X2FuZF91bnN0YWxsX3BpcGVsaW5lX2Zyb20oYWRwX2N1 cnJlbnQpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgYWRlb3NfdGVzdF9w aXBlbGluZSAodm9pZCkKKworeworICAgIHJldHVybiBhZGVvc190ZXN0X3BpcGVsaW5lX2Zy b20oYWRwX2N1cnJlbnQpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgYWRl b3NfdGVzdF9hbmRfc3RhbGxfcGlwZWxpbmUgKHZvaWQpCisKK3sKKyAgICByZXR1cm4gYWRl b3NfdGVzdF9hbmRfc3RhbGxfcGlwZWxpbmVfZnJvbShhZHBfY3VycmVudCk7Cit9CisKK3N0 YXRpYyBpbmxpbmUgdm9pZCBhZGVvc19yZXN0b3JlX3BpcGVsaW5lX2Zyb20gKGFkb21haW5f dCAqYWRwLCB1bnNpZ25lZCBsb25nIGZsYWdzKQorCit7CisgICAgaWYgKGZsYWdzKQorCWFk ZW9zX3N0YWxsX3BpcGVsaW5lX2Zyb20oYWRwKTsKKyAgICBlbHNlCisJYWRlb3NfdW5zdGFs bF9waXBlbGluZV9mcm9tKGFkcCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhZGVvc19z dGFsbF9waXBlbGluZSAodm9pZCkKKworeworICAgIGFkZW9zX3N0YWxsX3BpcGVsaW5lX2Zy b20oYWRwX2N1cnJlbnQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYWRlb3NfcmVzdG9y ZV9waXBlbGluZSAodW5zaWduZWQgbG9uZyBmbGFncykKKworeworICAgIGFkZW9zX3Jlc3Rv cmVfcGlwZWxpbmVfZnJvbShhZHBfY3VycmVudCxmbGFncyk7Cit9CisKK3N0YXRpYyBpbmxp bmUgdm9pZCBhZGVvc19yZXN0b3JlX3BpcGVsaW5lX25vc3luYyAoYWRvbWFpbl90ICphZHAs IHVuc2lnbmVkIGxvbmcgZmxhZ3MsIGludCBjcHVpZCkKKworeworICAgIC8qIElmIGNwdWlk IGlzIGN1cnJlbnQsIHRoZW4gaXQgbXVzdCBiZSBoZWxkIG9uIGVudHJ5CisgICAgICAgKGFk ZW9zX2dldF9jcHUvYWRlb3NfaHdfbG9jYWxfaXJxX3NhdmUvYWRlb3NfaHdfY2xpKS4gKi8K KworICAgIGlmIChmbGFncykKKwlfX3NldF9iaXQoSVBJUEVfU1RBTExfRkxBRywmYWRwLT5j cHVkYXRhW2NwdWlkXS5zdGF0dXMpOworICAgIGVsc2UKKwlfX2NsZWFyX2JpdChJUElQRV9T VEFMTF9GTEFHLCZhZHAtPmNwdWRhdGFbY3B1aWRdLnN0YXR1cyk7Cit9CisKK2ludCBhZGVv c19jYXRjaF9ldmVudF9mcm9tKGFkb21haW5fdCAqYWRwLAorCQkJICAgdW5zaWduZWQgZXZl bnQsCisJCQkgICB2b2lkICgqaGFuZGxlcikoYWRldmluZm9fdCAqKSk7CisKK3N0YXRpYyBp bmxpbmUgaW50IGFkZW9zX2NhdGNoX2V2ZW50ICh1bnNpZ25lZCBldmVudCwgdm9pZCAoKmhh bmRsZXIpKGFkZXZpbmZvX3QgKikpCisKK3sKKyAgICByZXR1cm4gYWRlb3NfY2F0Y2hfZXZl bnRfZnJvbShhZHBfY3VycmVudCxldmVudCxoYW5kbGVyKTsKK30KKworc3RhdGljIGlubGlu ZSB2b2lkIGFkZW9zX3Byb3BhZ2F0ZV9ldmVudChhZGV2aW5mb190ICpldmluZm8pCisKK3sK KyAgICBldmluZm8tPnByb3BhZ2F0ZSA9IDE7Cit9CisKK3ZvaWQgYWRlb3NfaW5pdF9hdHRy KGFkYXR0cl90ICphdHRyKTsKKworaW50IGFkZW9zX2dldF9zeXNpbmZvKGFkc3lzaW5mb190 ICpzeXNpbmZvKTsKKworaW50IGFkZW9zX3R1bmVfdGltZXIodW5zaWduZWQgbG9uZyBucywK KwkJICAgICBpbnQgZmxhZ3MpOworCitpbnQgYWRlb3NfYWxsb2NfcHRka2V5KHZvaWQpOwor CitpbnQgYWRlb3NfZnJlZV9wdGRrZXkoaW50IGtleSk7CisKK2ludCBhZGVvc19zZXRfcHRk KGludCBrZXksCisJCSAgdm9pZCAqdmFsdWUpOworCit2b2lkICphZGVvc19nZXRfcHRkKGlu dCBrZXkpOworCit1bnNpZ25lZCBsb25nIGFkZW9zX2NyaXRpY2FsX2VudGVyKHZvaWQgKCpz eW5jZm4pKHZvaWQpKTsKKwordm9pZCBhZGVvc19jcml0aWNhbF9leGl0KHVuc2lnbmVkIGxv bmcgZmxhZ3MpOworCitpbnQgYWRlb3NfaW5pdF9tdXRleChhZG11dGV4X3QgKm11dGV4KTsK KworaW50IGFkZW9zX2Rlc3Ryb3lfbXV0ZXgoYWRtdXRleF90ICptdXRleCk7CisKK3Vuc2ln bmVkIGxvbmcgZmFzdGNhbGwgYWRlb3NfbG9ja19tdXRleChhZG11dGV4X3QgKm11dGV4KTsK Kwordm9pZCBmYXN0Y2FsbCBhZGVvc191bmxvY2tfbXV0ZXgoYWRtdXRleF90ICptdXRleCwK KwkJCQkgdW5zaWduZWQgbG9uZyBmbGFncyk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhZGVv c19zZXRfcHJpbnRrX3N5bmMgKGFkb21haW5fdCAqYWRwKSB7CisgICAgc2V0X2JpdChBREVP U19TUFJJTlRLX0ZMQUcsJmFkcC0+ZmxhZ3MpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQg YWRlb3Nfc2V0X3ByaW50a19hc3luYyAoYWRvbWFpbl90ICphZHApIHsKKyAgICBjbGVhcl9i aXQoQURFT1NfU1BSSU5US19GTEFHLCZhZHAtPmZsYWdzKTsKK30KKworI2VuZGlmIC8qICFf X0xJTlVYX0FERU9TX0ggKi8KZGlmZiAtTnJ1IGxpbnV4LTIuNi4xMC9pbmNsdWRlL2xpbnV4 L2luaXRfdGFzay5oIGxpbnV4LTIuNi4xMC1hZGVvcy1wcGM2NC1kZXZlbC9pbmNsdWRlL2xp bnV4L2luaXRfdGFzay5oCi0tLSBsaW51eC0yLjYuMTAvaW5jbHVkZS9saW51eC9pbml0X3Rh c2suaAkyMDA0LTEyLTI0IDIzOjMzOjUyLjAwMDAwMDAwMCArMDIwMAorKysgbGludXgtMi42 LjEwLWFkZW9zLXBwYzY0LWRldmVsL2luY2x1ZGUvbGludXgvaW5pdF90YXNrLmgJMjAwNS0w NS0xMiAxMzozNjo1MS4wMDAwMDAwMDAgKzAzMDAKQEAgLTY1LDYgKzY1LDYwIEBACiAgKiAg SU5JVF9UQVNLIGlzIHVzZWQgdG8gc2V0IHVwIHRoZSBmaXJzdCB0YXNrIHRhYmxlLCB0b3Vj aCBhdAogICogeW91ciBvd24gcmlzayEuIEJhc2U9MCwgbGltaXQ9MHgxZmZmZmYgKD0yTUIp CiAgKi8KKyNpZmRlZiBDT05GSUdfQURFT1NfQ09SRQorCisjZGVmaW5lIElOSVRfVEFTSyh0 c2spCVwKK3sJCQkJCQkJCQlcCisJLnN0YXRlCQk9IDAsCQkJCQkJXAorCS50aHJlYWRfaW5m bwk9ICZpbml0X3RocmVhZF9pbmZvLAkJCQlcCisJLnVzYWdlCQk9IEFUT01JQ19JTklUKDIp LAkJCQlcCisJLmZsYWdzCQk9IDAsCQkJCQkJXAorCS5sb2NrX2RlcHRoCT0gLTEsCQkJCQkJ XAorCS5wcmlvCQk9IE1BWF9QUklPLTIwLAkJCQkJXAorCS5zdGF0aWNfcHJpbwk9IE1BWF9Q UklPLTIwLAkJCQkJXAorCS5wb2xpY3kJCT0gU0NIRURfTk9STUFMLAkJCQkJXAorCS5jcHVz X2FsbG93ZWQJPSBDUFVfTUFTS19BTEwsCQkJCQlcCisJLm1tCQk9IE5VTEwsCQkJCQkJXAor CS5hY3RpdmVfbW0JPSAmaW5pdF9tbSwJCQkJCVwKKwkucnVuX2xpc3QJPSBMSVNUX0hFQURf SU5JVCh0c2sucnVuX2xpc3QpLAkJCVwKKwkudGltZV9zbGljZQk9IEhaLAkJCQkJCVwKKwku dGFza3MJCT0gTElTVF9IRUFEX0lOSVQodHNrLnRhc2tzKSwJCQlcCisJLnB0cmFjZV9jaGls ZHJlbj0gTElTVF9IRUFEX0lOSVQodHNrLnB0cmFjZV9jaGlsZHJlbiksCQlcCisJLnB0cmFj ZV9saXN0CT0gTElTVF9IRUFEX0lOSVQodHNrLnB0cmFjZV9saXN0KSwJCVwKKwkucmVhbF9w YXJlbnQJPSAmdHNrLAkJCQkJCVwKKwkucGFyZW50CQk9ICZ0c2ssCQkJCQkJXAorCS5jaGls ZHJlbgk9IExJU1RfSEVBRF9JTklUKHRzay5jaGlsZHJlbiksCQkJXAorCS5zaWJsaW5nCT0g TElTVF9IRUFEX0lOSVQodHNrLnNpYmxpbmcpLAkJCVwKKwkuZ3JvdXBfbGVhZGVyCT0gJnRz aywJCQkJCQlcCisJLndhaXRfY2hsZGV4aXQJPSBfX1dBSVRfUVVFVUVfSEVBRF9JTklUSUFM SVpFUih0c2sud2FpdF9jaGxkZXhpdCksXAorCS5yZWFsX3RpbWVyCT0gewkJCQkJCVwKKwkJ LmZ1bmN0aW9uCT0gaXRfcmVhbF9mbgkJCQlcCisJfSwJCQkJCQkJCVwKKwkuZ3JvdXBfaW5m bwk9ICZpbml0X2dyb3VwcywJCQkJCVwKKwkuY2FwX2VmZmVjdGl2ZQk9IENBUF9JTklUX0VG Rl9TRVQsCQkJCVwKKwkuY2FwX2luaGVyaXRhYmxlID0gQ0FQX0lOSVRfSU5IX1NFVCwJCQkJ XAorCS5jYXBfcGVybWl0dGVkCT0gQ0FQX0ZVTExfU0VULAkJCQkJXAorCS5rZWVwX2NhcGFi aWxpdGllcyA9IDAsCQkJCQkJXAorCS51c2VyCQk9IElOSVRfVVNFUiwJCQkJCVwKKwkuY29t bQkJPSAic3dhcHBlciIsCQkJCQlcCisJLnRocmVhZAkJPSBJTklUX1RIUkVBRCwJCQkJCVwK KwkuZnMJCT0gJmluaXRfZnMsCQkJCQlcCisJLmZpbGVzCQk9ICZpbml0X2ZpbGVzLAkJCQkJ XAorCS5zaWduYWwJCT0gJmluaXRfc2lnbmFscywJCQkJXAorCS5zaWdoYW5kCT0gJmluaXRf c2lnaGFuZCwJCQkJXAorCS5wZW5kaW5nCT0gewkJCQkJCVwKKwkJLmxpc3QgPSBMSVNUX0hF QURfSU5JVCh0c2sucGVuZGluZy5saXN0KSwJCVwKKwkJLnNpZ25hbCA9IHt7MH19fSwJCQkJ CVwKKwkuYmxvY2tlZAk9IHt7MH19LAkJCQkJXAorCS5hbGxvY19sb2NrCT0gU1BJTl9MT0NL X1VOTE9DS0VELAkJCQlcCisJLnByb2NfbG9jawk9IFNQSU5fTE9DS19VTkxPQ0tFRCwJCQkJ XAorCS5zd2l0Y2hfbG9jawk9IFNQSU5fTE9DS19VTkxPQ0tFRCwJCQkJXAorCS5qb3VybmFs X2luZm8JPSBOVUxMLAkJCQkJCVwKKyAgICAgICAgLnB0ZCAgICAgICAgICAgID0geyBbIDAg Li4uIEFERU9TX1JPT1RfTlBUREtFWVMgLSAxXSA9IDAgfSAgICAgIFwKK30KKworI2Vsc2Ug LyogIUNPTkZJR19BREVPU19DT1JFICovCisKICNkZWZpbmUgSU5JVF9UQVNLKHRzaykJXAog ewkJCQkJCQkJCVwKIAkuc3RhdGUJCT0gMCwJCQkJCQlcCkBAIC0xMTQsNiArMTY4LDcgQEAK IAkuam91cm5hbF9pbmZvCT0gTlVMTCwJCQkJCQlcCiB9CiAKKyNlbmRpZiAvKiBDT05GSUdf QURFT1NfQ09SRSAqLwogCiAKICNlbmRpZgpkaWZmIC1OcnUgbGludXgtMi42LjEwL2luY2x1 ZGUvbGludXgvcHJlZW1wdC5oIGxpbnV4LTIuNi4xMC1hZGVvcy1wcGM2NC1kZXZlbC9pbmNs dWRlL2xpbnV4L3ByZWVtcHQuaAotLS0gbGludXgtMi42LjEwL2luY2x1ZGUvbGludXgvcHJl ZW1wdC5oCTIwMDQtMTItMjQgMjM6MzQ6MjYuMDAwMDAwMDAwICswMjAwCisrKyBsaW51eC0y LjYuMTAtYWRlb3MtcHBjNjQtZGV2ZWwvaW5jbHVkZS9saW51eC9wcmVlbXB0LmgJMjAwNS0w NS0xMiAxMzozNjo1MS4wMDAwMDAwMDAgKzAzMDAKQEAgLTI1LDYgKzI1LDQ3IEBACiAKIGFz bWxpbmthZ2Ugdm9pZCBwcmVlbXB0X3NjaGVkdWxlKHZvaWQpOwogCisjaWZkZWYgQ09ORklH X0FERU9TX0NPUkUKKworI2luY2x1ZGUgPGFzbS9hZGVvcy5oPgorCitleHRlcm4gYWRvbWFp bl90ICphZHBfY3B1X2N1cnJlbnRbXSwKKyAgICAgICAgICAgICAgICAgKmFkcF9yb290Owor CisjZGVmaW5lIHByZWVtcHRfZGlzYWJsZSgpIFwKK2RvIHsgXAorCWlmIChhZHBfY3VycmVu dCA9PSBhZHBfcm9vdCkgeyBcCisgICAJICAgIGluY19wcmVlbXB0X2NvdW50KCk7ICAgICAg IFwKKwkgICAgYmFycmllcigpOyBcCisgICAgICAgIH0gXAorfSB3aGlsZSAoMCkKKworI2Rl ZmluZSBwcmVlbXB0X2VuYWJsZV9ub19yZXNjaGVkKCkgXAorZG8geyBcCisgICAgICAgIGlm IChhZHBfY3VycmVudCA9PSBhZHBfcm9vdCkgeyBcCisJICAgIGJhcnJpZXIoKTsgXAorCSAg ICBkZWNfcHJlZW1wdF9jb3VudCgpOyBcCisgICAgICAgIH0gXAorfSB3aGlsZSAoMCkKKwor I2RlZmluZSBwcmVlbXB0X2NoZWNrX3Jlc2NoZWQoKSBcCitkbyB7IFwKKyAgICAgICAgaWYg KGFkcF9jdXJyZW50ID09IGFkcF9yb290KSB7IFwKKwkgICAgaWYgKHVubGlrZWx5KHRlc3Rf dGhyZWFkX2ZsYWcoVElGX05FRURfUkVTQ0hFRCkpKSBcCisJCXByZWVtcHRfc2NoZWR1bGUo KTsgXAorICAgICAgICB9IFwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgcHJlZW1wdF9lbmFi bGUoKSBcCitkbyB7IFwKKwlpZiAoYWRwX2N1cnJlbnQgPT0gYWRwX3Jvb3QpIHsgXAorCSAg ICBwcmVlbXB0X2VuYWJsZV9ub19yZXNjaGVkKCk7IFwKKwkgICAgcHJlZW1wdF9jaGVja19y ZXNjaGVkKCk7IFwKKyAgICAgICAgfSBcCit9IHdoaWxlICgwKQorCisjZWxzZSAvKiAhQ09O RklHX0FERU9TX0NPUkUgKi8KKwogI2RlZmluZSBwcmVlbXB0X2Rpc2FibGUoKSBcCiBkbyB7 IFwKIAlpbmNfcHJlZW1wdF9jb3VudCgpOyBcCkBAIC00OSw2ICs5MCw4IEBACiAJcHJlZW1w dF9jaGVja19yZXNjaGVkKCk7IFwKIH0gd2hpbGUgKDApCiAKKyNlbmRpZiAvKiBDT05GSUdf QURFT1NfQ09SRSAqLworCiAjZWxzZQogCiAjZGVmaW5lIHByZWVtcHRfZGlzYWJsZSgpCQlk byB7IH0gd2hpbGUgKDApCmRpZmYgLU5ydSBsaW51eC0yLjYuMTAvaW5jbHVkZS9saW51eC9z Y2hlZC5oIGxpbnV4LTIuNi4xMC1hZGVvcy1wcGM2NC1kZXZlbC9pbmNsdWRlL2xpbnV4L3Nj aGVkLmgKLS0tIGxpbnV4LTIuNi4xMC9pbmNsdWRlL2xpbnV4L3NjaGVkLmgJMjAwNC0xMi0y NCAyMzozMzo1OS4wMDAwMDAwMDAgKzAyMDAKKysrIGxpbnV4LTIuNi4xMC1hZGVvcy1wcGM2 NC1kZXZlbC9pbmNsdWRlL2xpbnV4L3NjaGVkLmgJMjAwNS0wNS0xMiAxMzozNjo1MS4wMDAw MDAwMDAgKzAzMDAKQEAgLTQsNiArNCw5IEBACiAjaW5jbHVkZSA8YXNtL3BhcmFtLmg+CS8q IGZvciBIWiAqLwogCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaWZkZWYgQ09ORklH X0FERU9TX0NPUkUKKyNpbmNsdWRlIDxsaW51eC9hZGVvcy5oPgorI2VuZGlmIC8qIENPTkZJ R19BREVPU19DT1JFICovCiAjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgogI2luY2x1 ZGUgPGxpbnV4L3RocmVhZHMuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTY2 NCw2ICs2NjcsMTAgQEAKICAgCXN0cnVjdCBtZW1wb2xpY3kgKm1lbXBvbGljeTsKICAgCXNo b3J0IGlsX25leHQ7CQkvKiBjb3VsZCBiZSBzaGFyZWQgd2l0aCB1c2VkX21hdGggKi8KICNl bmRpZgorCisjaWZkZWYgQ09ORklHX0FERU9TX0NPUkUKKyAgICAgICAgdm9pZCAqcHRkW0FE RU9TX1JPT1RfTlBUREtFWVNdOworI2VuZGlmIC8qIENPTkZJR19BREVPU19DT1JFICovCiB9 OwogCiBzdGF0aWMgaW5saW5lIHBpZF90IHByb2Nlc3NfZ3JvdXAoc3RydWN0IHRhc2tfc3Ry dWN0ICp0c2spCmRpZmYgLU5ydSBsaW51eC0yLjYuMTAvaW5pdC9tYWluLmMgbGludXgtMi42 LjEwLWFkZW9zLXBwYzY0LWRldmVsL2luaXQvbWFpbi5jCi0tLSBsaW51eC0yLjYuMTAvaW5p dC9tYWluLmMJMjAwNC0xMi0yNCAyMzozNDowMS4wMDAwMDAwMDAgKzAyMDAKKysrIGxpbnV4 LTIuNi4xMC1hZGVvcy1wcGM2NC1kZXZlbC9pbml0L21haW4uYwkyMDA1LTA1LTEyIDEzOjM2 OjUxLjAwMDAwMDAwMCArMDMwMApAQCAtNTI2LDYgKzUyNiwxMSBAQAogCWluaXRfdGltZXJz KCk7CiAJc29mdGlycV9pbml0KCk7CiAJdGltZV9pbml0KCk7CisjaWZkZWYgQ09ORklHX0FE RU9TX0NPUkUKKwkvKiBPbiBQUEMsIHdlIG5lZWQgY2FsaWJyYXRlZCB2YWx1ZXMgZm9yIHRo ZSBkZWNyZW1lbnRlciB0bworCSAgIGluaXRpYWxpemUsIHNvIHJ1biB0aW1lX2luaXQoKSBm aXJzdC4gKi8KKyAJX19hZGVvc19pbml0KCk7CisjZW5kaWYgLyogQ09ORklHX0FERU9TX0NP UkUgKi8KIAogCS8qCiAJICogSEFDSyBBTEVSVCEgVGhpcyBpcyBlYXJseS4gV2UncmUgZW5h YmxpbmcgdGhlIGNvbnNvbGUgYmVmb3JlCkBAIC02NTIsNiArNjU3LDExIEBACiAJc29ja19p bml0KCk7CiAKIAlkb19pbml0Y2FsbHMoKTsKKworI2lmZGVmIENPTkZJR19BREVPUworCS8q IGkuZS4gUGVybWFuZW50IHBpcGVsaW5pbmcgZnJvbSBib290IG9ud2FyZHMuICovCisgCV9f YWRlb3NfdGFrZW92ZXIoKTsKKyNlbmRpZiAvKiBDT05GSUdfQURFT1MgKi8KIH0KIAogc3Rh dGljIHZvaWQgZG9fcHJlX3NtcF9pbml0Y2FsbHModm9pZCkKZGlmZiAtTnJ1IGxpbnV4LTIu Ni4xMC9rZXJuZWwvYWRlb3MuYyBsaW51eC0yLjYuMTAtYWRlb3MtcHBjNjQtZGV2ZWwva2Vy bmVsL2FkZW9zLmMKLS0tIGxpbnV4LTIuNi4xMC9rZXJuZWwvYWRlb3MuYwkxOTcwLTAxLTAx IDAyOjAwOjAwLjAwMDAwMDAwMCArMDIwMAorKysgbGludXgtMi42LjEwLWFkZW9zLXBwYzY0 LWRldmVsL2tlcm5lbC9hZGVvcy5jCTIwMDUtMDUtMTIgMTM6MzY6NTEuMDAwMDAwMDAwICsw MzAwCkBAIC0wLDAgKzEsODAwIEBACisvKgorICogICBsaW51eC9rZXJuZWwvYWRlb3MuYwor ICoKKyAqICAgQ29weXJpZ2h0IChDKSAyMDAyLDIwMDMsMjAwNCBQaGlsaXBwZSBHZXJ1bS4K KyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz dHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgIHRo ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJp ZGdlIE1BIDAyMTM5LAorICogICBVU0E7IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisgKiAgIHZlcnNpb24uCisgKgor ICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3 aWxsIGJlIHVzZWZ1bCwKKyAqICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0 IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIG9y IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgWW91 IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UKKyAqICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUg dG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxl IFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqCisg KiAgIEFyY2hpdGVjdHVyZS1pbmRlcGVuZGVudCBBREVPUyBjb3JlIHN1cHBvcnQuCisgKi8K KworI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+ CisjaWZkZWYgQ09ORklHX1BST0NfRlMKKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+Cisj ZW5kaWYgLyogQ09ORklHX1BST0NfRlMgKi8KKworLyogVGhlIHByZS1kZWZpbmVkIGRvbWFp biBzbG90IGZvciB0aGUgcm9vdCBkb21haW4uICovCitzdGF0aWMgYWRvbWFpbl90IGFkZW9z X3Jvb3RfZG9tYWluOworCisvKiBBIGNvbnN0YW50IHBvaW50ZXIgdG8gdGhlIHJvb3QgZG9t YWluLiAqLworYWRvbWFpbl90ICphZHBfcm9vdCA9ICZhZGVvc19yb290X2RvbWFpbjsKKwor LyogQSBwb2ludGVyIHRvIHRoZSBjdXJyZW50IGRvbWFpbi4gKi8KK2Fkb21haW5fdCAqYWRw X2NwdV9jdXJyZW50W0FERU9TX05SX0NQVVNdID0geyBbIDAgLi4uIEFERU9TX05SX0NQVVMg LSAxXSA9ICZhZGVvc19yb290X2RvbWFpbiB9OworCisvKiBUaGUgc3BpbmxvY2sgcHJvdGVj dGluZyBmcm9tIHJhY2VzIHdoaWxlIG1vZGlmeWluZyB0aGUgcGlwZWxpbmUuICovCitzcGlu bG9ja190IF9fYWRlb3NfcGlwZWxvY2sgPSBTUElOX0xPQ0tfVU5MT0NLRUQ7CisKKy8qIFRo ZSBwaXBlbGluZSBkYXRhIHN0cnVjdHVyZS4gRW5xdWV1ZXMgYWRvbWFpbl90IG9iamVjdHMg YnkgcHJpb3JpdHkuICovCitzdHJ1Y3QgbGlzdF9oZWFkIF9fYWRlb3NfcGlwZWxpbmU7CisK Ky8qIEEgZ2xvYmFsIGZsYWcgdGVsbGluZyB3aGV0aGVyIEFkZW9zIHBpcGVsaW5pbmcgaXMg ZW5nYWdlZC4gKi8KK2ludCBhZHBfcGlwZWxpbmVkOworCisvKiBBbiBhcnJheSBvZiBnbG9i YWwgY291bnRlcnMgdHJhY2tpbmcgZG9tYWlucyBtb25pdG9yaW5nIGV2ZW50cy4gKi8KK2lu dCBfX2FkZW9zX2V2ZW50X21vbml0b3JzW0FERU9TX05SX0VWRU5UU10gPSB7IFsgMCAuLi4g QURFT1NfTlJfRVZFTlRTIC0gMV0gPSAwIH07CisKKy8qIFRoZSBhbGxvY2F0ZWQgVklSUSBt YXAuICovCit1bnNpZ25lZCBsb25nIF9fYWRlb3NfdmlydHVhbF9pcnFfbWFwID0gMDsKKwor LyogQSBWSVJRIHRvIGtpY2sgcHJpbnRrKCkgb3V0cHV0IG91dCB3aGVuIHRoZSByb290IGRv bWFpbiBpcyBpbiBjb250cm9sLiAqLwordW5zaWduZWQgX19hZGVvc19wcmludGtfdmlycTsK KworI2lmZGVmIENPTkZJR19BREVPU19QUk9GSUxJTkcKK2FkcHJvZmRhdGFfdCBfX2FkZW9z X3Byb2ZpbGVfZGF0YVtBREVPU19OUl9DUFVTXTsKKyNlbmRpZiAvKiBDT05GSUdfQURFT1Nf UFJPRklMSU5HICovCisKK3N0YXRpYyB2b2lkIF9fYWRlb3Nfc2V0X3Jvb3RfcHRkIChpbnQg a2V5LCB2b2lkICp2YWx1ZSkgeworCisgICAgY3VycmVudC0+cHRkW2tleV0gPSB2YWx1ZTsK K30KKworc3RhdGljIHZvaWQgKl9fYWRlb3NfZ2V0X3Jvb3RfcHRkIChpbnQga2V5KSB7CisK KyAgICByZXR1cm4gY3VycmVudC0+cHRkW2tleV07Cit9CisKKy8qIGFkZW9zX2luaXQoKSAt LSBJbml0aWFsaXphdGlvbiByb3V0aW5lIG9mIHRoZSBBREVPUyBsYXllci4gQ2FsbGVkCisg ICBieSB0aGUgaG9zdCBrZXJuZWwgZWFybHkgZHVyaW5nIHRoZSBib290IHByb2NlZHVyZS4g Ki8KKwordm9pZCBfX2FkZW9zX2luaXQgKHZvaWQpCisKK3sKKyAgICBhZG9tYWluX3QgKmFk cCA9ICZhZGVvc19yb290X2RvbWFpbjsKKworICAgIF9fYWRlb3NfY2hlY2tfcGxhdGZvcm0o KTsJLyogRG8gcGxhdGZvcm0gZGVwZW5kZW50IGNoZWNrcyBmaXJzdC4gKi8KKworICAgIC8q CisgICAgICBBIGxpZ2h0d2VpZ2h0IHJlZ2lzdHJhdGlvbiBjb2RlIGZvciB0aGUgcm9vdCBk b21haW4uIEN1cnJlbnQKKyAgICAgIGFzc3VtcHRpb25zIGFyZToKKyAgICAgIC0gV2UgYXJl IHJ1bm5pbmcgb24gdGhlIGJvb3QgQ1BVLCBhbmQgc2Vjb25kYXJ5IENQVXMgYXJlIHN0aWxs CisgICAgICBsb3N0IGluIHNwYWNlLgorICAgICAgLSBhZGVvc19yb290X2RvbWFpbiBoYXMg YmVlbiB6ZXJvJ2VkLgorICAgICovCisKKyAgICBJTklUX0xJU1RfSEVBRCgmX19hZGVvc19w aXBlbGluZSk7CisKKyAgICBhZHAtPm5hbWUgPSAiTGludXgiOworICAgIGFkcC0+ZG9taWQg PSBBREVPU19ST09UX0lEOworICAgIGFkcC0+cHJpb3JpdHkgPSBBREVPU19ST09UX1BSSTsK KyAgICBhZHAtPnB0ZF9zZXRmdW4gPSAmX19hZGVvc19zZXRfcm9vdF9wdGQ7CisgICAgYWRw LT5wdGRfZ2V0ZnVuID0gJl9fYWRlb3NfZ2V0X3Jvb3RfcHRkOworICAgIGFkcC0+cHRkX2tl eW1heCA9IEFERU9TX1JPT1RfTlBUREtFWVM7CisKKyAgICBfX2FkZW9zX2luaXRfc3RhZ2Uo YWRwKTsKKworICAgIElOSVRfTElTVF9IRUFEKCZhZHAtPnBfbGluayk7CisgICAgbGlzdF9h ZGRfdGFpbCgmYWRwLT5wX2xpbmssJl9fYWRlb3NfcGlwZWxpbmUpOworCisgICAgX19hZGVv c19pbml0X3BsYXRmb3JtKCk7CisKKyAgICBfX2FkZW9zX3ByaW50a192aXJxID0gYWRlb3Nf YWxsb2NfaXJxKCk7IC8qIENhbm5vdCBmYWlsIGhlcmUuICovCisgICAgYWRwLT5pcnFzW19f YWRlb3NfcHJpbnRrX3ZpcnFdLmhhbmRsZXIgPSAmX19hZGVvc19zeW5jX2NvbnNvbGU7IAor ICAgIGFkcC0+aXJxc1tfX2FkZW9zX3ByaW50a192aXJxXS5hY2tub3dsZWRnZSA9IE5VTEw7 IAorICAgIGFkcC0+aXJxc1tfX2FkZW9zX3ByaW50a192aXJxXS5jb250cm9sID0gSVBJUEVf SEFORExFX01BU0s7IAorCisgICAgcHJpbnRrKEtFUk5fSU5GTyAiQWRlb3MgJXM6IFJvb3Qg ZG9tYWluICVzIHJlZ2lzdGVyZWQuXG4iLAorCSAgIEFERU9TX1ZFUlNJT05fU1RSSU5HLAor CSAgIGFkcC0+bmFtZSk7Cit9CisKKy8qIGFkZW9zX2hhbmRsZV9ldmVudCgpIC0tIEFkZW9z JyBnZW5lcmljIGV2ZW50IGhhbmRsZXIuIFRoaXMgcm91dGluZQorICAgY2FsbHMgdGhlIHBl ci1kb21haW4gaGFuZGxlcnMgcmVnaXN0ZXJlZCBmb3IgYSBnaXZlbgorICAgZXhjZXB0aW9u L2V2ZW50LiBFYWNoIGRvbWFpbiBiZWZvcmUgdGhlIG9uZSB3aGljaCByYWlzZWQgdGhlIGV2 ZW50CisgICBpbiB0aGUgcGlwZWxpbmUgd2lsbCBnZXQgYSBjaGFuY2UgdG8gcHJvY2VzcyB0 aGUgZXZlbnQuIFRoZSBsYXR0ZXIKKyAgIHdpbGwgZXZlbnR1YWxseSBiZSBhbGxvd2VkIHRv IHByb2Nlc3MgaXRzIG93biBldmVudCB0b28gaWYgYSB2YWxpZAorICAgaGFuZGxlciBleGlz dHMgZm9yIGl0LiAgSGFuZGxlciBleGVjdXRpb25zIGFyZSBhbHdheXMgc2NoZWR1bGVkIGJ5 CisgICB0aGUgZG9tYWluIHdoaWNoIHJhaXNlZCB0aGUgZXZlbnQgZm9yIHRoZSBoaWdoZXIg cHJpb3JpdHkgZG9tYWlucworICAgd2FudGluZyB0byBiZSBub3RpZmllZCBvZiBzdWNoIGV2 ZW50LiAgTm90ZTogZXZkYXRhIG1pZ2h0IGJlCisgICBOVUxMLiAqLworCisjaWZkZWYgQ09O RklHX0FERU9TX1RIUkVBRFMKKworYXNtbGlua2FnZSBpbnQgX19hZGVvc19oYW5kbGVfZXZl bnQgKHVuc2lnbmVkIGV2ZW50LCB2b2lkICpldmRhdGEpCisvKiBhc21saW5rYWdlIGlzIHRo ZXJlIGp1c3QgaW4gY2FzZSBDT05GSUdfUkVHUEFSTSBpcyBlbmFibGVkLi4uICovCit7Cisg ICAgc3RydWN0IGxpc3RfaGVhZCAqcG9zLCAqbnBvczsKKyAgICBhZG9tYWluX3QgKnRoaXNf ZG9tYWluOworICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CisgICAgYWRlb3NfZGVjbGFyZV9j cHVpZDsKKyAgICBhZGV2aW5mb190IGV2aW5mbzsKKyAgICBpbnQgcHJvcGFnYXRlID0gMTsK KworICAgIGFkZW9zX2xvY2tfY3B1KGZsYWdzKTsKKworICAgIHRoaXNfZG9tYWluID0gYWRw X2NwdV9jdXJyZW50W2NwdWlkXTsKKworICAgIGxpc3RfZm9yX2VhY2hfc2FmZShwb3MsbnBv cywmX19hZGVvc19waXBlbGluZSkgeworCisgICAgCWFkb21haW5fdCAqbmV4dF9kb21haW4g PSBsaXN0X2VudHJ5KHBvcyxhZG9tYWluX3QscF9saW5rKTsKKworCWlmIChuZXh0X2RvbWFp bi0+ZXZlbnRzW2V2ZW50XS5oYW5kbGVyICE9IE5VTEwpCisJICAgIHsKKwkgICAgaWYgKG5l eHRfZG9tYWluID09IHRoaXNfZG9tYWluKQorCQl7CisJCWFkZW9zX3VubG9ja19jcHUoZmxh Z3MpOworCQlldmluZm8uZG9taWQgPSB0aGlzX2RvbWFpbi0+ZG9taWQ7CisJCWV2aW5mby5l dmVudCA9IGV2ZW50OworCQlldmluZm8uZXZkYXRhID0gZXZkYXRhOworCQlldmluZm8ucHJv cGFnYXRlID0gMDsKKwkJdGhpc19kb21haW4tPmV2ZW50c1tldmVudF0uaGFuZGxlcigmZXZp bmZvKTsKKwkJcHJvcGFnYXRlID0gZXZpbmZvLnByb3BhZ2F0ZTsKKwkJZ290byBkb25lOwor CQl9CisKKwkgICAgbmV4dF9kb21haW4tPmNwdWRhdGFbY3B1aWRdLmV2ZW50X2luZm8uZG9t aWQgPSB0aGlzX2RvbWFpbi0+ZG9taWQ7CisJICAgIG5leHRfZG9tYWluLT5jcHVkYXRhW2Nw dWlkXS5ldmVudF9pbmZvLmV2ZW50ID0gZXZlbnQ7CisJICAgIG5leHRfZG9tYWluLT5jcHVk YXRhW2NwdWlkXS5ldmVudF9pbmZvLmV2ZGF0YSA9IGV2ZGF0YTsKKwkgICAgbmV4dF9kb21h aW4tPmNwdWRhdGFbY3B1aWRdLmV2ZW50X2luZm8ucHJvcGFnYXRlID0gMDsKKwkgICAgX19z ZXRfYml0KElQSVBFX1hQRU5EX0ZMQUcsJm5leHRfZG9tYWluLT5jcHVkYXRhW2NwdWlkXS5z dGF0dXMpOworCisJICAgIC8qIExldCB0aGUgaGlnaGVyIHByaW9yaXR5IGRvbWFpbiBwcm9j ZXNzIHRoZSBldmVudC4gKi8KKwkgICAgX19hZGVvc19zd2l0Y2hfdG8odGhpc19kb21haW4s bmV4dF9kb21haW4sY3B1aWQpOworCSAgICAKKwkgICAgYWRlb3NfbG9hZF9jcHVpZCgpOwkv KiBQcm9jZXNzb3IgbWlnaHQgaGF2ZSBjaGFuZ2VkLiAqLworCisJICAgIGlmICghbmV4dF9k b21haW4tPmNwdWRhdGFbY3B1aWRdLmV2ZW50X2luZm8ucHJvcGFnYXRlKQorCQl7CisJCXBy b3BhZ2F0ZSA9IDA7CisJCWJyZWFrOworCQl9CisJICAgIH0KKworCWlmIChuZXh0X2RvbWFp biA9PSB0aGlzX2RvbWFpbikKKwkgICAgYnJlYWs7CisgICAgfQorCisgICAgYWRlb3NfdW5s b2NrX2NwdShmbGFncyk7CisKKyBkb25lOgorCisgICAgcmV0dXJuICFwcm9wYWdhdGU7Cit9 CisKKyNlbHNlIC8qICFDT05GSUdfQURFT1NfVEhSRUFEUyAqLworCithc21saW5rYWdlIGlu dCBfX2FkZW9zX2hhbmRsZV9ldmVudCAodW5zaWduZWQgZXZlbnQsIHZvaWQgKmV2ZGF0YSkK Ky8qIGFzbWxpbmthZ2UgaXMgdGhlcmUganVzdCBpbiBjYXNlIENPTkZJR19SRUdQQVJNIGlz IGVuYWJsZWQuLi4gKi8KK3sKKyAgICBhZG9tYWluX3QgKnN0YXJ0X2RvbWFpbiwgKnRoaXNf ZG9tYWluLCAqbmV4dF9kb21haW47CisgICAgc3RydWN0IGxpc3RfaGVhZCAqcG9zLCAqbnBv czsKKyAgICB1bnNpZ25lZCBsb25nIGZsYWdzOworICAgIGFkZW9zX2RlY2xhcmVfY3B1aWQ7 CisgICAgYWRldmluZm9fdCBldmluZm87CisgICAgaW50IHByb3BhZ2F0ZSA9IDE7CisKKyAg ICBhZGVvc19sb2NrX2NwdShmbGFncyk7CisKKyAgICBzdGFydF9kb21haW4gPSB0aGlzX2Rv bWFpbiA9IGFkcF9jcHVfY3VycmVudFtjcHVpZF07CisKKyAgICBsaXN0X2Zvcl9lYWNoX3Nh ZmUocG9zLG5wb3MsJl9fYWRlb3NfcGlwZWxpbmUpIHsKKworICAgIAluZXh0X2RvbWFpbiA9 IGxpc3RfZW50cnkocG9zLGFkb21haW5fdCxwX2xpbmspOworCisJaWYgKG5leHRfZG9tYWlu LT5ldmVudHNbZXZlbnRdLmhhbmRsZXIgIT0gTlVMTCkKKwkgICAgeworCSAgICBhZHBfY3B1 X2N1cnJlbnRbY3B1aWRdID0gbmV4dF9kb21haW47CisJICAgIGV2aW5mby5kb21pZCA9IHN0 YXJ0X2RvbWFpbi0+ZG9taWQ7CisJICAgIGFkZW9zX3VubG9ja19jcHUoZmxhZ3MpOworCSAg ICBldmluZm8uZXZlbnQgPSBldmVudDsKKwkgICAgZXZpbmZvLmV2ZGF0YSA9IGV2ZGF0YTsK KwkgICAgZXZpbmZvLnByb3BhZ2F0ZSA9IDA7CisJICAgIG5leHRfZG9tYWluLT5ldmVudHNb ZXZlbnRdLmhhbmRsZXIoJmV2aW5mbyk7CisJICAgIGFkZW9zX2xvY2tfY3B1KGZsYWdzKTsK KworCSAgICBpZiAoYWRwX2NwdV9jdXJyZW50W2NwdWlkXSAhPSBuZXh0X2RvbWFpbikKKwkJ LyogU29tZXRoaW5nIGhhcyBjaGFuZ2VkIHRoZSBjdXJyZW50IGRvbWFpbiB1bmRlciBvdXIK KwkJICAgZmVldCByZWN5Y2xpbmcgdGhlIHJlZ2lzdGVyIHNldDsgdGFrZSBub3RlLiAqLwor CQl0aGlzX2RvbWFpbiA9IGFkcF9jcHVfY3VycmVudFtjcHVpZF07CisKKwkgICAgcHJvcGFn YXRlID0gZXZpbmZvLnByb3BhZ2F0ZTsKKwkgICAgfQorCisJaWYgKG5leHRfZG9tYWluID09 IHRoaXNfZG9tYWluIHx8ICFwcm9wYWdhdGUpCisJICAgIGJyZWFrOworICAgIH0KKworICAg IGFkcF9jcHVfY3VycmVudFtjcHVpZF0gPSB0aGlzX2RvbWFpbjsKKworICAgIGFkZW9zX3Vu bG9ja19jcHUoZmxhZ3MpOworCisgICAgcmV0dXJuICFwcm9wYWdhdGU7Cit9CisKKyNlbmRp ZiAvKiBDT05GSUdfQURFT1NfVEhSRUFEUyAqLworCit2b2lkIF9fYWRlb3Nfc3RhbGxfcm9v dCAodm9pZCkKKworeworICAgIGlmIChhZHBfcGlwZWxpbmVkKQorCXsKKwlhZGVvc19kZWNs YXJlX2NwdWlkOworCisjaWZkZWYgQ09ORklHX1NNUAorCXVuc2lnbmVkIGxvbmcgZmxhZ3M7 CisJYWRlb3NfbG9ja19jcHUoZmxhZ3MpOworCV9fc2V0X2JpdChJUElQRV9TVEFMTF9GTEFH LCZhZHBfcm9vdC0+Y3B1ZGF0YVtjcHVpZF0uc3RhdHVzKTsKKwlhZGVvc191bmxvY2tfY3B1 KGZsYWdzKTsKKyNlbHNlIC8qICFDT05GSUdfU01QICovCisJc2V0X2JpdChJUElQRV9TVEFM TF9GTEFHLCZhZHBfcm9vdC0+Y3B1ZGF0YVtjcHVpZF0uc3RhdHVzKTsKKyNlbmRpZiAvKiBD T05GSUdfU01QICovCisJfQorICAgIGVsc2UKKwlhZGVvc19od19jbGkoKTsKK30KKwordm9p ZCBfX2FkZW9zX3Vuc3RhbGxfcm9vdCAodm9pZCkKKworeworICAgIGlmIChhZHBfcGlwZWxp bmVkKQorCXsKKwlhZGVvc19kZWNsYXJlX2NwdWlkOworCisJYWRlb3NfaHdfY2xpKCk7CisK KwlhZGVvc19sb2FkX2NwdWlkKCk7CisKKwlfX2NsZWFyX2JpdChJUElQRV9TVEFMTF9GTEFH LCZhZHBfcm9vdC0+Y3B1ZGF0YVtjcHVpZF0uc3RhdHVzKTsKKworCWlmIChhZHBfcm9vdC0+ Y3B1ZGF0YVtjcHVpZF0uaXJxX3BlbmRpbmdfaGkgIT0gMCkKKwkgICAgX19hZGVvc19zeW5j X3N0YWdlKElQSVBFX0lSUU1BU0tfQU5ZKTsKKwl9CisKKyAgICBhZGVvc19od19zdGkoKTsJ LyogTmVlZGVkIGluIGJvdGggY2FzZXMuICovCit9CisKK3Vuc2lnbmVkIGxvbmcgX19hZGVv c190ZXN0X3Jvb3QgKHZvaWQpCisKK3sKKyAgICBpZiAoYWRwX3BpcGVsaW5lZCkKKwl7CisJ YWRlb3NfZGVjbGFyZV9jcHVpZDsKKwl1bnNpZ25lZCBsb25nIHM7CisKKyNpZmRlZiBDT05G SUdfU01QCisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlhZGVvc19sb2NrX2NwdShmbGFncyk7 CisJcyA9IHRlc3RfYml0KElQSVBFX1NUQUxMX0ZMQUcsJmFkcF9yb290LT5jcHVkYXRhW2Nw dWlkXS5zdGF0dXMpOworCWFkZW9zX3VubG9ja19jcHUoZmxhZ3MpOworI2Vsc2UgLyogIUNP TkZJR19TTVAgKi8KKwlzID0gdGVzdF9iaXQoSVBJUEVfU1RBTExfRkxBRywmYWRwX3Jvb3Qt PmNwdWRhdGFbY3B1aWRdLnN0YXR1cyk7CisjZW5kaWYgLyogQ09ORklHX1NNUCAqLworCisJ cmV0dXJuIHM7CisJfQorCisgICAgcmV0dXJuIGFkZW9zX2h3X2lycXNfZGlzYWJsZWQoKTsK K30KKwordW5zaWduZWQgbG9uZyBfX2FkZW9zX3Rlc3RfYW5kX3N0YWxsX3Jvb3QgKHZvaWQp CisKK3sKKyAgICB1bnNpZ25lZCBsb25nIGZsYWdzOworCisgICAgaWYgKGFkcF9waXBlbGlu ZWQpCisJeworCWFkZW9zX2RlY2xhcmVfY3B1aWQ7CisJdW5zaWduZWQgbG9uZyBzOworCisj aWZkZWYgQ09ORklHX1NNUAorCWFkZW9zX2xvY2tfY3B1KGZsYWdzKTsKKwlzID0gX190ZXN0 X2FuZF9zZXRfYml0KElQSVBFX1NUQUxMX0ZMQUcsJmFkcF9yb290LT5jcHVkYXRhW2NwdWlk XS5zdGF0dXMpOworCWFkZW9zX3VubG9ja19jcHUoZmxhZ3MpOworI2Vsc2UgLyogIUNPTkZJ R19TTVAgKi8KKwlzID0gdGVzdF9hbmRfc2V0X2JpdChJUElQRV9TVEFMTF9GTEFHLCZhZHBf cm9vdC0+Y3B1ZGF0YVtjcHVpZF0uc3RhdHVzKTsKKyNlbmRpZiAvKiBDT05GSUdfU01QICov CisKKwlyZXR1cm4gczsKKwl9CisKKyAgICBhZGVvc19od19sb2NhbF9pcnFfc2F2ZShmbGFn cyk7CisKKyAgICByZXR1cm4gIWFkZW9zX2h3X3Rlc3RfaWZsYWcoZmxhZ3MpOworfQorCit2 b2lkIGZhc3RjYWxsIF9fYWRlb3NfcmVzdG9yZV9yb290ICh1bnNpZ25lZCBsb25nIGZsYWdz KQorCit7CisgICAgaWYgKGZsYWdzKQorCV9fYWRlb3Nfc3RhbGxfcm9vdCgpOworICAgIGVs c2UKKwlfX2FkZW9zX3Vuc3RhbGxfcm9vdCgpOworfQorCisvKiBhZGVvc191bnN0YWxsX3Bp cGVsaW5lX2Zyb20oKSAtLSBVbnN0YWxsIHRoZSBpbnRlcnJ1cHQgcGlwZWxpbmUgYW5kCisg ICBzeW5jaHJvbml6ZSBwZW5kaW5nIGV2ZW50cyBmcm9tIGEgZ2l2ZW4gZG9tYWluLiAqLwor Cit2b2lkIGZhc3RjYWxsIGFkZW9zX3Vuc3RhbGxfcGlwZWxpbmVfZnJvbSAoYWRvbWFpbl90 ICphZHApCisKK3sKKyAgICBhZG9tYWluX3QgKnRoaXNfZG9tYWluOworICAgIHN0cnVjdCBs aXN0X2hlYWQgKnBvczsKKyAgICB1bnNpZ25lZCBsb25nIGZsYWdzOworICAgIGFkZW9zX2Rl Y2xhcmVfY3B1aWQ7CisKKyAgICBhZGVvc19sb2NrX2NwdShmbGFncyk7CisKKyAgICBfX2Ns ZWFyX2JpdChJUElQRV9TVEFMTF9GTEFHLCZhZHAtPmNwdWRhdGFbY3B1aWRdLnN0YXR1cyk7 CisKKyAgICB0aGlzX2RvbWFpbiA9IGFkcF9jcHVfY3VycmVudFtjcHVpZF07CisKKyAgICBp ZiAoYWRwID09IHRoaXNfZG9tYWluKQorCXsKKwlpZiAoYWRwLT5jcHVkYXRhW2NwdWlkXS5p cnFfcGVuZGluZ19oaSAhPSAwKQorCSAgICBfX2FkZW9zX3N5bmNfc3RhZ2UoSVBJUEVfSVJR TUFTS19BTlkpOworCisJZ290byByZWxlYXNlX2NwdV9hbmRfZXhpdDsKKwl9CisKKyAgICAv KiBBdHRlbXB0IHRvIGZsdXNoIGFsbCBldmVudHMgdGhhdCBtaWdodCBiZSBwZW5kaW5nIGF0 IHRoZQorICAgICAgIHVuc3RhbGxlZCBkb21haW4gbGV2ZWwuIFRoaXMgY29kZSBpcyByb3Vn aGx5IGxpZnRlZCBmcm9tCisgICAgICAgX19hZGVvc193YWxrX3BpcGVsaW5lKCkuICovCisK KyAgICBsaXN0X2Zvcl9lYWNoKHBvcywmX19hZGVvc19waXBlbGluZSkgeworCisgICAgCWFk b21haW5fdCAqbmV4dF9kb21haW4gPSBsaXN0X2VudHJ5KHBvcyxhZG9tYWluX3QscF9saW5r KTsKKworCWlmICh0ZXN0X2JpdChJUElQRV9TVEFMTF9GTEFHLCZuZXh0X2RvbWFpbi0+Y3B1 ZGF0YVtjcHVpZF0uc3RhdHVzKSkKKwkgICAgYnJlYWs7IC8qIFN0YWxsZWQgc3RhZ2UgLS0g ZG8gbm90IGdvIGZ1cnRoZXIuICovCisKKwlpZiAobmV4dF9kb21haW4tPmNwdWRhdGFbY3B1 aWRdLmlycV9wZW5kaW5nX2hpICE9IDApCisJICAgIHsKKwkgICAgLyogU2luY2UgdGhlIGNy aXRpY2FsIElQSSBtaWdodCBiZSB0cmlnZ2VyZWQgYnkgdGhlCisJICAgICAgIGZvbGxvd2lu ZyBhY3Rpb25zLCB0aGUgY3VycmVudCBkb21haW4gbWlnaHQgbm90IGJlCisJICAgICAgIGxp bmtlZCB0byB0aGUgcGlwZWxpbmUgYW55bW9yZSBhZnRlciBpdHMgaGFuZGxlcgorCSAgICAg ICByZXR1cm5zIG9uIFNNUCBib3hlbiwgZXZlbiBpZiB0aGUgZG9tYWluIHJlbWFpbnMgdmFs aWQKKwkgICAgICAgKHNlZSBhZGVvc191bnJlZ2lzdGVyX2RvbWFpbigpKSwgc28gZG9uJ3Qg bWFrZSBhbnkKKwkgICAgICAgaGF6YXJkb3VzIGFzc3VtcHRpb25zIGhlcmUuICovCisKKwkg ICAgaWYgKG5leHRfZG9tYWluID09IHRoaXNfZG9tYWluKQorCQlfX2FkZW9zX3N5bmNfc3Rh Z2UoSVBJUEVfSVJRTUFTS19BTlkpOworCSAgICBlbHNlCisJCXsKKwkJX19hZGVvc19zd2l0 Y2hfdG8odGhpc19kb21haW4sbmV4dF9kb21haW4sY3B1aWQpOworCisJCWFkZW9zX2xvYWRf Y3B1aWQoKTsgLyogUHJvY2Vzc29yIG1pZ2h0IGhhdmUgY2hhbmdlZC4gKi8KKworCQlpZiAo dGhpc19kb21haW4tPmNwdWRhdGFbY3B1aWRdLmlycV9wZW5kaW5nX2hpICE9IDAgJiYKKwkJ ICAgICF0ZXN0X2JpdChJUElQRV9TVEFMTF9GTEFHLCZ0aGlzX2RvbWFpbi0+Y3B1ZGF0YVtj cHVpZF0uc3RhdHVzKSAmJgorCQkgICAgIXRlc3RfYml0KElQSVBFX1NZTkNfRkxBRywmdGhp c19kb21haW4tPmNwdWRhdGFbY3B1aWRdLnN0YXR1cykpCisJCSAgICBfX2FkZW9zX3N5bmNf c3RhZ2UoSVBJUEVfSVJRTUFTS19BTlkpOworCQl9CisJICAgIAorCSAgICBicmVhazsKKwkg ICAgfQorCWVsc2UgaWYgKG5leHRfZG9tYWluID09IHRoaXNfZG9tYWluKQorCSAgICBicmVh azsKKyAgICB9CisKK3JlbGVhc2VfY3B1X2FuZF9leGl0OgorCisgICAgaWYgKF9fYWRlb3Nf cGlwZWxpbmVfaGVhZF9wKGFkcCkpCisJYWRlb3NfaHdfc3RpKCk7CisgICAgZWxzZQorCWFk ZW9zX3VubG9ja19jcHUoZmxhZ3MpOworfQorCisvKiBhZGVvc19zdXNwZW5kX2RvbWFpbigp IC0tIHRlbGwgdGhlIEFERU9TIGxheWVyIHRoYXQgdGhlIGN1cnJlbnQKKyAgIGRvbWFpbiBp cyBub3cgZG9ybWFudC4gVGhlIGNhbGxpbmcgZG9tYWluIGlzIHN3aXRjaGVkIG91dCwgd2hp bGUKKyAgIHRoZSBuZXh0IGRvbWFpbiB3aXRoIHdvcmsgaW4gcHJvZ3Jlc3Mgb3IgcGVuZGlu ZyBpbiB0aGUgcGlwZWxpbmUgaXMKKyAgIHN3aXRjaGVkIGluLiAqLworCisjaWZkZWYgQ09O RklHX0FERU9TX1RIUkVBRFMKKworI2RlZmluZSBfX2ZsdXNoX3BpcGVsaW5lX3N0YWdlKCkg XAorZG8geyBcCisgICAgaWYgKCF0ZXN0X2JpdChJUElQRV9TVEFMTF9GTEFHLCZjcHVkYXRh LT5zdGF0dXMpICYmIFwKKwljcHVkYXRhLT5pcnFfcGVuZGluZ19oaSAhPSAwKSBcCisJeyBc CisJX19hZGVvc19zeW5jX3N0YWdlKElQSVBFX0lSUU1BU0tfQU5ZKTsgXAorCWFkZW9zX2xv YWRfY3B1aWQoKTsgXAorCWNwdWRhdGEgPSAmdGhpc19kb21haW4tPmNwdWRhdGFbY3B1aWRd OyBcCisJfSBcCit9IHdoaWxlKDApCisKK3ZvaWQgYWRlb3Nfc3VzcGVuZF9kb21haW4gKHZv aWQpCisKK3sKKyAgICBhZG9tYWluX3QgKnRoaXNfZG9tYWluLCAqbmV4dF9kb21haW47Cisg ICAgc3RydWN0IGFkY3B1ZGF0YSAqY3B1ZGF0YTsKKyAgICBzdHJ1Y3QgbGlzdF9oZWFkICps bjsKKyAgICB1bnNpZ25lZCBsb25nIGZsYWdzOworICAgIGFkZW9zX2RlY2xhcmVfY3B1aWQ7 CisKKyAgICBhZGVvc19sb2NrX2NwdShmbGFncyk7CisKKyAgICB0aGlzX2RvbWFpbiA9IG5l eHRfZG9tYWluID0gYWRwX2NwdV9jdXJyZW50W2NwdWlkXTsKKyAgICBjcHVkYXRhID0gJnRo aXNfZG9tYWluLT5jcHVkYXRhW2NwdWlkXTsKKworICAgIC8qIEEgc3VzcGVuZGluZyBkb21h aW4gaW1wbGljaXRlbHkgdW5zdGFsbHMgdGhlIHBpcGVsaW5lLiAqLworICAgIF9fY2xlYXJf Yml0KElQSVBFX1NUQUxMX0ZMQUcsJmNwdWRhdGEtPnN0YXR1cyk7CisKKyAgICAvKiBNYWtl IHN1cmUgdGhhdCBubyBldmVudCByZW1haW5zIHN0dWNrIGluIHRoZSBwaXBlbGluZS4gVGhp cworICAgICAgIGNvdWxkIGhhcHBlbiB3aXRoIGVtZXJnaW5nIFNNUCBpbnN0YW5jZXMsIG9y IGRvbWFpbnMgd2hpY2gKKyAgICAgICBmb3JnZXQgdG8gdW5zdGFsbCB0aGVpciBzdGFnZSBi ZWZvcmUgY2FsbGluZyB1cy4gKi8KKyAgICBfX2ZsdXNoX3BpcGVsaW5lX3N0YWdlKCk7CisK KyAgICBmb3IgKDs7KQorCXsKKwlsbiA9IG5leHRfZG9tYWluLT5wX2xpbmsubmV4dDsKKwor CWlmIChsbiA9PSAmX19hZGVvc19waXBlbGluZSkJLyogRW5kIG9mIHBpcGVsaW5lIHJlYWNo ZWQ/ICovCisJICAgIC8qIENhbGxlciBzaG91bGQgbG9vcCBvbiBpdHMgaWRsZSB0YXNrIG9u IHJldHVybi4gKi8KKwkgICAgZ290byByZWxlYXNlX2NwdV9hbmRfZXhpdDsKKworCW5leHRf ZG9tYWluID0gbGlzdF9lbnRyeShsbixhZG9tYWluX3QscF9saW5rKTsKKworCS8qIE1ha2Ug c3VyZSB0aGUgZG9tYWluIHdhcyBwcmVlbXB0ZWQgKGkuZS4gbm90IHNsZWVwaW5nKSBvcgor CSAgIGhhcyBzb21lIGV2ZW50IHRvIHByb2Nlc3MgYmVmb3JlIHN3aXRjaGluZyB0byBpdC4g Ki8KKworCWlmIChfX2FkZW9zX2RvbWFpbl93b3JrX3AobmV4dF9kb21haW4sY3B1aWQpKQor CSAgICBicmVhazsKKwl9CisKKyAgICAvKiBNYXJrIHRoZSBvdXRnb2luZyBkb21haW4gYXMg YXNsZXB0IChpLmUuIG5vdCBwcmVlbXB0ZWQpLiAqLworICAgIF9fc2V0X2JpdChJUElQRV9T TEVFUF9GTEFHLCZjcHVkYXRhLT5zdGF0dXMpOworCisgICAgLyogU3VzcGVuZCB0aGUgY2Fs bGluZyBkb21haW4sIHN3aXRjaGluZyB0byB0aGUgbmV4dCBvbmUuICovCisgICAgX19hZGVv c19zd2l0Y2hfdG8odGhpc19kb21haW4sbmV4dF9kb21haW4sY3B1aWQpOworCisjaWZkZWYg Q09ORklHX1NNUAorICAgIGFkZW9zX2xvYWRfY3B1aWQoKTsJLyogUHJvY2Vzc29yIG1pZ2h0 IGhhdmUgY2hhbmdlZC4gKi8KKyAgICBjcHVkYXRhID0gJnRoaXNfZG9tYWluLT5jcHVkYXRh W2NwdWlkXTsKKyNlbmRpZiAvKiBDT05GSUdfU01QICovCisKKyAgICAvKiBDbGVhciB0aGUg c2xlZXAgYml0IGZvciB0aGUgaW5jb21pbmcgZG9tYWluLiAqLworICAgIF9fY2xlYXJfYml0 KElQSVBFX1NMRUVQX0ZMQUcsJmNwdWRhdGEtPnN0YXR1cyk7CisKKyAgICAvKiBOb3csIHdl IGFyZSBiYWNrIGludG8gdGhlIGNhbGxpbmcgZG9tYWluLiBGbHVzaCB0aGUgaW50ZXJydXB0 CisgICAgICAgbG9nIGFuZCBmaXJlIHRoZSBldmVudCBpbnRlcnBvc2l0aW9uIGhhbmRsZXIg aWYgbmVlZGVkLiAgQ1BVCisgICAgICAgbWlncmF0aW9uIGlzIGFsbG93ZWQgaW4gU01QLW1v ZGUgb24gYmVoYWxmIG9mIGFuIGV2ZW50IGhhbmRsZXIKKyAgICAgICBwcm92aWRlZCB0aGF0 IHRoZSBjdXJyZW50IGRvbWFpbiByYWlzZWQgaXQuIE90aGVyd2lzZSwgaXQncworICAgICAg IG5vdC4gKi8KKworICAgIF9fZmx1c2hfcGlwZWxpbmVfc3RhZ2UoKTsKKworICAgIGlmIChf X3Rlc3RfYW5kX2NsZWFyX2JpdChJUElQRV9YUEVORF9GTEFHLCZjcHVkYXRhLT5zdGF0dXMp KQorCXsKKwlhZGVvc191bmxvY2tfY3B1KGZsYWdzKTsKKwl0aGlzX2RvbWFpbi0+ZXZlbnRz W2NwdWRhdGEtPmV2ZW50X2luZm8uZXZlbnRdLmhhbmRsZXIoJmNwdWRhdGEtPmV2ZW50X2lu Zm8pOworCXJldHVybjsKKwl9CisKK3JlbGVhc2VfY3B1X2FuZF9leGl0OgorCisgICAgYWRl b3NfdW5sb2NrX2NwdShmbGFncyk7CisKKyAgICAvKiBSZXR1cm4gdG8gdGhlIHBvaW50IG9m IHN1c3BlbnNpb24gaW4gdGhlIGNhbGxpbmcgZG9tYWluLiAqLworfQorCisjZWxzZSAvKiAh Q09ORklHX0FERU9TX1RIUkVBRFMgKi8KKwordm9pZCBhZGVvc19zdXNwZW5kX2RvbWFpbiAo dm9pZCkKKworeworICAgIGFkb21haW5fdCAqdGhpc19kb21haW4sICpuZXh0X2RvbWFpbjsK KyAgICBzdHJ1Y3QgbGlzdF9oZWFkICpsbjsKKyAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwor ICAgIGFkZW9zX2RlY2xhcmVfY3B1aWQ7CisKKyAgICBhZGVvc19sb2NrX2NwdShmbGFncyk7 CisKKyAgICB0aGlzX2RvbWFpbiA9IG5leHRfZG9tYWluID0gYWRwX2NwdV9jdXJyZW50W2Nw dWlkXTsKKworICAgIF9fY2xlYXJfYml0KElQSVBFX1NUQUxMX0ZMQUcsJnRoaXNfZG9tYWlu LT5jcHVkYXRhW2NwdWlkXS5zdGF0dXMpOworCisgICAgaWYgKHRoaXNfZG9tYWluLT5jcHVk YXRhW2NwdWlkXS5pcnFfcGVuZGluZ19oaSAhPSAwKQorCWdvdG8gc3luY19zdGFnZTsKKwor ICAgIGZvciAoOzspCisJeworCWxuID0gbmV4dF9kb21haW4tPnBfbGluay5uZXh0OworCisJ aWYgKGxuID09ICZfX2FkZW9zX3BpcGVsaW5lKQorCSAgICBicmVhazsKKworCW5leHRfZG9t YWluID0gbGlzdF9lbnRyeShsbixhZG9tYWluX3QscF9saW5rKTsKKworCWlmICh0ZXN0X2Jp dChJUElQRV9TVEFMTF9GTEFHLCZuZXh0X2RvbWFpbi0+Y3B1ZGF0YVtjcHVpZF0uc3RhdHVz KSkKKwkgICAgYnJlYWs7CisKKwlpZiAobmV4dF9kb21haW4tPmNwdWRhdGFbY3B1aWRdLmly cV9wZW5kaW5nX2hpID09IDApCisJICAgIGNvbnRpbnVlOworCisJYWRwX2NwdV9jdXJyZW50 W2NwdWlkXSA9IG5leHRfZG9tYWluOworCisJaWYgKG5leHRfZG9tYWluLT5kc3dpdGNoKQor CSAgICBuZXh0X2RvbWFpbi0+ZHN3aXRjaCgpOworCisgc3luY19zdGFnZToKKworCV9fYWRl b3Nfc3luY19zdGFnZShJUElQRV9JUlFNQVNLX0FOWSk7CisKKwlhZGVvc19sb2FkX2NwdWlk KCk7CS8qIFByb2Nlc3NvciBtaWdodCBoYXZlIGNoYW5nZWQuICovCisKKwlpZiAoYWRwX2Nw dV9jdXJyZW50W2NwdWlkXSAhPSBuZXh0X2RvbWFpbikKKwkgICAgLyogU29tZXRoaW5nIGhh cyBjaGFuZ2VkIHRoZSBjdXJyZW50IGRvbWFpbiB1bmRlciBvdXIgZmVldAorCSAgICAgICBy ZWN5Y2xpbmcgdGhlIHJlZ2lzdGVyIHNldDsgdGFrZSBub3RlLiAqLworCSAgICB0aGlzX2Rv bWFpbiA9IGFkcF9jcHVfY3VycmVudFtjcHVpZF07CisJfQorCisgICAgYWRwX2NwdV9jdXJy ZW50W2NwdWlkXSA9IHRoaXNfZG9tYWluOworCisgICAgYWRlb3NfdW5sb2NrX2NwdShmbGFn cyk7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfQURFT1NfVEhSRUFEUyAqLworCisvKiBhZGVv c19hbGxvY19pcnEoKSAtLSBBbGxvY2F0ZSBhIHZpcnR1YWwvc29mdCBwaXBlbGluZWQgaW50 ZXJydXB0LgorICAgVmlydHVhbCBpbnRlcnJ1cHRzIGFyZSBoYW5kbGVkIGluIGV4YWN0bHkg dGhlIHNhbWUgd2F5IHRoYW4gdGhlaXIKKyAgIGh3LWdlbmVyYXRlZCBjb3VudGVycGFydHMu IFRoaXMgaXMgYSB2ZXJ5IGJhc2ljLCBvbmUtd2F5IG9ubHksCisgICBpbnRlci1kb21haW4g Y29tbXVuaWNhdGlvbiBzeXN0ZW0gKHNlZSBhZGVvc190cmlnZ2VyX2lycSgpKS4gIE5vdGU6 CisgICBpdCBpcyBub3QgbmVjZXNzYXJ5IGZvciBhIGRvbWFpbiB0byBhbGxvY2F0ZSBhIHZp cnR1YWwgaW50ZXJydXB0IHRvCisgICB0cmFwIGl0IHVzaW5nIGFkZW9zX3ZpcnR1YWxpemVf aXJxKCkuIFRoZSBuZXdseSBhbGxvY2F0ZWQgVklSUQorICAgbnVtYmVyIHdoaWNoIGNhbiBi ZSBwYXNzZWQgdG8gb3RoZXIgSVJRLXJlbGF0ZWQgc2VydmljZXMgaXMKKyAgIHJldHVybmVk IG9uIHN1Y2Nlc3MsIHplcm8gb3RoZXJ3aXNlIChpLmUuIG5vIG1vcmUgdmlydHVhbCBpbnRl cnJ1cHQKKyAgIGNoYW5uZWwgaXMgYXZhaWxhYmxlKS4gV2UgbmVlZCB0aGlzIHNlcnZpY2Ug YXMgcGFydCBvZiB0aGUgQWRlb3MKKyAgIGJvb3RzdHJhcCBjb2RlLCBoZW5jZSBpdCBtdXN0 IHJlc2lkZSBpbiBhIGJ1aWx0LWluIGFyZWEuICovCisKK3Vuc2lnbmVkIGFkZW9zX2FsbG9j X2lycSAodm9pZCkKKworeworICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIGlycSA9IDA7Cisg ICAgaW50IGlwb3M7CisKKyAgICBhZGVvc19zcGluX2xvY2tfaXJxc2F2ZSgmX19hZGVvc19w aXBlbG9jayxmbGFncyk7CisKKyAgICBpZiAoX19hZGVvc192aXJ0dWFsX2lycV9tYXAgIT0g fjApCisJeworCWlwb3MgPSBmZnooX19hZGVvc192aXJ0dWFsX2lycV9tYXApOworCXNldF9i aXQoaXBvcywmX19hZGVvc192aXJ0dWFsX2lycV9tYXApOworCWlycSA9IGlwb3MgKyBJUElQ RV9WSVJRX0JBU0U7CisJfQorCisgICAgYWRlb3Nfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgm X19hZGVvc19waXBlbG9jayxmbGFncyk7CisKKyAgICByZXR1cm4gaXJxOworfQorCisjaWZk ZWYgQ09ORklHX1BST0NfRlMKKworI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKworc3Rh dGljIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqYWRlb3NfcHJvY19lbnRyeTsKKworc3RhdGlj IGludCBfX2FkZW9zX3JlYWRfcHJvYyAoY2hhciAqcGFnZSwKKwkJCSAgICAgIGNoYXIgKipz dGFydCwKKwkJCSAgICAgIG9mZl90IG9mZiwKKwkJCSAgICAgIGludCBjb3VudCwKKwkJCSAg ICAgIGludCAqZW9mLAorCQkJICAgICAgdm9pZCAqZGF0YSkKK3sKKyAgICB1bnNpZ25lZCBs b25nIGN0bGJpdHM7CisgICAgc3RydWN0IGxpc3RfaGVhZCAqcG9zOworICAgIHVuc2lnbmVk IGlycSwgX2lycTsKKyAgICBjaGFyICpwID0gcGFnZTsKKyAgICBpbnQgbGVuOworCisjaWZk ZWYgQ09ORklHX0FERU9TX01PRFVMRQorICAgIHAgKz0gc3ByaW50ZihwLCJBZGVvcyAlcyAt LSBQaXBlbGluaW5nOiAlcyIsQURFT1NfVkVSU0lPTl9TVFJJTkcsYWRwX3BpcGVsaW5lZCA/ ICJhY3RpdmUiIDogInN0b3BwZWQiKTsKKyNlbHNlIC8qICFDT05GSUdfQURFT1NfTU9EVUxF ICovCisgICAgcCArPSBzcHJpbnRmKHAsIkFkZW9zICVzIC0tIFBpcGVsaW5pbmc6IHBlcm1h bmVudCIsQURFT1NfVkVSU0lPTl9TVFJJTkcpOworI2VuZGlmIC8qIENPTkZJR19BREVPU19N T0RVTEUgKi8KKyNpZmRlZiBDT05GSUdfQURFT1NfVEhSRUFEUworICAgIHAgKz0gc3ByaW50 ZihwLCAiICh0aHJlYWRlZClcblxuIik7CisjZWxzZQkJCQkvKiBDT05GSUdfQURFT1NfVEhS RUFEUyAqLworICAgIHAgKz0gc3ByaW50ZihwLCAiXG5cbiIpOworI2VuZGlmCQkJCS8qIENP TkZJR19BREVPU19USFJFQURTICovCisKKyAgICBzcGluX2xvY2soJl9fYWRlb3NfcGlwZWxv Y2spOworCisgICAgbGlzdF9mb3JfZWFjaChwb3MsJl9fYWRlb3NfcGlwZWxpbmUpIHsKKwor ICAgIAlhZG9tYWluX3QgKmFkcCA9IGxpc3RfZW50cnkocG9zLGFkb21haW5fdCxwX2xpbmsp OworCisJcCArPSBzcHJpbnRmKHAsIiU4czogcHJpb3JpdHk9JWQsIGlkPTB4JS44eCwgcHRk a2V5cz0lZC8lZFxuIiwKKwkJICAgICBhZHAtPm5hbWUsCisJCSAgICAgYWRwLT5wcmlvcml0 eSwKKwkJICAgICBhZHAtPmRvbWlkLAorCQkgICAgIGFkcC0+cHRkX2tleWNvdW50LAorCQkg ICAgIGFkcC0+cHRkX2tleW1heCk7CisJaXJxID0gMDsKKworCXdoaWxlIChpcnEgPCBJUElQ RV9OUl9JUlFTKQorCSAgICB7CisJICAgIGN0bGJpdHMgPSAoYWRwLT5pcnFzW2lycV0uY29u dHJvbCAmIChJUElQRV9IQU5ETEVfTUFTS3xJUElQRV9QQVNTX01BU0t8SVBJUEVfU1RJQ0tZ X01BU0spKTsKKworCSAgICBpZiAoaXJxID49IElQSVBFX05SX1hJUlFTICYmICFhZGVvc192 aXJ0dWFsX2lycV9wKGlycSkpCisJCXsKKwkJLyogVGhlcmUgbWlnaHQgYmUgYSBob2xlIGJl dHdlZW4gdGhlIGxhc3QgZXh0ZXJuYWwgSVJRCisJCSAgIGFuZCB0aGUgZmlyc3QgdmlydHVh bCBvbmU7IHNraXAgaXQuICovCisJCWlycSsrOworCQljb250aW51ZTsKKwkJfQorCisJICAg IGlmIChhZGVvc192aXJ0dWFsX2lycV9wKGlycSkgJiYgIXRlc3RfYml0KGlycSAtIElQSVBF X1ZJUlFfQkFTRSwmX19hZGVvc192aXJ0dWFsX2lycV9tYXApKQorCQl7CisJCS8qIE5vbi1h bGxvY2F0ZWQgdmlydHVhbCBJUlE7IHNraXAgaXQuICovCisJCWlycSsrOworCQljb250aW51 ZTsKKwkJfQorCisJICAgIC8qIEF0dGVtcHQgdG8gZ3JvdXAgY29uc2VjdXRpdmUgSVJRIG51 bWJlcnMgaGF2aW5nIHRoZQorCSAgICAgICBzYW1lIHZpcnR1YWxpemF0aW9uIHNldHRpbmdz IGluIGEgc2luZ2xlIGxpbmUuICovCisKKwkgICAgX2lycSA9IGlycTsKKworCSAgICB3aGls ZSAoKytfaXJxIDwgSVBJUEVfTlJfSVJRUykKKwkJeworCQlpZiAoYWRlb3NfdmlydHVhbF9p cnFfcChfaXJxKSAhPSBhZGVvc192aXJ0dWFsX2lycV9wKGlycSkgfHwKKwkJICAgIChhZGVv c192aXJ0dWFsX2lycV9wKF9pcnEpICYmCisJCSAgICAgIXRlc3RfYml0KF9pcnEgLSBJUElQ RV9WSVJRX0JBU0UsJl9fYWRlb3NfdmlydHVhbF9pcnFfbWFwKSkgfHwKKwkJICAgIGN0bGJp dHMgIT0gKGFkcC0+aXJxc1tfaXJxXS5jb250cm9sICYgKElQSVBFX0hBTkRMRV9NQVNLfElQ SVBFX1BBU1NfTUFTS3xJUElQRV9TVElDS1lfTUFTSykpKQorCQkgICAgYnJlYWs7CisJCX0K KworCSAgICBpZiAoX2lycSA9PSBpcnEgKyAxKQorCQlwICs9IHNwcmludGYocCwiXHRpcnEl dTogIixpcnEpOworCSAgICBlbHNlCisJCXAgKz0gc3ByaW50ZihwLCJcdGlycSV1LSV1OiAi LGlycSxfaXJxIC0gMSk7CisKKwkgICAgLyogU3RhdHVzZXMgYXJlIGFzIGZvbGxvd3M6CisJ ICAgICAgIG8gImFjY2VwdGVkIiBtZWFucyBoYW5kbGVkIF9hbmRfIHBhc3NlZCBkb3duIHRo ZQorCSAgICAgICBwaXBlbGluZS4KKwkgICAgICAgbyAiZ3JhYmJlZCIgbWVhbnMgaGFuZGxl ZCwgYnV0IHRoZSBpbnRlcnJ1cHQgbWlnaHQgYmUKKwkgICAgICAgdGVybWluYXRlZCBfb3Jf IHBhc3NlZCBkb3duIHRoZSBwaXBlbGluZSBkZXBlbmRpbmcgb24KKwkgICAgICAgd2hhdCB0 aGUgZG9tYWluIGhhbmRsZXIgYXNrcyBmb3IgdG8gQWRlb3MuCisJICAgICAgIG8gInBhc3Nl ZCIgbWVhbnMgdW5oYW5kbGVkIGJ5IHRoZSBkb21haW4gYnV0IHBhc3NlZAorCSAgICAgICBk b3duIHRoZSBwaXBlbGluZS4KKwkgICAgICAgbyAiZGlzY2FyZGVkIiBtZWFucyB1bmhhbmRs ZWQgYW5kIF9ub3RfIHBhc3NlZCBkb3duIHRoZQorCSAgICAgICBwaXBlbGluZS4gVGhlIGlu dGVycnVwdCBtZXJlbHkgZGlzYXBwZWFycyBmcm9tIHRoZQorCSAgICAgICBjdXJyZW50IGRv bWFpbiBkb3duIHRvIHRoZSBlbmQgb2YgdGhlIHBpcGVsaW5lLiAqLworCisJICAgIGlmIChj dGxiaXRzICYgSVBJUEVfSEFORExFX01BU0spCisJCXsKKwkJaWYgKGN0bGJpdHMgJiBJUElQ RV9QQVNTX01BU0spCisJCSAgICBwICs9IHNwcmludGYocCwiYWNjZXB0ZWQiKTsKKwkJZWxz ZQorCQkgICAgcCArPSBzcHJpbnRmKHAsImdyYWJiZWQiKTsKKwkJfQorCSAgICBlbHNlIGlm IChjdGxiaXRzICYgSVBJUEVfUEFTU19NQVNLKQorCQlwICs9IHNwcmludGYocCwicGFzc2Vk Iik7CisJICAgIGVsc2UKKwkJcCArPSBzcHJpbnRmKHAsImRpc2NhcmRlZCIpOworCisJICAg IGlmIChjdGxiaXRzICYgSVBJUEVfU1RJQ0tZX01BU0spCisJCXAgKz0gc3ByaW50ZihwLCIs IHN0aWNreSIpOworCisJICAgIGlmIChhZGVvc192aXJ0dWFsX2lycV9wKGlycSkpCisJCXAg Kz0gc3ByaW50ZihwLCIsIHZpcnR1YWwiKTsKKworCSAgICBwICs9IHNwcmludGYocCwiXG4i KTsKKworCSAgICBpcnEgPSBfaXJxOworCSAgICB9CisgICAgfQorCisgICAgc3Bpbl91bmxv Y2soJl9fYWRlb3NfcGlwZWxvY2spOworCisgICAgbGVuID0gcCAtIHBhZ2U7CisKKyAgICBp ZiAobGVuIDw9IG9mZiArIGNvdW50KQorCSplb2YgPSAxOworCisgICAgKnN0YXJ0ID0gcGFn ZSArIG9mZjsKKworICAgIGxlbiAtPSBvZmY7CisKKyAgICBpZiAobGVuID4gY291bnQpCisJ bGVuID0gY291bnQ7CisKKyAgICBpZiAobGVuIDwgMCkKKwlsZW4gPSAwOworCisgICAgcmV0 dXJuIGxlbjsKK30KKwordm9pZCBfX2FkZW9zX2luaXRfcHJvYyAodm9pZCkgeworCisgICAg YWRlb3NfcHJvY19lbnRyeSA9IGNyZWF0ZV9wcm9jX3JlYWRfZW50cnkoImFkZW9zIiwKKwkJ CQkJICAgICAgMDQ0NCwKKwkJCQkJICAgICAgTlVMTCwKKwkJCQkJICAgICAgJl9fYWRlb3Nf cmVhZF9wcm9jLAorCQkJCQkgICAgICBOVUxMKTsKK30KKworI2VuZGlmIC8qIENPTkZJR19Q Uk9DX0ZTICovCisKK3ZvaWQgX19hZGVvc19kdW1wX3N0YXRlICh2b2lkKQorCit7CisgICAg aW50IF9jcHVpZCwgbnJfY3B1cyA9IG51bV9vbmxpbmVfY3B1cygpOworICAgIHN0cnVjdCBs aXN0X2hlYWQgKnBvczsKKyAgICB1bnNpZ25lZCBsb25nIGZsYWdzOworICAgIGFkZW9zX2Rl Y2xhcmVfY3B1aWQ7CisKKyAgICBhZGVvc19sb2NrX2NwdShmbGFncyk7CisKKyAgICBwcmlu dGsoS0VSTl9XQVJOSU5HICJBZGVvczogQ3VycmVudCBkb21haW49JXMgb24gQ1BVICMlZCBb c3RhY2tiYXNlPSVwXVxuIiwKKwkgICBhZHBfY3VycmVudC0+bmFtZSwKKwkgICBjcHVpZCwK KyNpZmRlZiBDT05GSUdfQURFT1NfVEhSRUFEUworCSAgICh2b2lkICopYWRwX2N1cnJlbnQt PmVzdGFja2Jhc2VbY3B1aWRdCisjZWxzZSAvKiAhQ09ORklHX0FERU9TX1RIUkVBRFMgKi8K KwkgICBjdXJyZW50CisjZW5kaWYgLyogQ09ORklHX0FERU9TX1RIUkVBRFMgKi8KKwkgICAp OworCisgICAgbGlzdF9mb3JfZWFjaChwb3MsJl9fYWRlb3NfcGlwZWxpbmUpIHsKKworICAg ICAgICBhZG9tYWluX3QgKmFkcCA9IGxpc3RfZW50cnkocG9zLGFkb21haW5fdCxwX2xpbmsp OworCisgICAgICAgIGZvciAoX2NwdWlkID0gMDsgX2NwdWlkIDwgbnJfY3B1czsgX2NwdWlk KyspCisgICAgICAgICAgICBwcmludGsoS0VSTl9XQVJOSU5HICIlOHNbY3B1aWQ9JWRdOiBw cmlvcml0eT0lZCwgc3RhdHVzPTB4JWx4LCBwZW5kaW5nX2hpPTB4JWx4XG4iLAorICAgICAg ICAgICAgICAgICAgIGFkcC0+bmFtZSwKKyAgICAgICAgICAgICAgICAgICBfY3B1aWQsCisg ICAgICAgICAgICAgICAgICAgYWRwLT5wcmlvcml0eSwKKyAgICAgICAgICAgICAgICAgICBh ZHAtPmNwdWRhdGFbX2NwdWlkXS5zdGF0dXMsCisgICAgICAgICAgICAgICAgICAgYWRwLT5j cHVkYXRhW19jcHVpZF0uaXJxX3BlbmRpbmdfaGkpOworICAgIH0KKworICAgIGFkZW9zX3Vu bG9ja19jcHUoZmxhZ3MpOworfQorCitFWFBPUlRfU1lNQk9MKGFkZW9zX3N1c3BlbmRfZG9t YWluKTsKK0VYUE9SVF9TWU1CT0woYWRlb3NfYWxsb2NfaXJxKTsKK0VYUE9SVF9TWU1CT0wo YWRwX2NwdV9jdXJyZW50KTsKK0VYUE9SVF9TWU1CT0woYWRwX3Jvb3QpOworRVhQT1JUX1NZ TUJPTChhZHBfcGlwZWxpbmVkKTsKK0VYUE9SVF9TWU1CT0woX19hZGVvc19oYW5kbGVfZXZl bnQpOworRVhQT1JUX1NZTUJPTChfX2FkZW9zX3Vuc3RhbGxfcm9vdCk7CitFWFBPUlRfU1lN Qk9MKF9fYWRlb3Nfc3RhbGxfcm9vdCk7CitFWFBPUlRfU1lNQk9MKF9fYWRlb3NfcmVzdG9y ZV9yb290KTsKK0VYUE9SVF9TWU1CT0woX19hZGVvc190ZXN0X2FuZF9zdGFsbF9yb290KTsK K0VYUE9SVF9TWU1CT0woX19hZGVvc190ZXN0X3Jvb3QpOworRVhQT1JUX1NZTUJPTChfX2Fk ZW9zX2R1bXBfc3RhdGUpOworRVhQT1JUX1NZTUJPTChfX2FkZW9zX3BpcGVsaW5lKTsKK0VY UE9SVF9TWU1CT0woX19hZGVvc19waXBlbG9jayk7CitFWFBPUlRfU1lNQk9MKF9fYWRlb3Nf dmlydHVhbF9pcnFfbWFwKTsKK0VYUE9SVF9TWU1CT0woX19hZGVvc19ldmVudF9tb25pdG9y cyk7CitFWFBPUlRfU1lNQk9MKGFkZW9zX3Vuc3RhbGxfcGlwZWxpbmVfZnJvbSk7CisjaWZk ZWYgQ09ORklHX0FERU9TX1BST0ZJTElORworRVhQT1JUX1NZTUJPTChfX2FkZW9zX3Byb2Zp bGVfZGF0YSk7CisjZW5kaWYgLyogQ09ORklHX0FERU9TX1BST0ZJTElORyAqLworLyogVGhl IGZvbGxvd2luZyBhcmUgY29udmVuaWVuY2UgZXhwb3J0cyB3aGljaCBhcmUgbmVlZGVkIGJ5 IHNvbWUKKyAgIEFkZW9zIGRvbWFpbnMgbG9hZGVkIGFzIGtlcm5lbCBtb2R1bGVzLiAqLwor RVhQT1JUX1NZTUJPTChkb19leGl0KTsKZGlmZiAtTnJ1IGxpbnV4LTIuNi4xMC9rZXJuZWwv ZXhpdC5jIGxpbnV4LTIuNi4xMC1hZGVvcy1wcGM2NC1kZXZlbC9rZXJuZWwvZXhpdC5jCi0t LSBsaW51eC0yLjYuMTAva2VybmVsL2V4aXQuYwkyMDA0LTEyLTI0IDIzOjM1OjI3LjAwMDAw MDAwMCArMDIwMAorKysgbGludXgtMi42LjEwLWFkZW9zLXBwYzY0LWRldmVsL2tlcm5lbC9l eGl0LmMJMjAwNS0wNS0xMiAxMzozNjo1MS4wMDAwMDAwMDAgKzAzMDAKQEAgLTgwOSw2ICs4 MDksOSBAQAogCWdyb3VwX2RlYWQgPSBhdG9taWNfZGVjX2FuZF90ZXN0KCZ0c2stPnNpZ25h bC0+bGl2ZSk7CiAJaWYgKGdyb3VwX2RlYWQpCiAJCWFjY3RfcHJvY2Vzcyhjb2RlKTsKKyNp ZmRlZiBDT05GSUdfQURFT1NfQ09SRQorCV9fYWRlb3NfZXhpdF9wcm9jZXNzKHRzayk7Cisj ZW5kaWYgLyogQ09ORklHX0FERU9TX0NPUkUgKi8KIAlfX2V4aXRfbW0odHNrKTsKIAogCWV4 aXRfc2VtKHRzayk7CmRpZmYgLU5ydSBsaW51eC0yLjYuMTAva2VybmVsL2ZvcmsuYyBsaW51 eC0yLjYuMTAtYWRlb3MtcHBjNjQtZGV2ZWwva2VybmVsL2ZvcmsuYwotLS0gbGludXgtMi42 LjEwL2tlcm5lbC9mb3JrLmMJMjAwNC0xMi0yNCAyMzozMzo1OS4wMDAwMDAwMDAgKzAyMDAK KysrIGxpbnV4LTIuNi4xMC1hZGVvcy1wcGM2NC1kZXZlbC9rZXJuZWwvZm9yay5jCTIwMDUt MDUtMTIgMTM6MzY6NTEuMDAwMDAwMDAwICswMzAwCkBAIC0xMDIxLDYgKzEwMjEsMTQgQEAK IAogCW5yX3RocmVhZHMrKzsKIAl3cml0ZV91bmxvY2tfaXJxKCZ0YXNrbGlzdF9sb2NrKTsK KyNpZmRlZiBDT05GSUdfQURFT1NfQ09SRQorCXsKKwlpbnQgazsKKworCWZvciAoayA9IDA7 IGsgPCBBREVPU19ST09UX05QVERLRVlTOyBrKyspCisJICAgIHAtPnB0ZFtrXSA9IE5VTEw7 CisJfQorI2VuZGlmIC8qIENPTkZJR19BREVPU19DT1JFICovCiAJcmV0dmFsID0gMDsKIAog Zm9ya19vdXQ6CmRpZmYgLU5ydSBsaW51eC0yLjYuMTAva2VybmVsL01ha2VmaWxlIGxpbnV4 LTIuNi4xMC1hZGVvcy1wcGM2NC1kZXZlbC9rZXJuZWwvTWFrZWZpbGUKLS0tIGxpbnV4LTIu Ni4xMC9rZXJuZWwvTWFrZWZpbGUJMjAwNC0xMi0yNCAyMzozNDoyNi4wMDAwMDAwMDAgKzAy MDAKKysrIGxpbnV4LTIuNi4xMC1hZGVvcy1wcGM2NC1kZXZlbC9rZXJuZWwvTWFrZWZpbGUJ MjAwNS0wNS0xMiAxMzozNjo1MS4wMDAwMDAwMDAgKzAzMDAKQEAgLTksNiArOSw3IEBACiAJ ICAgIHJjdXBkYXRlLm8gaW50ZXJtb2R1bGUubyBleHRhYmxlLm8gcGFyYW1zLm8gcG9zaXgt dGltZXJzLm8gXAogCSAgICBrdGhyZWFkLm8gd2FpdC5vIGtmaWZvLm8gc3lzX25pLm8KIAor b2JqLSQoQ09ORklHX0FERU9TX0NPUkUpICs9IGFkZW9zLm8KIG9iai0kKENPTkZJR19GVVRF WCkgKz0gZnV0ZXgubwogb2JqLSQoQ09ORklHX0dFTkVSSUNfSVNBX0RNQSkgKz0gZG1hLm8K IG9iai0kKENPTkZJR19TTVApICs9IGNwdS5vIHNwaW5sb2NrLm8KZGlmZiAtTnJ1IGxpbnV4 LTIuNi4xMC9rZXJuZWwvcGFuaWMuYyBsaW51eC0yLjYuMTAtYWRlb3MtcHBjNjQtZGV2ZWwv a2VybmVsL3BhbmljLmMKLS0tIGxpbnV4LTIuNi4xMC9rZXJuZWwvcGFuaWMuYwkyMDA0LTEy LTI0IDIzOjM1OjI5LjAwMDAwMDAwMCArMDIwMAorKysgbGludXgtMi42LjEwLWFkZW9zLXBw YzY0LWRldmVsL2tlcm5lbC9wYW5pYy5jCTIwMDUtMDUtMTIgMTM6MzY6NTEuMDAwMDAwMDAw ICswMzAwCkBAIC03MCw2ICs3MCw5IEBACiAJdmFfZW5kKGFyZ3MpOwogCXByaW50ayhLRVJO X0VNRVJHICJLZXJuZWwgcGFuaWMgLSBub3Qgc3luY2luZzogJXNcbiIsYnVmKTsKIAlidXN0 X3NwaW5sb2NrcygwKTsKKyNpZmRlZiBDT05GSUdfQURFT1NfQ09SRQorCV9fYWRlb3NfZHVt cF9zdGF0ZSgpOworI2VuZGlmIC8qIENPTkZJR19BREVPU19DT1JFICovCiAKICNpZmRlZiBD T05GSUdfU01QCiAJc21wX3NlbmRfc3RvcCgpOwpkaWZmIC1OcnUgbGludXgtMi42LjEwL2tl cm5lbC9wcmludGsuYyBsaW51eC0yLjYuMTAtYWRlb3MtcHBjNjQtZGV2ZWwva2VybmVsL3By aW50ay5jCi0tLSBsaW51eC0yLjYuMTAva2VybmVsL3ByaW50ay5jCTIwMDQtMTItMjQgMjM6 MzU6NDAuMDAwMDAwMDAwICswMjAwCisrKyBsaW51eC0yLjYuMTAtYWRlb3MtcHBjNjQtZGV2 ZWwva2VybmVsL3ByaW50ay5jCTIwMDUtMDUtMTIgMTM6MzY6NTEuMDAwMDAwMDAwICswMzAw CkBAIC0zNCw2ICszNCwxNyBAQAogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAorI2lm ZGVmIENPTkZJR19BREVPU19DT1JFCisjdW5kZWYgc3Bpbl9sb2NrX2lycQorI2RlZmluZQlz cGluX2xvY2tfaXJxKGxvY2spICAgICAgICAgICAgICAgICBhZGVvc19zcGluX2xvY2tfZGlz YWJsZShsb2NrKQorI3VuZGVmIHNwaW5fdW5sb2NrX2lycQorI2RlZmluZQlzcGluX3VubG9j a19pcnEobG9jaykgICAgICAgICAgICAgICBhZGVvc19zcGluX3VubG9ja19lbmFibGUobG9j aykKKyN1bmRlZiBzcGluX2xvY2tfaXJxc2F2ZQorI2RlZmluZQlzcGluX2xvY2tfaXJxc2F2 ZShsb2NrLCBmbGFncykgICAgICBhZGVvc19zcGluX2xvY2tfaXJxc2F2ZShsb2NrLGZsYWdz KQorI3VuZGVmIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUKKyNkZWZpbmUgc3Bpbl91bmxvY2tf aXJxcmVzdG9yZShsb2NrLCBmbGFncykgYWRlb3Nfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShs b2NrLGZsYWdzKQorI2VuZGlmIC8qIENPTkZJR19BREVPU19DT1JFICovCisKICNkZWZpbmUg X19MT0dfQlVGX0xFTgkoMSA8PCBDT05GSUdfTE9HX0JVRl9TSElGVCkKIAogLyogcHJpbnRr J3Mgd2l0aG91dCBhIGxvZ2xldmVsIHVzZSB0aGlzLi4gKi8KQEAgLTU1Niw2ICs1NjcsMjMg QEAKIAkJCWxvZ19sZXZlbF91bmtub3duID0gMTsKIAl9CiAKKyNpZmRlZiBDT05GSUdfQURF T1NfQ09SRQorCWlmIChhZHBfY3VycmVudCAhPSBhZHBfcm9vdCAmJiAhdGVzdF9iaXQoQURF T1NfU1BSSU5US19GTEFHLCZhZHBfY3VycmVudC0+ZmxhZ3MpKSB7CisJLyogV2hlbiBvcGVy YXRpbmcgaW4gYXN5bmNocm9ub3VzIHByaW50aygpIG1vZGUsIGVuc3VyZSB0aGUKKwkgICBj b25zb2xlIGRyaXZlcnMgYW5kIGtsb2dkIHdha2V1cCBhcmUgb25seSBydW4gYnkgTGludXgs CisJICAgZGVsZWdhdGluZyB0aGUgYWN0dWFsIG91dHB1dCB0byB0aGUgcm9vdCBkb21haW4g YnkgbWVhbiBvZgorCSAgIGEgdmlydHVhbCBJUlEga2lja2luZyBvdXIgc3luYyBoYW5kbGVy LiBJZiB0aGUgY3VycmVudAorCSAgIGRvbWFpbiBoYXMgYSBsb3dlciBwcmlvcml0eSB0aGFu IExpbnV4LCB0aGVuIHdlJ2xsIGdldAorCSAgIGltbWVkaWF0ZWx5IHByZWVtcHRlZCBieSBp dC4gSW4gc3luY2hyb25vdXMgcHJpbnRrKCkgbW9kZSwKKwkgICBpbW1lZGlhdGVseSBjYWxs IHRoZSBjb25zb2xlIGRyaXZlcnMuICovCisgCSAgICBzcGluX3VubG9ja19pcnFyZXN0b3Jl KCZsb2didWZfbG9jaywgZmxhZ3MpOworIAorIAkgICAgaWYgKCF0ZXN0X2FuZF9zZXRfYml0 KEFERU9TX1BQUklOVEtfRkxBRywmYWRwX3Jvb3QtPmZsYWdzKSkKKyAJCWFkZW9zX3RyaWdn ZXJfaXJxKF9fYWRlb3NfcHJpbnRrX3ZpcnEpOworIAorIAkgICAgZ290byBvdXQ7CisgCX0K KyNlbmRpZiAvKiBDT05GSUdfQURFT1NfQ09SRSAqLwogCWlmICghY3B1X29ubGluZShzbXBf cHJvY2Vzc29yX2lkKCkpICYmCiAJICAgIHN5c3RlbV9zdGF0ZSAhPSBTWVNURU1fUlVOTklO RykgewogCQkvKgpAQCAtNTY3LDcgKzU5NSwxMSBAQAogCQlzcGluX3VubG9ja19pcnFyZXN0 b3JlKCZsb2didWZfbG9jaywgZmxhZ3MpOwogCQlnb3RvIG91dDsKIAl9Ci0JaWYgKCFkb3du X3RyeWxvY2soJmNvbnNvbGVfc2VtKSkgeworI2lmZGVmIENPTkZJR19BREVPU19DT1JFCisg CWlmIChhZHBfY3VycmVudCAhPSBhZHBfcm9vdCB8fCAhZG93bl90cnlsb2NrKCZjb25zb2xl X3NlbSkpIHsKKyNlbHNlIC8qICFDT05GSUdfQURFT1NfQ09SRSAqLworIAlpZiAoIWRvd25f dHJ5bG9jaygmY29uc29sZV9zZW0pKSB7CisjZW5kaWYgLyogQ09ORklHX0FERU9TX0NPUkUg Ki8KIAkJY29uc29sZV9sb2NrZWQgPSAxOwogCQkvKgogCQkgKiBXZSBvd24gdGhlIGRyaXZl cnMuICBXZSBjYW4gZHJvcCB0aGUgc3BpbmxvY2sgYW5kIGxldApAQCAtNjQ3LDEzICs2Nzks NDcgQEAKIAl9CiAJY29uc29sZV9sb2NrZWQgPSAwOwogCWNvbnNvbGVfbWF5X3NjaGVkdWxl ID0gMDsKKyNpZmRlZiBDT05GSUdfQURFT1NfQ09SRQorCWlmIChhZHBfcm9vdCAhPSBhZHBf Y3VycmVudCkgeworCSAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsb2didWZfbG9jaywg ZmxhZ3MpOworCSAgICByZXR1cm47CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxv Z2J1Zl9sb2NrLCBmbGFncyk7CisJdXAoJmNvbnNvbGVfc2VtKTsKKyNlbHNlIC8qICFDT05G SUdfQURFT1NfQ09SRSAqLwogCXVwKCZjb25zb2xlX3NlbSk7CiAJc3Bpbl91bmxvY2tfaXJx cmVzdG9yZSgmbG9nYnVmX2xvY2ssIGZsYWdzKTsKKyNlbmRpZiAvKiBDT05GSUdfQURFT1Nf Q09SRSAqLwogCWlmICh3YWtlX2tsb2dkICYmICFvb3BzX2luX3Byb2dyZXNzICYmIHdhaXRx dWV1ZV9hY3RpdmUoJmxvZ193YWl0KSkKIAkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZsb2df d2FpdCk7CiB9CiBFWFBPUlRfU1lNQk9MKHJlbGVhc2VfY29uc29sZV9zZW0pOwogCisjaWZk ZWYgQ09ORklHX0FERU9TX0NPUkUKK3ZvaWQgX19hZGVvc19zeW5jX2NvbnNvbGUgKHVuc2ln bmVkIHZpcnEpIHsKKworICAgIC8qIFRoaXMgaGFuZGxlciBhbHdheXMgcnVucyBvbiBiZWhh bGYgb2YgdGhlIHJvb3QgKExpbnV4KSBkb21haW4uICovCisKKyAgICB1bnNpZ25lZCBsb25n IGZsYWdzOworCisgICAgc3Bpbl9sb2NrX2lycXNhdmUoJmxvZ2J1Zl9sb2NrLCBmbGFncyk7 CisKKyAgICAvKiBOb3QgYWJzb2x1dGVseSBhdG9taWMgd3J0IHRvIHRoZSB0cmlnZ2VyaW5n IHBvaW50LCBidXQgdGhpcyBpcworICAgICAgIGhhcm1sZXNzLiBXZSBvbmx5IHRyeSB0byBy ZWR1Y2UgdGhlIHVzZWxlc3MgdHJpZ2dlcnMgYnkgYSBjaGVhcAorICAgICAgIHRyaWNrIGhl cmUuICovCisKKyAgICBjbGVhcl9iaXQoQURFT1NfUFBSSU5US19GTEFHLCZhZHBfcm9vdC0+ ZmxhZ3MpOworCisgICAgaWYgKGNwdV9vbmxpbmUoc21wX3Byb2Nlc3Nvcl9pZCgpKSAmJiBz eXN0ZW1fc3RhdGUgPT0gU1lTVEVNX1JVTk5JTkcgJiYgIWRvd25fdHJ5bG9jaygmY29uc29s ZV9zZW0pKSB7CisgICAgICAgIGNvbnNvbGVfbG9ja2VkID0gMTsKKwlzcGluX3VubG9ja19p cnFyZXN0b3JlKCZsb2didWZfbG9jaywgZmxhZ3MpOworICAgICAgICBjb25zb2xlX21heV9z Y2hlZHVsZSA9IDA7CisJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworICAgIH0gZWxzZQorCXNw aW5fdW5sb2NrX2lycXJlc3RvcmUoJmxvZ2J1Zl9sb2NrLCBmbGFncyk7Cit9CisjZW5kaWYg LyogQ09ORklHX0FERU9TX0NPUkUgKi8KKwogLyoqIGNvbnNvbGVfY29uZGl0aW9uYWxfc2No ZWR1bGUgLSB5aWVsZCB0aGUgQ1BVIGlmIHJlcXVpcmVkCiAgKgogICogSWYgdGhlIGNvbnNv bGUgY29kZSBpcyBjdXJyZW50bHkgYWxsb3dlZCB0byBzbGVlcCwgYW5kCmRpZmYgLU5ydSBs aW51eC0yLjYuMTAva2VybmVsL3NjaGVkLmMgbGludXgtMi42LjEwLWFkZW9zLXBwYzY0LWRl dmVsL2tlcm5lbC9zY2hlZC5jCi0tLSBsaW51eC0yLjYuMTAva2VybmVsL3NjaGVkLmMJMjAw NC0xMi0yNCAyMzozNToyNC4wMDAwMDAwMDAgKzAyMDAKKysrIGxpbnV4LTIuNi4xMC1hZGVv cy1wcGM2NC1kZXZlbC9rZXJuZWwvc2NoZWQuYwkyMDA1LTA2LTAxIDE1OjIyOjA1LjAwMDAw MDAwMCArMDMwMApAQCAtMzAyLDcgKzMwMiwxNiBAQAogICogRGVmYXVsdCBjb250ZXh0LXN3 aXRjaCBsb2NraW5nOgogICovCiAjaWZuZGVmIHByZXBhcmVfYXJjaF9zd2l0Y2gKKyNpZmRl ZiBDT05GSUdfQURFT1NfQ09SRQorI2RlZmluZSBwcmVwYXJlX2FyY2hfc3dpdGNoKHJxLHBy ZXYsbmV4dCkgXAorZG8geyBcCisgICAgc3RydWN0IHsgc3RydWN0IHRhc2tfc3RydWN0ICpw cmV2LCAqbmV4dDsgfSBhcmcgPSB7IChwcmV2KSwgKG5leHQpIH07IFwKKyAgICBfX2FkZW9z X3NjaGVkdWxlX2hlYWQoJmFyZyk7IFwKKyAgICBhZGVvc19od19jbGkoKTsgXAorfSB3aGls ZSgwKQorI2Vsc2UgLyogIUNPTkZJR19BREVPU19DT1JFICovCiAjIGRlZmluZSBwcmVwYXJl X2FyY2hfc3dpdGNoKHJxLCBuZXh0KQlkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYgLyogQ09O RklHX0FERU9TX0NPUkUgKi8KICMgZGVmaW5lIGZpbmlzaF9hcmNoX3N3aXRjaChycSwgbmV4 dCkJc3Bpbl91bmxvY2tfaXJxKCYocnEpLT5sb2NrKQogIyBkZWZpbmUgdGFza19ydW5uaW5n KHJxLCBwKQkJKChycSktPmN1cnIgPT0gKHApKQogI2VuZGlmCkBAIC0xMzY3LDYgKzEzNzYs OSBAQAogCiAJaWYgKGN1cnJlbnQtPnNldF9jaGlsZF90aWQpCiAJCXB1dF91c2VyKGN1cnJl bnQtPnBpZCwgY3VycmVudC0+c2V0X2NoaWxkX3RpZCk7CisjaWZkZWYgQ09ORklHX0FERU9T X0NPUkUKKwlfX2FkZW9zX2VudGVyX3Byb2Nlc3MoKTsKKyNlbmRpZiAvKiBDT05GSUdfQURF T1NfQ09SRSAqLwogfQogCiAvKgpAQCAtMjUzNSw2ICsyNTQ3LDExIEBACiAJdW5zaWduZWQg bG9uZyBydW5fdGltZTsKIAlpbnQgY3B1LCBpZHg7CiAKKyNpZmRlZiBDT05GSUdfQURFT1Nf Q09SRQorCWlmIChhZHBfY3VycmVudCAhPSBhZHBfcm9vdCkgLyogTGV0J3MgYmUgaGVscGZ1 bCBhbmQgY29uc2VydmF0aXZlLiAqLworCSAgICByZXR1cm47CisjZW5kaWYgLyogQ09ORklH X0FERU9TX0NPUkUgKi8KKwogCS8qCiAJICogVGVzdCBpZiB3ZSBhcmUgYXRvbWljLiAgU2lu Y2UgZG9fZXhpdCgpIG5lZWRzIHRvIGNhbGwgaW50bwogCSAqIHNjaGVkdWxlKCkgYXRvbWlj YWxseSwgd2UgaWdub3JlIHRoYXQgcGF0aCBmb3Igbm93LgpAQCAtMjY4NCw5ICsyNzAxLDI1 IEBACiAJCXJxLT5jdXJyID0gbmV4dDsKIAkJKysqc3dpdGNoX2NvdW50OwogCi0JCXByZXBh cmVfYXJjaF9zd2l0Y2gocnEsIG5leHQpOworI2lmZGVmIENPTkZJR19BREVPU19DT1JFCisJ CXByZXBhcmVfYXJjaF9zd2l0Y2gocnEsIHByZXYsIG5leHQpOworI2Vsc2UgLyogIUNPTkZJ R19BREVPU19DT1JFICovCisgIAkJcHJlcGFyZV9hcmNoX3N3aXRjaChycSwgbmV4dCk7Cisj ZW5kaWYgLyogQ09ORklHX0FERU9TX0NPUkUgKi8KIAkJcHJldiA9IGNvbnRleHRfc3dpdGNo KHJxLCBwcmV2LCBuZXh0KTsKIAkJYmFycmllcigpOworI2lmZGVmIENPTkZJR19BREVPU19D T1JFCisJCWlmIChhZHBfcGlwZWxpbmVkKQorCQkgICAgeworCQkgICAgX19jbGVhcl9iaXQo SVBJUEVfU1lOQ19GTEFHLCZhZHBfcm9vdC0+Y3B1ZGF0YVt0YXNrX2NwdShjdXJyZW50KV0u c3RhdHVzKTsKKwkJICAgIGFkZW9zX2h3X3N0aSgpOworCQkgICAgfQorCisJCWlmIChfX2Fk ZW9zX3NjaGVkdWxlX3RhaWwocHJldikgPiAwIHx8IGFkcF9jdXJyZW50ICE9IGFkcF9yb290 KQorCQkgICAgLyogU29tZSBldmVudCBoYW5kbGVyIGFza2VkIGZvciBhIHRydW5jYXRlZAor CQkgICAgICAgc2NoZWR1bGluZyB0YWlsLiBKdXN0IG9iZXkuICovCisJCSAgICByZXR1cm47 CisjZW5kaWYgLyogQ09ORklHX0FERU9TX0NPUkUgKi8KIAogCQlmaW5pc2hfdGFza19zd2l0 Y2gocHJldik7CiAJfSBlbHNlCkBAIC0zMTQ4LDYgKzMxODEsMTYgQEAKIAlyZXR2YWwgPSBz ZWN1cml0eV90YXNrX3NldHNjaGVkdWxlcihwLCBwb2xpY3ksICZscCk7CiAJaWYgKHJldHZh bCkKIAkJZ290byBvdXRfdW5sb2NrOworI2lmZGVmIENPTkZJR19BREVPU19DT1JFCisJewor CXN0cnVjdCB7IHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzazsgaW50IHBvbGljeTsgc3RydWN0 IHNjaGVkX3BhcmFtICpwYXJhbTsgfSBldmRhdGEgPSB7IHAsIHBvbGljeSwgJmxwIH07CisJ aWYgKF9fYWRlb3NfcmVuaWNlX3Byb2Nlc3MoJmV2ZGF0YSkpCisJICAgIHsKKwkgICAgcmV0 dmFsID0gMDsKKwkgICAgZ290byBvdXRfdW5sb2NrOworCSAgICB9CisJfQorI2VuZGlmIC8q IENPTkZJR19BREVPU19DT1JFICovCiAJLyoKIAkgKiBUbyBiZSBhYmxlIHRvIGNoYW5nZSBw LT5wb2xpY3kgc2FmZWx5LCB0aGUgYXByb3ByaWF0ZQogCSAqIHJ1bnF1ZXVlIGxvY2sgbXVz dCBiZSBoZWxkLgpAQCAtNDY3NiwzICs0NzE5LDUxIEBACiB9CiAKICNlbmRpZiAvKiBDT05G SUdfTUFHSUNfU1lTUlEgKi8KKworI2lmZGVmIENPTkZJR19BREVPU19DT1JFCisKK3ZvaWQg X19hZGVvc19zZXRzY2hlZHVsZXJfcm9vdCAoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQg cG9saWN5LCBpbnQgcHJpbykKK3sKKwlwcmlvX2FycmF5X3QgKmFycmF5OworCXVuc2lnbmVk IGxvbmcgZmxhZ3M7CisJcnVucXVldWVfdCAqcnE7CisKKwlyZWFkX2xvY2tfaXJxKCZ0YXNr bGlzdF9sb2NrKTsKKwlycSA9IHRhc2tfcnFfbG9jayhwLCAmZmxhZ3MpOworCWFycmF5ID0g cC0+YXJyYXk7CisJaWYgKGFycmF5KQorCSAgICBkZWFjdGl2YXRlX3Rhc2socCwgdGFza19y cShwKSk7CisJX19zZXRzY2hlZHVsZXIocCwgcG9saWN5LCBwcmlvKTsKKwlpZiAoYXJyYXkp IHsKKwkJX19hY3RpdmF0ZV90YXNrKHAsIHRhc2tfcnEocCkpOworCQlyZXNjaGVkX3Rhc2so cnEtPmN1cnIpOworCX0KKwl0YXNrX3JxX3VubG9jayhycSwgJmZsYWdzKTsKKwlyZWFkX3Vu bG9ja19pcnEoJnRhc2tsaXN0X2xvY2spOworfQorCitFWFBPUlRfU1lNQk9MKF9fYWRlb3Nf c2V0c2NoZWR1bGVyX3Jvb3QpOworCit2b2lkIF9fYWRlb3NfcmVlbnRlcl9yb290IChzdHJ1 Y3QgdGFza19zdHJ1Y3QgKnByZXYsCisJCQkgICBpbnQgcG9saWN5LAorCQkJICAgaW50IHBy aW8pCit7CisgICAgCWZpbmlzaF90YXNrX3N3aXRjaChwcmV2KTsKKwlpZiAocmVhY3F1aXJl X2tlcm5lbF9sb2NrKGN1cnJlbnQpIDwgMCkKKwkgICAgOworCXByZWVtcHRfZW5hYmxlX25v X3Jlc2NoZWQoKTsKKworCWlmIChjdXJyZW50LT5wb2xpY3kgIT0gcG9saWN5IHx8IGN1cnJl bnQtPnJ0X3ByaW9yaXR5ICE9IHByaW8pCisJICAgIF9fYWRlb3Nfc2V0c2NoZWR1bGVyX3Jv b3QoY3VycmVudCxwb2xpY3kscHJpbyk7Cit9CisKK0VYUE9SVF9TWU1CT0woX19hZGVvc19y ZWVudGVyX3Jvb3QpOworCit2b2lkIF9fYWRlb3Nfc2NoZWR1bGVfYmFja19yb290IChzdHJ1 Y3QgdGFza19zdHJ1Y3QgKnByZXYpCit7CisgICAgX19hZGVvc19yZWVudGVyX3Jvb3QocHJl dixjdXJyZW50LT5wb2xpY3ksY3VycmVudC0+cnRfcHJpb3JpdHkpOworfQorCitFWFBPUlRf U1lNQk9MKF9fYWRlb3Nfc2NoZWR1bGVfYmFja19yb290KTsKKworI2VuZGlmIC8qIENPTkZJ R19BREVPU19DT1JFICovCmRpZmYgLU5ydSBsaW51eC0yLjYuMTAva2VybmVsL3NpZ25hbC5j IGxpbnV4LTIuNi4xMC1hZGVvcy1wcGM2NC1kZXZlbC9rZXJuZWwvc2lnbmFsLmMKLS0tIGxp bnV4LTIuNi4xMC9rZXJuZWwvc2lnbmFsLmMJMjAwNC0xMi0yNCAyMzozNDozMi4wMDAwMDAw MDAgKzAyMDAKKysrIGxpbnV4LTIuNi4xMC1hZGVvcy1wcGM2NC1kZXZlbC9rZXJuZWwvc2ln bmFsLmMJMjAwNS0wNS0xMiAxMzozNjo1MS4wMDAwMDAwMDAgKzAzMDAKQEAgLTU3Niw2ICs1 NzYsMTMgQEAKIAogCXNldF90c2tfdGhyZWFkX2ZsYWcodCwgVElGX1NJR1BFTkRJTkcpOwog CisjaWZkZWYgQ09ORklHX0FERU9TX0NPUkUKKwl7CisJc3RydWN0IHsgc3RydWN0IHRhc2tf c3RydWN0ICp0OyB9IGV2ZGF0YSA9IHsgdCB9OworCV9fYWRlb3Nfa2lja19wcm9jZXNzKCZl dmRhdGEpOworCX0KKyNlbmRpZiAvKiBDT05GSUdfQURFT1NfQ09SRSAqLworCiAJLyoKIAkg KiBJZiByZXN1bWUgaXMgc2V0LCB3ZSB3YW50IHRvIHdha2UgaXQgdXAgaW4gdGhlIFRBU0tf U1RPUFBFRCBjYXNlLgogCSAqIFdlIGRvbid0IGNoZWNrIGZvciBUQVNLX1NUT1BQRUQgYmVj YXVzZSB0aGVyZSBpcyBhIHJhY2Ugd2l0aCBpdApAQCAtODIzLDYgKzgzMCwxNyBAQAogCQlC VUcoKTsKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX0FERU9TX0NPUkUKKwkvKiBJZiBzb21l IGRvbWFpbiBoYW5kbGVyIGluIHRoZSBwaXBlbGluZSBkb2Vzbid0IGFzayBmb3IKKwkgICBw cm9wYWdhdGlvbiwgcmV0dXJuIHN1Y2Nlc3MgcHJldGVuZGluZyB0aGF0ICdzaWcnIHdhcwor CSAgIGRlbGl2ZXJlZC4gKi8KKwl7CisJc3RydWN0IHsgc3RydWN0IHRhc2tfc3RydWN0ICp0 YXNrOyBpbnQgc2lnOyB9IGV2ZGF0YSA9IHsgdCwgc2lnIH07CisJaWYgKF9fYWRlb3Nfc2ln bmFsX3Byb2Nlc3MoJmV2ZGF0YSkpCisJICAgIGdvdG8gb3V0OworCX0KKyNlbmRpZiAvKiBD T05GSUdfQURFT1NfQ09SRSAqLworCiAJaWYgKCgodW5zaWduZWQgbG9uZylpbmZvID4gMikg JiYgKGluZm8tPnNpX2NvZGUgPT0gU0lfVElNRVIpKQogCQkvKgogCQkgKiBTZXQgdXAgYSBy ZXR1cm4gdG8gaW5kaWNhdGUgdGhhdCB3ZSBkcm9wcGVkIHRoZSBzaWduYWwuCmRpZmYgLU5y dSBsaW51eC0yLjYuMTAva2VybmVsL3N5c2N0bC5jIGxpbnV4LTIuNi4xMC1hZGVvcy1wcGM2 NC1kZXZlbC9rZXJuZWwvc3lzY3RsLmMKLS0tIGxpbnV4LTIuNi4xMC9rZXJuZWwvc3lzY3Rs LmMJMjAwNC0xMi0yNCAyMzozMzo1OS4wMDAwMDAwMDAgKzAyMDAKKysrIGxpbnV4LTIuNi4x MC1hZGVvcy1wcGM2NC1kZXZlbC9rZXJuZWwvc3lzY3RsLmMJMjAwNS0wNS0xMiAxMzozNjo1 MS4wMDAwMDAwMDAgKzAzMDAKQEAgLTk0Niw2ICs5NDYsOSBAQAogI2lmZGVmIENPTkZJR19Q Uk9DX0ZTCiAJcmVnaXN0ZXJfcHJvY190YWJsZShyb290X3RhYmxlLCBwcm9jX3N5c19yb290 KTsKIAlpbml0X2lycV9wcm9jKCk7CisjaWZkZWYgQ09ORklHX0FERU9TX0NPUkUKKwlfX2Fk ZW9zX2luaXRfcHJvYygpOworI2VuZGlmIC8qIENPTkZJR19BREVPU19DT1JFICovCiAjZW5k aWYKIH0KIApkaWZmIC1OcnUgbGludXgtMi42LjEwL01ha2VmaWxlIGxpbnV4LTIuNi4xMC1h ZGVvcy1wcGM2NC1kZXZlbC9NYWtlZmlsZQotLS0gbGludXgtMi42LjEwL01ha2VmaWxlCTIw MDQtMTItMjQgMjM6MzU6MDEuMDAwMDAwMDAwICswMjAwCisrKyBsaW51eC0yLjYuMTAtYWRl b3MtcHBjNjQtZGV2ZWwvTWFrZWZpbGUJMjAwNS0wNS0xMiAxMzo1MDoyNC4wMDAwMDAwMDAg KzAzMDAKQEAgLTEsOCArMSw4IEBACiBWRVJTSU9OID0gMgogUEFUQ0hMRVZFTCA9IDYKIFNV QkxFVkVMID0gMTAKLUVYVFJBVkVSU0lPTiA9Ci1OQU1FPVdvb3p5IE51bWJhdAorRVhUUkFW RVJTSU9OID0gLWFkZW9zLXBwYzY0CitOQU1FPVNsZWVwaW5nIEJlYXV0eQogCiAjICpET0NV TUVOVEFUSU9OKgogIyBUbyBzZWUgYSBsaXN0IG9mIHR5cGljYWwgdGFyZ2V0cyBleGVjdXRl ICJtYWtlIGhlbHAiCkBAIC01NTgsNiArNTU4LDggQEAKIGlmZXEgKCQoS0JVSUxEX0VYVE1P RCksKQogY29yZS15CQkrPSBrZXJuZWwvIG1tLyBmcy8gaXBjLyBzZWN1cml0eS8gY3J5cHRv LwogCitjb3JlLSQoQ09ORklHX0FERU9TKSArPSBhZGVvcy8KKwogdm1saW51eC1kaXJzCTo9 ICQocGF0c3Vic3QgJS8sJSwkKGZpbHRlciAlLywgJChpbml0LXkpICQoaW5pdC1tKSBcCiAJ CSAgICAgJChjb3JlLXkpICQoY29yZS1tKSAkKGRyaXZlcnMteSkgJChkcml2ZXJzLW0pIFwK IAkJICAgICAkKG5ldC15KSAkKG5ldC1tKSAkKGxpYnMteSkgJChsaWJzLW0pKSkK --------------020304010001040304030207--