LyoKICogIGFybWJvb3QgLSBTdGFydHVwIENvZGUgZm9yIE9NUDI0MjAvQVJNMTEzNiBDUFUtY29yZQogKgogKiAgQ29weXJpZ2h0IChjKSAyMDA0CVRleGFzIEluc3RydW1lbnRzIDxyLXdvb2RydWZmMkB0aS5jb20+CiAqCiAqICBDb3B5cmlnaHQgKGMpIDIwMDEJTWFyaXVzIEdy9mdlciA8bWFnQHN5c2dvLmRlPgogKiAgQ29weXJpZ2h0IChjKSAyMDAyCUFsZXggWvxwa2UgPGF6dUBzeXNnby5kZT4KICogIENvcHlyaWdodCAoYykgMjAwMglHYXJ5IEplbm5lam9obiA8Z2FyeWpAZGVueC5kZT4KICogIENvcHlyaWdodCAoYykgMjAwMwlSaWNoYXJkIFdvb2RydWZmIDxyLXdvb2RydWZmMkB0aS5jb20+CiAqICBDb3B5cmlnaHQgKGMpIDIwMDMJS3NoaXRpaiA8a3NoaXRpakB0aS5jb20+CiAqCiAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCiAqIHByb2plY3QuCiAqCiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCSBTZWUgdGhlCiAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCiAqIE1BIDAyMTExLTEzMDcgVVNBCiAqLwoKI2luY2x1ZGUgPGNvbmZpZy5oPgojaW5jbHVkZSA8dmVyc2lvbi5oPgouZ2xvYmwgX3N0YXJ0Cl9zdGFydDogYglyZXNldAojaWZkZWYgQ09ORklHX1BSRUxPQURFUgoJbGRyCXBjLCBfaGFuZwoJbGRyCXBjLCBfaGFuZwoJbGRyCXBjLCBfaGFuZwoJbGRyCXBjLCBfaGFuZwoJbGRyCXBjLCBfaGFuZwoJbGRyCXBjLCBfaGFuZwoJbGRyCXBjLCBfaGFuZwoKX2hhbmc6Cgkud29yZAlkb19oYW5nCgkud29yZAkweDEyMzQ1Njc4Cgkud29yZAkweDEyMzQ1Njc4Cgkud29yZAkweDEyMzQ1Njc4Cgkud29yZAkweDEyMzQ1Njc4Cgkud29yZAkweDEyMzQ1Njc4Cgkud29yZAkweDEyMzQ1Njc4Cgkud29yZAkweDEyMzQ1Njc4CS8qIG5vdyAxNio0PTY0ICovCiNlbHNlCglsZHIJcGMsIF91bmRlZmluZWRfaW5zdHJ1Y3Rpb24KCWxkcglwYywgX3NvZnR3YXJlX2ludGVycnVwdAoJbGRyCXBjLCBfcHJlZmV0Y2hfYWJvcnQKCWxkcglwYywgX2RhdGFfYWJvcnQKCWxkcglwYywgX25vdF91c2VkCglsZHIJcGMsIF9pcnEKCWxkcglwYywgX2ZpcQoKX3VuZGVmaW5lZF9pbnN0cnVjdGlvbjogLndvcmQgdW5kZWZpbmVkX2luc3RydWN0aW9uCl9zb2Z0d2FyZV9pbnRlcnJ1cHQ6CS53b3JkIHNvZnR3YXJlX2ludGVycnVwdApfcHJlZmV0Y2hfYWJvcnQ6CS53b3JkIHByZWZldGNoX2Fib3J0Cl9kYXRhX2Fib3J0OgkJLndvcmQgZGF0YV9hYm9ydApfbm90X3VzZWQ6CQkud29yZCBub3RfdXNlZApfaXJxOgkJCS53b3JkIGlycQpfZmlxOgkJCS53b3JkIGZpcQpfcGFkOgkJCS53b3JkIDB4MTIzNDU2NzggLyogbm93IDE2KjQ9NjQgKi8KI2VuZGlmCS8qIENPTkZJR19QUkVMT0FERVIgKi8KLmdsb2JhbCBfZW5kX3ZlY3QKX2VuZF92ZWN0OgoKCS5iYWxpZ25sIDE2LDB4ZGVhZGJlZWYKLyoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICoKICogU3RhcnR1cCBDb2RlIChyZXNldCB2ZWN0b3IpCiAqCiAqIGRvIGltcG9ydGFudCBpbml0IG9ubHkgaWYgd2UgZG9uJ3Qgc3RhcnQgZnJvbSBtZW1vcnkhCiAqIHNldHVwIE1lbW9yeSBhbmQgYm9hcmQgc3BlY2lmaWMgYml0cyBwcmlvciB0byByZWxvY2F0aW9uLgogKiByZWxvY2F0ZSBhcm1ib290IHRvIHJhbQogKiBzZXR1cCBzdGFjawogKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKi8KCi5nbG9ibCBfVEVYVF9CQVNFCl9URVhUX0JBU0U6Cgkud29yZAlDT05GSUdfU1lTX1RFWFRfQkFTRQoKI2lmIGRlZmluZWQoQ09ORklHX1NZU19BUk1fV0lUSE9VVF9SRUxPQykKLmdsb2JsIF9hcm1ib290X3N0YXJ0Cl9hcm1ib290X3N0YXJ0OgoJLndvcmQgX3N0YXJ0CiNlbmRpZgoKLyoKICogVGhlc2UgYXJlIGRlZmluZWQgaW4gdGhlIGJvYXJkLXNwZWNpZmljIGxpbmtlciBzY3JpcHQuCiAqLwouZ2xvYmwgX2Jzc19zdGFydApfYnNzX3N0YXJ0OgoJLndvcmQgX19ic3Nfc3RhcnQKCi5nbG9ibCBfYnNzX2VuZApfYnNzX2VuZDoKCS53b3JkIF9lbmQKCiNpZiAhZGVmaW5lZChDT05GSUdfU1lTX0FSTV9XSVRIT1VUX1JFTE9DKQouZ2xvYmwgX2RhdGFyZWxfc3RhcnQKX2RhdGFyZWxfc3RhcnQ6Cgkud29yZCBfX2RhdGFyZWxfc3RhcnQKCi5nbG9ibCBfZGF0YXJlbHJvbG9jYWxfc3RhcnQKX2RhdGFyZWxyb2xvY2FsX3N0YXJ0OgoJLndvcmQgX19kYXRhcmVscm9sb2NhbF9zdGFydAoKLmdsb2JsIF9kYXRhcmVsbG9jYWxfc3RhcnQKX2RhdGFyZWxsb2NhbF9zdGFydDoKCS53b3JkIF9fZGF0YXJlbGxvY2FsX3N0YXJ0CgouZ2xvYmwgX2RhdGFyZWxyb19zdGFydApfZGF0YXJlbHJvX3N0YXJ0OgoJLndvcmQgX19kYXRhcmVscm9fc3RhcnQKCi5nbG9ibCBfZ290X3N0YXJ0Cl9nb3Rfc3RhcnQ6Cgkud29yZCBfX2dvdF9zdGFydAoKLmdsb2JsIF9nb3RfZW5kCl9nb3RfZW5kOgoJLndvcmQgX19nb3RfZW5kCiNlbmRpZgoKI2lmZGVmIENPTkZJR19VU0VfSVJRCi8qIElSUSBzdGFjayBtZW1vcnkgKGNhbGN1bGF0ZWQgYXQgcnVuLXRpbWUpICovCi5nbG9ibCBJUlFfU1RBQ0tfU1RBUlQKSVJRX1NUQUNLX1NUQVJUOgoJLndvcmQJMHgwYmFkYzBkZQoKLyogSVJRIHN0YWNrIG1lbW9yeSAoY2FsY3VsYXRlZCBhdCBydW4tdGltZSkgKi8KLmdsb2JsIEZJUV9TVEFDS19TVEFSVApGSVFfU1RBQ0tfU1RBUlQ6Cgkud29yZCAweDBiYWRjMGRlCiNlbmRpZgoKI2lmICFkZWZpbmVkKENPTkZJR19TWVNfQVJNX1dJVEhPVVRfUkVMT0MpCi8qIElSUSBzdGFjayBtZW1vcnkgKGNhbGN1bGF0ZWQgYXQgcnVuLXRpbWUpICsgOCBieXRlcyAqLwouZ2xvYmwgSVJRX1NUQUNLX1NUQVJUX0lOCklSUV9TVEFDS19TVEFSVF9JTjoKCS53b3JkCTB4MGJhZGMwZGUKI2VuZGlmCgojaWYgIWRlZmluZWQoQ09ORklHX1NZU19BUk1fV0lUSE9VVF9SRUxPQykKLyoKICogdGhlIGFjdHVhbCByZXNldCBjb2RlCiAqLwoKcmVzZXQ6CgkvKgoJICogc2V0IHRoZSBjcHUgdG8gU1ZDMzIgbW9kZQoJICovCgltcnMJcjAsY3BzcgoJYmljCXIwLHIwLCMweDFmCglvcnIJcjAscjAsIzB4ZDMKCW1zcgljcHNyLHIwCgojaWZkZWYgQ09ORklHX09NQVAyNDIwSDQKICAgICAgIC8qIENvcHkgdmVjdG9ycyB0byBtYXNrIFJPTSBpbmRpcmVjdCBhZGRyICovCglhZHIJcjAsIF9zdGFydAkJLyogcjAgPC0gY3VycmVudCBwb3NpdGlvbiBvZiBjb2RlICAgKi8KCQlhZGQgICAgIHIwLCByMCwgIzQJCQkJLyogc2tpcCByZXNldCB2ZWN0b3IJCQkqLwoJbW92CXIyLCAjNjQJCQkvKiByMiA8LSBzaXplIHRvIGNvcHkgICovCglhZGQJcjIsIHIwLCByMgkJLyogcjIgPC0gc291cmNlIGVuZCBhZGRyZXNzCSAgICAqLwoJbW92CXIxLCAjU1JBTV9PRkZTRVQwCSAgLyogYnVpbGQgdmVjdCBhZGRyICovCgltb3YJcjMsICNTUkFNX09GRlNFVDEKCWFkZAlyMSwgcjEsIHIzCgltb3YJcjMsICNTUkFNX09GRlNFVDIKCWFkZAlyMSwgcjEsIHIzCm5leHQ6CglsZG1pYQlyMCEsIHtyMy1yMTB9CQkvKiBjb3B5IGZyb20gc291cmNlIGFkZHJlc3MgW3IwXSAgICAqLwoJc3RtaWEJcjEhLCB7cjMtcjEwfQkJLyogY29weSB0byAgIHRhcmdldCBhZGRyZXNzIFtyMV0gICAgKi8KCWNtcAlyMCwgcjIJCQkvKiB1bnRpbCBzb3VyY2UgZW5kIGFkZHJlc3MgW3IyXSAgICAqLwoJYm5lCW5leHQJCQkvKiBsb29wIHVudGlsIGVxdWFsICovCglibAljcHlfY2xrX2NvZGUJCS8qIHB1dCBkcGxsIGFkanVzdCBjb2RlIGJlaGluZCB2ZWN0b3JzICovCiNlbmRpZgoJLyogdGhlIG1hc2sgUk9NIGNvZGUgc2hvdWxkIGhhdmUgUExMIGFuZCBvdGhlcnMgc3RhYmxlICovCiNpZm5kZWYgQ09ORklHX1NLSVBfTE9XTEVWRUxfSU5JVAoJYmwgIGNwdV9pbml0X2NyaXQKI2VuZGlmCgovKiBTZXQgc3RhY2twb2ludGVyIGluIGludGVybmFsIFJBTSB0byBjYWxsIGJvYXJkX2luaXRfZiAqLwpjYWxsX2JvYXJkX2luaXRfZjoKCWxkcglzcCwgPShDT05GSUdfU1lTX0lOSVRfU1BfQUREUikKCWxkcglyMCw9MHgwMDAwMDAwMAoKI2lmZGVmIENPTkZJR19OQU5EX1NQTAoJYmwJbmFuZF9ib290CiNlbHNlCiNpZmRlZiBDT05GSUdfT05FTkFORF9JUEwKCWJsCXN0YXJ0X29uZWJvb3QKI2Vsc2UKCWJsCWJvYXJkX2luaXRfZgojZW5kaWYgLyogQ09ORklHX09ORU5BTkRfSVBMICovCiNlbmRpZiAvKiBDT05GSUdfTkFORF9TUEwgKi8KCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KCi8qCiAqIHZvaWQgcmVsb2NhdGVfY29kZSAoYWRkcl9zcCwgZ2QsIGFkZHJfbW9uaSkKICoKICogVGhpcyAiZnVuY3Rpb24iIGRvZXMgbm90IHJldHVybiwgaW5zdGVhZCBpdCBjb250aW51ZXMgaW4gUkFNCiAqIGFmdGVyIHJlbG9jYXRpbmcgdGhlIG1vbml0b3IgY29kZS4KICoKICovCgkuZ2xvYmwJcmVsb2NhdGVfY29kZQpyZWxvY2F0ZV9jb2RlOgoJbW92CXI0LCByMAkvKiBzYXZlIGFkZHJfc3AgKi8KCW1vdglyNSwgcjEJLyogc2F2ZSBhZGRyIG9mIGdkICovCgltb3YJcjYsIHIyCS8qIHNhdmUgYWRkciBvZiBkZXN0aW5hdGlvbiAqLwoJbW92CXI3LCByMgkvKiBzYXZlIGFkZHIgb2YgZGVzdGluYXRpb24gKi8KCgkvKiBTZXQgdXAgdGhlIHN0YWNrCQkJCQkJICAgICovCnN0YWNrX3NldHVwOgoJbW92CXNwLCByNAoKCWFkcglyMCwgX3N0YXJ0CglsZHIJcjIsIF9URVhUX0JBU0UKCWxkcglyMywgX2Jzc19zdGFydAoJc3ViCXIyLCByMywgcjIJCS8qIHIyIDwtIHNpemUgb2YgYXJtYm9vdAkgICAgKi8KCWFkZAlyMiwgcjAsIHIyCQkvKiByMiA8LSBzb3VyY2UgZW5kIGFkZHJlc3MJICAgICovCgljbXAJcjAsIHI2CgliZXEJY2xlYXJfYnNzCgojaWZuZGVmIENPTkZJR19TS0lQX1JFTE9DQVRFX1VCT09UCmNvcHlfbG9vcDoKCWxkbWlhCXIwISwge3I5LXIxMH0JCS8qIGNvcHkgZnJvbSBzb3VyY2UgYWRkcmVzcyBbcjBdICAgICovCglzdG1pYQlyNiEsIHtyOS1yMTB9CQkvKiBjb3B5IHRvICAgdGFyZ2V0IGFkZHJlc3MgW3IxXSAgICAqLwoJY21wCXIwLCByMgkJCS8qIHVudGlsIHNvdXJjZSBlbmQgYWRkcmVzcyBbcjJdICAgICovCglibG8JY29weV9sb29wCgojaWZuZGVmIENPTkZJR19QUkVMT0FERVIKCS8qIGZpeCBnb3QgZW50cmllcyAqLwoJbGRyCXIxLCBfVEVYVF9CQVNFCgltb3YJcjAsIHI3CQkJLyogcmVsb2MgYWRkciAqLwoJbGRyCXIyLCBfZ290X3N0YXJ0CQkvKiBhZGRyIGluIEZsYXNoICovCglsZHIJcjMsIF9nb3RfZW5kCQkvKiBhZGRyIGluIEZsYXNoICovCglzdWIJcjMsIHIzLCByMQoJYWRkCXIzLCByMywgcjAKCXN1YglyMiwgcjIsIHIxCglhZGQJcjIsIHIyLCByMAoKZml4bG9vcDoKCWxkcglyNCwgW3IyXQoJc3ViCXI0LCByNCwgcjEKCWFkZAlyNCwgcjQsIHIwCglzdHIJcjQsIFtyMl0KCWFkZAlyMiwgcjIsICM0CgljbXAJcjIsIHIzCglibmUJZml4bG9vcAojZW5kaWYKI2VuZGlmCS8qICNpZm5kZWYgQ09ORklHX1NLSVBfUkVMT0NBVEVfVUJPT1QgKi8KCmNsZWFyX2JzczoKI2lmbmRlZiBDT05GSUdfUFJFTE9BREVSCglsZHIJcjAsIF9ic3Nfc3RhcnQKCWxkcglyMSwgX2Jzc19lbmQKCWxkcglyMywgX1RFWFRfQkFTRQkJLyogVGV4dCBiYXNlICovCgltb3YJcjQsIHI3CQkJLyogcmVsb2MgYWRkciAqLwoJc3ViCXIwLCByMCwgcjMKCWFkZAlyMCwgcjAsIHI0CglzdWIJcjEsIHIxLCByMwoJYWRkCXIxLCByMSwgcjQKCW1vdglyMiwgIzB4MDAwMDAwMDAJCS8qIGNsZWFyCQkJICAgICovCgpjbGJzc19sOnN0cglyMiwgW3IwXQkJLyogY2xlYXIgbG9vcC4uLgkJICAgICovCglhZGQJcjAsIHIwLCAjNAoJY21wCXIwLCByMQoJYm5lCWNsYnNzX2wKI2VuZGlmCS8qICNpZm5kZWYgQ09ORklHX1BSRUxPQURFUiAqLwoKLyoKICogV2UgYXJlIGRvbmUuIERvIG5vdCByZXR1cm4sIGluc3RlYWQgYnJhbmNoIHRvIHNlY29uZCBwYXJ0IG9mIGJvYXJkCiAqIGluaXRpYWxpemF0aW9uLCBub3cgcnVubmluZyBmcm9tIFJBTS4KICovCiNpZmRlZiBDT05GSUdfTkFORF9TUEwKCWxkciAgICAgcGMsIF9uYW5kX2Jvb3QKCl9uYW5kX2Jvb3Q6IC53b3JkIG5hbmRfYm9vdAojZWxzZQpqdW1wXzJfcmFtOgoJbGRyCXIwLCBfVEVYVF9CQVNFCglsZHIJcjIsIF9ib2FyZF9pbml0X3IKCXN1YglyMiwgcjIsIHIwCglhZGQJcjIsIHIyLCByNwkvKiBwb3NpdGlvbiBmcm9tIGJvYXJkX2luaXRfciBpbiBSQU0gKi8KCS8qIHNldHVwIHBhcmFtZXRlcnMgZm9yIGJvYXJkX2luaXRfciAqLwoJbW92CXIwLCByNQkJLyogZ2RfdCAqLwoJbW92CXIxLCByNwkJLyogZGVzdF9hZGRyICovCgkvKiBqdW1wIHRvIGl0IC4uLiAqLwoJbW92CWxyLCByMgoJbW92CXBjLCBscgoKX2JvYXJkX2luaXRfcjogLndvcmQgYm9hcmRfaW5pdF9yCiNlbmRpZgojZWxzZSAvKiAjaWYgIWRlZmluZWQoQ09ORklHX1NZU19BUk1fV0lUSE9VVF9SRUxPQykgKi8KLyoKICogdGhlIGFjdHVhbCByZXNldCBjb2RlCiAqLwoKcmVzZXQ6CgkvKgoJICogc2V0IHRoZSBjcHUgdG8gU1ZDMzIgbW9kZQoJICovCgltcnMJcjAsY3BzcgoJYmljCXIwLHIwLCMweDFmCglvcnIJcjAscjAsIzB4ZDMKCW1zcgljcHNyLHIwCgojaWZkZWYgQ09ORklHX09NQVAyNDIwSDQKICAgICAgIC8qIENvcHkgdmVjdG9ycyB0byBtYXNrIFJPTSBpbmRpcmVjdCBhZGRyICovCglhZHIJcjAsIF9zdGFydAkJLyogcjAgPC0gY3VycmVudCBwb3NpdGlvbiBvZiBjb2RlICAgKi8KCQlhZGQgICAgIHIwLCByMCwgIzQJCQkJLyogc2tpcCByZXNldCB2ZWN0b3IJCQkqLwoJbW92CXIyLCAjNjQJCQkvKiByMiA8LSBzaXplIHRvIGNvcHkgICovCglhZGQJcjIsIHIwLCByMgkJLyogcjIgPC0gc291cmNlIGVuZCBhZGRyZXNzCSAgICAqLwoJbW92CXIxLCAjU1JBTV9PRkZTRVQwCSAgLyogYnVpbGQgdmVjdCBhZGRyICovCgltb3YJcjMsICNTUkFNX09GRlNFVDEKCWFkZAlyMSwgcjEsIHIzCgltb3YJcjMsICNTUkFNX09GRlNFVDIKCWFkZAlyMSwgcjEsIHIzCm5leHQ6CglsZG1pYQlyMCEsIHtyMy1yMTB9CQkvKiBjb3B5IGZyb20gc291cmNlIGFkZHJlc3MgW3IwXSAgICAqLwoJc3RtaWEJcjEhLCB7cjMtcjEwfQkJLyogY29weSB0byAgIHRhcmdldCBhZGRyZXNzIFtyMV0gICAgKi8KCWNtcAlyMCwgcjIJCQkvKiB1bnRpbCBzb3VyY2UgZW5kIGFkZHJlc3MgW3IyXSAgICAqLwoJYm5lCW5leHQJCQkvKiBsb29wIHVudGlsIGVxdWFsICovCglibAljcHlfY2xrX2NvZGUJCS8qIHB1dCBkcGxsIGFkanVzdCBjb2RlIGJlaGluZCB2ZWN0b3JzICovCiNlbmRpZgoJLyogdGhlIG1hc2sgUk9NIGNvZGUgc2hvdWxkIGhhdmUgUExMIGFuZCBvdGhlcnMgc3RhYmxlICovCiNpZm5kZWYgQ09ORklHX1NLSVBfTE9XTEVWRUxfSU5JVAoJYmwgIGNwdV9pbml0X2NyaXQKI2VuZGlmCgojaWZuZGVmIENPTkZJR19TS0lQX1JFTE9DQVRFX1VCT09UCnJlbG9jYXRlOgkJCQkvKiByZWxvY2F0ZSBVLUJvb3QgdG8gUkFNCSAgICAqLwoJYWRyCXIwLCBfc3RhcnQJCS8qIHIwIDwtIGN1cnJlbnQgcG9zaXRpb24gb2YgY29kZSAgICovCglsZHIJcjEsIF9URVhUX0JBU0UJCS8qIHRlc3QgaWYgd2UgcnVuIGZyb20gZmxhc2ggb3IgUkFNICovCgljbXAJcjAsIHIxCQkJLyogZG9uJ3QgcmVsb2MgZHVyaW5nIGRlYnVnCSAgICAqLwojaWZuZGVmIENPTkZJR19QUkVMT0FERVIKCWJlcQlzdGFja19zZXR1cAojZW5kaWYJLyogQ09ORklHX1BSRUxPQURFUiAqLwoKCWxkcglyMiwgX2FybWJvb3Rfc3RhcnQKCWxkcglyMywgX2Jzc19zdGFydAoJc3ViCXIyLCByMywgcjIJCS8qIHIyIDwtIHNpemUgb2YgYXJtYm9vdAkgICAgKi8KCWFkZAlyMiwgcjAsIHIyCQkvKiByMiA8LSBzb3VyY2UgZW5kIGFkZHJlc3MJICAgICovCgpjb3B5X2xvb3A6CglsZG1pYQlyMCEsIHtyMy1yMTB9CQkvKiBjb3B5IGZyb20gc291cmNlIGFkZHJlc3MgW3IwXSAgICAqLwoJc3RtaWEJcjEhLCB7cjMtcjEwfQkJLyogY29weSB0byAgIHRhcmdldCBhZGRyZXNzIFtyMV0gICAgKi8KCWNtcAlyMCwgcjIJCQkvKiB1bnRpbCBzb3VyY2UgZW5kIGFkZHJlc3MgW3IyXSAgICAqLwoJYmxvCWNvcHlfbG9vcAojZW5kaWYJLyogQ09ORklHX1NLSVBfUkVMT0NBVEVfVUJPT1QgKi8KCgkvKiBTZXQgdXAgdGhlIHN0YWNrCQkJCQkJICAgICovCnN0YWNrX3NldHVwOgoJbGRyCXIwLCBfVEVYVF9CQVNFCQkvKiB1cHBlciAxMjggS2lCOiByZWxvY2F0ZWQgdWJvb3QgICAqLwojaWZkZWYgQ09ORklHX1BSRUxPQURFUgoJc3ViCXNwLCByMCwgIzEyOAkJLyogbGVhdmUgMzIgd29yZHMgZm9yIGFib3J0LXN0YWNrICAgKi8KI2Vsc2UKCXN1YglyMCwgcjAsICNDT05GSUdfU1lTX01BTExPQ19MRU4gLyogbWFsbG9jIGFyZWEJCQkgICAgKi8KCXN1YglyMCwgcjAsICNDT05GSUdfU1lTX0dCTF9EQVRBX1NJWkUgLyogYmRpbmZvCQkJICAgICovCiNpZmRlZiBDT05GSUdfVVNFX0lSUQoJc3ViCXIwLCByMCwgIyhDT05GSUdfU1RBQ0tTSVpFX0lSUStDT05GSUdfU1RBQ0tTSVpFX0ZJUSkKI2VuZGlmCglzdWIJc3AsIHIwLCAjMTIJCS8qIGxlYXZlIDMgd29yZHMgZm9yIGFib3J0LXN0YWNrICAgICovCiNlbmRpZgkvKiBDT05GSUdfUFJFTE9BREVSICovCgliaWMJc3AsIHNwLCAjNwkJLyogOC1ieXRlIGFsaWdubWVudCBmb3IgQUJJIGNvbXBsaWFuY2UgKi8KCmNsZWFyX2JzczoKCWxkcglyMCwgX2Jzc19zdGFydAkJLyogZmluZCBzdGFydCBvZiBic3Mgc2VnbWVudAkgICAgKi8KCWxkcglyMSwgX2Jzc19lbmQJCS8qIHN0b3AgaGVyZQkJCSAgICAqLwoJbW92CXIyLCAjMHgwMDAwMDAwMAkJLyogY2xlYXIJCQkgICAgKi8KCiNpZm5kZWYgQ09ORklHX1BSRUxPQURFUgpjbGJzc19sOnN0cglyMiwgW3IwXQkJLyogY2xlYXIgbG9vcC4uLgkJICAgICovCglhZGQJcjAsIHIwLCAjNAoJY21wCXIwLCByMQoJYm5lCWNsYnNzX2wKI2VuZGlmCgoJbGRyCXBjLCBfc3RhcnRfYXJtYm9vdAoKI2lmZGVmIENPTkZJR19OQU5EX1NQTApfc3RhcnRfYXJtYm9vdDogLndvcmQgbmFuZF9ib290CiNlbHNlCiNpZmRlZiBDT05GSUdfT05FTkFORF9JUEwKX3N0YXJ0X2FybWJvb3Q6IC53b3JkIHN0YXJ0X29uZWJvb3QKI2Vsc2UKX3N0YXJ0X2FybWJvb3Q6IC53b3JkIHN0YXJ0X2FybWJvb3QKI2VuZGlmIC8qIENPTkZJR19PTkVOQU5EX0lQTCAqLwojZW5kaWYgLyogQ09ORklHX05BTkRfU1BMICovCgojZW5kaWYgLyogI2lmICFkZWZpbmVkKENPTkZJR19TWVNfQVJNX1dJVEhPVVRfUkVMT0MpICovCgovKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKgogKiBDUFVfaW5pdF9jcml0aWNhbCByZWdpc3RlcnMKICoKICogc2V0dXAgaW1wb3J0YW50IHJlZ2lzdGVycwogKiBzZXR1cCBtZW1vcnkgdGltaW5nCiAqCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqLwojaWZuZGVmIENPTkZJR19TS0lQX0xPV0xFVkVMX0lOSVQKY3B1X2luaXRfY3JpdDoKCS8qCgkgKiBmbHVzaCB2NCBJL0QgY2FjaGVzCgkgKi8KCW1vdglyMCwgIzAKCW1jcglwMTUsIDAsIHIwLCBjNywgYzcsIDAJLyogSW52YWxpZGF0ZSBJK0QrQlRCIGNhY2hlcyAqLwoJbWNyCXAxNSwgMCwgcjAsIGM4LCBjNywgMAkvKiBJbnZhbGlkYXRlIFVuaWZpZWQgVExCICovCgoJLyoKCSAqIGRpc2FibGUgTU1VIHN0dWZmIGFuZCBjYWNoZXMKCSAqLwoJbXJjCXAxNSwgMCwgcjAsIGMxLCBjMCwgMAoJYmljCXIwLCByMCwgIzB4MDAwMDIzMDAJQCBjbGVhciBiaXRzIDEzLCA5OjggKC0tVi0gLS1SUykKCWJpYwlyMCwgcjAsICMweDAwMDAwMDg3CUAgY2xlYXIgYml0cyA3LCAyOjAgKEItLS0gLUNBTSkKCW9ycglyMCwgcjAsICMweDAwMDAwMDAyCUAgc2V0IGJpdCAyIChBKSBBbGlnbgoJb3JyCXIwLCByMCwgIzB4MDAwMDEwMDAJQCBzZXQgYml0IDEyIChJKSBJLUNhY2hlCgltY3IJcDE1LCAwLCByMCwgYzEsIGMwLCAwCgoJLyoKCSAqIEp1bXAgdG8gYm9hcmQgc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24uLi4gVGhlIE1hc2sgUk9NIHdpbGwgaGF2ZSBhbHJlYWR5IGluaXRpYWxpemVkCgkgKiBiYXNpYyBtZW1vcnkuICBHbyBoZXJlIHRvIGJ1bXAgdXAgY2xvY2sgcmF0ZSBhbmQgaGFuZGxlIHdha2UgdXAgY29uZGl0aW9ucy4KCSAqLwoJbW92CWlwLCBscgkJLyogcGVyc2V2ZXJlIGxpbmsgcmVnIGFjcm9zcyBjYWxsICovCglibAlsb3dsZXZlbF9pbml0CS8qIGdvIHNldHVwIHBsbCxtdXgsbWVtb3J5ICovCgltb3YJbHIsIGlwCQkvKiByZXN0b3JlIGxpbmsgKi8KCW1vdglwYywgbHIJCS8qIGJhY2sgdG8gbXkgY2FsbGVyICovCiNlbmRpZiAvKiBDT05GSUdfU0tJUF9MT1dMRVZFTF9JTklUICovCgojaWZuZGVmIENPTkZJR19QUkVMT0FERVIKLyoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICoKICogSW50ZXJydXB0IGhhbmRsaW5nCiAqCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqLwpACkAgSVJRIHN0YWNrIGZyYW1lLgpACiNkZWZpbmUgU19GUkFNRV9TSVpFCTcyCgojZGVmaW5lIFNfT0xEX1IwCTY4CiNkZWZpbmUgU19QU1IJCTY0CiNkZWZpbmUgU19QQwkJNjAKI2RlZmluZSBTX0xSCQk1NgojZGVmaW5lIFNfU1AJCTUyCgojZGVmaW5lIFNfSVAJCTQ4CiNkZWZpbmUgU19GUAkJNDQKI2RlZmluZSBTX1IxMAkJNDAKI2RlZmluZSBTX1I5CQkzNgojZGVmaW5lIFNfUjgJCTMyCiNkZWZpbmUgU19SNwkJMjgKI2RlZmluZSBTX1I2CQkyNAojZGVmaW5lIFNfUjUJCTIwCiNkZWZpbmUgU19SNAkJMTYKI2RlZmluZSBTX1IzCQkxMgojZGVmaW5lIFNfUjIJCTgKI2RlZmluZSBTX1IxCQk0CiNkZWZpbmUgU19SMAkJMAoKI2RlZmluZSBNT0RFX1NWQyAweDEzCiNkZWZpbmUgSV9CSVQJIDB4ODAKCi8qCiAqIHVzZSBiYWRfc2F2ZV91c2VyX3JlZ3MgZm9yIGFib3J0L3ByZWZldGNoL3VuZGVmL3N3aSAuLi4KICogdXNlIGlycV9zYXZlX3VzZXJfcmVncyAvIGlycV9yZXN0b3JlX3VzZXJfcmVncyBmb3IgSVJRL0ZJUSBoYW5kbGluZwogKi8KCgkubWFjcm8JYmFkX3NhdmVfdXNlcl9yZWdzCglzdWIJc3AsIHNwLCAjU19GUkFNRV9TSVpFCQlAIGNhcnZlIG91dCBhIGZyYW1lIG9uIGN1cnJlbnQgdXNlciBzdGFjawoJc3RtaWEJc3AsIHtyMCAtIHIxMn0JCQlAIFNhdmUgdXNlciByZWdpc3RlcnMgKG5vdyBpbiBzdmMgbW9kZSkgcjAtcjEyCgojaWYgIWRlZmluZWQoQ09ORklHX1NZU19BUk1fV0lUSE9VVF9SRUxPQykKCWxkcglyMiwgSVJRX1NUQUNLX1NUQVJUX0lOCQlAIHNldCBiYXNlIDIgd29yZHMgaW50byBhYm9ydCBzdGFjawojZWxzZQoJbGRyCXIyLCBfYXJtYm9vdF9zdGFydAoJc3ViCXIyLCByMiwgIyhDT05GSUdfU1lTX01BTExPQ19MRU4pCglzdWIJcjIsIHIyLCAjKENPTkZJR19TWVNfR0JMX0RBVEFfU0laRSs4KQlAIHNldCBiYXNlIDIgd29yZHMgaW50byBhYm9ydCBzdGFjawojZW5kaWYKCWxkbWlhCXIyLCB7cjIgLSByM30JCQlAIGdldCB2YWx1ZXMgZm9yICJhYm9ydGVkIiBwYyBhbmQgY3BzciAoaW50byBwYXJtIHJlZ3MpCglhZGQJcjAsIHNwLCAjU19GUkFNRV9TSVpFCQlAIGdyYWIgcG9pbnRlciB0byBvbGQgc3RhY2sKCglhZGQJcjUsIHNwLCAjU19TUAoJbW92CXIxLCBscgoJc3RtaWEJcjUsIHtyMCAtIHIzfQkJCUAgc2F2ZSBzcF9TVkMsIGxyX1NWQywgcGMsIGNwc3IKCW1vdglyMCwgc3AJCQkJQCBzYXZlIGN1cnJlbnQgc3RhY2sgaW50byByMCAocGFyYW0gcmVnaXN0ZXIpCgkuZW5kbQoKCS5tYWNybwlpcnFfc2F2ZV91c2VyX3JlZ3MKCXN1YglzcCwgc3AsICNTX0ZSQU1FX1NJWkUKCXN0bWlhCXNwLCB7cjAgLSByMTJ9CQkJQCBDYWxsaW5nIHIwLXIxMgoJYWRkCXI4LCBzcCwgI1NfUEMJCQlAICEhISEgUjggTkVFRFMgdG8gYmUgc2F2ZWQgISEhISBhIHJlc2VydmVkIHN0YWNrIHNwb3Qgd291bGQgYmUgZ29vZC4KCXN0bWRiCXI4LCB7c3AsIGxyfV4JCQlAIENhbGxpbmcgU1AsIExSCglzdHIJbHIsIFtyOCwgIzBdCQkJQCBTYXZlIGNhbGxpbmcgUEMKCW1ycwlyNiwgc3BzcgoJc3RyCXI2LCBbcjgsICM0XQkJCUAgU2F2ZSBDUFNSCglzdHIJcjAsIFtyOCwgIzhdCQkJQCBTYXZlIE9MRF9SMAoJbW92CXIwLCBzcAoJLmVuZG0KCgkubWFjcm8JaXJxX3Jlc3RvcmVfdXNlcl9yZWdzCglsZG1pYQlzcCwge3IwIC0gbHJ9XgkJCUAgQ2FsbGluZyByMCAtIGxyCgltb3YJcjAsIHIwCglsZHIJbHIsIFtzcCwgI1NfUENdCQkJQCBHZXQgUEMKCWFkZAlzcCwgc3AsICNTX0ZSQU1FX1NJWkUKCXN1YnMJcGMsIGxyLCAjNAkJCUAgcmV0dXJuICYgbW92ZSBzcHNyX3N2YyBpbnRvIGNwc3IKCS5lbmRtCgoJLm1hY3JvIGdldF9iYWRfc3RhY2sKI2lmICFkZWZpbmVkKENPTkZJR19TWVNfQVJNX1dJVEhPVVRfUkVMT0MpCglsZHIJcjEzLCBJUlFfU1RBQ0tfU1RBUlRfSU4JCUAgc2V0dXAgb3VyIG1vZGUgc3RhY2sgKGVudGVyIGluIGJhbmtlZCBtb2RlKQojZWxzZQoJbGRyCXIxMywgX2FybWJvb3Rfc3RhcnQJCUAgc2V0dXAgb3VyIG1vZGUgc3RhY2sgKGVudGVyIGluIGJhbmtlZCBtb2RlKQoJc3ViCXIxMywgcjEzLCAjKENPTkZJR19TWVNfTUFMTE9DX0xFTikJQCBtb3ZlIHBhc3QgbWFsbG9jIHBvb2wKCXN1YglyMTMsIHIxMywgIyhDT05GSUdfU1lTX0dCTF9EQVRBX1NJWkUrOCkgQCBtb3ZlIHRvIHJlc2VydmVkIGEgY291cGxlIHNwb3RzIGZvciBhYm9ydCBzdGFjawojZW5kaWYKCglzdHIJbHIsIFtyMTNdCQkJQCBzYXZlIGNhbGxlciBsciBpbiBwb3NpdGlvbiAwIG9mIHNhdmVkIHN0YWNrCgltcnMJbHIsIHNwc3IJCQlAIGdldCB0aGUgc3BzcgoJc3RyCWxyLCBbcjEzLCAjNF0JCQlAIHNhdmUgc3BzciBpbiBwb3NpdGlvbiAxIG9mIHNhdmVkIHN0YWNrCgoJbW92CXIxMywgI01PREVfU1ZDCQkJQCBwcmVwYXJlIFNWQy1Nb2RlCglAIG1zcglzcHNyX2MsIHIxMwoJbXNyCXNwc3IsIHIxMwkJCUAgc3dpdGNoIG1vZGVzLCBtYWtlIHN1cmUgbW92ZXMgd2lsbCBleGVjdXRlCgltb3YJbHIsIHBjCQkJCUAgY2FwdHVyZSByZXR1cm4gcGMKCW1vdnMJcGMsIGxyCQkJCUAganVtcCB0byBuZXh0IGluc3RydWN0aW9uICYgc3dpdGNoIG1vZGVzLgoJLmVuZG0KCgkubWFjcm8gZ2V0X2JhZF9zdGFja19zd2kKCXN1YglyMTMsIHIxMywgIzQJCQlAIHNwYWNlIG9uIGN1cnJlbnQgc3RhY2sgZm9yIHNjcmF0Y2ggcmVnLgoJc3RyCXIwLCBbcjEzXQkJCUAgc2F2ZSBSMCdzIHZhbHVlLgojaWYgIWRlZmluZWQoQ09ORklHX1NZU19BUk1fV0lUSE9VVF9SRUxPQykKCWxkcglyMCwgSVJRX1NUQUNLX1NUQVJUX0lOCQlAIGdldCBkYXRhIHJlZ2lvbnMgc3RhcnQKI2Vsc2UKCWxkcglyMCwgX2FybWJvb3Rfc3RhcnQJCUAgZ2V0IGRhdGEgcmVnaW9ucyBzdGFydAoJc3ViCXIwLCByMCwgIyhDT05GSUdfU1lTX01BTExPQ19MRU4pCUAgbW92ZSBwYXN0IG1hbGxvYyBwb29sCglzdWIJcjAsIHIwLCAjKENPTkZJR19TWVNfR0JMX0RBVEFfU0laRSs4KQlAIG1vdmUgcGFzdCBnYmwgYW5kIGEgY291cGxlIHNwb3RzIGZvciBhYm9ydCBzdGFjawojZW5kaWYKCXN0cglsciwgW3IwXQkJCUAgc2F2ZSBjYWxsZXIgbHIgaW4gcG9zaXRpb24gMCBvZiBzYXZlZCBzdGFjawoJbXJzCXIwLCBzcHNyCQkJQCBnZXQgdGhlIHNwc3IKCXN0cglsciwgW3IwLCAjNF0JCQlAIHNhdmUgc3BzciBpbiBwb3NpdGlvbiAxIG9mIHNhdmVkIHN0YWNrCglsZHIJcjAsIFtyMTNdCQkJQCByZXN0b3JlIHIwCglhZGQJcjEzLCByMTMsICM0CQkJQCBwb3Agc3RhY2sgZW50cnkKCS5lbmRtCgoJLm1hY3JvIGdldF9pcnFfc3RhY2sJCQlAIHNldHVwIElSUSBzdGFjawoJbGRyCXNwLCBJUlFfU1RBQ0tfU1RBUlQKCS5lbmRtCgoJLm1hY3JvIGdldF9maXFfc3RhY2sJCQlAIHNldHVwIEZJUSBzdGFjawoJbGRyCXNwLCBGSVFfU1RBQ0tfU1RBUlQKCS5lbmRtCiNlbmRpZgkvKiBDT05GSUdfUFJFTE9BREVSICovCgovKgogKiBleGNlcHRpb24gaGFuZGxlcnMKICovCiNpZmRlZiBDT05GSUdfUFJFTE9BREVSCgkuYWxpZ24JNQpkb19oYW5nOgoJbGRyCXNwLCBfVEVYVF9CQVNFCQkJLyogdXNlIDMyIHdvcmRzIGFib3V0IHN0YWNrICovCglibAloYW5nCQkJCS8qIGhhbmcgYW5kIG5ldmVyIHJldHVybiAqLwojZWxzZQkvKiAhQ09ORklHX1BSRUxPQURFUiAqLwoJLmFsaWduCTUKdW5kZWZpbmVkX2luc3RydWN0aW9uOgoJZ2V0X2JhZF9zdGFjawoJYmFkX3NhdmVfdXNlcl9yZWdzCglibAlkb191bmRlZmluZWRfaW5zdHJ1Y3Rpb24KCgkuYWxpZ24JNQpzb2Z0d2FyZV9pbnRlcnJ1cHQ6CglnZXRfYmFkX3N0YWNrX3N3aQoJYmFkX3NhdmVfdXNlcl9yZWdzCglibAlkb19zb2Z0d2FyZV9pbnRlcnJ1cHQKCgkuYWxpZ24JNQpwcmVmZXRjaF9hYm9ydDoKCWdldF9iYWRfc3RhY2sKCWJhZF9zYXZlX3VzZXJfcmVncwoJYmwJZG9fcHJlZmV0Y2hfYWJvcnQKCgkuYWxpZ24JNQpkYXRhX2Fib3J0OgoJZ2V0X2JhZF9zdGFjawoJYmFkX3NhdmVfdXNlcl9yZWdzCglibAlkb19kYXRhX2Fib3J0CgoJLmFsaWduCTUKbm90X3VzZWQ6CglnZXRfYmFkX3N0YWNrCgliYWRfc2F2ZV91c2VyX3JlZ3MKCWJsCWRvX25vdF91c2VkCgojaWZkZWYgQ09ORklHX1VTRV9JUlEKCgkuYWxpZ24JNQppcnE6CglnZXRfaXJxX3N0YWNrCglpcnFfc2F2ZV91c2VyX3JlZ3MKCWJsCWRvX2lycQoJaXJxX3Jlc3RvcmVfdXNlcl9yZWdzCgoJLmFsaWduCTUKZmlxOgoJZ2V0X2ZpcV9zdGFjawoJLyogc29tZW9uZSBvdWdodCB0byB3cml0ZSBhIG1vcmUgZWZmaWN0aW9uIGZpcV9zYXZlX3VzZXJfcmVncyAqLwoJaXJxX3NhdmVfdXNlcl9yZWdzCglibAlkb19maXEKCWlycV9yZXN0b3JlX3VzZXJfcmVncwoKI2Vsc2UKCgkuYWxpZ24JNQppcnE6CglnZXRfYmFkX3N0YWNrCgliYWRfc2F2ZV91c2VyX3JlZ3MKCWJsCWRvX2lycQoKCS5hbGlnbgk1CmZpcToKCWdldF9iYWRfc3RhY2sKCWJhZF9zYXZlX3VzZXJfcmVncwoJYmwJZG9fZmlxCgojZW5kaWYKCS5hbGlnbiA1Ci5nbG9iYWwgYXJtMTEzNl9jYWNoZV9mbHVzaAphcm0xMTM2X2NhY2hlX2ZsdXNoOgojaWYgIWRlZmluZWQoQ09ORklHX1NZU19OT19JQ0FDSEUpCgkJbWNyCXAxNSwgMCwgcjEsIGM3LCBjNSwgMAlAIGludmFsaWRhdGUgSSBjYWNoZQojZW5kaWYKI2lmICFkZWZpbmVkKENPTkZJR19TWVNfTk9fRENBQ0hFKQoJCW1jcglwMTUsIDAsIHIxLCBjNywgYzE0LCAwCUAgaW52YWxpZGF0ZSBEIGNhY2hlCiNlbmRpZgoJCW1vdglwYywgbHIJCQlAIGJhY2sgdG8gY2FsbGVyCiNlbmRpZgkvKiBDT05GSUdfUFJFTE9BREVSICovCg==