LyoKICogIGFybWJvb3QgLSBTdGFydHVwIENvZGUgZm9yIEFSTTcyMCBDUFUtY29yZQogKgogKiAgQ29weXJpZ2h0IChjKSAyMDAxCU1hcml1cyBHcvZnZXIgPG1hZ0BzeXNnby5kZT4KICogIENvcHlyaWdodCAoYykgMjAwMglBbGV4IFr8cGtlIDxhenVAc3lzZ28uZGU+CiAqCiAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCiAqIHByb2plY3QuCiAqCiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCSBTZWUgdGhlCiAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCiAqIE1BIDAyMTExLTEzMDcgVVNBCiAqLwoKCiNpbmNsdWRlIDxjb25maWcuaD4KI2luY2x1ZGUgPHZlcnNpb24uaD4KI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgoKLyoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICoKICogSnVtcCB2ZWN0b3IgdGFibGUgYXMgaW4gdGFibGUgMy4xIGluIFsxXQogKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKi8KCgouZ2xvYmwgX3N0YXJ0Cl9zdGFydDogYglyZXNldAoJbGRyCXBjLCBfdW5kZWZpbmVkX2luc3RydWN0aW9uCglsZHIJcGMsIF9zb2Z0d2FyZV9pbnRlcnJ1cHQKCWxkcglwYywgX3ByZWZldGNoX2Fib3J0CglsZHIJcGMsIF9kYXRhX2Fib3J0CiNpZmRlZiBDT05GSUdfTFBDMjI5MgoJLndvcmQJMHhCNDQwNUY3NiAvKiAyJ3MgY29tcGxlbWVudCBvZiB0aGUgY2hlY2tzdW0gb2YgdGhlIHZlY3RvcnMgKi8KI2Vsc2UKCWxkcglwYywgX25vdF91c2VkCiNlbmRpZgoJbGRyCXBjLCBfaXJxCglsZHIJcGMsIF9maXEKCl91bmRlZmluZWRfaW5zdHJ1Y3Rpb246IC53b3JkIHVuZGVmaW5lZF9pbnN0cnVjdGlvbgpfc29mdHdhcmVfaW50ZXJydXB0Ogkud29yZCBzb2Z0d2FyZV9pbnRlcnJ1cHQKX3ByZWZldGNoX2Fib3J0Ogkud29yZCBwcmVmZXRjaF9hYm9ydApfZGF0YV9hYm9ydDoJCS53b3JkIGRhdGFfYWJvcnQKX25vdF91c2VkOgkJLndvcmQgbm90X3VzZWQKX2lycToJCQkud29yZCBpcnEKX2ZpcToJCQkud29yZCBmaXEKCgkuYmFsaWdubCAxNiwweGRlYWRiZWVmCgoKLyoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICoKICogU3RhcnR1cCBDb2RlIChyZXNldCB2ZWN0b3IpCiAqCiAqIGRvIGltcG9ydGFudCBpbml0IG9ubHkgaWYgd2UgZG9uJ3Qgc3RhcnQgZnJvbSBSQU0hCiAqIHJlbG9jYXRlIGFybWJvb3QgdG8gcmFtCiAqIHNldHVwIHN0YWNrCiAqIGp1bXAgdG8gc2Vjb25kIHN0YWdlCiAqCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqLwoKX1RFWFRfQkFTRToKCS53b3JkCVRFWFRfQkFTRQoKLmdsb2JsIF9hcm1ib290X3N0YXJ0Cl9hcm1ib290X3N0YXJ0OgoJLndvcmQgX3N0YXJ0CgovKgogKiBUaGVzZSBhcmUgZGVmaW5lZCBpbiB0aGUgYm9hcmQtc3BlY2lmaWMgbGlua2VyIHNjcmlwdC4KICovCi5nbG9ibCBfYnNzX3N0YXJ0Cl9ic3Nfc3RhcnQ6Cgkud29yZCBfX2Jzc19zdGFydAoKLmdsb2JsIF9ic3NfZW5kCl9ic3NfZW5kOgoJLndvcmQgX2VuZAoKI2lmZGVmIENPTkZJR19VU0VfSVJRCi8qIElSUSBzdGFjayBtZW1vcnkgKGNhbGN1bGF0ZWQgYXQgcnVuLXRpbWUpICovCi5nbG9ibCBJUlFfU1RBQ0tfU1RBUlQKSVJRX1NUQUNLX1NUQVJUOgoJLndvcmQJMHgwYmFkYzBkZQoKLyogSVJRIHN0YWNrIG1lbW9yeSAoY2FsY3VsYXRlZCBhdCBydW4tdGltZSkgKi8KLmdsb2JsIEZJUV9TVEFDS19TVEFSVApGSVFfU1RBQ0tfU1RBUlQ6Cgkud29yZCAweDBiYWRjMGRlCiNlbmRpZgoKCi8qCiAqIHRoZSBhY3R1YWwgcmVzZXQgY29kZQogKi8KCnJlc2V0OgoJLyoKCSAqIHNldCB0aGUgY3B1IHRvIFNWQzMyIG1vZGUKCSAqLwoJbXJzCXIwLGNwc3IKCWJpYwlyMCxyMCwjMHgxZgoJb3JyCXIwLHIwLCMweDEzCgltc3IJY3BzcixyMAoKCS8qCgkgKiB3ZSBkbyBzeXMtY3JpdGljYWwgaW5pdHMgb25seSBhdCByZWJvb3QsCgkgKiBub3Qgd2hlbiBib290aW5nIGZyb20gcmFtIQoJICovCiNpZm5kZWYgQ09ORklHX1NLSVBfTE9XTEVWRUxfSU5JVAoJYmwJY3B1X2luaXRfY3JpdAojZW5kaWYKCiNpZmRlZiBDT05GSUdfTFBDMjI5MgoJYmwJbG93bGV2ZWxfaW5pdAojZW5kaWYKCiNpZm5kZWYgQ09ORklHX1NLSVBfUkVMT0NBVEVfVUJPT1QKcmVsb2NhdGU6CQkJCS8qIHJlbG9jYXRlIFUtQm9vdCB0byBSQU0JICAgICovCglhZHIJcjAsIF9zdGFydAkJLyogcjAgPC0gY3VycmVudCBwb3NpdGlvbiBvZiBjb2RlICAgKi8KCWxkcglyMSwgX1RFWFRfQkFTRQkJLyogdGVzdCBpZiB3ZSBydW4gZnJvbSBmbGFzaCBvciBSQU0gKi8KCWNtcAlyMCwgcjEJCQkvKiBkb24ndCByZWxvYyBkdXJpbmcgZGVidWcJICAgICovCgliZXEJc3RhY2tfc2V0dXAKCiNpZiBURVhUX0JBU0UKI2lmbmRlZiBDT05GSUdfTFBDMjI5MiAvKiBhbHJlYWR5IGRvbmUgaW4gbG93bGV2ZWxfaW5pdCAqLwoJbGRyCXIyLCA9MHgwCQkvKiBSZWxvY2F0ZSB0aGUgZXhjZXB0aW9uIHZlY3RvcnMgICAqLwoJY21wCXIxLCByMgkJCS8qIGFuZCBhc3NvY2lhdGVkIGRhdGEgdG8gYWRkcmVzcyAgICovCglsZG1uZWlhIHIwISwge3IzLXIxMH0JCS8qIDB4MC4gRG8gbm90aGluZyBpZiBURVhUX0JBU0UgaXMgICovCglzdG1uZWlhIHIyISwge3IzLXIxMH0JCS8qIDB4MC4gQ29weSB0aGUgZmlyc3QgMTUgd29yZHMuICAgICovCglsZG1uZWlhIHIwLCB7cjMtcjl9CglzdG1uZWlhIHIyLCB7cjMtcjl9CglhZHJuZQlyMCwgX3N0YXJ0CQkvKiByZXN0b3JlIHIwCQkJICAgICovCiNlbmRpZgkvKiAhQ09ORklHX0xQQzIyOTIgKi8KI2VuZGlmCgoJbGRyCXIyLCBfYXJtYm9vdF9zdGFydAoJbGRyCXIzLCBfYnNzX3N0YXJ0CglzdWIJcjIsIHIzLCByMgkJLyogcjIgPC0gc2l6ZSBvZiBhcm1ib290CSAgICAqLwoJYWRkCXIyLCByMCwgcjIJCS8qIHIyIDwtIHNvdXJjZSBlbmQgYWRkcmVzcwkgICAgKi8KCmNvcHlfbG9vcDoKCWxkbWlhCXIwISwge3IzLXIxMH0JCS8qIGNvcHkgZnJvbSBzb3VyY2UgYWRkcmVzcyBbcjBdICAgICovCglzdG1pYQlyMSEsIHtyMy1yMTB9CQkvKiBjb3B5IHRvICAgdGFyZ2V0IGFkZHJlc3MgW3IxXSAgICAqLwoJY21wCXIwLCByMgkJCS8qIHVudGlsIHNvdXJjZSBlbmQgYWRkcmVlZSBbcjJdICAgICovCglibGUJY29weV9sb29wCgojZW5kaWYJLyogQ09ORklHX1NLSVBfUkVMT0NBVEVfVUJPT1QgKi8KCgkvKiBTZXQgdXAgdGhlIHN0YWNrCQkJCQkJICAgICovCnN0YWNrX3NldHVwOgoJbGRyCXIwLCBfVEVYVF9CQVNFCQkvKiB1cHBlciAxMjggS2lCOiByZWxvY2F0ZWQgdWJvb3QgICAqLwoJc3ViCXIwLCByMCwgI0NPTkZJR19TWVNfTUFMTE9DX0xFTiAvKiBtYWxsb2MgYXJlYQkJCSAgICAqLwoJc3ViCXIwLCByMCwgI0NPTkZJR19TWVNfR0JMX0RBVEFfU0laRSAvKiBiZGluZm8JCQkgICAgKi8KI2lmZGVmIENPTkZJR19VU0VfSVJRCglzdWIJcjAsIHIwLCAjKENPTkZJR19TVEFDS1NJWkVfSVJRK0NPTkZJR19TVEFDS1NJWkVfRklRKQojZW5kaWYKCXN1YglzcCwgcjAsICMxMgkJLyogbGVhdmUgMyB3b3JkcyBmb3IgYWJvcnQtc3RhY2sgICAgKi8KCmNsZWFyX2JzczoKCWxkcglyMCwgX2Jzc19zdGFydAkJLyogZmluZCBzdGFydCBvZiBic3Mgc2VnbWVudAkgICAgKi8KCWxkcglyMSwgX2Jzc19lbmQJCS8qIHN0b3AgaGVyZQkJCSAgICAqLwoJbW92CXIyLCAjMHgwMDAwMDAwMAkJLyogY2xlYXIJCQkgICAgKi8KCmNsYnNzX2w6c3RyCXIyLCBbcjBdCQkvKiBjbGVhciBsb29wLi4uCQkgICAgKi8KCWFkZAlyMCwgcjAsICM0CgljbXAJcjAsIHIxCglibGUJY2xic3NfbAoKCWxkcglwYywgX3N0YXJ0X2FybWJvb3QKCl9zdGFydF9hcm1ib290OiAud29yZCBzdGFydF9hcm1ib290CgovKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKgogKiBDUFVfaW5pdF9jcml0aWNhbCByZWdpc3RlcnMKICoKICogc2V0dXAgaW1wb3J0YW50IHJlZ2lzdGVycwogKiBzZXR1cCBtZW1vcnkgdGltaW5nCiAqCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqLwoKI2lmIGRlZmluZWQoQ09ORklHX0lNUEE3KSB8fCBkZWZpbmVkKENPTkZJR19FUDczMTIpIHx8IGRlZmluZWQoQ09ORklHX0FSTUFESUxMTykKCi8qIEludGVydXB0LUNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzZXMgKi8KSU5UTVIxOgkJLndvcmQJMHg4MDAwMDI4MCBAIDMyIGJpdCBzaXplCklOVE1SMjoJCS53b3JkCTB4ODAwMDEyODAgQCAxNiBiaXQgc2l6ZQpJTlRNUjM6CQkud29yZAkweDgwMDAyMjgwIEAgIDggYml0IHNpemUKCi8qIFNZU0NPTnMgKi8KU1lTQ09OMToJLndvcmQJMHg4MDAwMDEwMApTWVNDT04yOgkud29yZAkweDgwMDAxMTAwClNZU0NPTjM6CS53b3JkCTB4ODAwMDIyMDAKCiNkZWZpbmUgQ0xLQ1RMCSAgICAgICAweDYgIC8qIG1hc2sgKi8KI2RlZmluZSBDTEtDVExfMTggICAgICAweDAgIC8qIDE4LjQzMiBNSHogKi8KI2RlZmluZSBDTEtDVExfMzYgICAgICAweDIgIC8qIDM2Ljg2NCBNSHogKi8KI2RlZmluZSBDTEtDVExfNDkgICAgICAweDQgIC8qIDQ5LjE1MiBNSHogKi8KI2RlZmluZSBDTEtDVExfNzMgICAgICAweDYgIC8qIDczLjcyOCBNSHogKi8KCiNlbGlmIGRlZmluZWQoQ09ORklHX0xQQzIyOTIpClBMTENGR19BRFI6CS53b3JkCVBMTENGRwpQTExGRUVEX0FEUjoJLndvcmQJUExMRkVFRApQTExDT05fQURSOgkud29yZAlQTExDT04KUExMU1RBVF9BRFI6CS53b3JkCVBMTFNUQVQKVlBCRElWX0FEUjoJLndvcmQJVlBCRElWCk1FTU1BUF9BRFI6CS53b3JkCU1FTU1BUAoKI2VuZGlmCgpjcHVfaW5pdF9jcml0OgojaWYgZGVmaW5lZChDT05GSUdfSU1QQTcpIHx8IGRlZmluZWQoQ09ORklHX0VQNzMxMikgfHwgZGVmaW5lZChDT05GSUdfQVJNQURJTExPKQoKCS8qCgkgKiBtYXNrIGFsbCBJUlFzIGJ5IGNsZWFyaW5nIGFsbCBiaXRzIGluIHRoZSBJTlRNUnMKCSAqLwoJbW92CXIxLCAjMHgwMAoJbGRyCXIwLCBJTlRNUjEKCXN0cglyMSwgW3IwXQoJbGRyCXIwLCBJTlRNUjIKCXN0cglyMSwgW3IwXQoJbGRyCXIwLCBJTlRNUjMKCXN0cglyMSwgW3IwXQoKCS8qCgkgKiBmbHVzaCB2NCBJL0QgY2FjaGVzCgkgKi8KCW1vdglyMCwgIzAKCW1jcglwMTUsIDAsIHIwLCBjNywgYzcsIDAJLyogZmx1c2ggdjMvdjQgY2FjaGUgKi8KCW1jcglwMTUsIDAsIHIwLCBjOCwgYzcsIDAJLyogZmx1c2ggdjQgVExCICovCgoJLyoKCSAqIGRpc2FibGUgTU1VIHN0dWZmIGFuZCBjYWNoZXMKCSAqLwoJbXJjCXAxNSwwLHIwLGMxLGMwCgliaWMJcjAsIHIwLCAjMHgwMDAwMjMwMAlAIGNsZWFyIGJpdHMgMTMsIDk6OCAoLS1WLSAtLVJTKQoJYmljCXIwLCByMCwgIzB4MDAwMDAwOGYJQCBjbGVhciBiaXRzIDcsIDM6MCAoQi0tLSBXQ0FNKQoJb3JyCXIwLCByMCwgIzB4MDAwMDAwMDIJQCBzZXQgYml0IDIgKEEpIEFsaWduCgltY3IJcDE1LDAscjAsYzEsYzAKI2VsaWYgZGVmaW5lZChDT05GSUdfTkVUQVJNKQoJLyoKCSAqIHByaW9yIHRvIHNvZnR3YXJlIHJlc2V0IDogbmVlZCB0byBzZXQgcGluIFBPUlRDNCB0byBiZSAqSFJFU0VUCgkgKi8KCWxkcglyMCwgPU5FVEFSTV9HRU5fTU9EVUxFX0JBU0UKCWxkcglyMSwgPShORVRBUk1fR0VOX1BPUlRfTU9ERSgweDEwKSB8IFwKCQkJTkVUQVJNX0dFTl9QT1JUX0RJUigweDEwKSkKCXN0cglyMSwgW3IwLCAjK05FVEFSTV9HRU5fUE9SVENdCgkvKgoJICogc29mdHdhcmUgcmVzZXQgOiBzZWUgSFcgUmVmLiBHdWlkZSA4LjIuNCA6IFNvZnR3YXJlIFNlcnZpY2UgcmVnaXN0ZXIKCSAqCQkgICAgZm9yIGFuIGV4cGxhbmF0aW9uIG9mIHRoaXMgcHJvY2VzcwoJICovCglsZHIJcjAsID1ORVRBUk1fR0VOX01PRFVMRV9CQVNFCglsZHIJcjEsID1ORVRBUk1fR0VOX1NXX1NWQ19SRVNFVEEKCXN0cglyMSwgW3IwLCAjK05FVEFSTV9HRU5fU09GVFdBUkVfU0VSVklDRV0KCWxkcglyMSwgPU5FVEFSTV9HRU5fU1dfU1ZDX1JFU0VUQgoJc3RyCXIxLCBbcjAsICMrTkVUQVJNX0dFTl9TT0ZUV0FSRV9TRVJWSUNFXQoJbGRyCXIxLCA9TkVUQVJNX0dFTl9TV19TVkNfUkVTRVRBCglzdHIJcjEsIFtyMCwgIytORVRBUk1fR0VOX1NPRlRXQVJFX1NFUlZJQ0VdCglsZHIJcjEsID1ORVRBUk1fR0VOX1NXX1NWQ19SRVNFVEIKCXN0cglyMSwgW3IwLCAjK05FVEFSTV9HRU5fU09GVFdBUkVfU0VSVklDRV0KCS8qCgkgKiBzZXR1cCBQTEwgYW5kIFN5c3RlbSBDb25maWcKCSAqLwoJbGRyCXIwLCA9TkVUQVJNX0dFTl9NT0RVTEVfQkFTRQoKCWxkcglyMSwgPSgJTkVUQVJNX0dFTl9TWVNfQ0ZHX0xFTkRJQU4gfCBcCgkJCU5FVEFSTV9HRU5fU1lTX0NGR19CVVNGVUxMIHwgXAoJCQlORVRBUk1fR0VOX1NZU19DRkdfVVNFUl9FTiB8IFwKCQkJTkVUQVJNX0dFTl9TWVNfQ0ZHX0FMSUdOX0FCT1JUIHwgXAoJCQlORVRBUk1fR0VOX1NZU19DRkdfQlVTQVJCX0lOVCB8IFwKCQkJTkVUQVJNX0dFTl9TWVNfQ0ZHX0JVU01PTl9FTiApCgoJc3RyCXIxLCBbcjAsICMrTkVUQVJNX0dFTl9TWVNURU1fQ09OVFJPTF0KCiNpZm5kZWYgQ09ORklHX05FVEFSTV9QTExfQllQQVNTCglsZHIJcjEsID0oCU5FVEFSTV9HRU5fUExMX0NUTF9QTExDTlQoTkVUQVJNX1BMTF9DT1VOVF9WQUwpIHwgXAoJCQlORVRBUk1fR0VOX1BMTF9DVExfUE9MVFNUX0RFRiB8IFwKCQkJTkVUQVJNX0dFTl9QTExfQ1RMX0lORElWKDEpIHwgXAoJCQlORVRBUk1fR0VOX1BMTF9DVExfSUNQX0RFRiB8IFwKCQkJTkVUQVJNX0dFTl9QTExfQ1RMX09VVERJVigyKSApCglzdHIJcjEsIFtyMCwgIytORVRBUk1fR0VOX1BMTF9DT05UUk9MXQojZW5kaWYKCgkvKgoJICogbWFzayBhbGwgSVJRcyBieSBjbGVhcmluZyBhbGwgYml0cyBpbiB0aGUgSU5UTVJzCgkgKi8KCW1vdglyMSwgIzAKCWxkcglyMCwgPU5FVEFSTV9HRU5fTU9EVUxFX0JBU0UKCXN0cglyMSwgW3IwLCAjK05FVEFSTV9HRU5fSU5UUl9FTkFCTEVdCgojZWxpZiBkZWZpbmVkKENPTkZJR19TM0M0NTEwQikKCgkvKgoJICogTWFzayBvZmYgYWxsIElSUSBzb3VyY2VzCgkgKi8KCWxkcglyMSwgPVJFR19JTlRNQVNLCglsZHIJcjAsID0weDNGRkZGRgoJc3RyCXIwLCBbcjFdCgoJLyoKCSAqIERpc2FibGUgQ2FjaGUKCSAqLwoJbGRyIHIwLCA9UkVHX1NZU0NGRwoJbGRyIHIxLCA9MHg4M2ZmZmZhMAkvKiBjYWNoZS1kaXNhYmxlZCAgKi8KCXN0ciByMSwgW3IwXQoKI2VsaWYgZGVmaW5lZChDT05GSUdfSU5URUdSQVRPUikgJiYgZGVmaW5lZChDT05GSUdfQVJDSF9JTlRFR1JBVE9SKQoJLyogTm8gc3BlY2lmaWMgaW5pdGlhbGlzYXRpb24gZm9yIEludGVncmF0b3JBUC9DTTcyMFQgYXMgeWV0ICovCiNlbGlmIGRlZmluZWQoQ09ORklHX0xQQzIyOTIpCgkvKiBTZXQtdXAgUExMICovCgltb3YJcjMsICMweEFBCgltb3YJcjQsICMweDU1CgkvKiBGaXJzdCBkaXNjb25uZWN0IGFuZCBkaXNhYmxlIHRoZSBQTEwgKi8KCWxkcglyMCwgUExMQ09OX0FEUgoJbW92CXIxLCAjMHgwMAoJc3RyCXIxLCBbcjBdCglsZHIJcjAsIFBMTEZFRURfQURSIC8qIHN0YXJ0IGZlZWQgc2VxdWVuY2UgKi8KCXN0cglyMywgW3IwXQoJc3RyCXI0LCBbcjBdCS8qIGZlZWQgc2VxdWVuY2UgZG9uZSAqLwoJLyogU2V0IG5ldyBNIGFuZCBQIHZhbHVlcyAqLwoJbGRyCXIwLCBQTExDRkdfQURSCgltb3YJcjEsICMweDIzCS8qIE09NCBhbmQgUD0yICovCglzdHIJcjEsIFtyMF0KCWxkcglyMCwgUExMRkVFRF9BRFIgLyogc3RhcnQgZmVlZCBzZXF1ZW5jZSAqLwoJc3RyCXIzLCBbcjBdCglzdHIJcjQsIFtyMF0JLyogZmVlZCBzZXF1ZW5jZSBkb25lICovCgkvKiBUaGVuIGVuYWJsZSB0aGUgUExMICovCglsZHIJcjAsIFBMTENPTl9BRFIKCW1vdglyMSwgIzB4MDEJLyogUExMIGVuYWJsZSBiaXQgKi8KCXN0cglyMSwgW3IwXQoJbGRyCXIwLCBQTExGRUVEX0FEUiAvKiBzdGFydCBmZWVkIHNlcXVlbmNlICovCglzdHIJcjMsIFtyMF0KCXN0cglyNCwgW3IwXQkvKiBmZWVkIHNlcXVlbmNlIGRvbmUgKi8KCS8qIFdhaXQgZm9yIHRoZSBsb2NrICovCglsZHIJcjAsIFBMTFNUQVRfQURSCgltb3YJcjEsICMweDQwMAkvKiBsb2NrIGJpdCAqLwpsb2NrX2xvb3A6CglsZHIJcjIsIFtyMF0KCWFuZAlyMiwgcjEsIHIyCgljbXAJcjIsICMwCgliZXEJbG9ja19sb29wCgkvKiBBbmQgZmluYWxseSBjb25uZWN0IHRoZSBQTEwgKi8KCWxkcglyMCwgUExMQ09OX0FEUgoJbW92CXIxLCAjMHgwMwkvKiBQTEwgZW5hYmxlIGJpdCBhbmQgY29ubmVjdCBiaXQgKi8KCXN0cglyMSwgW3IwXQoJbGRyCXIwLCBQTExGRUVEX0FEUiAvKiBzdGFydCBmZWVkIHNlcXVlbmNlICovCglzdHIJcjMsIFtyMF0KCXN0cglyNCwgW3IwXQkvKiBmZWVkIHNlcXVlbmNlIGRvbmUgKi8KCS8qIFNldC11cCBWUEJESVYgcmVnaXN0ZXIgKi8KCWxkcglyMCwgVlBCRElWX0FEUgoJbW92CXIxLCAjMHgwMQkvKiBWUEIgY2xvY2sgaXMgc2FtZSBhcyBwcm9jZXNzIGNsb2NrICovCglzdHIJcjEsIFtyMF0KI2Vsc2UKI2Vycm9yIE5vIGNwdV9pbml0X2NyaXQoKSBkZWZpbmVkIGZvciBjdXJyZW50IENQVSB0eXBlCiNlbmRpZgoKI2lmZGVmIENPTkZJR19BUk03X1JFVkQKCS8qIHNldCBjbG9jayBzcGVlZCAqLwoJLyogISEhIHdlIHJ1biBAIDM2IE1IeiBkdWUgdG8gYSBoYXJkd2FyZSBmbGF3IGluIFJldi4gRCBwcm9jZXNzb3JzICovCgkvKiAhISEgbm90IGRvaW5nIERSQU0gcmVmcmVzaCBwcm9wZXJseSEgKi8KCWxkcglyMCwgU1lTQ09OMwoJbGRyCXIxLCBbcjBdCgliaWMJcjEsIHIxLCAjQ0xLQ1RMCglvcnIJcjEsIHIxLCAjQ0xLQ1RMXzM2CglzdHIJcjEsIFtyMF0KI2VuZGlmCgojaWZuZGVmIENPTkZJR19MUEMyMjkyCgltb3YJaXAsIGxyCgkvKgoJICogYmVmb3JlIHJlbG9jYXRpbmcsIHdlIGhhdmUgdG8gc2V0dXAgUkFNIHRpbWluZwoJICogYmVjYXVzZSBtZW1vcnkgdGltaW5nIGlzIGJvYXJkLWRlcGVuZGVudCwgeW91IHdpbGwKCSAqIGZpbmQgYSBsb3dsZXZlbF9pbml0LlMgaW4geW91ciBib2FyZCBkaXJlY3RvcnkuCgkgKi8KCWJsCWxvd2xldmVsX2luaXQKCW1vdglsciwgaXAKI2VuZGlmCgoJbW92CXBjLCBscgoKCi8qCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqCiAqIEludGVycnVwdCBoYW5kbGluZwogKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKi8KCkAKQCBJUlEgc3RhY2sgZnJhbWUuCkAKI2RlZmluZSBTX0ZSQU1FX1NJWkUJNzIKCiNkZWZpbmUgU19PTERfUjAJNjgKI2RlZmluZSBTX1BTUgkJNjQKI2RlZmluZSBTX1BDCQk2MAojZGVmaW5lIFNfTFIJCTU2CiNkZWZpbmUgU19TUAkJNTIKCiNkZWZpbmUgU19JUAkJNDgKI2RlZmluZSBTX0ZQCQk0NAojZGVmaW5lIFNfUjEwCQk0MAojZGVmaW5lIFNfUjkJCTM2CiNkZWZpbmUgU19SOAkJMzIKI2RlZmluZSBTX1I3CQkyOAojZGVmaW5lIFNfUjYJCTI0CiNkZWZpbmUgU19SNQkJMjAKI2RlZmluZSBTX1I0CQkxNgojZGVmaW5lIFNfUjMJCTEyCiNkZWZpbmUgU19SMgkJOAojZGVmaW5lIFNfUjEJCTQKI2RlZmluZSBTX1IwCQkwCgojZGVmaW5lIE1PREVfU1ZDIDB4MTMKI2RlZmluZSBJX0JJVAkgMHg4MAoKLyoKICogdXNlIGJhZF9zYXZlX3VzZXJfcmVncyBmb3IgYWJvcnQvcHJlZmV0Y2gvdW5kZWYvc3dpIC4uLgogKiB1c2UgaXJxX3NhdmVfdXNlcl9yZWdzIC8gaXJxX3Jlc3RvcmVfdXNlcl9yZWdzIGZvciBJUlEvRklRIGhhbmRsaW5nCiAqLwoKCS5tYWNybwliYWRfc2F2ZV91c2VyX3JlZ3MKCXN1YglzcCwgc3AsICNTX0ZSQU1FX1NJWkUKCXN0bWlhCXNwLCB7cjAgLSByMTJ9CQkJQCBDYWxsaW5nIHIwLXIxMgoJYWRkCXI4LCBzcCwgI1NfUEMKCglsZHIJcjIsIF9hcm1ib290X3N0YXJ0CglzdWIJcjIsIHIyLCAjKENPTkZJR19TVEFDS1NJWkUrQ09ORklHX1NZU19NQUxMT0NfTEVOKQoJc3ViCXIyLCByMiwgIyhDT05GSUdfU1lTX0dCTF9EQVRBX1NJWkUrOCkJQCBzZXQgYmFzZSAyIHdvcmRzIGludG8gYWJvcnQgc3RhY2sKCWxkbWlhCXIyLCB7cjIgLSByNH0JCQlAIGdldCBwYywgY3Bzciwgb2xkX3IwCglhZGQJcjAsIHNwLCAjU19GUkFNRV9TSVpFCQlAIHJlc3RvcmUgc3BfU1ZDCgoJYWRkCXI1LCBzcCwgI1NfU1AKCW1vdglyMSwgbHIKCXN0bWlhCXI1LCB7cjAgLSByNH0JCQlAIHNhdmUgc3BfU1ZDLCBscl9TVkMsIHBjLCBjcHNyLCBvbGRfcgoJbW92CXIwLCBzcAoJLmVuZG0KCgkubWFjcm8JaXJxX3NhdmVfdXNlcl9yZWdzCglzdWIJc3AsIHNwLCAjU19GUkFNRV9TSVpFCglzdG1pYQlzcCwge3IwIC0gcjEyfQkJCUAgQ2FsbGluZyByMC1yMTIKCWFkZAlyOCwgc3AsICNTX1BDCglzdG1kYglyOCwge3NwLCBscn1eCQkJQCBDYWxsaW5nIFNQLCBMUgoJc3RyCWxyLCBbcjgsICMwXQkJCUAgU2F2ZSBjYWxsaW5nIFBDCgltcnMJcjYsIHNwc3IKCXN0cglyNiwgW3I4LCAjNF0JCQlAIFNhdmUgQ1BTUgoJc3RyCXIwLCBbcjgsICM4XQkJCUAgU2F2ZSBPTERfUjAKCW1vdglyMCwgc3AKCS5lbmRtCgoJLm1hY3JvCWlycV9yZXN0b3JlX3VzZXJfcmVncwoJbGRtaWEJc3AsIHtyMCAtIGxyfV4JCQlAIENhbGxpbmcgcjAgLSBscgoJbW92CXIwLCByMAoJbGRyCWxyLCBbc3AsICNTX1BDXQkJCUAgR2V0IFBDCglhZGQJc3AsIHNwLCAjU19GUkFNRV9TSVpFCglzdWJzCXBjLCBsciwgIzQJCQlAIHJldHVybiAmIG1vdmUgc3Bzcl9zdmMgaW50byBjcHNyCgkuZW5kbQoKCS5tYWNybyBnZXRfYmFkX3N0YWNrCglsZHIJcjEzLCBfYXJtYm9vdF9zdGFydAkJQCBzZXR1cCBvdXIgbW9kZSBzdGFjawoJc3ViCXIxMywgcjEzLCAjKENPTkZJR19TVEFDS1NJWkUrQ09ORklHX1NZU19NQUxMT0NfTEVOKQoJc3ViCXIxMywgcjEzLCAjKENPTkZJR19TWVNfR0JMX0RBVEFfU0laRSs4KSBAIHJlc2VydmVkIGEgY291cGxlIHNwb3RzIGluIGFib3J0IHN0YWNrCgoJc3RyCWxyLCBbcjEzXQkJCUAgc2F2ZSBjYWxsZXIgbHIgLyBzcHNyCgltcnMJbHIsIHNwc3IKCXN0cglsciwgW3IxMywgIzRdCgoJbW92CXIxMywgI01PREVfU1ZDCQkJQCBwcmVwYXJlIFNWQy1Nb2RlCgltc3IJc3Bzcl9jLCByMTMKCW1vdglsciwgcGMKCW1vdnMJcGMsIGxyCgkuZW5kbQoKCS5tYWNybyBnZXRfaXJxX3N0YWNrCQkJQCBzZXR1cCBJUlEgc3RhY2sKCWxkcglzcCwgSVJRX1NUQUNLX1NUQVJUCgkuZW5kbQoKCS5tYWNybyBnZXRfZmlxX3N0YWNrCQkJQCBzZXR1cCBGSVEgc3RhY2sKCWxkcglzcCwgRklRX1NUQUNLX1NUQVJUCgkuZW5kbQoKLyoKICogZXhjZXB0aW9uIGhhbmRsZXJzCiAqLwoJLmFsaWduCTUKdW5kZWZpbmVkX2luc3RydWN0aW9uOgoJZ2V0X2JhZF9zdGFjawoJYmFkX3NhdmVfdXNlcl9yZWdzCglibAlkb191bmRlZmluZWRfaW5zdHJ1Y3Rpb24KCgkuYWxpZ24JNQpzb2Z0d2FyZV9pbnRlcnJ1cHQ6CglnZXRfYmFkX3N0YWNrCgliYWRfc2F2ZV91c2VyX3JlZ3MKCWJsCWRvX3NvZnR3YXJlX2ludGVycnVwdAoKCS5hbGlnbgk1CnByZWZldGNoX2Fib3J0OgoJZ2V0X2JhZF9zdGFjawoJYmFkX3NhdmVfdXNlcl9yZWdzCglibAlkb19wcmVmZXRjaF9hYm9ydAoKCS5hbGlnbgk1CmRhdGFfYWJvcnQ6CglnZXRfYmFkX3N0YWNrCgliYWRfc2F2ZV91c2VyX3JlZ3MKCWJsCWRvX2RhdGFfYWJvcnQKCgkuYWxpZ24JNQpub3RfdXNlZDoKCWdldF9iYWRfc3RhY2sKCWJhZF9zYXZlX3VzZXJfcmVncwoJYmwJZG9fbm90X3VzZWQKCiNpZmRlZiBDT05GSUdfVVNFX0lSUQoKCS5hbGlnbgk1CmlycToKCWdldF9pcnFfc3RhY2sKCWlycV9zYXZlX3VzZXJfcmVncwoJYmwJZG9faXJxCglpcnFfcmVzdG9yZV91c2VyX3JlZ3MKCgkuYWxpZ24JNQpmaXE6CglnZXRfZmlxX3N0YWNrCgkvKiBzb21lb25lIG91Z2h0IHRvIHdyaXRlIGEgbW9yZSBlZmZpY3Rpb24gZmlxX3NhdmVfdXNlcl9yZWdzICovCglpcnFfc2F2ZV91c2VyX3JlZ3MKCWJsCWRvX2ZpcQoJaXJxX3Jlc3RvcmVfdXNlcl9yZWdzCgojZWxzZQoKCS5hbGlnbgk1CmlycToKCWdldF9iYWRfc3RhY2sKCWJhZF9zYXZlX3VzZXJfcmVncwoJYmwJZG9faXJxCgoJLmFsaWduCTUKZmlxOgoJZ2V0X2JhZF9zdGFjawoJYmFkX3NhdmVfdXNlcl9yZWdzCglibAlkb19maXEKCiNlbmRpZgoKI2lmIGRlZmluZWQoQ09ORklHX0lNUEE3KSB8fCBkZWZpbmVkKENPTkZJR19FUDczMTIpIHx8IGRlZmluZWQoQ09ORklHX0FSTUFESUxMTykKCS5hbGlnbgk1Ci5nbG9ibCByZXNldF9jcHUKcmVzZXRfY3B1OgoJbW92CWlwLCAjMAoJbWNyCXAxNSwgMCwgaXAsIGM3LCBjNywgMAkJQCBpbnZhbGlkYXRlIGNhY2hlCgltY3IJcDE1LCAwLCBpcCwgYzgsIGM3LCAwCQlAIGZsdXNoIFRMQiAodjQpCgltcmMJcDE1LCAwLCBpcCwgYzEsIGMwLCAwCQlAIGdldCBjdHJsIHJlZ2lzdGVyCgliaWMJaXAsIGlwLCAjMHgwMDBmCQkJQCAuLi4uLi4uLi4uLi53Y2FtCgliaWMJaXAsIGlwLCAjMHgyMTAwCQkJQCAuLnYuLi4ucy4uLi4uLi4uCgltY3IJcDE1LCAwLCBpcCwgYzEsIGMwLCAwCQlAIGN0cmwgcmVnaXN0ZXIKCW1vdglwYywgcjAKI2VsaWYgZGVmaW5lZChDT05GSUdfTkVUQVJNKQoJLmFsaWduCTUKLmdsb2JsIHJlc2V0X2NwdQpyZXNldF9jcHU6CglsZHIJcjEsID1ORVRBUk1fTUVNX01PRFVMRV9CQVNFCglsZHIJcjAsIFtyMSwgIytORVRBUk1fTUVNX0NTMF9CQVNFX0FERFJdCglsZHIJcjEsID0weEZGRkZGMDAwCglhbmQJcjAsIHIxLCByMAoJbGRyCXIxLCA9KHJlbG9jYXRlLVRFWFRfQkFTRSkKCWFkZAlyMCwgcjEsIHIwCglsZHIJcjQsID1ORVRBUk1fR0VOX01PRFVMRV9CQVNFCglsZHIJcjEsID1ORVRBUk1fR0VOX1NXX1NWQ19SRVNFVEEKCXN0cglyMSwgW3I0LCAjK05FVEFSTV9HRU5fU09GVFdBUkVfU0VSVklDRV0KCWxkcglyMSwgPU5FVEFSTV9HRU5fU1dfU1ZDX1JFU0VUQgoJc3RyCXIxLCBbcjQsICMrTkVUQVJNX0dFTl9TT0ZUV0FSRV9TRVJWSUNFXQoJbGRyCXIxLCA9TkVUQVJNX0dFTl9TV19TVkNfUkVTRVRBCglzdHIJcjEsIFtyNCwgIytORVRBUk1fR0VOX1NPRlRXQVJFX1NFUlZJQ0VdCglsZHIJcjEsID1ORVRBUk1fR0VOX1NXX1NWQ19SRVNFVEIKCXN0cglyMSwgW3I0LCAjK05FVEFSTV9HRU5fU09GVFdBUkVfU0VSVklDRV0KCW1vdglwYywgcjAKI2VsaWYgZGVmaW5lZChDT05GSUdfUzNDNDUxMEIpCi8qIE5vdGhpbmcgZG9uZSBoZXJlIGFzIHJlc2V0aW5nIHRoZSBDUFUgaXMgYm9hcmQgc3BlY2lmaWMsIGRlcGVuZGluZwogKiBvbiBleHRlcm5hbCBwZXJpcGhlcmFscyBzdWNoIGFzIHdhdGNoZG9nIHRpbWVycywgZXRjLiAqLwojZWxpZiBkZWZpbmVkKENPTkZJR19JTlRFR1JBVE9SKSAmJiBkZWZpbmVkKENPTkZJR19BUkNIX0lOVEVHUkFUT1IpCgkvKiBObyBzcGVjaWZpYyByZXNldCBhY3Rpb25zIGZvciBJbnRlZ3JhdG9yQVAvQ003MjBUIGFzIHlldCAqLwojZWxpZiBkZWZpbmVkKENPTkZJR19MUEMyMjkyKQoJLmFsaWduCTUKLmdsb2JsIHJlc2V0X2NwdQpyZXNldF9jcHU6Cgltb3YJcGMsIHIwCiNlbHNlCiNlcnJvciBObyByZXNldF9jcHUoKSBkZWZpbmVkIGZvciBjdXJyZW50IENQVSB0eXBlCiNlbmRpZgo=