LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKgogKiBDb3B5cmlnaHQoYykgMjAwNyAtIDIwMTEgUmVhbHRlayBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICoKICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAqCiAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAogKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCiAqIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAogKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMCwgVVNBCiAqCiAqCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgoKI2lmbmRlZglfX0hBTERNT1VUU1JDX0hfXwojZGVmaW5lIF9fSEFMRE1PVVRTUkNfSF9fCgovKiAgRGVmaW5pdGlvbiAqLwovKiAgRGVmaW5lIGFsbCB0ZWFtIHN1cHBvcnQgYWJpbGl0eS4gKi8KCi8qICBEZWZpbmUgZm9yIGFsbCB0ZWFtcy4gUGxlYXNlIERlZmluZSB0aGUgY29uc3RhbnQgaW4geW91ciBwcmVjb21wIGhlYWRlci4gKi8KCi8qIGRlZmluZQkJRE1fT0RNX1NVUFBPUlRfQVAJCQkwICovCi8qIGRlZmluZQkJRE1fT0RNX1NVUFBPUlRfQURTTAkJCTAgKi8KLyogZGVmaW5lCQlETV9PRE1fU1VQUE9SVF9DRQkJCTAgKi8KLyogZGVmaW5lCQlETV9PRE1fU1VQUE9SVF9NUAkJCTEgKi8KCi8qICBEZWZpbmUgT0RNIFNXIHRlYW0gc3VwcG9ydCBmbGFnLiAqLwoKLyogIEFudGVubmEgU3dpdGNoIFJlbGF0aXZlIERlZmluaXRpb24uICovCgovKiAgQWRkIG5ldyBmdW5jdGlvbiBTd0FudERpdkNoZWNrODE5MkMoKS4gKi8KLyogIFRoaXMgaXMgdGhlIG1haW4gZnVuY3Rpb24gb2YgQW50ZW5uYSBkaXZlcnNpdHkgZnVuY3Rpb24gYmVmb3JlIGxpbmsuICovCi8qICBNYWlubHksIGl0IGp1c3QgcmV0YWlucyBsYXN0IHNjYW4gcmVzdWx0IGFuZCBzY2FuIGFnYWluLiAqLwovKiAgQWZ0ZXIgdGhhdCwgaXQgY29tcGFyZXMgdGhlIHNjYW4gcmVzdWx0IHRvIHNlZSB3aGljaCBvbmUgZ2V0cyBiZXR0ZXIKICogIFJTU0kuIEl0IHNlbGVjdHMgYW50ZW5uYSB3aXRoIGJldHRlciByZWNlaXZpbmcgcG93ZXIgYW5kIHJldHVybnMgYmV0dGVyCiAqICBzY2FuIHJlc3VsdC4gKi8KCiNkZWZpbmUJVFBfTU9ERQkJCTAKI2RlZmluZQlSU1NJX01PREUJCTEKI2RlZmluZQlUUkFGRklDX0xPVwkJMAojZGVmaW5lCVRSQUZGSUNfSElHSAkJMQoKLyogMyBUeCBQb3dlciBUcmFja2luZyAqLwovKiAzPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiNkZWZpbmUJCURQS19ERUxUQV9NQVBQSU5HX05VTQkxMwojZGVmaW5lCQlpbmRleF9tYXBwaW5nX0hQX05VTQkxNQoKCi8qICAqLwovKiAzIFBTRCBIYW5kbGVyICovCi8qIDM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KCiNkZWZpbmUJQUZIX1BTRAkJMQkvKiAwOm5vcm1hbCBQU0Qgc2NhbiwgMTogb25seSBkbyAyMCBwdHMgUFNEICovCiNkZWZpbmUJTU9ERV80ME0JMAkvKiAwOjIwTSwgMTo0ME0gKi8KI2RlZmluZQlQU0RfVEgyCQkzCiNkZWZpbmUJUFNEX0NITQkJMjAgICAvKiAgTWluaW11bSBjaGFubmVsIG51bWJlciBmb3IgQlQgQUZIICovCiNkZWZpbmUJU0lSX1NURVBfU0laRQkzCiNkZWZpbmUgU21vb3RoX1NpemVfMQk1CiNkZWZpbmUJU21vb3RoX1RIXzEJMwojZGVmaW5lIFNtb290aF9TaXplXzIJMTAKI2RlZmluZQlTbW9vdGhfVEhfMgk0CiNkZWZpbmUgU21vb3RoX1NpemVfMwkyMAojZGVmaW5lCVNtb290aF9USF8zCTQKI2RlZmluZSBTbW9vdGhfU3RlcF9TaXplIDUKI2RlZmluZQlBZGFwdGl2ZV9TSVIJMQojZGVmaW5lCVBTRF9SRVNDQU4JNAojZGVmaW5lCVBTRF9TQ0FOX0lOVEVSVkFMCTcwMCAvKiBtcyAqLwoKLyogODcyM0EgSGlnaCBQb3dlciBJR0kgU2V0dGluZyAqLwojZGVmaW5lIERNX0RJR19ISUdIX1BXUl9JR0lfTE9XRVJfQk9VTkQJMHgyMgojZGVmaW5lIERNX0RJR19HbW9kZV9ISUdIX1BXUl9JR0lfTE9XRVJfQk9VTkQgMHgyOAojZGVmaW5lIERNX0RJR19ISUdIX1BXUl9USFJFU0hPTEQJMHgzYQoKLyogIExQUyBkZWZpbmUgKi8KI2RlZmluZSBETV9ESUdfRkFfVEgwX0xQUwkJNCAvKiAgNCBpbiBscHMgKi8KI2RlZmluZSBETV9ESUdfRkFfVEgxX0xQUwkJMTUgLyogIDE1IGxwcyAqLwojZGVmaW5lIERNX0RJR19GQV9USDJfTFBTCQkzMCAvKiAgMzAgbHBzICovCiNkZWZpbmUgUlNTSV9PRkZTRVRfRElHCQkJMHgwNTsKCi8qIEFOVCBUZXN0ICovCiNkZWZpbmUgQU5UVEVTVEFMTAkJMHgwMAkvKiBBbnQgQSBvciBCIHdpbGwgYmUgVGVzdGluZyAqLwojZGVmaW5lIEFOVFRFU1RBCQkweDAxCS8qIEFudCBBIHdpbGwgYmUgVGVzdGluZyAqLwojZGVmaW5lIEFOVFRFU1RCCQkweDAyCS8qIEFudCBCIHdpbGwgYmUgdGVzdGluZyAqLwoKc3RydWN0IHJ0d19kaWcgewoJdTgJCURpZ19FbmFibGVfRmxhZzsKCXU4CQlEaWdfRXh0X1BvcnRfU3RhZ2U7CgoJaW50CQlSc3NpTG93VGhyZXNoOwoJaW50CQlSc3NpSGlnaFRocmVzaDsKCgl1MzIJCUZBTG93VGhyZXNoOwoJdTMyCQlGQUhpZ2hUaHJlc2g7CgoJdTgJCUN1clNUQUNvbm5lY3RTdGF0ZTsKCXU4CQlQcmVTVEFDb25uZWN0U3RhdGU7Cgl1OAkJQ3VyTXVsdGlTVEFDb25uZWN0U3RhdGU7CgoJdTgJCVByZUlHVmFsdWU7Cgl1OAkJQ3VySUdWYWx1ZTsKCXU4CQlCYWNrdXBJR1ZhbHVlOwoKCXM4CQlCYWNrb2ZmVmFsOwoJczgJCUJhY2tvZmZWYWxfcmFuZ2VfbWF4OwoJczgJCUJhY2tvZmZWYWxfcmFuZ2VfbWluOwoJdTgJCXJ4X2dhaW5fcmFuZ2VfbWF4OwoJdTgJCXJ4X2dhaW5fcmFuZ2VfbWluOwoJdTgJCVJzc2lfdmFsX21pbjsKCgl1OAkJUHJlQ0NLX0NDQVRocmVzOwoJdTgJCUN1ckNDS19DQ0FUaHJlczsKCXU4CQlQcmVDQ0tQRFN0YXRlOwoJdTgJCUN1ckNDS1BEU3RhdGU7CgoJdTgJCUxhcmdlRkFIaXQ7Cgl1OAkJRm9yYmlkZGVuSUdJOwoJdTMyCQlSZWNvdmVyX2NudDsKCgl1OAkJRElHX0R5bmFtaWNfTUlOXzA7Cgl1OAkJRElHX0R5bmFtaWNfTUlOXzE7Cglib29sCQliTWVkaWFDb25uZWN0XzA7Cglib29sCQliTWVkaWFDb25uZWN0XzE7CgoJdTMyCQlBbnREaXZfUlNTSV9tYXg7Cgl1MzIJCVJTU0lfbWF4Owp9OwoKc3RydWN0IHJ0bF9wcyB7Cgl1OAkJUHJlQ0NBU3RhdGU7Cgl1OAkJQ3VyQ0NBU3RhdGU7CgoJdTgJCVByZVJGU3RhdGU7Cgl1OAkJQ3VyUkZTdGF0ZTsKCglpbnQJCSAgICBSc3NpX3ZhbF9taW47CgoJdTgJCWluaXRpYWxpemU7Cgl1MzIJCVJlZzg3NCwgUmVnQzcwLCBSZWc4NUMsIFJlZ0E3NDsKCn07CgpzdHJ1Y3QgZmFsc2VfYWxhcm1fc3RhdHMgewoJdTMyCUNudF9QYXJpdHlfRmFpbDsKCXUzMglDbnRfUmF0ZV9JbGxlZ2FsOwoJdTMyCUNudF9DcmM4X2ZhaWw7Cgl1MzIJQ250X01jc19mYWlsOwoJdTMyCUNudF9PZmRtX2ZhaWw7Cgl1MzIJQ250X0Nja19mYWlsOwoJdTMyCUNudF9hbGw7Cgl1MzIJQ250X0Zhc3RfRnN5bmM7Cgl1MzIJQ250X1NCX1NlYXJjaF9mYWlsOwoJdTMyCUNudF9PRkRNX0NDQTsKCXUzMglDbnRfQ0NLX0NDQTsKCXUzMglDbnRfQ0NBX2FsbDsKCXUzMglDbnRfQldfVVNDOwkvKiBHYXJ5ICovCgl1MzIJQ250X0JXX0xTQzsJLyogR2FyeSAqLwp9OwoKc3RydWN0IGR5bl9wcmltYXJ5X2NjYSB7Cgl1OAkJUHJpQ0NBX2ZsYWc7Cgl1OAkJaW50Zl9mbGFnOwoJdTgJCWludGZfdHlwZTsKCXU4CQlEdXBSVFNfZmxhZzsKCXU4CQlNb25pdG9yX2ZsYWc7Cn07CgpzdHJ1Y3QgcnhfaHBjIHsKCXU4CQlSWEhQX2ZsYWc7Cgl1OAkJUFNEX2Z1bmNfdHJpZ2dlcjsKCXU4CQlQU0RfYml0bWFwX1JYSFBbODBdOwoJdTgJCVByZV9JR0k7Cgl1OAkJQ3VyX0lHSTsKCXU4CQlQcmVfcHdfdGg7Cgl1OAkJQ3VyX3B3X3RoOwoJYm9vbAkJRmlyc3RfdGltZV9lbnRlcjsKCWJvb2wJCVJYSFBfZW5hYmxlOwoJdTgJCVRQX01vZGU7CglzdHJ1Y3QgdGltZXJfbGlzdCBQU0RUaW1lcjsKfTsKCiNkZWZpbmUgQVNTT0NJQVRFX0VOVFJZX05VTQkzMiAvKiAgTWF4IHNpemUgb2YgQXNvY0VudHJ5W10uICovCiNkZWZpbmUJT0RNX0FTU09DSUFURV9FTlRSWV9OVU0JQVNTT0NJQVRFX0VOVFJZX05VTQoKLyogIFRoaXMgaW5kaWNhdGVzIHR3byBkaWZmZXJlbnQgc3RlcHMuICovCi8qICBJbiBTV0FXX1NURVBfUEVBSywgZHJpdmVyIG5lZWRzIHRvIHN3aXRjaCBhbnRlbm5hIGFuZCBsaXN0ZW4gdG8KICogIHRoZSBzaWduYWwgb24gdGhlIGFpci4gKi8KLyogIEluIFNXQVdfU1RFUF9ERVRFUk1JTkUsIGRyaXZlciBqdXN0IGNvbXBhcmVzIHRoZSBzaWduYWwgY2FwdHVyZWQgaW4KICogIFNXQVdfU1RFUF9QRUFLIHdpdGggb3JpZ2luYWwgUlNTSSB0byBkZXRlcm1pbmUgaWYgaXQgaXMgbmVjZXNzYXJ5IHRvCiAqICBzd2l0Y2ggYW50ZW5uYS4gKi8KCiNkZWZpbmUgU1dBV19TVEVQX1BFQUsJCTAKI2RlZmluZSBTV0FXX1NURVBfREVURVJNSU5FCTEKCiNkZWZpbmUJVFBfTU9ERQkJCTAKI2RlZmluZQlSU1NJX01PREUJCTEKI2RlZmluZQlUUkFGRklDX0xPVwkJMAojZGVmaW5lCVRSQUZGSUNfSElHSAkJMQoKc3RydWN0IHN3X2FudF9zd2l0Y2ggewoJdTgJdHJ5X2ZsYWc7CglzMzIJUHJlUlNTSTsKCXU4CUN1ckFudGVubmE7Cgl1OAlQcmVBbnRlbm5hOwoJdTgJUlNTSV9Ucnlpbmc7Cgl1OAlUZXN0TW9kZTsKCXU4CWJUcmlnZ2VyQW50ZW5uYVN3aXRjaDsKCXU4CVNlbGVjdEFudGVubmFNYXA7Cgl1OAlSU1NJX3RhcmdldDsKCgkvKiAgQmVmb3JlIGxpbmsgQW50ZW5uYSBTd2l0Y2ggY2hlY2sgKi8KCXU4CVNXQVNfTm9MaW5rX1N0YXRlOwoJdTMyCVNXQVNfTm9MaW5rX0JLX1JlZzg2MDsKCWJvb2wJQU5UQV9PTjsJLyogVG8gaW5kaWNhdGUgQW50IEEgaXMgb3Igbm90ICovCglib29sCUFOVEJfT047CS8qIFRvIGluZGljYXRlIEFudCBCIGlzIG9uIG9yIG5vdCAqLwoKCXMzMglSU1NJX3N1bV9BOwoJczMyCVJTU0lfc3VtX0I7CglzMzIJUlNTSV9jbnRfQTsKCXMzMglSU1NJX2NudF9COwoJdTY0CWxhc3RUeE9rQ250OwoJdTY0CWxhc3RSeE9rQ250OwoJdTY0CVRYQnl0ZUNudF9BOwoJdTY0CVRYQnl0ZUNudF9COwoJdTY0CVJYQnl0ZUNudF9BOwoJdTY0CVJYQnl0ZUNudF9COwoJdTgJVHJhZmZpY0xvYWQ7CglzdHJ1Y3QgdGltZXJfbGlzdCBTd0FudGVubmFTd2l0Y2hUaW1lcjsKCS8qIEh5YnJpZCBBbnRlbm5hIERpdmVyc2l0eSAqLwoJdTMyCUNDS19BbnQxX0NudFtBU1NPQ0lBVEVfRU5UUllfTlVNXTsKCXUzMglDQ0tfQW50Ml9DbnRbQVNTT0NJQVRFX0VOVFJZX05VTV07Cgl1MzIJT0ZETV9BbnQxX0NudFtBU1NPQ0lBVEVfRU5UUllfTlVNXTsKCXUzMglPRkRNX0FudDJfQ250W0FTU09DSUFURV9FTlRSWV9OVU1dOwoJdTMyCVJTU0lfQW50MV9TdW1bQVNTT0NJQVRFX0VOVFJZX05VTV07Cgl1MzIJUlNTSV9BbnQyX1N1bVtBU1NPQ0lBVEVfRU5UUllfTlVNXTsKCXU4CVR4QW50W0FTU09DSUFURV9FTlRSWV9OVU1dOwoJdTgJVGFyZ2V0U1RBOwoJdTgJYW50c2VsOwoJdTgJUnhJZGxlQW50Owp9OwoKc3RydWN0IGVkY2FfdHVyYm8gewoJYm9vbCBiQ3VycmVudFR1cmJvRURDQTsKCWJvb2wgYklzQ3VyUkRMU3RhdGU7Cgl1MzIJcHJ2X3RyYWZmaWNfaWR4OyAvKiAgZWRjYSB0dXJibyAqLwp9OwoKc3RydWN0IG9kbV9yYXRlX2FkYXB0IHsKCXU4CVR5cGU7CQkvKiAgRE1fVHlwZV9CeUZXL0RNX1R5cGVfQnlEcml2ZXIgKi8KCXU4CUhpZ2hSU1NJVGhyZXNoOwkvKiAgaWYgUlNTSSA+IEhpZ2hSU1NJVGhyZXNoCT0+IFJBVFJTdGF0ZSBpcyBETV9SQVRSX1NUQV9ISUdIICovCgl1OAlMb3dSU1NJVGhyZXNoOwkvKiAgaWYgUlNTSSA8PSBMb3dSU1NJVGhyZXNoCT0+IFJBVFJTdGF0ZSBpcyBETV9SQVRSX1NUQV9MT1cgKi8KCXU4CVJBVFJTdGF0ZTsJLyogIEN1cnJlbnQgUlNTSSBsZXZlbCwgRE1fUkFUUl9TVEFfSElHSC9ETV9SQVRSX1NUQV9NSURETEUvRE1fUkFUUl9TVEFfTE9XICovCgl1MzIJTGFzdFJBVFI7CS8qICBSQVRSIFJlZ2lzdGVyIENvbnRlbnQgKi8KfTsKCiNkZWZpbmUgSVFLX01BQ19SRUdfTlVNCQk0CiNkZWZpbmUgSVFLX0FEREFfUkVHX05VTQkxNgojZGVmaW5lIElRS19CQl9SRUdfTlVNX01BWAkxMAojZGVmaW5lIElRS19CQl9SRUdfTlVNCQk5CiNkZWZpbmUgSFBfVEhFUk1BTF9OVU0JCTgKCiNkZWZpbmUgQVZHX1RIRVJNQUxfTlVNCQk4CiNkZWZpbmUgSVFLX01hdHJpeF9SRUdfTlVNCTgKI2RlZmluZSBJUUtfTWF0cml4X1NldHRpbmdzX05VTQkxKzI0KzIxCgojZGVmaW5lCURNX1R5cGVfQnlGV2kJCTAKI2RlZmluZQlETV9UeXBlX0J5RHJpdmVyCTEKCi8qICBEZWNsYXJlIGZvciBjb21tb24gaW5mbyAqLwoKc3RydWN0IG9kbV9waHlfc3RhdHVzX2luZm8gewoJdTgJUnhQV0RCQWxsOwoJdTgJU2lnbmFsUXVhbGl0eTsJIC8qICBpbiAwLTEwMCBpbmRleC4gKi8KCXU4CVJ4TUlNT1NpZ25hbFF1YWxpdHlbTUFYX1BBVEhfTlVNXzkyQ1NdOyAvKiBFVk0gKi8KCXU4CVJ4TUlNT1NpZ25hbFN0cmVuZ3RoW01BWF9QQVRIX05VTV85MkNTXTsvKiAgaW4gMH4xMDAgaW5kZXggKi8KCXM4CVJ4UG93ZXI7IC8qICBpbiBkQm0gVHJhbnNsYXRlIGZyb20gUFdkQiAqLwoJczgJUmVjdlNpZ25hbFBvd2VyOy8qICBSZWFsIHBvd2VyIGluIGRCbSBmb3IgdGhpcyBwYWNrZXQsIG5vCgkJCQkgKiBiZWF1dGlmaWNhdGlvbiBhbmQgYWdncmVnYXRpb24uIEtlZXAgdGhpcyByYXcKCQkJCSAqIGluZm8gdG8gYmUgdXNlZCBmb3IgdGhlIG90aGVyIHByb2NlZHVyZXMuICovCgl1OAlCVFJ4UlNTSVBlcmNlbnRhZ2U7Cgl1OAlTaWduYWxTdHJlbmd0aDsgLyogIGluIDAtMTAwIGluZGV4LiAqLwoJdTgJUnhQd3JbTUFYX1BBVEhfTlVNXzkyQ1NdOy8qIHBlci1wYXRoJ3MgcHdkYiAqLwoJdTgJUnhTTlJbTUFYX1BBVEhfTlVNXzkyQ1NdOy8qIHBlci1wYXRoJ3MgU05SICovCn07CgpzdHJ1Y3Qgb2RtX3BoeV9kYmdfaW5mbyB7CgkvKiBPRE0gV3JpdGUsZGVidWcgaW5mbyAqLwoJczgJUnhTTlJkQltNQVhfUEFUSF9OVU1fOTJDU107Cgl1NjQJTnVtUXJ5UGh5U3RhdHVzOwoJdTY0CU51bVFyeVBoeVN0YXR1c0NDSzsKCXU2NAlOdW1RcnlQaHlTdGF0dXNPRkRNOwoJLyogT3RoZXJzICovCglzMzIJUnhFVk1bTUFYX1BBVEhfTlVNXzkyQ1NdOwp9OwoKc3RydWN0IG9kbV9wZXJfcGt0X2luZm8gewoJczgJUmF0ZTsKCXU4CVN0YXRpb25JRDsKCWJvb2wJYlBhY2tldE1hdGNoQlNTSUQ7Cglib29sCWJQYWNrZXRUb1NlbGY7Cglib29sCWJQYWNrZXRCZWFjb247Cn07CgpzdHJ1Y3Qgb2RtX21hY19zdGF0dXNfaW5mbyB7Cgl1OAl0ZXN0Owp9OwoKZW51bSBvZG1fYWJpbGl0eSB7CgkvKiAgQkIgVGVhbSAqLwoJT0RNX0RJRwkJCT0gMHgwMDAwMDAwMSwKCU9ETV9ISUdIX1BPV0VSCQk9IDB4MDAwMDAwMDIsCglPRE1fQ0NLX0NDQV9USAkJPSAweDAwMDAwMDA0LAoJT0RNX0ZBX1NUQVRJU1RJQ1MJPSAweDAwMDAwMDA4LAoJT0RNX1JBTUFTSwkJPSAweDAwMDAwMDEwLAoJT0RNX1JTU0lfTU9OSVRPUgk9IDB4MDAwMDAwMjAsCglPRE1fU1dfQU5URElWCQk9IDB4MDAwMDAwNDAsCglPRE1fSFdfQU5URElWCQk9IDB4MDAwMDAwODAsCglPRE1fQkJfUFdSU1YJCT0gMHgwMDAwMDEwMCwKCU9ETV8yVFBBVEhESVYJCT0gMHgwMDAwMDIwMCwKCU9ETV8xVFBBVEhESVYJCT0gMHgwMDAwMDQwMCwKCU9ETV9QU0QyQUZICQk9IDB4MDAwMDA4MDAKfTsKCi8qICAyMDExLzIwLzIwIE1IIEZvciBNUCBkcml2ZXIgUlRfV0xBTl9TVEEgPSAgc3RydWN0IHN0YV9pbmZvICovCi8qICBQbGVhc2UgZGVjbGFyZSBiZWxvdyBPRE0gcmVsYXRpdmUgaW5mbyBpbiB5b3VyIFNUQSBpbmZvIHN0cnVjdHVyZS4gKi8KCnN0cnVjdCBvZG1fc3RhX2luZm8gewoJLyogIERyaXZlciBXcml0ZSAqLwoJYm9vbAliVXNlZDsJCS8qICByZWNvcmQgdGhlIHN0YSBzdGF0dXMgbGluayBvciBub3Q/ICovCgl1OAlJT1RQZWVyOwkvKiAgRW51bSB2YWx1ZS4JSFRfSU9UX1BFRVJfRSAqLwoKCS8qICBPRE0gV3JpdGUgKi8KCS8qIDEgUEhZX1NUQVRVU19JTkZPICovCgl1OAlSU1NJX1BhdGhbNF07CQkvKiAgKi8KCXU4CVJTU0lfQXZlOwoJdTgJUlhFVk1bNF07Cgl1OAlSWFNOUls0XTsKfTsKCi8qICAyMDExLzEwLzIwIE1IIERlZmluZSBDb21tb24gaW5mbyBlbnVtIGZvciBhbGwgdGVhbS4gKi8KCmVudW0gb2RtX2NvbW1vbl9pbmZvX2RlZiB7CgkvKiAgRml4ZWQgdmFsdWU6ICovCgoJLyogSE9PSyBCRUZPUkUgUkVHIElOSVQtLS0tLS0tLS0tLSAqLwoJT0RNX0NNTklORk9fUExBVEZPUk0gPSAwLAoJT0RNX0NNTklORk9fQUJJTElUWSwJCS8qIE9ETV9BQklMSVRZX0UgKi8KCU9ETV9DTU5JTkZPX0lOVEVSRkFDRSwJCS8qIE9ETV9JTlRFUkZBQ0VfRSAqLwoJT0RNX0NNTklORk9fTVBfVEVTVF9DSElQLAoJT0RNX0NNTklORk9fSUNfVFlQRSwJCS8qIE9ETV9JQ19UWVBFX0UgKi8KCU9ETV9DTU5JTkZPX0NVVF9WRVIsCQkvKiBPRE1fQ1VUX1ZFUlNJT05fRSAqLwoJT0RNX0NNTklORk9fRkFCX1ZFUiwJCS8qIE9ETV9GQUJfRSAqLwoJT0RNX0NNTklORk9fUkZfVFlQRSwJCS8qIE9ETV9SRl9QQVRIX0Ugb3IgT0RNX1JGX1RZUEVfRT8gKi8KCU9ETV9DTU5JTkZPX0JPQVJEX1RZUEUsCQkvKiBPRE1fQk9BUkRfVFlQRV9FICovCglPRE1fQ01OSU5GT19FWFRfTE5BLAkJLyogdHJ1ZSAqLwoJT0RNX0NNTklORk9fRVhUX1BBLAoJT0RNX0NNTklORk9fRVhUX1RSU1csCglPRE1fQ01OSU5GT19QQVRDSF9JRCwJCS8qIENVU1RPTUVSIElEICovCglPRE1fQ01OSU5GT19CSU5IQ1RfVEVTVCwKCU9ETV9DTU5JTkZPX0JXSUZJX1RFU1QsCglPRE1fQ01OSU5GT19TTUFSVF9DT05DVVJSRU5ULAoJLyogSE9PSyBCRUZPUkUgUkVHIElOSVQtLS0tLS0tLS0tLSAgKi8KCgkvKiAgRHluYW1pYyB2YWx1ZTogKi8KLyogIFBPSU5URVIgUkVGRVJFTkNFLS0tLS0tLS0tLS0gICovCglPRE1fQ01OSU5GT19NQUNfUEhZX01PREUsCS8qICBPRE1fTUFDX1BIWV9NT0RFX0UgKi8KCU9ETV9DTU5JTkZPX1RYX1VOSSwKCU9ETV9DTU5JTkZPX1JYX1VOSSwKCU9ETV9DTU5JTkZPX1dNX01PREUsCQkvKiAgT0RNX1dJUkVMRVNTX01PREVfRSAqLwoJT0RNX0NNTklORk9fQkFORCwJCS8qICBPRE1fQkFORF9UWVBFX0UgKi8KCU9ETV9DTU5JTkZPX1NFQ19DSE5MX09GRlNFVCwJLyogIE9ETV9TRUNfQ0hOTF9PRkZTRVRfRSAqLwoJT0RNX0NNTklORk9fU0VDX01PREUsCQkvKiAgT0RNX1NFQ1VSSVRZX0UgKi8KCU9ETV9DTU5JTkZPX0JXLAkJCS8qICBPRE1fQldfRSAqLwoJT0RNX0NNTklORk9fQ0hOTCwKCglPRE1fQ01OSU5GT19ETVNQX0dFVF9WQUxVRSwKCU9ETV9DTU5JTkZPX0JVRERZX0FEQVBUT1IsCglPRE1fQ01OSU5GT19ETVNQX0lTX01BU1RFUiwKCU9ETV9DTU5JTkZPX1NDQU4sCglPRE1fQ01OSU5GT19QT1dFUl9TQVZJTkcsCglPRE1fQ01OSU5GT19PTkVfUEFUSF9DQ0EsCS8qICBPRE1fQ0NBX1BBVEhfRSAqLwoJT0RNX0NNTklORk9fRFJWX1NUT1AsCglPRE1fQ01OSU5GT19QTlBfSU4sCglPRE1fQ01OSU5GT19JTklUX09OLAoJT0RNX0NNTklORk9fQU5UX1RFU1QsCglPRE1fQ01OSU5GT19ORVRfQ0xPU0VELAoJT0RNX0NNTklORk9fTVBfTU9ERSwKLyogIFBPSU5URVIgUkVGRVJFTkNFLS0tLS0tLS0tLS0gKi8KCi8qIENBTEwgQlkgVkFMVUUtLS0tLS0tLS0tLS0tICovCglPRE1fQ01OSU5GT19XSUZJX0RJUkVDVCwKCU9ETV9DTU5JTkZPX1dJRklfRElTUExBWSwKCU9ETV9DTU5JTkZPX0xJTkssCglPRE1fQ01OSU5GT19SU1NJX01JTiwKCU9ETV9DTU5JTkZPX0RCR19DT01QLAkJCS8qICB1NjQgKi8KCU9ETV9DTU5JTkZPX0RCR19MRVZFTCwJCQkvKiAgdTMyICovCglPRE1fQ01OSU5GT19SQV9USFJFU0hPTERfSElHSCwJCS8qICB1OCAqLwoJT0RNX0NNTklORk9fUkFfVEhSRVNIT0xEX0xPVywJCS8qICB1OCAqLwoJT0RNX0NNTklORk9fUkZfQU5URU5OQV9UWVBFLAkJLyogIHU4ICovCglPRE1fQ01OSU5GT19CVF9ESVNBQkxFRCwKCU9ETV9DTU5JTkZPX0JUX09QRVJBVElPTiwKCU9ETV9DTU5JTkZPX0JUX0RJRywKCU9ETV9DTU5JTkZPX0JUX0JVU1ksCQkJLyogQ2hlY2sgQnQgaXMgdXNpbmcgb3Igbm90ICovCglPRE1fQ01OSU5GT19CVF9ESVNBQkxFX0VEQ0EsCi8qIENBTEwgQlkgVkFMVUUtLS0tLS0tLS0tLS0tKi8KCgkvKiAgRHluYW1pYyBwdHIgYXJyYXkgaG9vayBpdG1zLiAqLwoJT0RNX0NNTklORk9fU1RBX1NUQVRVUywKCU9ETV9DTU5JTkZPX1BIWV9TVEFUVVMsCglPRE1fQ01OSU5GT19NQUNfU1RBVFVTLAoJT0RNX0NNTklORk9fTUFYLAp9OwoKLyogIDIwMTEvMTAvMjAgTUggRGVmaW5lIE9ETSBzdXBwb3J0IGFiaWxpdHkuICBPRE1fQ01OSU5GT19BQklMSVRZICovCgplbnVtIG9kbV9hYmlsaXR5X2RlZiB7CgkvKiAgQkIgT0RNIHNlY3Rpb24gQklUIDAtMTUgKi8KCU9ETV9CQl9ESUcJCQk9IEJJVDAsCglPRE1fQkJfUkFfTUFTSwkJCT0gQklUMSwKCU9ETV9CQl9EWU5BTUlDX1RYUFdSCQk9IEJJVDIsCglPRE1fQkJfRkFfQ05UCQkJPSBCSVQzLAoJT0RNX0JCX1JTU0lfTU9OSVRPUgkJPSBCSVQ0LAoJT0RNX0JCX0NDS19QRAkJCT0gQklUNSwKCU9ETV9CQl9BTlRfRElWCQkJPSBCSVQ2LAoJT0RNX0JCX1BXUl9TQVZFCQkJPSBCSVQ3LAoJT0RNX0JCX1BXUl9UUkEJCQk9IEJJVDgsCglPRE1fQkJfUkFURV9BREFQVElWRQkJPSBCSVQ5LAoJT0RNX0JCX1BBVEhfRElWCQkJPSBCSVQxMCwKCU9ETV9CQl9QU0QJCQk9IEJJVDExLAoJT0RNX0JCX1JYSFAJCQk9IEJJVDEyLAoKCS8qICBNQUMgRE0gc2VjdGlvbiBCSVQgMTYtMjMgKi8KCU9ETV9NQUNfRURDQV9UVVJCTwkJPSBCSVQxNiwKCU9ETV9NQUNfRUFSTFlfTU9ERQkJPSBCSVQxNywKCgkvKiAgUkYgT0RNIHNlY3Rpb24gQklUIDI0LTMxICovCglPRE1fUkZfVFhfUFdSX1RSQUNLCQk9IEJJVDI0LAoJT0RNX1JGX1JYX0dBSU5fVFJBQ0sJCT0gQklUMjUsCglPRE1fUkZfQ0FMSUJSQVRJT04JCT0gQklUMjYsCn07CgojZGVmaW5lIE9ETV9SVEw4MTg4RQkJQklUNAoKLyogT0RNX0NNTklORk9fQ1VUX1ZFUiAqLwplbnVtIG9kbV9jdXRfdmVyc2lvbiB7CglPRE1fQ1VUX0EJPQkxLAoJT0RNX0NVVF9CCT0JMiwKCU9ETV9DVVRfQwk9CTMsCglPRE1fQ1VUX0QJPQk0LAoJT0RNX0NVVF9FCT0JNSwKCU9ETV9DVVRfRgk9CTYsCglPRE1fQ1VUX1RFU1QJPQk3LAp9OwoKLyogIE9ETV9DTU5JTkZPX0ZBQl9WRVIgKi8KZW51bSBvZG1fZmFiX1ZlcnNpb24gewoJT0RNX1RTTUMJPQkwLAoJT0RNX1VNQwkJPQkxLAp9OwoKLyogIE9ETV9DTU5JTkZPX1JGX1RZUEUgKi8KLyogIEZvciBleGFtcGxlIDFUMlIgKEErQUIgPSBCSVQwfEJJVDR8QklUNSkgKi8KZW51bSBvZG1fcmZfcGF0aCB7CglPRE1fUkZfVFhfQQk9CUJJVDAsCglPRE1fUkZfVFhfQgk9CUJJVDEsCglPRE1fUkZfVFhfQwk9CUJJVDIsCglPRE1fUkZfVFhfRAk9CUJJVDMsCglPRE1fUkZfUlhfQQk9CUJJVDQsCglPRE1fUkZfUlhfQgk9CUJJVDUsCglPRE1fUkZfUlhfQwk9CUJJVDYsCglPRE1fUkZfUlhfRAk9CUJJVDcsCn07CgplbnVtIG9kbV9yZl90eXBlIHsKCU9ETV8xVDFSCT0JMCwKCU9ETV8xVDJSCT0JMSwKCU9ETV8yVDJSCT0JMiwKCU9ETV8yVDNSCT0JMywKCU9ETV8yVDRSCT0JNCwKCU9ETV8zVDNSCT0JNSwKCU9ETV8zVDRSCT0JNiwKCU9ETV80VDRSCT0JNywKfTsKCi8qICBPRE0gRHluYW1pYyBjb21tb24gaW5mbyB2YWx1ZSBkZWZpbml0aW9uICovCgplbnVtIG9kbV9tYWNfcGh5X21vZGUgewoJT0RNX1NNU1AJPSAwLAoJT0RNX0RNU1AJPSAxLAoJT0RNX0RNRFAJPSAyLAp9OwoKZW51bSBvZG1fYnRfY29leGlzdCB7CglPRE1fQlRfQlVTWQkJPSAxLAoJT0RNX0JUX09OCQk9IDIsCglPRE1fQlRfT0ZGCQk9IDMsCglPRE1fQlRfTk9ORQkJPSA0LAp9OwoKLyogIE9ETV9DTU5JTkZPX09QX01PREUgKi8KZW51bSBvZG1fb3BlcmF0aW9uX21vZGUgewoJT0RNX05PX0xJTksJCT0gQklUMCwKCU9ETV9MSU5LCQk9IEJJVDEsCglPRE1fU0NBTgkJPSBCSVQyLAoJT0RNX1BPV0VSU0FWRQkJPSBCSVQzLAoJT0RNX0FQX01PREUJCT0gQklUNCwKCU9ETV9DTElFTlRfTU9ERQkJPSBCSVQ1LAoJT0RNX0FEX0hPQwkJPSBCSVQ2LAoJT0RNX1dJRklfRElSRUNUCQk9IEJJVDcsCglPRE1fV0lGSV9ESVNQTEFZCT0gQklUOCwKfTsKCi8qICBPRE1fQ01OSU5GT19XTV9NT0RFICovCmVudW0gb2RtX3dpcmVsZXNzX21vZGUgewoJT0RNX1dNX1VOS05PVwk9IDB4MCwKCU9ETV9XTV9CCT0gQklUMCwKCU9ETV9XTV9HCT0gQklUMSwKCU9ETV9XTV9BCT0gQklUMiwKCU9ETV9XTV9OMjRHCT0gQklUMywKCU9ETV9XTV9ONUcJPSBCSVQ0LAoJT0RNX1dNX0FVVE8JPSBCSVQ1LAoJT0RNX1dNX0FDCT0gQklUNiwKfTsKCi8qICBPRE1fQ01OSU5GT19CQU5EICovCmVudW0gb2RtX2JhbmRfdHlwZSB7CglPRE1fQkFORF8yXzRHCT0gQklUMCwKCU9ETV9CQU5EXzVHCT0gQklUMSwKfTsKCi8qICBPRE1fQ01OSU5GT19TRUNfQ0hOTF9PRkZTRVQgKi8KZW51bSBvZG1fc2VjX2Nobmxfb2Zmc2V0IHsKCU9ETV9ET05UX0NBUkUJPSAwLAoJT0RNX0JFTE9XCT0gMSwKCU9ETV9BQk9WRQk9IDIKfTsKCi8qICBPRE1fQ01OSU5GT19TRUNfTU9ERSAqLwplbnVtIG9kbV9zZWN1cml0eSB7CglPRE1fU0VDX09QRU4JCT0gMCwKCU9ETV9TRUNfV0VQNDAJCT0gMSwKCU9ETV9TRUNfVEtJUAkJPSAyLAoJT0RNX1NFQ19SRVNFUlZFCQk9IDMsCglPRE1fU0VDX0FFU0NDTVAJCT0gNCwKCU9ETV9TRUNfV0VQMTA0CQk9IDUsCglPRE1fV0VQX1dQQV9NSVhFRCAgIAk9IDYsIC8qICBXRVAgKyBXUEEgKi8KCU9ETV9TRUNfU01TNAkJPSA3LAp9OwoKLyogIE9ETV9DTU5JTkZPX0JXICovCmVudW0gb2RtX2J3IHsKCU9ETV9CVzIwTQkJPSAwLAoJT0RNX0JXNDBNCQk9IDEsCglPRE1fQlc4ME0JCT0gMiwKCU9ETV9CVzE2ME0JCT0gMywKCU9ETV9CVzEwTQkJPSA0LAp9OwoKLyogIE9ETV9DTU5JTkZPX0JPQVJEX1RZUEUgKi8KZW51bSBvZG1fYm9hcmRfdHlwZSB7CglPRE1fQk9BUkRfTk9STUFMCT0gMCwKCU9ETV9CT0FSRF9ISUdIUFdSCT0gMSwKCU9ETV9CT0FSRF9NSU5JQ0FSRAk9IDIsCglPRE1fQk9BUkRfU0xJTQkJPSAzLAoJT0RNX0JPQVJEX0NPTUJPCQk9IDQsCn07CgovKiAgT0RNX0NNTklORk9fT05FX1BBVEhfQ0NBICovCmVudW0gb2RtX2NjYV9wYXRoIHsKCU9ETV9DQ0FfMlIJCT0gMCwKCU9ETV9DQ0FfMVJfQQkJPSAxLAoJT0RNX0NDQV8xUl9CCQk9IDIsCn07CgpzdHJ1Y3Qgb2RtX3JhX2luZm8gewoJdTggUmF0ZUlEOwoJdTMyIFJhdGVNYXNrOwoJdTMyIFJBVXNlUmF0ZTsKCXU4IFJhdGVTR0k7Cgl1OCBSc3NpU3RhUkE7Cgl1OCBQcmVSc3NpU3RhUkE7Cgl1OCBTR0lFbmFibGU7Cgl1OCBEZWNpc2lvblJhdGU7Cgl1OCBQcmVSYXRlOwoJdTggSGlnaGVzdFJhdGU7Cgl1OCBMb3dlc3RSYXRlOwoJdTMyIE5zY1VwOwoJdTMyIE5zY0Rvd247Cgl1MTYgUlRZWzVdOwoJdTMyIFRPVEFMOwoJdTE2IERST1A7Cgl1OCBBY3RpdmU7Cgl1MTYgUnB0VGltZTsKCXU4IFJBV2FpdGluZ0NvdW50ZXI7Cgl1OCBSQVBlbmRpbmdDb3VudGVyOwoJdTggUFRBY3RpdmU7CS8qICBvbiBvciBvZmYgKi8KCXU4IFBUVHJ5U3RhdGU7CS8qICAwIHRyeWluZyBzdGF0ZSwgMSBmb3IgZGVjaXNpb24gc3RhdGUgKi8KCXU4IFBUU3RhZ2U7CS8qICAwfjYgKi8KCXU4IFBUU3RvcENvdW50OwkvKiBTdG9wIFBUIGNvdW50ZXIgKi8KCXU4IFBUUHJlUmF0ZTsJLyogIGlmIHJhdGUgY2hhbmdlIGRvIFBUICovCgl1OCBQVFByZVJzc2k7CS8qICBpZiBSU1NJIGNoYW5nZSA1JSBkbyBQVCAqLwoJdTggUFRNb2RlU1M7CS8qICBkZWNpZGUgd2hpdGNoIHJhdGUgc2hvdWxkIGRvIFBUICovCgl1OCBSQXN0YWdlOwkvKiAgU3RhZ2VSQSwgZGVjaWRlIGhvdyBtYW55IHRpbWVzIFJBIHdpbGwgYmUgZG9uZQoJCQkgKiBiZXR3ZWVuIFBUICovCgl1OCBQVFNtb290aEZhY3RvcjsKfTsKCnN0cnVjdCBpamtfbWF0cml4X3JlZ3Nfc2V0IHsKCWJvb2wJYklRS0RvbmU7CglzMzIJVmFsdWVbMV1bSVFLX01hdHJpeF9SRUdfTlVNXTsKfTsKCnN0cnVjdCBvZG1fcmZfY2FsIHsKCS8qIGZvciB0eCBwb3dlciB0cmFja2luZyAqLwoJdTMyCVJlZ0EyNDsgLyogIGZvciBUZW1wQ0NLICovCglzMzIJUmVnRTk0OwoJczMyCVJlZ0U5QzsKCXMzMglSZWdFQjQ7CglzMzIJUmVnRUJDOwoKCXU4CVRYUG93ZXJjb3VudDsKCWJvb2wJYlRYUG93ZXJUcmFja2luZ0luaXQ7Cglib29sCWJUWFBvd2VyVHJhY2tpbmc7Cgl1OAlUeFBvd2VyVHJhY2tDb250cm9sOyAvKiBmb3IgbXAgbW9kZSwgdHVybiBvZmYgdHhwd3J0cmFja2luZwoJCQkJICAgICAgKiBhcyBkZWZhdWx0ICovCgl1OAlUTV9UcmlnZ2VyOwoJdTgJSW50ZXJuYWxQQTVHWzJdOwkvKiBwYXRoQSAvIHBhdGhCICovCgoJdTgJVGhlcm1hbE1ldGVyWzJdOyAgICAvKiBUaGVybWFsTWV0ZXIsIGluZGV4IDAgZm9yIFJGSUMwLAoJCQkJICAgICAqIGFuZCAxIGZvciBSRklDMSAqLwoJdTgJVGhlcm1hbFZhbHVlOwoJdTgJVGhlcm1hbFZhbHVlX0xDSzsKCXU4CVRoZXJtYWxWYWx1ZV9JUUs7Cgl1OAlUaGVybWFsVmFsdWVfRFBLOwoJdTgJVGhlcm1hbFZhbHVlX0FWR1tBVkdfVEhFUk1BTF9OVU1dOwoJdTgJVGhlcm1hbFZhbHVlX0FWR19pbmRleDsKCXU4CVRoZXJtYWxWYWx1ZV9SeEdhaW47Cgl1OAlUaGVybWFsVmFsdWVfQ3J5c3RhbDsKCXU4CVRoZXJtYWxWYWx1ZV9EUEtzdG9yZTsKCXU4CVRoZXJtYWxWYWx1ZV9EUEt0cmFjazsKCWJvb2wJVHhQb3dlclRyYWNraW5nSW5Qcm9ncmVzczsKCWJvb2wJYkRQS2VuYWJsZTsKCglib29sCWJSZWxvYWR0eHBvd2VyaW5kZXg7Cgl1OAliUmZQaUVuYWJsZTsKCXUzMglUWFBvd2VyVHJhY2tpbmdDYWxsYmFja0NudDsgLyogY29zYSBhZGQgZm9yIGRlYnVnICovCgoJdTgJYkNDS2luQ0gxNDsKCXU4CUNDS19pbmRleDsKCXU4CU9GRE1faW5kZXhbMl07Cglib29sIGJEb25lVHhwb3dlcjsKCgl1OAlUaGVybWFsVmFsdWVfSFBbSFBfVEhFUk1BTF9OVU1dOwoJdTgJVGhlcm1hbFZhbHVlX0hQX2luZGV4OwoJc3RydWN0IGlqa19tYXRyaXhfcmVnc19zZXQgSVFLTWF0cml4UmVnU2V0dGluZ1tJUUtfTWF0cml4X1NldHRpbmdzX05VTV07CgoJdTgJRGVsdGFfSVFLOwoJdTgJRGVsdGFfTENLOwoKCS8qIGZvciBJUUsgKi8KCXUzMglSZWdDMDQ7Cgl1MzIJUmVnODc0OwoJdTMyCVJlZ0MwODsKCXUzMglSZWdCNjg7Cgl1MzIJUmVnQjZDOwoJdTMyCVJlZzg3MDsKCXUzMglSZWc4NjA7Cgl1MzIJUmVnODY0OwoKCWJvb2wJYklRS0luaXRpYWxpemVkOwoJYm9vbAliTENLSW5Qcm9ncmVzczsKCWJvb2wJYkFudGVubmFEZXRlY3RlZDsKCXUzMglBRERBX2JhY2t1cFtJUUtfQUREQV9SRUdfTlVNXTsKCXUzMglJUUtfTUFDX2JhY2t1cFtJUUtfTUFDX1JFR19OVU1dOwoJdTMyCUlRS19CQl9iYWNrdXBfcmVjb3Zlcls5XTsKCXUzMglJUUtfQkJfYmFja3VwW0lRS19CQl9SRUdfTlVNXTsKCgkvKiBmb3IgQVBLICovCgl1MzIJQVBLb3V0cHV0WzJdWzJdOyAvKiBwYXRoIEEvQjsgb3V0cHV0MV8xYS9vdXRwdXQxXzJhICovCgl1OAliQVBLZG9uZTsKCXU4CWJBUEtUaGVybWFsTWV0ZXJJZ25vcmU7Cgl1OAliRFBkb25lOwoJdTgJYkRQUGF0aEFPSzsKCXU4CWJEUFBhdGhCT0s7Cn07CgovKiAgT0RNIER5bmFtaWMgY29tbW9uIGluZm8gdmFsdWUgZGVmaW5pdGlvbiAqLwoKc3RydWN0IGZhc3RfYW50X3RyYWluIHsKCXU4CUJzc2lkWzZdOwoJdTgJYW50c2VsX3J4X2tlZXBfMDsKCXU4CWFudHNlbF9yeF9rZWVwXzE7Cgl1OAlhbnRzZWxfcnhfa2VlcF8yOwoJdTMyCWFudFN1bVJTU0lbN107Cgl1MzIJYW50UlNTSWNudFs3XTsKCXUzMglhbnRBdmVSU1NJWzddOwoJdTgJRkFUX1N0YXRlOwoJdTMyCVRyYWluSWR4OwoJdTgJYW50c2VsX2FbT0RNX0FTU09DSUFURV9FTlRSWV9OVU1dOwoJdTgJYW50c2VsX2JbT0RNX0FTU09DSUFURV9FTlRSWV9OVU1dOwoJdTgJYW50c2VsX2NbT0RNX0FTU09DSUFURV9FTlRSWV9OVU1dOwoJdTMyCU1haW5BbnRfU3VtW09ETV9BU1NPQ0lBVEVfRU5UUllfTlVNXTsKCXUzMglBdXhBbnRfU3VtW09ETV9BU1NPQ0lBVEVfRU5UUllfTlVNXTsKCXUzMglNYWluQW50X0NudFtPRE1fQVNTT0NJQVRFX0VOVFJZX05VTV07Cgl1MzIJQXV4QW50X0NudFtPRE1fQVNTT0NJQVRFX0VOVFJZX05VTV07Cgl1OAlSeElkbGVBbnQ7Cglib29sCWJCZWNvbWVMaW5rZWQ7Cn07CgplbnVtIGZhdF9zdGF0ZSB7CglGQVRfTk9STUFMX1NUQVRFCQk9IDAsCglGQVRfVFJBSU5JTkdfU1RBVEUJCT0gMSwKfTsKCmVudW0gYW50X2Rpdl90eXBlIHsKCU5PX0FOVERJVgkJCT0gMHhGRiwKCUNHX1RSWF9IV19BTlRESVYJCT0gMHgwMSwKCUNHQ1NfUlhfSFdfQU5URElWCQk9IDB4MDIsCglGSVhFRF9IV19BTlRESVYJCQk9IDB4MDMsCglDR19UUlhfU01BUlRfQU5URElWCQk9IDB4MDQsCglDR0NTX1JYX1NXX0FOVERJVgkJPSAweDA1LAp9OwoKLyogQ29weSBmcm9tIFNENCBkZWZpbmVkIHN0cnVjdHVyZS4gV2UgdXNlIHRvIHN1cHBvcnQgUEhZIERNIGludGVncmF0aW9uLiAqLwpzdHJ1Y3Qgb2RtX2RtX3N0cnVjdCB7CgkvKiAJQWRkIGZvciBkaWZmZXJlbnQgdGVhbSB1c2UgdGVtcG9yYXJpbHkgKi8KCXN0cnVjdCBhZGFwdGVyICpBZGFwdGVyOwkvKiAgRm9yIENFL05JQyB0ZWFtICovCglzdHJ1Y3QgcnRsODE5MmNkX3ByaXYgKnByaXY7CS8qICBGb3IgQVAvQURTTCB0ZWFtICovCgkvKiAgV0hlbiB5b3UgdXNlIGFib3ZlIHBvaW50ZXJzLCB0aGV5IG11c3QgYmUgaW5pdGlhbGl6ZWQuICovCglib29sCW9kbV9yZWFkeTsKCglzdHJ1Y3QgcnRsODE5MmNkX3ByaXYgKmZha2VfcHJpdjsKCXU2NAlEZWJ1Z0NvbXBvbmVudHM7Cgl1MzIJRGVidWdMZXZlbDsKCi8qICBPRE0gSEFORExFLCBEUklWRVIgTkVFRFMgTk9UIFRPIEhPT0stLS0tLS0gKi8KCWJvb2wJYkNja0hpZ2hQb3dlcjsKCXU4CVJGUGF0aFJ4RW5hYmxlOwkJLyogIE9ETV9DTU5JTkZPX1JGUEFUSF9FTkFCTEUgKi8KCXU4CUNvbnRyb2xDaGFubmVsOwovKiAgT0RNIEhBTkRMRSwgRFJJVkVSIE5FRURTIE5PVCBUTyBIT09LLS0tLS0tICovCgovKiAxICBDT01NT04gSU5GT1JNQVRJT04gKi8KCS8qICBJbml0IFZhbHVlICovCi8qIEhPT0sgQkVGT1JFIFJFRyBJTklULS0tLS0tLS0tLS0gKi8KCS8qICBPRE0gUGxhdGZvcm0gaW5mbyBBUC9BRFNML0NFL01QID0gMS8yLzMvNCAqLwoJdTgJU3VwcG9ydFBsYXRmb3JtOwoJLyogIE9ETSBTdXBwb3J0IEFiaWxpdHkgRElHL1JBVFIvVFhfUFdSX1RSQUNLLyChS6FLID0gMS8yLzMvoUsgKi8KCXUzMglTdXBwb3J0QWJpbGl0eTsKCS8qICBPRE0gUENJRS9VU0IvU0RJTy9HU1BJID0gMC8xLzIvMyAqLwoJdTgJU3VwcG9ydEludGVyZmFjZTsKCS8qICBPRE0gY29tcG9zaXRlIG9yIGluZGVwZW5kZW50LiBCaXQgb3JpZW50ZWQvIDkyQys5MkQrIC4uLi4gb3IgYW55CgkgKiAgb3RoZXIgdHlwZSA9IDEvMi8zLy4uLiAqLwoJdTMyCVN1cHBvcnRJQ1R5cGU7CgkvKiAgQ3V0IFZlcnNpb24gVGVzdENoaXAvQS1jdXQvQi1jdXQuLi4gPSAwLzEvMi8zLy4uLiAqLwoJdTgJQ3V0VmVyc2lvbjsKCS8qICBGYWIgVmVyc2lvbiBUU01DL1VNQyA9IDAvMSAqLwoJdTgJRmFiVmVyc2lvbjsKCS8qICBSRiBUeXBlIDRUNFIvM1QzUi8yVDJSLzFUMlIvMVQxUi8uLi4gKi8KCXU4CVJGVHlwZTsKCS8qICBCb2FyZCBUeXBlIE5vcm1hbC9IaWdoUG93ZXIvTWluaUNhcmQvU0xJTS9Db21iby8uID0gMC8xLzIvMy80Ly4gKi8KCXU4CUJvYXJkVHlwZTsKCS8qICB3aXRoIGV4dGVybmFsIExOQSAgTk8vWWVzID0gMC8xICovCgl1OAlFeHRMTkE7CgkvKiAgd2l0aCBleHRlcm5hbCBQQSAgTk8vWWVzID0gMC8xICovCgl1OAlFeHRQQTsKCS8qICB3aXRoIGV4dGVybmFsIFRSU1cgIE5PL1llcyA9IDAvMSAqLwoJdTgJRXh0VFJTVzsKCXU4CVBhdGNoSUQ7IC8qIEN1c3RvbWVyIElEICovCglib29sCWJJbkhjdFRlc3Q7Cglib29sCWJXSUZJVGVzdDsKCglib29sCWJEdWFsTWFjU21hcnRDb25jdXJyZW50OwoJdTMyCUJLX1N1cHBvcnRBYmlsaXR5OwoJdTgJQW50RGl2VHlwZTsKLyogSE9PSyBCRUZPUkUgUkVHIElOSVQtLS0tLS0tLS0tLSAqLwoKCS8qICBEeW5hbWljIFZhbHVlICovCi8qICBQT0lOVEVSIFJFRkVSRU5DRS0tLS0tLS0tLS0tICovCgoJdTgJdThfdGVtcDsKCWJvb2wJYm9vbF90ZW1wOwoJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXJfdGVtcDsKCgkvKiAgTUFDIFBIWSBNb2RlIFNNU1AvRE1TUC9ETURQID0gMC8xLzIgKi8KCXU4CSpwTWFjUGh5TW9kZTsKCS8qIFRYIFVuaWNhc3QgYnl0ZSBjb3VudCAqLwoJdTY0CSpwTnVtVHhCeXRlc1VuaWNhc3Q7CgkvKiBSWCBVbmljYXN0IGJ5dGUgY291bnQgKi8KCXU2NAkqcE51bVJ4Qnl0ZXNVbmljYXN0OwoJLyogIFdpcmVsZXNzIG1vZGUgQi9HL0EvTiA9IEJJVDAvQklUMS9CSVQyL0JJVDMgKi8KCXU4CSpwV2lyZWxlc3NNb2RlOyAvKiBPRE1fV0lSRUxFU1NfTU9ERV9FICovCgkvKiAgRnJlcXVlbmNlIGJhbmQgMi40Ry81RyA9IDAvMSAqLwoJdTgJKnBCYW5kVHlwZTsKCS8qICBTZWNvbmRhcnkgY2hhbm5lbCBvZmZzZXQgZG9uJ3RfY2FyZS9iZWxvdy9hYm92ZSA9IDAvMS8yICovCgl1OAkqcFNlY0NoT2Zmc2V0OwoJLyogIFNlY3VyaXR5IG1vZGUgT3Blbi9XRVAvQUVTL1RLSVAgPSAwLzEvMi8zICovCgl1OAkqcFNlY3VyaXR5OwoJLyogIEJXIGluZm8gMjBNLzQwTS84ME0gPSAwLzEvMiAqLwoJdTgJKnBCYW5kV2lkdGg7CgkvKiAgQ2VudHJhbCBjaGFubmVsIGxvY2F0aW9uIENoMS9DaDIvLi4uLiAqLwoJdTgJKnBDaGFubmVsOwkvKiBjZW50cmFsIGNoYW5uZWwgbnVtYmVyICovCgkvKiAgQ29tbW9uIGluZm8gZm9yIDkyRCBETVNQICovCgoJYm9vbAkqcGJHZXRWYWx1ZUZyb21PdGhlck1hYzsKCXN0cnVjdCBhZGFwdGVyICoqcEJ1ZGR5QWRhcHRlcjsKCWJvb2wJKnBiTWFzdGVyT2ZETVNQOyAvKiBNQUMwOiBtYXN0ZXIsIE1BQzE6IHNsYXZlICovCgkvKiAgQ29tbW9uIGluZm8gZm9yIFN0YXR1cyAqLwoJYm9vbAkqcGJTY2FuSW5Qcm9jZXNzOwoJYm9vbAkqcGJQb3dlclNhdmluZzsKCS8qICBDQ0EgUGF0aCAyLXBhdGgvcGF0aC1BL3BhdGgtQiA9IDAvMS8yOyB1c2luZyBPRE1fQ0NBX1BBVEhfRS4gKi8KCXU4CSpwT25lUGF0aENDQTsKCS8qIHBNZ250SW5mby0+QW50ZW5uYVRlc3QgKi8KCXU4CSpwQW50ZW5uYVRlc3Q7Cglib29sCSpwYk5ldF9jbG9zZWQ7Ci8qICBQT0lOVEVSIFJFRkVSRU5DRS0tLS0tLS0tLS0tICovCgkvKiAgKi8KLyogQ0FMTCBCWSBWQUxVRS0tLS0tLS0tLS0tLS0gKi8KCWJvb2wJYldJRklfRGlyZWN0OwoJYm9vbAliV0lGSV9EaXNwbGF5OwoJYm9vbAliTGlua2VkOwoJdTgJUlNTSV9NaW47Cgl1OAlJbnRlcmZhY2VJbmRleDsgLyogIEFkZCBmb3IgOTJEICBkdWFsIE1BQzogMC0tTWFjMCAxLS1NYWMxICovCglib29sCWJJc01QQ2hpcDsKCWJvb2wJYk9uZUVudHJ5T25seTsKCS8qICBDb21tb24gaW5mbyBmb3IgQlRETSAqLwoJYm9vbAliQnREaXNhYmxlZDsJLyogIEJUIGlzIGRpc2FibGVkICovCglib29sCWJCdEhzT3BlcmF0aW9uOwkvKiAgQlQgSFMgbW9kZSBpcyB1bmRlciBwcm9ncmVzcyAqLwoJdTgJYnRIc0RpZ1ZhbDsJLyogIHVzZSBCVCByc3NpIHRvIGRlY2lkZSB0aGUgRElHIHZhbHVlICovCglib29sCWJCdERpc2FibGVFZGNhVHVyYm87LyogVW5kZXIgc29tZSBjb25kaXRpb24sIGRvbid0IGVuYWJsZSB0aGUKCQkJCSAgICAgKiBFRENBIFR1cmJvICovCglib29sCWJCdEJ1c3k7CQkJLyogIEJUIGlzIGJ1c3kuICovCi8qIENBTEwgQlkgVkFMVUUtLS0tLS0tLS0tLS0tICovCgoJLyogMiBEZWZpbmUgU1RBIGluZm8uICovCgkvKiAgX09ETV9TVEFfSU5GTyAqLwoJLyogIEZvciBNUCwgd2UgbmVlZCB0byByZWR1Y2Ugb25lIGFycmF5IHBvaW50ZXIgZm9yIGRlZmF1bHQgcG9ydC4/PyAqLwoJc3RydWN0IHN0YV9pbmZvICpwT0RNX1N0YUluZm9bT0RNX0FTU09DSUFURV9FTlRSWV9OVU1dOwoKCXUxNglDdXJybWluUnB0VGltZTsKCXN0cnVjdCBvZG1fcmFfaW5mbyBSQUluZm9bT0RNX0FTU09DSUFURV9FTlRSWV9OVU1dOyAvKiBVc2UgTWFjSUQgYXMKCQkJKiBhcnJheSBpbmRleC4gU1RBIE1hY0lEPTAsCgkJCSogVldpRmkgQ2xpZW50IE1hY0lEPXsxLCBPRE1fQVNTT0NJQVRFX0VOVFJZX05VTS0xfSAqLwoJLyogICovCgkvKiAgMjAxMi8wMi8xNCBNSCBBZGQgdG8gc2hhcmUgODhFIHJhIHdpdGggb3RoZXIgU1cgdGVhbS4gKi8KCS8qICBXZSBuZWVkIHRvIGNvbGVsY3QgYWxsIHN1cHBvcnQgYWJpbGl0IHRvIGEgcHJvcGVyIGFyZWEuICovCgkvKiAgKi8KCWJvb2wJUmFTdXBwb3J0ODhFOwoKCS8qICBEZWZpbmUgLi4uLi4uLi4uLi4gKi8KCgkvKiAgTGF0ZXN0IHBhY2tldCBwaHkgaW5mbyAoT0RNIHdyaXRlKSAqLwoJc3RydWN0IG9kbV9waHlfZGJnX2luZm8gUGh5RGJnSW5mbzsKCgkvKiAgTGF0ZXN0IHBhY2tldCBwaHkgaW5mbyAoT0RNIHdyaXRlKSAqLwoJc3RydWN0IG9kbV9tYWNfc3RhdHVzX2luZm8gKnBNYWNJbmZvOwoKCS8qICBEaWZmZXJlbnQgVGVhbSBpbmRlcGVuZHQgc3RydWN0dXJlPz8gKi8KCgkvKiBPRE0gU3RydWN0dXJlICovCglzdHJ1Y3QgZmFzdF9hbnRfdHJhaW4gRE1fRmF0VGFibGU7CglzdHJ1Y3QgcnR3X2RpZwlETV9EaWdUYWJsZTsKCXN0cnVjdCBydGxfcHMJRE1fUFNUYWJsZTsKCXN0cnVjdCBkeW5fcHJpbWFyeV9jY2EgRE1fUHJpQ0NBOwoJc3RydWN0IHJ4X2hwYwlETV9SWEhQX1RhYmxlOwoJc3RydWN0IGZhbHNlX2FsYXJtX3N0YXRzIEZhbHNlQWxtQ250OwoJc3RydWN0IGZhbHNlX2FsYXJtX3N0YXRzIEZsYXNlQWxtQ250QnVkZHlBZGFwdGVyOwoJc3RydWN0IHN3X2FudF9zd2l0Y2ggRE1fU1dBVF9UYWJsZTsKCWJvb2wJCVJTU0lfdGVzdDsKCglzdHJ1Y3QgZWRjYV90dXJibyBETV9FRENBX1RhYmxlOwoJdTMyCQlXTU1FRENBX0JFOwoJLyogIENvcHkgZnJvbSBTRDQgc3RydWN0dXJlICovCgkvKiAgKi8KCS8qICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoJLyogICovCgoJYm9vbAkqcGJEcml2ZXJTdG9wcGVkOwoJYm9vbAkqcGJEcml2ZXJJc0dvaW5nVG9QbnBTZXRQb3dlclNsZWVwOwoJYm9vbAkqcGluaXRfYWRwdF9pbl9wcm9ncmVzczsKCgkvKiBQU0QgKi8KCWJvb2wJYlVzZXJBc3NpZ25MZXZlbDsKCXN0cnVjdCB0aW1lcl9saXN0IFBTRFRpbWVyOwoJdTgJUlNTSV9CVDsJCQkvKiBjb21lIGZyb20gQlQgKi8KCWJvb2wJYlBTRGluUHJvY2VzczsKCWJvb2wJYkRNSW5pdGlhbEdhaW5FbmFibGU7CgoJLyogZm9yIHJhdGUgYWRhcHRpdmUsIGluIGZhY3QsICA4OGMvOTJjIGZ3IHdpbGwgaGFuZGxlIHRoaXMgKi8KCXU4CWJVc2VSQU1hc2s7CgoJc3RydWN0IG9kbV9yYXRlX2FkYXB0IFJhdGVBZGFwdGl2ZTsKCglzdHJ1Y3Qgb2RtX3JmX2NhbCBSRkNhbGlicmF0ZUluZm87CgoJLyogIFRYIHBvd2VyIHRyYWNraW5nICovCgl1OAlCYlN3aW5nSWR4T2ZkbTsKCXU4CUJiU3dpbmdJZHhPZmRtQ3VycmVudDsKCXU4CUJiU3dpbmdJZHhPZmRtQmFzZTsKCWJvb2wJQmJTd2luZ0ZsYWdPZmRtOwoJdTgJQmJTd2luZ0lkeENjazsKCXU4CUJiU3dpbmdJZHhDY2tDdXJyZW50OwoJdTgJQmJTd2luZ0lkeENja0Jhc2U7Cglib29sCUJiU3dpbmdGbGFnQ2NrOwoJdTgJKm1wX21vZGU7CgkvKiAgT0RNIHN5c3RlbSByZXNvdXJjZS4gKi8KCgkvKiAgT0RNIHJlbGF0aXZlIHRpbWUuICovCglzdHJ1Y3QgdGltZXJfbGlzdCBQYXRoRGl2U3dpdGNoVGltZXI7CgkvKiAyMDExLjA5LjI3IGFkZCBmb3IgUGF0aCBEaXZlcnNpdHkgKi8KCXN0cnVjdCB0aW1lcl9saXN0IENDS1BhdGhEaXZlcnNpdHlUaW1lcjsKCXN0cnVjdCB0aW1lcl9saXN0IEZhc3RBbnRUcmFpbmluZ1RpbWVyOwp9OwkJLyogIERNX0R5bmFtaWNfTWVjaGFuaXNtX1N0cnVjdHVyZSAqLwoKI2RlZmluZSBPRE1fUkZfUEFUSF9NQVggMwoKZW51bSBPRE1fUkZfQ09OVEVOVCB7CglvZG1fcmFkaW9hX3R4dCA9IDB4MTAwMCwKCW9kbV9yYWRpb2JfdHh0ID0gMHgxMDAxLAoJb2RtX3JhZGlvY190eHQgPSAweDEwMDIsCglvZG1fcmFkaW9kX3R4dCA9IDB4MTAwMwp9OwoKZW51bSBvZG1fYmJfY29uZmlnX3R5cGUgewogICAgQ09ORklHX0JCX1BIWV9SRUcsCiAgICBDT05GSUdfQkJfQUdDX1RBQiwKICAgIENPTkZJR19CQl9BR0NfVEFCXzJHLAogICAgQ09ORklHX0JCX0FHQ19UQUJfNUcsCiAgICBDT05GSUdfQkJfUEhZX1JFR19QRywKfTsKCi8qICBTdGF0dXMgY29kZSAqLwplbnVtIHJ0X3N0YXR1cyB7CglSVF9TVEFUVVNfU1VDQ0VTUywKCVJUX1NUQVRVU19GQUlMVVJFLAoJUlRfU1RBVFVTX1BFTkRJTkcsCglSVF9TVEFUVVNfUkVTT1VSQ0UsCglSVF9TVEFUVVNfSU5WQUxJRF9DT05URVhULAoJUlRfU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSLAoJUlRfU1RBVFVTX05PVF9TVVBQT1JULAoJUlRfU1RBVFVTX09TX0FQSV9GQUlMRUQsCn07CgovKiAzPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyogMyBESUcgKi8KLyogMz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCgplbnVtIGRtX2RpZ19vcCB7CglSVF9UWVBFX1RIUkVTSF9ISUdICT0gMCwKCVJUX1RZUEVfVEhSRVNIX0xPVwk9IDEsCglSVF9UWVBFX0JBQ0tPRkYJCT0gMiwKCVJUX1RZUEVfUlhfR0FJTl9NSU4JPSAzLAoJUlRfVFlQRV9SWF9HQUlOX01BWAk9IDQsCglSVF9UWVBFX0VOQUJMRQkJPSA1LAoJUlRfVFlQRV9ESVNBQkxFCQk9IDYsCglESUdfT1BfVFlQRV9NQVgKfTsKCiNkZWZpbmUJCURNX0RJR19USFJFU0hfSElHSAk0MAojZGVmaW5lCQlETV9ESUdfVEhSRVNIX0xPVwkzNQoKI2RlZmluZQkJRE1fU0NBTl9SU1NJX1RICQkweDE0IC8qIHNjYW4gcmV0dXJuIGlzc3VlIGZvciBMQyAqLwoKCiNkZWZpbmUJCURNX2ZhbHNlX0FMQVJNX1RIUkVTSF9MT1cJNDAwCiNkZWZpbmUJCURNX2ZhbHNlX0FMQVJNX1RIUkVTSF9ISUdICTEwMDAKCiNkZWZpbmUJCURNX0RJR19NQVhfTklDCQkJMHg0ZQojZGVmaW5lCQlETV9ESUdfTUlOX05JQwkJCTB4MWUgLyogMHgyMi8weDFjICovCgojZGVmaW5lCQlETV9ESUdfTUFYX0FQCQkJMHgzMgojZGVmaW5lCQlETV9ESUdfTUlOX0FQCQkJMHgyMAoKI2RlZmluZQkJRE1fRElHX01BWF9OSUNfSFAJCTB4NDYKI2RlZmluZQkJRE1fRElHX01JTl9OSUNfSFAJCTB4MmUKCiNkZWZpbmUJCURNX0RJR19NQVhfQVBfSFAJCTB4NDIKI2RlZmluZQkJRE1fRElHX01JTl9BUF9IUAkJMHgzMAoKLyogdml2aSA5MmMmOTJkIGhhcyBkaWZmZXJlbnQgZGVmaW5pdGlvbiwgMjAxMTA1MDQgKi8KLyogdGhpcyBpcyBmb3IgOTJjICovCiNkZWZpbmUJCURNX0RJR19GQV9USDAJCQkweDIwMC8qIDB4MjAgKi8KI2RlZmluZQkJRE1fRElHX0ZBX1RIMQkJCTB4MzAwLyogMHgxMDAgKi8KI2RlZmluZQkJRE1fRElHX0ZBX1RIMgkJCTB4NDAwLyogMHgyMDAgKi8KLyogdGhpcyBpcyBmb3IgOTJkICovCiNkZWZpbmUJCURNX0RJR19GQV9USDBfOTJECQkweDEwMAojZGVmaW5lCQlETV9ESUdfRkFfVEgxXzkyRAkJMHg0MDAKI2RlZmluZQkJRE1fRElHX0ZBX1RIMl85MkQJCTB4NjAwCgojZGVmaW5lCQlETV9ESUdfQkFDS09GRl9NQVgJCTEyCiNkZWZpbmUJCURNX0RJR19CQUNLT0ZGX01JTgkJLTQKI2RlZmluZQkJRE1fRElHX0JBQ0tPRkZfREVGQVVMVAkJMTAKCi8qIDM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKiAzIEFHQyBSWCBIaWdoIFBvd2VyIE1vZGUgKi8KLyogMz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiNkZWZpbmUJICBMTkFfTG93X0dhaW5fMQkJMHg2NAojZGVmaW5lCSAgTE5BX0xvd19HYWluXzIJCTB4NUEKI2RlZmluZQkgIExOQV9Mb3dfR2Fpbl8zCQkweDU4CgojZGVmaW5lCSAgRkFfUlhIUF9USDEJCQk1MDAwCiNkZWZpbmUJICBGQV9SWEhQX1RIMgkJCTE1MDAKI2RlZmluZQkgIEZBX1JYSFBfVEgzCQkJODAwCiNkZWZpbmUJICBGQV9SWEhQX1RINAkJCTYwMAojZGVmaW5lCSAgRkFfUlhIUF9USDUJCQk1MDAKCi8qIDM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKiAzIEVEQ0EgKi8KLyogMz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCgovKiAzPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyogMyBEeW5hbWljIFR4IFBvd2VyICovCi8qIDM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKiBEeW5hbWljIFR4IFBvd2VyIENvbnRyb2wgVGhyZXNob2xkICovCiNkZWZpbmUJCVRYX1BPV0VSX05FQVJfRklFTERfVEhSRVNIX0xWTDIJNzQKI2RlZmluZQkJVFhfUE9XRVJfTkVBUl9GSUVMRF9USFJFU0hfTFZMMQk2NwojZGVmaW5lCQlUWF9QT1dFUl9ORUFSX0ZJRUxEX1RIUkVTSF9BUAkJMHgzRgoKI2RlZmluZQkJVHhIaWdoUHdyTGV2ZWxfTm9ybWFsCQkwCiNkZWZpbmUJCVR4SGlnaFB3ckxldmVsX0xldmVsMQkJMQojZGVmaW5lCQlUeEhpZ2hQd3JMZXZlbF9MZXZlbDIJCTIKI2RlZmluZQkJVHhIaWdoUHdyTGV2ZWxfQlQxCQkzCiNkZWZpbmUJCVR4SGlnaFB3ckxldmVsX0JUMgkJNAojZGVmaW5lCQlUeEhpZ2hQd3JMZXZlbF8xNQkJNQojZGVmaW5lCQlUeEhpZ2hQd3JMZXZlbF8zNQkJNgojZGVmaW5lCQlUeEhpZ2hQd3JMZXZlbF81MAkJNwojZGVmaW5lCQlUeEhpZ2hQd3JMZXZlbF83MAkJOAojZGVmaW5lCQlUeEhpZ2hQd3JMZXZlbF8xMDAJCTkKCi8qIDM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKiAzIFJhdGUgQWRhcHRpdmUgKi8KLyogMz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiNkZWZpbmUJCURNX1JBVFJfU1RBX0lOSVQJCTAKI2RlZmluZQkJRE1fUkFUUl9TVEFfSElHSAkJMQojZGVmaW5lCQlETV9SQVRSX1NUQV9NSURETEUJCTIKI2RlZmluZQkJRE1fUkFUUl9TVEFfTE9XCQkJMwoKLyogMz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qIDMgQkIgUG93ZXIgU2F2ZSAqLwovKiAzPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KCgplbnVtIGRtXzFyX2NjYSB7CglDQ0FfMVIgPSAwLAoJQ0NBXzJSID0gMSwKCUNDQV9NQVggPSAyLAp9OwoKZW51bSBkbV9yZiB7CglSRl9TYXZlID0gMCwKCVJGX05vcm1hbCA9IDEsCglSRl9NQVggPSAyLAp9OwoKLyogMz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qIDMgQW50ZW5uYSBEaXZlcnNpdHkgKi8KLyogMz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCmVudW0gZG1fc3dhcyB7CglBbnRlbm5hX0EgPSAxLAoJQW50ZW5uYV9CID0gMiwKCUFudGVubmFfTUFYID0gMywKfTsKCi8qICBNYXhpbWFsIG51bWJlciBvZiBhbnRlbm5hIGRldGVjdGlvbiBtZWNoYW5pc20gbmVlZHMgdG8gcGVyZm9ybS4gKi8KI2RlZmluZQlNQVhfQU5URU5OQV9ERVRFQ1RJT05fQ05UCTEwCgovKiAgRXh0ZXJuIEdsb2JhbCBWYXJpYWJsZXMuICovCiNkZWZpbmUJT0ZETV9UQUJMRV9TSVpFXzkyQwkzNwojZGVmaW5lCU9GRE1fVEFCTEVfU0laRV85MkQJNDMKI2RlZmluZQlDQ0tfVEFCTEVfU0laRQkJMzMKCmV4dGVybgl1MzIgT0ZETVN3aW5nVGFibGVbT0ZETV9UQUJMRV9TSVpFXzkyRF07CmV4dGVybgl1OCBDQ0tTd2luZ1RhYmxlX0NoMV9DaDEzW0NDS19UQUJMRV9TSVpFXVs4XTsKZXh0ZXJuCXU4IENDS1N3aW5nVGFibGVfQ2gxNCBbQ0NLX1RBQkxFX1NJWkVdWzhdOwoKLyogIGNoZWNrIFN0YSBwb2ludGVyIHZhbGlkIG9yIG5vdCAqLwojZGVmaW5lIElTX1NUQV9WQUxJRChwU3RhKQkJKHBTdGEpCi8qICAyMDEwMDUxNCBKb3NlcGg6IEFkZCBkZWZpbml0aW9uIGZvciBhbnRlbm5hIHN3aXRjaGluZyB0ZXN0IGFmdGVyIGxpbmsuICovCi8qICBUaGlzIGluZGljYXRlcyB0d28gZGlmZmVyZW50IHRoZSBzdGVwcy4gKi8KLyogIEluIFNXQVdfU1RFUF9QRUFLLCBkcml2ZXIgbmVlZHMgdG8gc3dpdGNoIGFudGVubmEgYW5kIGxpc3RlbiB0byB0aGUKICogIHNpZ25hbCBvbiB0aGUgYWlyLiAqLwovKiAgSW4gU1dBV19TVEVQX0RFVEVSTUlORSwgZHJpdmVyIGp1c3QgY29tcGFyZXMgdGhlIHNpZ25hbCBjYXB0dXJlZCBpbgogKiAgU1dBV19TVEVQX1BFQUsgKi8KLyogIHdpdGggb3JpZ2luYWwgUlNTSSB0byBkZXRlcm1pbmUgaWYgaXQgaXMgbmVjZXNzYXJ5IHRvIHN3aXRjaCBhbnRlbm5hLiAqLwojZGVmaW5lIFNXQVdfU1RFUF9QRUFLCQkwCiNkZWZpbmUgU1dBV19TVEVQX0RFVEVSTUlORQkxCgojZGVmaW5lIGRtX0NoZWNrVFhQb3dlclRyYWNraW5nIE9ETV9UWFBvd2VyVHJhY2tpbmdDaGVjawojZGVmaW5lIGRtX1JGX1NhdmluZwlPRE1fUkZfU2F2aW5nCgp2b2lkIE9ETV9SRl9TYXZpbmcoc3RydWN0IG9kbV9kbV9zdHJ1Y3QgKnBETV9PZG0sIHU4IGJGb3JjZUluTm9ybWFsKTsKdm9pZCBPRE1fVFhQb3dlclRyYWNraW5nQ2hlY2soc3RydWN0IG9kbV9kbV9zdHJ1Y3QgKnBETV9PZG0pOwp2b2lkIG9kbV9ESUdieVJTU0lfTFBTKHN0cnVjdCBvZG1fZG1fc3RydWN0ICpwRE1fT2RtKTsKdm9pZCBPRE1fV3JpdGVfQ0NLX0NDQV9UaHJlcyhzdHJ1Y3Qgb2RtX2RtX3N0cnVjdCAqcERNX09kbSwgdTggQ3VyQ0NLX0NDQVRocmVzKTsKYm9vbCBPRE1fUkFTdGF0ZUNoZWNrKHN0cnVjdCBvZG1fZG1fc3RydWN0ICpwRE1fT2RtLCBzMzIgUlNTSSwKCQkgICAgICBib29sIGJGb3JjZVVwZGF0ZSwgdTggKnBSQVRSU3RhdGUpOwp1MzIgQ29udmVydFRvX2RCKHUzMiBWYWx1ZSk7CnUzMiBPRE1fR2V0X1JhdGVfQml0bWFwKHN0cnVjdCBvZG1fZG1fc3RydWN0ICpwRE1fT2RtLCB1MzIgbWFjaWQsCgkJCXUzMiByYV9tYXNrLCB1OCByc3NpX2xldmVsKTsKdm9pZCBPRE1fQ21uSW5mb0luaXQoc3RydWN0IG9kbV9kbV9zdHJ1Y3QgKnBETV9PZG0sCgkJICAgICBlbnVtIG9kbV9jb21tb25faW5mb19kZWYgQ21uSW5mbywgdTMyIFZhbHVlKTsKdm9pZCBPRE1fQ21uSW5mb1VwZGF0ZShzdHJ1Y3Qgb2RtX2RtX3N0cnVjdCAqcERNX09kbSwgdTMyIENtbkluZm8sIHU2NCBWYWx1ZSk7CnZvaWQgT0RNX0NtbkluZm9Ib29rKHN0cnVjdCBvZG1fZG1fc3RydWN0ICpwRE1fT2RtLAoJCSAgICAgZW51bSBvZG1fY29tbW9uX2luZm9fZGVmIENtbkluZm8sIHZvaWQgKnBWYWx1ZSk7CnZvaWQgT0RNX0NtbkluZm9QdHJBcnJheUhvb2soc3RydWN0IG9kbV9kbV9zdHJ1Y3QgKnBETV9PZG0sCgkJCSAgICAgZW51bSBvZG1fY29tbW9uX2luZm9fZGVmIENtbkluZm8sCgkJCSAgICAgdTE2IEluZGV4LCB2b2lkICpwVmFsdWUpOwp2b2lkIE9ETV9ETUluaXQoc3RydWN0IG9kbV9kbV9zdHJ1Y3QgKnBETV9PZG0pOwp2b2lkIE9ETV9ETVdhdGNoZG9nKHN0cnVjdCBvZG1fZG1fc3RydWN0ICpwRE1fT2RtKTsKdm9pZCBPRE1fV3JpdGVfRElHKHN0cnVjdCBvZG1fZG1fc3RydWN0ICpwRE1fT2RtLCB1OCBDdXJyZW50SUdJKTsKCiNlbmRpZgo=