LyoKICogQ29weXJpZ2h0IKkgMjAwNi0yMDA3IEludGVsIENvcnBvcmF0aW9uCiAqCiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCiAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCiAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCiAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQogKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgogKgogKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CiAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKICogU29mdHdhcmUuCiAqCiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAogKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUgogKiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCiAqCiAqIEF1dGhvcnM6CiAqCUVyaWMgQW5ob2x0IDxlcmljQGFuaG9sdC5uZXQ+CiAqLwoKLyoqCiAqIEBmaWxlIFNEVk8gY29tbWFuZCBkZWZpbml0aW9ucyBhbmQgc3RydWN0dXJlcy4KICovCgojZGVmaW5lIFNEVk9fT1VUUFVUX0ZJUlNUICAgKDApCiNkZWZpbmUgU0RWT19PVVRQVVRfVE1EUzAgICAoMSA8PCAwKQojZGVmaW5lIFNEVk9fT1VUUFVUX1JHQjAgICAgKDEgPDwgMSkKI2RlZmluZSBTRFZPX09VVFBVVF9DVkJTMCAgICgxIDw8IDIpCiNkZWZpbmUgU0RWT19PVVRQVVRfU1ZJRDAgICAoMSA8PCAzKQojZGVmaW5lIFNEVk9fT1VUUFVUX1lQUlBCMCAgKDEgPDwgNCkKI2RlZmluZSBTRFZPX09VVFBVVF9TQ0FSVDAgICgxIDw8IDUpCiNkZWZpbmUgU0RWT19PVVRQVVRfTFZEUzAgICAoMSA8PCA2KQojZGVmaW5lIFNEVk9fT1VUUFVUX1RNRFMxICAgKDEgPDwgOCkKI2RlZmluZSBTRFZPX09VVFBVVF9SR0IxICAgICgxIDw8IDkpCiNkZWZpbmUgU0RWT19PVVRQVVRfQ1ZCUzEgICAoMSA8PCAxMCkKI2RlZmluZSBTRFZPX09VVFBVVF9TVklEMSAgICgxIDw8IDExKQojZGVmaW5lIFNEVk9fT1VUUFVUX1lQUlBCMSAgKDEgPDwgMTIpCiNkZWZpbmUgU0RWT19PVVRQVVRfU0NBUlQxICAoMSA8PCAxMykKI2RlZmluZSBTRFZPX09VVFBVVF9MVkRTMSAgICgxIDw8IDE0KQojZGVmaW5lIFNEVk9fT1VUUFVUX0xBU1QgICAgKDE0KQoKc3RydWN0IGludGVsX3Nkdm9fY2FwcyB7Cgl1OCB2ZW5kb3JfaWQ7Cgl1OCBkZXZpY2VfaWQ7Cgl1OCBkZXZpY2VfcmV2X2lkOwoJdTggc2R2b192ZXJzaW9uX21ham9yOwoJdTggc2R2b192ZXJzaW9uX21pbm9yOwoJdW5zaWduZWQgaW50IHNkdm9faW5wdXRzX21hc2s6MjsKCXVuc2lnbmVkIGludCBzbW9vdGhfc2NhbGluZzoxOwoJdW5zaWduZWQgaW50IHNoYXJwX3NjYWxpbmc6MTsKCXVuc2lnbmVkIGludCB1cF9zY2FsaW5nOjE7Cgl1bnNpZ25lZCBpbnQgZG93bl9zY2FsaW5nOjE7Cgl1bnNpZ25lZCBpbnQgc3RhbGxfc3VwcG9ydDoxOwoJdW5zaWduZWQgaW50IHBhZDoxOwoJdTE2IG91dHB1dF9mbGFnczsKfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKCi8qKiBUaGlzIG1hdGNoZXMgdGhlIEVESUQgRFREIHN0cnVjdHVyZSwgbW9yZSBvciBsZXNzICovCnN0cnVjdCBpbnRlbF9zZHZvX2R0ZCB7CglzdHJ1Y3QgewoJCXUxNiBjbG9jazsJLyoqPCBwaXhlbCBjbG9jaywgaW4gMTBrSHogdW5pdHMgKi8KCQl1OCBoX2FjdGl2ZTsJLyoqPCBsb3dlciA4IGJpdHMgKHBpeGVscykgKi8KCQl1OCBoX2JsYW5rOwkvKio8IGxvd2VyIDggYml0cyAocGl4ZWxzKSAqLwoJCXU4IGhfaGlnaDsJLyoqPCB1cHBlciA0IGJpdHMgZWFjaCBoX2FjdGl2ZSwgaF9ibGFuayAqLwoJCXU4IHZfYWN0aXZlOwkvKio8IGxvd2VyIDggYml0cyAobGluZXMpICovCgkJdTggdl9ibGFuazsJLyoqPCBsb3dlciA4IGJpdHMgKGxpbmVzKSAqLwoJCXU4IHZfaGlnaDsJLyoqPCB1cHBlciA0IGJpdHMgZWFjaCB2X2FjdGl2ZSwgdl9ibGFuayAqLwoJfSBwYXJ0MTsKCglzdHJ1Y3QgewoJCXU4IGhfc3luY19vZmY7CS8qKjwgbG93ZXIgOCBiaXRzLCBmcm9tIGhibGFuayBzdGFydCAqLwoJCXU4IGhfc3luY193aWR0aDsJLyoqPCBsb3dlciA4IGJpdHMgKHBpeGVscykgKi8KCQkvKiogbG93ZXIgNCBiaXRzIGVhY2ggdnN5bmMgb2Zmc2V0LCB2c3luYyB3aWR0aCAqLwoJCXU4IHZfc3luY19vZmZfd2lkdGg7CgkJLyoqCgkJKiAyIGhpZ2ggYml0cyBvZiBoc3luYyBvZmZzZXQsIDIgaGlnaCBiaXRzIG9mIGhzeW5jIHdpZHRoLAoJCSogYml0cyA0LTUgb2YgdnN5bmMgb2Zmc2V0LCBhbmQgMiBoaWdoIGJpdHMgb2YgdnN5bmMgd2lkdGguCgkJKi8KCQl1OCBzeW5jX29mZl93aWR0aF9oaWdoOwoJCXU4IGR0ZF9mbGFnczsKCQl1OCBzZHZvX2ZsYWdzOwoJCS8qKiBiaXRzIDYtNyBvZiB2c3luYyBvZmZzZXQgYXQgYml0cyA2LTcgKi8KCQl1OCB2X3N5bmNfb2ZmX2hpZ2g7CgkJdTggcmVzZXJ2ZWQ7Cgl9IHBhcnQyOwp9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwoKc3RydWN0IGludGVsX3Nkdm9fcGl4ZWxfY2xvY2tfcmFuZ2UgewoJdTE2IG1pbjsJLyoqPCBwaXhlbCBjbG9jaywgaW4gMTBrSHogdW5pdHMgKi8KCXUxNiBtYXg7CS8qKjwgcGl4ZWwgY2xvY2ssIGluIDEwa0h6IHVuaXRzICovCn0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CgpzdHJ1Y3QgaW50ZWxfc2R2b19wcmVmZXJyZWRfaW5wdXRfdGltaW5nX2FyZ3MgewoJdTE2IGNsb2NrOwoJdTE2IHdpZHRoOwoJdTE2IGhlaWdodDsKCXU4CWludGVybGFjZToxOwoJdTgJc2NhbGVkOjE7Cgl1OAlwYWQ6NjsKfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKCi8qIEkyQyByZWdpc3RlcnMgZm9yIFNEVk8gKi8KI2RlZmluZSBTRFZPX0kyQ19BUkdfMAkJCQkweDA3CiNkZWZpbmUgU0RWT19JMkNfQVJHXzEJCQkJMHgwNgojZGVmaW5lIFNEVk9fSTJDX0FSR18yCQkJCTB4MDUKI2RlZmluZSBTRFZPX0kyQ19BUkdfMwkJCQkweDA0CiNkZWZpbmUgU0RWT19JMkNfQVJHXzQJCQkJMHgwMwojZGVmaW5lIFNEVk9fSTJDX0FSR181CQkJCTB4MDIKI2RlZmluZSBTRFZPX0kyQ19BUkdfNgkJCQkweDAxCiNkZWZpbmUgU0RWT19JMkNfQVJHXzcJCQkJMHgwMAojZGVmaW5lIFNEVk9fSTJDX09QQ09ERQkJCQkweDA4CiNkZWZpbmUgU0RWT19JMkNfQ01EX1NUQVRVUwkJCTB4MDkKI2RlZmluZSBTRFZPX0kyQ19SRVRVUk5fMAkJCTB4MGEKI2RlZmluZSBTRFZPX0kyQ19SRVRVUk5fMQkJCTB4MGIKI2RlZmluZSBTRFZPX0kyQ19SRVRVUk5fMgkJCTB4MGMKI2RlZmluZSBTRFZPX0kyQ19SRVRVUk5fMwkJCTB4MGQKI2RlZmluZSBTRFZPX0kyQ19SRVRVUk5fNAkJCTB4MGUKI2RlZmluZSBTRFZPX0kyQ19SRVRVUk5fNQkJCTB4MGYKI2RlZmluZSBTRFZPX0kyQ19SRVRVUk5fNgkJCTB4MTAKI2RlZmluZSBTRFZPX0kyQ19SRVRVUk5fNwkJCTB4MTEKI2RlZmluZSBTRFZPX0kyQ19WRU5ET1JfQkVHSU4JCQkweDIwCgovKiBTdGF0dXMgcmVzdWx0cyAqLwojZGVmaW5lIFNEVk9fQ01EX1NUQVRVU19QT1dFUl9PTgkJMHgwCiNkZWZpbmUgU0RWT19DTURfU1RBVFVTX1NVQ0NFU1MJCQkweDEKI2RlZmluZSBTRFZPX0NNRF9TVEFUVVNfTk9UU1VQUAkJCTB4MgojZGVmaW5lIFNEVk9fQ01EX1NUQVRVU19JTlZBTElEX0FSRwkJMHgzCiNkZWZpbmUgU0RWT19DTURfU1RBVFVTX1BFTkRJTkcJCQkweDQKI2RlZmluZSBTRFZPX0NNRF9TVEFUVVNfVEFSR0VUX05PVF9TUEVDSUZJRUQJMHg1CiNkZWZpbmUgU0RWT19DTURfU1RBVFVTX1NDQUxJTkdfTk9UX1NVUFAJMHg2CgovKiBTRFZPIGNvbW1hbmRzLCBhcmd1bWVudC9yZXN1bHQgcmVnaXN0ZXJzICovCgojZGVmaW5lIFNEVk9fQ01EX1JFU0VUCQkJCQkweDAxCgovKiogUmV0dXJucyBhIHN0cnVjdCBpbnRlbF9zZHZvX2NhcHMgKi8KI2RlZmluZSBTRFZPX0NNRF9HRVRfREVWSUNFX0NBUFMJCQkweDAyCgojZGVmaW5lIFNEVk9fQ01EX0dFVF9GSVJNV0FSRV9SRVYJCQkweDg2CiMgZGVmaW5lIFNEVk9fREVWSUNFX0ZJUk1XQVJFX01JTk9SCQkJU0RWT19JMkNfUkVUVVJOXzAKIyBkZWZpbmUgU0RWT19ERVZJQ0VfRklSTVdBUkVfTUFKT1IJCQlTRFZPX0kyQ19SRVRVUk5fMQojIGRlZmluZSBTRFZPX0RFVklDRV9GSVJNV0FSRV9QQVRDSAkJCVNEVk9fSTJDX1JFVFVSTl8yCgovKioKICogUmVwb3J0cyB3aGljaCBpbnB1dHMgYXJlIHRyYWluZWQgKG1hbmFnZWQgdG8gc3luYykuCiAqCiAqIERldmljZXMgbXVzdCBoYXZlIHRyYWluZWQgd2l0aGluIDIgdnN5bmNzIG9mIGEgbW9kZSBjaGFuZ2UuCiAqLwojZGVmaW5lIFNEVk9fQ01EX0dFVF9UUkFJTkVEX0lOUFVUUwkJCTB4MDMKc3RydWN0IGludGVsX3Nkdm9fZ2V0X3RyYWluZWRfaW5wdXRzX3Jlc3BvbnNlIHsKCXVuc2lnbmVkIGludCBpbnB1dDBfdHJhaW5lZDoxOwoJdW5zaWduZWQgaW50IGlucHV0MV90cmFpbmVkOjE7Cgl1bnNpZ25lZCBpbnQgcGFkOjY7Cn0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CgovKiogUmV0dXJucyBhIHN0cnVjdCBpbnRlbF9zZHZvX291dHB1dF9mbGFncyBvZiBhY3RpdmUgb3V0cHV0cy4gKi8KI2RlZmluZSBTRFZPX0NNRF9HRVRfQUNUSVZFX09VVFBVVFMJCQkweDA0CgovKioKICogU2V0cyB0aGUgY3VycmVudCBzZXQgb2YgYWN0aXZlIG91dHB1dHMuCiAqCiAqIFRha2VzIGEgc3RydWN0IGludGVsX3Nkdm9fb3V0cHV0X2ZsYWdzLiAgTXVzdCBiZSBwcmVjZWRlZCBieSBhIFNFVF9JTl9PVVRfTUFQCiAqIG9uIG11bHRpLW91dHB1dCBkZXZpY2VzLgogKi8KI2RlZmluZSBTRFZPX0NNRF9TRVRfQUNUSVZFX09VVFBVVFMJCQkweDA1CgovKioKICogUmV0dXJucyB0aGUgY3VycmVudCBtYXBwaW5nIG9mIFNEVk8gaW5wdXRzIHRvIG91dHB1dHMgb24gdGhlIGRldmljZS4KICoKICogUmV0dXJucyB0d28gc3RydWN0IGludGVsX3Nkdm9fb3V0cHV0X2ZsYWdzIHN0cnVjdHVyZXMuCiAqLwojZGVmaW5lIFNEVk9fQ01EX0dFVF9JTl9PVVRfTUFQCQkJCTB4MDYKc3RydWN0IGludGVsX3Nkdm9faW5fb3V0X21hcCB7Cgl1MTYgaW4wLCBpbjE7Cn07CgovKioKICogU2V0cyB0aGUgY3VycmVudCBtYXBwaW5nIG9mIFNEVk8gaW5wdXRzIHRvIG91dHB1dHMgb24gdGhlIGRldmljZS4KICoKICogVGFrZXMgdHdvIHN0cnVjdCBpMzgwX3Nkdm9fb3V0cHV0X2ZsYWdzIHN0cnVjdHVyZXMuCiAqLwojZGVmaW5lIFNEVk9fQ01EX1NFVF9JTl9PVVRfTUFQCQkJCTB4MDcKCi8qKgogKiBSZXR1cm5zIGEgc3RydWN0IGludGVsX3Nkdm9fb3V0cHV0X2ZsYWdzIG9mIGF0dGFjaGVkIGRpc3BsYXlzLgogKi8KI2RlZmluZSBTRFZPX0NNRF9HRVRfQVRUQUNIRURfRElTUExBWVMJCQkweDBiCgovKioKICogUmV0dXJucyBhIHN0cnVjdCBpbnRlbF9zZHZvX291cHR1dF9mbGFncyBvZiBkaXNwbGF5cyBzdXBwb3J0aW5nIGhvdCBwbHVnZ2luZy4KICovCiNkZWZpbmUgU0RWT19DTURfR0VUX0hPVF9QTFVHX1NVUFBPUlQJCQkweDBjCgovKioKICogVGFrZXMgYSBzdHJ1Y3QgaW50ZWxfc2R2b19vdXRwdXRfZmxhZ3MuCiAqLwojZGVmaW5lIFNEVk9fQ01EX1NFVF9BQ1RJVkVfSE9UX1BMVUcJCQkweDBkCgovKioKICogUmV0dXJucyBhIHN0cnVjdCBpbnRlbF9zZHZvX291dHB1dF9mbGFncyBvZiBkaXNwbGF5cyB3aXRoIGhvdCBwbHVnCiAqIGludGVycnVwdHMgZW5hYmxlZC4KICovCiNkZWZpbmUgU0RWT19DTURfR0VUX0FDVElWRV9IT1RfUExVRwkJCTB4MGUKCiNkZWZpbmUgU0RWT19DTURfR0VUX0lOVEVSUlVQVF9FVkVOVF9TT1VSQ0UJCTB4MGYKc3RydWN0IGludGVsX3Nkdm9fZ2V0X2ludGVycnVwdF9ldmVudF9zb3VyY2VfcmVzcG9uc2UgewoJdTE2IGludGVycnVwdF9zdGF0dXM7Cgl1bnNpZ25lZCBpbnQgYW1iaWVudF9saWdodF9pbnRlcnJ1cHQ6MTsKCXVuc2lnbmVkIGludCBoZG1pX2F1ZGlvX2VuY3J5cHRfY2hhbmdlOjE7Cgl1bnNpZ25lZCBpbnQgcGFkOjY7Cn0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CgovKioKICogU2VsZWN0cyB3aGljaCBpbnB1dCBpcyBhZmZlY3RlZCBieSBmdXR1cmUgaW5wdXQgY29tbWFuZHMuCiAqCiAqIENvbW1hbmRzIGFmZmVjdGVkIGluY2x1ZGUgU0VUX0lOUFVUX1RJTUlOR1NfUEFSVFsxMl0sCiAqIEdFVF9JTlBVVF9USU1JTkdTX1BBUlRbMTJdLCBHRVRfUFJFRkVSUkVEX0lOUFVUX1RJTUlOR1NfUEFSVFsxMl0sCiAqIEdFVF9JTlBVVF9QSVhFTF9DTE9DS19SQU5HRSwgYW5kIENSRUFURV9QUkVGRVJSRURfSU5QVVRfVElNSU5HUy4KICovCiNkZWZpbmUgU0RWT19DTURfU0VUX1RBUkdFVF9JTlBVVAkJCTB4MTAKc3RydWN0IGludGVsX3Nkdm9fc2V0X3RhcmdldF9pbnB1dF9hcmdzIHsKCXVuc2lnbmVkIGludCB0YXJnZXRfMToxOwoJdW5zaWduZWQgaW50IHBhZDo3Owp9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwoKLyoqCiAqIFRha2VzIGEgc3RydWN0IGludGVsX3Nkdm9fb3V0cHV0X2ZsYWdzIG9mIHdoaWNoIG91dHB1dHMgYXJlIHRhcmdldGVkIGJ5CiAqIGZ1dHVyZSBvdXRwdXQgY29tbWFuZHMuCiAqCiAqIEFmZmVjdGVkIGNvbW1hbmRzIGluY2x1ZSBTRVRfT1VUUFVUX1RJTUlOR1NfUEFSVFsxMl0sCiAqIEdFVF9PVVRQVVRfVElNSU5HU19QQVJUWzEyXSwgYW5kIEdFVF9PVVRQVVRfUElYRUxfQ0xPQ0tfUkFOR0UuCiAqLwojZGVmaW5lIFNEVk9fQ01EX1NFVF9UQVJHRVRfT1VUUFVUCQkJMHgxMQoKI2RlZmluZSBTRFZPX0NNRF9HRVRfSU5QVVRfVElNSU5HU19QQVJUMQkJMHgxMgojZGVmaW5lIFNEVk9fQ01EX0dFVF9JTlBVVF9USU1JTkdTX1BBUlQyCQkweDEzCiNkZWZpbmUgU0RWT19DTURfU0VUX0lOUFVUX1RJTUlOR1NfUEFSVDEJCTB4MTQKI2RlZmluZSBTRFZPX0NNRF9TRVRfSU5QVVRfVElNSU5HU19QQVJUMgkJMHgxNQojZGVmaW5lIFNEVk9fQ01EX1NFVF9PVVRQVVRfVElNSU5HU19QQVJUMQkJMHgxNgojZGVmaW5lIFNEVk9fQ01EX1NFVF9PVVRQVVRfVElNSU5HU19QQVJUMgkJMHgxNwojZGVmaW5lIFNEVk9fQ01EX0dFVF9PVVRQVVRfVElNSU5HU19QQVJUMQkJMHgxOAojZGVmaW5lIFNEVk9fQ01EX0dFVF9PVVRQVVRfVElNSU5HU19QQVJUMgkJMHgxOQovKiBQYXJ0IDEgKi8KIyBkZWZpbmUgU0RWT19EVERfQ0xPQ0tfTE9XCQkJCVNEVk9fSTJDX0FSR18wCiMgZGVmaW5lIFNEVk9fRFREX0NMT0NLX0hJR0gJCQkJU0RWT19JMkNfQVJHXzEKIyBkZWZpbmUgU0RWT19EVERfSF9BQ1RJVkUJCQkJU0RWT19JMkNfQVJHXzIKIyBkZWZpbmUgU0RWT19EVERfSF9CTEFOSwkJCQlTRFZPX0kyQ19BUkdfMwojIGRlZmluZSBTRFZPX0RURF9IX0hJR0gJCQkJU0RWT19JMkNfQVJHXzQKIyBkZWZpbmUgU0RWT19EVERfVl9BQ1RJVkUJCQkJU0RWT19JMkNfQVJHXzUKIyBkZWZpbmUgU0RWT19EVERfVl9CTEFOSwkJCQlTRFZPX0kyQ19BUkdfNgojIGRlZmluZSBTRFZPX0RURF9WX0hJR0gJCQkJU0RWT19JMkNfQVJHXzcKLyogUGFydCAyICovCiMgZGVmaW5lIFNEVk9fRFREX0hTWU5DX09GRgkJCQlTRFZPX0kyQ19BUkdfMAojIGRlZmluZSBTRFZPX0RURF9IU1lOQ19XSURUSAkJCQlTRFZPX0kyQ19BUkdfMQojIGRlZmluZSBTRFZPX0RURF9WU1lOQ19PRkZfV0lEVEgJCQlTRFZPX0kyQ19BUkdfMgojIGRlZmluZSBTRFZPX0RURF9TWU5DX09GRl9XSURUSF9ISUdICQkJU0RWT19JMkNfQVJHXzMKIyBkZWZpbmUgU0RWT19EVERfRFREX0ZMQUdTCQkJCVNEVk9fSTJDX0FSR180CiMgZGVmaW5lIFNEVk9fRFREX0RURF9GTEFHX0lOVEVSTEFDRUQJCQkJKDEgPDwgNykKIyBkZWZpbmUgU0RWT19EVERfRFREX0ZMQUdfU1RFUkVPX01BU0sJCQkJKDMgPDwgNSkKIyBkZWZpbmUgU0RWT19EVERfRFREX0ZMQUdfSU5QVVRfTUFTSwkJCQkoMyA8PCAzKQojIGRlZmluZSBTRFZPX0RURF9EVERfRkxBR19TWU5DX01BU0sJCQkJKDMgPDwgMSkKIyBkZWZpbmUgU0RWT19EVERfU0RWT19GTEFTCQkJCVNEVk9fSTJDX0FSR181CiMgZGVmaW5lIFNEVk9fRFREX1NEVk9fRkxBR19TVEFMTAkJCQkoMSA8PCA3KQojIGRlZmluZSBTRFZPX0RURF9TRFZPX0ZMQUdfQ0VOVEVSRUQJCQkJKDAgPDwgNikKIyBkZWZpbmUgU0RWT19EVERfU0RWT19GTEFHX1VQUEVSX0xFRlQJCQkJKDEgPDwgNikKIyBkZWZpbmUgU0RWT19EVERfU0RWT19GTEFHX1NDQUxJTkdfTUFTSwkJCSgzIDw8IDQpCiMgZGVmaW5lIFNEVk9fRFREX1NEVk9fRkxBR19TQ0FMSU5HX05PTkUJCQkoMCA8PCA0KQojIGRlZmluZSBTRFZPX0RURF9TRFZPX0ZMQUdfU0NBTElOR19TSEFSUAkJCSgxIDw8IDQpCiMgZGVmaW5lIFNEVk9fRFREX1NEVk9fRkxBR19TQ0FMSU5HX1NNT09USAkJCSgyIDw8IDQpCiMgZGVmaW5lIFNEVk9fRFREX1ZTWU5DX09GRl9ISUdICQkJU0RWT19JMkNfQVJHXzYKCi8qKgogKiBHZW5lcmF0ZXMgYSBEVEQgYmFzZWQgb24gdGhlIGdpdmVuIHdpZHRoLCBoZWlnaHQsIGFuZCBmbGFncy4KICoKICogVGhpcyB3aWxsIGJlIHN1cHBvcnRlZCBieSBhbnkgZGV2aWNlIHN1cHBvcnRpbmcgc2NhbGluZyBvciBpbnRlcmxhY2VkCiAqIG1vZGVzLgogKi8KI2RlZmluZSBTRFZPX0NNRF9DUkVBVEVfUFJFRkVSUkVEX0lOUFVUX1RJTUlORwkJMHgxYQojIGRlZmluZSBTRFZPX1BSRUZFUlJFRF9JTlBVVF9USU1JTkdfQ0xPQ0tfTE9XCQlTRFZPX0kyQ19BUkdfMAojIGRlZmluZSBTRFZPX1BSRUZFUlJFRF9JTlBVVF9USU1JTkdfQ0xPQ0tfSElHSAkJU0RWT19JMkNfQVJHXzEKIyBkZWZpbmUgU0RWT19QUkVGRVJSRURfSU5QVVRfVElNSU5HX1dJRFRIX0xPVwkJU0RWT19JMkNfQVJHXzIKIyBkZWZpbmUgU0RWT19QUkVGRVJSRURfSU5QVVRfVElNSU5HX1dJRFRIX0hJR0gJCVNEVk9fSTJDX0FSR18zCiMgZGVmaW5lIFNEVk9fUFJFRkVSUkVEX0lOUFVUX1RJTUlOR19IRUlHSFRfTE9XCQlTRFZPX0kyQ19BUkdfNAojIGRlZmluZSBTRFZPX1BSRUZFUlJFRF9JTlBVVF9USU1JTkdfSEVJR0hUX0hJR0gJU0RWT19JMkNfQVJHXzUKIyBkZWZpbmUgU0RWT19QUkVGRVJSRURfSU5QVVRfVElNSU5HX0ZMQUdTCQlTRFZPX0kyQ19BUkdfNgojIGRlZmluZSBTRFZPX1BSRUZFUlJFRF9JTlBVVF9USU1JTkdfRkxBR1NfSU5URVJMQUNFRAkJKDEgPDwgMCkKIyBkZWZpbmUgU0RWT19QUkVGRVJSRURfSU5QVVRfVElNSU5HX0ZMQUdTX1NDQUxFRAkJKDEgPDwgMSkKCiNkZWZpbmUgU0RWT19DTURfR0VUX1BSRUZFUlJFRF9JTlBVVF9USU1JTkdfUEFSVDEJMHgxYgojZGVmaW5lIFNEVk9fQ01EX0dFVF9QUkVGRVJSRURfSU5QVVRfVElNSU5HX1BBUlQyCTB4MWMKCi8qKiBSZXR1cm5zIGEgc3RydWN0IGludGVsX3Nkdm9fcGl4ZWxfY2xvY2tfcmFuZ2UgKi8KI2RlZmluZSBTRFZPX0NNRF9HRVRfSU5QVVRfUElYRUxfQ0xPQ0tfUkFOR0UJCTB4MWQKLyoqIFJldHVybnMgYSBzdHJ1Y3QgaW50ZWxfc2R2b19waXhlbF9jbG9ja19yYW5nZSAqLwojZGVmaW5lIFNEVk9fQ01EX0dFVF9PVVRQVVRfUElYRUxfQ0xPQ0tfUkFOR0UJCTB4MWUKCi8qKiBSZXR1cm5zIGEgYnl0ZSBiaXRmaWVsZCBjb250YWluaW5nIFNEVk9fQ0xPQ0tfUkFURV9NVUxUXyogZmxhZ3MgKi8KI2RlZmluZSBTRFZPX0NNRF9HRVRfU1VQUE9SVEVEX0NMT0NLX1JBVEVfTVVMVFMJCTB4MWYKCi8qKiBSZXR1cm5zIGEgYnl0ZSBjb250YWluaW5nIGEgU0RWT19DTE9DS19SQVRFX01VTFRfKiBmbGFnICovCiNkZWZpbmUgU0RWT19DTURfR0VUX0NMT0NLX1JBVEVfTVVMVAkJCTB4MjAKLyoqIFRha2VzIGEgYnl0ZSBjb250YWluaW5nIGEgU0RWT19DTE9DS19SQVRFX01VTFRfKiBmbGFnICovCiNkZWZpbmUgU0RWT19DTURfU0VUX0NMT0NLX1JBVEVfTVVMVAkJCTB4MjEKIyBkZWZpbmUgU0RWT19DTE9DS19SQVRFX01VTFRfMVgJCQkJKDEgPDwgMCkKIyBkZWZpbmUgU0RWT19DTE9DS19SQVRFX01VTFRfMlgJCQkJKDEgPDwgMSkKIyBkZWZpbmUgU0RWT19DTE9DS19SQVRFX01VTFRfNFgJCQkJKDEgPDwgMykKCiNkZWZpbmUgU0RWT19DTURfR0VUX1NVUFBPUlRFRF9UVl9GT1JNQVRTCQkweDI3Ci8qKiA2IGJ5dGVzIG9mIGJpdCBmbGFncyBmb3IgVFYgZm9ybWF0cyBzaGFyZWQgYnkgYWxsIFRWIGZvcm1hdCBmdW5jdGlvbnMgKi8Kc3RydWN0IGludGVsX3Nkdm9fdHZfZm9ybWF0IHsKCXVuc2lnbmVkIGludCBudHNjX206MTsKCXVuc2lnbmVkIGludCBudHNjX2o6MTsKCXVuc2lnbmVkIGludCBudHNjXzQ0MzoxOwoJdW5zaWduZWQgaW50IHBhbF9iOjE7Cgl1bnNpZ25lZCBpbnQgcGFsX2Q6MTsKCXVuc2lnbmVkIGludCBwYWxfZzoxOwoJdW5zaWduZWQgaW50IHBhbF9oOjE7Cgl1bnNpZ25lZCBpbnQgcGFsX2k6MTsKCgl1bnNpZ25lZCBpbnQgcGFsX206MTsKCXVuc2lnbmVkIGludCBwYWxfbjoxOwoJdW5zaWduZWQgaW50IHBhbF9uYzoxOwoJdW5zaWduZWQgaW50IHBhbF82MDoxOwoJdW5zaWduZWQgaW50IHNlY2FtX2I6MTsKCXVuc2lnbmVkIGludCBzZWNhbV9kOjE7Cgl1bnNpZ25lZCBpbnQgc2VjYW1fZzoxOwoJdW5zaWduZWQgaW50IHNlY2FtX2s6MTsKCgl1bnNpZ25lZCBpbnQgc2VjYW1fazE6MTsKCXVuc2lnbmVkIGludCBzZWNhbV9sOjE7Cgl1bnNpZ25lZCBpbnQgc2VjYW1fNjA6MTsKCXVuc2lnbmVkIGludCBoZHR2X3N0ZF9zbXB0ZV8yNDBtXzEwODBpXzU5OjE7Cgl1bnNpZ25lZCBpbnQgaGR0dl9zdGRfc21wdGVfMjQwbV8xMDgwaV82MDoxOwoJdW5zaWduZWQgaW50IGhkdHZfc3RkX3NtcHRlXzI2MG1fMTA4MGlfNTk6MTsKCXVuc2lnbmVkIGludCBoZHR2X3N0ZF9zbXB0ZV8yNjBtXzEwODBpXzYwOjE7Cgl1bnNpZ25lZCBpbnQgaGR0dl9zdGRfc21wdGVfMjc0bV8xMDgwaV81MDoxOwoKCXVuc2lnbmVkIGludCBoZHR2X3N0ZF9zbXB0ZV8yNzRtXzEwODBpXzU5OjE7Cgl1bnNpZ25lZCBpbnQgaGR0dl9zdGRfc21wdGVfMjc0bV8xMDgwaV82MDoxOwoJdW5zaWduZWQgaW50IGhkdHZfc3RkX3NtcHRlXzI3NG1fMTA4MHBfMjM6MTsKCXVuc2lnbmVkIGludCBoZHR2X3N0ZF9zbXB0ZV8yNzRtXzEwODBwXzI0OjE7Cgl1bnNpZ25lZCBpbnQgaGR0dl9zdGRfc21wdGVfMjc0bV8xMDgwcF8yNToxOwoJdW5zaWduZWQgaW50IGhkdHZfc3RkX3NtcHRlXzI3NG1fMTA4MHBfMjk6MTsKCXVuc2lnbmVkIGludCBoZHR2X3N0ZF9zbXB0ZV8yNzRtXzEwODBwXzMwOjE7Cgl1bnNpZ25lZCBpbnQgaGR0dl9zdGRfc21wdGVfMjc0bV8xMDgwcF81MDoxOwoKCXVuc2lnbmVkIGludCBoZHR2X3N0ZF9zbXB0ZV8yNzRtXzEwODBwXzU5OjE7Cgl1bnNpZ25lZCBpbnQgaGR0dl9zdGRfc21wdGVfMjc0bV8xMDgwcF82MDoxOwoJdW5zaWduZWQgaW50IGhkdHZfc3RkX3NtcHRlXzI5NW1fMTA4MGlfNTA6MTsKCXVuc2lnbmVkIGludCBoZHR2X3N0ZF9zbXB0ZV8yOTVtXzEwODBwXzUwOjE7Cgl1bnNpZ25lZCBpbnQgaGR0dl9zdGRfc21wdGVfMjk2bV83MjBwXzU5OjE7Cgl1bnNpZ25lZCBpbnQgaGR0dl9zdGRfc21wdGVfMjk2bV83MjBwXzYwOjE7Cgl1bnNpZ25lZCBpbnQgaGR0dl9zdGRfc21wdGVfMjk2bV83MjBwXzUwOjE7Cgl1bnNpZ25lZCBpbnQgaGR0dl9zdGRfc21wdGVfMjkzbV80ODBwXzU5OjE7CgoJdW5zaWduZWQgaW50IGhkdHZfc3RkX3NtcHRlXzE3MG1fNDgwaV81OToxOwoJdW5zaWduZWQgaW50IGhkdHZfc3RkX2l0dXJidDYwMV81NzZpXzUwOjE7Cgl1bnNpZ25lZCBpbnQgaGR0dl9zdGRfaXR1cmJ0NjAxXzU3NnBfNTA6MTsKCXVuc2lnbmVkIGludCBoZHR2X3N0ZF9laWFfNzcwMmFfNDgwaV82MDoxOwoJdW5zaWduZWQgaW50IGhkdHZfc3RkX2VpYV83NzAyYV80ODBwXzYwOjE7Cgl1bnNpZ25lZCBpbnQgcGFkOjM7Cn0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CgojZGVmaW5lIFNEVk9fQ01EX0dFVF9UVl9GT1JNQVQJCQkJMHgyOAoKI2RlZmluZSBTRFZPX0NNRF9TRVRfVFZfRk9STUFUCQkJCTB4MjkKCi8qKiBSZXR1cm5zIHRoZSByZXNvbHV0aW9zbiB0aGF0IGNhbiBiZSB1c2VkIHdpdGggdGhlIGdpdmVuIFRWIGZvcm1hdCAqLwojZGVmaW5lIFNEVk9fQ01EX0dFVF9TRFRWX1JFU09MVVRJT05fU1VQUE9SVAkJMHg4MwpzdHJ1Y3QgaW50ZWxfc2R2b19zZHR2X3Jlc29sdXRpb25fcmVxdWVzdCB7Cgl1bnNpZ25lZCBpbnQgbnRzY19tOjE7Cgl1bnNpZ25lZCBpbnQgbnRzY19qOjE7Cgl1bnNpZ25lZCBpbnQgbnRzY180NDM6MTsKCXVuc2lnbmVkIGludCBwYWxfYjoxOwoJdW5zaWduZWQgaW50IHBhbF9kOjE7Cgl1bnNpZ25lZCBpbnQgcGFsX2c6MTsKCXVuc2lnbmVkIGludCBwYWxfaDoxOwoJdW5zaWduZWQgaW50IHBhbF9pOjE7CgoJdW5zaWduZWQgaW50IHBhbF9tOjE7Cgl1bnNpZ25lZCBpbnQgcGFsX246MTsKCXVuc2lnbmVkIGludCBwYWxfbmM6MTsKCXVuc2lnbmVkIGludCBwYWxfNjA6MTsKCXVuc2lnbmVkIGludCBzZWNhbV9iOjE7Cgl1bnNpZ25lZCBpbnQgc2VjYW1fZDoxOwoJdW5zaWduZWQgaW50IHNlY2FtX2c6MTsKCXVuc2lnbmVkIGludCBzZWNhbV9rOjE7CgoJdW5zaWduZWQgaW50IHNlY2FtX2sxOjE7Cgl1bnNpZ25lZCBpbnQgc2VjYW1fbDoxOwoJdW5zaWduZWQgaW50IHNlY2FtXzYwOjE7Cgl1bnNpZ25lZCBpbnQgcGFkOjU7Cn0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CgpzdHJ1Y3QgaW50ZWxfc2R2b19zZHR2X3Jlc29sdXRpb25fcmVwbHkgewoJdW5zaWduZWQgaW50IHJlc18zMjB4MjAwOjE7Cgl1bnNpZ25lZCBpbnQgcmVzXzMyMHgyNDA6MTsKCXVuc2lnbmVkIGludCByZXNfNDAweDMwMDoxOwoJdW5zaWduZWQgaW50IHJlc182NDB4MzUwOjE7Cgl1bnNpZ25lZCBpbnQgcmVzXzY0MHg0MDA6MTsKCXVuc2lnbmVkIGludCByZXNfNjQweDQ4MDoxOwoJdW5zaWduZWQgaW50IHJlc183MDR4NDgwOjE7Cgl1bnNpZ25lZCBpbnQgcmVzXzcwNHg1NzY6MTsKCgl1bnNpZ25lZCBpbnQgcmVzXzcyMHgzNTA6MTsKCXVuc2lnbmVkIGludCByZXNfNzIweDQwMDoxOwoJdW5zaWduZWQgaW50IHJlc183MjB4NDgwOjE7Cgl1bnNpZ25lZCBpbnQgcmVzXzcyMHg1NDA6MTsKCXVuc2lnbmVkIGludCByZXNfNzIweDU3NjoxOwoJdW5zaWduZWQgaW50IHJlc183Njh4NTc2OjE7Cgl1bnNpZ25lZCBpbnQgcmVzXzgwMHg2MDA6MTsKCXVuc2lnbmVkIGludCByZXNfODMyeDYyNDoxOwoKCXVuc2lnbmVkIGludCByZXNfOTIweDc2NjoxOwoJdW5zaWduZWQgaW50IHJlc18xMDI0eDc2ODoxOwoJdW5zaWduZWQgaW50IHJlc18xMjgweDEwMjQ6MTsKCXVuc2lnbmVkIGludCBwYWQ6NTsKfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKCi8qIEdldCBzdXBwb3J0ZWQgcmVzb2x1dGlvbiB3aXRoIHNxdWlyZSBwaXhlbCBhc3BlY3QgcmF0aW8gdGhhdCBjYW4gYmUKICAgc2NhbGVkIGZvciB0aGUgcmVxdWVzdGVkIEhEVFYgZm9ybWF0ICovCiNkZWZpbmUgU0RWT19DTURfR0VUX1NDQUxFRF9IRFRWX1JFU09MVVRJT05fU1VQUE9SVAkJMHg4NQoKc3RydWN0IGludGVsX3Nkdm9faGR0dl9yZXNvbHV0aW9uX3JlcXVlc3QgewoJdW5zaWduZWQgaW50IGhkdHZfc3RkX3NtcHRlXzI0MG1fMTA4MGlfNTk6MTsKCXVuc2lnbmVkIGludCBoZHR2X3N0ZF9zbXB0ZV8yNDBtXzEwODBpXzYwOjE7Cgl1bnNpZ25lZCBpbnQgaGR0dl9zdGRfc21wdGVfMjYwbV8xMDgwaV81OToxOwoJdW5zaWduZWQgaW50IGhkdHZfc3RkX3NtcHRlXzI2MG1fMTA4MGlfNjA6MTsKCXVuc2lnbmVkIGludCBoZHR2X3N0ZF9zbXB0ZV8yNzRtXzEwODBpXzUwOjE7Cgl1bnNpZ25lZCBpbnQgaGR0dl9zdGRfc21wdGVfMjc0bV8xMDgwaV81OToxOwoJdW5zaWduZWQgaW50IGhkdHZfc3RkX3NtcHRlXzI3NG1fMTA4MGlfNjA6MTsKCXVuc2lnbmVkIGludCBoZHR2X3N0ZF9zbXB0ZV8yNzRtXzEwODBwXzIzOjE7CgoJdW5zaWduZWQgaW50IGhkdHZfc3RkX3NtcHRlXzI3NG1fMTA4MHBfMjQ6MTsKCXVuc2lnbmVkIGludCBoZHR2X3N0ZF9zbXB0ZV8yNzRtXzEwODBwXzI1OjE7Cgl1bnNpZ25lZCBpbnQgaGR0dl9zdGRfc21wdGVfMjc0bV8xMDgwcF8yOToxOwoJdW5zaWduZWQgaW50IGhkdHZfc3RkX3NtcHRlXzI3NG1fMTA4MHBfMzA6MTsKCXVuc2lnbmVkIGludCBoZHR2X3N0ZF9zbXB0ZV8yNzRtXzEwODBwXzUwOjE7Cgl1bnNpZ25lZCBpbnQgaGR0dl9zdGRfc21wdGVfMjc0bV8xMDgwcF81OToxOwoJdW5zaWduZWQgaW50IGhkdHZfc3RkX3NtcHRlXzI3NG1fMTA4MHBfNjA6MTsKCXVuc2lnbmVkIGludCBoZHR2X3N0ZF9zbXB0ZV8yOTVtXzEwODBpXzUwOjE7CgoJdW5zaWduZWQgaW50IGhkdHZfc3RkX3NtcHRlXzI5NW1fMTA4MHBfNTA6MTsKCXVuc2lnbmVkIGludCBoZHR2X3N0ZF9zbXB0ZV8yOTZtXzcyMHBfNTk6MTsKCXVuc2lnbmVkIGludCBoZHR2X3N0ZF9zbXB0ZV8yOTZtXzcyMHBfNjA6MTsKCXVuc2lnbmVkIGludCBoZHR2X3N0ZF9zbXB0ZV8yOTZtXzcyMHBfNTA6MTsKCXVuc2lnbmVkIGludCBoZHR2X3N0ZF9zbXB0ZV8yOTNtXzQ4MHBfNTk6MTsKCXVuc2lnbmVkIGludCBoZHR2X3N0ZF9zbXB0ZV8xNzBtXzQ4MGlfNTk6MTsKCXVuc2lnbmVkIGludCBoZHR2X3N0ZF9pdHVyYnQ2MDFfNTc2aV81MDoxOwoJdW5zaWduZWQgaW50IGhkdHZfc3RkX2l0dXJidDYwMV81NzZwXzUwOjE7CgoJdW5zaWduZWQgaW50IGhkdHZfc3RkX2VpYV83NzAyYV80ODBpXzYwOjE7Cgl1bnNpZ25lZCBpbnQgaGR0dl9zdGRfZWlhXzc3MDJhXzQ4MHBfNjA6MTsKCXVuc2lnbmVkIGludCBwYWQ6NjsKfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKCnN0cnVjdCBpbnRlbF9zZHZvX2hkdHZfcmVzb2x1dGlvbl9yZXBseSB7Cgl1bnNpZ25lZCBpbnQgcmVzXzY0MHg0ODA6MTsKCXVuc2lnbmVkIGludCByZXNfODAweDYwMDoxOwoJdW5zaWduZWQgaW50IHJlc18xMDI0eDc2ODoxOwoJdW5zaWduZWQgaW50IHJlc18xMjgweDk2MDoxOwoJdW5zaWduZWQgaW50IHJlc18xNDAweDEwNTA6MTsKCXVuc2lnbmVkIGludCByZXNfMTYwMHgxMjAwOjE7Cgl1bnNpZ25lZCBpbnQgcmVzXzE5MjB4MTQ0MDoxOwoJdW5zaWduZWQgaW50IHJlc18yMDQ4eDE1MzY6MTsKCgl1bnNpZ25lZCBpbnQgcmVzXzI1NjB4MTkyMDoxOwoJdW5zaWduZWQgaW50IHJlc18zMjAweDI0MDA6MTsKCXVuc2lnbmVkIGludCByZXNfMzg0MHgyODgwOjE7Cgl1bnNpZ25lZCBpbnQgcGFkMTo1OwoKCXVuc2lnbmVkIGludCByZXNfODQ4eDQ4MDoxOwoJdW5zaWduZWQgaW50IHJlc18xMDY0eDYwMDoxOwoJdW5zaWduZWQgaW50IHJlc18xMjgweDcyMDoxOwoJdW5zaWduZWQgaW50IHJlc18xMzYweDc2ODoxOwoJdW5zaWduZWQgaW50IHJlc18xNzA0eDk2MDoxOwoJdW5zaWduZWQgaW50IHJlc18xODY0eDEwNTA6MTsKCXVuc2lnbmVkIGludCByZXNfMTkyMHgxMDgwOjE7Cgl1bnNpZ25lZCBpbnQgcmVzXzIxMjh4MTIwMDoxOwoKCXVuc2lnbmVkIGludCByZXNfMjU2MHgxNDAwOjE7Cgl1bnNpZ25lZCBpbnQgcmVzXzI3Mjh4MTUzNjoxOwoJdW5zaWduZWQgaW50IHJlc18zNDA4eDE5MjA6MTsKCXVuc2lnbmVkIGludCByZXNfNDI2NHgyNDAwOjE7Cgl1bnNpZ25lZCBpbnQgcmVzXzUxMjB4Mjg4MDoxOwoJdW5zaWduZWQgaW50IHBhZDI6MzsKCgl1bnNpZ25lZCBpbnQgcmVzXzc2OHg0ODA6MTsKCXVuc2lnbmVkIGludCByZXNfOTYweDYwMDoxOwoJdW5zaWduZWQgaW50IHJlc18xMTUyeDcyMDoxOwoJdW5zaWduZWQgaW50IHJlc18xMTI0eDc2ODoxOwoJdW5zaWduZWQgaW50IHJlc18xNTM2eDk2MDoxOwoJdW5zaWduZWQgaW50IHJlc18xNjgweDEwNTA6MTsKCXVuc2lnbmVkIGludCByZXNfMTcyOHgxMDgwOjE7Cgl1bnNpZ25lZCBpbnQgcmVzXzE5MjB4MTIwMDoxOwoKCXVuc2lnbmVkIGludCByZXNfMjMwNHgxNDQwOjE7Cgl1bnNpZ25lZCBpbnQgcmVzXzI0NTZ4MTUzNjoxOwoJdW5zaWduZWQgaW50IHJlc18zMDcyeDE5MjA6MTsKCXVuc2lnbmVkIGludCByZXNfMzg0MHgyNDAwOjE7Cgl1bnNpZ25lZCBpbnQgcmVzXzQ2MDh4Mjg4MDoxOwoJdW5zaWduZWQgaW50IHBhZDM6MzsKCgl1bnNpZ25lZCBpbnQgcmVzXzEyODB4MTAyNDoxOwoJdW5zaWduZWQgaW50IHBhZDQ6NzsKCgl1bnNpZ25lZCBpbnQgcmVzXzEyODB4NzY4OjE7Cgl1bnNpZ25lZCBpbnQgcGFkNTo3Owp9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwoKLyogR2V0IHN1cHBvcnRlZCBwb3dlciBzdGF0ZSByZXR1cm5zIGluZm8gZm9yIGVuY29kZXIgYW5kIG1vbml0b3IsIHJlbHkgb24KICAgbGFzdCBTZXRUYXJnZXRJbnB1dCBhbmQgU2V0VGFyZ2V0T3V0cHV0IGNhbGxzICovCiNkZWZpbmUgU0RWT19DTURfR0VUX1NVUFBPUlRFRF9QT1dFUl9TVEFURVMJCTB4MmEKLyogR2V0IHBvd2VyIHN0YXRlIHJldHVybnMgaW5mbyBmb3IgZW5jb2RlciBhbmQgbW9uaXRvciwgcmVseSBvbiBsYXN0CiAgIFNldFRhcmdldElucHV0IGFuZCBTZXRUYXJnZXRPdXRwdXQgY2FsbHMgKi8KI2RlZmluZSBTRFZPX0NNRF9HRVRfUE9XRVJfU1RBVEUJCQkweDJiCiNkZWZpbmUgU0RWT19DTURfR0VUX0VOQ09ERVJfUE9XRVJfU1RBVEUJCTB4MmIKI2RlZmluZSBTRFZPX0NNRF9TRVRfRU5DT0RFUl9QT1dFUl9TVEFURQkJMHgyYwojIGRlZmluZSBTRFZPX0VOQ09ERVJfU1RBVEVfT04JCQkJCSgxIDw8IDApCiMgZGVmaW5lIFNEVk9fRU5DT0RFUl9TVEFURV9TVEFOREJZCQkJCSgxIDw8IDEpCiMgZGVmaW5lIFNEVk9fRU5DT0RFUl9TVEFURV9TVVNQRU5ECQkJCSgxIDw8IDIpCiMgZGVmaW5lIFNEVk9fRU5DT0RFUl9TVEFURV9PRkYJCQkJCSgxIDw8IDMpCiMgZGVmaW5lIFNEVk9fTU9OSVRPUl9TVEFURV9PTgkJCQkJKDEgPDwgNCkKIyBkZWZpbmUgU0RWT19NT05JVE9SX1NUQVRFX1NUQU5EQlkJCQkJKDEgPDwgNSkKIyBkZWZpbmUgU0RWT19NT05JVE9SX1NUQVRFX1NVU1BFTkQJCQkJKDEgPDwgNikKIyBkZWZpbmUgU0RWT19NT05JVE9SX1NUQVRFX09GRgkJCQkJKDEgPDwgNykKCiNkZWZpbmUgU0RWT19DTURfR0VUX01BWF9QQU5FTF9QT1dFUl9TRVFVRU5DSU5HCQkweDJkCiNkZWZpbmUgU0RWT19DTURfR0VUX1BBTkVMX1BPV0VSX1NFUVVFTkNJTkcJCTB4MmUKI2RlZmluZSBTRFZPX0NNRF9TRVRfUEFORUxfUE9XRVJfU0VRVUVOQ0lORwkJMHgyZgovKioKICogVGhlIHBhbmVsIHBvd2VyIHNlcXVlbmNpbmcgcGFyYW1ldGVycyBhcmUgaW4gdW5pdHMgb2YgbWlsbGlzZWNvbmRzLgogKiBUaGUgaGlnaCBmaWVsZHMgYXJlIGJpdHMgODo5IG9mIHRoZSAxMC1iaXQgdmFsdWVzLgogKi8Kc3RydWN0IHNkdm9fcGFuZWxfcG93ZXJfc2VxdWVuY2luZyB7Cgl1OCB0MDsKCXU4IHQxOwoJdTggdDI7Cgl1OCB0MzsKCXU4IHQ0OwoKCXVuc2lnbmVkIGludCB0MF9oaWdoOjI7Cgl1bnNpZ25lZCBpbnQgdDFfaGlnaDoyOwoJdW5zaWduZWQgaW50IHQyX2hpZ2g6MjsKCXVuc2lnbmVkIGludCB0M19oaWdoOjI7CgoJdW5zaWduZWQgaW50IHQ0X2hpZ2g6MjsKCXVuc2lnbmVkIGludCBwYWQ6NjsKfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKCiNkZWZpbmUgU0RWT19DTURfR0VUX01BWF9CQUNLTElHSFRfTEVWRUwJCTB4MzAKc3RydWN0IHNkdm9fbWF4X2JhY2tsaWdodF9yZXBseSB7Cgl1OCBtYXhfdmFsdWU7Cgl1OCBkZWZhdWx0X3ZhbHVlOwp9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwoKI2RlZmluZSBTRFZPX0NNRF9HRVRfQkFDS0xJR0hUX0xFVkVMCQkJMHgzMQojZGVmaW5lIFNEVk9fQ01EX1NFVF9CQUNLTElHSFRfTEVWRUwJCQkweDMyCgojZGVmaW5lIFNEVk9fQ01EX0dFVF9BTUJJRU5UX0xJR0hUCQkJMHgzMwpzdHJ1Y3Qgc2R2b19nZXRfYW1iaWVudF9saWdodF9yZXBseSB7Cgl1MTYgdHJpcF9sb3c7Cgl1MTYgdHJpcF9oaWdoOwoJdTE2IHZhbHVlOwp9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwojZGVmaW5lIFNEVk9fQ01EX1NFVF9BTUJJRU5UX0xJR0hUCQkJMHgzNApzdHJ1Y3Qgc2R2b19zZXRfYW1iaWVudF9saWdodF9yZXBseSB7Cgl1MTYgdHJpcF9sb3c7Cgl1MTYgdHJpcF9oaWdoOwoJdW5zaWduZWQgaW50IGVuYWJsZToxOwoJdW5zaWduZWQgaW50IHBhZDo3Owp9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwoKLyogU2V0IGRpc3BsYXkgcG93ZXIgc3RhdGUgKi8KI2RlZmluZSBTRFZPX0NNRF9TRVRfRElTUExBWV9QT1dFUl9TVEFURQkJMHg3ZAojIGRlZmluZSBTRFZPX0RJU1BMQVlfU1RBVEVfT04JCQkJKDEgPDwgMCkKIyBkZWZpbmUgU0RWT19ESVNQTEFZX1NUQVRFX1NUQU5EQlkJCQkoMSA8PCAxKQojIGRlZmluZSBTRFZPX0RJU1BMQVlfU1RBVEVfU1VTUEVORAkJCSgxIDw8IDIpCiMgZGVmaW5lIFNEVk9fRElTUExBWV9TVEFURV9PRkYJCQkJKDEgPDwgMykKCiNkZWZpbmUgU0RWT19DTURfR0VUX1NVUFBPUlRFRF9FTkhBTkNFTUVOVFMJCTB4ODQKc3RydWN0IGludGVsX3Nkdm9fZW5oYW5jZW1lbnRzX3JlcGx5IHsKCXVuc2lnbmVkIGludCBmbGlja2VyX2ZpbHRlcjoxOwoJdW5zaWduZWQgaW50IGZsaWNrZXJfZmlsdGVyX2FkYXB0aXZlOjE7Cgl1bnNpZ25lZCBpbnQgZmxpY2tlcl9maWx0ZXJfMmQ6MTsKCXVuc2lnbmVkIGludCBzYXR1cmF0aW9uOjE7Cgl1bnNpZ25lZCBpbnQgaHVlOjE7Cgl1bnNpZ25lZCBpbnQgYnJpZ2h0bmVzczoxOwoJdW5zaWduZWQgaW50IGNvbnRyYXN0OjE7Cgl1bnNpZ25lZCBpbnQgb3ZlcnNjYW5faDoxOwoKCXVuc2lnbmVkIGludCBvdmVyc2Nhbl92OjE7Cgl1bnNpZ25lZCBpbnQgaHBvczoxOwoJdW5zaWduZWQgaW50IHZwb3M6MTsKCXVuc2lnbmVkIGludCBzaGFycG5lc3M6MTsKCXVuc2lnbmVkIGludCBkb3RfY3Jhd2w6MTsKCXVuc2lnbmVkIGludCBkaXRoZXI6MTsKCXVuc2lnbmVkIGludCB0dl9jaHJvbWFfZmlsdGVyOjE7Cgl1bnNpZ25lZCBpbnQgdHZfbHVtYV9maWx0ZXI6MTsKfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKCi8qIFBpY3R1cmUgZW5oYW5jZW1lbnQgbGltaXRzIGJlbG93IGFyZSBkZXBlbmRlbnQgb24gdGhlIGN1cnJlbnQgVFYgZm9ybWF0LAogKiBhbmQgdGh1cyBuZWVkIHRvIGJlIHF1ZXJpZWQgYW5kIHNldCBhZnRlciBpdC4KICovCiNkZWZpbmUgU0RWT19DTURfR0VUX01BWF9GTElDS0VSX0ZJTFRFUgkJCTB4NGQKI2RlZmluZSBTRFZPX0NNRF9HRVRfTUFYX0ZMSUNLRVJfRklMVEVSX0FEQVBUSVZFCTB4N2IKI2RlZmluZSBTRFZPX0NNRF9HRVRfTUFYX0ZMSUNLRVJfRklMVEVSXzJECQkweDUyCiNkZWZpbmUgU0RWT19DTURfR0VUX01BWF9TQVRVUkFUSU9OCQkJMHg1NQojZGVmaW5lIFNEVk9fQ01EX0dFVF9NQVhfSFVFCQkJCTB4NTgKI2RlZmluZSBTRFZPX0NNRF9HRVRfTUFYX0JSSUdIVE5FU1MJCQkweDViCiNkZWZpbmUgU0RWT19DTURfR0VUX01BWF9DT05UUkFTVAkJCTB4NWUKI2RlZmluZSBTRFZPX0NNRF9HRVRfTUFYX09WRVJTQ0FOX0gJCQkweDYxCiNkZWZpbmUgU0RWT19DTURfR0VUX01BWF9PVkVSU0NBTl9WCQkJMHg2NAojZGVmaW5lIFNEVk9fQ01EX0dFVF9NQVhfSFBPUwkJCQkweDY3CiNkZWZpbmUgU0RWT19DTURfR0VUX01BWF9WUE9TCQkJCTB4NmEKI2RlZmluZSBTRFZPX0NNRF9HRVRfTUFYX1NIQVJQTkVTUwkJCTB4NmQKI2RlZmluZSBTRFZPX0NNRF9HRVRfTUFYX1RWX0NIUk9NQV9GSUxURVIJCTB4NzQKI2RlZmluZSBTRFZPX0NNRF9HRVRfTUFYX1RWX0xVTUFfRklMVEVSCQkJMHg3NwpzdHJ1Y3QgaW50ZWxfc2R2b19lbmhhbmNlbWVudF9saW1pdHNfcmVwbHkgewoJdTE2IG1heF92YWx1ZTsKCXUxNiBkZWZhdWx0X3ZhbHVlOwp9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwoKI2RlZmluZSBTRFZPX0NNRF9HRVRfTFZEU19QQU5FTF9JTkZPUk1BVElPTgkJMHg3ZgojZGVmaW5lIFNEVk9fQ01EX1NFVF9MVkRTX1BBTkVMX0lORk9STUFUSU9OCQkweDgwCiMgZGVmaW5lIFNEVk9fTFZEU19DT0xPUl9ERVBUSF8xOAkJCSgwIDw8IDApCiMgZGVmaW5lIFNEVk9fTFZEU19DT0xPUl9ERVBUSF8yNAkJCSgxIDw8IDApCiMgZGVmaW5lIFNEVk9fTFZEU19DT05ORUNUT1JfU1BXRwkJCSgwIDw8IDIpCiMgZGVmaW5lIFNEVk9fTFZEU19DT05ORUNUT1JfT1BFTkxESQkJCSgxIDw8IDIpCiMgZGVmaW5lIFNEVk9fTFZEU19TSU5HTEVfQ0hBTk5FTAkJCSgwIDw8IDQpCiMgZGVmaW5lIFNEVk9fTFZEU19EVUFMX0NIQU5ORUwJCQkJKDEgPDwgNCkKCiNkZWZpbmUgU0RWT19DTURfR0VUX0ZMSUNLRVJfRklMVEVSCQkJMHg0ZQojZGVmaW5lIFNEVk9fQ01EX1NFVF9GTElDS0VSX0ZJTFRFUgkJCTB4NGYKI2RlZmluZSBTRFZPX0NNRF9HRVRfRkxJQ0tFUl9GSUxURVJfQURBUFRJVkUJCTB4NTAKI2RlZmluZSBTRFZPX0NNRF9TRVRfRkxJQ0tFUl9GSUxURVJfQURBUFRJVkUJCTB4NTEKI2RlZmluZSBTRFZPX0NNRF9HRVRfRkxJQ0tFUl9GSUxURVJfMkQJCQkweDUzCiNkZWZpbmUgU0RWT19DTURfU0VUX0ZMSUNLRVJfRklMVEVSXzJECQkJMHg1NAojZGVmaW5lIFNEVk9fQ01EX0dFVF9TQVRVUkFUSU9OCQkJCTB4NTYKI2RlZmluZSBTRFZPX0NNRF9TRVRfU0FUVVJBVElPTgkJCQkweDU3CiNkZWZpbmUgU0RWT19DTURfR0VUX0hVRQkJCQkweDU5CiNkZWZpbmUgU0RWT19DTURfU0VUX0hVRQkJCQkweDVhCiNkZWZpbmUgU0RWT19DTURfR0VUX0JSSUdIVE5FU1MJCQkJMHg1YwojZGVmaW5lIFNEVk9fQ01EX1NFVF9CUklHSFRORVNTCQkJCTB4NWQKI2RlZmluZSBTRFZPX0NNRF9HRVRfQ09OVFJBU1QJCQkJMHg1ZgojZGVmaW5lIFNEVk9fQ01EX1NFVF9DT05UUkFTVAkJCQkweDYwCiNkZWZpbmUgU0RWT19DTURfR0VUX09WRVJTQ0FOX0gJCQkJMHg2MgojZGVmaW5lIFNEVk9fQ01EX1NFVF9PVkVSU0NBTl9ICQkJCTB4NjMKI2RlZmluZSBTRFZPX0NNRF9HRVRfT1ZFUlNDQU5fVgkJCQkweDY1CiNkZWZpbmUgU0RWT19DTURfU0VUX09WRVJTQ0FOX1YJCQkJMHg2NgojZGVmaW5lIFNEVk9fQ01EX0dFVF9IUE9TCQkJCTB4NjgKI2RlZmluZSBTRFZPX0NNRF9TRVRfSFBPUwkJCQkweDY5CiNkZWZpbmUgU0RWT19DTURfR0VUX1ZQT1MJCQkJMHg2YgojZGVmaW5lIFNEVk9fQ01EX1NFVF9WUE9TCQkJCTB4NmMKI2RlZmluZSBTRFZPX0NNRF9HRVRfU0hBUlBORVNTCQkJCTB4NmUKI2RlZmluZSBTRFZPX0NNRF9TRVRfU0hBUlBORVNTCQkJCTB4NmYKI2RlZmluZSBTRFZPX0NNRF9HRVRfVFZfQ0hST01BX0ZJTFRFUgkJCTB4NzUKI2RlZmluZSBTRFZPX0NNRF9TRVRfVFZfQ0hST01BX0ZJTFRFUgkJCTB4NzYKI2RlZmluZSBTRFZPX0NNRF9HRVRfVFZfTFVNQV9GSUxURVIJCQkweDc4CiNkZWZpbmUgU0RWT19DTURfU0VUX1RWX0xVTUFfRklMVEVSCQkJMHg3OQpzdHJ1Y3QgaW50ZWxfc2R2b19lbmhhbmNlbWVudHNfYXJnIHsKCXUxNiB2YWx1ZTsKfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKCiNkZWZpbmUgU0RWT19DTURfR0VUX0RPVF9DUkFXTAkJCQkweDcwCiNkZWZpbmUgU0RWT19DTURfU0VUX0RPVF9DUkFXTAkJCQkweDcxCiMgZGVmaW5lIFNEVk9fRE9UX0NSQVdMX09OCQkJCQkoMSA8PCAwKQojIGRlZmluZSBTRFZPX0RPVF9DUkFXTF9ERUZBVUxUX09OCQkJCSgxIDw8IDEpCgojZGVmaW5lIFNEVk9fQ01EX0dFVF9ESVRIRVIJCQkJMHg3MgojZGVmaW5lIFNEVk9fQ01EX1NFVF9ESVRIRVIJCQkJMHg3MwojIGRlZmluZSBTRFZPX0RJVEhFUl9PTgkJCQkJCSgxIDw8IDApCiMgZGVmaW5lIFNEVk9fRElUSEVSX0RFRkFVTFRfT04JCQkJCSgxIDw8IDEpCgojZGVmaW5lIFNEVk9fQ01EX1NFVF9DT05UUk9MX0JVU19TV0lUQ0gJCQkweDdhCiMgZGVmaW5lIFNEVk9fQ09OVFJPTF9CVVNfUFJPTQkJCQkoMSA8PCAwKQojIGRlZmluZSBTRFZPX0NPTlRST0xfQlVTX0REQzEJCQkJKDEgPDwgMSkKIyBkZWZpbmUgU0RWT19DT05UUk9MX0JVU19EREMyCQkJCSgxIDw8IDIpCiMgZGVmaW5lIFNEVk9fQ09OVFJPTF9CVVNfRERDMwkJCQkoMSA8PCAzKQoKLyogSERNSSBvcCBjb2RlcyAqLwojZGVmaW5lIFNEVk9fQ01EX0dFVF9TVVBQX0VOQ09ERQkweDlkCiNkZWZpbmUgU0RWT19DTURfR0VUX0VOQ09ERQkJMHg5ZQojZGVmaW5lIFNEVk9fQ01EX1NFVF9FTkNPREUJCTB4OWYKICAjZGVmaW5lIFNEVk9fRU5DT0RFX0RWSQkweDAKICAjZGVmaW5lIFNEVk9fRU5DT0RFX0hETUkJMHgxCiNkZWZpbmUgU0RWT19DTURfU0VUX1BJWEVMX1JFUExJCTB4OGIKI2RlZmluZSBTRFZPX0NNRF9HRVRfUElYRUxfUkVQTEkJMHg4YwojZGVmaW5lIFNEVk9fQ01EX0dFVF9DT0xPUklNRVRSWV9DQVAJMHg4ZAojZGVmaW5lIFNEVk9fQ01EX1NFVF9DT0xPUklNRVRSWQkweDhlCiAgI2RlZmluZSBTRFZPX0NPTE9SSU1FVFJZX1JHQjI1NiAgIDB4MAogICNkZWZpbmUgU0RWT19DT0xPUklNRVRSWV9SR0IyMjAgICAweDEKICAjZGVmaW5lIFNEVk9fQ09MT1JJTUVUUllfWUNyQ2I0MjIgMHgzCiAgI2RlZmluZSBTRFZPX0NPTE9SSU1FVFJZX1lDckNiNDQ0IDB4NAojZGVmaW5lIFNEVk9fQ01EX0dFVF9DT0xPUklNRVRSWQkweDhmCiNkZWZpbmUgU0RWT19DTURfR0VUX0FVRElPX0VOQ1JZUFRfUFJFRkVSIDB4OTAKI2RlZmluZSBTRFZPX0NNRF9TRVRfQVVESU9fU1RBVAkJMHg5MQojZGVmaW5lIFNEVk9fQ01EX0dFVF9BVURJT19TVEFUCQkweDkyCiNkZWZpbmUgU0RWT19DTURfU0VUX0hCVUZfSU5ERVgJCTB4OTMKI2RlZmluZSBTRFZPX0NNRF9HRVRfSEJVRl9JTkRFWAkJMHg5NAojZGVmaW5lIFNEVk9fQ01EX0dFVF9IQlVGX0lORk8JCTB4OTUKI2RlZmluZSBTRFZPX0NNRF9TRVRfSEJVRl9BVl9TUExJVAkweDk2CiNkZWZpbmUgU0RWT19DTURfR0VUX0hCVUZfQVZfU1BMSVQJMHg5NwojZGVmaW5lIFNEVk9fQ01EX1NFVF9IQlVGX0RBVEEJCTB4OTgKI2RlZmluZSBTRFZPX0NNRF9HRVRfSEJVRl9EQVRBCQkweDk5CiNkZWZpbmUgU0RWT19DTURfU0VUX0hCVUZfVFhSQVRFCTB4OWEKI2RlZmluZSBTRFZPX0NNRF9HRVRfSEJVRl9UWFJBVEUJMHg5YgogICNkZWZpbmUgU0RWT19IQlVGX1RYX0RJU0FCTEVECSgwIDw8IDYpCiAgI2RlZmluZSBTRFZPX0hCVUZfVFhfT05DRQkoMiA8PCA2KQogICNkZWZpbmUgU0RWT19IQlVGX1RYX1ZTWU5DCSgzIDw8IDYpCiNkZWZpbmUgU0RWT19DTURfR0VUX0FVRElPX1RYX0lORk8JMHg5YwojZGVmaW5lIFNEVk9fTkVFRF9UT19TVEFMTCAgKDEgPDwgNykKCnN0cnVjdCBpbnRlbF9zZHZvX2VuY29kZSB7Cgl1OCBkdmlfcmV2OwoJdTggaGRtaV9yZXY7Cn0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwo=