LyoKICogKEMpIENvcHlyaWdodCAyMDA3CiAqIEhlaWtvIFNjaG9jaGVyLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCA8aHNAZGVueC5kZT4uCiAqCiAqIEZyb206CiAqIChDKSBDb3B5cmlnaHQgMjAwMwogKiBKdWVyZ2VuIEJlaXNlcnQsIEV1cm9EZXNpZ24gZW1iZWRkZWQgdGVjaG5vbG9naWVzLCBqYmVpc2VydEBldXJvZHNuLmRlCiAqCiAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCiAqIHByb2plY3QuCiAqCiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCSBTZWUgdGhlCiAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCiAqIE1BIDAyMTExLTEzMDcgVVNBCiAqLwoKI2lmbmRlZiBfX0NPTkZJR19ICiNkZWZpbmUgX19DT05GSUdfSAoKI3VuZGVmIFVTRV9WR0FfR1JBUEhJQ1MKCi8qIE1lbW9yeSBNYXAKICogMHgwMDAwMDAwMCAuLi4uIDB4MDNGRkZGRkYgLT4gUkFNICh1cCB0byAxMjhNaUIpCiAqIDB4NzQwMDAwMDAgLi4uLiAweDc0MEZGRkZGIC0+IENTIzYKICogMHg3NDEwMDAwMCAuLi4uIDB4NzQxRkZGRkYgLT4gQ1MjNwogKiAweDc0MjAwMDAwIC4uLi4gMHg3NDJGRkZGRiAtPiBDUzQjIGlmIG5vIGludGVybmFsIFVTQgogKiAweDc0MzAwMDAwIC4uLi4gMHg3NDNGRkZGRiAtPiBDUzUjIGlmIG5vIGJvb3N0ZWQgSURFCiAqIDB4NzdDMDAwMDAgLi4uLiAweDc3Q0ZGRkZGIC0+IENTNCMgVVNCIEhDICgxIE1pQikKICogMHg3N0QwMDAwMCAuLi4uIDB4NzdERkZGRkYgLT4gQ1MxIyBOQU5ELUZsYXNoICgxIE1pQikKICogMHg3ODAwMDAwMCAuLi4uIDB4NzhGRkZGRkYgLT4gQ1MyIyBJU0EtQnVzIFNwZWljaGVyenVncmlmZiAoMTYgTWlCKQogKiAweDc5MDAwMDAwIC4uLi4gMHg3OTAwRkZGRiAtPiBDUzIjIElTQS1CdXMgSU8tWnVncmlmZiAoMTYgTWlCLCBtYXBwZWQ6IDY0a2lCKQogKiAweDc5MDEwMDAwIC4uLi4gMHg3OUZGRkZGRiAtPiBDUzIjIElTQS1CdXMgSU8tWnVncmlmZiAobWlycm9yZWQpCiAqIDB4N0EwMDAwMDAgLi4uLiAweDdBMEZGRkZGIC0+IENTNSMgSURFIGVtdWxhdGlvbiAoMU1pQikKICoKICogMHg4MDAwMDAwMCAuLi4uIDB4OUZGRkZGRkYgLT4gUENJLUJ1cyBTcGVpY2hlcnp1Z3JpZmYgKDUxMk1pQiwgbWFwcGVkOiAxOjEpCiAqIDB4QTAwMDAwMDAgLi4uLiAweEJGRkZGRkZGIC0+IFBDSS1CdXMgU3BlaWNoZXJ6dWdyaWZmICg1MTJNaUIsIG1hcHBlZDogMHgwMDAwMDAwMC4uLjB4MUZGRkZGRkYpCiAqIDB4RTgwMDAwMDAgLi4uLiAweEU4MDBGRkZGIC0+IFBDSS1CdXMgSU8tWnVncmlmZiAoNjRraUIsIHRyYW5zbGF0ZWQgdG8gUENJOiAweDAwMDAuLi4weEZGRkYpCiAqIDB4RTg4MDAwMDAgLi4uLiAweEVCRkZGRkZGIC0+IFBDSS1CdXMgSU8tWnVncmlmZiAoNTZNaUIsIHRyYW5zbGF0ZWQgdG8gUENJOiAweDAwODAwMDAwLi4uMHgzRkZGRkZGKQogKiAweEVFRDAwMDAwIC4uLi4gMHhFRUQwMDAwMyAtPiBQQ0ktQnVzCiAqIDB4RUY0MDAwMDAgLi4uLiAweEVGNDAwMDNGIC0+IFBDSS1CdXMgTG9jYWwgQ29uZmlndXJhdGlvbiBSZWdpc3RlcnMKICogMHhFRjQwMDAzRiAuLi4uIDB4RUY1RkZGRkYgLT4gcmVzZXJ2ZWQKICogMHhFRjYwMDAwMCAuLi4uIDB4RUZGRkZGRkYgLT4gNDA1R1AgaW50ZXJuYWwgRGV2aWNlcyAoMTAgTWlCKQogKiAweEYwMDAwMDAwIC4uLi4gMHhGMDFGRkZGRiAtPiBGbGFzaC1ST00gKDIgTWlCKQogKiAweEYwMjAwMDAwIC4uLi4gMHhGN0ZGRkZGRiAtPiBmcmVlIGZvciBmbGFzaCBkZXZpY2VzCiAqIDB4RjgwMDAwMDAgLi4uLiAweEY4MDAwRkZGIC0+IE9uQ2hpcE1lbW9yeSAoNGtpQikKICogMHhGODAwMTAwMCAuLi4uIDB4RkZERkZGRkYgLT4gZnJlZSBmb3IgZmxhc2ggZGV2aWNlcwogKiAweEZGRTAwMDAwIC4uLi4gMHhGRkZGRkZGRiAtPiBCT09ULVJPTSAoMiBNaUIpCiAqLwoKI2RlZmluZSBDT05GSUdfU09MSURDQVJEMwkxCiNkZWZpbmUgQ09ORklHXzR4eAkxCiNkZWZpbmUgQ09ORklHXzQwNUdQCTEKCiNkZWZpbmUgQ09ORklHX0JPQVJEX0VBUkxZX0lOSVRfRgkxCgovKgogKiBEZWZpbmUgSURFX1VTRVNfSVNBX0VNVUxBVElPTiBmb3Igc2xvd2VyIElERSBhY2Nlc3MgaW4gdGhlIElTQS1JTyBhZGRyZXNzIHJhbmdlCiAqIElmIHVuZGVmaW5lZCwgSURFIGFjY2VzcyB1c2VzIGEgc2VwZXJhdCBlbXVsYXRpb24gd2l0aCBoaWdoZXIgYWNjZXNzIHNwZWVkLgogKiBDb25zaWRlciB0byBpbmZvcm0geW91ciBMaW51eCBJREUgZHJpdmVyIGFib3V0IHRoZSBkaWZmZXJlbnQgYWRkcmVzc2VzIQogKiBJREVfVVNFU19JU0FfRU1VTEFUSU9OIGlzIG9ubHkgdXNlZCBpZiB5b3VyIENPTkZJR19DT01NQU5EUyBtYWNybyBpbmNsdWRlcwogKiB0aGUgQ0ZHX0NNRF9JREUgbWFjcm8hCiAqLwojZGVmaW5lIElERV9VU0VTX0lTQV9FTVVMQVRJT04KCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogU2VyaWFsIFBvcnQKICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KI2RlZmluZSBDT05GSUdfU0VSSUFMX01VTFRJCiN1bmRlZiBDT05GSUdfU0VSSUFMX1NPRlRXQVJFX0ZJRk8KLyoKICogZGVmaW5lIENPTkZJR19QT1dFUl9ET1dOIGlmIHlvdXIgY3B1IHNob3VsZCBwb3dlciBkb3duIHdoaWxlIHdhaXRpbmcgZm9yIHlvdXIgaW5wdXQKICogV29ya3Mgb25seSwgaWYgeW91IGhhdmUgZW5hYmxlZCB0aGUgQ09ORklHX1NFUklBTF9TT0ZUV0FSRV9GSUZPIGZlYXR1cmUKICovCiNpZiBDT05GSUdfU0VSSUFMX1NPRlRXQVJFX0ZJRk8KICNkZWZpbmUgQ09ORklHX1BPV0VSX0RPV04KI2VuZGlmCgovKgogKiBkZWZpbmUgQ09ORklHX1NZU19DTEtfRlJFUSB0byB5b3VyIGJhc2UgY3J5c3RhbCBjbG9jayBpbiBIegogKi8KI2RlZmluZSBDT05GSUdfU1lTX0NMS19GUkVRCTMzMzMzMzMzCgovKgogKiBkZWZpbmUgQ09ORklHX0JBVURSQVRFIHRvIHRoZSBiYXVkcmF0ZSB2YWx1ZSB5b3Ugd2FudCB0byB1c2UgYXMgZGVmYXVsdAogKi8KI2RlZmluZSBDT05GSUdfQkFVRFJBVEUJCTExNTIwMAojZGVmaW5lIENPTkZJR19CT09UREVMQVkJMyAvKiBhdXRvYm9vdCBhZnRlciAzIHNlY29uZHMJICAgICAgKi8KCiNkZWZpbmUgQ09ORklHX1BSRUJPT1QJImVjaG87IglcCgkiZWNobyBUeXBlIFwicnVuIGZsYXNoX25mc1wiIHRvIG1vdW50IHJvb3QgZmlsZXN5c3RlbSBvdmVyIE5GUzsiIFwKCSJlY2hvIgoKI3VuZGVmCUNPTkZJR19CT09UQVJHUwoKI2RlZmluZQlDT05GSUdfRVhUUkFfRU5WX1NFVFRJTkdTCQkJCQlcCgkibmV0ZGV2PWV0aDBcMCIJCQkJCQkJXAoJIm5mc2FyZ3M9c2V0ZW52IGJvb3RhcmdzIHJvb3Q9L2Rldi9uZnMgcncgIgkJCVwKCQkibmZzcm9vdD0ke3NlcnZlcmlwfToke3Jvb3RwYXRofVwwIgkJCVwKCSJyYW1hcmdzPXNldGVudiBib290YXJncyByb290PS9kZXYvcmFtIHJ3XDAiCQkJXAoJIm5hbmRfYXJncz1zZXRlbnYgYm9vdGFyZ3Mgcm9vdD0vZGV2L210ZGJsb2NrNSBydyIJCVwKCQkicm9vdGZzdHlwZT1qZmZzMlwwIgkJCQkJXAoJImFkZGlwPXNldGVudiBib290YXJncyAke2Jvb3RhcmdzfSAiCQkJCVwKCQkiaXA9JHtpcGFkZHJ9OiR7c2VydmVyaXB9OiR7Z2F0ZXdheWlwfToke25ldG1hc2t9IglcCgkJIjoke2hvc3RuYW1lfToke25ldGRldn06b2ZmIHBhbmljPTFcMCIJCQlcCgkiYWRkY29ucz1zZXRlbnYgYm9vdGFyZ3MgJHtib290YXJnc30gIgkJCQlcCgkJImNvbnNvbGU9dHR5UzAsJHtiYXVkcmF0ZX1cMCIJCQkJXAoJImZsYXNoX25mcz1ydW4gbmZzYXJncyBhZGRpcCBhZGRjb25zOyIJCQkJXAoJCSJib290bSAke2tlcm5lbF9hZGRyfVwwIgkJCQlcCgkiZmxhc2hfbmFuZD1ydW4gbmFuZF9hcmdzIGFkZGlwIGFkZGNvbnM7Ym9vdG0gJHtrZXJuZWxfYWRkcn1cMCIJXAoJIm5ldF9uZnM9dGZ0cCAyMDAwMDAgJHtib290ZmlsZX07cnVuIG5mc2FyZ3MgYWRkaXAgYWRkY29uczsiCVwKCQkiYm9vdG1cMCIJCQkJCQlcCgkicm9vdHBhdGg9L29wdC9lbGRrL3BwY180eHhcMCIJCQkJCVwKCSJib290ZmlsZT0vdGZ0cGJvb3Qvc2MzL3VJbWFnZVwwIgkJCQlcCgkidS1ib290PS90ZnRwYm9vdC9zYzMvdS1ib290LmJpblwwIgkJCQlcCgkic2V0dXA9dGZ0cCAyMDAwMDAgL3RmdHBib290L3NjMy9zZXR1cC5pbWc7YXV0b3NjciAyMDAwMDBcMCIJXAoJImtlcm5lbF9hZGRyPUZGRTA4MDAwXDAiCQkJCQlcCgkiIgojdW5kZWYgQ09ORklHX0JPT1RDT01NQU5ECgojZGVmaW5lIENPTkZJR19TSUxFTlRfQ09OU09MRQkxCS8qIGVuYWJsZSBzaWxlbnQgc3RhcnR1cCAqLwojZGVmaW5lIENGR19ERVZJQ0VfTlVMTERFVgkxCS8qIGluY2x1ZGUgbnVsbGRldiBkZXZpY2UJKi8KCiNpZiAxCS8qIGZlZWwgZnJlZSB0byBkaXNhYmxlIGZvciBkZXZlbG9wbWVudCAqLwojZGVmaW5lIENPTkZJR19BVVRPQk9PVF9LRVlFRAkJLyogRW5hYmxlIHBhc3N3b3JkIHByb3RlY3Rpb24JKi8KI2RlZmluZSBDT05GSUdfQVVUT0JPT1RfUFJPTVBUCQkiXG5TQzMgLSBib290aW5nLi4uIHN0b3Agd2l0aCBFTlRFUlxuIgojZGVmaW5lIENPTkZJR19BVVRPQk9PVF9ERUxBWV9TVFIJIlxuIgkvKiAxc3QgInBhc3N3b3JkIgkqLwojZW5kaWYKCi8qCiAqIGRlZmluZSBDT05GSUdfQk9PVENPTU1BTkQgdG8gdGhlIGF1dG9ib290IGNvbW1hbmRzLiBUaGV5IHdpbGwgcnVubmluZyBhZnRlcgogKiB0aGUgQ09ORklHX0JPT1RERUxBWSBkZWxheSB0byBib290IHlvdXIgbWFjaGluZQogKi8KI2RlZmluZSBDT05GSUdfQk9PVENPTU1BTkQJImJvb3RwO2RjYWNoZSBvbjtib290bSIKCi8qCiAqIGRlZmluZSBDT05GSUdfQk9PVEFSR1MgdG8gdGhlIGRlZmF1bHQga2VybmVsIHBhcmFtZXRlcnMuIFRoZXkgd2lsbCB1c2VkIGlmIHlvdSBkb24ndAogKiBzZXQgZGlmZmVyZW50IHZhbHVlcyBhdCB0aGUgdS1ib290IHByb21wdAogKi8KI2lmZGVmIFVTRV9WR0FfR1JBUEhJQ1MKICNkZWZpbmUgQ09ORklHX0JPT1RBUkdTCSJyb290PS9kZXYvbmZzIHJ3IGlwPWJvb3RwIG5mc3Jvb3Q9L3RmdHBib290L3NvbGlkY2FyZDNyZSIKI2Vsc2UKICNkZWZpbmUgQ09ORklHX0JPT1RBUkdTCSJjb25zb2xlPXR0eVMwLDExNTIwMCByb290PS9kZXYvbmZzIHJ3IGlwPWJvb3RwIgojZW5kaWYKLyoKICogSXMgdGhlIFVTQiBob3N0IGNvbnRyb2xsZXIgYXNzZW1ibGVkPyBJZiB5ZXMgZGVmaW5lIENPTkZJR19JU1AxMTYxX1BSRVNFTlQKICogVGhpcyByZXNlcnZlcyBtZW1vcnkgYmFuayAjNCBmb3IgdGhpcyBwdXJwb3NlCiAqLwojdW5kZWYgQ09ORklHX0lTUDExNjFfUFJFU0VOVAoKI3VuZGVmIENPTkZJR19MT0FEU19FQ0hPICAgLyogbm8gZWNobyBvbiBmb3Igc2VyaWFsIGRvd25sb2FkCSovCiNkZWZpbmUgQ0ZHX0xPQURTX0JBVURfQ0hBTkdFCTEJLyogYWxsb3cgYmF1ZHJhdGUgY2hhbmdlCSovCgojZGVmaW5lIENPTkZJR19ORVRfTVVMVEkKLyogI2RlZmluZSBDT05GSUdfRUVQUk8xMDBfU1JPTV9XUklURSAqLwovKiAjZGVmaW5lIENPTkZJR19TSE9XX01BQyAqLwojZGVmaW5lIENPTkZJR19FRVBSTzEwMAojZGVmaW5lIENPTkZJR19NSUkgMQkJCS8qIGFkZCA0MDVHUCBNSUkgUEhZIG1hbmFnZW1lbnQJCSovCiNkZWZpbmUgQ09ORklHX1BIWV9BRERSIDEJLyogdGhlIGNvbm5lY3RlZCBQaHkgZGVmYXVsdHMgdG8gYWRkcmVzcyAxICovCgojZGVmaW5lIENPTkZJR19DT01NQU5EUwkgIFwKCSAgIChDT05GSUdfQ01EX0RGTAl8IFwKCQkJQ0ZHX0NNRF9BVVRPU0NSSVBUCXwgXAoJCQlDRkdfQ01EX1BDSQkJfCBcCgkJCUNGR19DTURfSVJRCQl8IFwKCQkJQ0ZHX0NNRF9ORVQJCXwgXAoJCQlDRkdfQ01EX01JSQkJfCBcCgkJCUNGR19DTURfUElORwkJfCBcCgkJCUNGR19DTURfTkFORAkJfCBcCgkJCUNGR19DTURfSkZGUzIJCXwgXAoJCQlDRkdfQ01EX0kyQwkJfCBcCgkJCUNGR19DTURfSURFCQl8IFwKCQkJQ0ZHX0NNRF9EQVRFCQl8IFwKCQkJQ0ZHX0NNRF9ESENQCQl8IFwKCQkJQ0ZHX0NNRF9DQUNIRQkJfCBcCgkJCUNGR19DTURfRUxGCSkKCi8qIHRoaXMgbXVzdCBiZSBpbmNsdWRlZCBBRlRFUiB0aGUgZGVmaW5pdGlvbiBvZiBDT05GSUdfQ09NTUFORFMgKGlmIGFueSkgKi8KI2luY2x1ZGUgPGNtZF9jb25mZGVmcy5oPgoKI3VuZGVmIENPTkZJR19XQVRDSERPRwkJCS8qIHdhdGNoZG9nIGRpc2FibGVkCQkqLwoKLyoKICogTWlzY2VsbGFuZW91cyBjb25maWd1cmFibGUgb3B0aW9ucwogKi8KI2RlZmluZSBDRkdfTE9OR0hFTFAJMQkJLyogdW5kZWYgdG8gc2F2ZSBtZW1vcnkJCSovCiNkZWZpbmUgQ0ZHX1BST01QVAkiU0MzPiAiCS8qIE1vbml0b3IgQ29tbWFuZCBQcm9tcHQJKi8KI2RlZmluZQlDRkdfQ0JTSVpFCTI1NgkJLyogQ29uc29sZSBJL08gQnVmZmVyIFNpemUJKi8KCiNkZWZpbmUgQ0ZHX1BCU0laRSAoQ0ZHX0NCU0laRStzaXplb2YoQ0ZHX1BST01QVCkrMTYpIC8qIFByaW50IEJ1ZmZlciBTaXplICovCgojZGVmaW5lIENGR19NQVhBUkdTCTE2CQkvKiBtYXggbnVtYmVyIG9mIGNvbW1hbmQgYXJncwkqLwojZGVmaW5lIENGR19CQVJHU0laRQlDRkdfQ0JTSVpFCS8qIEJvb3QgQXJndW1lbnQgQnVmZmVyIFNpemUJKi8KCiNkZWZpbmUgQ0ZHX01FTVRFU1RfU1RBUlQJMHgwNDAwMDAwCS8qIG1lbXRlc3Qgd29ya3Mgb24JKi8KI2RlZmluZSBDRkdfTUVNVEVTVF9FTkQJCTB4MEMwMDAwMAkvKiA0IC4uLiAxMiBNQiBpbiBEUkFNCSovCgovKgogKiBJZiBDRkdfRVhUX1NFUklBTF9DTE9DSywgdGhlbiB0aGUgVUFSVCBkaXZpc29yIGlzIDEuCiAqIElmIENGR180MDVfVUFSVF9FUlJBVEFfNTksIHRoZW4gVUFSVCBkaXZpc29yIGlzIDMxLgogKiBPdGhlcndpc2UsIFVBUlQgZGl2aXNvciBpcyBkZXRlcm1pbmVkIGJ5IENQVSBDbG9jayBhbmQgQ0ZHX0JBU0VfQkFVRCB2YWx1ZS4KICogVGhlIExpbnV4IEJBU0VfQkFVRCBkZWZpbmUgc2hvdWxkIG1hdGNoIHRoaXMgY29uZmlndXJhdGlvbi4KICogICAgYmFzZUJhdWQgPSBjcHVDbG9jay8odWFydERpdmlzb3IqMTYpCiAqIElmIENGR180MDVfVUFSVF9FUlJBVEFfNTkgYW5kIDIwME1IeiBDUFUgY2xvY2ssCiAqIHNldCBMaW51eCBCQVNFX0JBVUQgdG8gNDAzMjAwLgogKgogKiBDb25zaWRlciB0aGUgT1BCIGNsb2NrISBJZiBpdCBnZXQgbG93ZXIgdGhlIEJBU0VfQkFVRCBtdXN0IGJlIGxvd2VyIHRvCiAqIChzZWUgNDA1R1AgZGF0YXNoZWV0IGZvciBkZXNjcml0cGlvbikKICovCiN1bmRlZglDRkdfRVhUX1NFUklBTF9DTE9DSwkJLyogZXh0ZXJuYWwgc2VyaWFsIGNsb2NrICovCiN1bmRlZglDRkdfNDA1X1VBUlRfRVJSQVRBXzU5CQkvKiA0MDVHUC9DUiBSZXYuIEQgc2lsaWNvbiAqLwojZGVmaW5lIENGR19CQVNFX0JBVUQJCTkyMTYwMAkvKiBpbnRlcm5hbCBjbG9jayAqLwoKLyogVGhlIGZvbGxvd2luZyB0YWJsZSBpbmNsdWRlcyB0aGUgc3VwcG9ydGVkIGJhdWRyYXRlcyAqLwojZGVmaW5lIENGR19CQVVEUkFURV9UQUJMRSAgXAogICAgezMwMCwgNjAwLCAxMjAwLCAyNDAwLCA0ODAwLCA5NjAwLCAxOTIwMCwgMzg0MDAsIDU3NjAwLCAxMTUyMDAsIDIzMDQwMH0KCiNkZWZpbmUgQ0ZHX0xPQURfQUREUgkJMHgxMDAwMDAwCS8qIGRlZmF1bHQgbG9hZCBhZGRyZXNzICovCiNkZWZpbmUgQ0ZHX0VYVEJESU5GTwkJMQkvKiBUbyB1c2UgZXh0ZW5kZWQgYm9hcmRfaW50byAoYmRfdCkgKi8KCiNkZWZpbmUJQ0ZHX0haCQkJMTAwMAkvKiBkZWNyZW1lbnRlciBmcmVxOiAxIG1zIHRpY2tzCSovCgovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIElJQyBzdHVmZgogKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqLwojZGVmaW5lICBDT05GSUdfSEFSRF9JMkMJCS8qIEkyQyB3aXRoIGhhcmR3YXJlIHN1cHBvcnQJKi8KI3VuZGVmCUNPTkZJR19TT0ZUX0kyQwkJCS8qIEkyQyBiaXQtYmFuZ2VkCQkqLwoKI2RlZmluZSBJMkNfSU5JVAojZGVmaW5lIEkyQ19BQ1RJVkUgMAojZGVmaW5lIEkyQ19UUklTVEFURSAwCgojZGVmaW5lIENGR19JMkNfU1BFRUQJCTEwMDAwMAkvKiB1c2UgdGhlIHN0YW5kYXJkIDEwMGtIeiBzcGVlZCAqLwojZGVmaW5lIENGR19JMkNfU0xBVkUJCTB4N0YJCS8qIG1hc2sgdmFsaWQgYml0cyAqLwoKI2RlZmluZSBDT05GSUdfUlRDX0RTMTMzNwojZGVmaW5lIENGR19JMkNfUlRDX0FERFIgMHg2OAoKLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBQQ0kgc3R1ZmYKICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKi8KI2RlZmluZSBQQ0lfSE9TVF9BREFQVEVSIDAJCS8qIGNvbmZpZ3VyZSBhciBwY2kgYWRhcHRlcgkqLwojZGVmaW5lIFBDSV9IT1NUX0ZPUkNFCTEJCS8qIGNvbmZpZ3VyZSBhcyBwY2kgaG9zdAkqLwojZGVmaW5lIFBDSV9IT1NUX0FVVE8JMgkJLyogZGV0ZWN0ZWQgdmlhIGFyYml0ZXIgZW5hYmxlCSovCgojZGVmaW5lIENPTkZJR19QQ0kJCQkvKiBpbmNsdWRlIHBjaSBzdXBwb3J0CQkqLwojZGVmaW5lIENPTkZJR19QQ0lfSE9TVAlQQ0lfSE9TVF9GT1JDRQkvKiBzZWxlY3QgcGNpIGhvc3QgZnVuY3Rpb24JKi8KI2RlZmluZSBDT05GSUdfUENJX1BOUAkJCS8qIGRvIHBjaSBwbHVnLWFuZC1wbGF5CQkqLwoJCQkJCS8qIHJlc291cmNlIGNvbmZpZ3VyYXRpb24JKi8KCi8qIElmIHlvdSB3YW50IHRvIHNlZSwgd2hhdHMgY29ubmVjdGVkIHRvIHlvdXIgUENJIGJ1cyAqLwovKiAjZGVmaW5lIENPTkZJR19QQ0lfU0NBTl9TSE9XICovCgojZGVmaW5lIENGR19QQ0lfU1VCU1lTX1ZFTkRPUklEIDB4MDAwMAkvKiBQQ0kgVmVuZG9yIElEOiB0by1kbyEhIQkqLwojZGVmaW5lIENGR19QQ0lfU1VCU1lTX0RFVklDRUlEIDB4MDAwMAkvKiBQQ0kgRGV2aWNlIElEOiB0by1kbyEhIQkqLwojZGVmaW5lIENGR19QQ0lfUFRNMUxBCTB4MDAwMDAwMDAJLyogcG9pbnQgdG8gc2RyYW0JCSovCiNkZWZpbmUgQ0ZHX1BDSV9QVE0xTVMJMHg4MDAwMDAwMQkvKiAyR0IsIGVuYWJsZSBoYXJkLXdpcmVkIHRvIDEJKi8KI2RlZmluZSBDRkdfUENJX1BUTTFQQ0kgMHgwMDAwMDAwMAkvKiBIb3N0OiB1c2UgdGhpcyBwY2kgYWRkcmVzcwkqLwojZGVmaW5lIENGR19QQ0lfUFRNMkxBCTB4MDAwMDAwMDAJLyogZGlzYWJsZWQJCQkqLwojZGVmaW5lIENGR19QQ0lfUFRNMk1TCTB4MDAwMDAwMDAJLyogZGlzYWJsZWQJCQkqLwojZGVmaW5lIENGR19QQ0lfUFRNMlBDSSAweDA0MDAwMDAwCS8qIEhvc3Q6IHVzZSB0aGlzIHBjaSBhZGRyZXNzCSovCgovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIEV4dGVybmFsIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCiAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICovCiNpZiAhKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfSURFKQoKI3VuZGVmCUNPTkZJR19JREVfTEVECQkJLyogbm8gbGVkIGZvciBpZGUgc3VwcG9ydGVkCSovCiN1bmRlZglDT05GSUdfSURFX1JFU0VUCQkvKiBubyByZXNldCBmb3IgaWRlIHN1cHBvcnRlZAkqLwoKLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBJREUvQVRBIHN0dWZmCiAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICovCiNlbHNlIC8qICEoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9JREUpICovCiNkZWZpbmUgQ09ORklHX1NUQVJUX0lERQkxCS8qIGNoZWNrLCBpZiB1c2UgSURFICovCgojdW5kZWYJQ09ORklHX0lERV84eHhfRElSRUNUCQkvKiBubyBwY21jaWEgaW50ZXJmYWNlIHJlcXVpcmVkICovCiN1bmRlZglDT05GSUdfSURFX0xFRAkJCS8qIG5vIGxlZCBmb3IgaWRlIHN1cHBvcnRlZAkqLwojdW5kZWYJQ09ORklHX0lERV9SRVNFVAkJLyogbm8gcmVzZXQgZm9yIGlkZSBzdXBwb3J0ZWQJKi8KCiNkZWZpbmUJQ09ORklHX0FUQVBJCiNkZWZpbmUJQ09ORklHX0RPU19QQVJUSVRJT04KI2RlZmluZQlDRkdfSURFX01BWERFVklDRQkoQ0ZHX0lERV9NQVhCVVMqMSkgLyogbWF4LiAxIGRyaXZlcyBwZXIgSURFIGJ1cyAqLwoKI2lmbmRlZiBJREVfVVNFU19JU0FfRU1VTEFUSU9OCgovKiBOZXcgYW5kIGZhc3RlciBhY2Nlc3MgKi8KI2RlZmluZQlDRkdfQVRBX0JBU0VfQUREUgkJMHg3QTAwMDAwMAkvKiBzdGFydCBvZiBJU0EgSU8gZW11bGF0aW9uICovCgovKiBIb3cgbWFueSBJREUgYnVzc2VzIGFyZSBhdmFpbGFibGUgKi8KI2RlZmluZQlDRkdfSURFX01BWEJVUwkJMQoKLyogV2hhdCBJREUgcG9ydHMgYXJlIGF2YWlsYWJsZSAqLwojZGVmaW5lCUNGR19BVEFfSURFMF9PRkZTRVQJMHgwMDAJCS8qIGZpcnN0IGlzIGF2YWlsYWJsZSAqLwojdW5kZWYJQ0ZHX0FUQV9JREUxX09GRlNFVAkJCS8qIHNlY29uZCBub3QgYXZhaWxhYmxlICovCgovKiBhY2Nlc3MgdG8gdGhlIGRhdGEgcG9ydCBpcyBjYWxjdWxhdGVkOgogICBDRkdfQVRBX0JBU0VfQUREUiArIENGR19BVEFfSURFMF9PRkZTRVQgKyBDRkdfQVRBX0RBVEFfT0ZGU0VUICsgMCAqLwojZGVmaW5lIENGR19BVEFfREFUQV9PRkZTRVQJMHgwMDAwCS8qIE9mZnNldCBmb3IgZGF0YSBJL08gKi8KCi8qIGFjY2VzcyB0byB0aGUgcmVnaXN0ZXJzIGlzIGNhbGN1bGF0ZWQ6CiAgIENGR19BVEFfQkFTRV9BRERSICsgQ0ZHX0FUQV9JREUwX09GRlNFVCArIENGR19BVEFfUkVHX09GRlNFVCArIFsxLi43XSAqLwojZGVmaW5lCUNGR19BVEFfUkVHX09GRlNFVAkweDAwMDAJLyogT2Zmc2V0IGZvciBub3JtYWwgcmVnaXN0ZXIgYWNjZXNzZXMJKi8KCi8qIGFjY2VzcyB0byB0aGUgYWx0ZXJuYXRlIHJlZ2lzdGVyIGlzIGNhbGN1bGF0ZWQ6CiAgIENGR19BVEFfQkFTRV9BRERSICsgQ0ZHX0FUQV9JREUwX09GRlNFVCArIENGR19BVEFfQUxUX09GRlNFVCArIDYgKi8KI2RlZmluZSBDRkdfQVRBX0FMVF9PRkZTRVQJMHgwMDgJCS8qIE9mZnNldCBmb3IgYWx0ZXJuYXRlIHJlZ2lzdGVycwkqLwoKI2Vsc2UgLyogSURFX1VTRVNfSVNBX0VNVUxBVElPTiAqLwoKI2RlZmluZQlDRkdfQVRBX0JBU0VfQUREUgkJMHg3OTAwMDAwMAkvKiBzdGFydCBvZiBJU0EgSU8gZW11bGF0aW9uICovCgovKiBIb3cgbWFueSBJREUgYnVzc2VzIGFyZSBhdmFpbGFibGUgKi8KI2RlZmluZQlDRkdfSURFX01BWEJVUwkJMQoKLyogV2hhdCBJREUgcG9ydHMgYXJlIGF2YWlsYWJsZSAqLwojZGVmaW5lCUNGR19BVEFfSURFMF9PRkZTRVQJMHgwMUYwCS8qIGZpcnN0IGlzIGF2YWlsYWJsZSAqLwojdW5kZWYJQ0ZHX0FUQV9JREUxX09GRlNFVAkJCQkvKiBzZWNvbmQgbm90IGF2YWlsYWJsZSAqLwoKLyogYWNjZXNzIHRvIHRoZSBkYXRhIHBvcnQgaXMgY2FsY3VsYXRlZDoKICAgQ0ZHX0FUQV9CQVNFX0FERFIgKyBDRkdfQVRBX0lERTBfT0ZGU0VUICsgQ0ZHX0FUQV9EQVRBX09GRlNFVCArIDAgKi8KI2RlZmluZSBDRkdfQVRBX0RBVEFfT0ZGU0VUCTB4MDAwMAkvKiBPZmZzZXQgZm9yIGRhdGEgSS9PICovCgovKiBhY2Nlc3MgdG8gdGhlIHJlZ2lzdGVycyBpcyBjYWxjdWxhdGVkOgogICBDRkdfQVRBX0JBU0VfQUREUiArIENGR19BVEFfSURFMF9PRkZTRVQgKyBDRkdfQVRBX1JFR19PRkZTRVQgKyBbMS4uN10gKi8KI2RlZmluZQlDRkdfQVRBX1JFR19PRkZTRVQJMHgwMDAwCS8qIE9mZnNldCBmb3Igbm9ybWFsIHJlZ2lzdGVyIGFjY2Vzc2VzCSovCgovKiBhY2Nlc3MgdG8gdGhlIGFsdGVybmF0ZSByZWdpc3RlciBpcyBjYWxjdWxhdGVkOgogICBDRkdfQVRBX0JBU0VfQUREUiArIENGR19BVEFfSURFMF9PRkZTRVQgKyBDRkdfQVRBX0FMVF9PRkZTRVQgKyA2ICovCiNkZWZpbmUgQ0ZHX0FUQV9BTFRfT0ZGU0VUCTB4MDNGMAkJLyogT2Zmc2V0IGZvciBhbHRlcm5hdGUgcmVnaXN0ZXJzCSovCgojZW5kaWYgLyogSURFX1VTRVNfSVNBX0VNVUxBVElPTiAqLwoKI2VuZGlmIC8qICEoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9JREUpICovCgovKgojZGVmaW5lCUNGR19LRVlfUkVHX0JBU0VfQUREUgkweEYwMTAwMDAwCiNkZWZpbmUJQ0ZHX0lSX1JFR19CQVNFX0FERFIJMHhGMDIwMDAwMAojZGVmaW5lCUNGR19GUEdBX1JFR19CQVNFX0FERFIJMHhGMDMwMDAwMAoqLwoKLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBTdGFydCBhZGRyZXNzZXMgZm9yIHRoZSBmaW5hbCBtZW1vcnkgY29uZmlndXJhdGlvbgogKiAoU2V0IHVwIGJ5IHRoZSBzdGFydHVwIGNvZGUpCiAqIFBsZWFzZSBub3RlIHRoYXQgQ0ZHX1NEUkFNX0JBU0UgX211c3RfIHN0YXJ0IGF0IDAKICoKICogQ0ZHX0ZMQVNIX0JBU0UgICAtPiBzdGFydCBhZGRyZXNzIG9mIGludGVybmFsIGZsYXNoCiAqIENGR19NT05JVE9SX0JBU0UgLT4gc3RhcnQgb2YgdS1ib290CiAqLwojaWZuZGVmIF9fQVNTRU1CTEVSX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgb2Zmc2V0T2ZCaWdGbGFzaDsKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgb2Zmc2V0T2ZFbnZpcm9ubWVudDsKI2VuZGlmCgojZGVmaW5lIENGR19TRFJBTV9CQVNFCQkweDAwMDAwMDAwCiNkZWZpbmUgQ0ZHX0ZMQVNIX0JBU0UJCTB4RkZFMDAwMDAKI2RlZmluZSBDRkdfTU9OSVRPUl9CQVNFCTB4RkZGQzAwMDAgICAgIC8qIHBsYWNlZCBsYXN0IDI1NmsgKi8KI2RlZmluZSBDRkdfTU9OSVRPUl9MRU4JCSgyMjQgKiAxMDI0KQkvKiBSZXNlcnZlIDIyNCBLaUIgZm9yIE1vbml0b3IJKi8KI2RlZmluZSBDRkdfTUFMTE9DX0xFTgkJKDEyOCAqIDEwMjQpCS8qIFJlc2VydmUgMTI4IEtpQiBmb3IgbWFsbG9jKCkJKi8KCi8qCiAqIEZvciBib290aW5nIExpbnV4LCB0aGUgYm9hcmQgaW5mbyBhbmQgY29tbWFuZCBsaW5lIGRhdGEKICogaGF2ZSB0byBiZSBpbiB0aGUgZmlyc3QgOCBNaUIgb2YgbWVtb3J5LCBzaW5jZSB0aGlzIGlzCiAqIHRoZSBtYXhpbXVtIG1hcHBlZCBieSB0aGUgTGludXgga2VybmVsIGR1cmluZyBpbml0aWFsaXphdGlvbi4KICovCiNkZWZpbmUgQ0ZHX0JPT1RNQVBTWgkJKDggPDwgMjApCS8qIEluaXRpYWwgTWVtb3J5IG1hcCBmb3IgTGludXggKi8KLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBGTEFTSCBvcmdhbml6YXRpb24gIyMgRklYTUU6IGxvb2t1cCBpbiBkYXRhc2hlZXQKICovCiNkZWZpbmUgQ0ZHX01BWF9GTEFTSF9CQU5LUwkyCS8qIG1heCBudW1iZXIgb2YgbWVtb3J5IGJhbmtzCQkqLwojZGVmaW5lIENGR19NQVhfRkxBU0hfU0VDVAkyNTYJLyogbWF4IG51bWJlciBvZiBzZWN0b3JzIG9uIG9uZSBjaGlwCSovCgojZGVmaW5lIENGR19GTEFTSF9DRkkJCQkvKiBmbGFzaCBpcyBDRkkgY29tcGF0LgkqLwojZGVmaW5lIENGR19GTEFTSF9DRklfRFJJVkVSCQkvKiBVc2UgY29tbW9uIENGSSBkcml2ZXIqLwojZGVmaW5lIENGR19GTEFTSF9FTVBUWV9JTkZPCQkvKiBwcmludCAnRScgZm9yIGVtcHR5IHNlY3RvcgkqLwojZGVmaW5lIENGR19GTEFTSF9RVUlFVF9URVNUCTEJLyogZG9uJ3Qgd2FybiB1cG9uIHVua25vd24gZmxhc2gqLwojZGVmaW5lIENGR19GTEFTSF9FUkFTRV9UT1VUCTEyMDAwMAkvKiBUaW1lb3V0IGZvciBGbGFzaCBFcmFzZSAoaW4gbXMpCSovCiNkZWZpbmUgQ0ZHX0ZMQVNIX1dSSVRFX1RPVVQJNTAwCS8qIFRpbWVvdXQgZm9yIEZsYXNoIFdyaXRlIChpbiBtcykJKi8KI2RlZmluZSBDRkdfV1JJVEVfU1dBUFBFRF9EQVRBCQkvKiBzd2FwIERhdGFieXRlcyBiZXR3ZWVuIHJlYWRpbmcvd3JpdGluZyAqLwoKI2RlZmluZSBDRkdfRU5WX0lTX0lOX0ZMQVNICTEKI2lmIENGR19FTlZfSVNfSU5fRkxBU0gKI2RlZmluZSBDRkdfRU5WX09GRlNFVAkJMHgwMDAwMDAwMCAgLyogT2Zmc2V0IG9mIEVudmlyb25tZW50IFNlY3RvciBpbiBib3R0b20gdHlwZSAqLwojZGVmaW5lIENGR19FTlZfU0laRQkJMHg0MDAwCSAgICAvKiBUb3RhbCBTaXplIG9mIEVudmlyb25tZW50IFNlY3RvcgkqLwojZGVmaW5lIENGR19FTlZfU0VDVF9TSVpFCTB4NDAwMAkgICAgLyogc2VlIFJFQURNRSAtIGVudiBzZWN0b3IgdG90YWwgc2l6ZQkqLwoKLyogQWRkcmVzcyBhbmQgc2l6ZSBvZiBSZWR1bmRhbnQgRW52aXJvbm1lbnQgU2VjdG9yCSovCiNkZWZpbmUgQ0ZHX0VOVl9PRkZTRVRfUkVEVU5ECShDRkdfRU5WX09GRlNFVCtDRkdfRU5WX1NJWkUpCiNkZWZpbmUgQ0ZHX0VOVl9TSVpFX1JFRFVORAkoQ0ZHX0VOVl9TSVpFKQoKI2VuZGlmCi8qIGxldCB1cyBjaGFuZ2luZyBhbnl0aGluZyBpbiBvdXIgZW52aXJvbm1lbnQgKi8KI2RlZmluZSBDT05GSUdfRU5WX09WRVJXUklURQoKLyoKICogTkFORC1GTEFTSCBzdHVmZgogKi8KI2RlZmluZSBDRkdfTUFYX05BTkRfREVWSUNFCTEKI2RlZmluZSBOQU5EX01BWF9DSElQUwkJMQojZGVmaW5lIENGR19OQU5EX0JBU0UJCTB4NzdEMDAwMDAKCgojZGVmaW5lIENPTkZJR19KRkZTMl9OQU5EIDEJCQkvKiBqZmZzMiBvbiBuYW5kIHN1cHBvcnQgKi8KCi8qIE5vIGNvbW1hbmQgbGluZSwgb25lIHN0YXRpYyBwYXJ0aXRpb24gKi8KI3VuZGVmCUNPTkZJR19KRkZTMl9DTURMSU5FCiNkZWZpbmUgQ09ORklHX0pGRlMyX0RFVgkJIm5hbmQwIgojZGVmaW5lIENPTkZJR19KRkZTMl9QQVJUX1NJWkUJCTB4MDEwMDAwMDAKI2RlZmluZSBDT05GSUdfSkZGUzJfUEFSVF9PRkZTRVQJMHgwMDAwMDAwMAoKLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBDYWNoZSBDb25maWd1cmF0aW9uCiAqCiAqIENGR19EQ0FDSEVfU0laRSAtPiBzaXplIG9mIGRhdGEgY2FjaGU6CiAqIC0gNDA1R1AgOGsKICogLSA0MDVHUHIgMTZrCiAqIEhvdyB0byBoYW5kbGUgdGhlIGRpZmZlcmVuY2UgaW4gY2hhY2hlIHNpemU/CiAqIENGR19DQUNIRUxJTkVfU0laRSAtPiBzaXplIG9mIG9uZSBjYWNoZSBsaW5lOiAzMiBieXRlcwogKiAodXNlZCBpbiBjcHUvcHBjNHh4L3N0YXJ0LlMpCiovCiNkZWZpbmUgQ0ZHX0RDQUNIRV9TSVpFICAgIDE2Mzg0CgojZGVmaW5lIENGR19DQUNIRUxJTkVfU0laRSAzMgoKI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0tHREIpCiAjZGVmaW5lIENGR19DQUNIRUxJTkVfU0hJRlQJNQkvKiBsb2cgYmFzZSAyIG9mIHRoZSBhYm92ZSB2YWx1ZQkqLwojZW5kaWYKCi8qCiAqIEluaXQgTWVtb3J5IENvbnRyb2xsZXI6CiAqCiAqLwoKI2RlZmluZSBGTEFTSF9CQVNFMF9QUkVMSU0JQ0ZHX0ZMQVNIX0JBU0UKI2RlZmluZSBGTEFTSF9CQVNFMV9QUkVMSU0JMAoKLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBTb21lIGluZm9ybWF0aW9ucyBhYm91dCB0aGUgaW50ZXJuYWwgU1JBTSAoT0NNPU9uIENoaXAgTWVtb3J5KQogKgogKiBDRkdfT0NNX0RBVEFfQUREUiAtPiBsb2NhdGlvbgogKiBDRkdfT0NNX0RBVEFfU0laRSAtPiBzaXplCiovCgojZGVmaW5lIENGR19URU1QX1NUQUNLX09DTQkxCiNkZWZpbmUgQ0ZHX09DTV9EQVRBX0FERFIJMHhGODAwMDAwMAojZGVmaW5lIENGR19PQ01fREFUQV9TSVpFCTB4MTAwMAoKLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBEZWZpbml0aW9ucyBmb3IgaW5pdGlhbCBzdGFjayBwb2ludGVyIGFuZCBkYXRhIGFyZWEgKGluIERQUkFNKToKICogLSB3ZSBhcmUgdXNpbmcgdGhlIGludGVybmFsIDRrIFNSQU0sIHNvIHdlIGRvbid0IG5lZWQgZGF0YSBjYWNoZSBtYXBwaW5nCiAqIC0gaW50ZXJuYWwgU1JBTSAoT0NNPU9uIENoaXAgTWVtb3J5KSBpcyBwbGFjZWQgdG8gQ0ZHX09DTV9EQVRBX0FERFIKICogLSBTdGFja3BvaW50ZXIgd2lsbCBiZSBsb2NhdGVkIHRvCiAqICAgKENGR19JTklUX1JBTV9BRERSJjB4RkZGRjAwMDApIHwgKENGR19JTklUX1NQX09GRlNFVCYweDAwMDBGRkZGKQogKiAgIGluIGNwdS9wcGM0eHgvc3RhcnQuUwogKi8KCiN1bmRlZiBDRkdfSU5JVF9EQ0FDSEVfQ1MKLyogV2hlcmUgdGhlIGludGVybmFsIFNSQU0gc3RhcnRzICovCiNkZWZpbmUgQ0ZHX0lOSVRfUkFNX0FERFIJQ0ZHX09DTV9EQVRBX0FERFIKLyogV2hlcmUgdGhlIGludGVybmFsIFNSQU0gZW5kcyAob25seSBvZmZzZXQpICovCiNkZWZpbmUgQ0ZHX0lOSVRfUkFNX0VORAkweDBGMDAKCi8qCgogQ0ZHX0lOSVRfUkFNX0FERFIgLS0tLS0tPiAtLS0tLS0tLS0tLS0gbG93ZXIgYWRkcmVzcwoJCQkgICB8CSAgICAgIHwKCQkJICAgfCAgXiAgICAgICB8CgkJCSAgIHwgIHwgICAgICAgfAoJCQkgICB8ICB8IFN0YWNrIHwKIENGR19HQkxfREFUQV9PRkZTRVQgLS0tLT4gLS0tLS0tLS0tLS0tCgkJCSAgIHwJICAgICAgfAoJCQkgICB8IDY0IEJ5dGVzIHwKCQkJICAgfAkgICAgICB8CiBDRkdfSU5JVF9SQU1fRU5EICAtLS0tLS0+IC0tLS0tLS0tLS0tLSBoaWdoZXIgYWRkcmVzcwogIChvZmZzZXQgb25seSkKCiovCi8qIHNpemUgaW4gYnl0ZXMgcmVzZXJ2ZWQgZm9yIGluaXRpYWwgZGF0YSAqLwojZGVmaW5lIENGR19HQkxfREFUQV9TSVpFICAgICA2NAojZGVmaW5lIENGR19HQkxfREFUQV9PRkZTRVQgICAoQ0ZHX0lOSVRfUkFNX0VORCAtIENGR19HQkxfREFUQV9TSVpFKQovKiBJbml0aWFsIHZhbHVlIG9mIHRoZSBzdGFjayBwb2ludGVybiBpbiBpbnRlcm5hbCBTUkFNICovCiNkZWZpbmUgQ0ZHX0lOSVRfU1BfT0ZGU0VUICAgIENGR19HQkxfREFUQV9PRkZTRVQKCi8qCiAqIEludGVybmFsIERlZmluaXRpb25zCiAqCiAqIEJvb3QgRmxhZ3MKICovCiNkZWZpbmUgQk9PVEZMQUdfQ09MRAkweDAxCQkvKiBOb3JtYWwgUG93ZXItT246IEJvb3QgZnJvbSBGTEFTSAkqLwojZGVmaW5lIEJPT1RGTEFHX1dBUk0JMHgwMgkJLyogU29mdHdhcmUgcmVib290CQkJKi8KCi8qICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICovCi8qIFRoZXNlIGRlZmluZXMgd2lsbCBiZSB1c2VkIGluIGNwdS9wcGM0eHgvY3B1X2luaXQuYyB0byBzZXR1cCBleHRlcm5hbCBjaGlwIHNlbGVjdHMgICovCi8qIFRoZXkgYXJlIGN1cnJlbnRseSB1bmRlZmluZWQgY2F1c2UgdGhleSBhcmUgaW5pdGlhaXplZCBpbiBib2FyZC9zb2xpZGNhcmQzL2luaXQuUyAgICovCgovKiBUaGlzIGNoaXAgc2VsZWN0IGFjY2Vzc2VzIHRoZSBib290IGRldmljZSAqLwovKiBJdCBkZXBlbmRzIG9uIGJvb3Qgc2VsZWN0IHN3aXRjaCBpZiB0aGlzIGRldmljZSBpcyAxNiBvciA4IGJpdCAqLwoKI3VuZGVmIENGR19FQkNfUEIwQVAKI3VuZGVmIENGR19FQkNfUEIwQ1IKCiN1bmRlZiBDRkdfRUJDX1BCMUFQCiN1bmRlZiBDRkdfRUJDX1BCMUNSCgojdW5kZWYgQ0ZHX0VCQ19QQjJBUAojdW5kZWYgQ0ZHX0VCQ19QQjJDUgoKI3VuZGVmIENGR19FQkNfUEIzQVAKI3VuZGVmIENGR19FQkNfUEIzQ1IKCiN1bmRlZiBDRkdfRUJDX1BCNEFQCiN1bmRlZiBDRkdfRUJDX1BCNENSCgojdW5kZWYgQ0ZHX0VCQ19QQjVBUAojdW5kZWYgQ0ZHX0VCQ19QQjVDUgoKI3VuZGVmIENGR19FQkNfUEI2QVAKI3VuZGVmIENGR19FQkNfUEI2Q1IKCiN1bmRlZiBDRkdfRUJDX1BCN0FQCiN1bmRlZiBDRkdfRUJDX1BCN0NSCgojZGVmaW5lIENGR19FQkNfQ0ZHICAgIDB4Yjg0ZWYwMDAKCiNkZWZpbmUgQ09ORklHX1NEUkFNX0JBTkswCS8qIHVzZSB0aGUgc3RhbmRhcmQgU0RSQU0gaW5pdGlhbGl6YXRpb24gKi8KI3VuZGVmIENPTkZJR19TUERfRUVQUk9NCgovKgogKiBEZWZpbmUgdGhpcyB0byBnZXQgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBzeXN0ZW0gY29uZmlndXJhdGlvbgogKi8KLyogI2RlZmluZSBTQzNfREVCVUdPVVQgKi8KI3VuZGVmIFNDM19ERUJVR09VVAoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqIEV4dGVybmFsIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCiNkZWZpbmUgQ0ZHX0lTQV9NRU1fQkFTRV9BRERSRVNTIDB4NzgwMDAwMDAKLyoKIERpZSBHcmFmaWstVHJlaWJlciBncmVpZmVuIPxiZXIgZGllIEFkcmVzc2UgaW4gZGllc2VtIE1hY3JvIGF1ZiBkZW4gQ2hpcCB6dS4KIERhcyBmdW5rdGlvbmllcnQgYmVpIGRlcmVuIEthcnRlbiwgd2VpbCBzaWUgZWluZSBQQ0ktQnJpZGdlIGJlbnV0emVuLCBkaWUKIGRhcyBnbGVpY2hlIE1hcHBpbmcgZHVyY2hm/GhyZW4ga2Fubiwgd2llIGRlciBTQzUyMCAoYWxzbyBBdWZ0ZWlsZW4gdm9uIElPLVp1Z3JpZmZlbgogYXVmIElTQS0gdW5kIFBDSS1aeWtsZW4pCiAqLwojZGVmaW5lIENGR19JU0FfSU9fQkFTRV9BRERSRVNTICAweEU4MDAwMDAwCi8qI2RlZmluZSBDRkdfSVNBX0lPX0JBU0VfQUREUkVTUyAgMHg3OTAwMDAwMCAqLwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiBWaWRlbyBzdXBwb3J0CiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgojaWZkZWYgVVNFX1ZHQV9HUkFQSElDUwojZGVmaW5lIENPTkZJR19WSURFTwkJLyogVG8gZW5hYmxlIHZpZGVvIGNvbnRyb2xsZXIgc3VwcG9ydCAqLwojZGVmaW5lIENPTkZJR19WSURFT19DVDY5MDAwCiNkZWZpbmUgQ09ORklHX0NGQl9DT05TT0xFCi8qICNkZWZpbmUgQ09ORklHX1ZJREVPX0xPR08gKi8KI2RlZmluZSBDT05GSUdfVkdBX0FTX1NJTkdMRV9ERVZJQ0UKI2RlZmluZSBDT05GSUdfVklERU9fU1dfQ1VSU09SCi8qICNkZWZpbmUgQ09ORklHX1ZJREVPX0hXX0NVUlNPUiAqLwojZGVmaW5lIENPTkZJR19WSURFT19PTkJPQVJECS8qIFZpZGVvIGNvbnRyb2xsZXIgaXMgb24tYm9hcmQgKi8KCiNkZWZpbmUgVklERU9fSFdfUkVDVEZJTEwKI2RlZmluZSBWSURFT19IV19CSVRCTFQKCiNlbmRpZgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiBJZGVudAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwojZGVmaW5lIENPTkZJR19TQzNfVkVSU0lPTiAicjEuNCIKCiNkZWZpbmUgUE9TVF9PVVQoeCkgKCooKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIqKSgweDc5MDAwMDgwKSk9eCkKCiNlbmRpZgkvKiBfX0NPTkZJR19IICovCg==