ZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vS2NvbmZpZyBiL2RyaXZlcnMvY2hhci9kcm0vS2NvbmZpZwppbmRleCBjMmIxMmVhLi4xMjM0MTdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL0tjb25maWcKKysrIGIvZHJpdmVycy9jaGFyL2RybS9LY29uZmlnCkBAIC05NiwzICs5NiwxMCBAQAogICAgICAgICAgIGNoaXBzZXQuIElmIE0gaXMgc2VsZWN0ZWQgdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzaXMuIEFHUAogICAgICAgICAgIHN1cHBvcnQgaXMgcmVxdWlyZWQgZm9yIHRoaXMgZHJpdmVyIHRvIHdvcmsuCiAKK2NvbmZpZyBEUk1fVklBCisJdHJpc3RhdGUgIlZpYSB1bmljaHJvbWUgdmlkZW8gY2FyZHMiCisJZGVwZW5kcyBvbiBEUk0KKwloZWxwCisJICBDaG9vc2UgdGhpcyBvcHRpb24gaWYgeW91IGhhdmUgYSBWaWEgdW5pY2hyb21lIG9yIGNvbXBhdGlibGUgdmlkZW8KKwkgIGNoaXBzZXQuIElmIE0gaXMgc2VsZWN0ZWQgdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB2aWEuCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vTWFrZWZpbGUgYi9kcml2ZXJzL2NoYXIvZHJtL01ha2VmaWxlCmluZGV4IDc0NDRkZWMuLjhjMTIyNTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9jaGFyL2RybS9NYWtlZmlsZQpAQCAtMTgsNiArMTgsNyBAQAogcmFkZW9uLW9ianMgOj0gcmFkZW9uX2Rydi5vIHJhZGVvbl9jcC5vIHJhZGVvbl9zdGF0ZS5vIHJhZGVvbl9tZW0ubyByYWRlb25faXJxLm8KIGZmYi1vYmpzICAgIDo9IGZmYl9kcnYubyBmZmJfY29udGV4dC5vCiBzaXMtb2JqcyAgICA6PSBzaXNfZHJ2Lm8gc2lzX2RzLm8gc2lzX21tLm8KK3ZpYS1vYmpzICAgIDo9IHZpYV9pcnEubyB2aWFfZHJ2Lm8gdmlhX2RzLm8gdmlhX21hcC5vIHZpYV9tbS5vIHZpYV9kbWEubyB2aWFfdmVyaWZpZXIubyB2aWFfdmlkZW8ubwogCiBpZmVxICgkKENPTkZJR19DT01QQVQpLHkpCiBkcm0tb2JqcyAgICArPSBkcm1faW9jMzIubwpAQCAtMzUsNCArMzYsNSBAQAogb2JqLSQoQ09ORklHX0RSTV9JOTE1KSAgKz0gaTkxNS5vCiBvYmotJChDT05GSUdfRFJNX0ZGQikgICArPSBmZmIubwogb2JqLSQoQ09ORklHX0RSTV9TSVMpICAgKz0gc2lzLm8KK29iai0kKENPTkZJR19EUk1fVklBKQkrPXZpYS5vCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vZHJtX3BjaWlkcy5oIGIvZHJpdmVycy9jaGFyL2RybS9kcm1fcGNpaWRzLmgKaW5kZXggMTFjNjk1MC4uNzBjYTRmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9kcm1fcGNpaWRzLmgKKysrIGIvZHJpdmVycy9jaGFyL2RybS9kcm1fcGNpaWRzLmgKQEAgLTIyMywzICsyMjMsMTAgQEAKIAl7MHg4MDg2LCAweDI3NzIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LCBcCiAJezAsIDAsIDB9CiAKKyNkZWZpbmUgdmlhZHJ2X1BDSV9JRFMgXAorCXsweDExMDYsIDB4MzAyMiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sIFwKKwl7MHgxMTA2LCAweDMxMjIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LCBcCisJezB4MTEwNiwgMHg3MjA1LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwgXAorCXsweDExMDYsIDB4NzIwNCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sIFwKKwl7MCwgMCwgMH0KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS92aWFfM2RfcmVnLmggYi9kcml2ZXJzL2NoYXIvZHJtL3ZpYV8zZF9yZWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjYxYmI1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9jaGFyL2RybS92aWFfM2RfcmVnLmgKQEAgLTAsMCArMSwxNjUxIEBACisvKgorICogQ29weXJpZ2h0IDE5OTgtMjAwMyBWSUEgVGVjaG5vbG9naWVzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgMjAwMS0yMDAzIFMzIEdyYXBoaWNzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3ViIGxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUKKyAqIG5leHQgcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zCisgKiBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTi1JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMCisgKiBWSUEsIFMzIEdSQVBISUNTLCBBTkQvT1IgSVRTIFNVUFBMSUVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCisgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIKKyAqIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworCisjaWZuZGVmIFZJQV8zRF9SRUdfSAorI2RlZmluZSBWSUFfM0RfUkVHX0gKKyNkZWZpbmUgSENfUkVHX0JBU0UgICAgICAgICAgICAgMHgwNDAwCisKKyNkZWZpbmUgSENfUkVHX1RSQU5TX1NQQUNFICAgICAgMHgwMDQwCisKKyNkZWZpbmUgSENfUGFyYU5fTUFTSyAgICAgICAgICAgMHhmZmZmZmZmZgorI2RlZmluZSBIQ19QYXJhX01BU0sgICAgICAgICAgICAweDAwZmZmZmZmCisjZGVmaW5lIEhDX1N1YkFfTUFTSyAgICAgICAgICAgIDB4ZmYwMDAwMDAKKyNkZWZpbmUgSENfU3ViQV9TSElGVCAgICAgICAgICAgMjQKKy8qIFRyYW5zbWlzc2lvbiBTZXR0aW5nCisgKi8KKyNkZWZpbmUgSENfUkVHX1RSQU5TX1NFVCAgICAgICAgMHgwMDNjCisjZGVmaW5lIEhDX1BhcmFTdWJUeXBlX01BU0sgICAgIDB4ZmYwMDAwMDAKKyNkZWZpbmUgSENfUGFyYVR5cGVfTUFTSyAgICAgICAgMHgwMGZmMDAwMAorI2RlZmluZSBIQ19QYXJhT1NfTUFTSyAgICAgICAgICAweDAwMDBmZjAwCisjZGVmaW5lIEhDX1BhcmFBZHJfTUFTSyAgICAgICAgIDB4MDAwMDAwZmYKKyNkZWZpbmUgSENfUGFyYVN1YlR5cGVfU0hJRlQgICAgMjQKKyNkZWZpbmUgSENfUGFyYVR5cGVfU0hJRlQgICAgICAgMTYKKyNkZWZpbmUgSENfUGFyYU9TX1NISUZUICAgICAgICAgOAorI2RlZmluZSBIQ19QYXJhQWRyX1NISUZUICAgICAgICAwCisKKyNkZWZpbmUgSENfUGFyYVR5cGVfQ21kVmRhdGEgICAgMHgwMDAwCisjZGVmaW5lIEhDX1BhcmFUeXBlX05vdFRleCAgICAgIDB4MDAwMQorI2RlZmluZSBIQ19QYXJhVHlwZV9UZXggICAgICAgICAweDAwMDIKKyNkZWZpbmUgSENfUGFyYVR5cGVfUGFsZXR0ZSAgICAgMHgwMDAzCisjZGVmaW5lIEhDX1BhcmFUeXBlX1ByZUNSICAgICAgIDB4MDAxMAorI2RlZmluZSBIQ19QYXJhVHlwZV9BdXRvICAgICAgICAweDAwZmUKKworLyogVHJhbnNtaXNzaW9uIFNwYWNlCisgKi8KKyNkZWZpbmUgSENfUkVHX0hwYXJhMCAgICAgICAgICAgMHgwMDQwCisjZGVmaW5lIEhDX1JFR19IcGF0YUFGICAgICAgICAgIDB4MDJmYworCisvKiBSZWFkCisgKi8KKyNkZWZpbmUgSENfUkVHX0hSRW5nU3QgICAgICAgICAgMHgwMDAwCisjZGVmaW5lIEhDX1JFR19IUkZJRk9lbXB0eSAgICAgIDB4MDAwNAorI2RlZmluZSBIQ19SRUdfSFJGSUZPZnVsbCAgICAgICAweDAwMDgKKyNkZWZpbmUgSENfUkVHX0hSRXJyICAgICAgICAgICAgMHgwMDBjCisjZGVmaW5lIEhDX1JFR19GSUZPc3RhdHVzICAgICAgIDB4MDAxMAorLyogSENfUkVHX0hSRW5nU3QgICAgICAgICAgMHgwMDAwCisgKi8KKyNkZWZpbmUgSENfSERBU1pDX01BU0sgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBIQ19IU0dFTUlfTUFTSyAgICAgICAgICAweDAwMDBmMDAwCisjZGVmaW5lIEhDX0hMR0VNSVN0X01BU0sgICAgICAgIDB4MDAwMDBmMDAKKyNkZWZpbmUgSENfSENSU3RfTUFTSyAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBIQ19IU0UwU3RfTUFTSyAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEhDX0hTRTFTdF9NQVNLICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgSENfSFBFU3RfTUFTSyAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBIQ19IWEVTdF9NQVNLICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEhDX0hCRVN0X01BU0sgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgSENfSEUyU3RfTUFTSyAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBIQ19IRTNTdF9NQVNLICAgICAgICAgICAweDAwMDAwMDAxCisvKiBIQ19SRUdfSFJGSUZPZW1wdHkgICAgICAweDAwMDQKKyAqLworI2RlZmluZSBIQ19IUlpEZW1wdHlfTUFTSyAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEhDX0hSVFhBZW1wdHlfTUFTSyAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgSENfSFJUWERlbXB0eV9NQVNLICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBIQ19IV1pEZW1wdHlfTUFTSyAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEhDX0hXQ0RlbXB0eV9NQVNLICAgICAgIDB4MDAwMDAwMDEKKy8qIEhDX1JFR19IUkZJRk9mdWxsICAgICAgIDB4MDAwOAorICovCisjZGVmaW5lIEhDX0hSWkRmdWxsX01BU0sgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgSENfSFJUWEFmdWxsX01BU0sgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBIQ19IUlRYRGZ1bGxfTUFTSyAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEhDX0hXWkRmdWxsX01BU0sgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgSENfSFdDRGZ1bGxfTUFTSyAgICAgICAgMHgwMDAwMDAwMQorLyogSENfUkVHX0hSRXJyICAgICAgICAgICAgMHgwMDBjCisgKi8KKyNkZWZpbmUgSENfSEFHUENNRXJyX01BU0sgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBIQ19IQUdQQ01FcnJDX01BU0sgICAgICAweDcwMDAwMDAwCisvKiBIQ19SRUdfRklGT3N0YXR1cyAgICAgICAweDAwMTAKKyAqLworI2RlZmluZSBIQ19IUkZJRk9BVGFsbF9NQVNLICAgICAweDgwMDAwMDAwCisjZGVmaW5lIEhDX0hSRklGT0FUYnVzeV9NQVNLICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgSENfSFJBVEZHTURvX01BU0sgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBIQ19IUkFURkdNRGlfTUFTSyAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIEhDX0hSQVRGUlpEX01BU0sgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgSENfSFJBVEZSVFhBX01BU0sgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBIQ19IUkFURlJUWERfTUFTSyAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEhDX0hSQVRGV1pEX01BU0sgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgSENfSFJBVEZXQ0RfTUFTSyAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBIQ19IUkFUVFhUQUdfTUFTSyAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEhDX0hSQVRUWENIX01BU0sgICAgICAgIDB4MDAwMDAwMDEKKworLyogQUdQIENvbW1hbmQgU2V0dGluZworICovCisjZGVmaW5lIEhDX1N1YkFfSEFHUEJzdEwgICAgICAgIDB4MDA2MAorI2RlZmluZSBIQ19TdWJBX0hBR1BCZW5kTCAgICAgICAweDAwNjEKKyNkZWZpbmUgSENfU3ViQV9IQUdQQ01OVCAgICAgICAgMHgwMDYyCisjZGVmaW5lIEhDX1N1YkFfSEFHUEJwTCAgICAgICAgIDB4MDA2MworI2RlZmluZSBIQ19TdWJBX0hBR1BCcEggICAgICAgICAweDAwNjQKKy8qIEhDX1N1YkFfSEFHUENNTlQgICAgICAgIDB4MDA2MgorICovCisjZGVmaW5lIEhDX0hBR1BDTU5UX01BU0sgICAgICAgIDB4MDA4MDAwMDAKKyNkZWZpbmUgSENfSENtZEVyckNscl9NQVNLICAgICAgMHgwMDQwMDAwMAorI2RlZmluZSBIQ19IQUdQQmVuZEhfTUFTSyAgICAgICAweDAwMDBmZjAwCisjZGVmaW5lIEhDX0hBR1BCc3RIX01BU0sgICAgICAgIDB4MDAwMDAwZmYKKyNkZWZpbmUgSENfSEFHUEJlbmRIX1NISUZUICAgICAgOAorI2RlZmluZSBIQ19IQUdQQnN0SF9TSElGVCAgICAgICAwCisvKiBIQ19TdWJBX0hBR1BCcEwgICAgICAgICAweDAwNjMKKyAqLworI2RlZmluZSBIQ19IQUdQQnBMX01BU0sgICAgICAgICAweDAwZmZmZmZjCisjZGVmaW5lIEhDX0hBR1BCcElEX01BU0sgICAgICAgIDB4MDAwMDAwMDMKKyNkZWZpbmUgSENfSEFHUEJwSURfUEFVU0UgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBIQ19IQUdQQnBJRF9KVU1QICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEhDX0hBR1BCcElEX1NUT1AgICAgICAgIDB4MDAwMDAwMDIKKy8qIEhDX1N1YkFfSEFHUEJwSCAgICAgICAgIDB4MDA2NAorICovCisjZGVmaW5lIEhDX0hBR1BCcEhfTUFTSyAgICAgICAgIDB4MDBmZmZmZmYKKworLyogTWlzY2VsbGFuZW91cyBTZXR0aW5ncworICovCisjZGVmaW5lIEhDX1N1YkFfSENsaXBUQiAgICAgICAgIDB4MDA3MAorI2RlZmluZSBIQ19TdWJBX0hDbGlwTFIgICAgICAgICAweDAwNzEKKyNkZWZpbmUgSENfU3ViQV9IRlBDbGlwVEwgICAgICAgMHgwMDcyCisjZGVmaW5lIEhDX1N1YkFfSEZQQ2xpcEJMICAgICAgIDB4MDA3MworI2RlZmluZSBIQ19TdWJBX0hGUENsaXBMTCAgICAgICAweDAwNzQKKyNkZWZpbmUgSENfU3ViQV9IRlBDbGlwUkwgICAgICAgMHgwMDc1CisjZGVmaW5lIEhDX1N1YkFfSEZQQ2xpcFRCSCAgICAgIDB4MDA3NgorI2RlZmluZSBIQ19TdWJBX0hGUENsaXBMUkggICAgICAweDAwNzcKKyNkZWZpbmUgSENfU3ViQV9ITFAgICAgICAgICAgICAgMHgwMDc4CisjZGVmaW5lIEhDX1N1YkFfSExQUkYgICAgICAgICAgIDB4MDA3OQorI2RlZmluZSBIQ19TdWJBX0hTb2xpZENMICAgICAgICAweDAwN2EKKyNkZWZpbmUgSENfU3ViQV9IUGl4R0MgICAgICAgICAgMHgwMDdiCisjZGVmaW5lIEhDX1N1YkFfSFNQWFlPUyAgICAgICAgIDB4MDA3YworI2RlZmluZSBIQ19TdWJBX0hWZXJ0ZXhDTlQgICAgICAweDAwN2QKKworI2RlZmluZSBIQ19IQ2xpcFRfTUFTSyAgICAgICAgICAweDAwZmZmMDAwCisjZGVmaW5lIEhDX0hDbGlwVF9TSElGVCAgICAgICAgIDEyCisjZGVmaW5lIEhDX0hDbGlwQl9NQVNLICAgICAgICAgIDB4MDAwMDBmZmYKKyNkZWZpbmUgSENfSENsaXBCX1NISUZUICAgICAgICAgMAorI2RlZmluZSBIQ19IQ2xpcExfTUFTSyAgICAgICAgICAweDAwZmZmMDAwCisjZGVmaW5lIEhDX0hDbGlwTF9TSElGVCAgICAgICAgIDEyCisjZGVmaW5lIEhDX0hDbGlwUl9NQVNLICAgICAgICAgIDB4MDAwMDBmZmYKKyNkZWZpbmUgSENfSENsaXBSX1NISUZUICAgICAgICAgMAorI2RlZmluZSBIQ19IRlBDbGlwQkhfTUFTSyAgICAgICAweDAwMDBmZjAwCisjZGVmaW5lIEhDX0hGUENsaXBCSF9TSElGVCAgICAgIDgKKyNkZWZpbmUgSENfSEZQQ2xpcFRIX01BU0sgICAgICAgMHgwMDAwMDBmZgorI2RlZmluZSBIQ19IRlBDbGlwVEhfU0hJRlQgICAgICAwCisjZGVmaW5lIEhDX0hGUENsaXBSSF9NQVNLICAgICAgIDB4MDAwMGZmMDAKKyNkZWZpbmUgSENfSEZQQ2xpcFJIX1NISUZUICAgICAgOAorI2RlZmluZSBIQ19IRlBDbGlwTEhfTUFTSyAgICAgICAweDAwMDAwMGZmCisjZGVmaW5lIEhDX0hGUENsaXBMSF9TSElGVCAgICAgIDAKKyNkZWZpbmUgSENfSFNvbGlkQ0hfTUFTSyAgICAgICAgMHgwMDAwMDBmZgorI2RlZmluZSBIQ19IUGl4R0NfTUFTSyAgICAgICAgICAweDAwODAwMDAwCisjZGVmaW5lIEhDX0hTUFhPU19NQVNLICAgICAgICAgIDB4MDBmZmYwMDAKKyNkZWZpbmUgSENfSFNQWE9TX1NISUZUICAgICAgICAgMTIKKyNkZWZpbmUgSENfSFNQWU9TX01BU0sgICAgICAgICAgMHgwMDAwMGZmZgorCisvKiBDb21tYW5kCisgKiBDb21tYW5kIEEKKyAqLworI2RlZmluZSBIQ19IQ21kSGVhZGVyX01BU0sgICAgICAweGZlMDAwMDAwCS8qMHhmZmUwMDAwMCAqLworI2RlZmluZSBIQ19IRTNGaXJlX01BU0sgICAgICAgICAweDAwMTAwMDAwCisjZGVmaW5lIEhDX0hQTVR5cGVfTUFTSyAgICAgICAgIDB4MDAwZjAwMDAKKyNkZWZpbmUgSENfSEVGbGFnX01BU0sgICAgICAgICAgMHgwMDAwZTAwMAorI2RlZmluZSBIQ19IU2hhZGluZ19NQVNLICAgICAgICAweDAwMDAxYzAwCisjZGVmaW5lIEhDX0hQTVZhbGlkTl9NQVNLICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgSENfSFBMRU5EX01BU0sgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBIQ19IVkN5Y2xlX01BU0sgICAgICAgICAweDAwMDAwMGZmCisjZGVmaW5lIEhDX0hWQ3ljbGVfU3R5bGVfTUFTSyAgIDB4MDAwMDAwYzAKKyNkZWZpbmUgSENfSFZDeWNsZV9DaGdBX01BU0sgICAgMHgwMDAwMDAzMAorI2RlZmluZSBIQ19IVkN5Y2xlX0NoZ0JfTUFTSyAgICAweDAwMDAwMDBjCisjZGVmaW5lIEhDX0hWQ3ljbGVfQ2hnQ19NQVNLICAgIDB4MDAwMDAwMDMKKyNkZWZpbmUgSENfSFBNVHlwZV9Qb2ludCAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBIQ19IUE1UeXBlX0xpbmUgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIEhDX0hQTVR5cGVfVHJpICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgSENfSFBNVHlwZV9UcmlXRiAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBIQ19IRUZsYWdfTm9BQSAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIEhDX0hFRmxhZ19hYiAgICAgICAgICAgIDB4MDAwMDgwMDAKKyNkZWZpbmUgSENfSEVGbGFnX2JjICAgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBIQ19IRUZsYWdfY2EgICAgICAgICAgICAweDAwMDAyMDAwCisjZGVmaW5lIEhDX0hTaGFkaW5nX1NvbGlkICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgSENfSFNoYWRpbmdfRmxhdEEgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBIQ19IU2hhZGluZ19GbGF0QiAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIEhDX0hTaGFkaW5nX0ZsYXRDICAgICAgIDB4MDAwMDBjMDAKKyNkZWZpbmUgSENfSFNoYWRpbmdfR291cmF1ZCAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBIQ19IVkN5Y2xlX0Z1bGwgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIEhDX0hWQ3ljbGVfQUZQICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgSENfSFZDeWNsZV9PbmUgICAgICAgICAgMHgwMDAwMDBjMAorI2RlZmluZSBIQ19IVkN5Y2xlX05ld0EgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIEhDX0hWQ3ljbGVfQUEgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgSENfSFZDeWNsZV9BQiAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBIQ19IVkN5Y2xlX0FDICAgICAgICAgICAweDAwMDAwMDMwCisjZGVmaW5lIEhDX0hWQ3ljbGVfTmV3QiAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgSENfSFZDeWNsZV9CQSAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBIQ19IVkN5Y2xlX0JCICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEhDX0hWQ3ljbGVfQkMgICAgICAgICAgIDB4MDAwMDAwMGMKKyNkZWZpbmUgSENfSFZDeWNsZV9OZXdDICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBIQ19IVkN5Y2xlX0NBICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEhDX0hWQ3ljbGVfQ0IgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgSENfSFZDeWNsZV9DQyAgICAgICAgICAgMHgwMDAwMDAwMworCisvKiBDb21tYW5kIEIKKyAqLworI2RlZmluZSBIQ19ITFByc3RfTUFTSyAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIEhDX0hMTGFzdFBfTUFTSyAgICAgICAgIDB4MDAwMDgwMDAKKyNkZWZpbmUgSENfSFZQTVNLX01BU0sgICAgICAgICAgMHgwMDAwN2Y4MAorI2RlZmluZSBIQ19IQkZhY2VfTUFTSyAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEhDX0gybmQxVlRfTUFTSyAgICAgICAgIDB4MDAwMDAwM2YKKyNkZWZpbmUgSENfSFZQTVNLX1ggICAgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBIQ19IVlBNU0tfWSAgICAgICAgICAgICAweDAwMDAyMDAwCisjZGVmaW5lIEhDX0hWUE1TS19aICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgSENfSFZQTVNLX1cgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBIQ19IVlBNU0tfQ2QgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIEhDX0hWUE1TS19DcyAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgSENfSFZQTVNLX1MgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBIQ19IVlBNU0tfVCAgICAgICAgICAgICAweDAwMDAwMDgwCisKKy8qIEVuYWJsZSBTZXR0aW5nCisgKi8KKyNkZWZpbmUgSENfU3ViQV9IRW5hYmxlICAgICAgICAgMHgwMDAwCisjZGVmaW5lIEhDX0hlblRYRW52TWFwX01BU0sgICAgIDB4MDAyMDAwMDAKKyNkZWZpbmUgSENfSGVuVmVydGV4Q05UX01BU0sgICAgMHgwMDEwMDAwMAorI2RlZmluZSBIQ19IZW5DUFVEQVpfTUFTSyAgICAgICAweDAwMDgwMDAwCisjZGVmaW5lIEhDX0hlbkRBU1pXQ19NQVNLICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgSENfSGVuRkJDdWxsX01BU0sgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBIQ19IZW5DV19NQVNLICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIEhDX0hlbkFBX01BU0sgICAgICAgICAgIDB4MDAwMDgwMDAKKyNkZWZpbmUgSENfSGVuU1RfTUFTSyAgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBIQ19IZW5aVF9NQVNLICAgICAgICAgICAweDAwMDAyMDAwCisjZGVmaW5lIEhDX0hlblpXX01BU0sgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgSENfSGVuQVRfTUFTSyAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBIQ19IZW5BV19NQVNLICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIEhDX0hlblNQX01BU0sgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgSENfSGVuTFBfTUFTSyAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBIQ19IZW5UWENIX01BU0sgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIEhDX0hlblRYTVBfTUFTSyAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgSENfSGVuVFhQUF9NQVNLICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBIQ19IZW5UWFRSX01BU0sgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEhDX0hlbkNTX01BU0sgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgSENfSGVuRk9HX01BU0sgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBIQ19IZW5BQkxfTUFTSyAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEhDX0hlbkRUX01BU0sgICAgICAgICAgIDB4MDAwMDAwMDEKKworLyogWiBTZXR0aW5nCisgKi8KKyNkZWZpbmUgSENfU3ViQV9IWldCQmFzTCAgICAgICAgMHgwMDEwCisjZGVmaW5lIEhDX1N1YkFfSFpXQkJhc0ggICAgICAgIDB4MDAxMQorI2RlZmluZSBIQ19TdWJBX0haV0JUeXBlICAgICAgICAweDAwMTIKKyNkZWZpbmUgSENfU3ViQV9IWkJpYXNMICAgICAgICAgMHgwMDEzCisjZGVmaW5lIEhDX1N1YkFfSFpXQmVuZCAgICAgICAgIDB4MDAxNAorI2RlZmluZSBIQ19TdWJBX0haV1RNRCAgICAgICAgICAweDAwMTUKKyNkZWZpbmUgSENfU3ViQV9IWldDREwgICAgICAgICAgMHgwMDE2CisjZGVmaW5lIEhDX1N1YkFfSFpXQ1RBR251bSAgICAgIDB4MDAxNworI2RlZmluZSBIQ19TdWJBX0haQ1lOdW0gICAgICAgICAweDAwMTgKKyNkZWZpbmUgSENfU3ViQV9IWldDRmlyZSAgICAgICAgMHgwMDE5CisvKiBIQ19TdWJBX0haV0JUeXBlCisgKi8KKyNkZWZpbmUgSENfSFpXQlR5cGVfTUFTSyAgICAgICAgMHgwMDgwMDAwMAorI2RlZmluZSBIQ19IWkJpYXNlZFdCX01BU0sgICAgICAweDAwNDAwMDAwCisjZGVmaW5lIEhDX0haT05FYXNGRl9NQVNLICAgICAgIDB4MDAyMDAwMDAKKyNkZWZpbmUgSENfSFpPT05FYXNGRl9NQVNLICAgICAgMHgwMDEwMDAwMAorI2RlZmluZSBIQ19IWldCRk1fTUFTSyAgICAgICAgICAweDAwMDMwMDAwCisjZGVmaW5lIEhDX0haV0JMb2NfTUFTSyAgICAgICAgIDB4MDAwMGMwMDAKKyNkZWZpbmUgSENfSFpXQlBpdF9NQVNLICAgICAgICAgMHgwMDAwM2ZmZgorI2RlZmluZSBIQ19IWldCRk1fMTYgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIEhDX0haV0JGTV8zMiAgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgSENfSFpXQkZNXzI0ICAgICAgICAgICAgMHgwMDAzMDAwMAorI2RlZmluZSBIQ19IWldCTG9jX0xvY2FsICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIEhDX0haV0JMb2NfU3lTICAgICAgICAgIDB4MDAwMDQwMDAKKy8qIEhDX1N1YkFfSFpXQmVuZAorICovCisjZGVmaW5lIEhDX0haV0JlbmRfTUFTSyAgICAgICAgIDB4MDBmZmUwMDAKKyNkZWZpbmUgSENfSFpCaWFzSF9NQVNLICAgICAgICAgMHgwMDAwMDBmZgorI2RlZmluZSBIQ19IWldCZW5kX1NISUZUICAgICAgICAxMAorLyogSENfU3ViQV9IWldUTUQKKyAqLworI2RlZmluZSBIQ19IWldUTURfTUFTSyAgICAgICAgICAweDAwMDcwMDAwCisjZGVmaW5lIEhDX0hFQkVCaWFzX01BU0sgICAgICAgIDB4MDAwMDdmMDAKKyNkZWZpbmUgSENfSFpORl9NQVNLICAgICAgICAgICAgMHgwMDAwMDBmZgorI2RlZmluZSBIQ19IWldUTURfTmV2ZXJQYXNzICAgICAweDAwMDAwMDAwCisjZGVmaW5lIEhDX0haV1RNRF9MVCAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgSENfSFpXVE1EX0VRICAgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBIQ19IWldUTURfTEUgICAgICAgICAgICAweDAwMDMwMDAwCisjZGVmaW5lIEhDX0haV1RNRF9HVCAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgSENfSFpXVE1EX05FICAgICAgICAgICAgMHgwMDA1MDAwMAorI2RlZmluZSBIQ19IWldUTURfR0UgICAgICAgICAgICAweDAwMDYwMDAwCisjZGVmaW5lIEhDX0haV1RNRF9BbGxQYXNzICAgICAgIDB4MDAwNzAwMDAKKyNkZWZpbmUgSENfSEVCRUJpYXNfU0hJRlQgICAgICAgOAorLyogSENfU3ViQV9IWldDREwgICAgICAgICAgMHgwMDE2CisgKi8KKyNkZWZpbmUgSENfSFpXQ0RMX01BU0sgICAgICAgICAgMHgwMGZmZmZmZgorLyogSENfU3ViQV9IWldDVEFHbnVtICAgICAgMHgwMDE3CisgKi8KKyNkZWZpbmUgSENfSFpXQ1RBR251bV9NQVNLICAgICAgMHgwMGZmMDAwMAorI2RlZmluZSBIQ19IWldDVEFHbnVtX1NISUZUICAgICAxNgorI2RlZmluZSBIQ19IWldDREhfTUFTSyAgICAgICAgICAweDAwMDAwMGZmCisjZGVmaW5lIEhDX0haV0NESF9TSElGVCAgICAgICAgIDAKKy8qIEhDX1N1YkFfSFpDWU51bSAgICAgICAgIDB4MDAxOAorICovCisjZGVmaW5lIEhDX0haQ1lOdW1fTUFTSyAgICAgICAgIDB4MDAwMzAwMDAKKyNkZWZpbmUgSENfSFpDWU51bV9TSElGVCAgICAgICAgMTYKKyNkZWZpbmUgSENfSFpXQ1FXbnVtX01BU0sgICAgICAgMHgwMDAwM2ZmZgorI2RlZmluZSBIQ19IWldDUVdudW1fU0hJRlQgICAgICAwCisvKiBIQ19TdWJBX0haV0NGaXJlICAgICAgICAweDAwMTkKKyAqLworI2RlZmluZSBIQ19aV0NGaXJlX01BU0sgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIEhDX0haV0NRV251bUxhc3RfTUFTSyAgIDB4MDAwMDNmZmYKKyNkZWZpbmUgSENfSFpXQ1FXbnVtTGFzdF9TSElGVCAgMAorCisvKiBTdGVuY2lsIFNldHRpbmcKKyAqLworI2RlZmluZSBIQ19TdWJBX0hTVFJFRiAgICAgICAgICAweDAwMjMKKyNkZWZpbmUgSENfU3ViQV9IU1RNRCAgICAgICAgICAgMHgwMDI0CisvKiBIQ19TdWJBX0hTQkZNCisgKi8KKyNkZWZpbmUgSENfSFNCRk1fTUFTSyAgICAgICAgICAgMHgwMDAzMDAwMAorI2RlZmluZSBIQ19IU0JMb2NfTUFTSyAgICAgICAgICAweDAwMDBjMDAwCisjZGVmaW5lIEhDX0hTQlBpdF9NQVNLICAgICAgICAgIDB4MDAwMDNmZmYKKy8qIEhDX1N1YkFfSFNUUkVGCisgKi8KKyNkZWZpbmUgSENfSFNUUkVGX01BU0sgICAgICAgICAgMHgwMGZmMDAwMAorI2RlZmluZSBIQ19IU1RPUE1TS19NQVNLICAgICAgICAweDAwMDBmZjAwCisjZGVmaW5lIEhDX0hTVEJNU0tfTUFTSyAgICAgICAgIDB4MDAwMDAwZmYKKyNkZWZpbmUgSENfSFNUUkVGX1NISUZUICAgICAgICAgMTYKKyNkZWZpbmUgSENfSFNUT1BNU0tfU0hJRlQgICAgICAgOAorLyogSENfU3ViQV9IU1RNRAorICovCisjZGVmaW5lIEhDX0hTVE1EX01BU0sgICAgICAgICAgIDB4MDAwNzAwMDAKKyNkZWZpbmUgSENfSFNUT1BTRl9NQVNLICAgICAgICAgMHgwMDAwMDFjMAorI2RlZmluZSBIQ19IU1RPUFNQWkZfTUFTSyAgICAgICAweDAwMDAwMDM4CisjZGVmaW5lIEhDX0hTVE9QU1BaUF9NQVNLICAgICAgIDB4MDAwMDAwMDcKKyNkZWZpbmUgSENfSFNUTURfTmV2ZXJQYXNzICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBIQ19IU1RNRF9MVCAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIEhDX0hTVE1EX0VRICAgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgSENfSFNUTURfTEUgICAgICAgICAgICAgMHgwMDAzMDAwMAorI2RlZmluZSBIQ19IU1RNRF9HVCAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIEhDX0hTVE1EX05FICAgICAgICAgICAgIDB4MDAwNTAwMDAKKyNkZWZpbmUgSENfSFNUTURfR0UgICAgICAgICAgICAgMHgwMDA2MDAwMAorI2RlZmluZSBIQ19IU1RNRF9BbGxQYXNzICAgICAgICAweDAwMDcwMDAwCisjZGVmaW5lIEhDX0hTVE9QU0ZfS0VFUCAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgSENfSFNUT1BTRl9aRVJPICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBIQ19IU1RPUFNGX1JFUExBQ0UgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIEhDX0hTVE9QU0ZfSU5DUlNBVCAgICAgIDB4MDAwMDAwYzAKKyNkZWZpbmUgSENfSFNUT1BTRl9ERUNSU0FUICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBIQ19IU1RPUFNGX0lOVkVSVCAgICAgICAweDAwMDAwMTQwCisjZGVmaW5lIEhDX0hTVE9QU0ZfSU5DUiAgICAgICAgIDB4MDAwMDAxODAKKyNkZWZpbmUgSENfSFNUT1BTRl9ERUNSICAgICAgICAgMHgwMDAwMDFjMAorI2RlZmluZSBIQ19IU1RPUFNQWkZfS0VFUCAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIEhDX0hTVE9QU1BaRl9aRVJPICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgSENfSFNUT1BTUFpGX1JFUExBQ0UgICAgMHgwMDAwMDAxMAorI2RlZmluZSBIQ19IU1RPUFNQWkZfSU5DUlNBVCAgICAweDAwMDAwMDE4CisjZGVmaW5lIEhDX0hTVE9QU1BaRl9ERUNSU0FUICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgSENfSFNUT1BTUFpGX0lOVkVSVCAgICAgMHgwMDAwMDAyOAorI2RlZmluZSBIQ19IU1RPUFNQWkZfSU5DUiAgICAgICAweDAwMDAwMDMwCisjZGVmaW5lIEhDX0hTVE9QU1BaRl9ERUNSICAgICAgIDB4MDAwMDAwMzgKKyNkZWZpbmUgSENfSFNUT1BTUFpQX0tFRVAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBIQ19IU1RPUFNQWlBfWkVSTyAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEhDX0hTVE9QU1BaUF9SRVBMQUNFICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgSENfSFNUT1BTUFpQX0lOQ1JTQVQgICAgMHgwMDAwMDAwMworI2RlZmluZSBIQ19IU1RPUFNQWlBfREVDUlNBVCAgICAweDAwMDAwMDA0CisjZGVmaW5lIEhDX0hTVE9QU1BaUF9JTlZFUlQgICAgIDB4MDAwMDAwMDUKKyNkZWZpbmUgSENfSFNUT1BTUFpQX0lOQ1IgICAgICAgMHgwMDAwMDAwNgorI2RlZmluZSBIQ19IU1RPUFNQWlBfREVDUiAgICAgICAweDAwMDAwMDA3CisKKy8qIEFscGhhIFNldHRpbmcKKyAqLworI2RlZmluZSBIQ19TdWJBX0hBQkJhc0wgICAgICAgICAweDAwMzAKKyNkZWZpbmUgSENfU3ViQV9IQUJCYXNIICAgICAgICAgMHgwMDMxCisjZGVmaW5lIEhDX1N1YkFfSEFCRk0gICAgICAgICAgIDB4MDAzMgorI2RlZmluZSBIQ19TdWJBX0hBVE1EICAgICAgICAgICAweDAwMzMKKyNkZWZpbmUgSENfU3ViQV9IQUJMQ3NhdCAgICAgICAgMHgwMDM0CisjZGVmaW5lIEhDX1N1YkFfSEFCTENvcCAgICAgICAgIDB4MDAzNQorI2RlZmluZSBIQ19TdWJBX0hBQkxBc2F0ICAgICAgICAweDAwMzYKKyNkZWZpbmUgSENfU3ViQV9IQUJMQW9wICAgICAgICAgMHgwMDM3CisjZGVmaW5lIEhDX1N1YkFfSEFCTFJDYSAgICAgICAgIDB4MDAzOAorI2RlZmluZSBIQ19TdWJBX0hBQkxSRkNhICAgICAgICAweDAwMzkKKyNkZWZpbmUgSENfU3ViQV9IQUJMUkNiaWFzICAgICAgMHgwMDNhCisjZGVmaW5lIEhDX1N1YkFfSEFCTFJDYiAgICAgICAgIDB4MDAzYgorI2RlZmluZSBIQ19TdWJBX0hBQkxSRkNiICAgICAgICAweDAwM2MKKyNkZWZpbmUgSENfU3ViQV9IQUJMUkFhICAgICAgICAgMHgwMDNkCisjZGVmaW5lIEhDX1N1YkFfSEFCTFJBYiAgICAgICAgIDB4MDAzZQorLyogSENfU3ViQV9IQUJGTQorICovCisjZGVmaW5lIEhDX0hBQkZNX01BU0sgICAgICAgICAgIDB4MDAwMzAwMDAKKyNkZWZpbmUgSENfSEFCTG9jX01BU0sgICAgICAgICAgMHgwMDAwYzAwMAorI2RlZmluZSBIQ19IQUJQaXRfTUFTSyAgICAgICAgICAweDAwMDAwN2ZmCisvKiBIQ19TdWJBX0hBVE1ECisgKi8KKyNkZWZpbmUgSENfSEFUTURfTUFTSyAgICAgICAgICAgMHgwMDAwMDcwMAorI2RlZmluZSBIQ19IQVRSRUZfTUFTSyAgICAgICAgICAweDAwMDAwMGZmCisjZGVmaW5lIEhDX0hBVE1EX05ldmVyUGFzcyAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgSENfSEFUTURfTFQgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBIQ19IQVRNRF9FUSAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIEhDX0hBVE1EX0xFICAgICAgICAgICAgIDB4MDAwMDAzMDAKKyNkZWZpbmUgSENfSEFUTURfR1QgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBIQ19IQVRNRF9ORSAgICAgICAgICAgICAweDAwMDAwNTAwCisjZGVmaW5lIEhDX0hBVE1EX0dFICAgICAgICAgICAgIDB4MDAwMDA2MDAKKyNkZWZpbmUgSENfSEFUTURfQWxsUGFzcyAgICAgICAgMHgwMDAwMDcwMAorLyogSENfU3ViQV9IQUJMQ3NhdAorICovCisjZGVmaW5lIEhDX0hBQkxDc2F0X01BU0sgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgSENfSEFCTENhX01BU0sgICAgICAgICAgMHgwMDAwZmMwMAorI2RlZmluZSBIQ19IQUJMQ2FfQ19NQVNLICAgICAgICAweDAwMDBjMDAwCisjZGVmaW5lIEhDX0hBQkxDYV9PUENfTUFTSyAgICAgIDB4MDAwMDNjMDAKKyNkZWZpbmUgSENfSEFCTEZDYV9NQVNLICAgICAgICAgMHgwMDAwMDNmMAorI2RlZmluZSBIQ19IQUJMRkNhX0NfTUFTSyAgICAgICAweDAwMDAwMzAwCisjZGVmaW5lIEhDX0hBQkxGQ2FfT1BDX01BU0sgICAgIDB4MDAwMDAwZjAKKyNkZWZpbmUgSENfSEFCTENiaWFzX01BU0sgICAgICAgMHgwMDAwMDAwZgorI2RlZmluZSBIQ19IQUJMQ2JpYXNfQ19NQVNLICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEhDX0hBQkxDYmlhc19PUENfTUFTSyAgIDB4MDAwMDAwMDcKKy8qLS0gRGVmaW5lIHRoZSBpbnB1dCBjb2xvci4KKyAqLworI2RlZmluZSBIQ19YQ19Dc3JjICAgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIEhDX1hDX0Nkc3QgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgSENfWENfQXNyYyAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBIQ19YQ19BZHN0ICAgICAgICAgICAgICAweDAwMDAwMDAzCisjZGVmaW5lIEhDX1hDX0ZvZyAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgSENfWENfSEFCTFJDICAgICAgICAgICAgMHgwMDAwMDAwNQorI2RlZmluZSBIQ19YQ19taW5TcmNEc3QgICAgICAgICAweDAwMDAwMDA2CisjZGVmaW5lIEhDX1hDX21heFNyY0RzdCAgICAgICAgIDB4MDAwMDAwMDcKKyNkZWZpbmUgSENfWENfbWltQXNyY0ludkFkc3QgICAgMHgwMDAwMDAwOAorI2RlZmluZSBIQ19YQ19PUEMgICAgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIEhDX1hDX0ludk9QQyAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgSENfWENfT1BDcDUgICAgICAgICAgICAgMHgwMDAwMDAyMAorLyotLSBEZWZpbmUgdGhlIGlucHV0IEFscGhhCisgKi8KKyNkZWZpbmUgSENfWEFfT1BBICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBIQ19YQV9JbnZPUEEgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEhDX1hBX09QQXA1ICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgSENfWEFfMCAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBIQ19YQV9Bc3JjICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEhDX1hBX0Fkc3QgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgSENfWEFfRm9nICAgICAgICAgICAgICAgMHgwMDAwMDAwMworI2RlZmluZSBIQ19YQV9taW5Bc3JjRm9nICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEhDX1hBX21pbkFzcmNBZHN0ICAgICAgIDB4MDAwMDAwMDUKKyNkZWZpbmUgSENfWEFfbWF4QXNyY0ZvZyAgICAgICAgMHgwMDAwMDAwNgorI2RlZmluZSBIQ19YQV9tYXhBc3JjQWRzdCAgICAgICAweDAwMDAwMDA3CisjZGVmaW5lIEhDX1hBX0hBQkxSQSAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgSENfWEFfbWluQXNyY0ludkFkc3QgICAgMHgwMDAwMDAwOAorI2RlZmluZSBIQ19YQV9IQUJMRlJBICAgICAgICAgICAweDAwMDAwMDA5CisvKi0tCisgKi8KKyNkZWZpbmUgSENfSEFCTENhX09QQyAgICAgICAgICAgKEhDX1hDX09QQyA8PCAxMCkKKyNkZWZpbmUgSENfSEFCTENhX0ludk9QQyAgICAgICAgKEhDX1hDX0ludk9QQyA8PCAxMCkKKyNkZWZpbmUgSENfSEFCTENhX09QQ3A1ICAgICAgICAgKEhDX1hDX09QQ3A1IDw8IDEwKQorI2RlZmluZSBIQ19IQUJMQ2FfQ3NyYyAgICAgICAgICAoSENfWENfQ3NyYyA8PCAxMCkKKyNkZWZpbmUgSENfSEFCTENhX0Nkc3QgICAgICAgICAgKEhDX1hDX0Nkc3QgPDwgMTApCisjZGVmaW5lIEhDX0hBQkxDYV9Bc3JjICAgICAgICAgIChIQ19YQ19Bc3JjIDw8IDEwKQorI2RlZmluZSBIQ19IQUJMQ2FfQWRzdCAgICAgICAgICAoSENfWENfQWRzdCA8PCAxMCkKKyNkZWZpbmUgSENfSEFCTENhX0ZvZyAgICAgICAgICAgKEhDX1hDX0ZvZyA8PCAxMCkKKyNkZWZpbmUgSENfSEFCTENhX0hBQkxSQ2EgICAgICAgKEhDX1hDX0hBQkxSQyA8PCAxMCkKKyNkZWZpbmUgSENfSEFCTENhX21pblNyY0RzdCAgICAgKEhDX1hDX21pblNyY0RzdCA8PCAxMCkKKyNkZWZpbmUgSENfSEFCTENhX21heFNyY0RzdCAgICAgKEhDX1hDX21heFNyY0RzdCA8PCAxMCkKKyNkZWZpbmUgSENfSEFCTEZDYV9PUEMgICAgICAgICAgICAgIChIQ19YQ19PUEMgPDwgNCkKKyNkZWZpbmUgSENfSEFCTEZDYV9JbnZPUEMgICAgICAgICAgIChIQ19YQ19JbnZPUEMgPDwgNCkKKyNkZWZpbmUgSENfSEFCTEZDYV9PUENwNSAgICAgICAgICAgIChIQ19YQ19PUENwNSA8PCA0KQorI2RlZmluZSBIQ19IQUJMRkNhX0NzcmMgICAgICAgICAgICAgKEhDX1hDX0NzcmMgPDwgNCkKKyNkZWZpbmUgSENfSEFCTEZDYV9DZHN0ICAgICAgICAgICAgIChIQ19YQ19DZHN0IDw8IDQpCisjZGVmaW5lIEhDX0hBQkxGQ2FfQXNyYyAgICAgICAgICAgICAoSENfWENfQXNyYyA8PCA0KQorI2RlZmluZSBIQ19IQUJMRkNhX0Fkc3QgICAgICAgICAgICAgKEhDX1hDX0Fkc3QgPDwgNCkKKyNkZWZpbmUgSENfSEFCTEZDYV9Gb2cgICAgICAgICAgICAgIChIQ19YQ19Gb2cgPDwgNCkKKyNkZWZpbmUgSENfSEFCTEZDYV9IQUJMUkNhICAgICAgICAgIChIQ19YQ19IQUJMUkMgPDwgNCkKKyNkZWZpbmUgSENfSEFCTEZDYV9taW5TcmNEc3QgICAgICAgIChIQ19YQ19taW5TcmNEc3QgPDwgNCkKKyNkZWZpbmUgSENfSEFCTEZDYV9tYXhTcmNEc3QgICAgICAgIChIQ19YQ19tYXhTcmNEc3QgPDwgNCkKKyNkZWZpbmUgSENfSEFCTEZDYV9taW1Bc3JjSW52QWRzdCAgIChIQ19YQ19taW1Bc3JjSW52QWRzdCA8PCA0KQorI2RlZmluZSBIQ19IQUJMQ2JpYXNfSEFCTFJDYmlhcyAweDAwMDAwMDAwCisjZGVmaW5lIEhDX0hBQkxDYmlhc19Bc3JjICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgSENfSEFCTENiaWFzX0Fkc3QgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBIQ19IQUJMQ2JpYXNfRm9nICAgICAgICAweDAwMDAwMDAzCisjZGVmaW5lIEhDX0hBQkxDYmlhc19DaW4gICAgICAgIDB4MDAwMDAwMDQKKy8qIEhDX1N1YkFfSEFCTENvcCAgICAgICAgIDB4MDAzNQorICovCisjZGVmaW5lIEhDX0hBQkxkb3RfTUFTSyAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgSENfSEFCTENvcF9NQVNLICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBIQ19IQUJMQ2JfTUFTSyAgICAgICAgICAweDAwMDAzZjAwCisjZGVmaW5lIEhDX0hBQkxDYl9DX01BU0sgICAgICAgIDB4MDAwMDMwMDAKKyNkZWZpbmUgSENfSEFCTENiX09QQ19NQVNLICAgICAgMHgwMDAwMGYwMAorI2RlZmluZSBIQ19IQUJMRkNiX01BU0sgICAgICAgICAweDAwMDAwMGZjCisjZGVmaW5lIEhDX0hBQkxGQ2JfQ19NQVNLICAgICAgIDB4MDAwMDAwYzAKKyNkZWZpbmUgSENfSEFCTEZDYl9PUENfTUFTSyAgICAgMHgwMDAwMDAzYworI2RlZmluZSBIQ19IQUJMQ3NoaWZ0X01BU0sgICAgICAweDAwMDAwMDAzCisjZGVmaW5lIEhDX0hBQkxDYl9PUEMgICAgICAgICAgIChIQ19YQ19PUEMgPDwgOCkKKyNkZWZpbmUgSENfSEFCTENiX0ludk9QQyAgICAgICAgKEhDX1hDX0ludk9QQyA8PCA4KQorI2RlZmluZSBIQ19IQUJMQ2JfT1BDcDUgICAgICAgICAoSENfWENfT1BDcDUgPDwgOCkKKyNkZWZpbmUgSENfSEFCTENiX0NzcmMgICAgICAgICAgKEhDX1hDX0NzcmMgPDwgOCkKKyNkZWZpbmUgSENfSEFCTENiX0Nkc3QgICAgICAgICAgKEhDX1hDX0Nkc3QgPDwgOCkKKyNkZWZpbmUgSENfSEFCTENiX0FzcmMgICAgICAgICAgKEhDX1hDX0FzcmMgPDwgOCkKKyNkZWZpbmUgSENfSEFCTENiX0Fkc3QgICAgICAgICAgKEhDX1hDX0Fkc3QgPDwgOCkKKyNkZWZpbmUgSENfSEFCTENiX0ZvZyAgICAgICAgICAgKEhDX1hDX0ZvZyA8PCA4KQorI2RlZmluZSBIQ19IQUJMQ2JfSEFCTFJDYSAgICAgICAoSENfWENfSEFCTFJDIDw8IDgpCisjZGVmaW5lIEhDX0hBQkxDYl9taW5TcmNEc3QgICAgIChIQ19YQ19taW5TcmNEc3QgPDwgOCkKKyNkZWZpbmUgSENfSEFCTENiX21heFNyY0RzdCAgICAgKEhDX1hDX21heFNyY0RzdCA8PCA4KQorI2RlZmluZSBIQ19IQUJMRkNiX09QQyAgICAgICAgICAgICAgKEhDX1hDX09QQyA8PCAyKQorI2RlZmluZSBIQ19IQUJMRkNiX0ludk9QQyAgICAgICAgICAgKEhDX1hDX0ludk9QQyA8PCAyKQorI2RlZmluZSBIQ19IQUJMRkNiX09QQ3A1ICAgICAgICAgICAgKEhDX1hDX09QQ3A1IDw8IDIpCisjZGVmaW5lIEhDX0hBQkxGQ2JfQ3NyYyAgICAgICAgICAgICAoSENfWENfQ3NyYyA8PCAyKQorI2RlZmluZSBIQ19IQUJMRkNiX0Nkc3QgICAgICAgICAgICAgKEhDX1hDX0Nkc3QgPDwgMikKKyNkZWZpbmUgSENfSEFCTEZDYl9Bc3JjICAgICAgICAgICAgIChIQ19YQ19Bc3JjIDw8IDIpCisjZGVmaW5lIEhDX0hBQkxGQ2JfQWRzdCAgICAgICAgICAgICAoSENfWENfQWRzdCA8PCAyKQorI2RlZmluZSBIQ19IQUJMRkNiX0ZvZyAgICAgICAgICAgICAgKEhDX1hDX0ZvZyA8PCAyKQorI2RlZmluZSBIQ19IQUJMRkNiX0hBQkxSQ2IgICAgICAgICAgKEhDX1hDX0hBQkxSQyA8PCAyKQorI2RlZmluZSBIQ19IQUJMRkNiX21pblNyY0RzdCAgICAgICAgKEhDX1hDX21pblNyY0RzdCA8PCAyKQorI2RlZmluZSBIQ19IQUJMRkNiX21heFNyY0RzdCAgICAgICAgKEhDX1hDX21heFNyY0RzdCA8PCAyKQorI2RlZmluZSBIQ19IQUJMRkNiX21pbUFzcmNJbnZBZHN0ICAgKEhDX1hDX21pbUFzcmNJbnZBZHN0IDw8IDIpCisvKiBIQ19TdWJBX0hBQkxBc2F0ICAgICAgICAweDAwMzYKKyAqLworI2RlZmluZSBIQ19IQUJMQXNhdF9NQVNLICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIEhDX0hBQkxBYV9NQVNLICAgICAgICAgIDB4MDAwMGZjMDAKKyNkZWZpbmUgSENfSEFCTEFhX0FfTUFTSyAgICAgICAgMHgwMDAwYzAwMAorI2RlZmluZSBIQ19IQUJMQWFfT1BBX01BU0sgICAgICAweDAwMDAzYzAwCisjZGVmaW5lIEhDX0hBQkxGQWFfTUFTSyAgICAgICAgIDB4MDAwMDAzZjAKKyNkZWZpbmUgSENfSEFCTEZBYV9BX01BU0sgICAgICAgMHgwMDAwMDMwMAorI2RlZmluZSBIQ19IQUJMRkFhX09QQV9NQVNLICAgICAweDAwMDAwMGYwCisjZGVmaW5lIEhDX0hBQkxBYmlhc19NQVNLICAgICAgIDB4MDAwMDAwMGYKKyNkZWZpbmUgSENfSEFCTEFiaWFzX0FfTUFTSyAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBIQ19IQUJMQWJpYXNfT1BBX01BU0sgICAweDAwMDAwMDA3CisjZGVmaW5lIEhDX0hBQkxBYV9PUEEgICAgICAgICAgIChIQ19YQV9PUEEgPDwgMTApCisjZGVmaW5lIEhDX0hBQkxBYV9JbnZPUEEgICAgICAgIChIQ19YQV9JbnZPUEEgPDwgMTApCisjZGVmaW5lIEhDX0hBQkxBYV9PUEFwNSAgICAgICAgIChIQ19YQV9PUEFwNSA8PCAxMCkKKyNkZWZpbmUgSENfSEFCTEFhXzAgICAgICAgICAgICAgKEhDX1hBXzAgPDwgMTApCisjZGVmaW5lIEhDX0hBQkxBYV9Bc3JjICAgICAgICAgIChIQ19YQV9Bc3JjIDw8IDEwKQorI2RlZmluZSBIQ19IQUJMQWFfQWRzdCAgICAgICAgICAoSENfWEFfQWRzdCA8PCAxMCkKKyNkZWZpbmUgSENfSEFCTEFhX0ZvZyAgICAgICAgICAgKEhDX1hBX0ZvZyA8PCAxMCkKKyNkZWZpbmUgSENfSEFCTEFhX21pbkFzcmNGb2cgICAgKEhDX1hBX21pbkFzcmNGb2cgPDwgMTApCisjZGVmaW5lIEhDX0hBQkxBYV9taW5Bc3JjQWRzdCAgIChIQ19YQV9taW5Bc3JjQWRzdCA8PCAxMCkKKyNkZWZpbmUgSENfSEFCTEFhX21heEFzcmNGb2cgICAgKEhDX1hBX21heEFzcmNGb2cgPDwgMTApCisjZGVmaW5lIEhDX0hBQkxBYV9tYXhBc3JjQWRzdCAgIChIQ19YQV9tYXhBc3JjQWRzdCA8PCAxMCkKKyNkZWZpbmUgSENfSEFCTEFhX0hBQkxSQSAgICAgICAgKEhDX1hBX0hBQkxSQSA8PCAxMCkKKyNkZWZpbmUgSENfSEFCTEZBYV9PUEEgICAgICAgICAgKEhDX1hBX09QQSA8PCA0KQorI2RlZmluZSBIQ19IQUJMRkFhX0ludk9QQSAgICAgICAoSENfWEFfSW52T1BBIDw8IDQpCisjZGVmaW5lIEhDX0hBQkxGQWFfT1BBcDUgICAgICAgIChIQ19YQV9PUEFwNSA8PCA0KQorI2RlZmluZSBIQ19IQUJMRkFhXzAgICAgICAgICAgICAoSENfWEFfMCA8PCA0KQorI2RlZmluZSBIQ19IQUJMRkFhX0FzcmMgICAgICAgICAoSENfWEFfQXNyYyA8PCA0KQorI2RlZmluZSBIQ19IQUJMRkFhX0Fkc3QgICAgICAgICAoSENfWEFfQWRzdCA8PCA0KQorI2RlZmluZSBIQ19IQUJMRkFhX0ZvZyAgICAgICAgICAoSENfWEFfRm9nIDw8IDQpCisjZGVmaW5lIEhDX0hBQkxGQWFfbWluQXNyY0ZvZyAgIChIQ19YQV9taW5Bc3JjRm9nIDw8IDQpCisjZGVmaW5lIEhDX0hBQkxGQWFfbWluQXNyY0Fkc3QgIChIQ19YQV9taW5Bc3JjQWRzdCA8PCA0KQorI2RlZmluZSBIQ19IQUJMRkFhX21heEFzcmNGb2cgICAoSENfWEFfbWF4QXNyY0ZvZyA8PCA0KQorI2RlZmluZSBIQ19IQUJMRkFhX21heEFzcmNBZHN0ICAoSENfWEFfbWF4QXNyY0Fkc3QgPDwgNCkKKyNkZWZpbmUgSENfSEFCTEZBYV9taW5Bc3JjSW52QWRzdCAgIChIQ19YQV9taW5Bc3JjSW52QWRzdCA8PCA0KQorI2RlZmluZSBIQ19IQUJMRkFhX0hBQkxGUkEgICAgICAgICAgKEhDX1hBX0hBQkxGUkEgPDwgNCkKKyNkZWZpbmUgSENfSEFCTEFiaWFzX0hBQkxSQWJpYXMgMHgwMDAwMDAwMAorI2RlZmluZSBIQ19IQUJMQWJpYXNfQXNyYyAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEhDX0hBQkxBYmlhc19BZHN0ICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgSENfSEFCTEFiaWFzX0ZvZyAgICAgICAgMHgwMDAwMDAwMworI2RlZmluZSBIQ19IQUJMQWJpYXNfQWFhICAgICAgICAweDAwMDAwMDA0CisvKiBIQ19TdWJBX0hBQkxBb3AgICAgICAgICAweDAwMzcKKyAqLworI2RlZmluZSBIQ19IQUJMQW9wX01BU0sgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIEhDX0hBQkxBYl9NQVNLICAgICAgICAgIDB4MDAwMDNmMDAKKyNkZWZpbmUgSENfSEFCTEFiX09QQV9NQVNLICAgICAgMHgwMDAwMGYwMAorI2RlZmluZSBIQ19IQUJMRkFiX01BU0sgICAgICAgICAweDAwMDAwMGZjCisjZGVmaW5lIEhDX0hBQkxGQWJfT1BBX01BU0sgICAgIDB4MDAwMDAwM2MKKyNkZWZpbmUgSENfSEFCTEFzaGlmdF9NQVNLICAgICAgMHgwMDAwMDAwMworI2RlZmluZSBIQ19IQUJMQWJfT1BBICAgICAgICAgICAoSENfWEFfT1BBIDw8IDgpCisjZGVmaW5lIEhDX0hBQkxBYl9JbnZPUEEgICAgICAgIChIQ19YQV9JbnZPUEEgPDwgOCkKKyNkZWZpbmUgSENfSEFCTEFiX09QQXA1ICAgICAgICAgKEhDX1hBX09QQXA1IDw8IDgpCisjZGVmaW5lIEhDX0hBQkxBYl8wICAgICAgICAgICAgIChIQ19YQV8wIDw8IDgpCisjZGVmaW5lIEhDX0hBQkxBYl9Bc3JjICAgICAgICAgIChIQ19YQV9Bc3JjIDw8IDgpCisjZGVmaW5lIEhDX0hBQkxBYl9BZHN0ICAgICAgICAgIChIQ19YQV9BZHN0IDw8IDgpCisjZGVmaW5lIEhDX0hBQkxBYl9Gb2cgICAgICAgICAgIChIQ19YQV9Gb2cgPDwgOCkKKyNkZWZpbmUgSENfSEFCTEFiX21pbkFzcmNGb2cgICAgKEhDX1hBX21pbkFzcmNGb2cgPDwgOCkKKyNkZWZpbmUgSENfSEFCTEFiX21pbkFzcmNBZHN0ICAgKEhDX1hBX21pbkFzcmNBZHN0IDw8IDgpCisjZGVmaW5lIEhDX0hBQkxBYl9tYXhBc3JjRm9nICAgIChIQ19YQV9tYXhBc3JjRm9nIDw8IDgpCisjZGVmaW5lIEhDX0hBQkxBYl9tYXhBc3JjQWRzdCAgIChIQ19YQV9tYXhBc3JjQWRzdCA8PCA4KQorI2RlZmluZSBIQ19IQUJMQWJfSEFCTFJBICAgICAgICAoSENfWEFfSEFCTFJBIDw8IDgpCisjZGVmaW5lIEhDX0hBQkxGQWJfT1BBICAgICAgICAgIChIQ19YQV9PUEEgPDwgMikKKyNkZWZpbmUgSENfSEFCTEZBYl9JbnZPUEEgICAgICAgKEhDX1hBX0ludk9QQSA8PCAyKQorI2RlZmluZSBIQ19IQUJMRkFiX09QQXA1ICAgICAgICAoSENfWEFfT1BBcDUgPDwgMikKKyNkZWZpbmUgSENfSEFCTEZBYl8wICAgICAgICAgICAgKEhDX1hBXzAgPDwgMikKKyNkZWZpbmUgSENfSEFCTEZBYl9Bc3JjICAgICAgICAgKEhDX1hBX0FzcmMgPDwgMikKKyNkZWZpbmUgSENfSEFCTEZBYl9BZHN0ICAgICAgICAgKEhDX1hBX0Fkc3QgPDwgMikKKyNkZWZpbmUgSENfSEFCTEZBYl9Gb2cgICAgICAgICAgKEhDX1hBX0ZvZyA8PCAyKQorI2RlZmluZSBIQ19IQUJMRkFiX21pbkFzcmNGb2cgICAoSENfWEFfbWluQXNyY0ZvZyA8PCAyKQorI2RlZmluZSBIQ19IQUJMRkFiX21pbkFzcmNBZHN0ICAoSENfWEFfbWluQXNyY0Fkc3QgPDwgMikKKyNkZWZpbmUgSENfSEFCTEZBYl9tYXhBc3JjRm9nICAgKEhDX1hBX21heEFzcmNGb2cgPDwgMikKKyNkZWZpbmUgSENfSEFCTEZBYl9tYXhBc3JjQWRzdCAgKEhDX1hBX21heEFzcmNBZHN0IDw8IDIpCisjZGVmaW5lIEhDX0hBQkxGQWJfbWluQXNyY0ludkFkc3QgICAoSENfWEFfbWluQXNyY0ludkFkc3QgPDwgMikKKyNkZWZpbmUgSENfSEFCTEZBYl9IQUJMRlJBICAgICAgICAgIChIQ19YQV9IQUJMRlJBIDw8IDIpCisvKiBIQ19TdWJBX0hBQkxSQWEgICAgICAgICAweDAwM2QKKyAqLworI2RlZmluZSBIQ19IQUJMUkFhX01BU0sgICAgICAgICAweDAwZmYwMDAwCisjZGVmaW5lIEhDX0hBQkxSRkFhX01BU0sgICAgICAgIDB4MDAwMGZmMDAKKyNkZWZpbmUgSENfSEFCTFJBYmlhc19NQVNLICAgICAgMHgwMDAwMDBmZgorI2RlZmluZSBIQ19IQUJMUkFhX1NISUZUICAgICAgICAxNgorI2RlZmluZSBIQ19IQUJMUkZBYV9TSElGVCAgICAgICA4CisvKiBIQ19TdWJBX0hBQkxSQWIgICAgICAgICAweDAwM2UKKyAqLworI2RlZmluZSBIQ19IQUJMUkFiX01BU0sgICAgICAgICAweDAwMDBmZjAwCisjZGVmaW5lIEhDX0hBQkxSRkFiX01BU0sgICAgICAgIDB4MDAwMDAwZmYKKyNkZWZpbmUgSENfSEFCTFJBYl9TSElGVCAgICAgICAgOAorCisvKiBEZXN0aW5hdGlvbiBTZXR0aW5nCisgKi8KKyNkZWZpbmUgSENfU3ViQV9IREJCYXNMICAgICAgICAgMHgwMDQwCisjZGVmaW5lIEhDX1N1YkFfSERCQmFzSCAgICAgICAgIDB4MDA0MQorI2RlZmluZSBIQ19TdWJBX0hEQkZNICAgICAgICAgICAweDAwNDIKKyNkZWZpbmUgSENfU3ViQV9IRkJCTVNLTCAgICAgICAgMHgwMDQzCisjZGVmaW5lIEhDX1N1YkFfSFJPUCAgICAgICAgICAgIDB4MDA0NAorLyogSENfU3ViQV9IREJGTSAgICAgICAgICAgMHgwMDQyCisgKi8KKyNkZWZpbmUgSENfSERCRk1fTUFTSyAgICAgICAgICAgMHgwMDFmMDAwMAorI2RlZmluZSBIQ19IREJMb2NfTUFTSyAgICAgICAgICAweDAwMDBjMDAwCisjZGVmaW5lIEhDX0hEQlBpdF9NQVNLICAgICAgICAgIDB4MDAwMDNmZmYKKyNkZWZpbmUgSENfSERCRk1fUkdCNTU1ICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBIQ19IREJGTV9SR0I1NjUgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIEhDX0hEQkZNX0FSR0I0NDQ0ICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgSENfSERCRk1fQVJHQjE1NTUgICAgICAgMHgwMDAzMDAwMAorI2RlZmluZSBIQ19IREJGTV9CR1I1NTUgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIEhDX0hEQkZNX0JHUjU2NSAgICAgICAgIDB4MDAwNTAwMDAKKyNkZWZpbmUgSENfSERCRk1fQUJHUjQ0NDQgICAgICAgMHgwMDA2MDAwMAorI2RlZmluZSBIQ19IREJGTV9BQkdSMTU1NSAgICAgICAweDAwMDcwMDAwCisjZGVmaW5lIEhDX0hEQkZNX0FSR0IwODg4ICAgICAgIDB4MDAwODAwMDAKKyNkZWZpbmUgSENfSERCRk1fQVJHQjg4ODggICAgICAgMHgwMDA5MDAwMAorI2RlZmluZSBIQ19IREJGTV9BQkdSMDg4OCAgICAgICAweDAwMGEwMDAwCisjZGVmaW5lIEhDX0hEQkZNX0FCR1I4ODg4ICAgICAgIDB4MDAwYjAwMDAKKyNkZWZpbmUgSENfSERCTG9jX0xvY2FsICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBIQ19IREJMb2NfU3lzICAgICAgICAgICAweDAwMDA0MDAwCisvKiBIQ19TdWJBX0hST1AgICAgICAgICAgICAweDAwNDQKKyAqLworI2RlZmluZSBIQ19IUk9QX01BU0sgICAgICAgICAgICAweDAwMDAwZjAwCisjZGVmaW5lIEhDX0hGQkJNU0tIX01BU0sgICAgICAgIDB4MDAwMDAwZmYKKyNkZWZpbmUgSENfSFJPUF9CTEFDSyAgICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBIQ19IUk9QX0RQb24gICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEhDX0hST1BfRFBuYSAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgSENfSFJPUF9QbiAgICAgICAgICAgICAgMHgwMDAwMDMwMAorI2RlZmluZSBIQ19IUk9QX1BEbmEgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIEhDX0hST1BfRG4gICAgICAgICAgICAgIDB4MDAwMDA1MDAKKyNkZWZpbmUgSENfSFJPUF9EUHggICAgICAgICAgICAgMHgwMDAwMDYwMAorI2RlZmluZSBIQ19IUk9QX0RQYW4gICAgICAgICAgICAweDAwMDAwNzAwCisjZGVmaW5lIEhDX0hST1BfRFBhICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgSENfSFJPUF9EUHhuICAgICAgICAgICAgMHgwMDAwMDkwMAorI2RlZmluZSBIQ19IUk9QX0QgICAgICAgICAgICAgICAweDAwMDAwYTAwCisjZGVmaW5lIEhDX0hST1BfRFBubyAgICAgICAgICAgIDB4MDAwMDBiMDAKKyNkZWZpbmUgSENfSFJPUF9QICAgICAgICAgICAgICAgMHgwMDAwMGMwMAorI2RlZmluZSBIQ19IUk9QX1BEbm8gICAgICAgICAgICAweDAwMDAwZDAwCisjZGVmaW5lIEhDX0hST1BfRFBvICAgICAgICAgICAgIDB4MDAwMDBlMDAKKyNkZWZpbmUgSENfSFJPUF9XSElURSAgICAgICAgICAgMHgwMDAwMGYwMAorCisvKiBGb2cgU2V0dGluZworICovCisjZGVmaW5lIEhDX1N1YkFfSEZvZ0xGICAgICAgICAgIDB4MDA1MAorI2RlZmluZSBIQ19TdWJBX0hGb2dDTCAgICAgICAgICAweDAwNTEKKyNkZWZpbmUgSENfU3ViQV9IRm9nQ0ggICAgICAgICAgMHgwMDUyCisjZGVmaW5lIEhDX1N1YkFfSEZvZ1N0TCAgICAgICAgIDB4MDA1MworI2RlZmluZSBIQ19TdWJBX0hGb2dTdEggICAgICAgICAweDAwNTQKKyNkZWZpbmUgSENfU3ViQV9IRm9nT09kTUYgICAgICAgMHgwMDU1CisjZGVmaW5lIEhDX1N1YkFfSEZvZ09PZEVGICAgICAgIDB4MDA1NgorI2RlZmluZSBIQ19TdWJBX0hGb2dFbmRMICAgICAgICAweDAwNTcKKyNkZWZpbmUgSENfU3ViQV9IRm9nRGVuc3QgICAgICAgMHgwMDU4CisvKiBIQ19TdWJBX0ZvZ0xGICAgICAgICAgICAweDAwNTAKKyAqLworI2RlZmluZSBIQ19Gb2dMRl9NQVNLICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEhDX0ZvZ0VxX01BU0sgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgSENfRm9nTURfTUFTSyAgICAgICAgICAgMHgwMDAwMDAwNworI2RlZmluZSBIQ19Gb2dNRF9Mb2NhbEZvZyAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBIQ19Gb2dNRF9MaW5lYXJGb2cgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBIQ19Gb2dNRF9FeHBvbmVudGlhbEZvZyAgMHgwMDAwMDAwNAorI2RlZmluZSBIQ19Gb2dNRF9FeHBvbmVudGlhbDJGb2cgMHgwMDAwMDAwNQorLyogI2RlZmluZSBIQ19Gb2dNRF9Gb2dUYWJsZSAgICAgICAweDAwMDAwMDAzICovCisKKy8qIEhDX1N1YkFfSEZvZ0RlbnN0ICAgICAgICAweDAwNTgKKyAqLworI2RlZmluZSBIQ19Gb2dEZW5zdF9NQVNLICAgICAgICAweDAwMWZmZjAwCisjZGVmaW5lIEhDX0ZvZ0VuZExfTUFTSyAgICAgICAgIDB4MDAwMDAwZmYKKworLyogVGV4dHVyZSBzdWJ0eXBlIGRlZmluaXRpb25zCisgKi8KKyNkZWZpbmUgSENfU3ViVHlwZV9UZXgwICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBIQ19TdWJUeXBlX1RleDEgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEhDX1N1YlR5cGVfVGV4R2VuZXJhbCAgIDB4MDAwMDAwZmUKKworLyogQXR0cmlidXRlIG9mIHRleHR1cmUgbgorICovCisjZGVmaW5lIEhDX1N1YkFfSFRYbkwwQmFzTCAgICAgIDB4MDAwMAorI2RlZmluZSBIQ19TdWJBX0hUWG5MMUJhc0wgICAgICAweDAwMDEKKyNkZWZpbmUgSENfU3ViQV9IVFhuTDJCYXNMICAgICAgMHgwMDAyCisjZGVmaW5lIEhDX1N1YkFfSFRYbkwzQmFzTCAgICAgIDB4MDAwMworI2RlZmluZSBIQ19TdWJBX0hUWG5MNEJhc0wgICAgICAweDAwMDQKKyNkZWZpbmUgSENfU3ViQV9IVFhuTDVCYXNMICAgICAgMHgwMDA1CisjZGVmaW5lIEhDX1N1YkFfSFRYbkw2QmFzTCAgICAgIDB4MDAwNgorI2RlZmluZSBIQ19TdWJBX0hUWG5MN0Jhc0wgICAgICAweDAwMDcKKyNkZWZpbmUgSENfU3ViQV9IVFhuTDhCYXNMICAgICAgMHgwMDA4CisjZGVmaW5lIEhDX1N1YkFfSFRYbkw5QmFzTCAgICAgIDB4MDAwOQorI2RlZmluZSBIQ19TdWJBX0hUWG5MYUJhc0wgICAgICAweDAwMGEKKyNkZWZpbmUgSENfU3ViQV9IVFhuTGJCYXNMICAgICAgMHgwMDBiCisjZGVmaW5lIEhDX1N1YkFfSFRYbkxjQmFzTCAgICAgIDB4MDAwYworI2RlZmluZSBIQ19TdWJBX0hUWG5MZEJhc0wgICAgICAweDAwMGQKKyNkZWZpbmUgSENfU3ViQV9IVFhuTGVCYXNMICAgICAgMHgwMDBlCisjZGVmaW5lIEhDX1N1YkFfSFRYbkxmQmFzTCAgICAgIDB4MDAwZgorI2RlZmluZSBIQ19TdWJBX0hUWG5MMTBCYXNMICAgICAweDAwMTAKKyNkZWZpbmUgSENfU3ViQV9IVFhuTDExQmFzTCAgICAgMHgwMDExCisjZGVmaW5lIEhDX1N1YkFfSFRYbkwwMTJCYXNIICAgIDB4MDAyMAorI2RlZmluZSBIQ19TdWJBX0hUWG5MMzQ1QmFzSCAgICAweDAwMjEKKyNkZWZpbmUgSENfU3ViQV9IVFhuTDY3OEJhc0ggICAgMHgwMDIyCisjZGVmaW5lIEhDX1N1YkFfSFRYbkw5YWJCYXNIICAgIDB4MDAyMworI2RlZmluZSBIQ19TdWJBX0hUWG5MY2RlQmFzSCAgICAweDAwMjQKKyNkZWZpbmUgSENfU3ViQV9IVFhuTGYxMDExQmFzSCAgMHgwMDI1CisjZGVmaW5lIEhDX1N1YkFfSFRYbkwwUGl0ICAgICAgIDB4MDAyYgorI2RlZmluZSBIQ19TdWJBX0hUWG5MMVBpdCAgICAgICAweDAwMmMKKyNkZWZpbmUgSENfU3ViQV9IVFhuTDJQaXQgICAgICAgMHgwMDJkCisjZGVmaW5lIEhDX1N1YkFfSFRYbkwzUGl0ICAgICAgIDB4MDAyZQorI2RlZmluZSBIQ19TdWJBX0hUWG5MNFBpdCAgICAgICAweDAwMmYKKyNkZWZpbmUgSENfU3ViQV9IVFhuTDVQaXQgICAgICAgMHgwMDMwCisjZGVmaW5lIEhDX1N1YkFfSFRYbkw2UGl0ICAgICAgIDB4MDAzMQorI2RlZmluZSBIQ19TdWJBX0hUWG5MN1BpdCAgICAgICAweDAwMzIKKyNkZWZpbmUgSENfU3ViQV9IVFhuTDhQaXQgICAgICAgMHgwMDMzCisjZGVmaW5lIEhDX1N1YkFfSFRYbkw5UGl0ICAgICAgIDB4MDAzNAorI2RlZmluZSBIQ19TdWJBX0hUWG5MYVBpdCAgICAgICAweDAwMzUKKyNkZWZpbmUgSENfU3ViQV9IVFhuTGJQaXQgICAgICAgMHgwMDM2CisjZGVmaW5lIEhDX1N1YkFfSFRYbkxjUGl0ICAgICAgIDB4MDAzNworI2RlZmluZSBIQ19TdWJBX0hUWG5MZFBpdCAgICAgICAweDAwMzgKKyNkZWZpbmUgSENfU3ViQV9IVFhuTGVQaXQgICAgICAgMHgwMDM5CisjZGVmaW5lIEhDX1N1YkFfSFRYbkxmUGl0ICAgICAgIDB4MDAzYQorI2RlZmluZSBIQ19TdWJBX0hUWG5MMTBQaXQgICAgICAweDAwM2IKKyNkZWZpbmUgSENfU3ViQV9IVFhuTDExUGl0ICAgICAgMHgwMDNjCisjZGVmaW5lIEhDX1N1YkFfSFRYbkwwXzVXRSAgICAgIDB4MDA0YgorI2RlZmluZSBIQ19TdWJBX0hUWG5MNl9iV0UgICAgICAweDAwNGMKKyNkZWZpbmUgSENfU3ViQV9IVFhuTGNfMTFXRSAgICAgMHgwMDRkCisjZGVmaW5lIEhDX1N1YkFfSFRYbkwwXzVIRSAgICAgIDB4MDA1MQorI2RlZmluZSBIQ19TdWJBX0hUWG5MNl9iSEUgICAgICAweDAwNTIKKyNkZWZpbmUgSENfU3ViQV9IVFhuTGNfMTFIRSAgICAgMHgwMDUzCisjZGVmaW5lIEhDX1N1YkFfSFRYbkwwT1MgICAgICAgIDB4MDA3NworI2RlZmluZSBIQ19TdWJBX0hUWG5UQiAgICAgICAgICAweDAwNzgKKyNkZWZpbmUgSENfU3ViQV9IVFhuTVBNRCAgICAgICAgMHgwMDc5CisjZGVmaW5lIEhDX1N1YkFfSFRYbkNMT0R1ICAgICAgIDB4MDA3YQorI2RlZmluZSBIQ19TdWJBX0hUWG5GTSAgICAgICAgICAweDAwN2IKKyNkZWZpbmUgSENfU3ViQV9IVFhuVFJDSCAgICAgICAgMHgwMDdjCisjZGVmaW5lIEhDX1N1YkFfSFRYblRSQ0wgICAgICAgIDB4MDA3ZAorI2RlZmluZSBIQ19TdWJBX0hUWG5UQkMgICAgICAgICAweDAwN2UKKyNkZWZpbmUgSENfU3ViQV9IVFhuVFJBSCAgICAgICAgMHgwMDdmCisjZGVmaW5lIEhDX1N1YkFfSFRYblRCTENzYXQgICAgIDB4MDA4MAorI2RlZmluZSBIQ19TdWJBX0hUWG5UQkxDb3AgICAgICAweDAwODEKKyNkZWZpbmUgSENfU3ViQV9IVFhuVEJMTVBmb2cgICAgMHgwMDgyCisjZGVmaW5lIEhDX1N1YkFfSFRYblRCTEFzYXQgICAgIDB4MDA4MworI2RlZmluZSBIQ19TdWJBX0hUWG5UQkxSQ2EgICAgICAweDAwODUKKyNkZWZpbmUgSENfU3ViQV9IVFhuVEJMUkNiICAgICAgMHgwMDg2CisjZGVmaW5lIEhDX1N1YkFfSFRYblRCTFJDYyAgICAgIDB4MDA4NworI2RlZmluZSBIQ19TdWJBX0hUWG5UQkxSQ2JpYXMgICAweDAwODgKKyNkZWZpbmUgSENfU3ViQV9IVFhuVEJMUkFhICAgICAgMHgwMDg5CisjZGVmaW5lIEhDX1N1YkFfSFRYblRCTFJGb2cgICAgIDB4MDA4YQorI2RlZmluZSBIQ19TdWJBX0hUWG5CdW1wTTAwICAgICAweDAwOTAKKyNkZWZpbmUgSENfU3ViQV9IVFhuQnVtcE0wMSAgICAgMHgwMDkxCisjZGVmaW5lIEhDX1N1YkFfSFRYbkJ1bXBNMTAgICAgIDB4MDA5MgorI2RlZmluZSBIQ19TdWJBX0hUWG5CdW1wTTExICAgICAweDAwOTMKKyNkZWZpbmUgSENfU3ViQV9IVFhuTFNjYWxlICAgICAgMHgwMDk0CisjZGVmaW5lIEhDX1N1YkFfSFRYU01EICAgICAgICAgIDB4MDAwMAorLyogSENfU3ViQV9IVFhuTDAxMkJhc0ggICAgMHgwMDIwCisgKi8KKyNkZWZpbmUgSENfSFRYbkwwQmFzSF9NQVNLICAgICAgMHgwMDAwMDBmZgorI2RlZmluZSBIQ19IVFhuTDFCYXNIX01BU0sgICAgICAweDAwMDBmZjAwCisjZGVmaW5lIEhDX0hUWG5MMkJhc0hfTUFTSyAgICAgIDB4MDBmZjAwMDAKKyNkZWZpbmUgSENfSFRYbkwxQmFzSF9TSElGVCAgICAgOAorI2RlZmluZSBIQ19IVFhuTDJCYXNIX1NISUZUICAgICAxNgorLyogSENfU3ViQV9IVFhuTDM0NUJhc0ggICAgMHgwMDIxCisgKi8KKyNkZWZpbmUgSENfSFRYbkwzQmFzSF9NQVNLICAgICAgMHgwMDAwMDBmZgorI2RlZmluZSBIQ19IVFhuTDRCYXNIX01BU0sgICAgICAweDAwMDBmZjAwCisjZGVmaW5lIEhDX0hUWG5MNUJhc0hfTUFTSyAgICAgIDB4MDBmZjAwMDAKKyNkZWZpbmUgSENfSFRYbkw0QmFzSF9TSElGVCAgICAgOAorI2RlZmluZSBIQ19IVFhuTDVCYXNIX1NISUZUICAgICAxNgorLyogSENfU3ViQV9IVFhuTDY3OEJhc0ggICAgMHgwMDIyCisgKi8KKyNkZWZpbmUgSENfSFRYbkw2QmFzSF9NQVNLICAgICAgMHgwMDAwMDBmZgorI2RlZmluZSBIQ19IVFhuTDdCYXNIX01BU0sgICAgICAweDAwMDBmZjAwCisjZGVmaW5lIEhDX0hUWG5MOEJhc0hfTUFTSyAgICAgIDB4MDBmZjAwMDAKKyNkZWZpbmUgSENfSFRYbkw3QmFzSF9TSElGVCAgICAgOAorI2RlZmluZSBIQ19IVFhuTDhCYXNIX1NISUZUICAgICAxNgorLyogSENfU3ViQV9IVFhuTDlhYkJhc0ggICAgMHgwMDIzCisgKi8KKyNkZWZpbmUgSENfSFRYbkw5QmFzSF9NQVNLICAgICAgMHgwMDAwMDBmZgorI2RlZmluZSBIQ19IVFhuTGFCYXNIX01BU0sgICAgICAweDAwMDBmZjAwCisjZGVmaW5lIEhDX0hUWG5MYkJhc0hfTUFTSyAgICAgIDB4MDBmZjAwMDAKKyNkZWZpbmUgSENfSFRYbkxhQmFzSF9TSElGVCAgICAgOAorI2RlZmluZSBIQ19IVFhuTGJCYXNIX1NISUZUICAgICAxNgorLyogSENfU3ViQV9IVFhuTGNkZUJhc0ggICAgMHgwMDI0CisgKi8KKyNkZWZpbmUgSENfSFRYbkxjQmFzSF9NQVNLICAgICAgMHgwMDAwMDBmZgorI2RlZmluZSBIQ19IVFhuTGRCYXNIX01BU0sgICAgICAweDAwMDBmZjAwCisjZGVmaW5lIEhDX0hUWG5MZUJhc0hfTUFTSyAgICAgIDB4MDBmZjAwMDAKKyNkZWZpbmUgSENfSFRYbkxkQmFzSF9TSElGVCAgICAgOAorI2RlZmluZSBIQ19IVFhuTGVCYXNIX1NISUZUICAgICAxNgorLyogSENfU3ViQV9IVFhuTGNkZUJhc0ggICAgMHgwMDI1CisgKi8KKyNkZWZpbmUgSENfSFRYbkxmQmFzSF9NQVNLICAgICAgMHgwMDAwMDBmZgorI2RlZmluZSBIQ19IVFhuTDEwQmFzSF9NQVNLICAgICAgMHgwMDAwZmYwMAorI2RlZmluZSBIQ19IVFhuTDExQmFzSF9NQVNLICAgICAgMHgwMGZmMDAwMAorI2RlZmluZSBIQ19IVFhuTDEwQmFzSF9TSElGVCAgICAgOAorI2RlZmluZSBIQ19IVFhuTDExQmFzSF9TSElGVCAgICAgMTYKKy8qIEhDX1N1YkFfSFRYbkwwUGl0ICAgICAgIDB4MDAyYgorICovCisjZGVmaW5lIEhDX0hUWG5MblBpdF9NQVNLICAgICAgIDB4MDAwMDNmZmYKKyNkZWZpbmUgSENfSFRYbkVuUGl0X01BU0sgICAgICAgMHgwMDA4MDAwMAorI2RlZmluZSBIQ19IVFhuTG5QaXRFX01BU0sgICAgICAweDAwZjAwMDAwCisjZGVmaW5lIEhDX0hUWG5MblBpdEVfU0hJRlQgICAgIDIwCisvKiBIQ19TdWJBX0hUWG5MMF81V0UgICAgICAweDAwNGIKKyAqLworI2RlZmluZSBIQ19IVFhuTDBXRV9NQVNLICAgICAgICAweDAwMDAwMDBmCisjZGVmaW5lIEhDX0hUWG5MMVdFX01BU0sgICAgICAgIDB4MDAwMDAwZjAKKyNkZWZpbmUgSENfSFRYbkwyV0VfTUFTSyAgICAgICAgMHgwMDAwMGYwMAorI2RlZmluZSBIQ19IVFhuTDNXRV9NQVNLICAgICAgICAweDAwMDBmMDAwCisjZGVmaW5lIEhDX0hUWG5MNFdFX01BU0sgICAgICAgIDB4MDAwZjAwMDAKKyNkZWZpbmUgSENfSFRYbkw1V0VfTUFTSyAgICAgICAgMHgwMGYwMDAwMAorI2RlZmluZSBIQ19IVFhuTDFXRV9TSElGVCAgICAgICA0CisjZGVmaW5lIEhDX0hUWG5MMldFX1NISUZUICAgICAgIDgKKyNkZWZpbmUgSENfSFRYbkwzV0VfU0hJRlQgICAgICAgMTIKKyNkZWZpbmUgSENfSFRYbkw0V0VfU0hJRlQgICAgICAgMTYKKyNkZWZpbmUgSENfSFRYbkw1V0VfU0hJRlQgICAgICAgMjAKKy8qIEhDX1N1YkFfSFRYbkw2X2JXRSAgICAgIDB4MDA0YworICovCisjZGVmaW5lIEhDX0hUWG5MNldFX01BU0sgICAgICAgIDB4MDAwMDAwMGYKKyNkZWZpbmUgSENfSFRYbkw3V0VfTUFTSyAgICAgICAgMHgwMDAwMDBmMAorI2RlZmluZSBIQ19IVFhuTDhXRV9NQVNLICAgICAgICAweDAwMDAwZjAwCisjZGVmaW5lIEhDX0hUWG5MOVdFX01BU0sgICAgICAgIDB4MDAwMGYwMDAKKyNkZWZpbmUgSENfSFRYbkxhV0VfTUFTSyAgICAgICAgMHgwMDBmMDAwMAorI2RlZmluZSBIQ19IVFhuTGJXRV9NQVNLICAgICAgICAweDAwZjAwMDAwCisjZGVmaW5lIEhDX0hUWG5MN1dFX1NISUZUICAgICAgIDQKKyNkZWZpbmUgSENfSFRYbkw4V0VfU0hJRlQgICAgICAgOAorI2RlZmluZSBIQ19IVFhuTDlXRV9TSElGVCAgICAgICAxMgorI2RlZmluZSBIQ19IVFhuTGFXRV9TSElGVCAgICAgICAxNgorI2RlZmluZSBIQ19IVFhuTGJXRV9TSElGVCAgICAgICAyMAorLyogSENfU3ViQV9IVFhuTGNfMTFXRSAgICAgIDB4MDA0ZAorICovCisjZGVmaW5lIEhDX0hUWG5MY1dFX01BU0sgICAgICAgIDB4MDAwMDAwMGYKKyNkZWZpbmUgSENfSFRYbkxkV0VfTUFTSyAgICAgICAgMHgwMDAwMDBmMAorI2RlZmluZSBIQ19IVFhuTGVXRV9NQVNLICAgICAgICAweDAwMDAwZjAwCisjZGVmaW5lIEhDX0hUWG5MZldFX01BU0sgICAgICAgIDB4MDAwMGYwMDAKKyNkZWZpbmUgSENfSFRYbkwxMFdFX01BU0sgICAgICAgMHgwMDBmMDAwMAorI2RlZmluZSBIQ19IVFhuTDExV0VfTUFTSyAgICAgICAweDAwZjAwMDAwCisjZGVmaW5lIEhDX0hUWG5MZFdFX1NISUZUICAgICAgIDQKKyNkZWZpbmUgSENfSFRYbkxlV0VfU0hJRlQgICAgICAgOAorI2RlZmluZSBIQ19IVFhuTGZXRV9TSElGVCAgICAgICAxMgorI2RlZmluZSBIQ19IVFhuTDEwV0VfU0hJRlQgICAgICAxNgorI2RlZmluZSBIQ19IVFhuTDExV0VfU0hJRlQgICAgICAyMAorLyogSENfU3ViQV9IVFhuTDBfNUhFICAgICAgMHgwMDUxCisgKi8KKyNkZWZpbmUgSENfSFRYbkwwSEVfTUFTSyAgICAgICAgMHgwMDAwMDAwZgorI2RlZmluZSBIQ19IVFhuTDFIRV9NQVNLICAgICAgICAweDAwMDAwMGYwCisjZGVmaW5lIEhDX0hUWG5MMkhFX01BU0sgICAgICAgIDB4MDAwMDBmMDAKKyNkZWZpbmUgSENfSFRYbkwzSEVfTUFTSyAgICAgICAgMHgwMDAwZjAwMAorI2RlZmluZSBIQ19IVFhuTDRIRV9NQVNLICAgICAgICAweDAwMGYwMDAwCisjZGVmaW5lIEhDX0hUWG5MNUhFX01BU0sgICAgICAgIDB4MDBmMDAwMDAKKyNkZWZpbmUgSENfSFRYbkwxSEVfU0hJRlQgICAgICAgNAorI2RlZmluZSBIQ19IVFhuTDJIRV9TSElGVCAgICAgICA4CisjZGVmaW5lIEhDX0hUWG5MM0hFX1NISUZUICAgICAgIDEyCisjZGVmaW5lIEhDX0hUWG5MNEhFX1NISUZUICAgICAgIDE2CisjZGVmaW5lIEhDX0hUWG5MNUhFX1NISUZUICAgICAgIDIwCisvKiBIQ19TdWJBX0hUWG5MNl9iSEUgICAgICAweDAwNTIKKyAqLworI2RlZmluZSBIQ19IVFhuTDZIRV9NQVNLICAgICAgICAweDAwMDAwMDBmCisjZGVmaW5lIEhDX0hUWG5MN0hFX01BU0sgICAgICAgIDB4MDAwMDAwZjAKKyNkZWZpbmUgSENfSFRYbkw4SEVfTUFTSyAgICAgICAgMHgwMDAwMGYwMAorI2RlZmluZSBIQ19IVFhuTDlIRV9NQVNLICAgICAgICAweDAwMDBmMDAwCisjZGVmaW5lIEhDX0hUWG5MYUhFX01BU0sgICAgICAgIDB4MDAwZjAwMDAKKyNkZWZpbmUgSENfSFRYbkxiSEVfTUFTSyAgICAgICAgMHgwMGYwMDAwMAorI2RlZmluZSBIQ19IVFhuTDdIRV9TSElGVCAgICAgICA0CisjZGVmaW5lIEhDX0hUWG5MOEhFX1NISUZUICAgICAgIDgKKyNkZWZpbmUgSENfSFRYbkw5SEVfU0hJRlQgICAgICAgMTIKKyNkZWZpbmUgSENfSFRYbkxhSEVfU0hJRlQgICAgICAgMTYKKyNkZWZpbmUgSENfSFRYbkxiSEVfU0hJRlQgICAgICAgMjAKKy8qIEhDX1N1YkFfSFRYbkxjXzExSEUgICAgICAweDAwNTMKKyAqLworI2RlZmluZSBIQ19IVFhuTGNIRV9NQVNLICAgICAgICAweDAwMDAwMDBmCisjZGVmaW5lIEhDX0hUWG5MZEhFX01BU0sgICAgICAgIDB4MDAwMDAwZjAKKyNkZWZpbmUgSENfSFRYbkxlSEVfTUFTSyAgICAgICAgMHgwMDAwMGYwMAorI2RlZmluZSBIQ19IVFhuTGZIRV9NQVNLICAgICAgICAweDAwMDBmMDAwCisjZGVmaW5lIEhDX0hUWG5MMTBIRV9NQVNLICAgICAgIDB4MDAwZjAwMDAKKyNkZWZpbmUgSENfSFRYbkwxMUhFX01BU0sgICAgICAgMHgwMGYwMDAwMAorI2RlZmluZSBIQ19IVFhuTGRIRV9TSElGVCAgICAgICA0CisjZGVmaW5lIEhDX0hUWG5MZUhFX1NISUZUICAgICAgIDgKKyNkZWZpbmUgSENfSFRYbkxmSEVfU0hJRlQgICAgICAgMTIKKyNkZWZpbmUgSENfSFRYbkwxMEhFX1NISUZUICAgICAgMTYKKyNkZWZpbmUgSENfSFRYbkwxMUhFX1NISUZUICAgICAgMjAKKy8qIEhDX1N1YkFfSFRYbkwwT1MgICAgICAgIDB4MDA3NworICovCisjZGVmaW5lIEhDX0hUWG5MME9TX01BU0sgICAgICAgIDB4MDAzZmYwMDAKKyNkZWZpbmUgSENfSFRYbkxWbWF4X01BU0sgICAgICAgMHgwMDAwMGZjMAorI2RlZmluZSBIQ19IVFhuTFZtaW5fTUFTSyAgICAgICAweDAwMDAwMDNmCisjZGVmaW5lIEhDX0hUWG5MME9TX1NISUZUICAgICAgIDEyCisjZGVmaW5lIEhDX0hUWG5MVm1heF9TSElGVCAgICAgIDYKKy8qIEhDX1N1YkFfSFRYblRCICAgICAgICAgIDB4MDA3OAorICovCisjZGVmaW5lIEhDX0hUWG5UQl9NQVNLICAgICAgICAgIDB4MDBmMDAwMDAKKyNkZWZpbmUgSENfSFRYbkZMU2VfTUFTSyAgICAgICAgMHgwMDAwZTAwMAorI2RlZmluZSBIQ19IVFhuRkxTc19NQVNLICAgICAgICAweDAwMDAxYzAwCisjZGVmaW5lIEhDX0hUWG5GTFRlX01BU0sgICAgICAgIDB4MDAwMDAzODAKKyNkZWZpbmUgSENfSFRYbkZMVHNfTUFTSyAgICAgICAgMHgwMDAwMDA3MAorI2RlZmluZSBIQ19IVFhuRkxEc19NQVNLICAgICAgICAweDAwMDAwMDBmCisjZGVmaW5lIEhDX0hUWG5UQl9Ob1RCICAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgSENfSFRYblRCX1RCQ19TICAgICAgICAgMHgwMDEwMDAwMAorI2RlZmluZSBIQ19IVFhuVEJfVEJDX1QgICAgICAgICAweDAwMjAwMDAwCisjZGVmaW5lIEhDX0hUWG5UQl9UQl9TICAgICAgICAgIDB4MDA0MDAwMDAKKyNkZWZpbmUgSENfSFRYblRCX1RCX1QgICAgICAgICAgMHgwMDgwMDAwMAorI2RlZmluZSBIQ19IVFhuRkxTZV9OZWFyZXN0ICAgICAweDAwMDAwMDAwCisjZGVmaW5lIEhDX0hUWG5GTFNlX0xpbmVhciAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgSENfSFRYbkZMU2VfTm9uTGluZWFyICAgMHgwMDAwNDAwMAorI2RlZmluZSBIQ19IVFhuRkxTZV9TaGFycCAgICAgICAweDAwMDA4MDAwCisjZGVmaW5lIEhDX0hUWG5GTFNlX0ZsYXRfR2F1c3NpYW5fQ3ViaWMgMHgwMDAwYzAwMAorI2RlZmluZSBIQ19IVFhuRkxTc19OZWFyZXN0ICAgICAweDAwMDAwMDAwCisjZGVmaW5lIEhDX0hUWG5GTFNzX0xpbmVhciAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgSENfSFRYbkZMU3NfTm9uTGluZWFyICAgMHgwMDAwMDgwMAorI2RlZmluZSBIQ19IVFhuRkxTc19GbGF0X0dhdXNzaWFuX0N1YmljIDB4MDAwMDE4MDAKKyNkZWZpbmUgSENfSFRYbkZMVGVfTmVhcmVzdCAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBIQ19IVFhuRkxUZV9MaW5lYXIgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIEhDX0hUWG5GTFRlX05vbkxpbmVhciAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgSENfSFRYbkZMVGVfU2hhcnAgICAgICAgMHgwMDAwMDE4MAorI2RlZmluZSBIQ19IVFhuRkxUZV9GbGF0X0dhdXNzaWFuX0N1YmljIDB4MDAwMDAzMDAKKyNkZWZpbmUgSENfSFRYbkZMVHNfTmVhcmVzdCAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBIQ19IVFhuRkxUc19MaW5lYXIgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEhDX0hUWG5GTFRzX05vbkxpbmVhciAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgSENfSFRYbkZMVHNfRmxhdF9HYXVzc2lhbl9DdWJpYyAweDAwMDAwMDYwCisjZGVmaW5lIEhDX0hUWG5GTERzX1RleDAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgSENfSFRYbkZMRHNfTmVhcmVzdCAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBIQ19IVFhuRkxEc19MaW5lYXIgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEhDX0hUWG5GTERzX05vbkxpbmVhciAgIDB4MDAwMDAwMDMKKyNkZWZpbmUgSENfSFRYbkZMRHNfRGl0aGVyICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBIQ19IVFhuRkxEc19Db25zdExPRCAgICAweDAwMDAwMDA1CisjZGVmaW5lIEhDX0hUWG5GTERzX0FuaSAgICAgICAgIDB4MDAwMDAwMDYKKyNkZWZpbmUgSENfSFRYbkZMRHNfQW5pRGl0aGVyICAgMHgwMDAwMDAwNworLyogSENfU3ViQV9IVFhuTVBNRCAgICAgICAgMHgwMDc5CisgKi8KKyNkZWZpbmUgSENfSFRYbk1QTURfU01BU0sgICAgICAgMHgwMDA3MDAwMAorI2RlZmluZSBIQ19IVFhuTVBNRF9UTUFTSyAgICAgICAweDAwMzgwMDAwCisjZGVmaW5lIEhDX0hUWG5MT0REVGZfTUFTSyAgICAgIDB4MDAwMDAwMDcKKyNkZWZpbmUgSENfSFRYblhZMlNUX01BU0sgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBIQ19IVFhuTVBNRF9Uc2luZ2xlICAgICAweDAwMDAwMDAwCisjZGVmaW5lIEhDX0hUWG5NUE1EX1RjbGFtcCAgICAgIDB4MDAwODAwMDAKKyNkZWZpbmUgSENfSFRYbk1QTURfVHJlcGVhdCAgICAgMHgwMDEwMDAwMAorI2RlZmluZSBIQ19IVFhuTVBNRF9UbWlycm9yICAgICAweDAwMTgwMDAwCisjZGVmaW5lIEhDX0hUWG5NUE1EX1R3cmFwICAgICAgIDB4MDAyMDAwMDAKKyNkZWZpbmUgSENfSFRYbk1QTURfU3NpbmdsZSAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBIQ19IVFhuTVBNRF9TY2xhbXAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIEhDX0hUWG5NUE1EX1NyZXBlYXQgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgSENfSFRYbk1QTURfU21pcnJvciAgICAgMHgwMDAzMDAwMAorI2RlZmluZSBIQ19IVFhuTVBNRF9Td3JhcCAgICAgICAweDAwMDQwMDAwCisvKiBIQ19TdWJBX0hUWG5DTE9EdSAgICAgICAweDAwN2EKKyAqLworI2RlZmluZSBIQ19IVFhuQ0xPRHVfTUFTSyAgICAgICAweDAwMGZmYzAwCisjZGVmaW5lIEhDX0hUWG5DTE9EZF9NQVNLICAgICAgIDB4MDAwMDAzZmYKKyNkZWZpbmUgSENfSFRYbkNMT0R1X1NISUZUICAgICAgMTAKKy8qIEhDX1N1YkFfSFRYbkZNICAgICAgICAgIDB4MDA3YgorICovCisjZGVmaW5lIEhDX0hUWG5GTV9NQVNLICAgICAgICAgIDB4MDBmZjAwMDAKKyNkZWZpbmUgSENfSFRYbkxvY19NQVNLICAgICAgICAgMHgwMDAwMDAwMworI2RlZmluZSBIQ19IVFhuRk1fSU5ERVggICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIEhDX0hUWG5GTV9JbnRlbnNpdHkgICAgIDB4MDAwODAwMDAKKyNkZWZpbmUgSENfSFRYbkZNX0x1bSAgICAgICAgICAgMHgwMDEwMDAwMAorI2RlZmluZSBIQ19IVFhuRk1fQWxwaGEgICAgICAgICAweDAwMTgwMDAwCisjZGVmaW5lIEhDX0hUWG5GTV9EWCAgICAgICAgICAgIDB4MDAyODAwMDAKKyNkZWZpbmUgSENfSFRYbkZNX0FSR0IxNiAgICAgICAgMHgwMDg4MDAwMAorI2RlZmluZSBIQ19IVFhuRk1fQVJHQjMyICAgICAgICAweDAwOTgwMDAwCisjZGVmaW5lIEhDX0hUWG5GTV9BQkdSMTYgICAgICAgIDB4MDBhODAwMDAKKyNkZWZpbmUgSENfSFRYbkZNX0FCR1IzMiAgICAgICAgMHgwMGI4MDAwMAorI2RlZmluZSBIQ19IVFhuRk1fUkdCQTE2ICAgICAgICAweDAwYzgwMDAwCisjZGVmaW5lIEhDX0hUWG5GTV9SR0JBMzIgICAgICAgIDB4MDBkODAwMDAKKyNkZWZpbmUgSENfSFRYbkZNX0JHUkExNiAgICAgICAgMHgwMGU4MDAwMAorI2RlZmluZSBIQ19IVFhuRk1fQkdSQTMyICAgICAgICAweDAwZjgwMDAwCisjZGVmaW5lIEhDX0hUWG5GTV9CVU1QTUFQICAgICAgIDB4MDAzODAwMDAKKyNkZWZpbmUgSENfSFRYbkZNX0luZGV4MSAgICAgICAgKEhDX0hUWG5GTV9JTkRFWCAgICAgfCAweDAwMDAwMDAwKQorI2RlZmluZSBIQ19IVFhuRk1fSW5kZXgyICAgICAgICAoSENfSFRYbkZNX0lOREVYICAgICB8IDB4MDAwMTAwMDApCisjZGVmaW5lIEhDX0hUWG5GTV9JbmRleDQgICAgICAgIChIQ19IVFhuRk1fSU5ERVggICAgIHwgMHgwMDAyMDAwMCkKKyNkZWZpbmUgSENfSFRYbkZNX0luZGV4OCAgICAgICAgKEhDX0hUWG5GTV9JTkRFWCAgICAgfCAweDAwMDMwMDAwKQorI2RlZmluZSBIQ19IVFhuRk1fVDEgICAgICAgICAgICAoSENfSFRYbkZNX0ludGVuc2l0eSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIEhDX0hUWG5GTV9UMiAgICAgICAgICAgIChIQ19IVFhuRk1fSW50ZW5zaXR5IHwgMHgwMDAxMDAwMCkKKyNkZWZpbmUgSENfSFRYbkZNX1Q0ICAgICAgICAgICAgKEhDX0hUWG5GTV9JbnRlbnNpdHkgfCAweDAwMDIwMDAwKQorI2RlZmluZSBIQ19IVFhuRk1fVDggICAgICAgICAgICAoSENfSFRYbkZNX0ludGVuc2l0eSB8IDB4MDAwMzAwMDApCisjZGVmaW5lIEhDX0hUWG5GTV9MMSAgICAgICAgICAgIChIQ19IVFhuRk1fTHVtICAgICAgIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgSENfSFRYbkZNX0wyICAgICAgICAgICAgKEhDX0hUWG5GTV9MdW0gICAgICAgfCAweDAwMDEwMDAwKQorI2RlZmluZSBIQ19IVFhuRk1fTDQgICAgICAgICAgICAoSENfSFRYbkZNX0x1bSAgICAgICB8IDB4MDAwMjAwMDApCisjZGVmaW5lIEhDX0hUWG5GTV9MOCAgICAgICAgICAgIChIQ19IVFhuRk1fTHVtICAgICAgIHwgMHgwMDAzMDAwMCkKKyNkZWZpbmUgSENfSFRYbkZNX0FMNDQgICAgICAgICAgKEhDX0hUWG5GTV9MdW0gICAgICAgfCAweDAwMDQwMDAwKQorI2RlZmluZSBIQ19IVFhuRk1fQUw4OCAgICAgICAgICAoSENfSFRYbkZNX0x1bSAgICAgICB8IDB4MDAwNTAwMDApCisjZGVmaW5lIEhDX0hUWG5GTV9BMSAgICAgICAgICAgIChIQ19IVFhuRk1fQWxwaGEgICAgIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgSENfSFRYbkZNX0EyICAgICAgICAgICAgKEhDX0hUWG5GTV9BbHBoYSAgICAgfCAweDAwMDEwMDAwKQorI2RlZmluZSBIQ19IVFhuRk1fQTQgICAgICAgICAgICAoSENfSFRYbkZNX0FscGhhICAgICB8IDB4MDAwMjAwMDApCisjZGVmaW5lIEhDX0hUWG5GTV9BOCAgICAgICAgICAgIChIQ19IVFhuRk1fQWxwaGEgICAgIHwgMHgwMDAzMDAwMCkKKyNkZWZpbmUgSENfSFRYbkZNX0RYMSAgICAgICAgICAgKEhDX0hUWG5GTV9EWCAgICAgICAgfCAweDAwMDEwMDAwKQorI2RlZmluZSBIQ19IVFhuRk1fRFgyMyAgICAgICAgICAoSENfSFRYbkZNX0RYICAgICAgICB8IDB4MDAwMjAwMDApCisjZGVmaW5lIEhDX0hUWG5GTV9EWDQ1ICAgICAgICAgIChIQ19IVFhuRk1fRFggICAgICAgIHwgMHgwMDAzMDAwMCkKKyNkZWZpbmUgSENfSFRYbkZNX1JHQjU1NSAgICAgICAgKEhDX0hUWG5GTV9BUkdCMTYgICAgfCAweDAwMDAwMDAwKQorI2RlZmluZSBIQ19IVFhuRk1fUkdCNTY1ICAgICAgICAoSENfSFRYbkZNX0FSR0IxNiAgICB8IDB4MDAwMTAwMDApCisjZGVmaW5lIEhDX0hUWG5GTV9BUkdCMTU1NSAgICAgIChIQ19IVFhuRk1fQVJHQjE2ICAgIHwgMHgwMDAyMDAwMCkKKyNkZWZpbmUgSENfSFRYbkZNX0FSR0I0NDQ0ICAgICAgKEhDX0hUWG5GTV9BUkdCMTYgICAgfCAweDAwMDMwMDAwKQorI2RlZmluZSBIQ19IVFhuRk1fQVJHQjA4ODggICAgICAoSENfSFRYbkZNX0FSR0IzMiAgICB8IDB4MDAwMDAwMDApCisjZGVmaW5lIEhDX0hUWG5GTV9BUkdCODg4OCAgICAgIChIQ19IVFhuRk1fQVJHQjMyICAgIHwgMHgwMDAxMDAwMCkKKyNkZWZpbmUgSENfSFRYbkZNX0JHUjU1NSAgICAgICAgKEhDX0hUWG5GTV9BQkdSMTYgICAgfCAweDAwMDAwMDAwKQorI2RlZmluZSBIQ19IVFhuRk1fQkdSNTY1ICAgICAgICAoSENfSFRYbkZNX0FCR1IxNiAgICB8IDB4MDAwMTAwMDApCisjZGVmaW5lIEhDX0hUWG5GTV9BQkdSMTU1NSAgICAgIChIQ19IVFhuRk1fQUJHUjE2ICAgIHwgMHgwMDAyMDAwMCkKKyNkZWZpbmUgSENfSFRYbkZNX0FCR1I0NDQ0ICAgICAgKEhDX0hUWG5GTV9BQkdSMTYgICAgfCAweDAwMDMwMDAwKQorI2RlZmluZSBIQ19IVFhuRk1fQUJHUjA4ODggICAgICAoSENfSFRYbkZNX0FCR1IzMiAgICB8IDB4MDAwMDAwMDApCisjZGVmaW5lIEhDX0hUWG5GTV9BQkdSODg4OCAgICAgIChIQ19IVFhuRk1fQUJHUjMyICAgIHwgMHgwMDAxMDAwMCkKKyNkZWZpbmUgSENfSFRYbkZNX1JHQkE1NTUwICAgICAgKEhDX0hUWG5GTV9SR0JBMTYgICAgfCAweDAwMDAwMDAwKQorI2RlZmluZSBIQ19IVFhuRk1fUkdCQTU1NTEgICAgICAoSENfSFRYbkZNX1JHQkExNiAgICB8IDB4MDAwMjAwMDApCisjZGVmaW5lIEhDX0hUWG5GTV9SR0JBNDQ0NCAgICAgIChIQ19IVFhuRk1fUkdCQTE2ICAgIHwgMHgwMDAzMDAwMCkKKyNkZWZpbmUgSENfSFRYbkZNX1JHQkE4ODgwICAgICAgKEhDX0hUWG5GTV9SR0JBMzIgICAgfCAweDAwMDAwMDAwKQorI2RlZmluZSBIQ19IVFhuRk1fUkdCQTg4ODggICAgICAoSENfSFRYbkZNX1JHQkEzMiAgICB8IDB4MDAwMTAwMDApCisjZGVmaW5lIEhDX0hUWG5GTV9CR1JBNTU1MCAgICAgIChIQ19IVFhuRk1fQkdSQTE2ICAgIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgSENfSFRYbkZNX0JHUkE1NTUxICAgICAgKEhDX0hUWG5GTV9CR1JBMTYgICAgfCAweDAwMDIwMDAwKQorI2RlZmluZSBIQ19IVFhuRk1fQkdSQTQ0NDQgICAgICAoSENfSFRYbkZNX0JHUkExNiAgICB8IDB4MDAwMzAwMDApCisjZGVmaW5lIEhDX0hUWG5GTV9CR1JBODg4MCAgICAgIChIQ19IVFhuRk1fQkdSQTMyICAgIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgSENfSFRYbkZNX0JHUkE4ODg4ICAgICAgKEhDX0hUWG5GTV9CR1JBMzIgICAgfCAweDAwMDEwMDAwKQorI2RlZmluZSBIQ19IVFhuRk1fVlU4OCAgICAgICAgICAoSENfSFRYbkZNX0JVTVBNQVAgICB8IDB4MDAwMDAwMDApCisjZGVmaW5lIEhDX0hUWG5GTV9MVlU2NTUgICAgICAgIChIQ19IVFhuRk1fQlVNUE1BUCAgIHwgMHgwMDAxMDAwMCkKKyNkZWZpbmUgSENfSFRYbkZNX0xWVTg4OCAgICAgICAgKEhDX0hUWG5GTV9CVU1QTUFQICAgfCAweDAwMDIwMDAwKQorI2RlZmluZSBIQ19IVFhuTG9jX0xvY2FsICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIEhDX0hUWG5Mb2NfU3lzICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgSENfSFRYbkxvY19BR1AgICAgICAgICAgMHgwMDAwMDAwMworLyogSENfU3ViQV9IVFhuVFJBSCAgICAgICAgMHgwMDdmCisgKi8KKyNkZWZpbmUgSENfSFRYblRSQUhfTUFTSyAgICAgICAgMHgwMGZmMDAwMAorI2RlZmluZSBIQ19IVFhuVFJBTF9NQVNLICAgICAgICAweDAwMDBmZjAwCisjZGVmaW5lIEhDX0hUWG5UQkFfTUFTSyAgICAgICAgIDB4MDAwMDAwZmYKKyNkZWZpbmUgSENfSFRYblRSQUhfU0hJRlQgICAgICAgMTYKKyNkZWZpbmUgSENfSFRYblRSQUxfU0hJRlQgICAgICAgOAorLyogSENfU3ViQV9IVFhuVEJMQ3NhdCAgICAgMHgwMDgwCisgKi0tIERlZmluZSB0aGUgaW5wdXQgdGV4dHVyZS4KKyAqLworI2RlZmluZSBIQ19YVENfVE9QQyAgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIEhDX1hUQ19JbnZUT1BDICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgSENfWFRDX1RPUENwNSAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBIQ19YVENfQ2JpYXMgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIEhDX1hUQ19JbnZDYmlhcyAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgSENfWFRDXzAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBIQ19YVENfRGlmICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEhDX1hUQ19TcGVjICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgSENfWFRDX1RleCAgICAgICAgICAgICAgMHgwMDAwMDAwMworI2RlZmluZSBIQ19YVENfQ3VyICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEhDX1hUQ19BZGlmICAgICAgICAgICAgIDB4MDAwMDAwMDUKKyNkZWZpbmUgSENfWFRDX0ZvZyAgICAgICAgICAgICAgMHgwMDAwMDAwNgorI2RlZmluZSBIQ19YVENfQXRleCAgICAgICAgICAgICAweDAwMDAwMDA3CisjZGVmaW5lIEhDX1hUQ19BY3VyICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgSENfWFRDX0hUWG5UQkxSQyAgICAgICAgMHgwMDAwMDAwOQorI2RlZmluZSBIQ19YVENfQ3RleG5leHQgICAgICAgICAweDAwMDAwMDBhCisvKi0tCisgKi8KKyNkZWZpbmUgSENfSFRYblRCTENzYXRfTUFTSyAgICAgMHgwMDgwMDAwMAorI2RlZmluZSBIQ19IVFhuVEJMQ2FfTUFTSyAgICAgICAweDAwMGZjMDAwCisjZGVmaW5lIEhDX0hUWG5UQkxDYl9NQVNLICAgICAgIDB4MDAwMDFmODAKKyNkZWZpbmUgSENfSFRYblRCTENjX01BU0sgICAgICAgMHgwMDAwMDAzZgorI2RlZmluZSBIQ19IVFhuVEJMQ2FfVE9QQyAgICAgICAoSENfWFRDX1RPUEMgPDwgMTQpCisjZGVmaW5lIEhDX0hUWG5UQkxDYV9JbnZUT1BDICAgIChIQ19YVENfSW52VE9QQyA8PCAxNCkKKyNkZWZpbmUgSENfSFRYblRCTENhX1RPUENwNSAgICAgKEhDX1hUQ19UT1BDcDUgPDwgMTQpCisjZGVmaW5lIEhDX0hUWG5UQkxDYV8wICAgICAgICAgIChIQ19YVENfMCA8PCAxNCkKKyNkZWZpbmUgSENfSFRYblRCTENhX0RpZiAgICAgICAgKEhDX1hUQ19EaWYgPDwgMTQpCisjZGVmaW5lIEhDX0hUWG5UQkxDYV9TcGVjICAgICAgIChIQ19YVENfU3BlYyA8PCAxNCkKKyNkZWZpbmUgSENfSFRYblRCTENhX1RleCAgICAgICAgKEhDX1hUQ19UZXggPDwgMTQpCisjZGVmaW5lIEhDX0hUWG5UQkxDYV9DdXIgICAgICAgIChIQ19YVENfQ3VyIDw8IDE0KQorI2RlZmluZSBIQ19IVFhuVEJMQ2FfQWRpZiAgICAgICAoSENfWFRDX0FkaWYgPDwgMTQpCisjZGVmaW5lIEhDX0hUWG5UQkxDYV9Gb2cgICAgICAgIChIQ19YVENfRm9nIDw8IDE0KQorI2RlZmluZSBIQ19IVFhuVEJMQ2FfQXRleCAgICAgICAoSENfWFRDX0F0ZXggPDwgMTQpCisjZGVmaW5lIEhDX0hUWG5UQkxDYV9BY3VyICAgICAgIChIQ19YVENfQWN1ciA8PCAxNCkKKyNkZWZpbmUgSENfSFRYblRCTENhX0hUWG5UQkxSQyAgKEhDX1hUQ19IVFhuVEJMUkMgPDwgMTQpCisjZGVmaW5lIEhDX0hUWG5UQkxDYV9DdGV4bmV4dCAgIChIQ19YVENfQ3RleG5leHQgPDwgMTQpCisjZGVmaW5lIEhDX0hUWG5UQkxDYl9UT1BDICAgICAgIChIQ19YVENfVE9QQyA8PCA3KQorI2RlZmluZSBIQ19IVFhuVEJMQ2JfSW52VE9QQyAgICAoSENfWFRDX0ludlRPUEMgPDwgNykKKyNkZWZpbmUgSENfSFRYblRCTENiX1RPUENwNSAgICAgKEhDX1hUQ19UT1BDcDUgPDwgNykKKyNkZWZpbmUgSENfSFRYblRCTENiXzAgICAgICAgICAgKEhDX1hUQ18wIDw8IDcpCisjZGVmaW5lIEhDX0hUWG5UQkxDYl9EaWYgICAgICAgIChIQ19YVENfRGlmIDw8IDcpCisjZGVmaW5lIEhDX0hUWG5UQkxDYl9TcGVjICAgICAgIChIQ19YVENfU3BlYyA8PCA3KQorI2RlZmluZSBIQ19IVFhuVEJMQ2JfVGV4ICAgICAgICAoSENfWFRDX1RleCA8PCA3KQorI2RlZmluZSBIQ19IVFhuVEJMQ2JfQ3VyICAgICAgICAoSENfWFRDX0N1ciA8PCA3KQorI2RlZmluZSBIQ19IVFhuVEJMQ2JfQWRpZiAgICAgICAoSENfWFRDX0FkaWYgPDwgNykKKyNkZWZpbmUgSENfSFRYblRCTENiX0ZvZyAgICAgICAgKEhDX1hUQ19Gb2cgPDwgNykKKyNkZWZpbmUgSENfSFRYblRCTENiX0F0ZXggICAgICAgKEhDX1hUQ19BdGV4IDw8IDcpCisjZGVmaW5lIEhDX0hUWG5UQkxDYl9BY3VyICAgICAgIChIQ19YVENfQWN1ciA8PCA3KQorI2RlZmluZSBIQ19IVFhuVEJMQ2JfSFRYblRCTFJDICAoSENfWFRDX0hUWG5UQkxSQyA8PCA3KQorI2RlZmluZSBIQ19IVFhuVEJMQ2JfQ3RleG5leHQgICAoSENfWFRDX0N0ZXhuZXh0IDw8IDcpCisjZGVmaW5lIEhDX0hUWG5UQkxDY19UT1BDICAgICAgIChIQ19YVENfVE9QQyA8PCAwKQorI2RlZmluZSBIQ19IVFhuVEJMQ2NfSW52VE9QQyAgICAoSENfWFRDX0ludlRPUEMgPDwgMCkKKyNkZWZpbmUgSENfSFRYblRCTENjX1RPUENwNSAgICAgKEhDX1hUQ19UT1BDcDUgPDwgMCkKKyNkZWZpbmUgSENfSFRYblRCTENjXzAgICAgICAgICAgKEhDX1hUQ18wIDw8IDApCisjZGVmaW5lIEhDX0hUWG5UQkxDY19EaWYgICAgICAgIChIQ19YVENfRGlmIDw8IDApCisjZGVmaW5lIEhDX0hUWG5UQkxDY19TcGVjICAgICAgIChIQ19YVENfU3BlYyA8PCAwKQorI2RlZmluZSBIQ19IVFhuVEJMQ2NfVGV4ICAgICAgICAoSENfWFRDX1RleCA8PCAwKQorI2RlZmluZSBIQ19IVFhuVEJMQ2NfQ3VyICAgICAgICAoSENfWFRDX0N1ciA8PCAwKQorI2RlZmluZSBIQ19IVFhuVEJMQ2NfQWRpZiAgICAgICAoSENfWFRDX0FkaWYgPDwgMCkKKyNkZWZpbmUgSENfSFRYblRCTENjX0ZvZyAgICAgICAgKEhDX1hUQ19Gb2cgPDwgMCkKKyNkZWZpbmUgSENfSFRYblRCTENjX0F0ZXggICAgICAgKEhDX1hUQ19BdGV4IDw8IDApCisjZGVmaW5lIEhDX0hUWG5UQkxDY19BY3VyICAgICAgIChIQ19YVENfQWN1ciA8PCAwKQorI2RlZmluZSBIQ19IVFhuVEJMQ2NfSFRYblRCTFJDICAoSENfWFRDX0hUWG5UQkxSQyA8PCAwKQorI2RlZmluZSBIQ19IVFhuVEJMQ2NfQ3RleG5leHQgICAoSENfWFRDX0N0ZXhuZXh0IDw8IDApCisvKiBIQ19TdWJBX0hUWG5UQkxDb3AgICAgICAweDAwODEKKyAqLworI2RlZmluZSBIQ19IVFhuVEJMZG90X01BU0sgICAgICAweDAwYzAwMDAwCisjZGVmaW5lIEhDX0hUWG5UQkxDb3BfTUFTSyAgICAgIDB4MDAzODAwMDAKKyNkZWZpbmUgSENfSFRYblRCTENiaWFzX01BU0sgICAgMHgwMDA3YzAwMAorI2RlZmluZSBIQ19IVFhuVEJMQ3NoaWZ0X01BU0sgICAweDAwMDAxODAwCisjZGVmaW5lIEhDX0hUWG5UQkxBb3BfTUFTSyAgICAgIDB4MDAwMDAzODAKKyNkZWZpbmUgSENfSFRYblRCTEFiaWFzX01BU0sgICAgMHgwMDAwMDA3OAorI2RlZmluZSBIQ19IVFhuVEJMQXNoaWZ0X01BU0sgICAweDAwMDAwMDAzCisjZGVmaW5lIEhDX0hUWG5UQkxDb3BfQWRkICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgSENfSFRYblRCTENvcF9TdWIgICAgICAgMHgwMDA4MDAwMAorI2RlZmluZSBIQ19IVFhuVEJMQ29wX01pbiAgICAgICAweDAwMTAwMDAwCisjZGVmaW5lIEhDX0hUWG5UQkxDb3BfTWF4ICAgICAgIDB4MDAxODAwMDAKKyNkZWZpbmUgSENfSFRYblRCTENvcF9NYXNrICAgICAgMHgwMDIwMDAwMAorI2RlZmluZSBIQ19IVFhuVEJMQ2JpYXNfQ2JpYXMgICAgICAgICAgIChIQ19YVENfQ2JpYXMgPDwgMTQpCisjZGVmaW5lIEhDX0hUWG5UQkxDYmlhc19JbnZDYmlhcyAgICAgICAgKEhDX1hUQ19JbnZDYmlhcyA8PCAxNCkKKyNkZWZpbmUgSENfSFRYblRCTENiaWFzXzAgICAgICAgICAgICAgICAoSENfWFRDXzAgPDwgMTQpCisjZGVmaW5lIEhDX0hUWG5UQkxDYmlhc19EaWYgICAgICAgICAgICAgKEhDX1hUQ19EaWYgPDwgMTQpCisjZGVmaW5lIEhDX0hUWG5UQkxDYmlhc19TcGVjICAgICAgICAgICAgKEhDX1hUQ19TcGVjIDw8IDE0KQorI2RlZmluZSBIQ19IVFhuVEJMQ2JpYXNfVGV4ICAgICAgICAgICAgIChIQ19YVENfVGV4IDw8IDE0KQorI2RlZmluZSBIQ19IVFhuVEJMQ2JpYXNfQ3VyICAgICAgICAgICAgIChIQ19YVENfQ3VyIDw8IDE0KQorI2RlZmluZSBIQ19IVFhuVEJMQ2JpYXNfQWRpZiAgICAgICAgICAgIChIQ19YVENfQWRpZiA8PCAxNCkKKyNkZWZpbmUgSENfSFRYblRCTENiaWFzX0ZvZyAgICAgICAgICAgICAoSENfWFRDX0ZvZyA8PCAxNCkKKyNkZWZpbmUgSENfSFRYblRCTENiaWFzX0F0ZXggICAgICAgICAgICAoSENfWFRDX0F0ZXggPDwgMTQpCisjZGVmaW5lIEhDX0hUWG5UQkxDYmlhc19BY3VyICAgICAgICAgICAgKEhDX1hUQ19BY3VyIDw8IDE0KQorI2RlZmluZSBIQ19IVFhuVEJMQ2JpYXNfSFRYblRCTFJDICAgICAgIChIQ19YVENfSFRYblRCTFJDIDw8IDE0KQorI2RlZmluZSBIQ19IVFhuVEJMQ3NoaWZ0XzEgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIEhDX0hUWG5UQkxDc2hpZnRfMiAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgSENfSFRYblRCTENzaGlmdF9ObyAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBIQ19IVFhuVEJMQ3NoaWZ0X0RvdFAgICAweDAwMDAxODAwCisvKj0qIEpvaG4gU2hlbmcgWzIwMDMuNy4xOF0gdGV4dHVyZSBjb21iaW5lICo9Ki8KKyNkZWZpbmUgSENfSFRYblRCTERPVDMgICAweDAwMDgwMDAwCisjZGVmaW5lIEhDX0hUWG5UQkxET1Q0ICAgMHgwMDBDMDAwMAorCisjZGVmaW5lIEhDX0hUWG5UQkxBb3BfQWRkICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgSENfSFRYblRCTEFvcF9TdWIgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBIQ19IVFhuVEJMQW9wX01pbiAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEhDX0hUWG5UQkxBb3BfTWF4ICAgICAgIDB4MDAwMDAxODAKKyNkZWZpbmUgSENfSFRYblRCTEFvcF9NYXNrICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBIQ19IVFhuVEJMQWJpYXNfSW52ICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgSENfSFRYblRCTEFiaWFzX0FkaWYgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIEhDX0hUWG5UQkxBYmlhc19Gb2cgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBIQ19IVFhuVEJMQWJpYXNfQWN1ciAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgSENfSFRYblRCTEFiaWFzX0hUWG5UQkxSQWJpYXMgICAweDAwMDAwMDE4CisjZGVmaW5lIEhDX0hUWG5UQkxBYmlhc19BdGV4ICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBIQ19IVFhuVEJMQXNoaWZ0XzEgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIEhDX0hUWG5UQkxBc2hpZnRfMiAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgSENfSFRYblRCTEFzaGlmdF9ObyAgICAgMHgwMDAwMDAwMgorLyogI2RlZmluZSBIQ19IVFhuVEJMQXNoaWZ0X0RvdFAgICAweDAwMDAwMDAzICovCisvKiBIQ19TdWJBX0hUWG5UQkxNUEZvZyAgICAweDAwODIKKyAqLworI2RlZmluZSBIQ19IVFhuVEJMTVBmb2dfTUFTSyAgICAweDAwZTAwMDAwCisjZGVmaW5lIEhDX0hUWG5UQkxNUGZvZ18wICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgSENfSFRYblRCTE1QZm9nX0FkaWYgICAgMHgwMDIwMDAwMAorI2RlZmluZSBIQ19IVFhuVEJMTVBmb2dfRm9nICAgICAweDAwNDAwMDAwCisjZGVmaW5lIEhDX0hUWG5UQkxNUGZvZ19BdGV4ICAgIDB4MDA2MDAwMDAKKyNkZWZpbmUgSENfSFRYblRCTE1QZm9nX0FjdXIgICAgMHgwMDgwMDAwMAorI2RlZmluZSBIQ19IVFhuVEJMTVBmb2dfR0hUWG5UQkxSRm9nICAgIDB4MDBhMDAwMDAKKy8qIEhDX1N1YkFfSFRYblRCTEFzYXQgICAgIDB4MDA4MworICotLSBEZWZpbmUgdGhlIHRleHR1cmUgYWxwaGEgaW5wdXQuCisgKi8KKyNkZWZpbmUgSENfWFRBX1RPUEEgICAgICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBIQ19YVEFfSW52VE9QQSAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEhDX1hUQV9UT1BBcDUgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgSENfWFRBX0FkaWYgICAgICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBIQ19YVEFfRm9nICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEhDX1hUQV9BY3VyICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgSENfWFRBX0hUWG5UQkxSQSAgICAgICAgMHgwMDAwMDAwMworI2RlZmluZSBIQ19YVEFfQXRleCAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEhDX1hUQV9BdGV4bmV4dCAgICAgICAgIDB4MDAwMDAwMDUKKy8qLS0KKyAqLworI2RlZmluZSBIQ19IVFhuVEJMQXNhdF9NQVNLICAgICAweDAwODAwMDAwCisjZGVmaW5lIEhDX0hUWG5UQkxBTUJfTUFTSyAgICAgIDB4MDA3MDAwMDAKKyNkZWZpbmUgSENfSFRYblRCTEFhX01BU0sgICAgICAgMHgwMDA3YzAwMAorI2RlZmluZSBIQ19IVFhuVEJMQWJfTUFTSyAgICAgICAweDAwMDAwZjgwCisjZGVmaW5lIEhDX0hUWG5UQkxBY19NQVNLICAgICAgIDB4MDAwMDAwMWYKKyNkZWZpbmUgSENfSFRYblRCTEFNQl9TSElGVCAgICAgMjAKKyNkZWZpbmUgSENfSFRYblRCTEFhX1RPUEEgICAgICAgKEhDX1hUQV9UT1BBIDw8IDE0KQorI2RlZmluZSBIQ19IVFhuVEJMQWFfSW52VE9QQSAgICAoSENfWFRBX0ludlRPUEEgPDwgMTQpCisjZGVmaW5lIEhDX0hUWG5UQkxBYV9UT1BBcDUgICAgIChIQ19YVEFfVE9QQXA1IDw8IDE0KQorI2RlZmluZSBIQ19IVFhuVEJMQWFfQWRpZiAgICAgICAoSENfWFRBX0FkaWYgPDwgMTQpCisjZGVmaW5lIEhDX0hUWG5UQkxBYV9Gb2cgICAgICAgIChIQ19YVEFfRm9nIDw8IDE0KQorI2RlZmluZSBIQ19IVFhuVEJMQWFfQWN1ciAgICAgICAoSENfWFRBX0FjdXIgPDwgMTQpCisjZGVmaW5lIEhDX0hUWG5UQkxBYV9IVFhuVEJMUkEgIChIQ19YVEFfSFRYblRCTFJBIDw8IDE0KQorI2RlZmluZSBIQ19IVFhuVEJMQWFfQXRleCAgICAgICAoSENfWFRBX0F0ZXggPDwgMTQpCisjZGVmaW5lIEhDX0hUWG5UQkxBYV9BdGV4bmV4dCAgIChIQ19YVEFfQXRleG5leHQgPDwgMTQpCisjZGVmaW5lIEhDX0hUWG5UQkxBYl9UT1BBICAgICAgIChIQ19YVEFfVE9QQSA8PCA3KQorI2RlZmluZSBIQ19IVFhuVEJMQWJfSW52VE9QQSAgICAoSENfWFRBX0ludlRPUEEgPDwgNykKKyNkZWZpbmUgSENfSFRYblRCTEFiX1RPUEFwNSAgICAgKEhDX1hUQV9UT1BBcDUgPDwgNykKKyNkZWZpbmUgSENfSFRYblRCTEFiX0FkaWYgICAgICAgKEhDX1hUQV9BZGlmIDw8IDcpCisjZGVmaW5lIEhDX0hUWG5UQkxBYl9Gb2cgICAgICAgIChIQ19YVEFfRm9nIDw8IDcpCisjZGVmaW5lIEhDX0hUWG5UQkxBYl9BY3VyICAgICAgIChIQ19YVEFfQWN1ciA8PCA3KQorI2RlZmluZSBIQ19IVFhuVEJMQWJfSFRYblRCTFJBICAoSENfWFRBX0hUWG5UQkxSQSA8PCA3KQorI2RlZmluZSBIQ19IVFhuVEJMQWJfQXRleCAgICAgICAoSENfWFRBX0F0ZXggPDwgNykKKyNkZWZpbmUgSENfSFRYblRCTEFiX0F0ZXhuZXh0ICAgKEhDX1hUQV9BdGV4bmV4dCA8PCA3KQorI2RlZmluZSBIQ19IVFhuVEJMQWNfVE9QQSAgICAgICAoSENfWFRBX1RPUEEgPDwgMCkKKyNkZWZpbmUgSENfSFRYblRCTEFjX0ludlRPUEEgICAgKEhDX1hUQV9JbnZUT1BBIDw8IDApCisjZGVmaW5lIEhDX0hUWG5UQkxBY19UT1BBcDUgICAgIChIQ19YVEFfVE9QQXA1IDw8IDApCisjZGVmaW5lIEhDX0hUWG5UQkxBY19BZGlmICAgICAgIChIQ19YVEFfQWRpZiA8PCAwKQorI2RlZmluZSBIQ19IVFhuVEJMQWNfRm9nICAgICAgICAoSENfWFRBX0ZvZyA8PCAwKQorI2RlZmluZSBIQ19IVFhuVEJMQWNfQWN1ciAgICAgICAoSENfWFRBX0FjdXIgPDwgMCkKKyNkZWZpbmUgSENfSFRYblRCTEFjX0hUWG5UQkxSQSAgKEhDX1hUQV9IVFhuVEJMUkEgPDwgMCkKKyNkZWZpbmUgSENfSFRYblRCTEFjX0F0ZXggICAgICAgKEhDX1hUQV9BdGV4IDw8IDApCisjZGVmaW5lIEhDX0hUWG5UQkxBY19BdGV4bmV4dCAgIChIQ19YVEFfQXRleG5leHQgPDwgMCkKKy8qIEhDX1N1YkFfSFRYblRCTFJBYSAgICAgIDB4MDA4OQorICovCisjZGVmaW5lIEhDX0hUWG5UQkxSQWFfTUFTSyAgICAgIDB4MDBmZjAwMDAKKyNkZWZpbmUgSENfSFRYblRCTFJBYl9NQVNLICAgICAgMHgwMDAwZmYwMAorI2RlZmluZSBIQ19IVFhuVEJMUkFjX01BU0sgICAgICAweDAwMDAwMGZmCisjZGVmaW5lIEhDX0hUWG5UQkxSQWFfU0hJRlQgICAgIDE2CisjZGVmaW5lIEhDX0hUWG5UQkxSQWJfU0hJRlQgICAgIDgKKyNkZWZpbmUgSENfSFRYblRCTFJBY19TSElGVCAgICAgMAorLyogSENfU3ViQV9IVFhuVEJMUkZvZyAgICAgMHgwMDhhCisgKi8KKyNkZWZpbmUgSENfSFRYblRCTFJGb2dfTUFTSyAgICAgMHgwMDAwZmYwMAorI2RlZmluZSBIQ19IVFhuVEJMUkFiaWFzX01BU0sgICAweDAwMDAwMGZmCisjZGVmaW5lIEhDX0hUWG5UQkxSRm9nX1NISUZUICAgIDgKKyNkZWZpbmUgSENfSFRYblRCTFJBYmlhc19TSElGVCAgMAorLyogSENfU3ViQV9IVFhuTFNjYWxlICAgICAgMHgwMDk0CisgKi8KKyNkZWZpbmUgSENfSFRYbkxTY2FsZV9NQVNLICAgICAgMHgwMDA3ZmMwMAorI2RlZmluZSBIQ19IVFhuTE9mZl9NQVNLICAgICAgICAweDAwMDAwMWZmCisjZGVmaW5lIEhDX0hUWG5MU2NhbGVfU0hJRlQgICAgIDEwCisvKiBIQ19TdWJBX0hUWFNNRCAgICAgICAgICAweDAwMDAKKyAqLworI2RlZmluZSBIQ19IVFhTTURfTUFTSyAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIEhDX0hUWFRNRF9NQVNLICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgSENfSFRYTnVtX01BU0sgICAgICAgICAgMHgwMDAwMDAzOAorI2RlZmluZSBIQ19IVFhUUk1EX01BU0sgICAgICAgICAweDAwMDAwMDA2CisjZGVmaW5lIEhDX0hUWENIQ0xSX01BU0sgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgSENfSFRYTnVtX1NISUZUICAgICAgICAgMworCisvKiBUZXh0dXJlIFBhbGV0dGUgbgorICovCisjZGVmaW5lIEhDX1N1YlR5cGVfVGV4UGFsZXR0ZTAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgSENfU3ViVHlwZV9UZXhQYWxldHRlMSAgMHgwMDAwMDAwMQorI2RlZmluZSBIQ19TdWJUeXBlX0ZvZ1RhYmxlICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEhDX1N1YlR5cGVfU3RpcHBsZSAgICAgIDB4MDAwMDAwMTQKKy8qIEhDX1N1YkFfVGV4UGFsZXR0ZTAgICAgIDB4MDAwMAorICovCisjZGVmaW5lIEhDX0hUUG5BX01BU0sgICAgICAgICAgIDB4ZmYwMDAwMDAKKyNkZWZpbmUgSENfSFRQblJfTUFTSyAgICAgICAgICAgMHgwMGZmMDAwMAorI2RlZmluZSBIQ19IVFBuR19NQVNLICAgICAgICAgICAweDAwMDBmZjAwCisjZGVmaW5lIEhDX0hUUG5CX01BU0sgICAgICAgICAgIDB4MDAwMDAwZmYKKy8qIEhDX1N1YkFfRm9nVGFibGUgICAgICAgIDB4MDAxMAorICovCisjZGVmaW5lIEhDX0hGUG4zX01BU0sgICAgICAgICAgIDB4ZmYwMDAwMDAKKyNkZWZpbmUgSENfSEZQbjJfTUFTSyAgICAgICAgICAgMHgwMGZmMDAwMAorI2RlZmluZSBIQ19IRlBuMV9NQVNLICAgICAgICAgICAweDAwMDBmZjAwCisjZGVmaW5lIEhDX0hGUG5fTUFTSyAgICAgICAgICAgIDB4MDAwMDAwZmYKKyNkZWZpbmUgSENfSEZQbjNfU0hJRlQgICAgICAgICAgMjQKKyNkZWZpbmUgSENfSEZQbjJfU0hJRlQgICAgICAgICAgMTYKKyNkZWZpbmUgSENfSEZQbjFfU0hJRlQgICAgICAgICAgOAorCisvKiBBdXRvIFRlc3RpbmcgJiBTZWN1cml0eQorICovCisjZGVmaW5lIEhDX1N1YkFfSGVuRklGT0FUICAgICAgIDB4MDAwMAorI2RlZmluZSBIQ19TdWJBX0hGQkRyYXdGaXJzdCAgICAweDAwMDQKKyNkZWZpbmUgSENfU3ViQV9IRkJCYXNMICAgICAgICAgMHgwMDA1CisjZGVmaW5lIEhDX1N1YkFfSEZCRHN0ICAgICAgICAgIDB4MDAwNgorLyogSENfU3ViQV9IZW5GSUZPQVQgICAgICAgMHgwMDAwCisgKi8KKyNkZWZpbmUgSENfSGVuRklGT0FUX01BU0sgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBIQ19IZW5HRU1JTG9ja19NQVNLICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEhDX0hlbkZCQVN3YXBfTUFTSyAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgSENfSGVuT1RfTUFTSyAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBIQ19IZW5DTURRX01BU0sgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEhDX0hlblRYQ1RTVV9NQVNLICAgICAgIDB4MDAwMDAwMDEKKy8qIEhDX1N1YkFfSEZCRHJhd0ZpcnN0ICAgIDB4MDAwNAorICovCisjZGVmaW5lIEhDX0hGQkRyYXdGaXJzdF9NQVNLICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgSENfSEZCUXVldWVfTUFTSyAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBIQ19IRkJMb2NrX01BU0sgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIEhDX0hFT0ZfTUFTSyAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgSENfSEZCQmFzSF9NQVNLICAgICAgICAgMHgwMDAwMDBmZgorCisvKiBHRU1JIFNldHRpbmcKKyAqLworI2RlZmluZSBIQ19TdWJBX0hUQXJiUkNNICAgICAgICAweDAwMDgKKyNkZWZpbmUgSENfU3ViQV9IVEFyYlJaICAgICAgICAgMHgwMDBhCisjZGVmaW5lIEhDX1N1YkFfSFRBcmJXWiAgICAgICAgIDB4MDAwYgorI2RlZmluZSBIQ19TdWJBX0hUQXJiUlRYICAgICAgICAweDAwMGMKKyNkZWZpbmUgSENfU3ViQV9IVEFyYlJDVyAgICAgICAgMHgwMDBkCisjZGVmaW5lIEhDX1N1YkFfSFRBcmJFMiAgICAgICAgIDB4MDAwZQorI2RlZmluZSBIQ19TdWJBX0hBcmJSUUNNICAgICAgICAweDAwMTAKKyNkZWZpbmUgSENfU3ViQV9IQXJiV1FDTSAgICAgICAgMHgwMDExCisjZGVmaW5lIEhDX1N1YkFfSEdFTUlUb3V0ICAgICAgIDB4MDAyMAorI2RlZmluZSBIQ19TdWJBX0hGdGhSVFhEICAgICAgICAweDAwNDAKKyNkZWZpbmUgSENfU3ViQV9IRnRoUlRYQSAgICAgICAgMHgwMDQ0CisjZGVmaW5lIEhDX1N1YkFfSENNRFFzdEwgICAgICAgIDB4MDA1MAorI2RlZmluZSBIQ19TdWJBX0hDTURRZW5kTCAgICAgICAweDAwNTEKKyNkZWZpbmUgSENfU3ViQV9IQ01EUUxlbiAgICAgICAgMHgwMDUyCisvKiBIQ19TdWJBX0hUQXJiUkNNICAgICAgICAweDAwMDgKKyAqLworI2RlZmluZSBIQ19IVEFyYlJDTV9NQVNLICAgICAgICAweDAwMDBmZmZmCisvKiBIQ19TdWJBX0hUQXJiUlogICAgICAgICAweDAwMGEKKyAqLworI2RlZmluZSBIQ19IVEFyYlJaX01BU0sgICAgICAgICAweDAwMDBmZmZmCisvKiBIQ19TdWJBX0hUQXJiV1ogICAgICAgICAweDAwMGIKKyAqLworI2RlZmluZSBIQ19IVEFyYldaX01BU0sgICAgICAgICAweDAwMDBmZmZmCisvKiBIQ19TdWJBX0hUQXJiUlRYICAgICAgICAweDAwMGMKKyAqLworI2RlZmluZSBIQ19IVEFyYlJUWF9NQVNLICAgICAgICAweDAwMDBmZmZmCisvKiBIQ19TdWJBX0hUQXJiUkNXICAgICAgICAweDAwMGQKKyAqLworI2RlZmluZSBIQ19IVEFyYlJDV19NQVNLICAgICAgICAweDAwMDBmZmZmCisvKiBIQ19TdWJBX0hUQXJiRTIgICAgICAgICAweDAwMGUKKyAqLworI2RlZmluZSBIQ19IVEFyYkUyX01BU0sgICAgICAgICAweDAwMDBmZmZmCisvKiBIQ19TdWJBX0hBcmJSUUNNICAgICAgICAweDAwMTAKKyAqLworI2RlZmluZSBIQ19IVEFyYlJRQ01fTUFTSyAgICAgICAweDAwMDBmZmZmCisvKiBIQ19TdWJBX0hBcmJXUUNNICAgICAgICAweDAwMTEKKyAqLworI2RlZmluZSBIQ19IQXJiV1FDTV9NQVNLICAgICAgICAweDAwMDBmZmZmCisvKiBIQ19TdWJBX0hHRU1JVG91dCAgICAgICAweDAwMjAKKyAqLworI2RlZmluZSBIQ19IR0VNSVRvdXRfTUFTSyAgICAgICAweDAwMGYwMDAwCisjZGVmaW5lIEhDX0hOUEFyYlpDX01BU0sgICAgICAgIDB4MDAwMGZmZmYKKyNkZWZpbmUgSENfSEdFTUlUb3V0X1NISUZUICAgICAgMTYKKy8qIEhDX1N1YkFfSEZ0aFJUWEQgICAgICAgIDB4MDA0MAorICovCisjZGVmaW5lIEhDX0hGdGhSVFhEX01BU0sgICAgICAgIDB4MDBmZjAwMDAKKyNkZWZpbmUgSENfSEZ0aFJaRF9NQVNLICAgICAgICAgMHgwMDAwZmYwMAorI2RlZmluZSBIQ19IRnRoV1pEX01BU0sgICAgICAgICAweDAwMDAwMGZmCisjZGVmaW5lIEhDX0hGdGhSVFhEX1NISUZUICAgICAgIDE2CisjZGVmaW5lIEhDX0hGdGhSWkRfU0hJRlQgICAgICAgIDgKKy8qIEhDX1N1YkFfSEZ0aFJUWEEgICAgICAgIDB4MDA0NAorICovCisjZGVmaW5lIEhDX0hGdGhSVFhBX01BU0sgICAgICAgIDB4MDAwMDAwZmYKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiogRGVmaW5lIHRoZSBIYWxjeW9uIEludGVybmFsIHJlZ2lzdGVyIGFjY2VzcyBjb25zdGFudHMuIEZvciBzaW11bGF0b3Igb25seS4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgSENfU0lNQV9IQUdQQnN0TCAgICAgICAgMHgwMDAwCisjZGVmaW5lIEhDX1NJTUFfSEFHUEJlbmRMICAgICAgIDB4MDAwMQorI2RlZmluZSBIQ19TSU1BX0hBR1BDTU5UICAgICAgICAweDAwMDIKKyNkZWZpbmUgSENfU0lNQV9IQUdQQnBMICAgICAgICAgMHgwMDAzCisjZGVmaW5lIEhDX1NJTUFfSEFHUEJwSCAgICAgICAgIDB4MDAwNAorI2RlZmluZSBIQ19TSU1BX0hDbGlwVEIgICAgICAgICAweDAwMDUKKyNkZWZpbmUgSENfU0lNQV9IQ2xpcExSICAgICAgICAgMHgwMDA2CisjZGVmaW5lIEhDX1NJTUFfSEZQQ2xpcFRMICAgICAgIDB4MDAwNworI2RlZmluZSBIQ19TSU1BX0hGUENsaXBCTCAgICAgICAweDAwMDgKKyNkZWZpbmUgSENfU0lNQV9IRlBDbGlwTEwgICAgICAgMHgwMDA5CisjZGVmaW5lIEhDX1NJTUFfSEZQQ2xpcFJMICAgICAgIDB4MDAwYQorI2RlZmluZSBIQ19TSU1BX0hGUENsaXBUQkggICAgICAweDAwMGIKKyNkZWZpbmUgSENfU0lNQV9IRlBDbGlwTFJIICAgICAgMHgwMDBjCisjZGVmaW5lIEhDX1NJTUFfSExQICAgICAgICAgICAgIDB4MDAwZAorI2RlZmluZSBIQ19TSU1BX0hMUFJGICAgICAgICAgICAweDAwMGUKKyNkZWZpbmUgSENfU0lNQV9IU29saWRDTCAgICAgICAgMHgwMDBmCisjZGVmaW5lIEhDX1NJTUFfSFBpeEdDICAgICAgICAgIDB4MDAxMAorI2RlZmluZSBIQ19TSU1BX0hTUFhZT1MgICAgICAgICAweDAwMTEKKyNkZWZpbmUgSENfU0lNQV9IQ21kQSAgICAgICAgICAgMHgwMDEyCisjZGVmaW5lIEhDX1NJTUFfSENtZEIgICAgICAgICAgIDB4MDAxMworI2RlZmluZSBIQ19TSU1BX0hFbmFibGUgICAgICAgICAweDAwMTQKKyNkZWZpbmUgSENfU0lNQV9IWldCQmFzTCAgICAgICAgMHgwMDE1CisjZGVmaW5lIEhDX1NJTUFfSFpXQkJhc0ggICAgICAgIDB4MDAxNgorI2RlZmluZSBIQ19TSU1BX0haV0JUeXBlICAgICAgICAweDAwMTcKKyNkZWZpbmUgSENfU0lNQV9IWkJpYXNMICAgICAgICAgMHgwMDE4CisjZGVmaW5lIEhDX1NJTUFfSFpXQmVuZCAgICAgICAgIDB4MDAxOQorI2RlZmluZSBIQ19TSU1BX0haV1RNRCAgICAgICAgICAweDAwMWEKKyNkZWZpbmUgSENfU0lNQV9IWldDREwgICAgICAgICAgMHgwMDFiCisjZGVmaW5lIEhDX1NJTUFfSFpXQ1RBR251bSAgICAgIDB4MDAxYworI2RlZmluZSBIQ19TSU1BX0haQ1lOdW0gICAgICAgICAweDAwMWQKKyNkZWZpbmUgSENfU0lNQV9IWldDRmlyZSAgICAgICAgMHgwMDFlCisvKiAjZGVmaW5lIEhDX1NJTUFfSFNCQmFzTCAgICAgICAgIDB4MDAxZCAqLworLyogI2RlZmluZSBIQ19TSU1BX0hTQkJhc0ggICAgICAgICAweDAwMWUgKi8KKy8qICNkZWZpbmUgSENfU0lNQV9IU0JGTSAgICAgICAgICAgMHgwMDFmICovCisjZGVmaW5lIEhDX1NJTUFfSFNUUkVGICAgICAgICAgIDB4MDAyMAorI2RlZmluZSBIQ19TSU1BX0hTVE1EICAgICAgICAgICAweDAwMjEKKyNkZWZpbmUgSENfU0lNQV9IQUJCYXNMICAgICAgICAgMHgwMDIyCisjZGVmaW5lIEhDX1NJTUFfSEFCQmFzSCAgICAgICAgIDB4MDAyMworI2RlZmluZSBIQ19TSU1BX0hBQkZNICAgICAgICAgICAweDAwMjQKKyNkZWZpbmUgSENfU0lNQV9IQVRNRCAgICAgICAgICAgMHgwMDI1CisjZGVmaW5lIEhDX1NJTUFfSEFCTENzYXQgICAgICAgIDB4MDAyNgorI2RlZmluZSBIQ19TSU1BX0hBQkxDb3AgICAgICAgICAweDAwMjcKKyNkZWZpbmUgSENfU0lNQV9IQUJMQXNhdCAgICAgICAgMHgwMDI4CisjZGVmaW5lIEhDX1NJTUFfSEFCTEFvcCAgICAgICAgIDB4MDAyOQorI2RlZmluZSBIQ19TSU1BX0hBQkxSQ2EgICAgICAgICAweDAwMmEKKyNkZWZpbmUgSENfU0lNQV9IQUJMUkZDYSAgICAgICAgMHgwMDJiCisjZGVmaW5lIEhDX1NJTUFfSEFCTFJDYmlhcyAgICAgIDB4MDAyYworI2RlZmluZSBIQ19TSU1BX0hBQkxSQ2IgICAgICAgICAweDAwMmQKKyNkZWZpbmUgSENfU0lNQV9IQUJMUkZDYiAgICAgICAgMHgwMDJlCisjZGVmaW5lIEhDX1NJTUFfSEFCTFJBYSAgICAgICAgIDB4MDAyZgorI2RlZmluZSBIQ19TSU1BX0hBQkxSQWIgICAgICAgICAweDAwMzAKKyNkZWZpbmUgSENfU0lNQV9IREJCYXNMICAgICAgICAgMHgwMDMxCisjZGVmaW5lIEhDX1NJTUFfSERCQmFzSCAgICAgICAgIDB4MDAzMgorI2RlZmluZSBIQ19TSU1BX0hEQkZNICAgICAgICAgICAweDAwMzMKKyNkZWZpbmUgSENfU0lNQV9IRkJCTVNLTCAgICAgICAgMHgwMDM0CisjZGVmaW5lIEhDX1NJTUFfSFJPUCAgICAgICAgICAgIDB4MDAzNQorI2RlZmluZSBIQ19TSU1BX0hGb2dMRiAgICAgICAgICAweDAwMzYKKyNkZWZpbmUgSENfU0lNQV9IRm9nQ0wgICAgICAgICAgMHgwMDM3CisjZGVmaW5lIEhDX1NJTUFfSEZvZ0NIICAgICAgICAgIDB4MDAzOAorI2RlZmluZSBIQ19TSU1BX0hGb2dTdEwgICAgICAgICAweDAwMzkKKyNkZWZpbmUgSENfU0lNQV9IRm9nU3RIICAgICAgICAgMHgwMDNhCisjZGVmaW5lIEhDX1NJTUFfSEZvZ09PZE1GICAgICAgIDB4MDAzYgorI2RlZmluZSBIQ19TSU1BX0hGb2dPT2RFRiAgICAgICAweDAwM2MKKyNkZWZpbmUgSENfU0lNQV9IRm9nRW5kTCAgICAgICAgMHgwMDNkCisjZGVmaW5lIEhDX1NJTUFfSEZvZ0RlbnN0ICAgICAgIDB4MDAzZQorLyotLS0tIHN0YXJ0IG9mIHRleHR1cmUgMCBzZXR0aW5nIC0tLS0KKyAqLworI2RlZmluZSBIQ19TSU1BX0hUWDBMMEJhc0wgICAgICAweDAwNDAKKyNkZWZpbmUgSENfU0lNQV9IVFgwTDFCYXNMICAgICAgMHgwMDQxCisjZGVmaW5lIEhDX1NJTUFfSFRYMEwyQmFzTCAgICAgIDB4MDA0MgorI2RlZmluZSBIQ19TSU1BX0hUWDBMM0Jhc0wgICAgICAweDAwNDMKKyNkZWZpbmUgSENfU0lNQV9IVFgwTDRCYXNMICAgICAgMHgwMDQ0CisjZGVmaW5lIEhDX1NJTUFfSFRYMEw1QmFzTCAgICAgIDB4MDA0NQorI2RlZmluZSBIQ19TSU1BX0hUWDBMNkJhc0wgICAgICAweDAwNDYKKyNkZWZpbmUgSENfU0lNQV9IVFgwTDdCYXNMICAgICAgMHgwMDQ3CisjZGVmaW5lIEhDX1NJTUFfSFRYMEw4QmFzTCAgICAgIDB4MDA0OAorI2RlZmluZSBIQ19TSU1BX0hUWDBMOUJhc0wgICAgICAweDAwNDkKKyNkZWZpbmUgSENfU0lNQV9IVFgwTGFCYXNMICAgICAgMHgwMDRhCisjZGVmaW5lIEhDX1NJTUFfSFRYMExiQmFzTCAgICAgIDB4MDA0YgorI2RlZmluZSBIQ19TSU1BX0hUWDBMY0Jhc0wgICAgICAweDAwNGMKKyNkZWZpbmUgSENfU0lNQV9IVFgwTGRCYXNMICAgICAgMHgwMDRkCisjZGVmaW5lIEhDX1NJTUFfSFRYMExlQmFzTCAgICAgIDB4MDA0ZQorI2RlZmluZSBIQ19TSU1BX0hUWDBMZkJhc0wgICAgICAweDAwNGYKKyNkZWZpbmUgSENfU0lNQV9IVFgwTDEwQmFzTCAgICAgMHgwMDUwCisjZGVmaW5lIEhDX1NJTUFfSFRYMEwxMUJhc0wgICAgIDB4MDA1MQorI2RlZmluZSBIQ19TSU1BX0hUWDBMMDEyQmFzSCAgICAweDAwNTIKKyNkZWZpbmUgSENfU0lNQV9IVFgwTDM0NUJhc0ggICAgMHgwMDUzCisjZGVmaW5lIEhDX1NJTUFfSFRYMEw2NzhCYXNIICAgIDB4MDA1NAorI2RlZmluZSBIQ19TSU1BX0hUWDBMOWFiQmFzSCAgICAweDAwNTUKKyNkZWZpbmUgSENfU0lNQV9IVFgwTGNkZUJhc0ggICAgMHgwMDU2CisjZGVmaW5lIEhDX1NJTUFfSFRYMExmMTAxMUJhc0ggIDB4MDA1NworI2RlZmluZSBIQ19TSU1BX0hUWDBMMFBpdCAgICAgICAweDAwNTgKKyNkZWZpbmUgSENfU0lNQV9IVFgwTDFQaXQgICAgICAgMHgwMDU5CisjZGVmaW5lIEhDX1NJTUFfSFRYMEwyUGl0ICAgICAgIDB4MDA1YQorI2RlZmluZSBIQ19TSU1BX0hUWDBMM1BpdCAgICAgICAweDAwNWIKKyNkZWZpbmUgSENfU0lNQV9IVFgwTDRQaXQgICAgICAgMHgwMDVjCisjZGVmaW5lIEhDX1NJTUFfSFRYMEw1UGl0ICAgICAgIDB4MDA1ZAorI2RlZmluZSBIQ19TSU1BX0hUWDBMNlBpdCAgICAgICAweDAwNWUKKyNkZWZpbmUgSENfU0lNQV9IVFgwTDdQaXQgICAgICAgMHgwMDVmCisjZGVmaW5lIEhDX1NJTUFfSFRYMEw4UGl0ICAgICAgIDB4MDA2MAorI2RlZmluZSBIQ19TSU1BX0hUWDBMOVBpdCAgICAgICAweDAwNjEKKyNkZWZpbmUgSENfU0lNQV9IVFgwTGFQaXQgICAgICAgMHgwMDYyCisjZGVmaW5lIEhDX1NJTUFfSFRYMExiUGl0ICAgICAgIDB4MDA2MworI2RlZmluZSBIQ19TSU1BX0hUWDBMY1BpdCAgICAgICAweDAwNjQKKyNkZWZpbmUgSENfU0lNQV9IVFgwTGRQaXQgICAgICAgMHgwMDY1CisjZGVmaW5lIEhDX1NJTUFfSFRYMExlUGl0ICAgICAgIDB4MDA2NgorI2RlZmluZSBIQ19TSU1BX0hUWDBMZlBpdCAgICAgICAweDAwNjcKKyNkZWZpbmUgSENfU0lNQV9IVFgwTDEwUGl0ICAgICAgMHgwMDY4CisjZGVmaW5lIEhDX1NJTUFfSFRYMEwxMVBpdCAgICAgIDB4MDA2OQorI2RlZmluZSBIQ19TSU1BX0hUWDBMMF81V0UgICAgICAweDAwNmEKKyNkZWZpbmUgSENfU0lNQV9IVFgwTDZfYldFICAgICAgMHgwMDZiCisjZGVmaW5lIEhDX1NJTUFfSFRYMExjXzExV0UgICAgIDB4MDA2YworI2RlZmluZSBIQ19TSU1BX0hUWDBMMF81SEUgICAgICAweDAwNmQKKyNkZWZpbmUgSENfU0lNQV9IVFgwTDZfYkhFICAgICAgMHgwMDZlCisjZGVmaW5lIEhDX1NJTUFfSFRYMExjXzExSEUgICAgIDB4MDA2ZgorI2RlZmluZSBIQ19TSU1BX0hUWDBMME9TICAgICAgICAweDAwNzAKKyNkZWZpbmUgSENfU0lNQV9IVFgwVEIgICAgICAgICAgMHgwMDcxCisjZGVmaW5lIEhDX1NJTUFfSFRYME1QTUQgICAgICAgIDB4MDA3MgorI2RlZmluZSBIQ19TSU1BX0hUWDBDTE9EdSAgICAgICAweDAwNzMKKyNkZWZpbmUgSENfU0lNQV9IVFgwRk0gICAgICAgICAgMHgwMDc0CisjZGVmaW5lIEhDX1NJTUFfSFRYMFRSQ0ggICAgICAgIDB4MDA3NQorI2RlZmluZSBIQ19TSU1BX0hUWDBUUkNMICAgICAgICAweDAwNzYKKyNkZWZpbmUgSENfU0lNQV9IVFgwVEJDICAgICAgICAgMHgwMDc3CisjZGVmaW5lIEhDX1NJTUFfSFRYMFRSQUggICAgICAgIDB4MDA3OAorI2RlZmluZSBIQ19TSU1BX0hUWDBUQkxDc2F0ICAgICAweDAwNzkKKyNkZWZpbmUgSENfU0lNQV9IVFgwVEJMQ29wICAgICAgMHgwMDdhCisjZGVmaW5lIEhDX1NJTUFfSFRYMFRCTE1QZm9nICAgIDB4MDA3YgorI2RlZmluZSBIQ19TSU1BX0hUWDBUQkxBc2F0ICAgICAweDAwN2MKKyNkZWZpbmUgSENfU0lNQV9IVFgwVEJMUkNhICAgICAgMHgwMDdkCisjZGVmaW5lIEhDX1NJTUFfSFRYMFRCTFJDYiAgICAgIDB4MDA3ZQorI2RlZmluZSBIQ19TSU1BX0hUWDBUQkxSQ2MgICAgICAweDAwN2YKKyNkZWZpbmUgSENfU0lNQV9IVFgwVEJMUkNiaWFzICAgMHgwMDgwCisjZGVmaW5lIEhDX1NJTUFfSFRYMFRCTFJBYSAgICAgIDB4MDA4MQorI2RlZmluZSBIQ19TSU1BX0hUWDBUQkxSRm9nICAgICAweDAwODIKKyNkZWZpbmUgSENfU0lNQV9IVFgwQnVtcE0wMCAgICAgMHgwMDgzCisjZGVmaW5lIEhDX1NJTUFfSFRYMEJ1bXBNMDEgICAgIDB4MDA4NAorI2RlZmluZSBIQ19TSU1BX0hUWDBCdW1wTTEwICAgICAweDAwODUKKyNkZWZpbmUgSENfU0lNQV9IVFgwQnVtcE0xMSAgICAgMHgwMDg2CisjZGVmaW5lIEhDX1NJTUFfSFRYMExTY2FsZSAgICAgIDB4MDA4NworLyotLS0tIGVuZCBvZiB0ZXh0dXJlIDAgc2V0dGluZyAtLS0tICAgICAgMHgwMDhmCisgKi8KKyNkZWZpbmUgSENfU0lNQV9UWDBUWDFfT0ZGICAgICAgMHgwMDUwCisvKi0tLS0gc3RhcnQgb2YgdGV4dHVyZSAxIHNldHRpbmcgLS0tLQorICovCisjZGVmaW5lIEhDX1NJTUFfSFRYMUwwQmFzTCAgICAgIChIQ19TSU1BX0hUWDBMMEJhc0wgKyBIQ19TSU1BX1RYMFRYMV9PRkYpCisjZGVmaW5lIEhDX1NJTUFfSFRYMUwxQmFzTCAgICAgIChIQ19TSU1BX0hUWDBMMUJhc0wgKyBIQ19TSU1BX1RYMFRYMV9PRkYpCisjZGVmaW5lIEhDX1NJTUFfSFRYMUwyQmFzTCAgICAgIChIQ19TSU1BX0hUWDBMMkJhc0wgKyBIQ19TSU1BX1RYMFRYMV9PRkYpCisjZGVmaW5lIEhDX1NJTUFfSFRYMUwzQmFzTCAgICAgIChIQ19TSU1BX0hUWDBMM0Jhc0wgKyBIQ19TSU1BX1RYMFRYMV9PRkYpCisjZGVmaW5lIEhDX1NJTUFfSFRYMUw0QmFzTCAgICAgIChIQ19TSU1BX0hUWDBMNEJhc0wgKyBIQ19TSU1BX1RYMFRYMV9PRkYpCisjZGVmaW5lIEhDX1NJTUFfSFRYMUw1QmFzTCAgICAgIChIQ19TSU1BX0hUWDBMNUJhc0wgKyBIQ19TSU1BX1RYMFRYMV9PRkYpCisjZGVmaW5lIEhDX1NJTUFfSFRYMUw2QmFzTCAgICAgIChIQ19TSU1BX0hUWDBMNkJhc0wgKyBIQ19TSU1BX1RYMFRYMV9PRkYpCisjZGVmaW5lIEhDX1NJTUFfSFRYMUw3QmFzTCAgICAgIChIQ19TSU1BX0hUWDBMN0Jhc0wgKyBIQ19TSU1BX1RYMFRYMV9PRkYpCisjZGVmaW5lIEhDX1NJTUFfSFRYMUw4QmFzTCAgICAgIChIQ19TSU1BX0hUWDBMOEJhc0wgKyBIQ19TSU1BX1RYMFRYMV9PRkYpCisjZGVmaW5lIEhDX1NJTUFfSFRYMUw5QmFzTCAgICAgIChIQ19TSU1BX0hUWDBMOUJhc0wgKyBIQ19TSU1BX1RYMFRYMV9PRkYpCisjZGVmaW5lIEhDX1NJTUFfSFRYMUxhQmFzTCAgICAgIChIQ19TSU1BX0hUWDBMYUJhc0wgKyBIQ19TSU1BX1RYMFRYMV9PRkYpCisjZGVmaW5lIEhDX1NJTUFfSFRYMUxiQmFzTCAgICAgIChIQ19TSU1BX0hUWDBMYkJhc0wgKyBIQ19TSU1BX1RYMFRYMV9PRkYpCisjZGVmaW5lIEhDX1NJTUFfSFRYMUxjQmFzTCAgICAgIChIQ19TSU1BX0hUWDBMY0Jhc0wgKyBIQ19TSU1BX1RYMFRYMV9PRkYpCisjZGVmaW5lIEhDX1NJTUFfSFRYMUxkQmFzTCAgICAgIChIQ19TSU1BX0hUWDBMZEJhc0wgKyBIQ19TSU1BX1RYMFRYMV9PRkYpCisjZGVmaW5lIEhDX1NJTUFfSFRYMUxlQmFzTCAgICAgIChIQ19TSU1BX0hUWDBMZUJhc0wgKyBIQ19TSU1BX1RYMFRYMV9PRkYpCisjZGVmaW5lIEhDX1NJTUFfSFRYMUxmQmFzTCAgICAgIChIQ19TSU1BX0hUWDBMZkJhc0wgKyBIQ19TSU1BX1RYMFRYMV9PRkYpCisjZGVmaW5lIEhDX1NJTUFfSFRYMUwxMEJhc0wgICAgIChIQ19TSU1BX0hUWDBMMTBCYXNMICsgSENfU0lNQV9UWDBUWDFfT0ZGKQorI2RlZmluZSBIQ19TSU1BX0hUWDFMMTFCYXNMICAgICAoSENfU0lNQV9IVFgwTDExQmFzTCArIEhDX1NJTUFfVFgwVFgxX09GRikKKyNkZWZpbmUgSENfU0lNQV9IVFgxTDAxMkJhc0ggICAgKEhDX1NJTUFfSFRYMEwwMTJCYXNIICsgSENfU0lNQV9UWDBUWDFfT0ZGKQorI2RlZmluZSBIQ19TSU1BX0hUWDFMMzQ1QmFzSCAgICAoSENfU0lNQV9IVFgwTDM0NUJhc0ggKyBIQ19TSU1BX1RYMFRYMV9PRkYpCisjZGVmaW5lIEhDX1NJTUFfSFRYMUw2NzhCYXNIICAgIChIQ19TSU1BX0hUWDBMNjc4QmFzSCArIEhDX1NJTUFfVFgwVFgxX09GRikKKyNkZWZpbmUgSENfU0lNQV9IVFgxTDlhYkJhc0ggICAgKEhDX1NJTUFfSFRYMEw5YWJCYXNIICsgSENfU0lNQV9UWDBUWDFfT0ZGKQorI2RlZmluZSBIQ19TSU1BX0hUWDFMY2RlQmFzSCAgICAoSENfU0lNQV9IVFgwTGNkZUJhc0ggKyBIQ19TSU1BX1RYMFRYMV9PRkYpCisjZGVmaW5lIEhDX1NJTUFfSFRYMUxmMTAxMUJhc0ggIChIQ19TSU1BX0hUWDBMZjEwMTFCYXNIICsgSENfU0lNQV9UWDBUWDFfT0ZGKQorI2RlZmluZSBIQ19TSU1BX0hUWDFMMFBpdCAgICAgICAoSENfU0lNQV9IVFgwTDBQaXQgKyBIQ19TSU1BX1RYMFRYMV9PRkYpCisjZGVmaW5lIEhDX1NJTUFfSFRYMUwxUGl0ICAgICAgIChIQ19TSU1BX0hUWDBMMVBpdCArIEhDX1NJTUFfVFgwVFgxX09GRikKKyNkZWZpbmUgSENfU0lNQV9IVFgxTDJQaXQgICAgICAgKEhDX1NJTUFfSFRYMEwyUGl0ICsgSENfU0lNQV9UWDBUWDFfT0ZGKQorI2RlZmluZSBIQ19TSU1BX0hUWDFMM1BpdCAgICAgICAoSENfU0lNQV9IVFgwTDNQaXQgKyBIQ19TSU1BX1RYMFRYMV9PRkYpCisjZGVmaW5lIEhDX1NJTUFfSFRYMUw0UGl0ICAgICAgIChIQ19TSU1BX0hUWDBMNFBpdCArIEhDX1NJTUFfVFgwVFgxX09GRikKKyNkZWZpbmUgSENfU0lNQV9IVFgxTDVQaXQgICAgICAgKEhDX1NJTUFfSFRYMEw1UGl0ICsgSENfU0lNQV9UWDBUWDFfT0ZGKQorI2RlZmluZSBIQ19TSU1BX0hUWDFMNlBpdCAgICAgICAoSENfU0lNQV9IVFgwTDZQaXQgKyBIQ19TSU1BX1RYMFRYMV9PRkYpCisjZGVmaW5lIEhDX1NJTUFfSFRYMUw3UGl0ICAgICAgIChIQ19TSU1BX0hUWDBMN1BpdCArIEhDX1NJTUFfVFgwVFgxX09GRikKKyNkZWZpbmUgSENfU0lNQV9IVFgxTDhQaXQgICAgICAgKEhDX1NJTUFfSFRYMEw4UGl0ICsgSENfU0lNQV9UWDBUWDFfT0ZGKQorI2RlZmluZSBIQ19TSU1BX0hUWDFMOVBpdCAgICAgICAoSENfU0lNQV9IVFgwTDlQaXQgKyBIQ19TSU1BX1RYMFRYMV9PRkYpCisjZGVmaW5lIEhDX1NJTUFfSFRYMUxhUGl0ICAgICAgIChIQ19TSU1BX0hUWDBMYVBpdCArIEhDX1NJTUFfVFgwVFgxX09GRikKKyNkZWZpbmUgSENfU0lNQV9IVFgxTGJQaXQgICAgICAgKEhDX1NJTUFfSFRYMExiUGl0ICsgSENfU0lNQV9UWDBUWDFfT0ZGKQorI2RlZmluZSBIQ19TSU1BX0hUWDFMY1BpdCAgICAgICAoSENfU0lNQV9IVFgwTGNQaXQgKyBIQ19TSU1BX1RYMFRYMV9PRkYpCisjZGVmaW5lIEhDX1NJTUFfSFRYMUxkUGl0ICAgICAgIChIQ19TSU1BX0hUWDBMZFBpdCArIEhDX1NJTUFfVFgwVFgxX09GRikKKyNkZWZpbmUgSENfU0lNQV9IVFgxTGVQaXQgICAgICAgKEhDX1NJTUFfSFRYMExlUGl0ICsgSENfU0lNQV9UWDBUWDFfT0ZGKQorI2RlZmluZSBIQ19TSU1BX0hUWDFMZlBpdCAgICAgICAoSENfU0lNQV9IVFgwTGZQaXQgKyBIQ19TSU1BX1RYMFRYMV9PRkYpCisjZGVmaW5lIEhDX1NJTUFfSFRYMUwxMFBpdCAgICAgIChIQ19TSU1BX0hUWDBMMTBQaXQgKyBIQ19TSU1BX1RYMFRYMV9PRkYpCisjZGVmaW5lIEhDX1NJTUFfSFRYMUwxMVBpdCAgICAgIChIQ19TSU1BX0hUWDBMMTFQaXQgKyBIQ19TSU1BX1RYMFRYMV9PRkYpCisjZGVmaW5lIEhDX1NJTUFfSFRYMUwwXzVXRSAgICAgIChIQ19TSU1BX0hUWDBMMF81V0UgKyBIQ19TSU1BX1RYMFRYMV9PRkYpCisjZGVmaW5lIEhDX1NJTUFfSFRYMUw2X2JXRSAgICAgIChIQ19TSU1BX0hUWDBMNl9iV0UgKyBIQ19TSU1BX1RYMFRYMV9PRkYpCisjZGVmaW5lIEhDX1NJTUFfSFRYMUxjXzExV0UgICAgIChIQ19TSU1BX0hUWDBMY18xMVdFICsgSENfU0lNQV9UWDBUWDFfT0ZGKQorI2RlZmluZSBIQ19TSU1BX0hUWDFMMF81SEUgICAgICAoSENfU0lNQV9IVFgwTDBfNUhFICsgSENfU0lNQV9UWDBUWDFfT0ZGKQorI2RlZmluZSBIQ19TSU1BX0hUWDFMNl9iSEUgICAgICAoSENfU0lNQV9IVFgwTDZfYkhFICsgSENfU0lNQV9UWDBUWDFfT0ZGKQorI2RlZmluZSBIQ19TSU1BX0hUWDFMY18xMUhFICAgICAgKEhDX1NJTUFfSFRYMExjXzExSEUgKyBIQ19TSU1BX1RYMFRYMV9PRkYpCisjZGVmaW5lIEhDX1NJTUFfSFRYMUwwT1MgICAgICAgIChIQ19TSU1BX0hUWDBMME9TICsgSENfU0lNQV9UWDBUWDFfT0ZGKQorI2RlZmluZSBIQ19TSU1BX0hUWDFUQiAgICAgICAgICAoSENfU0lNQV9IVFgwVEIgKyBIQ19TSU1BX1RYMFRYMV9PRkYpCisjZGVmaW5lIEhDX1NJTUFfSFRYMU1QTUQgICAgICAgIChIQ19TSU1BX0hUWDBNUE1EICsgSENfU0lNQV9UWDBUWDFfT0ZGKQorI2RlZmluZSBIQ19TSU1BX0hUWDFDTE9EdSAgICAgICAoSENfU0lNQV9IVFgwQ0xPRHUgKyBIQ19TSU1BX1RYMFRYMV9PRkYpCisjZGVmaW5lIEhDX1NJTUFfSFRYMUZNICAgICAgICAgIChIQ19TSU1BX0hUWDBGTSArIEhDX1NJTUFfVFgwVFgxX09GRikKKyNkZWZpbmUgSENfU0lNQV9IVFgxVFJDSCAgICAgICAgKEhDX1NJTUFfSFRYMFRSQ0ggKyBIQ19TSU1BX1RYMFRYMV9PRkYpCisjZGVmaW5lIEhDX1NJTUFfSFRYMVRSQ0wgICAgICAgIChIQ19TSU1BX0hUWDBUUkNMICsgSENfU0lNQV9UWDBUWDFfT0ZGKQorI2RlZmluZSBIQ19TSU1BX0hUWDFUQkMgICAgICAgICAoSENfU0lNQV9IVFgwVEJDICsgSENfU0lNQV9UWDBUWDFfT0ZGKQorI2RlZmluZSBIQ19TSU1BX0hUWDFUUkFIICAgICAgICAoSENfU0lNQV9IVFgwVFJBSCArIEhDX1NJTUFfVFgwVFgxX09GRikKKyNkZWZpbmUgSENfU0lNQV9IVFgxTFRDICAgICAgICAgKEhDX1NJTUFfSFRYMExUQyArIEhDX1NJTUFfVFgwVFgxX09GRikKKyNkZWZpbmUgSENfU0lNQV9IVFgxTFRBICAgICAgICAgKEhDX1NJTUFfSFRYMExUQSArIEhDX1NJTUFfVFgwVFgxX09GRikKKyNkZWZpbmUgSENfU0lNQV9IVFgxVEJMQ3NhdCAgICAgKEhDX1NJTUFfSFRYMFRCTENzYXQgKyBIQ19TSU1BX1RYMFRYMV9PRkYpCisjZGVmaW5lIEhDX1NJTUFfSFRYMVRCTENvcCAgICAgIChIQ19TSU1BX0hUWDBUQkxDb3AgKyBIQ19TSU1BX1RYMFRYMV9PRkYpCisjZGVmaW5lIEhDX1NJTUFfSFRYMVRCTE1QZm9nICAgIChIQ19TSU1BX0hUWDBUQkxNUGZvZyArIEhDX1NJTUFfVFgwVFgxX09GRikKKyNkZWZpbmUgSENfU0lNQV9IVFgxVEJMQXNhdCAgICAgKEhDX1NJTUFfSFRYMFRCTEFzYXQgKyBIQ19TSU1BX1RYMFRYMV9PRkYpCisjZGVmaW5lIEhDX1NJTUFfSFRYMVRCTFJDYSAgICAgIChIQ19TSU1BX0hUWDBUQkxSQ2EgKyBIQ19TSU1BX1RYMFRYMV9PRkYpCisjZGVmaW5lIEhDX1NJTUFfSFRYMVRCTFJDYiAgICAgIChIQ19TSU1BX0hUWDBUQkxSQ2IgKyBIQ19TSU1BX1RYMFRYMV9PRkYpCisjZGVmaW5lIEhDX1NJTUFfSFRYMVRCTFJDYyAgICAgIChIQ19TSU1BX0hUWDBUQkxSQ2MgKyBIQ19TSU1BX1RYMFRYMV9PRkYpCisjZGVmaW5lIEhDX1NJTUFfSFRYMVRCTFJDYmlhcyAgIChIQ19TSU1BX0hUWDBUQkxSQ2JpYXMgKyBIQ19TSU1BX1RYMFRYMV9PRkYpCisjZGVmaW5lIEhDX1NJTUFfSFRYMVRCTFJBYSAgICAgIChIQ19TSU1BX0hUWDBUQkxSQWEgKyBIQ19TSU1BX1RYMFRYMV9PRkYpCisjZGVmaW5lIEhDX1NJTUFfSFRYMVRCTFJGb2cgICAgIChIQ19TSU1BX0hUWDBUQkxSRm9nICsgSENfU0lNQV9UWDBUWDFfT0ZGKQorI2RlZmluZSBIQ19TSU1BX0hUWDFCdW1wTTAwICAgICAoSENfU0lNQV9IVFgwQnVtcE0wMCArIEhDX1NJTUFfVFgwVFgxX09GRikKKyNkZWZpbmUgSENfU0lNQV9IVFgxQnVtcE0wMSAgICAgKEhDX1NJTUFfSFRYMEJ1bXBNMDEgKyBIQ19TSU1BX1RYMFRYMV9PRkYpCisjZGVmaW5lIEhDX1NJTUFfSFRYMUJ1bXBNMTAgICAgIChIQ19TSU1BX0hUWDBCdW1wTTEwICsgSENfU0lNQV9UWDBUWDFfT0ZGKQorI2RlZmluZSBIQ19TSU1BX0hUWDFCdW1wTTExICAgICAoSENfU0lNQV9IVFgwQnVtcE0xMSArIEhDX1NJTUFfVFgwVFgxX09GRikKKyNkZWZpbmUgSENfU0lNQV9IVFgxTFNjYWxlICAgICAgKEhDX1NJTUFfSFRYMExTY2FsZSArIEhDX1NJTUFfVFgwVFgxX09GRikKKy8qLS0tLSBlbmQgb2YgdGV4dHVyZSAxIHNldHRpbmcgLS0tLSAweGFmCisgKi8KKyNkZWZpbmUgSENfU0lNQV9IVFhTTUQgICAgICAgICAgMHgwMGIwCisjZGVmaW5lIEhDX1NJTUFfSGVuRklGT0FUICAgICAgIDB4MDBiMQorI2RlZmluZSBIQ19TSU1BX0hGQkRyYXdGaXJzdCAgICAweDAwYjIKKyNkZWZpbmUgSENfU0lNQV9IRkJCYXNMICAgICAgICAgMHgwMGIzCisjZGVmaW5lIEhDX1NJTUFfSFRBcmJSQ00gICAgICAgIDB4MDBiNAorI2RlZmluZSBIQ19TSU1BX0hUQXJiUlogICAgICAgICAweDAwYjUKKyNkZWZpbmUgSENfU0lNQV9IVEFyYldaICAgICAgICAgMHgwMGI2CisjZGVmaW5lIEhDX1NJTUFfSFRBcmJSVFggICAgICAgIDB4MDBiNworI2RlZmluZSBIQ19TSU1BX0hUQXJiUkNXICAgICAgICAweDAwYjgKKyNkZWZpbmUgSENfU0lNQV9IVEFyYkUyICAgICAgICAgMHgwMGI5CisjZGVmaW5lIEhDX1NJTUFfSEdFTUlUb3V0ICAgICAgIDB4MDBiYQorI2RlZmluZSBIQ19TSU1BX0hGdGhSVFhEICAgICAgICAweDAwYmIKKyNkZWZpbmUgSENfU0lNQV9IRnRoUlRYQSAgICAgICAgMHgwMGJjCisvKiBEZWZpbmUgdGhlIHRleHR1cmUgcGFsZXR0ZSAwCisgKi8KKyNkZWZpbmUgSENfU0lNQV9IVFAwICAgICAgICAgICAgMHgwMTAwCisjZGVmaW5lIEhDX1NJTUFfSFRQMSAgICAgICAgICAgIDB4MDIwMAorI2RlZmluZSBIQ19TSU1BX0ZPR1RBQkxFICAgICAgICAweDAzMDAKKyNkZWZpbmUgSENfU0lNQV9TVElQUExFICAgICAgICAgMHgwNDAwCisjZGVmaW5lIEhDX1NJTUFfSEUzRmlyZSAgICAgICAgIDB4MDQ0MAorI2RlZmluZSBIQ19TSU1BX1RSQU5TX1NFVCAgICAgICAweDA0NDEKKyNkZWZpbmUgSENfU0lNQV9IUkVuZ1N0ICAgICAgICAgMHgwNDQyCisjZGVmaW5lIEhDX1NJTUFfSFJGSUZPZW1wdHkgICAgIDB4MDQ0MworI2RlZmluZSBIQ19TSU1BX0hSRklGT2Z1bGwgICAgICAweDA0NDQKKyNkZWZpbmUgSENfU0lNQV9IUkVyciAgICAgICAgICAgMHgwNDQ1CisjZGVmaW5lIEhDX1NJTUFfRklGT3N0YXR1cyAgICAgIDB4MDQ0NgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqKiBEZWZpbmUgdGhlIEFHUCBjb21tYW5kIGhlYWRlci4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgSENfQUNNRF9NQVNLICAgICAgICAgICAgMHhmZTAwMDAwMAorI2RlZmluZSBIQ19BQ01EX1NVQl9NQVNLICAgICAgICAweDBjMDAwMDAwCisjZGVmaW5lIEhDX0FDTURfSENtZEEgICAgICAgICAgIDB4ZWUwMDAwMDAKKyNkZWZpbmUgSENfQUNNRF9IQ21kQiAgICAgICAgICAgMHhlYzAwMDAwMAorI2RlZmluZSBIQ19BQ01EX0hDbWRDICAgICAgICAgICAweGVhMDAwMDAwCisjZGVmaW5lIEhDX0FDTURfSDEgICAgICAgICAgICAgIDB4ZjAwMDAwMDAKKyNkZWZpbmUgSENfQUNNRF9IMiAgICAgICAgICAgICAgMHhmMjAwMDAwMAorI2RlZmluZSBIQ19BQ01EX0gzICAgICAgICAgICAgICAweGY0MDAwMDAwCisjZGVmaW5lIEhDX0FDTURfSDQgICAgICAgICAgICAgIDB4ZjYwMDAwMDAKKworI2RlZmluZSBIQ19BQ01EX0gxSU9fTUFTSyAgICAgICAweDAwMDAwMWZmCisjZGVmaW5lIEhDX0FDTURfSDJJTzFfTUFTSyAgICAgIDB4MDAxZmYwMDAKKyNkZWZpbmUgSENfQUNNRF9IMklPMl9NQVNLICAgICAgMHgwMDAwMDFmZgorI2RlZmluZSBIQ19BQ01EX0gySU8xX1NISUZUICAgICAxMgorI2RlZmluZSBIQ19BQ01EX0gySU8yX1NISUZUICAgICAwCisjZGVmaW5lIEhDX0FDTURfSDNJT19NQVNLICAgICAgIDB4MDAwMDAxZmYKKyNkZWZpbmUgSENfQUNNRF9IM0NPVU5UX01BU0sgICAgMHgwMWZmZjAwMAorI2RlZmluZSBIQ19BQ01EX0gzQ09VTlRfU0hJRlQgICAxMgorI2RlZmluZSBIQ19BQ01EX0g0SURfTUFTSyAgICAgICAweDAwMDAwMWZmCisjZGVmaW5lIEhDX0FDTURfSDRDT1VOVF9NQVNLICAgIDB4MDFmZmZlMDAKKyNkZWZpbmUgSENfQUNNRF9INENPVU5UX1NISUZUICAgOQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoqIERlZmluZSBIZWFkZXIKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBIQ19IRUFERVIyCQkweEYyMTBGMTEwCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiogRGVmaW5lIER1bW15IFZhbHVlCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgSENfRFVNTVkJCTB4Q0NDQ0NDQ0MKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiogRGVmaW5lIGZvciBETUEgdXNlCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgSEFMQ1lPTl9IRUFERVIyICAgICAwWEYyMTBGMTEwCisjZGVmaW5lIEhBTENZT05fRklSRUNNRCAgICAgMFhFRTEwMDAwMAorI2RlZmluZSBIQUxDWU9OX0ZJUkVNQVNLICAgIDBYRkZGMDAwMDAKKyNkZWZpbmUgSEFMQ1lPTl9DTURCICAgICAgICAwWEVDMDAwMDAwCisjZGVmaW5lIEhBTENZT05fQ01EQk1BU0sgICAgMFhGRkZFMDAwMAorI2RlZmluZSBIQUxDWU9OX1NVQl9BRERSMCAgIDBYMDAwMDAwMDAKKyNkZWZpbmUgSEFMQ1lPTl9IRUFERVIxTUFTSyAwWEZGRkZGQzAwCisjZGVmaW5lIEhBTENZT05fSEVBREVSMSAgICAgMFhGMDAwMDAwMAorI2RlZmluZSBIQ19TdWJBX0hBR1BCc3RMICAgICAgICAweDAwNjAKKyNkZWZpbmUgSENfU3ViQV9IQUdQQmVuZEwgICAgICAgMHgwMDYxCisjZGVmaW5lIEhDX1N1YkFfSEFHUENNTlQgICAgICAgIDB4MDA2MgorI2RlZmluZSBIQ19TdWJBX0hBR1BCcEwgICAgICAgICAweDAwNjMKKyNkZWZpbmUgSENfU3ViQV9IQUdQQnBIICAgICAgICAgMHgwMDY0CisjZGVmaW5lIEhDX0hBR1BDTU5UX01BU0sgICAgICAgIDB4MDA4MDAwMDAKKyNkZWZpbmUgSENfSENtZEVyckNscl9NQVNLICAgICAgMHgwMDQwMDAwMAorI2RlZmluZSBIQ19IQUdQQmVuZEhfTUFTSyAgICAgICAweDAwMDBmZjAwCisjZGVmaW5lIEhDX0hBR1BCc3RIX01BU0sgICAgICAgIDB4MDAwMDAwZmYKKyNkZWZpbmUgSENfSEFHUEJlbmRIX1NISUZUICAgICAgOAorI2RlZmluZSBIQ19IQUdQQnN0SF9TSElGVCAgICAgICAwCisjZGVmaW5lIEhDX0hBR1BCcExfTUFTSyAgICAgICAgIDB4MDBmZmZmZmMKKyNkZWZpbmUgSENfSEFHUEJwSURfTUFTSyAgICAgICAgMHgwMDAwMDAwMworI2RlZmluZSBIQ19IQUdQQnBJRF9QQVVTRSAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIEhDX0hBR1BCcElEX0pVTVAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgSENfSEFHUEJwSURfU1RPUCAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBIQ19IQUdQQnBIX01BU0sgICAgICAgICAweDAwZmZmZmZmCisKKworI2RlZmluZSBWSUFfVklERU9fSEVBREVSNSAgICAgICAweEZFMDQwMDAwCisjZGVmaW5lIFZJQV9WSURFT19IRUFERVI2ICAgICAgIDB4RkUwNTAwMDAKKyNkZWZpbmUgVklBX1ZJREVPX0hFQURFUjcgICAgICAgMHhGRTA2MDAwMAorI2RlZmluZSBWSUFfVklERU9NQVNLICAgICAgICAgICAweEZGRkYwMDAwCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vdmlhX2RtYS5jIGIvZHJpdmVycy9jaGFyL2RybS92aWFfZG1hLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODJmODM5NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vdmlhX2RtYS5jCkBAIC0wLDAgKzEsNzQxIEBACisvKiB2aWFfZG1hLmMgLS0gRE1BIHN1cHBvcnQgZm9yIHRoZSBWSUEgVW5pY2hyb21lL1BybworICogCisgKiBDb3B5cmlnaHQgMjAwMyBUdW5nc3RlbiBHcmFwaGljcywgSW5jLiwgQ2VkYXIgUGFyaywgVGV4YXMuCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIENvcHlyaWdodCAyMDA0IERpZ2VvLCBJbmMuLCBQYWxvIEFsdG8sIENBLCBVLlMuQS4KKyAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiAKKyAqIENvcHlyaWdodCAyMDA0IFRoZSBVbmljaHJvbWUgcHJvamVjdC4KKyAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3ViIGxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUKKyAqIG5leHQgcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zCisgKiBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTi1JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUlMsIEFVVEhPUlMgQU5EL09SIElUUyBTVVBQTElFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIAorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIAorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSAKKyAqIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0aG9yczogCisgKiAgICBUdW5nc3RlbiBHcmFwaGljcywgCisgKiAgICBFcmRpIENoZW4sIAorICogICAgVGhvbWFzIEhlbGxzdHJvbS4KKyAqLworCisjaW5jbHVkZSAiZHJtUC5oIgorI2luY2x1ZGUgImRybS5oIgorI2luY2x1ZGUgInZpYV9kcm0uaCIKKyNpbmNsdWRlICJ2aWFfZHJ2LmgiCisjaW5jbHVkZSAidmlhXzNkX3JlZy5oIgorCisjZGVmaW5lIENNREJVRl9BTElHTk1FTlRfU0laRSAgICgweDEwMCkKKyNkZWZpbmUgQ01EQlVGX0FMSUdOTUVOVF9NQVNLICAgKDB4MGZmKQorCisvKiBkZWZpbmVzIGZvciBWSUEgM0QgcmVnaXN0ZXJzICovCisjZGVmaW5lIFZJQV9SRUdfU1RBVFVTICAgICAgICAgIDB4NDAwCisjZGVmaW5lIFZJQV9SRUdfVFJBTlNFVCAgICAgICAgIDB4NDNDCisjZGVmaW5lIFZJQV9SRUdfVFJBTlNQQUNFICAgICAgIDB4NDQwCisKKy8qIFZJQV9SRUdfU1RBVFVTKDB4NDAwKTogRW5naW5lIFN0YXR1cyAqLworI2RlZmluZSBWSUFfQ01EX1JHVFJfQlVTWSAgICAgICAweDAwMDAwMDgwCS8qIENvbW1hbmQgUmVndWxhdG9yIGlzIGJ1c3kgKi8KKyNkZWZpbmUgVklBXzJEX0VOR19CVVNZICAgICAgICAgMHgwMDAwMDAwMQkvKiAyRCBFbmdpbmUgaXMgYnVzeSAqLworI2RlZmluZSBWSUFfM0RfRU5HX0JVU1kgICAgICAgICAweDAwMDAwMDAyCS8qIDNEIEVuZ2luZSBpcyBidXN5ICovCisjZGVmaW5lIFZJQV9WUl9RVUVVRV9CVVNZICAgICAgIDB4MDAwMjAwMDAJLyogVmlydHVhbCBRdWV1ZSBpcyBidXN5ICovCisKKyNkZWZpbmUgU2V0UmVnMkRBR1AoblJlZywgbkRhdGEpIHsJCQkJXAorCSooKHVpbnQzMl90ICopKHZiKSkgPSAoKG5SZWcpID4+IDIpIHwgSEFMQ1lPTl9IRUFERVIxOwlcCisJKigodWludDMyX3QgKikodmIpICsgMSkgPSAobkRhdGEpOwkJCVwKKwl2YiA9ICgodWludDMyX3QgKil2YikgKyAyOwkJCQlcCisJZGV2X3ByaXYtPmRtYV9sb3cgKz04OwkJCQkJXAorfQorCisjZGVmaW5lIHZpYV9mbHVzaF93cml0ZV9jb21iaW5lKCkgRFJNX01FTU9SWUJBUlJJRVIoKSAKKworI2RlZmluZSBWSUFfT1VUX1JJTkdfUVcodzEsdzIpCQkJXAorCSp2YisrID0gKHcxKTsJCQkJXAorCSp2YisrID0gKHcyKTsJCQkJXAorCWRldl9wcml2LT5kbWFfbG93ICs9IDg7IAorCitzdGF0aWMgdm9pZCB2aWFfY21kYnVmX3N0YXJ0KGRybV92aWFfcHJpdmF0ZV90ICogZGV2X3ByaXYpOworc3RhdGljIHZvaWQgdmlhX2NtZGJ1Zl9wYXVzZShkcm1fdmlhX3ByaXZhdGVfdCAqIGRldl9wcml2KTsKK3N0YXRpYyB2b2lkIHZpYV9jbWRidWZfcmVzZXQoZHJtX3ZpYV9wcml2YXRlX3QgKiBkZXZfcHJpdik7CitzdGF0aWMgdm9pZCB2aWFfY21kYnVmX3Jld2luZChkcm1fdmlhX3ByaXZhdGVfdCAqIGRldl9wcml2KTsKK3N0YXRpYyBpbnQgdmlhX3dhaXRfaWRsZShkcm1fdmlhX3ByaXZhdGVfdCAqIGRldl9wcml2KTsKK3N0YXRpYyB2b2lkIHZpYV9wYWRfY2FjaGUoZHJtX3ZpYV9wcml2YXRlX3QgKmRldl9wcml2LCBpbnQgcXdvcmRzKTsKKworCisvKgorICogRnJlZSBzcGFjZSBpbiBjb21tYW5kIGJ1ZmZlci4KKyAqLworCitzdGF0aWMgdWludDMyX3QKK3ZpYV9jbWRidWZfc3BhY2UoZHJtX3ZpYV9wcml2YXRlX3QgKmRldl9wcml2KQoreworCXVpbnQzMl90IGFncF9iYXNlID0gZGV2X3ByaXYtPmRtYV9vZmZzZXQgKyAKKwkJKHVpbnQzMl90KSBkZXZfcHJpdi0+YWdwQWRkcjsKKwl1aW50MzJfdCBod19hZGRyID0gKihkZXZfcHJpdi0+aHdfYWRkcl9wdHIpIC0gYWdwX2Jhc2U7CisJCisJcmV0dXJuICgoaHdfYWRkciA8PSBkZXZfcHJpdi0+ZG1hX2xvdykgPyAKKwkJKGRldl9wcml2LT5kbWFfaGlnaCArIGh3X2FkZHIgLSBkZXZfcHJpdi0+ZG1hX2xvdykgOiAKKwkJKGh3X2FkZHIgLSBkZXZfcHJpdi0+ZG1hX2xvdykpOworfQorCisvKgorICogSG93IG11Y2ggZG9lcyB0aGUgY29tbWFuZCByZWd1bGF0b3IgbGFnIGJlaGluZD8KKyAqLworCitzdGF0aWMgdWludDMyX3QKK3ZpYV9jbWRidWZfbGFnKGRybV92aWFfcHJpdmF0ZV90ICpkZXZfcHJpdikKK3sKKwl1aW50MzJfdCBhZ3BfYmFzZSA9IGRldl9wcml2LT5kbWFfb2Zmc2V0ICsgCisJCSh1aW50MzJfdCkgZGV2X3ByaXYtPmFncEFkZHI7CisJdWludDMyX3QgaHdfYWRkciA9ICooZGV2X3ByaXYtPmh3X2FkZHJfcHRyKSAtIGFncF9iYXNlOworCQorCXJldHVybiAoKGh3X2FkZHIgPD0gZGV2X3ByaXYtPmRtYV9sb3cpID8gCisJCShkZXZfcHJpdi0+ZG1hX2xvdyAtIGh3X2FkZHIpIDogCisJCShkZXZfcHJpdi0+ZG1hX3dyYXAgKyBkZXZfcHJpdi0+ZG1hX2xvdyAtIGh3X2FkZHIpKTsKK30KKworLyoKKyAqIENoZWNrIHRoYXQgdGhlIGdpdmVuIHNpemUgZml0cyBpbiB0aGUgYnVmZmVyLCBvdGhlcndpc2Ugd2FpdC4KKyAqLworCitzdGF0aWMgaW5saW5lIGludAordmlhX2NtZGJ1Zl93YWl0KGRybV92aWFfcHJpdmF0ZV90ICogZGV2X3ByaXYsIHVuc2lnbmVkIGludCBzaXplKQoreworCXVpbnQzMl90IGFncF9iYXNlID0gZGV2X3ByaXYtPmRtYV9vZmZzZXQgKyAodWludDMyX3QpIGRldl9wcml2LT5hZ3BBZGRyOworCXVpbnQzMl90IGN1cl9hZGRyLCBod19hZGRyLCBuZXh0X2FkZHI7CisJdm9sYXRpbGUgdWludDMyX3QgKmh3X2FkZHJfcHRyOworCXVpbnQzMl90IGNvdW50OworCWh3X2FkZHJfcHRyID0gZGV2X3ByaXYtPmh3X2FkZHJfcHRyOworCWN1cl9hZGRyID0gZGV2X3ByaXYtPmRtYV9sb3c7CisJbmV4dF9hZGRyID0gY3VyX2FkZHIgKyBzaXplICsgNTEyKjEwMjQ7CisJY291bnQgPSAxMDAwMDAwOworCWRvIHsKKwkgICAgICAgIGh3X2FkZHIgPSAqaHdfYWRkcl9wdHIgLSBhZ3BfYmFzZTsKKwkJaWYgKGNvdW50LS0gPT0gMCkgeworCQkJRFJNX0VSUk9SKCJ2aWFfY21kYnVmX3dhaXQgdGltZWQgb3V0IGh3ICV4IGN1cl9hZGRyICV4IG5leHRfYWRkciAleFxuIiwKKwkJCQkgIGh3X2FkZHIsIGN1cl9hZGRyLCBuZXh0X2FkZHIpOworCQkJcmV0dXJuIC0xOworCQl9CisJfSB3aGlsZSAoKGN1cl9hZGRyIDwgaHdfYWRkcikgJiYgKG5leHRfYWRkciA+PSBod19hZGRyKSk7CisJcmV0dXJuIDA7Cit9CisKKworLyoKKyAqIENoZWNrcyB3aGV0aGVyIGJ1ZmZlciBoZWFkIGhhcyByZWFjaCB0aGUgZW5kLiBSZXdpbmQgdGhlIHJpbmcgYnVmZmVyCisgKiB3aGVuIG5lY2Vzc2FyeS4KKyAqCisgKiBSZXR1cm5zIHZpcnR1YWwgcG9pbnRlciB0byByaW5nIGJ1ZmZlci4KKyAqLworCitzdGF0aWMgaW5saW5lIHVpbnQzMl90ICp2aWFfY2hlY2tfZG1hKGRybV92aWFfcHJpdmF0ZV90ICogZGV2X3ByaXYsCisJCQkJICAgICAgdW5zaWduZWQgaW50IHNpemUpCit7CisJaWYgKChkZXZfcHJpdi0+ZG1hX2xvdyArIHNpemUgKyA0KkNNREJVRl9BTElHTk1FTlRfU0laRSkgPiBkZXZfcHJpdi0+ZG1hX2hpZ2gpIHsKKwkJdmlhX2NtZGJ1Zl9yZXdpbmQoZGV2X3ByaXYpOworCX0KKwlpZiAodmlhX2NtZGJ1Zl93YWl0KGRldl9wcml2LCBzaXplKSAhPSAwKSB7CisJCXJldHVybiBOVUxMOworCX0KKworCXJldHVybiAodWludDMyX3QgKikgKGRldl9wcml2LT5kbWFfcHRyICsgZGV2X3ByaXYtPmRtYV9sb3cpOworfQorCitpbnQgdmlhX2RtYV9jbGVhbnVwKGRybV9kZXZpY2VfdCAqIGRldikKK3sKKwlpZiAoZGV2LT5kZXZfcHJpdmF0ZSkgeworCQlkcm1fdmlhX3ByaXZhdGVfdCAqZGV2X3ByaXYgPQorCQkJKGRybV92aWFfcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7CisKKwkJaWYgKGRldl9wcml2LT5yaW5nLnZpcnR1YWxfc3RhcnQpIHsKKwkJCXZpYV9jbWRidWZfcmVzZXQoZGV2X3ByaXYpOworCisJCQlkcm1fY29yZV9pb3JlbWFwZnJlZSgmZGV2X3ByaXYtPnJpbmcubWFwLCBkZXYpOworCQkJZGV2X3ByaXYtPnJpbmcudmlydHVhbF9zdGFydCA9IE5VTEw7CisJCX0KKworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpYV9pbml0aWFsaXplKGRybV9kZXZpY2VfdCAqIGRldiwKKwkJCSAgZHJtX3ZpYV9wcml2YXRlX3QgKiBkZXZfcHJpdiwKKwkJCSAgZHJtX3ZpYV9kbWFfaW5pdF90ICogaW5pdCkKK3sKKwlpZiAoIWRldl9wcml2IHx8ICFkZXZfcHJpdi0+bW1pbykgeworCQlEUk1fRVJST1IoInZpYV9kbWFfaW5pdCBjYWxsZWQgYmVmb3JlIHZpYV9tYXBfaW5pdFxuIik7CisJCXJldHVybiBEUk1fRVJSKEVGQVVMVCk7CisJfQorCisJaWYgKGRldl9wcml2LT5yaW5nLnZpcnR1YWxfc3RhcnQgIT0gTlVMTCkgeworCQlEUk1fRVJST1IoIiVzIGNhbGxlZCBhZ2FpbiB3aXRob3V0IGNhbGxpbmcgY2xlYW51cFxuIiwKKwkJCSAgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIERSTV9FUlIoRUZBVUxUKTsKKwl9CisKKwlpZiAoIWRldi0+YWdwIHx8ICFkZXYtPmFncC0+YmFzZSkgeworCQlEUk1fRVJST1IoIiVzIGNhbGxlZCB3aXRoIG5vIGFncCBtZW1vcnkgYXZhaWxhYmxlXG4iLCAKKwkJCSAgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIERSTV9FUlIoRUZBVUxUKTsKKwl9CisKKwlkZXZfcHJpdi0+cmluZy5tYXAub2Zmc2V0ID0gZGV2LT5hZ3AtPmJhc2UgKyBpbml0LT5vZmZzZXQ7CisJZGV2X3ByaXYtPnJpbmcubWFwLnNpemUgPSBpbml0LT5zaXplOworCWRldl9wcml2LT5yaW5nLm1hcC50eXBlID0gMDsKKwlkZXZfcHJpdi0+cmluZy5tYXAuZmxhZ3MgPSAwOworCWRldl9wcml2LT5yaW5nLm1hcC5tdHJyID0gMDsKKworCWRybV9jb3JlX2lvcmVtYXAoJmRldl9wcml2LT5yaW5nLm1hcCwgZGV2KTsKKworCWlmIChkZXZfcHJpdi0+cmluZy5tYXAuaGFuZGxlID09IE5VTEwpIHsKKwkJdmlhX2RtYV9jbGVhbnVwKGRldik7CisJCURSTV9FUlJPUigiY2FuIG5vdCBpb3JlbWFwIHZpcnR1YWwgYWRkcmVzcyBmb3IiCisJCQkgICIgcmluZyBidWZmZXJcbiIpOworCQlyZXR1cm4gRFJNX0VSUihFTk9NRU0pOworCX0KKworCWRldl9wcml2LT5yaW5nLnZpcnR1YWxfc3RhcnQgPSBkZXZfcHJpdi0+cmluZy5tYXAuaGFuZGxlOworCisJZGV2X3ByaXYtPmRtYV9wdHIgPSBkZXZfcHJpdi0+cmluZy52aXJ0dWFsX3N0YXJ0OworCWRldl9wcml2LT5kbWFfbG93ID0gMDsKKwlkZXZfcHJpdi0+ZG1hX2hpZ2ggPSBpbml0LT5zaXplOworCWRldl9wcml2LT5kbWFfd3JhcCA9IGluaXQtPnNpemU7CisJZGV2X3ByaXYtPmRtYV9vZmZzZXQgPSBpbml0LT5vZmZzZXQ7CisJZGV2X3ByaXYtPmxhc3RfcGF1c2VfcHRyID0gTlVMTDsKKwlkZXZfcHJpdi0+aHdfYWRkcl9wdHIgPSBkZXZfcHJpdi0+bW1pby0+aGFuZGxlICsgaW5pdC0+cmVnX3BhdXNlX2FkZHI7CisKKwl2aWFfY21kYnVmX3N0YXJ0KGRldl9wcml2KTsKKworCXJldHVybiAwOworfQorCitpbnQgdmlhX2RtYV9pbml0KERSTV9JT0NUTF9BUkdTKQoreworCURSTV9ERVZJQ0U7CisJZHJtX3ZpYV9wcml2YXRlX3QgKmRldl9wcml2ID0gKGRybV92aWFfcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7CisJZHJtX3ZpYV9kbWFfaW5pdF90IGluaXQ7CisJaW50IHJldGNvZGUgPSAwOworCisJRFJNX0NPUFlfRlJPTV9VU0VSX0lPQ1RMKGluaXQsIChkcm1fdmlhX2RtYV9pbml0X3QgKikgZGF0YSwKKwkJCQkgc2l6ZW9mKGluaXQpKTsKKworCXN3aXRjaCAoaW5pdC5mdW5jKSB7CisJY2FzZSBWSUFfSU5JVF9ETUE6CisJCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKKwkJCXJldGNvZGUgPSBEUk1fRVJSKEVQRVJNKTsKKwkJZWxzZQorCQkJcmV0Y29kZSA9IHZpYV9pbml0aWFsaXplKGRldiwgZGV2X3ByaXYsICZpbml0KTsKKwkJYnJlYWs7CisJY2FzZSBWSUFfQ0xFQU5VUF9ETUE6CisJCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKKwkJCXJldGNvZGUgPSBEUk1fRVJSKEVQRVJNKTsKKwkJZWxzZQorCQkJcmV0Y29kZSA9IHZpYV9kbWFfY2xlYW51cChkZXYpOworCQlicmVhazsKKyAgICAgICAgY2FzZSBWSUFfRE1BX0lOSVRJQUxJWkVEOgorCQlyZXRjb2RlID0gKGRldl9wcml2LT5yaW5nLnZpcnR1YWxfc3RhcnQgIT0gTlVMTCkgPyAKKwkJCTA6IERSTV9FUlIoIEVGQVVMVCApOworCSAgICAgICAgYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0Y29kZSA9IERSTV9FUlIoRUlOVkFMKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHJldGNvZGU7Cit9CisKKworCitzdGF0aWMgaW50IHZpYV9kaXNwYXRjaF9jbWRidWZmZXIoZHJtX2RldmljZV90ICogZGV2LCBkcm1fdmlhX2NtZGJ1ZmZlcl90ICogY21kKQoreworCWRybV92aWFfcHJpdmF0ZV90ICpkZXZfcHJpdjsKKwl1aW50MzJfdCAqdmI7CisJaW50IHJldDsKKworCWRldl9wcml2ID0gKGRybV92aWFfcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7CisKKwlpZiAoZGV2X3ByaXYtPnJpbmcudmlydHVhbF9zdGFydCA9PSBOVUxMKSB7CisJCURSTV9FUlJPUigiJXMgY2FsbGVkIHdpdGhvdXQgaW5pdGlhbGl6aW5nIEFHUCByaW5nIGJ1ZmZlci5cbiIsCisJCQkgIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiBEUk1fRVJSKEVGQVVMVCk7CisJfQorCisJaWYgKGNtZC0+c2l6ZSA+IFZJQV9QQ0lfQlVGX1NJWkUpIHsKKwkJcmV0dXJuIERSTV9FUlIoRU5PTUVNKTsKKwl9IAorCisKKwlpZiAoRFJNX0NPUFlfRlJPTV9VU0VSKGRldl9wcml2LT5wY2lfYnVmLCBjbWQtPmJ1ZiwgY21kLT5zaXplKSkKKwkJcmV0dXJuIERSTV9FUlIoRUZBVUxUKTsKKworCS8qCisJICogUnVubmluZyB0aGlzIGZ1bmN0aW9uIG9uIEFHUCBtZW1vcnkgaXMgZGVhZCBzbG93LiBUaGVyZWZvcmUKKwkgKiB3ZSBydW4gaXQgb24gYSB0ZW1wb3JhcnkgY2FjaGVhYmxlIHN5c3RlbSBtZW1vcnkgYnVmZmVyIGFuZAorCSAqIGNvcHkgaXQgdG8gQUdQIG1lbW9yeSB3aGVuIHJlYWR5LgorCSAqLworCisJCQorCWlmICgocmV0ID0gdmlhX3ZlcmlmeV9jb21tYW5kX3N0cmVhbSgodWludDMyX3QgKilkZXZfcHJpdi0+cGNpX2J1ZiwgY21kLT5zaXplLCBkZXYsIDEpKSkgeworCQlyZXR1cm4gcmV0OworCX0KKyAgICAgICAJCisJCisJdmIgPSB2aWFfY2hlY2tfZG1hKGRldl9wcml2LCAoY21kLT5zaXplIDwgMHgxMDApID8gMHgxMDIgOiBjbWQtPnNpemUpOworCWlmICh2YiA9PSBOVUxMKSB7CisJCXJldHVybiBEUk1fRVJSKEVBR0FJTik7CisJfQorCisJbWVtY3B5KHZiLCBkZXZfcHJpdi0+cGNpX2J1ZiwgY21kLT5zaXplKTsKKwkKKwlkZXZfcHJpdi0+ZG1hX2xvdyArPSBjbWQtPnNpemU7CisKKwkvKgorCSAqIFNtYWxsIHN1Ym1pc3Npb25zIHNvbWVob3cgc3RhbGxzIHRoZSBDUFUuIChBR1AgY2FjaGUgZWZmZWN0cz8pCisJICogcGFkIHRvIGdyZWF0ZXIgc2l6ZS4KKwkgKi8KKworCWlmIChjbWQtPnNpemUgPCAweDEwMCkKKwkgIHZpYV9wYWRfY2FjaGUoZGV2X3ByaXYsKDB4MTAwIC0gY21kLT5zaXplKSA+PiAzKTsKKwl2aWFfY21kYnVmX3BhdXNlKGRldl9wcml2KTsKKworCXJldHVybiAwOworfQorCitpbnQgdmlhX2RyaXZlcl9kbWFfcXVpZXNjZW50KGRybV9kZXZpY2VfdCAqIGRldikKK3sKKwlkcm1fdmlhX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCisJaWYgKCF2aWFfd2FpdF9pZGxlKGRldl9wcml2KSkgeworCQlyZXR1cm4gRFJNX0VSUihFQlVTWSk7CisJfQorCXJldHVybiAwOworfQorCitpbnQgdmlhX2ZsdXNoX2lvY3RsKERSTV9JT0NUTF9BUkdTKQoreworCURSTV9ERVZJQ0U7CisKKwlMT0NLX1RFU1RfV0lUSF9SRVRVUk4oIGRldiwgZmlscCApOworCisJcmV0dXJuIHZpYV9kcml2ZXJfZG1hX3F1aWVzY2VudChkZXYpOworfQorCitpbnQgdmlhX2NtZGJ1ZmZlcihEUk1fSU9DVExfQVJHUykKK3sKKwlEUk1fREVWSUNFOworCWRybV92aWFfY21kYnVmZmVyX3QgY21kYnVmOworCWludCByZXQ7CisKKwlMT0NLX1RFU1RfV0lUSF9SRVRVUk4oIGRldiwgZmlscCApOworCisJRFJNX0NPUFlfRlJPTV9VU0VSX0lPQ1RMKGNtZGJ1ZiwgKGRybV92aWFfY21kYnVmZmVyX3QgKikgZGF0YSwKKwkJCQkgc2l6ZW9mKGNtZGJ1ZikpOworCisJRFJNX0RFQlVHKCJ2aWEgY21kYnVmZmVyLCBidWYgJXAgc2l6ZSAlbHVcbiIsIGNtZGJ1Zi5idWYsIGNtZGJ1Zi5zaXplKTsKKworCXJldCA9IHZpYV9kaXNwYXRjaF9jbWRidWZmZXIoZGV2LCAmY21kYnVmKTsKKwlpZiAocmV0KSB7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2V4dGVybiBpbnQgCit2aWFfcGFyc2VfY29tbWFuZF9zdHJlYW0oZHJtX2RldmljZV90ICpkZXYsIGNvbnN0IHVpbnQzMl90ICogYnVmLCB1bnNpZ25lZCBpbnQgc2l6ZSk7CitzdGF0aWMgaW50IHZpYV9kaXNwYXRjaF9wY2lfY21kYnVmZmVyKGRybV9kZXZpY2VfdCAqIGRldiwKKwkJCQkgICAgICBkcm1fdmlhX2NtZGJ1ZmZlcl90ICogY21kKQoreworCWRybV92aWFfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJaW50IHJldDsKKworCWlmIChjbWQtPnNpemUgPiBWSUFfUENJX0JVRl9TSVpFKSB7CisJCXJldHVybiBEUk1fRVJSKEVOT01FTSk7CisJfSAKKwlpZiAoRFJNX0NPUFlfRlJPTV9VU0VSKGRldl9wcml2LT5wY2lfYnVmLCBjbWQtPmJ1ZiwgY21kLT5zaXplKSkKKwkJcmV0dXJuIERSTV9FUlIoRUZBVUxUKTsKKwkKKwlpZiAoKHJldCA9IHZpYV92ZXJpZnlfY29tbWFuZF9zdHJlYW0oKHVpbnQzMl90ICopZGV2X3ByaXYtPnBjaV9idWYsIGNtZC0+c2l6ZSwgZGV2LCAwKSkpIHsKKwkJcmV0dXJuIHJldDsKKwl9CisJCisJcmV0ID0gdmlhX3BhcnNlX2NvbW1hbmRfc3RyZWFtKGRldiwgKGNvbnN0IHVpbnQzMl90ICopZGV2X3ByaXYtPnBjaV9idWYsIGNtZC0+c2l6ZSk7CisJcmV0dXJuIHJldDsKK30KKworaW50IHZpYV9wY2lfY21kYnVmZmVyKERSTV9JT0NUTF9BUkdTKQoreworCURSTV9ERVZJQ0U7CisJZHJtX3ZpYV9jbWRidWZmZXJfdCBjbWRidWY7CisJaW50IHJldDsKKworCUxPQ0tfVEVTVF9XSVRIX1JFVFVSTiggZGV2LCBmaWxwICk7CisKKwlEUk1fQ09QWV9GUk9NX1VTRVJfSU9DVEwoY21kYnVmLCAoZHJtX3ZpYV9jbWRidWZmZXJfdCAqKSBkYXRhLAorCQkJCSBzaXplb2YoY21kYnVmKSk7CisKKwlEUk1fREVCVUcoInZpYV9wY2lfY21kYnVmZmVyLCBidWYgJXAgc2l6ZSAlbHVcbiIsIGNtZGJ1Zi5idWYsCisJCSAgY21kYnVmLnNpemUpOworCisJcmV0ID0gdmlhX2Rpc3BhdGNoX3BjaV9jbWRidWZmZXIoZGV2LCAmY21kYnVmKTsKKwlpZiAocmV0KSB7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGlubGluZSB1aW50MzJfdCAqdmlhX2FsaWduX2J1ZmZlcihkcm1fdmlhX3ByaXZhdGVfdCAqIGRldl9wcml2LAorCQkJCQkgdWludDMyX3QgKiB2YiwgaW50IHF3X2NvdW50KQoreworICAgICAgICBmb3IgKDsgcXdfY291bnQgPiAwOyAtLXF3X2NvdW50KSB7CisJCVZJQV9PVVRfUklOR19RVyhIQ19EVU1NWSwgSENfRFVNTVkpOworCX0KKwlyZXR1cm4gdmI7Cit9CisKKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBpbnRlcm5hbGx5IGJ5IHJpbmcgYnVmZmVyIG1hbmdlbWVudCBjb2RlLgorICoKKyAqIFJldHVybnMgdmlydHVhbCBwb2ludGVyIHRvIHJpbmcgYnVmZmVyLgorICovCitzdGF0aWMgaW5saW5lIHVpbnQzMl90ICp2aWFfZ2V0X2RtYShkcm1fdmlhX3ByaXZhdGVfdCAqIGRldl9wcml2KQoreworCXJldHVybiAodWludDMyX3QgKikgKGRldl9wcml2LT5kbWFfcHRyICsgZGV2X3ByaXYtPmRtYV9sb3cpOworfQorCisvKgorICogSG9va3MgYSBzZWdtZW50IG9mIGRhdGEgaW50byB0aGUgdGFpbCBvZiB0aGUgcmluZy1idWZmZXIgYnkKKyAqIG1vZGlmeWluZyB0aGUgcGF1c2UgYWRkcmVzcyBzdG9yZWQgaW4gdGhlIGJ1ZmZlciBpdHNlbGYuIElmCisgKiB0aGUgcmVndWxhdG9yIGhhcyBhbHJlYWR5IHBhdXNlZCwgcmVzdGFydCBpdC4KKyAqLworc3RhdGljIGludCB2aWFfaG9va19zZWdtZW50KGRybV92aWFfcHJpdmF0ZV90ICpkZXZfcHJpdiwKKwkJCSAgICB1aW50MzJfdCBwYXVzZV9hZGRyX2hpLCB1aW50MzJfdCBwYXVzZV9hZGRyX2xvLAorCQkJICAgIGludCBub19wY2lfZmlyZSkKK3sKKwlpbnQgcGF1c2VkLCBjb3VudDsKKwl2b2xhdGlsZSB1aW50MzJfdCAqcGF1c2VkX2F0ID0gZGV2X3ByaXYtPmxhc3RfcGF1c2VfcHRyOworCisJdmlhX2ZsdXNoX3dyaXRlX2NvbWJpbmUoKTsKKwl3aGlsZSghICoodmlhX2dldF9kbWEoZGV2X3ByaXYpLTEpKTsKKwkqZGV2X3ByaXYtPmxhc3RfcGF1c2VfcHRyID0gcGF1c2VfYWRkcl9sbzsKKwl2aWFfZmx1c2hfd3JpdGVfY29tYmluZSgpOworCisJLyoKKwkgKiBUaGUgYmVsb3cgc3RhdGVtZW50IGlzIGluc2VydGVkIHRvIHJlYWxseSBmb3JjZSB0aGUgZmx1c2guCisJICogTm90IHN1cmUgaXQgaXMgbmVlZGVkLgorCSAqLworCisJd2hpbGUoISAqZGV2X3ByaXYtPmxhc3RfcGF1c2VfcHRyKTsKKwlkZXZfcHJpdi0+bGFzdF9wYXVzZV9wdHIgPSB2aWFfZ2V0X2RtYShkZXZfcHJpdikgLSAxOworCXdoaWxlKCEgKmRldl9wcml2LT5sYXN0X3BhdXNlX3B0cik7CisKKworCXBhdXNlZCA9IDA7CisJY291bnQgPSAyMDsgCisKKwl3aGlsZSAoIShwYXVzZWQgPSAoVklBX1JFQUQoMHg0MWMpICYgMHg4MDAwMDAwMCkpICYmIGNvdW50LS0pOworCWlmICgoY291bnQgPD0gOCkgJiYgKGNvdW50ID49IDApKSB7CisJCXVpbnQzMl90IHJndHIsIHB0cjsKKwkJcmd0ciA9ICooZGV2X3ByaXYtPmh3X2FkZHJfcHRyKTsKKwkJcHRyID0gKChjaGFyICopZGV2X3ByaXYtPmxhc3RfcGF1c2VfcHRyIC0gZGV2X3ByaXYtPmRtYV9wdHIpICsgCisJCQlkZXZfcHJpdi0+ZG1hX29mZnNldCArICh1aW50MzJfdCkgZGV2X3ByaXYtPmFncEFkZHIgKyA0IC0gCisJCQlDTURCVUZfQUxJR05NRU5UX1NJWkU7CisJCWlmIChyZ3RyIDw9IHB0cikgeworCQkJRFJNX0VSUk9SKCJDb21tYW5kIHJlZ3VsYXRvclxucGF1c2VkIGF0IGNvdW50ICVkLCBhZGRyZXNzICV4LCAiCisJCQkJICAid2hpbGUgY3VycmVudCBwYXVzZSBhZGRyZXNzIGlzICV4LlxuIgorCQkJCSAgIlBsZWFzZSBtYWlsIHRoaXMgbWVzc2FnZSB0byAiCisJCQkJICAiPHVuaWNocm9tZS1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ+XG4iLAorCQkJCSAgY291bnQsIHJndHIsIHB0cik7CisJCX0KKwl9CisJCQorCWlmIChwYXVzZWQgJiYgIW5vX3BjaV9maXJlKSB7CisJICAgICAgICB1aW50MzJfdCByZ3RyLHB0cjsKKwkJdWludDMyX3QgcHRyX2xvdzsKKworCQljb3VudCA9IDEwMDAwMDA7CisJCXdoaWxlICgoVklBX1JFQUQoVklBX1JFR19TVEFUVVMpICYgVklBX0NNRF9SR1RSX0JVU1kpICYmIGNvdW50LS0pOworCQkKKwkJcmd0ciA9ICooZGV2X3ByaXYtPmh3X2FkZHJfcHRyKTsKKwkJcHRyID0gKChjaGFyICopcGF1c2VkX2F0IC0gZGV2X3ByaXYtPmRtYV9wdHIpICsgCisJCQlkZXZfcHJpdi0+ZG1hX29mZnNldCArICh1aW50MzJfdCkgZGV2X3ByaXYtPmFncEFkZHIgKyA0OworCQkKKworCQlwdHJfbG93ID0gKHB0ciA+IDMqQ01EQlVGX0FMSUdOTUVOVF9TSVpFKSA/IAorCQkJcHRyIC0gMypDTURCVUZfQUxJR05NRU5UX1NJWkUgOiAwOworCQlpZiAocmd0ciA8PSBwdHIgJiYgcmd0ciA+PSBwdHJfbG93KSB7CisJCQlWSUFfV1JJVEUoVklBX1JFR19UUkFOU0VULCAoSENfUGFyYVR5cGVfUHJlQ1IgPDwgMTYpKTsKKwkJCVZJQV9XUklURShWSUFfUkVHX1RSQU5TUEFDRSwgcGF1c2VfYWRkcl9oaSk7CisJCQlWSUFfV1JJVEUoVklBX1JFR19UUkFOU1BBQ0UsIHBhdXNlX2FkZHJfbG8pOworCQl9IAorCX0KKwlyZXR1cm4gcGF1c2VkOworfQorCisKKworc3RhdGljIGludCB2aWFfd2FpdF9pZGxlKGRybV92aWFfcHJpdmF0ZV90ICogZGV2X3ByaXYpCit7CisJaW50IGNvdW50ID0gMTAwMDAwMDA7CisJd2hpbGUgKGNvdW50LS0gJiYgKFZJQV9SRUFEKFZJQV9SRUdfU1RBVFVTKSAmCisJCQkgICAoVklBX0NNRF9SR1RSX0JVU1kgfCBWSUFfMkRfRU5HX0JVU1kgfAorCQkJICAgIFZJQV8zRF9FTkdfQlVTWSkpKSA7CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgdWludDMyX3QgKnZpYV9hbGlnbl9jbWQoZHJtX3ZpYV9wcml2YXRlX3QgKiBkZXZfcHJpdiwgdWludDMyX3QgY21kX3R5cGUsCisJCQkgICAgICAgdWludDMyX3QgYWRkciwgdWludDMyX3QgKmNtZF9hZGRyX2hpLCAKKwkJCSAgICAgICB1aW50MzJfdCAqY21kX2FkZHJfbG8sCisJCQkgICAgICAgaW50IHNraXBfd2FpdCkKK3sKKwl1aW50MzJfdCBhZ3BfYmFzZTsKKwl1aW50MzJfdCBjbWRfYWRkciwgYWRkcl9sbywgYWRkcl9oaTsKKwl1aW50MzJfdCAqdmI7CisJdWludDMyX3QgcXdfcGFkX2NvdW50OworCisJaWYgKCFza2lwX3dhaXQpCisJCXZpYV9jbWRidWZfd2FpdChkZXZfcHJpdiwgMipDTURCVUZfQUxJR05NRU5UX1NJWkUpOworCisJdmIgPSB2aWFfZ2V0X2RtYShkZXZfcHJpdik7CisJVklBX09VVF9SSU5HX1FXKCBIQ19IRUFERVIyIHwgKChWSUFfUkVHX1RSQU5TRVQgPj4gMikgPDwgMTIpIHwKKwkJCSAoVklBX1JFR19UUkFOU1BBQ0UgPj4gMiksIEhDX1BhcmFUeXBlX1ByZUNSIDw8IDE2KTsgCisJYWdwX2Jhc2UgPSBkZXZfcHJpdi0+ZG1hX29mZnNldCArICh1aW50MzJfdCkgZGV2X3ByaXYtPmFncEFkZHI7CisJcXdfcGFkX2NvdW50ID0gKENNREJVRl9BTElHTk1FTlRfU0laRSA+PiAzKSAtCisJCSgoZGV2X3ByaXYtPmRtYV9sb3cgJiBDTURCVUZfQUxJR05NRU5UX01BU0spID4+IDMpOworCisJCisJY21kX2FkZHIgPSAoYWRkcikgPyBhZGRyIDogCisJCWFncF9iYXNlICsgZGV2X3ByaXYtPmRtYV9sb3cgLSA4ICsgKHF3X3BhZF9jb3VudCA8PCAzKTsKKwlhZGRyX2xvID0gKChIQ19TdWJBX0hBR1BCcEwgPDwgMjQpIHwgKGNtZF90eXBlICYgSENfSEFHUEJwSURfTUFTSykgfAorCQkgICAoY21kX2FkZHIgJiBIQ19IQUdQQnBMX01BU0spKTsKKwlhZGRyX2hpID0gKChIQ19TdWJBX0hBR1BCcEggPDwgMjQpIHwgKGNtZF9hZGRyID4+IDI0KSk7CisKKwl2YiA9IHZpYV9hbGlnbl9idWZmZXIoZGV2X3ByaXYsIHZiLCBxd19wYWRfY291bnQgLSAxKTsKKwlWSUFfT1VUX1JJTkdfUVcoKmNtZF9hZGRyX2hpID0gYWRkcl9oaSwgCisJCQkqY21kX2FkZHJfbG8gPSBhZGRyX2xvKTsKKwlyZXR1cm4gdmI7Cit9CisKKworCisKK3N0YXRpYyB2b2lkIHZpYV9jbWRidWZfc3RhcnQoZHJtX3ZpYV9wcml2YXRlX3QgKiBkZXZfcHJpdikKK3sKKwl1aW50MzJfdCBwYXVzZV9hZGRyX2xvLCBwYXVzZV9hZGRyX2hpOworCXVpbnQzMl90IHN0YXJ0X2FkZHIsIHN0YXJ0X2FkZHJfbG87CisJdWludDMyX3QgZW5kX2FkZHIsIGVuZF9hZGRyX2xvOworCXVpbnQzMl90IGNvbW1hbmQ7CisJdWludDMyX3QgYWdwX2Jhc2U7CisKKworCWRldl9wcml2LT5kbWFfbG93ID0gMDsKKworCWFncF9iYXNlID0gZGV2X3ByaXYtPmRtYV9vZmZzZXQgKyAodWludDMyX3QpIGRldl9wcml2LT5hZ3BBZGRyOworCXN0YXJ0X2FkZHIgPSBhZ3BfYmFzZTsKKwllbmRfYWRkciA9IGFncF9iYXNlICsgZGV2X3ByaXYtPmRtYV9oaWdoOworCisJc3RhcnRfYWRkcl9sbyA9ICgoSENfU3ViQV9IQUdQQnN0TCA8PCAyNCkgfCAoc3RhcnRfYWRkciAmIDB4RkZGRkZGKSk7CisJZW5kX2FkZHJfbG8gPSAoKEhDX1N1YkFfSEFHUEJlbmRMIDw8IDI0KSB8IChlbmRfYWRkciAmIDB4RkZGRkZGKSk7CisJY29tbWFuZCA9ICgoSENfU3ViQV9IQUdQQ01OVCA8PCAyNCkgfCAoc3RhcnRfYWRkciA+PiAyNCkgfAorCQkgICAoKGVuZF9hZGRyICYgMHhmZjAwMDAwMCkgPj4gMTYpKTsKKworCWRldl9wcml2LT5sYXN0X3BhdXNlX3B0ciA9IAorCQl2aWFfYWxpZ25fY21kKGRldl9wcml2LCBIQ19IQUdQQnBJRF9QQVVTRSwgMCwgCisJCQkgICAgICAmcGF1c2VfYWRkcl9oaSwgJiBwYXVzZV9hZGRyX2xvLCAxKSAtIDE7CisKKwl2aWFfZmx1c2hfd3JpdGVfY29tYmluZSgpOworCXdoaWxlKCEgKmRldl9wcml2LT5sYXN0X3BhdXNlX3B0cik7CisKKwlWSUFfV1JJVEUoVklBX1JFR19UUkFOU0VULCAoSENfUGFyYVR5cGVfUHJlQ1IgPDwgMTYpKTsKKwlWSUFfV1JJVEUoVklBX1JFR19UUkFOU1BBQ0UsIGNvbW1hbmQpOworCVZJQV9XUklURShWSUFfUkVHX1RSQU5TUEFDRSwgc3RhcnRfYWRkcl9sbyk7CisJVklBX1dSSVRFKFZJQV9SRUdfVFJBTlNQQUNFLCBlbmRfYWRkcl9sbyk7CisKKwlWSUFfV1JJVEUoVklBX1JFR19UUkFOU1BBQ0UsIHBhdXNlX2FkZHJfaGkpOworCVZJQV9XUklURShWSUFfUkVHX1RSQU5TUEFDRSwgcGF1c2VfYWRkcl9sbyk7CisKKwlWSUFfV1JJVEUoVklBX1JFR19UUkFOU1BBQ0UsIGNvbW1hbmQgfCBIQ19IQUdQQ01OVF9NQVNLKTsKK30KKworc3RhdGljIHZvaWQgdmlhX3BhZF9jYWNoZShkcm1fdmlhX3ByaXZhdGVfdCAqZGV2X3ByaXYsIGludCBxd29yZHMpCit7CisJdWludDMyX3QgKnZiOworCisJdmlhX2NtZGJ1Zl93YWl0KGRldl9wcml2LCBxd29yZHMgKyAyKTsKKwl2YiA9IHZpYV9nZXRfZG1hKGRldl9wcml2KTsKKwlWSUFfT1VUX1JJTkdfUVcoIEhDX0hFQURFUjIsIEhDX1BhcmFUeXBlX05vdFRleCA8PCAxNik7CisJdmlhX2FsaWduX2J1ZmZlcihkZXZfcHJpdix2Yixxd29yZHMpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdmlhX2R1bW15X2JpdGJsdChkcm1fdmlhX3ByaXZhdGVfdCAqIGRldl9wcml2KQoreworCXVpbnQzMl90ICp2YiA9IHZpYV9nZXRfZG1hKGRldl9wcml2KTsKKwlTZXRSZWcyREFHUCgweDBDLCAoMCB8ICgwIDw8IDE2KSkpOworCVNldFJlZzJEQUdQKDB4MTAsIDAgfCAoMCA8PCAxNikpOworCVNldFJlZzJEQUdQKDB4MCwgMHgxIHwgMHgyMDAwIHwgMHhBQTAwMDAwMCk7IAorfQorCisKK3N0YXRpYyB2b2lkIHZpYV9jbWRidWZfanVtcChkcm1fdmlhX3ByaXZhdGVfdCAqIGRldl9wcml2KQoreworCXVpbnQzMl90IGFncF9iYXNlOworCXVpbnQzMl90IHBhdXNlX2FkZHJfbG8sIHBhdXNlX2FkZHJfaGk7CisJdWludDMyX3QganVtcF9hZGRyX2xvLCBqdW1wX2FkZHJfaGk7CisJdm9sYXRpbGUgdWludDMyX3QgKmxhc3RfcGF1c2VfcHRyOworCXVpbnQzMl90IGRtYV9sb3dfc2F2ZTEsIGRtYV9sb3dfc2F2ZTI7CisKKwlhZ3BfYmFzZSA9IGRldl9wcml2LT5kbWFfb2Zmc2V0ICsgKHVpbnQzMl90KSBkZXZfcHJpdi0+YWdwQWRkcjsKKwl2aWFfYWxpZ25fY21kKGRldl9wcml2LCAgSENfSEFHUEJwSURfSlVNUCwgMCwgJmp1bXBfYWRkcl9oaSwgCisJCSAgICAgICZqdW1wX2FkZHJfbG8sIDApOworCQorCWRldl9wcml2LT5kbWFfd3JhcCA9IGRldl9wcml2LT5kbWFfbG93OworCisKKwkvKgorCSAqIFdyYXAgY29tbWFuZCBidWZmZXIgdG8gdGhlIGJlZ2lubmluZy4KKwkgKi8KKworCWRldl9wcml2LT5kbWFfbG93ID0gMDsKKwlpZiAodmlhX2NtZGJ1Zl93YWl0KGRldl9wcml2LCBDTURCVUZfQUxJR05NRU5UX1NJWkUpICE9IDApIHsKKwkJRFJNX0VSUk9SKCJ2aWFfY21kYnVmX2p1bXAgZmFpbGVkXG4iKTsKKwl9CisKKwl2aWFfZHVtbXlfYml0Ymx0KGRldl9wcml2KTsKKwl2aWFfZHVtbXlfYml0Ymx0KGRldl9wcml2KTsgCisKKwlsYXN0X3BhdXNlX3B0ciA9IHZpYV9hbGlnbl9jbWQoZGV2X3ByaXYsICBIQ19IQUdQQnBJRF9QQVVTRSwgMCwgJnBhdXNlX2FkZHJfaGksIAorCQkJCSAgICAgICAmcGF1c2VfYWRkcl9sbywgMCkgLTE7CisJdmlhX2FsaWduX2NtZChkZXZfcHJpdiwgIEhDX0hBR1BCcElEX1BBVVNFLCAwLCAmcGF1c2VfYWRkcl9oaSwgCisJCSAgICAgICZwYXVzZV9hZGRyX2xvLCAwKTsKKworCSpsYXN0X3BhdXNlX3B0ciA9IHBhdXNlX2FkZHJfbG87CisJZG1hX2xvd19zYXZlMSA9IGRldl9wcml2LT5kbWFfbG93OworCisJLyoKKwkgKiBOb3csIHNldCBhIHRyYXAgdGhhdCB3aWxsIHBhdXNlIHRoZSByZWd1bGF0b3IgaWYgaXQgdHJpZXMgdG8gcmVydW4gdGhlIG9sZAorCSAqIGNvbW1hbmQgYnVmZmVyLiAoV2hpY2ggbWF5IGhhcHBlbiBpZiB2aWFfaG9va19zZWdtZW50IGRldGVjcyBhIGNvbW1hbmQgcmVndWxhdG9yIHBhdXNlCisJICogYW5kIHJlaXNzdWVzIHRoZSBqdW1wIGNvbW1hbmQgb3ZlciBQQ0ksIHdoaWxlIHRoZSByZWd1bGF0b3IgaGFzIGFscmVhZHkgdGFrZW4gdGhlIGp1bXAKKwkgKiBhbmQgYWN0dWFsbHkgcGF1c2VkIGF0IHRoZSBjdXJyZW50IGJ1ZmZlciBlbmQpLgorCSAqIFRoZXJlIGFwcGVhcnMgdG8gYmUgbm8gb3RoZXIgd2F5IHRvIGRldGVjdCB0aGlzIGNvbmRpdGlvbiwgc2luY2UgdGhlIGh3X2FkZHJfcG9pbnRlcgorCSAqIGRvZXMgbm90IHNlZW0gdG8gZ2V0IHVwZGF0ZWQgaW1tZWRpYXRlbHkgd2hlbiBhIGp1bXAgb2NjdXJzLgorCSAqLworCisJbGFzdF9wYXVzZV9wdHIgPSB2aWFfYWxpZ25fY21kKGRldl9wcml2LCAgSENfSEFHUEJwSURfUEFVU0UsIDAsICZwYXVzZV9hZGRyX2hpLCAKKwkJCQkgICAgICAgJnBhdXNlX2FkZHJfbG8sIDApIC0xOworCXZpYV9hbGlnbl9jbWQoZGV2X3ByaXYsICBIQ19IQUdQQnBJRF9QQVVTRSwgMCwgJnBhdXNlX2FkZHJfaGksIAorCQkgICAgICAmcGF1c2VfYWRkcl9sbywgMCk7CisJKmxhc3RfcGF1c2VfcHRyID0gcGF1c2VfYWRkcl9sbzsKKworCWRtYV9sb3dfc2F2ZTIgPSBkZXZfcHJpdi0+ZG1hX2xvdzsKKwlkZXZfcHJpdi0+ZG1hX2xvdyA9IGRtYV9sb3dfc2F2ZTE7CQorCXZpYV9ob29rX3NlZ21lbnQoIGRldl9wcml2LCBqdW1wX2FkZHJfaGksIGp1bXBfYWRkcl9sbywgMCk7CisJZGV2X3ByaXYtPmRtYV9sb3cgPSBkbWFfbG93X3NhdmUyOworCXZpYV9ob29rX3NlZ21lbnQoIGRldl9wcml2LCBwYXVzZV9hZGRyX2hpLCBwYXVzZV9hZGRyX2xvLCAwKTsKK30KKworCitzdGF0aWMgdm9pZCB2aWFfY21kYnVmX3Jld2luZChkcm1fdmlhX3ByaXZhdGVfdCAqIGRldl9wcml2KQoreworCXZpYV9jbWRidWZfanVtcChkZXZfcHJpdik7IAorfQorCitzdGF0aWMgdm9pZCB2aWFfY21kYnVmX2ZsdXNoKGRybV92aWFfcHJpdmF0ZV90ICogZGV2X3ByaXYsIHVpbnQzMl90IGNtZF90eXBlKQoreworCXVpbnQzMl90IHBhdXNlX2FkZHJfbG8sIHBhdXNlX2FkZHJfaGk7CisKKwl2aWFfYWxpZ25fY21kKGRldl9wcml2LCBjbWRfdHlwZSwgMCwgJnBhdXNlX2FkZHJfaGksICZwYXVzZV9hZGRyX2xvLCAwKTsKKwl2aWFfaG9va19zZWdtZW50KCBkZXZfcHJpdiwgcGF1c2VfYWRkcl9oaSwgcGF1c2VfYWRkcl9sbywgMCk7Cit9CisKKworc3RhdGljIHZvaWQgdmlhX2NtZGJ1Zl9wYXVzZShkcm1fdmlhX3ByaXZhdGVfdCAqIGRldl9wcml2KQoreworCXZpYV9jbWRidWZfZmx1c2goZGV2X3ByaXYsIEhDX0hBR1BCcElEX1BBVVNFKTsKK30KKworc3RhdGljIHZvaWQgdmlhX2NtZGJ1Zl9yZXNldChkcm1fdmlhX3ByaXZhdGVfdCAqIGRldl9wcml2KQoreworCXZpYV9jbWRidWZfZmx1c2goZGV2X3ByaXYsIEhDX0hBR1BCcElEX1NUT1ApOworCXZpYV93YWl0X2lkbGUoZGV2X3ByaXYpOworfQorCisvKgorICogVXNlciBpbnRlcmZhY2UgdG8gdGhlIHNwYWNlIGFuZCBsYWcgZnVuY3Rpb25zLgorICovCisKK2ludCAKK3ZpYV9jbWRidWZfc2l6ZShEUk1fSU9DVExfQVJHUykKK3sKKwlEUk1fREVWSUNFOworCWRybV92aWFfY21kYnVmX3NpemVfdCBkX3NpejsKKwlpbnQgcmV0ID0gMDsKKwl1aW50MzJfdCB0bXBfc2l6ZSwgY291bnQ7CisJZHJtX3ZpYV9wcml2YXRlX3QgKmRldl9wcml2OworCisJRFJNX0RFQlVHKCJ2aWEgY21kYnVmX3NpemVcbiIpOworCUxPQ0tfVEVTVF9XSVRIX1JFVFVSTiggZGV2LCBmaWxwICk7CisKKwlkZXZfcHJpdiA9IChkcm1fdmlhX3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOworCisJaWYgKGRldl9wcml2LT5yaW5nLnZpcnR1YWxfc3RhcnQgPT0gTlVMTCkgeworCQlEUk1fRVJST1IoIiVzIGNhbGxlZCB3aXRob3V0IGluaXRpYWxpemluZyBBR1AgcmluZyBidWZmZXIuXG4iLAorCQkJICBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gRFJNX0VSUihFRkFVTFQpOworCX0KKworCURSTV9DT1BZX0ZST01fVVNFUl9JT0NUTChkX3NpeiwgKGRybV92aWFfY21kYnVmX3NpemVfdCAqKSBkYXRhLAorCQkJCSBzaXplb2YoZF9zaXopKTsKKworCisJY291bnQgPSAxMDAwMDAwOworCXRtcF9zaXplID0gZF9zaXouc2l6ZTsKKwlzd2l0Y2goZF9zaXouZnVuYykgeworCWNhc2UgVklBX0NNREJVRl9TUEFDRToKKwkJd2hpbGUgKCgodG1wX3NpemUgPSB2aWFfY21kYnVmX3NwYWNlKGRldl9wcml2KSkgPCBkX3Npei5zaXplKSAmJiBjb3VudC0tKSB7CisJCQlpZiAoIWRfc2l6LndhaXQpIHsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlpZiAoIWNvdW50KSB7CisJCQlEUk1fRVJST1IoIlZJQV9DTURCVUZfU1BBQ0UgdGltZWQgb3V0LlxuIik7CisJCQlyZXQgPSBEUk1fRVJSKEVBR0FJTik7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBWSUFfQ01EQlVGX0xBRzoKKwkJd2hpbGUgKCgodG1wX3NpemUgPSB2aWFfY21kYnVmX2xhZyhkZXZfcHJpdikpID4gZF9zaXouc2l6ZSkgJiYgY291bnQtLSkgeworCQkJaWYgKCFkX3Npei53YWl0KSB7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWYgKCFjb3VudCkgeworCQkJRFJNX0VSUk9SKCJWSUFfQ01EQlVGX0xBRyB0aW1lZCBvdXQuXG4iKTsKKwkJCXJldCA9IERSTV9FUlIoRUFHQUlOKTsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXQgPSBEUk1fRVJSKEVGQVVMVCk7CisJfQorCWRfc2l6LnNpemUgPSB0bXBfc2l6ZTsKKworCURSTV9DT1BZX1RPX1VTRVJfSU9DVEwoKGRybV92aWFfY21kYnVmX3NpemVfdCAqKSBkYXRhLCBkX3NpeiwKKwkJCSAgICAgICBzaXplb2YoZF9zaXopKTsKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS92aWFfZHJtLmggYi9kcml2ZXJzL2NoYXIvZHJtL3ZpYV9kcm0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTg4YzliCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9jaGFyL2RybS92aWFfZHJtLmgKQEAgLTAsMCArMSwyNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgMTk5OC0yMDAzIFZJQSBUZWNobm9sb2dpZXMsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAyMDAxLTIwMDMgUzMgR3JhcGhpY3MsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWIgbGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZQorICogbmV4dCBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMKKyAqIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFZJQSwgUzMgR1JBUEhJQ1MsIEFORC9PUiBJVFMgU1VQUExJRVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUgorICogREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICovCisjaWZuZGVmIF9WSUFfRFJNX0hfCisjZGVmaW5lIF9WSUFfRFJNX0hfCisKKy8qIFdBUk5JTkc6IFRoZXNlIGRlZmluZXMgbXVzdCBiZSB0aGUgc2FtZSBhcyB3aGF0IHRoZSBYc2VydmVyIHVzZXMuCisgKiBpZiB5b3UgY2hhbmdlIHRoZW0sIHlvdSBtdXN0IGNoYW5nZSB0aGUgZGVmaW5lcyBpbiB0aGUgWHNlcnZlci4KKyAqLworCisjaWZuZGVmIF9WSUFfREVGSU5FU18KKyNkZWZpbmUgX1ZJQV9ERUZJTkVTXworCisjaWZuZGVmIF9fS0VSTkVMX18KKyNpbmNsdWRlICJ2aWFfZHJtY2xpZW50LmgiCisjZW5kaWYKKworI2RlZmluZSBWSUFfTlJfU0FSRUFfQ0xJUFJFQ1RTIAkJOAorI2RlZmluZSBWSUFfTlJfWFZNQ19QT1JUUyAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIFZJQV9OUl9YVk1DX0xPQ0tTICAgICAgICAgICAgICAgNQorI2RlZmluZSBWSUFfTUFYX0NBQ0hFTElORV9TSVpFICAgICAgICAgIDY0CisjZGVmaW5lIFhWTUNMT0NLUFRSKHNhUHJpdixsb2NrTm8pCQkJCQlcCisJKCh2b2xhdGlsZSBkcm1faHdfbG9ja190ICopKCgoKCh1bnNpZ25lZCBsb25nKSAoc2FQcml2KS0+WHZNQ0xvY2tBcmVhKSArIFwKKwkJCQkgICAgICAoVklBX01BWF9DQUNIRUxJTkVfU0laRSAtIDEpKSAmCVwKKwkJCQkgICAgIH4oVklBX01BWF9DQUNIRUxJTkVfU0laRSAtIDEpKSArCVwKKwkJCQkgICAgVklBX01BWF9DQUNIRUxJTkVfU0laRSoobG9ja05vKSkpCisKKy8qIEVhY2ggcmVnaW9uIGlzIGEgbWluaW11bSBvZiA2NGssIGFuZCB0aGVyZSBhcmUgYXQgbW9zdCA2NCBvZiB0aGVtLgorICovCisjZGVmaW5lIFZJQV9OUl9URVhfUkVHSU9OUyA2NAorI2RlZmluZSBWSUFfTE9HX01JTl9URVhfUkVHSU9OX1NJWkUgMTYKKyNlbmRpZgorCisjZGVmaW5lIFZJQV9VUExPQURfVEVYMElNQUdFICAweDEJLyogaGFuZGxlZCBjbGllbnRzaWRlICovCisjZGVmaW5lIFZJQV9VUExPQURfVEVYMUlNQUdFICAweDIJLyogaGFuZGxlZCBjbGllbnRzaWRlICovCisjZGVmaW5lIFZJQV9VUExPQURfQ1RYICAgICAgICAweDQKKyNkZWZpbmUgVklBX1VQTE9BRF9CVUZGRVJTICAgIDB4OAorI2RlZmluZSBWSUFfVVBMT0FEX1RFWDAgICAgICAgMHgxMAorI2RlZmluZSBWSUFfVVBMT0FEX1RFWDEgICAgICAgMHgyMAorI2RlZmluZSBWSUFfVVBMT0FEX0NMSVBSRUNUUyAgMHg0MAorI2RlZmluZSBWSUFfVVBMT0FEX0FMTCAgICAgICAgMHhmZgorCisvKiBWSUEgc3BlY2lmaWMgaW9jdGxzICovCisjZGVmaW5lIERSTV9WSUFfQUxMT0NNRU0JMHgwMAorI2RlZmluZSBEUk1fVklBX0ZSRUVNRU0JICAgICAgICAweDAxCisjZGVmaW5lIERSTV9WSUFfQUdQX0lOSVQJMHgwMgorI2RlZmluZSBEUk1fVklBX0ZCX0lOSVQJICAgICAgICAweDAzCisjZGVmaW5lIERSTV9WSUFfTUFQX0lOSVQJMHgwNAorI2RlZmluZSBEUk1fVklBX0RFQ19GVVRFWCAgICAgICAweDA1CisjZGVmaW5lIE5PVF9VU0VECisjZGVmaW5lIERSTV9WSUFfRE1BX0lOSVQJMHgwNworI2RlZmluZSBEUk1fVklBX0NNREJVRkZFUgkweDA4CisjZGVmaW5lIERSTV9WSUFfRkxVU0gJICAgICAgICAweDA5CisjZGVmaW5lIERSTV9WSUFfUENJQ01ECSAgICAgICAgMHgwYQorI2RlZmluZSBEUk1fVklBX0NNREJVRl9TSVpFCTB4MGIKKyNkZWZpbmUgTk9UX1VTRUQKKyNkZWZpbmUgRFJNX1ZJQV9XQUlUX0lSUSAgICAgICAgMHgwZAorCisjZGVmaW5lIERSTV9JT0NUTF9WSUFfQUxMT0NNRU0JICBEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX1ZJQV9BTExPQ01FTSwgZHJtX3ZpYV9tZW1fdCkKKyNkZWZpbmUgRFJNX0lPQ1RMX1ZJQV9GUkVFTUVNCSAgRFJNX0lPVyggRFJNX0NPTU1BTkRfQkFTRSArIERSTV9WSUFfRlJFRU1FTSwgZHJtX3ZpYV9tZW1fdCkKKyNkZWZpbmUgRFJNX0lPQ1RMX1ZJQV9BR1BfSU5JVAkgIERSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fVklBX0FHUF9JTklULCBkcm1fdmlhX2FncF90KQorI2RlZmluZSBEUk1fSU9DVExfVklBX0ZCX0lOSVQJICBEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX1ZJQV9GQl9JTklULCBkcm1fdmlhX2ZiX3QpCisjZGVmaW5lIERSTV9JT0NUTF9WSUFfTUFQX0lOSVQJICBEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX1ZJQV9NQVBfSU5JVCwgZHJtX3ZpYV9pbml0X3QpCisjZGVmaW5lIERSTV9JT0NUTF9WSUFfREVDX0ZVVEVYICAgRFJNX0lPVyggRFJNX0NPTU1BTkRfQkFTRSArIERSTV9WSUFfREVDX0ZVVEVYLCBkcm1fdmlhX2Z1dGV4X3QpCisjZGVmaW5lIERSTV9JT0NUTF9WSUFfRE1BX0lOSVQJICBEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX1ZJQV9ETUFfSU5JVCwgZHJtX3ZpYV9kbWFfaW5pdF90KQorI2RlZmluZSBEUk1fSU9DVExfVklBX0NNREJVRkZFUgkgIERSTV9JT1coIERSTV9DT01NQU5EX0JBU0UgKyBEUk1fVklBX0NNREJVRkZFUiwgZHJtX3ZpYV9jbWRidWZmZXJfdCkKKyNkZWZpbmUgRFJNX0lPQ1RMX1ZJQV9GTFVTSAkgIERSTV9JTyggIERSTV9DT01NQU5EX0JBU0UgKyBEUk1fVklBX0ZMVVNIKQorI2RlZmluZSBEUk1fSU9DVExfVklBX1BDSUNNRAkgIERSTV9JT1coIERSTV9DT01NQU5EX0JBU0UgKyBEUk1fVklBX1BDSUNNRCwgZHJtX3ZpYV9jbWRidWZmZXJfdCkKKyNkZWZpbmUgRFJNX0lPQ1RMX1ZJQV9DTURCVUZfU0laRSBEUk1fSU9XUiggRFJNX0NPTU1BTkRfQkFTRSArIERSTV9WSUFfQ01EQlVGX1NJWkUsIFwKKwkJCQkJICAgIGRybV92aWFfY21kYnVmX3NpemVfdCkKKyNkZWZpbmUgRFJNX0lPQ1RMX1ZJQV9XQUlUX0lSUSAgICBEUk1fSU9XUiggRFJNX0NPTU1BTkRfQkFTRSArIERSTV9WSUFfV0FJVF9JUlEsIGRybV92aWFfaXJxd2FpdF90KQorCisvKiBJbmRpY2VzIGludG8gYnVmLlNldHVwIHdoZXJlIHZhcmlvdXMgYml0cyBvZiBzdGF0ZSBhcmUgbWlycm9yZWQgcGVyCisgKiBjb250ZXh0IGFuZCBwZXIgYnVmZmVyLiAgVGhlc2UgY2FuIGJlIGZpcmVkIGF0IHRoZSBjYXJkIGFzIGEgdW5pdCwKKyAqIG9yIGluIGEgcGllY2V3aXNlIGZhc2hpb24gYXMgcmVxdWlyZWQuCisgKi8KKworI2RlZmluZSBWSUFfVEVYX1NFVFVQX1NJWkUgOAorCisvKiBGbGFncyBmb3IgY2xlYXIgaW9jdGwKKyAqLworI2RlZmluZSBWSUFfRlJPTlQgICAweDEKKyNkZWZpbmUgVklBX0JBQ0sgICAgMHgyCisjZGVmaW5lIFZJQV9ERVBUSCAgIDB4NAorI2RlZmluZSBWSUFfU1RFTkNJTCAweDgKKyNkZWZpbmUgVklERU8gMAorI2RlZmluZSBBR1AgMQordHlwZWRlZiBzdHJ1Y3QgeworCXVpbnQzMl90IG9mZnNldDsKKwl1aW50MzJfdCBzaXplOworfSBkcm1fdmlhX2FncF90OworCit0eXBlZGVmIHN0cnVjdCB7CisJdWludDMyX3Qgb2Zmc2V0OworCXVpbnQzMl90IHNpemU7Cit9IGRybV92aWFfZmJfdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVpbnQzMl90IGNvbnRleHQ7CisJdWludDMyX3QgdHlwZTsKKwl1aW50MzJfdCBzaXplOworCXVuc2lnbmVkIGxvbmcgaW5kZXg7CisJdW5zaWduZWQgbG9uZyBvZmZzZXQ7Cit9IGRybV92aWFfbWVtX3Q7CisKK3R5cGVkZWYgc3RydWN0IF9kcm1fdmlhX2luaXQgeworCWVudW0geworCQlWSUFfSU5JVF9NQVAgPSAweDAxLAorCQlWSUFfQ0xFQU5VUF9NQVAgPSAweDAyCisJfSBmdW5jOworCisJdW5zaWduZWQgbG9uZyBzYXJlYV9wcml2X29mZnNldDsKKwl1bnNpZ25lZCBsb25nIGZiX29mZnNldDsKKwl1bnNpZ25lZCBsb25nIG1taW9fb2Zmc2V0OworCXVuc2lnbmVkIGxvbmcgYWdwQWRkcjsKK30gZHJtX3ZpYV9pbml0X3Q7CisKK3R5cGVkZWYgc3RydWN0IF9kcm1fdmlhX2Z1dGV4IHsKKwllbnVtIHsKKwkJVklBX0ZVVEVYX1dBSVQgPSAweDAwLAorCQlWSUFfRlVURVhfV0FLRSA9IDBYMDEKKwl9IGZ1bmM7CisJdWludDMyX3QgbXM7CisJdWludDMyX3QgbG9jazsKKwl1aW50MzJfdCB2YWw7Cit9IGRybV92aWFfZnV0ZXhfdDsKKwordHlwZWRlZiBzdHJ1Y3QgX2RybV92aWFfZG1hX2luaXQgeworCWVudW0geworCQlWSUFfSU5JVF9ETUEgPSAweDAxLAorCQlWSUFfQ0xFQU5VUF9ETUEgPSAweDAyLAorICAgICAgICAgICAgICAgIFZJQV9ETUFfSU5JVElBTElaRUQgPSAweDAzCisJfSBmdW5jOworCisJdW5zaWduZWQgbG9uZyBvZmZzZXQ7CisJdW5zaWduZWQgbG9uZyBzaXplOworCXVuc2lnbmVkIGxvbmcgcmVnX3BhdXNlX2FkZHI7Cit9IGRybV92aWFfZG1hX2luaXRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgX2RybV92aWFfY21kYnVmZmVyIHsKKwljaGFyICpidWY7CisJdW5zaWduZWQgbG9uZyBzaXplOworfSBkcm1fdmlhX2NtZGJ1ZmZlcl90OworCisvKiBXYXJuaW5nOiBJZiB5b3UgY2hhbmdlIHRoZSBTQVJFQSBzdHJ1Y3R1cmUgeW91IG11c3QgY2hhbmdlIHRoZSBYc2VydmVyCisgKiBzdHJ1Y3R1cmUgYXMgd2VsbCAqLworCit0eXBlZGVmIHN0cnVjdCBfZHJtX3ZpYV90ZXhfcmVnaW9uIHsKKwl1bnNpZ25lZCBjaGFyIG5leHQsIHByZXY7CS8qIGluZGljZXMgdG8gZm9ybSBhIGNpcmN1bGFyIExSVSAgKi8KKwl1bnNpZ25lZCBjaGFyIGluVXNlOwkvKiBvd25lZCBieSBhIGNsaWVudCwgb3IgZnJlZT8gKi8KKwlpbnQgYWdlOwkJLyogdHJhY2tlZCBieSBjbGllbnRzIHRvIHVwZGF0ZSBsb2NhbCBMUlUncyAqLworfSBkcm1fdmlhX3RleF9yZWdpb25fdDsKKwordHlwZWRlZiBzdHJ1Y3QgX2RybV92aWFfc2FyZWEgeworCXVuc2lnbmVkIGludCBkaXJ0eTsKKwl1bnNpZ25lZCBpbnQgbmJveDsKKwlkcm1fY2xpcF9yZWN0X3QgYm94ZXNbVklBX05SX1NBUkVBX0NMSVBSRUNUU107CisJZHJtX3ZpYV90ZXhfcmVnaW9uX3QgdGV4TGlzdFtWSUFfTlJfVEVYX1JFR0lPTlMgKyAxXTsKKwlpbnQgdGV4QWdlOwkJLyogbGFzdCB0aW1lIHRleHR1cmUgd2FzIHVwbG9hZGVkICovCisJaW50IGN0eE93bmVyOwkJLyogbGFzdCBjb250ZXh0IHRvIHVwbG9hZCBzdGF0ZSAqLworCWludCB2ZXJ0ZXhQcmltOworCisJLyoKKwkgKiBCZWxvdyBpcyBmb3IgWHZNQy4KKwkgKiBXZSB3YW50IHRoZSBsb2NrIGludGVnZXJzIGFsb25lIG9uLCBhbmQgYWxpZ25lZCB0bywgYSBjYWNoZSBsaW5lLgorCSAqIFRoZXJlZm9yZSB0aGlzIHNvbWV3aGF0IHN0cmFuZ2UgY29uc3RydWN0LgorCSAqLworCisJY2hhciBYdk1DTG9ja0FyZWFbVklBX01BWF9DQUNIRUxJTkVfU0laRSAqIChWSUFfTlJfWFZNQ19MT0NLUyArIDEpXTsKKworCXVuc2lnbmVkIGludCBYdk1DRGlzcGxheWluZ1tWSUFfTlJfWFZNQ19QT1JUU107CisJdW5zaWduZWQgaW50IFh2TUNTdWJQaWNPbltWSUFfTlJfWFZNQ19QT1JUU107CisJdW5zaWduZWQgaW50IFh2TUNDdHhOb0dyYWJiZWQ7CS8qIExhc3QgY29udGV4dCB0byBob2xkIGRlY29kZXIgKi8KKworfSBkcm1fdmlhX3NhcmVhX3Q7CisKK3R5cGVkZWYgc3RydWN0IF9kcm1fdmlhX2NtZGJ1Zl9zaXplIHsKKwllbnVtIHsKKwkJVklBX0NNREJVRl9TUEFDRSA9IDB4MDEsCisJCVZJQV9DTURCVUZfTEFHID0gMHgwMgorCX0gZnVuYzsKKwlpbnQgd2FpdDsKKwl1aW50MzJfdCBzaXplOworfSBkcm1fdmlhX2NtZGJ1Zl9zaXplX3Q7CisKK3R5cGVkZWYgZW51bSB7CisJVklBX0lSUV9BQlNPTFVURSA9IDB4MCwKKwlWSUFfSVJRX1JFTEFUSVZFID0gMHgxLAorCVZJQV9JUlFfU0lHTkFMID0gMHgxMDAwMDAwMCwKKwlWSUFfSVJRX0ZPUkNFX1NFUVVFTkNFID0gMHgyMDAwMDAwMAorfSB2aWFfaXJxX3NlcV90eXBlX3Q7CisKKyNkZWZpbmUgVklBX0lSUV9GTEFHU19NQVNLIDB4RjAwMDAwMDAKKworc3RydWN0IGRybV92aWFfd2FpdF9pcnFfcmVxdWVzdHsKKwl1bnNpZ25lZCBpcnE7CisJdmlhX2lycV9zZXFfdHlwZV90IHR5cGU7CisJdWludDMyX3Qgc2VxdWVuY2U7CisJdWludDMyX3Qgc2lnbmFsOworfTsKKwordHlwZWRlZiB1bmlvbiBkcm1fdmlhX2lycXdhaXQgeworCXN0cnVjdCBkcm1fdmlhX3dhaXRfaXJxX3JlcXVlc3QgcmVxdWVzdDsKKwlzdHJ1Y3QgZHJtX3dhaXRfdmJsYW5rX3JlcGx5IHJlcGx5OworfSBkcm1fdmlhX2lycXdhaXRfdDsKKworI2lmZGVmIF9fS0VSTkVMX18KKworaW50IHZpYV9mYl9pbml0KERSTV9JT0NUTF9BUkdTKTsKK2ludCB2aWFfbWVtX2FsbG9jKERSTV9JT0NUTF9BUkdTKTsKK2ludCB2aWFfbWVtX2ZyZWUoRFJNX0lPQ1RMX0FSR1MpOworaW50IHZpYV9hZ3BfaW5pdChEUk1fSU9DVExfQVJHUyk7CitpbnQgdmlhX21hcF9pbml0KERSTV9JT0NUTF9BUkdTKTsKK2ludCB2aWFfZGVjb2Rlcl9mdXRleChEUk1fSU9DVExfQVJHUyk7CitpbnQgdmlhX2RtYV9pbml0KERSTV9JT0NUTF9BUkdTKTsKK2ludCB2aWFfY21kYnVmZmVyKERSTV9JT0NUTF9BUkdTKTsKK2ludCB2aWFfZmx1c2hfaW9jdGwoRFJNX0lPQ1RMX0FSR1MpOworaW50IHZpYV9wY2lfY21kYnVmZmVyKERSTV9JT0NUTF9BUkdTKTsKK2ludCB2aWFfY21kYnVmX3NpemUoRFJNX0lPQ1RMX0FSR1MpOworaW50IHZpYV93YWl0X2lycShEUk1fSU9DVExfQVJHUyk7CisKKyNlbmRpZgorI2VuZGlmCQkJCS8qIF9WSUFfRFJNX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL3ZpYV9kcnYuYyBiL2RyaXZlcnMvY2hhci9kcm0vdmlhX2Rydi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3NWVlZmMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2NoYXIvZHJtL3ZpYV9kcnYuYwpAQCAtMCwwICsxLDEyNiBAQAorLyoKKyAqIENvcHlyaWdodCAxOTk4LTIwMDMgVklBIFRlY2hub2xvZ2llcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IDIwMDEtMjAwMyBTMyBHcmFwaGljcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YiBsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlCisgKiBuZXh0IHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucworICogb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT04tSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTAorICogVklBLCBTMyBHUkFQSElDUywgQU5EL09SIElUUyBTVVBQTElFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCisgKiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgImRybVAuaCIKKyNpbmNsdWRlICJ2aWFfZHJtLmgiCisjaW5jbHVkZSAidmlhX2Rydi5oIgorCisjaW5jbHVkZSAiZHJtX3BjaWlkcy5oIgorCitzdGF0aWMgaW50IHBvc3Rpbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJRFJNX0lORk8oIkluaXRpYWxpemVkICVzICVkLiVkLiVkICVzIG9uIG1pbm9yICVkOiAlc1xuIiwKKwkJIERSSVZFUl9OQU1FLAorCQkgRFJJVkVSX01BSk9SLAorCQkgRFJJVkVSX01JTk9SLAorCQkgRFJJVkVSX1BBVENITEVWRUwsCisJCSBEUklWRVJfREFURSwgZGV2LT5wcmltYXJ5Lm1pbm9yLCBwY2lfcHJldHR5X25hbWUoZGV2LT5wZGV2KQorCSAgICApOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZlcnNpb24oZHJtX3ZlcnNpb25fdCAqIHZlcnNpb24pCit7CisJaW50IGxlbjsKKworCXZlcnNpb24tPnZlcnNpb25fbWFqb3IgPSBEUklWRVJfTUFKT1I7CisJdmVyc2lvbi0+dmVyc2lvbl9taW5vciA9IERSSVZFUl9NSU5PUjsKKwl2ZXJzaW9uLT52ZXJzaW9uX3BhdGNobGV2ZWwgPSBEUklWRVJfUEFUQ0hMRVZFTDsKKwlEUk1fQ09QWSh2ZXJzaW9uLT5uYW1lLCBEUklWRVJfTkFNRSk7CisJRFJNX0NPUFkodmVyc2lvbi0+ZGF0ZSwgRFJJVkVSX0RBVEUpOworCURSTV9DT1BZKHZlcnNpb24tPmRlc2MsIERSSVZFUl9ERVNDKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHBjaWlkbGlzdFtdID0geworCXZpYWRydl9QQ0lfSURTCit9OworCitzdGF0aWMgZHJtX2lvY3RsX2Rlc2NfdCBpb2N0bHNbXSA9IHsKKwlbRFJNX0lPQ1RMX05SKERSTV9WSUFfQUxMT0NNRU0pXSA9IHt2aWFfbWVtX2FsbG9jLCAxLCAwfSwKKwlbRFJNX0lPQ1RMX05SKERSTV9WSUFfRlJFRU1FTSldID0ge3ZpYV9tZW1fZnJlZSwgMSwgMH0sCisJW0RSTV9JT0NUTF9OUihEUk1fVklBX0FHUF9JTklUKV0gPSB7dmlhX2FncF9pbml0LCAxLCAwfSwKKwlbRFJNX0lPQ1RMX05SKERSTV9WSUFfRkJfSU5JVCldID0ge3ZpYV9mYl9pbml0LCAxLCAwfSwKKwlbRFJNX0lPQ1RMX05SKERSTV9WSUFfTUFQX0lOSVQpXSA9IHt2aWFfbWFwX2luaXQsIDEsIDB9LAorCVtEUk1fSU9DVExfTlIoRFJNX1ZJQV9ERUNfRlVURVgpXSA9IHt2aWFfZGVjb2Rlcl9mdXRleCwgMSwgMH0sCisJW0RSTV9JT0NUTF9OUihEUk1fVklBX0RNQV9JTklUKV0gPSB7dmlhX2RtYV9pbml0LCAxLCAwfSwKKwlbRFJNX0lPQ1RMX05SKERSTV9WSUFfQ01EQlVGRkVSKV0gPSB7dmlhX2NtZGJ1ZmZlciwgMSwgMH0sCisJW0RSTV9JT0NUTF9OUihEUk1fVklBX0ZMVVNIKV0gPSB7dmlhX2ZsdXNoX2lvY3RsLCAxLCAwfSwKKwlbRFJNX0lPQ1RMX05SKERSTV9WSUFfUENJQ01EKV0gPSB7dmlhX3BjaV9jbWRidWZmZXIsIDEsIDB9LAorCVtEUk1fSU9DVExfTlIoRFJNX1ZJQV9DTURCVUZfU0laRSldID0ge3ZpYV9jbWRidWZfc2l6ZSwgMSwgMH0sCisJW0RSTV9JT0NUTF9OUihEUk1fVklBX1dBSVRfSVJRKV0gPSB7dmlhX3dhaXRfaXJxLCAxLCAwfQorfTsKKworc3RhdGljIHN0cnVjdCBkcm1fZHJpdmVyIGRyaXZlciA9IHsKKwkuZHJpdmVyX2ZlYXR1cmVzID0KKwkgICAgRFJJVkVSX1VTRV9BR1AgfCBEUklWRVJfVVNFX01UUlIgfCBEUklWRVJfSEFWRV9JUlEgfAorCSAgICBEUklWRVJfSVJRX1NIQVJFRCB8IERSSVZFUl9JUlFfVkJMLAorCS5jb250ZXh0X2N0b3IgPSB2aWFfaW5pdF9jb250ZXh0LAorCS5jb250ZXh0X2R0b3IgPSB2aWFfZmluYWxfY29udGV4dCwKKwkudmJsYW5rX3dhaXQgPSB2aWFfZHJpdmVyX3ZibGFua193YWl0LAorCS5pcnFfcHJlaW5zdGFsbCA9IHZpYV9kcml2ZXJfaXJxX3ByZWluc3RhbGwsCisJLmlycV9wb3N0aW5zdGFsbCA9IHZpYV9kcml2ZXJfaXJxX3Bvc3RpbnN0YWxsLAorCS5pcnFfdW5pbnN0YWxsID0gdmlhX2RyaXZlcl9pcnFfdW5pbnN0YWxsLAorCS5pcnFfaGFuZGxlciA9IHZpYV9kcml2ZXJfaXJxX2hhbmRsZXIsCisJLmRtYV9xdWllc2NlbnQgPSB2aWFfZHJpdmVyX2RtYV9xdWllc2NlbnQsCisJLnJlY2xhaW1fYnVmZmVycyA9IGRybV9jb3JlX3JlY2xhaW1fYnVmZmVycywKKwkuZ2V0X21hcF9vZnMgPSBkcm1fY29yZV9nZXRfbWFwX29mcywKKwkuZ2V0X3JlZ19vZnMgPSBkcm1fY29yZV9nZXRfcmVnX29mcywKKwkucG9zdGluaXQgPSBwb3N0aW5pdCwKKwkudmVyc2lvbiA9IHZlcnNpb24sCisJLmlvY3RscyA9IGlvY3RscywKKwkubnVtX2lvY3RscyA9IERSTV9BUlJBWV9TSVpFKGlvY3RscyksCisJLmZvcHMgPSB7CisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCQkub3BlbiA9IGRybV9vcGVuLAorCQkucmVsZWFzZSA9IGRybV9yZWxlYXNlLAorCQkuaW9jdGwgPSBkcm1faW9jdGwsCisJCS5tbWFwID0gZHJtX21tYXAsCisJCS5wb2xsID0gZHJtX3BvbGwsCisJCS5mYXN5bmMgPSBkcm1fZmFzeW5jLAorCQl9LAorCS5wY2lfZHJpdmVyID0geworCQkubmFtZSA9IERSSVZFUl9OQU1FLAorCQkuaWRfdGFibGUgPSBwY2lpZGxpc3QsCisJfQorfTsKKworc3RhdGljIGludCBfX2luaXQgdmlhX2luaXQodm9pZCkKK3sKKwl2aWFfaW5pdF9jb21tYW5kX3ZlcmlmaWVyKCk7CisJcmV0dXJuIGRybV9pbml0KCZkcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgdmlhX2V4aXQodm9pZCkKK3sKKwlkcm1fZXhpdCgmZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQodmlhX2luaXQpOworbW9kdWxlX2V4aXQodmlhX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKERSSVZFUl9BVVRIT1IpOworTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgYW5kIGFkZGl0aW9uYWwgcmlnaHRzIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL3ZpYV9kcnYuaCBiL2RyaXZlcnMvY2hhci9kcm0vdmlhX2Rydi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlYWE4YjcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2NoYXIvZHJtL3ZpYV9kcnYuaApAQCAtMCwwICsxLDExOCBAQAorLyoKKyAqIENvcHlyaWdodCAxOTk4LTIwMDMgVklBIFRlY2hub2xvZ2llcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IDIwMDEtMjAwMyBTMyBHcmFwaGljcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YiBsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlCisgKiBuZXh0IHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucworICogb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT04tSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTAorICogVklBLCBTMyBHUkFQSElDUywgQU5EL09SIElUUyBTVVBQTElFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCisgKiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKi8KKyNpZm5kZWYgX1ZJQV9EUlZfSF8KKyNkZWZpbmUgX1ZJQV9EUlZfSF8KKworI2RlZmluZSBEUklWRVJfQVVUSE9SCSJWSUEiCisKKyNkZWZpbmUgRFJJVkVSX05BTUUJCSJ2aWEiCisjZGVmaW5lIERSSVZFUl9ERVNDCQkiVklBIFVuaWNocm9tZSAvIFBybyIKKyNkZWZpbmUgRFJJVkVSX0RBVEUJCSIyMDA1MDUyMyIKKworI2RlZmluZSBEUklWRVJfTUFKT1IJCTIKKyNkZWZpbmUgRFJJVkVSX01JTk9SCQk2CisjZGVmaW5lIERSSVZFUl9QQVRDSExFVkVMCTMKKworI2luY2x1ZGUgInZpYV92ZXJpZmllci5oIgorCisjZGVmaW5lIFZJQV9QQ0lfQlVGX1NJWkUgNjAwMDAKKyNkZWZpbmUgVklBX0ZJUkVfQlVGX1NJWkUgIDEwMjQKKyNkZWZpbmUgVklBX05VTV9JUlFTIDIKKworCisKK3R5cGVkZWYgc3RydWN0IGRybV92aWFfcmluZ19idWZmZXIgeworCWRybV9tYXBfdCBtYXA7CisJY2hhciAqdmlydHVhbF9zdGFydDsKK30gZHJtX3ZpYV9yaW5nX2J1ZmZlcl90OworCit0eXBlZGVmIHVpbnQzMl90IG1hc2thcnJheV90WzVdOworCit0eXBlZGVmIHN0cnVjdCBkcm1fdmlhX2lycSB7CisJYXRvbWljX3QgaXJxX3JlY2VpdmVkOworCXVpbnQzMl90IHBlbmRpbmdfbWFzazsKKwl1aW50MzJfdCBlbmFibGVfbWFzazsKKwl3YWl0X3F1ZXVlX2hlYWRfdCBpcnFfcXVldWU7Cit9IGRybV92aWFfaXJxX3Q7CisJCit0eXBlZGVmIHN0cnVjdCBkcm1fdmlhX3ByaXZhdGUgeworCWRybV92aWFfc2FyZWFfdCAqc2FyZWFfcHJpdjsKKwlkcm1fbWFwX3QgKnNhcmVhOworCWRybV9tYXBfdCAqZmI7CisJZHJtX21hcF90ICptbWlvOworCXVuc2lnbmVkIGxvbmcgYWdwQWRkcjsKKwl3YWl0X3F1ZXVlX2hlYWRfdCBkZWNvZGVyX3F1ZXVlW1ZJQV9OUl9YVk1DX0xPQ0tTXTsKKwljaGFyICpkbWFfcHRyOworCXVuc2lnbmVkIGludCBkbWFfbG93OworCXVuc2lnbmVkIGludCBkbWFfaGlnaDsKKwl1bnNpZ25lZCBpbnQgZG1hX29mZnNldDsKKwl1aW50MzJfdCBkbWFfd3JhcDsKKwl2b2xhdGlsZSB1aW50MzJfdCAqbGFzdF9wYXVzZV9wdHI7CisJdm9sYXRpbGUgdWludDMyX3QgKmh3X2FkZHJfcHRyOworCWRybV92aWFfcmluZ19idWZmZXJfdCByaW5nOworICAgICAgICBzdHJ1Y3QgdGltZXZhbCBsYXN0X3ZibGFuazsKKyAgICAgICAgaW50IGxhc3RfdmJsYW5rX3ZhbGlkOworICAgICAgICB1bnNpZ25lZCB1c2VjX3Blcl92Ymxhbms7CisJZHJtX3ZpYV9zdGF0ZV90IGhjX3N0YXRlOworCWNoYXIgcGNpX2J1ZltWSUFfUENJX0JVRl9TSVpFXTsKKwljb25zdCB1aW50MzJfdCAqZmlyZV9vZmZzZXRzW1ZJQV9GSVJFX0JVRl9TSVpFXTsKKwl1aW50MzJfdCBudW1fZmlyZV9vZmZzZXRzOworCWludCBwcm9fZ3JvdXBfYTsKKwlkcm1fdmlhX2lycV90IHZpYV9pcnFzW1ZJQV9OVU1fSVJRU107CisJdW5zaWduZWQgbnVtX2lycXM7CisJbWFza2FycmF5X3QgKmlycV9tYXNrczsKKwl1aW50MzJfdCBpcnFfZW5hYmxlX21hc2s7IAorCXVpbnQzMl90IGlycV9wZW5kaW5nX21hc2s7CQorfSBkcm1fdmlhX3ByaXZhdGVfdDsKKworLyogVklBIE1NSU8gcmVnaXN0ZXIgYWNjZXNzICovCisjZGVmaW5lIFZJQV9CQVNFICgoZGV2X3ByaXYtPm1taW8pKQorCisjZGVmaW5lIFZJQV9SRUFEKHJlZykJCURSTV9SRUFEMzIoVklBX0JBU0UsIHJlZykKKyNkZWZpbmUgVklBX1dSSVRFKHJlZyx2YWwpCURSTV9XUklURTMyKFZJQV9CQVNFLCByZWcsIHZhbCkKKyNkZWZpbmUgVklBX1JFQUQ4KHJlZykJCURSTV9SRUFEOChWSUFfQkFTRSwgcmVnKQorI2RlZmluZSBWSUFfV1JJVEU4KHJlZyx2YWwpCURSTV9XUklURTgoVklBX0JBU0UsIHJlZywgdmFsKQorCitleHRlcm4gaW50IHZpYV9pbml0X2NvbnRleHQoZHJtX2RldmljZV90ICogZGV2LCBpbnQgY29udGV4dCk7CitleHRlcm4gaW50IHZpYV9maW5hbF9jb250ZXh0KGRybV9kZXZpY2VfdCAqIGRldiwgaW50IGNvbnRleHQpOworCitleHRlcm4gaW50IHZpYV9kb19jbGVhbnVwX21hcChkcm1fZGV2aWNlX3QgKiBkZXYpOworZXh0ZXJuIGludCB2aWFfbWFwX2luaXQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsCisJCQl1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CitleHRlcm4gaW50IHZpYV9kcml2ZXJfdmJsYW5rX3dhaXQoZHJtX2RldmljZV90ICogZGV2LCB1bnNpZ25lZCBpbnQgKnNlcXVlbmNlKTsKKworZXh0ZXJuIGlycXJldHVybl90IHZpYV9kcml2ZXJfaXJxX2hhbmRsZXIoRFJNX0lSUV9BUkdTKTsKK2V4dGVybiB2b2lkIHZpYV9kcml2ZXJfaXJxX3ByZWluc3RhbGwoZHJtX2RldmljZV90ICogZGV2KTsKK2V4dGVybiB2b2lkIHZpYV9kcml2ZXJfaXJxX3Bvc3RpbnN0YWxsKGRybV9kZXZpY2VfdCAqIGRldik7CitleHRlcm4gdm9pZCB2aWFfZHJpdmVyX2lycV91bmluc3RhbGwoZHJtX2RldmljZV90ICogZGV2KTsKKworZXh0ZXJuIGludCB2aWFfZG1hX2NsZWFudXAoZHJtX2RldmljZV90ICogZGV2KTsKK2V4dGVybiB2b2lkIHZpYV9pbml0X2NvbW1hbmRfdmVyaWZpZXIodm9pZCk7CitleHRlcm4gaW50IHZpYV9kcml2ZXJfZG1hX3F1aWVzY2VudChkcm1fZGV2aWNlX3QgKiBkZXYpOworZXh0ZXJuIHZvaWQgdmlhX2luaXRfZnV0ZXgoZHJtX3ZpYV9wcml2YXRlX3QgKmRldl9wcml2KTsKK2V4dGVybiB2b2lkIHZpYV9jbGVhbnVwX2Z1dGV4KGRybV92aWFfcHJpdmF0ZV90ICpkZXZfcHJpdik7CitleHRlcm4gdm9pZCB2aWFfcmVsZWFzZV9mdXRleChkcm1fdmlhX3ByaXZhdGVfdCAqZGV2X3ByaXYsIGludCBjb250ZXh0KTsKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vdmlhX2RzLmMgYi9kcml2ZXJzL2NoYXIvZHJtL3ZpYV9kcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhZjNkZjcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2NoYXIvZHJtL3ZpYV9kcy5jCkBAIC0wLDAgKzEsMjgwIEBACisvKgorICogQ29weXJpZ2h0IDE5OTgtMjAwMyBWSUEgVGVjaG5vbG9naWVzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgMjAwMS0yMDAzIFMzIEdyYXBoaWNzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgMjAwMCBTaWxpY29uIEludGVncmF0ZWQgU3lzdGVtcyBDb3JwLCBJbmMuLCBIc2luQ2h1LCBUYWl3YW4uCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3ViIGxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUKKyAqIG5leHQgcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zCisgKiBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTi1JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMCisgKiBWSUEsIFMzIEdSQVBISUNTLCBBTkQvT1IgSVRTIFNVUFBMSUVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCisgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIKKyAqIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvcG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorCisjaW5jbHVkZSAidmlhX2RzLmgiCitleHRlcm4gdW5zaWduZWQgaW50IFZJQV9ERUJVRzsKKworc2V0X3QgKnZpYV9zZXRJbml0KHZvaWQpCit7CisJaW50IGk7CisJc2V0X3QgKnNldDsKKwlzZXQgPSAoc2V0X3QgKikgZHJtX2FsbG9jKHNpemVvZihzZXRfdCksIERSTV9NRU1fRFJJVkVSKTsKKwlmb3IgKGkgPSAwOyBpIDwgU0VUX1NJWkU7IGkrKykgeworCQlzZXQtPmxpc3RbaV0uZnJlZV9uZXh0ID0gaSArIDE7CisJCXNldC0+bGlzdFtpXS5hbGxvY19uZXh0ID0gLTE7CisJfQorCXNldC0+bGlzdFtTRVRfU0laRSAtIDFdLmZyZWVfbmV4dCA9IC0xOworCXNldC0+ZnJlZSA9IDA7CisJc2V0LT5hbGxvYyA9IC0xOworCXNldC0+dHJhY2UgPSAtMTsKKwlyZXR1cm4gc2V0OworfQorCitpbnQgdmlhX3NldEFkZChzZXRfdCAqIHNldCwgSVRFTV9UWVBFIGl0ZW0pCit7CisJaW50IGZyZWUgPSBzZXQtPmZyZWU7CisJaWYgKGZyZWUgIT0gLTEpIHsKKwkJc2V0LT5saXN0W2ZyZWVdLnZhbCA9IGl0ZW07CisJCXNldC0+ZnJlZSA9IHNldC0+bGlzdFtmcmVlXS5mcmVlX25leHQ7CisJfSBlbHNlIHsKKwkJcmV0dXJuIDA7CisJfQorCXNldC0+bGlzdFtmcmVlXS5hbGxvY19uZXh0ID0gc2V0LT5hbGxvYzsKKwlzZXQtPmFsbG9jID0gZnJlZTsKKwlzZXQtPmxpc3RbZnJlZV0uZnJlZV9uZXh0ID0gLTE7CisJcmV0dXJuIDE7Cit9CisKK2ludCB2aWFfc2V0RGVsKHNldF90ICogc2V0LCBJVEVNX1RZUEUgaXRlbSkKK3sKKwlpbnQgYWxsb2MgPSBzZXQtPmFsbG9jOworCWludCBwcmV2ID0gLTE7CisKKwl3aGlsZSAoYWxsb2MgIT0gLTEpIHsKKwkJaWYgKHNldC0+bGlzdFthbGxvY10udmFsID09IGl0ZW0pIHsKKwkJCWlmIChwcmV2ICE9IC0xKQorCQkJCXNldC0+bGlzdFtwcmV2XS5hbGxvY19uZXh0ID0KKwkJCQkgICAgc2V0LT5saXN0W2FsbG9jXS5hbGxvY19uZXh0OworCQkJZWxzZQorCQkJCXNldC0+YWxsb2MgPSBzZXQtPmxpc3RbYWxsb2NdLmFsbG9jX25leHQ7CisJCQlicmVhazsKKwkJfQorCQlwcmV2ID0gYWxsb2M7CisJCWFsbG9jID0gc2V0LT5saXN0W2FsbG9jXS5hbGxvY19uZXh0OworCX0KKworCWlmIChhbGxvYyA9PSAtMSkKKwkJcmV0dXJuIDA7CisKKwlzZXQtPmxpc3RbYWxsb2NdLmZyZWVfbmV4dCA9IHNldC0+ZnJlZTsKKwlzZXQtPmZyZWUgPSBhbGxvYzsKKwlzZXQtPmxpc3RbYWxsb2NdLmFsbG9jX25leHQgPSAtMTsKKworCXJldHVybiAxOworfQorCisvKiBzZXRGaXJzdCAtPiBzZXRBZGQgLT4gc2V0TmV4dCBpcyB3cm9uZyAqLworCitpbnQgdmlhX3NldEZpcnN0KHNldF90ICogc2V0LCBJVEVNX1RZUEUgKiBpdGVtKQoreworCWlmIChzZXQtPmFsbG9jID09IC0xKQorCQlyZXR1cm4gMDsKKworCSppdGVtID0gc2V0LT5saXN0W3NldC0+YWxsb2NdLnZhbDsKKwlzZXQtPnRyYWNlID0gc2V0LT5saXN0W3NldC0+YWxsb2NdLmFsbG9jX25leHQ7CisKKwlyZXR1cm4gMTsKK30KKworaW50IHZpYV9zZXROZXh0KHNldF90ICogc2V0LCBJVEVNX1RZUEUgKiBpdGVtKQoreworCWlmIChzZXQtPnRyYWNlID09IC0xKQorCQlyZXR1cm4gMDsKKworCSppdGVtID0gc2V0LT5saXN0W3NldC0+dHJhY2VdLnZhbDsKKwlzZXQtPnRyYWNlID0gc2V0LT5saXN0W3NldC0+dHJhY2VdLmFsbG9jX25leHQ7CisKKwlyZXR1cm4gMTsKK30KKworaW50IHZpYV9zZXREZXN0cm95KHNldF90ICogc2V0KQoreworCWRybV9mcmVlKHNldCwgc2l6ZW9mKHNldF90KSwgRFJNX01FTV9EUklWRVIpOworCisJcmV0dXJuIDE7Cit9CisKKyNkZWZpbmUgSVNGUkVFKGJwdHIpICgoYnB0ciktPmZyZWUpCisKKyNkZWZpbmUgZnByaW50ZihmbXQsIGFyZy4uLikgZG97fXdoaWxlKDApCisKK21lbUhlYXBfdCAqdmlhX21tSW5pdChpbnQgb2ZzLCBpbnQgc2l6ZSkKK3sKKwlQTWVtQmxvY2sgYmxvY2tzOworCisJaWYgKHNpemUgPD0gMCkKKwkJcmV0dXJuIDA7CisKKwlibG9ja3MgPSAoVE1lbUJsb2NrICopIGRybV9jYWxsb2MoMSwgc2l6ZW9mKFRNZW1CbG9jayksIERSTV9NRU1fRFJJVkVSKTsKKworCWlmIChibG9ja3MpIHsKKwkJYmxvY2tzLT5vZnMgPSBvZnM7CisJCWJsb2Nrcy0+c2l6ZSA9IHNpemU7CisJCWJsb2Nrcy0+ZnJlZSA9IDE7CisJCXJldHVybiAobWVtSGVhcF90ICopIGJsb2NrczsKKwl9IGVsc2UKKwkJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBUTWVtQmxvY2sgKlNsaWNlQmxvY2soVE1lbUJsb2NrICogcCwKKwkJCSAgICAgaW50IHN0YXJ0b2ZzLCBpbnQgc2l6ZSwKKwkJCSAgICAgaW50IHJlc2VydmVkLCBpbnQgYWxpZ25tZW50KQoreworCVRNZW1CbG9jayAqbmV3YmxvY2s7CisKKwkvKiBicmVhayBsZWZ0ICovCisJaWYgKHN0YXJ0b2ZzID4gcC0+b2ZzKSB7CisJCW5ld2Jsb2NrID0KKwkJICAgIChUTWVtQmxvY2sgKikgZHJtX2NhbGxvYygxLCBzaXplb2YoVE1lbUJsb2NrKSwKKwkJCQkJICAgICBEUk1fTUVNX0RSSVZFUik7CisJCW5ld2Jsb2NrLT5vZnMgPSBzdGFydG9mczsKKwkJbmV3YmxvY2stPnNpemUgPSBwLT5zaXplIC0gKHN0YXJ0b2ZzIC0gcC0+b2ZzKTsKKwkJbmV3YmxvY2stPmZyZWUgPSAxOworCQluZXdibG9jay0+bmV4dCA9IHAtPm5leHQ7CisJCXAtPnNpemUgLT0gbmV3YmxvY2stPnNpemU7CisJCXAtPm5leHQgPSBuZXdibG9jazsKKwkJcCA9IG5ld2Jsb2NrOworCX0KKworCS8qIGJyZWFrIHJpZ2h0ICovCisJaWYgKHNpemUgPCBwLT5zaXplKSB7CisJCW5ld2Jsb2NrID0KKwkJICAgIChUTWVtQmxvY2sgKikgZHJtX2NhbGxvYygxLCBzaXplb2YoVE1lbUJsb2NrKSwKKwkJCQkJICAgICBEUk1fTUVNX0RSSVZFUik7CisJCW5ld2Jsb2NrLT5vZnMgPSBzdGFydG9mcyArIHNpemU7CisJCW5ld2Jsb2NrLT5zaXplID0gcC0+c2l6ZSAtIHNpemU7CisJCW5ld2Jsb2NrLT5mcmVlID0gMTsKKwkJbmV3YmxvY2stPm5leHQgPSBwLT5uZXh0OworCQlwLT5zaXplID0gc2l6ZTsKKwkJcC0+bmV4dCA9IG5ld2Jsb2NrOworCX0KKworCS8qIHAgPSBtaWRkbGUgYmxvY2sgKi8KKwlwLT5hbGlnbiA9IGFsaWdubWVudDsKKwlwLT5mcmVlID0gMDsKKwlwLT5yZXNlcnZlZCA9IHJlc2VydmVkOworCXJldHVybiBwOworfQorCitQTWVtQmxvY2sgdmlhX21tQWxsb2NNZW0obWVtSGVhcF90ICogaGVhcCwgaW50IHNpemUsIGludCBhbGlnbjIsCisJCQkgaW50IHN0YXJ0U2VhcmNoKQoreworCWludCBtYXNrLCBzdGFydG9mcywgZW5kb2ZzOworCVRNZW1CbG9jayAqcDsKKworCWlmICghaGVhcCB8fCBhbGlnbjIgPCAwIHx8IHNpemUgPD0gMCkKKwkJcmV0dXJuIE5VTEw7CisKKwltYXNrID0gKDEgPDwgYWxpZ24yKSAtIDE7CisJc3RhcnRvZnMgPSAwOworCXAgPSAoVE1lbUJsb2NrICopIGhlYXA7CisKKwl3aGlsZSAocCkgeworCQlpZiAoSVNGUkVFKHApKSB7CisJCQlzdGFydG9mcyA9IChwLT5vZnMgKyBtYXNrKSAmIH5tYXNrOworCisJCQlpZiAoc3RhcnRvZnMgPCBzdGFydFNlYXJjaCkKKwkJCQlzdGFydG9mcyA9IHN0YXJ0U2VhcmNoOworCisJCQllbmRvZnMgPSBzdGFydG9mcyArIHNpemU7CisKKwkJCWlmIChlbmRvZnMgPD0gKHAtPm9mcyArIHAtPnNpemUpKQorCQkJCWJyZWFrOworCQl9CisKKwkJcCA9IHAtPm5leHQ7CisJfQorCisJaWYgKCFwKQorCQlyZXR1cm4gTlVMTDsKKworCXAgPSBTbGljZUJsb2NrKHAsIHN0YXJ0b2ZzLCBzaXplLCAwLCBtYXNrICsgMSk7CisJcC0+aGVhcCA9IGhlYXA7CisKKwlyZXR1cm4gcDsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IEpvaW4yQmxvY2tzKFRNZW1CbG9jayAqIHApCit7CisJaWYgKHAtPmZyZWUgJiYgcC0+bmV4dCAmJiBwLT5uZXh0LT5mcmVlKSB7CisJCVRNZW1CbG9jayAqcSA9IHAtPm5leHQ7CisJCXAtPnNpemUgKz0gcS0+c2l6ZTsKKwkJcC0+bmV4dCA9IHEtPm5leHQ7CisJCWRybV9mcmVlKHEsIHNpemVvZihUTWVtQmxvY2spLCBEUk1fTUVNX0RSSVZFUik7CisKKwkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2ludCB2aWFfbW1GcmVlTWVtKFBNZW1CbG9jayBiKQoreworCVRNZW1CbG9jayAqcCwgKnByZXY7CisKKwlpZiAoIWIpCisJCXJldHVybiAwOworCisJaWYgKCFiLT5oZWFwKSB7CisJCWZwcmludGYoc3RkZXJyLCAibm8gaGVhcFxuIik7CisKKwkJcmV0dXJuIC0xOworCX0KKworCXAgPSBiLT5oZWFwOworCXByZXYgPSBOVUxMOworCisJd2hpbGUgKHAgJiYgcCAhPSBiKSB7CisJCXByZXYgPSBwOworCQlwID0gcC0+bmV4dDsKKwl9CisKKwlpZiAoIXAgfHwgcC0+ZnJlZSB8fCBwLT5yZXNlcnZlZCkgeworCQlpZiAoIXApCisJCQlmcHJpbnRmKHN0ZGVyciwgImJsb2NrIG5vdCBmb3VuZCBpbiBoZWFwXG4iKTsKKwkJZWxzZSBpZiAocC0+ZnJlZSkKKwkJCWZwcmludGYoc3RkZXJyLCAiYmxvY2sgYWxyZWFkeSBmcmVlXG4iKTsKKwkJZWxzZQorCQkJZnByaW50ZihzdGRlcnIsICJibG9jayBpcyByZXNlcnZlZFxuIik7CisKKwkJcmV0dXJuIC0xOworCX0KKworCXAtPmZyZWUgPSAxOworCUpvaW4yQmxvY2tzKHApOworCisJaWYgKHByZXYpCisJCUpvaW4yQmxvY2tzKHByZXYpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL3ZpYV9kcy5oIGIvZHJpdmVycy9jaGFyL2RybS92aWFfZHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTljN2Y5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9jaGFyL2RybS92aWFfZHMuaApAQCAtMCwwICsxLDEwNCBAQAorLyoKKyAqIENvcHlyaWdodCAxOTk4LTIwMDMgVklBIFRlY2hub2xvZ2llcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IDIwMDEtMjAwMyBTMyBHcmFwaGljcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IDIwMDAgU2lsaWNvbiBJbnRlZ3JhdGVkIFN5c3RlbXMgQ29ycCwgSW5jLiwgSHNpbkNodSwgVGFpd2FuLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWIgbGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZQorICogbmV4dCBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMKKyAqIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFZJQSwgUzMgR1JBUEhJQ1MsIEFORC9PUiBJVFMgU1VQUExJRVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUgorICogREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICovCisjaWZuZGVmIF92aWFfZHNfaF8KKyNkZWZpbmUgX3ZpYV9kc19oXworCisjaW5jbHVkZSAiZHJtUC5oIgorCisvKiBTZXQgRGF0YSBTdHJ1Y3R1cmUgKi8KKyNkZWZpbmUgU0VUX1NJWkUgNTAwMAordHlwZWRlZiB1bnNpZ25lZCBsb25nIElURU1fVFlQRTsKKwordHlwZWRlZiBzdHJ1Y3QgeworCUlURU1fVFlQRSB2YWw7CisJaW50IGFsbG9jX25leHQsIGZyZWVfbmV4dDsKK30gbGlzdF9pdGVtX3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKwlpbnQgYWxsb2M7CisJaW50IGZyZWU7CisJaW50IHRyYWNlOworCWxpc3RfaXRlbV90IGxpc3RbU0VUX1NJWkVdOworfSBzZXRfdDsKKworc2V0X3QgKnZpYV9zZXRJbml0KHZvaWQpOworaW50IHZpYV9zZXRBZGQoc2V0X3QgKiBzZXQsIElURU1fVFlQRSBpdGVtKTsKK2ludCB2aWFfc2V0RGVsKHNldF90ICogc2V0LCBJVEVNX1RZUEUgaXRlbSk7CitpbnQgdmlhX3NldEZpcnN0KHNldF90ICogc2V0LCBJVEVNX1RZUEUgKiBpdGVtKTsKK2ludCB2aWFfc2V0TmV4dChzZXRfdCAqIHNldCwgSVRFTV9UWVBFICogaXRlbSk7CitpbnQgdmlhX3NldERlc3Ryb3koc2V0X3QgKiBzZXQpOworCisjZW5kaWYKKworI2lmbmRlZiBNTV9JTkMKKyNkZWZpbmUgTU1fSU5DCisKK3N0cnVjdCBtZW1fYmxvY2tfdCB7CisJc3RydWN0IG1lbV9ibG9ja190ICpuZXh0OworCXN0cnVjdCBtZW1fYmxvY2tfdCAqaGVhcDsKKwlpbnQgb2ZzLCBzaXplOworCWludCBhbGlnbjsKKwlpbnQgZnJlZToxOworCWludCByZXNlcnZlZDoxOworfTsKK3R5cGVkZWYgc3RydWN0IG1lbV9ibG9ja190IFRNZW1CbG9jazsKK3R5cGVkZWYgc3RydWN0IG1lbV9ibG9ja190ICpQTWVtQmxvY2s7CisKKy8qIGEgaGVhcCBpcyBqdXN0IHRoZSBmaXJzdCBibG9jayBpbiBhIGNoYWluICovCit0eXBlZGVmIHN0cnVjdCBtZW1fYmxvY2tfdCBtZW1IZWFwX3Q7CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBtbUJsb2NrU2l6ZShQTWVtQmxvY2sgYikKK3sKKwlyZXR1cm4gYi0+c2l6ZTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IG1tT2Zmc2V0KFBNZW1CbG9jayBiKQoreworCXJldHVybiBiLT5vZnM7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgbW1NYXJrUmVzZXJ2ZWQoUE1lbUJsb2NrIGIpCit7CisJYi0+cmVzZXJ2ZWQgPSAxOworfQorCisvKgorICogaW5wdXQ6IHRvdGFsIHNpemUgaW4gYnl0ZXMKKyAqIHJldHVybjogYSBoZWFwIHBvaW50ZXIgaWYgT0ssIE5VTEwgaWYgZXJyb3IKKyAqLworbWVtSGVhcF90ICp2aWFfbW1Jbml0KGludCBvZnMsIGludCBzaXplKTsKKworUE1lbUJsb2NrIHZpYV9tbUFsbG9jTWVtKG1lbUhlYXBfdCAqIGhlYXAsIGludCBzaXplLCBpbnQgYWxpZ24yLAorCQkJIGludCBzdGFydFNlYXJjaCk7CisKKy8qCisgKiBGcmVlIGJsb2NrIHN0YXJ0cyBhdCBvZmZzZXQKKyAqIGlucHV0OiBwb2ludGVyIHRvIGEgYmxvY2sKKyAqIHJldHVybjogMCBpZiBPSywgLTEgaWYgZXJyb3IKKyAqLworaW50IHZpYV9tbUZyZWVNZW0oUE1lbUJsb2NrIGIpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vdmlhX2lycS5jIGIvZHJpdmVycy9jaGFyL2RybS92aWFfaXJxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTgwMjdmMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vdmlhX2lycS5jCkBAIC0wLDAgKzEsMzM5IEBACisvKiB2aWFfaXJxLmMKKyAqCisgKiBDb3B5cmlnaHQgMjAwNCBCRUFNIEx0ZC4KKyAqIENvcHlyaWdodCAyMDAyIFR1bmdzdGVuIEdyYXBoaWNzLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwNSBUaG9tYXMgSGVsbHN0cm9tLgorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogQkVBTSBMVEQsIFRVTkdTVEVOIEdSQVBISUNTICBBTkQvT1IgSVRTIFNVUFBMSUVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwKKyAqIERBTUFHRVMgT1IKKyAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCisgKiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0aG9yczoKKyAqICAgIFRlcnJ5IEJhcm5hYnkgPHRlcnJ5MUBiZWFtLmx0ZC51az4KKyAqICAgIEtlaXRoIFdoaXR3ZWxsIDxrZWl0aEB0dW5nc3RlbmdyYXBoaWNzLmNvbT4KKyAqICAgIFRob21hcyBIZWxsc3Ryb20gPHVuaWNocm9tZUBzaGlwbWFpbC5vcmc+CisgKgorICogVGhpcyBjb2RlIHByb3ZpZGVzIHN0YW5kYXJkIERSTSBhY2Nlc3MgdG8gdGhlIFZpYSBVbmljaHJvbWUgLyBQcm8gVmVydGljYWwgYmxhbmsKKyAqIGludGVycnVwdCwgYXMgd2VsbCBhcyBhbiBpbmZyYXN0cnVjdHVyZSB0byBoYW5kbGUgb3RoZXIgaW50ZXJydXB0cyBvZiB0aGUgY2hpcC4KKyAqIFRoZSByZWZyZXNoIHJhdGUgaXMgYWxzbyBjYWxjdWxhdGVkIGZvciB2aWRlbyBwbGF5YmFjayBzeW5jIHB1cnBvc2VzLgorICovCisKKyNpbmNsdWRlICJkcm1QLmgiCisjaW5jbHVkZSAiZHJtLmgiCisjaW5jbHVkZSAidmlhX2RybS5oIgorI2luY2x1ZGUgInZpYV9kcnYuaCIKKworI2RlZmluZSBWSUFfUkVHX0lOVEVSUlVQVCAgICAgICAweDIwMAorCisvKiBWSUFfUkVHX0lOVEVSUlVQVCAqLworI2RlZmluZSBWSUFfSVJRX0dMT0JBTCAgICAgICAgICAoMSA8PCAzMSkKKyNkZWZpbmUgVklBX0lSUV9WQkxBTktfRU5BQkxFICAgKDEgPDwgMTkpCisjZGVmaW5lIFZJQV9JUlFfVkJMQU5LX1BFTkRJTkcgICgxIDw8IDMpCisjZGVmaW5lIFZJQV9JUlFfSFFWMF9FTkFCTEUgICAgICgxIDw8IDExKQorI2RlZmluZSBWSUFfSVJRX0hRVjFfRU5BQkxFICAgICAoMSA8PCAyNSkKKyNkZWZpbmUgVklBX0lSUV9IUVYwX1BFTkRJTkcgICAgKDEgPDwgOSkKKyNkZWZpbmUgVklBX0lSUV9IUVYxX1BFTkRJTkcgICAgKDEgPDwgMTApCisKKy8qCisgKiBEZXZpY2Utc3BlY2lmaWMgSVJRcyBnbyBoZXJlLiBUaGlzIHR5cGUgbWlnaHQgbmVlZCB0byBiZSBleHRlbmRlZCB3aXRoCisgKiB0aGUgcmVnaXN0ZXIgaWYgdGhlcmUgYXJlIG11bHRpcGxlIElSUSBjb250cm9sIHJlZ2lzdGVycy4KKyAqIEN1cnJlbnRseSB3ZSBhY3RpdmF0ZSB0aGUgSFFWIGludGVycnVwdHMgb2YgIFVuaWNocm9tZSBQcm8gZ3JvdXAgQS4gCisgKi8KKworc3RhdGljIG1hc2thcnJheV90IHZpYV9wcm9fZ3JvdXBfYV9pcnFzW10gPSB7CisJe1ZJQV9JUlFfSFFWMF9FTkFCTEUsIFZJQV9JUlFfSFFWMF9QRU5ESU5HLCAweDAwMDAwM0QwLCAweDAwMDA4MDEwLCAweDAwMDAwMDAwIH0sCisJe1ZJQV9JUlFfSFFWMV9FTkFCTEUsIFZJQV9JUlFfSFFWMV9QRU5ESU5HLCAweDAwMDAxM0QwLCAweDAwMDA4MDEwLCAweDAwMDAwMDAwIH19Oworc3RhdGljIGludCB2aWFfbnVtX3Byb19ncm91cF9hID0gc2l6ZW9mKHZpYV9wcm9fZ3JvdXBfYV9pcnFzKS9zaXplb2YobWFza2FycmF5X3QpOworCitzdGF0aWMgbWFza2FycmF5X3QgdmlhX3VuaWNocm9tZV9pcnFzW10gPSB7fTsKK3N0YXRpYyBpbnQgdmlhX251bV91bmljaHJvbWUgPSBzaXplb2YodmlhX3VuaWNocm9tZV9pcnFzKS9zaXplb2YobWFza2FycmF5X3QpOworCisKK3N0YXRpYyB1bnNpZ25lZCB0aW1lX2RpZmYoc3RydWN0IHRpbWV2YWwgKm5vdyxzdHJ1Y3QgdGltZXZhbCAqdGhlbikgCit7CisgICAgcmV0dXJuIChub3ctPnR2X3VzZWMgPj0gdGhlbi0+dHZfdXNlYykgPworICAgICAgICBub3ctPnR2X3VzZWMgLSB0aGVuLT50dl91c2VjIDoKKyAgICAgICAgMTAwMDAwMCAtICh0aGVuLT50dl91c2VjIC0gbm93LT50dl91c2VjKTsKK30KKworaXJxcmV0dXJuX3QgdmlhX2RyaXZlcl9pcnFfaGFuZGxlcihEUk1fSVJRX0FSR1MpCit7CisJZHJtX2RldmljZV90ICpkZXYgPSAoZHJtX2RldmljZV90ICopIGFyZzsKKwlkcm1fdmlhX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSAoZHJtX3ZpYV9wcml2YXRlX3QgKikgZGV2LT5kZXZfcHJpdmF0ZTsKKwl1MzIgc3RhdHVzOworCWludCBoYW5kbGVkID0gMDsKKwlzdHJ1Y3QgdGltZXZhbCBjdXJfdmJsYW5rOworCWRybV92aWFfaXJxX3QgKmN1cl9pcnEgPSBkZXZfcHJpdi0+dmlhX2lycXM7CisJaW50IGk7CisKKwlzdGF0dXMgPSBWSUFfUkVBRChWSUFfUkVHX0lOVEVSUlVQVCk7CisJaWYgKHN0YXR1cyAmIFZJQV9JUlFfVkJMQU5LX1BFTkRJTkcpIHsKKwkJYXRvbWljX2luYygmZGV2LT52YmxfcmVjZWl2ZWQpOworICAgICAgICAgICAgICAgIGlmICghKGF0b21pY19yZWFkKCZkZXYtPnZibF9yZWNlaXZlZCkgJiAweDBGKSkgeworCQkJZG9fZ2V0dGltZW9mZGF5KCZjdXJfdmJsYW5rKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZXZfcHJpdi0+bGFzdF92YmxhbmtfdmFsaWQpIHsKKwkJCQlkZXZfcHJpdi0+dXNlY19wZXJfdmJsYW5rID0gCisJCQkJCXRpbWVfZGlmZiggJmN1cl92YmxhbmssJmRldl9wcml2LT5sYXN0X3ZibGFuaykgPj4gNDsKKwkJCX0KKwkJCWRldl9wcml2LT5sYXN0X3ZibGFuayA9IGN1cl92Ymxhbms7CisJCQlkZXZfcHJpdi0+bGFzdF92YmxhbmtfdmFsaWQgPSAxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIShhdG9taWNfcmVhZCgmZGV2LT52YmxfcmVjZWl2ZWQpICYgMHhGRikpIHsKKwkJCURSTV9ERUJVRygiVVMgcGVyIHZibGFuayBpczogJXVcbiIsCisJCQkJZGV2X3ByaXYtPnVzZWNfcGVyX3ZibGFuayk7CisJCX0KKwkJRFJNX1dBS0VVUCgmZGV2LT52YmxfcXVldWUpOworCQlkcm1fdmJsX3NlbmRfc2lnbmFscyhkZXYpOworCQloYW5kbGVkID0gMTsKKwl9CisJCisKKwlmb3IgKGk9MDsgaTxkZXZfcHJpdi0+bnVtX2lycXM7ICsraSkgeworCQlpZiAoc3RhdHVzICYgY3VyX2lycS0+cGVuZGluZ19tYXNrKSB7CisJCQlhdG9taWNfaW5jKCAmY3VyX2lycS0+aXJxX3JlY2VpdmVkICk7CisJCQlEUk1fV0FLRVVQKCAmY3VyX2lycS0+aXJxX3F1ZXVlICk7CisJCQloYW5kbGVkID0gMTsKKwkJfQorCQljdXJfaXJxKys7CisJfQorCQorCS8qIEFja25vd2xlZ2UgaW50ZXJydXB0cyAqLworCVZJQV9XUklURShWSUFfUkVHX0lOVEVSUlVQVCwgc3RhdHVzKTsKKworCisJaWYgKGhhbmRsZWQpCisJCXJldHVybiBJUlFfSEFORExFRDsKKwllbHNlCisJCXJldHVybiBJUlFfTk9ORTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCB2aWFkcnZfYWNrbm93bGVkZ2VfaXJxcyhkcm1fdmlhX3ByaXZhdGVfdCAqIGRldl9wcml2KQoreworCXUzMiBzdGF0dXM7CisKKwlpZiAoZGV2X3ByaXYpIHsKKwkJLyogQWNrbm93bGVnZSBpbnRlcnJ1cHRzICovCisJCXN0YXR1cyA9IFZJQV9SRUFEKFZJQV9SRUdfSU5URVJSVVBUKTsKKwkJVklBX1dSSVRFKFZJQV9SRUdfSU5URVJSVVBULCBzdGF0dXMgfCAKKwkJCSAgZGV2X3ByaXYtPmlycV9wZW5kaW5nX21hc2spOworCX0KK30KKworaW50IHZpYV9kcml2ZXJfdmJsYW5rX3dhaXQoZHJtX2RldmljZV90ICogZGV2LCB1bnNpZ25lZCBpbnQgKnNlcXVlbmNlKQoreworCWRybV92aWFfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IChkcm1fdmlhX3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOworCXVuc2lnbmVkIGludCBjdXJfdmJsYW5rOworCWludCByZXQgPSAwOworCisJRFJNX0RFQlVHKCJ2aWFkcnZfdmJsYW5rX3dhaXRcbiIpOworCWlmICghZGV2X3ByaXYpIHsKKwkJRFJNX0VSUk9SKCIlcyBjYWxsZWQgd2l0aCBubyBpbml0aWFsaXphdGlvblxuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJdmlhZHJ2X2Fja25vd2xlZGdlX2lycXMoZGV2X3ByaXYpOworCisJLyogQXNzdW1lIHRoYXQgdGhlIHVzZXIgaGFzIG1pc3NlZCB0aGUgY3VycmVudCBzZXF1ZW5jZSBudW1iZXIKKwkgKiBieSBhYm91dCBhIGRheSByYXRoZXIgdGhhbiBzaGUgd2FudHMgdG8gd2FpdCBmb3IgeWVhcnMKKwkgKiB1c2luZyB2ZXJ0aWNhbCBibGFua3MuLi4KKwkgKi8KKworCURSTV9XQUlUX09OKHJldCwgZGV2LT52YmxfcXVldWUsIDMgKiBEUk1fSFosCisJCSAgICAoKChjdXJfdmJsYW5rID0gYXRvbWljX3JlYWQoJmRldi0+dmJsX3JlY2VpdmVkKSkgLQorCQkgICAgICAqc2VxdWVuY2UpIDw9ICgxIDw8IDIzKSkpOworCQorCSpzZXF1ZW5jZSA9IGN1cl92Ymxhbms7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCAKK3ZpYV9kcml2ZXJfaXJxX3dhaXQoZHJtX2RldmljZV90ICogZGV2LCB1bnNpZ25lZCBpbnQgaXJxLCBpbnQgZm9yY2Vfc2VxdWVuY2UsCisJCSAgICB1bnNpZ25lZCBpbnQgKnNlcXVlbmNlKQoreworCWRybV92aWFfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IChkcm1fdmlhX3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOworCXVuc2lnbmVkIGludCBjdXJfaXJxX3NlcXVlbmNlOworCWRybV92aWFfaXJxX3QgKmN1cl9pcnEgPSBkZXZfcHJpdi0+dmlhX2lycXM7CisJaW50IHJldCA9IDA7CisJbWFza2FycmF5X3QgKm1hc2tzID0gZGV2X3ByaXYtPmlycV9tYXNrczsKKworCURSTV9ERUJVRygiJXNcbiIsIF9fRlVOQ1RJT05fXyk7CisKKwlpZiAoIWRldl9wcml2KSB7CisJCURSTV9FUlJPUigiJXMgY2FsbGVkIHdpdGggbm8gaW5pdGlhbGl6YXRpb25cbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiBEUk1fRVJSKEVJTlZBTCk7CisJfQorCisJaWYgKGlycSA+PSBkZXZfcHJpdi0+bnVtX2lycXMgKSB7CisJCURSTV9FUlJPUigiJXMgVHJ5aW5nIHRvIHdhaXQgb24gdW5rbm93biBpcnEgJWRcbiIsIF9fRlVOQ1RJT05fXywgaXJxKTsKKwkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKKwl9CisJCQorCWN1cl9pcnEgKz0gaXJxOworCisJaWYgKG1hc2tzW2lycV1bMl0gJiYgIWZvcmNlX3NlcXVlbmNlKSB7CisJCURSTV9XQUlUX09OKHJldCwgY3VyX2lycS0+aXJxX3F1ZXVlLCAzICogRFJNX0haLAorCQkJICAgICgoVklBX1JFQUQobWFza3NbaXJxXVsyXSkgJiBtYXNrc1tpcnFdWzNdKSA9PSBtYXNrc1tpcnFdWzRdKSk7CisJCWN1cl9pcnFfc2VxdWVuY2UgPSBhdG9taWNfcmVhZCgmY3VyX2lycS0+aXJxX3JlY2VpdmVkKTsKKwl9IGVsc2UgeworCQlEUk1fV0FJVF9PTihyZXQsIGN1cl9pcnEtPmlycV9xdWV1ZSwgMyAqIERSTV9IWiwKKwkJCSAgICAoKChjdXJfaXJxX3NlcXVlbmNlID0gYXRvbWljX3JlYWQoJmN1cl9pcnEtPmlycV9yZWNlaXZlZCkpIC0KKwkJCSAgICAgICpzZXF1ZW5jZSkgPD0gKDEgPDwgMjMpKSk7CQkKKwl9CisJKnNlcXVlbmNlID0gY3VyX2lycV9zZXF1ZW5jZTsKKwlyZXR1cm4gcmV0OworfQorCisKKy8qCisgKiBkcm1fZG1hLmggaG9va3MKKyAqLworCit2b2lkIHZpYV9kcml2ZXJfaXJxX3ByZWluc3RhbGwoZHJtX2RldmljZV90ICogZGV2KQoreworCWRybV92aWFfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IChkcm1fdmlhX3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOworCXUzMiBzdGF0dXM7CisJZHJtX3ZpYV9pcnFfdCAqY3VyX2lycSA9IGRldl9wcml2LT52aWFfaXJxczsKKwlpbnQgaTsKKworCURSTV9ERUJVRygiZHJpdmVyX2lycV9wcmVpbnN0YWxsOiBkZXZfcHJpdjogJXBcbiIsIGRldl9wcml2KTsKKwlpZiAoZGV2X3ByaXYpIHsKKworCQlkZXZfcHJpdi0+aXJxX2VuYWJsZV9tYXNrID0gVklBX0lSUV9WQkxBTktfRU5BQkxFOworCQlkZXZfcHJpdi0+aXJxX3BlbmRpbmdfbWFzayA9IFZJQV9JUlFfVkJMQU5LX1BFTkRJTkc7CisKKwkJZGV2X3ByaXYtPmlycV9tYXNrcyA9IChkZXZfcHJpdi0+cHJvX2dyb3VwX2EpID8KKwkJCXZpYV9wcm9fZ3JvdXBfYV9pcnFzIDogdmlhX3VuaWNocm9tZV9pcnFzOworCQlkZXZfcHJpdi0+bnVtX2lycXMgPSAoZGV2X3ByaXYtPnByb19ncm91cF9hKSA/CisJCQl2aWFfbnVtX3Byb19ncm91cF9hIDogdmlhX251bV91bmljaHJvbWU7CisJCQorCQlmb3IoaT0wOyBpIDwgZGV2X3ByaXYtPm51bV9pcnFzOyArK2kpIHsKKwkJCWF0b21pY19zZXQoJmN1cl9pcnEtPmlycV9yZWNlaXZlZCwgMCk7CisJCQljdXJfaXJxLT5lbmFibGVfbWFzayA9IGRldl9wcml2LT5pcnFfbWFza3NbaV1bMF07IAorCQkJY3VyX2lycS0+cGVuZGluZ19tYXNrID0gZGV2X3ByaXYtPmlycV9tYXNrc1tpXVsxXTsKKwkJCURSTV9JTklUX1dBSVRRVUVVRSggJmN1cl9pcnEtPmlycV9xdWV1ZSApOworCQkJZGV2X3ByaXYtPmlycV9lbmFibGVfbWFzayB8PSBjdXJfaXJxLT5lbmFibGVfbWFzazsKKwkJCWRldl9wcml2LT5pcnFfcGVuZGluZ19tYXNrIHw9IGN1cl9pcnEtPnBlbmRpbmdfbWFzazsKKwkJCWN1cl9pcnErKzsKKwkJCQorCQkJRFJNX0RFQlVHKCJJbml0aWFsaXppbmcgSVJRICVkXG4iLCBpKTsKKwkJfQorCQkJCisJICAgICAgICBkZXZfcHJpdi0+bGFzdF92YmxhbmtfdmFsaWQgPSAwOworCisJCS8vIENsZWFyIFZTeW5jIGludGVycnVwdCByZWdzCisJCXN0YXR1cyA9IFZJQV9SRUFEKFZJQV9SRUdfSU5URVJSVVBUKTsKKwkJVklBX1dSSVRFKFZJQV9SRUdfSU5URVJSVVBULCBzdGF0dXMgJiAKKwkJCSAgfihkZXZfcHJpdi0+aXJxX2VuYWJsZV9tYXNrKSk7CisJCQorCQkvKiBDbGVhciBiaXRzIGlmIHRoZXkncmUgYWxyZWFkeSBoaWdoICovCisJCXZpYWRydl9hY2tub3dsZWRnZV9pcnFzKGRldl9wcml2KTsKKwl9Cit9CisKK3ZvaWQgdmlhX2RyaXZlcl9pcnFfcG9zdGluc3RhbGwoZHJtX2RldmljZV90ICogZGV2KQoreworCWRybV92aWFfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IChkcm1fdmlhX3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOworCXUzMiBzdGF0dXM7CisKKwlEUk1fREVCVUcoInZpYV9kcml2ZXJfaXJxX3Bvc3RpbnN0YWxsXG4iKTsKKwlpZiAoZGV2X3ByaXYpIHsKKwkJc3RhdHVzID0gVklBX1JFQUQoVklBX1JFR19JTlRFUlJVUFQpOworCQlWSUFfV1JJVEUoVklBX1JFR19JTlRFUlJVUFQsIHN0YXR1cyB8IFZJQV9JUlFfR0xPQkFMCisJCQkgIHwgZGV2X3ByaXYtPmlycV9lbmFibGVfbWFzayk7CisKKwkJLyogU29tZSBtYWdpYywgb2ggZm9yIHNvbWUgZGF0YSBzaGVldHMgISAqLworCisJCVZJQV9XUklURTgoMHg4M2Q0LCAweDExKTsKKwkJVklBX1dSSVRFOCgweDgzZDUsIFZJQV9SRUFEOCgweDgzZDUpIHwgMHgzMCk7CisJCQorCX0KK30KKwordm9pZCB2aWFfZHJpdmVyX2lycV91bmluc3RhbGwoZHJtX2RldmljZV90ICogZGV2KQoreworCWRybV92aWFfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IChkcm1fdmlhX3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOworCXUzMiBzdGF0dXM7CisKKwlEUk1fREVCVUcoImRyaXZlcl9pcnFfdW5pbnN0YWxsKVxuIik7CisJaWYgKGRldl9wcml2KSB7CisKKwkJLyogU29tZSBtb3JlIG1hZ2ljLCBvaCBmb3Igc29tZSBkYXRhIHNoZWV0cyAhICovCisKKwkJVklBX1dSSVRFOCgweDgzZDQsIDB4MTEpOworCQlWSUFfV1JJVEU4KDB4ODNkNSwgVklBX1JFQUQ4KDB4ODNkNSkgJiB+MHgzMCk7CisKKwkJc3RhdHVzID0gVklBX1JFQUQoVklBX1JFR19JTlRFUlJVUFQpOworCQlWSUFfV1JJVEUoVklBX1JFR19JTlRFUlJVUFQsIHN0YXR1cyAmIAorCQkJICB+KFZJQV9JUlFfVkJMQU5LX0VOQUJMRSB8IGRldl9wcml2LT5pcnFfZW5hYmxlX21hc2spKTsKKwl9Cit9CisKK2ludCB2aWFfd2FpdF9pcnEoRFJNX0lPQ1RMX0FSR1MpCit7CisJZHJtX2ZpbGVfdCAqcHJpdiA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKwlkcm1fZGV2aWNlX3QgKmRldiA9IHByaXYtPmhlYWQtPmRldjsKKwlkcm1fdmlhX2lycXdhaXRfdCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilkYXRhOworCWRybV92aWFfaXJxd2FpdF90IGlycXdhaXQ7CisJc3RydWN0IHRpbWV2YWwgbm93OworCWludCByZXQgPSAwOworCWRybV92aWFfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IChkcm1fdmlhX3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOworCWRybV92aWFfaXJxX3QgKmN1cl9pcnEgPSBkZXZfcHJpdi0+dmlhX2lycXM7CisJaW50IGZvcmNlX3NlcXVlbmNlOworCisJaWYgKCFkZXYtPmlycSkKKwkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKKworCURSTV9DT1BZX0ZST01fVVNFUl9JT0NUTChpcnF3YWl0LCBhcmdwLCBzaXplb2YoaXJxd2FpdCkpOworCWlmIChpcnF3YWl0LnJlcXVlc3QuaXJxID49IGRldl9wcml2LT5udW1faXJxcykgeworCQlEUk1fRVJST1IoIiVzIFRyeWluZyB0byB3YWl0IG9uIHVua25vd24gaXJxICVkXG4iLCBfX0ZVTkNUSU9OX18sIAorCQkJICBpcnF3YWl0LnJlcXVlc3QuaXJxKTsKKwkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKKwl9CisKKwljdXJfaXJxICs9IGlycXdhaXQucmVxdWVzdC5pcnE7CisKKwlzd2l0Y2ggKGlycXdhaXQucmVxdWVzdC50eXBlICYgflZJQV9JUlFfRkxBR1NfTUFTSykgeworCWNhc2UgVklBX0lSUV9SRUxBVElWRToKKwkJaXJxd2FpdC5yZXF1ZXN0LnNlcXVlbmNlICs9IGF0b21pY19yZWFkKCZjdXJfaXJxLT5pcnFfcmVjZWl2ZWQpOworCQlpcnF3YWl0LnJlcXVlc3QudHlwZSAmPSB+X0RSTV9WQkxBTktfUkVMQVRJVkU7CisJY2FzZSBWSUFfSVJRX0FCU09MVVRFOgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gRFJNX0VSUihFSU5WQUwpOworCX0KKworCWlmIChpcnF3YWl0LnJlcXVlc3QudHlwZSAmIFZJQV9JUlFfU0lHTkFMKSB7CisJCURSTV9FUlJPUigiJXMgU2lnbmFscyBvbiBWaWEgSVJRcyBub3QgaW1wbGVtZW50ZWQgeWV0LlxuIiwgCisJCQkgIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiBEUk1fRVJSKEVJTlZBTCk7CisJfQorCisJZm9yY2Vfc2VxdWVuY2UgPSAoaXJxd2FpdC5yZXF1ZXN0LnR5cGUgJiBWSUFfSVJRX0ZPUkNFX1NFUVVFTkNFKTsKKworCXJldCA9IHZpYV9kcml2ZXJfaXJxX3dhaXQoZGV2LCBpcnF3YWl0LnJlcXVlc3QuaXJxLCBmb3JjZV9zZXF1ZW5jZSwKKwkJCQkgICZpcnF3YWl0LnJlcXVlc3Quc2VxdWVuY2UpOworCWRvX2dldHRpbWVvZmRheSgmbm93KTsKKwlpcnF3YWl0LnJlcGx5LnR2YWxfc2VjID0gbm93LnR2X3NlYzsKKwlpcnF3YWl0LnJlcGx5LnR2YWxfdXNlYyA9IG5vdy50dl91c2VjOworCisJRFJNX0NPUFlfVE9fVVNFUl9JT0NUTChhcmdwLCBpcnF3YWl0LCBzaXplb2YoaXJxd2FpdCkpOworCisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vdmlhX21hcC5jIGIvZHJpdmVycy9jaGFyL2RybS92aWFfbWFwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGJlODI5YgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vdmlhX21hcC5jCkBAIC0wLDAgKzEsMTEwIEBACisvKgorICogQ29weXJpZ2h0IDE5OTgtMjAwMyBWSUEgVGVjaG5vbG9naWVzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgMjAwMS0yMDAzIFMzIEdyYXBoaWNzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3ViIGxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUKKyAqIG5leHQgcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zCisgKiBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTi1JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMCisgKiBWSUEsIFMzIEdSQVBISUNTLCBBTkQvT1IgSVRTIFNVUFBMSUVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCisgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIKKyAqIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworI2luY2x1ZGUgImRybVAuaCIKKyNpbmNsdWRlICJ2aWFfZHJtLmgiCisjaW5jbHVkZSAidmlhX2Rydi5oIgorCitzdGF0aWMgaW50IHZpYV9kb19pbml0X21hcChkcm1fZGV2aWNlX3QgKiBkZXYsIGRybV92aWFfaW5pdF90ICogaW5pdCkKK3sKKwlkcm1fdmlhX3ByaXZhdGVfdCAqZGV2X3ByaXY7CisKKwlEUk1fREVCVUcoIiVzXG4iLCBfX0ZVTkNUSU9OX18pOworCisJZGV2X3ByaXYgPSBkcm1fYWxsb2Moc2l6ZW9mKGRybV92aWFfcHJpdmF0ZV90KSwgRFJNX01FTV9EUklWRVIpOworCWlmIChkZXZfcHJpdiA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW1lbXNldChkZXZfcHJpdiwgMCwgc2l6ZW9mKGRybV92aWFfcHJpdmF0ZV90KSk7CisKKwlEUk1fR0VUU0FSRUEoKTsKKwlpZiAoIWRldl9wcml2LT5zYXJlYSkgeworCQlEUk1fRVJST1IoImNvdWxkIG5vdCBmaW5kIHNhcmVhIVxuIik7CisJCWRldi0+ZGV2X3ByaXZhdGUgPSAodm9pZCAqKWRldl9wcml2OworCQl2aWFfZG9fY2xlYW51cF9tYXAoZGV2KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZGV2X3ByaXYtPmZiID0gZHJtX2NvcmVfZmluZG1hcChkZXYsIGluaXQtPmZiX29mZnNldCk7CisJaWYgKCFkZXZfcHJpdi0+ZmIpIHsKKwkJRFJNX0VSUk9SKCJjb3VsZCBub3QgZmluZCBmcmFtZWJ1ZmZlciFcbiIpOworCQlkZXYtPmRldl9wcml2YXRlID0gKHZvaWQgKilkZXZfcHJpdjsKKwkJdmlhX2RvX2NsZWFudXBfbWFwKGRldik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlkZXZfcHJpdi0+bW1pbyA9IGRybV9jb3JlX2ZpbmRtYXAoZGV2LCBpbml0LT5tbWlvX29mZnNldCk7CisJaWYgKCFkZXZfcHJpdi0+bW1pbykgeworCQlEUk1fRVJST1IoImNvdWxkIG5vdCBmaW5kIG1taW8gcmVnaW9uIVxuIik7CisJCWRldi0+ZGV2X3ByaXZhdGUgPSAodm9pZCAqKWRldl9wcml2OworCQl2aWFfZG9fY2xlYW51cF9tYXAoZGV2KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZGV2X3ByaXYtPnNhcmVhX3ByaXYgPQorCSAgICAoZHJtX3ZpYV9zYXJlYV90ICopICgodTggKikgZGV2X3ByaXYtPnNhcmVhLT5oYW5kbGUgKworCQkJCSBpbml0LT5zYXJlYV9wcml2X29mZnNldCk7CisKKwlkZXZfcHJpdi0+YWdwQWRkciA9IGluaXQtPmFncEFkZHI7CisKKwl2aWFfaW5pdF9mdXRleCggZGV2X3ByaXYgKTsKKwlkZXZfcHJpdi0+cHJvX2dyb3VwX2EgPSAoZGV2LT5wZGV2LT5kZXZpY2UgPT0gMHgzMTE4KTsKKworCWRldi0+ZGV2X3ByaXZhdGUgPSAodm9pZCAqKWRldl9wcml2OworCXJldHVybiAwOworfQorCitpbnQgdmlhX2RvX2NsZWFudXBfbWFwKGRybV9kZXZpY2VfdCAqIGRldikKK3sKKwlpZiAoZGV2LT5kZXZfcHJpdmF0ZSkgeworCisJCWRybV92aWFfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisKKwkJdmlhX2RtYV9jbGVhbnVwKGRldik7CisKKwkJZHJtX2ZyZWUoZGV2X3ByaXYsIHNpemVvZihkcm1fdmlhX3ByaXZhdGVfdCksIERSTV9NRU1fRFJJVkVSKTsKKwkJZGV2LT5kZXZfcHJpdmF0ZSA9IE5VTEw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2ludCB2aWFfbWFwX2luaXQoRFJNX0lPQ1RMX0FSR1MpCit7CisJRFJNX0RFVklDRTsKKwlkcm1fdmlhX2luaXRfdCBpbml0OworCisJRFJNX0RFQlVHKCIlc1xuIiwgX19GVU5DVElPTl9fKTsKKworCURSTV9DT1BZX0ZST01fVVNFUl9JT0NUTChpbml0LCAoZHJtX3ZpYV9pbml0X3QgKikgZGF0YSwgc2l6ZW9mKGluaXQpKTsKKworCXN3aXRjaCAoaW5pdC5mdW5jKSB7CisJY2FzZSBWSUFfSU5JVF9NQVA6CisJCXJldHVybiB2aWFfZG9faW5pdF9tYXAoZGV2LCAmaW5pdCk7CisJY2FzZSBWSUFfQ0xFQU5VUF9NQVA6CisJCXJldHVybiB2aWFfZG9fY2xlYW51cF9tYXAoZGV2KTsKKwl9CisKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL3ZpYV9tbS5jIGIvZHJpdmVycy9jaGFyL2RybS92aWFfbW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjI3MTJmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9jaGFyL2RybS92aWFfbW0uYwpAQCAtMCwwICsxLDM1OCBAQAorLyoKKyAqIENvcHlyaWdodCAxOTk4LTIwMDMgVklBIFRlY2hub2xvZ2llcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IDIwMDEtMjAwMyBTMyBHcmFwaGljcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YiBsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlCisgKiBuZXh0IHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucworICogb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT04tSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTAorICogVklBLCBTMyBHUkFQSElDUywgQU5EL09SIElUUyBTVVBQTElFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCisgKiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKi8KKyNpbmNsdWRlICJkcm1QLmgiCisjaW5jbHVkZSAidmlhX2RybS5oIgorI2luY2x1ZGUgInZpYV9kcnYuaCIKKyNpbmNsdWRlICJ2aWFfZHMuaCIKKyNpbmNsdWRlICJ2aWFfbW0uaCIKKworI2RlZmluZSBNQVhfQ09OVEVYVCAxMDAKKwordHlwZWRlZiBzdHJ1Y3QgeworCWludCB1c2VkOworCWludCBjb250ZXh0OworCXNldF90ICpzZXRzWzJdOwkJLyogMCBmb3IgZnJhbWUgYnVmZmVyLCAxIGZvciBBR1AgLCAyIGZvciBTeXN0ZW0gKi8KK30gdmlhX2NvbnRleHRfdDsKKworc3RhdGljIHZpYV9jb250ZXh0X3QgZ2xvYmFsX3Bwcml2W01BWF9DT05URVhUXTsKKworc3RhdGljIGludCB2aWFfYWdwX2FsbG9jKGRybV92aWFfbWVtX3QgKiBtZW0pOworc3RhdGljIGludCB2aWFfYWdwX2ZyZWUoZHJtX3ZpYV9tZW1fdCAqIG1lbSk7CitzdGF0aWMgaW50IHZpYV9mYl9hbGxvYyhkcm1fdmlhX21lbV90ICogbWVtKTsKK3N0YXRpYyBpbnQgdmlhX2ZiX2ZyZWUoZHJtX3ZpYV9tZW1fdCAqIG1lbSk7CisKK3N0YXRpYyBpbnQgYWRkX2FsbG9jX3NldChpbnQgY29udGV4dCwgaW50IHR5cGUsIHVuc2lnbmVkIGludCB2YWwpCit7CisJaW50IGksIHJldHZhbCA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0NPTlRFWFQ7IGkrKykgeworCQlpZiAoZ2xvYmFsX3Bwcml2W2ldLnVzZWQgJiYgZ2xvYmFsX3Bwcml2W2ldLmNvbnRleHQgPT0gY29udGV4dCkgeworCQkJcmV0dmFsID0gdmlhX3NldEFkZChnbG9iYWxfcHByaXZbaV0uc2V0c1t0eXBlXSwgdmFsKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCBkZWxfYWxsb2Nfc2V0KGludCBjb250ZXh0LCBpbnQgdHlwZSwgdW5zaWduZWQgaW50IHZhbCkKK3sKKwlpbnQgaSwgcmV0dmFsID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBNQVhfQ09OVEVYVDsgaSsrKQorCQlpZiAoZ2xvYmFsX3Bwcml2W2ldLnVzZWQgJiYgZ2xvYmFsX3Bwcml2W2ldLmNvbnRleHQgPT0gY29udGV4dCkgeworCQkJcmV0dmFsID0gdmlhX3NldERlbChnbG9iYWxfcHByaXZbaV0uc2V0c1t0eXBlXSwgdmFsKTsKKwkJCWJyZWFrOworCQl9CisKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKiBhZ3AgbWVtb3J5IG1hbmFnZW1lbnQgKi8KK3N0YXRpYyBtZW1IZWFwX3QgKkFncEhlYXAgPSBOVUxMOworCitpbnQgdmlhX2FncF9pbml0KERSTV9JT0NUTF9BUkdTKQoreworCWRybV92aWFfYWdwX3QgYWdwOworCisJRFJNX0NPUFlfRlJPTV9VU0VSX0lPQ1RMKGFncCwgKGRybV92aWFfYWdwX3QgKikgZGF0YSwgc2l6ZW9mKGFncCkpOworCisJQWdwSGVhcCA9IHZpYV9tbUluaXQoYWdwLm9mZnNldCwgYWdwLnNpemUpOworCisJRFJNX0RFQlVHKCJvZmZzZXQgPSAlbHUsIHNpemUgPSAlbHUiLCAodW5zaWduZWQgbG9uZylhZ3Aub2Zmc2V0LCAodW5zaWduZWQgbG9uZylhZ3Auc2l6ZSk7CisKKwlyZXR1cm4gMDsKK30KKworLyogZmIgbWVtb3J5IG1hbmFnZW1lbnQgKi8KK3N0YXRpYyBtZW1IZWFwX3QgKkZCSGVhcCA9IE5VTEw7CisKK2ludCB2aWFfZmJfaW5pdChEUk1fSU9DVExfQVJHUykKK3sKKwlkcm1fdmlhX2ZiX3QgZmI7CisKKwlEUk1fQ09QWV9GUk9NX1VTRVJfSU9DVEwoZmIsIChkcm1fdmlhX2ZiX3QgKikgZGF0YSwgc2l6ZW9mKGZiKSk7CisKKwlGQkhlYXAgPSB2aWFfbW1Jbml0KGZiLm9mZnNldCwgZmIuc2l6ZSk7CisKKwlEUk1fREVCVUcoIm9mZnNldCA9ICVsdSwgc2l6ZSA9ICVsdSIsICh1bnNpZ25lZCBsb25nKWZiLm9mZnNldCwgKHVuc2lnbmVkIGxvbmcpZmIuc2l6ZSk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IHZpYV9pbml0X2NvbnRleHQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNvbnRleHQpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0NPTlRFWFQ7IGkrKykKKwkJaWYgKGdsb2JhbF9wcHJpdltpXS51c2VkICYmCisJCSAgICAoZ2xvYmFsX3Bwcml2W2ldLmNvbnRleHQgPT0gY29udGV4dCkpCisJCQlicmVhazsKKworCWlmIChpID49IE1BWF9DT05URVhUKSB7CisJCWZvciAoaSA9IDA7IGkgPCBNQVhfQ09OVEVYVDsgaSsrKSB7CisJCQlpZiAoIWdsb2JhbF9wcHJpdltpXS51c2VkKSB7CisJCQkJZ2xvYmFsX3Bwcml2W2ldLmNvbnRleHQgPSBjb250ZXh0OworCQkJCWdsb2JhbF9wcHJpdltpXS51c2VkID0gMTsKKwkJCQlnbG9iYWxfcHByaXZbaV0uc2V0c1swXSA9IHZpYV9zZXRJbml0KCk7CisJCQkJZ2xvYmFsX3Bwcml2W2ldLnNldHNbMV0gPSB2aWFfc2V0SW5pdCgpOworCQkJCURSTV9ERUJVRygiaW5pdCBhbGxvY2F0aW9uIHNldCwgc29ja2V0PSVkLCIKKwkJCQkJICAiIGNvbnRleHQgPSAlZFxuIiwgaSwgY29udGV4dCk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlpZiAoKGkgPj0gTUFYX0NPTlRFWFQpIHx8IChnbG9iYWxfcHByaXZbaV0uc2V0c1swXSA9PSBOVUxMKSB8fAorCQkgICAgKGdsb2JhbF9wcHJpdltpXS5zZXRzWzFdID09IE5VTEwpKSB7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCXJldHVybiAxOworfQorCitpbnQgdmlhX2ZpbmFsX2NvbnRleHQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNvbnRleHQpCit7CQorICAgICAgICBpbnQgaTsKKwlkcm1fdmlhX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSAoZHJtX3ZpYV9wcml2YXRlX3QgKikgZGV2LT5kZXZfcHJpdmF0ZTsKKworCWZvciAoaSA9IDA7IGkgPCBNQVhfQ09OVEVYVDsgaSsrKQorCQlpZiAoZ2xvYmFsX3Bwcml2W2ldLnVzZWQgJiYKKwkJICAgIChnbG9iYWxfcHByaXZbaV0uY29udGV4dCA9PSBjb250ZXh0KSkKKwkJCWJyZWFrOworCisJaWYgKGkgPCBNQVhfQ09OVEVYVCkgeworCQlzZXRfdCAqc2V0OworCQlJVEVNX1RZUEUgaXRlbTsKKwkJaW50IHJldHZhbDsKKworCQlEUk1fREVCVUcoImZpbmQgc29ja2V0ICVkLCBjb250ZXh0ID0gJWRcbiIsIGksIGNvbnRleHQpOworCisJCS8qIFZpZGVvIE1lbW9yeSAqLworCQlzZXQgPSBnbG9iYWxfcHByaXZbaV0uc2V0c1swXTsKKwkJcmV0dmFsID0gdmlhX3NldEZpcnN0KHNldCwgJml0ZW0pOworCQl3aGlsZSAocmV0dmFsKSB7CisJCQlEUk1fREVCVUcoImZyZWUgdmlkZW8gbWVtb3J5IDB4JWx4XG4iLCBpdGVtKTsKKwkJCXZpYV9tbUZyZWVNZW0oKFBNZW1CbG9jaykgaXRlbSk7CisJCQlyZXR2YWwgPSB2aWFfc2V0TmV4dChzZXQsICZpdGVtKTsKKwkJfQorCQl2aWFfc2V0RGVzdHJveShzZXQpOworCisJCS8qIEFHUCBNZW1vcnkgKi8KKwkJc2V0ID0gZ2xvYmFsX3Bwcml2W2ldLnNldHNbMV07CisJCXJldHZhbCA9IHZpYV9zZXRGaXJzdChzZXQsICZpdGVtKTsKKwkJd2hpbGUgKHJldHZhbCkgeworCQkJRFJNX0RFQlVHKCJmcmVlIGFncCBtZW1vcnkgMHglbHhcbiIsIGl0ZW0pOworCQkJdmlhX21tRnJlZU1lbSgoUE1lbUJsb2NrKSBpdGVtKTsKKwkJCXJldHZhbCA9IHZpYV9zZXROZXh0KHNldCwgJml0ZW0pOworCQl9CisJCXZpYV9zZXREZXN0cm95KHNldCk7CisJCWdsb2JhbF9wcHJpdltpXS51c2VkID0gMDsKKwl9CisJdmlhX3JlbGVhc2VfZnV0ZXgoZGV2X3ByaXYsIGNvbnRleHQpOyAKKwkKKwkJCQorI2lmIGRlZmluZWQoX19saW51eF9fKQorCS8qIExpbnV4IHNwZWNpZmljIHVudGlsIGNvbnRleHQgdHJhY2tpbmcgY29kZSBnZXRzIHBvcnRlZCB0byBCU0QgKi8KKwkvKiBMYXN0IGNvbnRleHQsIHBlcmZvcm0gY2xlYW51cCAqLworCWlmIChkZXYtPmN0eF9jb3VudCA9PSAxICYmIGRldi0+ZGV2X3ByaXZhdGUpIHsKKwkgICAgICAgIERSTV9ERUJVRygiTGFzdCBDb250ZXh0XG4iKTsKKwkJaWYgKGRldi0+aXJxKQorCQkJZHJtX2lycV91bmluc3RhbGwoZGV2KTsKKworCQl2aWFfY2xlYW51cF9mdXRleChkZXZfcHJpdik7CisJCXZpYV9kb19jbGVhbnVwX21hcChkZXYpOworCX0KKyNlbmRpZgorCisJcmV0dXJuIDE7Cit9CisKK2ludCB2aWFfbWVtX2FsbG9jKERSTV9JT0NUTF9BUkdTKQoreworCWRybV92aWFfbWVtX3QgbWVtOworCisJRFJNX0NPUFlfRlJPTV9VU0VSX0lPQ1RMKG1lbSwgKGRybV92aWFfbWVtX3QgKikgZGF0YSwgc2l6ZW9mKG1lbSkpOworCisJc3dpdGNoIChtZW0udHlwZSkgeworCWNhc2UgVklERU86CisJCWlmICh2aWFfZmJfYWxsb2MoJm1lbSkgPCAwKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCURSTV9DT1BZX1RPX1VTRVJfSU9DVEwoKGRybV92aWFfbWVtX3QgKikgZGF0YSwgbWVtLAorCQkJCSAgICAgICBzaXplb2YobWVtKSk7CisJCXJldHVybiAwOworCWNhc2UgQUdQOgorCQlpZiAodmlhX2FncF9hbGxvYygmbWVtKSA8IDApCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJRFJNX0NPUFlfVE9fVVNFUl9JT0NUTCgoZHJtX3ZpYV9tZW1fdCAqKSBkYXRhLCBtZW0sCisJCQkJICAgICAgIHNpemVvZihtZW0pKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIC1FRkFVTFQ7Cit9CisKK3N0YXRpYyBpbnQgdmlhX2ZiX2FsbG9jKGRybV92aWFfbWVtX3QgKiBtZW0pCit7CisJZHJtX3ZpYV9tbV90IGZiOworCVBNZW1CbG9jayBibG9jazsKKwlpbnQgcmV0dmFsID0gMDsKKworCWlmICghRkJIZWFwKQorCQlyZXR1cm4gLTE7CisKKwlmYi5zaXplID0gbWVtLT5zaXplOworCWZiLmNvbnRleHQgPSBtZW0tPmNvbnRleHQ7CisKKwlibG9jayA9IHZpYV9tbUFsbG9jTWVtKEZCSGVhcCwgZmIuc2l6ZSwgNSwgMCk7CisJaWYgKGJsb2NrKSB7CisJCWZiLm9mZnNldCA9IGJsb2NrLT5vZnM7CisJCWZiLmZyZWUgPSAodW5zaWduZWQgbG9uZylibG9jazsKKwkJaWYgKCFhZGRfYWxsb2Nfc2V0KGZiLmNvbnRleHQsIFZJREVPLCBmYi5mcmVlKSkgeworCQkJRFJNX0RFQlVHKCJhZGRpbmcgdG8gYWxsb2NhdGlvbiBzZXQgZmFpbHNcbiIpOworCQkJdmlhX21tRnJlZU1lbSgoUE1lbUJsb2NrKSBmYi5mcmVlKTsKKwkJCXJldHZhbCA9IC0xOworCQl9CisJfSBlbHNlIHsKKwkJZmIub2Zmc2V0ID0gMDsKKwkJZmIuc2l6ZSA9IDA7CisJCWZiLmZyZWUgPSAwOworCQlyZXR2YWwgPSAtMTsKKwl9CisKKwltZW0tPm9mZnNldCA9IGZiLm9mZnNldDsKKwltZW0tPmluZGV4ID0gZmIuZnJlZTsKKworCURSTV9ERUJVRygiYWxsb2MgZmIsIHNpemUgPSAlZCwgb2Zmc2V0ID0gJWRcbiIsIGZiLnNpemUsCisJCSAgKGludClmYi5vZmZzZXQpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCB2aWFfYWdwX2FsbG9jKGRybV92aWFfbWVtX3QgKiBtZW0pCit7CisJZHJtX3ZpYV9tbV90IGFncDsKKwlQTWVtQmxvY2sgYmxvY2s7CisJaW50IHJldHZhbCA9IDA7CisKKwlpZiAoIUFncEhlYXApCisJCXJldHVybiAtMTsKKworCWFncC5zaXplID0gbWVtLT5zaXplOworCWFncC5jb250ZXh0ID0gbWVtLT5jb250ZXh0OworCisJYmxvY2sgPSB2aWFfbW1BbGxvY01lbShBZ3BIZWFwLCBhZ3Auc2l6ZSwgNSwgMCk7CisJaWYgKGJsb2NrKSB7CisJCWFncC5vZmZzZXQgPSBibG9jay0+b2ZzOworCQlhZ3AuZnJlZSA9ICh1bnNpZ25lZCBsb25nKWJsb2NrOworCQlpZiAoIWFkZF9hbGxvY19zZXQoYWdwLmNvbnRleHQsIEFHUCwgYWdwLmZyZWUpKSB7CisJCQlEUk1fREVCVUcoImFkZGluZyB0byBhbGxvY2F0aW9uIHNldCBmYWlsc1xuIik7CisJCQl2aWFfbW1GcmVlTWVtKChQTWVtQmxvY2spIGFncC5mcmVlKTsKKwkJCXJldHZhbCA9IC0xOworCQl9CisJfSBlbHNlIHsKKwkJYWdwLm9mZnNldCA9IDA7CisJCWFncC5zaXplID0gMDsKKwkJYWdwLmZyZWUgPSAwOworCX0KKworCW1lbS0+b2Zmc2V0ID0gYWdwLm9mZnNldDsKKwltZW0tPmluZGV4ID0gYWdwLmZyZWU7CisKKwlEUk1fREVCVUcoImFsbG9jIGFncCwgc2l6ZSA9ICVkLCBvZmZzZXQgPSAlZFxuIiwgYWdwLnNpemUsCisJCSAgKHVuc2lnbmVkIGludClhZ3Aub2Zmc2V0KTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitpbnQgdmlhX21lbV9mcmVlKERSTV9JT0NUTF9BUkdTKQoreworCWRybV92aWFfbWVtX3QgbWVtOworCisJRFJNX0NPUFlfRlJPTV9VU0VSX0lPQ1RMKG1lbSwgKGRybV92aWFfbWVtX3QgKikgZGF0YSwgc2l6ZW9mKG1lbSkpOworCisJc3dpdGNoIChtZW0udHlwZSkgeworCisJY2FzZSBWSURFTzoKKwkJaWYgKHZpYV9mYl9mcmVlKCZtZW0pID09IDApCisJCQlyZXR1cm4gMDsKKwkJYnJlYWs7CisJY2FzZSBBR1A6CisJCWlmICh2aWFfYWdwX2ZyZWUoJm1lbSkgPT0gMCkKKwkJCXJldHVybiAwOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gLUVGQVVMVDsKK30KKworc3RhdGljIGludCB2aWFfZmJfZnJlZShkcm1fdmlhX21lbV90ICogbWVtKQoreworCWRybV92aWFfbW1fdCBmYjsKKwlpbnQgcmV0dmFsID0gMDsKKworCWlmICghRkJIZWFwKSB7CisJCXJldHVybiAtMTsKKwl9CisKKwlmYi5mcmVlID0gbWVtLT5pbmRleDsKKwlmYi5jb250ZXh0ID0gbWVtLT5jb250ZXh0OworCisJaWYgKCFmYi5mcmVlKSB7CisJCXJldHVybiAtMTsKKworCX0KKworCXZpYV9tbUZyZWVNZW0oKFBNZW1CbG9jaykgZmIuZnJlZSk7CisKKwlpZiAoIWRlbF9hbGxvY19zZXQoZmIuY29udGV4dCwgVklERU8sIGZiLmZyZWUpKSB7CisJCXJldHZhbCA9IC0xOworCX0KKworCURSTV9ERUJVRygiZnJlZSBmYiwgZnJlZSA9ICVsZFxuIiwgZmIuZnJlZSk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IHZpYV9hZ3BfZnJlZShkcm1fdmlhX21lbV90ICogbWVtKQoreworCWRybV92aWFfbW1fdCBhZ3A7CisKKwlpbnQgcmV0dmFsID0gMDsKKworCWFncC5mcmVlID0gbWVtLT5pbmRleDsKKwlhZ3AuY29udGV4dCA9IG1lbS0+Y29udGV4dDsKKworCWlmICghYWdwLmZyZWUpCisJCXJldHVybiAtMTsKKworCXZpYV9tbUZyZWVNZW0oKFBNZW1CbG9jaykgYWdwLmZyZWUpOworCisJaWYgKCFkZWxfYWxsb2Nfc2V0KGFncC5jb250ZXh0LCBBR1AsIGFncC5mcmVlKSkgeworCQlyZXR2YWwgPSAtMTsKKwl9CisKKwlEUk1fREVCVUcoImZyZWUgYWdwLCBmcmVlID0gJWxkXG4iLCBhZ3AuZnJlZSk7CisKKwlyZXR1cm4gcmV0dmFsOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS92aWFfbW0uaCBiL2RyaXZlcnMvY2hhci9kcm0vdmlhX21tLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU3ZWZkYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vdmlhX21tLmgKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAxOTk4LTIwMDMgVklBIFRlY2hub2xvZ2llcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IDIwMDEtMjAwMyBTMyBHcmFwaGljcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YiBsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlCisgKiBuZXh0IHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucworICogb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT04tSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTAorICogVklBLCBTMyBHUkFQSElDUywgQU5EL09SIElUUyBTVVBQTElFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCisgKiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKi8KKyNpZm5kZWYgX3ZpYV9kcm1fbW1faF8KKyNkZWZpbmUgX3ZpYV9kcm1fbW1faF8KKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGludCBjb250ZXh0OworCXVuc2lnbmVkIGludCBzaXplOworCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OworCXVuc2lnbmVkIGxvbmcgZnJlZTsKK30gZHJtX3ZpYV9tbV90OworCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgaW50IHNpemU7CisJdW5zaWduZWQgbG9uZyBoYW5kbGU7CisJdm9pZCAqdmlydHVhbDsKK30gZHJtX3ZpYV9kbWFfdDsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL3ZpYV92ZXJpZmllci5jIGIvZHJpdmVycy9jaGFyL2RybS92aWFfdmVyaWZpZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzkyM2IwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9jaGFyL2RybS92aWFfdmVyaWZpZXIuYwpAQCAtMCwwICsxLDEwNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNCBUaGUgVW5pY2hyb21lIFByb2plY3QuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgMjAwNSBUaG9tYXMgSGVsbHN0cm9tLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YiBsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlCisgKiBuZXh0IHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucworICogb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT04tSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUihTKSwgQU5EL09SIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUgorICogREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcjogVGhvbWFzIEhlbGxzdHJvbSAyMDA0LCAyMDA1LgorICogVGhpcyBjb2RlIHdhcyB3cml0dGVuIHVzaW5nIGRvY3Mgb2J0YWluZWQgdW5kZXIgTkRBIGZyb20gVklBIEluYy4KKyAqCisgKiBEb24ndCBydW4gdGhpcyBjb2RlIGRpcmVjdGx5IG9uIGFuIEFHUCBidWZmZXIuIER1ZSB0byBjYWNoZSBwcm9ibGVtcyBpdCB3aWxsCisgKiBiZSB2ZXJ5IHNsb3cuCisgKi8KKworCisjaW5jbHVkZSAidmlhXzNkX3JlZy5oIgorI2luY2x1ZGUgImRybVAuaCIKKyNpbmNsdWRlICJkcm0uaCIKKyNpbmNsdWRlICJ2aWFfZHJtLmgiCisjaW5jbHVkZSAidmlhX3ZlcmlmaWVyLmgiCisjaW5jbHVkZSAidmlhX2Rydi5oIgorCit0eXBlZGVmIGVudW17CisJc3RhdGVfY29tbWFuZCwKKwlzdGF0ZV9oZWFkZXIyLAorCXN0YXRlX2hlYWRlcjEsCisJc3RhdGVfdmhlYWRlcjUsCisJc3RhdGVfdmhlYWRlcjYsCisJc3RhdGVfZXJyb3IKK30gdmVyaWZpZXJfc3RhdGVfdDsKKworCit0eXBlZGVmIGVudW17CisJbm9fY2hlY2sgPSAwLAorCWNoZWNrX2Zvcl9oZWFkZXIyLAorCWNoZWNrX2Zvcl9oZWFkZXIxLAorCWNoZWNrX2Zvcl9oZWFkZXIyX2VyciwKKwljaGVja19mb3JfaGVhZGVyMV9lcnIsCisJY2hlY2tfZm9yX2ZpcmUsCisJY2hlY2tfel9idWZmZXJfYWRkcjAsCisJY2hlY2tfel9idWZmZXJfYWRkcjEsCisJY2hlY2tfel9idWZmZXJfYWRkcl9tb2RlLAorCWNoZWNrX2Rlc3RpbmF0aW9uX2FkZHIwLAorCWNoZWNrX2Rlc3RpbmF0aW9uX2FkZHIxLAorCWNoZWNrX2Rlc3RpbmF0aW9uX2FkZHJfbW9kZSwKKwljaGVja19mb3JfZHVtbXksCisJY2hlY2tfZm9yX2RkLAorCWNoZWNrX3RleHR1cmVfYWRkcjAsCisJY2hlY2tfdGV4dHVyZV9hZGRyMSwKKwljaGVja190ZXh0dXJlX2FkZHIyLAorCWNoZWNrX3RleHR1cmVfYWRkcjMsCisJY2hlY2tfdGV4dHVyZV9hZGRyNCwKKwljaGVja190ZXh0dXJlX2FkZHI1LAorCWNoZWNrX3RleHR1cmVfYWRkcjYsCisJY2hlY2tfdGV4dHVyZV9hZGRyNywKKwljaGVja190ZXh0dXJlX2FkZHI4LAorCWNoZWNrX3RleHR1cmVfYWRkcl9tb2RlLAorCWNoZWNrX2Zvcl92ZXJ0ZXhfY291bnQsCisJY2hlY2tfbnVtYmVyX3RleHVuaXRzLAorCWZvcmJpZGRlbl9jb21tYW5kCit9aGF6YXJkX3Q7CisKKy8qCisgKiBBc3NvY2lhdGVzIGVhY2ggaGF6YXJkIGFib3ZlIHdpdGggYSBwb3NzaWJsZSBtdWx0aS1jb21tYW5kCisgKiBzZXF1ZW5jZS4gRm9yIGV4YW1wbGUgYW4gYWRkcmVzcyB0aGF0IGlzIHNwbGl0IG92ZXIgbXVsdGlwbGUKKyAqIGNvbW1hbmRzIGFuZCB0aGF0IG5lZWRzIHRvIGJlIGNoZWNrZWQgYXQgdGhlIGZpcnN0IGNvbW1hbmQgCisgKiB0aGF0IGRvZXMgbm90IGluY2x1ZGUgYW55IHBhcnQgb2YgdGhlIGFkZHJlc3MuCisgKi8KKworc3RhdGljIGRybV92aWFfc2VxdWVuY2VfdCBzZXFzW10gPSB7IAorCW5vX3NlcXVlbmNlLAorCW5vX3NlcXVlbmNlLAorCW5vX3NlcXVlbmNlLAorCW5vX3NlcXVlbmNlLAorCW5vX3NlcXVlbmNlLAorCW5vX3NlcXVlbmNlLAorCXpfYWRkcmVzcywKKwl6X2FkZHJlc3MsCisJel9hZGRyZXNzLAorCWRlc3RfYWRkcmVzcywKKwlkZXN0X2FkZHJlc3MsCisJZGVzdF9hZGRyZXNzLAorCW5vX3NlcXVlbmNlLAorCW5vX3NlcXVlbmNlLAorCXRleF9hZGRyZXNzLAorCXRleF9hZGRyZXNzLAorCXRleF9hZGRyZXNzLAorCXRleF9hZGRyZXNzLAorCXRleF9hZGRyZXNzLAorCXRleF9hZGRyZXNzLAorCXRleF9hZGRyZXNzLAorCXRleF9hZGRyZXNzLAorCXRleF9hZGRyZXNzLAorCXRleF9hZGRyZXNzLAorCW5vX3NlcXVlbmNlCit9OworICAgIAordHlwZWRlZiBzdHJ1Y3R7CisJdW5zaWduZWQgaW50IGNvZGU7CisJaGF6YXJkX3QgaHo7Cit9IGh6X2luaXRfdDsKKworCisKK3N0YXRpYyBoel9pbml0X3QgaW5pdF90YWJsZTFbXSA9IHsKKwl7MHhmMiwgY2hlY2tfZm9yX2hlYWRlcjJfZXJyfSwKKwl7MHhmMCwgY2hlY2tfZm9yX2hlYWRlcjFfZXJyfSwKKwl7MHhlZSwgY2hlY2tfZm9yX2ZpcmV9LAorCXsweGNjLCBjaGVja19mb3JfZHVtbXl9LAorCXsweGRkLCBjaGVja19mb3JfZGR9LAorCXsweDAwLCBub19jaGVja30sCisJezB4MTAsIGNoZWNrX3pfYnVmZmVyX2FkZHIwfSwKKwl7MHgxMSwgY2hlY2tfel9idWZmZXJfYWRkcjF9LAorCXsweDEyLCBjaGVja196X2J1ZmZlcl9hZGRyX21vZGV9LAorCXsweDEzLCBub19jaGVja30sCisJezB4MTQsIG5vX2NoZWNrfSwKKwl7MHgxNSwgbm9fY2hlY2t9LAorCXsweDIzLCBub19jaGVja30sCisJezB4MjQsIG5vX2NoZWNrfSwKKwl7MHgzMywgbm9fY2hlY2t9LAorCXsweDM0LCBub19jaGVja30sCisJezB4MzUsIG5vX2NoZWNrfSwKKwl7MHgzNiwgbm9fY2hlY2t9LAorCXsweDM3LCBub19jaGVja30sCisJezB4MzgsIG5vX2NoZWNrfSwKKwl7MHgzOSwgbm9fY2hlY2t9LAorCXsweDNBLCBub19jaGVja30sCisJezB4M0IsIG5vX2NoZWNrfSwKKwl7MHgzQywgbm9fY2hlY2t9LAorCXsweDNELCBub19jaGVja30sCisJezB4M0UsIG5vX2NoZWNrfSwKKwl7MHg0MCwgY2hlY2tfZGVzdGluYXRpb25fYWRkcjB9LAorCXsweDQxLCBjaGVja19kZXN0aW5hdGlvbl9hZGRyMX0sCisJezB4NDIsIGNoZWNrX2Rlc3RpbmF0aW9uX2FkZHJfbW9kZX0sCisJezB4NDMsIG5vX2NoZWNrfSwKKwl7MHg0NCwgbm9fY2hlY2t9LAorCXsweDUwLCBub19jaGVja30sCisJezB4NTEsIG5vX2NoZWNrfSwKKwl7MHg1Miwgbm9fY2hlY2t9LAorCXsweDUzLCBub19jaGVja30sCisJezB4NTQsIG5vX2NoZWNrfSwKKwl7MHg1NSwgbm9fY2hlY2t9LAorCXsweDU2LCBub19jaGVja30sCisJezB4NTcsIG5vX2NoZWNrfSwKKwl7MHg1OCwgbm9fY2hlY2t9LAorCXsweDcwLCBub19jaGVja30sCisJezB4NzEsIG5vX2NoZWNrfSwKKwl7MHg3OCwgbm9fY2hlY2t9LAorCXsweDc5LCBub19jaGVja30sCisJezB4N0EsIG5vX2NoZWNrfSwKKwl7MHg3Qiwgbm9fY2hlY2t9LAorCXsweDdDLCBub19jaGVja30sCisJezB4N0QsIGNoZWNrX2Zvcl92ZXJ0ZXhfY291bnR9Cit9OworCisgICAKKwkJICAgICAgIAorc3RhdGljIGh6X2luaXRfdCBpbml0X3RhYmxlMltdID0geworCXsweGYyLCBjaGVja19mb3JfaGVhZGVyMl9lcnJ9LAorCXsweGYwLCBjaGVja19mb3JfaGVhZGVyMV9lcnJ9LAorCXsweGVlLCBjaGVja19mb3JfZmlyZX0sCisJezB4Y2MsIGNoZWNrX2Zvcl9kdW1teX0sCisJezB4MDAsIGNoZWNrX3RleHR1cmVfYWRkcjB9LAorCXsweDAxLCBjaGVja190ZXh0dXJlX2FkZHIwfSwKKwl7MHgwMiwgY2hlY2tfdGV4dHVyZV9hZGRyMH0sCisJezB4MDMsIGNoZWNrX3RleHR1cmVfYWRkcjB9LAorCXsweDA0LCBjaGVja190ZXh0dXJlX2FkZHIwfSwKKwl7MHgwNSwgY2hlY2tfdGV4dHVyZV9hZGRyMH0sCisJezB4MDYsIGNoZWNrX3RleHR1cmVfYWRkcjB9LAorCXsweDA3LCBjaGVja190ZXh0dXJlX2FkZHIwfSwKKwl7MHgwOCwgY2hlY2tfdGV4dHVyZV9hZGRyMH0sCisJezB4MDksIGNoZWNrX3RleHR1cmVfYWRkcjB9LAorCXsweDIwLCBjaGVja190ZXh0dXJlX2FkZHIxfSwKKwl7MHgyMSwgY2hlY2tfdGV4dHVyZV9hZGRyMX0sCisJezB4MjIsIGNoZWNrX3RleHR1cmVfYWRkcjF9LAorCXsweDIzLCBjaGVja190ZXh0dXJlX2FkZHI0fSwKKwl7MHgyQiwgY2hlY2tfdGV4dHVyZV9hZGRyM30sCisJezB4MkMsIGNoZWNrX3RleHR1cmVfYWRkcjN9LAorCXsweDJELCBjaGVja190ZXh0dXJlX2FkZHIzfSwKKwl7MHgyRSwgY2hlY2tfdGV4dHVyZV9hZGRyM30sCisJezB4MkYsIGNoZWNrX3RleHR1cmVfYWRkcjN9LAorCXsweDMwLCBjaGVja190ZXh0dXJlX2FkZHIzfSwKKwl7MHgzMSwgY2hlY2tfdGV4dHVyZV9hZGRyM30sCisJezB4MzIsIGNoZWNrX3RleHR1cmVfYWRkcjN9LAorCXsweDMzLCBjaGVja190ZXh0dXJlX2FkZHIzfSwKKwl7MHgzNCwgY2hlY2tfdGV4dHVyZV9hZGRyM30sCisJezB4NEIsIGNoZWNrX3RleHR1cmVfYWRkcjV9LAorCXsweDRDLCBjaGVja190ZXh0dXJlX2FkZHI2fSwKKwl7MHg1MSwgY2hlY2tfdGV4dHVyZV9hZGRyN30sCisJezB4NTIsIGNoZWNrX3RleHR1cmVfYWRkcjh9LAorCXsweDc3LCBjaGVja190ZXh0dXJlX2FkZHIyfSwKKwl7MHg3OCwgbm9fY2hlY2t9LAorCXsweDc5LCBub19jaGVja30sCisJezB4N0EsIG5vX2NoZWNrfSwKKwl7MHg3QiwgY2hlY2tfdGV4dHVyZV9hZGRyX21vZGV9LAorCXsweDdDLCBub19jaGVja30sCisJezB4N0QsIG5vX2NoZWNrfSwKKwl7MHg3RSwgbm9fY2hlY2t9LAorCXsweDdGLCBub19jaGVja30sCisJezB4ODAsIG5vX2NoZWNrfSwKKwl7MHg4MSwgbm9fY2hlY2t9LAorCXsweDgyLCBub19jaGVja30sCisJezB4ODMsIG5vX2NoZWNrfSwKKwl7MHg4NSwgbm9fY2hlY2t9LAorCXsweDg2LCBub19jaGVja30sCisJezB4ODcsIG5vX2NoZWNrfSwKKwl7MHg4OCwgbm9fY2hlY2t9LAorCXsweDg5LCBub19jaGVja30sCisJezB4OEEsIG5vX2NoZWNrfSwKKwl7MHg5MCwgbm9fY2hlY2t9LAorCXsweDkxLCBub19jaGVja30sCisJezB4OTIsIG5vX2NoZWNrfSwKKwl7MHg5Mywgbm9fY2hlY2t9Cit9OworCitzdGF0aWMgaHpfaW5pdF90IGluaXRfdGFibGUzW10gPSB7CisJezB4ZjIsIGNoZWNrX2Zvcl9oZWFkZXIyX2Vycn0sCisJezB4ZjAsIGNoZWNrX2Zvcl9oZWFkZXIxX2Vycn0sCisJezB4Y2MsIGNoZWNrX2Zvcl9kdW1teX0sCisJezB4MDAsIGNoZWNrX251bWJlcl90ZXh1bml0c30KK307CisgICAKKwkJICAgICAgIAorc3RhdGljIGhhemFyZF90IHRhYmxlMVsyNTZdOyAKK3N0YXRpYyBoYXphcmRfdCB0YWJsZTJbMjU2XTsgCitzdGF0aWMgaGF6YXJkX3QgdGFibGUzWzI1Nl07IAorCisKKworc3RhdGljIF9faW5saW5lX18gaW50CitlYXRfd29yZHMoY29uc3QgdWludDMyX3QgKipidWYsIGNvbnN0IHVpbnQzMl90ICpidWZfZW5kLCB1bnNpZ25lZCBudW1fd29yZHMpCit7CisJaWYgKCgqYnVmIC0gYnVmX2VuZCkgPj0gbnVtX3dvcmRzKSB7CisJCSpidWYgKz0gbnVtX3dvcmRzOworCQlyZXR1cm4gMDsKKwl9IAorCURSTV9FUlJPUigiSWxsZWdhbCB0ZXJtaW5hdGlvbiBvZiBETUEgY29tbWFuZCBidWZmZXJcbiIpOworCXJldHVybiAxOworfQorCisKKy8qCisgKiBQYXJ0aWFsbHkgc3RvbGVuIGZyb20gZHJtX21lbW9yeS5oCisgKi8KKworc3RhdGljIF9faW5saW5lX18gZHJtX21hcF90ICoKK3ZpYV9kcm1fbG9va3VwX2FncF9tYXAgKGRybV92aWFfc3RhdGVfdCAqc2VxLCB1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplLCAKKwkJCWRybV9kZXZpY2VfdCAqZGV2KQoreworCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3Q7CisJZHJtX21hcF9saXN0X3QgKnJfbGlzdDsKKwlkcm1fbWFwX3QgKm1hcCA9IHNlcS0+bWFwX2NhY2hlOworCisJaWYgKG1hcCAmJiBtYXAtPm9mZnNldCA8PSBvZmZzZXQgJiYgKG9mZnNldCArIHNpemUpIDw9IChtYXAtPm9mZnNldCArIG1hcC0+c2l6ZSkpIHsKKwkJcmV0dXJuIG1hcDsKKwl9CisJCQorCWxpc3RfZm9yX2VhY2gobGlzdCwgJmRldi0+bWFwbGlzdC0+aGVhZCkgeworCQlyX2xpc3QgPSAoZHJtX21hcF9saXN0X3QgKikgbGlzdDsKKwkJbWFwID0gcl9saXN0LT5tYXA7CisJCWlmICghbWFwKQorCQkJY29udGludWU7CisJCWlmIChtYXAtPm9mZnNldCA8PSBvZmZzZXQgJiYgKG9mZnNldCArIHNpemUpIDw9IChtYXAtPm9mZnNldCArIG1hcC0+c2l6ZSkgJiYgCisJCSAgICAhKG1hcC0+ZmxhZ3MgJiBfRFJNX1JFU1RSSUNURUQpICYmIChtYXAtPnR5cGUgPT0gX0RSTV9BR1ApKSB7CisJCQlzZXEtPm1hcF9jYWNoZSA9IG1hcDsKKwkJCXJldHVybiBtYXA7CisJCX0KKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKKworLyoKKyAqIFJlcXVpcmUgdGhhdCBhbGwgQUdQIHRleHR1cmUgbGV2ZWxzIHJlc2lkZSBpbiB0aGUgc2FtZSBBR1AgbWFwIHdoaWNoIHNob3VsZCAKKyAqIGJlIG1hcHBhYmxlIGJ5IHRoZSBjbGllbnQuIFRoaXMgaXMgbm90IGEgYmlnIHJlc3RyaWN0aW9uLgorICogRklYTUU6IFRvIGFjdHVhbGx5IGVuZm9yY2UgdGhpcyBzZWN1cml0eSBwb2xpY3kgc3RyaWN0bHksIGRybV9ybW1hcCAKKyAqIHdvdWxkIGhhdmUgdG8gd2FpdCBmb3IgZG1hIHF1aWVzY2VudCBiZWZvcmUgcmVtb3ZpbmcgYW4gQUdQIG1hcC4gCisgKiBUaGUgdmlhX2RybV9sb29rdXBfYWdwX21hcCBjYWxsIGluIHJlYWxpdHkgc2VlbXMgdG8gdGFrZQorICogdmVyeSBsaXR0bGUgQ1BVIHRpbWUuCisgKi8KKworCitzdGF0aWMgX19pbmxpbmVfXyBpbnQKK2ZpbmlzaF9jdXJyZW50X3NlcXVlbmNlKGRybV92aWFfc3RhdGVfdCAqY3VyX3NlcSkgCit7CisJc3dpdGNoKGN1cl9zZXEtPnVuZmluaXNoZWQpIHsKKwljYXNlIHpfYWRkcmVzczoKKwkJRFJNX0RFQlVHKCJaIEJ1ZmZlciBzdGFydCBhZGRyZXNzIGlzIDB4JXhcbiIsIGN1cl9zZXEtPnpfYWRkcik7CisJCWJyZWFrOworCWNhc2UgZGVzdF9hZGRyZXNzOgorCQlEUk1fREVCVUcoIkRlc3RpbmF0aW9uIHN0YXJ0IGFkZHJlc3MgaXMgMHgleFxuIiwgY3VyX3NlcS0+ZF9hZGRyKTsKKwkJYnJlYWs7CisJY2FzZSB0ZXhfYWRkcmVzczoKKwkJaWYgKGN1cl9zZXEtPmFncF90ZXh0dXJlKSB7CQkJIAorCQkJdW5zaWduZWQgc3RhcnQgPSBjdXJfc2VxLT50ZXhfbGV2ZWxfbG9bY3VyX3NlcS0+dGV4dHVyZV07CisJCQl1bnNpZ25lZCBlbmQgPSBjdXJfc2VxLT50ZXhfbGV2ZWxfaGlbY3VyX3NlcS0+dGV4dHVyZV07CisJCQl1bnNpZ25lZCBsb25nIGxvPX4wLCBoaT0wLCB0bXA7CisJCQl1aW50MzJfdCAqYWRkciwgKnBpdGNoLCAqaGVpZ2h0LCB0ZXg7CisJCQl1bnNpZ25lZCBpOworCisJCQlpZiAoZW5kID4gOSkgZW5kID0gOTsKKwkJCWlmIChzdGFydCA+IDkpIHN0YXJ0ID0gOTsKKworCQkJYWRkciA9JihjdXJfc2VxLT50X2FkZHJbdGV4ID0gY3VyX3NlcS0+dGV4dHVyZV1bc3RhcnRdKTsKKwkJCXBpdGNoID0gJihjdXJfc2VxLT5waXRjaFt0ZXhdW3N0YXJ0XSk7CisJCQloZWlnaHQgPSAmKGN1cl9zZXEtPmhlaWdodFt0ZXhdW3N0YXJ0XSk7CisKKwkJCWZvciAoaT1zdGFydDsgaTw9IGVuZDsgKytpKSB7CisJCQkJdG1wID0gKmFkZHIrKzsKKwkJCQlpZiAodG1wIDwgbG8pIGxvID0gdG1wOworCQkJCXRtcCArPSAoKmhlaWdodCsrIDw8ICpwaXRjaCsrKTsKKwkJCQlpZiAodG1wID4gaGkpIGhpID0gdG1wOworCQkJfQorCisJCQlpZiAoISB2aWFfZHJtX2xvb2t1cF9hZ3BfbWFwIChjdXJfc2VxLCBsbywgaGkgLSBsbywgY3VyX3NlcS0+ZGV2KSkgeworCQkJCURSTV9FUlJPUigiQUdQIHRleHR1cmUgaXMgbm90IGluIGFsbG93ZWQgbWFwXG4iKTsKKwkJCQlyZXR1cm4gMjsKKwkJCX0KKwkJfQkKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCWN1cl9zZXEtPnVuZmluaXNoZWQgPSBub19zZXF1ZW5jZTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IAoraW52ZXN0aWdhdGVfaGF6YXJkKCB1aW50MzJfdCBjbWQsIGhhemFyZF90IGh6LCBkcm1fdmlhX3N0YXRlX3QgKmN1cl9zZXEpCit7CisJcmVnaXN0ZXIgdWludDMyX3QgdG1wLCAqdG1wX2FkZHI7CisKKwlpZiAoY3VyX3NlcS0+dW5maW5pc2hlZCAmJiAoY3VyX3NlcS0+dW5maW5pc2hlZCAhPSBzZXFzW2h6XSkpIHsKKwkJaW50IHJldDsKKwkJaWYgKChyZXQgPSBmaW5pc2hfY3VycmVudF9zZXF1ZW5jZShjdXJfc2VxKSkpIHJldHVybiByZXQ7CisJfQorCisJc3dpdGNoKGh6KSB7CisJY2FzZSBjaGVja19mb3JfaGVhZGVyMjoKKwkJaWYgKGNtZCA9PSBIQUxDWU9OX0hFQURFUjIpIHJldHVybiAxOworCQlyZXR1cm4gMDsKKwljYXNlIGNoZWNrX2Zvcl9oZWFkZXIxOgorCQlpZiAoKGNtZCAmIEhBTENZT05fSEVBREVSMU1BU0spID09IEhBTENZT05fSEVBREVSMSkgcmV0dXJuIDE7CisJCXJldHVybiAwOworCWNhc2UgY2hlY2tfZm9yX2hlYWRlcjJfZXJyOgorCQlpZiAoY21kID09IEhBTENZT05fSEVBREVSMikgcmV0dXJuIDE7CisJCURSTV9FUlJPUigiSWxsZWdhbCBETUEgSEFMQ1lPTl9IRUFERVIyIGNvbW1hbmRcbiIpOworCQlicmVhazsKKwljYXNlIGNoZWNrX2Zvcl9oZWFkZXIxX2VycjoKKwkJaWYgKChjbWQgJiBIQUxDWU9OX0hFQURFUjFNQVNLKSA9PSBIQUxDWU9OX0hFQURFUjEpIHJldHVybiAxOworCQlEUk1fRVJST1IoIklsbGVnYWwgRE1BIEhBTENZT05fSEVBREVSMSBjb21tYW5kXG4iKTsKKwkJYnJlYWs7CisJY2FzZSBjaGVja19mb3JfZmlyZToKKwkJaWYgKChjbWQgJiBIQUxDWU9OX0ZJUkVNQVNLKSA9PSBIQUxDWU9OX0ZJUkVDTUQpIHJldHVybiAxOyAKKwkJRFJNX0VSUk9SKCJJbGxlZ2FsIERNQSBIQUxDWU9OX0ZJUkVDTUQgY29tbWFuZFxuIik7CisJCWJyZWFrOworCWNhc2UgY2hlY2tfZm9yX2R1bW15OgorCQlpZiAoSENfRFVNTVkgPT0gY21kKSByZXR1cm4gMDsKKwkJRFJNX0VSUk9SKCJJbGxlZ2FsIERNQSBIQ19EVU1NWSBjb21tYW5kXG4iKTsKKwkJYnJlYWs7CisJY2FzZSBjaGVja19mb3JfZGQ6CisJCWlmICgweGRkZGRkZGRkID09IGNtZCkgcmV0dXJuIDA7CisJCURSTV9FUlJPUigiSWxsZWdhbCBETUEgMHhkZGRkZGRkZCBjb21tYW5kXG4iKTsKKwkJYnJlYWs7CisJY2FzZSBjaGVja196X2J1ZmZlcl9hZGRyMDoKKwkJY3VyX3NlcS0+dW5maW5pc2hlZCA9IHpfYWRkcmVzczsKKwkJY3VyX3NlcS0+el9hZGRyID0gKGN1cl9zZXEtPnpfYWRkciAmIDB4RkYwMDAwMDApIHwKKwkJCShjbWQgJiAweDAwRkZGRkZGKTsKKwkJcmV0dXJuIDA7CisJY2FzZSBjaGVja196X2J1ZmZlcl9hZGRyMToKKwkJY3VyX3NlcS0+dW5maW5pc2hlZCA9IHpfYWRkcmVzczsKKwkJY3VyX3NlcS0+el9hZGRyID0gKGN1cl9zZXEtPnpfYWRkciAmIDB4MDBGRkZGRkYpIHwKKwkJCSgoY21kICYgMHhGRikgPDwgMjQpOworCQlyZXR1cm4gMDsKKwljYXNlIGNoZWNrX3pfYnVmZmVyX2FkZHJfbW9kZToKKwkJY3VyX3NlcS0+dW5maW5pc2hlZCA9IHpfYWRkcmVzczsKKwkJaWYgKChjbWQgJiAweDAwMDBDMDAwKSA9PSAwKSByZXR1cm4gMDsKKwkJRFJNX0VSUk9SKCJBdHRlbXB0IHRvIHBsYWNlIFogYnVmZmVyIGluIHN5c3RlbSBtZW1vcnlcbiIpOworCQlyZXR1cm4gMjsKKwljYXNlIGNoZWNrX2Rlc3RpbmF0aW9uX2FkZHIwOgorCQljdXJfc2VxLT51bmZpbmlzaGVkID0gZGVzdF9hZGRyZXNzOworCQljdXJfc2VxLT5kX2FkZHIgPSAoY3VyX3NlcS0+ZF9hZGRyICYgMHhGRjAwMDAwMCkgfAorCQkJKGNtZCAmIDB4MDBGRkZGRkYpOworCQlyZXR1cm4gMDsKKwljYXNlIGNoZWNrX2Rlc3RpbmF0aW9uX2FkZHIxOgorCQljdXJfc2VxLT51bmZpbmlzaGVkID0gZGVzdF9hZGRyZXNzOworCQljdXJfc2VxLT5kX2FkZHIgPSAoY3VyX3NlcS0+ZF9hZGRyICYgMHgwMEZGRkZGRikgfAorCQkJKChjbWQgJiAweEZGKSA8PCAyNCk7CisJCXJldHVybiAwOworCWNhc2UgY2hlY2tfZGVzdGluYXRpb25fYWRkcl9tb2RlOgorCQljdXJfc2VxLT51bmZpbmlzaGVkID0gZGVzdF9hZGRyZXNzOworCQlpZiAoKGNtZCAmIDB4MDAwMEMwMDApID09IDApIHJldHVybiAwOworCQlEUk1fRVJST1IoIkF0dGVtcHQgdG8gcGxhY2UgM0QgZHJhd2luZyBidWZmZXIgaW4gc3lzdGVtIG1lbW9yeVxuIik7CisJCXJldHVybiAyOwkgICAgCisJY2FzZSBjaGVja190ZXh0dXJlX2FkZHIwOgorCQljdXJfc2VxLT51bmZpbmlzaGVkID0gdGV4X2FkZHJlc3M7CisJCXRtcCA9IChjbWQgPj4gMjQpOworCQl0bXBfYWRkciA9ICZjdXJfc2VxLT50X2FkZHJbY3VyX3NlcS0+dGV4dHVyZV1bdG1wXTsKKwkJKnRtcF9hZGRyID0gKCp0bXBfYWRkciAmIDB4RkYwMDAwMDApIHwgKGNtZCAmIDB4MDBGRkZGRkYpOworCQlyZXR1cm4gMDsKKwljYXNlIGNoZWNrX3RleHR1cmVfYWRkcjE6CisJCWN1cl9zZXEtPnVuZmluaXNoZWQgPSB0ZXhfYWRkcmVzczsKKwkJdG1wID0gKChjbWQgPj4gMjQpIC0gMHgyMCk7CisJCXRtcCArPSB0bXAgPDwgMTsKKwkJdG1wX2FkZHIgPSAmY3VyX3NlcS0+dF9hZGRyW2N1cl9zZXEtPnRleHR1cmVdW3RtcF07CisJCSp0bXBfYWRkciA9ICgqdG1wX2FkZHIgJiAweDAwRkZGRkZGKSB8ICgoY21kICYgMHhGRikgPDwgMjQpOworCQl0bXBfYWRkcisrOworCQkqdG1wX2FkZHIgPSAoKnRtcF9hZGRyICYgMHgwMEZGRkZGRikgfCAoKGNtZCAmIDB4RkYwMCkgPDwgMTYpOworCQl0bXBfYWRkcisrOworCQkqdG1wX2FkZHIgPSAoKnRtcF9hZGRyICYgMHgwMEZGRkZGRikgfCAoKGNtZCAmIDB4RkYwMDAwKSA8PCA4KTsKKwkJcmV0dXJuIDA7CisJY2FzZSBjaGVja190ZXh0dXJlX2FkZHIyOgorCQljdXJfc2VxLT51bmZpbmlzaGVkID0gdGV4X2FkZHJlc3M7CisJCWN1cl9zZXEtPnRleF9sZXZlbF9sb1t0bXAgPSBjdXJfc2VxLT50ZXh0dXJlXSA9IGNtZCAmIDB4M0Y7CisJCWN1cl9zZXEtPnRleF9sZXZlbF9oaVt0bXBdID0gKGNtZCAmIDB4RkMwKSA+PiA2OworCQlyZXR1cm4gMDsKKwljYXNlIGNoZWNrX3RleHR1cmVfYWRkcjM6CisJCWN1cl9zZXEtPnVuZmluaXNoZWQgPSB0ZXhfYWRkcmVzczsKKwkJdG1wID0gKChjbWQgPj4gMjQpIC0gMHgyQik7CisJCWN1cl9zZXEtPnBpdGNoW2N1cl9zZXEtPnRleHR1cmVdW3RtcF0gPSAoY21kICYgMHgwMEYwMDAwMCkgPj4gMjA7CisJCWlmICghdG1wICYmIChjbWQgJiAweDAwMEZGRkZGKSkgeworCQkJRFJNX0VSUk9SKCJVbmltcGxlbWVudGVkIHRleHR1cmUgbGV2ZWwgMCBwaXRjaCBtb2RlLlxuIik7CisJCQlyZXR1cm4gMjsKKwkJfQorCQlyZXR1cm4gMDsKKwljYXNlIGNoZWNrX3RleHR1cmVfYWRkcjQ6CisJCWN1cl9zZXEtPnVuZmluaXNoZWQgPSB0ZXhfYWRkcmVzczsKKwkJdG1wX2FkZHIgPSAmY3VyX3NlcS0+dF9hZGRyW2N1cl9zZXEtPnRleHR1cmVdWzldOworCQkqdG1wX2FkZHIgPSAoKnRtcF9hZGRyICYgMHgwMEZGRkZGRikgfCAoKGNtZCAmIDB4RkYpIDw8IDI0KTsKKwkJcmV0dXJuIDA7CisJY2FzZSBjaGVja190ZXh0dXJlX2FkZHI1OgorCWNhc2UgY2hlY2tfdGV4dHVyZV9hZGRyNjoKKwkJY3VyX3NlcS0+dW5maW5pc2hlZCA9IHRleF9hZGRyZXNzOworCQkvKgorCQkgKiBUZXh0dXJlIHdpZHRoLiBXZSBkb24ndCBjYXJlIHNpbmNlIHdlIGhhdmUgdGhlIHBpdGNoLgorCQkgKi8gIAorCQlyZXR1cm4gMDsKKwljYXNlIGNoZWNrX3RleHR1cmVfYWRkcjc6CisJCWN1cl9zZXEtPnVuZmluaXNoZWQgPSB0ZXhfYWRkcmVzczsKKwkJdG1wX2FkZHIgPSAmKGN1cl9zZXEtPmhlaWdodFtjdXJfc2VxLT50ZXh0dXJlXVswXSk7CisJCXRtcF9hZGRyWzVdID0gMSA8PCAoKGNtZCAmIDB4MDBGMDAwMDApID4+IDIwKTsKKwkJdG1wX2FkZHJbNF0gPSAxIDw8ICgoY21kICYgMHgwMDBGMDAwMCkgPj4gMTYpOworCQl0bXBfYWRkclszXSA9IDEgPDwgKChjbWQgJiAweDAwMDBGMDAwKSA+PiAxMik7CisJCXRtcF9hZGRyWzJdID0gMSA8PCAoKGNtZCAmIDB4MDAwMDBGMDApID4+IDgpOworCQl0bXBfYWRkclsxXSA9IDEgPDwgKChjbWQgJiAweDAwMDAwMEYwKSA+PiA0KTsKKwkJdG1wX2FkZHJbMF0gPSAxIDw8IChjbWQgJiAweDAwMDAwMDBGKTsKKwkJcmV0dXJuIDA7CisJY2FzZSBjaGVja190ZXh0dXJlX2FkZHI4OgorCQljdXJfc2VxLT51bmZpbmlzaGVkID0gdGV4X2FkZHJlc3M7CisJCXRtcF9hZGRyID0gJihjdXJfc2VxLT5oZWlnaHRbY3VyX3NlcS0+dGV4dHVyZV1bMF0pOworCQl0bXBfYWRkcls5XSA9IDEgPDwgKChjbWQgJiAweDAwMDBGMDAwKSA+PiAxMik7CisJICAgICAgICB0bXBfYWRkcls4XSA9IDEgPDwgKChjbWQgJiAweDAwMDAwRjAwKSA+PiA4KTsKKwkJdG1wX2FkZHJbN10gPSAxIDw8ICgoY21kICYgMHgwMDAwMDBGMCkgPj4gNCk7CisJCXRtcF9hZGRyWzZdID0gMSA8PCAoY21kICYgMHgwMDAwMDAwRik7CisJCXJldHVybiAwOworCWNhc2UgY2hlY2tfdGV4dHVyZV9hZGRyX21vZGU6CisJCWN1cl9zZXEtPnVuZmluaXNoZWQgPSB0ZXhfYWRkcmVzczsKKwkJaWYgKCAyID09ICh0bXAgPSBjbWQgJiAweDAwMDAwMDAzKSkgeworCQkJRFJNX0VSUk9SKCJBdHRlbXB0IHRvIGZldGNoIHRleHR1cmUgZnJvbSBzeXN0ZW0gbWVtb3J5LlxuIik7IAorCQkJcmV0dXJuIDI7CisJCX0KKwkJY3VyX3NlcS0+YWdwX3RleHR1cmUgPSAodG1wID09IDMpOworCQljdXJfc2VxLT50ZXhfcGFsZXR0ZV9zaXplW2N1cl9zZXEtPnRleHR1cmVdID0gCisJCQkoY21kID4+IDE2KSAmIDB4MDAwMDAwMDA3OworCQlyZXR1cm4gMDsKKwljYXNlIGNoZWNrX2Zvcl92ZXJ0ZXhfY291bnQ6CisJCWN1cl9zZXEtPnZlcnRleF9jb3VudCA9IGNtZCAmIDB4MDAwMEZGRkY7CisJCXJldHVybiAwOworCWNhc2UgY2hlY2tfbnVtYmVyX3RleHVuaXRzOgorCSAgICAgICAgY3VyX3NlcS0+bXVsdGl0ZXggPSAoY21kID4+IDMpICYgMTsKKwkJcmV0dXJuIDA7CisJZGVmYXVsdDoKKwkJRFJNX0VSUk9SKCJJbGxlZ2FsIERNQSBkYXRhOiAweCV4XG4iLCBjbWQpOworCQlyZXR1cm4gMjsKKwl9CisJcmV0dXJuIDI7Cit9CisKKworc3RhdGljIF9faW5saW5lX18gaW50Cit2aWFfY2hlY2tfcHJpbV9saXN0KHVpbnQzMl90IGNvbnN0ICoqYnVmZmVyLCBjb25zdCB1aW50MzJfdCAqYnVmX2VuZCwKKwkJICAgIGRybV92aWFfc3RhdGVfdCAqY3VyX3NlcSkKK3sKKwlkcm1fdmlhX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSAoZHJtX3ZpYV9wcml2YXRlX3QgKikgY3VyX3NlcS0+ZGV2LT5kZXZfcHJpdmF0ZTsKKwl1aW50MzJfdCBhX2ZpcmUsIGJjbWQgLCBkd19jb3VudDsKKwlpbnQgcmV0ID0gMDsKKwlpbnQgaGF2ZV9maXJlOworCWNvbnN0IHVpbnQzMl90ICpidWYgPSAqYnVmZmVyOworCisJd2hpbGUoYnVmIDwgYnVmX2VuZCkgeworCSAgICAgICAgaGF2ZV9maXJlID0gMDsKKwkJaWYgKChidWZfZW5kIC0gYnVmKSA8IDIpIHsKKwkJCURSTV9FUlJPUigiVW5leHBlY3RlZCB0ZXJtaW5hdGlvbiBvZiBwcmltaXRpdmUgbGlzdC5cbiIpOworCQkJcmV0ID0gMTsKKwkJCWJyZWFrOworCQl9CisJCWlmICgoKmJ1ZiAmIEhDX0FDTURfTUFTSykgIT0gSENfQUNNRF9IQ21kQikgYnJlYWs7CisJCWJjbWQgPSAqYnVmKys7CisJCWlmICgoKmJ1ZiAmIEhDX0FDTURfTUFTSykgIT0gSENfQUNNRF9IQ21kQSkgeworCQkJRFJNX0VSUk9SKCJFeHBlY3RlZCBWZXJ0ZXggTGlzdCBBIGNvbW1hbmQsIGdvdCAweCV4XG4iLAorCQkJCSAgKmJ1Zik7CisJCQlyZXQgPSAxOworCQkJYnJlYWs7CisJCX0KKwkJYV9maXJlID0gKmJ1ZisrIHwgSENfSFBMRU5EX01BU0sgfCBIQ19IUE1WYWxpZE5fTUFTSyB8IEhDX0hFM0ZpcmVfTUFTSzsJCisJCisJCS8qCisJCSAqIEhvdyBtYW55IGR3b3JkcyBwZXIgdmVydGV4ID8KKwkJICovIAorCQkKKwkJaWYgKGN1cl9zZXEtPmFncCAmJiAoKGJjbWQgJiAoMHhGIDw8IDExKSkgPT0gMCkpIHsKKwkJCURSTV9FUlJPUigiSWxsZWdhbCBCIGNvbW1hbmQgdmVydGV4IGRhdGEgZm9yIEFHUC5cbiIpOworCQkJcmV0ID0gMTsKKwkJCWJyZWFrOworCQl9IAorCisJCWR3X2NvdW50ID0gMDsKKwkJaWYgKGJjbWQgJiAoMSA8PCA3KSkgZHdfY291bnQgKz0gKGN1cl9zZXEtPm11bHRpdGV4KSA/IDI6MTsKKwkJaWYgKGJjbWQgJiAoMSA8PCA4KSkgZHdfY291bnQgKz0gKGN1cl9zZXEtPm11bHRpdGV4KSA/IDI6MTsKKwkJaWYgKGJjbWQgJiAoMSA8PCA5KSkgZHdfY291bnQrKzsKKwkJaWYgKGJjbWQgJiAoMSA8PCAxMCkpIGR3X2NvdW50Kys7CisJCWlmIChiY21kICYgKDEgPDwgMTEpKSBkd19jb3VudCsrOworCQlpZiAoYmNtZCAmICgxIDw8IDEyKSkgZHdfY291bnQrKzsKKwkJaWYgKGJjbWQgJiAoMSA8PCAxMykpIGR3X2NvdW50Kys7CisJCWlmIChiY21kICYgKDEgPDwgMTQpKSBkd19jb3VudCsrOworCisJCXdoaWxlKGJ1ZiA8IGJ1Zl9lbmQpIHsKKwkJCWlmICgqYnVmID09IGFfZmlyZSkgeworCQkJCWlmIChkZXZfcHJpdi0+bnVtX2ZpcmVfb2Zmc2V0cyA+PSBWSUFfRklSRV9CVUZfU0laRSkgeworCQkJCQlEUk1fRVJST1IoIkZpcmUgb2Zmc2V0IGJ1ZmZlciBmdWxsLlxuIik7CisJCQkJCXJldCA9IDE7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlkZXZfcHJpdi0+ZmlyZV9vZmZzZXRzW2Rldl9wcml2LT5udW1fZmlyZV9vZmZzZXRzKytdID0gYnVmOworCQkJICAgICAgICBoYXZlX2ZpcmUgPSAxOworCQkJCWJ1ZisrOworCQkJCWlmIChidWYgPCBidWZfZW5kICYmICpidWYgPT0gYV9maXJlKSAKKwkJCQkJYnVmKys7CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoKCpidWYgPT0gSEFMQ1lPTl9IRUFERVIyKSB8fCAKKwkJCSAgICAoKCpidWYgJiBIQUxDWU9OX0ZJUkVNQVNLKSA9PSBIQUxDWU9OX0ZJUkVDTUQpKSB7CisJCQkJRFJNX0VSUk9SKCJNaXNzaW5nIFZlcnRleCBGaXJlIGNvbW1hbmQsICIKKwkJCQkJICAiU3RyYXkgVmVydGV4IEZpcmUgY29tbWFuZCAgb3IgdmVyaWZpZXIgIgorCQkJCQkgICJsb3N0IHN5bmMuXG4iKTsKKwkJCQlyZXQgPSAxOworCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKChyZXQgPSBlYXRfd29yZHMoJmJ1ZiwgYnVmX2VuZCwgZHdfY291bnQpKSkKKwkJCQlicmVhazsKKwkJfQorCQlpZiAoYnVmID49IGJ1Zl9lbmQgJiYgIWhhdmVfZmlyZSkgeworCQkJRFJNX0VSUk9SKCJNaXNzaW5nIFZlcnRleCBGaXJlIGNvbW1hbmQgb3IgdmVyaWZpZXIgIgorCQkJCSAgImxvc3Qgc3luYy5cbiIpOworCQkJcmV0ID0gMTsKKwkJCWJyZWFrOworCQl9CisJCWlmIChjdXJfc2VxLT5hZ3AgJiYgKChidWYgLSBjdXJfc2VxLT5idWZfc3RhcnQpICYgMHgwMSkpIHsKKwkJCURSTV9FUlJPUigiQUdQIFByaW1pdGl2ZSBsaXN0IGVuZCBtaXNhbGlnbmVkLlxuIik7CisJCQlyZXQgPSAxOworCQkJYnJlYWs7CisJCX0KKwl9IAorCSpidWZmZXIgPSBidWY7CisJcmV0dXJuIHJldDsKK30KKworCisJCSAgICAgICAKKworCitzdGF0aWMgX19pbmxpbmVfXyB2ZXJpZmllcl9zdGF0ZV90Cit2aWFfY2hlY2tfaGVhZGVyMiggdWludDMyX3QgY29uc3QgKipidWZmZXIsIGNvbnN0IHVpbnQzMl90ICpidWZfZW5kLCAKKwkJICAgZHJtX3ZpYV9zdGF0ZV90ICpoY19zdGF0ZSkKK3sKKwl1aW50MzJfdCBjbWQ7CisJaW50IGh6X21vZGU7CisJaGF6YXJkX3QgaHo7CisJY29uc3QgdWludDMyX3QgKmJ1ZiA9ICpidWZmZXI7CisJY29uc3QgaGF6YXJkX3QgKmh6X3RhYmxlOworCisKKwlpZiAoKGJ1Zl9lbmQgLSBidWYpIDwgMikgeworCQlEUk1fRVJST1IoIklsbGVnYWwgdGVybWluYXRpb24gb2YgRE1BIEhBTENZT05fSEVBREVSMiBzZXF1ZW5jZS5cbiIpOworCQlyZXR1cm4gc3RhdGVfZXJyb3I7CisJfQorCWJ1ZisrOworCWNtZCA9ICgqYnVmKysgJiAweEZGRkYwMDAwKSA+PiAxNjsKKworCXN3aXRjaChjbWQpIHsKKwljYXNlIEhDX1BhcmFUeXBlX0NtZFZkYXRhOgorCQlpZiAodmlhX2NoZWNrX3ByaW1fbGlzdCgmYnVmLCBidWZfZW5kLCBoY19zdGF0ZSApKSAKKwkJCXJldHVybiBzdGF0ZV9lcnJvcjsKKwkJKmJ1ZmZlciA9IGJ1ZjsKKwkJcmV0dXJuIHN0YXRlX2NvbW1hbmQ7CisJY2FzZSBIQ19QYXJhVHlwZV9Ob3RUZXg6CisJCWh6X3RhYmxlID0gdGFibGUxOworCQlicmVhazsKKwljYXNlIEhDX1BhcmFUeXBlX1RleDoKKwkJaGNfc3RhdGUtPnRleHR1cmUgPSAwOworCQloel90YWJsZSA9IHRhYmxlMjsKKwkJYnJlYWs7CisJY2FzZSAoSENfUGFyYVR5cGVfVGV4IHwgKEhDX1N1YlR5cGVfVGV4MSA8PCA4KSk6CisJCWhjX3N0YXRlLT50ZXh0dXJlID0gMTsKKwkJaHpfdGFibGUgPSB0YWJsZTI7CisJCWJyZWFrOworCWNhc2UgKEhDX1BhcmFUeXBlX1RleCB8IChIQ19TdWJUeXBlX1RleEdlbmVyYWwgPDwgOCkpOgorCQloel90YWJsZSA9IHRhYmxlMzsKKwkJYnJlYWs7CisJY2FzZSBIQ19QYXJhVHlwZV9BdXRvOgorCQlpZiAoZWF0X3dvcmRzKCZidWYsIGJ1Zl9lbmQsIDIpKQorCQkJcmV0dXJuIHN0YXRlX2Vycm9yOworCQkqYnVmZmVyID0gYnVmOworCQlyZXR1cm4gc3RhdGVfY29tbWFuZDsKKwljYXNlIChIQ19QYXJhVHlwZV9QYWxldHRlIHwgKEhDX1N1YlR5cGVfU3RpcHBsZSA8PCA4KSk6CisJCWlmIChlYXRfd29yZHMoJmJ1ZiwgYnVmX2VuZCwgMzIpKQorCQkJcmV0dXJuIHN0YXRlX2Vycm9yOworCQkqYnVmZmVyID0gYnVmOworCQlyZXR1cm4gc3RhdGVfY29tbWFuZDsKKwljYXNlIChIQ19QYXJhVHlwZV9QYWxldHRlIHwgKEhDX1N1YlR5cGVfVGV4UGFsZXR0ZTAgPDwgOCkpOgorCWNhc2UgKEhDX1BhcmFUeXBlX1BhbGV0dGUgfCAoSENfU3ViVHlwZV9UZXhQYWxldHRlMSA8PCA4KSk6CisJCURSTV9FUlJPUigiVGV4dHVyZSBwYWxldHRlcyBhcmUgcmVqZWN0ZWQgYmVjYXVzZSBvZiAiCisJCQkgICJsYWNrIG9mIGluZm8gaG93IHRvIGRldGVybWluZSB0aGVpciBzaXplLlxuIik7CisJCXJldHVybiBzdGF0ZV9lcnJvcjsKKwljYXNlIChIQ19QYXJhVHlwZV9QYWxldHRlIHwgKEhDX1N1YlR5cGVfRm9nVGFibGUgPDwgOCkpOgorCQlEUk1fRVJST1IoIkZvZyBmYWN0b3IgcGFsZXR0ZXMgYXJlIHJlamVjdGVkIGJlY2F1c2Ugb2YgIgorCQkJICAibGFjayBvZiBpbmZvIGhvdyB0byBkZXRlcm1pbmUgdGhlaXIgc2l6ZS5cbiIpOworCQlyZXR1cm4gc3RhdGVfZXJyb3I7CisJZGVmYXVsdDoKKworCQkvKgorCQkgKiBUaGVyZSBhcmUgc29tZSB1bmltcGxlbWVudGVkIEhDX1BhcmFUeXBlcyBoZXJlLCB0aGF0CisJCSAqIG5lZWQgdG8gYmUgaW1wbGVtZW50ZWQgaWYgdGhlIE1lc2EgZHJpdmVyIGlzIGV4dGVuZGVkLgorCQkgKi8KKworCQlEUk1fRVJST1IoIkludmFsaWQgb3IgdW5pbXBsZW1lbnRlZCBIQUxDWU9OX0hFQURFUjIgIgorCQkJICAiRE1BIHN1YmNvbW1hbmQ6IDB4JXguIFByZXZpb3VzIGR3b3JkOiAweCV4XG4iLCAKKwkJCSAgY21kLCAqKGJ1ZiAtMikpOworCQkqYnVmZmVyID0gYnVmOworCQlyZXR1cm4gc3RhdGVfZXJyb3I7CisJfQorCisJd2hpbGUoYnVmIDwgYnVmX2VuZCkgeworCQljbWQgPSAqYnVmKys7CisJCWlmICgoaHogPSBoel90YWJsZVtjbWQgPj4gMjRdKSkgeworCQkJaWYgKChoel9tb2RlID0gaW52ZXN0aWdhdGVfaGF6YXJkKGNtZCwgaHosIGhjX3N0YXRlKSkpIHsKKwkJCQlpZiAoaHpfbW9kZSA9PSAxKSB7CisJCQkJCWJ1Zi0tOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJcmV0dXJuIHN0YXRlX2Vycm9yOworCQkJfQorCQl9IGVsc2UgaWYgKGhjX3N0YXRlLT51bmZpbmlzaGVkICYmIAorCQkJICAgZmluaXNoX2N1cnJlbnRfc2VxdWVuY2UoaGNfc3RhdGUpKSB7CisJCQlyZXR1cm4gc3RhdGVfZXJyb3I7CisJCX0KKwl9CisJaWYgKGhjX3N0YXRlLT51bmZpbmlzaGVkICYmIGZpbmlzaF9jdXJyZW50X3NlcXVlbmNlKGhjX3N0YXRlKSkgeworCQlyZXR1cm4gc3RhdGVfZXJyb3I7CisJfQorCSpidWZmZXIgPSBidWY7CisJcmV0dXJuIHN0YXRlX2NvbW1hbmQ7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlcmlmaWVyX3N0YXRlX3QKK3ZpYV9wYXJzZV9oZWFkZXIyKCBkcm1fdmlhX3ByaXZhdGVfdCAqZGV2X3ByaXYsIHVpbnQzMl90IGNvbnN0ICoqYnVmZmVyLCBjb25zdCB1aW50MzJfdCAqYnVmX2VuZCwKKwkJICAgaW50ICpmaXJlX2NvdW50KQoreworCXVpbnQzMl90IGNtZDsKKwljb25zdCB1aW50MzJfdCAqYnVmID0gKmJ1ZmZlcjsKKwljb25zdCB1aW50MzJfdCAqbmV4dF9maXJlOyAKKwlpbnQgYnVyc3QgPSAwOworCisJbmV4dF9maXJlID0gZGV2X3ByaXYtPmZpcmVfb2Zmc2V0c1sqZmlyZV9jb3VudF07CisJYnVmKys7CisJY21kID0gKCpidWYgJiAweEZGRkYwMDAwKSA+PiAxNjsKKwlWSUFfV1JJVEUoSENfUkVHX1RSQU5TX1NFVCArIEhDX1JFR19CQVNFLCAqYnVmKyspOworCXN3aXRjaChjbWQpIHsKKwljYXNlIEhDX1BhcmFUeXBlX0NtZFZkYXRhOgorCQl3aGlsZSAoKGJ1ZiA8IGJ1Zl9lbmQpICYmCisJCSAgICAgICAoKmZpcmVfY291bnQgPCBkZXZfcHJpdi0+bnVtX2ZpcmVfb2Zmc2V0cykgJiYgCisJCSAgICAgICAoKmJ1ZiAmIEhDX0FDTURfTUFTSykgPT0gSENfQUNNRF9IQ21kQiApIHsKKwkJCXdoaWxlKGJ1ZiA8PSBuZXh0X2ZpcmUpIHsKKwkJCQlWSUFfV1JJVEUoSENfUkVHX1RSQU5TX1NQQUNFICsgSENfUkVHX0JBU0UgKyAoYnVyc3QgJiA2MyksICpidWYrKyk7CisJCQkJYnVyc3QgKz0gNDsKKwkJCX0KKwkJCWlmICggKCBidWYgPCBidWZfZW5kICkgJiYgKCgqYnVmICYgSEFMQ1lPTl9GSVJFTUFTSykgPT0gSEFMQ1lPTl9GSVJFQ01EKSkKKwkJCQlidWYrKzsKKworCQkJaWYgKCsrKCpmaXJlX2NvdW50KSA8IGRldl9wcml2LT5udW1fZmlyZV9vZmZzZXRzKSAKKwkJCQluZXh0X2ZpcmUgPSBkZXZfcHJpdi0+ZmlyZV9vZmZzZXRzWypmaXJlX2NvdW50XTsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQl3aGlsZShidWYgPCBidWZfZW5kKSB7CisJCQkKKwkJCWlmICggKmJ1ZiA9PSBIQ19IRUFERVIyIHx8CisJCQkgICAgICgqYnVmICYgSEFMQ1lPTl9IRUFERVIxTUFTSykgPT0gSEFMQ1lPTl9IRUFERVIxICB8fAorCQkJICAgICAoKmJ1ZiAmIFZJQV9WSURFT01BU0spID09IFZJQV9WSURFT19IRUFERVI1IHx8CisJCQkgICAgICgqYnVmICYgVklBX1ZJREVPTUFTSykgPT0gVklBX1ZJREVPX0hFQURFUjYgKSBicmVhazsKKwkJCQorCQkJVklBX1dSSVRFKEhDX1JFR19UUkFOU19TUEFDRSArIEhDX1JFR19CQVNFICsgKGJ1cnN0ICYgNjMpLCAqYnVmKyspOworCQkJYnVyc3QgKz00OworCQl9CisJfQorCSpidWZmZXIgPSBidWY7CisJcmV0dXJuIHN0YXRlX2NvbW1hbmQ7Cit9CisKKworCitzdGF0aWMgX19pbmxpbmVfXyBpbnQKK3ZlcmlmeV9tbWlvX2FkZHJlc3MoIHVpbnQzMl90IGFkZHJlc3MpCit7CisJaWYgKChhZGRyZXNzID4gMHgzRkYpICYmIChhZGRyZXNzIDwgMHhDMDAgKSkgeworCQlEUk1fRVJST1IoIkludmFsaWQgVklERU8gRE1BIGNvbW1hbmQuICIKKwkJCSAgIkF0dGVtcHQgdG8gYWNjZXNzIDNELSBvciBjb21tYW5kIGJ1cnN0IGFyZWEuXG4iKTsKKwkJcmV0dXJuIDE7CisJfSBlbHNlIGlmICgoYWRkcmVzcyA+IDB4Q0ZGKSAmJiAoYWRkcmVzcyA8IDB4MTMwMCkpIHsKKwkJRFJNX0VSUk9SKCJJbnZhbGlkIFZJREVPIERNQSBjb21tYW5kLiAiCisJCQkgICJBdHRlbXB0IHRvIGFjY2VzcyBQQ0kgRE1BIGFyZWEuXG4iKTsKKwkJcmV0dXJuIDE7CQkKKwl9IGVsc2UgaWYgKGFkZHJlc3MgPiAweDEzRkYgKSB7CisJCURSTV9FUlJPUigiSW52YWxpZCBWSURFTyBETUEgY29tbWFuZC4gIgorCQkJICAiQXR0ZW1wdCB0byBhY2Nlc3MgVkdBIHJlZ2lzdGVycy5cbiIpOworCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludAordmVyaWZ5X3ZpZGVvX3RhaWwoIHVpbnQzMl90IGNvbnN0ICoqYnVmZmVyLCBjb25zdCB1aW50MzJfdCAqYnVmX2VuZCwgdWludDMyX3QgZHdvcmRzKSAKK3sKKwljb25zdCB1aW50MzJfdCAqYnVmID0gKmJ1ZmZlcjsKKworCWlmIChidWZfZW5kIC0gYnVmIDwgZHdvcmRzKSB7CisJCURSTV9FUlJPUigiSWxsZWdhbCB0ZXJtaW5hdGlvbiBvZiB2aWRlbyBjb21tYW5kLlxuIik7CisJCXJldHVybiAxOworCX0KKwl3aGlsZSAoZHdvcmRzLS0pIHsKKwkJaWYgKCpidWYrKykgeworCQkJRFJNX0VSUk9SKCJJbGxlZ2FsIHZpZGVvIGNvbW1hbmQgdGFpbC5cbiIpOworCQkJcmV0dXJuIDE7CisJCX0KKwl9CisJKmJ1ZmZlciA9IGJ1ZjsKKwlyZXR1cm4gMDsKK30KKwkJCisKK3N0YXRpYyBfX2lubGluZV9fIHZlcmlmaWVyX3N0YXRlX3QKK3ZpYV9jaGVja19oZWFkZXIxKCB1aW50MzJfdCBjb25zdCAqKmJ1ZmZlciwgY29uc3QgdWludDMyX3QgKmJ1Zl9lbmQgKQoreworCXVpbnQzMl90IGNtZDsKKwljb25zdCB1aW50MzJfdCAqYnVmID0gKmJ1ZmZlcjsKKwl2ZXJpZmllcl9zdGF0ZV90IHJldCA9IHN0YXRlX2NvbW1hbmQ7CisKKwl3aGlsZSAoYnVmIDwgYnVmX2VuZCkgeworCQljbWQgPSAqYnVmOworCQlpZiAoKGNtZCA+ICgoMHgzRkYgPj4gMikgfCBIQUxDWU9OX0hFQURFUjEpKSAmJgorCQkgICAgKGNtZCA8ICgoMHhDMDAgPj4gMikgfCBIQUxDWU9OX0hFQURFUjEpKSkgewkJCQorCQkJaWYgKChjbWQgJiBIQUxDWU9OX0hFQURFUjFNQVNLKSAhPSBIQUxDWU9OX0hFQURFUjEpIAorCQkJCWJyZWFrOworCQkJRFJNX0VSUk9SKCJJbnZhbGlkIEhBTENZT05fSEVBREVSMSBjb21tYW5kLiAiCisJCQkJICAiQXR0ZW1wdCB0byBhY2Nlc3MgM0QtIG9yIGNvbW1hbmQgYnVyc3QgYXJlYS5cbiIpOworCQkJcmV0ID0gc3RhdGVfZXJyb3I7CisJCQlicmVhazsKKwkJfSBlbHNlIGlmIChjbWQgPiAoKDB4Q0ZGID4+IDIpIHwgSEFMQ1lPTl9IRUFERVIxKSkgeworCQkJaWYgKChjbWQgJiBIQUxDWU9OX0hFQURFUjFNQVNLKSAhPSBIQUxDWU9OX0hFQURFUjEpIAorCQkJCWJyZWFrOworCQkJRFJNX0VSUk9SKCJJbnZhbGlkIEhBTENZT05fSEVBREVSMSBjb21tYW5kLiAiCisJCQkJICAiQXR0ZW1wdCB0byBhY2Nlc3MgVkdBIHJlZ2lzdGVycy5cbiIpOworCQkJcmV0ID0gc3RhdGVfZXJyb3I7CisJCQlicmVhazsJCQkKKwkJfSBlbHNlIHsJCQkKKwkJCWJ1ZiArPSAyOworCQl9CisJfQorCSpidWZmZXIgPSBidWY7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVyaWZpZXJfc3RhdGVfdAordmlhX3BhcnNlX2hlYWRlcjEoIGRybV92aWFfcHJpdmF0ZV90ICpkZXZfcHJpdiwgdWludDMyX3QgY29uc3QgKipidWZmZXIsIGNvbnN0IHVpbnQzMl90ICpidWZfZW5kICkKK3sKKwlyZWdpc3RlciB1aW50MzJfdCBjbWQ7CisJY29uc3QgdWludDMyX3QgKmJ1ZiA9ICpidWZmZXI7CisKKwl3aGlsZSAoYnVmIDwgYnVmX2VuZCkgeworCQljbWQgPSAqYnVmOworCQlpZiAoKGNtZCAmIEhBTENZT05fSEVBREVSMU1BU0spICE9IEhBTENZT05fSEVBREVSMSkgYnJlYWs7CisJCVZJQV9XUklURSggKGNtZCAmIH5IQUxDWU9OX0hFQURFUjFNQVNLKSA8PCAyLCAqKytidWYpOyAKKwkJYnVmKys7CisJfQorCSpidWZmZXIgPSBidWY7CisJcmV0dXJuIHN0YXRlX2NvbW1hbmQ7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlcmlmaWVyX3N0YXRlX3QKK3ZpYV9jaGVja192aGVhZGVyNSggdWludDMyX3QgY29uc3QgKipidWZmZXIsIGNvbnN0IHVpbnQzMl90ICpidWZfZW5kICkKK3sKKwl1aW50MzJfdCBkYXRhOworCWNvbnN0IHVpbnQzMl90ICpidWYgPSAqYnVmZmVyOworCisJaWYgKGJ1Zl9lbmQgLSBidWYgPCA0KSB7CisJCURSTV9FUlJPUigiSWxsZWdhbCB0ZXJtaW5hdGlvbiBvZiB2aWRlbyBoZWFkZXI1IGNvbW1hbmRcbiIpOworCQlyZXR1cm4gc3RhdGVfZXJyb3I7CisJfQorCisJZGF0YSA9ICpidWYrKyAmIH5WSUFfVklERU9NQVNLOworCWlmICh2ZXJpZnlfbW1pb19hZGRyZXNzKGRhdGEpKQorCQlyZXR1cm4gc3RhdGVfZXJyb3I7CisKKwlkYXRhID0gKmJ1ZisrOworCWlmICgqYnVmKysgIT0gMHgwMEY1MDAwMCkgeworCQlEUk1fRVJST1IoIklsbGVnYWwgaGVhZGVyNSBoZWFkZXIgZGF0YVxuIik7CisJCXJldHVybiBzdGF0ZV9lcnJvcjsKKwl9CisJaWYgKCpidWYrKyAhPSAweDAwMDAwMDAwKSB7CisJCURSTV9FUlJPUigiSWxsZWdhbCBoZWFkZXI1IGhlYWRlciBkYXRhXG4iKTsKKwkJcmV0dXJuIHN0YXRlX2Vycm9yOworCX0KKwlpZiAoZWF0X3dvcmRzKCZidWYsIGJ1Zl9lbmQsIGRhdGEpKSAKKwkJcmV0dXJuIHN0YXRlX2Vycm9yOworCWlmICgoZGF0YSAmIDMpICYmIHZlcmlmeV92aWRlb190YWlsKCZidWYsIGJ1Zl9lbmQsIDQgLSAoZGF0YSAmIDMpKSkgCisJCXJldHVybiBzdGF0ZV9lcnJvcjsKKwkqYnVmZmVyID0gYnVmOworCXJldHVybiBzdGF0ZV9jb21tYW5kOworCSAgICAgICAKK30gCisKK3N0YXRpYyBfX2lubGluZV9fIHZlcmlmaWVyX3N0YXRlX3QKK3ZpYV9wYXJzZV92aGVhZGVyNSggZHJtX3ZpYV9wcml2YXRlX3QgKmRldl9wcml2LCB1aW50MzJfdCBjb25zdCAqKmJ1ZmZlciwgY29uc3QgdWludDMyX3QgKmJ1Zl9lbmQgKQoreworICB1aW50MzJfdCBhZGRyLCBjb3VudCwgaTsKKwljb25zdCB1aW50MzJfdCAqYnVmID0gKmJ1ZmZlcjsKKwkKKwlhZGRyID0gKmJ1ZisrICYgflZJQV9WSURFT01BU0s7CisJaSA9IGNvdW50ID0gKmJ1ZjsKKwlidWYgKz0gMzsKKwl3aGlsZShpLS0pIHsKKwkJVklBX1dSSVRFKGFkZHIsICpidWYrKyk7CisJfQorCWlmIChjb3VudCAmIDMpIGJ1ZiArPSA0IC0gKGNvdW50ICYgMyk7CisJKmJ1ZmZlciA9IGJ1ZjsKKwlyZXR1cm4gc3RhdGVfY29tbWFuZDsJICAgICAgIAorfSAKKworCitzdGF0aWMgX19pbmxpbmVfXyB2ZXJpZmllcl9zdGF0ZV90Cit2aWFfY2hlY2tfdmhlYWRlcjYoIHVpbnQzMl90IGNvbnN0ICoqYnVmZmVyLCBjb25zdCB1aW50MzJfdCAqYnVmX2VuZCApCit7CisJdWludDMyX3QgZGF0YTsKKwljb25zdCB1aW50MzJfdCAqYnVmID0gKmJ1ZmZlcjsKKwl1aW50MzJfdCBpOworCisKKwlpZiAoYnVmX2VuZCAtIGJ1ZiA8IDQpIHsKKwkJRFJNX0VSUk9SKCJJbGxlZ2FsIHRlcm1pbmF0aW9uIG9mIHZpZGVvIGhlYWRlcjYgY29tbWFuZFxuIik7CisJCXJldHVybiBzdGF0ZV9lcnJvcjsKKwl9CisJYnVmKys7CisJZGF0YSA9ICpidWYrKzsKKwlpZiAoKmJ1ZisrICE9IDB4MDBGNjAwMDApIHsKKwkJRFJNX0VSUk9SKCJJbGxlZ2FsIGhlYWRlcjYgaGVhZGVyIGRhdGFcbiIpOworCQlyZXR1cm4gc3RhdGVfZXJyb3I7CisJfQorCWlmICgqYnVmKysgIT0gMHgwMDAwMDAwMCkgeworCQlEUk1fRVJST1IoIklsbGVnYWwgaGVhZGVyNiBoZWFkZXIgZGF0YVxuIik7CisJCXJldHVybiBzdGF0ZV9lcnJvcjsKKwl9CisJaWYgKChidWZfZW5kIC0gYnVmKSA8IChkYXRhIDw8IDEpKSB7CisJCURSTV9FUlJPUigiSWxsZWdhbCB0ZXJtaW5hdGlvbiBvZiB2aWRlbyBoZWFkZXI2IGNvbW1hbmRcbiIpOworCQlyZXR1cm4gc3RhdGVfZXJyb3I7CisJfQorCWZvciAoaT0wOyBpPGRhdGE7ICsraSkgeworCQlpZiAodmVyaWZ5X21taW9fYWRkcmVzcygqYnVmKyspKQorCQkJcmV0dXJuIHN0YXRlX2Vycm9yOworCQlidWYrKzsKKwl9CisJZGF0YSA8PD0gMTsKKwlpZiAoKGRhdGEgJiAzKSAmJiB2ZXJpZnlfdmlkZW9fdGFpbCgmYnVmLCBidWZfZW5kLCA0IC0gKGRhdGEgJiAzKSkpCisJCXJldHVybiBzdGF0ZV9lcnJvcjsKKwkqYnVmZmVyID0gYnVmOworCXJldHVybiBzdGF0ZV9jb21tYW5kOworfSAKKworc3RhdGljIF9faW5saW5lX18gdmVyaWZpZXJfc3RhdGVfdAordmlhX3BhcnNlX3ZoZWFkZXI2KCBkcm1fdmlhX3ByaXZhdGVfdCAqZGV2X3ByaXYsIHVpbnQzMl90IGNvbnN0ICoqYnVmZmVyLCBjb25zdCB1aW50MzJfdCAqYnVmX2VuZCApCit7CisKKyAgdWludDMyX3QgYWRkciwgY291bnQsIGk7CisJY29uc3QgdWludDMyX3QgKmJ1ZiA9ICpidWZmZXI7CisKKwlpID0gY291bnQgPSAqKytidWY7CisJYnVmICs9IDM7CisJd2hpbGUoaS0tKSB7CisJCWFkZHIgPSAqYnVmKys7CisJCVZJQV9XUklURShhZGRyLCAqYnVmKyspOworCX0KKwljb3VudCA8PD0gMTsKKwlpZiAoY291bnQgJiAzKSBidWYgKz0gNCAtIChjb3VudCAmIDMpOworCSpidWZmZXIgPSBidWY7CisJcmV0dXJuIHN0YXRlX2NvbW1hbmQ7Cit9IAorCisKKworaW50IAordmlhX3ZlcmlmeV9jb21tYW5kX3N0cmVhbShjb25zdCB1aW50MzJfdCAqIGJ1ZiwgdW5zaWduZWQgaW50IHNpemUsIGRybV9kZXZpY2VfdCAqZGV2LAorCQkJICBpbnQgYWdwKQoreworCisJZHJtX3ZpYV9wcml2YXRlX3QgKmRldl9wcml2ID0gKGRybV92aWFfcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7CisJZHJtX3ZpYV9zdGF0ZV90ICpoY19zdGF0ZSA9ICZkZXZfcHJpdi0+aGNfc3RhdGU7CisJZHJtX3ZpYV9zdGF0ZV90IHNhdmVkX3N0YXRlID0gKmhjX3N0YXRlOworCXVpbnQzMl90IGNtZDsKKwljb25zdCB1aW50MzJfdCAqYnVmX2VuZCA9IGJ1ZiArICggc2l6ZSA+PiAyICk7CisJdmVyaWZpZXJfc3RhdGVfdCBzdGF0ZSA9IHN0YXRlX2NvbW1hbmQ7CisJaW50IHByb19ncm91cF9hID0gZGV2X3ByaXYtPnByb19ncm91cF9hOworCQorCWhjX3N0YXRlLT5kZXYgPSBkZXY7CisJaGNfc3RhdGUtPnVuZmluaXNoZWQgPSBub19zZXF1ZW5jZTsKKwloY19zdGF0ZS0+bWFwX2NhY2hlID0gTlVMTDsKKwloY19zdGF0ZS0+YWdwID0gYWdwOworCWhjX3N0YXRlLT5idWZfc3RhcnQgPSBidWY7CisJZGV2X3ByaXYtPm51bV9maXJlX29mZnNldHMgPSAwOworCisJd2hpbGUgKGJ1ZiA8IGJ1Zl9lbmQpIHsKKworCQlzd2l0Y2ggKHN0YXRlKSB7CisJCWNhc2Ugc3RhdGVfaGVhZGVyMjoKKwkJICBzdGF0ZSA9IHZpYV9jaGVja19oZWFkZXIyKCAmYnVmLCBidWZfZW5kLCBoY19zdGF0ZSApOworCQkJYnJlYWs7CisJCWNhc2Ugc3RhdGVfaGVhZGVyMToKKwkJCXN0YXRlID0gdmlhX2NoZWNrX2hlYWRlcjEoICZidWYsIGJ1Zl9lbmQgKTsKKwkJCWJyZWFrOworCQljYXNlIHN0YXRlX3ZoZWFkZXI1OgorCQkJc3RhdGUgPSB2aWFfY2hlY2tfdmhlYWRlcjUoICZidWYsIGJ1Zl9lbmQgKTsKKwkJCWJyZWFrOworCQljYXNlIHN0YXRlX3ZoZWFkZXI2OgorCQkJc3RhdGUgPSB2aWFfY2hlY2tfdmhlYWRlcjYoICZidWYsIGJ1Zl9lbmQgKTsKKwkJCWJyZWFrOworCQljYXNlIHN0YXRlX2NvbW1hbmQ6CisJCQlpZiAoSEFMQ1lPTl9IRUFERVIyID09IChjbWQgPSAqYnVmKSkgCisJCQkJc3RhdGUgPSBzdGF0ZV9oZWFkZXIyOworCQkJZWxzZSBpZiAoKGNtZCAmIEhBTENZT05fSEVBREVSMU1BU0spID09IEhBTENZT05fSEVBREVSMSkgCisJCQkJc3RhdGUgPSBzdGF0ZV9oZWFkZXIxOworCQkJZWxzZSBpZiAocHJvX2dyb3VwX2EgJiYgKGNtZCAmIFZJQV9WSURFT01BU0spID09IFZJQV9WSURFT19IRUFERVI1KQorCQkJCXN0YXRlID0gc3RhdGVfdmhlYWRlcjU7CisJCQllbHNlIGlmIChwcm9fZ3JvdXBfYSAmJiAoY21kICYgVklBX1ZJREVPTUFTSykgPT0gVklBX1ZJREVPX0hFQURFUjYpCisJCQkJc3RhdGUgPSBzdGF0ZV92aGVhZGVyNjsKKwkJCWVsc2UgeworCQkJCURSTV9FUlJPUigiSW52YWxpZCAvIFVuaW1wbGVtZW50ZWQgRE1BIEhFQURFUiBjb21tYW5kLiAweCV4XG4iLAorCQkJCQkgIGNtZCk7CisJCQkJc3RhdGUgPSBzdGF0ZV9lcnJvcjsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIHN0YXRlX2Vycm9yOgorCQlkZWZhdWx0OgorCQkJKmhjX3N0YXRlID0gc2F2ZWRfc3RhdGU7CisJCQlyZXR1cm4gRFJNX0VSUihFSU5WQUwpOwkJCQorCQl9CisJfQkKKwlpZiAoc3RhdGUgPT0gc3RhdGVfZXJyb3IpIHsKKwkJKmhjX3N0YXRlID0gc2F2ZWRfc3RhdGU7CisJCXJldHVybiBEUk1fRVJSKEVJTlZBTCk7CisJfQorCXJldHVybiAwOworfQorCitpbnQgCit2aWFfcGFyc2VfY29tbWFuZF9zdHJlYW0oZHJtX2RldmljZV90ICpkZXYsIGNvbnN0IHVpbnQzMl90ICogYnVmLCB1bnNpZ25lZCBpbnQgc2l6ZSkKK3sKKworCWRybV92aWFfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IChkcm1fdmlhX3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOworCXVpbnQzMl90IGNtZDsKKwljb25zdCB1aW50MzJfdCAqYnVmX2VuZCA9IGJ1ZiArICggc2l6ZSA+PiAyICk7CisJdmVyaWZpZXJfc3RhdGVfdCBzdGF0ZSA9IHN0YXRlX2NvbW1hbmQ7CisJaW50IGZpcmVfY291bnQgPSAwOworCQorCXdoaWxlIChidWYgPCBidWZfZW5kKSB7CisKKwkJc3dpdGNoIChzdGF0ZSkgeworCQljYXNlIHN0YXRlX2hlYWRlcjI6CisJCSAgc3RhdGUgPSB2aWFfcGFyc2VfaGVhZGVyMiggZGV2X3ByaXYsICZidWYsIGJ1Zl9lbmQsICZmaXJlX2NvdW50ICk7CisJCQlicmVhazsKKwkJY2FzZSBzdGF0ZV9oZWFkZXIxOgorCQkJc3RhdGUgPSB2aWFfcGFyc2VfaGVhZGVyMSggZGV2X3ByaXYsICZidWYsIGJ1Zl9lbmQgKTsKKwkJCWJyZWFrOworCQljYXNlIHN0YXRlX3ZoZWFkZXI1OgorCQkJc3RhdGUgPSB2aWFfcGFyc2VfdmhlYWRlcjUoIGRldl9wcml2LCAmYnVmLCBidWZfZW5kICk7CisJCQlicmVhazsKKwkJY2FzZSBzdGF0ZV92aGVhZGVyNjoKKwkJCXN0YXRlID0gdmlhX3BhcnNlX3ZoZWFkZXI2KCBkZXZfcHJpdiwgJmJ1ZiwgYnVmX2VuZCApOworCQkJYnJlYWs7CisJCWNhc2Ugc3RhdGVfY29tbWFuZDoKKwkJCWlmIChIQUxDWU9OX0hFQURFUjIgPT0gKGNtZCA9ICpidWYpKSAKKwkJCQlzdGF0ZSA9IHN0YXRlX2hlYWRlcjI7CisJCQllbHNlIGlmICgoY21kICYgSEFMQ1lPTl9IRUFERVIxTUFTSykgPT0gSEFMQ1lPTl9IRUFERVIxKSAKKwkJCQlzdGF0ZSA9IHN0YXRlX2hlYWRlcjE7CisJCQllbHNlIGlmICgoY21kICYgVklBX1ZJREVPTUFTSykgPT0gVklBX1ZJREVPX0hFQURFUjUpCisJCQkJc3RhdGUgPSBzdGF0ZV92aGVhZGVyNTsKKwkJCWVsc2UgaWYgKChjbWQgJiBWSUFfVklERU9NQVNLKSA9PSBWSUFfVklERU9fSEVBREVSNikKKwkJCQlzdGF0ZSA9IHN0YXRlX3ZoZWFkZXI2OworCQkJZWxzZSB7CisJCQkJRFJNX0VSUk9SKCJJbnZhbGlkIC8gVW5pbXBsZW1lbnRlZCBETUEgSEVBREVSIGNvbW1hbmQuIDB4JXhcbiIsCisJCQkJCSAgY21kKTsKKwkJCQlzdGF0ZSA9IHN0YXRlX2Vycm9yOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2Ugc3RhdGVfZXJyb3I6CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gRFJNX0VSUihFSU5WQUwpOwkJCQorCQl9CisJfQkKKwlpZiAoc3RhdGUgPT0gc3RhdGVfZXJyb3IpIHsKKwkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKworCitzdGF0aWMgdm9pZCAKK3NldHVwX2hhemFyZF90YWJsZShoel9pbml0X3QgaW5pdF90YWJsZVtdLCBoYXphcmRfdCB0YWJsZVtdLCBpbnQgc2l6ZSkKK3sKKwlpbnQgaTsKKworCWZvcihpPTA7IGk8MjU2OyArK2kpIHsKKwkJdGFibGVbaV0gPSBmb3JiaWRkZW5fY29tbWFuZDsKKwl9CisKKwlmb3IoaT0wOyBpPHNpemU7ICsraSkgeworCQl0YWJsZVtpbml0X3RhYmxlW2ldLmNvZGVdID0gaW5pdF90YWJsZVtpXS5oejsKKwl9Cit9CisKK3ZvaWQgCit2aWFfaW5pdF9jb21tYW5kX3ZlcmlmaWVyKCB2b2lkICkKK3sKKwlzZXR1cF9oYXphcmRfdGFibGUoaW5pdF90YWJsZTEsIHRhYmxlMSwgc2l6ZW9mKGluaXRfdGFibGUxKSAvIHNpemVvZihoel9pbml0X3QpKTsKKwlzZXR1cF9oYXphcmRfdGFibGUoaW5pdF90YWJsZTIsIHRhYmxlMiwgc2l6ZW9mKGluaXRfdGFibGUyKSAvIHNpemVvZihoel9pbml0X3QpKTsKKwlzZXR1cF9oYXphcmRfdGFibGUoaW5pdF90YWJsZTMsIHRhYmxlMywgc2l6ZW9mKGluaXRfdGFibGUzKSAvIHNpemVvZihoel9pbml0X3QpKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vdmlhX3ZlcmlmaWVyLmggYi9kcml2ZXJzL2NoYXIvZHJtL3ZpYV92ZXJpZmllci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4ZTEzNTkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2NoYXIvZHJtL3ZpYV92ZXJpZmllci5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNCBUaGUgVW5pY2hyb21lIFByb2plY3QuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3ViIGxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUKKyAqIG5leHQgcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zCisgKiBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTi1JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgVU5JQ0hST01FIFBST0pFQ1QsIEFORC9PUiBJVFMgU1VQUExJRVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUgorICogREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcjogVGhvbWFzIEhlbGxzdHL2bSAyMDA0LgorICovCisKKyNpZm5kZWYgX1ZJQV9WRVJJRklFUl9IXworI2RlZmluZSBfVklBX1ZFUklGSUVSX0hfCisKK3R5cGVkZWYgZW51bXsKKwlub19zZXF1ZW5jZSA9IDAsIAorCXpfYWRkcmVzcywKKwlkZXN0X2FkZHJlc3MsCisJdGV4X2FkZHJlc3MKK31kcm1fdmlhX3NlcXVlbmNlX3Q7CisKKworCit0eXBlZGVmIHN0cnVjdHsKKwl1bnNpZ25lZCB0ZXh0dXJlOworCXVpbnQzMl90IHpfYWRkcjsgCisJdWludDMyX3QgZF9hZGRyOyAKKyAgICAgICAgdWludDMyX3QgdF9hZGRyWzJdWzEwXTsKKwl1aW50MzJfdCBwaXRjaFsyXVsxMF07CisJdWludDMyX3QgaGVpZ2h0WzJdWzEwXTsKKwl1aW50MzJfdCB0ZXhfbGV2ZWxfbG9bMl07IAorCXVpbnQzMl90IHRleF9sZXZlbF9oaVsyXTsKKwl1aW50MzJfdCB0ZXhfcGFsZXR0ZV9zaXplWzJdOworCWRybV92aWFfc2VxdWVuY2VfdCB1bmZpbmlzaGVkOworCWludCBhZ3BfdGV4dHVyZTsKKwlpbnQgbXVsdGl0ZXg7CisJZHJtX2RldmljZV90ICpkZXY7CisJZHJtX21hcF90ICptYXBfY2FjaGU7CisJdWludDMyX3QgdmVydGV4X2NvdW50OworCWludCBhZ3A7CisJY29uc3QgdWludDMyX3QgKmJ1Zl9zdGFydDsKK30gZHJtX3ZpYV9zdGF0ZV90OworCitleHRlcm4gaW50IHZpYV92ZXJpZnlfY29tbWFuZF9zdHJlYW0oY29uc3QgdWludDMyX3QgKiBidWYsIHVuc2lnbmVkIGludCBzaXplLCAKKwkJCQkgICAgIGRybV9kZXZpY2VfdCAqZGV2LCBpbnQgYWdwKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL3ZpYV92aWRlby5jIGIvZHJpdmVycy9jaGFyL2RybS92aWFfdmlkZW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2E2MWM2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9jaGFyL2RybS92aWFfdmlkZW8uYwpAQCAtMCwwICsxLDk3IEBACisvKgorICogQ29weXJpZ2h0IDIwMDUgVGhvbWFzIEhlbGxzdHJvbS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWIgbGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZQorICogbmV4dCBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMKKyAqIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1IoUyksIEFORC9PUiBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCisgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIKKyAqIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3I6IFRob21hcyBIZWxsc3Ryb20gMjAwNS4KKyAqCisgKiBWaWRlbyBhbmQgWHZNQyByZWxhdGVkIGZ1bmN0aW9ucy4KKyAqLworCisjaW5jbHVkZSAiZHJtUC5oIgorI2luY2x1ZGUgInZpYV9kcm0uaCIKKyNpbmNsdWRlICJ2aWFfZHJ2LmgiCisKK3ZvaWQKK3ZpYV9pbml0X2Z1dGV4KGRybV92aWFfcHJpdmF0ZV90ICpkZXZfcHJpdikKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCURSTV9ERUJVRygiJXNcbiIsIF9fRlVOQ1RJT05fXyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgVklBX05SX1hWTUNfTE9DS1M7ICsraSkgeworCQlEUk1fSU5JVF9XQUlUUVVFVUUoJihkZXZfcHJpdi0+ZGVjb2Rlcl9xdWV1ZVtpXSkpOworCQlYVk1DTE9DS1BUUihkZXZfcHJpdi0+c2FyZWFfcHJpdiwgaSktPmxvY2sgPSAwOworCX0KK30KKwordm9pZAordmlhX2NsZWFudXBfZnV0ZXgoZHJtX3ZpYV9wcml2YXRlX3QgKmRldl9wcml2KQoreworfQkKKwordm9pZAordmlhX3JlbGVhc2VfZnV0ZXgoZHJtX3ZpYV9wcml2YXRlX3QgKmRldl9wcml2LCBpbnQgY29udGV4dCkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwl2b2xhdGlsZSBpbnQgKmxvY2s7CisKKwlmb3IgKGk9MDsgaSA8IFZJQV9OUl9YVk1DX0xPQ0tTOyArK2kpIHsKKwkgICAgICAgIGxvY2sgPSAoaW50ICopIFhWTUNMT0NLUFRSKGRldl9wcml2LT5zYXJlYV9wcml2LCBpKTsKKwkJaWYgKCAoX0RSTV9MT0NLSU5HX0NPTlRFWFQoICpsb2NrICkgPT0gY29udGV4dCkpIHsKKwkJCWlmIChfRFJNX0xPQ0tfSVNfSEVMRCggKmxvY2sgKSAmJiAoKmxvY2sgJiBfRFJNX0xPQ0tfQ09OVCkpIHsKKwkJCQlEUk1fV0FLRVVQKCAmKGRldl9wcml2LT5kZWNvZGVyX3F1ZXVlW2ldKSk7CisJCQl9CisJCQkqbG9jayA9IDA7CisJCX0KKwl9CQorfQkKKworaW50IAordmlhX2RlY29kZXJfZnV0ZXgoRFJNX0lPQ1RMX0FSR1MpCit7CisJRFJNX0RFVklDRTsKKwlkcm1fdmlhX2Z1dGV4X3QgZng7CisJdm9sYXRpbGUgaW50ICpsb2NrOworCWRybV92aWFfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IChkcm1fdmlhX3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOworCWRybV92aWFfc2FyZWFfdCAqc0FQcml2ID0gZGV2X3ByaXYtPnNhcmVhX3ByaXY7CisJaW50IHJldCA9IDA7CisKKwlEUk1fREVCVUcoIiVzXG4iLCBfX0ZVTkNUSU9OX18pOworCisJRFJNX0NPUFlfRlJPTV9VU0VSX0lPQ1RMKGZ4LCAoZHJtX3ZpYV9mdXRleF90ICopIGRhdGEsIHNpemVvZihmeCkpOworCisJaWYgKGZ4LmxvY2sgPiBWSUFfTlJfWFZNQ19MT0NLUykKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlsb2NrID0gKGludCAqKVhWTUNMT0NLUFRSKHNBUHJpdiwgZngubG9jayk7CisKKwlzd2l0Y2ggKGZ4LmZ1bmMpIHsKKwljYXNlIFZJQV9GVVRFWF9XQUlUOgorCQlEUk1fV0FJVF9PTihyZXQsIGRldl9wcml2LT5kZWNvZGVyX3F1ZXVlW2Z4LmxvY2tdLAorCQkJICAgIChmeC5tcyAvIDEwKSAqIChEUk1fSFogLyAxMDApLCAqbG9jayAhPSBmeC52YWwpOworCQlyZXR1cm4gcmV0OworCWNhc2UgVklBX0ZVVEVYX1dBS0U6CisJCURSTV9XQUtFVVAoJihkZXZfcHJpdi0+ZGVjb2Rlcl9xdWV1ZVtmeC5sb2NrXSkpOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIDA7Cit9CisK