ZGlmZiAtLWdpdCBhL0luYy9MZWdhY3kvc3RtMzJfaGFsX2xlZ2FjeS5oIGIvSW5jL0xlZ2FjeS9zdG0zMl9oYWxfbGVnYWN5LmgKaW5kZXggODg5ZGI4Zi4uZjA4NWUyZCAxMDA2NDQKLS0tIGEvSW5jL0xlZ2FjeS9zdG0zMl9oYWxfbGVnYWN5LmgKKysrIGIvSW5jL0xlZ2FjeS9zdG0zMl9oYWxfbGVnYWN5LmgKQEAgLTcsNyArNyw3IEBACiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqIEBhdHRlbnRpb24KICAgKgotICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTggU1RNaWNyb2VsZWN0cm9uaWNzLgorICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTkgU1RNaWNyb2VsZWN0cm9uaWNzLgogICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuPC9jZW50ZXI+PC9oMj4KICAgKgogICAqIFRoaXMgc29mdHdhcmUgY29tcG9uZW50IGlzIGxpY2Vuc2VkIGJ5IFNUIHVuZGVyIEJTRCAzLUNsYXVzZSBsaWNlbnNlLApAQCAtMjM2LDYgKzIzNiwxNiBAQAogI2RlZmluZSBEQUNfV0FWRUdFTkVSQVRJT05fTk9JU0UgICAgICAgICAgICAgICAgICAgICAgICBEQUNfV0FWRV9OT0lTRQogI2RlZmluZSBEQUNfV0FWRUdFTkVSQVRJT05fVFJJQU5HTEUgICAgICAgICAgICAgICAgICAgICBEQUNfV0FWRV9UUklBTkdMRQogCisjaWYgZGVmaW5lZChTVE0zMkc0KSB8fCBkZWZpbmVkKFNUTTMySDcpCisjZGVmaW5lIERBQ19DSElQQ09OTkVDVF9ESVNBQkxFICAgICAgIERBQ19DSElQQ09OTkVDVF9FWFRFUk5BTAorI2RlZmluZSBEQUNfQ0hJUENPTk5FQ1RfRU5BQkxFICAgICAgICBEQUNfQ0hJUENPTk5FQ1RfSU5URVJOQUwKKyNlbmRpZgorCisjaWYgZGVmaW5lZChTVE0zMkwxKSB8fCBkZWZpbmVkKFNUTTMyTDQpIHx8IGRlZmluZWQoU1RNMzJHMCkgfHwgZGVmaW5lZChTVE0zMkg3KSB8fCBkZWZpbmVkKFNUTTMyRjQpCisjZGVmaW5lIEhBTF9EQUNfTVNQX0lOSVRfQ0JfSUQgICAgICAgSEFMX0RBQ19NU1BJTklUX0NCX0lECisjZGVmaW5lIEhBTF9EQUNfTVNQX0RFSU5JVF9DQl9JRCAgICAgSEFMX0RBQ19NU1BERUlOSVRfQ0JfSUQKKyNlbmRpZgorCiAvKioKICAgKiBAfQogICAqLwpAQCAtMjk2LDggKzMwNiwxNyBAQAogI2RlZmluZSBIQUxfRE1BTVVYX1JFUVVFU1RfR0VOX0ZBTExJTkcgICAgICAgICAgIEhBTF9ETUFNVVhfUkVRX0dFTl9GQUxMSU5HCiAjZGVmaW5lIEhBTF9ETUFNVVhfUkVRVUVTVF9HRU5fUklTSU5HX0ZBTExJTkcgICAgSEFMX0RNQU1VWF9SRVFfR0VOX1JJU0lOR19GQUxMSU5HCiAKKyNpZiBkZWZpbmVkKFNUTTMyTDRSNXh4KSB8fCBkZWZpbmVkKFNUTTMyTDRSOXh4KSB8fCBkZWZpbmVkKFNUTTMyTDRSOXh4KSB8fCBkZWZpbmVkKFNUTTMyTDRTNXh4KSB8fCBkZWZpbmVkKFNUTTMyTDRTN3h4KSB8fCBkZWZpbmVkKFNUTTMyTDRTOXh4KQorI2RlZmluZSBETUFfUkVRVUVTVF9EQ01JX1BTU0kgICAgICAgICAgICAgICAgICAgIERNQV9SRVFVRVNUX0RDTUkKKyNlbmRpZgorCiAjZW5kaWYgLyogU1RNMzJMNCAqLwogCisjaWYgZGVmaW5lZChTVE0zMkcwKQorI2RlZmluZSBETUFfUkVRVUVTVF9EQUMxX0NIQU5ORUwxCQkJCQkJCQkgRE1BX1JFUVVFU1RfREFDMV9DSDEKKyNkZWZpbmUgRE1BX1JFUVVFU1RfREFDMV9DSEFOTkVMMgkJCQkJCQkJIERNQV9SRVFVRVNUX0RBQzFfQ0gyCisjZW5kaWYKKwogI2lmIGRlZmluZWQoU1RNMzJINykKIAogI2RlZmluZSBETUFfUkVRVUVTVF9EQUMxIERNQV9SRVFVRVNUX0RBQzFfQ0gxCkBAIC0zNTUsNiArMzc0LDkgQEAKICNkZWZpbmUgREZTRE1fRklMVEVSX0VYVF9UUklHX0xQVElNMiAgICAgICAgICAgICAgIERGU0RNX0ZJTFRFUl9FWFRfVFJJR19MUFRJTTJfT1VUCiAjZGVmaW5lIERGU0RNX0ZJTFRFUl9FWFRfVFJJR19MUFRJTTMgICAgICAgICAgICAgICBERlNETV9GSUxURVJfRVhUX1RSSUdfTFBUSU0zX09VVAogCisjZGVmaW5lIERBQ19UUklHR0VSX0xQMV9PVVQgICAgICAgICAgICAgICAgICAgICAgICBEQUNfVFJJR0dFUl9MUFRJTTFfT1VUCisjZGVmaW5lIERBQ19UUklHR0VSX0xQMl9PVVQgICAgICAgICAgICAgICAgICAgICAgICBEQUNfVFJJR0dFUl9MUFRJTTJfT1VUCisKICNlbmRpZiAvKiBTVE0zMkg3ICovCiAKIC8qKgpAQCAtNDUwLDcgKzQ3Miw5IEBACiAjZGVmaW5lIEZMQVNIX0ZMQUdfU05FQ0NFX0JBTksyUlIgRkxBU0hfRkxBR19TTkVDQ0VSUl9CQU5LMgogI2RlZmluZSBGTEFTSF9GTEFHX0RCRUNDRV9CQU5LMlJSIEZMQVNIX0ZMQUdfREJFQ0NFUlJfQkFOSzIKICNkZWZpbmUgRkxBU0hfRkxBR19TVFJCRVJfQkFOSzJSICBGTEFTSF9GTEFHX1NUUkJFUlJfQkFOSzIKLSNlbmRpZgorI2RlZmluZSBGTEFTSF9GTEFHX1dEVyAgICAgICAgICAgIEZMQVNIX0ZMQUdfV0JORQorI2RlZmluZSBPQl9XUlBfU0VDVE9SX0FsbCAgICAgICAgIE9CX1dSUF9TRUNUT1JfQUxMCisjZW5kaWYgLyogU1RNMzJINyAqLwogCiAvKioKICAgKiBAfQpAQCAtNDg2LDYgKzUxMCwxMyBAQAogI2RlZmluZSBIQUxfU1lTQ0ZHX0ZBU1RNT0RFUExVU19JMkMxICAgICAgIEkyQ19GQVNUTU9ERVBMVVNfSTJDMQogI2RlZmluZSBIQUxfU1lTQ0ZHX0ZBU1RNT0RFUExVU19JMkMyICAgICAgIEkyQ19GQVNUTU9ERVBMVVNfSTJDMgogI2RlZmluZSBIQUxfU1lTQ0ZHX0ZBU1RNT0RFUExVU19JMkMzICAgICAgIEkyQ19GQVNUTU9ERVBMVVNfSTJDMworI2lmIGRlZmluZWQoU1RNMzJHNCkKKworI2RlZmluZSBIQUxfU1lTQ0ZHX0VuYWJsZUlPQW5hbG9nU3dpdGNoQm9vc3RlciAgICBIQUxfU1lTQ0ZHX0VuYWJsZUlPU3dpdGNoQm9vc3RlcgorI2RlZmluZSBIQUxfU1lTQ0ZHX0Rpc2FibGVJT0FuYWxvZ1N3aXRjaEJvb3N0ZXIgICBIQUxfU1lTQ0ZHX0Rpc2FibGVJT1N3aXRjaEJvb3N0ZXIKKyNkZWZpbmUgSEFMX1NZU0NGR19FbmFibGVJT0FuYWxvZ1N3aXRjaFZERCAgICAgICAgSEFMX1NZU0NGR19FbmFibGVJT1N3aXRjaFZERAorI2RlZmluZSBIQUxfU1lTQ0ZHX0Rpc2FibGVJT0FuYWxvZ1N3aXRjaFZERCAgICAgICBIQUxfU1lTQ0ZHX0Rpc2FibGVJT1N3aXRjaFZERAorI2VuZGlmIC8qIFNUTTMyRzQgKi8KIC8qKgogICAqIEB9CiAgICovCkBAIC00OTQsNyArNTI1LDcgQEAKIC8qKiBAZGVmZ3JvdXAgTExfRk1DX0FsaWFzZWRfRGVmaW5lcyBMTCBGTUMgQWxpYXNlZCBEZWZpbmVzIG1haW50YWluZWQgZm9yIGNvbXBhdGliaWxpdHkgcHVycG9zZQogICAqIEB7CiAgICovCi0jaWYgZGVmaW5lZChTVE0zMkw0KSB8fCBkZWZpbmVkKFNUTTMyRjcpIHx8IGRlZmluZWQoU1RNMzJINykKKyNpZiBkZWZpbmVkKFNUTTMyTDQpIHx8IGRlZmluZWQoU1RNMzJGNykgfHwgZGVmaW5lZChTVE0zMkg3KSB8fCBkZWZpbmVkKFNUTTMyRzQpCiAjZGVmaW5lIEZNQ19OQU5EX1BDQ19XQUlUX0ZFQVRVUkVfRElTQUJMRSAgICAgICBGTUNfTkFORF9XQUlUX0ZFQVRVUkVfRElTQUJMRQogI2RlZmluZSBGTUNfTkFORF9QQ0NfV0FJVF9GRUFUVVJFX0VOQUJMRSAgICAgICAgRk1DX05BTkRfV0FJVF9GRUFUVVJFX0VOQUJMRQogI2RlZmluZSBGTUNfTkFORF9QQ0NfTUVNX0JVU19XSURUSF84ICAgICAgICAgICAgRk1DX05BTkRfTUVNX0JVU19XSURUSF84CkBAIC01NDcsMTggKzU3OCwyNSBAQAogI2RlZmluZSBHUElPX0FGOV9TRElPMiAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUElPX0FGOV9TRE1NQzIKICNkZWZpbmUgR1BJT19BRjEwX1NESU8yICAgICAgICAgICAgICAgICAgICAgICAgICAgR1BJT19BRjEwX1NETU1DMgogI2RlZmluZSBHUElPX0FGMTFfU0RJTzIgICAgICAgICAgICAgICAgICAgICAgICAgICBHUElPX0FGMTFfU0RNTUMyCi0jZW5kaWYKKworI2lmIGRlZmluZWQgKFNUTTMySDc0M3h4KSB8fCBkZWZpbmVkIChTVE0zMkg3NTN4eCkgIHx8IGRlZmluZWQgKFNUTTMySDc1MHh4KSB8fCBkZWZpbmVkIChTVE0zMkg3NDJ4eCkgfHwgXAorICAgIGRlZmluZWQgKFNUTTMySDc0NXh4KSB8fCBkZWZpbmVkIChTVE0zMkg3NTV4eCkgIHx8IGRlZmluZWQgKFNUTTMySDc0N3h4KSB8fCBkZWZpbmVkIChTVE0zMkg3NTd4eCkKKyNkZWZpbmUgR1BJT19BRjEwX09URzJfSFMgIEdQSU9fQUYxMF9PVEcyX0ZTCisjZGVmaW5lIEdQSU9fQUYxMF9PVEcxX0ZTICBHUElPX0FGMTBfT1RHMV9IUworI2RlZmluZSBHUElPX0FGMTJfT1RHMl9GUyAgR1BJT19BRjEyX09URzFfRlMKKyNlbmRpZiAvKlNUTTMySDc0M3h4IHx8IFNUTTMySDc1M3h4IHx8IFNUTTMySDc1MHh4IHx8IFNUTTMySDc0Mnh4IHx8IFNUTTMySDc0NXh4IHx8IFNUTTMySDc1NXh4IHx8IFNUTTMySDc0N3h4IHx8IFNUTTMySDc1N3h4ICovCisjZW5kaWYgLyogU1RNMzJINyAqLwogCiAjZGVmaW5lIEdQSU9fQUYwX0xQVElNICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQSU9fQUYwX0xQVElNMQogI2RlZmluZSBHUElPX0FGMV9MUFRJTSAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUElPX0FGMV9MUFRJTTEKICNkZWZpbmUgR1BJT19BRjJfTFBUSU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgR1BJT19BRjJfTFBUSU0xCiAKLSNpZiBkZWZpbmVkKFNUTTMyTDApIHx8IGRlZmluZWQoU1RNMzJMNCkgfHwgZGVmaW5lZChTVE0zMkY0KSB8fCBkZWZpbmVkKFNUTTMyRjIpIHx8IGRlZmluZWQoU1RNMzJGNykgfHwgZGVmaW5lZChTVE0zMkg3KQorI2lmIGRlZmluZWQoU1RNMzJMMCkgfHwgZGVmaW5lZChTVE0zMkw0KSB8fCBkZWZpbmVkKFNUTTMyRjQpIHx8IGRlZmluZWQoU1RNMzJGMikgfHwgZGVmaW5lZChTVE0zMkY3KSB8fCBkZWZpbmVkKFNUTTMyRzQpIHx8IGRlZmluZWQoU1RNMzJINykKICNkZWZpbmUgIEdQSU9fU1BFRURfTE9XICAgICAgICAgICAgICAgICAgICAgICAgICAgR1BJT19TUEVFRF9GUkVRX0xPVwogI2RlZmluZSAgR1BJT19TUEVFRF9NRURJVU0gICAgICAgICAgICAgICAgICAgICAgICBHUElPX1NQRUVEX0ZSRVFfTUVESVVNCiAjZGVmaW5lICBHUElPX1NQRUVEX0ZBU1QgICAgICAgICAgICAgICAgICAgICAgICAgIEdQSU9fU1BFRURfRlJFUV9ISUdICiAjZGVmaW5lICBHUElPX1NQRUVEX0hJR0ggICAgICAgICAgICAgICAgICAgICAgICAgIEdQSU9fU1BFRURfRlJFUV9WRVJZX0hJR0gKLSNlbmRpZiAvKiBTVE0zMkwwIHx8IFNUTTMyTDQgfHwgU1RNMzJGNCB8fCBTVE0zMkYyIHx8IFNUTTMyRjcgfHwgU1RNMzJINyovCisjZW5kaWYgLyogU1RNMzJMMCB8fCBTVE0zMkw0IHx8IFNUTTMyRjQgfHwgU1RNMzJGMiB8fCBTVE0zMkY3IHx8IFNUTTMyRzQgfHwgU1RNMzJINyovCiAKICNpZiBkZWZpbmVkKFNUTTMyTDEpCiAgI2RlZmluZSAgR1BJT19TUEVFRF9WRVJZX0xPVyAgICBHUElPX1NQRUVEX0ZSRVFfTE9XCkBAIC01OTksNiArNjM3LDE4NSBAQAogI2RlZmluZSBfX0hBTF9IUlRJTV9HZXRDbG9ja1ByZXNjYWxlciBfX0hBTF9IUlRJTV9HRVRDTE9DS1BSRVNDQUxFUgogI2RlZmluZSBfX0hBTF9IUlRJTV9TZXRDb21wYXJlICAgICAgICBfX0hBTF9IUlRJTV9TRVRDT01QQVJFCiAjZGVmaW5lIF9fSEFMX0hSVElNX0dldENvbXBhcmUgICAgICAgIF9fSEFMX0hSVElNX0dFVENPTVBBUkUKKworI2lmIGRlZmluZWQoU1RNMzJHNCkKKyNkZWZpbmUgSEFMX0hSVElNX0V4dGVybmFsRXZlbnRDb3VudGVyQ29uZmlnICAgIEhBTF9IUlRJTV9FeHRFdmVudENvdW50ZXJDb25maWcKKyNkZWZpbmUgSEFMX0hSVElNX0V4dGVybmFsRXZlbnRDb3VudGVyRW5hYmxlICAgIEhBTF9IUlRJTV9FeHRFdmVudENvdW50ZXJFbmFibGUKKyNkZWZpbmUgSEFMX0hSVElNX0V4dGVybmFsRXZlbnRDb3VudGVyRGlzYWJsZSAgIEhBTF9IUlRJTV9FeHRFdmVudENvdW50ZXJEaXNhYmxlCisjZGVmaW5lIEhBTF9IUlRJTV9FeHRlcm5hbEV2ZW50Q291bnRlclJlc2V0ICAgICBIQUxfSFJUSU1fRXh0RXZlbnRDb3VudGVyUmVzZXQKKyNlbmRpZiAvKiBTVE0zMkc0ICovCisKKyNpZiBkZWZpbmVkKFNUTTMySDcpCisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1BRVYxX1RJTUJDTVAxIEhSVElNX09VVFBVVFNFVF9USU1FVl8xCisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1BRVYyX1RJTUJDTVAyIEhSVElNX09VVFBVVFNFVF9USU1FVl8yCisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1BRVYzX1RJTUNDTVAyIEhSVElNX09VVFBVVFNFVF9USU1FVl8zCisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1BRVY0X1RJTUNDTVAzIEhSVElNX09VVFBVVFNFVF9USU1FVl80CisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1BRVY1X1RJTURDTVAxIEhSVElNX09VVFBVVFNFVF9USU1FVl81CisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1BRVY2X1RJTURDTVAyIEhSVElNX09VVFBVVFNFVF9USU1FVl82CisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1BRVY3X1RJTUVDTVAzIEhSVElNX09VVFBVVFNFVF9USU1FVl83CisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1BRVY4X1RJTUVDTVA0IEhSVElNX09VVFBVVFNFVF9USU1FVl84CisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1BRVY5X1RJTUZDTVA0IEhSVElNX09VVFBVVFNFVF9USU1FVl85CisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1CRVYxX1RJTUFDTVAxIEhSVElNX09VVFBVVFNFVF9USU1FVl8xCisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1CRVYyX1RJTUFDTVAyIEhSVElNX09VVFBVVFNFVF9USU1FVl8yCisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1CRVYzX1RJTUNDTVAzIEhSVElNX09VVFBVVFNFVF9USU1FVl8zCisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1CRVY0X1RJTUNDTVA0IEhSVElNX09VVFBVVFNFVF9USU1FVl80CisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1CRVY1X1RJTURDTVAzIEhSVElNX09VVFBVVFNFVF9USU1FVl81CisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1CRVY2X1RJTURDTVA0IEhSVElNX09VVFBVVFNFVF9USU1FVl82CisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1CRVY3X1RJTUVDTVAxIEhSVElNX09VVFBVVFNFVF9USU1FVl83CisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1CRVY4X1RJTUVDTVAyIEhSVElNX09VVFBVVFNFVF9USU1FVl84CisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1CRVY5X1RJTUZDTVAzIEhSVElNX09VVFBVVFNFVF9USU1FVl85CisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1DRVYxX1RJTUFDTVAxIEhSVElNX09VVFBVVFNFVF9USU1FVl8xCisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1DRVYyX1RJTUFDTVAyIEhSVElNX09VVFBVVFNFVF9USU1FVl8yCisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1DRVYzX1RJTUJDTVAyIEhSVElNX09VVFBVVFNFVF9USU1FVl8zCisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1DRVY0X1RJTUJDTVAzIEhSVElNX09VVFBVVFNFVF9USU1FVl80CisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1DRVY1X1RJTURDTVAyIEhSVElNX09VVFBVVFNFVF9USU1FVl81CisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1DRVY2X1RJTURDTVA0IEhSVElNX09VVFBVVFNFVF9USU1FVl82CisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1DRVY3X1RJTUVDTVAzIEhSVElNX09VVFBVVFNFVF9USU1FVl83CisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1DRVY4X1RJTUVDTVA0IEhSVElNX09VVFBVVFNFVF9USU1FVl84CisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1DRVY5X1RJTUZDTVAyIEhSVElNX09VVFBVVFNFVF9USU1FVl85CisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1ERVYxX1RJTUFDTVAxIEhSVElNX09VVFBVVFNFVF9USU1FVl8xCisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1ERVYyX1RJTUFDTVA0IEhSVElNX09VVFBVVFNFVF9USU1FVl8yCisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1ERVYzX1RJTUJDTVAyIEhSVElNX09VVFBVVFNFVF9USU1FVl8zCisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1ERVY0X1RJTUJDTVA0IEhSVElNX09VVFBVVFNFVF9USU1FVl80CisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1ERVY1X1RJTUNDTVA0IEhSVElNX09VVFBVVFNFVF9USU1FVl81CisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1ERVY2X1RJTUVDTVAxIEhSVElNX09VVFBVVFNFVF9USU1FVl82CisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1ERVY3X1RJTUVDTVA0IEhSVElNX09VVFBVVFNFVF9USU1FVl83CisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1ERVY4X1RJTUZDTVAxIEhSVElNX09VVFBVVFNFVF9USU1FVl84CisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1ERVY5X1RJTUZDTVAzIEhSVElNX09VVFBVVFNFVF9USU1FVl85CisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1FRVYxX1RJTUFDTVA0IEhSVElNX09VVFBVVFNFVF9USU1FVl8xCisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1FRVYyX1RJTUJDTVAzIEhSVElNX09VVFBVVFNFVF9USU1FVl8yCisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1FRVYzX1RJTUJDTVA0IEhSVElNX09VVFBVVFNFVF9USU1FVl8zCisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1FRVY0X1RJTUNDTVAxIEhSVElNX09VVFBVVFNFVF9USU1FVl80CisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1FRVY1X1RJTURDTVAyIEhSVElNX09VVFBVVFNFVF9USU1FVl81CisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1FRVY2X1RJTURDTVAxIEhSVElNX09VVFBVVFNFVF9USU1FVl82CisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1FRVY3X1RJTURDTVAyIEhSVElNX09VVFBVVFNFVF9USU1FVl83CisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1FRVY4X1RJTUZDTVAzIEhSVElNX09VVFBVVFNFVF9USU1FVl84CisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1FRVY5X1RJTUZDTVA0IEhSVElNX09VVFBVVFNFVF9USU1FVl85CisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1GRVYxX1RJTUFDTVAzIEhSVElNX09VVFBVVFNFVF9USU1FVl8xCisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1GRVYyX1RJTUJDTVAxIEhSVElNX09VVFBVVFNFVF9USU1FVl8yCisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1GRVYzX1RJTUJDTVA0IEhSVElNX09VVFBVVFNFVF9USU1FVl8zCisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1GRVY0X1RJTUNDTVAxIEhSVElNX09VVFBVVFNFVF9USU1FVl80CisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1GRVY1X1RJTUNDTVA0IEhSVElNX09VVFBVVFNFVF9USU1FVl81CisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1GRVY2X1RJTURDTVAzIEhSVElNX09VVFBVVFNFVF9USU1FVl82CisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1GRVY3X1RJTURDTVA0IEhSVElNX09VVFBVVFNFVF9USU1FVl83CisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1GRVY4X1RJTUVDTVAyIEhSVElNX09VVFBVVFNFVF9USU1FVl84CisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1GRVY5X1RJTUVDTVAzIEhSVElNX09VVFBVVFNFVF9USU1FVl85CisKKyNkZWZpbmUgSFJUSU1fT1VUUFVUUkVTRVRfVElNQUVWMV9USU1CQ01QMSBIUlRJTV9PVVRQVVRTRVRfVElNRVZfMQorI2RlZmluZSBIUlRJTV9PVVRQVVRSRVNFVF9USU1BRVYyX1RJTUJDTVAyIEhSVElNX09VVFBVVFNFVF9USU1FVl8yCisjZGVmaW5lIEhSVElNX09VVFBVVFJFU0VUX1RJTUFFVjNfVElNQ0NNUDIgSFJUSU1fT1VUUFVUU0VUX1RJTUVWXzMKKyNkZWZpbmUgSFJUSU1fT1VUUFVUUkVTRVRfVElNQUVWNF9USU1DQ01QMyBIUlRJTV9PVVRQVVRTRVRfVElNRVZfNAorI2RlZmluZSBIUlRJTV9PVVRQVVRSRVNFVF9USU1BRVY1X1RJTURDTVAxIEhSVElNX09VVFBVVFNFVF9USU1FVl81CisjZGVmaW5lIEhSVElNX09VVFBVVFJFU0VUX1RJTUFFVjZfVElNRENNUDIgSFJUSU1fT1VUUFVUU0VUX1RJTUVWXzYKKyNkZWZpbmUgSFJUSU1fT1VUUFVUUkVTRVRfVElNQUVWN19USU1FQ01QMyBIUlRJTV9PVVRQVVRTRVRfVElNRVZfNworI2RlZmluZSBIUlRJTV9PVVRQVVRSRVNFVF9USU1BRVY4X1RJTUVDTVA0IEhSVElNX09VVFBVVFNFVF9USU1FVl84CisjZGVmaW5lIEhSVElNX09VVFBVVFJFU0VUX1RJTUFFVjlfVElNRkNNUDQgSFJUSU1fT1VUUFVUU0VUX1RJTUVWXzkKKyNkZWZpbmUgSFJUSU1fT1VUUFVUUkVTRVRfVElNQkVWMV9USU1BQ01QMSBIUlRJTV9PVVRQVVRTRVRfVElNRVZfMQorI2RlZmluZSBIUlRJTV9PVVRQVVRSRVNFVF9USU1CRVYyX1RJTUFDTVAyIEhSVElNX09VVFBVVFNFVF9USU1FVl8yCisjZGVmaW5lIEhSVElNX09VVFBVVFJFU0VUX1RJTUJFVjNfVElNQ0NNUDMgSFJUSU1fT1VUUFVUU0VUX1RJTUVWXzMKKyNkZWZpbmUgSFJUSU1fT1VUUFVUUkVTRVRfVElNQkVWNF9USU1DQ01QNCBIUlRJTV9PVVRQVVRTRVRfVElNRVZfNAorI2RlZmluZSBIUlRJTV9PVVRQVVRSRVNFVF9USU1CRVY1X1RJTURDTVAzIEhSVElNX09VVFBVVFNFVF9USU1FVl81CisjZGVmaW5lIEhSVElNX09VVFBVVFJFU0VUX1RJTUJFVjZfVElNRENNUDQgSFJUSU1fT1VUUFVUU0VUX1RJTUVWXzYKKyNkZWZpbmUgSFJUSU1fT1VUUFVUUkVTRVRfVElNQkVWN19USU1FQ01QMSBIUlRJTV9PVVRQVVRTRVRfVElNRVZfNworI2RlZmluZSBIUlRJTV9PVVRQVVRSRVNFVF9USU1CRVY4X1RJTUVDTVAyIEhSVElNX09VVFBVVFNFVF9USU1FVl84CisjZGVmaW5lIEhSVElNX09VVFBVVFJFU0VUX1RJTUJFVjlfVElNRkNNUDMgSFJUSU1fT1VUUFVUU0VUX1RJTUVWXzkKKyNkZWZpbmUgSFJUSU1fT1VUUFVUUkVTRVRfVElNQ0VWMV9USU1BQ01QMSBIUlRJTV9PVVRQVVRTRVRfVElNRVZfMQorI2RlZmluZSBIUlRJTV9PVVRQVVRSRVNFVF9USU1DRVYyX1RJTUFDTVAyIEhSVElNX09VVFBVVFNFVF9USU1FVl8yCisjZGVmaW5lIEhSVElNX09VVFBVVFJFU0VUX1RJTUNFVjNfVElNQkNNUDIgSFJUSU1fT1VUUFVUU0VUX1RJTUVWXzMKKyNkZWZpbmUgSFJUSU1fT1VUUFVUUkVTRVRfVElNQ0VWNF9USU1CQ01QMyBIUlRJTV9PVVRQVVRTRVRfVElNRVZfNAorI2RlZmluZSBIUlRJTV9PVVRQVVRSRVNFVF9USU1DRVY1X1RJTURDTVAyIEhSVElNX09VVFBVVFNFVF9USU1FVl81CisjZGVmaW5lIEhSVElNX09VVFBVVFJFU0VUX1RJTUNFVjZfVElNRENNUDQgSFJUSU1fT1VUUFVUU0VUX1RJTUVWXzYKKyNkZWZpbmUgSFJUSU1fT1VUUFVUUkVTRVRfVElNQ0VWN19USU1FQ01QMyBIUlRJTV9PVVRQVVRTRVRfVElNRVZfNworI2RlZmluZSBIUlRJTV9PVVRQVVRSRVNFVF9USU1DRVY4X1RJTUVDTVA0IEhSVElNX09VVFBVVFNFVF9USU1FVl84CisjZGVmaW5lIEhSVElNX09VVFBVVFJFU0VUX1RJTUNFVjlfVElNRkNNUDIgSFJUSU1fT1VUUFVUU0VUX1RJTUVWXzkKKyNkZWZpbmUgSFJUSU1fT1VUUFVUUkVTRVRfVElNREVWMV9USU1BQ01QMSBIUlRJTV9PVVRQVVRTRVRfVElNRVZfMQorI2RlZmluZSBIUlRJTV9PVVRQVVRSRVNFVF9USU1ERVYyX1RJTUFDTVA0IEhSVElNX09VVFBVVFNFVF9USU1FVl8yCisjZGVmaW5lIEhSVElNX09VVFBVVFJFU0VUX1RJTURFVjNfVElNQkNNUDIgSFJUSU1fT1VUUFVUU0VUX1RJTUVWXzMKKyNkZWZpbmUgSFJUSU1fT1VUUFVUUkVTRVRfVElNREVWNF9USU1CQ01QNCBIUlRJTV9PVVRQVVRTRVRfVElNRVZfNAorI2RlZmluZSBIUlRJTV9PVVRQVVRSRVNFVF9USU1ERVY1X1RJTUNDTVA0IEhSVElNX09VVFBVVFNFVF9USU1FVl81CisjZGVmaW5lIEhSVElNX09VVFBVVFJFU0VUX1RJTURFVjZfVElNRUNNUDEgSFJUSU1fT1VUUFVUU0VUX1RJTUVWXzYKKyNkZWZpbmUgSFJUSU1fT1VUUFVUUkVTRVRfVElNREVWN19USU1FQ01QNCBIUlRJTV9PVVRQVVRTRVRfVElNRVZfNworI2RlZmluZSBIUlRJTV9PVVRQVVRSRVNFVF9USU1ERVY4X1RJTUZDTVAxIEhSVElNX09VVFBVVFNFVF9USU1FVl84CisjZGVmaW5lIEhSVElNX09VVFBVVFJFU0VUX1RJTURFVjlfVElNRkNNUDMgSFJUSU1fT1VUUFVUU0VUX1RJTUVWXzkKKyNkZWZpbmUgSFJUSU1fT1VUUFVUUkVTRVRfVElNRUVWMV9USU1BQ01QNCBIUlRJTV9PVVRQVVRTRVRfVElNRVZfMQorI2RlZmluZSBIUlRJTV9PVVRQVVRSRVNFVF9USU1FRVYyX1RJTUJDTVAzIEhSVElNX09VVFBVVFNFVF9USU1FVl8yCisjZGVmaW5lIEhSVElNX09VVFBVVFJFU0VUX1RJTUVFVjNfVElNQkNNUDQgSFJUSU1fT1VUUFVUU0VUX1RJTUVWXzMKKyNkZWZpbmUgSFJUSU1fT1VUUFVUUkVTRVRfVElNRUVWNF9USU1DQ01QMSBIUlRJTV9PVVRQVVRTRVRfVElNRVZfNAorI2RlZmluZSBIUlRJTV9PVVRQVVRSRVNFVF9USU1FRVY1X1RJTURDTVAyIEhSVElNX09VVFBVVFNFVF9USU1FVl81CisjZGVmaW5lIEhSVElNX09VVFBVVFJFU0VUX1RJTUVFVjZfVElNRENNUDEgSFJUSU1fT1VUUFVUU0VUX1RJTUVWXzYKKyNkZWZpbmUgSFJUSU1fT1VUUFVUUkVTRVRfVElNRUVWN19USU1EQ01QMiBIUlRJTV9PVVRQVVRTRVRfVElNRVZfNworI2RlZmluZSBIUlRJTV9PVVRQVVRSRVNFVF9USU1FRVY4X1RJTUZDTVAzIEhSVElNX09VVFBVVFNFVF9USU1FVl84CisjZGVmaW5lIEhSVElNX09VVFBVVFJFU0VUX1RJTUVFVjlfVElNRkNNUDQgSFJUSU1fT1VUUFVUU0VUX1RJTUVWXzkKKyNkZWZpbmUgSFJUSU1fT1VUUFVUUkVTRVRfVElNRkVWMV9USU1BQ01QMyBIUlRJTV9PVVRQVVRTRVRfVElNRVZfMQorI2RlZmluZSBIUlRJTV9PVVRQVVRSRVNFVF9USU1GRVYyX1RJTUJDTVAxIEhSVElNX09VVFBVVFNFVF9USU1FVl8yCisjZGVmaW5lIEhSVElNX09VVFBVVFJFU0VUX1RJTUZFVjNfVElNQkNNUDQgSFJUSU1fT1VUUFVUU0VUX1RJTUVWXzMKKyNkZWZpbmUgSFJUSU1fT1VUUFVUUkVTRVRfVElNRkVWNF9USU1DQ01QMSBIUlRJTV9PVVRQVVRTRVRfVElNRVZfNAorI2RlZmluZSBIUlRJTV9PVVRQVVRSRVNFVF9USU1GRVY1X1RJTUNDTVA0IEhSVElNX09VVFBVVFNFVF9USU1FVl81CisjZGVmaW5lIEhSVElNX09VVFBVVFJFU0VUX1RJTUZFVjZfVElNRENNUDMgSFJUSU1fT1VUUFVUU0VUX1RJTUVWXzYKKyNkZWZpbmUgSFJUSU1fT1VUUFVUUkVTRVRfVElNRkVWN19USU1EQ01QNCBIUlRJTV9PVVRQVVRTRVRfVElNRVZfNworI2RlZmluZSBIUlRJTV9PVVRQVVRSRVNFVF9USU1GRVY4X1RJTUVDTVAyIEhSVElNX09VVFBVVFNFVF9USU1FVl84CisjZGVmaW5lIEhSVElNX09VVFBVVFJFU0VUX1RJTUZFVjlfVElNRUNNUDMgSFJUSU1fT1VUUFVUU0VUX1RJTUVWXzkKKyNlbmRpZiAvKiBTVE0zMkg3ICovCisKKyNpZiBkZWZpbmVkKFNUTTMyRjMpCisvKiogQGJyaWVmIENvbnN0YW50cyBkZWZpbmluZyBhdmFpbGFibGUgc291cmNlcyBhc3NvY2lhdGVkIHRvIGV4dGVybmFsIGV2ZW50cy4KKyAgKi8KKyNkZWZpbmUgSFJUSU1fRVZFTlRTUkNfMSAgICAgICAgICAgICAgKDB4MDAwMDAwMDBVKQorI2RlZmluZSBIUlRJTV9FVkVOVFNSQ18yICAgICAgICAgICAgICAoSFJUSU1fRUVDUjFfRUUxU1JDXzApCisjZGVmaW5lIEhSVElNX0VWRU5UU1JDXzMgICAgICAgICAgICAgIChIUlRJTV9FRUNSMV9FRTFTUkNfMSkKKyNkZWZpbmUgSFJUSU1fRVZFTlRTUkNfNCAgICAgICAgICAgICAgKEhSVElNX0VFQ1IxX0VFMVNSQ18xIHwgSFJUSU1fRUVDUjFfRUUxU1JDXzApCisKKy8qKiBAYnJpZWYgQ29uc3RhbnRzIGRlZmluaW5nIHRoZSBldmVudHMgdGhhdCBjYW4gYmUgc2VsZWN0ZWQgdG8gY29uZmlndXJlIHRoZQorICAqICAgICAgICBzZXQvcmVzZXQgY3Jvc3NiYXIgb2YgYSB0aW1lciBvdXRwdXQKKyAgKi8KKyNkZWZpbmUgSFJUSU1fT1VUUFVUU0VUX1RJTUVWXzEgICAgICAgKEhSVElNX1NFVDFSX1RJTUVWTlQxKQorI2RlZmluZSBIUlRJTV9PVVRQVVRTRVRfVElNRVZfMiAgICAgICAoSFJUSU1fU0VUMVJfVElNRVZOVDIpCisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1FVl8zICAgICAgIChIUlRJTV9TRVQxUl9USU1FVk5UMykKKyNkZWZpbmUgSFJUSU1fT1VUUFVUU0VUX1RJTUVWXzQgICAgICAgKEhSVElNX1NFVDFSX1RJTUVWTlQ0KQorI2RlZmluZSBIUlRJTV9PVVRQVVRTRVRfVElNRVZfNSAgICAgICAoSFJUSU1fU0VUMVJfVElNRVZOVDUpCisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1FVl82ICAgICAgIChIUlRJTV9TRVQxUl9USU1FVk5UNikKKyNkZWZpbmUgSFJUSU1fT1VUUFVUU0VUX1RJTUVWXzcgICAgICAgKEhSVElNX1NFVDFSX1RJTUVWTlQ3KQorI2RlZmluZSBIUlRJTV9PVVRQVVRTRVRfVElNRVZfOCAgICAgICAoSFJUSU1fU0VUMVJfVElNRVZOVDgpCisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1FVl85ICAgICAgIChIUlRJTV9TRVQxUl9USU1FVk5UOSkKKworI2RlZmluZSBIUlRJTV9PVVRQVVRSRVNFVF9USU1FVl8xICAgICAoSFJUSU1fUlNUMVJfVElNRVZOVDEpCisjZGVmaW5lIEhSVElNX09VVFBVVFJFU0VUX1RJTUVWXzIgICAgIChIUlRJTV9SU1QxUl9USU1FVk5UMikKKyNkZWZpbmUgSFJUSU1fT1VUUFVUUkVTRVRfVElNRVZfMyAgICAgKEhSVElNX1JTVDFSX1RJTUVWTlQzKQorI2RlZmluZSBIUlRJTV9PVVRQVVRSRVNFVF9USU1FVl80ICAgICAoSFJUSU1fUlNUMVJfVElNRVZOVDQpCisjZGVmaW5lIEhSVElNX09VVFBVVFJFU0VUX1RJTUVWXzUgICAgIChIUlRJTV9SU1QxUl9USU1FVk5UNSkKKyNkZWZpbmUgSFJUSU1fT1VUUFVUUkVTRVRfVElNRVZfNiAgICAgKEhSVElNX1JTVDFSX1RJTUVWTlQ2KQorI2RlZmluZSBIUlRJTV9PVVRQVVRSRVNFVF9USU1FVl83ICAgICAoSFJUSU1fUlNUMVJfVElNRVZOVDcpCisjZGVmaW5lIEhSVElNX09VVFBVVFJFU0VUX1RJTUVWXzggICAgIChIUlRJTV9SU1QxUl9USU1FVk5UOCkKKyNkZWZpbmUgSFJUSU1fT1VUUFVUUkVTRVRfVElNRVZfOSAgICAgKEhSVElNX1JTVDFSX1RJTUVWTlQ5KQorCisvKiogQGJyaWVmIENvbnN0YW50cyBkZWZpbmluZyB0aGUgZXZlbnQgZmlsdGVyaW5nIGFwcGxpZWQgdG8gZXh0ZXJuYWwgZXZlbnRzCisgICogICAgICAgIGJ5IGEgdGltZXIKKyAgKi8KKyNkZWZpbmUgSFJUSU1fVElNRVZFTlRGSUxURVJfTk9ORSAgICAgICAgICAgICAoMHgwMDAwMDAwMFUpCisjZGVmaW5lIEhSVElNX1RJTUVWRU5URklMVEVSX0JMQU5LSU5HQ01QMSAgICAgKEhSVElNX0VFRlIxX0VFMUZMVFJfMCkKKyNkZWZpbmUgSFJUSU1fVElNRVZFTlRGSUxURVJfQkxBTktJTkdDTVAyICAgICAoSFJUSU1fRUVGUjFfRUUxRkxUUl8xKQorI2RlZmluZSBIUlRJTV9USU1FVkVOVEZJTFRFUl9CTEFOS0lOR0NNUDMgICAgIChIUlRJTV9FRUZSMV9FRTFGTFRSXzEgfCBIUlRJTV9FRUZSMV9FRTFGTFRSXzApCisjZGVmaW5lIEhSVElNX1RJTUVWRU5URklMVEVSX0JMQU5LSU5HQ01QNCAgICAgKEhSVElNX0VFRlIxX0VFMUZMVFJfMikKKyNkZWZpbmUgSFJUSU1fVElNRVZFTlRGSUxURVJfQkxBTktJTkdGTFRSMSAgICAoSFJUSU1fRUVGUjFfRUUxRkxUUl8yIHwgSFJUSU1fRUVGUjFfRUUxRkxUUl8wKQorI2RlZmluZSBIUlRJTV9USU1FVkVOVEZJTFRFUl9CTEFOS0lOR0ZMVFIyICAgIChIUlRJTV9FRUZSMV9FRTFGTFRSXzIgfCBIUlRJTV9FRUZSMV9FRTFGTFRSXzEpCisjZGVmaW5lIEhSVElNX1RJTUVWRU5URklMVEVSX0JMQU5LSU5HRkxUUjMgICAgKEhSVElNX0VFRlIxX0VFMUZMVFJfMiB8IEhSVElNX0VFRlIxX0VFMUZMVFJfMSB8IEhSVElNX0VFRlIxX0VFMUZMVFJfMCkKKyNkZWZpbmUgSFJUSU1fVElNRVZFTlRGSUxURVJfQkxBTktJTkdGTFRSNCAgICAoSFJUSU1fRUVGUjFfRUUxRkxUUl8zKQorI2RlZmluZSBIUlRJTV9USU1FVkVOVEZJTFRFUl9CTEFOS0lOR0ZMVFI1ICAgIChIUlRJTV9FRUZSMV9FRTFGTFRSXzMgfCBIUlRJTV9FRUZSMV9FRTFGTFRSXzApCisjZGVmaW5lIEhSVElNX1RJTUVWRU5URklMVEVSX0JMQU5LSU5HRkxUUjYgICAgKEhSVElNX0VFRlIxX0VFMUZMVFJfMyB8IEhSVElNX0VFRlIxX0VFMUZMVFJfMSkKKyNkZWZpbmUgSFJUSU1fVElNRVZFTlRGSUxURVJfQkxBTktJTkdGTFRSNyAgICAoSFJUSU1fRUVGUjFfRUUxRkxUUl8zIHwgSFJUSU1fRUVGUjFfRUUxRkxUUl8xIHwgSFJUSU1fRUVGUjFfRUUxRkxUUl8wKQorI2RlZmluZSBIUlRJTV9USU1FVkVOVEZJTFRFUl9CTEFOS0lOR0ZMVFI4ICAgIChIUlRJTV9FRUZSMV9FRTFGTFRSXzMgfCBIUlRJTV9FRUZSMV9FRTFGTFRSXzIpCisjZGVmaW5lIEhSVElNX1RJTUVWRU5URklMVEVSX1dJTkRPV0lOR0NNUDIgICAgKEhSVElNX0VFRlIxX0VFMUZMVFJfMyB8IEhSVElNX0VFRlIxX0VFMUZMVFJfMiB8IEhSVElNX0VFRlIxX0VFMUZMVFJfMCkKKyNkZWZpbmUgSFJUSU1fVElNRVZFTlRGSUxURVJfV0lORE9XSU5HQ01QMyAgICAoSFJUSU1fRUVGUjFfRUUxRkxUUl8zIHwgSFJUSU1fRUVGUjFfRUUxRkxUUl8yIHwgSFJUSU1fRUVGUjFfRUUxRkxUUl8xKQorI2RlZmluZSBIUlRJTV9USU1FVkVOVEZJTFRFUl9XSU5ET1dJTkdUSU0gICAgIChIUlRJTV9FRUZSMV9FRTFGTFRSXzMgfCBIUlRJTV9FRUZSMV9FRTFGTFRSXzIgfCBIUlRJTV9FRUZSMV9FRTFGTFRSXzEgfCBIUlRJTV9FRUZSMV9FRTFGTFRSXzApCisKKy8qKiBAYnJpZWYgQ29uc3RhbnRzIGRlZmluaW5nIHRoZSBETEwgY2FsaWJyYXRpb24gcGVyaW9kcyAoaW4gbWljcm8gc2Vjb25kcykKKyAgKi8KKyNkZWZpbmUgSFJUSU1fQ0FMSUJSQVRJT05SQVRFXzczMDAgICAgICAgICAgICAgMHgwMDAwMDAwMFUKKyNkZWZpbmUgSFJUSU1fQ0FMSUJSQVRJT05SQVRFXzkxMCAgICAgICAgICAgICAgKEhSVElNX0RMTENSX0NBTFJURV8wKQorI2RlZmluZSBIUlRJTV9DQUxJQlJBVElPTlJBVEVfMTE0ICAgICAgICAgICAgICAoSFJUSU1fRExMQ1JfQ0FMUlRFXzEpCisjZGVmaW5lIEhSVElNX0NBTElCUkFUSU9OUkFURV8xNCAgICAgICAgICAgICAgIChIUlRJTV9ETExDUl9DQUxSVEVfMSB8IEhSVElNX0RMTENSX0NBTFJURV8wKQorCisjZW5kaWYgLyogU1RNMzJGMyAqLwogLyoqCiAgICogQH0KICAgKi8KQEAgLTczOCw2ICs5NTUsMTIgQEAKICNkZWZpbmUgT1BBTVBfUEdBQ09OTkVDVF9WTTAgICAgICAgICAgICAgICAgICBPUEFNUF9QR0FfQ09OTkVDVF9JTlZFUlRJTkdJTlBVVF9JTzAKICNkZWZpbmUgT1BBTVBfUEdBQ09OTkVDVF9WTTEgICAgICAgICAgICAgICAgICBPUEFNUF9QR0FfQ09OTkVDVF9JTlZFUlRJTkdJTlBVVF9JTzEKIAorI2lmIGRlZmluZWQoU1RNMzJMMSkgfHwgZGVmaW5lZChTVE0zMkw0KSB8fCBkZWZpbmVkKFNUTTMySDcpCisjZGVmaW5lIEhBTF9PUEFNUF9NU1BfSU5JVF9DQl9JRCAgICAgICBIQUxfT1BBTVBfTVNQSU5JVF9DQl9JRAorI2RlZmluZSBIQUxfT1BBTVBfTVNQX0RFSU5JVF9DQl9JRCAgICAgSEFMX09QQU1QX01TUERFSU5JVF9DQl9JRAorI2VuZGlmCisKKwogLyoqCiAgICogQH0KICAgKi8KQEAgLTc1Myw3ICs5NzYsNiBAQAogCiAgICNkZWZpbmUgSTJTX0ZMQUdfVFhFICAgICAgICAgICAgIEkyU19GTEFHX1RYUAogICAjZGVmaW5lIEkyU19GTEFHX1JYTkUgICAgICAgICAgICBJMlNfRkxBR19SWFAKLSAgI2RlZmluZSBJMlNfRkxBR19GUkUgICAgICAgICAgICAgSTJTX0ZMQUdfVElGUkUKICNlbmRpZgogCiAjaWYgZGVmaW5lZChTVE0zMkY3KQpAQCAtODI0LDYgKzEwNDYsMTYgQEAKICNkZWZpbmUgUlRDX1RBTVBFUlBJTl9QQTAgIFJUQ19UQU1QRVJQSU5fUE9TMQogI2RlZmluZSBSVENfVEFNUEVSUElOX1BJOCAgUlRDX1RBTVBFUlBJTl9QT1MxCiAKKyNpZiBkZWZpbmVkKFNUTTMySDcpCisjZGVmaW5lIFJUQ19UQU1QQ1JfVEFNUFhFICAgICAgICAgIFJUQ19UQU1QRVJfWAorI2RlZmluZSBSVENfVEFNUENSX1RBTVBYSUUgICAgICAgICBSVENfVEFNUEVSX1hfSU5URVJSVVBUCisKKyNkZWZpbmUgUlRDX1RBTVBFUjFfSU5URVJSVVBUICAgICAgUlRDX0lUX1RBTVAxCisjZGVmaW5lIFJUQ19UQU1QRVIyX0lOVEVSUlVQVCAgICAgIFJUQ19JVF9UQU1QMgorI2RlZmluZSBSVENfVEFNUEVSM19JTlRFUlJVUFQgICAgICBSVENfSVRfVEFNUDMKKyNkZWZpbmUgUlRDX0FMTF9UQU1QRVJfSU5URVJSVVBUICAgUlRDX0lUX1RBTVBBTEwKKyNlbmRpZiAvKiBTVE0zMkg3ICovCisKIC8qKgogICAqIEB9CiAgICovCkBAIC05NzEsNiArMTIwMywyNCBAQAogI2RlZmluZSBJU19USU1fSEFMTF9JTlRFUkZBQ0VfSU5TVEFOQ0UgICBJU19USU1fSEFMTF9TRU5TT1JfSU5URVJGQUNFX0lOU1RBTkNFCiAjZW5kaWYKIAorI2lmIGRlZmluZWQoU1RNMzJINykKKyNkZWZpbmUgVElNX1RJTTFfRVRSX0NPTVAxX09VVCAgICAgICAgVElNX1RJTTFfRVRSX0NPTVAxCisjZGVmaW5lIFRJTV9USU0xX0VUUl9DT01QMl9PVVQgICAgICAgIFRJTV9USU0xX0VUUl9DT01QMgorI2RlZmluZSBUSU1fVElNOF9FVFJfQ09NUDFfT1VUICAgICAgICBUSU1fVElNOF9FVFJfQ09NUDEKKyNkZWZpbmUgVElNX1RJTThfRVRSX0NPTVAyX09VVCAgICAgICAgVElNX1RJTThfRVRSX0NPTVAyCisjZGVmaW5lIFRJTV9USU0yX0VUUl9DT01QMV9PVVQgICAgICAgIFRJTV9USU0yX0VUUl9DT01QMQorI2RlZmluZSBUSU1fVElNMl9FVFJfQ09NUDJfT1VUICAgICAgICBUSU1fVElNMl9FVFJfQ09NUDIKKyNkZWZpbmUgVElNX1RJTTNfRVRSX0NPTVAxX09VVCAgICAgICAgVElNX1RJTTNfRVRSX0NPTVAxCisjZGVmaW5lIFRJTV9USU0xX1RJMV9DT01QMV9PVVQgICAgICAgIFRJTV9USU0xX1RJMV9DT01QMQorI2RlZmluZSBUSU1fVElNOF9USTFfQ09NUDJfT1VUICAgICAgICBUSU1fVElNOF9USTFfQ09NUDIKKyNkZWZpbmUgVElNX1RJTTJfVEk0X0NPTVAxX09VVCAgICAgICAgVElNX1RJTTJfVEk0X0NPTVAxCisjZGVmaW5lIFRJTV9USU0yX1RJNF9DT01QMl9PVVQgICAgICAgIFRJTV9USU0yX1RJNF9DT01QMgorI2RlZmluZSBUSU1fVElNMl9USTRfQ09NUDFDT01QMl9PVVQgICBUSU1fVElNMl9USTRfQ09NUDFfQ09NUDIKKyNkZWZpbmUgVElNX1RJTTNfVEkxX0NPTVAxX09VVCAgICAgICAgVElNX1RJTTNfVEkxX0NPTVAxCisjZGVmaW5lIFRJTV9USU0zX1RJMV9DT01QMl9PVVQgICAgICAgIFRJTV9USU0zX1RJMV9DT01QMgorI2RlZmluZSBUSU1fVElNM19USTFfQ09NUDFDT01QMl9PVVQgICBUSU1fVElNM19USTFfQ09NUDFfQ09NUDIKKyNlbmRpZgorCiAvKioKICAgKiBAfQogICAqLwpAQCAtMTE5OSw2ICsxNDQ5LDMwIEBACiAKICNkZWZpbmUgSEFTSF9ITUFDS2V5VHlwZV9TaG9ydEtleSAgSEFTSF9ITUFDX0tFWVRZUEVfU0hPUlRLRVkKICNkZWZpbmUgSEFTSF9ITUFDS2V5VHlwZV9Mb25nS2V5ICAgSEFTSF9ITUFDX0tFWVRZUEVfTE9OR0tFWQorCisjaWYgZGVmaW5lZChTVE0zMkw0KSB8fCBkZWZpbmVkKFNUTTMyRjQpIHx8IGRlZmluZWQoU1RNMzJGNykgfHwgZGVmaW5lZChTVE0zMkg3KQorCisjZGVmaW5lIEhBTF9IQVNIX01ENV9BY2N1bXVsYXRlICAgICAgICAgICAgICAgIEhBTF9IQVNIX01ENV9BY2NtbHQKKyNkZWZpbmUgSEFMX0hBU0hfTUQ1X0FjY3VtdWxhdGVfRW5kICAgICAgICAgICAgSEFMX0hBU0hfTUQ1X0FjY21sdF9FbmQKKyNkZWZpbmUgSEFMX0hBU0hfTUQ1X0FjY3VtdWxhdGVfSVQgICAgICAgICAgICAgSEFMX0hBU0hfTUQ1X0FjY21sdF9JVAorI2RlZmluZSBIQUxfSEFTSF9NRDVfQWNjdW11bGF0ZV9FbmRfSVQgICAgICAgICBIQUxfSEFTSF9NRDVfQWNjbWx0X0VuZF9JVAorCisjZGVmaW5lIEhBTF9IQVNIX1NIQTFfQWNjdW11bGF0ZSAgICAgICAgICAgICAgIEhBTF9IQVNIX1NIQTFfQWNjbWx0CisjZGVmaW5lIEhBTF9IQVNIX1NIQTFfQWNjdW11bGF0ZV9FbmQgICAgICAgICAgIEhBTF9IQVNIX1NIQTFfQWNjbWx0X0VuZAorI2RlZmluZSBIQUxfSEFTSF9TSEExX0FjY3VtdWxhdGVfSVQgICAgICAgICAgICBIQUxfSEFTSF9TSEExX0FjY21sdF9JVAorI2RlZmluZSBIQUxfSEFTSF9TSEExX0FjY3VtdWxhdGVfRW5kX0lUICAgICAgICBIQUxfSEFTSF9TSEExX0FjY21sdF9FbmRfSVQKKworI2RlZmluZSBIQUxfSEFTSEV4X1NIQTIyNF9BY2N1bXVsYXRlICAgICAgICAgICBIQUxfSEFTSEV4X1NIQTIyNF9BY2NtbHQKKyNkZWZpbmUgSEFMX0hBU0hFeF9TSEEyMjRfQWNjdW11bGF0ZV9FbmQgICAgICAgSEFMX0hBU0hFeF9TSEEyMjRfQWNjbWx0X0VuZAorI2RlZmluZSBIQUxfSEFTSEV4X1NIQTIyNF9BY2N1bXVsYXRlX0lUICAgICAgICBIQUxfSEFTSEV4X1NIQTIyNF9BY2NtbHRfSVQKKyNkZWZpbmUgSEFMX0hBU0hFeF9TSEEyMjRfQWNjdW11bGF0ZV9FbmRfSVQgICAgSEFMX0hBU0hFeF9TSEEyMjRfQWNjbWx0X0VuZF9JVAorCisjZGVmaW5lIEhBTF9IQVNIRXhfU0hBMjU2X0FjY3VtdWxhdGUgICAgICAgICAgIEhBTF9IQVNIRXhfU0hBMjU2X0FjY21sdAorI2RlZmluZSBIQUxfSEFTSEV4X1NIQTI1Nl9BY2N1bXVsYXRlX0VuZCAgICAgICBIQUxfSEFTSEV4X1NIQTI1Nl9BY2NtbHRfRW5kCisjZGVmaW5lIEhBTF9IQVNIRXhfU0hBMjU2X0FjY3VtdWxhdGVfSVQgICAgICAgIEhBTF9IQVNIRXhfU0hBMjU2X0FjY21sdF9JVAorI2RlZmluZSBIQUxfSEFTSEV4X1NIQTI1Nl9BY2N1bXVsYXRlX0VuZF9JVCAgICBIQUxfSEFTSEV4X1NIQTI1Nl9BY2NtbHRfRW5kX0lUCisKKyNlbmRpZiAgLyogU1RNMzJMNCB8fCBTVE0zMkY0IHx8IFNUTTMyRjcgfHwgU1RNMzJINyAqLwogLyoqCiAgICogQH0KICAgKi8KQEAgLTEyMjEsNiArMTQ5NSwxMyBAQAogI2VuZGlmCiAjZGVmaW5lIEhBTF9BRENfRW5hYmxlQnVmZmVyX0NtZChjbWQpICAoKChjbWQpPT1FTkFCTEUpID8gSEFMX0FEQ0V4X0VuYWJsZVZSRUZJTlQoKSA6IEhBTF9BRENFeF9EaXNhYmxlVlJFRklOVCgpKQogI2RlZmluZSBIQUxfQURDX0VuYWJsZUJ1ZmZlclNlbnNvcl9DbWQoY21kKSAoKChjbWQpPT1FTkFCTEUpID8gIEhBTF9BRENFeF9FbmFibGVWUkVGSU5UVGVtcFNlbnNvcigpIDogSEFMX0FEQ0V4X0Rpc2FibGVWUkVGSU5UVGVtcFNlbnNvcigpKQorI2lmIGRlZmluZWQoU1RNMzJIN0EzeHgpIHx8IGRlZmluZWQoU1RNMzJIN0IzeHgpIHx8IGRlZmluZWQoU1RNMzJIN0IweHgpIHx8IGRlZmluZWQoU1RNMzJIN0EzeHhRKSB8fCBkZWZpbmVkKFNUTTMySDdCM3h4USkgfHwgZGVmaW5lZChTVE0zMkg3QjB4eFEpCisjZGVmaW5lIEhBTF9FbmFibGVTUkRvbWFpbkRCR1N0b3BNb2RlICAgICAgSEFMX0VuYWJsZURvbWFpbjNEQkdTdG9wTW9kZQorI2RlZmluZSBIQUxfRGlzYWJsZVNSRG9tYWluREJHU3RvcE1vZGUgICAgIEhBTF9EaXNhYmxlRG9tYWluM0RCR1N0b3BNb2RlCisjZGVmaW5lIEhBTF9FbmFibGVTUkRvbWFpbkRCR1N0YW5kYnlNb2RlICAgSEFMX0VuYWJsZURvbWFpbjNEQkdTdGFuZGJ5TW9kZQorI2RlZmluZSBIQUxfRGlzYWJsZVNSRG9tYWluREJHU3RhbmRieU1vZGUgIEhBTF9EaXNhYmxlRG9tYWluM0RCR1N0YW5kYnlNb2RlCisjZW5kaWYgLyogU1RNMzJIN0EzeHggfHwgU1RNMzJIN0IzeHggfHwgU1RNMzJIN0IweHggfHwgU1RNMzJIN0EzeHhRIHx8IFNUTTMySDdCM3h4USAgfHwgU1RNMzJIN0IweHhRICovCisKIC8qKgogICAqIEB9CiAgICovCkBAIC0xMjUwLDE2ICsxNTMxLDE4IEBACiAKICNkZWZpbmUgSEFMX0kyQ0Zhc3RNb2RlUGx1c0NvbmZpZyhTWVNDRkdfSTJDRmFzdE1vZGVQbHVzLCBjbWQpICgoKGNtZCk9PUVOQUJMRSk/IEhBTF9JMkNFeF9FbmFibGVGYXN0TW9kZVBsdXMoU1lTQ0ZHX0kyQ0Zhc3RNb2RlUGx1cyk6IEhBTF9JMkNFeF9EaXNhYmxlRmFzdE1vZGVQbHVzKFNZU0NGR19JMkNGYXN0TW9kZVBsdXMpKQogCi0jaWYgZGVmaW5lZChTVE0zMkg3KSB8fCBkZWZpbmVkKFNUTTMyV0IpIHx8IGRlZmluZWQoU1RNMzJHMCkgfHwgZGVmaW5lZChTVE0zMkY0KSB8fCBkZWZpbmVkKFNUTTMyRjcpCisjaWYgZGVmaW5lZChTVE0zMkg3KSB8fCBkZWZpbmVkKFNUTTMyV0IpIHx8IGRlZmluZWQoU1RNMzJHMCkgfHwgZGVmaW5lZChTVE0zMkYwKSB8fCBkZWZpbmVkKFNUTTMyRjEpIHx8IGRlZmluZWQoU1RNMzJGMikgfHwgZGVmaW5lZChTVE0zMkYzKSB8fCBkZWZpbmVkKFNUTTMyRjQpIHx8IGRlZmluZWQoU1RNMzJGNykgfHwgZGVmaW5lZChTVE0zMkwwKSB8fCBkZWZpbmVkKFNUTTMyTDQpIHx8IGRlZmluZWQoU1RNMzJHNCkKICNkZWZpbmUgSEFMX0kyQ19NYXN0ZXJfU2VxdWVudGlhbF9UcmFuc21pdF9JVCAgSEFMX0kyQ19NYXN0ZXJfU2VxX1RyYW5zbWl0X0lUCiAjZGVmaW5lIEhBTF9JMkNfTWFzdGVyX1NlcXVlbnRpYWxfUmVjZWl2ZV9JVCAgIEhBTF9JMkNfTWFzdGVyX1NlcV9SZWNlaXZlX0lUCiAjZGVmaW5lIEhBTF9JMkNfU2xhdmVfU2VxdWVudGlhbF9UcmFuc21pdF9JVCAgIEhBTF9JMkNfU2xhdmVfU2VxX1RyYW5zbWl0X0lUCiAjZGVmaW5lIEhBTF9JMkNfU2xhdmVfU2VxdWVudGlhbF9SZWNlaXZlX0lUICAgIEhBTF9JMkNfU2xhdmVfU2VxX1JlY2VpdmVfSVQKKyNlbmRpZiAvKiBTVE0zMkg3IHx8IFNUTTMyV0IgIHx8IFNUTTMyRzAgfHwgU1RNMzJGMCB8fCBTVE0zMkYxIHx8IFNUTTMyRjIgfHwgU1RNMzJGMyB8fCBTVE0zMkY0IHx8IFNUTTMyRjcgfHwgU1RNMzJMMCB8fCBTVE0zMkw0IHx8IFNUTTMyRzQgKi8KKyNpZiBkZWZpbmVkKFNUTTMySDcpIHx8IGRlZmluZWQoU1RNMzJXQikgfHwgZGVmaW5lZChTVE0zMkcwKSB8fCBkZWZpbmVkKFNUTTMyRjQpIHx8IGRlZmluZWQoU1RNMzJGNykgfHwgZGVmaW5lZChTVE0zMkwwKSB8fCBkZWZpbmVkKFNUTTMyTDQpIHx8IGRlZmluZWQoU1RNMzJHNCkKICNkZWZpbmUgSEFMX0kyQ19NYXN0ZXJfU2VxdWVudGlhbF9UcmFuc21pdF9ETUEgSEFMX0kyQ19NYXN0ZXJfU2VxX1RyYW5zbWl0X0RNQQogI2RlZmluZSBIQUxfSTJDX01hc3Rlcl9TZXF1ZW50aWFsX1JlY2VpdmVfRE1BICBIQUxfSTJDX01hc3Rlcl9TZXFfUmVjZWl2ZV9ETUEKICNkZWZpbmUgSEFMX0kyQ19TbGF2ZV9TZXF1ZW50aWFsX1RyYW5zbWl0X0RNQSAgSEFMX0kyQ19TbGF2ZV9TZXFfVHJhbnNtaXRfRE1BCiAjZGVmaW5lIEhBTF9JMkNfU2xhdmVfU2VxdWVudGlhbF9SZWNlaXZlX0RNQSAgIEhBTF9JMkNfU2xhdmVfU2VxX1JlY2VpdmVfRE1BCi0jZW5kaWYgLyogU1RNMzJINyB8fCBTVE0zMldCICB8fCBTVE0zMkcwIHx8IFNUTTMyRjQgfHwgU1RNMzJGNyAqLworI2VuZGlmIC8qIFNUTTMySDcgfHwgU1RNMzJXQiAgfHwgU1RNMzJHMCB8fCBTVE0zMkY0IHx8IFNUTTMyRjcgfHwgU1RNMzJMMCB8fCBTVE0zMkw0IHx8IFNUTTMyRzQgKi8KIAogI2lmIGRlZmluZWQoU1RNMzJGNCkKICNkZWZpbmUgSEFMX0ZNUEkyQ19NYXN0ZXJfU2VxdWVudGlhbF9UcmFuc21pdF9JVCAgSEFMX0ZNUEkyQ19NYXN0ZXJfU2VxX1RyYW5zbWl0X0lUCkBAIC0xMjc4LDYgKzE1NjEsMTMgQEAKIC8qKiBAZGVmZ3JvdXAgSEFMX1BXUl9BbGlhc2VkIEhBTCBQV1IgQWxpYXNlZCBtYWludGFpbmVkIGZvciBsZWdhY3kgcHVycG9zZQogICAqIEB7CiAgICovCisKKyNpZiBkZWZpbmVkKFNUTTMyRzApCisjZGVmaW5lIEhBTF9QV1JfQ29uZmlnUFZECQkJCQkJCQkJCQkJCQkJSEFMX1BXUkV4X0NvbmZpZ1BWRAorI2RlZmluZSBIQUxfUFdSX0VuYWJsZVBWRAkJCQkJCQkJCQkJCQkJCUhBTF9QV1JFeF9FbmFibGVQVkQKKyNkZWZpbmUgSEFMX1BXUl9EaXNhYmxlUFZECQkJCQkJCQkJCQkJCSAgSEFMX1BXUkV4X0Rpc2FibGVQVkQKKyNkZWZpbmUgSEFMX1BXUl9QVkRfSVJRSGFuZGxlcgkJCQkJCQkJCQkJICBIQUxfUFdSRXhfUFZEX0lSUUhhbmRsZXIKKyNlbmRpZgogI2RlZmluZSBIQUxfUFdSX1BWRENvbmZpZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFMX1BXUl9Db25maWdQVkQKICNkZWZpbmUgSEFMX1BXUl9EaXNhYmxlQmtVcFJlZyAgICAgICAgICAgICAgICAgICAgICAgIEhBTF9QV1JFeF9EaXNhYmxlQmtVcFJlZwogI2RlZmluZSBIQUxfUFdSX0Rpc2FibGVGbGFzaFBvd2VyRG93biAgICAgICAgICAgICAgICAgSEFMX1BXUkV4X0Rpc2FibGVGbGFzaFBvd2VyRG93bgpAQCAtMTM1MCwxNCArMTY0MCwxNCBAQAogI2RlZmluZSBIQUxfVElNX0RNQUVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSU1fRE1BRXJyb3IKICNkZWZpbmUgSEFMX1RJTV9ETUFDYXB0dXJlQ3BsdCAgICAgICAgICAgICAgICAgICAgICAgICAgVElNX0RNQUNhcHR1cmVDcGx0CiAjZGVmaW5lIEhBTF9USU1FeF9ETUFDb21tdXRhdGlvbkNwbHQgICAgICAgICAgICAgICAgICAgIFRJTUV4X0RNQUNvbW11dGF0aW9uQ3BsdAotI2lmIGRlZmluZWQoU1RNMzJINykgfHwgZGVmaW5lZChTVE0zMkcwKSB8fCBkZWZpbmVkKFNUTTMyRjcpIHx8IGRlZmluZWQoU1RNMzJGNCkgfHwgZGVmaW5lZChTVE0zMkwwKQorI2lmIGRlZmluZWQoU1RNMzJINykgfHwgZGVmaW5lZChTVE0zMkcwKSB8fCBkZWZpbmVkKFNUTTMyRjApIHx8IGRlZmluZWQoU1RNMzJGMSkgfHwgZGVmaW5lZChTVE0zMkYyKSB8fCBkZWZpbmVkKFNUTTMyRjMpIHx8IGRlZmluZWQoU1RNMzJGNCkgfHwgZGVmaW5lZChTVE0zMkY3KSB8fCBkZWZpbmVkKFNUTTMyTDApIHx8IGRlZmluZWQoU1RNMzJMNCkKICNkZWZpbmUgSEFMX1RJTV9TbGF2ZUNvbmZpZ1N5bmNocm9uaXphdGlvbiAgICAgICAgICAgICAgSEFMX1RJTV9TbGF2ZUNvbmZpZ1N5bmNocm8KICNkZWZpbmUgSEFMX1RJTV9TbGF2ZUNvbmZpZ1N5bmNocm9uaXphdGlvbl9JVCAgICAgICAgICAgSEFMX1RJTV9TbGF2ZUNvbmZpZ1N5bmNocm9fSVQKICNkZWZpbmUgSEFMX1RJTUV4X0NvbW11dGF0aW9uQ2FsbGJhY2sgICAgICAgICAgICAgICAgICAgSEFMX1RJTUV4X0NvbW11dENhbGxiYWNrCiAjZGVmaW5lIEhBTF9USU1FeF9Db25maWdDb21tdXRhdGlvbkV2ZW50ICAgICAgICAgICAgICAgIEhBTF9USU1FeF9Db25maWdDb21tdXRFdmVudAogI2RlZmluZSBIQUxfVElNRXhfQ29uZmlnQ29tbXV0YXRpb25FdmVudF9JVCAgICAgICAgICAgICBIQUxfVElNRXhfQ29uZmlnQ29tbXV0RXZlbnRfSVQKICNkZWZpbmUgSEFMX1RJTUV4X0NvbmZpZ0NvbW11dGF0aW9uRXZlbnRfRE1BICAgICAgICAgICAgSEFMX1RJTUV4X0NvbmZpZ0NvbW11dEV2ZW50X0RNQQotI2VuZGlmIC8qIFNUTTMySDcgfHwgU1RNMzJHMCB8fCBTVE0zMkY3IHx8IFNUTTMyRjQgIHx8IFNUTTMyTDAgKi8KKyNlbmRpZiAvKiBTVE0zMkg3IHx8IFNUTTMyRzAgfHwgU1RNMzJGMCB8fCBTVE0zMkYxIHx8IFNUTTMyRjIgfHwgU1RNMzJGMyB8fCBTVE0zMkY0IHx8IFNUTTMyRjcgfHwgU1RNMzJMMCAqLwogLyoqCiAgICogQH0KICAgKi8KQEAgLTI0NzYsMTIgKzI3NjYsMjggQEAKICNkZWZpbmUgX19VU0JfT1RHX0ZTX0NMS19ESVNBQkxFIF9fSEFMX1JDQ19VU0JfT1RHX0ZTX0NMS19ESVNBQkxFCiAjZGVmaW5lIF9fVVNCX09UR19GU19DTEtfRU5BQkxFIF9fSEFMX1JDQ19VU0JfT1RHX0ZTX0NMS19FTkFCTEUKICNkZWZpbmUgX19VU0JfUkVMRUFTRV9SRVNFVCBfX0hBTF9SQ0NfVVNCX1JFTEVBU0VfUkVTRVQKKworI2lmIGRlZmluZWQoU1RNMzJINykKKyNkZWZpbmUgX19IQUxfUkNDX1dXREdfQ0xLX0RJU0FCTEUgICBfX0hBTF9SQ0NfV1dERzFfQ0xLX0RJU0FCTEUKKyNkZWZpbmUgX19IQUxfUkNDX1dXREdfQ0xLX0VOQUJMRSAgIF9fSEFMX1JDQ19XV0RHMV9DTEtfRU5BQkxFCisjZGVmaW5lIF9fSEFMX1JDQ19XV0RHX0NMS19TTEVFUF9ESVNBQkxFICBfX0hBTF9SQ0NfV1dERzFfQ0xLX1NMRUVQX0RJU0FCTEUKKyNkZWZpbmUgX19IQUxfUkNDX1dXREdfQ0xLX1NMRUVQX0VOQUJMRSAgX19IQUxfUkNDX1dXREcxX0NMS19TTEVFUF9FTkFCTEUKKworI2RlZmluZSBfX0hBTF9SQ0NfV1dER19GT1JDRV9SRVNFVCAgICAoKHZvaWQpMFUpICAvKiBOb3QgYXZhaWxhYmxlIG9uIHRoZSBTVE0zMkg3Ki8KKyNkZWZpbmUgX19IQUxfUkNDX1dXREdfUkVMRUFTRV9SRVNFVCAoKHZvaWQpMFUpIC8qIE5vdCBhdmFpbGFibGUgb24gdGhlIFNUTTMySDcqLworCisKKyNkZWZpbmUgIF9fSEFMX1JDQ19XV0RHX0lTX0NMS19FTkFCTEVEICAgIF9fSEFMX1JDQ19XV0RHMV9JU19DTEtfRU5BQkxFRAorI2RlZmluZSAgX19IQUxfUkNDX1dXREdfSVNfQ0xLX0RJU0FCTEVEICBfX0hBTF9SQ0NfV1dERzFfSVNfQ0xLX0RJU0FCTEVECisjZW5kaWYKKwogI2RlZmluZSBfX1dXREdfQ0xLX0RJU0FCTEUgX19IQUxfUkNDX1dXREdfQ0xLX0RJU0FCTEUKICNkZWZpbmUgX19XV0RHX0NMS19FTkFCTEUgX19IQUxfUkNDX1dXREdfQ0xLX0VOQUJMRQogI2RlZmluZSBfX1dXREdfQ0xLX1NMRUVQX0RJU0FCTEUgX19IQUxfUkNDX1dXREdfQ0xLX1NMRUVQX0RJU0FCTEUKICNkZWZpbmUgX19XV0RHX0NMS19TTEVFUF9FTkFCTEUgX19IQUxfUkNDX1dXREdfQ0xLX1NMRUVQX0VOQUJMRQogI2RlZmluZSBfX1dXREdfRk9SQ0VfUkVTRVQgX19IQUxfUkNDX1dXREdfRk9SQ0VfUkVTRVQKICNkZWZpbmUgX19XV0RHX1JFTEVBU0VfUkVTRVQgX19IQUxfUkNDX1dXREdfUkVMRUFTRV9SRVNFVAorCiAjZGVmaW5lIF9fVElNMjFfQ0xLX0VOQUJMRSAgIF9fSEFMX1JDQ19USU0yMV9DTEtfRU5BQkxFCiAjZGVmaW5lIF9fVElNMjFfQ0xLX0RJU0FCTEUgICBfX0hBTF9SQ0NfVElNMjFfQ0xLX0RJU0FCTEUKICNkZWZpbmUgX19USU0yMV9GT1JDRV9SRVNFVCAgIF9fSEFMX1JDQ19USU0yMV9GT1JDRV9SRVNFVApAQCAtMjgxNCw2ICszMTIwLDE1IEBACiAjZGVmaW5lIF9fV1dER19JU19DTEtfRU5BQkxFRCAgICAgICBfX0hBTF9SQ0NfV1dER19JU19DTEtfRU5BQkxFRAogI2RlZmluZSBfX1dXREdfSVNfQ0xLX0RJU0FCTEVEICAgICAgX19IQUxfUkNDX1dXREdfSVNfQ0xLX0RJU0FCTEVECiAKKyNpZiBkZWZpbmVkKFNUTTMyTDEpCisjZGVmaW5lIF9fSEFMX1JDQ19DUllQX0NMS19ESVNBQkxFICAgICAgICAgX19IQUxfUkNDX0FFU19DTEtfRElTQUJMRQorI2RlZmluZSBfX0hBTF9SQ0NfQ1JZUF9DTEtfRU5BQkxFICAgICAgICAgIF9fSEFMX1JDQ19BRVNfQ0xLX0VOQUJMRQorI2RlZmluZSBfX0hBTF9SQ0NfQ1JZUF9DTEtfU0xFRVBfRElTQUJMRSAgIF9fSEFMX1JDQ19BRVNfQ0xLX1NMRUVQX0RJU0FCTEUKKyNkZWZpbmUgX19IQUxfUkNDX0NSWVBfQ0xLX1NMRUVQX0VOQUJMRSAgICBfX0hBTF9SQ0NfQUVTX0NMS19TTEVFUF9FTkFCTEUKKyNkZWZpbmUgX19IQUxfUkNDX0NSWVBfRk9SQ0VfUkVTRVQgICAgICAgICBfX0hBTF9SQ0NfQUVTX0ZPUkNFX1JFU0VUCisjZGVmaW5lIF9fSEFMX1JDQ19DUllQX1JFTEVBU0VfUkVTRVQgICAgICAgX19IQUxfUkNDX0FFU19SRUxFQVNFX1JFU0VUCisjZW5kaWYgLyogU1RNMzJMMSAqLworCiAjaWYgZGVmaW5lZChTVE0zMkY0KQogI2RlZmluZSBfX0hBTF9SQ0NfU0RNTUMxX0ZPUkNFX1JFU0VUICAgICAgIF9fSEFMX1JDQ19TRElPX0ZPUkNFX1JFU0VUCiAjZGVmaW5lIF9fSEFMX1JDQ19TRE1NQzFfUkVMRUFTRV9SRVNFVCAgICAgX19IQUxfUkNDX1NESU9fUkVMRUFTRV9SRVNFVApAQCAtMjkzMCw3ICszMjQ1LDcgQEAKIAogI2lmIGRlZmluZWQoU1RNMzJMNCkKICNkZWZpbmUgUkNDX1JUQ0NMS1NPVVJDRV9OT19DTEsgICAgIFJDQ19SVENDTEtTT1VSQ0VfTk9ORQotI2VsaWYgZGVmaW5lZChTVE0zMldCKSB8fCBkZWZpbmVkKFNUTTMyRzApCisjZWxpZiBkZWZpbmVkKFNUTTMyV0IpIHx8IGRlZmluZWQoU1RNMzJHMCkgfHwgZGVmaW5lZChTVE0zMkc0KQogI2Vsc2UKICNkZWZpbmUgUkNDX1JUQ0NMS1NPVVJDRV9OT05FICAgICAgIFJDQ19SVENDTEtTT1VSQ0VfTk9fQ0xLCiAjZW5kaWYKQEAgLTMwNTgsNyArMzM3Myw3IEBACiAvKiogQGRlZmdyb3VwIEhBTF9SVENfQWxpYXNlZF9NYWNyb3MgSEFMIFJUQyBBbGlhc2VkIE1hY3JvcyBtYWludGFpbmVkIGZvciBsZWdhY3kgcHVycG9zZQogICAqIEB7CiAgICovCi0jaWYgZGVmaW5lZCAoU1RNMzJHMCkgfHwgZGVmaW5lZCAoU1RNMzJMNDEyeHgpIHx8IGRlZmluZWQgKFNUTTMyTDQyMnh4KSB8fCBkZWZpbmVkIChTVE0zMkw0UDV4eCkgfHwgZGVmaW5lZCAoU1RNMzJMNFE1eHgpCisjaWYgZGVmaW5lZCAoU1RNMzJHMCkgfHwgZGVmaW5lZCAoU1RNMzJMNDEyeHgpIHx8IGRlZmluZWQgKFNUTTMyTDQyMnh4KSB8fCBkZWZpbmVkIChTVE0zMkc0KQogI2Vsc2UKICNkZWZpbmUgX19IQUxfUlRDX0NMRUFSX0ZMQUcgICAgICAgICAgICAgICAgICAgICAgX19IQUxfUlRDX0VYVElfQ0xFQVJfRkxBRwogI2VuZGlmCkBAIC0zMTc0LDcgKzM0ODksNyBAQAogI2RlZmluZSAgU0RJT19JUlFIYW5kbGVyICAgICAgICAgICAgU0RNTUMxX0lSUUhhbmRsZXIKICNlbmRpZgogCi0jaWYgZGVmaW5lZChTVE0zMkY3KSB8fCBkZWZpbmVkKFNUTTMyRjQpIHx8IGRlZmluZWQoU1RNMzJGMikKKyNpZiBkZWZpbmVkKFNUTTMyRjcpIHx8IGRlZmluZWQoU1RNMzJGNCkgfHwgZGVmaW5lZChTVE0zMkYyKSB8fCBkZWZpbmVkKFNUTTMyTDQpIHx8IGRlZmluZWQoU1RNMzJINykKICNkZWZpbmUgIEhBTF9TRF9DYXJkQ0lEVHlwZWRlZiAgICAgICBIQUxfU0RfQ2FyZENJRFR5cGVEZWYKICNkZWZpbmUgIEhBTF9TRF9DYXJkQ1NEVHlwZWRlZiAgICAgICBIQUxfU0RfQ2FyZENTRFR5cGVEZWYKICNkZWZpbmUgIEhBTF9TRF9DYXJkU3RhdHVzVHlwZWRlZiAgICBIQUxfU0RfQ2FyZFN0YXR1c1R5cGVEZWYKQEAgLTM0MjEsMTMgKzM3MzYsMjMgQEAKIC8qKiBAZGVmZ3JvdXAgSEFMX0hSVElNX0FsaWFzZWRfRnVuY3Rpb25zIEhBTCBIUlRJTSBBbGlhc2VkIEZ1bmN0aW9ucyBtYWludGFpbmVkIGZvciBsZWdhY3kgcHVycG9zZQogICAqIEB7CiAgICovCi0jaWYgZGVmaW5lZCAoU1RNMzJINykgfHwgZGVmaW5lZCAoU1RNMzJGMykKLSNkZWZpbmUgSEFMX0hSVElNX1dhdmVmb3JtQ291bnRlclN0YXJ0X0lUIEhBTF9IUlRJTV9XYXZlZm9ybUNvdW50U3RhcnRfSVQKLSNkZWZpbmUgSEFMX0hSVElNX1dhdmVmb3JtQ291bnRlclN0YXJ0X0RNQSBIQUxfSFJUSU1fV2F2ZWZvcm1Db3VudFN0YXJ0X0RNQQotI2RlZmluZSBIQUxfSFJUSU1fV2F2ZWZvcm1Db3VudGVyU3RhcnQgSEFMX0hSVElNX1dhdmVmb3JtQ291bnRTdGFydAotI2RlZmluZSBIQUxfSFJUSU1fV2F2ZWZvcm1Db3VudGVyU3RvcF9JVCBIQUxfSFJUSU1fV2F2ZWZvcm1Db3VudFN0b3BfSVQKLSNkZWZpbmUgSEFMX0hSVElNX1dhdmVmb3JtQ291bnRlclN0b3BfRE1BIEhBTF9IUlRJTV9XYXZlZm9ybUNvdW50U3RvcF9ETUEKLSNkZWZpbmUgSEFMX0hSVElNX1dhdmVmb3JtQ291bnRlclN0b3AgSEFMX0hSVElNX1dhdmVmb3JtQ291bnRTdG9wCisjaWYgZGVmaW5lZCAoU1RNMzJINykgfHwgZGVmaW5lZCAoU1RNMzJHNCkgfHwgZGVmaW5lZCAoU1RNMzJGMykKKyNkZWZpbmUgSEFMX0hSVElNX1dhdmVmb3JtQ291bnRlclN0YXJ0X0lUICAgICAgSEFMX0hSVElNX1dhdmVmb3JtQ291bnRTdGFydF9JVAorI2RlZmluZSBIQUxfSFJUSU1fV2F2ZWZvcm1Db3VudGVyU3RhcnRfRE1BICAgICBIQUxfSFJUSU1fV2F2ZWZvcm1Db3VudFN0YXJ0X0RNQQorI2RlZmluZSBIQUxfSFJUSU1fV2F2ZWZvcm1Db3VudGVyU3RhcnQgICAgICAgICBIQUxfSFJUSU1fV2F2ZWZvcm1Db3VudFN0YXJ0CisjZGVmaW5lIEhBTF9IUlRJTV9XYXZlZm9ybUNvdW50ZXJTdG9wX0lUICAgICAgIEhBTF9IUlRJTV9XYXZlZm9ybUNvdW50U3RvcF9JVAorI2RlZmluZSBIQUxfSFJUSU1fV2F2ZWZvcm1Db3VudGVyU3RvcF9ETUEgICAgICBIQUxfSFJUSU1fV2F2ZWZvcm1Db3VudFN0b3BfRE1BCisjZGVmaW5lIEhBTF9IUlRJTV9XYXZlZm9ybUNvdW50ZXJTdG9wICAgICAgICAgIEhBTF9IUlRJTV9XYXZlZm9ybUNvdW50U3RvcAorI2VuZGlmCisvKioKKyAgKiBAfQorICAqLworCisvKiogQGRlZmdyb3VwIEhBTF9RU1BJX0FsaWFzZWRfTWFjcm9zIEhBTCBRU1BJIEFsaWFzZWQgTWFjcm9zIG1haW50YWluZWQgZm9yIGxlZ2FjeSBwdXJwb3NlCisgICogQHsKKyAgKi8KKyNpZiBkZWZpbmVkIChTVE0zMkw0KQorI2RlZmluZSBIQUxfUVBTSV9USU1FT1VUX0RFRkFVTFRfVkFMVUUgSEFMX1FTUElfVElNRU9VVF9ERUZBVUxUX1ZBTFVFCiAjZW5kaWYKIC8qKgogICAqIEB9CmRpZmYgLS1naXQgYS9JbmMvTGVnYWN5L3N0bTMyZjR4eF9oYWxfY2FuX2xlZ2FjeS5oIGIvSW5jL0xlZ2FjeS9zdG0zMmY0eHhfaGFsX2Nhbl9sZWdhY3kuaAppbmRleCA3Nzg4ZjA2Li5hYWNmMGYwIDEwMDY0NAotLS0gYS9JbmMvTGVnYWN5L3N0bTMyZjR4eF9oYWxfY2FuX2xlZ2FjeS5oCisrKyBiL0luYy9MZWdhY3kvc3RtMzJmNHh4X2hhbF9jYW5fbGVnYWN5LmgKQEAgLTYsMTMgKzYsMjkgQEAKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICogQGF0dGVudGlvbgogICAqCi0gICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxNyBTVE1pY3JvZWxlY3Ryb25pY3MuCi0gICogQWxsIHJpZ2h0cyByZXNlcnZlZC48L2NlbnRlcj48L2gyPgorICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDT1BZUklHSFQoYykgMjAxNyBTVE1pY3JvZWxlY3Ryb25pY3M8L2NlbnRlcj48L2gyPgogICAqCi0gICogVGhpcyBzb2Z0d2FyZSBjb21wb25lbnQgaXMgbGljZW5zZWQgYnkgU1QgdW5kZXIgQlNEIDMtQ2xhdXNlIGxpY2Vuc2UsCi0gICogdGhlICJMaWNlbnNlIjsgWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZQotICAqIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdDoKLSAgKiAgICAgICAgICAgICAgICAgICAgICAgIG9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZQorICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisgICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICAqICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAqICAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgKiAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgKiAgICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAgKiAgICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICAqICAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBTVE1pY3JvZWxlY3Ryb25pY3Mgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgICogICAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAgKiAgICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICAqCisgICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAgKgogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKi8KZGlmZiAtLWdpdCBhL0luYy9zdG0zMmY0eHhfaGFsLmggYi9JbmMvc3RtMzJmNHh4X2hhbC5oCmluZGV4IDViODAwZGYuLjIwOTg2NGQgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmY0eHhfaGFsLmgKKysrIGIvSW5jL3N0bTMyZjR4eF9oYWwuaApAQCAtMTk3LDYgKzE5NywxOCBAQAogICAqIEB9CiAgICovCiAKKy8qIEV4cG9ydGVkIHZhcmlhYmxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qKiBAYWRkdG9ncm91cCBIQUxfRXhwb3J0ZWRfVmFyaWFibGVzCisgICogQHsKKyAgKi8KK2V4dGVybiBfX0lPIHVpbnQzMl90IHV3VGljazsKK2V4dGVybiB1aW50MzJfdCB1d1RpY2tQcmlvOworZXh0ZXJuIEhBTF9UaWNrRnJlcVR5cGVEZWYgdXdUaWNrRnJlcTsKKy8qKgorICAqIEB9CisgICovCisKIC8qIEV4cG9ydGVkIGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiogQGFkZHRvZ3JvdXAgSEFMX0V4cG9ydGVkX0Z1bmN0aW9ucwogICAqIEB7CmRpZmYgLS1naXQgYS9JbmMvc3RtMzJmNHh4X2hhbF9kY21pLmggYi9JbmMvc3RtMzJmNHh4X2hhbF9kY21pLmgKaW5kZXggMDIxZjM3ZS4uMmE5ZWRiNiAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZjR4eF9oYWxfZGNtaS5oCisrKyBiL0luYy9zdG0zMmY0eHhfaGFsX2RjbWkuaApAQCAtNDksNiArNDksMTYgQEAKICAgKiBAewogICAqLwogLyoqCisgICogQGJyaWVmICAgRENNSSBFbWJlZGRlZCBTeW5jaHJvbmlzYXRpb24gQ09ERSBJbml0IHN0cnVjdHVyZSBkZWZpbml0aW9uCisgICovCit0eXBlZGVmIHN0cnVjdAoreworICB1aW50OF90IEZyYW1lU3RhcnRVbm1hc2s7IC8qITwgU3BlY2lmaWVzIHRoZSBmcmFtZSBzdGFydCBkZWxpbWl0ZXIgdW5tYXNrLiAqLworICB1aW50OF90IExpbmVTdGFydFVubWFzazsgIC8qITwgU3BlY2lmaWVzIHRoZSBsaW5lIHN0YXJ0IGRlbGltaXRlciB1bm1hc2suICAqLworICB1aW50OF90IExpbmVFbmRVbm1hc2s7ICAgIC8qITwgU3BlY2lmaWVzIHRoZSBsaW5lIGVuZCBkZWxpbWl0ZXIgdW5tYXNrLiAgICAqLworICB1aW50OF90IEZyYW1lRW5kVW5tYXNrOyAgIC8qITwgU3BlY2lmaWVzIHRoZSBmcmFtZSBlbmQgZGVsaW1pdGVyIHVubWFzay4gICAqLworfURDTUlfU3luY1VubWFza1R5cGVEZWY7CisvKioKICAgKiBAYnJpZWYgIEhBTCBEQ01JIFN0YXRlIHN0cnVjdHVyZXMgZGVmaW5pdGlvbgogICAqLyAKIHR5cGVkZWYgZW51bQpAQCAtNDU4LDYgKzQ2OCw3IEBACiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfRENNSV9Db25maWdDcm9wKERDTUlfSGFuZGxlVHlwZURlZiAqaGRjbWksIHVpbnQzMl90IFgwLCB1aW50MzJfdCBZMCwgdWludDMyX3QgWFNpemUsIHVpbnQzMl90IFlTaXplKTsKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9EQ01JX0VuYWJsZUNyb3AoRENNSV9IYW5kbGVUeXBlRGVmICpoZGNtaSk7CiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfRENNSV9EaXNhYmxlQ3JvcChEQ01JX0hhbmRsZVR5cGVEZWYgKmhkY21pKTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9EQ01JX0NvbmZpZ1N5bmNVbm1hc2soRENNSV9IYW5kbGVUeXBlRGVmICpoZGNtaSwgRENNSV9TeW5jVW5tYXNrVHlwZURlZiAqU3luY1VubWFzayk7CiAvKioKICAgKiBAfQogICAqLwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZjR4eF9oYWxfZG1hMmQuaCBiL0luYy9zdG0zMmY0eHhfaGFsX2RtYTJkLmgKaW5kZXggNWJiN2I2ZC4uMzdjNzI5OSAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZjR4eF9oYWxfZG1hMmQuaAorKysgYi9JbmMvc3RtMzJmNHh4X2hhbF9kbWEyZC5oCkBAIC0yNSw4ICsyNSw2IEBACiAgZXh0ZXJuICJDIiB7CiAjZW5kaWYKIAotI2lmIGRlZmluZWQgKERNQTJEKQotCiAvKiBJbmNsdWRlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogI2luY2x1ZGUgInN0bTMyZjR4eF9oYWxfZGVmLmgiCiAKQEAgLTM0LDYgKzMyLDggQEAKICAgKiBAewogICAqLwogCisjaWYgZGVmaW5lZCAoRE1BMkQpCisKIC8qKiBAYWRkdG9ncm91cCBETUEyRCBETUEyRAogICAqIEBicmllZiBETUEyRCBIQUwgbW9kdWxlIGRyaXZlcgogICAqIEB7CkBAIC00NDcsNiArNDQ3LDggQEAKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9ETUEyRF9SZXN1bWUoRE1BMkRfSGFuZGxlVHlwZURlZiAqaGRtYTJkKTsKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9ETUEyRF9BYm9ydChETUEyRF9IYW5kbGVUeXBlRGVmICpoZG1hMmQpOwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0RNQTJEX0VuYWJsZUNMVVQoRE1BMkRfSGFuZGxlVHlwZURlZiAqaGRtYTJkLCB1aW50MzJfdCBMYXllcklkeCk7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfRE1BMkRfQ0xVVFN0YXJ0TG9hZChETUEyRF9IYW5kbGVUeXBlRGVmICpoZG1hMmQsIERNQTJEX0NMVVRDZmdUeXBlRGVmICpDTFVUQ2ZnLCB1aW50MzJfdCBMYXllcklkeCk7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfRE1BMkRfQ0xVVFN0YXJ0TG9hZF9JVChETUEyRF9IYW5kbGVUeXBlRGVmICpoZG1hMmQsIERNQTJEX0NMVVRDZmdUeXBlRGVmICpDTFVUQ2ZnLCB1aW50MzJfdCBMYXllcklkeCk7CiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfRE1BMkRfQ0xVVExvYWQoRE1BMkRfSGFuZGxlVHlwZURlZiAqaGRtYTJkLCBETUEyRF9DTFVUQ2ZnVHlwZURlZiBDTFVUQ2ZnLCB1aW50MzJfdCBMYXllcklkeCk7CiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfRE1BMkRfQ0xVVExvYWRfSVQoRE1BMkRfSGFuZGxlVHlwZURlZiAqaGRtYTJkLCBETUEyRF9DTFVUQ2ZnVHlwZURlZiBDTFVUQ2ZnLCB1aW50MzJfdCBMYXllcklkeCk7CiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfRE1BMkRfQ0xVVExvYWRpbmdfQWJvcnQoRE1BMkRfSGFuZGxlVHlwZURlZiAqaGRtYTJkLCB1aW50MzJfdCBMYXllcklkeCk7CkBAIC02MTIsMTIgKzYxNCwxMiBAQAogICAqIEB9CiAgICovCiAKKyNlbmRpZiAvKiBkZWZpbmVkIChETUEyRCkgKi8KKwogLyoqCiAgICogQH0KICAgKi8KIAotI2VuZGlmIC8qIGRlZmluZWQgKERNQTJEKSAqLwotCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZjR4eF9oYWxfZHNpLmggYi9JbmMvc3RtMzJmNHh4X2hhbF9kc2kuaAppbmRleCBkZjYxYzVlLi44MjJhNDMwIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmNHh4X2hhbF9kc2kuaAorKysgYi9JbmMvc3RtMzJmNHh4X2hhbF9kc2kuaApAQCAtMjUsMTAgKzI1LDExIEBACiBleHRlcm4gIkMiIHsKICNlbmRpZgogCi0jaWYgZGVmaW5lZChEU0kpCiAvKiBJbmNsdWRlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogI2luY2x1ZGUgInN0bTMyZjR4eF9oYWxfZGVmLmgiCiAKKyNpZiBkZWZpbmVkKERTSSkKKwogLyoqIEBhZGR0b2dyb3VwIFNUTTMyRjR4eF9IQUxfRHJpdmVyCiAgICogQHsKICAgKi8KQEAgLTM0Nyw2ICszNDgsOSBAQAogI2VuZGlmIC8qIFVTRV9IQUxfRFNJX1JFR0lTVEVSX0NBTExCQUNLUyAqLwogCiAvKiBFeHBvcnRlZCBjb25zdGFudHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoqIEBkZWZncm91cCBEU0lfRXhwb3J0ZWRfQ29uc3RhbnRzIERTSSBFeHBvcnRlZCBDb25zdGFudHMKKyAgKiBAeworICAqLwogLyoqIEBkZWZncm91cCBEU0lfRENTX0NvbW1hbmQgRFNJIERDUyBDb21tYW5kCiAgICogQHsKICAgKi8KQEAgLTkwOCw3ICs5MTIsMTUgQEAKICAgKiBAfQogICAqLwogCisvKioKKyAgKiBAfQorICAqLworCiAvKiBFeHBvcnRlZCBtYWNyb3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoqIEBkZWZncm91cCBEU0lfRXhwb3J0ZWRfTWFjcm9zIERTSSBFeHBvcnRlZCBNYWNyb3MKKyAgKiBAeworICAqLworCiAvKioKICAgKiBAYnJpZWYgUmVzZXQgRFNJIGhhbmRsZSBzdGF0ZS4KICAgKiBAcGFyYW0gIF9fSEFORExFX186IERTSSBoYW5kbGUKQEAgLTExMDEsNiArMTExMywxMCBAQAogICAqLwogI2RlZmluZSBfX0hBTF9EU0lfR0VUX0lUX1NPVVJDRShfX0hBTkRMRV9fLCBfX0lOVEVSUlVQVF9fKSAoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+V0lFUiAmIChfX0lOVEVSUlVQVF9fKSkKIAorLyoqCisgICogQH0KKyAgKi8KKwogLyogRXhwb3J0ZWQgZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qKiBAZGVmZ3JvdXAgRFNJX0V4cG9ydGVkX0Z1bmN0aW9ucyBEU0kgRXhwb3J0ZWQgRnVuY3Rpb25zCiAgICogQHsKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmY0eHhfaGFsX2V4dGkuaCBiL0luYy9zdG0zMmY0eHhfaGFsX2V4dGkuaAppbmRleCAyNGRjY2ZmLi44YmI1MTZjIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmNHh4X2hhbF9leHRpLmgKKysrIGIvSW5jL3N0bTMyZjR4eF9oYWxfZXh0aS5oCkBAIC00NCw5ICs0NCw3IEBACiAgICovCiB0eXBlZGVmIGVudW0KIHsKLSAgSEFMX0VYVElfQ09NTU9OX0NCX0lEICAgICAgICAgID0gMHgwMFUsCi0gIEhBTF9FWFRJX1JJU0lOR19DQl9JRCAgICAgICAgICA9IDB4MDFVLAotICBIQUxfRVhUSV9GQUxMSU5HX0NCX0lEICAgICAgICAgPSAweDAyVSwKKyAgSEFMX0VYVElfQ09NTU9OX0NCX0lEICAgICAgICAgID0gMHgwMFUKIH0gRVhUSV9DYWxsYmFja0lEVHlwZURlZjsKIAogLyoqCkBAIC01NSw4ICs1Myw3IEBACiB0eXBlZGVmIHN0cnVjdAogewogICB1aW50MzJfdCBMaW5lOyAgICAgICAgICAgICAgICAgICAgLyohPCAgRXh0aSBsaW5lIG51bWJlciAqLwotICB2b2lkICgqIFJpc2luZ0NhbGxiYWNrKSh2b2lkKTsgICAgLyohPCAgRXh0aSByaXNpbmcgY2FsbGJhY2sgKi8KLSAgdm9pZCAoKiBGYWxsaW5nQ2FsbGJhY2spKHZvaWQpOyAgIC8qITwgIEV4dGkgZmFsbGluZyBjYWxsYmFjayAqLworICB2b2lkICgqIFBlbmRpbmdDYWxsYmFjaykodm9pZCk7ICAgLyohPCAgRXh0aSBwZW5kaW5nIGNhbGxiYWNrICovCiB9IEVYVElfSGFuZGxlVHlwZURlZjsKIAogLyoqCkBAIC02OSw3ICs2NiwxMCBAQAogICB1aW50MzJfdCBNb2RlOyAgICAgIC8qITwgVGhlIEV4aXQgTW9kZSB0byBiZSBjb25maWd1cmVkIGZvciBhIGNvcmUuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSBjb21iaW5hdGlvbiBvZiBAcmVmIEVYVElfTW9kZSAqLwogICB1aW50MzJfdCBUcmlnZ2VyOyAgIC8qITwgVGhlIEV4dGkgVHJpZ2dlciB0byBiZSBjb25maWd1cmVkLiBUaGlzIHBhcmFtZXRlcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBFWFRJX1RyaWdnZXIgKi8gIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBFWFRJX1RyaWdnZXIgKi8KKyAgdWludDMyX3QgR1BJT1NlbDsgICAvKiE8IFRoZSBFeHRpIEdQSU8gbXVsdGlwbGV4ZXIgc2VsZWN0aW9uIHRvIGJlIGNvbmZpZ3VyZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBpcyBvbmx5IHBvc3NpYmxlIGZvciBsaW5lIDAgdG8gMTUuIEl0CisgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIEVYVElfR1BJT1NlbCAqLwogfSBFWFRJX0NvbmZpZ1R5cGVEZWY7CiAKIC8qKgpAQCAtODQsMjkgKzg0LDQ0IEBACiAvKiogQGRlZmdyb3VwIEVYVElfTGluZSAgRVhUSSBMaW5lCiAgICogQHsKICAgKi8KLSNkZWZpbmUgRVhUSV9MSU5FXzAgICAgICAgICAgICAgICAgICAgICAgICBFWFRJX0lNUl9JTTAgICAgIC8qITwgRXh0ZXJuYWwgaW50ZXJydXB0IGxpbmUgMCAqLwotI2RlZmluZSBFWFRJX0xJTkVfMSAgICAgICAgICAgICAgICAgICAgICAgIEVYVElfSU1SX0lNMSAgICAgLyohPCBFeHRlcm5hbCBpbnRlcnJ1cHQgbGluZSAxICovCi0jZGVmaW5lIEVYVElfTElORV8yICAgICAgICAgICAgICAgICAgICAgICAgRVhUSV9JTVJfSU0yICAgICAvKiE8IEV4dGVybmFsIGludGVycnVwdCBsaW5lIDIgKi8KLSNkZWZpbmUgRVhUSV9MSU5FXzMgICAgICAgICAgICAgICAgICAgICAgICBFWFRJX0lNUl9JTTMgICAgIC8qITwgRXh0ZXJuYWwgaW50ZXJydXB0IGxpbmUgMyAqLwotI2RlZmluZSBFWFRJX0xJTkVfNCAgICAgICAgICAgICAgICAgICAgICAgIEVYVElfSU1SX0lNNCAgICAgLyohPCBFeHRlcm5hbCBpbnRlcnJ1cHQgbGluZSA0ICovCi0jZGVmaW5lIEVYVElfTElORV81ICAgICAgICAgICAgICAgICAgICAgICAgRVhUSV9JTVJfSU01ICAgICAvKiE8IEV4dGVybmFsIGludGVycnVwdCBsaW5lIDUgKi8KLSNkZWZpbmUgRVhUSV9MSU5FXzYgICAgICAgICAgICAgICAgICAgICAgICBFWFRJX0lNUl9JTTYgICAgIC8qITwgRXh0ZXJuYWwgaW50ZXJydXB0IGxpbmUgNiAqLwotI2RlZmluZSBFWFRJX0xJTkVfNyAgICAgICAgICAgICAgICAgICAgICAgIEVYVElfSU1SX0lNNyAgICAgLyohPCBFeHRlcm5hbCBpbnRlcnJ1cHQgbGluZSA3ICovCi0jZGVmaW5lIEVYVElfTElORV84ICAgICAgICAgICAgICAgICAgICAgICAgRVhUSV9JTVJfSU04ICAgICAvKiE8IEV4dGVybmFsIGludGVycnVwdCBsaW5lIDggKi8KLSNkZWZpbmUgRVhUSV9MSU5FXzkgICAgICAgICAgICAgICAgICAgICAgICBFWFRJX0lNUl9JTTkgICAgIC8qITwgRXh0ZXJuYWwgaW50ZXJydXB0IGxpbmUgOSAqLwotI2RlZmluZSBFWFRJX0xJTkVfMTAgICAgICAgICAgICAgICAgICAgICAgIEVYVElfSU1SX0lNMTAgICAgLyohPCBFeHRlcm5hbCBpbnRlcnJ1cHQgbGluZSAxMCAqLwotI2RlZmluZSBFWFRJX0xJTkVfMTEgICAgICAgICAgICAgICAgICAgICAgIEVYVElfSU1SX0lNMTEgICAgLyohPCBFeHRlcm5hbCBpbnRlcnJ1cHQgbGluZSAxMSAqLwotI2RlZmluZSBFWFRJX0xJTkVfMTIgICAgICAgICAgICAgICAgICAgICAgIEVYVElfSU1SX0lNMTIgICAgLyohPCBFeHRlcm5hbCBpbnRlcnJ1cHQgbGluZSAxMiAqLwotI2RlZmluZSBFWFRJX0xJTkVfMTMgICAgICAgICAgICAgICAgICAgICAgIEVYVElfSU1SX0lNMTMgICAgLyohPCBFeHRlcm5hbCBpbnRlcnJ1cHQgbGluZSAxMyAqLwotI2RlZmluZSBFWFRJX0xJTkVfMTQgICAgICAgICAgICAgICAgICAgICAgIEVYVElfSU1SX0lNMTQgICAgLyohPCBFeHRlcm5hbCBpbnRlcnJ1cHQgbGluZSAxNCAqLwotI2RlZmluZSBFWFRJX0xJTkVfMTUgICAgICAgICAgICAgICAgICAgICAgIEVYVElfSU1SX0lNMTUgICAgLyohPCBFeHRlcm5hbCBpbnRlcnJ1cHQgbGluZSAxNSAqLwotI2RlZmluZSBFWFRJX0xJTkVfMTYgICAgICAgICAgICAgICAgICAgICAgIEVYVElfSU1SX0lNMTYgICAgLyohPCBFeHRlcm5hbCBpbnRlcnJ1cHQgbGluZSAxNiBDb25uZWN0ZWQgdG8gdGhlIFBWRCBPdXRwdXQgKi8KLSNkZWZpbmUgRVhUSV9MSU5FXzE3ICAgICAgICAgICAgICAgICAgICAgICBFWFRJX0lNUl9JTTE3ICAgIC8qITwgRXh0ZXJuYWwgaW50ZXJydXB0IGxpbmUgMTcgQ29ubmVjdGVkIHRvIHRoZSBSVEMgQWxhcm0gZXZlbnQgKi8KLSNkZWZpbmUgRVhUSV9MSU5FXzE4ICAgICAgICAgICAgICAgICAgICAgICBFWFRJX0lNUl9JTTE4ICAgIC8qITwgRXh0ZXJuYWwgaW50ZXJydXB0IGxpbmUgMTggQ29ubmVjdGVkIHRvIHRoZSBVU0IgT1RHIEZTIFdha2V1cCBmcm9tIHN1c3BlbmQgZXZlbnQgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSNkZWZpbmUgRVhUSV9MSU5FXzE5ICAgICAgICAgICAgICAgICAgICAgICBFWFRJX0lNUl9JTTE5ICAgIC8qITwgRXh0ZXJuYWwgaW50ZXJydXB0IGxpbmUgMTkgQ29ubmVjdGVkIHRvIHRoZSBFdGhlcm5ldCBXYWtldXAgZXZlbnQgKi8KLSNkZWZpbmUgRVhUSV9MSU5FXzIwICAgICAgICAgICAgICAgICAgICAgICBFWFRJX0lNUl9JTTIwICAgIC8qITwgRXh0ZXJuYWwgaW50ZXJydXB0IGxpbmUgMjAgQ29ubmVjdGVkIHRvIHRoZSBVU0IgT1RHIEhTIChjb25maWd1cmVkIGluIEZTKSBXYWtldXAgZXZlbnQgICovCi0jZGVmaW5lIEVYVElfTElORV8yMSAgICAgICAgICAgICAgICAgICAgICAgRVhUSV9JTVJfSU0yMSAgICAvKiE8IEV4dGVybmFsIGludGVycnVwdCBsaW5lIDIxIENvbm5lY3RlZCB0byB0aGUgUlRDIFRhbXBlciBhbmQgVGltZSBTdGFtcCBldmVudHMgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotI2RlZmluZSBFWFRJX0xJTkVfMjIgICAgICAgICAgICAgICAgICAgICAgIEVYVElfSU1SX0lNMjIgICAgLyohPCBFeHRlcm5hbCBpbnRlcnJ1cHQgbGluZSAyMiBDb25uZWN0ZWQgdG8gdGhlIFJUQyBXYWtldXAgZXZlbnQgKi8KKyNkZWZpbmUgRVhUSV9MSU5FXzAgICAgICAgICAgICAgICAgICAgICAgICAoRVhUSV9HUElPICAgICAgIHwgMHgwMHUpICAgIC8qITwgRXh0ZXJuYWwgaW50ZXJydXB0IGxpbmUgMCAqLworI2RlZmluZSBFWFRJX0xJTkVfMSAgICAgICAgICAgICAgICAgICAgICAgIChFWFRJX0dQSU8gICAgICAgfCAweDAxdSkgICAgLyohPCBFeHRlcm5hbCBpbnRlcnJ1cHQgbGluZSAxICovCisjZGVmaW5lIEVYVElfTElORV8yICAgICAgICAgICAgICAgICAgICAgICAgKEVYVElfR1BJTyAgICAgICB8IDB4MDJ1KSAgICAvKiE8IEV4dGVybmFsIGludGVycnVwdCBsaW5lIDIgKi8KKyNkZWZpbmUgRVhUSV9MSU5FXzMgICAgICAgICAgICAgICAgICAgICAgICAoRVhUSV9HUElPICAgICAgIHwgMHgwM3UpICAgIC8qITwgRXh0ZXJuYWwgaW50ZXJydXB0IGxpbmUgMyAqLworI2RlZmluZSBFWFRJX0xJTkVfNCAgICAgICAgICAgICAgICAgICAgICAgIChFWFRJX0dQSU8gICAgICAgfCAweDA0dSkgICAgLyohPCBFeHRlcm5hbCBpbnRlcnJ1cHQgbGluZSA0ICovCisjZGVmaW5lIEVYVElfTElORV81ICAgICAgICAgICAgICAgICAgICAgICAgKEVYVElfR1BJTyAgICAgICB8IDB4MDV1KSAgICAvKiE8IEV4dGVybmFsIGludGVycnVwdCBsaW5lIDUgKi8KKyNkZWZpbmUgRVhUSV9MSU5FXzYgICAgICAgICAgICAgICAgICAgICAgICAoRVhUSV9HUElPICAgICAgIHwgMHgwNnUpICAgIC8qITwgRXh0ZXJuYWwgaW50ZXJydXB0IGxpbmUgNiAqLworI2RlZmluZSBFWFRJX0xJTkVfNyAgICAgICAgICAgICAgICAgICAgICAgIChFWFRJX0dQSU8gICAgICAgfCAweDA3dSkgICAgLyohPCBFeHRlcm5hbCBpbnRlcnJ1cHQgbGluZSA3ICovCisjZGVmaW5lIEVYVElfTElORV84ICAgICAgICAgICAgICAgICAgICAgICAgKEVYVElfR1BJTyAgICAgICB8IDB4MDh1KSAgICAvKiE8IEV4dGVybmFsIGludGVycnVwdCBsaW5lIDggKi8KKyNkZWZpbmUgRVhUSV9MSU5FXzkgICAgICAgICAgICAgICAgICAgICAgICAoRVhUSV9HUElPICAgICAgIHwgMHgwOXUpICAgIC8qITwgRXh0ZXJuYWwgaW50ZXJydXB0IGxpbmUgOSAqLworI2RlZmluZSBFWFRJX0xJTkVfMTAgICAgICAgICAgICAgICAgICAgICAgIChFWFRJX0dQSU8gICAgICAgfCAweDBBdSkgICAgLyohPCBFeHRlcm5hbCBpbnRlcnJ1cHQgbGluZSAxMCAqLworI2RlZmluZSBFWFRJX0xJTkVfMTEgICAgICAgICAgICAgICAgICAgICAgIChFWFRJX0dQSU8gICAgICAgfCAweDBCdSkgICAgLyohPCBFeHRlcm5hbCBpbnRlcnJ1cHQgbGluZSAxMSAqLworI2RlZmluZSBFWFRJX0xJTkVfMTIgICAgICAgICAgICAgICAgICAgICAgIChFWFRJX0dQSU8gICAgICAgfCAweDBDdSkgICAgLyohPCBFeHRlcm5hbCBpbnRlcnJ1cHQgbGluZSAxMiAqLworI2RlZmluZSBFWFRJX0xJTkVfMTMgICAgICAgICAgICAgICAgICAgICAgIChFWFRJX0dQSU8gICAgICAgfCAweDBEdSkgICAgLyohPCBFeHRlcm5hbCBpbnRlcnJ1cHQgbGluZSAxMyAqLworI2RlZmluZSBFWFRJX0xJTkVfMTQgICAgICAgICAgICAgICAgICAgICAgIChFWFRJX0dQSU8gICAgICAgfCAweDBFdSkgICAgLyohPCBFeHRlcm5hbCBpbnRlcnJ1cHQgbGluZSAxNCAqLworI2RlZmluZSBFWFRJX0xJTkVfMTUgICAgICAgICAgICAgICAgICAgICAgIChFWFRJX0dQSU8gICAgICAgfCAweDBGdSkgICAgLyohPCBFeHRlcm5hbCBpbnRlcnJ1cHQgbGluZSAxNSAqLworI2RlZmluZSBFWFRJX0xJTkVfMTYgICAgICAgICAgICAgICAgICAgICAgIChFWFRJX0NPTkZJRyAgICAgfCAweDEwdSkgICAgLyohPCBFeHRlcm5hbCBpbnRlcnJ1cHQgbGluZSAxNiBDb25uZWN0ZWQgdG8gdGhlIFBWRCBPdXRwdXQgKi8KKyNkZWZpbmUgRVhUSV9MSU5FXzE3ICAgICAgICAgICAgICAgICAgICAgICAoRVhUSV9DT05GSUcgICAgIHwgMHgxMXUpICAgIC8qITwgRXh0ZXJuYWwgaW50ZXJydXB0IGxpbmUgMTcgQ29ubmVjdGVkIHRvIHRoZSBSVEMgQWxhcm0gZXZlbnQgKi8KKyNpZiBkZWZpbmVkKEVYVElfSU1SX0lNMTgpCisjZGVmaW5lIEVYVElfTElORV8xOCAgICAgICAgICAgICAgICAgICAgICAgKEVYVElfQ09ORklHICAgICB8IDB4MTJ1KSAgICAvKiE8IEV4dGVybmFsIGludGVycnVwdCBsaW5lIDE4IENvbm5lY3RlZCB0byB0aGUgVVNCIE9URyBGUyBXYWtldXAgZnJvbSBzdXNwZW5kIGV2ZW50ICovCisjZWxzZQorI2RlZmluZSBFWFRJX0xJTkVfMTggICAgICAgICAgICAgICAgICAgICAgIChFWFRJX1JFU0VSVkVEICAgfCAweDEydSkgICAgLyohPCBObyBpbnRlcnJ1cHQgc3VwcG9ydGVkIGluIHRoaXMgbGluZSAqLworI2VuZGlmIC8qIEVYVElfSU1SX0lNMTggKi8KKyNpZiBkZWZpbmVkKEVYVElfSU1SX0lNMTkpCisjZGVmaW5lIEVYVElfTElORV8xOSAgICAgICAgICAgICAgICAgICAgICAgKEVYVElfQ09ORklHICAgICB8IDB4MTN1KSAgICAvKiE8IEV4dGVybmFsIGludGVycnVwdCBsaW5lIDE5IENvbm5lY3RlZCB0byB0aGUgRXRoZXJuZXQgV2FrZXVwIGV2ZW50ICovCisjZWxzZQorI2RlZmluZSBFWFRJX0xJTkVfMTkgICAgICAgICAgICAgICAgICAgICAgIChFWFRJX1JFU0VSVkVEICAgfCAweDEzdSkgICAgLyohPCBObyBpbnRlcnJ1cHQgc3VwcG9ydGVkIGluIHRoaXMgbGluZSAqLworI2VuZGlmIC8qIEVYVElfSU1SX0lNMTkgKi8KKyNpZiBkZWZpbmVkKEVYVElfSU1SX0lNMjApCisjZGVmaW5lIEVYVElfTElORV8yMCAgICAgICAgICAgICAgICAgICAgICAgKEVYVElfQ09ORklHICAgICB8IDB4MTR1KSAgICAvKiE8IEV4dGVybmFsIGludGVycnVwdCBsaW5lIDIwIENvbm5lY3RlZCB0byB0aGUgVVNCIE9URyBIUyAoY29uZmlndXJlZCBpbiBGUykgV2FrZXVwIGV2ZW50ICAqLworI2Vsc2UKKyNkZWZpbmUgRVhUSV9MSU5FXzIwICAgICAgICAgICAgICAgICAgICAgICAoRVhUSV9SRVNFUlZFRCAgIHwgMHgxNHUpICAgIC8qITwgTm8gaW50ZXJydXB0IHN1cHBvcnRlZCBpbiB0aGlzIGxpbmUgKi8KKyNlbmRpZiAvKiBFWFRJX0lNUl9JTTIwICovCisjZGVmaW5lIEVYVElfTElORV8yMSAgICAgICAgICAgICAgICAgICAgICAgKEVYVElfQ09ORklHICAgICB8IDB4MTV1KSAgICAvKiE8IEV4dGVybmFsIGludGVycnVwdCBsaW5lIDIxIENvbm5lY3RlZCB0byB0aGUgUlRDIFRhbXBlciBhbmQgVGltZSBTdGFtcCBldmVudHMgKi8KKyNkZWZpbmUgRVhUSV9MSU5FXzIyICAgICAgICAgICAgICAgICAgICAgICAoRVhUSV9DT05GSUcgICAgIHwgMHgxNnUpICAgIC8qITwgRXh0ZXJuYWwgaW50ZXJydXB0IGxpbmUgMjIgQ29ubmVjdGVkIHRvIHRoZSBSVEMgV2FrZXVwIGV2ZW50ICovCisjaWYgZGVmaW5lZChFWFRJX0lNUl9JTTIzKQorI2RlZmluZSBFWFRJX0xJTkVfMjMgICAgICAgICAgICAgICAgICAgICAgIChFWFRJX0NPTkZJRyAgICAgfCAweDE3dSkgICAgLyohPCBFeHRlcm5hbCBpbnRlcnJ1cHQgbGluZSAyMyBDb25uZWN0ZWQgdG8gdGhlIExQVElNMSBhc3luY2hyb25vdXMgZXZlbnQgKi8KKyNlbmRpZiAvKiBFWFRJX0lNUl9JTTIzICovCiAKIC8qKgogICAqIEB9CkBAIC0xMTUsOCArMTMwLDkgQEAKIC8qKiBAZGVmZ3JvdXAgRVhUSV9Nb2RlICBFWFRJIE1vZGUKICAgKiBAewogICAqLwotI2RlZmluZSBFWFRJX01PREVfSU5URVJSVVBUICAgICAgICAgICAgICAgICAweDAwMDAwMDAwVQotI2RlZmluZSBFWFRJX01PREVfRVZFTlQgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0VQorI2RlZmluZSBFWFRJX01PREVfTk9ORSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwdQorI2RlZmluZSBFWFRJX01PREVfSU5URVJSVVBUICAgICAgICAgICAgICAgICAweDAwMDAwMDAxdQorI2RlZmluZSBFWFRJX01PREVfRVZFTlQgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAydQogLyoqCiAgICogQH0KICAgKi8KQEAgLTEyNSwxMyArMTQxLDUwIEBACiAgICogQHsKICAgKi8KIAotI2RlZmluZSBFWFRJX1RSSUdHRVJfUklTSU5HICAgICAgICAgICAgICAgICAweDAwMDAwMDA4VQotI2RlZmluZSBFWFRJX1RSSUdHRVJfRkFMTElORyAgICAgICAgICAgICAgICAweDAwMDAwMDBDVQotI2RlZmluZSBFWFRJX1RSSUdHRVJfUklTSU5HX0ZBTExJTkcgICAgICAgICAweDAwMDAwMDEwVQorI2RlZmluZSBFWFRJX1RSSUdHRVJfTk9ORSAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwdQorI2RlZmluZSBFWFRJX1RSSUdHRVJfUklTSU5HICAgICAgICAgICAgICAgICAweDAwMDAwMDAxdQorI2RlZmluZSBFWFRJX1RSSUdHRVJfRkFMTElORyAgICAgICAgICAgICAgICAweDAwMDAwMDAydQorI2RlZmluZSBFWFRJX1RSSUdHRVJfUklTSU5HX0ZBTExJTkcgICAgICAgICAoRVhUSV9UUklHR0VSX1JJU0lORyB8IEVYVElfVFJJR0dFUl9GQUxMSU5HKQogLyoqCiAgICogQH0KICAgKi8KLSAgICAKKworLyoqIEBkZWZncm91cCBFWFRJX0dQSU9TZWwgIEVYVEkgR1BJT1NlbAorICAqIEBicmllZgorICAqIEB7CisgICovCisjZGVmaW5lIEVYVElfR1BJT0EgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDB1CisjZGVmaW5lIEVYVElfR1BJT0IgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDF1CisjZGVmaW5lIEVYVElfR1BJT0MgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDJ1CisjaWYgZGVmaW5lZCAoR1BJT0QpCisjZGVmaW5lIEVYVElfR1BJT0QgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDN1CisjZW5kaWYgLyogR1BJT0QgKi8KKyNpZiBkZWZpbmVkIChHUElPRSkKKyNkZWZpbmUgRVhUSV9HUElPRSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNHUKKyNlbmRpZiAvKiBHUElPRSAqLworI2lmIGRlZmluZWQgKEdQSU9GKQorI2RlZmluZSBFWFRJX0dQSU9GICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA1dQorI2VuZGlmIC8qIEdQSU9GICovCisjaWYgZGVmaW5lZCAoR1BJT0cpCisjZGVmaW5lIEVYVElfR1BJT0cgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDZ1CisjZW5kaWYgLyogR1BJT0cgKi8KKyNpZiBkZWZpbmVkIChHUElPSCkKKyNkZWZpbmUgRVhUSV9HUElPSCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwN3UKKyNlbmRpZiAvKiBHUElPSCAqLworI2lmIGRlZmluZWQgKEdQSU9JKQorI2RlZmluZSBFWFRJX0dQSU9JICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4dQorI2VuZGlmIC8qIEdQSU9JICovCisjaWYgZGVmaW5lZCAoR1BJT0opCisjZGVmaW5lIEVYVElfR1BJT0ogICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDl1CisjZW5kaWYgLyogR1BJT0ogKi8KKyNpZiBkZWZpbmVkIChHUElPSykKKyNkZWZpbmUgRVhUSV9HUElPSyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQXUKKyNlbmRpZiAvKiBHUElPSyAqLworCisvKioKKyAgKiBAfQorICAqLworCiAvKioKICAgKiBAfQogICAqLwpAQCAtMTUwLDYgKzIwMywyMCBAQAogICAqIEB7CiAgICovCiAvKioKKyAgKiBAYnJpZWYgIEVYVEkgTGluZSBwcm9wZXJ0eSBkZWZpbml0aW9uCisgICovCisjZGVmaW5lIEVYVElfUFJPUEVSVFlfU0hJRlQgICAgICAgICAgICAgICAgICAyNHUKKyNkZWZpbmUgRVhUSV9DT05GSUcgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDJ1TCA8PCBFWFRJX1BST1BFUlRZX1NISUZUKQorI2RlZmluZSBFWFRJX0dQSU8gICAgICAgICAgICAgICAgICAgICAgICAgICAoKDB4MDR1TCA8PCBFWFRJX1BST1BFUlRZX1NISUZUKSB8IEVYVElfQ09ORklHKQorI2RlZmluZSBFWFRJX1JFU0VSVkVEICAgICAgICAgICAgICAgICAgICAgICAoMHgwOHVMIDw8IEVYVElfUFJPUEVSVFlfU0hJRlQpCisjZGVmaW5lIEVYVElfUFJPUEVSVFlfTUFTSyAgICAgICAgICAgICAgICAgIChFWFRJX0NPTkZJRyB8IEVYVElfR1BJTykKKworLyoqCisgICogQGJyaWVmICBFWFRJIGJpdCB1c2FnZQorICAqLworI2RlZmluZSBFWFRJX1BJTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFGdQorCisvKioKICAgKiBAYnJpZWYgIEVYVEkgTWFzayBmb3IgaW50ZXJydXB0ICYgZXZlbnQgbW9kZQogICAqLwogI2RlZmluZSBFWFRJX01PREVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAoRVhUSV9NT0RFX0VWRU5UIHwgRVhUSV9NT0RFX0lOVEVSUlVQVCkKQEAgLTE1NywxMiArMjI0LDE2IEBACiAvKioKICAgKiBAYnJpZWYgIEVYVEkgTWFzayBmb3IgdHJpZ2dlciBwb3NzaWJpbGl0aWVzCiAgICovCi0jZGVmaW5lIEVYVElfVFJJR0dFUl9NQVNLICAgICAgICAgICAgICAgICAgIChFWFRJX1RSSUdHRVJfUklTSU5HIHwgRVhUSV9UUklHR0VSX0ZBTExJTkcgfCBFWFRJX1RSSUdHRVJfUklTSU5HX0ZBTExJTkcpCisjZGVmaW5lIEVYVElfVFJJR0dFUl9NQVNLICAgICAgICAgICAgICAgICAgIChFWFRJX1RSSUdHRVJfUklTSU5HIHwgRVhUSV9UUklHR0VSX0ZBTExJTkcpCiAKIC8qKgogICAqIEBicmllZiAgRVhUSSBMaW5lIG51bWJlcgogICAqLworI2lmIGRlZmluZWQoRVhUSV9JTVJfSU0yMykKKyNkZWZpbmUgRVhUSV9MSU5FX05CICAgICAgICAgICAgICAgICAgICAgICAgMjRVTAorI2Vsc2UKICNkZWZpbmUgRVhUSV9MSU5FX05CICAgICAgICAgICAgICAgICAgICAgICAgMjNVTAorI2VuZGlmIC8qIEVYVElfSU1SX0lNMjMgKi8KIAogLyoqCiAgICogQH0KQEAgLTE3MiwzOCArMjQzLDczIEBACiAvKiogQGRlZmdyb3VwIEVYVElfUHJpdmF0ZV9NYWNyb3MgRVhUSSBQcml2YXRlIE1hY3JvcwogICAqIEB7CiAgICovCi0jZGVmaW5lIElTX0VYVElfTElORShfX0xJTkVfXykgICgoKF9fTElORV9fKSA9PSBFWFRJX0xJTkVfMCkgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0xJTkVfXykgPT0gRVhUSV9MSU5FXzEpIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19MSU5FX18pID09IEVYVElfTElORV8yKSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fTElORV9fKSA9PSBFWFRJX0xJTkVfMykgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0xJTkVfXykgPT0gRVhUSV9MSU5FXzQpIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19MSU5FX18pID09IEVYVElfTElORV81KSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fTElORV9fKSA9PSBFWFRJX0xJTkVfNikgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0xJTkVfXykgPT0gRVhUSV9MSU5FXzcpIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19MSU5FX18pID09IEVYVElfTElORV84KSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fTElORV9fKSA9PSBFWFRJX0xJTkVfOSkgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0xJTkVfXykgPT0gRVhUSV9MSU5FXzEwKSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fTElORV9fKSA9PSBFWFRJX0xJTkVfMTEpIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19MSU5FX18pID09IEVYVElfTElORV8xMikgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0xJTkVfXykgPT0gRVhUSV9MSU5FXzEzKSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fTElORV9fKSA9PSBFWFRJX0xJTkVfMTQpIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19MSU5FX18pID09IEVYVElfTElORV8xNSkgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0xJTkVfXykgPT0gRVhUSV9MSU5FXzE2KSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fTElORV9fKSA9PSBFWFRJX0xJTkVfMTcpIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19MSU5FX18pID09IEVYVElfTElORV8xOCkgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0xJTkVfXykgPT0gRVhUSV9MSU5FXzE5KSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fTElORV9fKSA9PSBFWFRJX0xJTkVfMjApIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19MSU5FX18pID09IEVYVElfTElORV8yMSkgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0xJTkVfXykgPT0gRVhUSV9MSU5FXzIyKSkKKyNkZWZpbmUgSVNfRVhUSV9MSU5FKF9fTElORV9fKSAgICAgICAgICAoKCgoX19MSU5FX18pICYgfihFWFRJX1BST1BFUlRZX01BU0sgfCBFWFRJX1BJTl9NQVNLKSkgPT0gMHgwMHUpICYmIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCgoX19MSU5FX18pICYgRVhUSV9QUk9QRVJUWV9NQVNLKSA9PSBFWFRJX0NPTkZJRykgICAgICAgICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoX19MSU5FX18pICYgRVhUSV9QUk9QRVJUWV9NQVNLKSA9PSBFWFRJX0dQSU8pKSAgICAgICAgICAgICAgICYmIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoX19MSU5FX18pICYgRVhUSV9QSU5fTUFTSykgPCBFWFRJX0xJTkVfTkIpKQogCi0jZGVmaW5lIElTX0VYVElfTU9ERShfX0xJTkVfXykgICAgICAgICAgKCgoKF9fTElORV9fKSAmIH5FWFRJX01PREVfTUFTSykgPT0gMHgwMFUpKQorI2RlZmluZSBJU19FWFRJX01PREUoX19MSU5FX18pICAgICAgICAgICgoKChfX0xJTkVfXykgJiBFWFRJX01PREVfTUFTSykgIT0gMHgwMHUpICYmIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoX19MSU5FX18pICYgfkVYVElfTU9ERV9NQVNLKSA9PSAweDAwdSkpCiAKLSNkZWZpbmUgSVNfRVhUSV9UUklHR0VSKF9fTElORV9fKSAgICAgICAoKChfX0xJTkVfXykgJiB+RVhUSV9UUklHR0VSX01BU0spID09IDB4MDBVKQorI2RlZmluZSBJU19FWFRJX1RSSUdHRVIoX19MSU5FX18pICAgICAgICgoKF9fTElORV9fKSAgJiB+RVhUSV9UUklHR0VSX01BU0spID09IDB4MDB1KQogCiAjZGVmaW5lIElTX0VYVElfUEVORElOR19FREdFKF9fTElORV9fKSAgKCgoX19MSU5FX18pID09IEVYVElfVFJJR0dFUl9GQUxMSU5HKSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19MSU5FX18pID09IEVYVElfVFJJR0dFUl9SSVNJTkcpIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0xJTkVfXykgPT0gRVhUSV9UUklHR0VSX1JJU0lORykgIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0xJTkVfXykgPT0gRVhUSV9UUklHR0VSX1JJU0lOR19GQUxMSU5HKSkKIAorI2RlZmluZSBJU19FWFRJX0NPTkZJR19MSU5FKF9fTElORV9fKSAgICgoKF9fTElORV9fKSAmIEVYVElfQ09ORklHKSAhPSAweDAwdSkKKworI2lmICFkZWZpbmVkIChHUElPRCkKKyNkZWZpbmUgSVNfRVhUSV9HUElPX1BPUlQoX19QT1JUX18pICAgICAoKChfX1BPUlRfXykgPT0gRVhUSV9HUElPQSkgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fUE9SVF9fKSA9PSBFWFRJX0dQSU9CKSB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19QT1JUX18pID09IEVYVElfR1BJT0MpIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1BPUlRfXykgPT0gRVhUSV9HUElPSCkpCisjZWxpZiAhZGVmaW5lZCAoR1BJT0UpCisjZGVmaW5lIElTX0VYVElfR1BJT19QT1JUKF9fUE9SVF9fKSAgICAgKCgoX19QT1JUX18pID09IEVYVElfR1BJT0EpIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1BPUlRfXykgPT0gRVhUSV9HUElPQikgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fUE9SVF9fKSA9PSBFWFRJX0dQSU9DKSB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19QT1JUX18pID09IEVYVElfR1BJT0QpIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1BPUlRfXykgPT0gRVhUSV9HUElPSCkpCisjZWxpZiAhZGVmaW5lZCAoR1BJT0YpCisjZGVmaW5lIElTX0VYVElfR1BJT19QT1JUKF9fUE9SVF9fKSAgICAgKCgoX19QT1JUX18pID09IEVYVElfR1BJT0EpIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1BPUlRfXykgPT0gRVhUSV9HUElPQikgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fUE9SVF9fKSA9PSBFWFRJX0dQSU9DKSB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19QT1JUX18pID09IEVYVElfR1BJT0QpIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1BPUlRfXykgPT0gRVhUSV9HUElPRSkgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fUE9SVF9fKSA9PSBFWFRJX0dQSU9IKSkKKyNlbGlmICFkZWZpbmVkIChHUElPSSkKKyNkZWZpbmUgSVNfRVhUSV9HUElPX1BPUlQoX19QT1JUX18pICAgICAoKChfX1BPUlRfXykgPT0gRVhUSV9HUElPQSkgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fUE9SVF9fKSA9PSBFWFRJX0dQSU9CKSB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19QT1JUX18pID09IEVYVElfR1BJT0MpIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1BPUlRfXykgPT0gRVhUSV9HUElPRCkgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fUE9SVF9fKSA9PSBFWFRJX0dQSU9FKSB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19QT1JUX18pID09IEVYVElfR1BJT0YpIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1BPUlRfXykgPT0gRVhUSV9HUElPRykgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fUE9SVF9fKSA9PSBFWFRJX0dQSU9IKSkKKyNlbGlmICFkZWZpbmVkIChHUElPSikKKyNkZWZpbmUgSVNfRVhUSV9HUElPX1BPUlQoX19QT1JUX18pICAgICAoKChfX1BPUlRfXykgPT0gRVhUSV9HUElPQSkgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fUE9SVF9fKSA9PSBFWFRJX0dQSU9CKSB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19QT1JUX18pID09IEVYVElfR1BJT0MpIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1BPUlRfXykgPT0gRVhUSV9HUElPRCkgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fUE9SVF9fKSA9PSBFWFRJX0dQSU9FKSB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19QT1JUX18pID09IEVYVElfR1BJT0YpIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1BPUlRfXykgPT0gRVhUSV9HUElPRykgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fUE9SVF9fKSA9PSBFWFRJX0dQSU9IKSB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19QT1JUX18pID09IEVYVElfR1BJT0kpKQorI2Vsc2UKKyNkZWZpbmUgSVNfRVhUSV9HUElPX1BPUlQoX19QT1JUX18pICAgICAoKChfX1BPUlRfXykgPT0gRVhUSV9HUElPQSkgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fUE9SVF9fKSA9PSBFWFRJX0dQSU9CKSB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19QT1JUX18pID09IEVYVElfR1BJT0MpIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1BPUlRfXykgPT0gRVhUSV9HUElPRCkgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fUE9SVF9fKSA9PSBFWFRJX0dQSU9FKSB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19QT1JUX18pID09IEVYVElfR1BJT0YpIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1BPUlRfXykgPT0gRVhUSV9HUElPRykgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fUE9SVF9fKSA9PSBFWFRJX0dQSU9IKSB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19QT1JUX18pID09IEVYVElfR1BJT0kpIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1BPUlRfXykgPT0gRVhUSV9HUElPSikgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fUE9SVF9fKSA9PSBFWFRJX0dQSU9LKSkKKyNlbmRpZiAvKiBHUElPRCAqLworCiAjZGVmaW5lIElTX0VYVElfR1BJT19QSU4oX19QSU5fXykgICAgICAgKChfX1BJTl9fKSA8IDE2VSkKIC8qKgogICAqIEB9CmRpZmYgLS1naXQgYS9JbmMvc3RtMzJmNHh4X2hhbF9mbXBpMmNfZXguaCBiL0luYy9zdG0zMmY0eHhfaGFsX2ZtcGkyY19leC5oCmluZGV4IDJiZTJjMjguLmY2ZDA0YTYgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmY0eHhfaGFsX2ZtcGkyY19leC5oCisrKyBiL0luYy9zdG0zMmY0eHhfaGFsX2ZtcGkyY19leC5oCkBAIC0xMDcsOCArMTA3LDYgQEAKIAogCiAKLQotCiAvKioKICAgKiBAfQogICAqLwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZjR4eF9oYWxfZ3Bpby5oIGIvSW5jL3N0bTMyZjR4eF9oYWxfZ3Bpby5oCmluZGV4IDUxMTBkNjMuLjVhMTc1MzggMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmY0eHhfaGFsX2dwaW8uaAorKysgYi9JbmMvc3RtMzJmNHh4X2hhbF9ncGlvLmgKQEAgLTI2Miw3ICsyNjIsNyBAQAogICAqIEB7CiAgICovCiAjZGVmaW5lIElTX0dQSU9fUElOX0FDVElPTihBQ1RJT04pICgoKEFDVElPTikgPT0gR1BJT19QSU5fUkVTRVQpIHx8ICgoQUNUSU9OKSA9PSBHUElPX1BJTl9TRVQpKQotI2RlZmluZSBJU19HUElPX1BJTihQSU4pICAgICAgICAgICAoKCgoUElOKSAmIEdQSU9fUElOX01BU0sgKSAhPSAweDAwVSkgJiYgKCgoUElOKSAmIH5HUElPX1BJTl9NQVNLKSA9PSAweDAwVSkpCisjZGVmaW5lIElTX0dQSU9fUElOKFBJTikgICAgICAgICAgICgoKCgodWludDMyX3QpUElOKSAmIEdQSU9fUElOX01BU0sgKSAhPSAweDAwVSkgJiYgKCgoKHVpbnQzMl90KVBJTikgJiB+R1BJT19QSU5fTUFTSykgPT0gMHgwMFUpKQogI2RlZmluZSBJU19HUElPX01PREUoTU9ERSkgKCgoTU9ERSkgPT0gR1BJT19NT0RFX0lOUFVUKSAgICAgICAgICAgICAgfHxcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChNT0RFKSA9PSBHUElPX01PREVfT1VUUFVUX1BQKSAgICAgICAgICB8fFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKE1PREUpID09IEdQSU9fTU9ERV9PVVRQVVRfT0QpICAgICAgICAgIHx8XApkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZjR4eF9oYWxfaGFzaC5oIGIvSW5jL3N0bTMyZjR4eF9oYWxfaGFzaC5oCmluZGV4IGRhNmQ1ZDkuLmVhNmY1OTMgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmY0eHhfaGFsX2hhc2guaAorKysgYi9JbmMvc3RtMzJmNHh4X2hhbF9oYXNoLmgKQEAgLTE1Miw2ICsxNTIsOCBAQAogCiAgIF9fSU8gIHVpbnQzMl90ICAgICAgICAgICAgIEVycm9yQ29kZTsgICAgICAgIC8qITwgSEFTSCBFcnJvciBjb2RlICovCiAKKyAgX19JTyAgdWludDMyX3QgICAgICAgICAgICAgQWNjdW11bGF0aW9uOyAgICAgLyohPCBIQVNIIG11bHRpIGJ1ZmZlcnMgYWNjdW11bGF0aW9uIGZsYWcgKi8KKwogI2lmIChVU0VfSEFMX0hBU0hfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCiAgIHZvaWQgICAgKCogSW5DcGx0Q2FsbGJhY2spKCBzdHJ1Y3QgX19IQVNIX0hhbmRsZVR5cGVEZWYgKiBoaGFzaCk7ICAgIC8qITwgSEFTSCBpbnB1dCBjb21wbGV0aW9uIGNhbGxiYWNrICovCiAKQEAgLTIyNiwxMSArMjI4LDExIEBACiAvKiogQGRlZmdyb3VwIEhBU0hfZmxhZ3NfZGVmaW5pdGlvbiAgSEFTSCBmbGFncyBkZWZpbml0aW9ucwogICAqIEB7CiAgICovCi0jZGVmaW5lIEhBU0hfRkxBR19ESU5JUyAgICAgICAgICAgIEhBU0hfU1JfRElOSVMgIC8qITwgMTYgbG9jYXRpb25zIGFyZSBmcmVlIGluIHRoZSBESU4gOiBhIG5ldyBibG9jayBjYW4gYmUgZW50ZXJlZCBpbiB0aGUgSVAgKi8KLSNkZWZpbmUgSEFTSF9GTEFHX0RDSVMgICAgICAgICAgICAgSEFTSF9TUl9EQ0lTICAgLyohPCBEaWdlc3QgY2FsY3VsYXRpb24gY29tcGxldGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBIQVNIX0ZMQUdfRE1BUyAgICAgICAgICAgICBIQVNIX1NSX0RNQVMgICAvKiE8IERNQSBpbnRlcmZhY2UgaXMgZW5hYmxlZCAoRE1BRT0xKSBvciBhIHRyYW5zZmVyIGlzIG9uZ29pbmcgICAgICAgICAgICAgICovCi0jZGVmaW5lIEhBU0hfRkxBR19CVVNZICAgICAgICAgICAgIEhBU0hfU1JfQlVTWSAgIC8qITwgVGhlIGhhc2ggY29yZSBpcyBCdXN5LCBwcm9jZXNzaW5nIGEgYmxvY2sgb2YgZGF0YSAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgSEFTSF9GTEFHX0RJTk5FICAgICAgICAgICAgSEFTSF9DUl9ESU5ORSAgLyohPCBESU4gbm90IGVtcHR5IDogdGhlIGlucHV0IGJ1ZmZlciBjb250YWlucyBhdCBsZWFzdCBvbmUgd29yZCBvZiBkYXRhICAgICAqLworI2RlZmluZSBIQVNIX0ZMQUdfRElOSVMgICAgICAgICAgICBIQVNIX1NSX0RJTklTICAvKiE8IDE2IGxvY2F0aW9ucyBhcmUgZnJlZSBpbiB0aGUgRElOIDogYSBuZXcgYmxvY2sgY2FuIGJlIGVudGVyZWQgaW4gdGhlIFBlcmlwaGVyYWwgKi8KKyNkZWZpbmUgSEFTSF9GTEFHX0RDSVMgICAgICAgICAgICAgSEFTSF9TUl9EQ0lTICAgLyohPCBEaWdlc3QgY2FsY3VsYXRpb24gY29tcGxldGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEhBU0hfRkxBR19ETUFTICAgICAgICAgICAgIEhBU0hfU1JfRE1BUyAgIC8qITwgRE1BIGludGVyZmFjZSBpcyBlbmFibGVkIChETUFFPTEpIG9yIGEgdHJhbnNmZXIgaXMgb25nb2luZyAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBIQVNIX0ZMQUdfQlVTWSAgICAgICAgICAgICBIQVNIX1NSX0JVU1kgICAvKiE8IFRoZSBoYXNoIGNvcmUgaXMgQnVzeSwgcHJvY2Vzc2luZyBhIGJsb2NrIG9mIGRhdGEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSEFTSF9GTEFHX0RJTk5FICAgICAgICAgICAgSEFTSF9DUl9ESU5ORSAgLyohPCBESU4gbm90IGVtcHR5IDogdGhlIGlucHV0IGJ1ZmZlciBjb250YWlucyBhdCBsZWFzdCBvbmUgd29yZCBvZiBkYXRhICAgICAgICAgICAgICovCiAKIC8qKgogICAqIEB9CkBAIC0yNzYsNyArMjc4LDcgQEAKICAgKi8KIAogLyoqIEBicmllZiAgQ2hlY2sgd2hldGhlciBvciBub3QgdGhlIHNwZWNpZmllZCBIQVNIIGZsYWcgaXMgc2V0LgotICAqIEBwYXJhbSAgX19GTEFHX186IHNwZWNpZmllcyB0aGUgZmxhZyB0byBjaGVjay4KKyAgKiBAcGFyYW0gIF9fRkxBR19fIHNwZWNpZmllcyB0aGUgZmxhZyB0byBjaGVjay4KICAgKiAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAgKiAgICAgICAgICAgIEBhcmcgQHJlZiBIQVNIX0ZMQUdfRElOSVMgQSBuZXcgYmxvY2sgY2FuIGJlIGVudGVyZWQgaW50byB0aGUgaW5wdXQgYnVmZmVyLgogICAqICAgICAgICAgICAgQGFyZyBAcmVmIEhBU0hfRkxBR19EQ0lTIERpZ2VzdCBjYWxjdWxhdGlvbiBjb21wbGV0ZS4KQEAgLTI5MSw3ICsyOTMsNyBAQAogCiAKIC8qKiBAYnJpZWYgIENsZWFyIHRoZSBzcGVjaWZpZWQgSEFTSCBmbGFnLgotICAqIEBwYXJhbSAgX19GTEFHX186IHNwZWNpZmllcyB0aGUgZmxhZyB0byBjbGVhci4KKyAgKiBAcGFyYW0gIF9fRkxBR19fIHNwZWNpZmllcyB0aGUgZmxhZyB0byBjbGVhci4KICAgKiAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAgKiAgICAgICAgICAgIEBhcmcgQHJlZiBIQVNIX0ZMQUdfRElOSVMgQSBuZXcgYmxvY2sgY2FuIGJlIGVudGVyZWQgaW50byB0aGUgaW5wdXQgYnVmZmVyLgogICAqICAgICAgICAgICAgQGFyZyBAcmVmIEhBU0hfRkxBR19EQ0lTIERpZ2VzdCBjYWxjdWxhdGlvbiBjb21wbGV0ZQpAQCAtMzAxLDcgKzMwMyw3IEBACiAKIAogLyoqIEBicmllZiAgRW5hYmxlIHRoZSBzcGVjaWZpZWQgSEFTSCBpbnRlcnJ1cHQuCi0gICogQHBhcmFtICBfX0lOVEVSUlVQVF9fOiBzcGVjaWZpZXMgdGhlIEhBU0ggaW50ZXJydXB0IHNvdXJjZSB0byBlbmFibGUuCisgICogQHBhcmFtICBfX0lOVEVSUlVQVF9fIHNwZWNpZmllcyB0aGUgSEFTSCBpbnRlcnJ1cHQgc291cmNlIHRvIGVuYWJsZS4KICAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICAqICAgICAgICAgICAgQGFyZyBAcmVmIEhBU0hfSVRfRElOSSAgQSBuZXcgYmxvY2sgY2FuIGJlIGVudGVyZWQgaW50byB0aGUgaW5wdXQgYnVmZmVyIChESU4pCiAgICogICAgICAgICAgICBAYXJnIEByZWYgSEFTSF9JVF9EQ0kgICBEaWdlc3QgY2FsY3VsYXRpb24gY29tcGxldGUKQEAgLTMxMCw3ICszMTIsNyBAQAogI2RlZmluZSBfX0hBTF9IQVNIX0VOQUJMRV9JVChfX0lOVEVSUlVQVF9fKSAgIFNFVF9CSVQoSEFTSC0+SU1SLCAoX19JTlRFUlJVUFRfXykpCiAKIC8qKiBAYnJpZWYgIERpc2FibGUgdGhlIHNwZWNpZmllZCBIQVNIIGludGVycnVwdC4KLSAgKiBAcGFyYW0gIF9fSU5URVJSVVBUX186IHNwZWNpZmllcyB0aGUgSEFTSCBpbnRlcnJ1cHQgc291cmNlIHRvIGRpc2FibGUuCisgICogQHBhcmFtICBfX0lOVEVSUlVQVF9fIHNwZWNpZmllcyB0aGUgSEFTSCBpbnRlcnJ1cHQgc291cmNlIHRvIGRpc2FibGUuCiAgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAgKiAgICAgICAgICAgIEBhcmcgQHJlZiBIQVNIX0lUX0RJTkkgIEEgbmV3IGJsb2NrIGNhbiBiZSBlbnRlcmVkIGludG8gdGhlIGlucHV0IGJ1ZmZlciAoRElOKQogICAqICAgICAgICAgICAgQGFyZyBAcmVmIEhBU0hfSVRfRENJICAgRGlnZXN0IGNhbGN1bGF0aW9uIGNvbXBsZXRlCkBAIC0zMTksNyArMzIxLDcgQEAKICNkZWZpbmUgX19IQUxfSEFTSF9ESVNBQkxFX0lUKF9fSU5URVJSVVBUX18pICAgQ0xFQVJfQklUKEhBU0gtPklNUiwgKF9fSU5URVJSVVBUX18pKQogCiAvKiogQGJyaWVmIFJlc2V0IEhBU0ggaGFuZGxlIHN0YXRlLgotICAqIEBwYXJhbSAgX19IQU5ETEVfXzogSEFTSCBoYW5kbGUuCisgICogQHBhcmFtICBfX0hBTkRMRV9fIEhBU0ggaGFuZGxlLgogICAqIEByZXR2YWwgTm9uZQogICAqLwogCkBAIC0zMzUsNyArMzM3LDcgQEAKIAogCiAvKiogQGJyaWVmIFJlc2V0IEhBU0ggaGFuZGxlIHN0YXR1cy4KLSAgKiBAcGFyYW0gIF9fSEFORExFX186IEhBU0ggaGFuZGxlLgorICAqIEBwYXJhbSAgX19IQU5ETEVfXyBIQVNIIGhhbmRsZS4KICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KICNkZWZpbmUgX19IQUxfSEFTSF9SRVNFVF9IQU5ETEVfU1RBVFVTKF9fSEFORExFX18pICgoX19IQU5ETEVfXyktPlN0YXR1cyA9IEhBTF9PSykKQEAgLTM2Miw3ICszNjQsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgU2V0IHRoZSBudW1iZXIgb2YgdmFsaWQgYml0cyBpbiB0aGUgbGFzdCB3b3JkIHdyaXR0ZW4gaW4gZGF0YSByZWdpc3RlciBESU4uCi0gICogQHBhcmFtICBfX1NJWkVfXzogc2l6ZSBpbiBieXRlcyBvZiBsYXN0IGRhdGEgd3JpdHRlbiBpbiBEYXRhIHJlZ2lzdGVyLgorICAqIEBwYXJhbSAgX19TSVpFX18gc2l6ZSBpbiBieXRlcyBvZiBsYXN0IGRhdGEgd3JpdHRlbiBpbiBEYXRhIHJlZ2lzdGVyLgogICAqIEByZXR2YWwgTm9uZQogKi8KICNkZWZpbmUgIF9fSEFMX0hBU0hfU0VUX05CVkFMSURCSVRTKF9fU0laRV9fKSAgICBNT0RJRllfUkVHKEhBU0gtPlNUUiwgSEFTSF9TVFJfTkJMVywgOFUgKiAoKF9fU0laRV9fKSAlIDRVKSkKQEAgLTQwMSw3ICs0MDMsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgRW5zdXJlIHRoYXQgSEFTSCBpbnB1dCBkYXRhIHR5cGUgaXMgdmFsaWQuCi0gICogQHBhcmFtIF9fREFUQVRZUEVfXzogSEFTSCBpbnB1dCBkYXRhIHR5cGUuCisgICogQHBhcmFtIF9fREFUQVRZUEVfXyBIQVNIIGlucHV0IGRhdGEgdHlwZS4KICAgKiBAcmV0dmFsIFNFVCAoX19EQVRBVFlQRV9fIGlzIHZhbGlkKSBvciBSRVNFVCAoX19EQVRBVFlQRV9fIGlzIGludmFsaWQpCiAgICovCiAjZGVmaW5lIElTX0hBU0hfREFUQVRZUEUoX19EQVRBVFlQRV9fKSAoKChfX0RBVEFUWVBFX18pID09IEhBU0hfREFUQVRZUEVfMzJCKXx8IFwKQEAgLTQwOSwyMSArNDExLDExIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0RBVEFUWVBFX18pID09IEhBU0hfREFUQVRZUEVfOEIpIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fREFUQVRZUEVfXykgPT0gSEFTSF9EQVRBVFlQRV8xQikpCiAKLQotCi0vKioKLSAgKiBAYnJpZWYgRW5zdXJlIHRoYXQgaW5wdXQgZGF0YSBidWZmZXIgc2l6ZSBpcyB2YWxpZCBmb3IgbXVsdGktYnVmZmVyIEhBU0gKLSAgKiAgICAgICAgcHJvY2Vzc2luZyBpbiBwb2xsaW5nIG1vZGUuCi0gICogQG5vdGUgIFRoaXMgY2hlY2sgaXMgdmFsaWQgb25seSBmb3IgbXVsdGktYnVmZmVyIEhBU0ggcHJvY2Vzc2luZyBpbiBwb2xsaW5nIG1vZGUuCi0gICogQHBhcmFtIF9fU0laRV9fOiBpbnB1dCBkYXRhIGJ1ZmZlciBzaXplLgotICAqIEByZXR2YWwgU0VUIChfX1NJWkVfXyBpcyB2YWxpZCkgb3IgUkVTRVQgKF9fU0laRV9fIGlzIGludmFsaWQpCi0gICovCi0jZGVmaW5lIElTX0hBU0hfUE9MTElOR19NVUxUSUJVRkZFUl9TSVpFKF9fU0laRV9fKSAgKCgoX19TSVpFX18pICUgNFUpID09IDBVKQogLyoqCiAgICogQGJyaWVmIEVuc3VyZSB0aGF0IGlucHV0IGRhdGEgYnVmZmVyIHNpemUgaXMgdmFsaWQgZm9yIG11bHRpLWJ1ZmZlciBIQVNICiAgICogICAgICAgIHByb2Nlc3NpbmcgaW4gRE1BIG1vZGUuCiAgICogQG5vdGUgIFRoaXMgY2hlY2sgaXMgdmFsaWQgb25seSBmb3IgbXVsdGktYnVmZmVyIEhBU0ggcHJvY2Vzc2luZyBpbiBETUEgbW9kZS4KLSAgKiBAcGFyYW0gX19TSVpFX186IGlucHV0IGRhdGEgYnVmZmVyIHNpemUuCisgICogQHBhcmFtIF9fU0laRV9fIGlucHV0IGRhdGEgYnVmZmVyIHNpemUuCiAgICogQHJldHZhbCBTRVQgKF9fU0laRV9fIGlzIHZhbGlkKSBvciBSRVNFVCAoX19TSVpFX18gaXMgaW52YWxpZCkKICAgKi8KICNkZWZpbmUgSVNfSEFTSF9ETUFfTVVMVElCVUZGRVJfU0laRShfX1NJWkVfXykgICgoUkVBRF9CSVQoSEFTSC0+Q1IsIEhBU0hfQ1JfTURNQVQpID09IDBVKSB8fCAoKChfX1NJWkVfXykgJSA0VSkgPT0gMFUpKQpAQCAtNDMyLDIxICs0MjQsMjEgQEAKICAgKiBAYnJpZWYgRW5zdXJlIHRoYXQgaW5wdXQgZGF0YSBidWZmZXIgc2l6ZSBpcyB2YWxpZCBmb3IgbXVsdGktYnVmZmVyIEhNQUMKICAgKiAgICAgICAgcHJvY2Vzc2luZyBpbiBETUEgbW9kZS4KICAgKiBAbm90ZSAgVGhpcyBjaGVjayBpcyB2YWxpZCBvbmx5IGZvciBtdWx0aS1idWZmZXIgSE1BQyBwcm9jZXNzaW5nIGluIERNQSBtb2RlLgotICAqIEBwYXJhbSBfX0hBTkRMRV9fOiBIQVNIIGhhbmRsZS4KLSAgKiBAcGFyYW0gX19TSVpFX186IGlucHV0IGRhdGEgYnVmZmVyIHNpemUuCisgICogQHBhcmFtIF9fSEFORExFX18gSEFTSCBoYW5kbGUuCisgICogQHBhcmFtIF9fU0laRV9fIGlucHV0IGRhdGEgYnVmZmVyIHNpemUuCiAgICogQHJldHZhbCBTRVQgKF9fU0laRV9fIGlzIHZhbGlkKSBvciBSRVNFVCAoX19TSVpFX18gaXMgaW52YWxpZCkKICAgKi8KICNkZWZpbmUgSVNfSE1BQ19ETUFfTVVMVElCVUZGRVJfU0laRShfX0hBTkRMRV9fLF9fU0laRV9fKSAgKCgoKF9fSEFORExFX18pLT5EaWdlc3RDYWxjdWxhdGlvbkRpc2FibGUpID09IFJFU0VUKSB8fCAoKChfX1NJWkVfXykgJSA0VSkgPT0gMFUpKQogLyoqCiAgICogQGJyaWVmIEVuc3VyZSB0aGF0IGhhbmRsZSBwaGFzZSBpcyBzZXQgdG8gSEFTSCBwcm9jZXNzaW5nLgotICAqIEBwYXJhbSBfX0hBTkRMRV9fOiBIQVNIIGhhbmRsZS4KKyAgKiBAcGFyYW0gX19IQU5ETEVfXyBIQVNIIGhhbmRsZS4KICAgKiBAcmV0dmFsIFNFVCAoaGFuZGxlIHBoYXNlIGlzIHNldCB0byBIQVNIIHByb2Nlc3NpbmcpIG9yIFJFU0VUIChoYW5kbGUgcGhhc2UgaXMgbm90IHNldCB0byBIQVNIIHByb2Nlc3NpbmcpCiAgICovCiAjZGVmaW5lIElTX0hBU0hfUFJPQ0VTU0lORyhfX0hBTkRMRV9fKSAgKChfX0hBTkRMRV9fKS0+UGhhc2UgPT0gSEFMX0hBU0hfUEhBU0VfUFJPQ0VTUykKIAogLyoqCiAgICogQGJyaWVmIEVuc3VyZSB0aGF0IGhhbmRsZSBwaGFzZSBpcyBzZXQgdG8gSE1BQyBwcm9jZXNzaW5nLgotICAqIEBwYXJhbSBfX0hBTkRMRV9fOiBIQVNIIGhhbmRsZS4KKyAgKiBAcGFyYW0gX19IQU5ETEVfXyBIQVNIIGhhbmRsZS4KICAgKiBAcmV0dmFsIFNFVCAoaGFuZGxlIHBoYXNlIGlzIHNldCB0byBITUFDIHByb2Nlc3NpbmcpIG9yIFJFU0VUIChoYW5kbGUgcGhhc2UgaXMgbm90IHNldCB0byBITUFDIHByb2Nlc3NpbmcpCiAgICovCiAjZGVmaW5lIElTX0hNQUNfUFJPQ0VTU0lORyhfX0hBTkRMRV9fKSAgKCgoX19IQU5ETEVfXyktPlBoYXNlID09IEhBTF9IQVNIX1BIQVNFX0hNQUNfU1RFUF8xKSB8fCBcCkBAIC00OTYsOCArNDg4LDExIEBACiAvKiBIQVNIIHByb2Nlc3NpbmcgdXNpbmcgcG9sbGluZyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0hBU0hfU0hBMV9TdGFydChIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoLCB1aW50OF90ICpwSW5CdWZmZXIsIHVpbnQzMl90IFNpemUsIHVpbnQ4X3QqIHBPdXRCdWZmZXIsIHVpbnQzMl90IFRpbWVvdXQpOwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0hBU0hfTUQ1X1N0YXJ0KEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gsIHVpbnQ4X3QgKnBJbkJ1ZmZlciwgdWludDMyX3QgU2l6ZSwgdWludDhfdCogcE91dEJ1ZmZlciwgdWludDMyX3QgVGltZW91dCk7Ci1IQUxfU3RhdHVzVHlwZURlZiBIQUxfSEFTSF9NRDVfQWNjdW11bGF0ZShIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoLCB1aW50OF90ICpwSW5CdWZmZXIsIHVpbnQzMl90IFNpemUpOwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0hBU0hfU0hBMV9BY2N1bXVsYXRlKEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gsIHVpbnQ4X3QgKnBJbkJ1ZmZlciwgdWludDMyX3QgU2l6ZSk7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfSEFTSF9NRDVfQWNjbWx0KEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gsIHVpbnQ4X3QgKnBJbkJ1ZmZlciwgdWludDMyX3QgU2l6ZSk7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfSEFTSF9TSEExX0FjY21sdChIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoLCB1aW50OF90ICpwSW5CdWZmZXIsIHVpbnQzMl90IFNpemUpOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0hBU0hfTUQ1X0FjY21sdF9FbmQoSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCwgdWludDhfdCAqcEluQnVmZmVyLCB1aW50MzJfdCBTaXplLCB1aW50OF90KiBwT3V0QnVmZmVyLCB1aW50MzJfdCBUaW1lb3V0KTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9IQVNIX1NIQTFfQWNjbWx0X0VuZChIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoLCB1aW50OF90ICpwSW5CdWZmZXIsIHVpbnQzMl90IFNpemUsIHVpbnQ4X3QqIHBPdXRCdWZmZXIsIHVpbnQzMl90IFRpbWVvdXQpOworCiAKIC8qKgogICAqIEB9CkBAIC01MDksNyArNTA0LDExIEBACiAKIC8qIEhBU0ggcHJvY2Vzc2luZyB1c2luZyBJVCAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfSEFTSF9TSEExX1N0YXJ0X0lUKEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gsIHVpbnQ4X3QgKnBJbkJ1ZmZlciwgdWludDMyX3QgU2l6ZSwgdWludDhfdCogcE91dEJ1ZmZlcik7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfSEFTSF9TSEExX0FjY21sdF9JVChIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoLCB1aW50OF90ICpwSW5CdWZmZXIsIHVpbnQzMl90IFNpemUpOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0hBU0hfU0hBMV9BY2NtbHRfRW5kX0lUKEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gsIHVpbnQ4X3QgKnBJbkJ1ZmZlciwgdWludDMyX3QgU2l6ZSwgdWludDhfdCogcE91dEJ1ZmZlcik7CiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfSEFTSF9NRDVfU3RhcnRfSVQoSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCwgdWludDhfdCAqcEluQnVmZmVyLCB1aW50MzJfdCBTaXplLCB1aW50OF90KiBwT3V0QnVmZmVyKTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9IQVNIX01ENV9BY2NtbHRfSVQoSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCwgdWludDhfdCAqcEluQnVmZmVyLCB1aW50MzJfdCBTaXplKTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9IQVNIX01ENV9BY2NtbHRfRW5kX0lUKEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gsIHVpbnQ4X3QgKnBJbkJ1ZmZlciwgdWludDMyX3QgU2l6ZSwgdWludDhfdCogcE91dEJ1ZmZlcik7CiB2b2lkIEhBTF9IQVNIX0lSUUhhbmRsZXIoSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCk7CiAvKioKICAgKiBAfQpAQCAtNTk1LDYgKzU5NCw3IEBACiAvKiBQcml2YXRlIGZ1bmN0aW9ucyAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFTSF9TdGFydChIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoLCB1aW50OF90ICpwSW5CdWZmZXIsIHVpbnQzMl90IFNpemUsIHVpbnQ4X3QqIHBPdXRCdWZmZXIsIHVpbnQzMl90IFRpbWVvdXQsIHVpbnQzMl90IEFsZ29yaXRobSk7CiBIQUxfU3RhdHVzVHlwZURlZiBIQVNIX0FjY3VtdWxhdGUoSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCwgdWludDhfdCAqcEluQnVmZmVyLCB1aW50MzJfdCBTaXplLCB1aW50MzJfdCBBbGdvcml0aG0pOworSEFMX1N0YXR1c1R5cGVEZWYgSEFTSF9BY2N1bXVsYXRlX0lUKEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gsIHVpbnQ4X3QgKnBJbkJ1ZmZlciwgdWludDMyX3QgU2l6ZSwgdWludDMyX3QgQWxnb3JpdGhtKTsKIEhBTF9TdGF0dXNUeXBlRGVmIEhBU0hfU3RhcnRfSVQoSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCwgdWludDhfdCAqcEluQnVmZmVyLCB1aW50MzJfdCBTaXplLCB1aW50OF90KiBwT3V0QnVmZmVyLCB1aW50MzJfdCBBbGdvcml0aG0pOwogSEFMX1N0YXR1c1R5cGVEZWYgSEFTSF9TdGFydF9ETUEoSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCwgdWludDhfdCAqcEluQnVmZmVyLCB1aW50MzJfdCBTaXplLCB1aW50MzJfdCBBbGdvcml0aG0pOwogSEFMX1N0YXR1c1R5cGVEZWYgSEFTSF9GaW5pc2goSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCwgdWludDhfdCogcE91dEJ1ZmZlciwgdWludDMyX3QgVGltZW91dCk7CmRpZmYgLS1naXQgYS9JbmMvc3RtMzJmNHh4X2hhbF9oYXNoX2V4LmggYi9JbmMvc3RtMzJmNHh4X2hhbF9oYXNoX2V4LmgKaW5kZXggZTU5NGI2My4uNjU4YTcyNyAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZjR4eF9oYWxfaGFzaF9leC5oCisrKyBiL0luYy9zdG0zMmY0eHhfaGFsX2hhc2hfZXguaApAQCAtNTIsOSArNTIsMTEgQEAKICAgKi8KIAogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0hBU0hFeF9TSEEyMjRfU3RhcnQoSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCwgdWludDhfdCAqcEluQnVmZmVyLCB1aW50MzJfdCBTaXplLCB1aW50OF90KiBwT3V0QnVmZmVyLCB1aW50MzJfdCBUaW1lb3V0KTsKLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9IQVNIRXhfU0hBMjI0X0FjY3VtdWxhdGUoSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCwgdWludDhfdCAqcEluQnVmZmVyLCB1aW50MzJfdCBTaXplKTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9IQVNIRXhfU0hBMjI0X0FjY21sdChIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoLCB1aW50OF90ICpwSW5CdWZmZXIsIHVpbnQzMl90IFNpemUpOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0hBU0hFeF9TSEEyMjRfQWNjbWx0X0VuZChIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoLCB1aW50OF90ICpwSW5CdWZmZXIsIHVpbnQzMl90IFNpemUsIHVpbnQ4X3QqIHBPdXRCdWZmZXIsIHVpbnQzMl90IFRpbWVvdXQpOwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0hBU0hFeF9TSEEyNTZfU3RhcnQoSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCwgdWludDhfdCAqcEluQnVmZmVyLCB1aW50MzJfdCBTaXplLCB1aW50OF90KiBwT3V0QnVmZmVyLCB1aW50MzJfdCBUaW1lb3V0KTsKLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9IQVNIRXhfU0hBMjU2X0FjY3VtdWxhdGUoSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCwgdWludDhfdCAqcEluQnVmZmVyLCB1aW50MzJfdCBTaXplKTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9IQVNIRXhfU0hBMjU2X0FjY21sdChIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoLCB1aW50OF90ICpwSW5CdWZmZXIsIHVpbnQzMl90IFNpemUpOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0hBU0hFeF9TSEEyNTZfQWNjbWx0X0VuZChIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoLCB1aW50OF90ICpwSW5CdWZmZXIsIHVpbnQzMl90IFNpemUsIHVpbnQ4X3QqIHBPdXRCdWZmZXIsIHVpbnQzMl90IFRpbWVvdXQpOwogCiAvKioKICAgKiBAfQpAQCAtNjUsNyArNjcsMTEgQEAKICAgKi8KIAogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0hBU0hFeF9TSEEyMjRfU3RhcnRfSVQoSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCwgdWludDhfdCAqcEluQnVmZmVyLCB1aW50MzJfdCBTaXplLCB1aW50OF90KiBwT3V0QnVmZmVyKTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9IQVNIRXhfU0hBMjI0X0FjY21sdF9JVChIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoLCB1aW50OF90ICpwSW5CdWZmZXIsIHVpbnQzMl90IFNpemUpOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0hBU0hFeF9TSEEyMjRfQWNjbWx0X0VuZF9JVChIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoLCB1aW50OF90ICpwSW5CdWZmZXIsIHVpbnQzMl90IFNpemUsIHVpbnQ4X3QqIHBPdXRCdWZmZXIpOwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0hBU0hFeF9TSEEyNTZfU3RhcnRfSVQoSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCwgdWludDhfdCAqcEluQnVmZmVyLCB1aW50MzJfdCBTaXplLCB1aW50OF90KiBwT3V0QnVmZmVyKTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9IQVNIRXhfU0hBMjU2X0FjY21sdF9JVChIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoLCB1aW50OF90ICpwSW5CdWZmZXIsIHVpbnQzMl90IFNpemUpOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0hBU0hFeF9TSEEyNTZfQWNjbWx0X0VuZF9JVChIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoLCB1aW50OF90ICpwSW5CdWZmZXIsIHVpbnQzMl90IFNpemUsIHVpbnQ4X3QqIHBPdXRCdWZmZXIpOwogCiAvKioKICAgKiBAfQpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZjR4eF9oYWxfaTJjLmggYi9JbmMvc3RtMzJmNHh4X2hhbF9pMmMuaAppbmRleCAyZjNmOTQ3Li5kYjI5MGMyIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmNHh4X2hhbF9pMmMuaAorKysgYi9JbmMvc3RtMzJmNHh4X2hhbF9pMmMuaApAQCAtMTcwLDYgKzE3MCw3IEBACiAjZGVmaW5lIEhBTF9JMkNfRVJST1JfVElNRU9VVCAgICAgICAgICAgMHgwMDAwMDAyMFUgICAgLyohPCBUaW1lb3V0IEVycm9yICAgICAgICAgKi8KICNkZWZpbmUgSEFMX0kyQ19FUlJPUl9TSVpFICAgICAgICAgICAgICAweDAwMDAwMDQwVSAgICAvKiE8IFNpemUgTWFuYWdlbWVudCBlcnJvciAqLwogI2RlZmluZSBIQUxfSTJDX0VSUk9SX0RNQV9QQVJBTSAgICAgICAgIDB4MDAwMDAwODBVICAgIC8qITwgRE1BIFBhcmFtZXRlciBFcnJvciAgICovCisjZGVmaW5lIEhBTF9JMkNfV1JPTkdfU1RBUlQgICAgICAgICAgICAgMHgwMDAwMDIwMFUgICAgLyohPCBXcm9uZyBzdGFydCBFcnJvciAgICAgKi8KICNpZiAoVVNFX0hBTF9JMkNfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCiAjZGVmaW5lIEhBTF9JMkNfRVJST1JfSU5WQUxJRF9DQUxMQkFDSyAgMHgwMDAwMDEwMFUgICAgLyohPCBJbnZhbGlkIENhbGxiYWNrIGVycm9yICovCiAjZW5kaWYgLyogVVNFX0hBTF9JMkNfUkVHSVNURVJfQ0FMTEJBQ0tTICovCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJmNHh4X2hhbF9pMnMuaCBiL0luYy9zdG0zMmY0eHhfaGFsX2kycy5oCmluZGV4IDY1MzBhNWMuLjJkOTYzMTUgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmY0eHhfaGFsX2kycy5oCisrKyBiL0luYy9zdG0zMmY0eHhfaGFsX2kycy5oCkBAIC0yODYsNyArMjg2LDggQEAKICNkZWZpbmUgSTJTX0ZMQUdfQ0hTSURFICAgICAgICAgICAgICAgICAgU1BJX1NSX0NIU0lERQogI2RlZmluZSBJMlNfRkxBR19CU1kgICAgICAgICAgICAgICAgICAgICBTUElfU1JfQlNZCiAKLSNkZWZpbmUgSTJTX0ZMQUdfTUFTSyAgICAgICAgICAgICAgICAgICAoU1BJX1NSX1JYTkUgfCBTUElfU1JfVFhFIHwgU1BJX1NSX1VEUiB8IFNQSV9TUl9PVlIgfCBTUElfU1JfRlJFIHwgU1BJX1NSX0NIU0lERSB8IFNQSV9TUl9CU1kpCisjZGVmaW5lIEkyU19GTEFHX01BU0sgICAgICAgICAgICAgICAgICAgKFNQSV9TUl9SWE5FXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFNQSV9TUl9UWEUgfCBTUElfU1JfVURSIHwgU1BJX1NSX09WUiB8IFNQSV9TUl9GUkUgfCBTUElfU1JfQ0hTSURFIHwgU1BJX1NSX0JTWSkKIC8qKgogICAqIEB9CiAgICovCkBAIC0zMzcsNyArMzM4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUoMCkKICNlbHNlCiAjZGVmaW5lIF9fSEFMX0kyU19SRVNFVF9IQU5ETEVfU1RBVEUoX19IQU5ETEVfXykgKChfX0hBTkRMRV9fKS0+U3RhdGUgPSBIQUxfSTJTX1NUQVRFX1JFU0VUKQotI2VuZGlmCisjZW5kaWYgLyogVVNFX0hBTF9JMlNfUkVHSVNURVJfQ0FMTEJBQ0tTICovCiAKIC8qKiBAYnJpZWYgIEVuYWJsZSB0aGUgc3BlY2lmaWVkIFNQSSBwZXJpcGhlcmFsIChpbiBJMlMgbW9kZSkuCiAgICogQHBhcmFtICBfX0hBTkRMRV9fIHNwZWNpZmllcyB0aGUgSTJTIEhhbmRsZS4KQEAgLTM4Myw3ICszODQsOCBAQAogICAqICAgICAgICAgICAgQGFyZyBJMlNfSVRfRVJSOiBFcnJvciBpbnRlcnJ1cHQgZW5hYmxlCiAgICogQHJldHZhbCBUaGUgbmV3IHN0YXRlIG9mIF9fSVRfXyAoVFJVRSBvciBGQUxTRSkuCiAgICovCi0jZGVmaW5lIF9fSEFMX0kyU19HRVRfSVRfU09VUkNFKF9fSEFORExFX18sIF9fSU5URVJSVVBUX18pICgoKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNSMiAmIChfX0lOVEVSUlVQVF9fKSkgPT0gKF9fSU5URVJSVVBUX18pKSA/IFNFVCA6IFJFU0VUKQorI2RlZmluZSBfX0hBTF9JMlNfR0VUX0lUX1NPVVJDRShfX0hBTkRMRV9fLCBfX0lOVEVSUlVQVF9fKSAoKCgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5DUjJcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgKF9fSU5URVJSVVBUX18pKSA9PSAoX19JTlRFUlJVUFRfXykpID8gU0VUIDogUkVTRVQpCiAKIC8qKiBAYnJpZWYgIENoZWNrcyB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgSTJTIGZsYWcgaXMgc2V0IG9yIG5vdC4KICAgKiBAcGFyYW0gIF9fSEFORExFX18gc3BlY2lmaWVzIHRoZSBJMlMgSGFuZGxlLgpAQCAtNDA1LDE5ICs0MDcsMTkgQEAKICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KICNkZWZpbmUgX19IQUxfSTJTX0NMRUFSX09WUkZMQUcoX19IQU5ETEVfXykgZG97IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19JTyB1aW50MzJfdCB0bXByZWdfb3ZyID0gMHgwMFU7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wcmVnX292ciA9IChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkRSOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcHJlZ19vdnIgPSAoX19IQU5ETEVfXyktPkluc3RhbmNlLT5TUjsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVTlVTRUQodG1wcmVnX292cik7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fSU8gdWludDMyX3QgdG1wcmVnX292ciA9IDB4MDBVOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXByZWdfb3ZyID0gKF9fSEFORExFX18pLT5JbnN0YW5jZS0+RFI7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcHJlZ19vdnIgPSAoX19IQU5ETEVfXyktPkluc3RhbmNlLT5TUjsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5VU0VEKHRtcHJlZ19vdnIpOyBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfXdoaWxlKDBVKQogLyoqIEBicmllZiBDbGVhcnMgdGhlIEkyUyBVRFIgcGVuZGluZyBmbGFnLgogICAqIEBwYXJhbSAgX19IQU5ETEVfXyBzcGVjaWZpZXMgdGhlIEkyUyBIYW5kbGUuCiAgICogQHJldHZhbCBOb25lCiAgICovCiAjZGVmaW5lIF9fSEFMX0kyU19DTEVBUl9VRFJGTEFHKF9fSEFORExFX18pIGRve1wKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19JTyB1aW50MzJfdCB0bXByZWdfdWRyID0gMHgwMFU7XAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXByZWdfdWRyID0gKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPlNSKTtcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVOVVNFRCh0bXByZWdfdWRyKTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19JTyB1aW50MzJfdCB0bXByZWdfdWRyID0gMHgwMFU7XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wcmVnX3VkciA9ICgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5TUik7XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5VU0VEKHRtcHJlZ191ZHIpOyBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfXdoaWxlKDBVKQogLyoqCiAgICogQH0KQEAgLTQ0Miw3ICs0NDQsOCBAQAogCiAvKiBDYWxsYmFja3MgUmVnaXN0ZXIvVW5SZWdpc3RlciBmdW5jdGlvbnMgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmIChVU0VfSEFMX0kyU19SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMVUpCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfSTJTX1JlZ2lzdGVyQ2FsbGJhY2soSTJTX0hhbmRsZVR5cGVEZWYgKmhpMnMsIEhBTF9JMlNfQ2FsbGJhY2tJRFR5cGVEZWYgQ2FsbGJhY2tJRCwgcEkyU19DYWxsYmFja1R5cGVEZWYgcENhbGxiYWNrKTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9JMlNfUmVnaXN0ZXJDYWxsYmFjayhJMlNfSGFuZGxlVHlwZURlZiAqaGkycywgSEFMX0kyU19DYWxsYmFja0lEVHlwZURlZiBDYWxsYmFja0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBJMlNfQ2FsbGJhY2tUeXBlRGVmIHBDYWxsYmFjayk7CiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfSTJTX1VuUmVnaXN0ZXJDYWxsYmFjayhJMlNfSGFuZGxlVHlwZURlZiAqaGkycywgSEFMX0kyU19DYWxsYmFja0lEVHlwZURlZiBDYWxsYmFja0lEKTsKICNlbmRpZiAvKiBVU0VfSEFMX0kyU19SRUdJU1RFUl9DQUxMQkFDS1MgKi8KIC8qKgpAQCAtNDk3LDE0ICs1MDAsNiBAQAogLyogUHJpdmF0ZSB0eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qIFByaXZhdGUgdmFyaWFibGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiBQcml2YXRlIGNvbnN0YW50cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyoqIEBkZWZncm91cCBJMlNfUHJpdmF0ZV9Db25zdGFudHMgSTJTIFByaXZhdGUgQ29uc3RhbnRzCi0gICogQHsKLSAgKi8KLQotLyoqCi0gICogQH0KLSAgKi8KLQogLyogUHJpdmF0ZSBtYWNyb3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qKiBAZGVmZ3JvdXAgSTJTX1ByaXZhdGVfTWFjcm9zIEkyUyBQcml2YXRlIE1hY3JvcwogICAqIEB7CkBAIC01MjIsNyArNTE3LDggQEAKICAgKiAgICAgICAgICAgIEBhcmcgSTJTX0ZMQUdfQlNZOiBCdXN5IGZsYWcKICAgKiBAcmV0dmFsIFNFVCBvciBSRVNFVC4KICAgKi8KLSNkZWZpbmUgSTJTX0NIRUNLX0ZMQUcoX19TUl9fLCBfX0ZMQUdfXykgICAgICAgICAoKCgoX19TUl9fKSAmICgoX19GTEFHX18pICYgSTJTX0ZMQUdfTUFTSykpID09ICgoX19GTEFHX18pICYgSTJTX0ZMQUdfTUFTSykpID8gU0VUIDogUkVTRVQpCisjZGVmaW5lIEkyU19DSEVDS19GTEFHKF9fU1JfXywgX19GTEFHX18pICAgICAgICAgKCgoKF9fU1JfXylcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiAoKF9fRkxBR19fKSAmIEkyU19GTEFHX01BU0spKSA9PSAoKF9fRkxBR19fKSAmIEkyU19GTEFHX01BU0spKSA/IFNFVCA6IFJFU0VUKQogCiAvKiogQGJyaWVmICBDaGVjayB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgU1BJIEludGVycnVwdCBpcyBzZXQgb3Igbm90LgogICAqIEBwYXJhbSAgX19DUjJfXyAgY29weSBvZiBJMlMgQ1IyIHJlZ3NpdGVyLgpAQCAtNTMzLDcgKzUyOSw4IEBACiAgICogICAgICAgICAgICBAYXJnIEkyU19JVF9FUlI6IEVycm9yIGludGVycnVwdCBlbmFibGUKICAgKiBAcmV0dmFsIFNFVCBvciBSRVNFVC4KICAgKi8KLSNkZWZpbmUgSTJTX0NIRUNLX0lUX1NPVVJDRShfX0NSMl9fLCBfX0lOVEVSUlVQVF9fKSAgICAgICgoKChfX0NSMl9fKSAmIChfX0lOVEVSUlVQVF9fKSkgPT0gKF9fSU5URVJSVVBUX18pKSA/IFNFVCA6IFJFU0VUKQorI2RlZmluZSBJMlNfQ0hFQ0tfSVRfU09VUkNFKF9fQ1IyX18sIF9fSU5URVJSVVBUX18pICAgICAgKCgoKF9fQ1IyX18pXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiAoX19JTlRFUlJVUFRfXykpID09IChfX0lOVEVSUlVQVF9fKSkgPyBTRVQgOiBSRVNFVCkKIAogLyoqIEBicmllZiAgQ2hlY2tzIGlmIEkyUyBNb2RlIHBhcmFtZXRlciBpcyBpbiBhbGxvd2VkIHJhbmdlLgogICAqIEBwYXJhbSAgX19NT0RFX18gc3BlY2lmaWVzIHRoZSBJMlMgTW9kZS4KQEAgLTU2MSw3ICs1NTgsNyBAQAogCiAjZGVmaW5lIElTX0kyU19BVURJT19GUkVRKF9fRlJFUV9fKSAoKCgoX19GUkVRX18pID49IEkyU19BVURJT0ZSRVFfOEspICAgICYmIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0ZSRVFfXykgPD0gSTJTX0FVRElPRlJFUV8xOTJLKSkgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fRlJFUV9fKSA9PSBJMlNfQVVESU9GUkVRX0RFRkFVTFQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19GUkVRX18pID09IEkyU19BVURJT0ZSRVFfREVGQVVMVCkpCiAKICNkZWZpbmUgSVNfSTJTX0ZVTExEVVBMRVhfTU9ERShNT0RFKSAoKChNT0RFKSA9PSBJMlNfRlVMTERVUExFWE1PREVfRElTQUJMRSkgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKE1PREUpID09IEkyU19GVUxMRFVQTEVYTU9ERV9FTkFCTEUpKQpAQCAtNTcyLDcgKzU2OSw3IEBACiAgICogQHJldHZhbCBOb25lCiAgICovCiAjZGVmaW5lIElTX0kyU19DUE9MKF9fQ1BPTF9fKSAoKChfX0NQT0xfXykgPT0gSTJTX0NQT0xfTE9XKSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ1BPTF9fKSA9PSBJMlNfQ1BPTF9ISUdIKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ1BPTF9fKSA9PSBJMlNfQ1BPTF9ISUdIKSkKIAogI2lmIGRlZmluZWQoU1RNMzJGNDA1eHgpIHx8IGRlZmluZWQoU1RNMzJGNDE1eHgpIHx8IGRlZmluZWQoU1RNMzJGNDA3eHgpIHx8IGRlZmluZWQoU1RNMzJGNDE3eHgpIHx8ICAgICBkZWZpbmVkKFNUTTMyRjQyN3h4KSB8fCBkZWZpbmVkKFNUTTMyRjQzN3h4KSB8fCBkZWZpbmVkKFNUTTMyRjQyOXh4KSB8fCBkZWZpbmVkKFNUTTMyRjQzOXh4KSB8fCAgICAgZGVmaW5lZChTVE0zMkY0MDF4QykgfHwgZGVmaW5lZChTVE0zMkY0MDF4RSkgfHwgZGVmaW5lZChTVE0zMkY0MTF4RSkgfHwgZGVmaW5lZChTVE0zMkY0Njl4eCkgfHwgICAgIGRlZmluZWQoU1RNMzJGNDc5eHgpCiAjZGVmaW5lIElTX0kyU19DTE9DS1NPVVJDRShDTE9DSykgKCgoQ0xPQ0spID09IEkyU19DTE9DS19FWFRFUk5BTCkgfHxcCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJmNHh4X2hhbF9pMnNfZXguaCBiL0luYy9zdG0zMmY0eHhfaGFsX2kyc19leC5oCmluZGV4IDE5Y2Q4MDYuLjg3MjI4M2IgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmY0eHhfaGFsX2kyc19leC5oCisrKyBiL0luYy9zdG0zMmY0eHhfaGFsX2kyc19leC5oCkBAIC03NCw3ICs3NCw4IEBACiAgICogICAgICAgICAgICBAYXJnIEkyU19JVF9FUlI6IEVycm9yIGludGVycnVwdCBlbmFibGUKICAgKiBAcmV0dmFsIFRoZSBuZXcgc3RhdGUgb2YgX19JVF9fIChUUlVFIG9yIEZBTFNFKS4KICAgKi8KLSNkZWZpbmUgX19IQUxfSTJTRVhUX0dFVF9JVF9TT1VSQ0UoX19IQU5ETEVfXywgX19JTlRFUlJVUFRfXykgKCgoSTJTeEVYVCgoX19IQU5ETEVfXyktPkluc3RhbmNlKS0+Q1IyICYgKF9fSU5URVJSVVBUX18pKSA9PSAoX19JTlRFUlJVUFRfXykpID8gU0VUIDogUkVTRVQpCisjZGVmaW5lIF9fSEFMX0kyU0VYVF9HRVRfSVRfU09VUkNFKF9fSEFORExFX18sIF9fSU5URVJSVVBUX18pICgoKEkyU3hFWFQoKF9fSEFORExFX18pLT5JbnN0YW5jZSktPkNSMlwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiAoX19JTlRFUlJVUFRfXykpID09IChfX0lOVEVSUlVQVF9fKSkgPyBTRVQgOiBSRVNFVCkKIAogLyoqIEBicmllZiAgQ2hlY2tzIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBJMlNFeHQgZmxhZyBpcyBzZXQgb3Igbm90LgogICAqIEBwYXJhbSAgX19IQU5ETEVfXyBzcGVjaWZpZXMgdGhlIEkyUyBIYW5kbGUuCkBAIC05NiwxOSArOTcsMTkgQEAKICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KICNkZWZpbmUgX19IQUxfSTJTRVhUX0NMRUFSX09WUkZMQUcoX19IQU5ETEVfXykgZG97ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19JTyB1aW50MzJfdCB0bXByZWdfb3ZyID0gMHgwMFU7ICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wcmVnX292ciA9IEkyU3hFWFQoKF9fSEFORExFX18pLT5JbnN0YW5jZSktPkRSO1wKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wcmVnX292ciA9IEkyU3hFWFQoKF9fSEFORExFX18pLT5JbnN0YW5jZSktPlNSO1wKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5VU0VEKHRtcHJlZ19vdnIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fSU8gdWludDMyX3QgdG1wcmVnX292ciA9IDB4MDBVOyAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXByZWdfb3ZyID0gSTJTeEVYVCgoX19IQU5ETEVfXyktPkluc3RhbmNlKS0+RFI7XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wcmVnX292ciA9IEkyU3hFWFQoKF9fSEFORExFX18pLT5JbnN0YW5jZSktPlNSO1wKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVOVVNFRCh0bXByZWdfb3ZyKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH13aGlsZSgwVSkKIC8qKiBAYnJpZWYgQ2xlYXJzIHRoZSBJMlNFeHQgVURSIHBlbmRpbmcgZmxhZy4KICAgKiBAcGFyYW0gIF9fSEFORExFX18gc3BlY2lmaWVzIHRoZSBJMlMgSGFuZGxlLgogICAqIEByZXR2YWwgTm9uZQogICAqLwogI2RlZmluZSBfX0hBTF9JMlNFWFRfQ0xFQVJfVURSRkxBRyhfX0hBTkRMRV9fKSBkb3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0lPIHVpbnQzMl90IHRtcHJlZ191ZHIgPSAweDAwVTsgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXByZWdfdWRyID0gSTJTeEVYVCgoX19IQU5ETEVfXyktPkluc3RhbmNlKS0+U1I7XAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVTlVTRUQodG1wcmVnX3Vkcik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19JTyB1aW50MzJfdCB0bXByZWdfdWRyID0gMHgwMFU7ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcHJlZ191ZHIgPSBJMlN4RVhUKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UpLT5TUjtcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVTlVTRUQodG1wcmVnX3Vkcik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9d2hpbGUoMFUpCiAvKioKICAgKiBAfQpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZjR4eF9oYWxfaXJkYS5oIGIvSW5jL3N0bTMyZjR4eF9oYWxfaXJkYS5oCmluZGV4IGIzMDk0NWUuLmEzOTM1NTUgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmY0eHhfaGFsX2lyZGEuaAorKysgYi9JbmMvc3RtMzJmNHh4X2hhbF9pcmRhLmgKQEAgLTY0MiwxMSArNjQyLDExIEBACiAKICNkZWZpbmUgSVNfSVJEQV9CQVVEUkFURShCQVVEUkFURSkgICAgKChCQVVEUkFURSkgPCAxMTUyMDFVKQogCi0jZGVmaW5lIElSREFfRElWKF9QQ0xLXywgX0JBVURfKSAgICAgICgoKF9QQ0xLXykqMjVVKS8oNFUqKF9CQVVEXykpKQorI2RlZmluZSBJUkRBX0RJVihfUENMS18sIF9CQVVEXykgICAgICAoKHVpbnQzMl90KSgoKCh1aW50NjRfdCkoX1BDTEtfKSkqMjVVKS8oNFUqKCgodWludDY0X3QpKF9CQVVEXykpKSkpKQogCiAjZGVmaW5lIElSREFfRElWTUFOVChfUENMS18sIF9CQVVEXykgIChJUkRBX0RJVigoX1BDTEtfKSwgKF9CQVVEXykpLzEwMFUpCiAKLSNkZWZpbmUgSVJEQV9ESVZGUkFRKF9QQ0xLXywgX0JBVURfKSAgKCgoSVJEQV9ESVYoKF9QQ0xLXyksIChfQkFVRF8pKSAtIChJUkRBX0RJVk1BTlQoKF9QQ0xLXyksIChfQkFVRF8pKSAqIDEwMFUpKSAqIDE2VSArIDUwVSkgLyAxMDBVKQorI2RlZmluZSBJUkRBX0RJVkZSQVEoX1BDTEtfLCBfQkFVRF8pICAoKCgoSVJEQV9ESVYoKF9QQ0xLXyksIChfQkFVRF8pKSAtIChJUkRBX0RJVk1BTlQoKF9QQ0xLXyksIChfQkFVRF8pKSAqIDEwMFUpKSAqIDE2VSkgKyA1MFUpIC8gMTAwVSkKIAogLyogVUFSVCBCUlIgPSBtYW50aXNzYSArIG92ZXJmbG93ICsgZnJhY3Rpb24KICAgICAgICAgICAgID0gKFVBUlQgRElWTUFOVCA8PCA0KSArIChVQVJUIERJVkZSQVEgJiAweEYwKSArIChVQVJUIERJVkZSQVEgJiAweDBGVSkgKi8KZGlmZiAtLWdpdCBhL0luYy9zdG0zMmY0eHhfaGFsX2xwdGltLmggYi9JbmMvc3RtMzJmNHh4X2hhbF9scHRpbS5oCmluZGV4IDM5YTgxNjQuLjBiY2U4N2IgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmY0eHhfaGFsX2xwdGltLmgKKysrIGIvSW5jL3N0bTMyZjR4eF9oYWxfbHB0aW0uaApAQCAtNCw3ICs0LDcgQEAKICAgKiBAYXV0aG9yICBNQ0QgQXBwbGljYXRpb24gVGVhbQogICAqIEBicmllZiAgIEhlYWRlciBmaWxlIG9mIExQVElNIEhBTCBtb2R1bGUuCiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAgICogQGF0dGVudGlvbgorICAqIEBhdHRlbnRpb24KICAgKgogICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTYgU1RNaWNyb2VsZWN0cm9uaWNzLgogICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuPC9jZW50ZXI+PC9oMj4KQEAgLTEzLDcgKzEzLDggQEAKICAgKiB0aGUgIkxpY2Vuc2UiOyBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlCiAgICogTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0OgogICAqICAgICAgICAgICAgICAgICAgICAgICAgb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlCi0gICogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqLwogCiAvKiBEZWZpbmUgdG8gcHJldmVudCByZWN1cnNpdmUgaW5jbHVzaW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtMzc2LDYgKzM3Nyw4IEBACiAgICogQG5vdGUgICBUaGUgZm9sbG93aW5nIHNlcXVlbmNlIGlzIHJlcXVpcmVkIHRvIHNvbHZlIExQVElNIGRpc2FibGUgSFcgbGltaXRhdGlvbi4KICAgKiAgICAgICAgIFBsZWFzZSBjaGVjayBFcnJhdGEgU2hlZXQgRVMwMzM1IGZvciBtb3JlIGRldGFpbHMgdW5kZXIgIk1DVSBtYXkgcmVtYWluCiAgICogICAgICAgICBzdHVjayBpbiBMUFRJTSBpbnRlcnJ1cHQgd2hlbiBlbnRlcmluZyBTdG9wIG1vZGUiIHNlY3Rpb24uCisgICogQG5vdGUgICBQbGVhc2UgY2FsbCBAcmVmIEhBTF9MUFRJTV9HZXRTdGF0ZSgpIGFmdGVyIGEgY2FsbCB0byBfX0hBTF9MUFRJTV9ESVNBQkxFIHRvCisgICogICAgICAgICBjaGVjayBmb3IgVElNRU9VVC4KICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KICNkZWZpbmUgX19IQUxfTFBUSU1fRElTQUJMRShfX0hBTkRMRV9fKSAgIExQVElNX0Rpc2FibGUoX19IQU5ETEVfXykKQEAgLTM5OCw2ICs0MDEsNyBAQAogICAqIEBwYXJhbSAgX19IQU5ETEVfXyBMUFRJTSBoYW5kbGUKICAgKiBAcGFyYW0gIF9fVkFMVUVfXyBBdXRvcmVsb2FkIHZhbHVlCiAgICogQHJldHZhbCBOb25lCisgICogQG5vdGUgICBUaGUgQVJSIHJlZ2lzdGVyIGNhbiBvbmx5IGJlIG1vZGlmaWVkIHdoZW4gdGhlIExQVElNIGluc3RhbmNlIGlzIGVuYWJsZWQuCiAgICovCiAjZGVmaW5lIF9fSEFMX0xQVElNX0FVVE9SRUxPQURfU0VUKF9fSEFORExFX18gLCBfX1ZBTFVFX18pICAoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+QVJSID0gIChfX1ZBTFVFX18pKQogCkBAIC00MDYsNiArNDEwLDcgQEAKICAgKiBAcGFyYW0gIF9fSEFORExFX18gTFBUSU0gaGFuZGxlCiAgICogQHBhcmFtICBfX1ZBTFVFX18gQ29tcGFyZSB2YWx1ZQogICAqIEByZXR2YWwgTm9uZQorICAqIEBub3RlICAgVGhlIENNUCByZWdpc3RlciBjYW4gb25seSBiZSBtb2RpZmllZCB3aGVuIHRoZSBMUFRJTSBpbnN0YW5jZSBpcyBlbmFibGVkLgogICAqLwogI2RlZmluZSBfX0hBTF9MUFRJTV9DT01QQVJFX1NFVChfX0hBTkRMRV9fICwgX19WQUxVRV9fKSAgICAgKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNNUCA9ICAoX19WQUxVRV9fKSkKIApAQCAtNDU0LDYgKzQ1OSw3IEBACiAgICogICAgICAgICAgICBAYXJnIExQVElNX0lUX0FSUk0gICAgOiBBdXRvcmVsb2FkIG1hdGNoIEludGVycnVwdC4KICAgKiAgICAgICAgICAgIEBhcmcgTFBUSU1fSVRfQ01QTSAgICA6IENvbXBhcmUgbWF0Y2ggSW50ZXJydXB0LgogICAqIEByZXR2YWwgTm9uZS4KKyAgKiBAbm90ZSAgIFRoZSBMUFRJTSBpbnRlcnJ1cHRzIGNhbiBvbmx5IGJlIGVuYWJsZWQgd2hlbiB0aGUgTFBUSU0gaW5zdGFuY2UgaXMgZGlzYWJsZWQuCiAgICovCiAjZGVmaW5lIF9fSEFMX0xQVElNX0VOQUJMRV9JVChfX0hBTkRMRV9fLCBfX0lOVEVSUlVQVF9fKSAgICAoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+SUVSICB8PSAoX19JTlRFUlJVUFRfXykpCiAKQEAgLTQ3MCw2ICs0NzYsNyBAQAogICAqICAgICAgICAgICAgQGFyZyBMUFRJTV9JVF9BUlJNICAgIDogQXV0b3JlbG9hZCBtYXRjaCBJbnRlcnJ1cHQuCiAgICogICAgICAgICAgICBAYXJnIExQVElNX0lUX0NNUE0gICAgOiBDb21wYXJlIG1hdGNoIEludGVycnVwdC4KICAgKiBAcmV0dmFsIE5vbmUuCisgICogQG5vdGUgICBUaGUgTFBUSU0gaW50ZXJydXB0cyBjYW4gb25seSBiZSBkaXNhYmxlZCB3aGVuIHRoZSBMUFRJTSBpbnN0YW5jZSBpcyBkaXNhYmxlZC4KICAgKi8KICNkZWZpbmUgX19IQUxfTFBUSU1fRElTQUJMRV9JVChfX0hBTkRMRV9fLCBfX0lOVEVSUlVQVF9fKSAgICgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5JRVIgICY9ICh+KF9fSU5URVJSVVBUX18pKSkKIApAQCAtNTI1LDYgKzUzMiw3IEBACiAgICogQHJldHZhbCBOb25lLgogICAqLwogI2RlZmluZSBfX0hBTF9MUFRJTV9XQUtFVVBUSU1FUl9FWFRJX0RJU0FCTEVfRVZFTlQoKSAgIChFWFRJLT5FTVIgJj0gfihMUFRJTV9FWFRJX0xJTkVfV0FLRVVQVElNRVJfRVZFTlQpKQorI2lmIGRlZmluZWQoRVhUSV9JTVJfTVIyMykKIAogLyoqCiAgICogQGJyaWVmICBFbmFibGUgZmFsbGluZyBlZGdlIHRyaWdnZXIgb24gdGhlIExQVElNIFdha2UtdXAgVGltZXIgYXNzb2NpYXRlZCBFeHRpIGxpbmUuCkBAIC01ODMsNiArNTkxLDcgQEAKICAgKiBAcmV0dmFsIE5vbmUuCiAgICovCiAjZGVmaW5lIF9fSEFMX0xQVElNX1dBS0VVUFRJTUVSX0VYVElfR0VORVJBVEVfU1dJVCgpICAgICAgICAgKEVYVEktPlNXSUVSIHw9IExQVElNX0VYVElfTElORV9XQUtFVVBUSU1FUl9FVkVOVCkKKyNlbmRpZiAvKiBFWFRJX0lNUl9NUjIzICovCiAKIC8qKgogICAqIEB9CkBAIC01OTMsNiArNjAyLDEwIEBACiAgICogQHsKICAgKi8KIAorLyoqIEBhZGR0b2dyb3VwIExQVElNX0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDEKKyAqICBAYnJpZWYgICAgSW5pdGlhbGl6YXRpb24gYW5kIENvbmZpZ3VyYXRpb24gZnVuY3Rpb25zLgorICogQHsKKyAqLwogLyogSW5pdGlhbGl6YXRpb24vZGUtaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9MUFRJTV9Jbml0KExQVElNX0hhbmRsZVR5cGVEZWYgKmhscHRpbSk7CiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfTFBUSU1fRGVJbml0KExQVElNX0hhbmRsZVR5cGVEZWYgKmhscHRpbSk7CkBAIC02MDAsNyArNjEzLDE0IEBACiAvKiBNU1AgZnVuY3Rpb25zICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogdm9pZCBIQUxfTFBUSU1fTXNwSW5pdChMUFRJTV9IYW5kbGVUeXBlRGVmICpobHB0aW0pOwogdm9pZCBIQUxfTFBUSU1fTXNwRGVJbml0KExQVElNX0hhbmRsZVR5cGVEZWYgKmhscHRpbSk7CisvKioKKyAgKiBAfQorICAqLwogCisvKiogQGFkZHRvZ3JvdXAgTFBUSU1fRXhwb3J0ZWRfRnVuY3Rpb25zX0dyb3VwMgorICogIEBicmllZiAgIFN0YXJ0LVN0b3Agb3BlcmF0aW9uIGZ1bmN0aW9ucy4KKyAqIEB7CisgKi8KIC8qIFN0YXJ0L1N0b3Agb3BlcmF0aW9uIGZ1bmN0aW9ucyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIFBXTSBNb2RlICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjKi8KIC8qIEJsb2NraW5nIG1vZGU6IFBvbGxpbmcgKi8KQEAgLTY0OSwxMiArNjY5LDI2IEBACiAvKiBOb24tQmxvY2tpbmcgbW9kZTogSW50ZXJydXB0ICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfTFBUSU1fQ291bnRlcl9TdGFydF9JVChMUFRJTV9IYW5kbGVUeXBlRGVmICpobHB0aW0sIHVpbnQzMl90IFBlcmlvZCk7CiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfTFBUSU1fQ291bnRlcl9TdG9wX0lUKExQVElNX0hhbmRsZVR5cGVEZWYgKmhscHRpbSk7CisvKioKKyAgKiBAfQorICAqLwogCisvKiogQGFkZHRvZ3JvdXAgTFBUSU1fRXhwb3J0ZWRfRnVuY3Rpb25zX0dyb3VwMworICogIEBicmllZiAgUmVhZCBvcGVyYXRpb24gZnVuY3Rpb25zLgorICogQHsKKyAqLwogLyogUmVhZGluZyBvcGVyYXRpb24gZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHVpbnQzMl90IEhBTF9MUFRJTV9SZWFkQ291bnRlcihMUFRJTV9IYW5kbGVUeXBlRGVmICpobHB0aW0pOwogdWludDMyX3QgSEFMX0xQVElNX1JlYWRBdXRvUmVsb2FkKExQVElNX0hhbmRsZVR5cGVEZWYgKmhscHRpbSk7CiB1aW50MzJfdCBIQUxfTFBUSU1fUmVhZENvbXBhcmUoTFBUSU1fSGFuZGxlVHlwZURlZiAqaGxwdGltKTsKKy8qKgorICAqIEB9CisgICovCiAKKy8qKiBAYWRkdG9ncm91cCBMUFRJTV9FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXA0CisgKiAgQGJyaWVmICBMUFRJTSBJUlEgaGFuZGxlciBhbmQgY2FsbGJhY2sgZnVuY3Rpb25zLgorICogQHsKKyAqLwogLyogTFBUSU0gSVJRIGZ1bmN0aW9ucyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHZvaWQgSEFMX0xQVElNX0lSUUhhbmRsZXIoTFBUSU1fSGFuZGxlVHlwZURlZiAqaGxwdGltKTsKIApAQCAtNjcyLDkgKzcwNiwxOSBAQAogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0xQVElNX1JlZ2lzdGVyQ2FsbGJhY2soTFBUSU1fSGFuZGxlVHlwZURlZiAqbHBodGltLCBIQUxfTFBUSU1fQ2FsbGJhY2tJRFR5cGVEZWYgQ2FsbGJhY2tJRCwgcExQVElNX0NhbGxiYWNrVHlwZURlZiBwQ2FsbGJhY2spOwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0xQVElNX1VuUmVnaXN0ZXJDYWxsYmFjayhMUFRJTV9IYW5kbGVUeXBlRGVmICpscGh0aW0sIEhBTF9MUFRJTV9DYWxsYmFja0lEVHlwZURlZiBDYWxsYmFja0lEKTsKICNlbmRpZiAvKiBVU0VfSEFMX0xQVElNX1JFR0lTVEVSX0NBTExCQUNLUyAqLworLyoqCisgICogQH0KKyAgKi8KIAorLyoqIEBhZGR0b2dyb3VwIExQVElNX0dyb3VwNQorICogIEBicmllZiAgIFBlcmlwaGVyYWwgU3RhdGUgZnVuY3Rpb25zLgorICogQHsKKyAqLwogLyogUGVyaXBoZXJhbCBTdGF0ZSBmdW5jdGlvbnMgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIEhBTF9MUFRJTV9TdGF0ZVR5cGVEZWYgSEFMX0xQVElNX0dldFN0YXRlKExQVElNX0hhbmRsZVR5cGVEZWYgKmhscHRpbSk7CisvKioKKyAgKiBAfQorICAqLwogCiAvKioKICAgKiBAfQpAQCAtNzc4LDcgKzgyMiw3IEBACiAvKiogQGRlZmdyb3VwIExQVElNX1ByaXZhdGVfRnVuY3Rpb25zIExQVElNIFByaXZhdGUgRnVuY3Rpb25zCiAgICogQHsKICAgKi8KLXZvaWQgTFBUSU1fRGlzYWJsZShMUFRJTV9IYW5kbGVUeXBlRGVmICpscHRpbSk7Cit2b2lkIExQVElNX0Rpc2FibGUoTFBUSU1fSGFuZGxlVHlwZURlZiAqaGxwdGltKTsKIC8qKgogICAqIEB9CiAgICovCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJmNHh4X2hhbF9sdGRjLmggYi9JbmMvc3RtMzJmNHh4X2hhbF9sdGRjLmgKaW5kZXggYTg2MmYyYy4uMGNhYjg0NCAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZjR4eF9oYWxfbHRkYy5oCisrKyBiL0luYy9zdG0zMmY0eHhfaGFsX2x0ZGMuaApAQCAtMjUsMTEgKzI1LDEwIEBACiBleHRlcm4gIkMiIHsKICNlbmRpZgogCi0jaWYgZGVmaW5lZCAoTFREQykKLQogLyogSW5jbHVkZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICNpbmNsdWRlICJzdG0zMmY0eHhfaGFsX2RlZi5oIgogCisjaWYgZGVmaW5lZCAoTFREQykKIAogLyoqIEBhZGR0b2dyb3VwIFNUTTMyRjR4eF9IQUxfRHJpdmVyCiAgICogQHsKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmY0eHhfaGFsX2x0ZGNfZXguaCBiL0luYy9zdG0zMmY0eHhfaGFsX2x0ZGNfZXguaAppbmRleCBiNDY0NTdmLi4zN2E1ZmRmIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmNHh4X2hhbF9sdGRjX2V4LmgKKysrIGIvSW5jL3N0bTMyZjR4eF9oYWxfbHRkY19leC5oCkBAIC0yNSwxMCArMjUsMTEgQEAKIGV4dGVybiAiQyIgewogI2VuZGlmCiAKLSNpZiBkZWZpbmVkIChMVERDKSAmJiBkZWZpbmVkIChEU0kpCi0KIC8qIEluY2x1ZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAjaW5jbHVkZSAic3RtMzJmNHh4X2hhbF9kZWYuaCIKKworI2lmIGRlZmluZWQgKExUREMpICYmIGRlZmluZWQgKERTSSkKKwogI2luY2x1ZGUgInN0bTMyZjR4eF9oYWxfZHNpLmgiCiAKIC8qKiBAYWRkdG9ncm91cCBTVE0zMkY0eHhfSEFMX0RyaXZlcgpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZjR4eF9oYWxfbW1jLmggYi9JbmMvc3RtMzJmNHh4X2hhbF9tbWMuaAppbmRleCA5MGE0NGJlLi5hN2NkOGJlIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmNHh4X2hhbF9tbWMuaAorKysgYi9JbmMvc3RtMzJmNHh4X2hhbF9tbWMuaApAQCAtMTIsMjUgKzEyLDIxIEBACiAgICogVGhpcyBzb2Z0d2FyZSBjb21wb25lbnQgaXMgbGljZW5zZWQgYnkgU1QgdW5kZXIgQlNEIDMtQ2xhdXNlIGxpY2Vuc2UsCiAgICogdGhlICJMaWNlbnNlIjsgWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZQogICAqIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdDoKLSAgKiAgICAgICAgICAgICAgICAgICAgICAgIG9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZQorICAqICAgICAgICAgICAgICAgICAgICAgICBvcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2UKICAgKgogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKi8gCiAKIC8qIERlZmluZSB0byBwcmV2ZW50IHJlY3Vyc2l2ZSBpbmNsdXNpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0jaWZuZGVmIF9fU1RNMzJGNHh4X0hBTF9NTUNfSAotI2RlZmluZSBfX1NUTTMyRjR4eF9IQUxfTU1DX0gKKyNpZm5kZWYgU1RNMzJGNHh4X0hBTF9NTUNfSAorI2RlZmluZSBTVE0zMkY0eHhfSEFMX01NQ19ICisKKyNpZiBkZWZpbmVkKFNESU8pCiAKICNpZmRlZiBfX2NwbHVzcGx1cwogIGV4dGVybiAiQyIgewogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKFNUTTMyRjQwNXh4KSB8fCBkZWZpbmVkKFNUTTMyRjQxNXh4KSB8fCBkZWZpbmVkKFNUTTMyRjQwN3h4KSB8fCBkZWZpbmVkKFNUTTMyRjQxN3h4KSB8fCBcCi0gICAgZGVmaW5lZChTVE0zMkY0Mjd4eCkgfHwgZGVmaW5lZChTVE0zMkY0Mzd4eCkgfHwgZGVmaW5lZChTVE0zMkY0Mjl4eCkgfHwgZGVmaW5lZChTVE0zMkY0Mzl4eCkgfHwgXAotICAgIGRlZmluZWQoU1RNMzJGNDAxeEMpIHx8IGRlZmluZWQoU1RNMzJGNDAxeEUpIHx8IGRlZmluZWQoU1RNMzJGNDExeEUpIHx8IGRlZmluZWQoU1RNMzJGNDQ2eHgpIHx8IFwKLSAgICBkZWZpbmVkKFNUTTMyRjQ2OXh4KSB8fCBkZWZpbmVkKFNUTTMyRjQ3OXh4KSB8fCBkZWZpbmVkKFNUTTMyRjQxMlp4KSB8fCBkZWZpbmVkKFNUTTMyRjQxMlZ4KSB8fCBcCi0gICAgZGVmaW5lZChTVE0zMkY0MTJSeCkgfHwgZGVmaW5lZChTVE0zMkY0MTJDeCkgfHwgZGVmaW5lZChTVE0zMkY0MTN4eCkgfHwgZGVmaW5lZChTVE0zMkY0MjN4eCkKLQogLyogSW5jbHVkZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICNpbmNsdWRlICJzdG0zMmY0eHhfbGxfc2RtbWMuaCIKIApAQCAtMzgsOCArMzQsNyBAQAogICAqIEB7CiAgICovCiAKLS8qKiBAZGVmZ3JvdXAgTU1DIE1NQwotICAqIEBicmllZiBNTUMgSEFMIG1vZHVsZSBkcml2ZXIKKy8qKiBAYWRkdG9ncm91cCBNTUMKICAgKiBAewogICAqLyAKIApAQCAtNjksMTggKzY0LDE3IEBACiAvKiogQGRlZmdyb3VwIE1NQ19FeHBvcnRlZF9UeXBlc19Hcm91cDIgTU1DIENhcmQgU3RhdGUgZW51bWVyYXRpb24gc3RydWN0dXJlCiAgICogQHsKICAgKi8gICAKLXR5cGVkZWYgZW51bQotewotICBIQUxfTU1DX0NBUkRfUkVBRFkgICAgICAgICAgICAgICAgICA9IDB4MDAwMDAwMDFVLCAgLyohPCBDYXJkIHN0YXRlIGlzIHJlYWR5ICAgICAgICAgICAgICAgICAgICAgKi8KLSAgSEFMX01NQ19DQVJEX0lERU5USUZJQ0FUSU9OICAgICAgICAgPSAweDAwMDAwMDAyVSwgIC8qITwgQ2FyZCBpcyBpbiBpZGVudGlmaWNhdGlvbiBzdGF0ZSAgICAgICAgICovCi0gIEhBTF9NTUNfQ0FSRF9TVEFOREJZICAgICAgICAgICAgICAgID0gMHgwMDAwMDAwM1UsICAvKiE8IENhcmQgaXMgaW4gc3RhbmRieSBzdGF0ZSAgICAgICAgICAgICAgICAqLwotICBIQUxfTU1DX0NBUkRfVFJBTlNGRVIgICAgICAgICAgICAgICA9IDB4MDAwMDAwMDRVLCAgLyohPCBDYXJkIGlzIGluIHRyYW5zZmVyIHN0YXRlICAgICAgICAgICAgICAgKi8gIAotICBIQUxfTU1DX0NBUkRfU0VORElORyAgICAgICAgICAgICAgICA9IDB4MDAwMDAwMDVVLCAgLyohPCBDYXJkIGlzIHNlbmRpbmcgYW4gb3BlcmF0aW9uICAgICAgICAgICAgKi8KLSAgSEFMX01NQ19DQVJEX1JFQ0VJVklORyAgICAgICAgICAgICAgPSAweDAwMDAwMDA2VSwgIC8qITwgQ2FyZCBpcyByZWNlaXZpbmcgb3BlcmF0aW9uIGluZm9ybWF0aW9uICovCi0gIEhBTF9NTUNfQ0FSRF9QUk9HUkFNTUlORyAgICAgICAgICAgID0gMHgwMDAwMDAwN1UsICAvKiE8IENhcmQgaXMgaW4gcHJvZ3JhbW1pbmcgc3RhdGUgICAgICAgICAgICAqLwotICBIQUxfTU1DX0NBUkRfRElTQ09OTkVDVEVEICAgICAgICAgICA9IDB4MDAwMDAwMDhVLCAgLyohPCBDYXJkIGlzIGRpc2Nvbm5lY3RlZCAgICAgICAgICAgICAgICAgICAgKi8KLSAgSEFMX01NQ19DQVJEX0VSUk9SICAgICAgICAgICAgICAgICAgPSAweDAwMDAwMEZGVSAgIC8qITwgQ2FyZCByZXNwb25zZSBFcnJvciAgICAgICAgICAgICAgICAgICAgICovCi19SEFMX01NQ19DYXJkU3RhdGVUeXBlRGVmOwordHlwZWRlZiB1aW50MzJfdCBIQUxfTU1DX0NhcmRTdGF0ZVR5cGVEZWY7CisKKyNkZWZpbmUgSEFMX01NQ19DQVJEX1JFQURZICAgICAgICAgIDB4MDAwMDAwMDFVICAvKiE8IENhcmQgc3RhdGUgaXMgcmVhZHkgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBIQUxfTU1DX0NBUkRfSURFTlRJRklDQVRJT04gMHgwMDAwMDAwMlUgIC8qITwgQ2FyZCBpcyBpbiBpZGVudGlmaWNhdGlvbiBzdGF0ZSAgICAgICAgICovCisjZGVmaW5lIEhBTF9NTUNfQ0FSRF9TVEFOREJZICAgICAgICAweDAwMDAwMDAzVSAgLyohPCBDYXJkIGlzIGluIHN0YW5kYnkgc3RhdGUgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSEFMX01NQ19DQVJEX1RSQU5TRkVSICAgICAgIDB4MDAwMDAwMDRVICAvKiE8IENhcmQgaXMgaW4gdHJhbnNmZXIgc3RhdGUgICAgICAgICAgICAgICAqLworI2RlZmluZSBIQUxfTU1DX0NBUkRfU0VORElORyAgICAgICAgMHgwMDAwMDAwNVUgIC8qITwgQ2FyZCBpcyBzZW5kaW5nIGFuIG9wZXJhdGlvbiAgICAgICAgICAgICovCisjZGVmaW5lIEhBTF9NTUNfQ0FSRF9SRUNFSVZJTkcgICAgICAweDAwMDAwMDA2VSAgLyohPCBDYXJkIGlzIHJlY2VpdmluZyBvcGVyYXRpb24gaW5mb3JtYXRpb24gKi8KKyNkZWZpbmUgSEFMX01NQ19DQVJEX1BST0dSQU1NSU5HICAgIDB4MDAwMDAwMDdVICAvKiE8IENhcmQgaXMgaW4gcHJvZ3JhbW1pbmcgc3RhdGUgICAgICAgICAgICAqLworI2RlZmluZSBIQUxfTU1DX0NBUkRfRElTQ09OTkVDVEVEICAgMHgwMDAwMDAwOFUgIC8qITwgQ2FyZCBpcyBkaXNjb25uZWN0ZWQgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEhBTF9NTUNfQ0FSRF9FUlJPUiAgICAgICAgICAweDAwMDAwMEZGVSAgLyohPCBDYXJkIHJlc3BvbnNlIEVycm9yICAgICAgICAgICAgICAgICAgICAgKi8KIC8qKiAKICAgKiBAfQogICAqLwpAQCAtMTIxLDE3ICsxMTUsMTcgQEAKIHR5cGVkZWYgc3RydWN0CiAjZW5kaWYgLyogVVNFX0hBTF9NTUNfUkVHSVNURVJfQ0FMTEJBQ0tTICovCiB7Ci0gIE1NQ19UeXBlRGVmICAgICAgICAgICAgICAgICAqSW5zdGFuY2U7ICAgICAgICAvKiE8IE1NQyByZWdpc3RlcnMgYmFzZSBhZGRyZXNzICAgICAgICAgICAqLworICBNTUNfVHlwZURlZiAgICAgICAgICAgICAgICAgICpJbnN0YW5jZTsgICAgICAgIC8qITwgTU1DIHJlZ2lzdGVycyBiYXNlIGFkZHJlc3MgICAgICAgICAgICovCiAgIAogICBNTUNfSW5pdFR5cGVEZWYgICAgICAgICAgICAgIEluaXQ7ICAgICAgICAgICAgIC8qITwgTU1DIHJlcXVpcmVkIHBhcmFtZXRlcnMgICAgICAgICAgICAgICovCiAgIAogICBIQUxfTG9ja1R5cGVEZWYgICAgICAgICAgICAgIExvY2s7ICAgICAgICAgICAgIC8qITwgTU1DIGxvY2tpbmcgb2JqZWN0ICAgICAgICAgICAgICAgICAgICovCiAgIAotICB1aW50MzJfdCAgICAgICAgICAgICAgICAgICAgICpwVHhCdWZmUHRyOyAgICAgIC8qITwgUG9pbnRlciB0byBNTUMgVHggdHJhbnNmZXIgQnVmZmVyICAgICovCisgIHVpbnQ4X3QgICAgICAgICAgICAgICAgICAgICAgKnBUeEJ1ZmZQdHI7ICAgICAgLyohPCBQb2ludGVyIHRvIE1NQyBUeCB0cmFuc2ZlciBCdWZmZXIgICAgKi8KIAogICB1aW50MzJfdCAgICAgICAgICAgICAgICAgICAgIFR4WGZlclNpemU7ICAgICAgIC8qITwgTU1DIFR4IFRyYW5zZmVyIHNpemUgICAgICAgICAgICAgICAgICovCiAKLSAgdWludDMyX3QgICAgICAgICAgICAgICAgICAgICAqcFJ4QnVmZlB0cjsgICAgICAvKiE8IFBvaW50ZXIgdG8gTU1DIFJ4IHRyYW5zZmVyIEJ1ZmZlciAgICAqLworICB1aW50OF90ICAgICAgICAgICAgICAgICAgICAgICpwUnhCdWZmUHRyOyAgICAgIC8qITwgUG9pbnRlciB0byBNTUMgUnggdHJhbnNmZXIgQnVmZmVyICAgICovCiAKICAgdWludDMyX3QgICAgICAgICAgICAgICAgICAgICBSeFhmZXJTaXplOyAgICAgICAvKiE8IE1NQyBSeCBUcmFuc2ZlciBzaXplICAgICAgICAgICAgICAgICAqLwogICAKQEAgLTE0NiwxMSArMTQwLDEyIEBACiAgIERNQV9IYW5kbGVUeXBlRGVmICAgICAgICAgICAgKmhkbWF0eDsgICAgICAgICAgLyohPCBNTUMgVHggRE1BIGhhbmRsZSBwYXJhbWV0ZXJzICAgICAgICAgKi8KICAgCiAgIEhBTF9NTUNfQ2FyZEluZm9UeXBlRGVmICAgICAgTW1jQ2FyZDsgICAgICAgICAgLyohPCBNTUMgQ2FyZCBpbmZvcm1hdGlvbiAgICAgICAgICAgICAgICAgKi8KLSAgCisKICAgdWludDMyX3QgICAgICAgICAgICAgICAgICAgICBDU0RbNFVdOyAgICAgICAgICAvKiE8IE1NQyBjYXJkIHNwZWNpZmljIGRhdGEgdGFibGUgICAgICAgICAqLwogICAKICAgdWludDMyX3QgICAgICAgICAgICAgICAgICAgICBDSURbNFVdOyAgICAgICAgICAvKiE8IE1NQyBjYXJkIGlkZW50aWZpY2F0aW9uIG51bWJlciB0YWJsZSAqLwotICNpZiBkZWZpbmVkIChVU0VfSEFMX01NQ19SRUdJU1RFUl9DQUxMQkFDS1MpICYmIChVU0VfSEFMX01NQ19SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMVUpCisgIAorI2lmIGRlZmluZWQgKFVTRV9IQUxfTU1DX1JFR0lTVEVSX0NBTExCQUNLUykgJiYgKFVTRV9IQUxfTU1DX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxVSkKICAgdm9pZCAoKiBUeENwbHRDYWxsYmFjaykgICAgICAgICAgICAgICAgIChzdHJ1Y3QgX19NTUNfSGFuZGxlVHlwZURlZiAqaG1tYyk7CiAgIHZvaWQgKCogUnhDcGx0Q2FsbGJhY2spICAgICAgICAgICAgICAgICAoc3RydWN0IF9fTU1DX0hhbmRsZVR5cGVEZWYgKmhtbWMpOwogICB2b2lkICgqIEVycm9yQ2FsbGJhY2spICAgICAgICAgICAgICAgICAgKHN0cnVjdCBfX01NQ19IYW5kbGVUeXBlRGVmICpobW1jKTsKQEAgLTE5OSw3ICsxOTQsNyBAQAogICBfX0lPIHVpbnQ4X3QgIFdyaXRlQmxvY2tQYVBhcnRpYWw7ICAvKiE8IFBhcnRpYWwgYmxvY2tzIGZvciB3cml0ZSBhbGxvd2VkICAgICAgKi8KICAgX19JTyB1aW50OF90ICBSZXNlcnZlZDM7ICAgICAgICAgICAgLyohPCBSZXNlcnZlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIF9fSU8gdWludDhfdCAgQ29udGVudFByb3RlY3RBcHBsaTsgIC8qITwgQ29udGVudCBwcm90ZWN0aW9uIGFwcGxpY2F0aW9uICAgICAgICAqLwotICBfX0lPIHVpbnQ4X3QgIEZpbGVGb3JtYXRHcm91b3A7ICAgICAvKiE8IEZpbGUgZm9ybWF0IGdyb3VwICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50OF90ICBGaWxlRm9ybWF0R3JvdXA7ICAgICAgLyohPCBGaWxlIGZvcm1hdCBncm91cCAgICAgICAgICAgICAgICAgICAgICovCiAgIF9fSU8gdWludDhfdCAgQ29weUZsYWc7ICAgICAgICAgICAgIC8qITwgQ29weSBmbGFnIChPVFApICAgICAgICAgICAgICAgICAgICAgICAqLwogICBfX0lPIHVpbnQ4X3QgIFBlcm1XclByb3RlY3Q7ICAgICAgICAvKiE8IFBlcm1hbmVudCB3cml0ZSBwcm90ZWN0aW9uICAgICAgICAgICAgKi8KICAgX19JTyB1aW50OF90ICBUZW1wV3JQcm90ZWN0OyAgICAgICAgLyohPCBUZW1wb3Jhcnkgd3JpdGUgcHJvdGVjdGlvbiAgICAgICAgICAgICovCkBAIC0yMzQsMjggKzIyOSw4IEBACiAgICogQH0KICAgKi8KIAotLyoqIEBkZWZncm91cCBNTUNfRXhwb3J0ZWRfVHlwZXNfR3JvdXA2IE1NQyBDYXJkIFN0YXR1cyByZXR1cm5lZCBieSBBQ01EMTMgCi0gICogQHsKLSAgKi8KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIF9fSU8gdWludDhfdCAgRGF0YUJ1c1dpZHRoOyAgICAgICAgICAgLyohPCBTaG93cyB0aGUgY3VycmVudGx5IGRlZmluZWQgZGF0YSBidXMgd2lkdGggICAgICAgICAgICAgICAgICovCi0gIF9fSU8gdWludDhfdCAgU2VjdXJlZE1vZGU7ICAgICAgICAgICAgLyohPCBDYXJkIGlzIGluIHNlY3VyZWQgbW9kZSBvZiBvcGVyYXRpb24gICAgICAgICAgICAgICAgICAgICAgICovCi0gIF9fSU8gdWludDE2X3QgQ2FyZFR5cGU7ICAgICAgICAgICAgICAgLyohPCBDYXJyaWVzIGluZm9ybWF0aW9uIGFib3V0IGNhcmQgdHlwZSAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIF9fSU8gdWludDMyX3QgUHJvdGVjdGVkQXJlYVNpemU7ICAgICAgLyohPCBDYXJyaWVzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjYXBhY2l0eSBvZiBwcm90ZWN0ZWQgYXJlYSAgICovCi0gIF9fSU8gdWludDhfdCAgU3BlZWRDbGFzczsgICAgICAgICAgICAgLyohPCBDYXJyaWVzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzcGVlZCBjbGFzcyBvZiB0aGUgY2FyZCAgICAgICovCi0gIF9fSU8gdWludDhfdCAgUGVyZm9ybWFuY2VNb3ZlOyAgICAgICAgLyohPCBDYXJyaWVzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjYXJkJ3MgcGVyZm9ybWFuY2UgbW92ZSAgICAgICovCi0gIF9fSU8gdWludDhfdCAgQWxsb2NhdGlvblVuaXRTaXplOyAgICAgLyohPCBDYXJyaWVzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjYXJkJ3MgYWxsb2NhdGlvbiB1bml0IHNpemUgICovCi0gIF9fSU8gdWludDE2X3QgRXJhc2VTaXplOyAgICAgICAgICAgICAgLyohPCBEZXRlcm1pbmVzIHRoZSBudW1iZXIgb2YgQVVzIHRvIGJlIGVyYXNlZCBpbiBvbmUgb3BlcmF0aW9uICovCi0gIF9fSU8gdWludDhfdCAgRXJhc2VUaW1lb3V0OyAgICAgICAgICAgLyohPCBEZXRlcm1pbmVzIHRoZSB0aW1lb3V0IGZvciBhbnkgbnVtYmVyIG9mIEFVIGVyYXNlICAgICAgICAgICovCi0gIF9fSU8gdWludDhfdCAgRXJhc2VPZmZzZXQ7ICAgICAgICAgICAgLyohPCBDYXJyaWVzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBlcmFzZSBvZmZzZXQgICAgICAgICAgICAgICAgICovCi0KLX1IQUxfTU1DX0NhcmRTdGF0dXNUeXBlRGVmOwotLyoqIAotICAqIEB9Ci0gICovCiAjaWYgZGVmaW5lZCAoVVNFX0hBTF9NTUNfUkVHSVNURVJfQ0FMTEJBQ0tTKSAmJiAoVVNFX0hBTF9NTUNfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDFVKQotLyoqIEBkZWZncm91cCBNTUNfRXhwb3J0ZWRfVHlwZXNfR3JvdXA3IE1NQyBDYWxsYmFjayBJRCBlbnVtZXJhdGlvbiBkZWZpbml0aW9uCisvKiogQGRlZmdyb3VwIE1NQ19FeHBvcnRlZF9UeXBlc19Hcm91cDYgTU1DIENhbGxiYWNrIElEIGVudW1lcmF0aW9uIGRlZmluaXRpb24gCiAgICogQHsKICAgKi8KIHR5cGVkZWYgZW51bQpAQCAtMjY4LDE1ICsyNDMsMTUgQEAKICAgSEFMX01NQ19NU1BfSU5JVF9DQl9JRCAgICAgICAgICAgICAgICA9IDB4MTBVLCAgLyohPCBNTUMgTXNwSW5pdCBDYWxsYmFjayBJRCAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICBIQUxfTU1DX01TUF9ERUlOSVRfQ0JfSUQgICAgICAgICAgICAgID0gMHgxMVUgICAvKiE8IE1NQyBNc3BEZUluaXQgQ2FsbGJhY2sgSUQgICAgICAgICAgICAgICAgICAgICAgICovCiB9SEFMX01NQ19DYWxsYmFja0lEVHlwZURlZjsKLS8qKgorLyoqIAogICAqIEB9CiAgICovCiAKLS8qKiBAZGVmZ3JvdXAgTU1DX0V4cG9ydGVkX1R5cGVzX0dyb3VwNyBNTUMgQ2FsbGJhY2sgcG9pbnRlciBkZWZpbml0aW9uCisvKiogQGRlZmdyb3VwIE1NQ19FeHBvcnRlZF9UeXBlc19Hcm91cDcgTU1DIENhbGxiYWNrIHBvaW50ZXIgZGVmaW5pdGlvbiAKICAgKiBAewogICAqLwogdHlwZWRlZiB2b2lkICgqcE1NQ19DYWxsYmFja1R5cGVEZWYpICAgICAgICAgICAoTU1DX0hhbmRsZVR5cGVEZWYgKmhtbWMpOwotLyoqCisvKiogCiAgICogQH0KICAgKi8KICNlbmRpZgpAQCAtMjg5LDkgKzI2NCw3IEBACiAgICogQHsKICAgKi8KIAotI2RlZmluZSBCTE9DS1NJWkUgICA1MTJVICAgICAgICAvKiE8IEJsb2NrIHNpemUgaXMgNTEyIGJ5dGVzICovCi0gICAgCi0jZGVmaW5lIENBUEFDSVRZICAgIDB4NDAwMDAwVSAgIC8qITwgTG9nIEJsb2NrIE51dW1iZXIgZm9yIDIgRyBieXRlcyBDYXJkcyAqLworI2RlZmluZSBNTUNfQkxPQ0tTSVpFICAgICAgICAgICAgICA1MTJVICAvKiE8IEJsb2NrIHNpemUgaXMgNTEyIGJ5dGVzICovCiAKIC8qKiBAZGVmZ3JvdXAgTU1DX0V4cG9ydGVkX0NvbnN0YW5zdHNfR3JvdXAxIE1NQyBFcnJvciBzdGF0dXMgZW51bWVyYXRpb24gU3RydWN0dXJlIGRlZmluaXRpb24gCiAgICogQHsKQEAgLTMzMiw2ICszMDUsNyBAQAogI2RlZmluZSBIQUxfTU1DX0VSUk9SX0JVU1kgICAgICAgICAgICAgICAgICAgICBTRE1NQ19FUlJPUl9CVVNZICAgICAgICAgICAgICAgICAgICAvKiE8IEVycm9yIHdoZW4gdHJhbnNmZXIgcHJvY2VzcyBpcyBidXN5ICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gCiAjZGVmaW5lIEhBTF9NTUNfRVJST1JfRE1BICAgICAgICAgICAgICAgICAgICAgIFNETU1DX0VSUk9SX0RNQSAgICAgICAgICAgICAgICAgICAgIC8qITwgRXJyb3Igd2hpbGUgRE1BIHRyYW5zZmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBIQUxfTU1DX0VSUk9SX1RJTUVPVVQgICAgICAgICAgICAgICAgICBTRE1NQ19FUlJPUl9USU1FT1VUICAgICAgICAgICAgICAgICAvKiE8IFRpbWVvdXQgZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogI2lmIGRlZmluZWQgKFVTRV9IQUxfTU1DX1JFR0lTVEVSX0NBTExCQUNLUykgJiYgKFVTRV9IQUxfTU1DX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxVSkKICNkZWZpbmUgSEFMX01NQ19FUlJPUl9JTlZBTElEX0NBTExCQUNLICAgICAgICAgU0RNTUNfRVJST1JfSU5WQUxJRF9QQVJBTUVURVIgICAgICAgLyohPCBJbnZhbGlkIGNhbGxiYWNrIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAjZW5kaWYKQEAgLTMzOSwxNiArMzEzLDE2IEBACiAgICogQH0KICAgKi8KICAKLS8qKiBAZGVmZ3JvdXAgTU1DX0V4cG9ydGVkX0NvbnN0YW5zdHNfR3JvdXAyIE1NQyBjb250ZXh0IGVudW1lcmF0aW9uIHN0cnVjdHVyZQorLyoqIEBkZWZncm91cCBNTUNfRXhwb3J0ZWRfQ29uc3RhbnN0c19Hcm91cDIgTU1DIGNvbnRleHQgZW51bWVyYXRpb24KICAgKiBAewogICAqLyAKLSNkZWZpbmUgICBNTUNfQ09OVEVYVF9OT05FICAgICAgICAgICAgICAgICAweDAwMDAwMDAwVSAgLyohPCBOb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSAgIE1NQ19DT05URVhUX1JFQURfU0lOR0xFX0JMT0NLICAgIDB4MDAwMDAwMDFVICAvKiE8IFJlYWQgc2luZ2xlIGJsb2NrIG9wZXJhdGlvbiAgICAgICovCi0jZGVmaW5lICAgTU1DX0NPTlRFWFRfUkVBRF9NVUxUSVBMRV9CTE9DSyAgMHgwMDAwMDAwMlUgIC8qITwgUmVhZCBtdWx0aXBsZSBibG9ja3Mgb3BlcmF0aW9uICAgKi8KLSNkZWZpbmUgICBNTUNfQ09OVEVYVF9XUklURV9TSU5HTEVfQkxPQ0sgICAweDAwMDAwMDEwVSAgLyohPCBXcml0ZSBzaW5nbGUgYmxvY2sgb3BlcmF0aW9uICAgICAqLwotI2RlZmluZSAgIE1NQ19DT05URVhUX1dSSVRFX01VTFRJUExFX0JMT0NLIDB4MDAwMDAwMjBVICAvKiE8IFdyaXRlIG11bHRpcGxlIGJsb2NrcyBvcGVyYXRpb24gICovCi0jZGVmaW5lICAgTU1DX0NPTlRFWFRfSVQgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOFUgIC8qITwgUHJvY2VzcyBpbiBJbnRlcnJ1cHQgbW9kZSAgICAgICAgKi8KLSNkZWZpbmUgICBNTUNfQ09OVEVYVF9ETUEgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwVSAgLyohPCBQcm9jZXNzIGluIERNQSBtb2RlICAgICAgICAgICAgICAqLyAgCisjZGVmaW5lICAgTU1DX0NPTlRFWFRfTk9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwVSAgIC8qITwgTm9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgICBNTUNfQ09OVEVYVF9SRUFEX1NJTkdMRV9CTE9DSyAgICAgICAgICAgICAgIDB4MDAwMDAwMDFVICAgLyohPCBSZWFkIHNpbmdsZSBibG9jayBvcGVyYXRpb24gICAgICAqLworI2RlZmluZSAgIE1NQ19DT05URVhUX1JFQURfTVVMVElQTEVfQkxPQ0sgICAgICAgICAgICAgMHgwMDAwMDAwMlUgICAvKiE8IFJlYWQgbXVsdGlwbGUgYmxvY2tzIG9wZXJhdGlvbiAgICovCisjZGVmaW5lICAgTU1DX0NPTlRFWFRfV1JJVEVfU0lOR0xFX0JMT0NLICAgICAgICAgICAgICAweDAwMDAwMDEwVSAgIC8qITwgV3JpdGUgc2luZ2xlIGJsb2NrIG9wZXJhdGlvbiAgICAgKi8KKyNkZWZpbmUgICBNTUNfQ09OVEVYVF9XUklURV9NVUxUSVBMRV9CTE9DSyAgICAgICAgICAgIDB4MDAwMDAwMjBVICAgLyohPCBXcml0ZSBtdWx0aXBsZSBibG9ja3Mgb3BlcmF0aW9uICAqLworI2RlZmluZSAgIE1NQ19DT05URVhUX0lUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOFUgICAvKiE8IFByb2Nlc3MgaW4gSW50ZXJydXB0IG1vZGUgICAgICAgICovCisjZGVmaW5lICAgTU1DX0NPTlRFWFRfRE1BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwVSAgIC8qITwgUHJvY2VzcyBpbiBETUEgbW9kZSAgICAgICAgICAgICAgKi8KIAogLyoqCiAgICogQH0KQEAgLTM3Miw4ICszNDYsOSBAQAogLyoqIEBkZWZncm91cCBNTUNfRXhwb3J0ZWRfQ29uc3RhbnN0c19Hcm91cDQgTU1DIE1lbW9yeSBDYXJkcwogICAqIEB7CiAgICovCi0jZGVmaW5lICBNTUNfSElHSF9WT0xUQUdFX0NBUkQgICAgIDB4MDAwMDAwMDBVCi0jZGVmaW5lICBNTUNfRFVBTF9WT0xUQUdFX0NBUkQgICAgIDB4MDAwMDAwMDFVCisjZGVmaW5lICBNTUNfTE9XX0NBUEFDSVRZX0NBUkQgICAgICAgICAgICAgICAgMHgwMDAwMDAwMFUgICAgLyohPCBNTUMgQ2FyZCBDYXBhY2l0eSA8PTJHYnl0ZXMgICAqLworI2RlZmluZSAgTU1DX0hJR0hfQ0FQQUNJVFlfQ0FSRCAgICAgICAgICAgICAgIDB4MDAwMDAwMDFVICAgIC8qITwgTU1DIENhcmQgQ2FwYWNpdHkgPjJHYnl0ZXMgYW5kIDwyVGJ5dGVzICAgKi8KKwogLyoqCiAgICogQH0KICAgKi8KQEAgLTQyNyw4ICs0MDIsOCBAQAogIAogLyoqCiAgICogQGJyaWVmICBFbmFibGUgdGhlIE1NQyBkZXZpY2UgaW50ZXJydXB0LgotICAqIEBwYXJhbSAgX19IQU5ETEVfXyBNTUMgSGFuZGxlICAKLSAgKiBAcGFyYW0gIF9fSU5URVJSVVBUX18gc3BlY2lmaWVzIHRoZSBTRE1NQyBpbnRlcnJ1cHQgc291cmNlcyB0byBiZSBlbmFibGVkLgorICAqIEBwYXJhbSAgX19IQU5ETEVfXzogTU1DIEhhbmRsZSAgCisgICogQHBhcmFtICBfX0lOVEVSUlVQVF9fOiBzcGVjaWZpZXMgdGhlIFNETU1DIGludGVycnVwdCBzb3VyY2VzIHRvIGJlIGVuYWJsZWQuCiAgICogICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9yIGEgY29tYmluYXRpb24gb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAgICogICAgICAgICAgICBAYXJnIFNESU9fSVRfQ0NSQ0ZBSUw6IENvbW1hbmQgcmVzcG9uc2UgcmVjZWl2ZWQgKENSQyBjaGVjayBmYWlsZWQpIGludGVycnVwdAogICAqICAgICAgICAgICAgQGFyZyBTRElPX0lUX0RDUkNGQUlMOiBEYXRhIGJsb2NrIHNlbnQvcmVjZWl2ZWQgKENSQyBjaGVjayBmYWlsZWQpIGludGVycnVwdApAQCAtNDM4LDcgKzQxMyw3IEBACiAgICogICAgICAgICAgICBAYXJnIFNESU9fSVRfUlhPVkVSUjogIFJlY2VpdmVkIEZJRk8gb3ZlcnJ1biBlcnJvciBpbnRlcnJ1cHQKICAgKiAgICAgICAgICAgIEBhcmcgU0RJT19JVF9DTURSRU5EOiAgQ29tbWFuZCByZXNwb25zZSByZWNlaXZlZCAoQ1JDIGNoZWNrIHBhc3NlZCkgaW50ZXJydXB0CiAgICogICAgICAgICAgICBAYXJnIFNESU9fSVRfQ01EU0VOVDogIENvbW1hbmQgc2VudCAobm8gcmVzcG9uc2UgcmVxdWlyZWQpIGludGVycnVwdAotICAqICAgICAgICAgICAgQGFyZyBTRElPX0lUX0RBVEFFTkQ6ICBEYXRhIGVuZCAoZGF0YSBjb3VudGVyLCBTRElEQ09VTlQsIGlzIHplcm8pIGludGVycnVwdAorICAqICAgICAgICAgICAgQGFyZyBTRElPX0lUX0RBVEFFTkQ6ICBEYXRhIGVuZCAoZGF0YSBjb3VudGVyLCBEQVRBQ09VTlQsIGlzIHplcm8pIGludGVycnVwdAogICAqICAgICAgICAgICAgQGFyZyBTRElPX0lUX0RCQ0tFTkQ6ICBEYXRhIGJsb2NrIHNlbnQvcmVjZWl2ZWQgKENSQyBjaGVjayBwYXNzZWQpIGludGVycnVwdAogICAqICAgICAgICAgICAgQGFyZyBTRElPX0lUX0NNREFDVDogICBDb21tYW5kIHRyYW5zZmVyIGluIHByb2dyZXNzIGludGVycnVwdAogICAqICAgICAgICAgICAgQGFyZyBTRElPX0lUX1RYQUNUOiAgICBEYXRhIHRyYW5zbWl0IGluIHByb2dyZXNzIGludGVycnVwdApAQCAtNDU4LDggKzQzMyw4IEBACiAKIC8qKgogICAqIEBicmllZiAgRGlzYWJsZSB0aGUgTU1DIGRldmljZSBpbnRlcnJ1cHQuCi0gICogQHBhcmFtICBfX0hBTkRMRV9fIE1NQyBIYW5kbGUgICAKLSAgKiBAcGFyYW0gIF9fSU5URVJSVVBUX18gc3BlY2lmaWVzIHRoZSBTRE1NQyBpbnRlcnJ1cHQgc291cmNlcyB0byBiZSBkaXNhYmxlZC4KKyAgKiBAcGFyYW0gIF9fSEFORExFX186IE1NQyBIYW5kbGUgICAKKyAgKiBAcGFyYW0gIF9fSU5URVJSVVBUX186IHNwZWNpZmllcyB0aGUgU0RNTUMgaW50ZXJydXB0IHNvdXJjZXMgdG8gYmUgZGlzYWJsZWQuCiAgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvciBhIGNvbWJpbmF0aW9uIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICAqICAgICAgICAgICAgQGFyZyBTRElPX0lUX0NDUkNGQUlMOiBDb21tYW5kIHJlc3BvbnNlIHJlY2VpdmVkIChDUkMgY2hlY2sgZmFpbGVkKSBpbnRlcnJ1cHQKICAgKiAgICAgICAgICAgIEBhcmcgU0RJT19JVF9EQ1JDRkFJTDogRGF0YSBibG9jayBzZW50L3JlY2VpdmVkIChDUkMgY2hlY2sgZmFpbGVkKSBpbnRlcnJ1cHQKQEAgLTQ2OSw3ICs0NDQsNyBAQAogICAqICAgICAgICAgICAgQGFyZyBTRElPX0lUX1JYT1ZFUlI6ICBSZWNlaXZlZCBGSUZPIG92ZXJydW4gZXJyb3IgaW50ZXJydXB0CiAgICogICAgICAgICAgICBAYXJnIFNESU9fSVRfQ01EUkVORDogIENvbW1hbmQgcmVzcG9uc2UgcmVjZWl2ZWQgKENSQyBjaGVjayBwYXNzZWQpIGludGVycnVwdAogICAqICAgICAgICAgICAgQGFyZyBTRElPX0lUX0NNRFNFTlQ6ICBDb21tYW5kIHNlbnQgKG5vIHJlc3BvbnNlIHJlcXVpcmVkKSBpbnRlcnJ1cHQKLSAgKiAgICAgICAgICAgIEBhcmcgU0RJT19JVF9EQVRBRU5EOiAgRGF0YSBlbmQgKGRhdGEgY291bnRlciwgU0RJRENPVU5ULCBpcyB6ZXJvKSBpbnRlcnJ1cHQKKyAgKiAgICAgICAgICAgIEBhcmcgU0RJT19JVF9EQVRBRU5EOiAgRGF0YSBlbmQgKGRhdGEgY291bnRlciwgREFUQUNPVU5ULCBpcyB6ZXJvKSBpbnRlcnJ1cHQKICAgKiAgICAgICAgICAgIEBhcmcgU0RJT19JVF9EQkNLRU5EOiAgRGF0YSBibG9jayBzZW50L3JlY2VpdmVkIChDUkMgY2hlY2sgcGFzc2VkKSBpbnRlcnJ1cHQKICAgKiAgICAgICAgICAgIEBhcmcgU0RJT19JVF9DTURBQ1Q6ICAgQ29tbWFuZCB0cmFuc2ZlciBpbiBwcm9ncmVzcyBpbnRlcnJ1cHQKICAgKiAgICAgICAgICAgIEBhcmcgU0RJT19JVF9UWEFDVDogICAgRGF0YSB0cmFuc21pdCBpbiBwcm9ncmVzcyBpbnRlcnJ1cHQKQEAgLTQ4OSw4ICs0NjQsOCBAQAogCiAvKioKICAgKiBAYnJpZWYgIENoZWNrIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBNTUMgZmxhZyBpcyBzZXQgb3Igbm90LiAKLSAgKiBAcGFyYW0gIF9fSEFORExFX18gTU1DIEhhbmRsZSAgIAotICAqIEBwYXJhbSAgX19GTEFHX18gc3BlY2lmaWVzIHRoZSBmbGFnIHRvIGNoZWNrLiAKKyAgKiBAcGFyYW0gIF9fSEFORExFX186IE1NQyBIYW5kbGUgICAKKyAgKiBAcGFyYW0gIF9fRkxBR19fOiBzcGVjaWZpZXMgdGhlIGZsYWcgdG8gY2hlY2suIAogICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAgICogICAgICAgICAgICBAYXJnIFNESU9fRkxBR19DQ1JDRkFJTDogQ29tbWFuZCByZXNwb25zZSByZWNlaXZlZCAoQ1JDIGNoZWNrIGZhaWxlZCkKICAgKiAgICAgICAgICAgIEBhcmcgU0RJT19GTEFHX0RDUkNGQUlMOiBEYXRhIGJsb2NrIHNlbnQvcmVjZWl2ZWQgKENSQyBjaGVjayBmYWlsZWQpCkBAIC01MDAsNyArNDc1LDcgQEAKICAgKiAgICAgICAgICAgIEBhcmcgU0RJT19GTEFHX1JYT1ZFUlI6ICBSZWNlaXZlZCBGSUZPIG92ZXJydW4gZXJyb3IKICAgKiAgICAgICAgICAgIEBhcmcgU0RJT19GTEFHX0NNRFJFTkQ6ICBDb21tYW5kIHJlc3BvbnNlIHJlY2VpdmVkIChDUkMgY2hlY2sgcGFzc2VkKQogICAqICAgICAgICAgICAgQGFyZyBTRElPX0ZMQUdfQ01EU0VOVDogIENvbW1hbmQgc2VudCAobm8gcmVzcG9uc2UgcmVxdWlyZWQpCi0gICogICAgICAgICAgICBAYXJnIFNESU9fRkxBR19EQVRBRU5EOiAgRGF0YSBlbmQgKGRhdGEgY291bnRlciwgU0RJRENPVU5ULCBpcyB6ZXJvKQorICAqICAgICAgICAgICAgQGFyZyBTRElPX0ZMQUdfREFUQUVORDogIERhdGEgZW5kIChkYXRhIGNvdW50ZXIsIERBVEFDT1VOVCwgaXMgemVybykKICAgKiAgICAgICAgICAgIEBhcmcgU0RJT19GTEFHX0RCQ0tFTkQ6ICBEYXRhIGJsb2NrIHNlbnQvcmVjZWl2ZWQgKENSQyBjaGVjayBwYXNzZWQpCiAgICogICAgICAgICAgICBAYXJnIFNESU9fRkxBR19DTURBQ1Q6ICAgQ29tbWFuZCB0cmFuc2ZlciBpbiBwcm9ncmVzcwogICAqICAgICAgICAgICAgQGFyZyBTRElPX0ZMQUdfVFhBQ1Q6ICAgIERhdGEgdHJhbnNtaXQgaW4gcHJvZ3Jlc3MKQEAgLTUyMCw4ICs0OTUsOCBAQAogCiAvKioKICAgKiBAYnJpZWYgIENsZWFyIHRoZSBNTUMncyBwZW5kaW5nIGZsYWdzLgotICAqIEBwYXJhbSAgX19IQU5ETEVfXyBNTUMgSGFuZGxlICAKLSAgKiBAcGFyYW0gIF9fRkxBR19fIHNwZWNpZmllcyB0aGUgZmxhZyB0byBjbGVhci4gIAorICAqIEBwYXJhbSAgX19IQU5ETEVfXzogTU1DIEhhbmRsZSAgCisgICogQHBhcmFtICBfX0ZMQUdfXzogc3BlY2lmaWVzIHRoZSBmbGFnIHRvIGNsZWFyLiAgCiAgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvciBhIGNvbWJpbmF0aW9uIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICAqICAgICAgICAgICAgQGFyZyBTRElPX0ZMQUdfQ0NSQ0ZBSUw6IENvbW1hbmQgcmVzcG9uc2UgcmVjZWl2ZWQgKENSQyBjaGVjayBmYWlsZWQpCiAgICogICAgICAgICAgICBAYXJnIFNESU9fRkxBR19EQ1JDRkFJTDogRGF0YSBibG9jayBzZW50L3JlY2VpdmVkIChDUkMgY2hlY2sgZmFpbGVkKQpAQCAtNTMxLDcgKzUwNiw3IEBACiAgICogICAgICAgICAgICBAYXJnIFNESU9fRkxBR19SWE9WRVJSOiAgUmVjZWl2ZWQgRklGTyBvdmVycnVuIGVycm9yCiAgICogICAgICAgICAgICBAYXJnIFNESU9fRkxBR19DTURSRU5EOiAgQ29tbWFuZCByZXNwb25zZSByZWNlaXZlZCAoQ1JDIGNoZWNrIHBhc3NlZCkKICAgKiAgICAgICAgICAgIEBhcmcgU0RJT19GTEFHX0NNRFNFTlQ6ICBDb21tYW5kIHNlbnQgKG5vIHJlc3BvbnNlIHJlcXVpcmVkKQotICAqICAgICAgICAgICAgQGFyZyBTRElPX0ZMQUdfREFUQUVORDogIERhdGEgZW5kIChkYXRhIGNvdW50ZXIsIFNESURDT1VOVCwgaXMgemVybykKKyAgKiAgICAgICAgICAgIEBhcmcgU0RJT19GTEFHX0RBVEFFTkQ6ICBEYXRhIGVuZCAoZGF0YSBjb3VudGVyLCBEQVRBQ09VTlQsIGlzIHplcm8pCiAgICogICAgICAgICAgICBAYXJnIFNESU9fRkxBR19EQkNLRU5EOiAgRGF0YSBibG9jayBzZW50L3JlY2VpdmVkIChDUkMgY2hlY2sgcGFzc2VkKQogICAqICAgICAgICAgICAgQGFyZyBTRElPX0ZMQUdfU0RJT0lUOiAgIFNEIEkvTyBpbnRlcnJ1cHQgcmVjZWl2ZWQKICAgKiBAcmV0dmFsIE5vbmUKQEAgLTU0MCw4ICs1MTUsOCBAQAogCiAvKioKICAgKiBAYnJpZWYgIENoZWNrIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBNTUMgaW50ZXJydXB0IGhhcyBvY2N1cnJlZCBvciBub3QuCi0gICogQHBhcmFtICBfX0hBTkRMRV9fIE1NQyBIYW5kbGUgICAKLSAgKiBAcGFyYW0gIF9fSU5URVJSVVBUX18gc3BlY2lmaWVzIHRoZSBTRE1NQyBpbnRlcnJ1cHQgc291cmNlIHRvIGNoZWNrLiAKKyAgKiBAcGFyYW0gIF9fSEFORExFX186IE1NQyBIYW5kbGUgICAKKyAgKiBAcGFyYW0gIF9fSU5URVJSVVBUX186IHNwZWNpZmllcyB0aGUgU0RNTUMgaW50ZXJydXB0IHNvdXJjZSB0byBjaGVjay4gCiAgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAgKiAgICAgICAgICAgIEBhcmcgU0RJT19JVF9DQ1JDRkFJTDogQ29tbWFuZCByZXNwb25zZSByZWNlaXZlZCAoQ1JDIGNoZWNrIGZhaWxlZCkgaW50ZXJydXB0CiAgICogICAgICAgICAgICBAYXJnIFNESU9fSVRfRENSQ0ZBSUw6IERhdGEgYmxvY2sgc2VudC9yZWNlaXZlZCAoQ1JDIGNoZWNrIGZhaWxlZCkgaW50ZXJydXB0CkBAIC01NTEsNyArNTI2LDcgQEAKICAgKiAgICAgICAgICAgIEBhcmcgU0RJT19JVF9SWE9WRVJSOiAgUmVjZWl2ZWQgRklGTyBvdmVycnVuIGVycm9yIGludGVycnVwdAogICAqICAgICAgICAgICAgQGFyZyBTRElPX0lUX0NNRFJFTkQ6ICBDb21tYW5kIHJlc3BvbnNlIHJlY2VpdmVkIChDUkMgY2hlY2sgcGFzc2VkKSBpbnRlcnJ1cHQKICAgKiAgICAgICAgICAgIEBhcmcgU0RJT19JVF9DTURTRU5UOiAgQ29tbWFuZCBzZW50IChubyByZXNwb25zZSByZXF1aXJlZCkgaW50ZXJydXB0Ci0gICogICAgICAgICAgICBAYXJnIFNESU9fSVRfREFUQUVORDogIERhdGEgZW5kIChkYXRhIGNvdW50ZXIsIFNESURDT1VOVCwgaXMgemVybykgaW50ZXJydXB0CisgICogICAgICAgICAgICBAYXJnIFNESU9fSVRfREFUQUVORDogIERhdGEgZW5kIChkYXRhIGNvdW50ZXIsIERBVEFDT1VOVCwgaXMgemVybykgaW50ZXJydXB0CiAgICogICAgICAgICAgICBAYXJnIFNESU9fSVRfREJDS0VORDogIERhdGEgYmxvY2sgc2VudC9yZWNlaXZlZCAoQ1JDIGNoZWNrIHBhc3NlZCkgaW50ZXJydXB0CiAgICogICAgICAgICAgICBAYXJnIFNESU9fSVRfQ01EQUNUOiAgIENvbW1hbmQgdHJhbnNmZXIgaW4gcHJvZ3Jlc3MgaW50ZXJydXB0CiAgICogICAgICAgICAgICBAYXJnIFNESU9fSVRfVFhBQ1Q6ICAgIERhdGEgdHJhbnNtaXQgaW4gcHJvZ3Jlc3MgaW50ZXJydXB0CkBAIC01NzEsOCArNTQ2LDggQEAKIAogLyoqCiAgICogQGJyaWVmICBDbGVhciB0aGUgTU1DJ3MgaW50ZXJydXB0IHBlbmRpbmcgYml0cy4KLSAgKiBAcGFyYW0gIF9fSEFORExFX18gTU1DIEhhbmRsZQotICAqIEBwYXJhbSAgX19JTlRFUlJVUFRfXyBzcGVjaWZpZXMgdGhlIGludGVycnVwdCBwZW5kaW5nIGJpdCB0byBjbGVhci4gCisgICogQHBhcmFtICBfX0hBTkRMRV9fOiBNTUMgSGFuZGxlCisgICogQHBhcmFtICBfX0lOVEVSUlVQVF9fOiBzcGVjaWZpZXMgdGhlIGludGVycnVwdCBwZW5kaW5nIGJpdCB0byBjbGVhci4gCiAgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvciBhIGNvbWJpbmF0aW9uIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICAqICAgICAgICAgICAgQGFyZyBTRElPX0lUX0NDUkNGQUlMOiBDb21tYW5kIHJlc3BvbnNlIHJlY2VpdmVkIChDUkMgY2hlY2sgZmFpbGVkKSBpbnRlcnJ1cHQKICAgKiAgICAgICAgICAgIEBhcmcgU0RJT19JVF9EQ1JDRkFJTDogRGF0YSBibG9jayBzZW50L3JlY2VpdmVkIChDUkMgY2hlY2sgZmFpbGVkKSBpbnRlcnJ1cHQKQEAgLTU4Miw3ICs1NTcsMTIgQEAKICAgKiAgICAgICAgICAgIEBhcmcgU0RJT19JVF9SWE9WRVJSOiAgUmVjZWl2ZWQgRklGTyBvdmVycnVuIGVycm9yIGludGVycnVwdAogICAqICAgICAgICAgICAgQGFyZyBTRElPX0lUX0NNRFJFTkQ6ICBDb21tYW5kIHJlc3BvbnNlIHJlY2VpdmVkIChDUkMgY2hlY2sgcGFzc2VkKSBpbnRlcnJ1cHQKICAgKiAgICAgICAgICAgIEBhcmcgU0RJT19JVF9DTURTRU5UOiAgQ29tbWFuZCBzZW50IChubyByZXNwb25zZSByZXF1aXJlZCkgaW50ZXJydXB0Ci0gICogICAgICAgICAgICBAYXJnIFNESU9fSVRfREFUQUVORDogIERhdGEgZW5kIChkYXRhIGNvdW50ZXIsIFNETU1DX0RDT1VOVCwgaXMgemVybykgaW50ZXJydXB0CisgICogICAgICAgICAgICBAYXJnIFNESU9fSVRfREFUQUVORDogIERhdGEgZW5kIChkYXRhIGNvdW50ZXIsIERBVEFDT1VOVCwgaXMgemVybykgaW50ZXJydXB0CisgICogICAgICAgICAgICBAYXJnIFNESU9fSVRfREJDS0VORDogICAgRGF0YSBibG9jayBzZW50L3JlY2VpdmVkIChDUkMgY2hlY2sgcGFzc2VkKSBpbnRlcnJ1cHQKKyAgKiAgICAgICAgICAgIEBhcmcgU0RJT19JVF9UWEZJRk9IRTogICBUcmFuc21pdCBGSUZPIEhhbGYgRW1wdHkgaW50ZXJydXB0CisgICogICAgICAgICAgICBAYXJnIFNESU9fSVRfUlhGSUZPSEY6ICAgUmVjZWl2ZSBGSUZPIEhhbGYgRnVsbCBpbnRlcnJ1cHQKKyAgKiAgICAgICAgICAgIEBhcmcgU0RJT19JVF9SWEZJRk9GOiAgICBSZWNlaXZlIEZJRk8gZnVsbCBpbnRlcnJ1cHQKKyAgKiAgICAgICAgICAgIEBhcmcgU0RJT19JVF9UWEZJRk9FOiAgICBUcmFuc21pdCBGSUZPIGVtcHR5IGludGVycnVwdAogICAqICAgICAgICAgICAgQGFyZyBTRElPX0lUX1NESU9JVDogICBTRCBJL08gaW50ZXJydXB0IHJlY2VpdmVkIGludGVycnVwdAogICAqIEByZXR2YWwgTm9uZQogICAqLwpAQCAtNjA1LDYgKzU4NSw3IEBACiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfTU1DX0RlSW5pdCAoTU1DX0hhbmRsZVR5cGVEZWYgKmhtbWMpOwogdm9pZCBIQUxfTU1DX01zcEluaXQoTU1DX0hhbmRsZVR5cGVEZWYgKmhtbWMpOwogdm9pZCBIQUxfTU1DX01zcERlSW5pdChNTUNfSGFuZGxlVHlwZURlZiAqaG1tYyk7CisKIC8qKgogICAqIEB9CiAgICovCkBAIC02NTIsOSArNjMzLDkgQEAKICAgKiBAewogICAqLwogSEFMX01NQ19DYXJkU3RhdGVUeXBlRGVmIEhBTF9NTUNfR2V0Q2FyZFN0YXRlKE1NQ19IYW5kbGVUeXBlRGVmICpobW1jKTsKLUhBTF9TdGF0dXNUeXBlRGVmICAgICAgICBIQUxfTU1DX0dldENhcmRDSUQoTU1DX0hhbmRsZVR5cGVEZWYgKmhtbWMsIEhBTF9NTUNfQ2FyZENJRFR5cGVEZWYgKnBDSUQpOwotSEFMX1N0YXR1c1R5cGVEZWYgICAgICAgIEhBTF9NTUNfR2V0Q2FyZENTRChNTUNfSGFuZGxlVHlwZURlZiAqaG1tYywgSEFMX01NQ19DYXJkQ1NEVHlwZURlZiAqcENTRCk7Ci1IQUxfU3RhdHVzVHlwZURlZiAgICAgICAgSEFMX01NQ19HZXRDYXJkSW5mbyhNTUNfSGFuZGxlVHlwZURlZiAqaG1tYywgSEFMX01NQ19DYXJkSW5mb1R5cGVEZWYgKnBDYXJkSW5mbyk7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfTU1DX0dldENhcmRDSUQoTU1DX0hhbmRsZVR5cGVEZWYgKmhtbWMsIEhBTF9NTUNfQ2FyZENJRFR5cGVEZWYgKnBDSUQpOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX01NQ19HZXRDYXJkQ1NEKE1NQ19IYW5kbGVUeXBlRGVmICpobW1jLCBIQUxfTU1DX0NhcmRDU0RUeXBlRGVmICpwQ1NEKTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9NTUNfR2V0Q2FyZEluZm8oTU1DX0hhbmRsZVR5cGVEZWYgKmhtbWMsIEhBTF9NTUNfQ2FyZEluZm9UeXBlRGVmICpwQ2FyZEluZm8pOwogLyoqCiAgICogQH0KICAgKi8KQEAgLTc0MCw2ICs3MjEsNyBAQAogICAqIEB9CiAgICovCiAKKwogLyoqCiAgICogQH0KICAgKi8gCkBAIC03NTIsMTUgKzczNCwxMiBAQAogICAqIEB9CiAgICovCiAKLSNlbmRpZiAvKiBTVE0zMkY0MDV4eCB8fCBTVE0zMkY0MTV4eCB8fCBTVE0zMkY0MDd4eCB8fCBTVE0zMkY0MTd4eCB8fCBTVE0zMkY0Mjd4eCB8fCBTVE0zMkY0Mzd4eCB8fCBTVE0zMkY0Mjl4eCB8fCBTVE0zMkY0Mzl4eCB8fAotICAgICAgICAgIFNUTTMyRjQwMXhDIHx8IFNUTTMyRjQwMXhFIHx8IFNUTTMyRjQxMXhFIHx8IFNUTTMyRjQ0Nnh4IHx8IFNUTTMyRjQ2OXh4IHx8IFNUTTMyRjQ3OXh4IHx8IFNUTTMyRjQxMlp4IHx8IFNUTTMyRjQxMlZ4IHx8Ci0gICAgICAgICAgU1RNMzJGNDEyUnggfHwgU1RNMzJGNDEyQ3ggfHwgU1RNMzJGNDEzeHggfHwgU1RNMzJGNDIzeHggKi8KLQogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CiAjZW5kaWYKIAorI2VuZGlmIC8qIFNESU8gKi8KIAotI2VuZGlmIC8qIF9fU1RNMzJGNHh4X0hBTF9NTUNfSCAqLyAKKyNlbmRpZiAvKiBTVE0zMkY0eHhfSEFMX01NQ19IICovIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqIChDKSBDT1BZUklHSFQgU1RNaWNyb2VsZWN0cm9uaWNzICoqKioqRU5EIE9GIEZJTEUqKioqLwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZjR4eF9oYWxfcm5nLmggYi9JbmMvc3RtMzJmNHh4X2hhbF9ybmcuaAppbmRleCBhN2IxYTU5Li5kMmM5OTM3IDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmNHh4X2hhbF9ybmcuaAorKysgYi9JbmMvc3RtMzJmNHh4X2hhbF9ybmcuaApAQCAtMjIsNyArMjIsNyBAQAogI2RlZmluZSBTVE0zMkY0eHhfSEFMX1JOR19ICiAKICNpZmRlZiBfX2NwbHVzcGx1cwotIGV4dGVybiAiQyIgeworZXh0ZXJuICJDIiB7CiAjZW5kaWYKIAogLyogSW5jbHVkZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KZGlmZiAtLWdpdCBhL0luYy9zdG0zMmY0eHhfaGFsX3NhaS5oIGIvSW5jL3N0bTMyZjR4eF9oYWxfc2FpLmgKaW5kZXggMTZjYmNjZi4uY2UyZDUwZSAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZjR4eF9oYWxfc2FpLmgKKysrIGIvSW5jL3N0bTMyZjR4eF9oYWxfc2FpLmgKQEAgLTEwNCw5ICsxMDQsMTAgQEAKICAgdWludDMyX3QgQXVkaW9GcmVxdWVuY3k7ICAgICAgLyohPCBTcGVjaWZpZXMgdGhlIGF1ZGlvIGZyZXF1ZW5jeSBzYW1wbGluZy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIFNBSV9BdWRpb19GcmVxdWVuY3kgICAgICAgICAgICAgICAgICovCiAKLSAgdWludDMyX3QgTWNrZGl2OyAgICAgICAgICAgICAgLyohPCBTcGVjaWZpZXMgdGhlIG1hc3RlciBjbG9jayBkaXZpZGVyLCB0aGUgcGFyYW1ldGVyIHdpbGwgYmUgdXNlZCBpZiBmb3IKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdWRpb0ZyZXF1ZW5jeSB0aGUgdXNlciBjaG9pY2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gTWluX0RhdGEgPSAwIGFuZCBNYXhfRGF0YSA9IDE1ICAgICovCisgIHVpbnQzMl90IE1ja2RpdjsgICAgICAgICAgICAgIC8qITwgU3BlY2lmaWVzIHRoZSBtYXN0ZXIgY2xvY2sgZGl2aWRlci4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gTWluX0RhdGEgPSAwIGFuZCBNYXhfRGF0YSA9IDE1LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBub3RlIFRoaXMgcGFyYW1ldGVyIGlzIHVzZWQgb25seSBpZiBBdWRpb0ZyZXF1ZW5jeSBpcyBzZXQgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQUlfQVVESU9fRlJFUVVFTkNZX01DS0RJViBvdGhlcndpc2UgaXQgaXMgaW50ZXJuYWxseSBjb21wdXRlZC4gKi8KIAogICB1aW50MzJfdCBNb25vU3RlcmVvTW9kZTsgICAgICAvKiE8IFNwZWNpZmllcyBpZiB0aGUgbW9ubyBvciBzdGVyZW8gbW9kZSBpcyBzZWxlY3RlZC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIFNBSV9Nb25vX1N0ZXJlb19Nb2RlICAgICAgICAgICAgICAgICovCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJmNHh4X2hhbF9zZC5oIGIvSW5jL3N0bTMyZjR4eF9oYWxfc2QuaAppbmRleCBlZGYzM2MxLi4yZTI1NGYxIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmNHh4X2hhbF9zZC5oCisrKyBiL0luYy9zdG0zMmY0eHhfaGFsX3NkLmgKQEAgLTEyLDI0ICsxMiwyMCBAQAogICAqIFRoaXMgc29mdHdhcmUgY29tcG9uZW50IGlzIGxpY2Vuc2VkIGJ5IFNUIHVuZGVyIEJTRCAzLUNsYXVzZSBsaWNlbnNlLAogICAqIHRoZSAiTGljZW5zZSI7IFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUKICAgKiBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQ6Ci0gICogICAgICAgICAgICAgICAgICAgICAgICBvcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2UKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlCiAgICoKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICovIAogCiAvKiBEZWZpbmUgdG8gcHJldmVudCByZWN1cnNpdmUgaW5jbHVzaW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotI2lmbmRlZiBfX1NUTTMyRjR4eF9IQUxfU0RfSAotI2RlZmluZSBfX1NUTTMyRjR4eF9IQUxfU0RfSAorI2lmbmRlZiBTVE0zMkY0eHhfSEFMX1NEX0gKKyNkZWZpbmUgU1RNMzJGNHh4X0hBTF9TRF9ICiAKICNpZmRlZiBfX2NwbHVzcGx1cwogIGV4dGVybiAiQyIgewogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKFNUTTMyRjQwNXh4KSB8fCBkZWZpbmVkKFNUTTMyRjQxNXh4KSB8fCBkZWZpbmVkKFNUTTMyRjQwN3h4KSB8fCBkZWZpbmVkKFNUTTMyRjQxN3h4KSB8fCBcCi0gICAgZGVmaW5lZChTVE0zMkY0Mjd4eCkgfHwgZGVmaW5lZChTVE0zMkY0Mzd4eCkgfHwgZGVmaW5lZChTVE0zMkY0Mjl4eCkgfHwgZGVmaW5lZChTVE0zMkY0Mzl4eCkgfHwgXAotICAgIGRlZmluZWQoU1RNMzJGNDAxeEMpIHx8IGRlZmluZWQoU1RNMzJGNDAxeEUpIHx8IGRlZmluZWQoU1RNMzJGNDExeEUpIHx8IGRlZmluZWQoU1RNMzJGNDQ2eHgpIHx8IFwKLSAgICBkZWZpbmVkKFNUTTMyRjQ2OXh4KSB8fCBkZWZpbmVkKFNUTTMyRjQ3OXh4KSB8fCBkZWZpbmVkKFNUTTMyRjQxMlp4KSB8fCBkZWZpbmVkKFNUTTMyRjQxMlZ4KSB8fCBcCi0gICAgZGVmaW5lZChTVE0zMkY0MTJSeCkgfHwgZGVmaW5lZChTVE0zMkY0MTJDeCkgfHwgZGVmaW5lZChTVE0zMkY0MTN4eCkgfHwgZGVmaW5lZChTVE0zMkY0MjN4eCkKKyNpZiBkZWZpbmVkKFNESU8pCiAKIC8qIEluY2x1ZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAjaW5jbHVkZSAic3RtMzJmNHh4X2xsX3NkbW1jLmgiCkBAIC01OCw3ICs1NCw3IEBACiAgIEhBTF9TRF9TVEFURV9USU1FT1VUICAgICAgICAgICAgICAgID0gMHgwMDAwMDAwMlUsICAvKiE8IFNEIFRpbWVvdXQgc3RhdGUgICAgICAgICAgICAgICAgICAgICovCiAgIEhBTF9TRF9TVEFURV9CVVNZICAgICAgICAgICAgICAgICAgID0gMHgwMDAwMDAwM1UsICAvKiE8IFNEIHByb2Nlc3Mgb25nb2luZyAgICAgICAgICAgICAgICAgICovCiAgIEhBTF9TRF9TVEFURV9QUk9HUkFNTUlORyAgICAgICAgICAgID0gMHgwMDAwMDAwNFUsICAvKiE8IFNEIFByb2dyYW1taW5nIFN0YXRlICAgICAgICAgICAgICAgICovCi0gIEhBTF9TRF9TVEFURV9SRUNFSVZJTkcgICAgICAgICAgICAgID0gMHgwMDAwMDAwNVUsICAvKiE8IFNEIFJlY2VpbnZpbmcgU3RhdGUgICAgICAgICAgICAgICAgICovCisgIEhBTF9TRF9TVEFURV9SRUNFSVZJTkcgICAgICAgICAgICAgID0gMHgwMDAwMDAwNVUsICAvKiE8IFNEIFJlY2VpdmluZyBTdGF0ZSAgICAgICAgICAgICAgICAgICovCiAgIEhBTF9TRF9TVEFURV9UUkFOU0ZFUiAgICAgICAgICAgICAgID0gMHgwMDAwMDAwNlUsICAvKiE8IFNEIFRyYW5zZmVydCBTdGF0ZSAgICAgICAgICAgICAgICAgICovCiAgIEhBTF9TRF9TVEFURV9FUlJPUiAgICAgICAgICAgICAgICAgID0gMHgwMDAwMDAwRlUgICAvKiE8IFNEIGlzIGluIGVycm9yIHN0YXRlICAgICAgICAgICAgICAgICovCiB9SEFMX1NEX1N0YXRlVHlwZURlZjsKQEAgLTY5LDE4ICs2NSwxNyBAQAogLyoqIEBkZWZncm91cCBTRF9FeHBvcnRlZF9UeXBlc19Hcm91cDIgU0QgQ2FyZCBTdGF0ZSBlbnVtZXJhdGlvbiBzdHJ1Y3R1cmUKICAgKiBAewogICAqLyAgIAotdHlwZWRlZiBlbnVtCi17Ci0gIEhBTF9TRF9DQVJEX1JFQURZICAgICAgICAgICAgICAgICAgPSAweDAwMDAwMDAxVSwgIC8qITwgQ2FyZCBzdGF0ZSBpcyByZWFkeSAgICAgICAgICAgICAgICAgICAgICovCi0gIEhBTF9TRF9DQVJEX0lERU5USUZJQ0FUSU9OICAgICAgICAgPSAweDAwMDAwMDAyVSwgIC8qITwgQ2FyZCBpcyBpbiBpZGVudGlmaWNhdGlvbiBzdGF0ZSAgICAgICAgICovCi0gIEhBTF9TRF9DQVJEX1NUQU5EQlkgICAgICAgICAgICAgICAgPSAweDAwMDAwMDAzVSwgIC8qITwgQ2FyZCBpcyBpbiBzdGFuZGJ5IHN0YXRlICAgICAgICAgICAgICAgICovCi0gIEhBTF9TRF9DQVJEX1RSQU5TRkVSICAgICAgICAgICAgICAgPSAweDAwMDAwMDA0VSwgIC8qITwgQ2FyZCBpcyBpbiB0cmFuc2ZlciBzdGF0ZSAgICAgICAgICAgICAgICovICAKLSAgSEFMX1NEX0NBUkRfU0VORElORyAgICAgICAgICAgICAgICA9IDB4MDAwMDAwMDVVLCAgLyohPCBDYXJkIGlzIHNlbmRpbmcgYW4gb3BlcmF0aW9uICAgICAgICAgICAgKi8KLSAgSEFMX1NEX0NBUkRfUkVDRUlWSU5HICAgICAgICAgICAgICA9IDB4MDAwMDAwMDZVLCAgLyohPCBDYXJkIGlzIHJlY2VpdmluZyBvcGVyYXRpb24gaW5mb3JtYXRpb24gKi8KLSAgSEFMX1NEX0NBUkRfUFJPR1JBTU1JTkcgICAgICAgICAgICA9IDB4MDAwMDAwMDdVLCAgLyohPCBDYXJkIGlzIGluIHByb2dyYW1taW5nIHN0YXRlICAgICAgICAgICAgKi8KLSAgSEFMX1NEX0NBUkRfRElTQ09OTkVDVEVEICAgICAgICAgICA9IDB4MDAwMDAwMDhVLCAgLyohPCBDYXJkIGlzIGRpc2Nvbm5lY3RlZCAgICAgICAgICAgICAgICAgICAgKi8KLSAgSEFMX1NEX0NBUkRfRVJST1IgICAgICAgICAgICAgICAgICA9IDB4MDAwMDAwRkZVICAgLyohPCBDYXJkIHJlc3BvbnNlIEVycm9yICAgICAgICAgICAgICAgICAgICAgKi8KLX1IQUxfU0RfQ2FyZFN0YXRlVHlwZURlZjsKK3R5cGVkZWYgdWludDMyX3QgSEFMX1NEX0NhcmRTdGF0ZVR5cGVEZWY7CisKKyNkZWZpbmUgSEFMX1NEX0NBUkRfUkVBRFkgICAgICAgICAgMHgwMDAwMDAwMVUgIC8qITwgQ2FyZCBzdGF0ZSBpcyByZWFkeSAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEhBTF9TRF9DQVJEX0lERU5USUZJQ0FUSU9OIDB4MDAwMDAwMDJVICAvKiE8IENhcmQgaXMgaW4gaWRlbnRpZmljYXRpb24gc3RhdGUgICAgICAgICAqLworI2RlZmluZSBIQUxfU0RfQ0FSRF9TVEFOREJZICAgICAgICAweDAwMDAwMDAzVSAgLyohPCBDYXJkIGlzIGluIHN0YW5kYnkgc3RhdGUgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSEFMX1NEX0NBUkRfVFJBTlNGRVIgICAgICAgMHgwMDAwMDAwNFUgIC8qITwgQ2FyZCBpcyBpbiB0cmFuc2ZlciBzdGF0ZSAgICAgICAgICAgICAgICovCisjZGVmaW5lIEhBTF9TRF9DQVJEX1NFTkRJTkcgICAgICAgIDB4MDAwMDAwMDVVICAvKiE8IENhcmQgaXMgc2VuZGluZyBhbiBvcGVyYXRpb24gICAgICAgICAgICAqLworI2RlZmluZSBIQUxfU0RfQ0FSRF9SRUNFSVZJTkcgICAgICAweDAwMDAwMDA2VSAgLyohPCBDYXJkIGlzIHJlY2VpdmluZyBvcGVyYXRpb24gaW5mb3JtYXRpb24gKi8KKyNkZWZpbmUgSEFMX1NEX0NBUkRfUFJPR1JBTU1JTkcgICAgMHgwMDAwMDAwN1UgIC8qITwgQ2FyZCBpcyBpbiBwcm9ncmFtbWluZyBzdGF0ZSAgICAgICAgICAgICovCisjZGVmaW5lIEhBTF9TRF9DQVJEX0RJU0NPTk5FQ1RFRCAgIDB4MDAwMDAwMDhVICAvKiE8IENhcmQgaXMgZGlzY29ubmVjdGVkICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBIQUxfU0RfQ0FSRF9FUlJPUiAgICAgICAgICAweDAwMDAwMEZGVSAgLyohPCBDYXJkIHJlc3BvbnNlIEVycm9yICAgICAgICAgICAgICAgICAgICAgKi8KIC8qKiAKICAgKiBAfQogICAqLwpAQCAtMTE3LDcgKzExMiwxMSBAQAogLyoqIAogICAqIEBicmllZiAgU0QgaGFuZGxlIFN0cnVjdHVyZSBkZWZpbml0aW9uCiAgICovIAorI2lmIGRlZmluZWQgKFVTRV9IQUxfU0RfUkVHSVNURVJfQ0FMTEJBQ0tTKSAmJiAoVVNFX0hBTF9TRF9SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMVUpCiB0eXBlZGVmIHN0cnVjdCBfX1NEX0hhbmRsZVR5cGVEZWYKKyNlbHNlCit0eXBlZGVmIHN0cnVjdAorI2VuZGlmIC8qIFVTRV9IQUxfU0RfUkVHSVNURVJfQ0FMTEJBQ0tTICovCiB7CiAgIFNEX1R5cGVEZWYgICAgICAgICAgICAgICAgICAgKkluc3RhbmNlOyAgICAgICAgLyohPCBTRCByZWdpc3RlcnMgYmFzZSBhZGRyZXNzICAgICAgICAgICAqLwogICAKQEAgLTEyNSwxMSArMTI0LDExIEBACiAgIAogICBIQUxfTG9ja1R5cGVEZWYgICAgICAgICAgICAgIExvY2s7ICAgICAgICAgICAgIC8qITwgU0QgbG9ja2luZyBvYmplY3QgICAgICAgICAgICAgICAgICAgKi8KICAgCi0gIHVpbnQzMl90ICAgICAgICAgICAgICAgICAgICAgKnBUeEJ1ZmZQdHI7ICAgICAgLyohPCBQb2ludGVyIHRvIFNEIFR4IHRyYW5zZmVyIEJ1ZmZlciAgICAqLworICB1aW50OF90ICAgICAgICAgICAgICAgICAgICAgICpwVHhCdWZmUHRyOyAgICAgIC8qITwgUG9pbnRlciB0byBTRCBUeCB0cmFuc2ZlciBCdWZmZXIgICAgKi8KIAogICB1aW50MzJfdCAgICAgICAgICAgICAgICAgICAgIFR4WGZlclNpemU7ICAgICAgIC8qITwgU0QgVHggVHJhbnNmZXIgc2l6ZSAgICAgICAgICAgICAgICAgKi8KIAotICB1aW50MzJfdCAgICAgICAgICAgICAgICAgICAgICpwUnhCdWZmUHRyOyAgICAgIC8qITwgUG9pbnRlciB0byBTRCBSeCB0cmFuc2ZlciBCdWZmZXIgICAgKi8KKyAgdWludDhfdCAgICAgICAgICAgICAgICAgICAgICAqcFJ4QnVmZlB0cjsgICAgICAvKiE8IFBvaW50ZXIgdG8gU0QgUnggdHJhbnNmZXIgQnVmZmVyICAgICovCiAKICAgdWludDMyX3QgICAgICAgICAgICAgICAgICAgICBSeFhmZXJTaXplOyAgICAgICAvKiE8IFNEIFJ4IFRyYW5zZmVyIHNpemUgICAgICAgICAgICAgICAgICovCiAgIApAQCAtMTM5LDkgKzEzOCw5IEBACiAgIAogICBfX0lPIHVpbnQzMl90ICAgICAgICAgICAgICAgIEVycm9yQ29kZTsgICAgICAgIC8qITwgU0QgQ2FyZCBFcnJvciBjb2RlcyAgICAgICAgICAgICAgICAgKi8gIAogIAotICBETUFfSGFuZGxlVHlwZURlZiAgICAgICAgICAgICpoZG1hcng7ICAgICAgICAgIC8qITwgU0QgUnggRE1BIGhhbmRsZSBwYXJhbWV0ZXJzICAgICAgICAgKi8KLSAgCiAgIERNQV9IYW5kbGVUeXBlRGVmICAgICAgICAgICAgKmhkbWF0eDsgICAgICAgICAgLyohPCBTRCBUeCBETUEgaGFuZGxlIHBhcmFtZXRlcnMgICAgICAgICAqLworCisgIERNQV9IYW5kbGVUeXBlRGVmICAgICAgICAgICAgKmhkbWFyeDsgICAgICAgICAgLyohPCBTRCBSeCBETUEgaGFuZGxlIHBhcmFtZXRlcnMgICAgICAgICAqLwogICAKICAgSEFMX1NEX0NhcmRJbmZvVHlwZURlZiAgICAgICBTZENhcmQ7ICAgICAgICAgICAvKiE8IFNEIENhcmQgaW5mb3JtYXRpb24gICAgICAgICAgICAgICAgICovCiAgIApAQCAtMTQ5LDcgKzE0OCw3IEBACiAgIAogICB1aW50MzJfdCAgICAgICAgICAgICAgICAgICAgIENJRFs0XTsgICAgICAgICAgIC8qITwgU0QgY2FyZCBpZGVudGlmaWNhdGlvbiBudW1iZXIgdGFibGUgKi8KICAgCi0jaWYgKFVTRV9IQUxfU0RfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCisjaWYgZGVmaW5lZCAoVVNFX0hBTF9TRF9SRUdJU1RFUl9DQUxMQkFDS1MpICYmIChVU0VfSEFMX1NEX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxVSkKICAgdm9pZCAoKiBUeENwbHRDYWxsYmFjaykgICAgICAgICAgICAgICAgIChzdHJ1Y3QgX19TRF9IYW5kbGVUeXBlRGVmICpoc2QpOwogICB2b2lkICgqIFJ4Q3BsdENhbGxiYWNrKSAgICAgICAgICAgICAgICAgKHN0cnVjdCBfX1NEX0hhbmRsZVR5cGVEZWYgKmhzZCk7CiAgIHZvaWQgKCogRXJyb3JDYWxsYmFjaykgICAgICAgICAgICAgICAgICAoc3RydWN0IF9fU0RfSGFuZGxlVHlwZURlZiAqaHNkKTsKQEAgLTE1Nyw3ICsxNTYsNyBAQAogCiAgIHZvaWQgKCogTXNwSW5pdENhbGxiYWNrKSAgICAgICAgICAgICAgICAoc3RydWN0IF9fU0RfSGFuZGxlVHlwZURlZiAqaHNkKTsKICAgdm9pZCAoKiBNc3BEZUluaXRDYWxsYmFjaykgICAgICAgICAgICAgIChzdHJ1Y3QgX19TRF9IYW5kbGVUeXBlRGVmICpoc2QpOwotI2VuZGlmICAKKyNlbmRpZiAvKiBVU0VfSEFMX1NEX1JFR0lTVEVSX0NBTExCQUNLUyAqLwogfVNEX0hhbmRsZVR5cGVEZWY7CiAKIC8qKiAKQEAgLTE5OCw3ICsxOTcsNyBAQAogICBfX0lPIHVpbnQ4X3QgIFdyaXRlQmxvY2tQYVBhcnRpYWw7ICAvKiE8IFBhcnRpYWwgYmxvY2tzIGZvciB3cml0ZSBhbGxvd2VkICAgICAgKi8KICAgX19JTyB1aW50OF90ICBSZXNlcnZlZDM7ICAgICAgICAgICAgLyohPCBSZXNlcnZlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIF9fSU8gdWludDhfdCAgQ29udGVudFByb3RlY3RBcHBsaTsgIC8qITwgQ29udGVudCBwcm90ZWN0aW9uIGFwcGxpY2F0aW9uICAgICAgICAqLwotICBfX0lPIHVpbnQ4X3QgIEZpbGVGb3JtYXRHcm91b3A7ICAgICAvKiE8IEZpbGUgZm9ybWF0IGdyb3VwICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50OF90ICBGaWxlRm9ybWF0R3JvdXA7ICAgICAgLyohPCBGaWxlIGZvcm1hdCBncm91cCAgICAgICAgICAgICAgICAgICAgICovCiAgIF9fSU8gdWludDhfdCAgQ29weUZsYWc7ICAgICAgICAgICAgIC8qITwgQ29weSBmbGFnIChPVFApICAgICAgICAgICAgICAgICAgICAgICAqLwogICBfX0lPIHVpbnQ4X3QgIFBlcm1XclByb3RlY3Q7ICAgICAgICAvKiE8IFBlcm1hbmVudCB3cml0ZSBwcm90ZWN0aW9uICAgICAgICAgICAgKi8KICAgX19JTyB1aW50OF90ICBUZW1wV3JQcm90ZWN0OyAgICAgICAgLyohPCBUZW1wb3Jhcnkgd3JpdGUgcHJvdGVjdGlvbiAgICAgICAgICAgICovCkBAIC0yMDYsNyArMjA1LDYgQEAKICAgX19JTyB1aW50OF90ICBFQ0M7ICAgICAgICAgICAgICAgICAgLyohPCBFQ0MgY29kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIF9fSU8gdWludDhfdCAgQ1NEX0NSQzsgICAgICAgICAgICAgIC8qITwgQ1NEIENSQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICBfX0lPIHVpbnQ4X3QgIFJlc2VydmVkNDsgICAgICAgICAgICAvKiE8IEFsd2F5cyAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgCiB9SEFMX1NEX0NhcmRDU0RUeXBlRGVmOwogLyoqIAogICAqIEB9CkBAIC0yNTQsNyArMjUyLDcgQEAKICAgKiBAfQogICAqLwogCi0jaWYgKFVTRV9IQUxfU0RfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCisjaWYgZGVmaW5lZCAoVVNFX0hBTF9TRF9SRUdJU1RFUl9DQUxMQkFDS1MpICYmIChVU0VfSEFMX1NEX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxVSkKIC8qKiBAZGVmZ3JvdXAgU0RfRXhwb3J0ZWRfVHlwZXNfR3JvdXA3IFNEIENhbGxiYWNrIElEIGVudW1lcmF0aW9uIGRlZmluaXRpb24gCiAgICogQHsKICAgKi8KQEAgLTI3OSw3ICsyNzcsNyBAQAogLyoqIAogICAqIEB9CiAgICovCi0jZW5kaWYKKyNlbmRpZiAvKiBVU0VfSEFMX1NEX1JFR0lTVEVSX0NBTExCQUNLUyAqLwogLyoqIAogICAqIEB9CiAgICovCkBAIC0zMzEsMTAgKzMyOSw5IEBACiAjZGVmaW5lIEhBTF9TRF9FUlJPUl9ETUEgICAgICAgICAgICAgICAgICAgICAgU0RNTUNfRVJST1JfRE1BICAgICAgICAgICAgICAgICAgICAgLyohPCBFcnJvciB3aGlsZSBETUEgdHJhbnNmZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIEhBTF9TRF9FUlJPUl9USU1FT1VUICAgICAgICAgICAgICAgICAgU0RNTUNfRVJST1JfVElNRU9VVCAgICAgICAgICAgICAgICAgLyohPCBUaW1lb3V0IGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSNpZiAoVVNFX0hBTF9TRF9SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkKKyNpZiBkZWZpbmVkIChVU0VfSEFMX1NEX1JFR0lTVEVSX0NBTExCQUNLUykgJiYgKFVTRV9IQUxfU0RfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDFVKQogI2RlZmluZSBIQUxfU0RfRVJST1JfSU5WQUxJRF9DQUxMQkFDSyAgICAgICAgIFNETU1DX0VSUk9SX0lOVkFMSURfUEFSQU1FVEVSICAgICAgIC8qITwgSW52YWxpZCBjYWxsYmFjayBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyNlbmRpZiAvKiBVU0VfSEFMX1NEX1JFR0lTVEVSX0NBTExCQUNLUyAqLwogLyoqIAogICAqIEB9CiAgICovCkBAIC0zNDIsMTMgKzMzOSwxMyBAQAogLyoqIEBkZWZncm91cCBTRF9FeHBvcnRlZF9Db25zdGFuc3RzX0dyb3VwMiBTRCBjb250ZXh0IGVudW1lcmF0aW9uCiAgICogQHsKICAgKi8gCi0jZGVmaW5lICAgU0RfQ09OVEVYVF9OT05FICAgICAgICAgICAgICAgICAweDAwMDAwMDAwVSAgLyohPCBOb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSAgIFNEX0NPTlRFWFRfUkVBRF9TSU5HTEVfQkxPQ0sgICAgMHgwMDAwMDAwMVUgIC8qITwgUmVhZCBzaW5nbGUgYmxvY2sgb3BlcmF0aW9uICAgICAgKi8KLSNkZWZpbmUgICBTRF9DT05URVhUX1JFQURfTVVMVElQTEVfQkxPQ0sgIDB4MDAwMDAwMDJVICAvKiE8IFJlYWQgbXVsdGlwbGUgYmxvY2tzIG9wZXJhdGlvbiAgICovCi0jZGVmaW5lICAgU0RfQ09OVEVYVF9XUklURV9TSU5HTEVfQkxPQ0sgICAweDAwMDAwMDEwVSAgLyohPCBXcml0ZSBzaW5nbGUgYmxvY2sgb3BlcmF0aW9uICAgICAqLwotI2RlZmluZSAgIFNEX0NPTlRFWFRfV1JJVEVfTVVMVElQTEVfQkxPQ0sgMHgwMDAwMDAyMFUgIC8qITwgV3JpdGUgbXVsdGlwbGUgYmxvY2tzIG9wZXJhdGlvbiAgKi8KLSNkZWZpbmUgICBTRF9DT05URVhUX0lUICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDhVICAvKiE8IFByb2Nlc3MgaW4gSW50ZXJydXB0IG1vZGUgICAgICAgICovCi0jZGVmaW5lICAgU0RfQ09OVEVYVF9ETUEgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwVSAgLyohPCBQcm9jZXNzIGluIERNQSBtb2RlICAgICAgICAgICAgICAqLyAgCisjZGVmaW5lIFNEX0NPTlRFWFRfTk9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwVSAgIC8qITwgTm9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU0RfQ09OVEVYVF9SRUFEX1NJTkdMRV9CTE9DSyAgICAgICAgICAgICAgIDB4MDAwMDAwMDFVICAgLyohPCBSZWFkIHNpbmdsZSBibG9jayBvcGVyYXRpb24gICAgICAqLworI2RlZmluZSBTRF9DT05URVhUX1JFQURfTVVMVElQTEVfQkxPQ0sgICAgICAgICAgICAgMHgwMDAwMDAwMlUgICAvKiE8IFJlYWQgbXVsdGlwbGUgYmxvY2tzIG9wZXJhdGlvbiAgICovCisjZGVmaW5lIFNEX0NPTlRFWFRfV1JJVEVfU0lOR0xFX0JMT0NLICAgICAgICAgICAgICAweDAwMDAwMDEwVSAgIC8qITwgV3JpdGUgc2luZ2xlIGJsb2NrIG9wZXJhdGlvbiAgICAgKi8KKyNkZWZpbmUgU0RfQ09OVEVYVF9XUklURV9NVUxUSVBMRV9CTE9DSyAgICAgICAgICAgIDB4MDAwMDAwMjBVICAgLyohPCBXcml0ZSBtdWx0aXBsZSBibG9ja3Mgb3BlcmF0aW9uICAqLworI2RlZmluZSBTRF9DT05URVhUX0lUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOFUgICAvKiE8IFByb2Nlc3MgaW4gSW50ZXJydXB0IG1vZGUgICAgICAgICovCisjZGVmaW5lIFNEX0NPTlRFWFRfRE1BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwVSAgIC8qITwgUHJvY2VzcyBpbiBETUEgbW9kZSAgICAgICAgICAgICAgKi8KIAogLyoqCiAgICogQH0KQEAgLTM1Nyw4ICszNTQsOCBAQAogLyoqIEBkZWZncm91cCBTRF9FeHBvcnRlZF9Db25zdGFuc3RzX0dyb3VwMyBTRCBTdXBwb3J0ZWQgTWVtb3J5IENhcmRzCiAgICogQHsKICAgKi8KLSNkZWZpbmUgQ0FSRF9TRFNDICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMFUKLSNkZWZpbmUgQ0FSRF9TREhDX1NEWEMgICAgICAgICAgICAgMHgwMDAwMDAwMVUKKyNkZWZpbmUgQ0FSRF9TRFNDICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMFUgIC8qITwgU0QgU3RhbmRhcmQgQ2FwYWNpdHkgPDJHbyAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ0FSRF9TREhDX1NEWEMgICAgICAgICAgICAgMHgwMDAwMDAwMVUgIC8qITwgU0QgSGlnaCBDYXBhY2l0eSA8MzJHbywgU0QgRXh0ZW5kZWQgQ2FwYWNpdHkgPDJUbyAgKi8KICNkZWZpbmUgQ0FSRF9TRUNVUkVEICAgICAgICAgICAgICAgMHgwMDAwMDAwM1UKICAgICAKIC8qKgpAQCAtMzg3LDcgKzM4NCw3IEBACiAgICogQHBhcmFtICBfX0hBTkRMRV9fIDogU0QgaGFuZGxlLgogICAqIEByZXR2YWwgTm9uZQogICAqLwotI2lmIChVU0VfSEFMX1NEX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxKQorI2lmIGRlZmluZWQgKFVTRV9IQUxfU0RfUkVHSVNURVJfQ0FMTEJBQ0tTKSAmJiAoVVNFX0hBTF9TRF9SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMVUpCiAjZGVmaW5lIF9fSEFMX1NEX1JFU0VUX0hBTkRMRV9TVEFURShfX0hBTkRMRV9fKSAgICAgICAgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPlN0YXRlID0gSEFMX1NEX1NUQVRFX1JFU0VUOyBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPk1zcEluaXRDYWxsYmFjayA9IE5VTEw7ICAgICAgIFwKQEAgLTM5NSw3ICszOTIsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUoMCkKICNlbHNlCiAjZGVmaW5lIF9fSEFMX1NEX1JFU0VUX0hBTkRMRV9TVEFURShfX0hBTkRMRV9fKSAgICAgICAgICAgKChfX0hBTkRMRV9fKS0+U3RhdGUgPSBIQUxfU0RfU1RBVEVfUkVTRVQpCi0jZW5kaWYKKyNlbmRpZiAvKiBVU0VfSEFMX1NEX1JFR0lTVEVSX0NBTExCQUNLUyAqLwogIAogLyoqCiAgICogQGJyaWVmICBFbmFibGUgdGhlIFNEIGRldmljZS4KQEAgLTQyMyw4ICs0MjAsOCBAQAogIAogLyoqCiAgICogQGJyaWVmICBFbmFibGUgdGhlIFNEIGRldmljZSBpbnRlcnJ1cHQuCi0gICogQHBhcmFtICBfX0hBTkRMRV9fIFNEIEhhbmRsZSAgCi0gICogQHBhcmFtICBfX0lOVEVSUlVQVF9fIHNwZWNpZmllcyB0aGUgU0RNTUMgaW50ZXJydXB0IHNvdXJjZXMgdG8gYmUgZW5hYmxlZC4KKyAgKiBAcGFyYW0gIF9fSEFORExFX186IFNEIEhhbmRsZSAgCisgICogQHBhcmFtICBfX0lOVEVSUlVQVF9fOiBzcGVjaWZpZXMgdGhlIFNETU1DIGludGVycnVwdCBzb3VyY2VzIHRvIGJlIGVuYWJsZWQuCiAgICogICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9yIGEgY29tYmluYXRpb24gb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAgICogICAgICAgICAgICBAYXJnIFNESU9fSVRfQ0NSQ0ZBSUw6IENvbW1hbmQgcmVzcG9uc2UgcmVjZWl2ZWQgKENSQyBjaGVjayBmYWlsZWQpIGludGVycnVwdAogICAqICAgICAgICAgICAgQGFyZyBTRElPX0lUX0RDUkNGQUlMOiBEYXRhIGJsb2NrIHNlbnQvcmVjZWl2ZWQgKENSQyBjaGVjayBmYWlsZWQpIGludGVycnVwdApAQCAtNDM0LDcgKzQzMSw3IEBACiAgICogICAgICAgICAgICBAYXJnIFNESU9fSVRfUlhPVkVSUjogIFJlY2VpdmVkIEZJRk8gb3ZlcnJ1biBlcnJvciBpbnRlcnJ1cHQKICAgKiAgICAgICAgICAgIEBhcmcgU0RJT19JVF9DTURSRU5EOiAgQ29tbWFuZCByZXNwb25zZSByZWNlaXZlZCAoQ1JDIGNoZWNrIHBhc3NlZCkgaW50ZXJydXB0CiAgICogICAgICAgICAgICBAYXJnIFNESU9fSVRfQ01EU0VOVDogIENvbW1hbmQgc2VudCAobm8gcmVzcG9uc2UgcmVxdWlyZWQpIGludGVycnVwdAotICAqICAgICAgICAgICAgQGFyZyBTRElPX0lUX0RBVEFFTkQ6ICBEYXRhIGVuZCAoZGF0YSBjb3VudGVyLCBTRElEQ09VTlQsIGlzIHplcm8pIGludGVycnVwdAorICAqICAgICAgICAgICAgQGFyZyBTRElPX0lUX0RBVEFFTkQ6ICBEYXRhIGVuZCAoZGF0YSBjb3VudGVyLCBEQVRBQ09VTlQsIGlzIHplcm8pIGludGVycnVwdAogICAqICAgICAgICAgICAgQGFyZyBTRElPX0lUX0RCQ0tFTkQ6ICBEYXRhIGJsb2NrIHNlbnQvcmVjZWl2ZWQgKENSQyBjaGVjayBwYXNzZWQpIGludGVycnVwdAogICAqICAgICAgICAgICAgQGFyZyBTRElPX0lUX0NNREFDVDogICBDb21tYW5kIHRyYW5zZmVyIGluIHByb2dyZXNzIGludGVycnVwdAogICAqICAgICAgICAgICAgQGFyZyBTRElPX0lUX1RYQUNUOiAgICBEYXRhIHRyYW5zbWl0IGluIHByb2dyZXNzIGludGVycnVwdApAQCAtNDQ3LDE1ICs0NDQsMTUgQEAKICAgKiAgICAgICAgICAgIEBhcmcgU0RJT19JVF9SWEZJRk9FOiAgUmVjZWl2ZSBGSUZPIGVtcHR5IGludGVycnVwdAogICAqICAgICAgICAgICAgQGFyZyBTRElPX0lUX1RYREFWTDogICBEYXRhIGF2YWlsYWJsZSBpbiB0cmFuc21pdCBGSUZPIGludGVycnVwdAogICAqICAgICAgICAgICAgQGFyZyBTRElPX0lUX1JYREFWTDogICBEYXRhIGF2YWlsYWJsZSBpbiByZWNlaXZlIEZJRk8gaW50ZXJydXB0Ci0gICogICAgICAgICAgICBAYXJnIFNESU9fSVRfU0RJT0lUOiAgIFNEIEkvTyBpbnRlcnJ1cHQgcmVjZWl2ZWQgaW50ZXJydXB0CisgICogICAgICAgICAgICBAYXJnIFNESU9fSVRfU0RJT0lUOiAgIFNESU8gaW50ZXJydXB0IHJlY2VpdmVkIGludGVycnVwdAogICAqIEByZXR2YWwgTm9uZQogICAqLwogI2RlZmluZSBfX0hBTF9TRF9FTkFCTEVfSVQoX19IQU5ETEVfXywgX19JTlRFUlJVUFRfXykgX19TRElPX0VOQUJMRV9JVCgoX19IQU5ETEVfXyktPkluc3RhbmNlLCAoX19JTlRFUlJVUFRfXykpCiAKIC8qKgogICAqIEBicmllZiAgRGlzYWJsZSB0aGUgU0QgZGV2aWNlIGludGVycnVwdC4KLSAgKiBAcGFyYW0gIF9fSEFORExFX18gU0QgSGFuZGxlICAgCi0gICogQHBhcmFtICBfX0lOVEVSUlVQVF9fIHNwZWNpZmllcyB0aGUgU0RNTUMgaW50ZXJydXB0IHNvdXJjZXMgdG8gYmUgZGlzYWJsZWQuCisgICogQHBhcmFtICBfX0hBTkRMRV9fOiBTRCBIYW5kbGUgICAKKyAgKiBAcGFyYW0gIF9fSU5URVJSVVBUX186IHNwZWNpZmllcyB0aGUgU0RNTUMgaW50ZXJydXB0IHNvdXJjZXMgdG8gYmUgZGlzYWJsZWQuCiAgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvciBhIGNvbWJpbmF0aW9uIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICAqICAgICAgICAgICAgQGFyZyBTRElPX0lUX0NDUkNGQUlMOiBDb21tYW5kIHJlc3BvbnNlIHJlY2VpdmVkIChDUkMgY2hlY2sgZmFpbGVkKSBpbnRlcnJ1cHQKICAgKiAgICAgICAgICAgIEBhcmcgU0RJT19JVF9EQ1JDRkFJTDogRGF0YSBibG9jayBzZW50L3JlY2VpdmVkIChDUkMgY2hlY2sgZmFpbGVkKSBpbnRlcnJ1cHQKQEAgLTQ2NSw3ICs0NjIsNyBAQAogICAqICAgICAgICAgICAgQGFyZyBTRElPX0lUX1JYT1ZFUlI6ICBSZWNlaXZlZCBGSUZPIG92ZXJydW4gZXJyb3IgaW50ZXJydXB0CiAgICogICAgICAgICAgICBAYXJnIFNESU9fSVRfQ01EUkVORDogIENvbW1hbmQgcmVzcG9uc2UgcmVjZWl2ZWQgKENSQyBjaGVjayBwYXNzZWQpIGludGVycnVwdAogICAqICAgICAgICAgICAgQGFyZyBTRElPX0lUX0NNRFNFTlQ6ICBDb21tYW5kIHNlbnQgKG5vIHJlc3BvbnNlIHJlcXVpcmVkKSBpbnRlcnJ1cHQKLSAgKiAgICAgICAgICAgIEBhcmcgU0RJT19JVF9EQVRBRU5EOiAgRGF0YSBlbmQgKGRhdGEgY291bnRlciwgU0RJRENPVU5ULCBpcyB6ZXJvKSBpbnRlcnJ1cHQKKyAgKiAgICAgICAgICAgIEBhcmcgU0RJT19JVF9EQVRBRU5EOiAgRGF0YSBlbmQgKGRhdGEgY291bnRlciwgREFUQUNPVU5ULCBpcyB6ZXJvKSBpbnRlcnJ1cHQKICAgKiAgICAgICAgICAgIEBhcmcgU0RJT19JVF9EQkNLRU5EOiAgRGF0YSBibG9jayBzZW50L3JlY2VpdmVkIChDUkMgY2hlY2sgcGFzc2VkKSBpbnRlcnJ1cHQKICAgKiAgICAgICAgICAgIEBhcmcgU0RJT19JVF9DTURBQ1Q6ICAgQ29tbWFuZCB0cmFuc2ZlciBpbiBwcm9ncmVzcyBpbnRlcnJ1cHQKICAgKiAgICAgICAgICAgIEBhcmcgU0RJT19JVF9UWEFDVDogICAgRGF0YSB0cmFuc21pdCBpbiBwcm9ncmVzcyBpbnRlcnJ1cHQKQEAgLTQ3OCwxNSArNDc1LDE1IEBACiAgICogICAgICAgICAgICBAYXJnIFNESU9fSVRfUlhGSUZPRTogIFJlY2VpdmUgRklGTyBlbXB0eSBpbnRlcnJ1cHQKICAgKiAgICAgICAgICAgIEBhcmcgU0RJT19JVF9UWERBVkw6ICAgRGF0YSBhdmFpbGFibGUgaW4gdHJhbnNtaXQgRklGTyBpbnRlcnJ1cHQKICAgKiAgICAgICAgICAgIEBhcmcgU0RJT19JVF9SWERBVkw6ICAgRGF0YSBhdmFpbGFibGUgaW4gcmVjZWl2ZSBGSUZPIGludGVycnVwdAotICAqICAgICAgICAgICAgQGFyZyBTRElPX0lUX1NESU9JVDogICBTRCBJL08gaW50ZXJydXB0IHJlY2VpdmVkIGludGVycnVwdCAgIAorICAqICAgICAgICAgICAgQGFyZyBTRElPX0lUX1NESU9JVDogICBTRElPIGludGVycnVwdCByZWNlaXZlZCBpbnRlcnJ1cHQgICAKICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KICNkZWZpbmUgX19IQUxfU0RfRElTQUJMRV9JVChfX0hBTkRMRV9fLCBfX0lOVEVSUlVQVF9fKSBfX1NESU9fRElTQUJMRV9JVCgoX19IQU5ETEVfXyktPkluc3RhbmNlLCAoX19JTlRFUlJVUFRfXykpCiAKIC8qKgogICAqIEBicmllZiAgQ2hlY2sgd2hldGhlciB0aGUgc3BlY2lmaWVkIFNEIGZsYWcgaXMgc2V0IG9yIG5vdC4gCi0gICogQHBhcmFtICBfX0hBTkRMRV9fIFNEIEhhbmRsZSAgIAotICAqIEBwYXJhbSAgX19GTEFHX18gc3BlY2lmaWVzIHRoZSBmbGFnIHRvIGNoZWNrLiAKKyAgKiBAcGFyYW0gIF9fSEFORExFX186IFNEIEhhbmRsZSAgIAorICAqIEBwYXJhbSAgX19GTEFHX186IHNwZWNpZmllcyB0aGUgZmxhZyB0byBjaGVjay4gCiAgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAgKiAgICAgICAgICAgIEBhcmcgU0RJT19GTEFHX0NDUkNGQUlMOiBDb21tYW5kIHJlc3BvbnNlIHJlY2VpdmVkIChDUkMgY2hlY2sgZmFpbGVkKQogICAqICAgICAgICAgICAgQGFyZyBTRElPX0ZMQUdfRENSQ0ZBSUw6IERhdGEgYmxvY2sgc2VudC9yZWNlaXZlZCAoQ1JDIGNoZWNrIGZhaWxlZCkKQEAgLTQ5Niw3ICs0OTMsNyBAQAogICAqICAgICAgICAgICAgQGFyZyBTRElPX0ZMQUdfUlhPVkVSUjogIFJlY2VpdmVkIEZJRk8gb3ZlcnJ1biBlcnJvcgogICAqICAgICAgICAgICAgQGFyZyBTRElPX0ZMQUdfQ01EUkVORDogIENvbW1hbmQgcmVzcG9uc2UgcmVjZWl2ZWQgKENSQyBjaGVjayBwYXNzZWQpCiAgICogICAgICAgICAgICBAYXJnIFNESU9fRkxBR19DTURTRU5UOiAgQ29tbWFuZCBzZW50IChubyByZXNwb25zZSByZXF1aXJlZCkKLSAgKiAgICAgICAgICAgIEBhcmcgU0RJT19GTEFHX0RBVEFFTkQ6ICBEYXRhIGVuZCAoZGF0YSBjb3VudGVyLCBTRElEQ09VTlQsIGlzIHplcm8pCisgICogICAgICAgICAgICBAYXJnIFNESU9fRkxBR19EQVRBRU5EOiAgRGF0YSBlbmQgKGRhdGEgY291bnRlciwgREFUQUNPVU5ULCBpcyB6ZXJvKQogICAqICAgICAgICAgICAgQGFyZyBTRElPX0ZMQUdfREJDS0VORDogIERhdGEgYmxvY2sgc2VudC9yZWNlaXZlZCAoQ1JDIGNoZWNrIHBhc3NlZCkKICAgKiAgICAgICAgICAgIEBhcmcgU0RJT19GTEFHX0NNREFDVDogICBDb21tYW5kIHRyYW5zZmVyIGluIHByb2dyZXNzCiAgICogICAgICAgICAgICBAYXJnIFNESU9fRkxBR19UWEFDVDogICAgRGF0YSB0cmFuc21pdCBpbiBwcm9ncmVzcwpAQCAtNTA5LDE1ICs1MDYsMTUgQEAKICAgKiAgICAgICAgICAgIEBhcmcgU0RJT19GTEFHX1JYRklGT0U6ICBSZWNlaXZlIEZJRk8gZW1wdHkKICAgKiAgICAgICAgICAgIEBhcmcgU0RJT19GTEFHX1RYREFWTDogICBEYXRhIGF2YWlsYWJsZSBpbiB0cmFuc21pdCBGSUZPCiAgICogICAgICAgICAgICBAYXJnIFNESU9fRkxBR19SWERBVkw6ICAgRGF0YSBhdmFpbGFibGUgaW4gcmVjZWl2ZSBGSUZPCi0gICogICAgICAgICAgICBAYXJnIFNESU9fRkxBR19TRElPSVQ6ICAgU0QgSS9PIGludGVycnVwdCByZWNlaXZlZAorICAqICAgICAgICAgICAgQGFyZyBTRElPX0ZMQUdfU0RJT0lUOiAgIFNESU8gaW50ZXJydXB0IHJlY2VpdmVkCiAgICogQHJldHZhbCBUaGUgbmV3IHN0YXRlIG9mIFNEIEZMQUcgKFNFVCBvciBSRVNFVCkuCiAgICovCiAjZGVmaW5lIF9fSEFMX1NEX0dFVF9GTEFHKF9fSEFORExFX18sIF9fRkxBR19fKSBfX1NESU9fR0VUX0ZMQUcoKF9fSEFORExFX18pLT5JbnN0YW5jZSwgKF9fRkxBR19fKSkKIAogLyoqCiAgICogQGJyaWVmICBDbGVhciB0aGUgU0QncyBwZW5kaW5nIGZsYWdzLgotICAqIEBwYXJhbSAgX19IQU5ETEVfXyBTRCBIYW5kbGUgIAotICAqIEBwYXJhbSAgX19GTEFHX18gc3BlY2lmaWVzIHRoZSBmbGFnIHRvIGNsZWFyLiAgCisgICogQHBhcmFtICBfX0hBTkRMRV9fOiBTRCBIYW5kbGUgIAorICAqIEBwYXJhbSAgX19GTEFHX186IHNwZWNpZmllcyB0aGUgZmxhZyB0byBjbGVhci4gIAogICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb3IgYSBjb21iaW5hdGlvbiBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAgKiAgICAgICAgICAgIEBhcmcgU0RJT19GTEFHX0NDUkNGQUlMOiBDb21tYW5kIHJlc3BvbnNlIHJlY2VpdmVkIChDUkMgY2hlY2sgZmFpbGVkKQogICAqICAgICAgICAgICAgQGFyZyBTRElPX0ZMQUdfRENSQ0ZBSUw6IERhdGEgYmxvY2sgc2VudC9yZWNlaXZlZCAoQ1JDIGNoZWNrIGZhaWxlZCkKQEAgLTUyNywxNyArNTI0LDE3IEBACiAgICogICAgICAgICAgICBAYXJnIFNESU9fRkxBR19SWE9WRVJSOiAgUmVjZWl2ZWQgRklGTyBvdmVycnVuIGVycm9yCiAgICogICAgICAgICAgICBAYXJnIFNESU9fRkxBR19DTURSRU5EOiAgQ29tbWFuZCByZXNwb25zZSByZWNlaXZlZCAoQ1JDIGNoZWNrIHBhc3NlZCkKICAgKiAgICAgICAgICAgIEBhcmcgU0RJT19GTEFHX0NNRFNFTlQ6ICBDb21tYW5kIHNlbnQgKG5vIHJlc3BvbnNlIHJlcXVpcmVkKQotICAqICAgICAgICAgICAgQGFyZyBTRElPX0ZMQUdfREFUQUVORDogIERhdGEgZW5kIChkYXRhIGNvdW50ZXIsIFNESURDT1VOVCwgaXMgemVybykKKyAgKiAgICAgICAgICAgIEBhcmcgU0RJT19GTEFHX0RBVEFFTkQ6ICBEYXRhIGVuZCAoZGF0YSBjb3VudGVyLCBEQVRBQ09VTlQsIGlzIHplcm8pCiAgICogICAgICAgICAgICBAYXJnIFNESU9fRkxBR19EQkNLRU5EOiAgRGF0YSBibG9jayBzZW50L3JlY2VpdmVkIChDUkMgY2hlY2sgcGFzc2VkKQotICAqICAgICAgICAgICAgQGFyZyBTRElPX0ZMQUdfU0RJT0lUOiAgIFNEIEkvTyBpbnRlcnJ1cHQgcmVjZWl2ZWQKKyAgKiAgICAgICAgICAgIEBhcmcgU0RJT19GTEFHX1NESU9JVDogICBTRElPIGludGVycnVwdCByZWNlaXZlZAogICAqIEByZXR2YWwgTm9uZQogICAqLwogI2RlZmluZSBfX0hBTF9TRF9DTEVBUl9GTEFHKF9fSEFORExFX18sIF9fRkxBR19fKSBfX1NESU9fQ0xFQVJfRkxBRygoX19IQU5ETEVfXyktPkluc3RhbmNlLCAoX19GTEFHX18pKQogCiAvKioKICAgKiBAYnJpZWYgIENoZWNrIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBTRCBpbnRlcnJ1cHQgaGFzIG9jY3VycmVkIG9yIG5vdC4KLSAgKiBAcGFyYW0gIF9fSEFORExFX18gU0QgSGFuZGxlICAgCi0gICogQHBhcmFtICBfX0lOVEVSUlVQVF9fIHNwZWNpZmllcyB0aGUgU0RNTUMgaW50ZXJydXB0IHNvdXJjZSB0byBjaGVjay4gCisgICogQHBhcmFtICBfX0hBTkRMRV9fOiBTRCBIYW5kbGUgICAKKyAgKiBAcGFyYW0gIF9fSU5URVJSVVBUX186IHNwZWNpZmllcyB0aGUgU0RNTUMgaW50ZXJydXB0IHNvdXJjZSB0byBjaGVjay4gCiAgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAgKiAgICAgICAgICAgIEBhcmcgU0RJT19JVF9DQ1JDRkFJTDogQ29tbWFuZCByZXNwb25zZSByZWNlaXZlZCAoQ1JDIGNoZWNrIGZhaWxlZCkgaW50ZXJydXB0CiAgICogICAgICAgICAgICBAYXJnIFNESU9fSVRfRENSQ0ZBSUw6IERhdGEgYmxvY2sgc2VudC9yZWNlaXZlZCAoQ1JDIGNoZWNrIGZhaWxlZCkgaW50ZXJydXB0CkBAIC01NDcsNyArNTQ0LDcgQEAKICAgKiAgICAgICAgICAgIEBhcmcgU0RJT19JVF9SWE9WRVJSOiAgUmVjZWl2ZWQgRklGTyBvdmVycnVuIGVycm9yIGludGVycnVwdAogICAqICAgICAgICAgICAgQGFyZyBTRElPX0lUX0NNRFJFTkQ6ICBDb21tYW5kIHJlc3BvbnNlIHJlY2VpdmVkIChDUkMgY2hlY2sgcGFzc2VkKSBpbnRlcnJ1cHQKICAgKiAgICAgICAgICAgIEBhcmcgU0RJT19JVF9DTURTRU5UOiAgQ29tbWFuZCBzZW50IChubyByZXNwb25zZSByZXF1aXJlZCkgaW50ZXJydXB0Ci0gICogICAgICAgICAgICBAYXJnIFNESU9fSVRfREFUQUVORDogIERhdGEgZW5kIChkYXRhIGNvdW50ZXIsIFNESURDT1VOVCwgaXMgemVybykgaW50ZXJydXB0CisgICogICAgICAgICAgICBAYXJnIFNESU9fSVRfREFUQUVORDogIERhdGEgZW5kIChkYXRhIGNvdW50ZXIsIERBVEFDT1VOVCwgaXMgemVybykgaW50ZXJydXB0CiAgICogICAgICAgICAgICBAYXJnIFNESU9fSVRfREJDS0VORDogIERhdGEgYmxvY2sgc2VudC9yZWNlaXZlZCAoQ1JDIGNoZWNrIHBhc3NlZCkgaW50ZXJydXB0CiAgICogICAgICAgICAgICBAYXJnIFNESU9fSVRfQ01EQUNUOiAgIENvbW1hbmQgdHJhbnNmZXIgaW4gcHJvZ3Jlc3MgaW50ZXJydXB0CiAgICogICAgICAgICAgICBAYXJnIFNESU9fSVRfVFhBQ1Q6ICAgIERhdGEgdHJhbnNtaXQgaW4gcHJvZ3Jlc3MgaW50ZXJydXB0CkBAIC01NjAsMTUgKzU1NywxNSBAQAogICAqICAgICAgICAgICAgQGFyZyBTRElPX0lUX1JYRklGT0U6ICBSZWNlaXZlIEZJRk8gZW1wdHkgaW50ZXJydXB0CiAgICogICAgICAgICAgICBAYXJnIFNESU9fSVRfVFhEQVZMOiAgIERhdGEgYXZhaWxhYmxlIGluIHRyYW5zbWl0IEZJRk8gaW50ZXJydXB0CiAgICogICAgICAgICAgICBAYXJnIFNESU9fSVRfUlhEQVZMOiAgIERhdGEgYXZhaWxhYmxlIGluIHJlY2VpdmUgRklGTyBpbnRlcnJ1cHQKLSAgKiAgICAgICAgICAgIEBhcmcgU0RJT19JVF9TRElPSVQ6ICAgU0QgSS9PIGludGVycnVwdCByZWNlaXZlZCBpbnRlcnJ1cHQKKyAgKiAgICAgICAgICAgIEBhcmcgU0RJT19JVF9TRElPSVQ6ICAgU0RJTyBpbnRlcnJ1cHQgcmVjZWl2ZWQgaW50ZXJydXB0CiAgICogQHJldHZhbCBUaGUgbmV3IHN0YXRlIG9mIFNEIElUIChTRVQgb3IgUkVTRVQpLgogICAqLwogI2RlZmluZSBfX0hBTF9TRF9HRVRfSVQoX19IQU5ETEVfXywgX19JTlRFUlJVUFRfXykgX19TRElPX0dFVF9JVCgoX19IQU5ETEVfXyktPkluc3RhbmNlLCAoX19JTlRFUlJVUFRfXykpCiAKIC8qKgogICAqIEBicmllZiAgQ2xlYXIgdGhlIFNEJ3MgaW50ZXJydXB0IHBlbmRpbmcgYml0cy4KLSAgKiBAcGFyYW0gIF9fSEFORExFX18gU0QgSGFuZGxlCi0gICogQHBhcmFtICBfX0lOVEVSUlVQVF9fIHNwZWNpZmllcyB0aGUgaW50ZXJydXB0IHBlbmRpbmcgYml0IHRvIGNsZWFyLiAKKyAgKiBAcGFyYW0gIF9fSEFORExFX186IFNEIEhhbmRsZQorICAqIEBwYXJhbSAgX19JTlRFUlJVUFRfXzogc3BlY2lmaWVzIHRoZSBpbnRlcnJ1cHQgcGVuZGluZyBiaXQgdG8gY2xlYXIuIAogICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb3IgYSBjb21iaW5hdGlvbiBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAgKiAgICAgICAgICAgIEBhcmcgU0RJT19JVF9DQ1JDRkFJTDogQ29tbWFuZCByZXNwb25zZSByZWNlaXZlZCAoQ1JDIGNoZWNrIGZhaWxlZCkgaW50ZXJydXB0CiAgICogICAgICAgICAgICBAYXJnIFNESU9fSVRfRENSQ0ZBSUw6IERhdGEgYmxvY2sgc2VudC9yZWNlaXZlZCAoQ1JDIGNoZWNrIGZhaWxlZCkgaW50ZXJydXB0CkBAIC01NzgsOCArNTc1LDggQEAKICAgKiAgICAgICAgICAgIEBhcmcgU0RJT19JVF9SWE9WRVJSOiAgUmVjZWl2ZWQgRklGTyBvdmVycnVuIGVycm9yIGludGVycnVwdAogICAqICAgICAgICAgICAgQGFyZyBTRElPX0lUX0NNRFJFTkQ6ICBDb21tYW5kIHJlc3BvbnNlIHJlY2VpdmVkIChDUkMgY2hlY2sgcGFzc2VkKSBpbnRlcnJ1cHQKICAgKiAgICAgICAgICAgIEBhcmcgU0RJT19JVF9DTURTRU5UOiAgQ29tbWFuZCBzZW50IChubyByZXNwb25zZSByZXF1aXJlZCkgaW50ZXJydXB0Ci0gICogICAgICAgICAgICBAYXJnIFNESU9fSVRfREFUQUVORDogIERhdGEgZW5kIChkYXRhIGNvdW50ZXIsIFNETU1DX0RDT1VOVCwgaXMgemVybykgaW50ZXJydXB0Ci0gICogICAgICAgICAgICBAYXJnIFNESU9fSVRfU0RJT0lUOiAgIFNEIEkvTyBpbnRlcnJ1cHQgcmVjZWl2ZWQgaW50ZXJydXB0CisgICogICAgICAgICAgICBAYXJnIFNESU9fSVRfREFUQUVORDogIERhdGEgZW5kIChkYXRhIGNvdW50ZXIsIERBVEFDT1VOVCwgaXMgemVybykgaW50ZXJydXB0CisgICogICAgICAgICAgICBAYXJnIFNESU9fSVRfU0RJT0lUOiAgIFNESU8gaW50ZXJydXB0IHJlY2VpdmVkIGludGVycnVwdAogICAqIEByZXR2YWwgTm9uZQogICAqLwogI2RlZmluZSBfX0hBTF9TRF9DTEVBUl9JVChfX0hBTkRMRV9fLCBfX0lOVEVSUlVQVF9fKSBfX1NESU9fQ0xFQVJfSVQoKF9fSEFORExFX18pLT5JbnN0YW5jZSwgKF9fSU5URVJSVVBUX18pKQpAQCAtNjI3LDExICs2MjQsMTIgQEAKIHZvaWQgSEFMX1NEX0Vycm9yQ2FsbGJhY2soU0RfSGFuZGxlVHlwZURlZiAqaHNkKTsKIHZvaWQgSEFMX1NEX0Fib3J0Q2FsbGJhY2soU0RfSGFuZGxlVHlwZURlZiAqaHNkKTsKIAotI2lmIChVU0VfSEFMX1NEX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxKQorI2lmIGRlZmluZWQgKFVTRV9IQUxfU0RfUkVHSVNURVJfQ0FMTEJBQ0tTKSAmJiAoVVNFX0hBTF9TRF9SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMVUpCiAvKiBTRCBjYWxsYmFjayByZWdpc3RlcmluZy91bnJlZ2lzdGVyaW5nICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfU0RfUmVnaXN0ZXJDYWxsYmFjayAgKFNEX0hhbmRsZVR5cGVEZWYgKmhzZCwgSEFMX1NEX0NhbGxiYWNrSURUeXBlRGVmIENhbGxiYWNrSWQsIHBTRF9DYWxsYmFja1R5cGVEZWYgcENhbGxiYWNrKTsKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9TRF9VblJlZ2lzdGVyQ2FsbGJhY2soU0RfSGFuZGxlVHlwZURlZiAqaHNkLCBIQUxfU0RfQ2FsbGJhY2tJRFR5cGVEZWYgQ2FsbGJhY2tJZCk7Ci0jZW5kaWYKKyNlbmRpZiAvKiBVU0VfSEFMX1NEX1JFR0lTVEVSX0NBTExCQUNLUyAqLworCiAvKioKICAgKiBAfQogICAqLwpAQCAtNzUxLDE1ICs3NDksMTMgQEAKICAgKiBAfQogICAqLwogCi0jZW5kaWYgLyogU1RNMzJGNDA1eHggfHwgU1RNMzJGNDE1eHggfHwgU1RNMzJGNDA3eHggfHwgU1RNMzJGNDE3eHggfHwgU1RNMzJGNDI3eHggfHwgU1RNMzJGNDM3eHggfHwgU1RNMzJGNDI5eHggfHwgU1RNMzJGNDM5eHggfHwKLSAgICAgICAgICBTVE0zMkY0MDF4QyB8fCBTVE0zMkY0MDF4RSB8fCBTVE0zMkY0MTF4RSB8fCBTVE0zMkY0NDZ4eCB8fCBTVE0zMkY0Njl4eCB8fCBTVE0zMkY0Nzl4eCB8fCBTVE0zMkY0MTJaeCB8fCBTVE0zMkY0MTJWeCB8fAotICAgICAgICAgIFNUTTMyRjQxMlJ4IHx8IFNUTTMyRjQxMkN4IHx8IFNUTTMyRjQxM3h4IHx8IFNUTTMyRjQyM3h4ICovCisjZW5kaWYgLyogU0RJTyAqLwogCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KICNlbmRpZgogCiAKLSNlbmRpZiAvKiBfX1NUTTMyRjR4eF9IQUxfU0RfSCAqLyAKKyNlbmRpZiAvKiBTVE0zMkY0eHhfSEFMX1NEX0ggKi8gCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKiogKEMpIENPUFlSSUdIVCBTVE1pY3JvZWxlY3Ryb25pY3MgKioqKipFTkQgT0YgRklMRSoqKiovCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJmNHh4X2hhbF9zbWFydGNhcmQuaCBiL0luYy9zdG0zMmY0eHhfaGFsX3NtYXJ0Y2FyZC5oCmluZGV4IGQzMjlhYzguLjc1ZTMzODMgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmY0eHhfaGFsX3NtYXJ0Y2FyZC5oCisrKyBiL0luYy9zdG0zMmY0eHhfaGFsX3NtYXJ0Y2FyZC5oCkBAIC03MTgsOSArNzE4LDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTkFDSykgPT0gU01BUlRDQVJEX05BQ0tfRElTQUJMRSkpCiAjZGVmaW5lIElTX1NNQVJUQ0FSRF9CQVVEUkFURShCQVVEUkFURSkgICAgICgoQkFVRFJBVEUpIDwgMTA1MDAwMDFVKQogCi0jZGVmaW5lIFNNQVJUQ0FSRF9ESVYoX19QQ0xLX18sIF9fQkFVRF9fKSAgICAgICAgICAgICAgICAoKChfX1BDTEtfXykqMjVVKS8oNFUqKF9fQkFVRF9fKSkpCisjZGVmaW5lIFNNQVJUQ0FSRF9ESVYoX19QQ0xLX18sIF9fQkFVRF9fKSAgICAgICAgICAgICAgICAoKHVpbnQzMl90KSgoKCh1aW50NjRfdCkoX19QQ0xLX18pKSoyNVUpLyg0VSooKHVpbnQ2NF90KShfX0JBVURfXykpKSkpCiAjZGVmaW5lIFNNQVJUQ0FSRF9ESVZNQU5UKF9fUENMS19fLCBfX0JBVURfXykgICAgICAgICAgICAoU01BUlRDQVJEX0RJVigoX19QQ0xLX18pLCAoX19CQVVEX18pKS8xMDBVKQotI2RlZmluZSBTTUFSVENBUkRfRElWRlJBUShfX1BDTEtfXywgX19CQVVEX18pICAgICAgICAgICAgKCgoU01BUlRDQVJEX0RJVigoX19QQ0xLX18pLCAoX19CQVVEX18pKSAtIChTTUFSVENBUkRfRElWTUFOVCgoX19QQ0xLX18pLCAoX19CQVVEX18pKSAqIDEwMFUpKSAqIDE2VSArIDUwVSkgLyAxMDBVKQorI2RlZmluZSBTTUFSVENBUkRfRElWRlJBUShfX1BDTEtfXywgX19CQVVEX18pICAgICAgICAgICAgKCgoKFNNQVJUQ0FSRF9ESVYoKF9fUENMS19fKSwgKF9fQkFVRF9fKSkgLSAoU01BUlRDQVJEX0RJVk1BTlQoKF9fUENMS19fKSwgKF9fQkFVRF9fKSkgKiAxMDBVKSkgKiAxNlUpICsgNTBVKSAvIDEwMFUpCiAvKiBTTUFSVENBUkQgQlJSID0gbWFudGlzc2EgKyBvdmVyZmxvdyArIGZyYWN0aW9uCiAgICAgICAgICAgICA9IChTTUFSVENBUkQgRElWTUFOVCA8PCA0KSArIChTTUFSVENBUkQgRElWRlJBUSAmIDB4RjApICsgKFNNQVJUQ0FSRCBESVZGUkFRICYgMHgwRlUpICovCiAjZGVmaW5lIFNNQVJUQ0FSRF9CUlIoX19QQ0xLX18sIF9fQkFVRF9fKSAgICAgICAoKChTTUFSVENBUkRfRElWTUFOVCgoX19QQ0xLX18pLCAoX19CQVVEX18pKSA8PCA0VSkgKyBcCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJmNHh4X2hhbF9zcGkuaCBiL0luYy9zdG0zMmY0eHhfaGFsX3NwaS5oCmluZGV4IGMyMjBiMjEuLjQxOTAzZGEgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmY0eHhfaGFsX3NwaS5oCisrKyBiL0luYy9zdG0zMmY0eHhfaGFsX3NwaS5oCkBAIC0zMTksNyArMzE5LDggQEAKICNkZWZpbmUgU1BJX0ZMQUdfTU9ERiAgICAgICAgICAgICAgICAgICBTUElfU1JfTU9ERiAgIC8qIFNQSSBFcnJvciBmbGFnOiBNb2RlIGZhdWx0IGZsYWcgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIFNQSV9GTEFHX09WUiAgICAgICAgICAgICAgICAgICAgU1BJX1NSX09WUiAgICAvKiBTUEkgRXJyb3IgZmxhZzogT3ZlcnJ1biBmbGFnICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBTUElfRkxBR19GUkUgICAgICAgICAgICAgICAgICAgIFNQSV9TUl9GUkUgICAgLyogU1BJIEVycm9yIGZsYWc6IFRJIG1vZGUgZnJhbWUgZm9ybWF0IGVycm9yIGZsYWcgKi8KLSNkZWZpbmUgU1BJX0ZMQUdfTUFTSyAgICAgICAgICAgICAgICAgICAoU1BJX1NSX1JYTkUgfCBTUElfU1JfVFhFIHwgU1BJX1NSX0JTWSB8IFNQSV9TUl9DUkNFUlIgfCBTUElfU1JfTU9ERiB8IFNQSV9TUl9PVlIgfCBTUElfU1JfRlJFKQorI2RlZmluZSBTUElfRkxBR19NQVNLICAgICAgICAgICAgICAgICAgIChTUElfU1JfUlhORSB8IFNQSV9TUl9UWEUgfCBTUElfU1JfQlNZIHwgU1BJX1NSX0NSQ0VSUlwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBTUElfU1JfTU9ERiB8IFNQSV9TUl9PVlIgfCBTUElfU1JfRlJFKQogLyoqCiAgICogQH0KICAgKi8KQEAgLTM0Niw3ICszNDcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwKQogI2Vsc2UKICNkZWZpbmUgX19IQUxfU1BJX1JFU0VUX0hBTkRMRV9TVEFURShfX0hBTkRMRV9fKSAoKF9fSEFORExFX18pLT5TdGF0ZSA9IEhBTF9TUElfU1RBVEVfUkVTRVQpCi0jZW5kaWYKKyNlbmRpZiAvKiBVU0VfSEFMX1NQSV9SRUdJU1RFUl9DQUxMQkFDS1MgKi8KIAogLyoqIEBicmllZiAgRW5hYmxlIHRoZSBzcGVjaWZpZWQgU1BJIGludGVycnVwdHMuCiAgICogQHBhcmFtICBfX0hBTkRMRV9fIHNwZWNpZmllcyB0aGUgU1BJIEhhbmRsZS4KQEAgLTM4Miw3ICszODMsOCBAQAogICAqICAgICAgICAgICAgQGFyZyBTUElfSVRfRVJSOiBFcnJvciBpbnRlcnJ1cHQgZW5hYmxlCiAgICogQHJldHZhbCBUaGUgbmV3IHN0YXRlIG9mIF9fSVRfXyAoVFJVRSBvciBGQUxTRSkuCiAgICovCi0jZGVmaW5lIF9fSEFMX1NQSV9HRVRfSVRfU09VUkNFKF9fSEFORExFX18sIF9fSU5URVJSVVBUX18pICgoKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNSMiAmIChfX0lOVEVSUlVQVF9fKSkgPT0gKF9fSU5URVJSVVBUX18pKSA/IFNFVCA6IFJFU0VUKQorI2RlZmluZSBfX0hBTF9TUElfR0VUX0lUX1NPVVJDRShfX0hBTkRMRV9fLCBfX0lOVEVSUlVQVF9fKSAoKCgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5DUjJcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgKF9fSU5URVJSVVBUX18pKSA9PSAoX19JTlRFUlJVUFRfXykpID8gU0VUIDogUkVTRVQpCiAKIC8qKiBAYnJpZWYgIENoZWNrIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBTUEkgZmxhZyBpcyBzZXQgb3Igbm90LgogICAqIEBwYXJhbSAgX19IQU5ETEVfXyBzcGVjaWZpZXMgdGhlIFNQSSBIYW5kbGUuCkBAIC00NDAsOSArNDQyLDkgQEAKICAgKi8KICNkZWZpbmUgX19IQUxfU1BJX0NMRUFSX0ZSRUZMQUcoX19IQU5ETEVfXykgICAgICAgIFwKICAgZG97ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgX19JTyB1aW50MzJfdCB0bXByZWdfZnJlID0gMHgwMFU7ICAgICAgICAgICAgICAgIFwKLSAgdG1wcmVnX2ZyZSA9IChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPlNSOyAgICAgICAgIFwKLSAgVU5VU0VEKHRtcHJlZ19mcmUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfX0lPIHVpbnQzMl90IHRtcHJlZ19mcmUgPSAweDAwVTsgICAgICAgICAgICAgIFwKKyAgICB0bXByZWdfZnJlID0gKF9fSEFORExFX18pLT5JbnN0YW5jZS0+U1I7ICAgICAgIFwKKyAgICBVTlVTRUQodG1wcmVnX2ZyZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgfXdoaWxlKDBVKQogCiAvKiogQGJyaWVmICBFbmFibGUgdGhlIFNQSSBwZXJpcGhlcmFsLgpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZjR4eF9oYWxfdGltLmggYi9JbmMvc3RtMzJmNHh4X2hhbF90aW0uaAppbmRleCA5Zjc5YWQ5Li5kNmYxYTFhIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmNHh4X2hhbF90aW0uaAorKysgYi9JbmMvc3RtMzJmNHh4X2hhbF90aW0uaApAQCAtMTY3LDcgKzE2Nyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBUSU1fRW5jb2Rlcl9Nb2RlICovCiAKICAgdWludDMyX3QgSUMxUG9sYXJpdHk7ICAgLyohPCBTcGVjaWZpZXMgdGhlIGFjdGl2ZSBlZGdlIG9mIHRoZSBpbnB1dCBzaWduYWwuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBUSU1fSW5wdXRfQ2FwdHVyZV9Qb2xhcml0eSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgVElNX0VuY29kZXJfSW5wdXRfUG9sYXJpdHkgKi8KIAogICB1aW50MzJfdCBJQzFTZWxlY3Rpb247ICAvKiE8IFNwZWNpZmllcyB0aGUgaW5wdXQuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBUSU1fSW5wdXRfQ2FwdHVyZV9TZWxlY3Rpb24gKi8KQEAgLTE3OSw3ICsxNzksNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIG51bWJlciBiZXR3ZWVuIE1pbl9EYXRhID0gMHgwIGFuZCBNYXhfRGF0YSA9IDB4RiAqLwogCiAgIHVpbnQzMl90IElDMlBvbGFyaXR5OyAgIC8qITwgU3BlY2lmaWVzIHRoZSBhY3RpdmUgZWRnZSBvZiB0aGUgaW5wdXQgc2lnbmFsLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgVElNX0lucHV0X0NhcHR1cmVfUG9sYXJpdHkgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIFRJTV9FbmNvZGVyX0lucHV0X1BvbGFyaXR5ICovCiAKICAgdWludDMyX3QgSUMyU2VsZWN0aW9uOyAgLyohPCBTcGVjaWZpZXMgdGhlIGlucHV0LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBUSU1fSW5wdXRfQ2FwdHVyZV9TZWxlY3Rpb24gKi8KQEAgLTIzMSw3ICsyMzEsMTIgQEAKICAgdWludDMyX3QgIE1hc3Rlck91dHB1dFRyaWdnZXI7ICAgLyohPCBUcmlnZ2VyIG91dHB1dCAoVFJHTykgc2VsZWN0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBUSU1fTWFzdGVyX01vZGVfU2VsZWN0aW9uICovCiAgIHVpbnQzMl90ICBNYXN0ZXJTbGF2ZU1vZGU7ICAgICAgIC8qITwgTWFzdGVyL3NsYXZlIG1vZGUgc2VsZWN0aW9uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBUSU1fTWFzdGVyX1NsYXZlX01vZGUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIFRJTV9NYXN0ZXJfU2xhdmVfTW9kZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBub3RlIFdoZW4gdGhlIE1hc3Rlci9zbGF2ZSBtb2RlIGlzIGVuYWJsZWQsIHRoZSBlZmZlY3Qgb2YKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbiBldmVudCBvbiB0aGUgdHJpZ2dlciBpbnB1dCAoVFJHSSkgaXMgZGVsYXllZCB0byBhbGxvdyBhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVyZmVjdCBzeW5jaHJvbml6YXRpb24gYmV0d2VlbiB0aGUgY3VycmVudCB0aW1lciBhbmQgaXRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xhdmVzICh0aHJvdWdoIFRSR08pLiBJdCBpcyBub3QgbWFuZGF0b3J5IGluIGNhc2Ugb2YgdGltZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW5jaHJvbml6YXRpb24gbW9kZS4gKi8KIH0gVElNX01hc3RlckNvbmZpZ1R5cGVEZWY7CiAKIC8qKgpAQCAtNTg4LDYgKzU5MywxNSBAQAogICAqIEB9CiAgICovCiAKKy8qKiBAZGVmZ3JvdXAgVElNX0VuY29kZXJfSW5wdXRfUG9sYXJpdHkgVElNIEVuY29kZXIgSW5wdXQgUG9sYXJpdHkKKyAgKiBAeworICAqLworI2RlZmluZSAgVElNX0VOQ09ERVJJTlBVVFBPTEFSSVRZX1JJU0lORyAgIFRJTV9JTlBVVENIQU5ORUxQT0xBUklUWV9SSVNJTkcgICAgICAvKiE8IEVuY29kZXIgaW5wdXQgd2l0aCByaXNpbmcgZWRnZSBwb2xhcml0eSAgKi8KKyNkZWZpbmUgIFRJTV9FTkNPREVSSU5QVVRQT0xBUklUWV9GQUxMSU5HICBUSU1fSU5QVVRDSEFOTkVMUE9MQVJJVFlfRkFMTElORyAgICAgLyohPCBFbmNvZGVyIGlucHV0IHdpdGggZmFsbGluZyBlZGdlIHBvbGFyaXR5ICovCisvKioKKyAgKiBAfQorICAqLworCiAvKiogQGRlZmdyb3VwIFRJTV9JbnB1dF9DYXB0dXJlX1NlbGVjdGlvbiBUSU0gSW5wdXQgQ2FwdHVyZSBTZWxlY3Rpb24KICAgKiBAewogICAqLwpAQCAtMTAyMCwxNSArMTAzNCwxNSBAQAogICAqIEByZXR2YWwgTm9uZQogICAqLwogI2RlZmluZSBfX0hBTF9USU1fRElTQUJMRShfX0hBTkRMRV9fKSBcCi0gICAgICAgICAgICAgICAgICAgICAgICBkbyB7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5DQ0VSICYgVElNX0NDRVJfQ0N4RV9NQVNLKSA9PSAwVUwpIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZigoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+Q0NFUiAmIFRJTV9DQ0VSX0NDeE5FX01BU0spID09IDBVTCkgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5JbnN0YW5jZS0+Q1IxICY9IH4oVElNX0NSMV9DRU4pOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgIH0gXAotICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwKQorICBkbyB7IFwKKyAgICBpZiAoKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNDRVIgJiBUSU1fQ0NFUl9DQ3hFX01BU0spID09IDBVTCkgXAorICAgIHsgXAorICAgICAgaWYoKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNDRVIgJiBUSU1fQ0NFUl9DQ3hORV9NQVNLKSA9PSAwVUwpIFwKKyAgICAgIHsgXAorICAgICAgICAoX19IQU5ETEVfXyktPkluc3RhbmNlLT5DUjEgJj0gfihUSU1fQ1IxX0NFTik7IFwKKyAgICAgIH0gXAorICAgIH0gXAorICB9IHdoaWxlKDApCiAKIC8qKgogICAqIEBicmllZiAgRGlzYWJsZSB0aGUgVElNIG1haW4gT3V0cHV0LgpAQCAtMTAzNywxNSArMTA1MSwxNSBAQAogICAqIEBub3RlIFRoZSBNYWluIE91dHB1dCBFbmFibGUgb2YgYSB0aW1lciBpbnN0YW5jZSBpcyBkaXNhYmxlZCBvbmx5IGlmIGFsbCB0aGUgQ0N4IGFuZCBDQ3hOIGNoYW5uZWxzIGhhdmUgYmVlbiBkaXNhYmxlZAogICAqLwogI2RlZmluZSBfX0hBTF9USU1fTU9FX0RJU0FCTEUoX19IQU5ETEVfXykgXAotICAgICAgICAgICAgICAgICAgICAgICAgZG8geyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+Q0NFUiAmIFRJTV9DQ0VSX0NDeEVfTUFTSykgPT0gMFVMKSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5DQ0VSICYgVElNX0NDRVJfQ0N4TkVfTUFTSykgPT0gMFVMKSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPkluc3RhbmNlLT5CRFRSICY9IH4oVElNX0JEVFJfTU9FKTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gXAotICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwKQorICBkbyB7IFwKKyAgICBpZiAoKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNDRVIgJiBUSU1fQ0NFUl9DQ3hFX01BU0spID09IDBVTCkgXAorICAgIHsgXAorICAgICAgaWYoKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNDRVIgJiBUSU1fQ0NFUl9DQ3hORV9NQVNLKSA9PSAwVUwpIFwKKyAgICAgIHsgXAorICAgICAgICAoX19IQU5ETEVfXyktPkluc3RhbmNlLT5CRFRSICY9IH4oVElNX0JEVFJfTU9FKTsgXAorICAgICAgfSBcCisgICAgfSBcCisgIH0gd2hpbGUoMCkKIAogLyoqCiAgICogQGJyaWVmICBEaXNhYmxlIHRoZSBUSU0gbWFpbiBPdXRwdXQuCkBAIC0xMTcyLDcgKzExODYsOCBAQAogICAqICAgICAgICAgICAgQGFyZyBUSU1fSVRfQlJFQUs6IEJyZWFrIGludGVycnVwdAogICAqIEByZXR2YWwgVGhlIHN0YXRlIG9mIFRJTV9JVCAoU0VUIG9yIFJFU0VUKS4KICAgKi8KLSNkZWZpbmUgX19IQUxfVElNX0dFVF9JVF9TT1VSQ0UoX19IQU5ETEVfXywgX19JTlRFUlJVUFRfXykgKCgoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+RElFUiAmIChfX0lOVEVSUlVQVF9fKSkgPT0gKF9fSU5URVJSVVBUX18pKSA/IFNFVCA6IFJFU0VUKQorI2RlZmluZSBfX0hBTF9USU1fR0VUX0lUX1NPVVJDRShfX0hBTkRMRV9fLCBfX0lOVEVSUlVQVF9fKSAoKCgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5ESUVSICYgKF9fSU5URVJSVVBUX18pKSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT0gKF9fSU5URVJSVVBUX18pKSA/IFNFVCA6IFJFU0VUKQogCiAvKiogQGJyaWVmIENsZWFyIHRoZSBUSU0gaW50ZXJydXB0IHBlbmRpbmcgYml0cy4KICAgKiBAcGFyYW0gIF9fSEFORExFX18gVElNIGhhbmRsZQpAQCAtMTIyMCw4ICsxMjM1LDcgQEAKICAgKiBAcGFyYW0gIF9fSEFORExFX18gVElNIGhhbmRsZS4KICAgKiBAcmV0dmFsIDE2LWJpdCBvciAzMi1iaXQgdmFsdWUgb2YgdGhlIHRpbWVyIGNvdW50ZXIgcmVnaXN0ZXIgKFRJTXhfQ05UKQogICAqLwotI2RlZmluZSBfX0hBTF9USU1fR0VUX0NPVU5URVIoX19IQU5ETEVfXykgXAotICAgKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNOVCkKKyNkZWZpbmUgX19IQUxfVElNX0dFVF9DT1VOVEVSKF9fSEFORExFX18pICAoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+Q05UKQogCiAvKioKICAgKiBAYnJpZWYgIFNldCB0aGUgVElNIEF1dG9yZWxvYWQgUmVnaXN0ZXIgdmFsdWUgb24gcnVudGltZSB3aXRob3V0IGNhbGxpbmcgYW5vdGhlciB0aW1lIGFueSBJbml0IGZ1bmN0aW9uLgpAQCAtMTIzMCwxOCArMTI0NCwxNyBAQAogICAqIEByZXR2YWwgTm9uZQogICAqLwogI2RlZmluZSBfX0hBTF9USU1fU0VUX0FVVE9SRUxPQUQoX19IQU5ETEVfXywgX19BVVRPUkVMT0FEX18pIFwKLSAgICAgICAgICAgICAgICAgICAgICAgIGRveyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPkluc3RhbmNlLT5BUlIgPSAoX19BVVRPUkVMT0FEX18pOyAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5Jbml0LlBlcmlvZCA9IChfX0FVVE9SRUxPQURfXyk7ICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwKQorICBkb3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkFSUiA9IChfX0FVVE9SRUxPQURfXyk7ICBcCisgICAgKF9fSEFORExFX18pLT5Jbml0LlBlcmlvZCA9IChfX0FVVE9SRUxPQURfXyk7ICAgIFwKKyAgfSB3aGlsZSgwKQogCiAvKioKICAgKiBAYnJpZWYgIEdldCB0aGUgVElNIEF1dG9yZWxvYWQgUmVnaXN0ZXIgdmFsdWUgb24gcnVudGltZS4KICAgKiBAcGFyYW0gIF9fSEFORExFX18gVElNIGhhbmRsZS4KICAgKiBAcmV0dmFsIDE2LWJpdCBvciAzMi1iaXQgdmFsdWUgb2YgdGhlIHRpbWVyIGF1dG8tcmVsb2FkIHJlZ2lzdGVyKFRJTXhfQVJSKQogICAqLwotI2RlZmluZSBfX0hBTF9USU1fR0VUX0FVVE9SRUxPQUQoX19IQU5ETEVfXykgXAotICAgKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkFSUikKKyNkZWZpbmUgX19IQUxfVElNX0dFVF9BVVRPUkVMT0FEKF9fSEFORExFX18pICAoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+QVJSKQogCiAvKioKICAgKiBAYnJpZWYgIFNldCB0aGUgVElNIENsb2NrIERpdmlzaW9uIHZhbHVlIG9uIHJ1bnRpbWUgd2l0aG91dCBjYWxsaW5nIGFub3RoZXIgdGltZSBhbnkgSW5pdCBmdW5jdGlvbi4KQEAgLTEyNTQsMTEgKzEyNjcsMTEgQEAKICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KICNkZWZpbmUgX19IQUxfVElNX1NFVF9DTE9DS0RJVklTSU9OKF9fSEFORExFX18sIF9fQ0tEX18pIFwKLSAgICAgICAgICAgICAgICAgICAgICAgIGRveyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNSMSAmPSAoflRJTV9DUjFfQ0tEKTsgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNSMSB8PSAoX19DS0RfXyk7ICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+SW5pdC5DbG9ja0RpdmlzaW9uID0gKF9fQ0tEX18pOyAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwKQorICBkb3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKF9fSEFORExFX18pLT5JbnN0YW5jZS0+Q1IxICY9ICh+VElNX0NSMV9DS0QpOyAgXAorICAgIChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNSMSB8PSAoX19DS0RfXyk7ICAgICAgIFwKKyAgICAoX19IQU5ETEVfXyktPkluaXQuQ2xvY2tEaXZpc2lvbiA9IChfX0NLRF9fKTsgICBcCisgIH0gd2hpbGUoMCkKIAogLyoqCiAgICogQGJyaWVmICBHZXQgdGhlIFRJTSBDbG9jayBEaXZpc2lvbiB2YWx1ZSBvbiBydW50aW1lLgpAQCAtMTI2OCw4ICsxMjgxLDcgQEAKICAgKiAgICAgICAgICAgIEBhcmcgVElNX0NMT0NLRElWSVNJT05fRElWMjogdERUUz0yKnRDS19JTlQKICAgKiAgICAgICAgICAgIEBhcmcgVElNX0NMT0NLRElWSVNJT05fRElWNDogdERUUz00KnRDS19JTlQKICAgKi8KLSNkZWZpbmUgX19IQUxfVElNX0dFVF9DTE9DS0RJVklTSU9OKF9fSEFORExFX18pICBcCi0gICAoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+Q1IxICYgVElNX0NSMV9DS0QpCisjZGVmaW5lIF9fSEFMX1RJTV9HRVRfQ0xPQ0tESVZJU0lPTihfX0hBTkRMRV9fKSAgKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNSMSAmIFRJTV9DUjFfQ0tEKQogCiAvKioKICAgKiBAYnJpZWYgIFNldCB0aGUgVElNIElucHV0IENhcHR1cmUgcHJlc2NhbGVyIG9uIHJ1bnRpbWUgd2l0aG91dCBjYWxsaW5nIGFub3RoZXIgdGltZSBIQUxfVElNX0lDX0NvbmZpZ0NoYW5uZWwoKSBmdW5jdGlvbi4KQEAgLTEyODksMTAgKzEzMDEsMTAgQEAKICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KICNkZWZpbmUgX19IQUxfVElNX1NFVF9JQ1BSRVNDQUxFUihfX0hBTkRMRV9fLCBfX0NIQU5ORUxfXywgX19JQ1BTQ19fKSBcCi0gICAgICAgICAgICAgICAgICAgICAgICBkb3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVElNX1JFU0VUX0lDUFJFU0NBTEVSVkFMVUUoKF9fSEFORExFX18pLCAoX19DSEFOTkVMX18pKTsgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJTV9TRVRfSUNQUkVTQ0FMRVJWQUxVRSgoX19IQU5ETEVfXyksIChfX0NIQU5ORUxfXyksIChfX0lDUFNDX18pKTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlKDApCisgIGRveyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgVElNX1JFU0VUX0lDUFJFU0NBTEVSVkFMVUUoKF9fSEFORExFX18pLCAoX19DSEFOTkVMX18pKTsgIFwKKyAgICBUSU1fU0VUX0lDUFJFU0NBTEVSVkFMVUUoKF9fSEFORExFX18pLCAoX19DSEFOTkVMX18pLCAoX19JQ1BTQ19fKSk7IFwKKyAgfSB3aGlsZSgwKQogCiAvKioKICAgKiBAYnJpZWYgIEdldCB0aGUgVElNIElucHV0IENhcHR1cmUgcHJlc2NhbGVyIG9uIHJ1bnRpbWUuCkBAIC0xMzI4LDEwICsxMzQwLDEwIEBACiAgICogQHJldHZhbCBOb25lCiAgICovCiAjZGVmaW5lIF9fSEFMX1RJTV9TRVRfQ09NUEFSRShfX0hBTkRMRV9fLCBfX0NIQU5ORUxfXywgX19DT01QQVJFX18pIFwKLSgoKF9fQ0hBTk5FTF9fKSA9PSBUSU1fQ0hBTk5FTF8xKSA/ICgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5DQ1IxID0gKF9fQ09NUEFSRV9fKSkgOlwKLSAoKF9fQ0hBTk5FTF9fKSA9PSBUSU1fQ0hBTk5FTF8yKSA/ICgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5DQ1IyID0gKF9fQ09NUEFSRV9fKSkgOlwKLSAoKF9fQ0hBTk5FTF9fKSA9PSBUSU1fQ0hBTk5FTF8zKSA/ICgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5DQ1IzID0gKF9fQ09NUEFSRV9fKSkgOlwKLSAoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+Q0NSNCA9IChfX0NPTVBBUkVfXykpKQorICAoKChfX0NIQU5ORUxfXykgPT0gVElNX0NIQU5ORUxfMSkgPyAoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+Q0NSMSA9IChfX0NPTVBBUkVfXykpIDpcCisgICAoKF9fQ0hBTk5FTF9fKSA9PSBUSU1fQ0hBTk5FTF8yKSA/ICgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5DQ1IyID0gKF9fQ09NUEFSRV9fKSkgOlwKKyAgICgoX19DSEFOTkVMX18pID09IFRJTV9DSEFOTkVMXzMpID8gKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNDUjMgPSAoX19DT01QQVJFX18pKSA6XAorICAgKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNDUjQgPSAoX19DT01QQVJFX18pKSkKIAogLyoqCiAgICogQGJyaWVmICBHZXQgdGhlIFRJTSBDYXB0dXJlIENvbXBhcmUgUmVnaXN0ZXIgdmFsdWUgb24gcnVudGltZS4KQEAgLTEzNDUsMTAgKzEzNTcsMTAgQEAKICAgKiBAcmV0dmFsIDE2LWJpdCBvciAzMi1iaXQgdmFsdWUgb2YgdGhlIGNhcHR1cmUvY29tcGFyZSByZWdpc3RlciAoVElNeF9DQ1J5KQogICAqLwogI2RlZmluZSBfX0hBTF9USU1fR0VUX0NPTVBBUkUoX19IQU5ETEVfXywgX19DSEFOTkVMX18pIFwKLSgoKF9fQ0hBTk5FTF9fKSA9PSBUSU1fQ0hBTk5FTF8xKSA/ICgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5DQ1IxKSA6XAotICgoX19DSEFOTkVMX18pID09IFRJTV9DSEFOTkVMXzIpID8gKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNDUjIpIDpcCi0gKChfX0NIQU5ORUxfXykgPT0gVElNX0NIQU5ORUxfMykgPyAoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+Q0NSMykgOlwKLSAoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+Q0NSNCkpCisgICgoKF9fQ0hBTk5FTF9fKSA9PSBUSU1fQ0hBTk5FTF8xKSA/ICgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5DQ1IxKSA6XAorICAgKChfX0NIQU5ORUxfXykgPT0gVElNX0NIQU5ORUxfMikgPyAoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+Q0NSMikgOlwKKyAgICgoX19DSEFOTkVMX18pID09IFRJTV9DSEFOTkVMXzMpID8gKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNDUjMpIDpcCisgICAoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+Q0NSNCkpCiAKIC8qKgogICAqIEBicmllZiAgU2V0IHRoZSBUSU0gT3V0cHV0IGNvbXBhcmUgcHJlbG9hZC4KQEAgLTEzNjIsMTAgKzEzNzQsMTAgQEAKICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KICNkZWZpbmUgX19IQUxfVElNX0VOQUJMRV9PQ3hQUkVMT0FEKF9fSEFORExFX18sIF9fQ0hBTk5FTF9fKSAgICBcCi0gICAgICAgICgoKF9fQ0hBTk5FTF9fKSA9PSBUSU1fQ0hBTk5FTF8xKSA/ICgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5DQ01SMSB8PSBUSU1fQ0NNUjFfT0MxUEUpIDpcCi0gICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBUSU1fQ0hBTk5FTF8yKSA/ICgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5DQ01SMSB8PSBUSU1fQ0NNUjFfT0MyUEUpIDpcCi0gICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBUSU1fQ0hBTk5FTF8zKSA/ICgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5DQ01SMiB8PSBUSU1fQ0NNUjJfT0MzUEUpIDpcCi0gICAgICAgICAoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+Q0NNUjIgfD0gVElNX0NDTVIyX09DNFBFKSkKKyAgKCgoX19DSEFOTkVMX18pID09IFRJTV9DSEFOTkVMXzEpID8gKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNDTVIxIHw9IFRJTV9DQ01SMV9PQzFQRSkgOlwKKyAgICgoX19DSEFOTkVMX18pID09IFRJTV9DSEFOTkVMXzIpID8gKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNDTVIxIHw9IFRJTV9DQ01SMV9PQzJQRSkgOlwKKyAgICgoX19DSEFOTkVMX18pID09IFRJTV9DSEFOTkVMXzMpID8gKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNDTVIyIHw9IFRJTV9DQ01SMl9PQzNQRSkgOlwKKyAgICgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5DQ01SMiB8PSBUSU1fQ0NNUjJfT0M0UEUpKQogCiAvKioKICAgKiBAYnJpZWYgIFJlc2V0IHRoZSBUSU0gT3V0cHV0IGNvbXBhcmUgcHJlbG9hZC4KQEAgLTEzNzksMTAgKzEzOTEsNTIgQEAKICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KICNkZWZpbmUgX19IQUxfVElNX0RJU0FCTEVfT0N4UFJFTE9BRChfX0hBTkRMRV9fLCBfX0NIQU5ORUxfXykgICAgXAotICAgICAgICAoKChfX0NIQU5ORUxfXykgPT0gVElNX0NIQU5ORUxfMSkgPyAoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+Q0NNUjEgJj0gKHVpbnQxNl90KX5USU1fQ0NNUjFfT0MxUEUpIDpcCi0gICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBUSU1fQ0hBTk5FTF8yKSA/ICgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5DQ01SMSAmPSAodWludDE2X3QpflRJTV9DQ01SMV9PQzJQRSkgOlwKLSAgICAgICAgICgoX19DSEFOTkVMX18pID09IFRJTV9DSEFOTkVMXzMpID8gKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNDTVIyICY9ICh1aW50MTZfdCl+VElNX0NDTVIyX09DM1BFKSA6XAotICAgICAgICAgKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNDTVIyICY9ICh1aW50MTZfdCl+VElNX0NDTVIyX09DNFBFKSkKKyAgKCgoX19DSEFOTkVMX18pID09IFRJTV9DSEFOTkVMXzEpID8gKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNDTVIxICY9IH5USU1fQ0NNUjFfT0MxUEUpIDpcCisgICAoKF9fQ0hBTk5FTF9fKSA9PSBUSU1fQ0hBTk5FTF8yKSA/ICgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5DQ01SMSAmPSB+VElNX0NDTVIxX09DMlBFKSA6XAorICAgKChfX0NIQU5ORUxfXykgPT0gVElNX0NIQU5ORUxfMykgPyAoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+Q0NNUjIgJj0gflRJTV9DQ01SMl9PQzNQRSkgOlwKKyAgICgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5DQ01SMiAmPSB+VElNX0NDTVIyX09DNFBFKSkKKworLyoqCisgICogQGJyaWVmICBFbmFibGUgZmFzdCBtb2RlIGZvciBhIGdpdmVuIGNoYW5uZWwuCisgICogQHBhcmFtICBfX0hBTkRMRV9fIFRJTSBoYW5kbGUuCisgICogQHBhcmFtICBfX0NIQU5ORUxfXyBUSU0gQ2hhbm5lbHMgdG8gYmUgY29uZmlndXJlZC4KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorICAqICAgICAgICAgICAgQGFyZyBUSU1fQ0hBTk5FTF8xOiBUSU0gQ2hhbm5lbCAxIHNlbGVjdGVkCisgICogICAgICAgICAgICBAYXJnIFRJTV9DSEFOTkVMXzI6IFRJTSBDaGFubmVsIDIgc2VsZWN0ZWQKKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0NIQU5ORUxfMzogVElNIENoYW5uZWwgMyBzZWxlY3RlZAorICAqICAgICAgICAgICAgQGFyZyBUSU1fQ0hBTk5FTF80OiBUSU0gQ2hhbm5lbCA0IHNlbGVjdGVkCisgICogQG5vdGUgIFdoZW4gZmFzdCBtb2RlIGlzIGVuYWJsZWQgYW4gYWN0aXZlIGVkZ2Ugb24gdGhlIHRyaWdnZXIgaW5wdXQgYWN0cworICAqICAgICAgICBsaWtlIGEgY29tcGFyZSBtYXRjaCBvbiBDQ3ggb3V0cHV0LiBEZWxheSB0byBzYW1wbGUgdGhlIHRyaWdnZXIKKyAgKiAgICAgICAgaW5wdXQgYW5kIHRvIGFjdGl2YXRlIENDeCBvdXRwdXQgaXMgcmVkdWNlZCB0byAzIGNsb2NrIGN5Y2xlcy4KKyAgKiBAbm90ZSAgRmFzdCBtb2RlIGFjdHMgb25seSBpZiB0aGUgY2hhbm5lbCBpcyBjb25maWd1cmVkIGluIFBXTTEgb3IgUFdNMiBtb2RlLgorICAqIEByZXR2YWwgTm9uZQorICAqLworI2RlZmluZSBfX0hBTF9USU1fRU5BQkxFX09DeEZBU1QoX19IQU5ETEVfXywgX19DSEFOTkVMX18pICAgIFwKKyAgKCgoX19DSEFOTkVMX18pID09IFRJTV9DSEFOTkVMXzEpID8gKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNDTVIxIHw9IFRJTV9DQ01SMV9PQzFGRSkgOlwKKyAgICgoX19DSEFOTkVMX18pID09IFRJTV9DSEFOTkVMXzIpID8gKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNDTVIxIHw9IFRJTV9DQ01SMV9PQzJGRSkgOlwKKyAgICgoX19DSEFOTkVMX18pID09IFRJTV9DSEFOTkVMXzMpID8gKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNDTVIyIHw9IFRJTV9DQ01SMl9PQzNGRSkgOlwKKyAgICgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5DQ01SMiB8PSBUSU1fQ0NNUjJfT0M0RkUpKQorCisvKioKKyAgKiBAYnJpZWYgIERpc2FibGUgZmFzdCBtb2RlIGZvciBhIGdpdmVuIGNoYW5uZWwuCisgICogQHBhcmFtICBfX0hBTkRMRV9fIFRJTSBoYW5kbGUuCisgICogQHBhcmFtICBfX0NIQU5ORUxfXyBUSU0gQ2hhbm5lbHMgdG8gYmUgY29uZmlndXJlZC4KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorICAqICAgICAgICAgICAgQGFyZyBUSU1fQ0hBTk5FTF8xOiBUSU0gQ2hhbm5lbCAxIHNlbGVjdGVkCisgICogICAgICAgICAgICBAYXJnIFRJTV9DSEFOTkVMXzI6IFRJTSBDaGFubmVsIDIgc2VsZWN0ZWQKKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0NIQU5ORUxfMzogVElNIENoYW5uZWwgMyBzZWxlY3RlZAorICAqICAgICAgICAgICAgQGFyZyBUSU1fQ0hBTk5FTF80OiBUSU0gQ2hhbm5lbCA0IHNlbGVjdGVkCisgICogQG5vdGUgIFdoZW4gZmFzdCBtb2RlIGlzIGRpc2FibGVkIENDeCBvdXRwdXQgYmVoYXZlcyBub3JtYWxseSBkZXBlbmRpbmcKKyAgKiAgICAgICAgb24gY291bnRlciBhbmQgQ0NSeCB2YWx1ZXMgZXZlbiB3aGVuIHRoZSB0cmlnZ2VyIGlzIE9OLiBUaGUgbWluaW11bQorICAqICAgICAgICBkZWxheSB0byBhY3RpdmF0ZSBDQ3ggb3V0cHV0IHdoZW4gYW4gYWN0aXZlIGVkZ2Ugb2NjdXJzIG9uIHRoZQorICAqICAgICAgICB0cmlnZ2VyIGlucHV0IGlzIDUgY2xvY2sgY3ljbGVzLgorICAqIEByZXR2YWwgTm9uZQorICAqLworI2RlZmluZSBfX0hBTF9USU1fRElTQUJMRV9PQ3hGQVNUKF9fSEFORExFX18sIF9fQ0hBTk5FTF9fKSAgICBcCisgICgoKF9fQ0hBTk5FTF9fKSA9PSBUSU1fQ0hBTk5FTF8xKSA/ICgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5DQ01SMSAmPSB+VElNX0NDTVIxX09DMUZFKSA6XAorICAgKChfX0NIQU5ORUxfXykgPT0gVElNX0NIQU5ORUxfMikgPyAoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+Q0NNUjEgJj0gflRJTV9DQ01SMV9PQzJGRSkgOlwKKyAgICgoX19DSEFOTkVMX18pID09IFRJTV9DSEFOTkVMXzMpID8gKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNDTVIyICY9IH5USU1fQ0NNUjJfT0MzRkUpIDpcCisgICAoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+Q0NNUjIgJj0gflRJTV9DQ01SMl9PQzRGRSkpCiAKIC8qKgogICAqIEBicmllZiAgU2V0IHRoZSBVcGRhdGUgUmVxdWVzdCBTb3VyY2UgKFVSUykgYml0IG9mIHRoZSBUSU14X0NSMSByZWdpc3Rlci4KQEAgLTEzOTIsOCArMTQ0Niw3IEBACiAgICogICAgICAgIGVuYWJsZWQpCiAgICogQHJldHZhbCBOb25lCiAgICovCi0jZGVmaW5lIF9fSEFMX1RJTV9VUlNfRU5BQkxFKF9fSEFORExFX18pIFwKLSAgICAoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+Q1IxfD0gVElNX0NSMV9VUlMpCisjZGVmaW5lIF9fSEFMX1RJTV9VUlNfRU5BQkxFKF9fSEFORExFX18pICAoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+Q1IxfD0gVElNX0NSMV9VUlMpCiAKIC8qKgogICAqIEBicmllZiAgUmVzZXQgdGhlIFVwZGF0ZSBSZXF1ZXN0IFNvdXJjZSAoVVJTKSBiaXQgb2YgdGhlIFRJTXhfQ1IxIHJlZ2lzdGVyLgpAQCAtMTQwNiw4ICsxNDU5LDcgQEAKICAgKiAgICAgICAgICAgXyBVcGRhdGUgZ2VuZXJhdGlvbiB0aHJvdWdoIHRoZSBzbGF2ZSBtb2RlIGNvbnRyb2xsZXIKICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KLSNkZWZpbmUgX19IQUxfVElNX1VSU19ESVNBQkxFKF9fSEFORExFX18pIFwKLSAgICAgICgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5DUjEmPX5USU1fQ1IxX1VSUykKKyNkZWZpbmUgX19IQUxfVElNX1VSU19ESVNBQkxFKF9fSEFORExFX18pICAoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+Q1IxJj1+VElNX0NSMV9VUlMpCiAKIC8qKgogICAqIEBicmllZiAgU2V0IHRoZSBUSU0gQ2FwdHVyZSB4IGlucHV0IHBvbGFyaXR5IG9uIHJ1bnRpbWUuCkBAIC0xNDI1LDEwICsxNDc3LDEwIEBACiAgICogQHJldHZhbCBOb25lCiAgICovCiAjZGVmaW5lIF9fSEFMX1RJTV9TRVRfQ0FQVFVSRVBPTEFSSVRZKF9fSEFORExFX18sIF9fQ0hBTk5FTF9fLCBfX1BPTEFSSVRZX18pICAgIFwKLSAgICAgICAgZG97ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIFRJTV9SRVNFVF9DQVBUVVJFUE9MQVJJVFkoKF9fSEFORExFX18pLCAoX19DSEFOTkVMX18pKTsgICAgICAgICAgICAgICBcCi0gICAgICAgICAgVElNX1NFVF9DQVBUVVJFUE9MQVJJVFkoKF9fSEFORExFX18pLCAoX19DSEFOTkVMX18pLCAoX19QT0xBUklUWV9fKSk7IFwKLSAgICAgICAgfXdoaWxlKDApCisgIGRveyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBUSU1fUkVTRVRfQ0FQVFVSRVBPTEFSSVRZKChfX0hBTkRMRV9fKSwgKF9fQ0hBTk5FTF9fKSk7ICAgICAgICAgICAgICAgXAorICAgIFRJTV9TRVRfQ0FQVFVSRVBPTEFSSVRZKChfX0hBTkRMRV9fKSwgKF9fQ0hBTk5FTF9fKSwgKF9fUE9MQVJJVFlfXykpOyBcCisgIH13aGlsZSgwKQogCiAvKioKICAgKiBAfQpAQCAtMTUwNCw2ICsxNTU2LDkgQEAKICNkZWZpbmUgSVNfVElNX09DTklETEVfU1RBVEUoX19TVEFURV9fKSAgICAoKChfX1NUQVRFX18pID09IFRJTV9PQ05JRExFU1RBVEVfU0VUKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19TVEFURV9fKSA9PSBUSU1fT0NOSURMRVNUQVRFX1JFU0VUKSkKIAorI2RlZmluZSBJU19USU1fRU5DT0RFUklOUFVUX1BPTEFSSVRZKF9fUE9MQVJJVFlfXykgICAoKChfX1BPTEFSSVRZX18pID09IFRJTV9FTkNPREVSSU5QVVRQT0xBUklUWV9SSVNJTkcpICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1BPTEFSSVRZX18pID09IFRJTV9FTkNPREVSSU5QVVRQT0xBUklUWV9GQUxMSU5HKSkKKwogI2RlZmluZSBJU19USU1fSUNfUE9MQVJJVFkoX19QT0xBUklUWV9fKSAgICgoKF9fUE9MQVJJVFlfXykgPT0gVElNX0lDUE9MQVJJVFlfUklTSU5HKSAgIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1BPTEFSSVRZX18pID09IFRJTV9JQ1BPTEFSSVRZX0ZBTExJTkcpICB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19QT0xBUklUWV9fKSA9PSBUSU1fSUNQT0xBUklUWV9CT1RIRURHRSkpCkBAIC0xNjgxLDI4ICsxNzM2LDI4IEBACiAjZGVmaW5lIElTX1RJTV9TTEFWRU1PREVfVFJJR0dFUl9FTkFCTEVEKF9fVFJJR0dFUl9fKSAoKF9fVFJJR0dFUl9fKSA9PSBUSU1fU0xBVkVNT0RFX1RSSUdHRVIpCiAKICNkZWZpbmUgVElNX1NFVF9JQ1BSRVNDQUxFUlZBTFVFKF9fSEFORExFX18sIF9fQ0hBTk5FTF9fLCBfX0lDUFNDX18pIFwKLSgoKF9fQ0hBTk5FTF9fKSA9PSBUSU1fQ0hBTk5FTF8xKSA/ICgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5DQ01SMSB8PSAoX19JQ1BTQ19fKSkgOlwKLSAoKF9fQ0hBTk5FTF9fKSA9PSBUSU1fQ0hBTk5FTF8yKSA/ICgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5DQ01SMSB8PSAoKF9fSUNQU0NfXykgPDwgOFUpKSA6XAotICgoX19DSEFOTkVMX18pID09IFRJTV9DSEFOTkVMXzMpID8gKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNDTVIyIHw9IChfX0lDUFNDX18pKSA6XAotICgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5DQ01SMiB8PSAoKF9fSUNQU0NfXykgPDwgOFUpKSkKKyAgKCgoX19DSEFOTkVMX18pID09IFRJTV9DSEFOTkVMXzEpID8gKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNDTVIxIHw9IChfX0lDUFNDX18pKSA6XAorICAgKChfX0NIQU5ORUxfXykgPT0gVElNX0NIQU5ORUxfMikgPyAoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+Q0NNUjEgfD0gKChfX0lDUFNDX18pIDw8IDhVKSkgOlwKKyAgICgoX19DSEFOTkVMX18pID09IFRJTV9DSEFOTkVMXzMpID8gKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNDTVIyIHw9IChfX0lDUFNDX18pKSA6XAorICAgKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNDTVIyIHw9ICgoX19JQ1BTQ19fKSA8PCA4VSkpKQogCiAjZGVmaW5lIFRJTV9SRVNFVF9JQ1BSRVNDQUxFUlZBTFVFKF9fSEFORExFX18sIF9fQ0hBTk5FTF9fKSBcCi0oKChfX0NIQU5ORUxfXykgPT0gVElNX0NIQU5ORUxfMSkgPyAoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+Q0NNUjEgJj0gKHVpbnQxNl90KX5USU1fQ0NNUjFfSUMxUFNDKSA6XAotICgoX19DSEFOTkVMX18pID09IFRJTV9DSEFOTkVMXzIpID8gKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNDTVIxICY9ICh1aW50MTZfdCl+VElNX0NDTVIxX0lDMlBTQykgOlwKLSAoKF9fQ0hBTk5FTF9fKSA9PSBUSU1fQ0hBTk5FTF8zKSA/ICgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5DQ01SMiAmPSAodWludDE2X3QpflRJTV9DQ01SMl9JQzNQU0MpIDpcCi0gKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNDTVIyICY9ICh1aW50MTZfdCl+VElNX0NDTVIyX0lDNFBTQykpCisgICgoKF9fQ0hBTk5FTF9fKSA9PSBUSU1fQ0hBTk5FTF8xKSA/ICgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5DQ01SMSAmPSB+VElNX0NDTVIxX0lDMVBTQykgOlwKKyAgICgoX19DSEFOTkVMX18pID09IFRJTV9DSEFOTkVMXzIpID8gKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNDTVIxICY9IH5USU1fQ0NNUjFfSUMyUFNDKSA6XAorICAgKChfX0NIQU5ORUxfXykgPT0gVElNX0NIQU5ORUxfMykgPyAoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+Q0NNUjIgJj0gflRJTV9DQ01SMl9JQzNQU0MpIDpcCisgICAoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+Q0NNUjIgJj0gflRJTV9DQ01SMl9JQzRQU0MpKQogCiAjZGVmaW5lIFRJTV9TRVRfQ0FQVFVSRVBPTEFSSVRZKF9fSEFORExFX18sIF9fQ0hBTk5FTF9fLCBfX1BPTEFSSVRZX18pIFwKLSgoKF9fQ0hBTk5FTF9fKSA9PSBUSU1fQ0hBTk5FTF8xKSA/ICgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5DQ0VSIHw9IChfX1BPTEFSSVRZX18pKSA6XAotICgoX19DSEFOTkVMX18pID09IFRJTV9DSEFOTkVMXzIpID8gKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNDRVIgfD0gKChfX1BPTEFSSVRZX18pIDw8IDRVKSkgOlwKLSAoKF9fQ0hBTk5FTF9fKSA9PSBUSU1fQ0hBTk5FTF8zKSA/ICgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5DQ0VSIHw9ICgoX19QT0xBUklUWV9fKSA8PCA4VSkpIDpcCi0gKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNDRVIgfD0gKCgoX19QT0xBUklUWV9fKSA8PCAxMlUpKSkpCisgICgoKF9fQ0hBTk5FTF9fKSA9PSBUSU1fQ0hBTk5FTF8xKSA/ICgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5DQ0VSIHw9IChfX1BPTEFSSVRZX18pKSA6XAorICAgKChfX0NIQU5ORUxfXykgPT0gVElNX0NIQU5ORUxfMikgPyAoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+Q0NFUiB8PSAoKF9fUE9MQVJJVFlfXykgPDwgNFUpKSA6XAorICAgKChfX0NIQU5ORUxfXykgPT0gVElNX0NIQU5ORUxfMykgPyAoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+Q0NFUiB8PSAoKF9fUE9MQVJJVFlfXykgPDwgOFUpKSA6XAorICAgKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNDRVIgfD0gKCgoX19QT0xBUklUWV9fKSA8PCAxMlUpKSkpCiAKICNkZWZpbmUgVElNX1JFU0VUX0NBUFRVUkVQT0xBUklUWShfX0hBTkRMRV9fLCBfX0NIQU5ORUxfXykgXAotKCgoX19DSEFOTkVMX18pID09IFRJTV9DSEFOTkVMXzEpID8gKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNDRVIgJj0gKHVpbnQxNl90KX4oVElNX0NDRVJfQ0MxUCB8IFRJTV9DQ0VSX0NDMU5QKSkgOlwKLSAoKF9fQ0hBTk5FTF9fKSA9PSBUSU1fQ0hBTk5FTF8yKSA/ICgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5DQ0VSICY9ICh1aW50MTZfdCl+KFRJTV9DQ0VSX0NDMlAgfCBUSU1fQ0NFUl9DQzJOUCkpIDpcCi0gKChfX0NIQU5ORUxfXykgPT0gVElNX0NIQU5ORUxfMykgPyAoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+Q0NFUiAmPSAodWludDE2X3QpfihUSU1fQ0NFUl9DQzNQIHwgVElNX0NDRVJfQ0MzTlApKSA6XAotICgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5DQ0VSICY9ICh1aW50MTZfdCl+KFRJTV9DQ0VSX0NDNFAgfCBUSU1fQ0NFUl9DQzROUCkpKQorICAoKChfX0NIQU5ORUxfXykgPT0gVElNX0NIQU5ORUxfMSkgPyAoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+Q0NFUiAmPSB+KFRJTV9DQ0VSX0NDMVAgfCBUSU1fQ0NFUl9DQzFOUCkpIDpcCisgICAoKF9fQ0hBTk5FTF9fKSA9PSBUSU1fQ0hBTk5FTF8yKSA/ICgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5DQ0VSICY9IH4oVElNX0NDRVJfQ0MyUCB8IFRJTV9DQ0VSX0NDMk5QKSkgOlwKKyAgICgoX19DSEFOTkVMX18pID09IFRJTV9DSEFOTkVMXzMpID8gKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNDRVIgJj0gfihUSU1fQ0NFUl9DQzNQIHwgVElNX0NDRVJfQ0MzTlApKSA6XAorICAgKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNDRVIgJj0gfihUSU1fQ0NFUl9DQzRQIHwgVElNX0NDRVJfQ0M0TlApKSkKIAogLyoqCiAgICogQH0KQEAgLTE4NDAsNyArMTg5NSw4IEBACiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNX0VuY29kZXJfU3RhcnRfSVQoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sIHVpbnQzMl90IENoYW5uZWwpOwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTV9FbmNvZGVyX1N0b3BfSVQoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sIHVpbnQzMl90IENoYW5uZWwpOwogLyogTm9uLUJsb2NraW5nIG1vZGU6IERNQSAqLwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTV9FbmNvZGVyX1N0YXJ0X0RNQShUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgdWludDMyX3QgQ2hhbm5lbCwgdWludDMyX3QgKnBEYXRhMSwgdWludDMyX3QgKnBEYXRhMiwgdWludDE2X3QgTGVuZ3RoKTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1fRW5jb2Rlcl9TdGFydF9ETUEoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sIHVpbnQzMl90IENoYW5uZWwsIHVpbnQzMl90ICpwRGF0YTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICpwRGF0YTIsIHVpbnQxNl90IExlbmd0aCk7CiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNX0VuY29kZXJfU3RvcF9ETUEoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sIHVpbnQzMl90IENoYW5uZWwpOwogLyoqCiAgICogQH0KQEAgLTE4NjQsMTcgKzE5MjAsMTkgQEAKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1fT0NfQ29uZmlnQ2hhbm5lbChUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgVElNX09DX0luaXRUeXBlRGVmICpzQ29uZmlnLCB1aW50MzJfdCBDaGFubmVsKTsKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1fUFdNX0NvbmZpZ0NoYW5uZWwoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sIFRJTV9PQ19Jbml0VHlwZURlZiAqc0NvbmZpZywgdWludDMyX3QgQ2hhbm5lbCk7CiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNX0lDX0NvbmZpZ0NoYW5uZWwoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sIFRJTV9JQ19Jbml0VHlwZURlZiAqc0NvbmZpZywgdWludDMyX3QgQ2hhbm5lbCk7Ci1IQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNX09uZVB1bHNlX0NvbmZpZ0NoYW5uZWwoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sIFRJTV9PbmVQdWxzZV9Jbml0VHlwZURlZiAqc0NvbmZpZywgdWludDMyX3QgT3V0cHV0Q2hhbm5lbCwgIHVpbnQzMl90IElucHV0Q2hhbm5lbCk7Ci1IQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNX0NvbmZpZ09DcmVmQ2xlYXIoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sIFRJTV9DbGVhcklucHV0Q29uZmlnVHlwZURlZiAqc0NsZWFySW5wdXRDb25maWcsIHVpbnQzMl90IENoYW5uZWwpOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTV9PbmVQdWxzZV9Db25maWdDaGFubmVsKFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCBUSU1fT25lUHVsc2VfSW5pdFR5cGVEZWYgKnNDb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgT3V0cHV0Q2hhbm5lbCwgIHVpbnQzMl90IElucHV0Q2hhbm5lbCk7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNX0NvbmZpZ09DcmVmQ2xlYXIoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sIFRJTV9DbGVhcklucHV0Q29uZmlnVHlwZURlZiAqc0NsZWFySW5wdXRDb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgQ2hhbm5lbCk7CiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNX0NvbmZpZ0Nsb2NrU291cmNlKFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCBUSU1fQ2xvY2tDb25maWdUeXBlRGVmICpzQ2xvY2tTb3VyY2VDb25maWcpOwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTV9Db25maWdUSTFJbnB1dChUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgdWludDMyX3QgVEkxX1NlbGVjdGlvbik7CiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNX1NsYXZlQ29uZmlnU3luY2hybyhUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgVElNX1NsYXZlQ29uZmlnVHlwZURlZiAqc1NsYXZlQ29uZmlnKTsKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1fU2xhdmVDb25maWdTeW5jaHJvX0lUKFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCBUSU1fU2xhdmVDb25maWdUeXBlRGVmICpzU2xhdmVDb25maWcpOwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTV9ETUFCdXJzdF9Xcml0ZVN0YXJ0KFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCB1aW50MzJfdCBCdXJzdEJhc2VBZGRyZXNzLCB1aW50MzJfdCBCdXJzdFJlcXVlc3RTcmMsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAgKkJ1cnN0QnVmZmVyLCB1aW50MzJfdCAgQnVyc3RMZW5ndGgpOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTV9ETUFCdXJzdF9Xcml0ZVN0YXJ0KFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCB1aW50MzJfdCBCdXJzdEJhc2VBZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IEJ1cnN0UmVxdWVzdFNyYywgdWludDMyX3QgICpCdXJzdEJ1ZmZlciwgdWludDMyX3QgIEJ1cnN0TGVuZ3RoKTsKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1fRE1BQnVyc3RfV3JpdGVTdG9wKFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCB1aW50MzJfdCBCdXJzdFJlcXVlc3RTcmMpOwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTV9ETUFCdXJzdF9SZWFkU3RhcnQoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sIHVpbnQzMl90IEJ1cnN0QmFzZUFkZHJlc3MsIHVpbnQzMl90IEJ1cnN0UmVxdWVzdFNyYywgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgICpCdXJzdEJ1ZmZlciwgdWludDMyX3QgIEJ1cnN0TGVuZ3RoKTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1fRE1BQnVyc3RfUmVhZFN0YXJ0KFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCB1aW50MzJfdCBCdXJzdEJhc2VBZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgQnVyc3RSZXF1ZXN0U3JjLCB1aW50MzJfdCAgKkJ1cnN0QnVmZmVyLCB1aW50MzJfdCAgQnVyc3RMZW5ndGgpOwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTV9ETUFCdXJzdF9SZWFkU3RvcChUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgdWludDMyX3QgQnVyc3RSZXF1ZXN0U3JjKTsKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1fR2VuZXJhdGVFdmVudChUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgdWludDMyX3QgRXZlbnRTb3VyY2UpOwogdWludDMyX3QgSEFMX1RJTV9SZWFkQ2FwdHVyZWRWYWx1ZShUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgdWludDMyX3QgQ2hhbm5lbCk7CkBAIC0xOTAwLDcgKzE5NTgsOCBAQAogCiAvKiBDYWxsYmFja3MgUmVnaXN0ZXIvVW5SZWdpc3RlciBmdW5jdGlvbnMgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmIChVU0VfSEFMX1RJTV9SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkKLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1fUmVnaXN0ZXJDYWxsYmFjayhUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgSEFMX1RJTV9DYWxsYmFja0lEVHlwZURlZiBDYWxsYmFja0lELCBwVElNX0NhbGxiYWNrVHlwZURlZiBwQ2FsbGJhY2spOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTV9SZWdpc3RlckNhbGxiYWNrKFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCBIQUxfVElNX0NhbGxiYWNrSURUeXBlRGVmIENhbGxiYWNrSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcFRJTV9DYWxsYmFja1R5cGVEZWYgcENhbGxiYWNrKTsKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1fVW5SZWdpc3RlckNhbGxiYWNrKFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCBIQUxfVElNX0NhbGxiYWNrSURUeXBlRGVmIENhbGxiYWNrSUQpOwogI2VuZGlmIC8qIFVTRV9IQUxfVElNX1JFR0lTVEVSX0NBTExCQUNLUyAqLwogCkBAIC0xOTMwLDggKzE5ODksOCBAQAogCiAvKiBQcml2YXRlIGZ1bmN0aW9ucy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyoqIEBkZWZncm91cCBUSU1fUHJpdmF0ZV9GdW5jdGlvbnMgVElNIFByaXZhdGUgRnVuY3Rpb25zCi0qIEB7Ci0qLworICAqIEB7CisgICovCiB2b2lkIFRJTV9CYXNlX1NldENvbmZpZyhUSU1fVHlwZURlZiAqVElNeCwgVElNX0Jhc2VfSW5pdFR5cGVEZWYgKlN0cnVjdHVyZSk7CiB2b2lkIFRJTV9USTFfU2V0Q29uZmlnKFRJTV9UeXBlRGVmICpUSU14LCB1aW50MzJfdCBUSU1fSUNQb2xhcml0eSwgdWludDMyX3QgVElNX0lDU2VsZWN0aW9uLCB1aW50MzJfdCBUSU1fSUNGaWx0ZXIpOwogdm9pZCBUSU1fT0MyX1NldENvbmZpZyhUSU1fVHlwZURlZiAqVElNeCwgVElNX09DX0luaXRUeXBlRGVmICpPQ19Db25maWcpOwpAQCAtMTk1MCw4ICsyMDA5LDggQEAKICNlbmRpZiAvKiBVU0VfSEFMX1RJTV9SRUdJU1RFUl9DQUxMQkFDS1MgKi8KIAogLyoqCi0qIEB9Ci0qLworICAqIEB9CisgICovCiAvKiBFbmQgb2YgcHJpdmF0ZSBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiAvKioKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmY0eHhfaGFsX3RpbV9leC5oIGIvSW5jL3N0bTMyZjR4eF9oYWxfdGltX2V4LmgKaW5kZXggNjliNGNhMy4uODhjZTI4MSAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZjR4eF9oYWxfdGltX2V4LmgKKysrIGIvSW5jL3N0bTMyZjR4eF9oYWxfdGltX2V4LmgKQEAgLTIwMiw5ICsyMDIsOSBAQAogICAqLwogCiAvKiogQGFkZHRvZ3JvdXAgVElNRXhfRXhwb3J0ZWRfRnVuY3Rpb25zX0dyb3VwMSBFeHRlbmRlZCBUaW1lciBIYWxsIFNlbnNvciBmdW5jdGlvbnMKLSAqICBAYnJpZWYgICAgVGltZXIgSGFsbCBTZW5zb3IgZnVuY3Rpb25zCi0gKiBAewotICovCisgICogIEBicmllZiAgICBUaW1lciBIYWxsIFNlbnNvciBmdW5jdGlvbnMKKyAgKiBAeworICAqLwogLyogIFRpbWVyIEhhbGwgU2Vuc29yIGZ1bmN0aW9ucyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1FeF9IYWxsU2Vuc29yX0luaXQoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sIFRJTV9IYWxsU2Vuc29yX0luaXRUeXBlRGVmICpzQ29uZmlnKTsKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1FeF9IYWxsU2Vuc29yX0RlSW5pdChUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSk7CkBAIC0yMjYsOSArMjI2LDkgQEAKICAgKi8KIAogLyoqIEBhZGR0b2dyb3VwIFRJTUV4X0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDIgRXh0ZW5kZWQgVGltZXIgQ29tcGxlbWVudGFyeSBPdXRwdXQgQ29tcGFyZSBmdW5jdGlvbnMKLSAqICBAYnJpZWYgICBUaW1lciBDb21wbGVtZW50YXJ5IE91dHB1dCBDb21wYXJlIGZ1bmN0aW9ucwotICogQHsKLSAqLworICAqICBAYnJpZWYgICBUaW1lciBDb21wbGVtZW50YXJ5IE91dHB1dCBDb21wYXJlIGZ1bmN0aW9ucworICAqIEB7CisgICovCiAvKiAgVGltZXIgQ29tcGxlbWVudGFyeSBPdXRwdXQgQ29tcGFyZSBmdW5jdGlvbnMgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogQmxvY2tpbmcgbW9kZTogUG9sbGluZyAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTUV4X09DTl9TdGFydChUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgdWludDMyX3QgQ2hhbm5lbCk7CkBAIC0yNDYsOSArMjQ2LDkgQEAKICAgKi8KIAogLyoqIEBhZGR0b2dyb3VwIFRJTUV4X0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDMgRXh0ZW5kZWQgVGltZXIgQ29tcGxlbWVudGFyeSBQV00gZnVuY3Rpb25zCi0gKiAgQGJyaWVmICAgIFRpbWVyIENvbXBsZW1lbnRhcnkgUFdNIGZ1bmN0aW9ucwotICogQHsKLSAqLworICAqICBAYnJpZWYgICAgVGltZXIgQ29tcGxlbWVudGFyeSBQV00gZnVuY3Rpb25zCisgICogQHsKKyAgKi8KIC8qICBUaW1lciBDb21wbGVtZW50YXJ5IFBXTSBmdW5jdGlvbnMgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBCbG9ja2luZyBtb2RlOiBQb2xsaW5nICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNRXhfUFdNTl9TdGFydChUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgdWludDMyX3QgQ2hhbm5lbCk7CkBAIC0yNjUsOSArMjY1LDkgQEAKICAgKi8KIAogLyoqIEBhZGR0b2dyb3VwIFRJTUV4X0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDQgRXh0ZW5kZWQgVGltZXIgQ29tcGxlbWVudGFyeSBPbmUgUHVsc2UgZnVuY3Rpb25zCi0gKiAgQGJyaWVmICAgIFRpbWVyIENvbXBsZW1lbnRhcnkgT25lIFB1bHNlIGZ1bmN0aW9ucwotICogQHsKLSAqLworICAqICBAYnJpZWYgICAgVGltZXIgQ29tcGxlbWVudGFyeSBPbmUgUHVsc2UgZnVuY3Rpb25zCisgICogQHsKKyAgKi8KIC8qICBUaW1lciBDb21wbGVtZW50YXJ5IE9uZSBQdWxzZSBmdW5jdGlvbnMgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBCbG9ja2luZyBtb2RlOiBQb2xsaW5nICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNRXhfT25lUHVsc2VOX1N0YXJ0KFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCB1aW50MzJfdCBPdXRwdXRDaGFubmVsKTsKQEAgLTI4MSwxNSArMjgxLDIwIEBACiAgICovCiAKIC8qKiBAYWRkdG9ncm91cCBUSU1FeF9FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXA1IEV4dGVuZGVkIFBlcmlwaGVyYWwgQ29udHJvbCBmdW5jdGlvbnMKLSAqICBAYnJpZWYgICAgUGVyaXBoZXJhbCBDb250cm9sIGZ1bmN0aW9ucwotICogQHsKLSAqLworICAqICBAYnJpZWYgICAgUGVyaXBoZXJhbCBDb250cm9sIGZ1bmN0aW9ucworICAqIEB7CisgICovCiAvKiBFeHRlbmRlZCBDb250cm9sIGZ1bmN0aW9ucyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTUV4X0NvbmZpZ0NvbW11dEV2ZW50KFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCB1aW50MzJfdCAgSW5wdXRUcmlnZ2VyLCB1aW50MzJfdCAgQ29tbXV0YXRpb25Tb3VyY2UpOwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTUV4X0NvbmZpZ0NvbW11dEV2ZW50X0lUKFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCB1aW50MzJfdCAgSW5wdXRUcmlnZ2VyLCB1aW50MzJfdCAgQ29tbXV0YXRpb25Tb3VyY2UpOwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTUV4X0NvbmZpZ0NvbW11dEV2ZW50X0RNQShUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgdWludDMyX3QgIElucHV0VHJpZ2dlciwgdWludDMyX3QgIENvbW11dGF0aW9uU291cmNlKTsKLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1FeF9NYXN0ZXJDb25maWdTeW5jaHJvbml6YXRpb24oVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sIFRJTV9NYXN0ZXJDb25maWdUeXBlRGVmICpzTWFzdGVyQ29uZmlnKTsKLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1FeF9Db25maWdCcmVha0RlYWRUaW1lKFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCBUSU1fQnJlYWtEZWFkVGltZUNvbmZpZ1R5cGVEZWYgKnNCcmVha0RlYWRUaW1lQ29uZmlnKTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1FeF9Db25maWdDb21tdXRFdmVudChUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgdWludDMyX3QgIElucHV0VHJpZ2dlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAgQ29tbXV0YXRpb25Tb3VyY2UpOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTUV4X0NvbmZpZ0NvbW11dEV2ZW50X0lUKFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCB1aW50MzJfdCAgSW5wdXRUcmlnZ2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICBDb21tdXRhdGlvblNvdXJjZSk7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNRXhfQ29uZmlnQ29tbXV0RXZlbnRfRE1BKFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCB1aW50MzJfdCAgSW5wdXRUcmlnZ2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAgQ29tbXV0YXRpb25Tb3VyY2UpOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTUV4X01hc3RlckNvbmZpZ1N5bmNocm9uaXphdGlvbihUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVElNX01hc3RlckNvbmZpZ1R5cGVEZWYgKnNNYXN0ZXJDb25maWcpOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTUV4X0NvbmZpZ0JyZWFrRGVhZFRpbWUoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSU1fQnJlYWtEZWFkVGltZUNvbmZpZ1R5cGVEZWYgKnNCcmVha0RlYWRUaW1lQ29uZmlnKTsKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1FeF9SZW1hcENvbmZpZyhUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgdWludDMyX3QgUmVtYXApOwogLyoqCiAgICogQH0KQEAgLTMyMyw3ICszMjgsNyBAQAogLyogRW5kIG9mIGV4cG9ydGVkIGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogLyogUHJpdmF0ZSBmdW5jdGlvbnMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qKiBAZGVmZ3JvdXAgVElNRXhfUHJpdmF0ZV9GdW5jdGlvbnMgVElNIEV4dGVuZGVkIFByaXZhdGUgRnVuY3Rpb25zCisvKiogQGFkZHRvZ3JvdXAgVElNRXhfUHJpdmF0ZV9GdW5jdGlvbnMgVElNRXggUHJpdmF0ZSBGdW5jdGlvbnMKICAgKiBAewogICAqLwogdm9pZCBUSU1FeF9ETUFDb21tdXRhdGlvbkNwbHQoRE1BX0hhbmRsZVR5cGVEZWYgKmhkbWEpOwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZjR4eF9oYWxfdWFydC5oIGIvSW5jL3N0bTMyZjR4eF9oYWxfdWFydC5oCmluZGV4IGJkNDdjZmIuLjIxNTRhMDIgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmY0eHhfaGFsX3VhcnQuaAorKysgYi9JbmMvc3RtMzJmNHh4X2hhbF91YXJ0LmgKQEAgLTUzNSw3ICs1MzUsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChfX0lOVEVSUlVQVF9fKSA+PiAyOFUpID09IFVBUlRfQ1IyX1JFR19JTkRFWCk/ICgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5DUjIgJj0gfigoX19JTlRFUlJVUFRfXykgJiBVQVJUX0lUX01BU0spKTogXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+Q1IzICY9IH4gKChfX0lOVEVSUlVQVF9fKSAmIFVBUlRfSVRfTUFTSykpKQogCi0vKiogQGJyaWVmICBDaGVja3Mgd2hldGhlciB0aGUgc3BlY2lmaWVkIFVBUlQgaW50ZXJydXB0IGhhcyBvY2N1cnJlZCBvciBub3QuCisvKiogQGJyaWVmICBDaGVja3Mgd2hldGhlciB0aGUgc3BlY2lmaWVkIFVBUlQgaW50ZXJydXB0IHNvdXJjZSBpcyBlbmFibGVkIG9yIG5vdC4KICAgKiBAcGFyYW0gIF9fSEFORExFX18gc3BlY2lmaWVzIHRoZSBVQVJUIEhhbmRsZS4KICAgKiAgICAgICAgIFVBUlQgSGFuZGxlIHNlbGVjdHMgdGhlIFVTQVJUeCBvciBVQVJUeSBwZXJpcGhlcmFsCiAgICogICAgICAgICAoVVNBUlQsVUFSVCBhdmFpbGFiaWxpdHkgYW5kIHgseSB2YWx1ZXMgZGVwZW5kaW5nIG9uIGRldmljZSkuCkBAIC03OTgsMjIgKzc5OCwyMiBAQAogI2RlZmluZSBJU19VQVJUX0JBVURSQVRFKEJBVURSQVRFKSAoKEJBVURSQVRFKSA8PSAxMDUwMDAwMFUpCiAjZGVmaW5lIElTX1VBUlRfQUREUkVTUyhBRERSRVNTKSAoKEFERFJFU1MpIDw9IDB4MEZVKQogCi0jZGVmaW5lIFVBUlRfRElWX1NBTVBMSU5HMTYoX1BDTEtfLCBfQkFVRF8pICAgICAgICAgICAgKCgoX1BDTEtfKSoyNVUpLyg0VSooX0JBVURfKSkpCisjZGVmaW5lIFVBUlRfRElWX1NBTVBMSU5HMTYoX1BDTEtfLCBfQkFVRF8pICAgICAgICAgICAgKCh1aW50MzJfdCkoKCgodWludDY0X3QpKF9QQ0xLXykpKjI1VSkvKDRVKigodWludDY0X3QpKF9CQVVEXykpKSkpCiAjZGVmaW5lIFVBUlRfRElWTUFOVF9TQU1QTElORzE2KF9QQ0xLXywgX0JBVURfKSAgICAgICAgKFVBUlRfRElWX1NBTVBMSU5HMTYoKF9QQ0xLXyksIChfQkFVRF8pKS8xMDBVKQotI2RlZmluZSBVQVJUX0RJVkZSQVFfU0FNUExJTkcxNihfUENMS18sIF9CQVVEXykgICAgICAgICgoKFVBUlRfRElWX1NBTVBMSU5HMTYoKF9QQ0xLXyksIChfQkFVRF8pKSAtIChVQVJUX0RJVk1BTlRfU0FNUExJTkcxNigoX1BDTEtfKSwgKF9CQVVEXykpICogMTAwVSkpICogMTZVICsgNTBVKSAvIDEwMFUpCisjZGVmaW5lIFVBUlRfRElWRlJBUV9TQU1QTElORzE2KF9QQ0xLXywgX0JBVURfKSAgICAgICAgKCgoKFVBUlRfRElWX1NBTVBMSU5HMTYoKF9QQ0xLXyksIChfQkFVRF8pKSAtIChVQVJUX0RJVk1BTlRfU0FNUExJTkcxNigoX1BDTEtfKSwgKF9CQVVEXykpICogMTAwVSkpICogMTZVKSArIDUwVSkgLyAxMDBVKQogLyogVUFSVCBCUlIgPSBtYW50aXNzYSArIG92ZXJmbG93ICsgZnJhY3Rpb24KICAgICAgICAgICAgID0gKFVBUlQgRElWTUFOVCA8PCA0KSArIChVQVJUIERJVkZSQVEgJiAweEYwKSArIChVQVJUIERJVkZSQVEgJiAweDBGVSkgKi8KLSNkZWZpbmUgVUFSVF9CUlJfU0FNUExJTkcxNihfUENMS18sIF9CQVVEXykgICAgICAgICAgICAoKChVQVJUX0RJVk1BTlRfU0FNUExJTkcxNigoX1BDTEtfKSwgKF9CQVVEXykpIDw8IDRVKSArIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFVBUlRfRElWRlJBUV9TQU1QTElORzE2KChfUENMS18pLCAoX0JBVURfKSkgJiAweEYwVSkpICsgXAorI2RlZmluZSBVQVJUX0JSUl9TQU1QTElORzE2KF9QQ0xLXywgX0JBVURfKSAgICAgICAgICAgICgoVUFSVF9ESVZNQU5UX1NBTVBMSU5HMTYoKF9QQ0xLXyksIChfQkFVRF8pKSA8PCA0VSkgKyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChVQVJUX0RJVkZSQVFfU0FNUExJTkcxNigoX1BDTEtfKSwgKF9CQVVEXykpICYgMHhGMFUpICsgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoVUFSVF9ESVZGUkFRX1NBTVBMSU5HMTYoKF9QQ0xLXyksIChfQkFVRF8pKSAmIDB4MEZVKSkKIAotI2RlZmluZSBVQVJUX0RJVl9TQU1QTElORzgoX1BDTEtfLCBfQkFVRF8pICAgICAgICAgICAgICgoKF9QQ0xLXykqMjVVKS8oMlUqKF9CQVVEXykpKQorI2RlZmluZSBVQVJUX0RJVl9TQU1QTElORzgoX1BDTEtfLCBfQkFVRF8pICAgICAgICAgICAgICgodWludDMyX3QpKCgoKHVpbnQ2NF90KShfUENMS18pKSoyNVUpLygyVSooKHVpbnQ2NF90KShfQkFVRF8pKSkpKQogI2RlZmluZSBVQVJUX0RJVk1BTlRfU0FNUExJTkc4KF9QQ0xLXywgX0JBVURfKSAgICAgICAgIChVQVJUX0RJVl9TQU1QTElORzgoKF9QQ0xLXyksIChfQkFVRF8pKS8xMDBVKQotI2RlZmluZSBVQVJUX0RJVkZSQVFfU0FNUExJTkc4KF9QQ0xLXywgX0JBVURfKSAgICAgICAgICgoKFVBUlRfRElWX1NBTVBMSU5HOCgoX1BDTEtfKSwgKF9CQVVEXykpIC0gKFVBUlRfRElWTUFOVF9TQU1QTElORzgoKF9QQ0xLXyksIChfQkFVRF8pKSAqIDEwMFUpKSAqIDhVICsgNTBVKSAvIDEwMFUpCisjZGVmaW5lIFVBUlRfRElWRlJBUV9TQU1QTElORzgoX1BDTEtfLCBfQkFVRF8pICAgICAgICAgKCgoKFVBUlRfRElWX1NBTVBMSU5HOCgoX1BDTEtfKSwgKF9CQVVEXykpIC0gKFVBUlRfRElWTUFOVF9TQU1QTElORzgoKF9QQ0xLXyksIChfQkFVRF8pKSAqIDEwMFUpKSAqIDhVKSArIDUwVSkgLyAxMDBVKQogLyogVUFSVCBCUlIgPSBtYW50aXNzYSArIG92ZXJmbG93ICsgZnJhY3Rpb24KICAgICAgICAgICAgID0gKFVBUlQgRElWTUFOVCA8PCA0KSArICgoVUFSVCBESVZGUkFRICYgMHhGOCkgPDwgMSkgKyAoVUFSVCBESVZGUkFRICYgMHgwN1UpICovCi0jZGVmaW5lIFVBUlRfQlJSX1NBTVBMSU5HOChfUENMS18sIF9CQVVEXykgICAgICAgICAgICAgKCgoVUFSVF9ESVZNQU5UX1NBTVBMSU5HOCgoX1BDTEtfKSwgKF9CQVVEXykpIDw8IDRVKSArIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChVQVJUX0RJVkZSQVFfU0FNUExJTkc4KChfUENMS18pLCAoX0JBVURfKSkgJiAweEY4VSkgPDwgMVUpKSArIFwKKyNkZWZpbmUgVUFSVF9CUlJfU0FNUExJTkc4KF9QQ0xLXywgX0JBVURfKSAgICAgICAgICAgICAoKFVBUlRfRElWTUFOVF9TQU1QTElORzgoKF9QQ0xLXyksIChfQkFVRF8pKSA8PCA0VSkgKyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVUFSVF9ESVZGUkFRX1NBTVBMSU5HOCgoX1BDTEtfKSwgKF9CQVVEXykpICYgMHhGOFUpIDw8IDFVKSArIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFVBUlRfRElWRlJBUV9TQU1QTElORzgoKF9QQ0xLXyksIChfQkFVRF8pKSAmIDB4MDdVKSkKIAogLyoqCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJmNHh4X2hhbF91c2FydC5oIGIvSW5jL3N0bTMyZjR4eF9oYWxfdXNhcnQuaAppbmRleCBmYTJmMWRkLi44NjY0MzU1IDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmNHh4X2hhbF91c2FydC5oCisrKyBiL0luYy9zdG0zMmY0eHhfaGFsX3VzYXJ0LmgKQEAgLTYwMywxMSArNjAzLDExIEBACiAKICNkZWZpbmUgSVNfVVNBUlRfQkFVRFJBVEUoQkFVRFJBVEUpICAoKEJBVURSQVRFKSA8PSAxMjUwMDAwMFUpCiAKLSNkZWZpbmUgVVNBUlRfRElWKF9QQ0xLXywgX0JBVURfKSAgICAgICgoKF9QQ0xLXykqMjVVKS8oMlUqKF9CQVVEXykpKQorI2RlZmluZSBVU0FSVF9ESVYoX1BDTEtfLCBfQkFVRF8pICAgICAgKCh1aW50MzJfdCkoKCgodWludDY0X3QpKF9QQ0xLXykpKjI1VSkvKDJVKigodWludDY0X3QpKF9CQVVEXykpKSkpCiAKICNkZWZpbmUgVVNBUlRfRElWTUFOVChfUENMS18sIF9CQVVEXykgIChVU0FSVF9ESVYoKF9QQ0xLXyksIChfQkFVRF8pKS8xMDBVKQogCi0jZGVmaW5lIFVTQVJUX0RJVkZSQVEoX1BDTEtfLCBfQkFVRF8pICAoKChVU0FSVF9ESVYoKF9QQ0xLXyksIChfQkFVRF8pKSAtIChVU0FSVF9ESVZNQU5UKChfUENMS18pLCAoX0JBVURfKSkgKiAxMDBVKSkgKiA4VSArIDUwVSkgLyAxMDBVKQorI2RlZmluZSBVU0FSVF9ESVZGUkFRKF9QQ0xLXywgX0JBVURfKSAgKCgoKFVTQVJUX0RJVigoX1BDTEtfKSwgKF9CQVVEXykpIC0gKFVTQVJUX0RJVk1BTlQoKF9QQ0xLXyksIChfQkFVRF8pKSAqIDEwMFUpKSAqIDhVKSArIDUwVSkgLyAxMDBVKQogCiAgIC8qIFVBUlQgQlJSID0gbWFudGlzc2EgKyBvdmVyZmxvdyArIGZyYWN0aW9uCiAgICAgICAgICAgICAgID0gKFVBUlQgRElWTUFOVCA8PCA0KSArICgoVUFSVCBESVZGUkFRICYgMHhGOCkgPDwgMSkgKyAoVUFSVCBESVZGUkFRICYgMHgwN1UpICovCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJmNHh4X2hhbF93d2RnLmggYi9JbmMvc3RtMzJmNHh4X2hhbF93d2RnLmgKaW5kZXggZmJjNjI4Yy4uMDU2NDBhZiAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZjR4eF9oYWxfd3dkZy5oCisrKyBiL0luYy9zdG0zMmY0eHhfaGFsX3d3ZGcuaApAQCAtMjIsNyArMjIsNyBAQAogI2RlZmluZSBTVE0zMkY0eHhfSEFMX1dXREdfSAogCiAjaWZkZWYgX19jcGx1c3BsdXMKLSBleHRlcm4gIkMiIHsKK2V4dGVybiAiQyIgewogI2VuZGlmCiAKIC8qIEluY2x1ZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC04OSwxMiArODksMTIgQEAKIHsKICAgSEFMX1dXREdfRVdJX0NCX0lEICAgICAgICAgID0gMHgwMHUsICAgIC8qITwgV1dERyBFV0kgY2FsbGJhY2sgSUQgKi8KICAgSEFMX1dXREdfTVNQSU5JVF9DQl9JRCAgICAgID0gMHgwMXUsICAgIC8qITwgV1dERyBNc3BJbml0IGNhbGxiYWNrIElEICovCi19SEFMX1dXREdfQ2FsbGJhY2tJRFR5cGVEZWY7Cit9IEhBTF9XV0RHX0NhbGxiYWNrSURUeXBlRGVmOwogCiAvKioKICAgKiBAYnJpZWYgIEhBTCBXV0RHIENhbGxiYWNrIHBvaW50ZXIgZGVmaW5pdGlvbgogICAqLwotdHlwZWRlZiB2b2lkICgqcFdXREdfQ2FsbGJhY2tUeXBlRGVmKShXV0RHX0hhbmRsZVR5cGVEZWYgKiBocHBwKTsgLyohPCBwb2ludGVyIHRvIGEgV1dERyBjb21tb24gY2FsbGJhY2sgZnVuY3Rpb25zICovCit0eXBlZGVmIHZvaWQgKCpwV1dER19DYWxsYmFja1R5cGVEZWYpKFdXREdfSGFuZGxlVHlwZURlZiAqaHBwcCk7ICAvKiE8IHBvaW50ZXIgdG8gYSBXV0RHIGNvbW1vbiBjYWxsYmFjayBmdW5jdGlvbnMgKi8KIAogI2VuZGlmCiAvKioKQEAgLTIzOSw3ICsyMzksOCBAQAogICAqICAgICAgICAgICAgQGFyZyBXV0RHX0lUX0VXSTogRWFybHkgV2FrZXVwIEludGVycnVwdAogICAqIEByZXR2YWwgc3RhdGUgb2YgX19JTlRFUlJVUFRfXyAoVFJVRSBvciBGQUxTRSkuCiAgICovCi0jZGVmaW5lIF9fSEFMX1dXREdfR0VUX0lUX1NPVVJDRShfX0hBTkRMRV9fLCBfX0lOVEVSUlVQVF9fKSAoKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNGUiAmIChfX0lOVEVSUlVQVF9fKSkgPT0gKF9fSU5URVJSVVBUX18pKQorI2RlZmluZSBfX0hBTF9XV0RHX0dFVF9JVF9TT1VSQ0UoX19IQU5ETEVfXywgX19JTlRFUlJVUFRfXykgKCgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5DRlJcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgKF9fSU5URVJSVVBUX18pKSA9PSAoX19JTlRFUlJVUFRfXykpCiAKIC8qKgogICAqIEB9CkBAIC0yOTQsNiArMjk1LDYgQEAKIH0KICNlbmRpZgogCi0jZW5kaWYgLyogX19TVE0zMkY0eHhfSEFMX1dXREdfSCAqLworI2VuZGlmIC8qIFNUTTMyRjR4eF9IQUxfV1dER19IICovCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKiogKEMpIENPUFlSSUdIVCBTVE1pY3JvZWxlY3Ryb25pY3MgKioqKipFTkQgT0YgRklMRSoqKiovCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJmNHh4X2xsX2dwaW8uaCBiL0luYy9zdG0zMmY0eHhfbGxfZ3Bpby5oCmluZGV4IDNmMWIzYTEuLjhmZjg2YWMgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmY0eHhfbGxfZ3Bpby5oCisrKyBiL0luYy9zdG0zMmY0eHhfbGxfZ3Bpby5oCkBAIC0zNDAsMTAgKzM0MCwxMSBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0dQSU9fT1VUUFVUX09QRU5EUkFJTgogICAqIEByZXR2YWwgTm9uZQogICAqLwotX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfR1BJT19TZXRQaW5PdXRwdXRUeXBlKEdQSU9fVHlwZURlZiAqR1BJT3gsIHVpbnQzMl90IFBpbk1hc2ssIHVpbnQzMl90IE91dHB1dFR5cGUpCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9HUElPX1NldFBpbk91dHB1dFR5cGUoR1BJT19UeXBlRGVmICpHUElPeCwgdWludDMyX3QgUGluLCB1aW50MzJfdCBPdXRwdXRUeXBlKQogewotICBNT0RJRllfUkVHKEdQSU94LT5PVFlQRVIsIFBpbk1hc2ssIChQaW5NYXNrICogT3V0cHV0VHlwZSkpOworICBNT0RJRllfUkVHKEdQSU94LT5PVFlQRVIsIChHUElPX09UWVBFUl9PVF8wIDw8IFBPU0lUSU9OX1ZBTChQaW4pKSwgKE91dHB1dFR5cGUgPDwgUE9TSVRJT05fVkFMKFBpbikpKTsKIH0KKyAgCiAKIC8qKgogICAqIEBicmllZiAgUmV0dXJuIGdwaW8gb3V0cHV0IHR5cGUgZm9yIHNldmVyYWwgcGlucyBvbiBkZWRpY2F0ZWQgcG9ydC4KZGlmZiAtLWdpdCBhL0luYy9zdG0zMmY0eHhfbGxfbHB0aW0uaCBiL0luYy9zdG0zMmY0eHhfbGxfbHB0aW0uaAppbmRleCA2MzZlNWZhLi4xYjZiYWQ5IDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmNHh4X2xsX2xwdGltLmgKKysrIGIvSW5jL3N0bTMyZjR4eF9sbF9scHRpbS5oCkBAIC00LDcgKzQsNyBAQAogICAqIEBhdXRob3IgIE1DRCBBcHBsaWNhdGlvbiBUZWFtCiAgICogQGJyaWVmICAgSGVhZGVyIGZpbGUgb2YgTFBUSU0gTEwgbW9kdWxlLgogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgICAqIEBhdHRlbnRpb24KKyAgKiBAYXR0ZW50aW9uCiAgICoKICAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE2IFNUTWljcm9lbGVjdHJvbmljcy4KICAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLjwvY2VudGVyPjwvaDI+CkBAIC0yNTgsNiArMjU4LDE5IEBACiAvKioKICAgKiBAfQogICAqLworI2lmIGRlZmluZWQoTFBUSU1fT1JfT1IpCisKKy8qKiBAZGVmZ3JvdXAgTFBUSU1fRUNfSU5QVVQxX1NSQyBJbnB1dDEgU291cmNlCisgICogQHsKKyAgKi8KKyNkZWZpbmUgTExfTFBUSU1fSU5QVVQxX1NSQ19QQURfQUYgICAgICAgMHgwMDAwMDAwMFUKKyNkZWZpbmUgTExfTFBUSU1fSU5QVVQxX1NSQ19QQURfUEE0ICAgICAgTFBUSU1fT1JfT1JfMAorI2RlZmluZSBMTF9MUFRJTV9JTlBVVDFfU1JDX1BBRF9QQjkgICAgICBMUFRJTV9PUl9PUl8xCisjZGVmaW5lIExMX0xQVElNX0lOUFVUMV9TUkNfVElNX0RBQyAgICAgIExQVElNX09SX09SCisvKioKKyAgKiBAfQorICAqLworI2VuZGlmIC8qIExQVElNX09SX09SICovCiAKIC8qKgogICAqIEB9CkBAIC0zNDAsNyArMzUzLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9MUFRJTV9Jc0VuYWJsZWQoTFBUSU1fVHlwZURlZiAqTFBUSU14KQogewotICByZXR1cm4gKCgoUkVBRF9CSVQoTFBUSU14LT5DUiwgTFBUSU1fQ1JfRU5BQkxFKSA9PSBMUFRJTV9DUl9FTkFCTEUpPyAxVUwgOiAwVUwpKTsKKyAgcmV0dXJuICgoKFJFQURfQklUKExQVElNeC0+Q1IsIExQVElNX0NSX0VOQUJMRSkgPT0gTFBUSU1fQ1JfRU5BQkxFKSA/IDFVTCA6IDBVTCkpOwogfQogCiAvKioKQEAgLTM5NCw3ICs0MDcsNyBAQAogICAqIEBub3RlIFRoZSBMUFRJTXhfQVJSIHJlZ2lzdGVyIGNvbnRlbnQgbXVzdCBvbmx5IGJlIG1vZGlmaWVkIHdoZW4gdGhlIExQVElNIGlzIGVuYWJsZWQKICAgKiBAbm90ZSBBZnRlciBhIHdyaXRlIHRvIHRoZSBMUFRJTXhfQVJSIHJlZ2lzdGVyIGEgbmV3IHdyaXRlIG9wZXJhdGlvbiB0byB0aGUKICAgKiAgICAgICBzYW1lIHJlZ2lzdGVyIGNhbiBvbmx5IGJlIHBlcmZvcm1lZCB3aGVuIHRoZSBwcmV2aW91cyB3cml0ZSBvcGVyYXRpb24KLSAgKiAgICAgICBpcyBjb21wbGV0ZWQuIEFueSBzdWNjZXNzaXZlIHdyaXRlIGJlZm9yZSAgdGhlIEFSUk9LIGZsYWcgYmUgc2V0LCB3aWxsCisgICogICAgICAgaXMgY29tcGxldGVkLiBBbnkgc3VjY2Vzc2l2ZSB3cml0ZSBiZWZvcmUgIHRoZSBBUlJPSyBmbGFnIGlzIHNldCwgd2lsbAogICAqICAgICAgIGxlYWQgdG8gdW5wcmVkaWN0YWJsZSByZXN1bHRzLgogICAqIEBub3RlIGF1dG9yZWxvYWQgdmFsdWUgYmUgc3RyaWN0bHkgZ3JlYXRlciB0aGFuIHRoZSBjb21wYXJlIHZhbHVlLgogICAqIEBybXRvbGwgQVJSICAgICAgICAgIEFSUiAgICAgICAgICAgTExfTFBUSU1fU2V0QXV0b1JlbG9hZApAQCAtNDIyLDcgKzQzNSw3IEBACiAgICogQGJyaWVmICBTZXQgdGhlIGNvbXBhcmUgdmFsdWUKICAgKiBAbm90ZSBBZnRlciBhIHdyaXRlIHRvIHRoZSBMUFRJTXhfQ01QIHJlZ2lzdGVyIGEgbmV3IHdyaXRlIG9wZXJhdGlvbiB0byB0aGUKICAgKiAgICAgICBzYW1lIHJlZ2lzdGVyIGNhbiBvbmx5IGJlIHBlcmZvcm1lZCB3aGVuIHRoZSBwcmV2aW91cyB3cml0ZSBvcGVyYXRpb24KLSAgKiAgICAgICBpcyBjb21wbGV0ZWQuIEFueSBzdWNjZXNzaXZlIHdyaXRlIGJlZm9yZSB0aGUgQ01QT0sgZmxhZyBiZSBzZXQsIHdpbGwKKyAgKiAgICAgICBpcyBjb21wbGV0ZWQuIEFueSBzdWNjZXNzaXZlIHdyaXRlIGJlZm9yZSB0aGUgQ01QT0sgZmxhZyBpcyBzZXQsIHdpbGwKICAgKiAgICAgICBsZWFkIHRvIHVucHJlZGljdGFibGUgcmVzdWx0cy4KICAgKiBAcm10b2xsIENNUCAgICAgICAgICBDTVAgICAgICAgICAgIExMX0xQVElNX1NldENvbXBhcmUKICAgKiBAcGFyYW0gIExQVElNeCBMb3ctUG93ZXIgVGltZXIgaW5zdGFuY2UKQEAgLTYwNyw2ICs2MjAsMjQgQEAKIHsKICAgcmV0dXJuICh1aW50MzJfdCkoUkVBRF9CSVQoTFBUSU14LT5DRkdSLCBMUFRJTV9DRkdSX1BSRVNDKSk7CiB9CisjaWYgIGRlZmluZWQoTFBUSU1fT1JfT1IpCisKKy8qKgorICAqIEBicmllZiAgU2V0IExQVElNIGlucHV0IDEgc291cmNlIChkZWZhdWx0IEdQSU8pLgorICAqIEBybXRvbGwgT1IgICAgICBPUiAgICAgICBMTF9MUFRJTV9TZXRJbnB1dDFTcmMKKyAgKiBAcGFyYW0gIExQVElNeCBMb3ctUG93ZXIgVGltZXIgaW5zdGFuY2UKKyAgKiBAcGFyYW0gIFNyYyBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0xQVElNX0lOUFVUMV9TUkNfUEFEX0FGCisgICogICAgICAgICBAYXJnIEByZWYgTExfTFBUSU1fSU5QVVQxX1NSQ19QQURfUEE0CisgICogICAgICAgICBAYXJnIEByZWYgTExfTFBUSU1fSU5QVVQxX1NSQ19QQURfUEI5CisgICogICAgICAgICBAYXJnIEByZWYgTExfTFBUSU1fSU5QVVQxX1NSQ19USU1fREFDCisgICogQHJldHZhbCBOb25lCisgICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9MUFRJTV9TZXRJbnB1dDFTcmMoTFBUSU1fVHlwZURlZiAqTFBUSU14LCB1aW50MzJfdCBTcmMpCit7CisgIE1PRElGWV9SRUcoTFBUSU14LT5PUiwgTFBUSU1fT1JfT1IsIFNyYyk7Cit9CisjZW5kaWYgLyogTFBUSU1fT1JfT1IgKi8KIAogLyoqCiAgICogQH0KQEAgLTY1NSw3ICs2ODYsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVElNX0lzRW5hYmxlZFRpbWVvdXQoTFBUSU1fVHlwZURlZiAqTFBUSU14KQogewotICByZXR1cm4gKCgoUkVBRF9CSVQoTFBUSU14LT5DRkdSLCBMUFRJTV9DRkdSX1RJTU9VVCkgPT0gTFBUSU1fQ0ZHUl9USU1PVVQpPyAxVUwgOiAwVUwpKTsKKyAgcmV0dXJuICgoKFJFQURfQklUKExQVElNeC0+Q0ZHUiwgTFBUSU1fQ0ZHUl9USU1PVVQpID09IExQVElNX0NGR1JfVElNT1VUKSA/IDFVTCA6IDBVTCkpOwogfQogCiAvKioKQEAgLTkxNCw3ICs5NDUsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVElNX0lzRW5hYmxlZEVuY29kZXJNb2RlKExQVElNX1R5cGVEZWYgKkxQVElNeCkKIHsKLSAgcmV0dXJuICgoKFJFQURfQklUKExQVElNeC0+Q0ZHUiwgTFBUSU1fQ0ZHUl9FTkMpID09IExQVElNX0NGR1JfRU5DKT8gMVVMIDogMFVMKSk7CisgIHJldHVybiAoKChSRUFEX0JJVChMUFRJTXgtPkNGR1IsIExQVElNX0NGR1JfRU5DKSA9PSBMUFRJTV9DRkdSX0VOQykgPyAxVUwgOiAwVUwpKTsKIH0KIAogLyoqCkBAIC05NDQsNyArOTc1LDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9MUFRJTV9Jc0FjdGl2ZUZsYWdfQ01QTShMUFRJTV9UeXBlRGVmICpMUFRJTXgpCiB7Ci0gIHJldHVybiAoKChSRUFEX0JJVChMUFRJTXgtPklTUiwgTFBUSU1fSVNSX0NNUE0pID09IExQVElNX0lTUl9DTVBNKT8gMVVMIDogMFVMKSk7CisgIHJldHVybiAoKChSRUFEX0JJVChMUFRJTXgtPklTUiwgTFBUSU1fSVNSX0NNUE0pID09IExQVElNX0lTUl9DTVBNKSA/IDFVTCA6IDBVTCkpOwogfQogCiAvKioKQEAgLTk2Niw3ICs5OTcsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVElNX0lzQWN0aXZlRmxhZ19BUlJNKExQVElNX1R5cGVEZWYgKkxQVElNeCkKIHsKLSAgcmV0dXJuICgoKFJFQURfQklUKExQVElNeC0+SVNSLCBMUFRJTV9JU1JfQVJSTSkgPT0gTFBUSU1fSVNSX0FSUk0pPyAxVUwgOiAwVUwpKTsKKyAgcmV0dXJuICgoKFJFQURfQklUKExQVElNeC0+SVNSLCBMUFRJTV9JU1JfQVJSTSkgPT0gTFBUSU1fSVNSX0FSUk0pID8gMVVMIDogMFVMKSk7CiB9CiAKIC8qKgpAQCAtOTg4LDcgKzEwMTksNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVElNX0lzQWN0aXZlRmxhZ19FWFRUUklHKExQVElNX1R5cGVEZWYgKkxQVElNeCkKIHsKLSAgcmV0dXJuICgoKFJFQURfQklUKExQVElNeC0+SVNSLCBMUFRJTV9JU1JfRVhUVFJJRykgPT0gTFBUSU1fSVNSX0VYVFRSSUcpPyAxVUwgOiAwVUwpKTsKKyAgcmV0dXJuICgoKFJFQURfQklUKExQVElNeC0+SVNSLCBMUFRJTV9JU1JfRVhUVFJJRykgPT0gTFBUSU1fSVNSX0VYVFRSSUcpID8gMVVMIDogMFVMKSk7CiB9CiAKIC8qKgpAQCAtMTAxMCw3ICsxMDQxLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9MUFRJTV9Jc0FjdGl2ZUZsYWdfQ01QT0soTFBUSU1fVHlwZURlZiAqTFBUSU14KQogewotICByZXR1cm4gKCgoUkVBRF9CSVQoTFBUSU14LT5JU1IsIExQVElNX0lTUl9DTVBPSykgPT0gTFBUSU1fSVNSX0NNUE9LKT8gMVVMIDogMFVMKSk7CisgIHJldHVybiAoKChSRUFEX0JJVChMUFRJTXgtPklTUiwgTFBUSU1fSVNSX0NNUE9LKSA9PSBMUFRJTV9JU1JfQ01QT0spID8gMVVMIDogMFVMKSk7CiB9CiAKIC8qKgpAQCAtMTAzMiw3ICsxMDYzLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9MUFRJTV9Jc0FjdGl2ZUZsYWdfQVJST0soTFBUSU1fVHlwZURlZiAqTFBUSU14KQogewotICByZXR1cm4gKCgoUkVBRF9CSVQoTFBUSU14LT5JU1IsIExQVElNX0lTUl9BUlJPSykgPT0gTFBUSU1fSVNSX0FSUk9LKT8gMVVMIDogMFVMKSk7CisgIHJldHVybiAoKChSRUFEX0JJVChMUFRJTXgtPklTUiwgTFBUSU1fSVNSX0FSUk9LKSA9PSBMUFRJTV9JU1JfQVJST0spID8gMVVMIDogMFVMKSk7CiB9CiAKIC8qKgpAQCAtMTA1NCw3ICsxMDg1LDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9MUFRJTV9Jc0FjdGl2ZUZsYWdfVVAoTFBUSU1fVHlwZURlZiAqTFBUSU14KQogewotICByZXR1cm4gKCgoUkVBRF9CSVQoTFBUSU14LT5JU1IsIExQVElNX0lTUl9VUCkgPT0gTFBUSU1fSVNSX1VQKT8gMVVMIDogMFVMKSk7CisgIHJldHVybiAoKChSRUFEX0JJVChMUFRJTXgtPklTUiwgTFBUSU1fSVNSX1VQKSA9PSBMUFRJTV9JU1JfVVApID8gMVVMIDogMFVMKSk7CiB9CiAKIC8qKgpAQCAtMTA3Niw3ICsxMTA3LDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9MUFRJTV9Jc0FjdGl2ZUZsYWdfRE9XTihMUFRJTV9UeXBlRGVmICpMUFRJTXgpCiB7Ci0gIHJldHVybiAoKChSRUFEX0JJVChMUFRJTXgtPklTUiwgTFBUSU1fSVNSX0RPV04pID09IExQVElNX0lTUl9ET1dOKT8gMVVMIDogMFVMKSk7CisgIHJldHVybiAoKChSRUFEX0JJVChMUFRJTXgtPklTUiwgTFBUSU1fSVNSX0RPV04pID09IExQVElNX0lTUl9ET1dOKSA/IDFVTCA6IDBVTCkpOwogfQogCiAvKioKQEAgLTExMTcsNyArMTE0OCw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTFBUSU1fSXNFbmFibGVkSVRfQ01QTShMUFRJTV9UeXBlRGVmICpMUFRJTXgpCiB7Ci0gIHJldHVybiAoKChSRUFEX0JJVChMUFRJTXgtPklFUiwgTFBUSU1fSUVSX0NNUE1JRSkgPT0gTFBUSU1fSUVSX0NNUE1JRSk/IDFVTCA6IDBVTCkpOworICByZXR1cm4gKCgoUkVBRF9CSVQoTFBUSU14LT5JRVIsIExQVElNX0lFUl9DTVBNSUUpID09IExQVElNX0lFUl9DTVBNSUUpID8gMVVMIDogMFVMKSk7CiB9CiAKIC8qKgpAQCAtMTE1MCw3ICsxMTgxLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9MUFRJTV9Jc0VuYWJsZWRJVF9BUlJNKExQVElNX1R5cGVEZWYgKkxQVElNeCkKIHsKLSAgcmV0dXJuICgoKFJFQURfQklUKExQVElNeC0+SUVSLCBMUFRJTV9JRVJfQVJSTUlFKSA9PSBMUFRJTV9JRVJfQVJSTUlFKT8gMVVMIDogMFVMKSk7CisgIHJldHVybiAoKChSRUFEX0JJVChMUFRJTXgtPklFUiwgTFBUSU1fSUVSX0FSUk1JRSkgPT0gTFBUSU1fSUVSX0FSUk1JRSkgPyAxVUwgOiAwVUwpKTsKIH0KIAogLyoqCkBAIC0xMTgzLDcgKzEyMTQsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVElNX0lzRW5hYmxlZElUX0VYVFRSSUcoTFBUSU1fVHlwZURlZiAqTFBUSU14KQogewotICByZXR1cm4gKCgoUkVBRF9CSVQoTFBUSU14LT5JRVIsIExQVElNX0lFUl9FWFRUUklHSUUpID09IExQVElNX0lFUl9FWFRUUklHSUUpPyAxVUwgOiAwVUwpKTsKKyAgcmV0dXJuICgoKFJFQURfQklUKExQVElNeC0+SUVSLCBMUFRJTV9JRVJfRVhUVFJJR0lFKSA9PSBMUFRJTV9JRVJfRVhUVFJJR0lFKSA/IDFVTCA6IDBVTCkpOwogfQogCiAvKioKQEAgLTEyMTYsNyArMTI0Nyw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTFBUSU1fSXNFbmFibGVkSVRfQ01QT0soTFBUSU1fVHlwZURlZiAqTFBUSU14KQogewotICByZXR1cm4gKCgoUkVBRF9CSVQoTFBUSU14LT5JRVIsIExQVElNX0lFUl9DTVBPS0lFKSA9PSBMUFRJTV9JRVJfQ01QT0tJRSk/IDFVTCA6IDBVTCkpOworICByZXR1cm4gKCgoUkVBRF9CSVQoTFBUSU14LT5JRVIsIExQVElNX0lFUl9DTVBPS0lFKSA9PSBMUFRJTV9JRVJfQ01QT0tJRSkgPyAxVUwgOiAwVUwpKTsKIH0KIAogLyoqCkBAIC0xMjQ1LDExICsxMjc2LDExIEBACiAgICogQGJyaWVmICBJbmRpY2F0ZXMgd2hldGhlciB0aGUgYXV0b3JlbG9hZCByZWdpc3RlciB3cml0ZSBjb21wbGV0ZWQgaW50ZXJydXB0IChBUlJPS0lFKSBpcyBlbmFibGVkLgogICAqIEBybXRvbGwgSUVSICAgICAgICAgIEFSUk9LSUUgICAgICAgTExfTFBUSU1fSXNFbmFibGVkSVRfQVJST0sKICAgKiBAcGFyYW0gIExQVElNeCBMb3ctUG93ZXIgVGltZXIgaW5zdGFuY2UKLSAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KKyAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCgxIG9yIDApLgogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVElNX0lzRW5hYmxlZElUX0FSUk9LKExQVElNX1R5cGVEZWYgKkxQVElNeCkKIHsKLSAgcmV0dXJuICgoKFJFQURfQklUKExQVElNeC0+SUVSLCBMUFRJTV9JRVJfQVJST0tJRSkgPT0gTFBUSU1fSUVSX0FSUk9LSUUpPyAxVUwgOiAwVUwpKTsKKyAgcmV0dXJuICgoKFJFQURfQklUKExQVElNeC0+SUVSLCBMUFRJTV9JRVJfQVJST0tJRSkgPT0gTFBUSU1fSUVSX0FSUk9LSUUpID8gMVVMIDogMFVMKSk7CiB9CiAKIC8qKgpAQCAtMTI3OCwxMSArMTMwOSwxMSBAQAogICAqIEBicmllZiAgSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGRpcmVjdGlvbiBjaGFuZ2UgdG8gdXAgaW50ZXJydXB0IChVUElFKSBpcyBlbmFibGVkLgogICAqIEBybXRvbGwgSUVSICAgICAgICAgIFVQSUUgICAgICAgICAgTExfTFBUSU1fSXNFbmFibGVkSVRfVVAKICAgKiBAcGFyYW0gIExQVElNeCBMb3ctUG93ZXIgVGltZXIgaW5zdGFuY2UKLSAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KKyAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCgxIG9yIDApLgogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVElNX0lzRW5hYmxlZElUX1VQKExQVElNX1R5cGVEZWYgKkxQVElNeCkKIHsKLSAgcmV0dXJuICgoKFJFQURfQklUKExQVElNeC0+SUVSLCBMUFRJTV9JRVJfVVBJRSkgPT0gTFBUSU1fSUVSX1VQSUUpPyAxVUwgOiAwVUwpKTsKKyAgcmV0dXJuICgoKFJFQURfQklUKExQVElNeC0+SUVSLCBMUFRJTV9JRVJfVVBJRSkgPT0gTFBUSU1fSUVSX1VQSUUpID8gMVVMIDogMFVMKSk7CiB9CiAKIC8qKgpAQCAtMTMxMSwxMSArMTM0MiwxMSBAQAogICAqIEBicmllZiAgSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGRpcmVjdGlvbiBjaGFuZ2UgdG8gZG93biBpbnRlcnJ1cHQgKERPV05JRSkgaXMgZW5hYmxlZC4KICAgKiBAcm10b2xsIElFUiAgICAgICAgICBET1dOSUUgICAgICAgIExMX0xQVElNX0lzRW5hYmxlZElUX0RPV04KICAgKiBAcGFyYW0gIExQVElNeCBMb3ctUG93ZXIgVGltZXIgaW5zdGFuY2UKLSAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KKyAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCgxIG9yIDApLgogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVElNX0lzRW5hYmxlZElUX0RPV04oTFBUSU1fVHlwZURlZiAqTFBUSU14KQogewotICByZXR1cm4gKChSRUFEX0JJVChMUFRJTXgtPklFUiwgTFBUSU1fSUVSX0RPV05JRSkgPT0gTFBUSU1fSUVSX0RPV05JRSk/IDFVTCA6IDBVTCk7CisgIHJldHVybiAoKFJFQURfQklUKExQVElNeC0+SUVSLCBMUFRJTV9JRVJfRE9XTklFKSA9PSBMUFRJTV9JRVJfRE9XTklFKSA/IDFVTCA6IDBVTCk7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZjR4eF9sbF9zZG1tYy5oIGIvSW5jL3N0bTMyZjR4eF9sbF9zZG1tYy5oCmluZGV4IDAyNmRhM2MuLmM5NjZjOTAgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmY0eHhfbGxfc2RtbWMuaAorKysgYi9JbmMvc3RtMzJmNHh4X2xsX3NkbW1jLmgKQEAgLTEyLDI0ICsxMiwyMCBAQAogICAqIFRoaXMgc29mdHdhcmUgY29tcG9uZW50IGlzIGxpY2Vuc2VkIGJ5IFNUIHVuZGVyIEJTRCAzLUNsYXVzZSBsaWNlbnNlLAogICAqIHRoZSAiTGljZW5zZSI7IFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUKICAgKiBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQ6Ci0gICogICAgICAgICAgICAgICAgICAgICAgICBvcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2UKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlCiAgICoKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICovIAogCiAvKiBEZWZpbmUgdG8gcHJldmVudCByZWN1cnNpdmUgaW5jbHVzaW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotI2lmbmRlZiBfX1NUTTMyRjR4eF9MTF9TRE1NQ19ICi0jZGVmaW5lIF9fU1RNMzJGNHh4X0xMX1NETU1DX0gKKyNpZm5kZWYgU1RNMzJGNHh4X0xMX1NETU1DX0gKKyNkZWZpbmUgU1RNMzJGNHh4X0xMX1NETU1DX0gKIAogI2lmZGVmIF9fY3BsdXNwbHVzCiAgZXh0ZXJuICJDIiB7CiAjZW5kaWYKLSAgIAotI2lmIGRlZmluZWQoU1RNMzJGNDA1eHgpIHx8IGRlZmluZWQoU1RNMzJGNDE1eHgpIHx8IGRlZmluZWQoU1RNMzJGNDA3eHgpIHx8IGRlZmluZWQoU1RNMzJGNDE3eHgpIHx8IFwKLSAgICBkZWZpbmVkKFNUTTMyRjQyN3h4KSB8fCBkZWZpbmVkKFNUTTMyRjQzN3h4KSB8fCBkZWZpbmVkKFNUTTMyRjQyOXh4KSB8fCBkZWZpbmVkKFNUTTMyRjQzOXh4KSB8fCBcCi0gICAgZGVmaW5lZChTVE0zMkY0MDF4QykgfHwgZGVmaW5lZChTVE0zMkY0MDF4RSkgfHwgZGVmaW5lZChTVE0zMkY0MTF4RSkgfHwgZGVmaW5lZChTVE0zMkY0NDZ4eCkgfHwgXAotICAgIGRlZmluZWQoU1RNMzJGNDY5eHgpIHx8IGRlZmluZWQoU1RNMzJGNDc5eHgpIHx8IGRlZmluZWQoU1RNMzJGNDEyWngpIHx8IGRlZmluZWQoU1RNMzJGNDEyVngpIHx8IFwKLSAgICBkZWZpbmVkKFNUTTMyRjQxMlJ4KSB8fCBkZWZpbmVkKFNUTTMyRjQxMkN4KSB8fCBkZWZpbmVkKFNUTTMyRjQxM3h4KSB8fCBkZWZpbmVkKFNUTTMyRjQyM3h4KQorCisjaWYgZGVmaW5lZChTRElPKQogCiAvKiBJbmNsdWRlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogI2luY2x1ZGUgInN0bTMyZjR4eF9oYWxfZGVmLmgiCkBAIC0xMzMsMTk2ICsxMjksMTk3IEBACiAvKiogQGRlZmdyb3VwIFNETU1DX0xMX0V4cG9ydGVkX0NvbnN0YW50cyBTRE1NQ19MTCBFeHBvcnRlZCBDb25zdGFudHMKICAgKiBAewogICAqLwotI2RlZmluZSBTRE1NQ19FUlJPUl9OT05FICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMFUgICAvKiE8IE5vIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgU0RNTUNfRVJST1JfQ01EX0NSQ19GQUlMICAgICAgICAgICAgIDB4MDAwMDAwMDFVICAgLyohPCBDb21tYW5kIHJlc3BvbnNlIHJlY2VpdmVkIChidXQgQ1JDIGNoZWNrIGZhaWxlZCkgICAgICAgICAgICAgICovCi0jZGVmaW5lIFNETU1DX0VSUk9SX0RBVEFfQ1JDX0ZBSUwgICAgICAgICAgICAweDAwMDAwMDAyVSAgIC8qITwgRGF0YSBibG9jayBzZW50L3JlY2VpdmVkIChDUkMgY2hlY2sgZmFpbGVkKSAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBTRE1NQ19FUlJPUl9DTURfUlNQX1RJTUVPVVQgICAgICAgICAgMHgwMDAwMDAwNFUgICAvKiE8IENvbW1hbmQgcmVzcG9uc2UgdGltZW91dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgU0RNTUNfRVJST1JfREFUQV9USU1FT1VUICAgICAgICAgICAgIDB4MDAwMDAwMDhVICAgLyohPCBEYXRhIHRpbWVvdXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIFNETU1DX0VSUk9SX1RYX1VOREVSUlVOICAgICAgICAgICAgICAweDAwMDAwMDEwVSAgIC8qITwgVHJhbnNtaXQgRklGTyB1bmRlcnJ1biAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBTRE1NQ19FUlJPUl9SWF9PVkVSUlVOICAgICAgICAgICAgICAgMHgwMDAwMDAyMFUgICAvKiE8IFJlY2VpdmUgRklGTyBvdmVycnVuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgU0RNTUNfRVJST1JfQUREUl9NSVNBTElHTkVEICAgICAgICAgIDB4MDAwMDAwNDBVICAgLyohPCBNaXNhbGlnbmVkIGFkZHJlc3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIFNETU1DX0VSUk9SX0JMT0NLX0xFTl9FUlIgICAgICAgICAgICAweDAwMDAwMDgwVSAgIC8qITwgVHJhbnNmZXJyZWQgYmxvY2sgbGVuZ3RoIGlzIG5vdCBhbGxvd2VkIGZvciB0aGUgY2FyZCBvciB0aGUgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlciBvZiB0cmFuc2ZlcnJlZCBieXRlcyBkb2VzIG5vdCBtYXRjaCB0aGUgYmxvY2sgbGVuZ3RoICAgKi8KLSNkZWZpbmUgU0RNTUNfRVJST1JfRVJBU0VfU0VRX0VSUiAgICAgICAgICAgIDB4MDAwMDAxMDBVICAgLyohPCBBbiBlcnJvciBpbiB0aGUgc2VxdWVuY2Ugb2YgZXJhc2UgY29tbWFuZCBvY2N1cnMgICAgICAgICAgICAgICovCi0jZGVmaW5lIFNETU1DX0VSUk9SX0JBRF9FUkFTRV9QQVJBTSAgICAgICAgICAweDAwMDAwMjAwVSAgIC8qITwgQW4gaW52YWxpZCBzZWxlY3Rpb24gZm9yIGVyYXNlIGdyb3VwcyAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBTRE1NQ19FUlJPUl9XUklURV9QUk9UX1ZJT0xBVElPTiAgICAgMHgwMDAwMDQwMFUgICAvKiE8IEF0dGVtcHQgdG8gcHJvZ3JhbSBhIHdyaXRlIHByb3RlY3QgYmxvY2sgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgU0RNTUNfRVJST1JfTE9DS19VTkxPQ0tfRkFJTEVEICAgICAgIDB4MDAwMDA4MDBVICAgLyohPCBTZXF1ZW5jZSBvciBwYXNzd29yZCBlcnJvciBoYXMgYmVlbiBkZXRlY3RlZCBpbiB1bmxvY2sgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZCBvciBpZiB0aGVyZSB3YXMgYW4gYXR0ZW1wdCB0byBhY2Nlc3MgYSBsb2NrZWQgY2FyZCAgICAqLwotI2RlZmluZSBTRE1NQ19FUlJPUl9DT01fQ1JDX0ZBSUxFRCAgICAgICAgICAgMHgwMDAwMTAwMFUgICAvKiE8IENSQyBjaGVjayBvZiB0aGUgcHJldmlvdXMgY29tbWFuZCBmYWlsZWQgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgU0RNTUNfRVJST1JfSUxMRUdBTF9DTUQgICAgICAgICAgICAgIDB4MDAwMDIwMDBVICAgLyohPCBDb21tYW5kIGlzIG5vdCBsZWdhbCBmb3IgdGhlIGNhcmQgc3RhdGUgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIFNETU1DX0VSUk9SX0NBUkRfRUNDX0ZBSUxFRCAgICAgICAgICAweDAwMDA0MDAwVSAgIC8qITwgQ2FyZCBpbnRlcm5hbCBFQ0Mgd2FzIGFwcGxpZWQgYnV0IGZhaWxlZCB0byBjb3JyZWN0IHRoZSBkYXRhICAqLwotI2RlZmluZSBTRE1NQ19FUlJPUl9DQ19FUlIgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMFUgICAvKiE8IEludGVybmFsIGNhcmQgY29udHJvbGxlciBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgU0RNTUNfRVJST1JfR0VORVJBTF9VTktOT1dOX0VSUiAgICAgIDB4MDAwMTAwMDBVICAgLyohPCBHZW5lcmFsIG9yIHVua25vd24gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIFNETU1DX0VSUk9SX1NUUkVBTV9SRUFEX1VOREVSUlVOICAgICAweDAwMDIwMDAwVSAgIC8qITwgVGhlIGNhcmQgY291bGQgbm90IHN1c3RhaW4gZGF0YSByZWFkaW5nIGluIHN0cmVhbSBybW9kZSAgICAgICAqLwotI2RlZmluZSBTRE1NQ19FUlJPUl9TVFJFQU1fV1JJVEVfT1ZFUlJVTiAgICAgMHgwMDA0MDAwMFUgICAvKiE8IFRoZSBjYXJkIGNvdWxkIG5vdCBzdXN0YWluIGRhdGEgcHJvZ3JhbW1pbmcgaW4gc3RyZWFtIG1vZGUgICAgKi8KLSNkZWZpbmUgU0RNTUNfRVJST1JfQ0lEX0NTRF9PVkVSV1JJVEUgICAgICAgIDB4MDAwODAwMDBVICAgLyohPCBDSUQvQ1NEIG92ZXJ3cml0ZSBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIFNETU1DX0VSUk9SX1dQX0VSQVNFX1NLSVAgICAgICAgICAgICAweDAwMTAwMDAwVSAgIC8qITwgT25seSBwYXJ0aWFsIGFkZHJlc3Mgc3BhY2Ugd2FzIGVyYXNlZCAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBTRE1NQ19FUlJPUl9DQVJEX0VDQ19ESVNBQkxFRCAgICAgICAgMHgwMDIwMDAwMFUgICAvKiE8IENvbW1hbmQgaGFzIGJlZW4gZXhlY3V0ZWQgd2l0aG91dCB1c2luZyBpbnRlcm5hbCBFQ0MgICAgICAgICAgKi8KLSNkZWZpbmUgU0RNTUNfRVJST1JfRVJBU0VfUkVTRVQgICAgICAgICAgICAgIDB4MDA0MDAwMDBVICAgLyohPCBFcmFzZSBzZXF1ZW5jZSB3YXMgY2xlYXJlZCBiZWZvcmUgZXhlY3V0aW5nIGJlY2F1c2UgYW4gb3V0IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIGVyYXNlIHNlcXVlbmNlIGNvbW1hbmQgd2FzIHJlY2VpdmVkICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgU0RNTUNfRVJST1JfQUtFX1NFUV9FUlIgICAgICAgICAgICAgIDB4MDA4MDAwMDBVICAgLyohPCBFcnJvciBpbiBzZXF1ZW5jZSBvZiBhdXRoZW50aWNhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIFNETU1DX0VSUk9SX0lOVkFMSURfVk9MVFJBTkdFICAgICAgICAweDAxMDAwMDAwVSAgIC8qITwgRXJyb3IgaW4gY2FzZSBvZiBpbnZhbGlkIHZvbHRhZ2UgcmFuZ2UgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBTRE1NQ19FUlJPUl9BRERSX09VVF9PRl9SQU5HRSAgICAgICAgMHgwMjAwMDAwMFUgICAvKiE8IEVycm9yIHdoZW4gYWRkcmVzc2VkIGJsb2NrIGlzIG91dCBvZiByYW5nZSAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgU0RNTUNfRVJST1JfUkVRVUVTVF9OT1RfQVBQTElDQUJMRSAgIDB4MDQwMDAwMDBVICAgLyohPCBFcnJvciB3aGVuIGNvbW1hbmQgcmVxdWVzdCBpcyBub3QgYXBwbGljYWJsZSAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIFNETU1DX0VSUk9SX0lOVkFMSURfUEFSQU1FVEVSICAgICAgICAweDA4MDAwMDAwVSAgIC8qITwgdGhlIHVzZWQgcGFyYW1ldGVyIGlzIG5vdCB2YWxpZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBTRE1NQ19FUlJPUl9VTlNVUFBPUlRFRF9GRUFUVVJFICAgICAgMHgxMDAwMDAwMFUgICAvKiE8IEVycm9yIHdoZW4gZmVhdHVyZSBpcyBub3QgaW5zdXBwb3J0ZWQgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgU0RNTUNfRVJST1JfQlVTWSAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDBVICAgLyohPCBFcnJvciB3aGVuIHRyYW5zZmVyIHByb2Nlc3MgaXMgYnVzeSAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIFNETU1DX0VSUk9SX0RNQSAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwVSAgIC8qITwgRXJyb3Igd2hpbGUgRE1BIHRyYW5zZmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBTRE1NQ19FUlJPUl9USU1FT1VUICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMFUgICAvKiE8IFRpbWVvdXQgZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU0RNTUNfRVJST1JfTk9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMFUgICAgLyohPCBObyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNETU1DX0VSUk9SX0NNRF9DUkNfRkFJTCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDFVICAgIC8qITwgQ29tbWFuZCByZXNwb25zZSByZWNlaXZlZCAoYnV0IENSQyBjaGVjayBmYWlsZWQpICAgICAgICAgICAgICAqLworI2RlZmluZSBTRE1NQ19FUlJPUl9EQVRBX0NSQ19GQUlMICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyVSAgICAvKiE8IERhdGEgYmxvY2sgc2VudC9yZWNlaXZlZCAoQ1JDIGNoZWNrIGZhaWxlZCkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU0RNTUNfRVJST1JfQ01EX1JTUF9USU1FT1VUICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNFUgICAgLyohPCBDb21tYW5kIHJlc3BvbnNlIHRpbWVvdXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNETU1DX0VSUk9SX0RBVEFfVElNRU9VVCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDhVICAgIC8qITwgRGF0YSB0aW1lb3V0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTRE1NQ19FUlJPUl9UWF9VTkRFUlJVTiAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwVSAgICAvKiE8IFRyYW5zbWl0IEZJRk8gdW5kZXJydW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU0RNTUNfRVJST1JfUlhfT1ZFUlJVTiAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMFUgICAgLyohPCBSZWNlaXZlIEZJRk8gb3ZlcnJ1biAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNETU1DX0VSUk9SX0FERFJfTUlTQUxJR05FRCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDBVICAgIC8qITwgTWlzYWxpZ25lZCBhZGRyZXNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTRE1NQ19FUlJPUl9CTE9DS19MRU5fRVJSICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwVSAgICAvKiE8IFRyYW5zZmVycmVkIGJsb2NrIGxlbmd0aCBpcyBub3QgYWxsb3dlZCBmb3IgdGhlIGNhcmQgb3IgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyIG9mIHRyYW5zZmVycmVkIGJ5dGVzIGRvZXMgbm90IG1hdGNoIHRoZSBibG9jayBsZW5ndGggICAqLworI2RlZmluZSBTRE1NQ19FUlJPUl9FUkFTRV9TRVFfRVJSICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwVSAgICAvKiE8IEFuIGVycm9yIGluIHRoZSBzZXF1ZW5jZSBvZiBlcmFzZSBjb21tYW5kIG9jY3VycyAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU0RNTUNfRVJST1JfQkFEX0VSQVNFX1BBUkFNICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMFUgICAgLyohPCBBbiBpbnZhbGlkIHNlbGVjdGlvbiBmb3IgZXJhc2UgZ3JvdXBzICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNETU1DX0VSUk9SX1dSSVRFX1BST1RfVklPTEFUSU9OICAgICAgICAgICAgICAgIDB4MDAwMDA0MDBVICAgIC8qITwgQXR0ZW1wdCB0byBwcm9ncmFtIGEgd3JpdGUgcHJvdGVjdCBibG9jayAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTRE1NQ19FUlJPUl9MT0NLX1VOTE9DS19GQUlMRUQgICAgICAgICAgICAgICAgICAweDAwMDAwODAwVSAgICAvKiE8IFNlcXVlbmNlIG9yIHBhc3N3b3JkIGVycm9yIGhhcyBiZWVuIGRldGVjdGVkIGluIHVubG9jaworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQgb3IgaWYgdGhlcmUgd2FzIGFuIGF0dGVtcHQgdG8gYWNjZXNzIGEgbG9ja2VkIGNhcmQgICAgKi8KKyNkZWZpbmUgU0RNTUNfRVJST1JfQ09NX0NSQ19GQUlMRUQgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMFUgICAgLyohPCBDUkMgY2hlY2sgb2YgdGhlIHByZXZpb3VzIGNvbW1hbmQgZmFpbGVkICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNETU1DX0VSUk9SX0lMTEVHQUxfQ01EICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDBVICAgIC8qITwgQ29tbWFuZCBpcyBub3QgbGVnYWwgZm9yIHRoZSBjYXJkIHN0YXRlICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTRE1NQ19FUlJPUl9DQVJEX0VDQ19GQUlMRUQgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwVSAgICAvKiE8IENhcmQgaW50ZXJuYWwgRUNDIHdhcyBhcHBsaWVkIGJ1dCBmYWlsZWQgdG8gY29ycmVjdCB0aGUgZGF0YSAgKi8KKyNkZWZpbmUgU0RNTUNfRVJST1JfQ0NfRVJSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMFUgICAgLyohPCBJbnRlcm5hbCBjYXJkIGNvbnRyb2xsZXIgZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNETU1DX0VSUk9SX0dFTkVSQUxfVU5LTk9XTl9FUlIgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDBVICAgIC8qITwgR2VuZXJhbCBvciB1bmtub3duIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTRE1NQ19FUlJPUl9TVFJFQU1fUkVBRF9VTkRFUlJVTiAgICAgICAgICAgICAgICAweDAwMDIwMDAwVSAgICAvKiE8IFRoZSBjYXJkIGNvdWxkIG5vdCBzdXN0YWluIGRhdGEgcmVhZGluZyBpbiBzdHJlYW0gcm1vZGUgICAgICAgKi8KKyNkZWZpbmUgU0RNTUNfRVJST1JfU1RSRUFNX1dSSVRFX09WRVJSVU4gICAgICAgICAgICAgICAgMHgwMDA0MDAwMFUgICAgLyohPCBUaGUgY2FyZCBjb3VsZCBub3Qgc3VzdGFpbiBkYXRhIHByb2dyYW1taW5nIGluIHN0cmVhbSBtb2RlICAgICovCisjZGVmaW5lIFNETU1DX0VSUk9SX0NJRF9DU0RfT1ZFUldSSVRFICAgICAgICAgICAgICAgICAgIDB4MDAwODAwMDBVICAgIC8qITwgQ0lEL0NTRCBvdmVyd3JpdGUgZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTRE1NQ19FUlJPUl9XUF9FUkFTRV9TS0lQICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAwMDAwVSAgICAvKiE8IE9ubHkgcGFydGlhbCBhZGRyZXNzIHNwYWNlIHdhcyBlcmFzZWQgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU0RNTUNfRVJST1JfQ0FSRF9FQ0NfRElTQUJMRUQgICAgICAgICAgICAgICAgICAgMHgwMDIwMDAwMFUgICAgLyohPCBDb21tYW5kIGhhcyBiZWVuIGV4ZWN1dGVkIHdpdGhvdXQgdXNpbmcgaW50ZXJuYWwgRUNDICAgICAgICAgICovCisjZGVmaW5lIFNETU1DX0VSUk9SX0VSQVNFX1JFU0VUICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MDAwMDBVICAgIC8qITwgRXJhc2Ugc2VxdWVuY2Ugd2FzIGNsZWFyZWQgYmVmb3JlIGV4ZWN1dGluZyBiZWNhdXNlIGFuIG91dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIGVyYXNlIHNlcXVlbmNlIGNvbW1hbmQgd2FzIHJlY2VpdmVkICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU0RNTUNfRVJST1JfQUtFX1NFUV9FUlIgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwMDAwMFUgICAgLyohPCBFcnJvciBpbiBzZXF1ZW5jZSBvZiBhdXRoZW50aWNhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNETU1DX0VSUk9SX0lOVkFMSURfVk9MVFJBTkdFICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDBVICAgIC8qITwgRXJyb3IgaW4gY2FzZSBvZiBpbnZhbGlkIHZvbHRhZ2UgcmFuZ2UgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTRE1NQ19FUlJPUl9BRERSX09VVF9PRl9SQU5HRSAgICAgICAgICAgICAgICAgICAweDAyMDAwMDAwVSAgICAvKiE8IEVycm9yIHdoZW4gYWRkcmVzc2VkIGJsb2NrIGlzIG91dCBvZiByYW5nZSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU0RNTUNfRVJST1JfUkVRVUVTVF9OT1RfQVBQTElDQUJMRSAgICAgICAgICAgICAgMHgwNDAwMDAwMFUgICAgLyohPCBFcnJvciB3aGVuIGNvbW1hbmQgcmVxdWVzdCBpcyBub3QgYXBwbGljYWJsZSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNETU1DX0VSUk9SX0lOVkFMSURfUEFSQU1FVEVSICAgICAgICAgICAgICAgICAgIDB4MDgwMDAwMDBVICAgIC8qITwgdGhlIHVzZWQgcGFyYW1ldGVyIGlzIG5vdCB2YWxpZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTRE1NQ19FUlJPUl9VTlNVUFBPUlRFRF9GRUFUVVJFICAgICAgICAgICAgICAgICAweDEwMDAwMDAwVSAgICAvKiE8IEVycm9yIHdoZW4gZmVhdHVyZSBpcyBub3QgaW5zdXBwb3J0ZWQgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU0RNTUNfRVJST1JfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMFUgICAgLyohPCBFcnJvciB3aGVuIHRyYW5zZmVyIHByb2Nlc3MgaXMgYnVzeSAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNETU1DX0VSUk9SX0RNQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDBVICAgIC8qITwgRXJyb3Igd2hpbGUgRE1BIHRyYW5zZmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTRE1NQ19FUlJPUl9USU1FT1VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAwMDAwVSAgICAvKiE8IFRpbWVvdXQgZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAogLyoqIAogICAqIEBicmllZiBTRE1NQyBDb21tYW5kcyBJbmRleCAKICAgKi8KLSNkZWZpbmUgU0RNTUNfQ01EX0dPX0lETEVfU1RBVEUgICAgICAgICAgICAgICAgICAgICAgICgodWludDhfdCkwKSAgIC8qITwgUmVzZXRzIHRoZSBTRCBtZW1vcnkgY2FyZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBTRE1NQ19DTURfU0VORF9PUF9DT05EICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50OF90KTEpICAgLyohPCBTZW5kcyBob3N0IGNhcGFjaXR5IHN1cHBvcnQgaW5mb3JtYXRpb24gYW5kIGFjdGl2YXRlcyB0aGUgY2FyZCdzIGluaXRpYWxpemF0aW9uIHByb2Nlc3MuICovCi0jZGVmaW5lIFNETU1DX0NNRF9BTExfU0VORF9DSUQgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMikgICAvKiE8IEFza3MgYW55IGNhcmQgY29ubmVjdGVkIHRvIHRoZSBob3N0IHRvIHNlbmQgdGhlIENJRCBudW1iZXJzIG9uIHRoZSBDTUQgbGluZS4gICAgICAgICAgICAgKi8KLSNkZWZpbmUgU0RNTUNfQ01EX1NFVF9SRUxfQUREUiAgICAgICAgICAgICAgICAgICAgICAgICgodWludDhfdCkzKSAgIC8qITwgQXNrcyB0aGUgY2FyZCB0byBwdWJsaXNoIGEgbmV3IHJlbGF0aXZlIGFkZHJlc3MgKFJDQSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBTRE1NQ19DTURfU0VUX0RTUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50OF90KTQpICAgLyohPCBQcm9ncmFtcyB0aGUgRFNSIG9mIGFsbCBjYXJkcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIFNETU1DX0NNRF9TRE1NQ19TRU5fT1BfQ09ORCAgICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpNSkgICAvKiE8IFNlbmRzIGhvc3QgY2FwYWNpdHkgc3VwcG9ydCBpbmZvcm1hdGlvbiAoSENTKSBhbmQgYXNrcyB0aGUgYWNjZXNzZWQgY2FyZCB0byBzZW5kIGl0cyAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW5nIGNvbmRpdGlvbiByZWdpc3RlciAoT0NSKSBjb250ZW50IGluIHRoZSByZXNwb25zZSBvbiB0aGUgQ01EIGxpbmUuICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgU0RNTUNfQ01EX0hTX1NXSVRDSCAgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDhfdCk2KSAgIC8qITwgQ2hlY2tzIHN3aXRjaGFibGUgZnVuY3Rpb24gKG1vZGUgMCkgYW5kIHN3aXRjaCBjYXJkIGZ1bmN0aW9uIChtb2RlIDEpLiAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBTRE1NQ19DTURfU0VMX0RFU0VMX0NBUkQgICAgICAgICAgICAgICAgICAgICAgKCh1aW50OF90KTcpICAgLyohPCBTZWxlY3RzIHRoZSBjYXJkIGJ5IGl0cyBvd24gcmVsYXRpdmUgYWRkcmVzcyBhbmQgZ2V0cyBkZXNlbGVjdGVkIGJ5IGFueSBvdGhlciBhZGRyZXNzICAgICovCi0jZGVmaW5lIFNETU1DX0NNRF9IU19TRU5EX0VYVF9DU0QgICAgICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpOCkgICAvKiE8IFNlbmRzIFNEIE1lbW9yeSBDYXJkIGludGVyZmFjZSBjb25kaXRpb24sIHdoaWNoIGluY2x1ZGVzIGhvc3Qgc3VwcGx5IHZvbHRhZ2UgaW5mb3JtYXRpb24gCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBhc2tzIHRoZSBjYXJkIHdoZXRoZXIgY2FyZCBzdXBwb3J0cyB2b2x0YWdlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIFNETU1DX0NNRF9TRU5EX0NTRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpOSkgICAvKiE8IEFkZHJlc3NlZCBjYXJkIHNlbmRzIGl0cyBjYXJkIHNwZWNpZmljIGRhdGEgKENTRCkgb24gdGhlIENNRCBsaW5lLiAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgU0RNTUNfQ01EX1NFTkRfQ0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDhfdCkxMCkgIC8qITwgQWRkcmVzc2VkIGNhcmQgc2VuZHMgaXRzIGNhcmQgaWRlbnRpZmljYXRpb24gKENJRCkgb24gdGhlIENNRCBsaW5lLiAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBTRE1NQ19DTURfUkVBRF9EQVRfVU5USUxfU1RPUCAgICAgICAgICAgICAgICAgKCh1aW50OF90KTExKSAgLyohPCBTRCBjYXJkIGRvZXNuJ3Qgc3VwcG9ydCBpdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIFNETU1DX0NNRF9TVE9QX1RSQU5TTUlTU0lPTiAgICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMTIpICAvKiE8IEZvcmNlcyB0aGUgY2FyZCB0byBzdG9wIHRyYW5zbWlzc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgU0RNTUNfQ01EX1NFTkRfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDhfdCkxMykgIC8qITwgQWRkcmVzc2VkIGNhcmQgc2VuZHMgaXRzIHN0YXR1cyByZWdpc3Rlci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBTRE1NQ19DTURfSFNfQlVTVEVTVF9SRUFEICAgICAgICAgICAgICAgICAgICAgKCh1aW50OF90KTE0KSAgLyohPCBSZXNlcnZlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIFNETU1DX0NNRF9HT19JTkFDVElWRV9TVEFURSAgICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMTUpICAvKiE8IFNlbmRzIGFuIGFkZHJlc3NlZCBjYXJkIGludG8gdGhlIGluYWN0aXZlIHN0YXRlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgU0RNTUNfQ01EX1NFVF9CTE9DS0xFTiAgICAgICAgICAgICAgICAgICAgICAgICgodWludDhfdCkxNikgIC8qITwgU2V0cyB0aGUgYmxvY2sgbGVuZ3RoIChpbiBieXRlcyBmb3IgU0RTQykgZm9yIGFsbCBmb2xsb3dpbmcgYmxvY2sgY29tbWFuZHMgCisjZGVmaW5lIFNETU1DX0NNRF9HT19JRExFX1NUQVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMFUgICAgLyohPCBSZXNldHMgdGhlIFNEIG1lbW9yeSBjYXJkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNETU1DX0NNRF9TRU5EX09QX0NPTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMVUgICAgLyohPCBTZW5kcyBob3N0IGNhcGFjaXR5IHN1cHBvcnQgaW5mb3JtYXRpb24gYW5kIGFjdGl2YXRlcyB0aGUgY2FyZCdzIGluaXRpYWxpemF0aW9uIHByb2Nlc3MuICovCisjZGVmaW5lIFNETU1DX0NNRF9BTExfU0VORF9DSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMlUgICAgLyohPCBBc2tzIGFueSBjYXJkIGNvbm5lY3RlZCB0byB0aGUgaG9zdCB0byBzZW5kIHRoZSBDSUQgbnVtYmVycyBvbiB0aGUgQ01EIGxpbmUuICAgICAgICAgICAgICovCisjZGVmaW5lIFNETU1DX0NNRF9TRVRfUkVMX0FERFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgM1UgICAgLyohPCBBc2tzIHRoZSBjYXJkIHRvIHB1Ymxpc2ggYSBuZXcgcmVsYXRpdmUgYWRkcmVzcyAoUkNBKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNETU1DX0NNRF9TRVRfRFNSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNFUgICAgLyohPCBQcm9ncmFtcyB0aGUgRFNSIG9mIGFsbCBjYXJkcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNETU1DX0NNRF9TRE1NQ19TRU5fT1BfQ09ORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNVUgICAgLyohPCBTZW5kcyBob3N0IGNhcGFjaXR5IHN1cHBvcnQgaW5mb3JtYXRpb24gKEhDUykgYW5kIGFza3MgdGhlIGFjY2Vzc2VkIGNhcmQgdG8gc2VuZCBpdHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGluZyBjb25kaXRpb24gcmVnaXN0ZXIgKE9DUikgY29udGVudCBpbiB0aGUgcmVzcG9uc2Ugb24gdGhlIENNRCBsaW5lLiAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU0RNTUNfQ01EX0hTX1NXSVRDSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2VSAgICAvKiE8IENoZWNrcyBzd2l0Y2hhYmxlIGZ1bmN0aW9uIChtb2RlIDApIGFuZCBzd2l0Y2ggY2FyZCBmdW5jdGlvbiAobW9kZSAxKS4gICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU0RNTUNfQ01EX1NFTF9ERVNFTF9DQVJEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3VSAgICAvKiE8IFNlbGVjdHMgdGhlIGNhcmQgYnkgaXRzIG93biByZWxhdGl2ZSBhZGRyZXNzIGFuZCBnZXRzIGRlc2VsZWN0ZWQgYnkgYW55IG90aGVyIGFkZHJlc3MgICAgKi8KKyNkZWZpbmUgU0RNTUNfQ01EX0hTX1NFTkRfRVhUX0NTRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4VSAgICAvKiE8IFNlbmRzIFNEIE1lbW9yeSBDYXJkIGludGVyZmFjZSBjb25kaXRpb24sIHdoaWNoIGluY2x1ZGVzIGhvc3Qgc3VwcGx5IHZvbHRhZ2UgaW5mb3JtYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBhc2tzIHRoZSBjYXJkIHdoZXRoZXIgY2FyZCBzdXBwb3J0cyB2b2x0YWdlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU0RNTUNfQ01EX1NFTkRfQ1NEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5VSAgICAvKiE8IEFkZHJlc3NlZCBjYXJkIHNlbmRzIGl0cyBjYXJkIHNwZWNpZmljIGRhdGEgKENTRCkgb24gdGhlIENNRCBsaW5lLiAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU0RNTUNfQ01EX1NFTkRfQ0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMFUgICAvKiE8IEFkZHJlc3NlZCBjYXJkIHNlbmRzIGl0cyBjYXJkIGlkZW50aWZpY2F0aW9uIChDSUQpIG9uIHRoZSBDTUQgbGluZS4gICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU0RNTUNfQ01EX1JFQURfREFUX1VOVElMX1NUT1AgICAgICAgICAgICAgICAgICAgICAgICAgICAxMVUgICAvKiE8IFNEIGNhcmQgZG9lc24ndCBzdXBwb3J0IGl0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU0RNTUNfQ01EX1NUT1BfVFJBTlNNSVNTSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMlUgICAvKiE8IEZvcmNlcyB0aGUgY2FyZCB0byBzdG9wIHRyYW5zbWlzc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU0RNTUNfQ01EX1NFTkRfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxM1UgICAvKiE8IEFkZHJlc3NlZCBjYXJkIHNlbmRzIGl0cyBzdGF0dXMgcmVnaXN0ZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU0RNTUNfQ01EX0hTX0JVU1RFU1RfUkVBRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNFUgICAvKiE8IFJlc2VydmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU0RNTUNfQ01EX0dPX0lOQUNUSVZFX1NUQVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNVUgICAvKiE8IFNlbmRzIGFuIGFkZHJlc3NlZCBjYXJkIGludG8gdGhlIGluYWN0aXZlIHN0YXRlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU0RNTUNfQ01EX1NFVF9CTE9DS0xFTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNlUgICAvKiE8IFNldHMgdGhlIGJsb2NrIGxlbmd0aCAoaW4gYnl0ZXMgZm9yIFNEU0MpIGZvciBhbGwgZm9sbG93aW5nIGJsb2NrIGNvbW1hbmRzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmVhZCwgd3JpdGUsIGxvY2spLiBEZWZhdWx0IGJsb2NrIGxlbmd0aCBpcyBmaXhlZCB0byA1MTIgQnl0ZXMuIE5vdCBlZmZlY3RpdmUgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgU0RIUyBhbmQgU0RYQy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIFNETU1DX0NNRF9SRUFEX1NJTkdMRV9CTE9DSyAgICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMTcpICAvKiE8IFJlYWRzIHNpbmdsZSBibG9jayBvZiBzaXplIHNlbGVjdGVkIGJ5IFNFVF9CTE9DS0xFTiBpbiBjYXNlIG9mIFNEU0MsIGFuZCBhIGJsb2NrIG9mIAorI2RlZmluZSBTRE1NQ19DTURfUkVBRF9TSU5HTEVfQkxPQ0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3VSAgIC8qITwgUmVhZHMgc2luZ2xlIGJsb2NrIG9mIHNpemUgc2VsZWN0ZWQgYnkgU0VUX0JMT0NLTEVOIGluIGNhc2Ugb2YgU0RTQywgYW5kIGEgYmxvY2sgb2YKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpeGVkIDUxMiBieXRlcyBpbiBjYXNlIG9mIFNESEMgYW5kIFNEWEMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgU0RNTUNfQ01EX1JFQURfTVVMVF9CTE9DSyAgICAgICAgICAgICAgICAgICAgICgodWludDhfdCkxOCkgIC8qITwgQ29udGludW91c2x5IHRyYW5zZmVycyBkYXRhIGJsb2NrcyBmcm9tIGNhcmQgdG8gaG9zdCB1bnRpbCBpbnRlcnJ1cHRlZCBieSAKKyNkZWZpbmUgU0RNTUNfQ01EX1JFQURfTVVMVF9CTE9DSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOFUgICAvKiE8IENvbnRpbnVvdXNseSB0cmFuc2ZlcnMgZGF0YSBibG9ja3MgZnJvbSBjYXJkIHRvIGhvc3QgdW50aWwgaW50ZXJydXB0ZWQgYnkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNUT1BfVFJBTlNNSVNTSU9OIGNvbW1hbmQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgU0RNTUNfQ01EX0hTX0JVU1RFU1RfV1JJVEUgICAgICAgICAgICAgICAgICAgICgodWludDhfdCkxOSkgIC8qITwgNjQgYnl0ZXMgdHVuaW5nIHBhdHRlcm4gaXMgc2VudCBmb3IgU0RSNTAgYW5kIFNEUjEwNC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBTRE1NQ19DTURfV1JJVEVfREFUX1VOVElMX1NUT1AgICAgICAgICAgICAgICAgKCh1aW50OF90KTIwKSAgLyohPCBTcGVlZCBjbGFzcyBjb250cm9sIGNvbW1hbmQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIFNETU1DX0NNRF9TRVRfQkxPQ0tfQ09VTlQgICAgICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMjMpICAvKiE8IFNwZWNpZnkgYmxvY2sgY291bnQgZm9yIENNRDE4IGFuZCBDTUQyNS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgU0RNTUNfQ01EX1dSSVRFX1NJTkdMRV9CTE9DSyAgICAgICAgICAgICAgICAgICgodWludDhfdCkyNCkgIC8qITwgV3JpdGVzIHNpbmdsZSBibG9jayBvZiBzaXplIHNlbGVjdGVkIGJ5IFNFVF9CTE9DS0xFTiBpbiBjYXNlIG9mIFNEU0MsIGFuZCBhIGJsb2NrIG9mIAorI2RlZmluZSBTRE1NQ19DTURfSFNfQlVTVEVTVF9XUklURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5VSAgIC8qITwgNjQgYnl0ZXMgdHVuaW5nIHBhdHRlcm4gaXMgc2VudCBmb3IgU0RSNTAgYW5kIFNEUjEwNC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTRE1NQ19DTURfV1JJVEVfREFUX1VOVElMX1NUT1AgICAgICAgICAgICAgICAgICAgICAgICAgIDIwVSAgIC8qITwgU3BlZWQgY2xhc3MgY29udHJvbCBjb21tYW5kLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTRE1NQ19DTURfU0VUX0JMT0NLX0NPVU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzVSAgIC8qITwgU3BlY2lmeSBibG9jayBjb3VudCBmb3IgQ01EMTggYW5kIENNRDI1LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTRE1NQ19DTURfV1JJVEVfU0lOR0xFX0JMT0NLICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0VSAgIC8qITwgV3JpdGVzIHNpbmdsZSBibG9jayBvZiBzaXplIHNlbGVjdGVkIGJ5IFNFVF9CTE9DS0xFTiBpbiBjYXNlIG9mIFNEU0MsIGFuZCBhIGJsb2NrIG9mCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXhlZCA1MTIgYnl0ZXMgaW4gY2FzZSBvZiBTREhDIGFuZCBTRFhDLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIFNETU1DX0NNRF9XUklURV9NVUxUX0JMT0NLICAgICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMjUpICAvKiE8IENvbnRpbnVvdXNseSB3cml0ZXMgYmxvY2tzIG9mIGRhdGEgdW50aWwgYSBTVE9QX1RSQU5TTUlTU0lPTiBmb2xsb3dzLiAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgU0RNTUNfQ01EX1BST0dfQ0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDhfdCkyNikgIC8qITwgUmVzZXJ2ZWQgZm9yIG1hbnVmYWN0dXJlcnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBTRE1NQ19DTURfUFJPR19DU0QgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50OF90KTI3KSAgLyohPCBQcm9ncmFtbWluZyBvZiB0aGUgcHJvZ3JhbW1hYmxlIGJpdHMgb2YgdGhlIENTRC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIFNETU1DX0NNRF9TRVRfV1JJVEVfUFJPVCAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMjgpICAvKiE8IFNldHMgdGhlIHdyaXRlIHByb3RlY3Rpb24gYml0IG9mIHRoZSBhZGRyZXNzZWQgZ3JvdXAuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgU0RNTUNfQ01EX0NMUl9XUklURV9QUk9UICAgICAgICAgICAgICAgICAgICAgICgodWludDhfdCkyOSkgIC8qITwgQ2xlYXJzIHRoZSB3cml0ZSBwcm90ZWN0aW9uIGJpdCBvZiB0aGUgYWRkcmVzc2VkIGdyb3VwLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBTRE1NQ19DTURfU0VORF9XUklURV9QUk9UICAgICAgICAgICAgICAgICAgICAgKCh1aW50OF90KTMwKSAgLyohPCBBc2tzIHRoZSBjYXJkIHRvIHNlbmQgdGhlIHN0YXR1cyBvZiB0aGUgd3JpdGUgcHJvdGVjdGlvbiBiaXRzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIFNETU1DX0NNRF9TRF9FUkFTRV9HUlBfU1RBUlQgICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMzIpICAvKiE8IFNldHMgdGhlIGFkZHJlc3Mgb2YgdGhlIGZpcnN0IHdyaXRlIGJsb2NrIHRvIGJlIGVyYXNlZC4gKEZvciBTRCBjYXJkIG9ubHkpLiAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgU0RNTUNfQ01EX1NEX0VSQVNFX0dSUF9FTkQgICAgICAgICAgICAgICAgICAgICgodWludDhfdCkzMykgIC8qITwgU2V0cyB0aGUgYWRkcmVzcyBvZiB0aGUgbGFzdCB3cml0ZSBibG9jayBvZiB0aGUgY29udGludW91cyByYW5nZSB0byBiZSBlcmFzZWQuICAgICAgICAgICAqLwotI2RlZmluZSBTRE1NQ19DTURfRVJBU0VfR1JQX1NUQVJUICAgICAgICAgICAgICAgICAgICAgKCh1aW50OF90KTM1KSAgLyohPCBTZXRzIHRoZSBhZGRyZXNzIG9mIHRoZSBmaXJzdCB3cml0ZSBibG9jayB0byBiZSBlcmFzZWQuIFJlc2VydmVkIGZvciBlYWNoIGNvbW1hbmQgCisjZGVmaW5lIFNETU1DX0NNRF9XUklURV9NVUxUX0JMT0NLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjVVICAgLyohPCBDb250aW51b3VzbHkgd3JpdGVzIGJsb2NrcyBvZiBkYXRhIHVudGlsIGEgU1RPUF9UUkFOU01JU1NJT04gZm9sbG93cy4gICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNETU1DX0NNRF9QUk9HX0NJRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjZVICAgLyohPCBSZXNlcnZlZCBmb3IgbWFudWZhY3R1cmVycy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNETU1DX0NNRF9QUk9HX0NTRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjdVICAgLyohPCBQcm9ncmFtbWluZyBvZiB0aGUgcHJvZ3JhbW1hYmxlIGJpdHMgb2YgdGhlIENTRC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNETU1DX0NNRF9TRVRfV1JJVEVfUFJPVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjhVICAgLyohPCBTZXRzIHRoZSB3cml0ZSBwcm90ZWN0aW9uIGJpdCBvZiB0aGUgYWRkcmVzc2VkIGdyb3VwLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNETU1DX0NNRF9DTFJfV1JJVEVfUFJPVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjlVICAgLyohPCBDbGVhcnMgdGhlIHdyaXRlIHByb3RlY3Rpb24gYml0IG9mIHRoZSBhZGRyZXNzZWQgZ3JvdXAuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNETU1DX0NNRF9TRU5EX1dSSVRFX1BST1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzBVICAgLyohPCBBc2tzIHRoZSBjYXJkIHRvIHNlbmQgdGhlIHN0YXR1cyBvZiB0aGUgd3JpdGUgcHJvdGVjdGlvbiBiaXRzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNETU1DX0NNRF9TRF9FUkFTRV9HUlBfU1RBUlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzJVICAgLyohPCBTZXRzIHRoZSBhZGRyZXNzIG9mIHRoZSBmaXJzdCB3cml0ZSBibG9jayB0byBiZSBlcmFzZWQuIChGb3IgU0QgY2FyZCBvbmx5KS4gICAgICAgICAgICAgICovCisjZGVmaW5lIFNETU1DX0NNRF9TRF9FUkFTRV9HUlBfRU5EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzNVICAgLyohPCBTZXRzIHRoZSBhZGRyZXNzIG9mIHRoZSBsYXN0IHdyaXRlIGJsb2NrIG9mIHRoZSBjb250aW51b3VzIHJhbmdlIHRvIGJlIGVyYXNlZC4gICAgICAgICAgICovCisjZGVmaW5lIFNETU1DX0NNRF9FUkFTRV9HUlBfU1RBUlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzVVICAgLyohPCBTZXRzIHRoZSBhZGRyZXNzIG9mIHRoZSBmaXJzdCB3cml0ZSBibG9jayB0byBiZSBlcmFzZWQuIFJlc2VydmVkIGZvciBlYWNoIGNvbW1hbmQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbSBzZXQgYnkgc3dpdGNoIGZ1bmN0aW9uIGNvbW1hbmQgKENNRDYpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgU0RNTUNfQ01EX0VSQVNFX0dSUF9FTkQgICAgICAgICAgICAgICAgICAgICAgICgodWludDhfdCkzNikgIC8qITwgU2V0cyB0aGUgYWRkcmVzcyBvZiB0aGUgbGFzdCB3cml0ZSBibG9jayBvZiB0aGUgY29udGludW91cyByYW5nZSB0byBiZSBlcmFzZWQuIAorI2RlZmluZSBTRE1NQ19DTURfRVJBU0VfR1JQX0VORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM2VSAgIC8qITwgU2V0cyB0aGUgYWRkcmVzcyBvZiB0aGUgbGFzdCB3cml0ZSBibG9jayBvZiB0aGUgY29udGludW91cyByYW5nZSB0byBiZSBlcmFzZWQuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZCBmb3IgZWFjaCBjb21tYW5kIHN5c3RlbSBzZXQgYnkgc3dpdGNoIGZ1bmN0aW9uIGNvbW1hbmQgKENNRDYpLiAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIFNETU1DX0NNRF9FUkFTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMzgpICAvKiE8IFJlc2VydmVkIGZvciBTRCBzZWN1cml0eSBhcHBsaWNhdGlvbnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgU0RNTUNfQ01EX0ZBU1RfSU8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDhfdCkzOSkgIC8qITwgU0QgY2FyZCBkb2Vzbid0IHN1cHBvcnQgaXQgKFJlc2VydmVkKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBTRE1NQ19DTURfR09fSVJRX1NUQVRFICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50OF90KTQwKSAgLyohPCBTRCBjYXJkIGRvZXNuJ3Qgc3VwcG9ydCBpdCAoUmVzZXJ2ZWQpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIFNETU1DX0NNRF9MT0NLX1VOTE9DSyAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpNDIpICAvKiE8IFNldHMvcmVzZXRzIHRoZSBwYXNzd29yZCBvciBsb2NrL3VubG9jayB0aGUgY2FyZC4gVGhlIHNpemUgb2YgdGhlIGRhdGEgYmxvY2sgaXMgc2V0IGJ5IAorI2RlZmluZSBTRE1NQ19DTURfRVJBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM4VSAgIC8qITwgUmVzZXJ2ZWQgZm9yIFNEIHNlY3VyaXR5IGFwcGxpY2F0aW9ucy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTRE1NQ19DTURfRkFTVF9JTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM5VSAgIC8qITwgU0QgY2FyZCBkb2Vzbid0IHN1cHBvcnQgaXQgKFJlc2VydmVkKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTRE1NQ19DTURfR09fSVJRX1NUQVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQwVSAgIC8qITwgU0QgY2FyZCBkb2Vzbid0IHN1cHBvcnQgaXQgKFJlc2VydmVkKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTRE1NQ19DTURfTE9DS19VTkxPQ0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQyVSAgIC8qITwgU2V0cy9yZXNldHMgdGhlIHBhc3N3b3JkIG9yIGxvY2svdW5sb2NrIHRoZSBjYXJkLiBUaGUgc2l6ZSBvZiB0aGUgZGF0YSBibG9jayBpcyBzZXQgYnkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBTRVRfQkxPQ0tfTEVOIGNvbW1hbmQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgU0RNTUNfQ01EX0FQUF9DTUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDhfdCk1NSkgIC8qITwgSW5kaWNhdGVzIHRvIHRoZSBjYXJkIHRoYXQgdGhlIG5leHQgY29tbWFuZCBpcyBhbiBhcHBsaWNhdGlvbiBzcGVjaWZpYyBjb21tYW5kIHJhdGhlciAKKyNkZWZpbmUgU0RNTUNfQ01EX0FQUF9DTUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1NVUgICAvKiE8IEluZGljYXRlcyB0byB0aGUgY2FyZCB0aGF0IHRoZSBuZXh0IGNvbW1hbmQgaXMgYW4gYXBwbGljYXRpb24gc3BlY2lmaWMgY29tbWFuZCByYXRoZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYW4gYSBzdGFuZGFyZCBjb21tYW5kLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgU0RNTUNfQ01EX0dFTl9DTUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDhfdCk1NikgIC8qITwgVXNlZCBlaXRoZXIgdG8gdHJhbnNmZXIgYSBkYXRhIGJsb2NrIHRvIHRoZSBjYXJkIG9yIHRvIGdldCBhIGRhdGEgYmxvY2sgZnJvbSB0aGUgY2FyZCAKKyNkZWZpbmUgU0RNTUNfQ01EX0dFTl9DTUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1NlUgICAvKiE8IFVzZWQgZWl0aGVyIHRvIHRyYW5zZmVyIGEgZGF0YSBibG9jayB0byB0aGUgY2FyZCBvciB0byBnZXQgYSBkYXRhIGJsb2NrIGZyb20gdGhlIGNhcmQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBnZW5lcmFsIHB1cnBvc2UvYXBwbGljYXRpb24gc3BlY2lmaWMgY29tbWFuZHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgU0RNTUNfQ01EX05PX0NNRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDhfdCk2NCkgIC8qITwgTm8gY29tbWFuZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAKKyNkZWZpbmUgU0RNTUNfQ01EX05PX0NNRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2NFUgICAvKiE8IE5vIGNvbW1hbmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAogLyoqIAogICAqIEBicmllZiBGb2xsb3dpbmcgY29tbWFuZHMgYXJlIFNEIENhcmQgU3BlY2lmaWMgY29tbWFuZHMuCiAgICogICAgICAgIFNETU1DX0FQUF9DTUQgc2hvdWxkIGJlIHNlbnQgYmVmb3JlIHNlbmRpbmcgdGhlc2UgY29tbWFuZHMuIAogICAqLwotI2RlZmluZSBTRE1NQ19DTURfQVBQX1NEX1NFVF9CVVNXSURUSCAgICAgICAgICAgICAgICAgKCh1aW50OF90KTYpICAgLyohPCAoQUNNRDYpIERlZmluZXMgdGhlIGRhdGEgYnVzIHdpZHRoIHRvIGJlIHVzZWQgZm9yIGRhdGEgdHJhbnNmZXIuIFRoZSBhbGxvd2VkIGRhdGEgYnVzIAorI2RlZmluZSBTRE1NQ19DTURfQVBQX1NEX1NFVF9CVVNXSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDZVICAgIC8qITwgKEFDTUQ2KSBEZWZpbmVzIHRoZSBkYXRhIGJ1cyB3aWR0aCB0byBiZSB1c2VkIGZvciBkYXRhIHRyYW5zZmVyLiBUaGUgYWxsb3dlZCBkYXRhIGJ1cwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRocyBhcmUgZ2l2ZW4gaW4gU0NSIHJlZ2lzdGVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBTRE1NQ19DTURfU0RfQVBQX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50OF90KTEzKSAgLyohPCAoQUNNRDEzKSBTZW5kcyB0aGUgU0Qgc3RhdHVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIFNETU1DX0NNRF9TRF9BUFBfU0VORF9OVU1fV1JJVEVfQkxPQ0tTICAgICAgICAoKHVpbnQ4X3QpMjIpICAvKiE8IChBQ01EMjIpIFNlbmRzIHRoZSBudW1iZXIgb2YgdGhlIHdyaXR0ZW4gKHdpdGhvdXQgZXJyb3JzKSB3cml0ZSBibG9ja3MuIFJlc3BvbmRzIHdpdGggCisjZGVmaW5lIFNETU1DX0NNRF9TRF9BUFBfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTNVICAgLyohPCAoQUNNRDEzKSBTZW5kcyB0aGUgU0Qgc3RhdHVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNETU1DX0NNRF9TRF9BUFBfU0VORF9OVU1fV1JJVEVfQkxPQ0tTICAgICAgICAgICAgICAgICAgMjJVICAgLyohPCAoQUNNRDIyKSBTZW5kcyB0aGUgbnVtYmVyIG9mIHRoZSB3cml0dGVuICh3aXRob3V0IGVycm9ycykgd3JpdGUgYmxvY2tzLiBSZXNwb25kcyB3aXRoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMmJpdCtDUkMgZGF0YSBibG9jay4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIFNETU1DX0NNRF9TRF9BUFBfT1BfQ09ORCAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpNDEpICAvKiE8IChBQ01ENDEpIFNlbmRzIGhvc3QgY2FwYWNpdHkgc3VwcG9ydCBpbmZvcm1hdGlvbiAoSENTKSBhbmQgYXNrcyB0aGUgYWNjZXNzZWQgY2FyZCB0byAKKyNkZWZpbmUgU0RNTUNfQ01EX1NEX0FQUF9PUF9DT05EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0MVUgICAvKiE8IChBQ01ENDEpIFNlbmRzIGhvc3QgY2FwYWNpdHkgc3VwcG9ydCBpbmZvcm1hdGlvbiAoSENTKSBhbmQgYXNrcyB0aGUgYWNjZXNzZWQgY2FyZCB0bwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VuZCBpdHMgb3BlcmF0aW5nIGNvbmRpdGlvbiByZWdpc3RlciAoT0NSKSBjb250ZW50IGluIHRoZSByZXNwb25zZSBvbiB0aGUgQ01EIGxpbmUuICAgICAqLwotI2RlZmluZSBTRE1NQ19DTURfU0RfQVBQX1NFVF9DTFJfQ0FSRF9ERVRFQ1QgICAgICAgICAgKCh1aW50OF90KTQyKSAgLyohPCAoQUNNRDQyKSBDb25uZWN0L0Rpc2Nvbm5lY3QgdGhlIDUwIEtPaG0gcHVsbC11cCByZXNpc3RvciBvbiBDRC9EQVQzIChwaW4gMSkgb2YgdGhlIGNhcmQgICovCi0jZGVmaW5lIFNETU1DX0NNRF9TRF9BUFBfU0VORF9TQ1IgICAgICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpNTEpICAvKiE8IFJlYWRzIHRoZSBTRCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIChTQ1IpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgU0RNTUNfQ01EX1NETU1DX1JXX0RJUkVDVCAgICAgICAgICAgICAgICAgICAgICgodWludDhfdCk1MikgIC8qITwgRm9yIFNEIEkvTyBjYXJkIG9ubHksIHJlc2VydmVkIGZvciBzZWN1cml0eSBzcGVjaWZpY2F0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBTRE1NQ19DTURfU0RNTUNfUldfRVhURU5ERUQgICAgICAgICAgICAgICAgICAgKCh1aW50OF90KTUzKSAgLyohPCBGb3IgU0QgSS9PIGNhcmQgb25seSwgcmVzZXJ2ZWQgZm9yIHNlY3VyaXR5IHNwZWNpZmljYXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNETU1DX0NNRF9TRF9BUFBfU0VUX0NMUl9DQVJEX0RFVEVDVCAgICAgICAgICAgICAgICAgICAgNDJVICAgLyohPCAoQUNNRDQyKSBDb25uZWN0L0Rpc2Nvbm5lY3QgdGhlIDUwIEtPaG0gcHVsbC11cCByZXNpc3RvciBvbiBDRC9EQVQzIChwaW4gMSkgb2YgdGhlIGNhcmQgICovCisjZGVmaW5lIFNETU1DX0NNRF9TRF9BUFBfU0VORF9TQ1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTFVICAgLyohPCBSZWFkcyB0aGUgU0QgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAoU0NSKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNETU1DX0NNRF9TRE1NQ19SV19ESVJFQ1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTJVICAgLyohPCBGb3IgU0QgSS9PIGNhcmQgb25seSwgcmVzZXJ2ZWQgZm9yIHNlY3VyaXR5IHNwZWNpZmljYXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNETU1DX0NNRF9TRE1NQ19SV19FWFRFTkRFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTNVICAgLyohPCBGb3IgU0QgSS9PIGNhcmQgb25seSwgcmVzZXJ2ZWQgZm9yIHNlY3VyaXR5IHNwZWNpZmljYXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKIC8qKiAKICAgKiBAYnJpZWYgRm9sbG93aW5nIGNvbW1hbmRzIGFyZSBTRCBDYXJkIFNwZWNpZmljIHNlY3VyaXR5IGNvbW1hbmRzLgogICAqICAgICAgICBTRE1NQ19DTURfQVBQX0NNRCBzaG91bGQgYmUgc2VudCBiZWZvcmUgc2VuZGluZyB0aGVzZSBjb21tYW5kcy4gCiAgICovCi0jZGVmaW5lIFNETU1DX0NNRF9TRF9BUFBfR0VUX01LQiAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpNDMpCi0jZGVmaW5lIFNETU1DX0NNRF9TRF9BUFBfR0VUX01JRCAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpNDQpCi0jZGVmaW5lIFNETU1DX0NNRF9TRF9BUFBfU0VUX0NFUl9STjEgICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpNDUpCi0jZGVmaW5lIFNETU1DX0NNRF9TRF9BUFBfR0VUX0NFUl9STjIgICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpNDYpCi0jZGVmaW5lIFNETU1DX0NNRF9TRF9BUFBfU0VUX0NFUl9SRVMyICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpNDcpCi0jZGVmaW5lIFNETU1DX0NNRF9TRF9BUFBfR0VUX0NFUl9SRVMxICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpNDgpCi0jZGVmaW5lIFNETU1DX0NNRF9TRF9BUFBfU0VDVVJFX1JFQURfTVVMVElQTEVfQkxPQ0sgICAoKHVpbnQ4X3QpMTgpCi0jZGVmaW5lIFNETU1DX0NNRF9TRF9BUFBfU0VDVVJFX1dSSVRFX01VTFRJUExFX0JMT0NLICAoKHVpbnQ4X3QpMjUpCi0jZGVmaW5lIFNETU1DX0NNRF9TRF9BUFBfU0VDVVJFX0VSQVNFICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMzgpCi0jZGVmaW5lIFNETU1DX0NNRF9TRF9BUFBfQ0hBTkdFX1NFQ1VSRV9BUkVBICAgICAgICAgICAoKHVpbnQ4X3QpNDkpCi0jZGVmaW5lIFNETU1DX0NNRF9TRF9BUFBfU0VDVVJFX1dSSVRFX01LQiAgICAgICAgICAgICAoKHVpbnQ4X3QpNDgpCisjZGVmaW5lIFNETU1DX0NNRF9TRF9BUFBfR0VUX01LQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDNVCisjZGVmaW5lIFNETU1DX0NNRF9TRF9BUFBfR0VUX01JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDRVCisjZGVmaW5lIFNETU1DX0NNRF9TRF9BUFBfU0VUX0NFUl9STjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDVVCisjZGVmaW5lIFNETU1DX0NNRF9TRF9BUFBfR0VUX0NFUl9STjIgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDZVCisjZGVmaW5lIFNETU1DX0NNRF9TRF9BUFBfU0VUX0NFUl9SRVMyICAgICAgICAgICAgICAgICAgICAgICAgICAgNDdVCisjZGVmaW5lIFNETU1DX0NNRF9TRF9BUFBfR0VUX0NFUl9SRVMxICAgICAgICAgICAgICAgICAgICAgICAgICAgNDhVCisjZGVmaW5lIFNETU1DX0NNRF9TRF9BUFBfU0VDVVJFX1JFQURfTVVMVElQTEVfQkxPQ0sgICAgICAgICAgICAgMThVCisjZGVmaW5lIFNETU1DX0NNRF9TRF9BUFBfU0VDVVJFX1dSSVRFX01VTFRJUExFX0JMT0NLICAgICAgICAgICAgMjVVCisjZGVmaW5lIFNETU1DX0NNRF9TRF9BUFBfU0VDVVJFX0VSQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgMzhVCisjZGVmaW5lIFNETU1DX0NNRF9TRF9BUFBfQ0hBTkdFX1NFQ1VSRV9BUkVBICAgICAgICAgICAgICAgICAgICAgNDlVCisjZGVmaW5lIFNETU1DX0NNRF9TRF9BUFBfU0VDVVJFX1dSSVRFX01LQiAgICAgICAgICAgICAgICAgICAgICAgNDhVCiAKIC8qKiAKICAgKiBAYnJpZWYgIE1hc2tzIGZvciBlcnJvcnMgQ2FyZCBTdGF0dXMgUjEgKE9DUiBSZWdpc3RlcikgCiAgICovCi0jZGVmaW5lIFNETU1DX09DUl9BRERSX09VVF9PRl9SQU5HRSAgICAgICAgMHg4MDAwMDAwMFUKLSNkZWZpbmUgU0RNTUNfT0NSX0FERFJfTUlTQUxJR05FRCAgICAgICAgICAweDQwMDAwMDAwVQotI2RlZmluZSBTRE1NQ19PQ1JfQkxPQ0tfTEVOX0VSUiAgICAgICAgICAgIDB4MjAwMDAwMDBVCi0jZGVmaW5lIFNETU1DX09DUl9FUkFTRV9TRVFfRVJSICAgICAgICAgICAgMHgxMDAwMDAwMFUKLSNkZWZpbmUgU0RNTUNfT0NSX0JBRF9FUkFTRV9QQVJBTSAgICAgICAgICAweDA4MDAwMDAwVQotI2RlZmluZSBTRE1NQ19PQ1JfV1JJVEVfUFJPVF9WSU9MQVRJT04gICAgIDB4MDQwMDAwMDBVCi0jZGVmaW5lIFNETU1DX09DUl9MT0NLX1VOTE9DS19GQUlMRUQgICAgICAgMHgwMTAwMDAwMFUKLSNkZWZpbmUgU0RNTUNfT0NSX0NPTV9DUkNfRkFJTEVEICAgICAgICAgICAweDAwODAwMDAwVQotI2RlZmluZSBTRE1NQ19PQ1JfSUxMRUdBTF9DTUQgICAgICAgICAgICAgIDB4MDA0MDAwMDBVCi0jZGVmaW5lIFNETU1DX09DUl9DQVJEX0VDQ19GQUlMRUQgICAgICAgICAgMHgwMDIwMDAwMFUKLSNkZWZpbmUgU0RNTUNfT0NSX0NDX0VSUk9SICAgICAgICAgICAgICAgICAweDAwMTAwMDAwVQotI2RlZmluZSBTRE1NQ19PQ1JfR0VORVJBTF9VTktOT1dOX0VSUk9SICAgIDB4MDAwODAwMDBVCi0jZGVmaW5lIFNETU1DX09DUl9TVFJFQU1fUkVBRF9VTkRFUlJVTiAgICAgMHgwMDA0MDAwMFUKLSNkZWZpbmUgU0RNTUNfT0NSX1NUUkVBTV9XUklURV9PVkVSUlVOICAgICAweDAwMDIwMDAwVQotI2RlZmluZSBTRE1NQ19PQ1JfQ0lEX0NTRF9PVkVSV1JJVEUgICAgICAgIDB4MDAwMTAwMDBVCi0jZGVmaW5lIFNETU1DX09DUl9XUF9FUkFTRV9TS0lQICAgICAgICAgICAgMHgwMDAwODAwMFUKLSNkZWZpbmUgU0RNTUNfT0NSX0NBUkRfRUNDX0RJU0FCTEVEICAgICAgICAweDAwMDA0MDAwVQotI2RlZmluZSBTRE1NQ19PQ1JfRVJBU0VfUkVTRVQgICAgICAgICAgICAgIDB4MDAwMDIwMDBVCi0jZGVmaW5lIFNETU1DX09DUl9BS0VfU0VRX0VSUk9SICAgICAgICAgICAgMHgwMDAwMDAwOFUKLSNkZWZpbmUgU0RNTUNfT0NSX0VSUk9SQklUUyAgICAgICAgICAgICAgICAweEZERkZFMDA4VQorI2RlZmluZSBTRE1NQ19PQ1JfQUREUl9PVVRfT0ZfUkFOR0UgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMFUKKyNkZWZpbmUgU0RNTUNfT0NSX0FERFJfTUlTQUxJR05FRCAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDBVCisjZGVmaW5lIFNETU1DX09DUl9CTE9DS19MRU5fRVJSICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwVQorI2RlZmluZSBTRE1NQ19PQ1JfRVJBU0VfU0VRX0VSUiAgICAgICAgICAgICAgICAgICAgICAgMHgxMDAwMDAwMFUKKyNkZWZpbmUgU0RNTUNfT0NSX0JBRF9FUkFTRV9QQVJBTSAgICAgICAgICAgICAgICAgICAgIDB4MDgwMDAwMDBVCisjZGVmaW5lIFNETU1DX09DUl9XUklURV9QUk9UX1ZJT0xBVElPTiAgICAgICAgICAgICAgICAweDA0MDAwMDAwVQorI2RlZmluZSBTRE1NQ19PQ1JfTE9DS19VTkxPQ0tfRkFJTEVEICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMFUKKyNkZWZpbmUgU0RNTUNfT0NSX0NPTV9DUkNfRkFJTEVEICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MDAwMDBVCisjZGVmaW5lIFNETU1DX09DUl9JTExFR0FMX0NNRCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwMDAwVQorI2RlZmluZSBTRE1NQ19PQ1JfQ0FSRF9FQ0NfRkFJTEVEICAgICAgICAgICAgICAgICAgICAgMHgwMDIwMDAwMFUKKyNkZWZpbmUgU0RNTUNfT0NSX0NDX0VSUk9SICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMDAwMDBVCisjZGVmaW5lIFNETU1DX09DUl9HRU5FUkFMX1VOS05PV05fRVJST1IgICAgICAgICAgICAgICAweDAwMDgwMDAwVQorI2RlZmluZSBTRE1NQ19PQ1JfU1RSRUFNX1JFQURfVU5ERVJSVU4gICAgICAgICAgICAgICAgMHgwMDA0MDAwMFUKKyNkZWZpbmUgU0RNTUNfT0NSX1NUUkVBTV9XUklURV9PVkVSUlVOICAgICAgICAgICAgICAgIDB4MDAwMjAwMDBVCisjZGVmaW5lIFNETU1DX09DUl9DSURfQ1NEX09WRVJXUklURSAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwVQorI2RlZmluZSBTRE1NQ19PQ1JfV1BfRVJBU0VfU0tJUCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMFUKKyNkZWZpbmUgU0RNTUNfT0NSX0NBUkRfRUNDX0RJU0FCTEVEICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDBVCisjZGVmaW5lIFNETU1DX09DUl9FUkFTRV9SRVNFVCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwVQorI2RlZmluZSBTRE1NQ19PQ1JfQUtFX1NFUV9FUlJPUiAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOFUKKyNkZWZpbmUgU0RNTUNfT0NSX0VSUk9SQklUUyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkRGRkUwMDhVCiAKIC8qKiAKICAgKiBAYnJpZWYgIE1hc2tzIGZvciBSNiBSZXNwb25zZSAKICAgKi8KLSNkZWZpbmUgU0RNTUNfUjZfR0VORVJBTF9VTktOT1dOX0VSUk9SICAgICAweDAwMDAyMDAwVQotI2RlZmluZSBTRE1NQ19SNl9JTExFR0FMX0NNRCAgICAgICAgICAgICAgIDB4MDAwMDQwMDBVCi0jZGVmaW5lIFNETU1DX1I2X0NPTV9DUkNfRkFJTEVEICAgICAgICAgICAgMHgwMDAwODAwMFUKKyNkZWZpbmUgU0RNTUNfUjZfR0VORVJBTF9VTktOT1dOX0VSUk9SICAgICAgICAgICAgICAgIDB4MDAwMDIwMDBVCisjZGVmaW5lIFNETU1DX1I2X0lMTEVHQUxfQ01EICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwVQorI2RlZmluZSBTRE1NQ19SNl9DT01fQ1JDX0ZBSUxFRCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMFUKIAotI2RlZmluZSBTRE1NQ19WT0xUQUdFX1dJTkRPV19TRCAgICAgICAgICAgIDB4ODAxMDAwMDBVCi0jZGVmaW5lIFNETU1DX0hJR0hfQ0FQQUNJVFkgICAgICAgICAgICAgICAgMHg0MDAwMDAwMFUKLSNkZWZpbmUgU0RNTUNfU1REX0NBUEFDSVRZICAgICAgICAgICAgICAgICAweDAwMDAwMDAwVQotI2RlZmluZSBTRE1NQ19DSEVDS19QQVRURVJOICAgICAgICAgICAgICAgIDB4MDAwMDAxQUFVCisjZGVmaW5lIFNETU1DX1ZPTFRBR0VfV0lORE9XX1NEICAgICAgICAgICAgICAgICAgICAgICAweDgwMTAwMDAwVQorI2RlZmluZSBTRE1NQ19ISUdIX0NBUEFDSVRZICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMFUKKyNkZWZpbmUgU0RNTUNfU1REX0NBUEFDSVRZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDBVCisjZGVmaW5lIFNETU1DX0NIRUNLX1BBVFRFUk4gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMUFBVQorI2RlZmluZSBTRF9TV0lUQ0hfMV84Vl9DQVBBQ0lUWSAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMFUKIAotI2RlZmluZSBTRE1NQ19NQVhfVk9MVF9UUklBTCAgICAgICAgICAgICAgIDB4MDAwMEZGRkZVCi0gICAgCi0jZGVmaW5lIFNETU1DX01BWF9UUklBTCAgICAgICAgICAgICAgIDB4MDAwMEZGRkZVCi0gICAgCi0jZGVmaW5lIFNETU1DX0FMTFpFUk8gICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMFUKKyNkZWZpbmUgU0RNTUNfTUFYX1ZPTFRfVFJJQUwgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGRkZVCiAKLSNkZWZpbmUgU0RNTUNfV0lERV9CVVNfU1VQUE9SVCAgICAgICAgICAgICAweDAwMDQwMDAwVQotI2RlZmluZSBTRE1NQ19TSU5HTEVfQlVTX1NVUFBPUlQgICAgICAgICAgIDB4MDAwMTAwMDBVCi0jZGVmaW5lIFNETU1DX0NBUkRfTE9DS0VEICAgICAgICAgICAgICAgICAgMHgwMjAwMDAwMFUKKyNkZWZpbmUgU0RNTUNfTUFYX1RSSUFMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGRkZVCiAKLSNkZWZpbmUgU0RNTUNfREFUQVRJTUVPVVQgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGVQorI2RlZmluZSBTRE1NQ19BTExaRVJPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMFUKIAotI2RlZmluZSBTRE1NQ18wVE83QklUUyAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRkZVCi0jZGVmaW5lIFNETU1DXzhUTzE1QklUUyAgICAgICAgICAgICAgICAgICAgMHgwMDAwRkYwMFUKLSNkZWZpbmUgU0RNTUNfMTZUTzIzQklUUyAgICAgICAgICAgICAgICAgICAweDAwRkYwMDAwVQotI2RlZmluZSBTRE1NQ18yNFRPMzFCSVRTICAgICAgICAgICAgICAgICAgIDB4RkYwMDAwMDBVCi0jZGVmaW5lIFNETU1DX01BWF9EQVRBX0xFTkdUSCAgICAgICAgICAgICAgMHgwMUZGRkZGRlUKKyNkZWZpbmUgU0RNTUNfV0lERV9CVVNfU1VQUE9SVCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDBVCisjZGVmaW5lIFNETU1DX1NJTkdMRV9CVVNfU1VQUE9SVCAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwVQorI2RlZmluZSBTRE1NQ19DQVJEX0xPQ0tFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwMDAwMFUKIAotI2RlZmluZSBTRE1NQ19IQUxGRklGTyAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDhVCi0jZGVmaW5lIFNETU1DX0hBTEZGSUZPQllURVMgICAgICAgICAgICAgICAgMHgwMDAwMDAyMFUKKyNkZWZpbmUgU0RNTUNfREFUQVRJTUVPVVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkZVCisKKyNkZWZpbmUgU0RNTUNfMFRPN0JJVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRkZVCisjZGVmaW5lIFNETU1DXzhUTzE1QklUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGRjAwVQorI2RlZmluZSBTRE1NQ18xNlRPMjNCSVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMEZGMDAwMFUKKyNkZWZpbmUgU0RNTUNfMjRUTzMxQklUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkYwMDAwMDBVCisjZGVmaW5lIFNETU1DX01BWF9EQVRBX0xFTkdUSCAgICAgICAgICAgICAgICAgICAgICAgICAweDAxRkZGRkZGVQorCisjZGVmaW5lIFNETU1DX0hBTEZGSUZPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4VQorI2RlZmluZSBTRE1NQ19IQUxGRklGT0JZVEVTICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMFUKIAogLyoqIAogICAqIEBicmllZiAgQ29tbWFuZCBDbGFzcyBzdXBwb3J0ZWQKICAgKi8KLSNkZWZpbmUgU0RJT19DQ0NDX0VSQVNFICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjBVCisjZGVmaW5lIFNESU9fQ0NDQ19FUkFTRSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMFUKIAotI2RlZmluZSBTRElPX0NNRFRJTUVPVVQgICAgICAgICAgICAgICAgICAgNTAwMFUgICAgICAgIC8qIENvbW1hbmQgc2VuZCBhbmQgcmVzcG9uc2UgdGltZW91dCAqLwotI2RlZmluZSBTRElPX01BWEVSQVNFVElNRU9VVCAgICAgICAgICAgICAgNjMwMDBVICAgICAgIC8qIE1heCBlcmFzZSBUaW1lb3V0IDYzIHMgICAgICAgICAgICAqLwotCisjZGVmaW5lIFNESU9fQ01EVElNRU9VVCAgICAgICAgICAgICAgICAgICAgICAgNTAwMFUgICAgICAgICAvKiBDb21tYW5kIHNlbmQgYW5kIHJlc3BvbnNlIHRpbWVvdXQgKi8KKyNkZWZpbmUgU0RJT19NQVhFUkFTRVRJTUVPVVQgICAgICAgICAgICAgICAgICA2MzAwMFUgICAgICAgIC8qIE1heCBlcmFzZSBUaW1lb3V0IDYzIHMgICAgICAgICAgICAqLworI2RlZmluZSBTRElPX1NUT1BUUkFOU0ZFUlRJTUVPVVQgICAgICAgICAgICAgIDEwMDAwMDAwMFUgICAgLyogVGltZW91dCBmb3IgU1RPUCBUUkFOU01JU1NJT04gY29tbWFuZCAqLwogCiAvKiogQGRlZmdyb3VwIFNESU9fTExfQ2xvY2tfRWRnZSBDbG9jayBFZGdlCiAgICogQHsKQEAgLTMzMSw3ICszMjgsNyBAQAogI2RlZmluZSBTRElPX0NMT0NLX0VER0VfRkFMTElORyAgICAgICAgICAgICAgU0RJT19DTEtDUl9ORUdFREdFCiAKICNkZWZpbmUgSVNfU0RJT19DTE9DS19FREdFKEVER0UpICgoKEVER0UpID09IFNESU9fQ0xPQ0tfRURHRV9SSVNJTkcpIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChFREdFKSA9PSBTRElPX0NMT0NLX0VER0VfRkFMTElORykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEVER0UpID09IFNESU9fQ0xPQ0tfRURHRV9GQUxMSU5HKSkKIC8qKgogICAqIEB9CiAgICovCkBAIC0zNDMsNyArMzQwLDcgQEAKICNkZWZpbmUgU0RJT19DTE9DS19CWVBBU1NfRU5BQkxFICAgICAgICAgICAgICBTRElPX0NMS0NSX0JZUEFTUyAgIAogCiAjZGVmaW5lIElTX1NESU9fQ0xPQ0tfQllQQVNTKEJZUEFTUykgKCgoQllQQVNTKSA9PSBTRElPX0NMT0NLX0JZUEFTU19ESVNBQkxFKSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEJZUEFTUykgPT0gU0RJT19DTE9DS19CWVBBU1NfRU5BQkxFKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEJZUEFTUykgPT0gU0RJT19DTE9DS19CWVBBU1NfRU5BQkxFKSkKIC8qKgogICAqIEB9CiAgICovIApAQCAtMzU1LDcgKzM1Miw3IEBACiAjZGVmaW5lIFNESU9fQ0xPQ0tfUE9XRVJfU0FWRV9FTkFCTEUgICAgICAgICAgU0RJT19DTEtDUl9QV1JTQVYKIAogI2RlZmluZSBJU19TRElPX0NMT0NLX1BPV0VSX1NBVkUoU0FWRSkgKCgoU0FWRSkgPT0gU0RJT19DTE9DS19QT1dFUl9TQVZFX0RJU0FCTEUpIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChTQVZFKSA9PSBTRElPX0NMT0NLX1BPV0VSX1NBVkVfRU5BQkxFKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoU0FWRSkgPT0gU0RJT19DTE9DS19QT1dFUl9TQVZFX0VOQUJMRSkpCiAvKioKICAgKiBAfQogICAqLwpAQCAtMzY4LDggKzM2NSw4IEBACiAjZGVmaW5lIFNESU9fQlVTX1dJREVfOEIgICAgICAgICAgICAgICAgICAgICAgU0RJT19DTEtDUl9XSURCVVNfMQogCiAjZGVmaW5lIElTX1NESU9fQlVTX1dJREUoV0lERSkgKCgoV0lERSkgPT0gU0RJT19CVVNfV0lERV8xQikgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChXSURFKSA9PSBTRElPX0JVU19XSURFXzRCKSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFdJREUpID09IFNESU9fQlVTX1dJREVfOEIpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoV0lERSkgPT0gU0RJT19CVVNfV0lERV80QikgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoV0lERSkgPT0gU0RJT19CVVNfV0lERV84QikpCiAvKioKICAgKiBAfQogICAqLwpAQCAtMzgxLDcgKzM3OCw3IEBACiAjZGVmaW5lIFNESU9fSEFSRFdBUkVfRkxPV19DT05UUk9MX0VOQUJMRSAgICAgU0RJT19DTEtDUl9IV0ZDX0VOCiAKICNkZWZpbmUgSVNfU0RJT19IQVJEV0FSRV9GTE9XX0NPTlRST0woQ09OVFJPTCkgKCgoQ09OVFJPTCkgPT0gU0RJT19IQVJEV0FSRV9GTE9XX0NPTlRST0xfRElTQUJMRSkgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQ09OVFJPTCkgPT0gU0RJT19IQVJEV0FSRV9GTE9XX0NPTlRST0xfRU5BQkxFKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChDT05UUk9MKSA9PSBTRElPX0hBUkRXQVJFX0ZMT1dfQ09OVFJPTF9FTkFCTEUpKQogLyoqCiAgICogQH0KICAgKi8KQEAgLTQxMCw4ICs0MDcsOCBAQAogI2RlZmluZSBTRElPX1JFU1BPTlNFX0xPTkcgICAgICAgICAgICAgICAgICBTRElPX0NNRF9XQUlUUkVTUAogCiAjZGVmaW5lIElTX1NESU9fUkVTUE9OU0UoUkVTUE9OU0UpICgoKFJFU1BPTlNFKSA9PSBTRElPX1JFU1BPTlNFX05PKSAgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChSRVNQT05TRSkgPT0gU0RJT19SRVNQT05TRV9TSE9SVCkgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUkVTUE9OU0UpID09IFNESU9fUkVTUE9OU0VfTE9ORykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUkVTUE9OU0UpID09IFNESU9fUkVTUE9OU0VfU0hPUlQpIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChSRVNQT05TRSkgPT0gU0RJT19SRVNQT05TRV9MT05HKSkKIC8qKgogICAqIEB9CiAgICovCkBAIC00MjQsOCArNDIxLDggQEAKICNkZWZpbmUgU0RJT19XQUlUX1BFTkQgICAgICAgICAgICAgICAgICAgICAgU0RJT19DTURfV0FJVFBFTkQKIAogI2RlZmluZSBJU19TRElPX1dBSVQoV0FJVCkgKCgoV0FJVCkgPT0gU0RJT19XQUlUX05PKSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoV0FJVCkgPT0gU0RJT19XQUlUX0lUKSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoV0FJVCkgPT0gU0RJT19XQUlUX1BFTkQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChXQUlUKSA9PSBTRElPX1dBSVRfSVQpIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoV0FJVCkgPT0gU0RJT19XQUlUX1BFTkQpKQogLyoqCiAgICogQH0KICAgKi8KQEAgLTQzNyw3ICs0MzQsNyBAQAogI2RlZmluZSBTRElPX0NQU01fRU5BQkxFICAgICAgICAgICAgICAgICAgICBTRElPX0NNRF9DUFNNRU4KIAogI2RlZmluZSBJU19TRElPX0NQU00oQ1BTTSkgKCgoQ1BTTSkgPT0gU0RJT19DUFNNX0RJU0FCTEUpIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChDUFNNKSA9PSBTRElPX0NQU01fRU5BQkxFKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQ1BTTSkgPT0gU0RJT19DUFNNX0VOQUJMRSkpCiAvKioKICAgKiBAfQogICAqLyAgCkBAIC00NTEsOSArNDQ4LDkgQEAKICNkZWZpbmUgU0RJT19SRVNQNCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQ1UKIAogI2RlZmluZSBJU19TRElPX1JFU1AoUkVTUCkgKCgoUkVTUCkgPT0gU0RJT19SRVNQMSkgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFJFU1ApID09IFNESU9fUkVTUDIpIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChSRVNQKSA9PSBTRElPX1JFU1AzKSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUkVTUCkgPT0gU0RJT19SRVNQNCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFJFU1ApID09IFNESU9fUkVTUDIpIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUkVTUCkgPT0gU0RJT19SRVNQMykgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChSRVNQKSA9PSBTRElPX1JFU1A0KSkKIC8qKgogICAqIEB9CiAgICovCkBAIC00ODYsMjAgKzQ4MywyMCBAQAogI2RlZmluZSBTRElPX0RBVEFCTE9DS19TSVpFXzE2Mzg0QiAgICAgICAgICAgKFNESU9fRENUUkxfREJMT0NLU0laRV8xfFNESU9fRENUUkxfREJMT0NLU0laRV8yfFNESU9fRENUUkxfREJMT0NLU0laRV8zKQogCiAjZGVmaW5lIElTX1NESU9fQkxPQ0tfU0laRShTSVpFKSAoKChTSVpFKSA9PSBTRElPX0RBVEFCTE9DS19TSVpFXzFCKSAgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoU0laRSkgPT0gU0RJT19EQVRBQkxPQ0tfU0laRV8yQikgICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFNJWkUpID09IFNESU9fREFUQUJMT0NLX1NJWkVfNEIpICAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChTSVpFKSA9PSBTRElPX0RBVEFCTE9DS19TSVpFXzhCKSAgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoU0laRSkgPT0gU0RJT19EQVRBQkxPQ0tfU0laRV8xNkIpICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFNJWkUpID09IFNESU9fREFUQUJMT0NLX1NJWkVfMzJCKSAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChTSVpFKSA9PSBTRElPX0RBVEFCTE9DS19TSVpFXzY0QikgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoU0laRSkgPT0gU0RJT19EQVRBQkxPQ0tfU0laRV8xMjhCKSAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFNJWkUpID09IFNESU9fREFUQUJMT0NLX1NJWkVfMjU2QikgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChTSVpFKSA9PSBTRElPX0RBVEFCTE9DS19TSVpFXzUxMkIpICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoU0laRSkgPT0gU0RJT19EQVRBQkxPQ0tfU0laRV8xMDI0QikgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFNJWkUpID09IFNESU9fREFUQUJMT0NLX1NJWkVfMjA0OEIpIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChTSVpFKSA9PSBTRElPX0RBVEFCTE9DS19TSVpFXzQwOTZCKSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoU0laRSkgPT0gU0RJT19EQVRBQkxPQ0tfU0laRV84MTkyQikgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFNJWkUpID09IFNESU9fREFUQUJMT0NLX1NJWkVfMTYzODRCKSkgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFNJWkUpID09IFNESU9fREFUQUJMT0NLX1NJWkVfMkIpICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoU0laRSkgPT0gU0RJT19EQVRBQkxPQ0tfU0laRV80QikgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChTSVpFKSA9PSBTRElPX0RBVEFCTE9DS19TSVpFXzhCKSAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFNJWkUpID09IFNESU9fREFUQUJMT0NLX1NJWkVfMTZCKSAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoU0laRSkgPT0gU0RJT19EQVRBQkxPQ0tfU0laRV8zMkIpICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChTSVpFKSA9PSBTRElPX0RBVEFCTE9DS19TSVpFXzY0QikgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFNJWkUpID09IFNESU9fREFUQUJMT0NLX1NJWkVfMTI4QikgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoU0laRSkgPT0gU0RJT19EQVRBQkxPQ0tfU0laRV8yNTZCKSAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChTSVpFKSA9PSBTRElPX0RBVEFCTE9DS19TSVpFXzUxMkIpICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFNJWkUpID09IFNESU9fREFUQUJMT0NLX1NJWkVfMTAyNEIpIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoU0laRSkgPT0gU0RJT19EQVRBQkxPQ0tfU0laRV8yMDQ4QikgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChTSVpFKSA9PSBTRElPX0RBVEFCTE9DS19TSVpFXzQwOTZCKSB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFNJWkUpID09IFNESU9fREFUQUJMT0NLX1NJWkVfODE5MkIpIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoU0laRSkgPT0gU0RJT19EQVRBQkxPQ0tfU0laRV8xNjM4NEIpKSAKIC8qKgogICAqIEB9CiAgICovCkBAIC01MDgsMTAgKzUwNSwxMCBAQAogICAqIEB7CiAgICovCiAjZGVmaW5lIFNESU9fVFJBTlNGRVJfRElSX1RPX0NBUkQgICAgICAgICAgICAweDAwMDAwMDAwVQotI2RlZmluZSBTRElPX1RSQU5TRkVSX0RJUl9UT19TRElPICAgICAgICAgICAgU0RJT19EQ1RSTF9EVERJUgorI2RlZmluZSBTRElPX1RSQU5TRkVSX0RJUl9UT19TRElPICAgIFNESU9fRENUUkxfRFRESVIKIAogI2RlZmluZSBJU19TRElPX1RSQU5TRkVSX0RJUihESVIpICgoKERJUikgPT0gU0RJT19UUkFOU0ZFUl9ESVJfVE9fQ0FSRCkgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChESVIpID09IFNESU9fVFJBTlNGRVJfRElSX1RPX1NESU8pKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRElSKSA9PSBTRElPX1RSQU5TRkVSX0RJUl9UT19TRElPKSkKIC8qKgogICAqIEB9CiAgICovCkBAIC01MjMsNyArNTIwLDcgQEAKICNkZWZpbmUgU0RJT19UUkFOU0ZFUl9NT0RFX1NUUkVBTSAgICAgICAgICAgIFNESU9fRENUUkxfRFRNT0RFCiAKICNkZWZpbmUgSVNfU0RJT19UUkFOU0ZFUl9NT0RFKE1PREUpICgoKE1PREUpID09IFNESU9fVFJBTlNGRVJfTU9ERV9CTE9DSykgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKE1PREUpID09IFNESU9fVFJBTlNGRVJfTU9ERV9TVFJFQU0pKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChNT0RFKSA9PSBTRElPX1RSQU5TRkVSX01PREVfU1RSRUFNKSkKIC8qKgogICAqIEB9CiAgICovCkBAIC01MzUsNyArNTMyLDcgQEAKICNkZWZpbmUgU0RJT19EUFNNX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgIFNESU9fRENUUkxfRFRFTgogCiAjZGVmaW5lIElTX1NESU9fRFBTTShEUFNNKSAoKChEUFNNKSA9PSBTRElPX0RQU01fRElTQUJMRSkgfHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRFBTTSkgPT0gU0RJT19EUFNNX0VOQUJMRSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKERQU00pID09IFNESU9fRFBTTV9FTkFCTEUpKQogLyoqCiAgICogQH0KICAgKi8KQEAgLTU0Nyw3ICs1NDQsNyBAQAogI2RlZmluZSBTRElPX1JFQURfV0FJVF9NT0RFX0NMSyAgICAgICAgICAgICAgICAgIChTRElPX0RDVFJMX1JXTU9EKQogCiAjZGVmaW5lIElTX1NESU9fUkVBRFdBSVRfTU9ERShNT0RFKSAoKChNT0RFKSA9PSBTRElPX1JFQURfV0FJVF9NT0RFX0NMSykgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTU9ERSkgPT0gU0RJT19SRUFEX1dBSVRfTU9ERV9EQVRBMikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKE1PREUpID09IFNESU9fUkVBRF9XQUlUX01PREVfREFUQTIpKQogLyoqCiAgICogQH0KICAgKi8gIApAQCAtNTU1LDMwICs1NTIsMzQgQEAKIC8qKiBAZGVmZ3JvdXAgU0RJT19MTF9JbnRlcnJ1cHRfc291cmNlcyBJbnRlcnJ1cHQgU291cmNlcwogICAqIEB7CiAgICovCi0jZGVmaW5lIFNESU9fSVRfQ0NSQ0ZBSUwgICAgICAgICAgICAgICAgICAgIFNESU9fU1RBX0NDUkNGQUlMCi0jZGVmaW5lIFNESU9fSVRfRENSQ0ZBSUwgICAgICAgICAgICAgICAgICAgIFNESU9fU1RBX0RDUkNGQUlMCi0jZGVmaW5lIFNESU9fSVRfQ1RJTUVPVVQgICAgICAgICAgICAgICAgICAgIFNESU9fU1RBX0NUSU1FT1VUCi0jZGVmaW5lIFNESU9fSVRfRFRJTUVPVVQgICAgICAgICAgICAgICAgICAgIFNESU9fU1RBX0RUSU1FT1VUCi0jZGVmaW5lIFNESU9fSVRfVFhVTkRFUlIgICAgICAgICAgICAgICAgICAgIFNESU9fU1RBX1RYVU5ERVJSCi0jZGVmaW5lIFNESU9fSVRfUlhPVkVSUiAgICAgICAgICAgICAgICAgICAgIFNESU9fU1RBX1JYT1ZFUlIKLSNkZWZpbmUgU0RJT19JVF9DTURSRU5EICAgICAgICAgICAgICAgICAgICAgU0RJT19TVEFfQ01EUkVORAotI2RlZmluZSBTRElPX0lUX0NNRFNFTlQgICAgICAgICAgICAgICAgICAgICBTRElPX1NUQV9DTURTRU5UCi0jZGVmaW5lIFNESU9fSVRfREFUQUVORCAgICAgICAgICAgICAgICAgICAgIFNESU9fU1RBX0RBVEFFTkQKLSNkZWZpbmUgU0RJT19JVF9TVEJJVEVSUiAgICAgICAgICAgICAgICAgICAgU0RJT19TVEFfU1RCSVRFUlIKLSNkZWZpbmUgU0RJT19JVF9EQkNLRU5EICAgICAgICAgICAgICAgICAgICAgU0RJT19TVEFfREJDS0VORAotI2RlZmluZSBTRElPX0lUX0NNREFDVCAgICAgICAgICAgICAgICAgICAgICBTRElPX1NUQV9DTURBQ1QKLSNkZWZpbmUgU0RJT19JVF9UWEFDVCAgICAgICAgICAgICAgICAgICAgICAgU0RJT19TVEFfVFhBQ1QKLSNkZWZpbmUgU0RJT19JVF9SWEFDVCAgICAgICAgICAgICAgICAgICAgICAgU0RJT19TVEFfUlhBQ1QKLSNkZWZpbmUgU0RJT19JVF9UWEZJRk9IRSAgICAgICAgICAgICAgICAgICAgU0RJT19TVEFfVFhGSUZPSEUKLSNkZWZpbmUgU0RJT19JVF9SWEZJRk9IRiAgICAgICAgICAgICAgICAgICAgU0RJT19TVEFfUlhGSUZPSEYKLSNkZWZpbmUgU0RJT19JVF9UWEZJRk9GICAgICAgICAgICAgICAgICAgICAgU0RJT19TVEFfVFhGSUZPRgotI2RlZmluZSBTRElPX0lUX1JYRklGT0YgICAgICAgICAgICAgICAgICAgICBTRElPX1NUQV9SWEZJRk9GCi0jZGVmaW5lIFNESU9fSVRfVFhGSUZPRSAgICAgICAgICAgICAgICAgICAgIFNESU9fU1RBX1RYRklGT0UKLSNkZWZpbmUgU0RJT19JVF9SWEZJRk9FICAgICAgICAgICAgICAgICAgICAgU0RJT19TVEFfUlhGSUZPRQotI2RlZmluZSBTRElPX0lUX1RYREFWTCAgICAgICAgICAgICAgICAgICAgICBTRElPX1NUQV9UWERBVkwKLSNkZWZpbmUgU0RJT19JVF9SWERBVkwgICAgICAgICAgICAgICAgICAgICAgU0RJT19TVEFfUlhEQVZMCi0jZGVmaW5lIFNESU9fSVRfU0RJT0lUICAgICAgICAgICAgICAgICAgICAgIFNESU9fU1RBX1NESU9JVAotI2RlZmluZSBTRElPX0lUX0NFQVRBRU5EICAgICAgICAgICAgICAgICAgICBTRElPX1NUQV9DRUFUQUVORAorI2RlZmluZSBTRElPX0lUX0NDUkNGQUlMICAgICAgICAgICAgICAgICAgICBTRElPX01BU0tfQ0NSQ0ZBSUxJRQorI2RlZmluZSBTRElPX0lUX0RDUkNGQUlMICAgICAgICAgICAgICAgICAgICBTRElPX01BU0tfRENSQ0ZBSUxJRQorI2RlZmluZSBTRElPX0lUX0NUSU1FT1VUICAgICAgICAgICAgICAgICAgICBTRElPX01BU0tfQ1RJTUVPVVRJRQorI2RlZmluZSBTRElPX0lUX0RUSU1FT1VUICAgICAgICAgICAgICAgICAgICBTRElPX01BU0tfRFRJTUVPVVRJRQorI2RlZmluZSBTRElPX0lUX1RYVU5ERVJSICAgICAgICAgICAgICAgICAgICBTRElPX01BU0tfVFhVTkRFUlJJRQorI2RlZmluZSBTRElPX0lUX1JYT1ZFUlIgICAgICAgICAgICAgICAgICAgICBTRElPX01BU0tfUlhPVkVSUklFCisjZGVmaW5lIFNESU9fSVRfQ01EUkVORCAgICAgICAgICAgICAgICAgICAgIFNESU9fTUFTS19DTURSRU5ESUUKKyNkZWZpbmUgU0RJT19JVF9DTURTRU5UICAgICAgICAgICAgICAgICAgICAgU0RJT19NQVNLX0NNRFNFTlRJRQorI2RlZmluZSBTRElPX0lUX0RBVEFFTkQgICAgICAgICAgICAgICAgICAgICBTRElPX01BU0tfREFUQUVORElFCisjaWYgZGVmaW5lZChTRElPX1NUQV9TVEJJVEVSUikKKyNkZWZpbmUgU0RJT19JVF9TVEJJVEVSUiAgICAgICAgICAgICAgICAgICAgU0RJT19NQVNLX1NUQklURVJSSUUKKyNlbmRpZgorI2RlZmluZSBTRElPX0lUX0RCQ0tFTkQgICAgICAgICAgICAgICAgICAgICBTRElPX01BU0tfREJDS0VORElFCisjZGVmaW5lIFNESU9fSVRfQ01EQUNUICAgICAgICAgICAgICAgICAgICAgIFNESU9fTUFTS19DTURBQ1RJRQorI2RlZmluZSBTRElPX0lUX1RYQUNUICAgICAgICAgICAgICAgICAgICAgICBTRElPX01BU0tfVFhBQ1RJRQorI2RlZmluZSBTRElPX0lUX1JYQUNUICAgICAgICAgICAgICAgICAgICAgICBTRElPX01BU0tfUlhBQ1RJRQorI2RlZmluZSBTRElPX0lUX1RYRklGT0hFICAgICAgICAgICAgICAgICAgICBTRElPX01BU0tfVFhGSUZPSEVJRQorI2RlZmluZSBTRElPX0lUX1JYRklGT0hGICAgICAgICAgICAgICAgICAgICBTRElPX01BU0tfUlhGSUZPSEZJRQorI2RlZmluZSBTRElPX0lUX1RYRklGT0YgICAgICAgICAgICAgICAgICAgICBTRElPX01BU0tfVFhGSUZPRklFCisjZGVmaW5lIFNESU9fSVRfUlhGSUZPRiAgICAgICAgICAgICAgICAgICAgIFNESU9fTUFTS19SWEZJRk9GSUUKKyNkZWZpbmUgU0RJT19JVF9UWEZJRk9FICAgICAgICAgICAgICAgICAgICAgU0RJT19NQVNLX1RYRklGT0VJRQorI2RlZmluZSBTRElPX0lUX1JYRklGT0UgICAgICAgICAgICAgICAgICAgICBTRElPX01BU0tfUlhGSUZPRUlFCisjZGVmaW5lIFNESU9fSVRfVFhEQVZMICAgICAgICAgICAgICAgICAgICAgIFNESU9fTUFTS19UWERBVkxJRQorI2RlZmluZSBTRElPX0lUX1JYREFWTCAgICAgICAgICAgICAgICAgICAgICBTRElPX01BU0tfUlhEQVZMSUUKKyNkZWZpbmUgU0RJT19JVF9TRElPSVQgICAgICAgICAgICAgICAgICAgICAgU0RJT19NQVNLX1NESU9JVElFCisjaWYgZGVmaW5lZChTRElPX0NNRF9DRUFUQUNNRCkKKyNkZWZpbmUgU0RJT19JVF9DRUFUQUVORCAgICAgICAgICAgICAgICAgICAgU0RJT19NQVNLX0NFQVRBRU5ESUUKKyNlbmRpZgogLyoqCiAgICogQH0KICAgKi8gCkBAIC01OTUsNyArNTk2LDkgQEAKICNkZWZpbmUgU0RJT19GTEFHX0NNRFJFTkQgICAgICAgICAgICAgICAgICAgU0RJT19TVEFfQ01EUkVORAogI2RlZmluZSBTRElPX0ZMQUdfQ01EU0VOVCAgICAgICAgICAgICAgICAgICBTRElPX1NUQV9DTURTRU5UCiAjZGVmaW5lIFNESU9fRkxBR19EQVRBRU5EICAgICAgICAgICAgICAgICAgIFNESU9fU1RBX0RBVEFFTkQKKyNpZiBkZWZpbmVkKFNESU9fU1RBX1NUQklURVJSKQogI2RlZmluZSBTRElPX0ZMQUdfU1RCSVRFUlIgICAgICAgICAgICAgICAgICBTRElPX1NUQV9TVEJJVEVSUgorI2VuZGlmCiAjZGVmaW5lIFNESU9fRkxBR19EQkNLRU5EICAgICAgICAgICAgICAgICAgIFNESU9fU1RBX0RCQ0tFTkQKICNkZWZpbmUgU0RJT19GTEFHX0NNREFDVCAgICAgICAgICAgICAgICAgICAgU0RJT19TVEFfQ01EQUNUCiAjZGVmaW5lIFNESU9fRkxBR19UWEFDVCAgICAgICAgICAgICAgICAgICAgIFNESU9fU1RBX1RYQUNUCkBAIC02MDksMTEgKzYxMiwxOSBAQAogI2RlZmluZSBTRElPX0ZMQUdfVFhEQVZMICAgICAgICAgICAgICAgICAgICBTRElPX1NUQV9UWERBVkwKICNkZWZpbmUgU0RJT19GTEFHX1JYREFWTCAgICAgICAgICAgICAgICAgICAgU0RJT19TVEFfUlhEQVZMCiAjZGVmaW5lIFNESU9fRkxBR19TRElPSVQgICAgICAgICAgICAgICAgICAgIFNESU9fU1RBX1NESU9JVAorI2lmIGRlZmluZWQoU0RJT19DTURfQ0VBVEFDTUQpCiAjZGVmaW5lIFNESU9fRkxBR19DRUFUQUVORCAgICAgICAgICAgICAgICAgIFNESU9fU1RBX0NFQVRBRU5ECisjZW5kaWYKICNkZWZpbmUgU0RJT19TVEFUSUNfRkxBR1MgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkoU0RJT19GTEFHX0NDUkNGQUlMIHwgU0RJT19GTEFHX0RDUkNGQUlMIHwgU0RJT19GTEFHX0NUSU1FT1VUIHxcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRElPX0ZMQUdfRFRJTUVPVVQgfCBTRElPX0ZMQUdfVFhVTkRFUlIgfCBTRElPX0ZMQUdfUlhPVkVSUiAgfFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNESU9fRkxBR19DTURSRU5EICB8IFNESU9fRkxBR19DTURTRU5UICB8IFNESU9fRkxBR19EQVRBRU5EICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0RJT19GTEFHX0RCQ0tFTkQpKSAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRElPX0ZMQUdfREJDS0VORCB8IFNESU9fRkxBR19TRElPSVQpKSAgCisKKyNkZWZpbmUgU0RJT19TVEFUSUNfQ01EX0ZMQUdTICAgICAgICAgICAgICAgKCh1aW50MzJfdCkoU0RJT19GTEFHX0NDUkNGQUlMIHwgU0RJT19GTEFHX0NUSU1FT1VUIHwgU0RJT19GTEFHX0NNRFJFTkQgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNESU9fRkxBR19DTURTRU5UKSkKKworI2RlZmluZSBTRElPX1NUQVRJQ19EQVRBX0ZMQUdTICAgICAgICAgICAgICAoKHVpbnQzMl90KShTRElPX0ZMQUdfRENSQ0ZBSUwgfCBTRElPX0ZMQUdfRFRJTUVPVVQgfCBTRElPX0ZMQUdfVFhVTkRFUlIgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNESU9fRkxBR19SWE9WRVJSICB8IFNESU9fRkxBR19EQVRBRU5EICB8IFNESU9fRkxBR19EQkNLRU5EKSkKIC8qKgogICAqIEB9CiAgICovCkBAIC03MDUsMTEgKzcxNiwxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0RJT19DTURfQ1BTTUVOICAgfCBTRElPX0NNRF9TRElPU1VTUEVORCkpCiAKIC8qIFNESU8gSW5pdGlhbGl6YXRpb24gRnJlcXVlbmN5ICg0MDBLSHogbWF4KSAqLwotI2RlZmluZSBTRElPX0lOSVRfQ0xLX0RJViAgICAgKCh1aW50OF90KTB4NzYpCisjZGVmaW5lIFNESU9fSU5JVF9DTEtfRElWICAgICAoKHVpbnQ4X3QpMHg3NikgICAgLyogNDhNSHogLyAoU0RNTUNfSU5JVF9DTEtfRElWICsgMikgPCA0MDBLSHogKi8KIAogLyogU0RJTyBEYXRhIFRyYW5zZmVyIEZyZXF1ZW5jeSAoMjVNSHogbWF4KSAqLwotI2RlZmluZSBTRElPX1RSQU5TRkVSX0NMS19ESVYgKCh1aW50OF90KTB4MCkKLQorI2RlZmluZSBTRElPX1RSQU5TRkVSX0NMS19ESVYgKCh1aW50OF90KTB4MCkgICAgIC8qIDQ4TUh6IC8gKFNETU1DX1RSQU5TRkVSX0NMS19ESVYgKyAyKSA8IDI1TUh6ICovCiAvKioKICAgKiBAfQogICAqLwpAQCAtNzIxLDM1ICs3MzEsMzYgQEAKICAKIC8qKgogICAqIEBicmllZiAgRW5hYmxlIHRoZSBTRElPIGRldmljZS4KLSAgKiBAcGFyYW0gIF9fSU5TVEFOQ0VfXyBTRElPIEluc3RhbmNlICAKKyAgKiBAcGFyYW0gIF9fSU5TVEFOQ0VfXzogU0RJTyBJbnN0YW5jZSAgCiAgICogQHJldHZhbCBOb25lCi0gICovIAorICAqLwogI2RlZmluZSBfX1NESU9fRU5BQkxFKF9fSU5TVEFOQ0VfXykgICgqKF9fSU8gdWludDMyX3QgKilDTEtDUl9DTEtFTl9CQiA9IEVOQUJMRSkKIAogLyoqCiAgICogQGJyaWVmICBEaXNhYmxlIHRoZSBTRElPIGRldmljZS4KLSAgKiBAcGFyYW0gIF9fSU5TVEFOQ0VfXyBTRElPIEluc3RhbmNlICAKKyAgKiBAcGFyYW0gIF9fSU5TVEFOQ0VfXzogU0RJTyBJbnN0YW5jZSAgCiAgICogQHJldHZhbCBOb25lCiAgICovCiAjZGVmaW5lIF9fU0RJT19ESVNBQkxFKF9fSU5TVEFOQ0VfXykgICgqKF9fSU8gdWludDMyX3QgKilDTEtDUl9DTEtFTl9CQiA9IERJU0FCTEUpCiAKIC8qKgogICAqIEBicmllZiAgRW5hYmxlIHRoZSBTRElPIERNQSB0cmFuc2Zlci4KLSAgKiBAcGFyYW0gIF9fSU5TVEFOQ0VfXyBTRElPIEluc3RhbmNlICAKKyAgKiBAcGFyYW0gIF9fSU5TVEFOQ0VfXzogU0RJTyBJbnN0YW5jZSAgCiAgICogQHJldHZhbCBOb25lCi0gICovIAorICAqLwogI2RlZmluZSBfX1NESU9fRE1BX0VOQUJMRShfX0lOU1RBTkNFX18pICAoKihfX0lPIHVpbnQzMl90ICopRENUUkxfRE1BRU5fQkIgPSBFTkFCTEUpCisKIC8qKgogICAqIEBicmllZiAgRGlzYWJsZSB0aGUgU0RJTyBETUEgdHJhbnNmZXIuCi0gICogQHBhcmFtICBfX0lOU1RBTkNFX18gU0RJTyBJbnN0YW5jZSAgIAorICAqIEBwYXJhbSAgX19JTlNUQU5DRV9fOiBTRElPIEluc3RhbmNlICAgCiAgICogQHJldHZhbCBOb25lCiAgICovCiAjZGVmaW5lIF9fU0RJT19ETUFfRElTQUJMRShfX0lOU1RBTkNFX18pICAoKihfX0lPIHVpbnQzMl90ICopRENUUkxfRE1BRU5fQkIgPSBESVNBQkxFKQogIAogLyoqCiAgICogQGJyaWVmICBFbmFibGUgdGhlIFNESU8gZGV2aWNlIGludGVycnVwdC4KLSAgKiBAcGFyYW0gIF9fSU5TVEFOQ0VfXyAgUG9pbnRlciB0byBTRElPIHJlZ2lzdGVyIGJhc2UgIAotICAqIEBwYXJhbSAgX19JTlRFUlJVUFRfXyAgc3BlY2lmaWVzIHRoZSBTRElPIGludGVycnVwdCBzb3VyY2VzIHRvIGJlIGVuYWJsZWQuCisgICogQHBhcmFtICBfX0lOU1RBTkNFX18gOiBQb2ludGVyIHRvIFNESU8gcmVnaXN0ZXIgYmFzZSAgCisgICogQHBhcmFtICBfX0lOVEVSUlVQVF9fIDogc3BlY2lmaWVzIHRoZSBTRElPIGludGVycnVwdCBzb3VyY2VzIHRvIGJlIGVuYWJsZWQuCiAgICogICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9yIGEgY29tYmluYXRpb24gb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAgICogICAgICAgICAgICBAYXJnIFNESU9fSVRfQ0NSQ0ZBSUw6IENvbW1hbmQgcmVzcG9uc2UgcmVjZWl2ZWQgKENSQyBjaGVjayBmYWlsZWQpIGludGVycnVwdAogICAqICAgICAgICAgICAgQGFyZyBTRElPX0lUX0RDUkNGQUlMOiBEYXRhIGJsb2NrIHNlbnQvcmVjZWl2ZWQgKENSQyBjaGVjayBmYWlsZWQpIGludGVycnVwdApAQCAtNzU5LDcgKzc3MCw3IEBACiAgICogICAgICAgICAgICBAYXJnIFNESU9fSVRfUlhPVkVSUjogIFJlY2VpdmVkIEZJRk8gb3ZlcnJ1biBlcnJvciBpbnRlcnJ1cHQKICAgKiAgICAgICAgICAgIEBhcmcgU0RJT19JVF9DTURSRU5EOiAgQ29tbWFuZCByZXNwb25zZSByZWNlaXZlZCAoQ1JDIGNoZWNrIHBhc3NlZCkgaW50ZXJydXB0CiAgICogICAgICAgICAgICBAYXJnIFNESU9fSVRfQ01EU0VOVDogIENvbW1hbmQgc2VudCAobm8gcmVzcG9uc2UgcmVxdWlyZWQpIGludGVycnVwdAotICAqICAgICAgICAgICAgQGFyZyBTRElPX0lUX0RBVEFFTkQ6ICBEYXRhIGVuZCAoZGF0YSBjb3VudGVyLCBTRElEQ09VTlQsIGlzIHplcm8pIGludGVycnVwdAorICAqICAgICAgICAgICAgQGFyZyBTRElPX0lUX0RBVEFFTkQ6ICBEYXRhIGVuZCAoZGF0YSBjb3VudGVyLCBEQVRBQ09VTlQsIGlzIHplcm8pIGludGVycnVwdAogICAqICAgICAgICAgICAgQGFyZyBTRElPX0lUX0RCQ0tFTkQ6ICBEYXRhIGJsb2NrIHNlbnQvcmVjZWl2ZWQgKENSQyBjaGVjayBwYXNzZWQpIGludGVycnVwdAogICAqICAgICAgICAgICAgQGFyZyBTRElPX0lUX0NNREFDVDogICBDb21tYW5kIHRyYW5zZmVyIGluIHByb2dyZXNzIGludGVycnVwdAogICAqICAgICAgICAgICAgQGFyZyBTRElPX0lUX1RYQUNUOiAgICBEYXRhIHRyYW5zbWl0IGluIHByb2dyZXNzIGludGVycnVwdApAQCAtNzcyLDE1ICs3ODMsMTUgQEAKICAgKiAgICAgICAgICAgIEBhcmcgU0RJT19JVF9SWEZJRk9FOiAgUmVjZWl2ZSBGSUZPIGVtcHR5IGludGVycnVwdAogICAqICAgICAgICAgICAgQGFyZyBTRElPX0lUX1RYREFWTDogICBEYXRhIGF2YWlsYWJsZSBpbiB0cmFuc21pdCBGSUZPIGludGVycnVwdAogICAqICAgICAgICAgICAgQGFyZyBTRElPX0lUX1JYREFWTDogICBEYXRhIGF2YWlsYWJsZSBpbiByZWNlaXZlIEZJRk8gaW50ZXJydXB0Ci0gICogICAgICAgICAgICBAYXJnIFNESU9fSVRfU0RJT0lUOiAgIFNEIEkvTyBpbnRlcnJ1cHQgcmVjZWl2ZWQgaW50ZXJydXB0ICAgCisgICogICAgICAgICAgICBAYXJnIFNESU9fSVRfU0RJT0lUOiAgIFNESU8gaW50ZXJydXB0IHJlY2VpdmVkIGludGVycnVwdCAKICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KICNkZWZpbmUgX19TRElPX0VOQUJMRV9JVChfX0lOU1RBTkNFX18sIF9fSU5URVJSVVBUX18pICAoKF9fSU5TVEFOQ0VfXyktPk1BU0sgfD0gKF9fSU5URVJSVVBUX18pKQogCiAvKioKICAgKiBAYnJpZWYgIERpc2FibGUgdGhlIFNESU8gZGV2aWNlIGludGVycnVwdC4KLSAgKiBAcGFyYW0gIF9fSU5TVEFOQ0VfXyAgUG9pbnRlciB0byBTRElPIHJlZ2lzdGVyIGJhc2UgICAKLSAgKiBAcGFyYW0gIF9fSU5URVJSVVBUX18gIHNwZWNpZmllcyB0aGUgU0RJTyBpbnRlcnJ1cHQgc291cmNlcyB0byBiZSBkaXNhYmxlZC4KKyAgKiBAcGFyYW0gIF9fSU5TVEFOQ0VfXyA6IFBvaW50ZXIgdG8gU0RJTyByZWdpc3RlciBiYXNlICAgCisgICogQHBhcmFtICBfX0lOVEVSUlVQVF9fIDogc3BlY2lmaWVzIHRoZSBTRElPIGludGVycnVwdCBzb3VyY2VzIHRvIGJlIGRpc2FibGVkLgogICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb3IgYSBjb21iaW5hdGlvbiBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAgKiAgICAgICAgICAgIEBhcmcgU0RJT19JVF9DQ1JDRkFJTDogQ29tbWFuZCByZXNwb25zZSByZWNlaXZlZCAoQ1JDIGNoZWNrIGZhaWxlZCkgaW50ZXJydXB0CiAgICogICAgICAgICAgICBAYXJnIFNESU9fSVRfRENSQ0ZBSUw6IERhdGEgYmxvY2sgc2VudC9yZWNlaXZlZCAoQ1JDIGNoZWNrIGZhaWxlZCkgaW50ZXJydXB0CkBAIC03OTAsNyArODAxLDcgQEAKICAgKiAgICAgICAgICAgIEBhcmcgU0RJT19JVF9SWE9WRVJSOiAgUmVjZWl2ZWQgRklGTyBvdmVycnVuIGVycm9yIGludGVycnVwdAogICAqICAgICAgICAgICAgQGFyZyBTRElPX0lUX0NNRFJFTkQ6ICBDb21tYW5kIHJlc3BvbnNlIHJlY2VpdmVkIChDUkMgY2hlY2sgcGFzc2VkKSBpbnRlcnJ1cHQKICAgKiAgICAgICAgICAgIEBhcmcgU0RJT19JVF9DTURTRU5UOiAgQ29tbWFuZCBzZW50IChubyByZXNwb25zZSByZXF1aXJlZCkgaW50ZXJydXB0Ci0gICogICAgICAgICAgICBAYXJnIFNESU9fSVRfREFUQUVORDogIERhdGEgZW5kIChkYXRhIGNvdW50ZXIsIFNESURDT1VOVCwgaXMgemVybykgaW50ZXJydXB0CisgICogICAgICAgICAgICBAYXJnIFNESU9fSVRfREFUQUVORDogIERhdGEgZW5kIChkYXRhIGNvdW50ZXIsIERBVEFDT1VOVCwgaXMgemVybykgaW50ZXJydXB0CiAgICogICAgICAgICAgICBAYXJnIFNESU9fSVRfREJDS0VORDogIERhdGEgYmxvY2sgc2VudC9yZWNlaXZlZCAoQ1JDIGNoZWNrIHBhc3NlZCkgaW50ZXJydXB0CiAgICogICAgICAgICAgICBAYXJnIFNESU9fSVRfQ01EQUNUOiAgIENvbW1hbmQgdHJhbnNmZXIgaW4gcHJvZ3Jlc3MgaW50ZXJydXB0CiAgICogICAgICAgICAgICBAYXJnIFNESU9fSVRfVFhBQ1Q6ICAgIERhdGEgdHJhbnNtaXQgaW4gcHJvZ3Jlc3MgaW50ZXJydXB0CkBAIC04MDMsMTUgKzgxNCwxNSBAQAogICAqICAgICAgICAgICAgQGFyZyBTRElPX0lUX1JYRklGT0U6ICBSZWNlaXZlIEZJRk8gZW1wdHkgaW50ZXJydXB0CiAgICogICAgICAgICAgICBAYXJnIFNESU9fSVRfVFhEQVZMOiAgIERhdGEgYXZhaWxhYmxlIGluIHRyYW5zbWl0IEZJRk8gaW50ZXJydXB0CiAgICogICAgICAgICAgICBAYXJnIFNESU9fSVRfUlhEQVZMOiAgIERhdGEgYXZhaWxhYmxlIGluIHJlY2VpdmUgRklGTyBpbnRlcnJ1cHQKLSAgKiAgICAgICAgICAgIEBhcmcgU0RJT19JVF9TRElPSVQ6ICAgU0QgSS9PIGludGVycnVwdCByZWNlaXZlZCBpbnRlcnJ1cHQgICAKKyAgKiAgICAgICAgICAgIEBhcmcgU0RJT19JVF9TRElPSVQ6ICAgU0RJTyBpbnRlcnJ1cHQgcmVjZWl2ZWQgaW50ZXJydXB0ICAgCiAgICogQHJldHZhbCBOb25lCiAgICovCiAjZGVmaW5lIF9fU0RJT19ESVNBQkxFX0lUKF9fSU5TVEFOQ0VfXywgX19JTlRFUlJVUFRfXykgICgoX19JTlNUQU5DRV9fKS0+TUFTSyAmPSB+KF9fSU5URVJSVVBUX18pKQogCiAvKioKICAgKiBAYnJpZWYgIENoZWNrcyB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgU0RJTyBmbGFnIGlzIHNldCBvciBub3QuIAotICAqIEBwYXJhbSAgX19JTlNUQU5DRV9fICBQb2ludGVyIHRvIFNESU8gcmVnaXN0ZXIgYmFzZSAgIAotICAqIEBwYXJhbSAgX19GTEFHX18gc3BlY2lmaWVzIHRoZSBmbGFnIHRvIGNoZWNrLiAKKyAgKiBAcGFyYW0gIF9fSU5TVEFOQ0VfXyA6IFBvaW50ZXIgdG8gU0RJTyByZWdpc3RlciBiYXNlICAgCisgICogQHBhcmFtICBfX0ZMQUdfXzogc3BlY2lmaWVzIHRoZSBmbGFnIHRvIGNoZWNrLiAKICAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICAqICAgICAgICAgICAgQGFyZyBTRElPX0ZMQUdfQ0NSQ0ZBSUw6IENvbW1hbmQgcmVzcG9uc2UgcmVjZWl2ZWQgKENSQyBjaGVjayBmYWlsZWQpCiAgICogICAgICAgICAgICBAYXJnIFNESU9fRkxBR19EQ1JDRkFJTDogRGF0YSBibG9jayBzZW50L3JlY2VpdmVkIChDUkMgY2hlY2sgZmFpbGVkKQpAQCAtODIxLDcgKzgzMiw3IEBACiAgICogICAgICAgICAgICBAYXJnIFNESU9fRkxBR19SWE9WRVJSOiAgUmVjZWl2ZWQgRklGTyBvdmVycnVuIGVycm9yCiAgICogICAgICAgICAgICBAYXJnIFNESU9fRkxBR19DTURSRU5EOiAgQ29tbWFuZCByZXNwb25zZSByZWNlaXZlZCAoQ1JDIGNoZWNrIHBhc3NlZCkKICAgKiAgICAgICAgICAgIEBhcmcgU0RJT19GTEFHX0NNRFNFTlQ6ICBDb21tYW5kIHNlbnQgKG5vIHJlc3BvbnNlIHJlcXVpcmVkKQotICAqICAgICAgICAgICAgQGFyZyBTRElPX0ZMQUdfREFUQUVORDogIERhdGEgZW5kIChkYXRhIGNvdW50ZXIsIFNESURDT1VOVCwgaXMgemVybykKKyAgKiAgICAgICAgICAgIEBhcmcgU0RJT19GTEFHX0RBVEFFTkQ6ICBEYXRhIGVuZCAoZGF0YSBjb3VudGVyLCBEQVRBQ09VTlQsIGlzIHplcm8pCiAgICogICAgICAgICAgICBAYXJnIFNESU9fRkxBR19EQkNLRU5EOiAgRGF0YSBibG9jayBzZW50L3JlY2VpdmVkIChDUkMgY2hlY2sgcGFzc2VkKQogICAqICAgICAgICAgICAgQGFyZyBTRElPX0ZMQUdfQ01EQUNUOiAgIENvbW1hbmQgdHJhbnNmZXIgaW4gcHJvZ3Jlc3MKICAgKiAgICAgICAgICAgIEBhcmcgU0RJT19GTEFHX1RYQUNUOiAgICBEYXRhIHRyYW5zbWl0IGluIHByb2dyZXNzCkBAIC04MzQsMTYgKzg0NSwxNiBAQAogICAqICAgICAgICAgICAgQGFyZyBTRElPX0ZMQUdfUlhGSUZPRTogIFJlY2VpdmUgRklGTyBlbXB0eQogICAqICAgICAgICAgICAgQGFyZyBTRElPX0ZMQUdfVFhEQVZMOiAgIERhdGEgYXZhaWxhYmxlIGluIHRyYW5zbWl0IEZJRk8KICAgKiAgICAgICAgICAgIEBhcmcgU0RJT19GTEFHX1JYREFWTDogICBEYXRhIGF2YWlsYWJsZSBpbiByZWNlaXZlIEZJRk8KLSAgKiAgICAgICAgICAgIEBhcmcgU0RJT19GTEFHX1NESU9JVDogICBTRCBJL08gaW50ZXJydXB0IHJlY2VpdmVkCisgICogICAgICAgICAgICBAYXJnIFNESU9fRkxBR19TRElPSVQ6ICAgU0RJTyBpbnRlcnJ1cHQgcmVjZWl2ZWQKICAgKiBAcmV0dmFsIFRoZSBuZXcgc3RhdGUgb2YgU0RJT19GTEFHIChTRVQgb3IgUkVTRVQpLgogICAqLwotI2RlZmluZSBfX1NESU9fR0VUX0ZMQUcoX19JTlNUQU5DRV9fLCBfX0ZMQUdfXykgICgoKF9fSU5TVEFOQ0VfXyktPlNUQSAmKF9fRkxBR19fKSkgIT0gUkVTRVQpCisjZGVmaW5lIF9fU0RJT19HRVRfRkxBRyhfX0lOU1RBTkNFX18sIF9fRkxBR19fKSAgKCgoX19JTlNUQU5DRV9fKS0+U1RBICYoX19GTEFHX18pKSAhPSAwVSkKIAogCiAvKioKICAgKiBAYnJpZWYgIENsZWFycyB0aGUgU0RJTyBwZW5kaW5nIGZsYWdzLgotICAqIEBwYXJhbSAgX19JTlNUQU5DRV9fICBQb2ludGVyIHRvIFNESU8gcmVnaXN0ZXIgYmFzZSAgCi0gICogQHBhcmFtICBfX0ZMQUdfXyBzcGVjaWZpZXMgdGhlIGZsYWcgdG8gY2xlYXIuICAKKyAgKiBAcGFyYW0gIF9fSU5TVEFOQ0VfXyA6IFBvaW50ZXIgdG8gU0RJTyByZWdpc3RlciBiYXNlICAKKyAgKiBAcGFyYW0gIF9fRkxBR19fOiBzcGVjaWZpZXMgdGhlIGZsYWcgdG8gY2xlYXIuICAKICAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9yIGEgY29tYmluYXRpb24gb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAgICogICAgICAgICAgICBAYXJnIFNESU9fRkxBR19DQ1JDRkFJTDogQ29tbWFuZCByZXNwb25zZSByZWNlaXZlZCAoQ1JDIGNoZWNrIGZhaWxlZCkKICAgKiAgICAgICAgICAgIEBhcmcgU0RJT19GTEFHX0RDUkNGQUlMOiBEYXRhIGJsb2NrIHNlbnQvcmVjZWl2ZWQgKENSQyBjaGVjayBmYWlsZWQpCkBAIC04NTMsMTcgKzg2NCwxNyBAQAogICAqICAgICAgICAgICAgQGFyZyBTRElPX0ZMQUdfUlhPVkVSUjogIFJlY2VpdmVkIEZJRk8gb3ZlcnJ1biBlcnJvcgogICAqICAgICAgICAgICAgQGFyZyBTRElPX0ZMQUdfQ01EUkVORDogIENvbW1hbmQgcmVzcG9uc2UgcmVjZWl2ZWQgKENSQyBjaGVjayBwYXNzZWQpCiAgICogICAgICAgICAgICBAYXJnIFNESU9fRkxBR19DTURTRU5UOiAgQ29tbWFuZCBzZW50IChubyByZXNwb25zZSByZXF1aXJlZCkKLSAgKiAgICAgICAgICAgIEBhcmcgU0RJT19GTEFHX0RBVEFFTkQ6ICBEYXRhIGVuZCAoZGF0YSBjb3VudGVyLCBTRElEQ09VTlQsIGlzIHplcm8pCisgICogICAgICAgICAgICBAYXJnIFNESU9fRkxBR19EQVRBRU5EOiAgRGF0YSBlbmQgKGRhdGEgY291bnRlciwgREFUQUNPVU5ULCBpcyB6ZXJvKQogICAqICAgICAgICAgICAgQGFyZyBTRElPX0ZMQUdfREJDS0VORDogIERhdGEgYmxvY2sgc2VudC9yZWNlaXZlZCAoQ1JDIGNoZWNrIHBhc3NlZCkKLSAgKiAgICAgICAgICAgIEBhcmcgU0RJT19GTEFHX1NESU9JVDogICBTRCBJL08gaW50ZXJydXB0IHJlY2VpdmVkCisgICogICAgICAgICAgICBAYXJnIFNESU9fRkxBR19TRElPSVQ6ICAgU0RJTyBpbnRlcnJ1cHQgcmVjZWl2ZWQKICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KICNkZWZpbmUgX19TRElPX0NMRUFSX0ZMQUcoX19JTlNUQU5DRV9fLCBfX0ZMQUdfXykgICgoX19JTlNUQU5DRV9fKS0+SUNSID0gKF9fRkxBR19fKSkKIAogLyoqCiAgICogQGJyaWVmICBDaGVja3Mgd2hldGhlciB0aGUgc3BlY2lmaWVkIFNESU8gaW50ZXJydXB0IGhhcyBvY2N1cnJlZCBvciBub3QuCi0gICogQHBhcmFtICBfX0lOU1RBTkNFX18gIFBvaW50ZXIgdG8gU0RJTyByZWdpc3RlciBiYXNlICAgCi0gICogQHBhcmFtICBfX0lOVEVSUlVQVF9fIHNwZWNpZmllcyB0aGUgU0RJTyBpbnRlcnJ1cHQgc291cmNlIHRvIGNoZWNrLiAKKyAgKiBAcGFyYW0gIF9fSU5TVEFOQ0VfXyA6IFBvaW50ZXIgdG8gU0RJTyByZWdpc3RlciBiYXNlICAgCisgICogQHBhcmFtICBfX0lOVEVSUlVQVF9fOiBzcGVjaWZpZXMgdGhlIFNESU8gaW50ZXJydXB0IHNvdXJjZSB0byBjaGVjay4gCiAgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAgKiAgICAgICAgICAgIEBhcmcgU0RJT19JVF9DQ1JDRkFJTDogQ29tbWFuZCByZXNwb25zZSByZWNlaXZlZCAoQ1JDIGNoZWNrIGZhaWxlZCkgaW50ZXJydXB0CiAgICogICAgICAgICAgICBAYXJnIFNESU9fSVRfRENSQ0ZBSUw6IERhdGEgYmxvY2sgc2VudC9yZWNlaXZlZCAoQ1JDIGNoZWNrIGZhaWxlZCkgaW50ZXJydXB0CkBAIC04NzMsNyArODg0LDcgQEAKICAgKiAgICAgICAgICAgIEBhcmcgU0RJT19JVF9SWE9WRVJSOiAgUmVjZWl2ZWQgRklGTyBvdmVycnVuIGVycm9yIGludGVycnVwdAogICAqICAgICAgICAgICAgQGFyZyBTRElPX0lUX0NNRFJFTkQ6ICBDb21tYW5kIHJlc3BvbnNlIHJlY2VpdmVkIChDUkMgY2hlY2sgcGFzc2VkKSBpbnRlcnJ1cHQKICAgKiAgICAgICAgICAgIEBhcmcgU0RJT19JVF9DTURTRU5UOiAgQ29tbWFuZCBzZW50IChubyByZXNwb25zZSByZXF1aXJlZCkgaW50ZXJydXB0Ci0gICogICAgICAgICAgICBAYXJnIFNESU9fSVRfREFUQUVORDogIERhdGEgZW5kIChkYXRhIGNvdW50ZXIsIFNESURDT1VOVCwgaXMgemVybykgaW50ZXJydXB0CisgICogICAgICAgICAgICBAYXJnIFNESU9fSVRfREFUQUVORDogIERhdGEgZW5kIChkYXRhIGNvdW50ZXIsIERBVEFDT1VOVCwgaXMgemVybykgaW50ZXJydXB0CiAgICogICAgICAgICAgICBAYXJnIFNESU9fSVRfREJDS0VORDogIERhdGEgYmxvY2sgc2VudC9yZWNlaXZlZCAoQ1JDIGNoZWNrIHBhc3NlZCkgaW50ZXJydXB0CiAgICogICAgICAgICAgICBAYXJnIFNESU9fSVRfQ01EQUNUOiAgIENvbW1hbmQgdHJhbnNmZXIgaW4gcHJvZ3Jlc3MgaW50ZXJydXB0CiAgICogICAgICAgICAgICBAYXJnIFNESU9fSVRfVFhBQ1Q6ICAgIERhdGEgdHJhbnNtaXQgaW4gcHJvZ3Jlc3MgaW50ZXJydXB0CkBAIC04ODYsMTUgKzg5NywxNSBAQAogICAqICAgICAgICAgICAgQGFyZyBTRElPX0lUX1JYRklGT0U6ICBSZWNlaXZlIEZJRk8gZW1wdHkgaW50ZXJydXB0CiAgICogICAgICAgICAgICBAYXJnIFNESU9fSVRfVFhEQVZMOiAgIERhdGEgYXZhaWxhYmxlIGluIHRyYW5zbWl0IEZJRk8gaW50ZXJydXB0CiAgICogICAgICAgICAgICBAYXJnIFNESU9fSVRfUlhEQVZMOiAgIERhdGEgYXZhaWxhYmxlIGluIHJlY2VpdmUgRklGTyBpbnRlcnJ1cHQKLSAgKiAgICAgICAgICAgIEBhcmcgU0RJT19JVF9TRElPSVQ6ICAgU0QgSS9PIGludGVycnVwdCByZWNlaXZlZCBpbnRlcnJ1cHQKKyAgKiAgICAgICAgICAgIEBhcmcgU0RJT19JVF9TRElPSVQ6ICAgU0RJTyBpbnRlcnJ1cHQgcmVjZWl2ZWQgaW50ZXJydXB0CiAgICogQHJldHZhbCBUaGUgbmV3IHN0YXRlIG9mIFNESU9fSVQgKFNFVCBvciBSRVNFVCkuCiAgICovCiAjZGVmaW5lIF9fU0RJT19HRVRfSVQgIChfX0lOU1RBTkNFX18sIF9fSU5URVJSVVBUX18pICAoKChfX0lOU1RBTkNFX18pLT5TVEEgJihfX0lOVEVSUlVQVF9fKSkgPT0gKF9fSU5URVJSVVBUX18pKQogCiAvKioKICAgKiBAYnJpZWYgIENsZWFycyB0aGUgU0RJTydzIGludGVycnVwdCBwZW5kaW5nIGJpdHMuCi0gICogQHBhcmFtICBfX0lOU1RBTkNFX18gIFBvaW50ZXIgdG8gU0RJTyByZWdpc3RlciBiYXNlIAotICAqIEBwYXJhbSAgX19JTlRFUlJVUFRfXyBzcGVjaWZpZXMgdGhlIGludGVycnVwdCBwZW5kaW5nIGJpdCB0byBjbGVhci4gCisgICogQHBhcmFtICBfX0lOU1RBTkNFX18gOiBQb2ludGVyIHRvIFNESU8gcmVnaXN0ZXIgYmFzZSAKKyAgKiBAcGFyYW0gIF9fSU5URVJSVVBUX186IHNwZWNpZmllcyB0aGUgaW50ZXJydXB0IHBlbmRpbmcgYml0IHRvIGNsZWFyLiAKICAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9yIGEgY29tYmluYXRpb24gb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAgICogICAgICAgICAgICBAYXJnIFNESU9fSVRfQ0NSQ0ZBSUw6IENvbW1hbmQgcmVzcG9uc2UgcmVjZWl2ZWQgKENSQyBjaGVjayBmYWlsZWQpIGludGVycnVwdAogICAqICAgICAgICAgICAgQGFyZyBTRElPX0lUX0RDUkNGQUlMOiBEYXRhIGJsb2NrIHNlbnQvcmVjZWl2ZWQgKENSQyBjaGVjayBmYWlsZWQpIGludGVycnVwdApAQCAtOTA0LDcxICs5MTUsNjkgQEAKICAgKiAgICAgICAgICAgIEBhcmcgU0RJT19JVF9SWE9WRVJSOiAgUmVjZWl2ZWQgRklGTyBvdmVycnVuIGVycm9yIGludGVycnVwdAogICAqICAgICAgICAgICAgQGFyZyBTRElPX0lUX0NNRFJFTkQ6ICBDb21tYW5kIHJlc3BvbnNlIHJlY2VpdmVkIChDUkMgY2hlY2sgcGFzc2VkKSBpbnRlcnJ1cHQKICAgKiAgICAgICAgICAgIEBhcmcgU0RJT19JVF9DTURTRU5UOiAgQ29tbWFuZCBzZW50IChubyByZXNwb25zZSByZXF1aXJlZCkgaW50ZXJydXB0Ci0gICogICAgICAgICAgICBAYXJnIFNESU9fSVRfREFUQUVORDogIERhdGEgZW5kIChkYXRhIGNvdW50ZXIsIFNESU9fRENPVU5ULCBpcyB6ZXJvKSBpbnRlcnJ1cHQKLSAgKiAgICAgICAgICAgIEBhcmcgU0RJT19JVF9TRElPSVQ6ICAgU0QgSS9PIGludGVycnVwdCByZWNlaXZlZCBpbnRlcnJ1cHQKKyAgKiAgICAgICAgICAgIEBhcmcgU0RJT19JVF9EQVRBRU5EOiAgRGF0YSBlbmQgKGRhdGEgY291bnRlciwgREFUQUNPVU5ULCBpcyB6ZXJvKSBpbnRlcnJ1cHQKKyAgKiAgICAgICAgICAgIEBhcmcgU0RJT19JVF9TRElPSVQ6ICAgU0RJTyBpbnRlcnJ1cHQgcmVjZWl2ZWQgaW50ZXJydXB0CiAgICogQHJldHZhbCBOb25lCiAgICovCiAjZGVmaW5lIF9fU0RJT19DTEVBUl9JVChfX0lOU1RBTkNFX18sIF9fSU5URVJSVVBUX18pICAoKF9fSU5TVEFOQ0VfXyktPklDUiA9IChfX0lOVEVSUlVQVF9fKSkKIAogLyoqCiAgICogQGJyaWVmICBFbmFibGUgU3RhcnQgdGhlIFNEIEkvTyBSZWFkIFdhaXQgb3BlcmF0aW9uLgotICAqIEBwYXJhbSAgX19JTlNUQU5DRV9fICBQb2ludGVyIHRvIFNESU8gcmVnaXN0ZXIgYmFzZSAgCisgICogQHBhcmFtICBfX0lOU1RBTkNFX18gOiBQb2ludGVyIHRvIFNESU8gcmVnaXN0ZXIgYmFzZSAgCiAgICogQHJldHZhbCBOb25lCi0gICovICAKKyAgKi8KICNkZWZpbmUgX19TRElPX1NUQVJUX1JFQURXQUlUX0VOQUJMRShfX0lOU1RBTkNFX18pICAoKihfX0lPIHVpbnQzMl90ICopIERDVFJMX1JXU1RBUlRfQkIgPSBFTkFCTEUpCiAKIC8qKgogICAqIEBicmllZiAgRGlzYWJsZSBTdGFydCB0aGUgU0QgSS9PIFJlYWQgV2FpdCBvcGVyYXRpb25zLgotICAqIEBwYXJhbSAgX19JTlNUQU5DRV9fICBQb2ludGVyIHRvIFNESU8gcmVnaXN0ZXIgYmFzZSAgIAorICAqIEBwYXJhbSAgX19JTlNUQU5DRV9fIDogUG9pbnRlciB0byBTRElPIHJlZ2lzdGVyIGJhc2UgICAKICAgKiBAcmV0dmFsIE5vbmUKLSAgKi8gIAorICAqLwogI2RlZmluZSBfX1NESU9fU1RBUlRfUkVBRFdBSVRfRElTQUJMRShfX0lOU1RBTkNFX18pICAoKihfX0lPIHVpbnQzMl90ICopIERDVFJMX1JXU1RBUlRfQkIgPSBESVNBQkxFKQogCiAvKioKICAgKiBAYnJpZWYgIEVuYWJsZSBTdGFydCB0aGUgU0QgSS9PIFJlYWQgV2FpdCBvcGVyYXRpb24uCi0gICogQHBhcmFtICBfX0lOU1RBTkNFX18gIFBvaW50ZXIgdG8gU0RJTyByZWdpc3RlciBiYXNlICAgCisgICogQHBhcmFtICBfX0lOU1RBTkNFX18gOiBQb2ludGVyIHRvIFNESU8gcmVnaXN0ZXIgYmFzZSAgIAogICAqIEByZXR2YWwgTm9uZQotICAqLyAgCisgICovCiAjZGVmaW5lIF9fU0RJT19TVE9QX1JFQURXQUlUX0VOQUJMRShfX0lOU1RBTkNFX18pICAoKihfX0lPIHVpbnQzMl90ICopIERDVFJMX1JXU1RPUF9CQiA9IEVOQUJMRSkKIAogLyoqCiAgICogQGJyaWVmICBEaXNhYmxlIFN0b3AgdGhlIFNEIEkvTyBSZWFkIFdhaXQgb3BlcmF0aW9ucy4KLSAgKiBAcGFyYW0gIF9fSU5TVEFOQ0VfXyAgUG9pbnRlciB0byBTRElPIHJlZ2lzdGVyIGJhc2UgIAorICAqIEBwYXJhbSAgX19JTlNUQU5DRV9fIDogUG9pbnRlciB0byBTRElPIHJlZ2lzdGVyIGJhc2UgIAogICAqIEByZXR2YWwgTm9uZQotICAqLyAgCisgICovCiAjZGVmaW5lIF9fU0RJT19TVE9QX1JFQURXQUlUX0RJU0FCTEUoX19JTlNUQU5DRV9fKSAgKCooX19JTyB1aW50MzJfdCAqKSBEQ1RSTF9SV1NUT1BfQkIgPSBESVNBQkxFKQogCiAvKioKICAgKiBAYnJpZWYgIEVuYWJsZSB0aGUgU0QgSS9PIE1vZGUgT3BlcmF0aW9uLgotICAqIEBwYXJhbSAgX19JTlNUQU5DRV9fICBQb2ludGVyIHRvIFNESU8gcmVnaXN0ZXIgYmFzZSAgIAorICAqIEBwYXJhbSAgX19JTlNUQU5DRV9fIDogUG9pbnRlciB0byBTRElPIHJlZ2lzdGVyIGJhc2UgICAKICAgKiBAcmV0dmFsIE5vbmUKLSAgKi8gIAorICAqLwogI2RlZmluZSBfX1NESU9fT1BFUkFUSU9OX0VOQUJMRShfX0lOU1RBTkNFX18pICAoKihfX0lPIHVpbnQzMl90ICopIERDVFJMX1NESU9FTl9CQiA9IEVOQUJMRSkKIAogLyoqCiAgICogQGJyaWVmICBEaXNhYmxlIHRoZSBTRCBJL08gTW9kZSBPcGVyYXRpb24uCi0gICogQHBhcmFtICBfX0lOU1RBTkNFX18gIFBvaW50ZXIgdG8gU0RJTyByZWdpc3RlciBiYXNlIAorICAqIEBwYXJhbSAgX19JTlNUQU5DRV9fIDogUG9pbnRlciB0byBTRElPIHJlZ2lzdGVyIGJhc2UgCiAgICogQHJldHZhbCBOb25lCi0gICovICAKKyAgKi8KICNkZWZpbmUgX19TRElPX09QRVJBVElPTl9ESVNBQkxFKF9fSU5TVEFOQ0VfXykgICgqKF9fSU8gdWludDMyX3QgKikgRENUUkxfU0RJT0VOX0JCID0gRElTQUJMRSkKIAogLyoqCiAgICogQGJyaWVmICBFbmFibGUgdGhlIFNEIEkvTyBTdXNwZW5kIGNvbW1hbmQgc2VuZGluZy4KLSAgKiBAcGFyYW0gIF9fSU5TVEFOQ0VfXyAgUG9pbnRlciB0byBTRElPIHJlZ2lzdGVyIGJhc2UgIAorICAqIEBwYXJhbSAgX19JTlNUQU5DRV9fIDogUG9pbnRlciB0byBTRElPIHJlZ2lzdGVyIGJhc2UgIAogICAqIEByZXR2YWwgTm9uZQotICAqLyAgCisgICovCiAjZGVmaW5lIF9fU0RJT19TVVNQRU5EX0NNRF9FTkFCTEUoX19JTlNUQU5DRV9fKSAgKCooX19JTyB1aW50MzJfdCAqKSBDTURfU0RJT1NVU1BFTkRfQkIgPSBFTkFCTEUpCiAKIC8qKgogICAqIEBicmllZiAgRGlzYWJsZSB0aGUgU0QgSS9PIFN1c3BlbmQgY29tbWFuZCBzZW5kaW5nLgotICAqIEBwYXJhbSAgX19JTlNUQU5DRV9fICBQb2ludGVyIHRvIFNESU8gcmVnaXN0ZXIgYmFzZSAgCisgICogQHBhcmFtICBfX0lOU1RBTkNFX18gOiBQb2ludGVyIHRvIFNESU8gcmVnaXN0ZXIgYmFzZSAgCiAgICogQHJldHZhbCBOb25lCi0gICovICAKKyAgKi8KICNkZWZpbmUgX19TRElPX1NVU1BFTkRfQ01EX0RJU0FCTEUoX19JTlNUQU5DRV9fKSAgKCooX19JTyB1aW50MzJfdCAqKSBDTURfU0RJT1NVU1BFTkRfQkIgPSBESVNBQkxFKQotICAgICAgCi0jaWYgZGVmaW5lZChTVE0zMkY0MDV4eCkgfHwgZGVmaW5lZChTVE0zMkY0MTV4eCkgfHwgZGVmaW5lZChTVE0zMkY0MDd4eCkgfHwgZGVmaW5lZChTVE0zMkY0MTd4eCkgfHxcCi0gICAgZGVmaW5lZChTVE0zMkY0Mjd4eCkgfHwgZGVmaW5lZChTVE0zMkY0Mzd4eCkgfHwgZGVmaW5lZChTVE0zMkY0Mjl4eCkgfHwgZGVmaW5lZChTVE0zMkY0Mzl4eCkgfHxcCi0gICAgZGVmaW5lZChTVE0zMkY0MDF4QykgfHwgZGVmaW5lZChTVE0zMkY0MDF4RSkgfHwgZGVmaW5lZChTVE0zMkY0MTF4RSkKKworI2lmIGRlZmluZWQoU0RJT19DTURfQ0VBVEFDTUQpCiAvKioKICAgKiBAYnJpZWYgIEVuYWJsZSB0aGUgY29tbWFuZCBjb21wbGV0aW9uIHNpZ25hbC4KICAgKiBAcmV0dmFsIE5vbmUKQEAgLTEwMDQsOSArMTAxMyw4IEBACiAgICogQHJldHZhbCBOb25lCiAgICovICAKICNkZWZpbmUgX19TRElPX0NFQVRBX1NFTkRDTURfRElTQUJMRSgpICAgKCooX19JTyB1aW50MzJfdCAqKSBDTURfQVRBQ01EX0JCID0gRElTQUJMRSkKLSNlbmRpZiAvKiBTVE0zMkY0MDV4eCB8fCBTVE0zMkY0MTV4eCB8fCBTVE0zMkY0MDd4eCB8fCBTVE0zMkY0MTd4eCB8fCBTVE0zMkY0MDF4QyB8fCBTVE0zMkY0MDF4RSB8fCBTVE0zMkY0MTF4RSB8fFwKLSAgICAgICAgICBTVE0zMkY0Mjd4eCB8fCBTVE0zMkY0Mzd4eCB8fCBTVE0zMkY0Mjl4eCB8fCBTVE0zMkY0Mzl4eCAqLwotCisgICAKKyNlbmRpZgogLyoqCiAgICogQH0KICAgKi8KQEAgLTEwNjYsNyArMTA3NCw5IEBACiB1aW50MzJfdCBTRE1NQ19DbWRSZWFkTXVsdGlCbG9jayhTRElPX1R5cGVEZWYgKlNESU94LCB1aW50MzJfdCBSZWFkQWRkKTsKIHVpbnQzMl90IFNETU1DX0NtZFdyaXRlU2luZ2xlQmxvY2soU0RJT19UeXBlRGVmICpTRElPeCwgdWludDMyX3QgV3JpdGVBZGQpOwogdWludDMyX3QgU0RNTUNfQ21kV3JpdGVNdWx0aUJsb2NrKFNESU9fVHlwZURlZiAqU0RJT3gsIHVpbnQzMl90IFdyaXRlQWRkKTsKK3VpbnQzMl90IFNETU1DX0NtZEVyYXNlU3RhcnRBZGQoU0RJT19UeXBlRGVmICpTRElPeCwgdWludDMyX3QgU3RhcnRBZGQpOwogdWludDMyX3QgU0RNTUNfQ21kU0RFcmFzZVN0YXJ0QWRkKFNESU9fVHlwZURlZiAqU0RJT3gsIHVpbnQzMl90IFN0YXJ0QWRkKTsKK3VpbnQzMl90IFNETU1DX0NtZEVyYXNlRW5kQWRkKFNESU9fVHlwZURlZiAqU0RJT3gsIHVpbnQzMl90IEVuZEFkZCk7CiB1aW50MzJfdCBTRE1NQ19DbWRTREVyYXNlRW5kQWRkKFNESU9fVHlwZURlZiAqU0RJT3gsIHVpbnQzMl90IEVuZEFkZCk7CiB1aW50MzJfdCBTRE1NQ19DbWRFcmFzZShTRElPX1R5cGVEZWYgKlNESU94KTsKIHVpbnQzMl90IFNETU1DX0NtZFN0b3BUcmFuc2ZlcihTRElPX1R5cGVEZWYgKlNESU94KTsKQEAgLTEwNzQsNyArMTA4NCw3IEBACiB1aW50MzJfdCBTRE1NQ19DbWRHb0lkbGVTdGF0ZShTRElPX1R5cGVEZWYgKlNESU94KTsKIHVpbnQzMl90IFNETU1DX0NtZE9wZXJDb25kKFNESU9fVHlwZURlZiAqU0RJT3gpOwogdWludDMyX3QgU0RNTUNfQ21kQXBwQ29tbWFuZChTRElPX1R5cGVEZWYgKlNESU94LCB1aW50MzJfdCBBcmd1bWVudCk7Ci11aW50MzJfdCBTRE1NQ19DbWRBcHBPcGVyQ29tbWFuZChTRElPX1R5cGVEZWYgKlNESU94LCB1aW50MzJfdCBTZFR5cGUpOwordWludDMyX3QgU0RNTUNfQ21kQXBwT3BlckNvbW1hbmQoU0RJT19UeXBlRGVmICpTRElPeCwgdWludDMyX3QgQXJndW1lbnQpOwogdWludDMyX3QgU0RNTUNfQ21kQnVzV2lkdGgoU0RJT19UeXBlRGVmICpTRElPeCwgdWludDMyX3QgQnVzV2lkdGgpOwogdWludDMyX3QgU0RNTUNfQ21kU2VuZFNDUihTRElPX1R5cGVEZWYgKlNESU94KTsKIHVpbnQzMl90IFNETU1DX0NtZFNlbmRDSUQoU0RJT19UeXBlRGVmICpTRElPeCk7CkBAIC0xMDgyLDExICsxMDkyLDggQEAKIHVpbnQzMl90IFNETU1DX0NtZFNldFJlbEFkZChTRElPX1R5cGVEZWYgKlNESU94LCB1aW50MTZfdCAqcFJDQSk7CiB1aW50MzJfdCBTRE1NQ19DbWRTZW5kU3RhdHVzKFNESU9fVHlwZURlZiAqU0RJT3gsIHVpbnQzMl90IEFyZ3VtZW50KTsKIHVpbnQzMl90IFNETU1DX0NtZFN0YXR1c1JlZ2lzdGVyKFNESU9fVHlwZURlZiAqU0RJT3gpOwotCiB1aW50MzJfdCBTRE1NQ19DbWRPcENvbmRpdGlvbihTRElPX1R5cGVEZWYgKlNESU94LCB1aW50MzJfdCBBcmd1bWVudCk7CiB1aW50MzJfdCBTRE1NQ19DbWRTd2l0Y2goU0RJT19UeXBlRGVmICpTRElPeCwgdWludDMyX3QgQXJndW1lbnQpOwotdWludDMyX3QgU0RNTUNfQ21kRXJhc2VTdGFydEFkZChTRElPX1R5cGVEZWYgKlNESU94LCB1aW50MzJfdCBTdGFydEFkZCk7Ci11aW50MzJfdCBTRE1NQ19DbWRFcmFzZUVuZEFkZChTRElPX1R5cGVEZWYgKlNESU94LCB1aW50MzJfdCBFbmRBZGQpOwogCiAvKioKICAgKiBAfQpAQCAtMTEwNCwxNCArMTExMSwxMiBAQAogICAqIEB9CiAgICovCiAKLSNlbmRpZiAvKiBTVE0zMkY0MDV4eCB8fCBTVE0zMkY0MTV4eCB8fCBTVE0zMkY0MDd4eCB8fCBTVE0zMkY0MTd4eCB8fCBTVE0zMkY0Mjd4eCB8fCBTVE0zMkY0Mzd4eCB8fCBTVE0zMkY0Mjl4eCB8fCBTVE0zMkY0Mzl4eCB8fAotICAgICAgICAgIFNUTTMyRjQwMXhDIHx8IFNUTTMyRjQwMXhFIHx8IFNUTTMyRjQxMXhFIHx8IFNUTTMyRjQ0Nnh4IHx8IFNUTTMyRjQ2OXh4IHx8IFNUTTMyRjQ3OXh4IHx8IFNUTTMyRjQxMlp4IHx8IFNUTTMyRjQxMlZ4IHx8Ci0gICAgICAgICAgU1RNMzJGNDEyUnggfHwgU1RNMzJGNDEyQ3ggfHwgU1RNMzJGNDEzeHggfHwgU1RNMzJGNDIzeHggKi8KKyNlbmRpZiAvKiBTRElPICovCiAKICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlmCiAKLSNlbmRpZiAvKiBfX1NUTTMyRjR4eF9MTF9TRE1NQ19IICovCisjZW5kaWYgLyogU1RNMzJGNHh4X0xMX1NETU1DX0ggKi8KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKiAoQykgQ09QWVJJR0hUIFNUTWljcm9lbGVjdHJvbmljcyAqKioqKkVORCBPRiBGSUxFKioqKi8KZGlmZiAtLWdpdCBhL0luYy9zdG0zMmY0eHhfbGxfc3BpLmggYi9JbmMvc3RtMzJmNHh4X2xsX3NwaS5oCmluZGV4IDEzZDE4ODMuLmI4YTMzMGMgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmY0eHhfbGxfc3BpLmgKKysrIGIvSW5jL3N0bTMyZjR4eF9sbF9zcGkuaApAQCAtMTA1Niw3ICsxMDU2LDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9TUElfRE1BX0dldFJlZ0FkZHIoU1BJX1R5cGVEZWYgKlNQSXgpCiB7Ci0gIHJldHVybiAodWludDMyX3QpICYgKFNQSXgtPkRSKTsKKyAgcmV0dXJuICh1aW50MzJfdCkgJihTUEl4LT5EUik7CiB9CiAKIC8qKgpAQCAtMTEwMyw3ICsxMTAzLDcgQEAKICAgKnNwaWRyID0gVHhEYXRhOwogI2Vsc2UKICAgKigoX19JTyB1aW50OF90ICopJlNQSXgtPkRSKSA9IFR4RGF0YTsKLSNlbmRpZgorI2VuZGlmIC8qIF9fR05VQ19fICovCiB9CiAKIC8qKgpAQCAtMTEyMCw3ICsxMTIwLDcgQEAKICAgKnNwaWRyID0gVHhEYXRhOwogI2Vsc2UKICAgU1BJeC0+RFIgPSBUeERhdGE7Ci0jZW5kaWYKKyNlbmRpZiAvKiBfX0dOVUNfXyAqLwogfQogCiAvKioKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmY0eHhfbGxfdGltLmggYi9JbmMvc3RtMzJmNHh4X2xsX3RpbS5oCmluZGV4IGZjZGZkNmUuLjU3ZDJlYzcgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmY0eHhfbGxfdGltLmgKKysrIGIvSW5jL3N0bTMyZjR4eF9sbF90aW0uaApAQCAtMTQ3LDEyICsxNDcsMTIgQEAKICAgKiBAcmV0dmFsIG5vbmUKICAgKi8KICNkZWZpbmUgVElNX0dFVF9DSEFOTkVMX0lOREVYKCBfX0NIQU5ORUxfXykgXAotKCgoX19DSEFOTkVMX18pID09IExMX1RJTV9DSEFOTkVMX0NIMSkgPyAwVSA6XAotKChfX0NIQU5ORUxfXykgPT0gTExfVElNX0NIQU5ORUxfQ0gxTikgPyAxVSA6XAotKChfX0NIQU5ORUxfXykgPT0gTExfVElNX0NIQU5ORUxfQ0gyKSA/IDJVIDpcCi0oKF9fQ0hBTk5FTF9fKSA9PSBMTF9USU1fQ0hBTk5FTF9DSDJOKSA/IDNVIDpcCi0oKF9fQ0hBTk5FTF9fKSA9PSBMTF9USU1fQ0hBTk5FTF9DSDMpID8gNFUgOlwKLSgoX19DSEFOTkVMX18pID09IExMX1RJTV9DSEFOTkVMX0NIM04pID8gNVUgOiA2VSkKKyAgKCgoX19DSEFOTkVMX18pID09IExMX1RJTV9DSEFOTkVMX0NIMSkgPyAwVSA6XAorICAgKChfX0NIQU5ORUxfXykgPT0gTExfVElNX0NIQU5ORUxfQ0gxTikgPyAxVSA6XAorICAgKChfX0NIQU5ORUxfXykgPT0gTExfVElNX0NIQU5ORUxfQ0gyKSA/IDJVIDpcCisgICAoKF9fQ0hBTk5FTF9fKSA9PSBMTF9USU1fQ0hBTk5FTF9DSDJOKSA/IDNVIDpcCisgICAoKF9fQ0hBTk5FTF9fKSA9PSBMTF9USU1fQ0hBTk5FTF9DSDMpID8gNFUgOlwKKyAgICgoX19DSEFOTkVMX18pID09IExMX1RJTV9DSEFOTkVMX0NIM04pID8gNVUgOiA2VSkKIAogLyoqIEBicmllZiAgQ2FsY3VsYXRlIHRoZSBkZWFkdGltZSBzYW1wbGluZyBwZXJpb2QoaW4gcHMpLgogICAqIEBwYXJhbSAgX19USU1DTEtfXyB0aW1lciBpbnB1dCBjbG9jayBmcmVxdWVuY3kgKGluIEh6KS4KQEAgLTE2Myw5ICsxNjMsOSBAQAogICAqIEByZXR2YWwgbm9uZQogICAqLwogI2RlZmluZSBUSU1fQ0FMQ19EVFMoX19USU1DTEtfXywgX19DS0RfXykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAoKChfX0NLRF9fKSA9PSBMTF9USU1fQ0xPQ0tESVZJU0lPTl9ESVYxKSA/ICgodWludDY0X3QpMTAwMDAwMDAwMDAwMFUvKF9fVElNQ0xLX18pKSAgICAgICAgIDogXAotICAgICAoKF9fQ0tEX18pID09IExMX1RJTV9DTE9DS0RJVklTSU9OX0RJVjIpID8gKCh1aW50NjRfdCkxMDAwMDAwMDAwMDAwVS8oKF9fVElNQ0xLX18pID4+IDFVKSkgOiBcCi0gICAgICgodWludDY0X3QpMTAwMDAwMDAwMDAwMFUvKChfX1RJTUNMS19fKSA+PiAyVSkpKQorICAoKChfX0NLRF9fKSA9PSBMTF9USU1fQ0xPQ0tESVZJU0lPTl9ESVYxKSA/ICgodWludDY0X3QpMTAwMDAwMDAwMDAwMFUvKF9fVElNQ0xLX18pKSAgICAgICAgIDogXAorICAgKChfX0NLRF9fKSA9PSBMTF9USU1fQ0xPQ0tESVZJU0lPTl9ESVYyKSA/ICgodWludDY0X3QpMTAwMDAwMDAwMDAwMFUvKChfX1RJTUNMS19fKSA+PiAxVSkpIDogXAorICAgKCh1aW50NjRfdCkxMDAwMDAwMDAwMDAwVS8oKF9fVElNQ0xLX18pID4+IDJVKSkpCiAvKioKICAgKiBAfQogICAqLwpAQCAtODc4LDYgKzg3OCw3IEBACiAgICogQHsKICAgKi8KICNkZWZpbmUgTExfVElNX1RJTTJfSVRSMV9STVBfVElNOF9UUkdPICAgIFRJTTJfT1JfUk1QX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRJTTJfSVRSMSBpcyBjb25uZWN0ZWQgdG8gVElNOF9UUkdPICovCisjZGVmaW5lIExMX1RJTV9USU0yX0lUUjFfUk1QX0VUSF9QVFAgICAgICAoVElNX09SX0lUUjFfUk1QXzAgfCBUSU0yX09SX1JNUF9NQVNLKSAgLyohPCBUSU0yX0lUUjEgaXMgY29ubmVjdGVkIHRvIEVUSF9QVFAgKi8KICNkZWZpbmUgTExfVElNX1RJTTJfSVRSMV9STVBfT1RHX0ZTX1NPRiAgIChUSU1fT1JfSVRSMV9STVBfMSB8IFRJTTJfT1JfUk1QX01BU0spICAvKiE8IFRJTTJfSVRSMSBpcyBjb25uZWN0ZWQgdG8gT1RHX0ZTIFNPRiAqLwogI2RlZmluZSBMTF9USU1fVElNMl9JVFIxX1JNUF9PVEdfSFNfU09GICAgKFRJTV9PUl9JVFIxX1JNUCB8IFRJTTJfT1JfUk1QX01BU0spICAgIC8qITwgVElNMl9JVFIxIGlzIGNvbm5lY3RlZCB0byBPVEdfSFMgU09GICovCiAvKioKQEAgLTg5OSw3ICs5MDAsMTEgQEAKICAgKiBAewogICAqLwogI2RlZmluZSBMTF9USU1fVElNMTFfVEkxX1JNUF9HUElPICAgICAgICBUSU0xMV9PUl9STVBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUSU0xMSBjaGFubmVsIDEgaXMgY29ubmVjdGVkIHRvIEdQSU8gKi8KLSNkZWZpbmUgTExfVElNX1RJTTExX1RJMV9STVBfR1BJTzEgICAgICAgKFRJTV9PUl9USTFfUk1QXzAgfCBUSU0xMV9PUl9STVBfTUFTSykgICAgIC8qITwgVElNMTEgY2hhbm5lbCAxIGlzIGNvbm5lY3RlZCB0byBHUElPICovCisjaWYgZGVmaW5lZChTUERJRlJYKQorI2RlZmluZSBMTF9USU1fVElNMTFfVEkxX1JNUF9TUERJRlJYICAgICAoVElNX09SX1RJMV9STVBfMCB8IFRJTTExX09SX1JNUF9NQVNLKSAgICAgLyohPCBUSU0xMSBjaGFubmVsIDEgaXMgY29ubmVjdGVkIHRvIFNQRElGUlggKi8KKyNlbHNlCisjZGVmaW5lIExMX1RJTV9USU0xMV9USTFfUk1QX0dQSU8xICAgICAgIChUSU1fT1JfVEkxX1JNUF8wIHwgVElNMTFfT1JfUk1QX01BU0spICAgICAvKiE8IFRJTTExIGNoYW5uZWwgMSBpcyBjb25uZWN0ZWQgdG8gR1BJTyAqLyAgCisjZW5kaWYKICNkZWZpbmUgTExfVElNX1RJTTExX1RJMV9STVBfR1BJTzIgICAgICAgKFRJTV9PUl9USTFfUk1QICAgfCBUSU0xMV9PUl9STVBfTUFTSykgICAgIC8qITwgVElNMTEgY2hhbm5lbCAxIGlzIGNvbm5lY3RlZCB0byBHUElPICovCiAjZGVmaW5lIExMX1RJTV9USU0xMV9USTFfUk1QX0hTRV9SVEMgICAgIChUSU1fT1JfVEkxX1JNUF8xIHwgVElNMTFfT1JfUk1QX01BU0spICAgICAvKiE8IFRJTTExIGNoYW5uZWwgMSBpcyBjb25uZWN0ZWQgdG8gSFNFX1JUQyAqLwogLyoqCkBAIC05NTQsMTEgKzk1OSwxMSBAQAogICAqIEByZXR2YWwgRFRHWzA6N10KICAgKi8KICNkZWZpbmUgX19MTF9USU1fQ0FMQ19ERUFEVElNRShfX1RJTUNMS19fLCBfX0NLRF9fLCBfX0RUX18pICBcCi0gICAgKCAoKCh1aW50NjRfdCkoKF9fRFRfXykqMTAwMFUpKSA8ICgoRFRfREVMQVlfMSsxVSkgKiBUSU1fQ0FMQ19EVFMoKF9fVElNQ0xLX18pLCAoX19DS0RfXykpKSkgICAgICAgICAgID8gKHVpbnQ4X3QpKCgodWludDY0X3QpKChfX0RUX18pKjEwMDBVKSAvIFRJTV9DQUxDX0RUUygoX19USU1DTEtfXyksIChfX0NLRF9fKSkpICAmIERUX0RFTEFZXzEpIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICgoKHVpbnQ2NF90KSgoX19EVF9fKSoxMDAwVSkpIDwgKCg2NFUgKyAoRFRfREVMQVlfMisxVSkpICogMlUgKiBUSU1fQ0FMQ19EVFMoKF9fVElNQ0xLX18pLCAoX19DS0RfXykpKSkgID8gKHVpbnQ4X3QpKERUX1JBTkdFXzIgfCAoKHVpbnQ4X3QpKCh1aW50OF90KSgoKCh1aW50NjRfdCkoKF9fRFRfXykqMTAwMFUpKS8gVElNX0NBTENfRFRTKChfX1RJTUNMS19fKSwgKF9fQ0tEX18pKSkgPj4gMVUpIC0gKHVpbnQ4X3QpIDY0KSAmIERUX0RFTEFZXzIpKSA6XAotICAgICAgKCgodWludDY0X3QpKChfX0RUX18pKjEwMDBVKSkgPCAoKDMyVSArIChEVF9ERUxBWV8zKzFVKSkgKiA4VSAqIFRJTV9DQUxDX0RUUygoX19USU1DTEtfXyksIChfX0NLRF9fKSkpKSAgPyAodWludDhfdCkoRFRfUkFOR0VfMyB8ICgodWludDhfdCkoKHVpbnQ4X3QpKCgoKCh1aW50NjRfdCkoX19EVF9fKSoxMDAwVSkpLyBUSU1fQ0FMQ19EVFMoKF9fVElNQ0xLX18pLCAoX19DS0RfXykpKSA+PiAzVSkgLSAodWludDhfdCkgMzIpICYgRFRfREVMQVlfMykpIDpcCi0gICAgICAoKCh1aW50NjRfdCkoKF9fRFRfXykqMTAwMFUpKSA8ICgoMzJVICsgKERUX0RFTEFZXzQrMVUpKSAqIDE2VSAqIFRJTV9DQUxDX0RUUygoX19USU1DTEtfXyksIChfX0NLRF9fKSkpKSA/ICh1aW50OF90KShEVF9SQU5HRV80IHwgKCh1aW50OF90KSgodWludDhfdCkoKCgoKHVpbnQ2NF90KShfX0RUX18pKjEwMDBVKSkvIFRJTV9DQUxDX0RUUygoX19USU1DTEtfXyksIChfX0NLRF9fKSkpID4+IDRVKSAtICh1aW50OF90KSAzMikgJiBEVF9ERUxBWV80KSkgOlwKLSAgICAgICAwVSkKKyAgKCAoKCh1aW50NjRfdCkoKF9fRFRfXykqMTAwMFUpKSA8ICgoRFRfREVMQVlfMSsxVSkgKiBUSU1fQ0FMQ19EVFMoKF9fVElNQ0xLX18pLCAoX19DS0RfXykpKSkgICAgPyAodWludDhfdCkoKCh1aW50NjRfdCkoKF9fRFRfXykqMTAwMFUpIC8gVElNX0NBTENfRFRTKChfX1RJTUNMS19fKSwgKF9fQ0tEX18pKSkgICYgRFRfREVMQVlfMSkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICgoKHVpbnQ2NF90KSgoX19EVF9fKSoxMDAwVSkpIDwgKCg2NFUgKyAoRFRfREVMQVlfMisxVSkpICogMlUgKiBUSU1fQ0FMQ19EVFMoKF9fVElNQ0xLX18pLCAoX19DS0RfXykpKSkgID8gKHVpbnQ4X3QpKERUX1JBTkdFXzIgfCAoKHVpbnQ4X3QpKCh1aW50OF90KSgoKCh1aW50NjRfdCkoKF9fRFRfXykqMTAwMFUpKS8gVElNX0NBTENfRFRTKChfX1RJTUNMS19fKSwgKF9fQ0tEX18pKSkgPj4gMVUpIC0gKHVpbnQ4X3QpIDY0KSAmIERUX0RFTEFZXzIpKSA6XAorICAgICgoKHVpbnQ2NF90KSgoX19EVF9fKSoxMDAwVSkpIDwgKCgzMlUgKyAoRFRfREVMQVlfMysxVSkpICogOFUgKiBUSU1fQ0FMQ19EVFMoKF9fVElNQ0xLX18pLCAoX19DS0RfXykpKSkgID8gKHVpbnQ4X3QpKERUX1JBTkdFXzMgfCAoKHVpbnQ4X3QpKCh1aW50OF90KSgoKCgodWludDY0X3QpKF9fRFRfXykqMTAwMFUpKS8gVElNX0NBTENfRFRTKChfX1RJTUNMS19fKSwgKF9fQ0tEX18pKSkgPj4gM1UpIC0gKHVpbnQ4X3QpIDMyKSAmIERUX0RFTEFZXzMpKSA6XAorICAgICgoKHVpbnQ2NF90KSgoX19EVF9fKSoxMDAwVSkpIDwgKCgzMlUgKyAoRFRfREVMQVlfNCsxVSkpICogMTZVICogVElNX0NBTENfRFRTKChfX1RJTUNMS19fKSwgKF9fQ0tEX18pKSkpID8gKHVpbnQ4X3QpKERUX1JBTkdFXzQgfCAoKHVpbnQ4X3QpKCh1aW50OF90KSgoKCgodWludDY0X3QpKF9fRFRfXykqMTAwMFUpKS8gVElNX0NBTENfRFRTKChfX1RJTUNMS19fKSwgKF9fQ0tEX18pKSkgPj4gNFUpIC0gKHVpbnQ4X3QpIDMyKSAmIERUX0RFTEFZXzQpKSA6XAorICAgIDBVKQogCiAvKioKICAgKiBAYnJpZWYgIEhFTFBFUiBtYWNybyBjYWxjdWxhdGluZyB0aGUgcHJlc2NhbGVyIHZhbHVlIHRvIGFjaGlldmUgdGhlIHJlcXVpcmVkIGNvdW50ZXIgY2xvY2sgZnJlcXVlbmN5LgpAQCAtOTY4LDcgKzk3Myw3IEBACiAgICogQHJldHZhbCBQcmVzY2FsZXIgdmFsdWUgIChiZXR3ZWVuIE1pbl9EYXRhPTAgYW5kIE1heF9EYXRhPTY1NTM1KQogICAqLwogI2RlZmluZSBfX0xMX1RJTV9DQUxDX1BTQyhfX1RJTUNMS19fLCBfX0NOVENMS19fKSAgIFwKLSAgICgoKF9fVElNQ0xLX18pID49IChfX0NOVENMS19fKSkgPyAodWludDMyX3QpKCgoX19USU1DTEtfXykvKF9fQ05UQ0xLX18pKSAtIDFVKSA6IDBVKQorICAoKChfX1RJTUNMS19fKSA+PSAoX19DTlRDTEtfXykpID8gKHVpbnQzMl90KSgoKF9fVElNQ0xLX18pLyhfX0NOVENMS19fKSkgLSAxVSkgOiAwVSkKIAogLyoqCiAgICogQGJyaWVmICBIRUxQRVIgbWFjcm8gY2FsY3VsYXRpbmcgdGhlIGF1dG8tcmVsb2FkIHZhbHVlIHRvIGFjaGlldmUgdGhlIHJlcXVpcmVkIG91dHB1dCBzaWduYWwgZnJlcXVlbmN5LgpAQCAtOTc5LDcgKzk4NCw3IEBACiAgICogQHJldHZhbCAgQXV0by1yZWxvYWQgdmFsdWUgIChiZXR3ZWVuIE1pbl9EYXRhPTAgYW5kIE1heF9EYXRhPTY1NTM1KQogICAqLwogI2RlZmluZSBfX0xMX1RJTV9DQUxDX0FSUihfX1RJTUNMS19fLCBfX1BTQ19fLCBfX0ZSRVFfXykgXAotICAgICAoKCgoX19USU1DTEtfXykvKChfX1BTQ19fKSArIDFVKSkgPj0gKF9fRlJFUV9fKSkgPyAoKChfX1RJTUNMS19fKS8oKF9fRlJFUV9fKSAqICgoX19QU0NfXykgKyAxVSkpKSAtIDFVKSA6IDBVKQorICAoKCgoX19USU1DTEtfXykvKChfX1BTQ19fKSArIDFVKSkgPj0gKF9fRlJFUV9fKSkgPyAoKChfX1RJTUNMS19fKS8oKF9fRlJFUV9fKSAqICgoX19QU0NfXykgKyAxVSkpKSAtIDFVKSA6IDBVKQogCiAvKioKICAgKiBAYnJpZWYgIEhFTFBFUiBtYWNybyBjYWxjdWxhdGluZyB0aGUgY29tcGFyZSB2YWx1ZSByZXF1aXJlZCB0byBhY2hpZXZlIHRoZSByZXF1aXJlZCB0aW1lciBvdXRwdXQgY29tcGFyZSBhY3RpdmUvaW5hY3RpdmUgZGVsYXkuCkBAIC05OTAsOCArOTk1LDggQEAKICAgKiBAcmV0dmFsIENvbXBhcmUgdmFsdWUgIChiZXR3ZWVuIE1pbl9EYXRhPTAgYW5kIE1heF9EYXRhPTY1NTM1KQogICAqLwogI2RlZmluZSBfX0xMX1RJTV9DQUxDX0RFTEFZKF9fVElNQ0xLX18sIF9fUFNDX18sIF9fREVMQVlfXykgIFwKLSgodWludDMyX3QpKCgodWludDY0X3QpKF9fVElNQ0xLX18pICogKHVpbnQ2NF90KShfX0RFTEFZX18pKSBcCi0gICAgICAgICAgLyAoKHVpbnQ2NF90KTEwMDAwMDBVICogKHVpbnQ2NF90KSgoX19QU0NfXykgKyAxVSkpKSkKKyAgKCh1aW50MzJfdCkoKCh1aW50NjRfdCkoX19USU1DTEtfXykgKiAodWludDY0X3QpKF9fREVMQVlfXykpIFwKKyAgICAgICAgICAgICAgLyAoKHVpbnQ2NF90KTEwMDAwMDBVICogKHVpbnQ2NF90KSgoX19QU0NfXykgKyAxVSkpKSkKIAogLyoqCiAgICogQGJyaWVmICBIRUxQRVIgbWFjcm8gY2FsY3VsYXRpbmcgdGhlIGF1dG8tcmVsb2FkIHZhbHVlIHRvIGFjaGlldmUgdGhlIHJlcXVpcmVkIHB1bHNlIGR1cmF0aW9uICh3aGVuIHRoZSB0aW1lciBvcGVyYXRlcyBpbiBvbmUgcHVsc2UgbW9kZSkuCkBAIC0xMDAzLDggKzEwMDgsOCBAQAogICAqIEByZXR2YWwgQXV0by1yZWxvYWQgdmFsdWUgIChiZXR3ZWVuIE1pbl9EYXRhPTAgYW5kIE1heF9EYXRhPTY1NTM1KQogICAqLwogI2RlZmluZSBfX0xMX1RJTV9DQUxDX1BVTFNFKF9fVElNQ0xLX18sIF9fUFNDX18sIF9fREVMQVlfXywgX19QVUxTRV9fKSAgXAotICgodWludDMyX3QpKF9fTExfVElNX0NBTENfREVMQVkoKF9fVElNQ0xLX18pLCAoX19QU0NfXyksIChfX1BVTFNFX18pKSBcCi0gICAgICAgICAgICsgX19MTF9USU1fQ0FMQ19ERUxBWSgoX19USU1DTEtfXyksIChfX1BTQ19fKSwgKF9fREVMQVlfXykpKSkKKyAgKCh1aW50MzJfdCkoX19MTF9USU1fQ0FMQ19ERUxBWSgoX19USU1DTEtfXyksIChfX1BTQ19fKSwgKF9fUFVMU0VfXykpIFwKKyAgICAgICAgICAgICAgKyBfX0xMX1RJTV9DQUxDX0RFTEFZKChfX1RJTUNMS19fKSwgKF9fUFNDX18pLCAoX19ERUxBWV9fKSkpKQogCiAvKioKICAgKiBAYnJpZWYgIEhFTFBFUiBtYWNybyByZXRyaWV2aW5nIHRoZSByYXRpbyBvZiB0aGUgaW5wdXQgY2FwdHVyZSBwcmVzY2FsZXIKQEAgLTEwMTcsNyArMTAyMiw3IEBACiAgICogQHJldHZhbCBJbnB1dCBjYXB0dXJlIHByZXNjYWxlciByYXRpbyAoMSwgMiwgNCBvciA4KQogICAqLwogI2RlZmluZSBfX0xMX1RJTV9HRVRfSUNQU0NfUkFUSU8oX19JQ1BTQ19fKSAgXAotICAgKCh1aW50MzJfdCkoMHgwMVUgPDwgKCgoX19JQ1BTQ19fKSA+PiAxNlUpID4+IFRJTV9DQ01SMV9JQzFQU0NfUG9zKSkpCisgICgodWludDMyX3QpKDB4MDFVIDw8ICgoKF9fSUNQU0NfXykgPj4gMTZVKSA+PiBUSU1fQ0NNUjFfSUMxUFNDX1BvcykpKQogCiAKIC8qKgpAQCAtMTE2Niw3ICsxMTcxLDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBTZXQgdGhlIHRpbWVyIGNvdW50ZXIgY291bnRpbmcgbW9kZS4KLSAgKiBAbm90ZSBNYWNybyBAcmVmIElTX1RJTV9DT1VOVEVSX01PREVfU0VMRUNUX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvCisgICogQG5vdGUgTWFjcm8gSVNfVElNX0NPVU5URVJfTU9ERV9TRUxFQ1RfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8KICAgKiAgICAgICBjaGVjayB3aGV0aGVyIG9yIG5vdCB0aGUgY291bnRlciBtb2RlIHNlbGVjdGlvbiBmZWF0dXJlIGlzIHN1cHBvcnRlZAogICAqICAgICAgIGJ5IGEgdGltZXIgaW5zdGFuY2UuCiAgICogQG5vdGUgU3dpdGNoaW5nIGZyb20gQ2VudGVyIEFsaWduZWQgY291bnRlciBtb2RlIHRvIEVkZ2UgY291bnRlciBtb2RlIChvciByZXZlcnNlKQpAQCAtMTE5MCw3ICsxMTk1LDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBHZXQgYWN0dWFsIGNvdW50ZXIgbW9kZS4KLSAgKiBAbm90ZSBNYWNybyBAcmVmIElTX1RJTV9DT1VOVEVSX01PREVfU0VMRUNUX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvCisgICogQG5vdGUgTWFjcm8gSVNfVElNX0NPVU5URVJfTU9ERV9TRUxFQ1RfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8KICAgKiAgICAgICBjaGVjayB3aGV0aGVyIG9yIG5vdCB0aGUgY291bnRlciBtb2RlIHNlbGVjdGlvbiBmZWF0dXJlIGlzIHN1cHBvcnRlZAogICAqICAgICAgIGJ5IGEgdGltZXIgaW5zdGFuY2UuCiAgICogQHJtdG9sbCBDUjEgICAgICAgICAgRElSICAgICAgICAgICBMTF9USU1fR2V0Q291bnRlck1vZGVcbgpAQCAtMTIyNyw3ICsxMjMyLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX1RJTV9EaXNhYmxlQVJSUHJlbG9hZChUSU1fVHlwZURlZiAqVElNeCkKIHsKLSAgQ0xFQVJfQklUKFRJTXgtPkNSMSxUSU1fQ1IxX0FSUEUpOworICBDTEVBUl9CSVQoVElNeC0+Q1IxLCBUSU1fQ1IxX0FSUEUpOwogfQogCiAvKioKQEAgLTEyNDMsNyArMTI0OCw3IEBACiAKIC8qKgogICAqIEBicmllZiAgU2V0IHRoZSBkaXZpc2lvbiByYXRpbyBiZXR3ZWVuIHRoZSB0aW1lciBjbG9jayAgYW5kIHRoZSBzYW1wbGluZyBjbG9jayB1c2VkIGJ5IHRoZSBkZWFkLXRpbWUgZ2VuZXJhdG9ycyAod2hlbiBzdXBwb3J0ZWQpIGFuZCB0aGUgZGlnaXRhbCBmaWx0ZXJzLgotICAqIEBub3RlIE1hY3JvIEByZWYgSVNfVElNX0NMT0NLX0RJVklTSU9OX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrCisgICogQG5vdGUgTWFjcm8gSVNfVElNX0NMT0NLX0RJVklTSU9OX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrCiAgICogICAgICAgd2hldGhlciBvciBub3QgdGhlIGNsb2NrIGRpdmlzaW9uIGZlYXR1cmUgaXMgc3VwcG9ydGVkIGJ5IHRoZSB0aW1lcgogICAqICAgICAgIGluc3RhbmNlLgogICAqIEBybXRvbGwgQ1IxICAgICAgICAgIENLRCAgICAgICAgICAgTExfVElNX1NldENsb2NrRGl2aXNpb24KQEAgLTEyNjEsNyArMTI2Niw3IEBACiAKIC8qKgogICAqIEBicmllZiAgR2V0IHRoZSBhY3R1YWwgZGl2aXNpb24gcmF0aW8gYmV0d2VlbiB0aGUgdGltZXIgY2xvY2sgIGFuZCB0aGUgc2FtcGxpbmcgY2xvY2sgdXNlZCBieSB0aGUgZGVhZC10aW1lIGdlbmVyYXRvcnMgKHdoZW4gc3VwcG9ydGVkKSBhbmQgdGhlIGRpZ2l0YWwgZmlsdGVycy4KLSAgKiBAbm90ZSBNYWNybyBAcmVmIElTX1RJTV9DTE9DS19ESVZJU0lPTl9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjaworICAqIEBub3RlIE1hY3JvIElTX1RJTV9DTE9DS19ESVZJU0lPTl9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjawogICAqICAgICAgIHdoZXRoZXIgb3Igbm90IHRoZSBjbG9jayBkaXZpc2lvbiBmZWF0dXJlIGlzIHN1cHBvcnRlZCBieSB0aGUgdGltZXIKICAgKiAgICAgICBpbnN0YW5jZS4KICAgKiBAcm10b2xsIENSMSAgICAgICAgICBDS0QgICAgICAgICAgIExMX1RJTV9HZXRDbG9ja0RpdmlzaW9uCkBAIC0xMjc4LDcgKzEyODMsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIFNldCB0aGUgY291bnRlciB2YWx1ZS4KLSAgKiBAbm90ZSBNYWNybyBAcmVmIElTX1RJTV8zMkJfQ09VTlRFUl9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjaworICAqIEBub3RlIE1hY3JvIElTX1RJTV8zMkJfQ09VTlRFUl9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjawogICAqICAgICAgIHdoZXRoZXIgb3Igbm90IGEgdGltZXIgaW5zdGFuY2Ugc3VwcG9ydHMgYSAzMiBiaXRzIGNvdW50ZXIuCiAgICogQHJtdG9sbCBDTlQgICAgICAgICAgQ05UICAgICAgICAgICBMTF9USU1fU2V0Q291bnRlcgogICAqIEBwYXJhbSAgVElNeCBUaW1lciBpbnN0YW5jZQpAQCAtMTI5Miw3ICsxMjk3LDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBHZXQgdGhlIGNvdW50ZXIgdmFsdWUuCi0gICogQG5vdGUgTWFjcm8gQHJlZiBJU19USU1fMzJCX0NPVU5URVJfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sKKyAgKiBAbm90ZSBNYWNybyBJU19USU1fMzJCX0NPVU5URVJfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sKICAgKiAgICAgICB3aGV0aGVyIG9yIG5vdCBhIHRpbWVyIGluc3RhbmNlIHN1cHBvcnRzIGEgMzIgYml0cyBjb3VudGVyLgogICAqIEBybXRvbGwgQ05UICAgICAgICAgIENOVCAgICAgICAgICAgTExfVElNX0dldENvdW50ZXIKICAgKiBAcGFyYW0gIFRJTXggVGltZXIgaW5zdGFuY2UKQEAgLTEzNDYsNyArMTM1MSw3IEBACiAvKioKICAgKiBAYnJpZWYgIFNldCB0aGUgYXV0by1yZWxvYWQgdmFsdWUuCiAgICogQG5vdGUgVGhlIGNvdW50ZXIgaXMgYmxvY2tlZCB3aGlsZSB0aGUgYXV0by1yZWxvYWQgdmFsdWUgaXMgbnVsbC4KLSAgKiBAbm90ZSBNYWNybyBAcmVmIElTX1RJTV8zMkJfQ09VTlRFUl9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjaworICAqIEBub3RlIE1hY3JvIElTX1RJTV8zMkJfQ09VTlRFUl9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjawogICAqICAgICAgIHdoZXRoZXIgb3Igbm90IGEgdGltZXIgaW5zdGFuY2Ugc3VwcG9ydHMgYSAzMiBiaXRzIGNvdW50ZXIuCiAgICogQG5vdGUgSGVscGVyIG1hY3JvIEByZWYgX19MTF9USU1fQ0FMQ19BUlIgY2FuIGJlIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBBdXRvUmVsb2FkIHBhcmFtZXRlcgogICAqIEBybXRvbGwgQVJSICAgICAgICAgIEFSUiAgICAgICAgICAgTExfVElNX1NldEF1dG9SZWxvYWQKQEAgLTEzNjIsNyArMTM2Nyw3IEBACiAvKioKICAgKiBAYnJpZWYgIEdldCB0aGUgYXV0by1yZWxvYWQgdmFsdWUuCiAgICogQHJtdG9sbCBBUlIgICAgICAgICAgQVJSICAgICAgICAgICBMTF9USU1fR2V0QXV0b1JlbG9hZAotICAqIEBub3RlIE1hY3JvIEByZWYgSVNfVElNXzMyQl9DT1VOVEVSX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrCisgICogQG5vdGUgTWFjcm8gSVNfVElNXzMyQl9DT1VOVEVSX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrCiAgICogICAgICAgd2hldGhlciBvciBub3QgYSB0aW1lciBpbnN0YW5jZSBzdXBwb3J0cyBhIDMyIGJpdHMgY291bnRlci4KICAgKiBAcGFyYW0gIFRJTXggVGltZXIgaW5zdGFuY2UKICAgKiBAcmV0dmFsIEF1dG8tcmVsb2FkIHZhbHVlCkBAIC0xMzc0LDcgKzEzNzksNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIFNldCB0aGUgcmVwZXRpdGlvbiBjb3VudGVyIHZhbHVlLgotICAqIEBub3RlIE1hY3JvIEByZWYgSVNfVElNX1JFUEVUSVRJT05fQ09VTlRFUl9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjaworICAqIEBub3RlIE1hY3JvIElTX1RJTV9SRVBFVElUSU9OX0NPVU5URVJfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sKICAgKiAgICAgICB3aGV0aGVyIG9yIG5vdCBhIHRpbWVyIGluc3RhbmNlIHN1cHBvcnRzIGEgcmVwZXRpdGlvbiBjb3VudGVyLgogICAqIEBybXRvbGwgUkNSICAgICAgICAgIFJFUCAgICAgICAgICAgTExfVElNX1NldFJlcGV0aXRpb25Db3VudGVyCiAgICogQHBhcmFtICBUSU14IFRpbWVyIGluc3RhbmNlCkBAIC0xMzg4LDcgKzEzOTMsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIEdldCB0aGUgcmVwZXRpdGlvbiBjb3VudGVyIHZhbHVlLgotICAqIEBub3RlIE1hY3JvIEByZWYgSVNfVElNX1JFUEVUSVRJT05fQ09VTlRFUl9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjaworICAqIEBub3RlIE1hY3JvIElTX1RJTV9SRVBFVElUSU9OX0NPVU5URVJfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sKICAgKiAgICAgICB3aGV0aGVyIG9yIG5vdCBhIHRpbWVyIGluc3RhbmNlIHN1cHBvcnRzIGEgcmVwZXRpdGlvbiBjb3VudGVyLgogICAqIEBybXRvbGwgUkNSICAgICAgICAgIFJFUCAgICAgICAgICAgTExfVElNX0dldFJlcGV0aXRpb25Db3VudGVyCiAgICogQHBhcmFtICBUSU14IFRpbWVyIGluc3RhbmNlCkBAIC0xNDExLDcgKzE0MTYsNyBAQAogICAqIEBub3RlIENDeEUsIENDeE5FIGFuZCBPQ3hNIGJpdHMgYXJlIHByZWxvYWRlZCwgYWZ0ZXIgaGF2aW5nIGJlZW4gd3JpdHRlbiwKICAgKiAgICAgICB0aGV5IGFyZSB1cGRhdGVkIG9ubHkgd2hlbiBhIGNvbW11dGF0aW9uIGV2ZW50IChDT00pIG9jY3Vycy4KICAgKiBAbm90ZSBPbmx5IG9uIGNoYW5uZWxzIHRoYXQgaGF2ZSBhIGNvbXBsZW1lbnRhcnkgb3V0cHV0LgotICAqIEBub3RlIE1hY3JvIEByZWYgSVNfVElNX0NPTU1VVEFUSU9OX0VWRU5UX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrCisgICogQG5vdGUgTWFjcm8gSVNfVElNX0NPTU1VVEFUSU9OX0VWRU5UX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrCiAgICogICAgICAgd2hldGhlciBvciBub3QgYSB0aW1lciBpbnN0YW5jZSBpcyBhYmxlIHRvIGdlbmVyYXRlIGEgY29tbXV0YXRpb24gZXZlbnQuCiAgICogQHJtdG9sbCBDUjIgICAgICAgICAgQ0NQQyAgICAgICAgICBMTF9USU1fQ0NfRW5hYmxlUHJlbG9hZAogICAqIEBwYXJhbSAgVElNeCBUaW1lciBpbnN0YW5jZQpAQCAtMTQyNCw3ICsxNDI5LDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBEaXNhYmxlICB0aGUgY2FwdHVyZS9jb21wYXJlIGNvbnRyb2wgYml0cyAoQ0N4RSwgQ0N4TkUgYW5kIE9DeE0pIHByZWxvYWQuCi0gICogQG5vdGUgTWFjcm8gQHJlZiBJU19USU1fQ09NTVVUQVRJT05fRVZFTlRfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sKKyAgKiBAbm90ZSBNYWNybyBJU19USU1fQ09NTVVUQVRJT05fRVZFTlRfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sKICAgKiAgICAgICB3aGV0aGVyIG9yIG5vdCBhIHRpbWVyIGluc3RhbmNlIGlzIGFibGUgdG8gZ2VuZXJhdGUgYSBjb21tdXRhdGlvbiBldmVudC4KICAgKiBAcm10b2xsIENSMiAgICAgICAgICBDQ1BDICAgICAgICAgIExMX1RJTV9DQ19EaXNhYmxlUHJlbG9hZAogICAqIEBwYXJhbSAgVElNeCBUaW1lciBpbnN0YW5jZQpAQCAtMTQzNyw3ICsxNDQyLDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBTZXQgdGhlIHVwZGF0ZWQgc291cmNlIG9mIHRoZSBjYXB0dXJlL2NvbXBhcmUgY29udHJvbCBiaXRzIChDQ3hFLCBDQ3hORSBhbmQgT0N4TSkuCi0gICogQG5vdGUgTWFjcm8gQHJlZiBJU19USU1fQ09NTVVUQVRJT05fRVZFTlRfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sKKyAgKiBAbm90ZSBNYWNybyBJU19USU1fQ09NTVVUQVRJT05fRVZFTlRfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sKICAgKiAgICAgICB3aGV0aGVyIG9yIG5vdCBhIHRpbWVyIGluc3RhbmNlIGlzIGFibGUgdG8gZ2VuZXJhdGUgYSBjb21tdXRhdGlvbiBldmVudC4KICAgKiBAcm10b2xsIENSMiAgICAgICAgICBDQ1VTICAgICAgICAgIExMX1RJTV9DQ19TZXRVcGRhdGUKICAgKiBAcGFyYW0gIFRJTXggVGltZXIgaW5zdGFuY2UKQEAgLTE0ODEsNyArMTQ4Niw3IEBACiAvKioKICAgKiBAYnJpZWYgIFNldCB0aGUgbG9jayBsZXZlbCB0byBmcmVlemUgdGhlCiAgICogICAgICAgICBjb25maWd1cmF0aW9uIG9mIHNldmVyYWwgY2FwdHVyZS9jb21wYXJlIHBhcmFtZXRlcnMuCi0gICogQG5vdGUgTWFjcm8gQHJlZiBJU19USU1fQlJFQUtfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSBNYWNybyBJU19USU1fQlJFQUtfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICB0aGUgbG9jayBtZWNoYW5pc20gaXMgc3VwcG9ydGVkIGJ5IGEgdGltZXIgaW5zdGFuY2UuCiAgICogQHJtdG9sbCBCRFRSICAgICAgICAgTE9DSyAgICAgICAgICBMTF9USU1fQ0NfU2V0TG9ja0xldmVsCiAgICogQHBhcmFtICBUSU14IFRpbWVyIGluc3RhbmNlCkBAIC0xNzM1LDcgKzE3NDAsNyBAQAogLyoqCiAgICogQGJyaWVmICBTZXQgdGhlIElETEUgc3RhdGUgb2YgYW4gb3V0cHV0IGNoYW5uZWwKICAgKiBAbm90ZSBUaGlzIGZ1bmN0aW9uIGlzIHNpZ25pZmljYW50IG9ubHkgZm9yIHRoZSB0aW1lciBpbnN0YW5jZXMKLSAgKiAgICAgICBzdXBwb3J0aW5nIHRoZSBicmVhayBmZWF0dXJlLiBNYWNybyBAcmVmIElTX1RJTV9CUkVBS19JTlNUQU5DRShUSU14KQorICAqICAgICAgIHN1cHBvcnRpbmcgdGhlIGJyZWFrIGZlYXR1cmUuIE1hY3JvIElTX1RJTV9CUkVBS19JTlNUQU5DRShUSU14KQogICAqICAgICAgIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90IGEgdGltZXIgaW5zdGFuY2UgcHJvdmlkZXMKICAgKiAgICAgICBhIGJyZWFrIGlucHV0LgogICAqIEBybXRvbGwgQ1IyICAgICAgICAgT0lTMSAgICAgICAgICBMTF9USU1fT0NfU2V0SWRsZVN0YXRlXG4KQEAgLTE5MjcsNyArMTkzMiw3IEBACiAvKioKICAgKiBAYnJpZWYgIEVuYWJsZSBjbGVhcmluZyB0aGUgb3V0cHV0IGNoYW5uZWwgb24gYW4gZXh0ZXJuYWwgZXZlbnQuCiAgICogQG5vdGUgVGhpcyBmdW5jdGlvbiBjYW4gb25seSBiZSB1c2VkIGluIE91dHB1dCBjb21wYXJlIGFuZCBQV00gbW9kZXMuIEl0IGRvZXMgbm90IHdvcmsgaW4gRm9yY2VkIG1vZGUuCi0gICogQG5vdGUgTWFjcm8gQHJlZiBJU19USU1fT0NYUkVGX0NMRUFSX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIKKyAgKiBAbm90ZSBNYWNybyBJU19USU1fT0NYUkVGX0NMRUFSX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIKICAgKiAgICAgICBvciBub3QgYSB0aW1lciBpbnN0YW5jZSBjYW4gY2xlYXIgdGhlIE9DeFJFRiBzaWduYWwgb24gYW4gZXh0ZXJuYWwgZXZlbnQuCiAgICogQHJtdG9sbCBDQ01SMSAgICAgICAgT0MxQ0UgICAgICAgICAgTExfVElNX09DX0VuYWJsZUNsZWFyXG4KICAgKiAgICAgICAgIENDTVIxICAgICAgICBPQzJDRSAgICAgICAgICBMTF9USU1fT0NfRW5hYmxlQ2xlYXJcbgpAQCAtMTk1MCw3ICsxOTU1LDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBEaXNhYmxlIGNsZWFyaW5nIHRoZSBvdXRwdXQgY2hhbm5lbCBvbiBhbiBleHRlcm5hbCBldmVudC4KLSAgKiBAbm90ZSBNYWNybyBAcmVmIElTX1RJTV9PQ1hSRUZfQ0xFQVJfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlcgorICAqIEBub3RlIE1hY3JvIElTX1RJTV9PQ1hSRUZfQ0xFQVJfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlcgogICAqICAgICAgIG9yIG5vdCBhIHRpbWVyIGluc3RhbmNlIGNhbiBjbGVhciB0aGUgT0N4UkVGIHNpZ25hbCBvbiBhbiBleHRlcm5hbCBldmVudC4KICAgKiBAcm10b2xsIENDTVIxICAgICAgICBPQzFDRSAgICAgICAgICBMTF9USU1fT0NfRGlzYWJsZUNsZWFyXG4KICAgKiAgICAgICAgIENDTVIxICAgICAgICBPQzJDRSAgICAgICAgICBMTF9USU1fT0NfRGlzYWJsZUNsZWFyXG4KQEAgLTE5NzUsNyArMTk4MCw3IEBACiAgICogQGJyaWVmICBJbmRpY2F0ZXMgY2xlYXJpbmcgdGhlIG91dHB1dCBjaGFubmVsIG9uIGFuIGV4dGVybmFsIGV2ZW50IGlzIGVuYWJsZWQgZm9yIHRoZSBvdXRwdXQgY2hhbm5lbC4KICAgKiBAbm90ZSBUaGlzIGZ1bmN0aW9uIGVuYWJsZXMgY2xlYXJpbmcgdGhlIG91dHB1dCBjaGFubmVsIG9uIGFuIGV4dGVybmFsIGV2ZW50LgogICAqIEBub3RlIFRoaXMgZnVuY3Rpb24gY2FuIG9ubHkgYmUgdXNlZCBpbiBPdXRwdXQgY29tcGFyZSBhbmQgUFdNIG1vZGVzLiBJdCBkb2VzIG5vdCB3b3JrIGluIEZvcmNlZCBtb2RlLgotICAqIEBub3RlIE1hY3JvIEByZWYgSVNfVElNX09DWFJFRl9DTEVBUl9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyCisgICogQG5vdGUgTWFjcm8gSVNfVElNX09DWFJFRl9DTEVBUl9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyCiAgICogICAgICAgb3Igbm90IGEgdGltZXIgaW5zdGFuY2UgY2FuIGNsZWFyIHRoZSBPQ3hSRUYgc2lnbmFsIG9uIGFuIGV4dGVybmFsIGV2ZW50LgogICAqIEBybXRvbGwgQ0NNUjEgICAgICAgIE9DMUNFICAgICAgICAgIExMX1RJTV9PQ19Jc0VuYWJsZWRDbGVhclxuCiAgICogICAgICAgICBDQ01SMSAgICAgICAgT0MyQ0UgICAgICAgICAgTExfVElNX09DX0lzRW5hYmxlZENsZWFyXG4KQEAgLTE5OTksNyArMjAwNCw3IEBACiAKIC8qKgogICAqIEBicmllZiAgU2V0IHRoZSBkZWFkLXRpbWUgZGVsYXkgKGRlbGF5IGluc2VydGVkIGJldHdlZW4gdGhlIHJpc2luZyBlZGdlIG9mIHRoZSBPQ3hSRUYgc2lnbmFsIGFuZCB0aGUgcmlzaW5nIGVkZ2Ugb2YgdGhlIE9jeCBhbmQgT0N4TiBzaWduYWxzKS4KLSAgKiBAbm90ZSBNYWNybyBAcmVmIElTX1RJTV9CUkVBS19JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlIE1hY3JvIElTX1RJTV9CUkVBS19JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgIGRlYWQtdGltZSBpbnNlcnRpb24gZmVhdHVyZSBpcyBzdXBwb3J0ZWQgYnkgYSB0aW1lciBpbnN0YW5jZS4KICAgKiBAbm90ZSBIZWxwZXIgbWFjcm8gQHJlZiBfX0xMX1RJTV9DQUxDX0RFQURUSU1FIGNhbiBiZSB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgRGVhZFRpbWUgcGFyYW1ldGVyCiAgICogQHJtdG9sbCBCRFRSICAgICAgICAgRFRHICAgICAgICAgICBMTF9USU1fT0NfU2V0RGVhZFRpbWUKQEAgLTIwMTUsOSArMjAyMCw5IEBACiAvKioKICAgKiBAYnJpZWYgIFNldCBjb21wYXJlIHZhbHVlIGZvciBvdXRwdXQgY2hhbm5lbCAxIChUSU14X0NDUjEpLgogICAqIEBub3RlIEluIDMyLWJpdCB0aW1lciBpbXBsZW1lbnRhdGlvbnMgY29tcGFyZSB2YWx1ZSBjYW4gYmUgYmV0d2VlbiAweDAwMDAwMDAwIGFuZCAweEZGRkZGRkZGLgotICAqIEBub3RlIE1hY3JvIEByZWYgSVNfVElNXzMyQl9DT1VOVEVSX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrCisgICogQG5vdGUgTWFjcm8gSVNfVElNXzMyQl9DT1VOVEVSX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrCiAgICogICAgICAgd2hldGhlciBvciBub3QgYSB0aW1lciBpbnN0YW5jZSBzdXBwb3J0cyBhIDMyIGJpdHMgY291bnRlci4KLSAgKiBAbm90ZSBNYWNybyBAcmVmIElTX1RJTV9DQzFfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSBNYWNybyBJU19USU1fQ0MxX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgb3V0cHV0IGNoYW5uZWwgMSBpcyBzdXBwb3J0ZWQgYnkgYSB0aW1lciBpbnN0YW5jZS4KICAgKiBAcm10b2xsIENDUjEgICAgICAgICBDQ1IxICAgICAgICAgIExMX1RJTV9PQ19TZXRDb21wYXJlQ0gxCiAgICogQHBhcmFtICBUSU14IFRpbWVyIGluc3RhbmNlCkBAIC0yMDMyLDkgKzIwMzcsOSBAQAogLyoqCiAgICogQGJyaWVmICBTZXQgY29tcGFyZSB2YWx1ZSBmb3Igb3V0cHV0IGNoYW5uZWwgMiAoVElNeF9DQ1IyKS4KICAgKiBAbm90ZSBJbiAzMi1iaXQgdGltZXIgaW1wbGVtZW50YXRpb25zIGNvbXBhcmUgdmFsdWUgY2FuIGJlIGJldHdlZW4gMHgwMDAwMDAwMCBhbmQgMHhGRkZGRkZGRi4KLSAgKiBAbm90ZSBNYWNybyBAcmVmIElTX1RJTV8zMkJfQ09VTlRFUl9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjaworICAqIEBub3RlIE1hY3JvIElTX1RJTV8zMkJfQ09VTlRFUl9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjawogICAqICAgICAgIHdoZXRoZXIgb3Igbm90IGEgdGltZXIgaW5zdGFuY2Ugc3VwcG9ydHMgYSAzMiBiaXRzIGNvdW50ZXIuCi0gICogQG5vdGUgTWFjcm8gQHJlZiBJU19USU1fQ0MyX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgTWFjcm8gSVNfVElNX0NDMl9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgIG91dHB1dCBjaGFubmVsIDIgaXMgc3VwcG9ydGVkIGJ5IGEgdGltZXIgaW5zdGFuY2UuCiAgICogQHJtdG9sbCBDQ1IyICAgICAgICAgQ0NSMiAgICAgICAgICBMTF9USU1fT0NfU2V0Q29tcGFyZUNIMgogICAqIEBwYXJhbSAgVElNeCBUaW1lciBpbnN0YW5jZQpAQCAtMjA0OSw5ICsyMDU0LDkgQEAKIC8qKgogICAqIEBicmllZiAgU2V0IGNvbXBhcmUgdmFsdWUgZm9yIG91dHB1dCBjaGFubmVsIDMgKFRJTXhfQ0NSMykuCiAgICogQG5vdGUgSW4gMzItYml0IHRpbWVyIGltcGxlbWVudGF0aW9ucyBjb21wYXJlIHZhbHVlIGNhbiBiZSBiZXR3ZWVuIDB4MDAwMDAwMDAgYW5kIDB4RkZGRkZGRkYuCi0gICogQG5vdGUgTWFjcm8gQHJlZiBJU19USU1fMzJCX0NPVU5URVJfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sKKyAgKiBAbm90ZSBNYWNybyBJU19USU1fMzJCX0NPVU5URVJfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sKICAgKiAgICAgICB3aGV0aGVyIG9yIG5vdCBhIHRpbWVyIGluc3RhbmNlIHN1cHBvcnRzIGEgMzIgYml0cyBjb3VudGVyLgotICAqIEBub3RlIE1hY3JvIEByZWYgSVNfVElNX0NDM19JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlIE1hY3JvIElTX1RJTV9DQzNfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICBvdXRwdXQgY2hhbm5lbCBpcyBzdXBwb3J0ZWQgYnkgYSB0aW1lciBpbnN0YW5jZS4KICAgKiBAcm10b2xsIENDUjMgICAgICAgICBDQ1IzICAgICAgICAgIExMX1RJTV9PQ19TZXRDb21wYXJlQ0gzCiAgICogQHBhcmFtICBUSU14IFRpbWVyIGluc3RhbmNlCkBAIC0yMDY2LDkgKzIwNzEsOSBAQAogLyoqCiAgICogQGJyaWVmICBTZXQgY29tcGFyZSB2YWx1ZSBmb3Igb3V0cHV0IGNoYW5uZWwgNCAoVElNeF9DQ1I0KS4KICAgKiBAbm90ZSBJbiAzMi1iaXQgdGltZXIgaW1wbGVtZW50YXRpb25zIGNvbXBhcmUgdmFsdWUgY2FuIGJlIGJldHdlZW4gMHgwMDAwMDAwMCBhbmQgMHhGRkZGRkZGRi4KLSAgKiBAbm90ZSBNYWNybyBAcmVmIElTX1RJTV8zMkJfQ09VTlRFUl9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjaworICAqIEBub3RlIE1hY3JvIElTX1RJTV8zMkJfQ09VTlRFUl9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjawogICAqICAgICAgIHdoZXRoZXIgb3Igbm90IGEgdGltZXIgaW5zdGFuY2Ugc3VwcG9ydHMgYSAzMiBiaXRzIGNvdW50ZXIuCi0gICogQG5vdGUgTWFjcm8gQHJlZiBJU19USU1fQ0M0X0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgTWFjcm8gSVNfVElNX0NDNF9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgIG91dHB1dCBjaGFubmVsIDQgaXMgc3VwcG9ydGVkIGJ5IGEgdGltZXIgaW5zdGFuY2UuCiAgICogQHJtdG9sbCBDQ1I0ICAgICAgICAgQ0NSNCAgICAgICAgICBMTF9USU1fT0NfU2V0Q29tcGFyZUNINAogICAqIEBwYXJhbSAgVElNeCBUaW1lciBpbnN0YW5jZQpAQCAtMjA4Myw5ICsyMDg4LDkgQEAKIC8qKgogICAqIEBicmllZiAgR2V0IGNvbXBhcmUgdmFsdWUgKFRJTXhfQ0NSMSkgc2V0IGZvciAgb3V0cHV0IGNoYW5uZWwgMS4KICAgKiBAbm90ZSBJbiAzMi1iaXQgdGltZXIgaW1wbGVtZW50YXRpb25zIHJldHVybmVkIGNvbXBhcmUgdmFsdWUgY2FuIGJlIGJldHdlZW4gMHgwMDAwMDAwMCBhbmQgMHhGRkZGRkZGRi4KLSAgKiBAbm90ZSBNYWNybyBAcmVmIElTX1RJTV8zMkJfQ09VTlRFUl9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjaworICAqIEBub3RlIE1hY3JvIElTX1RJTV8zMkJfQ09VTlRFUl9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjawogICAqICAgICAgIHdoZXRoZXIgb3Igbm90IGEgdGltZXIgaW5zdGFuY2Ugc3VwcG9ydHMgYSAzMiBiaXRzIGNvdW50ZXIuCi0gICogQG5vdGUgTWFjcm8gQHJlZiBJU19USU1fQ0MxX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgTWFjcm8gSVNfVElNX0NDMV9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgIG91dHB1dCBjaGFubmVsIDEgaXMgc3VwcG9ydGVkIGJ5IGEgdGltZXIgaW5zdGFuY2UuCiAgICogQHJtdG9sbCBDQ1IxICAgICAgICAgQ0NSMSAgICAgICAgICBMTF9USU1fT0NfR2V0Q29tcGFyZUNIMQogICAqIEBwYXJhbSAgVElNeCBUaW1lciBpbnN0YW5jZQpAQCAtMjA5OSw5ICsyMTA0LDkgQEAKIC8qKgogICAqIEBicmllZiAgR2V0IGNvbXBhcmUgdmFsdWUgKFRJTXhfQ0NSMikgc2V0IGZvciAgb3V0cHV0IGNoYW5uZWwgMi4KICAgKiBAbm90ZSBJbiAzMi1iaXQgdGltZXIgaW1wbGVtZW50YXRpb25zIHJldHVybmVkIGNvbXBhcmUgdmFsdWUgY2FuIGJlIGJldHdlZW4gMHgwMDAwMDAwMCBhbmQgMHhGRkZGRkZGRi4KLSAgKiBAbm90ZSBNYWNybyBAcmVmIElTX1RJTV8zMkJfQ09VTlRFUl9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjaworICAqIEBub3RlIE1hY3JvIElTX1RJTV8zMkJfQ09VTlRFUl9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjawogICAqICAgICAgIHdoZXRoZXIgb3Igbm90IGEgdGltZXIgaW5zdGFuY2Ugc3VwcG9ydHMgYSAzMiBiaXRzIGNvdW50ZXIuCi0gICogQG5vdGUgTWFjcm8gQHJlZiBJU19USU1fQ0MyX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgTWFjcm8gSVNfVElNX0NDMl9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgIG91dHB1dCBjaGFubmVsIDIgaXMgc3VwcG9ydGVkIGJ5IGEgdGltZXIgaW5zdGFuY2UuCiAgICogQHJtdG9sbCBDQ1IyICAgICAgICAgQ0NSMiAgICAgICAgICBMTF9USU1fT0NfR2V0Q29tcGFyZUNIMgogICAqIEBwYXJhbSAgVElNeCBUaW1lciBpbnN0YW5jZQpAQCAtMjExNSw5ICsyMTIwLDkgQEAKIC8qKgogICAqIEBicmllZiAgR2V0IGNvbXBhcmUgdmFsdWUgKFRJTXhfQ0NSMykgc2V0IGZvciAgb3V0cHV0IGNoYW5uZWwgMy4KICAgKiBAbm90ZSBJbiAzMi1iaXQgdGltZXIgaW1wbGVtZW50YXRpb25zIHJldHVybmVkIGNvbXBhcmUgdmFsdWUgY2FuIGJlIGJldHdlZW4gMHgwMDAwMDAwMCBhbmQgMHhGRkZGRkZGRi4KLSAgKiBAbm90ZSBNYWNybyBAcmVmIElTX1RJTV8zMkJfQ09VTlRFUl9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjaworICAqIEBub3RlIE1hY3JvIElTX1RJTV8zMkJfQ09VTlRFUl9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjawogICAqICAgICAgIHdoZXRoZXIgb3Igbm90IGEgdGltZXIgaW5zdGFuY2Ugc3VwcG9ydHMgYSAzMiBiaXRzIGNvdW50ZXIuCi0gICogQG5vdGUgTWFjcm8gQHJlZiBJU19USU1fQ0MzX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgTWFjcm8gSVNfVElNX0NDM19JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgIG91dHB1dCBjaGFubmVsIDMgaXMgc3VwcG9ydGVkIGJ5IGEgdGltZXIgaW5zdGFuY2UuCiAgICogQHJtdG9sbCBDQ1IzICAgICAgICAgQ0NSMyAgICAgICAgICBMTF9USU1fT0NfR2V0Q29tcGFyZUNIMwogICAqIEBwYXJhbSAgVElNeCBUaW1lciBpbnN0YW5jZQpAQCAtMjEzMSw5ICsyMTM2LDkgQEAKIC8qKgogICAqIEBicmllZiAgR2V0IGNvbXBhcmUgdmFsdWUgKFRJTXhfQ0NSNCkgc2V0IGZvciAgb3V0cHV0IGNoYW5uZWwgNC4KICAgKiBAbm90ZSBJbiAzMi1iaXQgdGltZXIgaW1wbGVtZW50YXRpb25zIHJldHVybmVkIGNvbXBhcmUgdmFsdWUgY2FuIGJlIGJldHdlZW4gMHgwMDAwMDAwMCBhbmQgMHhGRkZGRkZGRi4KLSAgKiBAbm90ZSBNYWNybyBAcmVmIElTX1RJTV8zMkJfQ09VTlRFUl9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjaworICAqIEBub3RlIE1hY3JvIElTX1RJTV8zMkJfQ09VTlRFUl9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjawogICAqICAgICAgIHdoZXRoZXIgb3Igbm90IGEgdGltZXIgaW5zdGFuY2Ugc3VwcG9ydHMgYSAzMiBiaXRzIGNvdW50ZXIuCi0gICogQG5vdGUgTWFjcm8gQHJlZiBJU19USU1fQ0M0X0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgTWFjcm8gSVNfVElNX0NDNF9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgIG91dHB1dCBjaGFubmVsIDQgaXMgc3VwcG9ydGVkIGJ5IGEgdGltZXIgaW5zdGFuY2UuCiAgICogQHJtdG9sbCBDQ1I0ICAgICAgICAgQ0NSNCAgICAgICAgICBMTF9USU1fT0NfR2V0Q29tcGFyZUNINAogICAqIEBwYXJhbSAgVElNeCBUaW1lciBpbnN0YW5jZQpAQCAtMjQzMCw3ICsyNDM1LDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBDb25uZWN0IHRoZSBUSU14X0NIMSwgQ0gyIGFuZCBDSDMgcGlucyAgdG8gdGhlIFRJMSBpbnB1dCAoWE9SIGNvbWJpbmF0aW9uKS4KLSAgKiBAbm90ZSBNYWNybyBAcmVmIElTX1RJTV9YT1JfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSBNYWNybyBJU19USU1fWE9SX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgYSB0aW1lciBpbnN0YW5jZSBwcm92aWRlcyBhbiBYT1IgaW5wdXQuCiAgICogQHJtdG9sbCBDUjIgICAgICAgICAgVEkxUyAgICAgICAgICBMTF9USU1fSUNfRW5hYmxlWE9SQ29tYmluYXRpb24KICAgKiBAcGFyYW0gIFRJTXggVGltZXIgaW5zdGFuY2UKQEAgLTI0NDMsNyArMjQ0OCw3IEBACiAKIC8qKgogICAqIEBicmllZiAgRGlzY29ubmVjdCB0aGUgVElNeF9DSDEsIENIMiBhbmQgQ0gzIHBpbnMgIGZyb20gdGhlIFRJMSBpbnB1dC4KLSAgKiBAbm90ZSBNYWNybyBAcmVmIElTX1RJTV9YT1JfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSBNYWNybyBJU19USU1fWE9SX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgYSB0aW1lciBpbnN0YW5jZSBwcm92aWRlcyBhbiBYT1IgaW5wdXQuCiAgICogQHJtdG9sbCBDUjIgICAgICAgICAgVEkxUyAgICAgICAgICBMTF9USU1fSUNfRGlzYWJsZVhPUkNvbWJpbmF0aW9uCiAgICogQHBhcmFtICBUSU14IFRpbWVyIGluc3RhbmNlCkBAIC0yNDU2LDcgKzI0NjEsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIEluZGljYXRlcyB3aGV0aGVyIHRoZSBUSU14X0NIMSwgQ0gyIGFuZCBDSDMgcGlucyBhcmUgY29ubmVjdGVjdGVkIHRvIHRoZSBUSTEgaW5wdXQuCi0gICogQG5vdGUgTWFjcm8gQHJlZiBJU19USU1fWE9SX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgTWFjcm8gSVNfVElNX1hPUl9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqIGEgdGltZXIgaW5zdGFuY2UgcHJvdmlkZXMgYW4gWE9SIGlucHV0LgogICAqIEBybXRvbGwgQ1IyICAgICAgICAgIFRJMVMgICAgICAgICAgTExfVElNX0lDX0lzRW5hYmxlZFhPUkNvbWJpbmF0aW9uCiAgICogQHBhcmFtICBUSU14IFRpbWVyIGluc3RhbmNlCkBAIC0yNDcwLDkgKzI0NzUsOSBAQAogLyoqCiAgICogQGJyaWVmICBHZXQgY2FwdHVyZWQgdmFsdWUgZm9yIGlucHV0IGNoYW5uZWwgMS4KICAgKiBAbm90ZSBJbiAzMi1iaXQgdGltZXIgaW1wbGVtZW50YXRpb25zIHJldHVybmVkIGNhcHR1cmVkIHZhbHVlIGNhbiBiZSBiZXR3ZWVuIDB4MDAwMDAwMDAgYW5kIDB4RkZGRkZGRkYuCi0gICogQG5vdGUgTWFjcm8gQHJlZiBJU19USU1fMzJCX0NPVU5URVJfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sKKyAgKiBAbm90ZSBNYWNybyBJU19USU1fMzJCX0NPVU5URVJfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sKICAgKiAgICAgICB3aGV0aGVyIG9yIG5vdCBhIHRpbWVyIGluc3RhbmNlIHN1cHBvcnRzIGEgMzIgYml0cyBjb3VudGVyLgotICAqIEBub3RlIE1hY3JvIEByZWYgSVNfVElNX0NDMV9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlIE1hY3JvIElTX1RJTV9DQzFfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICBpbnB1dCBjaGFubmVsIDEgaXMgc3VwcG9ydGVkIGJ5IGEgdGltZXIgaW5zdGFuY2UuCiAgICogQHJtdG9sbCBDQ1IxICAgICAgICAgQ0NSMSAgICAgICAgICBMTF9USU1fSUNfR2V0Q2FwdHVyZUNIMQogICAqIEBwYXJhbSAgVElNeCBUaW1lciBpbnN0YW5jZQpAQCAtMjQ4Niw5ICsyNDkxLDkgQEAKIC8qKgogICAqIEBicmllZiAgR2V0IGNhcHR1cmVkIHZhbHVlIGZvciBpbnB1dCBjaGFubmVsIDIuCiAgICogQG5vdGUgSW4gMzItYml0IHRpbWVyIGltcGxlbWVudGF0aW9ucyByZXR1cm5lZCBjYXB0dXJlZCB2YWx1ZSBjYW4gYmUgYmV0d2VlbiAweDAwMDAwMDAwIGFuZCAweEZGRkZGRkZGLgotICAqIEBub3RlIE1hY3JvIEByZWYgSVNfVElNXzMyQl9DT1VOVEVSX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrCisgICogQG5vdGUgTWFjcm8gSVNfVElNXzMyQl9DT1VOVEVSX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrCiAgICogICAgICAgd2hldGhlciBvciBub3QgYSB0aW1lciBpbnN0YW5jZSBzdXBwb3J0cyBhIDMyIGJpdHMgY291bnRlci4KLSAgKiBAbm90ZSBNYWNybyBAcmVmIElTX1RJTV9DQzJfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSBNYWNybyBJU19USU1fQ0MyX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgaW5wdXQgY2hhbm5lbCAyIGlzIHN1cHBvcnRlZCBieSBhIHRpbWVyIGluc3RhbmNlLgogICAqIEBybXRvbGwgQ0NSMiAgICAgICAgIENDUjIgICAgICAgICAgTExfVElNX0lDX0dldENhcHR1cmVDSDIKICAgKiBAcGFyYW0gIFRJTXggVGltZXIgaW5zdGFuY2UKQEAgLTI1MDIsOSArMjUwNyw5IEBACiAvKioKICAgKiBAYnJpZWYgIEdldCBjYXB0dXJlZCB2YWx1ZSBmb3IgaW5wdXQgY2hhbm5lbCAzLgogICAqIEBub3RlIEluIDMyLWJpdCB0aW1lciBpbXBsZW1lbnRhdGlvbnMgcmV0dXJuZWQgY2FwdHVyZWQgdmFsdWUgY2FuIGJlIGJldHdlZW4gMHgwMDAwMDAwMCBhbmQgMHhGRkZGRkZGRi4KLSAgKiBAbm90ZSBNYWNybyBAcmVmIElTX1RJTV8zMkJfQ09VTlRFUl9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjaworICAqIEBub3RlIE1hY3JvIElTX1RJTV8zMkJfQ09VTlRFUl9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjawogICAqICAgICAgIHdoZXRoZXIgb3Igbm90IGEgdGltZXIgaW5zdGFuY2Ugc3VwcG9ydHMgYSAzMiBiaXRzIGNvdW50ZXIuCi0gICogQG5vdGUgTWFjcm8gQHJlZiBJU19USU1fQ0MzX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgTWFjcm8gSVNfVElNX0NDM19JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgIGlucHV0IGNoYW5uZWwgMyBpcyBzdXBwb3J0ZWQgYnkgYSB0aW1lciBpbnN0YW5jZS4KICAgKiBAcm10b2xsIENDUjMgICAgICAgICBDQ1IzICAgICAgICAgIExMX1RJTV9JQ19HZXRDYXB0dXJlQ0gzCiAgICogQHBhcmFtICBUSU14IFRpbWVyIGluc3RhbmNlCkBAIC0yNTE4LDkgKzI1MjMsOSBAQAogLyoqCiAgICogQGJyaWVmICBHZXQgY2FwdHVyZWQgdmFsdWUgZm9yIGlucHV0IGNoYW5uZWwgNC4KICAgKiBAbm90ZSBJbiAzMi1iaXQgdGltZXIgaW1wbGVtZW50YXRpb25zIHJldHVybmVkIGNhcHR1cmVkIHZhbHVlIGNhbiBiZSBiZXR3ZWVuIDB4MDAwMDAwMDAgYW5kIDB4RkZGRkZGRkYuCi0gICogQG5vdGUgTWFjcm8gQHJlZiBJU19USU1fMzJCX0NPVU5URVJfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sKKyAgKiBAbm90ZSBNYWNybyBJU19USU1fMzJCX0NPVU5URVJfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sKICAgKiAgICAgICB3aGV0aGVyIG9yIG5vdCBhIHRpbWVyIGluc3RhbmNlIHN1cHBvcnRzIGEgMzIgYml0cyBjb3VudGVyLgotICAqIEBub3RlIE1hY3JvIEByZWYgSVNfVElNX0NDNF9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlIE1hY3JvIElTX1RJTV9DQzRfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICBpbnB1dCBjaGFubmVsIDQgaXMgc3VwcG9ydGVkIGJ5IGEgdGltZXIgaW5zdGFuY2UuCiAgICogQHJtdG9sbCBDQ1I0ICAgICAgICAgQ0NSNCAgICAgICAgICBMTF9USU1fSUNfR2V0Q2FwdHVyZUNINAogICAqIEBwYXJhbSAgVElNeCBUaW1lciBpbnN0YW5jZQpAQCAtMjU0MSw3ICsyNTQ2LDcgQEAKIC8qKgogICAqIEBicmllZiAgRW5hYmxlIGV4dGVybmFsIGNsb2NrIG1vZGUgMi4KICAgKiBAbm90ZSBXaGVuIGV4dGVybmFsIGNsb2NrIG1vZGUgMiBpcyBlbmFibGVkIHRoZSBjb3VudGVyIGlzIGNsb2NrZWQgYnkgYW55IGFjdGl2ZSBlZGdlIG9uIHRoZSBFVFJGIHNpZ25hbC4KLSAgKiBAbm90ZSBNYWNybyBAcmVmIElTX1RJTV9DTE9DS1NPVVJDRV9FVFJNT0RFMl9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjaworICAqIEBub3RlIE1hY3JvIElTX1RJTV9DTE9DS1NPVVJDRV9FVFJNT0RFMl9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjawogICAqICAgICAgIHdoZXRoZXIgb3Igbm90IGEgdGltZXIgaW5zdGFuY2Ugc3VwcG9ydHMgZXh0ZXJuYWwgY2xvY2sgbW9kZTIuCiAgICogQHJtdG9sbCBTTUNSICAgICAgICAgRUNFICAgICAgICAgICBMTF9USU1fRW5hYmxlRXh0ZXJuYWxDbG9jawogICAqIEBwYXJhbSAgVElNeCBUaW1lciBpbnN0YW5jZQpAQCAtMjU1NCw3ICsyNTU5LDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBEaXNhYmxlIGV4dGVybmFsIGNsb2NrIG1vZGUgMi4KLSAgKiBAbm90ZSBNYWNybyBAcmVmIElTX1RJTV9DTE9DS1NPVVJDRV9FVFJNT0RFMl9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjaworICAqIEBub3RlIE1hY3JvIElTX1RJTV9DTE9DS1NPVVJDRV9FVFJNT0RFMl9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjawogICAqICAgICAgIHdoZXRoZXIgb3Igbm90IGEgdGltZXIgaW5zdGFuY2Ugc3VwcG9ydHMgZXh0ZXJuYWwgY2xvY2sgbW9kZTIuCiAgICogQHJtdG9sbCBTTUNSICAgICAgICAgRUNFICAgICAgICAgICBMTF9USU1fRGlzYWJsZUV4dGVybmFsQ2xvY2sKICAgKiBAcGFyYW0gIFRJTXggVGltZXIgaW5zdGFuY2UKQEAgLTI1NjcsNyArMjU3Miw3IEBACiAKIC8qKgogICAqIEBicmllZiAgSW5kaWNhdGUgd2hldGhlciBleHRlcm5hbCBjbG9jayBtb2RlIDIgaXMgZW5hYmxlZC4KLSAgKiBAbm90ZSBNYWNybyBAcmVmIElTX1RJTV9DTE9DS1NPVVJDRV9FVFJNT0RFMl9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjaworICAqIEBub3RlIE1hY3JvIElTX1RJTV9DTE9DS1NPVVJDRV9FVFJNT0RFMl9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjawogICAqICAgICAgIHdoZXRoZXIgb3Igbm90IGEgdGltZXIgaW5zdGFuY2Ugc3VwcG9ydHMgZXh0ZXJuYWwgY2xvY2sgbW9kZTIuCiAgICogQHJtdG9sbCBTTUNSICAgICAgICAgRUNFICAgICAgICAgICBMTF9USU1fSXNFbmFibGVkRXh0ZXJuYWxDbG9jawogICAqIEBwYXJhbSAgVElNeCBUaW1lciBpbnN0YW5jZQpAQCAtMjU4NCw5ICsyNTg5LDkgQEAKICAgKiAgICAgICB0aGUgZXh0ZXJuYWwgY2xvY2sgaXMgYXBwbGllZCBpcyBzZWxlY3RlZCBieSBjYWxsaW5nIHRoZSBAcmVmIExMX1RJTV9TZXRUcmlnZ2VySW5wdXQoKQogICAqICAgICAgIGZ1bmN0aW9uLiBUaGlzIHRpbWVyIGlucHV0IG11c3QgYmUgY29uZmlndXJlZCBieSBjYWxsaW5nCiAgICogICAgICAgdGhlIEByZWYgTExfVElNX0lDX0NvbmZpZygpIGZ1bmN0aW9uLgotICAqIEBub3RlIE1hY3JvIEByZWYgSVNfVElNX0NMT0NLU09VUkNFX0VUUk1PREUxX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrCisgICogQG5vdGUgTWFjcm8gSVNfVElNX0NMT0NLU09VUkNFX0VUUk1PREUxX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrCiAgICogICAgICAgd2hldGhlciBvciBub3QgYSB0aW1lciBpbnN0YW5jZSBzdXBwb3J0cyBleHRlcm5hbCBjbG9jayBtb2RlMS4KLSAgKiBAbm90ZSBNYWNybyBAcmVmIElTX1RJTV9DTE9DS1NPVVJDRV9FVFJNT0RFMl9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjaworICAqIEBub3RlIE1hY3JvIElTX1RJTV9DTE9DS1NPVVJDRV9FVFJNT0RFMl9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjawogICAqICAgICAgIHdoZXRoZXIgb3Igbm90IGEgdGltZXIgaW5zdGFuY2Ugc3VwcG9ydHMgZXh0ZXJuYWwgY2xvY2sgbW9kZTIuCiAgICogQHJtdG9sbCBTTUNSICAgICAgICAgU01TICAgICAgICAgICBMTF9USU1fU2V0Q2xvY2tTb3VyY2VcbgogICAqICAgICAgICAgU01DUiAgICAgICAgIEVDRSAgICAgICAgICAgTExfVElNX1NldENsb2NrU291cmNlCkBAIC0yNjA0LDcgKzI2MDksNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIFNldCB0aGUgZW5jb2RlciBpbnRlcmZhY2UgbW9kZS4KLSAgKiBAbm90ZSBNYWNybyBAcmVmIElTX1RJTV9FTkNPREVSX0lOVEVSRkFDRV9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjaworICAqIEBub3RlIE1hY3JvIElTX1RJTV9FTkNPREVSX0lOVEVSRkFDRV9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjawogICAqICAgICAgIHdoZXRoZXIgb3Igbm90IGEgdGltZXIgaW5zdGFuY2Ugc3VwcG9ydHMgdGhlIGVuY29kZXIgbW9kZS4KICAgKiBAcm10b2xsIFNNQ1IgICAgICAgICBTTVMgICAgICAgICAgIExMX1RJTV9TZXRFbmNvZGVyTW9kZQogICAqIEBwYXJhbSAgVElNeCBUaW1lciBpbnN0YW5jZQpAQCAtMjYyOCw3ICsyNjMzLDcgQEAKICAgKi8KIC8qKgogICAqIEBicmllZiAgU2V0IHRoZSB0cmlnZ2VyIG91dHB1dCAoVFJHTykgdXNlZCBmb3IgdGltZXIgc3luY2hyb25pemF0aW9uIC4KLSAgKiBAbm90ZSBNYWNybyBAcmVmIElTX1RJTV9NQVNURVJfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sKKyAgKiBAbm90ZSBNYWNybyBJU19USU1fTUFTVEVSX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrCiAgICogICAgICAgd2hldGhlciBvciBub3QgYSB0aW1lciBpbnN0YW5jZSBjYW4gb3BlcmF0ZSBhcyBhIG1hc3RlciB0aW1lci4KICAgKiBAcm10b2xsIENSMiAgICAgICAgICBNTVMgICAgICAgICAgIExMX1RJTV9TZXRUcmlnZ2VyT3V0cHV0CiAgICogQHBhcmFtICBUSU14IFRpbWVyIGluc3RhbmNlCkBAIC0yNjUwLDcgKzI2NTUsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIFNldCB0aGUgc3luY2hyb25pemF0aW9uIG1vZGUgb2YgYSBzbGF2ZSB0aW1lci4KLSAgKiBAbm90ZSBNYWNybyBAcmVmIElTX1RJTV9TTEFWRV9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlIE1hY3JvIElTX1RJTV9TTEFWRV9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgIGEgdGltZXIgaW5zdGFuY2UgY2FuIG9wZXJhdGUgYXMgYSBzbGF2ZSB0aW1lci4KICAgKiBAcm10b2xsIFNNQ1IgICAgICAgICBTTVMgICAgICAgICAgIExMX1RJTV9TZXRTbGF2ZU1vZGUKICAgKiBAcGFyYW0gIFRJTXggVGltZXIgaW5zdGFuY2UKQEAgLTI2NjgsNyArMjY3Myw3IEBACiAKIC8qKgogICAqIEBicmllZiAgU2V0IHRoZSBzZWxlY3RzIHRoZSB0cmlnZ2VyIGlucHV0IHRvIGJlIHVzZWQgdG8gc3luY2hyb25pemUgdGhlIGNvdW50ZXIuCi0gICogQG5vdGUgTWFjcm8gQHJlZiBJU19USU1fU0xBVkVfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSBNYWNybyBJU19USU1fU0xBVkVfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICBhIHRpbWVyIGluc3RhbmNlIGNhbiBvcGVyYXRlIGFzIGEgc2xhdmUgdGltZXIuCiAgICogQHJtdG9sbCBTTUNSICAgICAgICAgVFMgICAgICAgICAgICBMTF9USU1fU2V0VHJpZ2dlcklucHV0CiAgICogQHBhcmFtICBUSU14IFRpbWVyIGluc3RhbmNlCkBAIC0yNjkwLDcgKzI2OTUsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIEVuYWJsZSB0aGUgTWFzdGVyL1NsYXZlIG1vZGUuCi0gICogQG5vdGUgTWFjcm8gQHJlZiBJU19USU1fU0xBVkVfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSBNYWNybyBJU19USU1fU0xBVkVfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICBhIHRpbWVyIGluc3RhbmNlIGNhbiBvcGVyYXRlIGFzIGEgc2xhdmUgdGltZXIuCiAgICogQHJtdG9sbCBTTUNSICAgICAgICAgTVNNICAgICAgICAgICBMTF9USU1fRW5hYmxlTWFzdGVyU2xhdmVNb2RlCiAgICogQHBhcmFtICBUSU14IFRpbWVyIGluc3RhbmNlCkBAIC0yNzAzLDcgKzI3MDgsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIERpc2FibGUgdGhlIE1hc3Rlci9TbGF2ZSBtb2RlLgotICAqIEBub3RlIE1hY3JvIEByZWYgSVNfVElNX1NMQVZFX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgTWFjcm8gSVNfVElNX1NMQVZFX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgYSB0aW1lciBpbnN0YW5jZSBjYW4gb3BlcmF0ZSBhcyBhIHNsYXZlIHRpbWVyLgogICAqIEBybXRvbGwgU01DUiAgICAgICAgIE1TTSAgICAgICAgICAgTExfVElNX0Rpc2FibGVNYXN0ZXJTbGF2ZU1vZGUKICAgKiBAcGFyYW0gIFRJTXggVGltZXIgaW5zdGFuY2UKQEAgLTI3MTYsNyArMjcyMSw3IEBACiAKIC8qKgogICAqIEBicmllZiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgTWFzdGVyL1NsYXZlIG1vZGUgaXMgZW5hYmxlZC4KLSAgKiBAbm90ZSBNYWNybyBAcmVmIElTX1RJTV9TTEFWRV9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlIE1hY3JvIElTX1RJTV9TTEFWRV9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqIGEgdGltZXIgaW5zdGFuY2UgY2FuIG9wZXJhdGUgYXMgYSBzbGF2ZSB0aW1lci4KICAgKiBAcm10b2xsIFNNQ1IgICAgICAgICBNU00gICAgICAgICAgIExMX1RJTV9Jc0VuYWJsZWRNYXN0ZXJTbGF2ZU1vZGUKICAgKiBAcGFyYW0gIFRJTXggVGltZXIgaW5zdGFuY2UKQEAgLTI3MjksNyArMjczNCw3IEBACiAKIC8qKgogICAqIEBicmllZiAgQ29uZmlndXJlIHRoZSBleHRlcm5hbCB0cmlnZ2VyIChFVFIpIGlucHV0LgotICAqIEBub3RlIE1hY3JvIEByZWYgSVNfVElNX0VUUl9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlIE1hY3JvIElTX1RJTV9FVFJfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICBhIHRpbWVyIGluc3RhbmNlIHByb3ZpZGVzIGFuIGV4dGVybmFsIHRyaWdnZXIgaW5wdXQuCiAgICogQHJtdG9sbCBTTUNSICAgICAgICAgRVRQICAgICAgICAgICBMTF9USU1fQ29uZmlnRVRSXG4KICAgKiAgICAgICAgIFNNQ1IgICAgICAgICBFVFBTICAgICAgICAgIExMX1RJTV9Db25maWdFVFJcbgpAQCAtMjc3Nyw3ICsyNzgyLDcgQEAKICAgKi8KIC8qKgogICAqIEBicmllZiAgRW5hYmxlIHRoZSBicmVhayBmdW5jdGlvbi4KLSAgKiBAbm90ZSBNYWNybyBAcmVmIElTX1RJTV9CUkVBS19JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlIE1hY3JvIElTX1RJTV9CUkVBS19JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgIGEgdGltZXIgaW5zdGFuY2UgcHJvdmlkZXMgYSBicmVhayBpbnB1dC4KICAgKiBAcm10b2xsIEJEVFIgICAgICAgICBCS0UgICAgICAgICAgIExMX1RJTV9FbmFibGVCUksKICAgKiBAcGFyYW0gIFRJTXggVGltZXIgaW5zdGFuY2UKQEAgLTI3OTYsNyArMjgwMSw3IEBACiAgICogQGJyaWVmICBEaXNhYmxlIHRoZSBicmVhayBmdW5jdGlvbi4KICAgKiBAcm10b2xsIEJEVFIgICAgICAgICBCS0UgICAgICAgICAgIExMX1RJTV9EaXNhYmxlQlJLCiAgICogQHBhcmFtICBUSU14IFRpbWVyIGluc3RhbmNlCi0gICogQG5vdGUgTWFjcm8gQHJlZiBJU19USU1fQlJFQUtfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSBNYWNybyBJU19USU1fQlJFQUtfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICBhIHRpbWVyIGluc3RhbmNlIHByb3ZpZGVzIGEgYnJlYWsgaW5wdXQuCiAgICogQHJldHZhbCBOb25lCiAgICovCkBAIC0yODExLDcgKzI4MTYsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIENvbmZpZ3VyZSB0aGUgYnJlYWsgaW5wdXQuCi0gICogQG5vdGUgTWFjcm8gQHJlZiBJU19USU1fQlJFQUtfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSBNYWNybyBJU19USU1fQlJFQUtfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICBhIHRpbWVyIGluc3RhbmNlIHByb3ZpZGVzIGEgYnJlYWsgaW5wdXQuCiAgICogQHJtdG9sbCBCRFRSICAgICAgICAgQktQICAgICAgICAgICBMTF9USU1fQ29uZmlnQlJLCiAgICogQHBhcmFtICBUSU14IFRpbWVyIGluc3RhbmNlCkBAIC0yODMxLDcgKzI4MzYsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIFNlbGVjdCB0aGUgb3V0cHV0cyBvZmYgc3RhdGUgKGVuYWJsZWQgdi5zLiBkaXNhYmxlZCkgaW4gSWRsZSBhbmQgUnVuIG1vZGVzLgotICAqIEBub3RlIE1hY3JvIEByZWYgSVNfVElNX0JSRUFLX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgTWFjcm8gSVNfVElNX0JSRUFLX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgYSB0aW1lciBpbnN0YW5jZSBwcm92aWRlcyBhIGJyZWFrIGlucHV0LgogICAqIEBybXRvbGwgQkRUUiAgICAgICAgIE9TU0kgICAgICAgICAgTExfVElNX1NldE9mZlN0YXRlc1xuCiAgICogICAgICAgICBCRFRSICAgICAgICAgT1NTUiAgICAgICAgICBMTF9USU1fU2V0T2ZmU3RhdGVzCkBAIC0yODUxLDcgKzI4NTYsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIEVuYWJsZSBhdXRvbWF0aWMgb3V0cHV0IChNT0UgY2FuIGJlIHNldCBieSBzb2Z0d2FyZSBvciBhdXRvbWF0aWNhbGx5IHdoZW4gYSBicmVhayBpbnB1dCBpcyBhY3RpdmUpLgotICAqIEBub3RlIE1hY3JvIEByZWYgSVNfVElNX0JSRUFLX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgTWFjcm8gSVNfVElNX0JSRUFLX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgYSB0aW1lciBpbnN0YW5jZSBwcm92aWRlcyBhIGJyZWFrIGlucHV0LgogICAqIEBybXRvbGwgQkRUUiAgICAgICAgIEFPRSAgICAgICAgICAgTExfVElNX0VuYWJsZUF1dG9tYXRpY091dHB1dAogICAqIEBwYXJhbSAgVElNeCBUaW1lciBpbnN0YW5jZQpAQCAtMjg2NCw3ICsyODY5LDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBEaXNhYmxlIGF1dG9tYXRpYyBvdXRwdXQgKE1PRSBjYW4gYmUgc2V0IG9ubHkgYnkgc29mdHdhcmUpLgotICAqIEBub3RlIE1hY3JvIEByZWYgSVNfVElNX0JSRUFLX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgTWFjcm8gSVNfVElNX0JSRUFLX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgYSB0aW1lciBpbnN0YW5jZSBwcm92aWRlcyBhIGJyZWFrIGlucHV0LgogICAqIEBybXRvbGwgQkRUUiAgICAgICAgIEFPRSAgICAgICAgICAgTExfVElNX0Rpc2FibGVBdXRvbWF0aWNPdXRwdXQKICAgKiBAcGFyYW0gIFRJTXggVGltZXIgaW5zdGFuY2UKQEAgLTI4NzcsNyArMjg4Miw3IEBACiAKIC8qKgogICAqIEBicmllZiAgSW5kaWNhdGUgd2hldGhlciBhdXRvbWF0aWMgb3V0cHV0IGlzIGVuYWJsZWQuCi0gICogQG5vdGUgTWFjcm8gQHJlZiBJU19USU1fQlJFQUtfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSBNYWNybyBJU19USU1fQlJFQUtfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICBhIHRpbWVyIGluc3RhbmNlIHByb3ZpZGVzIGEgYnJlYWsgaW5wdXQuCiAgICogQHJtdG9sbCBCRFRSICAgICAgICAgQU9FICAgICAgICAgICBMTF9USU1fSXNFbmFibGVkQXV0b21hdGljT3V0cHV0CiAgICogQHBhcmFtICBUSU14IFRpbWVyIGluc3RhbmNlCkBAIC0yODkyLDcgKzI4OTcsNyBAQAogICAqIEBicmllZiAgRW5hYmxlIHRoZSBvdXRwdXRzIChzZXQgdGhlIE1PRSBiaXQgaW4gVElNeF9CRFRSIHJlZ2lzdGVyKS4KICAgKiBAbm90ZSBUaGUgTU9FIGJpdCBpbiBUSU14X0JEVFIgcmVnaXN0ZXIgYWxsb3dzIHRvIGVuYWJsZSAvZGlzYWJsZSB0aGUgb3V0cHV0cyBieQogICAqICAgICAgIHNvZnR3YXJlIGFuZCBpcyByZXNldCBpbiBjYXNlIG9mIGJyZWFrIG9yIGJyZWFrMiBldmVudAotICAqIEBub3RlIE1hY3JvIEByZWYgSVNfVElNX0JSRUFLX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgTWFjcm8gSVNfVElNX0JSRUFLX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgYSB0aW1lciBpbnN0YW5jZSBwcm92aWRlcyBhIGJyZWFrIGlucHV0LgogICAqIEBybXRvbGwgQkRUUiAgICAgICAgIE1PRSAgICAgICAgICAgTExfVElNX0VuYWJsZUFsbE91dHB1dHMKICAgKiBAcGFyYW0gIFRJTXggVGltZXIgaW5zdGFuY2UKQEAgLTI5MDcsNyArMjkxMiw3IEBACiAgICogQGJyaWVmICBEaXNhYmxlIHRoZSBvdXRwdXRzIChyZXNldCB0aGUgTU9FIGJpdCBpbiBUSU14X0JEVFIgcmVnaXN0ZXIpLgogICAqIEBub3RlIFRoZSBNT0UgYml0IGluIFRJTXhfQkRUUiByZWdpc3RlciBhbGxvd3MgdG8gZW5hYmxlIC9kaXNhYmxlIHRoZSBvdXRwdXRzIGJ5CiAgICogICAgICAgc29mdHdhcmUgYW5kIGlzIHJlc2V0IGluIGNhc2Ugb2YgYnJlYWsgb3IgYnJlYWsyIGV2ZW50LgotICAqIEBub3RlIE1hY3JvIEByZWYgSVNfVElNX0JSRUFLX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgTWFjcm8gSVNfVElNX0JSRUFLX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgYSB0aW1lciBpbnN0YW5jZSBwcm92aWRlcyBhIGJyZWFrIGlucHV0LgogICAqIEBybXRvbGwgQkRUUiAgICAgICAgIE1PRSAgICAgICAgICAgTExfVElNX0Rpc2FibGVBbGxPdXRwdXRzCiAgICogQHBhcmFtICBUSU14IFRpbWVyIGluc3RhbmNlCkBAIC0yOTIwLDcgKzI5MjUsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIEluZGljYXRlcyB3aGV0aGVyIG91dHB1dHMgYXJlIGVuYWJsZWQuCi0gICogQG5vdGUgTWFjcm8gQHJlZiBJU19USU1fQlJFQUtfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSBNYWNybyBJU19USU1fQlJFQUtfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICBhIHRpbWVyIGluc3RhbmNlIHByb3ZpZGVzIGEgYnJlYWsgaW5wdXQuCiAgICogQHJtdG9sbCBCRFRSICAgICAgICAgTU9FICAgICAgICAgICBMTF9USU1fSXNFbmFibGVkQWxsT3V0cHV0cwogICAqIEBwYXJhbSAgVElNeCBUaW1lciBpbnN0YW5jZQpAQCAtMjk0MCw3ICsyOTQ1LDcgQEAKICAgKi8KIC8qKgogICAqIEBicmllZiAgQ29uZmlndXJlcyB0aGUgdGltZXIgRE1BIGJ1cnN0IGZlYXR1cmUuCi0gICogQG5vdGUgTWFjcm8gQHJlZiBJU19USU1fRE1BQlVSU1RfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvcgorICAqIEBub3RlIE1hY3JvIElTX1RJTV9ETUFCVVJTVF9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yCiAgICogICAgICAgbm90IGEgdGltZXIgaW5zdGFuY2Ugc3VwcG9ydHMgdGhlIERNQSBidXJzdCBtb2RlLgogICAqIEBybXRvbGwgRENSICAgICAgICAgIERCTCAgICAgICAgICAgTExfVElNX0NvbmZpZ0RNQUJ1cnN0XG4KICAgKiAgICAgICAgIERDUiAgICAgICAgICBEQkEgICAgICAgICAgIExMX1RJTV9Db25maWdETUFCdXJzdApAQCAtMjk5OSw3ICszMDA0LDcgQEAKICAgKi8KIC8qKgogICAqIEBicmllZiAgUmVtYXAgVElNIGlucHV0cyAoaW5wdXQgY2hhbm5lbCwgaW50ZXJuYWwvZXh0ZXJuYWwgdHJpZ2dlcnMpLgotICAqIEBub3RlIE1hY3JvIEByZWYgSVNfVElNX1JFTUFQX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgTWFjcm8gSVNfVElNX1JFTUFQX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgYSBzb21lIHRpbWVyIGlucHV0cyBjYW4gYmUgcmVtYXBwZWQuCiAgICogQHJtdG9sbCBUSU0yX09SICAgICBJVFIxX1JNUCAgICAgICAgICBMTF9USU1fU2V0UmVtYXBcbgogICAqICAgICAgICAgVElNNV9PUiAgICAgVEk0X1JNUCAgICAgICAgICAgTExfVElNX1NldFJlbWFwXG4KQEAgLTMwMjgsOSArMzAzMywxMiBAQAogICAqICAgICAgICAgVElNMTE6IG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlcwogICAqCiAgICogICAgICAgICAgICBAYXJnIEByZWYgTExfVElNX1RJTTExX1RJMV9STVBfR1BJTwotICAqICAgICAgICAgICAgQGFyZyBAcmVmIExMX1RJTV9USU0xMV9USTFfUk1QX0dQSU8xCisgICogICAgICAgICAgICBAYXJnIEByZWYgTExfVElNX1RJTTExX1RJMV9STVBfR1BJTzEgKCopCiAgICogICAgICAgICAgICBAYXJnIEByZWYgTExfVElNX1RJTTExX1RJMV9STVBfSFNFX1JUQwogICAqICAgICAgICAgICAgQGFyZyBAcmVmIExMX1RJTV9USU0xMV9USTFfUk1QX0dQSU8yCisgICogICAgICAgICAgICBAYXJnIEByZWYgTExfVElNX1RJTTExX1RJMV9STVBfU1BESUZSWCAoKikKKyAgKgorICAqICAgICAgICAgKCopICBWYWx1ZSBub3QgZGVmaW5lZCBpbiBhbGwgZGV2aWNlcy4gXG4KICAgKgogICAqIEByZXR2YWwgTm9uZQogICAqLwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZjR4eF9sbF91c2FydC5oIGIvSW5jL3N0bTMyZjR4eF9sbF91c2FydC5oCmluZGV4IGM3NWM2OGYuLmVlZGNkZTggMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmY0eHhfbGxfdXNhcnQuaAorKysgYi9JbmMvc3RtMzJmNHh4X2xsX3VzYXJ0LmgKQEAgLTM1Nyw5ICszNTcsOSBAQAogICAqIEBwYXJhbSAgX19CQVVEUkFURV9fIEJhdWQgcmF0ZSB2YWx1ZSB0byBhY2hpZXZlCiAgICogQHJldHZhbCBVU0FSVERJViB2YWx1ZSB0byBiZSB1c2VkIGZvciBCUlIgcmVnaXN0ZXIgZmlsbGluZyBpbiBPdmVyU2FtcGxpbmdfOCBjYXNlCiAgICovCi0jZGVmaW5lIF9fTExfVVNBUlRfRElWX1NBTVBMSU5HOF8xMDAoX19QRVJJUEhDTEtfXywgX19CQVVEUkFURV9fKSAgICAgICgoKF9fUEVSSVBIQ0xLX18pKjI1KS8oMiooX19CQVVEUkFURV9fKSkpCisjZGVmaW5lIF9fTExfVVNBUlRfRElWX1NBTVBMSU5HOF8xMDAoX19QRVJJUEhDTEtfXywgX19CQVVEUkFURV9fKSAgICAgICgodWludDMyX3QpKCgoKHVpbnQ2NF90KShfX1BFUklQSENMS19fKSkqMjUpLygyKigodWludDY0X3QpKF9fQkFVRFJBVEVfXykpKSkpCiAjZGVmaW5lIF9fTExfVVNBUlRfRElWTUFOVF9TQU1QTElORzgoX19QRVJJUEhDTEtfXywgX19CQVVEUkFURV9fKSAgICAgIChfX0xMX1VTQVJUX0RJVl9TQU1QTElORzhfMTAwKChfX1BFUklQSENMS19fKSwgKF9fQkFVRFJBVEVfXykpLzEwMCkKLSNkZWZpbmUgX19MTF9VU0FSVF9ESVZGUkFRX1NBTVBMSU5HOChfX1BFUklQSENMS19fLCBfX0JBVURSQVRFX18pICAgICAgKCgoX19MTF9VU0FSVF9ESVZfU0FNUExJTkc4XzEwMCgoX19QRVJJUEhDTEtfXyksIChfX0JBVURSQVRFX18pKSAtIChfX0xMX1VTQVJUX0RJVk1BTlRfU0FNUExJTkc4KChfX1BFUklQSENMS19fKSwgKF9fQkFVRFJBVEVfXykpICogMTAwKSkgKiA4ICsgNTApIC8gMTAwKQorI2RlZmluZSBfX0xMX1VTQVJUX0RJVkZSQVFfU0FNUExJTkc4KF9fUEVSSVBIQ0xLX18sIF9fQkFVRFJBVEVfXykgICAgICAoKCgoX19MTF9VU0FSVF9ESVZfU0FNUExJTkc4XzEwMCgoX19QRVJJUEhDTEtfXyksIChfX0JBVURSQVRFX18pKSAtIChfX0xMX1VTQVJUX0RJVk1BTlRfU0FNUExJTkc4KChfX1BFUklQSENMS19fKSwgKF9fQkFVRFJBVEVfXykpICogMTAwKSkgKiA4KSArIDUwKSAvIDEwMCkKIC8qIFVBUlQgQlJSID0gbWFudGlzc2EgKyBvdmVyZmxvdyArIGZyYWN0aW9uCiAgICAgICAgICAgICA9IChVQVJUIERJVk1BTlQgPDwgNCkgKyAoKFVBUlQgRElWRlJBUSAmIDB4RjgpIDw8IDEpICsgKFVBUlQgRElWRlJBUSAmIDB4MDcpICovCiAjZGVmaW5lIF9fTExfVVNBUlRfRElWX1NBTVBMSU5HOChfX1BFUklQSENMS19fLCBfX0JBVURSQVRFX18pICAgICAgICAgICAgICgoKF9fTExfVVNBUlRfRElWTUFOVF9TQU1QTElORzgoKF9fUEVSSVBIQ0xLX18pLCAoX19CQVVEUkFURV9fKSkgPDwgNCkgKyBcCkBAIC0zNzMsOSArMzczLDkgQEAKICAgKiBAcGFyYW0gIF9fQkFVRFJBVEVfXyBCYXVkIHJhdGUgdmFsdWUgdG8gYWNoaWV2ZQogICAqIEByZXR2YWwgVVNBUlRESVYgdmFsdWUgdG8gYmUgdXNlZCBmb3IgQlJSIHJlZ2lzdGVyIGZpbGxpbmcgaW4gT3ZlclNhbXBsaW5nXzE2IGNhc2UKICAgKi8KLSNkZWZpbmUgX19MTF9VU0FSVF9ESVZfU0FNUExJTkcxNl8xMDAoX19QRVJJUEhDTEtfXywgX19CQVVEUkFURV9fKSAgICAgKCgoX19QRVJJUEhDTEtfXykqMjUpLyg0KihfX0JBVURSQVRFX18pKSkKKyNkZWZpbmUgX19MTF9VU0FSVF9ESVZfU0FNUExJTkcxNl8xMDAoX19QRVJJUEhDTEtfXywgX19CQVVEUkFURV9fKSAgICAgKCh1aW50MzJfdCkoKCgodWludDY0X3QpKF9fUEVSSVBIQ0xLX18pKSoyNSkvKDQqKCh1aW50NjRfdCkoX19CQVVEUkFURV9fKSkpKSkKICNkZWZpbmUgX19MTF9VU0FSVF9ESVZNQU5UX1NBTVBMSU5HMTYoX19QRVJJUEhDTEtfXywgX19CQVVEUkFURV9fKSAgICAgKF9fTExfVVNBUlRfRElWX1NBTVBMSU5HMTZfMTAwKChfX1BFUklQSENMS19fKSwgKF9fQkFVRFJBVEVfXykpLzEwMCkKLSNkZWZpbmUgX19MTF9VU0FSVF9ESVZGUkFRX1NBTVBMSU5HMTYoX19QRVJJUEhDTEtfXywgX19CQVVEUkFURV9fKSAgICAgKCgoX19MTF9VU0FSVF9ESVZfU0FNUExJTkcxNl8xMDAoKF9fUEVSSVBIQ0xLX18pLCAoX19CQVVEUkFURV9fKSkgLSAoX19MTF9VU0FSVF9ESVZNQU5UX1NBTVBMSU5HMTYoKF9fUEVSSVBIQ0xLX18pLCAoX19CQVVEUkFURV9fKSkgKiAxMDApKSAqIDE2ICsgNTApIC8gMTAwKQorI2RlZmluZSBfX0xMX1VTQVJUX0RJVkZSQVFfU0FNUExJTkcxNihfX1BFUklQSENMS19fLCBfX0JBVURSQVRFX18pICAgICAoKCgoX19MTF9VU0FSVF9ESVZfU0FNUExJTkcxNl8xMDAoKF9fUEVSSVBIQ0xLX18pLCAoX19CQVVEUkFURV9fKSkgLSAoX19MTF9VU0FSVF9ESVZNQU5UX1NBTVBMSU5HMTYoKF9fUEVSSVBIQ0xLX18pLCAoX19CQVVEUkFURV9fKSkgKiAxMDApKSAqIDE2KSArIDUwKSAvIDEwMCkKIC8qIFVTQVJUIEJSUiA9IG1hbnRpc3NhICsgb3ZlcmZsb3cgKyBmcmFjdGlvbgogICAgICAgICAgICAgPSAoVVNBUlQgRElWTUFOVCA8PCA0KSArIChVU0FSVCBESVZGUkFRICYgMHhGMCkgKyAoVVNBUlQgRElWRlJBUSAmIDB4MEYpICovCiAjZGVmaW5lIF9fTExfVVNBUlRfRElWX1NBTVBMSU5HMTYoX19QRVJJUEhDTEtfXywgX19CQVVEUkFURV9fKSAgICAgICAgICAgICgoKF9fTExfVVNBUlRfRElWTUFOVF9TQU1QTElORzE2KChfX1BFUklQSENMS19fKSwgKF9fQkFVRFJBVEVfXykpIDw8IDQpICsgXApkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZjR4eF9sbF93d2RnLmggYi9JbmMvc3RtMzJmNHh4X2xsX3d3ZGcuaAppbmRleCA5ZmVkNmFhLi5mMjBiODJkIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmNHh4X2xsX3d3ZGcuaAorKysgYi9JbmMvc3RtMzJmNHh4X2xsX3d3ZGcuaApAQCAtNTgsOCArNTgsOCBAQAogICAqLwogCiAvKiogQGRlZmdyb3VwIFdXREdfTExfRUNfUFJFU0NBTEVSICBQUkVTQ0FMRVIKLSogQHsKLSovCisgICogQHsKKyAgKi8KICNkZWZpbmUgTExfV1dER19QUkVTQ0FMRVJfMSAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMHUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgV1dERyBjb3VudGVyIGNsb2NrID0gKFBDTEsxLzQwOTYpLzEgKi8KICNkZWZpbmUgTExfV1dER19QUkVTQ0FMRVJfMiAgICAgICAgICAgICAgICAgV1dER19DRlJfV0RHVEJfMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgV1dERyBjb3VudGVyIGNsb2NrID0gKFBDTEsxLzQwOTYpLzIgKi8KICNkZWZpbmUgTExfV1dER19QUkVTQ0FMRVJfNCAgICAgICAgICAgICAgICAgV1dER19DRlJfV0RHVEJfMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgV1dERyBjb3VudGVyIGNsb2NrID0gKFBDTEsxLzQwOTYpLzQgKi8KQEAgLTE3NSw3ICsxNzUsNyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1dXREdfUFJFU0NBTEVSXzIKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9XV0RHX1BSRVNDQUxFUl80CiAgICogICAgICAgICBAYXJnIEByZWYgTExfV1dER19QUkVTQ0FMRVJfOAotKiBAcmV0dmFsIE5vbmUKKyAgKiBAcmV0dmFsIE5vbmUKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX1dXREdfU2V0UHJlc2NhbGVyKFdXREdfVHlwZURlZiAqV1dER3gsIHVpbnQzMl90IFByZXNjYWxlcikKIHsKQEAgLTMxNCw2ICszMTQsNiBAQAogfQogI2VuZGlmCiAKLSNlbmRpZiAvKiBfX1NUTTMyRjR4eF9MTF9XV0RHX0ggKi8KKyNlbmRpZiAvKiBTVE0zMkY0eHhfTExfV1dER19IICovCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKiogKEMpIENPUFlSSUdIVCBTVE1pY3JvZWxlY3Ryb25pY3MgKioqKipFTkQgT0YgRklMRSoqKiovCmRpZmYgLS1naXQgYS9SRUFETUUubWQgYi9SRUFETUUubWQKaW5kZXggYTdlY2YwOS4uZTIyMjczZiAxMDA2NDQKLS0tIGEvUkVBRE1FLm1kCisrKyBiL1JFQURNRS5tZApAQCAtMzUsNiArMzUsNyBAQAogSEFMIERyaXZlciBGNCB8IENNU0lTIERldmljZSBGNCB8IENNU0lTIENvcmUgfCBXYXMgZGVsaXZlcmVkIGluIHRoZSBmdWxsIE1DVSBwYWNrYWdlCiAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIFRhZyB2MS43LjYgfCBUYWcgdjIuNi4zIHwgVGFnIHY1LjQuMF9jbTQgfCBUYWcgdjEuMjQuMSAoYW5kIGZvbGxvd2luZywgaWYgYW55LCB0aWxsIG5leHQgbmV3IHRhZykKK1RhZyB2MS43LjcgfCBUYWcgdjIuNi40IHwgVGFnIHY1LjQuMF9jbTQgfCBUYWcgdjEuMjQuMiAoYW5kIGZvbGxvd2luZywgaWYgYW55LCB0aWxsIG5leHQgbmV3IHRhZykKIAogVGhlIGZ1bGwgKipTVE0zMkN1YmVGNCoqIE1DVSBwYWNrYWdlIGlzIGF2YWlsYWJsZSBbaGVyZV0oaHR0cHM6Ly9naXRodWIuY29tL1NUTWljcm9lbGVjdHJvbmljcy9TVE0zMkN1YmVGNCkuCiAKZGlmZiAtLWdpdCBhL1JlbGVhc2VfTm90ZXMuaHRtbCBiL1JlbGVhc2VfTm90ZXMuaHRtbAppbmRleCBlYjRkZTRhLi4wYzY3NzEyIDEwMDY0NAotLS0gYS9SZWxlYXNlX05vdGVzLmh0bWwKKysrIGIvUmVsZWFzZV9Ob3Rlcy5odG1sCkBAIC05NDEsNyArOTQxLDg1IEBACiAgICAgICAgICAgICA8dGFibGUgY2xhc3M9Ik1zb05vcm1hbFRhYmxlIiBzdHlsZT0id2lkdGg6IDY3NXB0OyIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgd2lkdGg9IjkwMCI+CiA8dGJvZHk+PHRyPjx0ZCBzdHlsZT0icGFkZGluZzogMGluOyIgdmFsaWduPSJ0b3AiPgogICAgICAgICA8aDIgc3R5bGU9ImJhY2tncm91bmQ6IHJnYig1MSwgMTAyLCAyNTUpIG5vbmUgcmVwZWF0IHNjcm9sbCAwJSA1MCU7IC1tb3otYmFja2dyb3VuZC1jbGlwOiBpbml0aWFsOyAtbW96LWJhY2tncm91bmQtb3JpZ2luOiBpbml0aWFsOyAtbW96LWJhY2tncm91bmQtaW5saW5lLXBvbGljeTogaW5pdGlhbDsiPjxhIG5hbWU9Ikhpc3RvcnkiPjwvYT48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMnB0OyBjb2xvcjogd2hpdGU7Ij5VcGRhdGUgSGlzdG9yeTwvc3Bhbj48L2gyPgotICAgICAgICAgICAgPGgzIHN0eWxlPSJiYWNrZ3JvdW5kOiByZ2IoNTEsIDEwMiwgMjU1KSBub25lIHJlcGVhdCBzY3JvbGwgMCUgNTAlOyAtbW96LWJhY2tncm91bmQtY2xpcDogaW5pdGlhbDsgLW1vei1iYWNrZ3JvdW5kLW9yaWdpbjogaW5pdGlhbDsgLW1vei1iYWNrZ3JvdW5kLWlubGluZS1wb2xpY3k6IGluaXRpYWw7IG1hcmdpbi1yaWdodDogNTAwcHQ7IHdpZHRoOiAyNzRweDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBBcmlhbDsgY29sb3I6IHdoaXRlOyI+VjEuNy42IC8gMTItQXByaWwtMjAxOTwvc3Bhbj48L2gzPgorICAgICAgICAgICAgPGgzIHN0eWxlPSJiYWNrZ3JvdW5kOiByZ2IoNTEsIDEwMiwgMjU1KSBub25lIHJlcGVhdCBzY3JvbGwgMCUgNTAlOyAtbW96LWJhY2tncm91bmQtY2xpcDogaW5pdGlhbDsgLW1vei1iYWNrZ3JvdW5kLW9yaWdpbjogaW5pdGlhbDsgLW1vei1iYWNrZ3JvdW5kLWlubGluZS1wb2xpY3k6IGluaXRpYWw7IG1hcmdpbi1yaWdodDogNTAwcHQ7IHdpZHRoOiAyNzRweDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBBcmlhbDsgY29sb3I6IHdoaXRlOyI+VjEuNy43IC8gMDYtRGVjZW1iZXItMjAxOTwvc3Bhbj48L2gzPgorICAgICAgICAgICAgPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbjogNC41cHQgMGNtIDQuNXB0IDE4cHQ7Ij48YiBzdHlsZT0iIj48dT48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYTsgY29sb3I6IGJsYWNrOyI+TWFpbgorQ2hhbmdlczwvc3Bhbj48L3U+PC9iPjwvcD4KKyAgICAgICAgICAgIAorICAgICAgICAgICAgCisKKzxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7IiBsYW5nPSJFTi1VUyI+PC9zcGFuPjx1bCBzdHlsZT0ibWFyZ2luLXRvcDogMGNtOyIgdHlwZT0iZGlzYyI+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7IiBsYW5nPSJFTi1VUyI+R2VuZXJhbCB1cGRhdGVzIHRvIGZpeCBrbm93biBkZWZlY3RzIGFuZAorICAgICBlbmhhbmNlbWVudHMgaW1wbGVtZW50YXRpb248L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6ICZxdW90O1RpbWVzIE5ldyBSb21hbiZxdW90OyxzZXJpZjsiIGxhbmc9IkVOLVVTIj48bzpwPjwvbzpwPjwvc3Bhbj48L2xpPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48Yj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyI+SEFMIEdlbmVyaWMgPC9zcGFuPjwvYj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyI+dXBkYXRlPC9zcGFuPjwvbGk+PHVsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyI+SEFMX1NldFRpY2tGcmVxKCk6IHVwZGF0ZSB0byByZXN0b3JlIHRoZSBwcmV2aW91cyB0aWNrIGZyZXF1ZW5jeSZuYnNwO3doZW4gSEFMX0luaXRUaWNrKCkgY29uZmlndXJhdGlvbiBmYWlsZWQuPC9zcGFuPjwvbGk+PC91bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PGI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiPkhBTC9MTCBHUElPIDwvc3Bhbj48L2I+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiPnVwZGF0ZTwvc3Bhbj48L2xpPjx1bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiPlVwZGF0ZSA8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiPkdQSU8gaW5pdGlhbGl6YXRpb24gc2VxdWVuY2U8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiPjxzcGFuIHN0eWxlPSJmb250LXdlaWdodDogYm9sZDsiPiA8L3NwYW4+dG8gYXZvaWQgdW53YW50ZWQgcHVsc2Ugb24gR1BJTyBQaW4nczwvc3Bhbj48L2xpPjwvdWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7Ij5IQUwgRVhUSSA8L3NwYW4+PC9iPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7Ij51cGRhdGU8L3NwYW4+PC9saT48L3VsPjxzcGFuIHN0eWxlPSJjb2xvcjogcmdiKDAsIDAsIDApOyBmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyBmb250LXNpemU6IDEzLjMzMzNweDsgZm9udC1zdHlsZTogbm9ybWFsOyBmb250LXdlaWdodDogNDAwOyBsZXR0ZXItc3BhY2luZzogbm9ybWFsOyBvcnBoYW5zOiAyOyB0ZXh0LWFsaWduOiBsZWZ0OyB0ZXh0LWluZGVudDogMHB4OyB0ZXh0LXRyYW5zZm9ybTogbm9uZTsgd2hpdGUtc3BhY2U6IG5vcm1hbDsgd2lkb3dzOiAyOyB3b3JkLXNwYWNpbmc6IDBweDsgZGlzcGxheTogaW5saW5lICEgaW1wb3J0YW50OyBmbG9hdDogbm9uZTsiPiA8L3NwYW4+PHVsIHN0eWxlPSJtYXJnaW4tdG9wOiAwY207IiB0eXBlPSJkaXNjIj48dWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJjb2xvcjogcmdiKDAsIDAsIDApOyBmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyBmb250LXNpemU6IDEzLjMzMzNweDsgZm9udC1zdHlsZTogbm9ybWFsOyBmb250LXdlaWdodDogNDAwOyBsZXR0ZXItc3BhY2luZzogbm9ybWFsOyBvcnBoYW5zOiAyOyB0ZXh0LWFsaWduOiBsZWZ0OyB0ZXh0LWluZGVudDogMHB4OyB0ZXh0LXRyYW5zZm9ybTogbm9uZTsgd2hpdGUtc3BhY2U6IG5vcm1hbDsgd2lkb3dzOiAyOyB3b3JkLXNwYWNpbmc6IDBweDsgZGlzcGxheTogaW5saW5lICEgaW1wb3J0YW50OyBmbG9hdDogbm9uZTsiPkdlbmVyYWwgdXBkYXRlIHRvIGVuaGFuY2UgSEFMIEVYVEkgZHJpdmVyIHJvYnVzdG5lc3MmbmJzcDs8L3NwYW4+PC9saT48dWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJjb2xvcjogcmdiKDAsIDAsIDApOyBmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyBmb250LXNpemU6IDEzLjMzMzNweDsgZm9udC1zdHlsZTogbm9ybWFsOyBmb250LXdlaWdodDogNDAwOyBsZXR0ZXItc3BhY2luZzogbm9ybWFsOyBvcnBoYW5zOiAyOyB0ZXh0LWFsaWduOiBsZWZ0OyB0ZXh0LWluZGVudDogMHB4OyB0ZXh0LXRyYW5zZm9ybTogbm9uZTsgd2hpdGUtc3BhY2U6IG5vcm1hbDsgd2lkb3dzOiAyOyB3b3JkLXNwYWNpbmc6IDBweDsgZGlzcGxheTogaW5saW5lICEgaW1wb3J0YW50OyBmbG9hdDogbm9uZTsiPkFkZCBhZGRpdGlvbmFsIGFzc2VydCBjaGVjayBvbiBFWFRJIGNvbmZpZyBsaW5lczwvc3Bhbj48L2xpPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iY29sb3I6IHJnYigwLCAwLCAwKTsgZm9udC1mYW1pbHk6IFZlcmRhbmEsc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMy4zMzMzcHg7IGZvbnQtc3R5bGU6IG5vcm1hbDsgZm9udC13ZWlnaHQ6IDQwMDsgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDsgb3JwaGFuczogMjsgdGV4dC1hbGlnbjogbGVmdDsgdGV4dC1pbmRlbnQ6IDBweDsgdGV4dC10cmFuc2Zvcm06IG5vbmU7IHdoaXRlLXNwYWNlOiBub3JtYWw7IHdpZG93czogMjsgd29yZC1zcGFjaW5nOiAwcHg7IGRpc3BsYXk6IGlubGluZSAhIGltcG9ydGFudDsgZmxvYXQ6IG5vbmU7Ij5VcGRhdGUgdG8gY29tcHV0ZSBFWFRJIGxpbmUgbWFzayBiZWZvcmUgcmVhZC93cml0ZSBhY2Nlc3MgdG8gRVhUSSByZWdpc3RlcnM8YnI+PC9zcGFuPjwvbGk+PC91bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImNvbG9yOiByZ2IoMCwgMCwgMCk7IGZvbnQtZmFtaWx5OiBWZXJkYW5hLHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTMuMzMzM3B4OyBmb250LXN0eWxlOiBub3JtYWw7IGZvbnQtd2VpZ2h0OiA0MDA7IGxldHRlci1zcGFjaW5nOiBub3JtYWw7IG9ycGhhbnM6IDI7IHRleHQtYWxpZ246IGxlZnQ7IHRleHQtaW5kZW50OiAwcHg7IHRleHQtdHJhbnNmb3JtOiBub25lOyB3aGl0ZS1zcGFjZTogbm9ybWFsOyB3aWRvd3M6IDI7IHdvcmQtc3BhY2luZzogMHB4OyBkaXNwbGF5OiBpbmxpbmUgISBpbXBvcnRhbnQ7IGZsb2F0OiBub25lOyI+VXBkYXRlCitFWFRJIGNhbGxiYWNrcyBtYW5hZ2VtZW50IHRvIGJlIGNvbXBsaWFudCB3aXRoIHJlZmVyZW5jZSBtYW51YWw6IG9ubHkKK29uZSZuYnNwO1BSIHJlZ2lzdGVyIGZvciByaXNpbmcgYW5kIGZhbGxpbmcgaW50ZXJydXB0cy48L3NwYW4+PC9saT48dWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJjb2xvcjogcmdiKDAsIDAsIDApOyBmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyBmb250LXNpemU6IDEzLjMzMzNweDsgZm9udC1zdHlsZTogbm9ybWFsOyBmb250LXdlaWdodDogNDAwOyBsZXR0ZXItc3BhY2luZzogbm9ybWFsOyBvcnBoYW5zOiAyOyB0ZXh0LWFsaWduOiBsZWZ0OyB0ZXh0LWluZGVudDogMHB4OyB0ZXh0LXRyYW5zZm9ybTogbm9uZTsgd2hpdGUtc3BhY2U6IG5vcm1hbDsgd2lkb3dzOiAyOyB3b3JkLXNwYWNpbmc6IDBweDsgZGlzcGxheTogaW5saW5lICEgaW1wb3J0YW50OyBmbG9hdDogbm9uZTsiPlVwZGF0ZQorcGFyYW1ldGVycyZuYnNwO2luIEVYVElfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmU6IG1lcmdlJm5ic3A7SEFMIEVYVEkKK1Jpc2luZ0NhbGxiYWNrIGFuZCBGYWxsaW5nQ2FsbGJhY2sgaW4gb25seSBvbmUgUGVuZGluZ0NhbGxiYWNrPC9zcGFuPjwvbGk+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJjb2xvcjogcmdiKDAsIDAsIDApOyBmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyBmb250LXNpemU6IDEzLjMzMzNweDsgZm9udC1zdHlsZTogbm9ybWFsOyBmb250LXdlaWdodDogNDAwOyBsZXR0ZXItc3BhY2luZzogbm9ybWFsOyBvcnBoYW5zOiAyOyB0ZXh0LWFsaWduOiBsZWZ0OyB0ZXh0LWluZGVudDogMHB4OyB0ZXh0LXRyYW5zZm9ybTogbm9uZTsgd2hpdGUtc3BhY2U6IG5vcm1hbDsgd2lkb3dzOiAyOyB3b3JkLXNwYWNpbmc6IDBweDsgZGlzcGxheTogaW5saW5lICEgaW1wb3J0YW50OyBmbG9hdDogbm9uZTsiPlJlbW92ZSBIQUxfRVhUSV9SSVNJTkdfQ0JfSUQgYW5kIEhBTF9FWFRJX0ZBTExJTkdfQ0JfSUQgdmFsdWVzIGZyb20gPC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjogcmdiKDAsIDAsIDApOyBmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyBmb250LXNpemU6IDEzLjMzMzNweDsgZm9udC1zdHlsZTogbm9ybWFsOyBmb250LXdlaWdodDogNDAwOyBsZXR0ZXItc3BhY2luZzogbm9ybWFsOyBvcnBoYW5zOiAyOyB0ZXh0LWFsaWduOiBsZWZ0OyB0ZXh0LWluZGVudDogMHB4OyB0ZXh0LXRyYW5zZm9ybTogbm9uZTsgd2hpdGUtc3BhY2U6IG5vcm1hbDsgd2lkb3dzOiAyOyB3b3JkLXNwYWNpbmc6IDBweDsgZGlzcGxheTogaW5saW5lICEgaW1wb3J0YW50OyBmbG9hdDogbm9uZTsiPkVYVElfQ2FsbGJhY2tJRFR5cGVEZWYgZW51bWVyYXRpb24uPGJyPjwvc3Bhbj48L2xpPjwvdWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7Ij5VcGRhdGUgSEFMX0VYVElfSVJRSGFuZGxlcigpIEFQSSB0byBzZXJ2ZSA8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiPmludGVycnVwdHMgPC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7Ij5jb3JyZWN0bHkuPC9zcGFuPjwvbGk+PHVsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyI+VXBkYXRlIHRvIGNvbXB1dGUgRVhUSSBsaW5lIG1hc2sgYmVmb3JlIGhhbmRsZSBFWFRJJm5ic3A7aW50ZXJydXB0Ljwvc3Bhbj48L2xpPjwvdWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJjb2xvcjogcmdiKDAsIDAsIDApOyBmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyBmb250LXNpemU6IDEzLjMzMzNweDsgZm9udC1zdHlsZTogbm9ybWFsOyBmb250LXdlaWdodDogNDAwOyBsZXR0ZXItc3BhY2luZzogbm9ybWFsOyBvcnBoYW5zOiAyOyB0ZXh0LWFsaWduOiBsZWZ0OyB0ZXh0LWluZGVudDogMHB4OyB0ZXh0LXRyYW5zZm9ybTogbm9uZTsgd2hpdGUtc3BhY2U6IG5vcm1hbDsgd2lkb3dzOiAyOyB3b3JkLXNwYWNpbmc6IDBweDsgZGlzcGxheTogaW5saW5lICEgaW1wb3J0YW50OyBmbG9hdDogbm9uZTsiPlVwZGF0ZSB0byBzdXBwb3J0Jm5ic3A7R1BJTyBwb3J0IGludGVycnVwdHM6PC9zcGFuPjwvbGk+PHVsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iY29sb3I6IHJnYigwLCAwLCAwKTsgZm9udC1mYW1pbHk6IFZlcmRhbmEsc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMy4zMzMzcHg7IGZvbnQtc3R5bGU6IG5vcm1hbDsgZm9udC13ZWlnaHQ6IDQwMDsgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDsgb3JwaGFuczogMjsgdGV4dC1hbGlnbjogbGVmdDsgdGV4dC1pbmRlbnQ6IDBweDsgdGV4dC10cmFuc2Zvcm06IG5vbmU7IHdoaXRlLXNwYWNlOiBub3JtYWw7IHdpZG93czogMjsgd29yZC1zcGFjaW5nOiAwcHg7IGRpc3BsYXk6IGlubGluZSAhIGltcG9ydGFudDsgZmxvYXQ6IG5vbmU7Ij5BZGQgbmV3ICJHUElPU2VsIiBwYXJhbWV0ZXIgaW4gRVhUSV9Db25maWdUeXBlRGVmIHN0cnVjdHVyZTwvc3Bhbj48L2xpPjwvdWw+PC91bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PGI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiPkhBTC9MTCBSQ0MgPC9zcGFuPjwvYj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyI+dXBkYXRlPC9zcGFuPjwvbGk+PHVsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyI+VXBkYXRlIEhBTF9SQ0NFeF9QZXJpcGhDTEtDb25maWcoKSBBUEkgdG8gc3VwcG9ydCBQTExJMlMgY29uZmlndXJhdGlvbiBmb3IgU1RNMzJGNDJ4eHggYW5kIFNUTTMyRjQzeHh4IGRldmljZXM8L3NwYW4+PC9saT48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiPlVwZGF0ZSB0aGUgSEFMX1JDQ19DbG9ja0NvbmZpZygpIGFuZCBIQUxfUkNDX0RlSW5pdCgpIEFQSSB0byBkb24ndCBvdmVyd3JpdGUgdGhlIGN1c3RvbSB0aWNrIHByaW9yaXR5PC9zcGFuPjwvbGk+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7Ij5GaXggTExfUkNDX0RlSW5pdCgpIGZhaWx1cmUgZGV0ZWN0ZWQgd2l0aCBnY2MgY29tcGlsZXIgYW5kIGhpZ2ggb3B0aW1pemF0aW9uIGxldmVsIGlzIHNlbGVjdGVkKC0wMyk8L3NwYW4+PC9saT48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiPlVwZGF0ZSBIQUxfUkNDX09zY0NvbmZpZygpIEFQSSB0byBkb24ndCZuYnNwO3JldHVybiBIQUxfRVJST1IgaWYgcmVxdWVzdCByZXBlYXRzIHRoZSBjdXJyZW50IFBMTCBjb25maWd1cmF0aW9uPGJyPjwvc3Bhbj48L2xpPjwvdWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7Ij5IQUwgQURDIDwvc3Bhbj48L2I+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiPnVwZGF0ZTwvc3Bhbj48L2xpPjx1bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiPlVwZGF0ZSBMTF9BRENfUkVHX0luaXQoKSB0byBmaXggd3JvbmcgQURDIENSMSByZWdpc3RlciBjb25maWd1cmF0aW9uPC9zcGFuPjwvbGk+PHVsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyI+VGhlIEFEQyBzZXF1ZW5jZXIgbGVuZ3RoIGlzIHBhcnQgb2YmbmJzcDtBREMgU1FSMSByZWdpc3RlciZuYnNwO25vdCBvZiA8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiPkFEQyBDUjEgcmVnaXN0ZXI8L3NwYW4+PC9saT48L3VsPjwvdWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7Ij5IQUwgQ1JZUCA8L3NwYW4+PC9iPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7Ij51cGRhdGU8L3NwYW4+PC9saT48dWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7Ij48L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiPlVwZGF0ZSZuYnNwO0hBTF9DUllQX0VuY3J5cHQoKSBhbmQgSEFMX0NSWVBfRGVjcnlwdCgpIEFQSXMmbmJzcDt0byB0YWtlIGludG8KK2NvbnNpZGVyYXRpb24gdGhlIGRhdGF0eXBlIGZlZCB0byB0aGUgRElOIHJlZ2lzdGVyICgxLSwgOC0sIDE2LSwgb3IKKzMyLWJpdCZuYnNwO2RhdGEpIHdoZW4gcGFkZGluZyB0aGUgbGFzdCBibG9jayBvZiB0aGUgcGF5bG9hZCwgaW4gY2FzZQordGhlIHNpemUgb2YgdGhpcyBsYXN0IGJsb2NrIGlzIGxlc3MgdGhhbiAxMjggYml0cy48L3NwYW4+PC9saT48L3VsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48Yj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPkhBTCBSTkc8L3NwYW4+PC9iPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7IiBsYW5nPSJFTi1VUyI+IHVwZGF0ZTxzcGFuIHN0eWxlPSJmb250LXdlaWdodDogYm9sZDsiPjwvc3Bhbj48L3NwYW4+PC9saT48dWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7IiBsYW5nPSJFTi1VUyI+VXBkYXRlIEhBTF9STkdfSVJRSGFuZGxlcigpIEFQSSB0byBmaXggZXJyb3IgY29kZSBtYW5hZ2VtZW50IGlzc3VlOiBlcnJvciBjb2RlIGlzCithc3NpZ25lZCAiSEFMX1JOR19FUlJPUl9DTE9DSyIgaW4gY2FzZSBvZiBjbG9jayBlcnJvciBhbmQKKyJIQUxfUk5HX0VSUk9SX1NFRUQiIGluIGNhc2Ugb2Ygc2VlZCBlcnJvciwgbm90IHRoZSBvcHBvc2l0ZS48L3NwYW4+PC9saT48L3VsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48Yj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPkhBTCBERlNETSA8L3NwYW4+PC9iPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7IiBsYW5nPSJFTi1VUyI+dXBkYXRlPHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiBib2xkOyI+PC9zcGFuPjwvc3Bhbj48L2xpPjx1bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiIGxhbmc9IkVOLVVTIj5VcGRhdGUgREZTRE1fR2V0Q2hhbm5lbEZyb21JbnN0YW5jZSgpIEFQSSB0byByZW1vdmUgdW5yZWFjaGFibGUgY2hlY2sgY29uZGl0aW9uPC9zcGFuPjwvbGk+PC91bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PGI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiIGxhbmc9IkVOLVVTIj5IQUwgRE1BIDwvc3Bhbj48L2I+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiIGxhbmc9IkVOLVVTIj51cGRhdGU8c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6IGJvbGQ7Ij48L3NwYW4+PC9zcGFuPjwvbGk+PHVsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPlVwZGF0ZSBIQUxfRE1BX1N0YXJ0X0lUKCkgQVBJIHRvIG9taXQgdGhlIEZJRk8gZXJyb3I8L3NwYW4+PC9saT48L3VsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48Yj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPkhBTCBGTEFTSCA8L3NwYW4+PC9iPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7IiBsYW5nPSJFTi1VUyI+dXBkYXRlPHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiBib2xkOyI+PC9zcGFuPjwvc3Bhbj48L2xpPjx1bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiIGxhbmc9IkVOLVVTIj5VcGRhdGUgRkxBU0hfUHJvZ3JhbV9Eb3VibGVXb3JkKCkgQVBJIHRvIGZpeCB3aXRoIEVXQVJNIGhpZ2ggbGV2ZWwgb3B0aW1pemF0aW9uIGlzc3VlPC9zcGFuPjwvbGk+PC91bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PGI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiIGxhbmc9IkVOLVVTIj5IQUwgUVNQSSA8L3NwYW4+PC9iPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7IiBsYW5nPSJFTi1VUyI+dXBkYXRlPHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiBib2xkOyI+PC9zcGFuPjwvc3Bhbj48L2xpPjx1bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiIGxhbmc9IkVOLVVTIj5SZW1vdmUgTG9jayBtZWNoYW5pc20gZnJvbSBIQUxfUVNQSV9Jbml0KCkgYW5kIEhBTF9RU1BJX0RlSW5pdCgpIEFQSXM8L3NwYW4+IDwvbGk+PC91bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PGI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiPkhBTCBIQVNIIDwvc3Bhbj48L2I+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiPnVwZGF0ZTwvc3Bhbj48L2xpPjx1bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiPk51bGwgcG9pbnRlciBvbiBoYW5kbGVyICJoaGFzaCIgaXMgbm93IGNoZWNrZWQgPHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiBib2xkOyI+YmVmb3JlPC9zcGFuPiBhY2Nlc3Npbmcgc3RydWN0dXJlIG1lbWJlciAiaGhhc2gtJmd0O0luaXQuRGF0YVR5cGUiIGluIHRoZSBmb2xsb3dpbmcgQVBJOjwvc3Bhbj48L2xpPjx1bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiPkhBTF9IQVNIX0luaXQoKTwvc3Bhbj48L2xpPjwvdWw+PC91bD48dWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7Ij5Gb2xsb3dpbmcgPHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiBib2xkOyI+aW50ZXJydXB0LWJhc2VkPC9zcGFuPiBBUElzIGhhdmUgYmVlbiBhZGRlZC4gSW50ZXJydXB0IG1vZGUKK2NvdWxkIGFsbG93IHRoZSBNQ1UgdG8gZW50ZXIgIlNsZWVwIiBtb2RlIHdoaWxlIGEgZGF0YSBibG9jayBpcyBiZWluZworcHJvY2Vzc2VkLiBQbGVhc2UgcmVmZXIgdG8gdGhlICIjIyMjIyBIb3cgdG8gdXNlIHRoaXMgZHJpdmVyICMjIyMjIgorc2VjdGlvbiBmb3IgZGV0YWlscyBhYm91dCB0aGVpciB1c2UuPC9zcGFuPjwvbGk+PHVsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyI+SEFMX0hBU0hfU0hBMV9BY2NtbHRfSVQoKTwvc3Bhbj48L2xpPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyI+SEFMX0hBU0hfTUQ1Xzwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyI+QWNjbWx0PC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7Ij5fSVQoKTwvc3Bhbj48L2xpPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyI+SEFMX0hBU0hFeF9TSEEyMjRfPC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7Ij5BY2NtbHQ8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiPl9JVCgpPC9zcGFuPjwvbGk+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7Ij5IQUxfSEFTSEV4X1NIQTI1Nl88L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiPkFjY21sdDwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyI+X0lUKCk8YnI+PC9zcGFuPjwvbGk+PC91bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiPkZvbGxvd2luZyA8c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6IGJvbGQ7Ij5hbGlhc2VzPC9zcGFuPiBoYXZlIGJlZW4gYWRkZWQgKGp1c3QgPHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiBib2xkOyI+Zm9yIGNsYXJpdHkgc2FrZTwvc3Bhbj4pIGFzIHRoZXkgc2hhbGwgYmUgdXNlZCBhdCB0aGUgPHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiBib2xkOyI+ZW5kPC9zcGFuPiBvZiB0aGUgY29tcHV0YXRpb24gb2YgYSBtdWx0aS1idWZmZXJzIG1lc3NhZ2UgYW5kIG5vdCBhdCB0aGUgc3RhcnQ6PC9zcGFuPjwvbGk+PHVsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyI+SEFMX0hBU0hfU0hBMV9BY2NtbHRfRW5kKCkgdG8gYmUgdXNlZCBpbnN0ZWFkIG9mIEhBTF9IQVNIX1NIQTFfU3RhcnQoKTwvc3Bhbj48L2xpPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyI+SEFMX0hBU0hfTUQ1X0FjY21sdF9FbmQoKSB0byBiZSB1c2VkIGluc3RlYWQgb2YgSEFMX0hBU0hfTUQ1X1N0YXJ0KCk8L3NwYW4+PC9saT48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiPkhBTF9IQVNIX1NIQTFfQWNjbWx0X0VuZF9JVCgpIHRvIGJlIHVzZWQgaW5zdGVhZCBvZiBIQUxfSEFTSF9TSEExX1N0YXJ0X0lUKCk8L3NwYW4+PC9saT48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiPkhBTF9IQVNIX01ENV9BY2NtbHRfRW5kX0lUKCkgdG8gYmUgdXNlZCBpbnN0ZWFkIG9mIEhBTF9IQVNIX01ENV9TdGFydF9JVCgpPC9zcGFuPjwvbGk+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7Ij5IQUxfSEFTSEV4X1NIQTIyNF9BY2NtbHRfRW5kKCkgdG8gYmUgdXNlZCBpbnN0ZWFkIG9mIEhBTF9IQVNIRXhfU0hBMjI0X1N0YXJ0KCk8L3NwYW4+PC9saT48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiPkhBTF9IQVNIRXhfU0hBMjU2X0FjY21sdF9FbmQoKSB0byBiZSB1c2VkIGluc3RlYWQgb2YgSEFMX0hBU0hFeF9TSEEyNTZfU3RhcnQoKTwvc3Bhbj48L2xpPjwvdWw+PC91bD48L3VsPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7Ij48L3NwYW4+PHVsIHN0eWxlPSJtYXJnaW4tdG9wOiAwY207IiB0eXBlPSJkaXNjIj48dWw+PHVsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyI+SEFMX0hBU0hFeF9TSEEyMjRfQWNjbWx0X0VuZF9JVCgpIHRvIGJlIHVzZWQgaW5zdGVhZCBvZiBIQUxfSEFTSEV4X1NIQTIyNF9TdGFydDwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyI+X0lUPC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7Ij4oKTwvc3Bhbj48L2xpPjwvdWw+PHVsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyI+SEFMX0hBU0hFeF9TSEEyNTZfQWNjbWx0X0VuZDwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyI+X0lUPC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7Ij4oKSB0byBiZSB1c2VkIGluc3RlYWQgb2YgSEFMX0hBU0hFeF9TSEEyNTZfU3RhcnQ8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiPl9JVDwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyI+KCk8L3NwYW4+PC9saT48L3VsPjwvdWw+PC91bD48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyI+PC9zcGFuPjx1bCBzdHlsZT0ibWFyZ2luLXRvcDogMGNtOyIgdHlwZT0iZGlzYyI+PHVsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyI+TUlTUkFDLTIwMTIgcnVsZSBSLjUuMSZuYnNwOzwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyI+KGlkZW50aWZpZXJzIHNoYWxsIGJlIGRpc3RpbmN0IGluIHRoZSBmaXJzdCAzMSBjaGFyYWN0ZXJzKTwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyI+IGNvbnN0cmFpbmVkIHRoZSBuYW1pbmcgb2YgPC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7Ij50aGUgYWJvdmUgbGlzdGVkIGFsaWFzZXMmbmJzcDs8c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6IGJvbGQ7Ij4oPC9zcGFuPmUuZy4gPC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7Ij5IQUxfSEFTSEV4X1NIQTI1Nl88c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6IGJvbGQ7Ij5BY2NtbHQ8L3NwYW4+X0VuZCgpIDwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyI+Y291bGQgbm90IGJlIG5hbWVkIDwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyI+SEFMX0hBU0hFeF9TSEEyNTZfPHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiBib2xkOyI+QWNjdW11bGF0ZTwvc3Bhbj5fRW5kKCk8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiPi4gT3RoZXJ3aXNlIHRoZSBuYW1lIHdvdWxkIGhhdmUgY29uZmxpY3RlZCB3aXRoIDwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyI+SEFMX0hBU0hFeF9TSEEyNTZfPHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiBib2xkOyI+QWNjdW11bGF0ZTwvc3Bhbj5fRW5kX0lUKCk8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiPjxzcGFuIHN0eWxlPSJmb250LXdlaWdodDogYm9sZDsiPik8L3NwYW4+LiBJbiBvcmRlciB0byBoYXZlIGFsaWduZWQgbmFtZXMgZm9sbG93aW5nIEFQSXMgaGF2ZSBiZWVuIHJlbmFtZWQ6PC9zcGFuPjwvbGk+PC91bD48L3VsPjx1bCBzdHlsZT0ibWFyZ2luLXRvcDogMGNtOyIgdHlwZT0iZGlzYyI+PHVsPjx1bD48dWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7Ij5IQUxfSEFTSF9NRDVfQWNjdW11bGF0ZSgpIHJlbmFtZWQgSEFMX0hBU0hfTUQ1X0FjY21sdCgpPC9zcGFuPjwvbGk+PC91bD48dWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7Ij5IQUxfSEFTSF9TSEExX0FjY3VtdWxhdGUoKSByZW5hbWVkIEhBTF9IQVNIX1NIQTFfQWNjbWx0KCk8L3NwYW4+PC9saT48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiPkhBTF9IQVNIRXhfU0hBMjI0X0FjY3VtdWxhdGUoKSByZW5hbWVkIEhBTF9IQVNIRXhfU0hBMjI0X0FjY21sdCgpPC9zcGFuPjwvbGk+PC91bD48L3VsPjwvdWw+PC91bD48dWwgc3R5bGU9Im1hcmdpbi10b3A6IDBjbTsiIHR5cGU9ImRpc2MiPjx1bD48dWw+PHVsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyI+SEFMX0hBU0hFeF9TSEEyNTZfQWNjdW11bGF0ZSgpIHJlbmFtZWQgSEFMX0hBU0hFeF9TSEEyPC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7Ij41Njwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyI+X0FjY21sdCgpPC9zcGFuPjwvbGk+PC91bD48L3VsPjwvdWw+PC91bD48dWwgc3R5bGU9Im1hcmdpbi10b3A6IDBjbTsiIHR5cGU9ImRpc2MiPjx1bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiPkhBU0ggPHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiBib2xkOyI+aGFuZGxlcjwvc3Bhbj4gc3RhdGUgaXMgPHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiBib2xkOyI+bm8gbW9yZTwvc3Bhbj4gcmVzZXQgdG8gSEFMX0hBU0hfU1RBVEVfUkVBRFkgPHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiBib2xkOyI+b25jZSBETUEgaGFzIGJlZW4gc3RhcnRlZDwvc3Bhbj4gaW4gdGhlIGZvbGxvd2luZyBBUElzOjwvc3Bhbj48L2xpPjx1bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiPkhBTF9IQVNIX01ENV9TdGFydF9ETUEoKTwvc3Bhbj48L2xpPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyI+PC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7Ij5IQUxfSE1BQ19NRDVfU3RhcnRfRE1BKCk8L3NwYW4+PC9saT48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiPkhBTF9IQVNIX1NIQTFfU3RhcnRfRE1BKCk8L3NwYW4+PC9saT48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiPkhBTF9ITUFDX1NIQTFfU3RhcnRfRE1BKCk8YnI+PC9zcGFuPjwvbGk+PC91bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiPkhBU0ggPHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiBib2xkOyI+cGhhc2U8L3NwYW4+IHN0YXRlIGlzIG5vdyBzZXQgdG8gSEFMX0hBU0hfUEhBU0VfUkVBRFkgPHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiBib2xkOyI+b25jZSB0aGUgZGlnZXN0IGhhcyBiZWVuIHJlYWQ8L3NwYW4+IGluIHRoZSBmb2xsb3dpbmcgQVBJczo8L3NwYW4+PC9saT48dWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7Ij5IQVNIX0lUKCk8L3NwYW4+PC9saT48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiPkhNQUNfUHJvY2Vzc2luZygpPC9zcGFuPjwvbGk+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7Ij5IQVNIX1N0YXJ0KCk8L3NwYW4+PC9saT48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiPkhBU0hfRmluaXNoKCk8YnI+PC9zcGFuPjwvbGk+PC91bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiPkNhc2Ugb2YgYSBsYXJnZSBidWZmZXIgc2NhdHRlcmVkIGFyb3VuZCBpbgorbWVtb3J5IGVhY2ggcGllY2Ugb2Ygd2hpY2ggaXMgPHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiBib2xkOyI+bm90PC9zcGFuPiBuZWNlc3NhcmlseSBhIDxzcGFuIHN0eWxlPSJmb250LXdlaWdodDogYm9sZDsiPm11bHRpcGxlIG9mIDQ8L3NwYW4+IGJ5dGVzIGluIGxlbmd0aDwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyI+Ljwvc3Bhbj48L2xpPjx1bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiPkluIHNlY3Rpb24gIjwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyI+IyMjIyMgSG93IHRvIHVzZSB0aGlzIGRyaXZlciAjIyMjIzwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyI+IiwKK3N1Yi1zZWN0aW9uICIqKiogUmVtYXJrcyBvbiBtZXNzYWdlIGxlbmd0aCAqKioiIGFkZGVkIHRvIHByb3ZpZGUKK3JlY29tbWVuZGF0aW9ucyB0byBmb2xsb3cgaW4gc3VjaCBjYXNlLjwvc3Bhbj48L2xpPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyI+Tm8gbW9kaWZpY2F0aW9uIG9mIHRoZSBkcml2ZXIgYXMgdGhlIHJvb3QtY2F1c2UgaXMgYXQgZGVzaWduLWxldmVsLjxicj48L3NwYW4+PC9saT48L3VsPjwvdWw+PC91bD48Yj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyI+PC9zcGFuPjwvYj48Yj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyI+PC9zcGFuPjwvYj48dWwgc3R5bGU9Im1hcmdpbi10b3A6IDBjbTsiIHR5cGU9ImRpc2MiPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48Yj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyI+SEFMJm5ic3A7Q0FOIDwvc3Bhbj48L2I+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiPnVwZGF0ZTwvc3Bhbj48L2xpPjx1bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiPkhBTF9DQU5fR2V0UnhNZXNzYWdlKCkKK3VwZGF0ZSB0byBnZXQgdGhlIGNvcnJlY3QgdmFsdWUgZm9yIHRoZSBSVFImbmJzcDsodHlwZSBvZiBmcmFtZSBmb3IgdGhlCittZXNzYWdlIHRoYXQgd2lsbCBiZSB0cmFuc21pdHRlZCkgPC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7Ij5maWVsZCBpbiB0aGUgQ0FOX1J4SGVhZGVyVHlwZURlZiBzdHJ1Y3R1cmUuPC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7Ij48L3NwYW4+PC9saT48L3VsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48Yj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyI+SEFMIERDTUkgPC9zcGFuPjwvYj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyI+dXBkYXRlPC9zcGFuPjwvbGk+PHVsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyI+QWRkIG5ldyBIQUxfRENNSV9Db25maWdTeW5jVW5tYXNrKCkgQVBJIHRvIHNldCBlbWJlZGRlZCBzeW5jaHJvbml6YXRpb24gZGVsaW1pdGVycyB1bm1hc2tzLjwvc3Bhbj48L2xpPjwvdWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPgorCis8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMnB0OyBmb250LWZhbWlseTogU3ltYm9sOyI+PC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEycHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtUaW1lcyBOZXcgUm9tYW4mcXVvdDssc2VyaWY7Ij48L3NwYW4+PGI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiIGxhbmc9IkVOLVVTIj5IQUwgUlRDPC9zcGFuPjwvYj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPiB1cGRhdGU8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6ICZxdW90O1RpbWVzIE5ldyBSb21hbiZxdW90OyxzZXJpZjsiPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4KKworPC9saT48dWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7IiBsYW5nPSJFTi1VUyI+Rm9sbG93aW5nCisgICAgIElSUSBoYW5kbGVycycgaW1wbGVtZW50YXRpb24gaGFzIGJlZW4gYWxpZ25lZCB3aXRoIHRoZSBTVE0zMkN1YmUgZmlybXdhcmUKKyAgICAgc3BlY2lmaWNhdGlvbiAoaW4gY2FzZSBvZiBpbnRlcnJ1cHQgbGluZXMgc2hhcmVkIGJ5IG11bHRpcGxlIGV2ZW50cywgZmlyc3QKKyAgICAgY2hlY2sgdGhlIElUIGVuYWJsZSBiaXQgaXMgc2V0IHRoZW4gY2hlY2sgdGhlIElUIGZsYWcgaXMgc2V0IHRvbyk6PC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEycHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtUaW1lcyBOZXcgUm9tYW4mcXVvdDssc2VyaWY7IiBsYW5nPSJFTi1VUyI+PG86cD48L286cD48L3NwYW4+PC9saT48L3VsPjx1bD48dWwgc3R5bGU9Im1hcmdpbi10b3A6IDBjbTsiIHR5cGU9ImNpcmNsZSI+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7IiBsYW5nPSJFTi1VUyI+SEFMX1JUQ19BbGFybUlSUUhhbmRsZXIoKTwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMnB0OyBmb250LWZhbWlseTogJnF1b3Q7VGltZXMgTmV3IFJvbWFuJnF1b3Q7LHNlcmlmOyI+PG86cD48L286cD48L3NwYW4+PC9saT48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiIGxhbmc9IkVOLVVTIj5IQUxfUlRDRXhfV2FrZVVwVGltZXJJUlFIYW5kbGVyKCk8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6ICZxdW90O1RpbWVzIE5ldyBSb21hbiZxdW90OyxzZXJpZjsiPjxvOnA+PC9vOnA+PC9zcGFuPjwvbGk+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7IiBsYW5nPSJFTi1VUyI+SEFMX1JUQ0V4X1RhbXBlclRpbWVTdGFtcElSUUhhbmRsZXIoKTwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMnB0OyBmb250LWZhbWlseTogJnF1b3Q7VGltZXMgTmV3IFJvbWFuJnF1b3Q7LHNlcmlmOyI+PG86cD48L286cD48L3NwYW4+PC9saT48L3VsPjwvdWw+PC91bD4KKzx1bCBzdHlsZT0ibWFyZ2luLXRvcDogMGNtOyIgdHlwZT0iZGlzYyI+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7Ij48L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6ICZxdW90O1RpbWVzIE5ldyBSb21hbiZxdW90OyxzZXJpZjsiPiA8L3NwYW4+PGI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiIGxhbmc9IkVOLVVTIj5IQUwgV1dERzwvc3Bhbj48L2I+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiIGxhbmc9IkVOLVVTIj4gdXBkYXRlPC9zcGFuPjwvbGk+PHVsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPkluCisgICAgICIjIyMjIyBXV0RHIFNwZWNpZmljIGZlYXR1cmVzICMjIyMjIiBkZXNjcmlwdGl2ZSBjb21tZW50CisgICAgIHNlY3Rpb246PC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEycHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtUaW1lcyBOZXcgUm9tYW4mcXVvdDssc2VyaWY7IiBsYW5nPSJFTi1VUyI+PG86cD48L286cD48L3NwYW4+PC9saT48dWwgc3R5bGU9Im1hcmdpbi10b3A6IDBjbTsiIHR5cGU9ImNpcmNsZSI+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7IiBsYW5nPSJFTi1VUyI+TWF4aW1hbAorICAgICAgcHJlc2NhbGVyIHZhbHVlIGhhcyBiZWVuIGNvcnJlY3RlZCAoOCBpbnN0ZWFkIG9mIDEyOCkuPC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEycHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtUaW1lcyBOZXcgUm9tYW4mcXVvdDssc2VyaWY7IiBsYW5nPSJFTi1VUyI+PG86cD48L286cD48L3NwYW4+PC9saT48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiIGxhbmc9IkVOLVVTIj5NYXhpbWFsCisgICAgICBBUEIgZnJlcXVlbmN5IGhhcyBiZWVuIGNvcnJlY3RlZCAoNDJNSHogaW5zdGVhZCBvZiA1Nk1IeikgYW5kIHBvc3NpYmxlCisgICAgICB0aW1lb3V0IHZhbHVlcyB1cGRhdGVkLjwvc3Bhbj48L2xpPjwvdWw+PC91bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PGI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiPkhBTCBETUEyRCA8L3NwYW4+PC9iPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7Ij51cGRhdGU8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6ICZxdW90O1RpbWVzIE5ldyBSb21hbiZxdW90OyxzZXJpZjsiPjxvOnA+PC9vOnA+PC9zcGFuPjwvbGk+PHVsIHN0eWxlPSJtYXJnaW4tdG9wOiAwY207IiB0eXBlPSJjaXJjbGUiPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPjwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMnB0OyBmb250LWZhbWlseTogJnF1b3Q7VGltZXMgTmV3IFJvbWFuJnF1b3Q7LHNlcmlmOyIgbGFuZz0iRU4tVVMiPjxvOnA+PC9vOnA+PC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7Ij5BZGQgdGhlIGZvbGxvd2luZyBBUEkncyB0byBTdGFydCBETUEyRCBDTFVUIExvYWRpbmcuPC9zcGFuPjwvbGk+PHVsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyI+SEFMX0RNQTJEX0NMVVRTdGFydExvYWQoKSBTdGFydCBETUEyRCBDTFVUIExvYWRpbmcuPC9zcGFuPjwvbGk+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7Ij5IQUxfRE1BMkRfQ0xVVFN0YXJ0TG9hZF9JVCgpIFN0YXJ0IERNQTJEIENMVVQgTG9hZGluZyB3aXRoIGludGVycnVwdCBlbmFibGVkLjwvc3Bhbj48L2xpPjwvdWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7Ij5UaGUgZm9sbG93aW5nIG9sZCB3cm9uZyBzZXJ2aWNlcyB3aWxsIGJlIGtlcHQgaW4gdGhlIEhBTCBEQ01JIGRyaXZlciBmb3IgbGVnYWN5IHB1cnBvc2UgYW5kIGEgc3BlY2lmaWMgTm90ZSZuYnNwO2lzIGFkZGVkOjwvc3Bhbj48L2xpPjx1bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiPkhBTF9ETUEyRF9DTFVUTG9hZCgpIGNhbiBiZSByZXBsYWNlZCB3aXRoIDwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyI+SEFMX0RNQTJEX0NMVVRTdGFydExvYWQoKTwvc3Bhbj48L2xpPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyI+SEFMX0RNQTJEX0NMVVRMb2FkX0lUKCkmbmJzcDs8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiPmNhbiBiZSByZXBsYWNlZCB3aXRoIDwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyI+SEFMX0RNQTJEX0NMVVRTdGFydExvYWRfSVQoKTwvc3Bhbj48L2xpPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyI+SEFMX0RNQTJEX0NvbmZpZ0NMVVQoKSBjYW4gYmUgb21pdHRlZCBhcyB0aGUgY29uZmlnIGNhbiBiZSBwZXJmb3JtZWQgdXNpbmcgdGhlJm5ic3A7PC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7Ij5IQUxfRE1BMkRfQ0xVVFN0YXJ0TG9hZCgpIEFQSS48L3NwYW4+PC9saT48L3VsPjwvdWw+PC91bD48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyI+PC9zcGFuPjx1bCBzdHlsZT0ibWFyZ2luLXRvcDogMGNtOyIgdHlwZT0iZGlzYyI+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7Ij5IQUwgU0RNTUMgPC9zcGFuPjwvYj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyI+dXBkYXRlPC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEycHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtUaW1lcyBOZXcgUm9tYW4mcXVvdDssc2VyaWY7Ij48bzpwPjwvbzpwPjwvc3Bhbj48L2xpPjx1bCBzdHlsZT0ibWFyZ2luLXRvcDogMGNtOyIgdHlwZT0iY2lyY2xlIj48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTFwdDsgZm9udC1mYW1pbHk6ICZxdW90O0NhbGlicmkmcXVvdDssc2Fucy1zZXJpZjsiIGxhbmc9IkVOLVVTIj5GaXgmbmJzcDsKK3R5cG8gaW4gIkZpbGVGb3JtYXRHcm91cCIgcGFyYW1ldGVyJm5ic3A7aW4gdGhlIEhBTF9NTUNfQ2FyZENTRFR5cGVEZWYgYW5kCitIQUxfU0RfQ2FyZENTRFR5cGVEZWYgc3RydWN0dXJlcyZuYnNwOzwvc3Bhbj48L2xpPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyI+Rml4IGFuIGltcHJvdmUmbmJzcDtoYW5kbGUgc3RhdGUgYW5kIGVycm9yIG1hbmFnZW1lbnQ8L3NwYW4+PC9saT48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiPlJlbmFtZSB0aGUgZGVmaW5lZCBNTUMgY2FyZCBjYXBhY2l0eSB0eXBlIHRvIGJlIG1vcmUgbWVhbmluZ2Z1bDo8L3NwYW4+PC9saT48dWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7Ij5VcGRhdGUgPHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiBib2xkOyI+TU1DX0hJR0hfVk9MVEFHRV9DQVJEPC9zcGFuPiZuYnNwO3RvIDxzcGFuIHN0eWxlPSJmb250LXdlaWdodDogYm9sZDsiPk1NQyBMT1dfQ0FQQUNJVFlfQ0FSRDwvc3Bhbj48L3NwYW4+PC9saT48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiPlVwZGF0ZSA8c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6IGJvbGQ7Ij5NTUNfRFVBTF9WT0xUQUdFX0NSQUQ8L3NwYW4+IHRvIDxzcGFuIHN0eWxlPSJmb250LXdlaWdodDogYm9sZDsiPk1NQ19ISUdIX0NBUEFDSVRZX0NBUkQ8L3NwYW4+PC9zcGFuPjwvbGk+PC91bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImNvbG9yOiByZ2IoMCwgMCwgMCk7IGZvbnQtZmFtaWx5OiBWZXJkYW5hLHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTMuMzMzM3B4OyBmb250LXN0eWxlOiBub3JtYWw7IGZvbnQtd2VpZ2h0OiA0MDA7IGxldHRlci1zcGFjaW5nOiBub3JtYWw7IG9ycGhhbnM6IDI7IHRleHQtYWxpZ246IGxlZnQ7IHRleHQtaW5kZW50OiAwcHg7IHRleHQtdHJhbnNmb3JtOiBub25lOyB3aGl0ZS1zcGFjZTogbm9ybWFsOyB3aWRvd3M6IDI7IHdvcmQtc3BhY2luZzogMHB4OyBkaXNwbGF5OiBpbmxpbmUgISBpbXBvcnRhbnQ7IGZsb2F0OiBub25lOyI+Rml4IG1hbmFnZW1lbnQgb2YgcGVyaXBoZXJhbCBmbGFncyBkZXBlbmRpbmcgb24gY29tbWFuZHMgb3ImbmJzcDtkYXRhIHRyYW5zZmVyczwvc3Bhbj48L2xpPjx1bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImNvbG9yOiByZ2IoMCwgMCwgMCk7IGZvbnQtZmFtaWx5OiBWZXJkYW5hLHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTMuMzMzM3B4OyBmb250LXN0eWxlOiBub3JtYWw7IGZvbnQtd2VpZ2h0OiA0MDA7IGxldHRlci1zcGFjaW5nOiBub3JtYWw7IG9ycGhhbnM6IDI7IHRleHQtYWxpZ246IGxlZnQ7IHRleHQtaW5kZW50OiAwcHg7IHRleHQtdHJhbnNmb3JtOiBub25lOyB3aGl0ZS1zcGFjZTogbm9ybWFsOyB3aWRvd3M6IDI7IHdvcmQtc3BhY2luZzogMHB4OyBkaXNwbGF5OiBpbmxpbmUgISBpbXBvcnRhbnQ7IGZsb2F0OiBub25lOyI+QWRkCituZXcgZGVmaW5lcyAiU0RJT19TVEFUSUNfQ01EX0ZMQUdTIiBhbmQgIlNESU9fU1RBVElDX0RBVEFfRkxBR1MiJm5ic3A7PC9zcGFuPjwvbGk+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJjb2xvcjogcmdiKDAsIDAsIDApOyBmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyBmb250LXNpemU6IDEzLjMzMzNweDsgZm9udC1zdHlsZTogbm9ybWFsOyBmb250LXdlaWdodDogNDAwOyBsZXR0ZXItc3BhY2luZzogbm9ybWFsOyBvcnBoYW5zOiAyOyB0ZXh0LWFsaWduOiBsZWZ0OyB0ZXh0LWluZGVudDogMHB4OyB0ZXh0LXRyYW5zZm9ybTogbm9uZTsgd2hpdGUtc3BhY2U6IG5vcm1hbDsgd2lkb3dzOiAyOyB3b3JkLXNwYWNpbmc6IDBweDsgZGlzcGxheTogaW5saW5lICEgaW1wb3J0YW50OyBmbG9hdDogbm9uZTsiPlVwZGF0ZXMmbmJzcDtIQUwgU0QgYW5kIEhBTCBNTUMgZHJpdmVycyB0byBtYW5hZ2UgdGhlIG5ldyBTRElPIHN0YXRpYyBmbGFncy48YnI+PC9zcGFuPjwvbGk+PC91bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiIGxhbmc9IkVOLVVTIj5EdWUgdG8gbGltaXRhdGlvbiBTRElPIGhhcmR3YXJlIGZsb3cgY29udHJvbCBpbmRpY2F0ZWQgaW4gRXJyYXRhIFNoZWV0Ojwvc3Bhbj48L2xpPjx1bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiIGxhbmc9IkVOLVVTIj5JbgorNC1iaXRzIGJ1cyB3aWRlIG1vZGUsIGRvIG5vdCB1c2UgdGhlIEhBTF9TRF9Xcml0ZUJsb2Nrc19JVCgpIG9yCitIQUxfU0RfV3JpdGVCbG9ja3MoKSBBUElzIG90aGVyd2lzZSB1bmRlcnJ1biB3aWxsIG9jY3VyIGFuZCBpdCBpc24ndAorcG9zc2libGUgdG8gYWN0aXZhdGUgdGhlIGZsb3cgY29udHJvbC48L3NwYW4+PC9saT48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiIGxhbmc9IkVOLVVTIj5Vc2UgRE1BIG1vZGUgd2hlbiB1c2luZyA0LWJpdHMgYnVzIHdpZGUgbW9kZSBvciBkZWNyZWFzZSB0aGUgU0RJT19DSyBmcmVxdWVuY3kuPC9zcGFuPjwvbGk+PC91bD48L3VsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48Yj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyI+SEFMIFVBUlQgPC9zcGFuPjwvYj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyI+dXBkYXRlPC9zcGFuPjwvbGk+PHVsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPlVwZGF0ZSBVQVJUIHBvbGxpbmcgcHJvY2Vzc2VzIHRvIGhhbmRsZSBlZmZpY2llbnRseSA8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiByZ2IoOSwgMTEyLCAxNzIpOyBmb250LWZhbWlseTogTW9udHNlcnJhdCxBcmlhbCwmcXVvdDtzYW5zIHNlcmlmJnF1b3Q7OyBmb250LXNpemU6IDE0cHg7IGZvbnQtc3R5bGU6IG5vcm1hbDsgZm9udC13ZWlnaHQ6IDQwMDsgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDsgb3JwaGFuczogMjsgdGV4dC1hbGlnbjogc3RhcnQ7IHRleHQtaW5kZW50OiAwcHg7IHRleHQtdHJhbnNmb3JtOiBub25lOyB3aGl0ZS1zcGFjZTogbm9ybWFsOyB3aWRvd3M6IDI7IHdvcmQtc3BhY2luZzogMHB4OyBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjU1LCAyNTUsIDI1NSk7IHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyBkaXNwbGF5OiBpbmxpbmUgISBpbXBvcnRhbnQ7IGZsb2F0OiBub25lOyI+PC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7IiBsYW5nPSJFTi1VUyI+dGhlIExvY2sgbWVjaGFuaXNtPC9zcGFuPjwvbGk+PHVsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPiZuYnNwO01vdmUgdGhlIHByb2Nlc3MgdW5sb2NrIGF0IHRoZSB0b3Agb2YgdGhlJm5ic3A7PC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7IiBsYW5nPSJFTi1VUyI+SEFMX1VBUlRfUmVjZWl2ZSgpIGFuZCBIQUxfVUFSVF9UcmFuc21pdCgpIEFQSS48L3NwYW4+PC9saT48L3VsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPkZpeCBiYXVkcmF0ZSBjYWxjdWxhdGlvbiBlcnJvcgorZm9yIGNsb2NrIGhpZ2hlciB0aGFuIDE3Mk1oejwvc3Bhbj48L2xpPjx1bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiIGxhbmc9IkVOLVVTIj5BZGQgYSBmb3JjZWQgY2FzdCBvbiBVQVJUX0RJVl9TQU1QTElORzgoKSBhbmQgVUFSVF9ESVZfU0FNUExJTkcxNigpIG1hY3Jvcy48L3NwYW4+PC9saT48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiIGxhbmc9IkVOLVVTIj5SZW1vdmUKK3VzZWxlc3MgcGFyZW50aGVzaXMgZnJvbSBVQVJUX0RJVkZSQVFfU0FNUExJTkc4KCksCitVQVJUX0RJVkZSQVFfU0FNUExJTkcxNigpLCBVQVJUX0JSUl9TQU1QTElORzgoKSBhbmQKK1VBUlRfQlJSX1NBTVBMSU5HMTYoKSBtYWNyb3MgdG8gc29sdmUgc29tZSBNSVNSQSB3YXJuaW5ncy48L3NwYW4+PC9saT48L3VsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPlVwZGF0ZSBVQVJUIGludGVycnVwdGlvbiBoYW5kbGVyIHRvIG1hbmFnZSBjb3JyZWN0bHkgdGhlIDwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPm92ZXJydW4gaW50ZXJydXB0PC9zcGFuPjwvbGk+PHVsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPkFkZCZuYnNwOzwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPmluIHRoZSBIQUxfVUFSVF9JUlFIYW5kbGVyKCkgQVBJIGEgPC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7IiBsYW5nPSJFTi1VUyI+Y2hlY2sgb24gPC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7IiBsYW5nPSJFTi1VUyI+VVNBUlRfQ1IxX1JYTkVJRSBiaXQgd2hlbiBhbiBvdmVycnVuIGludGVycnVwdCBvY2N1cnMuPC9zcGFuPjwvbGk+PC91bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiIGxhbmc9IkVOLVVTIj5GaXggYmF1ZHJhdGUgY2FsY3VsYXRpb24gZXJyb3I8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiIGxhbmc9IkVOLVVTIj4mbmJzcDtVQVJUOSBhbmQgVUFSVDEwPC9zcGFuPjwvbGk+PHVsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPkluIDwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPjwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPlVBUlRfU2V0Q29uZmlnKCkgQVBJPC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7IiBsYW5nPSJFTi1VUyI+IDwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPmZpeAorVUFSVDkgYW5kIFVBUlQxMCBjbG9jayBzb3VyY2Ugd2hlbiBjb21wdXRpbmcgYmF1ZHJhdGUgdmFsdWVzIGJ5IGFkZGluZworYSBjaGVjayBvbiB0aGVzZSBpbnN0YW5jZXMgYW5kIHNldHRpbmcgY2xvY2sgc291cmNlUENMSzIgaW5zdGVhZCBvZgorUENMSzEuPC9zcGFuPjwvbGk+PC91bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiIGxhbmc9IkVOLVVTIj5VcGRhdGUgVUFSVF9TZXRDb25maWcoKSBBUEk8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiIGxhbmc9IkVOLVVTIj48L3NwYW4+PC9saT48dWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7IiBsYW5nPSJFTi1VUyI+U3BsaXQKK0hBTF9SQ0NfR2V0UENMSzFGcmVxKCkgYW5kIEhBTF9SQ0NfR2V0UENMSzJGcmVxKCkgbWFjcm9zIGZyb20gdGhlCitVQVJUX0JSUl9TQU1QTElORzgoKSBhbmQgVUFSVF9CUlJfU0FNUExJTkc4KCkgbWFjcm9zJm5ic3A7PC9zcGFuPjwvbGk+PC91bD48L3VsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48Yj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyI+SEFMIFVTQVJUIDwvc3Bhbj48L2I+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiPnVwZGF0ZTwvc3Bhbj48L2xpPjx1bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiIGxhbmc9IkVOLVVTIj5GaXggYmF1ZHJhdGUgY2FsY3VsYXRpb24gZXJyb3IKK2ZvciBjbG9jayBoaWdoZXIgdGhhbiAxNzJNaHo8L3NwYW4+PC9saT48dWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7IiBsYW5nPSJFTi1VUyI+QWRkIGEgZm9yY2VkIGNhc3Qgb24gVVNBUlRfRElWKCkgbWFjcm8uPC9zcGFuPjwvbGk+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7IiBsYW5nPSJFTi1VUyI+UmVtb3ZlIHVzZWxlc3MmbmJzcDs8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiIGxhbmc9IkVOLVVTIj5wYXJlbnRoZXNpczwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPiBmcm9tIFVTQVJUX0RJVkZSQVEoKSBtYWNybyB0byBzb2x2ZSBzb21lIE1JU1JBIHdhcm5pbmdzLjwvc3Bhbj48L2xpPjwvdWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7IiBsYW5nPSJFTi1VUyI+VXBkYXRlIFVTQVJUIGludGVycnVwdGlvbiBoYW5kbGVyIHRvIG1hbmFnZSBjb3JyZWN0bHkgdGhlIDwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPm92ZXJydW4gaW50ZXJydXB0PC9zcGFuPjwvbGk+PHVsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPkFkZCZuYnNwOzwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPmluIHRoZSBIQUxfVVNBUlRfSVJRSGFuZGxlcigpIEFQSSBhIDwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPmNoZWNrIG9uIDwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPlVTQVJUX0NSMV9SWE5FSUUgYml0IHdoZW4gYW4gb3ZlcnJ1biBpbnRlcnJ1cHQgb2NjdXJzLjwvc3Bhbj48L2xpPjwvdWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7IiBsYW5nPSJFTi1VUyI+Rml4IGJhdWRyYXRlIGNhbGN1bGF0aW9uIGVycm9yPC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7IiBsYW5nPSJFTi1VUyI+Jm5ic3A7VUFSVDkgYW5kIFVBUlQxMDwvc3Bhbj48L2xpPjx1bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiIGxhbmc9IkVOLVVTIj5JbiA8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiIGxhbmc9IkVOLVVTIj48L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiIGxhbmc9IkVOLVVTIj5VU0FSVF9TZXRDb25maWcoKSBBUEk8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiIGxhbmc9IkVOLVVTIj4gPC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7IiBsYW5nPSJFTi1VUyI+Zml4CitVQVJUOSBhbmQgVUFSVDEwIGNsb2NrIHNvdXJjZSB3aGVuIGNvbXB1dGluZyBiYXVkcmF0ZSB2YWx1ZXMgYnkgYWRkaW5nCithIGNoZWNrIG9uIHRoZXNlIGluc3RhbmNlcyBhbmQgc2V0dGluZyBjbG9jayBzb3VyY2VQQ0xLMiBpbnN0ZWFkIG9mCitQQ0xLMS48L3NwYW4+PC9saT48L3VsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPlVwZGF0ZSBVU0FSVF9TZXRDb25maWcoKSBBUEk8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiIGxhbmc9IkVOLVVTIj48L3NwYW4+PC9saT48dWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7IiBsYW5nPSJFTi1VUyI+U3BsaXQgSEFMX1JDQ19HZXRQQ0xLMUZyZXEoKSBhbmQgSEFMX1JDQ19HZXRQQ0xLMkZyZXEoKSBtYWNyb3MgZnJvbSB0aGUgVVNBUlRfQlJSKCkgbWFjcm88L3NwYW4+PC9saT48L3VsPjwvdWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7Ij5IQUwgSVJEQSA8L3NwYW4+PC9iPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7Ij51cGRhdGU8L3NwYW4+PC9saT48dWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7IiBsYW5nPSJFTi1VUyI+Rml4IGJhdWRyYXRlIGNhbGN1bGF0aW9uIGVycm9yCitmb3IgY2xvY2sgaGlnaGVyIHRoYW4gMTcyTWh6PC9zcGFuPjwvbGk+PHVsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPkFkZCBhIGZvcmNlZCBjYXN0IG9uIElSREFfRElWKCkgbWFjcm8uPC9zcGFuPjwvbGk+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7IiBsYW5nPSJFTi1VUyI+UmVtb3ZlIHVzZWxlc3MmbmJzcDs8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiIGxhbmc9IkVOLVVTIj48L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiIGxhbmc9IkVOLVVTIj5wYXJlbnRoZXNpczwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPiA8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiIGxhbmc9IkVOLVVTIj4gZnJvbSBJUkRBX0RJVkZSQVEoKSBtYWNybyZuYnNwOzwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPnRvIHNvbHZlIHNvbWUgTUlTUkEgd2FybmluZ3MuPC9zcGFuPjwvbGk+PC91bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiIGxhbmc9IkVOLVVTIj5VcGRhdGUgSVJEQSBpbnRlcnJ1cHRpb24gaGFuZGxlciB0byBtYW5hZ2UgY29ycmVjdGx5IHRoZSA8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiIGxhbmc9IkVOLVVTIj5vdmVycnVuIGludGVycnVwdDwvc3Bhbj48L2xpPjx1bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiIGxhbmc9IkVOLVVTIj5BZGQmbmJzcDs8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiIGxhbmc9IkVOLVVTIj5pbiB0aGUgSEFMX0lSREFfSVJRSGFuZGxlcigpIEFQSSBhIDwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPmNoZWNrIG9uIDwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPlVTQVJUX0NSMV9SWE5FSUUgYml0IHdoZW4gYW4gb3ZlcnJ1biBpbnRlcnJ1cHQgb2NjdXJzLjwvc3Bhbj48L2xpPjwvdWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7IiBsYW5nPSJFTi1VUyI+Rml4IGJhdWRyYXRlIGNhbGN1bGF0aW9uIGVycm9yPC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7IiBsYW5nPSJFTi1VUyI+Jm5ic3A7VUFSVDkgYW5kIFVBUlQxMDwvc3Bhbj48L2xpPjx1bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiIGxhbmc9IkVOLVVTIj5JbiA8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiIGxhbmc9IkVOLVVTIj48L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiIGxhbmc9IkVOLVVTIj5JUkRBX1NldENvbmZpZygpIEFQSTwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPiA8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiIGxhbmc9IkVOLVVTIj5maXgKK1VBUlQ5IGFuZCBVQVJUMTAgY2xvY2sgc291cmNlIHdoZW4gY29tcHV0aW5nIGJhdWRyYXRlIHZhbHVlcyBieSBhZGRpbmcKK2EgY2hlY2sgb24gdGhlc2UgaW5zdGFuY2VzIGFuZCBzZXR0aW5nIGNsb2NrIHNvdXJjZVBDTEsyIGluc3RlYWQgb2YKK1BDTEsxLjwvc3Bhbj48L2xpPjwvdWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7IiBsYW5nPSJFTi1VUyI+VXBkYXRlIElSREFfU2V0Q29uZmlnKCkgQVBJPC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7IiBsYW5nPSJFTi1VUyI+PC9zcGFuPjwvbGk+PHVsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPlNwbGl0IEhBTF9SQ0NfR2V0UENMSzFGcmVxKCkgYW5kIEhBTF9SQ0NfR2V0UENMSzJGcmVxKCkgbWFjcm9zIGZyb20gdGhlIElSREFfQlJSKCkgbWFjcm88L3NwYW4+PC9saT48L3VsPjwvdWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7Ij5IQUwgU01BUlRDQVJEIDwvc3Bhbj48L2I+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiPnVwZGF0ZTwvc3Bhbj48L2xpPjx1bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiIGxhbmc9IkVOLVVTIj5GaXggYmF1ZHJhdGUgY2FsY3VsYXRpb24gZXJyb3IKK2ZvciBjbG9jayBoaWdoZXIgdGhhbiAxNzJNaHo8L3NwYW4+PC9saT48dWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7IiBsYW5nPSJFTi1VUyI+QWRkIGEgZm9yY2VkIGNhc3Qgb24gU01BUlRDQVJEX0RJVigpIG1hY3JvLjwvc3Bhbj48L2xpPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPlJlbW92ZSZuYnNwOzwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPnVzZWxlc3MmbmJzcDs8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiIGxhbmc9IkVOLVVTIj48L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiIGxhbmc9IkVOLVVTIj5wYXJlbnRoZXNpczwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPiBmcm9tIFNNQVJUQ0FSRF9ESVZGUkFRKCkgbWFjcm8mbmJzcDs8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiIGxhbmc9IkVOLVVTIj50byBzb2x2ZSBzb21lIE1JU1JBIHdhcm5pbmdzLjwvc3Bhbj48L2xpPjwvdWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7IiBsYW5nPSJFTi1VUyI+VXBkYXRlIFNNQVJUQ0FSRCBpbnRlcnJ1cHRpb24gaGFuZGxlciB0byBtYW5hZ2UgY29ycmVjdGx5IHRoZSA8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiIGxhbmc9IkVOLVVTIj5vdmVycnVuIGludGVycnVwdGk8L3NwYW4+PC9saT48dWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7IiBsYW5nPSJFTi1VUyI+QWRkJm5ic3A7PC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7IiBsYW5nPSJFTi1VUyI+aW4gdGhlIEhBTF9TTUFSVENBUkRfSVJRSGFuZGxlcigpIEFQSSBhIDwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPmNoZWNrIG9uIDwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPlVTQVJUX0NSMV9SWE5FSUUgYml0IHdoZW4gYW4gb3ZlcnJ1biBpbnRlcnJ1cHQgb2NjdXJzLjwvc3Bhbj48L2xpPjwvdWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7IiBsYW5nPSJFTi1VUyI+VXBkYXRlIFNNQVJUQ0FSRF9TZXRDb25maWcoKSBBUEk8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiIGxhbmc9IkVOLVVTIj48L3NwYW4+PC9saT48dWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7IiBsYW5nPSJFTi1VUyI+U3BsaXQgSEFMX1JDQ19HZXRQQ0xLMUZyZXEoKSBhbmQgSEFMX1JDQ19HZXRQQ0xLMkZyZXEoKSBtYWNyb3MgZnJvbSB0aGUgU01BUlRDQVJEX0JSUigpIG1hY3JvPC9zcGFuPjwvbGk+PC91bD48L3VsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48Yj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyI+SEFMIFRJTSA8L3NwYW4+PC9iPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7Ij51cGRhdGU8L3NwYW4+PC9saT48dWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7Ij5BZGQgbmV3IG1hY3JvcyB0byBlbmFibGUgYW5kIGRpc2FibGUgdGhlIGZhc3QgbW9kZSB3aGVuIHVzaW5nIHRoZSBvbmUgcHVsc2UgbW9kZSB0byBvdXRwdXQgYSB3YXZlZm9ybSB3aXRoIGEgbWluaW11bSBkZWxheTwvc3Bhbj48L2xpPjx1bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiIGxhbmc9IkVOLVVTIj5fX0hBTF9USU1fRU5BQkxFX09DeEZBU1QoKSBhbmQgX19IQUxfVElNX0RJU0FCTEVfT0N4RkFTVCgpLjwvc3Bhbj48L2xpPjwvdWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7Ij5VcGRhdGUgRW5jb2RlciBpbnRlcmZhY2UgbW9kZSB0byBrZWVwJm5ic3A7PC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7Ij5USU1fQ0NFUl9DQ3hOUCBiaXRzIGxvdzwvc3Bhbj48L2xpPjwvdWw+PHVsPjx1bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiPkFkZCZuYnNwOzwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyI+VElNX0VOQ09ERVJJTlBVVFBPTEFSSVRZX1JJU0lORyBhbmQgVElNX0VOQ09ERVJJTlBVVFBPTEFSSVRZX0ZBTExJTkc8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiPiBkZWZpbml0aW9ucyB0byBkZXRlcm1pbmUgZW5jb2RlciBpbnB1dCBwb2xhcml0eS48L3NwYW4+PC9saT48L3VsPjx1bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiPkFkZCA8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiPklTX1RJTV9FTkNPREVSSU5QVVRfUE9MQVJJVFkoKTwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyI+IG1hY3JvIHRvIGNoZWNrJm5ic3A7dGhlIGVuY29kZXIgaW5wdXQgcG9sYXJpdHkuPC9zcGFuPjwvbGk+PC91bD48dWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7Ij5VcGRhdGUgSEFMX1RJTV9FbmNvZGVyX0luaXQoKSBBUEkmbmJzcDs8L3NwYW4+PC9saT48L3VsPjx1bD48dWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7Ij5SZXBsYWNlIElTX1RJTV9JQ19QT0xBUklUWSgpIG1hY3JvIGJ5IElTX1RJTV9FTkNPREVSSU5QVVRfUE9MQVJJVFkoKSBtYWNyby48L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiPjwvc3Bhbj48L2xpPjwvdWw+PC91bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiPlVwZGF0ZSBUSU0gcmVtYXBwaW5nIGlucHV0IGNvbmZpZ3VyYXRpb24gaW4gSEFMX1RJTUV4X1JlbWFwQ29uZmlnKCkgQVBJPC9zcGFuPjwvbGk+PHVsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyI+UmVtb3ZlIHJlZHVuZGFudCBjaGVjayBvbiA8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiPkxQVElNX09SX1RJTTVfSVRSMV9STVAgYml0IGFuZCByZXBsYWNlIGl0IGJ5IGNoZWNrIG9uIDwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyI+TFBUSU1fT1JfVElNOV9JVFIxX1JNUCA8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiPmJpdC48L3NwYW4+PC9saT48L3VsPjwvdWw+PHVsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyI+VXBkYXRlIEhBTF9USU1FeF9NYXN0ZXJDb25maWdTeW5jaHJvbml6YXRpb24oKSBBUEkgdG8gYXZvaWQgZnVuY3Rpb25hbCBlcnJvcnMgYW5kPC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7Ij4gYXNzZXJ0IGZhaWxzIHdoZW4gdXNpbmcgc29tZSBUSU0gaW5zdGFuY2VzIGFzIGlucHV0IHRyaWdnZXIuPC9zcGFuPjwvbGk+PC91bD48dWw+PHVsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyI+UmVwbGFjZSZuYnNwOzwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyI+SVNfVElNX1NZTkNIUk9fSU5TVEFOQ0UoKSBtYWNybyBieSBJU19USU1fTUFTVEVSX0lOU1RBTkNFKCkgbWFjcm8uJm5ic3A7PC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7Ij48L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiPjwvc3Bhbj48L2xpPjwvdWw+PHVsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyI+QWRkJm5ic3A7SVNfVElNX1NMQVZFX0lOU1RBTkNFKCkgbWFjcm8gdG8mbmJzcDtjaGVjayBvbiBUSU1fU01DUl9NU00gYml0Ljwvc3Bhbj48L2xpPjwvdWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7Ij5BZGQgbGFja2luZyBUSU0gaW5wdXQgcmVtYXBwaW5nIGRlZmluaXRpb24mbmJzcDs8L3NwYW4+PC9saT48dWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7Ij5BZGQgTExfVElNX1RJTTExX1RJMV9STVBfU1BESUZSWCBhbmQgTExfVElNX1RJTTJfSVRSMV9STVBfRVRIX1BUUC48L3NwYW4+PC9saT48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiPkFkZCBsYWNraW5nIGRlZmluaXRpb24gZm9yIGxpbmtlZCBMUFRJTV9USU0gaW5wdXQgdHJpZ2dlciByZW1hcHBpbmcmbmJzcDsmbmJzcDs8L3NwYW4+PC9saT48dWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7Ij5BZGQKK2ZvbGxvd2luZyBkZWZpbml0aW9ucyA6IExMX1RJTV9USU05X0lUUjFfUk1QX1RJTTNfVFJHTywKK0xMX1RJTV9USU05X0lUUjFfUk1QX0xQVElNLCBMTF9USU1fVElNNV9JVFIxX1JNUF9USU0zX1RSR08sCitMTF9USU1fVElNNV9JVFIxX1JNUF9MUFRJTSwgTExfVElNX1RJTTFfSVRSMl9STVBfVElNM19UUkdPIGFuZAorTExfVElNX1RJTTFfSVRSMl9STVBfTFBUSU0uPC9zcGFuPjwvbGk+PC91bD48dWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7Ij5BZGQgYSBuZXcgbWVjaGFuaXNtIGluIExMX1RJTV9TZXRSZW1hcCgpIEFQSSB0byByZW1hcCBUSU0xLCBUSU05LCBhbmQgVElNNSZuYnNwO2lucHV0IHRyaWdnZXJzIG1hcHBlZCBvbiBMUFRJTSByZWdpc3Rlci4mbmJzcDs8L3NwYW4+PC9saT48L3VsPjwvdWw+PC91bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PGI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiPkhBTCBMUFRJTSA8L3NwYW4+PC9iPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7Ij51cGRhdGU8L3NwYW4+PC9saT48dWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7Ij5BZGQgYSBwb2xsaW5nIG1lY2hhbmlzbSB0byBjaGVjayBvbiZuYnNwOzwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPkxQVElNX0ZMQUdfWFhPSzwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyI+IGZsYWdzIGluIGRpZmZlcmVudCBBUEkmbmJzcDs8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiPjwvc3Bhbj48L2xpPjx1bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiPkFkZCZuYnNwOyBMUFRJTV9XYWl0Rm9yRmxhZygpIDwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyI+QVBJIDwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyI+dG8gd2FpdCBmb3IgZmxhZyBzZXQuPC9zcGFuPjwvbGk+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7Ij5QZXJmb3JtIG5ldyBjaGVja3Mgb24gSEFMX0xQVElNX1NUQVRFX1RJTUVPVVQuPC9zcGFuPjwvbGk+PC91bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiPkFkZCBsYWNraW5nIGRlZmluaXRpb25zIG9mIExQVElNIGlucHV0IHRyaWdnZXIgcmVtYXBwaW5nIGFuZCBpdHMgcmVsYXRlZCZuYnNwO0FQSTwvc3Bhbj48L2xpPjx1bD48dWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7Ij5MTF9MUFRJTV9JTlBVVDFfU1JDX1BBRF9BRiwgTExfTFBUSU1fSU5QVVQxX1NSQ19QQURfUEE0LCBMTF9MUFRJTV9JTlBVVDFfU1JDX1BBRF9QQjkgYW5kIExMX0xQVElNX0lOUFVUMV9TUkNfVElNX0RBQy48L3NwYW4+PC9saT48L3VsPjx1bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiPkFkZCBhIG5ldyBBUEkgTExfTFBUSU1fU2V0SW5wdXQxU3JjKCk8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiPiB0byBhY2Nlc3MgdG8gdGhlIExQVElNX09SIHJlZ2lzdGVyIGFuZCByZW1hcCB0aGUgTFBUSU0gaW5wdXQgdHJpZ2dlci48L3NwYW4+PC9saT48L3VsPjwvdWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7Ij5QZXJmb3JtIGEgbmV3IGNoZWNrIG9uIGluZGlyZWN0IEVYVEkyMyBsaW5lIGFzc29jaWF0ZWQgdG8gdGhlIExQVElNIHdha2UgdXAgdGltZXI8L3NwYW4+PC9saT48dWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7Ij5Db25kaXRpb24gdGhlIHVzZSBvZiA8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiPnRoZSBMUFRJTSBXYWtlLXVwIFRpbWVyIGFzc29jaWF0ZWQgRVhUSSBsaW5lJm5ic3A7Y29uZmlndXJhdGlvbidzIG1hY3JvcyBieSZuYnNwOzwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyI+RVhUSV9JTVJfTVIyMyBiaXQgaW4gZGlmZmVyZW50IEFQSSA6PC9zcGFuPjwvbGk+PHVsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyI+X19IQUxfTFBUSU1fV0FLRVVQVElNRVJfRVhUSV9FTkFCTEUvRERJU0FCTEVfRkFMTElOR19FREdFKCk8L3NwYW4+PC9saT48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiPl9fSEFMX0xQVElNX1dBS0VVUFRJTUVSX0VYVElfRElTQUJMRV9GQUxMSU5HX0VER0UoKTwvc3Bhbj48L2xpPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyI+X19IQUxfTFBUSU1fV0FLRVVQVElNRVJfRVhUSV9FTkFCTEVfUklTSU5HX0VER0UoKSZuYnNwOzwvc3Bhbj48L2xpPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyI+X19IQUxfTFBUSU1fV0FLRVVQVElNRVJfRVhUSV9ESVNBQkxFX1JJU0lOR19FREdFKCk8L3NwYW4+PC9saT48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiPl9fSEFMX0xQVElNX1dBS0VVUFRJTUVSX0VYVElfRU5BQkxFX1JJU0lOR19GQUxMSU5HX0VER0UoKTwvc3Bhbj48L2xpPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyI+X19IQUxfTFBUSU1fV0FLRVVQVElNRVJfRVhUSV9ESVNBQkxFX1JJU0lOR19GQUxMSU5HX0VER0UoKTwvc3Bhbj48L2xpPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyI+X19IQUxfTFBUSU1fV0FLRVVQVElNRVJfRVhUSV9HRVRfRkxBRygpPC9zcGFuPjwvbGk+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7Ij5fX0hBTF9MUFRJTV9XQUtFVVBUSU1FUl9FWFRJX0NMRUFSX0ZMQUcoKTwvc3Bhbj48L2xpPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyI+X19IQUxfTFBUSU1fV0FLRVVQVElNRVJfRVhUSV9HRU5FUkFURV9TV0lUKCkmbmJzcDs8L3NwYW4+PC9saT48L3VsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPlVwZGF0ZTwvc3Bhbj4mbmJzcDs8c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPkhBTF9MUFRJTV9UaW1lT3V0X1N0YXJ0X0lUKCksCitIQUxfTFBUSU1fVGltZU91dF9TdG9wX0lUKCksIEhBTF9MUFRJTV9Db3VudGVyX1N0YXJ0X0lUKCkgYW5kCitIQUxfTFBUSU1fQ291bnRlcl9TdG9wX0lUKCkgQVBJIGJ5IGFkZGluZyBFbmFibGUvRGlzYWJsZSByaXNpbmcgZWRnZQordHJpZ2dlciBvbiB0aGUmbmJzcDs8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiPkxQVElNIFdha2UtdXAgVGltZXIgRXh0aSBsaW5lLjwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyI+PC9zcGFuPjwvbGk+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7Ij5BZGQgX19IQUxfTFBUSU1fV0FLRVVQVElNRVJfRVhUSV9DTEVBUl9GTEFHKCkgaW4gdGhlIGVuZCBvZiB0aGUgSEFMX0xQVElNX0lSUUhhbmRsZXIoKSBBUEkgY29uZGl0aW9uZWQgYnkgRVhUSV9JTVJfTVIyMyBiaXQuPC9zcGFuPjwvbGk+PC91bD48L3VsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48Yj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyI+SEFMIEkyQyA8L3NwYW4+PC9iPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7Ij51cGRhdGU8L3NwYW4+PC9saT48dWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7IiBsYW5nPSJFTi1VUyI+VXBkYXRlIEhBTF9JMkNfRVZfSVJRSGFuZGxlcigpIEFQSSB0byBmaXggSTJDIHNlbmQgYnJlYWsgaXNzdWUmbmJzcDs8L3NwYW4+PC9wPjwvbGk+PHVsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPkFkZCBhZGRpdGlvbmFsIGNoZWNrIG9uIGhpMmMtJmd0O2hkbWF0eCwgaGRtYXR4LSZndDtYZmVyQ3BsdENhbGxiYWNrLCA8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiIGxhbmc9IkVOLVVTIj5oaTJjLSZndDtoZG1hcngsCitoZG1hcngtJmd0O1hmZXJDcGx0Q2FsbGJhY2sgaW4gSTJDX01hc3Rlcl9TQigpIEFQSSB0bworYXZvaWQmbmJzcDtlbmFibGluZyBETUEgcmVxdWVzdCZuYnNwO3doZW4gSVQgbW9kZSBpcyB1c2VkLjwvc3Bhbj48L2xpPjwvdWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7IiBsYW5nPSJFTi1VUyI+VXBkYXRlIEhBTF9JMkNfRVJfSVJRSGFuZGxlcigpIEFQSSB0byBmaXggYWNrbm93bGVkZ2UgZmFpbHVyZSBpc3N1ZSB3aXRoIEkyQyA8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiIGxhbmc9IkVOLVVTIj5tZW1vcnkgSVQgcHJvY2Vzc2VzPC9zcGFuPjwvbGk+PHVsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPiZuYnNwO0FkZCZuYnNwO3N0b3AgY29uZGl0aW9uIGdlbmVyYXRpb24gPC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7IiBsYW5nPSJFTi1VUyI+d2hlbjwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPiBOQUNLIG9jY3Vycy48L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiIGxhbmc9IkVOLVVTIj48L3NwYW4+PC9saT48L3VsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPiBVcGRhdGUgPC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7IiBsYW5nPSJFTi1VUyI+SEFMX0kyQ19Jbml0KCkgQVBJIHRvIGZvcmNlIHNvZnR3YXJlIHJlc2V0IGJlZm9yZSBzZXR0aW5nIG5ldyBJMkMgY29uZmlndXJhdGlvbjwvc3Bhbj48L2xpPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPlVwZGF0ZSBIQUwgSTJDIHByb2Nlc3NlcyB0byByZXBvcnQgRXJyb3JDb2RlIDwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPndoZW4gd3JvbmcgSTJDIHN0YXJ0IGNvbmRpdGlvbiBvY2N1cnM8L3NwYW4+PC9saT48dWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7IiBsYW5nPSJFTi1VUyI+Jm5ic3A7QWRkIG5ldyZuYnNwO0Vycm9yQ29kZSBkZWZpbmU6IEhBTF9JMkNfV1JPTkdfU1RBUlQ8L3NwYW4+PC9saT48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiIGxhbmc9IkVOLVVTIj4mbmJzcDtTZXQ8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiIGxhbmc9IkVOLVVTIj4gPC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7IiBsYW5nPSJFTi1VUyI+RXJyb3JDb2RlIHBhcmFtZXRlciBpbiZuYnNwO0kyQyBoYW5kbGUgdG8gPC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7IiBsYW5nPSJFTi1VUyI+SEFMX0kyQ19XUk9OR19TVEFSVDwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPjwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMXB0OyBmb250LWZhbWlseTogJnF1b3Q7Q2FsaWJyaSZxdW90OyxzYW5zLXNlcmlmOyBjb2xvcjogcmdiKDMxLCA3MywgMTI1KTsiIGxhbmc9IkVOLVVTIj48L3NwYW4+PC9saT48L3VsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPjwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPjwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPlVwZGF0ZSZuYnNwOzwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPjwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPkkyQ19ETUFYZmVyQ3BsdCgpLAorSTJDX0RNQUVycm9yKCkgYW5kIEkyQ19ETUFBYm9ydCgpIEFQSXMgdG8gZml4IGhhcmRmYXVsdCBpc3N1ZSB3aGVuCitoZG1hdHggYW5kIGhkbWFyeCZuYnNwO3BhcmFtZXRlcnMgaW4gaTJjIGhhbmRsZSBhcmVuJ3QgaW5pdGlhbGl6ZWQKKyhOVUxMIHBvaW50ZXIpLjwvc3Bhbj4gPC9saT48dWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7IiBsYW5nPSJFTi1VUyI+QWRkIGFkZGl0aW9uYWwgY2hlY2sgb24gaGkyYy0mZ3Q7aGRtdHggYW5kIGhpMmMtJmd0O2hkbWFyeCBiZWZvcmUgcmVzZXR0aW5nJm5ic3A7RE1BIFR4L1J4IGNvbXBsZXRlIGNhbGxiYWNrczwvc3Bhbj48L2xpPjwvdWw+PC91bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PGI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiPkhBTCBGTVBJMkMgPC9zcGFuPjwvYj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyI+dXBkYXRlPC9zcGFuPjwvbGk+PHVsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPkZpeCBIQUwgRk1QSTJDIHNsYXZlIGludGVycnVwdCBoYW5kbGluZyBpc3N1ZSB3aXRoIEkyQyBzZXF1ZW50aWFsIHRyYW5zZmVycy48L3NwYW4+PC9saT48dWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7IiBsYW5nPSJFTi1VUyI+VXBkYXRlCitGTVBJMkNfU2xhdmVfSVNSX0lUKCkgYW5kIEZNUEkyQ19TbGF2ZV9JU1JfRE1BKCkgQVBJcyB0byBjaGVjayBvbiBTVE9QCitjb25kaXRpb24gYW5kIGhhbmRsZSBpdCBiZWZvcmUgY2xlYXJpbmcgdGhlIEFERFIgZmxhZzwvc3Bhbj48L2xpPjwvdWw+PC91bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PGI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiPkhBTCBOQU5EIDwvc3Bhbj48L2I+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiPnVwZGF0ZTwvc3Bhbj48L2xpPjx1bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiIGxhbmc9IkVOLVVTIj5VcGRhdGUKK0hBTF9OQU5EX1dyaXRlX1BhZ2VfOGIoKSwgSEFMX05BTkRfV3JpdGVfUGFnZV8xNmIoKSBhbmQmbmJzcDsKK0hBTF9OQU5EX1dyaXRlX1NwYXJlQXJlYV8xNmIoKSB0byBtYW5hZ2UgY29ycmVjdGx5IHRoZSB0aW1lIG91dAorY29uZGl0aW9uLjwvc3Bhbj48L2xpPjwvdWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7Ij5IQUwgU0FJIDwvc3Bhbj48L2I+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiPnVwZGF0ZTwvc3Bhbj48L2xpPjx1bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiIGxhbmc9IkVOLVVTIj5PcHRpbWl6ZSBTQUlfRE1BVHhDcGx0KCkgYW5kIFNBSV9ETUFSeENwbHQoKSBBUElzIHRvIGNoZWNrIG9uICJNb2RlIiBwYXJhbWV0ZXIgaW5zdGVhZCBvZiZuYnNwO0NJUkMgYml0IGluIHRoZSBDUiByZWdpc3Rlci48L3NwYW4+PC9saT48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiIGxhbmc9IkVOLVVTIj5SZW1vdmUgdW51c2VkIFNBSV9GSUZPX1NJWkUgZGVmaW5lPC9zcGFuPjwvbGk+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7IiBsYW5nPSJFTi1VUyI+VXBkYXRlIEhBTF9TQUlfUmVjZWl2ZV9ETUEoKSBwcm9ncmFtbWluZyBzZXF1ZW5jZSB0byBiZSBpbmxpbmUgd2l0aCByZWZlcmVuY2UgbWFudWFsPGJyPjwvc3Bhbj48L2xpPjwvdWw+PC91bD48aDMgc3R5bGU9ImJhY2tncm91bmQ6IHJnYig1MSwgMTAyLCAyNTUpIG5vbmUgcmVwZWF0IHNjcm9sbCAwJSA1MCU7IC1tb3otYmFja2dyb3VuZC1jbGlwOiBpbml0aWFsOyAtbW96LWJhY2tncm91bmQtb3JpZ2luOiBpbml0aWFsOyAtbW96LWJhY2tncm91bmQtaW5saW5lLXBvbGljeTogaW5pdGlhbDsgbWFyZ2luLXJpZ2h0OiA1MDBwdDsgd2lkdGg6IDI3NHB4OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IEFyaWFsOyBjb2xvcjogd2hpdGU7Ij5WMS43LjYgLyAxMi1BcHJpbC0yMDE5PC9zcGFuPjwvaDM+CiAgICAgICAgICAgICA8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luOiA0LjVwdCAwY20gNC41cHQgMThwdDsiPjxiIHN0eWxlPSIiPjx1PjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hOyBjb2xvcjogYmxhY2s7Ij5NYWluCiBDaGFuZ2VzPC9zcGFuPjwvdT48L2I+PC9wPgogICAgICAgICAgICAgCmRpZmYgLS1naXQgYS9TcmMvTGVnYWN5L3N0bTMyZjR4eF9oYWxfY2FuLmMgYi9TcmMvTGVnYWN5L3N0bTMyZjR4eF9oYWxfY2FuLmMKaW5kZXggZTJjYzhmMi4uN2E0Y2Y1MyAxMDA2NDQKLS0tIGEvU3JjL0xlZ2FjeS9zdG0zMmY0eHhfaGFsX2Nhbi5jCisrKyBiL1NyYy9MZWdhY3kvc3RtMzJmNHh4X2hhbF9jYW4uYwpAQCAtODIsMTMgKzgyLDI5IEBACiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqIEBhdHRlbnRpb24KICAgKgotICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTcgU1RNaWNyb2VsZWN0cm9uaWNzLgotICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuPC9jZW50ZXI+PC9oMj4KKyAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ09QWVJJR0hUKGMpIDIwMTcgU1RNaWNyb2VsZWN0cm9uaWNzPC9jZW50ZXI+PC9oMj4KICAgKgotICAqIFRoaXMgc29mdHdhcmUgY29tcG9uZW50IGlzIGxpY2Vuc2VkIGJ5IFNUIHVuZGVyIEJTRCAzLUNsYXVzZSBsaWNlbnNlLAotICAqIHRoZSAiTGljZW5zZSI7IFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUKLSAgKiBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQ6Ci0gICogICAgICAgICAgICAgICAgICAgICAgICBvcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2UKKyAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorICAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAgKiAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgKiAgICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICogICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICogICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgICogICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgKiAgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgU1RNaWNyb2VsZWN0cm9uaWNzIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICAqICAgICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgICogICAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAgKgorICAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgICoKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICovCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmNHh4X2hhbC5jIGIvU3JjL3N0bTMyZjR4eF9oYWwuYwppbmRleCAyMjQ5N2ZiLi4xN2E1MmI0IDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmNHh4X2hhbC5jCisrKyBiL1NyYy9zdG0zMmY0eHhfaGFsLmMKQEAgLTUwLDExICs1MCwxMSBAQAogICAqIEB7CiAgICovCiAvKioKLSAgKiBAYnJpZWYgU1RNMzJGNHh4IEhBTCBEcml2ZXIgdmVyc2lvbiBudW1iZXIgVjEuNy42CisgICogQGJyaWVmIFNUTTMyRjR4eCBIQUwgRHJpdmVyIHZlcnNpb24gbnVtYmVyIFYxLjcuNwogICAqLwogI2RlZmluZSBfX1NUTTMyRjR4eF9IQUxfVkVSU0lPTl9NQUlOICAgKDB4MDFVKSAvKiE8IFszMToyNF0gbWFpbiB2ZXJzaW9uICovCiAjZGVmaW5lIF9fU1RNMzJGNHh4X0hBTF9WRVJTSU9OX1NVQjEgICAoMHgwN1UpIC8qITwgWzIzOjE2XSBzdWIxIHZlcnNpb24gKi8KLSNkZWZpbmUgX19TVE0zMkY0eHhfSEFMX1ZFUlNJT05fU1VCMiAgICgweDA2VSkgLyohPCBbMTU6OF0gIHN1YjIgdmVyc2lvbiAqLworI2RlZmluZSBfX1NUTTMyRjR4eF9IQUxfVkVSU0lPTl9TVUIyICAgKDB4MDdVKSAvKiE8IFsxNTo4XSAgc3ViMiB2ZXJzaW9uICovCiAjZGVmaW5lIF9fU1RNMzJGNHh4X0hBTF9WRVJTSU9OX1JDICAgICAoMHgwMFUpIC8qITwgWzc6MF0gIHJlbGVhc2UgY2FuZGlkYXRlICovIAogI2RlZmluZSBfX1NUTTMyRjR4eF9IQUxfVkVSU0lPTiAgICAgICAgICgoX19TVE0zMkY0eHhfSEFMX1ZFUlNJT05fTUFJTiA8PCAyNFUpXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwoX19TVE0zMkY0eHhfSEFMX1ZFUlNJT05fU1VCMSA8PCAxNlUpXApAQCAtMzQxLDE0ICszNDEsMjYgQEAKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9TZXRUaWNrRnJlcShIQUxfVGlja0ZyZXFUeXBlRGVmIEZyZXEpCiB7CiAgIEhBTF9TdGF0dXNUeXBlRGVmIHN0YXR1cyAgPSBIQUxfT0s7CisgIEhBTF9UaWNrRnJlcVR5cGVEZWYgcHJldlRpY2tGcmVxOworCiAgIGFzc2VydF9wYXJhbShJU19USUNLRlJFUShGcmVxKSk7CiAKICAgaWYgKHV3VGlja0ZyZXEgIT0gRnJlcSkKICAgeworICAgIC8qIEJhY2sgdXAgdXdUaWNrRnJlcSBmcmVxdWVuY3kgKi8KKyAgICBwcmV2VGlja0ZyZXEgPSB1d1RpY2tGcmVxOworCisgICAgLyogVXBkYXRlIHV3VGlja0ZyZXEgZ2xvYmFsIHZhcmlhYmxlIHVzZWQgYnkgSEFMX0luaXRUaWNrKCkgKi8KICAgICB1d1RpY2tGcmVxID0gRnJlcTsKIAogICAgIC8qIEFwcGx5IHRoZSBuZXcgdGljayBGcmVxICAqLwogICAgIHN0YXR1cyA9IEhBTF9Jbml0VGljayh1d1RpY2tQcmlvKTsKKworICAgIGlmIChzdGF0dXMgIT0gSEFMX09LKQorICAgIHsKKyAgICAgIC8qIFJlc3RvcmUgcHJldmlvdXMgdGljayBmcmVxdWVuY3kgKi8KKyAgICAgIHV3VGlja0ZyZXEgPSBwcmV2VGlja0ZyZXE7CisgICAgfQogICB9CiAKICAgcmV0dXJuIHN0YXR1czsKQEAgLTU1Nyw3ICs1NjksNyBAQAogLyoqCiAgICogQGJyaWVmICBFbmFibGVzIHRoZSBJbnRlcm5hbCBGTEFTSCBCYW5rIFN3YXBwaW5nLgogICAqICAgCi0gICogQG5vdGUgICBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIG9ubHkgZm9yIFNUTTMyRjQyeHh4LzQzeHh4IGRldmljZXMuIAorICAqIEBub3RlICAgVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCBvbmx5IGZvciBTVE0zMkY0Mnh4eC80M3h4eC80Njl4eC80Nzl4eCBkZXZpY2VzLiAKICAgKgogICAqIEBub3RlICAgRmxhc2ggQmFuazIgbWFwcGVkIGF0IDB4MDgwMDAwMDAgKGFuZCBhbGlhc2VkIEAweDAwMDAwMDAwKSAKICAgKiAgICAgICAgIGFuZCBGbGFzaCBCYW5rMSBtYXBwZWQgYXQgMHgwODEwMDAwMCAoYW5kIGFsaWFzZWQgYXQgMHgwMDEwMDAwMCkgICAKQEAgLTU3Miw3ICs1ODQsNyBAQAogLyoqCiAgICogQGJyaWVmICBEaXNhYmxlcyB0aGUgSW50ZXJuYWwgRkxBU0ggQmFuayBTd2FwcGluZy4KICAgKiAgIAotICAqIEBub3RlICAgVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCBvbmx5IGZvciBTVE0zMkY0Mnh4eC80M3h4eCBkZXZpY2VzLiAKKyAgKiBAbm90ZSAgIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgb25seSBmb3IgU1RNMzJGNDJ4eHgvNDN4eHgvNDY5eHgvNDc5eHggZGV2aWNlcy4gCiAgICoKICAgKiBAbm90ZSAgIFRoZSBkZWZhdWx0IHN0YXRlIDogRmxhc2ggQmFuazEgbWFwcGVkIGF0IDB4MDgwMDAwMDAgKGFuZCBhbGlhc2VkIEAweDAwMDAwMDAwKSAKICAgKiAgICAgICAgIGFuZCBGbGFzaCBCYW5rMiBtYXBwZWQgYXQgMHgwODEwMDAwMCAoYW5kIGFsaWFzZWQgYXQgMHgwMDEwMDAwMCkgCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmNHh4X2hhbF9hZGMuYyBiL1NyYy9zdG0zMmY0eHhfaGFsX2FkYy5jCmluZGV4IGViNmMyODIuLmUyMThmNzYgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmY0eHhfaGFsX2FkYy5jCisrKyBiL1NyYy9zdG0zMmY0eHhfaGFsX2FkYy5jCkBAIC00NjcsNyArNDY3LDYgQEAKICAgKiAgICAgICAgICBAYXJnIEByZWYgSEFMX0FEQ19MRVZFTF9PVVRfT0ZfV0lORE9XXzFfQ0JfSUQgICAgQURDIGFuYWxvZyB3YXRjaGRvZyAxIGNhbGxiYWNrIElECiAgICogICAgICAgICAgQGFyZyBAcmVmIEhBTF9BRENfRVJST1JfQ0JfSUQgICAgICAgICAgICAgICAgICAgIEFEQyBlcnJvciBjYWxsYmFjayBJRAogICAqICAgICAgICAgIEBhcmcgQHJlZiBIQUxfQURDX0lOSl9DT05WRVJTSU9OX0NPTVBMRVRFX0NCX0lEICBBREMgZ3JvdXAgaW5qZWN0ZWQgY29udmVyc2lvbiBjb21wbGV0ZSBjYWxsYmFjayBJRAotICAqICAgICAgICAgIEBhcmcgQHJlZiBIQUxfQURDX0lOSl9RVUVVRV9PVkVGTE9XX0NCX0lEICAgICAgICBBREMgZ3JvdXAgaW5qZWN0ZWQgY29udGV4dCBxdWV1ZSBvdmVyZmxvdyBjYWxsYmFjayBJRAogICAqICAgICAgICAgIEBhcmcgQHJlZiBIQUxfQURDX01TUElOSVRfQ0JfSUQgICAgICAgICAgICAgICAgICBBREMgTXNwIEluaXQgY2FsbGJhY2sgSUQKICAgKiAgICAgICAgICBAYXJnIEByZWYgSEFMX0FEQ19NU1BERUlOSVRfQ0JfSUQgICAgICAgICAgICAgICAgQURDIE1zcCBEZUluaXQgY2FsbGJhY2sgSUQKICAgKiBAcGFyYW0gIHBDYWxsYmFjayBwb2ludGVyIHRvIHRoZSBDYWxsYmFjayBmdW5jdGlvbgpAQCAtNTcxLDcgKzU3MCw2IEBACiAgICogICAgICAgICAgQGFyZyBAcmVmIEhBTF9BRENfTEVWRUxfT1VUX09GX1dJTkRPV18xX0NCX0lEICAgIEFEQyBhbmFsb2cgd2F0Y2hkb2cgMSBjYWxsYmFjayBJRAogICAqICAgICAgICAgIEBhcmcgQHJlZiBIQUxfQURDX0VSUk9SX0NCX0lEICAgICAgICAgICAgICAgICAgICBBREMgZXJyb3IgY2FsbGJhY2sgSUQKICAgKiAgICAgICAgICBAYXJnIEByZWYgSEFMX0FEQ19JTkpfQ09OVkVSU0lPTl9DT01QTEVURV9DQl9JRCAgQURDIGdyb3VwIGluamVjdGVkIGNvbnZlcnNpb24gY29tcGxldGUgY2FsbGJhY2sgSUQKLSAgKiAgICAgICAgICBAYXJnIEByZWYgSEFMX0FEQ19JTkpfUVVFVUVfT1ZFRkxPV19DQl9JRCAgICAgICAgQURDIGdyb3VwIGluamVjdGVkIGNvbnRleHQgcXVldWUgb3ZlcmZsb3cgY2FsbGJhY2sgSUQKICAgKiAgICAgICAgICBAYXJnIEByZWYgSEFMX0FEQ19NU1BJTklUX0NCX0lEICAgICAgICAgICAgICAgICAgQURDIE1zcCBJbml0IGNhbGxiYWNrIElECiAgICogICAgICAgICAgQGFyZyBAcmVmIEhBTF9BRENfTVNQREVJTklUX0NCX0lEICAgICAgICAgICAgICAgIEFEQyBNc3AgRGVJbml0IGNhbGxiYWNrIElECiAgICogQHJldHZhbCBIQUwgc3RhdHVzCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmNHh4X2hhbF9hZGNfZXguYyBiL1NyYy9zdG0zMmY0eHhfaGFsX2FkY19leC5jCmluZGV4IDVkMzBlMDkuLjVkMGNmN2YgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmY0eHhfaGFsX2FkY19leC5jCisrKyBiL1NyYy9zdG0zMmY0eHhfaGFsX2FkY19leC5jCkBAIC0yLDEwICsyLDEwIEBACiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqIEBmaWxlICAgIHN0bTMyZjR4eF9oYWxfYWRjX2V4LmMKICAgKiBAYXV0aG9yICBNQ0QgQXBwbGljYXRpb24gVGVhbQotICAqIEBicmllZiAgIFRoaXMgZmlsZSBwcm92aWRlcyBmaXJtd2FyZSBmdW5jdGlvbnMgdG8gbWFuYWdlIHRoZSBmb2xsb3dpbmcgCisgICogQGJyaWVmICAgVGhpcyBmaWxlIHByb3ZpZGVzIGZpcm13YXJlIGZ1bmN0aW9ucyB0byBtYW5hZ2UgdGhlIGZvbGxvd2luZwogICAqICAgICAgICAgIGZ1bmN0aW9uYWxpdGllcyBvZiB0aGUgQURDIGV4dGVuc2lvbiBwZXJpcGhlcmFsOgogICAqICAgICAgICAgICArIEV4dGVuZGVkIGZlYXR1cmVzIGZ1bmN0aW9ucwotICAqICAgICAgICAgCisgICoKICAgQHZlcmJhdGltCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAgICAgICAgICAgICAgICAjIyMjIyBIb3cgdG8gdXNlIHRoaXMgZHJpdmVyICMjIyMjCkBAIC0xNSw4ICsxNSw4IEBACiAgICAgICAgKCMjKSBFbmFibGUgdGhlIEFEQyBpbnRlcmZhY2UgY2xvY2sgdXNpbmcgX19IQUxfUkNDX0FEQ19DTEtfRU5BQkxFKCkKICAgICAgICAoIyMpIEFEQyBwaW5zIGNvbmZpZ3VyYXRpb24KICAgICAgICAgICAgICAoKysrKSBFbmFibGUgdGhlIGNsb2NrIGZvciB0aGUgQURDIEdQSU9zIHVzaW5nIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb246Ci0gICAgICAgICAgICAgICAgICAgX19IQUxfUkNDX0dQSU94X0NMS19FTkFCTEUoKSAgCi0gICAgICAgICAgICAgKCsrKykgQ29uZmlndXJlIHRoZXNlIEFEQyBwaW5zIGluIGFuYWxvZyBtb2RlIHVzaW5nIEhBTF9HUElPX0luaXQoKSAKKyAgICAgICAgICAgICAgICAgICBfX0hBTF9SQ0NfR1BJT3hfQ0xLX0VOQUJMRSgpCisgICAgICAgICAgICAgKCsrKykgQ29uZmlndXJlIHRoZXNlIEFEQyBwaW5zIGluIGFuYWxvZyBtb2RlIHVzaW5nIEhBTF9HUElPX0luaXQoKQogICAgICAgICgjIykgSW4gY2FzZSBvZiB1c2luZyBpbnRlcnJ1cHRzIChlLmcuIEhBTF9BRENfU3RhcnRfSVQoKSkKICAgICAgICAgICAgICAoKysrKSBDb25maWd1cmUgdGhlIEFEQyBpbnRlcnJ1cHQgcHJpb3JpdHkgdXNpbmcgSEFMX05WSUNfU2V0UHJpb3JpdHkoKQogICAgICAgICAgICAgICgrKyspIEVuYWJsZSB0aGUgQURDIElSUSBoYW5kbGVyIHVzaW5nIEhBTF9OVklDX0VuYWJsZUlSUSgpCkBAIC0zMCw1NiArMzAsNDQgQEAKICAgICAgICAgICAgICAoKysrKSBDb25maWd1cmUgdGhlIHByaW9yaXR5IGFuZCBlbmFibGUgdGhlIE5WSUMgZm9yIHRoZSB0cmFuc2ZlciBjb21wbGV0ZQogICAgICAgICAgICAgICAgICBpbnRlcnJ1cHQgb24gdGhlIHR3byBETUEgU3RyZWFtcy4gVGhlIG91dHB1dCBzdHJlYW0gc2hvdWxkIGhhdmUgaGlnaGVyCiAgICAgICAgICAgICAgICAgIHByaW9yaXR5IHRoYW4gdGhlIGlucHV0IHN0cmVhbS4KLSAgICAgKCMpIENvbmZpZ3VyZSB0aGUgQURDIFByZXNjYWxlciwgY29udmVyc2lvbiByZXNvbHV0aW9uIGFuZCBkYXRhIGFsaWdubWVudCAKLSAgICAgICAgIHVzaW5nIHRoZSBIQUxfQURDX0luaXQoKSBmdW5jdGlvbi4gCi0gIAorICAgICAoIykgQ29uZmlndXJlIHRoZSBBREMgUHJlc2NhbGVyLCBjb252ZXJzaW9uIHJlc29sdXRpb24gYW5kIGRhdGEgYWxpZ25tZW50CisgICAgICAgICB1c2luZyB0aGUgSEFMX0FEQ19Jbml0KCkgZnVuY3Rpb24uCisKICAgICAgKCMpIENvbmZpZ3VyZSB0aGUgQURDIEluamVjdGVkIGNoYW5uZWxzIGdyb3VwIGZlYXR1cmVzLCB1c2UgSEFMX0FEQ19Jbml0KCkKICAgICAgICAgIGFuZCBIQUxfQURDX0NvbmZpZ0NoYW5uZWwoKSBmdW5jdGlvbnMuCi0gICAgICAgICAKLSAgICAgKCMpIFRocmVlIG9wZXJhdGlvbiBtb2RlcyBhcmUgYXZhaWxhYmxlIHdpdGhpbiB0aGlzIGRyaXZlciA6ICAgICAKLSAgCisKKyAgICAgKCMpIFRocmVlIG9wZXJhdGlvbiBtb2RlcyBhcmUgYXZhaWxhYmxlIHdpdGhpbiB0aGlzIGRyaXZlcjoKKwogICAgICAqKiogUG9sbGluZyBtb2RlIElPIG9wZXJhdGlvbiAqKioKICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgIFsuLl0gICAgCi0gICAgICAgKCspIFN0YXJ0IHRoZSBBREMgcGVyaXBoZXJhbCB1c2luZyBIQUxfQURDRXhfSW5qZWN0ZWRTdGFydCgpIAorICAgICBbLi5dCisgICAgICAgKCspIFN0YXJ0IHRoZSBBREMgcGVyaXBoZXJhbCB1c2luZyBIQUxfQURDRXhfSW5qZWN0ZWRTdGFydCgpCiAgICAgICAgKCspIFdhaXQgZm9yIGVuZCBvZiBjb252ZXJzaW9uIHVzaW5nIEhBTF9BRENfUG9sbEZvckNvbnZlcnNpb24oKSwgYXQgdGhpcyBzdGFnZQotICAgICAgICAgICB1c2VyIGNhbiBzcGVjaWZ5IHRoZSB2YWx1ZSBvZiB0aW1lb3V0IGFjY29yZGluZyB0byBoaXMgZW5kIGFwcGxpY2F0aW9uICAgICAgCisgICAgICAgICAgIHVzZXIgY2FuIHNwZWNpZnkgdGhlIHZhbHVlIG9mIHRpbWVvdXQgYWNjb3JkaW5nIHRvIGhpcyBlbmQgYXBwbGljYXRpb24KICAgICAgICAoKykgVG8gcmVhZCB0aGUgQURDIGNvbnZlcnRlZCB2YWx1ZXMsIHVzZSB0aGUgSEFMX0FEQ0V4X0luamVjdGVkR2V0VmFsdWUoKSBmdW5jdGlvbi4KICAgICAgICAoKykgU3RvcCB0aGUgQURDIHBlcmlwaGVyYWwgdXNpbmcgSEFMX0FEQ0V4X0luamVjdGVkU3RvcCgpCi0gIAotICAgICAqKiogSW50ZXJydXB0IG1vZGUgSU8gb3BlcmF0aW9uICoqKiAgICAKKworICAgICAqKiogSW50ZXJydXB0IG1vZGUgSU8gb3BlcmF0aW9uICoqKgogICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICBbLi5dICAgIAotICAgICAgICgrKSBTdGFydCB0aGUgQURDIHBlcmlwaGVyYWwgdXNpbmcgSEFMX0FEQ0V4X0luamVjdGVkU3RhcnRfSVQoKSAKKyAgICAgWy4uXQorICAgICAgICgrKSBTdGFydCB0aGUgQURDIHBlcmlwaGVyYWwgdXNpbmcgSEFMX0FEQ0V4X0luamVjdGVkU3RhcnRfSVQoKQogICAgICAgICgrKSBVc2UgSEFMX0FEQ19JUlFIYW5kbGVyKCkgY2FsbGVkIHVuZGVyIEFEQ19JUlFIYW5kbGVyKCkgSW50ZXJydXB0IHN1YnJvdXRpbmUKLSAgICAgICAoKykgQXQgQURDIGVuZCBvZiBjb252ZXJzaW9uIEhBTF9BRENFeF9JbmplY3RlZENvbnZDcGx0Q2FsbGJhY2soKSBmdW5jdGlvbiBpcyBleGVjdXRlZCBhbmQgdXNlciBjYW4gCisgICAgICAgKCspIEF0IEFEQyBlbmQgb2YgY29udmVyc2lvbiBIQUxfQURDRXhfSW5qZWN0ZWRDb252Q3BsdENhbGxiYWNrKCkgZnVuY3Rpb24gaXMgZXhlY3V0ZWQgYW5kIHVzZXIgY2FuCiAgICAgICAgICAgICBhZGQgaGlzIG93biBjb2RlIGJ5IGN1c3RvbWl6YXRpb24gb2YgZnVuY3Rpb24gcG9pbnRlciBIQUxfQURDRXhfSW5qZWN0ZWRDb252Q3BsdENhbGxiYWNrIAogICAgICAgICgrKSBJbiBjYXNlIG9mIEFEQyBFcnJvciwgSEFMX0FEQ0V4X0luamVjdGVkRXJyb3JDYWxsYmFjaygpIGZ1bmN0aW9uIGlzIGV4ZWN1dGVkIGFuZCB1c2VyIGNhbiAKICAgICAgICAgICAgIGFkZCBoaXMgb3duIGNvZGUgYnkgY3VzdG9taXphdGlvbiBvZiBmdW5jdGlvbiBwb2ludGVyIEhBTF9BRENFeF9JbmplY3RlZEVycm9yQ2FsbGJhY2sKICAgICAgICAoKykgU3RvcCB0aGUgQURDIHBlcmlwaGVyYWwgdXNpbmcgSEFMX0FEQ0V4X0luamVjdGVkU3RvcF9JVCgpCi0gICAgICAgCi0gICAgICAgICAgICAKLSAgICAgKioqIERNQSBtb2RlIElPIG9wZXJhdGlvbiAqKiogICAgCi0gICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICBbLi5dICAgIAotICAgICAgICgrKSBTdGFydCB0aGUgQURDIHBlcmlwaGVyYWwgdXNpbmcgSEFMX0FEQ0V4X0luamVjdGVkU3RhcnRfRE1BKCksIGF0IHRoaXMgc3RhZ2UgdGhlIHVzZXIgc3BlY2lmeSB0aGUgbGVuZ3RoIAotICAgICAgICAgICBvZiBkYXRhIHRvIGJlIHRyYW5zZmVycmVkIGF0IGVhY2ggZW5kIG9mIGNvbnZlcnNpb24gCi0gICAgICAgKCspIEF0IFRoZSBlbmQgb2YgZGF0YSB0cmFuc2ZlciBiYSBIQUxfQURDRXhfSW5qZWN0ZWRDb252Q3BsdENhbGxiYWNrKCkgZnVuY3Rpb24gaXMgZXhlY3V0ZWQgYW5kIHVzZXIgY2FuIAotICAgICAgICAgICAgYWRkIGhpcyBvd24gY29kZSBieSBjdXN0b21pemF0aW9uIG9mIGZ1bmN0aW9uIHBvaW50ZXIgSEFMX0FEQ0V4X0luamVjdGVkQ29udkNwbHRDYWxsYmFjayAKLSAgICAgICAoKykgSW4gY2FzZSBvZiB0cmFuc2ZlciBFcnJvciwgSEFMX0FEQ0V4X0luamVjdGVkRXJyb3JDYWxsYmFjaygpIGZ1bmN0aW9uIGlzIGV4ZWN1dGVkIGFuZCB1c2VyIGNhbiAKLSAgICAgICAgICAgIGFkZCBoaXMgb3duIGNvZGUgYnkgY3VzdG9taXphdGlvbiBvZiBmdW5jdGlvbiBwb2ludGVyIEhBTF9BRENFeF9JbmplY3RlZEVycm9yQ2FsbGJhY2sKLSAgICAgICAgKCspIFN0b3AgdGhlIEFEQyBwZXJpcGhlcmFsIHVzaW5nIEhBTF9BRENFeF9JbmplY3RlZFN0b3BfRE1BKCkKLSAgICAgICAgCisKICAgICAgKioqIE11bHRpIG1vZGUgQURDcyBSZWd1bGFyIGNoYW5uZWxzIGNvbmZpZ3VyYXRpb24gKioqCiAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICBbLi5dICAgICAgICAKLSAgICAgICAoKykgU2VsZWN0IHRoZSBNdWx0aSBtb2RlIEFEQyByZWd1bGFyIGNoYW5uZWxzIGZlYXR1cmVzIChkdWFsIG9yIHRyaXBsZSBtb2RlKSAgCi0gICAgICAgICAgYW5kIGNvbmZpZ3VyZSB0aGUgRE1BIG1vZGUgdXNpbmcgSEFMX0FEQ0V4X011bHRpTW9kZUNvbmZpZ0NoYW5uZWwoKSBmdW5jdGlvbnMuIAotICAgICAgICgrKSBTdGFydCB0aGUgQURDIHBlcmlwaGVyYWwgdXNpbmcgSEFMX0FEQ0V4X011bHRpTW9kZVN0YXJ0X0RNQSgpLCBhdCB0aGlzIHN0YWdlIHRoZSB1c2VyIHNwZWNpZnkgdGhlIGxlbmd0aCAKLSAgICAgICAgICAgb2YgZGF0YSB0byBiZSB0cmFuc2ZlcnJlZCBhdCBlYWNoIGVuZCBvZiBjb252ZXJzaW9uICAgICAgICAgICAKKyAgICAgWy4uXQorICAgICAgICgrKSBTZWxlY3QgdGhlIE11bHRpIG1vZGUgQURDIHJlZ3VsYXIgY2hhbm5lbHMgZmVhdHVyZXMgKGR1YWwgb3IgdHJpcGxlIG1vZGUpCisgICAgICAgICAgYW5kIGNvbmZpZ3VyZSB0aGUgRE1BIG1vZGUgdXNpbmcgSEFMX0FEQ0V4X011bHRpTW9kZUNvbmZpZ0NoYW5uZWwoKSBmdW5jdGlvbnMuCisgICAgICAgKCspIFN0YXJ0IHRoZSBBREMgcGVyaXBoZXJhbCB1c2luZyBIQUxfQURDRXhfTXVsdGlNb2RlU3RhcnRfRE1BKCksIGF0IHRoaXMgc3RhZ2UgdGhlIHVzZXIgc3BlY2lmeSB0aGUgbGVuZ3RoCisgICAgICAgICAgIG9mIGRhdGEgdG8gYmUgdHJhbnNmZXJyZWQgYXQgZWFjaCBlbmQgb2YgY29udmVyc2lvbgogICAgICAgICgrKSBSZWFkIHRoZSBBRENzIGNvbnZlcnRlZCB2YWx1ZXMgdXNpbmcgdGhlIEhBTF9BRENFeF9NdWx0aU1vZGVHZXRWYWx1ZSgpIGZ1bmN0aW9uLgotICAKLSAgCisKKwogICAgIEBlbmR2ZXJiYXRpbQogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKiBAYXR0ZW50aW9uCkBAIC05Myw3ICs4MSw3IEBACiAgICogICAgICAgICAgICAgICAgICAgICAgICBvcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2UKICAgKgogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgKi8gCisgICovCiAKIC8qIEluY2x1ZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAjaW5jbHVkZSAic3RtMzJmNHh4X2hhbC5oIgpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjR4eF9oYWxfY2FuLmMgYi9TcmMvc3RtMzJmNHh4X2hhbF9jYW4uYwppbmRleCBhMmNjZmQ1Li4wMDlhNDQ3IDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmNHh4X2hhbF9jYW4uYworKysgYi9TcmMvc3RtMzJmNHh4X2hhbF9jYW4uYwpAQCAtMTU1Niw3ICsxNTU2LDcgQEAKICAgICB7CiAgICAgICBwSGVhZGVyLT5FeHRJZCA9ICgoQ0FOX1JJMFJfRVhJRCB8IENBTl9SSTBSX1NUSUQpICYgaGNhbi0+SW5zdGFuY2UtPnNGSUZPTWFpbEJveFtSeEZpZm9dLlJJUikgPj4gQ0FOX1JJMFJfRVhJRF9Qb3M7CiAgICAgfQotICAgIHBIZWFkZXItPlJUUiA9IChDQU5fUkkwUl9SVFIgJiBoY2FuLT5JbnN0YW5jZS0+c0ZJRk9NYWlsQm94W1J4Rmlmb10uUklSKSA+PiBDQU5fUkkwUl9SVFJfUG9zOworICAgIHBIZWFkZXItPlJUUiA9IChDQU5fUkkwUl9SVFIgJiBoY2FuLT5JbnN0YW5jZS0+c0ZJRk9NYWlsQm94W1J4Rmlmb10uUklSKTsKICAgICBwSGVhZGVyLT5ETEMgPSAoQ0FOX1JEVDBSX0RMQyAmIGhjYW4tPkluc3RhbmNlLT5zRklGT01haWxCb3hbUnhGaWZvXS5SRFRSKSA+PiBDQU5fUkRUMFJfRExDX1BvczsKICAgICBwSGVhZGVyLT5GaWx0ZXJNYXRjaEluZGV4ID0gKENBTl9SRFQwUl9GTUkgJiBoY2FuLT5JbnN0YW5jZS0+c0ZJRk9NYWlsQm94W1J4Rmlmb10uUkRUUikgPj4gQ0FOX1JEVDBSX0ZNSV9Qb3M7CiAgICAgcEhlYWRlci0+VGltZXN0YW1wID0gKENBTl9SRFQwUl9USU1FICYgaGNhbi0+SW5zdGFuY2UtPnNGSUZPTWFpbEJveFtSeEZpZm9dLlJEVFIpID4+IENBTl9SRFQwUl9USU1FX1BvczsKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmY0eHhfaGFsX2NyYy5jIGIvU3JjL3N0bTMyZjR4eF9oYWxfY3JjLmMKaW5kZXggMmM0OTllNS4uMThmYzRiZCAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZjR4eF9oYWxfY3JjLmMKKysrIGIvU3JjL3N0bTMyZjR4eF9oYWxfY3JjLmMKQEAgLTExMSw4ICsxMTEsNiBAQAogICAgIEhBTF9DUkNfTXNwSW5pdChoY3JjKTsKICAgfQogCi0gIGhjcmMtPlN0YXRlID0gSEFMX0NSQ19TVEFURV9CVVNZOwotCiAgIC8qIENoYW5nZSBDUkMgcGVyaXBoZXJhbCBzdGF0ZSAqLwogICBoY3JjLT5TdGF0ZSA9IEhBTF9DUkNfU1RBVEVfUkVBRFk7CiAKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmY0eHhfaGFsX2NyeXAuYyBiL1NyYy9zdG0zMmY0eHhfaGFsX2NyeXAuYwppbmRleCBjYmNhYTFjLi45MDdkYjRhIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmNHh4X2hhbF9jcnlwLmMKKysrIGIvU3JjL3N0bTMyZjR4eF9oYWxfY3J5cC5jCkBAIC01NzU2LDkgKzU3NTYsOCBAQAogICAgICAgLyogRGlzYWJsZSBDUllQIHRvIHN0YXJ0IHRoZSBmaW5hbCBwaGFzZSAqLwogICAgICAgX19IQUxfQ1JZUF9ESVNBQkxFKGhjcnlwKTsKICAgICAgIAotICAgICAgLypMb2FkIENSWVBfSVYxUiByZWdpc3RlciBjb250ZW50IGluIGEgdGVtcG9yYXJ5IHZhcmlhYmxlLiBEZWNyZW1lbnQgdGhlIHZhbHVlCi0gICAgICBieSAxIGFuZCByZWluc2VydCB0aGUgcmVzdWx0IGluIENSWVBfSVYxUiByZWdpc3RlciovCi0gICAgICBoY3J5cC0+SW5zdGFuY2UtPklWMVJSID0gMHg1VTsKKyAgICAgIC8qVXBkYXRlIENSWVBfSVYxUiByZWdpc3RlciBhbmQgQUxHT01PREUqLworICAgICAgaGNyeXAtPkluc3RhbmNlLT5JVjFSUiA9ICgoaGNyeXAtPkluc3RhbmNlLT5DU0dDTUNDTTdSKS0xKTsKICAgICAgIE1PRElGWV9SRUcoaGNyeXAtPkluc3RhbmNlLT5DUiwgQ1JZUF9DUl9BTEdPTU9ERSwgQ1JZUF9BRVNfQ1RSKTsgCiAgICAgICAKICAgICAgIC8qIEVuYWJsZSBDUllQIHRvIHN0YXJ0IHRoZSBmaW5hbCBwaGFzZSAqLwpAQCAtNTc5OSw3ICs1Nzk4LDcgQEAKICAgICB9ICAgIAogICAgIGlmKChoY3J5cC0+SW5zdGFuY2UtPlNSICYgQ1JZUF9GTEFHX09GTkUgKSAhPSAweDBVKQogICAgIHsKLSAgICAgIGZvcihpbmRleD0wVTsgaW5kZXg8IDRVO2luZGV4KyspICAgICAgICAKKyAgICAgIGZvcihpbmRleD0wVTsgaW5kZXg8IDRVO2luZGV4KyspCiAgICAgICB7IAogICAgICAgICAvKiBSZWFkIHRoZSBvdXRwdXQgYmxvY2sgZnJvbSB0aGUgb3V0cHV0IEZJRk8gKi8KICAgICAgICAgaW50ZXJtZWRpYXRlX2RhdGFbaW5kZXhdID0gaGNyeXAtPkluc3RhbmNlLT5ET1VUOyAKQEAgLTU4MTYsMjUgKzU4MTUsODUgQEAKICAgICAgIGEgR0NNIGVuY3J5cHRpb24gd2l0aCB0aGUgbGFzdCBibG9jayBvZiBwYXlsb2FkIHNpemUgaW5mZXJpb3IgdG8gMTI4IGJpdHMqLwogICAgICAgLyogQ2hhbmdlIHRoZSBBRVMgbW9kZSB0byBHQ00gbW9kZSBhbmQgU2VsZWN0IEZpbmFsIHBoYXNlICovCiAgICAgICAvKiBjb25maWd1cmVkICBDSE1PRCBHQ00gICAqLwotICAgICAgTU9ESUZZX1JFRyhoY3J5cC0+SW5zdGFuY2UtPkNSLCBDUllQX0NSX0FMR09NT0RFLCBDUllQX0FFU19HQ00pOyAKKyAgICAgIE1PRElGWV9SRUcoaGNyeXAtPkluc3RhbmNlLT5DUiwgQ1JZUF9DUl9BTEdPTU9ERSwgQ1JZUF9BRVNfR0NNKTsKICAgICAgIAogICAgICAgLyogY29uZmlndXJlZCAgZmluYWwgcGhhc2UgICovCi0gICAgICBNT0RJRllfUkVHKGhjcnlwLT5JbnN0YW5jZS0+Q1IsIENSWVBfQ1JfR0NNX0NDTVBILCBDUllQX1BIQVNFX0ZJTkFMKTsgCisgICAgICBNT0RJRllfUkVHKGhjcnlwLT5JbnN0YW5jZS0+Q1IsIENSWVBfQ1JfR0NNX0NDTVBILCBDUllQX1BIQVNFX0ZJTkFMKTsKICAgICAgIAorICAgICAgaWYgKCAoaGNyeXAtPkluc3RhbmNlLT5DUiAmIENSWVBfQ1JfREFUQVRZUEUpID09IENSWVBfREFUQVRZUEVfMzJCKQorICAgICAgeworICAgICAgICBpZiAoKG5wYmxiICU0VSk9PTFVKQorICAgICAgICB7CisgICAgICAgICAgaW50ZXJtZWRpYXRlX2RhdGFbbGFzdHdvcmRzaXplLTFVXSAmPSAweEZGRkZGRjAwVTsKKyAgICAgICAgfQorICAgICAgICBpZiAoKG5wYmxiICU0VSk9PTJVKQorICAgICAgICB7CisgICAgICAgICAgaW50ZXJtZWRpYXRlX2RhdGFbbGFzdHdvcmRzaXplLTFVXSAmPSAweEZGRkYwMDAwVTsKKyAgICAgICAgfQorICAgICAgICBpZiAoKG5wYmxiICU0VSk9PTNVKQorICAgICAgICB7CisgICAgICAgICAgaW50ZXJtZWRpYXRlX2RhdGFbbGFzdHdvcmRzaXplLTFVXSAmPSAweEZGMDAwMDAwVTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgZWxzZSBpZiAoKGhjcnlwLT5JbnN0YW5jZS0+Q1IgJiBDUllQX0NSX0RBVEFUWVBFKSA9PSBDUllQX0RBVEFUWVBFXzhCKQorICAgICAgeworICAgICAgICBpZiAoKG5wYmxiICU0VSk9PTFVKQorICAgICAgICB7CisgICAgICAgICAgaW50ZXJtZWRpYXRlX2RhdGFbbGFzdHdvcmRzaXplLTFVXSAmPSBfX1JFVigweEZGRkZGRjAwVSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKChucGJsYiAlNFUpPT0yVSkKKyAgICAgICAgeworICAgICAgICAgIGludGVybWVkaWF0ZV9kYXRhW2xhc3R3b3Jkc2l6ZS0xVV0gJj0gX19SRVYoMHhGRkZGMDAwMFUpOworICAgICAgICB9CisgICAgICAgIGlmICgobnBibGIgJTRVKT09M1UpCisgICAgICAgIHsKKyAgICAgICAgICBpbnRlcm1lZGlhdGVfZGF0YVtsYXN0d29yZHNpemUtMVVdICY9IF9fUkVWKDB4RkYwMDAwMDBVKTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgZWxzZSBpZiAoKGhjcnlwLT5JbnN0YW5jZS0+Q1IgJiBDUllQX0NSX0RBVEFUWVBFKSA9PSBDUllQX0RBVEFUWVBFXzE2QikKKyAgICAgIHsKKyAgICAgICAgaWYgKChucGJsYiAlNFUpPT0xVSkKKyAgICAgICAgeworICAgICAgICAgIGludGVybWVkaWF0ZV9kYXRhW2xhc3R3b3Jkc2l6ZS0xVV0gJj0gX19ST1IoKDB4RkZGRkZGMDBVKSwgMTYpOworICAgICAgICB9CisgICAgICAgIGlmICgobnBibGIgJTRVKT09MlUpCisgICAgICAgIHsKKyAgICAgICAgICBpbnRlcm1lZGlhdGVfZGF0YVtsYXN0d29yZHNpemUtMVVdICY9IF9fUk9SKCgweEZGRkYwMDAwVSksIDE2KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoKG5wYmxiICU0VSk9PTNVKQorICAgICAgICB7CisgICAgICAgICAgaW50ZXJtZWRpYXRlX2RhdGFbbGFzdHdvcmRzaXplLTFVXSAmPSBfX1JPUigoMHhGRjAwMDAwMFUpLCAxNik7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGVsc2UgLypDUllQX0RBVEFUWVBFXzFCKi8KKyAgICAgIHsKKyAgICAgICAgaWYgKChucGJsYiAlNFUpPT0xVSkKKyAgICAgICAgeworICAgICAgICAgIGludGVybWVkaWF0ZV9kYXRhW2xhc3R3b3Jkc2l6ZS0xVV0gJj0gX19SQklUKDB4RkZGRkZGMDBVKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoKG5wYmxiICU0VSk9PTJVKQorICAgICAgICB7CisgICAgICAgICAgaW50ZXJtZWRpYXRlX2RhdGFbbGFzdHdvcmRzaXplLTFVXSAmPSBfX1JCSVQoMHhGRkZGMDAwMFUpOworICAgICAgICB9CisgICAgICAgIGlmICgobnBibGIgJTRVKT09M1UpCisgICAgICAgIHsKKyAgICAgICAgICBpbnRlcm1lZGlhdGVfZGF0YVtsYXN0d29yZHNpemUtMVVdICY9IF9fUkJJVCgweEZGMDAwMDAwVSk7CisgICAgICAgIH0KKyAgICAgIH0KICAgICAgIGZvciAoaW5kZXg9MFU7IGluZGV4IDwgbGFzdHdvcmRzaXplOyBpbmRleCArKykKICAgICAgIHsKICAgICAgICAgLypXcml0ZSB0aGUgaW50ZXJtZWRpYXRlX2RhdGEgaW4gdGhlIElOIEZJRk8gKi8KICAgICAgICAgaGNyeXAtPkluc3RhbmNlLT5ESU49aW50ZXJtZWRpYXRlX2RhdGFbaW5kZXhdOwotICAgICAgfSAgICAKLSAgICAgIHdoaWxlKGluZGV4IDwgNFUpICAgICAgICAgIAorICAgICAgfQorICAgICAgd2hpbGUoaW5kZXggPCA0VSkKICAgICAgIHsKICAgICAgICAgLyogUGFkIHRoZSBkYXRhIHdpdGggemVyb3MgdG8gaGF2ZSBhIGNvbXBsZXRlIGJsb2NrICovCiAgICAgICAgIGhjcnlwLT5JbnN0YW5jZS0+RElOICA9IDB4MFU7Ci0gICAgICAgIGluZGV4Kys7IAotICAgICAgfSAgICAgIAorICAgICAgICBpbmRleCsrOworICAgICAgfQogICAgICAgLyogV2FpdCBmb3IgT0ZORSBmbGFnIHRvIGJlIHJhaXNlZCAqLwotICAgICAgaWYoQ1JZUF9XYWl0T25PRk5FRmxhZyhoY3J5cCwgVGltZW91dCkgIT0gSEFMX09LKSAgCi0gICAgICB7IAorICAgICAgaWYoQ1JZUF9XYWl0T25PRk5FRmxhZyhoY3J5cCwgVGltZW91dCkgIT0gSEFMX09LKQorICAgICAgewogICAgICAgICAvKiBEaXNhYmxlIHRoZSBDUllQIHBlcmlwaGVyYWwgY2xvY2sgKi8KICAgICAgICAgX19IQUxfQ1JZUF9ESVNBQkxFKGhjcnlwKTsKICAgICAgICAgCkBAIC01ODQyLDIzICs1OTAxLDIzIEBACiAgICAgICAgIGhjcnlwLT5FcnJvckNvZGUgfD0gSEFMX0NSWVBfRVJST1JfVElNRU9VVDsKICAgICAgICAgaGNyeXAtPlN0YXRlID0gSEFMX0NSWVBfU1RBVEVfUkVBRFk7CiAgICAgICAgIAotICAgICAgICAvKiBQcm9jZXNzIHVubG9ja2VkICovICAgICAgICAgIAorICAgICAgICAvKiBQcm9jZXNzIHVubG9ja2VkICovCiAgICAgICAgIF9fSEFMX1VOTE9DSyhoY3J5cCk7IAotI2lmIChVU0VfSEFMX0NSWVBfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpIAorI2lmIChVU0VfSEFMX0NSWVBfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCiAgICAgICAvKkNhbGwgcmVnaXN0ZXJlZCBlcnJvciBjYWxsYmFjayovCiAgICAgICBoY3J5cC0+RXJyb3JDYWxsYmFjayhoY3J5cCk7CiAjZWxzZQogICAgICAgLypDYWxsIGxlZ2FjeSB3ZWFrIGVycm9yIGNhbGxiYWNrKi8KICAgICAgIEhBTF9DUllQX0Vycm9yQ2FsbGJhY2soaGNyeXApOwotI2VuZGlmIC8qIFVTRV9IQUxfQ1JZUF9SRUdJU1RFUl9DQUxMQkFDS1MgKi8gCi0gICAgICB9IAorI2VuZGlmIC8qIFVTRV9IQUxfQ1JZUF9SRUdJU1RFUl9DQUxMQkFDS1MgKi8KKyAgICAgIH0KICAgICAgIAotICAgICAgaWYoKGhjcnlwLT5JbnN0YW5jZS0+U1IgJiBDUllQX0ZMQUdfT0ZORSApICE9IDB4MFUpIAotICAgICAgeyAgCisgICAgICBpZigoaGNyeXAtPkluc3RhbmNlLT5TUiAmIENSWVBfRkxBR19PRk5FICkgIT0gMHgwVSkKKyAgICAgIHsKICAgICAgICAgZm9yKCBpbmRleD0wVTsgaW5kZXg8IDRVO2luZGV4KyspCi0gICAgICAgIHsgCisgICAgICAgIHsKICAgICAgICAgICBpbnRlcm1lZGlhdGVfZGF0YVtpbmRleF09aGNyeXAtPkluc3RhbmNlLT5ET1VUOwotICAgICAgICB9ICAgIAorICAgICAgICB9CiAgICAgICB9CiAgICAgfQogICB9IC8qIEVuZCBvZiBHQ00gZW5jcnlwdGlvbiAqLwpAQCAtNTg2Niw5ICs1OTI1LDkgQEAKICAgICBhdXRoZW50aWNhdGlvbiB0YWdzIHdoaWxlIGRvaW5nIGEgQ0NNIGRlY3J5cHRpb24gd2l0aCB0aGUgbGFzdCBibG9jawogICAgIG9mIHBheWxvYWQgc2l6ZSBpbmZlcmlvciB0byAxMjggYml0cyovCiAgICAgCi0gICAgaWYoKGhjcnlwLT5JbnN0YW5jZS0+Q1IgJiBDUllQX0NSX0FMR09ESVIpID09IENSWVBfT1BFUkFUSU5HTU9ERV9ERUNSWVBUKSAgICAgIAorICAgIGlmKChoY3J5cC0+SW5zdGFuY2UtPkNSICYgQ1JZUF9DUl9BTEdPRElSKSA9PSBDUllQX09QRVJBVElOR01PREVfREVDUllQVCkKICAgICB7Ci0gICAgICBpdjF0ZW1wID0gaGNyeXAtPkluc3RhbmNlLT5DU0dDTUNDTTdSOyAKKyAgICAgIGl2MXRlbXAgPSBoY3J5cC0+SW5zdGFuY2UtPkNTR0NNQ0NNN1I7CiAgICAgICAKICAgICAgIC8qIERpc2FibGUgQ1JZUCB0byBzdGFydCB0aGUgZmluYWwgcGhhc2UgKi8KICAgICAgIF9fSEFMX0NSWVBfRElTQUJMRShoY3J5cCk7CkBAIC01ODgxLDEzICs1OTQwLDEzIEBACiAgICAgICBoY3J5cC0+SW5zdGFuY2UtPklWMVJSPSBpdjF0ZW1wOwogICAgICAgCiAgICAgICAvKiBDb25maWd1cmVkICBDSE1PRCBDVFIgICAqLwotICAgICAgTU9ESUZZX1JFRyhoY3J5cC0+SW5zdGFuY2UtPkNSLCBDUllQX0NSX0FMR09NT0RFLCBDUllQX0FFU19DVFIpOyAgICAKKyAgICAgIE1PRElGWV9SRUcoaGNyeXAtPkluc3RhbmNlLT5DUiwgQ1JZUF9DUl9BTEdPTU9ERSwgQ1JZUF9BRVNfQ1RSKTsKICAgICAgIAogICAgICAgLyogRW5hYmxlIENSWVAgdG8gc3RhcnQgdGhlIGZpbmFsIHBoYXNlICovCiAgICAgICBfX0hBTF9DUllQX0VOQUJMRShoY3J5cCk7CiAgICAgfQogICAgIC8qICBMYXN0IGJsb2NrIG9wdGlvbmFsbHkgcGFkIHRoZSBkYXRhIHdpdGggemVyb3MqLyAKLSAgICBmb3IoaW5kZXg9MDsgaW5kZXggPCBsYXN0d29yZHNpemU7IGluZGV4ICsrKSAgICAgICAgCisgICAgZm9yKGluZGV4PTA7IGluZGV4IDwgbGFzdHdvcmRzaXplOyBpbmRleCArKykKICAgICB7CiAgICAgICAvKiBXcml0ZSB0aGUgbGFzdCBJbnB1dCBibG9jayBpbiB0aGUgSU4gRklGTyAqLwogICAgICAgaGNyeXAtPkluc3RhbmNlLT5ESU4gID0gKih1aW50MzJfdCAqKShoY3J5cC0+cENyeXBJbkJ1ZmZQdHIgKyBoY3J5cC0+Q3J5cEluQ291bnQgKTsKQEAgLTU5MDAsNyArNTk1OSw3IEBACiAgICAgICBpbmRleCsrOyAKICAgICB9CiAgICAgLyogV2FpdCBmb3IgT0ZORSBmbGFnIHRvIGJlIHJhaXNlZCAqLwotICAgIGlmKENSWVBfV2FpdE9uT0ZORUZsYWcoaGNyeXAsIFRpbWVvdXQpICE9IEhBTF9PSykgIAorICAgIGlmKENSWVBfV2FpdE9uT0ZORUZsYWcoaGNyeXAsIFRpbWVvdXQpICE9IEhBTF9PSykKICAgICB7IAogICAgICAgLyogRGlzYWJsZSB0aGUgQ1JZUCBwZXJpcGhlcmFsIGNsb2NrICovCiAgICAgICBfX0hBTF9DUllQX0RJU0FCTEUoaGNyeXApOwpAQCAtNTkwOSw0OCArNTk2OCw0OCBAQAogICAgICAgaGNyeXAtPkVycm9yQ29kZSB8PSBIQUxfQ1JZUF9FUlJPUl9USU1FT1VUOwogICAgICAgaGNyeXAtPlN0YXRlID0gSEFMX0NSWVBfU1RBVEVfUkVBRFk7IAogICAgICAgCi0gICAgICAvKiBQcm9jZXNzIFVubG9ja2VkICovICAgICAgICAgIAorICAgICAgLyogUHJvY2VzcyBVbmxvY2tlZCAqLwogICAgICAgX19IQUxfVU5MT0NLKGhjcnlwKTsgCi0jaWYgKFVTRV9IQUxfQ1JZUF9SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMVUpIAorI2lmIChVU0VfSEFMX0NSWVBfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDFVKQogICAgICAgLypDYWxsIHJlZ2lzdGVyZWQgZXJyb3IgY2FsbGJhY2sqLwogICAgICAgaGNyeXAtPkVycm9yQ2FsbGJhY2soaGNyeXApOwogI2Vsc2UKICAgICAgIC8qQ2FsbCBsZWdhY3kgd2VhayBlcnJvciBjYWxsYmFjayovCiAgICAgICBIQUxfQ1JZUF9FcnJvckNhbGxiYWNrKGhjcnlwKTsKLSNlbmRpZiAvKiBVU0VfSEFMX0NSWVBfUkVHSVNURVJfQ0FMTEJBQ0tTICovIAotICAgIH0gICAgCisjZW5kaWYgLyogVVNFX0hBTF9DUllQX1JFR0lTVEVSX0NBTExCQUNLUyAqLworICAgIH0KICAgICAKICAgICBpZigoaGNyeXAtPkluc3RhbmNlLT5TUiAmIENSWVBfRkxBR19PRk5FICkgIT0gMHgwVSkKICAgICB7Ci0gICAgICBmb3IoaW5kZXg9MFU7IGluZGV4PCA0VTtpbmRleCsrKSAgICAgICAgCisgICAgICBmb3IoaW5kZXg9MFU7IGluZGV4PCA0VTtpbmRleCsrKQogICAgICAgeyAgCiAgICAgICAgIC8qIFJlYWQgdGhlIE91dHB1dCBibG9jayBmcm9tIHRoZSBPdXRwdXQgRklGTyAqLwotICAgICAgICBpbnRlcm1lZGlhdGVfZGF0YVtpbmRleF0gPSBoY3J5cC0+SW5zdGFuY2UtPkRPVVQ7IAorICAgICAgICBpbnRlcm1lZGlhdGVfZGF0YVtpbmRleF0gPSBoY3J5cC0+SW5zdGFuY2UtPkRPVVQ7CiAgICAgICAgIAogICAgICAgICAvKmludGVybWVkaWF0ZSBkYXRhIGJ1ZmZlciB0byBiZSB1c2VkIGluIGZvciB0aGUgd29ya2Fyb3VuZCovCiAgICAgICAgICoodWludDMyX3QgKikoaGNyeXAtPnBDcnlwT3V0QnVmZlB0ciArIChoY3J5cC0+Q3J5cE91dENvdW50KSk9aW50ZXJtZWRpYXRlX2RhdGFbaW5kZXhdOwotICAgICAgICBoY3J5cC0+Q3J5cE91dENvdW50Kys7ICAgCi0gICAgICB9ICAgICAKLSAgICB9IAorICAgICAgICBoY3J5cC0+Q3J5cE91dENvdW50Kys7CisgICAgICB9CisgICAgfQogICAgIAotICAgIGlmKChoY3J5cC0+SW5zdGFuY2UtPkNSICYgQ1JZUF9DUl9BTEdPRElSKSA9PSBDUllQX09QRVJBVElOR01PREVfREVDUllQVCkgICAgICAKLSAgICB7ICAgICAKKyAgICBpZigoaGNyeXAtPkluc3RhbmNlLT5DUiAmIENSWVBfQ1JfQUxHT0RJUikgPT0gQ1JZUF9PUEVSQVRJTkdNT0RFX0RFQ1JZUFQpCisgICAgewogICAgICAgdGVtcDJbMF09ICBoY3J5cC0+SW5zdGFuY2UtPkNTR0NNQ0NNMFI7CiAgICAgICB0ZW1wMlsxXT0gIGhjcnlwLT5JbnN0YW5jZS0+Q1NHQ01DQ00xUjsKICAgICAgIHRlbXAyWzJdPSAgaGNyeXAtPkluc3RhbmNlLT5DU0dDTUNDTTJSOwogICAgICAgdGVtcDJbM109ICBoY3J5cC0+SW5zdGFuY2UtPkNTR0NNQ0NNM1I7CiAgICAgICAKICAgICAgIC8qIGNvbmZpZ3VyZWQgIENITU9EIENDTSAgICovCi0gICAgICBNT0RJRllfUkVHKGhjcnlwLT5JbnN0YW5jZS0+Q1IsIENSWVBfQ1JfQUxHT01PREUsIENSWVBfQUVTX0NDTSk7IAorICAgICAgTU9ESUZZX1JFRyhoY3J5cC0+SW5zdGFuY2UtPkNSLCBDUllQX0NSX0FMR09NT0RFLCBDUllQX0FFU19DQ00pOwogICAgICAgCiAgICAgICAvKiBjb25maWd1cmVkICBIZWFkZXIgcGhhc2UgICovCi0gICAgICBNT0RJRllfUkVHKGhjcnlwLT5JbnN0YW5jZS0+Q1IsIENSWVBfQ1JfR0NNX0NDTVBILCBDUllQX1BIQVNFX0hFQURFUik7IAorICAgICAgTU9ESUZZX1JFRyhoY3J5cC0+SW5zdGFuY2UtPkNSLCBDUllQX0NSX0dDTV9DQ01QSCwgQ1JZUF9QSEFTRV9IRUFERVIpOwogICAgICAgCiAgICAgICAvKnNldCB0byB6ZXJvIHRoZSBiaXRzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHBhZGRlZCBiaXRzKi8KLSAgICAgIGZvcihpbmRleCA9IGxhc3R3b3Jkc2l6ZTsgaW5kZXg8NFU7IGluZGV4ICsrKSAgICAgICAgCisgICAgICBmb3IoaW5kZXggPSBsYXN0d29yZHNpemU7IGluZGV4PDRVOyBpbmRleCArKykKICAgICAgIHsKICAgICAgICAgaW50ZXJtZWRpYXRlX2RhdGFbaW5kZXhdID0wVTsKLSAgICAgIH0gICAgIAorICAgICAgfQogICAgICAgaWYgKChucGJsYiAlNFUpPT0xVSkKICAgICAgIHsKICAgICAgICAgaW50ZXJtZWRpYXRlX2RhdGFbbGFzdHdvcmRzaXplLTFVXSAmPSAweEZGRkZGRjAwVTsKQEAgLTU5NjMsMjAgKzYwMjIsMjAgQEAKICAgICAgIHsKICAgICAgICAgaW50ZXJtZWRpYXRlX2RhdGFbbGFzdHdvcmRzaXplLTFVXSAmPSAweEZGMDAwMDAwVTsKICAgICAgIH0KLSAgICAgIGZvcihpbmRleD0wVTsgaW5kZXggPCA0VSA7IGluZGV4ICsrKSAgICAgICAgCi0gICAgICB7ICAgICAgICAgICAgICAgCisgICAgICBmb3IoaW5kZXg9MFU7IGluZGV4IDwgNFUgOyBpbmRleCArKykKKyAgICAgIHsKICAgICAgICAgaW50ZXJtZWRpYXRlX2RhdGFbaW5kZXhdIF49ICB0ZW1wW2luZGV4XTsKICAgICAgICAgaW50ZXJtZWRpYXRlX2RhdGFbaW5kZXhdIF49ICB0ZW1wMltpbmRleF07IAogICAgICAgfQotICAgICAgZm9yKGluZGV4ID0gMFU7IGluZGV4IDwgNFU7IGluZGV4ICsrKSAgICAgICAgCisgICAgICBmb3IoaW5kZXggPSAwVTsgaW5kZXggPCA0VTsgaW5kZXggKyspCiAgICAgICB7CiAgICAgICAgIC8qIFdyaXRlIHRoZSBsYXN0IElucHV0IGJsb2NrIGluIHRoZSBJTiBGSUZPICovCiAgICAgICAgIGhjcnlwLT5JbnN0YW5jZS0+RElOICA9IGludGVybWVkaWF0ZV9kYXRhW2luZGV4XSA7Ci0gICAgICB9IAorICAgICAgfQogICAgICAgCiAgICAgICAvKiBXYWl0IGZvciBCVVNZIGZsYWcgdG8gYmUgcmFpc2VkICovCi0gICAgICBpZihDUllQX1dhaXRPbkJVU1lGbGFnKGhjcnlwLCBUaW1lb3V0KSAhPSBIQUxfT0spICAKLSAgICAgIHsgCisgICAgICBpZihDUllQX1dhaXRPbkJVU1lGbGFnKGhjcnlwLCBUaW1lb3V0KSAhPSBIQUxfT0spCisgICAgICB7CiAgICAgICAgIC8qIERpc2FibGUgdGhlIENSWVAgcGVyaXBoZXJhbCBjbG9jayAqLwogICAgICAgICBfX0hBTF9DUllQX0RJU0FCTEUoaGNyeXApOwogICAgICAgICAKQEAgLTU5ODQsMzQgKzYwNDMsMzQgQEAKICAgICAgICAgaGNyeXAtPkVycm9yQ29kZSB8PSBIQUxfQ1JZUF9FUlJPUl9USU1FT1VUOwogICAgICAgICBoY3J5cC0+U3RhdGUgPSBIQUxfQ1JZUF9TVEFURV9SRUFEWTsKICAgICAgICAgCi0gICAgICAgIC8qIFByb2Nlc3MgVW5sb2NrZWQgKi8gICAgICAgICAgCi0gICAgICAgIF9fSEFMX1VOTE9DSyhoY3J5cCk7ICAgICAgIAotI2lmIChVU0VfSEFMX0NSWVBfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDFVKSAKKyAgICAgICAgLyogUHJvY2VzcyBVbmxvY2tlZCAqLworICAgICAgICBfX0hBTF9VTkxPQ0soaGNyeXApOworI2lmIChVU0VfSEFMX0NSWVBfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDFVKQogICAgICAgLypDYWxsIHJlZ2lzdGVyZWQgZXJyb3IgY2FsbGJhY2sqLwogICAgICAgaGNyeXAtPkVycm9yQ2FsbGJhY2soaGNyeXApOwogI2Vsc2UKICAgICAgIC8qQ2FsbCBsZWdhY3kgd2VhayBlcnJvciBjYWxsYmFjayovCiAgICAgICBIQUxfQ1JZUF9FcnJvckNhbGxiYWNrKGhjcnlwKTsKLSNlbmRpZiAvKiBVU0VfSEFMX0NSWVBfUkVHSVNURVJfQ0FMTEJBQ0tTICovIAorI2VuZGlmIC8qIFVTRV9IQUxfQ1JZUF9SRUdJU1RFUl9DQUxMQkFDS1MgKi8KICAgICAgIH0KICAgICB9Ci0gIH0gLyogRW5kIG9mIENDTSBXS0EqLyAgCi0gIAorICB9IC8qIEVuZCBvZiBDQ00gV0tBKi8KKwogICAvKiBQcm9jZXNzIFVubG9ja2VkICovCi0gIF9fSEFMX1VOTE9DSyhoY3J5cCk7IAotICAKKyAgX19IQUxfVU5MT0NLKGhjcnlwKTsKKwogI2Vsc2UgLyogQUVTICovCi0gIAorCiAgIC8qV29ya2Fyb3VuZCAyOiBjYXNlIEdDTSBlbmNyeXB0aW9uLCBkdXJpbmcgcGF5bG9hZCBwaGFzZSBhbmQgYmVmb3JlIGluc2VydGluZyAKICAgdGhlIGxhc3QgYmxvY2sgb2YgcGF5bGFvZCwgd2hpY2ggc2l6ZSBpcyBpbmZlcmlvciB0byAgMTI4IGJpdHMgICovICAgCiAgIAotICBpZigoaGNyeXAtPkluc3RhbmNlLT5DUiAmIEFFU19DUl9NT0RFKSA9PSBDUllQX09QRVJBVElOR01PREVfRU5DUllQVCkgICAgCisgIGlmKChoY3J5cC0+SW5zdGFuY2UtPkNSICYgQUVTX0NSX01PREUpID09IENSWVBfT1BFUkFUSU5HTU9ERV9FTkNSWVBUKQogICB7CiAgICAgLyogY29uZmlndXJlZCAgQ0hNT0QgQ1RSICAgKi8KLSAgICBNT0RJRllfUkVHKGhjcnlwLT5JbnN0YW5jZS0+Q1IsIEFFU19DUl9DSE1PRCwgQ1JZUF9BRVNfQ1RSKTsgIAorICAgIE1PRElGWV9SRUcoaGNyeXAtPkluc3RhbmNlLT5DUiwgQUVTX0NSX0NITU9ELCBDUllQX0FFU19DVFIpOwogICB9IAotICAvKiAgbGFzdCBibG9jayBvcHRpb25hbGx5IHBhZCB0aGUgZGF0YSB3aXRoIHplcm9zKi8gICAgCi0gIGZvcihpbmRleCA9IDBVOyBpbmRleCA8IGxhc3R3b3Jkc2l6ZTsgaW5kZXggKyspICAgICAgICAKKyAgLyogIGxhc3QgYmxvY2sgb3B0aW9uYWxseSBwYWQgdGhlIGRhdGEgd2l0aCB6ZXJvcyovCisgIGZvcihpbmRleCA9IDBVOyBpbmRleCA8IGxhc3R3b3Jkc2l6ZTsgaW5kZXggKyspCiAgIHsKICAgICAvKiBXcml0ZSB0aGUgbGFzdCBJbnB1dCBibG9jayBpbiB0aGUgSU4gRklGTyAqLwogICAgIGhjcnlwLT5JbnN0YW5jZS0+RElOUiAgPSAqKHVpbnQzMl90ICopKGhjcnlwLT5wQ3J5cEluQnVmZlB0ciArIGhjcnlwLT5DcnlwSW5Db3VudCApOwpAQCAtNjAyMiw0MSArNjA4MSwxMDIgQEAKICAgICAvKiBwYWQgdGhlIGRhdGEgd2l0aCB6ZXJvcyB0byBoYXZlIGEgY29tcGxldGUgYmxvY2sgKi8KICAgICBoY3J5cC0+SW5zdGFuY2UtPkRJTlIgID0gMFU7CiAgICAgaW5kZXgrKzsgCi0gIH0gICAKKyAgfQogICAvKiBXYWl0IGZvciBDQ0YgZmxhZyB0byBiZSByYWlzZWQgKi8KLSAgaWYoQ1JZUF9XYWl0T25DQ0ZsYWcoaGNyeXAsIFRpbWVvdXQpICE9IEhBTF9PSykgIAorICBpZihDUllQX1dhaXRPbkNDRmxhZyhoY3J5cCwgVGltZW91dCkgIT0gSEFMX09LKQogICB7IAotICAgIGhjcnlwLT5TdGF0ZSA9IEhBTF9DUllQX1NUQVRFX1JFQURZOyAgICAgICAgCisgICAgaGNyeXAtPlN0YXRlID0gSEFMX0NSWVBfU1RBVEVfUkVBRFk7CiAgICAgX19IQUxfVU5MT0NLKGhjcnlwKTsKLSNpZiAoVVNFX0hBTF9DUllQX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxVSkgCisjaWYgKFVTRV9IQUxfQ1JZUF9SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMVUpCiAgICAgICAvKkNhbGwgcmVnaXN0ZXJlZCBlcnJvciBjYWxsYmFjayovCiAgICAgICBoY3J5cC0+RXJyb3JDYWxsYmFjayhoY3J5cCk7CiAjZWxzZQogICAgICAgLypDYWxsIGxlZ2FjeSB3ZWFrIGVycm9yIGNhbGxiYWNrKi8KICAgICAgIEhBTF9DUllQX0Vycm9yQ2FsbGJhY2soaGNyeXApOwotI2VuZGlmIC8qIFVTRV9IQUxfQ1JZUF9SRUdJU1RFUl9DQUxMQkFDS1MgKi8gCisjZW5kaWYgLyogVVNFX0hBTF9DUllQX1JFR0lTVEVSX0NBTExCQUNLUyAqLwogICB9CiAgIAogICAvKiBDbGVhciBDQ0YgRmxhZyAqLwogICBfX0hBTF9DUllQX0NMRUFSX0ZMQUcoaGNyeXAsIENSWVBfQ0NGX0NMRUFSKTsKICAgCi0gIGZvcihpbmRleCA9IDBVOyBpbmRleDwgNFU7aW5kZXgrKykgICAgICAgIAotICB7ICAKLSAgICAvKiBSZWFkIHRoZSBPdXRwdXQgYmxvY2sgZnJvbSB0aGUgT3V0cHV0IEZJRk8gKi8gIAotICAgIGludGVybWVkaWF0ZV9kYXRhW2luZGV4XSA9IGhjcnlwLT5JbnN0YW5jZS0+RE9VVFI7IAorICBmb3IoaW5kZXggPSAwVTsgaW5kZXg8IDRVO2luZGV4KyspCisgIHsKKyAgICAvKiBSZWFkIHRoZSBPdXRwdXQgYmxvY2sgZnJvbSB0aGUgT3V0cHV0IEZJRk8gKi8KKyAgICBpbnRlcm1lZGlhdGVfZGF0YVtpbmRleF0gPSBoY3J5cC0+SW5zdGFuY2UtPkRPVVRSOwogICAgIAogICAgIC8qaW50ZXJtZWRpYXRlIGRhdGEgYnVmZmVyIHRvIGJlIHVzZWQgaW4gIHRoZSB3b3JrYXJvdW5kKi8KICAgICAqKHVpbnQzMl90ICopKGhjcnlwLT5wQ3J5cE91dEJ1ZmZQdHIgKyAoaGNyeXAtPkNyeXBPdXRDb3VudCkpPSBpbnRlcm1lZGlhdGVfZGF0YVtpbmRleF07CiAgICAgaGNyeXAtPkNyeXBPdXRDb3VudCsrOyAKLSAgfSAgCisgIH0KICAgCi0gIGlmKChoY3J5cC0+SW5zdGFuY2UtPkNSICYgQUVTX0NSX01PREUpID09IENSWVBfT1BFUkFUSU5HTU9ERV9FTkNSWVBUKSAKKyAgaWYoKGhjcnlwLT5JbnN0YW5jZS0+Q1IgJiBBRVNfQ1JfTU9ERSkgPT0gQ1JZUF9PUEVSQVRJTkdNT0RFX0VOQ1JZUFQpCiAgIHsgICAgCiAgICAgLyogY29uZmlndXJlZCAgQ0hNT0QgR0NNICAgKi8KICAgICBNT0RJRllfUkVHKGhjcnlwLT5JbnN0YW5jZS0+Q1IsIEFFU19DUl9DSE1PRCwgQ1JZUF9BRVNfR0NNX0dNQUMpOwogICAgIAogICAgIC8qIFNlbGVjdCBmaW5hbCBwaGFzZSAqLwotICAgIE1PRElGWV9SRUcoaGNyeXAtPkluc3RhbmNlLT5DUiwgQUVTX0NSX0dDTVBILCBDUllQX1BIQVNFX0ZJTkFMKTsgICAgICAgCisgICAgTU9ESUZZX1JFRyhoY3J5cC0+SW5zdGFuY2UtPkNSLCBBRVNfQ1JfR0NNUEgsIENSWVBfUEhBU0VfRklOQUwpOworICAgIAorICAgIGlmICggKGhjcnlwLT5JbnN0YW5jZS0+Q1IgJiBBRVNfQ1JfREFUQVRZUEUpID09IENSWVBfREFUQVRZUEVfMzJCKQorICAgIHsKKyAgICAgIGlmICgobnBibGIgJTRVKT09MVUpCisgICAgICB7CisgICAgICAgIGludGVybWVkaWF0ZV9kYXRhW2xhc3R3b3Jkc2l6ZS0xVV0gJj0gMHhGRkZGRkYwMFU7CisgICAgICB9CisgICAgICBpZiAoKG5wYmxiICU0VSk9PTJVKQorICAgICAgeworICAgICAgICBpbnRlcm1lZGlhdGVfZGF0YVtsYXN0d29yZHNpemUtMVVdICY9IDB4RkZGRjAwMDBVOworICAgICAgfQorICAgICAgaWYgKChucGJsYiAlNFUpPT0zVSkKKyAgICAgIHsKKyAgICAgICAgaW50ZXJtZWRpYXRlX2RhdGFbbGFzdHdvcmRzaXplLTFVXSAmPSAweEZGMDAwMDAwVTsKKyAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoKGhjcnlwLT5JbnN0YW5jZS0+Q1IgJiBBRVNfQ1JfREFUQVRZUEUpID09IENSWVBfREFUQVRZUEVfOEIpCisgICAgeworICAgICAgaWYgKChucGJsYiAlNFUpPT0xVSkKKyAgICAgIHsKKyAgICAgICAgaW50ZXJtZWRpYXRlX2RhdGFbbGFzdHdvcmRzaXplLTFVXSAmPSBfX1JFVigweEZGRkZGRjAwVSk7CisgICAgICB9CisgICAgICBpZiAoKG5wYmxiICU0VSk9PTJVKQorICAgICAgeworICAgICAgICBpbnRlcm1lZGlhdGVfZGF0YVtsYXN0d29yZHNpemUtMVVdICY9IF9fUkVWKDB4RkZGRjAwMDBVKTsKKyAgICAgIH0KKyAgICAgIGlmICgobnBibGIgJTRVKT09M1UpCisgICAgICB7CisgICAgICAgIGludGVybWVkaWF0ZV9kYXRhW2xhc3R3b3Jkc2l6ZS0xVV0gJj0gX19SRVYoMHhGRjAwMDAwMFUpOworICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmICgoaGNyeXAtPkluc3RhbmNlLT5DUiAmIEFFU19DUl9EQVRBVFlQRSkgPT0gQ1JZUF9EQVRBVFlQRV8xNkIpCisgICAgeworICAgICAgaWYgKChucGJsYiAlNFUpPT0xVSkKKyAgICAgIHsKKyAgICAgICAgaW50ZXJtZWRpYXRlX2RhdGFbbGFzdHdvcmRzaXplLTFVXSAmPSBfX1JPUigoMHhGRkZGRkYwMFUpLCAxNik7CisgICAgICB9CisgICAgICBpZiAoKG5wYmxiICU0VSk9PTJVKQorICAgICAgeworICAgICAgICBpbnRlcm1lZGlhdGVfZGF0YVtsYXN0d29yZHNpemUtMVVdICY9IF9fUk9SKCgweEZGRkYwMDAwVSksIDE2KTsKKyAgICAgIH0KKyAgICAgIGlmICgobnBibGIgJTRVKT09M1UpCisgICAgICB7CisgICAgICAgIGludGVybWVkaWF0ZV9kYXRhW2xhc3R3b3Jkc2l6ZS0xVV0gJj0gX19ST1IoKDB4RkYwMDAwMDBVKSwgMTYpOworICAgICAgfQorICAgIH0KKyAgICBlbHNlIC8qQ1JZUF9EQVRBVFlQRV8xQiovCisgICAgeworICAgICAgaWYgKChucGJsYiAlNFUpPT0xVSkKKyAgICAgIHsKKyAgICAgICAgaW50ZXJtZWRpYXRlX2RhdGFbbGFzdHdvcmRzaXplLTFVXSAmPSBfX1JCSVQoMHhGRkZGRkYwMFUpOworICAgICAgfQorICAgICAgaWYgKChucGJsYiAlNFUpPT0yVSkKKyAgICAgIHsKKyAgICAgICAgaW50ZXJtZWRpYXRlX2RhdGFbbGFzdHdvcmRzaXplLTFVXSAmPSBfX1JCSVQoMHhGRkZGMDAwMFUpOworICAgICAgfQorICAgICAgaWYgKChucGJsYiAlNFUpPT0zVSkKKyAgICAgIHsKKyAgICAgICAgaW50ZXJtZWRpYXRlX2RhdGFbbGFzdHdvcmRzaXplLTFVXSAmPSBfX1JCSVQoMHhGRjAwMDAwMFUpOworICAgICAgfQorICAgIH0KICAgICAKICAgICAvKldyaXRlIHRoZSBpbnRlcm1lZGlhdGVfZGF0YSBpbiB0aGUgSU4gRklGTyAqLyAgIAogICAgIGZvcihpbmRleCA9IDBVOyBpbmRleCA8IGxhc3R3b3Jkc2l6ZTsgaW5kZXggKyspICAgICAgICAKQEAgLTYwNjcsMjEgKzYxODcsMjEgQEAKICAgICB7CiAgICAgICAvKiBwYWQgdGhlIGRhdGEgd2l0aCB6ZXJvcyB0byBoYXZlIGEgY29tcGxldGUgYmxvY2sgKi8KICAgICAgIGhjcnlwLT5JbnN0YW5jZS0+RElOUiA9IDBVOwotICAgICAgaW5kZXgrKzsgCisgICAgICBpbmRleCsrOwogICAgIH0KICAgICAvKiBXYWl0IGZvciBDQ0YgZmxhZyB0byBiZSByYWlzZWQgKi8KLSAgICBpZihDUllQX1dhaXRPbkNDRmxhZyhoY3J5cCwgVGltZW91dCkgIT0gSEFMX09LKSAgCisgICAgaWYoQ1JZUF9XYWl0T25DQ0ZsYWcoaGNyeXAsIFRpbWVvdXQpICE9IEhBTF9PSykKICAgICB7IAogICAgICAgLyogRGlzYWJsZSB0aGUgQ1JZUCBwZXJpcGhlcmFsIGNsb2NrICovCiAgICAgICBfX0hBTF9DUllQX0RJU0FCTEUoaGNyeXApOwogICAgICAgCiAgICAgICAvKiBDaGFuZ2Ugc3RhdGUgKi8KICAgICAgIGhjcnlwLT5FcnJvckNvZGUgfD0gSEFMX0NSWVBfRVJST1JfVElNRU9VVDsKLSAgICAgIGhjcnlwLT5TdGF0ZSA9IEhBTF9DUllQX1NUQVRFX1JFQURZOyAgCisgICAgICBoY3J5cC0+U3RhdGUgPSBIQUxfQ1JZUF9TVEFURV9SRUFEWTsKICAgICAgIAotICAgICAgLyogUHJvY2VzcyBVbmxvY2tlZCAqLyAgICAgICAgICAKLSAgICAgIF9fSEFMX1VOTE9DSyhoY3J5cCk7IAotI2lmIChVU0VfSEFMX0NSWVBfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDFVKSAKKyAgICAgIC8qIFByb2Nlc3MgVW5sb2NrZWQgKi8KKyAgICAgIF9fSEFMX1VOTE9DSyhoY3J5cCk7CisjaWYgKFVTRV9IQUxfQ1JZUF9SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMVUpCiAgICAgICAvKkNhbGwgcmVnaXN0ZXJlZCBlcnJvciBjYWxsYmFjayovCiAgICAgICBoY3J5cC0+RXJyb3JDYWxsYmFjayhoY3J5cCk7CiAjZWxzZQpAQCAtNjA5Niw5ICs2MjE2LDggQEAKICAgICB7IAogICAgICAgaW50ZXJtZWRpYXRlX2RhdGFbaW5kZXhdPWhjcnlwLT5JbnN0YW5jZS0+RE9VVFI7CiAgICAgfQotICB9LypFbmQgb2YgV29ya2Fyb3VuZCAyKi8gCi0gIAotI2VuZGlmIC8qIEVuZCBBRVMgb3IgQ1JZUCAqLyAgICAgIAorICB9LypFbmQgb2YgV29ya2Fyb3VuZCAyKi8KKyNlbmRpZiAvKiBFbmQgQUVTIG9yIENSWVAgKi8KIH0KICNlbmRpZiAvKiBBRVMgb3IgR0NNIENDTSBkZWZpbmVkKi8KICNpZiBkZWZpbmVkIChDUllQKSAgCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmNHh4X2hhbF9kY21pLmMgYi9TcmMvc3RtMzJmNHh4X2hhbF9kY21pLmMKaW5kZXggODNkY2U2Mi4uZDNiMTBmYyAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZjR4eF9oYWxfZGNtaS5jCisrKyBiL1NyYy9zdG0zMmY0eHhfaGFsX2RjbWkuYwpAQCAtODEzLDYgKzgxMywzNyBAQAogfQogCiAvKioKKyAgKiBAYnJpZWYgIFNldCBlbWJlZGRlZCBzeW5jaHJvbml6YXRpb24gZGVsaW1pdGVycyB1bm1hc2tzLgorICAqIEBwYXJhbSAgaGRjbWkgcG9pbnRlciB0byBhIERDTUlfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucworICAqICAgICAgICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIERDTUkuCisgICogQHBhcmFtICBTeW5jVW5tYXNrIHBvaW50ZXIgdG8gYSBEQ01JX1N5bmNVbm1hc2tUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCisgICogICAgICAgICAgICAgICAgICAgIHRoZSBlbWJlZGRlZCBzeW5jaHJvbml6YXRpb24gZGVsaW1pdGVycyB1bm1hc2tzLgorICAqIEByZXR2YWwgSEFMIHN0YXR1cworICAqLworSEFMX1N0YXR1c1R5cGVEZWYgIEhBTF9EQ01JX0NvbmZpZ1N5bmNVbm1hc2soRENNSV9IYW5kbGVUeXBlRGVmICpoZGNtaSwgRENNSV9TeW5jVW5tYXNrVHlwZURlZiAqU3luY1VubWFzaykKK3sKKyAgLyogUHJvY2VzcyBMb2NrZWQgKi8KKyAgX19IQUxfTE9DSyhoZGNtaSk7CisKKyAgLyogTG9jayB0aGUgRENNSSBwZXJpcGhlcmFsIHN0YXRlICovCisgIGhkY21pLT5TdGF0ZSA9IEhBTF9EQ01JX1NUQVRFX0JVU1k7CisKKyAgLyogV3JpdGUgRENNSSBlbWJlZGRlZCBzeW5jaHJvbml6YXRpb24gdW5tYXNrIHJlZ2lzdGVyICovCisgIGhkY21pLT5JbnN0YW5jZS0+RVNVUiA9ICgoKHVpbnQzMl90KVN5bmNVbm1hc2stPkZyYW1lU3RhcnRVbm1hc2spIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KVN5bmNVbm1hc2stPkxpbmVTdGFydFVubWFzayA8PCBEQ01JX0VTVVJfTFNVX1Bvcyl8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdClTeW5jVW5tYXNrLT5MaW5lRW5kVW5tYXNrIDw8IERDTUlfRVNVUl9MRVVfUG9zKXxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KVN5bmNVbm1hc2stPkZyYW1lRW5kVW5tYXNrIDw8IERDTUlfRVNVUl9GRVVfUG9zKSk7CisKKyAgLyogQ2hhbmdlIHRoZSBEQ01JIHN0YXRlKi8KKyAgaGRjbWktPlN0YXRlID0gSEFMX0RDTUlfU1RBVEVfUkVBRFk7CisKKyAgLyogUHJvY2VzcyBVbmxvY2tlZCAqLworICBfX0hBTF9VTkxPQ0soaGRjbWkpOworCisgIHJldHVybiBIQUxfT0s7Cit9CisKKy8qKgogICAqIEB9CiAgICovCiAKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmY0eHhfaGFsX2Rmc2RtLmMgYi9TcmMvc3RtMzJmNHh4X2hhbF9kZnNkbS5jCmluZGV4IDMxMjZjYmQuLmM1N2ViZWIgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmY0eHhfaGFsX2Rmc2RtLmMKKysrIGIvU3JjL3N0bTMyZjR4eF9oYWxfZGZzZG0uYwpAQCAtMTU3LDIzICsxNTcsMjYgQEAKIAogICAgICoqKiBDYWxsYmFjayByZWdpc3RyYXRpb24gKioqCiAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQorICAgIFsuLl0KICAgICBUaGUgY29tcGlsYXRpb24gZGVmaW5lIFVTRV9IQUxfREZTRE1fUkVHSVNURVJfQ0FMTEJBQ0tTIHdoZW4gc2V0IHRvIDEKICAgICBhbGxvd3MgdGhlIHVzZXIgdG8gY29uZmlndXJlIGR5bmFtaWNhbGx5IHRoZSBkcml2ZXIgY2FsbGJhY2tzLgotICAgIFVzZSBmdW5jdGlvbnMgQHJlZiBIQUxfREZTRE1fQ2hhbm5lbF9SZWdpc3RlckNhbGxiYWNrKCksCi0gICAgQHJlZiBIQUxfREZTRE1fRmlsdGVyX1JlZ2lzdGVyQ2FsbGJhY2soKSBvcgotICAgIEByZWYgSEFMX0RGU0RNX0ZpbHRlcl9SZWdpc3RlckF3ZENhbGxiYWNrKCkgdG8gcmVnaXN0ZXIgYSB1c2VyIGNhbGxiYWNrLgorICAgIFVzZSBmdW5jdGlvbnMgSEFMX0RGU0RNX0NoYW5uZWxfUmVnaXN0ZXJDYWxsYmFjaygpLAorICAgIEhBTF9ERlNETV9GaWx0ZXJfUmVnaXN0ZXJDYWxsYmFjaygpIG9yCisgICAgSEFMX0RGU0RNX0ZpbHRlcl9SZWdpc3RlckF3ZENhbGxiYWNrKCkgdG8gcmVnaXN0ZXIgYSB1c2VyIGNhbGxiYWNrLgogCi0gICAgRnVuY3Rpb24gQHJlZiBIQUxfREZTRE1fQ2hhbm5lbF9SZWdpc3RlckNhbGxiYWNrKCkgYWxsb3dzIHRvIHJlZ2lzdGVyCisgICAgWy4uXQorICAgIEZ1bmN0aW9uIEhBTF9ERlNETV9DaGFubmVsX1JlZ2lzdGVyQ2FsbGJhY2soKSBhbGxvd3MgdG8gcmVnaXN0ZXIKICAgICBmb2xsb3dpbmcgY2FsbGJhY2tzOgogICAgICAgKCspIENrYWJDYWxsYmFjayAgICAgIDogREZTRE0gY2hhbm5lbCBjbG9jayBhYnNlbmNlIGRldGVjdGlvbiBjYWxsYmFjay4KICAgICAgICgrKSBTY2RDYWxsYmFjayAgICAgICA6IERGU0RNIGNoYW5uZWwgc2hvcnQgY2lyY3VpdCBkZXRlY3Rpb24gY2FsbGJhY2suCiAgICAgICAoKykgTXNwSW5pdENhbGxiYWNrICAgOiBERlNETSBjaGFubmVsIE1TUCBpbml0IGNhbGxiYWNrLgogICAgICAgKCspIE1zcERlSW5pdENhbGxiYWNrIDogREZTRE0gY2hhbm5lbCBNU1AgZGUtaW5pdCBjYWxsYmFjay4KKyAgICBbLi5dCiAgICAgVGhpcyBmdW5jdGlvbiB0YWtlcyBhcyBwYXJhbWV0ZXJzIHRoZSBIQUwgcGVyaXBoZXJhbCBoYW5kbGUsIHRoZSBDYWxsYmFjayBJRAogICAgIGFuZCBhIHBvaW50ZXIgdG8gdGhlIHVzZXIgY2FsbGJhY2sgZnVuY3Rpb24uCiAKLSAgICBGdW5jdGlvbiBAcmVmIEhBTF9ERlNETV9GaWx0ZXJfUmVnaXN0ZXJDYWxsYmFjaygpIGFsbG93cyB0byByZWdpc3RlcgorICAgIFsuLl0KKyAgICBGdW5jdGlvbiBIQUxfREZTRE1fRmlsdGVyX1JlZ2lzdGVyQ2FsbGJhY2soKSBhbGxvd3MgdG8gcmVnaXN0ZXIKICAgICBmb2xsb3dpbmcgY2FsbGJhY2tzOgogICAgICAgKCspIFJlZ0NvbnZDcGx0Q2FsbGJhY2sgICAgIDogREZTRE0gZmlsdGVyIHJlZ3VsYXIgY29udmVyc2lvbiBjb21wbGV0ZSBjYWxsYmFjay4KICAgICAgICgrKSBSZWdDb252SGFsZkNwbHRDYWxsYmFjayA6IERGU0RNIGZpbHRlciBoYWxmIHJlZ3VsYXIgY29udmVyc2lvbiBjb21wbGV0ZSBjYWxsYmFjay4KQEAgLTE4MiwyNiArMTg1LDMzIEBACiAgICAgICAoKykgRXJyb3JDYWxsYmFjayAgICAgICAgICAgOiBERlNETSBmaWx0ZXIgZXJyb3IgY2FsbGJhY2suCiAgICAgICAoKykgTXNwSW5pdENhbGxiYWNrICAgICAgICAgOiBERlNETSBmaWx0ZXIgTVNQIGluaXQgY2FsbGJhY2suCiAgICAgICAoKykgTXNwRGVJbml0Q2FsbGJhY2sgICAgICAgOiBERlNETSBmaWx0ZXIgTVNQIGRlLWluaXQgY2FsbGJhY2suCisgICAgWy4uXQogICAgIFRoaXMgZnVuY3Rpb24gdGFrZXMgYXMgcGFyYW1ldGVycyB0aGUgSEFMIHBlcmlwaGVyYWwgaGFuZGxlLCB0aGUgQ2FsbGJhY2sgSUQKICAgICBhbmQgYSBwb2ludGVyIHRvIHRoZSB1c2VyIGNhbGxiYWNrIGZ1bmN0aW9uLgogCisgICAgWy4uXQogICAgIEZvciBzcGVjaWZpYyBERlNETSBmaWx0ZXIgYW5hbG9nIHdhdGNoZG9nIGNhbGxiYWNrIHVzZSBkZWRpY2F0ZWQgcmVnaXN0ZXIgY2FsbGJhY2s6ICAgCi0gICAgQHJlZiBIQUxfREZTRE1fRmlsdGVyX1JlZ2lzdGVyQXdkQ2FsbGJhY2soKS4KKyAgICBIQUxfREZTRE1fRmlsdGVyX1JlZ2lzdGVyQXdkQ2FsbGJhY2soKS4KIAotICAgIFVzZSBmdW5jdGlvbnMgQHJlZiBIQUxfREZTRE1fQ2hhbm5lbF9VblJlZ2lzdGVyQ2FsbGJhY2soKSBvcgotICAgIEByZWYgSEFMX0RGU0RNX0ZpbHRlcl9VblJlZ2lzdGVyQ2FsbGJhY2soKSB0byByZXNldCBhIGNhbGxiYWNrIHRvIHRoZSBkZWZhdWx0CisgICAgWy4uXQorICAgIFVzZSBmdW5jdGlvbnMgSEFMX0RGU0RNX0NoYW5uZWxfVW5SZWdpc3RlckNhbGxiYWNrKCkgb3IKKyAgICBIQUxfREZTRE1fRmlsdGVyX1VuUmVnaXN0ZXJDYWxsYmFjaygpIHRvIHJlc2V0IGEgY2FsbGJhY2sgdG8gdGhlIGRlZmF1bHQKICAgICB3ZWFrIGZ1bmN0aW9uLgogCi0gICAgQHJlZiBIQUxfREZTRE1fQ2hhbm5lbF9VblJlZ2lzdGVyQ2FsbGJhY2soKSB0YWtlcyBhcyBwYXJhbWV0ZXJzIHRoZSBIQUwgcGVyaXBoZXJhbCBoYW5kbGUsCisgICAgWy4uXQorICAgIEhBTF9ERlNETV9DaGFubmVsX1VuUmVnaXN0ZXJDYWxsYmFjaygpIHRha2VzIGFzIHBhcmFtZXRlcnMgdGhlIEhBTCBwZXJpcGhlcmFsIGhhbmRsZSwKICAgICBhbmQgdGhlIENhbGxiYWNrIElELgorICAgIFsuLl0KICAgICBUaGlzIGZ1bmN0aW9uIGFsbG93cyB0byByZXNldCBmb2xsb3dpbmcgY2FsbGJhY2tzOgogICAgICAgKCspIENrYWJDYWxsYmFjayAgICAgIDogREZTRE0gY2hhbm5lbCBjbG9jayBhYnNlbmNlIGRldGVjdGlvbiBjYWxsYmFjay4KICAgICAgICgrKSBTY2RDYWxsYmFjayAgICAgICA6IERGU0RNIGNoYW5uZWwgc2hvcnQgY2lyY3VpdCBkZXRlY3Rpb24gY2FsbGJhY2suCiAgICAgICAoKykgTXNwSW5pdENhbGxiYWNrICAgOiBERlNETSBjaGFubmVsIE1TUCBpbml0IGNhbGxiYWNrLgogICAgICAgKCspIE1zcERlSW5pdENhbGxiYWNrIDogREZTRE0gY2hhbm5lbCBNU1AgZGUtaW5pdCBjYWxsYmFjay4KIAotICAgIEByZWYgSEFMX0RGU0RNX0ZpbHRlcl9VblJlZ2lzdGVyQ2FsbGJhY2soKSB0YWtlcyBhcyBwYXJhbWV0ZXJzIHRoZSBIQUwgcGVyaXBoZXJhbCBoYW5kbGUsCisgICAgWy4uXQorICAgIEhBTF9ERlNETV9GaWx0ZXJfVW5SZWdpc3RlckNhbGxiYWNrKCkgdGFrZXMgYXMgcGFyYW1ldGVycyB0aGUgSEFMIHBlcmlwaGVyYWwgaGFuZGxlLAogICAgIGFuZCB0aGUgQ2FsbGJhY2sgSUQuCisgICAgWy4uXQogICAgIFRoaXMgZnVuY3Rpb24gYWxsb3dzIHRvIHJlc2V0IGZvbGxvd2luZyBjYWxsYmFja3M6CiAgICAgICAoKykgUmVnQ29udkNwbHRDYWxsYmFjayAgICAgOiBERlNETSBmaWx0ZXIgcmVndWxhciBjb252ZXJzaW9uIGNvbXBsZXRlIGNhbGxiYWNrLgogICAgICAgKCspIFJlZ0NvbnZIYWxmQ3BsdENhbGxiYWNrIDogREZTRE0gZmlsdGVyIGhhbGYgcmVndWxhciBjb252ZXJzaW9uIGNvbXBsZXRlIGNhbGxiYWNrLgpAQCAtMjExLDI5ICsyMjEsMzQgQEAKICAgICAgICgrKSBNc3BJbml0Q2FsbGJhY2sgICAgICAgICA6IERGU0RNIGZpbHRlciBNU1AgaW5pdCBjYWxsYmFjay4KICAgICAgICgrKSBNc3BEZUluaXRDYWxsYmFjayAgICAgICA6IERGU0RNIGZpbHRlciBNU1AgZGUtaW5pdCBjYWxsYmFjay4KIAorICAgIFsuLl0KICAgICBGb3Igc3BlY2lmaWMgREZTRE0gZmlsdGVyIGFuYWxvZyB3YXRjaGRvZyBjYWxsYmFjayB1c2UgZGVkaWNhdGVkIHVucmVnaXN0ZXIgY2FsbGJhY2s6Ci0gICAgQHJlZiBIQUxfREZTRE1fRmlsdGVyX1VuUmVnaXN0ZXJBd2RDYWxsYmFjaygpLgorICAgIEhBTF9ERlNETV9GaWx0ZXJfVW5SZWdpc3RlckF3ZENhbGxiYWNrKCkuCiAKKyAgICBbLi5dCiAgICAgQnkgZGVmYXVsdCwgYWZ0ZXIgdGhlIGNhbGwgb2YgaW5pdCBmdW5jdGlvbiBhbmQgaWYgdGhlIHN0YXRlIGlzIFJFU0VUIAogICAgIGFsbCBjYWxsYmFja3MgYXJlIHJlc2V0IHRvIHRoZSBjb3JyZXNwb25kaW5nIGxlZ2FjeSB3ZWFrIGZ1bmN0aW9uczogCi0gICAgZXhhbXBsZXMgQHJlZiBIQUxfREZTRE1fQ2hhbm5lbFNjZENhbGxiYWNrKCksIEByZWYgSEFMX0RGU0RNX0ZpbHRlckVycm9yQ2FsbGJhY2soKS4KKyAgICBleGFtcGxlcyBIQUxfREZTRE1fQ2hhbm5lbFNjZENhbGxiYWNrKCksIEhBTF9ERlNETV9GaWx0ZXJFcnJvckNhbGxiYWNrKCkuCiAgICAgRXhjZXB0aW9uIGRvbmUgZm9yIE1zcEluaXQgYW5kIE1zcERlSW5pdCBjYWxsYmFja3MgdGhhdCBhcmUgcmVzcGVjdGl2ZWx5CiAgICAgcmVzZXQgdG8gdGhlIGxlZ2FjeSB3ZWFrIGZ1bmN0aW9ucyBpbiB0aGUgaW5pdCBhbmQgZGUtaW5pdCBvbmx5IHdoZW4gdGhlc2UgCiAgICAgY2FsbGJhY2tzIGFyZSBudWxsIChub3QgcmVnaXN0ZXJlZCBiZWZvcmVoYW5kKS4KICAgICBJZiBub3QsIE1zcEluaXQgb3IgTXNwRGVJbml0IGFyZSBub3QgbnVsbCwgdGhlIGluaXQgYW5kIGRlLWluaXQga2VlcCBhbmQgdXNlCiAgICAgdGhlIHVzZXIgTXNwSW5pdC9Nc3BEZUluaXQgY2FsbGJhY2tzIChyZWdpc3RlcmVkIGJlZm9yZWhhbmQpCiAKKyAgICBbLi5dCiAgICAgQ2FsbGJhY2tzIGNhbiBiZSByZWdpc3RlcmVkL3VucmVnaXN0ZXJlZCBpbiBSRUFEWSBzdGF0ZSBvbmx5LgogICAgIEV4Y2VwdGlvbiBkb25lIGZvciBNc3BJbml0L01zcERlSW5pdCBjYWxsYmFja3MgdGhhdCBjYW4gYmUgcmVnaXN0ZXJlZC91bnJlZ2lzdGVyZWQKICAgICBpbiBSRUFEWSBvciBSRVNFVCBzdGF0ZSwgdGh1cyByZWdpc3RlcmVkICh1c2VyKSBNc3BJbml0L0RlSW5pdCBjYWxsYmFja3MgY2FuIGJlIHVzZWQKICAgICBkdXJpbmcgdGhlIGluaXQvZGUtaW5pdC4KICAgICBJbiB0aGF0IGNhc2UgZmlyc3QgcmVnaXN0ZXIgdGhlIE1zcEluaXQvTXNwRGVJbml0IHVzZXIgY2FsbGJhY2tzIHVzaW5nIAotICAgIEByZWYgSEFMX0RGU0RNX0NoYW5uZWxfUmVnaXN0ZXJDYWxsYmFjaygpIG9yCi0gICAgQHJlZiBIQUxfREZTRE1fRmlsdGVyX1JlZ2lzdGVyQ2FsbGJhY2soKSBiZWZvcmUgY2FsbGluZyBpbml0IG9yIGRlLWluaXQgZnVuY3Rpb24uCisgICAgSEFMX0RGU0RNX0NoYW5uZWxfUmVnaXN0ZXJDYWxsYmFjaygpIG9yCisgICAgSEFMX0RGU0RNX0ZpbHRlcl9SZWdpc3RlckNhbGxiYWNrKCkgYmVmb3JlIGNhbGxpbmcgaW5pdCBvciBkZS1pbml0IGZ1bmN0aW9uLgogCisgICAgWy4uXQogICAgIFdoZW4gVGhlIGNvbXBpbGF0aW9uIGRlZmluZSBVU0VfSEFMX0RGU0RNX1JFR0lTVEVSX0NBTExCQUNLUyBpcyBzZXQgdG8gMCBvcgogICAgIG5vdCBkZWZpbmVkLCB0aGUgY2FsbGJhY2sgcmVnaXN0ZXJpbmcgZmVhdHVyZSBpcyBub3QgYXZhaWxhYmxlIAogICAgIGFuZCB3ZWFrIGNhbGxiYWNrcyBhcmUgdXNlZC4KKwogICAgIEBlbmR2ZXJiYXRpbQogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKiBAYXR0ZW50aW9uCkBAIC00MTcwLDcgKzQxODUsNyBAQAogICAqLwogc3RhdGljIHVpbnQzMl90IERGU0RNX0dldENoYW5uZWxGcm9tSW5zdGFuY2UoREZTRE1fQ2hhbm5lbF9UeXBlRGVmKiBJbnN0YW5jZSkKIHsKLSAgdWludDMyX3QgY2hhbm5lbCA9IDB4RkZVOworICB1aW50MzJfdCBjaGFubmVsOwogICAKICAgLyogR2V0IGNoYW5uZWwgZnJvbSBpbnN0YW5jZSAqLwogI2lmIGRlZmluZWQoREZTRE0yX0NoYW5uZWwwKQpAQCAtNDIwMiwxNCArNDIxNywxMSBAQAogICB7CiAgICAgY2hhbm5lbCA9IDZVOwogICB9Ci0gIGVsc2UgaWYoSW5zdGFuY2UgPT0gREZTRE0yX0NoYW5uZWw3KQorICBlbHNlIC8qIERGU0RNMl9DaGFubmVsNyAqLwogICB7CiAgICAgY2hhbm5lbCA9IDdVOwogICB9Ci0gIGVsc2UKLSAgewotICAgIC8qIGNoYW5uZWwgPSAweEZGVTsqLwotICB9CisKICNlbHNlCiAgIGlmKEluc3RhbmNlID09IERGU0RNMV9DaGFubmVsMCkKICAgewpAQCAtNDIyMywxNCArNDIzNSwxMCBAQAogICB7CiAgICAgY2hhbm5lbCA9IDJVOwogICB9Ci0gIGVsc2UgaWYoSW5zdGFuY2UgPT0gREZTRE0xX0NoYW5uZWwzKQorICBlbHNlIC8qIERGU0RNMV9DaGFubmVsMyAqLwogICB7CiAgICAgY2hhbm5lbCA9IDNVOwogICB9Ci0gIGVsc2UKLSAgewotICAgIC8qIGNoYW5uZWwgPSAweEZGVTsqLwotICB9CiAjZW5kaWYgLyogZGVmaW5lZChERlNETTJfQ2hhbm5lbDApICovCiAKICAgcmV0dXJuIGNoYW5uZWw7CmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmNHh4X2hhbF9kbWEuYyBiL1NyYy9zdG0zMmY0eHhfaGFsX2RtYS5jCmluZGV4IDBhNTFmN2UuLjY5ZDg0OGYgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmY0eHhfaGFsX2RtYS5jCisrKyBiL1NyYy9zdG0zMmY0eHhfaGFsX2RtYS5jCkBAIC00NzgsNyArNDc4LDYgQEAKICAgICAKICAgICAvKiBFbmFibGUgQ29tbW9uIGludGVycnVwdHMqLwogICAgIGhkbWEtPkluc3RhbmNlLT5DUiAgfD0gRE1BX0lUX1RDIHwgRE1BX0lUX1RFIHwgRE1BX0lUX0RNRTsKLSAgICBoZG1hLT5JbnN0YW5jZS0+RkNSIHw9IERNQV9JVF9GRTsKICAgICAKICAgICBpZihoZG1hLT5YZmVySGFsZkNwbHRDYWxsYmFjayAhPSBOVUxMKQogICAgIHsKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmY0eHhfaGFsX2RtYTJkLmMgYi9TcmMvc3RtMzJmNHh4X2hhbF9kbWEyZC5jCmluZGV4IDhjYTdhZTcuLmE5MTU2MjAgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmY0eHhfaGFsX2RtYTJkLmMKKysrIGIvU3JjL3N0bTMyZjR4eF9oYWxfZG1hMmQuYwpAQCAtOTUwLDYgKzk1MCwxMTkgQEAKICAgcmV0dXJuIEhBTF9PSzsKIH0KIAorLyoqCisgICogQGJyaWVmICBTdGFydCBETUEyRCBDTFVUIExvYWRpbmcuCisgICogQHBhcmFtICBoZG1hMmQgICBQb2ludGVyIHRvIGEgRE1BMkRfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucworICAqICAgICAgICAgICAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciB0aGUgRE1BMkQuCisgICogQHBhcmFtICBDTFVUQ2ZnICBQb2ludGVyIHRvIGEgRE1BMkRfQ0xVVENmZ1R5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKKyAgKiAgICAgICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIGNvbG9yIGxvb2sgdXAgdGFibGUuCisgICogQHBhcmFtICBMYXllcklkeCBETUEyRCBMYXllciBpbmRleC4KKyAgKiAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorICAqICAgICAgICAgICAgICAgICAgIERNQTJEX0JBQ0tHUk9VTkRfTEFZRVIoMCkgLyBETUEyRF9GT1JFR1JPVU5EX0xBWUVSKDEpCisgICogQHJldHZhbCBIQUwgc3RhdHVzCisgICovCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfRE1BMkRfQ0xVVFN0YXJ0TG9hZChETUEyRF9IYW5kbGVUeXBlRGVmICpoZG1hMmQsIERNQTJEX0NMVVRDZmdUeXBlRGVmICpDTFVUQ2ZnLCB1aW50MzJfdCBMYXllcklkeCkKK3sKKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KKyAgYXNzZXJ0X3BhcmFtKElTX0RNQTJEX0xBWUVSKExheWVySWR4KSk7CisgIGFzc2VydF9wYXJhbShJU19ETUEyRF9DTFVUX0NNKENMVVRDZmctPkNMVVRDb2xvck1vZGUpKTsKKyAgYXNzZXJ0X3BhcmFtKElTX0RNQTJEX0NMVVRfU0laRShDTFVUQ2ZnLT5TaXplKSk7CisKKyAgLyogUHJvY2VzcyBsb2NrZWQgKi8KKyAgX19IQUxfTE9DSyhoZG1hMmQpOworCisgIC8qIENoYW5nZSBETUEyRCBwZXJpcGhlcmFsIHN0YXRlICovCisgIGhkbWEyZC0+U3RhdGUgPSBIQUxfRE1BMkRfU1RBVEVfQlVTWTsKKworICAvKiBDb25maWd1cmUgdGhlIENMVVQgb2YgdGhlIGJhY2tncm91bmQgRE1BMkQgbGF5ZXIgKi8KKyAgaWYoTGF5ZXJJZHggPT0gRE1BMkRfQkFDS0dST1VORF9MQVlFUikKKyAgeworICAgIC8qIFdyaXRlIGJhY2tncm91bmQgQ0xVVCBtZW1vcnkgYWRkcmVzcyAqLworICAgIFdSSVRFX1JFRyhoZG1hMmQtPkluc3RhbmNlLT5CR0NNQVIsICh1aW50MzJfdClDTFVUQ2ZnLT5wQ0xVVCk7CisKKyAgICAvKiBXcml0ZSBiYWNrZ3JvdW5kIENMVVQgc2l6ZSBhbmQgQ0xVVCBjb2xvciBtb2RlICovCisgICAgTU9ESUZZX1JFRyhoZG1hMmQtPkluc3RhbmNlLT5CR1BGQ0NSLCAoRE1BMkRfQkdQRkNDUl9DUyB8IERNQTJEX0JHUEZDQ1JfQ0NNKSwKKyAgICAgICAgICAgICgoQ0xVVENmZy0+U2l6ZSA8PCBETUEyRF9CR1BGQ0NSX0NTX1BvcykgfCAoQ0xVVENmZy0+Q0xVVENvbG9yTW9kZSA8PCBETUEyRF9CR1BGQ0NSX0NDTV9Qb3MpKSk7CisKKyAgICAvKiBFbmFibGUgdGhlIENMVVQgbG9hZGluZyBmb3IgdGhlIGJhY2tncm91bmQgKi8KKyAgICBTRVRfQklUKGhkbWEyZC0+SW5zdGFuY2UtPkJHUEZDQ1IsIERNQTJEX0JHUEZDQ1JfU1RBUlQpOworICB9CisgIC8qIENvbmZpZ3VyZSB0aGUgQ0xVVCBvZiB0aGUgZm9yZWdyb3VuZCBETUEyRCBsYXllciAqLworICBlbHNlCisgIHsKKyAgICAvKiBXcml0ZSBmb3JlZ3JvdW5kIENMVVQgbWVtb3J5IGFkZHJlc3MgKi8KKyAgICBXUklURV9SRUcoaGRtYTJkLT5JbnN0YW5jZS0+RkdDTUFSLCAodWludDMyX3QpQ0xVVENmZy0+cENMVVQpOworCisgICAgLyogV3JpdGUgZm9yZWdyb3VuZCBDTFVUIHNpemUgYW5kIENMVVQgY29sb3IgbW9kZSAqLworICAgIE1PRElGWV9SRUcoaGRtYTJkLT5JbnN0YW5jZS0+RkdQRkNDUiwgKERNQTJEX0ZHUEZDQ1JfQ1MgfCBETUEyRF9GR1BGQ0NSX0NDTSksCisgICAgICAgICAgICAoKENMVVRDZmctPlNpemUgPDwgRE1BMkRfRkdQRkNDUl9DU19Qb3MpIHwgKENMVVRDZmctPkNMVVRDb2xvck1vZGUgPDwgRE1BMkRfRkdQRkNDUl9DQ01fUG9zKSkpOworCisgLyogRW5hYmxlIHRoZSBDTFVUIGxvYWRpbmcgZm9yIHRoZSBmb3JlZ3JvdW5kICovCisgICAgU0VUX0JJVChoZG1hMmQtPkluc3RhbmNlLT5GR1BGQ0NSLCBETUEyRF9GR1BGQ0NSX1NUQVJUKTsKKyAgfQorCisgIHJldHVybiBIQUxfT0s7Cit9CisKKy8qKgorICAqIEBicmllZiAgU3RhcnQgRE1BMkQgQ0xVVCBMb2FkaW5nIHdpdGggaW50ZXJydXB0IGVuYWJsZWQuCisgICogQHBhcmFtICBoZG1hMmQgICBQb2ludGVyIHRvIGEgRE1BMkRfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucworICAqICAgICAgICAgICAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciB0aGUgRE1BMkQuCisgICogQHBhcmFtICBDTFVUQ2ZnICBQb2ludGVyIHRvIGEgRE1BMkRfQ0xVVENmZ1R5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKKyAgKiAgICAgICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIGNvbG9yIGxvb2sgdXAgdGFibGUuCisgICogQHBhcmFtICBMYXllcklkeCBETUEyRCBMYXllciBpbmRleC4KKyAgKiAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorICAqICAgICAgICAgICAgICAgICAgIERNQTJEX0JBQ0tHUk9VTkRfTEFZRVIoMCkgLyBETUEyRF9GT1JFR1JPVU5EX0xBWUVSKDEpCisgICogQHJldHZhbCBIQUwgc3RhdHVzCisgICovCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfRE1BMkRfQ0xVVFN0YXJ0TG9hZF9JVChETUEyRF9IYW5kbGVUeXBlRGVmICpoZG1hMmQsIERNQTJEX0NMVVRDZmdUeXBlRGVmICpDTFVUQ2ZnLCB1aW50MzJfdCBMYXllcklkeCkKK3sKKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KKyAgYXNzZXJ0X3BhcmFtKElTX0RNQTJEX0xBWUVSKExheWVySWR4KSk7CisgIGFzc2VydF9wYXJhbShJU19ETUEyRF9DTFVUX0NNKENMVVRDZmctPkNMVVRDb2xvck1vZGUpKTsKKyAgYXNzZXJ0X3BhcmFtKElTX0RNQTJEX0NMVVRfU0laRShDTFVUQ2ZnLT5TaXplKSk7CisKKyAgLyogUHJvY2VzcyBsb2NrZWQgKi8KKyAgX19IQUxfTE9DSyhoZG1hMmQpOworCisgIC8qIENoYW5nZSBETUEyRCBwZXJpcGhlcmFsIHN0YXRlICovCisgIGhkbWEyZC0+U3RhdGUgPSBIQUxfRE1BMkRfU1RBVEVfQlVTWTsKKworICAvKiBDb25maWd1cmUgdGhlIENMVVQgb2YgdGhlIGJhY2tncm91bmQgRE1BMkQgbGF5ZXIgKi8KKyAgaWYoTGF5ZXJJZHggPT0gRE1BMkRfQkFDS0dST1VORF9MQVlFUikKKyAgeworICAgIC8qIFdyaXRlIGJhY2tncm91bmQgQ0xVVCBtZW1vcnkgYWRkcmVzcyAqLworICAgIFdSSVRFX1JFRyhoZG1hMmQtPkluc3RhbmNlLT5CR0NNQVIsICh1aW50MzJfdClDTFVUQ2ZnLT5wQ0xVVCk7CisKKyAgICAvKiBXcml0ZSBiYWNrZ3JvdW5kIENMVVQgc2l6ZSBhbmQgQ0xVVCBjb2xvciBtb2RlICovCisgICAgTU9ESUZZX1JFRyhoZG1hMmQtPkluc3RhbmNlLT5CR1BGQ0NSLCAoRE1BMkRfQkdQRkNDUl9DUyB8IERNQTJEX0JHUEZDQ1JfQ0NNKSwKKyAgICAgICAgICAgICgoQ0xVVENmZy0+U2l6ZSA8PCBETUEyRF9CR1BGQ0NSX0NTX1BvcykgfCAoQ0xVVENmZy0+Q0xVVENvbG9yTW9kZSA8PCBETUEyRF9CR1BGQ0NSX0NDTV9Qb3MpKSk7CisKKyAgICAvKiBFbmFibGUgdGhlIENMVVQgVHJhbnNmZXIgQ29tcGxldGUsIHRyYW5zZmVyIEVycm9yLCBjb25maWd1cmF0aW9uIEVycm9yIGFuZCBDTFVUIEFjY2VzcyBFcnJvciBpbnRlcnJ1cHRzICovCisgICAgX19IQUxfRE1BMkRfRU5BQkxFX0lUKGhkbWEyZCwgRE1BMkRfSVRfQ1RDIHwgRE1BMkRfSVRfVEUgfCBETUEyRF9JVF9DRSB8RE1BMkRfSVRfQ0FFKTsKKworICAgIC8qIEVuYWJsZSB0aGUgQ0xVVCBsb2FkaW5nIGZvciB0aGUgYmFja2dyb3VuZCAqLworICAgIFNFVF9CSVQoaGRtYTJkLT5JbnN0YW5jZS0+QkdQRkNDUiwgRE1BMkRfQkdQRkNDUl9TVEFSVCk7CisgIH0KKyAgLyogQ29uZmlndXJlIHRoZSBDTFVUIG9mIHRoZSBmb3JlZ3JvdW5kIERNQTJEIGxheWVyICovCisgIGVsc2UKKyAgeworICAgIC8qIFdyaXRlIGZvcmVncm91bmQgQ0xVVCBtZW1vcnkgYWRkcmVzcyAqLworICAgIFdSSVRFX1JFRyhoZG1hMmQtPkluc3RhbmNlLT5GR0NNQVIsICh1aW50MzJfdClDTFVUQ2ZnLT5wQ0xVVCk7CisKKyAgICAvKiBXcml0ZSBmb3JlZ3JvdW5kIENMVVQgc2l6ZSBhbmQgQ0xVVCBjb2xvciBtb2RlICovCisgICAgTU9ESUZZX1JFRyhoZG1hMmQtPkluc3RhbmNlLT5GR1BGQ0NSLCAoRE1BMkRfRkdQRkNDUl9DUyB8IERNQTJEX0ZHUEZDQ1JfQ0NNKSwKKyAgICAgICAgICAgICgoQ0xVVENmZy0+U2l6ZSA8PCBETUEyRF9GR1BGQ0NSX0NTX1BvcykgfCAoQ0xVVENmZy0+Q0xVVENvbG9yTW9kZSA8PCBETUEyRF9GR1BGQ0NSX0NDTV9Qb3MpKSk7CisKKyAgICAvKiBFbmFibGUgdGhlIENMVVQgVHJhbnNmZXIgQ29tcGxldGUsIHRyYW5zZmVyIEVycm9yLCBjb25maWd1cmF0aW9uIEVycm9yIGFuZCBDTFVUIEFjY2VzcyBFcnJvciBpbnRlcnJ1cHRzICovCisgICAgX19IQUxfRE1BMkRfRU5BQkxFX0lUKGhkbWEyZCwgRE1BMkRfSVRfQ1RDIHwgRE1BMkRfSVRfVEUgfCBETUEyRF9JVF9DRSB8RE1BMkRfSVRfQ0FFKTsKKworICAgIC8qIEVuYWJsZSB0aGUgQ0xVVCBsb2FkaW5nIGZvciB0aGUgZm9yZWdyb3VuZCAqLworICAgIFNFVF9CSVQoaGRtYTJkLT5JbnN0YW5jZS0+RkdQRkNDUiwgRE1BMkRfRkdQRkNDUl9TVEFSVCk7CisgIH0KKworICByZXR1cm4gSEFMX09LOworfQogCiAvKioKICAgKiBAYnJpZWYgIFN0YXJ0IERNQTJEIENMVVQgTG9hZGluZy4KQEAgLTk2MCw3ICsxMDczLDkgQEAKICAgKiBAcGFyYW0gIExheWVySWR4IERNQTJEIExheWVyIGluZGV4LgogICAqICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAgICogICAgICAgICAgICAgICAgICAgRE1BMkRfQkFDS0dST1VORF9MQVlFUigwKSAvIERNQTJEX0ZPUkVHUk9VTkRfTEFZRVIoMSkKLSAgKiBAbm90ZSBJbnZva2luZyB0aGlzIEFQSSBpcyBzaW1pbGFyIHRvIGNhbGxpbmcgSEFMX0RNQTJEX0NvbmZpZ0NMVVQoKSB0aGVuIEhBTF9ETUEyRF9FbmFibGVDTFVUKCkuCisgICogQG5vdGUgQVBJIG9ic29sZXRlIGFuZCBtYWludGFpbmVkIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbGVnYWN5LiBVc2VyIGlzCisgICogICAgICBpbnZpdGVkIHRvIHJlc29ydCB0byBIQUxfRE1BMkRfQ0xVVFN0YXJ0TG9hZCgpIGluc3RlYWQgdG8gYmVuZWZpdCBmcm9tCisgICogICAgICBjb2RlIGNvbXBhY3RuZXNzLCBjb2RlIHNpemUgYW5kIGltcHJvdmVkIGhlYXAgdXNhZ2UuCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfRE1BMkRfQ0xVVExvYWQoRE1BMkRfSGFuZGxlVHlwZURlZiAqaGRtYTJkLCBETUEyRF9DTFVUQ2ZnVHlwZURlZiBDTFVUQ2ZnLCB1aW50MzJfdCBMYXllcklkeCkKQEAgLTEwMTUsNiArMTEzMCw5IEBACiAgICogQHBhcmFtICBMYXllcklkeCBETUEyRCBMYXllciBpbmRleC4KICAgKiAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICAqICAgICAgICAgICAgICAgICAgIERNQTJEX0JBQ0tHUk9VTkRfTEFZRVIoMCkgLyBETUEyRF9GT1JFR1JPVU5EX0xBWUVSKDEpCisgICogQG5vdGUgQVBJIG9ic29sZXRlIGFuZCBtYWludGFpbmVkIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbGVnYWN5LiBVc2VyIGlzCisgICogICAgICBpbnZpdGVkIHRvIHJlc29ydCB0byBIQUxfRE1BMkRfQ0xVVFN0YXJ0TG9hZF9JVCgpIGluc3RlYWQgdG8gYmVuZWZpdAorICAqICAgICAgZnJvbSBjb2RlIGNvbXBhY3RuZXNzLCBjb2RlIHNpemUgYW5kIGltcHJvdmVkIGhlYXAgdXNhZ2UuCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfRE1BMkRfQ0xVVExvYWRfSVQoRE1BMkRfSGFuZGxlVHlwZURlZiAqaGRtYTJkLCBETUEyRF9DTFVUQ2ZnVHlwZURlZiBDTFVUQ2ZnLCB1aW50MzJfdCBMYXllcklkeCkKQEAgLTE2ODIsNiArMTgwMCw5IEBACiAgICogQHBhcmFtICBMYXllcklkeCBETUEyRCBMYXllciBpbmRleC4KICAgKiAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICAqICAgICAgICAgICAgICAgICAgIERNQTJEX0JBQ0tHUk9VTkRfTEFZRVIoMCkgLyBETUEyRF9GT1JFR1JPVU5EX0xBWUVSKDEpCisgICogQG5vdGUgQVBJIG9ic29sZXRlIGFuZCBtYWludGFpbmVkIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbGVnYWN5LiBVc2VyIGlzIGludml0ZWQKKyAgKiAgICAgIHRvIHJlc29ydCB0byBIQUxfRE1BMkRfQ0xVVFN0YXJ0TG9hZCgpIGluc3RlYWQgdG8gYmVuZWZpdCBmcm9tIGNvZGUgY29tcGFjdG5lc3MsCisgICogICAgICBjb2RlIHNpemUgYW5kIGltcHJvdmVkIGhlYXAgdXNhZ2UuCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfRE1BMkRfQ29uZmlnQ0xVVChETUEyRF9IYW5kbGVUeXBlRGVmICpoZG1hMmQsIERNQTJEX0NMVVRDZmdUeXBlRGVmIENMVVRDZmcsIHVpbnQzMl90IExheWVySWR4KQpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjR4eF9oYWxfZHNpLmMgYi9TcmMvc3RtMzJmNHh4X2hhbF9kc2kuYwppbmRleCBiZTRkYTZkLi41NDhhMzMwIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmNHh4X2hhbF9kc2kuYworKysgYi9TcmMvc3RtMzJmNHh4X2hhbF9kc2kuYwpAQCAtMTMsMzYgKzEzLDU3IEBACiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAgICAgICAgICAgICAgICAgICAgIyMjIyMgSG93IHRvIHVzZSB0aGlzIGRyaXZlciAjIyMjIwogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgWy4uXQorICAgIFRoZSBEU0kgSEFMIGRyaXZlciBjYW4gYmUgdXNlZCBhcyBmb2xsb3dzOgorCisgICAgKCMpIERlY2xhcmUgYSBEU0lfSGFuZGxlVHlwZURlZiBoYW5kbGUgc3RydWN0dXJlLCBmb3IgZXhhbXBsZTogRFNJX0hhbmRsZVR5cGVEZWYgIGhkc2k7CisKKyAgICAoIykgSW5pdGlhbGl6ZSB0aGUgRFNJIGxvdyBsZXZlbCByZXNvdXJjZXMgYnkgaW1wbGVtZW50aW5nIHRoZSBIQUxfRFNJX01zcEluaXQoKSBBUEk6CisgICAgICAgICgjIykgRW5hYmxlIHRoZSBEU0kgaW50ZXJmYWNlIGNsb2NrCisgICAgICAgICgjIykgTlZJQyBjb25maWd1cmF0aW9uIGlmIHlvdSBuZWVkIHRvIHVzZSBpbnRlcnJ1cHQgcHJvY2VzcworICAgICAgICAgICAgKCsrKykgQ29uZmlndXJlIHRoZSBEU0kgaW50ZXJydXB0IHByaW9yaXR5CisgICAgICAgICAgICAoKysrKSBFbmFibGUgdGhlIE5WSUMgRFNJIElSUSBDaGFubmVsCisKKyAgICAoIykgSW5pdGlhbGl6ZSB0aGUgRFNJIEhvc3QgcGVyaXBoZXJhbCwgdGhlIHJlcXVpcmVkIFBMTCBwYXJhbWV0ZXJzLCBudW1iZXIgb2YgbGFuY2VzIGFuZAorICAgICAgICBUWCBFc2NhcGUgY2xvY2sgZGl2aWRlciBieSBjYWxsaW5nIHRoZSBIQUxfRFNJX0luaXQoKSBBUEkgd2hpY2ggY2FsbHMgSEFMX0RTSV9Nc3BJbml0KCkuCisKKyAgICAqKiogQ29uZmlndXJhdGlvbiAqKioKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgWy4uXQotICAgICgjKSBVc2UgQHJlZiBIQUxfRFNJX0luaXQoKSBmdW5jdGlvbiB0byBpbml0aWFsaXplIHRoZSBEU0kgSG9zdCBJUCBhbmQgcHJvZ3JhbSB0aGUgcmVxdWlyZWQKLSAgICAgICAgUExMIHBhcmFtZXRlcnMsIG51bWJlciBvZiBsYW5lcyBhbmQgVFggRXNjYXBlIGNsb2NrIGRpdmlkZXIuCi0gICAgKCMpIFVzZSBAcmVmIEhBTF9EU0lfQ29uZmlnQWRhcHRlZENvbW1hbmRNb2RlKCkgZnVuY3Rpb24gdG8gY29uZmlndXJlIHRoZSBEU0kgaG9zdCBpbiBhZGFwdGVkCisgICAgKCMpIFVzZSBIQUxfRFNJX0NvbmZpZ0FkYXB0ZWRDb21tYW5kTW9kZSgpIGZ1bmN0aW9uIHRvIGNvbmZpZ3VyZSB0aGUgRFNJIGhvc3QgaW4gYWRhcHRlZAogICAgICAgICBjb21tYW5kIG1vZGUuCi0gICAgKCMpIFdoZW4gb3BlcmF0aW5nIGluIHZpZGVvIG1vZGUgLCB1c2UgQHJlZiBIQUxfRFNJX0NvbmZpZ1ZpZGVvTW9kZSgpIHRvIGNvbmZpZ3VyZSB0aGUgRFNJIGhvc3QuCi0gICAgKCMpIEZ1bmN0aW9uIEByZWYgSEFMX0RTSV9Db25maWdDb21tYW5kKCkgaXMgdXNlZCB0byBjb25maWd1cmUgdGhlIERTSSBjb21tYW5kcyBiZWhhdmlvciBpbiBsb3cgcG93ZXIgbW9kZS4KLSAgICAoIykgVG8gY29uZmlndXJlIHRoZSBEU0kgUEhZIHRpbWluZ3MgcGFyYW1ldGVycywgdXNlIGZ1bmN0aW9uIEByZWYgSEFMX0RTSV9Db25maWdQaHlUaW1lcigpLgotICAgICgjKSBUaGUgRFNJIEhvc3QgY2FuIGJlIHN0YXJ0ZWQvc3RvcHBlZCB1c2luZyByZXNwZWN0aXZlbHkgZnVuY3Rpb25zIEByZWYgSEFMX0RTSV9TdGFydCgpIGFuZCBAcmVmIEhBTF9EU0lfU3RvcCgpLgotICAgICAgICBGdW5jdGlvbnMgQHJlZiBIQUxfRFNJX1Nob3J0V3JpdGUoKSwgQHJlZiBIQUxfRFNJX0xvbmdXcml0ZSgpIGFuZCBAcmVmIEhBTF9EU0lfUmVhZCgpIGFsbG93cyByZXNwZWN0aXZlbHkKKworICAgICgjKSBXaGVuIG9wZXJhdGluZyBpbiB2aWRlbyBtb2RlICwgdXNlIEhBTF9EU0lfQ29uZmlnVmlkZW9Nb2RlKCkgdG8gY29uZmlndXJlIHRoZSBEU0kgaG9zdC4KKworICAgICgjKSBGdW5jdGlvbiBIQUxfRFNJX0NvbmZpZ0NvbW1hbmQoKSBpcyB1c2VkIHRvIGNvbmZpZ3VyZSB0aGUgRFNJIGNvbW1hbmRzIGJlaGF2aW9yIGluIGxvdyBwb3dlciBtb2RlLgorCisgICAgKCMpIFRvIGNvbmZpZ3VyZSB0aGUgRFNJIFBIWSB0aW1pbmdzIHBhcmFtZXRlcnMsIHVzZSBmdW5jdGlvbiBIQUxfRFNJX0NvbmZpZ1BoeVRpbWVyKCkuCisKKyAgICAoIykgVGhlIERTSSBIb3N0IGNhbiBiZSBzdGFydGVkL3N0b3BwZWQgdXNpbmcgcmVzcGVjdGl2ZWx5IGZ1bmN0aW9ucyBIQUxfRFNJX1N0YXJ0KCkgYW5kIEhBTF9EU0lfU3RvcCgpLgorICAgICAgICBGdW5jdGlvbnMgSEFMX0RTSV9TaG9ydFdyaXRlKCksIEhBTF9EU0lfTG9uZ1dyaXRlKCkgYW5kIEhBTF9EU0lfUmVhZCgpIGFsbG93cyByZXNwZWN0aXZlbHkKICAgICAgICAgdG8gd3JpdGUgRFNJIHNob3J0IHBhY2tldHMsIGxvbmcgcGFja2V0cyBhbmQgdG8gcmVhZCBEU0kgcGFja2V0cy4KIAogICAgICgjKSBUaGUgRFNJIEhvc3QgT2ZmZXJzIHR3byBMb3cgcG93ZXIgbW9kZXMgOgotICAgICAgICAoKykgTG93IFBvd2VyIE1vZGUgb24gZGF0YSBsYW5lcyBvbmx5OiBPbmx5IERTSSBkYXRhIGxhbmVzIGFyZSBzaHV0IGRvd24uCi0gICAgICAgICAgICBJdCBpcyBwb3NzaWJsZSB0byBlbnRlci9leGl0IGZyb20gdGhpcyBtb2RlIHVzaW5nIHJlc3BlY3RpdmVseSBmdW5jdGlvbnMgQHJlZiBIQUxfRFNJX0VudGVyVUxQTURhdGEoKQotICAgICAgICAgICAgYW5kIEByZWYgSEFMX0RTSV9FeGl0VUxQTURhdGEoKQorICAgICAgICAoKyspIExvdyBQb3dlciBNb2RlIG9uIGRhdGEgbGFuZXMgb25seTogT25seSBEU0kgZGF0YSBsYW5lcyBhcmUgc2h1dCBkb3duLgorICAgICAgICAgICAgSXQgaXMgcG9zc2libGUgdG8gZW50ZXIvZXhpdCBmcm9tIHRoaXMgbW9kZSB1c2luZyByZXNwZWN0aXZlbHkgZnVuY3Rpb25zIEhBTF9EU0lfRW50ZXJVTFBNRGF0YSgpCisgICAgICAgICAgICBhbmQgSEFMX0RTSV9FeGl0VUxQTURhdGEoKQogCi0gICAgICAgICgrKSBMb3cgUG93ZXIgTW9kZSBvbiBkYXRhIGFuZCBjbG9jayBsYW5lcyA6IEFsbCBEU0kgbGFuZXMgYXJlIHNodXQgZG93biBpbmNsdWRpbmcgZGF0YSBhbmQgY2xvY2sgbGFuZXMuCi0gICAgICAgICAgICBJdCBpcyBwb3NzaWJsZSB0byBlbnRlci9leGl0IGZyb20gdGhpcyBtb2RlIHVzaW5nIHJlc3BlY3RpdmVseSBmdW5jdGlvbnMgQHJlZiBIQUxfRFNJX0VudGVyVUxQTSgpCi0gICAgICAgICAgICBhbmQgQHJlZiBIQUxfRFNJX0V4aXRVTFBNKCkKLQotICAgICgjKSBVc2VyIGNhbiBzZWxlY3QgdGhlIERTSSBlcnJvcnMgdG8gYmUgcmVwb3J0ZWQvbW9uaXRvcmVkIHVzaW5nIGZ1bmN0aW9uIEByZWYgSEFMX0RTSV9Db25maWdFcnJvck1vbml0b3IoKQotICAgICAgICBXaGVuIGFuIGVycm9yIG9jY3VycywgdGhlIGNhbGxiYWNrIEByZWYgSEFMX0RTSV9FcnJvckNhbGxiYWNrKCkgaXMgYXNzZXJ0ZWQgYW5kIHRoZW4gdXNlciBjYW4gcmV0cmlldmUKLSAgICAgICAgdGhlIGVycm9yIGNvZGUgYnkgY2FsbGluZyBmdW5jdGlvbiBAcmVmIEhBTF9EU0lfR2V0RXJyb3IoKQorICAgICAgICAoKyspIExvdyBQb3dlciBNb2RlIG9uIGRhdGEgYW5kIGNsb2NrIGxhbmVzIDogQWxsIERTSSBsYW5lcyBhcmUgc2h1dCBkb3duIGluY2x1ZGluZyBkYXRhIGFuZCBjbG9jayBsYW5lcy4KKyAgICAgICAgICAgIEl0IGlzIHBvc3NpYmxlIHRvIGVudGVyL2V4aXQgZnJvbSB0aGlzIG1vZGUgdXNpbmcgcmVzcGVjdGl2ZWx5IGZ1bmN0aW9ucyBIQUxfRFNJX0VudGVyVUxQTSgpCisgICAgICAgICAgICBhbmQgSEFMX0RTSV9FeGl0VUxQTSgpCiAKICAgICAoIykgVG8gY29udHJvbCBEU0kgc3RhdGUgeW91IGNhbiB1c2UgdGhlIGZvbGxvd2luZyBmdW5jdGlvbjogSEFMX0RTSV9HZXRTdGF0ZSgpCiAKLSAgICAgKioqIERTSSBIQUwgZHJpdmVyIG1hY3JvcyBsaXN0ICoqKgotICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgWy4uXQorICAgICoqKiBFcnJvciBtYW5hZ2VtZW50ICoqKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PQorICAgIFsuLl0KKyAgICAoIykgVXNlciBjYW4gc2VsZWN0IHRoZSBEU0kgZXJyb3JzIHRvIGJlIHJlcG9ydGVkL21vbml0b3JlZCB1c2luZyBmdW5jdGlvbiBIQUxfRFNJX0NvbmZpZ0Vycm9yTW9uaXRvcigpCisgICAgICAgIFdoZW4gYW4gZXJyb3Igb2NjdXJzLCB0aGUgY2FsbGJhY2sgSEFMX0RTSV9FcnJvckNhbGxiYWNrKCkgaXMgYXNzZXJ0ZWQgYW5kIHRoZW4gdXNlciBjYW4gcmV0cmlldmUKKyAgICAgICAgdGhlIGVycm9yIGNvZGUgYnkgY2FsbGluZyBmdW5jdGlvbiBIQUxfRFNJX0dldEVycm9yKCkKKworICAgICoqKiBEU0kgSEFMIGRyaXZlciBtYWNyb3MgbGlzdCAqKioKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBbLi5dCiAgICAgICAgQmVsb3cgdGhlIGxpc3Qgb2YgbW9zdCB1c2VkIG1hY3JvcyBpbiBEU0kgSEFMIGRyaXZlci4KIAogICAgICAgKCspIF9fSEFMX0RTSV9FTkFCTEU6IEVuYWJsZSB0aGUgRFNJIEhvc3QuCkBAIC01OSw1OCArODAsNjMgQEAKICAgICAgICgrKSBfX0hBTF9EU0lfRElTQUJMRV9JVDogRGlzYWJsZXMgdGhlIHNwZWNpZmllZCBEU0kgaW50ZXJydXB0cy4KICAgICAgICgrKSBfX0hBTF9EU0lfR0VUX0lUX1NPVVJDRTogQ2hlY2tzIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBEU0kgaW50ZXJydXB0IHNvdXJjZSBpcyBlbmFibGVkIG9yIG5vdC4KIAorICAgIFsuLl0KKyAgICAgIChAKSBZb3UgY2FuIHJlZmVyIHRvIHRoZSBEU0kgSEFMIGRyaXZlciBoZWFkZXIgZmlsZSBmb3IgbW9yZSB1c2VmdWwgbWFjcm9zCiAKKyAgICAqKiogQ2FsbGJhY2sgcmVnaXN0cmF0aW9uICoqKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIFsuLl0KKyAgICBUaGUgY29tcGlsYXRpb24gZGVmaW5lICBVU0VfSEFMX0RTSV9SRUdJU1RFUl9DQUxMQkFDS1Mgd2hlbiBzZXQgdG8gMQorICAgIGFsbG93cyB0aGUgdXNlciB0byBjb25maWd1cmUgZHluYW1pY2FsbHkgdGhlIGRyaXZlciBjYWxsYmFja3MuCisgICAgVXNlIEZ1bmN0aW9uIEhBTF9EU0lfUmVnaXN0ZXJDYWxsYmFjaygpIHRvIHJlZ2lzdGVyIGEgY2FsbGJhY2suCiAKLSAgKioqIENhbGxiYWNrIHJlZ2lzdHJhdGlvbiAqKioKLSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgWy4uXQorICAgIEZ1bmN0aW9uIEhBTF9EU0lfUmVnaXN0ZXJDYWxsYmFjaygpIGFsbG93cyB0byByZWdpc3RlciBmb2xsb3dpbmcgY2FsbGJhY2tzOgorICAgICAgKCspIFRlYXJpbmdFZmZlY3RDYWxsYmFjayA6IERTSSBUZWFyaW5nIEVmZmVjdCBDYWxsYmFjay4KKyAgICAgICgrKSBFbmRPZlJlZnJlc2hDYWxsYmFjayAgOiBEU0kgRW5kIE9mIFJlZnJlc2ggQ2FsbGJhY2suCisgICAgICAoKykgRXJyb3JDYWxsYmFjayAgICAgICAgIDogRFNJIEVycm9yIENhbGxiYWNrCisgICAgICAoKykgTXNwSW5pdENhbGxiYWNrICAgICAgIDogRFNJIE1zcEluaXQuCisgICAgICAoKykgTXNwRGVJbml0Q2FsbGJhY2sgICAgIDogRFNJIE1zcERlSW5pdC4KKyAgICBbLi5dCisgICAgVGhpcyBmdW5jdGlvbiB0YWtlcyBhcyBwYXJhbWV0ZXJzIHRoZSBIQUwgcGVyaXBoZXJhbCBoYW5kbGUsIHRoZSBjYWxsYmFjayBJRAorICAgIGFuZCBhIHBvaW50ZXIgdG8gdGhlIHVzZXIgY2FsbGJhY2sgZnVuY3Rpb24uCiAKLSAgVGhlIGNvbXBpbGF0aW9uIGRlZmluZSAgVVNFX0hBTF9EU0lfUkVHSVNURVJfQ0FMTEJBQ0tTIHdoZW4gc2V0IHRvIDEKLSAgYWxsb3dzIHRoZSB1c2VyIHRvIGNvbmZpZ3VyZSBkeW5hbWljYWxseSB0aGUgZHJpdmVyIGNhbGxiYWNrcy4KLSAgVXNlIEZ1bmN0aW9uIEByZWYgSEFMX0RTSV9SZWdpc3RlckNhbGxiYWNrKCkgdG8gcmVnaXN0ZXIgYSBjYWxsYmFjay4KKyAgICBbLi5dCisgICAgVXNlIGZ1bmN0aW9uIEhBTF9EU0lfVW5SZWdpc3RlckNhbGxiYWNrKCkgdG8gcmVzZXQgYSBjYWxsYmFjayB0byB0aGUgZGVmYXVsdAorICAgIHdlYWsgZnVuY3Rpb24uCisgICAgSEFMX0RTSV9VblJlZ2lzdGVyQ2FsbGJhY2sgdGFrZXMgYXMgcGFyYW1ldGVycyB0aGUgSEFMIHBlcmlwaGVyYWwgaGFuZGxlLAorICAgIGFuZCB0aGUgY2FsbGJhY2sgSUQuCisgICAgWy4uXQorICAgIFRoaXMgZnVuY3Rpb24gYWxsb3dzIHRvIHJlc2V0IGZvbGxvd2luZyBjYWxsYmFja3M6CisgICAgICAoKykgVGVhcmluZ0VmZmVjdENhbGxiYWNrIDogRFNJIFRlYXJpbmcgRWZmZWN0IENhbGxiYWNrLgorICAgICAgKCspIEVuZE9mUmVmcmVzaENhbGxiYWNrICA6IERTSSBFbmQgT2YgUmVmcmVzaCBDYWxsYmFjay4KKyAgICAgICgrKSBFcnJvckNhbGxiYWNrICAgICAgICAgOiBEU0kgRXJyb3IgQ2FsbGJhY2sKKyAgICAgICgrKSBNc3BJbml0Q2FsbGJhY2sgICAgICAgOiBEU0kgTXNwSW5pdC4KKyAgICAgICgrKSBNc3BEZUluaXRDYWxsYmFjayAgICAgOiBEU0kgTXNwRGVJbml0LgogCi0gIEZ1bmN0aW9uIEByZWYgSEFMX0RTSV9SZWdpc3RlckNhbGxiYWNrKCkgYWxsb3dzIHRvIHJlZ2lzdGVyIGZvbGxvd2luZyBjYWxsYmFja3M6Ci0gICAgKCspIFRlYXJpbmdFZmZlY3RDYWxsYmFjayA6IERTSSBUZWFyaW5nIEVmZmVjdCBDYWxsYmFjay4KLSAgICAoKykgRW5kT2ZSZWZyZXNoQ2FsbGJhY2sgIDogRFNJIEVuZCBPZiBSZWZyZXNoIENhbGxiYWNrLgotICAgICgrKSBFcnJvckNhbGxiYWNrICAgICAgICAgOiBEU0kgRXJyb3IgQ2FsbGJhY2sKLSAgICAoKykgTXNwSW5pdENhbGxiYWNrICAgICAgIDogRFNJIE1zcEluaXQuCi0gICAgKCspIE1zcERlSW5pdENhbGxiYWNrICAgICA6IERTSSBNc3BEZUluaXQuCi0gIFRoaXMgZnVuY3Rpb24gdGFrZXMgYXMgcGFyYW1ldGVycyB0aGUgSEFMIHBlcmlwaGVyYWwgaGFuZGxlLCB0aGUgQ2FsbGJhY2sgSUQKLSAgYW5kIGEgcG9pbnRlciB0byB0aGUgdXNlciBjYWxsYmFjayBmdW5jdGlvbi4KKyAgICBbLi5dCisgICAgQnkgZGVmYXVsdCwgYWZ0ZXIgdGhlIEhBTF9EU0lfSW5pdCBhbmQgd2hlbiB0aGUgc3RhdGUgaXMgSEFMX0RTSV9TVEFURV9SRVNFVAorICAgIGFsbCBjYWxsYmFja3MgYXJlIHNldCB0byB0aGUgY29ycmVzcG9uZGluZyB3ZWFrIGZ1bmN0aW9uczoKKyAgICBleGFtcGxlcyBIQUxfRFNJX1RlYXJpbmdFZmZlY3RDYWxsYmFjaygpLCBIQUxfRFNJX0VuZE9mUmVmcmVzaENhbGxiYWNrKCkuCisgICAgRXhjZXB0aW9uIGRvbmUgZm9yIE1zcEluaXQgYW5kIE1zcERlSW5pdCBmdW5jdGlvbnMgdGhhdCBhcmUgcmVzcGVjdGl2ZWx5CisgICAgcmVzZXQgdG8gdGhlIGxlZ2FjeSB3ZWFrIChzdXJjaGFyZ2VkKSBmdW5jdGlvbnMgaW4gdGhlIEhBTF9EU0lfSW5pdCgpCisgICAgYW5kIEhBTF9EU0lfRGVJbml0KCkgb25seSB3aGVuIHRoZXNlIGNhbGxiYWNrcyBhcmUgbnVsbCAobm90IHJlZ2lzdGVyZWQgYmVmb3JlaGFuZCkuCisgICAgSWYgbm90LCBNc3BJbml0IG9yIE1zcERlSW5pdCBhcmUgbm90IG51bGwsIHRoZSBIQUxfRFNJX0luaXQoKSBhbmQgSEFMX0RTSV9EZUluaXQoKQorICAgIGtlZXAgYW5kIHVzZSB0aGUgdXNlciBNc3BJbml0L01zcERlSW5pdCBjYWxsYmFja3MgKHJlZ2lzdGVyZWQgYmVmb3JlaGFuZCkuCiAKLSAgVXNlIGZ1bmN0aW9uIEByZWYgSEFMX0RTSV9VblJlZ2lzdGVyQ2FsbGJhY2soKSB0byByZXNldCBhIGNhbGxiYWNrIHRvIHRoZSBkZWZhdWx0Ci0gIHdlYWsgZnVuY3Rpb24uCi0gIEByZWYgSEFMX0RTSV9VblJlZ2lzdGVyQ2FsbGJhY2sgdGFrZXMgYXMgcGFyYW1ldGVycyB0aGUgSEFMIHBlcmlwaGVyYWwgaGFuZGxlLAotICBhbmQgdGhlIENhbGxiYWNrIElELgotICBUaGlzIGZ1bmN0aW9uIGFsbG93cyB0byByZXNldCBmb2xsb3dpbmcgY2FsbGJhY2tzOgotICAgICgrKSBUZWFyaW5nRWZmZWN0Q2FsbGJhY2sgOiBEU0kgVGVhcmluZyBFZmZlY3QgQ2FsbGJhY2suCi0gICAgKCspIEVuZE9mUmVmcmVzaENhbGxiYWNrICA6IERTSSBFbmQgT2YgUmVmcmVzaCBDYWxsYmFjay4KLSAgICAoKykgRXJyb3JDYWxsYmFjayAgICAgICAgIDogRFNJIEVycm9yIENhbGxiYWNrCi0gICAgKCspIE1zcEluaXRDYWxsYmFjayAgICAgICA6IERTSSBNc3BJbml0LgotICAgICgrKSBNc3BEZUluaXRDYWxsYmFjayAgICAgOiBEU0kgTXNwRGVJbml0LgorICAgIFsuLl0KKyAgICBDYWxsYmFja3MgY2FuIGJlIHJlZ2lzdGVyZWQvdW5yZWdpc3RlcmVkIGluIEhBTF9EU0lfU1RBVEVfUkVBRFkgc3RhdGUgb25seS4KKyAgICBFeGNlcHRpb24gZG9uZSBNc3BJbml0L01zcERlSW5pdCB0aGF0IGNhbiBiZSByZWdpc3RlcmVkL3VucmVnaXN0ZXJlZAorICAgIGluIEhBTF9EU0lfU1RBVEVfUkVBRFkgb3IgSEFMX0RTSV9TVEFURV9SRVNFVCBzdGF0ZSwKKyAgICB0aHVzIHJlZ2lzdGVyZWQgKHVzZXIpIE1zcEluaXQvRGVJbml0IGNhbGxiYWNrcyBjYW4gYmUgdXNlZCBkdXJpbmcgdGhlIEluaXQvRGVJbml0LgorICAgIEluIHRoYXQgY2FzZSBmaXJzdCByZWdpc3RlciB0aGUgTXNwSW5pdC9Nc3BEZUluaXQgdXNlciBjYWxsYmFja3MKKyAgICB1c2luZyBIQUxfRFNJX1JlZ2lzdGVyQ2FsbGJhY2soKSBiZWZvcmUgY2FsbGluZyBIQUxfRFNJX0RlSW5pdCgpCisgICAgb3IgSEFMX0RTSV9Jbml0KCkgZnVuY3Rpb24uCiAKLSAgQnkgZGVmYXVsdCwgYWZ0ZXIgdGhlIEhBTF9EU0lfSW5pdCBhbmQgd2hlbiB0aGUgc3RhdGUgaXMgSEFMX0RTSV9TVEFURV9SRVNFVAotICBhbGwgY2FsbGJhY2tzIGFyZSBzZXQgdG8gdGhlIGNvcnJlc3BvbmRpbmcgd2VhayBmdW5jdGlvbnM6Ci0gIGV4YW1wbGVzIEByZWYgSEFMX0RTSV9UZWFyaW5nRWZmZWN0Q2FsbGJhY2soKSwgQHJlZiBIQUxfRFNJX0VuZE9mUmVmcmVzaENhbGxiYWNrKCkuCi0gIEV4Y2VwdGlvbiBkb25lIGZvciBNc3BJbml0IGFuZCBNc3BEZUluaXQgZnVuY3Rpb25zIHRoYXQgYXJlCi0gIHJlc2V0IHRvIHRoZSBsZWdhY3kgd2VhayBmdW5jdGlvbiBpbiB0aGUgSEFMX0RTSV9Jbml0LyBAcmVmIEhBTF9EU0lfRGVJbml0IG9ubHkgd2hlbgotICB0aGVzZSBjYWxsYmFja3MgYXJlIG51bGwgKG5vdCByZWdpc3RlcmVkIGJlZm9yZWhhbmQpLgotICBpZiBub3QsIE1zcEluaXQgb3IgTXNwRGVJbml0IGFyZSBub3QgbnVsbCwgdGhlIEByZWYgSEFMX0RTSV9Jbml0LyBAcmVmIEhBTF9EU0lfRGVJbml0Ci0gIGtlZXAgYW5kIHVzZSB0aGUgdXNlciBNc3BJbml0L01zcERlSW5pdCBjYWxsYmFja3MgKHJlZ2lzdGVyZWQgYmVmb3JlaGFuZCkKLQotICBDYWxsYmFja3MgY2FuIGJlIHJlZ2lzdGVyZWQvdW5yZWdpc3RlcmVkIGluIEhBTF9EU0lfU1RBVEVfUkVBRFkgc3RhdGUgb25seS4KLSAgRXhjZXB0aW9uIGRvbmUgTXNwSW5pdC9Nc3BEZUluaXQgdGhhdCBjYW4gYmUgcmVnaXN0ZXJlZC91bnJlZ2lzdGVyZWQKLSAgaW4gSEFMX0RTSV9TVEFURV9SRUFEWSBvciBIQUxfRFNJX1NUQVRFX1JFU0VUIHN0YXRlLAotICB0aHVzIHJlZ2lzdGVyZWQgKHVzZXIpIE1zcEluaXQvRGVJbml0IGNhbGxiYWNrcyBjYW4gYmUgdXNlZCBkdXJpbmcgdGhlIEluaXQvRGVJbml0LgotICBJbiB0aGF0IGNhc2UgZmlyc3QgcmVnaXN0ZXIgdGhlIE1zcEluaXQvTXNwRGVJbml0IHVzZXIgY2FsbGJhY2tzCi0gIHVzaW5nIEByZWYgSEFMX0RTSV9SZWdpc3RlckNhbGxiYWNrKCkgYmVmb3JlIGNhbGxpbmcgQHJlZiBIQUxfRFNJX0RlSW5pdAotICBvciBIQUxfRFNJX0luaXQgZnVuY3Rpb24uCi0KLSAgV2hlbiBUaGUgY29tcGlsYXRpb24gZGVmaW5lIFVTRV9IQUxfRFNJX1JFR0lTVEVSX0NBTExCQUNLUyBpcyBzZXQgdG8gMCBvcgotICBub3QgZGVmaW5lZCwgdGhlIGNhbGxiYWNrIHJlZ2lzdHJhdGlvbiBmZWF0dXJlIGlzIG5vdCBhdmFpbGFibGUgYW5kIGFsbCBjYWxsYmFja3MKLSAgYXJlIHNldCB0byB0aGUgY29ycmVzcG9uZGluZyB3ZWFrIGZ1bmN0aW9ucy4KLQotICAgICBbLi5dCi0gICAgICAgKEApIFlvdSBjYW4gcmVmZXIgdG8gdGhlIERTSSBIQUwgZHJpdmVyIGhlYWRlciBmaWxlIGZvciBtb3JlIHVzZWZ1bCBtYWNyb3MKKyAgICBbLi5dCisgICAgV2hlbiBUaGUgY29tcGlsYXRpb24gZGVmaW5lIFVTRV9IQUxfRFNJX1JFR0lTVEVSX0NBTExCQUNLUyBpcyBzZXQgdG8gMCBvcgorICAgIG5vdCBkZWZpbmVkLCB0aGUgY2FsbGJhY2sgcmVnaXN0cmF0aW9uIGZlYXR1cmUgaXMgbm90IGF2YWlsYWJsZSBhbmQgYWxsIGNhbGxiYWNrcworICAgIGFyZSBzZXQgdG8gdGhlIGNvcnJlc3BvbmRpbmcgd2VhayBmdW5jdGlvbnMuCiAKICAgQGVuZHZlcmJhdGltCiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTg2LDEwICsyMTIsMTAgQEAKICAgKiBAcGFyYW0gIENoYW5uZWxJRCBWaXJ0dWFsIGNoYW5uZWwgSUQgb2YgdGhlIGhlYWRlciBwYWNrZXQKICAgKiBAcGFyYW0gIERhdGFUeXBlICBQYWNrZXQgZGF0YSB0eXBlIG9mIHRoZSBoZWFkZXIgcGFja2V0CiAgICogICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGFueSB2YWx1ZSBvZiA6Ci0gICogICAgICAgICAgICAgICAgICAgICAgQHJlZiBEU0lfU0hPUlRfV1JJVEVfUEtUX0RhdGFfVHlwZQotICAqICAgICAgICAgICAgICAgICAgIG9yIEByZWYgRFNJX0xPTkdfV1JJVEVfUEtUX0RhdGFfVHlwZQotICAqICAgICAgICAgICAgICAgICAgIG9yIEByZWYgRFNJX1NIT1JUX1JFQURfUEtUX0RhdGFfVHlwZQotICAqICAgICAgICAgICAgICAgICAgIG9yIERTSV9NQVhfUkVUVVJOX1BLVF9TSVpFCisgICogICAgICAgICAgICAgICAgICAgICAgQGFyZyBEU0lfU0hPUlRfV1JJVEVfUEtUX0RhdGFfVHlwZQorICAqICAgICAgICAgICAgICAgICAgICAgIEBhcmcgRFNJX0xPTkdfV1JJVEVfUEtUX0RhdGFfVHlwZQorICAqICAgICAgICAgICAgICAgICAgICAgIEBhcmcgRFNJX1NIT1JUX1JFQURfUEtUX0RhdGFfVHlwZQorICAqICAgICAgICAgICAgICAgICAgICAgIEBhcmcgRFNJX01BWF9SRVRVUk5fUEtUX1NJWkUKICAgKiBAcGFyYW0gIERhdGEwICBXb3JkIGNvdW50IExTQgogICAqIEBwYXJhbSAgRGF0YTEgIFdvcmQgY291bnQgTVNCCiAgICogQHJldHZhbCBOb25lCkBAIC0yMTAsOSArMjM2LDkgQEAKICAgKiAgICAgICAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciB0aGUgRFNJLgogICAqIEBwYXJhbSAgQ2hhbm5lbElEICBWaXJ0dWFsIGNoYW5uZWwgSUQuCiAgICogQHBhcmFtICBNb2RlICBEU0kgc2hvcnQgcGFja2V0IGRhdGEgdHlwZS4KLSAgKiAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhbnkgdmFsdWUgb2YgQHJlZiBEU0lfU0hPUlRfV1JJVEVfUEtUX0RhdGFfVHlwZS4KKyAgKiAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhbnkgdmFsdWUgb2YgQGFyZyBEU0lfU0hPUlRfV1JJVEVfUEtUX0RhdGFfVHlwZS4KICAgKiBAcGFyYW0gIFBhcmFtMSAgRFNDIGNvbW1hbmQgb3IgZmlyc3QgZ2VuZXJpYyBwYXJhbWV0ZXIuCi0gICogICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhbnkgdmFsdWUgb2YgQHJlZiBEU0lfRENTX0NvbW1hbmQgb3IgYQorICAqICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYW55IHZhbHVlIG9mIEBhcmcgRFNJX0RDU19Db21tYW5kIG9yIGEKICAgKiAgICAgICAgICAgICAgICAgZ2VuZXJpYyBjb21tYW5kIGNvZGUuCiAgICogQHBhcmFtICBQYXJhbTIgIERTQyBwYXJhbWV0ZXIgb3Igc2Vjb25kIGdlbmVyaWMgcGFyYW1ldGVyLgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwpAQCAtNDY0LDcgKzQ5MCw3IEBACiAgICogQHBhcmFtICBoZHNpICBwb2ludGVyIHRvIGEgRFNJX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKICAgKiAgICAgICAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciB0aGUgRFNJLgogICAqIEBwYXJhbSAgQWN0aXZlRXJyb3JzICBpbmRpY2F0ZXMgd2hpY2ggZXJyb3IgaW50ZXJydXB0cyB3aWxsIGJlIGVuYWJsZWQuCi0gICogICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGFueSBjb21iaW5hdGlvbiBvZiBAcmVmIERTSV9FcnJvcl9EYXRhX1R5cGUuCisgICogICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGFueSBjb21iaW5hdGlvbiBvZiBAYXJnIERTSV9FcnJvcl9EYXRhX1R5cGUuCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfRFNJX0NvbmZpZ0Vycm9yTW9uaXRvcihEU0lfSGFuZGxlVHlwZURlZiAqaGRzaSwgdWludDMyX3QgQWN0aXZlRXJyb3JzKQpAQCAtNTgxLDExICs2MDcsMTEgQEAKICAgKiBAcGFyYW0gaGRzaSBkc2kgaGFuZGxlCiAgICogQHBhcmFtIENhbGxiYWNrSUQgSUQgb2YgdGhlIGNhbGxiYWNrIHRvIGJlIHJlZ2lzdGVyZWQKICAgKiAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKLSAgKiAgICAgICAgICBAYXJnIEByZWYgSEFMX0RTSV9URUFSSU5HX0VGRkVDVF9DQl9JRCBUZWFyaW5nIEVmZmVjdCBDYWxsYmFjayBJRAotICAqICAgICAgICAgIEBhcmcgQHJlZiBIQUxfRFNJX0VORE9GX1JFRlJFU0hfQ0JfSUQgRW5kIE9mIFJlZnJlc2ggQ2FsbGJhY2sgSUQKLSAgKiAgICAgICAgICBAYXJnIEByZWYgSEFMX0RTSV9FUlJPUl9DQl9JRCBFcnJvciBDYWxsYmFjayBJRAotICAqICAgICAgICAgIEBhcmcgQHJlZiBIQUxfRFNJX01TUElOSVRfQ0JfSUQgTXNwSW5pdCBjYWxsYmFjayBJRAotICAqICAgICAgICAgIEBhcmcgQHJlZiBIQUxfRFNJX01TUERFSU5JVF9DQl9JRCBNc3BEZUluaXQgY2FsbGJhY2sgSUQKKyAgKiAgICAgICAgICBAYXJnIEhBTF9EU0lfVEVBUklOR19FRkZFQ1RfQ0JfSUQgVGVhcmluZyBFZmZlY3QgQ2FsbGJhY2sgSUQKKyAgKiAgICAgICAgICBAYXJnIEhBTF9EU0lfRU5ET0ZfUkVGUkVTSF9DQl9JRCBFbmQgT2YgUmVmcmVzaCBDYWxsYmFjayBJRAorICAqICAgICAgICAgIEBhcmcgSEFMX0RTSV9FUlJPUl9DQl9JRCBFcnJvciBDYWxsYmFjayBJRAorICAqICAgICAgICAgIEBhcmcgSEFMX0RTSV9NU1BJTklUX0NCX0lEIE1zcEluaXQgY2FsbGJhY2sgSUQKKyAgKiAgICAgICAgICBAYXJnIEhBTF9EU0lfTVNQREVJTklUX0NCX0lEIE1zcERlSW5pdCBjYWxsYmFjayBJRAogICAqIEBwYXJhbSBwQ2FsbGJhY2sgcG9pbnRlciB0byB0aGUgQ2FsbGJhY2sgZnVuY3Rpb24KICAgKiBAcmV0dmFsIHN0YXR1cwogICAqLwpAQCAtNjc2LDExICs3MDIsMTEgQEAKICAgKiBAcGFyYW0gaGRzaSBkc2kgaGFuZGxlCiAgICogQHBhcmFtIENhbGxiYWNrSUQgSUQgb2YgdGhlIGNhbGxiYWNrIHRvIGJlIHVucmVnaXN0ZXJlZAogICAqICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgotICAqICAgICAgICAgIEBhcmcgQHJlZiBIQUxfRFNJX1RFQVJJTkdfRUZGRUNUX0NCX0lEIFRlYXJpbmcgRWZmZWN0IENhbGxiYWNrIElECi0gICogICAgICAgICAgQGFyZyBAcmVmIEhBTF9EU0lfRU5ET0ZfUkVGUkVTSF9DQl9JRCBFbmQgT2YgUmVmcmVzaCBDYWxsYmFjayBJRAotICAqICAgICAgICAgIEBhcmcgQHJlZiBIQUxfRFNJX0VSUk9SX0NCX0lEIEVycm9yIENhbGxiYWNrIElECi0gICogICAgICAgICAgQGFyZyBAcmVmIEhBTF9EU0lfTVNQSU5JVF9DQl9JRCBNc3BJbml0IGNhbGxiYWNrIElECi0gICogICAgICAgICAgQGFyZyBAcmVmIEhBTF9EU0lfTVNQREVJTklUX0NCX0lEIE1zcERlSW5pdCBjYWxsYmFjayBJRAorICAqICAgICAgICAgIEBhcmcgSEFMX0RTSV9URUFSSU5HX0VGRkVDVF9DQl9JRCBUZWFyaW5nIEVmZmVjdCBDYWxsYmFjayBJRAorICAqICAgICAgICAgIEBhcmcgSEFMX0RTSV9FTkRPRl9SRUZSRVNIX0NCX0lEIEVuZCBPZiBSZWZyZXNoIENhbGxiYWNrIElECisgICogICAgICAgICAgQGFyZyBIQUxfRFNJX0VSUk9SX0NCX0lEIEVycm9yIENhbGxiYWNrIElECisgICogICAgICAgICAgQGFyZyBIQUxfRFNJX01TUElOSVRfQ0JfSUQgTXNwSW5pdCBjYWxsYmFjayBJRAorICAqICAgICAgICAgIEBhcmcgSEFMX0RTSV9NU1BERUlOSVRfQ0JfSUQgTXNwRGVJbml0IGNhbGxiYWNrIElECiAgICogQHJldHZhbCBzdGF0dXMKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9EU0lfVW5SZWdpc3RlckNhbGxiYWNrKERTSV9IYW5kbGVUeXBlRGVmICpoZHNpLCBIQUxfRFNJX0NhbGxiYWNrSURUeXBlRGVmIENhbGxiYWNrSUQpCkBAIC0xMjk1LDcgKzEzMjEsNyBAQAogICAqIEBwYXJhbSAgaGRzaSAgcG9pbnRlciB0byBhIERTSV9IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCiAgICogICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIERTSS4KICAgKiBAcGFyYW0gIEZsb3dDb250cm9sICBmbG93IGNvbnRyb2wgZmVhdHVyZShzKSB0byBiZSBlbmFibGVkLgotICAqICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhbnkgY29tYmluYXRpb24gb2YgQHJlZiBEU0lfRmxvd0NvbnRyb2wuCisgICogICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGFueSBjb21iaW5hdGlvbiBvZiBAYXJnIERTSV9GbG93Q29udHJvbC4KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9EU0lfQ29uZmlnRmxvd0NvbnRyb2woRFNJX0hhbmRsZVR5cGVEZWYgKmhkc2ksIHVpbnQzMl90IEZsb3dDb250cm9sKQpAQCAtMTQ4OCw3ICsxNTE0LDcgQEAKICAgKiBAcGFyYW0gIGhkc2kgIHBvaW50ZXIgdG8gYSBEU0lfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucwogICAqICAgICAgICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIHRoZSBEU0kuCiAgICogQHBhcmFtICBDb2xvck1vZGUgIENvbG9yIG1vZGUgKGZ1bGwgb3IgOC1jb2xvcnMpLgotICAqICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYW55IHZhbHVlIG9mIEByZWYgRFNJX0NvbG9yX01vZGUKKyAgKiAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGFueSB2YWx1ZSBvZiBAYXJnIERTSV9Db2xvcl9Nb2RlCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfRFNJX0NvbG9yTW9kZShEU0lfSGFuZGxlVHlwZURlZiAqaGRzaSwgdWludDMyX3QgQ29sb3JNb2RlKQpAQCAtMTUxNCw3ICsxNTQwLDcgQEAKICAgKiBAcGFyYW0gIGhkc2kgIHBvaW50ZXIgdG8gYSBEU0lfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucwogICAqICAgICAgICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIHRoZSBEU0kuCiAgICogQHBhcmFtICBTaHV0ZG93biAgU2h1dC1kb3duIChEaXNwbGF5LU9OIG9yIERpc3BsYXktT0ZGKS4KLSAgKiAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYW55IHZhbHVlIG9mIEByZWYgRFNJX1NodXREb3duCisgICogICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGFueSB2YWx1ZSBvZiBAYXJnIERTSV9TaHV0RG93bgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0RTSV9TaHV0ZG93bihEU0lfSGFuZGxlVHlwZURlZiAqaGRzaSwgdWludDMyX3QgU2h1dGRvd24pCkBAIC0xNTQxLDkgKzE1NjcsOSBAQAogICAqICAgICAgICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIHRoZSBEU0kuCiAgICogQHBhcmFtICBDaGFubmVsSUQgIFZpcnR1YWwgY2hhbm5lbCBJRC4KICAgKiBAcGFyYW0gIE1vZGUgIERTSSBzaG9ydCBwYWNrZXQgZGF0YSB0eXBlLgotICAqICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGFueSB2YWx1ZSBvZiBAcmVmIERTSV9TSE9SVF9XUklURV9QS1RfRGF0YV9UeXBlLgorICAqICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGFueSB2YWx1ZSBvZiBAYXJnIERTSV9TSE9SVF9XUklURV9QS1RfRGF0YV9UeXBlLgogICAqIEBwYXJhbSAgUGFyYW0xICBEU0MgY29tbWFuZCBvciBmaXJzdCBnZW5lcmljIHBhcmFtZXRlci4KLSAgKiAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGFueSB2YWx1ZSBvZiBAcmVmIERTSV9EQ1NfQ29tbWFuZCBvciBhCisgICogICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhbnkgdmFsdWUgb2YgQGFyZyBEU0lfRENTX0NvbW1hbmQgb3IgYQogICAqICAgICAgICAgICAgICAgICBnZW5lcmljIGNvbW1hbmQgY29kZS4KICAgKiBAcGFyYW0gIFBhcmFtMiAgRFNDIHBhcmFtZXRlciBvciBzZWNvbmQgZ2VuZXJpYyBwYXJhbWV0ZXIuCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCkBAIC0xNTc1LDEwICsxNjAxLDEwIEBACiAgICogICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIERTSS4KICAgKiBAcGFyYW0gIENoYW5uZWxJRCAgVmlydHVhbCBjaGFubmVsIElELgogICAqIEBwYXJhbSAgTW9kZSAgRFNJIGxvbmcgcGFja2V0IGRhdGEgdHlwZS4KLSAgKiAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhbnkgdmFsdWUgb2YgQHJlZiBEU0lfTE9OR19XUklURV9QS1RfRGF0YV9UeXBlLgorICAqICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGFueSB2YWx1ZSBvZiBAYXJnIERTSV9MT05HX1dSSVRFX1BLVF9EYXRhX1R5cGUuCiAgICogQHBhcmFtICBOYlBhcmFtcyAgTnVtYmVyIG9mIHBhcmFtZXRlcnMuCiAgICogQHBhcmFtICBQYXJhbTEgIERTQyBjb21tYW5kIG9yIGZpcnN0IGdlbmVyaWMgcGFyYW1ldGVyLgotICAqICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYW55IHZhbHVlIG9mIEByZWYgRFNJX0RDU19Db21tYW5kIG9yIGEKKyAgKiAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGFueSB2YWx1ZSBvZiBAYXJnIERTSV9EQ1NfQ29tbWFuZCBvciBhCiAgICogICAgICAgICAgICAgICAgIGdlbmVyaWMgY29tbWFuZCBjb2RlCiAgICogQHBhcmFtICBQYXJhbWV0ZXJzVGFibGUgIFBvaW50ZXIgdG8gcGFyYW1ldGVyIHZhbHVlcyB0YWJsZS4KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKQEAgLTE2NjUsNyArMTY5MSw3IEBACiAgICogQHBhcmFtICBBcnJheSBwb2ludGVyIHRvIGEgYnVmZmVyIHRvIHN0b3JlIHRoZSBwYXlsb2FkIG9mIGEgcmVhZCBiYWNrIG9wZXJhdGlvbi4KICAgKiBAcGFyYW0gIFNpemUgIERhdGEgc2l6ZSB0byBiZSByZWFkIChpbiBieXRlKS4KICAgKiBAcGFyYW0gIE1vZGUgIERTSSByZWFkIHBhY2tldCBkYXRhIHR5cGUuCi0gICogICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYW55IHZhbHVlIG9mIEByZWYgRFNJX1NIT1JUX1JFQURfUEtUX0RhdGFfVHlwZS4KKyAgKiAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhbnkgdmFsdWUgb2YgQGFyZyBEU0lfU0hPUlRfUkVBRF9QS1RfRGF0YV9UeXBlLgogICAqIEBwYXJhbSAgRENTQ21kICBEQ1MgZ2V0L3JlYWQgY29tbWFuZC4KICAgKiBAcGFyYW0gIFBhcmFtZXRlcnNUYWJsZSAgUG9pbnRlciB0byBwYXJhbWV0ZXIgdmFsdWVzIHRhYmxlLgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwpAQCAtMjEyMCw5ICsyMTQ2LDkgQEAKICAgKiBAcGFyYW0gIGhkc2kgIHBvaW50ZXIgdG8gYSBEU0lfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucwogICAqICAgICAgICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIHRoZSBEU0kuCiAgICogQHBhcmFtICBDb21tRGVsYXkgIENvbW11bmljYXRpb24gZGVsYXkgdG8gYmUgYWRqdXN0ZWQuCi0gICogICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhbnkgdmFsdWUgb2YgQHJlZiBEU0lfQ29tbXVuaWNhdGlvbl9EZWxheQorICAqICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYW55IHZhbHVlIG9mIEBhcmcgRFNJX0NvbW11bmljYXRpb25fRGVsYXkKICAgKiBAcGFyYW0gIExhbmUgIHNlbGVjdCBiZXR3ZWVuIGNsb2NrIG9yIGRhdGEgbGFuZXMuCi0gICogICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYW55IHZhbHVlIG9mIEByZWYgRFNJX0xhbmVfR3JvdXAKKyAgKiAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhbnkgdmFsdWUgb2YgQGFyZyBEU0lfTGFuZV9Hcm91cAogICAqIEBwYXJhbSAgVmFsdWUgIEN1c3RvbSB2YWx1ZSBvZiB0aGUgc2xldy1yYXRlIG9yIGRlbGF5CiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCkBAIC0yMjY0LDkgKzIyOTAsOSBAQAogICAqIEBwYXJhbSAgaGRzaSAgcG9pbnRlciB0byBhIERTSV9IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCiAgICogICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIERTSS4KICAgKiBAcGFyYW0gIEN1c3RvbUxhbmUgIEZ1bmN0aW9uIHRvIGJlIGFwcGx5ZWQgb24gc2VsZWN0ZWQgbGFuZS4KLSAgKiAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhbnkgdmFsdWUgb2YgQHJlZiBEU0lfQ3VzdG9tTGFuZQorICAqICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGFueSB2YWx1ZSBvZiBAYXJnIERTSV9DdXN0b21MYW5lCiAgICogQHBhcmFtICBMYW5lICBzZWxlY3QgYmV0d2VlbiBjbG9jayBvciBkYXRhIGxhbmUgMCBvciBkYXRhIGxhbmUgMS4KLSAgKiAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhbnkgdmFsdWUgb2YgQHJlZiBEU0lfTGFuZV9TZWxlY3QKKyAgKiAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhbnkgdmFsdWUgb2YgQGFyZyBEU0lfTGFuZV9TZWxlY3QKICAgKiBAcGFyYW0gIFN0YXRlICBFTkFCTEUgb3IgRElTQUJMRQogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwpAQCAtMjM1Miw3ICsyMzc4LDcgQEAKICAgKiBAcGFyYW0gIGhkc2kgIHBvaW50ZXIgdG8gYSBEU0lfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucwogICAqICAgICAgICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIHRoZSBEU0kuCiAgICogQHBhcmFtICBUaW1pbmcgIFBIWSB0aW1pbmcgdG8gYmUgYWRqdXN0ZWQuCi0gICogICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhbnkgdmFsdWUgb2YgQHJlZiBEU0lfUEhZX1RpbWluZworICAqICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYW55IHZhbHVlIG9mIEBhcmcgRFNJX1BIWV9UaW1pbmcKICAgKiBAcGFyYW0gIFN0YXRlICBFTkFCTEUgb3IgRElTQUJMRQogICAqIEBwYXJhbSAgVmFsdWUgIEN1c3RvbSB2YWx1ZSBvZiB0aGUgdGltaW5nCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCkBAIC0yNTAwLDcgKzI1MjYsNyBAQAogICAqIEBwYXJhbSAgaGRzaSAgcG9pbnRlciB0byBhIERTSV9IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCiAgICogICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIERTSS4KICAgKiBAcGFyYW0gIExhbmUgIHNlbGVjdCBiZXR3ZWVuIGNsb2NrIG9yIGRhdGEgbGFuZXMuCi0gICogICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYW55IHZhbHVlIG9mIEByZWYgRFNJX0xhbmVfR3JvdXAKKyAgKiAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhbnkgdmFsdWUgb2YgQGFyZyBEU0lfTGFuZV9Hcm91cAogICAqIEBwYXJhbSAgU3RhdGUgIEVOQUJMRSBvciBESVNBQkxFCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmNHh4X2hhbF9leHRpLmMgYi9TcmMvc3RtMzJmNHh4X2hhbF9leHRpLmMKaW5kZXggYTg2OTkwNi4uN2NmM2UwOSAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZjR4eF9oYWxfZXh0aS5jCisrKyBiL1NyYy9zdG0zMmY0eHhfaGFsX2V4dGkuYwpAQCAtNDUsNiArNDUsOCBAQAogICAgICAgICAgICAgIEVYVElfQ29uZmlnVHlwZURlZiBzdHJ1Y3R1cmUuCiAgICAgICAgICgrKykgRm9yIGNvbmZpZ3VyYWJsZSBsaW5lcywgY29uZmlndXJlIHJpc2luZyBhbmQvb3IgZmFsbGluZyB0cmlnZ2VyCiAgICAgICAgICAgICAgIlRyaWdnZXIiIG1lbWJlciBmcm9tIEVYVElfQ29uZmlnVHlwZURlZiBzdHJ1Y3R1cmUuCisgICAgICAgICgrKykgRm9yIEV4dGkgbGluZXMgbGlua2VkIHRvIGdwaW8sIGNob29zZSBncGlvIHBvcnQgdXNpbmcgIkdQSU9TZWwiCisgICAgICAgICAgICAgbWVtYmVyIGZyb20gR1BJT19Jbml0VHlwZURlZiBzdHJ1Y3R1cmUuCiAKICAgICAoIykgR2V0IGN1cnJlbnQgRXh0aSBjb25maWd1cmF0aW9uIG9mIGEgZGVkaWNhdGVkIGxpbmUgdXNpbmcKICAgICAgICAgSEFMX0VYVElfR2V0Q29uZmlnTGluZSgpLgpAQCAtMTQxLDYgKzE0Myw4IEBACiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfRVhUSV9TZXRDb25maWdMaW5lKEVYVElfSGFuZGxlVHlwZURlZiAqaGV4dGksIEVYVElfQ29uZmlnVHlwZURlZiAqcEV4dGlDb25maWcpCiB7CiAgIHVpbnQzMl90IHJlZ3ZhbDsKKyAgdWludDMyX3QgbGluZXBvczsKKyAgdWludDMyX3QgbWFza2xpbmU7CiAKICAgLyogQ2hlY2sgbnVsbCBwb2ludGVyICovCiAgIGlmICgoaGV4dGkgPT0gTlVMTCkgfHwgKHBFeHRpQ29uZmlnID09IE5VTEwpKQpAQCAtMTUxLDM3ICsxNTUsNzcgQEAKICAgLyogQ2hlY2sgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfRVhUSV9MSU5FKHBFeHRpQ29uZmlnLT5MaW5lKSk7CiAgIGFzc2VydF9wYXJhbShJU19FWFRJX01PREUocEV4dGlDb25maWctPk1vZGUpKTsKLSAgYXNzZXJ0X3BhcmFtKElTX0VYVElfVFJJR0dFUihwRXh0aUNvbmZpZy0+VHJpZ2dlcikpOwogCiAgIC8qIEFzc2lnbiBsaW5lIG51bWJlciB0byBoYW5kbGUgKi8KICAgaGV4dGktPkxpbmUgPSBwRXh0aUNvbmZpZy0+TGluZTsKIAotICAvKiBDbGVhciBFWFRJIGxpbmUgY29uZmlndXJhdGlvbiAqLwotICBFWFRJLT5JTVIgJj0gfnBFeHRpQ29uZmlnLT5MaW5lOwotICBFWFRJLT5FTVIgJj0gfnBFeHRpQ29uZmlnLT5MaW5lOworICAvKiBDb21wdXRlIGxpbmUgbWFzayAqLworICBsaW5lcG9zID0gKHBFeHRpQ29uZmlnLT5MaW5lICYgRVhUSV9QSU5fTUFTSyk7CisgIG1hc2tsaW5lID0gKDF1TCA8PCBsaW5lcG9zKTsKIAotICAvKiBTZWxlY3QgdGhlIE1vZGUgZm9yIHRoZSBzZWxlY3RlZCBleHRlcm5hbCBpbnRlcnJ1cHRzICovCi0gIHJlZ3ZhbCA9ICh1aW50MzJfdClFWFRJX0JBU0U7Ci0gIHJlZ3ZhbCArPSBwRXh0aUNvbmZpZy0+TW9kZTsKLSAgKihfX0lPIHVpbnQzMl90ICopIHJlZ3ZhbCB8PSBwRXh0aUNvbmZpZy0+TGluZTsKLQotICAvKiBDbGVhciBSaXNpbmcgRmFsbGluZyBlZGdlIGNvbmZpZ3VyYXRpb24gKi8KLSAgRVhUSS0+UlRTUiAmPSB+cEV4dGlDb25maWctPkxpbmU7Ci0gIEVYVEktPkZUU1IgJj0gfnBFeHRpQ29uZmlnLT5MaW5lOwotCi0gIC8qIFNlbGVjdCB0aGUgdHJpZ2dlciBmb3IgdGhlIHNlbGVjdGVkIGV4dGVybmFsIGludGVycnVwdHMgKi8KLSAgaWYgKHBFeHRpQ29uZmlnLT5UcmlnZ2VyID09IEVYVElfVFJJR0dFUl9SSVNJTkdfRkFMTElORykKKyAgLyogQ29uZmlndXJlIHRyaWdnZXJzIGZvciBjb25maWd1cmFibGUgbGluZXMgKi8KKyAgaWYgKChwRXh0aUNvbmZpZy0+TGluZSAmIEVYVElfQ09ORklHKSAhPSAweDAwdSkKICAgewotICAgIC8qIFJpc2luZyBGYWxsaW5nIGVkZ2UgKi8KLSAgICBFWFRJLT5SVFNSIHw9IHBFeHRpQ29uZmlnLT5MaW5lOwotICAgIEVYVEktPkZUU1IgfD0gcEV4dGlDb25maWctPkxpbmU7CisgICAgYXNzZXJ0X3BhcmFtKElTX0VYVElfVFJJR0dFUihwRXh0aUNvbmZpZy0+VHJpZ2dlcikpOworCisgICAgLyogQ29uZmlndXJlIHJpc2luZyB0cmlnZ2VyICovCisgICAgLyogTWFzayBvciBzZXQgbGluZSAqLworICAgIGlmICgocEV4dGlDb25maWctPlRyaWdnZXIgJiBFWFRJX1RSSUdHRVJfUklTSU5HKSAhPSAweDAwdSkKKyAgICB7CisgICAgICBFWFRJLT5SVFNSIHw9IG1hc2tsaW5lOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgRVhUSS0+UlRTUiAmPSB+bWFza2xpbmU7CisgICAgfQorCisgICAgLyogQ29uZmlndXJlIGZhbGxpbmcgdHJpZ2dlciAqLworICAgIC8qIE1hc2sgb3Igc2V0IGxpbmUgKi8KKyAgICBpZiAoKHBFeHRpQ29uZmlnLT5UcmlnZ2VyICYgRVhUSV9UUklHR0VSX0ZBTExJTkcpICE9IDB4MDB1KQorICAgIHsKKyAgICAgIEVYVEktPkZUU1IgfD0gbWFza2xpbmU7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICBFWFRJLT5GVFNSICY9IH5tYXNrbGluZTsKKyAgICB9CisKKworICAgIC8qIENvbmZpZ3VyZSBncGlvIHBvcnQgc2VsZWN0aW9uIGluIGNhc2Ugb2YgZ3BpbyBleHRpIGxpbmUgKi8KKyAgICBpZiAoKHBFeHRpQ29uZmlnLT5MaW5lICYgRVhUSV9HUElPKSA9PSBFWFRJX0dQSU8pCisgICAgeworICAgICAgYXNzZXJ0X3BhcmFtKElTX0VYVElfR1BJT19QT1JUKHBFeHRpQ29uZmlnLT5HUElPU2VsKSk7CisgICAgICBhc3NlcnRfcGFyYW0oSVNfRVhUSV9HUElPX1BJTihsaW5lcG9zKSk7CisKKyAgICAgIHJlZ3ZhbCA9IFNZU0NGRy0+RVhUSUNSW2xpbmVwb3MgPj4gMnVdOworICAgICAgcmVndmFsICY9IH4oU1lTQ0ZHX0VYVElDUjFfRVhUSTAgPDwgKFNZU0NGR19FWFRJQ1IxX0VYVEkxX1BvcyAqIChsaW5lcG9zICYgMHgwM3UpKSk7CisgICAgICByZWd2YWwgfD0gKHBFeHRpQ29uZmlnLT5HUElPU2VsIDw8IChTWVNDRkdfRVhUSUNSMV9FWFRJMV9Qb3MgKiAobGluZXBvcyAmIDB4MDN1KSkpOworICAgICAgU1lTQ0ZHLT5FWFRJQ1JbbGluZXBvcyA+PiAydV0gPSByZWd2YWw7CisgICAgfQorICB9CisKKyAgLyogQ29uZmlndXJlIGludGVycnVwdCBtb2RlIDogcmVhZCBjdXJyZW50IG1vZGUgKi8KKyAgLyogTWFzayBvciBzZXQgbGluZSAqLworICBpZiAoKHBFeHRpQ29uZmlnLT5Nb2RlICYgRVhUSV9NT0RFX0lOVEVSUlVQVCkgIT0gMHgwMHUpCisgIHsKKyAgICBFWFRJLT5JTVIgfD0gbWFza2xpbmU7CiAgIH0KICAgZWxzZQogICB7Ci0gICAgcmVndmFsID0gKHVpbnQzMl90KUVYVElfQkFTRTsKLSAgICByZWd2YWwgKz0gcEV4dGlDb25maWctPlRyaWdnZXI7Ci0gICAgKihfX0lPIHVpbnQzMl90ICopIHJlZ3ZhbCB8PSBwRXh0aUNvbmZpZy0+TGluZTsKKyAgICBFWFRJLT5JTVIgJj0gfm1hc2tsaW5lOwogICB9CisKKyAgLyogQ29uZmlndXJlIGV2ZW50IG1vZGUgOiByZWFkIGN1cnJlbnQgbW9kZSAqLworICAvKiBNYXNrIG9yIHNldCBsaW5lICovCisgIGlmICgocEV4dGlDb25maWctPk1vZGUgJiBFWFRJX01PREVfRVZFTlQpICE9IDB4MDB1KQorICB7CisgICAgRVhUSS0+RU1SIHw9IG1hc2tsaW5lOworICB9CisgIGVsc2UKKyAgeworICAgIEVYVEktPkVNUiAmPSB+bWFza2xpbmU7CisgIH0KKwogICByZXR1cm4gSEFMX09LOwogfQogCkBAIC0xOTMsNiArMjM3LDEwIEBACiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfRVhUSV9HZXRDb25maWdMaW5lKEVYVElfSGFuZGxlVHlwZURlZiAqaGV4dGksIEVYVElfQ29uZmlnVHlwZURlZiAqcEV4dGlDb25maWcpCiB7CisgIHVpbnQzMl90IHJlZ3ZhbDsKKyAgdWludDMyX3QgbGluZXBvczsKKyAgdWludDMyX3QgbWFza2xpbmU7CisKICAgLyogQ2hlY2sgbnVsbCBwb2ludGVyICovCiAgIGlmICgoaGV4dGkgPT0gTlVMTCkgfHwgKHBFeHRpQ29uZmlnID09IE5VTEwpKQogICB7CkBAIC0yMDUsNDEgKzI1Myw2NyBAQAogICAvKiBTdG9yZSBoYW5kbGUgbGluZSBudW1iZXIgdG8gY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgKi8KICAgcEV4dGlDb25maWctPkxpbmUgPSBoZXh0aS0+TGluZTsKIAotICAvKiBHZXQgRVhUSSBtb2RlIHRvIGNvbmZpZ2lndXJhdGlvbiBzdHJ1Y3R1cmUgKi8KLSAgaWYgKChFWFRJLT5JTVIgJiBoZXh0aS0+TGluZSkgPT0gaGV4dGktPkxpbmUpCisgIC8qIENvbXB1dGUgbGluZSBtYXNrICovCisgIGxpbmVwb3MgPSAocEV4dGlDb25maWctPkxpbmUgJiBFWFRJX1BJTl9NQVNLKTsKKyAgbWFza2xpbmUgPSAoMXVMIDw8IGxpbmVwb3MpOworCisgIC8qIDFdIEdldCBjb3JlIG1vZGUgOiBpbnRlcnJ1cHQgKi8KKworICAvKiBDaGVjayBpZiBzZWxlY3RlZCBsaW5lIGlzIGVuYWJsZSAqLworICBpZiAoKEVYVEktPklNUiAmIG1hc2tsaW5lKSAhPSAweDAwdSkKICAgewogICAgIHBFeHRpQ29uZmlnLT5Nb2RlID0gRVhUSV9NT0RFX0lOVEVSUlVQVDsKICAgfQotICBlbHNlIGlmICgoRVhUSS0+RU1SICYgaGV4dGktPkxpbmUpID09IGhleHRpLT5MaW5lKQotICB7Ci0gICAgcEV4dGlDb25maWctPk1vZGUgPSBFWFRJX01PREVfRVZFTlQ7Ci0gIH0KICAgZWxzZQogICB7Ci0gICAgLyogTm8gTU9ERSBzZWxlY3RlZCAqLwotICAgIHBFeHRpQ29uZmlnLT5Nb2RlID0gMHgwQnU7CisgICAgcEV4dGlDb25maWctPk1vZGUgPSBFWFRJX01PREVfTk9ORTsKICAgfQogCi0gIC8qIEdldCBFWFRJIFRyaWdnZXIgdG8gY29uZmlnaWd1cmF0aW9uIHN0cnVjdHVyZSAqLwotICBpZiAoKEVYVEktPlJUU1IgJiBoZXh0aS0+TGluZSkgPT0gaGV4dGktPkxpbmUpCisgIC8qIEdldCBldmVudCBtb2RlICovCisgIC8qIENoZWNrIGlmIHNlbGVjdGVkIGxpbmUgaXMgZW5hYmxlICovCisgIGlmICgoRVhUSS0+RU1SICYgbWFza2xpbmUpICE9IDB4MDB1KQogICB7Ci0gICAgaWYgKChFWFRJLT5GVFNSICYgaGV4dGktPkxpbmUpID09IGhleHRpLT5MaW5lKQotICAgIHsKLSAgICAgIHBFeHRpQ29uZmlnLT5UcmlnZ2VyID0gRVhUSV9UUklHR0VSX1JJU0lOR19GQUxMSU5HOwotICAgIH0KLSAgICBlbHNlCisgICAgcEV4dGlDb25maWctPk1vZGUgfD0gRVhUSV9NT0RFX0VWRU5UOworICB9CisKKyAgLyogMl0gR2V0IHRyaWdnZXIgZm9yIGNvbmZpZ3VyYWJsZSBsaW5lcyA6IHJpc2luZyAqLworICBpZiAoKHBFeHRpQ29uZmlnLT5MaW5lICYgRVhUSV9DT05GSUcpICE9IDB4MDB1KQorICB7CisgICAgLyogQ2hlY2sgaWYgY29uZmlndXJhdGlvbiBvZiBzZWxlY3RlZCBsaW5lIGlzIGVuYWJsZSAqLworICAgIGlmICgoRVhUSS0+UlRTUiAmIG1hc2tsaW5lKSAhPSAweDAwdSkKICAgICB7CiAgICAgICBwRXh0aUNvbmZpZy0+VHJpZ2dlciA9IEVYVElfVFJJR0dFUl9SSVNJTkc7CiAgICAgfQotICB9Ci0gIGVsc2UgaWYgKChFWFRJLT5GVFNSICYgaGV4dGktPkxpbmUpID09IGhleHRpLT5MaW5lKQotICB7Ci0gICAgcEV4dGlDb25maWctPlRyaWdnZXIgPSBFWFRJX1RSSUdHRVJfRkFMTElORzsKKyAgICBlbHNlCisgICAgeworICAgICAgcEV4dGlDb25maWctPlRyaWdnZXIgPSBFWFRJX1RSSUdHRVJfTk9ORTsKKyAgICB9CisKKyAgICAvKiBHZXQgZmFsbGluZyBjb25maWd1cmF0aW9uICovCisgICAgLyogQ2hlY2sgaWYgY29uZmlndXJhdGlvbiBvZiBzZWxlY3RlZCBsaW5lIGlzIGVuYWJsZSAqLworICAgIGlmICgoRVhUSS0+RlRTUiAmIG1hc2tsaW5lKSAhPSAweDAwdSkKKyAgICB7CisgICAgICBwRXh0aUNvbmZpZy0+VHJpZ2dlciB8PSBFWFRJX1RSSUdHRVJfRkFMTElORzsKKyAgICB9CisKKyAgICAvKiBHZXQgR3BpbyBwb3J0IHNlbGVjdGlvbiBmb3IgZ3BpbyBsaW5lcyAqLworICAgIGlmICgocEV4dGlDb25maWctPkxpbmUgJiBFWFRJX0dQSU8pID09IEVYVElfR1BJTykKKyAgICB7CisgICAgICBhc3NlcnRfcGFyYW0oSVNfRVhUSV9HUElPX1BJTihsaW5lcG9zKSk7CisKKyAgICAgIHJlZ3ZhbCA9IFNZU0NGRy0+RVhUSUNSW2xpbmVwb3MgPj4gMnVdOworICAgICAgcEV4dGlDb25maWctPkdQSU9TZWwgPSAoKHJlZ3ZhbCA8PCAoU1lTQ0ZHX0VYVElDUjFfRVhUSTFfUG9zICogKDN1TCAtIChsaW5lcG9zICYgMHgwM3UpKSkpID4+IDI0KTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIHBFeHRpQ29uZmlnLT5HUElPU2VsID0gMHgwMHU7CisgICAgfQogICB9CiAgIGVsc2UKICAgewogICAgIC8qIE5vIFRyaWdnZXIgc2VsZWN0ZWQgKi8KLSAgICBwRXh0aUNvbmZpZy0+VHJpZ2dlciA9IDB4MDB1OworICAgIHBFeHRpQ29uZmlnLT5UcmlnZ2VyID0gRVhUSV9UUklHR0VSX05PTkU7CisgICAgcEV4dGlDb25maWctPkdQSU9TZWwgPSAweDAwdTsKICAgfQogCiAgIHJldHVybiBIQUxfT0s7CkBAIC0yNTIsNiArMzI2LDEwIEBACiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfRVhUSV9DbGVhckNvbmZpZ0xpbmUoRVhUSV9IYW5kbGVUeXBlRGVmICpoZXh0aSkKIHsKKyAgdWludDMyX3QgcmVndmFsOworICB1aW50MzJfdCBsaW5lcG9zOworICB1aW50MzJfdCBtYXNrbGluZTsKKwogICAvKiBDaGVjayBudWxsIHBvaW50ZXIgKi8KICAgaWYgKGhleHRpID09IE5VTEwpCiAgIHsKQEAgLTI2MSwxNSArMzM5LDMyIEBACiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXIgKi8KICAgYXNzZXJ0X3BhcmFtKElTX0VYVElfTElORShoZXh0aS0+TGluZSkpOwogCisgIC8qIGNvbXB1dGUgbGluZSBtYXNrICovCisgIGxpbmVwb3MgPSAoaGV4dGktPkxpbmUgJiBFWFRJX1BJTl9NQVNLKTsKKyAgbWFza2xpbmUgPSAoMXVMIDw8IGxpbmVwb3MpOworCiAgIC8qIDFdIENsZWFyIGludGVycnVwdCBtb2RlICovCi0gIEVYVEktPklNUiA9IChFWFRJLT5JTVIgJiB+aGV4dGktPkxpbmUpOworICBFWFRJLT5JTVIgPSAoRVhUSS0+SU1SICYgfm1hc2tsaW5lKTsKIAogICAvKiAyXSBDbGVhciBldmVudCBtb2RlICovCi0gIEVYVEktPkVNUiA9IChFWFRJLT5FTVIgJiB+aGV4dGktPkxpbmUpOworICBFWFRJLT5FTVIgPSAoRVhUSS0+RU1SICYgfm1hc2tsaW5lKTsKIAotICAvKiAzXSBDbGVhciB0cmlnZ2VycyAqLwotICBFWFRJLT5SVFNSID0gKEVYVEktPlJUU1IgJiB+aGV4dGktPkxpbmUpOwotICBFWFRJLT5GVFNSID0gKEVYVEktPkZUU1IgJiB+aGV4dGktPkxpbmUpOworICAvKiAzXSBDbGVhciB0cmlnZ2VycyBpbiBjYXNlIG9mIGNvbmZpZ3VyYWJsZSBsaW5lcyAqLworICBpZiAoKGhleHRpLT5MaW5lICYgRVhUSV9DT05GSUcpICE9IDB4MDB1KQorICB7CisgICAgRVhUSS0+UlRTUiA9IChFWFRJLT5SVFNSICYgfm1hc2tsaW5lKTsKKyAgICBFWFRJLT5GVFNSID0gKEVYVEktPkZUU1IgJiB+bWFza2xpbmUpOworCisgICAgLyogR2V0IEdwaW8gcG9ydCBzZWxlY3Rpb24gZm9yIGdwaW8gbGluZXMgKi8KKyAgICBpZiAoKGhleHRpLT5MaW5lICYgRVhUSV9HUElPKSA9PSBFWFRJX0dQSU8pCisgICAgeworICAgICAgYXNzZXJ0X3BhcmFtKElTX0VYVElfR1BJT19QSU4obGluZXBvcykpOworCisgICAgICByZWd2YWwgPSBTWVNDRkctPkVYVElDUltsaW5lcG9zID4+IDJ1XTsKKyAgICAgIHJlZ3ZhbCAmPSB+KFNZU0NGR19FWFRJQ1IxX0VYVEkwIDw8IChTWVNDRkdfRVhUSUNSMV9FWFRJMV9Qb3MgKiAobGluZXBvcyAmIDB4MDN1KSkpOworICAgICAgU1lTQ0ZHLT5FWFRJQ1JbbGluZXBvcyA+PiAydV0gPSByZWd2YWw7CisgICAgfQorICB9CiAKICAgcmV0dXJuIEhBTF9PSzsKIH0KQEAgLTI4OSw3ICszODQsNyBAQAogICBzd2l0Y2ggKENhbGxiYWNrSUQpCiAgIHsKICAgICBjYXNlICBIQUxfRVhUSV9DT01NT05fQ0JfSUQ6Ci0gICAgICBoZXh0aS0+UmlzaW5nQ2FsbGJhY2sgPSBwUGVuZGluZ0NiZm47CisgICAgICBoZXh0aS0+UGVuZGluZ0NhbGxiYWNrID0gcFBlbmRpbmdDYmZuOwogICAgICAgYnJlYWs7CiAKICAgICBkZWZhdWx0OgpAQCAtMzQ5LDE1ICs0NDQsMjMgQEAKICAgKi8KIHZvaWQgSEFMX0VYVElfSVJRSGFuZGxlcihFWFRJX0hhbmRsZVR5cGVEZWYgKmhleHRpKQogewotICBpZiAoRVhUSS0+UFIgIT0gMHgwMHUpCisgIHVpbnQzMl90IHJlZ3ZhbDsKKyAgdWludDMyX3QgbWFza2xpbmU7CisKKyAgLyogQ29tcHV0ZSBsaW5lIG1hc2sgKi8KKyAgbWFza2xpbmUgPSAoMXVMIDw8IChoZXh0aS0+TGluZSAmIEVYVElfUElOX01BU0spKTsKKworICAvKiBHZXQgcGVuZGluZyBiaXQgICovCisgIHJlZ3ZhbCA9IChFWFRJLT5QUiAmIG1hc2tsaW5lKTsKKyAgaWYgKHJlZ3ZhbCAhPSAweDAwdSkKICAgewogICAgIC8qIENsZWFyIHBlbmRpbmcgYml0ICovCi0gICAgRVhUSS0+UFIgPSBoZXh0aS0+TGluZTsKKyAgICBFWFRJLT5QUiA9IG1hc2tsaW5lOwogCiAgICAgLyogQ2FsbCBjYWxsYmFjayAqLwotICAgIGlmIChoZXh0aS0+UmlzaW5nQ2FsbGJhY2sgIT0gTlVMTCkKKyAgICBpZiAoaGV4dGktPlBlbmRpbmdDYWxsYmFjayAhPSBOVUxMKQogICAgIHsKLSAgICAgIGhleHRpLT5SaXNpbmdDYWxsYmFjaygpOworICAgICAgaGV4dGktPlBlbmRpbmdDYWxsYmFjaygpOwogICAgIH0KICAgfQogfQpAQCAtMzczLDE5ICs0NzYsMjEgQEAKICAgKi8KIHVpbnQzMl90IEhBTF9FWFRJX0dldFBlbmRpbmcoRVhUSV9IYW5kbGVUeXBlRGVmICpoZXh0aSwgdWludDMyX3QgRWRnZSkKIHsKLSAgX19JTyB1aW50MzJfdCAqcmVnYWRkcjsKICAgdWludDMyX3QgcmVndmFsOworICB1aW50MzJfdCBsaW5lcG9zOworICB1aW50MzJfdCBtYXNrbGluZTsKIAogICAvKiBDaGVjayBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19FWFRJX0xJTkUoaGV4dGktPkxpbmUpKTsKKyAgYXNzZXJ0X3BhcmFtKElTX0VYVElfQ09ORklHX0xJTkUoaGV4dGktPkxpbmUpKTsKICAgYXNzZXJ0X3BhcmFtKElTX0VYVElfUEVORElOR19FREdFKEVkZ2UpKTsKIAotICAvKiBHZXQgcGVuZGluZyBiaXQgKi8KLSAgcmVnYWRkciA9ICZFWFRJLT5QUjsKKyAgLyogQ29tcHV0ZSBsaW5lIG1hc2sgKi8KKyAgbGluZXBvcyA9IChoZXh0aS0+TGluZSAmIEVYVElfUElOX01BU0spOworICBtYXNrbGluZSA9ICgxdUwgPDwgbGluZXBvcyk7CiAKICAgLyogcmV0dXJuIDEgaWYgYml0IGlzIHNldCBlbHNlIDAgKi8KLSAgcmVndmFsID0gKCgqcmVnYWRkciAmIGhleHRpLT5MaW5lKSA+PiBQT1NJVElPTl9WQUwoaGV4dGktPkxpbmUpKTsKLQorICByZWd2YWwgPSAoKEVYVEktPlBSICYgbWFza2xpbmUpID4+IGxpbmVwb3MpOwogICByZXR1cm4gcmVndmFsOwogfQogCkBAIC00MDAsMTEgKzUwNSwxOCBAQAogICAqLwogdm9pZCBIQUxfRVhUSV9DbGVhclBlbmRpbmcoRVhUSV9IYW5kbGVUeXBlRGVmICpoZXh0aSwgdWludDMyX3QgRWRnZSkKIHsKKyAgdWludDMyX3QgbWFza2xpbmU7CisKICAgLyogQ2hlY2sgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfRVhUSV9MSU5FKGhleHRpLT5MaW5lKSk7CisgIGFzc2VydF9wYXJhbShJU19FWFRJX0NPTkZJR19MSU5FKGhleHRpLT5MaW5lKSk7CiAgIGFzc2VydF9wYXJhbShJU19FWFRJX1BFTkRJTkdfRURHRShFZGdlKSk7CiAKLSAgRVhUSS0+UFIgPSAgaGV4dGktPkxpbmU7CisgIC8qIENvbXB1dGUgbGluZSBtYXNrICovCisgIG1hc2tsaW5lID0gKDF1TCA8PCAoaGV4dGktPkxpbmUgJiBFWFRJX1BJTl9NQVNLKSk7CisKKyAgLyogQ2xlYXIgUGVuZGluZyBiaXQgKi8KKyAgRVhUSS0+UFIgPSAgbWFza2xpbmU7CiB9CiAKIC8qKgpAQCAtNDE0LDEwICs1MjYsMTcgQEAKICAgKi8KIHZvaWQgSEFMX0VYVElfR2VuZXJhdGVTV0koRVhUSV9IYW5kbGVUeXBlRGVmICpoZXh0aSkKIHsKKyAgdWludDMyX3QgbWFza2xpbmU7CisKICAgLyogQ2hlY2sgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfRVhUSV9MSU5FKGhleHRpLT5MaW5lKSk7CisgIGFzc2VydF9wYXJhbShJU19FWFRJX0NPTkZJR19MSU5FKGhleHRpLT5MaW5lKSk7CiAKLSAgRVhUSS0+U1dJRVIgPSBoZXh0aS0+TGluZTsKKyAgLyogQ29tcHV0ZSBsaW5lIG1hc2sgKi8KKyAgbWFza2xpbmUgPSAoMXVMIDw8IChoZXh0aS0+TGluZSAmIEVYVElfUElOX01BU0spKTsKKworICAvKiBHZW5lcmF0ZSBTb2Z0d2FyZSBpbnRlcnJ1cHQgKi8KKyAgRVhUSS0+U1dJRVIgPSBtYXNrbGluZTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmNHh4X2hhbF9mbGFzaC5jIGIvU3JjL3N0bTMyZjR4eF9oYWxfZmxhc2guYwppbmRleCA1YzYwMWFlLi42OWI0N2E2IDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmNHh4X2hhbF9mbGFzaC5jCisrKyBiL1NyYy9zdG0zMmY0eHhfaGFsX2ZsYXNoLmMKQEAgLTYxOSw4ICs2MTksMTQgQEAKICAgRkxBU0gtPkNSIHw9IEZMQVNIX1BTSVpFX0RPVUJMRV9XT1JEOwogICBGTEFTSC0+Q1IgfD0gRkxBU0hfQ1JfUEc7CiAKLSAgLyogUHJvZ3JhbSB0aGUgZG91YmxlLXdvcmQgKi8KKyAgLyogUHJvZ3JhbSBmaXJzdCB3b3JkICovCiAgICooX19JTyB1aW50MzJfdCopQWRkcmVzcyA9ICh1aW50MzJfdClEYXRhOworCisgIC8qIEJhcnJpZXIgdG8gZW5zdXJlIHByb2dyYW1taW5nIGlzIHBlcmZvcm1lZCBpbiAyIHN0ZXBzLCBpbiByaWdodCBvcmRlcgorICAgIChpbmRlcGVuZGVudGx5IG9mIGNvbXBpbGVyIG9wdGltaXphdGlvbiBiZWhhdmlvcikgKi8KKyAgX19JU0IoKTsKKworICAvKiBQcm9ncmFtIHNlY29uZCB3b3JkICovCiAgICooX19JTyB1aW50MzJfdCopKEFkZHJlc3MrNCkgPSAodWludDMyX3QpKERhdGEgPj4gMzIpOwogfQogCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmNHh4X2hhbF9mbXBpMmMuYyBiL1NyYy9zdG0zMmY0eHhfaGFsX2ZtcGkyYy5jCmluZGV4IGY2MGMwZGYuLjQ0ZjY0ZjMgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmY0eHhfaGFsX2ZtcGkyYy5jCisrKyBiL1NyYy9zdG0zMmY0eHhfaGFsX2ZtcGkyYy5jCkBAIC0yMjMsMTIgKzIyMywxMiBAQAogCiAgICAgICoqKiBDYWxsYmFjayByZWdpc3RyYXRpb24gKioqCiAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCisgICAgWy4uXQogICAgICBUaGUgY29tcGlsYXRpb24gZmxhZyBVU0VfSEFMX0ZNUEkyQ19SRUdJU1RFUl9DQUxMQkFDS1Mgd2hlbiBzZXQgdG8gMQogICAgICBhbGxvd3MgdGhlIHVzZXIgdG8gY29uZmlndXJlIGR5bmFtaWNhbGx5IHRoZSBkcml2ZXIgY2FsbGJhY2tzLgogICAgICBVc2UgRnVuY3Rpb25zIEByZWYgSEFMX0ZNUEkyQ19SZWdpc3RlckNhbGxiYWNrKCkgb3IgQHJlZiBIQUxfRk1QSTJDX1JlZ2lzdGVyQWRkckNhbGxiYWNrKCkKICAgICAgdG8gcmVnaXN0ZXIgYW4gaW50ZXJydXB0IGNhbGxiYWNrLgotCisgICAgWy4uXQogICAgICBGdW5jdGlvbiBAcmVmIEhBTF9GTVBJMkNfUmVnaXN0ZXJDYWxsYmFjaygpIGFsbG93cyB0byByZWdpc3RlciBmb2xsb3dpbmcgY2FsbGJhY2tzOgogICAgICAgICgrKSBNYXN0ZXJUeENwbHRDYWxsYmFjayA6IGNhbGxiYWNrIGZvciBNYXN0ZXIgdHJhbnNtaXNzaW9uIGVuZCBvZiB0cmFuc2Zlci4KICAgICAgICAoKykgTWFzdGVyUnhDcGx0Q2FsbGJhY2sgOiBjYWxsYmFjayBmb3IgTWFzdGVyIHJlY2VwdGlvbiBlbmQgb2YgdHJhbnNmZXIuCkBAIC0yNDMsOSArMjQzLDkgQEAKICAgICAgICAoKykgTXNwRGVJbml0Q2FsbGJhY2sgICAgOiBjYWxsYmFjayBmb3IgTXNwIERlSW5pdC4KICAgICAgVGhpcyBmdW5jdGlvbiB0YWtlcyBhcyBwYXJhbWV0ZXJzIHRoZSBIQUwgcGVyaXBoZXJhbCBoYW5kbGUsIHRoZSBDYWxsYmFjayBJRAogICAgICBhbmQgYSBwb2ludGVyIHRvIHRoZSB1c2VyIGNhbGxiYWNrIGZ1bmN0aW9uLgotCisgICAgWy4uXQogICAgICBGb3Igc3BlY2lmaWMgY2FsbGJhY2sgQWRkckNhbGxiYWNrIHVzZSBkZWRpY2F0ZWQgcmVnaXN0ZXIgY2FsbGJhY2tzIDogQHJlZiBIQUxfRk1QSTJDX1JlZ2lzdGVyQWRkckNhbGxiYWNrKCkuCi0KKyAgICBbLi5dCiAgICAgIFVzZSBmdW5jdGlvbiBAcmVmIEhBTF9GTVBJMkNfVW5SZWdpc3RlckNhbGxiYWNrIHRvIHJlc2V0IGEgY2FsbGJhY2sgdG8gdGhlIGRlZmF1bHQKICAgICAgd2VhayBmdW5jdGlvbi4KICAgICAgQHJlZiBIQUxfRk1QSTJDX1VuUmVnaXN0ZXJDYWxsYmFjayB0YWtlcyBhcyBwYXJhbWV0ZXJzIHRoZSBIQUwgcGVyaXBoZXJhbCBoYW5kbGUsCkBAIC0yNjIsOSArMjYyLDkgQEAKICAgICAgICAoKykgQWJvcnRDcGx0Q2FsbGJhY2sgICAgOiBjYWxsYmFjayBmb3IgYWJvcnQgY29tcGxldGlvbiBwcm9jZXNzLgogICAgICAgICgrKSBNc3BJbml0Q2FsbGJhY2sgICAgICA6IGNhbGxiYWNrIGZvciBNc3AgSW5pdC4KICAgICAgICAoKykgTXNwRGVJbml0Q2FsbGJhY2sgICAgOiBjYWxsYmFjayBmb3IgTXNwIERlSW5pdC4KLQorICAgIFsuLl0KICAgICAgRm9yIGNhbGxiYWNrIEFkZHJDYWxsYmFjayB1c2UgZGVkaWNhdGVkIHJlZ2lzdGVyIGNhbGxiYWNrcyA6IEByZWYgSEFMX0ZNUEkyQ19VblJlZ2lzdGVyQWRkckNhbGxiYWNrKCkuCi0KKyAgICBbLi5dCiAgICAgIEJ5IGRlZmF1bHQsIGFmdGVyIHRoZSBAcmVmIEhBTF9GTVBJMkNfSW5pdCgpIGFuZCB3aGVuIHRoZSBzdGF0ZSBpcyBAcmVmIEhBTF9GTVBJMkNfU1RBVEVfUkVTRVQKICAgICAgYWxsIGNhbGxiYWNrcyBhcmUgc2V0IHRvIHRoZSBjb3JyZXNwb25kaW5nIHdlYWsgZnVuY3Rpb25zOgogICAgICBleGFtcGxlcyBAcmVmIEhBTF9GTVBJMkNfTWFzdGVyVHhDcGx0Q2FsbGJhY2soKSwgQHJlZiBIQUxfRk1QSTJDX01hc3RlclJ4Q3BsdENhbGxiYWNrKCkuCkBAIC0yNzMsNyArMjczLDcgQEAKICAgICAgdGhlc2UgY2FsbGJhY2tzIGFyZSBudWxsIChub3QgcmVnaXN0ZXJlZCBiZWZvcmVoYW5kKS4KICAgICAgSWYgTXNwSW5pdCBvciBNc3BEZUluaXQgYXJlIG5vdCBudWxsLCB0aGUgQHJlZiBIQUxfRk1QSTJDX0luaXQoKS8gQHJlZiBIQUxfRk1QSTJDX0RlSW5pdCgpCiAgICAgIGtlZXAgYW5kIHVzZSB0aGUgdXNlciBNc3BJbml0L01zcERlSW5pdCBjYWxsYmFja3MgKHJlZ2lzdGVyZWQgYmVmb3JlaGFuZCkgd2hhdGV2ZXIgdGhlIHN0YXRlLgotCisgICAgWy4uXQogICAgICBDYWxsYmFja3MgY2FuIGJlIHJlZ2lzdGVyZWQvdW5yZWdpc3RlcmVkIGluIEByZWYgSEFMX0ZNUEkyQ19TVEFURV9SRUFEWSBzdGF0ZSBvbmx5LgogICAgICBFeGNlcHRpb24gZG9uZSBNc3BJbml0L01zcERlSW5pdCBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgcmVnaXN0ZXJlZC91bnJlZ2lzdGVyZWQKICAgICAgaW4gQHJlZiBIQUxfRk1QSTJDX1NUQVRFX1JFQURZIG9yIEByZWYgSEFMX0ZNUEkyQ19TVEFURV9SRVNFVCBzdGF0ZSwKQEAgLTI4MSw3ICsyODEsNyBAQAogICAgICBUaGVuLCB0aGUgdXNlciBmaXJzdCByZWdpc3RlcnMgdGhlIE1zcEluaXQvTXNwRGVJbml0IHVzZXIgY2FsbGJhY2tzCiAgICAgIHVzaW5nIEByZWYgSEFMX0ZNUEkyQ19SZWdpc3RlckNhbGxiYWNrKCkgYmVmb3JlIGNhbGxpbmcgQHJlZiBIQUxfRk1QSTJDX0RlSW5pdCgpCiAgICAgIG9yIEByZWYgSEFMX0ZNUEkyQ19Jbml0KCkgZnVuY3Rpb24uCi0KKyAgICBbLi5dCiAgICAgIFdoZW4gdGhlIGNvbXBpbGF0aW9uIGZsYWcgVVNFX0hBTF9GTVBJMkNfUkVHSVNURVJfQ0FMTEJBQ0tTIGlzIHNldCB0byAwIG9yCiAgICAgIG5vdCBkZWZpbmVkLCB0aGUgY2FsbGJhY2sgcmVnaXN0cmF0aW9uIGZlYXR1cmUgaXMgbm90IGF2YWlsYWJsZSBhbmQgYWxsIGNhbGxiYWNrcwogICAgICBhcmUgc2V0IHRvIHRoZSBjb3JyZXNwb25kaW5nIHdlYWsgZnVuY3Rpb25zLgpAQCAtNDczOCw2ICs0NzM4LDEzIEBACiAgIC8qIFByb2Nlc3MgbG9ja2VkICovCiAgIF9fSEFMX0xPQ0soaGZtcGkyYyk7CiAKKyAgLyogQ2hlY2sgaWYgU1RPUEYgaXMgc2V0ICovCisgIGlmICgoRk1QSTJDX0NIRUNLX0ZMQUcodG1wSVRGbGFncywgRk1QSTJDX0ZMQUdfU1RPUEYpICE9IFJFU0VUKSAmJiAoRk1QSTJDX0NIRUNLX0lUX1NPVVJDRShJVFNvdXJjZXMsIEZNUEkyQ19JVF9TVE9QSSkgIT0gUkVTRVQpKQorICB7CisgICAgLyogQ2FsbCBGTVBJMkMgU2xhdmUgY29tcGxldGUgcHJvY2VzcyAqLworICAgIEZNUEkyQ19JVFNsYXZlQ3BsdChoZm1waTJjLCB0bXBJVEZsYWdzKTsKKyAgfQorCiAgIGlmICgoRk1QSTJDX0NIRUNLX0ZMQUcodG1wSVRGbGFncywgRk1QSTJDX0ZMQUdfQUYpICE9IFJFU0VUKSAmJiAoRk1QSTJDX0NIRUNLX0lUX1NPVVJDRShJVFNvdXJjZXMsIEZNUEkyQ19JVF9OQUNLSSkgIT0gUkVTRVQpKQogICB7CiAgICAgLyogQ2hlY2sgdGhhdCBGTVBJMkMgdHJhbnNmZXIgZmluaXNoZWQgKi8KQEAgLTQ3ODksOSArNDc5Niw2IEBACiAgIHsKICAgICBpZiAoaGZtcGkyYy0+WGZlckNvdW50ID4gMFUpCiAgICAgewotICAgICAgLyogUmVtb3ZlIFJYTkUgZmxhZyBvbiB0ZW1wb3JhcnkgdmFyaWFibGUgYXMgcmVhZCBkb25lICovCi0gICAgICB0bXBJVEZsYWdzICY9IH5GTVBJMkNfRkxBR19SWE5FOwotCiAgICAgICAvKiBSZWFkIGRhdGEgZnJvbSBSWERSICovCiAgICAgICAqaGZtcGkyYy0+cEJ1ZmZQdHIgPSAodWludDhfdCloZm1waTJjLT5JbnN0YW5jZS0+UlhEUjsKIApAQCAtNDg0NSwxMyArNDg0OSw2IEBACiAgICAgLyogTm90aGluZyB0byBkbyAqLwogICB9CiAKLSAgLyogQ2hlY2sgaWYgU1RPUEYgaXMgc2V0ICovCi0gIGlmICgoRk1QSTJDX0NIRUNLX0ZMQUcodG1wSVRGbGFncywgRk1QSTJDX0ZMQUdfU1RPUEYpICE9IFJFU0VUKSAmJiAoRk1QSTJDX0NIRUNLX0lUX1NPVVJDRShJVFNvdXJjZXMsIEZNUEkyQ19JVF9TVE9QSSkgIT0gUkVTRVQpKQotICB7Ci0gICAgLyogQ2FsbCBGTVBJMkMgU2xhdmUgY29tcGxldGUgcHJvY2VzcyAqLwotICAgIEZNUEkyQ19JVFNsYXZlQ3BsdChoZm1waTJjLCB0bXBJVEZsYWdzKTsKLSAgfQotCiAgIC8qIFByb2Nlc3MgVW5sb2NrZWQgKi8KICAgX19IQUxfVU5MT0NLKGhmbXBpMmMpOwogCkBAIC01MDA5LDYgKzUwMDYsMTMgQEAKICAgLyogUHJvY2VzcyBsb2NrZWQgKi8KICAgX19IQUxfTE9DSyhoZm1waTJjKTsKIAorICAvKiBDaGVjayBpZiBTVE9QRiBpcyBzZXQgKi8KKyAgaWYgKChGTVBJMkNfQ0hFQ0tfRkxBRyhJVEZsYWdzLCBGTVBJMkNfRkxBR19TVE9QRikgIT0gUkVTRVQpICYmIChGTVBJMkNfQ0hFQ0tfSVRfU09VUkNFKElUU291cmNlcywgRk1QSTJDX0lUX1NUT1BJKSAhPSBSRVNFVCkpCisgIHsKKyAgICAvKiBDYWxsIEZNUEkyQyBTbGF2ZSBjb21wbGV0ZSBwcm9jZXNzICovCisgICAgRk1QSTJDX0lUU2xhdmVDcGx0KGhmbXBpMmMsIElURmxhZ3MpOworICB9CisKICAgaWYgKChGTVBJMkNfQ0hFQ0tfRkxBRyhJVEZsYWdzLCBGTVBJMkNfRkxBR19BRikgIT0gUkVTRVQpICYmIChGTVBJMkNfQ0hFQ0tfSVRfU09VUkNFKElUU291cmNlcywgRk1QSTJDX0lUX05BQ0tJKSAhPSBSRVNFVCkpCiAgIHsKICAgICAvKiBDaGVjayB0aGF0IEZNUEkyQyB0cmFuc2ZlciBmaW5pc2hlZCAqLwpAQCAtNTA5MywxMSArNTA5Nyw2IEBACiAgIHsKICAgICBGTVBJMkNfSVRBZGRyQ3BsdChoZm1waTJjLCBJVEZsYWdzKTsKICAgfQotICBlbHNlIGlmICgoRk1QSTJDX0NIRUNLX0ZMQUcoSVRGbGFncywgRk1QSTJDX0ZMQUdfU1RPUEYpICE9IFJFU0VUKSAmJiAoRk1QSTJDX0NIRUNLX0lUX1NPVVJDRShJVFNvdXJjZXMsIEZNUEkyQ19JVF9TVE9QSSkgIT0gUkVTRVQpKQotICB7Ci0gICAgLyogQ2FsbCBGTVBJMkMgU2xhdmUgY29tcGxldGUgcHJvY2VzcyAqLwotICAgIEZNUEkyQ19JVFNsYXZlQ3BsdChoZm1waTJjLCBJVEZsYWdzKTsKLSAgfQogICBlbHNlCiAgIHsKICAgICAvKiBOb3RoaW5nIHRvIGRvICovCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmNHh4X2hhbF9ncGlvLmMgYi9TcmMvc3RtMzJmNHh4X2hhbF9ncGlvLmMKaW5kZXggNzViOGZjZC4uODkwOTBkNiAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZjR4eF9oYWxfZ3Bpby5jCisrKyBiL1NyYy9zdG0zMmY0eHhfaGFsX2dwaW8uYwpAQCAtMTkyLDI0ICsxOTIsNiBAQAogICAgIGlmKGlvY3VycmVudCA9PSBpb3Bvc2l0aW9uKQogICAgIHsKICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEdQSU8gTW9kZSBDb25maWd1cmF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0gICAgICAvKiBJbiBjYXNlIG9mIEFsdGVybmF0ZSBmdW5jdGlvbiBtb2RlIHNlbGVjdGlvbiAqLwotICAgICAgaWYoKEdQSU9fSW5pdC0+TW9kZSA9PSBHUElPX01PREVfQUZfUFApIHx8IChHUElPX0luaXQtPk1vZGUgPT0gR1BJT19NT0RFX0FGX09EKSkKLSAgICAgIHsKLSAgICAgICAgLyogQ2hlY2sgdGhlIEFsdGVybmF0ZSBmdW5jdGlvbiBwYXJhbWV0ZXIgKi8KLSAgICAgICAgYXNzZXJ0X3BhcmFtKElTX0dQSU9fQUYoR1BJT19Jbml0LT5BbHRlcm5hdGUpKTsKLSAgICAgICAgLyogQ29uZmlndXJlIEFsdGVybmF0ZSBmdW5jdGlvbiBtYXBwZWQgd2l0aCB0aGUgY3VycmVudCBJTyAqLwotICAgICAgICB0ZW1wID0gR1BJT3gtPkFGUltwb3NpdGlvbiA+PiAzVV07Ci0gICAgICAgIHRlbXAgJj0gfigweEZVIDw8ICgodWludDMyX3QpKHBvc2l0aW9uICYgMHgwN1UpICogNFUpKSA7Ci0gICAgICAgIHRlbXAgfD0gKCh1aW50MzJfdCkoR1BJT19Jbml0LT5BbHRlcm5hdGUpIDw8ICgoKHVpbnQzMl90KXBvc2l0aW9uICYgMHgwN1UpICogNFUpKTsKLSAgICAgICAgR1BJT3gtPkFGUltwb3NpdGlvbiA+PiAzVV0gPSB0ZW1wOwotICAgICAgfQotCi0gICAgICAvKiBDb25maWd1cmUgSU8gRGlyZWN0aW9uIG1vZGUgKElucHV0LCBPdXRwdXQsIEFsdGVybmF0ZSBvciBBbmFsb2cpICovCi0gICAgICB0ZW1wID0gR1BJT3gtPk1PREVSOwotICAgICAgdGVtcCAmPSB+KEdQSU9fTU9ERVJfTU9ERVIwIDw8IChwb3NpdGlvbiAqIDJVKSk7Ci0gICAgICB0ZW1wIHw9ICgoR1BJT19Jbml0LT5Nb2RlICYgR1BJT19NT0RFKSA8PCAocG9zaXRpb24gKiAyVSkpOwotICAgICAgR1BJT3gtPk1PREVSID0gdGVtcDsKLQogICAgICAgLyogSW4gY2FzZSBvZiBPdXRwdXQgb3IgQWx0ZXJuYXRlIGZ1bmN0aW9uIG1vZGUgc2VsZWN0aW9uICovCiAgICAgICBpZigoR1BJT19Jbml0LT5Nb2RlID09IEdQSU9fTU9ERV9PVVRQVVRfUFApIHx8IChHUElPX0luaXQtPk1vZGUgPT0gR1BJT19NT0RFX0FGX1BQKSB8fAogICAgICAgICAgKEdQSU9fSW5pdC0+TW9kZSA9PSBHUElPX01PREVfT1VUUFVUX09EKSB8fCAoR1BJT19Jbml0LT5Nb2RlID09IEdQSU9fTU9ERV9BRl9PRCkpCkBAIC0yMjcsNyArMjA5LDcgQEAKICAgICAgICAgdGVtcCAmPSB+KEdQSU9fT1RZUEVSX09UXzAgPDwgcG9zaXRpb24pIDsKICAgICAgICAgdGVtcCB8PSAoKChHUElPX0luaXQtPk1vZGUgJiBHUElPX09VVFBVVF9UWVBFKSA+PiA0VSkgPDwgcG9zaXRpb24pOwogICAgICAgICBHUElPeC0+T1RZUEVSID0gdGVtcDsKLSAgICAgIH0KKyAgICAgICB9CiAKICAgICAgIC8qIEFjdGl2YXRlIHRoZSBQdWxsLXVwIG9yIFB1bGwgZG93biByZXNpc3RvciBmb3IgdGhlIGN1cnJlbnQgSU8gKi8KICAgICAgIHRlbXAgPSBHUElPeC0+UFVQRFI7CkBAIC0yMzUsNiArMjE3LDI0IEBACiAgICAgICB0ZW1wIHw9ICgoR1BJT19Jbml0LT5QdWxsKSA8PCAocG9zaXRpb24gKiAyVSkpOwogICAgICAgR1BJT3gtPlBVUERSID0gdGVtcDsKIAorICAgICAgLyogSW4gY2FzZSBvZiBBbHRlcm5hdGUgZnVuY3Rpb24gbW9kZSBzZWxlY3Rpb24gKi8KKyAgICAgIGlmKChHUElPX0luaXQtPk1vZGUgPT0gR1BJT19NT0RFX0FGX1BQKSB8fCAoR1BJT19Jbml0LT5Nb2RlID09IEdQSU9fTU9ERV9BRl9PRCkpCisgICAgICB7CisgICAgICAgIC8qIENoZWNrIHRoZSBBbHRlcm5hdGUgZnVuY3Rpb24gcGFyYW1ldGVyICovCisgICAgICAgIGFzc2VydF9wYXJhbShJU19HUElPX0FGKEdQSU9fSW5pdC0+QWx0ZXJuYXRlKSk7CisgICAgICAgIC8qIENvbmZpZ3VyZSBBbHRlcm5hdGUgZnVuY3Rpb24gbWFwcGVkIHdpdGggdGhlIGN1cnJlbnQgSU8gKi8KKyAgICAgICAgdGVtcCA9IEdQSU94LT5BRlJbcG9zaXRpb24gPj4gM1VdOworICAgICAgICB0ZW1wICY9IH4oMHhGVSA8PCAoKHVpbnQzMl90KShwb3NpdGlvbiAmIDB4MDdVKSAqIDRVKSkgOworICAgICAgICB0ZW1wIHw9ICgodWludDMyX3QpKEdQSU9fSW5pdC0+QWx0ZXJuYXRlKSA8PCAoKCh1aW50MzJfdClwb3NpdGlvbiAmIDB4MDdVKSAqIDRVKSk7CisgICAgICAgIEdQSU94LT5BRlJbcG9zaXRpb24gPj4gM1VdID0gdGVtcDsKKyAgICAgIH0KKworICAgICAgLyogQ29uZmlndXJlIElPIERpcmVjdGlvbiBtb2RlIChJbnB1dCwgT3V0cHV0LCBBbHRlcm5hdGUgb3IgQW5hbG9nKSAqLworICAgICAgdGVtcCA9IEdQSU94LT5NT0RFUjsKKyAgICAgIHRlbXAgJj0gfihHUElPX01PREVSX01PREVSMCA8PCAocG9zaXRpb24gKiAyVSkpOworICAgICAgdGVtcCB8PSAoKEdQSU9fSW5pdC0+TW9kZSAmIEdQSU9fTU9ERSkgPDwgKHBvc2l0aW9uICogMlUpKTsKKyAgICAgIEdQSU94LT5NT0RFUiA9IHRlbXA7CisKICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEVYVEkgTW9kZSBDb25maWd1cmF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgICAgICAvKiBDb25maWd1cmUgdGhlIEV4dGVybmFsIEludGVycnVwdCBvciBldmVudCBmb3IgdGhlIGN1cnJlbnQgSU8gKi8KICAgICAgIGlmKChHUElPX0luaXQtPk1vZGUgJiBFWFRJX01PREUpID09IEVYVElfTU9ERSkKQEAgLTMxOCwxMCArMzE4LDYgQEAKICAgICAgIHRtcCAmPSAoMHgwRlUgPDwgKDRVICogKHBvc2l0aW9uICYgMHgwM1UpKSk7CiAgICAgICBpZih0bXAgPT0gKCh1aW50MzJfdCkoR1BJT19HRVRfSU5ERVgoR1BJT3gpKSA8PCAoNFUgKiAocG9zaXRpb24gJiAweDAzVSkpKSkKICAgICAgIHsKLSAgICAgICAgLyogQ29uZmlndXJlIHRoZSBFeHRlcm5hbCBJbnRlcnJ1cHQgb3IgZXZlbnQgZm9yIHRoZSBjdXJyZW50IElPICovCi0gICAgICAgIHRtcCA9IDB4MEZVIDw8ICg0VSAqIChwb3NpdGlvbiAmIDB4MDNVKSk7Ci0gICAgICAgIFNZU0NGRy0+RVhUSUNSW3Bvc2l0aW9uID4+IDJVXSAmPSB+dG1wOwotCiAgICAgICAgIC8qIENsZWFyIEVYVEkgbGluZSBjb25maWd1cmF0aW9uICovCiAgICAgICAgIEVYVEktPklNUiAmPSB+KCh1aW50MzJfdClpb2N1cnJlbnQpOwogICAgICAgICBFWFRJLT5FTVIgJj0gfigodWludDMyX3QpaW9jdXJyZW50KTsKQEAgLTMyOSw2ICszMjUsMTAgQEAKICAgICAgICAgLyogQ2xlYXIgUmlzaW5nIEZhbGxpbmcgZWRnZSBjb25maWd1cmF0aW9uICovCiAgICAgICAgIEVYVEktPlJUU1IgJj0gfigodWludDMyX3QpaW9jdXJyZW50KTsKICAgICAgICAgRVhUSS0+RlRTUiAmPSB+KCh1aW50MzJfdClpb2N1cnJlbnQpOworCisgICAgICAgIC8qIENvbmZpZ3VyZSB0aGUgRXh0ZXJuYWwgSW50ZXJydXB0IG9yIGV2ZW50IGZvciB0aGUgY3VycmVudCBJTyAqLworICAgICAgICB0bXAgPSAweDBGVSA8PCAoNFUgKiAocG9zaXRpb24gJiAweDAzVSkpOworICAgICAgICBTWVNDRkctPkVYVElDUltwb3NpdGlvbiA+PiAyVV0gJj0gfnRtcDsKICAgICAgIH0KIAogICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEdQSU8gTW9kZSBDb25maWd1cmF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTMzOCwxNCArMzM4LDE0IEBACiAgICAgICAvKiBDb25maWd1cmUgdGhlIGRlZmF1bHQgQWx0ZXJuYXRlIEZ1bmN0aW9uIGluIGN1cnJlbnQgSU8gKi8KICAgICAgIEdQSU94LT5BRlJbcG9zaXRpb24gPj4gM1VdICY9IH4oMHhGVSA8PCAoKHVpbnQzMl90KShwb3NpdGlvbiAmIDB4MDdVKSAqIDRVKSkgOwogCi0gICAgICAvKiBDb25maWd1cmUgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIElPIFNwZWVkICovCi0gICAgICBHUElPeC0+T1NQRUVEUiAmPSB+KEdQSU9fT1NQRUVERVJfT1NQRUVEUjAgPDwgKHBvc2l0aW9uICogMlUpKTsKKyAgICAgIC8qIERlYWN0aXZhdGUgdGhlIFB1bGwtdXAgYW5kIFB1bGwtZG93biByZXNpc3RvciBmb3IgdGhlIGN1cnJlbnQgSU8gKi8KKyAgICAgIEdQSU94LT5QVVBEUiAmPSB+KEdQSU9fUFVQRFJfUFVQRFIwIDw8IChwb3NpdGlvbiAqIDJVKSk7CiAKICAgICAgIC8qIENvbmZpZ3VyZSB0aGUgZGVmYXVsdCB2YWx1ZSBJTyBPdXRwdXQgVHlwZSAqLwogICAgICAgR1BJT3gtPk9UWVBFUiAgJj0gfihHUElPX09UWVBFUl9PVF8wIDw8IHBvc2l0aW9uKSA7CiAKLSAgICAgIC8qIERlYWN0aXZhdGUgdGhlIFB1bGwtdXAgYW5kIFB1bGwtZG93biByZXNpc3RvciBmb3IgdGhlIGN1cnJlbnQgSU8gKi8KLSAgICAgIEdQSU94LT5QVVBEUiAmPSB+KEdQSU9fUFVQRFJfUFVQRFIwIDw8IChwb3NpdGlvbiAqIDJVKSk7CisgICAgICAvKiBDb25maWd1cmUgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIElPIFNwZWVkICovCisgICAgICBHUElPeC0+T1NQRUVEUiAmPSB+KEdQSU9fT1NQRUVERVJfT1NQRUVEUjAgPDwgKHBvc2l0aW9uICogMlUpKTsKICAgICB9CiAgIH0KIH0KQEAgLTQ3Myw5ICs0NzMsMTAgQEAKICAgR1BJT3gtPkxDS1IgPSBHUElPX1BpbjsKICAgLyogU2V0IExDS3ggYml0KHMpOiBMQ0tLPScxJyArIExDS1sxNS0wXSAqLwogICBHUElPeC0+TENLUiA9IHRtcDsKLSAgLyogUmVhZCBMQ0tLIGJpdCovCisgIC8qIFJlYWQgTENLUiByZWdpc3Rlci4gVGhpcyByZWFkIGlzIG1hbmRhdG9yeSB0byBjb21wbGV0ZSBrZXkgbG9jayBzZXF1ZW5jZSAqLwogICB0bXAgPSBHUElPeC0+TENLUjsKIAorICAvKiBSZWFkIGFnYWluIGluIG9yZGVyIHRvIGNvbmZpcm0gbG9jayBpcyBhY3RpdmUgKi8KICBpZigoR1BJT3gtPkxDS1IgJiBHUElPX0xDS1JfTENLSykgIT0gUkVTRVQpCiAgIHsKICAgICByZXR1cm4gSEFMX09LOwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjR4eF9oYWxfaGFzaC5jIGIvU3JjL3N0bTMyZjR4eF9oYWxfaGFzaC5jCmluZGV4IGFmNWMwNzEuLjhlZDZhMTUgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmY0eHhfaGFsX2hhc2guYworKysgYi9TcmMvc3RtMzJmNHh4X2hhbF9oYXNoLmMKQEAgLTU3LDI0ICs1NywyOSBAQAogCiAgICAgKCMpV2hlbiB0aGUgcHJvY2Vzc2luZyBmdW5jdGlvbiBpcyBjYWxsZWQgYWZ0ZXIgSEFMX0hBU0hfSW5pdCgpLCB0aGUgSEFTSCBwZXJpcGhlcmFsIGlzCiAgICAgICAgaW5pdGlhbGl6ZWQgYW5kIHByb2Nlc3NlcyB0aGUgYnVmZmVyIGZlZCBpbiBpbnB1dC4gV2hlbiB0aGUgaW5wdXQgZGF0YSBoYXZlIGFsbCBiZWVuCi0gICAgICAgZmVkIHRvIHRoZSBJUCwgdGhlIGRpZ2VzdCBjb21wdXRhdGlvbiBjYW4gc3RhcnQuCisgICAgICAgZmVkIHRvIHRoZSBQZXJpcGhlcmFsLCB0aGUgZGlnZXN0IGNvbXB1dGF0aW9uIGNhbiBzdGFydC4KIAotICAgICgjKU11bHRpLWJ1ZmZlciBwcm9jZXNzaW5nIGlzIHBvc3NpYmxlIGluIHBvbGxpbmcgYW5kIERNQSBtb2RlLgorICAgICgjKU11bHRpLWJ1ZmZlciBwcm9jZXNzaW5nIGlzIHBvc3NpYmxlIGluIHBvbGxpbmcsIGludGVycnVwdCBhbmQgRE1BIG1vZGVzLgogICAgICAgICAoIyMpIEluIHBvbGxpbmcgbW9kZSwgb25seSBtdWx0aS1idWZmZXIgSEFTSCBwcm9jZXNzaW5nIGlzIHBvc3NpYmxlLgogICAgICAgICAgICAgIEFQSSBIQUxfSEFTSF94eHhfQWNjdW11bGF0ZSgpIG11c3QgYmUgY2FsbGVkIGZvciBlYWNoIGlucHV0IGJ1ZmZlciwgZXhjZXB0IGZvciB0aGUgbGFzdCBvbmUuCi0gICAgICAgICAgICAgVXNlciBtdXN0IHJlc29ydCB0byBIQUxfSEFTSF94eHhfU3RhcnQoKSB0byBlbnRlciB0aGUgbGFzdCBvbmUgYW5kIHJldHJpZXZlIGFzCisgICAgICAgICAgICAgVXNlciBtdXN0IHJlc29ydCB0byBIQUxfSEFTSF94eHhfQWNjdW11bGF0ZV9FbmQoKSB0byBlbnRlciB0aGUgbGFzdCBvbmUgYW5kIHJldHJpZXZlIGFzCisgICAgICAgICAgICAgd2VsbCB0aGUgY29tcHV0ZWQgZGlnZXN0LgorCisgICAgICAgICgjIykgSW4gaW50ZXJydXB0IG1vZGUsIEFQSSBIQUxfSEFTSF94eHhfQWNjdW11bGF0ZV9JVCgpIG11c3QgYmUgY2FsbGVkIGZvciBlYWNoIGlucHV0IGJ1ZmZlciwKKyAgICAgICAgICAgICBleGNlcHQgZm9yIHRoZSBsYXN0IG9uZS4KKyAgICAgICAgICAgICBVc2VyIG11c3QgcmVzb3J0IHRvIEhBTF9IQVNIX3h4eF9BY2N1bXVsYXRlX0VuZF9JVCgpIHRvIGVudGVyIHRoZSBsYXN0IG9uZSBhbmQgcmV0cmlldmUgYXMKICAgICAgICAgICAgICB3ZWxsIHRoZSBjb21wdXRlZCBkaWdlc3QuCiAKICAgICAgICAgKCMjKSBJbiBETUEgbW9kZSwgbXVsdGktYnVmZmVyIEhBU0ggYW5kIEhNQUMgcHJvY2Vzc2luZyBhcmUgcG9zc2libGUuCiAgICAgICAgICAgICAgICgrKyspIEhBU0ggcHJvY2Vzc2luZzogb25jZSBpbml0aWFsaXphdGlvbiBpcyBkb25lLCBNRE1BVCBiaXQgbXVzdCBiZSBzZXQgdGhydSBfX0hBTF9IQVNIX1NFVF9NRE1BVCgpIG1hY3JvLgotICAgICAgICAgICAgIEZyb20gdGhhdCBwb2ludCwgZWFjaCBidWZmZXIgY2FuIGJlIGZlZCB0byB0aGUgSVAgdGhydSBIQUxfSEFTSF94eHhfU3RhcnRfRE1BKCkgQVBJLgorICAgICAgICAgICAgIEZyb20gdGhhdCBwb2ludCwgZWFjaCBidWZmZXIgY2FuIGJlIGZlZCB0byB0aGUgUGVyaXBoZXJhbCB0aHJ1IEhBTF9IQVNIX3h4eF9TdGFydF9ETUEoKSBBUEkuCiAgICAgICAgICAgICAgQmVmb3JlIGVudGVyaW5nIHRoZSBsYXN0IGJ1ZmZlciwgcmVzZXQgdGhlIE1ETUFUIGJpdCB3aXRoIF9fSEFMX0hBU0hfUkVTRVRfTURNQVQoKQogICAgICAgICAgICAgIG1hY3JvIHRoZW4gd3JhcC11cCB0aGUgSEFTSCBwcm9jZXNzaW5nIGluIGZlZWRpbmcgdGhlIGxhc3QgaW5wdXQgYnVmZmVyIHRocnUgdGhlCiAgICAgICAgICAgICAgc2FtZSBBUEkgSEFMX0hBU0hfeHh4X1N0YXJ0X0RNQSgpLiBUaGUgZGlnZXN0IGNhbiB0aGVuIGJlIHJldHJpZXZlZCB3aXRoIGEgY2FsbCB0bwogICAgICAgICAgICAgIEFQSSBIQUxfSEFTSF94eHhfRmluaXNoKCkuCiAgICAgICAgICAgICAgKCsrKykgSE1BQyBwcm9jZXNzaW5nIChyZXF1aXJlcyB0byByZXNvcnQgdG8gZXh0ZW5kZWQgZnVuY3Rpb25zKToKICAgICAgICAgICAgICBhZnRlciBpbml0aWFsaXphdGlvbiwgdGhlIGtleSBhbmQgdGhlIGZpcnN0IGlucHV0IGJ1ZmZlciBhcmUgZW50ZXJlZAotICAgICAgICAgICAgIGluIHRoZSBJUCB3aXRoIHRoZSBBUEkgSEFMX0hNQUNFeF94eHhfU3RlcDFfMl9ETUEoKS4gVGhpcyBjYXJyaWVzIG91dCBITUFDIHN0ZXAgMSBhbmQKKyAgICAgICAgICAgICBpbiB0aGUgUGVyaXBoZXJhbCB3aXRoIHRoZSBBUEkgSEFMX0hNQUNFeF94eHhfU3RlcDFfMl9ETUEoKS4gVGhpcyBjYXJyaWVzIG91dCBITUFDIHN0ZXAgMSBhbmQKICAgICAgICAgICAgICBzdGFydHMgc3RlcCAyLgogICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgYnVmZmVycyBhcmUgbmV4dCBlbnRlcmVkIHdpdGggdGhlIEFQSSAgSEFMX0hNQUNFeF94eHhfU3RlcDJfRE1BKCkuIEF0IHRoaXMKICAgICAgICAgICAgICBwb2ludCwgdGhlIEhNQUMgcHJvY2Vzc2luZyBpcyBzdGlsbCBjYXJyeWluZyBvdXQgc3RlcCAyLgpAQCAtOTAsMTYgKzk1LDUwIEBACiAgICAgICAgICAgICAgKCsrKykgSEFMX0hBU0hfRE1BRmVlZF9Qcm9jZXNzU3VzcGVuZCgpIHdoZW4gZGF0YSBhcmUgZW50ZXJlZCBieSBETUEuCiAKICAgICAgICAgKCMjKSBXaGVuIEhBU0ggb3IgSE1BQyBwcm9jZXNzaW5nIGlzIHN1c3BlbmRlZCwgSEFMX0hBU0hfQ29udGV4dFNhdmluZygpIGFsbG93cwotICAgICAgICAgICAgdG8gc2F2ZSBpbiBtZW1vcnkgdGhlIElQIGNvbnRleHQuIFRoaXMgY29udGV4dCBjYW4gYmUgcmVzdG9yZWQgYWZ0ZXJ3YXJkcworICAgICAgICAgICAgdG8gc2F2ZSBpbiBtZW1vcnkgdGhlIFBlcmlwaGVyYWwgY29udGV4dC4gVGhpcyBjb250ZXh0IGNhbiBiZSByZXN0b3JlZCBhZnRlcndhcmRzCiAgICAgICAgICAgICB0byByZXN1bWUgdGhlIEhBU0ggcHJvY2Vzc2luZyB0aGFua3MgdG8gSEFMX0hBU0hfQ29udGV4dFJlc3RvcmluZygpLgogCi0gICAgICAgICgjIykgT25jZSB0aGUgSEFTSCBJUCBoYXMgYmVlbiByZXN0b3JlZCB0byB0aGUgc2FtZSBjb25maWd1cmF0aW9uIGFzIHRoYXQgYXQgc3VzcGVuc2lvbgorICAgICAgICAoIyMpIE9uY2UgdGhlIEhBU0ggUGVyaXBoZXJhbCBoYXMgYmVlbiByZXN0b3JlZCB0byB0aGUgc2FtZSBjb25maWd1cmF0aW9uIGFzIHRoYXQgYXQgc3VzcGVuc2lvbgogICAgICAgICAgICAgIHRpbWUsIHByb2Nlc3NpbmcgY2FuIGJlIHJlc3RhcnRlZCB3aXRoIHRoZSBzYW1lIEFQSSBjYWxsIChzYW1lIEFQSSwgc2FtZSBoYW5kbGUsCiAgICAgICAgICAgICAgc2FtZSBwYXJhbWV0ZXJzKSBhcyBkb25lIGJlZm9yZSB0aGUgc3VzcGVuc2lvbi4gUmVsZXZhbnQgcGFyYW1ldGVycyB0byByZXN0YXJ0IGF0CiAgICAgICAgICAgICAgdGhlIHByb3BlciBsb2NhdGlvbiBhcmUgaW50ZXJuYWxseSBzYXZlZCBpbiB0aGUgSEFTSCBoYW5kbGUuCiAKICAgICAoIylDYWxsIEhBTF9IQVNIX0RlSW5pdCgpIHRvIGRlaW5pdGlhbGl6ZSB0aGUgSEFTSCBwZXJpcGhlcmFsLgogCisgICAgICoqKiBSZW1hcmtzIG9uIG1lc3NhZ2UgbGVuZ3RoICoqKgorICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgICBbLi5dCisgICAgICAoIykgSEFMIGluIGludGVycnVwdGlvbiBtb2RlIChpbnRlcnJ1cHRpb25zIGRyaXZlbikKKworICAgICAgICAoIyMpRHVlIHRvIEhBU0ggcGVyaXBoZXJhbCBoYXJkd2FyZSBkZXNpZ24sIHRoZSBwZXJpcGhlcmFsIGludGVycnVwdGlvbiBpcyB0cmlnZ2VyZWQgZXZlcnkgNjQgYnl0ZXMuCisgICAgICAgIFRoaXMgaXMgd2h5LCBmb3IgZHJpdmVyIGltcGxlbWVudGF0aW9uIHNpbXBsaWNpdHnigJlzIHNha2UsIHVzZXIgaXMgcmVxdWVzdGVkIHRvIGVudGVyIGEgbWVzc2FnZSB0aGUKKyAgICAgICAgbGVuZ3RoIG9mIHdoaWNoIGlzIGEgbXVsdGlwbGUgb2YgNCBieXRlcy4KKworICAgICAgICAoIyMpIFdoZW4gdGhlIG1lc3NhZ2UgbGVuZ3RoIChpbiBieXRlcykgaXMgbm90IGEgbXVsdGlwbGUgb2Ygd29yZHMsIGEgc3BlY2lmaWMgZmllbGQgZXhpc3RzIGluIEhBU0hfU1RSCisgICAgICAgIHRvIHNwZWNpZnkgd2hpY2ggYml0cyB0byBkaXNjYXJkIGF0IHRoZSBlbmQgb2YgdGhlIGNvbXBsZXRlIG1lc3NhZ2UgdG8gcHJvY2VzcyBvbmx5IHRoZSBtZXNzYWdlIGJpdHMKKyAgICAgICAgYW5kIG5vdCBleHRyYSBiaXRzLgorCisgICAgICAgICgjIykgSWYgdXNlciBuZWVkcyB0byBwZXJmb3JtIGEgaGFzaCBjb21wdXRhdGlvbiBvZiBhIGxhcmdlIGlucHV0IGJ1ZmZlciB0aGF0IGlzIHNwcmVhZCBhcm91bmQgdmFyaW91cyBwbGFjZXMKKyAgICAgICAgaW4gbWVtb3J5IGFuZCB3aGVyZSBlYWNoIHBpZWNlIG9mIHRoaXMgaW5wdXQgYnVmZmVyIGlzIG5vdCBuZWNlc3NhcmlseSBhIG11bHRpcGxlIG9mIDQgYnl0ZXMgaW4gc2l6ZSwgaXQKKyAgICAgICAgYmVjb21lcyBuZWNlc3NhcnkgdG8gdXNlIGEgdGVtcG9yYXJ5IGJ1ZmZlciB0byBmb3JtYXQgdGhlIGRhdGEgYWNjb3JkaW5nbHkgYmVmb3JlIGZlZWRpbmcgdGhlbSB0byB0aGUgUGVyaXBoZXJhbC4KKyAgICAgICAgSXQgaXMgYWR2aXNlZCB0byB0aGUgdXNlciB0bworICAgICAgICgrKyspIGFjaGlldmUgdGhlIGZpcnN0IGZvcm1hdHRpbmcgb3BlcmF0aW9uIGJ5IHNvZnR3YXJlIHRoZW4gZW50ZXIgdGhlIGRhdGEKKyAgICAgICAoKysrKSB3aGlsZSB0aGUgUGVyaXBoZXJhbCBpcyBwcm9jZXNzaW5nIHRoZSBmaXJzdCBpbnB1dCBzZXQsIGNhcnJ5IG91dCB0aGUgc2Vjb25kIGZvcm1hdHRpbmcgb3BlcmF0aW9uIGJ5IHNvZnR3YXJlLCB0byBiZSByZWFkeSB3aGVuIERJTklTIG9jY3Vycy4KKyAgICAgICAoKysrKSByZXBlYXQgc3RlcCAyIHVudGlsIHRoZSB3aG9sZSBtZXNzYWdlIGlzIHByb2Nlc3NlZC4KKworICAgICBbLi5dCisgICAgICAoIykgSEFMIGluIERNQSBtb2RlCisKKyAgICAgICAgKCMjKSBBZ2FpbiwgZHVlIHRvIGhhcmR3YXJlIGRlc2lnbiwgdGhlIERNQSB0cmFuc2ZlciB0byBmZWVkIHRoZSBkYXRhIGNhbiBvbmx5IGJlIGRvbmUgb24gYSB3b3JkLWJhc2lzLgorICAgICAgICBUaGUgc2FtZSBmaWVsZCBkZXNjcmliZWQgYWJvdmUgaW4gSEFTSF9TVFIgaXMgdXNlZCB0byBzcGVjaWZ5IHdoaWNoIGJpdHMgdG8gZGlzY2FyZCBhdCB0aGUgZW5kIG9mIHRoZSBETUEgdHJhbnNmZXIKKyAgICAgICAgdG8gcHJvY2VzcyBvbmx5IHRoZSBtZXNzYWdlIGJpdHMgYW5kIG5vdCBleHRyYSBiaXRzLiBEdWUgdG8gaGFyZHdhcmUgaW1wbGVtZW50YXRpb24sIHRoaXMgaXMgcG9zc2libGUgb25seSBhdCB0aGUKKyAgICAgICAgZW5kIG9mIHRoZSBjb21wbGV0ZSBtZXNzYWdlLiBXaGVuIHNldmVyYWwgRE1BIHRyYW5zZmVycyBhcmUgbmVlZGVkIHRvIGVudGVyIHRoZSBtZXNzYWdlLCB0aGlzIGlzIG5vdCBhcHBsaWNhYmxlIGF0CisgICAgICAgIHRoZSBlbmQgb2YgdGhlIGludGVybWVkaWFyeSB0cmFuc2ZlcnMuCisKKyAgICAgICAgKCMjKSBTaW1pbGFybHkgdG8gdGhlIGludGVycnVwdGlvbi1kcml2ZW4gbW9kZSwgaXQgaXMgc3VnZ2VzdGVkIHRvIHRoZSB1c2VyIHRvIGZvcm1hdCB0aGUgY29uc2VjdXRpdmUgY2h1bmtzIG9mIGRhdGEKKyAgICAgICAgYnkgc29mdHdhcmUgd2hpbGUgdGhlIERNQSB0cmFuc2ZlciBhbmQgcHJvY2Vzc2luZyBpcyBvbi1nb2luZyBmb3IgdGhlIGZpcnN0IHBhcnRzIG9mIHRoZSBtZXNzYWdlLiBEdWUgdG8gdGhlIDMyLWJpdCBhbGlnbm1lbnQKKyAgICAgICAgcmVxdWlyZWQgZm9yIHRoZSBETUEgdHJhbnNmZXIsIGl0IGlzIHVuZGVybGluZWQgdGhhdCB0aGUgc29mdHdhcmUgZm9ybWF0dGluZyBvcGVyYXRpb24gaXMgbW9yZSBjb21wbGV4IHRoYW4gaW4gdGhlIElUIG1vZGUuCisKICAgICAgKioqIENhbGxiYWNrIHJlZ2lzdHJhdGlvbiAqKioKICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgWy4uXQpAQCAtMjYwLDcgKzI5OSw3IEBACiAKICAgICBbLi5dICBUaGlzIHNlY3Rpb24gcHJvdmlkZXMgYXMgd2VsbCBjYWxsIGJhY2sgZnVuY3Rpb25zIGRlZmluaXRpb25zIGZvciB1c2VyCiAgICAgICAgICAgY29kZSB0byBtYW5hZ2U6Ci0gICAgICAoKykgSW5wdXQgZGF0YSB0cmFuc2ZlciB0byBJUCBjb21wbGV0aW9uCisgICAgICAoKykgSW5wdXQgZGF0YSB0cmFuc2ZlciB0byBQZXJpcGhlcmFsIGNvbXBsZXRpb24KICAgICAgICgrKSBDYWxjdWxhdGVkIGRpZ2VzdCByZXRyaWV2YWwgY29tcGxldGlvbgogICAgICAgKCspIEVycm9yIG1hbmFnZW1lbnQKIApAQCAtMjczLDI1ICszMTIsMjUgQEAKIC8qKgogICAqIEBicmllZiAgSW5pdGlhbGl6ZSB0aGUgSEFTSCBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmllZCBwYXJhbWV0ZXJzIGluIHRoZQogICAgICAgICAgICAgSEFTSF9IYW5kbGVUeXBlRGVmIGFuZCBjcmVhdGUgdGhlIGFzc29jaWF0ZWQgaGFuZGxlLgotICAqIEBub3RlICAgT25seSBNRE1BVCBhbmQgREFUQVRZUEUgYml0cyBvZiBIQVNIIElQIGFyZSBzZXQgYnkgSEFMX0hBU0hfSW5pdCgpLAorICAqIEBub3RlICAgT25seSBNRE1BVCBhbmQgREFUQVRZUEUgYml0cyBvZiBIQVNIIFBlcmlwaGVyYWwgYXJlIHNldCBieSBIQUxfSEFTSF9Jbml0KCksCiAgICogICAgICAgICBvdGhlciBjb25maWd1cmF0aW9uIGJpdHMgYXJlIHNldCBieSBIQVNIIG9yIEhNQUMgcHJvY2Vzc2luZyBBUElzLgogICAqIEBub3RlICAgTURNQVQgYml0IGlzIHN5c3RlbWF0aWNhbGx5IHJlc2V0IGJ5IEhBTF9IQVNIX0luaXQoKS4gVG8gc2V0IGl0IGZvcgogICAqICAgICAgICAgbXVsdGktYnVmZmVyIEhBU0ggcHJvY2Vzc2luZywgdXNlciBuZWVkcyB0byByZXNvcnQgdG8KICAgKiAgICAgICAgIF9fSEFMX0hBU0hfU0VUX01ETUFUKCkgbWFjcm8uIEZvciBITUFDIG11bHRpLWJ1ZmZlciBwcm9jZXNzaW5nLCB0aGUKICAgKiAgICAgICAgIHJlbGV2YW50IEFQSXMgbWFuYWdlIHRoZW1zZWx2ZXMgdGhlIE1ETUFUIGJpdC4KLSAgKiBAcGFyYW0gIGhoYXNoOiBIQVNIIGhhbmRsZQorICAqIEBwYXJhbSAgaGhhc2ggSEFTSCBoYW5kbGUKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9IQVNIX0luaXQoSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCkKIHsKLSAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KLSAgYXNzZXJ0X3BhcmFtKElTX0hBU0hfREFUQVRZUEUoaGhhc2gtPkluaXQuRGF0YVR5cGUpKTsKLQogICAvKiBDaGVjayB0aGUgaGFzaCBoYW5kbGUgYWxsb2NhdGlvbiAqLwogICBpZihoaGFzaCA9PSBOVUxMKQogICB7CiAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgfQorICAKKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KKyAgYXNzZXJ0X3BhcmFtKElTX0hBU0hfREFUQVRZUEUoaGhhc2gtPkluaXQuRGF0YVR5cGUpKTsKIAogI2lmIChVU0VfSEFMX0hBU0hfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCiAgIGlmIChoaGFzaC0+U3RhdGUgPT0gSEFMX0hBU0hfU1RBVEVfUkVTRVQpCkBAIC0zMzQsNiArMzczLDggQEAKICAgaGhhc2gtPkRpZ2VzdENhbGN1bGF0aW9uRGlzYWJsZSA9IFJFU0VUOwogICAvKiBTZXQgcGhhc2UgdG8gUkVBRFkgKi8KICAgaGhhc2gtPlBoYXNlID0gSEFMX0hBU0hfUEhBU0VfUkVBRFk7CisgIC8qIFJlc2V0IHN1c3BlbnNpb24gcmVxdWVzdCBmbGFnICovCisgIGhoYXNoLT5TdXNwZW5kUmVxdWVzdCA9IEhBTF9IQVNIX1NVU1BFTkRfTk9ORTsKIAogICAvKiBTZXQgdGhlIGRhdGEgdHlwZSBiaXQgKi8KICAgTU9ESUZZX1JFRyhIQVNILT5DUiwgSEFTSF9DUl9EQVRBVFlQRSwgaGhhc2gtPkluaXQuRGF0YVR5cGUpOwpAQCAtMzU2LDcgKzM5Nyw3IEBACiAKIC8qKgogICAqIEBicmllZiAgRGVJbml0aWFsaXplIHRoZSBIQVNIIHBlcmlwaGVyYWwuCi0gICogQHBhcmFtICBoaGFzaDogSEFTSCBoYW5kbGUuCisgICogQHBhcmFtICBoaGFzaCBIQVNIIGhhbmRsZS4KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9IQVNIX0RlSW5pdChIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoKQpAQCAtNDAzLDEzICs0NDQsMTYgQEAKICAgLyogSW5pdGlhbGlzZSB0aGUgZXJyb3IgY29kZSAqLwogICBoaGFzaC0+RXJyb3JDb2RlID0gSEFMX0hBU0hfRVJST1JfTk9ORTsKIAorICAvKiBSZXNldCBtdWx0aSBidWZmZXJzIGFjY3VtdWxhdGlvbiBmbGFnICovCisgIGhoYXNoLT5BY2N1bXVsYXRpb24gPSAwVTsKKwogICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCiAgIHJldHVybiBIQUxfT0s7CiB9CiAKIC8qKgogICAqIEBicmllZiAgSW5pdGlhbGl6ZSB0aGUgSEFTSCBNU1AuCi0gICogQHBhcmFtICBoaGFzaDogSEFTSCBoYW5kbGUuCisgICogQHBhcmFtICBoaGFzaCBIQVNIIGhhbmRsZS4KICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KIF9fd2VhayB2b2lkIEhBTF9IQVNIX01zcEluaXQoSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCkKQEAgLTQyNCw3ICs0NjgsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIERlSW5pdGlhbGl6ZSB0aGUgSEFTSCBNU1AuCi0gICogQHBhcmFtICBoaGFzaDogSEFTSCBoYW5kbGUuCisgICogQHBhcmFtICBoaGFzaCBIQVNIIGhhbmRsZS4KICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KIF9fd2VhayB2b2lkIEhBTF9IQVNIX01zcERlSW5pdChIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoKQpAQCAtNDQwLDEyICs0ODQsMTIgQEAKIC8qKgogICAqIEBicmllZiAgSW5wdXQgZGF0YSB0cmFuc2ZlciBjb21wbGV0ZSBjYWxsIGJhY2suCiAgICogQG5vdGUgICBIQUxfSEFTSF9JbkNwbHRDYWxsYmFjaygpIGlzIGNhbGxlZCB3aGVuIHRoZSBjb21wbGV0ZSBpbnB1dCBtZXNzYWdlCi0gICogICAgICAgICBoYXMgYmVlbiBmZWQgdG8gdGhlIElQLiBUaGlzIEFQSSBpcyBpbnZva2VkIG9ubHkgd2hlbiBpbnB1dCBkYXRhIGFyZQorICAqICAgICAgICAgaGFzIGJlZW4gZmVkIHRvIHRoZSBQZXJpcGhlcmFsLiBUaGlzIEFQSSBpcyBpbnZva2VkIG9ubHkgd2hlbiBpbnB1dCBkYXRhIGFyZQogICAqICAgICAgICAgZW50ZXJlZCB1bmRlciBpbnRlcnJ1cHRpb24gb3IgdGhydSBETUEuCiAgICogQG5vdGUgICBJbiBjYXNlIG9mIEhBU0ggb3IgSE1BQyBtdWx0aS1idWZmZXIgRE1BIGZlZWRpbmcgY2FzZSAoTURNQVQgYml0IHNldCksCiAgICogICAgICAgICBIQUxfSEFTSF9JbkNwbHRDYWxsYmFjaygpIGlzIGNhbGxlZCBhdCB0aGUgZW5kIG9mIGVhY2ggYnVmZmVyIGZlZWRpbmcKLSAgKiAgICAgICAgIHRvIHRoZSBJUC4KLSAgKiBAcGFyYW0gIGhoYXNoOiBIQVNIIGhhbmRsZS4KKyAgKiAgICAgICAgIHRvIHRoZSBQZXJpcGhlcmFsLgorICAqIEBwYXJhbSAgaGhhc2ggSEFTSCBoYW5kbGUuCiAgICogQHJldHZhbCBOb25lCiAgICovCiBfX3dlYWsgdm9pZCBIQUxfSEFTSF9JbkNwbHRDYWxsYmFjayhIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoKQpAQCAtNDYyLDcgKzUwNiw3IEBACiAgICogQGJyaWVmICBEaWdlc3QgY29tcHV0YXRpb24gY29tcGxldGUgY2FsbCBiYWNrLgogICAqIEBub3RlICAgSEFMX0hBU0hfRGdzdENwbHRDYWxsYmFjaygpIGlzIHVzZWQgdW5kZXIgaW50ZXJydXB0aW9uLCBpcyBub3QKICAgKiAgICAgICAgIHJlbGV2YW50IHdpdGggRE1BLgotICAqIEBwYXJhbSAgaGhhc2g6IEhBU0ggaGFuZGxlLgorICAqIEBwYXJhbSAgaGhhc2ggSEFTSCBoYW5kbGUuCiAgICogQHJldHZhbCBOb25lCiAgICovCiBfX3dlYWsgdm9pZCBIQUxfSEFTSF9EZ3N0Q3BsdENhbGxiYWNrKEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gpCkBAIC00NzksNyArNTIzLDcgQEAKICAgKiBAYnJpZWYgIEVycm9yIGNhbGxiYWNrLgogICAqIEBub3RlICAgQ29kZSB1c2VyIGNhbiByZXNvcnQgdG8gaGhhc2gtPlN0YXR1cyAoSEFMX0VSUk9SLCBIQUxfVElNRU9VVCwuLi4pCiAgICogICAgICAgICB0byByZXRyaWV2ZSB0aGUgZXJyb3IgdHlwZS4KLSAgKiBAcGFyYW0gIGhoYXNoOiBIQVNIIGhhbmRsZS4KKyAgKiBAcGFyYW0gIGhoYXNoIEhBU0ggaGFuZGxlLgogICAqIEByZXR2YWwgTm9uZQogICAqLwogX193ZWFrIHZvaWQgSEFMX0hBU0hfRXJyb3JDYWxsYmFjayhIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoKQpAQCAtNjg2LDE3ICs3MzAsMTkgQEAKICAgICAgICAgICB0aGUgaGFzaCB2YWx1ZSB1c2luZyBvbmUgb2YgdGhlIGZvbGxvd2luZyBhbGdvcml0aG1zOgogICAgICAgKCspIE1ENQogICAgICAgICAgKCsrKSBIQUxfSEFTSF9NRDVfU3RhcnQoKQotICAgICAgICAgKCsrKSBIQUxfSEFTSF9NRDVfQWNjdW11bGF0ZSgpCisgICAgICAgICAoKyspIEhBTF9IQVNIX01ENV9BY2NtbHQoKQorICAgICAgICAgKCsrKSBIQUxfSEFTSF9NRDVfQWNjbWx0X0VuZCgpCiAgICAgICAoKykgU0hBMQogICAgICAgICAgKCsrKSBIQUxfSEFTSF9TSEExX1N0YXJ0KCkKLSAgICAgICAgICgrKykgSEFMX0hBU0hfU0hBMV9BY2N1bXVsYXRlKCkKKyAgICAgICAgICgrKykgSEFMX0hBU0hfU0hBMV9BY2NtbHQoKQorICAgICAgICAgKCsrKSBIQUxfSEFTSF9TSEExX0FjY21sdF9FbmQoKQogCiAgICAgWy4uXSBGb3IgYSBzaW5nbGUgYnVmZmVyIHRvIGJlIGhhc2hlZCwgdXNlciBjYW4gcmVzb3J0IHRvIEhBTF9IQVNIX3h4eF9TdGFydCgpLgogCiAgICAgWy4uXSAgSW4gY2FzZSBvZiBtdWx0aS1idWZmZXIgSEFTSCBwcm9jZXNzaW5nIChhIHNpbmdsZSBkaWdlc3QgaXMgY29tcHV0ZWQgd2hpbGUKLSAgICAgICAgICBzZXZlcmFsIGJ1ZmZlcnMgYXJlIGZlZCB0byB0aGUgSVApLCB0aGUgdXNlciBjYW4gcmVzb3J0IHRvIHN1Y2Nlc3NpdmUgY2FsbHMKKyAgICAgICAgICBzZXZlcmFsIGJ1ZmZlcnMgYXJlIGZlZCB0byB0aGUgUGVyaXBoZXJhbCksIHRoZSB1c2VyIGNhbiByZXNvcnQgdG8gc3VjY2Vzc2l2ZSBjYWxscwogICAgICAgICAgIHRvIEhBTF9IQVNIX3h4eF9BY2N1bXVsYXRlKCkgYW5kIHdyYXAtdXAgdGhlIGRpZ2VzdCBjb21wdXRhdGlvbiBieSBhIGNhbGwKLSAgICAgICAgICB0byBIQUxfSEFTSF94eHhfU3RhcnQoKS4KKyAgICAgICAgICB0byBIQUxfSEFTSF94eHhfQWNjdW11bGF0ZV9FbmQoKS4KIAogQGVuZHZlcmJhdGltCiAgICogQHsKQEAgLTcwNiwxMSArNzUyLDExIEBACiAgICogQGJyaWVmICBJbml0aWFsaXplIHRoZSBIQVNIIHBlcmlwaGVyYWwgaW4gTUQ1IG1vZGUsIG5leHQgcHJvY2VzcyBwSW5CdWZmZXIgdGhlbgogICAqICAgICAgICAgcmVhZCB0aGUgY29tcHV0ZWQgZGlnZXN0LgogICAqIEBub3RlICAgRGlnZXN0IGlzIGF2YWlsYWJsZSBpbiBwT3V0QnVmZmVyLgotICAqIEBwYXJhbSAgaGhhc2g6IEhBU0ggaGFuZGxlLgotICAqIEBwYXJhbSAgcEluQnVmZmVyOiBwb2ludGVyIHRvIHRoZSBpbnB1dCBidWZmZXIgKGJ1ZmZlciB0byBiZSBoYXNoZWQpLgotICAqIEBwYXJhbSAgU2l6ZTogbGVuZ3RoIG9mIHRoZSBpbnB1dCBidWZmZXIgaW4gYnl0ZXMuCi0gICogQHBhcmFtICBwT3V0QnVmZmVyOiBwb2ludGVyIHRvIHRoZSBjb21wdXRlZCBkaWdlc3QuIERpZ2VzdCBzaXplIGlzIDE2IGJ5dGVzLgotICAqIEBwYXJhbSAgVGltZW91dDogVGltZW91dCB2YWx1ZQorICAqIEBwYXJhbSAgaGhhc2ggSEFTSCBoYW5kbGUuCisgICogQHBhcmFtICBwSW5CdWZmZXIgcG9pbnRlciB0byB0aGUgaW5wdXQgYnVmZmVyIChidWZmZXIgdG8gYmUgaGFzaGVkKS4KKyAgKiBAcGFyYW0gIFNpemUgbGVuZ3RoIG9mIHRoZSBpbnB1dCBidWZmZXIgaW4gYnl0ZXMuCisgICogQHBhcmFtICBwT3V0QnVmZmVyIHBvaW50ZXIgdG8gdGhlIGNvbXB1dGVkIGRpZ2VzdC4gRGlnZXN0IHNpemUgaXMgMTYgYnl0ZXMuCisgICogQHBhcmFtICBUaW1lb3V0IFRpbWVvdXQgdmFsdWUKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9IQVNIX01ENV9TdGFydChIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoLCB1aW50OF90ICpwSW5CdWZmZXIsIHVpbnQzMl90IFNpemUsIHVpbnQ4X3QqIHBPdXRCdWZmZXIsIHVpbnQzMl90IFRpbWVvdXQpCkBAIC03MjEsMzcgKzc2Nyw1MiBAQAogLyoqCiAgICogQGJyaWVmICBJZiBub3QgYWxyZWFkeSBkb25lLCBpbml0aWFsaXplIHRoZSBIQVNIIHBlcmlwaGVyYWwgaW4gTUQ1IG1vZGUgdGhlbgogICAqICAgICAgICAgcHJvY2Vzc2VzIHBJbkJ1ZmZlci4KLSAgKiBAbm90ZSAgIENvbnNlY3V0aXZlIGNhbGxzIHRvIEhBTF9IQVNIX01ENV9BY2N1bXVsYXRlKCkgY2FuIGJlIHVzZWQgdG8gZmVlZAotICAqICAgICAgICAgc2V2ZXJhbCBpbnB1dCBidWZmZXJzIGJhY2stdG8tYmFjayB0byB0aGUgSVAgdGhhdCB3aWxsIHlpZWxkIGEgc2luZ2xlCisgICogQG5vdGUgICBDb25zZWN1dGl2ZSBjYWxscyB0byBIQUxfSEFTSF9NRDVfQWNjbWx0KCkgY2FuIGJlIHVzZWQgdG8gZmVlZAorICAqICAgICAgICAgc2V2ZXJhbCBpbnB1dCBidWZmZXJzIGJhY2stdG8tYmFjayB0byB0aGUgUGVyaXBoZXJhbCB0aGF0IHdpbGwgeWllbGQgYSBzaW5nbGUKICAgKiAgICAgICAgIEhBU0ggc2lnbmF0dXJlIG9uY2UgYWxsIGJ1ZmZlcnMgaGF2ZSBiZWVuIGVudGVyZWQuIFdyYXAtdXAgb2YgaW5wdXQKICAgKiAgICAgICAgIGJ1ZmZlcnMgZmVlZGluZyBhbmQgcmV0cmlldmFsIG9mIGRpZ2VzdCBpcyBkb25lIGJ5IGEgY2FsbCB0bwotICAqICAgICAgICAgSEFMX0hBU0hfTUQ1X1N0YXJ0KCkuCisgICogICAgICAgICBIQUxfSEFTSF9NRDVfQWNjbWx0X0VuZCgpLgogICAqIEBub3RlICAgRmllbGQgaGhhc2gtPlBoYXNlIG9mIEhBU0ggaGFuZGxlIGlzIHRlc3RlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAotICAqICAgICAgICAgdGhlIElQIGhhcyBhbHJlYWR5IGJlZW4gaW5pdGlhbGl6ZWQuCi0gICogQG5vdGUgICBEaWdlc3QgaXMgbm90IHJldHJpZXZlZCBieSB0aGlzIEFQSSwgdXNlciBtdXN0IHJlc29ydCB0byBIQUxfSEFTSF9NRDVfU3RhcnQoKQotICAqICAgICAgICAgdG8gcmVhZCBpdCwgZmVlZGluZyBhdCB0aGUgc2FtZSB0aW1lIHRoZSBsYXN0IGlucHV0IGJ1ZmZlciB0byB0aGUgSVAuCisgICogICAgICAgICB0aGUgUGVyaXBoZXJhbCBoYXMgYWxyZWFkeSBiZWVuIGluaXRpYWxpemVkLgorICAqIEBub3RlICAgRGlnZXN0IGlzIG5vdCByZXRyaWV2ZWQgYnkgdGhpcyBBUEksIHVzZXIgbXVzdCByZXNvcnQgdG8gSEFMX0hBU0hfTUQ1X0FjY21sdF9FbmQoKQorICAqICAgICAgICAgdG8gcmVhZCBpdCwgZmVlZGluZyBhdCB0aGUgc2FtZSB0aW1lIHRoZSBsYXN0IGlucHV0IGJ1ZmZlciB0byB0aGUgUGVyaXBoZXJhbC4KICAgKiBAbm90ZSAgIFRoZSBpbnB1dCBidWZmZXIgc2l6ZSAoaW4gYnl0ZXMpIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0IG90aGVyd2lzZSwgdGhlCi0gICogICAgICAgICBIQVNIIGRpZ2VzdCBjb21wdXRhdGlvbiBpcyBjb3JydXB0ZWQuIE9ubHkgSEFMX0hBU0hfTUQ1X1N0YXJ0KCkgaXMgYWJsZQorICAqICAgICAgICAgSEFTSCBkaWdlc3QgY29tcHV0YXRpb24gaXMgY29ycnVwdGVkLiBPbmx5IEhBTF9IQVNIX01ENV9BY2NtbHRfRW5kKCkgaXMgYWJsZQogICAqICAgICAgICAgdG8gbWFuYWdlIHRoZSBlbmRpbmcgYnVmZmVyIHdpdGggYSBsZW5ndGggaW4gYnl0ZXMgbm90IGEgbXVsdGlwbGUgb2YgNC4KLSAgKiBAcGFyYW0gIGhoYXNoOiBIQVNIIGhhbmRsZS4KLSAgKiBAcGFyYW0gIHBJbkJ1ZmZlcjogcG9pbnRlciB0byB0aGUgaW5wdXQgYnVmZmVyIChidWZmZXIgdG8gYmUgaGFzaGVkKS4KLSAgKiBAcGFyYW0gIFNpemU6IGxlbmd0aCBvZiB0aGUgaW5wdXQgYnVmZmVyIGluIGJ5dGVzLCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNC4KKyAgKiBAcGFyYW0gIGhoYXNoIEhBU0ggaGFuZGxlLgorICAqIEBwYXJhbSAgcEluQnVmZmVyIHBvaW50ZXIgdG8gdGhlIGlucHV0IGJ1ZmZlciAoYnVmZmVyIHRvIGJlIGhhc2hlZCkuCisgICogQHBhcmFtICBTaXplIGxlbmd0aCBvZiB0aGUgaW5wdXQgYnVmZmVyIGluIGJ5dGVzLCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNC4KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9IQVNIX01ENV9BY2N1bXVsYXRlKEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gsIHVpbnQ4X3QgKnBJbkJ1ZmZlciwgdWludDMyX3QgU2l6ZSkKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9IQVNIX01ENV9BY2NtbHQoSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCwgdWludDhfdCAqcEluQnVmZmVyLCB1aW50MzJfdCBTaXplKQogewogICByZXR1cm4gIEhBU0hfQWNjdW11bGF0ZShoaGFzaCwgcEluQnVmZmVyLCBTaXplLEhBU0hfQUxHT1NFTEVDVElPTl9NRDUpOwogfQogCiAvKioKKyAgKiBAYnJpZWYgIEVuZCBjb21wdXRhdGlvbiBvZiBhIHNpbmdsZSBIQVNIIHNpZ25hdHVyZSBhZnRlciBzZXZlcmFsIGNhbGxzIHRvIEhBTF9IQVNIX01ENV9BY2NtbHQoKSBBUEkuCisgICogQG5vdGUgICBEaWdlc3QgaXMgYXZhaWxhYmxlIGluIHBPdXRCdWZmZXIuCisgICogQHBhcmFtICBoaGFzaCBIQVNIIGhhbmRsZS4KKyAgKiBAcGFyYW0gIHBJbkJ1ZmZlciBwb2ludGVyIHRvIHRoZSBpbnB1dCBidWZmZXIgKGJ1ZmZlciB0byBiZSBoYXNoZWQpLgorICAqIEBwYXJhbSAgU2l6ZSBsZW5ndGggb2YgdGhlIGlucHV0IGJ1ZmZlciBpbiBieXRlcy4KKyAgKiBAcGFyYW0gIHBPdXRCdWZmZXIgcG9pbnRlciB0byB0aGUgY29tcHV0ZWQgZGlnZXN0LiBEaWdlc3Qgc2l6ZSBpcyAxNiBieXRlcy4KKyAgKiBAcGFyYW0gIFRpbWVvdXQgVGltZW91dCB2YWx1ZQorICAqIEByZXR2YWwgSEFMIHN0YXR1cworICAqLworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0hBU0hfTUQ1X0FjY21sdF9FbmQoSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCwgdWludDhfdCAqcEluQnVmZmVyLCB1aW50MzJfdCBTaXplLCB1aW50OF90KiBwT3V0QnVmZmVyLCB1aW50MzJfdCBUaW1lb3V0KQoreworICByZXR1cm4gSEFTSF9TdGFydChoaGFzaCwgcEluQnVmZmVyLCBTaXplLCBwT3V0QnVmZmVyLCBUaW1lb3V0LCBIQVNIX0FMR09TRUxFQ1RJT05fTUQ1KTsKK30KKworLyoqCiAgICogQGJyaWVmICBJbml0aWFsaXplIHRoZSBIQVNIIHBlcmlwaGVyYWwgaW4gU0hBMSBtb2RlLCBuZXh0IHByb2Nlc3MgcEluQnVmZmVyIHRoZW4KICAgKiAgICAgICAgIHJlYWQgdGhlIGNvbXB1dGVkIGRpZ2VzdC4KICAgKiBAbm90ZSAgIERpZ2VzdCBpcyBhdmFpbGFibGUgaW4gcE91dEJ1ZmZlci4KLSAgKiBAcGFyYW0gIGhoYXNoOiBIQVNIIGhhbmRsZS4KLSAgKiBAcGFyYW0gIHBJbkJ1ZmZlcjogcG9pbnRlciB0byB0aGUgaW5wdXQgYnVmZmVyIChidWZmZXIgdG8gYmUgaGFzaGVkKS4KLSAgKiBAcGFyYW0gIFNpemU6IGxlbmd0aCBvZiB0aGUgaW5wdXQgYnVmZmVyIGluIGJ5dGVzLgotICAqIEBwYXJhbSAgcE91dEJ1ZmZlcjogcG9pbnRlciB0byB0aGUgY29tcHV0ZWQgZGlnZXN0LiBEaWdlc3Qgc2l6ZSBpcyAyMCBieXRlcy4KLSAgKiBAcGFyYW0gIFRpbWVvdXQ6IFRpbWVvdXQgdmFsdWUKKyAgKiBAcGFyYW0gIGhoYXNoIEhBU0ggaGFuZGxlLgorICAqIEBwYXJhbSAgcEluQnVmZmVyIHBvaW50ZXIgdG8gdGhlIGlucHV0IGJ1ZmZlciAoYnVmZmVyIHRvIGJlIGhhc2hlZCkuCisgICogQHBhcmFtICBTaXplIGxlbmd0aCBvZiB0aGUgaW5wdXQgYnVmZmVyIGluIGJ5dGVzLgorICAqIEBwYXJhbSAgcE91dEJ1ZmZlciBwb2ludGVyIHRvIHRoZSBjb21wdXRlZCBkaWdlc3QuIERpZ2VzdCBzaXplIGlzIDIwIGJ5dGVzLgorICAqIEBwYXJhbSAgVGltZW91dCBUaW1lb3V0IHZhbHVlCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfSEFTSF9TSEExX1N0YXJ0KEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gsIHVpbnQ4X3QgKnBJbkJ1ZmZlciwgdWludDMyX3QgU2l6ZSwgdWludDhfdCogcE91dEJ1ZmZlciwgdWludDMyX3QgVGltZW91dCkKQEAgLTc2MiwyOCArODIzLDQyIEBACiAvKioKICAgKiBAYnJpZWYgIElmIG5vdCBhbHJlYWR5IGRvbmUsIGluaXRpYWxpemUgdGhlIEhBU0ggcGVyaXBoZXJhbCBpbiBTSEExIG1vZGUgdGhlbgogICAqICAgICAgICAgcHJvY2Vzc2VzIHBJbkJ1ZmZlci4KLSAgKiBAbm90ZSAgIENvbnNlY3V0aXZlIGNhbGxzIHRvIEhBTF9IQVNIX1NIQTFfQWNjdW11bGF0ZSgpIGNhbiBiZSB1c2VkIHRvIGZlZWQKLSAgKiAgICAgICAgIHNldmVyYWwgaW5wdXQgYnVmZmVycyBiYWNrLXRvLWJhY2sgdG8gdGhlIElQIHRoYXQgd2lsbCB5aWVsZCBhIHNpbmdsZQorICAqIEBub3RlICAgQ29uc2VjdXRpdmUgY2FsbHMgdG8gSEFMX0hBU0hfU0hBMV9BY2NtbHQoKSBjYW4gYmUgdXNlZCB0byBmZWVkCisgICogICAgICAgICBzZXZlcmFsIGlucHV0IGJ1ZmZlcnMgYmFjay10by1iYWNrIHRvIHRoZSBQZXJpcGhlcmFsIHRoYXQgd2lsbCB5aWVsZCBhIHNpbmdsZQogICAqICAgICAgICAgSEFTSCBzaWduYXR1cmUgb25jZSBhbGwgYnVmZmVycyBoYXZlIGJlZW4gZW50ZXJlZC4gV3JhcC11cCBvZiBpbnB1dAogICAqICAgICAgICAgYnVmZmVycyBmZWVkaW5nIGFuZCByZXRyaWV2YWwgb2YgZGlnZXN0IGlzIGRvbmUgYnkgYSBjYWxsIHRvCi0gICogICAgICAgICBIQUxfSEFTSF9TSEExX1N0YXJ0KCkuCisgICogICAgICAgICBIQUxfSEFTSF9TSEExX0FjY21sdF9FbmQoKS4KICAgKiBAbm90ZSAgIEZpZWxkIGhoYXNoLT5QaGFzZSBvZiBIQVNIIGhhbmRsZSBpcyB0ZXN0ZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKLSAgKiAgICAgICAgIHRoZSBJUCBoYXMgYWxyZWFkeSBiZWVuIGluaXRpYWxpemVkLgotICAqIEBub3RlICAgRGlnZXN0IGlzIG5vdCByZXRyaWV2ZWQgYnkgdGhpcyBBUEksIHVzZXIgbXVzdCByZXNvcnQgdG8gSEFMX0hBU0hfU0hBMV9TdGFydCgpCi0gICogICAgICAgICB0byByZWFkIGl0LCBmZWVkaW5nIGF0IHRoZSBzYW1lIHRpbWUgdGhlIGxhc3QgaW5wdXQgYnVmZmVyIHRvIHRoZSBJUC4KKyAgKiAgICAgICAgIHRoZSBQZXJpcGhlcmFsIGhhcyBhbHJlYWR5IGJlZW4gaW5pdGlhbGl6ZWQuCisgICogQG5vdGUgICBEaWdlc3QgaXMgbm90IHJldHJpZXZlZCBieSB0aGlzIEFQSSwgdXNlciBtdXN0IHJlc29ydCB0byBIQUxfSEFTSF9TSEExX0FjY21sdF9FbmQoKQorICAqICAgICAgICAgdG8gcmVhZCBpdCwgZmVlZGluZyBhdCB0aGUgc2FtZSB0aW1lIHRoZSBsYXN0IGlucHV0IGJ1ZmZlciB0byB0aGUgUGVyaXBoZXJhbC4KICAgKiBAbm90ZSAgIFRoZSBpbnB1dCBidWZmZXIgc2l6ZSAoaW4gYnl0ZXMpIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0IG90aGVyd2lzZSwgdGhlCi0gICogICAgICAgICBIQVNIIGRpZ2VzdCBjb21wdXRhdGlvbiBpcyBjb3JydXB0ZWQuIE9ubHkgSEFMX0hBU0hfU0hBMV9TdGFydCgpIGlzIGFibGUKKyAgKiAgICAgICAgIEhBU0ggZGlnZXN0IGNvbXB1dGF0aW9uIGlzIGNvcnJ1cHRlZC4gT25seSBIQUxfSEFTSF9TSEExX0FjY21sdF9FbmQoKSBpcyBhYmxlCiAgICogICAgICAgICB0byBtYW5hZ2UgdGhlIGVuZGluZyBidWZmZXIgd2l0aCBhIGxlbmd0aCBpbiBieXRlcyBub3QgYSBtdWx0aXBsZSBvZiA0LgotICAqIEBwYXJhbSAgaGhhc2g6IEhBU0ggaGFuZGxlLgotICAqIEBwYXJhbSAgcEluQnVmZmVyOiBwb2ludGVyIHRvIHRoZSBpbnB1dCBidWZmZXIgKGJ1ZmZlciB0byBiZSBoYXNoZWQpLgotICAqIEBwYXJhbSAgU2l6ZTogbGVuZ3RoIG9mIHRoZSBpbnB1dCBidWZmZXIgaW4gYnl0ZXMsIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0LgorICAqIEBwYXJhbSAgaGhhc2ggSEFTSCBoYW5kbGUuCisgICogQHBhcmFtICBwSW5CdWZmZXIgcG9pbnRlciB0byB0aGUgaW5wdXQgYnVmZmVyIChidWZmZXIgdG8gYmUgaGFzaGVkKS4KKyAgKiBAcGFyYW0gIFNpemUgbGVuZ3RoIG9mIHRoZSBpbnB1dCBidWZmZXIgaW4gYnl0ZXMsIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0LgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0hBU0hfU0hBMV9BY2N1bXVsYXRlKEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gsIHVpbnQ4X3QgKnBJbkJ1ZmZlciwgdWludDMyX3QgU2l6ZSkKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9IQVNIX1NIQTFfQWNjbWx0KEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gsIHVpbnQ4X3QgKnBJbkJ1ZmZlciwgdWludDMyX3QgU2l6ZSkKIHsKICAgcmV0dXJuICBIQVNIX0FjY3VtdWxhdGUoaGhhc2gsIHBJbkJ1ZmZlciwgU2l6ZSxIQVNIX0FMR09TRUxFQ1RJT05fU0hBMSk7CiB9CiAKKy8qKgorICAqIEBicmllZiAgRW5kIGNvbXB1dGF0aW9uIG9mIGEgc2luZ2xlIEhBU0ggc2lnbmF0dXJlIGFmdGVyIHNldmVyYWwgY2FsbHMgdG8gSEFMX0hBU0hfU0hBMV9BY2NtbHQoKSBBUEkuCisgICogQG5vdGUgICBEaWdlc3QgaXMgYXZhaWxhYmxlIGluIHBPdXRCdWZmZXIuCisgICogQHBhcmFtICBoaGFzaCBIQVNIIGhhbmRsZS4KKyAgKiBAcGFyYW0gIHBJbkJ1ZmZlciBwb2ludGVyIHRvIHRoZSBpbnB1dCBidWZmZXIgKGJ1ZmZlciB0byBiZSBoYXNoZWQpLgorICAqIEBwYXJhbSAgU2l6ZSBsZW5ndGggb2YgdGhlIGlucHV0IGJ1ZmZlciBpbiBieXRlcy4KKyAgKiBAcGFyYW0gIHBPdXRCdWZmZXIgcG9pbnRlciB0byB0aGUgY29tcHV0ZWQgZGlnZXN0LiBEaWdlc3Qgc2l6ZSBpcyAyMCBieXRlcy4KKyAgKiBAcGFyYW0gIFRpbWVvdXQgVGltZW91dCB2YWx1ZQorICAqIEByZXR2YWwgSEFMIHN0YXR1cworICAqLworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0hBU0hfU0hBMV9BY2NtbHRfRW5kKEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gsIHVpbnQ4X3QgKnBJbkJ1ZmZlciwgdWludDMyX3QgU2l6ZSwgdWludDhfdCogcE91dEJ1ZmZlciwgdWludDMyX3QgVGltZW91dCkKK3sKKyAgcmV0dXJuIEhBU0hfU3RhcnQoaGhhc2gsIHBJbkJ1ZmZlciwgU2l6ZSwgcE91dEJ1ZmZlciwgVGltZW91dCwgSEFTSF9BTEdPU0VMRUNUSU9OX1NIQTEpOworfQogCiAvKioKICAgKiBAfQpAQCAtODAwLDEyICs4NzUsMTYgQEAKICAgICAgICAgICB0aGUgaGFzaCB2YWx1ZSB1c2luZyBvbmUgb2YgdGhlIGZvbGxvd2luZyBhbGdvcml0aG1zOgogICAgICAgKCspIE1ENQogICAgICAgICAgKCsrKSBIQUxfSEFTSF9NRDVfU3RhcnRfSVQoKQorICAgICAgICAgKCsrKSBIQUxfSEFTSF9NRDVfQWNjbWx0X0lUKCkKKyAgICAgICAgICgrKykgSEFMX0hBU0hfTUQ1X0FjY21sdF9FbmRfSVQoKQogICAgICAgKCspIFNIQTEKICAgICAgICAgICgrKykgSEFMX0hBU0hfU0hBMV9TdGFydF9JVCgpCisgICAgICAgICAoKyspIEhBTF9IQVNIX1NIQTFfQWNjbWx0X0lUKCkKKyAgICAgICAgICgrKykgSEFMX0hBU0hfU0hBMV9BY2NtbHRfRW5kX0lUKCkKIAogICAgIFsuLl0gIEFQSSBIQUxfSEFTSF9JUlFIYW5kbGVyKCkgbWFuYWdlcyBlYWNoIEhBU0ggaW50ZXJydXB0aW9uLgogCi0gICAgWy4uXSBOb3RlIHRoYXQgSEFMX0hBU0hfSVJRSGFuZGxlcigpIG1hbmFnZXMgYXMgd2VsbCBIQVNIIElQIGludGVycnVwdGlvbnMgd2hlbiBpbgorICAgIFsuLl0gTm90ZSB0aGF0IEhBTF9IQVNIX0lSUUhhbmRsZXIoKSBtYW5hZ2VzIGFzIHdlbGwgSEFTSCBQZXJpcGhlcmFsIGludGVycnVwdGlvbnMgd2hlbiBpbgogICAgICAgICAgSE1BQyBwcm9jZXNzaW5nIG1vZGUuCiAKIApAQCAtODE3LDEwICs4OTYsMTAgQEAKICAgKiBAYnJpZWYgIEluaXRpYWxpemUgdGhlIEhBU0ggcGVyaXBoZXJhbCBpbiBNRDUgbW9kZSwgbmV4dCBwcm9jZXNzIHBJbkJ1ZmZlciB0aGVuCiAgICogICAgICAgICByZWFkIHRoZSBjb21wdXRlZCBkaWdlc3QgaW4gaW50ZXJydXB0aW9uIG1vZGUuCiAgICogQG5vdGUgICBEaWdlc3QgaXMgYXZhaWxhYmxlIGluIHBPdXRCdWZmZXIuCi0gICogQHBhcmFtICBoaGFzaDogSEFTSCBoYW5kbGUuCi0gICogQHBhcmFtICBwSW5CdWZmZXI6IHBvaW50ZXIgdG8gdGhlIGlucHV0IGJ1ZmZlciAoYnVmZmVyIHRvIGJlIGhhc2hlZCkuCi0gICogQHBhcmFtICBTaXplOiBsZW5ndGggb2YgdGhlIGlucHV0IGJ1ZmZlciBpbiBieXRlcy4KLSAgKiBAcGFyYW0gIHBPdXRCdWZmZXI6IHBvaW50ZXIgdG8gdGhlIGNvbXB1dGVkIGRpZ2VzdC4gRGlnZXN0IHNpemUgaXMgMTYgYnl0ZXMuCisgICogQHBhcmFtICBoaGFzaCBIQVNIIGhhbmRsZS4KKyAgKiBAcGFyYW0gIHBJbkJ1ZmZlciBwb2ludGVyIHRvIHRoZSBpbnB1dCBidWZmZXIgKGJ1ZmZlciB0byBiZSBoYXNoZWQpLgorICAqIEBwYXJhbSAgU2l6ZSBsZW5ndGggb2YgdGhlIGlucHV0IGJ1ZmZlciBpbiBieXRlcy4KKyAgKiBAcGFyYW0gIHBPdXRCdWZmZXIgcG9pbnRlciB0byB0aGUgY29tcHV0ZWQgZGlnZXN0LiBEaWdlc3Qgc2l6ZSBpcyAxNiBieXRlcy4KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9IQVNIX01ENV9TdGFydF9JVChIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoLCB1aW50OF90ICpwSW5CdWZmZXIsIHVpbnQzMl90IFNpemUsIHVpbnQ4X3QqIHBPdXRCdWZmZXIpCkBAIC04MjgsMTUgKzkwNyw1MSBAQAogICByZXR1cm4gSEFTSF9TdGFydF9JVChoaGFzaCwgcEluQnVmZmVyLCBTaXplLCBwT3V0QnVmZmVyLEhBU0hfQUxHT1NFTEVDVElPTl9NRDUpOwogfQogCisvKioKKyAgKiBAYnJpZWYgIElmIG5vdCBhbHJlYWR5IGRvbmUsIGluaXRpYWxpemUgdGhlIEhBU0ggcGVyaXBoZXJhbCBpbiBNRDUgbW9kZSB0aGVuCisgICogICAgICAgICBwcm9jZXNzZXMgcEluQnVmZmVyIGluIGludGVycnVwdGlvbiBtb2RlLgorICAqIEBub3RlICAgQ29uc2VjdXRpdmUgY2FsbHMgdG8gSEFMX0hBU0hfTUQ1X0FjY21sdF9JVCgpIGNhbiBiZSB1c2VkIHRvIGZlZWQKKyAgKiAgICAgICAgIHNldmVyYWwgaW5wdXQgYnVmZmVycyBiYWNrLXRvLWJhY2sgdG8gdGhlIFBlcmlwaGVyYWwgdGhhdCB3aWxsIHlpZWxkIGEgc2luZ2xlCisgICogICAgICAgICBIQVNIIHNpZ25hdHVyZSBvbmNlIGFsbCBidWZmZXJzIGhhdmUgYmVlbiBlbnRlcmVkLiBXcmFwLXVwIG9mIGlucHV0CisgICogICAgICAgICBidWZmZXJzIGZlZWRpbmcgYW5kIHJldHJpZXZhbCBvZiBkaWdlc3QgaXMgZG9uZSBieSBhIGNhbGwgdG8KKyAgKiAgICAgICAgIEhBTF9IQVNIX01ENV9BY2NtbHRfRW5kX0lUKCkuCisgICogQG5vdGUgICBGaWVsZCBoaGFzaC0+UGhhc2Ugb2YgSEFTSCBoYW5kbGUgaXMgdGVzdGVkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogICAgICAgICB0aGUgUGVyaXBoZXJhbCBoYXMgYWxyZWFkeSBiZWVuIGluaXRpYWxpemVkLgorICAqIEBub3RlICAgVGhlIGlucHV0IGJ1ZmZlciBzaXplIChpbiBieXRlcykgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQgb3RoZXJ3aXNlLCB0aGUKKyAgKiAgICAgICAgIEhBU0ggZGlnZXN0IGNvbXB1dGF0aW9uIGlzIGNvcnJ1cHRlZC4gT25seSBIQUxfSEFTSF9NRDVfQWNjbWx0X0VuZF9JVCgpIGlzIGFibGUKKyAgKiAgICAgICAgIHRvIG1hbmFnZSB0aGUgZW5kaW5nIGJ1ZmZlciB3aXRoIGEgbGVuZ3RoIGluIGJ5dGVzIG5vdCBhIG11bHRpcGxlIG9mIDQuCisgICogQHBhcmFtICBoaGFzaCBIQVNIIGhhbmRsZS4KKyAgKiBAcGFyYW0gIHBJbkJ1ZmZlciBwb2ludGVyIHRvIHRoZSBpbnB1dCBidWZmZXIgKGJ1ZmZlciB0byBiZSBoYXNoZWQpLgorICAqIEBwYXJhbSAgU2l6ZSBsZW5ndGggb2YgdGhlIGlucHV0IGJ1ZmZlciBpbiBieXRlcywgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQuCisgICogQHJldHZhbCBIQUwgc3RhdHVzCisgICovCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfSEFTSF9NRDVfQWNjbWx0X0lUKEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gsIHVpbnQ4X3QgKnBJbkJ1ZmZlciwgdWludDMyX3QgU2l6ZSkKK3sKKyAgcmV0dXJuICBIQVNIX0FjY3VtdWxhdGVfSVQoaGhhc2gsIHBJbkJ1ZmZlciwgU2l6ZSxIQVNIX0FMR09TRUxFQ1RJT05fTUQ1KTsKK30KKworLyoqCisgICogQGJyaWVmICBFbmQgY29tcHV0YXRpb24gb2YgYSBzaW5nbGUgSEFTSCBzaWduYXR1cmUgYWZ0ZXIgc2V2ZXJhbCBjYWxscyB0byBIQUxfSEFTSF9NRDVfQWNjbWx0X0lUKCkgQVBJLgorICAqIEBub3RlICAgRGlnZXN0IGlzIGF2YWlsYWJsZSBpbiBwT3V0QnVmZmVyLgorICAqIEBwYXJhbSAgaGhhc2ggSEFTSCBoYW5kbGUuCisgICogQHBhcmFtICBwSW5CdWZmZXIgcG9pbnRlciB0byB0aGUgaW5wdXQgYnVmZmVyIChidWZmZXIgdG8gYmUgaGFzaGVkKS4KKyAgKiBAcGFyYW0gIFNpemUgbGVuZ3RoIG9mIHRoZSBpbnB1dCBidWZmZXIgaW4gYnl0ZXMuCisgICogQHBhcmFtICBwT3V0QnVmZmVyIHBvaW50ZXIgdG8gdGhlIGNvbXB1dGVkIGRpZ2VzdC4gRGlnZXN0IHNpemUgaXMgMTYgYnl0ZXMuCisgICogQHJldHZhbCBIQUwgc3RhdHVzCisgICovCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfSEFTSF9NRDVfQWNjbWx0X0VuZF9JVChIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoLCB1aW50OF90ICpwSW5CdWZmZXIsIHVpbnQzMl90IFNpemUsIHVpbnQ4X3QqIHBPdXRCdWZmZXIpCit7CisgIHJldHVybiBIQVNIX1N0YXJ0X0lUKGhoYXNoLCBwSW5CdWZmZXIsIFNpemUsIHBPdXRCdWZmZXIsSEFTSF9BTEdPU0VMRUNUSU9OX01ENSk7Cit9CiAKIC8qKgogICAqIEBicmllZiAgSW5pdGlhbGl6ZSB0aGUgSEFTSCBwZXJpcGhlcmFsIGluIFNIQTEgbW9kZSwgbmV4dCBwcm9jZXNzIHBJbkJ1ZmZlciB0aGVuCiAgICogICAgICAgICByZWFkIHRoZSBjb21wdXRlZCBkaWdlc3QgaW4gaW50ZXJydXB0aW9uIG1vZGUuCiAgICogQG5vdGUgICBEaWdlc3QgaXMgYXZhaWxhYmxlIGluIHBPdXRCdWZmZXIuCi0gICogQHBhcmFtICBoaGFzaDogSEFTSCBoYW5kbGUuCi0gICogQHBhcmFtICBwSW5CdWZmZXI6IHBvaW50ZXIgdG8gdGhlIGlucHV0IGJ1ZmZlciAoYnVmZmVyIHRvIGJlIGhhc2hlZCkuCi0gICogQHBhcmFtICBTaXplOiBsZW5ndGggb2YgdGhlIGlucHV0IGJ1ZmZlciBpbiBieXRlcy4KLSAgKiBAcGFyYW0gIHBPdXRCdWZmZXI6IHBvaW50ZXIgdG8gdGhlIGNvbXB1dGVkIGRpZ2VzdC4gRGlnZXN0IHNpemUgaXMgMjAgYnl0ZXMuCisgICogQHBhcmFtICBoaGFzaCBIQVNIIGhhbmRsZS4KKyAgKiBAcGFyYW0gIHBJbkJ1ZmZlciBwb2ludGVyIHRvIHRoZSBpbnB1dCBidWZmZXIgKGJ1ZmZlciB0byBiZSBoYXNoZWQpLgorICAqIEBwYXJhbSAgU2l6ZSBsZW5ndGggb2YgdGhlIGlucHV0IGJ1ZmZlciBpbiBieXRlcy4KKyAgKiBAcGFyYW0gIHBPdXRCdWZmZXIgcG9pbnRlciB0byB0aGUgY29tcHV0ZWQgZGlnZXN0LiBEaWdlc3Qgc2l6ZSBpcyAyMCBieXRlcy4KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9IQVNIX1NIQTFfU3RhcnRfSVQoSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCwgdWludDhfdCAqcEluQnVmZmVyLCB1aW50MzJfdCBTaXplLCB1aW50OF90KiBwT3V0QnVmZmVyKQpAQCAtODQ0LDkgKzk1OSw0NyBAQAogICByZXR1cm4gSEFTSF9TdGFydF9JVChoaGFzaCwgcEluQnVmZmVyLCBTaXplLCBwT3V0QnVmZmVyLEhBU0hfQUxHT1NFTEVDVElPTl9TSEExKTsKIH0KIAorCisvKioKKyAgKiBAYnJpZWYgIElmIG5vdCBhbHJlYWR5IGRvbmUsIGluaXRpYWxpemUgdGhlIEhBU0ggcGVyaXBoZXJhbCBpbiBTSEExIG1vZGUgdGhlbgorICAqICAgICAgICAgcHJvY2Vzc2VzIHBJbkJ1ZmZlciBpbiBpbnRlcnJ1cHRpb24gbW9kZS4KKyAgKiBAbm90ZSAgIENvbnNlY3V0aXZlIGNhbGxzIHRvIEhBTF9IQVNIX1NIQTFfQWNjbWx0X0lUKCkgY2FuIGJlIHVzZWQgdG8gZmVlZAorICAqICAgICAgICAgc2V2ZXJhbCBpbnB1dCBidWZmZXJzIGJhY2stdG8tYmFjayB0byB0aGUgUGVyaXBoZXJhbCB0aGF0IHdpbGwgeWllbGQgYSBzaW5nbGUKKyAgKiAgICAgICAgIEhBU0ggc2lnbmF0dXJlIG9uY2UgYWxsIGJ1ZmZlcnMgaGF2ZSBiZWVuIGVudGVyZWQuIFdyYXAtdXAgb2YgaW5wdXQKKyAgKiAgICAgICAgIGJ1ZmZlcnMgZmVlZGluZyBhbmQgcmV0cmlldmFsIG9mIGRpZ2VzdCBpcyBkb25lIGJ5IGEgY2FsbCB0bworICAqICAgICAgICAgSEFMX0hBU0hfU0hBMV9BY2NtbHRfRW5kX0lUKCkuCisgICogQG5vdGUgICBGaWVsZCBoaGFzaC0+UGhhc2Ugb2YgSEFTSCBoYW5kbGUgaXMgdGVzdGVkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogICAgICAgICB0aGUgUGVyaXBoZXJhbCBoYXMgYWxyZWFkeSBiZWVuIGluaXRpYWxpemVkLgorICAqIEBub3RlICAgVGhlIGlucHV0IGJ1ZmZlciBzaXplIChpbiBieXRlcykgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQgb3RoZXJ3aXNlLCB0aGUKKyAgKiAgICAgICAgIEhBU0ggZGlnZXN0IGNvbXB1dGF0aW9uIGlzIGNvcnJ1cHRlZC4gT25seSBIQUxfSEFTSF9TSEExX0FjY21sdF9FbmRfSVQoKSBpcyBhYmxlCisgICogICAgICAgICB0byBtYW5hZ2UgdGhlIGVuZGluZyBidWZmZXIgd2l0aCBhIGxlbmd0aCBpbiBieXRlcyBub3QgYSBtdWx0aXBsZSBvZiA0LgorICAqIEBwYXJhbSAgaGhhc2ggSEFTSCBoYW5kbGUuCisgICogQHBhcmFtICBwSW5CdWZmZXIgcG9pbnRlciB0byB0aGUgaW5wdXQgYnVmZmVyIChidWZmZXIgdG8gYmUgaGFzaGVkKS4KKyAgKiBAcGFyYW0gIFNpemUgbGVuZ3RoIG9mIHRoZSBpbnB1dCBidWZmZXIgaW4gYnl0ZXMsIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0LgorICAqIEByZXR2YWwgSEFMIHN0YXR1cworICAqLworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0hBU0hfU0hBMV9BY2NtbHRfSVQoSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCwgdWludDhfdCAqcEluQnVmZmVyLCB1aW50MzJfdCBTaXplKQoreworICByZXR1cm4gIEhBU0hfQWNjdW11bGF0ZV9JVChoaGFzaCwgcEluQnVmZmVyLCBTaXplLEhBU0hfQUxHT1NFTEVDVElPTl9TSEExKTsKK30KKworLyoqCisgICogQGJyaWVmICBFbmQgY29tcHV0YXRpb24gb2YgYSBzaW5nbGUgSEFTSCBzaWduYXR1cmUgYWZ0ZXIgc2V2ZXJhbCBjYWxscyB0byBIQUxfSEFTSF9TSEExX0FjY21sdF9JVCgpIEFQSS4KKyAgKiBAbm90ZSAgIERpZ2VzdCBpcyBhdmFpbGFibGUgaW4gcE91dEJ1ZmZlci4KKyAgKiBAcGFyYW0gIGhoYXNoIEhBU0ggaGFuZGxlLgorICAqIEBwYXJhbSAgcEluQnVmZmVyIHBvaW50ZXIgdG8gdGhlIGlucHV0IGJ1ZmZlciAoYnVmZmVyIHRvIGJlIGhhc2hlZCkuCisgICogQHBhcmFtICBTaXplIGxlbmd0aCBvZiB0aGUgaW5wdXQgYnVmZmVyIGluIGJ5dGVzLgorICAqIEBwYXJhbSAgcE91dEJ1ZmZlciBwb2ludGVyIHRvIHRoZSBjb21wdXRlZCBkaWdlc3QuIERpZ2VzdCBzaXplIGlzIDIwIGJ5dGVzLgorICAqIEByZXR2YWwgSEFMIHN0YXR1cworICAqLworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0hBU0hfU0hBMV9BY2NtbHRfRW5kX0lUKEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gsIHVpbnQ4X3QgKnBJbkJ1ZmZlciwgdWludDMyX3QgU2l6ZSwgdWludDhfdCogcE91dEJ1ZmZlcikKK3sKKyAgcmV0dXJuIEhBU0hfU3RhcnRfSVQoaGhhc2gsIHBJbkJ1ZmZlciwgU2l6ZSwgcE91dEJ1ZmZlcixIQVNIX0FMR09TRUxFQ1RJT05fU0hBMSk7Cit9CisKIC8qKgogICAqIEBicmllZiBIYW5kbGUgSEFTSCBpbnRlcnJ1cHQgcmVxdWVzdC4KLSAgKiBAcGFyYW0gaGhhc2g6IEhBU0ggaGFuZGxlLgorICAqIEBwYXJhbSBoaGFzaCBIQVNIIGhhbmRsZS4KICAgKiBAbm90ZSAgSEFMX0hBU0hfSVJRSGFuZGxlcigpIGhhbmRsZXMgaW50ZXJydXB0cyBpbiBITUFDIHByb2Nlc3NpbmcgYXMgd2VsbC4KICAgKiBAbm90ZSAgSW4gY2FzZSBvZiBlcnJvciByZXBvcnRlZCBkdXJpbmcgdGhlIEhBU0ggaW50ZXJydXB0aW9uIHByb2Nlc3NpbmcsCiAgICogICAgICAgIEhBTF9IQVNIX0Vycm9yQ2FsbGJhY2soKSBBUEkgaXMgY2FsbGVkIHNvIHRoYXQgdXNlciBjb2RlIGNhbgpAQCAtODg5LDcgKzEwNDIsNyBAQAogICAgICAgICAgKCsrKSBIQUxfSEFTSF9TSEExX1N0YXJ0X0RNQSgpCiAgICAgICAgICAoKyspIEhBTF9IQVNIX1NIQTFfRmluaXNoKCkKIAotICAgIFsuLl0gIFdoZW4gcmVzb3J0aW5nIHRvIERNQSBtb2RlIHRvIGVudGVyIHRoZSBkYXRhIGluIHRoZSBJUCwgdXNlciBtdXN0IHJlc29ydAorICAgIFsuLl0gIFdoZW4gcmVzb3J0aW5nIHRvIERNQSBtb2RlIHRvIGVudGVyIHRoZSBkYXRhIGluIHRoZSBQZXJpcGhlcmFsLCB1c2VyIG11c3QgcmVzb3J0CiAgICAgICAgICAgdG8gIEhBTF9IQVNIX3h4eF9TdGFydF9ETUEoKSB0aGVuIHJlYWQgdGhlIHJlc3VsdGluZyBkaWdlc3Qgd2l0aAogICAgICAgICAgIEhBTF9IQVNIX3h4eF9GaW5pc2goKS4KICAgICBbLi5dICBJbiBjYXNlIG9mIG11bHRpLWJ1ZmZlciBIQVNIIHByb2Nlc3NpbmcsIE1ETUFUIGJpdCBtdXN0IGZpcnN0IGJlIHNldCBiZWZvcmUKQEAgLTkwMywxMiArMTA1NiwxMiBAQAogCiAvKioKICAgKiBAYnJpZWYgIEluaXRpYWxpemUgdGhlIEhBU0ggcGVyaXBoZXJhbCBpbiBNRDUgbW9kZSB0aGVuIGluaXRpYXRlIGEgRE1BIHRyYW5zZmVyCi0gICogICAgICAgICB0byBmZWVkIHRoZSBpbnB1dCBidWZmZXIgdG8gdGhlIElQLgorICAqICAgICAgICAgdG8gZmVlZCB0aGUgaW5wdXQgYnVmZmVyIHRvIHRoZSBQZXJpcGhlcmFsLgogICAqIEBub3RlICAgT25jZSB0aGUgRE1BIHRyYW5zZmVyIGlzIGZpbmlzaGVkLCBIQUxfSEFTSF9NRDVfRmluaXNoKCkgQVBJIG11c3QKICAgKiAgICAgICAgIGJlIGNhbGxlZCB0byByZXRyaWV2ZSB0aGUgY29tcHV0ZWQgZGlnZXN0LgotICAqIEBwYXJhbSAgaGhhc2g6IEhBU0ggaGFuZGxlLgotICAqIEBwYXJhbSAgcEluQnVmZmVyOiBwb2ludGVyIHRvIHRoZSBpbnB1dCBidWZmZXIgKGJ1ZmZlciB0byBiZSBoYXNoZWQpLgotICAqIEBwYXJhbSAgU2l6ZTogbGVuZ3RoIG9mIHRoZSBpbnB1dCBidWZmZXIgaW4gYnl0ZXMuCisgICogQHBhcmFtICBoaGFzaCBIQVNIIGhhbmRsZS4KKyAgKiBAcGFyYW0gIHBJbkJ1ZmZlciBwb2ludGVyIHRvIHRoZSBpbnB1dCBidWZmZXIgKGJ1ZmZlciB0byBiZSBoYXNoZWQpLgorICAqIEBwYXJhbSAgU2l6ZSBsZW5ndGggb2YgdGhlIGlucHV0IGJ1ZmZlciBpbiBieXRlcy4KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9IQVNIX01ENV9TdGFydF9ETUEoSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCwgdWludDhfdCAqcEluQnVmZmVyLCB1aW50MzJfdCBTaXplKQpAQCAtOTIxLDkgKzEwNzQsOSBAQAogICAqIEBub3RlICAgVGhlIEFQSSB3YWl0cyBmb3IgRENJUyB0byBiZSBzZXQgdGhlbiByZWFkcyB0aGUgY29tcHV0ZWQgZGlnZXN0LgogICAqIEBub3RlICAgSEFMX0hBU0hfTUQ1X0ZpbmlzaCgpIGNhbiBiZSB1c2VkIGFzIHdlbGwgdG8gcmV0cmlldmUgdGhlIGRpZ2VzdCBpbgogICAqICAgICAgICAgSE1BQyBNRDUgbW9kZS4KLSAgKiBAcGFyYW0gIGhoYXNoOiBIQVNIIGhhbmRsZS4KLSAgKiBAcGFyYW0gIHBPdXRCdWZmZXI6IHBvaW50ZXIgdG8gdGhlIGNvbXB1dGVkIGRpZ2VzdC4gRGlnZXN0IHNpemUgaXMgMTYgYnl0ZXMuCi0gICogQHBhcmFtICBUaW1lb3V0OiBUaW1lb3V0IHZhbHVlLgorICAqIEBwYXJhbSAgaGhhc2ggSEFTSCBoYW5kbGUuCisgICogQHBhcmFtICBwT3V0QnVmZmVyIHBvaW50ZXIgdG8gdGhlIGNvbXB1dGVkIGRpZ2VzdC4gRGlnZXN0IHNpemUgaXMgMTYgYnl0ZXMuCisgICogQHBhcmFtICBUaW1lb3V0IFRpbWVvdXQgdmFsdWUuCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfSEFTSF9NRDVfRmluaXNoKEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gsIHVpbnQ4X3QqIHBPdXRCdWZmZXIsIHVpbnQzMl90IFRpbWVvdXQpCkBAIC05MzMsMTIgKzEwODYsMTIgQEAKIAogLyoqCiAgICogQGJyaWVmICBJbml0aWFsaXplIHRoZSBIQVNIIHBlcmlwaGVyYWwgaW4gU0hBMSBtb2RlIHRoZW4gaW5pdGlhdGUgYSBETUEgdHJhbnNmZXIKLSAgKiAgICAgICAgIHRvIGZlZWQgdGhlIGlucHV0IGJ1ZmZlciB0byB0aGUgSVAuCisgICogICAgICAgICB0byBmZWVkIHRoZSBpbnB1dCBidWZmZXIgdG8gdGhlIFBlcmlwaGVyYWwuCiAgICogQG5vdGUgICBPbmNlIHRoZSBETUEgdHJhbnNmZXIgaXMgZmluaXNoZWQsIEhBTF9IQVNIX1NIQTFfRmluaXNoKCkgQVBJIG11c3QKICAgKiAgICAgICAgIGJlIGNhbGxlZCB0byByZXRyaWV2ZSB0aGUgY29tcHV0ZWQgZGlnZXN0LgotICAqIEBwYXJhbSAgaGhhc2g6IEhBU0ggaGFuZGxlLgotICAqIEBwYXJhbSAgcEluQnVmZmVyOiBwb2ludGVyIHRvIHRoZSBpbnB1dCBidWZmZXIgKGJ1ZmZlciB0byBiZSBoYXNoZWQpLgotICAqIEBwYXJhbSAgU2l6ZTogbGVuZ3RoIG9mIHRoZSBpbnB1dCBidWZmZXIgaW4gYnl0ZXMuCisgICogQHBhcmFtICBoaGFzaCBIQVNIIGhhbmRsZS4KKyAgKiBAcGFyYW0gIHBJbkJ1ZmZlciBwb2ludGVyIHRvIHRoZSBpbnB1dCBidWZmZXIgKGJ1ZmZlciB0byBiZSBoYXNoZWQpLgorICAqIEBwYXJhbSAgU2l6ZSBsZW5ndGggb2YgdGhlIGlucHV0IGJ1ZmZlciBpbiBieXRlcy4KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9IQVNIX1NIQTFfU3RhcnRfRE1BKEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gsIHVpbnQ4X3QgKnBJbkJ1ZmZlciwgdWludDMyX3QgU2l6ZSkKQEAgLTk1Miw5ICsxMTA1LDkgQEAKICAgKiBAbm90ZSAgIFRoZSBBUEkgd2FpdHMgZm9yIERDSVMgdG8gYmUgc2V0IHRoZW4gcmVhZHMgdGhlIGNvbXB1dGVkIGRpZ2VzdC4KICAgKiBAbm90ZSAgIEhBTF9IQVNIX1NIQTFfRmluaXNoKCkgY2FuIGJlIHVzZWQgYXMgd2VsbCB0byByZXRyaWV2ZSB0aGUgZGlnZXN0IGluCiAgICogICAgICAgICBITUFDIFNIQTEgbW9kZS4KLSAgKiBAcGFyYW0gIGhoYXNoOiBIQVNIIGhhbmRsZS4KLSAgKiBAcGFyYW0gIHBPdXRCdWZmZXI6IHBvaW50ZXIgdG8gdGhlIGNvbXB1dGVkIGRpZ2VzdC4gRGlnZXN0IHNpemUgaXMgMjAgYnl0ZXMuCi0gICogQHBhcmFtICBUaW1lb3V0OiBUaW1lb3V0IHZhbHVlLgorICAqIEBwYXJhbSAgaGhhc2ggSEFTSCBoYW5kbGUuCisgICogQHBhcmFtICBwT3V0QnVmZmVyIHBvaW50ZXIgdG8gdGhlIGNvbXB1dGVkIGRpZ2VzdC4gRGlnZXN0IHNpemUgaXMgMjAgYnl0ZXMuCisgICogQHBhcmFtICBUaW1lb3V0IFRpbWVvdXQgdmFsdWUuCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfSEFTSF9TSEExX0ZpbmlzaChIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoLCB1aW50OF90KiBwT3V0QnVmZmVyLCB1aW50MzJfdCBUaW1lb3V0KQpAQCAtOTkxLDExICsxMTQ0LDExIEBACiAgICogQG5vdGUgICBEaWdlc3QgaXMgYXZhaWxhYmxlIGluIHBPdXRCdWZmZXIuCiAgICogQG5vdGUgICBTYW1lIGtleSBpcyB1c2VkIGZvciB0aGUgaW5uZXIgYW5kIHRoZSBvdXRlciBoYXNoIGZ1bmN0aW9uczsgcG9pbnRlciB0byBrZXkgYW5kCiAgICogICAgICAgICBrZXkgc2l6ZSBhcmUgcmVzcGVjdGl2ZWx5IHN0b3JlZCBpbiBoaGFzaC0+SW5pdC5wS2V5IGFuZCBoaGFzaC0+SW5pdC5LZXlTaXplLgotICAqIEBwYXJhbSAgaGhhc2g6IEhBU0ggaGFuZGxlLgotICAqIEBwYXJhbSAgcEluQnVmZmVyOiBwb2ludGVyIHRvIHRoZSBpbnB1dCBidWZmZXIgKGJ1ZmZlciB0byBiZSBoYXNoZWQpLgotICAqIEBwYXJhbSAgU2l6ZTogbGVuZ3RoIG9mIHRoZSBpbnB1dCBidWZmZXIgaW4gYnl0ZXMuCi0gICogQHBhcmFtICBwT3V0QnVmZmVyOiBwb2ludGVyIHRvIHRoZSBjb21wdXRlZCBkaWdlc3QuIERpZ2VzdCBzaXplIGlzIDE2IGJ5dGVzLgotICAqIEBwYXJhbSAgVGltZW91dDogVGltZW91dCB2YWx1ZS4KKyAgKiBAcGFyYW0gIGhoYXNoIEhBU0ggaGFuZGxlLgorICAqIEBwYXJhbSAgcEluQnVmZmVyIHBvaW50ZXIgdG8gdGhlIGlucHV0IGJ1ZmZlciAoYnVmZmVyIHRvIGJlIGhhc2hlZCkuCisgICogQHBhcmFtICBTaXplIGxlbmd0aCBvZiB0aGUgaW5wdXQgYnVmZmVyIGluIGJ5dGVzLgorICAqIEBwYXJhbSAgcE91dEJ1ZmZlciBwb2ludGVyIHRvIHRoZSBjb21wdXRlZCBkaWdlc3QuIERpZ2VzdCBzaXplIGlzIDE2IGJ5dGVzLgorICAqIEBwYXJhbSAgVGltZW91dCBUaW1lb3V0IHZhbHVlLgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0hNQUNfTUQ1X1N0YXJ0KEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gsIHVpbnQ4X3QgKnBJbkJ1ZmZlciwgdWludDMyX3QgU2l6ZSwgdWludDhfdCogcE91dEJ1ZmZlciwgdWludDMyX3QgVGltZW91dCkKQEAgLTEwMDksMTEgKzExNjIsMTEgQEAKICAgKiBAbm90ZSAgIERpZ2VzdCBpcyBhdmFpbGFibGUgaW4gcE91dEJ1ZmZlci4KICAgKiBAbm90ZSAgIFNhbWUga2V5IGlzIHVzZWQgZm9yIHRoZSBpbm5lciBhbmQgdGhlIG91dGVyIGhhc2ggZnVuY3Rpb25zOyBwb2ludGVyIHRvIGtleSBhbmQKICAgKiAgICAgICAgIGtleSBzaXplIGFyZSByZXNwZWN0aXZlbHkgc3RvcmVkIGluIGhoYXNoLT5Jbml0LnBLZXkgYW5kIGhoYXNoLT5Jbml0LktleVNpemUuCi0gICogQHBhcmFtICBoaGFzaDogSEFTSCBoYW5kbGUuCi0gICogQHBhcmFtICBwSW5CdWZmZXI6IHBvaW50ZXIgdG8gdGhlIGlucHV0IGJ1ZmZlciAoYnVmZmVyIHRvIGJlIGhhc2hlZCkuCi0gICogQHBhcmFtICBTaXplOiBsZW5ndGggb2YgdGhlIGlucHV0IGJ1ZmZlciBpbiBieXRlcy4KLSAgKiBAcGFyYW0gIHBPdXRCdWZmZXI6IHBvaW50ZXIgdG8gdGhlIGNvbXB1dGVkIGRpZ2VzdC4gRGlnZXN0IHNpemUgaXMgMjAgYnl0ZXMuCi0gICogQHBhcmFtICBUaW1lb3V0OiBUaW1lb3V0IHZhbHVlLgorICAqIEBwYXJhbSAgaGhhc2ggSEFTSCBoYW5kbGUuCisgICogQHBhcmFtICBwSW5CdWZmZXIgcG9pbnRlciB0byB0aGUgaW5wdXQgYnVmZmVyIChidWZmZXIgdG8gYmUgaGFzaGVkKS4KKyAgKiBAcGFyYW0gIFNpemUgbGVuZ3RoIG9mIHRoZSBpbnB1dCBidWZmZXIgaW4gYnl0ZXMuCisgICogQHBhcmFtICBwT3V0QnVmZmVyIHBvaW50ZXIgdG8gdGhlIGNvbXB1dGVkIGRpZ2VzdC4gRGlnZXN0IHNpemUgaXMgMjAgYnl0ZXMuCisgICogQHBhcmFtICBUaW1lb3V0IFRpbWVvdXQgdmFsdWUuCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfSE1BQ19TSEExX1N0YXJ0KEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gsIHVpbnQ4X3QgKnBJbkJ1ZmZlciwgdWludDMyX3QgU2l6ZSwgdWludDhfdCogcE91dEJ1ZmZlciwgdWludDMyX3QgVGltZW91dCkKQEAgLTEwNTEsMTAgKzEyMDQsMTAgQEAKICAgKiBAbm90ZSAgIERpZ2VzdCBpcyBhdmFpbGFibGUgaW4gcE91dEJ1ZmZlci4KICAgKiBAbm90ZSAgIFNhbWUga2V5IGlzIHVzZWQgZm9yIHRoZSBpbm5lciBhbmQgdGhlIG91dGVyIGhhc2ggZnVuY3Rpb25zOyBwb2ludGVyIHRvIGtleSBhbmQKICAgKiAgICAgICAgIGtleSBzaXplIGFyZSByZXNwZWN0aXZlbHkgc3RvcmVkIGluIGhoYXNoLT5Jbml0LnBLZXkgYW5kIGhoYXNoLT5Jbml0LktleVNpemUuCi0gICogQHBhcmFtICBoaGFzaDogSEFTSCBoYW5kbGUuCi0gICogQHBhcmFtICBwSW5CdWZmZXI6IHBvaW50ZXIgdG8gdGhlIGlucHV0IGJ1ZmZlciAoYnVmZmVyIHRvIGJlIGhhc2hlZCkuCi0gICogQHBhcmFtICBTaXplOiBsZW5ndGggb2YgdGhlIGlucHV0IGJ1ZmZlciBpbiBieXRlcy4KLSAgKiBAcGFyYW0gIHBPdXRCdWZmZXI6IHBvaW50ZXIgdG8gdGhlIGNvbXB1dGVkIGRpZ2VzdC4gRGlnZXN0IHNpemUgaXMgMTYgYnl0ZXMuCisgICogQHBhcmFtICBoaGFzaCBIQVNIIGhhbmRsZS4KKyAgKiBAcGFyYW0gIHBJbkJ1ZmZlciBwb2ludGVyIHRvIHRoZSBpbnB1dCBidWZmZXIgKGJ1ZmZlciB0byBiZSBoYXNoZWQpLgorICAqIEBwYXJhbSAgU2l6ZSBsZW5ndGggb2YgdGhlIGlucHV0IGJ1ZmZlciBpbiBieXRlcy4KKyAgKiBAcGFyYW0gIHBPdXRCdWZmZXIgcG9pbnRlciB0byB0aGUgY29tcHV0ZWQgZGlnZXN0LiBEaWdlc3Qgc2l6ZSBpcyAxNiBieXRlcy4KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9ITUFDX01ENV9TdGFydF9JVChIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoLCB1aW50OF90ICpwSW5CdWZmZXIsIHVpbnQzMl90IFNpemUsIHVpbnQ4X3QqIHBPdXRCdWZmZXIpCkBAIC0xMDY4LDEwICsxMjIxLDEwIEBACiAgICogQG5vdGUgICBEaWdlc3QgaXMgYXZhaWxhYmxlIGluIHBPdXRCdWZmZXIuCiAgICogQG5vdGUgICBTYW1lIGtleSBpcyB1c2VkIGZvciB0aGUgaW5uZXIgYW5kIHRoZSBvdXRlciBoYXNoIGZ1bmN0aW9uczsgcG9pbnRlciB0byBrZXkgYW5kCiAgICogICAgICAgICBrZXkgc2l6ZSBhcmUgcmVzcGVjdGl2ZWx5IHN0b3JlZCBpbiBoaGFzaC0+SW5pdC5wS2V5IGFuZCBoaGFzaC0+SW5pdC5LZXlTaXplLgotICAqIEBwYXJhbSAgaGhhc2g6IEhBU0ggaGFuZGxlLgotICAqIEBwYXJhbSAgcEluQnVmZmVyOiBwb2ludGVyIHRvIHRoZSBpbnB1dCBidWZmZXIgKGJ1ZmZlciB0byBiZSBoYXNoZWQpLgotICAqIEBwYXJhbSAgU2l6ZTogbGVuZ3RoIG9mIHRoZSBpbnB1dCBidWZmZXIgaW4gYnl0ZXMuCi0gICogQHBhcmFtICBwT3V0QnVmZmVyOiBwb2ludGVyIHRvIHRoZSBjb21wdXRlZCBkaWdlc3QuIERpZ2VzdCBzaXplIGlzIDIwIGJ5dGVzLgorICAqIEBwYXJhbSAgaGhhc2ggSEFTSCBoYW5kbGUuCisgICogQHBhcmFtICBwSW5CdWZmZXIgcG9pbnRlciB0byB0aGUgaW5wdXQgYnVmZmVyIChidWZmZXIgdG8gYmUgaGFzaGVkKS4KKyAgKiBAcGFyYW0gIFNpemUgbGVuZ3RoIG9mIHRoZSBpbnB1dCBidWZmZXIgaW4gYnl0ZXMuCisgICogQHBhcmFtICBwT3V0QnVmZmVyIHBvaW50ZXIgdG8gdGhlIGNvbXB1dGVkIGRpZ2VzdC4gRGlnZXN0IHNpemUgaXMgMjAgYnl0ZXMuCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfSE1BQ19TSEExX1N0YXJ0X0lUKEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gsIHVpbnQ4X3QgKnBJbkJ1ZmZlciwgdWludDMyX3QgU2l6ZSwgdWludDhfdCogcE91dEJ1ZmZlcikKQEAgLTEwOTksNyArMTI1Miw3IEBACiAgICAgICAoKykgU0hBMQogICAgICAgICAgKCsrKSBIQUxfSE1BQ19TSEExX1N0YXJ0X0RNQSgpCiAKLSAgICBbLi5dICBXaGVuIHJlc29ydGluZyB0byBETUEgbW9kZSB0byBlbnRlciB0aGUgZGF0YSBpbiB0aGUgSVAgZm9yIEhNQUMgcHJvY2Vzc2luZywKKyAgICBbLi5dICBXaGVuIHJlc29ydGluZyB0byBETUEgbW9kZSB0byBlbnRlciB0aGUgZGF0YSBpbiB0aGUgUGVyaXBoZXJhbCBmb3IgSE1BQyBwcm9jZXNzaW5nLAogICAgICAgICAgIHVzZXIgbXVzdCByZXNvcnQgdG8gIEhBTF9ITUFDX3h4eF9TdGFydF9ETUEoKSB0aGVuIHJlYWQgdGhlIHJlc3VsdGluZyBkaWdlc3QKICAgICAgICAgICB3aXRoIEhBTF9IQVNIX3h4eF9GaW5pc2goKS4KIApAQCAtMTExMCw3ICsxMjYzLDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBJbml0aWFsaXplIHRoZSBIQVNIIHBlcmlwaGVyYWwgaW4gSE1BQyBNRDUgbW9kZSB0aGVuIGluaXRpYXRlIHRoZSByZXF1aXJlZAotICAqICAgICAgICAgRE1BIHRyYW5zZmVycyB0byBmZWVkIHRoZSBrZXkgYW5kIHRoZSBpbnB1dCBidWZmZXIgdG8gdGhlIElQLgorICAqICAgICAgICAgRE1BIHRyYW5zZmVycyB0byBmZWVkIHRoZSBrZXkgYW5kIHRoZSBpbnB1dCBidWZmZXIgdG8gdGhlIFBlcmlwaGVyYWwuCiAgICogQG5vdGUgICBPbmNlIHRoZSBETUEgdHJhbnNmZXJzIGFyZSBmaW5pc2hlZCAoaW5kaWNhdGVkIGJ5IGhoYXNoLT5TdGF0ZSBzZXQgYmFjawogICAqICAgICAgICAgdG8gSEFMX0hBU0hfU1RBVEVfUkVBRFkpLCBIQUxfSEFTSF9NRDVfRmluaXNoKCkgQVBJIG11c3QgYmUgY2FsbGVkIHRvIHJldHJpZXZlCiAgICogICAgICAgICB0aGUgY29tcHV0ZWQgZGlnZXN0LgpAQCAtMTEyMiw5ICsxMjc1LDkgQEAKICAgKiAgICAgICAgICBGb3IgdGhlIHByb2Nlc3Npbmcgb2YgdGhlIGxhc3QgYnVmZmVyIG9mIHRoZSB0aHJlYWQsIE1ETUFUIGJpdCBtdXN0CiAgICogICAgICAgICAgYmUgcmVzZXQgYW5kIHRoZSBidWZmZXIgbGVuZ3RoIChpbiBieXRlcykgZG9lc24ndCBoYXZlIHRvIGJlIGEKICAgKiAgICAgICAgICBtdWx0aXBsZSBvZiA0LgotICAqIEBwYXJhbSAgaGhhc2g6IEhBU0ggaGFuZGxlLgotICAqIEBwYXJhbSAgcEluQnVmZmVyOiBwb2ludGVyIHRvIHRoZSBpbnB1dCBidWZmZXIgKGJ1ZmZlciB0byBiZSBoYXNoZWQpLgotICAqIEBwYXJhbSAgU2l6ZTogbGVuZ3RoIG9mIHRoZSBpbnB1dCBidWZmZXIgaW4gYnl0ZXMuCisgICogQHBhcmFtICBoaGFzaCBIQVNIIGhhbmRsZS4KKyAgKiBAcGFyYW0gIHBJbkJ1ZmZlciBwb2ludGVyIHRvIHRoZSBpbnB1dCBidWZmZXIgKGJ1ZmZlciB0byBiZSBoYXNoZWQpLgorICAqIEBwYXJhbSAgU2l6ZSBsZW5ndGggb2YgdGhlIGlucHV0IGJ1ZmZlciBpbiBieXRlcy4KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9ITUFDX01ENV9TdGFydF9ETUEoSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCwgdWludDhfdCAqcEluQnVmZmVyLCB1aW50MzJfdCBTaXplKQpAQCAtMTEzNSw3ICsxMjg4LDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBJbml0aWFsaXplIHRoZSBIQVNIIHBlcmlwaGVyYWwgaW4gSE1BQyBTSEExIG1vZGUgdGhlbiBpbml0aWF0ZSB0aGUgcmVxdWlyZWQKLSAgKiAgICAgICAgIERNQSB0cmFuc2ZlcnMgdG8gZmVlZCB0aGUga2V5IGFuZCB0aGUgaW5wdXQgYnVmZmVyIHRvIHRoZSBJUC4KKyAgKiAgICAgICAgIERNQSB0cmFuc2ZlcnMgdG8gZmVlZCB0aGUga2V5IGFuZCB0aGUgaW5wdXQgYnVmZmVyIHRvIHRoZSBQZXJpcGhlcmFsLgogICAqIEBub3RlICAgT25jZSB0aGUgRE1BIHRyYW5zZmVycyBhcmUgZmluaXNoZWQgKGluZGljYXRlZCBieSBoaGFzaC0+U3RhdGUgc2V0IGJhY2sKICAgKiAgICAgICAgIHRvIEhBTF9IQVNIX1NUQVRFX1JFQURZKSwgSEFMX0hBU0hfU0hBMV9GaW5pc2goKSBBUEkgbXVzdCBiZSBjYWxsZWQgdG8gcmV0cmlldmUKICAgKiAgICAgICAgIHRoZSBjb21wdXRlZCBkaWdlc3QuCkBAIC0xMTQ3LDkgKzEzMDAsOSBAQAogICAqICAgICAgICAgIEZvciB0aGUgcHJvY2Vzc2luZyBvZiB0aGUgbGFzdCBidWZmZXIgb2YgdGhlIHRocmVhZCwgTURNQVQgYml0IG11c3QKICAgKiAgICAgICAgICBiZSByZXNldCBhbmQgdGhlIGJ1ZmZlciBsZW5ndGggKGluIGJ5dGVzKSBkb2Vzbid0IGhhdmUgdG8gYmUgYQogICAqICAgICAgICAgIG11bHRpcGxlIG9mIDQuCi0gICogQHBhcmFtICBoaGFzaDogSEFTSCBoYW5kbGUuCi0gICogQHBhcmFtICBwSW5CdWZmZXI6IHBvaW50ZXIgdG8gdGhlIGlucHV0IGJ1ZmZlciAoYnVmZmVyIHRvIGJlIGhhc2hlZCkuCi0gICogQHBhcmFtICBTaXplOiBsZW5ndGggb2YgdGhlIGlucHV0IGJ1ZmZlciBpbiBieXRlcy4KKyAgKiBAcGFyYW0gIGhoYXNoIEhBU0ggaGFuZGxlLgorICAqIEBwYXJhbSAgcEluQnVmZmVyIHBvaW50ZXIgdG8gdGhlIGlucHV0IGJ1ZmZlciAoYnVmZmVyIHRvIGJlIGhhc2hlZCkuCisgICogQHBhcmFtICBTaXplIGxlbmd0aCBvZiB0aGUgaW5wdXQgYnVmZmVyIGluIGJ5dGVzLgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0hNQUNfU0hBMV9TdGFydF9ETUEoSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCwgdWludDhfdCAqcEluQnVmZmVyLCB1aW50MzJfdCBTaXplKQpAQCAtMTE4Miw5ICsxMzM1LDkgQEAKIAogICAgIFsuLl0KICAgICBUaGlzIHN1YnNlY3Rpb24gcHJvdmlkZXMgZnVuY3Rpb25zIGFsbG93aW5nIHRvIHN1c3BlbmQgdGhlIEhBU0ggcHJvY2Vzc2luZwotICAgICAgKCspIHdoZW4gaW5wdXQgYXJlIGZlZCB0byB0aGUgSVAgYnkgc29mdHdhcmUKKyAgICAgICgrKSB3aGVuIGlucHV0IGFyZSBmZWQgdG8gdGhlIFBlcmlwaGVyYWwgYnkgc29mdHdhcmUKICAgICAgICAgICAoKyspIEhBTF9IQVNIX1N3RmVlZF9Qcm9jZXNzU3VzcGVuZCgpCi0gICAgICAoKykgd2hlbiBpbnB1dCBhcmUgZmVkIHRvIHRoZSBJUCBieSBETUEKKyAgICAgICgrKSB3aGVuIGlucHV0IGFyZSBmZWQgdG8gdGhlIFBlcmlwaGVyYWwgYnkgRE1BCiAgICAgICAgICAgKCsrKSBIQUxfSEFTSF9ETUFGZWVkX1Byb2Nlc3NTdXNwZW5kKCkKIAogCkBAIC0xMTk2LDcgKzEzNDksNyBAQAogLyoqCiAgICogQGJyaWVmICBSZXR1cm4gdGhlIEhBU0ggaGFuZGxlIHN0YXRlLgogICAqIEBub3RlICAgVGhlIEFQSSB5aWVsZHMgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGhhbmRsZSAoQlVTWSwgUkVBRFksLi4uKS4KLSAgKiBAcGFyYW0gIGhoYXNoOiBIQVNIIGhhbmRsZS4KKyAgKiBAcGFyYW0gIGhoYXNoIEhBU0ggaGFuZGxlLgogICAqIEByZXR2YWwgSEFMIEhBU0ggc3RhdGUKICAgKi8KIEhBTF9IQVNIX1N0YXRlVHlwZURlZiBIQUxfSEFTSF9HZXRTdGF0ZShIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoKQpAQCAtMTIwOSw3ICsxMzYyLDcgQEAKICAgKiBAYnJpZWYgUmV0dXJuIHRoZSBIQVNIIEhBTCBzdGF0dXMuCiAgICogQG5vdGUgIFRoZSBBUEkgeWllbGRzIHRoZSBIQUwgc3RhdHVzIG9mIHRoZSBoYW5kbGU6IGl0IGlzIHRoZSByZXN1bHQgb2YgdGhlCiAgICogICAgICAgIGxhdGVzdCBIQVNIIHByb2Nlc3NpbmcgYW5kIGFsbG93cyB0byByZXBvcnQgYW55IGlzc3VlIChlLmcuIEhBTF9USU1FT1VUKS4KLSAgKiBAcGFyYW0gIGhoYXNoOiBIQVNIIGhhbmRsZS4KKyAgKiBAcGFyYW0gIGhoYXNoIEhBU0ggaGFuZGxlLgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0hBU0hfR2V0U3RhdHVzKEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gpCkBAIC0xMjE5LDggKzEzNzIsOCBAQAogCiAvKioKICAgKiBAYnJpZWYgIFNhdmUgdGhlIEhBU0ggY29udGV4dCBpbiBjYXNlIG9mIHByb2Nlc3Npbmcgc3VzcGVuc2lvbi4KLSAgKiBAcGFyYW0gIGhoYXNoOiBIQVNIIGhhbmRsZS4KLSAgKiBAcGFyYW0gIHBNZW1CdWZmZXI6IHBvaW50ZXIgdG8gdGhlIG1lbW9yeSBidWZmZXIgd2hlcmUgdGhlIEhBU0ggY29udGV4dAorICAqIEBwYXJhbSAgaGhhc2ggSEFTSCBoYW5kbGUuCisgICogQHBhcmFtICBwTWVtQnVmZmVyIHBvaW50ZXIgdG8gdGhlIG1lbW9yeSBidWZmZXIgd2hlcmUgdGhlIEhBU0ggY29udGV4dAogICAqICAgICAgICAgaXMgc2F2ZWQuCiAgICogQG5vdGUgICBUaGUgSU1SLCBTVFIsIENSIHRoZW4gYWxsIHRoZSBDU1IgcmVnaXN0ZXJzIGFyZSBzYXZlZAogICAqICAgICAgICAgaW4gdGhhdCBvcmRlci4gT25seSB0aGUgci93IGJpdHMgYXJlIHJlYWQgdG8gYmUgcmVzdG9yZWQgbGF0ZXIgb24uCkBAIC0xMjY0LDggKzE0MTcsOCBAQAogCiAvKioKICAgKiBAYnJpZWYgIFJlc3RvcmUgdGhlIEhBU0ggY29udGV4dCBpbiBjYXNlIG9mIHByb2Nlc3NpbmcgcmVzdW1wdGlvbi4KLSAgKiBAcGFyYW0gIGhoYXNoOiBIQVNIIGhhbmRsZS4KLSAgKiBAcGFyYW0gIHBNZW1CdWZmZXI6IHBvaW50ZXIgdG8gdGhlIG1lbW9yeSBidWZmZXIgd2hlcmUgdGhlIEhBU0ggY29udGV4dAorICAqIEBwYXJhbSAgaGhhc2ggSEFTSCBoYW5kbGUuCisgICogQHBhcmFtICBwTWVtQnVmZmVyIHBvaW50ZXIgdG8gdGhlIG1lbW9yeSBidWZmZXIgd2hlcmUgdGhlIEhBU0ggY29udGV4dAogICAqICAgICAgICAgaXMgc3RvcmVkLgogICAqIEBub3RlICAgVGhlIElNUiwgU1RSLCBDUiB0aGVuIGFsbCB0aGUgQ1NSIHJlZ2lzdGVycyBhcmUgcmVzdG9yZWQKICAgKiAgICAgICAgIGluIHRoYXQgb3JkZXIuIE9ubHkgdGhlIHIvdyBiaXRzIGFyZSByZXN0b3JlZC4KQEAgLTEzMDksNyArMTQ2Miw3IEBACiAKIC8qKgogICAqIEBicmllZiAgSW5pdGlhdGUgSEFTSCBwcm9jZXNzaW5nIHN1c3BlbnNpb24gd2hlbiBpbiBwb2xsaW5nIG9yIGludGVycnVwdGlvbiBtb2RlLgotICAqIEBwYXJhbSAgaGhhc2g6IEhBU0ggaGFuZGxlLgorICAqIEBwYXJhbSAgaGhhc2ggSEFTSCBoYW5kbGUuCiAgICogQG5vdGUgICBTZXQgdGhlIGhhbmRsZSBmaWVsZCBTdXNwZW5kUmVxdWVzdCB0byB0aGUgYXBwcm9wcmlhdGUgdmFsdWUgc28gdGhhdAogICAqICAgICAgICAgdGhlIG9uLWdvaW5nIEhBU0ggcHJvY2Vzc2luZyBpcyBzdXNwZW5kZWQgYXMgc29vbiBhcyB0aGUgcmVxdWlyZWQKICAgKiAgICAgICAgIGNvbmRpdGlvbnMgYXJlIG1ldC4gTm90ZSB0aGF0IHRoZSBhY3R1YWwgc3VzcGVuc2lvbiBpcyBjYXJyaWVkIG91dApAQCAtMTMyNSw5ICsxNDc4LDkgQEAKIAogLyoqCiAgICogQGJyaWVmICBTdXNwZW5kIHRoZSBIQVNIIHByb2Nlc3Npbmcgd2hlbiBpbiBETUEgbW9kZS4KLSAgKiBAcGFyYW0gIGhoYXNoOiBIQVNIIGhhbmRsZS4KKyAgKiBAcGFyYW0gIGhoYXNoIEhBU0ggaGFuZGxlLgogICAqIEBub3RlICAgV2hlbiBzdXNwZW5zaW9uIGF0dGVtcHQgb2NjdXJzIGF0IHRoZSB2ZXJ5IGVuZCBvZiBhIERNQSB0cmFuc2ZlciBhbmQKLSAgKiAgICAgICAgIGFsbCB0aGUgZGF0YSBoYXZlIGFscmVhZHkgYmVlbiBlbnRlcmVkIGluIHRoZSBJUCwgaGhhc2gtPlN0YXRlIGlzCisgICogICAgICAgICBhbGwgdGhlIGRhdGEgaGF2ZSBhbHJlYWR5IGJlZW4gZW50ZXJlZCBpbiB0aGUgUGVyaXBoZXJhbCwgaGhhc2gtPlN0YXRlIGlzCiAgICogICAgICAgICBzZXQgdG8gSEFMX0hBU0hfU1RBVEVfUkVBRFkgYW5kIHRoZSBBUEkgcmV0dXJucyBIQUxfRVJST1IuIEl0IGlzCiAgICogICAgICAgICByZWNvbW1lbmRlZCB0byB3cmFwLXVwIHRoZSBwcm9jZXNzaW5nIGluIHJlYWRpbmcgdGhlIGRpZ2VzdCBhcyB1c3VhbC4KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKQEAgLTEzNTUsNyArMTUwOCw3IEBACiAgICAgICByZXR1cm4gSEFMX0VSUk9SOwogICAgIH0KIAotICAgIC8qIFdhaXQgZm9yIERNQVMgdG8gYmUgcmVzZXQgKi8KKyAgICAvKiBXYWl0IGZvciBCVVNZIGZsYWcgdG8gYmUgcmVzZXQgKi8KICAgICBpZiAoSEFTSF9XYWl0T25GbGFnVW50aWxUaW1lb3V0KGhoYXNoLCBIQVNIX0ZMQUdfQlVTWSwgU0VULCBIQVNIX1RJTUVPVVRWQUxVRSkgIT0gSEFMX09LKQogICAgIHsKICAgICAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CkBAIC0xMzY2LDI2ICsxNTE5LDI2IEBACiAgICAgICByZXR1cm4gSEFMX0VSUk9SOwogICAgIH0KIAotICAgIC8qIFdhaXQgZm9yIERNQVMgdG8gYmUgc2V0ICovCisgICAgLyogV2FpdCBmb3IgQlVTWSBmbGFnIHRvIGJlIHNldCAqLwogICAgIGlmIChIQVNIX1dhaXRPbkZsYWdVbnRpbFRpbWVvdXQoaGhhc2gsIEhBU0hfRkxBR19CVVNZLCBSRVNFVCwgSEFTSF9USU1FT1VUVkFMVUUpICE9IEhBTF9PSykKICAgICB7CiAgICAgICAgcmV0dXJuIEhBTF9USU1FT1VUOwogICAgIH0KLQogICAgIC8qIERpc2FibGUgRE1BIGNoYW5uZWwgKi8KLSAgICBpZiAoSEFMX0RNQV9BYm9ydChoaGFzaC0+aGRtYWluKSA9PUhBTF9PSykKLSAgICB7Ci0gICAgICAvKgotICAgICAgTm90ZSB0aGF0IHRoZSBBYm9ydCBmdW5jdGlvbiB3aWxsCisgICAgLyogTm90ZSB0aGF0IHRoZSBBYm9ydCBmdW5jdGlvbiB3aWxsCiAgICAgICAtIENsZWFyIHRoZSB0cmFuc2ZlciBlcnJvciBmbGFncwogICAgICAgLSBVbmxvY2sKICAgICAgIC0gU2V0IHRoZSBTdGF0ZQotICAgICAgKi8KKyAgICAqLworICAgIGlmIChIQUxfRE1BX0Fib3J0KGhoYXNoLT5oZG1haW4pICE9SEFMX09LKQorICAgIHsKKyAgICAgIHJldHVybiBIQUxfRVJST1I7CiAgICAgfQogCiAgICAgLyogQ2xlYXIgRE1BRSBiaXQgKi8KICAgICBDTEVBUl9CSVQoSEFTSC0+Q1IsSEFTSF9DUl9ETUFFKTsKIAorICAgIC8qIFdhaXQgZm9yIEJVU1kgZmxhZyB0byBiZSByZXNldCAqLwogICAgIGlmIChIQVNIX1dhaXRPbkZsYWdVbnRpbFRpbWVvdXQoaGhhc2gsIEhBU0hfRkxBR19CVVNZLCBTRVQsIEhBU0hfVElNRU9VVFZBTFVFKSAhPSBIQUxfT0spCiAgICAgewogICAgICAgcmV0dXJuIEhBTF9USU1FT1VUOwpAQCAtMTQxOSw4ICsxNTcyLDggQEAKICAgICAgIC8qIENvbXB1dGUgaG93IG1hbnkgd29yZHMgd2VyZSBzdXBwb3NlZCB0byBiZSB0cmFuc2ZlcnJlZCBieSBETUEgKi8KICAgICAgIHRtcF9pbml0aWFsX0RNQVRyYW5zZmVyU2l6ZV9pbldvcmRzID0gKCgoaGhhc2gtPkhhc2hJbkNvdW50JTRVKSE9MFUpID8gICgoaGhhc2gtPkhhc2hJbkNvdW50KzNVKS80VSk6IChoaGFzaC0+SGFzaEluQ291bnQvNFUpKTsKIAotICAgICAgLyogSWYgZGlzY3JlcGFuY3kgYmV0d2VlbiB0aGUgbnVtYmVyIG9mIHdvcmRzIHJlcG9ydGVkIGJ5IERNQSBJUCBhbmQgdGhlIG51bWJlcnMgb2Ygd29yZHMgZW50ZXJlZCBhcyByZXBvcnRlZAotICAgICAgICBieSBIQVNIIElQLCBjb3JyZWN0IGl0ICovCisgICAgICAvKiBJZiBkaXNjcmVwYW5jeSBiZXR3ZWVuIHRoZSBudW1iZXIgb2Ygd29yZHMgcmVwb3J0ZWQgYnkgRE1BIFBlcmlwaGVyYWwgYW5kIHRoZSBudW1iZXJzIG9mIHdvcmRzIGVudGVyZWQgYXMgcmVwb3J0ZWQKKyAgICAgICAgYnkgSEFTSCBQZXJpcGhlcmFsLCBjb3JyZWN0IGl0ICovCiAgICAgICAvKiB0bXBfd29yZHNfYWxyZWFkeV9wdXNoZWQgcmVmbGVjdHMgdGhlIG51bWJlciBvZiB3b3JkcyB0aGF0IHdlcmUgYWxyZWFkeSBwdXNoZWQgYmVmb3JlCiAgICAgICAgICB0aGUgc3RhcnQgb2YgRE1BIHRyYW5zZmVyIChtdWx0aS1idWZmZXIgcHJvY2Vzc2luZyBjYXNlKSAqLwogICAgICAgdG1wX3dvcmRzX2FscmVhZHlfcHVzaGVkID0gaGhhc2gtPk5iV29yZHNBbHJlYWR5UHVzaGVkOwpAQCAtMTQyOSw3ICsxNTgyLDcgQEAKICAgICAgICAgdG1wX3JlbWFpbmluZ19ETUFUcmFuc2ZlclNpemVfaW5Xb3Jkcy0tOyAvKiBvbmUgbGVzcyB3b3JkIHRvIGJlIHRyYW5zZmVycmVkIGFnYWluICovCiAgICAgICB9CiAKLSAgICAgIC8qIEFjY29yZGluZ2x5LCB1cGRhdGUgdGhlIGlucHV0IHBvaW50ZXIgdGhhdCBwb2ludHMgYXQgdGhlIG5leHQgd29yZCB0byBiZSB0cmFuc2ZlcnJlZCB0byB0aGUgSVAgYnkgRE1BICovCisgICAgICAvKiBBY2NvcmRpbmdseSwgdXBkYXRlIHRoZSBpbnB1dCBwb2ludGVyIHRoYXQgcG9pbnRzIGF0IHRoZSBuZXh0IHdvcmQgdG8gYmUgdHJhbnNmZXJyZWQgdG8gdGhlIFBlcmlwaGVyYWwgYnkgRE1BICovCiAgICAgICBoaGFzaC0+cEhhc2hJbkJ1ZmZQdHIgKz0gIDRVICogKHRtcF9pbml0aWFsX0RNQVRyYW5zZmVyU2l6ZV9pbldvcmRzIC0gdG1wX3JlbWFpbmluZ19ETUFUcmFuc2ZlclNpemVfaW5Xb3JkcykgOwogCiAgICAgICAvKiBBbmQgc3RvcmUgaW4gSGFzaEluQ291bnQgdGhlIHJlbWFpbmluZyBzaXplIHRvIHRyYW5zZmVyIChpbiBieXRlcykgKi8KQEAgLTE0NDcsNyArMTYwMCw3IEBACiAKIC8qKgogICAqIEBicmllZiAgUmV0dXJuIHRoZSBIQVNIIGhhbmRsZSBlcnJvciBjb2RlLgotICAqIEBwYXJhbSAgaGhhc2g6IHBvaW50ZXIgdG8gYSBIQVNIX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlLgorICAqIEBwYXJhbSAgaGhhc2ggcG9pbnRlciB0byBhIEhBU0hfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUuCiAgICogQHJldHZhbCBIQVNIIEVycm9yIENvZGUKICovCiB1aW50MzJfdCBIQUxfSEFTSF9HZXRFcnJvcihIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoKQpAQCAtMTQ3MCw3ICsxNjIzLDcgQEAKIAogLyoqCiAgICogQGJyaWVmIERNQSBIQVNIIElucHV0IERhdGEgdHJhbnNmZXIgY29tcGxldGlvbiBjYWxsYmFjay4KLSAgKiBAcGFyYW0gaGRtYTogRE1BIGhhbmRsZS4KKyAgKiBAcGFyYW0gaGRtYSBETUEgaGFuZGxlLgogICAqIEBub3RlICBJbiBjYXNlIG9mIEhNQUMgcHJvY2Vzc2luZywgSEFTSF9ETUFYZmVyQ3BsdCgpIGluaXRpYXRlcwogICAqICAgICAgICB0aGUgbmV4dCBETUEgdHJhbnNmZXIgZm9yIHRoZSBmb2xsb3dpbmcgSE1BQyBzdGVwLgogICAqIEByZXR2YWwgTm9uZQpAQCAtMTQ4MSw0MiArMTYzNCw0MiBAQAogICB1aW50MzJfdCBpbnB1dGFkZHI7CiAgIHVpbnQzMl90IGJ1ZmZlcnNpemU7CiAgIEhBTF9TdGF0dXNUeXBlRGVmIHN0YXR1cyA7Ci0gIAorCiAgIGlmIChoaGFzaC0+U3RhdGUgIT0gSEFMX0hBU0hfU1RBVEVfU1VTUEVOREVEKQogICB7Ci0gICAgCisKICAgICAvKiBEaXNhYmxlIHRoZSBETUEgdHJhbnNmZXIgKi8KICAgICBDTEVBUl9CSVQoSEFTSC0+Q1IsIEhBU0hfQ1JfRE1BRSk7Ci0gICAgCisKICAgICBpZiAoUkVBRF9CSVQoSEFTSC0+Q1IsIEhBU0hfQ1JfTU9ERSkgPT0gMFUpCiAgICAgewogICAgICAgLyogSWYgbm8gSE1BQyBwcm9jZXNzaW5nLCBpbnB1dCBkYXRhIHRyYW5zZmVyIGlzIG5vdyBvdmVyICovCi0gICAgICAKKwogICAgICAgLyogQ2hhbmdlIHRoZSBIQVNIIHN0YXRlIHRvIHJlYWR5ICovCiAgICAgICBoaGFzaC0+U3RhdGUgPSBIQUxfSEFTSF9TVEFURV9SRUFEWTsKLSAgICAgIAorCiAgICAgICAvKiBDYWxsIElucHV0IGRhdGEgdHJhbnNmZXIgY29tcGxldGUgY2FsbCBiYWNrICovCiAjaWYgKFVTRV9IQUxfSEFTSF9SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkKICAgICAgIGhoYXNoLT5JbkNwbHRDYWxsYmFjayhoaGFzaCk7CiAjZWxzZQogICAgICAgSEFMX0hBU0hfSW5DcGx0Q2FsbGJhY2soaGhhc2gpOwogI2VuZGlmIC8qIFVTRV9IQUxfSEFTSF9SRUdJU1RFUl9DQUxMQkFDS1MgKi8KLSAgICAgIAorCiAgICAgfQogICAgIGVsc2UKICAgICB7CiAgICAgICAvKiBITUFDIHByb2Nlc3Npbmc6IGRlcGVuZGluZyBvbiB0aGUgY3VycmVudCBITUFDIHN0ZXAgYW5kIHdoZXRoZXIgb3IKICAgICAgIG5vdCBtdWx0aS1idWZmZXIgcHJvY2Vzc2luZyBpcyBvbi1nb2luZywgdGhlIG5leHQgc3RlcCBpcyBpbml0aWF0ZWQKICAgICAgIGFuZCBNRE1BVCBiaXQgaXMgc2V0LiAgKi8KLSAgICAgIAotICAgICAgCisKKwogICAgICAgaWYgKGhoYXNoLT5QaGFzZSA9PSBIQUxfSEFTSF9QSEFTRV9ITUFDX1NURVBfMykKICAgICAgIHsKICAgICAgICAgLyogVGhpcyBpcyB0aGUgZW5kIG9mIEhNQUMgcHJvY2Vzc2luZyAqLwotICAgICAgICAKKwogICAgICAgICAvKiBDaGFuZ2UgdGhlIEhBU0ggc3RhdGUgdG8gcmVhZHkgKi8KICAgICAgICAgaGhhc2gtPlN0YXRlID0gSEFMX0hBU0hfU1RBVEVfUkVBRFk7Ci0gICAgICAgIAorCiAgICAgICAgIC8qIENhbGwgSW5wdXQgZGF0YSB0cmFuc2ZlciBjb21wbGV0ZSBjYWxsIGJhY2sKICAgICAgICAgKG5vdGUgdGhhdCB0aGUgbGFzdCBETUEgdHJhbnNmZXIgd2FzIHRoYXQgb2YgdGhlIGtleQogICAgICAgICBmb3IgdGhlIG91dGVyIEhBU0ggb3BlcmF0aW9uKS4gKi8KQEAgLTE1MjUsNyArMTY3OCw3IEBACiAjZWxzZQogICAgICAgICBIQUxfSEFTSF9JbkNwbHRDYWxsYmFjayhoaGFzaCk7CiAjZW5kaWYgLyogVVNFX0hBTF9IQVNIX1JFR0lTVEVSX0NBTExCQUNLUyAqLwotICAgICAgICAKKwogICAgICAgICByZXR1cm47CiAgICAgICB9CiAgICAgICBlbHNlIGlmIChoaGFzaC0+UGhhc2UgPT0gSEFMX0hBU0hfUEhBU0VfSE1BQ19TVEVQXzEpCkBAIC0xNTMzLDI3ICsxNjg2LDI3IEBACiAgICAgICAgIGlucHV0YWRkciA9ICh1aW50MzJfdCloaGFzaC0+cEhhc2hNc2dCdWZmUHRyOyAgICAgLyogRE1BIHRyYW5zZmVyIHN0YXJ0IGFkZHJlc3MgKi8KICAgICAgICAgYnVmZmVyc2l6ZSA9IGhoYXNoLT5IYXNoQnVmZlNpemU7ICAgICAgICAgICAgICAgICAvKiBETUEgdHJhbnNmZXIgc2l6ZSAoaW4gYnl0ZXMpICovCiAgICAgICAgIGhoYXNoLT5QaGFzZSA9IEhBTF9IQVNIX1BIQVNFX0hNQUNfU1RFUF8yOyAgICAgICAgLyogTW92ZSBwaGFzZSBmcm9tIFN0ZXAgMSB0byBTdGVwIDIgKi8KLSAgICAgICAgCisKICAgICAgICAgLyogSW4gY2FzZSBvZiBzdXNwZW5zaW9uIHJlcXVlc3QsIHNhdmUgdGhlIG5ldyBzdGFydGluZyBwYXJhbWV0ZXJzICovCiAgICAgICAgIGhoYXNoLT5IYXNoSW5Db3VudCA9IGhoYXNoLT5IYXNoQnVmZlNpemU7ICAgICAgICAgLyogSW5pdGlhbCBETUEgdHJhbnNmZXIgc2l6ZSAoaW4gYnl0ZXMpICovCiAgICAgICAgIGhoYXNoLT5wSGFzaEluQnVmZlB0ciAgPSBoaGFzaC0+cEhhc2hNc2dCdWZmUHRyIDsgLyogRE1BIHRyYW5zZmVyIHN0YXJ0IGFkZHJlc3MgICAgICAgICAgICovCi0gICAgICAgIAorCiAgICAgICAgIGhoYXNoLT5OYldvcmRzQWxyZWFkeVB1c2hlZCA9IDBVOyAgICAgICAgICAgICAgICAgIC8qIFJlc2V0IG51bWJlciBvZiB3b3JkcyBhbHJlYWR5IHB1c2hlZCAqLwogI2lmIGRlZmluZWQoSEFTSF9DUl9NRE1BVCkKICAgICAgICAgLyogQ2hlY2sgd2hldGhlciBvciBub3QgZGlnZXN0IGNhbGN1bGF0aW9uIG11c3QgYmUgZGlzYWJsZWQgKGluIGNhc2Ugb2YgbXVsdGktYnVmZmVyIEhNQUMgcHJvY2Vzc2luZykgKi8KICAgICAgICAgaWYgKGhoYXNoLT5EaWdlc3RDYWxjdWxhdGlvbkRpc2FibGUgIT0gUkVTRVQpCiAgICAgICAgIHsKICAgICAgICAgICAvKiBEaWdlc3QgY2FsY3VsYXRpb24gaXMgZGlzYWJsZWQ6IFN0ZXAgMiBtdXN0IHN0YXJ0IHdpdGggTURNQVQgYml0IHNldCwKLSAgICAgICAgICBubyBkaWdlc3QgY2FsY3VsYXRpb24gd2lsbCBiZSB0cmlnZ2VyZWQgYXQgdGhlIGVuZCBvZiB0aGUgaW5wdXQgYnVmZmVyIGZlZWRpbmcgdG8gdGhlIElQICovCisgICAgICAgICAgbm8gZGlnZXN0IGNhbGN1bGF0aW9uIHdpbGwgYmUgdHJpZ2dlcmVkIGF0IHRoZSBlbmQgb2YgdGhlIGlucHV0IGJ1ZmZlciBmZWVkaW5nIHRvIHRoZSBQZXJpcGhlcmFsICovCiAgICAgICAgICAgX19IQUxfSEFTSF9TRVRfTURNQVQoKTsKICAgICAgICAgfQotI2VuZGlmICAgICAgICAKKyNlbmRpZgogICAgICAgfQogICAgICAgZWxzZSAgLypjYXNlIChoaGFzaC0+UGhhc2UgPT0gSEFMX0hBU0hfUEhBU0VfSE1BQ19TVEVQXzIpKi8KICAgICAgIHsKICAgICAgICAgaWYgKGhoYXNoLT5EaWdlc3RDYWxjdWxhdGlvbkRpc2FibGUgIT0gUkVTRVQpCiAgICAgICAgIHsKLSAgICAgICAgICAvKiBObyBhdXRvbWF0aWMgbW92ZSB0byBTdGVwIDMgYXMgYSBuZXcgbWVzc2FnZSBidWZmZXIgd2lsbCBiZSBmZWQgdG8gdGhlIElQCisgICAgICAgICAgLyogTm8gYXV0b21hdGljIG1vdmUgdG8gU3RlcCAzIGFzIGEgbmV3IG1lc3NhZ2UgYnVmZmVyIHdpbGwgYmUgZmVkIHRvIHRoZSBQZXJpcGhlcmFsCiAgICAgICAgICAgKGNhc2Ugb2YgbXVsdGktYnVmZmVyIEhNQUMgcHJvY2Vzc2luZyk6CiAgICAgICAgICAgRENBTCBtdXN0IG5vdCBiZSBzZXQuCiAgICAgICAgICAgUGhhc2UgcmVtYWlucyBpbiBTdGVwIDIsIE1ETUFUIHJlbWFpbnMgc2V0IGF0IHRoaXMgcG9pbnQuCkBAIC0xNTc2LDM0ICsxNzI5LDM0IEBACiAgICAgICAgICAgLyogSW4gY2FzZSBvZiBzdXNwZW5zaW9uIHJlcXVlc3QsIHNhdmUgdGhlIG5ldyBzdGFydGluZyBwYXJhbWV0ZXJzICovCiAgICAgICAgICAgaGhhc2gtPkhhc2hJbkNvdW50ID0gaGhhc2gtPkluaXQuS2V5U2l6ZTsgICAgIC8qIEluaXRpYWwgc2l6ZSBmb3Igc2Vjb25kIERNQSB0cmFuc2ZlciAoaW5wdXQgZGF0YSkgKi8KICAgICAgICAgICBoaGFzaC0+cEhhc2hJbkJ1ZmZQdHIgID0gaGhhc2gtPkluaXQucEtleSA7ICAgLyogYWRkcmVzcyBwYXNzZWQgdG8gRE1BLCBub3cgZW50ZXJpbmcgZGF0YSBtZXNzYWdlICovCi0gICAgICAgICAgCisKICAgICAgICAgICBoaGFzaC0+TmJXb3Jkc0FscmVhZHlQdXNoZWQgPSAwVTsgICAgICAgICAgICAgIC8qIFJlc2V0IG51bWJlciBvZiB3b3JkcyBhbHJlYWR5IHB1c2hlZCAqLwogICAgICAgICB9CiAgICAgICB9Ci0gICAKKwogICAgIC8qIENvbmZpZ3VyZSB0aGUgTnVtYmVyIG9mIHZhbGlkIGJpdHMgaW4gbGFzdCB3b3JkIG9mIHRoZSBtZXNzYWdlICovCiAgICAgX19IQUxfSEFTSF9TRVRfTkJWQUxJREJJVFMoYnVmZmVyc2l6ZSk7CiAKICAgICAgIC8qIFNldCB0aGUgSEFTSCBETUEgdHJhbnNmZXJ0IGNvbXBsZXRpb24gY2FsbCBiYWNrICovCiAgICAgICBoaGFzaC0+aGRtYWluLT5YZmVyQ3BsdENhbGxiYWNrID0gSEFTSF9ETUFYZmVyQ3BsdDsKLSAgICAgCisKICAgICAgIC8qIEVuYWJsZSB0aGUgRE1BIEluIERNQSBTdHJlYW0gKi8KICAgICBzdGF0dXMgPSBIQUxfRE1BX1N0YXJ0X0lUKGhoYXNoLT5oZG1haW4sIGlucHV0YWRkciwgKHVpbnQzMl90KSZIQVNILT5ESU4sICgoKGJ1ZmZlcnNpemUgJTRVKSE9MFUpID8gKChidWZmZXJzaXplKyg0VS0oYnVmZmVyc2l6ZSAlNFUpKSkvNFUpOihidWZmZXJzaXplLzRVKSkpOwogCiAgICAgLyogRW5hYmxlIERNQSByZXF1ZXN0cyAqLwogICAgIFNFVF9CSVQoSEFTSC0+Q1IsIEhBU0hfQ1JfRE1BRSk7Ci0gICAgCisKICAgICAgICAgICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCiAgICAgICBpZiAoc3RhdHVzICE9IEhBTF9PSykKICAgICAgIHsKLSAgICAgICAgLyogVXBkYXRlIERBQyBzdGF0ZSBtYWNoaW5lIHRvIGVycm9yICovCi0gICAgICAgIGhoYXNoLT5TdGF0ZSA9IEhBTF9IQVNIX1NUQVRFX0VSUk9SOyAgICAgIAorICAgICAgICAvKiBVcGRhdGUgSEFTSCBzdGF0ZSBtYWNoaW5lIHRvIGVycm9yICovCisgICAgICAgIGhoYXNoLT5TdGF0ZSA9IEhBTF9IQVNIX1NUQVRFX0VSUk9SOwogICAgICAgfQogICAgICAgZWxzZQogICAgICAgewotICAgICAgICAvKiBDaGFuZ2UgREFDIHN0YXRlICovCisgICAgICAgIC8qIENoYW5nZSBIQVNIIHN0YXRlICovCiAgICAgICAgIGhoYXNoLT5TdGF0ZSA9IEhBTF9IQVNIX1NUQVRFX1JFQURZOwotICAgICAgfSAgICAgCisgICAgICB9CiAgIH0KICAgfQogCkBAIC0xNjEyLDcgKzE3NjUsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgRE1BIEhBU0ggY29tbXVuaWNhdGlvbiBlcnJvciBjYWxsYmFjay4KLSAgKiBAcGFyYW0gaGRtYTogRE1BIGhhbmRsZS4KKyAgKiBAcGFyYW0gaGRtYSBETUEgaGFuZGxlLgogICAqIEBub3RlICBIQVNIX0RNQUVycm9yKCkgY2FsbGJhY2sgaW52b2tlcyBIQUxfSEFTSF9FcnJvckNhbGxiYWNrKCkgdGhhdAogICAqICAgICAgICBjYW4gY29udGFpbiB1c2VyIGNvZGUgdG8gbWFuYWdlIHRoZSBlcnJvci4KICAgKiBAcmV0dmFsIE5vbmUKQEAgLTE2NDEsMTMgKzE3OTQsMTMgQEAKIH0KIAogLyoqCi0gICogQGJyaWVmICBGZWVkIHRoZSBpbnB1dCBidWZmZXIgdG8gdGhlIEhBU0ggSVAuCi0gICogQHBhcmFtICBoaGFzaDogSEFTSCBoYW5kbGUuCi0gICogQHBhcmFtICBwSW5CdWZmZXI6IHBvaW50ZXIgdG8gaW5wdXQgYnVmZmVyLgotICAqIEBwYXJhbSAgU2l6ZTogdGhlIHNpemUgb2YgaW5wdXQgYnVmZmVyIGluIGJ5dGVzLgorICAqIEBicmllZiAgRmVlZCB0aGUgaW5wdXQgYnVmZmVyIHRvIHRoZSBIQVNIIFBlcmlwaGVyYWwuCisgICogQHBhcmFtICBoaGFzaCBIQVNIIGhhbmRsZS4KKyAgKiBAcGFyYW0gIHBJbkJ1ZmZlciBwb2ludGVyIHRvIGlucHV0IGJ1ZmZlci4KKyAgKiBAcGFyYW0gIFNpemUgdGhlIHNpemUgb2YgaW5wdXQgYnVmZmVyIGluIGJ5dGVzLgogICAqIEBub3RlICAgSEFTSF9Xcml0ZURhdGEoKSByZWd1bGFybHkgcmVhZHMgaGhhc2gtPlN1c3BlbmRSZXF1ZXN0IHRvIGNoZWNrIHdoZXRoZXIKICAgKiAgICAgICAgIG9yIG5vdCB0aGUgSEFTSCBwcm9jZXNzaW5nIG11c3QgYmUgc3VzcGVuZGVkLiBJZiB0aGlzIGlzIHRoZSBjYXNlLCB0aGUKLSAgKiAgICAgICAgIHByb2Nlc3NpbmcgaXMgc3VzcGVuZGVkIHdoZW4gcG9zc2libGUgYW5kIHRoZSBJUCBmZWVkaW5nIHBvaW50IHJlYWNoZWQgYXQKKyAgKiAgICAgICAgIHByb2Nlc3NpbmcgaXMgc3VzcGVuZGVkIHdoZW4gcG9zc2libGUgYW5kIHRoZSBQZXJpcGhlcmFsIGZlZWRpbmcgcG9pbnQgcmVhY2hlZCBhdAogICAqICAgICAgICAgc3VzcGVuc2lvbiB0aW1lIGlzIHN0b3JlZCBpbiB0aGUgaGFuZGxlIGZvciByZXN1bXB0aW9uIGxhdGVyIG9uLgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwpAQCAtMTY3Myw3ICsxODI2LDcgQEAKICAgICAgICAgLyogUmVzZXQgU3VzcGVuZFJlcXVlc3QgKi8KICAgICAgICAgaGhhc2gtPlN1c3BlbmRSZXF1ZXN0ID0gSEFMX0hBU0hfU1VTUEVORF9OT05FOwogCi0gICAgICAgIC8qIERlcGVuZGluZyB3aGV0aGVyIHRoZSBrZXkgb3IgdGhlIGlucHV0IGRhdGEgd2VyZSBmZWQgdG8gdGhlIElQLCB0aGUgZmVlZGluZyBwb2ludAorICAgICAgICAvKiBEZXBlbmRpbmcgd2hldGhlciB0aGUga2V5IG9yIHRoZSBpbnB1dCBkYXRhIHdlcmUgZmVkIHRvIHRoZSBQZXJpcGhlcmFsLCB0aGUgZmVlZGluZyBwb2ludAogICAgICAgICByZWFjaGVkIGF0IHN1c3BlbnNpb24gdGltZSBpcyBub3Qgc2F2ZWQgaW4gdGhlIHNhbWUgaGFuZGxlIGZpZWxkcyAqLwogICAgICAgICBpZiAoKGhoYXNoLT5QaGFzZSA9PSBIQUxfSEFTSF9QSEFTRV9QUk9DRVNTKSB8fCAoaGhhc2gtPlBoYXNlID09IEhBTF9IQVNIX1BIQVNFX0hNQUNfU1RFUF8yKSkKICAgICAgICAgewpAQCAtMTcwNSwxNCArMTg1OCwxNCBAQAogICAgIH0gLyogaWYgKChoaGFzaC0+U3VzcGVuZFJlcXVlc3QgPT0gSEFMX0hBU0hfU1VTUEVORCkgJiYgKChidWZmZXJjb3VudGVyKzQpIDwgU2l6ZSkpICovCiAgIH0gICAvKiBmb3IoYnVmZmVyY291bnRlciA9IDA7IGJ1ZmZlcmNvdW50ZXIgPCBTaXplOyBidWZmZXJjb3VudGVyKz00KSAgICAgICAgICAgICAgICAgKi8KIAotICAvKiBBdCB0aGlzIHBvaW50LCBhbGwgdGhlIGRhdGEgaGF2ZSBiZWVuIGVudGVyZWQgdG8gdGhlIElQOiBleGl0ICovCisgIC8qIEF0IHRoaXMgcG9pbnQsIGFsbCB0aGUgZGF0YSBoYXZlIGJlZW4gZW50ZXJlZCB0byB0aGUgUGVyaXBoZXJhbDogZXhpdCAqLwogICByZXR1cm4gIEhBTF9PSzsKIH0KIAogLyoqCiAgICogQGJyaWVmICBSZXRyaWV2ZSB0aGUgbWVzc2FnZSBkaWdlc3QuCi0gICogQHBhcmFtICBwTXNnRGlnZXN0OiBwb2ludGVyIHRvIHRoZSBjb21wdXRlZCBkaWdlc3QuCi0gICogQHBhcmFtICBTaXplOiBtZXNzYWdlIGRpZ2VzdCBzaXplIGluIGJ5dGVzLgorICAqIEBwYXJhbSAgcE1zZ0RpZ2VzdCBwb2ludGVyIHRvIHRoZSBjb21wdXRlZCBkaWdlc3QuCisgICogQHBhcmFtICBTaXplIG1lc3NhZ2UgZGlnZXN0IHNpemUgaW4gYnl0ZXMuCiAgICogQHJldHZhbCBOb25lCiAgICovCiBzdGF0aWMgdm9pZCBIQVNIX0dldERpZ2VzdCh1aW50OF90ICpwTXNnRGlnZXN0LCB1aW50OF90IFNpemUpCkBAIC0xNzg3LDEwICsxOTQwLDEwIEBACiAKIC8qKgogICAqIEBicmllZiAgSGFuZGxlIEhBU0ggcHJvY2Vzc2luZyBUaW1lb3V0LgotICAqIEBwYXJhbSAgaGhhc2g6IEhBU0ggaGFuZGxlLgotICAqIEBwYXJhbSAgRmxhZzogc3BlY2lmaWVzIHRoZSBIQVNIIGZsYWcgdG8gY2hlY2suCi0gICogQHBhcmFtICBTdGF0dXM6IHRoZSBGbGFnIHN0YXR1cyAoU0VUIG9yIFJFU0VUKS4KLSAgKiBAcGFyYW0gIFRpbWVvdXQ6IFRpbWVvdXQgZHVyYXRpb24uCisgICogQHBhcmFtICBoaGFzaCBIQVNIIGhhbmRsZS4KKyAgKiBAcGFyYW0gIEZsYWcgc3BlY2lmaWVzIHRoZSBIQVNIIGZsYWcgdG8gY2hlY2suCisgICogQHBhcmFtICBTdGF0dXMgdGhlIEZsYWcgc3RhdHVzIChTRVQgb3IgUkVTRVQpLgorICAqIEBwYXJhbSAgVGltZW91dCBUaW1lb3V0IGR1cmF0aW9uLgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwogc3RhdGljIEhBTF9TdGF0dXNUeXBlRGVmIEhBU0hfV2FpdE9uRmxhZ1VudGlsVGltZW91dChIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoLCB1aW50MzJfdCBGbGFnLCBGbGFnU3RhdHVzIFN0YXR1cywgdWludDMyX3QgVGltZW91dCkKQEAgLTE4NDgsMTAgKzIwMDEsMTAgQEAKIAogLyoqCiAgICogQGJyaWVmICBIQVNIIHByb2Nlc3NpbmcgaW4gaW50ZXJydXB0aW9uIG1vZGUuCi0gICogQHBhcmFtICBoaGFzaDogSEFTSCBoYW5kbGUuCisgICogQHBhcmFtICBoaGFzaCBIQVNIIGhhbmRsZS4KICAgKiBAbm90ZSAgIEhBU0hfSVQoKSByZWd1bGFybHkgcmVhZHMgaGhhc2gtPlN1c3BlbmRSZXF1ZXN0IHRvIGNoZWNrIHdoZXRoZXIKICAgKiAgICAgICAgIG9yIG5vdCB0aGUgSEFTSCBwcm9jZXNzaW5nIG11c3QgYmUgc3VzcGVuZGVkLiBJZiB0aGlzIGlzIHRoZSBjYXNlLCB0aGUKLSAgKiAgICAgICAgIHByb2Nlc3NpbmcgaXMgc3VzcGVuZGVkIHdoZW4gcG9zc2libGUgYW5kIHRoZSBJUCBmZWVkaW5nIHBvaW50IHJlYWNoZWQgYXQKKyAgKiAgICAgICAgIHByb2Nlc3NpbmcgaXMgc3VzcGVuZGVkIHdoZW4gcG9zc2libGUgYW5kIHRoZSBQZXJpcGhlcmFsIGZlZWRpbmcgcG9pbnQgcmVhY2hlZCBhdAogICAqICAgICAgICAgc3VzcGVuc2lvbiB0aW1lIGlzIHN0b3JlZCBpbiB0aGUgaGFuZGxlIGZvciByZXN1bXB0aW9uIGxhdGVyIG9uLgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwpAQCAtMTg3Miw3ICsyMDI1LDcgQEAKICAgICBlbHNlIGlmIChoaGFzaC0+SGFzaElUQ291bnRlciA9PSAxVSkKICAgICB7CiAgICAgIC8qIFRoaXMgaXMgdGhlIGZpcnN0IGNhbGwgdG8gSEFTSF9JVCwgdGhlIGZpcnN0IGlucHV0IGRhdGEgYXJlIGFib3V0IHRvIGJlCi0gICAgICAgIGVudGVyZWQgaW4gdGhlIElQLiBBIHNwZWNpZmljIHByb2Nlc3NpbmcgaXMgY2FycmllZCBvdXQgYXQgdGhpcyBwb2ludCB0bworICAgICAgICBlbnRlcmVkIGluIHRoZSBQZXJpcGhlcmFsLiBBIHNwZWNpZmljIHByb2Nlc3NpbmcgaXMgY2FycmllZCBvdXQgYXQgdGhpcyBwb2ludCB0bwogICAgICAgICBzdGFydC11cCB0aGUgcHJvY2Vzc2luZy4gKi8KICAgICAgIGhoYXNoLT5IYXNoSVRDb3VudGVyID0gMlU7CiAgICAgfQpAQCAtMTg5Myw2ICsyMDQ2LDggQEAKICAgICAgIF9fSEFMX0hBU0hfRElTQUJMRV9JVChIQVNIX0lUX0RJTkl8SEFTSF9JVF9EQ0kpOwogICAgICAgLyogQ2hhbmdlIHRoZSBIQVNIIHN0YXRlICovCiAgICAgICBoaGFzaC0+U3RhdGUgPSBIQUxfSEFTSF9TVEFURV9SRUFEWTsKKyAgICAgIC8qIFJlc2V0IEhBU0ggc3RhdGUgbWFjaGluZSAqLworICAgICAgaGhhc2gtPlBoYXNlID0gSEFMX0hBU0hfUEhBU0VfUkVBRFk7CiAgICAgICAvKiBDYWxsIGRpZ2VzdCBjb21wdXRhdGlvbiBjb21wbGV0ZSBjYWxsIGJhY2sgKi8KICNpZiAoVVNFX0hBTF9IQVNIX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxKQogICAgICAgaGhhc2gtPkRnc3RDcGx0Q2FsbGJhY2soaGhhc2gpOwpAQCAtMTkwMyw3ICsyMDU4LDcgQEAKICAgICAgIHJldHVybiBIQUxfT0s7CiAgICAgfQogCi0gICAgLyogSWYgSVAgcmVhZHkgdG8gYWNjZXB0IG5ldyBkYXRhICovCisgICAgLyogSWYgUGVyaXBoZXJhbCByZWFkeSB0byBhY2NlcHQgbmV3IGRhdGEgKi8KICAgICBpZiAoX19IQUxfSEFTSF9HRVRfRkxBRyhIQVNIX0ZMQUdfRElOSVMpKQogICAgIHsKIApAQCAtMTkyMyw3ICsyMDc4LDcgQEAKICAgICAgICAgcmV0dXJuIEhBTF9PSzsKICAgICAgIH0KIAotICAgICAgLyogRW50ZXIgaW5wdXQgZGF0YSBpbiB0aGUgSVAgdGhydSBIQVNIX1dyaXRlX0Jsb2NrX0RhdGEoKSBjYWxsIGFuZAorICAgICAgLyogRW50ZXIgaW5wdXQgZGF0YSBpbiB0aGUgUGVyaXBoZXJhbCB0aHJ1IEhBU0hfV3JpdGVfQmxvY2tfRGF0YSgpIGNhbGwgYW5kCiAgICAgICAgIGNoZWNrIHdoZXRoZXIgdGhlIGRpZ2VzdCBjYWxjdWxhdGlvbiBoYXMgYmVlbiB0cmlnZ2VyZWQgKi8KICAgICAgIGlmIChIQVNIX1dyaXRlX0Jsb2NrX0RhdGEoaGhhc2gpID09IEhBU0hfRElHRVNUX0NBTENVTEFUSU9OX1NUQVJURUQpCiAgICAgICB7CkBAIC0xOTM3LDcgKzIwOTIsNyBAQAogCiAgICAgICAgIGlmIChoaGFzaC0+UGhhc2UgPT0gSEFMX0hBU0hfUEhBU0VfSE1BQ19TVEVQXzEpCiAgICAgICAgIHsKLSAgICAgICAgICAvKiBXYWl0IHVudGlsIElQIGlzIG5vdCBidXN5IGFueW1vcmUgKi8KKyAgICAgICAgICAvKiBXYWl0IHVudGlsIFBlcmlwaGVyYWwgaXMgbm90IGJ1c3kgYW55bW9yZSAqLwogICAgICAgICAgIGlmIChIQVNIX1dhaXRPbkZsYWdVbnRpbFRpbWVvdXQoaGhhc2gsIEhBU0hfRkxBR19CVVNZLCBTRVQsIEhBU0hfVElNRU9VVFZBTFVFKSAhPSBIQUxfT0spCiAgICAgICAgICAgewogICAgICAgICAgICAgLyogRGlzYWJsZSBJbnRlcnJ1cHRzICovCkBAIC0xOTU0LDcgKzIxMDksNyBAQAogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKGhoYXNoLT5QaGFzZSA9PSBIQUxfSEFTSF9QSEFTRV9ITUFDX1NURVBfMikKICAgICAgICAgewotICAgICAgICAgIC8qIFdhaXQgdW50aWwgSVAgaXMgbm90IGJ1c3kgYW55bW9yZSAqLworICAgICAgICAgIC8qIFdhaXQgdW50aWwgUGVyaXBoZXJhbCBpcyBub3QgYnVzeSBhbnltb3JlICovCiAgICAgICAgICAgaWYgKEhBU0hfV2FpdE9uRmxhZ1VudGlsVGltZW91dChoaGFzaCwgSEFTSF9GTEFHX0JVU1ksIFNFVCwgSEFTSF9USU1FT1VUVkFMVUUpICE9IEhBTF9PSykKICAgICAgICAgICB7CiAgICAgICAgICAgICAvKiBEaXNhYmxlIEludGVycnVwdHMgKi8KQEAgLTE5ODcsOCArMjE0Miw4IEBACiAKIAogLyoqCi0gICogQGJyaWVmICBXcml0ZSBhIGJsb2NrIG9mIGRhdGEgaW4gSEFTSCBJUCBpbiBpbnRlcnJ1cHRpb24gbW9kZS4KLSAgKiBAcGFyYW0gIGhoYXNoOiBIQVNIIGhhbmRsZS4KKyAgKiBAYnJpZWYgIFdyaXRlIGEgYmxvY2sgb2YgZGF0YSBpbiBIQVNIIFBlcmlwaGVyYWwgaW4gaW50ZXJydXB0aW9uIG1vZGUuCisgICogQHBhcmFtICBoaGFzaCBIQVNIIGhhbmRsZS4KICAgKiBAbm90ZSAgIEhBU0hfV3JpdGVfQmxvY2tfRGF0YSgpIGlzIGNhbGxlZCB1bmRlciBpbnRlcnJ1cHRpb24gYnkgSEFTSF9JVCgpLgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwpAQCAtMjAxNyw3ICsyMTcyLDcgQEAKICAgICAgIEhBU0gtPkRJTiA9ICoodWludDMyX3QqKWlucHV0YWRkcjsKICAgICAgIGlmKGhoYXNoLT5IYXNoSW5Db3VudCA+PSA2OFUpCiAgICAgICB7Ci0gICAgICAgIC8qIFRoZXJlIGFyZSBzdGlsbCBkYXRhIHdhaXRpbmcgdG8gYmUgZW50ZXJlZCBpbiB0aGUgSVAuCisgICAgICAgIC8qIFRoZXJlIGFyZSBzdGlsbCBkYXRhIHdhaXRpbmcgdG8gYmUgZW50ZXJlZCBpbiB0aGUgUGVyaXBoZXJhbC4KICAgICAgICAgICAgRGVjcmVtZW50IGJ1ZmZlciBjb3VudGVyIGFuZCBzZXQgcG9pbnRlciB0byB0aGUgcHJvcGVyCiAgICAgICAgICAgIG1lbW9yeSBsb2NhdGlvbiBmb3IgdGhlIG5leHQgZGF0YSBlbnRlcmluZyByb3VuZC4gKi8KICAgICAgICAgaGhhc2gtPkhhc2hJbkNvdW50IC09IDY4VTsKQEAgLTIwNTYsMTMgKzIyMTEsMzMgQEAKICAgICAgIEhBU0gtPkRJTiA9ICoodWludDMyX3QqKWlucHV0YWRkcjsKICAgICAgIGlucHV0YWRkcis9NFU7CiAgICAgfQotICAgIC8qIFN0YXJ0IHRoZSBEaWdlc3QgY2FsY3VsYXRpb24gKi8KLSAgICBfX0hBTF9IQVNIX1NUQVJUX0RJR0VTVCgpOwotICAgIC8qIFJldHVybiBpbmRpY2F0aW9uIHRoYXQgZGlnZXN0IGNhbGN1bGF0aW9uIGhhcyBzdGFydGVkOgotICAgICAgIHRoaXMgcmV0dXJuIHZhbHVlIHRyaWdnZXJzIHRoZSBjYWxsIHRvIElucHV0IGRhdGEgdHJhbnNmZXIKLSAgICAgICBjb21wbGV0ZSBjYWxsIGJhY2sgYXMgd2VsbCBhcyB0aGUgcHJvcGVyIHRyYW5zaXRpb24gZnJvbQotICAgICAgIG9uZSBzdGVwIHRvIGFub3RoZXIgaW4gSE1BQyBtb2RlLiAqLwotICAgIHJldCA9IEhBU0hfRElHRVNUX0NBTENVTEFUSU9OX1NUQVJURUQ7CisKKyAgICBpZiAoaGhhc2gtPkFjY3VtdWxhdGlvbiA9PSAxVSkKKyAgICB7CisgICAgICAvKiBGaWVsZCBhY2N1bXVsYXRpb24gaXMgc2V0LCBBUEkgb25seSBmZWVkcyBkYXRhIHRvIHRoZSBQZXJpcGhlcmFsIGFuZCB1bmRlciBpbnRlcnJ1cHRpb24uCisgICAgICAgICBUaGUgZGlnZXN0IGNvbXB1dGF0aW9uIHdpbGwgYmUgc3RhcnRlZCB3aGVuIHRoZSBsYXN0IGJ1ZmZlciBkYXRhIGFyZSBlbnRlcmVkLiAqLworCisgICAgICAvKiBSZXNldCBtdWx0aSBidWZmZXJzIGFjY3VtdWxhdGlvbiBmbGFnICovCisgICAgICBoaGFzaC0+QWNjdW11bGF0aW9uID0gMFU7CisgICAgICAvKiBDaGFuZ2UgdGhlIEhBU0ggc3RhdGUgKi8KKyAgICAgIGhoYXNoLT5TdGF0ZSA9IEhBTF9IQVNIX1NUQVRFX1JFQURZOworICAgICAgLyogQ2FsbCBJbnB1dCBkYXRhIHRyYW5zZmVyIGNvbXBsZXRlIGNhbGwgYmFjayAqLworI2lmIChVU0VfSEFMX0hBU0hfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCisgICAgICAgIGhoYXNoLT5JbkNwbHRDYWxsYmFjayhoaGFzaCk7CisjZWxzZQorICAgICAgICBIQUxfSEFTSF9JbkNwbHRDYWxsYmFjayhoaGFzaCk7CisjZW5kaWYgLyogVVNFX0hBTF9IQVNIX1JFR0lTVEVSX0NBTExCQUNLUyAqLworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgLyogU3RhcnQgdGhlIERpZ2VzdCBjYWxjdWxhdGlvbiAqLworICAgICAgX19IQUxfSEFTSF9TVEFSVF9ESUdFU1QoKTsKKyAgICAgIC8qIFJldHVybiBpbmRpY2F0aW9uIHRoYXQgZGlnZXN0IGNhbGN1bGF0aW9uIGhhcyBzdGFydGVkOgorICAgICAgICAgdGhpcyByZXR1cm4gdmFsdWUgdHJpZ2dlcnMgdGhlIGNhbGwgdG8gSW5wdXQgZGF0YSB0cmFuc2ZlcgorICAgICAgICAgY29tcGxldGUgY2FsbCBiYWNrIGFzIHdlbGwgYXMgdGhlIHByb3BlciB0cmFuc2l0aW9uIGZyb20KKyAgICAgICAgIG9uZSBzdGVwIHRvIGFub3RoZXIgaW4gSE1BQyBtb2RlLiAqLworICAgICAgcmV0ID0gSEFTSF9ESUdFU1RfQ0FMQ1VMQVRJT05fU1RBUlRFRDsKKyAgICB9CiAgICAgLyogUmVzZXQgYnVmZmVyIGNvdW50ZXIgKi8KICAgICBoaGFzaC0+SGFzaEluQ291bnQgPSAwOwogICB9CkBAIC0yMDczLDggKzIyNDgsOCBAQAogCiAvKioKICAgKiBAYnJpZWYgIEhNQUMgcHJvY2Vzc2luZyBpbiBwb2xsaW5nIG1vZGUuCi0gICogQHBhcmFtICBoaGFzaDogSEFTSCBoYW5kbGUuCi0gICogQHBhcmFtICBUaW1lb3V0OiBUaW1lb3V0IHZhbHVlLgorICAqIEBwYXJhbSAgaGhhc2ggSEFTSCBoYW5kbGUuCisgICogQHBhcmFtICBUaW1lb3V0IFRpbWVvdXQgdmFsdWUuCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCiBzdGF0aWMgSEFMX1N0YXR1c1R5cGVEZWYgSE1BQ19Qcm9jZXNzaW5nKEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gsIHVpbnQzMl90IFRpbWVvdXQpCkBAIC0yMjE2LDYgKzIzOTEsOSBAQAogCiAgICAgLyogUmVhZCB0aGUgbWVzc2FnZSBkaWdlc3QgKi8KICAgICBIQVNIX0dldERpZ2VzdChoaGFzaC0+cEhhc2hPdXRCdWZmUHRyLCBIQVNIX0RJR0VTVF9MRU5HVEgoKSk7CisKKyAgICAvKiBSZXNldCBIQVNIIHN0YXRlIG1hY2hpbmUgKi8KKyAgICBoaGFzaC0+UGhhc2UgPSBIQUxfSEFTSF9QSEFTRV9SRUFEWTsKICAgfQogCiAgICAvKiBDaGFuZ2UgdGhlIEhBU0ggc3RhdGUgKi8KQEAgLTIyMzMsNTggKzI0MTEsNTggQEAKICAgKiBAYnJpZWYgIEluaXRpYWxpemUgdGhlIEhBU0ggcGVyaXBoZXJhbCwgbmV4dCBwcm9jZXNzIHBJbkJ1ZmZlciB0aGVuCiAgICogICAgICAgICByZWFkIHRoZSBjb21wdXRlZCBkaWdlc3QuCiAgICogQG5vdGUgICBEaWdlc3QgaXMgYXZhaWxhYmxlIGluIHBPdXRCdWZmZXIuCi0gICogQHBhcmFtICBoaGFzaDogSEFTSCBoYW5kbGUuCi0gICogQHBhcmFtICBwSW5CdWZmZXI6IHBvaW50ZXIgdG8gdGhlIGlucHV0IGJ1ZmZlciAoYnVmZmVyIHRvIGJlIGhhc2hlZCkuCi0gICogQHBhcmFtICBTaXplOiBsZW5ndGggb2YgdGhlIGlucHV0IGJ1ZmZlciBpbiBieXRlcy4KLSAgKiBAcGFyYW0gIHBPdXRCdWZmZXI6IHBvaW50ZXIgdG8gdGhlIGNvbXB1dGVkIGRpZ2VzdC4KLSAgKiBAcGFyYW0gIFRpbWVvdXQ6IFRpbWVvdXQgdmFsdWUuCi0gICogQHBhcmFtICBBbGdvcml0aG06IEhBU0ggYWxnb3JpdGhtLgorICAqIEBwYXJhbSAgaGhhc2ggSEFTSCBoYW5kbGUuCisgICogQHBhcmFtICBwSW5CdWZmZXIgcG9pbnRlciB0byB0aGUgaW5wdXQgYnVmZmVyIChidWZmZXIgdG8gYmUgaGFzaGVkKS4KKyAgKiBAcGFyYW0gIFNpemUgbGVuZ3RoIG9mIHRoZSBpbnB1dCBidWZmZXIgaW4gYnl0ZXMuCisgICogQHBhcmFtICBwT3V0QnVmZmVyIHBvaW50ZXIgdG8gdGhlIGNvbXB1dGVkIGRpZ2VzdC4KKyAgKiBAcGFyYW0gIFRpbWVvdXQgVGltZW91dCB2YWx1ZS4KKyAgKiBAcGFyYW0gIEFsZ29yaXRobSBIQVNIIGFsZ29yaXRobS4KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBU0hfU3RhcnQoSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCwgdWludDhfdCAqcEluQnVmZmVyLCB1aW50MzJfdCBTaXplLCB1aW50OF90KiBwT3V0QnVmZmVyLCB1aW50MzJfdCBUaW1lb3V0LCB1aW50MzJfdCBBbGdvcml0aG0pCiB7CiAgIHVpbnQ4X3QgKnBJbkJ1ZmZlcl90bXA7ICAvKiBpbnB1dCBkYXRhIGFkZHJlc3MsIGlucHV0IHBhcmFtZXRlciBvZiBIQVNIX1dyaXRlRGF0YSgpICAgICAgICAgKi8KICAgdWludDMyX3QgU2l6ZV90bXA7IC8qIGlucHV0IGRhdGEgc2l6ZSAoaW4gYnl0ZXMpLCBpbnB1dCBwYXJhbWV0ZXIgb2YgSEFTSF9Xcml0ZURhdGEoKSAqLwotICBIQUxfSEFTSF9TdGF0ZVR5cGVEZWYgU3RhdGVfdG1wID0gaGhhc2gtPlN0YXRlOyAKKyAgSEFMX0hBU0hfU3RhdGVUeXBlRGVmIFN0YXRlX3RtcCA9IGhoYXNoLT5TdGF0ZTsKIAotICAKKwogICAvKiBJbml0aWF0ZSBIQVNIIHByb2Nlc3NpbmcgaW4gY2FzZSBvZiBzdGFydCBvciByZXN1bXB0aW9uICovCiBpZigoU3RhdGVfdG1wID09IEhBTF9IQVNIX1NUQVRFX1JFQURZKSB8fCAoU3RhdGVfdG1wID09IEhBTF9IQVNIX1NUQVRFX1NVU1BFTkRFRCkpCi0gIHsgIAorICB7CiAgICAgLyogQ2hlY2sgaW5wdXQgcGFyYW1ldGVycyAqLwotICAgIGlmICgocEluQnVmZmVyID09IE5VTEwpIHx8IChTaXplID09IDBVKSB8fCAocE91dEJ1ZmZlciA9PSBOVUxMKSkKKyAgICBpZiAoKHBJbkJ1ZmZlciA9PSBOVUxMKSB8fCAocE91dEJ1ZmZlciA9PSBOVUxMKSkKICAgICB7CiAgICAgICBoaGFzaC0+U3RhdGUgPSBIQUxfSEFTSF9TVEFURV9SRUFEWTsKICAgICAgIHJldHVybiAgSEFMX0VSUk9SOwogICAgIH0KLSAgICAKKwogICAgIC8qIFByb2Nlc3MgTG9ja2VkICovCiAgICAgX19IQUxfTE9DSyhoaGFzaCk7Ci0gICAgCisKICAgICAvKiBDaGVjayBpZiBpbml0aWFsaXphdGlvbiBwaGFzZSBoYXMgbm90IGJlZW4gYWxyZWFkeSBwZXJmb3JtZWQgKi8KICAgICBpZihoaGFzaC0+UGhhc2UgPT0gSEFMX0hBU0hfUEhBU0VfUkVBRFkpCiAgICAgewogICAgICAgLyogQ2hhbmdlIHRoZSBIQVNIIHN0YXRlICovCiAgICAgICBoaGFzaC0+U3RhdGUgPSBIQUxfSEFTSF9TVEFURV9CVVNZOwotICAgICAgCisKICAgICAgIC8qIFNlbGVjdCB0aGUgSEFTSCBhbGdvcml0aG0sIGNsZWFyIEhNQUMgbW9kZSBhbmQgbG9uZyBrZXkgc2VsZWN0aW9uIGJpdCwgcmVzZXQgdGhlIEhBU0ggcHJvY2Vzc29yIGNvcmUgKi8KICAgICAgIE1PRElGWV9SRUcoSEFTSC0+Q1IsIEhBU0hfQ1JfTEtFWXxIQVNIX0NSX0FMR098SEFTSF9DUl9NT0RFfEhBU0hfQ1JfSU5JVCwgQWxnb3JpdGhtIHwgSEFTSF9DUl9JTklUKTsKLSAgICAgIAorCiAgICAgICAvKiBDb25maWd1cmUgdGhlIG51bWJlciBvZiB2YWxpZCBiaXRzIGluIGxhc3Qgd29yZCBvZiB0aGUgbWVzc2FnZSAqLwogICAgICAgX19IQUxfSEFTSF9TRVRfTkJWQUxJREJJVFMoU2l6ZSk7Ci0gICAgICAKKwogICAgICAgLyogcEluQnVmZmVyX3RtcCBhbmQgU2l6ZV90bXAgYXJlIGluaXRpYWxpemVkIHRvIGJlIHVzZWQgYWZ0ZXJ3YXJkcyBhcwogICAgICAgaW5wdXQgcGFyYW1ldGVycyBvZiBIQVNIX1dyaXRlRGF0YSgpICovCiAgICAgICBwSW5CdWZmZXJfdG1wID0gcEluQnVmZmVyOyAgIC8qIHBJbkJ1ZmZlcl90bXAgaXMgc2V0IHRvIHRoZSBpbnB1dCBkYXRhIGFkZHJlc3MgKi8KICAgICAgIFNpemVfdG1wID0gU2l6ZTsgICAgICAgICAgICAgLyogU2l6ZV90bXAgY29udGFpbnMgdGhlIGlucHV0IGRhdGEgc2l6ZSBpbiBieXRlcyAqLwotICAgICAgCisKICAgICAgIC8qIFNldCB0aGUgcGhhc2UgKi8KICAgICAgIGhoYXNoLT5QaGFzZSA9IEhBTF9IQVNIX1BIQVNFX1BST0NFU1M7CiAgICAgfQogICAgIGVsc2UgaWYgKGhoYXNoLT5QaGFzZSA9PSBIQUxfSEFTSF9QSEFTRV9QUk9DRVNTKQogICAgIHsKLSAgICAgIC8qIGlmIHRoZSBJUCBoYXMgYWxyZWFkeSBiZWVuIGluaXRpYWxpemVkLCB0d28gY2FzZXMgYXJlIHBvc3NpYmxlICovCi0gICAgICAKKyAgICAgIC8qIGlmIHRoZSBQZXJpcGhlcmFsIGhhcyBhbHJlYWR5IGJlZW4gaW5pdGlhbGl6ZWQsIHR3byBjYXNlcyBhcmUgcG9zc2libGUgKi8KKwogICAgICAgLyogUHJvY2VzcyByZXN1bXB0aW9uIHRpbWUgLi4uICovCiAgICAgICBpZiAoaGhhc2gtPlN0YXRlID09IEhBTF9IQVNIX1NUQVRFX1NVU1BFTkRFRCkKICAgICAgIHsKQEAgLTIzMTEsNDggKzI0ODksNTEgQEAKICAgICB7CiAgICAgICAvKiBQaGFzZSBlcnJvciAqLwogICAgICAgaGhhc2gtPlN0YXRlID0gSEFMX0hBU0hfU1RBVEVfUkVBRFk7Ci0gICAgICAKKwogICAgICAgLyogUHJvY2VzcyBVbmxvY2tlZCAqLwogICAgICAgX19IQUxfVU5MT0NLKGhoYXNoKTsKLSAgICAgIAorCiAgICAgICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCiAgICAgICByZXR1cm4gSEFMX0VSUk9SOwogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgLyogV3JpdGUgaW5wdXQgYnVmZmVyIGluIERhdGEgcmVnaXN0ZXIgKi8KICAgICBoaGFzaC0+U3RhdHVzID0gSEFTSF9Xcml0ZURhdGEoaGhhc2gsIHBJbkJ1ZmZlcl90bXAsIFNpemVfdG1wKTsKICAgICBpZiAoaGhhc2gtPlN0YXR1cyAhPSBIQUxfT0spCiAgICAgewogICAgICAgcmV0dXJuIGhoYXNoLT5TdGF0dXM7CiAgICAgfQotICAgIAorCiAgICAgLyogSWYgdGhlIHByb2Nlc3MgaGFzIG5vdCBiZWVuIHN1c3BlbmRlZCwgY2Fycnkgb24gdG8gZGlnZXN0IGNhbGN1bGF0aW9uICovCiAgICAgaWYgKGhoYXNoLT5TdGF0ZSAhPSBIQUxfSEFTSF9TVEFURV9TVVNQRU5ERUQpCiAgICAgewogICAgICAgLyogU3RhcnQgdGhlIERpZ2VzdCBjYWxjdWxhdGlvbiAqLwogICAgICAgX19IQUxfSEFTSF9TVEFSVF9ESUdFU1QoKTsKLSAgICAgIAorCiAgICAgICAvKiBXYWl0IGZvciBEQ0lTIGZsYWcgdG8gYmUgc2V0ICovCiAgICAgICBpZiAoSEFTSF9XYWl0T25GbGFnVW50aWxUaW1lb3V0KGhoYXNoLCBIQVNIX0ZMQUdfRENJUywgUkVTRVQsIFRpbWVvdXQpICE9IEhBTF9PSykKICAgICAgIHsKICAgICAgICAgcmV0dXJuIEhBTF9USU1FT1VUOwogICAgICAgfQotICAgICAgCisKICAgICAgIC8qIFJlYWQgdGhlIG1lc3NhZ2UgZGlnZXN0ICovCiAgICAgICBIQVNIX0dldERpZ2VzdChwT3V0QnVmZmVyLCBIQVNIX0RJR0VTVF9MRU5HVEgoKSk7Ci0gICAgICAKKwogICAgICAgLyogQ2hhbmdlIHRoZSBIQVNIIHN0YXRlICovCiAgICAgICBoaGFzaC0+U3RhdGUgPSBIQUxfSEFTSF9TVEFURV9SRUFEWTsKLSAgICAgIAorCisgICAgICAvKiBSZXNldCBIQVNIIHN0YXRlIG1hY2hpbmUgKi8KKyAgICAgIGhoYXNoLT5QaGFzZSA9IEhBTF9IQVNIX1BIQVNFX1JFQURZOworCiAgICAgfQotICAgIAorCiAgICAgLyogUHJvY2VzcyBVbmxvY2tlZCAqLwogICAgIF9fSEFMX1VOTE9DSyhoaGFzaCk7Ci0gICAgCisKICAgICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCiAgICAgcmV0dXJuIEhBTF9PSzsKLSAgICAKKwogICB9CiAgIGVsc2UKICAgewpAQCAtMjM2NSwyNyArMjU0NiwzMCBAQAogICAqIEBicmllZiAgSWYgbm90IGFscmVhZHkgZG9uZSwgaW5pdGlhbGl6ZSB0aGUgSEFTSCBwZXJpcGhlcmFsIHRoZW4KICAgKiAgICAgICAgIHByb2Nlc3NlcyBwSW5CdWZmZXIuCiAgICogQG5vdGUgICBGaWVsZCBoaGFzaC0+UGhhc2Ugb2YgSEFTSCBoYW5kbGUgaXMgdGVzdGVkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90Ci0gICogICAgICAgICB0aGUgSVAgaGFzIGFscmVhZHkgYmVlbiBpbml0aWFsaXplZC4KKyAgKiAgICAgICAgIHRoZSBQZXJpcGhlcmFsIGhhcyBhbHJlYWR5IGJlZW4gaW5pdGlhbGl6ZWQuCiAgICogQG5vdGUgICBUaGUgaW5wdXQgYnVmZmVyIHNpemUgKGluIGJ5dGVzKSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNCBvdGhlcndpc2UsIHRoZQogICAqICAgICAgICAgSEFTSCBkaWdlc3QgY29tcHV0YXRpb24gaXMgY29ycnVwdGVkLgotICAqIEBwYXJhbSAgaGhhc2g6IEhBU0ggaGFuZGxlLgotICAqIEBwYXJhbSAgcEluQnVmZmVyOiBwb2ludGVyIHRvIHRoZSBpbnB1dCBidWZmZXIgKGJ1ZmZlciB0byBiZSBoYXNoZWQpLgotICAqIEBwYXJhbSAgU2l6ZTogbGVuZ3RoIG9mIHRoZSBpbnB1dCBidWZmZXIgaW4gYnl0ZXMsIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0LgotICAqIEBwYXJhbSAgQWxnb3JpdGhtOiBIQVNIIGFsZ29yaXRobS4KKyAgKiBAcGFyYW0gIGhoYXNoIEhBU0ggaGFuZGxlLgorICAqIEBwYXJhbSAgcEluQnVmZmVyIHBvaW50ZXIgdG8gdGhlIGlucHV0IGJ1ZmZlciAoYnVmZmVyIHRvIGJlIGhhc2hlZCkuCisgICogQHBhcmFtICBTaXplIGxlbmd0aCBvZiB0aGUgaW5wdXQgYnVmZmVyIGluIGJ5dGVzLCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNC4KKyAgKiBAcGFyYW0gIEFsZ29yaXRobSBIQVNIIGFsZ29yaXRobS4KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBU0hfQWNjdW11bGF0ZShIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoLCB1aW50OF90ICpwSW5CdWZmZXIsIHVpbnQzMl90IFNpemUsIHVpbnQzMl90IEFsZ29yaXRobSkKIHsKICAgdWludDhfdCAqcEluQnVmZmVyX3RtcDsgICAvKiBpbnB1dCBkYXRhIGFkZHJlc3MsIGlucHV0IHBhcmFtZXRlciBvZiBIQVNIX1dyaXRlRGF0YSgpICAgICAgICAgKi8KICAgdWludDMyX3QgU2l6ZV90bXA7ICAvKiBpbnB1dCBkYXRhIHNpemUgKGluIGJ5dGVzKSwgaW5wdXQgcGFyYW1ldGVyIG9mIEhBU0hfV3JpdGVEYXRhKCkgKi8KLSAgSEFMX0hBU0hfU3RhdGVUeXBlRGVmIFN0YXRlX3RtcCA9IGhoYXNoLT5TdGF0ZTsgCi0gICAKKyAgSEFMX0hBU0hfU3RhdGVUeXBlRGVmIFN0YXRlX3RtcCA9IGhoYXNoLT5TdGF0ZTsKKwogICAvKiBNYWtlIHN1cmUgdGhlIGlucHV0IGJ1ZmZlciBzaXplIChpbiBieXRlcykgaXMgYSBtdWx0aXBsZSBvZiA0ICovCi0gICBhc3NlcnRfcGFyYW0oSVNfSEFTSF9QT0xMSU5HX01VTFRJQlVGRkVSX1NJWkUoU2l6ZSkpOworICBpZiAoKFNpemUgJSA0VSkgIT0gMFUpCisgIHsKKyAgICByZXR1cm4gIEhBTF9FUlJPUjsKKyAgfQogCiAgIC8qIEluaXRpYXRlIEhBU0ggcHJvY2Vzc2luZyBpbiBjYXNlIG9mIHN0YXJ0IG9yIHJlc3VtcHRpb24gKi8KIGlmKChTdGF0ZV90bXAgPT0gSEFMX0hBU0hfU1RBVEVfUkVBRFkpIHx8IChTdGF0ZV90bXAgPT0gSEFMX0hBU0hfU1RBVEVfU1VTUEVOREVEKSkKLSAgeyAKKyAgewogICAgIC8qIENoZWNrIGlucHV0IHBhcmFtZXRlcnMgKi8KICAgICBpZiAoKHBJbkJ1ZmZlciA9PSBOVUxMKSB8fCAoU2l6ZSA9PSAwVSkpCiAgICAgewpAQCAtMjQ2MiwyMyArMjY0NiwxNTEgQEAKIAogCiAvKioKKyAgKiBAYnJpZWYgIElmIG5vdCBhbHJlYWR5IGRvbmUsIGluaXRpYWxpemUgdGhlIEhBU0ggcGVyaXBoZXJhbCB0aGVuCisgICogICAgICAgICBwcm9jZXNzZXMgcEluQnVmZmVyIGluIGludGVycnVwdGlvbiBtb2RlLgorICAqIEBub3RlICAgRmllbGQgaGhhc2gtPlBoYXNlIG9mIEhBU0ggaGFuZGxlIGlzIHRlc3RlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqICAgICAgICAgdGhlIFBlcmlwaGVyYWwgaGFzIGFscmVhZHkgYmVlbiBpbml0aWFsaXplZC4KKyAgKiBAbm90ZSAgIFRoZSBpbnB1dCBidWZmZXIgc2l6ZSAoaW4gYnl0ZXMpIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0IG90aGVyd2lzZSwgdGhlCisgICogICAgICAgICBIQVNIIGRpZ2VzdCBjb21wdXRhdGlvbiBpcyBjb3JydXB0ZWQuCisgICogQHBhcmFtICBoaGFzaCBIQVNIIGhhbmRsZS4KKyAgKiBAcGFyYW0gIHBJbkJ1ZmZlciBwb2ludGVyIHRvIHRoZSBpbnB1dCBidWZmZXIgKGJ1ZmZlciB0byBiZSBoYXNoZWQpLgorICAqIEBwYXJhbSAgU2l6ZSBsZW5ndGggb2YgdGhlIGlucHV0IGJ1ZmZlciBpbiBieXRlcywgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQuCisgICogQHBhcmFtICBBbGdvcml0aG0gSEFTSCBhbGdvcml0aG0uCisgICogQHJldHZhbCBIQUwgc3RhdHVzCisgICovCitIQUxfU3RhdHVzVHlwZURlZiBIQVNIX0FjY3VtdWxhdGVfSVQoSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCwgdWludDhfdCAqcEluQnVmZmVyLCB1aW50MzJfdCBTaXplLCB1aW50MzJfdCBBbGdvcml0aG0pCit7CisgIEhBTF9IQVNIX1N0YXRlVHlwZURlZiBTdGF0ZV90bXAgPSBoaGFzaC0+U3RhdGU7CisgIF9fSU8gdWludDMyX3QgaW5wdXRhZGRyID0gKHVpbnQzMl90KSBwSW5CdWZmZXI7CisgIHVpbnQzMl90IFNpemVWYXIgPSBTaXplOworCisgIC8qIE1ha2Ugc3VyZSB0aGUgaW5wdXQgYnVmZmVyIHNpemUgKGluIGJ5dGVzKSBpcyBhIG11bHRpcGxlIG9mIDQgKi8KKyAgaWYgKChTaXplICUgNFUpICE9IDBVKQorICB7CisgICAgcmV0dXJuICBIQUxfRVJST1I7CisgIH0KKworICAvKiBJbml0aWF0ZSBIQVNIIHByb2Nlc3NpbmcgaW4gY2FzZSBvZiBzdGFydCBvciByZXN1bXB0aW9uICovCisgIGlmKChTdGF0ZV90bXAgPT0gSEFMX0hBU0hfU1RBVEVfUkVBRFkpIHx8IChTdGF0ZV90bXAgPT0gSEFMX0hBU0hfU1RBVEVfU1VTUEVOREVEKSkKKyAgeworICAgIC8qIENoZWNrIGlucHV0IHBhcmFtZXRlcnMgKi8KKyAgICBpZiAoKHBJbkJ1ZmZlciA9PSBOVUxMKSB8fCAoU2l6ZSA9PSAwVSkpCisgICAgeworICAgICAgaGhhc2gtPlN0YXRlID0gSEFMX0hBU0hfU1RBVEVfUkVBRFk7CisgICAgICByZXR1cm4gIEhBTF9FUlJPUjsKKyAgICB9CisKKyAgICAgLyogUHJvY2VzcyBMb2NrZWQgKi8KKyAgICBfX0hBTF9MT0NLKGhoYXNoKTsKKworICAgIC8qIElmIHJlc3VtaW5nIHRoZSBIQVNIIHByb2Nlc3NpbmcgKi8KKyAgICBpZiAoaGhhc2gtPlN0YXRlID09IEhBTF9IQVNIX1NUQVRFX1NVU1BFTkRFRCkKKyAgICB7CisgICAgICAvKiBDaGFuZ2UgdGhlIEhBU0ggc3RhdGUgKi8KKyAgICAgIGhoYXNoLT5TdGF0ZSA9IEhBTF9IQVNIX1NUQVRFX0JVU1k7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAvKiBDaGFuZ2UgdGhlIEhBU0ggc3RhdGUgKi8KKyAgICAgIGhoYXNoLT5TdGF0ZSA9IEhBTF9IQVNIX1NUQVRFX0JVU1k7CisKKyAgICAgIC8qIENoZWNrIGlmIGluaXRpYWxpemF0aW9uIHBoYXNlIGhhcyBhbHJlYWR5IGJlIHBlcmZvcm1lZCAqLworICAgICAgaWYoaGhhc2gtPlBoYXNlID09IEhBTF9IQVNIX1BIQVNFX1JFQURZKQorICAgICAgeworICAgICAgICAvKiBTZWxlY3QgdGhlIEhBU0ggYWxnb3JpdGhtLCBjbGVhciBITUFDIG1vZGUgYW5kIGxvbmcga2V5IHNlbGVjdGlvbiBiaXQsIHJlc2V0IHRoZSBIQVNIIHByb2Nlc3NvciBjb3JlICovCisgICAgICAgIE1PRElGWV9SRUcoSEFTSC0+Q1IsIEhBU0hfQ1JfTEtFWXxIQVNIX0NSX0FMR098SEFTSF9DUl9NT0RFfEhBU0hfQ1JfSU5JVCwgQWxnb3JpdGhtIHwgSEFTSF9DUl9JTklUKTsKKyAgICAgICAgaGhhc2gtPkhhc2hJVENvdW50ZXIgPSAxOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICAgaGhhc2gtPkhhc2hJVENvdW50ZXIgPSAzOyAvKiAnY3J1aXNlLXNwZWVkJyByZWFjaGVkIGR1cmluZyBhIHByZXZpb3VzIGJ1ZmZlciBwcm9jZXNzaW5nICovCisgICAgICB9CisKKyAgICAgIC8qIFNldCB0aGUgcGhhc2UgKi8KKyAgICAgIGhoYXNoLT5QaGFzZSA9IEhBTF9IQVNIX1BIQVNFX1BST0NFU1M7CisKKyAgICAgIC8qIElmIERJTklTIGlzIGVxdWFsIHRvIDAgKGZvciBleGFtcGxlIGlmIGFuIGluY29tcGxldGUgYmxvY2sgaGFzIGJlZW4gcHJldmlvdXNseQorICAgICAgIGZlZCB0byB0aGUgUGVyaXBoZXJhbCksIHRoZSBESU5JRSBpbnRlcnJ1cHRpb24gd29uJ3QgYmUgdHJpZ2dlcmVkIHdoZW4gRElOSUUgaXMgc2V0LgorICAgICAgIFRoZXJlZm9yZSwgZmlyc3Qgd29yZHMgYXJlIG1hbnVhbGx5IGVudGVyZWQgdW50aWwgRElOSVMgcmFpc2VzLCBvciB1bnRpbCB0aGVyZQorICAgICAgIGlzIG5vdCBtb3JlIGRhdGEgdG8gZW50ZXIuICovCisgICAgICB3aGlsZSgoIShfX0hBTF9IQVNIX0dFVF9GTEFHKEhBU0hfRkxBR19ESU5JUykpKSAmJiAoU2l6ZVZhciA+IDBVKSkKKyAgICAgIHsKKworICAgICAgICAvKiBXcml0ZSBpbnB1dCBkYXRhIDQgYnl0ZXMgYXQgYSB0aW1lICovCisgICAgICAgIEhBU0gtPkRJTiA9ICoodWludDMyX3QqKWlucHV0YWRkcjsKKyAgICAgICAgaW5wdXRhZGRyKz00VTsKKyAgICAgICAgU2l6ZVZhci09NFU7CisgICAgICB9CisKKyAgICAgIC8qIElmIERJTklTIGlzIHN0aWxsIG5vdCBzZXQgb3IgaWYgYWxsIHRoZSBkYXRhIGhhdmUgYmVlbiBmZWQsIHN0b3AgaGVyZSAqLworICAgICAgaWYgKCghKF9fSEFMX0hBU0hfR0VUX0ZMQUcoSEFTSF9GTEFHX0RJTklTKSkpIHx8IChTaXplVmFyID09IDBVKSkKKyAgICAgIHsKKyAgICAgICAgLyogQ2hhbmdlIHRoZSBIQVNIIHN0YXRlICovCisgICAgICAgIGhoYXNoLT5TdGF0ZSA9IEhBTF9IQVNIX1NUQVRFX1JFQURZOworCisgICAgICAgIC8qIFByb2Nlc3MgVW5sb2NrICovCisgICAgICAgIF9fSEFMX1VOTE9DSyhoaGFzaCk7CisKKyAgICAgICAgLyogUmV0dXJuIGZ1bmN0aW9uIHN0YXR1cyAqLworICAgICAgICByZXR1cm4gSEFMX09LOworICAgICAgfQorCisgICAgICAvKiBvdGhlcndpc2UsIGNhcnJ5IG9uIGluIGludGVycnVwdC1tb2RlICovCisgICAgICBoaGFzaC0+SGFzaEluQ291bnQgPSBTaXplVmFyOyAgICAgICAgICAgICAgIC8qIENvdW50ZXIgdXNlZCB0byBrZWVwIHRyYWNrIG9mIG51bWJlciBvZiBkYXRhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGJlIGZlZCB0byB0aGUgUGVyaXBoZXJhbCAqLworICAgICAgaGhhc2gtPnBIYXNoSW5CdWZmUHRyID0gKHVpbnQ4X3QgKilpbnB1dGFkZHI7ICAgICAgIC8qIFBvaW50cyBhdCBkYXRhIHdoaWNoIHdpbGwgYmUgZmVkIHRvIHRoZSBQZXJpcGhlcmFsIGF0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBuZXh0IGludGVycnVwdGlvbiAqLworICAgICAvKiBJbiBjYXNlIG9mIHN1c3BlbnNpb24sIGhoYXNoLT5IYXNoSW5Db3VudCBhbmQgaGhhc2gtPnBIYXNoSW5CdWZmUHRyIGNvbnRhaW4KKyAgICAgICAgdGhlIGluZm9ybWF0aW9uIGRlc2NyaWJpbmcgd2hlcmUgdGhlIEhBU0ggcHJvY2VzcyBpcyBzdG9wcGVkLgorICAgICAgICBUaGVzZSB2YXJpYWJsZXMgYXJlIHVzZWQgbGF0ZXIgb24gdG8gcmVzdW1lIHRoZSBIQVNIIHByb2Nlc3NpbmcgYXQgdGhlCisgICAgICAgIGNvcnJlY3QgbG9jYXRpb24uICovCisKKyAgICB9CisKKyAgICAvKiBTZXQgbXVsdGkgYnVmZmVycyBhY2N1bXVsYXRpb24gZmxhZyAqLworICAgIGhoYXNoLT5BY2N1bXVsYXRpb24gPSAxVTsKKworICAgIC8qIFByb2Nlc3MgVW5sb2NrICovCisgICAgX19IQUxfVU5MT0NLKGhoYXNoKTsKKworICAgIC8qIEVuYWJsZSBEYXRhIElucHV0IGludGVycnVwdCAqLworICAgIF9fSEFMX0hBU0hfRU5BQkxFX0lUKEhBU0hfSVRfRElOSSk7CisKKyAgICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCisgICAgcmV0dXJuIEhBTF9PSzsKKworICB9CisgIGVsc2UKKyAgeworICAgIHJldHVybiBIQUxfQlVTWTsKKyAgfQorCit9CisKKworCisvKioKICAgKiBAYnJpZWYgIEluaXRpYWxpemUgdGhlIEhBU0ggcGVyaXBoZXJhbCwgbmV4dCBwcm9jZXNzIHBJbkJ1ZmZlciB0aGVuCiAgICogICAgICAgICByZWFkIHRoZSBjb21wdXRlZCBkaWdlc3QgaW4gaW50ZXJydXB0aW9uIG1vZGUuCiAgICogQG5vdGUgICBEaWdlc3QgaXMgYXZhaWxhYmxlIGluIHBPdXRCdWZmZXIuCi0gICogQHBhcmFtICBoaGFzaDogSEFTSCBoYW5kbGUuCi0gICogQHBhcmFtICBwSW5CdWZmZXI6IHBvaW50ZXIgdG8gdGhlIGlucHV0IGJ1ZmZlciAoYnVmZmVyIHRvIGJlIGhhc2hlZCkuCi0gICogQHBhcmFtICBTaXplOiBsZW5ndGggb2YgdGhlIGlucHV0IGJ1ZmZlciBpbiBieXRlcy4KLSAgKiBAcGFyYW0gIHBPdXRCdWZmZXI6IHBvaW50ZXIgdG8gdGhlIGNvbXB1dGVkIGRpZ2VzdC4KLSAgKiBAcGFyYW0gIEFsZ29yaXRobTogSEFTSCBhbGdvcml0aG0uCisgICogQHBhcmFtICBoaGFzaCBIQVNIIGhhbmRsZS4KKyAgKiBAcGFyYW0gIHBJbkJ1ZmZlciBwb2ludGVyIHRvIHRoZSBpbnB1dCBidWZmZXIgKGJ1ZmZlciB0byBiZSBoYXNoZWQpLgorICAqIEBwYXJhbSAgU2l6ZSBsZW5ndGggb2YgdGhlIGlucHV0IGJ1ZmZlciBpbiBieXRlcy4KKyAgKiBAcGFyYW0gIHBPdXRCdWZmZXIgcG9pbnRlciB0byB0aGUgY29tcHV0ZWQgZGlnZXN0LgorICAqIEBwYXJhbSAgQWxnb3JpdGhtIEhBU0ggYWxnb3JpdGhtLgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFTSF9TdGFydF9JVChIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoLCB1aW50OF90ICpwSW5CdWZmZXIsIHVpbnQzMl90IFNpemUsIHVpbnQ4X3QqIHBPdXRCdWZmZXIsIHVpbnQzMl90IEFsZ29yaXRobSkKIHsKICAgIEhBTF9IQVNIX1N0YXRlVHlwZURlZiBTdGF0ZV90bXAgPSBoaGFzaC0+U3RhdGU7CisgIF9fSU8gdWludDMyX3QgaW5wdXRhZGRyID0gKHVpbnQzMl90KSBwSW5CdWZmZXI7CisgIHVpbnQzMl90IHBvbGxpbmdfc3RlcCA9IDBVOworICB1aW50MzJfdCBpbml0aWFsaXphdGlvbl9za2lwcGVkID0gMFU7CisgIHVpbnQzMl90IFNpemVWYXIgPSBTaXplOwogCiAgIC8qIElmIFN0YXRlIGlzIHJlYWR5IG9yIHN1c3BlbmRlZCwgc3RhcnQgb3IgcmVzdW1lIElULWJhc2VkIEhBU0ggcHJvY2Vzc2luZyAqLwogaWYoKFN0YXRlX3RtcCA9PSBIQUxfSEFTSF9TVEFURV9SRUFEWSkgfHwgKFN0YXRlX3RtcCA9PSBIQUxfSEFTSF9TVEFURV9TVVNQRU5ERUQpKQotICB7ICAgICAKKyAgewogICAgIC8qIENoZWNrIGlucHV0IHBhcmFtZXRlcnMgKi8KICAgICBpZiAoKHBJbkJ1ZmZlciA9PSBOVUxMKSB8fCAoU2l6ZSA9PSAwVSkgfHwgKHBPdXRCdWZmZXIgPT0gTlVMTCkpCiAgICAgewpAQCAtMjUwMiwxMiArMjgxNCwxMiBAQAogICAgICAgTU9ESUZZX1JFRyhIQVNILT5DUiwgSEFTSF9DUl9MS0VZfEhBU0hfQ1JfQUxHT3xIQVNIX0NSX01PREV8SEFTSF9DUl9JTklULCBBbGdvcml0aG0gfCBIQVNIX0NSX0lOSVQpOwogCiAgICAgICAvKiBDb25maWd1cmUgdGhlIG51bWJlciBvZiB2YWxpZCBiaXRzIGluIGxhc3Qgd29yZCBvZiB0aGUgbWVzc2FnZSAqLwotICAgICBfX0hBTF9IQVNIX1NFVF9OQlZBTElEQklUUyhTaXplKTsKKyAgICAgX19IQUxfSEFTSF9TRVRfTkJWQUxJREJJVFMoU2l6ZVZhcik7CiAKIAotICAgICAgaGhhc2gtPkhhc2hJbkNvdW50ID0gU2l6ZTsgICAgICAgICAgICAgICAvKiBDb3VudGVyIHVzZWQgdG8ga2VlcCB0cmFjayBvZiBudW1iZXIgb2YgZGF0YQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBiZSBmZWQgdG8gdGhlIElQICovCi0gICAgICBoaGFzaC0+cEhhc2hJbkJ1ZmZQdHIgPSBwSW5CdWZmZXI7ICAgICAgIC8qIFBvaW50cyBhdCBkYXRhIHdoaWNoIHdpbGwgYmUgZmVkIHRvIHRoZSBJUCBhdAorICAgICAgaGhhc2gtPkhhc2hJbkNvdW50ID0gU2l6ZVZhcjsgICAgICAgICAgICAvKiBDb3VudGVyIHVzZWQgdG8ga2VlcCB0cmFjayBvZiBudW1iZXIgb2YgZGF0YQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBiZSBmZWQgdG8gdGhlIFBlcmlwaGVyYWwgKi8KKyAgICAgIGhoYXNoLT5wSGFzaEluQnVmZlB0ciA9IHBJbkJ1ZmZlcjsgICAgICAgLyogUG9pbnRzIGF0IGRhdGEgd2hpY2ggd2lsbCBiZSBmZWQgdG8gdGhlIFBlcmlwaGVyYWwgYXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG5leHQgaW50ZXJydXB0aW9uICovCiAgICAgIC8qIEluIGNhc2Ugb2Ygc3VzcGVuc2lvbiwgaGhhc2gtPkhhc2hJbkNvdW50IGFuZCBoaGFzaC0+cEhhc2hJbkJ1ZmZQdHIgY29udGFpbgogICAgICAgICB0aGUgaW5mb3JtYXRpb24gZGVzY3JpYmluZyB3aGVyZSB0aGUgSEFTSCBwcm9jZXNzIGlzIHN0b3BwZWQuCkBAIC0yNTE2LDEwICsyODI4LDgyIEBACiAKICAgICAgIGhoYXNoLT5wSGFzaE91dEJ1ZmZQdHIgPSBwT3V0QnVmZmVyOyAgICAgLyogUG9pbnRzIGF0IHRoZSBjb21wdXRlZCBkaWdlc3QgKi8KICAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIGluaXRpYWxpemF0aW9uX3NraXBwZWQgPSAxOyAvKiBpbmZvIHVzZXIgbGF0ZXIgb24gaW4gY2FzZSBvZiBtdWx0aS1idWZmZXIgKi8KKyAgICB9CiAKICAgICAvKiBTZXQgdGhlIHBoYXNlICovCiAgICAgaGhhc2gtPlBoYXNlID0gSEFMX0hBU0hfUEhBU0VfUFJPQ0VTUzsKIAorICAgLyogSWYgRElOSVMgaXMgZXF1YWwgdG8gMCAoZm9yIGV4YW1wbGUgaWYgYW4gaW5jb21wbGV0ZSBibG9jayBoYXMgYmVlbiBwcmV2aW91c2x5CisgICAgIGZlZCB0byB0aGUgUGVyaXBoZXJhbCksIHRoZSBESU5JRSBpbnRlcnJ1cHRpb24gd29uJ3QgYmUgdHJpZ2dlcmVkIHdoZW4gRElOSUUgaXMgc2V0LgorICAgICBUaGVyZWZvcmUsIGZpcnN0IHdvcmRzIGFyZSBtYW51YWxseSBlbnRlcmVkIHVudGlsIERJTklTIHJhaXNlcy4gKi8KKyAgICB3aGlsZSgoIShfX0hBTF9IQVNIX0dFVF9GTEFHKEhBU0hfRkxBR19ESU5JUykpKSAmJiAoU2l6ZVZhciA+IDNVKSkKKyAgICB7CisgICAgICBwb2xsaW5nX3N0ZXAgPSAxVTsgLyogbm90ZSB0aGF0IHNvbWUgd29yZHMgYXJlIGVudGVyZWQgYmVmb3JlIGVuYWJsaW5nIHRoZSBpbnRlcnJ1cHQgKi8KKworICAgICAgLyogV3JpdGUgaW5wdXQgZGF0YSA0IGJ5dGVzIGF0IGEgdGltZSAqLworICAgICAgSEFTSC0+RElOID0gKih1aW50MzJfdCopaW5wdXRhZGRyOworICAgICAgaW5wdXRhZGRyKz00VTsKKyAgICAgIFNpemVWYXItPTRVOworICAgIH0KKworICAgIGlmIChwb2xsaW5nX3N0ZXAgPT0gMVUpCisgICAgeworICAgICAgaWYgKFNpemVWYXIgPT0gMFUpCisgICAgICB7CisgICAgICAgIC8qIElmIGFsbCB0aGUgZGF0YSBoYXZlIGJlZW4gZW50ZXJlZCBhdCB0aGlzIHBvaW50LCBpdCBvbmx5IHJlbWFpbnMgdG8KKyAgICAgICAgIHJlYWQgdGhlIGRpZ2VzdCAqLworICAgICAgICBoaGFzaC0+cEhhc2hPdXRCdWZmUHRyID0gcE91dEJ1ZmZlcjsgICAgIC8qIFBvaW50cyBhdCB0aGUgY29tcHV0ZWQgZGlnZXN0ICovCisKKyAgICAgICAgLyogU3RhcnQgdGhlIERpZ2VzdCBjYWxjdWxhdGlvbiAqLworICAgICAgICAgX19IQUxfSEFTSF9TVEFSVF9ESUdFU1QoKTsKKyAgICAgICAgLyogUHJvY2VzcyBVbmxvY2sgKi8KKyAgICAgICAgX19IQUxfVU5MT0NLKGhoYXNoKTsKKworICAgICAgICAvKiBFbmFibGUgSW50ZXJydXB0cyAqLworICAgICAgICBfX0hBTF9IQVNIX0VOQUJMRV9JVChIQVNIX0lUX0RDSSk7CisKKyAgICAgICAgLyogUmV0dXJuIGZ1bmN0aW9uIHN0YXR1cyAqLworICAgICAgICByZXR1cm4gSEFMX09LOworICAgICAgfQorICAgICAgZWxzZSBpZiAoX19IQUxfSEFTSF9HRVRfRkxBRyhIQVNIX0ZMQUdfRElOSVMpKQorICAgICAgeworICAgICAgICAvKiBJdCByZW1haW5zIGRhdGEgdG8gZW50ZXIgYW5kIHRoZSBQZXJpcGhlcmFsIGlzIHJlYWR5IHRvIHRyaWdnZXIgRElOSUUsCisgICAgICAgICAgIGNhcnJ5IG9uIGFzIHVzdWFsLgorICAgICAgICAgICBVcGRhdGUgSGFzaEluQ291bnQgYW5kIHBIYXNoSW5CdWZmUHRyIGFjY29yZGluZ2x5LiAqLworICAgICAgICBoaGFzaC0+SGFzaEluQ291bnQgPSBTaXplVmFyOworICAgICAgICBoaGFzaC0+cEhhc2hJbkJ1ZmZQdHIgPSAodWludDhfdCAqKWlucHV0YWRkcjsKKyAgICAgICAgX19IQUxfSEFTSF9TRVRfTkJWQUxJREJJVFMoU2l6ZVZhcik7ICAvKiBVcGRhdGUgdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIG51bWJlciBvZiB2YWxpZCBiaXRzIGluIGxhc3Qgd29yZCBvZiB0aGUgbWVzc2FnZSAqLworICAgICAgICBoaGFzaC0+cEhhc2hPdXRCdWZmUHRyID0gcE91dEJ1ZmZlcjsgIC8qIFBvaW50cyBhdCB0aGUgY29tcHV0ZWQgZGlnZXN0ICovCisgICAgICAgIGlmIChpbml0aWFsaXphdGlvbl9za2lwcGVkID09IDFVKQorICAgICAgICB7CisgICAgICAgICAgaGhhc2gtPkhhc2hJVENvdW50ZXIgPSAzOyAvKiAnY3J1aXNlLXNwZWVkJyByZWFjaGVkIGR1cmluZyBhIHByZXZpb3VzIGJ1ZmZlciBwcm9jZXNzaW5nICovCisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgLyogRElOSVMgaXMgbm90IHNldCBidXQgaXQgcmVtYWlucyBhIGZldyBkYXRhIHRvIGVudGVyIChub3QgZW5vdWdoIGZvciBhIGZ1bGwgd29yZCkuCisgICAgICAgICAgIE1hbnVhbGx5IGVudGVyIHRoZSBsYXN0IGJ5dGVzIGJlZm9yZSBlbmFibGluZyBEQ0lFLiAqLworICAgICAgICBfX0hBTF9IQVNIX1NFVF9OQlZBTElEQklUUyhTaXplVmFyKTsKKyAgICAgICAgSEFTSC0+RElOID0gKih1aW50MzJfdCopaW5wdXRhZGRyOworCisgICAgICAgICAvKiBTdGFydCB0aGUgRGlnZXN0IGNhbGN1bGF0aW9uICovCisgICAgICAgIGhoYXNoLT5wSGFzaE91dEJ1ZmZQdHIgPSBwT3V0QnVmZmVyOyAgICAgLyogUG9pbnRzIGF0IHRoZSBjb21wdXRlZCBkaWdlc3QgKi8KKyAgICAgICAgIF9fSEFMX0hBU0hfU1RBUlRfRElHRVNUKCk7CisgICAgICAgIC8qIFByb2Nlc3MgVW5sb2NrICovCisgICAgICAgIF9fSEFMX1VOTE9DSyhoaGFzaCk7CisKKyAgICAgICAgLyogRW5hYmxlIEludGVycnVwdHMgKi8KKyAgICAgICAgX19IQUxfSEFTSF9FTkFCTEVfSVQoSEFTSF9JVF9EQ0kpOworCisgICAgICAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KKyAgICAgICAgcmV0dXJuIEhBTF9PSzsKKyAgICAgIH0KKyAgICB9IC8qICBpZiAocG9sbGluZ19zdGVwID09IDEpICovCisKKwogICAgIC8qIFByb2Nlc3MgVW5sb2NrICovCiAgICAgX19IQUxfVU5MT0NLKGhoYXNoKTsKIApAQCAtMjUzOSwxNyArMjkyMywxNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIEluaXRpYWxpemUgdGhlIEhBU0ggcGVyaXBoZXJhbCB0aGVuIGluaXRpYXRlIGEgRE1BIHRyYW5zZmVyCi0gICogICAgICAgICB0byBmZWVkIHRoZSBpbnB1dCBidWZmZXIgdG8gdGhlIElQLgorICAqICAgICAgICAgdG8gZmVlZCB0aGUgaW5wdXQgYnVmZmVyIHRvIHRoZSBQZXJpcGhlcmFsLgogICAqIEBub3RlICAgSWYgTURNQVQgYml0IGlzIHNldCBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIChtdWx0aS1idWZmZXIKICAgKiAgICAgICAgICBIQVNIIHByb2Nlc3NpbmcgY2FzZSksIHRoZSBpbnB1dCBidWZmZXIgc2l6ZSAoaW4gYnl0ZXMpIG11c3QgYmUKICAgKiAgICAgICAgICBhIG11bHRpcGxlIG9mIDQgb3RoZXJ3aXNlLCB0aGUgSEFTSCBkaWdlc3QgY29tcHV0YXRpb24gaXMgY29ycnVwdGVkLgogICAqICAgICAgICAgIEZvciB0aGUgcHJvY2Vzc2luZyBvZiB0aGUgbGFzdCBidWZmZXIgb2YgdGhlIHRocmVhZCwgTURNQVQgYml0IG11c3QKICAgKiAgICAgICAgICBiZSByZXNldCBhbmQgdGhlIGJ1ZmZlciBsZW5ndGggKGluIGJ5dGVzKSBkb2Vzbid0IGhhdmUgdG8gYmUgYQogICAqICAgICAgICAgIG11bHRpcGxlIG9mIDQuCi0gICogQHBhcmFtICBoaGFzaDogSEFTSCBoYW5kbGUuCi0gICogQHBhcmFtICBwSW5CdWZmZXI6IHBvaW50ZXIgdG8gdGhlIGlucHV0IGJ1ZmZlciAoYnVmZmVyIHRvIGJlIGhhc2hlZCkuCi0gICogQHBhcmFtICBTaXplOiBsZW5ndGggb2YgdGhlIGlucHV0IGJ1ZmZlciBpbiBieXRlcy4KLSAgKiBAcGFyYW0gIEFsZ29yaXRobTogSEFTSCBhbGdvcml0aG0uCisgICogQHBhcmFtICBoaGFzaCBIQVNIIGhhbmRsZS4KKyAgKiBAcGFyYW0gIHBJbkJ1ZmZlciBwb2ludGVyIHRvIHRoZSBpbnB1dCBidWZmZXIgKGJ1ZmZlciB0byBiZSBoYXNoZWQpLgorICAqIEBwYXJhbSAgU2l6ZSBsZW5ndGggb2YgdGhlIGlucHV0IGJ1ZmZlciBpbiBieXRlcy4KKyAgKiBAcGFyYW0gIEFsZ29yaXRobSBIQVNIIGFsZ29yaXRobS4KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBU0hfU3RhcnRfRE1BKEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gsIHVpbnQ4X3QgKnBJbkJ1ZmZlciwgdWludDMyX3QgU2l6ZSwgdWludDMyX3QgQWxnb3JpdGhtKQpAQCAtMjU2Niw3ICsyOTUwLDcgQEAKICNlbmRpZiAvKiBNRE1BIGRlZmluZWQqLwogICAgLyogSWYgU3RhdGUgaXMgcmVhZHkgb3Igc3VzcGVuZGVkLCBzdGFydCBvciByZXN1bWUgcG9sbGluZy1iYXNlZCBIQVNIIHByb2Nlc3NpbmcgKi8KIGlmKChTdGF0ZV90bXAgPT0gSEFMX0hBU0hfU1RBVEVfUkVBRFkpIHx8IChTdGF0ZV90bXAgPT0gSEFMX0hBU0hfU1RBVEVfU1VTUEVOREVEKSkKLSAgeyAKKyAgewogICAgIC8qIENoZWNrIGlucHV0IHBhcmFtZXRlcnMgKi8KICAgICBpZiAoIChwSW5CdWZmZXIgPT0gTlVMTCApIHx8IChTaXplID09IDBVKSB8fAogICAgIC8qIENoZWNrIHBoYXNlIGNvaGVyZW5jeS4gUGhhc2UgbXVzdCBiZQpAQCAtMjYzNiwzOSArMzAyMCwzNCBAQAogCiAgICAgLyogRW5hYmxlIHRoZSBETUEgSW4gRE1BIFN0cmVhbSAqLwogICAgIHN0YXR1cyA9IEhBTF9ETUFfU3RhcnRfSVQoaGhhc2gtPmhkbWFpbiwgaW5wdXRhZGRyLCAodWludDMyX3QpJkhBU0gtPkRJTiwgKCgoaW5wdXRTaXplICU0VSkhPTBVKSA/ICgoaW5wdXRTaXplKyg0VS0oaW5wdXRTaXplICU0VSkpKS80VSk6KGlucHV0U2l6ZS80VSkpKTsKLSAgICAKKwogICAgIC8qIEVuYWJsZSBETUEgcmVxdWVzdHMgKi8KICAgICBTRVRfQklUKEhBU0gtPkNSLCBIQVNIX0NSX0RNQUUpOwotICAgIAorCiAgICAgLyogUHJvY2VzcyBVbmxvY2sgKi8KICAgICBfX0hBTF9VTkxPQ0soaGhhc2gpOwotICAgIAorCiAgICAgLyogUmV0dXJuIGZ1bmN0aW9uIHN0YXR1cyAqLwogICAgIGlmIChzdGF0dXMgIT0gSEFMX09LKQogICAgIHsKICAgICAgIC8qIFVwZGF0ZSBIQVNIIHN0YXRlIG1hY2hpbmUgdG8gZXJyb3IgKi8KLSAgICAgIGhoYXNoLT5TdGF0ZSA9IEhBTF9IQVNIX1NUQVRFX0VSUk9SOyAgICAgIAorICAgICAgaGhhc2gtPlN0YXRlID0gSEFMX0hBU0hfU1RBVEVfRVJST1I7CiAgICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAvKiBDaGFuZ2UgSEFTSCBzdGF0ZSAqLwotICAgICAgaGhhc2gtPlN0YXRlID0gSEFMX0hBU0hfU1RBVEVfUkVBRFk7Ci0gICAgfQotICAgIAorCiAgICAgcmV0dXJuIHN0YXR1czsKICAgfQogICBlbHNlCiAgIHsKICAgICByZXR1cm4gSEFMX0JVU1k7Ci0gIH0gCisgIH0KIH0KIAogLyoqCiAgICogQGJyaWVmICBSZXR1cm4gdGhlIGNvbXB1dGVkIGRpZ2VzdC4KICAgKiBAbm90ZSAgIFRoZSBBUEkgd2FpdHMgZm9yIERDSVMgdG8gYmUgc2V0IHRoZW4gcmVhZHMgdGhlIGNvbXB1dGVkIGRpZ2VzdC4KLSAgKiBAcGFyYW0gIGhoYXNoOiBIQVNIIGhhbmRsZS4KLSAgKiBAcGFyYW0gIHBPdXRCdWZmZXI6IHBvaW50ZXIgdG8gdGhlIGNvbXB1dGVkIGRpZ2VzdC4KLSAgKiBAcGFyYW0gIFRpbWVvdXQ6IFRpbWVvdXQgdmFsdWUuCisgICogQHBhcmFtICBoaGFzaCBIQVNIIGhhbmRsZS4KKyAgKiBAcGFyYW0gIHBPdXRCdWZmZXIgcG9pbnRlciB0byB0aGUgY29tcHV0ZWQgZGlnZXN0LgorICAqIEBwYXJhbSAgVGltZW91dCBUaW1lb3V0IHZhbHVlLgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFTSF9GaW5pc2goSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCwgdWludDhfdCogcE91dEJ1ZmZlciwgdWludDMyX3QgVGltZW91dCkKQEAgLTI3MDAsNiArMzA3OSw5IEBACiAgICAgLyogQ2hhbmdlIHRoZSBIQVNIIHN0YXRlIHRvIHJlYWR5ICovCiAgICAgaGhhc2gtPlN0YXRlID0gSEFMX0hBU0hfU1RBVEVfUkVBRFk7CiAKKyAgICAvKiBSZXNldCBIQVNIIHN0YXRlIG1hY2hpbmUgKi8KKyAgICBoaGFzaC0+UGhhc2UgPSBIQUxfSEFTSF9QSEFTRV9SRUFEWTsKKwogICAgIC8qIFByb2Nlc3MgVW5Mb2NrICovCiAgICAgX19IQUxfVU5MT0NLKGhoYXNoKTsKIApAQCAtMjcyMSwyMSArMzEwMywyMSBAQAogICAqIEBub3RlICAgRGlnZXN0IGlzIGF2YWlsYWJsZSBpbiBwT3V0QnVmZmVyLgogICAqIEBub3RlICAgU2FtZSBrZXkgaXMgdXNlZCBmb3IgdGhlIGlubmVyIGFuZCB0aGUgb3V0ZXIgaGFzaCBmdW5jdGlvbnM7IHBvaW50ZXIgdG8ga2V5IGFuZAogICAqICAgICAgICAga2V5IHNpemUgYXJlIHJlc3BlY3RpdmVseSBzdG9yZWQgaW4gaGhhc2gtPkluaXQucEtleSBhbmQgaGhhc2gtPkluaXQuS2V5U2l6ZS4KLSAgKiBAcGFyYW0gIGhoYXNoOiBIQVNIIGhhbmRsZS4KLSAgKiBAcGFyYW0gIHBJbkJ1ZmZlcjogcG9pbnRlciB0byB0aGUgaW5wdXQgYnVmZmVyIChidWZmZXIgdG8gYmUgaGFzaGVkKS4KLSAgKiBAcGFyYW0gIFNpemU6IGxlbmd0aCBvZiB0aGUgaW5wdXQgYnVmZmVyIGluIGJ5dGVzLgotICAqIEBwYXJhbSAgcE91dEJ1ZmZlcjogcG9pbnRlciB0byB0aGUgY29tcHV0ZWQgZGlnZXN0LgotICAqIEBwYXJhbSAgVGltZW91dDogVGltZW91dCB2YWx1ZS4KLSAgKiBAcGFyYW0gIEFsZ29yaXRobTogSEFTSCBhbGdvcml0aG0uCisgICogQHBhcmFtICBoaGFzaCBIQVNIIGhhbmRsZS4KKyAgKiBAcGFyYW0gIHBJbkJ1ZmZlciBwb2ludGVyIHRvIHRoZSBpbnB1dCBidWZmZXIgKGJ1ZmZlciB0byBiZSBoYXNoZWQpLgorICAqIEBwYXJhbSAgU2l6ZSBsZW5ndGggb2YgdGhlIGlucHV0IGJ1ZmZlciBpbiBieXRlcy4KKyAgKiBAcGFyYW0gIHBPdXRCdWZmZXIgcG9pbnRlciB0byB0aGUgY29tcHV0ZWQgZGlnZXN0LgorICAqIEBwYXJhbSAgVGltZW91dCBUaW1lb3V0IHZhbHVlLgorICAqIEBwYXJhbSAgQWxnb3JpdGhtIEhBU0ggYWxnb3JpdGhtLgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSE1BQ19TdGFydChIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoLCB1aW50OF90ICpwSW5CdWZmZXIsIHVpbnQzMl90IFNpemUsIHVpbnQ4X3QqIHBPdXRCdWZmZXIsIHVpbnQzMl90IFRpbWVvdXQsIHVpbnQzMl90IEFsZ29yaXRobSkKIHsKLSAgICBIQUxfSEFTSF9TdGF0ZVR5cGVEZWYgU3RhdGVfdG1wID0gaGhhc2gtPlN0YXRlOyAKLSAgCisgICAgSEFMX0hBU0hfU3RhdGVUeXBlRGVmIFN0YXRlX3RtcCA9IGhoYXNoLT5TdGF0ZTsKKwogICAgLyogSWYgU3RhdGUgaXMgcmVhZHkgb3Igc3VzcGVuZGVkLCBzdGFydCBvciByZXN1bWUgcG9sbGluZy1iYXNlZCBIQVNIIHByb2Nlc3NpbmcgKi8KIGlmKChTdGF0ZV90bXAgPT0gSEFMX0hBU0hfU1RBVEVfUkVBRFkpIHx8IChTdGF0ZV90bXAgPT0gSEFMX0hBU0hfU1RBVEVfU1VTUEVOREVEKSkKLSAgeyAKKyAgewogICAgIC8qIENoZWNrIGlucHV0IHBhcmFtZXRlcnMgKi8KICAgICBpZiAoKHBJbkJ1ZmZlciA9PSBOVUxMKSB8fCAoU2l6ZSA9PSAwVSkgfHwgKGhoYXNoLT5Jbml0LnBLZXkgPT0gTlVMTCkgfHwgKGhoYXNoLT5Jbml0LktleVNpemUgPT0gMFUpIHx8IChwT3V0QnVmZmVyID09IE5VTEwpKQogICAgIHsKQEAgLTI3NjMsNyArMzE0NSw3IEBACiAgICAgICB9CiAgICAgICAvKiBTZXQgdGhlIHBoYXNlIHRvIFN0ZXAgMSAqLwogICAgICAgaGhhc2gtPlBoYXNlID0gSEFMX0hBU0hfUEhBU0VfSE1BQ19TVEVQXzE7Ci0gICAgICAvKiBSZXNvcnQgdG8gaGhhc2ggaW50ZXJuYWwgZmllbGRzIHRvIGZlZWQgdGhlIElQLgorICAgICAgLyogUmVzb3J0IHRvIGhoYXNoIGludGVybmFsIGZpZWxkcyB0byBmZWVkIHRoZSBQZXJpcGhlcmFsLgogICAgICAgICAgUGFyYW1ldGVycyB3aWxsIGJlIHVwZGF0ZWQgaW4gY2FzZSBvZiBzdXNwZW5zaW9uIHRvIGNvbnRhaW4gdGhlIHByb3BlcgogICAgICAgICAgaW5mb3JtYXRpb24gYXQgcmVzdW1wdGlvbiB0aW1lLiAqLwogICAgICAgaGhhc2gtPnBIYXNoT3V0QnVmZlB0ciAgPSBwT3V0QnVmZmVyOyAgICAgICAgICAgIC8qIE91dHB1dCBkaWdlc3QgYWRkcmVzcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMjc5MiwyMCArMzE3NCwyMCBAQAogICAqIEBub3RlICAgRGlnZXN0IGlzIGF2YWlsYWJsZSBpbiBwT3V0QnVmZmVyLgogICAqIEBub3RlICAgU2FtZSBrZXkgaXMgdXNlZCBmb3IgdGhlIGlubmVyIGFuZCB0aGUgb3V0ZXIgaGFzaCBmdW5jdGlvbnM7IHBvaW50ZXIgdG8ga2V5IGFuZAogICAqICAgICAgICAga2V5IHNpemUgYXJlIHJlc3BlY3RpdmVseSBzdG9yZWQgaW4gaGhhc2gtPkluaXQucEtleSBhbmQgaGhhc2gtPkluaXQuS2V5U2l6ZS4KLSAgKiBAcGFyYW0gIGhoYXNoOiBIQVNIIGhhbmRsZS4KLSAgKiBAcGFyYW0gIHBJbkJ1ZmZlcjogcG9pbnRlciB0byB0aGUgaW5wdXQgYnVmZmVyIChidWZmZXIgdG8gYmUgaGFzaGVkKS4KLSAgKiBAcGFyYW0gIFNpemU6IGxlbmd0aCBvZiB0aGUgaW5wdXQgYnVmZmVyIGluIGJ5dGVzLgotICAqIEBwYXJhbSAgcE91dEJ1ZmZlcjogcG9pbnRlciB0byB0aGUgY29tcHV0ZWQgZGlnZXN0LgotICAqIEBwYXJhbSAgQWxnb3JpdGhtOiBIQVNIIGFsZ29yaXRobS4KKyAgKiBAcGFyYW0gIGhoYXNoIEhBU0ggaGFuZGxlLgorICAqIEBwYXJhbSAgcEluQnVmZmVyIHBvaW50ZXIgdG8gdGhlIGlucHV0IGJ1ZmZlciAoYnVmZmVyIHRvIGJlIGhhc2hlZCkuCisgICogQHBhcmFtICBTaXplIGxlbmd0aCBvZiB0aGUgaW5wdXQgYnVmZmVyIGluIGJ5dGVzLgorICAqIEBwYXJhbSAgcE91dEJ1ZmZlciBwb2ludGVyIHRvIHRoZSBjb21wdXRlZCBkaWdlc3QuCisgICogQHBhcmFtICBBbGdvcml0aG0gSEFTSCBhbGdvcml0aG0uCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBITUFDX1N0YXJ0X0lUKEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gsIHVpbnQ4X3QgKnBJbkJ1ZmZlciwgdWludDMyX3QgU2l6ZSwgdWludDhfdCogcE91dEJ1ZmZlciwgdWludDMyX3QgQWxnb3JpdGhtKQogewotICAgIEhBTF9IQVNIX1N0YXRlVHlwZURlZiBTdGF0ZV90bXAgPSBoaGFzaC0+U3RhdGU7IAotICAgIAorICAgIEhBTF9IQVNIX1N0YXRlVHlwZURlZiBTdGF0ZV90bXAgPSBoaGFzaC0+U3RhdGU7CisKICAgLyogSWYgU3RhdGUgaXMgcmVhZHkgb3Igc3VzcGVuZGVkLCBzdGFydCBvciByZXN1bWUgSVQtYmFzZWQgSEFTSCBwcm9jZXNzaW5nICovCiBpZigoU3RhdGVfdG1wID09IEhBTF9IQVNIX1NUQVRFX1JFQURZKSB8fCAoU3RhdGVfdG1wID09IEhBTF9IQVNIX1NUQVRFX1NVU1BFTkRFRCkpCi0gIHsgCisgIHsKICAgICAvKiBDaGVjayBpbnB1dCBwYXJhbWV0ZXJzICovCiAgICAgaWYgKChwSW5CdWZmZXIgPT0gTlVMTCkgfHwgKFNpemUgPT0gMFUpIHx8IChoaGFzaC0+SW5pdC5wS2V5ID09IE5VTEwpIHx8IChoaGFzaC0+SW5pdC5LZXlTaXplID09IDBVKSB8fCAocE91dEJ1ZmZlciA9PSBOVUxMKSkKICAgICB7CkBAIC0yODM2LDcgKzMyMTgsNyBAQAogICAgICAgfQogCiAgICAgICAvKiBSZXNvcnQgdG8gaGhhc2ggaW50ZXJuYWwgZmllbGRzIGhoYXNoLT5wSGFzaEluQnVmZlB0ciBhbmQgaGhhc2gtPkhhc2hJbkNvdW50Ci0gICAgICAgICB0byBmZWVkIHRoZSBJUCB3aGF0ZXZlciB0aGUgSE1BQyBzdGVwLgorICAgICAgICAgdG8gZmVlZCB0aGUgUGVyaXBoZXJhbCB3aGF0ZXZlciB0aGUgSE1BQyBzdGVwLgogICAgICAgICAgTGluZXMgYmVsb3cgYXJlIHNldCB0byBzdGFydCBITUFDIFN0ZXAgMSBwcm9jZXNzaW5nIHdoZXJlIGtleSBpcyBlbnRlcmVkIGZpcnN0LiAqLwogICAgICAgaGhhc2gtPkhhc2hJbkNvdW50ICAgICA9IGhoYXNoLT5Jbml0LktleVNpemU7IC8qIEtleSBzaXplICAgICAgICAgICAgICAgICAgICAgICovCiAgICAgICBoaGFzaC0+cEhhc2hJbkJ1ZmZQdHIgID0gaGhhc2gtPkluaXQucEtleSA7ICAgLyogS2V5IGFkZHJlc3MgICAgICAgICAgICAgICAgICAgKi8KQEAgLTI4OTMsMTcgKzMyNzUsMTcgQEAKIAogLyoqCiAgICogQGJyaWVmICBJbml0aWFsaXplIHRoZSBIQVNIIHBlcmlwaGVyYWwgaW4gSE1BQyBtb2RlIHRoZW4gaW5pdGlhdGUgdGhlIHJlcXVpcmVkCi0gICogICAgICAgICBETUEgdHJhbnNmZXJzIHRvIGZlZWQgdGhlIGtleSBhbmQgdGhlIGlucHV0IGJ1ZmZlciB0byB0aGUgSVAuCisgICogICAgICAgICBETUEgdHJhbnNmZXJzIHRvIGZlZWQgdGhlIGtleSBhbmQgdGhlIGlucHV0IGJ1ZmZlciB0byB0aGUgUGVyaXBoZXJhbC4KICAgKiBAbm90ZSAgIFNhbWUga2V5IGlzIHVzZWQgZm9yIHRoZSBpbm5lciBhbmQgdGhlIG91dGVyIGhhc2ggZnVuY3Rpb25zOyBwb2ludGVyIHRvIGtleSBhbmQKICAgKiAgICAgICAgIGtleSBzaXplIGFyZSByZXNwZWN0aXZlbHkgc3RvcmVkIGluIGhoYXNoLT5Jbml0LnBLZXkgYW5kIGhoYXNoLT5Jbml0LktleVNpemUuCiAgICogQG5vdGUgICBJbiBjYXNlIG9mIG11bHRpLWJ1ZmZlciBITUFDIHByb2Nlc3NpbmcsIHRoZSBpbnB1dCBidWZmZXIgc2l6ZSAoaW4gYnl0ZXMpIG11c3QKICAgKiAgICAgICAgIGJlIGEgbXVsdGlwbGUgb2YgNCBvdGhlcndpc2UsIHRoZSBIQVNIIGRpZ2VzdCBjb21wdXRhdGlvbiBpcyBjb3JydXB0ZWQuCiAgICogICAgICAgICBPbmx5IHRoZSBsZW5ndGggb2YgdGhlIGxhc3QgYnVmZmVyIG9mIHRoZSB0aHJlYWQgZG9lc24ndCBoYXZlIHRvIGJlIGEKICAgKiAgICAgICAgIG11bHRpcGxlIG9mIDQuCi0gICogQHBhcmFtICBoaGFzaDogSEFTSCBoYW5kbGUuCi0gICogQHBhcmFtICBwSW5CdWZmZXI6IHBvaW50ZXIgdG8gdGhlIGlucHV0IGJ1ZmZlciAoYnVmZmVyIHRvIGJlIGhhc2hlZCkuCi0gICogQHBhcmFtICBTaXplOiBsZW5ndGggb2YgdGhlIGlucHV0IGJ1ZmZlciBpbiBieXRlcy4KLSAgKiBAcGFyYW0gIEFsZ29yaXRobTogSEFTSCBhbGdvcml0aG0uCisgICogQHBhcmFtICBoaGFzaCBIQVNIIGhhbmRsZS4KKyAgKiBAcGFyYW0gIHBJbkJ1ZmZlciBwb2ludGVyIHRvIHRoZSBpbnB1dCBidWZmZXIgKGJ1ZmZlciB0byBiZSBoYXNoZWQpLgorICAqIEBwYXJhbSAgU2l6ZSBsZW5ndGggb2YgdGhlIGlucHV0IGJ1ZmZlciBpbiBieXRlcy4KKyAgKiBAcGFyYW0gIEFsZ29yaXRobSBIQVNIIGFsZ29yaXRobS4KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhNQUNfU3RhcnRfRE1BKEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gsIHVpbnQ4X3QgKnBJbkJ1ZmZlciwgdWludDMyX3QgU2l6ZSwgdWludDMyX3QgQWxnb3JpdGhtKQpAQCAtMjkxMSwxMyArMzI5MywxMyBAQAogICB1aW50MzJfdCBpbnB1dGFkZHI7CiAgIHVpbnQzMl90IGlucHV0U2l6ZTsKICAgSEFMX1N0YXR1c1R5cGVEZWYgc3RhdHVzIDsKLSAgSEFMX0hBU0hfU3RhdGVUeXBlRGVmIFN0YXRlX3RtcCA9IGhoYXNoLT5TdGF0ZTsgIAorICBIQUxfSEFTSF9TdGF0ZVR5cGVEZWYgU3RhdGVfdG1wID0gaGhhc2gtPlN0YXRlOwogICAgLyogTWFrZSBzdXJlIHRoZSBpbnB1dCBidWZmZXIgc2l6ZSAoaW4gYnl0ZXMpIGlzIGEgbXVsdGlwbGUgb2YgNCB3aGVuIGRpZ2VzdCBjYWxjdWxhdGlvbgogICAgICAgaXMgZGlzYWJsZWQgKG11bHRpLWJ1ZmZlciBITUFDIHByb2Nlc3NpbmcsIE1ETUFUIGJpdCB0byBiZSBzZXQpICovCiAgICBhc3NlcnRfcGFyYW0oSVNfSE1BQ19ETUFfTVVMVElCVUZGRVJfU0laRShoaGFzaCwgU2l6ZSkpOwogICAvKiBJZiBTdGF0ZSBpcyByZWFkeSBvciBzdXNwZW5kZWQsIHN0YXJ0IG9yIHJlc3VtZSBETUEtYmFzZWQgSEFTSCBwcm9jZXNzaW5nICovCiBpZigoU3RhdGVfdG1wID09IEhBTF9IQVNIX1NUQVRFX1JFQURZKSB8fCAoU3RhdGVfdG1wID09IEhBTF9IQVNIX1NUQVRFX1NVU1BFTkRFRCkpCi0gIHsgICAKKyAgewogICAgIC8qIENoZWNrIGlucHV0IHBhcmFtZXRlcnMgKi8KICAgICBpZiAoKHBJbkJ1ZmZlciA9PSBOVUxMICkgfHwgKFNpemUgPT0gMFUpIHx8IChoaGFzaC0+SW5pdC5wS2V5ID09IE5VTEwgKSB8fCAoaGhhc2gtPkluaXQuS2V5U2l6ZSA9PSAwVSkgfHwKICAgIC8qIENoZWNrIHBoYXNlIGNvaGVyZW5jeS4gUGhhc2UgbXVzdCBiZQpAQCAtMjk2Miw3ICszMzQ0LDcgQEAKICAgICAgIHsKICAgICAgICAgTU9ESUZZX1JFRyhIQVNILT5DUiwgSEFTSF9DUl9MS0VZfEhBU0hfQ1JfQUxHT3xIQVNIX0NSX01PREV8SEFTSF9DUl9JTklULCBBbGdvcml0aG0gfCBIQVNIX0FMR09NT0RFX0hNQUMgfCBIQVNIX0NSX0lOSVQpOwogICAgICAgfQotICAgI2VuZGlmICAgICAKKyAgICNlbmRpZgogICAgICAgLyogU3RvcmUgaW5wdXQgYXBhcmFtZXRlcnMgaW4gaGFuZGxlIGZpZWxkcyB0byBtYW5hZ2Ugc3RlcHMgdHJhbnNpdGlvbgogICAgICAgICAgb3IgcG9zc2libGUgSE1BQyBzdXNwZW5zaW9uL3Jlc3VtcHRpb24gKi8KICAgICAgIGhoYXNoLT5IYXNoSW5Db3VudCA9IGhoYXNoLT5Jbml0LktleVNpemU7ICAgLyogSW5pdGlhbCBzaXplIGZvciBmaXJzdCBETUEgdHJhbnNmZXIgKGtleSBzaXplKSAgICAgICovCkBAIC0zMDQ2LDIwICszNDI4LDE2IEBACiAKICAgICAvKiBQcm9jZXNzIFVubG9ja2VkICovCiAgICAgX19IQUxfVU5MT0NLKGhoYXNoKTsKLSAgICAKKwogICAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KICAgICBpZiAoc3RhdHVzICE9IEhBTF9PSykKICAgICB7CiAgICAgICAvKiBVcGRhdGUgSEFTSCBzdGF0ZSBtYWNoaW5lIHRvIGVycm9yICovCiAgICAgICBoaGFzaC0+U3RhdGUgPSBIQUxfSEFTSF9TVEFURV9FUlJPUjsKICAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIC8qIENoYW5nZSBIQVNIIHN0YXRlICovCi0gICAgICBoaGFzaC0+U3RhdGUgPSBIQUxfSEFTSF9TVEFURV9SRUFEWTsKLSAgICB9CisKICAgICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCi0gICAgcmV0dXJuIHN0YXR1czsgCisgICAgcmV0dXJuIHN0YXR1czsKICAgfQogICBlbHNlCiAgIHsKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmY0eHhfaGFsX2hhc2hfZXguYyBiL1NyYy9zdG0zMmY0eHhfaGFsX2hhc2hfZXguYwppbmRleCA3OTJiMmU1Li42NDAwNzlmIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmNHh4X2hhbF9oYXNoX2V4LmMKKysrIGIvU3JjL3N0bTMyZjR4eF9oYWxfaGFzaF9leC5jCkBAIC0zMywxNiArMzMsMjEgQEAKICAgICAgICAgICAgICAgICBlLmcuIEhBTF9IQVNIRXhfeHh4X1N0YXJ0X0RNQSgpLiBOb3RlIHRoYXQgaW4gRE1BIG1vZGUsIGEgY2FsbCB0bwogICAgICAgICAgICAgICAgIEhBTF9IQVNIRXhfeHh4X0ZpbmlzaCgpIGlzIHRoZW4gcmVxdWlyZWQgdG8gcmV0cmlldmUgdGhlIGRpZ2VzdC4KIAotICAgKCMpTXVsdGktYnVmZmVyIHByb2Nlc3NpbmcgaXMgcG9zc2libGUgaW4gcG9sbGluZyBhbmQgRE1BIG1vZGUuCisgICAoIylNdWx0aS1idWZmZXIgcHJvY2Vzc2luZyBpcyBwb3NzaWJsZSBpbiBwb2xsaW5nLCBpbnRlcnJ1cHQgYW5kIERNQSBtb2Rlcy4KICAgICAgICAgKCMjKSBJbiBwb2xsaW5nIG1vZGUsIG9ubHkgbXVsdGktYnVmZmVyIEhBU0ggcHJvY2Vzc2luZyBpcyBwb3NzaWJsZS4KICAgICAgICAgICAgICBBUEkgSEFMX0hBU0hFeF94eHhfQWNjdW11bGF0ZSgpIG11c3QgYmUgY2FsbGVkIGZvciBlYWNoIGlucHV0IGJ1ZmZlciwgZXhjZXB0IGZvciB0aGUgbGFzdCBvbmUuCi0gICAgICAgICAgICAgVXNlciBtdXN0IHJlc29ydCB0byBIQUxfSEFTSEV4X3h4eF9TdGFydCgpIHRvIGVudGVyIHRoZSBsYXN0IG9uZSBhbmQgcmV0cmlldmUgYXMKKyAgICAgICAgICAgICBVc2VyIG11c3QgcmVzb3J0IHRvIEhBTF9IQVNIRXhfeHh4X0FjY3VtdWxhdGVfRW5kKCkgdG8gZW50ZXIgdGhlIGxhc3Qgb25lIGFuZCByZXRyaWV2ZSBhcworICAgICAgICAgICAgIHdlbGwgdGhlIGNvbXB1dGVkIGRpZ2VzdC4KKworICAgICAgICAoIyMpIEluIGludGVycnVwdCBtb2RlLCBBUEkgSEFMX0hBU0hFeF94eHhfQWNjdW11bGF0ZV9JVCgpIG11c3QgYmUgY2FsbGVkIGZvciBlYWNoIGlucHV0IGJ1ZmZlciwgCisgICAgICAgICAgICAgZXhjZXB0IGZvciB0aGUgbGFzdCBvbmUuCisgICAgICAgICAgICAgVXNlciBtdXN0IHJlc29ydCB0byBIQUxfSEFTSEV4X3h4eF9BY2N1bXVsYXRlX0VuZF9JVCgpIHRvIGVudGVyIHRoZSBsYXN0IG9uZSBhbmQgcmV0cmlldmUgYXMKICAgICAgICAgICAgICB3ZWxsIHRoZSBjb21wdXRlZCBkaWdlc3QuCiAKICAgICAgICAgKCMjKSBJbiBETUEgbW9kZSwgbXVsdGktYnVmZmVyIEhBU0ggYW5kIEhNQUMgcHJvY2Vzc2luZyBhcmUgcG9zc2libGUuCiAKICAgICAgICAgICAgICAgKCsrKykgSEFTSCBwcm9jZXNzaW5nOiBvbmNlIGluaXRpYWxpemF0aW9uIGlzIGRvbmUsIE1ETUFUIGJpdCBtdXN0IGJlIHNldCB0aHJ1IF9fSEFMX0hBU0hfU0VUX01ETUFUKCkgbWFjcm8uCi0gICAgICAgICAgICAgRnJvbSB0aGF0IHBvaW50LCBlYWNoIGJ1ZmZlciBjYW4gYmUgZmVkIHRvIHRoZSBJUCB0aHJ1IEhBTF9IQVNIRXhfeHh4X1N0YXJ0X0RNQSgpIEFQSS4KKyAgICAgICAgICAgICBGcm9tIHRoYXQgcG9pbnQsIGVhY2ggYnVmZmVyIGNhbiBiZSBmZWQgdG8gdGhlIFBlcmlwaGVyYWwgdGhydSBIQUxfSEFTSEV4X3h4eF9TdGFydF9ETUEoKSBBUEkuCiAgICAgICAgICAgICAgQmVmb3JlIGVudGVyaW5nIHRoZSBsYXN0IGJ1ZmZlciwgcmVzZXQgdGhlIE1ETUFUIGJpdCB3aXRoIF9fSEFMX0hBU0hfUkVTRVRfTURNQVQoKQogICAgICAgICAgICAgIG1hY3JvIHRoZW4gd3JhcC11cCB0aGUgSEFTSCBwcm9jZXNzaW5nIGluIGZlZWRpbmcgdGhlIGxhc3QgaW5wdXQgYnVmZmVyIHRocnUgdGhlCiAgICAgICAgICAgICAgc2FtZSBBUEkgSEFMX0hBU0hFeF94eHhfU3RhcnRfRE1BKCkuIFRoZSBkaWdlc3QgY2FuIHRoZW4gYmUgcmV0cmlldmVkIHdpdGggYSBjYWxsIHRvCkBAIC01MCw3ICs1NSw3IEBACiAKICAgICAgICAgICAgICAoKysrKSBITUFDIHByb2Nlc3NpbmcgKE1ELTUsIFNIQS0xLCBTSEEtMjI0IGFuZCBTSEEtMjU2IG11c3QgYWxsIHJlc29ydCB0bwogICAgICAgICAgICAgIGV4dGVuZGVkIGZ1bmN0aW9ucyk6IGFmdGVyIGluaXRpYWxpemF0aW9uLCB0aGUga2V5IGFuZCB0aGUgZmlyc3QgaW5wdXQgYnVmZmVyIGFyZSBlbnRlcmVkCi0gICAgICAgICAgICAgaW4gdGhlIElQIHdpdGggdGhlIEFQSSBIQUxfSE1BQ0V4X3h4eF9TdGVwMV8yX0RNQSgpLiBUaGlzIGNhcnJpZXMgb3V0IEhNQUMgc3RlcCAxIGFuZAorICAgICAgICAgICAgIGluIHRoZSBQZXJpcGhlcmFsIHdpdGggdGhlIEFQSSBIQUxfSE1BQ0V4X3h4eF9TdGVwMV8yX0RNQSgpLiBUaGlzIGNhcnJpZXMgb3V0IEhNQUMgc3RlcCAxIGFuZAogICAgICAgICAgICAgIHN0YXJ0cyBzdGVwIDIuCiAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBidWZmZXJzIGFyZSBuZXh0IGVudGVyZWQgd2l0aCB0aGUgQVBJICBIQUxfSE1BQ0V4X3h4eF9TdGVwMl9ETUEoKS4gQXQgdGhpcwogICAgICAgICAgICAgIHBvaW50LCB0aGUgSE1BQyBwcm9jZXNzaW5nIGlzIHN0aWxsIGNhcnJ5aW5nIG91dCBzdGVwIDIuCkBAIC0xMTIsMTcgKzExNywxOSBAQAogICAgICAgICAgIHRoZSBoYXNoIHZhbHVlIHVzaW5nIG9uZSBvZiB0aGUgZm9sbG93aW5nIGFsZ29yaXRobXM6CiAgICAgICAoKykgU0hBMjI0CiAgICAgICAgICAoKyspIEhBTF9IQVNIRXhfU0hBMjI0X1N0YXJ0KCkKLSAgICAgICAgICgrKykgSEFMX0hBU0hFeF9TSEEyMjRfQWNjdW11bGF0ZSgpCisgICAgICAgICAoKyspIEhBTF9IQVNIRXhfU0hBMjI0X0FjY21sdCgpCisgICAgICAgICAoKyspIEhBTF9IQVNIRXhfU0hBMjI0X0FjY21sdF9FbmQoKQogICAgICAgKCspIFNIQTI1NgogICAgICAgICAgKCsrKSBIQUxfSEFTSEV4X1NIQTI1Nl9TdGFydCgpCi0gICAgICAgICAoKyspIEhBTF9IQVNIRXhfU0hBMjU2X0FjY3VtdWxhdGUoKQorICAgICAgICAgKCsrKSBIQUxfSEFTSEV4X1NIQTI1Nl9BY2NtbHQoKQorICAgICAgICAgKCsrKSBIQUxfSEFTSEV4X1NIQTI1Nl9BY2NtbHRfRW5kKCkKIAogICAgIFsuLl0gRm9yIGEgc2luZ2xlIGJ1ZmZlciB0byBiZSBoYXNoZWQsIHVzZXIgY2FuIHJlc29ydCB0byBIQUxfSEFTSF94eHhfU3RhcnQoKS4KIAogICAgIFsuLl0gIEluIGNhc2Ugb2YgbXVsdGktYnVmZmVyIEhBU0ggcHJvY2Vzc2luZyAoYSBzaW5nbGUgZGlnZXN0IGlzIGNvbXB1dGVkIHdoaWxlCi0gICAgICAgICAgc2V2ZXJhbCBidWZmZXJzIGFyZSBmZWQgdG8gdGhlIElQKSwgdGhlIHVzZXIgY2FuIHJlc29ydCB0byBzdWNjZXNzaXZlIGNhbGxzCisgICAgICAgICAgc2V2ZXJhbCBidWZmZXJzIGFyZSBmZWQgdG8gdGhlIFBlcmlwaGVyYWwpLCB0aGUgdXNlciBjYW4gcmVzb3J0IHRvIHN1Y2Nlc3NpdmUgY2FsbHMKICAgICAgICAgICB0byBIQUxfSEFTSEV4X3h4eF9BY2N1bXVsYXRlKCkgYW5kIHdyYXAtdXAgdGhlIGRpZ2VzdCBjb21wdXRhdGlvbiBieSBhIGNhbGwKLSAgICAgICAgICB0byBIQUxfSEFTSEV4X3h4eF9TdGFydCgpLgorICAgICAgICAgIHRvIEhBTF9IQVNIRXhfeHh4X0FjY3VtdWxhdGVfRW5kKCkuCiAKIEBlbmR2ZXJiYXRpbQogICAqIEB7CkBAIC0xMzMsMTEgKzE0MCwxMSBAQAogICAqIEBicmllZiAgSW5pdGlhbGl6ZSB0aGUgSEFTSCBwZXJpcGhlcmFsIGluIFNIQTIyNCBtb2RlLCBuZXh0IHByb2Nlc3MgcEluQnVmZmVyIHRoZW4KICAgKiAgICAgICAgIHJlYWQgdGhlIGNvbXB1dGVkIGRpZ2VzdC4KICAgKiBAbm90ZSAgIERpZ2VzdCBpcyBhdmFpbGFibGUgaW4gcE91dEJ1ZmZlci4KLSAgKiBAcGFyYW0gIGhoYXNoOiBIQVNIIGhhbmRsZS4KLSAgKiBAcGFyYW0gIHBJbkJ1ZmZlcjogcG9pbnRlciB0byB0aGUgaW5wdXQgYnVmZmVyIChidWZmZXIgdG8gYmUgaGFzaGVkKS4KLSAgKiBAcGFyYW0gIFNpemU6IGxlbmd0aCBvZiB0aGUgaW5wdXQgYnVmZmVyIGluIGJ5dGVzLgotICAqIEBwYXJhbSAgcE91dEJ1ZmZlcjogcG9pbnRlciB0byB0aGUgY29tcHV0ZWQgZGlnZXN0LiBEaWdlc3Qgc2l6ZSBpcyAyOCBieXRlcy4KLSAgKiBAcGFyYW0gIFRpbWVvdXQ6IFRpbWVvdXQgdmFsdWUKKyAgKiBAcGFyYW0gIGhoYXNoIEhBU0ggaGFuZGxlLgorICAqIEBwYXJhbSAgcEluQnVmZmVyIHBvaW50ZXIgdG8gdGhlIGlucHV0IGJ1ZmZlciAoYnVmZmVyIHRvIGJlIGhhc2hlZCkuCisgICogQHBhcmFtICBTaXplIGxlbmd0aCBvZiB0aGUgaW5wdXQgYnVmZmVyIGluIGJ5dGVzLgorICAqIEBwYXJhbSAgcE91dEJ1ZmZlciBwb2ludGVyIHRvIHRoZSBjb21wdXRlZCBkaWdlc3QuIERpZ2VzdCBzaXplIGlzIDI4IGJ5dGVzLgorICAqIEBwYXJhbSAgVGltZW91dCBUaW1lb3V0IHZhbHVlCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfSEFTSEV4X1NIQTIyNF9TdGFydChIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoLCB1aW50OF90ICpwSW5CdWZmZXIsIHVpbnQzMl90IFNpemUsIHVpbnQ4X3QqIHBPdXRCdWZmZXIsIHVpbnQzMl90IFRpbWVvdXQpCkBAIC0xNDgsMzcgKzE1NSw1MiBAQAogLyoqCiAgICogQGJyaWVmICBJZiBub3QgYWxyZWFkeSBkb25lLCBpbml0aWFsaXplIHRoZSBIQVNIIHBlcmlwaGVyYWwgaW4gU0hBMjI0IG1vZGUgdGhlbgogICAqICAgICAgICAgcHJvY2Vzc2VzIHBJbkJ1ZmZlci4KLSAgKiBAbm90ZSAgIENvbnNlY3V0aXZlIGNhbGxzIHRvIEhBTF9IQVNIRXhfU0hBMjI0X0FjY3VtdWxhdGUoKSBjYW4gYmUgdXNlZCB0byBmZWVkCi0gICogICAgICAgICBzZXZlcmFsIGlucHV0IGJ1ZmZlcnMgYmFjay10by1iYWNrIHRvIHRoZSBJUCB0aGF0IHdpbGwgeWllbGQgYSBzaW5nbGUKKyAgKiBAbm90ZSAgIENvbnNlY3V0aXZlIGNhbGxzIHRvIEhBTF9IQVNIRXhfU0hBMjI0X0FjY21sdCgpIGNhbiBiZSB1c2VkIHRvIGZlZWQKKyAgKiAgICAgICAgIHNldmVyYWwgaW5wdXQgYnVmZmVycyBiYWNrLXRvLWJhY2sgdG8gdGhlIFBlcmlwaGVyYWwgdGhhdCB3aWxsIHlpZWxkIGEgc2luZ2xlCiAgICogICAgICAgICBIQVNIIHNpZ25hdHVyZSBvbmNlIGFsbCBidWZmZXJzIGhhdmUgYmVlbiBlbnRlcmVkLiBXcmFwLXVwIG9mIGlucHV0CiAgICogICAgICAgICBidWZmZXJzIGZlZWRpbmcgYW5kIHJldHJpZXZhbCBvZiBkaWdlc3QgaXMgZG9uZSBieSBhIGNhbGwgdG8KLSAgKiAgICAgICAgIEhBTF9IQVNIRXhfU0hBMjI0X1N0YXJ0KCkuCisgICogICAgICAgICBIQUxfSEFTSEV4X1NIQTIyNF9BY2NtbHRfRW5kKCkuCiAgICogQG5vdGUgICBGaWVsZCBoaGFzaC0+UGhhc2Ugb2YgSEFTSCBoYW5kbGUgaXMgdGVzdGVkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90Ci0gICogICAgICAgICB0aGUgSVAgaGFzIGFscmVhZHkgYmVlbiBpbml0aWFsaXplZC4KLSAgKiBAbm90ZSAgIERpZ2VzdCBpcyBub3QgcmV0cmlldmVkIGJ5IHRoaXMgQVBJLCB1c2VyIG11c3QgcmVzb3J0IHRvIEhBTF9IQVNIRXhfU0hBMjI0X1N0YXJ0KCkKLSAgKiAgICAgICAgIHRvIHJlYWQgaXQsIGZlZWRpbmcgYXQgdGhlIHNhbWUgdGltZSB0aGUgbGFzdCBpbnB1dCBidWZmZXIgdG8gdGhlIElQLgorICAqICAgICAgICAgdGhlIFBlcmlwaGVyYWwgaGFzIGFscmVhZHkgYmVlbiBpbml0aWFsaXplZC4KKyAgKiBAbm90ZSAgIERpZ2VzdCBpcyBub3QgcmV0cmlldmVkIGJ5IHRoaXMgQVBJLCB1c2VyIG11c3QgcmVzb3J0IHRvIEhBTF9IQVNIRXhfU0hBMjI0X0FjY21sdF9FbmQoKQorICAqICAgICAgICAgdG8gcmVhZCBpdCwgZmVlZGluZyBhdCB0aGUgc2FtZSB0aW1lIHRoZSBsYXN0IGlucHV0IGJ1ZmZlciB0byB0aGUgUGVyaXBoZXJhbC4KICAgKiBAbm90ZSAgIFRoZSBpbnB1dCBidWZmZXIgc2l6ZSAoaW4gYnl0ZXMpIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0IG90aGVyd2lzZSwgdGhlCi0gICogICAgICAgICBIQVNIIGRpZ2VzdCBjb21wdXRhdGlvbiBpcyBjb3JydXB0ZWQuIE9ubHkgSEFMX0hBU0hFeF9TSEEyMjRfU3RhcnQoKSBpcyBhYmxlCisgICogICAgICAgICBIQVNIIGRpZ2VzdCBjb21wdXRhdGlvbiBpcyBjb3JydXB0ZWQuIE9ubHkgSEFMX0hBU0hFeF9TSEEyMjRfQWNjbWx0X0VuZCgpIGlzIGFibGUKICAgKiAgICAgICAgIHRvIG1hbmFnZSB0aGUgZW5kaW5nIGJ1ZmZlciB3aXRoIGEgbGVuZ3RoIGluIGJ5dGVzIG5vdCBhIG11bHRpcGxlIG9mIDQuCi0gICogQHBhcmFtICBoaGFzaDogSEFTSCBoYW5kbGUuCi0gICogQHBhcmFtICBwSW5CdWZmZXI6IHBvaW50ZXIgdG8gdGhlIGlucHV0IGJ1ZmZlciAoYnVmZmVyIHRvIGJlIGhhc2hlZCkuCi0gICogQHBhcmFtICBTaXplOiBsZW5ndGggb2YgdGhlIGlucHV0IGJ1ZmZlciBpbiBieXRlcywgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQuCisgICogQHBhcmFtICBoaGFzaCBIQVNIIGhhbmRsZS4KKyAgKiBAcGFyYW0gIHBJbkJ1ZmZlciBwb2ludGVyIHRvIHRoZSBpbnB1dCBidWZmZXIgKGJ1ZmZlciB0byBiZSBoYXNoZWQpLgorICAqIEBwYXJhbSAgU2l6ZSBsZW5ndGggb2YgdGhlIGlucHV0IGJ1ZmZlciBpbiBieXRlcywgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQuCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfSEFTSEV4X1NIQTIyNF9BY2N1bXVsYXRlKEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gsIHVpbnQ4X3QgKnBJbkJ1ZmZlciwgdWludDMyX3QgU2l6ZSkKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9IQVNIRXhfU0hBMjI0X0FjY21sdChIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoLCB1aW50OF90ICpwSW5CdWZmZXIsIHVpbnQzMl90IFNpemUpCiB7CiAgIHJldHVybiAgSEFTSF9BY2N1bXVsYXRlKGhoYXNoLCBwSW5CdWZmZXIsIFNpemUsSEFTSF9BTEdPU0VMRUNUSU9OX1NIQTIyNCk7CiB9CiAKIC8qKgorICAqIEBicmllZiAgRW5kIGNvbXB1dGF0aW9uIG9mIGEgc2luZ2xlIEhBU0ggc2lnbmF0dXJlIGFmdGVyIHNldmVyYWwgY2FsbHMgdG8gSEFMX0hBU0hFeF9TSEEyMjRfQWNjbWx0KCkgQVBJLgorICAqIEBub3RlICAgRGlnZXN0IGlzIGF2YWlsYWJsZSBpbiBwT3V0QnVmZmVyLgorICAqIEBwYXJhbSAgaGhhc2ggSEFTSCBoYW5kbGUuCisgICogQHBhcmFtICBwSW5CdWZmZXIgcG9pbnRlciB0byB0aGUgaW5wdXQgYnVmZmVyIChidWZmZXIgdG8gYmUgaGFzaGVkKS4KKyAgKiBAcGFyYW0gIFNpemUgbGVuZ3RoIG9mIHRoZSBpbnB1dCBidWZmZXIgaW4gYnl0ZXMuCisgICogQHBhcmFtICBwT3V0QnVmZmVyIHBvaW50ZXIgdG8gdGhlIGNvbXB1dGVkIGRpZ2VzdC4gRGlnZXN0IHNpemUgaXMgMjggYnl0ZXMuCisgICogQHBhcmFtICBUaW1lb3V0IFRpbWVvdXQgdmFsdWUKKyAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKKyAgKi8KK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9IQVNIRXhfU0hBMjI0X0FjY21sdF9FbmQoSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCwgdWludDhfdCAqcEluQnVmZmVyLCB1aW50MzJfdCBTaXplLCB1aW50OF90KiBwT3V0QnVmZmVyLCB1aW50MzJfdCBUaW1lb3V0KQoreworICByZXR1cm4gSEFTSF9TdGFydChoaGFzaCwgcEluQnVmZmVyLCBTaXplLCBwT3V0QnVmZmVyLCBUaW1lb3V0LCBIQVNIX0FMR09TRUxFQ1RJT05fU0hBMjI0KTsKK30KKworLyoqCiAgICogQGJyaWVmICBJbml0aWFsaXplIHRoZSBIQVNIIHBlcmlwaGVyYWwgaW4gU0hBMjU2IG1vZGUsIG5leHQgcHJvY2VzcyBwSW5CdWZmZXIgdGhlbgogICAqICAgICAgICAgcmVhZCB0aGUgY29tcHV0ZWQgZGlnZXN0LgogICAqIEBub3RlICAgRGlnZXN0IGlzIGF2YWlsYWJsZSBpbiBwT3V0QnVmZmVyLgotICAqIEBwYXJhbSAgaGhhc2g6IEhBU0ggaGFuZGxlLgotICAqIEBwYXJhbSAgcEluQnVmZmVyOiBwb2ludGVyIHRvIHRoZSBpbnB1dCBidWZmZXIgKGJ1ZmZlciB0byBiZSBoYXNoZWQpLgotICAqIEBwYXJhbSAgU2l6ZTogbGVuZ3RoIG9mIHRoZSBpbnB1dCBidWZmZXIgaW4gYnl0ZXMuCi0gICogQHBhcmFtICBwT3V0QnVmZmVyOiBwb2ludGVyIHRvIHRoZSBjb21wdXRlZCBkaWdlc3QuIERpZ2VzdCBzaXplIGlzIDMyIGJ5dGVzLgotICAqIEBwYXJhbSAgVGltZW91dDogVGltZW91dCB2YWx1ZQorICAqIEBwYXJhbSAgaGhhc2ggSEFTSCBoYW5kbGUuCisgICogQHBhcmFtICBwSW5CdWZmZXIgcG9pbnRlciB0byB0aGUgaW5wdXQgYnVmZmVyIChidWZmZXIgdG8gYmUgaGFzaGVkKS4KKyAgKiBAcGFyYW0gIFNpemUgbGVuZ3RoIG9mIHRoZSBpbnB1dCBidWZmZXIgaW4gYnl0ZXMuCisgICogQHBhcmFtICBwT3V0QnVmZmVyIHBvaW50ZXIgdG8gdGhlIGNvbXB1dGVkIGRpZ2VzdC4gRGlnZXN0IHNpemUgaXMgMzIgYnl0ZXMuCisgICogQHBhcmFtICBUaW1lb3V0IFRpbWVvdXQgdmFsdWUKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9IQVNIRXhfU0hBMjU2X1N0YXJ0KEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gsIHVpbnQ4X3QgKnBJbkJ1ZmZlciwgdWludDMyX3QgU2l6ZSwgdWludDhfdCogcE91dEJ1ZmZlciwgdWludDMyX3QgVGltZW91dCkKQEAgLTE4OSwyOCArMjExLDQyIEBACiAvKioKICAgKiBAYnJpZWYgIElmIG5vdCBhbHJlYWR5IGRvbmUsIGluaXRpYWxpemUgdGhlIEhBU0ggcGVyaXBoZXJhbCBpbiBTSEEyNTYgbW9kZSB0aGVuCiAgICogICAgICAgICBwcm9jZXNzZXMgcEluQnVmZmVyLgotICAqIEBub3RlICAgQ29uc2VjdXRpdmUgY2FsbHMgdG8gSEFMX0hBU0hFeF9TSEEyNTZfQWNjdW11bGF0ZSgpIGNhbiBiZSB1c2VkIHRvIGZlZWQKLSAgKiAgICAgICAgIHNldmVyYWwgaW5wdXQgYnVmZmVycyBiYWNrLXRvLWJhY2sgdG8gdGhlIElQIHRoYXQgd2lsbCB5aWVsZCBhIHNpbmdsZQorICAqIEBub3RlICAgQ29uc2VjdXRpdmUgY2FsbHMgdG8gSEFMX0hBU0hFeF9TSEEyNTZfQWNjbWx0KCkgY2FuIGJlIHVzZWQgdG8gZmVlZAorICAqICAgICAgICAgc2V2ZXJhbCBpbnB1dCBidWZmZXJzIGJhY2stdG8tYmFjayB0byB0aGUgUGVyaXBoZXJhbCB0aGF0IHdpbGwgeWllbGQgYSBzaW5nbGUKICAgKiAgICAgICAgIEhBU0ggc2lnbmF0dXJlIG9uY2UgYWxsIGJ1ZmZlcnMgaGF2ZSBiZWVuIGVudGVyZWQuIFdyYXAtdXAgb2YgaW5wdXQKICAgKiAgICAgICAgIGJ1ZmZlcnMgZmVlZGluZyBhbmQgcmV0cmlldmFsIG9mIGRpZ2VzdCBpcyBkb25lIGJ5IGEgY2FsbCB0bwotICAqICAgICAgICAgSEFMX0hBU0hFeF9TSEEyNTZfU3RhcnQoKS4KKyAgKiAgICAgICAgIEhBTF9IQVNIRXhfU0hBMjU2X0FjY21sdF9FbmQoKS4KICAgKiBAbm90ZSAgIEZpZWxkIGhoYXNoLT5QaGFzZSBvZiBIQVNIIGhhbmRsZSBpcyB0ZXN0ZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKLSAgKiAgICAgICAgIHRoZSBJUCBoYXMgYWxyZWFkeSBiZWVuIGluaXRpYWxpemVkLgotICAqIEBub3RlICAgRGlnZXN0IGlzIG5vdCByZXRyaWV2ZWQgYnkgdGhpcyBBUEksIHVzZXIgbXVzdCByZXNvcnQgdG8gSEFMX0hBU0hFeF9TSEEyNTZfU3RhcnQoKQotICAqICAgICAgICAgdG8gcmVhZCBpdCwgZmVlZGluZyBhdCB0aGUgc2FtZSB0aW1lIHRoZSBsYXN0IGlucHV0IGJ1ZmZlciB0byB0aGUgSVAuCisgICogICAgICAgICB0aGUgUGVyaXBoZXJhbCBoYXMgYWxyZWFkeSBiZWVuIGluaXRpYWxpemVkLgorICAqIEBub3RlICAgRGlnZXN0IGlzIG5vdCByZXRyaWV2ZWQgYnkgdGhpcyBBUEksIHVzZXIgbXVzdCByZXNvcnQgdG8gSEFMX0hBU0hFeF9TSEEyNTZfQWNjbWx0X0VuZCgpCisgICogICAgICAgICB0byByZWFkIGl0LCBmZWVkaW5nIGF0IHRoZSBzYW1lIHRpbWUgdGhlIGxhc3QgaW5wdXQgYnVmZmVyIHRvIHRoZSBQZXJpcGhlcmFsLgogICAqIEBub3RlICAgVGhlIGlucHV0IGJ1ZmZlciBzaXplIChpbiBieXRlcykgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQgb3RoZXJ3aXNlLCB0aGUKLSAgKiAgICAgICAgIEhBU0ggZGlnZXN0IGNvbXB1dGF0aW9uIGlzIGNvcnJ1cHRlZC4gT25seSBIQUxfSEFTSEV4X1NIQTI1Nl9TdGFydCgpIGlzIGFibGUKKyAgKiAgICAgICAgIEhBU0ggZGlnZXN0IGNvbXB1dGF0aW9uIGlzIGNvcnJ1cHRlZC4gT25seSBIQUxfSEFTSEV4X1NIQTI1Nl9BY2NtbHRfRW5kKCkgaXMgYWJsZQogICAqICAgICAgICAgdG8gbWFuYWdlIHRoZSBlbmRpbmcgYnVmZmVyIHdpdGggYSBsZW5ndGggaW4gYnl0ZXMgbm90IGEgbXVsdGlwbGUgb2YgNC4KLSAgKiBAcGFyYW0gIGhoYXNoOiBIQVNIIGhhbmRsZS4KLSAgKiBAcGFyYW0gIHBJbkJ1ZmZlcjogcG9pbnRlciB0byB0aGUgaW5wdXQgYnVmZmVyIChidWZmZXIgdG8gYmUgaGFzaGVkKS4KLSAgKiBAcGFyYW0gIFNpemU6IGxlbmd0aCBvZiB0aGUgaW5wdXQgYnVmZmVyIGluIGJ5dGVzLCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNC4KKyAgKiBAcGFyYW0gIGhoYXNoIEhBU0ggaGFuZGxlLgorICAqIEBwYXJhbSAgcEluQnVmZmVyIHBvaW50ZXIgdG8gdGhlIGlucHV0IGJ1ZmZlciAoYnVmZmVyIHRvIGJlIGhhc2hlZCkuCisgICogQHBhcmFtICBTaXplIGxlbmd0aCBvZiB0aGUgaW5wdXQgYnVmZmVyIGluIGJ5dGVzLCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNC4KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9IQVNIRXhfU0hBMjU2X0FjY3VtdWxhdGUoSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCwgdWludDhfdCAqcEluQnVmZmVyLCB1aW50MzJfdCBTaXplKQorSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0hBU0hFeF9TSEEyNTZfQWNjbWx0KEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gsIHVpbnQ4X3QgKnBJbkJ1ZmZlciwgdWludDMyX3QgU2l6ZSkKIHsKICAgcmV0dXJuICBIQVNIX0FjY3VtdWxhdGUoaGhhc2gsIHBJbkJ1ZmZlciwgU2l6ZSxIQVNIX0FMR09TRUxFQ1RJT05fU0hBMjU2KTsKIH0KIAorLyoqCisgICogQGJyaWVmICBFbmQgY29tcHV0YXRpb24gb2YgYSBzaW5nbGUgSEFTSCBzaWduYXR1cmUgYWZ0ZXIgc2V2ZXJhbCBjYWxscyB0byBIQUxfSEFTSEV4X1NIQTI1Nl9BY2NtbHQoKSBBUEkuCisgICogQG5vdGUgICBEaWdlc3QgaXMgYXZhaWxhYmxlIGluIHBPdXRCdWZmZXIuCisgICogQHBhcmFtICBoaGFzaCBIQVNIIGhhbmRsZS4KKyAgKiBAcGFyYW0gIHBJbkJ1ZmZlciBwb2ludGVyIHRvIHRoZSBpbnB1dCBidWZmZXIgKGJ1ZmZlciB0byBiZSBoYXNoZWQpLgorICAqIEBwYXJhbSAgU2l6ZSBsZW5ndGggb2YgdGhlIGlucHV0IGJ1ZmZlciBpbiBieXRlcy4KKyAgKiBAcGFyYW0gIHBPdXRCdWZmZXIgcG9pbnRlciB0byB0aGUgY29tcHV0ZWQgZGlnZXN0LiBEaWdlc3Qgc2l6ZSBpcyAzMiBieXRlcy4KKyAgKiBAcGFyYW0gIFRpbWVvdXQgVGltZW91dCB2YWx1ZQorICAqIEByZXR2YWwgSEFMIHN0YXR1cworICAqLworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0hBU0hFeF9TSEEyNTZfQWNjbWx0X0VuZChIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoLCB1aW50OF90ICpwSW5CdWZmZXIsIHVpbnQzMl90IFNpemUsIHVpbnQ4X3QqIHBPdXRCdWZmZXIsIHVpbnQzMl90IFRpbWVvdXQpCit7CisgIHJldHVybiBIQVNIX1N0YXJ0KGhoYXNoLCBwSW5CdWZmZXIsIFNpemUsIHBPdXRCdWZmZXIsIFRpbWVvdXQsIEhBU0hfQUxHT1NFTEVDVElPTl9TSEEyNTYpOworfQogCiAvKioKICAgKiBAfQpAQCAtMjI3LDggKzI2MywxMiBAQAogICAgICAgICAgIHRoZSBoYXNoIHZhbHVlIHVzaW5nIG9uZSBvZiB0aGUgZm9sbG93aW5nIGFsZ29yaXRobXM6CiAgICAgICAoKykgU0hBMjI0CiAgICAgICAgICAoKyspIEhBTF9IQVNIRXhfU0hBMjI0X1N0YXJ0X0lUKCkKKyAgICAgICAgICgrKykgSEFMX0hBU0hFeF9TSEEyMjRfQWNjbWx0X0lUKCkKKyAgICAgICAgICgrKykgSEFMX0hBU0hFeF9TSEEyMjRfQWNjbWx0X0VuZF9JVCgpCiAgICAgICAoKykgU0hBMjU2CiAgICAgICAgICAoKyspIEhBTF9IQVNIRXhfU0hBMjU2X1N0YXJ0X0lUKCkKKyAgICAgICAgICgrKykgSEFMX0hBU0hFeF9TSEEyNTZfQWNjbWx0X0lUKCkKKyAgICAgICAgICgrKykgSEFMX0hBU0hFeF9TSEEyNTZfQWNjbWx0X0VuZF9JVCgpCiAKIEBlbmR2ZXJiYXRpbQogICAqIEB7CkBAIC0yMzksMTAgKzI3OSwxMCBAQAogICAqIEBicmllZiAgSW5pdGlhbGl6ZSB0aGUgSEFTSCBwZXJpcGhlcmFsIGluIFNIQTIyNCBtb2RlLCBuZXh0IHByb2Nlc3MgcEluQnVmZmVyIHRoZW4KICAgKiAgICAgICAgIHJlYWQgdGhlIGNvbXB1dGVkIGRpZ2VzdCBpbiBpbnRlcnJ1cHRpb24gbW9kZS4KICAgKiBAbm90ZSAgIERpZ2VzdCBpcyBhdmFpbGFibGUgaW4gcE91dEJ1ZmZlci4KLSAgKiBAcGFyYW0gIGhoYXNoOiBIQVNIIGhhbmRsZS4KLSAgKiBAcGFyYW0gIHBJbkJ1ZmZlcjogcG9pbnRlciB0byB0aGUgaW5wdXQgYnVmZmVyIChidWZmZXIgdG8gYmUgaGFzaGVkKS4KLSAgKiBAcGFyYW0gIFNpemU6IGxlbmd0aCBvZiB0aGUgaW5wdXQgYnVmZmVyIGluIGJ5dGVzLgotICAqIEBwYXJhbSAgcE91dEJ1ZmZlcjogcG9pbnRlciB0byB0aGUgY29tcHV0ZWQgZGlnZXN0LiBEaWdlc3Qgc2l6ZSBpcyAyOCBieXRlcy4KKyAgKiBAcGFyYW0gIGhoYXNoIEhBU0ggaGFuZGxlLgorICAqIEBwYXJhbSAgcEluQnVmZmVyIHBvaW50ZXIgdG8gdGhlIGlucHV0IGJ1ZmZlciAoYnVmZmVyIHRvIGJlIGhhc2hlZCkuCisgICogQHBhcmFtICBTaXplIGxlbmd0aCBvZiB0aGUgaW5wdXQgYnVmZmVyIGluIGJ5dGVzLgorICAqIEBwYXJhbSAgcE91dEJ1ZmZlciBwb2ludGVyIHRvIHRoZSBjb21wdXRlZCBkaWdlc3QuIERpZ2VzdCBzaXplIGlzIDI4IGJ5dGVzLgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0hBU0hFeF9TSEEyMjRfU3RhcnRfSVQoSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCwgdWludDhfdCAqcEluQnVmZmVyLCB1aW50MzJfdCBTaXplLCB1aW50OF90KiBwT3V0QnVmZmVyKQpAQCAtMjUxLDEzICsyOTEsNTAgQEAKIH0KIAogLyoqCisgICogQGJyaWVmICBJZiBub3QgYWxyZWFkeSBkb25lLCBpbml0aWFsaXplIHRoZSBIQVNIIHBlcmlwaGVyYWwgaW4gU0hBMjI0IG1vZGUgdGhlbgorICAqICAgICAgICAgcHJvY2Vzc2VzIHBJbkJ1ZmZlciBpbiBpbnRlcnJ1cHRpb24gbW9kZS4KKyAgKiBAbm90ZSAgIENvbnNlY3V0aXZlIGNhbGxzIHRvIEhBTF9IQVNIRXhfU0hBMjI0X0FjY21sdF9JVCgpIGNhbiBiZSB1c2VkIHRvIGZlZWQKKyAgKiAgICAgICAgIHNldmVyYWwgaW5wdXQgYnVmZmVycyBiYWNrLXRvLWJhY2sgdG8gdGhlIFBlcmlwaGVyYWwgdGhhdCB3aWxsIHlpZWxkIGEgc2luZ2xlCisgICogICAgICAgICBIQVNIIHNpZ25hdHVyZSBvbmNlIGFsbCBidWZmZXJzIGhhdmUgYmVlbiBlbnRlcmVkLiBXcmFwLXVwIG9mIGlucHV0CisgICogICAgICAgICBidWZmZXJzIGZlZWRpbmcgYW5kIHJldHJpZXZhbCBvZiBkaWdlc3QgaXMgZG9uZSBieSBhIGNhbGwgdG8KKyAgKiAgICAgICAgIEhBTF9IQVNIRXhfU0hBMjI0X0FjY21sdF9FbmRfSVQoKS4KKyAgKiBAbm90ZSAgIEZpZWxkIGhoYXNoLT5QaGFzZSBvZiBIQVNIIGhhbmRsZSBpcyB0ZXN0ZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiAgICAgICAgIHRoZSBQZXJpcGhlcmFsIGhhcyBhbHJlYWR5IGJlZW4gaW5pdGlhbGl6ZWQuCisgICogQG5vdGUgICBUaGUgaW5wdXQgYnVmZmVyIHNpemUgKGluIGJ5dGVzKSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNCBvdGhlcndpc2UsIHRoZQorICAqICAgICAgICAgSEFTSCBkaWdlc3QgY29tcHV0YXRpb24gaXMgY29ycnVwdGVkLiBPbmx5IEhBTF9IQVNIRXhfU0hBMjI0X0FjY21sdF9FbmRfSVQoKSBpcyBhYmxlCisgICogICAgICAgICB0byBtYW5hZ2UgdGhlIGVuZGluZyBidWZmZXIgd2l0aCBhIGxlbmd0aCBpbiBieXRlcyBub3QgYSBtdWx0aXBsZSBvZiA0LgorICAqIEBwYXJhbSAgaGhhc2ggSEFTSCBoYW5kbGUuCisgICogQHBhcmFtICBwSW5CdWZmZXIgcG9pbnRlciB0byB0aGUgaW5wdXQgYnVmZmVyIChidWZmZXIgdG8gYmUgaGFzaGVkKS4KKyAgKiBAcGFyYW0gIFNpemUgbGVuZ3RoIG9mIHRoZSBpbnB1dCBidWZmZXIgaW4gYnl0ZXMsIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0LgorICAqIEByZXR2YWwgSEFMIHN0YXR1cworICAqLworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0hBU0hFeF9TSEEyMjRfQWNjbWx0X0lUKEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gsIHVpbnQ4X3QgKnBJbkJ1ZmZlciwgdWludDMyX3QgU2l6ZSkKK3sKKyAgcmV0dXJuICBIQVNIX0FjY3VtdWxhdGVfSVQoaGhhc2gsIHBJbkJ1ZmZlciwgU2l6ZSxIQVNIX0FMR09TRUxFQ1RJT05fU0hBMjI0KTsKK30KKworLyoqCisgICogQGJyaWVmICBFbmQgY29tcHV0YXRpb24gb2YgYSBzaW5nbGUgSEFTSCBzaWduYXR1cmUgYWZ0ZXIgc2V2ZXJhbCBjYWxscyB0byBIQUxfSEFTSEV4X1NIQTIyNF9BY2NtbHRfSVQoKSBBUEkuCisgICogQG5vdGUgICBEaWdlc3QgaXMgYXZhaWxhYmxlIGluIHBPdXRCdWZmZXIuCisgICogQHBhcmFtICBoaGFzaCBIQVNIIGhhbmRsZS4KKyAgKiBAcGFyYW0gIHBJbkJ1ZmZlciBwb2ludGVyIHRvIHRoZSBpbnB1dCBidWZmZXIgKGJ1ZmZlciB0byBiZSBoYXNoZWQpLgorICAqIEBwYXJhbSAgU2l6ZSBsZW5ndGggb2YgdGhlIGlucHV0IGJ1ZmZlciBpbiBieXRlcy4KKyAgKiBAcGFyYW0gIHBPdXRCdWZmZXIgcG9pbnRlciB0byB0aGUgY29tcHV0ZWQgZGlnZXN0LiBEaWdlc3Qgc2l6ZSBpcyAyOCBieXRlcy4KKyAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKKyAgKi8KK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9IQVNIRXhfU0hBMjI0X0FjY21sdF9FbmRfSVQoSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCwgdWludDhfdCAqcEluQnVmZmVyLCB1aW50MzJfdCBTaXplLCB1aW50OF90KiBwT3V0QnVmZmVyKQoreworICByZXR1cm4gSEFTSF9TdGFydF9JVChoaGFzaCwgcEluQnVmZmVyLCBTaXplLCBwT3V0QnVmZmVyLEhBU0hfQUxHT1NFTEVDVElPTl9TSEEyMjQpOworfQorCisvKioKICAgKiBAYnJpZWYgIEluaXRpYWxpemUgdGhlIEhBU0ggcGVyaXBoZXJhbCBpbiBTSEEyNTYgbW9kZSwgbmV4dCBwcm9jZXNzIHBJbkJ1ZmZlciB0aGVuCiAgICogICAgICAgICByZWFkIHRoZSBjb21wdXRlZCBkaWdlc3QgaW4gaW50ZXJydXB0aW9uIG1vZGUuCiAgICogQG5vdGUgICBEaWdlc3QgaXMgYXZhaWxhYmxlIGluIHBPdXRCdWZmZXIuCi0gICogQHBhcmFtICBoaGFzaDogSEFTSCBoYW5kbGUuCi0gICogQHBhcmFtICBwSW5CdWZmZXI6IHBvaW50ZXIgdG8gdGhlIGlucHV0IGJ1ZmZlciAoYnVmZmVyIHRvIGJlIGhhc2hlZCkuCi0gICogQHBhcmFtICBTaXplOiBsZW5ndGggb2YgdGhlIGlucHV0IGJ1ZmZlciBpbiBieXRlcy4KLSAgKiBAcGFyYW0gIHBPdXRCdWZmZXI6IHBvaW50ZXIgdG8gdGhlIGNvbXB1dGVkIGRpZ2VzdC4gRGlnZXN0IHNpemUgaXMgMzIgYnl0ZXMuCisgICogQHBhcmFtICBoaGFzaCBIQVNIIGhhbmRsZS4KKyAgKiBAcGFyYW0gIHBJbkJ1ZmZlciBwb2ludGVyIHRvIHRoZSBpbnB1dCBidWZmZXIgKGJ1ZmZlciB0byBiZSBoYXNoZWQpLgorICAqIEBwYXJhbSAgU2l6ZSBsZW5ndGggb2YgdGhlIGlucHV0IGJ1ZmZlciBpbiBieXRlcy4KKyAgKiBAcGFyYW0gIHBPdXRCdWZmZXIgcG9pbnRlciB0byB0aGUgY29tcHV0ZWQgZGlnZXN0LiBEaWdlc3Qgc2l6ZSBpcyAzMiBieXRlcy4KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9IQVNIRXhfU0hBMjU2X1N0YXJ0X0lUKEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gsIHVpbnQ4X3QgKnBJbkJ1ZmZlciwgdWludDMyX3QgU2l6ZSwgdWludDhfdCogcE91dEJ1ZmZlcikKQEAgLTI2Niw2ICszNDMsNDMgQEAKIH0KIAogLyoqCisgICogQGJyaWVmICBJZiBub3QgYWxyZWFkeSBkb25lLCBpbml0aWFsaXplIHRoZSBIQVNIIHBlcmlwaGVyYWwgaW4gU0hBMjU2IG1vZGUgdGhlbgorICAqICAgICAgICAgcHJvY2Vzc2VzIHBJbkJ1ZmZlciBpbiBpbnRlcnJ1cHRpb24gbW9kZS4KKyAgKiBAbm90ZSAgIENvbnNlY3V0aXZlIGNhbGxzIHRvIEhBTF9IQVNIRXhfU0hBMjU2X0FjY21sdF9JVCgpIGNhbiBiZSB1c2VkIHRvIGZlZWQKKyAgKiAgICAgICAgIHNldmVyYWwgaW5wdXQgYnVmZmVycyBiYWNrLXRvLWJhY2sgdG8gdGhlIFBlcmlwaGVyYWwgdGhhdCB3aWxsIHlpZWxkIGEgc2luZ2xlCisgICogICAgICAgICBIQVNIIHNpZ25hdHVyZSBvbmNlIGFsbCBidWZmZXJzIGhhdmUgYmVlbiBlbnRlcmVkLiBXcmFwLXVwIG9mIGlucHV0CisgICogICAgICAgICBidWZmZXJzIGZlZWRpbmcgYW5kIHJldHJpZXZhbCBvZiBkaWdlc3QgaXMgZG9uZSBieSBhIGNhbGwgdG8KKyAgKiAgICAgICAgIEhBTF9IQVNIRXhfU0hBMjU2X0FjY21sdF9FbmRfSVQoKS4KKyAgKiBAbm90ZSAgIEZpZWxkIGhoYXNoLT5QaGFzZSBvZiBIQVNIIGhhbmRsZSBpcyB0ZXN0ZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiAgICAgICAgIHRoZSBQZXJpcGhlcmFsIGhhcyBhbHJlYWR5IGJlZW4gaW5pdGlhbGl6ZWQuCisgICogQG5vdGUgICBUaGUgaW5wdXQgYnVmZmVyIHNpemUgKGluIGJ5dGVzKSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNCBvdGhlcndpc2UsIHRoZQorICAqICAgICAgICAgSEFTSCBkaWdlc3QgY29tcHV0YXRpb24gaXMgY29ycnVwdGVkLiBPbmx5IEhBTF9IQVNIRXhfU0hBMjU2X0FjY21sdF9FbmRfSVQoKSBpcyBhYmxlCisgICogICAgICAgICB0byBtYW5hZ2UgdGhlIGVuZGluZyBidWZmZXIgd2l0aCBhIGxlbmd0aCBpbiBieXRlcyBub3QgYSBtdWx0aXBsZSBvZiA0LgorICAqIEBwYXJhbSAgaGhhc2ggSEFTSCBoYW5kbGUuCisgICogQHBhcmFtICBwSW5CdWZmZXIgcG9pbnRlciB0byB0aGUgaW5wdXQgYnVmZmVyIChidWZmZXIgdG8gYmUgaGFzaGVkKS4KKyAgKiBAcGFyYW0gIFNpemUgbGVuZ3RoIG9mIHRoZSBpbnB1dCBidWZmZXIgaW4gYnl0ZXMsIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0LgorICAqIEByZXR2YWwgSEFMIHN0YXR1cworICAqLworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0hBU0hFeF9TSEEyNTZfQWNjbWx0X0lUKEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gsIHVpbnQ4X3QgKnBJbkJ1ZmZlciwgdWludDMyX3QgU2l6ZSkKK3sKKyAgcmV0dXJuICBIQVNIX0FjY3VtdWxhdGVfSVQoaGhhc2gsIHBJbkJ1ZmZlciwgU2l6ZSxIQVNIX0FMR09TRUxFQ1RJT05fU0hBMjU2KTsKK30KKworLyoqCisgICogQGJyaWVmICBFbmQgY29tcHV0YXRpb24gb2YgYSBzaW5nbGUgSEFTSCBzaWduYXR1cmUgYWZ0ZXIgc2V2ZXJhbCBjYWxscyB0byBIQUxfSEFTSEV4X1NIQTI1Nl9BY2NtbHRfSVQoKSBBUEkuCisgICogQG5vdGUgICBEaWdlc3QgaXMgYXZhaWxhYmxlIGluIHBPdXRCdWZmZXIuCisgICogQHBhcmFtICBoaGFzaCBIQVNIIGhhbmRsZS4KKyAgKiBAcGFyYW0gIHBJbkJ1ZmZlciBwb2ludGVyIHRvIHRoZSBpbnB1dCBidWZmZXIgKGJ1ZmZlciB0byBiZSBoYXNoZWQpLgorICAqIEBwYXJhbSAgU2l6ZSBsZW5ndGggb2YgdGhlIGlucHV0IGJ1ZmZlciBpbiBieXRlcy4KKyAgKiBAcGFyYW0gIHBPdXRCdWZmZXIgcG9pbnRlciB0byB0aGUgY29tcHV0ZWQgZGlnZXN0LiBEaWdlc3Qgc2l6ZSBpcyAzMiBieXRlcy4KKyAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKKyAgKi8KK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9IQVNIRXhfU0hBMjU2X0FjY21sdF9FbmRfSVQoSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCwgdWludDhfdCAqcEluQnVmZmVyLCB1aW50MzJfdCBTaXplLCB1aW50OF90KiBwT3V0QnVmZmVyKQoreworICByZXR1cm4gSEFTSF9TdGFydF9JVChoaGFzaCwgcEluQnVmZmVyLCBTaXplLCBwT3V0QnVmZmVyLEhBU0hfQUxHT1NFTEVDVElPTl9TSEEyNTYpOworfQorCisvKioKICAgKiBAfQogICAqLwogCkBAIC0yODUsNyArMzk5LDcgQEAKICAgICAgICAgICgrKykgSEFMX0hBU0hFeF9TSEEyNTZfU3RhcnRfRE1BKCkKICAgICAgICAgICgrKykgSEFMX0hBU0hFeF9TSEEyNTZfRmluaXNoKCkKIAotICAgIFsuLl0gIFdoZW4gcmVzb3J0aW5nIHRvIERNQSBtb2RlIHRvIGVudGVyIHRoZSBkYXRhIGluIHRoZSBJUCwgdXNlciBtdXN0IHJlc29ydAorICAgIFsuLl0gIFdoZW4gcmVzb3J0aW5nIHRvIERNQSBtb2RlIHRvIGVudGVyIHRoZSBkYXRhIGluIHRoZSBQZXJpcGhlcmFsLCB1c2VyIG11c3QgcmVzb3J0CiAgICAgICAgICAgdG8gIEhBTF9IQVNIRXhfeHh4X1N0YXJ0X0RNQSgpIHRoZW4gcmVhZCB0aGUgcmVzdWx0aW5nIGRpZ2VzdCB3aXRoCiAgICAgICAgICAgSEFMX0hBU0hFeF94eHhfRmluaXNoKCkuCiAKQEAgLTMwMywxMiArNDE3LDEyIEBACiAKIC8qKgogICAqIEBicmllZiAgSW5pdGlhbGl6ZSB0aGUgSEFTSCBwZXJpcGhlcmFsIGluIFNIQTIyNCBtb2RlIHRoZW4gaW5pdGlhdGUgYSBETUEgdHJhbnNmZXIKLSAgKiAgICAgICAgIHRvIGZlZWQgdGhlIGlucHV0IGJ1ZmZlciB0byB0aGUgSVAuCisgICogICAgICAgICB0byBmZWVkIHRoZSBpbnB1dCBidWZmZXIgdG8gdGhlIFBlcmlwaGVyYWwuCiAgICogQG5vdGUgICBPbmNlIHRoZSBETUEgdHJhbnNmZXIgaXMgZmluaXNoZWQsIEhBTF9IQVNIRXhfU0hBMjI0X0ZpbmlzaCgpIEFQSSBtdXN0CiAgICogICAgICAgICBiZSBjYWxsZWQgdG8gcmV0cmlldmUgdGhlIGNvbXB1dGVkIGRpZ2VzdC4KLSAgKiBAcGFyYW0gIGhoYXNoOiBIQVNIIGhhbmRsZS4KLSAgKiBAcGFyYW0gIHBJbkJ1ZmZlcjogcG9pbnRlciB0byB0aGUgaW5wdXQgYnVmZmVyIChidWZmZXIgdG8gYmUgaGFzaGVkKS4KLSAgKiBAcGFyYW0gIFNpemU6IGxlbmd0aCBvZiB0aGUgaW5wdXQgYnVmZmVyIGluIGJ5dGVzLgorICAqIEBwYXJhbSAgaGhhc2ggSEFTSCBoYW5kbGUuCisgICogQHBhcmFtICBwSW5CdWZmZXIgcG9pbnRlciB0byB0aGUgaW5wdXQgYnVmZmVyIChidWZmZXIgdG8gYmUgaGFzaGVkKS4KKyAgKiBAcGFyYW0gIFNpemUgbGVuZ3RoIG9mIHRoZSBpbnB1dCBidWZmZXIgaW4gYnl0ZXMuCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfSEFTSEV4X1NIQTIyNF9TdGFydF9ETUEoSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCwgdWludDhfdCAqcEluQnVmZmVyLCB1aW50MzJfdCBTaXplKQpAQCAtMzIxLDkgKzQzNSw5IEBACiAgICogQG5vdGUgICBUaGUgQVBJIHdhaXRzIGZvciBEQ0lTIHRvIGJlIHNldCB0aGVuIHJlYWRzIHRoZSBjb21wdXRlZCBkaWdlc3QuCiAgICogQG5vdGUgICBIQUxfSEFTSEV4X1NIQTIyNF9GaW5pc2goKSBjYW4gYmUgdXNlZCBhcyB3ZWxsIHRvIHJldHJpZXZlIHRoZSBkaWdlc3QgaW4KICAgKiAgICAgICAgIEhNQUMgU0hBMjI0IG1vZGUuCi0gICogQHBhcmFtICBoaGFzaDogSEFTSCBoYW5kbGUuCi0gICogQHBhcmFtICBwT3V0QnVmZmVyOiBwb2ludGVyIHRvIHRoZSBjb21wdXRlZCBkaWdlc3QuIERpZ2VzdCBzaXplIGlzIDI4IGJ5dGVzLgotICAqIEBwYXJhbSAgVGltZW91dDogVGltZW91dCB2YWx1ZS4KKyAgKiBAcGFyYW0gIGhoYXNoIEhBU0ggaGFuZGxlLgorICAqIEBwYXJhbSAgcE91dEJ1ZmZlciBwb2ludGVyIHRvIHRoZSBjb21wdXRlZCBkaWdlc3QuIERpZ2VzdCBzaXplIGlzIDI4IGJ5dGVzLgorICAqIEBwYXJhbSAgVGltZW91dCBUaW1lb3V0IHZhbHVlLgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0hBU0hFeF9TSEEyMjRfRmluaXNoKEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gsIHVpbnQ4X3QqIHBPdXRCdWZmZXIsIHVpbnQzMl90IFRpbWVvdXQpCkBAIC0zMzMsMTIgKzQ0NywxMiBAQAogCiAvKioKICAgKiBAYnJpZWYgIEluaXRpYWxpemUgdGhlIEhBU0ggcGVyaXBoZXJhbCBpbiBTSEEyNTYgbW9kZSB0aGVuIGluaXRpYXRlIGEgRE1BIHRyYW5zZmVyCi0gICogICAgICAgICB0byBmZWVkIHRoZSBpbnB1dCBidWZmZXIgdG8gdGhlIElQLgorICAqICAgICAgICAgdG8gZmVlZCB0aGUgaW5wdXQgYnVmZmVyIHRvIHRoZSBQZXJpcGhlcmFsLgogICAqIEBub3RlICAgT25jZSB0aGUgRE1BIHRyYW5zZmVyIGlzIGZpbmlzaGVkLCBIQUxfSEFTSEV4X1NIQTI1Nl9GaW5pc2goKSBBUEkgbXVzdAogICAqICAgICAgICAgYmUgY2FsbGVkIHRvIHJldHJpZXZlIHRoZSBjb21wdXRlZCBkaWdlc3QuCi0gICogQHBhcmFtICBoaGFzaDogSEFTSCBoYW5kbGUuCi0gICogQHBhcmFtICBwSW5CdWZmZXI6IHBvaW50ZXIgdG8gdGhlIGlucHV0IGJ1ZmZlciAoYnVmZmVyIHRvIGJlIGhhc2hlZCkuCi0gICogQHBhcmFtICBTaXplOiBsZW5ndGggb2YgdGhlIGlucHV0IGJ1ZmZlciBpbiBieXRlcy4KKyAgKiBAcGFyYW0gIGhoYXNoIEhBU0ggaGFuZGxlLgorICAqIEBwYXJhbSAgcEluQnVmZmVyIHBvaW50ZXIgdG8gdGhlIGlucHV0IGJ1ZmZlciAoYnVmZmVyIHRvIGJlIGhhc2hlZCkuCisgICogQHBhcmFtICBTaXplIGxlbmd0aCBvZiB0aGUgaW5wdXQgYnVmZmVyIGluIGJ5dGVzLgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0hBU0hFeF9TSEEyNTZfU3RhcnRfRE1BKEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gsIHVpbnQ4X3QgKnBJbkJ1ZmZlciwgdWludDMyX3QgU2l6ZSkKQEAgLTM1MSw5ICs0NjUsOSBAQAogICAqIEBub3RlICAgVGhlIEFQSSB3YWl0cyBmb3IgRENJUyB0byBiZSBzZXQgdGhlbiByZWFkcyB0aGUgY29tcHV0ZWQgZGlnZXN0LgogICAqIEBub3RlICAgSEFMX0hBU0hFeF9TSEEyNTZfRmluaXNoKCkgY2FuIGJlIHVzZWQgYXMgd2VsbCB0byByZXRyaWV2ZSB0aGUgZGlnZXN0IGluCiAgICogICAgICAgICBITUFDIFNIQTI1NiBtb2RlLgotICAqIEBwYXJhbSAgaGhhc2g6IEhBU0ggaGFuZGxlLgotICAqIEBwYXJhbSAgcE91dEJ1ZmZlcjogcG9pbnRlciB0byB0aGUgY29tcHV0ZWQgZGlnZXN0LiBEaWdlc3Qgc2l6ZSBpcyAzMiBieXRlcy4KLSAgKiBAcGFyYW0gIFRpbWVvdXQ6IFRpbWVvdXQgdmFsdWUuCisgICogQHBhcmFtICBoaGFzaCBIQVNIIGhhbmRsZS4KKyAgKiBAcGFyYW0gIHBPdXRCdWZmZXIgcG9pbnRlciB0byB0aGUgY29tcHV0ZWQgZGlnZXN0LiBEaWdlc3Qgc2l6ZSBpcyAzMiBieXRlcy4KKyAgKiBAcGFyYW0gIFRpbWVvdXQgVGltZW91dCB2YWx1ZS4KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9IQVNIRXhfU0hBMjU2X0ZpbmlzaChIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoLCB1aW50OF90KiBwT3V0QnVmZmVyLCB1aW50MzJfdCBUaW1lb3V0KQpAQCAtMzkxLDExICs1MDUsMTEgQEAKICAgKiBAbm90ZSAgIERpZ2VzdCBpcyBhdmFpbGFibGUgaW4gcE91dEJ1ZmZlci4KICAgKiBAbm90ZSAgIFNhbWUga2V5IGlzIHVzZWQgZm9yIHRoZSBpbm5lciBhbmQgdGhlIG91dGVyIGhhc2ggZnVuY3Rpb25zOyBwb2ludGVyIHRvIGtleSBhbmQKICAgKiAgICAgICAgIGtleSBzaXplIGFyZSByZXNwZWN0aXZlbHkgc3RvcmVkIGluIGhoYXNoLT5Jbml0LnBLZXkgYW5kIGhoYXNoLT5Jbml0LktleVNpemUuCi0gICogQHBhcmFtICBoaGFzaDogSEFTSCBoYW5kbGUuCi0gICogQHBhcmFtICBwSW5CdWZmZXI6IHBvaW50ZXIgdG8gdGhlIGlucHV0IGJ1ZmZlciAoYnVmZmVyIHRvIGJlIGhhc2hlZCkuCi0gICogQHBhcmFtICBTaXplOiBsZW5ndGggb2YgdGhlIGlucHV0IGJ1ZmZlciBpbiBieXRlcy4KLSAgKiBAcGFyYW0gIHBPdXRCdWZmZXI6IHBvaW50ZXIgdG8gdGhlIGNvbXB1dGVkIGRpZ2VzdC4gRGlnZXN0IHNpemUgaXMgMjggYnl0ZXMuCi0gICogQHBhcmFtICBUaW1lb3V0OiBUaW1lb3V0IHZhbHVlLgorICAqIEBwYXJhbSAgaGhhc2ggSEFTSCBoYW5kbGUuCisgICogQHBhcmFtICBwSW5CdWZmZXIgcG9pbnRlciB0byB0aGUgaW5wdXQgYnVmZmVyIChidWZmZXIgdG8gYmUgaGFzaGVkKS4KKyAgKiBAcGFyYW0gIFNpemUgbGVuZ3RoIG9mIHRoZSBpbnB1dCBidWZmZXIgaW4gYnl0ZXMuCisgICogQHBhcmFtICBwT3V0QnVmZmVyIHBvaW50ZXIgdG8gdGhlIGNvbXB1dGVkIGRpZ2VzdC4gRGlnZXN0IHNpemUgaXMgMjggYnl0ZXMuCisgICogQHBhcmFtICBUaW1lb3V0IFRpbWVvdXQgdmFsdWUuCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfSE1BQ0V4X1NIQTIyNF9TdGFydChIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoLCB1aW50OF90ICpwSW5CdWZmZXIsIHVpbnQzMl90IFNpemUsIHVpbnQ4X3QqIHBPdXRCdWZmZXIsIHVpbnQzMl90IFRpbWVvdXQpCkBAIC00MDksMTEgKzUyMywxMSBAQAogICAqIEBub3RlICAgRGlnZXN0IGlzIGF2YWlsYWJsZSBpbiBwT3V0QnVmZmVyLgogICAqIEBub3RlICAgU2FtZSBrZXkgaXMgdXNlZCBmb3IgdGhlIGlubmVyIGFuZCB0aGUgb3V0ZXIgaGFzaCBmdW5jdGlvbnM7IHBvaW50ZXIgdG8ga2V5IGFuZAogICAqICAgICAgICAga2V5IHNpemUgYXJlIHJlc3BlY3RpdmVseSBzdG9yZWQgaW4gaGhhc2gtPkluaXQucEtleSBhbmQgaGhhc2gtPkluaXQuS2V5U2l6ZS4KLSAgKiBAcGFyYW0gIGhoYXNoOiBIQVNIIGhhbmRsZS4KLSAgKiBAcGFyYW0gIHBJbkJ1ZmZlcjogcG9pbnRlciB0byB0aGUgaW5wdXQgYnVmZmVyIChidWZmZXIgdG8gYmUgaGFzaGVkKS4KLSAgKiBAcGFyYW0gIFNpemU6IGxlbmd0aCBvZiB0aGUgaW5wdXQgYnVmZmVyIGluIGJ5dGVzLgotICAqIEBwYXJhbSAgcE91dEJ1ZmZlcjogcG9pbnRlciB0byB0aGUgY29tcHV0ZWQgZGlnZXN0LiBEaWdlc3Qgc2l6ZSBpcyAzMiBieXRlcy4KLSAgKiBAcGFyYW0gIFRpbWVvdXQ6IFRpbWVvdXQgdmFsdWUuCisgICogQHBhcmFtICBoaGFzaCBIQVNIIGhhbmRsZS4KKyAgKiBAcGFyYW0gIHBJbkJ1ZmZlciBwb2ludGVyIHRvIHRoZSBpbnB1dCBidWZmZXIgKGJ1ZmZlciB0byBiZSBoYXNoZWQpLgorICAqIEBwYXJhbSAgU2l6ZSBsZW5ndGggb2YgdGhlIGlucHV0IGJ1ZmZlciBpbiBieXRlcy4KKyAgKiBAcGFyYW0gIHBPdXRCdWZmZXIgcG9pbnRlciB0byB0aGUgY29tcHV0ZWQgZGlnZXN0LiBEaWdlc3Qgc2l6ZSBpcyAzMiBieXRlcy4KKyAgKiBAcGFyYW0gIFRpbWVvdXQgVGltZW91dCB2YWx1ZS4KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9ITUFDRXhfU0hBMjU2X1N0YXJ0KEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gsIHVpbnQ4X3QgKnBJbkJ1ZmZlciwgdWludDMyX3QgU2l6ZSwgdWludDhfdCogcE91dEJ1ZmZlciwgdWludDMyX3QgVGltZW91dCkKQEAgLTQ1MiwxMCArNTY2LDEwIEBACiAgICogQG5vdGUgICBEaWdlc3QgaXMgYXZhaWxhYmxlIGluIHBPdXRCdWZmZXIuCiAgICogQG5vdGUgICBTYW1lIGtleSBpcyB1c2VkIGZvciB0aGUgaW5uZXIgYW5kIHRoZSBvdXRlciBoYXNoIGZ1bmN0aW9uczsgcG9pbnRlciB0byBrZXkgYW5kCiAgICogICAgICAgICBrZXkgc2l6ZSBhcmUgcmVzcGVjdGl2ZWx5IHN0b3JlZCBpbiBoaGFzaC0+SW5pdC5wS2V5IGFuZCBoaGFzaC0+SW5pdC5LZXlTaXplLgotICAqIEBwYXJhbSAgaGhhc2g6IEhBU0ggaGFuZGxlLgotICAqIEBwYXJhbSAgcEluQnVmZmVyOiBwb2ludGVyIHRvIHRoZSBpbnB1dCBidWZmZXIgKGJ1ZmZlciB0byBiZSBoYXNoZWQpLgotICAqIEBwYXJhbSAgU2l6ZTogbGVuZ3RoIG9mIHRoZSBpbnB1dCBidWZmZXIgaW4gYnl0ZXMuCi0gICogQHBhcmFtICBwT3V0QnVmZmVyOiBwb2ludGVyIHRvIHRoZSBjb21wdXRlZCBkaWdlc3QuIERpZ2VzdCBzaXplIGlzIDI4IGJ5dGVzLgorICAqIEBwYXJhbSAgaGhhc2ggSEFTSCBoYW5kbGUuCisgICogQHBhcmFtICBwSW5CdWZmZXIgcG9pbnRlciB0byB0aGUgaW5wdXQgYnVmZmVyIChidWZmZXIgdG8gYmUgaGFzaGVkKS4KKyAgKiBAcGFyYW0gIFNpemUgbGVuZ3RoIG9mIHRoZSBpbnB1dCBidWZmZXIgaW4gYnl0ZXMuCisgICogQHBhcmFtICBwT3V0QnVmZmVyIHBvaW50ZXIgdG8gdGhlIGNvbXB1dGVkIGRpZ2VzdC4gRGlnZXN0IHNpemUgaXMgMjggYnl0ZXMuCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfSE1BQ0V4X1NIQTIyNF9TdGFydF9JVChIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoLCB1aW50OF90ICpwSW5CdWZmZXIsIHVpbnQzMl90IFNpemUsIHVpbnQ4X3QqIHBPdXRCdWZmZXIpCkBAIC00NjksMTAgKzU4MywxMCBAQAogICAqIEBub3RlICAgRGlnZXN0IGlzIGF2YWlsYWJsZSBpbiBwT3V0QnVmZmVyLgogICAqIEBub3RlICAgU2FtZSBrZXkgaXMgdXNlZCBmb3IgdGhlIGlubmVyIGFuZCB0aGUgb3V0ZXIgaGFzaCBmdW5jdGlvbnM7IHBvaW50ZXIgdG8ga2V5IGFuZAogICAqICAgICAgICAga2V5IHNpemUgYXJlIHJlc3BlY3RpdmVseSBzdG9yZWQgaW4gaGhhc2gtPkluaXQucEtleSBhbmQgaGhhc2gtPkluaXQuS2V5U2l6ZS4KLSAgKiBAcGFyYW0gIGhoYXNoOiBIQVNIIGhhbmRsZS4KLSAgKiBAcGFyYW0gIHBJbkJ1ZmZlcjogcG9pbnRlciB0byB0aGUgaW5wdXQgYnVmZmVyIChidWZmZXIgdG8gYmUgaGFzaGVkKS4KLSAgKiBAcGFyYW0gIFNpemU6IGxlbmd0aCBvZiB0aGUgaW5wdXQgYnVmZmVyIGluIGJ5dGVzLgotICAqIEBwYXJhbSAgcE91dEJ1ZmZlcjogcG9pbnRlciB0byB0aGUgY29tcHV0ZWQgZGlnZXN0LiBEaWdlc3Qgc2l6ZSBpcyAzMiBieXRlcy4KKyAgKiBAcGFyYW0gIGhoYXNoIEhBU0ggaGFuZGxlLgorICAqIEBwYXJhbSAgcEluQnVmZmVyIHBvaW50ZXIgdG8gdGhlIGlucHV0IGJ1ZmZlciAoYnVmZmVyIHRvIGJlIGhhc2hlZCkuCisgICogQHBhcmFtICBTaXplIGxlbmd0aCBvZiB0aGUgaW5wdXQgYnVmZmVyIGluIGJ5dGVzLgorICAqIEBwYXJhbSAgcE91dEJ1ZmZlciBwb2ludGVyIHRvIHRoZSBjb21wdXRlZCBkaWdlc3QuIERpZ2VzdCBzaXplIGlzIDMyIGJ5dGVzLgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0hNQUNFeF9TSEEyNTZfU3RhcnRfSVQoSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCwgdWludDhfdCAqcEluQnVmZmVyLCB1aW50MzJfdCBTaXplLCB1aW50OF90KiBwT3V0QnVmZmVyKQpAQCAtNTAyLDcgKzYxNiw3IEBACiAgICAgICAoKykgU0hBMjU2CiAgICAgICAgICAoKyspIEhBTF9ITUFDRXhfU0hBMjU2X1N0YXJ0X0RNQSgpCiAKLSAgICBbLi5dICBXaGVuIHJlc29ydGluZyB0byBETUEgbW9kZSB0byBlbnRlciB0aGUgZGF0YSBpbiB0aGUgSVAgZm9yIEhNQUMgcHJvY2Vzc2luZywKKyAgICBbLi5dICBXaGVuIHJlc29ydGluZyB0byBETUEgbW9kZSB0byBlbnRlciB0aGUgZGF0YSBpbiB0aGUgUGVyaXBoZXJhbCBmb3IgSE1BQyBwcm9jZXNzaW5nLAogICAgICAgICAgIHVzZXIgbXVzdCByZXNvcnQgdG8gIEhBTF9ITUFDRXhfeHh4X1N0YXJ0X0RNQSgpIHRoZW4gcmVhZCB0aGUgcmVzdWx0aW5nIGRpZ2VzdAogICAgICAgICAgIHdpdGggSEFMX0hBU0hFeF94eHhfRmluaXNoKCkuCiAKQEAgLTUxNSw3ICs2MjksNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIEluaXRpYWxpemUgdGhlIEhBU0ggcGVyaXBoZXJhbCBpbiBITUFDIFNIQTIyNCBtb2RlIHRoZW4gaW5pdGlhdGUgdGhlIHJlcXVpcmVkCi0gICogICAgICAgICBETUEgdHJhbnNmZXJzIHRvIGZlZWQgdGhlIGtleSBhbmQgdGhlIGlucHV0IGJ1ZmZlciB0byB0aGUgSVAuCisgICogICAgICAgICBETUEgdHJhbnNmZXJzIHRvIGZlZWQgdGhlIGtleSBhbmQgdGhlIGlucHV0IGJ1ZmZlciB0byB0aGUgUGVyaXBoZXJhbC4KICAgKiBAbm90ZSAgIE9uY2UgdGhlIERNQSB0cmFuc2ZlcnMgYXJlIGZpbmlzaGVkIChpbmRpY2F0ZWQgYnkgaGhhc2gtPlN0YXRlIHNldCBiYWNrCiAgICogICAgICAgICB0byBIQUxfSEFTSF9TVEFURV9SRUFEWSksIEhBTF9IQVNIRXhfU0hBMjI0X0ZpbmlzaCgpIEFQSSBtdXN0IGJlIGNhbGxlZCB0byByZXRyaWV2ZQogICAqICAgICAgICAgdGhlIGNvbXB1dGVkIGRpZ2VzdC4KQEAgLTUyNyw5ICs2NDEsOSBAQAogICAqICAgICAgICAgIEZvciB0aGUgcHJvY2Vzc2luZyBvZiB0aGUgbGFzdCBidWZmZXIgb2YgdGhlIHRocmVhZCwgTURNQVQgYml0IG11c3QKICAgKiAgICAgICAgICBiZSByZXNldCBhbmQgdGhlIGJ1ZmZlciBsZW5ndGggKGluIGJ5dGVzKSBkb2Vzbid0IGhhdmUgdG8gYmUgYQogICAqICAgICAgICAgIG11bHRpcGxlIG9mIDQuCi0gICogQHBhcmFtICBoaGFzaDogSEFTSCBoYW5kbGUuCi0gICogQHBhcmFtICBwSW5CdWZmZXI6IHBvaW50ZXIgdG8gdGhlIGlucHV0IGJ1ZmZlciAoYnVmZmVyIHRvIGJlIGhhc2hlZCkuCi0gICogQHBhcmFtICBTaXplOiBsZW5ndGggb2YgdGhlIGlucHV0IGJ1ZmZlciBpbiBieXRlcy4KKyAgKiBAcGFyYW0gIGhoYXNoIEhBU0ggaGFuZGxlLgorICAqIEBwYXJhbSAgcEluQnVmZmVyIHBvaW50ZXIgdG8gdGhlIGlucHV0IGJ1ZmZlciAoYnVmZmVyIHRvIGJlIGhhc2hlZCkuCisgICogQHBhcmFtICBTaXplIGxlbmd0aCBvZiB0aGUgaW5wdXQgYnVmZmVyIGluIGJ5dGVzLgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0hNQUNFeF9TSEEyMjRfU3RhcnRfRE1BKEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gsIHVpbnQ4X3QgKnBJbkJ1ZmZlciwgdWludDMyX3QgU2l6ZSkKQEAgLTUzOSw3ICs2NTMsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIEluaXRpYWxpemUgdGhlIEhBU0ggcGVyaXBoZXJhbCBpbiBITUFDIFNIQTIyNCBtb2RlIHRoZW4gaW5pdGlhdGUgdGhlIHJlcXVpcmVkCi0gICogICAgICAgICBETUEgdHJhbnNmZXJzIHRvIGZlZWQgdGhlIGtleSBhbmQgdGhlIGlucHV0IGJ1ZmZlciB0byB0aGUgSVAuCisgICogICAgICAgICBETUEgdHJhbnNmZXJzIHRvIGZlZWQgdGhlIGtleSBhbmQgdGhlIGlucHV0IGJ1ZmZlciB0byB0aGUgUGVyaXBoZXJhbC4KICAgKiBAbm90ZSAgIE9uY2UgdGhlIERNQSB0cmFuc2ZlcnMgYXJlIGZpbmlzaGVkIChpbmRpY2F0ZWQgYnkgaGhhc2gtPlN0YXRlIHNldCBiYWNrCiAgICogICAgICAgICB0byBIQUxfSEFTSF9TVEFURV9SRUFEWSksIEhBTF9IQVNIRXhfU0hBMjU2X0ZpbmlzaCgpIEFQSSBtdXN0IGJlIGNhbGxlZCB0byByZXRyaWV2ZQogICAqICAgICAgICAgdGhlIGNvbXB1dGVkIGRpZ2VzdC4KQEAgLTU1MSw5ICs2NjUsOSBAQAogICAqICAgICAgICAgIEZvciB0aGUgcHJvY2Vzc2luZyBvZiB0aGUgbGFzdCBidWZmZXIgb2YgdGhlIHRocmVhZCwgTURNQVQgYml0IG11c3QKICAgKiAgICAgICAgICBiZSByZXNldCBhbmQgdGhlIGJ1ZmZlciBsZW5ndGggKGluIGJ5dGVzKSBkb2Vzbid0IGhhdmUgdG8gYmUgYQogICAqICAgICAgICAgIG11bHRpcGxlIG9mIDQuCi0gICogQHBhcmFtICBoaGFzaDogSEFTSCBoYW5kbGUuCi0gICogQHBhcmFtICBwSW5CdWZmZXI6IHBvaW50ZXIgdG8gdGhlIGlucHV0IGJ1ZmZlciAoYnVmZmVyIHRvIGJlIGhhc2hlZCkuCi0gICogQHBhcmFtICBTaXplOiBsZW5ndGggb2YgdGhlIGlucHV0IGJ1ZmZlciBpbiBieXRlcy4KKyAgKiBAcGFyYW0gIGhoYXNoIEhBU0ggaGFuZGxlLgorICAqIEBwYXJhbSAgcEluQnVmZmVyIHBvaW50ZXIgdG8gdGhlIGlucHV0IGJ1ZmZlciAoYnVmZmVyIHRvIGJlIGhhc2hlZCkuCisgICogQHBhcmFtICBTaXplIGxlbmd0aCBvZiB0aGUgaW5wdXQgYnVmZmVyIGluIGJ5dGVzLgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0hNQUNFeF9TSEEyNTZfU3RhcnRfRE1BKEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gsIHVpbnQ4X3QgKnBJbkJ1ZmZlciwgdWludDMyX3QgU2l6ZSkKQEAgLTU5NywxMyArNzExLDEzIEBACiAgICAgICAgICAgY2FsbGluZyBIQUxfSE1BQ0V4X3h4eF9TdGVwMV8yX0RNQSgpLiBUaGlzIGNhcnJpZXMgb3V0IEhNQUMgc3RlcCAxIGFuZAogICAgICAgICAgIGludGlhdGVzIHN0ZXAgMiB3aXRoIHRoZSBmaXJzdCBpbnB1dCBidWZmZXIuCiAKLSAgICBbLi5dICBUaGUgZm9sbG93aW5nIGJ1ZmZlcnMgYXJlIG5leHQgZmVkIHRvIHRoZSBJUCB3aXRoIGEgY2FsbCB0byB0aGUgQVBJCisgICAgWy4uXSAgVGhlIGZvbGxvd2luZyBidWZmZXJzIGFyZSBuZXh0IGZlZCB0byB0aGUgUGVyaXBoZXJhbCB3aXRoIGEgY2FsbCB0byB0aGUgQVBJCiAgICAgICAgICAgSEFMX0hNQUNFeF94eHhfU3RlcDJfRE1BKCkuIFRoZXJlIG1heSBiZSBzZXZlcmFsIGNvbnNlY3V0aXZlIGNhbGxzCiAgICAgICAgICAgdG8gdGhpcyBBUEkuCiAKICAgICBbLi5dICBNdWx0aS1idWZmZXIgRE1BLWJhc2VkIEhNQUMgY29tcHV0YXRpb24gaXMgd3JhcHBlZCB1cCBieSBhIGNhbGwgdG8KICAgICAgICAgICBIQUxfSE1BQ0V4X3h4eF9TdGVwMl8zX0RNQSgpLiBUaGlzIGZpbmlzaGVzIHN0ZXAgMiBpbiBmZWVkaW5nIHRoZSBsYXN0IGlucHV0Ci0gICAgICAgICAgYnVmZmVyIHRvIHRoZSBJUCB0aGVuIGNhcnJpZXMgb3V0IHN0ZXAgMy4KKyAgICAgICAgICBidWZmZXIgdG8gdGhlIFBlcmlwaGVyYWwgdGhlbiBjYXJyaWVzIG91dCBzdGVwIDMuCiAKICAgICBbLi5dICBEaWdlc3QgaXMgcmV0cmlldmVkIGJ5IGEgY2FsbCB0byBIQUxfSEFTSF94eHhfRmluaXNoKCkgZm9yIE1ELTUgb3IKICAgICAgICAgICBTSEEtMSwgdG8gSEFMX0hBU0hFeF94eHhfRmluaXNoKCkgZm9yIFNIQS0yMjQgb3IgU0hBLTI1Ni4KQEAgLTYxOCwxOCArNzMyLDE4IEBACiAKIC8qKgogICAqIEBicmllZiAgTUQ1IEhNQUMgc3RlcCAxIGNvbXBsZXRpb24gYW5kIHN0ZXAgMiBzdGFydCBpbiBtdWx0aS1idWZmZXIgRE1BIG1vZGUuCi0gICogQG5vdGUgICBTdGVwIDEgY29uc2lzdHMgaW4gd3JpdGluZyB0aGUgaW5uZXIgaGFzaCBmdW5jdGlvbiBrZXkgaW4gdGhlIElQLAorICAqIEBub3RlICAgU3RlcCAxIGNvbnNpc3RzIGluIHdyaXRpbmcgdGhlIGlubmVyIGhhc2ggZnVuY3Rpb24ga2V5IGluIHRoZSBQZXJpcGhlcmFsLAogICAqICAgICAgICAgc3RlcCAyIGNvbnNpc3RzIGluIHdyaXRpbmcgdGhlIG1lc3NhZ2UgdGV4dC4KICAgKiBAbm90ZSAgIFRoZSBBUEkgY2FycmllcyBvdXQgdGhlIEhNQUMgc3RlcCAxIHRoZW4gc3RhcnRzIHN0ZXAgMiB3aXRoCi0gICogICAgICAgICB0aGUgZmlyc3QgYnVmZmVyIGVudGVyZWQgdG8gdGhlIElQLiBEQ0FMIGJpdCBpcyBub3QgYXV0b21hdGljYWxseSBzZXQgYWZ0ZXIKKyAgKiAgICAgICAgIHRoZSBmaXJzdCBidWZmZXIgZW50ZXJlZCB0byB0aGUgUGVyaXBoZXJhbC4gRENBTCBiaXQgaXMgbm90IGF1dG9tYXRpY2FsbHkgc2V0IGFmdGVyCiAgICogICAgICAgICB0aGUgbWVzc2FnZSBidWZmZXIgZmVlZGluZywgYWxsb3dpbmcgb3RoZXIgbWVzc2FnZXMgRE1BIHRyYW5zZmVycyB0byBvY2N1ci4KICAgKiBAbm90ZSAgIFNhbWUga2V5IGlzIHVzZWQgZm9yIHRoZSBpbm5lciBhbmQgdGhlIG91dGVyIGhhc2ggZnVuY3Rpb25zOyBwb2ludGVyIHRvIGtleSBhbmQKICAgKiAgICAgICAgIGtleSBzaXplIGFyZSByZXNwZWN0aXZlbHkgc3RvcmVkIGluIGhoYXNoLT5Jbml0LnBLZXkgYW5kIGhoYXNoLT5Jbml0LktleVNpemUuCiAgICogQG5vdGUgICBUaGUgaW5wdXQgYnVmZmVyIHNpemUgKGluIGJ5dGVzKSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNCBvdGhlcndpc2UsIHRoZQogICAqICAgICAgICAgSEFTSCBkaWdlc3QgY29tcHV0YXRpb24gaXMgY29ycnVwdGVkLgotICAqIEBwYXJhbSAgaGhhc2g6IEhBU0ggaGFuZGxlLgotICAqIEBwYXJhbSAgcEluQnVmZmVyOiBwb2ludGVyIHRvIHRoZSBpbnB1dCBidWZmZXIgKG1lc3NhZ2UgYnVmZmVyKS4KLSAgKiBAcGFyYW0gIFNpemU6IGxlbmd0aCBvZiB0aGUgaW5wdXQgYnVmZmVyIGluIGJ5dGVzLgorICAqIEBwYXJhbSAgaGhhc2ggSEFTSCBoYW5kbGUuCisgICogQHBhcmFtICBwSW5CdWZmZXIgcG9pbnRlciB0byB0aGUgaW5wdXQgYnVmZmVyIChtZXNzYWdlIGJ1ZmZlcikuCisgICogQHBhcmFtICBTaXplIGxlbmd0aCBvZiB0aGUgaW5wdXQgYnVmZmVyIGluIGJ5dGVzLgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0hNQUNFeF9NRDVfU3RlcDFfMl9ETUEoSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCwgdWludDhfdCAqcEluQnVmZmVyLCB1aW50MzJfdCBTaXplKQpAQCAtNjQwLDcgKzc1NCw3IEBACiAKIC8qKgogICAqIEBicmllZiAgTUQ1IEhNQUMgc3RlcCAyIGluIG11bHRpLWJ1ZmZlciBETUEgbW9kZS4KLSAgKiBAbm90ZSAgIFN0ZXAgMiBjb25zaXN0cyBpbiB3cml0aW5nIHRoZSBtZXNzYWdlIHRleHQgaW4gdGhlIElQLgorICAqIEBub3RlICAgU3RlcCAyIGNvbnNpc3RzIGluIHdyaXRpbmcgdGhlIG1lc3NhZ2UgdGV4dCBpbiB0aGUgUGVyaXBoZXJhbC4KICAgKiBAbm90ZSAgIFRoZSBBUEkgY2FycmllcyBvbiB0aGUgSE1BQyBzdGVwIDIsIGFwcGxpZWQgdG8gdGhlIGJ1ZmZlciBlbnRlcmVkIGFzIGlucHV0CiAgICogICAgICAgICBwYXJhbWV0ZXIuIERDQUwgYml0IGlzIG5vdCBhdXRvbWF0aWNhbGx5IHNldCBhZnRlciB0aGUgbWVzc2FnZSBidWZmZXIgZmVlZGluZywKICAgKiAgICAgICAgIGFsbG93aW5nIG90aGVyIG1lc3NhZ2VzIERNQSB0cmFuc2ZlcnMgdG8gb2NjdXIuCkBAIC02NDgsOSArNzYyLDkgQEAKICAgKiAgICAgICAgIGtleSBzaXplIGFyZSByZXNwZWN0aXZlbHkgc3RvcmVkIGluIGhoYXNoLT5Jbml0LnBLZXkgYW5kIGhoYXNoLT5Jbml0LktleVNpemUuCiAgICogQG5vdGUgICBUaGUgaW5wdXQgYnVmZmVyIHNpemUgKGluIGJ5dGVzKSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNCBvdGhlcndpc2UsIHRoZQogICAqICAgICAgICAgSEFTSCBkaWdlc3QgY29tcHV0YXRpb24gaXMgY29ycnVwdGVkLgotICAqIEBwYXJhbSAgaGhhc2g6IEhBU0ggaGFuZGxlLgotICAqIEBwYXJhbSAgcEluQnVmZmVyOiBwb2ludGVyIHRvIHRoZSBpbnB1dCBidWZmZXIgKG1lc3NhZ2UgYnVmZmVyKS4KLSAgKiBAcGFyYW0gIFNpemU6IGxlbmd0aCBvZiB0aGUgaW5wdXQgYnVmZmVyIGluIGJ5dGVzLgorICAqIEBwYXJhbSAgaGhhc2ggSEFTSCBoYW5kbGUuCisgICogQHBhcmFtICBwSW5CdWZmZXIgcG9pbnRlciB0byB0aGUgaW5wdXQgYnVmZmVyIChtZXNzYWdlIGJ1ZmZlcikuCisgICogQHBhcmFtICBTaXplIGxlbmd0aCBvZiB0aGUgaW5wdXQgYnVmZmVyIGluIGJ5dGVzLgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0hNQUNFeF9NRDVfU3RlcDJfRE1BKEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gsIHVpbnQ4X3QgKnBJbkJ1ZmZlciwgdWludDMyX3QgU2l6ZSkKQEAgLTY2NCw3ICs3NzgsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIE1ENSBITUFDIHN0ZXAgMiB3cmFwLXVwIGFuZCBzdGVwIDMgY29tcGxldGlvbiBpbiBtdWx0aS1idWZmZXIgRE1BIG1vZGUuCi0gICogQG5vdGUgICBTdGVwIDIgY29uc2lzdHMgaW4gd3JpdGluZyB0aGUgbWVzc2FnZSB0ZXh0IGluIHRoZSBJUCwKKyAgKiBAbm90ZSAgIFN0ZXAgMiBjb25zaXN0cyBpbiB3cml0aW5nIHRoZSBtZXNzYWdlIHRleHQgaW4gdGhlIFBlcmlwaGVyYWwsCiAgICogICAgICAgICBzdGVwIDMgY29uc2lzdHMgaW4gd3JpdGluZyB0aGUgb3V0ZXIgaGFzaCBmdW5jdGlvbiBrZXkuCiAgICogQG5vdGUgICBUaGUgQVBJIHdyYXBzIHVwIHRoZSBITUFDIHN0ZXAgMiBpbiBwcm9jZXNzaW5nIHRoZSBidWZmZXIgZW50ZXJlZCBhcyBpbnB1dAogICAqICAgICAgICAgcGFyYW1ldGVyICh0aGUgaW5wdXQgYnVmZmVyIG11c3QgYmUgdGhlIGxhc3Qgb25lIG9mIHRoZSBtdWx0aS1idWZmZXIgdGhyZWFkKQpAQCAtNjc0LDkgKzc4OCw5IEBACiAgICogQG5vdGUgICBPbmNlIHRoZSBETUEgdHJhbnNmZXJzIGFyZSBmaW5pc2hlZCAoaW5kaWNhdGVkIGJ5IGhoYXNoLT5TdGF0ZSBzZXQgYmFjawogICAqICAgICAgICAgdG8gSEFMX0hBU0hfU1RBVEVfUkVBRFkpLCBIQUxfSEFTSEV4X1NIQTI1Nl9GaW5pc2goKSBBUEkgbXVzdCBiZSBjYWxsZWQgdG8gcmV0cmlldmUKICAgKiAgICAgICAgIHRoZSBjb21wdXRlZCBkaWdlc3QuCi0gICogQHBhcmFtICBoaGFzaDogSEFTSCBoYW5kbGUuCi0gICogQHBhcmFtICBwSW5CdWZmZXI6IHBvaW50ZXIgdG8gdGhlIGlucHV0IGJ1ZmZlciAobWVzc2FnZSBidWZmZXIpLgotICAqIEBwYXJhbSAgU2l6ZTogbGVuZ3RoIG9mIHRoZSBpbnB1dCBidWZmZXIgaW4gYnl0ZXMuCisgICogQHBhcmFtICBoaGFzaCBIQVNIIGhhbmRsZS4KKyAgKiBAcGFyYW0gIHBJbkJ1ZmZlciBwb2ludGVyIHRvIHRoZSBpbnB1dCBidWZmZXIgKG1lc3NhZ2UgYnVmZmVyKS4KKyAgKiBAcGFyYW0gIFNpemUgbGVuZ3RoIG9mIHRoZSBpbnB1dCBidWZmZXIgaW4gYnl0ZXMuCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfSE1BQ0V4X01ENV9TdGVwMl8zX0RNQShIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoLCB1aW50OF90ICpwSW5CdWZmZXIsIHVpbnQzMl90IFNpemUpCkBAIC02ODgsMTggKzgwMiwxOCBAQAogCiAvKioKICAgKiBAYnJpZWYgIFNIQTEgSE1BQyBzdGVwIDEgY29tcGxldGlvbiBhbmQgc3RlcCAyIHN0YXJ0IGluIG11bHRpLWJ1ZmZlciBETUEgbW9kZS4KLSAgKiBAbm90ZSAgIFN0ZXAgMSBjb25zaXN0cyBpbiB3cml0aW5nIHRoZSBpbm5lciBoYXNoIGZ1bmN0aW9uIGtleSBpbiB0aGUgSVAsCisgICogQG5vdGUgICBTdGVwIDEgY29uc2lzdHMgaW4gd3JpdGluZyB0aGUgaW5uZXIgaGFzaCBmdW5jdGlvbiBrZXkgaW4gdGhlIFBlcmlwaGVyYWwsCiAgICogICAgICAgICBzdGVwIDIgY29uc2lzdHMgaW4gd3JpdGluZyB0aGUgbWVzc2FnZSB0ZXh0LgogICAqIEBub3RlICAgVGhlIEFQSSBjYXJyaWVzIG91dCB0aGUgSE1BQyBzdGVwIDEgdGhlbiBzdGFydHMgc3RlcCAyIHdpdGgKLSAgKiAgICAgICAgIHRoZSBmaXJzdCBidWZmZXIgZW50ZXJlZCB0byB0aGUgSVAuIERDQUwgYml0IGlzIG5vdCBhdXRvbWF0aWNhbGx5IHNldCBhZnRlcgorICAqICAgICAgICAgdGhlIGZpcnN0IGJ1ZmZlciBlbnRlcmVkIHRvIHRoZSBQZXJpcGhlcmFsLiBEQ0FMIGJpdCBpcyBub3QgYXV0b21hdGljYWxseSBzZXQgYWZ0ZXIKICAgKiAgICAgICAgIHRoZSBtZXNzYWdlIGJ1ZmZlciBmZWVkaW5nLCBhbGxvd2luZyBvdGhlciBtZXNzYWdlcyBETUEgdHJhbnNmZXJzIHRvIG9jY3VyLgogICAqIEBub3RlICAgU2FtZSBrZXkgaXMgdXNlZCBmb3IgdGhlIGlubmVyIGFuZCB0aGUgb3V0ZXIgaGFzaCBmdW5jdGlvbnM7IHBvaW50ZXIgdG8ga2V5IGFuZAogICAqICAgICAgICAga2V5IHNpemUgYXJlIHJlc3BlY3RpdmVseSBzdG9yZWQgaW4gaGhhc2gtPkluaXQucEtleSBhbmQgaGhhc2gtPkluaXQuS2V5U2l6ZS4KICAgKiBAbm90ZSAgIFRoZSBpbnB1dCBidWZmZXIgc2l6ZSAoaW4gYnl0ZXMpIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0IG90aGVyd2lzZSwgdGhlCiAgICogICAgICAgICBIQVNIIGRpZ2VzdCBjb21wdXRhdGlvbiBpcyBjb3JydXB0ZWQuCi0gICogQHBhcmFtICBoaGFzaDogSEFTSCBoYW5kbGUuCi0gICogQHBhcmFtICBwSW5CdWZmZXI6IHBvaW50ZXIgdG8gdGhlIGlucHV0IGJ1ZmZlciAobWVzc2FnZSBidWZmZXIpLgotICAqIEBwYXJhbSAgU2l6ZTogbGVuZ3RoIG9mIHRoZSBpbnB1dCBidWZmZXIgaW4gYnl0ZXMuCisgICogQHBhcmFtICBoaGFzaCBIQVNIIGhhbmRsZS4KKyAgKiBAcGFyYW0gIHBJbkJ1ZmZlciBwb2ludGVyIHRvIHRoZSBpbnB1dCBidWZmZXIgKG1lc3NhZ2UgYnVmZmVyKS4KKyAgKiBAcGFyYW0gIFNpemUgbGVuZ3RoIG9mIHRoZSBpbnB1dCBidWZmZXIgaW4gYnl0ZXMuCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfSE1BQ0V4X1NIQTFfU3RlcDFfMl9ETUEoSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCwgdWludDhfdCAqcEluQnVmZmVyLCB1aW50MzJfdCBTaXplKQpAQCAtNzEwLDcgKzgyNCw3IEBACiAKIC8qKgogICAqIEBicmllZiAgU0hBMSBITUFDIHN0ZXAgMiBpbiBtdWx0aS1idWZmZXIgRE1BIG1vZGUuCi0gICogQG5vdGUgICBTdGVwIDIgY29uc2lzdHMgaW4gd3JpdGluZyB0aGUgbWVzc2FnZSB0ZXh0IGluIHRoZSBJUC4KKyAgKiBAbm90ZSAgIFN0ZXAgMiBjb25zaXN0cyBpbiB3cml0aW5nIHRoZSBtZXNzYWdlIHRleHQgaW4gdGhlIFBlcmlwaGVyYWwuCiAgICogQG5vdGUgICBUaGUgQVBJIGNhcnJpZXMgb24gdGhlIEhNQUMgc3RlcCAyLCBhcHBsaWVkIHRvIHRoZSBidWZmZXIgZW50ZXJlZCBhcyBpbnB1dAogICAqICAgICAgICAgcGFyYW1ldGVyLiBEQ0FMIGJpdCBpcyBub3QgYXV0b21hdGljYWxseSBzZXQgYWZ0ZXIgdGhlIG1lc3NhZ2UgYnVmZmVyIGZlZWRpbmcsCiAgICogICAgICAgICBhbGxvd2luZyBvdGhlciBtZXNzYWdlcyBETUEgdHJhbnNmZXJzIHRvIG9jY3VyLgpAQCAtNzE4LDkgKzgzMiw5IEBACiAgICogICAgICAgICBrZXkgc2l6ZSBhcmUgcmVzcGVjdGl2ZWx5IHN0b3JlZCBpbiBoaGFzaC0+SW5pdC5wS2V5IGFuZCBoaGFzaC0+SW5pdC5LZXlTaXplLgogICAqIEBub3RlICAgVGhlIGlucHV0IGJ1ZmZlciBzaXplIChpbiBieXRlcykgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQgb3RoZXJ3aXNlLCB0aGUKICAgKiAgICAgICAgIEhBU0ggZGlnZXN0IGNvbXB1dGF0aW9uIGlzIGNvcnJ1cHRlZC4KLSAgKiBAcGFyYW0gIGhoYXNoOiBIQVNIIGhhbmRsZS4KLSAgKiBAcGFyYW0gIHBJbkJ1ZmZlcjogcG9pbnRlciB0byB0aGUgaW5wdXQgYnVmZmVyIChtZXNzYWdlIGJ1ZmZlcikuCi0gICogQHBhcmFtICBTaXplOiBsZW5ndGggb2YgdGhlIGlucHV0IGJ1ZmZlciBpbiBieXRlcy4KKyAgKiBAcGFyYW0gIGhoYXNoIEhBU0ggaGFuZGxlLgorICAqIEBwYXJhbSAgcEluQnVmZmVyIHBvaW50ZXIgdG8gdGhlIGlucHV0IGJ1ZmZlciAobWVzc2FnZSBidWZmZXIpLgorICAqIEBwYXJhbSAgU2l6ZSBsZW5ndGggb2YgdGhlIGlucHV0IGJ1ZmZlciBpbiBieXRlcy4KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9ITUFDRXhfU0hBMV9TdGVwMl9ETUEoSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCwgdWludDhfdCAqcEluQnVmZmVyLCB1aW50MzJfdCBTaXplKQpAQCAtNzM0LDcgKzg0OCw3IEBACiAKIC8qKgogICAqIEBicmllZiAgU0hBMSBITUFDIHN0ZXAgMiB3cmFwLXVwIGFuZCBzdGVwIDMgY29tcGxldGlvbiBpbiBtdWx0aS1idWZmZXIgRE1BIG1vZGUuCi0gICogQG5vdGUgICBTdGVwIDIgY29uc2lzdHMgaW4gd3JpdGluZyB0aGUgbWVzc2FnZSB0ZXh0IGluIHRoZSBJUCwKKyAgKiBAbm90ZSAgIFN0ZXAgMiBjb25zaXN0cyBpbiB3cml0aW5nIHRoZSBtZXNzYWdlIHRleHQgaW4gdGhlIFBlcmlwaGVyYWwsCiAgICogICAgICAgICBzdGVwIDMgY29uc2lzdHMgaW4gd3JpdGluZyB0aGUgb3V0ZXIgaGFzaCBmdW5jdGlvbiBrZXkuCiAgICogQG5vdGUgICBUaGUgQVBJIHdyYXBzIHVwIHRoZSBITUFDIHN0ZXAgMiBpbiBwcm9jZXNzaW5nIHRoZSBidWZmZXIgZW50ZXJlZCBhcyBpbnB1dAogICAqICAgICAgICAgcGFyYW1ldGVyICh0aGUgaW5wdXQgYnVmZmVyIG11c3QgYmUgdGhlIGxhc3Qgb25lIG9mIHRoZSBtdWx0aS1idWZmZXIgdGhyZWFkKQpAQCAtNzQ0LDkgKzg1OCw5IEBACiAgICogQG5vdGUgICBPbmNlIHRoZSBETUEgdHJhbnNmZXJzIGFyZSBmaW5pc2hlZCAoaW5kaWNhdGVkIGJ5IGhoYXNoLT5TdGF0ZSBzZXQgYmFjawogICAqICAgICAgICAgdG8gSEFMX0hBU0hfU1RBVEVfUkVBRFkpLCBIQUxfSEFTSEV4X1NIQTI1Nl9GaW5pc2goKSBBUEkgbXVzdCBiZSBjYWxsZWQgdG8gcmV0cmlldmUKICAgKiAgICAgICAgIHRoZSBjb21wdXRlZCBkaWdlc3QuCi0gICogQHBhcmFtICBoaGFzaDogSEFTSCBoYW5kbGUuCi0gICogQHBhcmFtICBwSW5CdWZmZXI6IHBvaW50ZXIgdG8gdGhlIGlucHV0IGJ1ZmZlciAobWVzc2FnZSBidWZmZXIpLgotICAqIEBwYXJhbSAgU2l6ZTogbGVuZ3RoIG9mIHRoZSBpbnB1dCBidWZmZXIgaW4gYnl0ZXMuCisgICogQHBhcmFtICBoaGFzaCBIQVNIIGhhbmRsZS4KKyAgKiBAcGFyYW0gIHBJbkJ1ZmZlciBwb2ludGVyIHRvIHRoZSBpbnB1dCBidWZmZXIgKG1lc3NhZ2UgYnVmZmVyKS4KKyAgKiBAcGFyYW0gIFNpemUgbGVuZ3RoIG9mIHRoZSBpbnB1dCBidWZmZXIgaW4gYnl0ZXMuCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfSE1BQ0V4X1NIQTFfU3RlcDJfM19ETUEoSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCwgdWludDhfdCAqcEluQnVmZmVyLCB1aW50MzJfdCBTaXplKQpAQCAtNzU3LDE4ICs4NzEsMTggQEAKIAogLyoqCiAgICogQGJyaWVmICBTSEEyMjQgSE1BQyBzdGVwIDEgY29tcGxldGlvbiBhbmQgc3RlcCAyIHN0YXJ0IGluIG11bHRpLWJ1ZmZlciBETUEgbW9kZS4KLSAgKiBAbm90ZSAgIFN0ZXAgMSBjb25zaXN0cyBpbiB3cml0aW5nIHRoZSBpbm5lciBoYXNoIGZ1bmN0aW9uIGtleSBpbiB0aGUgSVAsCisgICogQG5vdGUgICBTdGVwIDEgY29uc2lzdHMgaW4gd3JpdGluZyB0aGUgaW5uZXIgaGFzaCBmdW5jdGlvbiBrZXkgaW4gdGhlIFBlcmlwaGVyYWwsCiAgICogICAgICAgICBzdGVwIDIgY29uc2lzdHMgaW4gd3JpdGluZyB0aGUgbWVzc2FnZSB0ZXh0LgogICAqIEBub3RlICAgVGhlIEFQSSBjYXJyaWVzIG91dCB0aGUgSE1BQyBzdGVwIDEgdGhlbiBzdGFydHMgc3RlcCAyIHdpdGgKLSAgKiAgICAgICAgIHRoZSBmaXJzdCBidWZmZXIgZW50ZXJlZCB0byB0aGUgSVAuIERDQUwgYml0IGlzIG5vdCBhdXRvbWF0aWNhbGx5IHNldCBhZnRlcgorICAqICAgICAgICAgdGhlIGZpcnN0IGJ1ZmZlciBlbnRlcmVkIHRvIHRoZSBQZXJpcGhlcmFsLiBEQ0FMIGJpdCBpcyBub3QgYXV0b21hdGljYWxseSBzZXQgYWZ0ZXIKICAgKiAgICAgICAgIHRoZSBtZXNzYWdlIGJ1ZmZlciBmZWVkaW5nLCBhbGxvd2luZyBvdGhlciBtZXNzYWdlcyBETUEgdHJhbnNmZXJzIHRvIG9jY3VyLgogICAqIEBub3RlICAgU2FtZSBrZXkgaXMgdXNlZCBmb3IgdGhlIGlubmVyIGFuZCB0aGUgb3V0ZXIgaGFzaCBmdW5jdGlvbnM7IHBvaW50ZXIgdG8ga2V5IGFuZAogICAqICAgICAgICAga2V5IHNpemUgYXJlIHJlc3BlY3RpdmVseSBzdG9yZWQgaW4gaGhhc2gtPkluaXQucEtleSBhbmQgaGhhc2gtPkluaXQuS2V5U2l6ZS4KICAgKiBAbm90ZSAgIFRoZSBpbnB1dCBidWZmZXIgc2l6ZSAoaW4gYnl0ZXMpIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0IG90aGVyd2lzZSwgdGhlCiAgICogICAgICAgICBIQVNIIGRpZ2VzdCBjb21wdXRhdGlvbiBpcyBjb3JydXB0ZWQuCi0gICogQHBhcmFtICBoaGFzaDogSEFTSCBoYW5kbGUuCi0gICogQHBhcmFtICBwSW5CdWZmZXI6IHBvaW50ZXIgdG8gdGhlIGlucHV0IGJ1ZmZlciAobWVzc2FnZSBidWZmZXIpLgotICAqIEBwYXJhbSAgU2l6ZTogbGVuZ3RoIG9mIHRoZSBpbnB1dCBidWZmZXIgaW4gYnl0ZXMuCisgICogQHBhcmFtICBoaGFzaCBIQVNIIGhhbmRsZS4KKyAgKiBAcGFyYW0gIHBJbkJ1ZmZlciBwb2ludGVyIHRvIHRoZSBpbnB1dCBidWZmZXIgKG1lc3NhZ2UgYnVmZmVyKS4KKyAgKiBAcGFyYW0gIFNpemUgbGVuZ3RoIG9mIHRoZSBpbnB1dCBidWZmZXIgaW4gYnl0ZXMuCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfSE1BQ0V4X1NIQTIyNF9TdGVwMV8yX0RNQShIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoLCB1aW50OF90ICpwSW5CdWZmZXIsIHVpbnQzMl90IFNpemUpCkBAIC03NzksNyArODkzLDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBTSEEyMjQgSE1BQyBzdGVwIDIgaW4gbXVsdGktYnVmZmVyIERNQSBtb2RlLgotICAqIEBub3RlICAgU3RlcCAyIGNvbnNpc3RzIGluIHdyaXRpbmcgdGhlIG1lc3NhZ2UgdGV4dCBpbiB0aGUgSVAuCisgICogQG5vdGUgICBTdGVwIDIgY29uc2lzdHMgaW4gd3JpdGluZyB0aGUgbWVzc2FnZSB0ZXh0IGluIHRoZSBQZXJpcGhlcmFsLgogICAqIEBub3RlICAgVGhlIEFQSSBjYXJyaWVzIG9uIHRoZSBITUFDIHN0ZXAgMiwgYXBwbGllZCB0byB0aGUgYnVmZmVyIGVudGVyZWQgYXMgaW5wdXQKICAgKiAgICAgICAgIHBhcmFtZXRlci4gRENBTCBiaXQgaXMgbm90IGF1dG9tYXRpY2FsbHkgc2V0IGFmdGVyIHRoZSBtZXNzYWdlIGJ1ZmZlciBmZWVkaW5nLAogICAqICAgICAgICAgYWxsb3dpbmcgb3RoZXIgbWVzc2FnZXMgRE1BIHRyYW5zZmVycyB0byBvY2N1ci4KQEAgLTc4Nyw5ICs5MDEsOSBAQAogICAqICAgICAgICAga2V5IHNpemUgYXJlIHJlc3BlY3RpdmVseSBzdG9yZWQgaW4gaGhhc2gtPkluaXQucEtleSBhbmQgaGhhc2gtPkluaXQuS2V5U2l6ZS4KICAgKiBAbm90ZSAgIFRoZSBpbnB1dCBidWZmZXIgc2l6ZSAoaW4gYnl0ZXMpIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0IG90aGVyd2lzZSwgdGhlCiAgICogICAgICAgICBIQVNIIGRpZ2VzdCBjb21wdXRhdGlvbiBpcyBjb3JydXB0ZWQuCi0gICogQHBhcmFtICBoaGFzaDogSEFTSCBoYW5kbGUuCi0gICogQHBhcmFtICBwSW5CdWZmZXI6IHBvaW50ZXIgdG8gdGhlIGlucHV0IGJ1ZmZlciAobWVzc2FnZSBidWZmZXIpLgotICAqIEBwYXJhbSAgU2l6ZTogbGVuZ3RoIG9mIHRoZSBpbnB1dCBidWZmZXIgaW4gYnl0ZXMuCisgICogQHBhcmFtICBoaGFzaCBIQVNIIGhhbmRsZS4KKyAgKiBAcGFyYW0gIHBJbkJ1ZmZlciBwb2ludGVyIHRvIHRoZSBpbnB1dCBidWZmZXIgKG1lc3NhZ2UgYnVmZmVyKS4KKyAgKiBAcGFyYW0gIFNpemUgbGVuZ3RoIG9mIHRoZSBpbnB1dCBidWZmZXIgaW4gYnl0ZXMuCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfSE1BQ0V4X1NIQTIyNF9TdGVwMl9ETUEoSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCwgdWludDhfdCAqcEluQnVmZmVyLCB1aW50MzJfdCBTaXplKQpAQCAtODAzLDcgKzkxNyw3IEBACiAKIC8qKgogICAqIEBicmllZiAgU0hBMjI0IEhNQUMgc3RlcCAyIHdyYXAtdXAgYW5kIHN0ZXAgMyBjb21wbGV0aW9uIGluIG11bHRpLWJ1ZmZlciBETUEgbW9kZS4KLSAgKiBAbm90ZSAgIFN0ZXAgMiBjb25zaXN0cyBpbiB3cml0aW5nIHRoZSBtZXNzYWdlIHRleHQgaW4gdGhlIElQLAorICAqIEBub3RlICAgU3RlcCAyIGNvbnNpc3RzIGluIHdyaXRpbmcgdGhlIG1lc3NhZ2UgdGV4dCBpbiB0aGUgUGVyaXBoZXJhbCwKICAgKiAgICAgICAgIHN0ZXAgMyBjb25zaXN0cyBpbiB3cml0aW5nIHRoZSBvdXRlciBoYXNoIGZ1bmN0aW9uIGtleS4KICAgKiBAbm90ZSAgIFRoZSBBUEkgd3JhcHMgdXAgdGhlIEhNQUMgc3RlcCAyIGluIHByb2Nlc3NpbmcgdGhlIGJ1ZmZlciBlbnRlcmVkIGFzIGlucHV0CiAgICogICAgICAgICBwYXJhbWV0ZXIgKHRoZSBpbnB1dCBidWZmZXIgbXVzdCBiZSB0aGUgbGFzdCBvbmUgb2YgdGhlIG11bHRpLWJ1ZmZlciB0aHJlYWQpCkBAIC04MTMsOSArOTI3LDkgQEAKICAgKiBAbm90ZSAgIE9uY2UgdGhlIERNQSB0cmFuc2ZlcnMgYXJlIGZpbmlzaGVkIChpbmRpY2F0ZWQgYnkgaGhhc2gtPlN0YXRlIHNldCBiYWNrCiAgICogICAgICAgICB0byBIQUxfSEFTSF9TVEFURV9SRUFEWSksIEhBTF9IQVNIRXhfU0hBMjU2X0ZpbmlzaCgpIEFQSSBtdXN0IGJlIGNhbGxlZCB0byByZXRyaWV2ZQogICAqICAgICAgICAgdGhlIGNvbXB1dGVkIGRpZ2VzdC4KLSAgKiBAcGFyYW0gIGhoYXNoOiBIQVNIIGhhbmRsZS4KLSAgKiBAcGFyYW0gIHBJbkJ1ZmZlcjogcG9pbnRlciB0byB0aGUgaW5wdXQgYnVmZmVyIChtZXNzYWdlIGJ1ZmZlcikuCi0gICogQHBhcmFtICBTaXplOiBsZW5ndGggb2YgdGhlIGlucHV0IGJ1ZmZlciBpbiBieXRlcy4KKyAgKiBAcGFyYW0gIGhoYXNoIEhBU0ggaGFuZGxlLgorICAqIEBwYXJhbSAgcEluQnVmZmVyIHBvaW50ZXIgdG8gdGhlIGlucHV0IGJ1ZmZlciAobWVzc2FnZSBidWZmZXIpLgorICAqIEBwYXJhbSAgU2l6ZSBsZW5ndGggb2YgdGhlIGlucHV0IGJ1ZmZlciBpbiBieXRlcy4KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9ITUFDRXhfU0hBMjI0X1N0ZXAyXzNfRE1BKEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gsIHVpbnQ4X3QgKnBJbkJ1ZmZlciwgdWludDMyX3QgU2l6ZSkKQEAgLTgyNiwxOCArOTQwLDE4IEBACiAKIC8qKgogICAqIEBicmllZiAgU0hBMjU2IEhNQUMgc3RlcCAxIGNvbXBsZXRpb24gYW5kIHN0ZXAgMiBzdGFydCBpbiBtdWx0aS1idWZmZXIgRE1BIG1vZGUuCi0gICogQG5vdGUgICBTdGVwIDEgY29uc2lzdHMgaW4gd3JpdGluZyB0aGUgaW5uZXIgaGFzaCBmdW5jdGlvbiBrZXkgaW4gdGhlIElQLAorICAqIEBub3RlICAgU3RlcCAxIGNvbnNpc3RzIGluIHdyaXRpbmcgdGhlIGlubmVyIGhhc2ggZnVuY3Rpb24ga2V5IGluIHRoZSBQZXJpcGhlcmFsLAogICAqICAgICAgICAgc3RlcCAyIGNvbnNpc3RzIGluIHdyaXRpbmcgdGhlIG1lc3NhZ2UgdGV4dC4KICAgKiBAbm90ZSAgIFRoZSBBUEkgY2FycmllcyBvdXQgdGhlIEhNQUMgc3RlcCAxIHRoZW4gc3RhcnRzIHN0ZXAgMiB3aXRoCi0gICogICAgICAgICB0aGUgZmlyc3QgYnVmZmVyIGVudGVyZWQgdG8gdGhlIElQLiBEQ0FMIGJpdCBpcyBub3QgYXV0b21hdGljYWxseSBzZXQgYWZ0ZXIKKyAgKiAgICAgICAgIHRoZSBmaXJzdCBidWZmZXIgZW50ZXJlZCB0byB0aGUgUGVyaXBoZXJhbC4gRENBTCBiaXQgaXMgbm90IGF1dG9tYXRpY2FsbHkgc2V0IGFmdGVyCiAgICogICAgICAgICB0aGUgbWVzc2FnZSBidWZmZXIgZmVlZGluZywgYWxsb3dpbmcgb3RoZXIgbWVzc2FnZXMgRE1BIHRyYW5zZmVycyB0byBvY2N1ci4KICAgKiBAbm90ZSAgIFNhbWUga2V5IGlzIHVzZWQgZm9yIHRoZSBpbm5lciBhbmQgdGhlIG91dGVyIGhhc2ggZnVuY3Rpb25zOyBwb2ludGVyIHRvIGtleSBhbmQKICAgKiAgICAgICAgIGtleSBzaXplIGFyZSByZXNwZWN0aXZlbHkgc3RvcmVkIGluIGhoYXNoLT5Jbml0LnBLZXkgYW5kIGhoYXNoLT5Jbml0LktleVNpemUuCiAgICogQG5vdGUgICBUaGUgaW5wdXQgYnVmZmVyIHNpemUgKGluIGJ5dGVzKSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNCBvdGhlcndpc2UsIHRoZQogICAqICAgICAgICAgSEFTSCBkaWdlc3QgY29tcHV0YXRpb24gaXMgY29ycnVwdGVkLgotICAqIEBwYXJhbSAgaGhhc2g6IEhBU0ggaGFuZGxlLgotICAqIEBwYXJhbSAgcEluQnVmZmVyOiBwb2ludGVyIHRvIHRoZSBpbnB1dCBidWZmZXIgKG1lc3NhZ2UgYnVmZmVyKS4KLSAgKiBAcGFyYW0gIFNpemU6IGxlbmd0aCBvZiB0aGUgaW5wdXQgYnVmZmVyIGluIGJ5dGVzLgorICAqIEBwYXJhbSAgaGhhc2ggSEFTSCBoYW5kbGUuCisgICogQHBhcmFtICBwSW5CdWZmZXIgcG9pbnRlciB0byB0aGUgaW5wdXQgYnVmZmVyIChtZXNzYWdlIGJ1ZmZlcikuCisgICogQHBhcmFtICBTaXplIGxlbmd0aCBvZiB0aGUgaW5wdXQgYnVmZmVyIGluIGJ5dGVzLgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0hNQUNFeF9TSEEyNTZfU3RlcDFfMl9ETUEoSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCwgdWludDhfdCAqcEluQnVmZmVyLCB1aW50MzJfdCBTaXplKQpAQCAtODQ4LDcgKzk2Miw3IEBACiAKIC8qKgogICAqIEBicmllZiAgU0hBMjU2IEhNQUMgc3RlcCAyIGluIG11bHRpLWJ1ZmZlciBETUEgbW9kZS4KLSAgKiBAbm90ZSAgIFN0ZXAgMiBjb25zaXN0cyBpbiB3cml0aW5nIHRoZSBtZXNzYWdlIHRleHQgaW4gdGhlIElQLgorICAqIEBub3RlICAgU3RlcCAyIGNvbnNpc3RzIGluIHdyaXRpbmcgdGhlIG1lc3NhZ2UgdGV4dCBpbiB0aGUgUGVyaXBoZXJhbC4KICAgKiBAbm90ZSAgIFRoZSBBUEkgY2FycmllcyBvbiB0aGUgSE1BQyBzdGVwIDIsIGFwcGxpZWQgdG8gdGhlIGJ1ZmZlciBlbnRlcmVkIGFzIGlucHV0CiAgICogICAgICAgICBwYXJhbWV0ZXIuIERDQUwgYml0IGlzIG5vdCBhdXRvbWF0aWNhbGx5IHNldCBhZnRlciB0aGUgbWVzc2FnZSBidWZmZXIgZmVlZGluZywKICAgKiAgICAgICAgIGFsbG93aW5nIG90aGVyIG1lc3NhZ2VzIERNQSB0cmFuc2ZlcnMgdG8gb2NjdXIuCkBAIC04NTYsOSArOTcwLDkgQEAKICAgKiAgICAgICAgIGtleSBzaXplIGFyZSByZXNwZWN0aXZlbHkgc3RvcmVkIGluIGhoYXNoLT5Jbml0LnBLZXkgYW5kIGhoYXNoLT5Jbml0LktleVNpemUuCiAgICogQG5vdGUgICBUaGUgaW5wdXQgYnVmZmVyIHNpemUgKGluIGJ5dGVzKSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNCBvdGhlcndpc2UsIHRoZQogICAqICAgICAgICAgSEFTSCBkaWdlc3QgY29tcHV0YXRpb24gaXMgY29ycnVwdGVkLgotICAqIEBwYXJhbSAgaGhhc2g6IEhBU0ggaGFuZGxlLgotICAqIEBwYXJhbSAgcEluQnVmZmVyOiBwb2ludGVyIHRvIHRoZSBpbnB1dCBidWZmZXIgKG1lc3NhZ2UgYnVmZmVyKS4KLSAgKiBAcGFyYW0gIFNpemU6IGxlbmd0aCBvZiB0aGUgaW5wdXQgYnVmZmVyIGluIGJ5dGVzLgorICAqIEBwYXJhbSAgaGhhc2ggSEFTSCBoYW5kbGUuCisgICogQHBhcmFtICBwSW5CdWZmZXIgcG9pbnRlciB0byB0aGUgaW5wdXQgYnVmZmVyIChtZXNzYWdlIGJ1ZmZlcikuCisgICogQHBhcmFtICBTaXplIGxlbmd0aCBvZiB0aGUgaW5wdXQgYnVmZmVyIGluIGJ5dGVzLgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0hNQUNFeF9TSEEyNTZfU3RlcDJfRE1BKEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gsIHVpbnQ4X3QgKnBJbkJ1ZmZlciwgdWludDMyX3QgU2l6ZSkKQEAgLTg3Miw3ICs5ODYsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIFNIQTI1NiBITUFDIHN0ZXAgMiB3cmFwLXVwIGFuZCBzdGVwIDMgY29tcGxldGlvbiBpbiBtdWx0aS1idWZmZXIgRE1BIG1vZGUuCi0gICogQG5vdGUgICBTdGVwIDIgY29uc2lzdHMgaW4gd3JpdGluZyB0aGUgbWVzc2FnZSB0ZXh0IGluIHRoZSBJUCwKKyAgKiBAbm90ZSAgIFN0ZXAgMiBjb25zaXN0cyBpbiB3cml0aW5nIHRoZSBtZXNzYWdlIHRleHQgaW4gdGhlIFBlcmlwaGVyYWwsCiAgICogICAgICAgICBzdGVwIDMgY29uc2lzdHMgaW4gd3JpdGluZyB0aGUgb3V0ZXIgaGFzaCBmdW5jdGlvbiBrZXkuCiAgICogQG5vdGUgICBUaGUgQVBJIHdyYXBzIHVwIHRoZSBITUFDIHN0ZXAgMiBpbiBwcm9jZXNzaW5nIHRoZSBidWZmZXIgZW50ZXJlZCBhcyBpbnB1dAogICAqICAgICAgICAgcGFyYW1ldGVyICh0aGUgaW5wdXQgYnVmZmVyIG11c3QgYmUgdGhlIGxhc3Qgb25lIG9mIHRoZSBtdWx0aS1idWZmZXIgdGhyZWFkKQpAQCAtODgyLDkgKzk5Niw5IEBACiAgICogQG5vdGUgICBPbmNlIHRoZSBETUEgdHJhbnNmZXJzIGFyZSBmaW5pc2hlZCAoaW5kaWNhdGVkIGJ5IGhoYXNoLT5TdGF0ZSBzZXQgYmFjawogICAqICAgICAgICAgdG8gSEFMX0hBU0hfU1RBVEVfUkVBRFkpLCBIQUxfSEFTSEV4X1NIQTI1Nl9GaW5pc2goKSBBUEkgbXVzdCBiZSBjYWxsZWQgdG8gcmV0cmlldmUKICAgKiAgICAgICAgIHRoZSBjb21wdXRlZCBkaWdlc3QuCi0gICogQHBhcmFtICBoaGFzaDogSEFTSCBoYW5kbGUuCi0gICogQHBhcmFtICBwSW5CdWZmZXI6IHBvaW50ZXIgdG8gdGhlIGlucHV0IGJ1ZmZlciAobWVzc2FnZSBidWZmZXIpLgotICAqIEBwYXJhbSAgU2l6ZTogbGVuZ3RoIG9mIHRoZSBpbnB1dCBidWZmZXIgaW4gYnl0ZXMuCisgICogQHBhcmFtICBoaGFzaCBIQVNIIGhhbmRsZS4KKyAgKiBAcGFyYW0gIHBJbkJ1ZmZlciBwb2ludGVyIHRvIHRoZSBpbnB1dCBidWZmZXIgKG1lc3NhZ2UgYnVmZmVyKS4KKyAgKiBAcGFyYW0gIFNpemUgbGVuZ3RoIG9mIHRoZSBpbnB1dCBidWZmZXIgaW4gYnl0ZXMuCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfSE1BQ0V4X1NIQTI1Nl9TdGVwMl8zX0RNQShIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoLCB1aW50OF90ICpwSW5CdWZmZXIsIHVpbnQzMl90IFNpemUpCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmNHh4X2hhbF9pMmMuYyBiL1NyYy9zdG0zMmY0eHhfaGFsX2kyYy5jCmluZGV4IDM4ZDU1NWMuLjgxYmI1YzcgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmY0eHhfaGFsX2kyYy5jCisrKyBiL1NyYy9zdG0zMmY0eHhfaGFsX2kyYy5jCkBAIC0yMTUsMTIgKzIxNSwxMiBAQAogCiAgICAgICoqKiBDYWxsYmFjayByZWdpc3RyYXRpb24gKioqCiAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCisgICAgWy4uXQogICAgICBUaGUgY29tcGlsYXRpb24gZmxhZyBVU0VfSEFMX0kyQ19SRUdJU1RFUl9DQUxMQkFDS1Mgd2hlbiBzZXQgdG8gMQogICAgICBhbGxvd3MgdGhlIHVzZXIgdG8gY29uZmlndXJlIGR5bmFtaWNhbGx5IHRoZSBkcml2ZXIgY2FsbGJhY2tzLgogICAgICBVc2UgRnVuY3Rpb25zIEByZWYgSEFMX0kyQ19SZWdpc3RlckNhbGxiYWNrKCkgb3IgQHJlZiBIQUxfSTJDX1JlZ2lzdGVyQWRkckNhbGxiYWNrKCkKICAgICAgdG8gcmVnaXN0ZXIgYW4gaW50ZXJydXB0IGNhbGxiYWNrLgotCisgICAgWy4uXQogICAgICBGdW5jdGlvbiBAcmVmIEhBTF9JMkNfUmVnaXN0ZXJDYWxsYmFjaygpIGFsbG93cyB0byByZWdpc3RlciBmb2xsb3dpbmcgY2FsbGJhY2tzOgogICAgICAgICgrKSBNYXN0ZXJUeENwbHRDYWxsYmFjayA6IGNhbGxiYWNrIGZvciBNYXN0ZXIgdHJhbnNtaXNzaW9uIGVuZCBvZiB0cmFuc2Zlci4KICAgICAgICAoKykgTWFzdGVyUnhDcGx0Q2FsbGJhY2sgOiBjYWxsYmFjayBmb3IgTWFzdGVyIHJlY2VwdGlvbiBlbmQgb2YgdHJhbnNmZXIuCkBAIC0yMzUsOSArMjM1LDkgQEAKICAgICAgICAoKykgTXNwRGVJbml0Q2FsbGJhY2sgICAgOiBjYWxsYmFjayBmb3IgTXNwIERlSW5pdC4KICAgICAgVGhpcyBmdW5jdGlvbiB0YWtlcyBhcyBwYXJhbWV0ZXJzIHRoZSBIQUwgcGVyaXBoZXJhbCBoYW5kbGUsIHRoZSBDYWxsYmFjayBJRAogICAgICBhbmQgYSBwb2ludGVyIHRvIHRoZSB1c2VyIGNhbGxiYWNrIGZ1bmN0aW9uLgotCisgICAgWy4uXQogICAgICBGb3Igc3BlY2lmaWMgY2FsbGJhY2sgQWRkckNhbGxiYWNrIHVzZSBkZWRpY2F0ZWQgcmVnaXN0ZXIgY2FsbGJhY2tzIDogQHJlZiBIQUxfSTJDX1JlZ2lzdGVyQWRkckNhbGxiYWNrKCkuCi0KKyAgICBbLi5dCiAgICAgIFVzZSBmdW5jdGlvbiBAcmVmIEhBTF9JMkNfVW5SZWdpc3RlckNhbGxiYWNrIHRvIHJlc2V0IGEgY2FsbGJhY2sgdG8gdGhlIGRlZmF1bHQKICAgICAgd2VhayBmdW5jdGlvbi4KICAgICAgQHJlZiBIQUxfSTJDX1VuUmVnaXN0ZXJDYWxsYmFjayB0YWtlcyBhcyBwYXJhbWV0ZXJzIHRoZSBIQUwgcGVyaXBoZXJhbCBoYW5kbGUsCkBAIC0yNTQsOSArMjU0LDkgQEAKICAgICAgICAoKykgQWJvcnRDcGx0Q2FsbGJhY2sgICAgOiBjYWxsYmFjayBmb3IgYWJvcnQgY29tcGxldGlvbiBwcm9jZXNzLgogICAgICAgICgrKSBNc3BJbml0Q2FsbGJhY2sgICAgICA6IGNhbGxiYWNrIGZvciBNc3AgSW5pdC4KICAgICAgICAoKykgTXNwRGVJbml0Q2FsbGJhY2sgICAgOiBjYWxsYmFjayBmb3IgTXNwIERlSW5pdC4KLQorICAgIFsuLl0KICAgICAgRm9yIGNhbGxiYWNrIEFkZHJDYWxsYmFjayB1c2UgZGVkaWNhdGVkIHJlZ2lzdGVyIGNhbGxiYWNrcyA6IEByZWYgSEFMX0kyQ19VblJlZ2lzdGVyQWRkckNhbGxiYWNrKCkuCi0KKyAgICBbLi5dCiAgICAgIEJ5IGRlZmF1bHQsIGFmdGVyIHRoZSBAcmVmIEhBTF9JMkNfSW5pdCgpIGFuZCB3aGVuIHRoZSBzdGF0ZSBpcyBAcmVmIEhBTF9JMkNfU1RBVEVfUkVTRVQKICAgICAgYWxsIGNhbGxiYWNrcyBhcmUgc2V0IHRvIHRoZSBjb3JyZXNwb25kaW5nIHdlYWsgZnVuY3Rpb25zOgogICAgICBleGFtcGxlcyBAcmVmIEhBTF9JMkNfTWFzdGVyVHhDcGx0Q2FsbGJhY2soKSwgQHJlZiBIQUxfSTJDX01hc3RlclJ4Q3BsdENhbGxiYWNrKCkuCkBAIC0yNjUsNyArMjY1LDcgQEAKICAgICAgdGhlc2UgY2FsbGJhY2tzIGFyZSBudWxsIChub3QgcmVnaXN0ZXJlZCBiZWZvcmVoYW5kKS4KICAgICAgSWYgTXNwSW5pdCBvciBNc3BEZUluaXQgYXJlIG5vdCBudWxsLCB0aGUgQHJlZiBIQUxfSTJDX0luaXQoKS8gQHJlZiBIQUxfSTJDX0RlSW5pdCgpCiAgICAgIGtlZXAgYW5kIHVzZSB0aGUgdXNlciBNc3BJbml0L01zcERlSW5pdCBjYWxsYmFja3MgKHJlZ2lzdGVyZWQgYmVmb3JlaGFuZCkgd2hhdGV2ZXIgdGhlIHN0YXRlLgotCisgICAgWy4uXQogICAgICBDYWxsYmFja3MgY2FuIGJlIHJlZ2lzdGVyZWQvdW5yZWdpc3RlcmVkIGluIEByZWYgSEFMX0kyQ19TVEFURV9SRUFEWSBzdGF0ZSBvbmx5LgogICAgICBFeGNlcHRpb24gZG9uZSBNc3BJbml0L01zcERlSW5pdCBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgcmVnaXN0ZXJlZC91bnJlZ2lzdGVyZWQKICAgICAgaW4gQHJlZiBIQUxfSTJDX1NUQVRFX1JFQURZIG9yIEByZWYgSEFMX0kyQ19TVEFURV9SRVNFVCBzdGF0ZSwKQEAgLTI3Myw3ICsyNzMsNyBAQAogICAgICBUaGVuLCB0aGUgdXNlciBmaXJzdCByZWdpc3RlcnMgdGhlIE1zcEluaXQvTXNwRGVJbml0IHVzZXIgY2FsbGJhY2tzCiAgICAgIHVzaW5nIEByZWYgSEFMX0kyQ19SZWdpc3RlckNhbGxiYWNrKCkgYmVmb3JlIGNhbGxpbmcgQHJlZiBIQUxfSTJDX0RlSW5pdCgpCiAgICAgIG9yIEByZWYgSEFMX0kyQ19Jbml0KCkgZnVuY3Rpb24uCi0KKyAgICBbLi5dCiAgICAgIFdoZW4gdGhlIGNvbXBpbGF0aW9uIGZsYWcgVVNFX0hBTF9JMkNfUkVHSVNURVJfQ0FMTEJBQ0tTIGlzIHNldCB0byAwIG9yCiAgICAgIG5vdCBkZWZpbmVkLCB0aGUgY2FsbGJhY2sgcmVnaXN0cmF0aW9uIGZlYXR1cmUgaXMgbm90IGF2YWlsYWJsZSBhbmQgYWxsIGNhbGxiYWNrcwogICAgICBhcmUgc2V0IHRvIHRoZSBjb3JyZXNwb25kaW5nIHdlYWsgZnVuY3Rpb25zLgpAQCAtMzc4LDYgKzM3OCw4IEBACiBzdGF0aWMgdm9pZCBJMkNfU2xhdmVfU1RPUEYoSTJDX0hhbmRsZVR5cGVEZWYgKmhpMmMpOwogc3RhdGljIHZvaWQgSTJDX1NsYXZlX0FGKEkyQ19IYW5kbGVUeXBlRGVmICpoaTJjKTsKIAorc3RhdGljIHZvaWQgSTJDX01lbW9yeVRyYW5zbWl0X1RYRV9CVEYoSTJDX0hhbmRsZVR5cGVEZWYgKmhpMmMpOworCiAvKiBQcml2YXRlIGZ1bmN0aW9uIHRvIENvbnZlcnQgU3BlY2lmaWMgb3B0aW9ucyAqLwogc3RhdGljIHZvaWQgSTJDX0NvbnZlcnRPdGhlclhmZXJPcHRpb25zKEkyQ19IYW5kbGVUeXBlRGVmICpoaTJjKTsKIC8qKgpAQCAtNDg2LDYgKzQ4OCwxMCBAQAogICAvKiBEaXNhYmxlIHRoZSBzZWxlY3RlZCBJMkMgcGVyaXBoZXJhbCAqLwogICBfX0hBTF9JMkNfRElTQUJMRShoaTJjKTsKIAorICAvKlJlc2V0IEkyQyovCisgIGhpMmMtPkluc3RhbmNlLT5DUjEgfD0gSTJDX0NSMV9TV1JTVDsKKyAgaGkyYy0+SW5zdGFuY2UtPkNSMSAmPSB+STJDX0NSMV9TV1JTVDsKKwogICAvKiBHZXQgUENMSzEgZnJlcXVlbmN5ICovCiAgIHBjbGsxID0gSEFMX1JDQ19HZXRQQ0xLMUZyZXEoKTsKIApAQCAtMzMwMyw3ICszMzA5LDExIEBACiAgICAgICAvKiBXYWl0IHVudGlsIFNCIGZsYWcgaXMgc2V0ICovCiAgICAgICBpZiAoSTJDX1dhaXRPbkZsYWdVbnRpbFRpbWVvdXQoaGkyYywgSTJDX0ZMQUdfU0IsIFJFU0VULCBUaW1lb3V0LCB0aWNrc3RhcnQpICE9IEhBTF9PSykKICAgICAgIHsKLSAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgICAgICAgaWYgKGhpMmMtPkluc3RhbmNlLT5DUjEgJiBJMkNfQ1IxX1NUQVJUKQorICAgICAgICB7CisgICAgICAgICAgaGkyYy0+RXJyb3JDb2RlID0gSEFMX0kyQ19XUk9OR19TVEFSVDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CiAgICAgICB9CiAKICAgICAgIC8qIFNlbmQgc2xhdmUgYWRkcmVzcyAqLwpAQCAtMzcxOSwxNiArMzcyOSwyNCBAQAogCiAgICAgUHJldl9TdGF0ZSA9IGhpMmMtPlByZXZpb3VzU3RhdGU7CiAKLSAgICBpZiAoKGhpMmMtPlhmZXJDb3VudCA9PSAyVSkgJiYgKChYZmVyT3B0aW9ucyA9PSBJMkNfTEFTVF9GUkFNRSkgfHwgKFhmZXJPcHRpb25zID09IEkyQ19PVEhFUl9BTkRfTEFTVF9GUkFNRSkgfHwgKFhmZXJPcHRpb25zID09IEkyQ19MQVNUX0ZSQU1FX05PX1NUT1ApKSkKKyAgICBpZiAoKGhpMmMtPlhmZXJDb3VudCA9PSAyVSkgJiYgKChYZmVyT3B0aW9ucyA9PSBJMkNfTEFTVF9GUkFNRSkgfHwgKFhmZXJPcHRpb25zID09IEkyQ19MQVNUX0ZSQU1FX05PX1NUT1ApKSkKICAgICB7Ci0gICAgICAvKiBEaXNhYmxlIEFja25vd2xlZGdlICovCi0gICAgICBDTEVBUl9CSVQoaGkyYy0+SW5zdGFuY2UtPkNSMSwgSTJDX0NSMV9BQ0spOworICAgICAgaWYgKFByZXZfU3RhdGUgPT0gSTJDX1NUQVRFX01BU1RFUl9CVVNZX1JYKQorICAgICAgeworICAgICAgICAvKiBEaXNhYmxlIEFja25vd2xlZGdlICovCisgICAgICAgIENMRUFSX0JJVChoaTJjLT5JbnN0YW5jZS0+Q1IxLCBJMkNfQ1IxX0FDSyk7CiAKLSAgICAgIC8qIEVuYWJsZSBQb3MgKi8KLSAgICAgIFNFVF9CSVQoaGkyYy0+SW5zdGFuY2UtPkNSMSwgSTJDX0NSMV9QT1MpOworICAgICAgICAvKiBFbmFibGUgUG9zICovCisgICAgICAgIFNFVF9CSVQoaGkyYy0+SW5zdGFuY2UtPkNSMSwgSTJDX0NSMV9QT1MpOwogCi0gICAgICAvKiBSZW1vdmUgRW5hYmxpbmcgb2YgSVRfQlVGLCBtZWFuIFJYTkUgdHJlYXRtZW50LCB0cmVhdCB0aGUgMiBieXRlcyB0aHJvdWdoIEJURiAqLwotICAgICAgZW5hYmxlSVQgJj0gfkkyQ19JVF9CVUY7CisgICAgICAgIC8qIFJlbW92ZSBFbmFibGluZyBvZiBJVF9CVUYsIG1lYW4gUlhORSB0cmVhdG1lbnQsIHRyZWF0IHRoZSAyIGJ5dGVzIHRocm91Z2ggQlRGICovCisgICAgICAgIGVuYWJsZUlUICY9IH5JMkNfSVRfQlVGOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICAvKiBFbmFibGUgQWNrbm93bGVkZ2UgKi8KKyAgICAgICAgU0VUX0JJVChoaTJjLT5JbnN0YW5jZS0+Q1IxLCBJMkNfQ1IxX0FDSyk7CisgICAgICB9CiAgICAgfQogICAgIGVsc2UKICAgICB7CkBAIC0zODQxLDE2ICszODU5LDI0IEBACiAKICAgICBpZiAoaGkyYy0+WGZlclNpemUgPiAwVSkKICAgICB7Ci0gICAgICBpZiAoKGhpMmMtPlhmZXJDb3VudCA9PSAyVSkgJiYgKChYZmVyT3B0aW9ucyA9PSBJMkNfTEFTVF9GUkFNRSkgfHwgKFhmZXJPcHRpb25zID09IEkyQ19PVEhFUl9BTkRfTEFTVF9GUkFNRSkgfHwgKFhmZXJPcHRpb25zID09IEkyQ19MQVNUX0ZSQU1FX05PX1NUT1ApKSkKKyAgICAgIGlmICgoaGkyYy0+WGZlckNvdW50ID09IDJVKSAmJiAoKFhmZXJPcHRpb25zID09IEkyQ19MQVNUX0ZSQU1FKSB8fCAoWGZlck9wdGlvbnMgPT0gSTJDX0xBU1RfRlJBTUVfTk9fU1RPUCkpKQogICAgICAgewotICAgICAgICAvKiBEaXNhYmxlIEFja25vd2xlZGdlICovCi0gICAgICAgIENMRUFSX0JJVChoaTJjLT5JbnN0YW5jZS0+Q1IxLCBJMkNfQ1IxX0FDSyk7CisgICAgICAgIGlmIChQcmV2X1N0YXRlID09IEkyQ19TVEFURV9NQVNURVJfQlVTWV9SWCkKKyAgICAgICAgeworICAgICAgICAgIC8qIERpc2FibGUgQWNrbm93bGVkZ2UgKi8KKyAgICAgICAgICBDTEVBUl9CSVQoaGkyYy0+SW5zdGFuY2UtPkNSMSwgSTJDX0NSMV9BQ0spOwogCi0gICAgICAgIC8qIEVuYWJsZSBQb3MgKi8KLSAgICAgICAgU0VUX0JJVChoaTJjLT5JbnN0YW5jZS0+Q1IxLCBJMkNfQ1IxX1BPUyk7CisgICAgICAgICAgLyogRW5hYmxlIFBvcyAqLworICAgICAgICAgIFNFVF9CSVQoaGkyYy0+SW5zdGFuY2UtPkNSMSwgSTJDX0NSMV9QT1MpOwogCi0gICAgICAgIC8qIEVuYWJsZSBMYXN0IERNQSBiaXQgKi8KLSAgICAgICAgU0VUX0JJVChoaTJjLT5JbnN0YW5jZS0+Q1IyLCBJMkNfQ1IyX0xBU1QpOworICAgICAgICAgIC8qIEVuYWJsZSBMYXN0IERNQSBiaXQgKi8KKyAgICAgICAgICBTRVRfQklUKGhpMmMtPkluc3RhbmNlLT5DUjIsIEkyQ19DUjJfTEFTVCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgLyogRW5hYmxlIEFja25vd2xlZGdlICovCisgICAgICAgICAgU0VUX0JJVChoaTJjLT5JbnN0YW5jZS0+Q1IxLCBJMkNfQ1IxX0FDSyk7CisgICAgICAgIH0KICAgICAgIH0KICAgICAgIGVsc2UKICAgICAgIHsKQEAgLTM4ODUsNiArMzkxMSwxNCBAQAogICAgICAgICB7CiAgICAgICAgICAgLyogR2VuZXJhdGUgU3RhcnQgKi8KICAgICAgICAgICBTRVRfQklUKGhpMmMtPkluc3RhbmNlLT5DUjEsIEkyQ19DUjFfU1RBUlQpOworCisgICAgICAgICAgLyogVXBkYXRlIGludGVycnVwdCBmb3Igb25seSBFVlQgYW5kIEVSUiAqLworICAgICAgICAgIGVuYWJsZUlUID0gKEkyQ19JVF9FVlQgfCBJMkNfSVRfRVJSKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAvKiBVcGRhdGUgaW50ZXJydXB0IGZvciBvbmx5IEVSUiAqLworICAgICAgICAgIGVuYWJsZUlUID0gSTJDX0lUX0VSUjsKICAgICAgICAgfQogCiAgICAgICAgIC8qIFByb2Nlc3MgVW5sb2NrZWQgKi8KQEAgLTM5MDMsNyArMzkzNyw3IEBACiAgICAgICAgIH0KIAogICAgICAgICAvKiBFbmFibGUgRVZUIGFuZCBFUlIgaW50ZXJydXB0ICovCi0gICAgICAgIF9fSEFMX0kyQ19FTkFCTEVfSVQoaGkyYywgSTJDX0lUX0VWVCB8IEkyQ19JVF9FUlIpOworICAgICAgICBfX0hBTF9JMkNfRU5BQkxFX0lUKGhpMmMsIGVuYWJsZUlUKTsKICAgICAgIH0KICAgICAgIGVsc2UKICAgICAgIHsKQEAgLTQ2OTQsNiArNDcyOCw3IEBACiAgIHVpbnQzMl90IHNyMWl0ZmxhZ3MgPSBSRUFEX1JFRyhoaTJjLT5JbnN0YW5jZS0+U1IxKTsKICAgdWludDMyX3QgaXRzb3VyY2VzICA9IFJFQURfUkVHKGhpMmMtPkluc3RhbmNlLT5DUjIpOwogICB1aW50MzJfdCBlcnJvciAgICAgID0gSEFMX0kyQ19FUlJPUl9OT05FOworICBIQUxfSTJDX01vZGVUeXBlRGVmIEN1cnJlbnRNb2RlICAgPSBoaTJjLT5Nb2RlOwogCiAgIC8qIEkyQyBCdXMgZXJyb3IgaW50ZXJydXB0IG9jY3VycmVkIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogICBpZiAoKEkyQ19DSEVDS19GTEFHKHNyMWl0ZmxhZ3MsIEkyQ19GTEFHX0JFUlIpICE9IFJFU0VUKSAmJiAoSTJDX0NIRUNLX0lUX1NPVVJDRShpdHNvdXJjZXMsIEkyQ19JVF9FUlIpICE9IFJFU0VUKSkKQEAgLTQ3MTYsNyArNDc1MSw3IEBACiAgIC8qIEkyQyBBY2tub3dsZWRnZSBmYWlsdXJlIGVycm9yIGludGVycnVwdCBvY2N1cnJlZCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogICBpZiAoKEkyQ19DSEVDS19GTEFHKHNyMWl0ZmxhZ3MsIEkyQ19GTEFHX0FGKSAhPSBSRVNFVCkgJiYgKEkyQ19DSEVDS19JVF9TT1VSQ0UoaXRzb3VyY2VzLCBJMkNfSVRfRVJSKSAhPSBSRVNFVCkpCiAgIHsKLSAgICB0bXAxID0gaGkyYy0+TW9kZTsKKyAgICB0bXAxID0gQ3VycmVudE1vZGU7CiAgICAgdG1wMiA9IGhpMmMtPlhmZXJDb3VudDsKICAgICB0bXAzID0gaGkyYy0+U3RhdGU7CiAgICAgdG1wNCA9IGhpMmMtPlByZXZpb3VzU3RhdGU7CkBAIC00NzM0LDcgKzQ3NjksNyBAQAogICAgICAgZXJyb3IgfD0gSEFMX0kyQ19FUlJPUl9BRjsKIAogICAgICAgLyogRG8gbm90IGdlbmVyYXRlIGEgU1RPUCBpbiBjYXNlIG9mIFNsYXZlIHJlY2VpdmUgbm9uIGFja25vd2xlZGdlIGR1cmluZyB0cmFuc2ZlciAobWVhbiBub3QgYXQgdGhlIGVuZCBvZiB0cmFuc2ZlcikgKi8KLSAgICAgIGlmIChoaTJjLT5Nb2RlID09IEhBTF9JMkNfTU9ERV9NQVNURVIpCisgICAgICBpZiAoKEN1cnJlbnRNb2RlID09IEhBTF9JMkNfTU9ERV9NQVNURVIpIHx8IChDdXJyZW50TW9kZSA9PSBIQUxfSTJDX01PREVfTUVNKSkKICAgICAgIHsKICAgICAgICAgLyogR2VuZXJhdGUgU3RvcCAqLwogICAgICAgICBTRVRfQklUKGhpMmMtPkluc3RhbmNlLT5DUjEsIEkyQ19DUjFfU1RPUCk7CkBAIC01MDU5LDU5ICs1MDk0LDcgQEAKICAgICB7CiAgICAgICBpZiAoaGkyYy0+TW9kZSA9PSBIQUxfSTJDX01PREVfTUVNKQogICAgICAgewotICAgICAgICBpZiAoaGkyYy0+RXZlbnRDb3VudCA9PSAwVSkKLSAgICAgICAgewotICAgICAgICAgIC8qIElmIE1lbW9yeSBhZGRyZXNzIHNpemUgaXMgOEJpdCAqLwotICAgICAgICAgIGlmIChoaTJjLT5NZW1hZGRTaXplID09IEkyQ19NRU1BRERfU0laRV84QklUKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8qIFNlbmQgTWVtb3J5IEFkZHJlc3MgKi8KLSAgICAgICAgICAgIGhpMmMtPkluc3RhbmNlLT5EUiA9IEkyQ19NRU1fQUREX0xTQihoaTJjLT5NZW1hZGRyZXNzKTsKLQotICAgICAgICAgICAgaGkyYy0+RXZlbnRDb3VudCArPSAyVTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgLyogSWYgTWVtb3J5IGFkZHJlc3Mgc2l6ZSBpcyAxNkJpdCAqLwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvKiBTZW5kIE1TQiBvZiBNZW1vcnkgQWRkcmVzcyAqLwotICAgICAgICAgICAgaGkyYy0+SW5zdGFuY2UtPkRSID0gSTJDX01FTV9BRERfTVNCKGhpMmMtPk1lbWFkZHJlc3MpOwotCi0gICAgICAgICAgICBoaTJjLT5FdmVudENvdW50Kys7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKGhpMmMtPkV2ZW50Q291bnQgPT0gMVUpCi0gICAgICAgIHsKLSAgICAgICAgICAvKiBTZW5kIExTQiBvZiBNZW1vcnkgQWRkcmVzcyAqLwotICAgICAgICAgIGhpMmMtPkluc3RhbmNlLT5EUiA9IEkyQ19NRU1fQUREX0xTQihoaTJjLT5NZW1hZGRyZXNzKTsKLQotICAgICAgICAgIGhpMmMtPkV2ZW50Q291bnQrKzsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChoaTJjLT5FdmVudENvdW50ID09IDJVKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKGhpMmMtPlN0YXRlID09IEhBTF9JMkNfU1RBVEVfQlVTWV9SWCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvKiBHZW5lcmF0ZSBSZXN0YXJ0ICovCi0gICAgICAgICAgICBoaTJjLT5JbnN0YW5jZS0+Q1IxIHw9IEkyQ19DUjFfU1RBUlQ7Ci0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UgaWYgKGhpMmMtPlN0YXRlID09IEhBTF9JMkNfU1RBVEVfQlVTWV9UWCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvKiBXcml0ZSBkYXRhIHRvIERSICovCi0gICAgICAgICAgICBoaTJjLT5JbnN0YW5jZS0+RFIgPSAqaGkyYy0+cEJ1ZmZQdHI7Ci0KLSAgICAgICAgICAgIC8qIEluY3JlbWVudCBCdWZmZXIgcG9pbnRlciAqLwotICAgICAgICAgICAgaGkyYy0+cEJ1ZmZQdHIrKzsKLQotICAgICAgICAgICAgLyogVXBkYXRlIGNvdW50ZXIgKi8KLSAgICAgICAgICAgIGhpMmMtPlhmZXJDb3VudC0tOwotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgewotICAgICAgICAgICAgLyogRG8gbm90aGluZyAqLwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAvKiBEbyBub3RoaW5nICovCi0gICAgICAgIH0KKyAgICAgICAgSTJDX01lbW9yeVRyYW5zbWl0X1RYRV9CVEYoaGkyYyk7CiAgICAgICB9CiAgICAgICBlbHNlCiAgICAgICB7CkBAIC01MjA2LDYgKzUxODksNzcgQEAKICAgICAgIH0KICAgICB9CiAgIH0KKyAgZWxzZSBpZiAoaGkyYy0+TW9kZSA9PSBIQUxfSTJDX01PREVfTUVNKQorICB7CisgICAgSTJDX01lbW9yeVRyYW5zbWl0X1RYRV9CVEYoaGkyYyk7CisgIH0KKyAgZWxzZQorICB7CisgICAgLyogRG8gbm90aGluZyAqLworICB9Cit9CisKKy8qKgorICAqIEBicmllZiAgSGFuZGxlIFRYRSBhbmQgQlRGIGZsYWcgZm9yIE1lbW9yeSB0cmFuc21pdHRlcgorICAqIEBwYXJhbSAgaGkyYyBQb2ludGVyIHRvIGEgSTJDX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKKyAgKiAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciBJMkMgbW9kdWxlCisgICogQHJldHZhbCBOb25lCisgICovCitzdGF0aWMgdm9pZCBJMkNfTWVtb3J5VHJhbnNtaXRfVFhFX0JURihJMkNfSGFuZGxlVHlwZURlZiAqaGkyYykKK3sKKyAgaWYgKGhpMmMtPkV2ZW50Q291bnQgPT0gMFUpCisgIHsKKyAgICAvKiBJZiBNZW1vcnkgYWRkcmVzcyBzaXplIGlzIDhCaXQgKi8KKyAgICBpZiAoaGkyYy0+TWVtYWRkU2l6ZSA9PSBJMkNfTUVNQUREX1NJWkVfOEJJVCkKKyAgICB7CisgICAgICAvKiBTZW5kIE1lbW9yeSBBZGRyZXNzICovCisgICAgICBoaTJjLT5JbnN0YW5jZS0+RFIgPSBJMkNfTUVNX0FERF9MU0IoaGkyYy0+TWVtYWRkcmVzcyk7CisKKyAgICAgIGhpMmMtPkV2ZW50Q291bnQgKz0gMlU7CisgICAgfQorICAgIC8qIElmIE1lbW9yeSBhZGRyZXNzIHNpemUgaXMgMTZCaXQgKi8KKyAgICBlbHNlCisgICAgeworICAgICAgLyogU2VuZCBNU0Igb2YgTWVtb3J5IEFkZHJlc3MgKi8KKyAgICAgIGhpMmMtPkluc3RhbmNlLT5EUiA9IEkyQ19NRU1fQUREX01TQihoaTJjLT5NZW1hZGRyZXNzKTsKKworICAgICAgaGkyYy0+RXZlbnRDb3VudCsrOworICAgIH0KKyAgfQorICBlbHNlIGlmIChoaTJjLT5FdmVudENvdW50ID09IDFVKQorICB7CisgICAgLyogU2VuZCBMU0Igb2YgTWVtb3J5IEFkZHJlc3MgKi8KKyAgICBoaTJjLT5JbnN0YW5jZS0+RFIgPSBJMkNfTUVNX0FERF9MU0IoaGkyYy0+TWVtYWRkcmVzcyk7CisKKyAgICBoaTJjLT5FdmVudENvdW50Kys7CisgIH0KKyAgZWxzZSBpZiAoaGkyYy0+RXZlbnRDb3VudCA9PSAyVSkKKyAgeworICAgIGlmIChoaTJjLT5TdGF0ZSA9PSBIQUxfSTJDX1NUQVRFX0JVU1lfUlgpCisgICAgeworICAgICAgLyogR2VuZXJhdGUgUmVzdGFydCAqLworICAgICAgaGkyYy0+SW5zdGFuY2UtPkNSMSB8PSBJMkNfQ1IxX1NUQVJUOworICAgIH0KKyAgICBlbHNlIGlmIChoaTJjLT5TdGF0ZSA9PSBIQUxfSTJDX1NUQVRFX0JVU1lfVFgpCisgICAgeworICAgICAgLyogV3JpdGUgZGF0YSB0byBEUiAqLworICAgICAgaGkyYy0+SW5zdGFuY2UtPkRSID0gKmhpMmMtPnBCdWZmUHRyOworCisgICAgICAvKiBJbmNyZW1lbnQgQnVmZmVyIHBvaW50ZXIgKi8KKyAgICAgIGhpMmMtPnBCdWZmUHRyKys7CisKKyAgICAgIC8qIFVwZGF0ZSBjb3VudGVyICovCisgICAgICBoaTJjLT5YZmVyQ291bnQtLTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIC8qIERvIG5vdGhpbmcgKi8KKyAgICB9CisgIH0KKyAgZWxzZQorICB7CisgICAgLyogRG8gbm90aGluZyAqLworICB9CiB9CiAKIC8qKgpAQCAtNTQ0OSwxMyArNTUwMywxMSBAQAogICAgICAgICBoaTJjLT5JbnN0YW5jZS0+RFIgPSBJMkNfN0JJVF9BRERfUkVBRChoaTJjLT5EZXZhZGRyZXNzKTsKICAgICAgIH0KIAotICAgICAgaWYgKChoaTJjLT5oZG1hdHggIT0gTlVMTCkgfHwgKGhpMmMtPmhkbWFyeCAhPSBOVUxMKSkKKyAgICAgIGlmICgoKGhpMmMtPmhkbWF0eCAhPSBOVUxMKSAmJiAoaGkyYy0+aGRtYXR4LT5YZmVyQ3BsdENhbGxiYWNrICE9IE5VTEwpKQorICAgICAgICAgIHx8ICgoaGkyYy0+aGRtYXJ4ICE9IE5VTEwpICYmIChoaTJjLT5oZG1hcngtPlhmZXJDcGx0Q2FsbGJhY2sgIT0gTlVMTCkpKQogICAgICAgewotICAgICAgICBpZiAoKGhpMmMtPmhkbWF0eC0+WGZlckNwbHRDYWxsYmFjayAhPSBOVUxMKSB8fCAoaGkyYy0+aGRtYXJ4LT5YZmVyQ3BsdENhbGxiYWNrICE9IE5VTEwpKQotICAgICAgICB7Ci0gICAgICAgICAgLyogRW5hYmxlIERNQSBSZXF1ZXN0ICovCi0gICAgICAgICAgU0VUX0JJVChoaTJjLT5JbnN0YW5jZS0+Q1IyLCBJMkNfQ1IyX0RNQUVOKTsKLSAgICAgICAgfQorICAgICAgICAvKiBFbmFibGUgRE1BIFJlcXVlc3QgKi8KKyAgICAgICAgU0VUX0JJVChoaTJjLT5JbnN0YW5jZS0+Q1IyLCBJMkNfQ1IyX0RNQUVOKTsKICAgICAgIH0KICAgICB9CiAgICAgZWxzZQpAQCAtNjA2NSw2ICs2MTE3LDcgQEAKIHsKICAgLyogRGVjbGFyYXRpb24gb2YgdGVtcG9yYXJ5IHZhcmlhYmxlIHRvIHByZXZlbnQgdW5kZWZpbmVkIGJlaGF2aW9yIG9mIHZvbGF0aWxlIHVzYWdlICovCiAgIEhBTF9JMkNfU3RhdGVUeXBlRGVmIEN1cnJlbnRTdGF0ZSA9IGhpMmMtPlN0YXRlOworICB1aW50MzJfdCBDdXJyZW50RXJyb3I7CiAKICAgaWYgKChoaTJjLT5Nb2RlID09IEhBTF9JMkNfTU9ERV9NQVNURVIpICYmIChDdXJyZW50U3RhdGUgPT0gSEFMX0kyQ19TVEFURV9CVVNZX1JYKSkKICAgewpAQCAtNjE4NCwxNSArNjIzNywyNCBAQAogICAgIEhBTF9JMkNfRXJyb3JDYWxsYmFjayhoaTJjKTsKICNlbmRpZiAvKiBVU0VfSEFMX0kyQ19SRUdJU1RFUl9DQUxMQkFDS1MgKi8KICAgfQotICAvKiBTVE9QIEZsYWcgaXMgbm90IHNldCBhZnRlciBhIE5BQ0sgcmVjZXB0aW9uICovCisKKyAgLyogU1RPUCBGbGFnIGlzIG5vdCBzZXQgYWZ0ZXIgYSBOQUNLIHJlY2VwdGlvbiwgQnVzRXJyb3IsIEFyYml0cmF0aW9uTG9zdCwgT3ZlclJ1biAqLworICBDdXJyZW50RXJyb3IgPSBoaTJjLT5FcnJvckNvZGU7CisKKyAgaWYgKCgoQ3VycmVudEVycm9yICYgSEFMX0kyQ19FUlJPUl9CRVJSKSA9PSBIQUxfSTJDX0VSUk9SX0JFUlIpIHx8IFwKKyAgICAgICgoQ3VycmVudEVycm9yICYgSEFMX0kyQ19FUlJPUl9BUkxPKSA9PSBIQUxfSTJDX0VSUk9SX0FSTE8pIHx8IFwKKyAgICAgICgoQ3VycmVudEVycm9yICYgSEFMX0kyQ19FUlJPUl9BRikgPT0gSEFMX0kyQ19FUlJPUl9BRikgICAgIHx8IFwKKyAgICAgICgoQ3VycmVudEVycm9yICYgSEFMX0kyQ19FUlJPUl9PVlIpID09IEhBTF9JMkNfRVJST1JfT1ZSKSkKKyAgeworICAgIC8qIERpc2FibGUgRVZULCBCVUYgYW5kIEVSUiBpbnRlcnJ1cHQgKi8KKyAgICBfX0hBTF9JMkNfRElTQUJMRV9JVChoaTJjLCBJMkNfSVRfRVZUIHwgSTJDX0lUX0JVRiB8IEkyQ19JVF9FUlIpOworICB9CisKICAgLyogU28gbWF5IGluZm9ybSB1cHBlciBsYXllciB0aGF0IGxpc3RlbiBwaGFzZSBpcyBzdG9wcGVkICovCiAgIC8qIGR1cmluZyBOQUNLIGVycm9yIHRyZWF0bWVudCAqLwogICBDdXJyZW50U3RhdGUgPSBoaTJjLT5TdGF0ZTsKICAgaWYgKCgoaGkyYy0+RXJyb3JDb2RlICYgSEFMX0kyQ19FUlJPUl9BRikgPT0gSEFMX0kyQ19FUlJPUl9BRikgJiYgKEN1cnJlbnRTdGF0ZSA9PSBIQUxfSTJDX1NUQVRFX0xJU1RFTikpCiAgIHsKLSAgICAvKiBEaXNhYmxlIEVWVCwgQlVGIGFuZCBFUlIgaW50ZXJydXB0ICovCi0gICAgX19IQUxfSTJDX0RJU0FCTEVfSVQoaGkyYywgSTJDX0lUX0VWVCB8IEkyQ19JVF9CVUYgfCBJMkNfSVRfRVJSKTsKLQogICAgIGhpMmMtPlhmZXJPcHRpb25zICAgPSBJMkNfTk9fT1BUSU9OX0ZSQU1FOwogICAgIGhpMmMtPlByZXZpb3VzU3RhdGUgPSBJMkNfU1RBVEVfTk9ORTsKICAgICBoaTJjLT5TdGF0ZSAgICAgICAgID0gSEFMX0kyQ19TVEFURV9SRUFEWTsKQEAgLTYyNDAsNyArNjMwMiwxMSBAQAogICAvKiBXYWl0IHVudGlsIFNCIGZsYWcgaXMgc2V0ICovCiAgIGlmIChJMkNfV2FpdE9uRmxhZ1VudGlsVGltZW91dChoaTJjLCBJMkNfRkxBR19TQiwgUkVTRVQsIFRpbWVvdXQsIFRpY2tzdGFydCkgIT0gSEFMX09LKQogICB7Ci0gICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgICBpZiAoaGkyYy0+SW5zdGFuY2UtPkNSMSAmIEkyQ19DUjFfU1RBUlQpCisgICAgeworICAgICAgaGkyYy0+RXJyb3JDb2RlID0gSEFMX0kyQ19XUk9OR19TVEFSVDsKKyAgICB9CisgICAgcmV0dXJuIEhBTF9USU1FT1VUOwogICB9CiAKICAgaWYgKGhpMmMtPkluaXQuQWRkcmVzc2luZ01vZGUgPT0gSTJDX0FERFJFU1NJTkdNT0RFXzdCSVQpCkBAIC02MzA5LDcgKzYzNzUsMTEgQEAKICAgLyogV2FpdCB1bnRpbCBTQiBmbGFnIGlzIHNldCAqLwogICBpZiAoSTJDX1dhaXRPbkZsYWdVbnRpbFRpbWVvdXQoaGkyYywgSTJDX0ZMQUdfU0IsIFJFU0VULCBUaW1lb3V0LCBUaWNrc3RhcnQpICE9IEhBTF9PSykKICAgewotICAgIHJldHVybiBIQUxfRVJST1I7CisgICAgaWYgKGhpMmMtPkluc3RhbmNlLT5DUjEgJiBJMkNfQ1IxX1NUQVJUKQorICAgIHsKKyAgICAgIGhpMmMtPkVycm9yQ29kZSA9IEhBTF9JMkNfV1JPTkdfU1RBUlQ7CisgICAgfQorICAgIHJldHVybiBIQUxfVElNRU9VVDsKICAgfQogCiAgIGlmIChoaTJjLT5Jbml0LkFkZHJlc3NpbmdNb2RlID09IEkyQ19BRERSRVNTSU5HTU9ERV83QklUKQpAQCAtNjM0Niw3ICs2NDE2LDExIEBACiAgICAgLyogV2FpdCB1bnRpbCBTQiBmbGFnIGlzIHNldCAqLwogICAgIGlmIChJMkNfV2FpdE9uRmxhZ1VudGlsVGltZW91dChoaTJjLCBJMkNfRkxBR19TQiwgUkVTRVQsIFRpbWVvdXQsIFRpY2tzdGFydCkgIT0gSEFMX09LKQogICAgIHsKLSAgICAgIHJldHVybiBIQUxfRVJST1I7CisgICAgICBpZiAoaGkyYy0+SW5zdGFuY2UtPkNSMSAmIEkyQ19DUjFfU1RBUlQpCisgICAgICB7CisgICAgICAgIGhpMmMtPkVycm9yQ29kZSA9IEhBTF9JMkNfV1JPTkdfU1RBUlQ7CisgICAgICB9CisgICAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CiAgICAgfQogCiAgICAgLyogU2VuZCBoZWFkZXIgb2Ygc2xhdmUgYWRkcmVzcyAqLwpAQCAtNjM4Miw3ICs2NDU2LDExIEBACiAgIC8qIFdhaXQgdW50aWwgU0IgZmxhZyBpcyBzZXQgKi8KICAgaWYgKEkyQ19XYWl0T25GbGFnVW50aWxUaW1lb3V0KGhpMmMsIEkyQ19GTEFHX1NCLCBSRVNFVCwgVGltZW91dCwgVGlja3N0YXJ0KSAhPSBIQUxfT0spCiAgIHsKLSAgICByZXR1cm4gSEFMX0VSUk9SOworICAgIGlmIChoaTJjLT5JbnN0YW5jZS0+Q1IxICYgSTJDX0NSMV9TVEFSVCkKKyAgICB7CisgICAgICBoaTJjLT5FcnJvckNvZGUgPSBIQUxfSTJDX1dST05HX1NUQVJUOworICAgIH0KKyAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CiAgIH0KIAogICAvKiBTZW5kIHNsYXZlIGFkZHJlc3MgKi8KQEAgLTY0NjEsNyArNjUzOSwxMSBAQAogICAvKiBXYWl0IHVudGlsIFNCIGZsYWcgaXMgc2V0ICovCiAgIGlmIChJMkNfV2FpdE9uRmxhZ1VudGlsVGltZW91dChoaTJjLCBJMkNfRkxBR19TQiwgUkVTRVQsIFRpbWVvdXQsIFRpY2tzdGFydCkgIT0gSEFMX09LKQogICB7Ci0gICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgICBpZiAoaGkyYy0+SW5zdGFuY2UtPkNSMSAmIEkyQ19DUjFfU1RBUlQpCisgICAgeworICAgICAgaGkyYy0+RXJyb3JDb2RlID0gSEFMX0kyQ19XUk9OR19TVEFSVDsKKyAgICB9CisgICAgcmV0dXJuIEhBTF9USU1FT1VUOwogICB9CiAKICAgLyogU2VuZCBzbGF2ZSBhZGRyZXNzICovCkBAIC02NTMxLDcgKzY2MTMsMTEgQEAKICAgLyogV2FpdCB1bnRpbCBTQiBmbGFnIGlzIHNldCAqLwogICBpZiAoSTJDX1dhaXRPbkZsYWdVbnRpbFRpbWVvdXQoaGkyYywgSTJDX0ZMQUdfU0IsIFJFU0VULCBUaW1lb3V0LCBUaWNrc3RhcnQpICE9IEhBTF9PSykKICAgewotICAgIHJldHVybiBIQUxfRVJST1I7CisgICAgaWYgKGhpMmMtPkluc3RhbmNlLT5DUjEgJiBJMkNfQ1IxX1NUQVJUKQorICAgIHsKKyAgICAgIGhpMmMtPkVycm9yQ29kZSA9IEhBTF9JMkNfV1JPTkdfU1RBUlQ7CisgICAgfQorICAgIHJldHVybiBIQUxfVElNRU9VVDsKICAgfQogCiAgIC8qIFNlbmQgc2xhdmUgYWRkcmVzcyAqLwpAQCAtNjU2NCw4ICs2NjUwLDE0IEBACiAgIF9fSEFMX0kyQ19ESVNBQkxFX0lUKGhpMmMsIEkyQ19JVF9FVlQgfCBJMkNfSVRfRVJSKTsKIAogICAvKiBDbGVhciBDb21wbGV0ZSBjYWxsYmFjayAqLwotICBoaTJjLT5oZG1hdHgtPlhmZXJDcGx0Q2FsbGJhY2sgPSBOVUxMOwotICBoaTJjLT5oZG1hcngtPlhmZXJDcGx0Q2FsbGJhY2sgPSBOVUxMOworICBpZiAoaGkyYy0+aGRtYXR4ICE9IE5VTEwpCisgIHsKKyAgICBoaTJjLT5oZG1hdHgtPlhmZXJDcGx0Q2FsbGJhY2sgPSBOVUxMOworICB9CisgIGlmIChoaTJjLT5oZG1hcnggIT0gTlVMTCkKKyAgeworICAgIGhpMmMtPmhkbWFyeC0+WGZlckNwbHRDYWxsYmFjayA9IE5VTEw7CisgIH0KIAogICBpZiAoKCgodWludDMyX3QpQ3VycmVudFN0YXRlICYgKHVpbnQzMl90KUhBTF9JMkNfU1RBVEVfQlVTWV9UWCkgPT0gKHVpbnQzMl90KUhBTF9JMkNfU1RBVEVfQlVTWV9UWCkgfHwgKCgoKHVpbnQzMl90KUN1cnJlbnRTdGF0ZSAmICh1aW50MzJfdClIQUxfSTJDX1NUQVRFX0JVU1lfUlgpID09ICh1aW50MzJfdClIQUxfSTJDX1NUQVRFX0JVU1lfUlgpICYmIChDdXJyZW50TW9kZSA9PSBIQUxfSTJDX01PREVfU0xBVkUpKSkKICAgewpAQCAtNjY4OCw4ICs2NzgwLDE0IEBACiAgIEkyQ19IYW5kbGVUeXBlRGVmICpoaTJjID0gKEkyQ19IYW5kbGVUeXBlRGVmICopKChETUFfSGFuZGxlVHlwZURlZiAqKWhkbWEpLT5QYXJlbnQ7IC8qIERlcm9nYXRpb24gTUlTUkFDMjAxMi1SdWxlLTExLjUgKi8KIAogICAvKiBDbGVhciBDb21wbGV0ZSBjYWxsYmFjayAqLwotICBoaTJjLT5oZG1hdHgtPlhmZXJDcGx0Q2FsbGJhY2sgPSBOVUxMOwotICBoaTJjLT5oZG1hcngtPlhmZXJDcGx0Q2FsbGJhY2sgPSBOVUxMOworICBpZiAoaGkyYy0+aGRtYXR4ICE9IE5VTEwpCisgIHsKKyAgICBoaTJjLT5oZG1hdHgtPlhmZXJDcGx0Q2FsbGJhY2sgPSBOVUxMOworICB9CisgIGlmIChoaTJjLT5oZG1hcnggIT0gTlVMTCkKKyAgeworICAgIGhpMmMtPmhkbWFyeC0+WGZlckNwbHRDYWxsYmFjayA9IE5VTEw7CisgIH0KIAogICAvKiBJZ25vcmUgRE1BIEZJRk8gZXJyb3IgKi8KICAgaWYgKEhBTF9ETUFfR2V0RXJyb3IoaGRtYSkgIT0gSEFMX0RNQV9FUlJPUl9GRSkKQEAgLTY3MjYsOCArNjgyNCwxNCBAQAogICBIQUxfSTJDX1N0YXRlVHlwZURlZiBDdXJyZW50U3RhdGUgPSBoaTJjLT5TdGF0ZTsKIAogICAvKiBDbGVhciBDb21wbGV0ZSBjYWxsYmFjayAqLwotICBoaTJjLT5oZG1hdHgtPlhmZXJDcGx0Q2FsbGJhY2sgPSBOVUxMOwotICBoaTJjLT5oZG1hcngtPlhmZXJDcGx0Q2FsbGJhY2sgPSBOVUxMOworICBpZiAoaGkyYy0+aGRtYXR4ICE9IE5VTEwpCisgIHsKKyAgICBoaTJjLT5oZG1hdHgtPlhmZXJDcGx0Q2FsbGJhY2sgPSBOVUxMOworICB9CisgIGlmIChoaTJjLT5oZG1hcnggIT0gTlVMTCkKKyAgeworICAgIGhpMmMtPmhkbWFyeC0+WGZlckNwbHRDYWxsYmFjayA9IE5VTEw7CisgIH0KIAogICAvKiBEaXNhYmxlIEFja25vd2xlZGdlICovCiAgIENMRUFSX0JJVChoaTJjLT5JbnN0YW5jZS0+Q1IxLCBJMkNfQ1IxX0FDSyk7CkBAIC02NzM1LDggKzY4MzksMTQgQEAKICAgaGkyYy0+WGZlckNvdW50ID0gMFU7CiAKICAgLyogUmVzZXQgWGZlckFib3J0Q2FsbGJhY2sgKi8KLSAgaGkyYy0+aGRtYXR4LT5YZmVyQWJvcnRDYWxsYmFjayA9IE5VTEw7Ci0gIGhpMmMtPmhkbWFyeC0+WGZlckFib3J0Q2FsbGJhY2sgPSBOVUxMOworICBpZiAoaGkyYy0+aGRtYXR4ICE9IE5VTEwpCisgIHsKKyAgICBoaTJjLT5oZG1hdHgtPlhmZXJBYm9ydENhbGxiYWNrID0gTlVMTDsKKyAgfQorICBpZiAoaGkyYy0+aGRtYXJ4ICE9IE5VTEwpCisgIHsKKyAgICBoaTJjLT5oZG1hcngtPlhmZXJBYm9ydENhbGxiYWNrID0gTlVMTDsKKyAgfQogCiAgIC8qIERpc2FibGUgSTJDIHBlcmlwaGVyYWwgdG8gcHJldmVudCBkdW1teSBkYXRhIGluIGJ1ZmZlciAqLwogICBfX0hBTF9JMkNfRElTQUJMRShoaTJjKTsKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmY0eHhfaGFsX2kycy5jIGIvU3JjL3N0bTMyZjR4eF9oYWxfaTJzLmMKaW5kZXggZmM3ZjZhZS4uMjBhMGU5NSAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZjR4eF9oYWxfaTJzLmMKKysrIGIvU3JjL3N0bTMyZjR4eF9oYWxfaTJzLmMKQEAgLTExMywxNCArMTEzLDE0IEBACiAgICAgICAgICAgVXNlIEZ1bmN0aW9ucyBIQUxfSTJTX1JlZ2lzdGVyQ2FsbGJhY2soKSB0byByZWdpc3RlciBhbiBpbnRlcnJ1cHQgY2FsbGJhY2suCiAKICAgICAgICAgICBGdW5jdGlvbiBIQUxfSTJTX1JlZ2lzdGVyQ2FsbGJhY2soKSBhbGxvd3MgdG8gcmVnaXN0ZXIgZm9sbG93aW5nIGNhbGxiYWNrczoKLSAgICAgICAgICAgICgrKSBUeENwbHRDYWxsYmFjayAgICAgICAgOiBJMlMgVHggQ29tcGxldGVkIGNhbGxiYWNrCi0gICAgICAgICAgICAoKykgUnhDcGx0Q2FsbGJhY2sgICAgICAgIDogSTJTIFJ4IENvbXBsZXRlZCBjYWxsYmFjawotICAgICAgICAgICAgKCspIFR4UnhDcGx0Q2FsbGJhY2sgICAgICA6IEkyUyBUeFJ4IENvbXBsZXRlZCBjYWxsYmFjawotICAgICAgICAgICAgKCspIFR4SGFsZkNwbHRDYWxsYmFjayAgICA6IEkyUyBUeCBIYWxmIENvbXBsZXRlZCBjYWxsYmFjawotICAgICAgICAgICAgKCspIFJ4SGFsZkNwbHRDYWxsYmFjayAgICA6IEkyUyBSeCBIYWxmIENvbXBsZXRlZCBjYWxsYmFjawotICAgICAgICAgICAgKCspIEVycm9yQ2FsbGJhY2sgICAgICAgICA6IEkyUyBFcnJvciBjYWxsYmFjawotICAgICAgICAgICAgKCspIE1zcEluaXRDYWxsYmFjayAgICAgICA6IEkyUyBNc3AgSW5pdCBjYWxsYmFjawotICAgICAgICAgICAgKCspIE1zcERlSW5pdENhbGxiYWNrICAgICA6IEkyUyBNc3AgRGVJbml0IGNhbGxiYWNrCisgICAgICAgICAgICAoKyspIFR4Q3BsdENhbGxiYWNrICAgICAgICA6IEkyUyBUeCBDb21wbGV0ZWQgY2FsbGJhY2sKKyAgICAgICAgICAgICgrKykgUnhDcGx0Q2FsbGJhY2sgICAgICAgIDogSTJTIFJ4IENvbXBsZXRlZCBjYWxsYmFjaworICAgICAgICAgICAgKCsrKSBUeFJ4Q3BsdENhbGxiYWNrICAgICAgOiBJMlMgVHhSeCBDb21wbGV0ZWQgY2FsbGJhY2sKKyAgICAgICAgICAgICgrKykgVHhIYWxmQ3BsdENhbGxiYWNrICAgIDogSTJTIFR4IEhhbGYgQ29tcGxldGVkIGNhbGxiYWNrCisgICAgICAgICAgICAoKyspIFJ4SGFsZkNwbHRDYWxsYmFjayAgICA6IEkyUyBSeCBIYWxmIENvbXBsZXRlZCBjYWxsYmFjaworICAgICAgICAgICAgKCsrKSBFcnJvckNhbGxiYWNrICAgICAgICAgOiBJMlMgRXJyb3IgY2FsbGJhY2sKKyAgICAgICAgICAgICgrKykgTXNwSW5pdENhbGxiYWNrICAgICAgIDogSTJTIE1zcCBJbml0IGNhbGxiYWNrCisgICAgICAgICAgICAoKyspIE1zcERlSW5pdENhbGxiYWNrICAgICA6IEkyUyBNc3AgRGVJbml0IGNhbGxiYWNrCiAgICAgICAgICAgVGhpcyBmdW5jdGlvbiB0YWtlcyBhcyBwYXJhbWV0ZXJzIHRoZSBIQUwgcGVyaXBoZXJhbCBoYW5kbGUsIHRoZSBDYWxsYmFjayBJRAogICAgICAgICAgIGFuZCBhIHBvaW50ZXIgdG8gdGhlIHVzZXIgY2FsbGJhY2sgZnVuY3Rpb24uCiAKQEAgLTEzMCwxNSArMTMwLDE2IEBACiAgICAgICAgICAgSEFMX0kyU19VblJlZ2lzdGVyQ2FsbGJhY2sgdGFrZXMgYXMgcGFyYW1ldGVycyB0aGUgSEFMIHBlcmlwaGVyYWwgaGFuZGxlLAogICAgICAgICAgIGFuZCB0aGUgQ2FsbGJhY2sgSUQuCiAgICAgICAgICAgVGhpcyBmdW5jdGlvbiBhbGxvd3MgdG8gcmVzZXQgZm9sbG93aW5nIGNhbGxiYWNrczoKLSAgICAgICAgICAgICgrKSBUeENwbHRDYWxsYmFjayAgICAgICAgOiBJMlMgVHggQ29tcGxldGVkIGNhbGxiYWNrCi0gICAgICAgICAgICAoKykgUnhDcGx0Q2FsbGJhY2sgICAgICAgIDogSTJTIFJ4IENvbXBsZXRlZCBjYWxsYmFjawotICAgICAgICAgICAgKCspIFR4UnhDcGx0Q2FsbGJhY2sgICAgICA6IEkyUyBUeFJ4IENvbXBsZXRlZCBjYWxsYmFjawotICAgICAgICAgICAgKCspIFR4SGFsZkNwbHRDYWxsYmFjayAgICA6IEkyUyBUeCBIYWxmIENvbXBsZXRlZCBjYWxsYmFjawotICAgICAgICAgICAgKCspIFJ4SGFsZkNwbHRDYWxsYmFjayAgICA6IEkyUyBSeCBIYWxmIENvbXBsZXRlZCBjYWxsYmFjawotICAgICAgICAgICAgKCspIEVycm9yQ2FsbGJhY2sgICAgICAgICA6IEkyUyBFcnJvciBjYWxsYmFjawotICAgICAgICAgICAgKCspIE1zcEluaXRDYWxsYmFjayAgICAgICA6IEkyUyBNc3AgSW5pdCBjYWxsYmFjawotICAgICAgICAgICAgKCspIE1zcERlSW5pdENhbGxiYWNrICAgICA6IEkyUyBNc3AgRGVJbml0IGNhbGxiYWNrCisgICAgICAgICAgICAoKyspIFR4Q3BsdENhbGxiYWNrICAgICAgICA6IEkyUyBUeCBDb21wbGV0ZWQgY2FsbGJhY2sKKyAgICAgICAgICAgICgrKykgUnhDcGx0Q2FsbGJhY2sgICAgICAgIDogSTJTIFJ4IENvbXBsZXRlZCBjYWxsYmFjaworICAgICAgICAgICAgKCsrKSBUeFJ4Q3BsdENhbGxiYWNrICAgICAgOiBJMlMgVHhSeCBDb21wbGV0ZWQgY2FsbGJhY2sKKyAgICAgICAgICAgICgrKykgVHhIYWxmQ3BsdENhbGxiYWNrICAgIDogSTJTIFR4IEhhbGYgQ29tcGxldGVkIGNhbGxiYWNrCisgICAgICAgICAgICAoKyspIFJ4SGFsZkNwbHRDYWxsYmFjayAgICA6IEkyUyBSeCBIYWxmIENvbXBsZXRlZCBjYWxsYmFjaworICAgICAgICAgICAgKCsrKSBFcnJvckNhbGxiYWNrICAgICAgICAgOiBJMlMgRXJyb3IgY2FsbGJhY2sKKyAgICAgICAgICAgICgrKykgTXNwSW5pdENhbGxiYWNrICAgICAgIDogSTJTIE1zcCBJbml0IGNhbGxiYWNrCisgICAgICAgICAgICAoKyspIE1zcERlSW5pdENhbGxiYWNrICAgICA6IEkyUyBNc3AgRGVJbml0IGNhbGxiYWNrCiAKKyAgICAgICBbLi5dCiAgICAgICAgQnkgZGVmYXVsdCwgYWZ0ZXIgdGhlIEhBTF9JMlNfSW5pdCgpIGFuZCB3aGVuIHRoZSBzdGF0ZSBpcyBIQUxfSTJTX1NUQVRFX1JFU0VUCiAgICAgICAgYWxsIGNhbGxiYWNrcyBhcmUgc2V0IHRvIHRoZSBjb3JyZXNwb25kaW5nIHdlYWsgZnVuY3Rpb25zOgogICAgICAgIGV4YW1wbGVzIEhBTF9JMlNfTWFzdGVyVHhDcGx0Q2FsbGJhY2soKSwgSEFMX0kyU19NYXN0ZXJSeENwbHRDYWxsYmFjaygpLgpAQCAtMTQ4LDYgKzE0OSw3IEBACiAgICAgICAgSWYgTXNwSW5pdCBvciBNc3BEZUluaXQgYXJlIG5vdCBudWxsLCB0aGUgSEFMX0kyU19Jbml0KCkvIEhBTF9JMlNfRGVJbml0KCkKICAgICAgICBrZWVwIGFuZCB1c2UgdGhlIHVzZXIgTXNwSW5pdC9Nc3BEZUluaXQgY2FsbGJhY2tzIChyZWdpc3RlcmVkIGJlZm9yZWhhbmQpIHdoYXRldmVyIHRoZSBzdGF0ZS4KIAorICAgICAgIFsuLl0KICAgICAgICBDYWxsYmFja3MgY2FuIGJlIHJlZ2lzdGVyZWQvdW5yZWdpc3RlcmVkIGluIEhBTF9JMlNfU1RBVEVfUkVBRFkgc3RhdGUgb25seS4KICAgICAgICBFeGNlcHRpb24gZG9uZSBNc3BJbml0L01zcERlSW5pdCBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgcmVnaXN0ZXJlZC91bnJlZ2lzdGVyZWQKICAgICAgICBpbiBIQUxfSTJTX1NUQVRFX1JFQURZIG9yIEhBTF9JMlNfU1RBVEVfUkVTRVQgc3RhdGUsCkBAIC0xNTYsNyArMTU4LDggQEAKICAgICAgICB1c2luZyBIQUxfSTJTX1JlZ2lzdGVyQ2FsbGJhY2soKSBiZWZvcmUgY2FsbGluZyBIQUxfSTJTX0RlSW5pdCgpCiAgICAgICAgb3IgSEFMX0kyU19Jbml0KCkgZnVuY3Rpb24uCiAKLSAgICAgICBXaGVuIFRoZSBjb21waWxhdGlvbiBkZWZpbmUgVVNFX0hBTF9JMlNfUkVHSVNURVJfQ0FMTEJBQ0tTIGlzIHNldCB0byAwIG9yCisgICAgICAgWy4uXQorICAgICAgIFdoZW4gdGhlIGNvbXBpbGF0aW9uIGRlZmluZSBVU0VfSEFMX0kyU19SRUdJU1RFUl9DQUxMQkFDS1MgaXMgc2V0IHRvIDAgb3IKICAgICAgICBub3QgZGVmaW5lZCwgdGhlIGNhbGxiYWNrIHJlZ2lzdGVyaW5nIGZlYXR1cmUgaXMgbm90IGF2YWlsYWJsZQogICAgICAgIGFuZCB3ZWFrIChzdXJjaGFyZ2VkKSBjYWxsYmFja3MgYXJlIHVzZWQuCiAKQEAgLTQyOCw3ICs0MzEsNyBAQAogICAgIC8qIFdyaXRlIHRvIFNQSXggSTJTQ0ZHUiAqLwogICAgIFNFVF9CSVQoaGkycy0+SW5zdGFuY2UtPkkyU0NGR1IsIFNQSV9JMlNDRkdSX0FTVFJURU4pOwogICB9Ci0jZW5kaWYKKyNlbmRpZiAvKiBTUElfSTJTQ0ZHUl9BU1RSVEVOICovCiAKICNpZiBkZWZpbmVkIChTUElfSTJTX0ZVTExEVVBMRVhfU1VQUE9SVCkKIApAQCAtNTYxLDcgKzU2NCw4IEBACiAgICogQHBhcmFtICBwQ2FsbGJhY2sgcG9pbnRlciB0byB0aGUgQ2FsbGJhY2sgZnVuY3Rpb24KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9JMlNfUmVnaXN0ZXJDYWxsYmFjayhJMlNfSGFuZGxlVHlwZURlZiAqaGkycywgSEFMX0kyU19DYWxsYmFja0lEVHlwZURlZiBDYWxsYmFja0lELCBwSTJTX0NhbGxiYWNrVHlwZURlZiBwQ2FsbGJhY2spCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfSTJTX1JlZ2lzdGVyQ2FsbGJhY2soSTJTX0hhbmRsZVR5cGVEZWYgKmhpMnMsIEhBTF9JMlNfQ2FsbGJhY2tJRFR5cGVEZWYgQ2FsbGJhY2tJRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwSTJTX0NhbGxiYWNrVHlwZURlZiBwQ2FsbGJhY2spCiB7CiAgIEhBTF9TdGF0dXNUeXBlRGVmIHN0YXR1cyA9IEhBTF9PSzsKIApAQCAtOTEwLDcgKzkxNCw4IEBACiAgIH0KIAogICAvKiBDaGVjayBpZiBTbGF2ZSBtb2RlIGlzIHNlbGVjdGVkICovCi0gIGlmICgoKHRtcHJlZ19jZmdyICYgU1BJX0kyU0NGR1JfSTJTQ0ZHKSA9PSBJMlNfTU9ERV9TTEFWRV9UWCkgfHwgKCh0bXByZWdfY2ZnciAmIFNQSV9JMlNDRkdSX0kyU0NGRykgPT0gSTJTX01PREVfU0xBVkVfUlgpKQorICBpZiAoKCh0bXByZWdfY2ZnciAmIFNQSV9JMlNDRkdSX0kyU0NGRykgPT0gSTJTX01PREVfU0xBVkVfVFgpCisgICAgICB8fCAoKHRtcHJlZ19jZmdyICYgU1BJX0kyU0NGR1JfSTJTQ0ZHKSA9PSBJMlNfTU9ERV9TTEFWRV9SWCkpCiAgIHsKICAgICAvKiBXYWl0IHVudGlsIEJ1c3kgZmxhZyBpcyByZXNldCAqLwogICAgIGlmIChJMlNfV2FpdEZsYWdTdGF0ZVVudGlsVGltZW91dChoaTJzLCBJMlNfRkxBR19CU1ksIFJFU0VULCBUaW1lb3V0KSAhPSBIQUxfT0spCkBAIC0xMjE5LDcgKzEyMjQsMTAgQEAKICAgaGkycy0+aGRtYXR4LT5YZmVyRXJyb3JDYWxsYmFjayA9IEkyU19ETUFFcnJvcjsKIAogICAvKiBFbmFibGUgdGhlIFR4IERNQSBTdHJlYW0vQ2hhbm5lbCAqLwotICBpZiAoSEFMX09LICE9IEhBTF9ETUFfU3RhcnRfSVQoaGkycy0+aGRtYXR4LCAodWludDMyX3QpaGkycy0+cFR4QnVmZlB0ciwgKHVpbnQzMl90KSZoaTJzLT5JbnN0YW5jZS0+RFIsIGhpMnMtPlR4WGZlclNpemUpKQorICBpZiAoSEFMX09LICE9IEhBTF9ETUFfU3RhcnRfSVQoaGkycy0+aGRtYXR4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90KWhpMnMtPnBUeEJ1ZmZQdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDMyX3QpJmhpMnMtPkluc3RhbmNlLT5EUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpMnMtPlR4WGZlclNpemUpKQogICB7CiAgICAgLyogVXBkYXRlIFNQSSBlcnJvciBjb2RlICovCiAgICAgU0VUX0JJVChoaTJzLT5FcnJvckNvZGUsIEhBTF9JMlNfRVJST1JfRE1BKTsKQEAgLTEzMTUsNyArMTMyMyw4IEBACiAgIH0KIAogICAvKiBFbmFibGUgdGhlIFJ4IERNQSBTdHJlYW0vQ2hhbm5lbCAqLwotICBpZiAoSEFMX09LICE9IEhBTF9ETUFfU3RhcnRfSVQoaGkycy0+aGRtYXJ4LCAodWludDMyX3QpJmhpMnMtPkluc3RhbmNlLT5EUiwgKHVpbnQzMl90KWhpMnMtPnBSeEJ1ZmZQdHIsIGhpMnMtPlJ4WGZlclNpemUpKQorICBpZiAoSEFMX09LICE9IEhBTF9ETUFfU3RhcnRfSVQoaGkycy0+aGRtYXJ4LCAodWludDMyX3QpJmhpMnMtPkluc3RhbmNlLT5EUiwgKHVpbnQzMl90KWhpMnMtPnBSeEJ1ZmZQdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaTJzLT5SeFhmZXJTaXplKSkKICAgewogICAgIC8qIFVwZGF0ZSBTUEkgZXJyb3IgY29kZSAqLwogICAgIFNFVF9CSVQoaGkycy0+RXJyb3JDb2RlLCBIQUxfSTJTX0VSUk9SX0RNQSk7CkBAIC0xODk2LDcgKzE5MDUsOCBAQAogICAqIEBwYXJhbSAgVGltZW91dCBEdXJhdGlvbiBvZiB0aGUgdGltZW91dAogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwotc3RhdGljIEhBTF9TdGF0dXNUeXBlRGVmIEkyU19XYWl0RmxhZ1N0YXRlVW50aWxUaW1lb3V0KEkyU19IYW5kbGVUeXBlRGVmICpoaTJzLCB1aW50MzJfdCBGbGFnLCBGbGFnU3RhdHVzIFN0YXRlLCB1aW50MzJfdCBUaW1lb3V0KQorc3RhdGljIEhBTF9TdGF0dXNUeXBlRGVmIEkyU19XYWl0RmxhZ1N0YXRlVW50aWxUaW1lb3V0KEkyU19IYW5kbGVUeXBlRGVmICpoaTJzLCB1aW50MzJfdCBGbGFnLCBGbGFnU3RhdHVzIFN0YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IFRpbWVvdXQpCiB7CiAgIHVpbnQzMl90IHRpY2tzdGFydDsKIApkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjR4eF9oYWxfaTJzX2V4LmMgYi9TcmMvc3RtMzJmNHh4X2hhbF9pMnNfZXguYwppbmRleCBhYmM5NjBmLi4xMWNmYjgyIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmNHh4X2hhbF9pMnNfZXguYworKysgYi9TcmMvc3RtMzJmNHh4X2hhbF9pMnNfZXguYwpAQCAtMTI2LDcgKzEyNiw3IEBACiBzdGF0aWMgdm9pZCBJMlNFeF9UeElTUl9JMlMoSTJTX0hhbmRsZVR5cGVEZWYgKmhpMnMpOwogc3RhdGljIHZvaWQgSTJTRXhfVHhJU1JfSTJTRXh0KEkyU19IYW5kbGVUeXBlRGVmICpoaTJzKTsKIHN0YXRpYyBIQUxfU3RhdHVzVHlwZURlZiBJMlNFeF9GdWxsRHVwbGV4V2FpdEZsYWdTdGF0ZVVudGlsVGltZW91dChJMlNfSGFuZGxlVHlwZURlZiAqaGkycywgdWludDMyX3QgRmxhZywKLSAgICB1aW50MzJfdCBTdGF0ZSwgdWludDMyX3QgVGltZW91dCwgSTJTX1VzZVR5cGVEZWYgaTJzVXNlZCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgU3RhdGUsIHVpbnQzMl90IFRpbWVvdXQsIEkyU19Vc2VUeXBlRGVmIGkyc1VzZWQpOwogLyoqCiAgICogQH0KICAgKi8KQEAgLTEwODgsNyArMTA4OCw3IEBACiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCiBzdGF0aWMgSEFMX1N0YXR1c1R5cGVEZWYgSTJTRXhfRnVsbER1cGxleFdhaXRGbGFnU3RhdGVVbnRpbFRpbWVvdXQoSTJTX0hhbmRsZVR5cGVEZWYgKmhpMnMsIHVpbnQzMl90IEZsYWcsCi0gICAgdWludDMyX3QgU3RhdGUsIHVpbnQzMl90IFRpbWVvdXQsIEkyU19Vc2VUeXBlRGVmIGkyc1VzZWQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgU3RhdGUsIHVpbnQzMl90IFRpbWVvdXQsIEkyU19Vc2VUeXBlRGVmIGkyc1VzZWQpCiB7CiAgIHVpbnQzMl90IHRpY2tzdGFydCA9IEhBTF9HZXRUaWNrKCk7CiAKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmY0eHhfaGFsX2lyZGEuYyBiL1NyYy9zdG0zMmY0eHhfaGFsX2lyZGEuYwppbmRleCA5N2IxNDc1Li41MTFhNWJmIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmNHh4X2hhbF9pcmRhLmMKKysrIGIvU3JjL3N0bTMyZjR4eF9oYWxfaXJkYS5jCkBAIC03NTYsMTIgKzc1NiwxNSBAQAogICAqLwogCiAvKioKLSAgKiBAYnJpZWYgIFNlbmRzIGFuIGFtb3VudCBvZiBkYXRhIGluIGJsb2NraW5nIG1vZGUuCi0gICogQHBhcmFtICBoaXJkYSAgUG9pbnRlciB0byBhIElSREFfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucwotICAqICAgICAgICAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciB0aGUgc3BlY2lmaWVkIElSREEgbW9kdWxlLgotICAqIEBwYXJhbSAgcERhdGEgUG9pbnRlciB0byBkYXRhIGJ1ZmZlcgotICAqIEBwYXJhbSAgU2l6ZSBBbW91bnQgb2YgZGF0YSB0byBiZSBzZW50Ci0gICogQHBhcmFtICBUaW1lb3V0IFNwZWNpZnkgdGltZW91dCB2YWx1ZQorICAqIEBicmllZiBTZW5kcyBhbiBhbW91bnQgb2YgZGF0YSBpbiBibG9ja2luZyBtb2RlLgorICAqIEBub3RlICBXaGVuIFVBUlQgcGFyaXR5IGlzIG5vdCBlbmFibGVkIChQQ0UgPSAwKSwgYW5kIFdvcmQgTGVuZ3RoIGlzIGNvbmZpZ3VyZWQgdG8gOSBiaXRzIChNMS1NMCA9IDAxKSwKKyAgKiAgICAgICAgdGhlIHNlbnQgZGF0YSBpcyBoYW5kbGVkIGFzIGEgc2V0IG9mIHUxNi4gSW4gdGhpcyBjYXNlLCBTaXplIG11c3QgcmVmbGVjdCB0aGUgbnVtYmVyCisgICogICAgICAgIG9mIHUxNiBhdmFpbGFibGUgdGhyb3VnaCBwRGF0YS4KKyAgKiBAcGFyYW0gaGlyZGEgUG9pbnRlciB0byBhIElSREFfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucworICAqICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBJUkRBIG1vZHVsZS4KKyAgKiBAcGFyYW0gcERhdGEgUG9pbnRlciB0byBkYXRhIGJ1ZmZlciAodTggb3IgdTE2IGRhdGEgZWxlbWVudHMpLgorICAqIEBwYXJhbSBTaXplICBBbW91bnQgb2YgZGF0YSBlbGVtZW50cyAodTggb3IgdTE2KSB0byBiZSBzZW50LgorICAqIEBwYXJhbSBUaW1lb3V0IFNwZWNpZnkgdGltZW91dCB2YWx1ZS4KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9JUkRBX1RyYW5zbWl0KElSREFfSGFuZGxlVHlwZURlZiAqaGlyZGEsIHVpbnQ4X3QgKnBEYXRhLCB1aW50MTZfdCBTaXplLCB1aW50MzJfdCBUaW1lb3V0KQpAQCAtODM4LDEyICs4NDEsMTUgQEAKIH0KIAogLyoqCi0gICogQGJyaWVmICBSZWNlaXZlIGFuIGFtb3VudCBvZiBkYXRhIGluIGJsb2NraW5nIG1vZGUuCi0gICogQHBhcmFtICBoaXJkYSAgUG9pbnRlciB0byBhIElSREFfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucwotICAqICAgICAgICAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciB0aGUgc3BlY2lmaWVkIElSREEgbW9kdWxlLgotICAqIEBwYXJhbSAgcERhdGEgUG9pbnRlciB0byBkYXRhIGJ1ZmZlcgotICAqIEBwYXJhbSAgU2l6ZSBBbW91bnQgb2YgZGF0YSB0byBiZSByZWNlaXZlZAotICAqIEBwYXJhbSAgVGltZW91dCBTcGVjaWZ5IHRpbWVvdXQgdmFsdWUKKyAgKiBAYnJpZWYgUmVjZWl2ZSBhbiBhbW91bnQgb2YgZGF0YSBpbiBibG9ja2luZyBtb2RlLgorICAqIEBub3RlICBXaGVuIFVBUlQgcGFyaXR5IGlzIG5vdCBlbmFibGVkIChQQ0UgPSAwKSwgYW5kIFdvcmQgTGVuZ3RoIGlzIGNvbmZpZ3VyZWQgdG8gOSBiaXRzIChNMS1NMCA9IDAxKSwKKyAgKiAgICAgICAgdGhlIHJlY2VpdmVkIGRhdGEgaXMgaGFuZGxlZCBhcyBhIHNldCBvZiB1MTYuIEluIHRoaXMgY2FzZSwgU2l6ZSBtdXN0IHJlZmxlY3QgdGhlIG51bWJlcgorICAqICAgICAgICBvZiB1MTYgYXZhaWxhYmxlIHRocm91Z2ggcERhdGEuCisgICogQHBhcmFtIGhpcmRhIFBvaW50ZXIgdG8gYSBJUkRBX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKKyAgKiAgICAgICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIHRoZSBzcGVjaWZpZWQgSVJEQSBtb2R1bGUuCisgICogQHBhcmFtIHBEYXRhIFBvaW50ZXIgdG8gZGF0YSBidWZmZXIgKHU4IG9yIHUxNiBkYXRhIGVsZW1lbnRzKS4KKyAgKiBAcGFyYW0gU2l6ZSAgQW1vdW50IG9mIGRhdGEgZWxlbWVudHMgKHU4IG9yIHUxNikgdG8gYmUgcmVjZWl2ZWQuCisgICogQHBhcmFtIFRpbWVvdXQgU3BlY2lmeSB0aW1lb3V0IHZhbHVlCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfSVJEQV9SZWNlaXZlKElSREFfSGFuZGxlVHlwZURlZiAqaGlyZGEsIHVpbnQ4X3QgKnBEYXRhLCB1aW50MTZfdCBTaXplLCB1aW50MzJfdCBUaW1lb3V0KQpAQCAtOTI2LDExICs5MzIsMTQgQEAKIH0KIAogLyoqCi0gICogQGJyaWVmICBTZW5kIGFuIGFtb3VudCBvZiBkYXRhIGluIG5vbiBibG9ja2luZyBtb2RlLgotICAqIEBwYXJhbSAgaGlyZGEgIFBvaW50ZXIgdG8gYSBJUkRBX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKLSAgKiAgICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBJUkRBIG1vZHVsZS4KLSAgKiBAcGFyYW0gIHBEYXRhIFBvaW50ZXIgdG8gZGF0YSBidWZmZXIKLSAgKiBAcGFyYW0gIFNpemUgQW1vdW50IG9mIGRhdGEgdG8gYmUgc2VudAorICAqIEBicmllZiBTZW5kIGFuIGFtb3VudCBvZiBkYXRhIGluIG5vbiBibG9ja2luZyBtb2RlLgorICAqIEBub3RlICBXaGVuIFVBUlQgcGFyaXR5IGlzIG5vdCBlbmFibGVkIChQQ0UgPSAwKSwgYW5kIFdvcmQgTGVuZ3RoIGlzIGNvbmZpZ3VyZWQgdG8gOSBiaXRzIChNMS1NMCA9IDAxKSwKKyAgKiAgICAgICAgdGhlIHNlbnQgZGF0YSBpcyBoYW5kbGVkIGFzIGEgc2V0IG9mIHUxNi4gSW4gdGhpcyBjYXNlLCBTaXplIG11c3QgcmVmbGVjdCB0aGUgbnVtYmVyCisgICogICAgICAgIG9mIHUxNiBhdmFpbGFibGUgdGhyb3VnaCBwRGF0YS4KKyAgKiBAcGFyYW0gaGlyZGEgUG9pbnRlciB0byBhIElSREFfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucworICAqICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBJUkRBIG1vZHVsZS4KKyAgKiBAcGFyYW0gcERhdGEgUG9pbnRlciB0byBkYXRhIGJ1ZmZlciAodTggb3IgdTE2IGRhdGEgZWxlbWVudHMpLgorICAqIEBwYXJhbSBTaXplICBBbW91bnQgb2YgZGF0YSBlbGVtZW50cyAodTggb3IgdTE2KSB0byBiZSBzZW50LgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0lSREFfVHJhbnNtaXRfSVQoSVJEQV9IYW5kbGVUeXBlRGVmICpoaXJkYSwgdWludDhfdCAqcERhdGEsIHVpbnQxNl90IFNpemUpCkBAIC05NjgsMTEgKzk3NywxNCBAQAogfQogCiAvKioKLSAgKiBAYnJpZWYgIFJlY2VpdmUgYW4gYW1vdW50IG9mIGRhdGEgaW4gbm9uIGJsb2NraW5nIG1vZGUuCi0gICogQHBhcmFtICBoaXJkYSAgUG9pbnRlciB0byBhIElSREFfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucwotICAqICAgICAgICAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciB0aGUgc3BlY2lmaWVkIElSREEgbW9kdWxlLgotICAqIEBwYXJhbSAgcERhdGEgUG9pbnRlciB0byBkYXRhIGJ1ZmZlcgotICAqIEBwYXJhbSAgU2l6ZSBBbW91bnQgb2YgZGF0YSB0byBiZSByZWNlaXZlZAorICAqIEBicmllZiBSZWNlaXZlIGFuIGFtb3VudCBvZiBkYXRhIGluIG5vbiBibG9ja2luZyBtb2RlLgorICAqIEBub3RlICBXaGVuIFVBUlQgcGFyaXR5IGlzIG5vdCBlbmFibGVkIChQQ0UgPSAwKSwgYW5kIFdvcmQgTGVuZ3RoIGlzIGNvbmZpZ3VyZWQgdG8gOSBiaXRzIChNMS1NMCA9IDAxKSwKKyAgKiAgICAgICAgdGhlIHJlY2VpdmVkIGRhdGEgaXMgaGFuZGxlZCBhcyBhIHNldCBvZiB1MTYuIEluIHRoaXMgY2FzZSwgU2l6ZSBtdXN0IHJlZmxlY3QgdGhlIG51bWJlcgorICAqICAgICAgICBvZiB1MTYgYXZhaWxhYmxlIHRocm91Z2ggcERhdGEuCisgICogQHBhcmFtIGhpcmRhIFBvaW50ZXIgdG8gYSBJUkRBX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKKyAgKiAgICAgICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIHRoZSBzcGVjaWZpZWQgSVJEQSBtb2R1bGUuCisgICogQHBhcmFtIHBEYXRhIFBvaW50ZXIgdG8gZGF0YSBidWZmZXIgKHU4IG9yIHUxNiBkYXRhIGVsZW1lbnRzKS4KKyAgKiBAcGFyYW0gU2l6ZSAgQW1vdW50IG9mIGRhdGEgZWxlbWVudHMgKHU4IG9yIHUxNikgdG8gYmUgcmVjZWl2ZWQuCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfSVJEQV9SZWNlaXZlX0lUKElSREFfSGFuZGxlVHlwZURlZiAqaGlyZGEsIHVpbnQ4X3QgKnBEYXRhLCB1aW50MTZfdCBTaXplKQpAQCAtMTAxMywxMSArMTAyNSwxNCBAQAogfQogCiAvKioKLSAgKiBAYnJpZWYgIFNlbmQgYW4gYW1vdW50IG9mIGRhdGEgaW4gbm9uIGJsb2NraW5nIG1vZGUuCi0gICogQHBhcmFtICBoaXJkYSAgUG9pbnRlciB0byBhIElSREFfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucwotICAqICAgICAgICAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciB0aGUgc3BlY2lmaWVkIElSREEgbW9kdWxlLgotICAqIEBwYXJhbSAgcERhdGEgUG9pbnRlciB0byBkYXRhIGJ1ZmZlcgotICAqIEBwYXJhbSAgU2l6ZSBBbW91bnQgb2YgZGF0YSB0byBiZSBzZW50CisgICogQGJyaWVmIFNlbmQgYW4gYW1vdW50IG9mIGRhdGEgaW4gRE1BIG1vZGUuCisgICogQG5vdGUgIFdoZW4gVUFSVCBwYXJpdHkgaXMgbm90IGVuYWJsZWQgKFBDRSA9IDApLCBhbmQgV29yZCBMZW5ndGggaXMgY29uZmlndXJlZCB0byA5IGJpdHMgKE0xLU0wID0gMDEpLAorICAqICAgICAgICB0aGUgc2VudCBkYXRhIGlzIGhhbmRsZWQgYXMgYSBzZXQgb2YgdTE2LiBJbiB0aGlzIGNhc2UsIFNpemUgbXVzdCByZWZsZWN0IHRoZSBudW1iZXIKKyAgKiAgICAgICAgb2YgdTE2IGF2YWlsYWJsZSB0aHJvdWdoIHBEYXRhLgorICAqIEBwYXJhbSBoaXJkYSBQb2ludGVyIHRvIGEgSVJEQV9IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCisgICogICAgICAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciB0aGUgc3BlY2lmaWVkIElSREEgbW9kdWxlLgorICAqIEBwYXJhbSBwRGF0YSBQb2ludGVyIHRvIGRhdGEgYnVmZmVyICh1OCBvciB1MTYgZGF0YSBlbGVtZW50cykuCisgICogQHBhcmFtIFNpemUgIEFtb3VudCBvZiBkYXRhIGVsZW1lbnRzICh1OCBvciB1MTYpIHRvIGJlIHNlbnQuCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfSVJEQV9UcmFuc21pdF9ETUEoSVJEQV9IYW5kbGVUeXBlRGVmICpoaXJkYSwgdWludDhfdCAqcERhdGEsIHVpbnQxNl90IFNpemUpCkBAIC0xMDc3LDExICsxMDkyLDE0IEBACiB9CiAKIC8qKgotICAqIEBicmllZiAgUmVjZWl2ZXMgYW4gYW1vdW50IG9mIGRhdGEgaW4gbm9uIGJsb2NraW5nIG1vZGUuCi0gICogQHBhcmFtICBoaXJkYSAgUG9pbnRlciB0byBhIElSREFfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucwotICAqICAgICAgICAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciB0aGUgc3BlY2lmaWVkIElSREEgbW9kdWxlLgotICAqIEBwYXJhbSAgcERhdGEgUG9pbnRlciB0byBkYXRhIGJ1ZmZlcgotICAqIEBwYXJhbSAgU2l6ZSBBbW91bnQgb2YgZGF0YSB0byBiZSByZWNlaXZlZAorICAqIEBicmllZiBSZWNlaXZlcyBhbiBhbW91bnQgb2YgZGF0YSBpbiBETUEgbW9kZS4KKyAgKiBAbm90ZSAgV2hlbiBVQVJUIHBhcml0eSBpcyBub3QgZW5hYmxlZCAoUENFID0gMCksIGFuZCBXb3JkIExlbmd0aCBpcyBjb25maWd1cmVkIHRvIDkgYml0cyAoTTEtTTAgPSAwMSksCisgICogICAgICAgIHRoZSByZWNlaXZlZCBkYXRhIGlzIGhhbmRsZWQgYXMgYSBzZXQgb2YgdTE2LiBJbiB0aGlzIGNhc2UsIFNpemUgbXVzdCByZWZsZWN0IHRoZSBudW1iZXIKKyAgKiAgICAgICAgb2YgdTE2IGF2YWlsYWJsZSB0aHJvdWdoIHBEYXRhLgorICAqIEBwYXJhbSBoaXJkYSBQb2ludGVyIHRvIGEgSVJEQV9IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCisgICogICAgICAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciB0aGUgc3BlY2lmaWVkIElSREEgbW9kdWxlLgorICAqIEBwYXJhbSBwRGF0YSBQb2ludGVyIHRvIGRhdGEgYnVmZmVyICh1OCBvciB1MTYgZGF0YSBlbGVtZW50cykuCisgICogQHBhcmFtIFNpemUgIEFtb3VudCBvZiBkYXRhIGVsZW1lbnRzICh1OCBvciB1MTYpIHRvIGJlIHJlY2VpdmVkLgogICAqIEBub3RlICAgV2hlbiB0aGUgSVJEQSBwYXJpdHkgaXMgZW5hYmxlZCAoUENFID0gMSkgdGhlIGRhdGEgcmVjZWl2ZWQgY29udGFpbiB0aGUgcGFyaXR5IGJpdC4KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KQEAgLTE3NDUsNyArMTc2Myw3IEBACiAgICAgfQogCiAgICAgLyogSVJEQSBPdmVyLVJ1biBpbnRlcnJ1cHQgb2NjdXJyZWQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotICAgIGlmICgoKGlzcmZsYWdzICYgVVNBUlRfU1JfT1JFKSAhPSBSRVNFVCkgJiYgKChjcjNpdHMgJiBVU0FSVF9DUjNfRUlFKSAhPSBSRVNFVCkpCisgICAgaWYgKCgoaXNyZmxhZ3MgJiBVU0FSVF9TUl9PUkUpICE9IFJFU0VUKSAmJiAoKChjcjFpdHMgJiBVU0FSVF9DUjFfUlhORUlFKSAhPSBSRVNFVCkgfHwgKChjcjNpdHMgJiBVU0FSVF9DUjNfRUlFKSAhPSBSRVNFVCkpKQogICAgIHsKICAgICAgIGhpcmRhLT5FcnJvckNvZGUgfD0gSEFMX0lSREFfRVJST1JfT1JFOwogICAgIH0KQEAgLTI1ODIsNiArMjYwMCw4IEBACiAgICovCiBzdGF0aWMgdm9pZCBJUkRBX1NldENvbmZpZyhJUkRBX0hhbmRsZVR5cGVEZWYgKmhpcmRhKQogeworICB1aW50MzJfdCBwY2xrOworCiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19JUkRBX0lOU1RBTkNFKGhpcmRhLT5JbnN0YW5jZSkpOwogICBhc3NlcnRfcGFyYW0oSVNfSVJEQV9CQVVEUkFURShoaXJkYS0+SW5pdC5CYXVkUmF0ZSkpOwpAQCAtMjYxMCwyMCArMjYzMCwyOSBAQAogICBDTEVBUl9CSVQoaGlyZGEtPkluc3RhbmNlLT5DUjMsIChVU0FSVF9DUjNfUlRTRSB8IFVTQVJUX0NSM19DVFNFKSk7CiAKICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBVU0FSVCBCUlIgQ29uZmlndXJhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0jaWYgZGVmaW5lZChVU0FSVDYpCisjaWYgZGVmaW5lZChVU0FSVDYpICYmIGRlZmluZWQoVUFSVDkpICYmIGRlZmluZWQoVUFSVDEwKQorICAgaWYgKChoaXJkYS0+SW5zdGFuY2UgPT0gVVNBUlQxKSB8fCAoaGlyZGEtPkluc3RhbmNlID09IFVTQVJUNikgfHwgKGhpcmRhLT5JbnN0YW5jZSA9PSBVQVJUOSkgfHwgKGhpcmRhLT5JbnN0YW5jZSA9PSBVQVJUMTApKQorICAgeworICAgIHBjbGsgPSBIQUxfUkNDX0dldFBDTEsyRnJlcSgpOworICAgIFNFVF9CSVQoaGlyZGEtPkluc3RhbmNlLT5CUlIsIElSREFfQlJSKHBjbGssIGhpcmRhLT5Jbml0LkJhdWRSYXRlKSk7CisgICB9CisjZWxpZiBkZWZpbmVkKFVTQVJUNikKICAgaWYoKGhpcmRhLT5JbnN0YW5jZSA9PSBVU0FSVDEpIHx8IChoaXJkYS0+SW5zdGFuY2UgPT0gVVNBUlQ2KSkKICAgewotICAgIFNFVF9CSVQoaGlyZGEtPkluc3RhbmNlLT5CUlIsIElSREFfQlJSKEhBTF9SQ0NfR2V0UENMSzJGcmVxKCksIGhpcmRhLT5Jbml0LkJhdWRSYXRlKSk7CisgICAgcGNsayA9IEhBTF9SQ0NfR2V0UENMSzJGcmVxKCk7CisgICAgU0VUX0JJVChoaXJkYS0+SW5zdGFuY2UtPkJSUiwgSVJEQV9CUlIocGNsaywgaGlyZGEtPkluaXQuQmF1ZFJhdGUpKTsKICAgfQogI2Vsc2UKICAgaWYoaGlyZGEtPkluc3RhbmNlID09IFVTQVJUMSkKICAgewotICAgIFNFVF9CSVQoaGlyZGEtPkluc3RhbmNlLT5CUlIsIElSREFfQlJSKEhBTF9SQ0NfR2V0UENMSzJGcmVxKCksIGhpcmRhLT5Jbml0LkJhdWRSYXRlKSk7CisgICAgcGNsayA9IEhBTF9SQ0NfR2V0UENMSzJGcmVxKCk7CisgICAgU0VUX0JJVChoaXJkYS0+SW5zdGFuY2UtPkJSUiwgSVJEQV9CUlIocGNsaywgaGlyZGEtPkluaXQuQmF1ZFJhdGUpKTsKICAgfQogI2VuZGlmIC8qIFVTQVJUNiAqLwogICBlbHNlCiAgIHsKLSAgICBTRVRfQklUKGhpcmRhLT5JbnN0YW5jZS0+QlJSLCBJUkRBX0JSUihIQUxfUkNDX0dldFBDTEsxRnJlcSgpLCBoaXJkYS0+SW5pdC5CYXVkUmF0ZSkpOworICAgIHBjbGsgPSBIQUxfUkNDX0dldFBDTEsxRnJlcSgpOworICAgIFNFVF9CSVQoaGlyZGEtPkluc3RhbmNlLT5CUlIsIElSREFfQlJSKHBjbGssIGhpcmRhLT5Jbml0LkJhdWRSYXRlKSk7CiAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjR4eF9oYWxfaXdkZy5jIGIvU3JjL3N0bTMyZjR4eF9oYWxfaXdkZy5jCmluZGV4IGNiNDlkYmYuLmMzNTY5NzMgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmY0eHhfaGFsX2l3ZGcuYworKysgYi9TcmMvc3RtMzJmNHh4X2hhbF9pd2RnLmMKQEAgLTQ4LDE0ICs0OCwxNCBAQAogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgWy4uXQogICAgICgjKSBVc2UgSVdERyB1c2luZyBIQUxfSVdER19Jbml0KCkgZnVuY3Rpb24gdG8gOgotICAgICAgKCspIEVuYWJsZSBpbnN0YW5jZSBieSB3cml0aW5nIFN0YXJ0IGtleXdvcmQgaW4gSVdER19LRVkgcmVnaXN0ZXIuIExTSQorICAgICAgKCsrKSBFbmFibGUgaW5zdGFuY2UgYnkgd3JpdGluZyBTdGFydCBrZXl3b3JkIGluIElXREdfS0VZIHJlZ2lzdGVyLiBMU0kKICAgICAgICAgICAgY2xvY2sgaXMgZm9yY2VkIE9OIGFuZCBJV0RHIGNvdW50ZXIgc3RhcnRzIGNvdW50aW5nIGRvd24uCi0gICAgICAoKykgRW5hYmxlIHdyaXRlIGFjY2VzcyB0byBjb25maWd1cmF0aW9uIHJlZ2lzdGVyczoKKyAgICAgICgrKykgRW5hYmxlIHdyaXRlIGFjY2VzcyB0byBjb25maWd1cmF0aW9uIHJlZ2lzdGVyczoKICAgICAgICAgICBJV0RHX1BSIGFuZCBJV0RHX1JMUi4KLSAgICAgICgrKSBDb25maWd1cmUgdGhlIElXREcgcHJlc2NhbGVyIGFuZCBjb3VudGVyIHJlbG9hZCB2YWx1ZS4gVGhpcyByZWxvYWQKKyAgICAgICgrKykgQ29uZmlndXJlIHRoZSBJV0RHIHByZXNjYWxlciBhbmQgY291bnRlciByZWxvYWQgdmFsdWUuIFRoaXMgcmVsb2FkCiAgICAgICAgICAgIHZhbHVlIHdpbGwgYmUgbG9hZGVkIGluIHRoZSBJV0RHIGNvdW50ZXIgZWFjaCB0aW1lIHRoZSB3YXRjaGRvZyBpcwogICAgICAgICAgICByZWxvYWRlZCwgdGhlbiB0aGUgSVdERyB3aWxsIHN0YXJ0IGNvdW50aW5nIGRvd24gZnJvbSB0aGlzIHZhbHVlLgotICAgICAgKCspIFdhaXQgZm9yIHN0YXR1cyBmbGFncyB0byBiZSByZXNldC4KKyAgICAgICgrKykgV2FpdCBmb3Igc3RhdHVzIGZsYWdzIHRvIGJlIHJlc2V0LgogCiAgICAgKCMpIFRoZW4gdGhlIGFwcGxpY2F0aW9uIHByb2dyYW0gbXVzdCByZWZyZXNoIHRoZSBJV0RHIGNvdW50ZXIgYXQgcmVndWxhcgogICAgICAgICBpbnRlcnZhbHMgZHVyaW5nIG5vcm1hbCBvcGVyYXRpb24gdG8gcHJldmVudCBhbiBNQ1UgcmVzZXQsIHVzaW5nCkBAIC0xMjAsOCArMTIwLDggQEAKICAgKi8KIAogLyoqIEBhZGR0b2dyb3VwIElXREdfRXhwb3J0ZWRfRnVuY3Rpb25zX0dyb3VwMQotICogIEBicmllZiAgICBJbml0aWFsaXphdGlvbiBhbmQgU3RhcnQgZnVuY3Rpb25zLgotICoKKyAgKiAgQGJyaWVmICAgIEluaXRpYWxpemF0aW9uIGFuZCBTdGFydCBmdW5jdGlvbnMuCisgICoKIEB2ZXJiYXRpbQogID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgICAgICAjIyMjIyBJbml0aWFsaXphdGlvbiBhbmQgU3RhcnQgZnVuY3Rpb25zICMjIyMjCkBAIC0xOTUsOCArMTk1LDggQEAKIAogCiAvKiogQGFkZHRvZ3JvdXAgSVdER19FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXAyCi0gKiAgQGJyaWVmICAgSU8gb3BlcmF0aW9uIGZ1bmN0aW9ucwotICoKKyAgKiAgQGJyaWVmICAgSU8gb3BlcmF0aW9uIGZ1bmN0aW9ucworICAqCiBAdmVyYmF0aW0KICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgICAgICAgICAgICAgICAgIyMjIyMgSU8gb3BlcmF0aW9uIGZ1bmN0aW9ucyAjIyMjIwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjR4eF9oYWxfbHB0aW0uYyBiL1NyYy9zdG0zMmY0eHhfaGFsX2xwdGltLmMKaW5kZXggMWQ0M2JiOC4uYWFkYWYyYSAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZjR4eF9oYWxfbHB0aW0uYworKysgYi9TcmMvc3RtMzJmNHh4X2hhbF9scHRpbS5jCkBAIC04OSwxOSArODksMTkgQEAKIAogICAgICoqKiBDYWxsYmFjayByZWdpc3RyYXRpb24gKioqCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCisgIFsuLl0KICAgVGhlIGNvbXBpbGF0aW9uIGRlZmluZSAgVVNFX0hBTF9MUFRJTV9SRUdJU1RFUl9DQUxMQkFDS1Mgd2hlbiBzZXQgdG8gMQogICBhbGxvd3MgdGhlIHVzZXIgdG8gY29uZmlndXJlIGR5bmFtaWNhbGx5IHRoZSBkcml2ZXIgY2FsbGJhY2tzLgotCisgIFsuLl0KICAgVXNlIEZ1bmN0aW9uIEByZWYgSEFMX0xQVElNX1JlZ2lzdGVyQ2FsbGJhY2soKSB0byByZWdpc3RlciBhIGNhbGxiYWNrLgogICBAcmVmIEhBTF9MUFRJTV9SZWdpc3RlckNhbGxiYWNrKCkgdGFrZXMgYXMgcGFyYW1ldGVycyB0aGUgSEFMIHBlcmlwaGVyYWwgaGFuZGxlLAogICB0aGUgQ2FsbGJhY2sgSUQgYW5kIGEgcG9pbnRlciB0byB0aGUgdXNlciBjYWxsYmFjayBmdW5jdGlvbi4KLQorICBbLi5dCiAgIFVzZSBmdW5jdGlvbiBAcmVmIEhBTF9MUFRJTV9VblJlZ2lzdGVyQ2FsbGJhY2soKSB0byByZXNldCBhIGNhbGxiYWNrIHRvIHRoZQogICBkZWZhdWx0IHdlYWsgZnVuY3Rpb24uCiAgIEByZWYgSEFMX0xQVElNX1VuUmVnaXN0ZXJDYWxsYmFjayB0YWtlcyBhcyBwYXJhbWV0ZXJzIHRoZSBIQUwgcGVyaXBoZXJhbCBoYW5kbGUsCiAgIGFuZCB0aGUgQ2FsbGJhY2sgSUQuCi0KKyAgWy4uXQogICBUaGVzZSBmdW5jdGlvbnMgYWxsb3cgdG8gcmVnaXN0ZXIvdW5yZWdpc3RlciBmb2xsb3dpbmcgY2FsbGJhY2tzOgogCiAgICAgKCspIE1zcEluaXRDYWxsYmFjayAgICAgICAgIDogTFBUSU0gQmFzZSBNc3AgSW5pdCBDYWxsYmFjay4KQEAgLTExNCwxNSArMTE0LDE4IEBACiAgICAgKCspIERpcmVjdGlvblVwQ2FsbGJhY2sgICAgIDogVXAtY291bnRpbmcgZGlyZWN0aW9uIGNoYW5nZSBDYWxsYmFjay4KICAgICAoKykgRGlyZWN0aW9uRG93bkNhbGxiYWNrICAgOiBEb3duLWNvdW50aW5nIGRpcmVjdGlvbiBjaGFuZ2UgQ2FsbGJhY2suCiAKKyAgWy4uXQogICBCeSBkZWZhdWx0LCBhZnRlciB0aGUgSW5pdCBhbmQgd2hlbiB0aGUgc3RhdGUgaXMgSEFMX0xQVElNX1NUQVRFX1JFU0VUCiAgIGFsbCBpbnRlcnJ1cHQgY2FsbGJhY2tzIGFyZSBzZXQgdG8gdGhlIGNvcnJlc3BvbmRpbmcgd2VhayBmdW5jdGlvbnM6CiAgIGV4YW1wbGVzIEByZWYgSEFMX0xQVElNX1RyaWdnZXJDYWxsYmFjaygpLCBAcmVmIEhBTF9MUFRJTV9Db21wYXJlTWF0Y2hDYWxsYmFjaygpLgogCisgIFsuLl0KICAgRXhjZXB0aW9uIGRvbmUgZm9yIE1zcEluaXQgYW5kIE1zcERlSW5pdCBmdW5jdGlvbnMgdGhhdCBhcmUgcmVzZXQgdG8gdGhlIGxlZ2FjeSB3ZWFrCiAgIGZ1bmN0aW9uYWxpdGllcyBpbiB0aGUgSW5pdC9EZUluaXQgb25seSB3aGVuIHRoZXNlIGNhbGxiYWNrcyBhcmUgbnVsbAogICAobm90IHJlZ2lzdGVyZWQgYmVmb3JlaGFuZCkuIElmIG5vdCwgTXNwSW5pdCBvciBNc3BEZUluaXQgYXJlIG5vdCBudWxsLCB0aGUgSW5pdC9EZUluaXQKICAga2VlcCBhbmQgdXNlIHRoZSB1c2VyIE1zcEluaXQvTXNwRGVJbml0IGNhbGxiYWNrcyAocmVnaXN0ZXJlZCBiZWZvcmVoYW5kKQogCisgIFsuLl0KICAgQ2FsbGJhY2tzIGNhbiBiZSByZWdpc3RlcmVkL3VucmVnaXN0ZXJlZCBpbiBIQUxfTFBUSU1fU1RBVEVfUkVBRFkgc3RhdGUgb25seS4KICAgRXhjZXB0aW9uIGRvbmUgTXNwSW5pdC9Nc3BEZUluaXQgdGhhdCBjYW4gYmUgcmVnaXN0ZXJlZC91bnJlZ2lzdGVyZWQKICAgaW4gSEFMX0xQVElNX1NUQVRFX1JFQURZIG9yIEhBTF9MUFRJTV9TVEFURV9SRVNFVCBzdGF0ZSwKQEAgLTEzMCwxMyArMTMzLDE0IEBACiAgIEluIHRoYXQgY2FzZSBmaXJzdCByZWdpc3RlciB0aGUgTXNwSW5pdC9Nc3BEZUluaXQgdXNlciBjYWxsYmFja3MKICAgdXNpbmcgQHJlZiBIQUxfTFBUSU1fUmVnaXN0ZXJDYWxsYmFjaygpIGJlZm9yZSBjYWxsaW5nIERlSW5pdCBvciBJbml0IGZ1bmN0aW9uLgogCisgIFsuLl0KICAgV2hlbiBUaGUgY29tcGlsYXRpb24gZGVmaW5lIFVTRV9IQUxfTFBUSU1fUkVHSVNURVJfQ0FMTEJBQ0tTIGlzIHNldCB0byAwIG9yCiAgIG5vdCBkZWZpbmVkLCB0aGUgY2FsbGJhY2sgcmVnaXN0cmF0aW9uIGZlYXR1cmUgaXMgbm90IGF2YWlsYWJsZSBhbmQgYWxsIGNhbGxiYWNrcwogICBhcmUgc2V0IHRvIHRoZSBjb3JyZXNwb25kaW5nIHdlYWsgZnVuY3Rpb25zLgogCiAgIEBlbmR2ZXJiYXRpbQogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgICAqIEBhdHRlbnRpb24KKyAgKiBAYXR0ZW50aW9uCiAgICoKICAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE2IFNUTWljcm9lbGVjdHJvbmljcy4KICAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLjwvY2VudGVyPjwvaDI+CkBAIC0xNDUsNyArMTQ5LDggQEAKICAgKiB0aGUgIkxpY2Vuc2UiOyBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlCiAgICogTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0OgogICAqICAgICAgICAgICAgICAgICAgICAgICAgb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlCi0gICogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqLwogCiAvKiBJbmNsdWRlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtMTY2LDEzICsxNzEsMjEgQEAKIAogLyogUHJpdmF0ZSB0eXBlZGVmIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qIFByaXZhdGUgZGVmaW5lIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKiBQcml2YXRlIG1hY3JvIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoqIEBhZGR0b2dyb3VwIExQVElNX1ByaXZhdGVfQ29uc3RhbnRzCisgICogQHsKKyAgKi8KICNkZWZpbmUgVElNRU9VVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDAwVUwgLyogVGltZW91dCBpcyAxcyAqLworLyoqCisgICogQH0KKyAgKi8KKworLyogUHJpdmF0ZSBtYWNybyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qIFByaXZhdGUgdmFyaWFibGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiBQcml2YXRlIGZ1bmN0aW9uIHByb3RvdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogI2lmIChVU0VfSEFMX0xQVElNX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxKQogc3RhdGljIHZvaWQgTFBUSU1fUmVzZXRDYWxsYmFjayhMUFRJTV9IYW5kbGVUeXBlRGVmICpscHRpbSk7CiAjZW5kaWYgLyogVVNFX0hBTF9MUFRJTV9SRUdJU1RFUl9DQUxMQkFDS1MgKi8KK3N0YXRpYyBIQUxfU3RhdHVzVHlwZURlZiBMUFRJTV9XYWl0Rm9yRmxhZyhMUFRJTV9IYW5kbGVUeXBlRGVmICpobHB0aW0sIHVpbnQzMl90IGZsYWcpOwogCiAvKiBFeHBvcnRlZCBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCkBAIC0zMjUsNiArMzM4LDExIEBACiAgIC8qIERpc2FibGUgdGhlIExQVElNIFBlcmlwaGVyYWwgQ2xvY2sgKi8KICAgX19IQUxfTFBUSU1fRElTQUJMRShobHB0aW0pOwogCisgIGlmIChIQUxfTFBUSU1fR2V0U3RhdGUoaGxwdGltKSA9PSBIQUxfTFBUSU1fU1RBVEVfVElNRU9VVCkKKyAgeworICAgIHJldHVybiBIQUxfVElNRU9VVDsKKyAgfQorCiAjaWYgKFVTRV9IQUxfTFBUSU1fUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCiAgIGlmIChobHB0aW0tPk1zcERlSW5pdENhbGxiYWNrID09IE5VTEwpCiAgIHsKQEAgLTQzMywxMiArNDUxLDMwIEBACiAgIC8qIEVuYWJsZSB0aGUgUGVyaXBoZXJhbCAqLwogICBfX0hBTF9MUFRJTV9FTkFCTEUoaGxwdGltKTsKIAorICAvKiBDbGVhciBmbGFnICovCisgIF9fSEFMX0xQVElNX0NMRUFSX0ZMQUcoaGxwdGltLCBMUFRJTV9GTEFHX0FSUk9LKTsKKwogICAvKiBMb2FkIHRoZSBwZXJpb2QgdmFsdWUgaW4gdGhlIGF1dG9yZWxvYWQgcmVnaXN0ZXIgKi8KICAgX19IQUxfTFBUSU1fQVVUT1JFTE9BRF9TRVQoaGxwdGltLCBQZXJpb2QpOwogCisgIC8qIFdhaXQgZm9yIHRoZSBjb21wbGV0aW9uIG9mIHRoZSB3cml0ZSBvcGVyYXRpb24gdG8gdGhlIExQVElNX0FSUiByZWdpc3RlciAqLworICBpZiAoTFBUSU1fV2FpdEZvckZsYWcoaGxwdGltLCBMUFRJTV9GTEFHX0FSUk9LKSA9PSBIQUxfVElNRU9VVCkKKyAgeworICAgIHJldHVybiBIQUxfVElNRU9VVDsKKyAgfQorCisgIC8qIENsZWFyIGZsYWcgKi8KKyAgX19IQUxfTFBUSU1fQ0xFQVJfRkxBRyhobHB0aW0sIExQVElNX0ZMQUdfQ01QT0spOworCiAgIC8qIExvYWQgdGhlIHB1bHNlIHZhbHVlIGluIHRoZSBjb21wYXJlIHJlZ2lzdGVyICovCiAgIF9fSEFMX0xQVElNX0NPTVBBUkVfU0VUKGhscHRpbSwgUHVsc2UpOwogCisgIC8qIFdhaXQgZm9yIHRoZSBjb21wbGV0aW9uIG9mIHRoZSB3cml0ZSBvcGVyYXRpb24gdG8gdGhlIExQVElNX0NNUCByZWdpc3RlciAqLworICBpZiAoTFBUSU1fV2FpdEZvckZsYWcoaGxwdGltLCBMUFRJTV9GTEFHX0NNUE9LKSA9PSBIQUxfVElNRU9VVCkKKyAgeworICAgIHJldHVybiBIQUxfVElNRU9VVDsKKyAgfQorCiAgIC8qIFN0YXJ0IHRpbWVyIGluIGNvbnRpbnVvdXMgbW9kZSAqLwogICBfX0hBTF9MUFRJTV9TVEFSVF9DT05USU5VT1VTKGhscHRpbSk7CiAKQEAgLTQ2NSw2ICs1MDEsMTEgQEAKICAgLyogRGlzYWJsZSB0aGUgUGVyaXBoZXJhbCAqLwogICBfX0hBTF9MUFRJTV9ESVNBQkxFKGhscHRpbSk7CiAKKyAgaWYgKEhBTF9MUFRJTV9HZXRTdGF0ZShobHB0aW0pID09IEhBTF9MUFRJTV9TVEFURV9USU1FT1VUKQorICB7CisgICAgcmV0dXJuIEhBTF9USU1FT1VUOworICB9CisKICAgLyogQ2hhbmdlIHRoZSBUSU0gc3RhdGUqLwogICBobHB0aW0tPlN0YXRlID0gSEFMX0xQVElNX1NUQVRFX1JFQURZOwogCkBAIC00OTQsNiArNTM1LDQxIEBACiAgIC8qIFJlc2V0IFdBVkUgYml0IHRvIHNldCBQV00gbW9kZSAqLwogICBobHB0aW0tPkluc3RhbmNlLT5DRkdSICY9IH5MUFRJTV9DRkdSX1dBVkU7CiAKKyAgLyogRW5hYmxlIHRoZSBQZXJpcGhlcmFsICovCisgIF9fSEFMX0xQVElNX0VOQUJMRShobHB0aW0pOworCisgIC8qIENsZWFyIGZsYWcgKi8KKyAgX19IQUxfTFBUSU1fQ0xFQVJfRkxBRyhobHB0aW0sIExQVElNX0ZMQUdfQVJST0spOworCisgIC8qIExvYWQgdGhlIHBlcmlvZCB2YWx1ZSBpbiB0aGUgYXV0b3JlbG9hZCByZWdpc3RlciAqLworICBfX0hBTF9MUFRJTV9BVVRPUkVMT0FEX1NFVChobHB0aW0sIFBlcmlvZCk7CisKKyAgLyogV2FpdCBmb3IgdGhlIGNvbXBsZXRpb24gb2YgdGhlIHdyaXRlIG9wZXJhdGlvbiB0byB0aGUgTFBUSU1fQVJSIHJlZ2lzdGVyICovCisgIGlmIChMUFRJTV9XYWl0Rm9yRmxhZyhobHB0aW0sIExQVElNX0ZMQUdfQVJST0spID09IEhBTF9USU1FT1VUKQorICB7CisgICAgcmV0dXJuIEhBTF9USU1FT1VUOworICB9CisKKyAgLyogQ2xlYXIgZmxhZyAqLworICBfX0hBTF9MUFRJTV9DTEVBUl9GTEFHKGhscHRpbSwgTFBUSU1fRkxBR19DTVBPSyk7CisKKyAgLyogTG9hZCB0aGUgcHVsc2UgdmFsdWUgaW4gdGhlIGNvbXBhcmUgcmVnaXN0ZXIgKi8KKyAgX19IQUxfTFBUSU1fQ09NUEFSRV9TRVQoaGxwdGltLCBQdWxzZSk7CisKKyAgLyogV2FpdCBmb3IgdGhlIGNvbXBsZXRpb24gb2YgdGhlIHdyaXRlIG9wZXJhdGlvbiB0byB0aGUgTFBUSU1fQ01QIHJlZ2lzdGVyICovCisgIGlmIChMUFRJTV9XYWl0Rm9yRmxhZyhobHB0aW0sIExQVElNX0ZMQUdfQ01QT0spID09IEhBTF9USU1FT1VUKQorICB7CisgICAgcmV0dXJuIEhBTF9USU1FT1VUOworICB9CisKKyAgLyogRGlzYWJsZSB0aGUgUGVyaXBoZXJhbCAqLworICBfX0hBTF9MUFRJTV9ESVNBQkxFKGhscHRpbSk7CisKKyAgaWYgKEhBTF9MUFRJTV9HZXRTdGF0ZShobHB0aW0pID09IEhBTF9MUFRJTV9TVEFURV9USU1FT1VUKQorICB7CisgICAgcmV0dXJuIEhBTF9USU1FT1VUOworICB9CisKICAgLyogRW5hYmxlIEF1dG9yZWxvYWQgd3JpdGUgY29tcGxldGUgaW50ZXJydXB0ICovCiAgIF9fSEFMX0xQVElNX0VOQUJMRV9JVChobHB0aW0sIExQVElNX0lUX0FSUk9LKTsKIApAQCAtNTE2LDEyICs1OTIsNiBAQAogICAvKiBFbmFibGUgdGhlIFBlcmlwaGVyYWwgKi8KICAgX19IQUxfTFBUSU1fRU5BQkxFKGhscHRpbSk7CiAKLSAgLyogTG9hZCB0aGUgcGVyaW9kIHZhbHVlIGluIHRoZSBhdXRvcmVsb2FkIHJlZ2lzdGVyICovCi0gIF9fSEFMX0xQVElNX0FVVE9SRUxPQURfU0VUKGhscHRpbSwgUGVyaW9kKTsKLQotICAvKiBMb2FkIHRoZSBwdWxzZSB2YWx1ZSBpbiB0aGUgY29tcGFyZSByZWdpc3RlciAqLwotICBfX0hBTF9MUFRJTV9DT01QQVJFX1NFVChobHB0aW0sIFB1bHNlKTsKLQogICAvKiBTdGFydCB0aW1lciBpbiBjb250aW51b3VzIG1vZGUgKi8KICAgX19IQUxfTFBUSU1fU1RBUlRfQ09OVElOVU9VUyhobHB0aW0pOwogCkBAIC01NDgsNiArNjE4LDExIEBACiAgIC8qIERpc2FibGUgdGhlIFBlcmlwaGVyYWwgKi8KICAgX19IQUxfTFBUSU1fRElTQUJMRShobHB0aW0pOwogCisgIGlmIChIQUxfTFBUSU1fR2V0U3RhdGUoaGxwdGltKSA9PSBIQUxfTFBUSU1fU1RBVEVfVElNRU9VVCkKKyAgeworICAgIHJldHVybiBIQUxfVElNRU9VVDsKKyAgfQorCiAgIC8qIERpc2FibGUgQXV0b3JlbG9hZCB3cml0ZSBjb21wbGV0ZSBpbnRlcnJ1cHQgKi8KICAgX19IQUxfTFBUSU1fRElTQUJMRV9JVChobHB0aW0sIExQVElNX0lUX0FSUk9LKTsKIApAQCAtNTk5LDEyICs2NzQsMzAgQEAKICAgLyogRW5hYmxlIHRoZSBQZXJpcGhlcmFsICovCiAgIF9fSEFMX0xQVElNX0VOQUJMRShobHB0aW0pOwogCisgIC8qIENsZWFyIGZsYWcgKi8KKyAgX19IQUxfTFBUSU1fQ0xFQVJfRkxBRyhobHB0aW0sIExQVElNX0ZMQUdfQVJST0spOworCiAgIC8qIExvYWQgdGhlIHBlcmlvZCB2YWx1ZSBpbiB0aGUgYXV0b3JlbG9hZCByZWdpc3RlciAqLwogICBfX0hBTF9MUFRJTV9BVVRPUkVMT0FEX1NFVChobHB0aW0sIFBlcmlvZCk7CiAKKyAgLyogV2FpdCBmb3IgdGhlIGNvbXBsZXRpb24gb2YgdGhlIHdyaXRlIG9wZXJhdGlvbiB0byB0aGUgTFBUSU1fQVJSIHJlZ2lzdGVyICovCisgIGlmIChMUFRJTV9XYWl0Rm9yRmxhZyhobHB0aW0sIExQVElNX0ZMQUdfQVJST0spID09IEhBTF9USU1FT1VUKQorICB7CisgICAgcmV0dXJuIEhBTF9USU1FT1VUOworICB9CisKKyAgLyogQ2xlYXIgZmxhZyAqLworICBfX0hBTF9MUFRJTV9DTEVBUl9GTEFHKGhscHRpbSwgTFBUSU1fRkxBR19DTVBPSyk7CisKICAgLyogTG9hZCB0aGUgcHVsc2UgdmFsdWUgaW4gdGhlIGNvbXBhcmUgcmVnaXN0ZXIgKi8KICAgX19IQUxfTFBUSU1fQ09NUEFSRV9TRVQoaGxwdGltLCBQdWxzZSk7CiAKKyAgLyogV2FpdCBmb3IgdGhlIGNvbXBsZXRpb24gb2YgdGhlIHdyaXRlIG9wZXJhdGlvbiB0byB0aGUgTFBUSU1fQ01QIHJlZ2lzdGVyICovCisgIGlmIChMUFRJTV9XYWl0Rm9yRmxhZyhobHB0aW0sIExQVElNX0ZMQUdfQ01QT0spID09IEhBTF9USU1FT1VUKQorICB7CisgICAgcmV0dXJuIEhBTF9USU1FT1VUOworICB9CisKICAgLyogU3RhcnQgdGltZXIgaW4gc2luZ2xlIChvbmUgc2hvdCkgbW9kZSAqLwogICBfX0hBTF9MUFRJTV9TVEFSVF9TSU5HTEUoaGxwdGltKTsKIApAQCAtNjMxLDYgKzcyNCwxMSBAQAogICAvKiBEaXNhYmxlIHRoZSBQZXJpcGhlcmFsICovCiAgIF9fSEFMX0xQVElNX0RJU0FCTEUoaGxwdGltKTsKIAorICBpZiAoSEFMX0xQVElNX0dldFN0YXRlKGhscHRpbSkgPT0gSEFMX0xQVElNX1NUQVRFX1RJTUVPVVQpCisgIHsKKyAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CisgIH0KKwogICAvKiBDaGFuZ2UgdGhlIFRJTSBzdGF0ZSovCiAgIGhscHRpbS0+U3RhdGUgPSBIQUxfTFBUSU1fU1RBVEVfUkVBRFk7CiAKQEAgLTY2MCw2ICs3NTgsNDEgQEAKICAgLyogUmVzZXQgV0FWRSBiaXQgdG8gc2V0IG9uZSBwdWxzZSBtb2RlICovCiAgIGhscHRpbS0+SW5zdGFuY2UtPkNGR1IgJj0gfkxQVElNX0NGR1JfV0FWRTsKIAorICAvKiBFbmFibGUgdGhlIFBlcmlwaGVyYWwgKi8KKyAgX19IQUxfTFBUSU1fRU5BQkxFKGhscHRpbSk7CisKKyAgLyogQ2xlYXIgZmxhZyAqLworICBfX0hBTF9MUFRJTV9DTEVBUl9GTEFHKGhscHRpbSwgTFBUSU1fRkxBR19BUlJPSyk7CisKKyAgLyogTG9hZCB0aGUgcGVyaW9kIHZhbHVlIGluIHRoZSBhdXRvcmVsb2FkIHJlZ2lzdGVyICovCisgIF9fSEFMX0xQVElNX0FVVE9SRUxPQURfU0VUKGhscHRpbSwgUGVyaW9kKTsKKworICAvKiBXYWl0IGZvciB0aGUgY29tcGxldGlvbiBvZiB0aGUgd3JpdGUgb3BlcmF0aW9uIHRvIHRoZSBMUFRJTV9BUlIgcmVnaXN0ZXIgKi8KKyAgaWYgKExQVElNX1dhaXRGb3JGbGFnKGhscHRpbSwgTFBUSU1fRkxBR19BUlJPSykgPT0gSEFMX1RJTUVPVVQpCisgIHsKKyAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CisgIH0KKworICAvKiBDbGVhciBmbGFnICovCisgIF9fSEFMX0xQVElNX0NMRUFSX0ZMQUcoaGxwdGltLCBMUFRJTV9GTEFHX0NNUE9LKTsKKworICAvKiBMb2FkIHRoZSBwdWxzZSB2YWx1ZSBpbiB0aGUgY29tcGFyZSByZWdpc3RlciAqLworICBfX0hBTF9MUFRJTV9DT01QQVJFX1NFVChobHB0aW0sIFB1bHNlKTsKKworICAvKiBXYWl0IGZvciB0aGUgY29tcGxldGlvbiBvZiB0aGUgd3JpdGUgb3BlcmF0aW9uIHRvIHRoZSBMUFRJTV9DTVAgcmVnaXN0ZXIgKi8KKyAgaWYgKExQVElNX1dhaXRGb3JGbGFnKGhscHRpbSwgTFBUSU1fRkxBR19DTVBPSykgPT0gSEFMX1RJTUVPVVQpCisgIHsKKyAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CisgIH0KKworICAvKiBEaXNhYmxlIHRoZSBQZXJpcGhlcmFsICovCisgIF9fSEFMX0xQVElNX0RJU0FCTEUoaGxwdGltKTsKKworICBpZiAoSEFMX0xQVElNX0dldFN0YXRlKGhscHRpbSkgPT0gSEFMX0xQVElNX1NUQVRFX1RJTUVPVVQpCisgIHsKKyAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CisgIH0KKwogICAvKiBFbmFibGUgQXV0b3JlbG9hZCB3cml0ZSBjb21wbGV0ZSBpbnRlcnJ1cHQgKi8KICAgX19IQUxfTFBUSU1fRU5BQkxFX0lUKGhscHRpbSwgTFBUSU1fSVRfQVJST0spOwogCkBAIC02ODIsMTIgKzgxNSw2IEBACiAgIC8qIEVuYWJsZSB0aGUgUGVyaXBoZXJhbCAqLwogICBfX0hBTF9MUFRJTV9FTkFCTEUoaGxwdGltKTsKIAotICAvKiBMb2FkIHRoZSBwZXJpb2QgdmFsdWUgaW4gdGhlIGF1dG9yZWxvYWQgcmVnaXN0ZXIgKi8KLSAgX19IQUxfTFBUSU1fQVVUT1JFTE9BRF9TRVQoaGxwdGltLCBQZXJpb2QpOwotCi0gIC8qIExvYWQgdGhlIHB1bHNlIHZhbHVlIGluIHRoZSBjb21wYXJlIHJlZ2lzdGVyICovCi0gIF9fSEFMX0xQVElNX0NPTVBBUkVfU0VUKGhscHRpbSwgUHVsc2UpOwotCiAgIC8qIFN0YXJ0IHRpbWVyIGluIHNpbmdsZSAob25lIHNob3QpIG1vZGUgKi8KICAgX19IQUxfTFBUSU1fU1RBUlRfU0lOR0xFKGhscHRpbSk7CiAKQEAgLTcxNCw2ICs4NDEsMTEgQEAKICAgLyogRGlzYWJsZSB0aGUgUGVyaXBoZXJhbCAqLwogICBfX0hBTF9MUFRJTV9ESVNBQkxFKGhscHRpbSk7CiAKKyAgaWYgKEhBTF9MUFRJTV9HZXRTdGF0ZShobHB0aW0pID09IEhBTF9MUFRJTV9TVEFURV9USU1FT1VUKQorICB7CisgICAgcmV0dXJuIEhBTF9USU1FT1VUOworICB9CisKICAgLyogRGlzYWJsZSBBdXRvcmVsb2FkIHdyaXRlIGNvbXBsZXRlIGludGVycnVwdCAqLwogICBfX0hBTF9MUFRJTV9ESVNBQkxFX0lUKGhscHRpbSwgTFBUSU1fSVRfQVJST0spOwogCkBAIC03NjUsMTIgKzg5NywzMCBAQAogICAvKiBFbmFibGUgdGhlIFBlcmlwaGVyYWwgKi8KICAgX19IQUxfTFBUSU1fRU5BQkxFKGhscHRpbSk7CiAKKyAgLyogQ2xlYXIgZmxhZyAqLworICBfX0hBTF9MUFRJTV9DTEVBUl9GTEFHKGhscHRpbSwgTFBUSU1fRkxBR19BUlJPSyk7CisKICAgLyogTG9hZCB0aGUgcGVyaW9kIHZhbHVlIGluIHRoZSBhdXRvcmVsb2FkIHJlZ2lzdGVyICovCiAgIF9fSEFMX0xQVElNX0FVVE9SRUxPQURfU0VUKGhscHRpbSwgUGVyaW9kKTsKIAorICAvKiBXYWl0IGZvciB0aGUgY29tcGxldGlvbiBvZiB0aGUgd3JpdGUgb3BlcmF0aW9uIHRvIHRoZSBMUFRJTV9BUlIgcmVnaXN0ZXIgKi8KKyAgaWYgKExQVElNX1dhaXRGb3JGbGFnKGhscHRpbSwgTFBUSU1fRkxBR19BUlJPSykgPT0gSEFMX1RJTUVPVVQpCisgIHsKKyAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CisgIH0KKworICAvKiBDbGVhciBmbGFnICovCisgIF9fSEFMX0xQVElNX0NMRUFSX0ZMQUcoaGxwdGltLCBMUFRJTV9GTEFHX0NNUE9LKTsKKwogICAvKiBMb2FkIHRoZSBwdWxzZSB2YWx1ZSBpbiB0aGUgY29tcGFyZSByZWdpc3RlciAqLwogICBfX0hBTF9MUFRJTV9DT01QQVJFX1NFVChobHB0aW0sIFB1bHNlKTsKIAorICAvKiBXYWl0IGZvciB0aGUgY29tcGxldGlvbiBvZiB0aGUgd3JpdGUgb3BlcmF0aW9uIHRvIHRoZSBMUFRJTV9DTVAgcmVnaXN0ZXIgKi8KKyAgaWYgKExQVElNX1dhaXRGb3JGbGFnKGhscHRpbSwgTFBUSU1fRkxBR19DTVBPSykgPT0gSEFMX1RJTUVPVVQpCisgIHsKKyAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CisgIH0KKwogICAvKiBTdGFydCB0aW1lciBpbiBzaW5nbGUgKG9uZSBzaG90KSBtb2RlICovCiAgIF9fSEFMX0xQVElNX1NUQVJUX1NJTkdMRShobHB0aW0pOwogCkBAIC03OTcsNiArOTQ3LDExIEBACiAgIC8qIERpc2FibGUgdGhlIFBlcmlwaGVyYWwgKi8KICAgX19IQUxfTFBUSU1fRElTQUJMRShobHB0aW0pOwogCisgIGlmIChIQUxfTFBUSU1fR2V0U3RhdGUoaGxwdGltKSA9PSBIQUxfTFBUSU1fU1RBVEVfVElNRU9VVCkKKyAgeworICAgIHJldHVybiBIQUxfVElNRU9VVDsKKyAgfQorCiAgIC8qIENoYW5nZSB0aGUgVElNIHN0YXRlKi8KICAgaGxwdGltLT5TdGF0ZSA9IEhBTF9MUFRJTV9TVEFURV9SRUFEWTsKIApAQCAtODI2LDYgKzk4MSw0MSBAQAogICAvKiBTZXQgV0FWRSBiaXQgdG8gZW5hYmxlIHRoZSBzZXQgb25jZSBtb2RlICovCiAgIGhscHRpbS0+SW5zdGFuY2UtPkNGR1IgfD0gTFBUSU1fQ0ZHUl9XQVZFOwogCisgIC8qIEVuYWJsZSB0aGUgUGVyaXBoZXJhbCAqLworICBfX0hBTF9MUFRJTV9FTkFCTEUoaGxwdGltKTsKKworICAvKiBDbGVhciBmbGFnICovCisgIF9fSEFMX0xQVElNX0NMRUFSX0ZMQUcoaGxwdGltLCBMUFRJTV9GTEFHX0FSUk9LKTsKKworICAvKiBMb2FkIHRoZSBwZXJpb2QgdmFsdWUgaW4gdGhlIGF1dG9yZWxvYWQgcmVnaXN0ZXIgKi8KKyAgX19IQUxfTFBUSU1fQVVUT1JFTE9BRF9TRVQoaGxwdGltLCBQZXJpb2QpOworCisgIC8qIFdhaXQgZm9yIHRoZSBjb21wbGV0aW9uIG9mIHRoZSB3cml0ZSBvcGVyYXRpb24gdG8gdGhlIExQVElNX0FSUiByZWdpc3RlciAqLworICBpZiAoTFBUSU1fV2FpdEZvckZsYWcoaGxwdGltLCBMUFRJTV9GTEFHX0FSUk9LKSA9PSBIQUxfVElNRU9VVCkKKyAgeworICAgIHJldHVybiBIQUxfVElNRU9VVDsKKyAgfQorCisgIC8qIENsZWFyIGZsYWcgKi8KKyAgX19IQUxfTFBUSU1fQ0xFQVJfRkxBRyhobHB0aW0sIExQVElNX0ZMQUdfQ01QT0spOworCisgIC8qIExvYWQgdGhlIHB1bHNlIHZhbHVlIGluIHRoZSBjb21wYXJlIHJlZ2lzdGVyICovCisgIF9fSEFMX0xQVElNX0NPTVBBUkVfU0VUKGhscHRpbSwgUHVsc2UpOworCisgIC8qIFdhaXQgZm9yIHRoZSBjb21wbGV0aW9uIG9mIHRoZSB3cml0ZSBvcGVyYXRpb24gdG8gdGhlIExQVElNX0NNUCByZWdpc3RlciAqLworICBpZiAoTFBUSU1fV2FpdEZvckZsYWcoaGxwdGltLCBMUFRJTV9GTEFHX0NNUE9LKSA9PSBIQUxfVElNRU9VVCkKKyAgeworICAgIHJldHVybiBIQUxfVElNRU9VVDsKKyAgfQorCisgIC8qIERpc2FibGUgdGhlIFBlcmlwaGVyYWwgKi8KKyAgX19IQUxfTFBUSU1fRElTQUJMRShobHB0aW0pOworCisgIGlmIChIQUxfTFBUSU1fR2V0U3RhdGUoaGxwdGltKSA9PSBIQUxfTFBUSU1fU1RBVEVfVElNRU9VVCkKKyAgeworICAgIHJldHVybiBIQUxfVElNRU9VVDsKKyAgfQorCiAgIC8qIEVuYWJsZSBBdXRvcmVsb2FkIHdyaXRlIGNvbXBsZXRlIGludGVycnVwdCAqLwogICBfX0hBTF9MUFRJTV9FTkFCTEVfSVQoaGxwdGltLCBMUFRJTV9JVF9BUlJPSyk7CiAKQEAgLTg0OCwxMiArMTAzOCw2IEBACiAgIC8qIEVuYWJsZSB0aGUgUGVyaXBoZXJhbCAqLwogICBfX0hBTF9MUFRJTV9FTkFCTEUoaGxwdGltKTsKIAotICAvKiBMb2FkIHRoZSBwZXJpb2QgdmFsdWUgaW4gdGhlIGF1dG9yZWxvYWQgcmVnaXN0ZXIgKi8KLSAgX19IQUxfTFBUSU1fQVVUT1JFTE9BRF9TRVQoaGxwdGltLCBQZXJpb2QpOwotCi0gIC8qIExvYWQgdGhlIHB1bHNlIHZhbHVlIGluIHRoZSBjb21wYXJlIHJlZ2lzdGVyICovCi0gIF9fSEFMX0xQVElNX0NPTVBBUkVfU0VUKGhscHRpbSwgUHVsc2UpOwotCiAgIC8qIFN0YXJ0IHRpbWVyIGluIHNpbmdsZSAob25lIHNob3QpIG1vZGUgKi8KICAgX19IQUxfTFBUSU1fU1RBUlRfU0lOR0xFKGhscHRpbSk7CiAKQEAgLTg4MCw2ICsxMDY0LDExIEBACiAgIC8qIERpc2FibGUgdGhlIFBlcmlwaGVyYWwgKi8KICAgX19IQUxfTFBUSU1fRElTQUJMRShobHB0aW0pOwogCisgIGlmIChIQUxfTFBUSU1fR2V0U3RhdGUoaGxwdGltKSA9PSBIQUxfTFBUSU1fU1RBVEVfVElNRU9VVCkKKyAgeworICAgIHJldHVybiBIQUxfVElNRU9VVDsKKyAgfQorCiAgIC8qIERpc2FibGUgQXV0b3JlbG9hZCB3cml0ZSBjb21wbGV0ZSBpbnRlcnJ1cHQgKi8KICAgX19IQUxfTFBUSU1fRElTQUJMRV9JVChobHB0aW0sIExQVElNX0lUX0FSUk9LKTsKIApAQCAtOTQ1LDkgKzExMzQsMTggQEAKICAgLyogRW5hYmxlIHRoZSBQZXJpcGhlcmFsICovCiAgIF9fSEFMX0xQVElNX0VOQUJMRShobHB0aW0pOwogCisgIC8qIENsZWFyIGZsYWcgKi8KKyAgX19IQUxfTFBUSU1fQ0xFQVJfRkxBRyhobHB0aW0sIExQVElNX0ZMQUdfQVJST0spOworCiAgIC8qIExvYWQgdGhlIHBlcmlvZCB2YWx1ZSBpbiB0aGUgYXV0b3JlbG9hZCByZWdpc3RlciAqLwogICBfX0hBTF9MUFRJTV9BVVRPUkVMT0FEX1NFVChobHB0aW0sIFBlcmlvZCk7CiAKKyAgLyogV2FpdCBmb3IgdGhlIGNvbXBsZXRpb24gb2YgdGhlIHdyaXRlIG9wZXJhdGlvbiB0byB0aGUgTFBUSU1fQVJSIHJlZ2lzdGVyICovCisgIGlmIChMUFRJTV9XYWl0Rm9yRmxhZyhobHB0aW0sIExQVElNX0ZMQUdfQVJST0spID09IEhBTF9USU1FT1VUKQorICB7CisgICAgcmV0dXJuIEhBTF9USU1FT1VUOworICB9CisKICAgLyogU3RhcnQgdGltZXIgaW4gY29udGludW91cyBtb2RlICovCiAgIF9fSEFMX0xQVElNX1NUQVJUX0NPTlRJTlVPVVMoaGxwdGltKTsKIApAQCAtOTc0LDYgKzExNzIsMTEgQEAKICAgLyogRGlzYWJsZSB0aGUgUGVyaXBoZXJhbCAqLwogICBfX0hBTF9MUFRJTV9ESVNBQkxFKGhscHRpbSk7CiAKKyAgaWYgKEhBTF9MUFRJTV9HZXRTdGF0ZShobHB0aW0pID09IEhBTF9MUFRJTV9TVEFURV9USU1FT1VUKQorICB7CisgICAgcmV0dXJuIEhBTF9USU1FT1VUOworICB9CisKICAgLyogUmVzZXQgRU5DIGJpdCB0byBkaXNhYmxlIHRoZSBlbmNvZGVyIGludGVyZmFjZSAqLwogICBobHB0aW0tPkluc3RhbmNlLT5DRkdSICY9IH5MUFRJTV9DRkdSX0VOQzsKIApAQCAtMTAyMSw2ICsxMjI0LDI5IEBACiAgIC8qIFNldCBFTkMgYml0IHRvIGVuYWJsZSB0aGUgZW5jb2RlciBpbnRlcmZhY2UgKi8KICAgaGxwdGltLT5JbnN0YW5jZS0+Q0ZHUiB8PSBMUFRJTV9DRkdSX0VOQzsKIAorICAvKiBFbmFibGUgdGhlIFBlcmlwaGVyYWwgKi8KKyAgX19IQUxfTFBUSU1fRU5BQkxFKGhscHRpbSk7CisKKyAgLyogQ2xlYXIgZmxhZyAqLworICBfX0hBTF9MUFRJTV9DTEVBUl9GTEFHKGhscHRpbSwgTFBUSU1fRkxBR19BUlJPSyk7CisKKyAgLyogTG9hZCB0aGUgcGVyaW9kIHZhbHVlIGluIHRoZSBhdXRvcmVsb2FkIHJlZ2lzdGVyICovCisgIF9fSEFMX0xQVElNX0FVVE9SRUxPQURfU0VUKGhscHRpbSwgUGVyaW9kKTsKKworICAvKiBXYWl0IGZvciB0aGUgY29tcGxldGlvbiBvZiB0aGUgd3JpdGUgb3BlcmF0aW9uIHRvIHRoZSBMUFRJTV9BUlIgcmVnaXN0ZXIgKi8KKyAgaWYgKExQVElNX1dhaXRGb3JGbGFnKGhscHRpbSwgTFBUSU1fRkxBR19BUlJPSykgPT0gSEFMX1RJTUVPVVQpCisgIHsKKyAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CisgIH0KKworICAvKiBEaXNhYmxlIHRoZSBQZXJpcGhlcmFsICovCisgIF9fSEFMX0xQVElNX0RJU0FCTEUoaGxwdGltKTsKKworICBpZiAoSEFMX0xQVElNX0dldFN0YXRlKGhscHRpbSkgPT0gSEFMX0xQVElNX1NUQVRFX1RJTUVPVVQpCisgIHsKKyAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CisgIH0KKwogICAvKiBFbmFibGUgInN3aXRjaCB0byBkb3duIGRpcmVjdGlvbiIgaW50ZXJydXB0ICovCiAgIF9fSEFMX0xQVElNX0VOQUJMRV9JVChobHB0aW0sIExQVElNX0lUX0RPV04pOwogCkBAIC0xMDMwLDkgKzEyNTYsNiBAQAogICAvKiBFbmFibGUgdGhlIFBlcmlwaGVyYWwgKi8KICAgX19IQUxfTFBUSU1fRU5BQkxFKGhscHRpbSk7CiAKLSAgLyogTG9hZCB0aGUgcGVyaW9kIHZhbHVlIGluIHRoZSBhdXRvcmVsb2FkIHJlZ2lzdGVyICovCi0gIF9fSEFMX0xQVElNX0FVVE9SRUxPQURfU0VUKGhscHRpbSwgUGVyaW9kKTsKLQogICAvKiBTdGFydCB0aW1lciBpbiBjb250aW51b3VzIG1vZGUgKi8KICAgX19IQUxfTFBUSU1fU1RBUlRfQ09OVElOVU9VUyhobHB0aW0pOwogCkBAIC0xMDU5LDYgKzEyODIsMTEgQEAKICAgLyogRGlzYWJsZSB0aGUgUGVyaXBoZXJhbCAqLwogICBfX0hBTF9MUFRJTV9ESVNBQkxFKGhscHRpbSk7CiAKKyAgaWYgKEhBTF9MUFRJTV9HZXRTdGF0ZShobHB0aW0pID09IEhBTF9MUFRJTV9TVEFURV9USU1FT1VUKQorICB7CisgICAgcmV0dXJuIEhBTF9USU1FT1VUOworICB9CisKICAgLyogUmVzZXQgRU5DIGJpdCB0byBkaXNhYmxlIHRoZSBlbmNvZGVyIGludGVyZmFjZSAqLwogICBobHB0aW0tPkluc3RhbmNlLT5DRkdSICY9IH5MUFRJTV9DRkdSX0VOQzsKIApAQCAtMTEwMiwxMiArMTMzMCwzMCBAQAogICAvKiBFbmFibGUgdGhlIFBlcmlwaGVyYWwgKi8KICAgX19IQUxfTFBUSU1fRU5BQkxFKGhscHRpbSk7CiAKKyAgLyogQ2xlYXIgZmxhZyAqLworICBfX0hBTF9MUFRJTV9DTEVBUl9GTEFHKGhscHRpbSwgTFBUSU1fRkxBR19BUlJPSyk7CisKICAgLyogTG9hZCB0aGUgcGVyaW9kIHZhbHVlIGluIHRoZSBhdXRvcmVsb2FkIHJlZ2lzdGVyICovCiAgIF9fSEFMX0xQVElNX0FVVE9SRUxPQURfU0VUKGhscHRpbSwgUGVyaW9kKTsKIAorICAvKiBXYWl0IGZvciB0aGUgY29tcGxldGlvbiBvZiB0aGUgd3JpdGUgb3BlcmF0aW9uIHRvIHRoZSBMUFRJTV9BUlIgcmVnaXN0ZXIgKi8KKyAgaWYgKExQVElNX1dhaXRGb3JGbGFnKGhscHRpbSwgTFBUSU1fRkxBR19BUlJPSykgPT0gSEFMX1RJTUVPVVQpCisgIHsKKyAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CisgIH0KKworICAvKiBDbGVhciBmbGFnICovCisgIF9fSEFMX0xQVElNX0NMRUFSX0ZMQUcoaGxwdGltLCBMUFRJTV9GTEFHX0NNUE9LKTsKKwogICAvKiBMb2FkIHRoZSBUaW1lb3V0IHZhbHVlIGluIHRoZSBjb21wYXJlIHJlZ2lzdGVyICovCiAgIF9fSEFMX0xQVElNX0NPTVBBUkVfU0VUKGhscHRpbSwgVGltZW91dCk7CiAKKyAgLyogV2FpdCBmb3IgdGhlIGNvbXBsZXRpb24gb2YgdGhlIHdyaXRlIG9wZXJhdGlvbiB0byB0aGUgTFBUSU1fQ01QIHJlZ2lzdGVyICovCisgIGlmIChMUFRJTV9XYWl0Rm9yRmxhZyhobHB0aW0sIExQVElNX0ZMQUdfQ01QT0spID09IEhBTF9USU1FT1VUKQorICB7CisgICAgcmV0dXJuIEhBTF9USU1FT1VUOworICB9CisKICAgLyogU3RhcnQgdGltZXIgaW4gY29udGludW91cyBtb2RlICovCiAgIF9fSEFMX0xQVElNX1NUQVJUX0NPTlRJTlVPVVMoaGxwdGltKTsKIApAQCAtMTEzNCw2ICsxMzgwLDExIEBACiAgIC8qIERpc2FibGUgdGhlIFBlcmlwaGVyYWwgKi8KICAgX19IQUxfTFBUSU1fRElTQUJMRShobHB0aW0pOwogCisgIGlmIChIQUxfTFBUSU1fR2V0U3RhdGUoaGxwdGltKSA9PSBIQUxfTFBUSU1fU1RBVEVfVElNRU9VVCkKKyAgeworICAgIHJldHVybiBIQUxfVElNRU9VVDsKKyAgfQorCiAgIC8qIFJlc2V0IFRJTU9VVCBiaXQgdG8gZW5hYmxlIHRoZSB0aW1lb3V0IGZ1bmN0aW9uICovCiAgIGhscHRpbS0+SW5zdGFuY2UtPkNGR1IgJj0gfkxQVElNX0NGR1JfVElNT1VUOwogCkBAIC0xMTY3LDIyICsxNDE4LDU1IEBACiAKICAgLyogRW5hYmxlIEVYVEkgTGluZSBpbnRlcnJ1cHQgb24gdGhlIExQVElNIFdha2UtdXAgVGltZXIgKi8KICAgX19IQUxfTFBUSU1fV0FLRVVQVElNRVJfRVhUSV9FTkFCTEVfSVQoKTsKKyNpZiBkZWZpbmVkKEVYVElfSU1SX01SMjMpCisgIC8qIEVuYWJsZSByaXNpbmcgZWRnZSB0cmlnZ2VyIG9uIHRoZSBMUFRJTSBXYWtlLXVwIFRpbWVyIEV4dGkgbGluZSAqLworICBfX0hBTF9MUFRJTV9XQUtFVVBUSU1FUl9FWFRJX0VOQUJMRV9SSVNJTkdfRURHRSgpOworI2VuZGlmIC8qIEVYVElfSU1SX01SMjMgKi8KIAogICAvKiBTZXQgVElNT1VUIGJpdCB0byBlbmFibGUgdGhlIHRpbWVvdXQgZnVuY3Rpb24gKi8KICAgaGxwdGltLT5JbnN0YW5jZS0+Q0ZHUiB8PSBMUFRJTV9DRkdSX1RJTU9VVDsKIAorICAvKiBFbmFibGUgdGhlIFBlcmlwaGVyYWwgKi8KKyAgX19IQUxfTFBUSU1fRU5BQkxFKGhscHRpbSk7CisKKyAgLyogQ2xlYXIgZmxhZyAqLworICBfX0hBTF9MUFRJTV9DTEVBUl9GTEFHKGhscHRpbSwgTFBUSU1fRkxBR19BUlJPSyk7CisKKyAgLyogTG9hZCB0aGUgcGVyaW9kIHZhbHVlIGluIHRoZSBhdXRvcmVsb2FkIHJlZ2lzdGVyICovCisgIF9fSEFMX0xQVElNX0FVVE9SRUxPQURfU0VUKGhscHRpbSwgUGVyaW9kKTsKKworICAvKiBXYWl0IGZvciB0aGUgY29tcGxldGlvbiBvZiB0aGUgd3JpdGUgb3BlcmF0aW9uIHRvIHRoZSBMUFRJTV9BUlIgcmVnaXN0ZXIgKi8KKyAgaWYgKExQVElNX1dhaXRGb3JGbGFnKGhscHRpbSwgTFBUSU1fRkxBR19BUlJPSykgPT0gSEFMX1RJTUVPVVQpCisgIHsKKyAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CisgIH0KKworICAvKiBDbGVhciBmbGFnICovCisgIF9fSEFMX0xQVElNX0NMRUFSX0ZMQUcoaGxwdGltLCBMUFRJTV9GTEFHX0NNUE9LKTsKKworICAvKiBMb2FkIHRoZSBUaW1lb3V0IHZhbHVlIGluIHRoZSBjb21wYXJlIHJlZ2lzdGVyICovCisgIF9fSEFMX0xQVElNX0NPTVBBUkVfU0VUKGhscHRpbSwgVGltZW91dCk7CisKKyAgLyogV2FpdCBmb3IgdGhlIGNvbXBsZXRpb24gb2YgdGhlIHdyaXRlIG9wZXJhdGlvbiB0byB0aGUgTFBUSU1fQ01QIHJlZ2lzdGVyICovCisgIGlmIChMUFRJTV9XYWl0Rm9yRmxhZyhobHB0aW0sIExQVElNX0ZMQUdfQ01QT0spID09IEhBTF9USU1FT1VUKQorICB7CisgICAgcmV0dXJuIEhBTF9USU1FT1VUOworICB9CisKKyAgLyogRGlzYWJsZSB0aGUgUGVyaXBoZXJhbCAqLworICBfX0hBTF9MUFRJTV9ESVNBQkxFKGhscHRpbSk7CisKKyAgaWYgKEhBTF9MUFRJTV9HZXRTdGF0ZShobHB0aW0pID09IEhBTF9MUFRJTV9TVEFURV9USU1FT1VUKQorICB7CisgICAgcmV0dXJuIEhBTF9USU1FT1VUOworICB9CisKICAgLyogRW5hYmxlIENvbXBhcmUgbWF0Y2ggaW50ZXJydXB0ICovCiAgIF9fSEFMX0xQVElNX0VOQUJMRV9JVChobHB0aW0sIExQVElNX0lUX0NNUE0pOwogCiAgIC8qIEVuYWJsZSB0aGUgUGVyaXBoZXJhbCAqLwogICBfX0hBTF9MUFRJTV9FTkFCTEUoaGxwdGltKTsKIAotICAvKiBMb2FkIHRoZSBwZXJpb2QgdmFsdWUgaW4gdGhlIGF1dG9yZWxvYWQgcmVnaXN0ZXIgKi8KLSAgX19IQUxfTFBUSU1fQVVUT1JFTE9BRF9TRVQoaGxwdGltLCBQZXJpb2QpOwotCi0gIC8qIExvYWQgdGhlIFRpbWVvdXQgdmFsdWUgaW4gdGhlIGNvbXBhcmUgcmVnaXN0ZXIgKi8KLSAgX19IQUxfTFBUSU1fQ09NUEFSRV9TRVQoaGxwdGltLCBUaW1lb3V0KTsKLQogICAvKiBTdGFydCB0aW1lciBpbiBjb250aW51b3VzIG1vZGUgKi8KICAgX19IQUxfTFBUSU1fU1RBUlRfQ09OVElOVU9VUyhobHB0aW0pOwogCkBAIC0xMjA1LDYgKzE0ODksMTAgQEAKIAogICAvKiBTZXQgdGhlIExQVElNIHN0YXRlICovCiAgIGhscHRpbS0+U3RhdGUgPSBIQUxfTFBUSU1fU1RBVEVfQlVTWTsKKyNpZiBkZWZpbmVkKEVYVElfSU1SX01SMjMpCisgIC8qIERpc2FibGUgcmlzaW5nIGVkZ2UgdHJpZ2dlciBvbiB0aGUgTFBUSU0gV2FrZS11cCBUaW1lciBFeHRpIGxpbmUgKi8KKyAgX19IQUxfTFBUSU1fV0FLRVVQVElNRVJfRVhUSV9ESVNBQkxFX1JJU0lOR19FREdFKCk7CisjZW5kaWYgLyogRVhUSV9JTVJfTVIyMyAqLwogCiAgIC8qIERpc2FibGUgRVhUSSBMaW5lIGludGVycnVwdCBvbiB0aGUgTFBUSU0gV2FrZS11cCBUaW1lciAqLwogICBfX0hBTF9MUFRJTV9XQUtFVVBUSU1FUl9FWFRJX0RJU0FCTEVfSVQoKTsKQEAgLTEyMTIsNiArMTUwMCwxMSBAQAogICAvKiBEaXNhYmxlIHRoZSBQZXJpcGhlcmFsICovCiAgIF9fSEFMX0xQVElNX0RJU0FCTEUoaGxwdGltKTsKIAorICBpZiAoSEFMX0xQVElNX0dldFN0YXRlKGhscHRpbSkgPT0gSEFMX0xQVElNX1NUQVRFX1RJTUVPVVQpCisgIHsKKyAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CisgIH0KKwogICAvKiBSZXNldCBUSU1PVVQgYml0IHRvIGVuYWJsZSB0aGUgdGltZW91dCBmdW5jdGlvbiAqLwogICBobHB0aW0tPkluc3RhbmNlLT5DRkdSICY9IH5MUFRJTV9DRkdSX1RJTU9VVDsKIApAQCAtMTI1Myw5ICsxNTQ2LDE4IEBACiAgIC8qIEVuYWJsZSB0aGUgUGVyaXBoZXJhbCAqLwogICBfX0hBTF9MUFRJTV9FTkFCTEUoaGxwdGltKTsKIAorICAvKiBDbGVhciBmbGFnICovCisgIF9fSEFMX0xQVElNX0NMRUFSX0ZMQUcoaGxwdGltLCBMUFRJTV9GTEFHX0FSUk9LKTsKKwogICAvKiBMb2FkIHRoZSBwZXJpb2QgdmFsdWUgaW4gdGhlIGF1dG9yZWxvYWQgcmVnaXN0ZXIgKi8KICAgX19IQUxfTFBUSU1fQVVUT1JFTE9BRF9TRVQoaGxwdGltLCBQZXJpb2QpOwogCisgIC8qIFdhaXQgZm9yIHRoZSBjb21wbGV0aW9uIG9mIHRoZSB3cml0ZSBvcGVyYXRpb24gdG8gdGhlIExQVElNX0FSUiByZWdpc3RlciAqLworICBpZiAoTFBUSU1fV2FpdEZvckZsYWcoaGxwdGltLCBMUFRJTV9GTEFHX0FSUk9LKSA9PSBIQUxfVElNRU9VVCkKKyAgeworICAgIHJldHVybiBIQUxfVElNRU9VVDsKKyAgfQorCiAgIC8qIFN0YXJ0IHRpbWVyIGluIGNvbnRpbnVvdXMgbW9kZSAqLwogICBfX0hBTF9MUFRJTV9TVEFSVF9DT05USU5VT1VTKGhscHRpbSk7CiAKQEAgLTEyODIsNiArMTU4NCwxMSBAQAogICAvKiBEaXNhYmxlIHRoZSBQZXJpcGhlcmFsICovCiAgIF9fSEFMX0xQVElNX0RJU0FCTEUoaGxwdGltKTsKIAorICBpZiAoSEFMX0xQVElNX0dldFN0YXRlKGhscHRpbSkgPT0gSEFMX0xQVElNX1NUQVRFX1RJTUVPVVQpCisgIHsKKyAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CisgIH0KKwogICAvKiBDaGFuZ2UgdGhlIFRJTSBzdGF0ZSovCiAgIGhscHRpbS0+U3RhdGUgPSBIQUxfTFBUSU1fU1RBVEVfUkVBRFk7CiAKQEAgLTEzMDcsNiArMTYxNCwxMCBAQAogCiAgIC8qIEVuYWJsZSBFWFRJIExpbmUgaW50ZXJydXB0IG9uIHRoZSBMUFRJTSBXYWtlLXVwIFRpbWVyICovCiAgIF9fSEFMX0xQVElNX1dBS0VVUFRJTUVSX0VYVElfRU5BQkxFX0lUKCk7CisjaWYgZGVmaW5lZChFWFRJX0lNUl9NUjIzKQorICAvKiBFbmFibGUgcmlzaW5nIGVkZ2UgdHJpZ2dlciBvbiB0aGUgTFBUSU0gV2FrZS11cCBUaW1lciBFeHRpIGxpbmUgKi8KKyAgX19IQUxfTFBUSU1fV0FLRVVQVElNRVJfRVhUSV9FTkFCTEVfUklTSU5HX0VER0UoKTsKKyNlbmRpZiAvKiBFWFRJX0lNUl9NUjIzICovCiAKICAgLyogSWYgY2xvY2sgc291cmNlIGlzIG5vdCBVTFBUSU0gY2xvY2sgYW5kIGNvdW50ZXIgc291cmNlIGlzIGV4dGVybmFsLCB0aGVuIGl0IG11c3Qgbm90IGJlIHByZXNjYWxlZCAqLwogICBpZiAoKGhscHRpbS0+SW5pdC5DbG9jay5Tb3VyY2UgIT0gTFBUSU1fQ0xPQ0tTT1VSQ0VfVUxQVElNKSAmJiAoaGxwdGltLT5Jbml0LkNvdW50ZXJTb3VyY2UgPT0gTFBUSU1fQ09VTlRFUlNPVVJDRV9FWFRFUk5BTCkpCkBAIC0xMzE3LDYgKzE2MjgsMjkgQEAKICAgICBobHB0aW0tPkluc3RhbmNlLT5DRkdSICY9IH5MUFRJTV9DRkdSX1BSRVNDOwogICB9CiAKKyAgLyogRW5hYmxlIHRoZSBQZXJpcGhlcmFsICovCisgIF9fSEFMX0xQVElNX0VOQUJMRShobHB0aW0pOworCisgIC8qIENsZWFyIGZsYWcgKi8KKyAgX19IQUxfTFBUSU1fQ0xFQVJfRkxBRyhobHB0aW0sIExQVElNX0ZMQUdfQVJST0spOworCisgIC8qIExvYWQgdGhlIHBlcmlvZCB2YWx1ZSBpbiB0aGUgYXV0b3JlbG9hZCByZWdpc3RlciAqLworICBfX0hBTF9MUFRJTV9BVVRPUkVMT0FEX1NFVChobHB0aW0sIFBlcmlvZCk7CisKKyAgLyogV2FpdCBmb3IgdGhlIGNvbXBsZXRpb24gb2YgdGhlIHdyaXRlIG9wZXJhdGlvbiB0byB0aGUgTFBUSU1fQVJSIHJlZ2lzdGVyICovCisgIGlmIChMUFRJTV9XYWl0Rm9yRmxhZyhobHB0aW0sIExQVElNX0ZMQUdfQVJST0spID09IEhBTF9USU1FT1VUKQorICB7CisgICAgcmV0dXJuIEhBTF9USU1FT1VUOworICB9CisKKyAgLyogRGlzYWJsZSB0aGUgUGVyaXBoZXJhbCAqLworICBfX0hBTF9MUFRJTV9ESVNBQkxFKGhscHRpbSk7CisKKyAgaWYgKEhBTF9MUFRJTV9HZXRTdGF0ZShobHB0aW0pID09IEhBTF9MUFRJTV9TVEFURV9USU1FT1VUKQorICB7CisgICAgcmV0dXJuIEhBTF9USU1FT1VUOworICB9CisKICAgLyogRW5hYmxlIEF1dG9yZWxvYWQgd3JpdGUgY29tcGxldGUgaW50ZXJydXB0ICovCiAgIF9fSEFMX0xQVElNX0VOQUJMRV9JVChobHB0aW0sIExQVElNX0lUX0FSUk9LKTsKIApAQCAtMTMyNiw5ICsxNjYwLDYgQEAKICAgLyogRW5hYmxlIHRoZSBQZXJpcGhlcmFsICovCiAgIF9fSEFMX0xQVElNX0VOQUJMRShobHB0aW0pOwogCi0gIC8qIExvYWQgdGhlIHBlcmlvZCB2YWx1ZSBpbiB0aGUgYXV0b3JlbG9hZCByZWdpc3RlciAqLwotICBfX0hBTF9MUFRJTV9BVVRPUkVMT0FEX1NFVChobHB0aW0sIFBlcmlvZCk7Ci0KICAgLyogU3RhcnQgdGltZXIgaW4gY29udGludW91cyBtb2RlICovCiAgIF9fSEFMX0xQVElNX1NUQVJUX0NPTlRJTlVPVVMoaGxwdGltKTsKIApAQCAtMTM1MSw2ICsxNjgyLDEwIEBACiAKICAgLyogU2V0IHRoZSBMUFRJTSBzdGF0ZSAqLwogICBobHB0aW0tPlN0YXRlID0gSEFMX0xQVElNX1NUQVRFX0JVU1k7CisjaWYgZGVmaW5lZChFWFRJX0lNUl9NUjIzKQorICAvKiBEaXNhYmxlIHJpc2luZyBlZGdlIHRyaWdnZXIgb24gdGhlIExQVElNIFdha2UtdXAgVGltZXIgRXh0aSBsaW5lICovCisgIF9fSEFMX0xQVElNX1dBS0VVUFRJTUVSX0VYVElfRElTQUJMRV9SSVNJTkdfRURHRSgpOworI2VuZGlmIC8qIEVYVElfSU1SX01SMjMgKi8KIAogICAvKiBEaXNhYmxlIEVYVEkgTGluZSBpbnRlcnJ1cHQgb24gdGhlIExQVElNIFdha2UtdXAgVGltZXIgKi8KICAgX19IQUxfTFBUSU1fV0FLRVVQVElNRVJfRVhUSV9ESVNBQkxFX0lUKCk7CkBAIC0xMzU4LDEyICsxNjkzLDE2IEBACiAgIC8qIERpc2FibGUgdGhlIFBlcmlwaGVyYWwgKi8KICAgX19IQUxfTFBUSU1fRElTQUJMRShobHB0aW0pOwogCisgIGlmIChIQUxfTFBUSU1fR2V0U3RhdGUoaGxwdGltKSA9PSBIQUxfTFBUSU1fU1RBVEVfVElNRU9VVCkKKyAgeworICAgIHJldHVybiBIQUxfVElNRU9VVDsKKyAgfQorCiAgIC8qIERpc2FibGUgQXV0b3JlbG9hZCB3cml0ZSBjb21wbGV0ZSBpbnRlcnJ1cHQgKi8KICAgX19IQUxfTFBUSU1fRElTQUJMRV9JVChobHB0aW0sIExQVElNX0lUX0FSUk9LKTsKIAogICAvKiBEaXNhYmxlIEF1dG9yZWxvYWQgbWF0Y2ggaW50ZXJydXB0ICovCiAgIF9fSEFMX0xQVElNX0RJU0FCTEVfSVQoaGxwdGltLCBMUFRJTV9JVF9BUlJNKTsKLQogICAvKiBDaGFuZ2UgdGhlIFRJTSBzdGF0ZSovCiAgIGhscHRpbS0+U3RhdGUgPSBIQUxfTFBUSU1fU1RBVEVfUkVBRFk7CiAKQEAgLTE1ODAsNiArMTkxOSw5IEBACiAjZW5kaWYgLyogVVNFX0hBTF9MUFRJTV9SRUdJU1RFUl9DQUxMQkFDS1MgKi8KICAgICB9CiAgIH0KKyNpZiBkZWZpbmVkKEVYVElfSU1SX01SMjMpCisgIF9fSEFMX0xQVElNX1dBS0VVUFRJTUVSX0VYVElfQ0xFQVJfRkxBRygpOworI2VuZGlmIC8qIEVYVElfSU1SX01SMjMgKi8KIH0KIAogLyoqCkBAIC0xOTYxLDE1ICsyMzAzLDM5IEBACiAjZW5kaWYgLyogVVNFX0hBTF9MUFRJTV9SRUdJU1RFUl9DQUxMQkFDS1MgKi8KIAogLyoqCisgICogQGJyaWVmICBMUFRpbWVyIFdhaXQgZm9yIGZsYWcgc2V0CisgICogQHBhcmFtICBobHB0aW0gcG9pbnRlciB0byBhIExQVElNX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKKyAgKiAgICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgTFBUSU0gbW9kdWxlLgorICAqIEBwYXJhbSAgZmxhZyAgIFRoZSBscHRpbSBmbGFnCisgICogQHJldHZhbCBIQUwgc3RhdHVzCisgICovCitzdGF0aWMgSEFMX1N0YXR1c1R5cGVEZWYgTFBUSU1fV2FpdEZvckZsYWcoTFBUSU1fSGFuZGxlVHlwZURlZiAqaGxwdGltLCB1aW50MzJfdCBmbGFnKQoreworICBIQUxfU3RhdHVzVHlwZURlZiByZXN1bHQgPSBIQUxfT0s7CisgIHVpbnQzMl90IGNvdW50ID0gVElNRU9VVCAqIChTeXN0ZW1Db3JlQ2xvY2sgLyAyMFVMIC8gMTAwMFVMKTsKKyAgZG8KKyAgeworICAgIGNvdW50LS07CisgICAgaWYgKGNvdW50ID09IDBVTCkKKyAgICB7CisgICAgICByZXN1bHQgPSBIQUxfVElNRU9VVDsKKyAgICB9CisgIH0KKyAgd2hpbGUgKCghKF9fSEFMX0xQVElNX0dFVF9GTEFHKChobHB0aW0pLCAoZmxhZykpKSkgJiYgKGNvdW50ICE9IDBVTCkpOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qKgogICAqIEBicmllZiAgRGlzYWJsZSBMUFRJTSBIVyBpbnN0YW5jZS4KLSAgKiBAcGFyYW0gIGxwdGltIHBvaW50ZXIgdG8gYSBMUFRJTV9IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCisgICogQHBhcmFtICBobHB0aW0gcG9pbnRlciB0byBhIExQVElNX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKICAgKiAgICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgTFBUSU0gbW9kdWxlLgogICAqIEBub3RlICAgVGhlIGZvbGxvd2luZyBzZXF1ZW5jZSBpcyByZXF1aXJlZCB0byBzb2x2ZSBMUFRJTSBkaXNhYmxlIEhXIGxpbWl0YXRpb24uCiAgICogICAgICAgICBQbGVhc2UgY2hlY2sgRXJyYXRhIFNoZWV0IEVTMDMzNSBmb3IgbW9yZSBkZXRhaWxzIHVuZGVyICJNQ1UgbWF5IHJlbWFpbgogICAqICAgICAgICAgc3R1Y2sgaW4gTFBUSU0gaW50ZXJydXB0IHdoZW4gZW50ZXJpbmcgU3RvcCBtb2RlIiBzZWN0aW9uLgogICAqIEByZXR2YWwgTm9uZQogICAqLwotdm9pZCBMUFRJTV9EaXNhYmxlKExQVElNX0hhbmRsZVR5cGVEZWYgKmxwdGltKQordm9pZCBMUFRJTV9EaXNhYmxlKExQVElNX0hhbmRsZVR5cGVEZWYgKmhscHRpbSkKIHsKICAgdWludDMyX3QgdG1wY2xrc291cmNlID0gMDsKICAgdWludDMyX3QgdG1wSUVSOwpAQCAtMTk4Miw5NSArMjM0OCw5MSBAQAogCiAgIC8qKioqKioqKioqKiBTYXZlIExQVElNIENvbmZpZyAqKioqKioqKioqKi8KICAgLyogU2F2ZSBMUFRJTSBzb3VyY2UgY2xvY2sgKi8KLSAgc3dpdGNoICgodWludDMyX3QpbHB0aW0tPkluc3RhbmNlKQorICBzd2l0Y2ggKCh1aW50MzJfdClobHB0aW0tPkluc3RhbmNlKQogICB7Ci0gICAgIGNhc2UgTFBUSU0xX0JBU0U6Ci0gICAgICAgdG1wY2xrc291cmNlID0gX19IQUxfUkNDX0dFVF9MUFRJTTFfU09VUkNFKCk7Ci0gICAgICAgYnJlYWs7Ci0gICAgIGRlZmF1bHQ6Ci0gICAgICAgYnJlYWs7CisgICAgY2FzZSBMUFRJTTFfQkFTRToKKyAgICAgIHRtcGNsa3NvdXJjZSA9IF9fSEFMX1JDQ19HRVRfTFBUSU0xX1NPVVJDRSgpOworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIGJyZWFrOwogICB9CiAKICAgLyogU2F2ZSBMUFRJTSBjb25maWd1cmF0aW9uIHJlZ2lzdGVycyAqLwotICB0bXBJRVIgPSBscHRpbS0+SW5zdGFuY2UtPklFUjsKLSAgdG1wQ0ZHUiA9IGxwdGltLT5JbnN0YW5jZS0+Q0ZHUjsKLSAgdG1wQ01QID0gbHB0aW0tPkluc3RhbmNlLT5DTVA7Ci0gIHRtcEFSUiA9IGxwdGltLT5JbnN0YW5jZS0+QVJSOwotICB0bXBPUiA9IGxwdGltLT5JbnN0YW5jZS0+T1I7CisgIHRtcElFUiA9IGhscHRpbS0+SW5zdGFuY2UtPklFUjsKKyAgdG1wQ0ZHUiA9IGhscHRpbS0+SW5zdGFuY2UtPkNGR1I7CisgIHRtcENNUCA9IGhscHRpbS0+SW5zdGFuY2UtPkNNUDsKKyAgdG1wQVJSID0gaGxwdGltLT5JbnN0YW5jZS0+QVJSOworICB0bXBPUiA9IGhscHRpbS0+SW5zdGFuY2UtPk9SOwogCiAgIC8qKioqKioqKioqKiBSZXNldCBMUFRJTSAqKioqKioqKioqKi8KLSAgc3dpdGNoICgodWludDMyX3QpbHB0aW0tPkluc3RhbmNlKQorICBzd2l0Y2ggKCh1aW50MzJfdClobHB0aW0tPkluc3RhbmNlKQogICB7Ci0gICAgIGNhc2UgTFBUSU0xX0JBU0U6Ci0gICAgICAgX19IQUxfUkNDX0xQVElNMV9GT1JDRV9SRVNFVCgpOwotICAgICAgIF9fSEFMX1JDQ19MUFRJTTFfUkVMRUFTRV9SRVNFVCgpOwotICAgICAgIGJyZWFrOwotICAgICBkZWZhdWx0OgotICAgICAgIGJyZWFrOworICAgIGNhc2UgTFBUSU0xX0JBU0U6CisgICAgICBfX0hBTF9SQ0NfTFBUSU0xX0ZPUkNFX1JFU0VUKCk7CisgICAgICBfX0hBTF9SQ0NfTFBUSU0xX1JFTEVBU0VfUkVTRVQoKTsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBicmVhazsKICAgfQogCiAgIC8qKioqKioqKioqKiBSZXN0b3JlIExQVElNIENvbmZpZyAqKioqKioqKioqKi8KLSAgdWludDMyX3QgUmVmX1RpbWU7Ci0gIHVpbnQzMl90IFRpbWVfRWxhcHNlZDsKLQogICBpZiAoKHRtcENNUCAhPSAwVUwpIHx8ICh0bXBBUlIgIT0gMFVMKSkKICAgewogICAgIC8qIEZvcmNlIExQVElNIHNvdXJjZSBrZXJuZWwgY2xvY2sgZnJvbSBBUEIgKi8KLSAgICBzd2l0Y2ggKCh1aW50MzJfdClscHRpbS0+SW5zdGFuY2UpCisgICAgc3dpdGNoICgodWludDMyX3QpaGxwdGltLT5JbnN0YW5jZSkKICAgICB7Ci0gICAgICAgY2FzZSBMUFRJTTFfQkFTRToKLSAgICAgICAgIF9fSEFMX1JDQ19MUFRJTTFfQ09ORklHKFJDQ19MUFRJTTFDTEtTT1VSQ0VfUENMSzEpOwotICAgICAgICAgYnJlYWs7Ci0gICAgICAgZGVmYXVsdDoKLSAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBMUFRJTTFfQkFTRToKKyAgICAgICAgX19IQUxfUkNDX0xQVElNMV9DT05GSUcoUkNDX0xQVElNMUNMS1NPVVJDRV9QQ0xLMSk7CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgaWYgKHRtcENNUCAhPSAwVUwpCiAgICAgewogICAgICAgLyogUmVzdG9yZSBDTVAgcmVnaXN0ZXIgKExQVElNIHNob3VsZCBiZSBlbmFibGVkIGZpcnN0KSAqLwotICAgICAgbHB0aW0tPkluc3RhbmNlLT5DUiB8PSBMUFRJTV9DUl9FTkFCTEU7Ci0gICAgICBscHRpbS0+SW5zdGFuY2UtPkNNUCA9IHRtcENNUDsKLSAgICAgIC8qIFBvbGxpbmcgb24gQ01QIHdyaXRlIG9rIHN0YXR1cyBhZnRlciBhYm92ZSByZXN0b3JlIG9wZXJhdGlvbiAqLwotICAgICAgUmVmX1RpbWUgPSBIQUxfR2V0VGljaygpOwotICAgICAgZG8KLSAgICAgIHsKLSAgICAgICAgVGltZV9FbGFwc2VkID0gSEFMX0dldFRpY2soKSAtIFJlZl9UaW1lOwotICAgICAgfSB3aGlsZSAoKCEoX19IQUxfTFBUSU1fR0VUX0ZMQUcobHB0aW0sIExQVElNX0ZMQUdfQ01QT0spKSkgJiYgKFRpbWVfRWxhcHNlZCA8PSBUSU1FT1VUKSk7CisgICAgICBobHB0aW0tPkluc3RhbmNlLT5DUiB8PSBMUFRJTV9DUl9FTkFCTEU7CisgICAgICBobHB0aW0tPkluc3RhbmNlLT5DTVAgPSB0bXBDTVA7CiAKLSAgICAgIF9fSEFMX0xQVElNX0NMRUFSX0ZMQUcobHB0aW0sIExQVElNX0ZMQUdfQ01QT0spOworICAgICAgLyogV2FpdCBmb3IgdGhlIGNvbXBsZXRpb24gb2YgdGhlIHdyaXRlIG9wZXJhdGlvbiB0byB0aGUgTFBUSU1fQ01QIHJlZ2lzdGVyICovCisgICAgICBpZiAoTFBUSU1fV2FpdEZvckZsYWcoaGxwdGltLCBMUFRJTV9GTEFHX0NNUE9LKSA9PSBIQUxfVElNRU9VVCkKKyAgICAgIHsKKyAgICAgICAgaGxwdGltLT5TdGF0ZSA9IEhBTF9MUFRJTV9TVEFURV9USU1FT1VUOworICAgICAgfQorICAgICAgX19IQUxfTFBUSU1fQ0xFQVJfRkxBRyhobHB0aW0sIExQVElNX0ZMQUdfQ01QT0spOwogICAgIH0KIAogICAgIGlmICh0bXBBUlIgIT0gMFVMKQogICAgIHsKICAgICAgIC8qIFJlc3RvcmUgQVJSIHJlZ2lzdGVyIChMUFRJTSBzaG91bGQgYmUgZW5hYmxlZCBmaXJzdCkgKi8KLSAgICAgIGxwdGltLT5JbnN0YW5jZS0+Q1IgfD0gTFBUSU1fQ1JfRU5BQkxFOwotICAgICAgbHB0aW0tPkluc3RhbmNlLT5BUlIgPSB0bXBBUlI7Ci0gICAgICAvKiBQb2xsaW5nIG9uIEFSUiB3cml0ZSBvayBzdGF0dXMgYWZ0ZXIgYWJvdmUgcmVzdG9yZSBvcGVyYXRpb24gKi8KLSAgICAgIFJlZl9UaW1lID0gSEFMX0dldFRpY2soKTsKLSAgICAgIGRvCi0gICAgICB7Ci0gICAgICAgIFRpbWVfRWxhcHNlZCA9IEhBTF9HZXRUaWNrKCkgLSBSZWZfVGltZTsKLSAgICAgIH0gd2hpbGUgKCghKF9fSEFMX0xQVElNX0dFVF9GTEFHKGxwdGltLCBMUFRJTV9GTEFHX0FSUk9LKSkpICYmIChUaW1lX0VsYXBzZWQgPD0gVElNRU9VVCkpOworICAgICAgaGxwdGltLT5JbnN0YW5jZS0+Q1IgfD0gTFBUSU1fQ1JfRU5BQkxFOworICAgICAgaGxwdGltLT5JbnN0YW5jZS0+QVJSID0gdG1wQVJSOwogCi0gICAgICBfX0hBTF9MUFRJTV9DTEVBUl9GTEFHKGxwdGltLCBMUFRJTV9GTEFHX0FSUk9LKTsKKyAgICAgIC8qIFdhaXQgZm9yIHRoZSBjb21wbGV0aW9uIG9mIHRoZSB3cml0ZSBvcGVyYXRpb24gdG8gdGhlIExQVElNX0FSUiByZWdpc3RlciAqLworICAgICAgaWYgKExQVElNX1dhaXRGb3JGbGFnKGhscHRpbSwgTFBUSU1fRkxBR19BUlJPSykgPT0gSEFMX1RJTUVPVVQpCisgICAgICB7CisgICAgICAgIGhscHRpbS0+U3RhdGUgPSBIQUxfTFBUSU1fU1RBVEVfVElNRU9VVDsKKyAgICAgIH0KKworICAgICAgX19IQUxfTFBUSU1fQ0xFQVJfRkxBRyhobHB0aW0sIExQVElNX0ZMQUdfQVJST0spOwogICAgIH0KIAogICAgIC8qIFJlc3RvcmUgTFBUSU0gc291cmNlIGtlcm5lbCBjbG9jayAqLwotICAgIHN3aXRjaCAoKHVpbnQzMl90KWxwdGltLT5JbnN0YW5jZSkKKyAgICBzd2l0Y2ggKCh1aW50MzJfdClobHB0aW0tPkluc3RhbmNlKQogICAgIHsKLSAgICAgICBjYXNlIExQVElNMV9CQVNFOgotICAgICAgICAgX19IQUxfUkNDX0xQVElNMV9DT05GSUcodG1wY2xrc291cmNlKTsKLSAgICAgICAgIGJyZWFrOwotICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgTFBUSU0xX0JBU0U6CisgICAgICAgIF9fSEFMX1JDQ19MUFRJTTFfQ09ORklHKHRtcGNsa3NvdXJjZSk7CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CiAgICAgfQogICB9CiAKICAgLyogUmVzdG9yZSBjb25maWd1cmF0aW9uIHJlZ2lzdGVycyAoTFBUSU0gc2hvdWxkIGJlIGRpc2FibGVkIGZpcnN0KSAqLwotICBscHRpbS0+SW5zdGFuY2UtPkNSICY9IH4oTFBUSU1fQ1JfRU5BQkxFKTsKLSAgbHB0aW0tPkluc3RhbmNlLT5JRVIgPSB0bXBJRVI7Ci0gIGxwdGltLT5JbnN0YW5jZS0+Q0ZHUiA9IHRtcENGR1I7Ci0gIGxwdGltLT5JbnN0YW5jZS0+T1IgPSB0bXBPUjsKKyAgaGxwdGltLT5JbnN0YW5jZS0+Q1IgJj0gfihMUFRJTV9DUl9FTkFCTEUpOworICBobHB0aW0tPkluc3RhbmNlLT5JRVIgPSB0bXBJRVI7CisgIGhscHRpbS0+SW5zdGFuY2UtPkNGR1IgPSB0bXBDRkdSOworICBobHB0aW0tPkluc3RhbmNlLT5PUiA9IHRtcE9SOwogCiAgIF9fZW5hYmxlX2lycSgpOwogfQpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjR4eF9oYWxfbHRkYy5jIGIvU3JjL3N0bTMyZjR4eF9oYWxfbHRkYy5jCmluZGV4IDY2MjBlYjYuLjdlNDQxMzAgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmY0eHhfaGFsX2x0ZGMuYworKysgYi9TcmMvc3RtMzJmNHh4X2hhbF9sdGRjLmMKQEAgLTE0LDEyICsxNCwyNCBAQAogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgICAgICAgICAgICAgICAgICAgICMjIyMjIEhvdyB0byB1c2UgdGhpcyBkcml2ZXIgIyMjIyMKICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgWy4uXQotICAgICAoIykgUHJvZ3JhbSB0aGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbiB0aHJvdWdoIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVyczoKLSAgICAgICAgIHRoZSBMVERDIHRpbWluZywgdGhlIGhvcml6b250YWwgYW5kIHZlcnRpY2FsIHBvbGFyaXR5LAotICAgICAgICAgdGhlIHBpeGVsIGNsb2NrIHBvbGFyaXR5LCBEYXRhIEVuYWJsZSBwb2xhcml0eSBhbmQgdGhlIExUREMgYmFja2dyb3VuZCBjb2xvciB2YWx1ZQotICAgICAgICAgdXNpbmcgSEFMX0xURENfSW5pdCgpIGZ1bmN0aW9uCisgICAgIFsuLl0KKyAgICAgVGhlIExUREMgSEFMIGRyaXZlciBjYW4gYmUgdXNlZCBhcyBmb2xsb3dzOgogCisgICAgICgjKSBEZWNsYXJlIGEgTFREQ19IYW5kbGVUeXBlRGVmIGhhbmRsZSBzdHJ1Y3R1cmUsIGZvciBleGFtcGxlOiBMVERDX0hhbmRsZVR5cGVEZWYgIGhsdGRjOworCisgICAgICgjKSBJbml0aWFsaXplIHRoZSBMVERDIGxvdyBsZXZlbCByZXNvdXJjZXMgYnkgaW1wbGVtZW50aW5nIHRoZSBIQUxfTFREQ19Nc3BJbml0KCkgQVBJOgorICAgICAgICAgKCMjKSBFbmFibGUgdGhlIExUREMgaW50ZXJmYWNlIGNsb2NrCisgICAgICAgICAoIyMpIE5WSUMgY29uZmlndXJhdGlvbiBpZiB5b3UgbmVlZCB0byB1c2UgaW50ZXJydXB0IHByb2Nlc3MKKyAgICAgICAgICAgICAoKysrKSBDb25maWd1cmUgdGhlIExUREMgaW50ZXJydXB0IHByaW9yaXR5CisgICAgICAgICAgICAgKCsrKykgRW5hYmxlIHRoZSBOVklDIExUREMgSVJRIENoYW5uZWwKKworICAgICAoIykgSW5pdGlhbGl6ZSB0aGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbiB0aHJvdWdoIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVyczoKKyAgICAgICAgIHRoZSBMVERDIHRpbWluZywgdGhlIGhvcml6b250YWwgYW5kIHZlcnRpY2FsIHBvbGFyaXR5LCB0aGUgcGl4ZWwgY2xvY2sgcG9sYXJpdHksCisgICAgICAgICBEYXRhIEVuYWJsZSBwb2xhcml0eSBhbmQgdGhlIExUREMgYmFja2dyb3VuZCBjb2xvciB2YWx1ZSB1c2luZyBIQUxfTFREQ19Jbml0KCkgZnVuY3Rpb24KKworICAgICAqKiogQ29uZmlndXJhdGlvbiAqKioKKyAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PQorICAgICBbLi5dCiAgICAgICgjKSBQcm9ncmFtIHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9uIHRocm91Z2ggdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzOgogICAgICAgICAgdGhlIHBpeGVsIGZvcm1hdCwgdGhlIGJsZW5kaW5nIGZhY3RvcnMsIGlucHV0IGFscGhhIHZhbHVlLCB0aGUgd2luZG93IHNpemUKICAgICAgICAgIGFuZCB0aGUgaW1hZ2Ugc2l6ZSB1c2luZyBIQUxfTFREQ19Db25maWdMYXllcigpIGZ1bmN0aW9uIGZvciBmb3JlZ3JvdW5kCkBAIC03Myw1OCArODUsNjUgQEAKICAgICAgICgrKSBfX0hBTF9MVERDX0RJU0FCTEVfSVQ6IERpc2FibGUgdGhlIHNwZWNpZmllZCBMVERDIGludGVycnVwdHMuCiAgICAgICAoKykgX19IQUxfTFREQ19HRVRfSVRfU09VUkNFOiBDaGVjayB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgTFREQyBpbnRlcnJ1cHQgaGFzIG9jY3VycmVkIG9yIG5vdC4KIAotCi0gICoqKiBDYWxsYmFjayByZWdpc3RyYXRpb24gKioqCi0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0gIFRoZSBjb21waWxhdGlvbiBkZWZpbmUgIFVTRV9IQUxfTFREQ19SRUdJU1RFUl9DQUxMQkFDS1Mgd2hlbiBzZXQgdG8gMQotICBhbGxvd3MgdGhlIHVzZXIgdG8gY29uZmlndXJlIGR5bmFtaWNhbGx5IHRoZSBkcml2ZXIgY2FsbGJhY2tzLgotICBVc2UgRnVuY3Rpb24gQHJlZiBIQUxfTFREQ19SZWdpc3RlckNhbGxiYWNrKCkgdG8gcmVnaXN0ZXIgYSBjYWxsYmFjay4KLQotICBGdW5jdGlvbiBAcmVmIEhBTF9MVERDX1JlZ2lzdGVyQ2FsbGJhY2soKSBhbGxvd3MgdG8gcmVnaXN0ZXIgZm9sbG93aW5nIGNhbGxiYWNrczoKLSAgICAoKykgTGluZUV2ZW50Q2FsbGJhY2sgICA6IExUREMgTGluZSBFdmVudCBDYWxsYmFjay4KLSAgICAoKykgUmVsb2FkRXZlbnRDYWxsYmFjayA6IExUREMgUmVsb2FkIEV2ZW50IENhbGxiYWNrLgotICAgICgrKSBFcnJvckNhbGxiYWNrICAgICAgIDogTFREQyBFcnJvciBDYWxsYmFjawotICAgICgrKSBNc3BJbml0Q2FsbGJhY2sgICAgIDogTFREQyBNc3BJbml0LgotICAgICgrKSBNc3BEZUluaXRDYWxsYmFjayAgIDogTFREQyBNc3BEZUluaXQuCi0gIFRoaXMgZnVuY3Rpb24gdGFrZXMgYXMgcGFyYW1ldGVycyB0aGUgSEFMIHBlcmlwaGVyYWwgaGFuZGxlLCB0aGUgQ2FsbGJhY2sgSUQKLSAgYW5kIGEgcG9pbnRlciB0byB0aGUgdXNlciBjYWxsYmFjayBmdW5jdGlvbi4KLQotICBVc2UgZnVuY3Rpb24gQHJlZiBIQUxfTFREQ19VblJlZ2lzdGVyQ2FsbGJhY2soKSB0byByZXNldCBhIGNhbGxiYWNrIHRvIHRoZSBkZWZhdWx0Ci0gIHdlYWsgZnVuY3Rpb24uCi0gIEByZWYgSEFMX0xURENfVW5SZWdpc3RlckNhbGxiYWNrIHRha2VzIGFzIHBhcmFtZXRlcnMgdGhlIEhBTCBwZXJpcGhlcmFsIGhhbmRsZSwKLSAgYW5kIHRoZSBDYWxsYmFjayBJRC4KLSAgVGhpcyBmdW5jdGlvbiBhbGxvd3MgdG8gcmVzZXQgZm9sbG93aW5nIGNhbGxiYWNrczoKLSAgICAoKykgTGluZUV2ZW50Q2FsbGJhY2sgICA6IExUREMgTGluZSBFdmVudCBDYWxsYmFjay4KLSAgICAoKykgUmVsb2FkRXZlbnRDYWxsYmFjayA6IExUREMgUmVsb2FkIEV2ZW50IENhbGxiYWNrLgotICAgICgrKSBFcnJvckNhbGxiYWNrICAgICAgIDogTFREQyBFcnJvciBDYWxsYmFjawotICAgICgrKSBNc3BJbml0Q2FsbGJhY2sgICAgIDogTFREQyBNc3BJbml0LgotICAgICgrKSBNc3BEZUluaXRDYWxsYmFjayAgIDogTFREQyBNc3BEZUluaXQuCi0KLSAgQnkgZGVmYXVsdCwgYWZ0ZXIgdGhlIEhBTF9MVERDX0luaXQgYW5kIHdoZW4gdGhlIHN0YXRlIGlzIEhBTF9MVERDX1NUQVRFX1JFU0VUCi0gIGFsbCBjYWxsYmFja3MgYXJlIHNldCB0byB0aGUgY29ycmVzcG9uZGluZyB3ZWFrIGZ1bmN0aW9uczoKLSAgZXhhbXBsZXMgQHJlZiBIQUxfTFREQ19MaW5lRXZlbnRDYWxsYmFjaygpLCBAcmVmIEhBTF9MVERDX0Vycm9yQ2FsbGJhY2soKS4KLSAgRXhjZXB0aW9uIGRvbmUgZm9yIE1zcEluaXQgYW5kIE1zcERlSW5pdCBmdW5jdGlvbnMgdGhhdCBhcmUKLSAgcmVzZXQgdG8gdGhlIGxlZ2FjeSB3ZWFrIGZ1bmN0aW9uIGluIHRoZSBIQUxfTFREQ19Jbml0LyBAcmVmIEhBTF9MVERDX0RlSW5pdCBvbmx5IHdoZW4KLSAgdGhlc2UgY2FsbGJhY2tzIGFyZSBudWxsIChub3QgcmVnaXN0ZXJlZCBiZWZvcmVoYW5kKS4KLSAgaWYgbm90LCBNc3BJbml0IG9yIE1zcERlSW5pdCBhcmUgbm90IG51bGwsIHRoZSBAcmVmIEhBTF9MVERDX0luaXQvIEByZWYgSEFMX0xURENfRGVJbml0Ci0gIGtlZXAgYW5kIHVzZSB0aGUgdXNlciBNc3BJbml0L01zcERlSW5pdCBjYWxsYmFja3MgKHJlZ2lzdGVyZWQgYmVmb3JlaGFuZCkKLQotICBDYWxsYmFja3MgY2FuIGJlIHJlZ2lzdGVyZWQvdW5yZWdpc3RlcmVkIGluIEhBTF9MVERDX1NUQVRFX1JFQURZIHN0YXRlIG9ubHkuCi0gIEV4Y2VwdGlvbiBkb25lIE1zcEluaXQvTXNwRGVJbml0IHRoYXQgY2FuIGJlIHJlZ2lzdGVyZWQvdW5yZWdpc3RlcmVkCi0gIGluIEhBTF9MVERDX1NUQVRFX1JFQURZIG9yIEhBTF9MVERDX1NUQVRFX1JFU0VUIHN0YXRlLAotICB0aHVzIHJlZ2lzdGVyZWQgKHVzZXIpIE1zcEluaXQvRGVJbml0IGNhbGxiYWNrcyBjYW4gYmUgdXNlZCBkdXJpbmcgdGhlIEluaXQvRGVJbml0LgotICBJbiB0aGF0IGNhc2UgZmlyc3QgcmVnaXN0ZXIgdGhlIE1zcEluaXQvTXNwRGVJbml0IHVzZXIgY2FsbGJhY2tzCi0gIHVzaW5nIEByZWYgSEFMX0xURENfUmVnaXN0ZXJDYWxsYmFjaygpIGJlZm9yZSBjYWxsaW5nIEByZWYgSEFMX0xURENfRGVJbml0Ci0gIG9yIEhBTF9MVERDX0luaXQgZnVuY3Rpb24uCi0KLSAgV2hlbiBUaGUgY29tcGlsYXRpb24gZGVmaW5lIFVTRV9IQUxfTFREQ19SRUdJU1RFUl9DQUxMQkFDS1MgaXMgc2V0IHRvIDAgb3IKLSAgbm90IGRlZmluZWQsIHRoZSBjYWxsYmFjayByZWdpc3RyYXRpb24gZmVhdHVyZSBpcyBub3QgYXZhaWxhYmxlIGFuZCBhbGwgY2FsbGJhY2tzCi0gIGFyZSBzZXQgdG8gdGhlIGNvcnJlc3BvbmRpbmcgd2VhayBmdW5jdGlvbnMuCi0KICAgICAgWy4uXQogICAgICAgIChAKSBZb3UgY2FuIHJlZmVyIHRvIHRoZSBMVERDIEhBTCBkcml2ZXIgaGVhZGVyIGZpbGUgZm9yIG1vcmUgdXNlZnVsIG1hY3JvcwogCisKKyAgICAgKioqIENhbGxiYWNrIHJlZ2lzdHJhdGlvbiAqKioKKyAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgIFsuLl0KKyAgICAgVGhlIGNvbXBpbGF0aW9uIGRlZmluZSAgVVNFX0hBTF9MVERDX1JFR0lTVEVSX0NBTExCQUNLUyB3aGVuIHNldCB0byAxCisgICAgIGFsbG93cyB0aGUgdXNlciB0byBjb25maWd1cmUgZHluYW1pY2FsbHkgdGhlIGRyaXZlciBjYWxsYmFja3MuCisgICAgIFVzZSBmdW5jdGlvbiBIQUxfTFREQ19SZWdpc3RlckNhbGxiYWNrKCkgdG8gcmVnaXN0ZXIgYSBjYWxsYmFjay4KKworICAgIFsuLl0KKyAgICBGdW5jdGlvbiBIQUxfTFREQ19SZWdpc3RlckNhbGxiYWNrKCkgYWxsb3dzIHRvIHJlZ2lzdGVyIGZvbGxvd2luZyBjYWxsYmFja3M6CisgICAgICAoKykgTGluZUV2ZW50Q2FsbGJhY2sgICA6IExUREMgTGluZSBFdmVudCBDYWxsYmFjay4KKyAgICAgICgrKSBSZWxvYWRFdmVudENhbGxiYWNrIDogTFREQyBSZWxvYWQgRXZlbnQgQ2FsbGJhY2suCisgICAgICAoKykgRXJyb3JDYWxsYmFjayAgICAgICA6IExUREMgRXJyb3IgQ2FsbGJhY2sKKyAgICAgICgrKSBNc3BJbml0Q2FsbGJhY2sgICAgIDogTFREQyBNc3BJbml0LgorICAgICAgKCspIE1zcERlSW5pdENhbGxiYWNrICAgOiBMVERDIE1zcERlSW5pdC4KKyAgICBbLi5dCisgICAgVGhpcyBmdW5jdGlvbiB0YWtlcyBhcyBwYXJhbWV0ZXJzIHRoZSBIQUwgcGVyaXBoZXJhbCBoYW5kbGUsIHRoZSBjYWxsYmFjayBJRAorICAgIGFuZCBhIHBvaW50ZXIgdG8gdGhlIHVzZXIgY2FsbGJhY2sgZnVuY3Rpb24uCisKKyAgICBbLi5dCisgICAgVXNlIGZ1bmN0aW9uIEhBTF9MVERDX1VuUmVnaXN0ZXJDYWxsYmFjaygpIHRvIHJlc2V0IGEgY2FsbGJhY2sgdG8gdGhlIGRlZmF1bHQKKyAgICB3ZWFrIGZ1bmN0aW9uLgorICAgIEhBTF9MVERDX1VuUmVnaXN0ZXJDYWxsYmFjaygpIHRha2VzIGFzIHBhcmFtZXRlcnMgdGhlIEhBTCBwZXJpcGhlcmFsIGhhbmRsZQorICAgIGFuZCB0aGUgY2FsbGJhY2sgSUQuCisgICAgWy4uXQorICAgIFRoaXMgZnVuY3Rpb24gYWxsb3dzIHRvIHJlc2V0IGZvbGxvd2luZyBjYWxsYmFja3M6CisgICAgICAoKykgTGluZUV2ZW50Q2FsbGJhY2sgICA6IExUREMgTGluZSBFdmVudCBDYWxsYmFjaworICAgICAgKCspIFJlbG9hZEV2ZW50Q2FsbGJhY2sgOiBMVERDIFJlbG9hZCBFdmVudCBDYWxsYmFjaworICAgICAgKCspIEVycm9yQ2FsbGJhY2sgICAgICAgOiBMVERDIEVycm9yIENhbGxiYWNrCisgICAgICAoKykgTXNwSW5pdENhbGxiYWNrICAgICA6IExUREMgTXNwSW5pdAorICAgICAgKCspIE1zcERlSW5pdENhbGxiYWNrICAgOiBMVERDIE1zcERlSW5pdC4KKworICAgIFsuLl0KKyAgICBCeSBkZWZhdWx0LCBhZnRlciB0aGUgSEFMX0xURENfSW5pdCBhbmQgd2hlbiB0aGUgc3RhdGUgaXMgSEFMX0xURENfU1RBVEVfUkVTRVQKKyAgICBhbGwgY2FsbGJhY2tzIGFyZSBzZXQgdG8gdGhlIGNvcnJlc3BvbmRpbmcgd2VhayBmdW5jdGlvbnM6CisgICAgZXhhbXBsZXMgSEFMX0xURENfTGluZUV2ZW50Q2FsbGJhY2soKSwgSEFMX0xURENfRXJyb3JDYWxsYmFjaygpLgorICAgIEV4Y2VwdGlvbiBkb25lIGZvciBNc3BJbml0IGFuZCBNc3BEZUluaXQgZnVuY3Rpb25zIHRoYXQgYXJlCisgICAgcmVzZXQgdG8gdGhlIGxlZ2FjeSB3ZWFrIChzdXJjaGFyZ2VkKSBmdW5jdGlvbnMgaW4gdGhlIEhBTF9MVERDX0luaXQoKSBhbmQgSEFMX0xURENfRGVJbml0KCkKKyAgICBvbmx5IHdoZW4gdGhlc2UgY2FsbGJhY2tzIGFyZSBudWxsIChub3QgcmVnaXN0ZXJlZCBiZWZvcmVoYW5kKS4KKyAgICBJZiBub3QsIE1zcEluaXQgb3IgTXNwRGVJbml0IGFyZSBub3QgbnVsbCwgdGhlIEhBTF9MVERDX0luaXQoKSBhbmQgSEFMX0xURENfRGVJbml0KCkKKyAgICBrZWVwIGFuZCB1c2UgdGhlIHVzZXIgTXNwSW5pdC9Nc3BEZUluaXQgY2FsbGJhY2tzIChyZWdpc3RlcmVkIGJlZm9yZWhhbmQpLgorCisgICAgWy4uXQorICAgIENhbGxiYWNrcyBjYW4gYmUgcmVnaXN0ZXJlZC91bnJlZ2lzdGVyZWQgaW4gSEFMX0xURENfU1RBVEVfUkVBRFkgc3RhdGUgb25seS4KKyAgICBFeGNlcHRpb24gZG9uZSBNc3BJbml0L01zcERlSW5pdCB0aGF0IGNhbiBiZSByZWdpc3RlcmVkL3VucmVnaXN0ZXJlZAorICAgIGluIEhBTF9MVERDX1NUQVRFX1JFQURZIG9yIEhBTF9MVERDX1NUQVRFX1JFU0VUIHN0YXRlLAorICAgIHRodXMgcmVnaXN0ZXJlZCAodXNlcikgTXNwSW5pdC9EZUluaXQgY2FsbGJhY2tzIGNhbiBiZSB1c2VkIGR1cmluZyB0aGUgSW5pdC9EZUluaXQuCisgICAgSW4gdGhhdCBjYXNlIGZpcnN0IHJlZ2lzdGVyIHRoZSBNc3BJbml0L01zcERlSW5pdCB1c2VyIGNhbGxiYWNrcworICAgIHVzaW5nIEhBTF9MVERDX1JlZ2lzdGVyQ2FsbGJhY2soKSBiZWZvcmUgY2FsbGluZyBIQUxfTFREQ19EZUluaXQoKQorICAgIG9yIEhBTF9MVERDX0luaXQoKSBmdW5jdGlvbi4KKworICAgIFsuLl0KKyAgICBXaGVuIHRoZSBjb21waWxhdGlvbiBkZWZpbmUgVVNFX0hBTF9MVERDX1JFR0lTVEVSX0NBTExCQUNLUyBpcyBzZXQgdG8gMCBvcgorICAgIG5vdCBkZWZpbmVkLCB0aGUgY2FsbGJhY2sgcmVnaXN0cmF0aW9uIGZlYXR1cmUgaXMgbm90IGF2YWlsYWJsZSBhbmQgYWxsIGNhbGxiYWNrcworICAgIGFyZSBzZXQgdG8gdGhlIGNvcnJlc3BvbmRpbmcgd2VhayBmdW5jdGlvbnMuCisKICAgQGVuZHZlcmJhdGltCiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqIEBhdHRlbnRpb24KQEAgLTE0MywxMiArMTYyLDE0IEBACiAvKiBJbmNsdWRlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogI2luY2x1ZGUgInN0bTMyZjR4eF9oYWwuaCIKIAotI2lmZGVmIEhBTF9MVERDX01PRFVMRV9FTkFCTEVECi0jaWYgZGVmaW5lZCAoTFREQykKIC8qKiBAYWRkdG9ncm91cCBTVE0zMkY0eHhfSEFMX0RyaXZlcgogICAqIEB7CiAgICovCiAKKyNpZmRlZiBIQUxfTFREQ19NT0RVTEVfRU5BQkxFRAorCisjaWYgZGVmaW5lZCAoTFREQykKKwogLyoqIEBkZWZncm91cCBMVERDIExUREMKICAgKiBAYnJpZWYgTFREQyBIQUwgbW9kdWxlIGRyaXZlcgogICAqIEB7CkBAIC0yMTMxLDEyICsyMTUyLDEyIEBACiAgICogQH0KICAgKi8KIAorI2VuZGlmIC8qIExUREMgKi8KKworI2VuZGlmIC8qIEhBTF9MVERDX01PRFVMRV9FTkFCTEVEICovCiAKIC8qKgogICAqIEB9CiAgICovCiAKLSNlbmRpZiAvKiBMVERDICovCi0jZW5kaWYgLyogSEFMX0xURENfTU9EVUxFX0VOQUJMRUQgKi8KLQogLyoqKioqKioqKioqKioqKioqKioqKioqKiAoQykgQ09QWVJJR0hUIFNUTWljcm9lbGVjdHJvbmljcyAqKioqKkVORCBPRiBGSUxFKioqKi8KZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmY0eHhfaGFsX2x0ZGNfZXguYyBiL1NyYy9zdG0zMmY0eHhfaGFsX2x0ZGNfZXguYwppbmRleCBhZjc1NTg3Li44YzM5MTk0IDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmNHh4X2hhbF9sdGRjX2V4LmMKKysrIGIvU3JjL3N0bTMyZjR4eF9oYWxfbHRkY19leC5jCkBAIC0yNCw2ICsyNCw4IEBACiAgICogQHsKICAgKi8KIAorI2lmIGRlZmluZWQoSEFMX0xURENfTU9EVUxFX0VOQUJMRUQpICYmIGRlZmluZWQoSEFMX0RTSV9NT0RVTEVfRU5BQkxFRCkKKwogI2lmIGRlZmluZWQgKExUREMpICYmIGRlZmluZWQgKERTSSkKIAogLyoqIEBkZWZncm91cCBMVERDRXggTFREQ0V4CkBAIC0zMSw4ICszMyw2IEBACiAgICogQHsKICAgKi8KIAotI2lmIGRlZmluZWQoSEFMX0xURENfTU9EVUxFX0VOQUJMRUQpICYmIGRlZmluZWQoSEFMX0RTSV9NT0RVTEVfRU5BQkxFRCkKLQogLyogUHJpdmF0ZSB0eXBlZGVmIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qIFByaXZhdGUgZGVmaW5lIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiBQcml2YXRlIG1hY3JvIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtMTM0LDE0ICsxMzQsMTQgQEAKICAgKiBAfQogICAqLwogCi0jZW5kaWYgLyogSEFMX0xUQ0RfTU9EVUxFX0VOQUJMRUQgJiYgSEFMX0RTSV9NT0RVTEVfRU5BQkxFRCAqLwotCiAvKioKICAgKiBAfQogICAqLwogCiAjZW5kaWYgLyogTFREQyAmJiBEU0kgKi8KIAorI2VuZGlmIC8qIEhBTF9MVENEX01PRFVMRV9FTkFCTEVEICYmIEhBTF9EU0lfTU9EVUxFX0VOQUJMRUQgKi8KKwogLyoqCiAgICogQH0KICAgKi8KZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmY0eHhfaGFsX21tYy5jIGIvU3JjL3N0bTMyZjR4eF9oYWxfbW1jLmMKaW5kZXggMjhlOGYwYy4uZWFmNzA4OCAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZjR4eF9oYWxfbW1jLmMKKysrIGIvU3JjL3N0bTMyZjR4eF9oYWxfbW1jLmMKQEAgLTMsMzQgKzMsMzQgQEAKICAgKiBAZmlsZSAgICBzdG0zMmY0eHhfaGFsX21tYy5jCiAgICogQGF1dGhvciAgTUNEIEFwcGxpY2F0aW9uIFRlYW0KICAgKiBAYnJpZWYgICBNTUMgY2FyZCBIQUwgbW9kdWxlIGRyaXZlci4KLSAgKiAgICAgICAgICBUaGlzIGZpbGUgcHJvdmlkZXMgZmlybXdhcmUgZnVuY3Rpb25zIHRvIG1hbmFnZSB0aGUgZm9sbG93aW5nIAorICAqICAgICAgICAgIFRoaXMgZmlsZSBwcm92aWRlcyBmaXJtd2FyZSBmdW5jdGlvbnMgdG8gbWFuYWdlIHRoZSBmb2xsb3dpbmcKICAgKiAgICAgICAgICBmdW5jdGlvbmFsaXRpZXMgb2YgdGhlIFNlY3VyZSBEaWdpdGFsIChNTUMpIHBlcmlwaGVyYWw6CiAgICogICAgICAgICAgICsgSW5pdGlhbGl6YXRpb24gYW5kIGRlLWluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucwogICAqICAgICAgICAgICArIElPIG9wZXJhdGlvbiBmdW5jdGlvbnMKLSAgKiAgICAgICAgICAgKyBQZXJpcGhlcmFsIENvbnRyb2wgZnVuY3Rpb25zIAorICAqICAgICAgICAgICArIFBlcmlwaGVyYWwgQ29udHJvbCBmdW5jdGlvbnMKICAgKiAgICAgICAgICAgKyBNTUMgY2FyZCBDb250cm9sIGZ1bmN0aW9ucwotICAqICAgICAgICAgCisgICoKICAgQHZlcmJhdGltCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAgICAgICAgICAgICAgICAgICAgIyMjIyMgSG93IHRvIHVzZSB0aGlzIGRyaXZlciAjIyMjIwogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgWy4uXQotICAgIFRoaXMgZHJpdmVyIGltcGxlbWVudHMgYSBoaWdoIGxldmVsIGNvbW11bmljYXRpb24gbGF5ZXIgZm9yIHJlYWQgYW5kIHdyaXRlIGZyb20vdG8gCi0gICAgdGhpcyBtZW1vcnkuIFRoZSBuZWVkZWQgU1RNMzIgaGFyZHdhcmUgcmVzb3VyY2VzIChTRE1NQyBhbmQgR1BJTykgYXJlIHBlcmZvcm1lZCBieSAKLSAgICB0aGUgdXNlciBpbiBIQUxfTU1DX01zcEluaXQoKSBmdW5jdGlvbiAoTVNQIGxheWVyKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgIEJhc2ljYWxseSwgdGhlIE1TUCBsYXllciBjb25maWd1cmF0aW9uIHNob3VsZCBiZSB0aGUgc2FtZSBhcyB3ZSBwcm92aWRlIGluIHRoZSAKKyAgICBUaGlzIGRyaXZlciBpbXBsZW1lbnRzIGEgaGlnaCBsZXZlbCBjb21tdW5pY2F0aW9uIGxheWVyIGZvciByZWFkIGFuZCB3cml0ZSBmcm9tL3RvCisgICAgdGhpcyBtZW1vcnkuIFRoZSBuZWVkZWQgU1RNMzIgaGFyZHdhcmUgcmVzb3VyY2VzIChTRE1NQyBhbmQgR1BJTykgYXJlIHBlcmZvcm1lZCBieQorICAgIHRoZSB1c2VyIGluIEhBTF9NTUNfTXNwSW5pdCgpIGZ1bmN0aW9uIChNU1AgbGF5ZXIpLgorICAgIEJhc2ljYWxseSwgdGhlIE1TUCBsYXllciBjb25maWd1cmF0aW9uIHNob3VsZCBiZSB0aGUgc2FtZSBhcyB3ZSBwcm92aWRlIGluIHRoZQogICAgIGV4YW1wbGVzLgogICAgIFlvdSBjYW4gZWFzaWx5IHRhaWxvciB0aGlzIGNvbmZpZ3VyYXRpb24gYWNjb3JkaW5nIHRvIGhhcmR3YXJlIHJlc291cmNlcy4KIAogICBbLi5dCi0gICAgVGhpcyBkcml2ZXIgaXMgYSBnZW5lcmljIGxheWVyZWQgZHJpdmVyIGZvciBTRE1NQyBtZW1vcmllcyB3aGljaCB1c2VzIHRoZSBIQUwgCi0gICAgU0RNTUMgZHJpdmVyIGZ1bmN0aW9ucyB0byBpbnRlcmZhY2Ugd2l0aCBNTUMgYW5kIGVNTUMgY2FyZHMgZGV2aWNlcy4gCisgICAgVGhpcyBkcml2ZXIgaXMgYSBnZW5lcmljIGxheWVyZWQgZHJpdmVyIGZvciBTRE1NQyBtZW1vcmllcyB3aGljaCB1c2VzIHRoZSBIQUwKKyAgICBTRE1NQyBkcml2ZXIgZnVuY3Rpb25zIHRvIGludGVyZmFjZSB3aXRoIE1NQyBhbmQgZU1NQyBjYXJkcyBkZXZpY2VzLgogICAgIEl0IGlzIHVzZWQgYXMgZm9sbG93czoKLSAKKwogICAgICgjKUluaXRpYWxpemUgdGhlIFNETU1DIGxvdyBsZXZlbCByZXNvdXJjZXMgYnkgaW1wbGVtZW50IHRoZSBIQUxfTU1DX01zcEluaXQoKSBBUEk6Ci0gICAgICAgICgjIykgRW5hYmxlIHRoZSBTRE1NQyBpbnRlcmZhY2UgY2xvY2sgdXNpbmcgX19IQUxfUkNDX1NETU1DX0NMS19FTkFCTEUoKTsgCisgICAgICAgICgjIykgRW5hYmxlIHRoZSBTRE1NQyBpbnRlcmZhY2UgY2xvY2sgdXNpbmcgX19IQUxfUkNDX1NETU1DX0NMS19FTkFCTEUoKTsKICAgICAgICAgKCMjKSBTRE1NQyBwaW5zIGNvbmZpZ3VyYXRpb24gZm9yIE1NQyBjYXJkCi0gICAgICAgICAgICAoKysrKSBFbmFibGUgdGhlIGNsb2NrIGZvciB0aGUgU0RNTUMgR1BJT3MgdXNpbmcgdGhlIGZ1bmN0aW9ucyBfX0hBTF9SQ0NfR1BJT3hfQ0xLX0VOQUJMRSgpOyAgIAorICAgICAgICAgICAgKCsrKykgRW5hYmxlIHRoZSBjbG9jayBmb3IgdGhlIFNETU1DIEdQSU9zIHVzaW5nIHRoZSBmdW5jdGlvbnMgX19IQUxfUkNDX0dQSU94X0NMS19FTkFCTEUoKTsKICAgICAgICAgICAgICgrKyspIENvbmZpZ3VyZSB0aGVzZSBTRE1NQyBwaW5zIGFzIGFsdGVybmF0ZSBmdW5jdGlvbiBwdWxsLXVwIHVzaW5nIEhBTF9HUElPX0luaXQoKQogICAgICAgICAgICAgICAgICAgYW5kIGFjY29yZGluZyB0byB5b3VyIHBpbiBhc3NpZ25tZW50OwogICAgICAgICAoIyMpIERNQSBDb25maWd1cmF0aW9uIGlmIHlvdSBuZWVkIHRvIHVzZSBETUEgcHJvY2VzcyAoSEFMX01NQ19SZWFkQmxvY2tzX0RNQSgpCkBAIC0zOCw4ICszOCw4IEBACiAgICAgICAgICAgICAoKysrKSBFbmFibGUgdGhlIERNQXggaW50ZXJmYWNlIGNsb2NrIHVzaW5nIF9fSEFMX1JDQ19ETUF4X0NMS19FTkFCTEUoKTsgCiAgICAgICAgICAgICAoKysrKSBDb25maWd1cmUgdGhlIERNQSB1c2luZyB0aGUgZnVuY3Rpb24gSEFMX0RNQV9Jbml0KCkgd2l0aCBwcmVkZWNsYXJlZCBhbmQgZmlsbGVkLiAKICAgICAgICAgKCMjKSBOVklDIGNvbmZpZ3VyYXRpb24gaWYgeW91IG5lZWQgdG8gdXNlIGludGVycnVwdCBwcm9jZXNzIHdoZW4gdXNpbmcgRE1BIHRyYW5zZmVyLgotICAgICAgICAgICAgKCsrKykgQ29uZmlndXJlIHRoZSBTRE1NQyBhbmQgRE1BIGludGVycnVwdCBwcmlvcml0aWVzIHVzaW5nIGZ1bmN0aW9ucwotICAgICAgICAgICAgICAgICAgSEFMX05WSUNfU2V0UHJpb3JpdHkoKTsgRE1BIHByaW9yaXR5IGlzIHN1cGVyaW9yIHRvIFNETU1DJ3MgcHJpb3JpdHkKKyAgICAgICAgICAgICgrKyspIENvbmZpZ3VyZSB0aGUgU0RNTUMgYW5kIERNQSBpbnRlcnJ1cHQgcHJpb3JpdGllcyB1c2luZyBmdW5jdGlvbiBIQUxfTlZJQ19TZXRQcmlvcml0eSgpOworICAgICAgICAgICAgICAgICAgRE1BIHByaW9yaXR5IGlzIHN1cGVyaW9yIHRvIFNETU1DJ3MgcHJpb3JpdHkKICAgICAgICAgICAgICgrKyspIEVuYWJsZSB0aGUgTlZJQyBETUEgYW5kIFNETU1DIElSUXMgdXNpbmcgZnVuY3Rpb24gSEFMX05WSUNfRW5hYmxlSVJRKCkKICAgICAgICAgICAgICgrKyspIFNETU1DIGludGVycnVwdHMgYXJlIG1hbmFnZWQgdXNpbmcgdGhlIG1hY3JvcyBfX0hBTF9NTUNfRU5BQkxFX0lUKCkgCiAgICAgICAgICAgICAgICAgICBhbmQgX19IQUxfTU1DX0RJU0FCTEVfSVQoKSBpbnNpZGUgdGhlIGNvbW11bmljYXRpb24gcHJvY2Vzcy4KQEAgLTQ3LDcwICs0Nyw3MSBAQAogICAgICAgICAgICAgICAgICAgYW5kIF9fSEFMX01NQ19DTEVBUl9JVCgpCiAgICAgICAgICgjIykgTlZJQyBjb25maWd1cmF0aW9uIGlmIHlvdSBuZWVkIHRvIHVzZSBpbnRlcnJ1cHQgcHJvY2VzcyAoSEFMX01NQ19SZWFkQmxvY2tzX0lUKCkKICAgICAgICAgICAgICBhbmQgSEFMX01NQ19Xcml0ZUJsb2Nrc19JVCgpIEFQSXMpLgotICAgICAgICAgICAgKCsrKykgQ29uZmlndXJlIHRoZSBTRE1NQyBpbnRlcnJ1cHQgcHJpb3JpdGllcyB1c2luZyBmdW5jdGlvbgotICAgICAgICAgICAgICAgICAgSEFMX05WSUNfU2V0UHJpb3JpdHkoKTsKKyAgICAgICAgICAgICgrKyspIENvbmZpZ3VyZSB0aGUgU0RNTUMgaW50ZXJydXB0IHByaW9yaXRpZXMgdXNpbmcgZnVuY3Rpb24gSEFMX05WSUNfU2V0UHJpb3JpdHkoKTsKICAgICAgICAgICAgICgrKyspIEVuYWJsZSB0aGUgTlZJQyBTRE1NQyBJUlFzIHVzaW5nIGZ1bmN0aW9uIEhBTF9OVklDX0VuYWJsZUlSUSgpCi0gICAgICAgICAgICAoKysrKSBTRE1NQyBpbnRlcnJ1cHRzIGFyZSBtYW5hZ2VkIHVzaW5nIHRoZSBtYWNyb3MgX19IQUxfTU1DX0VOQUJMRV9JVCgpIAorICAgICAgICAgICAgKCsrKykgU0RNTUMgaW50ZXJydXB0cyBhcmUgbWFuYWdlZCB1c2luZyB0aGUgbWFjcm9zIF9fSEFMX01NQ19FTkFCTEVfSVQoKQogICAgICAgICAgICAgICAgICAgYW5kIF9fSEFMX01NQ19ESVNBQkxFX0lUKCkgaW5zaWRlIHRoZSBjb21tdW5pY2F0aW9uIHByb2Nlc3MuCiAgICAgICAgICAgICAoKysrKSBTRE1NQyBpbnRlcnJ1cHRzIHBlbmRpbmcgYml0cyBhcmUgbWFuYWdlZCB1c2luZyB0aGUgbWFjcm9zIF9fSEFMX01NQ19HRVRfSVQoKQogICAgICAgICAgICAgICAgICAgYW5kIF9fSEFMX01NQ19DTEVBUl9JVCgpCi0gICAgKCMpIEF0IHRoaXMgc3RhZ2UsIHlvdSBjYW4gcGVyZm9ybSBNTUMgcmVhZC93cml0ZS9lcmFzZSBvcGVyYXRpb25zIGFmdGVyIE1NQyBjYXJkIGluaXRpYWxpemF0aW9uICAKKyAgICAoIykgQXQgdGhpcyBzdGFnZSwgeW91IGNhbiBwZXJmb3JtIE1NQyByZWFkL3dyaXRlL2VyYXNlIG9wZXJhdGlvbnMgYWZ0ZXIgTU1DIGNhcmQgaW5pdGlhbGl6YXRpb24KIAotICAgICAgICAgCisKICAgKioqIE1NQyBDYXJkIEluaXRpYWxpemF0aW9uIGFuZCBjb25maWd1cmF0aW9uICoqKgotICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gICAgCisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBbLi5dCi0gICAgVG8gaW5pdGlhbGl6ZSB0aGUgTU1DIENhcmQsIHVzZSB0aGUgSEFMX01NQ19Jbml0KCkgZnVuY3Rpb24uIEl0IEluaXRpYWxpemVzIAotICAgIFNETU1DIElQIChTVE0zMiBzaWRlKSBhbmQgdGhlIE1NQyBDYXJkLCBhbmQgcHV0IGl0IGludG8gU3RhbmRCeSBTdGF0ZSAoUmVhZHkgZm9yIGRhdGEgdHJhbnNmZXIpLiAKKyAgICBUbyBpbml0aWFsaXplIHRoZSBNTUMgQ2FyZCwgdXNlIHRoZSBIQUxfTU1DX0luaXQoKSBmdW5jdGlvbi4gSXQgSW5pdGlhbGl6ZXMKKyAgICBTRE1NQyBQZXJpcGhlcmFsIChTVE0zMiBzaWRlKSBhbmQgdGhlIE1NQyBDYXJkLCBhbmQgcHV0IGl0IGludG8gU3RhbmRCeSBTdGF0ZSAoUmVhZHkgZm9yIGRhdGEgdHJhbnNmZXIpLgogICAgIFRoaXMgZnVuY3Rpb24gcHJvdmlkZSB0aGUgZm9sbG93aW5nIG9wZXJhdGlvbnM6CiAKICAgICAoIykgSW5pdGlhbGl6ZSB0aGUgU0RNTUMgcGVyaXBoZXJhbCBpbnRlcmZhY2Ugd2l0aCBkZWZhdWxsdCBjb25maWd1cmF0aW9uLgotICAgICAgICBUaGUgaW5pdGlhbGl6YXRpb24gcHJvY2VzcyBpcyBkb25lIGF0IDQwMEtIei4gWW91IGNhbiBjaGFuZ2Ugb3IgYWRhcHQgCi0gICAgICAgIHRoaXMgZnJlcXVlbmN5IGJ5IGFkanVzdGluZyB0aGUgIkNsb2NrRGl2IiBmaWVsZC4gCisgICAgICAgIFRoZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzIGlzIGRvbmUgYXQgNDAwS0h6LiBZb3UgY2FuIGNoYW5nZSBvciBhZGFwdAorICAgICAgICB0aGlzIGZyZXF1ZW5jeSBieSBhZGp1c3RpbmcgdGhlICJDbG9ja0RpdiIgZmllbGQuCiAgICAgICAgIFRoZSBNTUMgQ2FyZCBmcmVxdWVuY3kgKFNETU1DX0NLKSBpcyBjb21wdXRlZCBhcyBmb2xsb3dzOgotICAKKwogICAgICAgICAgICBTRE1NQ19DSyA9IFNETU1DQ0xLIC8gKENsb2NrRGl2ICsgMikKLSAgCi0gICAgICAgIEluIGluaXRpYWxpemF0aW9uIG1vZGUgYW5kIGFjY29yZGluZyB0byB0aGUgTU1DIENhcmQgc3RhbmRhcmQsIAorCisgICAgICAgIEluIGluaXRpYWxpemF0aW9uIG1vZGUgYW5kIGFjY29yZGluZyB0byB0aGUgTU1DIENhcmQgc3RhbmRhcmQsCiAgICAgICAgIG1ha2Ugc3VyZSB0aGF0IHRoZSBTRE1NQ19DSyBmcmVxdWVuY3kgZG9lc24ndCBleGNlZWQgNDAwS0h6LgogCi0gICAgICAgIFRoaXMgcGhhc2Ugb2YgaW5pdGlhbGl6YXRpb24gaXMgZG9uZSB0aHJvdWdoIFNETU1DX0luaXQoKSBhbmQgCisgICAgICAgIFRoaXMgcGhhc2Ugb2YgaW5pdGlhbGl6YXRpb24gaXMgZG9uZSB0aHJvdWdoIFNETU1DX0luaXQoKSBhbmQKICAgICAgICAgU0RNTUNfUG93ZXJTdGF0ZV9PTigpIFNETU1DIGxvdyBsZXZlbCBBUElzLgogCiAgICAgKCMpIEluaXRpYWxpemUgdGhlIE1NQyBjYXJkLiBUaGUgQVBJIHVzZWQgaXMgSEFMX01NQ19Jbml0Q2FyZCgpLgotICAgICAgICBUaGlzIHBoYXNlIGFsbG93cyB0aGUgY2FyZCBpbml0aWFsaXphdGlvbiBhbmQgaWRlbnRpZmljYXRpb24gCisgICAgICAgIFRoaXMgcGhhc2UgYWxsb3dzIHRoZSBjYXJkIGluaXRpYWxpemF0aW9uIGFuZCBpZGVudGlmaWNhdGlvbgogICAgICAgICBhbmQgY2hlY2sgdGhlIE1NQyBDYXJkIHR5cGUgKFN0YW5kYXJkIENhcGFjaXR5IG9yIEhpZ2ggQ2FwYWNpdHkpCiAgICAgICAgIFRoZSBpbml0aWFsaXphdGlvbiBmbG93IGlzIGNvbXBhdGlibGUgd2l0aCBNTUMgc3RhbmRhcmQuCiAKLSAgICAgICAgVGhpcyBBUEkgKEhBTF9NTUNfSW5pdENhcmQoKSkgY291bGQgYmUgdXNlZCBhbHNvIHRvIHJlaW5pdGlhbGl6ZSB0aGUgY2FyZCBpbiBjYXNlIAorICAgICAgICBUaGlzIEFQSSAoSEFMX01NQ19Jbml0Q2FyZCgpKSBjb3VsZCBiZSB1c2VkIGFsc28gdG8gcmVpbml0aWFsaXplIHRoZSBjYXJkIGluIGNhc2UKICAgICAgICAgb2YgcGx1Zy1vZmYgcGx1Zy1pbi4KICAgCi0gICAgKCMpIENvbmZpZ3VyZSB0aGUgTU1DIENhcmQgRGF0YSB0cmFuc2ZlciBmcmVxdWVuY3kuIEJ5IERlZmF1bHQsIHRoZSBjYXJkIHRyYW5zZmVyIAorICAgICgjKSBDb25maWd1cmUgdGhlIE1NQyBDYXJkIERhdGEgdHJhbnNmZXIgZnJlcXVlbmN5LiBCeSBEZWZhdWx0LCB0aGUgY2FyZCB0cmFuc2ZlcgogICAgICAgICBmcmVxdWVuY3kgaXMgc2V0IHRvIDI0TUh6LiBZb3UgY2FuIGNoYW5nZSBvciBhZGFwdCB0aGlzIGZyZXF1ZW5jeSBieSBhZGp1c3RpbmcgCiAgICAgICAgIHRoZSAiQ2xvY2tEaXYiIGZpZWxkLgotICAgICAgICBJbiB0cmFuc2ZlciBtb2RlIGFuZCBhY2NvcmRpbmcgdG8gdGhlIE1NQyBDYXJkIHN0YW5kYXJkLCBtYWtlIHN1cmUgdGhhdCB0aGUgCisgICAgICAgIEluIHRyYW5zZmVyIG1vZGUgYW5kIGFjY29yZGluZyB0byB0aGUgTU1DIENhcmQgc3RhbmRhcmQsIG1ha2Ugc3VyZSB0aGF0IHRoZQogICAgICAgICBTRE1NQ19DSyBmcmVxdWVuY3kgZG9lc24ndCBleGNlZWQgMjVNSHogYW5kIDUwTUh6IGluIEhpZ2gtc3BlZWQgbW9kZSBzd2l0Y2guCi0gICAgICAgIFRvIGJlIGFibGUgdG8gdXNlIGEgZnJlcXVlbmN5IGhpZ2hlciB0aGFuIDI0TUh6LCB5b3Ugc2hvdWxkIHVzZSB0aGUgU0RNTUMgCi0gICAgICAgIHBlcmlwaGVyYWwgaW4gYnlwYXNzIG1vZGUuIFJlZmVyIHRvIHRoZSBjb3JyZXNwb25kaW5nIHJlZmVyZW5jZSBtYW51YWwgCisgICAgICAgIFRvIGJlIGFibGUgdG8gdXNlIGEgZnJlcXVlbmN5IGhpZ2hlciB0aGFuIDI0TUh6LCB5b3Ugc2hvdWxkIHVzZSB0aGUgU0RNTUMKKyAgICAgICAgcGVyaXBoZXJhbCBpbiBieXBhc3MgbW9kZS4gUmVmZXIgdG8gdGhlIGNvcnJlc3BvbmRpbmcgcmVmZXJlbmNlIG1hbnVhbAogICAgICAgICBmb3IgbW9yZSBkZXRhaWxzLgotICAKKwogICAgICgjKSBTZWxlY3QgdGhlIGNvcnJlc3BvbmRpbmcgTU1DIENhcmQgYWNjb3JkaW5nIHRvIHRoZSBhZGRyZXNzIHJlYWQgd2l0aCB0aGUgc3RlcCAyLgotICAgIAorCiAgICAgKCMpIENvbmZpZ3VyZSB0aGUgTU1DIENhcmQgaW4gd2lkZSBidXMgbW9kZTogNC1iaXRzIGRhdGEuCi0gIAorCiAgICoqKiBNTUMgQ2FyZCBSZWFkIG9wZXJhdGlvbiAqKioKICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIFsuLl0gCi0gICAgKCspIFlvdSBjYW4gcmVhZCBmcm9tIE1NQyBjYXJkIGluIHBvbGxpbmcgbW9kZSBieSB1c2luZyBmdW5jdGlvbiBIQUxfTU1DX1JlYWRCbG9ja3MoKS4gCi0gICAgICAgIFRoaXMgZnVuY3Rpb24gYWxsb3dzIHRoZSByZWFkIG9mIDUxMiBieXRlcyBibG9ja3MuCi0gICAgICAgIFlvdSBjYW4gY2hvb3NlIGVpdGhlciBvbmUgYmxvY2sgcmVhZCBvcGVyYXRpb24gb3IgbXVsdGlwbGUgYmxvY2sgcmVhZCBvcGVyYXRpb24gCisgIFsuLl0KKyAgICAoKykgWW91IGNhbiByZWFkIGZyb20gTU1DIGNhcmQgaW4gcG9sbGluZyBtb2RlIGJ5IHVzaW5nIGZ1bmN0aW9uIEhBTF9NTUNfUmVhZEJsb2NrcygpLgorICAgICAgICBUaGlzIGZ1bmN0aW9uIHN1cHBvcnQgb25seSA1MTItYnl0ZXMgYmxvY2sgbGVuZ3RoICh0aGUgYmxvY2sgc2l6ZSBzaG91bGQgYmUKKyAgICAgICAgY2hvc2VuIGFzIDUxMiBieXRlcykuCisgICAgICAgIFlvdSBjYW4gY2hvb3NlIGVpdGhlciBvbmUgYmxvY2sgcmVhZCBvcGVyYXRpb24gb3IgbXVsdGlwbGUgYmxvY2sgcmVhZCBvcGVyYXRpb24KICAgICAgICAgYnkgYWRqdXN0aW5nIHRoZSAiTnVtYmVyT2ZCbG9ja3MiIHBhcmFtZXRlci4KICAgICAgICAgQWZ0ZXIgdGhpcywgeW91IGhhdmUgdG8gZW5zdXJlIHRoYXQgdGhlIHRyYW5zZmVyIGlzIGRvbmUgY29ycmVjdGx5LiBUaGUgY2hlY2sgaXMgZG9uZQogICAgICAgICB0aHJvdWdoIEhBTF9NTUNfR2V0Q2FyZFN0YXRlKCkgZnVuY3Rpb24gZm9yIE1NQyBjYXJkIHN0YXRlLgogCiAgICAgKCspIFlvdSBjYW4gcmVhZCBmcm9tIE1NQyBjYXJkIGluIERNQSBtb2RlIGJ5IHVzaW5nIGZ1bmN0aW9uIEhBTF9NTUNfUmVhZEJsb2Nrc19ETUEoKS4KLSAgICAgICAgVGhpcyBmdW5jdGlvbiBhbGxvd3MgdGhlIHJlYWQgb2YgNTEyIGJ5dGVzIGJsb2Nrcy4KLSAgICAgICAgWW91IGNhbiBjaG9vc2UgZWl0aGVyIG9uZSBibG9jayByZWFkIG9wZXJhdGlvbiBvciBtdWx0aXBsZSBibG9jayByZWFkIG9wZXJhdGlvbiAKKyAgICAgICAgVGhpcyBmdW5jdGlvbiBzdXBwb3J0IG9ubHkgNTEyLWJ5dGVzIGJsb2NrIGxlbmd0aCAodGhlIGJsb2NrIHNpemUgc2hvdWxkIGJlCisgICAgICAgIGNob3NlbiBhcyA1MTIgYnl0ZXMpLgorICAgICAgICBZb3UgY2FuIGNob29zZSBlaXRoZXIgb25lIGJsb2NrIHJlYWQgb3BlcmF0aW9uIG9yIG11bHRpcGxlIGJsb2NrIHJlYWQgb3BlcmF0aW9uCiAgICAgICAgIGJ5IGFkanVzdGluZyB0aGUgIk51bWJlck9mQmxvY2tzIiBwYXJhbWV0ZXIuCiAgICAgICAgIEFmdGVyIHRoaXMsIHlvdSBoYXZlIHRvIGVuc3VyZSB0aGF0IHRoZSB0cmFuc2ZlciBpcyBkb25lIGNvcnJlY3RseS4gVGhlIGNoZWNrIGlzIGRvbmUKICAgICAgICAgdGhyb3VnaCBIQUxfTU1DX0dldENhcmRTdGF0ZSgpIGZ1bmN0aW9uIGZvciBNTUMgY2FyZCBzdGF0ZS4KQEAgLTEyMywyMCArMTI0LDIyIEBACiAgICAgICAgIEFmdGVyIHRoaXMsIHlvdSBoYXZlIHRvIGVuc3VyZSB0aGF0IHRoZSB0cmFuc2ZlciBpcyBkb25lIGNvcnJlY3RseS4gVGhlIGNoZWNrIGlzIGRvbmUKICAgICAgICAgdGhyb3VnaCBIQUxfTU1DX0dldENhcmRTdGF0ZSgpIGZ1bmN0aW9uIGZvciBNTUMgY2FyZCBzdGF0ZS4KICAgICAgICAgWW91IGNvdWxkIGFsc28gY2hlY2sgdGhlIElUIHRyYW5zZmVyIHByb2Nlc3MgdGhyb3VnaCB0aGUgTU1DIFJ4IGludGVycnVwdCBldmVudC4KLSAgCisKICAgKioqIE1NQyBDYXJkIFdyaXRlIG9wZXJhdGlvbiAqKioKLSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAKLSAgWy4uXSAKLSAgICAoKykgWW91IGNhbiB3cml0ZSB0byBNTUMgY2FyZCBpbiBwb2xsaW5nIG1vZGUgYnkgdXNpbmcgZnVuY3Rpb24gSEFMX01NQ19Xcml0ZUJsb2NrcygpLiAKLSAgICAgICAgVGhpcyBmdW5jdGlvbiBhbGxvd3MgdGhlIHJlYWQgb2YgNTEyIGJ5dGVzIGJsb2Nrcy4KLSAgICAgICAgWW91IGNhbiBjaG9vc2UgZWl0aGVyIG9uZSBibG9jayByZWFkIG9wZXJhdGlvbiBvciBtdWx0aXBsZSBibG9jayByZWFkIG9wZXJhdGlvbiAKKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICBbLi5dCisgICAgKCspIFlvdSBjYW4gd3JpdGUgdG8gTU1DIGNhcmQgaW4gcG9sbGluZyBtb2RlIGJ5IHVzaW5nIGZ1bmN0aW9uIEhBTF9NTUNfV3JpdGVCbG9ja3MoKS4KKyAgICAgICAgVGhpcyBmdW5jdGlvbiBzdXBwb3J0IG9ubHkgNTEyLWJ5dGVzIGJsb2NrIGxlbmd0aCAodGhlIGJsb2NrIHNpemUgc2hvdWxkIGJlCisgICAgICAgIGNob3NlbiBhcyA1MTIgYnl0ZXMpLgorICAgICAgICBZb3UgY2FuIGNob29zZSBlaXRoZXIgb25lIGJsb2NrIHJlYWQgb3BlcmF0aW9uIG9yIG11bHRpcGxlIGJsb2NrIHJlYWQgb3BlcmF0aW9uCiAgICAgICAgIGJ5IGFkanVzdGluZyB0aGUgIk51bWJlck9mQmxvY2tzIiBwYXJhbWV0ZXIuCiAgICAgICAgIEFmdGVyIHRoaXMsIHlvdSBoYXZlIHRvIGVuc3VyZSB0aGF0IHRoZSB0cmFuc2ZlciBpcyBkb25lIGNvcnJlY3RseS4gVGhlIGNoZWNrIGlzIGRvbmUKICAgICAgICAgdGhyb3VnaCBIQUxfTU1DX0dldENhcmRTdGF0ZSgpIGZ1bmN0aW9uIGZvciBNTUMgY2FyZCBzdGF0ZS4KIAogICAgICgrKSBZb3UgY2FuIHdyaXRlIHRvIE1NQyBjYXJkIGluIERNQSBtb2RlIGJ5IHVzaW5nIGZ1bmN0aW9uIEhBTF9NTUNfV3JpdGVCbG9ja3NfRE1BKCkuCi0gICAgICAgIFRoaXMgZnVuY3Rpb24gYWxsb3dzIHRoZSByZWFkIG9mIDUxMiBieXRlcyBibG9ja3MuCi0gICAgICAgIFlvdSBjYW4gY2hvb3NlIGVpdGhlciBvbmUgYmxvY2sgcmVhZCBvcGVyYXRpb24gb3IgbXVsdGlwbGUgYmxvY2sgcmVhZCBvcGVyYXRpb24gCisgICAgICAgIFRoaXMgZnVuY3Rpb24gc3VwcG9ydCBvbmx5IDUxMi1ieXRlcyBibG9jayBsZW5ndGggKHRoZSBibG9jayBzaXplIHNob3VsZCBiZQorICAgICAgICBjaG9zZW4gYXMgNTEyIGJ5dGUpLgorICAgICAgICBZb3UgY2FuIGNob29zZSBlaXRoZXIgb25lIGJsb2NrIHJlYWQgb3BlcmF0aW9uIG9yIG11bHRpcGxlIGJsb2NrIHJlYWQgb3BlcmF0aW9uCiAgICAgICAgIGJ5IGFkanVzdGluZyB0aGUgIk51bWJlck9mQmxvY2tzIiBwYXJhbWV0ZXIuCiAgICAgICAgIEFmdGVyIHRoaXMsIHlvdSBoYXZlIHRvIGVuc3VyZSB0aGF0IHRoZSB0cmFuc2ZlciBpcyBkb25lIGNvcnJlY3RseS4gVGhlIGNoZWNrIGlzIGRvbmUKICAgICAgICAgdGhyb3VnaCBIQUxfTU1DX0dldENhcmRTdGF0ZSgpIGZ1bmN0aW9uIGZvciBNTUMgY2FyZCBzdGF0ZS4KQEAgLTE0OSwxMiArMTUyLDYgQEAKICAgICAgICAgQWZ0ZXIgdGhpcywgeW91IGhhdmUgdG8gZW5zdXJlIHRoYXQgdGhlIHRyYW5zZmVyIGlzIGRvbmUgY29ycmVjdGx5LiBUaGUgY2hlY2sgaXMgZG9uZQogICAgICAgICB0aHJvdWdoIEhBTF9NTUNfR2V0Q2FyZFN0YXRlKCkgZnVuY3Rpb24gZm9yIE1NQyBjYXJkIHN0YXRlLgogICAgICAgICBZb3UgY291bGQgYWxzbyBjaGVjayB0aGUgSVQgdHJhbnNmZXIgcHJvY2VzcyB0aHJvdWdoIHRoZSBNTUMgVHggaW50ZXJydXB0IGV2ZW50LgotICAKLSAgKioqIE1NQyBjYXJkIHN0YXR1cyAqKioKLSAgPT09PT09PT09PT09PT09PT09PT09PSAKLSAgWy4uXQotICAgICgrKSBUaGUgTU1DIFN0YXR1cyBjb250YWlucyBzdGF0dXMgYml0cyB0aGF0IGFyZSByZWxhdGVkIHRvIHRoZSBNTUMgTWVtb3J5IAotICAgICAgICBDYXJkIHByb3ByaWV0YXJ5IGZlYXR1cmVzLiBUbyBnZXQgTU1DIGNhcmQgc3RhdHVzIHVzZSB0aGUgSEFMX01NQ19HZXRDYXJkU3RhdHVzKCkuCiAKICAgKioqIE1NQyBjYXJkIGluZm9ybWF0aW9uICoqKgogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT0gCkBAIC0xNzksNyArMTc2LDcgQEAKICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBbLi5dCiAgICAgQmVsb3cgdGhlIGxpc3Qgb2YgbW9zdCB1c2VkIG1hY3JvcyBpbiBNTUMgSEFMIGRyaXZlci4KLSAgICAgICAKKwogICAgICgrKSBfX0hBTF9NTUNfRU5BQkxFIDogRW5hYmxlIHRoZSBNTUMgZGV2aWNlCiAgICAgKCspIF9fSEFMX01NQ19ESVNBQkxFIDogRGlzYWJsZSB0aGUgTU1DIGRldmljZQogICAgICgrKSBfX0hBTF9NTUNfRE1BX0VOQUJMRTogRW5hYmxlIHRoZSBTRE1NQyBETUEgdHJhbnNmZXIKQEAgLTE4OCwxMCArMTg1LDEwIEBACiAgICAgKCspIF9fSEFMX01NQ19ESVNBQkxFX0lUOiBEaXNhYmxlIHRoZSBNTUMgZGV2aWNlIGludGVycnVwdAogICAgICgrKSBfX0hBTF9NTUNfR0VUX0ZMQUc6Q2hlY2sgd2hldGhlciB0aGUgc3BlY2lmaWVkIE1NQyBmbGFnIGlzIHNldCBvciBub3QKICAgICAoKykgX19IQUxfTU1DX0NMRUFSX0ZMQUc6IENsZWFyIHRoZSBNTUMncyBwZW5kaW5nIGZsYWdzCi0gICAgCi0gICBbLi5dCi0gICAgKEApIFlvdSBjYW4gcmVmZXIgdG8gdGhlIE1NQyBIQUwgZHJpdmVyIGhlYWRlciBmaWxlIGZvciBtb3JlIHVzZWZ1bCBtYWNyb3MgCi0gICAgICAKKworICBbLi5dCisgICAgKEApIFlvdSBjYW4gcmVmZXIgdG8gdGhlIE1NQyBIQUwgZHJpdmVyIGhlYWRlciBmaWxlIGZvciBtb3JlIHVzZWZ1bCBtYWNyb3MKKwogICAqKiogQ2FsbGJhY2sgcmVnaXN0cmF0aW9uICoqKgogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgWy4uXQpAQCAtMjIyLDcgKzIxOSw3IEBACiAgICAgQnkgZGVmYXVsdCwgYWZ0ZXIgdGhlIEByZWYgSEFMX01NQ19Jbml0IGFuZCBpZiB0aGUgc3RhdGUgaXMgSEFMX01NQ19TVEFURV9SRVNFVAogICAgIGFsbCBjYWxsYmFja3MgYXJlIHJlc2V0IHRvIHRoZSBjb3JyZXNwb25kaW5nIGxlZ2FjeSB3ZWFrIChzdXJjaGFyZ2VkKSBmdW5jdGlvbnMuCiAgICAgRXhjZXB0aW9uIGRvbmUgZm9yIE1zcEluaXQgYW5kIE1zcERlSW5pdCBjYWxsYmFja3MgdGhhdCBhcmUgcmVzcGVjdGl2ZWx5Ci0gICAgcmVzZXQgdG8gdGhlIGxlZ2FjeSB3ZWFrIChzdXJjaGFyZ2VkKSBmdW5jdGlvbnMgaW4gdGhlIEByZWYgSEFMX01NQ19Jbml0IAorICAgIHJlc2V0IHRvIHRoZSBsZWdhY3kgd2VhayAoc3VyY2hhcmdlZCkgZnVuY3Rpb25zIGluIHRoZSBAcmVmIEhBTF9NTUNfSW5pdAogICAgIGFuZCBAcmVmICBIQUxfTU1DX0RlSW5pdCBvbmx5IHdoZW4gdGhlc2UgY2FsbGJhY2tzIGFyZSBudWxsIChub3QgcmVnaXN0ZXJlZCBiZWZvcmVoYW5kKS4KICAgICBJZiBub3QsIE1zcEluaXQgb3IgTXNwRGVJbml0IGFyZSBub3QgbnVsbCwgdGhlIEByZWYgSEFMX01NQ19Jbml0IGFuZCBAcmVmIEhBTF9NTUNfRGVJbml0CiAgICAga2VlcCBhbmQgdXNlIHRoZSB1c2VyIE1zcEluaXQvTXNwRGVJbml0IGNhbGxiYWNrcyAocmVnaXN0ZXJlZCBiZWZvcmVoYW5kKQpAQCAtMjMyLDEyICsyMjksMTMgQEAKICAgICBpbiBSRUFEWSBvciBSRVNFVCBzdGF0ZSwgdGh1cyByZWdpc3RlcmVkICh1c2VyKSBNc3BJbml0L0RlSW5pdCBjYWxsYmFja3MgY2FuIGJlIHVzZWQKICAgICBkdXJpbmcgdGhlIEluaXQvRGVJbml0LgogICAgIEluIHRoYXQgY2FzZSBmaXJzdCByZWdpc3RlciB0aGUgTXNwSW5pdC9Nc3BEZUluaXQgdXNlciBjYWxsYmFja3MKLSAgICB1c2luZyBAcmVmIEhBTF9fUmVnaXN0ZXJDYWxsYmFjayBiZWZvcmUgY2FsbGluZyBAcmVmIEhBTF9NTUNfRGVJbml0IAorICAgIHVzaW5nIEByZWYgSEFMX01NQ19SZWdpc3RlckNhbGxiYWNrIGJlZm9yZSBjYWxsaW5nIEByZWYgSEFMX01NQ19EZUluaXQKICAgICBvciBAcmVmIEhBTF9NTUNfSW5pdCBmdW5jdGlvbi4KIAogICAgIFdoZW4gVGhlIGNvbXBpbGF0aW9uIGRlZmluZSBVU0VfSEFMX01NQ19SRUdJU1RFUl9DQUxMQkFDS1MgaXMgc2V0IHRvIDAgb3IKLSAgICBub3QgZGVmaW5lZCwgdGhlIGNhbGxiYWNrIHJlZ2lzdGVyaW5nIGZlYXR1cmUgaXMgbm90IGF2YWlsYWJsZSAKKyAgICBub3QgZGVmaW5lZCwgdGhlIGNhbGxiYWNrIHJlZ2lzdGVyaW5nIGZlYXR1cmUgaXMgbm90IGF2YWlsYWJsZQogICAgIGFuZCB3ZWFrIChzdXJjaGFyZ2VkKSBjYWxsYmFja3MgYXJlIHVzZWQuCisKICAgQGVuZHZlcmJhdGltCiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqIEBhdHRlbnRpb24KQEAgLTI0OCwxMCArMjQ2LDEwIEBACiAgICogVGhpcyBzb2Z0d2FyZSBjb21wb25lbnQgaXMgbGljZW5zZWQgYnkgU1QgdW5kZXIgQlNEIDMtQ2xhdXNlIGxpY2Vuc2UsCiAgICogdGhlICJMaWNlbnNlIjsgWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZQogICAqIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdDoKLSAgKiAgICAgICAgICAgICAgICAgICAgICAgIG9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZQorICAqICAgICAgICAgICAgICAgICAgICAgICBvcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2UKICAgKgogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgKi8gCisgICovCiAKIC8qIEluY2x1ZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAjaW5jbHVkZSAic3RtMzJmNHh4X2hhbC5oIgpAQCAtMjYwLDI4ICsyNTgsMjUgQEAKICAgKiBAewogICAqLwogCi0vKiogQGFkZHRvZ3JvdXAgTU1DIAorLyoqIEBkZWZncm91cCBNTUMgTU1DCisgICogQGJyaWVmIE1NQyBIQUwgbW9kdWxlIGRyaXZlcgogICAqIEB7CiAgICovCiAKICNpZmRlZiBIQUxfTU1DX01PRFVMRV9FTkFCTEVECiAKLSNpZiBkZWZpbmVkKFNUTTMyRjQwNXh4KSB8fCBkZWZpbmVkKFNUTTMyRjQxNXh4KSB8fCBkZWZpbmVkKFNUTTMyRjQwN3h4KSB8fCBkZWZpbmVkKFNUTTMyRjQxN3h4KSB8fCBcCi0gICAgZGVmaW5lZChTVE0zMkY0Mjd4eCkgfHwgZGVmaW5lZChTVE0zMkY0Mzd4eCkgfHwgZGVmaW5lZChTVE0zMkY0Mjl4eCkgfHwgZGVmaW5lZChTVE0zMkY0Mzl4eCkgfHwgXAotICAgIGRlZmluZWQoU1RNMzJGNDAxeEMpIHx8IGRlZmluZWQoU1RNMzJGNDAxeEUpIHx8IGRlZmluZWQoU1RNMzJGNDExeEUpIHx8IGRlZmluZWQoU1RNMzJGNDQ2eHgpIHx8IFwKLSAgICBkZWZpbmVkKFNUTTMyRjQ2OXh4KSB8fCBkZWZpbmVkKFNUTTMyRjQ3OXh4KSB8fCBkZWZpbmVkKFNUTTMyRjQxMlp4KSB8fCBkZWZpbmVkKFNUTTMyRjQxMlZ4KSB8fCBcCi0gICAgZGVmaW5lZChTVE0zMkY0MTJSeCkgfHwgZGVmaW5lZChTVE0zMkY0MTJDeCkgfHwgZGVmaW5lZChTVE0zMkY0MTN4eCkgfHwgZGVmaW5lZChTVE0zMkY0MjN4eCkKKyNpZiBkZWZpbmVkKFNESU8pCiAKIC8qIFByaXZhdGUgdHlwZWRlZiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiBQcml2YXRlIGRlZmluZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyoqIEBhZGR0b2dyb3VwIE1NQ19Qcml2YXRlX0RlZmluZXMKICAgKiBAewogICAqLwotICAgIAorCiAvKioKICAgKiBAfQogICAqLwotICAKKwogLyogUHJpdmF0ZSBtYWNybyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qIFByaXZhdGUgdmFyaWFibGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiBQcml2YXRlIGZ1bmN0aW9uIHByb3RvdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtMjkwLDMzICsyODUsMzIgQEAKICAgKiBAewogICAqLwogc3RhdGljIHVpbnQzMl90IE1NQ19Jbml0Q2FyZChNTUNfSGFuZGxlVHlwZURlZiAqaG1tYyk7Ci1zdGF0aWMgdWludDMyX3QgTU1DX1Bvd2VyT04oTU1DX0hhbmRsZVR5cGVEZWYgKmhtbWMpOyAgICAgICAgICAgICAgICAgICAgICAKK3N0YXRpYyB1aW50MzJfdCBNTUNfUG93ZXJPTihNTUNfSGFuZGxlVHlwZURlZiAqaG1tYyk7CiBzdGF0aWMgdWludDMyX3QgTU1DX1NlbmRTdGF0dXMoTU1DX0hhbmRsZVR5cGVEZWYgKmhtbWMsIHVpbnQzMl90ICpwQ2FyZFN0YXR1cyk7Ci1zdGF0aWMgSEFMX1N0YXR1c1R5cGVEZWYgTU1DX1Bvd2VyT0ZGKE1NQ19IYW5kbGVUeXBlRGVmICpobW1jKTsKLXN0YXRpYyBIQUxfU3RhdHVzVHlwZURlZiBNTUNfV3JpdGVfSVQoTU1DX0hhbmRsZVR5cGVEZWYgKmhtbWMpOwotc3RhdGljIEhBTF9TdGF0dXNUeXBlRGVmIE1NQ19SZWFkX0lUKE1NQ19IYW5kbGVUeXBlRGVmICpobW1jKTsKLXN0YXRpYyB2b2lkIE1NQ19ETUFUcmFuc21pdENwbHQoRE1BX0hhbmRsZVR5cGVEZWYgKmhkbWEpOwotc3RhdGljIHZvaWQgTU1DX0RNQVJlY2VpdmVDcGx0KERNQV9IYW5kbGVUeXBlRGVmICpoZG1hKTsKLXN0YXRpYyB2b2lkIE1NQ19ETUFFcnJvcihETUFfSGFuZGxlVHlwZURlZiAqaGRtYSk7Ci1zdGF0aWMgdm9pZCBNTUNfRE1BVHhBYm9ydChETUFfSGFuZGxlVHlwZURlZiAqaGRtYSk7Ci1zdGF0aWMgdm9pZCBNTUNfRE1BUnhBYm9ydChETUFfSGFuZGxlVHlwZURlZiAqaGRtYSk7CitzdGF0aWMgdm9pZCAgICAgTU1DX1Bvd2VyT0ZGKE1NQ19IYW5kbGVUeXBlRGVmICpobW1jKTsKK3N0YXRpYyB2b2lkICAgICBNTUNfV3JpdGVfSVQoTU1DX0hhbmRsZVR5cGVEZWYgKmhtbWMpOworc3RhdGljIHZvaWQgICAgIE1NQ19SZWFkX0lUKE1NQ19IYW5kbGVUeXBlRGVmICpobW1jKTsKK3N0YXRpYyB2b2lkICAgICBNTUNfRE1BVHJhbnNtaXRDcGx0KERNQV9IYW5kbGVUeXBlRGVmICpoZG1hKTsKK3N0YXRpYyB2b2lkICAgICBNTUNfRE1BUmVjZWl2ZUNwbHQoRE1BX0hhbmRsZVR5cGVEZWYgKmhkbWEpOworc3RhdGljIHZvaWQgICAgIE1NQ19ETUFFcnJvcihETUFfSGFuZGxlVHlwZURlZiAqaGRtYSk7CitzdGF0aWMgdm9pZCAgICAgTU1DX0RNQVR4QWJvcnQoRE1BX0hhbmRsZVR5cGVEZWYgKmhkbWEpOworc3RhdGljIHZvaWQgICAgIE1NQ19ETUFSeEFib3J0KERNQV9IYW5kbGVUeXBlRGVmICpoZG1hKTsKIC8qKgogICAqIEB9CiAgICovCi0KIC8qIEV4cG9ydGVkIGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiogQGFkZHRvZ3JvdXAgTU1DX0V4cG9ydGVkX0Z1bmN0aW9ucwogICAqIEB7CiAgICovCiAKIC8qKiBAYWRkdG9ncm91cCBNTUNfRXhwb3J0ZWRfRnVuY3Rpb25zX0dyb3VwMQotICogIEBicmllZiAgIEluaXRpYWxpemF0aW9uIGFuZCBkZS1pbml0aWFsaXphdGlvbiBmdW5jdGlvbnMgCisgKiAgQGJyaWVmICAgSW5pdGlhbGl6YXRpb24gYW5kIGRlLWluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucwogICoKLUB2ZXJiYXRpbSAgICAKK0B2ZXJiYXRpbQogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgICAgICAjIyMjIyBJbml0aWFsaXphdGlvbiBhbmQgZGUtaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zICMjIyMjCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICBbLi5dICAKKyAgWy4uXQogICAgIFRoaXMgc2VjdGlvbiBwcm92aWRlcyBmdW5jdGlvbnMgYWxsb3dpbmcgdG8gaW5pdGlhbGl6ZS9kZS1pbml0aWFsaXplIHRoZSBNTUMKICAgICBjYXJkIGRldmljZSB0byBiZSByZWFkeSBmb3IgdXNlLgogCkBAIC0zMjUsOSArMzE5LDkgQEAKICAgKi8KIAogLyoqCi0gICogQGJyaWVmICBJbml0aWFsaXplcyB0aGUgTU1DIGFjY29yZGluZyB0byB0aGUgc3BlY2lmaWVkIHBhcmFtZXRlcnMgaW4gdGhlIAorICAqIEBicmllZiAgSW5pdGlhbGl6ZXMgdGhlIE1NQyBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmllZCBwYXJhbWV0ZXJzIGluIHRoZQogICAgICAgICAgICAgTU1DX0hhbmRsZVR5cGVEZWYgYW5kIGNyZWF0ZSB0aGUgYXNzb2NpYXRlZCBoYW5kbGUuCi0gICogQHBhcmFtICBobW1jIFBvaW50ZXIgdG8gdGhlIE1NQyBoYW5kbGUgIAorICAqIEBwYXJhbSAgaG1tYzogUG9pbnRlciB0byB0aGUgTU1DIGhhbmRsZQogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX01NQ19Jbml0KE1NQ19IYW5kbGVUeXBlRGVmICpobW1jKQpAQCAtMzUxLDcgKzM0NSw3IEBACiAgIHsKICAgICAvKiBBbGxvY2F0ZSBsb2NrIHJlc291cmNlIGFuZCBpbml0aWFsaXplIGl0ICovCiAgICAgaG1tYy0+TG9jayA9IEhBTF9VTkxPQ0tFRDsKLSNpZiAoVVNFX0hBTF9NTUNfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCisjaWYgZGVmaW5lZCAoVVNFX0hBTF9NTUNfUkVHSVNURVJfQ0FMTEJBQ0tTKSAmJiAoVVNFX0hBTF9NTUNfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDFVKQogICAgIC8qIFJlc2V0IENhbGxiYWNrIHBvaW50ZXJzIGluIEhBTF9NTUNfU1RBVEVfUkVTRVQgb25seSAqLwogICAgIGhtbWMtPlR4Q3BsdENhbGxiYWNrICAgID0gSEFMX01NQ19UeENwbHRDYWxsYmFjazsKICAgICBobW1jLT5SeENwbHRDYWxsYmFjayAgICA9IEhBTF9NTUNfUnhDcGx0Q2FsbGJhY2s7CkBAIC0zNjgsMjAgKzM2MiwyMyBAQAogI2Vsc2UKICAgICAvKiBJbml0IHRoZSBsb3cgbGV2ZWwgaGFyZHdhcmUgOiBHUElPLCBDTE9DSywgQ09SVEVYLi4uZXRjICovCiAgICAgSEFMX01NQ19Nc3BJbml0KGhtbWMpOwotI2VuZGlmCQorI2VuZGlmCiAgIH0KIAogICBobW1jLT5TdGF0ZSA9IEhBTF9NTUNfU1RBVEVfQlVTWTsKIAogICAvKiBJbml0aWFsaXplIHRoZSBDYXJkIHBhcmFtZXRlcnMgKi8KLSAgSEFMX01NQ19Jbml0Q2FyZChobW1jKTsKKyAgaWYoSEFMX01NQ19Jbml0Q2FyZChobW1jKSA9PSBIQUxfRVJST1IpCisgIHsKKyAgICByZXR1cm4gSEFMX0VSUk9SOworICB9CiAKICAgLyogSW5pdGlhbGl6ZSB0aGUgZXJyb3IgY29kZSAqLwogICBobW1jLT5FcnJvckNvZGUgPSBIQUxfRE1BX0VSUk9SX05PTkU7Ci0gIAorCiAgIC8qIEluaXRpYWxpemUgdGhlIE1NQyBvcGVyYXRpb24gKi8KICAgaG1tYy0+Q29udGV4dCA9IE1NQ19DT05URVhUX05PTkU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgLyogSW5pdGlhbGl6ZSB0aGUgTU1DIHN0YXRlICovCiAgIGhtbWMtPlN0YXRlID0gSEFMX01NQ19TVEFURV9SRUFEWTsKIApAQCAtMzkwLDE3ICszODcsMTggQEAKIAogLyoqCiAgICogQGJyaWVmICBJbml0aWFsaXplcyB0aGUgTU1DIENhcmQuCi0gICogQHBhcmFtICBobW1jIFBvaW50ZXIgdG8gTU1DIGhhbmRsZQotICAqIEBub3RlICAgVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgTU1DIGNhcmQuIEl0IGNvdWxkIGJlIHVzZWQgd2hlbiBhIGNhcmQgCisgICogQHBhcmFtICBobW1jOiBQb2ludGVyIHRvIE1NQyBoYW5kbGUKKyAgKiBAbm90ZSAgIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIE1NQyBjYXJkLiBJdCBjb3VsZCBiZSB1c2VkIHdoZW4gYSBjYXJkCiAgICAgICAgICAgICByZS1pbml0aWFsaXphdGlvbiBpcyBuZWVkZWQuCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfTU1DX0luaXRDYXJkKE1NQ19IYW5kbGVUeXBlRGVmICpobW1jKQogewotICB1aW50MzJfdCBlcnJvcnN0YXRlID0gSEFMX01NQ19FUlJPUl9OT05FOworICB1aW50MzJfdCBlcnJvcnN0YXRlOwogICBNTUNfSW5pdFR5cGVEZWYgSW5pdDsKKyAgSEFMX1N0YXR1c1R5cGVEZWYgc3RhdHVzOwogICAKLSAgLyogRGVmYXVsdCBTRE1NQyBwZXJpcGhlcmFsIGNvbmZpZ3VyYXRpb24gZm9yIE1NQyBjYXJkIGluaXRpYWxpemF0aW9uICovCisgIC8qIERlZmF1bHQgU0RJTyBwZXJpcGhlcmFsIGNvbmZpZ3VyYXRpb24gZm9yIE1NQyBjYXJkIGluaXRpYWxpemF0aW9uICovCiAgIEluaXQuQ2xvY2tFZGdlICAgICAgICAgICA9IFNESU9fQ0xPQ0tfRURHRV9SSVNJTkc7CiAgIEluaXQuQ2xvY2tCeXBhc3MgICAgICAgICA9IFNESU9fQ0xPQ0tfQllQQVNTX0RJU0FCTEU7CiAgIEluaXQuQ2xvY2tQb3dlclNhdmUgICAgICA9IFNESU9fQ0xPQ0tfUE9XRVJfU0FWRV9ESVNBQkxFOwpAQCAtNDA4LDIyICs0MDYsMjYgQEAKICAgSW5pdC5IYXJkd2FyZUZsb3dDb250cm9sID0gU0RJT19IQVJEV0FSRV9GTE9XX0NPTlRST0xfRElTQUJMRTsKICAgSW5pdC5DbG9ja0RpdiAgICAgICAgICAgID0gU0RJT19JTklUX0NMS19ESVY7CiAKLSAgLyogSW5pdGlhbGl6ZSBTRE1NQyBwZXJpcGhlcmFsIGludGVyZmFjZSB3aXRoIGRlZmF1bHQgY29uZmlndXJhdGlvbiAqLwotICBTRElPX0luaXQoaG1tYy0+SW5zdGFuY2UsIEluaXQpOworICAvKiBJbml0aWFsaXplIFNESU8gcGVyaXBoZXJhbCBpbnRlcmZhY2Ugd2l0aCBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gKi8KKyAgc3RhdHVzID0gU0RJT19Jbml0KGhtbWMtPkluc3RhbmNlLCBJbml0KTsKKyAgaWYoc3RhdHVzID09IEhBTF9FUlJPUikKKyAgeworICAgIHJldHVybiBIQUxfRVJST1I7CisgIH0KIAotICAvKiBEaXNhYmxlIFNETU1DIENsb2NrICovCisgIC8qIERpc2FibGUgU0RJTyBDbG9jayAqLwogICBfX0hBTF9NTUNfRElTQUJMRShobW1jKTsgCiAgIAogICAvKiBTZXQgUG93ZXIgU3RhdGUgdG8gT04gKi8KLSAgU0RJT19Qb3dlclN0YXRlX09OKGhtbWMtPkluc3RhbmNlKTsKLSAgCi0gIC8qIEVuYWJsZSBTRE1NQyBDbG9jayAqLworICBzdGF0dXMgPSBTRElPX1Bvd2VyU3RhdGVfT04oaG1tYy0+SW5zdGFuY2UpOworICBpZihzdGF0dXMgPT0gSEFMX0VSUk9SKQorICB7CisgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgfQorCisgIC8qIEVuYWJsZSBNTUMgQ2xvY2sgKi8KICAgX19IQUxfTU1DX0VOQUJMRShobW1jKTsKLSAgCi0gIC8qIFJlcXVpcmVkIHBvd2VyIHVwIHdhaXRpbmcgdGltZSBiZWZvcmUgc3RhcnRpbmcgdGhlIFNEIGluaXRpYWxpemF0aW9uIAotICBzZXF1ZW5jZSAqLwotICBIQUxfRGVsYXkoMlUpOwotICAKKwogICAvKiBJZGVudGlmeSBjYXJkIG9wZXJhdGluZyB2b2x0YWdlICovCiAgIGVycm9yc3RhdGUgPSBNTUNfUG93ZXJPTihobW1jKTsKICAgaWYoZXJyb3JzdGF0ZSAhPSBIQUxfTU1DX0VSUk9SX05PTkUpCkBAIC00NDcsNyArNDQ5LDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBEZS1Jbml0aWFsaXplcyB0aGUgTU1DIGNhcmQuCi0gICogQHBhcmFtICBobW1jIFBvaW50ZXIgdG8gTU1DIGhhbmRsZQorICAqIEBwYXJhbSAgaG1tYzogUG9pbnRlciB0byBNTUMgaGFuZGxlCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfTU1DX0RlSW5pdChNTUNfSGFuZGxlVHlwZURlZiAqaG1tYykKQEAgLTQ1NywxNiArNDU5LDE2IEBACiAgIHsKICAgICByZXR1cm4gSEFMX0VSUk9SOwogICB9Ci0gIAorCiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19TRElPX0FMTF9JTlNUQU5DRShobW1jLT5JbnN0YW5jZSkpOwogCiAgIGhtbWMtPlN0YXRlID0gSEFMX01NQ19TVEFURV9CVVNZOwotICAKLSAgLyogU2V0IFNEIHBvd2VyIHN0YXRlIHRvIG9mZiAqLyAKKworICAvKiBTZXQgTU1DIHBvd2VyIHN0YXRlIHRvIG9mZiAqLwogICBNTUNfUG93ZXJPRkYoaG1tYyk7Ci0gIAotI2lmIChVU0VfSEFMX01NQ19SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkKKworI2lmIGRlZmluZWQgKFVTRV9IQUxfTU1DX1JFR0lTVEVSX0NBTExCQUNLUykgJiYgKFVTRV9IQUxfTU1DX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxVSkKICAgaWYoaG1tYy0+TXNwRGVJbml0Q2FsbGJhY2sgPT0gTlVMTCkKICAgewogICAgIGhtbWMtPk1zcERlSW5pdENhbGxiYWNrID0gSEFMX01NQ19Nc3BEZUluaXQ7CkBAIC00NzgsMjQgKzQ4MCwyNCBAQAogICAvKiBEZS1Jbml0aWFsaXplIHRoZSBNU1AgbGF5ZXIgKi8KICAgSEFMX01NQ19Nc3BEZUluaXQoaG1tYyk7CiAjZW5kaWYKLSAgCisKICAgaG1tYy0+RXJyb3JDb2RlID0gSEFMX01NQ19FUlJPUl9OT05FOwogICBobW1jLT5TdGF0ZSA9IEhBTF9NTUNfU1RBVEVfUkVTRVQ7Ci0gIAorCiAgIHJldHVybiBIQUxfT0s7CiB9CiAKIAogLyoqCiAgICogQGJyaWVmICBJbml0aWFsaXplcyB0aGUgTU1DIE1TUC4KLSAgKiBAcGFyYW0gIGhtbWMgUG9pbnRlciB0byBNTUMgaGFuZGxlCisgICogQHBhcmFtICBobW1jOiBQb2ludGVyIHRvIE1NQyBoYW5kbGUKICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KIF9fd2VhayB2b2lkIEhBTF9NTUNfTXNwSW5pdChNTUNfSGFuZGxlVHlwZURlZiAqaG1tYykKIHsKICAgLyogUHJldmVudCB1bnVzZWQgYXJndW1lbnQocykgY29tcGlsYXRpb24gd2FybmluZyAqLwogICBVTlVTRUQoaG1tYyk7Ci0gCisKICAgLyogTk9URSA6IFRoaXMgZnVuY3Rpb24gU2hvdWxkIG5vdCBiZSBtb2RpZmllZCwgd2hlbiB0aGUgY2FsbGJhY2sgaXMgbmVlZGVkLAogICAgICAgICAgICAgdGhlIEhBTF9NTUNfTXNwSW5pdCBjb3VsZCBiZSBpbXBsZW1lbnRlZCBpbiB0aGUgdXNlciBmaWxlCiAgICAqLwpAQCAtNTAzLDE0ICs1MDUsMTQgQEAKIAogLyoqCiAgICogQGJyaWVmICBEZS1Jbml0aWFsaXplIE1NQyBNU1AuCi0gICogQHBhcmFtICBobW1jIFBvaW50ZXIgdG8gTU1DIGhhbmRsZQorICAqIEBwYXJhbSAgaG1tYzogUG9pbnRlciB0byBNTUMgaGFuZGxlCiAgICogQHJldHZhbCBOb25lCiAgICovCiBfX3dlYWsgdm9pZCBIQUxfTU1DX01zcERlSW5pdChNTUNfSGFuZGxlVHlwZURlZiAqaG1tYykKIHsKICAgLyogUHJldmVudCB1bnVzZWQgYXJndW1lbnQocykgY29tcGlsYXRpb24gd2FybmluZyAqLwogICBVTlVTRUQoaG1tYyk7Ci0gCisKICAgLyogTk9URSA6IFRoaXMgZnVuY3Rpb24gU2hvdWxkIG5vdCBiZSBtb2RpZmllZCwgd2hlbiB0aGUgY2FsbGJhY2sgaXMgbmVlZGVkLAogICAgICAgICAgICAgdGhlIEhBTF9NTUNfTXNwRGVJbml0IGNvdWxkIGJlIGltcGxlbWVudGVkIGluIHRoZSB1c2VyIGZpbGUKICAgICovCkBAIC01MjEsMTQgKzUyMywxNCBAQAogICAqLwogCiAvKiogQGFkZHRvZ3JvdXAgTU1DX0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDIKLSAqICBAYnJpZWYgICBEYXRhIHRyYW5zZmVyIGZ1bmN0aW9ucyAKKyAqICBAYnJpZWYgICBEYXRhIHRyYW5zZmVyIGZ1bmN0aW9ucwogICoKLUB2ZXJiYXRpbSAgIAorQHZlcmJhdGltCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAgICAgICAgICAgICAgICAgICAgIyMjIyMgSU8gb3BlcmF0aW9uIGZ1bmN0aW9ucyAjIyMjIwotICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gIAorICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgWy4uXQotICAgIFRoaXMgc3Vic2VjdGlvbiBwcm92aWRlcyBhIHNldCBvZiBmdW5jdGlvbnMgYWxsb3dpbmcgdG8gbWFuYWdlIHRoZSBkYXRhIAorICAgIFRoaXMgc3Vic2VjdGlvbiBwcm92aWRlcyBhIHNldCBvZiBmdW5jdGlvbnMgYWxsb3dpbmcgdG8gbWFuYWdlIHRoZSBkYXRhCiAgICAgdHJhbnNmZXIgZnJvbS90byBNTUMgY2FyZC4KIAogQGVuZHZlcmJhdGltCkBAIC01MzYsMTQyICs1MzgsMTU1IEBACiAgICovCiAKIC8qKgotICAqIEBicmllZiAgUmVhZHMgYmxvY2socykgZnJvbSBhIHNwZWNpZmllZCBhZGRyZXNzIGluIGEgY2FyZC4gVGhlIERhdGEgdHJhbnNmZXIgCisgICogQGJyaWVmICBSZWFkcyBibG9jayhzKSBmcm9tIGEgc3BlY2lmaWVkIGFkZHJlc3MgaW4gYSBjYXJkLiBUaGUgRGF0YSB0cmFuc2ZlcgogICAqICAgICAgICAgaXMgbWFuYWdlZCBieSBwb2xsaW5nIG1vZGUuCiAgICogQG5vdGUgICBUaGlzIEFQSSBzaG91bGQgYmUgZm9sbG93ZWQgYnkgYSBjaGVjayBvbiB0aGUgY2FyZCBzdGF0ZSB0aHJvdWdoCiAgICogICAgICAgICBIQUxfTU1DX0dldENhcmRTdGF0ZSgpLgotICAqIEBwYXJhbSAgaG1tYyBQb2ludGVyIHRvIE1NQyBoYW5kbGUKLSAgKiBAcGFyYW0gIHBEYXRhIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlciB0aGF0IHdpbGwgY29udGFpbiB0aGUgcmVjZWl2ZWQgZGF0YQotICAqIEBwYXJhbSAgQmxvY2tBZGQgQmxvY2sgQWRkcmVzcyBmcm9tIHdoZXJlIGRhdGEgaXMgdG8gYmUgcmVhZCAKLSAgKiBAcGFyYW0gIE51bWJlck9mQmxvY2tzIE51bWJlciBvZiBNTUMgYmxvY2tzIHRvIHJlYWQKLSAgKiBAcGFyYW0gIFRpbWVvdXQgU3BlY2lmeSB0aW1lb3V0IHZhbHVlCisgICogQHBhcmFtICBobW1jOiBQb2ludGVyIHRvIE1NQyBoYW5kbGUKKyAgKiBAcGFyYW0gIHBEYXRhOiBwb2ludGVyIHRvIHRoZSBidWZmZXIgdGhhdCB3aWxsIGNvbnRhaW4gdGhlIHJlY2VpdmVkIGRhdGEKKyAgKiBAcGFyYW0gIEJsb2NrQWRkOiBCbG9jayBBZGRyZXNzIGZyb20gd2hlcmUgZGF0YSBpcyB0byBiZSByZWFkCisgICogQHBhcmFtICBOdW1iZXJPZkJsb2NrczogTnVtYmVyIG9mIE1NQyBibG9ja3MgdG8gcmVhZAorICAqIEBwYXJhbSAgVGltZW91dDogU3BlY2lmeSB0aW1lb3V0IHZhbHVlCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfTU1DX1JlYWRCbG9ja3MoTU1DX0hhbmRsZVR5cGVEZWYgKmhtbWMsIHVpbnQ4X3QgKnBEYXRhLCB1aW50MzJfdCBCbG9ja0FkZCwgdWludDMyX3QgTnVtYmVyT2ZCbG9ja3MsIHVpbnQzMl90IFRpbWVvdXQpCiB7CiAgIFNESU9fRGF0YUluaXRUeXBlRGVmIGNvbmZpZzsKLSAgdWludDMyX3QgZXJyb3JzdGF0ZSA9IEhBTF9NTUNfRVJST1JfTk9ORTsKKyAgdWludDMyX3QgZXJyb3JzdGF0ZTsKICAgdWludDMyX3QgdGlja3N0YXJ0ID0gSEFMX0dldFRpY2soKTsKLSAgdWludDMyX3QgY291bnQgPSAwVSwgKnRlbXBidWZmID0gKHVpbnQzMl90ICopcERhdGE7Ci0gIAorICB1aW50MzJfdCBjb3VudCwgZGF0YSwgZGF0YXJlbWFpbmluZzsKKyAgdWludDMyX3QgYWRkID0gQmxvY2tBZGQ7CisgIHVpbnQ4X3QgKnRlbXBidWZmID0gcERhdGE7CisKICAgaWYoTlVMTCA9PSBwRGF0YSkKICAgewogICAgIGhtbWMtPkVycm9yQ29kZSB8PSBIQUxfTU1DX0VSUk9SX1BBUkFNOwogICAgIHJldHVybiBIQUxfRVJST1I7CiAgIH0KLSAKKwogICBpZihobW1jLT5TdGF0ZSA9PSBIQUxfTU1DX1NUQVRFX1JFQURZKQogICB7Ci0gICAgaG1tYy0+RXJyb3JDb2RlID0gSEFMX0RNQV9FUlJPUl9OT05FOwotICAgIAorICAgIGhtbWMtPkVycm9yQ29kZSA9IEhBTF9NTUNfRVJST1JfTk9ORTsKKwogICAgIGlmKChCbG9ja0FkZCArIE51bWJlck9mQmxvY2tzKSA+IChobW1jLT5NbWNDYXJkLkxvZ0Jsb2NrTmJyKSkKICAgICB7CiAgICAgICBobW1jLT5FcnJvckNvZGUgfD0gSEFMX01NQ19FUlJPUl9BRERSX09VVF9PRl9SQU5HRTsKICAgICAgIHJldHVybiBIQUxfRVJST1I7CiAgICAgfQotICAgIAorCiAgICAgaG1tYy0+U3RhdGUgPSBIQUxfTU1DX1NUQVRFX0JVU1k7Ci0gICAgCisKICAgICAvKiBJbml0aWFsaXplIGRhdGEgY29udHJvbCByZWdpc3RlciAqLwogICAgIGhtbWMtPkluc3RhbmNlLT5EQ1RSTCA9IDBVOwotICAgIAotICAgIC8qIENoZWNrIHRoZSBDYXJkIGNhcGFjaXR5IGluIHRlcm0gb2YgTG9naWNhbCBudW1iZXIgb2YgYmxvY2tzICovCi0gICAgaWYgKChobW1jLT5NbWNDYXJkLkxvZ0Jsb2NrTmJyKSA8IENBUEFDSVRZKQorCisgICAgaWYgKChobW1jLT5NbWNDYXJkLkNhcmRUeXBlKSAhPSBNTUNfSElHSF9DQVBBQ0lUWV9DQVJEKQogICAgIHsKLSAgICAgIEJsb2NrQWRkICo9IDUxMlU7CisgICAgICBhZGQgKj0gNTEyVTsKICAgICB9CiAKICAgICAvKiBTZXQgQmxvY2sgU2l6ZSBmb3IgQ2FyZCAqLwotICAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRCbG9ja0xlbmd0aChobW1jLT5JbnN0YW5jZSwgQkxPQ0tTSVpFKTsKKyAgICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kQmxvY2tMZW5ndGgoaG1tYy0+SW5zdGFuY2UsIE1NQ19CTE9DS1NJWkUpOwogICAgIGlmKGVycm9yc3RhdGUgIT0gSEFMX01NQ19FUlJPUl9OT05FKQogICAgIHsKICAgICAgIC8qIENsZWFyIGFsbCB0aGUgc3RhdGljIGZsYWdzICovCi0gICAgICBfX0hBTF9NTUNfQ0xFQVJfRkxBRyhobW1jLCBTRE1NQ19TVEFUSUNfRkxBR1MpOyAgICAgIAorICAgICAgX19IQUxfTU1DX0NMRUFSX0ZMQUcoaG1tYywgU0RJT19TVEFUSUNfRkxBR1MpOwogICAgICAgaG1tYy0+RXJyb3JDb2RlIHw9IGVycm9yc3RhdGU7CiAgICAgICBobW1jLT5TdGF0ZSA9IEhBTF9NTUNfU1RBVEVfUkVBRFk7CiAgICAgICByZXR1cm4gSEFMX0VSUk9SOwogICAgIH0KLSAgICAKKwogICAgIC8qIENvbmZpZ3VyZSB0aGUgTU1DIERQU00gKERhdGEgUGF0aCBTdGF0ZSBNYWNoaW5lKSAqLwogICAgIGNvbmZpZy5EYXRhVGltZU91dCAgID0gU0RNTUNfREFUQVRJTUVPVVQ7Ci0gICAgY29uZmlnLkRhdGFMZW5ndGggICAgPSBOdW1iZXJPZkJsb2NrcyAqIEJMT0NLU0laRTsKKyAgICBjb25maWcuRGF0YUxlbmd0aCAgICA9IE51bWJlck9mQmxvY2tzICogTU1DX0JMT0NLU0laRTsKICAgICBjb25maWcuRGF0YUJsb2NrU2l6ZSA9IFNESU9fREFUQUJMT0NLX1NJWkVfNTEyQjsKICAgICBjb25maWcuVHJhbnNmZXJEaXIgICA9IFNESU9fVFJBTlNGRVJfRElSX1RPX1NESU87CiAgICAgY29uZmlnLlRyYW5zZmVyTW9kZSAgPSBTRElPX1RSQU5TRkVSX01PREVfQkxPQ0s7CiAgICAgY29uZmlnLkRQU00gICAgICAgICAgPSBTRElPX0RQU01fRU5BQkxFOwotICAgIFNESU9fQ29uZmlnRGF0YShobW1jLT5JbnN0YW5jZSwgJmNvbmZpZyk7Ci0gICAgCisgICAgKHZvaWQpU0RJT19Db25maWdEYXRhKGhtbWMtPkluc3RhbmNlLCAmY29uZmlnKTsKKwogICAgIC8qIFJlYWQgYmxvY2socykgaW4gcG9sbGluZyBtb2RlICovCiAgICAgaWYoTnVtYmVyT2ZCbG9ja3MgPiAxVSkKICAgICB7CiAgICAgICBobW1jLT5Db250ZXh0ID0gTU1DX0NPTlRFWFRfUkVBRF9NVUxUSVBMRV9CTE9DSzsKLSAgICAgIAotICAgICAgLyogUmVhZCBNdWx0aSBCbG9jayBjb21tYW5kICovIAotICAgICAgZXJyb3JzdGF0ZSA9IFNETU1DX0NtZFJlYWRNdWx0aUJsb2NrKGhtbWMtPkluc3RhbmNlLCBCbG9ja0FkZCk7CisKKyAgICAgIC8qIFJlYWQgTXVsdGkgQmxvY2sgY29tbWFuZCAqLworICAgICAgZXJyb3JzdGF0ZSA9IFNETU1DX0NtZFJlYWRNdWx0aUJsb2NrKGhtbWMtPkluc3RhbmNlLCBhZGQpOwogICAgIH0KICAgICBlbHNlCiAgICAgewogICAgICAgaG1tYy0+Q29udGV4dCA9IE1NQ19DT05URVhUX1JFQURfU0lOR0xFX0JMT0NLOwotICAgICAgCisKICAgICAgIC8qIFJlYWQgU2luZ2xlIEJsb2NrIGNvbW1hbmQgKi8KLSAgICAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRSZWFkU2luZ2xlQmxvY2soaG1tYy0+SW5zdGFuY2UsIEJsb2NrQWRkKTsKKyAgICAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRSZWFkU2luZ2xlQmxvY2soaG1tYy0+SW5zdGFuY2UsIGFkZCk7CiAgICAgfQogICAgIGlmKGVycm9yc3RhdGUgIT0gSEFMX01NQ19FUlJPUl9OT05FKQogICAgIHsKICAgICAgIC8qIENsZWFyIGFsbCB0aGUgc3RhdGljIGZsYWdzICovCi0gICAgICBfX0hBTF9NTUNfQ0xFQVJfRkxBRyhobW1jLCBTRE1NQ19TVEFUSUNfRkxBR1MpOworICAgICAgX19IQUxfTU1DX0NMRUFSX0ZMQUcoaG1tYywgU0RJT19TVEFUSUNfRkxBR1MpOwogICAgICAgaG1tYy0+RXJyb3JDb2RlIHw9IGVycm9yc3RhdGU7CiAgICAgICBobW1jLT5TdGF0ZSA9IEhBTF9NTUNfU1RBVEVfUkVBRFk7CiAgICAgICByZXR1cm4gSEFMX0VSUk9SOwogICAgIH0KLSAgICAgIAotICAgIC8qIFBvbGwgb24gU0RNTUMgZmxhZ3MgKi8KLSNpZmRlZiBTRElPX1NUQV9TVEJJVEVSUgotICAgIHdoaWxlKCFfX0hBTF9NTUNfR0VUX0ZMQUcoaG1tYywgU0RJT19GTEFHX1JYT1ZFUlIgfCBTRElPX0ZMQUdfRENSQ0ZBSUwgfCBTRElPX0ZMQUdfRFRJTUVPVVQgfCBTRElPX0ZMQUdfREFUQUVORCB8IFNESU9fU1RBX1NUQklURVJSKSkKKworICAgIC8qIFBvbGwgb24gU0RJTyBmbGFncyAqLworICAgIGRhdGFyZW1haW5pbmcgPSBjb25maWcuRGF0YUxlbmd0aDsKKyNpZiBkZWZpbmVkKFNESU9fU1RBX1NUQklURVJSKQorICAgIHdoaWxlKCFfX0hBTF9NTUNfR0VUX0ZMQUcoaG1tYywgU0RJT19GTEFHX1JYT1ZFUlIgfCBTRElPX0ZMQUdfRENSQ0ZBSUwgfCBTRElPX0ZMQUdfRFRJTUVPVVQgfCBTRElPX0ZMQUdfREFUQUVORCB8IFNESU9fRkxBR19TVEJJVEVSUikpCiAjZWxzZSAvKiBTRElPX1NUQV9TVEJJVEVSUiBub3QgZGVmaW5lZCAqLwogICAgIHdoaWxlKCFfX0hBTF9NTUNfR0VUX0ZMQUcoaG1tYywgU0RJT19GTEFHX1JYT1ZFUlIgfCBTRElPX0ZMQUdfRENSQ0ZBSUwgfCBTRElPX0ZMQUdfRFRJTUVPVVQgfCBTRElPX0ZMQUdfREFUQUVORCkpCiAjZW5kaWYgLyogU0RJT19TVEFfU1RCSVRFUlIgKi8KICAgICB7Ci0gICAgICBpZihfX0hBTF9NTUNfR0VUX0ZMQUcoaG1tYywgU0RJT19GTEFHX1JYRklGT0hGKSkKKyAgICAgIGlmKF9fSEFMX01NQ19HRVRfRkxBRyhobW1jLCBTRElPX0ZMQUdfUlhGSUZPSEYpICYmIChkYXRhcmVtYWluaW5nID4gMFUpKQogICAgICAgewotICAgICAgICAvKiBSZWFkIGRhdGEgZnJvbSBTRE1NQyBSeCBGSUZPICovCisgICAgICAgIC8qIFJlYWQgZGF0YSBmcm9tIFNESU8gUnggRklGTyAqLwogICAgICAgICBmb3IoY291bnQgPSAwVTsgY291bnQgPCA4VTsgY291bnQrKykKICAgICAgICAgewotICAgICAgICAgICoodGVtcGJ1ZmYgKyBjb3VudCkgPSBTRElPX1JlYWRGSUZPKGhtbWMtPkluc3RhbmNlKTsKKyAgICAgICAgICBkYXRhID0gU0RJT19SZWFkRklGTyhobW1jLT5JbnN0YW5jZSk7CisgICAgICAgICAgKnRlbXBidWZmID0gKHVpbnQ4X3QpKGRhdGEgJiAweEZGVSk7CisgICAgICAgICAgdGVtcGJ1ZmYrKzsKKyAgICAgICAgICBkYXRhcmVtYWluaW5nLS07CisgICAgICAgICAgKnRlbXBidWZmID0gKHVpbnQ4X3QpKChkYXRhID4+IDhVKSAmIDB4RkZVKTsKKyAgICAgICAgICB0ZW1wYnVmZisrOworICAgICAgICAgIGRhdGFyZW1haW5pbmctLTsKKyAgICAgICAgICAqdGVtcGJ1ZmYgPSAodWludDhfdCkoKGRhdGEgPj4gMTZVKSAmIDB4RkZVKTsKKyAgICAgICAgICB0ZW1wYnVmZisrOworICAgICAgICAgIGRhdGFyZW1haW5pbmctLTsKKyAgICAgICAgICAqdGVtcGJ1ZmYgPSAodWludDhfdCkoKGRhdGEgPj4gMjRVKSAmIDB4RkZVKTsKKyAgICAgICAgICB0ZW1wYnVmZisrOworICAgICAgICAgIGRhdGFyZW1haW5pbmctLTsKICAgICAgICAgfQotICAgICAgICB0ZW1wYnVmZiArPSA4VTsKICAgICAgIH0KLSAgICAgIAotICAgICAgaWYoKFRpbWVvdXQgPT0gMFUpfHwoKEhBTF9HZXRUaWNrKCktdGlja3N0YXJ0KSA+PSAgVGltZW91dCkpCisKKyAgICAgIGlmKCgoSEFMX0dldFRpY2soKS10aWNrc3RhcnQpID49ICBUaW1lb3V0KSB8fCAoVGltZW91dCA9PSAwVSkpCiAgICAgICB7CiAgICAgICAgIC8qIENsZWFyIGFsbCB0aGUgc3RhdGljIGZsYWdzICovCi0gICAgICAgIF9fSEFMX01NQ19DTEVBUl9GTEFHKGhtbWMsIFNETU1DX1NUQVRJQ19GTEFHUyk7CisgICAgICAgIF9fSEFMX01NQ19DTEVBUl9GTEFHKGhtbWMsIFNESU9fU1RBVElDX0ZMQUdTKTsKICAgICAgICAgaG1tYy0+RXJyb3JDb2RlIHw9IEhBTF9NTUNfRVJST1JfVElNRU9VVDsKICAgICAgICAgaG1tYy0+U3RhdGU9IEhBTF9NTUNfU1RBVEVfUkVBRFk7CiAgICAgICAgIHJldHVybiBIQUxfVElNRU9VVDsKICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKiBTZW5kIHN0b3AgdHJhbnNtaXNzaW9uIGNvbW1hbmQgaW4gY2FzZSBvZiBtdWx0aWJsb2NrIHJlYWQgKi8KICAgICBpZihfX0hBTF9NTUNfR0VUX0ZMQUcoaG1tYywgU0RJT19GTEFHX0RBVEFFTkQpICYmIChOdW1iZXJPZkJsb2NrcyA+IDFVKSkKLSAgICB7ICAgIAorICAgIHsKICAgICAgIC8qIFNlbmQgc3RvcCB0cmFuc21pc3Npb24gY29tbWFuZCAqLwogICAgICAgZXJyb3JzdGF0ZSA9IFNETU1DX0NtZFN0b3BUcmFuc2ZlcihobW1jLT5JbnN0YW5jZSk7CiAgICAgICBpZihlcnJvcnN0YXRlICE9IEhBTF9NTUNfRVJST1JfTk9ORSkKICAgICAgIHsKICAgICAgICAgLyogQ2xlYXIgYWxsIHRoZSBzdGF0aWMgZmxhZ3MgKi8KLSAgICAgICAgX19IQUxfTU1DX0NMRUFSX0ZMQUcoaG1tYywgU0RNTUNfU1RBVElDX0ZMQUdTKTsKKyAgICAgICAgX19IQUxfTU1DX0NMRUFSX0ZMQUcoaG1tYywgU0RJT19TVEFUSUNfRkxBR1MpOwogICAgICAgICBobW1jLT5FcnJvckNvZGUgfD0gZXJyb3JzdGF0ZTsKICAgICAgICAgaG1tYy0+U3RhdGUgPSBIQUxfTU1DX1NUQVRFX1JFQURZOwogICAgICAgICByZXR1cm4gSEFMX0VSUk9SOwogICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qIEdldCBlcnJvciBzdGF0ZSAqLwogICAgIGlmKF9fSEFMX01NQ19HRVRfRkxBRyhobW1jLCBTRElPX0ZMQUdfRFRJTUVPVVQpKQogICAgIHsKICAgICAgIC8qIENsZWFyIGFsbCB0aGUgc3RhdGljIGZsYWdzICovCi0gICAgICBfX0hBTF9NTUNfQ0xFQVJfRkxBRyhobW1jLCBTRE1NQ19TVEFUSUNfRkxBR1MpOworICAgICAgX19IQUxfTU1DX0NMRUFSX0ZMQUcoaG1tYywgU0RJT19TVEFUSUNfRkxBR1MpOwogICAgICAgaG1tYy0+RXJyb3JDb2RlIHw9IEhBTF9NTUNfRVJST1JfREFUQV9USU1FT1VUOwogICAgICAgaG1tYy0+U3RhdGUgPSBIQUxfTU1DX1NUQVRFX1JFQURZOwogICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKQEAgLTY3OSw3ICs2OTQsNyBAQAogICAgIGVsc2UgaWYoX19IQUxfTU1DX0dFVF9GTEFHKGhtbWMsIFNESU9fRkxBR19EQ1JDRkFJTCkpCiAgICAgewogICAgICAgLyogQ2xlYXIgYWxsIHRoZSBzdGF0aWMgZmxhZ3MgKi8KLSAgICAgIF9fSEFMX01NQ19DTEVBUl9GTEFHKGhtbWMsIFNETU1DX1NUQVRJQ19GTEFHUyk7CisgICAgICBfX0hBTF9NTUNfQ0xFQVJfRkxBRyhobW1jLCBTRElPX1NUQVRJQ19GTEFHUyk7CiAgICAgICBobW1jLT5FcnJvckNvZGUgfD0gSEFMX01NQ19FUlJPUl9EQVRBX0NSQ19GQUlMOwogICAgICAgaG1tYy0+U3RhdGUgPSBIQUxfTU1DX1NUQVRFX1JFQURZOwogICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKQEAgLTY4NywzMyArNzAyLDQ4IEBACiAgICAgZWxzZSBpZihfX0hBTF9NTUNfR0VUX0ZMQUcoaG1tYywgU0RJT19GTEFHX1JYT1ZFUlIpKQogICAgIHsKICAgICAgIC8qIENsZWFyIGFsbCB0aGUgc3RhdGljIGZsYWdzICovCi0gICAgICBfX0hBTF9NTUNfQ0xFQVJfRkxBRyhobW1jLCBTRE1NQ19TVEFUSUNfRkxBR1MpOworICAgICAgX19IQUxfTU1DX0NMRUFSX0ZMQUcoaG1tYywgU0RJT19TVEFUSUNfRkxBR1MpOwogICAgICAgaG1tYy0+RXJyb3JDb2RlIHw9IEhBTF9NTUNfRVJST1JfUlhfT1ZFUlJVTjsKICAgICAgIGhtbWMtPlN0YXRlID0gSEFMX01NQ19TVEFURV9SRUFEWTsKICAgICAgIHJldHVybiBIQUxfRVJST1I7CiAgICAgfQotICAgIAotICAgIC8qIEVtcHR5IEZJRk8gaWYgdGhlcmUgaXMgc3RpbGwgYW55IGRhdGEgKi8KLSAgICB3aGlsZSAoKF9fSEFMX01NQ19HRVRfRkxBRyhobW1jLCBTRElPX0ZMQUdfUlhEQVZMKSkpCisgICAgZWxzZQogICAgIHsKLSAgICAgICp0ZW1wYnVmZiA9IFNESU9fUmVhZEZJRk8oaG1tYy0+SW5zdGFuY2UpOworICAgICAgLyogTm90aGluZyB0byBkbyAqLworICAgIH0KKworICAgIC8qIEVtcHR5IEZJRk8gaWYgdGhlcmUgaXMgc3RpbGwgYW55IGRhdGEgKi8KKyAgICB3aGlsZSAoKF9fSEFMX01NQ19HRVRfRkxBRyhobW1jLCBTRElPX0ZMQUdfUlhEQVZMKSkgJiYgKGRhdGFyZW1haW5pbmcgPiAwVSkpCisgICAgeworICAgICAgZGF0YSA9IFNESU9fUmVhZEZJRk8oaG1tYy0+SW5zdGFuY2UpOworICAgICAgKnRlbXBidWZmID0gKHVpbnQ4X3QpKGRhdGEgJiAweEZGVSk7CiAgICAgICB0ZW1wYnVmZisrOwotICAgICAgCi0gICAgICBpZigoVGltZW91dCA9PSAwVSl8fCgoSEFMX0dldFRpY2soKS10aWNrc3RhcnQpID49ICBUaW1lb3V0KSkKKyAgICAgIGRhdGFyZW1haW5pbmctLTsKKyAgICAgICp0ZW1wYnVmZiA9ICh1aW50OF90KSgoZGF0YSA+PiA4VSkgJiAweEZGVSk7CisgICAgICB0ZW1wYnVmZisrOworICAgICAgZGF0YXJlbWFpbmluZy0tOworICAgICAgKnRlbXBidWZmID0gKHVpbnQ4X3QpKChkYXRhID4+IDE2VSkgJiAweEZGVSk7CisgICAgICB0ZW1wYnVmZisrOworICAgICAgZGF0YXJlbWFpbmluZy0tOworICAgICAgKnRlbXBidWZmID0gKHVpbnQ4X3QpKChkYXRhID4+IDI0VSkgJiAweEZGVSk7CisgICAgICB0ZW1wYnVmZisrOworICAgICAgZGF0YXJlbWFpbmluZy0tOworCisgICAgICBpZigoKEhBTF9HZXRUaWNrKCktdGlja3N0YXJ0KSA+PSAgVGltZW91dCkgfHwgKFRpbWVvdXQgPT0gMFUpKQogICAgICAgewogICAgICAgICAvKiBDbGVhciBhbGwgdGhlIHN0YXRpYyBmbGFncyAqLwotICAgICAgICBfX0hBTF9NTUNfQ0xFQVJfRkxBRyhobW1jLCBTRE1NQ19TVEFUSUNfRkxBR1MpOyAgICAgICAgCisgICAgICAgIF9fSEFMX01NQ19DTEVBUl9GTEFHKGhtbWMsIFNESU9fU1RBVElDX0ZMQUdTKTsgICAgICAgIAogICAgICAgICBobW1jLT5FcnJvckNvZGUgfD0gSEFMX01NQ19FUlJPUl9USU1FT1VUOwogICAgICAgICBobW1jLT5TdGF0ZT0gSEFMX01NQ19TVEFURV9SRUFEWTsKICAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKiBDbGVhciBhbGwgdGhlIHN0YXRpYyBmbGFncyAqLwotICAgIF9fSEFMX01NQ19DTEVBUl9GTEFHKGhtbWMsIFNETU1DX1NUQVRJQ19GTEFHUyk7Ci0gICAgCisgICAgX19IQUxfTU1DX0NMRUFSX0ZMQUcoaG1tYywgU0RJT19TVEFUSUNfREFUQV9GTEFHUyk7CisKICAgICBobW1jLT5TdGF0ZSA9IEhBTF9NTUNfU1RBVEVfUkVBRFk7Ci0gICAgCisKICAgICByZXR1cm4gSEFMX09LOwogICB9CiAgIGVsc2UKQEAgLTcyOCwyMSArNzU4LDIyIEBACiAgICogICAgICAgICB0cmFuc2ZlciBpcyBtYW5hZ2VkIGJ5IHBvbGxpbmcgbW9kZS4KICAgKiBAbm90ZSAgIFRoaXMgQVBJIHNob3VsZCBiZSBmb2xsb3dlZCBieSBhIGNoZWNrIG9uIHRoZSBjYXJkIHN0YXRlIHRocm91Z2gKICAgKiAgICAgICAgIEhBTF9NTUNfR2V0Q2FyZFN0YXRlKCkuCi0gICogQHBhcmFtICBobW1jIFBvaW50ZXIgdG8gTU1DIGhhbmRsZQotICAqIEBwYXJhbSAgcERhdGEgcG9pbnRlciB0byB0aGUgYnVmZmVyIHRoYXQgd2lsbCBjb250YWluIHRoZSBkYXRhIHRvIHRyYW5zbWl0Ci0gICogQHBhcmFtICBCbG9ja0FkZCBCbG9jayBBZGRyZXNzIHdoZXJlIGRhdGEgd2lsbCBiZSB3cml0dGVuICAKLSAgKiBAcGFyYW0gIE51bWJlck9mQmxvY2tzIE51bWJlciBvZiBNTUMgYmxvY2tzIHRvIHdyaXRlCi0gICogQHBhcmFtICBUaW1lb3V0IFNwZWNpZnkgdGltZW91dCB2YWx1ZQorICAqIEBwYXJhbSAgaG1tYzogUG9pbnRlciB0byBNTUMgaGFuZGxlCisgICogQHBhcmFtICBwRGF0YTogcG9pbnRlciB0byB0aGUgYnVmZmVyIHRoYXQgd2lsbCBjb250YWluIHRoZSBkYXRhIHRvIHRyYW5zbWl0CisgICogQHBhcmFtICBCbG9ja0FkZDogQmxvY2sgQWRkcmVzcyB3aGVyZSBkYXRhIHdpbGwgYmUgd3JpdHRlbgorICAqIEBwYXJhbSAgTnVtYmVyT2ZCbG9ja3M6IE51bWJlciBvZiBNTUMgYmxvY2tzIHRvIHdyaXRlCisgICogQHBhcmFtICBUaW1lb3V0OiBTcGVjaWZ5IHRpbWVvdXQgdmFsdWUKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9NTUNfV3JpdGVCbG9ja3MoTU1DX0hhbmRsZVR5cGVEZWYgKmhtbWMsIHVpbnQ4X3QgKnBEYXRhLCB1aW50MzJfdCBCbG9ja0FkZCwgdWludDMyX3QgTnVtYmVyT2ZCbG9ja3MsIHVpbnQzMl90IFRpbWVvdXQpCiB7CiAgIFNESU9fRGF0YUluaXRUeXBlRGVmIGNvbmZpZzsKLSAgdWludDMyX3QgZXJyb3JzdGF0ZSA9IEhBTF9NTUNfRVJST1JfTk9ORTsKKyAgdWludDMyX3QgZXJyb3JzdGF0ZTsKICAgdWludDMyX3QgdGlja3N0YXJ0ID0gSEFMX0dldFRpY2soKTsKLSAgdWludDMyX3QgY291bnQgPSAwVTsKLSAgdWludDMyX3QgKnRlbXBidWZmID0gKHVpbnQzMl90ICopcERhdGE7Ci0gIAorICB1aW50MzJfdCBjb3VudCwgZGF0YSwgZGF0YXJlbWFpbmluZzsKKyAgdWludDMyX3QgYWRkID0gQmxvY2tBZGQ7CisgIHVpbnQ4X3QgKnRlbXBidWZmID0gcERhdGE7CisKICAgaWYoTlVMTCA9PSBwRGF0YSkKICAgewogICAgIGhtbWMtPkVycm9yQ29kZSB8PSBIQUxfTU1DX0VSUk9SX1BBUkFNOwpAQCAtNzUxLDExMSArNzgyLDEyMiBAQAogCiAgIGlmKGhtbWMtPlN0YXRlID09IEhBTF9NTUNfU1RBVEVfUkVBRFkpCiAgIHsKLSAgICBobW1jLT5FcnJvckNvZGUgPSBIQUxfRE1BX0VSUk9SX05PTkU7Ci0gICAgCisgICAgaG1tYy0+RXJyb3JDb2RlID0gSEFMX01NQ19FUlJPUl9OT05FOworCiAgICAgaWYoKEJsb2NrQWRkICsgTnVtYmVyT2ZCbG9ja3MpID4gKGhtbWMtPk1tY0NhcmQuTG9nQmxvY2tOYnIpKQogICAgIHsKICAgICAgIGhtbWMtPkVycm9yQ29kZSB8PSBIQUxfTU1DX0VSUk9SX0FERFJfT1VUX09GX1JBTkdFOwogICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICB9Ci0gICAgCisKICAgICBobW1jLT5TdGF0ZSA9IEhBTF9NTUNfU1RBVEVfQlVTWTsKLSAgICAKKwogICAgIC8qIEluaXRpYWxpemUgZGF0YSBjb250cm9sIHJlZ2lzdGVyICovCiAgICAgaG1tYy0+SW5zdGFuY2UtPkRDVFJMID0gMFU7Ci0gICAgCi0gICAgLyogQ2hlY2sgdGhlIENhcmQgY2FwYWNpdHkgaW4gdGVybSBvZiBMb2dpY2FsIG51bWJlciBvZiBibG9ja3MgKi8KLSAgICBpZiAoKGhtbWMtPk1tY0NhcmQuTG9nQmxvY2tOYnIpIDwgQ0FQQUNJVFkpCisKKyAgICBpZiAoKGhtbWMtPk1tY0NhcmQuQ2FyZFR5cGUpICE9IE1NQ19ISUdIX0NBUEFDSVRZX0NBUkQpCiAgICAgewotICAgICAgQmxvY2tBZGQgKj0gNTEyVTsKKyAgICAgIGFkZCAqPSA1MTJVOwogICAgIH0KLSAgICAKLSAgICAvKiBTZXQgQmxvY2sgU2l6ZSBmb3IgQ2FyZCAqLyAKLSAgICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kQmxvY2tMZW5ndGgoaG1tYy0+SW5zdGFuY2UsIEJMT0NLU0laRSk7CisKKyAgICAvKiBTZXQgQmxvY2sgU2l6ZSBmb3IgQ2FyZCAqLworICAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRCbG9ja0xlbmd0aChobW1jLT5JbnN0YW5jZSwgTU1DX0JMT0NLU0laRSk7CiAgICAgaWYoZXJyb3JzdGF0ZSAhPSBIQUxfTU1DX0VSUk9SX05PTkUpCiAgICAgewogICAgICAgLyogQ2xlYXIgYWxsIHRoZSBzdGF0aWMgZmxhZ3MgKi8KLSAgICAgIF9fSEFMX01NQ19DTEVBUl9GTEFHKGhtbWMsIFNESU9fU1RBVElDX0ZMQUdTKTsgIAorICAgICAgX19IQUxfTU1DX0NMRUFSX0ZMQUcoaG1tYywgU0RJT19TVEFUSUNfRkxBR1MpOwogICAgICAgaG1tYy0+RXJyb3JDb2RlIHw9IGVycm9yc3RhdGU7CiAgICAgICBobW1jLT5TdGF0ZSA9IEhBTF9NTUNfU1RBVEVfUkVBRFk7CiAgICAgICByZXR1cm4gSEFMX0VSUk9SOwogICAgIH0KLSAgICAKKwogICAgIC8qIFdyaXRlIEJsb2NrcyBpbiBQb2xsaW5nIG1vZGUgKi8KICAgICBpZihOdW1iZXJPZkJsb2NrcyA+IDFVKQogICAgIHsKICAgICAgIGhtbWMtPkNvbnRleHQgPSBNTUNfQ09OVEVYVF9XUklURV9NVUxUSVBMRV9CTE9DSzsKLSAgICAgIAotICAgICAgLyogV3JpdGUgTXVsdGkgQmxvY2sgY29tbWFuZCAqLyAKLSAgICAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRXcml0ZU11bHRpQmxvY2soaG1tYy0+SW5zdGFuY2UsIEJsb2NrQWRkKTsKKworICAgICAgLyogV3JpdGUgTXVsdGkgQmxvY2sgY29tbWFuZCAqLworICAgICAgZXJyb3JzdGF0ZSA9IFNETU1DX0NtZFdyaXRlTXVsdGlCbG9jayhobW1jLT5JbnN0YW5jZSwgYWRkKTsKICAgICB9CiAgICAgZWxzZQogICAgIHsKICAgICAgIGhtbWMtPkNvbnRleHQgPSBNTUNfQ09OVEVYVF9XUklURV9TSU5HTEVfQkxPQ0s7Ci0gICAgICAKKwogICAgICAgLyogV3JpdGUgU2luZ2xlIEJsb2NrIGNvbW1hbmQgKi8KLSAgICAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRXcml0ZVNpbmdsZUJsb2NrKGhtbWMtPkluc3RhbmNlLCBCbG9ja0FkZCk7CisgICAgICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kV3JpdGVTaW5nbGVCbG9jayhobW1jLT5JbnN0YW5jZSwgYWRkKTsKICAgICB9CiAgICAgaWYoZXJyb3JzdGF0ZSAhPSBIQUxfTU1DX0VSUk9SX05PTkUpCiAgICAgewogICAgICAgLyogQ2xlYXIgYWxsIHRoZSBzdGF0aWMgZmxhZ3MgKi8KLSAgICAgIF9fSEFMX01NQ19DTEVBUl9GTEFHKGhtbWMsIFNESU9fU1RBVElDX0ZMQUdTKTsgIAorICAgICAgX19IQUxfTU1DX0NMRUFSX0ZMQUcoaG1tYywgU0RJT19TVEFUSUNfRkxBR1MpOwogICAgICAgaG1tYy0+RXJyb3JDb2RlIHw9IGVycm9yc3RhdGU7CiAgICAgICBobW1jLT5TdGF0ZSA9IEhBTF9NTUNfU1RBVEVfUkVBRFk7CiAgICAgICByZXR1cm4gSEFMX0VSUk9SOwogICAgIH0KLSAgICAKLSAgICAvKiBDb25maWd1cmUgdGhlIE1NQyBEUFNNIChEYXRhIFBhdGggU3RhdGUgTWFjaGluZSkgKi8gCisKKyAgICAvKiBDb25maWd1cmUgdGhlIE1NQyBEUFNNIChEYXRhIFBhdGggU3RhdGUgTWFjaGluZSkgKi8KICAgICBjb25maWcuRGF0YVRpbWVPdXQgICA9IFNETU1DX0RBVEFUSU1FT1VUOwotICAgIGNvbmZpZy5EYXRhTGVuZ3RoICAgID0gTnVtYmVyT2ZCbG9ja3MgKiBCTE9DS1NJWkU7CisgICAgY29uZmlnLkRhdGFMZW5ndGggICAgPSBOdW1iZXJPZkJsb2NrcyAqIE1NQ19CTE9DS1NJWkU7CiAgICAgY29uZmlnLkRhdGFCbG9ja1NpemUgPSBTRElPX0RBVEFCTE9DS19TSVpFXzUxMkI7CiAgICAgY29uZmlnLlRyYW5zZmVyRGlyICAgPSBTRElPX1RSQU5TRkVSX0RJUl9UT19DQVJEOwogICAgIGNvbmZpZy5UcmFuc2Zlck1vZGUgID0gU0RJT19UUkFOU0ZFUl9NT0RFX0JMT0NLOwogICAgIGNvbmZpZy5EUFNNICAgICAgICAgID0gU0RJT19EUFNNX0VOQUJMRTsKLSAgICBTRElPX0NvbmZpZ0RhdGEoaG1tYy0+SW5zdGFuY2UsICZjb25maWcpOwotICAgIAorICAgICh2b2lkKVNESU9fQ29uZmlnRGF0YShobW1jLT5JbnN0YW5jZSwgJmNvbmZpZyk7CisKICAgICAvKiBXcml0ZSBibG9jayhzKSBpbiBwb2xsaW5nIG1vZGUgKi8KLSNpZmRlZiBTRElPX1NUQV9TVEJJVEVSUgorICAgIGRhdGFyZW1haW5pbmcgPSBjb25maWcuRGF0YUxlbmd0aDsKKyNpZiBkZWZpbmVkKFNESU9fU1RBX1NUQklURVJSKQogICAgIHdoaWxlKCFfX0hBTF9NTUNfR0VUX0ZMQUcoaG1tYywgU0RJT19GTEFHX1RYVU5ERVJSIHwgU0RJT19GTEFHX0RDUkNGQUlMIHwgU0RJT19GTEFHX0RUSU1FT1VUIHwgU0RJT19GTEFHX0RBVEFFTkQgfCBTRElPX0ZMQUdfU1RCSVRFUlIpKQogI2Vsc2UgLyogU0RJT19TVEFfU1RCSVRFUlIgbm90IGRlZmluZWQgKi8KICAgICB3aGlsZSghX19IQUxfTU1DX0dFVF9GTEFHKGhtbWMsIFNESU9fRkxBR19UWFVOREVSUiB8IFNESU9fRkxBR19EQ1JDRkFJTCB8IFNESU9fRkxBR19EVElNRU9VVCB8IFNESU9fRkxBR19EQVRBRU5EKSkKICNlbmRpZiAvKiBTRElPX1NUQV9TVEJJVEVSUiAqLwogICAgIHsKLSAgICAgIGlmKF9fSEFMX01NQ19HRVRfRkxBRyhobW1jLCBTRElPX0ZMQUdfVFhGSUZPSEUpKQorICAgICAgaWYoX19IQUxfTU1DX0dFVF9GTEFHKGhtbWMsIFNESU9fRkxBR19UWEZJRk9IRSkgJiYgKGRhdGFyZW1haW5pbmcgPiAwVSkpCiAgICAgICB7CiAgICAgICAgIC8qIFdyaXRlIGRhdGEgdG8gU0RJTyBUeCBGSUZPICovCiAgICAgICAgIGZvcihjb3VudCA9IDBVOyBjb3VudCA8IDhVOyBjb3VudCsrKQogICAgICAgICB7Ci0gICAgICAgICAgU0RJT19Xcml0ZUZJRk8oaG1tYy0+SW5zdGFuY2UsICh0ZW1wYnVmZiArIGNvdW50KSk7CisgICAgICAgICAgZGF0YSA9ICh1aW50MzJfdCkoKnRlbXBidWZmKTsKKyAgICAgICAgICB0ZW1wYnVmZisrOworICAgICAgICAgIGRhdGFyZW1haW5pbmctLTsKKyAgICAgICAgICBkYXRhIHw9ICgodWludDMyX3QpKCp0ZW1wYnVmZikgPDwgOFUpOworICAgICAgICAgIHRlbXBidWZmKys7CisgICAgICAgICAgZGF0YXJlbWFpbmluZy0tOworICAgICAgICAgIGRhdGEgfD0gKCh1aW50MzJfdCkoKnRlbXBidWZmKSA8PCAxNlUpOworICAgICAgICAgIHRlbXBidWZmKys7CisgICAgICAgICAgZGF0YXJlbWFpbmluZy0tOworICAgICAgICAgIGRhdGEgfD0gKCh1aW50MzJfdCkoKnRlbXBidWZmKSA8PCAyNFUpOworICAgICAgICAgIHRlbXBidWZmKys7CisgICAgICAgICAgZGF0YXJlbWFpbmluZy0tOworICAgICAgICAgICh2b2lkKVNESU9fV3JpdGVGSUZPKGhtbWMtPkluc3RhbmNlLCAmZGF0YSk7CiAgICAgICAgIH0KLSAgICAgICAgdGVtcGJ1ZmYgKz0gOFU7CiAgICAgICB9Ci0gICAgICAKLSAgICAgIGlmKChUaW1lb3V0ID09IDBVKXx8KChIQUxfR2V0VGljaygpLXRpY2tzdGFydCkgPj0gIFRpbWVvdXQpKQorCisgICAgICBpZigoKEhBTF9HZXRUaWNrKCktdGlja3N0YXJ0KSA+PSAgVGltZW91dCkgfHwgKFRpbWVvdXQgPT0gMFUpKQogICAgICAgewogICAgICAgICAvKiBDbGVhciBhbGwgdGhlIHN0YXRpYyBmbGFncyAqLwotICAgICAgICBfX0hBTF9NTUNfQ0xFQVJfRkxBRyhobW1jLCBTRElPX1NUQVRJQ19GTEFHUyk7ICAKKyAgICAgICAgX19IQUxfTU1DX0NMRUFSX0ZMQUcoaG1tYywgU0RJT19TVEFUSUNfRkxBR1MpOwogICAgICAgICBobW1jLT5FcnJvckNvZGUgfD0gZXJyb3JzdGF0ZTsKICAgICAgICAgaG1tYy0+U3RhdGUgPSBIQUxfTU1DX1NUQVRFX1JFQURZOwogICAgICAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CiAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyogU2VuZCBzdG9wIHRyYW5zbWlzc2lvbiBjb21tYW5kIGluIGNhc2Ugb2YgbXVsdGlibG9jayB3cml0ZSAqLwogICAgIGlmKF9fSEFMX01NQ19HRVRfRkxBRyhobW1jLCBTRElPX0ZMQUdfREFUQUVORCkgJiYgKE51bWJlck9mQmxvY2tzID4gMVUpKQotICAgIHsgCisgICAgewogICAgICAgLyogU2VuZCBzdG9wIHRyYW5zbWlzc2lvbiBjb21tYW5kICovCiAgICAgICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kU3RvcFRyYW5zZmVyKGhtbWMtPkluc3RhbmNlKTsKICAgICAgIGlmKGVycm9yc3RhdGUgIT0gSEFMX01NQ19FUlJPUl9OT05FKQogICAgICAgewogICAgICAgICAvKiBDbGVhciBhbGwgdGhlIHN0YXRpYyBmbGFncyAqLwotICAgICAgICBfX0hBTF9NTUNfQ0xFQVJfRkxBRyhobW1jLCBTRElPX1NUQVRJQ19GTEFHUyk7ICAKKyAgICAgICAgX19IQUxfTU1DX0NMRUFSX0ZMQUcoaG1tYywgU0RJT19TVEFUSUNfRkxBR1MpOwogICAgICAgICBobW1jLT5FcnJvckNvZGUgfD0gZXJyb3JzdGF0ZTsKICAgICAgICAgaG1tYy0+U3RhdGUgPSBIQUxfTU1DX1NUQVRFX1JFQURZOwogICAgICAgICByZXR1cm4gSEFMX0VSUk9SOwogICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qIEdldCBlcnJvciBzdGF0ZSAqLwogICAgIGlmKF9fSEFMX01NQ19HRVRfRkxBRyhobW1jLCBTRElPX0ZMQUdfRFRJTUVPVVQpKQogICAgIHsKQEAgLTg2OSw3ICs5MTEsNyBAQAogICAgIHsKICAgICAgIC8qIENsZWFyIGFsbCB0aGUgc3RhdGljIGZsYWdzICovCiAgICAgICBfX0hBTF9NTUNfQ0xFQVJfRkxBRyhobW1jLCBTRElPX1NUQVRJQ19GTEFHUyk7Ci0gICAgICBobW1jLT5FcnJvckNvZGUgfD0gSEFMX01NQ19FUlJPUl9EQVRBX0NSQ19GQUlMOyAgICAgIAorICAgICAgaG1tYy0+RXJyb3JDb2RlIHw9IEhBTF9NTUNfRVJST1JfREFUQV9DUkNfRkFJTDsKICAgICAgIGhtbWMtPlN0YXRlID0gSEFMX01NQ19TVEFURV9SRUFEWTsKICAgICAgIHJldHVybiBIQUxfRVJST1I7CiAgICAgfQpAQCAtODgxLDEyICs5MjMsMTYgQEAKICAgICAgIGhtbWMtPlN0YXRlID0gSEFMX01NQ19TVEFURV9SRUFEWTsKICAgICAgIHJldHVybiBIQUxfRVJST1I7CiAgICAgfQotICAgIAorICAgIGVsc2UKKyAgICB7CisgICAgICAvKiBOb3RoaW5nIHRvIGRvICovCisgICAgfQorCiAgICAgLyogQ2xlYXIgYWxsIHRoZSBzdGF0aWMgZmxhZ3MgKi8KLSAgICBfX0hBTF9NTUNfQ0xFQVJfRkxBRyhobW1jLCBTRElPX1NUQVRJQ19GTEFHUyk7Ci0gICAgCisgICAgX19IQUxfTU1DX0NMRUFSX0ZMQUcoaG1tYywgU0RJT19TVEFUSUNfREFUQV9GTEFHUyk7CisKICAgICBobW1jLT5TdGF0ZSA9IEhBTF9NTUNfU1RBVEVfUkVBRFk7Ci0gICAgCisKICAgICByZXR1cm4gSEFMX09LOwogICB9CiAgIGVsc2UKQEAgLTg5Nyw5OSArOTQzLDEwNCBAQAogfQogCiAvKioKLSAgKiBAYnJpZWYgIFJlYWRzIGJsb2NrKHMpIGZyb20gYSBzcGVjaWZpZWQgYWRkcmVzcyBpbiBhIGNhcmQuIFRoZSBEYXRhIHRyYW5zZmVyIAotICAqICAgICAgICAgaXMgbWFuYWdlZCBpbiBpbnRlcnJ1cHQgbW9kZS4gCisgICogQGJyaWVmICBSZWFkcyBibG9jayhzKSBmcm9tIGEgc3BlY2lmaWVkIGFkZHJlc3MgaW4gYSBjYXJkLiBUaGUgRGF0YSB0cmFuc2ZlcgorICAqICAgICAgICAgaXMgbWFuYWdlZCBpbiBpbnRlcnJ1cHQgbW9kZS4KICAgKiBAbm90ZSAgIFRoaXMgQVBJIHNob3VsZCBiZSBmb2xsb3dlZCBieSBhIGNoZWNrIG9uIHRoZSBjYXJkIHN0YXRlIHRocm91Z2gKICAgKiAgICAgICAgIEhBTF9NTUNfR2V0Q2FyZFN0YXRlKCkuCi0gICogQG5vdGUgICBZb3UgY291bGQgYWxzbyBjaGVjayB0aGUgSVQgdHJhbnNmZXIgcHJvY2VzcyB0aHJvdWdoIHRoZSBNTUMgUnggCisgICogQG5vdGUgICBZb3UgY291bGQgYWxzbyBjaGVjayB0aGUgSVQgdHJhbnNmZXIgcHJvY2VzcyB0aHJvdWdoIHRoZSBNTUMgUngKICAgKiAgICAgICAgIGludGVycnVwdCBldmVudC4KLSAgKiBAcGFyYW0gIGhtbWMgUG9pbnRlciB0byBNTUMgaGFuZGxlICAgICAgICAgICAgICAgICAKLSAgKiBAcGFyYW0gIHBEYXRhIFBvaW50ZXIgdG8gdGhlIGJ1ZmZlciB0aGF0IHdpbGwgY29udGFpbiB0aGUgcmVjZWl2ZWQgZGF0YQotICAqIEBwYXJhbSAgQmxvY2tBZGQgQmxvY2sgQWRkcmVzcyBmcm9tIHdoZXJlIGRhdGEgaXMgdG8gYmUgcmVhZCAKLSAgKiBAcGFyYW0gIE51bWJlck9mQmxvY2tzIE51bWJlciBvZiBibG9ja3MgdG8gcmVhZC4KKyAgKiBAcGFyYW0gIGhtbWM6IFBvaW50ZXIgdG8gTU1DIGhhbmRsZQorICAqIEBwYXJhbSAgcERhdGE6IFBvaW50ZXIgdG8gdGhlIGJ1ZmZlciB0aGF0IHdpbGwgY29udGFpbiB0aGUgcmVjZWl2ZWQgZGF0YQorICAqIEBwYXJhbSAgQmxvY2tBZGQ6IEJsb2NrIEFkZHJlc3MgZnJvbSB3aGVyZSBkYXRhIGlzIHRvIGJlIHJlYWQKKyAgKiBAcGFyYW0gIE51bWJlck9mQmxvY2tzOiBOdW1iZXIgb2YgYmxvY2tzIHRvIHJlYWQuCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfTU1DX1JlYWRCbG9ja3NfSVQoTU1DX0hhbmRsZVR5cGVEZWYgKmhtbWMsIHVpbnQ4X3QgKnBEYXRhLCB1aW50MzJfdCBCbG9ja0FkZCwgdWludDMyX3QgTnVtYmVyT2ZCbG9ja3MpCiB7CiAgIFNESU9fRGF0YUluaXRUeXBlRGVmIGNvbmZpZzsKLSAgdWludDMyX3QgZXJyb3JzdGF0ZSA9IEhBTF9NTUNfRVJST1JfTk9ORTsKLSAgCisgIHVpbnQzMl90IGVycm9yc3RhdGU7CisgIHVpbnQzMl90IGFkZCA9IEJsb2NrQWRkOworCiAgIGlmKE5VTEwgPT0gcERhdGEpCiAgIHsKICAgICBobW1jLT5FcnJvckNvZGUgfD0gSEFMX01NQ19FUlJPUl9QQVJBTTsKICAgICByZXR1cm4gSEFMX0VSUk9SOwogICB9Ci0gIAorCiAgIGlmKGhtbWMtPlN0YXRlID09IEhBTF9NTUNfU1RBVEVfUkVBRFkpCiAgIHsKLSAgICBobW1jLT5FcnJvckNvZGUgPSBIQUxfRE1BX0VSUk9SX05PTkU7Ci0gICAgCisgICAgaG1tYy0+RXJyb3JDb2RlID0gSEFMX01NQ19FUlJPUl9OT05FOworCiAgICAgaWYoKEJsb2NrQWRkICsgTnVtYmVyT2ZCbG9ja3MpID4gKGhtbWMtPk1tY0NhcmQuTG9nQmxvY2tOYnIpKQogICAgIHsKICAgICAgIGhtbWMtPkVycm9yQ29kZSB8PSBIQUxfTU1DX0VSUk9SX0FERFJfT1VUX09GX1JBTkdFOwogICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICB9Ci0gICAgCisKICAgICBobW1jLT5TdGF0ZSA9IEhBTF9NTUNfU1RBVEVfQlVTWTsKLSAgICAKKwogICAgIC8qIEluaXRpYWxpemUgZGF0YSBjb250cm9sIHJlZ2lzdGVyICovCiAgICAgaG1tYy0+SW5zdGFuY2UtPkRDVFJMID0gMFU7Ci0gICAgCi0gICAgaG1tYy0+cFJ4QnVmZlB0ciA9ICh1aW50MzJfdCAqKXBEYXRhOwotICAgIGhtbWMtPlJ4WGZlclNpemUgPSBCTE9DS1NJWkUgKiBOdW1iZXJPZkJsb2NrczsKLSAgICAKLSAgICBfX0hBTF9NTUNfRU5BQkxFX0lUKGhtbWMsIChTRElPX0lUX0RDUkNGQUlMIHwgU0RJT19JVF9EVElNRU9VVCB8IFNESU9fSVRfUlhPVkVSUiB8IFNESU9fSVRfREFUQUVORCB8IFNESU9fRkxBR19SWEZJRk9IRikpOwogCi0gICAgLyogQ2hlY2sgdGhlIENhcmQgY2FwYWNpdHkgaW4gdGVybSBvZiBMb2dpY2FsIG51bWJlciBvZiBibG9ja3MgKi8KLSAgICBpZiAoKGhtbWMtPk1tY0NhcmQuTG9nQmxvY2tOYnIpIDwgQ0FQQUNJVFkpCisgICAgaG1tYy0+cFJ4QnVmZlB0ciA9IHBEYXRhOworICAgIGhtbWMtPlJ4WGZlclNpemUgPSBNTUNfQkxPQ0tTSVpFICogTnVtYmVyT2ZCbG9ja3M7CisKKyNpZiBkZWZpbmVkKFNESU9fU1RBX1NUQklURVJSKQorICAgIF9fSEFMX01NQ19FTkFCTEVfSVQoaG1tYywgKFNESU9fSVRfRENSQ0ZBSUwgfCBTRElPX0lUX0RUSU1FT1VUIHwgU0RJT19JVF9SWE9WRVJSIHwgU0RJT19JVF9EQVRBRU5EIHwgU0RJT19GTEFHX1JYRklGT0hGIHwgU0RJT19JVF9TVEJJVEVSUikpOworI2Vsc2UgLyogU0RJT19TVEFfU1RCSVRFUlIgbm90IGRlZmluZWQgKi8KKyAgICBfX0hBTF9NTUNfRU5BQkxFX0lUKGhtbWMsIChTRElPX0lUX0RDUkNGQUlMIHwgU0RJT19JVF9EVElNRU9VVCB8IFNESU9fSVRfUlhPVkVSUiB8IFNESU9fSVRfREFUQUVORCB8IFNESU9fRkxBR19SWEZJRk9IRikpOworI2VuZGlmIC8qIFNESU9fU1RBX1NUQklURVJSICovCisKKyAgICBpZiAoKGhtbWMtPk1tY0NhcmQuQ2FyZFR5cGUpICE9IE1NQ19ISUdIX0NBUEFDSVRZX0NBUkQpCiAgICAgewotICAgICAgQmxvY2tBZGQgKj0gNTEyVTsKKyAgICAgIGFkZCAqPSA1MTJVOwogICAgIH0KLSAgICAKLSAgICAvKiBDb25maWd1cmUgdGhlIE1NQyBEUFNNIChEYXRhIFBhdGggU3RhdGUgTWFjaGluZSkgKi8gCi0gICAgY29uZmlnLkRhdGFUaW1lT3V0ICAgPSBTRE1NQ19EQVRBVElNRU9VVDsKLSAgICBjb25maWcuRGF0YUxlbmd0aCAgICA9IEJMT0NLU0laRSAqIE51bWJlck9mQmxvY2tzOwotICAgIGNvbmZpZy5EYXRhQmxvY2tTaXplID0gU0RJT19EQVRBQkxPQ0tfU0laRV81MTJCOwotICAgIGNvbmZpZy5UcmFuc2ZlckRpciAgID0gU0RJT19UUkFOU0ZFUl9ESVJfVE9fU0RJTzsKLSAgICBjb25maWcuVHJhbnNmZXJNb2RlICA9IFNESU9fVFJBTlNGRVJfTU9ERV9CTE9DSzsKLSAgICBjb25maWcuRFBTTSAgICAgICAgICA9IFNESU9fRFBTTV9FTkFCTEU7Ci0gICAgU0RJT19Db25maWdEYXRhKGhtbWMtPkluc3RhbmNlLCAmY29uZmlnKTsKLSAgICAKLSAgICAvKiBTZXQgQmxvY2sgU2l6ZSBmb3IgQ2FyZCAqLyAKLSAgICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kQmxvY2tMZW5ndGgoaG1tYy0+SW5zdGFuY2UsIEJMT0NLU0laRSk7CisKKyAgICAvKiBTZXQgQmxvY2sgU2l6ZSBmb3IgQ2FyZCAqLworICAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRCbG9ja0xlbmd0aChobW1jLT5JbnN0YW5jZSwgTU1DX0JMT0NLU0laRSk7CiAgICAgaWYoZXJyb3JzdGF0ZSAhPSBIQUxfTU1DX0VSUk9SX05PTkUpCiAgICAgewogICAgICAgLyogQ2xlYXIgYWxsIHRoZSBzdGF0aWMgZmxhZ3MgKi8KLSAgICAgIF9fSEFMX01NQ19DTEVBUl9GTEFHKGhtbWMsIFNESU9fU1RBVElDX0ZMQUdTKTsgCisgICAgICBfX0hBTF9NTUNfQ0xFQVJfRkxBRyhobW1jLCBTRElPX1NUQVRJQ19GTEFHUyk7CiAgICAgICBobW1jLT5FcnJvckNvZGUgfD0gZXJyb3JzdGF0ZTsKICAgICAgIGhtbWMtPlN0YXRlID0gSEFMX01NQ19TVEFURV9SRUFEWTsKICAgICAgIHJldHVybiBIQUxfRVJST1I7CiAgICAgfQogCisgICAgLyogQ29uZmlndXJlIHRoZSBNTUMgRFBTTSAoRGF0YSBQYXRoIFN0YXRlIE1hY2hpbmUpICovCisgICAgY29uZmlnLkRhdGFUaW1lT3V0ICAgPSBTRE1NQ19EQVRBVElNRU9VVDsKKyAgICBjb25maWcuRGF0YUxlbmd0aCAgICA9IE1NQ19CTE9DS1NJWkUgKiBOdW1iZXJPZkJsb2NrczsKKyAgICBjb25maWcuRGF0YUJsb2NrU2l6ZSA9IFNESU9fREFUQUJMT0NLX1NJWkVfNTEyQjsKKyAgICBjb25maWcuVHJhbnNmZXJEaXIgICA9IFNESU9fVFJBTlNGRVJfRElSX1RPX1NESU87CisgICAgY29uZmlnLlRyYW5zZmVyTW9kZSAgPSBTRElPX1RSQU5TRkVSX01PREVfQkxPQ0s7CisgICAgY29uZmlnLkRQU00gICAgICAgICAgPSBTRElPX0RQU01fRU5BQkxFOworICAgICh2b2lkKVNESU9fQ29uZmlnRGF0YShobW1jLT5JbnN0YW5jZSwgJmNvbmZpZyk7CisKICAgICAvKiBSZWFkIEJsb2NrcyBpbiBJVCBtb2RlICovCiAgICAgaWYoTnVtYmVyT2ZCbG9ja3MgPiAxVSkKICAgICB7CiAgICAgICBobW1jLT5Db250ZXh0ID0gKE1NQ19DT05URVhUX1JFQURfTVVMVElQTEVfQkxPQ0sgfCBNTUNfQ09OVEVYVF9JVCk7Ci0gICAgICAKKwogICAgICAgLyogUmVhZCBNdWx0aSBCbG9jayBjb21tYW5kICovCi0gICAgICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kUmVhZE11bHRpQmxvY2soaG1tYy0+SW5zdGFuY2UsIEJsb2NrQWRkKTsKKyAgICAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRSZWFkTXVsdGlCbG9jayhobW1jLT5JbnN0YW5jZSwgYWRkKTsKICAgICB9CiAgICAgZWxzZQogICAgIHsKICAgICAgIGhtbWMtPkNvbnRleHQgPSAoTU1DX0NPTlRFWFRfUkVBRF9TSU5HTEVfQkxPQ0sgfCBNTUNfQ09OVEVYVF9JVCk7Ci0gICAgICAKKwogICAgICAgLyogUmVhZCBTaW5nbGUgQmxvY2sgY29tbWFuZCAqLwotICAgICAgZXJyb3JzdGF0ZSA9IFNETU1DX0NtZFJlYWRTaW5nbGVCbG9jayhobW1jLT5JbnN0YW5jZSwgQmxvY2tBZGQpOworICAgICAgZXJyb3JzdGF0ZSA9IFNETU1DX0NtZFJlYWRTaW5nbGVCbG9jayhobW1jLT5JbnN0YW5jZSwgYWRkKTsKICAgICB9CisKICAgICBpZihlcnJvcnN0YXRlICE9IEhBTF9NTUNfRVJST1JfTk9ORSkKICAgICB7CiAgICAgICAvKiBDbGVhciBhbGwgdGhlIHN0YXRpYyBmbGFncyAqLwotICAgICAgX19IQUxfTU1DX0NMRUFSX0ZMQUcoaG1tYywgU0RJT19TVEFUSUNfRkxBR1MpOyAKKyAgICAgIF9fSEFMX01NQ19DTEVBUl9GTEFHKGhtbWMsIFNESU9fU1RBVElDX0ZMQUdTKTsKICAgICAgIGhtbWMtPkVycm9yQ29kZSB8PSBlcnJvcnN0YXRlOwogICAgICAgaG1tYy0+U3RhdGUgPSBIQUxfTU1DX1NUQVRFX1JFQURZOwogICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICB9Ci0gICAgCisKICAgICByZXR1cm4gSEFMX09LOwogICB9CiAgIGVsc2UKQEAgLTk5OSw5OSArMTA1MCwxMDMgQEAKIH0KIAogLyoqCi0gICogQGJyaWVmICBXcml0ZXMgYmxvY2socykgdG8gYSBzcGVjaWZpZWQgYWRkcmVzcyBpbiBhIGNhcmQuIFRoZSBEYXRhIHRyYW5zZmVyIAotICAqICAgICAgICAgaXMgbWFuYWdlZCBpbiBpbnRlcnJ1cHQgbW9kZS4gCisgICogQGJyaWVmICBXcml0ZXMgYmxvY2socykgdG8gYSBzcGVjaWZpZWQgYWRkcmVzcyBpbiBhIGNhcmQuIFRoZSBEYXRhIHRyYW5zZmVyCisgICogICAgICAgICBpcyBtYW5hZ2VkIGluIGludGVycnVwdCBtb2RlLgogICAqIEBub3RlICAgVGhpcyBBUEkgc2hvdWxkIGJlIGZvbGxvd2VkIGJ5IGEgY2hlY2sgb24gdGhlIGNhcmQgc3RhdGUgdGhyb3VnaAogICAqICAgICAgICAgSEFMX01NQ19HZXRDYXJkU3RhdGUoKS4KLSAgKiBAbm90ZSAgIFlvdSBjb3VsZCBhbHNvIGNoZWNrIHRoZSBJVCB0cmFuc2ZlciBwcm9jZXNzIHRocm91Z2ggdGhlIE1NQyBUeCAKLSAgKiAgICAgICAgIGludGVycnVwdCBldmVudC4gCi0gICogQHBhcmFtICBobW1jIFBvaW50ZXIgdG8gTU1DIGhhbmRsZQotICAqIEBwYXJhbSAgcERhdGEgUG9pbnRlciB0byB0aGUgYnVmZmVyIHRoYXQgd2lsbCBjb250YWluIHRoZSBkYXRhIHRvIHRyYW5zbWl0Ci0gICogQHBhcmFtICBCbG9ja0FkZCBCbG9jayBBZGRyZXNzIHdoZXJlIGRhdGEgd2lsbCBiZSB3cml0dGVuICAgIAotICAqIEBwYXJhbSAgTnVtYmVyT2ZCbG9ja3MgTnVtYmVyIG9mIGJsb2NrcyB0byB3cml0ZQorICAqIEBub3RlICAgWW91IGNvdWxkIGFsc28gY2hlY2sgdGhlIElUIHRyYW5zZmVyIHByb2Nlc3MgdGhyb3VnaCB0aGUgTU1DIFR4CisgICogICAgICAgICBpbnRlcnJ1cHQgZXZlbnQuCisgICogQHBhcmFtICBobW1jOiBQb2ludGVyIHRvIE1NQyBoYW5kbGUKKyAgKiBAcGFyYW0gIHBEYXRhOiBQb2ludGVyIHRvIHRoZSBidWZmZXIgdGhhdCB3aWxsIGNvbnRhaW4gdGhlIGRhdGEgdG8gdHJhbnNtaXQKKyAgKiBAcGFyYW0gIEJsb2NrQWRkOiBCbG9jayBBZGRyZXNzIHdoZXJlIGRhdGEgd2lsbCBiZSB3cml0dGVuCisgICogQHBhcmFtICBOdW1iZXJPZkJsb2NrczogTnVtYmVyIG9mIGJsb2NrcyB0byB3cml0ZQogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX01NQ19Xcml0ZUJsb2Nrc19JVChNTUNfSGFuZGxlVHlwZURlZiAqaG1tYywgdWludDhfdCAqcERhdGEsIHVpbnQzMl90IEJsb2NrQWRkLCB1aW50MzJfdCBOdW1iZXJPZkJsb2NrcykKIHsKICAgU0RJT19EYXRhSW5pdFR5cGVEZWYgY29uZmlnOwotICB1aW50MzJfdCBlcnJvcnN0YXRlID0gSEFMX01NQ19FUlJPUl9OT05FOwotICAKKyAgdWludDMyX3QgZXJyb3JzdGF0ZTsKKyAgdWludDMyX3QgYWRkID0gQmxvY2tBZGQ7CisKICAgaWYoTlVMTCA9PSBwRGF0YSkKICAgewogICAgIGhtbWMtPkVycm9yQ29kZSB8PSBIQUxfTU1DX0VSUk9SX1BBUkFNOwogICAgIHJldHVybiBIQUxfRVJST1I7CiAgIH0KLSAgCisKICAgaWYoaG1tYy0+U3RhdGUgPT0gSEFMX01NQ19TVEFURV9SRUFEWSkKICAgewotICAgIGhtbWMtPkVycm9yQ29kZSA9IEhBTF9ETUFfRVJST1JfTk9ORTsKLSAgICAKKyAgICBobW1jLT5FcnJvckNvZGUgPSBIQUxfTU1DX0VSUk9SX05PTkU7CisKICAgICBpZigoQmxvY2tBZGQgKyBOdW1iZXJPZkJsb2NrcykgPiAoaG1tYy0+TW1jQ2FyZC5Mb2dCbG9ja05icikpCiAgICAgewogICAgICAgaG1tYy0+RXJyb3JDb2RlIHw9IEhBTF9NTUNfRVJST1JfQUREUl9PVVRfT0ZfUkFOR0U7CiAgICAgICByZXR1cm4gSEFMX0VSUk9SOwogICAgIH0KLSAgICAKKwogICAgIGhtbWMtPlN0YXRlID0gSEFMX01NQ19TVEFURV9CVVNZOwotICAgIAorCiAgICAgLyogSW5pdGlhbGl6ZSBkYXRhIGNvbnRyb2wgcmVnaXN0ZXIgKi8KICAgICBobW1jLT5JbnN0YW5jZS0+RENUUkwgPSAwVTsKLSAgCi0gICAgaG1tYy0+cFR4QnVmZlB0ciA9ICh1aW50MzJfdCAqKXBEYXRhOwotICAgIGhtbWMtPlR4WGZlclNpemUgPSBCTE9DS1NJWkUgKiBOdW1iZXJPZkJsb2NrczsKLSAgICAKKworICAgIGhtbWMtPnBUeEJ1ZmZQdHIgPSBwRGF0YTsKKyAgICBobW1jLT5UeFhmZXJTaXplID0gTU1DX0JMT0NLU0laRSAqIE51bWJlck9mQmxvY2tzOworCiAgICAgLyogRW5hYmxlIHRyYW5zZmVyIGludGVycnVwdHMgKi8KLSAgICBfX0hBTF9NTUNfRU5BQkxFX0lUKGhtbWMsIChTRElPX0lUX0RDUkNGQUlMIHwgU0RJT19JVF9EVElNRU9VVCB8IFNESU9fSVRfVFhVTkRFUlIgfCBTRElPX0lUX0RBVEFFTkQgfCBTRElPX0ZMQUdfVFhGSUZPSEUpKTsgCi0gICAgCi0gICAgLyogQ2hlY2sgdGhlIENhcmQgY2FwYWNpdHkgaW4gdGVybSBvZiBMb2dpY2FsIG51bWJlciBvZiBibG9ja3MgKi8KLSAgICBpZiAoKGhtbWMtPk1tY0NhcmQuTG9nQmxvY2tOYnIpIDwgQ0FQQUNJVFkpCisjaWYgZGVmaW5lZChTRElPX1NUQV9TVEJJVEVSUikKKyAgICBfX0hBTF9NTUNfRU5BQkxFX0lUKGhtbWMsIChTRElPX0lUX0RDUkNGQUlMIHwgU0RJT19JVF9EVElNRU9VVCB8IFNESU9fSVRfVFhVTkRFUlIgfCBTRElPX0lUX0RBVEFFTkQgfCBTRElPX0ZMQUdfVFhGSUZPSEUgfCBTRElPX0lUX1NUQklURVJSKSk7CisjZWxzZSAvKiBTRElPX1NUQV9TVEJJVEVSUiBub3QgZGVmaW5lZCAqLworICAgIF9fSEFMX01NQ19FTkFCTEVfSVQoaG1tYywgKFNESU9fSVRfRENSQ0ZBSUwgfCBTRElPX0lUX0RUSU1FT1VUIHwgU0RJT19JVF9UWFVOREVSUiB8IFNESU9fSVRfREFUQUVORCB8IFNESU9fRkxBR19UWEZJRk9IRSkpOworI2VuZGlmIC8qIFNESU9fU1RBX1NUQklURVJSICovCisKKyAgICBpZiAoKGhtbWMtPk1tY0NhcmQuQ2FyZFR5cGUpICE9IE1NQ19ISUdIX0NBUEFDSVRZX0NBUkQpCiAgICAgewotICAgICAgQmxvY2tBZGQgKj0gNTEyVTsKKyAgICAgIGFkZCAqPSA1MTJVOwogICAgIH0KLSAgICAKLSAgICAvKiBTZXQgQmxvY2sgU2l6ZSBmb3IgQ2FyZCAqLyAKLSAgICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kQmxvY2tMZW5ndGgoaG1tYy0+SW5zdGFuY2UsIEJMT0NLU0laRSk7CisKKyAgICAvKiBTZXQgQmxvY2sgU2l6ZSBmb3IgQ2FyZCAqLworICAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRCbG9ja0xlbmd0aChobW1jLT5JbnN0YW5jZSwgTU1DX0JMT0NLU0laRSk7CiAgICAgaWYoZXJyb3JzdGF0ZSAhPSBIQUxfTU1DX0VSUk9SX05PTkUpCiAgICAgewogICAgICAgLyogQ2xlYXIgYWxsIHRoZSBzdGF0aWMgZmxhZ3MgKi8KLSAgICAgIF9fSEFMX01NQ19DTEVBUl9GTEFHKGhtbWMsIFNESU9fU1RBVElDX0ZMQUdTKTsgCisgICAgICBfX0hBTF9NTUNfQ0xFQVJfRkxBRyhobW1jLCBTRElPX1NUQVRJQ19GTEFHUyk7CiAgICAgICBobW1jLT5FcnJvckNvZGUgfD0gZXJyb3JzdGF0ZTsKICAgICAgIGhtbWMtPlN0YXRlID0gSEFMX01NQ19TVEFURV9SRUFEWTsKICAgICAgIHJldHVybiBIQUxfRVJST1I7CiAgICAgfQotICAgIAorCiAgICAgLyogV3JpdGUgQmxvY2tzIGluIFBvbGxpbmcgbW9kZSAqLwogICAgIGlmKE51bWJlck9mQmxvY2tzID4gMVUpCiAgICAgewogICAgICAgaG1tYy0+Q29udGV4dCA9IChNTUNfQ09OVEVYVF9XUklURV9NVUxUSVBMRV9CTE9DS3wgTU1DX0NPTlRFWFRfSVQpOwotICAgICAgCi0gICAgICAvKiBXcml0ZSBNdWx0aSBCbG9jayBjb21tYW5kICovIAotICAgICAgZXJyb3JzdGF0ZSA9IFNETU1DX0NtZFdyaXRlTXVsdGlCbG9jayhobW1jLT5JbnN0YW5jZSwgQmxvY2tBZGQpOworCisgICAgICAvKiBXcml0ZSBNdWx0aSBCbG9jayBjb21tYW5kICovCisgICAgICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kV3JpdGVNdWx0aUJsb2NrKGhtbWMtPkluc3RhbmNlLCBhZGQpOwogICAgIH0KICAgICBlbHNlCiAgICAgewogICAgICAgaG1tYy0+Q29udGV4dCA9IChNTUNfQ09OVEVYVF9XUklURV9TSU5HTEVfQkxPQ0sgfCBNTUNfQ09OVEVYVF9JVCk7Ci0gICAgICAKLSAgICAgIC8qIFdyaXRlIFNpbmdsZSBCbG9jayBjb21tYW5kICovIAotICAgICAgZXJyb3JzdGF0ZSA9IFNETU1DX0NtZFdyaXRlU2luZ2xlQmxvY2soaG1tYy0+SW5zdGFuY2UsIEJsb2NrQWRkKTsKKworICAgICAgLyogV3JpdGUgU2luZ2xlIEJsb2NrIGNvbW1hbmQgKi8KKyAgICAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRXcml0ZVNpbmdsZUJsb2NrKGhtbWMtPkluc3RhbmNlLCBhZGQpOwogICAgIH0KICAgICBpZihlcnJvcnN0YXRlICE9IEhBTF9NTUNfRVJST1JfTk9ORSkKICAgICB7CiAgICAgICAvKiBDbGVhciBhbGwgdGhlIHN0YXRpYyBmbGFncyAqLwotICAgICAgX19IQUxfTU1DX0NMRUFSX0ZMQUcoaG1tYywgU0RJT19TVEFUSUNfRkxBR1MpOyAKKyAgICAgIF9fSEFMX01NQ19DTEVBUl9GTEFHKGhtbWMsIFNESU9fU1RBVElDX0ZMQUdTKTsKICAgICAgIGhtbWMtPkVycm9yQ29kZSB8PSBlcnJvcnN0YXRlOwogICAgICAgaG1tYy0+U3RhdGUgPSBIQUxfTU1DX1NUQVRFX1JFQURZOwogICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICB9Ci0gICAgCisKICAgICAvKiBDb25maWd1cmUgdGhlIE1NQyBEUFNNIChEYXRhIFBhdGggU3RhdGUgTWFjaGluZSkgKi8gCiAgICAgY29uZmlnLkRhdGFUaW1lT3V0ICAgPSBTRE1NQ19EQVRBVElNRU9VVDsKLSAgICBjb25maWcuRGF0YUxlbmd0aCAgICA9IEJMT0NLU0laRSAqIE51bWJlck9mQmxvY2tzOworICAgIGNvbmZpZy5EYXRhTGVuZ3RoICAgID0gTU1DX0JMT0NLU0laRSAqIE51bWJlck9mQmxvY2tzOwogICAgIGNvbmZpZy5EYXRhQmxvY2tTaXplID0gU0RJT19EQVRBQkxPQ0tfU0laRV81MTJCOwogICAgIGNvbmZpZy5UcmFuc2ZlckRpciAgID0gU0RJT19UUkFOU0ZFUl9ESVJfVE9fQ0FSRDsKICAgICBjb25maWcuVHJhbnNmZXJNb2RlICA9IFNESU9fVFJBTlNGRVJfTU9ERV9CTE9DSzsKICAgICBjb25maWcuRFBTTSAgICAgICAgICA9IFNESU9fRFBTTV9FTkFCTEU7Ci0gICAgU0RJT19Db25maWdEYXRhKGhtbWMtPkluc3RhbmNlLCAmY29uZmlnKTsKKyAgICAodm9pZClTRElPX0NvbmZpZ0RhdGEoaG1tYy0+SW5zdGFuY2UsICZjb25maWcpOwogICAgIAogICAgIHJldHVybiBIQUxfT0s7CiAgIH0KQEAgLTExMDIsMTE2ICsxMTU3LDEyNiBAQAogfQogCiAvKioKLSAgKiBAYnJpZWYgIFJlYWRzIGJsb2NrKHMpIGZyb20gYSBzcGVjaWZpZWQgYWRkcmVzcyBpbiBhIGNhcmQuIFRoZSBEYXRhIHRyYW5zZmVyIAotICAqICAgICAgICAgaXMgbWFuYWdlZCBieSBETUEgbW9kZS4gCisgICogQGJyaWVmICBSZWFkcyBibG9jayhzKSBmcm9tIGEgc3BlY2lmaWVkIGFkZHJlc3MgaW4gYSBjYXJkLiBUaGUgRGF0YSB0cmFuc2ZlcgorICAqICAgICAgICAgaXMgbWFuYWdlZCBieSBETUEgbW9kZS4KICAgKiBAbm90ZSAgIFRoaXMgQVBJIHNob3VsZCBiZSBmb2xsb3dlZCBieSBhIGNoZWNrIG9uIHRoZSBjYXJkIHN0YXRlIHRocm91Z2gKICAgKiAgICAgICAgIEhBTF9NTUNfR2V0Q2FyZFN0YXRlKCkuCi0gICogQG5vdGUgICBZb3UgY291bGQgYWxzbyBjaGVjayB0aGUgRE1BIHRyYW5zZmVyIHByb2Nlc3MgdGhyb3VnaCB0aGUgTU1DIFJ4IAorICAqIEBub3RlICAgWW91IGNvdWxkIGFsc28gY2hlY2sgdGhlIERNQSB0cmFuc2ZlciBwcm9jZXNzIHRocm91Z2ggdGhlIE1NQyBSeAogICAqICAgICAgICAgaW50ZXJydXB0IGV2ZW50LgotICAqIEBwYXJhbSAgaG1tYyBQb2ludGVyIE1NQyBoYW5kbGUgICAgICAgICAgICAgICAgIAotICAqIEBwYXJhbSAgcERhdGEgUG9pbnRlciB0byB0aGUgYnVmZmVyIHRoYXQgd2lsbCBjb250YWluIHRoZSByZWNlaXZlZCBkYXRhCi0gICogQHBhcmFtICBCbG9ja0FkZCBCbG9jayBBZGRyZXNzIGZyb20gd2hlcmUgZGF0YSBpcyB0byBiZSByZWFkICAKLSAgKiBAcGFyYW0gIE51bWJlck9mQmxvY2tzIE51bWJlciBvZiBibG9ja3MgdG8gcmVhZC4KKyAgKiBAcGFyYW0gIGhtbWM6IFBvaW50ZXIgTU1DIGhhbmRsZQorICAqIEBwYXJhbSAgcERhdGE6IFBvaW50ZXIgdG8gdGhlIGJ1ZmZlciB0aGF0IHdpbGwgY29udGFpbiB0aGUgcmVjZWl2ZWQgZGF0YQorICAqIEBwYXJhbSAgQmxvY2tBZGQ6IEJsb2NrIEFkZHJlc3MgZnJvbSB3aGVyZSBkYXRhIGlzIHRvIGJlIHJlYWQKKyAgKiBAcGFyYW0gIE51bWJlck9mQmxvY2tzOiBOdW1iZXIgb2YgYmxvY2tzIHRvIHJlYWQuCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfTU1DX1JlYWRCbG9ja3NfRE1BKE1NQ19IYW5kbGVUeXBlRGVmICpobW1jLCB1aW50OF90ICpwRGF0YSwgdWludDMyX3QgQmxvY2tBZGQsIHVpbnQzMl90IE51bWJlck9mQmxvY2tzKQogewogICBTRElPX0RhdGFJbml0VHlwZURlZiBjb25maWc7Ci0gIHVpbnQzMl90IGVycm9yc3RhdGUgPSBIQUxfTU1DX0VSUk9SX05PTkU7Ci0gIAorICB1aW50MzJfdCBlcnJvcnN0YXRlOworICB1aW50MzJfdCBhZGQgPSBCbG9ja0FkZDsKKwogICBpZihOVUxMID09IHBEYXRhKQogICB7CiAgICAgaG1tYy0+RXJyb3JDb2RlIHw9IEhBTF9NTUNfRVJST1JfUEFSQU07CiAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgfQotICAKKwogICBpZihobW1jLT5TdGF0ZSA9PSBIQUxfTU1DX1NUQVRFX1JFQURZKQogICB7CiAgICAgaG1tYy0+RXJyb3JDb2RlID0gSEFMX0RNQV9FUlJPUl9OT05FOwotICAgIAorCiAgICAgaWYoKEJsb2NrQWRkICsgTnVtYmVyT2ZCbG9ja3MpID4gKGhtbWMtPk1tY0NhcmQuTG9nQmxvY2tOYnIpKQogICAgIHsKICAgICAgIGhtbWMtPkVycm9yQ29kZSB8PSBIQUxfTU1DX0VSUk9SX0FERFJfT1VUX09GX1JBTkdFOwogICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICB9Ci0gICAgCisKICAgICBobW1jLT5TdGF0ZSA9IEhBTF9NTUNfU1RBVEVfQlVTWTsKLSAgICAKKwogICAgIC8qIEluaXRpYWxpemUgZGF0YSBjb250cm9sIHJlZ2lzdGVyICovCiAgICAgaG1tYy0+SW5zdGFuY2UtPkRDVFJMID0gMFU7Ci0gICAgCi0jaWZkZWYgU0RJT19TVEFfU1RCSVRFUlIKKworI2lmIGRlZmluZWQoU0RJT19TVEFfU1RCSVRFUlIpCiAgICAgX19IQUxfTU1DX0VOQUJMRV9JVChobW1jLCAoU0RJT19JVF9EQ1JDRkFJTCB8IFNESU9fSVRfRFRJTUVPVVQgfCBTRElPX0lUX1JYT1ZFUlIgfCBTRElPX0lUX0RBVEFFTkQgfCBTRElPX0lUX1NUQklURVJSKSk7CiAjZWxzZSAvKiBTRElPX1NUQV9TVEJJVEVSUiBub3QgZGVmaW5lZCAqLwogICAgIF9fSEFMX01NQ19FTkFCTEVfSVQoaG1tYywgKFNESU9fSVRfRENSQ0ZBSUwgfCBTRElPX0lUX0RUSU1FT1VUIHwgU0RJT19JVF9SWE9WRVJSIHwgU0RJT19JVF9EQVRBRU5EKSk7CiAjZW5kaWYgLyogU0RJT19TVEFfU1RCSVRFUlIgKi8KLSAgICAKKwogICAgIC8qIFNldCB0aGUgRE1BIHRyYW5zZmVyIGNvbXBsZXRlIGNhbGxiYWNrICovCiAgICAgaG1tYy0+aGRtYXJ4LT5YZmVyQ3BsdENhbGxiYWNrID0gTU1DX0RNQVJlY2VpdmVDcGx0OwotICAgIAorCiAgICAgLyogU2V0IHRoZSBETUEgZXJyb3IgY2FsbGJhY2sgKi8KICAgICBobW1jLT5oZG1hcngtPlhmZXJFcnJvckNhbGxiYWNrID0gTU1DX0RNQUVycm9yOwotICAgIAorCiAgICAgLyogU2V0IHRoZSBETUEgQWJvcnQgY2FsbGJhY2sgKi8KICAgICBobW1jLT5oZG1hcngtPlhmZXJBYm9ydENhbGxiYWNrID0gTlVMTDsKLSAgICAKLSAgICAvKiBFbmFibGUgdGhlIERNQSBDaGFubmVsICovCi0gICAgSEFMX0RNQV9TdGFydF9JVChobW1jLT5oZG1hcngsICh1aW50MzJfdCkmaG1tYy0+SW5zdGFuY2UtPkZJRk8sICh1aW50MzJfdClwRGF0YSwgKHVpbnQzMl90KShCTE9DS1NJWkUgKiBOdW1iZXJPZkJsb2NrcykvNCk7Ci0gICAgCi0gICAgLyogRW5hYmxlIE1NQyBETUEgdHJhbnNmZXIgKi8KLSAgICBfX0hBTF9NTUNfRE1BX0VOQUJMRShobW1jKTsKLSAgICAKLSAgICAvKiBDaGVjayB0aGUgQ2FyZCBjYXBhY2l0eSBpbiB0ZXJtIG9mIExvZ2ljYWwgbnVtYmVyIG9mIGJsb2NrcyAqLwotICAgIGlmICgoaG1tYy0+TW1jQ2FyZC5Mb2dCbG9ja05icikgPCBDQVBBQ0lUWSkKKworICAgIGlmICgoaG1tYy0+TW1jQ2FyZC5DYXJkVHlwZSkgIT0gTU1DX0hJR0hfQ0FQQUNJVFlfQ0FSRCkKICAgICB7Ci0gICAgICBCbG9ja0FkZCAqPSA1MTJVOworICAgICAgYWRkICo9IDUxMlU7CiAgICAgfQotICAgIAotICAgIC8qIENvbmZpZ3VyZSB0aGUgTU1DIERQU00gKERhdGEgUGF0aCBTdGF0ZSBNYWNoaW5lKSAqLyAKLSAgICBjb25maWcuRGF0YVRpbWVPdXQgICA9IFNETU1DX0RBVEFUSU1FT1VUOwotICAgIGNvbmZpZy5EYXRhTGVuZ3RoICAgID0gQkxPQ0tTSVpFICogTnVtYmVyT2ZCbG9ja3M7Ci0gICAgY29uZmlnLkRhdGFCbG9ja1NpemUgPSBTRElPX0RBVEFCTE9DS19TSVpFXzUxMkI7Ci0gICAgY29uZmlnLlRyYW5zZmVyRGlyICAgPSBTRElPX1RSQU5TRkVSX0RJUl9UT19TRElPOwotICAgIGNvbmZpZy5UcmFuc2Zlck1vZGUgID0gU0RJT19UUkFOU0ZFUl9NT0RFX0JMT0NLOwotICAgIGNvbmZpZy5EUFNNICAgICAgICAgID0gU0RJT19EUFNNX0VOQUJMRTsKLSAgICBTRElPX0NvbmZpZ0RhdGEoaG1tYy0+SW5zdGFuY2UsICZjb25maWcpOwogCiAgICAgLyogU2V0IEJsb2NrIFNpemUgZm9yIENhcmQgKi8gCi0gICAgZXJyb3JzdGF0ZSA9IFNETU1DX0NtZEJsb2NrTGVuZ3RoKGhtbWMtPkluc3RhbmNlLCBCTE9DS1NJWkUpOworICAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRCbG9ja0xlbmd0aChobW1jLT5JbnN0YW5jZSwgTU1DX0JMT0NLU0laRSk7CiAgICAgaWYoZXJyb3JzdGF0ZSAhPSBIQUxfTU1DX0VSUk9SX05PTkUpCiAgICAgewogICAgICAgLyogQ2xlYXIgYWxsIHRoZSBzdGF0aWMgZmxhZ3MgKi8KICAgICAgIF9fSEFMX01NQ19DTEVBUl9GTEFHKGhtbWMsIFNESU9fU1RBVElDX0ZMQUdTKTsgCi0gICAgICBobW1jLT5FcnJvckNvZGUgfD0gZXJyb3JzdGF0ZTsKKyAgICAgIGhtbWMtPkVycm9yQ29kZSA9IGVycm9yc3RhdGU7CiAgICAgICBobW1jLT5TdGF0ZSA9IEhBTF9NTUNfU1RBVEVfUkVBRFk7CiAgICAgICByZXR1cm4gSEFMX0VSUk9SOwogICAgIH0KLSAgICAgICAgCi0gICAgLyogUmVhZCBCbG9ja3MgaW4gRE1BIG1vZGUgKi8KLSAgICBpZihOdW1iZXJPZkJsb2NrcyA+IDFVKQorCisgICAgLyogRW5hYmxlIHRoZSBETUEgQ2hhbm5lbCAqLworICAgIGlmKEhBTF9ETUFfU3RhcnRfSVQoaG1tYy0+aGRtYXJ4LCAodWludDMyX3QpJmhtbWMtPkluc3RhbmNlLT5GSUZPLCAodWludDMyX3QpcERhdGEsICh1aW50MzJfdCkoTU1DX0JMT0NLU0laRSAqIE51bWJlck9mQmxvY2tzKS80KSAhPSBIQUxfT0spCiAgICAgewotICAgICAgaG1tYy0+Q29udGV4dCA9IChNTUNfQ09OVEVYVF9SRUFEX01VTFRJUExFX0JMT0NLIHwgTU1DX0NPTlRFWFRfRE1BKTsKLSAgICAgIAotICAgICAgLyogUmVhZCBNdWx0aSBCbG9jayBjb21tYW5kICovIAotICAgICAgZXJyb3JzdGF0ZSA9IFNETU1DX0NtZFJlYWRNdWx0aUJsb2NrKGhtbWMtPkluc3RhbmNlLCBCbG9ja0FkZCk7CisgICAgICBfX0hBTF9NTUNfRElTQUJMRV9JVChobW1jLCAoU0RJT19JVF9EQ1JDRkFJTCB8IFNESU9fSVRfRFRJTUVPVVQgfCBTRElPX0lUX1JYT1ZFUlIgfCBTRElPX0lUX0RBVEFFTkQpKTsKKyAgICAgIF9fSEFMX01NQ19DTEVBUl9GTEFHKGhtbWMsIFNESU9fU1RBVElDX0ZMQUdTKTsKKyAgICAgIGhtbWMtPkVycm9yQ29kZSA9IEhBTF9NTUNfRVJST1JfRE1BOworICAgICAgaG1tYy0+U3RhdGUgPSBIQUxfTU1DX1NUQVRFX1JFQURZOworICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAgIGhtbWMtPkNvbnRleHQgPSAoTU1DX0NPTlRFWFRfUkVBRF9TSU5HTEVfQkxPQ0sgfCBNTUNfQ09OVEVYVF9ETUEpOwotICAgICAgCi0gICAgICAvKiBSZWFkIFNpbmdsZSBCbG9jayBjb21tYW5kICovIAotICAgICAgZXJyb3JzdGF0ZSA9IFNETU1DX0NtZFJlYWRTaW5nbGVCbG9jayhobW1jLT5JbnN0YW5jZSwgQmxvY2tBZGQpOwotICAgIH0KLSAgICBpZihlcnJvcnN0YXRlICE9IEhBTF9NTUNfRVJST1JfTk9ORSkKLSAgICB7Ci0gICAgICAvKiBDbGVhciBhbGwgdGhlIHN0YXRpYyBmbGFncyAqLwotICAgICAgX19IQUxfTU1DX0NMRUFSX0ZMQUcoaG1tYywgU0RJT19TVEFUSUNfRkxBR1MpOyAKLSAgICAgIGhtbWMtPkVycm9yQ29kZSB8PSBlcnJvcnN0YXRlOwotICAgICAgaG1tYy0+U3RhdGUgPSBIQUxfTU1DX1NUQVRFX1JFQURZOwotICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKLSAgICB9CisgICAgICAvKiBFbmFibGUgTU1DIERNQSB0cmFuc2ZlciAqLworICAgICAgX19IQUxfTU1DX0RNQV9FTkFCTEUoaG1tYyk7CiAKLSAgICByZXR1cm4gSEFMX09LOworICAgICAgLyogQ29uZmlndXJlIHRoZSBNTUMgRFBTTSAoRGF0YSBQYXRoIFN0YXRlIE1hY2hpbmUpICovCisgICAgICBjb25maWcuRGF0YVRpbWVPdXQgICA9IFNETU1DX0RBVEFUSU1FT1VUOworICAgICAgY29uZmlnLkRhdGFMZW5ndGggICAgPSBNTUNfQkxPQ0tTSVpFICogTnVtYmVyT2ZCbG9ja3M7CisgICAgICBjb25maWcuRGF0YUJsb2NrU2l6ZSA9IFNESU9fREFUQUJMT0NLX1NJWkVfNTEyQjsKKyAgICAgIGNvbmZpZy5UcmFuc2ZlckRpciAgID0gU0RJT19UUkFOU0ZFUl9ESVJfVE9fU0RJTzsKKyAgICAgIGNvbmZpZy5UcmFuc2Zlck1vZGUgID0gU0RJT19UUkFOU0ZFUl9NT0RFX0JMT0NLOworICAgICAgY29uZmlnLkRQU00gICAgICAgICAgPSBTRElPX0RQU01fRU5BQkxFOworICAgICAgKHZvaWQpU0RJT19Db25maWdEYXRhKGhtbWMtPkluc3RhbmNlLCAmY29uZmlnKTsKKworICAgICAgLyogUmVhZCBCbG9ja3MgaW4gRE1BIG1vZGUgKi8KKyAgICAgIGlmKE51bWJlck9mQmxvY2tzID4gMVUpCisgICAgICB7CisgICAgICAgIGhtbWMtPkNvbnRleHQgPSAoTU1DX0NPTlRFWFRfUkVBRF9NVUxUSVBMRV9CTE9DSyB8IE1NQ19DT05URVhUX0RNQSk7CisKKyAgICAgICAgLyogUmVhZCBNdWx0aSBCbG9jayBjb21tYW5kICovCisgICAgICAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRSZWFkTXVsdGlCbG9jayhobW1jLT5JbnN0YW5jZSwgYWRkKTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgaG1tYy0+Q29udGV4dCA9IChNTUNfQ09OVEVYVF9SRUFEX1NJTkdMRV9CTE9DSyB8IE1NQ19DT05URVhUX0RNQSk7CisKKyAgICAgICAgLyogUmVhZCBTaW5nbGUgQmxvY2sgY29tbWFuZCAqLworICAgICAgICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kUmVhZFNpbmdsZUJsb2NrKGhtbWMtPkluc3RhbmNlLCBhZGQpOworICAgICAgfQorICAgICAgaWYoZXJyb3JzdGF0ZSAhPSBIQUxfTU1DX0VSUk9SX05PTkUpCisgICAgICB7CisgICAgICAgIC8qIENsZWFyIGFsbCB0aGUgc3RhdGljIGZsYWdzICovCisgICAgICAgIF9fSEFMX01NQ19DTEVBUl9GTEFHKGhtbWMsIFNESU9fU1RBVElDX0ZMQUdTKTsgCisgICAgICAgIF9fSEFMX01NQ19ESVNBQkxFX0lUKGhtbWMsIChTRElPX0lUX0RDUkNGQUlMIHwgU0RJT19JVF9EVElNRU9VVCB8IFNESU9fSVRfUlhPVkVSUiB8IFNESU9fSVRfREFUQUVORCkpOworICAgICAgICBobW1jLT5FcnJvckNvZGUgPSBlcnJvcnN0YXRlOworICAgICAgICBobW1jLT5TdGF0ZSA9IEhBTF9NTUNfU1RBVEVfUkVBRFk7CisgICAgICAgIHJldHVybiBIQUxfRVJST1I7CisgICAgICB9CisKKyAgICAgIHJldHVybiBIQUxfT0s7CisgICAgfQogICB9CiAgIGVsc2UKICAgewpAQCAtMTIyMCwxMTcgKzEyODUsMTI3IEBACiB9CiAKIC8qKgotICAqIEBicmllZiAgV3JpdGVzIGJsb2NrKHMpIHRvIGEgc3BlY2lmaWVkIGFkZHJlc3MgaW4gYSBjYXJkLiBUaGUgRGF0YSB0cmFuc2ZlciAKLSAgKiAgICAgICAgIGlzIG1hbmFnZWQgYnkgRE1BIG1vZGUuIAorICAqIEBicmllZiAgV3JpdGVzIGJsb2NrKHMpIHRvIGEgc3BlY2lmaWVkIGFkZHJlc3MgaW4gYSBjYXJkLiBUaGUgRGF0YSB0cmFuc2ZlcgorICAqICAgICAgICAgaXMgbWFuYWdlZCBieSBETUEgbW9kZS4KICAgKiBAbm90ZSAgIFRoaXMgQVBJIHNob3VsZCBiZSBmb2xsb3dlZCBieSBhIGNoZWNrIG9uIHRoZSBjYXJkIHN0YXRlIHRocm91Z2gKICAgKiAgICAgICAgIEhBTF9NTUNfR2V0Q2FyZFN0YXRlKCkuCi0gICogQG5vdGUgICBZb3UgY291bGQgYWxzbyBjaGVjayB0aGUgRE1BIHRyYW5zZmVyIHByb2Nlc3MgdGhyb3VnaCB0aGUgTU1DIFR4IAorICAqIEBub3RlICAgWW91IGNvdWxkIGFsc28gY2hlY2sgdGhlIERNQSB0cmFuc2ZlciBwcm9jZXNzIHRocm91Z2ggdGhlIE1NQyBUeAogICAqICAgICAgICAgaW50ZXJydXB0IGV2ZW50LgotICAqIEBwYXJhbSAgaG1tYyBQb2ludGVyIHRvIE1NQyBoYW5kbGUKLSAgKiBAcGFyYW0gIHBEYXRhIFBvaW50ZXIgdG8gdGhlIGJ1ZmZlciB0aGF0IHdpbGwgY29udGFpbiB0aGUgZGF0YSB0byB0cmFuc21pdAotICAqIEBwYXJhbSAgQmxvY2tBZGQgQmxvY2sgQWRkcmVzcyB3aGVyZSBkYXRhIHdpbGwgYmUgd3JpdHRlbiAgCi0gICogQHBhcmFtICBOdW1iZXJPZkJsb2NrcyBOdW1iZXIgb2YgYmxvY2tzIHRvIHdyaXRlCisgICogQHBhcmFtICBobW1jOiBQb2ludGVyIHRvIE1NQyBoYW5kbGUKKyAgKiBAcGFyYW0gIHBEYXRhOiBQb2ludGVyIHRvIHRoZSBidWZmZXIgdGhhdCB3aWxsIGNvbnRhaW4gdGhlIGRhdGEgdG8gdHJhbnNtaXQKKyAgKiBAcGFyYW0gIEJsb2NrQWRkOiBCbG9jayBBZGRyZXNzIHdoZXJlIGRhdGEgd2lsbCBiZSB3cml0dGVuCisgICogQHBhcmFtICBOdW1iZXJPZkJsb2NrczogTnVtYmVyIG9mIGJsb2NrcyB0byB3cml0ZQogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX01NQ19Xcml0ZUJsb2Nrc19ETUEoTU1DX0hhbmRsZVR5cGVEZWYgKmhtbWMsIHVpbnQ4X3QgKnBEYXRhLCB1aW50MzJfdCBCbG9ja0FkZCwgdWludDMyX3QgTnVtYmVyT2ZCbG9ja3MpCiB7CiAgIFNESU9fRGF0YUluaXRUeXBlRGVmIGNvbmZpZzsKLSAgdWludDMyX3QgZXJyb3JzdGF0ZSA9IEhBTF9NTUNfRVJST1JfTk9ORTsKLSAgCisgIHVpbnQzMl90IGVycm9yc3RhdGU7CisgIHVpbnQzMl90IGFkZCA9IEJsb2NrQWRkOworCiAgIGlmKE5VTEwgPT0gcERhdGEpCiAgIHsKICAgICBobW1jLT5FcnJvckNvZGUgfD0gSEFMX01NQ19FUlJPUl9QQVJBTTsKICAgICByZXR1cm4gSEFMX0VSUk9SOwogICB9Ci0gIAorCiAgIGlmKGhtbWMtPlN0YXRlID09IEhBTF9NTUNfU1RBVEVfUkVBRFkpCiAgIHsKLSAgICBobW1jLT5FcnJvckNvZGUgPSBIQUxfRE1BX0VSUk9SX05PTkU7Ci0gICAgCisgICAgaG1tYy0+RXJyb3JDb2RlID0gSEFMX01NQ19FUlJPUl9OT05FOworCiAgICAgaWYoKEJsb2NrQWRkICsgTnVtYmVyT2ZCbG9ja3MpID4gKGhtbWMtPk1tY0NhcmQuTG9nQmxvY2tOYnIpKQogICAgIHsKICAgICAgIGhtbWMtPkVycm9yQ29kZSB8PSBIQUxfTU1DX0VSUk9SX0FERFJfT1VUX09GX1JBTkdFOwogICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICB9Ci0gICAgCisKICAgICBobW1jLT5TdGF0ZSA9IEhBTF9NTUNfU1RBVEVfQlVTWTsKLSAgICAKKwogICAgIC8qIEluaXRpYWxpemUgZGF0YSBjb250cm9sIHJlZ2lzdGVyICovCiAgICAgaG1tYy0+SW5zdGFuY2UtPkRDVFJMID0gMFU7Ci0gICAgCisKICAgICAvKiBFbmFibGUgTU1DIEVycm9yIGludGVycnVwdHMgKi8KLSNpZmRlZiBTRElPX1NUQV9TVEJJVEVSUgotICAgIF9fSEFMX01NQ19FTkFCTEVfSVQoaG1tYywgKFNESU9fSVRfRENSQ0ZBSUwgfCBTRElPX0lUX0RUSU1FT1VUIHwgU0RJT19JVF9UWFVOREVSUiB8IFNESU9fSVRfU1RCSVRFUlIpKTsgICAgCisjaWYgZGVmaW5lZChTRElPX1NUQV9TVEJJVEVSUikKKwlfX0hBTF9NTUNfRU5BQkxFX0lUKGhtbWMsIChTRElPX0lUX0RDUkNGQUlMIHwgU0RJT19JVF9EVElNRU9VVCB8IFNESU9fSVRfVFhVTkRFUlIgfCBTRElPX0lUX1NUQklURVJSKSk7CiAjZWxzZSAvKiBTRElPX1NUQV9TVEJJVEVSUiBub3QgZGVmaW5lZCAqLwotICAgIF9fSEFMX01NQ19FTkFCTEVfSVQoaG1tYywgKFNESU9fSVRfRENSQ0ZBSUwgfCBTRElPX0lUX0RUSU1FT1VUIHwgU0RJT19JVF9UWFVOREVSUikpOyAgICAKLSNlbmRpZiAvKiBTRElPX1NUQV9TVEJJVEVSUiAqLwotICAgIAorCV9fSEFMX01NQ19FTkFCTEVfSVQoaG1tYywgKFNESU9fSVRfRENSQ0ZBSUwgfCBTRElPX0lUX0RUSU1FT1VUIHwgU0RJT19JVF9UWFVOREVSUikpOworI2VuZGlmIC8qIFNESU9fU1RBX1NUQklURVJSICovCQorCiAgICAgLyogU2V0IHRoZSBETUEgdHJhbnNmZXIgY29tcGxldGUgY2FsbGJhY2sgKi8KICAgICBobW1jLT5oZG1hdHgtPlhmZXJDcGx0Q2FsbGJhY2sgPSBNTUNfRE1BVHJhbnNtaXRDcGx0OwotICAgIAorCiAgICAgLyogU2V0IHRoZSBETUEgZXJyb3IgY2FsbGJhY2sgKi8KICAgICBobW1jLT5oZG1hdHgtPlhmZXJFcnJvckNhbGxiYWNrID0gTU1DX0RNQUVycm9yOwotICAgIAorCiAgICAgLyogU2V0IHRoZSBETUEgQWJvcnQgY2FsbGJhY2sgKi8KICAgICBobW1jLT5oZG1hdHgtPlhmZXJBYm9ydENhbGxiYWNrID0gTlVMTDsKLSAgICAKLSAgICAvKiBDaGVjayB0aGUgQ2FyZCBjYXBhY2l0eSBpbiB0ZXJtIG9mIExvZ2ljYWwgbnVtYmVyIG9mIGJsb2NrcyAqLwotICAgIGlmICgoaG1tYy0+TW1jQ2FyZC5Mb2dCbG9ja05icikgPCBDQVBBQ0lUWSkKKworICAgIGlmICgoaG1tYy0+TW1jQ2FyZC5DYXJkVHlwZSkgIT0gTU1DX0hJR0hfQ0FQQUNJVFlfQ0FSRCkKICAgICB7Ci0gICAgICBCbG9ja0FkZCAqPSA1MTJVOworICAgICAgYWRkICo9IDUxMlU7CiAgICAgfQotICAgIAotICAgIC8qIFNldCBCbG9jayBTaXplIGZvciBDYXJkICovIAotICAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRCbG9ja0xlbmd0aChobW1jLT5JbnN0YW5jZSwgQkxPQ0tTSVpFKTsKKworICAgIC8qIFNldCBCbG9jayBTaXplIGZvciBDYXJkICovCisgICAgZXJyb3JzdGF0ZSA9IFNETU1DX0NtZEJsb2NrTGVuZ3RoKGhtbWMtPkluc3RhbmNlLCBNTUNfQkxPQ0tTSVpFKTsKICAgICBpZihlcnJvcnN0YXRlICE9IEhBTF9NTUNfRVJST1JfTk9ORSkKICAgICB7CiAgICAgICAvKiBDbGVhciBhbGwgdGhlIHN0YXRpYyBmbGFncyAqLwotICAgICAgX19IQUxfTU1DX0NMRUFSX0ZMQUcoaG1tYywgU0RJT19TVEFUSUNfRkxBR1MpOyAKKyAgICAgIF9fSEFMX01NQ19DTEVBUl9GTEFHKGhtbWMsIFNESU9fU1RBVElDX0ZMQUdTKTsKICAgICAgIGhtbWMtPkVycm9yQ29kZSB8PSBlcnJvcnN0YXRlOwogICAgICAgaG1tYy0+U3RhdGUgPSBIQUxfTU1DX1NUQVRFX1JFQURZOwogICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICB9Ci0gICAgCisKICAgICAvKiBXcml0ZSBCbG9ja3MgaW4gUG9sbGluZyBtb2RlICovCiAgICAgaWYoTnVtYmVyT2ZCbG9ja3MgPiAxVSkKICAgICB7CiAgICAgICBobW1jLT5Db250ZXh0ID0gKE1NQ19DT05URVhUX1dSSVRFX01VTFRJUExFX0JMT0NLIHwgTU1DX0NPTlRFWFRfRE1BKTsKLSAgICAgIAotICAgICAgLyogV3JpdGUgTXVsdGkgQmxvY2sgY29tbWFuZCAqLyAKLSAgICAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRXcml0ZU11bHRpQmxvY2soaG1tYy0+SW5zdGFuY2UsIEJsb2NrQWRkKTsKKworICAgICAgLyogV3JpdGUgTXVsdGkgQmxvY2sgY29tbWFuZCAqLworICAgICAgZXJyb3JzdGF0ZSA9IFNETU1DX0NtZFdyaXRlTXVsdGlCbG9jayhobW1jLT5JbnN0YW5jZSwgYWRkKTsKICAgICB9CiAgICAgZWxzZQogICAgIHsKICAgICAgIGhtbWMtPkNvbnRleHQgPSAoTU1DX0NPTlRFWFRfV1JJVEVfU0lOR0xFX0JMT0NLIHwgTU1DX0NPTlRFWFRfRE1BKTsKLSAgICAgIAorCiAgICAgICAvKiBXcml0ZSBTaW5nbGUgQmxvY2sgY29tbWFuZCAqLwotICAgICAgZXJyb3JzdGF0ZSA9IFNETU1DX0NtZFdyaXRlU2luZ2xlQmxvY2soaG1tYy0+SW5zdGFuY2UsIEJsb2NrQWRkKTsKKyAgICAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRXcml0ZVNpbmdsZUJsb2NrKGhtbWMtPkluc3RhbmNlLCBhZGQpOwogICAgIH0KICAgICBpZihlcnJvcnN0YXRlICE9IEhBTF9NTUNfRVJST1JfTk9ORSkKICAgICB7CiAgICAgICAvKiBDbGVhciBhbGwgdGhlIHN0YXRpYyBmbGFncyAqLwotICAgICAgX19IQUxfTU1DX0NMRUFSX0ZMQUcoaG1tYywgU0RJT19TVEFUSUNfRkxBR1MpOyAKKyAgICAgIF9fSEFMX01NQ19DTEVBUl9GTEFHKGhtbWMsIFNESU9fU1RBVElDX0ZMQUdTKTsKKyAgICAgIF9fSEFMX01NQ19ESVNBQkxFX0lUKGhtbWMsIChTRElPX0lUX0RDUkNGQUlMIHwgU0RJT19JVF9EVElNRU9VVCB8IFNESU9fSVRfVFhVTkRFUlIgfCBTRElPX0lUX0RBVEFFTkQpKTsKICAgICAgIGhtbWMtPkVycm9yQ29kZSB8PSBlcnJvcnN0YXRlOwogICAgICAgaG1tYy0+U3RhdGUgPSBIQUxfTU1DX1NUQVRFX1JFQURZOwogICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICB9Ci0gICAgCisKICAgICAvKiBFbmFibGUgU0RJTyBETUEgdHJhbnNmZXIgKi8KICAgICBfX0hBTF9NTUNfRE1BX0VOQUJMRShobW1jKTsKLSAgICAKKwogICAgIC8qIEVuYWJsZSB0aGUgRE1BIENoYW5uZWwgKi8KLSAgICBIQUxfRE1BX1N0YXJ0X0lUKGhtbWMtPmhkbWF0eCwgKHVpbnQzMl90KXBEYXRhLCAodWludDMyX3QpJmhtbWMtPkluc3RhbmNlLT5GSUZPLCAodWludDMyX3QpKEJMT0NLU0laRSAqIE51bWJlck9mQmxvY2tzKS80KTsKLSAgICAKLSAgICAvKiBDb25maWd1cmUgdGhlIE1NQyBEUFNNIChEYXRhIFBhdGggU3RhdGUgTWFjaGluZSkgKi8gCi0gICAgY29uZmlnLkRhdGFUaW1lT3V0ICAgPSBTRE1NQ19EQVRBVElNRU9VVDsKLSAgICBjb25maWcuRGF0YUxlbmd0aCAgICA9IEJMT0NLU0laRSAqIE51bWJlck9mQmxvY2tzOwotICAgIGNvbmZpZy5EYXRhQmxvY2tTaXplID0gU0RJT19EQVRBQkxPQ0tfU0laRV81MTJCOwotICAgIGNvbmZpZy5UcmFuc2ZlckRpciAgID0gU0RJT19UUkFOU0ZFUl9ESVJfVE9fQ0FSRDsKLSAgICBjb25maWcuVHJhbnNmZXJNb2RlICA9IFNESU9fVFJBTlNGRVJfTU9ERV9CTE9DSzsKLSAgICBjb25maWcuRFBTTSAgICAgICAgICA9IFNESU9fRFBTTV9FTkFCTEU7Ci0gICAgU0RJT19Db25maWdEYXRhKGhtbWMtPkluc3RhbmNlLCAmY29uZmlnKTsKLSAgICAKLSAgICByZXR1cm4gSEFMX09LOworICAgIGlmKEhBTF9ETUFfU3RhcnRfSVQoaG1tYy0+aGRtYXR4LCAodWludDMyX3QpcERhdGEsICh1aW50MzJfdCkmaG1tYy0+SW5zdGFuY2UtPkZJRk8sICh1aW50MzJfdCkoTU1DX0JMT0NLU0laRSAqIE51bWJlck9mQmxvY2tzKS80KSAhPSBIQUxfT0spCisgICAgeworICAgICAgX19IQUxfTU1DX0RJU0FCTEVfSVQoaG1tYywgKFNESU9fSVRfRENSQ0ZBSUwgfCBTRElPX0lUX0RUSU1FT1VUIHwgU0RJT19JVF9UWFVOREVSUiB8IFNESU9fSVRfREFUQUVORCkpOworICAgICAgX19IQUxfTU1DX0NMRUFSX0ZMQUcoaG1tYywgU0RJT19TVEFUSUNfRkxBR1MpOworICAgICAgaG1tYy0+RXJyb3JDb2RlIHw9IEhBTF9NTUNfRVJST1JfRE1BOworICAgICAgaG1tYy0+U3RhdGUgPSBIQUxfTU1DX1NUQVRFX1JFQURZOworICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgICB9CisgICAgZWxzZQorICAgIHsgICAgCisgICAgICAvKiBDb25maWd1cmUgdGhlIE1NQyBEUFNNIChEYXRhIFBhdGggU3RhdGUgTWFjaGluZSkgKi8gCisgICAgICBjb25maWcuRGF0YVRpbWVPdXQgICA9IFNETU1DX0RBVEFUSU1FT1VUOworICAgICAgY29uZmlnLkRhdGFMZW5ndGggICAgPSBNTUNfQkxPQ0tTSVpFICogTnVtYmVyT2ZCbG9ja3M7CisgICAgICBjb25maWcuRGF0YUJsb2NrU2l6ZSA9IFNESU9fREFUQUJMT0NLX1NJWkVfNTEyQjsKKyAgICAgIGNvbmZpZy5UcmFuc2ZlckRpciAgID0gU0RJT19UUkFOU0ZFUl9ESVJfVE9fQ0FSRDsKKyAgICAgIGNvbmZpZy5UcmFuc2Zlck1vZGUgID0gU0RJT19UUkFOU0ZFUl9NT0RFX0JMT0NLOworICAgICAgY29uZmlnLkRQU00gICAgICAgICAgPSBTRElPX0RQU01fRU5BQkxFOworICAgICAgKHZvaWQpU0RJT19Db25maWdEYXRhKGhtbWMtPkluc3RhbmNlLCAmY29uZmlnKTsKKworICAgICAgcmV0dXJuIEhBTF9PSzsKKyAgICB9CiAgIH0KICAgZWxzZQogICB7CkBAIC0xMzQyLDMzICsxNDE3LDM1IEBACiAgICogQGJyaWVmICBFcmFzZXMgdGhlIHNwZWNpZmllZCBtZW1vcnkgYXJlYSBvZiB0aGUgZ2l2ZW4gTU1DIGNhcmQuCiAgICogQG5vdGUgICBUaGlzIEFQSSBzaG91bGQgYmUgZm9sbG93ZWQgYnkgYSBjaGVjayBvbiB0aGUgY2FyZCBzdGF0ZSB0aHJvdWdoCiAgICogICAgICAgICBIQUxfTU1DX0dldENhcmRTdGF0ZSgpLgotICAqIEBwYXJhbSAgaG1tYyBQb2ludGVyIHRvIE1NQyBoYW5kbGUgCi0gICogQHBhcmFtICBCbG9ja1N0YXJ0QWRkIFN0YXJ0IEJsb2NrIGFkZHJlc3MKLSAgKiBAcGFyYW0gIEJsb2NrRW5kQWRkIEVuZCBCbG9jayBhZGRyZXNzCisgICogQHBhcmFtICBobW1jOiBQb2ludGVyIHRvIE1NQyBoYW5kbGUKKyAgKiBAcGFyYW0gIEJsb2NrU3RhcnRBZGQ6IFN0YXJ0IEJsb2NrIGFkZHJlc3MKKyAgKiBAcGFyYW0gIEJsb2NrRW5kQWRkOiBFbmQgQmxvY2sgYWRkcmVzcwogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX01NQ19FcmFzZShNTUNfSGFuZGxlVHlwZURlZiAqaG1tYywgdWludDMyX3QgQmxvY2tTdGFydEFkZCwgdWludDMyX3QgQmxvY2tFbmRBZGQpCiB7Ci0gIHVpbnQzMl90IGVycm9yc3RhdGUgPSBIQUxfTU1DX0VSUk9SX05PTkU7Ci0gIAorICB1aW50MzJfdCBlcnJvcnN0YXRlOworICB1aW50MzJfdCBzdGFydF9hZGQgPSBCbG9ja1N0YXJ0QWRkOworICB1aW50MzJfdCBlbmRfYWRkID0gQmxvY2tFbmRBZGQ7CisKICAgaWYoaG1tYy0+U3RhdGUgPT0gSEFMX01NQ19TVEFURV9SRUFEWSkKICAgewotICAgIGhtbWMtPkVycm9yQ29kZSA9IEhBTF9ETUFfRVJST1JfTk9ORTsKLSAgICAKLSAgICBpZihCbG9ja0VuZEFkZCA8IEJsb2NrU3RhcnRBZGQpCisgICAgaG1tYy0+RXJyb3JDb2RlID0gSEFMX01NQ19FUlJPUl9OT05FOworCisgICAgaWYoZW5kX2FkZCA8IHN0YXJ0X2FkZCkKICAgICB7CiAgICAgICBobW1jLT5FcnJvckNvZGUgfD0gSEFMX01NQ19FUlJPUl9QQVJBTTsKICAgICAgIHJldHVybiBIQUxfRVJST1I7CiAgICAgfQotICAgIAotICAgIGlmKEJsb2NrRW5kQWRkID4gKGhtbWMtPk1tY0NhcmQuTG9nQmxvY2tOYnIpKQorCisgICAgaWYoZW5kX2FkZCA+IChobW1jLT5NbWNDYXJkLkxvZ0Jsb2NrTmJyKSkKICAgICB7CiAgICAgICBobW1jLT5FcnJvckNvZGUgfD0gSEFMX01NQ19FUlJPUl9BRERSX09VVF9PRl9SQU5HRTsKICAgICAgIHJldHVybiBIQUxfRVJST1I7CiAgICAgfQotICAgIAorCiAgICAgaG1tYy0+U3RhdGUgPSBIQUxfTU1DX1NUQVRFX0JVU1k7Ci0gICAgCisKICAgICAvKiBDaGVjayBpZiB0aGUgY2FyZCBjb21tYW5kIGNsYXNzIHN1cHBvcnRzIGVyYXNlIGNvbW1hbmQgKi8KICAgICBpZigoKGhtbWMtPk1tY0NhcmQuQ2xhc3MpICYgU0RJT19DQ0NDX0VSQVNFKSA9PSAwVSkKICAgICB7CkBAIC0xMzc4LDU4ICsxNDU1LDU3IEBACiAgICAgICBobW1jLT5TdGF0ZSA9IEhBTF9NTUNfU1RBVEVfUkVBRFk7CiAgICAgICByZXR1cm4gSEFMX0VSUk9SOwogICAgIH0KLSAgICAKKwogICAgIGlmKChTRElPX0dldFJlc3BvbnNlKGhtbWMtPkluc3RhbmNlLCBTRElPX1JFU1AxKSAmIFNETU1DX0NBUkRfTE9DS0VEKSA9PSBTRE1NQ19DQVJEX0xPQ0tFRCkKICAgICB7CiAgICAgICAvKiBDbGVhciBhbGwgdGhlIHN0YXRpYyBmbGFncyAqLwotICAgICAgX19IQUxfTU1DX0NMRUFSX0ZMQUcoaG1tYywgU0RNTUNfU1RBVElDX0ZMQUdTKTsgIAorICAgICAgX19IQUxfTU1DX0NMRUFSX0ZMQUcoaG1tYywgU0RJT19TVEFUSUNfRkxBR1MpOwogICAgICAgaG1tYy0+RXJyb3JDb2RlIHw9IEhBTF9NTUNfRVJST1JfTE9DS19VTkxPQ0tfRkFJTEVEOwogICAgICAgaG1tYy0+U3RhdGUgPSBIQUxfTU1DX1NUQVRFX1JFQURZOwogICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICB9Ci0gICAgCi0gICAgLyogQ2hlY2sgdGhlIENhcmQgY2FwYWNpdHkgaW4gdGVybSBvZiBMb2dpY2FsIG51bWJlciBvZiBibG9ja3MgKi8KLSAgICBpZiAoKGhtbWMtPk1tY0NhcmQuTG9nQmxvY2tOYnIpIDwgQ0FQQUNJVFkpCisKKyAgICBpZiAoKGhtbWMtPk1tY0NhcmQuQ2FyZFR5cGUpICE9IE1NQ19ISUdIX0NBUEFDSVRZX0NBUkQpCiAgICAgewotICAgICAgQmxvY2tTdGFydEFkZCAqPSA1MTJVOwotICAgICAgQmxvY2tFbmRBZGQgICAqPSA1MTJVOworICAgICAgc3RhcnRfYWRkICo9IDUxMlU7CisgICAgICBlbmRfYWRkICAgKj0gNTEyVTsKICAgICB9CiAKICAgICAvKiBTZW5kIENNRDM1IE1NQ19FUkFTRV9HUlBfU1RBUlQgd2l0aCBhcmd1bWVudCBhcyBhZGRyICAqLwotICAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRFcmFzZVN0YXJ0QWRkKGhtbWMtPkluc3RhbmNlLCBCbG9ja1N0YXJ0QWRkKTsKKyAgICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kRXJhc2VTdGFydEFkZChobW1jLT5JbnN0YW5jZSwgc3RhcnRfYWRkKTsKICAgICBpZihlcnJvcnN0YXRlICE9IEhBTF9NTUNfRVJST1JfTk9ORSkKICAgICB7CiAgICAgICAvKiBDbGVhciBhbGwgdGhlIHN0YXRpYyBmbGFncyAqLwotICAgICAgX19IQUxfTU1DX0NMRUFSX0ZMQUcoaG1tYywgU0RNTUNfU1RBVElDX0ZMQUdTKTsgCisgICAgICBfX0hBTF9NTUNfQ0xFQVJfRkxBRyhobW1jLCBTRElPX1NUQVRJQ19GTEFHUyk7CiAgICAgICBobW1jLT5FcnJvckNvZGUgfD0gZXJyb3JzdGF0ZTsKICAgICAgIGhtbWMtPlN0YXRlID0gSEFMX01NQ19TVEFURV9SRUFEWTsKICAgICAgIHJldHVybiBIQUxfRVJST1I7CiAgICAgfQotICAgIAorCiAgICAgLyogU2VuZCBDTUQzNiBNTUNfRVJBU0VfR1JQX0VORCB3aXRoIGFyZ3VtZW50IGFzIGFkZHIgICovCi0gICAgZXJyb3JzdGF0ZSA9IFNETU1DX0NtZEVyYXNlRW5kQWRkKGhtbWMtPkluc3RhbmNlLCBCbG9ja0VuZEFkZCk7CisgICAgZXJyb3JzdGF0ZSA9IFNETU1DX0NtZEVyYXNlRW5kQWRkKGhtbWMtPkluc3RhbmNlLCBlbmRfYWRkKTsKICAgICBpZihlcnJvcnN0YXRlICE9IEhBTF9NTUNfRVJST1JfTk9ORSkKICAgICB7CiAgICAgICAvKiBDbGVhciBhbGwgdGhlIHN0YXRpYyBmbGFncyAqLwotICAgICAgX19IQUxfTU1DX0NMRUFSX0ZMQUcoaG1tYywgU0RNTUNfU1RBVElDX0ZMQUdTKTsgCisgICAgICBfX0hBTF9NTUNfQ0xFQVJfRkxBRyhobW1jLCBTRElPX1NUQVRJQ19GTEFHUyk7CiAgICAgICBobW1jLT5FcnJvckNvZGUgfD0gZXJyb3JzdGF0ZTsKICAgICAgIGhtbWMtPlN0YXRlID0gSEFMX01NQ19TVEFURV9SRUFEWTsKICAgICAgIHJldHVybiBIQUxfRVJST1I7CiAgICAgfQotICAgIAorCiAgICAgLyogU2VuZCBDTUQzOCBFUkFTRSAqLwogICAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRFcmFzZShobW1jLT5JbnN0YW5jZSk7CiAgICAgaWYoZXJyb3JzdGF0ZSAhPSBIQUxfTU1DX0VSUk9SX05PTkUpCiAgICAgewogICAgICAgLyogQ2xlYXIgYWxsIHRoZSBzdGF0aWMgZmxhZ3MgKi8KLSAgICAgIF9fSEFMX01NQ19DTEVBUl9GTEFHKGhtbWMsIFNETU1DX1NUQVRJQ19GTEFHUyk7IAorICAgICAgX19IQUxfTU1DX0NMRUFSX0ZMQUcoaG1tYywgU0RJT19TVEFUSUNfRkxBR1MpOwogICAgICAgaG1tYy0+RXJyb3JDb2RlIHw9IGVycm9yc3RhdGU7CiAgICAgICBobW1jLT5TdGF0ZSA9IEhBTF9NTUNfU1RBVEVfUkVBRFk7CiAgICAgICByZXR1cm4gSEFMX0VSUk9SOwogICAgIH0KLSAgICAKKwogICAgIGhtbWMtPlN0YXRlID0gSEFMX01NQ19TVEFURV9SRUFEWTsKLSAgICAKKwogICAgIHJldHVybiBIQUxfT0s7CiAgIH0KICAgZWxzZQpAQCAtMTQ0MCw3OSArMTUxNiw1MSBAQAogCiAvKioKICAgKiBAYnJpZWYgIFRoaXMgZnVuY3Rpb24gaGFuZGxlcyBNTUMgY2FyZCBpbnRlcnJ1cHQgcmVxdWVzdC4KLSAgKiBAcGFyYW0gIGhtbWMgUG9pbnRlciB0byBNTUMgaGFuZGxlCisgICogQHBhcmFtICBobW1jOiBQb2ludGVyIHRvIE1NQyBoYW5kbGUKICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KIHZvaWQgSEFMX01NQ19JUlFIYW5kbGVyKE1NQ19IYW5kbGVUeXBlRGVmICpobW1jKQogewotICB1aW50MzJfdCBlcnJvcnN0YXRlID0gSEFMX01NQ19FUlJPUl9OT05FOwotICAKKyAgdWludDMyX3QgZXJyb3JzdGF0ZTsKKyAgdWludDMyX3QgY29udGV4dCA9IGhtbWMtPkNvbnRleHQ7CisKICAgLyogQ2hlY2sgZm9yIFNESU8gaW50ZXJydXB0IGZsYWdzICovCi0gIGlmKF9fSEFMX01NQ19HRVRfRkxBRyhobW1jLCBTRElPX0lUX0RBVEFFTkQpICE9IFJFU0VUKQorICBpZigoX19IQUxfTU1DX0dFVF9GTEFHKGhtbWMsIFNESU9fRkxBR19SWEZJRk9IRikgIT0gUkVTRVQpICYmICgoY29udGV4dCAmIE1NQ19DT05URVhUX0lUKSAhPSAwVSkpCiAgIHsKLSAgICBfX0hBTF9NTUNfQ0xFQVJfRkxBRyhobW1jLCBTRElPX0ZMQUdfREFUQUVORCk7IAotICAgIAotI2lmZGVmIFNESU9fU1RBX1NUQklURVJSCisgICAgTU1DX1JlYWRfSVQoaG1tYyk7CisgIH0KKworICBlbHNlIGlmKF9fSEFMX01NQ19HRVRfRkxBRyhobW1jLCBTRElPX0ZMQUdfREFUQUVORCkgIT0gUkVTRVQpCisgIHsKKyAgICBfX0hBTF9NTUNfQ0xFQVJfRkxBRyhobW1jLCBTRElPX0ZMQUdfREFUQUVORCk7CisKKyNpZiBkZWZpbmVkKFNESU9fU1RBX1NUQklURVJSKQogICAgIF9fSEFMX01NQ19ESVNBQkxFX0lUKGhtbWMsIFNESU9fSVRfREFUQUVORCB8IFNESU9fSVRfRENSQ0ZBSUwgfCBTRElPX0lUX0RUSU1FT1VUfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRElPX0lUX1RYVU5ERVJSIHwgU0RJT19JVF9SWE9WRVJSIHwgU0RJT19JVF9TVEJJVEVSUik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNESU9fSVRfVFhVTkRFUlJ8IFNESU9fSVRfUlhPVkVSUiB8IFNESU9fSVRfU1RCSVRFUlIpOwogI2Vsc2UgLyogU0RJT19TVEFfU1RCSVRFUlIgbm90IGRlZmluZWQgKi8KLSAgICBfX0hBTF9NTUNfRElTQUJMRV9JVChobW1jLCBTRElPX0lUX0RBVEFFTkQgfCBTRElPX0lUX0RDUkNGQUlMIHwgU0RJT19JVF9EVElNRU9VVHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0RJT19JVF9UWFVOREVSUiB8IFNESU9fSVRfUlhPVkVSUik7Ci0jZW5kaWYKKyAgICBfX0hBTF9NTUNfRElTQUJMRV9JVChobW1jLCBTRElPX0lUX0RBVEFFTkQgIHwgU0RJT19JVF9EQ1JDRkFJTCB8IFNESU9fSVRfRFRJTUVPVVQgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRElPX0lUX1RYVU5ERVJSIHwgU0RJT19JVF9SWE9WRVJSICB8IFNESU9fSVRfVFhGSUZPSEUgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRElPX0lUX1JYRklGT0hGKTsKKyNlbmRpZiAvKiBTRElPX1NUQV9TVEJJVEVSUiAqLwogICAgIAotICAgIGlmKChobW1jLT5Db250ZXh0ICYgTU1DX0NPTlRFWFRfSVQpICE9IFJFU0VUKQorICAgIGhtbWMtPkluc3RhbmNlLT5EQ1RSTCAmPSB+KFNESU9fRENUUkxfRFRFTik7CisKKyAgICBpZigoY29udGV4dCAmIE1NQ19DT05URVhUX0RNQSkgIT0gMFUpCiAgICAgewotICAgICAgaWYoKChobW1jLT5Db250ZXh0ICYgTU1DX0NPTlRFWFRfUkVBRF9NVUxUSVBMRV9CTE9DSykgIT0gUkVTRVQpIHx8ICgoaG1tYy0+Q29udGV4dCAmIE1NQ19DT05URVhUX1dSSVRFX01VTFRJUExFX0JMT0NLKSAhPSBSRVNFVCkpCisgICAgICBpZigoY29udGV4dCAmIE1NQ19DT05URVhUX1dSSVRFX01VTFRJUExFX0JMT0NLKSAhPSAwVSkKICAgICAgIHsKICAgICAgICAgZXJyb3JzdGF0ZSA9IFNETU1DX0NtZFN0b3BUcmFuc2ZlcihobW1jLT5JbnN0YW5jZSk7CiAgICAgICAgIGlmKGVycm9yc3RhdGUgIT0gSEFMX01NQ19FUlJPUl9OT05FKQogICAgICAgICB7CiAgICAgICAgICAgaG1tYy0+RXJyb3JDb2RlIHw9IGVycm9yc3RhdGU7Ci0jaWYgKFVTRV9IQUxfTU1DX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxKQorI2lmIGRlZmluZWQgKFVTRV9IQUxfTU1DX1JFR0lTVEVSX0NBTExCQUNLUykgJiYgKFVTRV9IQUxfTU1DX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxVSkKICAgICAgICAgICBobW1jLT5FcnJvckNhbGxiYWNrKGhtbWMpOwogI2Vsc2UKICAgICAgICAgICBIQUxfTU1DX0Vycm9yQ2FsbGJhY2soaG1tYyk7CiAjZW5kaWYKICAgICAgICAgfQogICAgICAgfQotICAgICAgCi0gICAgICAvKiBDbGVhciBhbGwgdGhlIHN0YXRpYyBmbGFncyAqLwotICAgICAgX19IQUxfTU1DX0NMRUFSX0ZMQUcoaG1tYywgU0RJT19TVEFUSUNfRkxBR1MpOwotICAgICAgCi0gICAgICBobW1jLT5TdGF0ZSA9IEhBTF9NTUNfU1RBVEVfUkVBRFk7Ci0gICAgICBpZigoKGhtbWMtPkNvbnRleHQgJiBNTUNfQ09OVEVYVF9SRUFEX1NJTkdMRV9CTE9DSykgIT0gUkVTRVQpIHx8ICgoaG1tYy0+Q29udGV4dCAmIE1NQ19DT05URVhUX1JFQURfTVVMVElQTEVfQkxPQ0spICE9IFJFU0VUKSkKLSAgICAgIHsKLSNpZiAoVVNFX0hBTF9NTUNfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCi0gICAgICAgIGhtbWMtPlJ4Q3BsdENhbGxiYWNrKGhtbWMpOwotI2Vsc2UKLSAgICAgICAgSEFMX01NQ19SeENwbHRDYWxsYmFjayhobW1jKTsKLSNlbmRpZgotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotI2lmIChVU0VfSEFMX01NQ19SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkKLSAgICAgICAgaG1tYy0+VHhDcGx0Q2FsbGJhY2soaG1tYyk7Ci0jZWxzZSAgICAgIAotICAgICAgICBIQUxfTU1DX1R4Q3BsdENhbGxiYWNrKGhtbWMpOwotI2VuZGlmCi0gICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYoKGhtbWMtPkNvbnRleHQgJiBNTUNfQ09OVEVYVF9ETUEpICE9IFJFU0VUKQotICAgIHsKLSAgICAgIGlmKChobW1jLT5Db250ZXh0ICYgTU1DX0NPTlRFWFRfV1JJVEVfTVVMVElQTEVfQkxPQ0spICE9IFJFU0VUKQotICAgICAgewotICAgICAgICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kU3RvcFRyYW5zZmVyKGhtbWMtPkluc3RhbmNlKTsKLSAgICAgICAgaWYoZXJyb3JzdGF0ZSAhPSBIQUxfTU1DX0VSUk9SX05PTkUpCi0gICAgICAgIHsKLSAgICAgICAgICBobW1jLT5FcnJvckNvZGUgfD0gZXJyb3JzdGF0ZTsKLSNpZiAoVVNFX0hBTF9NTUNfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCi0gICAgICAgICAgaG1tYy0+RXJyb3JDYWxsYmFjayhobW1jKTsKLSNlbHNlCi0gICAgICAgICAgSEFMX01NQ19FcnJvckNhbGxiYWNrKGhtbWMpOwotI2VuZGlmCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGlmKCgoaG1tYy0+Q29udGV4dCAmIE1NQ19DT05URVhUX1JFQURfU0lOR0xFX0JMT0NLKSA9PSBSRVNFVCkgJiYgKChobW1jLT5Db250ZXh0ICYgTU1DX0NPTlRFWFRfUkVBRF9NVUxUSVBMRV9CTE9DSykgPT0gUkVTRVQpKQorICAgICAgaWYoKChjb250ZXh0ICYgTU1DX0NPTlRFWFRfUkVBRF9TSU5HTEVfQkxPQ0spID09IDBVKSAmJiAoKGNvbnRleHQgJiBNTUNfQ09OVEVYVF9SRUFEX01VTFRJUExFX0JMT0NLKSA9PSAwVSkpCiAgICAgICB7CiAgICAgICAgIC8qIERpc2FibGUgdGhlIERNQSB0cmFuc2ZlciBmb3IgdHJhbnNtaXQgcmVxdWVzdCBieSBzZXR0aW5nIHRoZSBETUFFTiBiaXQKICAgICAgICAgaW4gdGhlIE1NQyBEQ1RSTCByZWdpc3RlciAqLwpAQCAtMTUyMCwxMjcgKzE1NjgsMTIxIEBACiAgICAgICAgIAogICAgICAgICBobW1jLT5TdGF0ZSA9IEhBTF9NTUNfU1RBVEVfUkVBRFk7CiAgICAgICAgIAotI2lmIChVU0VfSEFMX01NQ19SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkKKyNpZiBkZWZpbmVkIChVU0VfSEFMX01NQ19SRUdJU1RFUl9DQUxMQkFDS1MpICYmIChVU0VfSEFMX01NQ19SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMVUpCiAgICAgICAgIGhtbWMtPlR4Q3BsdENhbGxiYWNrKGhtbWMpOwotI2Vsc2UgICAgICAKKyNlbHNlCiAgICAgICAgIEhBTF9NTUNfVHhDcGx0Q2FsbGJhY2soaG1tYyk7CiAjZW5kaWYKICAgICAgIH0KICAgICB9CisgICAgZWxzZSBpZigoY29udGV4dCAmIE1NQ19DT05URVhUX0lUKSAhPSAwVSkKKyAgICB7CisgICAgICAvKiBTdG9wIFRyYW5zZmVyIGZvciBXcml0ZSBNdWx0aSBibG9ja3Mgb3IgUmVhZCBNdWx0aSBibG9ja3MgKi8KKyAgICAgIGlmKCgoY29udGV4dCAmIE1NQ19DT05URVhUX1JFQURfTVVMVElQTEVfQkxPQ0spICE9IDBVKSB8fCAoKGNvbnRleHQgJiBNTUNfQ09OVEVYVF9XUklURV9NVUxUSVBMRV9CTE9DSykgIT0gMFUpKQorICAgICAgeworICAgICAgICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kU3RvcFRyYW5zZmVyKGhtbWMtPkluc3RhbmNlKTsKKyAgICAgICAgaWYoZXJyb3JzdGF0ZSAhPSBIQUxfTU1DX0VSUk9SX05PTkUpCisgICAgICAgIHsKKyAgICAgICAgICBobW1jLT5FcnJvckNvZGUgfD0gZXJyb3JzdGF0ZTsKKyNpZiBkZWZpbmVkIChVU0VfSEFMX01NQ19SRUdJU1RFUl9DQUxMQkFDS1MpICYmIChVU0VfSEFMX01NQ19SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMVUpCisgICAgICAgICAgaG1tYy0+RXJyb3JDYWxsYmFjayhobW1jKTsKKyNlbHNlCisgICAgICAgICAgSEFMX01NQ19FcnJvckNhbGxiYWNrKGhtbWMpOworI2VuZGlmCisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgLyogQ2xlYXIgYWxsIHRoZSBzdGF0aWMgZmxhZ3MgKi8KKyAgICAgIF9fSEFMX01NQ19DTEVBUl9GTEFHKGhtbWMsIFNESU9fU1RBVElDX0RBVEFfRkxBR1MpOworCisgICAgICBobW1jLT5TdGF0ZSA9IEhBTF9NTUNfU1RBVEVfUkVBRFk7CisgICAgICBpZigoKGNvbnRleHQgJiBNTUNfQ09OVEVYVF9SRUFEX1NJTkdMRV9CTE9DSykgIT0gMFUpIHx8ICgoY29udGV4dCAmIE1NQ19DT05URVhUX1JFQURfTVVMVElQTEVfQkxPQ0spICE9IDBVKSkKKyAgICAgIHsKKyNpZiBkZWZpbmVkIChVU0VfSEFMX01NQ19SRUdJU1RFUl9DQUxMQkFDS1MpICYmIChVU0VfSEFMX01NQ19SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMVUpCisgICAgICAgIGhtbWMtPlJ4Q3BsdENhbGxiYWNrKGhtbWMpOworI2Vsc2UKKyAgICAgICAgSEFMX01NQ19SeENwbHRDYWxsYmFjayhobW1jKTsKKyNlbmRpZgorICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworI2lmIGRlZmluZWQgKFVTRV9IQUxfTU1DX1JFR0lTVEVSX0NBTExCQUNLUykgJiYgKFVTRV9IQUxfTU1DX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxVSkKKyAgICAgICAgaG1tYy0+VHhDcGx0Q2FsbGJhY2soaG1tYyk7CisjZWxzZQorICAgICAgICBIQUxfTU1DX1R4Q3BsdENhbGxiYWNrKGhtbWMpOworI2VuZGlmCisgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAvKiBOb3RoaW5nIHRvIGRvICovCisgICAgfQogICB9Ci0gIAotICBlbHNlIGlmKF9fSEFMX01NQ19HRVRfRkxBRyhobW1jLCBTRElPX0lUX1RYRklGT0hFKSAhPSBSRVNFVCkKKworICBlbHNlIGlmKChfX0hBTF9NTUNfR0VUX0ZMQUcoaG1tYywgU0RJT19GTEFHX1RYRklGT0hFKSAhPSBSRVNFVCkgJiYgKChjb250ZXh0ICYgTU1DX0NPTlRFWFRfSVQpICE9IDBVKSkKICAgewotICAgIF9fSEFMX01NQ19DTEVBUl9GTEFHKGhtbWMsIFNESU9fRkxBR19UWEZJRk9IRSk7Ci0gICAgCiAgICAgTU1DX1dyaXRlX0lUKGhtbWMpOwogICB9Ci0gIAotICBlbHNlIGlmKF9fSEFMX01NQ19HRVRfRkxBRyhobW1jLCBTRElPX0lUX1JYRklGT0hGKSAhPSBSRVNFVCkKLSAgewotICAgIF9fSEFMX01NQ19DTEVBUl9GTEFHKGhtbWMsIFNESU9fRkxBR19SWEZJRk9IRik7Ci0gICAgCi0gICAgTU1DX1JlYWRfSVQoaG1tYyk7Ci0gIH0KLSAgCi0jaWZkZWYgU0RJT19TVEFfU1RCSVRFUlIKLSAgZWxzZSBpZihfX0hBTF9NTUNfR0VUX0ZMQUcoaG1tYywgU0RJT19JVF9EQ1JDRkFJTCB8IFNESU9fSVRfRFRJTUVPVVQgfCBTRElPX0lUX1JYT1ZFUlIgfCBTRElPX0lUX1RYVU5ERVJSIHwgU0RJT19JVF9TVEJJVEVSUikgIT0gUkVTRVQpCisKKyNpZiBkZWZpbmVkKFNESU9fU1RBX1NUQklURVJSKQorICBlbHNlIGlmKF9fSEFMX01NQ19HRVRfRkxBRyhobW1jLCBTRElPX0ZMQUdfRENSQ0ZBSUwgfCBTRElPX0ZMQUdfRFRJTUVPVVQgfCBTRElPX0ZMQUdfUlhPVkVSUiB8IFNESU9fRkxBR19UWFVOREVSUiB8IFNESU9fRkxBR19TVEJJVEVSUikgIT0gUkVTRVQpCisjZWxzZSAvKiBTRElPX1NUQV9TVEJJVEVSUiBub3QgZGVmaW5lZCAqLworICBlbHNlIGlmKF9fSEFMX01NQ19HRVRfRkxBRyhobW1jLCBTRElPX0ZMQUdfRENSQ0ZBSUwgfCBTRElPX0ZMQUdfRFRJTUVPVVQgfCBTRElPX0ZMQUdfUlhPVkVSUiB8IFNESU9fRkxBR19UWFVOREVSUikgIT0gUkVTRVQpCisjZW5kaWYgLyogU0RJT19TVEFfU1RCSVRFUlIgKi8KICAgewogICAgIC8qIFNldCBFcnJvciBjb2RlICovCi0gICAgaWYoX19IQUxfTU1DX0dFVF9GTEFHKGhtbWMsIFNESU9fSVRfRENSQ0ZBSUwpICE9IFJFU0VUKQorICAgIGlmKF9fSEFMX01NQ19HRVRfRkxBRyhobW1jLCBTRElPX0ZMQUdfRENSQ0ZBSUwpICE9IFJFU0VUKQogICAgIHsKLSAgICAgIGhtbWMtPkVycm9yQ29kZSB8PSBIQUxfTU1DX0VSUk9SX0RBVEFfQ1JDX0ZBSUw7IAorICAgICAgaG1tYy0+RXJyb3JDb2RlIHw9IEhBTF9NTUNfRVJST1JfREFUQV9DUkNfRkFJTDsKICAgICB9Ci0gICAgaWYoX19IQUxfTU1DX0dFVF9GTEFHKGhtbWMsIFNESU9fSVRfRFRJTUVPVVQpICE9IFJFU0VUKQotICAgIHsKLSAgICAgIGhtbWMtPkVycm9yQ29kZSB8PSBIQUxfTU1DX0VSUk9SX0RBVEFfVElNRU9VVDsgCi0gICAgfQotICAgIGlmKF9fSEFMX01NQ19HRVRfRkxBRyhobW1jLCBTRElPX0lUX1JYT1ZFUlIpICE9IFJFU0VUKQotICAgIHsKLSAgICAgIGhtbWMtPkVycm9yQ29kZSB8PSBIQUxfTU1DX0VSUk9SX1JYX09WRVJSVU47IAotICAgIH0KLSAgICBpZihfX0hBTF9NTUNfR0VUX0ZMQUcoaG1tYywgU0RJT19JVF9UWFVOREVSUikgIT0gUkVTRVQpCi0gICAgewotICAgICAgaG1tYy0+RXJyb3JDb2RlIHw9IEhBTF9NTUNfRVJST1JfVFhfVU5ERVJSVU47IAotICAgIH0KLSAgICBpZihfX0hBTF9NTUNfR0VUX0ZMQUcoaG1tYywgU0RJT19JVF9TVEJJVEVSUikgIT0gUkVTRVQpCisgICAgaWYoX19IQUxfTU1DX0dFVF9GTEFHKGhtbWMsIFNESU9fRkxBR19EVElNRU9VVCkgIT0gUkVTRVQpCiAgICAgewogICAgICAgaG1tYy0+RXJyb3JDb2RlIHw9IEhBTF9NTUNfRVJST1JfREFUQV9USU1FT1VUOwogICAgIH0KKyAgICBpZihfX0hBTF9NTUNfR0VUX0ZMQUcoaG1tYywgU0RJT19GTEFHX1JYT1ZFUlIpICE9IFJFU0VUKQorICAgIHsKKyAgICAgIGhtbWMtPkVycm9yQ29kZSB8PSBIQUxfTU1DX0VSUk9SX1JYX09WRVJSVU47CisgICAgfQorICAgIGlmKF9fSEFMX01NQ19HRVRfRkxBRyhobW1jLCBTRElPX0ZMQUdfVFhVTkRFUlIpICE9IFJFU0VUKQorICAgIHsKKyAgICAgIGhtbWMtPkVycm9yQ29kZSB8PSBIQUxfTU1DX0VSUk9SX1RYX1VOREVSUlVOOworICAgIH0KKyNpZiBkZWZpbmVkKFNESU9fU1RBX1NUQklURVJSKQorICAgIGlmKF9fSEFMX01NQ19HRVRfRkxBRyhobW1jLCBTRElPX0ZMQUdfU1RCSVRFUlIpICE9IFJFU0VUKQorICAgIHsKKyAgICAgIGhtbWMtPkVycm9yQ29kZSB8PSBIQUxfTU1DX0VSUk9SX0RBVEFfVElNRU9VVDsKKyAgICB9CisjZW5kaWYgLyogU0RJT19TVEFfU1RCSVRFUlIgKi8KIAorI2lmIGRlZmluZWQoU0RJT19TVEFfU1RCSVRFUlIpCiAgICAgLyogQ2xlYXIgQWxsIGZsYWdzICovCi0gICAgX19IQUxfTU1DX0NMRUFSX0ZMQUcoaG1tYywgU0RJT19TVEFUSUNfRkxBR1MgfCBTRElPX0ZMQUdfU1RCSVRFUlIpOworICAgIF9fSEFMX01NQ19DTEVBUl9GTEFHKGhtbWMsIFNESU9fU1RBVElDX0RBVEFfRkxBR1MgfCBTRElPX0ZMQUdfU1RCSVRFUlIpOworCisgICAgLyogRGlzYWJsZSBhbGwgaW50ZXJydXB0cyAqLworICAgIF9fSEFMX01NQ19ESVNBQkxFX0lUKGhtbWMsIFNESU9fSVRfREFUQUVORCB8IFNESU9fSVRfRENSQ0ZBSUwgfCBTRElPX0lUX0RUSU1FT1VUfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRElPX0lUX1RYVU5ERVJSfCBTRElPX0lUX1JYT1ZFUlIgfCBTRElPX0lUX1NUQklURVJSKTsKKyNlbHNlIC8qIFNESU9fU1RBX1NUQklURVJSICovCisgICAgLyogQ2xlYXIgQWxsIGZsYWdzICovCisgICAgX19IQUxfTU1DX0NMRUFSX0ZMQUcoaG1tYywgU0RJT19TVEFUSUNfREFUQV9GTEFHUyk7CiAgICAgCiAgICAgLyogRGlzYWJsZSBhbGwgaW50ZXJydXB0cyAqLwogICAgIF9fSEFMX01NQ19ESVNBQkxFX0lUKGhtbWMsIFNESU9fSVRfREFUQUVORCB8IFNESU9fSVRfRENSQ0ZBSUwgfCBTRElPX0lUX0RUSU1FT1VUfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRElPX0lUX1RYVU5ERVJSfCBTRElPX0lUX1JYT1ZFUlIgfFNESU9fSVRfU1RCSVRFUlIpOwotICAgIAotICAgIGlmKChobW1jLT5Db250ZXh0ICYgTU1DX0NPTlRFWFRfRE1BKSAhPSBSRVNFVCkKLSAgICB7Ci0gICAgICAvKiBBYm9ydCB0aGUgTU1DIERNQSBTdHJlYW1zICovCi0gICAgICBpZihobW1jLT5oZG1hdHggIT0gTlVMTCkKLSAgICAgIHsKLSAgICAgICAgLyogU2V0IHRoZSBETUEgVHggYWJvcnQgY2FsbGJhY2sgKi8KLSAgICAgICAgaG1tYy0+aGRtYXR4LT5YZmVyQWJvcnRDYWxsYmFjayA9IE1NQ19ETUFUeEFib3J0OwotICAgICAgICAvKiBBYm9ydCBETUEgaW4gSVQgbW9kZSAqLwotICAgICAgICBpZihIQUxfRE1BX0Fib3J0X0lUKGhtbWMtPmhkbWF0eCkgIT0gSEFMX09LKQotICAgICAgICB7Ci0gICAgICAgICAgTU1DX0RNQVR4QWJvcnQoaG1tYy0+aGRtYXR4KTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgZWxzZSBpZihobW1jLT5oZG1hcnggIT0gTlVMTCkKLSAgICAgIHsKLSAgICAgICAgLyogU2V0IHRoZSBETUEgUnggYWJvcnQgY2FsbGJhY2sgKi8KLSAgICAgICAgaG1tYy0+aGRtYXJ4LT5YZmVyQWJvcnRDYWxsYmFjayA9IE1NQ19ETUFSeEFib3J0OwotICAgICAgICAvKiBBYm9ydCBETUEgaW4gSVQgbW9kZSAqLwotICAgICAgICBpZihIQUxfRE1BX0Fib3J0X0lUKGhtbWMtPmhkbWFyeCkgIT0gSEFMX09LKQotICAgICAgICB7Ci0gICAgICAgICAgTU1DX0RNQVJ4QWJvcnQoaG1tYy0+aGRtYXJ4KTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBobW1jLT5FcnJvckNvZGUgPSBIQUxfTU1DX0VSUk9SX05PTkU7Ci0gICAgICAgIGhtbWMtPlN0YXRlID0gSEFMX01NQ19TVEFURV9SRUFEWTsKLSAgICAgICAgSEFMX01NQ19BYm9ydENhbGxiYWNrKGhtbWMpOwotICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlmKChobW1jLT5Db250ZXh0ICYgTU1DX0NPTlRFWFRfSVQpICE9IFJFU0VUKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRElPX0lUX1RYVU5ERVJSfCBTRElPX0lUX1JYT1ZFUlIpOworI2VuZGlmIC8qIFNESU9fU1RBX1NUQklURVJSICovCisKKyAgICBobW1jLT5FcnJvckNvZGUgfD0gU0RNTUNfQ21kU3RvcFRyYW5zZmVyKGhtbWMtPkluc3RhbmNlKTsKKworICAgIGlmKChjb250ZXh0ICYgTU1DX0NPTlRFWFRfSVQpICE9IDBVKQogICAgIHsKICAgICAgIC8qIFNldCB0aGUgTU1DIHN0YXRlIHRvIHJlYWR5IHRvIGJlIGFibGUgdG8gc3RhcnQgYWdhaW4gdGhlIHByb2Nlc3MgKi8KICAgICAgIGhtbWMtPlN0YXRlID0gSEFMX01NQ19TVEFURV9SRUFEWTsKKyNpZiBkZWZpbmVkIChVU0VfSEFMX01NQ19SRUdJU1RFUl9DQUxMQkFDS1MpICYmIChVU0VfSEFMX01NQ19SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMVUpCisgICAgICBobW1jLT5FcnJvckNhbGxiYWNrKGhtbWMpOworI2Vsc2UKICAgICAgIEhBTF9NTUNfRXJyb3JDYWxsYmFjayhobW1jKTsKKyNlbmRpZiAvKiBVU0VfSEFMX01NQ19SRUdJU1RFUl9DQUxMQkFDS1MgKi8KICAgICB9Ci0gIH0KLSNlbHNlIC8qIFNESU9fU1RBX1NUQklURVJSIG5vdCBkZWZpbmVkICovCi0gIGVsc2UgaWYoX19IQUxfTU1DX0dFVF9GTEFHKGhtbWMsIFNESU9fSVRfRENSQ0ZBSUwgfCBTRElPX0lUX0RUSU1FT1VUIHwgU0RJT19JVF9SWE9WRVJSIHwgU0RJT19JVF9UWFVOREVSUikgIT0gUkVTRVQpCi0gIHsKLSAgICAvKiBTZXQgRXJyb3IgY29kZSAqLwotICAgIGlmKF9fSEFMX01NQ19HRVRfRkxBRyhobW1jLCBTRElPX0lUX0RDUkNGQUlMKSAhPSBSRVNFVCkKLSAgICB7Ci0gICAgICBobW1jLT5FcnJvckNvZGUgfD0gSEFMX01NQ19FUlJPUl9EQVRBX0NSQ19GQUlMOyAKLSAgICB9Ci0gICAgaWYoX19IQUxfTU1DX0dFVF9GTEFHKGhtbWMsIFNESU9fSVRfRFRJTUVPVVQpICE9IFJFU0VUKQotICAgIHsKLSAgICAgIGhtbWMtPkVycm9yQ29kZSB8PSBIQUxfTU1DX0VSUk9SX0RBVEFfVElNRU9VVDsgCi0gICAgfQotICAgIGlmKF9fSEFMX01NQ19HRVRfRkxBRyhobW1jLCBTRElPX0lUX1JYT1ZFUlIpICE9IFJFU0VUKQotICAgIHsKLSAgICAgIGhtbWMtPkVycm9yQ29kZSB8PSBIQUxfTU1DX0VSUk9SX1JYX09WRVJSVU47IAotICAgIH0KLSAgICBpZihfX0hBTF9NTUNfR0VUX0ZMQUcoaG1tYywgU0RJT19JVF9UWFVOREVSUikgIT0gUkVTRVQpCi0gICAgewotICAgICAgaG1tYy0+RXJyb3JDb2RlIHw9IEhBTF9NTUNfRVJST1JfVFhfVU5ERVJSVU47IAotICAgIH0KLQotICAgIC8qIENsZWFyIEFsbCBmbGFncyAqLwotICAgIF9fSEFMX01NQ19DTEVBUl9GTEFHKGhtbWMsIFNESU9fU1RBVElDX0ZMQUdTKTsKLSAgICAKLSAgICAvKiBEaXNhYmxlIGFsbCBpbnRlcnJ1cHRzICovCi0gICAgX19IQUxfTU1DX0RJU0FCTEVfSVQoaG1tYywgU0RJT19JVF9EQVRBRU5EIHwgU0RJT19JVF9EQ1JDRkFJTCB8IFNESU9fSVRfRFRJTUVPVVR8XAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNESU9fSVRfVFhVTkRFUlJ8IFNESU9fSVRfUlhPVkVSUik7Ci0gICAgCi0gICAgaWYoKGhtbWMtPkNvbnRleHQgJiBNTUNfQ09OVEVYVF9ETUEpICE9IFJFU0VUKQorICAgIGVsc2UgaWYoKGNvbnRleHQgJiBNTUNfQ09OVEVYVF9ETUEpICE9IDBVKQogICAgIHsKICAgICAgIC8qIEFib3J0IHRoZSBNTUMgRE1BIFN0cmVhbXMgKi8KICAgICAgIGlmKGhtbWMtPmhkbWF0eCAhPSBOVUxMKQpAQCAtMTY2NywzMCArMTcwOSwyOCBAQAogICAgICAgewogICAgICAgICBobW1jLT5FcnJvckNvZGUgPSBIQUxfTU1DX0VSUk9SX05PTkU7CiAgICAgICAgIGhtbWMtPlN0YXRlID0gSEFMX01NQ19TVEFURV9SRUFEWTsKLSNpZiAoVVNFX0hBTF9NTUNfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCisjaWYgZGVmaW5lZCAoVVNFX0hBTF9NTUNfUkVHSVNURVJfQ0FMTEJBQ0tTKSAmJiAoVVNFX0hBTF9NTUNfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDFVKQogICAgICAgICBobW1jLT5BYm9ydENwbHRDYWxsYmFjayhobW1jKTsKICNlbHNlCiAgICAgICAgIEhBTF9NTUNfQWJvcnRDYWxsYmFjayhobW1jKTsKICNlbmRpZgogICAgICAgfQogICAgIH0KLSAgICBlbHNlIGlmKChobW1jLT5Db250ZXh0ICYgTU1DX0NPTlRFWFRfSVQpICE9IFJFU0VUKQorICAgIGVsc2UKICAgICB7Ci0gICAgICAvKiBTZXQgdGhlIE1NQyBzdGF0ZSB0byByZWFkeSB0byBiZSBhYmxlIHRvIHN0YXJ0IGFnYWluIHRoZSBwcm9jZXNzICovCi0gICAgICBobW1jLT5TdGF0ZSA9IEhBTF9NTUNfU1RBVEVfUkVBRFk7Ci0jaWYgKFVTRV9IQUxfTU1DX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxKQotICAgICAgaG1tYy0+RXJyb3JDYWxsYmFjayhobW1jKTsKLSNlbHNlCi0gICAgICBIQUxfTU1DX0Vycm9yQ2FsbGJhY2soaG1tYyk7Ci0jZW5kaWYKKyAgICAgIC8qIE5vdGhpbmcgdG8gZG8gKi8KICAgICB9CiAgIH0KLSNlbmRpZiAvKiBTRElPX1NUQV9TVEJJVEVSUiAqLworCisgIGVsc2UKKyAgeworICAgIC8qIE5vdGhpbmcgdG8gZG8gKi8KKyAgfQogfQogCiAvKioKICAgKiBAYnJpZWYgcmV0dXJuIHRoZSBNTUMgc3RhdGUKLSAgKiBAcGFyYW0gaG1tYyBQb2ludGVyIHRvIG1tYyBoYW5kbGUKKyAgKiBAcGFyYW0gaG1tYzogUG9pbnRlciB0byBtbWMgaGFuZGxlCiAgICogQHJldHZhbCBIQUwgc3RhdGUKICAgKi8KIEhBTF9NTUNfU3RhdGVUeXBlRGVmIEhBTF9NTUNfR2V0U3RhdGUoTU1DX0hhbmRsZVR5cGVEZWYgKmhtbWMpCkBAIC0xNzAwLDcgKzE3NDAsNyBAQAogCiAvKioKICogQGJyaWVmICBSZXR1cm4gdGhlIE1NQyBlcnJvciBjb2RlCi0qIEBwYXJhbSAgaG1tYyAgUG9pbnRlciB0byBhIE1NQ19IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCisqIEBwYXJhbSAgaG1tYyA6IFBvaW50ZXIgdG8gYSBNTUNfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucwogICAqICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbi4KICogQHJldHZhbCBNTUMgRXJyb3IgQ29kZQogKi8KQEAgLTE3MTEsMTAgKzE3NTEsMTAgQEAKIAogLyoqCiAgICogQGJyaWVmIFR4IFRyYW5zZmVyIGNvbXBsZXRlZCBjYWxsYmFja3MKLSAgKiBAcGFyYW0gaG1tYyBQb2ludGVyIHRvIE1NQyBoYW5kbGUKKyAgKiBAcGFyYW0gaG1tYzogUG9pbnRlciB0byBNTUMgaGFuZGxlCiAgICogQHJldHZhbCBOb25lCiAgICovCi0gX193ZWFrIHZvaWQgSEFMX01NQ19UeENwbHRDYWxsYmFjayhNTUNfSGFuZGxlVHlwZURlZiAqaG1tYykKK19fd2VhayB2b2lkIEhBTF9NTUNfVHhDcGx0Q2FsbGJhY2soTU1DX0hhbmRsZVR5cGVEZWYgKmhtbWMpCiB7CiAgIC8qIFByZXZlbnQgdW51c2VkIGFyZ3VtZW50KHMpIGNvbXBpbGF0aW9uIHdhcm5pbmcgKi8KICAgVU5VU0VEKGhtbWMpOwpAQCAtMTcyNiwxNCArMTc2NiwxNCBAQAogCiAvKioKICAgKiBAYnJpZWYgUnggVHJhbnNmZXIgY29tcGxldGVkIGNhbGxiYWNrcwotICAqIEBwYXJhbSBobW1jIFBvaW50ZXIgTU1DIGhhbmRsZQorICAqIEBwYXJhbSBobW1jOiBQb2ludGVyIE1NQyBoYW5kbGUKICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KIF9fd2VhayB2b2lkIEhBTF9NTUNfUnhDcGx0Q2FsbGJhY2soTU1DX0hhbmRsZVR5cGVEZWYgKmhtbWMpCiB7CiAgIC8qIFByZXZlbnQgdW51c2VkIGFyZ3VtZW50KHMpIGNvbXBpbGF0aW9uIHdhcm5pbmcgKi8KICAgVU5VU0VEKGhtbWMpOwotIAorCiAgIC8qIE5PVEUgOiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBub3QgYmUgbW9kaWZpZWQsIHdoZW4gdGhlIGNhbGxiYWNrIGlzIG5lZWRlZCwKICAgICAgICAgICAgIHRoZSBIQUxfTU1DX1J4Q3BsdENhbGxiYWNrIGNhbiBiZSBpbXBsZW1lbnRlZCBpbiB0aGUgdXNlciBmaWxlCiAgICAqLwpAQCAtMTc0MSw0NyArMTc4MSw0NyBAQAogCiAvKioKICAgKiBAYnJpZWYgTU1DIGVycm9yIGNhbGxiYWNrcwotICAqIEBwYXJhbSBobW1jIFBvaW50ZXIgTU1DIGhhbmRsZQorICAqIEBwYXJhbSBobW1jOiBQb2ludGVyIE1NQyBoYW5kbGUKICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KIF9fd2VhayB2b2lkIEhBTF9NTUNfRXJyb3JDYWxsYmFjayhNTUNfSGFuZGxlVHlwZURlZiAqaG1tYykKIHsKICAgLyogUHJldmVudCB1bnVzZWQgYXJndW1lbnQocykgY29tcGlsYXRpb24gd2FybmluZyAqLwogICBVTlVTRUQoaG1tYyk7Ci0gCisKICAgLyogTk9URSA6IFRoaXMgZnVuY3Rpb24gc2hvdWxkIG5vdCBiZSBtb2RpZmllZCwgd2hlbiB0aGUgY2FsbGJhY2sgaXMgbmVlZGVkLAogICAgICAgICAgICAgdGhlIEhBTF9NTUNfRXJyb3JDYWxsYmFjayBjYW4gYmUgaW1wbGVtZW50ZWQgaW4gdGhlIHVzZXIgZmlsZQotICAgKi8gCisgICAqLwogfQogCiAvKioKICAgKiBAYnJpZWYgTU1DIEFib3J0IGNhbGxiYWNrcwotICAqIEBwYXJhbSBobW1jIFBvaW50ZXIgTU1DIGhhbmRsZQorICAqIEBwYXJhbSBobW1jOiBQb2ludGVyIE1NQyBoYW5kbGUKICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KIF9fd2VhayB2b2lkIEhBTF9NTUNfQWJvcnRDYWxsYmFjayhNTUNfSGFuZGxlVHlwZURlZiAqaG1tYykKIHsKICAgLyogUHJldmVudCB1bnVzZWQgYXJndW1lbnQocykgY29tcGlsYXRpb24gd2FybmluZyAqLwogICBVTlVTRUQoaG1tYyk7Ci0gCisKICAgLyogTk9URSA6IFRoaXMgZnVuY3Rpb24gc2hvdWxkIG5vdCBiZSBtb2RpZmllZCwgd2hlbiB0aGUgY2FsbGJhY2sgaXMgbmVlZGVkLAotICAgICAgICAgICAgdGhlIEhBTF9NTUNfRXJyb3JDYWxsYmFjayBjYW4gYmUgaW1wbGVtZW50ZWQgaW4gdGhlIHVzZXIgZmlsZQotICAgKi8gCisgICAgICAgICAgICB0aGUgSEFMX01NQ19BYm9ydENhbGxiYWNrIGNhbiBiZSBpbXBsZW1lbnRlZCBpbiB0aGUgdXNlciBmaWxlCisgICAqLwogfQogCi0jaWYgKFVTRV9IQUxfTU1DX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxKQorI2lmIGRlZmluZWQgKFVTRV9IQUxfTU1DX1JFR0lTVEVSX0NBTExCQUNLUykgJiYgKFVTRV9IQUxfTU1DX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxVSkKIC8qKgogICAqIEBicmllZiAgUmVnaXN0ZXIgYSBVc2VyIE1NQyBDYWxsYmFjawotICAqICAgICAgICAgVG8gYmUgdXNlZCBpbnN0ZWFkIG9mIHRoZSB3ZWFrIChzdXJjaGFyZ2VkKSBwcmVkZWZpbmVkIGNhbGxiYWNrIAorICAqICAgICAgICAgVG8gYmUgdXNlZCBpbnN0ZWFkIG9mIHRoZSB3ZWFrIChzdXJjaGFyZ2VkKSBwcmVkZWZpbmVkIGNhbGxiYWNrCiAgICogQHBhcmFtIGhtbWMgOiBNTUMgaGFuZGxlCi0gICogQHBhcmFtIENhbGxiYWNrSUQgOiBJRCBvZiB0aGUgY2FsbGJhY2sgdG8gYmUgcmVnaXN0ZXJlZAorICAqIEBwYXJhbSBDYWxsYmFja0lkIDogSUQgb2YgdGhlIGNhbGxiYWNrIHRvIGJlIHJlZ2lzdGVyZWQKICAgKiAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAgKiAgICAgICAgICBAYXJnIEByZWYgSEFMX01NQ19UWF9DUExUX0NCX0lEICAgIE1NQyBUeCBDb21wbGV0ZSBDYWxsYmFjayBJRAogICAqICAgICAgICAgIEBhcmcgQHJlZiBIQUxfTU1DX1JYX0NQTFRfQ0JfSUQgICAgTU1DIFJ4IENvbXBsZXRlIENhbGxiYWNrIElECiAgICogICAgICAgICAgQGFyZyBAcmVmIEhBTF9NTUNfRVJST1JfQ0JfSUQgICAgICBNTUMgRXJyb3IgQ2FsbGJhY2sgSUQKICAgKiAgICAgICAgICBAYXJnIEByZWYgSEFMX01NQ19BQk9SVF9DQl9JRCAgICAgIE1NQyBBYm9ydCBDYWxsYmFjayBJRAotICAqICAgICAgICAgIEBhcmcgQHJlZiBIQUxfTU1DX01TUF9JTklUX0NCX0lEICAgTU1DIE1zcEluaXQgQ2FsbGJhY2sgSUQgCi0gICogICAgICAgICAgQGFyZyBAcmVmIEhBTF9NTUNfTVNQX0RFSU5JVF9DQl9JRCBNTUMgTXNwRGVJbml0IENhbGxiYWNrIElEICAKKyAgKiAgICAgICAgICBAYXJnIEByZWYgSEFMX01NQ19NU1BfSU5JVF9DQl9JRCAgIE1NQyBNc3BJbml0IENhbGxiYWNrIElECisgICogICAgICAgICAgQGFyZyBAcmVmIEhBTF9NTUNfTVNQX0RFSU5JVF9DQl9JRCBNTUMgTXNwRGVJbml0IENhbGxiYWNrIElECiAgICogQHBhcmFtIHBDYWxsYmFjayA6IHBvaW50ZXIgdG8gdGhlIENhbGxiYWNrIGZ1bmN0aW9uCiAgICogQHJldHZhbCBzdGF0dXMKICAgKi8KQEAgLTE3OTgsNyArMTgzOCw3IEBACiAKICAgLyogUHJvY2VzcyBsb2NrZWQgKi8KICAgX19IQUxfTE9DSyhobW1jKTsKLSAgCisKICAgaWYoaG1tYy0+U3RhdGUgPT0gSEFMX01NQ19TVEFURV9SRUFEWSkKICAgewogICAgIHN3aXRjaCAoQ2FsbGJhY2tJZCkKQEAgLTE4MjMsNyArMTg2Myw3IEBACiAgICAgICBicmVhazsKICAgICBkZWZhdWx0IDoKICAgICAgIC8qIFVwZGF0ZSB0aGUgZXJyb3IgY29kZSAqLwotICAgICAgaG1tYy0+RXJyb3JDb2RlIHw9IEhBTF9NTUNfRVJST1JfSU5WQUxJRF9DQUxMQkFDSzsgCisgICAgICBobW1jLT5FcnJvckNvZGUgfD0gSEFMX01NQ19FUlJPUl9JTlZBTElEX0NBTExCQUNLOwogICAgICAgLyogdXBkYXRlIHJldHVybiBzdGF0dXMgKi8KICAgICAgIHN0YXR1cyA9ICBIQUxfRVJST1I7CiAgICAgICBicmVhazsKQEAgLTE4NDEsNyArMTg4MSw3IEBACiAgICAgICBicmVhazsKICAgICBkZWZhdWx0IDoKICAgICAgIC8qIFVwZGF0ZSB0aGUgZXJyb3IgY29kZSAqLwotICAgICAgaG1tYy0+RXJyb3JDb2RlIHw9IEhBTF9NTUNfRVJST1JfSU5WQUxJRF9DQUxMQkFDSzsgCisgICAgICBobW1jLT5FcnJvckNvZGUgfD0gSEFMX01NQ19FUlJPUl9JTlZBTElEX0NBTExCQUNLOwogICAgICAgLyogdXBkYXRlIHJldHVybiBzdGF0dXMgKi8KICAgICAgIHN0YXR1cyA9ICBIQUxfRVJST1I7CiAgICAgICBicmVhazsKQEAgLTE4NTAsNyArMTg5MCw3IEBACiAgIGVsc2UKICAgewogICAgIC8qIFVwZGF0ZSB0aGUgZXJyb3IgY29kZSAqLwotICAgIGhtbWMtPkVycm9yQ29kZSB8PSBIQUxfTU1DX0VSUk9SX0lOVkFMSURfQ0FMTEJBQ0s7IAorICAgIGhtbWMtPkVycm9yQ29kZSB8PSBIQUxfTU1DX0VSUk9SX0lOVkFMSURfQ0FMTEJBQ0s7CiAgICAgLyogdXBkYXRlIHJldHVybiBzdGF0dXMgKi8KICAgICBzdGF0dXMgPSAgSEFMX0VSUk9SOwogICB9CkBAIC0xODYyLDE2ICsxOTAyLDE2IEBACiAKIC8qKgogICAqIEBicmllZiAgVW5yZWdpc3RlciBhIFVzZXIgTU1DIENhbGxiYWNrCi0gICogICAgICAgICBNTUMgQ2FsbGJhY2sgaXMgcmVkaXJlY3RlZCB0byB0aGUgd2VhayAoc3VyY2hhcmdlZCkgcHJlZGVmaW5lZCBjYWxsYmFjayAKKyAgKiAgICAgICAgIE1NQyBDYWxsYmFjayBpcyByZWRpcmVjdGVkIHRvIHRoZSB3ZWFrIChzdXJjaGFyZ2VkKSBwcmVkZWZpbmVkIGNhbGxiYWNrCiAgICogQHBhcmFtIGhtbWMgOiBNTUMgaGFuZGxlCi0gICogQHBhcmFtIENhbGxiYWNrSUQgOiBJRCBvZiB0aGUgY2FsbGJhY2sgdG8gYmUgdW5yZWdpc3RlcmVkCisgICogQHBhcmFtIENhbGxiYWNrSWQgOiBJRCBvZiB0aGUgY2FsbGJhY2sgdG8gYmUgdW5yZWdpc3RlcmVkCiAgICogICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAgICogICAgICAgICAgQGFyZyBAcmVmIEhBTF9NTUNfVFhfQ1BMVF9DQl9JRCAgICBNTUMgVHggQ29tcGxldGUgQ2FsbGJhY2sgSUQKICAgKiAgICAgICAgICBAYXJnIEByZWYgSEFMX01NQ19SWF9DUExUX0NCX0lEICAgIE1NQyBSeCBDb21wbGV0ZSBDYWxsYmFjayBJRAogICAqICAgICAgICAgIEBhcmcgQHJlZiBIQUxfTU1DX0VSUk9SX0NCX0lEICAgICAgTU1DIEVycm9yIENhbGxiYWNrIElECiAgICogICAgICAgICAgQGFyZyBAcmVmIEhBTF9NTUNfQUJPUlRfQ0JfSUQgICAgICBNTUMgQWJvcnQgQ2FsbGJhY2sgSUQKLSAgKiAgICAgICAgICBAYXJnIEByZWYgSEFMX01NQ19NU1BfSU5JVF9DQl9JRCAgIE1NQyBNc3BJbml0IENhbGxiYWNrIElEIAotICAqICAgICAgICAgIEBhcmcgQHJlZiBIQUxfTU1DX01TUF9ERUlOSVRfQ0JfSUQgTU1DIE1zcERlSW5pdCBDYWxsYmFjayBJRCAgCisgICogICAgICAgICAgQGFyZyBAcmVmIEhBTF9NTUNfTVNQX0lOSVRfQ0JfSUQgICBNTUMgTXNwSW5pdCBDYWxsYmFjayBJRAorICAqICAgICAgICAgIEBhcmcgQHJlZiBIQUxfTU1DX01TUF9ERUlOSVRfQ0JfSUQgTU1DIE1zcERlSW5pdCBDYWxsYmFjayBJRAogICAqIEByZXR2YWwgc3RhdHVzCiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfTU1DX1VuUmVnaXN0ZXJDYWxsYmFjayhNTUNfSGFuZGxlVHlwZURlZiAqaG1tYywgSEFMX01NQ19DYWxsYmFja0lEVHlwZURlZiBDYWxsYmFja0lkKQpAQCAtMTg4MCw3ICsxOTIwLDcgQEAKIAogICAvKiBQcm9jZXNzIGxvY2tlZCAqLwogICBfX0hBTF9MT0NLKGhtbWMpOwotICAKKwogICBpZihobW1jLT5TdGF0ZSA9PSBIQUxfTU1DX1NUQVRFX1JFQURZKQogICB7CiAgICAgc3dpdGNoIChDYWxsYmFja0lkKQpAQCAtMTkwNSw3ICsxOTQ1LDcgQEAKICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQgOgogICAgICAgLyogVXBkYXRlIHRoZSBlcnJvciBjb2RlICovCi0gICAgICBobW1jLT5FcnJvckNvZGUgfD0gSEFMX01NQ19FUlJPUl9JTlZBTElEX0NBTExCQUNLOyAKKyAgICAgIGhtbWMtPkVycm9yQ29kZSB8PSBIQUxfTU1DX0VSUk9SX0lOVkFMSURfQ0FMTEJBQ0s7CiAgICAgICAvKiB1cGRhdGUgcmV0dXJuIHN0YXR1cyAqLwogICAgICAgc3RhdHVzID0gIEhBTF9FUlJPUjsKICAgICAgIGJyZWFrOwpAQCAtMTkyMyw3ICsxOTYzLDcgQEAKICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQgOgogICAgICAgLyogVXBkYXRlIHRoZSBlcnJvciBjb2RlICovCi0gICAgICBobW1jLT5FcnJvckNvZGUgfD0gSEFMX01NQ19FUlJPUl9JTlZBTElEX0NBTExCQUNLOyAKKyAgICAgIGhtbWMtPkVycm9yQ29kZSB8PSBIQUxfTU1DX0VSUk9SX0lOVkFMSURfQ0FMTEJBQ0s7CiAgICAgICAvKiB1cGRhdGUgcmV0dXJuIHN0YXR1cyAqLwogICAgICAgc3RhdHVzID0gIEhBTF9FUlJPUjsKICAgICAgIGJyZWFrOwpAQCAtMTkzMiw3ICsxOTcyLDcgQEAKICAgZWxzZQogICB7CiAgICAgLyogVXBkYXRlIHRoZSBlcnJvciBjb2RlICovCi0gICAgaG1tYy0+RXJyb3JDb2RlIHw9IEhBTF9NTUNfRVJST1JfSU5WQUxJRF9DQUxMQkFDSzsgCisgICAgaG1tYy0+RXJyb3JDb2RlIHw9IEhBTF9NTUNfRVJST1JfSU5WQUxJRF9DQUxMQkFDSzsKICAgICAvKiB1cGRhdGUgcmV0dXJuIHN0YXR1cyAqLwogICAgIHN0YXR1cyA9ICBIQUxfRVJST1I7CiAgIH0KQEAgLTE5NDMsMjAgKzE5ODMsMTkgQEAKIH0KICNlbmRpZgogCi0KIC8qKgogICAqIEB9CiAgICovCiAKIC8qKiBAYWRkdG9ncm91cCBNTUNfRXhwb3J0ZWRfRnVuY3Rpb25zX0dyb3VwMwotICogIEBicmllZiAgIG1hbmFnZW1lbnQgZnVuY3Rpb25zIAorICogIEBicmllZiAgIG1hbmFnZW1lbnQgZnVuY3Rpb25zCiAgKgotQHZlcmJhdGltICAgCitAdmVyYmF0aW0KICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgICAgICAgICAgICAgICAgIyMjIyMgUGVyaXBoZXJhbCBDb250cm9sIGZ1bmN0aW9ucyAjIyMjIwotICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gIAorICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgWy4uXQotICAgIFRoaXMgc3Vic2VjdGlvbiBwcm92aWRlcyBhIHNldCBvZiBmdW5jdGlvbnMgYWxsb3dpbmcgdG8gY29udHJvbCB0aGUgTU1DIGNhcmQgCisgICAgVGhpcyBzdWJzZWN0aW9uIHByb3ZpZGVzIGEgc2V0IG9mIGZ1bmN0aW9ucyBhbGxvd2luZyB0byBjb250cm9sIHRoZSBNTUMgY2FyZAogICAgIG9wZXJhdGlvbnMgYW5kIGdldCB0aGUgcmVsYXRlZCBpbmZvcm1hdGlvbgogCiBAZW5kdmVyYmF0aW0KQEAgLTE5NjYsNzkgKzIwMDUsMzEgQEAKIC8qKgogICAqIEBicmllZiAgUmV0dXJucyBpbmZvcm1hdGlvbiB0aGUgaW5mb3JtYXRpb24gb2YgdGhlIGNhcmQgd2hpY2ggYXJlIHN0b3JlZCBvbgogICAqICAgICAgICAgdGhlIENJRCByZWdpc3Rlci4KLSAgKiBAcGFyYW0gIGhtbWMgUG9pbnRlciB0byBNTUMgaGFuZGxlCi0gICogQHBhcmFtICBwQ0lEIFBvaW50ZXIgdG8gYSBIQUxfTU1DX0NJRFR5cGVkZWYgc3RydWN0dXJlIHRoYXQgIAotICAqICAgICAgICAgY29udGFpbnMgYWxsIENJRCByZWdpc3RlciBwYXJhbWV0ZXJzIAorICAqIEBwYXJhbSAgaG1tYzogUG9pbnRlciB0byBNTUMgaGFuZGxlCisgICogQHBhcmFtICBwQ0lEOiBQb2ludGVyIHRvIGEgSEFMX01NQ19DSURUeXBlZGVmIHN0cnVjdHVyZSB0aGF0CisgICogICAgICAgICBjb250YWlucyBhbGwgQ0lEIHJlZ2lzdGVyIHBhcmFtZXRlcnMKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9NTUNfR2V0Q2FyZENJRChNTUNfSGFuZGxlVHlwZURlZiAqaG1tYywgSEFMX01NQ19DYXJkQ0lEVHlwZURlZiAqcENJRCkKIHsKLSAgdWludDMyX3QgdG1wID0gMFU7Ci0gIAotICAvKiBCeXRlIDAgKi8KLSAgdG1wID0gKHVpbnQ4X3QpKChobW1jLT5DSURbMFVdICYgMHhGRjAwMDAwMFUpID4+IDI0VSk7Ci0gIHBDSUQtPk1hbnVmYWN0dXJlcklEID0gdG1wOwotICAKLSAgLyogQnl0ZSAxICovCi0gIHRtcCA9ICh1aW50OF90KSgoaG1tYy0+Q0lEWzBVXSAmIDB4MDBGRjAwMDBVKSA+PiAxNlUpOwotICBwQ0lELT5PRU1fQXBwbGlJRCA9IHRtcCA8PCA4VTsKLSAgCi0gIC8qIEJ5dGUgMiAqLwotICB0bXAgPSAodWludDhfdCkoKGhtbWMtPkNJRFswVV0gJiAweDAwMDAwMEZGMDBVKSA+PiA4VSk7Ci0gIHBDSUQtPk9FTV9BcHBsaUlEIHw9IHRtcDsKLSAgCi0gIC8qIEJ5dGUgMyAqLwotICB0bXAgPSAodWludDhfdCkoaG1tYy0+Q0lEWzBVXSAmIDB4MDAwMDAwRkZVKTsKLSAgcENJRC0+UHJvZE5hbWUxID0gdG1wIDw8IDI0VTsKLSAgCi0gIC8qIEJ5dGUgNCAqLwotICB0bXAgPSAodWludDhfdCkoKGhtbWMtPkNJRFsxVV0gJiAweEZGMDAwMDAwVSkgPj4gMjRVKTsKLSAgcENJRC0+UHJvZE5hbWUxIHw9IHRtcCA8PCAxNlU7Ci0gIAotICAvKiBCeXRlIDUgKi8KLSAgdG1wID0gKHVpbnQ4X3QpKChobW1jLT5DSURbMVVdICYgMHgwMEZGMDAwMFUpID4+IDE2VSk7Ci0gIHBDSUQtPlByb2ROYW1lMSB8PSB0bXAgPDwgOFU7Ci0gIAotICAvKiBCeXRlIDYgKi8KLSAgdG1wID0gKHVpbnQ4X3QpKChobW1jLT5DSURbMVVdICYgMHgwMDAwRkYwMFUpID4+IDhVKTsKLSAgcENJRC0+UHJvZE5hbWUxIHw9IHRtcDsKLSAgCi0gIC8qIEJ5dGUgNyAqLwotICB0bXAgPSAodWludDhfdCkoaG1tYy0+Q0lEWzFVXSAmIDB4MDAwMDAwRkZVKTsKLSAgcENJRC0+UHJvZE5hbWUyID0gdG1wOwotICAKLSAgLyogQnl0ZSA4ICovCi0gIHRtcCA9ICh1aW50OF90KSgoaG1tYy0+Q0lEWzJVXSAmIDB4RkYwMDAwMDBVKSA+PiAyNFUpOwotICBwQ0lELT5Qcm9kUmV2ID0gdG1wOwotICAKLSAgLyogQnl0ZSA5ICovCi0gIHRtcCA9ICh1aW50OF90KSgoaG1tYy0+Q0lEWzJVXSAmIDB4MDBGRjAwMDBVKSA+PiAxNlUpOwotICBwQ0lELT5Qcm9kU04gPSB0bXAgPDwgMjRVOwotICAKLSAgLyogQnl0ZSAxMCAqLwotICB0bXAgPSAodWludDhfdCkoKGhtbWMtPkNJRFsyVV0gJiAweDAwMDBGRjAwVSkgPj4gOFUpOwotICBwQ0lELT5Qcm9kU04gfD0gdG1wIDw8IDE2VTsKLSAgCi0gIC8qIEJ5dGUgMTEgKi8KLSAgdG1wID0gKHVpbnQ4X3QpKGhtbWMtPkNJRFsyVV0gJiAweDAwMDAwMEZGVSk7Ci0gIHBDSUQtPlByb2RTTiB8PSB0bXAgPDwgOFU7Ci0gIAotICAvKiBCeXRlIDEyICovCi0gIHRtcCA9ICh1aW50OF90KSgoaG1tYy0+Q0lEWzNVXSAmIDB4RkYwMDAwMDBVKSA+PiAyNFUpOwotICBwQ0lELT5Qcm9kU04gfD0gdG1wOwotICAKLSAgLyogQnl0ZSAxMyAqLwotICB0bXAgPSAodWludDhfdCkoKGhtbWMtPkNJRFszVV0gJiAweDAwRkYwMDAwVSkgPj4gMTZVKTsKLSAgcENJRC0+UmVzZXJ2ZWQxICAgfD0gKHRtcCAmIDB4RjBVKSA+PiA0VTsKLSAgcENJRC0+TWFudWZhY3REYXRlID0gKHRtcCAmIDB4MEZVKSA8PCA4VTsKLSAgCi0gIC8qIEJ5dGUgMTQgKi8KLSAgdG1wID0gKHVpbnQ4X3QpKChobW1jLT5DSURbM1VdICYgMHgwMDAwRkYwMFUpID4+IDhVKTsKLSAgcENJRC0+TWFudWZhY3REYXRlIHw9IHRtcDsKLSAgCi0gIC8qIEJ5dGUgMTUgKi8KLSAgdG1wID0gKHVpbnQ4X3QpKGhtbWMtPkNJRFszVV0gJiAweDAwMDAwMEZGVSk7Ci0gIHBDSUQtPkNJRF9DUkMgICA9ICh0bXAgJiAweEZFVSkgPj4gMVU7CisgIHBDSUQtPk1hbnVmYWN0dXJlcklEID0gKHVpbnQ4X3QpKChobW1jLT5DSURbMF0gJiAweEZGMDAwMDAwVSkgPj4gMjRVKTsKKworICBwQ0lELT5PRU1fQXBwbGlJRCA9ICh1aW50MTZfdCkoKGhtbWMtPkNJRFswXSAmIDB4MDBGRkZGMDBVKSA+PiA4VSk7CisKKyAgcENJRC0+UHJvZE5hbWUxID0gKCgoaG1tYy0+Q0lEWzBdICYgMHgwMDAwMDBGRlUpIDw8IDI0VSkgfCAoKGhtbWMtPkNJRFsxXSAmIDB4RkZGRkZGMDBVKSA+PiA4VSkpOworCisgIHBDSUQtPlByb2ROYW1lMiA9ICh1aW50OF90KShobW1jLT5DSURbMV0gJiAweDAwMDAwMEZGVSk7CisKKyAgcENJRC0+UHJvZFJldiA9ICh1aW50OF90KSgoaG1tYy0+Q0lEWzJdICYgMHhGRjAwMDAwMFUpID4+IDI0VSk7CisKKyAgcENJRC0+UHJvZFNOID0gKCgoaG1tYy0+Q0lEWzJdICYgMHgwMEZGRkZGRlUpIDw8IDhVKSB8ICgoaG1tYy0+Q0lEWzNdICYgMHhGRjAwMDAwMFUpID4+IDI0VSkpOworCisgIHBDSUQtPlJlc2VydmVkMSA9ICh1aW50OF90KSgoaG1tYy0+Q0lEWzNdICYgMHgwMEYwMDAwMFUpID4+IDIwVSk7CisKKyAgcENJRC0+TWFudWZhY3REYXRlID0gKHVpbnQxNl90KSgoaG1tYy0+Q0lEWzNdICYgMHgwMDBGRkYwMFUpID4+IDhVKTsKKworICBwQ0lELT5DSURfQ1JDID0gKHVpbnQ4X3QpKChobW1jLT5DSURbM10gJiAweDAwMDAwMEZFVSkgPj4gMVUpOworCiAgIHBDSUQtPlJlc2VydmVkMiA9IDFVOwogCiAgIHJldHVybiBIQUxfT0s7CkBAIC0yMDQ3LDEyMyArMjAzOCwxMDIgQEAKIC8qKgogICAqIEBicmllZiAgUmV0dXJucyBpbmZvcm1hdGlvbiB0aGUgaW5mb3JtYXRpb24gb2YgdGhlIGNhcmQgd2hpY2ggYXJlIHN0b3JlZCBvbgogICAqICAgICAgICAgdGhlIENTRCByZWdpc3Rlci4KLSAgKiBAcGFyYW0gIGhtbWMgUG9pbnRlciB0byBNTUMgaGFuZGxlCi0gICogQHBhcmFtICBwQ1NEIFBvaW50ZXIgdG8gYSBIQUxfTU1DX0NhcmRJbmZvVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCAgCi0gICogICAgICAgICBjb250YWlucyBhbGwgQ1NEIHJlZ2lzdGVyIHBhcmFtZXRlcnMgIAorICAqIEBwYXJhbSAgaG1tYzogUG9pbnRlciB0byBNTUMgaGFuZGxlCisgICogQHBhcmFtICBwQ1NEOiBQb2ludGVyIHRvIGEgSEFMX01NQ19DYXJkQ1NEVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdAorICAqICAgICAgICAgY29udGFpbnMgYWxsIENTRCByZWdpc3RlciBwYXJhbWV0ZXJzCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfTU1DX0dldENhcmRDU0QoTU1DX0hhbmRsZVR5cGVEZWYgKmhtbWMsIEhBTF9NTUNfQ2FyZENTRFR5cGVEZWYgKnBDU0QpCiB7Ci0gIHVpbnQzMl90IHRtcCA9IDBVOwotICAKLSAgLyogQnl0ZSAwICovCi0gIHRtcCA9IChobW1jLT5DU0RbMFVdICYgMHhGRjAwMDAwMFUpID4+IDI0VTsKLSAgcENTRC0+Q1NEU3RydWN0ICAgICAgPSAodWludDhfdCkoKHRtcCAmIDB4QzBVKSA+PiA2VSk7Ci0gIHBDU0QtPlN5c1NwZWNWZXJzaW9uID0gKHVpbnQ4X3QpKCh0bXAgJiAweDNDVSkgPj4gMlUpOwotICBwQ1NELT5SZXNlcnZlZDEgICAgICA9IHRtcCAmIDB4MDNVOwotICAKLSAgLyogQnl0ZSAxICovCi0gIHRtcCA9IChobW1jLT5DU0RbMFVdICYgMHgwMEZGMDAwMFUpID4+IDE2VTsKLSAgcENTRC0+VEFBQyA9ICh1aW50OF90KXRtcDsKLSAgCi0gIC8qIEJ5dGUgMiAqLwotICB0bXAgPSAoaG1tYy0+Q1NEWzBVXSAmIDB4MDAwMEZGMDBVKSA+PiA4VTsKLSAgcENTRC0+TlNBQyA9ICh1aW50OF90KXRtcDsKLSAgCi0gIC8qIEJ5dGUgMyAqLwotICB0bXAgPSBobW1jLT5DU0RbMFVdICYgMHgwMDAwMDBGRlU7Ci0gIHBDU0QtPk1heEJ1c0Nsa0ZyZWMgPSAodWludDhfdCl0bXA7Ci0gIAotICAvKiBCeXRlIDQgKi8KLSAgdG1wID0gKGhtbWMtPkNTRFsxVV0gJiAweEZGMDAwMDAwVSkgPj4gMjRVOwotICBwQ1NELT5DYXJkQ29tZENsYXNzZXMgPSAodWludDE2X3QpKHRtcCA8PCA0VSk7Ci0gIAotICAvKiBCeXRlIDUgKi8KLSAgdG1wID0gKGhtbWMtPkNTRFsxVV0gJiAweDAwRkYwMDAwVSkgPj4gMTZVOwotICBwQ1NELT5DYXJkQ29tZENsYXNzZXMgfD0gKHVpbnQxNl90KSgodG1wICYgMHhGMFUpID4+IDRVKTsKLSAgcENTRC0+UmRCbG9ja0xlbiAgICAgICA9ICh1aW50OF90KSh0bXAgJiAweDBGVSk7Ci0gIAotICAvKiBCeXRlIDYgKi8KLSAgdG1wID0gKGhtbWMtPkNTRFsxVV0gJiAweDAwMDBGRjAwVSkgPj4gOFU7Ci0gIHBDU0QtPlBhcnRCbG9ja1JlYWQgICA9ICh1aW50OF90KSgodG1wICYgMHg4MFUpID4+IDdVKTsKLSAgcENTRC0+V3JCbG9ja01pc2FsaWduID0gKHVpbnQ4X3QpKCh0bXAgJiAweDQwVSkgPj4gNlUpOwotICBwQ1NELT5SZEJsb2NrTWlzYWxpZ24gPSAodWludDhfdCkoKHRtcCAmIDB4MjBVKSA+PiA1VSk7Ci0gIHBDU0QtPkRTUkltcGwgICAgICAgICA9ICh1aW50OF90KSgodG1wICYgMHgxMFUpID4+IDRVKTsKLSAgcENTRC0+UmVzZXJ2ZWQyICAgICAgID0gMDsgLyohPCBSZXNlcnZlZCAqLwotICAgICAgIAotICBwQ1NELT5EZXZpY2VTaXplID0gKHRtcCAmIDB4MDNVKSA8PCAxMFU7Ci0gIAotICAvKiBCeXRlIDcgKi8KLSAgdG1wID0gKHVpbnQ4X3QpKGhtbWMtPkNTRFsxVV0gJiAweDAwMDAwMEZGVSk7Ci0gIHBDU0QtPkRldmljZVNpemUgfD0gKHRtcCkgPDwgMlU7Ci0gIAotICAvKiBCeXRlIDggKi8KLSAgdG1wID0gKHVpbnQ4X3QpKChobW1jLT5DU0RbMlVdICYgMHhGRjAwMDAwMFUpID4+IDI0VSk7Ci0gIHBDU0QtPkRldmljZVNpemUgfD0gKHRtcCAmIDB4QzBVKSA+PiA2VTsKLSAgCi0gIHBDU0QtPk1heFJkQ3VycmVudFZERE1pbiA9ICh0bXAgJiAweDM4VSkgPj4gM1U7Ci0gIHBDU0QtPk1heFJkQ3VycmVudFZERE1heCA9ICh0bXAgJiAweDA3VSk7Ci0gIAotICAvKiBCeXRlIDkgKi8KLSAgdG1wID0gKHVpbnQ4X3QpKChobW1jLT5DU0RbMlVdICYgMHgwMEZGMDAwMFUpID4+IDE2VSk7Ci0gIHBDU0QtPk1heFdyQ3VycmVudFZERE1pbiA9ICh0bXAgJiAweEUwVSkgPj4gNVU7Ci0gIHBDU0QtPk1heFdyQ3VycmVudFZERE1heCA9ICh0bXAgJiAweDFDVSkgPj4gMlU7Ci0gIHBDU0QtPkRldmljZVNpemVNdWwgICAgICA9ICh0bXAgJiAweDAzVSkgPDwgMVU7Ci0gIC8qIEJ5dGUgMTAgKi8KLSAgdG1wID0gKHVpbnQ4X3QpKChobW1jLT5DU0RbMl0gJiAweDAwMDBGRjAwVSkgPj4gOFUpOwotICBwQ1NELT5EZXZpY2VTaXplTXVsIHw9ICh0bXAgJiAweDgwVSkgPj4gN1U7Ci0gIAorICBwQ1NELT5DU0RTdHJ1Y3QgPSAodWludDhfdCkoKGhtbWMtPkNTRFswXSAmIDB4QzAwMDAwMDBVKSA+PiAzMFUpOworCisgIHBDU0QtPlN5c1NwZWNWZXJzaW9uID0gKHVpbnQ4X3QpKChobW1jLT5DU0RbMF0gJiAweDNDMDAwMDAwVSkgPj4gMjZVKTsKKworICBwQ1NELT5SZXNlcnZlZDEgPSAodWludDhfdCkoKGhtbWMtPkNTRFswXSAmIDB4MDMwMDAwMDBVKSA+PiAyNFUpOworCisgIHBDU0QtPlRBQUMgPSAodWludDhfdCkoKGhtbWMtPkNTRFswXSAmIDB4MDBGRjAwMDBVKSA+PiAxNlUpOworCisgIHBDU0QtPk5TQUMgPSAodWludDhfdCkoKGhtbWMtPkNTRFswXSAmIDB4MDAwMEZGMDBVKSA+PiA4VSk7CisKKyAgcENTRC0+TWF4QnVzQ2xrRnJlYyA9ICh1aW50OF90KShobW1jLT5DU0RbMF0gJiAweDAwMDAwMEZGVSk7CisKKyAgcENTRC0+Q2FyZENvbWRDbGFzc2VzID0gKHVpbnQxNl90KSgoaG1tYy0+Q1NEWzFdICYgMHhGRkYwMDAwMFUpID4+IDIwVSk7CisKKyAgcENTRC0+UmRCbG9ja0xlbiA9ICh1aW50OF90KSgoaG1tYy0+Q1NEWzFdICYgMHgwMDBGMDAwMFUpID4+IDE2VSk7CisKKyAgcENTRC0+UGFydEJsb2NrUmVhZCAgID0gKHVpbnQ4X3QpKChobW1jLT5DU0RbMV0gJiAweDAwMDA4MDAwVSkgPj4gMTVVKTsKKworICBwQ1NELT5XckJsb2NrTWlzYWxpZ24gPSAodWludDhfdCkoKGhtbWMtPkNTRFsxXSAmIDB4MDAwMDQwMDBVKSA+PiAxNFUpOworCisgIHBDU0QtPlJkQmxvY2tNaXNhbGlnbiA9ICh1aW50OF90KSgoaG1tYy0+Q1NEWzFdICYgMHgwMDAwMjAwMFUpID4+IDEzVSk7CisKKyAgcENTRC0+RFNSSW1wbCA9ICh1aW50OF90KSgoaG1tYy0+Q1NEWzFdICYgMHgwMDAwMTAwMFUpID4+IDEyVSk7CisKKyAgcENTRC0+UmVzZXJ2ZWQyID0gMFU7IC8qITwgUmVzZXJ2ZWQgKi8KKworICBwQ1NELT5EZXZpY2VTaXplID0gKCgoaG1tYy0+Q1NEWzFdICYgMHgwMDAwMDNGRlUpIDw8IDJVKSB8ICgoaG1tYy0+Q1NEWzJdICYgMHhDMDAwMDAwMFUpID4+IDMwVSkpOworCisgIHBDU0QtPk1heFJkQ3VycmVudFZERE1pbiA9ICh1aW50OF90KSgoaG1tYy0+Q1NEWzJdICYgMHgzODAwMDAwMFUpID4+IDI3VSk7CisKKyAgcENTRC0+TWF4UmRDdXJyZW50VkRETWF4ID0gKHVpbnQ4X3QpKChobW1jLT5DU0RbMl0gJiAweDA3MDAwMDAwVSkgPj4gMjRVKTsKKworICBwQ1NELT5NYXhXckN1cnJlbnRWRERNaW4gPSAodWludDhfdCkoKGhtbWMtPkNTRFsyXSAmIDB4MDBFMDAwMDBVKSA+PiAyMVUpOworCisgIHBDU0QtPk1heFdyQ3VycmVudFZERE1heCA9ICh1aW50OF90KSgoaG1tYy0+Q1NEWzJdICYgMHgwMDFDMDAwMFUpID4+IDE4VSk7CisKKyAgcENTRC0+RGV2aWNlU2l6ZU11bCA9ICh1aW50OF90KSgoaG1tYy0+Q1NEWzJdICYgMHgwMDAzODAwMFUpID4+IDE1VSk7CisKICAgaG1tYy0+TW1jQ2FyZC5CbG9ja05iciAgPSAocENTRC0+RGV2aWNlU2l6ZSArIDFVKSA7Ci0gIGhtbWMtPk1tY0NhcmQuQmxvY2tOYnIgKj0gKDFVIDw8IChwQ1NELT5EZXZpY2VTaXplTXVsICsgMlUpKTsKLSAgaG1tYy0+TW1jQ2FyZC5CbG9ja1NpemUgPSAxVSA8PCAocENTRC0+UmRCbG9ja0xlbik7Ci0gIAotICBobW1jLT5NbWNDYXJkLkxvZ0Jsb2NrTmJyID0gIChobW1jLT5NbWNDYXJkLkJsb2NrTmJyKSAqICgoaG1tYy0+TW1jQ2FyZC5CbG9ja1NpemUpIC8gNTEyVSk7IAorICBobW1jLT5NbWNDYXJkLkJsb2NrTmJyICo9ICgxVUwgPDwgKChwQ1NELT5EZXZpY2VTaXplTXVsICYgMHgwN1UpICsgMlUpKTsKKyAgaG1tYy0+TW1jQ2FyZC5CbG9ja1NpemUgPSAoMVVMIDw8IChwQ1NELT5SZEJsb2NrTGVuICYgMHgwRlUpKTsKKworICBobW1jLT5NbWNDYXJkLkxvZ0Jsb2NrTmJyID0gIChobW1jLT5NbWNDYXJkLkJsb2NrTmJyKSAqICgoaG1tYy0+TW1jQ2FyZC5CbG9ja1NpemUpIC8gNTEyVSk7CiAgIGhtbWMtPk1tY0NhcmQuTG9nQmxvY2tTaXplID0gNTEyVTsKICAgCi0gIHBDU0QtPkVyYXNlR3JTaXplID0gKHRtcCAmIDB4NDBVKSA+PiA2VTsKLSAgcENTRC0+RXJhc2VHck11bCAgPSAodG1wICYgMHgzRlUpIDw8IDFVOwotICAKLSAgLyogQnl0ZSAxMSAqLwotICB0bXAgPSAodWludDhfdCkoaG1tYy0+Q1NEWzJVXSAmIDB4MDAwMDAwRkZVKTsKLSAgcENTRC0+RXJhc2VHck11bCAgICAgfD0gKHRtcCAmIDB4ODBVKSA+PiA3VTsKLSAgcENTRC0+V3JQcm90ZWN0R3JTaXplID0gKHRtcCAmIDB4N0ZVKTsKLSAgCi0gIC8qIEJ5dGUgMTIgKi8KLSAgdG1wID0gKHVpbnQ4X3QpKChobW1jLT5DU0RbM1VdICYgMHhGRjAwMDAwMFUpID4+IDI0VSk7Ci0gIHBDU0QtPldyUHJvdGVjdEdyRW5hYmxlID0gKHRtcCAmIDB4ODBVKSA+PiA3VTsKLSAgcENTRC0+TWFuRGVmbEVDQyAgICAgICAgPSAodG1wICYgMHg2MFUpID4+IDVVOwotICBwQ1NELT5XclNwZWVkRmFjdCAgICAgICA9ICh0bXAgJiAweDFDVSkgPj4gMlU7Ci0gIHBDU0QtPk1heFdyQmxvY2tMZW4gICAgID0gKHRtcCAmIDB4MDNVKSA8PCAyVTsKLSAgCi0gIC8qIEJ5dGUgMTMgKi8KLSAgdG1wID0gKHVpbnQ4X3QpKChobW1jLT5DU0RbM1VdICYgMHgwMEZGMDAwMFUpID4+IDE2VSk7Ci0gIHBDU0QtPk1heFdyQmxvY2tMZW4gICAgICB8PSAodG1wICYgMHhDMFUpID4+IDZVOwotICBwQ1NELT5Xcml0ZUJsb2NrUGFQYXJ0aWFsID0gKHRtcCAmIDB4MjBVKSA+PiA1VTsKLSAgcENTRC0+UmVzZXJ2ZWQzICAgICAgICAgICA9IDBVOwotICBwQ1NELT5Db250ZW50UHJvdGVjdEFwcGxpID0gKHRtcCAmIDB4MDFVKTsKLSAgCi0gIC8qIEJ5dGUgMTQgKi8KLSAgdG1wID0gKHVpbnQ4X3QpKChobW1jLT5DU0RbM1VdICYgMHgwMDAwRkYwMFUpID4+IDhVKTsKLSAgcENTRC0+RmlsZUZvcm1hdEdyb3VvcCA9ICh0bXAgJiAweDgwVSkgPj4gN1U7Ci0gIHBDU0QtPkNvcHlGbGFnICAgICAgICAgPSAodG1wICYgMHg0MFUpID4+IDZVOwotICBwQ1NELT5QZXJtV3JQcm90ZWN0ICAgID0gKHRtcCAmIDB4MjBVKSA+PiA1VTsKLSAgcENTRC0+VGVtcFdyUHJvdGVjdCAgICA9ICh0bXAgJiAweDEwVSkgPj4gNFU7Ci0gIHBDU0QtPkZpbGVGb3JtYXQgICAgICAgPSAodG1wICYgMHgwQ1UpID4+IDJVOwotICBwQ1NELT5FQ0MgICAgICAgICAgICAgID0gKHRtcCAmIDB4MDNVKTsKLSAgCi0gIC8qIEJ5dGUgMTUgKi8KLSAgdG1wID0gKHVpbnQ4X3QpKGhtbWMtPkNTRFszVV0gJiAweDAwMDAwMEZGVSk7Ci0gIHBDU0QtPkNTRF9DUkMgICA9ICh0bXAgJiAweEZFVSkgPj4gMVU7Ci0gIHBDU0QtPlJlc2VydmVkNCA9IDFVOwotICAKKyAgcENTRC0+RXJhc2VHclNpemUgPSAodWludDhfdCkoKGhtbWMtPkNTRFsyXSAmIDB4MDAwMDQwMDBVKSA+PiAxNFUpOworCisgIHBDU0QtPkVyYXNlR3JNdWwgPSAodWludDhfdCkoKGhtbWMtPkNTRFsyXSAmIDB4MDAwMDNGODBVKSA+PiA3VSk7CisKKyAgcENTRC0+V3JQcm90ZWN0R3JTaXplID0gKHVpbnQ4X3QpKGhtbWMtPkNTRFsyXSAmIDB4MDAwMDAwN0ZVKTsKKworICBwQ1NELT5XclByb3RlY3RHckVuYWJsZSA9ICh1aW50OF90KSgoaG1tYy0+Q1NEWzNdICYgMHg4MDAwMDAwMFUpID4+IDMxVSk7CisKKyAgcENTRC0+TWFuRGVmbEVDQyA9ICh1aW50OF90KSgoaG1tYy0+Q1NEWzNdICYgMHg2MDAwMDAwMFUpID4+IDI5VSk7CisKKyAgcENTRC0+V3JTcGVlZEZhY3QgPSAodWludDhfdCkoKGhtbWMtPkNTRFszXSAmIDB4MUMwMDAwMDBVKSA+PiAyNlUpOworCisgIHBDU0QtPk1heFdyQmxvY2tMZW49ICh1aW50OF90KSgoaG1tYy0+Q1NEWzNdICYgMHgwM0MwMDAwMFUpID4+IDIyVSk7CisKKyAgcENTRC0+V3JpdGVCbG9ja1BhUGFydGlhbCA9ICh1aW50OF90KSgoaG1tYy0+Q1NEWzNdICYgMHgwMDIwMDAwMFUpID4+IDIxVSk7CisKKyAgcENTRC0+UmVzZXJ2ZWQzID0gMDsKKworICBwQ1NELT5Db250ZW50UHJvdGVjdEFwcGxpID0gKHVpbnQ4X3QpKChobW1jLT5DU0RbM10gJiAweDAwMDEwMDAwVSkgPj4gMTZVKTsKKworICBwQ1NELT5GaWxlRm9ybWF0R3JvdXAgPSAodWludDhfdCkoKGhtbWMtPkNTRFszXSAmIDB4MDAwMDgwMDBVKSA+PiAxNVUpOworCisgIHBDU0QtPkNvcHlGbGFnID0gKHVpbnQ4X3QpKChobW1jLT5DU0RbM10gJiAweDAwMDA0MDAwVSkgPj4gMTRVKTsKKworICBwQ1NELT5QZXJtV3JQcm90ZWN0ID0gKHVpbnQ4X3QpKChobW1jLT5DU0RbM10gJiAweDAwMDAyMDAwVSkgPj4gMTNVKTsKKworICBwQ1NELT5UZW1wV3JQcm90ZWN0ID0gKHVpbnQ4X3QpKChobW1jLT5DU0RbM10gJiAweDAwMDAxMDAwVSkgPj4gMTJVKTsKKworICBwQ1NELT5GaWxlRm9ybWF0ID0gKHVpbnQ4X3QpKChobW1jLT5DU0RbM10gJiAweDAwMDAwQzAwVSkgPj4gMTBVKTsKKworICBwQ1NELT5FQ0M9ICh1aW50OF90KSgoaG1tYy0+Q1NEWzNdICYgMHgwMDAwMDMwMFUpID4+IDhVKTsKKworICBwQ1NELT5DU0RfQ1JDID0gKHVpbnQ4X3QpKChobW1jLT5DU0RbM10gJiAweDAwMDAwMEZFVSkgPj4gMVUpOworCisgIHBDU0QtPlJlc2VydmVkNCA9IDE7CisKICAgcmV0dXJuIEhBTF9PSzsKIH0KIAogLyoqCiAgICogQGJyaWVmICBHZXRzIHRoZSBNTUMgY2FyZCBpbmZvLgotICAqIEBwYXJhbSAgaG1tYyBQb2ludGVyIHRvIE1NQyBoYW5kbGUgICAgICAKLSAgKiBAcGFyYW0gIHBDYXJkSW5mbyBQb2ludGVyIHRvIHRoZSBIQUxfTU1DX0NhcmRJbmZvVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCAKLSAgKiAgICAgICAgIHdpbGwgY29udGFpbiB0aGUgTU1DIGNhcmQgc3RhdHVzIGluZm9ybWF0aW9uIAorICAqIEBwYXJhbSAgaG1tYzogUG9pbnRlciB0byBNTUMgaGFuZGxlCisgICogQHBhcmFtICBwQ2FyZEluZm86IFBvaW50ZXIgdG8gdGhlIEhBTF9NTUNfQ2FyZEluZm9UeXBlRGVmIHN0cnVjdHVyZSB0aGF0CisgICogICAgICAgICB3aWxsIGNvbnRhaW4gdGhlIE1NQyBjYXJkIHN0YXR1cyBpbmZvcm1hdGlvbgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX01NQ19HZXRDYXJkSW5mbyhNTUNfSGFuZGxlVHlwZURlZiAqaG1tYywgSEFMX01NQ19DYXJkSW5mb1R5cGVEZWYgKnBDYXJkSW5mbykKQEAgLTIxNzUsMTUgKzIxNDUsMTUgQEAKICAgcENhcmRJbmZvLT5CbG9ja1NpemUgICAgPSAodWludDMyX3QpKGhtbWMtPk1tY0NhcmQuQmxvY2tTaXplKTsKICAgcENhcmRJbmZvLT5Mb2dCbG9ja05iciAgPSAodWludDMyX3QpKGhtbWMtPk1tY0NhcmQuTG9nQmxvY2tOYnIpOwogICBwQ2FyZEluZm8tPkxvZ0Jsb2NrU2l6ZSA9ICh1aW50MzJfdCkoaG1tYy0+TW1jQ2FyZC5Mb2dCbG9ja1NpemUpOwotICAKKwogICByZXR1cm4gSEFMX09LOwogfQogCiAvKioKLSAgKiBAYnJpZWYgIEVuYWJsZXMgd2lkZSBidXMgb3BlcmF0aW9uIGZvciB0aGUgcmVxdWVzdGVkIGNhcmQgaWYgc3VwcG9ydGVkIGJ5IAorICAqIEBicmllZiAgRW5hYmxlcyB3aWRlIGJ1cyBvcGVyYXRpb24gZm9yIHRoZSByZXF1ZXN0ZWQgY2FyZCBpZiBzdXBwb3J0ZWQgYnkKICAgKiAgICAgICAgIGNhcmQuCi0gICogQHBhcmFtICBobW1jIFBvaW50ZXIgdG8gTU1DIGhhbmRsZSAgICAgICAKLSAgKiBAcGFyYW0gIFdpZGVNb2RlIFNwZWNpZmllcyB0aGUgTU1DIGNhcmQgd2lkZSBidXMgbW9kZSAKKyAgKiBAcGFyYW0gIGhtbWM6IFBvaW50ZXIgdG8gTU1DIGhhbmRsZQorICAqIEBwYXJhbSAgV2lkZU1vZGU6IFNwZWNpZmllcyB0aGUgTU1DIGNhcmQgd2lkZSBidXMgbW9kZQogICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAgICogICAgICAgICAgICBAYXJnIFNESU9fQlVTX1dJREVfOEI6IDgtYml0IGRhdGEgdHJhbnNmZXIKICAgKiAgICAgICAgICAgIEBhcmcgU0RJT19CVVNfV0lERV80QjogNC1iaXQgZGF0YSB0cmFuc2ZlcgpAQCAtMjE5NCwxNSArMjE2NCwxNSBAQAogewogICBfX0lPIHVpbnQzMl90IGNvdW50ID0gMFU7CiAgIFNESU9fSW5pdFR5cGVEZWYgSW5pdDsKLSAgdWludDMyX3QgZXJyb3JzdGF0ZSA9IEhBTF9NTUNfRVJST1JfTk9ORTsKKyAgdWludDMyX3QgZXJyb3JzdGF0ZTsKICAgdWludDMyX3QgcmVzcG9uc2UgPSAwVSwgYnVzeSA9IDBVOwotICAKKwogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfU0RJT19CVVNfV0lERShXaWRlTW9kZSkpOwotICAKKwogICAvKiBDaG5hZ2UgU2F0dGUgKi8KICAgaG1tYy0+U3RhdGUgPSBIQUxfTU1DX1NUQVRFX0JVU1k7Ci0gIAorCiAgIC8qIFVwZGF0ZSBDbG9jayBmb3IgQnVzIG1vZGUgdXBkYXRlICovCiAgIEluaXQuQ2xvY2tFZGdlICAgICAgICAgICA9IFNESU9fQ0xPQ0tfRURHRV9SSVNJTkc7CiAgIEluaXQuQ2xvY2tCeXBhc3MgICAgICAgICA9IFNESU9fQ0xPQ0tfQllQQVNTX0RJU0FCTEU7CkBAIC0yMjExLDggKzIxODEsOCBAQAogICBJbml0LkhhcmR3YXJlRmxvd0NvbnRyb2wgPSBTRElPX0hBUkRXQVJFX0ZMT1dfQ09OVFJPTF9ESVNBQkxFOwogICBJbml0LkNsb2NrRGl2ICAgICAgICAgICAgPSBTRElPX0lOSVRfQ0xLX0RJVjsKICAgLyogSW5pdGlhbGl6ZSBTRElPKi8KLSAgU0RJT19Jbml0KGhtbWMtPkluc3RhbmNlLCBJbml0KTsgCi0gICAgCisgICh2b2lkKVNESU9fSW5pdChobW1jLT5JbnN0YW5jZSwgSW5pdCk7IAorCiAgIGlmKFdpZGVNb2RlID09IFNESU9fQlVTX1dJREVfOEIpCiAgIHsKICAgICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kU3dpdGNoKGhtbWMtPkluc3RhbmNlLCAweDAzQjcwMjAwVSk7CkBAIC0yMjQyLDUzICsyMjEyLDU1IEBACiAgICAgLyogV2lkZU1vZGUgaXMgbm90IGEgdmFsaWQgYXJndW1lbnQqLwogICAgIGhtbWMtPkVycm9yQ29kZSB8PSBIQUxfTU1DX0VSUk9SX1BBUkFNOwogICB9Ci0gIAorCiAgIC8qIENoZWNrIGZvciBzd2l0Y2ggZXJyb3IgYW5kIHZpb2xhdGlvbiBvZiB0aGUgdHJpYWwgbnVtYmVyIG9mIHNlbmRpbmcgQ01EIDEzICovCiAgIHdoaWxlKGJ1c3kgPT0gMFUpCiAgIHsKLSAgICBpZihjb3VudCsrID09IFNETU1DX01BWF9UUklBTCkKKyAgICBpZihjb3VudCA9PSBTRE1NQ19NQVhfVFJJQUwpCiAgICAgewogICAgICAgaG1tYy0+U3RhdGUgPSBIQUxfTU1DX1NUQVRFX1JFQURZOwogICAgICAgaG1tYy0+RXJyb3JDb2RlIHw9IEhBTF9NTUNfRVJST1JfUkVRVUVTVF9OT1RfQVBQTElDQUJMRTsKICAgICAgIHJldHVybiBIQUxfRVJST1I7CiAgICAgfQotICAgIAorICAgIGNvdW50Kys7CisKICAgICAvKiBXaGlsZSBjYXJkIGlzIG5vdCByZWFkeSBmb3IgZGF0YSBhbmQgdHJpYWwgbnVtYmVyIGZvciBzZW5kaW5nIENNRDEzIGlzIG5vdCBleGNlZWRlZCAqLwogICAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRTZW5kU3RhdHVzKGhtbWMtPkluc3RhbmNlLCAodWludDMyX3QpKCgodWludDMyX3QpaG1tYy0+TW1jQ2FyZC5SZWxDYXJkQWRkKSA8PCAxNlUpKTsKICAgICBpZihlcnJvcnN0YXRlICE9IEhBTF9NTUNfRVJST1JfTk9ORSkKICAgICB7CiAgICAgICBobW1jLT5FcnJvckNvZGUgfD0gZXJyb3JzdGF0ZTsKICAgICB9Ci0gICAgCisKICAgICAvKiBHZXQgY29tbWFuZCByZXNwb25zZSAqLwogICAgIHJlc3BvbnNlID0gU0RJT19HZXRSZXNwb25zZShobW1jLT5JbnN0YW5jZSwgU0RJT19SRVNQMSk7Ci0gICAgCisKICAgICAvKiBHZXQgb3BlcmF0aW5nIHZvbHRhZ2UqLwogICAgIGJ1c3kgPSAoKChyZXNwb25zZSA+PiA3VSkgPT0gMVUpID8gMFUgOiAxVSk7CiAgIH0KLSAgICAgIAorCiAgIC8qIFdoaWxlIGNhcmQgaXMgbm90IHJlYWR5IGZvciBkYXRhIGFuZCB0cmlhbCBudW1iZXIgZm9yIHNlbmRpbmcgQ01EMTMgaXMgbm90IGV4Y2VlZGVkICovCiAgIGNvdW50ID0gU0RNTUNfREFUQVRJTUVPVVQ7CiAgIHdoaWxlKChyZXNwb25zZSAmIDB4MDAwMDAxMDBVKSA9PSAwVSkKICAgewotICAgIGlmKGNvdW50LS0gPT0gMFUpCisgICAgaWYoY291bnQgPT0gMFUpCiAgICAgewogICAgICAgaG1tYy0+U3RhdGUgPSBIQUxfTU1DX1NUQVRFX1JFQURZOwogICAgICAgaG1tYy0+RXJyb3JDb2RlIHw9IEhBTF9NTUNfRVJST1JfUkVRVUVTVF9OT1RfQVBQTElDQUJMRTsKICAgICAgIHJldHVybiBIQUxfRVJST1I7CiAgICAgfQotICAgIAorICAgIGNvdW50LS07CisKICAgICAvKiBXaGlsZSBjYXJkIGlzIG5vdCByZWFkeSBmb3IgZGF0YSBhbmQgdHJpYWwgbnVtYmVyIGZvciBzZW5kaW5nIENNRDEzIGlzIG5vdCBleGNlZWRlZCAqLwogICAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRTZW5kU3RhdHVzKGhtbWMtPkluc3RhbmNlLCAodWludDMyX3QpKCgodWludDMyX3QpaG1tYy0+TW1jQ2FyZC5SZWxDYXJkQWRkKSA8PCAxNlUpKTsKICAgICBpZihlcnJvcnN0YXRlICE9IEhBTF9NTUNfRVJST1JfTk9ORSkKICAgICB7CiAgICAgICBobW1jLT5FcnJvckNvZGUgfD0gZXJyb3JzdGF0ZTsKICAgICB9Ci0gICAgCisKICAgICAvKiBHZXQgY29tbWFuZCByZXNwb25zZSAqLwogICAgIHJlc3BvbnNlID0gU0RJT19HZXRSZXNwb25zZShobW1jLT5JbnN0YW5jZSwgU0RJT19SRVNQMSk7CiAgIH0KLSAgCisKICAgaWYoaG1tYy0+RXJyb3JDb2RlICE9IEhBTF9NTUNfRVJST1JfTk9ORSkKICAgewogICAgIC8qIENsZWFyIGFsbCB0aGUgc3RhdGljIGZsYWdzICovCkBAIC0yMzA1LDU1ICsyMjc3LDU0IEBACiAgICAgSW5pdC5CdXNXaWRlICAgICAgICAgICAgID0gV2lkZU1vZGU7CiAgICAgSW5pdC5IYXJkd2FyZUZsb3dDb250cm9sID0gaG1tYy0+SW5pdC5IYXJkd2FyZUZsb3dDb250cm9sOwogICAgIEluaXQuQ2xvY2tEaXYgICAgICAgICAgICA9IGhtbWMtPkluaXQuQ2xvY2tEaXY7Ci0gICAgU0RJT19Jbml0KGhtbWMtPkluc3RhbmNlLCBJbml0KTsKKyAgICAodm9pZClTRElPX0luaXQoaG1tYy0+SW5zdGFuY2UsIEluaXQpOwogICB9CiAKICAgLyogQ2hhbmdlIFN0YXRlICovCiAgIGhtbWMtPlN0YXRlID0gSEFMX01NQ19TVEFURV9SRUFEWTsKLSAgCisKICAgcmV0dXJuIEhBTF9PSzsKIH0KIAotCiAvKioKICAgKiBAYnJpZWYgIEdldHMgdGhlIGN1cnJlbnQgbW1jIGNhcmQgZGF0YSBzdGF0ZS4KLSAgKiBAcGFyYW0gIGhtbWMgcG9pbnRlciB0byBNTUMgaGFuZGxlCisgICogQHBhcmFtICBobW1jOiBwb2ludGVyIHRvIE1NQyBoYW5kbGUKICAgKiBAcmV0dmFsIENhcmQgc3RhdGUKICAgKi8KIEhBTF9NTUNfQ2FyZFN0YXRlVHlwZURlZiBIQUxfTU1DX0dldENhcmRTdGF0ZShNTUNfSGFuZGxlVHlwZURlZiAqaG1tYykKIHsKLSAgSEFMX01NQ19DYXJkU3RhdGVUeXBlRGVmIGNhcmRzdGF0ZSA9ICBIQUxfTU1DX0NBUkRfVFJBTlNGRVI7Ci0gIHVpbnQzMl90IGVycm9yc3RhdGUgPSBIQUxfTU1DX0VSUk9SX05PTkU7CisgIHVpbnQzMl90IGNhcmRzdGF0ZTsKKyAgdWludDMyX3QgZXJyb3JzdGF0ZTsKICAgdWludDMyX3QgcmVzcDEgPSAwVTsKLSAgCisKICAgZXJyb3JzdGF0ZSA9IE1NQ19TZW5kU3RhdHVzKGhtbWMsICZyZXNwMSk7Ci0gIGlmKGVycm9yc3RhdGUgIT0gSEFMX09LKQorICBpZihlcnJvcnN0YXRlICE9IEhBTF9NTUNfRVJST1JfTk9ORSkKICAgewogICAgIGhtbWMtPkVycm9yQ29kZSB8PSBlcnJvcnN0YXRlOwogICB9CiAKLSAgY2FyZHN0YXRlID0gKEhBTF9NTUNfQ2FyZFN0YXRlVHlwZURlZikoKHJlc3AxID4+IDlVKSAmIDB4MEZVKTsKLSAgCi0gIHJldHVybiBjYXJkc3RhdGU7CisgIGNhcmRzdGF0ZSA9ICgocmVzcDEgPj4gOVUpICYgMHgwRlUpOworCisgIHJldHVybiAoSEFMX01NQ19DYXJkU3RhdGVUeXBlRGVmKWNhcmRzdGF0ZTsKIH0KIAogLyoqCiAgICogQGJyaWVmICBBYm9ydCB0aGUgY3VycmVudCB0cmFuc2ZlciBhbmQgZGlzYWJsZSB0aGUgTU1DLgotICAqIEBwYXJhbSAgaG1tYyBwb2ludGVyIHRvIGEgTU1DX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKKyAgKiBAcGFyYW0gIGhtbWM6IHBvaW50ZXIgdG8gYSBNTUNfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucwogICAqICAgICAgICAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciBNTUMgbW9kdWxlLgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX01NQ19BYm9ydChNTUNfSGFuZGxlVHlwZURlZiAqaG1tYykKIHsKICAgSEFMX01NQ19DYXJkU3RhdGVUeXBlRGVmIENhcmRTdGF0ZTsKLSAgCisKICAgLyogRElzYWJsZSBBbGwgaW50ZXJydXB0cyAqLwogICBfX0hBTF9NTUNfRElTQUJMRV9JVChobW1jLCBTRElPX0lUX0RBVEFFTkQgfCBTRElPX0lUX0RDUkNGQUlMIHwgU0RJT19JVF9EVElNRU9VVHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBTRElPX0lUX1RYVU5ERVJSfCBTRElPX0lUX1JYT1ZFUlIpOwotICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0RJT19JVF9UWFVOREVSUnwgU0RJT19JVF9SWE9WRVJSKTsKKwogICAvKiBDbGVhciBBbGwgZmxhZ3MgKi8KLSAgX19IQUxfTU1DX0NMRUFSX0ZMQUcoaG1tYywgU0RJT19TVEFUSUNfRkxBR1MpOwotICAKKyAgX19IQUxfTU1DX0NMRUFSX0ZMQUcoaG1tYywgU0RJT19TVEFUSUNfREFUQV9GTEFHUyk7CisKICAgaWYoKGhtbWMtPmhkbWF0eCAhPSBOVUxMKSB8fCAoaG1tYy0+aGRtYXJ4ICE9IE5VTEwpKQogICB7CiAgICAgLyogRGlzYWJsZSB0aGUgTU1DIERNQSByZXF1ZXN0ICovCkBAIC0yMzYyLDE2ICsyMzMzLDI2IEBACiAgICAgLyogQWJvcnQgdGhlIE1NQyBETUEgVHggU3RyZWFtICovCiAgICAgaWYoaG1tYy0+aGRtYXR4ICE9IE5VTEwpCiAgICAgewotICAgICAgSEFMX0RNQV9BYm9ydChobW1jLT5oZG1hdHgpOworICAgICAgaWYoSEFMX0RNQV9BYm9ydChobW1jLT5oZG1hdHgpICE9IEhBTF9PSykKKyAgICAgIHsKKyAgICAgICAgaG1tYy0+RXJyb3JDb2RlIHw9IEhBTF9NTUNfRVJST1JfRE1BOworICAgICAgfQogICAgIH0KICAgICAvKiBBYm9ydCB0aGUgTU1DIERNQSBSeCBTdHJlYW0gKi8KICAgICBpZihobW1jLT5oZG1hcnggIT0gTlVMTCkKICAgICB7Ci0gICAgICBIQUxfRE1BX0Fib3J0KGhtbWMtPmhkbWFyeCk7CisgICAgICBpZihIQUxfRE1BX0Fib3J0KGhtbWMtPmhkbWFyeCkgIT0gSEFMX09LKQorICAgICAgeworICAgICAgICBobW1jLT5FcnJvckNvZGUgfD0gSEFMX01NQ19FUlJPUl9ETUE7CisgICAgICB9CiAgICAgfQogICB9Ci0gIAorCiAgIGhtbWMtPlN0YXRlID0gSEFMX01NQ19TVEFURV9SRUFEWTsKKworICAvKiBJbml0aWFsaXplIHRoZSBNTUMgb3BlcmF0aW9uICovCisgIGhtbWMtPkNvbnRleHQgPSBNTUNfQ09OVEVYVF9OT05FOworCiAgIENhcmRTdGF0ZSA9IEhBTF9NTUNfR2V0Q2FyZFN0YXRlKGhtbWMpOwogICBpZigoQ2FyZFN0YXRlID09IEhBTF9NTUNfQ0FSRF9SRUNFSVZJTkcpIHx8IChDYXJkU3RhdGUgPT0gSEFMX01NQ19DQVJEX1NFTkRJTkcpKQogICB7CkBAIC0yMzg2LDIxICsyMzY3LDIxIEBACiAKIC8qKgogICAqIEBicmllZiAgQWJvcnQgdGhlIGN1cnJlbnQgdHJhbnNmZXIgYW5kIGRpc2FibGUgdGhlIE1NQyAoSVQgbW9kZSkuCi0gICogQHBhcmFtICBobW1jIHBvaW50ZXIgdG8gYSBNTUNfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucworICAqIEBwYXJhbSAgaG1tYzogcG9pbnRlciB0byBhIE1NQ19IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCiAgICogICAgICAgICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIE1NQyBtb2R1bGUuCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfTU1DX0Fib3J0X0lUKE1NQ19IYW5kbGVUeXBlRGVmICpobW1jKQogewogICBIQUxfTU1DX0NhcmRTdGF0ZVR5cGVEZWYgQ2FyZFN0YXRlOwotICAgIAorCiAgIC8qIERJc2FibGUgQWxsIGludGVycnVwdHMgKi8KICAgX19IQUxfTU1DX0RJU0FCTEVfSVQoaG1tYywgU0RJT19JVF9EQVRBRU5EIHwgU0RJT19JVF9EQ1JDRkFJTCB8IFNESU9fSVRfRFRJTUVPVVR8XAogICAgICAgICAgICAgICAgICAgICAgICAgICAgU0RJT19JVF9UWFVOREVSUnwgU0RJT19JVF9SWE9WRVJSKTsKLSAgCisKICAgLyogQ2xlYXIgQWxsIGZsYWdzICovCi0gIF9fSEFMX01NQ19DTEVBUl9GTEFHKGhtbWMsIFNESU9fU1RBVElDX0ZMQUdTKTsKLSAgCisgIF9fSEFMX01NQ19DTEVBUl9GTEFHKGhtbWMsIFNESU9fU1RBVElDX0RBVEFfRkxBR1MpOworCiAgIGlmKChobW1jLT5oZG1hdHggIT0gTlVMTCkgfHwgKGhtbWMtPmhkbWFyeCAhPSBOVUxMKSkKICAgewogICAgIC8qIERpc2FibGUgdGhlIE1NQyBETUEgcmVxdWVzdCAqLwpAQCAtMjQzMSw2ICsyNDEyLDcgQEAKICAgewogICAgIENhcmRTdGF0ZSA9IEhBTF9NTUNfR2V0Q2FyZFN0YXRlKGhtbWMpOwogICAgIGhtbWMtPlN0YXRlID0gSEFMX01NQ19TVEFURV9SRUFEWTsKKwogICAgIGlmKChDYXJkU3RhdGUgPT0gSEFMX01NQ19DQVJEX1JFQ0VJVklORykgfHwgKENhcmRTdGF0ZSA9PSBIQUxfTU1DX0NBUkRfU0VORElORykpCiAgICAgewogICAgICAgaG1tYy0+RXJyb3JDb2RlID0gU0RNTUNfQ21kU3RvcFRyYW5zZmVyKGhtbWMtPkluc3RhbmNlKTsKQEAgLTI0NDEsMjkgKzI0MjMsMzMgQEAKICAgICB9CiAgICAgZWxzZQogICAgIHsKKyNpZiBkZWZpbmVkIChVU0VfSEFMX01NQ19SRUdJU1RFUl9DQUxMQkFDS1MpICYmIChVU0VfSEFMX01NQ19SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMVUpCisgICAgICBobW1jLT5BYm9ydENwbHRDYWxsYmFjayhobW1jKTsKKyNlbHNlCiAgICAgICBIQUxfTU1DX0Fib3J0Q2FsbGJhY2soaG1tYyk7CisjZW5kaWYKICAgICB9CiAgIH0KLSAgCisKICAgcmV0dXJuIEhBTF9PSzsKIH0KIAogLyoqCiAgICogQH0KICAgKi8KLSAgCisKIC8qKgogICAqIEB9CiAgICovCi0gIAotLyogUHJpdmF0ZSBmdW5jdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8gIAorCisvKiBQcml2YXRlIGZ1bmN0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyoqIEBhZGR0b2dyb3VwIE1NQ19Qcml2YXRlX0Z1bmN0aW9ucwogICAqIEB7CiAgICovCiAKIC8qKgogICAqIEBicmllZiAgRE1BIE1NQyB0cmFuc21pdCBwcm9jZXNzIGNvbXBsZXRlIGNhbGxiYWNrIAotICAqIEBwYXJhbSAgaGRtYSBETUEgaGFuZGxlCisgICogQHBhcmFtICBoZG1hOiBETUEgaGFuZGxlCiAgICogQHJldHZhbCBOb25lCiAgICovCiBzdGF0aWMgdm9pZCBNTUNfRE1BVHJhbnNtaXRDcGx0KERNQV9IYW5kbGVUeXBlRGVmICpoZG1hKSAgICAgCkBAIC0yNDc2LDEzICsyNDYyLDEzIEBACiAKIC8qKgogICAqIEBicmllZiAgRE1BIE1NQyByZWNlaXZlIHByb2Nlc3MgY29tcGxldGUgY2FsbGJhY2sgCi0gICogQHBhcmFtICBoZG1hIERNQSBoYW5kbGUKKyAgKiBAcGFyYW0gIGhkbWE6IERNQSBoYW5kbGUKICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KIHN0YXRpYyB2b2lkIE1NQ19ETUFSZWNlaXZlQ3BsdChETUFfSGFuZGxlVHlwZURlZiAqaGRtYSkgIAogewogICBNTUNfSGFuZGxlVHlwZURlZiogaG1tYyA9IChNTUNfSGFuZGxlVHlwZURlZiogKShoZG1hLT5QYXJlbnQpOwotICB1aW50MzJfdCBlcnJvcnN0YXRlID0gSEFMX01NQ19FUlJPUl9OT05FOworICB1aW50MzJfdCBlcnJvcnN0YXRlOwogICAKICAgLyogU2VuZCBzdG9wIGNvbW1hbmQgaW4gbXVsdGlibG9jayB3cml0ZSAqLwogICBpZihobW1jLT5Db250ZXh0ID09IChNTUNfQ09OVEVYVF9SRUFEX01VTFRJUExFX0JMT0NLIHwgTU1DX0NPTlRFWFRfRE1BKSkKQEAgLTI0OTEsNyArMjQ3Nyw3IEBACiAgICAgaWYoZXJyb3JzdGF0ZSAhPSBIQUxfTU1DX0VSUk9SX05PTkUpCiAgICAgewogICAgICAgaG1tYy0+RXJyb3JDb2RlIHw9IGVycm9yc3RhdGU7Ci0jaWYgKFVTRV9IQUxfTU1DX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxKQorI2lmIGRlZmluZWQgKFVTRV9IQUxfTU1DX1JFR0lTVEVSX0NBTExCQUNLUykgJiYgKFVTRV9IQUxfTU1DX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxVSkKICAgICAgIGhtbWMtPkVycm9yQ2FsbGJhY2soaG1tYyk7CiAjZWxzZQogICAgICAgSEFMX01NQ19FcnJvckNhbGxiYWNrKGhtbWMpOwpAQCAtMjUwNCwxMSArMjQ5MCwxMSBAQAogICBobW1jLT5JbnN0YW5jZS0+RENUUkwgJj0gKHVpbnQzMl90KX4oKHVpbnQzMl90KVNESU9fRENUUkxfRE1BRU4pOwogICAKICAgLyogQ2xlYXIgYWxsIHRoZSBzdGF0aWMgZmxhZ3MgKi8KLSAgX19IQUxfTU1DX0NMRUFSX0ZMQUcoaG1tYywgU0RJT19TVEFUSUNfRkxBR1MpOworICBfX0hBTF9NTUNfQ0xFQVJfRkxBRyhobW1jLCBTRElPX1NUQVRJQ19EQVRBX0ZMQUdTKTsKICAgCiAgIGhtbWMtPlN0YXRlID0gSEFMX01NQ19TVEFURV9SRUFEWTsKIAotI2lmIChVU0VfSEFMX01NQ19SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkKKyNpZiBkZWZpbmVkIChVU0VfSEFMX01NQ19SRUdJU1RFUl9DQUxMQkFDS1MpICYmIChVU0VfSEFMX01NQ19SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMVUpCiAgIGhtbWMtPlJ4Q3BsdENhbGxiYWNrKGhtbWMpOwogI2Vsc2UKICAgSEFMX01NQ19SeENwbHRDYWxsYmFjayhobW1jKTsKQEAgLTI1MTcsNDQgKzI1MDMsNTAgQEAKIAogLyoqCiAgICogQGJyaWVmICBETUEgTU1DIGNvbW11bmljYXRpb24gZXJyb3IgY2FsbGJhY2sgCi0gICogQHBhcmFtICBoZG1hIERNQSBoYW5kbGUKKyAgKiBAcGFyYW0gIGhkbWE6IERNQSBoYW5kbGUKICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KIHN0YXRpYyB2b2lkIE1NQ19ETUFFcnJvcihETUFfSGFuZGxlVHlwZURlZiAqaGRtYSkgICAKIHsKICAgTU1DX0hhbmRsZVR5cGVEZWYqIGhtbWMgPSAoTU1DX0hhbmRsZVR5cGVEZWYqICkoaGRtYS0+UGFyZW50KTsKICAgSEFMX01NQ19DYXJkU3RhdGVUeXBlRGVmIENhcmRTdGF0ZTsKKyAgdWludDMyX3QgUnhFcnJvckNvZGUsIFR4RXJyb3JDb2RlOwogICAKLSAgaWYoKGhtbWMtPmhkbWFyeC0+RXJyb3JDb2RlID09IEhBTF9ETUFfRVJST1JfVEUpIHx8IChobW1jLT5oZG1hdHgtPkVycm9yQ29kZSA9PSBIQUxfRE1BX0VSUk9SX1RFKSkKKyAgLyogaWYgRE1BIGVycm9yIGlzIEZJRk8gZXJyb3IgaWdub3JlIGl0ICovCisgIGlmKEhBTF9ETUFfR2V0RXJyb3IoaGRtYSkgIT0gSEFMX0RNQV9FUlJPUl9GRSkKICAgewotICAgIC8qIENsZWFyIEFsbCBmbGFncyAqLwotICAgIF9fSEFMX01NQ19DTEVBUl9GTEFHKGhtbWMsIFNESU9fU1RBVElDX0ZMQUdTKTsKLSAgICAKLSAgICAvKiBEaXNhYmxlIEFsbCBpbnRlcnJ1cHRzICovCi0gICAgX19IQUxfTU1DX0RJU0FCTEVfSVQoaG1tYywgU0RJT19JVF9EQVRBRU5EIHwgU0RJT19JVF9EQ1JDRkFJTCB8IFNESU9fSVRfRFRJTUVPVVR8XAotICAgICAgU0RJT19JVF9UWFVOREVSUnwgU0RJT19JVF9SWE9WRVJSKTsKLSAgICAKLSAgICBobW1jLT5FcnJvckNvZGUgfD0gSEFMX01NQ19FUlJPUl9ETUE7Ci0gICAgQ2FyZFN0YXRlID0gSEFMX01NQ19HZXRDYXJkU3RhdGUoaG1tYyk7Ci0gICAgaWYoKENhcmRTdGF0ZSA9PSBIQUxfTU1DX0NBUkRfUkVDRUlWSU5HKSB8fCAoQ2FyZFN0YXRlID09IEhBTF9NTUNfQ0FSRF9TRU5ESU5HKSkKKyAgICBSeEVycm9yQ29kZSA9IGhtbWMtPmhkbWFyeC0+RXJyb3JDb2RlOworICAgIFR4RXJyb3JDb2RlID0gaG1tYy0+aGRtYXR4LT5FcnJvckNvZGU7ICAKKyAgICBpZigoUnhFcnJvckNvZGUgPT0gSEFMX0RNQV9FUlJPUl9URSkgfHwgKFR4RXJyb3JDb2RlID09IEhBTF9ETUFfRVJST1JfVEUpKQogICAgIHsKLSAgICAgIGhtbWMtPkVycm9yQ29kZSB8PSBTRE1NQ19DbWRTdG9wVHJhbnNmZXIoaG1tYy0+SW5zdGFuY2UpOworICAgICAgLyogQ2xlYXIgQWxsIGZsYWdzICovCisgICAgICBfX0hBTF9NTUNfQ0xFQVJfRkxBRyhobW1jLCBTRElPX1NUQVRJQ19GTEFHUyk7CisgICAgICAKKyAgICAgIC8qIERpc2FibGUgQWxsIGludGVycnVwdHMgKi8KKyAgICAgIF9fSEFMX01NQ19ESVNBQkxFX0lUKGhtbWMsIFNESU9fSVRfREFUQUVORCB8IFNESU9fSVRfRENSQ0ZBSUwgfCBTRElPX0lUX0RUSU1FT1VUfFwKKyAgICAgICAgU0RJT19JVF9UWFVOREVSUnwgU0RJT19JVF9SWE9WRVJSKTsKKyAgICAgIAorICAgICAgaG1tYy0+RXJyb3JDb2RlIHw9IEhBTF9NTUNfRVJST1JfRE1BOworICAgICAgQ2FyZFN0YXRlID0gSEFMX01NQ19HZXRDYXJkU3RhdGUoaG1tYyk7CisgICAgICBpZigoQ2FyZFN0YXRlID09IEhBTF9NTUNfQ0FSRF9SRUNFSVZJTkcpIHx8IChDYXJkU3RhdGUgPT0gSEFMX01NQ19DQVJEX1NFTkRJTkcpKQorICAgICAgeworICAgICAgICBobW1jLT5FcnJvckNvZGUgfD0gU0RNTUNfQ21kU3RvcFRyYW5zZmVyKGhtbWMtPkluc3RhbmNlKTsKKyAgICAgIH0KKyAgICAgIAorICAgICAgaG1tYy0+U3RhdGU9IEhBTF9NTUNfU1RBVEVfUkVBRFk7CiAgICAgfQogICAgIAotICAgIGhtbWMtPlN0YXRlPSBIQUxfTU1DX1NUQVRFX1JFQURZOwotICB9Ci0KLSNpZiAoVVNFX0hBTF9NTUNfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCi0gIGhtbWMtPkVycm9yQ2FsbGJhY2soaG1tYyk7CisjaWYgZGVmaW5lZCAoVVNFX0hBTF9NTUNfUkVHSVNURVJfQ0FMTEJBQ0tTKSAmJiAoVVNFX0hBTF9NTUNfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDFVKQorICAgIGhtbWMtPkVycm9yQ2FsbGJhY2soaG1tYyk7CiAjZWxzZQotICBIQUxfTU1DX0Vycm9yQ2FsbGJhY2soaG1tYyk7CisgICAgSEFMX01NQ19FcnJvckNhbGxiYWNrKGhtbWMpOwogI2VuZGlmCi0KKyAgfQogfQogCiAvKioKICAgKiBAYnJpZWYgIERNQSBNTUMgVHggQWJvcnQgY2FsbGJhY2sgCi0gICogQHBhcmFtICBoZG1hIERNQSBoYW5kbGUKKyAgKiBAcGFyYW0gIGhkbWE6IERNQSBoYW5kbGUKICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KIHN0YXRpYyB2b2lkIE1NQ19ETUFUeEFib3J0KERNQV9IYW5kbGVUeXBlRGVmICpoZG1hKSAgIApAQCAtMjU3OSwxMSArMjU3MSwxNSBAQAogICAgICAgCiAgICAgICBpZihobW1jLT5FcnJvckNvZGUgIT0gSEFMX01NQ19FUlJPUl9OT05FKQogICAgICAgeworI2lmIGRlZmluZWQgKFVTRV9IQUxfTU1DX1JFR0lTVEVSX0NBTExCQUNLUykgJiYgKFVTRV9IQUxfTU1DX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxVSkKKyAgICAgICAgaG1tYy0+QWJvcnRDcGx0Q2FsbGJhY2soaG1tYyk7CisjZWxzZQogICAgICAgICBIQUxfTU1DX0Fib3J0Q2FsbGJhY2soaG1tYyk7CisjZW5kaWYKICAgICAgIH0KICAgICAgIGVsc2UKICAgICAgIHsKLSNpZiAoVVNFX0hBTF9NTUNfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCisjaWYgZGVmaW5lZCAoVVNFX0hBTF9NTUNfUkVHSVNURVJfQ0FMTEJBQ0tTKSAmJiAoVVNFX0hBTF9NTUNfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDFVKQogICAgICAgICBobW1jLT5FcnJvckNhbGxiYWNrKGhtbWMpOwogI2Vsc2UKICAgICAgICAgSEFMX01NQ19FcnJvckNhbGxiYWNrKGhtbWMpOwpAQCAtMjU5NSw3ICsyNTkxLDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBETUEgTU1DIFJ4IEFib3J0IGNhbGxiYWNrIAotICAqIEBwYXJhbSAgaGRtYSBETUEgaGFuZGxlCisgICogQHBhcmFtICBoZG1hOiBETUEgaGFuZGxlCiAgICogQHJldHZhbCBOb25lCiAgICovCiBzdGF0aWMgdm9pZCBNTUNfRE1BUnhBYm9ydChETUFfSGFuZGxlVHlwZURlZiAqaGRtYSkgICAKQEAgLTI2MjAsMTEgKzI2MTYsMTUgQEAKICAgICAgIAogICAgICAgaWYoaG1tYy0+RXJyb3JDb2RlICE9IEhBTF9NTUNfRVJST1JfTk9ORSkKICAgICAgIHsKKyNpZiBkZWZpbmVkIChVU0VfSEFMX01NQ19SRUdJU1RFUl9DQUxMQkFDS1MpICYmIChVU0VfSEFMX01NQ19SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMVUpCisgICAgICAgIGhtbWMtPkFib3J0Q3BsdENhbGxiYWNrKGhtbWMpOworI2Vsc2UKICAgICAgICAgSEFMX01NQ19BYm9ydENhbGxiYWNrKGhtbWMpOworI2VuZGlmCiAgICAgICB9CiAgICAgICBlbHNlCiAgICAgICB7Ci0jaWYgKFVTRV9IQUxfTU1DX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxKQorI2lmIGRlZmluZWQgKFVTRV9IQUxfTU1DX1JFR0lTVEVSX0NBTExCQUNLUykgJiYgKFVTRV9IQUxfTU1DX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxVSkKICAgICAgICAgaG1tYy0+RXJyb3JDYWxsYmFjayhobW1jKTsKICNlbHNlCiAgICAgICAgIEhBTF9NTUNfRXJyb3JDYWxsYmFjayhobW1jKTsKQEAgLTI2MzQsMjUgKzI2MzQsMjQgQEAKICAgfQogfQogCi0KIC8qKgogICAqIEBicmllZiAgSW5pdGlhbGl6ZXMgdGhlIG1tYyBjYXJkLgotICAqIEBwYXJhbSAgaG1tYyBQb2ludGVyIHRvIE1NQyBoYW5kbGUKKyAgKiBAcGFyYW0gIGhtbWM6IFBvaW50ZXIgdG8gTU1DIGhhbmRsZQogICAqIEByZXR2YWwgTU1DIENhcmQgZXJyb3Igc3RhdGUKICAgKi8KIHN0YXRpYyB1aW50MzJfdCBNTUNfSW5pdENhcmQoTU1DX0hhbmRsZVR5cGVEZWYgKmhtbWMpCiB7CiAgIEhBTF9NTUNfQ2FyZENTRFR5cGVEZWYgQ1NEOwotICB1aW50MzJfdCBlcnJvcnN0YXRlID0gSEFMX01NQ19FUlJPUl9OT05FOwotICB1aW50MTZfdCBtbWNfcmNhID0gMTsKLSAgCisgIHVpbnQzMl90IGVycm9yc3RhdGU7CisgIHVpbnQxNl90IG1tY19yY2EgPSAxVTsKKwogICAvKiBDaGVjayB0aGUgcG93ZXIgU3RhdGUgKi8KLSAgaWYoU0RJT19HZXRQb3dlclN0YXRlKGhtbWMtPkluc3RhbmNlKSA9PSAwVSkgCisgIGlmKFNESU9fR2V0UG93ZXJTdGF0ZShobW1jLT5JbnN0YW5jZSkgPT0gMFUpCiAgIHsKICAgICAvKiBQb3dlciBvZmYgKi8KICAgICByZXR1cm4gSEFMX01NQ19FUlJPUl9SRVFVRVNUX05PVF9BUFBMSUNBQkxFOwogICB9Ci0gIAorCiAgIC8qIFNlbmQgQ01EMiBBTExfU0VORF9DSUQgKi8KICAgZXJyb3JzdGF0ZSA9IFNETU1DX0NtZFNlbmRDSUQoaG1tYy0+SW5zdGFuY2UpOwogICBpZihlcnJvcnN0YXRlICE9IEhBTF9NTUNfRVJST1JfTk9ORSkKQEAgLTI2NjcsNyArMjY2Niw3IEBACiAgICAgaG1tYy0+Q0lEWzJVXSA9IFNESU9fR2V0UmVzcG9uc2UoaG1tYy0+SW5zdGFuY2UsIFNESU9fUkVTUDMpOwogICAgIGhtbWMtPkNJRFszVV0gPSBTRElPX0dldFJlc3BvbnNlKGhtbWMtPkluc3RhbmNlLCBTRElPX1JFU1A0KTsKICAgfQotICAKKwogICAvKiBTZW5kIENNRDMgU0VUX1JFTF9BRERSIHdpdGggYXJndW1lbnQgMCAqLwogICAvKiBNTUMgQ2FyZCBwdWJsaXNoZXMgaXRzIFJDQS4gKi8KICAgZXJyb3JzdGF0ZSA9IFNETU1DX0NtZFNldFJlbEFkZChobW1jLT5JbnN0YW5jZSwgJm1tY19yY2EpOwpAQCAtMjY3NSwxMCArMjY3NCwxMCBAQAogICB7CiAgICAgcmV0dXJuIGVycm9yc3RhdGU7CiAgIH0KLSAgCisKICAgLyogR2V0IHRoZSBNTUMgY2FyZCBSQ0EgKi8KICAgaG1tYy0+TW1jQ2FyZC5SZWxDYXJkQWRkID0gbW1jX3JjYTsKLSAgCisKICAgLyogU2VuZCBDTUQ5IFNFTkRfQ1NEIHdpdGggYXJndW1lbnQgYXMgY2FyZCdzIFJDQSAqLwogICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kU2VuZENTRChobW1jLT5JbnN0YW5jZSwgKHVpbnQzMl90KShobW1jLT5NbWNDYXJkLlJlbENhcmRBZGQgPDwgMTZVKSk7CiAgIGlmKGVycm9yc3RhdGUgIT0gSEFMX01NQ19FUlJPUl9OT05FKQpAQCAtMjY5MywyMiArMjY5MiwyNSBAQAogICAgIGhtbWMtPkNTRFsyVV0gPSBTRElPX0dldFJlc3BvbnNlKGhtbWMtPkluc3RhbmNlLCBTRElPX1JFU1AzKTsKICAgICBobW1jLT5DU0RbM1VdID0gU0RJT19HZXRSZXNwb25zZShobW1jLT5JbnN0YW5jZSwgU0RJT19SRVNQNCk7CiAgIH0KLSAgCisKICAgLyogR2V0IHRoZSBDYXJkIENsYXNzICovCiAgIGhtbWMtPk1tY0NhcmQuQ2xhc3MgPSAoU0RJT19HZXRSZXNwb25zZShobW1jLT5JbnN0YW5jZSwgU0RJT19SRVNQMikgPj4gMjBVKTsKLSAgCisKICAgLyogR2V0IENTRCBwYXJhbWV0ZXJzICovCi0gIEhBTF9NTUNfR2V0Q2FyZENTRChobW1jLCAmQ1NEKTsKKyAgaWYgKEhBTF9NTUNfR2V0Q2FyZENTRChobW1jLCAmQ1NEKSAhPSBIQUxfT0spCisgIHsKKyAgICByZXR1cm4gaG1tYy0+RXJyb3JDb2RlOworICB9CiAKICAgLyogU2VsZWN0IHRoZSBDYXJkICovCi0gZXJyb3JzdGF0ZSA9IFNETU1DX0NtZFNlbERlc2VsKGhtbWMtPkluc3RhbmNlLCAodWludDMyX3QpKCgodWludDMyX3QpaG1tYy0+TW1jQ2FyZC5SZWxDYXJkQWRkKSA8PCAxNlUpKTsKLSBpZihlcnJvcnN0YXRlICE9IEhBTF9NTUNfRVJST1JfTk9ORSkKLSB7Ci0gICByZXR1cm4gZXJyb3JzdGF0ZTsKLSB9CisgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRTZWxEZXNlbChobW1jLT5JbnN0YW5jZSwgKHVpbnQzMl90KSgoKHVpbnQzMl90KWhtbWMtPk1tY0NhcmQuUmVsQ2FyZEFkZCkgPDwgMTZVKSk7CisgIGlmKGVycm9yc3RhdGUgIT0gSEFMX01NQ19FUlJPUl9OT05FKQorICB7CisgICAgcmV0dXJuIGVycm9yc3RhdGU7CisgIH0KIAogICAvKiBDb25maWd1cmUgU0RJTyBwZXJpcGhlcmFsIGludGVyZmFjZSAqLwotICBTRElPX0luaXQoaG1tYy0+SW5zdGFuY2UsIGhtbWMtPkluaXQpOworICAodm9pZClTRElPX0luaXQoaG1tYy0+SW5zdGFuY2UsIGhtbWMtPkluaXQpOwogCiAgIC8qIEFsbCBjYXJkcyBhcmUgaW5pdGlhbGl6ZWQgKi8KICAgcmV0dXJuIEhBTF9NTUNfRVJST1JfTk9ORTsKQEAgLTI3MTgsMTUgKzI3MjAsMTUgQEAKICAgKiBAYnJpZWYgIEVucXVpcmVzIGNhcmRzIGFib3V0IHRoZWlyIG9wZXJhdGluZyB2b2x0YWdlIGFuZCBjb25maWd1cmVzIGNsb2NrCiAgICogICAgICAgICBjb250cm9scyBhbmQgc3RvcmVzIE1NQyBpbmZvcm1hdGlvbiB0aGF0IHdpbGwgYmUgbmVlZGVkIGluIGZ1dHVyZQogICAqICAgICAgICAgaW4gdGhlIE1NQyBoYW5kbGUuCi0gICogQHBhcmFtICBobW1jIFBvaW50ZXIgdG8gTU1DIGhhbmRsZQorICAqIEBwYXJhbSAgaG1tYzogUG9pbnRlciB0byBNTUMgaGFuZGxlCiAgICogQHJldHZhbCBlcnJvciBzdGF0ZQogICAqLwogc3RhdGljIHVpbnQzMl90IE1NQ19Qb3dlck9OKE1NQ19IYW5kbGVUeXBlRGVmICpobW1jKQogewogICBfX0lPIHVpbnQzMl90IGNvdW50ID0gMFU7CiAgIHVpbnQzMl90IHJlc3BvbnNlID0gMFUsIHZhbGlkdm9sdGFnZSA9IDBVOwotICB1aW50MzJfdCBlcnJvcnN0YXRlID0gSEFMX01NQ19FUlJPUl9OT05FOwotICAKKyAgdWludDMyX3QgZXJyb3JzdGF0ZTsKKwogICAvKiBDTUQwOiBHT19JRExFX1NUQVRFICovCiAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRHb0lkbGVTdGF0ZShobW1jLT5JbnN0YW5jZSk7CiAgIGlmKGVycm9yc3RhdGUgIT0gSEFMX01NQ19FUlJPUl9OT05FKQpAQCAtMjc0MCwxMzMgKzI3NDIsMTU3IEBACiAgICAgewogICAgICAgcmV0dXJuIEhBTF9NTUNfRVJST1JfSU5WQUxJRF9WT0xUUkFOR0U7CiAgICAgfQotICAgIAorCiAgICAgLyogU0VORCBDTUQxIEFQUF9DTUQgd2l0aCBNTUNfSElHSF9WT0xUQUdFX1JBTkdFKDB4QzBGRjgwMDApIGFzIGFyZ3VtZW50ICovCiAgICAgZXJyb3JzdGF0ZSA9IFNETU1DX0NtZE9wQ29uZGl0aW9uKGhtbWMtPkluc3RhbmNlLCBlTU1DX0hJR0hfVk9MVEFHRV9SQU5HRSk7CiAgICAgaWYoZXJyb3JzdGF0ZSAhPSBIQUxfTU1DX0VSUk9SX05PTkUpCiAgICAgewogICAgICAgcmV0dXJuIEhBTF9NTUNfRVJST1JfVU5TVVBQT1JURURfRkVBVFVSRTsKICAgICB9Ci0gICAgCisKICAgICAvKiBHZXQgY29tbWFuZCByZXNwb25zZSAqLwogICAgIHJlc3BvbnNlID0gU0RJT19HZXRSZXNwb25zZShobW1jLT5JbnN0YW5jZSwgU0RJT19SRVNQMSk7Ci0gICAgCisKICAgICAvKiBHZXQgb3BlcmF0aW5nIHZvbHRhZ2UqLwogICAgIHZhbGlkdm9sdGFnZSA9ICgoKHJlc3BvbnNlID4+IDMxVSkgPT0gMVUpID8gMVUgOiAwVSk7CiAgIH0KLSAgCisKICAgLyogV2hlbiBwb3dlciByb3V0aW5lIGlzIGZpbmlzaGVkIGFuZCBjb21tYW5kIHJldHVybnMgdmFsaWQgdm9sdGFnZSAqLwotICBpZiAoKHJlc3BvbnNlICYgZU1NQ19ISUdIX1ZPTFRBR0VfUkFOR0UpID09IE1NQ19ISUdIX1ZPTFRBR0VfUkFOR0UpCisgIGlmICgoKHJlc3BvbnNlICYgKDB4RkYwMDAwMDBVKSkgPj4gMjRVKSA9PSAweEMwVSkKICAgewotICAgIC8qIFdoZW4gdm9sdGFnZSByYW5nZSBvZiB0aGUgY2FyZCBpcyB3aXRoaW4gMi43ViBhbmQgMy42ViAqLwotICAgIGhtbWMtPk1tY0NhcmQuQ2FyZFR5cGUgPSBNTUNfSElHSF9WT0xUQUdFX0NBUkQ7CisgICAgaG1tYy0+TW1jQ2FyZC5DYXJkVHlwZSA9IE1NQ19ISUdIX0NBUEFDSVRZX0NBUkQ7CiAgIH0KICAgZWxzZQogICB7Ci0gICAgLyogV2hlbiB2b2x0YWdlIHJhbmdlIG9mIHRoZSBjYXJkIGlzIHdpdGhpbiAxLjY1ViBhbmQgMS45NVYgb3IgMi43ViBhbmQgMy42ViAqLwotICAgIGhtbWMtPk1tY0NhcmQuQ2FyZFR5cGUgPSBNTUNfRFVBTF9WT0xUQUdFX0NBUkQ7CisgICAgaG1tYy0+TW1jQ2FyZC5DYXJkVHlwZSA9IE1NQ19MT1dfQ0FQQUNJVFlfQ0FSRDsKICAgfQotICAKKwogICByZXR1cm4gSEFMX01NQ19FUlJPUl9OT05FOwogfQogCiAvKioKICAgKiBAYnJpZWYgIFR1cm5zIHRoZSBTRElPIG91dHB1dCBzaWduYWxzIG9mZi4KLSAgKiBAcGFyYW0gIGhtbWMgUG9pbnRlciB0byBNTUMgaGFuZGxlCi0gICogQHJldHZhbCBIQUwgc3RhdHVzCisgICogQHBhcmFtICBobW1jOiBQb2ludGVyIHRvIE1NQyBoYW5kbGUKKyAgKiBAcmV0dmFsIE5vbmUKICAgKi8KLXN0YXRpYyBIQUxfU3RhdHVzVHlwZURlZiBNTUNfUG93ZXJPRkYoTU1DX0hhbmRsZVR5cGVEZWYgKmhtbWMpCitzdGF0aWMgdm9pZCBNTUNfUG93ZXJPRkYoTU1DX0hhbmRsZVR5cGVEZWYgKmhtbWMpCiB7CiAgIC8qIFNldCBQb3dlciBTdGF0ZSB0byBPRkYgKi8KLSAgU0RJT19Qb3dlclN0YXRlX09GRihobW1jLT5JbnN0YW5jZSk7Ci0gIAotICByZXR1cm4gSEFMX09LOworICAodm9pZClTRElPX1Bvd2VyU3RhdGVfT0ZGKGhtbWMtPkluc3RhbmNlKTsKIH0KIAogLyoqCiAgICogQGJyaWVmICBSZXR1cm5zIHRoZSBjdXJyZW50IGNhcmQncyBzdGF0dXMuCi0gICogQHBhcmFtICBobW1jIFBvaW50ZXIgdG8gTU1DIGhhbmRsZQotICAqIEBwYXJhbSAgcENhcmRTdGF0dXMgcG9pbnRlciB0byB0aGUgYnVmZmVyIHRoYXQgd2lsbCBjb250YWluIHRoZSBNTUMgY2FyZCAKLSAgKiAgICAgICAgIHN0YXR1cyAoQ2FyZCBTdGF0dXMgcmVnaXN0ZXIpICAKKyAgKiBAcGFyYW0gIGhtbWM6IFBvaW50ZXIgdG8gTU1DIGhhbmRsZQorICAqIEBwYXJhbSAgcENhcmRTdGF0dXM6IHBvaW50ZXIgdG8gdGhlIGJ1ZmZlciB0aGF0IHdpbGwgY29udGFpbiB0aGUgTU1DIGNhcmQKKyAgKiAgICAgICAgIHN0YXR1cyAoQ2FyZCBTdGF0dXMgcmVnaXN0ZXIpCiAgICogQHJldHZhbCBlcnJvciBzdGF0ZQogICAqLwogc3RhdGljIHVpbnQzMl90IE1NQ19TZW5kU3RhdHVzKE1NQ19IYW5kbGVUeXBlRGVmICpobW1jLCB1aW50MzJfdCAqcENhcmRTdGF0dXMpCiB7Ci0gIHVpbnQzMl90IGVycm9yc3RhdGUgPSBIQUxfTU1DX0VSUk9SX05PTkU7Ci0gIAorICB1aW50MzJfdCBlcnJvcnN0YXRlOworCiAgIGlmKHBDYXJkU3RhdHVzID09IE5VTEwpCiAgIHsKICAgICByZXR1cm4gSEFMX01NQ19FUlJPUl9QQVJBTTsKICAgfQotICAKKwogICAvKiBTZW5kIFN0YXR1cyBjb21tYW5kICovCiAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRTZW5kU3RhdHVzKGhtbWMtPkluc3RhbmNlLCAodWludDMyX3QpKGhtbWMtPk1tY0NhcmQuUmVsQ2FyZEFkZCA8PCAxNlUpKTsKLSAgaWYoZXJyb3JzdGF0ZSAhPSBIQUxfT0spCisgIGlmKGVycm9yc3RhdGUgIT0gSEFMX01NQ19FUlJPUl9OT05FKQogICB7CiAgICAgcmV0dXJuIGVycm9yc3RhdGU7CiAgIH0KLSAgCisKICAgLyogR2V0IE1NQyBjYXJkIHN0YXR1cyAqLwogICAqcENhcmRTdGF0dXMgPSBTRElPX0dldFJlc3BvbnNlKGhtbWMtPkluc3RhbmNlLCBTRElPX1JFU1AxKTsKLSAgCisKICAgcmV0dXJuIEhBTF9NTUNfRVJST1JfTk9ORTsKIH0KIAogLyoqCiAgICogQGJyaWVmICBXcmFwIHVwIHJlYWRpbmcgaW4gbm9uLWJsb2NraW5nIG1vZGUuCi0gICogQHBhcmFtICBobW1jIHBvaW50ZXIgdG8gYSBNTUNfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucworICAqIEBwYXJhbSAgaG1tYzogcG9pbnRlciB0byBhIE1NQ19IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCiAgICogICAgICAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uLgotICAqIEByZXR2YWwgSEFMIHN0YXR1cworICAqIEByZXR2YWwgTm9uZQogICAqLwotc3RhdGljIEhBTF9TdGF0dXNUeXBlRGVmIE1NQ19SZWFkX0lUKE1NQ19IYW5kbGVUeXBlRGVmICpobW1jKQorc3RhdGljIHZvaWQgTU1DX1JlYWRfSVQoTU1DX0hhbmRsZVR5cGVEZWYgKmhtbWMpCiB7Ci0gIHVpbnQzMl90IGNvdW50OwotICB1aW50MzJfdCogdG1wOworICB1aW50MzJfdCBjb3VudCwgZGF0YSwgZGF0YXJlbWFpbmluZzsKKyAgdWludDhfdCogdG1wOwogCi0gIHRtcCA9ICh1aW50MzJfdCopaG1tYy0+cFJ4QnVmZlB0cjsKLSAgCi0gIC8qIFJlYWQgZGF0YSBmcm9tIFNETU1DIFJ4IEZJRk8gKi8KLSAgZm9yKGNvdW50ID0gMFU7IGNvdW50IDwgOFU7IGNvdW50KyspCisgIHRtcCA9IGhtbWMtPnBSeEJ1ZmZQdHI7CisgIGRhdGFyZW1haW5pbmcgPSBobW1jLT5SeFhmZXJTaXplOworCisgIGlmIChkYXRhcmVtYWluaW5nID4gMFUpCiAgIHsKLSAgICAqKHRtcCArIGNvdW50KSA9IFNESU9fUmVhZEZJRk8oaG1tYy0+SW5zdGFuY2UpOworICAgIC8qIFJlYWQgZGF0YSBmcm9tIFNESU8gUnggRklGTyAqLworICAgIGZvcihjb3VudCA9IDBVOyBjb3VudCA8IDhVOyBjb3VudCsrKQorICAgIHsKKyAgICAgIGRhdGEgPSBTRElPX1JlYWRGSUZPKGhtbWMtPkluc3RhbmNlKTsKKyAgICAgICp0bXAgPSAodWludDhfdCkoZGF0YSAmIDB4RkZVKTsKKyAgICAgIHRtcCsrOworICAgICAgZGF0YXJlbWFpbmluZy0tOworICAgICAgKnRtcCA9ICh1aW50OF90KSgoZGF0YSA+PiA4VSkgJiAweEZGVSk7CisgICAgICB0bXArKzsKKyAgICAgIGRhdGFyZW1haW5pbmctLTsKKyAgICAgICp0bXAgPSAodWludDhfdCkoKGRhdGEgPj4gMTZVKSAmIDB4RkZVKTsKKyAgICAgIHRtcCsrOworICAgICAgZGF0YXJlbWFpbmluZy0tOworICAgICAgKnRtcCA9ICh1aW50OF90KSgoZGF0YSA+PiAyNFUpICYgMHhGRlUpOworICAgICAgdG1wKys7CisgICAgICBkYXRhcmVtYWluaW5nLS07CisgICAgfQorCisgICAgaG1tYy0+cFJ4QnVmZlB0ciA9IHRtcDsKKyAgICBobW1jLT5SeFhmZXJTaXplID0gZGF0YXJlbWFpbmluZzsKICAgfQotICAKLSAgaG1tYy0+cFJ4QnVmZlB0ciArPSA4VTsKLSAgCi0gIHJldHVybiBIQUxfT0s7CiB9CiAKIC8qKgogICAqIEBicmllZiAgV3JhcCB1cCB3cml0aW5nIGluIG5vbi1ibG9ja2luZyBtb2RlLgotICAqIEBwYXJhbSAgaG1tYyBwb2ludGVyIHRvIGEgTU1DX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKKyAgKiBAcGFyYW0gIGhtbWM6IHBvaW50ZXIgdG8gYSBNTUNfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucwogICAqICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbi4KLSAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKKyAgKiBAcmV0dmFsIE5vbmUKICAgKi8KLXN0YXRpYyBIQUxfU3RhdHVzVHlwZURlZiBNTUNfV3JpdGVfSVQoTU1DX0hhbmRsZVR5cGVEZWYgKmhtbWMpCitzdGF0aWMgdm9pZCBNTUNfV3JpdGVfSVQoTU1DX0hhbmRsZVR5cGVEZWYgKmhtbWMpCiB7Ci0gIHVpbnQzMl90IGNvdW50OwotICB1aW50MzJfdCogdG1wOwotICAKLSAgdG1wID0gKHVpbnQzMl90KilobW1jLT5wVHhCdWZmUHRyOwotICAKLSAgLyogV3JpdGUgZGF0YSB0byBTRE1NQyBUeCBGSUZPICovCi0gIGZvcihjb3VudCA9IDBVOyBjb3VudCA8IDhVOyBjb3VudCsrKQorICB1aW50MzJfdCBjb3VudCwgZGF0YSwgZGF0YXJlbWFpbmluZzsKKyAgdWludDhfdCogdG1wOworCisgIHRtcCA9IGhtbWMtPnBUeEJ1ZmZQdHI7CisgIGRhdGFyZW1haW5pbmcgPSBobW1jLT5UeFhmZXJTaXplOworCisgIGlmIChkYXRhcmVtYWluaW5nID4gMFUpCiAgIHsKLSAgICBTRElPX1dyaXRlRklGTyhobW1jLT5JbnN0YW5jZSwgKHRtcCArIGNvdW50KSk7CisgICAgLyogV3JpdGUgZGF0YSB0byBTRElPIFR4IEZJRk8gKi8KKyAgICBmb3IoY291bnQgPSAwVTsgY291bnQgPCA4VTsgY291bnQrKykKKyAgICB7CisgICAgICBkYXRhID0gKHVpbnQzMl90KSgqdG1wKTsKKyAgICAgIHRtcCsrOworICAgICAgZGF0YXJlbWFpbmluZy0tOworICAgICAgZGF0YSB8PSAoKHVpbnQzMl90KSgqdG1wKSA8PCA4VSk7CisgICAgICB0bXArKzsKKyAgICAgIGRhdGFyZW1haW5pbmctLTsKKyAgICAgIGRhdGEgfD0gKCh1aW50MzJfdCkoKnRtcCkgPDwgMTZVKTsKKyAgICAgIHRtcCsrOworICAgICAgZGF0YXJlbWFpbmluZy0tOworICAgICAgZGF0YSB8PSAoKHVpbnQzMl90KSgqdG1wKSA8PCAyNFUpOworICAgICAgdG1wKys7CisgICAgICBkYXRhcmVtYWluaW5nLS07CisgICAgICAodm9pZClTRElPX1dyaXRlRklGTyhobW1jLT5JbnN0YW5jZSwgJmRhdGEpOworICAgIH0KKworICAgIGhtbWMtPnBUeEJ1ZmZQdHIgPSB0bXA7CisgICAgaG1tYy0+VHhYZmVyU2l6ZSA9IGRhdGFyZW1haW5pbmc7CiAgIH0KLSAgCi0gIGhtbWMtPnBUeEJ1ZmZQdHIgKz0gOFU7Ci0gIAotICByZXR1cm4gSEFMX09LOwogfQogCiAvKioKICAgKiBAfQogICAqLwogCi0jZW5kaWYgLyogU1RNMzJGNDA1eHggfHwgU1RNMzJGNDE1eHggfHwgU1RNMzJGNDA3eHggfHwgU1RNMzJGNDE3eHggfHwgU1RNMzJGNDI3eHggfHwgU1RNMzJGNDM3eHggfHwgU1RNMzJGNDI5eHggfHwgU1RNMzJGNDM5eHggfHwKLSAgICAgICAgICBTVE0zMkY0MDF4QyB8fCBTVE0zMkY0MDF4RSB8fCBTVE0zMkY0MTF4RSB8fCBTVE0zMkY0NDZ4eCB8fCBTVE0zMkY0Njl4eCB8fCBTVE0zMkY0Nzl4eCB8fCBTVE0zMkY0MTJaeCB8fCBTVE0zMkY0MTJWeCB8fCAKLSAgICAgICAgICBTVE0zMkY0MTJSeCB8fCBTVE0zMkY0MTJDeCB8fCBTVE0zMkY0MTN4eCB8fCBTVE0zMkY0MjN4eCAqLworI2VuZGlmIC8qIFNESU8gKi8KIAogI2VuZGlmIC8qIEhBTF9NTUNfTU9EVUxFX0VOQUJMRUQgKi8KIApkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjR4eF9oYWxfbmFuZC5jIGIvU3JjL3N0bTMyZjR4eF9oYWxfbmFuZC5jCmluZGV4IDZhMWZiOTEuLjM0MDRkMTkgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmY0eHhfaGFsX25hbmQuYworKysgYi9TcmMvc3RtMzJmNHh4X2hhbF9uYW5kLmMKQEAgLTg4MiwxMiArODgyLDEzIEBACiAgICAgfQogICAgCiAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VhZGRyZXNzIHwgQ01EX0FSRUEpKSA9IE5BTkRfQ01EX1dSSVRFX1RSVUUxOwotICAgIAorCisgICAgLyogR2V0IHRpY2sgKi8KKyAgICB0aWNrc3RhcnQgPSBIQUxfR2V0VGljaygpOworCiAgICAgLyogUmVhZCBzdGF0dXMgdW50aWwgTkFORCBpcyByZWFkeSAqLwogICAgIHdoaWxlKEhBTF9OQU5EX1JlYWRfU3RhdHVzKGhuYW5kKSAhPSBOQU5EX1JFQURZKQogICAgIHsKLSAgICAgIC8qIEdldCB0aWNrICovCi0gICAgICB0aWNrc3RhcnQgPSBIQUxfR2V0VGljaygpOwogICAgICAgCiAgICAgICBpZigoSEFMX0dldFRpY2soKSAtIHRpY2tzdGFydCApID4gTkFORF9XUklURV9USU1FT1VUKQogICAgICAgewpAQCAtMTAxMCwxMiArMTAxMSwxMiBAQAogICAgCiAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VhZGRyZXNzIHwgQ01EX0FSRUEpKSA9IE5BTkRfQ01EX1dSSVRFX1RSVUUxOwogICAgIAorICAgIC8qIEdldCB0aWNrICovCisgICAgdGlja3N0YXJ0ID0gSEFMX0dldFRpY2soKTsKKwogICAgIC8qIFJlYWQgc3RhdHVzIHVudGlsIE5BTkQgaXMgcmVhZHkgKi8KICAgICB3aGlsZShIQUxfTkFORF9SZWFkX1N0YXR1cyhobmFuZCkgIT0gTkFORF9SRUFEWSkKLSAgICB7Ci0gICAgICAvKiBHZXQgdGljayAqLwotICAgICAgdGlja3N0YXJ0ID0gSEFMX0dldFRpY2soKTsKLSAgICAKKyAgICB7IAogICAgICAgaWYoKEhBTF9HZXRUaWNrKCkgLSB0aWNrc3RhcnQgKSA+IE5BTkRfV1JJVEVfVElNRU9VVCkKICAgICAgIHsKICAgICAgICAgcmV0dXJuIEhBTF9USU1FT1VUOyAKQEAgLTE1NDYsMTIgKzE1NDcsMTIgQEAKICAgIAogICAgICooX19JTyB1aW50OF90ICopKCh1aW50MzJfdCkoZGV2aWNlYWRkcmVzcyB8IENNRF9BUkVBKSkgPSBOQU5EX0NNRF9XUklURV9UUlVFMTsKICAgIAorICAgIC8qIEdldCB0aWNrICovCisgICAgdGlja3N0YXJ0ID0gSEFMX0dldFRpY2soKTsKKwogICAgIC8qIFJlYWQgc3RhdHVzIHVudGlsIE5BTkQgaXMgcmVhZHkgKi8KICAgICB3aGlsZShIQUxfTkFORF9SZWFkX1N0YXR1cyhobmFuZCkgIT0gTkFORF9SRUFEWSkKLSAgICB7Ci0gICAgICAvKiBHZXQgdGljayAqLwotICAgICAgdGlja3N0YXJ0ID0gSEFMX0dldFRpY2soKTsKLSAgICAKKyAgICB7ICAgIAogICAgICAgaWYoKEhBTF9HZXRUaWNrKCkgLSB0aWNrc3RhcnQgKSA+IE5BTkRfV1JJVEVfVElNRU9VVCkKICAgICAgIHsKICAgICAgICAgcmV0dXJuIEhBTF9USU1FT1VUOyAKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmY0eHhfaGFsX3FzcGkuYyBiL1NyYy9zdG0zMmY0eHhfaGFsX3FzcGkuYwppbmRleCAxZmIwNzQzLi5iMTQzZTM1IDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmNHh4X2hhbF9xc3BpLmMKKysrIGIvU3JjL3N0bTMyZjR4eF9oYWxfcXNwaS5jCkBAIC0zMTgsOSArMzE4LDYgQEAKICAgICBhc3NlcnRfcGFyYW0oSVNfUVNQSV9GTEFTSF9JRChocXNwaS0+SW5pdC5GbGFzaElEKSk7CiAgIH0KICAgCi0gIC8qIFByb2Nlc3MgbG9ja2VkICovCi0gIF9fSEFMX0xPQ0soaHFzcGkpOwotICAgIAogICBpZihocXNwaS0+U3RhdGUgPT0gSEFMX1FTUElfU1RBVEVfUkVTRVQpCiAgIHsgCiAgICAgLyogQWxsb2NhdGUgbG9jayByZXNvdXJjZSBhbmQgaW5pdGlhbGl6ZSBpdCAqLwpAQCAtNDAxLDkgKzM5OCw2IEBACiAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgfQogCi0gIC8qIFByb2Nlc3MgbG9ja2VkICovCi0gIF9fSEFMX0xPQ0soaHFzcGkpOwotCiAgIC8qIERpc2FibGUgdGhlIFFTUEkgUGVyaXBoZXJhbCBDbG9jayAqLwogICBfX0hBTF9RU1BJX0RJU0FCTEUoaHFzcGkpOwogCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmNHh4X2hhbF9yY2MuYyBiL1NyYy9zdG0zMmY0eHhfaGFsX3JjYy5jCmluZGV4IDdmZTFkYjYuLjE4NTdkZjIgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmY0eHhfaGFsX3JjYy5jCisrKyBiL1NyYy9zdG0zMmY0eHhfaGFsX3JjYy5jCkBAIC0yMjAsNyArMjIwLDcgQEAKICAgKi8KIF9fd2VhayBIQUxfU3RhdHVzVHlwZURlZiBIQUxfUkNDX09zY0NvbmZpZyhSQ0NfT3NjSW5pdFR5cGVEZWYgICpSQ0NfT3NjSW5pdFN0cnVjdCkKIHsKLSAgdWludDMyX3QgdGlja3N0YXJ0OworICB1aW50MzJfdCB0aWNrc3RhcnQsIHBsbF9jb25maWc7CiAKICAgLyogQ2hlY2sgTnVsbCBwb2ludGVyICovCiAgIGlmKFJDQ19Pc2NJbml0U3RydWN0ID09IE5VTEwpCkBAIC01MzEsNyArNTMxLDI0IEBACiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICByZXR1cm4gSEFMX0VSUk9SOworICAgICAgLyogQ2hlY2sgaWYgdGhlcmUgaXMgYSByZXF1ZXN0IHRvIGRpc2FibGUgdGhlIFBMTCB1c2VkIGFzIFN5c3RlbSBjbG9jayBzb3VyY2UgKi8KKyAgICAgIGlmKChSQ0NfT3NjSW5pdFN0cnVjdC0+UExMLlBMTFN0YXRlKSA9PSBSQ0NfUExMX09GRikKKyAgICAgIHsKKyAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgLyogRG8gbm90IHJldHVybiBIQUxfRVJST1IgaWYgcmVxdWVzdCByZXBlYXRzIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gKi8KKyAgICAgICAgcGxsX2NvbmZpZyA9IFJDQy0+Q0ZHUjsKKyAgICAgICAgaWYoKFJFQURfQklUKHBsbF9jb25maWcsIFJDQ19QTExDRkdSX1BMTFNSQykgIT0gUkNDX09zY0luaXRTdHJ1Y3QtPlBMTC5QTExTb3VyY2UpIHx8CisgICAgICAgICAgIChSRUFEX0JJVChwbGxfY29uZmlnLCBSQ0NfUExMQ0ZHUl9QTExNKSAhPSBSQ0NfT3NjSW5pdFN0cnVjdC0+UExMLlBMTE0pIHx8CisgICAgICAgICAgIChSRUFEX0JJVChwbGxfY29uZmlnLCBSQ0NfUExMQ0ZHUl9QTExOKSAhPSBSQ0NfT3NjSW5pdFN0cnVjdC0+UExMLlBMTE4pIHx8CisgICAgICAgICAgIChSRUFEX0JJVChwbGxfY29uZmlnLCBSQ0NfUExMQ0ZHUl9QTExQKSAhPSBSQ0NfT3NjSW5pdFN0cnVjdC0+UExMLlBMTFApIHx8CisgICAgICAgICAgIChSRUFEX0JJVChwbGxfY29uZmlnLCBSQ0NfUExMQ0ZHUl9QTExRKSAhPSBSQ0NfT3NjSW5pdFN0cnVjdC0+UExMLlBMTFEpKQorICAgICAgICB7CisgICAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgICAgICAgfQorICAgICAgfQogICAgIH0KICAgfQogICByZXR1cm4gSEFMX09LOwpAQCAtNjkzLDcgKzcxMCw3IEBACiAgIFN5c3RlbUNvcmVDbG9jayA9IEhBTF9SQ0NfR2V0U3lzQ2xvY2tGcmVxKCkgPj4gQUhCUHJlc2NUYWJsZVsoUkNDLT5DRkdSICYgUkNDX0NGR1JfSFBSRSk+PiBSQ0NfQ0ZHUl9IUFJFX1Bvc107CiAKICAgLyogQ29uZmlndXJlIHRoZSBzb3VyY2Ugb2YgdGltZSBiYXNlIGNvbnNpZGVyaW5nIG5ldyBzeXN0ZW0gY2xvY2tzIHNldHRpbmdzICovCi0gIEhBTF9Jbml0VGljayAoVElDS19JTlRfUFJJT1JJVFkpOworICBIQUxfSW5pdFRpY2sgKHV3VGlja1ByaW8pOwogCiAgIHJldHVybiBIQUxfT0s7CiB9CmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmNHh4X2hhbF9yY2NfZXguYyBiL1NyYy9zdG0zMmY0eHhfaGFsX3JjY19leC5jCmluZGV4IDJiNGUwNGMuLjBkM2FhY2MgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmY0eHhfaGFsX3JjY19leC5jCisrKyBiL1NyYy9zdG0zMmY0eHhfaGFsX3JjY19leC5jCkBAIC0yMTc1LDcgKzIxNzUsOCBAQAogICAvKiBJbiBDYXNlIG9mIFNBSSBvciBJMlMgQ2xvY2sgQ29uZmlndXJhdGlvbiB0aHJvdWdoIFBMTEkyUywgUExMSTJTTiBkaXZpc2lvbgogICAgICBmYWN0b3IgaXMgY29tbW9uIHBhcmFtZXRlcnMgZm9yIGJvdGggcGVyaXBoZXJhbHMgKi8KICAgaWYoKCgoUGVyaXBoQ2xrSW5pdC0+UGVyaXBoQ2xvY2tTZWxlY3Rpb24pICYgUkNDX1BFUklQSENMS19JMlMpID09IFJDQ19QRVJJUEhDTEtfSTJTKSB8fAotICAgICAoKChQZXJpcGhDbGtJbml0LT5QZXJpcGhDbG9ja1NlbGVjdGlvbikgJiBSQ0NfUEVSSVBIQ0xLX1NBSV9QTExJMlMpID09IFJDQ19QRVJJUEhDTEtfU0FJX1BMTEkyUykpCisgICAgICgoKFBlcmlwaENsa0luaXQtPlBlcmlwaENsb2NrU2VsZWN0aW9uKSAmIFJDQ19QRVJJUEhDTEtfU0FJX1BMTEkyUykgPT0gUkNDX1BFUklQSENMS19TQUlfUExMSTJTKSB8fAorICAgICAoKChQZXJpcGhDbGtJbml0LT5QZXJpcGhDbG9ja1NlbGVjdGlvbikgJiBSQ0NfUEVSSVBIQ0xLX1BMTEkyUykgPT0gUkNDX1BFUklQSENMS19QTExJMlMpKQogICB7CiAgICAgLyogY2hlY2sgZm9yIFBhcmFtZXRlcnMgKi8KICAgICBhc3NlcnRfcGFyYW0oSVNfUkNDX1BMTEkyU05fVkFMVUUoUGVyaXBoQ2xrSW5pdC0+UExMSTJTLlBMTEkyU04pKTsKQEAgLTIyMjcsNiArMjIyOCwxNyBAQAogICAgICAgX19IQUxfUkNDX1BMTEkyU19QTExTQUlDTEtESVZRX0NPTkZJRyhQZXJpcGhDbGtJbml0LT5QTExJMlNEaXZRKTsKICAgICB9CiAKKyAgICAvKi0tLS0tLS0tLS0tLS0tLS0tIEluIENhc2Ugb2YgUExMSTJTIGlzIGp1c3Qgc2VsZWN0ZWQgIC0tLS0tLS0tLS0tLS0tLS0tKi8KKyAgICBpZigoUGVyaXBoQ2xrSW5pdC0+UGVyaXBoQ2xvY2tTZWxlY3Rpb24gJiBSQ0NfUEVSSVBIQ0xLX1BMTEkyUykgPT0gUkNDX1BFUklQSENMS19QTExJMlMpCisgICAgeworICAgICAgLyogQ2hlY2sgZm9yIFBhcmFtZXRlcnMgKi8KKyAgICAgIGFzc2VydF9wYXJhbShJU19SQ0NfUExMSTJTUV9WQUxVRShQZXJpcGhDbGtJbml0LT5QTExJMlMuUExMSTJTUSkpOworICAgICAgYXNzZXJ0X3BhcmFtKElTX1JDQ19QTExJMlNSX1ZBTFVFKFBlcmlwaENsa0luaXQtPlBMTEkyUy5QTExJMlNSKSk7CisKKyAgICAgIC8qIENvbmZpZ3VyZSB0aGUgUExMSTJTIG11bHRpcGxpY2F0aW9uIGFuZCBkaXZpc2lvbiBmYWN0b3JzICovCisgICAgICBfX0hBTF9SQ0NfUExMSTJTX1NBSUNMS19DT05GSUcoUGVyaXBoQ2xrSW5pdC0+UExMSTJTLlBMTEkyU04sIFBlcmlwaENsa0luaXQtPlBMTEkyUy5QTExJMlNRLCBQZXJpcGhDbGtJbml0LT5QTExJMlMuUExMSTJTUik7CisgICAgfQorCiAgICAgLyogRW5hYmxlIHRoZSBQTExJMlMgKi8KICAgICBfX0hBTF9SQ0NfUExMSTJTX0VOQUJMRSgpOwogICAgIC8qIEdldCB0aWNrICovCkBAIC0yNDcyLDcgKzI0ODQsNyBAQAogICAgICAgICAgIGZyZXF1ZW5jeSA9ICh1aW50MzJfdCkodmNvb3V0cHV0IC8oKChSQ0MtPlBMTEkyU0NGR1IgJiBSQ0NfUExMSTJTQ0ZHUl9QTExJMlNSKSA+PiAyOFUpICYgKFJDQ19QTExJMlNDRkdSX1BMTEkyU1IgPj4gMjhVKSkpOwogICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIC8qIENsb2NrIG5vdCBlbmFibGVkIGZvciBJMlMgKi8KKyAgICAgICAgLyogQ2xvY2sgbm90IGVuYWJsZWQgZm9yIEkyUyovCiAgICAgICBkZWZhdWx0OgogICAgICAgICB7CiAgICAgICAgICAgZnJlcXVlbmN5ID0gMFU7CkBAIC0zMjkyLDcgKzMzMDQsNyBAQAogICBTeXN0ZW1Db3JlQ2xvY2sgPSBIU0lfVkFMVUU7CiAKICAgLyogQWRhcHQgU3lzdGljayBpbnRlcnJ1cHQgcGVyaW9kICovCi0gIGlmKEhBTF9Jbml0VGljayhUSUNLX0lOVF9QUklPUklUWSkgIT0gSEFMX09LKQorICBpZihIQUxfSW5pdFRpY2sodXdUaWNrUHJpbykgIT0gSEFMX09LKQogICB7CiAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgfQpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjR4eF9oYWxfcm5nLmMgYi9TcmMvc3RtMzJmNHh4X2hhbF9ybmcuYwppbmRleCBmY2E0MjQwLi40N2MzMTNjIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmNHh4X2hhbF9ybmcuYworKysgYi9TcmMvc3RtMzJmNHh4X2hhbF9ybmcuYwpAQCAtMzEzLDQ0ICszMTMsNDQgQEAKICAgewogICAgIHN3aXRjaCAoQ2FsbGJhY2tJRCkKICAgICB7Ci0gICAgY2FzZSBIQUxfUk5HX0VSUk9SX0NCX0lEIDoKLSAgICAgIGhybmctPkVycm9yQ2FsbGJhY2sgPSBwQ2FsbGJhY2s7Ci0gICAgICBicmVhazsKKyAgICAgIGNhc2UgSEFMX1JOR19FUlJPUl9DQl9JRCA6CisgICAgICAgIGhybmctPkVycm9yQ2FsbGJhY2sgPSBwQ2FsbGJhY2s7CisgICAgICAgIGJyZWFrOwogCi0gICAgY2FzZSBIQUxfUk5HX01TUElOSVRfQ0JfSUQgOgotICAgICAgaHJuZy0+TXNwSW5pdENhbGxiYWNrID0gcENhbGxiYWNrOwotICAgICAgYnJlYWs7CisgICAgICBjYXNlIEhBTF9STkdfTVNQSU5JVF9DQl9JRCA6CisgICAgICAgIGhybmctPk1zcEluaXRDYWxsYmFjayA9IHBDYWxsYmFjazsKKyAgICAgICAgYnJlYWs7CiAKLSAgICBjYXNlIEhBTF9STkdfTVNQREVJTklUX0NCX0lEIDoKLSAgICAgIGhybmctPk1zcERlSW5pdENhbGxiYWNrID0gcENhbGxiYWNrOwotICAgICAgYnJlYWs7CisgICAgICBjYXNlIEhBTF9STkdfTVNQREVJTklUX0NCX0lEIDoKKyAgICAgICAgaHJuZy0+TXNwRGVJbml0Q2FsbGJhY2sgPSBwQ2FsbGJhY2s7CisgICAgICAgIGJyZWFrOwogCi0gICAgZGVmYXVsdCA6Ci0gICAgICAvKiBVcGRhdGUgdGhlIGVycm9yIGNvZGUgKi8KLSAgICAgIGhybmctPkVycm9yQ29kZSA9IEhBTF9STkdfRVJST1JfSU5WQUxJRF9DQUxMQkFDSzsKLSAgICAgLyogUmV0dXJuIGVycm9yIHN0YXR1cyAqLwotICAgICAgc3RhdHVzID0gIEhBTF9FUlJPUjsKLSAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdCA6CisgICAgICAgIC8qIFVwZGF0ZSB0aGUgZXJyb3IgY29kZSAqLworICAgICAgICBocm5nLT5FcnJvckNvZGUgPSBIQUxfUk5HX0VSUk9SX0lOVkFMSURfQ0FMTEJBQ0s7CisgICAgICAgIC8qIFJldHVybiBlcnJvciBzdGF0dXMgKi8KKyAgICAgICAgc3RhdHVzID0gIEhBTF9FUlJPUjsKKyAgICAgICAgYnJlYWs7CiAgICAgfQogICB9CiAgIGVsc2UgaWYgKEhBTF9STkdfU1RBVEVfUkVTRVQgPT0gaHJuZy0+U3RhdGUpCiAgIHsKICAgICBzd2l0Y2ggKENhbGxiYWNrSUQpCiAgICAgewotICAgIGNhc2UgSEFMX1JOR19NU1BJTklUX0NCX0lEIDoKLSAgICAgIGhybmctPk1zcEluaXRDYWxsYmFjayA9IHBDYWxsYmFjazsKLSAgICAgIGJyZWFrOworICAgICAgY2FzZSBIQUxfUk5HX01TUElOSVRfQ0JfSUQgOgorICAgICAgICBocm5nLT5Nc3BJbml0Q2FsbGJhY2sgPSBwQ2FsbGJhY2s7CisgICAgICAgIGJyZWFrOwogCi0gICAgY2FzZSBIQUxfUk5HX01TUERFSU5JVF9DQl9JRCA6Ci0gICAgICBocm5nLT5Nc3BEZUluaXRDYWxsYmFjayA9IHBDYWxsYmFjazsKLSAgICAgIGJyZWFrOworICAgICAgY2FzZSBIQUxfUk5HX01TUERFSU5JVF9DQl9JRCA6CisgICAgICAgIGhybmctPk1zcERlSW5pdENhbGxiYWNrID0gcENhbGxiYWNrOworICAgICAgICBicmVhazsKIAotICAgIGRlZmF1bHQgOgotICAgICAgLyogVXBkYXRlIHRoZSBlcnJvciBjb2RlICovCi0gICAgICBocm5nLT5FcnJvckNvZGUgPSBIQUxfUk5HX0VSUk9SX0lOVkFMSURfQ0FMTEJBQ0s7Ci0gICAgIC8qIFJldHVybiBlcnJvciBzdGF0dXMgKi8KLSAgICAgIHN0YXR1cyA9ICBIQUxfRVJST1I7Ci0gICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQgOgorICAgICAgICAvKiBVcGRhdGUgdGhlIGVycm9yIGNvZGUgKi8KKyAgICAgICAgaHJuZy0+RXJyb3JDb2RlID0gSEFMX1JOR19FUlJPUl9JTlZBTElEX0NBTExCQUNLOworICAgICAgICAvKiBSZXR1cm4gZXJyb3Igc3RhdHVzICovCisgICAgICAgIHN0YXR1cyA9ICBIQUxfRVJST1I7CisgICAgICAgIGJyZWFrOwogICAgIH0KICAgfQogICBlbHNlCkBAIC0zODgsNDQgKzM4OCw0NCBAQAogICB7CiAgICAgc3dpdGNoIChDYWxsYmFja0lEKQogICAgIHsKLSAgICBjYXNlIEhBTF9STkdfRVJST1JfQ0JfSUQgOgotICAgICAgaHJuZy0+RXJyb3JDYWxsYmFjayA9IEhBTF9STkdfRXJyb3JDYWxsYmFjazsgICAgICAgICAgLyogTGVnYWN5IHdlYWsgRXJyb3JDYWxsYmFjayAgKi8KLSAgICAgIGJyZWFrOworICAgICAgY2FzZSBIQUxfUk5HX0VSUk9SX0NCX0lEIDoKKyAgICAgICAgaHJuZy0+RXJyb3JDYWxsYmFjayA9IEhBTF9STkdfRXJyb3JDYWxsYmFjazsgICAgICAgICAgLyogTGVnYWN5IHdlYWsgRXJyb3JDYWxsYmFjayAgKi8KKyAgICAgICAgYnJlYWs7CiAKLSAgICBjYXNlIEhBTF9STkdfTVNQSU5JVF9DQl9JRCA6Ci0gICAgICBocm5nLT5Nc3BJbml0Q2FsbGJhY2sgPSBIQUxfUk5HX01zcEluaXQ7ICAgICAgICAgICAgICAvKiBMZWdhY3kgd2VhayBNc3BJbml0ICAqLwotICAgICAgYnJlYWs7CisgICAgICBjYXNlIEhBTF9STkdfTVNQSU5JVF9DQl9JRCA6CisgICAgICAgIGhybmctPk1zcEluaXRDYWxsYmFjayA9IEhBTF9STkdfTXNwSW5pdDsgICAgICAgICAgICAgIC8qIExlZ2FjeSB3ZWFrIE1zcEluaXQgICovCisgICAgICAgIGJyZWFrOwogCi0gICAgY2FzZSBIQUxfUk5HX01TUERFSU5JVF9DQl9JRCA6Ci0gICAgICBocm5nLT5Nc3BEZUluaXRDYWxsYmFjayA9IEhBTF9STkdfTXNwRGVJbml0OyAgICAgICAgICAvKiBMZWdhY3kgd2VhayBNc3BEZUluaXQgICovCi0gICAgICBicmVhazsKKyAgICAgIGNhc2UgSEFMX1JOR19NU1BERUlOSVRfQ0JfSUQgOgorICAgICAgICBocm5nLT5Nc3BEZUluaXRDYWxsYmFjayA9IEhBTF9STkdfTXNwRGVJbml0OyAgICAgICAgICAvKiBMZWdhY3kgd2VhayBNc3BEZUluaXQgICovCisgICAgICAgIGJyZWFrOwogCi0gICAgZGVmYXVsdCA6Ci0gICAgICAvKiBVcGRhdGUgdGhlIGVycm9yIGNvZGUgKi8KLSAgICAgIGhybmctPkVycm9yQ29kZSA9IEhBTF9STkdfRVJST1JfSU5WQUxJRF9DQUxMQkFDSzsKLSAgICAgLyogUmV0dXJuIGVycm9yIHN0YXR1cyAqLwotICAgICAgc3RhdHVzID0gIEhBTF9FUlJPUjsKLSAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdCA6CisgICAgICAgIC8qIFVwZGF0ZSB0aGUgZXJyb3IgY29kZSAqLworICAgICAgICBocm5nLT5FcnJvckNvZGUgPSBIQUxfUk5HX0VSUk9SX0lOVkFMSURfQ0FMTEJBQ0s7CisgICAgICAgIC8qIFJldHVybiBlcnJvciBzdGF0dXMgKi8KKyAgICAgICAgc3RhdHVzID0gIEhBTF9FUlJPUjsKKyAgICAgICAgYnJlYWs7CiAgICAgfQogICB9CiAgIGVsc2UgaWYgKEhBTF9STkdfU1RBVEVfUkVTRVQgPT0gaHJuZy0+U3RhdGUpCiAgIHsKICAgICBzd2l0Y2ggKENhbGxiYWNrSUQpCiAgICAgewotICAgIGNhc2UgSEFMX1JOR19NU1BJTklUX0NCX0lEIDoKLSAgICAgIGhybmctPk1zcEluaXRDYWxsYmFjayA9IEhBTF9STkdfTXNwSW5pdDsgICAgICAgICAgICAgIC8qIExlZ2FjeSB3ZWFrIE1zcEluaXQgICovCi0gICAgICBicmVhazsKKyAgICAgIGNhc2UgSEFMX1JOR19NU1BJTklUX0NCX0lEIDoKKyAgICAgICAgaHJuZy0+TXNwSW5pdENhbGxiYWNrID0gSEFMX1JOR19Nc3BJbml0OyAgICAgICAgICAgICAgLyogTGVnYWN5IHdlYWsgTXNwSW5pdCAgKi8KKyAgICAgICAgYnJlYWs7CiAKLSAgICBjYXNlIEhBTF9STkdfTVNQREVJTklUX0NCX0lEIDoKLSAgICAgIGhybmctPk1zcERlSW5pdENhbGxiYWNrID0gSEFMX1JOR19Nc3BEZUluaXQ7ICAgICAgICAgIC8qIExlZ2FjeSB3ZWFrIE1zcEluaXQgICovCi0gICAgICBicmVhazsKKyAgICAgIGNhc2UgSEFMX1JOR19NU1BERUlOSVRfQ0JfSUQgOgorICAgICAgICBocm5nLT5Nc3BEZUluaXRDYWxsYmFjayA9IEhBTF9STkdfTXNwRGVJbml0OyAgICAgICAgICAvKiBMZWdhY3kgd2VhayBNc3BJbml0ICAqLworICAgICAgICBicmVhazsKIAotICAgIGRlZmF1bHQgOgotICAgICAgLyogVXBkYXRlIHRoZSBlcnJvciBjb2RlICovCi0gICAgICBocm5nLT5FcnJvckNvZGUgPSBIQUxfUk5HX0VSUk9SX0lOVkFMSURfQ0FMTEJBQ0s7Ci0gICAgIC8qIFJldHVybiBlcnJvciBzdGF0dXMgKi8KLSAgICAgIHN0YXR1cyA9ICBIQUxfRVJST1I7Ci0gICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQgOgorICAgICAgICAvKiBVcGRhdGUgdGhlIGVycm9yIGNvZGUgKi8KKyAgICAgICAgaHJuZy0+RXJyb3JDb2RlID0gSEFMX1JOR19FUlJPUl9JTlZBTElEX0NBTExCQUNLOworICAgICAgICAvKiBSZXR1cm4gZXJyb3Igc3RhdHVzICovCisgICAgICAgIHN0YXR1cyA9ICBIQUxfRVJST1I7CisgICAgICAgIGJyZWFrOwogICAgIH0KICAgfQogICBlbHNlCkBAIC02MzEsNyArNjMxLDcgQEAKICAgKi8KIHVpbnQzMl90IEhBTF9STkdfR2V0UmFuZG9tTnVtYmVyKFJOR19IYW5kbGVUeXBlRGVmICpocm5nKQogewotICBpZihIQUxfUk5HX0dlbmVyYXRlUmFuZG9tTnVtYmVyKGhybmcsICYoaHJuZy0+UmFuZG9tTnVtYmVyKSkgPT0gSEFMX09LKQorICBpZiAoSEFMX1JOR19HZW5lcmF0ZVJhbmRvbU51bWJlcihocm5nLCAmKGhybmctPlJhbmRvbU51bWJlcikpID09IEhBTF9PSykKICAgewogICAgIHJldHVybiBocm5nLT5SYW5kb21OdW1iZXI7CiAgIH0KQEAgLTY5NywxMyArNjk3LDEzIEBACiAgIGlmIChfX0hBTF9STkdfR0VUX0lUKGhybmcsIFJOR19JVF9DRUkpICE9IFJFU0VUKQogICB7CiAgICAgLyogVXBkYXRlIHRoZSBlcnJvciBjb2RlICovCi0gICAgaHJuZy0+RXJyb3JDb2RlID0gSEFMX1JOR19FUlJPUl9TRUVEOworICAgIGhybmctPkVycm9yQ29kZSA9IEhBTF9STkdfRVJST1JfQ0xPQ0s7CiAgICAgcm5nY2xvY2tlcnJvciA9IDFVOwogICB9CiAgIGVsc2UgaWYgKF9fSEFMX1JOR19HRVRfSVQoaHJuZywgUk5HX0lUX1NFSSkgIT0gUkVTRVQpCiAgIHsKICAgICAvKiBVcGRhdGUgdGhlIGVycm9yIGNvZGUgKi8KLSAgICBocm5nLT5FcnJvckNvZGUgPSBIQUxfUk5HX0VSUk9SX0NMT0NLOworICAgIGhybmctPkVycm9yQ29kZSA9IEhBTF9STkdfRVJST1JfU0VFRDsKICAgICBybmdjbG9ja2Vycm9yID0gMVU7CiAgIH0KICAgZWxzZQpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjR4eF9oYWxfcnRjLmMgYi9TcmMvc3RtMzJmNHh4X2hhbF9ydGMuYwppbmRleCBmN2ZlNWYxLi5jYWU3YjljIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmNHh4X2hhbF9ydGMuYworKysgYi9TcmMvc3RtMzJmNHh4X2hhbF9ydGMuYwpAQCAtMTA1LDEwICsxMDUsMTIgQEAKICAgKioqIENhbGxiYWNrIHJlZ2lzdHJhdGlvbiAqKioKICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKKyAgWy4uXQogICBUaGUgY29tcGlsYXRpb24gZGVmaW5lICBVU0VfSEFMX1JUQ19SRUdJU1RFUl9DQUxMQkFDS1Mgd2hlbiBzZXQgdG8gMQogICBhbGxvd3MgdGhlIHVzZXIgdG8gY29uZmlndXJlIGR5bmFtaWNhbGx5IHRoZSBkcml2ZXIgY2FsbGJhY2tzLgogICBVc2UgRnVuY3Rpb24gQHJlZiBIQUxfUlRDX1JlZ2lzdGVyQ2FsbGJhY2soKSB0byByZWdpc3RlciBhbiBpbnRlcnJ1cHQgY2FsbGJhY2suCiAKKyAgWy4uXQogICBGdW5jdGlvbiBAcmVmIEhBTF9SVENfUmVnaXN0ZXJDYWxsYmFjaygpIGFsbG93cyB0byByZWdpc3RlciBmb2xsb3dpbmcgY2FsbGJhY2tzOgogICAgICgrKSBBbGFybUFFdmVudENhbGxiYWNrICAgICAgICAgIDogUlRDIEFsYXJtIEEgRXZlbnQgY2FsbGJhY2suCiAgICAgKCspIEFsYXJtQkV2ZW50Q2FsbGJhY2sgICAgICAgICAgOiBSVEMgQWxhcm0gQiBFdmVudCBjYWxsYmFjay4KQEAgLTExOCw5ICsxMjAsMTEgQEAKICAgICAoKykgVGFtcGVyMkV2ZW50Q2FsbGJhY2sgICAgICAgICA6IFJUQyBUYW1wZXIgMiBFdmVudCBjYWxsYmFjay4KICAgICAoKykgTXNwSW5pdENhbGxiYWNrICAgICAgICAgICAgICA6IFJUQyBNc3BJbml0IGNhbGxiYWNrLgogICAgICgrKSBNc3BEZUluaXRDYWxsYmFjayAgICAgICAgICAgIDogUlRDIE1zcERlSW5pdCBjYWxsYmFjay4KKyAgWy4uXQogICBUaGlzIGZ1bmN0aW9uIHRha2VzIGFzIHBhcmFtZXRlcnMgdGhlIEhBTCBwZXJpcGhlcmFsIGhhbmRsZSwgdGhlIENhbGxiYWNrIElECiAgIGFuZCBhIHBvaW50ZXIgdG8gdGhlIHVzZXIgY2FsbGJhY2sgZnVuY3Rpb24uCiAKKyAgWy4uXQogICBVc2UgZnVuY3Rpb24gQHJlZiBIQUxfUlRDX1VuUmVnaXN0ZXJDYWxsYmFjaygpIHRvIHJlc2V0IGEgY2FsbGJhY2sgdG8gdGhlIGRlZmF1bHQKICAgd2VhayBmdW5jdGlvbi4KICAgQHJlZiBIQUxfUlRDX1VuUmVnaXN0ZXJDYWxsYmFjaygpIHRha2VzIGFzIHBhcmFtZXRlcnMgdGhlIEhBTCBwZXJpcGhlcmFsIGhhbmRsZSwKQEAgLTEzNSw2ICsxMzksNyBAQAogICAgICgrKSBNc3BJbml0Q2FsbGJhY2sgICAgICAgICAgICAgIDogUlRDIE1zcEluaXQgY2FsbGJhY2suCiAgICAgKCspIE1zcERlSW5pdENhbGxiYWNrICAgICAgICAgICAgOiBSVEMgTXNwRGVJbml0IGNhbGxiYWNrLgogCisgIFsuLl0KICAgQnkgZGVmYXVsdCwgYWZ0ZXIgdGhlIEByZWYgSEFMX1JUQ19Jbml0KCkgYW5kIHdoZW4gdGhlIHN0YXRlIGlzIEhBTF9SVENfU1RBVEVfUkVTRVQsCiAgIGFsbCBjYWxsYmFja3MgYXJlIHNldCB0byB0aGUgY29ycmVzcG9uZGluZyB3ZWFrIGZ1bmN0aW9ucyA6CiAgIGV4YW1wbGVzIEByZWYgQWxhcm1BRXZlbnRDYWxsYmFjaygpLCBAcmVmIFdha2VVcFRpbWVyRXZlbnRDYWxsYmFjaygpLgpAQCAtMTQ0LDYgKzE0OSw3IEBACiAgIElmIG5vdCwgTXNwSW5pdCBvciBNc3BEZUluaXQgYXJlIG5vdCBudWxsLCBAcmVmIEhBTF9SVENfSW5pdCgpL0ByZWYgSEFMX1JUQ19EZUluaXQoKQogICBrZWVwIGFuZCB1c2UgdGhlIHVzZXIgTXNwSW5pdC9Nc3BEZUluaXQgY2FsbGJhY2tzIChyZWdpc3RlcmVkIGJlZm9yZWhhbmQpCiAKKyAgWy4uXQogICBDYWxsYmFja3MgY2FuIGJlIHJlZ2lzdGVyZWQvdW5yZWdpc3RlcmVkIGluIEhBTF9SVENfU1RBVEVfUkVBRFkgc3RhdGUgb25seS4KICAgRXhjZXB0aW9uIGRvbmUgTXNwSW5pdC9Nc3BEZUluaXQgdGhhdCBjYW4gYmUgcmVnaXN0ZXJlZC91bnJlZ2lzdGVyZWQKICAgaW4gSEFMX1JUQ19TVEFURV9SRUFEWSBvciBIQUxfUlRDX1NUQVRFX1JFU0VUIHN0YXRlLApAQCAtMTUyLDYgKzE1OCw3IEBACiAgIHVzaW5nIEByZWYgSEFMX1JUQ19SZWdpc3RlckNhbGxiYWNrKCkgYmVmb3JlIGNhbGxpbmcgQHJlZiBIQUxfUlRDX0RlSW5pdCgpCiAgIG9yIEByZWYgSEFMX1JUQ19Jbml0KCkgZnVuY3Rpb24uCiAKKyAgWy4uXQogICBXaGVuIFRoZSBjb21waWxhdGlvbiBkZWZpbmUgVVNFX0hBTF9SVENfUkVHSVNURVJfQ0FMTEJBQ0tTIGlzIHNldCB0byAwIG9yCiAgIG5vdCBkZWZpbmVkLCB0aGUgY2FsbGJhY2sgcmVnaXN0cmF0aW9uIGZlYXR1cmUgaXMgbm90IGF2YWlsYWJsZSBhbmQgYWxsIGNhbGxiYWNrcwogICBhcmUgc2V0IHRvIHRoZSBjb3JyZXNwb25kaW5nIHdlYWsgZnVuY3Rpb25zLgpAQCAtMTU3MiwxMCArMTU3OSwxMSBAQAogICAqLwogdm9pZCBIQUxfUlRDX0FsYXJtSVJRSGFuZGxlcihSVENfSGFuZGxlVHlwZURlZiogaHJ0YykKIHsKLSAgaWYoX19IQUxfUlRDX0FMQVJNX0dFVF9JVChocnRjLCBSVENfSVRfQUxSQSkpCisgIC8qIEdldCB0aGUgQWxhcm1BIGludGVycnVwdCBzb3VyY2UgZW5hYmxlIHN0YXR1cyAqLworICBpZihfX0hBTF9SVENfQUxBUk1fR0VUX0lUX1NPVVJDRShocnRjLCBSVENfSVRfQUxSQSkgIT0gKHVpbnQzMl90KVJFU0VUKQogICB7Ci0gICAgLyogR2V0IHRoZSBzdGF0dXMgb2YgdGhlIEludGVycnVwdCAqLwotICAgIGlmKCh1aW50MzJfdCkoaHJ0Yy0+SW5zdGFuY2UtPkNSICYgUlRDX0lUX0FMUkEpICE9ICh1aW50MzJfdClSRVNFVCkKKyAgICAvKiBHZXQgdGhlIHBlbmRpbmcgc3RhdHVzIG9mIHRoZSBBbGFybUEgSW50ZXJydXB0ICovCisgICAgaWYoX19IQUxfUlRDX0FMQVJNX0dFVF9GTEFHKGhydGMsIFJUQ19GTEFHX0FMUkFGKSAhPSAodWludDMyX3QpUkVTRVQpCiAgICAgewogICAgICAgLyogQWxhcm1BIGNhbGxiYWNrICovCiAgICAgI2lmIChVU0VfSEFMX1JUQ19SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkKQEAgLTE1ODQsMTUgKzE1OTIsMTYgQEAKICAgICAgIEhBTF9SVENfQWxhcm1BRXZlbnRDYWxsYmFjayhocnRjKTsKICAgICAjZW5kaWYgLyogVVNFX0hBTF9SVENfUkVHSVNURVJfQ0FMTEJBQ0tTICovCiAKLSAgICAgIC8qIENsZWFyIHRoZSBBbGFybSBpbnRlcnJ1cHQgcGVuZGluZyBiaXQgKi8KKyAgICAgIC8qIENsZWFyIHRoZSBBbGFybUEgaW50ZXJydXB0IHBlbmRpbmcgYml0ICovCiAgICAgICBfX0hBTF9SVENfQUxBUk1fQ0xFQVJfRkxBRyhocnRjLFJUQ19GTEFHX0FMUkFGKTsKICAgICB9CiAgIH0KIAotICBpZihfX0hBTF9SVENfQUxBUk1fR0VUX0lUKGhydGMsIFJUQ19JVF9BTFJCKSkKKyAgLyogR2V0IHRoZSBBbGFybUIgaW50ZXJydXB0IHNvdXJjZSBlbmFibGUgc3RhdHVzICovCisgIGlmKF9fSEFMX1JUQ19BTEFSTV9HRVRfSVRfU09VUkNFKGhydGMsIFJUQ19JVF9BTFJCKSAhPSAodWludDMyX3QpUkVTRVQpCiAgIHsKLSAgICAvKiBHZXQgdGhlIHN0YXR1cyBvZiB0aGUgSW50ZXJydXB0ICovCi0gICAgaWYoKHVpbnQzMl90KShocnRjLT5JbnN0YW5jZS0+Q1IgJiBSVENfSVRfQUxSQikgIT0gKHVpbnQzMl90KVJFU0VUKQorICAgIC8qIEdldCB0aGUgcGVuZGluZyBzdGF0dXMgb2YgdGhlIEFsYXJtQiBJbnRlcnJ1cHQgKi8KKyAgICBpZihfX0hBTF9SVENfQUxBUk1fR0VUX0ZMQUcoaHJ0YywgUlRDX0ZMQUdfQUxSQkYpICE9ICh1aW50MzJfdClSRVNFVCkKICAgICB7CiAgICAgICAvKiBBbGFybUIgY2FsbGJhY2sgKi8KICAgICAjaWYgKFVTRV9IQUxfUlRDX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxKQpAQCAtMTYwMSw3ICsxNjEwLDcgQEAKICAgICAgIEhBTF9SVENFeF9BbGFybUJFdmVudENhbGxiYWNrKGhydGMpOwogICAgICNlbmRpZiAvKiBVU0VfSEFMX1JUQ19SRUdJU1RFUl9DQUxMQkFDS1MgKi8KIAotICAgICAgLyogQ2xlYXIgdGhlIEFsYXJtIGludGVycnVwdCBwZW5kaW5nIGJpdCAqLworICAgICAgLyogQ2xlYXIgdGhlIEFsYXJtQiBpbnRlcnJ1cHQgcGVuZGluZyBiaXQgKi8KICAgICAgIF9fSEFMX1JUQ19BTEFSTV9DTEVBUl9GTEFHKGhydGMsUlRDX0ZMQUdfQUxSQkYpOwogICAgIH0KICAgfQpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjR4eF9oYWxfcnRjX2V4LmMgYi9TcmMvc3RtMzJmNHh4X2hhbF9ydGNfZXguYwppbmRleCA1YjI1ZWQ3Li44ZTA3YjRlIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmNHh4X2hhbF9ydGNfZXguYworKysgYi9TcmMvc3RtMzJmNHh4X2hhbF9ydGNfZXguYwpAQCAtNDk5LDEwICs0OTksMTEgQEAKICAgKi8KIHZvaWQgSEFMX1JUQ0V4X1RhbXBlclRpbWVTdGFtcElSUUhhbmRsZXIoUlRDX0hhbmRsZVR5cGVEZWYgKmhydGMpCiB7Ci0gIGlmKF9fSEFMX1JUQ19USU1FU1RBTVBfR0VUX0lUKGhydGMsIFJUQ19JVF9UUykpCisgIC8qIEdldCB0aGUgVGltZVN0YW1wIGludGVycnVwdCBzb3VyY2UgZW5hYmxlIHN0YXR1cyAqLworICBpZihfX0hBTF9SVENfVElNRVNUQU1QX0dFVF9JVF9TT1VSQ0UoaHJ0YywgUlRDX0lUX1RTKSAhPSAodWludDMyX3QpUkVTRVQpCiAgIHsKLSAgICAvKiBHZXQgdGhlIHN0YXR1cyBvZiB0aGUgSW50ZXJydXB0ICovCi0gICAgaWYoKHVpbnQzMl90KShocnRjLT5JbnN0YW5jZS0+Q1IgJiBSVENfSVRfVFMpICE9ICh1aW50MzJfdClSRVNFVCkKKyAgICAvKiBHZXQgdGhlIHBlbmRpbmcgc3RhdHVzIG9mIHRoZSBUSU1FU1RBTVAgSW50ZXJydXB0ICovCisgICAgaWYoX19IQUxfUlRDX1RJTUVTVEFNUF9HRVRfRkxBRyhocnRjLCBSVENfRkxBR19UU0YpICE9ICh1aW50MzJfdClSRVNFVCkKICAgICB7CiAgICAgICAvKiBUSU1FU1RBTVAgY2FsbGJhY2sgKi8KICNpZiAoVVNFX0hBTF9SVENfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCkBAIC01MTYsMTEgKzUxNywxMSBAQAogICAgIH0KICAgfQogCi0gIC8qIEdldCB0aGUgc3RhdHVzIG9mIHRoZSBJbnRlcnJ1cHQgKi8KLSAgaWYoX19IQUxfUlRDX1RBTVBFUl9HRVRfSVQoaHJ0YyxSVENfSVRfVEFNUDEpKQorICAvKiBHZXQgdGhlIFRhbXBlcjEgaW50ZXJydXB0IHNvdXJjZSBlbmFibGUgc3RhdHVzICovCisgIGlmKF9fSEFMX1JUQ19UQU1QRVJfR0VUX0lUX1NPVVJDRShocnRjLCBSVENfSVRfVEFNUCkgIT0gKHVpbnQzMl90KVJFU0VUKQogICB7Ci0gICAgLyogR2V0IHRoZSBUQU1QRVIgSW50ZXJydXB0IGVuYWJsZSBiaXQgYW5kIHBlbmRpbmcgYml0ICovCi0gICAgaWYoKChocnRjLT5JbnN0YW5jZS0+VEFGQ1IgJiAoUlRDX1RBRkNSX1RBTVBJRSkpKSAhPSAodWludDMyX3QpUkVTRVQpCisgICAgLyogR2V0IHRoZSBwZW5kaW5nIHN0YXR1cyBvZiB0aGUgVGFtcGVyMSBJbnRlcnJ1cHQgKi8KKyAgICBpZihfX0hBTF9SVENfVEFNUEVSX0dFVF9GTEFHKGhydGMsIFJUQ19GTEFHX1RBTVAxRikgIT0gKHVpbnQzMl90KVJFU0VUKQogICAgIHsKICAgICAgIC8qIFRhbXBlciBjYWxsYmFjayAqLwogI2lmIChVU0VfSEFMX1JUQ19SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkKQEAgLTUzNCwxMSArNTM1LDExIEBACiAgICAgfQogICB9CiAKLSAgLyogR2V0IHRoZSBzdGF0dXMgb2YgdGhlIEludGVycnVwdCAqLwotICBpZihfX0hBTF9SVENfVEFNUEVSX0dFVF9JVChocnRjLCBSVENfSVRfVEFNUDIpKQorICAvKiBHZXQgdGhlIFRhbXBlcjIgaW50ZXJydXB0IHNvdXJjZSBlbmFibGUgc3RhdHVzICovCisgIGlmKF9fSEFMX1JUQ19UQU1QRVJfR0VUX0lUX1NPVVJDRShocnRjLCBSVENfSVRfVEFNUCkgIT0gKHVpbnQzMl90KVJFU0VUKQogICB7Ci0gICAgLyogR2V0IHRoZSBUQU1QRVIgSW50ZXJydXB0IGVuYWJsZSBiaXQgYW5kIHBlbmRpbmcgYml0ICovCi0gICAgaWYoKChocnRjLT5JbnN0YW5jZS0+VEFGQ1IgJiBSVENfVEFGQ1JfVEFNUElFKSkgIT0gKHVpbnQzMl90KVJFU0VUKQorICAgIC8qIEdldCB0aGUgcGVuZGluZyBzdGF0dXMgb2YgdGhlIFRhbXBlcjIgSW50ZXJydXB0ICovCisgICAgaWYoX19IQUxfUlRDX1RBTVBFUl9HRVRfRkxBRyhocnRjLCBSVENfRkxBR19UQU1QMkYpICE9ICh1aW50MzJfdClSRVNFVCkKICAgICB7CiAgICAgICAvKiBUYW1wZXIgY2FsbGJhY2sgKi8KICNpZiAoVVNFX0hBTF9SVENfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCkBAIC01NTEsNiArNTUyLDcgQEAKICAgICAgIF9fSEFMX1JUQ19UQU1QRVJfQ0xFQVJfRkxBRyhocnRjLCBSVENfRkxBR19UQU1QMkYpOwogICAgIH0KICAgfQorCiAgIC8qIENsZWFyIHRoZSBFWFRJJ3MgRmxhZyBmb3IgUlRDIFRpbWVTdGFtcCBhbmQgVGFtcGVyICovCiAgIF9fSEFMX1JUQ19UQU1QRVJfVElNRVNUQU1QX0VYVElfQ0xFQVJfRkxBRygpOwogCkBAIC05OTgsMjcgKzEwMDAsMjkgQEAKIAogLyoqCiAgICogQGJyaWVmICBUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgV2FrZSBVcCBUaW1lciBpbnRlcnJ1cHQgcmVxdWVzdC4KKyAgKiBAbm90ZSAgIFVubGlrZSBhbGFybSBpbnRlcnJ1cHQgbGluZSAoc2hhcmVkIGJ5IEFsYXJtQSBhbmQgQWxhcm1CKSBhbmQgdGFtcGVyCisgICogICAgICAgICBpbnRlcnJ1cHQgbGluZSAoc2hhcmVkIGJ5IHRpbWVzdGFtcCBhbmQgdGFtcGVycykgd2FrZXVwIHRpbWVyCisgICogICAgICAgICBpbnRlcnJ1cHQgbGluZSBpcyBleGNsdXNpdmUgdG8gdGhlIHdha2V1cCB0aW1lci4KKyAgKiAgICAgICAgIFRoZXJlIGlzIG5vIG5lZWQgaW4gdGhpcyBjYXNlIHRvIGNoZWNrIG9uIHRoZSBpbnRlcnJ1cHQgZW5hYmxlCisgICogICAgICAgICBzdGF0dXMgdmlhIF9fSEFMX1JUQ19XQUtFVVBUSU1FUl9HRVRfSVRfU09VUkNFKCkuCiAgICogQHBhcmFtICBocnRjIHBvaW50ZXIgdG8gYSBSVENfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucwogICAqICAgICAgICAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciBSVEMuCiAgICogQHJldHZhbCBOb25lCiAgICovCiB2b2lkIEhBTF9SVENFeF9XYWtlVXBUaW1lcklSUUhhbmRsZXIoUlRDX0hhbmRsZVR5cGVEZWYgKmhydGMpCiB7Ci0gIGlmKF9fSEFMX1JUQ19XQUtFVVBUSU1FUl9HRVRfSVQoaHJ0YywgUlRDX0lUX1dVVCkpCisgIC8qIEdldCB0aGUgcGVuZGluZyBzdGF0dXMgb2YgdGhlIFdBS0VVUFRJTUVSIEludGVycnVwdCAqLworICBpZihfX0hBTF9SVENfV0FLRVVQVElNRVJfR0VUX0ZMQUcoaHJ0YywgUlRDX0ZMQUdfV1VURikgIT0gKHVpbnQzMl90KVJFU0VUKQogICB7Ci0gICAgLyogR2V0IHRoZSBzdGF0dXMgb2YgdGhlIEludGVycnVwdCAqLwotICAgIGlmKCh1aW50MzJfdCkoaHJ0Yy0+SW5zdGFuY2UtPkNSICYgUlRDX0lUX1dVVCkgIT0gKHVpbnQzMl90KVJFU0VUKQotICAgIHsKLSAgICAgIC8qIFdBS0VVUFRJTUVSIGNhbGxiYWNrICovCisgICAgLyogV0FLRVVQVElNRVIgY2FsbGJhY2sgKi8KICNpZiAoVVNFX0hBTF9SVENfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCi0gICAgICBocnRjLT5XYWtlVXBUaW1lckV2ZW50Q2FsbGJhY2soaHJ0Yyk7CisgICAgaHJ0Yy0+V2FrZVVwVGltZXJFdmVudENhbGxiYWNrKGhydGMpOwogI2Vsc2UKLSAgICAgIEhBTF9SVENFeF9XYWtlVXBUaW1lckV2ZW50Q2FsbGJhY2soaHJ0Yyk7CisgICAgSEFMX1JUQ0V4X1dha2VVcFRpbWVyRXZlbnRDYWxsYmFjayhocnRjKTsKICNlbmRpZiAvKiBVU0VfSEFMX1JUQ19SRUdJU1RFUl9DQUxMQkFDS1MgKi8KIAotICAgICAgLyogQ2xlYXIgdGhlIFdBS0VVUFRJTUVSIGludGVycnVwdCBwZW5kaW5nIGJpdCAqLwotICAgICAgX19IQUxfUlRDX1dBS0VVUFRJTUVSX0NMRUFSX0ZMQUcoaHJ0YywgUlRDX0ZMQUdfV1VURik7Ci0gICAgfQorICAgIC8qIENsZWFyIHRoZSBXQUtFVVBUSU1FUiBpbnRlcnJ1cHQgcGVuZGluZyBiaXQgKi8KKyAgICBfX0hBTF9SVENfV0FLRVVQVElNRVJfQ0xFQVJfRkxBRyhocnRjLCBSVENfRkxBR19XVVRGKTsKICAgfQogCiAgIC8qIENsZWFyIHRoZSBFWFRJJ3MgbGluZSBGbGFnIGZvciBSVEMgV2FrZVVwVGltZXIgKi8KZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmY0eHhfaGFsX3NhaS5jIGIvU3JjL3N0bTMyZjR4eF9oYWxfc2FpLmMKaW5kZXggNWQxODFlMS4uZTk0YzFhMSAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZjR4eF9oYWxfc2FpLmMKKysrIGIvU3JjL3N0bTMyZjR4eF9oYWxfc2FpLmMKQEAgLTE0MSwxMiArMTQxLDEzIEBACiAKICAgICAqKiogQ2FsbGJhY2sgcmVnaXN0cmF0aW9uICoqKgogICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KKyAgICBbLi5dCiAgICAgVGhlIGNvbXBpbGF0aW9uIGRlZmluZSBVU0VfSEFMX1NBSV9SRUdJU1RFUl9DQUxMQkFDS1Mgd2hlbiBzZXQgdG8gMQogICAgIGFsbG93cyB0aGUgdXNlciB0byBjb25maWd1cmUgZHluYW1pY2FsbHkgdGhlIGRyaXZlciBjYWxsYmFja3MuCi0gICAgVXNlIGZ1bmN0aW9ucyBAcmVmIEhBTF9TQUlfUmVnaXN0ZXJDYWxsYmFjaygpIHRvIHJlZ2lzdGVyIGEgdXNlciBjYWxsYmFjay4KKyAgICBVc2UgZnVuY3Rpb25zIEhBTF9TQUlfUmVnaXN0ZXJDYWxsYmFjaygpIHRvIHJlZ2lzdGVyIGEgdXNlciBjYWxsYmFjay4KIAotICAgIEZ1bmN0aW9uIEByZWYgSEFMX1NBSV9SZWdpc3RlckNhbGxiYWNrKCkgYWxsb3dzIHRvIHJlZ2lzdGVyIGZvbGxvd2luZyBjYWxsYmFja3M6CisgICAgWy4uXQorICAgIEZ1bmN0aW9uIEhBTF9TQUlfUmVnaXN0ZXJDYWxsYmFjaygpIGFsbG93cyB0byByZWdpc3RlciBmb2xsb3dpbmcgY2FsbGJhY2tzOgogICAgICAgKCspIFJ4Q3BsdENhbGxiYWNrICAgICA6IFNBSSByZWNlaXZlIGNvbXBsZXRlLgogICAgICAgKCspIFJ4SGFsZkNwbHRDYWxsYmFjayA6IFNBSSByZWNlaXZlIGhhbGYgY29tcGxldGUuCiAgICAgICAoKykgVHhDcGx0Q2FsbGJhY2sgICAgIDogU0FJIHRyYW5zbWl0IGNvbXBsZXRlLgpAQCAtMTU0LDEzICsxNTUsMTYgQEAKICAgICAgICgrKSBFcnJvckNhbGxiYWNrICAgICAgOiBTQUkgZXJyb3IuCiAgICAgICAoKykgTXNwSW5pdENhbGxiYWNrICAgIDogU0FJIE1zcEluaXQuCiAgICAgICAoKykgTXNwRGVJbml0Q2FsbGJhY2sgIDogU0FJIE1zcERlSW5pdC4KKyAgICBbLi5dCiAgICAgVGhpcyBmdW5jdGlvbiB0YWtlcyBhcyBwYXJhbWV0ZXJzIHRoZSBIQUwgcGVyaXBoZXJhbCBoYW5kbGUsIHRoZSBjYWxsYmFjayBJRAogICAgIGFuZCBhIHBvaW50ZXIgdG8gdGhlIHVzZXIgY2FsbGJhY2sgZnVuY3Rpb24uCiAKLSAgICBVc2UgZnVuY3Rpb24gQHJlZiBIQUxfU0FJX1VuUmVnaXN0ZXJDYWxsYmFjaygpIHRvIHJlc2V0IGEgY2FsbGJhY2sgdG8gdGhlIGRlZmF1bHQKKyAgICBbLi5dCisgICAgVXNlIGZ1bmN0aW9uIEhBTF9TQUlfVW5SZWdpc3RlckNhbGxiYWNrKCkgdG8gcmVzZXQgYSBjYWxsYmFjayB0byB0aGUgZGVmYXVsdAogICAgIHdlYWsgKHN1cmNoYXJnZWQpIGZ1bmN0aW9uLgotICAgIEByZWYgSEFMX1NBSV9VblJlZ2lzdGVyQ2FsbGJhY2soKSB0YWtlcyBhcyBwYXJhbWV0ZXJzIHRoZSBIQUwgcGVyaXBoZXJhbCBoYW5kbGUsCisgICAgSEFMX1NBSV9VblJlZ2lzdGVyQ2FsbGJhY2soKSB0YWtlcyBhcyBwYXJhbWV0ZXJzIHRoZSBIQUwgcGVyaXBoZXJhbCBoYW5kbGUsCiAgICAgYW5kIHRoZSBjYWxsYmFjayBJRC4KKyAgICBbLi5dCiAgICAgVGhpcyBmdW5jdGlvbiBhbGxvd3MgdG8gcmVzZXQgZm9sbG93aW5nIGNhbGxiYWNrczoKICAgICAgICgrKSBSeENwbHRDYWxsYmFjayAgICAgOiBTQUkgcmVjZWl2ZSBjb21wbGV0ZS4KICAgICAgICgrKSBSeEhhbGZDcGx0Q2FsbGJhY2sgOiBTQUkgcmVjZWl2ZSBoYWxmIGNvbXBsZXRlLgpAQCAtMTcwLDIzICsxNzQsMjYgQEAKICAgICAgICgrKSBNc3BJbml0Q2FsbGJhY2sgICAgOiBTQUkgTXNwSW5pdC4KICAgICAgICgrKSBNc3BEZUluaXRDYWxsYmFjayAgOiBTQUkgTXNwRGVJbml0LgogCi0gICAgQnkgZGVmYXVsdCwgYWZ0ZXIgdGhlIEByZWYgSEFMX1NBSV9Jbml0IGFuZCBpZiB0aGUgc3RhdGUgaXMgSEFMX1NBSV9TVEFURV9SRVNFVAorICAgIFsuLl0KKyAgICBCeSBkZWZhdWx0LCBhZnRlciB0aGUgSEFMX1NBSV9Jbml0IGFuZCBpZiB0aGUgc3RhdGUgaXMgSEFMX1NBSV9TVEFURV9SRVNFVAogICAgIGFsbCBjYWxsYmFja3MgYXJlIHJlc2V0IHRvIHRoZSBjb3JyZXNwb25kaW5nIGxlZ2FjeSB3ZWFrIChzdXJjaGFyZ2VkKSBmdW5jdGlvbnM6Ci0gICAgZXhhbXBsZXMgQHJlZiBIQUxfU0FJX1J4Q3BsdENhbGxiYWNrKCksIEByZWYgSEFMX1NBSV9FcnJvckNhbGxiYWNrKCkuCisgICAgZXhhbXBsZXMgSEFMX1NBSV9SeENwbHRDYWxsYmFjaygpLCBIQUxfU0FJX0Vycm9yQ2FsbGJhY2soKS4KICAgICBFeGNlcHRpb24gZG9uZSBmb3IgTXNwSW5pdCBhbmQgTXNwRGVJbml0IGNhbGxiYWNrcyB0aGF0IGFyZSByZXNwZWN0aXZlbHkKLSAgICByZXNldCB0byB0aGUgbGVnYWN5IHdlYWsgKHN1cmNoYXJnZWQpIGZ1bmN0aW9ucyBpbiB0aGUgQHJlZiBIQUxfU0FJX0luaXQKLSAgICBhbmQgQHJlZiAgSEFMX1NBSV9EZUluaXQgb25seSB3aGVuIHRoZXNlIGNhbGxiYWNrcyBhcmUgbnVsbCAobm90IHJlZ2lzdGVyZWQgYmVmb3JlaGFuZCkuCi0gICAgSWYgbm90LCBNc3BJbml0IG9yIE1zcERlSW5pdCBhcmUgbm90IG51bGwsIHRoZSBAcmVmIEhBTF9TQUlfSW5pdCBhbmQgQHJlZiBIQUxfU0FJX0RlSW5pdAorICAgIHJlc2V0IHRvIHRoZSBsZWdhY3kgd2VhayAoc3VyY2hhcmdlZCkgZnVuY3Rpb25zIGluIHRoZSBIQUxfU0FJX0luaXQKKyAgICBhbmQgSEFMX1NBSV9EZUluaXQgb25seSB3aGVuIHRoZXNlIGNhbGxiYWNrcyBhcmUgbnVsbCAobm90IHJlZ2lzdGVyZWQgYmVmb3JlaGFuZCkuCisgICAgSWYgbm90LCBNc3BJbml0IG9yIE1zcERlSW5pdCBhcmUgbm90IG51bGwsIHRoZSBIQUxfU0FJX0luaXQgYW5kIEhBTF9TQUlfRGVJbml0CiAgICAga2VlcCBhbmQgdXNlIHRoZSB1c2VyIE1zcEluaXQvTXNwRGVJbml0IGNhbGxiYWNrcyAocmVnaXN0ZXJlZCBiZWZvcmVoYW5kKS4KIAorICAgIFsuLl0KICAgICBDYWxsYmFja3MgY2FuIGJlIHJlZ2lzdGVyZWQvdW5yZWdpc3RlcmVkIGluIFJFQURZIHN0YXRlIG9ubHkuCiAgICAgRXhjZXB0aW9uIGRvbmUgZm9yIE1zcEluaXQvTXNwRGVJbml0IGNhbGxiYWNrcyB0aGF0IGNhbiBiZSByZWdpc3RlcmVkL3VucmVnaXN0ZXJlZAogICAgIGluIFJFQURZIG9yIFJFU0VUIHN0YXRlLCB0aHVzIHJlZ2lzdGVyZWQgKHVzZXIpIE1zcEluaXQvRGVJbml0IGNhbGxiYWNrcyBjYW4gYmUgdXNlZAogICAgIGR1cmluZyB0aGUgSW5pdC9EZUluaXQuCiAgICAgSW4gdGhhdCBjYXNlIGZpcnN0IHJlZ2lzdGVyIHRoZSBNc3BJbml0L01zcERlSW5pdCB1c2VyIGNhbGxiYWNrcwotICAgIHVzaW5nIEByZWYgSEFMX1NBSV9SZWdpc3RlckNhbGxiYWNrIGJlZm9yZSBjYWxsaW5nIEByZWYgSEFMX1NBSV9EZUluaXQKLSAgICBvciBAcmVmIEhBTF9TQUlfSW5pdCBmdW5jdGlvbi4KKyAgICB1c2luZyBIQUxfU0FJX1JlZ2lzdGVyQ2FsbGJhY2sgYmVmb3JlIGNhbGxpbmcgSEFMX1NBSV9EZUluaXQKKyAgICBvciBIQUxfU0FJX0luaXQgZnVuY3Rpb24uCiAKKyAgICBbLi5dCiAgICAgV2hlbiB0aGUgY29tcGlsYXRpb24gZGVmaW5lIFVTRV9IQUxfU0FJX1JFR0lTVEVSX0NBTExCQUNLUyBpcyBzZXQgdG8gMCBvcgogICAgIG5vdCBkZWZpbmVkLCB0aGUgY2FsbGJhY2sgcmVnaXN0ZXJpbmcgZmVhdHVyZSBpcyBub3QgYXZhaWxhYmxlCiAgICAgYW5kIHdlYWsgKHN1cmNoYXJnZWQpIGNhbGxiYWNrcyBhcmUgdXNlZC4KQEAgLTI0MCw3ICsyNDcsNiBAQAogLyoqIEBkZWZncm91cCBTQUlfUHJpdmF0ZV9Db25zdGFudHMgIFNBSSBQcml2YXRlIENvbnN0YW50cwogICAqIEB7CiAgICovCi0jZGVmaW5lIFNBSV9GSUZPX1NJWkUgICAgICAgICA4VQogI2RlZmluZSBTQUlfREVGQVVMVF9USU1FT1VUICAgNFUgLyogNG1zICovCiAvKioKICAgKiBAfQpAQCAtNDY2LDYgKzQ3Miw5IEBACiAgICAgfQogICB9CiAKKyAgLyogQ2hlY2sgdGhlIFNBSSBCbG9jayBtYXN0ZXIgY2xvY2sgZGl2aWRlciBwYXJhbWV0ZXIgKi8KKyAgYXNzZXJ0X3BhcmFtKElTX1NBSV9CTE9DS19NQVNURVJfRElWSURFUihoc2FpLT5Jbml0Lk1ja2RpdikpOworCiAgIC8qIENvbXB1dGUgQ0tTVFIgYml0cyBvZiBTQUkgQ1IxIGFjY29yZGluZyB0byBDbG9ja1N0cm9iaW5nIGFuZCBBdWRpb01vZGUgKi8KICAgaWYoKGhzYWktPkluaXQuQXVkaW9Nb2RlID09IFNBSV9NT0RFTUFTVEVSX1RYKSB8fCAoaHNhaS0+SW5pdC5BdWRpb01vZGUgPT0gU0FJX01PREVTTEFWRV9UWCkpCiAgIHsKQEAgLTQ5OCw2ICs1MDcsNyBAQAogICBkZWZhdWx0OgogICAgIGJyZWFrOwogICB9CisKICAgLyogU0FJIENSMSBDb25maWd1cmF0aW9uICovCiAgIGhzYWktPkluc3RhbmNlLT5DUjEgJj0gfihTQUlfeENSMV9NT0RFIHwgU0FJX3hDUjFfUFJUQ0ZHIHwgIFNBSV94Q1IxX0RTIHwgICAgICBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQUlfeENSMV9MU0JGSVJTVCB8IFNBSV94Q1IxX0NLU1RSIHwgU0FJX3hDUjFfU1lOQ0VOIHxcCkBAIC0xNDUzLDYgKzE0NjMsMTIgQEAKICAgICAgIHJldHVybiAgSEFMX0VSUk9SOwogICAgIH0KIAorICAgIC8qIEVuYWJsZSB0aGUgaW50ZXJydXB0cyBmb3IgZXJyb3IgaGFuZGxpbmcgKi8KKyAgICBfX0hBTF9TQUlfRU5BQkxFX0lUKGhzYWksIFNBSV9JbnRlcnJ1cHRGbGFnKGhzYWksIFNBSV9NT0RFX0RNQSkpOworCisgICAgLyogRW5hYmxlIFNBSSBSeCBETUEgUmVxdWVzdCAqLworICAgIGhzYWktPkluc3RhbmNlLT5DUjEgfD0gU0FJX3hDUjFfRE1BRU47CisKICAgICAvKiBDaGVjayBpZiB0aGUgU0FJIGlzIGFscmVhZHkgZW5hYmxlZCAqLwogICAgIGlmKChoc2FpLT5JbnN0YW5jZS0+Q1IxICYgU0FJX3hDUjFfU0FJRU4pID09IFJFU0VUKQogICAgIHsKQEAgLTE0NjAsMTIgKzE0NzYsNiBAQAogICAgICAgX19IQUxfU0FJX0VOQUJMRShoc2FpKTsKICAgICB9CiAKLSAgICAvKiBFbmFibGUgdGhlIGludGVycnVwdHMgZm9yIGVycm9yIGhhbmRsaW5nICovCi0gICAgX19IQUxfU0FJX0VOQUJMRV9JVChoc2FpLCBTQUlfSW50ZXJydXB0RmxhZyhoc2FpLCBTQUlfTU9ERV9ETUEpKTsKLQotICAgIC8qIEVuYWJsZSBTQUkgUnggRE1BIFJlcXVlc3QgKi8KLSAgICBoc2FpLT5JbnN0YW5jZS0+Q1IxIHw9IFNBSV94Q1IxX0RNQUVOOwotCiAgICAgLyogUHJvY2VzcyBVbmxvY2tlZCAqLwogICAgIF9fSEFMX1VOTE9DSyhoc2FpKTsKIApAQCAtMTYxMiw2ICsxNjIyLDkgQEAKICAgICAvKiBTQUkgQUZTREVUIGludGVycnVwdCBvY2N1cnJlZCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICAgICBlbHNlIGlmKCgoaXRmbGFncyAmIFNBSV9GTEFHX0FGU0RFVCkgPT0gU0FJX0ZMQUdfQUZTREVUKSAmJiAoKGl0c291cmNlcyAmIFNBSV9JVF9BRlNERVQpID09IFNBSV9JVF9BRlNERVQpKQogICAgIHsKKyAgICAgIC8qIENsZWFyIHRoZSBTQUkgQUZTREVUIGZsYWcgKi8KKyAgICAgIF9fSEFMX1NBSV9DTEVBUl9GTEFHKGhzYWksIFNBSV9GTEFHX0FGU0RFVCk7CisKICAgICAgIC8qIENoYW5nZSB0aGUgU0FJIGVycm9yIGNvZGUgKi8KICAgICAgIGhzYWktPkVycm9yQ29kZSB8PSBIQUxfU0FJX0VSUk9SX0FGU0RFVDsKIApAQCAtMTY1Miw2ICsxNjY1LDkgQEAKICAgICAvKiBTQUkgTEZTREVUIGludGVycnVwdCBvY2N1cnJlZCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICAgICBlbHNlIGlmKCgoaXRmbGFncyAmIFNBSV9GTEFHX0xGU0RFVCkgPT0gU0FJX0ZMQUdfTEZTREVUKSAmJiAoKGl0c291cmNlcyAmIFNBSV9JVF9MRlNERVQpID09IFNBSV9JVF9MRlNERVQpKQogICAgIHsKKyAgICAgIC8qIENsZWFyIHRoZSBTQUkgTEZTREVUIGZsYWcgKi8KKyAgICAgIF9fSEFMX1NBSV9DTEVBUl9GTEFHKGhzYWksIFNBSV9GTEFHX0xGU0RFVCk7CisKICAgICAgIC8qIENoYW5nZSB0aGUgU0FJIGVycm9yIGNvZGUgKi8KICAgICAgIGhzYWktPkVycm9yQ29kZSB8PSBIQUxfU0FJX0VSUk9SX0xGU0RFVDsKIApAQCAtMTY5Miw2ICsxNzA4LDkgQEAKICAgICAvKiBTQUkgV0NLQ0ZHIGludGVycnVwdCBvY2N1cnJlZCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICAgICBlbHNlIGlmKCgoaXRmbGFncyAmIFNBSV9GTEFHX1dDS0NGRykgPT0gU0FJX0ZMQUdfV0NLQ0ZHKSAmJiAoKGl0c291cmNlcyAmIFNBSV9JVF9XQ0tDRkcpID09IFNBSV9JVF9XQ0tDRkcpKQogICAgIHsKKyAgICAgIC8qIENsZWFyIHRoZSBTQUkgV0NLQ0ZHIGZsYWcgKi8KKyAgICAgIF9fSEFMX1NBSV9DTEVBUl9GTEFHKGhzYWksIFNBSV9GTEFHX1dDS0NGRyk7CisKICAgICAgIC8qIENoYW5nZSB0aGUgU0FJIGVycm9yIGNvZGUgKi8KICAgICAgIGhzYWktPkVycm9yQ29kZSB8PSBIQUxfU0FJX0VSUk9SX1dDS0NGRzsKIApAQCAtMTkyOSwxOSArMTk0OCwxNiBAQAogICAgIHJldHVybiBIQUxfRVJST1I7CiAgIH0KIAotICBzd2l0Y2gocHJvdG9jb2wpCisgIGlmIChwcm90b2NvbCA9PSBTQUlfSTJTX1NUQU5EQVJEKQogICB7Ci0gIGNhc2UgU0FJX0kyU19TVEFOREFSRCA6CiAgICAgaHNhaS0+RnJhbWVJbml0LkZTUG9sYXJpdHkgPSBTQUlfRlNfQUNUSVZFX0xPVzsKICAgICBoc2FpLT5GcmFtZUluaXQuRlNPZmZzZXQgICA9IFNBSV9GU19CRUZPUkVGSVJTVEJJVDsKLSAgICBicmVhazsKLSAgY2FzZSBTQUlfSTJTX01TQkpVU1RJRklFRCA6Ci0gIGNhc2UgU0FJX0kyU19MU0JKVVNUSUZJRUQgOgorICB9CisgIGVsc2UKKyAgeworICAgICAvKiBTQUlfSTJTX01TQkpVU1RJRklFRCBvciBTQUlfSTJTX0xTQkpVU1RJRklFRCAqLwogICAgIGhzYWktPkZyYW1lSW5pdC5GU1BvbGFyaXR5ID0gU0FJX0ZTX0FDVElWRV9ISUdIOwogICAgIGhzYWktPkZyYW1lSW5pdC5GU09mZnNldCAgID0gU0FJX0ZTX0ZJUlNUQklUOwotICAgIGJyZWFrOwotICBkZWZhdWx0IDoKLSAgICByZXR1cm4gSEFMX0VSUk9SOwogICB9CiAKICAgLyogRnJhbWUgZGVmaW5pdGlvbiAqLwpAQCAtMjAxOCwxNiArMjAzNCwxNCBAQAogICBoc2FpLT5TbG90SW5pdC5TbG90TnVtYmVyICAgICAgPSBuYnNsb3Q7CiAgIGhzYWktPlNsb3RJbml0LlNsb3RBY3RpdmUgICAgICA9IFNBSV9TTE9UQUNUSVZFX0FMTDsKIAotICBzd2l0Y2gocHJvdG9jb2wpCisgIGlmIChwcm90b2NvbCA9PSBTQUlfUENNX1NIT1JUKQogICB7Ci0gIGNhc2UgU0FJX1BDTV9TSE9SVCA6Ci0gICAgaHNhaS0+RnJhbWVJbml0LkFjdGl2ZUZyYW1lTGVuZ3RoID0gMVU7Ci0gICAgYnJlYWs7Ci0gIGNhc2UgU0FJX1BDTV9MT05HIDoKLSAgICBoc2FpLT5GcmFtZUluaXQuQWN0aXZlRnJhbWVMZW5ndGggPSAxM1U7Ci0gICAgYnJlYWs7Ci0gIGRlZmF1bHQgOgotICAgIHJldHVybiBIQUxfRVJST1I7CisgICAgaHNhaS0+RnJhbWVJbml0LkFjdGl2ZUZyYW1lTGVuZ3RoID0gMTsKKyAgfQorICBlbHNlCisgIHsKKyAgICAvKiBTQUlfUENNX0xPTkcgKi8KKyAgICBoc2FpLT5GcmFtZUluaXQuQWN0aXZlRnJhbWVMZW5ndGggPSAxMzsKICAgfQogCiAgIHN3aXRjaChkYXRhc2l6ZSkKQEAgLTIzMzksNyArMjM1Myw3IEBACiB7CiAgIFNBSV9IYW5kbGVUeXBlRGVmKiBoc2FpID0gKFNBSV9IYW5kbGVUeXBlRGVmKikoKERNQV9IYW5kbGVUeXBlRGVmKiApaGRtYSktPlBhcmVudDsKIAotICBpZigoaGRtYS0+SW5zdGFuY2UtPkNSICYgRE1BX1N4Q1JfQ0lSQykgPT0gMFUpCisgIGlmIChoZG1hLT5Jbml0Lk1vZGUgIT0gRE1BX0NJUkNVTEFSKQogICB7CiAgICAgaHNhaS0+WGZlckNvdW50ID0gMFU7CiAKQEAgLTIzODQsNyArMjM5OCw4IEBACiBzdGF0aWMgdm9pZCBTQUlfRE1BUnhDcGx0KERNQV9IYW5kbGVUeXBlRGVmICpoZG1hKQogewogICBTQUlfSGFuZGxlVHlwZURlZiogaHNhaSA9ICggU0FJX0hhbmRsZVR5cGVEZWYqICkoKERNQV9IYW5kbGVUeXBlRGVmKiApaGRtYSktPlBhcmVudDsKLSAgaWYoKGhkbWEtPkluc3RhbmNlLT5DUiAmIERNQV9TeENSX0NJUkMpID09IDBVKQorCisgIGlmIChoZG1hLT5Jbml0Lk1vZGUgIT0gRE1BX0NJUkNVTEFSKQogICB7CiAgICAgLyogRGlzYWJsZSBSeCBETUEgUmVxdWVzdCAqLwogICAgIGhzYWktPkluc3RhbmNlLT5DUjEgJj0gKHVpbnQzMl90KSh+U0FJX3hDUjFfRE1BRU4pOwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjR4eF9oYWxfc2QuYyBiL1NyYy9zdG0zMmY0eHhfaGFsX3NkLmMKaW5kZXggOTc1M2U0ZS4uZDJhODhkNyAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZjR4eF9oYWxfc2QuYworKysgYi9TcmMvc3RtMzJmNHh4X2hhbF9zZC5jCkBAIC0zLDE2MSArMywxNjUgQEAKICAgKiBAZmlsZSAgICBzdG0zMmY0eHhfaGFsX3NkLmMKICAgKiBAYXV0aG9yICBNQ0QgQXBwbGljYXRpb24gVGVhbQogICAqIEBicmllZiAgIFNEIGNhcmQgSEFMIG1vZHVsZSBkcml2ZXIuCi0gICogICAgICAgICAgVGhpcyBmaWxlIHByb3ZpZGVzIGZpcm13YXJlIGZ1bmN0aW9ucyB0byBtYW5hZ2UgdGhlIGZvbGxvd2luZyAKKyAgKiAgICAgICAgICBUaGlzIGZpbGUgcHJvdmlkZXMgZmlybXdhcmUgZnVuY3Rpb25zIHRvIG1hbmFnZSB0aGUgZm9sbG93aW5nCiAgICogICAgICAgICAgZnVuY3Rpb25hbGl0aWVzIG9mIHRoZSBTZWN1cmUgRGlnaXRhbCAoU0QpIHBlcmlwaGVyYWw6CiAgICogICAgICAgICAgICsgSW5pdGlhbGl6YXRpb24gYW5kIGRlLWluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucwogICAqICAgICAgICAgICArIElPIG9wZXJhdGlvbiBmdW5jdGlvbnMKLSAgKiAgICAgICAgICAgKyBQZXJpcGhlcmFsIENvbnRyb2wgZnVuY3Rpb25zIAotICAqICAgICAgICAgICArIFNEIGNhcmQgQ29udHJvbCBmdW5jdGlvbnMKLSAgKiAgICAgICAgIAorICAqICAgICAgICAgICArIFBlcmlwaGVyYWwgQ29udHJvbCBmdW5jdGlvbnMKKyAgKiAgICAgICAgICAgKyBQZXJpcGhlcmFsIFN0YXRlIGZ1bmN0aW9ucworICAqCiAgIEB2ZXJiYXRpbQogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgICAgICAgICAgICAgICAgICAgICMjIyMjIEhvdyB0byB1c2UgdGhpcyBkcml2ZXIgIyMjIyMKICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIFsuLl0KLSAgICBUaGlzIGRyaXZlciBpbXBsZW1lbnRzIGEgaGlnaCBsZXZlbCBjb21tdW5pY2F0aW9uIGxheWVyIGZvciByZWFkIGFuZCB3cml0ZSBmcm9tL3RvIAotICAgIHRoaXMgbWVtb3J5LiBUaGUgbmVlZGVkIFNUTTMyIGhhcmR3YXJlIHJlc291cmNlcyAoU0RJTyBhbmQgR1BJTykgYXJlIHBlcmZvcm1lZCBieSAKLSAgICB0aGUgdXNlciBpbiBIQUxfU0RfTXNwSW5pdCgpIGZ1bmN0aW9uIChNU1AgbGF5ZXIpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgQmFzaWNhbGx5LCB0aGUgTVNQIGxheWVyIGNvbmZpZ3VyYXRpb24gc2hvdWxkIGJlIHRoZSBzYW1lIGFzIHdlIHByb3ZpZGUgaW4gdGhlIAorICAgIFRoaXMgZHJpdmVyIGltcGxlbWVudHMgYSBoaWdoIGxldmVsIGNvbW11bmljYXRpb24gbGF5ZXIgZm9yIHJlYWQgYW5kIHdyaXRlIGZyb20vdG8KKyAgICB0aGlzIG1lbW9yeS4gVGhlIG5lZWRlZCBTVE0zMiBoYXJkd2FyZSByZXNvdXJjZXMgKFNESU8gYW5kIEdQSU8pIGFyZSBwZXJmb3JtZWQgYnkKKyAgICB0aGUgdXNlciBpbiBIQUxfU0RfTXNwSW5pdCgpIGZ1bmN0aW9uIChNU1AgbGF5ZXIpLgorICAgIEJhc2ljYWxseSwgdGhlIE1TUCBsYXllciBjb25maWd1cmF0aW9uIHNob3VsZCBiZSB0aGUgc2FtZSBhcyB3ZSBwcm92aWRlIGluIHRoZQogICAgIGV4YW1wbGVzLgogICAgIFlvdSBjYW4gZWFzaWx5IHRhaWxvciB0aGlzIGNvbmZpZ3VyYXRpb24gYWNjb3JkaW5nIHRvIGhhcmR3YXJlIHJlc291cmNlcy4KIAogICBbLi5dCi0gICAgVGhpcyBkcml2ZXIgaXMgYSBnZW5lcmljIGxheWVyZWQgZHJpdmVyIGZvciBTRElPIG1lbW9yaWVzIHdoaWNoIHVzZXMgdGhlIEhBTCAKLSAgICBTRElPIGRyaXZlciBmdW5jdGlvbnMgdG8gaW50ZXJmYWNlIHdpdGggU0QgYW5kIHVTRCBjYXJkcyBkZXZpY2VzLiAKKyAgICBUaGlzIGRyaXZlciBpcyBhIGdlbmVyaWMgbGF5ZXJlZCBkcml2ZXIgZm9yIFNESU8gbWVtb3JpZXMgd2hpY2ggdXNlcyB0aGUgSEFMCisgICAgU0RJTyBkcml2ZXIgZnVuY3Rpb25zIHRvIGludGVyZmFjZSB3aXRoIFNEIGFuZCB1U0QgY2FyZHMgZGV2aWNlcy4KICAgICBJdCBpcyB1c2VkIGFzIGZvbGxvd3M6Ci0gCi0gICAgKCMpSW5pdGlhbGl6ZSB0aGUgU0RJTyBsb3cgbGV2ZWwgcmVzb3VyY2VzIGJ5IGltcGxlbWVudCB0aGUgSEFMX1NEX01zcEluaXQoKSBBUEk6Ci0gICAgICAgICgjIykgRW5hYmxlIHRoZSBTRElPIGludGVyZmFjZSBjbG9jayB1c2luZyBfX0hBTF9SQ0NfU0RJT19DTEtfRU5BQkxFKCk7IAorCisgICAgKCMpSW5pdGlhbGl6ZSB0aGUgU0RJTyBsb3cgbGV2ZWwgcmVzb3VyY2VzIGJ5IGltcGxlbWVudGluZyB0aGUgSEFMX1NEX01zcEluaXQoKSBBUEk6CisgICAgICAgICgjIykgRW5hYmxlIHRoZSBTRElPIGludGVyZmFjZSBjbG9jayB1c2luZyBfX0hBTF9SQ0NfU0RJT19DTEtfRU5BQkxFKCk7CiAgICAgICAgICgjIykgU0RJTyBwaW5zIGNvbmZpZ3VyYXRpb24gZm9yIFNEIGNhcmQKLSAgICAgICAgICAgICgrKyspIEVuYWJsZSB0aGUgY2xvY2sgZm9yIHRoZSBTRElPIEdQSU9zIHVzaW5nIHRoZSBmdW5jdGlvbnMgX19IQUxfUkNDX0dQSU94X0NMS19FTkFCTEUoKTsgICAKKyAgICAgICAgICAgICgrKyspIEVuYWJsZSB0aGUgY2xvY2sgZm9yIHRoZSBTRElPIEdQSU9zIHVzaW5nIHRoZSBmdW5jdGlvbnMgX19IQUxfUkNDX0dQSU94X0NMS19FTkFCTEUoKTsKICAgICAgICAgICAgICgrKyspIENvbmZpZ3VyZSB0aGVzZSBTRElPIHBpbnMgYXMgYWx0ZXJuYXRlIGZ1bmN0aW9uIHB1bGwtdXAgdXNpbmcgSEFMX0dQSU9fSW5pdCgpCiAgICAgICAgICAgICAgICAgICBhbmQgYWNjb3JkaW5nIHRvIHlvdXIgcGluIGFzc2lnbm1lbnQ7Ci0gICAgICAgICgjIykgRE1BIENvbmZpZ3VyYXRpb24gaWYgeW91IG5lZWQgdG8gdXNlIERNQSBwcm9jZXNzIChIQUxfU0RfUmVhZEJsb2Nrc19ETUEoKQorICAgICAgICAoIyMpIERNQSBjb25maWd1cmF0aW9uIGlmIHlvdSBuZWVkIHRvIHVzZSBETUEgcHJvY2VzcyAoSEFMX1NEX1JlYWRCbG9ja3NfRE1BKCkKICAgICAgICAgICAgICBhbmQgSEFMX1NEX1dyaXRlQmxvY2tzX0RNQSgpIEFQSXMpLgotICAgICAgICAgICAgKCsrKykgRW5hYmxlIHRoZSBETUF4IGludGVyZmFjZSBjbG9jayB1c2luZyBfX0hBTF9SQ0NfRE1BeF9DTEtfRU5BQkxFKCk7IAotICAgICAgICAgICAgKCsrKykgQ29uZmlndXJlIHRoZSBETUEgdXNpbmcgdGhlIGZ1bmN0aW9uIEhBTF9ETUFfSW5pdCgpIHdpdGggcHJlZGVjbGFyZWQgYW5kIGZpbGxlZC4gCisgICAgICAgICAgICAoKysrKSBFbmFibGUgdGhlIERNQXggaW50ZXJmYWNlIGNsb2NrIHVzaW5nIF9fSEFMX1JDQ19ETUF4X0NMS19FTkFCTEUoKTsKKyAgICAgICAgICAgICgrKyspIENvbmZpZ3VyZSB0aGUgRE1BIHVzaW5nIHRoZSBmdW5jdGlvbiBIQUxfRE1BX0luaXQoKSB3aXRoIHByZWRlY2xhcmVkIGFuZCBmaWxsZWQuCiAgICAgICAgICgjIykgTlZJQyBjb25maWd1cmF0aW9uIGlmIHlvdSBuZWVkIHRvIHVzZSBpbnRlcnJ1cHQgcHJvY2VzcyB3aGVuIHVzaW5nIERNQSB0cmFuc2Zlci4KICAgICAgICAgICAgICgrKyspIENvbmZpZ3VyZSB0aGUgU0RJTyBhbmQgRE1BIGludGVycnVwdCBwcmlvcml0aWVzIHVzaW5nIGZ1bmN0aW9ucwogICAgICAgICAgICAgICAgICAgSEFMX05WSUNfU2V0UHJpb3JpdHkoKTsgRE1BIHByaW9yaXR5IGlzIHN1cGVyaW9yIHRvIFNESU8ncyBwcmlvcml0eQogICAgICAgICAgICAgKCsrKykgRW5hYmxlIHRoZSBOVklDIERNQSBhbmQgU0RJTyBJUlFzIHVzaW5nIGZ1bmN0aW9uIEhBTF9OVklDX0VuYWJsZUlSUSgpCi0gICAgICAgICAgICAoKysrKSBTRElPIGludGVycnVwdHMgYXJlIG1hbmFnZWQgdXNpbmcgdGhlIG1hY3JvcyBfX0hBTF9TRF9FTkFCTEVfSVQoKSAKKyAgICAgICAgICAgICgrKyspIFNESU8gaW50ZXJydXB0cyBhcmUgbWFuYWdlZCB1c2luZyB0aGUgbWFjcm9zIF9fSEFMX1NEX0VOQUJMRV9JVCgpCiAgICAgICAgICAgICAgICAgICBhbmQgX19IQUxfU0RfRElTQUJMRV9JVCgpIGluc2lkZSB0aGUgY29tbXVuaWNhdGlvbiBwcm9jZXNzLgogICAgICAgICAgICAgKCsrKykgU0RJTyBpbnRlcnJ1cHRzIHBlbmRpbmcgYml0cyBhcmUgbWFuYWdlZCB1c2luZyB0aGUgbWFjcm9zIF9fSEFMX1NEX0dFVF9JVCgpCiAgICAgICAgICAgICAgICAgICBhbmQgX19IQUxfU0RfQ0xFQVJfSVQoKQogICAgICAgICAoIyMpIE5WSUMgY29uZmlndXJhdGlvbiBpZiB5b3UgbmVlZCB0byB1c2UgaW50ZXJydXB0IHByb2Nlc3MgKEhBTF9TRF9SZWFkQmxvY2tzX0lUKCkKICAgICAgICAgICAgICBhbmQgSEFMX1NEX1dyaXRlQmxvY2tzX0lUKCkgQVBJcykuCi0gICAgICAgICAgICAoKysrKSBDb25maWd1cmUgdGhlIFNESU8gaW50ZXJydXB0IHByaW9yaXRpZXMgdXNpbmcgZnVuY3Rpb24KLSAgICAgICAgICAgICAgICAgIEhBTF9OVklDX1NldFByaW9yaXR5KCk7CisgICAgICAgICAgICAoKysrKSBDb25maWd1cmUgdGhlIFNESU8gaW50ZXJydXB0IHByaW9yaXRpZXMgdXNpbmcgZnVuY3Rpb24gSEFMX05WSUNfU2V0UHJpb3JpdHkoKTsKICAgICAgICAgICAgICgrKyspIEVuYWJsZSB0aGUgTlZJQyBTRElPIElSUXMgdXNpbmcgZnVuY3Rpb24gSEFMX05WSUNfRW5hYmxlSVJRKCkKLSAgICAgICAgICAgICgrKyspIFNESU8gaW50ZXJydXB0cyBhcmUgbWFuYWdlZCB1c2luZyB0aGUgbWFjcm9zIF9fSEFMX1NEX0VOQUJMRV9JVCgpIAorICAgICAgICAgICAgKCsrKykgU0RJTyBpbnRlcnJ1cHRzIGFyZSBtYW5hZ2VkIHVzaW5nIHRoZSBtYWNyb3MgX19IQUxfU0RfRU5BQkxFX0lUKCkKICAgICAgICAgICAgICAgICAgIGFuZCBfX0hBTF9TRF9ESVNBQkxFX0lUKCkgaW5zaWRlIHRoZSBjb21tdW5pY2F0aW9uIHByb2Nlc3MuCiAgICAgICAgICAgICAoKysrKSBTRElPIGludGVycnVwdHMgcGVuZGluZyBiaXRzIGFyZSBtYW5hZ2VkIHVzaW5nIHRoZSBtYWNyb3MgX19IQUxfU0RfR0VUX0lUKCkKICAgICAgICAgICAgICAgICAgIGFuZCBfX0hBTF9TRF9DTEVBUl9JVCgpCi0gICAgKCMpIEF0IHRoaXMgc3RhZ2UsIHlvdSBjYW4gcGVyZm9ybSBTRCByZWFkL3dyaXRlL2VyYXNlIG9wZXJhdGlvbnMgYWZ0ZXIgU0QgY2FyZCBpbml0aWFsaXphdGlvbiAgCisgICAgKCMpIEF0IHRoaXMgc3RhZ2UsIHlvdSBjYW4gcGVyZm9ybSBTRCByZWFkL3dyaXRlL2VyYXNlIG9wZXJhdGlvbnMgYWZ0ZXIgU0QgY2FyZCBpbml0aWFsaXphdGlvbgogCi0gICAgICAgICAKKwogICAqKiogU0QgQ2FyZCBJbml0aWFsaXphdGlvbiBhbmQgY29uZmlndXJhdGlvbiAqKioKLSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICAgIAorICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgWy4uXQotICAgIFRvIGluaXRpYWxpemUgdGhlIFNEIENhcmQsIHVzZSB0aGUgSEFMX1NEX0luaXQoKSBmdW5jdGlvbi4gSXQgSW5pdGlhbGl6ZXMgCi0gICAgU0RJTyBJUChTVE0zMiBzaWRlKSBhbmQgdGhlIFNEIENhcmQsIGFuZCBwdXQgaXQgaW50byBTdGFuZEJ5IFN0YXRlIChSZWFkeSBmb3IgZGF0YSB0cmFuc2ZlcikuIAorICAgIFRvIGluaXRpYWxpemUgdGhlIFNEIENhcmQsIHVzZSB0aGUgSEFMX1NEX0luaXQoKSBmdW5jdGlvbi4gSXQgSW5pdGlhbGl6ZXMKKyAgICBTRElPIFBlcmlwaGVyYWwoU1RNMzIgc2lkZSkgYW5kIHRoZSBTRCBDYXJkLCBhbmQgcHV0IGl0IGludG8gU3RhbmRCeSBTdGF0ZSAoUmVhZHkgZm9yIGRhdGEgdHJhbnNmZXIpLgogICAgIFRoaXMgZnVuY3Rpb24gcHJvdmlkZSB0aGUgZm9sbG93aW5nIG9wZXJhdGlvbnM6CiAKLSAgICAoIykgSW5pdGlhbGl6ZSB0aGUgU0RJTyBwZXJpcGhlcmFsIGludGVyZmFjZSB3aXRoIGRlZmF1bGx0IGNvbmZpZ3VyYXRpb24uCi0gICAgICAgIFRoZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzIGlzIGRvbmUgYXQgNDAwS0h6LiBZb3UgY2FuIGNoYW5nZSBvciBhZGFwdCAKLSAgICAgICAgdGhpcyBmcmVxdWVuY3kgYnkgYWRqdXN0aW5nIHRoZSAiQ2xvY2tEaXYiIGZpZWxkLiAKKyAgICAoIykgQXBwbHkgdGhlIFNEIENhcmQgaW5pdGlhbGl6YXRpb24gcHJvY2VzcyBhdCA0MDBLSHogYW5kIGNoZWNrIHRoZSBTRCBDYXJkCisgICAgICAgIHR5cGUgKFN0YW5kYXJkIENhcGFjaXR5IG9yIEhpZ2ggQ2FwYWNpdHkpLiBZb3UgY2FuIGNoYW5nZSBvciBhZGFwdCB0aGlzCisgICAgICAgIGZyZXF1ZW5jeSBieSBhZGp1c3RpbmcgdGhlICJDbG9ja0RpdiIgZmllbGQuCiAgICAgICAgIFRoZSBTRCBDYXJkIGZyZXF1ZW5jeSAoU0RJT19DSykgaXMgY29tcHV0ZWQgYXMgZm9sbG93czoKLSAgCisKICAgICAgICAgICAgU0RJT19DSyA9IFNESU9DTEsgLyAoQ2xvY2tEaXYgKyAyKQotICAKLSAgICAgICAgSW4gaW5pdGlhbGl6YXRpb24gbW9kZSBhbmQgYWNjb3JkaW5nIHRvIHRoZSBTRCBDYXJkIHN0YW5kYXJkLCAKKworICAgICAgICBJbiBpbml0aWFsaXphdGlvbiBtb2RlIGFuZCBhY2NvcmRpbmcgdG8gdGhlIFNEIENhcmQgc3RhbmRhcmQsCiAgICAgICAgIG1ha2Ugc3VyZSB0aGF0IHRoZSBTRElPX0NLIGZyZXF1ZW5jeSBkb2Vzbid0IGV4Y2VlZCA0MDBLSHouCiAKLSAgICAgICAgVGhpcyBwaGFzZSBvZiBpbml0aWFsaXphdGlvbiBpcyBkb25lIHRocm91Z2ggU0RJT19Jbml0KCkgYW5kIAorICAgICAgICBUaGlzIHBoYXNlIG9mIGluaXRpYWxpemF0aW9uIGlzIGRvbmUgdGhyb3VnaCBTRElPX0luaXQoKSBhbmQKICAgICAgICAgU0RJT19Qb3dlclN0YXRlX09OKCkgU0RJTyBsb3cgbGV2ZWwgQVBJcy4KIAogICAgICgjKSBJbml0aWFsaXplIHRoZSBTRCBjYXJkLiBUaGUgQVBJIHVzZWQgaXMgSEFMX1NEX0luaXRDYXJkKCkuCi0gICAgICAgIFRoaXMgcGhhc2UgYWxsb3dzIHRoZSBjYXJkIGluaXRpYWxpemF0aW9uIGFuZCBpZGVudGlmaWNhdGlvbiAKKyAgICAgICAgVGhpcyBwaGFzZSBhbGxvd3MgdGhlIGNhcmQgaW5pdGlhbGl6YXRpb24gYW5kIGlkZW50aWZpY2F0aW9uCiAgICAgICAgIGFuZCBjaGVjayB0aGUgU0QgQ2FyZCB0eXBlIChTdGFuZGFyZCBDYXBhY2l0eSBvciBIaWdoIENhcGFjaXR5KQogICAgICAgICBUaGUgaW5pdGlhbGl6YXRpb24gZmxvdyBpcyBjb21wYXRpYmxlIHdpdGggU0Qgc3RhbmRhcmQuCiAKLSAgICAgICAgVGhpcyBBUEkgKEhBTF9TRF9Jbml0Q2FyZCgpKSBjb3VsZCBiZSB1c2VkIGFsc28gdG8gcmVpbml0aWFsaXplIHRoZSBjYXJkIGluIGNhc2UgCisgICAgICAgIFRoaXMgQVBJIChIQUxfU0RfSW5pdENhcmQoKSkgY291bGQgYmUgdXNlZCBhbHNvIHRvIHJlaW5pdGlhbGl6ZSB0aGUgY2FyZCBpbiBjYXNlCiAgICAgICAgIG9mIHBsdWctb2ZmIHBsdWctaW4uCi0gIAotICAgICgjKSBDb25maWd1cmUgdGhlIFNEIENhcmQgRGF0YSB0cmFuc2ZlciBmcmVxdWVuY3kuIEJ5IERlZmF1bHQsIHRoZSBjYXJkIHRyYW5zZmVyIAotICAgICAgICBmcmVxdWVuY3kgaXMgc2V0IHRvIDI0TUh6LiBZb3UgY2FuIGNoYW5nZSBvciBhZGFwdCB0aGlzIGZyZXF1ZW5jeSBieSBhZGp1c3RpbmcgCi0gICAgICAgIHRoZSAiQ2xvY2tEaXYiIGZpZWxkLgotICAgICAgICBJbiB0cmFuc2ZlciBtb2RlIGFuZCBhY2NvcmRpbmcgdG8gdGhlIFNEIENhcmQgc3RhbmRhcmQsIG1ha2Ugc3VyZSB0aGF0IHRoZSAKKworICAgICgjKSBDb25maWd1cmUgdGhlIFNEIENhcmQgRGF0YSB0cmFuc2ZlciBmcmVxdWVuY3kuIFlvdSBjYW4gY2hhbmdlIG9yIGFkYXB0IHRoaXMKKyAgICAgICAgZnJlcXVlbmN5IGJ5IGFkanVzdGluZyB0aGUgIkNsb2NrRGl2IiBmaWVsZC4KKyAgICAgICAgSW4gdHJhbnNmZXIgbW9kZSBhbmQgYWNjb3JkaW5nIHRvIHRoZSBTRCBDYXJkIHN0YW5kYXJkLCBtYWtlIHN1cmUgdGhhdCB0aGUKICAgICAgICAgU0RJT19DSyBmcmVxdWVuY3kgZG9lc24ndCBleGNlZWQgMjVNSHogYW5kIDUwTUh6IGluIEhpZ2gtc3BlZWQgbW9kZSBzd2l0Y2guCi0gICAgICAgIFRvIGJlIGFibGUgdG8gdXNlIGEgZnJlcXVlbmN5IGhpZ2hlciB0aGFuIDI0TUh6LCB5b3Ugc2hvdWxkIHVzZSB0aGUgU0RJTyAKLSAgICAgICAgcGVyaXBoZXJhbCBpbiBieXBhc3MgbW9kZS4gUmVmZXIgdG8gdGhlIGNvcnJlc3BvbmRpbmcgcmVmZXJlbmNlIG1hbnVhbCAKKyAgICAgICAgVG8gYmUgYWJsZSB0byB1c2UgYSBmcmVxdWVuY3kgaGlnaGVyIHRoYW4gMjRNSHosIHlvdSBzaG91bGQgdXNlIHRoZSBTRElPCisgICAgICAgIHBlcmlwaGVyYWwgaW4gYnlwYXNzIG1vZGUuIFJlZmVyIHRvIHRoZSBjb3JyZXNwb25kaW5nIHJlZmVyZW5jZSBtYW51YWwKICAgICAgICAgZm9yIG1vcmUgZGV0YWlscy4KLSAgCisKICAgICAoIykgU2VsZWN0IHRoZSBjb3JyZXNwb25kaW5nIFNEIENhcmQgYWNjb3JkaW5nIHRvIHRoZSBhZGRyZXNzIHJlYWQgd2l0aCB0aGUgc3RlcCAyLgotICAgIAorCiAgICAgKCMpIENvbmZpZ3VyZSB0aGUgU0QgQ2FyZCBpbiB3aWRlIGJ1cyBtb2RlOiA0LWJpdHMgZGF0YS4KLSAgCisKICAgKioqIFNEIENhcmQgUmVhZCBvcGVyYXRpb24gKioqCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICBbLi5dIAotICAgICgrKSBZb3UgY2FuIHJlYWQgZnJvbSBTRCBjYXJkIGluIHBvbGxpbmcgbW9kZSBieSB1c2luZyBmdW5jdGlvbiBIQUxfU0RfUmVhZEJsb2NrcygpLiAKLSAgICAgICAgVGhpcyBmdW5jdGlvbiBhbGxvd3MgdGhlIHJlYWQgb2YgNTEyIGJ5dGVzIGJsb2Nrcy4KLSAgICAgICAgWW91IGNhbiBjaG9vc2UgZWl0aGVyIG9uZSBibG9jayByZWFkIG9wZXJhdGlvbiBvciBtdWx0aXBsZSBibG9jayByZWFkIG9wZXJhdGlvbiAKKyAgWy4uXQorICAgICgrKSBZb3UgY2FuIHJlYWQgZnJvbSBTRCBjYXJkIGluIHBvbGxpbmcgbW9kZSBieSB1c2luZyBmdW5jdGlvbiBIQUxfU0RfUmVhZEJsb2NrcygpLgorICAgICAgICBUaGlzIGZ1bmN0aW9uIHN1cHBvcnQgb25seSA1MTItYnl0ZXMgYmxvY2sgbGVuZ3RoICh0aGUgYmxvY2sgc2l6ZSBzaG91bGQgYmUKKyAgICAgICAgY2hvc2VuIGFzIDUxMiBieXRlcykuCisgICAgICAgIFlvdSBjYW4gY2hvb3NlIGVpdGhlciBvbmUgYmxvY2sgcmVhZCBvcGVyYXRpb24gb3IgbXVsdGlwbGUgYmxvY2sgcmVhZCBvcGVyYXRpb24KICAgICAgICAgYnkgYWRqdXN0aW5nIHRoZSAiTnVtYmVyT2ZCbG9ja3MiIHBhcmFtZXRlci4KICAgICAgICAgQWZ0ZXIgdGhpcywgeW91IGhhdmUgdG8gZW5zdXJlIHRoYXQgdGhlIHRyYW5zZmVyIGlzIGRvbmUgY29ycmVjdGx5LiBUaGUgY2hlY2sgaXMgZG9uZQogICAgICAgICB0aHJvdWdoIEhBTF9TRF9HZXRDYXJkU3RhdGUoKSBmdW5jdGlvbiBmb3IgU0QgY2FyZCBzdGF0ZS4KIAogICAgICgrKSBZb3UgY2FuIHJlYWQgZnJvbSBTRCBjYXJkIGluIERNQSBtb2RlIGJ5IHVzaW5nIGZ1bmN0aW9uIEhBTF9TRF9SZWFkQmxvY2tzX0RNQSgpLgotICAgICAgICBUaGlzIGZ1bmN0aW9uIGFsbG93cyB0aGUgcmVhZCBvZiA1MTIgYnl0ZXMgYmxvY2tzLgotICAgICAgICBZb3UgY2FuIGNob29zZSBlaXRoZXIgb25lIGJsb2NrIHJlYWQgb3BlcmF0aW9uIG9yIG11bHRpcGxlIGJsb2NrIHJlYWQgb3BlcmF0aW9uIAorICAgICAgICBUaGlzIGZ1bmN0aW9uIHN1cHBvcnQgb25seSA1MTItYnl0ZXMgYmxvY2sgbGVuZ3RoICh0aGUgYmxvY2sgc2l6ZSBzaG91bGQgYmUKKyAgICAgICAgY2hvc2VuIGFzIDUxMiBieXRlcykuCisgICAgICAgIFlvdSBjYW4gY2hvb3NlIGVpdGhlciBvbmUgYmxvY2sgcmVhZCBvcGVyYXRpb24gb3IgbXVsdGlwbGUgYmxvY2sgcmVhZCBvcGVyYXRpb24KICAgICAgICAgYnkgYWRqdXN0aW5nIHRoZSAiTnVtYmVyT2ZCbG9ja3MiIHBhcmFtZXRlci4KICAgICAgICAgQWZ0ZXIgdGhpcywgeW91IGhhdmUgdG8gZW5zdXJlIHRoYXQgdGhlIHRyYW5zZmVyIGlzIGRvbmUgY29ycmVjdGx5LiBUaGUgY2hlY2sgaXMgZG9uZQogICAgICAgICB0aHJvdWdoIEhBTF9TRF9HZXRDYXJkU3RhdGUoKSBmdW5jdGlvbiBmb3IgU0QgY2FyZCBzdGF0ZS4KICAgICAgICAgWW91IGNvdWxkIGFsc28gY2hlY2sgdGhlIERNQSB0cmFuc2ZlciBwcm9jZXNzIHRocm91Z2ggdGhlIFNEIFJ4IGludGVycnVwdCBldmVudC4KIAogICAgICgrKSBZb3UgY2FuIHJlYWQgZnJvbSBTRCBjYXJkIGluIEludGVycnVwdCBtb2RlIGJ5IHVzaW5nIGZ1bmN0aW9uIEhBTF9TRF9SZWFkQmxvY2tzX0lUKCkuCi0gICAgICAgIFRoaXMgZnVuY3Rpb24gYWxsb3dzIHRoZSByZWFkIG9mIDUxMiBieXRlcyBibG9ja3MuCi0gICAgICAgIFlvdSBjYW4gY2hvb3NlIGVpdGhlciBvbmUgYmxvY2sgcmVhZCBvcGVyYXRpb24gb3IgbXVsdGlwbGUgYmxvY2sgcmVhZCBvcGVyYXRpb24gCisgICAgICAgIFRoaXMgZnVuY3Rpb24gc3VwcG9ydCBvbmx5IDUxMi1ieXRlcyBibG9jayBsZW5ndGggKHRoZSBibG9jayBzaXplIHNob3VsZCBiZQorICAgICAgICBjaG9zZW4gYXMgNTEyIGJ5dGVzKS4KKyAgICAgICAgWW91IGNhbiBjaG9vc2UgZWl0aGVyIG9uZSBibG9jayByZWFkIG9wZXJhdGlvbiBvciBtdWx0aXBsZSBibG9jayByZWFkIG9wZXJhdGlvbgogICAgICAgICBieSBhZGp1c3RpbmcgdGhlICJOdW1iZXJPZkJsb2NrcyIgcGFyYW1ldGVyLgogICAgICAgICBBZnRlciB0aGlzLCB5b3UgaGF2ZSB0byBlbnN1cmUgdGhhdCB0aGUgdHJhbnNmZXIgaXMgZG9uZSBjb3JyZWN0bHkuIFRoZSBjaGVjayBpcyBkb25lCiAgICAgICAgIHRocm91Z2ggSEFMX1NEX0dldENhcmRTdGF0ZSgpIGZ1bmN0aW9uIGZvciBTRCBjYXJkIHN0YXRlLgogICAgICAgICBZb3UgY291bGQgYWxzbyBjaGVjayB0aGUgSVQgdHJhbnNmZXIgcHJvY2VzcyB0aHJvdWdoIHRoZSBTRCBSeCBpbnRlcnJ1cHQgZXZlbnQuCi0gIAorCiAgICoqKiBTRCBDYXJkIFdyaXRlIG9wZXJhdGlvbiAqKioKLSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAKLSAgWy4uXSAKLSAgICAoKykgWW91IGNhbiB3cml0ZSB0byBTRCBjYXJkIGluIHBvbGxpbmcgbW9kZSBieSB1c2luZyBmdW5jdGlvbiBIQUxfU0RfV3JpdGVCbG9ja3MoKS4gCi0gICAgICAgIFRoaXMgZnVuY3Rpb24gYWxsb3dzIHRoZSByZWFkIG9mIDUxMiBieXRlcyBibG9ja3MuCi0gICAgICAgIFlvdSBjYW4gY2hvb3NlIGVpdGhlciBvbmUgYmxvY2sgcmVhZCBvcGVyYXRpb24gb3IgbXVsdGlwbGUgYmxvY2sgcmVhZCBvcGVyYXRpb24gCisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgWy4uXQorICAgICgrKSBZb3UgY2FuIHdyaXRlIHRvIFNEIGNhcmQgaW4gcG9sbGluZyBtb2RlIGJ5IHVzaW5nIGZ1bmN0aW9uIEhBTF9TRF9Xcml0ZUJsb2NrcygpLgorICAgICAgICBUaGlzIGZ1bmN0aW9uIHN1cHBvcnQgb25seSA1MTItYnl0ZXMgYmxvY2sgbGVuZ3RoICh0aGUgYmxvY2sgc2l6ZSBzaG91bGQgYmUKKyAgICAgICAgY2hvc2VuIGFzIDUxMiBieXRlcykuCisgICAgICAgIFlvdSBjYW4gY2hvb3NlIGVpdGhlciBvbmUgYmxvY2sgcmVhZCBvcGVyYXRpb24gb3IgbXVsdGlwbGUgYmxvY2sgcmVhZCBvcGVyYXRpb24KICAgICAgICAgYnkgYWRqdXN0aW5nIHRoZSAiTnVtYmVyT2ZCbG9ja3MiIHBhcmFtZXRlci4KICAgICAgICAgQWZ0ZXIgdGhpcywgeW91IGhhdmUgdG8gZW5zdXJlIHRoYXQgdGhlIHRyYW5zZmVyIGlzIGRvbmUgY29ycmVjdGx5LiBUaGUgY2hlY2sgaXMgZG9uZQogICAgICAgICB0aHJvdWdoIEhBTF9TRF9HZXRDYXJkU3RhdGUoKSBmdW5jdGlvbiBmb3IgU0QgY2FyZCBzdGF0ZS4KIAogICAgICgrKSBZb3UgY2FuIHdyaXRlIHRvIFNEIGNhcmQgaW4gRE1BIG1vZGUgYnkgdXNpbmcgZnVuY3Rpb24gSEFMX1NEX1dyaXRlQmxvY2tzX0RNQSgpLgotICAgICAgICBUaGlzIGZ1bmN0aW9uIGFsbG93cyB0aGUgcmVhZCBvZiA1MTIgYnl0ZXMgYmxvY2tzLgotICAgICAgICBZb3UgY2FuIGNob29zZSBlaXRoZXIgb25lIGJsb2NrIHJlYWQgb3BlcmF0aW9uIG9yIG11bHRpcGxlIGJsb2NrIHJlYWQgb3BlcmF0aW9uIAorICAgICAgICBUaGlzIGZ1bmN0aW9uIHN1cHBvcnQgb25seSA1MTItYnl0ZXMgYmxvY2sgbGVuZ3RoICh0aGUgYmxvY2sgc2l6ZSBzaG91bGQgYmUKKyAgICAgICAgY2hvc2VuIGFzIDUxMiBieXRlcykuCisgICAgICAgIFlvdSBjYW4gY2hvb3NlIGVpdGhlciBvbmUgYmxvY2sgcmVhZCBvcGVyYXRpb24gb3IgbXVsdGlwbGUgYmxvY2sgcmVhZCBvcGVyYXRpb24KICAgICAgICAgYnkgYWRqdXN0aW5nIHRoZSAiTnVtYmVyT2ZCbG9ja3MiIHBhcmFtZXRlci4KICAgICAgICAgQWZ0ZXIgdGhpcywgeW91IGhhdmUgdG8gZW5zdXJlIHRoYXQgdGhlIHRyYW5zZmVyIGlzIGRvbmUgY29ycmVjdGx5LiBUaGUgY2hlY2sgaXMgZG9uZQogICAgICAgICB0aHJvdWdoIEhBTF9TRF9HZXRDYXJkU3RhdGUoKSBmdW5jdGlvbiBmb3IgU0QgY2FyZCBzdGF0ZS4KLSAgICAgICAgWW91IGNvdWxkIGFsc28gY2hlY2sgdGhlIERNQSB0cmFuc2ZlciBwcm9jZXNzIHRocm91Z2ggdGhlIFNEIFR4IGludGVycnVwdCBldmVudC4gIAorICAgICAgICBZb3UgY291bGQgYWxzbyBjaGVjayB0aGUgRE1BIHRyYW5zZmVyIHByb2Nlc3MgdGhyb3VnaCB0aGUgU0QgVHggaW50ZXJydXB0IGV2ZW50LgogCiAgICAgKCspIFlvdSBjYW4gd3JpdGUgdG8gU0QgY2FyZCBpbiBJbnRlcnJ1cHQgbW9kZSBieSB1c2luZyBmdW5jdGlvbiBIQUxfU0RfV3JpdGVCbG9ja3NfSVQoKS4KLSAgICAgICAgVGhpcyBmdW5jdGlvbiBhbGxvd3MgdGhlIHJlYWQgb2YgNTEyIGJ5dGVzIGJsb2Nrcy4KLSAgICAgICAgWW91IGNhbiBjaG9vc2UgZWl0aGVyIG9uZSBibG9jayByZWFkIG9wZXJhdGlvbiBvciBtdWx0aXBsZSBibG9jayByZWFkIG9wZXJhdGlvbiAKKyAgICAgICAgVGhpcyBmdW5jdGlvbiBzdXBwb3J0IG9ubHkgNTEyLWJ5dGVzIGJsb2NrIGxlbmd0aCAodGhlIGJsb2NrIHNpemUgc2hvdWxkIGJlCisgICAgICAgIGNob3NlbiBhcyA1MTIgYnl0ZXMpLgorICAgICAgICBZb3UgY2FuIGNob29zZSBlaXRoZXIgb25lIGJsb2NrIHJlYWQgb3BlcmF0aW9uIG9yIG11bHRpcGxlIGJsb2NrIHJlYWQgb3BlcmF0aW9uCiAgICAgICAgIGJ5IGFkanVzdGluZyB0aGUgIk51bWJlck9mQmxvY2tzIiBwYXJhbWV0ZXIuCiAgICAgICAgIEFmdGVyIHRoaXMsIHlvdSBoYXZlIHRvIGVuc3VyZSB0aGF0IHRoZSB0cmFuc2ZlciBpcyBkb25lIGNvcnJlY3RseS4gVGhlIGNoZWNrIGlzIGRvbmUKICAgICAgICAgdGhyb3VnaCBIQUxfU0RfR2V0Q2FyZFN0YXRlKCkgZnVuY3Rpb24gZm9yIFNEIGNhcmQgc3RhdGUuCiAgICAgICAgIFlvdSBjb3VsZCBhbHNvIGNoZWNrIHRoZSBJVCB0cmFuc2ZlciBwcm9jZXNzIHRocm91Z2ggdGhlIFNEIFR4IGludGVycnVwdCBldmVudC4KLSAgCisKICAgKioqIFNEIGNhcmQgc3RhdHVzICoqKgotICA9PT09PT09PT09PT09PT09PT09PT09IAorICA9PT09PT09PT09PT09PT09PT09PT09CiAgIFsuLl0KLSAgICAoKykgVGhlIFNEIFN0YXR1cyBjb250YWlucyBzdGF0dXMgYml0cyB0aGF0IGFyZSByZWxhdGVkIHRvIHRoZSBTRCBNZW1vcnkgCisgICAgKCspIFRoZSBTRCBTdGF0dXMgY29udGFpbnMgc3RhdHVzIGJpdHMgdGhhdCBhcmUgcmVsYXRlZCB0byB0aGUgU0QgTWVtb3J5CiAgICAgICAgIENhcmQgcHJvcHJpZXRhcnkgZmVhdHVyZXMuIFRvIGdldCBTRCBjYXJkIHN0YXR1cyB1c2UgdGhlIEhBTF9TRF9HZXRDYXJkU3RhdHVzKCkuCiAKICAgKioqIFNEIGNhcmQgaW5mb3JtYXRpb24gKioqCi0gID09PT09PT09PT09PT09PT09PT09PT09PT09PSAKKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIFsuLl0KICAgICAoKykgVG8gZ2V0IFNEIGNhcmQgaW5mb3JtYXRpb24sIHlvdSBjYW4gdXNlIHRoZSBmdW5jdGlvbiBIQUxfU0RfR2V0Q2FyZEluZm8oKS4KICAgICAgICAgSXQgcmV0dXJucyB1c2VmdWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIFNEIGNhcmQgc3VjaCBhcyBibG9jayBzaXplLCBjYXJkIHR5cGUsCkBAIC0xNjUsMTMgKzE2OSwxMSBAQAogCiAgICoqKiBTRCBjYXJkIENTRCByZWdpc3RlciAqKioKICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICBbLi5dCiAgICAgKCspIFRoZSBIQUxfU0RfR2V0Q2FyZENTRCgpIEFQSSBhbGxvd3MgdG8gZ2V0IHRoZSBwYXJhbWV0ZXJzIG9mIHRoZSBDU0QgcmVnaXN0ZXIuCiAgICAgICAgIFNvbWUgb2YgdGhlIENTRCBwYXJhbWV0ZXJzIGFyZSB1c2VmdWwgZm9yIGNhcmQgaW5pdGlhbGl6YXRpb24gYW5kIGlkZW50aWZpY2F0aW9uLgogCiAgICoqKiBTRCBjYXJkIENJRCByZWdpc3RlciAqKioKICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICBbLi5dCiAgICAgKCspIFRoZSBIQUxfU0RfR2V0Q2FyZENJRCgpIEFQSSBhbGxvd3MgdG8gZ2V0IHRoZSBwYXJhbWV0ZXJzIG9mIHRoZSBDSUQgcmVnaXN0ZXIuCiAgICAgICAgIFNvbWUgb2YgdGhlIENTRCBwYXJhbWV0ZXJzIGFyZSB1c2VmdWwgZm9yIGNhcmQgaW5pdGlhbGl6YXRpb24gYW5kIGlkZW50aWZpY2F0aW9uLgogCkBAIC0xNzksNyArMTgxLDcgQEAKICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBbLi5dCiAgICAgQmVsb3cgdGhlIGxpc3Qgb2YgbW9zdCB1c2VkIG1hY3JvcyBpbiBTRCBIQUwgZHJpdmVyLgotICAgICAgIAorCiAgICAgKCspIF9fSEFMX1NEX0VOQUJMRSA6IEVuYWJsZSB0aGUgU0QgZGV2aWNlCiAgICAgKCspIF9fSEFMX1NEX0RJU0FCTEUgOiBEaXNhYmxlIHRoZSBTRCBkZXZpY2UKICAgICAoKykgX19IQUxfU0RfRE1BX0VOQUJMRTogRW5hYmxlIHRoZSBTRElPIERNQSB0cmFuc2ZlcgpAQCAtMTg5LDkgKzE5MSw4IEBACiAgICAgKCspIF9fSEFMX1NEX0dFVF9GTEFHOkNoZWNrIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBTRCBmbGFnIGlzIHNldCBvciBub3QKICAgICAoKykgX19IQUxfU0RfQ0xFQVJfRkxBRzogQ2xlYXIgdGhlIFNEJ3MgcGVuZGluZyBmbGFncwogCi0gICBbLi5dCi0gICAgKEApIFlvdSBjYW4gcmVmZXIgdG8gdGhlIFNEIEhBTCBkcml2ZXIgaGVhZGVyIGZpbGUgZm9yIG1vcmUgdXNlZnVsIG1hY3JvcyAKLSAgICAgIAorICAgIChAKSBZb3UgY2FuIHJlZmVyIHRvIHRoZSBTRCBIQUwgZHJpdmVyIGhlYWRlciBmaWxlIGZvciBtb3JlIHVzZWZ1bCBtYWNyb3MKKwogICAqKiogQ2FsbGJhY2sgcmVnaXN0cmF0aW9uICoqKgogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgWy4uXQpAQCAtMjIyLDcgKzIyMyw3IEBACiAgICAgQnkgZGVmYXVsdCwgYWZ0ZXIgdGhlIEByZWYgSEFMX1NEX0luaXQgYW5kIGlmIHRoZSBzdGF0ZSBpcyBIQUxfU0RfU1RBVEVfUkVTRVQKICAgICBhbGwgY2FsbGJhY2tzIGFyZSByZXNldCB0byB0aGUgY29ycmVzcG9uZGluZyBsZWdhY3kgd2VhayAoc3VyY2hhcmdlZCkgZnVuY3Rpb25zLgogICAgIEV4Y2VwdGlvbiBkb25lIGZvciBNc3BJbml0IGFuZCBNc3BEZUluaXQgY2FsbGJhY2tzIHRoYXQgYXJlIHJlc3BlY3RpdmVseQotICAgIHJlc2V0IHRvIHRoZSBsZWdhY3kgd2VhayAoc3VyY2hhcmdlZCkgZnVuY3Rpb25zIGluIHRoZSBAcmVmIEhBTF9TRF9Jbml0IAorICAgIHJlc2V0IHRvIHRoZSBsZWdhY3kgd2VhayAoc3VyY2hhcmdlZCkgZnVuY3Rpb25zIGluIHRoZSBAcmVmIEhBTF9TRF9Jbml0CiAgICAgYW5kIEByZWYgIEhBTF9TRF9EZUluaXQgb25seSB3aGVuIHRoZXNlIGNhbGxiYWNrcyBhcmUgbnVsbCAobm90IHJlZ2lzdGVyZWQgYmVmb3JlaGFuZCkuCiAgICAgSWYgbm90LCBNc3BJbml0IG9yIE1zcERlSW5pdCBhcmUgbm90IG51bGwsIHRoZSBAcmVmIEhBTF9TRF9Jbml0IGFuZCBAcmVmIEhBTF9TRF9EZUluaXQKICAgICBrZWVwIGFuZCB1c2UgdGhlIHVzZXIgTXNwSW5pdC9Nc3BEZUluaXQgY2FsbGJhY2tzIChyZWdpc3RlcmVkIGJlZm9yZWhhbmQpCkBAIC0yMzIsMTEgKzIzMywxMSBAQAogICAgIGluIFJFQURZIG9yIFJFU0VUIHN0YXRlLCB0aHVzIHJlZ2lzdGVyZWQgKHVzZXIpIE1zcEluaXQvRGVJbml0IGNhbGxiYWNrcyBjYW4gYmUgdXNlZAogICAgIGR1cmluZyB0aGUgSW5pdC9EZUluaXQuCiAgICAgSW4gdGhhdCBjYXNlIGZpcnN0IHJlZ2lzdGVyIHRoZSBNc3BJbml0L01zcERlSW5pdCB1c2VyIGNhbGxiYWNrcwotICAgIHVzaW5nIEByZWYgSEFMX1NEX1JlZ2lzdGVyQ2FsbGJhY2sgYmVmb3JlIGNhbGxpbmcgQHJlZiBIQUxfU0RfRGVJbml0IAorICAgIHVzaW5nIEByZWYgSEFMX1NEX1JlZ2lzdGVyQ2FsbGJhY2sgYmVmb3JlIGNhbGxpbmcgQHJlZiBIQUxfU0RfRGVJbml0CiAgICAgb3IgQHJlZiBIQUxfU0RfSW5pdCBmdW5jdGlvbi4KIAogICAgIFdoZW4gVGhlIGNvbXBpbGF0aW9uIGRlZmluZSBVU0VfSEFMX1NEX1JFR0lTVEVSX0NBTExCQUNLUyBpcyBzZXQgdG8gMCBvcgotICAgIG5vdCBkZWZpbmVkLCB0aGUgY2FsbGJhY2sgcmVnaXN0ZXJpbmcgZmVhdHVyZSBpcyBub3QgYXZhaWxhYmxlIAorICAgIG5vdCBkZWZpbmVkLCB0aGUgY2FsbGJhY2sgcmVnaXN0ZXJpbmcgZmVhdHVyZSBpcyBub3QgYXZhaWxhYmxlCiAgICAgYW5kIHdlYWsgKHN1cmNoYXJnZWQpIGNhbGxiYWNrcyBhcmUgdXNlZC4KIAogICBAZW5kdmVyYmF0aW0KQEAgLTI0OSw0MCArMjUwLDM2IEBACiAgICogVGhpcyBzb2Z0d2FyZSBjb21wb25lbnQgaXMgbGljZW5zZWQgYnkgU1QgdW5kZXIgQlNEIDMtQ2xhdXNlIGxpY2Vuc2UsCiAgICogdGhlICJMaWNlbnNlIjsgWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZQogICAqIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdDoKLSAgKiAgICAgICAgICAgICAgICAgICAgICAgIG9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZQorICAqICAgICAgICAgICAgICAgICAgICAgICBvcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2UKICAgKgogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgKi8gCisgICovCiAKIC8qIEluY2x1ZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAjaW5jbHVkZSAic3RtMzJmNHh4X2hhbC5oIgogCisjaWYgZGVmaW5lZChTRElPKQorCiAvKiogQGFkZHRvZ3JvdXAgU1RNMzJGNHh4X0hBTF9Ecml2ZXIKICAgKiBAewogICAqLwogCi0vKiogQGFkZHRvZ3JvdXAgU0QgCisvKiogQGFkZHRvZ3JvdXAgU0QKICAgKiBAewogICAqLwogCiAjaWZkZWYgSEFMX1NEX01PRFVMRV9FTkFCTEVECiAKLSNpZiBkZWZpbmVkKFNUTTMyRjQwNXh4KSB8fCBkZWZpbmVkKFNUTTMyRjQxNXh4KSB8fCBkZWZpbmVkKFNUTTMyRjQwN3h4KSB8fCBkZWZpbmVkKFNUTTMyRjQxN3h4KSB8fCBcCi0gICAgZGVmaW5lZChTVE0zMkY0Mjd4eCkgfHwgZGVmaW5lZChTVE0zMkY0Mzd4eCkgfHwgZGVmaW5lZChTVE0zMkY0Mjl4eCkgfHwgZGVmaW5lZChTVE0zMkY0Mzl4eCkgfHwgXAotICAgIGRlZmluZWQoU1RNMzJGNDAxeEMpIHx8IGRlZmluZWQoU1RNMzJGNDAxeEUpIHx8IGRlZmluZWQoU1RNMzJGNDExeEUpIHx8IGRlZmluZWQoU1RNMzJGNDQ2eHgpIHx8IFwKLSAgICBkZWZpbmVkKFNUTTMyRjQ2OXh4KSB8fCBkZWZpbmVkKFNUTTMyRjQ3OXh4KSB8fCBkZWZpbmVkKFNUTTMyRjQxMlp4KSB8fCBkZWZpbmVkKFNUTTMyRjQxMlZ4KSB8fCBcCi0gICAgZGVmaW5lZChTVE0zMkY0MTJSeCkgfHwgZGVmaW5lZChTVE0zMkY0MTJDeCkgfHwgZGVmaW5lZChTVE0zMkY0MTN4eCkgfHwgZGVmaW5lZChTVE0zMkY0MjN4eCkKLQogLyogUHJpdmF0ZSB0eXBlZGVmIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qIFByaXZhdGUgZGVmaW5lIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiogQGFkZHRvZ3JvdXAgU0RfUHJpdmF0ZV9EZWZpbmVzCiAgICogQHsKICAgKi8KLSAgICAKKwogLyoqCiAgICogQH0KICAgKi8KLSAgCisKIC8qIFByaXZhdGUgbWFjcm8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiBQcml2YXRlIHZhcmlhYmxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyogUHJpdmF0ZSBmdW5jdGlvbiBwcm90b3R5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTI5MSwxNSArMjg4LDE1IEBACiAgICogQHsKICAgKi8KIHN0YXRpYyB1aW50MzJfdCBTRF9Jbml0Q2FyZChTRF9IYW5kbGVUeXBlRGVmICpoc2QpOwotc3RhdGljIHVpbnQzMl90IFNEX1Bvd2VyT04oU0RfSGFuZGxlVHlwZURlZiAqaHNkKTsgICAgICAgICAgICAgICAgICAgICAgCitzdGF0aWMgdWludDMyX3QgU0RfUG93ZXJPTihTRF9IYW5kbGVUeXBlRGVmICpoc2QpOwogc3RhdGljIHVpbnQzMl90IFNEX1NlbmRTRFN0YXR1cyhTRF9IYW5kbGVUeXBlRGVmICpoc2QsIHVpbnQzMl90ICpwU0RzdGF0dXMpOwogc3RhdGljIHVpbnQzMl90IFNEX1NlbmRTdGF0dXMoU0RfSGFuZGxlVHlwZURlZiAqaHNkLCB1aW50MzJfdCAqcENhcmRTdGF0dXMpOwogc3RhdGljIHVpbnQzMl90IFNEX1dpZGVCdXNfRW5hYmxlKFNEX0hhbmRsZVR5cGVEZWYgKmhzZCk7CiBzdGF0aWMgdWludDMyX3QgU0RfV2lkZUJ1c19EaXNhYmxlKFNEX0hhbmRsZVR5cGVEZWYgKmhzZCk7CiBzdGF0aWMgdWludDMyX3QgU0RfRmluZFNDUihTRF9IYW5kbGVUeXBlRGVmICpoc2QsIHVpbnQzMl90ICpwU0NSKTsKLXN0YXRpYyBIQUxfU3RhdHVzVHlwZURlZiBTRF9Qb3dlck9GRihTRF9IYW5kbGVUeXBlRGVmICpoc2QpOwotc3RhdGljIEhBTF9TdGF0dXNUeXBlRGVmIFNEX1dyaXRlX0lUKFNEX0hhbmRsZVR5cGVEZWYgKmhzZCk7Ci1zdGF0aWMgSEFMX1N0YXR1c1R5cGVEZWYgU0RfUmVhZF9JVChTRF9IYW5kbGVUeXBlRGVmICpoc2QpOworc3RhdGljIHZvaWQgU0RfUG93ZXJPRkYoU0RfSGFuZGxlVHlwZURlZiAqaHNkKTsKK3N0YXRpYyB2b2lkIFNEX1dyaXRlX0lUKFNEX0hhbmRsZVR5cGVEZWYgKmhzZCk7CitzdGF0aWMgdm9pZCBTRF9SZWFkX0lUKFNEX0hhbmRsZVR5cGVEZWYgKmhzZCk7CiBzdGF0aWMgdm9pZCBTRF9ETUFUcmFuc21pdENwbHQoRE1BX0hhbmRsZVR5cGVEZWYgKmhkbWEpOwogc3RhdGljIHZvaWQgU0RfRE1BUmVjZWl2ZUNwbHQoRE1BX0hhbmRsZVR5cGVEZWYgKmhkbWEpOwogc3RhdGljIHZvaWQgU0RfRE1BRXJyb3IoRE1BX0hhbmRsZVR5cGVEZWYgKmhkbWEpOwpAQCAtMzE1LDEzICszMTIsMTMgQEAKICAgKi8KIAogLyoqIEBhZGR0b2dyb3VwIFNEX0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDEKLSAqICBAYnJpZWYgICBJbml0aWFsaXphdGlvbiBhbmQgZGUtaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zIAorICogIEBicmllZiAgIEluaXRpYWxpemF0aW9uIGFuZCBkZS1pbml0aWFsaXphdGlvbiBmdW5jdGlvbnMKICAqCi1AdmVyYmF0aW0gICAgCitAdmVyYmF0aW0KICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgICAgIyMjIyMgSW5pdGlhbGl6YXRpb24gYW5kIGRlLWluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucyAjIyMjIwogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgWy4uXSAgCisgIFsuLl0KICAgICBUaGlzIHNlY3Rpb24gcHJvdmlkZXMgZnVuY3Rpb25zIGFsbG93aW5nIHRvIGluaXRpYWxpemUvZGUtaW5pdGlhbGl6ZSB0aGUgU0QKICAgICBjYXJkIGRldmljZSB0byBiZSByZWFkeSBmb3IgdXNlLgogCkBAIC0zMzAsOSArMzI3LDkgQEAKICAgKi8KIAogLyoqCi0gICogQGJyaWVmICBJbml0aWFsaXplcyB0aGUgU0QgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpZWQgcGFyYW1ldGVycyBpbiB0aGUgCisgICogQGJyaWVmICBJbml0aWFsaXplcyB0aGUgU0QgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpZWQgcGFyYW1ldGVycyBpbiB0aGUKICAgICAgICAgICAgIFNEX0hhbmRsZVR5cGVEZWYgYW5kIGNyZWF0ZSB0aGUgYXNzb2NpYXRlZCBoYW5kbGUuCi0gICogQHBhcmFtICBoc2QgUG9pbnRlciB0byB0aGUgU0QgaGFuZGxlICAKKyAgKiBAcGFyYW0gIGhzZDogUG9pbnRlciB0byB0aGUgU0QgaGFuZGxlCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfU0RfSW5pdChTRF9IYW5kbGVUeXBlRGVmICpoc2QpCkBAIC0zNTYsNyArMzUzLDcgQEAKICAgewogICAgIC8qIEFsbG9jYXRlIGxvY2sgcmVzb3VyY2UgYW5kIGluaXRpYWxpemUgaXQgKi8KICAgICBoc2QtPkxvY2sgPSBIQUxfVU5MT0NLRUQ7Ci0jaWYgKFVTRV9IQUxfU0RfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCisjaWYgZGVmaW5lZCAoVVNFX0hBTF9TRF9SRUdJU1RFUl9DQUxMQkFDS1MpICYmIChVU0VfSEFMX1NEX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxVSkKICAgICAvKiBSZXNldCBDYWxsYmFjayBwb2ludGVycyBpbiBIQUxfU0RfU1RBVEVfUkVTRVQgb25seSAqLwogICAgIGhzZC0+VHhDcGx0Q2FsbGJhY2sgICAgPSBIQUxfU0RfVHhDcGx0Q2FsbGJhY2s7CiAgICAgaHNkLT5SeENwbHRDYWxsYmFjayAgICA9IEhBTF9TRF9SeENwbHRDYWxsYmFjazsKQEAgLTM3MywyMCArMzcwLDIzIEBACiAjZWxzZQogICAgIC8qIEluaXQgdGhlIGxvdyBsZXZlbCBoYXJkd2FyZSA6IEdQSU8sIENMT0NLLCBDT1JURVguLi5ldGMgKi8KICAgICBIQUxfU0RfTXNwSW5pdChoc2QpOwotI2VuZGlmCisjZW5kaWYgLyogVVNFX0hBTF9TRF9SRUdJU1RFUl9DQUxMQkFDS1MgKi8KICAgfQogCiAgIGhzZC0+U3RhdGUgPSBIQUxfU0RfU1RBVEVfQlVTWTsKIAogICAvKiBJbml0aWFsaXplIHRoZSBDYXJkIHBhcmFtZXRlcnMgKi8KLSAgSEFMX1NEX0luaXRDYXJkKGhzZCk7CisgIGlmIChIQUxfU0RfSW5pdENhcmQoaHNkKSAhPSBIQUxfT0spCisgIHsKKyAgICByZXR1cm4gSEFMX0VSUk9SOworICB9CiAKICAgLyogSW5pdGlhbGl6ZSB0aGUgZXJyb3IgY29kZSAqLwotICBoc2QtPkVycm9yQ29kZSA9IEhBTF9ETUFfRVJST1JfTk9ORTsKLSAgCisgIGhzZC0+RXJyb3JDb2RlID0gSEFMX1NEX0VSUk9SX05PTkU7CisKICAgLyogSW5pdGlhbGl6ZSB0aGUgU0Qgb3BlcmF0aW9uICovCiAgIGhzZC0+Q29udGV4dCA9IFNEX0NPTlRFWFRfTk9ORTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAvKiBJbml0aWFsaXplIHRoZSBTRCBzdGF0ZSAqLwogICBoc2QtPlN0YXRlID0gSEFMX1NEX1NUQVRFX1JFQURZOwogCkBAIC0zOTUsMTQgKzM5NSwxNSBAQAogCiAvKioKICAgKiBAYnJpZWYgIEluaXRpYWxpemVzIHRoZSBTRCBDYXJkLgotICAqIEBwYXJhbSAgaHNkIFBvaW50ZXIgdG8gU0QgaGFuZGxlCi0gICogQG5vdGUgICBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIHRoZSBTRCBjYXJkLiBJdCBjb3VsZCBiZSB1c2VkIHdoZW4gYSBjYXJkIAorICAqIEBwYXJhbSAgaHNkOiBQb2ludGVyIHRvIFNEIGhhbmRsZQorICAqIEBub3RlICAgVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgU0QgY2FyZC4gSXQgY291bGQgYmUgdXNlZCB3aGVuIGEgY2FyZAogICAgICAgICAgICAgcmUtaW5pdGlhbGl6YXRpb24gaXMgbmVlZGVkLgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1NEX0luaXRDYXJkKFNEX0hhbmRsZVR5cGVEZWYgKmhzZCkKIHsKLSAgdWludDMyX3QgZXJyb3JzdGF0ZSA9IEhBTF9TRF9FUlJPUl9OT05FOworICB1aW50MzJfdCBlcnJvcnN0YXRlOworICBIQUxfU3RhdHVzVHlwZURlZiBzdGF0dXM7CiAgIFNEX0luaXRUeXBlRGVmIEluaXQ7CiAgIAogICAvKiBEZWZhdWx0IFNESU8gcGVyaXBoZXJhbCBjb25maWd1cmF0aW9uIGZvciBTRCBjYXJkIGluaXRpYWxpemF0aW9uICovCkBAIC00MTQsMjEgKzQxNSwyMSBAQAogICBJbml0LkNsb2NrRGl2ICAgICAgICAgICAgPSBTRElPX0lOSVRfQ0xLX0RJVjsKIAogICAvKiBJbml0aWFsaXplIFNESU8gcGVyaXBoZXJhbCBpbnRlcmZhY2Ugd2l0aCBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gKi8KLSAgU0RJT19Jbml0KGhzZC0+SW5zdGFuY2UsIEluaXQpOworICBzdGF0dXMgPSBTRElPX0luaXQoaHNkLT5JbnN0YW5jZSwgSW5pdCk7CisgIGlmKHN0YXR1cyAhPSBIQUxfT0spCisgIHsKKyAgICByZXR1cm4gSEFMX0VSUk9SOworICB9CiAKICAgLyogRGlzYWJsZSBTRElPIENsb2NrICovCi0gIF9fSEFMX1NEX0RJU0FCTEUoaHNkKTsgCi0gIAorICBfX0hBTF9TRF9ESVNBQkxFKGhzZCk7CisKICAgLyogU2V0IFBvd2VyIFN0YXRlIHRvIE9OICovCi0gIFNESU9fUG93ZXJTdGF0ZV9PTihoc2QtPkluc3RhbmNlKTsKLSAgCisgICh2b2lkKVNESU9fUG93ZXJTdGF0ZV9PTihoc2QtPkluc3RhbmNlKTsKKwogICAvKiBFbmFibGUgU0RJTyBDbG9jayAqLwogICBfX0hBTF9TRF9FTkFCTEUoaHNkKTsKLSAgCi0gIC8qIFJlcXVpcmVkIHBvd2VyIHVwIHdhaXRpbmcgdGltZSBiZWZvcmUgc3RhcnRpbmcgdGhlIFNEIGluaXRpYWxpemF0aW9uIAotICBzZXF1ZW5jZSAqLwotICBIQUxfRGVsYXkoMlUpOwotICAKKwogICAvKiBJZGVudGlmeSBjYXJkIG9wZXJhdGluZyB2b2x0YWdlICovCiAgIGVycm9yc3RhdGUgPSBTRF9Qb3dlck9OKGhzZCk7CiAgIGlmKGVycm9yc3RhdGUgIT0gSEFMX1NEX0VSUk9SX05PTkUpCkBAIC00NTIsNyArNDUzLDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBEZS1Jbml0aWFsaXplcyB0aGUgU0QgY2FyZC4KLSAgKiBAcGFyYW0gIGhzZCBQb2ludGVyIHRvIFNEIGhhbmRsZQorICAqIEBwYXJhbSAgaHNkOiBQb2ludGVyIHRvIFNEIGhhbmRsZQogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1NEX0RlSW5pdChTRF9IYW5kbGVUeXBlRGVmICpoc2QpCkBAIC00NjIsMTYgKzQ2MywxNiBAQAogICB7CiAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgfQotICAKKwogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfU0RJT19BTExfSU5TVEFOQ0UoaHNkLT5JbnN0YW5jZSkpOwogCiAgIGhzZC0+U3RhdGUgPSBIQUxfU0RfU1RBVEVfQlVTWTsKLSAgCi0gIC8qIFNldCBTRCBwb3dlciBzdGF0ZSB0byBvZmYgKi8gCisKKyAgLyogU2V0IFNEIHBvd2VyIHN0YXRlIHRvIG9mZiAqLwogICBTRF9Qb3dlck9GRihoc2QpOwotICAKLSNpZiAoVVNFX0hBTF9TRF9SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkKKworI2lmIGRlZmluZWQgKFVTRV9IQUxfU0RfUkVHSVNURVJfQ0FMTEJBQ0tTKSAmJiAoVVNFX0hBTF9TRF9SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMVUpCiAgIGlmKGhzZC0+TXNwRGVJbml0Q2FsbGJhY2sgPT0gTlVMTCkKICAgewogICAgIGhzZC0+TXNwRGVJbml0Q2FsbGJhY2sgPSBIQUxfU0RfTXNwRGVJbml0OwpAQCAtNDgyLDQxICs0ODMsNDEgQEAKICNlbHNlCiAgIC8qIERlLUluaXRpYWxpemUgdGhlIE1TUCBsYXllciAqLwogICBIQUxfU0RfTXNwRGVJbml0KGhzZCk7Ci0jZW5kaWYKLSAgCisjZW5kaWYgLyogVVNFX0hBTF9TRF9SRUdJU1RFUl9DQUxMQkFDS1MgKi8KKwogICBoc2QtPkVycm9yQ29kZSA9IEhBTF9TRF9FUlJPUl9OT05FOwogICBoc2QtPlN0YXRlID0gSEFMX1NEX1NUQVRFX1JFU0VUOwotICAKKwogICByZXR1cm4gSEFMX09LOwogfQogCiAKIC8qKgogICAqIEBicmllZiAgSW5pdGlhbGl6ZXMgdGhlIFNEIE1TUC4KLSAgKiBAcGFyYW0gIGhzZCBQb2ludGVyIHRvIFNEIGhhbmRsZQorICAqIEBwYXJhbSAgaHNkOiBQb2ludGVyIHRvIFNEIGhhbmRsZQogICAqIEByZXR2YWwgTm9uZQogICAqLwogX193ZWFrIHZvaWQgSEFMX1NEX01zcEluaXQoU0RfSGFuZGxlVHlwZURlZiAqaHNkKQogewogICAvKiBQcmV2ZW50IHVudXNlZCBhcmd1bWVudChzKSBjb21waWxhdGlvbiB3YXJuaW5nICovCiAgIFVOVVNFRChoc2QpOwotIAotICAvKiBOT1RFIDogVGhpcyBmdW5jdGlvbiBTaG91bGQgbm90IGJlIG1vZGlmaWVkLCB3aGVuIHRoZSBjYWxsYmFjayBpcyBuZWVkZWQsCisKKyAgLyogTk9URSA6IFRoaXMgZnVuY3Rpb24gc2hvdWxkIG5vdCBiZSBtb2RpZmllZCwgd2hlbiB0aGUgY2FsbGJhY2sgaXMgbmVlZGVkLAogICAgICAgICAgICAgdGhlIEhBTF9TRF9Nc3BJbml0IGNvdWxkIGJlIGltcGxlbWVudGVkIGluIHRoZSB1c2VyIGZpbGUKICAgICovCiB9CiAKIC8qKgogICAqIEBicmllZiAgRGUtSW5pdGlhbGl6ZSBTRCBNU1AuCi0gICogQHBhcmFtICBoc2QgUG9pbnRlciB0byBTRCBoYW5kbGUKKyAgKiBAcGFyYW0gIGhzZDogUG9pbnRlciB0byBTRCBoYW5kbGUKICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KIF9fd2VhayB2b2lkIEhBTF9TRF9Nc3BEZUluaXQoU0RfSGFuZGxlVHlwZURlZiAqaHNkKQogewogICAvKiBQcmV2ZW50IHVudXNlZCBhcmd1bWVudChzKSBjb21waWxhdGlvbiB3YXJuaW5nICovCiAgIFVOVVNFRChoc2QpOwotIAotICAvKiBOT1RFIDogVGhpcyBmdW5jdGlvbiBTaG91bGQgbm90IGJlIG1vZGlmaWVkLCB3aGVuIHRoZSBjYWxsYmFjayBpcyBuZWVkZWQsCisKKyAgLyogTk9URSA6IFRoaXMgZnVuY3Rpb24gc2hvdWxkIG5vdCBiZSBtb2RpZmllZCwgd2hlbiB0aGUgY2FsbGJhY2sgaXMgbmVlZGVkLAogICAgICAgICAgICAgdGhlIEhBTF9TRF9Nc3BEZUluaXQgY291bGQgYmUgaW1wbGVtZW50ZWQgaW4gdGhlIHVzZXIgZmlsZQogICAgKi8KIH0KQEAgLTUyNiwxNCArNTI3LDE0IEBACiAgICovCiAKIC8qKiBAYWRkdG9ncm91cCBTRF9FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXAyCi0gKiAgQGJyaWVmICAgRGF0YSB0cmFuc2ZlciBmdW5jdGlvbnMgCisgKiAgQGJyaWVmICAgRGF0YSB0cmFuc2ZlciBmdW5jdGlvbnMKICAqCi1AdmVyYmF0aW0gICAKK0B2ZXJiYXRpbQogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgICAgICAgICAgICAgICAgICAgICMjIyMjIElPIG9wZXJhdGlvbiBmdW5jdGlvbnMgIyMjIyMKLSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICAKKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIFsuLl0KLSAgICBUaGlzIHN1YnNlY3Rpb24gcHJvdmlkZXMgYSBzZXQgb2YgZnVuY3Rpb25zIGFsbG93aW5nIHRvIG1hbmFnZSB0aGUgZGF0YSAKKyAgICBUaGlzIHN1YnNlY3Rpb24gcHJvdmlkZXMgYSBzZXQgb2YgZnVuY3Rpb25zIGFsbG93aW5nIHRvIG1hbmFnZSB0aGUgZGF0YQogICAgIHRyYW5zZmVyIGZyb20vdG8gU0QgY2FyZC4KIAogQGVuZHZlcmJhdGltCkBAIC01NDEsMTI0ICs1NDIsMTQwIEBACiAgICovCiAKIC8qKgotICAqIEBicmllZiAgUmVhZHMgYmxvY2socykgZnJvbSBhIHNwZWNpZmllZCBhZGRyZXNzIGluIGEgY2FyZC4gVGhlIERhdGEgdHJhbnNmZXIgCisgICogQGJyaWVmICBSZWFkcyBibG9jayhzKSBmcm9tIGEgc3BlY2lmaWVkIGFkZHJlc3MgaW4gYSBjYXJkLiBUaGUgRGF0YSB0cmFuc2ZlcgogICAqICAgICAgICAgaXMgbWFuYWdlZCBieSBwb2xsaW5nIG1vZGUuCiAgICogQG5vdGUgICBUaGlzIEFQSSBzaG91bGQgYmUgZm9sbG93ZWQgYnkgYSBjaGVjayBvbiB0aGUgY2FyZCBzdGF0ZSB0aHJvdWdoCiAgICogICAgICAgICBIQUxfU0RfR2V0Q2FyZFN0YXRlKCkuCi0gICogQHBhcmFtICBoc2QgUG9pbnRlciB0byBTRCBoYW5kbGUKLSAgKiBAcGFyYW0gIHBEYXRhIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlciB0aGF0IHdpbGwgY29udGFpbiB0aGUgcmVjZWl2ZWQgZGF0YQotICAqIEBwYXJhbSAgQmxvY2tBZGQgQmxvY2sgQWRkcmVzcyBmcm9tIHdoZXJlIGRhdGEgaXMgdG8gYmUgcmVhZCAKLSAgKiBAcGFyYW0gIE51bWJlck9mQmxvY2tzIE51bWJlciBvZiBTRCBibG9ja3MgdG8gcmVhZAotICAqIEBwYXJhbSAgVGltZW91dCBTcGVjaWZ5IHRpbWVvdXQgdmFsdWUKKyAgKiBAcGFyYW0gIGhzZDogUG9pbnRlciB0byBTRCBoYW5kbGUKKyAgKiBAcGFyYW0gIHBEYXRhOiBwb2ludGVyIHRvIHRoZSBidWZmZXIgdGhhdCB3aWxsIGNvbnRhaW4gdGhlIHJlY2VpdmVkIGRhdGEKKyAgKiBAcGFyYW0gIEJsb2NrQWRkOiBCbG9jayBBZGRyZXNzIGZyb20gd2hlcmUgZGF0YSBpcyB0byBiZSByZWFkCisgICogQHBhcmFtICBOdW1iZXJPZkJsb2NrczogTnVtYmVyIG9mIFNEIGJsb2NrcyB0byByZWFkCisgICogQHBhcmFtICBUaW1lb3V0OiBTcGVjaWZ5IHRpbWVvdXQgdmFsdWUKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9TRF9SZWFkQmxvY2tzKFNEX0hhbmRsZVR5cGVEZWYgKmhzZCwgdWludDhfdCAqcERhdGEsIHVpbnQzMl90IEJsb2NrQWRkLCB1aW50MzJfdCBOdW1iZXJPZkJsb2NrcywgdWludDMyX3QgVGltZW91dCkKIHsKICAgU0RJT19EYXRhSW5pdFR5cGVEZWYgY29uZmlnOwotICB1aW50MzJfdCBlcnJvcnN0YXRlID0gSEFMX1NEX0VSUk9SX05PTkU7CisgIHVpbnQzMl90IGVycm9yc3RhdGU7CiAgIHVpbnQzMl90IHRpY2tzdGFydCA9IEhBTF9HZXRUaWNrKCk7Ci0gIHVpbnQzMl90IGNvdW50ID0gMFUsICp0ZW1wYnVmZiA9ICh1aW50MzJfdCAqKXBEYXRhOwotICAKKyAgdWludDMyX3QgY291bnQsIGRhdGEsIGRhdGFyZW1haW5pbmc7CisgIHVpbnQzMl90IGFkZCA9IEJsb2NrQWRkOworICB1aW50OF90ICp0ZW1wYnVmZiA9IHBEYXRhOworCiAgIGlmKE5VTEwgPT0gcERhdGEpCiAgIHsKICAgICBoc2QtPkVycm9yQ29kZSB8PSBIQUxfU0RfRVJST1JfUEFSQU07CiAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgfQotIAorCiAgIGlmKGhzZC0+U3RhdGUgPT0gSEFMX1NEX1NUQVRFX1JFQURZKQogICB7Ci0gICAgaHNkLT5FcnJvckNvZGUgPSBIQUxfRE1BX0VSUk9SX05PTkU7Ci0gICAgCi0gICAgaWYoKEJsb2NrQWRkICsgTnVtYmVyT2ZCbG9ja3MpID4gKGhzZC0+U2RDYXJkLkxvZ0Jsb2NrTmJyKSkKKyAgICBoc2QtPkVycm9yQ29kZSA9IEhBTF9TRF9FUlJPUl9OT05FOworCisgICAgaWYoKGFkZCArIE51bWJlck9mQmxvY2tzKSA+IChoc2QtPlNkQ2FyZC5Mb2dCbG9ja05icikpCiAgICAgewogICAgICAgaHNkLT5FcnJvckNvZGUgfD0gSEFMX1NEX0VSUk9SX0FERFJfT1VUX09GX1JBTkdFOwogICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICB9Ci0gICAgCisKICAgICBoc2QtPlN0YXRlID0gSEFMX1NEX1NUQVRFX0JVU1k7Ci0gICAgCisKICAgICAvKiBJbml0aWFsaXplIGRhdGEgY29udHJvbCByZWdpc3RlciAqLwogICAgIGhzZC0+SW5zdGFuY2UtPkRDVFJMID0gMFU7Ci0gICAgCisKICAgICBpZihoc2QtPlNkQ2FyZC5DYXJkVHlwZSAhPSBDQVJEX1NESENfU0RYQykKICAgICB7Ci0gICAgICBCbG9ja0FkZCAqPSA1MTJVOworICAgICAgYWRkICo9IDUxMlU7CiAgICAgfQotICAgICAgCisKICAgICAvKiBTZXQgQmxvY2sgU2l6ZSBmb3IgQ2FyZCAqLwogICAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRCbG9ja0xlbmd0aChoc2QtPkluc3RhbmNlLCBCTE9DS1NJWkUpOwogICAgIGlmKGVycm9yc3RhdGUgIT0gSEFMX1NEX0VSUk9SX05PTkUpCiAgICAgewogICAgICAgLyogQ2xlYXIgYWxsIHRoZSBzdGF0aWMgZmxhZ3MgKi8KLSAgICAgIF9fSEFMX1NEX0NMRUFSX0ZMQUcoaHNkLCBTRElPX1NUQVRJQ19GTEFHUyk7ICAgICAgCi0gICAgICBoc2QtPkVycm9yQ29kZSB8PSBlcnJvcnN0YXRlOwotICAgICAgaHNkLT5TdGF0ZSA9IEhBTF9TRF9TVEFURV9SRUFEWTsKLSAgICAgIHJldHVybiBIQUxfRVJST1I7Ci0gICAgfQotICAgIAotICAgIC8qIENvbmZpZ3VyZSB0aGUgU0QgRFBTTSAoRGF0YSBQYXRoIFN0YXRlIE1hY2hpbmUpICovCi0gICAgY29uZmlnLkRhdGFUaW1lT3V0ICAgPSBTRE1NQ19EQVRBVElNRU9VVDsKLSAgICBjb25maWcuRGF0YUxlbmd0aCAgICA9IE51bWJlck9mQmxvY2tzICogQkxPQ0tTSVpFOwotICAgIGNvbmZpZy5EYXRhQmxvY2tTaXplID0gU0RJT19EQVRBQkxPQ0tfU0laRV81MTJCOwotICAgIGNvbmZpZy5UcmFuc2ZlckRpciAgID0gU0RJT19UUkFOU0ZFUl9ESVJfVE9fU0RJTzsKLSAgICBjb25maWcuVHJhbnNmZXJNb2RlICA9IFNESU9fVFJBTlNGRVJfTU9ERV9CTE9DSzsKLSAgICBjb25maWcuRFBTTSAgICAgICAgICA9IFNESU9fRFBTTV9FTkFCTEU7Ci0gICAgU0RJT19Db25maWdEYXRhKGhzZC0+SW5zdGFuY2UsICZjb25maWcpOwotICAgIAotICAgIC8qIFJlYWQgYmxvY2socykgaW4gcG9sbGluZyBtb2RlICovCi0gICAgaWYoTnVtYmVyT2ZCbG9ja3MgPiAxVSkKLSAgICB7Ci0gICAgICBoc2QtPkNvbnRleHQgPSBTRF9DT05URVhUX1JFQURfTVVMVElQTEVfQkxPQ0s7Ci0gICAgICAKLSAgICAgIC8qIFJlYWQgTXVsdGkgQmxvY2sgY29tbWFuZCAqLyAKLSAgICAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRSZWFkTXVsdGlCbG9jayhoc2QtPkluc3RhbmNlLCBCbG9ja0FkZCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBoc2QtPkNvbnRleHQgPSBTRF9DT05URVhUX1JFQURfU0lOR0xFX0JMT0NLOwotICAgICAgCi0gICAgICAvKiBSZWFkIFNpbmdsZSBCbG9jayBjb21tYW5kICovCi0gICAgICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kUmVhZFNpbmdsZUJsb2NrKGhzZC0+SW5zdGFuY2UsIEJsb2NrQWRkKTsKLSAgICB9Ci0gICAgaWYoZXJyb3JzdGF0ZSAhPSBIQUxfU0RfRVJST1JfTk9ORSkKLSAgICB7Ci0gICAgICAvKiBDbGVhciBhbGwgdGhlIHN0YXRpYyBmbGFncyAqLwogICAgICAgX19IQUxfU0RfQ0xFQVJfRkxBRyhoc2QsIFNESU9fU1RBVElDX0ZMQUdTKTsKICAgICAgIGhzZC0+RXJyb3JDb2RlIHw9IGVycm9yc3RhdGU7CiAgICAgICBoc2QtPlN0YXRlID0gSEFMX1NEX1NUQVRFX1JFQURZOwogICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICB9Ci0gICAgICAKKworICAgIC8qIENvbmZpZ3VyZSB0aGUgU0QgRFBTTSAoRGF0YSBQYXRoIFN0YXRlIE1hY2hpbmUpICovCisgICAgY29uZmlnLkRhdGFUaW1lT3V0ICAgPSBTRE1NQ19EQVRBVElNRU9VVDsKKyAgICBjb25maWcuRGF0YUxlbmd0aCAgICA9IE51bWJlck9mQmxvY2tzICogQkxPQ0tTSVpFOworICAgIGNvbmZpZy5EYXRhQmxvY2tTaXplID0gU0RJT19EQVRBQkxPQ0tfU0laRV81MTJCOworICAgIGNvbmZpZy5UcmFuc2ZlckRpciAgID0gU0RJT19UUkFOU0ZFUl9ESVJfVE9fU0RJTzsKKyAgICBjb25maWcuVHJhbnNmZXJNb2RlICA9IFNESU9fVFJBTlNGRVJfTU9ERV9CTE9DSzsKKyAgICBjb25maWcuRFBTTSAgICAgICAgICA9IFNESU9fRFBTTV9FTkFCTEU7CisgICAgKHZvaWQpU0RJT19Db25maWdEYXRhKGhzZC0+SW5zdGFuY2UsICZjb25maWcpOworCisgICAgLyogUmVhZCBibG9jayhzKSBpbiBwb2xsaW5nIG1vZGUgKi8KKyAgICBpZihOdW1iZXJPZkJsb2NrcyA+IDFVKQorICAgIHsKKyAgICAgIGhzZC0+Q29udGV4dCA9IFNEX0NPTlRFWFRfUkVBRF9NVUxUSVBMRV9CTE9DSzsKKworICAgICAgLyogUmVhZCBNdWx0aSBCbG9jayBjb21tYW5kICovCisgICAgICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kUmVhZE11bHRpQmxvY2soaHNkLT5JbnN0YW5jZSwgYWRkKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIGhzZC0+Q29udGV4dCA9IFNEX0NPTlRFWFRfUkVBRF9TSU5HTEVfQkxPQ0s7CisKKyAgICAgIC8qIFJlYWQgU2luZ2xlIEJsb2NrIGNvbW1hbmQgKi8KKyAgICAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRSZWFkU2luZ2xlQmxvY2soaHNkLT5JbnN0YW5jZSwgYWRkKTsKKyAgICB9CisgICAgaWYoZXJyb3JzdGF0ZSAhPSBIQUxfU0RfRVJST1JfTk9ORSkKKyAgICB7CisgICAgICAvKiBDbGVhciBhbGwgdGhlIHN0YXRpYyBmbGFncyAqLworICAgICAgX19IQUxfU0RfQ0xFQVJfRkxBRyhoc2QsIFNESU9fU1RBVElDX0ZMQUdTKTsKKyAgICAgIGhzZC0+RXJyb3JDb2RlIHw9IGVycm9yc3RhdGU7CisgICAgICBoc2QtPlN0YXRlID0gSEFMX1NEX1NUQVRFX1JFQURZOworICAgICAgaHNkLT5Db250ZXh0ID0gU0RfQ09OVEVYVF9OT05FOworICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgICB9CisKICAgICAvKiBQb2xsIG9uIFNESU8gZmxhZ3MgKi8KLSNpZmRlZiBTRElPX1NUQV9TVEJJVEVSUgotICAgIHdoaWxlKCFfX0hBTF9TRF9HRVRfRkxBRyhoc2QsIFNESU9fRkxBR19SWE9WRVJSIHwgU0RJT19GTEFHX0RDUkNGQUlMIHwgU0RJT19GTEFHX0RUSU1FT1VUIHwgU0RJT19GTEFHX0RBVEFFTkQgfCBTRElPX1NUQV9TVEJJVEVSUikpCisgICAgZGF0YXJlbWFpbmluZyA9IGNvbmZpZy5EYXRhTGVuZ3RoOworI2lmIGRlZmluZWQoU0RJT19TVEFfU1RCSVRFUlIpCisgICAgd2hpbGUoIV9fSEFMX1NEX0dFVF9GTEFHKGhzZCwgU0RJT19GTEFHX1JYT1ZFUlIgfCBTRElPX0ZMQUdfRENSQ0ZBSUwgfCBTRElPX0ZMQUdfRFRJTUVPVVQgfCBTRElPX0ZMQUdfREFUQUVORCB8IFNESU9fRkxBR19TVEJJVEVSUikpCiAjZWxzZSAvKiBTRElPX1NUQV9TVEJJVEVSUiBub3QgZGVmaW5lZCAqLwogICAgIHdoaWxlKCFfX0hBTF9TRF9HRVRfRkxBRyhoc2QsIFNESU9fRkxBR19SWE9WRVJSIHwgU0RJT19GTEFHX0RDUkNGQUlMIHwgU0RJT19GTEFHX0RUSU1FT1VUIHwgU0RJT19GTEFHX0RBVEFFTkQpKQogI2VuZGlmIC8qIFNESU9fU1RBX1NUQklURVJSICovCiAgICAgewotICAgICAgaWYoX19IQUxfU0RfR0VUX0ZMQUcoaHNkLCBTRElPX0ZMQUdfUlhGSUZPSEYpKQorICAgICAgaWYoX19IQUxfU0RfR0VUX0ZMQUcoaHNkLCBTRElPX0ZMQUdfUlhGSUZPSEYpICYmIChkYXRhcmVtYWluaW5nID4gMFUpKQogICAgICAgewogICAgICAgICAvKiBSZWFkIGRhdGEgZnJvbSBTRElPIFJ4IEZJRk8gKi8KICAgICAgICAgZm9yKGNvdW50ID0gMFU7IGNvdW50IDwgOFU7IGNvdW50KyspCiAgICAgICAgIHsKLSAgICAgICAgICAqKHRlbXBidWZmICsgY291bnQpID0gU0RJT19SZWFkRklGTyhoc2QtPkluc3RhbmNlKTsKKyAgICAgICAgICBkYXRhID0gU0RJT19SZWFkRklGTyhoc2QtPkluc3RhbmNlKTsKKyAgICAgICAgICAqdGVtcGJ1ZmYgPSAodWludDhfdCkoZGF0YSAmIDB4RkZVKTsKKyAgICAgICAgICB0ZW1wYnVmZisrOworICAgICAgICAgIGRhdGFyZW1haW5pbmctLTsKKyAgICAgICAgICAqdGVtcGJ1ZmYgPSAodWludDhfdCkoKGRhdGEgPj4gOFUpICYgMHhGRlUpOworICAgICAgICAgIHRlbXBidWZmKys7CisgICAgICAgICAgZGF0YXJlbWFpbmluZy0tOworICAgICAgICAgICp0ZW1wYnVmZiA9ICh1aW50OF90KSgoZGF0YSA+PiAxNlUpICYgMHhGRlUpOworICAgICAgICAgIHRlbXBidWZmKys7CisgICAgICAgICAgZGF0YXJlbWFpbmluZy0tOworICAgICAgICAgICp0ZW1wYnVmZiA9ICh1aW50OF90KSgoZGF0YSA+PiAyNFUpICYgMHhGRlUpOworICAgICAgICAgIHRlbXBidWZmKys7CisgICAgICAgICAgZGF0YXJlbWFpbmluZy0tOwogICAgICAgICB9Ci0gICAgICAgIHRlbXBidWZmICs9IDhVOwogICAgICAgfQotICAgICAgCi0gICAgICBpZigoVGltZW91dCA9PSAwVSl8fCgoSEFMX0dldFRpY2soKS10aWNrc3RhcnQpID49ICBUaW1lb3V0KSkKKworICAgICAgaWYoKChIQUxfR2V0VGljaygpLXRpY2tzdGFydCkgPj0gIFRpbWVvdXQpIHx8IChUaW1lb3V0ID09IDBVKSkKICAgICAgIHsKICAgICAgICAgLyogQ2xlYXIgYWxsIHRoZSBzdGF0aWMgZmxhZ3MgKi8KICAgICAgICAgX19IQUxfU0RfQ0xFQVJfRkxBRyhoc2QsIFNESU9fU1RBVElDX0ZMQUdTKTsKICAgICAgICAgaHNkLT5FcnJvckNvZGUgfD0gSEFMX1NEX0VSUk9SX1RJTUVPVVQ7CiAgICAgICAgIGhzZC0+U3RhdGU9IEhBTF9TRF9TVEFURV9SRUFEWTsKKyAgICAgICAgaHNkLT5Db250ZXh0ID0gU0RfQ09OVEVYVF9OT05FOwogICAgICAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CiAgICAgICB9CiAgICAgfQogICAgIAogICAgIC8qIFNlbmQgc3RvcCB0cmFuc21pc3Npb24gY29tbWFuZCBpbiBjYXNlIG9mIG11bHRpYmxvY2sgcmVhZCAqLwogICAgIGlmKF9fSEFMX1NEX0dFVF9GTEFHKGhzZCwgU0RJT19GTEFHX0RBVEFFTkQpICYmIChOdW1iZXJPZkJsb2NrcyA+IDFVKSkKLSAgICB7ICAgIAorICAgIHsKICAgICAgIGlmKGhzZC0+U2RDYXJkLkNhcmRUeXBlICE9IENBUkRfU0VDVVJFRCkKICAgICAgIHsKICAgICAgICAgLyogU2VuZCBzdG9wIHRyYW5zbWlzc2lvbiBjb21tYW5kICovCkBAIC02NjksMTEgKzY4NiwxMiBAQAogICAgICAgICAgIF9fSEFMX1NEX0NMRUFSX0ZMQUcoaHNkLCBTRElPX1NUQVRJQ19GTEFHUyk7CiAgICAgICAgICAgaHNkLT5FcnJvckNvZGUgfD0gZXJyb3JzdGF0ZTsKICAgICAgICAgICBoc2QtPlN0YXRlID0gSEFMX1NEX1NUQVRFX1JFQURZOworICAgICAgICAgIGhzZC0+Q29udGV4dCA9IFNEX0NPTlRFWFRfTk9ORTsKICAgICAgICAgICByZXR1cm4gSEFMX0VSUk9SOwogICAgICAgICB9CiAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyogR2V0IGVycm9yIHN0YXRlICovCiAgICAgaWYoX19IQUxfU0RfR0VUX0ZMQUcoaHNkLCBTRElPX0ZMQUdfRFRJTUVPVVQpKQogICAgIHsKQEAgLTY4MSw2ICs2OTksNyBAQAogICAgICAgX19IQUxfU0RfQ0xFQVJfRkxBRyhoc2QsIFNESU9fU1RBVElDX0ZMQUdTKTsKICAgICAgIGhzZC0+RXJyb3JDb2RlIHw9IEhBTF9TRF9FUlJPUl9EQVRBX1RJTUVPVVQ7CiAgICAgICBoc2QtPlN0YXRlID0gSEFMX1NEX1NUQVRFX1JFQURZOworICAgICAgaHNkLT5Db250ZXh0ID0gU0RfQ09OVEVYVF9OT05FOwogICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICB9CiAgICAgZWxzZSBpZihfX0hBTF9TRF9HRVRfRkxBRyhoc2QsIFNESU9fRkxBR19EQ1JDRkFJTCkpCkBAIC02ODksNiArNzA4LDcgQEAKICAgICAgIF9fSEFMX1NEX0NMRUFSX0ZMQUcoaHNkLCBTRElPX1NUQVRJQ19GTEFHUyk7CiAgICAgICBoc2QtPkVycm9yQ29kZSB8PSBIQUxfU0RfRVJST1JfREFUQV9DUkNfRkFJTDsKICAgICAgIGhzZC0+U3RhdGUgPSBIQUxfU0RfU1RBVEVfUkVBRFk7CisgICAgICBoc2QtPkNvbnRleHQgPSBTRF9DT05URVhUX05PTkU7CiAgICAgICByZXR1cm4gSEFMX0VSUk9SOwogICAgIH0KICAgICBlbHNlIGlmKF9fSEFMX1NEX0dFVF9GTEFHKGhzZCwgU0RJT19GTEFHX1JYT1ZFUlIpKQpAQCAtNjk3LDMwICs3MTcsNDcgQEAKICAgICAgIF9fSEFMX1NEX0NMRUFSX0ZMQUcoaHNkLCBTRElPX1NUQVRJQ19GTEFHUyk7CiAgICAgICBoc2QtPkVycm9yQ29kZSB8PSBIQUxfU0RfRVJST1JfUlhfT1ZFUlJVTjsKICAgICAgIGhzZC0+U3RhdGUgPSBIQUxfU0RfU1RBVEVfUkVBRFk7CisgICAgICBoc2QtPkNvbnRleHQgPSBTRF9DT05URVhUX05PTkU7CiAgICAgICByZXR1cm4gSEFMX0VSUk9SOwogICAgIH0KLSAgICAKLSAgICAvKiBFbXB0eSBGSUZPIGlmIHRoZXJlIGlzIHN0aWxsIGFueSBkYXRhICovCi0gICAgd2hpbGUgKChfX0hBTF9TRF9HRVRfRkxBRyhoc2QsIFNESU9fRkxBR19SWERBVkwpKSkKKyAgICBlbHNlCiAgICAgewotICAgICAgKnRlbXBidWZmID0gU0RJT19SZWFkRklGTyhoc2QtPkluc3RhbmNlKTsKKyAgICAgIC8qIE5vdGhpbmcgdG8gZG8gKi8KKyAgICB9CisKKyAgICAvKiBFbXB0eSBGSUZPIGlmIHRoZXJlIGlzIHN0aWxsIGFueSBkYXRhICovCisgICAgd2hpbGUgKChfX0hBTF9TRF9HRVRfRkxBRyhoc2QsIFNESU9fRkxBR19SWERBVkwpKSAmJiAoZGF0YXJlbWFpbmluZyA+IDBVKSkKKyAgICB7CisgICAgICBkYXRhID0gU0RJT19SZWFkRklGTyhoc2QtPkluc3RhbmNlKTsKKyAgICAgICp0ZW1wYnVmZiA9ICh1aW50OF90KShkYXRhICYgMHhGRlUpOwogICAgICAgdGVtcGJ1ZmYrKzsKLSAgICAgIAotICAgICAgaWYoKFRpbWVvdXQgPT0gMFUpfHwoKEhBTF9HZXRUaWNrKCktdGlja3N0YXJ0KSA+PSAgVGltZW91dCkpCisgICAgICBkYXRhcmVtYWluaW5nLS07CisgICAgICAqdGVtcGJ1ZmYgPSAodWludDhfdCkoKGRhdGEgPj4gOFUpICYgMHhGRlUpOworICAgICAgdGVtcGJ1ZmYrKzsKKyAgICAgIGRhdGFyZW1haW5pbmctLTsKKyAgICAgICp0ZW1wYnVmZiA9ICh1aW50OF90KSgoZGF0YSA+PiAxNlUpICYgMHhGRlUpOworICAgICAgdGVtcGJ1ZmYrKzsKKyAgICAgIGRhdGFyZW1haW5pbmctLTsKKyAgICAgICp0ZW1wYnVmZiA9ICh1aW50OF90KSgoZGF0YSA+PiAyNFUpICYgMHhGRlUpOworICAgICAgdGVtcGJ1ZmYrKzsKKyAgICAgIGRhdGFyZW1haW5pbmctLTsKKworICAgICAgaWYoKChIQUxfR2V0VGljaygpLXRpY2tzdGFydCkgPj0gIFRpbWVvdXQpIHx8IChUaW1lb3V0ID09IDBVKSkKICAgICAgIHsKICAgICAgICAgLyogQ2xlYXIgYWxsIHRoZSBzdGF0aWMgZmxhZ3MgKi8KLSAgICAgICAgX19IQUxfU0RfQ0xFQVJfRkxBRyhoc2QsIFNESU9fU1RBVElDX0ZMQUdTKTsgICAgICAgIAorICAgICAgICBfX0hBTF9TRF9DTEVBUl9GTEFHKGhzZCwgU0RJT19TVEFUSUNfRkxBR1MpOwogICAgICAgICBoc2QtPkVycm9yQ29kZSB8PSBIQUxfU0RfRVJST1JfVElNRU9VVDsKICAgICAgICAgaHNkLT5TdGF0ZT0gSEFMX1NEX1NUQVRFX1JFQURZOworICAgICAgICBoc2QtPkNvbnRleHQgPSBTRF9DT05URVhUX05PTkU7CiAgICAgICAgIHJldHVybiBIQUxfRVJST1I7CiAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyogQ2xlYXIgYWxsIHRoZSBzdGF0aWMgZmxhZ3MgKi8KLSAgICBfX0hBTF9TRF9DTEVBUl9GTEFHKGhzZCwgU0RJT19TVEFUSUNfRkxBR1MpOwotICAgIAorICAgIF9fSEFMX1NEX0NMRUFSX0ZMQUcoaHNkLCBTRElPX1NUQVRJQ19EQVRBX0ZMQUdTKTsKKwogICAgIGhzZC0+U3RhdGUgPSBIQUxfU0RfU1RBVEVfUkVBRFk7Ci0gICAgCisKICAgICByZXR1cm4gSEFMX09LOwogICB9CiAgIGVsc2UKQEAgLTczNSwyMSArNzcyLDIyIEBACiAgICogICAgICAgICB0cmFuc2ZlciBpcyBtYW5hZ2VkIGJ5IHBvbGxpbmcgbW9kZS4KICAgKiBAbm90ZSAgIFRoaXMgQVBJIHNob3VsZCBiZSBmb2xsb3dlZCBieSBhIGNoZWNrIG9uIHRoZSBjYXJkIHN0YXRlIHRocm91Z2gKICAgKiAgICAgICAgIEhBTF9TRF9HZXRDYXJkU3RhdGUoKS4KLSAgKiBAcGFyYW0gIGhzZCBQb2ludGVyIHRvIFNEIGhhbmRsZQotICAqIEBwYXJhbSAgcERhdGEgcG9pbnRlciB0byB0aGUgYnVmZmVyIHRoYXQgd2lsbCBjb250YWluIHRoZSBkYXRhIHRvIHRyYW5zbWl0Ci0gICogQHBhcmFtICBCbG9ja0FkZCBCbG9jayBBZGRyZXNzIHdoZXJlIGRhdGEgd2lsbCBiZSB3cml0dGVuICAKLSAgKiBAcGFyYW0gIE51bWJlck9mQmxvY2tzIE51bWJlciBvZiBTRCBibG9ja3MgdG8gd3JpdGUKLSAgKiBAcGFyYW0gIFRpbWVvdXQgU3BlY2lmeSB0aW1lb3V0IHZhbHVlCisgICogQHBhcmFtICBoc2Q6IFBvaW50ZXIgdG8gU0QgaGFuZGxlCisgICogQHBhcmFtICBwRGF0YTogcG9pbnRlciB0byB0aGUgYnVmZmVyIHRoYXQgd2lsbCBjb250YWluIHRoZSBkYXRhIHRvIHRyYW5zbWl0CisgICogQHBhcmFtICBCbG9ja0FkZDogQmxvY2sgQWRkcmVzcyB3aGVyZSBkYXRhIHdpbGwgYmUgd3JpdHRlbgorICAqIEBwYXJhbSAgTnVtYmVyT2ZCbG9ja3M6IE51bWJlciBvZiBTRCBibG9ja3MgdG8gd3JpdGUKKyAgKiBAcGFyYW0gIFRpbWVvdXQ6IFNwZWNpZnkgdGltZW91dCB2YWx1ZQogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1NEX1dyaXRlQmxvY2tzKFNEX0hhbmRsZVR5cGVEZWYgKmhzZCwgdWludDhfdCAqcERhdGEsIHVpbnQzMl90IEJsb2NrQWRkLCB1aW50MzJfdCBOdW1iZXJPZkJsb2NrcywgdWludDMyX3QgVGltZW91dCkKIHsKICAgU0RJT19EYXRhSW5pdFR5cGVEZWYgY29uZmlnOwotICB1aW50MzJfdCBlcnJvcnN0YXRlID0gSEFMX1NEX0VSUk9SX05PTkU7CisgIHVpbnQzMl90IGVycm9yc3RhdGU7CiAgIHVpbnQzMl90IHRpY2tzdGFydCA9IEhBTF9HZXRUaWNrKCk7Ci0gIHVpbnQzMl90IGNvdW50ID0gMFU7Ci0gIHVpbnQzMl90ICp0ZW1wYnVmZiA9ICh1aW50MzJfdCAqKXBEYXRhOwotICAKKyAgdWludDMyX3QgY291bnQsIGRhdGEsIGRhdGFyZW1haW5pbmc7CisgIHVpbnQzMl90IGFkZCA9IEJsb2NrQWRkOworICB1aW50OF90ICp0ZW1wYnVmZiA9IHBEYXRhOworCiAgIGlmKE5VTEwgPT0gcERhdGEpCiAgIHsKICAgICBoc2QtPkVycm9yQ29kZSB8PSBIQUxfU0RfRVJST1JfUEFSQU07CkBAIC03NTgsOTggKzc5NiwxMTIgQEAKIAogICBpZihoc2QtPlN0YXRlID09IEhBTF9TRF9TVEFURV9SRUFEWSkKICAgewotICAgIGhzZC0+RXJyb3JDb2RlID0gSEFMX0RNQV9FUlJPUl9OT05FOwotICAgIAotICAgIGlmKChCbG9ja0FkZCArIE51bWJlck9mQmxvY2tzKSA+IChoc2QtPlNkQ2FyZC5Mb2dCbG9ja05icikpCisgICAgaHNkLT5FcnJvckNvZGUgPSBIQUxfU0RfRVJST1JfTk9ORTsKKworICAgIGlmKChhZGQgKyBOdW1iZXJPZkJsb2NrcykgPiAoaHNkLT5TZENhcmQuTG9nQmxvY2tOYnIpKQogICAgIHsKICAgICAgIGhzZC0+RXJyb3JDb2RlIHw9IEhBTF9TRF9FUlJPUl9BRERSX09VVF9PRl9SQU5HRTsKICAgICAgIHJldHVybiBIQUxfRVJST1I7CiAgICAgfQotICAgIAorCiAgICAgaHNkLT5TdGF0ZSA9IEhBTF9TRF9TVEFURV9CVVNZOwotICAgIAorCiAgICAgLyogSW5pdGlhbGl6ZSBkYXRhIGNvbnRyb2wgcmVnaXN0ZXIgKi8KICAgICBoc2QtPkluc3RhbmNlLT5EQ1RSTCA9IDBVOwotICAgICAKKwogICAgIGlmKGhzZC0+U2RDYXJkLkNhcmRUeXBlICE9IENBUkRfU0RIQ19TRFhDKQogICAgIHsKLSAgICAgIEJsb2NrQWRkICo9IDUxMlU7CisgICAgICBhZGQgKj0gNTEyVTsKICAgICB9Ci0gICAgCi0gICAgLyogU2V0IEJsb2NrIFNpemUgZm9yIENhcmQgKi8gCisKKyAgICAvKiBTZXQgQmxvY2sgU2l6ZSBmb3IgQ2FyZCAqLwogICAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRCbG9ja0xlbmd0aChoc2QtPkluc3RhbmNlLCBCTE9DS1NJWkUpOwogICAgIGlmKGVycm9yc3RhdGUgIT0gSEFMX1NEX0VSUk9SX05PTkUpCiAgICAgewogICAgICAgLyogQ2xlYXIgYWxsIHRoZSBzdGF0aWMgZmxhZ3MgKi8KLSAgICAgIF9fSEFMX1NEX0NMRUFSX0ZMQUcoaHNkLCBTRElPX1NUQVRJQ19GTEFHUyk7ICAKKyAgICAgIF9fSEFMX1NEX0NMRUFSX0ZMQUcoaHNkLCBTRElPX1NUQVRJQ19GTEFHUyk7CiAgICAgICBoc2QtPkVycm9yQ29kZSB8PSBlcnJvcnN0YXRlOwogICAgICAgaHNkLT5TdGF0ZSA9IEhBTF9TRF9TVEFURV9SRUFEWTsKICAgICAgIHJldHVybiBIQUxfRVJST1I7CiAgICAgfQotICAgIAotICAgIC8qIFdyaXRlIEJsb2NrcyBpbiBQb2xsaW5nIG1vZGUgKi8KLSAgICBpZihOdW1iZXJPZkJsb2NrcyA+IDFVKQotICAgIHsKLSAgICAgIGhzZC0+Q29udGV4dCA9IFNEX0NPTlRFWFRfV1JJVEVfTVVMVElQTEVfQkxPQ0s7Ci0gICAgICAKLSAgICAgIC8qIFdyaXRlIE11bHRpIEJsb2NrIGNvbW1hbmQgKi8gCi0gICAgICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kV3JpdGVNdWx0aUJsb2NrKGhzZC0+SW5zdGFuY2UsIEJsb2NrQWRkKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGhzZC0+Q29udGV4dCA9IFNEX0NPTlRFWFRfV1JJVEVfU0lOR0xFX0JMT0NLOwotICAgICAgCi0gICAgICAvKiBXcml0ZSBTaW5nbGUgQmxvY2sgY29tbWFuZCAqLwotICAgICAgZXJyb3JzdGF0ZSA9IFNETU1DX0NtZFdyaXRlU2luZ2xlQmxvY2soaHNkLT5JbnN0YW5jZSwgQmxvY2tBZGQpOwotICAgIH0KLSAgICBpZihlcnJvcnN0YXRlICE9IEhBTF9TRF9FUlJPUl9OT05FKQotICAgIHsKLSAgICAgIC8qIENsZWFyIGFsbCB0aGUgc3RhdGljIGZsYWdzICovCi0gICAgICBfX0hBTF9TRF9DTEVBUl9GTEFHKGhzZCwgU0RJT19TVEFUSUNfRkxBR1MpOyAgCi0gICAgICBoc2QtPkVycm9yQ29kZSB8PSBlcnJvcnN0YXRlOwotICAgICAgaHNkLT5TdGF0ZSA9IEhBTF9TRF9TVEFURV9SRUFEWTsKLSAgICAgIHJldHVybiBIQUxfRVJST1I7Ci0gICAgfQotICAgIAotICAgIC8qIENvbmZpZ3VyZSB0aGUgU0QgRFBTTSAoRGF0YSBQYXRoIFN0YXRlIE1hY2hpbmUpICovIAorCisgICAgLyogQ29uZmlndXJlIHRoZSBTRCBEUFNNIChEYXRhIFBhdGggU3RhdGUgTWFjaGluZSkgKi8KICAgICBjb25maWcuRGF0YVRpbWVPdXQgICA9IFNETU1DX0RBVEFUSU1FT1VUOwogICAgIGNvbmZpZy5EYXRhTGVuZ3RoICAgID0gTnVtYmVyT2ZCbG9ja3MgKiBCTE9DS1NJWkU7CiAgICAgY29uZmlnLkRhdGFCbG9ja1NpemUgPSBTRElPX0RBVEFCTE9DS19TSVpFXzUxMkI7CiAgICAgY29uZmlnLlRyYW5zZmVyRGlyICAgPSBTRElPX1RSQU5TRkVSX0RJUl9UT19DQVJEOwogICAgIGNvbmZpZy5UcmFuc2Zlck1vZGUgID0gU0RJT19UUkFOU0ZFUl9NT0RFX0JMT0NLOwogICAgIGNvbmZpZy5EUFNNICAgICAgICAgID0gU0RJT19EUFNNX0VOQUJMRTsKLSAgICBTRElPX0NvbmZpZ0RhdGEoaHNkLT5JbnN0YW5jZSwgJmNvbmZpZyk7Ci0gICAgCisgICAgKHZvaWQpU0RJT19Db25maWdEYXRhKGhzZC0+SW5zdGFuY2UsICZjb25maWcpOworCisgICAgLyogV3JpdGUgQmxvY2tzIGluIFBvbGxpbmcgbW9kZSAqLworICAgIGlmKE51bWJlck9mQmxvY2tzID4gMVUpCisgICAgeworICAgICAgaHNkLT5Db250ZXh0ID0gU0RfQ09OVEVYVF9XUklURV9NVUxUSVBMRV9CTE9DSzsKKworICAgICAgLyogV3JpdGUgTXVsdGkgQmxvY2sgY29tbWFuZCAqLworICAgICAgZXJyb3JzdGF0ZSA9IFNETU1DX0NtZFdyaXRlTXVsdGlCbG9jayhoc2QtPkluc3RhbmNlLCBhZGQpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgaHNkLT5Db250ZXh0ID0gU0RfQ09OVEVYVF9XUklURV9TSU5HTEVfQkxPQ0s7CisKKyAgICAgIC8qIFdyaXRlIFNpbmdsZSBCbG9jayBjb21tYW5kICovCisgICAgICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kV3JpdGVTaW5nbGVCbG9jayhoc2QtPkluc3RhbmNlLCBhZGQpOworICAgIH0KKyAgICBpZihlcnJvcnN0YXRlICE9IEhBTF9TRF9FUlJPUl9OT05FKQorICAgIHsKKyAgICAgIC8qIENsZWFyIGFsbCB0aGUgc3RhdGljIGZsYWdzICovCisgICAgICBfX0hBTF9TRF9DTEVBUl9GTEFHKGhzZCwgU0RJT19TVEFUSUNfRkxBR1MpOworICAgICAgaHNkLT5FcnJvckNvZGUgfD0gZXJyb3JzdGF0ZTsKKyAgICAgIGhzZC0+U3RhdGUgPSBIQUxfU0RfU1RBVEVfUkVBRFk7CisgICAgICBoc2QtPkNvbnRleHQgPSBTRF9DT05URVhUX05PTkU7CisgICAgICByZXR1cm4gSEFMX0VSUk9SOworICAgIH0KKwogICAgIC8qIFdyaXRlIGJsb2NrKHMpIGluIHBvbGxpbmcgbW9kZSAqLwotI2lmZGVmIFNESU9fU1RBX1NUQklURVJSCisgICAgZGF0YXJlbWFpbmluZyA9IGNvbmZpZy5EYXRhTGVuZ3RoOworI2lmIGRlZmluZWQoU0RJT19TVEFfU1RCSVRFUlIpCiAgICAgd2hpbGUoIV9fSEFMX1NEX0dFVF9GTEFHKGhzZCwgU0RJT19GTEFHX1RYVU5ERVJSIHwgU0RJT19GTEFHX0RDUkNGQUlMIHwgU0RJT19GTEFHX0RUSU1FT1VUIHwgU0RJT19GTEFHX0RBVEFFTkQgfCBTRElPX0ZMQUdfU1RCSVRFUlIpKQogI2Vsc2UgLyogU0RJT19TVEFfU1RCSVRFUlIgbm90IGRlZmluZWQgKi8KICAgICB3aGlsZSghX19IQUxfU0RfR0VUX0ZMQUcoaHNkLCBTRElPX0ZMQUdfVFhVTkRFUlIgfCBTRElPX0ZMQUdfRENSQ0ZBSUwgfCBTRElPX0ZMQUdfRFRJTUVPVVQgfCBTRElPX0ZMQUdfREFUQUVORCkpCiAjZW5kaWYgLyogU0RJT19TVEFfU1RCSVRFUlIgKi8KICAgICB7Ci0gICAgICBpZihfX0hBTF9TRF9HRVRfRkxBRyhoc2QsIFNESU9fRkxBR19UWEZJRk9IRSkpCisgICAgICBpZihfX0hBTF9TRF9HRVRfRkxBRyhoc2QsIFNESU9fRkxBR19UWEZJRk9IRSkgJiYgKGRhdGFyZW1haW5pbmcgPiAwVSkpCiAgICAgICB7CiAgICAgICAgIC8qIFdyaXRlIGRhdGEgdG8gU0RJTyBUeCBGSUZPICovCiAgICAgICAgIGZvcihjb3VudCA9IDBVOyBjb3VudCA8IDhVOyBjb3VudCsrKQogICAgICAgICB7Ci0gICAgICAgICAgU0RJT19Xcml0ZUZJRk8oaHNkLT5JbnN0YW5jZSwgKHRlbXBidWZmICsgY291bnQpKTsKKyAgICAgICAgICBkYXRhID0gKHVpbnQzMl90KSgqdGVtcGJ1ZmYpOworICAgICAgICAgIHRlbXBidWZmKys7CisgICAgICAgICAgZGF0YXJlbWFpbmluZy0tOworICAgICAgICAgIGRhdGEgfD0gKCh1aW50MzJfdCkoKnRlbXBidWZmKSA8PCA4VSk7CisgICAgICAgICAgdGVtcGJ1ZmYrKzsKKyAgICAgICAgICBkYXRhcmVtYWluaW5nLS07CisgICAgICAgICAgZGF0YSB8PSAoKHVpbnQzMl90KSgqdGVtcGJ1ZmYpIDw8IDE2VSk7CisgICAgICAgICAgdGVtcGJ1ZmYrKzsKKyAgICAgICAgICBkYXRhcmVtYWluaW5nLS07CisgICAgICAgICAgZGF0YSB8PSAoKHVpbnQzMl90KSgqdGVtcGJ1ZmYpIDw8IDI0VSk7CisgICAgICAgICAgdGVtcGJ1ZmYrKzsKKyAgICAgICAgICBkYXRhcmVtYWluaW5nLS07CisgICAgICAgICAgKHZvaWQpU0RJT19Xcml0ZUZJRk8oaHNkLT5JbnN0YW5jZSwgJmRhdGEpOwogICAgICAgICB9Ci0gICAgICAgIHRlbXBidWZmICs9IDhVOwogICAgICAgfQotICAgICAgCi0gICAgICBpZigoVGltZW91dCA9PSAwVSl8fCgoSEFMX0dldFRpY2soKS10aWNrc3RhcnQpID49ICBUaW1lb3V0KSkKKworICAgICAgaWYoKChIQUxfR2V0VGljaygpLXRpY2tzdGFydCkgPj0gIFRpbWVvdXQpIHx8IChUaW1lb3V0ID09IDBVKSkKICAgICAgIHsKICAgICAgICAgLyogQ2xlYXIgYWxsIHRoZSBzdGF0aWMgZmxhZ3MgKi8KLSAgICAgICAgX19IQUxfU0RfQ0xFQVJfRkxBRyhoc2QsIFNESU9fU1RBVElDX0ZMQUdTKTsgIAorICAgICAgICBfX0hBTF9TRF9DTEVBUl9GTEFHKGhzZCwgU0RJT19TVEFUSUNfRkxBR1MpOwogICAgICAgICBoc2QtPkVycm9yQ29kZSB8PSBlcnJvcnN0YXRlOwogICAgICAgICBoc2QtPlN0YXRlID0gSEFMX1NEX1NUQVRFX1JFQURZOworICAgICAgICBoc2QtPkNvbnRleHQgPSBTRF9DT05URVhUX05PTkU7CiAgICAgICAgIHJldHVybiBIQUxfVElNRU9VVDsKICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKiBTZW5kIHN0b3AgdHJhbnNtaXNzaW9uIGNvbW1hbmQgaW4gY2FzZSBvZiBtdWx0aWJsb2NrIHdyaXRlICovCiAgICAgaWYoX19IQUxfU0RfR0VUX0ZMQUcoaHNkLCBTRElPX0ZMQUdfREFUQUVORCkgJiYgKE51bWJlck9mQmxvY2tzID4gMVUpKQotICAgIHsgCisgICAgewogICAgICAgaWYoaHNkLT5TZENhcmQuQ2FyZFR5cGUgIT0gQ0FSRF9TRUNVUkVEKQogICAgICAgewogICAgICAgICAvKiBTZW5kIHN0b3AgdHJhbnNtaXNzaW9uIGNvbW1hbmQgKi8KQEAgLTg1NywxNCArOTA5LDE1IEBACiAgICAgICAgIGlmKGVycm9yc3RhdGUgIT0gSEFMX1NEX0VSUk9SX05PTkUpCiAgICAgICAgIHsKICAgICAgICAgICAvKiBDbGVhciBhbGwgdGhlIHN0YXRpYyBmbGFncyAqLwotICAgICAgICAgIF9fSEFMX1NEX0NMRUFSX0ZMQUcoaHNkLCBTRElPX1NUQVRJQ19GTEFHUyk7ICAKKyAgICAgICAgICBfX0hBTF9TRF9DTEVBUl9GTEFHKGhzZCwgU0RJT19TVEFUSUNfRkxBR1MpOwogICAgICAgICAgIGhzZC0+RXJyb3JDb2RlIHw9IGVycm9yc3RhdGU7CiAgICAgICAgICAgaHNkLT5TdGF0ZSA9IEhBTF9TRF9TVEFURV9SRUFEWTsKKyAgICAgICAgICBoc2QtPkNvbnRleHQgPSBTRF9DT05URVhUX05PTkU7CiAgICAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICAgICAgfQogICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qIEdldCBlcnJvciBzdGF0ZSAqLwogICAgIGlmKF9fSEFMX1NEX0dFVF9GTEFHKGhzZCwgU0RJT19GTEFHX0RUSU1FT1VUKSkKICAgICB7CkBAIC04NzIsMTQgKzkyNSwxNiBAQAogICAgICAgX19IQUxfU0RfQ0xFQVJfRkxBRyhoc2QsIFNESU9fU1RBVElDX0ZMQUdTKTsKICAgICAgIGhzZC0+RXJyb3JDb2RlIHw9IEhBTF9TRF9FUlJPUl9EQVRBX1RJTUVPVVQ7CiAgICAgICBoc2QtPlN0YXRlID0gSEFMX1NEX1NUQVRFX1JFQURZOworICAgICAgaHNkLT5Db250ZXh0ID0gU0RfQ09OVEVYVF9OT05FOwogICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICB9CiAgICAgZWxzZSBpZihfX0hBTF9TRF9HRVRfRkxBRyhoc2QsIFNESU9fRkxBR19EQ1JDRkFJTCkpCiAgICAgewogICAgICAgLyogQ2xlYXIgYWxsIHRoZSBzdGF0aWMgZmxhZ3MgKi8KICAgICAgIF9fSEFMX1NEX0NMRUFSX0ZMQUcoaHNkLCBTRElPX1NUQVRJQ19GTEFHUyk7Ci0gICAgICBoc2QtPkVycm9yQ29kZSB8PSBIQUxfU0RfRVJST1JfREFUQV9DUkNfRkFJTDsgICAgICAKKyAgICAgIGhzZC0+RXJyb3JDb2RlIHw9IEhBTF9TRF9FUlJPUl9EQVRBX0NSQ19GQUlMOwogICAgICAgaHNkLT5TdGF0ZSA9IEhBTF9TRF9TVEFURV9SRUFEWTsKKyAgICAgIGhzZC0+Q29udGV4dCA9IFNEX0NPTlRFWFRfTk9ORTsKICAgICAgIHJldHVybiBIQUxfRVJST1I7CiAgICAgfQogICAgIGVsc2UgaWYoX19IQUxfU0RfR0VUX0ZMQUcoaHNkLCBTRElPX0ZMQUdfVFhVTkRFUlIpKQpAQCAtODg4LDE0ICs5NDMsMTkgQEAKICAgICAgIF9fSEFMX1NEX0NMRUFSX0ZMQUcoaHNkLCBTRElPX1NUQVRJQ19GTEFHUyk7CiAgICAgICBoc2QtPkVycm9yQ29kZSB8PSBIQUxfU0RfRVJST1JfVFhfVU5ERVJSVU47CiAgICAgICBoc2QtPlN0YXRlID0gSEFMX1NEX1NUQVRFX1JFQURZOworICAgICAgaHNkLT5Db250ZXh0ID0gU0RfQ09OVEVYVF9OT05FOwogICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICB9Ci0gICAgCisgICAgZWxzZQorICAgIHsKKyAgICAgIC8qIE5vdGhpbmcgdG8gZG8gKi8KKyAgICB9CisKICAgICAvKiBDbGVhciBhbGwgdGhlIHN0YXRpYyBmbGFncyAqLwotICAgIF9fSEFMX1NEX0NMRUFSX0ZMQUcoaHNkLCBTRElPX1NUQVRJQ19GTEFHUyk7Ci0gICAgCisgICAgX19IQUxfU0RfQ0xFQVJfRkxBRyhoc2QsIFNESU9fU1RBVElDX0RBVEFfRkxBR1MpOworCiAgICAgaHNkLT5TdGF0ZSA9IEhBTF9TRF9TVEFURV9SRUFEWTsKLSAgICAKKwogICAgIHJldHVybiBIQUxfT0s7CiAgIH0KICAgZWxzZQpAQCAtOTA2LDEwMiArOTY2LDEwNCBAQAogfQogCiAvKioKLSAgKiBAYnJpZWYgIFJlYWRzIGJsb2NrKHMpIGZyb20gYSBzcGVjaWZpZWQgYWRkcmVzcyBpbiBhIGNhcmQuIFRoZSBEYXRhIHRyYW5zZmVyIAotICAqICAgICAgICAgaXMgbWFuYWdlZCBpbiBpbnRlcnJ1cHQgbW9kZS4gCisgICogQGJyaWVmICBSZWFkcyBibG9jayhzKSBmcm9tIGEgc3BlY2lmaWVkIGFkZHJlc3MgaW4gYSBjYXJkLiBUaGUgRGF0YSB0cmFuc2ZlcgorICAqICAgICAgICAgaXMgbWFuYWdlZCBpbiBpbnRlcnJ1cHQgbW9kZS4KICAgKiBAbm90ZSAgIFRoaXMgQVBJIHNob3VsZCBiZSBmb2xsb3dlZCBieSBhIGNoZWNrIG9uIHRoZSBjYXJkIHN0YXRlIHRocm91Z2gKICAgKiAgICAgICAgIEhBTF9TRF9HZXRDYXJkU3RhdGUoKS4KLSAgKiBAbm90ZSAgIFlvdSBjb3VsZCBhbHNvIGNoZWNrIHRoZSBJVCB0cmFuc2ZlciBwcm9jZXNzIHRocm91Z2ggdGhlIFNEIFJ4IAorICAqIEBub3RlICAgWW91IGNvdWxkIGFsc28gY2hlY2sgdGhlIElUIHRyYW5zZmVyIHByb2Nlc3MgdGhyb3VnaCB0aGUgU0QgUngKICAgKiAgICAgICAgIGludGVycnVwdCBldmVudC4KLSAgKiBAcGFyYW0gIGhzZCBQb2ludGVyIHRvIFNEIGhhbmRsZSAgICAgICAgICAgICAgICAgCi0gICogQHBhcmFtICBwRGF0YSBQb2ludGVyIHRvIHRoZSBidWZmZXIgdGhhdCB3aWxsIGNvbnRhaW4gdGhlIHJlY2VpdmVkIGRhdGEKLSAgKiBAcGFyYW0gIEJsb2NrQWRkIEJsb2NrIEFkZHJlc3MgZnJvbSB3aGVyZSBkYXRhIGlzIHRvIGJlIHJlYWQgCi0gICogQHBhcmFtICBOdW1iZXJPZkJsb2NrcyBOdW1iZXIgb2YgYmxvY2tzIHRvIHJlYWQuCisgICogQHBhcmFtICBoc2Q6IFBvaW50ZXIgdG8gU0QgaGFuZGxlCisgICogQHBhcmFtICBwRGF0YTogUG9pbnRlciB0byB0aGUgYnVmZmVyIHRoYXQgd2lsbCBjb250YWluIHRoZSByZWNlaXZlZCBkYXRhCisgICogQHBhcmFtICBCbG9ja0FkZDogQmxvY2sgQWRkcmVzcyBmcm9tIHdoZXJlIGRhdGEgaXMgdG8gYmUgcmVhZAorICAqIEBwYXJhbSAgTnVtYmVyT2ZCbG9ja3M6IE51bWJlciBvZiBibG9ja3MgdG8gcmVhZC4KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9TRF9SZWFkQmxvY2tzX0lUKFNEX0hhbmRsZVR5cGVEZWYgKmhzZCwgdWludDhfdCAqcERhdGEsIHVpbnQzMl90IEJsb2NrQWRkLCB1aW50MzJfdCBOdW1iZXJPZkJsb2NrcykKIHsKICAgU0RJT19EYXRhSW5pdFR5cGVEZWYgY29uZmlnOwotICB1aW50MzJfdCBlcnJvcnN0YXRlID0gSEFMX1NEX0VSUk9SX05PTkU7Ci0gIAorICB1aW50MzJfdCBlcnJvcnN0YXRlOworICB1aW50MzJfdCBhZGQgPSBCbG9ja0FkZDsKKwogICBpZihOVUxMID09IHBEYXRhKQogICB7CiAgICAgaHNkLT5FcnJvckNvZGUgfD0gSEFMX1NEX0VSUk9SX1BBUkFNOwogICAgIHJldHVybiBIQUxfRVJST1I7CiAgIH0KLSAgCisKICAgaWYoaHNkLT5TdGF0ZSA9PSBIQUxfU0RfU1RBVEVfUkVBRFkpCiAgIHsKLSAgICBoc2QtPkVycm9yQ29kZSA9IEhBTF9ETUFfRVJST1JfTk9ORTsKLSAgICAKLSAgICBpZigoQmxvY2tBZGQgKyBOdW1iZXJPZkJsb2NrcykgPiAoaHNkLT5TZENhcmQuTG9nQmxvY2tOYnIpKQorICAgIGhzZC0+RXJyb3JDb2RlID0gSEFMX1NEX0VSUk9SX05PTkU7CisKKyAgICBpZigoYWRkICsgTnVtYmVyT2ZCbG9ja3MpID4gKGhzZC0+U2RDYXJkLkxvZ0Jsb2NrTmJyKSkKICAgICB7CiAgICAgICBoc2QtPkVycm9yQ29kZSB8PSBIQUxfU0RfRVJST1JfQUREUl9PVVRfT0ZfUkFOR0U7CiAgICAgICByZXR1cm4gSEFMX0VSUk9SOwogICAgIH0KLSAgICAKKwogICAgIGhzZC0+U3RhdGUgPSBIQUxfU0RfU1RBVEVfQlVTWTsKLSAgICAKKwogICAgIC8qIEluaXRpYWxpemUgZGF0YSBjb250cm9sIHJlZ2lzdGVyICovCiAgICAgaHNkLT5JbnN0YW5jZS0+RENUUkwgPSAwVTsKLSAgICAKLSAgICBoc2QtPnBSeEJ1ZmZQdHIgPSAodWludDMyX3QgKilwRGF0YTsKKworICAgIGhzZC0+cFJ4QnVmZlB0ciA9IHBEYXRhOwogICAgIGhzZC0+UnhYZmVyU2l6ZSA9IEJMT0NLU0laRSAqIE51bWJlck9mQmxvY2tzOwotICAgIAotI2lmZGVmIFNESU9fU1RBX1NUQklURVJSCisKKyNpZiBkZWZpbmVkKFNESU9fU1RBX1NUQklURVJSKQogICAgIF9fSEFMX1NEX0VOQUJMRV9JVChoc2QsIChTRElPX0lUX0RDUkNGQUlMIHwgU0RJT19JVF9EVElNRU9VVCB8IFNESU9fSVRfUlhPVkVSUiB8IFNESU9fSVRfREFUQUVORCB8IFNESU9fRkxBR19SWEZJRk9IRiB8IFNESU9fSVRfU1RCSVRFUlIpKTsKICNlbHNlIC8qIFNESU9fU1RBX1NUQklURVJSIG5vdCBkZWZpbmVkICovCiAgICAgX19IQUxfU0RfRU5BQkxFX0lUKGhzZCwgKFNESU9fSVRfRENSQ0ZBSUwgfCBTRElPX0lUX0RUSU1FT1VUIHwgU0RJT19JVF9SWE9WRVJSIHwgU0RJT19JVF9EQVRBRU5EIHwgU0RJT19GTEFHX1JYRklGT0hGKSk7CiAjZW5kaWYgLyogU0RJT19TVEFfU1RCSVRFUlIgKi8KLSAgICAKKwogICAgIGlmKGhzZC0+U2RDYXJkLkNhcmRUeXBlICE9IENBUkRfU0RIQ19TRFhDKQogICAgIHsKLSAgICAgIEJsb2NrQWRkICo9IDUxMlU7CisgICAgICBhZGQgKj0gNTEyVTsKICAgICB9Ci0gICAgCi0gICAgLyogQ29uZmlndXJlIHRoZSBTRCBEUFNNIChEYXRhIFBhdGggU3RhdGUgTWFjaGluZSkgKi8gCisKKyAgICAvKiBTZXQgQmxvY2sgU2l6ZSBmb3IgQ2FyZCAqLworICAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRCbG9ja0xlbmd0aChoc2QtPkluc3RhbmNlLCBCTE9DS1NJWkUpOworICAgIGlmKGVycm9yc3RhdGUgIT0gSEFMX1NEX0VSUk9SX05PTkUpCisgICAgeworICAgICAgLyogQ2xlYXIgYWxsIHRoZSBzdGF0aWMgZmxhZ3MgKi8KKyAgICAgIF9fSEFMX1NEX0NMRUFSX0ZMQUcoaHNkLCBTRElPX1NUQVRJQ19GTEFHUyk7CisgICAgICBoc2QtPkVycm9yQ29kZSB8PSBlcnJvcnN0YXRlOworICAgICAgaHNkLT5TdGF0ZSA9IEhBTF9TRF9TVEFURV9SRUFEWTsKKyAgICAgIHJldHVybiBIQUxfRVJST1I7CisgICAgfQorCisgICAgLyogQ29uZmlndXJlIHRoZSBTRCBEUFNNIChEYXRhIFBhdGggU3RhdGUgTWFjaGluZSkgKi8KICAgICBjb25maWcuRGF0YVRpbWVPdXQgICA9IFNETU1DX0RBVEFUSU1FT1VUOwogICAgIGNvbmZpZy5EYXRhTGVuZ3RoICAgID0gQkxPQ0tTSVpFICogTnVtYmVyT2ZCbG9ja3M7CiAgICAgY29uZmlnLkRhdGFCbG9ja1NpemUgPSBTRElPX0RBVEFCTE9DS19TSVpFXzUxMkI7CiAgICAgY29uZmlnLlRyYW5zZmVyRGlyICAgPSBTRElPX1RSQU5TRkVSX0RJUl9UT19TRElPOwogICAgIGNvbmZpZy5UcmFuc2Zlck1vZGUgID0gU0RJT19UUkFOU0ZFUl9NT0RFX0JMT0NLOwogICAgIGNvbmZpZy5EUFNNICAgICAgICAgID0gU0RJT19EUFNNX0VOQUJMRTsKLSAgICBTRElPX0NvbmZpZ0RhdGEoaHNkLT5JbnN0YW5jZSwgJmNvbmZpZyk7Ci0gICAgCi0gICAgLyogU2V0IEJsb2NrIFNpemUgZm9yIENhcmQgKi8gCi0gICAgZXJyb3JzdGF0ZSA9IFNETU1DX0NtZEJsb2NrTGVuZ3RoKGhzZC0+SW5zdGFuY2UsIEJMT0NLU0laRSk7Ci0gICAgaWYoZXJyb3JzdGF0ZSAhPSBIQUxfU0RfRVJST1JfTk9ORSkKLSAgICB7Ci0gICAgICAvKiBDbGVhciBhbGwgdGhlIHN0YXRpYyBmbGFncyAqLwotICAgICAgX19IQUxfU0RfQ0xFQVJfRkxBRyhoc2QsIFNESU9fU1RBVElDX0ZMQUdTKTsgCi0gICAgICBoc2QtPkVycm9yQ29kZSB8PSBlcnJvcnN0YXRlOwotICAgICAgaHNkLT5TdGF0ZSA9IEhBTF9TRF9TVEFURV9SRUFEWTsKLSAgICAgIHJldHVybiBIQUxfRVJST1I7Ci0gICAgfQorICAgICh2b2lkKVNESU9fQ29uZmlnRGF0YShoc2QtPkluc3RhbmNlLCAmY29uZmlnKTsKIAogICAgIC8qIFJlYWQgQmxvY2tzIGluIElUIG1vZGUgKi8KICAgICBpZihOdW1iZXJPZkJsb2NrcyA+IDFVKQogICAgIHsKICAgICAgIGhzZC0+Q29udGV4dCA9IChTRF9DT05URVhUX1JFQURfTVVMVElQTEVfQkxPQ0sgfCBTRF9DT05URVhUX0lUKTsKLSAgICAgIAorCiAgICAgICAvKiBSZWFkIE11bHRpIEJsb2NrIGNvbW1hbmQgKi8KLSAgICAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRSZWFkTXVsdGlCbG9jayhoc2QtPkluc3RhbmNlLCBCbG9ja0FkZCk7CisgICAgICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kUmVhZE11bHRpQmxvY2soaHNkLT5JbnN0YW5jZSwgYWRkKTsKICAgICB9CiAgICAgZWxzZQogICAgIHsKICAgICAgIGhzZC0+Q29udGV4dCA9IChTRF9DT05URVhUX1JFQURfU0lOR0xFX0JMT0NLIHwgU0RfQ09OVEVYVF9JVCk7Ci0gICAgICAKKwogICAgICAgLyogUmVhZCBTaW5nbGUgQmxvY2sgY29tbWFuZCAqLwotICAgICAgZXJyb3JzdGF0ZSA9IFNETU1DX0NtZFJlYWRTaW5nbGVCbG9jayhoc2QtPkluc3RhbmNlLCBCbG9ja0FkZCk7CisgICAgICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kUmVhZFNpbmdsZUJsb2NrKGhzZC0+SW5zdGFuY2UsIGFkZCk7CiAgICAgfQogICAgIGlmKGVycm9yc3RhdGUgIT0gSEFMX1NEX0VSUk9SX05PTkUpCiAgICAgewogICAgICAgLyogQ2xlYXIgYWxsIHRoZSBzdGF0aWMgZmxhZ3MgKi8KLSAgICAgIF9fSEFMX1NEX0NMRUFSX0ZMQUcoaHNkLCBTRElPX1NUQVRJQ19GTEFHUyk7IAorICAgICAgX19IQUxfU0RfQ0xFQVJfRkxBRyhoc2QsIFNESU9fU1RBVElDX0ZMQUdTKTsKICAgICAgIGhzZC0+RXJyb3JDb2RlIHw9IGVycm9yc3RhdGU7CiAgICAgICBoc2QtPlN0YXRlID0gSEFMX1NEX1NUQVRFX1JFQURZOworICAgICAgaHNkLT5Db250ZXh0ID0gU0RfQ09OVEVYVF9OT05FOwogICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICB9Ci0gICAgCisKICAgICByZXR1cm4gSEFMX09LOwogICB9CiAgIGVsc2UKQEAgLTEwMTEsMTAzICsxMDczLDEwNSBAQAogfQogCiAvKioKLSAgKiBAYnJpZWYgIFdyaXRlcyBibG9jayhzKSB0byBhIHNwZWNpZmllZCBhZGRyZXNzIGluIGEgY2FyZC4gVGhlIERhdGEgdHJhbnNmZXIgCi0gICogICAgICAgICBpcyBtYW5hZ2VkIGluIGludGVycnVwdCBtb2RlLiAKKyAgKiBAYnJpZWYgIFdyaXRlcyBibG9jayhzKSB0byBhIHNwZWNpZmllZCBhZGRyZXNzIGluIGEgY2FyZC4gVGhlIERhdGEgdHJhbnNmZXIKKyAgKiAgICAgICAgIGlzIG1hbmFnZWQgaW4gaW50ZXJydXB0IG1vZGUuCiAgICogQG5vdGUgICBUaGlzIEFQSSBzaG91bGQgYmUgZm9sbG93ZWQgYnkgYSBjaGVjayBvbiB0aGUgY2FyZCBzdGF0ZSB0aHJvdWdoCiAgICogICAgICAgICBIQUxfU0RfR2V0Q2FyZFN0YXRlKCkuCi0gICogQG5vdGUgICBZb3UgY291bGQgYWxzbyBjaGVjayB0aGUgSVQgdHJhbnNmZXIgcHJvY2VzcyB0aHJvdWdoIHRoZSBTRCBUeCAKLSAgKiAgICAgICAgIGludGVycnVwdCBldmVudC4gCi0gICogQHBhcmFtICBoc2QgUG9pbnRlciB0byBTRCBoYW5kbGUKLSAgKiBAcGFyYW0gIHBEYXRhIFBvaW50ZXIgdG8gdGhlIGJ1ZmZlciB0aGF0IHdpbGwgY29udGFpbiB0aGUgZGF0YSB0byB0cmFuc21pdAotICAqIEBwYXJhbSAgQmxvY2tBZGQgQmxvY2sgQWRkcmVzcyB3aGVyZSBkYXRhIHdpbGwgYmUgd3JpdHRlbiAgICAKLSAgKiBAcGFyYW0gIE51bWJlck9mQmxvY2tzIE51bWJlciBvZiBibG9ja3MgdG8gd3JpdGUKKyAgKiBAbm90ZSAgIFlvdSBjb3VsZCBhbHNvIGNoZWNrIHRoZSBJVCB0cmFuc2ZlciBwcm9jZXNzIHRocm91Z2ggdGhlIFNEIFR4CisgICogICAgICAgICBpbnRlcnJ1cHQgZXZlbnQuCisgICogQHBhcmFtICBoc2Q6IFBvaW50ZXIgdG8gU0QgaGFuZGxlCisgICogQHBhcmFtICBwRGF0YTogUG9pbnRlciB0byB0aGUgYnVmZmVyIHRoYXQgd2lsbCBjb250YWluIHRoZSBkYXRhIHRvIHRyYW5zbWl0CisgICogQHBhcmFtICBCbG9ja0FkZDogQmxvY2sgQWRkcmVzcyB3aGVyZSBkYXRhIHdpbGwgYmUgd3JpdHRlbgorICAqIEBwYXJhbSAgTnVtYmVyT2ZCbG9ja3M6IE51bWJlciBvZiBibG9ja3MgdG8gd3JpdGUKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9TRF9Xcml0ZUJsb2Nrc19JVChTRF9IYW5kbGVUeXBlRGVmICpoc2QsIHVpbnQ4X3QgKnBEYXRhLCB1aW50MzJfdCBCbG9ja0FkZCwgdWludDMyX3QgTnVtYmVyT2ZCbG9ja3MpCiB7CiAgIFNESU9fRGF0YUluaXRUeXBlRGVmIGNvbmZpZzsKLSAgdWludDMyX3QgZXJyb3JzdGF0ZSA9IEhBTF9TRF9FUlJPUl9OT05FOwotICAKKyAgdWludDMyX3QgZXJyb3JzdGF0ZTsKKyAgdWludDMyX3QgYWRkID0gQmxvY2tBZGQ7CisKICAgaWYoTlVMTCA9PSBwRGF0YSkKICAgewogICAgIGhzZC0+RXJyb3JDb2RlIHw9IEhBTF9TRF9FUlJPUl9QQVJBTTsKICAgICByZXR1cm4gSEFMX0VSUk9SOwogICB9Ci0gIAorCiAgIGlmKGhzZC0+U3RhdGUgPT0gSEFMX1NEX1NUQVRFX1JFQURZKQogICB7Ci0gICAgaHNkLT5FcnJvckNvZGUgPSBIQUxfRE1BX0VSUk9SX05PTkU7Ci0gICAgCi0gICAgaWYoKEJsb2NrQWRkICsgTnVtYmVyT2ZCbG9ja3MpID4gKGhzZC0+U2RDYXJkLkxvZ0Jsb2NrTmJyKSkKKyAgICBoc2QtPkVycm9yQ29kZSA9IEhBTF9TRF9FUlJPUl9OT05FOworCisgICAgaWYoKGFkZCArIE51bWJlck9mQmxvY2tzKSA+IChoc2QtPlNkQ2FyZC5Mb2dCbG9ja05icikpCiAgICAgewogICAgICAgaHNkLT5FcnJvckNvZGUgfD0gSEFMX1NEX0VSUk9SX0FERFJfT1VUX09GX1JBTkdFOwogICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICB9Ci0gICAgCisKICAgICBoc2QtPlN0YXRlID0gSEFMX1NEX1NUQVRFX0JVU1k7Ci0gICAgCisKICAgICAvKiBJbml0aWFsaXplIGRhdGEgY29udHJvbCByZWdpc3RlciAqLwogICAgIGhzZC0+SW5zdGFuY2UtPkRDVFJMID0gMFU7Ci0gICAgCi0gICAgaHNkLT5wVHhCdWZmUHRyID0gKHVpbnQzMl90ICopcERhdGE7CisKKyAgICBoc2QtPnBUeEJ1ZmZQdHIgPSBwRGF0YTsKICAgICBoc2QtPlR4WGZlclNpemUgPSBCTE9DS1NJWkUgKiBOdW1iZXJPZkJsb2NrczsKLSAgICAKKwogICAgIC8qIEVuYWJsZSB0cmFuc2ZlciBpbnRlcnJ1cHRzICovCi0jaWZkZWYgU0RJT19TVEFfU1RCSVRFUlIKLSAgICBfX0hBTF9TRF9FTkFCTEVfSVQoaHNkLCAoU0RJT19JVF9EQ1JDRkFJTCB8IFNESU9fSVRfRFRJTUVPVVQgfCBTRElPX0lUX1RYVU5ERVJSIHwgU0RJT19JVF9EQVRBRU5EIHwgU0RJT19GTEFHX1RYRklGT0hFIHwgU0RJT19JVF9TVEJJVEVSUikpOyAgICAKKyNpZiBkZWZpbmVkKFNESU9fU1RBX1NUQklURVJSKQorICAgIF9fSEFMX1NEX0VOQUJMRV9JVChoc2QsIChTRElPX0lUX0RDUkNGQUlMIHwgU0RJT19JVF9EVElNRU9VVCB8IFNESU9fSVRfVFhVTkRFUlIgfCBTRElPX0lUX0RBVEFFTkQgfCBTRElPX0ZMQUdfVFhGSUZPSEUgfCBTRElPX0lUX1NUQklURVJSKSk7CiAjZWxzZSAvKiBTRElPX1NUQV9TVEJJVEVSUiBub3QgZGVmaW5lZCAqLwotICAgIF9fSEFMX1NEX0VOQUJMRV9JVChoc2QsIChTRElPX0lUX0RDUkNGQUlMIHwgU0RJT19JVF9EVElNRU9VVCB8IFNESU9fSVRfVFhVTkRFUlIgfCBTRElPX0lUX0RBVEFFTkQgfCBTRElPX0ZMQUdfVFhGSUZPSEUpKTsgICAgCisgICAgX19IQUxfU0RfRU5BQkxFX0lUKGhzZCwgKFNESU9fSVRfRENSQ0ZBSUwgfCBTRElPX0lUX0RUSU1FT1VUIHwgU0RJT19JVF9UWFVOREVSUiB8IFNESU9fSVRfREFUQUVORCB8IFNESU9fRkxBR19UWEZJRk9IRSkpOwogI2VuZGlmIC8qIFNESU9fU1RBX1NUQklURVJSICovCi0gICAgCisKICAgICBpZihoc2QtPlNkQ2FyZC5DYXJkVHlwZSAhPSBDQVJEX1NESENfU0RYQykKICAgICB7Ci0gICAgICBCbG9ja0FkZCAqPSA1MTJVOworICAgICAgYWRkICo9IDUxMlU7CiAgICAgfQotICAgIAotICAgIC8qIFNldCBCbG9jayBTaXplIGZvciBDYXJkICovIAorCisgICAgLyogU2V0IEJsb2NrIFNpemUgZm9yIENhcmQgKi8KICAgICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kQmxvY2tMZW5ndGgoaHNkLT5JbnN0YW5jZSwgQkxPQ0tTSVpFKTsKICAgICBpZihlcnJvcnN0YXRlICE9IEhBTF9TRF9FUlJPUl9OT05FKQogICAgIHsKICAgICAgIC8qIENsZWFyIGFsbCB0aGUgc3RhdGljIGZsYWdzICovCi0gICAgICBfX0hBTF9TRF9DTEVBUl9GTEFHKGhzZCwgU0RJT19TVEFUSUNfRkxBR1MpOyAKKyAgICAgIF9fSEFMX1NEX0NMRUFSX0ZMQUcoaHNkLCBTRElPX1NUQVRJQ19GTEFHUyk7CiAgICAgICBoc2QtPkVycm9yQ29kZSB8PSBlcnJvcnN0YXRlOwogICAgICAgaHNkLT5TdGF0ZSA9IEhBTF9TRF9TVEFURV9SRUFEWTsKICAgICAgIHJldHVybiBIQUxfRVJST1I7CiAgICAgfQotICAgIAorCiAgICAgLyogV3JpdGUgQmxvY2tzIGluIFBvbGxpbmcgbW9kZSAqLwogICAgIGlmKE51bWJlck9mQmxvY2tzID4gMVUpCiAgICAgewogICAgICAgaHNkLT5Db250ZXh0ID0gKFNEX0NPTlRFWFRfV1JJVEVfTVVMVElQTEVfQkxPQ0t8IFNEX0NPTlRFWFRfSVQpOwotICAgICAgCi0gICAgICAvKiBXcml0ZSBNdWx0aSBCbG9jayBjb21tYW5kICovIAotICAgICAgZXJyb3JzdGF0ZSA9IFNETU1DX0NtZFdyaXRlTXVsdGlCbG9jayhoc2QtPkluc3RhbmNlLCBCbG9ja0FkZCk7CisKKyAgICAgIC8qIFdyaXRlIE11bHRpIEJsb2NrIGNvbW1hbmQgKi8KKyAgICAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRXcml0ZU11bHRpQmxvY2soaHNkLT5JbnN0YW5jZSwgYWRkKTsKICAgICB9CiAgICAgZWxzZQogICAgIHsKICAgICAgIGhzZC0+Q29udGV4dCA9IChTRF9DT05URVhUX1dSSVRFX1NJTkdMRV9CTE9DSyB8IFNEX0NPTlRFWFRfSVQpOwotICAgICAgCi0gICAgICAvKiBXcml0ZSBTaW5nbGUgQmxvY2sgY29tbWFuZCAqLyAKLSAgICAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRXcml0ZVNpbmdsZUJsb2NrKGhzZC0+SW5zdGFuY2UsIEJsb2NrQWRkKTsKKworICAgICAgLyogV3JpdGUgU2luZ2xlIEJsb2NrIGNvbW1hbmQgKi8KKyAgICAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRXcml0ZVNpbmdsZUJsb2NrKGhzZC0+SW5zdGFuY2UsIGFkZCk7CiAgICAgfQogICAgIGlmKGVycm9yc3RhdGUgIT0gSEFMX1NEX0VSUk9SX05PTkUpCiAgICAgewogICAgICAgLyogQ2xlYXIgYWxsIHRoZSBzdGF0aWMgZmxhZ3MgKi8KLSAgICAgIF9fSEFMX1NEX0NMRUFSX0ZMQUcoaHNkLCBTRElPX1NUQVRJQ19GTEFHUyk7IAorICAgICAgX19IQUxfU0RfQ0xFQVJfRkxBRyhoc2QsIFNESU9fU1RBVElDX0ZMQUdTKTsKICAgICAgIGhzZC0+RXJyb3JDb2RlIHw9IGVycm9yc3RhdGU7CiAgICAgICBoc2QtPlN0YXRlID0gSEFMX1NEX1NUQVRFX1JFQURZOworICAgICAgaHNkLT5Db250ZXh0ID0gU0RfQ09OVEVYVF9OT05FOwogICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICB9Ci0gICAgCi0gICAgLyogQ29uZmlndXJlIHRoZSBTRCBEUFNNIChEYXRhIFBhdGggU3RhdGUgTWFjaGluZSkgKi8gCisKKyAgICAvKiBDb25maWd1cmUgdGhlIFNEIERQU00gKERhdGEgUGF0aCBTdGF0ZSBNYWNoaW5lKSAqLwogICAgIGNvbmZpZy5EYXRhVGltZU91dCAgID0gU0RNTUNfREFUQVRJTUVPVVQ7CiAgICAgY29uZmlnLkRhdGFMZW5ndGggICAgPSBCTE9DS1NJWkUgKiBOdW1iZXJPZkJsb2NrczsKICAgICBjb25maWcuRGF0YUJsb2NrU2l6ZSA9IFNESU9fREFUQUJMT0NLX1NJWkVfNTEyQjsKICAgICBjb25maWcuVHJhbnNmZXJEaXIgICA9IFNESU9fVFJBTlNGRVJfRElSX1RPX0NBUkQ7CiAgICAgY29uZmlnLlRyYW5zZmVyTW9kZSAgPSBTRElPX1RSQU5TRkVSX01PREVfQkxPQ0s7CiAgICAgY29uZmlnLkRQU00gICAgICAgICAgPSBTRElPX0RQU01fRU5BQkxFOwotICAgIFNESU9fQ29uZmlnRGF0YShoc2QtPkluc3RhbmNlLCAmY29uZmlnKTsKLSAgICAKKyAgICAodm9pZClTRElPX0NvbmZpZ0RhdGEoaHNkLT5JbnN0YW5jZSwgJmNvbmZpZyk7CisKICAgICByZXR1cm4gSEFMX09LOwogICB9CiAgIGVsc2UKQEAgLTExMTcsMTE1ICsxMTgxLDEyNiBAQAogfQogCiAvKioKLSAgKiBAYnJpZWYgIFJlYWRzIGJsb2NrKHMpIGZyb20gYSBzcGVjaWZpZWQgYWRkcmVzcyBpbiBhIGNhcmQuIFRoZSBEYXRhIHRyYW5zZmVyIAotICAqICAgICAgICAgaXMgbWFuYWdlZCBieSBETUEgbW9kZS4gCisgICogQGJyaWVmICBSZWFkcyBibG9jayhzKSBmcm9tIGEgc3BlY2lmaWVkIGFkZHJlc3MgaW4gYSBjYXJkLiBUaGUgRGF0YSB0cmFuc2ZlcgorICAqICAgICAgICAgaXMgbWFuYWdlZCBieSBETUEgbW9kZS4KICAgKiBAbm90ZSAgIFRoaXMgQVBJIHNob3VsZCBiZSBmb2xsb3dlZCBieSBhIGNoZWNrIG9uIHRoZSBjYXJkIHN0YXRlIHRocm91Z2gKICAgKiAgICAgICAgIEhBTF9TRF9HZXRDYXJkU3RhdGUoKS4KLSAgKiBAbm90ZSAgIFlvdSBjb3VsZCBhbHNvIGNoZWNrIHRoZSBETUEgdHJhbnNmZXIgcHJvY2VzcyB0aHJvdWdoIHRoZSBTRCBSeCAKKyAgKiBAbm90ZSAgIFlvdSBjb3VsZCBhbHNvIGNoZWNrIHRoZSBETUEgdHJhbnNmZXIgcHJvY2VzcyB0aHJvdWdoIHRoZSBTRCBSeAogICAqICAgICAgICAgaW50ZXJydXB0IGV2ZW50LgotICAqIEBwYXJhbSAgaHNkIFBvaW50ZXIgU0QgaGFuZGxlICAgICAgICAgICAgICAgICAKLSAgKiBAcGFyYW0gIHBEYXRhIFBvaW50ZXIgdG8gdGhlIGJ1ZmZlciB0aGF0IHdpbGwgY29udGFpbiB0aGUgcmVjZWl2ZWQgZGF0YQotICAqIEBwYXJhbSAgQmxvY2tBZGQgQmxvY2sgQWRkcmVzcyBmcm9tIHdoZXJlIGRhdGEgaXMgdG8gYmUgcmVhZCAgCi0gICogQHBhcmFtICBOdW1iZXJPZkJsb2NrcyBOdW1iZXIgb2YgYmxvY2tzIHRvIHJlYWQuCisgICogQHBhcmFtICBoc2Q6IFBvaW50ZXIgU0QgaGFuZGxlCisgICogQHBhcmFtICBwRGF0YTogUG9pbnRlciB0byB0aGUgYnVmZmVyIHRoYXQgd2lsbCBjb250YWluIHRoZSByZWNlaXZlZCBkYXRhCisgICogQHBhcmFtICBCbG9ja0FkZDogQmxvY2sgQWRkcmVzcyBmcm9tIHdoZXJlIGRhdGEgaXMgdG8gYmUgcmVhZAorICAqIEBwYXJhbSAgTnVtYmVyT2ZCbG9ja3M6IE51bWJlciBvZiBibG9ja3MgdG8gcmVhZC4KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9TRF9SZWFkQmxvY2tzX0RNQShTRF9IYW5kbGVUeXBlRGVmICpoc2QsIHVpbnQ4X3QgKnBEYXRhLCB1aW50MzJfdCBCbG9ja0FkZCwgdWludDMyX3QgTnVtYmVyT2ZCbG9ja3MpCiB7CiAgIFNESU9fRGF0YUluaXRUeXBlRGVmIGNvbmZpZzsKLSAgdWludDMyX3QgZXJyb3JzdGF0ZSA9IEhBTF9TRF9FUlJPUl9OT05FOwotICAKKyAgdWludDMyX3QgZXJyb3JzdGF0ZTsKKyAgdWludDMyX3QgYWRkID0gQmxvY2tBZGQ7CisKICAgaWYoTlVMTCA9PSBwRGF0YSkKICAgewogICAgIGhzZC0+RXJyb3JDb2RlIHw9IEhBTF9TRF9FUlJPUl9QQVJBTTsKICAgICByZXR1cm4gSEFMX0VSUk9SOwogICB9Ci0gIAorCiAgIGlmKGhzZC0+U3RhdGUgPT0gSEFMX1NEX1NUQVRFX1JFQURZKQogICB7Ci0gICAgaHNkLT5FcnJvckNvZGUgPSBIQUxfRE1BX0VSUk9SX05PTkU7Ci0gICAgCi0gICAgaWYoKEJsb2NrQWRkICsgTnVtYmVyT2ZCbG9ja3MpID4gKGhzZC0+U2RDYXJkLkxvZ0Jsb2NrTmJyKSkKKyAgICBoc2QtPkVycm9yQ29kZSA9IEhBTF9TRF9FUlJPUl9OT05FOworCisgICAgaWYoKGFkZCArIE51bWJlck9mQmxvY2tzKSA+IChoc2QtPlNkQ2FyZC5Mb2dCbG9ja05icikpCiAgICAgewogICAgICAgaHNkLT5FcnJvckNvZGUgfD0gSEFMX1NEX0VSUk9SX0FERFJfT1VUX09GX1JBTkdFOwogICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICB9Ci0gICAgCisKICAgICBoc2QtPlN0YXRlID0gSEFMX1NEX1NUQVRFX0JVU1k7Ci0gICAgCisKICAgICAvKiBJbml0aWFsaXplIGRhdGEgY29udHJvbCByZWdpc3RlciAqLwogICAgIGhzZC0+SW5zdGFuY2UtPkRDVFJMID0gMFU7Ci0gICAgCi0jaWZkZWYgU0RJT19TVEFfU1RCSVRFUlIKKworI2lmIGRlZmluZWQoU0RJT19TVEFfU1RCSVRFUlIpCiAgICAgX19IQUxfU0RfRU5BQkxFX0lUKGhzZCwgKFNESU9fSVRfRENSQ0ZBSUwgfCBTRElPX0lUX0RUSU1FT1VUIHwgU0RJT19JVF9SWE9WRVJSIHwgU0RJT19JVF9EQVRBRU5EIHwgU0RJT19JVF9TVEJJVEVSUikpOwogI2Vsc2UgLyogU0RJT19TVEFfU1RCSVRFUlIgbm90IGRlZmluZWQgKi8KICAgICBfX0hBTF9TRF9FTkFCTEVfSVQoaHNkLCAoU0RJT19JVF9EQ1JDRkFJTCB8IFNESU9fSVRfRFRJTUVPVVQgfCBTRElPX0lUX1JYT1ZFUlIgfCBTRElPX0lUX0RBVEFFTkQpKTsKICNlbmRpZiAvKiBTRElPX1NUQV9TVEJJVEVSUiAqLwotICAgIAorCiAgICAgLyogU2V0IHRoZSBETUEgdHJhbnNmZXIgY29tcGxldGUgY2FsbGJhY2sgKi8KICAgICBoc2QtPmhkbWFyeC0+WGZlckNwbHRDYWxsYmFjayA9IFNEX0RNQVJlY2VpdmVDcGx0OwotICAgIAorCiAgICAgLyogU2V0IHRoZSBETUEgZXJyb3IgY2FsbGJhY2sgKi8KICAgICBoc2QtPmhkbWFyeC0+WGZlckVycm9yQ2FsbGJhY2sgPSBTRF9ETUFFcnJvcjsKLSAgICAKKwogICAgIC8qIFNldCB0aGUgRE1BIEFib3J0IGNhbGxiYWNrICovCiAgICAgaHNkLT5oZG1hcngtPlhmZXJBYm9ydENhbGxiYWNrID0gTlVMTDsKLSAgICAKLSAgICAvKiBFbmFibGUgdGhlIERNQSBDaGFubmVsICovCi0gICAgSEFMX0RNQV9TdGFydF9JVChoc2QtPmhkbWFyeCwgKHVpbnQzMl90KSZoc2QtPkluc3RhbmNlLT5GSUZPLCAodWludDMyX3QpcERhdGEsICh1aW50MzJfdCkoQkxPQ0tTSVpFICogTnVtYmVyT2ZCbG9ja3MpLzQpOwotICAgIAotICAgIC8qIEVuYWJsZSBTRCBETUEgdHJhbnNmZXIgKi8KLSAgICBfX0hBTF9TRF9ETUFfRU5BQkxFKGhzZCk7Ci0gICAgCi0gICAgaWYoaHNkLT5TZENhcmQuQ2FyZFR5cGUgIT0gQ0FSRF9TREhDX1NEWEMpCi0gICAgewotICAgICAgQmxvY2tBZGQgKj0gNTEyVTsKLSAgICB9Ci0gICAgCi0gICAgLyogQ29uZmlndXJlIHRoZSBTRCBEUFNNIChEYXRhIFBhdGggU3RhdGUgTWFjaGluZSkgKi8gCi0gICAgY29uZmlnLkRhdGFUaW1lT3V0ICAgPSBTRE1NQ19EQVRBVElNRU9VVDsKLSAgICBjb25maWcuRGF0YUxlbmd0aCAgICA9IEJMT0NLU0laRSAqIE51bWJlck9mQmxvY2tzOwotICAgIGNvbmZpZy5EYXRhQmxvY2tTaXplID0gU0RJT19EQVRBQkxPQ0tfU0laRV81MTJCOwotICAgIGNvbmZpZy5UcmFuc2ZlckRpciAgID0gU0RJT19UUkFOU0ZFUl9ESVJfVE9fU0RJTzsKLSAgICBjb25maWcuVHJhbnNmZXJNb2RlICA9IFNESU9fVFJBTlNGRVJfTU9ERV9CTE9DSzsKLSAgICBjb25maWcuRFBTTSAgICAgICAgICA9IFNESU9fRFBTTV9FTkFCTEU7Ci0gICAgU0RJT19Db25maWdEYXRhKGhzZC0+SW5zdGFuY2UsICZjb25maWcpOwogCi0gICAgLyogU2V0IEJsb2NrIFNpemUgZm9yIENhcmQgKi8gCi0gICAgZXJyb3JzdGF0ZSA9IFNETU1DX0NtZEJsb2NrTGVuZ3RoKGhzZC0+SW5zdGFuY2UsIEJMT0NLU0laRSk7Ci0gICAgaWYoZXJyb3JzdGF0ZSAhPSBIQUxfU0RfRVJST1JfTk9ORSkKKyAgICAvKiBFbmFibGUgdGhlIERNQSBDaGFubmVsICovCisgICAgaWYoSEFMX0RNQV9TdGFydF9JVChoc2QtPmhkbWFyeCwgKHVpbnQzMl90KSZoc2QtPkluc3RhbmNlLT5GSUZPLCAodWludDMyX3QpcERhdGEsICh1aW50MzJfdCkoQkxPQ0tTSVpFICogTnVtYmVyT2ZCbG9ja3MpLzRVKSAhPSBIQUxfT0spCiAgICAgewotICAgICAgLyogQ2xlYXIgYWxsIHRoZSBzdGF0aWMgZmxhZ3MgKi8KLSAgICAgIF9fSEFMX1NEX0NMRUFSX0ZMQUcoaHNkLCBTRElPX1NUQVRJQ19GTEFHUyk7IAotICAgICAgaHNkLT5FcnJvckNvZGUgfD0gZXJyb3JzdGF0ZTsKKyAgICAgIF9fSEFMX1NEX0RJU0FCTEVfSVQoaHNkLCAoU0RJT19JVF9EQ1JDRkFJTCB8IFNESU9fSVRfRFRJTUVPVVQgfCBTRElPX0lUX1JYT1ZFUlIgfCBTRElPX0lUX0RBVEFFTkQpKTsKKyAgICAgIF9fSEFMX1NEX0NMRUFSX0ZMQUcoaHNkLCBTRElPX1NUQVRJQ19GTEFHUyk7CisgICAgICBoc2QtPkVycm9yQ29kZSB8PSBIQUxfU0RfRVJST1JfRE1BOwogICAgICAgaHNkLT5TdGF0ZSA9IEhBTF9TRF9TVEFURV9SRUFEWTsKICAgICAgIHJldHVybiBIQUxfRVJST1I7CiAgICAgfQotICAgICAgICAKLSAgICAvKiBSZWFkIEJsb2NrcyBpbiBETUEgbW9kZSAqLwotICAgIGlmKE51bWJlck9mQmxvY2tzID4gMVUpCi0gICAgewotICAgICAgaHNkLT5Db250ZXh0ID0gKFNEX0NPTlRFWFRfUkVBRF9NVUxUSVBMRV9CTE9DSyB8IFNEX0NPTlRFWFRfRE1BKTsKLSAgICAgIAotICAgICAgLyogUmVhZCBNdWx0aSBCbG9jayBjb21tYW5kICovIAotICAgICAgZXJyb3JzdGF0ZSA9IFNETU1DX0NtZFJlYWRNdWx0aUJsb2NrKGhzZC0+SW5zdGFuY2UsIEJsb2NrQWRkKTsKLSAgICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAgIGhzZC0+Q29udGV4dCA9IChTRF9DT05URVhUX1JFQURfU0lOR0xFX0JMT0NLIHwgU0RfQ09OVEVYVF9ETUEpOwotICAgICAgCi0gICAgICAvKiBSZWFkIFNpbmdsZSBCbG9jayBjb21tYW5kICovIAotICAgICAgZXJyb3JzdGF0ZSA9IFNETU1DX0NtZFJlYWRTaW5nbGVCbG9jayhoc2QtPkluc3RhbmNlLCBCbG9ja0FkZCk7Ci0gICAgfQotICAgIGlmKGVycm9yc3RhdGUgIT0gSEFMX1NEX0VSUk9SX05PTkUpCi0gICAgewotICAgICAgLyogQ2xlYXIgYWxsIHRoZSBzdGF0aWMgZmxhZ3MgKi8KLSAgICAgIF9fSEFMX1NEX0NMRUFSX0ZMQUcoaHNkLCBTRElPX1NUQVRJQ19GTEFHUyk7IAotICAgICAgaHNkLT5FcnJvckNvZGUgfD0gZXJyb3JzdGF0ZTsKLSAgICAgIGhzZC0+U3RhdGUgPSBIQUxfU0RfU1RBVEVfUkVBRFk7Ci0gICAgICByZXR1cm4gSEFMX0VSUk9SOwotICAgIH0KKyAgICAgIC8qIEVuYWJsZSBTRCBETUEgdHJhbnNmZXIgKi8KKyAgICAgIF9fSEFMX1NEX0RNQV9FTkFCTEUoaHNkKTsKIAotICAgIHJldHVybiBIQUxfT0s7CisgICAgICBpZihoc2QtPlNkQ2FyZC5DYXJkVHlwZSAhPSBDQVJEX1NESENfU0RYQykKKyAgICAgIHsKKyAgICAgICAgYWRkICo9IDUxMlU7CisgICAgICB9CisKKyAgICAgIC8qIFNldCBCbG9jayBTaXplIGZvciBDYXJkICovCisgICAgICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kQmxvY2tMZW5ndGgoaHNkLT5JbnN0YW5jZSwgQkxPQ0tTSVpFKTsKKyAgICAgIGlmKGVycm9yc3RhdGUgIT0gSEFMX1NEX0VSUk9SX05PTkUpCisgICAgICB7CisgICAgICAgIC8qIENsZWFyIGFsbCB0aGUgc3RhdGljIGZsYWdzICovCisgICAgICAgIF9fSEFMX1NEX0NMRUFSX0ZMQUcoaHNkLCBTRElPX1NUQVRJQ19GTEFHUyk7CisgICAgICAgIGhzZC0+RXJyb3JDb2RlIHw9IGVycm9yc3RhdGU7CisgICAgICAgIGhzZC0+U3RhdGUgPSBIQUxfU0RfU1RBVEVfUkVBRFk7CisgICAgICAgIHJldHVybiBIQUxfRVJST1I7CisgICAgICB9CisKKyAgICAgIC8qIENvbmZpZ3VyZSB0aGUgU0QgRFBTTSAoRGF0YSBQYXRoIFN0YXRlIE1hY2hpbmUpICovCisgICAgICBjb25maWcuRGF0YVRpbWVPdXQgICA9IFNETU1DX0RBVEFUSU1FT1VUOworICAgICAgY29uZmlnLkRhdGFMZW5ndGggICAgPSBCTE9DS1NJWkUgKiBOdW1iZXJPZkJsb2NrczsKKyAgICAgIGNvbmZpZy5EYXRhQmxvY2tTaXplID0gU0RJT19EQVRBQkxPQ0tfU0laRV81MTJCOworICAgICAgY29uZmlnLlRyYW5zZmVyRGlyICAgPSBTRElPX1RSQU5TRkVSX0RJUl9UT19TRElPOworICAgICAgY29uZmlnLlRyYW5zZmVyTW9kZSAgPSBTRElPX1RSQU5TRkVSX01PREVfQkxPQ0s7CisgICAgICBjb25maWcuRFBTTSAgICAgICAgICA9IFNESU9fRFBTTV9FTkFCTEU7CisgICAgICAodm9pZClTRElPX0NvbmZpZ0RhdGEoaHNkLT5JbnN0YW5jZSwgJmNvbmZpZyk7CisKKyAgICAgIC8qIFJlYWQgQmxvY2tzIGluIERNQSBtb2RlICovCisgICAgICBpZihOdW1iZXJPZkJsb2NrcyA+IDFVKQorICAgICAgeworICAgICAgICBoc2QtPkNvbnRleHQgPSAoU0RfQ09OVEVYVF9SRUFEX01VTFRJUExFX0JMT0NLIHwgU0RfQ09OVEVYVF9ETUEpOworCisgICAgICAgIC8qIFJlYWQgTXVsdGkgQmxvY2sgY29tbWFuZCAqLworICAgICAgICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kUmVhZE11bHRpQmxvY2soaHNkLT5JbnN0YW5jZSwgYWRkKTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgaHNkLT5Db250ZXh0ID0gKFNEX0NPTlRFWFRfUkVBRF9TSU5HTEVfQkxPQ0sgfCBTRF9DT05URVhUX0RNQSk7CisKKyAgICAgICAgLyogUmVhZCBTaW5nbGUgQmxvY2sgY29tbWFuZCAqLworICAgICAgICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kUmVhZFNpbmdsZUJsb2NrKGhzZC0+SW5zdGFuY2UsIGFkZCk7CisgICAgICB9CisgICAgICBpZihlcnJvcnN0YXRlICE9IEhBTF9TRF9FUlJPUl9OT05FKQorICAgICAgeworICAgICAgICAvKiBDbGVhciBhbGwgdGhlIHN0YXRpYyBmbGFncyAqLworICAgICAgICBfX0hBTF9TRF9DTEVBUl9GTEFHKGhzZCwgU0RJT19TVEFUSUNfRkxBR1MpOworICAgICAgICBoc2QtPkVycm9yQ29kZSB8PSBlcnJvcnN0YXRlOworICAgICAgICBoc2QtPlN0YXRlID0gSEFMX1NEX1NUQVRFX1JFQURZOworICAgICAgICBoc2QtPkNvbnRleHQgPSBTRF9DT05URVhUX05PTkU7CisgICAgICAgIHJldHVybiBIQUxfRVJST1I7CisgICAgICB9CisKKyAgICAgIHJldHVybiBIQUxfT0s7CisgICAgfQogICB9CiAgIGVsc2UKICAgewpAQCAtMTIzNCwxMTYgKzEzMDksMTMyIEBACiB9CiAKIC8qKgotICAqIEBicmllZiAgV3JpdGVzIGJsb2NrKHMpIHRvIGEgc3BlY2lmaWVkIGFkZHJlc3MgaW4gYSBjYXJkLiBUaGUgRGF0YSB0cmFuc2ZlciAKLSAgKiAgICAgICAgIGlzIG1hbmFnZWQgYnkgRE1BIG1vZGUuIAorICAqIEBicmllZiAgV3JpdGVzIGJsb2NrKHMpIHRvIGEgc3BlY2lmaWVkIGFkZHJlc3MgaW4gYSBjYXJkLiBUaGUgRGF0YSB0cmFuc2ZlcgorICAqICAgICAgICAgaXMgbWFuYWdlZCBieSBETUEgbW9kZS4KICAgKiBAbm90ZSAgIFRoaXMgQVBJIHNob3VsZCBiZSBmb2xsb3dlZCBieSBhIGNoZWNrIG9uIHRoZSBjYXJkIHN0YXRlIHRocm91Z2gKICAgKiAgICAgICAgIEhBTF9TRF9HZXRDYXJkU3RhdGUoKS4KLSAgKiBAbm90ZSAgIFlvdSBjb3VsZCBhbHNvIGNoZWNrIHRoZSBETUEgdHJhbnNmZXIgcHJvY2VzcyB0aHJvdWdoIHRoZSBTRCBUeCAKKyAgKiBAbm90ZSAgIFlvdSBjb3VsZCBhbHNvIGNoZWNrIHRoZSBETUEgdHJhbnNmZXIgcHJvY2VzcyB0aHJvdWdoIHRoZSBTRCBUeAogICAqICAgICAgICAgaW50ZXJydXB0IGV2ZW50LgotICAqIEBwYXJhbSAgaHNkIFBvaW50ZXIgdG8gU0QgaGFuZGxlCi0gICogQHBhcmFtICBwRGF0YSBQb2ludGVyIHRvIHRoZSBidWZmZXIgdGhhdCB3aWxsIGNvbnRhaW4gdGhlIGRhdGEgdG8gdHJhbnNtaXQKLSAgKiBAcGFyYW0gIEJsb2NrQWRkIEJsb2NrIEFkZHJlc3Mgd2hlcmUgZGF0YSB3aWxsIGJlIHdyaXR0ZW4gIAotICAqIEBwYXJhbSAgTnVtYmVyT2ZCbG9ja3MgTnVtYmVyIG9mIGJsb2NrcyB0byB3cml0ZQorICAqIEBwYXJhbSAgaHNkOiBQb2ludGVyIHRvIFNEIGhhbmRsZQorICAqIEBwYXJhbSAgcERhdGE6IFBvaW50ZXIgdG8gdGhlIGJ1ZmZlciB0aGF0IHdpbGwgY29udGFpbiB0aGUgZGF0YSB0byB0cmFuc21pdAorICAqIEBwYXJhbSAgQmxvY2tBZGQ6IEJsb2NrIEFkZHJlc3Mgd2hlcmUgZGF0YSB3aWxsIGJlIHdyaXR0ZW4KKyAgKiBAcGFyYW0gIE51bWJlck9mQmxvY2tzOiBOdW1iZXIgb2YgYmxvY2tzIHRvIHdyaXRlCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfU0RfV3JpdGVCbG9ja3NfRE1BKFNEX0hhbmRsZVR5cGVEZWYgKmhzZCwgdWludDhfdCAqcERhdGEsIHVpbnQzMl90IEJsb2NrQWRkLCB1aW50MzJfdCBOdW1iZXJPZkJsb2NrcykKIHsKICAgU0RJT19EYXRhSW5pdFR5cGVEZWYgY29uZmlnOwotICB1aW50MzJfdCBlcnJvcnN0YXRlID0gSEFMX1NEX0VSUk9SX05PTkU7Ci0gIAorICB1aW50MzJfdCBlcnJvcnN0YXRlOworICB1aW50MzJfdCBhZGQgPSBCbG9ja0FkZDsKKwogICBpZihOVUxMID09IHBEYXRhKQogICB7CiAgICAgaHNkLT5FcnJvckNvZGUgfD0gSEFMX1NEX0VSUk9SX1BBUkFNOwogICAgIHJldHVybiBIQUxfRVJST1I7CiAgIH0KLSAgCisKICAgaWYoaHNkLT5TdGF0ZSA9PSBIQUxfU0RfU1RBVEVfUkVBRFkpCiAgIHsKLSAgICBoc2QtPkVycm9yQ29kZSA9IEhBTF9ETUFfRVJST1JfTk9ORTsKLSAgICAKLSAgICBpZigoQmxvY2tBZGQgKyBOdW1iZXJPZkJsb2NrcykgPiAoaHNkLT5TZENhcmQuTG9nQmxvY2tOYnIpKQorICAgIGhzZC0+RXJyb3JDb2RlID0gSEFMX1NEX0VSUk9SX05PTkU7CisKKyAgICBpZigoYWRkICsgTnVtYmVyT2ZCbG9ja3MpID4gKGhzZC0+U2RDYXJkLkxvZ0Jsb2NrTmJyKSkKICAgICB7CiAgICAgICBoc2QtPkVycm9yQ29kZSB8PSBIQUxfU0RfRVJST1JfQUREUl9PVVRfT0ZfUkFOR0U7CiAgICAgICByZXR1cm4gSEFMX0VSUk9SOwogICAgIH0KLSAgICAKKwogICAgIGhzZC0+U3RhdGUgPSBIQUxfU0RfU1RBVEVfQlVTWTsKLSAgICAKKwogICAgIC8qIEluaXRpYWxpemUgZGF0YSBjb250cm9sIHJlZ2lzdGVyICovCiAgICAgaHNkLT5JbnN0YW5jZS0+RENUUkwgPSAwVTsKLSAgICAKLSAgICAvKiBFbmFibGUgU0QgRXJyb3IgaW50ZXJydXB0cyAqLyAgCi0jaWZkZWYgU0RJT19TVEFfU1RCSVRFUlIKLSAgICBfX0hBTF9TRF9FTkFCTEVfSVQoaHNkLCAoU0RJT19JVF9EQ1JDRkFJTCB8IFNESU9fSVRfRFRJTUVPVVQgfCBTRElPX0lUX1RYVU5ERVJSIHwgU0RJT19JVF9TVEJJVEVSUikpOyAgICAKKworICAgIC8qIEVuYWJsZSBTRCBFcnJvciBpbnRlcnJ1cHRzICovCisjaWYgZGVmaW5lZChTRElPX1NUQV9TVEJJVEVSUikKKyAgICBfX0hBTF9TRF9FTkFCTEVfSVQoaHNkLCAoU0RJT19JVF9EQ1JDRkFJTCB8IFNESU9fSVRfRFRJTUVPVVQgfCBTRElPX0lUX1RYVU5ERVJSIHwgU0RJT19JVF9TVEJJVEVSUikpOwogI2Vsc2UgLyogU0RJT19TVEFfU1RCSVRFUlIgbm90IGRlZmluZWQgKi8KLSAgICBfX0hBTF9TRF9FTkFCTEVfSVQoaHNkLCAoU0RJT19JVF9EQ1JDRkFJTCB8IFNESU9fSVRfRFRJTUVPVVQgfCBTRElPX0lUX1RYVU5ERVJSKSk7ICAgIAorICAgIF9fSEFMX1NEX0VOQUJMRV9JVChoc2QsIChTRElPX0lUX0RDUkNGQUlMIHwgU0RJT19JVF9EVElNRU9VVCB8IFNESU9fSVRfVFhVTkRFUlIpKTsgICAKICNlbmRpZiAvKiBTRElPX1NUQV9TVEJJVEVSUiAqLwotICAgIAorCiAgICAgLyogU2V0IHRoZSBETUEgdHJhbnNmZXIgY29tcGxldGUgY2FsbGJhY2sgKi8KICAgICBoc2QtPmhkbWF0eC0+WGZlckNwbHRDYWxsYmFjayA9IFNEX0RNQVRyYW5zbWl0Q3BsdDsKLSAgICAKKwogICAgIC8qIFNldCB0aGUgRE1BIGVycm9yIGNhbGxiYWNrICovCiAgICAgaHNkLT5oZG1hdHgtPlhmZXJFcnJvckNhbGxiYWNrID0gU0RfRE1BRXJyb3I7Ci0gICAgCisKICAgICAvKiBTZXQgdGhlIERNQSBBYm9ydCBjYWxsYmFjayAqLwogICAgIGhzZC0+aGRtYXR4LT5YZmVyQWJvcnRDYWxsYmFjayA9IE5VTEw7Ci0gICAgCisKICAgICBpZihoc2QtPlNkQ2FyZC5DYXJkVHlwZSAhPSBDQVJEX1NESENfU0RYQykKICAgICB7Ci0gICAgICBCbG9ja0FkZCAqPSA1MTJVOworICAgICAgYWRkICo9IDUxMlU7CiAgICAgfQotICAgIAotICAgIC8qIFNldCBCbG9jayBTaXplIGZvciBDYXJkICovIAorCisgICAgLyogU2V0IEJsb2NrIFNpemUgZm9yIENhcmQgKi8KICAgICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kQmxvY2tMZW5ndGgoaHNkLT5JbnN0YW5jZSwgQkxPQ0tTSVpFKTsKICAgICBpZihlcnJvcnN0YXRlICE9IEhBTF9TRF9FUlJPUl9OT05FKQogICAgIHsKICAgICAgIC8qIENsZWFyIGFsbCB0aGUgc3RhdGljIGZsYWdzICovCi0gICAgICBfX0hBTF9TRF9DTEVBUl9GTEFHKGhzZCwgU0RJT19TVEFUSUNfRkxBR1MpOyAKKyAgICAgIF9fSEFMX1NEX0NMRUFSX0ZMQUcoaHNkLCBTRElPX1NUQVRJQ19GTEFHUyk7CiAgICAgICBoc2QtPkVycm9yQ29kZSB8PSBlcnJvcnN0YXRlOwogICAgICAgaHNkLT5TdGF0ZSA9IEhBTF9TRF9TVEFURV9SRUFEWTsKICAgICAgIHJldHVybiBIQUxfRVJST1I7CiAgICAgfQotICAgIAorCiAgICAgLyogV3JpdGUgQmxvY2tzIGluIFBvbGxpbmcgbW9kZSAqLwogICAgIGlmKE51bWJlck9mQmxvY2tzID4gMVUpCiAgICAgewogICAgICAgaHNkLT5Db250ZXh0ID0gKFNEX0NPTlRFWFRfV1JJVEVfTVVMVElQTEVfQkxPQ0sgfCBTRF9DT05URVhUX0RNQSk7Ci0gICAgICAKLSAgICAgIC8qIFdyaXRlIE11bHRpIEJsb2NrIGNvbW1hbmQgKi8gCi0gICAgICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kV3JpdGVNdWx0aUJsb2NrKGhzZC0+SW5zdGFuY2UsIEJsb2NrQWRkKTsKKworICAgICAgLyogV3JpdGUgTXVsdGkgQmxvY2sgY29tbWFuZCAqLworICAgICAgZXJyb3JzdGF0ZSA9IFNETU1DX0NtZFdyaXRlTXVsdGlCbG9jayhoc2QtPkluc3RhbmNlLCBhZGQpOwogICAgIH0KICAgICBlbHNlCiAgICAgewogICAgICAgaHNkLT5Db250ZXh0ID0gKFNEX0NPTlRFWFRfV1JJVEVfU0lOR0xFX0JMT0NLIHwgU0RfQ09OVEVYVF9ETUEpOwotICAgICAgCisKICAgICAgIC8qIFdyaXRlIFNpbmdsZSBCbG9jayBjb21tYW5kICovCi0gICAgICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kV3JpdGVTaW5nbGVCbG9jayhoc2QtPkluc3RhbmNlLCBCbG9ja0FkZCk7CisgICAgICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kV3JpdGVTaW5nbGVCbG9jayhoc2QtPkluc3RhbmNlLCBhZGQpOwogICAgIH0KICAgICBpZihlcnJvcnN0YXRlICE9IEhBTF9TRF9FUlJPUl9OT05FKQogICAgIHsKICAgICAgIC8qIENsZWFyIGFsbCB0aGUgc3RhdGljIGZsYWdzICovCi0gICAgICBfX0hBTF9TRF9DTEVBUl9GTEFHKGhzZCwgU0RJT19TVEFUSUNfRkxBR1MpOyAKKyAgICAgIF9fSEFMX1NEX0NMRUFSX0ZMQUcoaHNkLCBTRElPX1NUQVRJQ19GTEFHUyk7CiAgICAgICBoc2QtPkVycm9yQ29kZSB8PSBlcnJvcnN0YXRlOwogICAgICAgaHNkLT5TdGF0ZSA9IEhBTF9TRF9TVEFURV9SRUFEWTsKKyAgICAgIGhzZC0+Q29udGV4dCA9IFNEX0NPTlRFWFRfTk9ORTsKICAgICAgIHJldHVybiBIQUxfRVJST1I7CiAgICAgfQotICAgIAorCiAgICAgLyogRW5hYmxlIFNESU8gRE1BIHRyYW5zZmVyICovCiAgICAgX19IQUxfU0RfRE1BX0VOQUJMRShoc2QpOwotICAgIAorCiAgICAgLyogRW5hYmxlIHRoZSBETUEgQ2hhbm5lbCAqLwotICAgIEhBTF9ETUFfU3RhcnRfSVQoaHNkLT5oZG1hdHgsICh1aW50MzJfdClwRGF0YSwgKHVpbnQzMl90KSZoc2QtPkluc3RhbmNlLT5GSUZPLCAodWludDMyX3QpKEJMT0NLU0laRSAqIE51bWJlck9mQmxvY2tzKS80KTsKLSAgICAKLSAgICAvKiBDb25maWd1cmUgdGhlIFNEIERQU00gKERhdGEgUGF0aCBTdGF0ZSBNYWNoaW5lKSAqLyAKLSAgICBjb25maWcuRGF0YVRpbWVPdXQgICA9IFNETU1DX0RBVEFUSU1FT1VUOwotICAgIGNvbmZpZy5EYXRhTGVuZ3RoICAgID0gQkxPQ0tTSVpFICogTnVtYmVyT2ZCbG9ja3M7Ci0gICAgY29uZmlnLkRhdGFCbG9ja1NpemUgPSBTRElPX0RBVEFCTE9DS19TSVpFXzUxMkI7Ci0gICAgY29uZmlnLlRyYW5zZmVyRGlyICAgPSBTRElPX1RSQU5TRkVSX0RJUl9UT19DQVJEOwotICAgIGNvbmZpZy5UcmFuc2Zlck1vZGUgID0gU0RJT19UUkFOU0ZFUl9NT0RFX0JMT0NLOwotICAgIGNvbmZpZy5EUFNNICAgICAgICAgID0gU0RJT19EUFNNX0VOQUJMRTsKLSAgICBTRElPX0NvbmZpZ0RhdGEoaHNkLT5JbnN0YW5jZSwgJmNvbmZpZyk7Ci0gICAgCi0gICAgcmV0dXJuIEhBTF9PSzsKKyAgICBpZihIQUxfRE1BX1N0YXJ0X0lUKGhzZC0+aGRtYXR4LCAodWludDMyX3QpcERhdGEsICh1aW50MzJfdCkmaHNkLT5JbnN0YW5jZS0+RklGTywgKHVpbnQzMl90KShCTE9DS1NJWkUgKiBOdW1iZXJPZkJsb2NrcykvNFUpICE9IEhBTF9PSykKKyAgICB7CisjaWYgZGVmaW5lZChTRElPX1NUQV9TVEJJVEVSUikKKyAgICAgIF9fSEFMX1NEX0RJU0FCTEVfSVQoaHNkLCAoU0RJT19JVF9EQ1JDRkFJTCB8IFNESU9fSVRfRFRJTUVPVVQgfCBTRElPX0lUX1RYVU5ERVJSIHwgU0RJT19JVF9TVEJJVEVSUikpOworI2Vsc2UgLyogU0RJT19TVEFfU1RCSVRFUlIgbm90IGRlZmluZWQgKi8KKyAgICAgIF9fSEFMX1NEX0RJU0FCTEVfSVQoaHNkLCAoU0RJT19JVF9EQ1JDRkFJTCB8IFNESU9fSVRfRFRJTUVPVVQgfCBTRElPX0lUX1RYVU5ERVJSKSk7ICAgCisjZW5kaWYgLyogU0RJT19TVEFfU1RCSVRFUlIgKi8KKyAgICAgIF9fSEFMX1NEX0NMRUFSX0ZMQUcoaHNkLCBTRElPX1NUQVRJQ19GTEFHUyk7CisgICAgICBoc2QtPkVycm9yQ29kZSB8PSBIQUxfU0RfRVJST1JfRE1BOworICAgICAgaHNkLT5TdGF0ZSA9IEhBTF9TRF9TVEFURV9SRUFEWTsKKyAgICAgIGhzZC0+Q29udGV4dCA9IFNEX0NPTlRFWFRfTk9ORTsKKyAgICAgIHJldHVybiBIQUxfRVJST1I7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAvKiBDb25maWd1cmUgdGhlIFNEIERQU00gKERhdGEgUGF0aCBTdGF0ZSBNYWNoaW5lKSAqLworICAgICAgY29uZmlnLkRhdGFUaW1lT3V0ICAgPSBTRE1NQ19EQVRBVElNRU9VVDsKKyAgICAgIGNvbmZpZy5EYXRhTGVuZ3RoICAgID0gQkxPQ0tTSVpFICogTnVtYmVyT2ZCbG9ja3M7CisgICAgICBjb25maWcuRGF0YUJsb2NrU2l6ZSA9IFNESU9fREFUQUJMT0NLX1NJWkVfNTEyQjsKKyAgICAgIGNvbmZpZy5UcmFuc2ZlckRpciAgID0gU0RJT19UUkFOU0ZFUl9ESVJfVE9fQ0FSRDsKKyAgICAgIGNvbmZpZy5UcmFuc2Zlck1vZGUgID0gU0RJT19UUkFOU0ZFUl9NT0RFX0JMT0NLOworICAgICAgY29uZmlnLkRQU00gICAgICAgICAgPSBTRElPX0RQU01fRU5BQkxFOworICAgICAgKHZvaWQpU0RJT19Db25maWdEYXRhKGhzZC0+SW5zdGFuY2UsICZjb25maWcpOworCisgICAgICByZXR1cm4gSEFMX09LOworICAgIH0KICAgfQogICBlbHNlCiAgIHsKQEAgLTEzNTUsMzMgKzE0NDYsMzUgQEAKICAgKiBAYnJpZWYgIEVyYXNlcyB0aGUgc3BlY2lmaWVkIG1lbW9yeSBhcmVhIG9mIHRoZSBnaXZlbiBTRCBjYXJkLgogICAqIEBub3RlICAgVGhpcyBBUEkgc2hvdWxkIGJlIGZvbGxvd2VkIGJ5IGEgY2hlY2sgb24gdGhlIGNhcmQgc3RhdGUgdGhyb3VnaAogICAqICAgICAgICAgSEFMX1NEX0dldENhcmRTdGF0ZSgpLgotICAqIEBwYXJhbSAgaHNkIFBvaW50ZXIgdG8gU0QgaGFuZGxlIAotICAqIEBwYXJhbSAgQmxvY2tTdGFydEFkZCBTdGFydCBCbG9jayBhZGRyZXNzCi0gICogQHBhcmFtICBCbG9ja0VuZEFkZCBFbmQgQmxvY2sgYWRkcmVzcworICAqIEBwYXJhbSAgaHNkOiBQb2ludGVyIHRvIFNEIGhhbmRsZQorICAqIEBwYXJhbSAgQmxvY2tTdGFydEFkZDogU3RhcnQgQmxvY2sgYWRkcmVzcworICAqIEBwYXJhbSAgQmxvY2tFbmRBZGQ6IEVuZCBCbG9jayBhZGRyZXNzCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfU0RfRXJhc2UoU0RfSGFuZGxlVHlwZURlZiAqaHNkLCB1aW50MzJfdCBCbG9ja1N0YXJ0QWRkLCB1aW50MzJfdCBCbG9ja0VuZEFkZCkKIHsKLSAgdWludDMyX3QgZXJyb3JzdGF0ZSA9IEhBTF9TRF9FUlJPUl9OT05FOwotICAKKyAgdWludDMyX3QgZXJyb3JzdGF0ZTsKKyAgdWludDMyX3Qgc3RhcnRfYWRkID0gQmxvY2tTdGFydEFkZDsKKyAgdWludDMyX3QgZW5kX2FkZCA9IEJsb2NrRW5kQWRkOworCiAgIGlmKGhzZC0+U3RhdGUgPT0gSEFMX1NEX1NUQVRFX1JFQURZKQogICB7Ci0gICAgaHNkLT5FcnJvckNvZGUgPSBIQUxfRE1BX0VSUk9SX05PTkU7Ci0gICAgCi0gICAgaWYoQmxvY2tFbmRBZGQgPCBCbG9ja1N0YXJ0QWRkKQorICAgIGhzZC0+RXJyb3JDb2RlID0gSEFMX1NEX0VSUk9SX05PTkU7CisKKyAgICBpZihlbmRfYWRkIDwgc3RhcnRfYWRkKQogICAgIHsKICAgICAgIGhzZC0+RXJyb3JDb2RlIHw9IEhBTF9TRF9FUlJPUl9QQVJBTTsKICAgICAgIHJldHVybiBIQUxfRVJST1I7CiAgICAgfQotICAgIAotICAgIGlmKEJsb2NrRW5kQWRkID4gKGhzZC0+U2RDYXJkLkxvZ0Jsb2NrTmJyKSkKKworICAgIGlmKGVuZF9hZGQgPiAoaHNkLT5TZENhcmQuTG9nQmxvY2tOYnIpKQogICAgIHsKICAgICAgIGhzZC0+RXJyb3JDb2RlIHw9IEhBTF9TRF9FUlJPUl9BRERSX09VVF9PRl9SQU5HRTsKICAgICAgIHJldHVybiBIQUxfRVJST1I7CiAgICAgfQotICAgIAorCiAgICAgaHNkLT5TdGF0ZSA9IEhBTF9TRF9TVEFURV9CVVNZOwotICAgIAorCiAgICAgLyogQ2hlY2sgaWYgdGhlIGNhcmQgY29tbWFuZCBjbGFzcyBzdXBwb3J0cyBlcmFzZSBjb21tYW5kICovCiAgICAgaWYoKChoc2QtPlNkQ2FyZC5DbGFzcykgJiBTRElPX0NDQ0NfRVJBU0UpID09IDBVKQogICAgIHsKQEAgLTEzOTEsNjIgKzE0ODQsNjIgQEAKICAgICAgIGhzZC0+U3RhdGUgPSBIQUxfU0RfU1RBVEVfUkVBRFk7CiAgICAgICByZXR1cm4gSEFMX0VSUk9SOwogICAgIH0KLSAgICAKKwogICAgIGlmKChTRElPX0dldFJlc3BvbnNlKGhzZC0+SW5zdGFuY2UsIFNESU9fUkVTUDEpICYgU0RNTUNfQ0FSRF9MT0NLRUQpID09IFNETU1DX0NBUkRfTE9DS0VEKQogICAgIHsKICAgICAgIC8qIENsZWFyIGFsbCB0aGUgc3RhdGljIGZsYWdzICovCi0gICAgICBfX0hBTF9TRF9DTEVBUl9GTEFHKGhzZCwgU0RJT19TVEFUSUNfRkxBR1MpOyAgCisgICAgICBfX0hBTF9TRF9DTEVBUl9GTEFHKGhzZCwgU0RJT19TVEFUSUNfRkxBR1MpOwogICAgICAgaHNkLT5FcnJvckNvZGUgfD0gSEFMX1NEX0VSUk9SX0xPQ0tfVU5MT0NLX0ZBSUxFRDsKICAgICAgIGhzZC0+U3RhdGUgPSBIQUxfU0RfU1RBVEVfUkVBRFk7CiAgICAgICByZXR1cm4gSEFMX0VSUk9SOwogICAgIH0KLSAgICAKKwogICAgIC8qIEdldCBzdGFydCBhbmQgZW5kIGJsb2NrIGZvciBoaWdoIGNhcGFjaXR5IGNhcmRzICovCiAgICAgaWYoaHNkLT5TZENhcmQuQ2FyZFR5cGUgIT0gQ0FSRF9TREhDX1NEWEMpCiAgICAgewotICAgICAgQmxvY2tTdGFydEFkZCAqPSA1MTJVOwotICAgICAgQmxvY2tFbmRBZGQgICAqPSA1MTJVOworICAgICAgc3RhcnRfYWRkICo9IDUxMlU7CisgICAgICBlbmRfYWRkICAgKj0gNTEyVTsKICAgICB9Ci0gICAgCisKICAgICAvKiBBY2NvcmRpbmcgdG8gc2QtY2FyZCBzcGVjIDEuMCBFUkFTRV9HUk9VUF9TVEFSVCAoQ01EMzIpIGFuZCBlcmFzZV9ncm91cF9lbmQoQ01EMzMpICovCiAgICAgaWYoaHNkLT5TZENhcmQuQ2FyZFR5cGUgIT0gQ0FSRF9TRUNVUkVEKQogICAgIHsKICAgICAgIC8qIFNlbmQgQ01EMzIgU0RfRVJBU0VfR1JQX1NUQVJUIHdpdGggYXJndW1lbnQgYXMgYWRkciAgKi8KLSAgICAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRTREVyYXNlU3RhcnRBZGQoaHNkLT5JbnN0YW5jZSwgQmxvY2tTdGFydEFkZCk7CisgICAgICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kU0RFcmFzZVN0YXJ0QWRkKGhzZC0+SW5zdGFuY2UsIHN0YXJ0X2FkZCk7CiAgICAgICBpZihlcnJvcnN0YXRlICE9IEhBTF9TRF9FUlJPUl9OT05FKQogICAgICAgewogICAgICAgICAvKiBDbGVhciBhbGwgdGhlIHN0YXRpYyBmbGFncyAqLwotICAgICAgICBfX0hBTF9TRF9DTEVBUl9GTEFHKGhzZCwgU0RJT19TVEFUSUNfRkxBR1MpOyAKKyAgICAgICAgX19IQUxfU0RfQ0xFQVJfRkxBRyhoc2QsIFNESU9fU1RBVElDX0ZMQUdTKTsKICAgICAgICAgaHNkLT5FcnJvckNvZGUgfD0gZXJyb3JzdGF0ZTsKICAgICAgICAgaHNkLT5TdGF0ZSA9IEhBTF9TRF9TVEFURV9SRUFEWTsKICAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICAgIH0KLSAgICAgIAorCiAgICAgICAvKiBTZW5kIENNRDMzIFNEX0VSQVNFX0dSUF9FTkQgd2l0aCBhcmd1bWVudCBhcyBhZGRyICAqLwotICAgICAgZXJyb3JzdGF0ZSA9IFNETU1DX0NtZFNERXJhc2VFbmRBZGQoaHNkLT5JbnN0YW5jZSwgQmxvY2tFbmRBZGQpOworICAgICAgZXJyb3JzdGF0ZSA9IFNETU1DX0NtZFNERXJhc2VFbmRBZGQoaHNkLT5JbnN0YW5jZSwgZW5kX2FkZCk7CiAgICAgICBpZihlcnJvcnN0YXRlICE9IEhBTF9TRF9FUlJPUl9OT05FKQogICAgICAgewogICAgICAgICAvKiBDbGVhciBhbGwgdGhlIHN0YXRpYyBmbGFncyAqLwotICAgICAgICBfX0hBTF9TRF9DTEVBUl9GTEFHKGhzZCwgU0RJT19TVEFUSUNfRkxBR1MpOyAKKyAgICAgICAgX19IQUxfU0RfQ0xFQVJfRkxBRyhoc2QsIFNESU9fU1RBVElDX0ZMQUdTKTsKICAgICAgICAgaHNkLT5FcnJvckNvZGUgfD0gZXJyb3JzdGF0ZTsKICAgICAgICAgaHNkLT5TdGF0ZSA9IEhBTF9TRF9TVEFURV9SRUFEWTsKICAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKiBTZW5kIENNRDM4IEVSQVNFICovCiAgICAgZXJyb3JzdGF0ZSA9IFNETU1DX0NtZEVyYXNlKGhzZC0+SW5zdGFuY2UpOwogICAgIGlmKGVycm9yc3RhdGUgIT0gSEFMX1NEX0VSUk9SX05PTkUpCiAgICAgewogICAgICAgLyogQ2xlYXIgYWxsIHRoZSBzdGF0aWMgZmxhZ3MgKi8KLSAgICAgIF9fSEFMX1NEX0NMRUFSX0ZMQUcoaHNkLCBTRElPX1NUQVRJQ19GTEFHUyk7IAorICAgICAgX19IQUxfU0RfQ0xFQVJfRkxBRyhoc2QsIFNESU9fU1RBVElDX0ZMQUdTKTsKICAgICAgIGhzZC0+RXJyb3JDb2RlIHw9IGVycm9yc3RhdGU7CiAgICAgICBoc2QtPlN0YXRlID0gSEFMX1NEX1NUQVRFX1JFQURZOwogICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICB9Ci0gICAgCisKICAgICBoc2QtPlN0YXRlID0gSEFMX1NEX1NUQVRFX1JFQURZOwotICAgIAorCiAgICAgcmV0dXJuIEhBTF9PSzsKICAgfQogICBlbHNlCkBAIC0xNDU3LDIxOCArMTU1MCwxNzggQEAKIAogLyoqCiAgICogQGJyaWVmICBUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgU0QgY2FyZCBpbnRlcnJ1cHQgcmVxdWVzdC4KLSAgKiBAcGFyYW0gIGhzZCBQb2ludGVyIHRvIFNEIGhhbmRsZQorICAqIEBwYXJhbSAgaHNkOiBQb2ludGVyIHRvIFNEIGhhbmRsZQogICAqIEByZXR2YWwgTm9uZQogICAqLwogdm9pZCBIQUxfU0RfSVJRSGFuZGxlcihTRF9IYW5kbGVUeXBlRGVmICpoc2QpCiB7Ci0gIHVpbnQzMl90IGVycm9yc3RhdGUgPSBIQUxfU0RfRVJST1JfTk9ORTsKLSAgCisgIHVpbnQzMl90IGVycm9yc3RhdGU7CisgIHVpbnQzMl90IGNvbnRleHQgPSBoc2QtPkNvbnRleHQ7CisKICAgLyogQ2hlY2sgZm9yIFNESU8gaW50ZXJydXB0IGZsYWdzICovCi0gIGlmKF9fSEFMX1NEX0dFVF9GTEFHKGhzZCwgU0RJT19JVF9EQVRBRU5EKSAhPSBSRVNFVCkKKyAgaWYoKF9fSEFMX1NEX0dFVF9GTEFHKGhzZCwgU0RJT19GTEFHX1JYRklGT0hGKSAhPSBSRVNFVCkgJiYgKChjb250ZXh0ICYgU0RfQ09OVEVYVF9JVCkgIT0gMFUpKQogICB7Ci0gICAgX19IQUxfU0RfQ0xFQVJfRkxBRyhoc2QsIFNESU9fRkxBR19EQVRBRU5EKTsgCi0gICAgCi0jaWZkZWYgU0RJT19TVEFfU1RCSVRFUlIKLSAgICBfX0hBTF9TRF9ESVNBQkxFX0lUKGhzZCwgU0RJT19JVF9EQVRBRU5EIHwgU0RJT19JVF9EQ1JDRkFJTCB8IFNESU9fSVRfRFRJTUVPVVR8XAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRElPX0lUX1RYVU5ERVJSfCBTRElPX0lUX1JYT1ZFUlIgfCBTRElPX0lUX1NUQklURVJSKTsKKyAgICBTRF9SZWFkX0lUKGhzZCk7CisgIH0KKworICBlbHNlIGlmKF9fSEFMX1NEX0dFVF9GTEFHKGhzZCwgU0RJT19GTEFHX0RBVEFFTkQpICE9IFJFU0VUKQorICB7CisgICAgX19IQUxfU0RfQ0xFQVJfRkxBRyhoc2QsIFNESU9fRkxBR19EQVRBRU5EKTsKKworI2lmIGRlZmluZWQoU0RJT19TVEFfU1RCSVRFUlIpCisgICAgX19IQUxfU0RfRElTQUJMRV9JVChoc2QsIFNESU9fSVRfREFUQUVORCAgfCBTRElPX0lUX0RDUkNGQUlMIHwgU0RJT19JVF9EVElNRU9VVHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNESU9fSVRfVFhVTkRFUlIgfCBTRElPX0lUX1JYT1ZFUlIgIHwgU0RJT19JVF9UWEZJRk9IRSB8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRElPX0lUX1JYRklGT0hGIHwgU0RJT19JVF9TVEJJVEVSUik7CiAjZWxzZSAvKiBTRElPX1NUQV9TVEJJVEVSUiBub3QgZGVmaW5lZCAqLwotICAgIF9fSEFMX1NEX0RJU0FCTEVfSVQoaHNkLCBTRElPX0lUX0RBVEFFTkQgfCBTRElPX0lUX0RDUkNGQUlMIHwgU0RJT19JVF9EVElNRU9VVHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNESU9fSVRfVFhVTkRFUlJ8IFNESU9fSVRfUlhPVkVSUik7Ci0jZW5kaWYKKyAgICBfX0hBTF9TRF9ESVNBQkxFX0lUKGhzZCwgU0RJT19JVF9EQVRBRU5EICB8IFNESU9fSVRfRENSQ0ZBSUwgfCBTRElPX0lUX0RUSU1FT1VUfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0RJT19JVF9UWFVOREVSUiB8IFNESU9fSVRfUlhPVkVSUiAgfCBTRElPX0lUX1RYRklGT0hFIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNESU9fSVRfUlhGSUZPSEYpOworI2VuZGlmIC8qIFNESU9fU1RBX1NUQklURVJSICovCisKKyAgICBoc2QtPkluc3RhbmNlLT5EQ1RSTCAmPSB+KFNESU9fRENUUkxfRFRFTik7CiAgICAgCi0gICAgaWYoKGhzZC0+Q29udGV4dCAmIFNEX0NPTlRFWFRfSVQpICE9IFJFU0VUKQorICAgIGlmKChjb250ZXh0ICYgU0RfQ09OVEVYVF9JVCkgIT0gMFUpCiAgICAgewotICAgICAgaWYoKChoc2QtPkNvbnRleHQgJiBTRF9DT05URVhUX1JFQURfTVVMVElQTEVfQkxPQ0spICE9IFJFU0VUKSB8fCAoKGhzZC0+Q29udGV4dCAmIFNEX0NPTlRFWFRfV1JJVEVfTVVMVElQTEVfQkxPQ0spICE9IFJFU0VUKSkKKyAgICAgIGlmKCgoY29udGV4dCAmIFNEX0NPTlRFWFRfUkVBRF9NVUxUSVBMRV9CTE9DSykgIT0gMFUpIHx8ICgoY29udGV4dCAmIFNEX0NPTlRFWFRfV1JJVEVfTVVMVElQTEVfQkxPQ0spICE9IDBVKSkKICAgICAgIHsKICAgICAgICAgZXJyb3JzdGF0ZSA9IFNETU1DX0NtZFN0b3BUcmFuc2Zlcihoc2QtPkluc3RhbmNlKTsKICAgICAgICAgaWYoZXJyb3JzdGF0ZSAhPSBIQUxfU0RfRVJST1JfTk9ORSkKICAgICAgICAgewogICAgICAgICAgIGhzZC0+RXJyb3JDb2RlIHw9IGVycm9yc3RhdGU7Ci0jaWYgKFVTRV9IQUxfU0RfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCisjaWYgZGVmaW5lZCAoVVNFX0hBTF9TRF9SRUdJU1RFUl9DQUxMQkFDS1MpICYmIChVU0VfSEFMX1NEX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxVSkKICAgICAgICAgICBoc2QtPkVycm9yQ2FsbGJhY2soaHNkKTsKICNlbHNlCiAgICAgICAgICAgSEFMX1NEX0Vycm9yQ2FsbGJhY2soaHNkKTsKLSNlbmRpZgorI2VuZGlmIC8qIFVTRV9IQUxfU0RfUkVHSVNURVJfQ0FMTEJBQ0tTICovCiAgICAgICAgIH0KICAgICAgIH0KLSAgICAgIAorCiAgICAgICAvKiBDbGVhciBhbGwgdGhlIHN0YXRpYyBmbGFncyAqLwotICAgICAgX19IQUxfU0RfQ0xFQVJfRkxBRyhoc2QsIFNESU9fU1RBVElDX0ZMQUdTKTsKLSAgICAgIAorICAgICAgX19IQUxfU0RfQ0xFQVJfRkxBRyhoc2QsIFNESU9fU1RBVElDX0RBVEFfRkxBR1MpOworCiAgICAgICBoc2QtPlN0YXRlID0gSEFMX1NEX1NUQVRFX1JFQURZOwotICAgICAgaWYoKChoc2QtPkNvbnRleHQgJiBTRF9DT05URVhUX1JFQURfU0lOR0xFX0JMT0NLKSAhPSBSRVNFVCkgfHwgKChoc2QtPkNvbnRleHQgJiBTRF9DT05URVhUX1JFQURfTVVMVElQTEVfQkxPQ0spICE9IFJFU0VUKSkKKyAgICAgIGhzZC0+Q29udGV4dCA9IFNEX0NPTlRFWFRfTk9ORTsKKyAgICAgIGlmKCgoY29udGV4dCAmIFNEX0NPTlRFWFRfUkVBRF9TSU5HTEVfQkxPQ0spICE9IDBVKSB8fCAoKGNvbnRleHQgJiBTRF9DT05URVhUX1JFQURfTVVMVElQTEVfQkxPQ0spICE9IDBVKSkKICAgICAgIHsKLSNpZiAoVVNFX0hBTF9TRF9SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkKKyNpZiBkZWZpbmVkIChVU0VfSEFMX1NEX1JFR0lTVEVSX0NBTExCQUNLUykgJiYgKFVTRV9IQUxfU0RfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDFVKQogICAgICAgICBoc2QtPlJ4Q3BsdENhbGxiYWNrKGhzZCk7CiAjZWxzZQogICAgICAgICBIQUxfU0RfUnhDcGx0Q2FsbGJhY2soaHNkKTsKLSNlbmRpZgorI2VuZGlmIC8qIFVTRV9IQUxfU0RfUkVHSVNURVJfQ0FMTEJBQ0tTICovCiAgICAgICB9CiAgICAgICBlbHNlCiAgICAgICB7Ci0jaWYgKFVTRV9IQUxfU0RfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCisjaWYgZGVmaW5lZCAoVVNFX0hBTF9TRF9SRUdJU1RFUl9DQUxMQkFDS1MpICYmIChVU0VfSEFMX1NEX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxVSkKICAgICAgICAgaHNkLT5UeENwbHRDYWxsYmFjayhoc2QpOwotI2Vsc2UgICAgICAKKyNlbHNlCiAgICAgICAgIEhBTF9TRF9UeENwbHRDYWxsYmFjayhoc2QpOwotI2VuZGlmCisjZW5kaWYgLyogVVNFX0hBTF9TRF9SRUdJU1RFUl9DQUxMQkFDS1MgKi8KICAgICAgIH0KICAgICB9Ci0gICAgZWxzZSBpZigoaHNkLT5Db250ZXh0ICYgU0RfQ09OVEVYVF9ETUEpICE9IFJFU0VUKQorICAgIGVsc2UgaWYoKGNvbnRleHQgJiBTRF9DT05URVhUX0RNQSkgIT0gMFUpCiAgICAgewotICAgICAgaWYoKGhzZC0+Q29udGV4dCAmIFNEX0NPTlRFWFRfV1JJVEVfTVVMVElQTEVfQkxPQ0spICE9IFJFU0VUKQorICAgICAgaWYoKGNvbnRleHQgJiBTRF9DT05URVhUX1dSSVRFX01VTFRJUExFX0JMT0NLKSAhPSAwVSkKICAgICAgIHsKICAgICAgICAgZXJyb3JzdGF0ZSA9IFNETU1DX0NtZFN0b3BUcmFuc2Zlcihoc2QtPkluc3RhbmNlKTsKICAgICAgICAgaWYoZXJyb3JzdGF0ZSAhPSBIQUxfU0RfRVJST1JfTk9ORSkKICAgICAgICAgewogICAgICAgICAgIGhzZC0+RXJyb3JDb2RlIHw9IGVycm9yc3RhdGU7Ci0jaWYgKFVTRV9IQUxfU0RfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCisjaWYgZGVmaW5lZCAoVVNFX0hBTF9TRF9SRUdJU1RFUl9DQUxMQkFDS1MpICYmIChVU0VfSEFMX1NEX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxVSkKICAgICAgICAgICBoc2QtPkVycm9yQ2FsbGJhY2soaHNkKTsKICNlbHNlCiAgICAgICAgICAgSEFMX1NEX0Vycm9yQ2FsbGJhY2soaHNkKTsKLSNlbmRpZgorI2VuZGlmIC8qIFVTRV9IQUxfU0RfUkVHSVNURVJfQ0FMTEJBQ0tTICovCiAgICAgICAgIH0KICAgICAgIH0KLSAgICAgIGlmKCgoaHNkLT5Db250ZXh0ICYgU0RfQ09OVEVYVF9SRUFEX1NJTkdMRV9CTE9DSykgPT0gUkVTRVQpICYmICgoaHNkLT5Db250ZXh0ICYgU0RfQ09OVEVYVF9SRUFEX01VTFRJUExFX0JMT0NLKSA9PSBSRVNFVCkpCisgICAgICBpZigoKGNvbnRleHQgJiBTRF9DT05URVhUX1JFQURfU0lOR0xFX0JMT0NLKSA9PSAwVSkgJiYgKChjb250ZXh0ICYgU0RfQ09OVEVYVF9SRUFEX01VTFRJUExFX0JMT0NLKSA9PSAwVSkpCiAgICAgICB7CiAgICAgICAgIC8qIERpc2FibGUgdGhlIERNQSB0cmFuc2ZlciBmb3IgdHJhbnNtaXQgcmVxdWVzdCBieSBzZXR0aW5nIHRoZSBETUFFTiBiaXQKICAgICAgICAgaW4gdGhlIFNEIERDVFJMIHJlZ2lzdGVyICovCiAgICAgICAgIGhzZC0+SW5zdGFuY2UtPkRDVFJMICY9ICh1aW50MzJfdCl+KCh1aW50MzJfdClTRElPX0RDVFJMX0RNQUVOKTsKLSAgICAgICAgCisKICAgICAgICAgaHNkLT5TdGF0ZSA9IEhBTF9TRF9TVEFURV9SRUFEWTsKLSAgICAgICAgCi0jaWYgKFVTRV9IQUxfU0RfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCisKKyNpZiBkZWZpbmVkIChVU0VfSEFMX1NEX1JFR0lTVEVSX0NBTExCQUNLUykgJiYgKFVTRV9IQUxfU0RfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDFVKQogICAgICAgICBoc2QtPlR4Q3BsdENhbGxiYWNrKGhzZCk7Ci0jZWxzZSAgICAgIAorI2Vsc2UKICAgICAgICAgSEFMX1NEX1R4Q3BsdENhbGxiYWNrKGhzZCk7Ci0jZW5kaWYKKyNlbmRpZiAvKiBVU0VfSEFMX1NEX1JFR0lTVEVSX0NBTExCQUNLUyAqLwogICAgICAgfQogICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgLyogTm90aGluZyB0byBkbyAqLworICAgIH0KICAgfQotICAKLSAgZWxzZSBpZihfX0hBTF9TRF9HRVRfRkxBRyhoc2QsIFNESU9fSVRfVFhGSUZPSEUpICE9IFJFU0VUKQorCisgIGVsc2UgaWYoKF9fSEFMX1NEX0dFVF9GTEFHKGhzZCwgU0RJT19GTEFHX1RYRklGT0hFKSAhPSBSRVNFVCkgJiYgKChjb250ZXh0ICYgU0RfQ09OVEVYVF9JVCkgIT0gMFUpKQogICB7Ci0gICAgX19IQUxfU0RfQ0xFQVJfRkxBRyhoc2QsIFNESU9fRkxBR19UWEZJRk9IRSk7Ci0gICAgCiAgICAgU0RfV3JpdGVfSVQoaHNkKTsKICAgfQotICAKLSAgZWxzZSBpZihfX0hBTF9TRF9HRVRfRkxBRyhoc2QsIFNESU9fSVRfUlhGSUZPSEYpICE9IFJFU0VUKQotICB7Ci0gICAgX19IQUxfU0RfQ0xFQVJfRkxBRyhoc2QsIFNESU9fRkxBR19SWEZJRk9IRik7Ci0gICAgCi0gICAgU0RfUmVhZF9JVChoc2QpOwotICB9Ci0gIAotI2lmZGVmIFNESU9fU1RBX1NUQklURVJSCi0gIGVsc2UgaWYoX19IQUxfU0RfR0VUX0ZMQUcoaHNkLCBTRElPX0lUX0RDUkNGQUlMIHwgU0RJT19JVF9EVElNRU9VVCB8IFNESU9fSVRfUlhPVkVSUiB8IFNESU9fSVRfVFhVTkRFUlIgfCBTRElPX0lUX1NUQklURVJSKSAhPSBSRVNFVCkKKworI2lmIGRlZmluZWQoU0RJT19TVEFfU1RCSVRFUlIpCisgIGVsc2UgaWYoX19IQUxfU0RfR0VUX0ZMQUcoaHNkLCBTRElPX0ZMQUdfRENSQ0ZBSUwgfCBTRElPX0ZMQUdfRFRJTUVPVVQgfCBTRElPX0ZMQUdfUlhPVkVSUiB8IFNESU9fRkxBR19UWFVOREVSUiB8IFNESU9fRkxBR19TVEJJVEVSUikgIT0gUkVTRVQpCisjZWxzZSAvKiBTRElPX1NUQV9TVEJJVEVSUiBub3QgZGVmaW5lZCAqLworICBlbHNlIGlmKF9fSEFMX1NEX0dFVF9GTEFHKGhzZCwgU0RJT19GTEFHX0RDUkNGQUlMIHwgU0RJT19GTEFHX0RUSU1FT1VUIHwgU0RJT19GTEFHX1JYT1ZFUlIgfCBTRElPX0ZMQUdfVFhVTkRFUlIpICE9IFJFU0VUKQorI2VuZGlmIC8qIFNESU9fU1RBX1NUQklURVJSICovCiAgIHsKICAgICAvKiBTZXQgRXJyb3IgY29kZSAqLwotICAgIGlmKF9fSEFMX1NEX0dFVF9GTEFHKGhzZCwgU0RJT19JVF9EQ1JDRkFJTCkgIT0gUkVTRVQpCisgICAgaWYoX19IQUxfU0RfR0VUX0ZMQUcoaHNkLCBTRElPX0ZMQUdfRENSQ0ZBSUwpICE9IFJFU0VUKQogICAgIHsKLSAgICAgIGhzZC0+RXJyb3JDb2RlIHw9IEhBTF9TRF9FUlJPUl9EQVRBX0NSQ19GQUlMOyAKKyAgICAgIGhzZC0+RXJyb3JDb2RlIHw9IEhBTF9TRF9FUlJPUl9EQVRBX0NSQ19GQUlMOwogICAgIH0KLSAgICBpZihfX0hBTF9TRF9HRVRfRkxBRyhoc2QsIFNESU9fSVRfRFRJTUVPVVQpICE9IFJFU0VUKQotICAgIHsKLSAgICAgIGhzZC0+RXJyb3JDb2RlIHw9IEhBTF9TRF9FUlJPUl9EQVRBX1RJTUVPVVQ7IAotICAgIH0KLSAgICBpZihfX0hBTF9TRF9HRVRfRkxBRyhoc2QsIFNESU9fSVRfUlhPVkVSUikgIT0gUkVTRVQpCi0gICAgewotICAgICAgaHNkLT5FcnJvckNvZGUgfD0gSEFMX1NEX0VSUk9SX1JYX09WRVJSVU47IAotICAgIH0KLSAgICBpZihfX0hBTF9TRF9HRVRfRkxBRyhoc2QsIFNESU9fSVRfVFhVTkRFUlIpICE9IFJFU0VUKQotICAgIHsKLSAgICAgIGhzZC0+RXJyb3JDb2RlIHw9IEhBTF9TRF9FUlJPUl9UWF9VTkRFUlJVTjsgCi0gICAgfQotICAgIGlmKF9fSEFMX1NEX0dFVF9GTEFHKGhzZCwgU0RJT19JVF9TVEJJVEVSUikgIT0gUkVTRVQpCisgICAgaWYoX19IQUxfU0RfR0VUX0ZMQUcoaHNkLCBTRElPX0ZMQUdfRFRJTUVPVVQpICE9IFJFU0VUKQogICAgIHsKICAgICAgIGhzZC0+RXJyb3JDb2RlIHw9IEhBTF9TRF9FUlJPUl9EQVRBX1RJTUVPVVQ7CiAgICAgfQorICAgIGlmKF9fSEFMX1NEX0dFVF9GTEFHKGhzZCwgU0RJT19GTEFHX1JYT1ZFUlIpICE9IFJFU0VUKQorICAgIHsKKyAgICAgIGhzZC0+RXJyb3JDb2RlIHw9IEhBTF9TRF9FUlJPUl9SWF9PVkVSUlVOOworICAgIH0KKyAgICBpZihfX0hBTF9TRF9HRVRfRkxBRyhoc2QsIFNESU9fRkxBR19UWFVOREVSUikgIT0gUkVTRVQpCisgICAgeworICAgICAgaHNkLT5FcnJvckNvZGUgfD0gSEFMX1NEX0VSUk9SX1RYX1VOREVSUlVOOworICAgIH0KKyNpZiBkZWZpbmVkKFNESU9fU1RBX1NUQklURVJSKQorICAgIGlmKF9fSEFMX1NEX0dFVF9GTEFHKGhzZCwgU0RJT19GTEFHX1NUQklURVJSKSAhPSBSRVNFVCkKKyAgICB7CisgICAgICBoc2QtPkVycm9yQ29kZSB8PSBIQUxfU0RfRVJST1JfREFUQV9USU1FT1VUOworICAgIH0KKyNlbmRpZiAvKiBTRElPX1NUQV9TVEJJVEVSUiAqLwogCisjaWYgZGVmaW5lZChTRElPX1NUQV9TVEJJVEVSUikKICAgICAvKiBDbGVhciBBbGwgZmxhZ3MgKi8KLSAgICBfX0hBTF9TRF9DTEVBUl9GTEFHKGhzZCwgU0RJT19TVEFUSUNfRkxBR1MgfCBTRElPX0ZMQUdfU1RCSVRFUlIpOwotICAgIAorICAgIF9fSEFMX1NEX0NMRUFSX0ZMQUcoaHNkLCBTRElPX1NUQVRJQ19EQVRBX0ZMQUdTIHwgU0RJT19GTEFHX1NUQklURVJSKTsKKwogICAgIC8qIERpc2FibGUgYWxsIGludGVycnVwdHMgKi8KICAgICBfX0hBTF9TRF9ESVNBQkxFX0lUKGhzZCwgU0RJT19JVF9EQVRBRU5EIHwgU0RJT19JVF9EQ1JDRkFJTCB8IFNESU9fSVRfRFRJTUVPVVR8XAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRElPX0lUX1RYVU5ERVJSfCBTRElPX0lUX1JYT1ZFUlIgfFNESU9fSVRfU1RCSVRFUlIpOwotICAgIAotICAgIGlmKChoc2QtPkNvbnRleHQgJiBTRF9DT05URVhUX0RNQSkgIT0gUkVTRVQpCi0gICAgewotICAgICAgLyogQWJvcnQgdGhlIFNEIERNQSBTdHJlYW1zICovCi0gICAgICBpZihoc2QtPmhkbWF0eCAhPSBOVUxMKQotICAgICAgewotICAgICAgICAvKiBTZXQgdGhlIERNQSBUeCBhYm9ydCBjYWxsYmFjayAqLwotICAgICAgICBoc2QtPmhkbWF0eC0+WGZlckFib3J0Q2FsbGJhY2sgPSBTRF9ETUFUeEFib3J0OwotICAgICAgICAvKiBBYm9ydCBETUEgaW4gSVQgbW9kZSAqLwotICAgICAgICBpZihIQUxfRE1BX0Fib3J0X0lUKGhzZC0+aGRtYXR4KSAhPSBIQUxfT0spCi0gICAgICAgIHsKLSAgICAgICAgICBTRF9ETUFUeEFib3J0KGhzZC0+aGRtYXR4KTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgZWxzZSBpZihoc2QtPmhkbWFyeCAhPSBOVUxMKQotICAgICAgewotICAgICAgICAvKiBTZXQgdGhlIERNQSBSeCBhYm9ydCBjYWxsYmFjayAqLwotICAgICAgICBoc2QtPmhkbWFyeC0+WGZlckFib3J0Q2FsbGJhY2sgPSBTRF9ETUFSeEFib3J0OwotICAgICAgICAvKiBBYm9ydCBETUEgaW4gSVQgbW9kZSAqLwotICAgICAgICBpZihIQUxfRE1BX0Fib3J0X0lUKGhzZC0+aGRtYXJ4KSAhPSBIQUxfT0spCi0gICAgICAgIHsKLSAgICAgICAgICBTRF9ETUFSeEFib3J0KGhzZC0+aGRtYXJ4KTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBoc2QtPkVycm9yQ29kZSA9IEhBTF9TRF9FUlJPUl9OT05FOwotICAgICAgICBoc2QtPlN0YXRlID0gSEFMX1NEX1NUQVRFX1JFQURZOwotI2lmIChVU0VfSEFMX1NEX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxKQotICAgICAgICBoc2QtPkFib3J0Q3BsdENhbGxiYWNrKGhzZCk7Ci0jZWxzZQotICAgICAgICBIQUxfU0RfQWJvcnRDYWxsYmFjayhoc2QpOwotI2VuZGlmCi0gICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYoKGhzZC0+Q29udGV4dCAmIFNEX0NPTlRFWFRfSVQpICE9IFJFU0VUKQotICAgIHsKLSAgICAgIC8qIFNldCB0aGUgU0Qgc3RhdGUgdG8gcmVhZHkgdG8gYmUgYWJsZSB0byBzdGFydCBhZ2FpbiB0aGUgcHJvY2VzcyAqLwotICAgICAgaHNkLT5TdGF0ZSA9IEhBTF9TRF9TVEFURV9SRUFEWTsKLSNpZiAoVVNFX0hBTF9TRF9SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkKLSAgICAgIGhzZC0+RXJyb3JDYWxsYmFjayhoc2QpOwotI2Vsc2UKLSAgICAgIEhBTF9TRF9FcnJvckNhbGxiYWNrKGhzZCk7Ci0jZW5kaWYKLSAgICB9Ci0gIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0RJT19JVF9UWFVOREVSUnwgU0RJT19JVF9SWE9WRVJSIHwgU0RJT19JVF9TVEJJVEVSUik7CiAjZWxzZSAvKiBTRElPX1NUQV9TVEJJVEVSUiBub3QgZGVmaW5lZCAqLwotICBlbHNlIGlmKF9fSEFMX1NEX0dFVF9GTEFHKGhzZCwgU0RJT19JVF9EQ1JDRkFJTCB8IFNESU9fSVRfRFRJTUVPVVQgfCBTRElPX0lUX1JYT1ZFUlIgfCBTRElPX0lUX1RYVU5ERVJSKSAhPSBSRVNFVCkKLSAgewotICAgIC8qIFNldCBFcnJvciBjb2RlICovCi0gICAgaWYoX19IQUxfU0RfR0VUX0ZMQUcoaHNkLCBTRElPX0lUX0RDUkNGQUlMKSAhPSBSRVNFVCkKLSAgICB7Ci0gICAgICBoc2QtPkVycm9yQ29kZSB8PSBIQUxfU0RfRVJST1JfREFUQV9DUkNfRkFJTDsgCi0gICAgfQotICAgIGlmKF9fSEFMX1NEX0dFVF9GTEFHKGhzZCwgU0RJT19JVF9EVElNRU9VVCkgIT0gUkVTRVQpCi0gICAgewotICAgICAgaHNkLT5FcnJvckNvZGUgfD0gSEFMX1NEX0VSUk9SX0RBVEFfVElNRU9VVDsgCi0gICAgfQotICAgIGlmKF9fSEFMX1NEX0dFVF9GTEFHKGhzZCwgU0RJT19JVF9SWE9WRVJSKSAhPSBSRVNFVCkKLSAgICB7Ci0gICAgICBoc2QtPkVycm9yQ29kZSB8PSBIQUxfU0RfRVJST1JfUlhfT1ZFUlJVTjsgCi0gICAgfQotICAgIGlmKF9fSEFMX1NEX0dFVF9GTEFHKGhzZCwgU0RJT19JVF9UWFVOREVSUikgIT0gUkVTRVQpCi0gICAgewotICAgICAgaHNkLT5FcnJvckNvZGUgfD0gSEFMX1NEX0VSUk9SX1RYX1VOREVSUlVOOyAKLSAgICB9Ci0KICAgICAvKiBDbGVhciBBbGwgZmxhZ3MgKi8KLSAgICBfX0hBTF9TRF9DTEVBUl9GTEFHKGhzZCwgU0RJT19TVEFUSUNfRkxBR1MpOwotICAgIAorICAgIF9fSEFMX1NEX0NMRUFSX0ZMQUcoaHNkLCBTRElPX1NUQVRJQ19EQVRBX0ZMQUdTKTsKKwogICAgIC8qIERpc2FibGUgYWxsIGludGVycnVwdHMgKi8KICAgICBfX0hBTF9TRF9ESVNBQkxFX0lUKGhzZCwgU0RJT19JVF9EQVRBRU5EIHwgU0RJT19JVF9EQ1JDRkFJTCB8IFNESU9fSVRfRFRJTUVPVVR8XAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRElPX0lUX1RYVU5ERVJSfCBTRElPX0lUX1JYT1ZFUlIpOwotICAgIAotICAgIGlmKChoc2QtPkNvbnRleHQgJiBTRF9DT05URVhUX0RNQSkgIT0gUkVTRVQpCisjZW5kaWYgLyogU0RJT19TVEFfU1RCSVRFUlIgKi8KKworICAgIGhzZC0+RXJyb3JDb2RlIHw9IFNETU1DX0NtZFN0b3BUcmFuc2Zlcihoc2QtPkluc3RhbmNlKTsKKworICAgIGlmKChjb250ZXh0ICYgU0RfQ09OVEVYVF9JVCkgIT0gMFUpCiAgICAgewotICAgICAgLyogQWJvcnQgdGhlIFNEIERNQSBTdHJlYW1zICovCi0gICAgICBpZihoc2QtPmhkbWF0eCAhPSBOVUxMKQorICAgICAgLyogU2V0IHRoZSBTRCBzdGF0ZSB0byByZWFkeSB0byBiZSBhYmxlIHRvIHN0YXJ0IGFnYWluIHRoZSBwcm9jZXNzICovCisgICAgICBoc2QtPlN0YXRlID0gSEFMX1NEX1NUQVRFX1JFQURZOworICAgICAgaHNkLT5Db250ZXh0ID0gU0RfQ09OVEVYVF9OT05FOworI2lmIGRlZmluZWQgKFVTRV9IQUxfU0RfUkVHSVNURVJfQ0FMTEJBQ0tTKSAmJiAoVVNFX0hBTF9TRF9SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMVUpCisgICAgICBoc2QtPkVycm9yQ2FsbGJhY2soaHNkKTsKKyNlbHNlCisgICAgICBIQUxfU0RfRXJyb3JDYWxsYmFjayhoc2QpOworI2VuZGlmIC8qIFVTRV9IQUxfU0RfUkVHSVNURVJfQ0FMTEJBQ0tTICovCisgICAgfQorICAgIGVsc2UgaWYoKGNvbnRleHQgJiBTRF9DT05URVhUX0RNQSkgIT0gMFUpCisgICAgeworICAgICAgLyogQWJvcnQgdGhlIFNEIERNQSBjaGFubmVsICovCisgICAgICBpZigoKGNvbnRleHQgJiBTRF9DT05URVhUX1dSSVRFX1NJTkdMRV9CTE9DSykgIT0gMFUpIHx8ICgoY29udGV4dCAmIFNEX0NPTlRFWFRfV1JJVEVfTVVMVElQTEVfQkxPQ0spICE9IDBVKSkKICAgICAgIHsKICAgICAgICAgLyogU2V0IHRoZSBETUEgVHggYWJvcnQgY2FsbGJhY2sgKi8KICAgICAgICAgaHNkLT5oZG1hdHgtPlhmZXJBYm9ydENhbGxiYWNrID0gU0RfRE1BVHhBYm9ydDsKQEAgLTE2NzgsNyArMTczMSw3IEBACiAgICAgICAgICAgU0RfRE1BVHhBYm9ydChoc2QtPmhkbWF0eCk7CiAgICAgICAgIH0KICAgICAgIH0KLSAgICAgIGVsc2UgaWYoaHNkLT5oZG1hcnggIT0gTlVMTCkKKyAgICAgIGVsc2UgaWYoKChjb250ZXh0ICYgU0RfQ09OVEVYVF9SRUFEX1NJTkdMRV9CTE9DSykgIT0gMFUpIHx8ICgoY29udGV4dCAmIFNEX0NPTlRFWFRfUkVBRF9NVUxUSVBMRV9CTE9DSykgIT0gMFUpKQogICAgICAgewogICAgICAgICAvKiBTZXQgdGhlIERNQSBSeCBhYm9ydCBjYWxsYmFjayAqLwogICAgICAgICBoc2QtPmhkbWFyeC0+WGZlckFib3J0Q2FsbGJhY2sgPSBTRF9ETUFSeEFib3J0OwpAQCAtMTY5MiwyMiArMTc0NSwyOCBAQAogICAgICAgewogICAgICAgICBoc2QtPkVycm9yQ29kZSA9IEhBTF9TRF9FUlJPUl9OT05FOwogICAgICAgICBoc2QtPlN0YXRlID0gSEFMX1NEX1NUQVRFX1JFQURZOworICAgICAgICBoc2QtPkNvbnRleHQgPSBTRF9DT05URVhUX05PTkU7CisjaWYgZGVmaW5lZCAoVVNFX0hBTF9TRF9SRUdJU1RFUl9DQUxMQkFDS1MpICYmIChVU0VfSEFMX1NEX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxVSkKKyAgICAgICAgaHNkLT5BYm9ydENwbHRDYWxsYmFjayhoc2QpOworI2Vsc2UKICAgICAgICAgSEFMX1NEX0Fib3J0Q2FsbGJhY2soaHNkKTsKKyNlbmRpZiAvKiBVU0VfSEFMX1NEX1JFR0lTVEVSX0NBTExCQUNLUyAqLwogICAgICAgfQogICAgIH0KLSAgICBlbHNlIGlmKChoc2QtPkNvbnRleHQgJiBTRF9DT05URVhUX0lUKSAhPSBSRVNFVCkKKyAgICBlbHNlCiAgICAgewotICAgICAgLyogU2V0IHRoZSBTRCBzdGF0ZSB0byByZWFkeSB0byBiZSBhYmxlIHRvIHN0YXJ0IGFnYWluIHRoZSBwcm9jZXNzICovCi0gICAgICBoc2QtPlN0YXRlID0gSEFMX1NEX1NUQVRFX1JFQURZOwotICAgICAgSEFMX1NEX0Vycm9yQ2FsbGJhY2soaHNkKTsKKyAgICAgIC8qIE5vdGhpbmcgdG8gZG8gKi8KICAgICB9CiAgIH0KLSNlbmRpZgorICBlbHNlCisgIHsKKyAgICAvKiBOb3RoaW5nIHRvIGRvICovCisgIH0KIH0KIAogLyoqCiAgICogQGJyaWVmIHJldHVybiB0aGUgU0Qgc3RhdGUKLSAgKiBAcGFyYW0gaHNkIFBvaW50ZXIgdG8gc2QgaGFuZGxlCisgICogQHBhcmFtIGhzZDogUG9pbnRlciB0byBzZCBoYW5kbGUKICAgKiBAcmV0dmFsIEhBTCBzdGF0ZQogICAqLwogSEFMX1NEX1N0YXRlVHlwZURlZiBIQUxfU0RfR2V0U3RhdGUoU0RfSGFuZGxlVHlwZURlZiAqaHNkKQpAQCAtMTcxNyw3ICsxNzc2LDcgQEAKIAogLyoqCiAqIEBicmllZiAgUmV0dXJuIHRoZSBTRCBlcnJvciBjb2RlCi0qIEBwYXJhbSAgaHNkICBQb2ludGVyIHRvIGEgU0RfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucworKiBAcGFyYW0gIGhzZCA6IFBvaW50ZXIgdG8gYSBTRF9IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCiAgICogICAgICAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uLgogKiBAcmV0dmFsIFNEIEVycm9yIENvZGUKICovCkBAIC0xNzI4LDEwICsxNzg3LDEwIEBACiAKIC8qKgogICAqIEBicmllZiBUeCBUcmFuc2ZlciBjb21wbGV0ZWQgY2FsbGJhY2tzCi0gICogQHBhcmFtIGhzZCBQb2ludGVyIHRvIFNEIGhhbmRsZQorICAqIEBwYXJhbSBoc2Q6IFBvaW50ZXIgdG8gU0QgaGFuZGxlCiAgICogQHJldHZhbCBOb25lCiAgICovCi0gX193ZWFrIHZvaWQgSEFMX1NEX1R4Q3BsdENhbGxiYWNrKFNEX0hhbmRsZVR5cGVEZWYgKmhzZCkKK19fd2VhayB2b2lkIEhBTF9TRF9UeENwbHRDYWxsYmFjayhTRF9IYW5kbGVUeXBlRGVmICpoc2QpCiB7CiAgIC8qIFByZXZlbnQgdW51c2VkIGFyZ3VtZW50KHMpIGNvbXBpbGF0aW9uIHdhcm5pbmcgKi8KICAgVU5VU0VEKGhzZCk7CkBAIC0xNzQzLDE0ICsxODAyLDE0IEBACiAKIC8qKgogICAqIEBicmllZiBSeCBUcmFuc2ZlciBjb21wbGV0ZWQgY2FsbGJhY2tzCi0gICogQHBhcmFtIGhzZCBQb2ludGVyIFNEIGhhbmRsZQorICAqIEBwYXJhbSBoc2Q6IFBvaW50ZXIgU0QgaGFuZGxlCiAgICogQHJldHZhbCBOb25lCiAgICovCiBfX3dlYWsgdm9pZCBIQUxfU0RfUnhDcGx0Q2FsbGJhY2soU0RfSGFuZGxlVHlwZURlZiAqaHNkKQogewogICAvKiBQcmV2ZW50IHVudXNlZCBhcmd1bWVudChzKSBjb21waWxhdGlvbiB3YXJuaW5nICovCiAgIFVOVVNFRChoc2QpOwotIAorCiAgIC8qIE5PVEUgOiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBub3QgYmUgbW9kaWZpZWQsIHdoZW4gdGhlIGNhbGxiYWNrIGlzIG5lZWRlZCwKICAgICAgICAgICAgIHRoZSBIQUxfU0RfUnhDcGx0Q2FsbGJhY2sgY2FuIGJlIGltcGxlbWVudGVkIGluIHRoZSB1c2VyIGZpbGUKICAgICovCkBAIC0xNzU4LDUxICsxODE3LDUxIEBACiAKIC8qKgogICAqIEBicmllZiBTRCBlcnJvciBjYWxsYmFja3MKLSAgKiBAcGFyYW0gaHNkIFBvaW50ZXIgU0QgaGFuZGxlCisgICogQHBhcmFtIGhzZDogUG9pbnRlciBTRCBoYW5kbGUKICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KIF9fd2VhayB2b2lkIEhBTF9TRF9FcnJvckNhbGxiYWNrKFNEX0hhbmRsZVR5cGVEZWYgKmhzZCkKIHsKICAgLyogUHJldmVudCB1bnVzZWQgYXJndW1lbnQocykgY29tcGlsYXRpb24gd2FybmluZyAqLwogICBVTlVTRUQoaHNkKTsKLSAKKwogICAvKiBOT1RFIDogVGhpcyBmdW5jdGlvbiBzaG91bGQgbm90IGJlIG1vZGlmaWVkLCB3aGVuIHRoZSBjYWxsYmFjayBpcyBuZWVkZWQsCiAgICAgICAgICAgICB0aGUgSEFMX1NEX0Vycm9yQ2FsbGJhY2sgY2FuIGJlIGltcGxlbWVudGVkIGluIHRoZSB1c2VyIGZpbGUKLSAgICovIAorICAgKi8KIH0KIAogLyoqCiAgICogQGJyaWVmIFNEIEFib3J0IGNhbGxiYWNrcwotICAqIEBwYXJhbSBoc2QgUG9pbnRlciBTRCBoYW5kbGUKKyAgKiBAcGFyYW0gaHNkOiBQb2ludGVyIFNEIGhhbmRsZQogICAqIEByZXR2YWwgTm9uZQogICAqLwogX193ZWFrIHZvaWQgSEFMX1NEX0Fib3J0Q2FsbGJhY2soU0RfSGFuZGxlVHlwZURlZiAqaHNkKQogewogICAvKiBQcmV2ZW50IHVudXNlZCBhcmd1bWVudChzKSBjb21waWxhdGlvbiB3YXJuaW5nICovCiAgIFVOVVNFRChoc2QpOwotIAorCiAgIC8qIE5PVEUgOiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBub3QgYmUgbW9kaWZpZWQsIHdoZW4gdGhlIGNhbGxiYWNrIGlzIG5lZWRlZCwKLSAgICAgICAgICAgIHRoZSBIQUxfU0RfRXJyb3JDYWxsYmFjayBjYW4gYmUgaW1wbGVtZW50ZWQgaW4gdGhlIHVzZXIgZmlsZQotICAgKi8gCisgICAgICAgICAgICB0aGUgSEFMX1NEX0Fib3J0Q2FsbGJhY2sgY2FuIGJlIGltcGxlbWVudGVkIGluIHRoZSB1c2VyIGZpbGUKKyAgICovCiB9CiAKLSNpZiAoVVNFX0hBTF9TRF9SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkKKyNpZiBkZWZpbmVkIChVU0VfSEFMX1NEX1JFR0lTVEVSX0NBTExCQUNLUykgJiYgKFVTRV9IQUxfU0RfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDFVKQogLyoqCiAgICogQGJyaWVmICBSZWdpc3RlciBhIFVzZXIgU0QgQ2FsbGJhY2sKLSAgKiAgICAgICAgIFRvIGJlIHVzZWQgaW5zdGVhZCBvZiB0aGUgd2VhayAoc3VyY2hhcmdlZCkgcHJlZGVmaW5lZCBjYWxsYmFjayAKKyAgKiAgICAgICAgIFRvIGJlIHVzZWQgaW5zdGVhZCBvZiB0aGUgd2VhayAoc3VyY2hhcmdlZCkgcHJlZGVmaW5lZCBjYWxsYmFjawogICAqIEBwYXJhbSBoc2QgOiBTRCBoYW5kbGUKLSAgKiBAcGFyYW0gQ2FsbGJhY2tJZCA6IElkIG9mIHRoZSBjYWxsYmFjayB0byBiZSByZWdpc3RlcmVkCisgICogQHBhcmFtIENhbGxiYWNrSUQgOiBJRCBvZiB0aGUgY2FsbGJhY2sgdG8gYmUgcmVnaXN0ZXJlZAogICAqICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICAqICAgICAgICAgIEBhcmcgQHJlZiBIQUxfU0RfVFhfQ1BMVF9DQl9JRCAgICBTRCBUeCBDb21wbGV0ZSBDYWxsYmFjayBJRAogICAqICAgICAgICAgIEBhcmcgQHJlZiBIQUxfU0RfUlhfQ1BMVF9DQl9JRCAgICBTRCBSeCBDb21wbGV0ZSBDYWxsYmFjayBJRAogICAqICAgICAgICAgIEBhcmcgQHJlZiBIQUxfU0RfRVJST1JfQ0JfSUQgICAgICBTRCBFcnJvciBDYWxsYmFjayBJRAogICAqICAgICAgICAgIEBhcmcgQHJlZiBIQUxfU0RfQUJPUlRfQ0JfSUQgICAgICBTRCBBYm9ydCBDYWxsYmFjayBJRAotICAqICAgICAgICAgIEBhcmcgQHJlZiBIQUxfU0RfTVNQX0lOSVRfQ0JfSUQgICBTRCBNc3BJbml0IENhbGxiYWNrIElEIAotICAqICAgICAgICAgIEBhcmcgQHJlZiBIQUxfU0RfTVNQX0RFSU5JVF9DQl9JRCBTRCBNc3BEZUluaXQgQ2FsbGJhY2sgSUQgIAorICAqICAgICAgICAgIEBhcmcgQHJlZiBIQUxfU0RfTVNQX0lOSVRfQ0JfSUQgICBTRCBNc3BJbml0IENhbGxiYWNrIElECisgICogICAgICAgICAgQGFyZyBAcmVmIEhBTF9TRF9NU1BfREVJTklUX0NCX0lEIFNEIE1zcERlSW5pdCBDYWxsYmFjayBJRAogICAqIEBwYXJhbSBwQ2FsbGJhY2sgOiBwb2ludGVyIHRvIHRoZSBDYWxsYmFjayBmdW5jdGlvbgogICAqIEByZXR2YWwgc3RhdHVzCiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfU0RfUmVnaXN0ZXJDYWxsYmFjayhTRF9IYW5kbGVUeXBlRGVmICpoc2QsIEhBTF9TRF9DYWxsYmFja0lEVHlwZURlZiBDYWxsYmFja0lkLCBwU0RfQ2FsbGJhY2tUeXBlRGVmIHBDYWxsYmFjaykKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9TRF9SZWdpc3RlckNhbGxiYWNrKFNEX0hhbmRsZVR5cGVEZWYgKmhzZCwgSEFMX1NEX0NhbGxiYWNrSURUeXBlRGVmIENhbGxiYWNrSUQsIHBTRF9DYWxsYmFja1R5cGVEZWYgcENhbGxiYWNrKQogewogICBIQUxfU3RhdHVzVHlwZURlZiBzdGF0dXMgPSBIQUxfT0s7CiAKQEAgLTE4MTUsMTAgKzE4NzQsMTAgQEAKIAogICAvKiBQcm9jZXNzIGxvY2tlZCAqLwogICBfX0hBTF9MT0NLKGhzZCk7Ci0gIAorCiAgIGlmKGhzZC0+U3RhdGUgPT0gSEFMX1NEX1NUQVRFX1JFQURZKQogICB7Ci0gICAgc3dpdGNoIChDYWxsYmFja0lkKQorICAgIHN3aXRjaCAoQ2FsbGJhY2tJRCkKICAgICB7CiAgICAgY2FzZSBIQUxfU0RfVFhfQ1BMVF9DQl9JRCA6CiAgICAgICBoc2QtPlR4Q3BsdENhbGxiYWNrID0gcENhbGxiYWNrOwpAQCAtMTg0MCw3ICsxODk5LDcgQEAKICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQgOgogICAgICAgLyogVXBkYXRlIHRoZSBlcnJvciBjb2RlICovCi0gICAgICBoc2QtPkVycm9yQ29kZSB8PSBIQUxfU0RfRVJST1JfSU5WQUxJRF9DQUxMQkFDSzsgCisgICAgICBoc2QtPkVycm9yQ29kZSB8PSBIQUxfU0RfRVJST1JfSU5WQUxJRF9DQUxMQkFDSzsKICAgICAgIC8qIHVwZGF0ZSByZXR1cm4gc3RhdHVzICovCiAgICAgICBzdGF0dXMgPSAgSEFMX0VSUk9SOwogICAgICAgYnJlYWs7CkBAIC0xODQ4LDcgKzE5MDcsNyBAQAogICB9CiAgIGVsc2UgaWYgKGhzZC0+U3RhdGUgPT0gSEFMX1NEX1NUQVRFX1JFU0VUKQogICB7Ci0gICAgc3dpdGNoIChDYWxsYmFja0lkKQorICAgIHN3aXRjaCAoQ2FsbGJhY2tJRCkKICAgICB7CiAgICAgY2FzZSBIQUxfU0RfTVNQX0lOSVRfQ0JfSUQgOgogICAgICAgaHNkLT5Nc3BJbml0Q2FsbGJhY2sgPSBwQ2FsbGJhY2s7CkBAIC0xODU4LDcgKzE5MTcsNyBAQAogICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdCA6CiAgICAgICAvKiBVcGRhdGUgdGhlIGVycm9yIGNvZGUgKi8KLSAgICAgIGhzZC0+RXJyb3JDb2RlIHw9IEhBTF9TRF9FUlJPUl9JTlZBTElEX0NBTExCQUNLOyAKKyAgICAgIGhzZC0+RXJyb3JDb2RlIHw9IEhBTF9TRF9FUlJPUl9JTlZBTElEX0NBTExCQUNLOwogICAgICAgLyogdXBkYXRlIHJldHVybiBzdGF0dXMgKi8KICAgICAgIHN0YXR1cyA9ICBIQUxfRVJST1I7CiAgICAgICBicmVhazsKQEAgLTE4NjcsNyArMTkyNiw3IEBACiAgIGVsc2UKICAgewogICAgIC8qIFVwZGF0ZSB0aGUgZXJyb3IgY29kZSAqLwotICAgIGhzZC0+RXJyb3JDb2RlIHw9IEhBTF9TRF9FUlJPUl9JTlZBTElEX0NBTExCQUNLOyAKKyAgICBoc2QtPkVycm9yQ29kZSB8PSBIQUxfU0RfRVJST1JfSU5WQUxJRF9DQUxMQkFDSzsKICAgICAvKiB1cGRhdGUgcmV0dXJuIHN0YXR1cyAqLwogICAgIHN0YXR1cyA9ICBIQUxfRVJST1I7CiAgIH0KQEAgLTE4NzksMjggKzE5MzgsMjggQEAKIAogLyoqCiAgICogQGJyaWVmICBVbnJlZ2lzdGVyIGEgVXNlciBTRCBDYWxsYmFjawotICAqICAgICAgICAgU0QgQ2FsbGJhY2sgaXMgcmVkaXJlY3RlZCB0byB0aGUgd2VhayAoc3VyY2hhcmdlZCkgcHJlZGVmaW5lZCBjYWxsYmFjayAKKyAgKiAgICAgICAgIFNEIENhbGxiYWNrIGlzIHJlZGlyZWN0ZWQgdG8gdGhlIHdlYWsgKHN1cmNoYXJnZWQpIHByZWRlZmluZWQgY2FsbGJhY2sKICAgKiBAcGFyYW0gaHNkIDogU0QgaGFuZGxlCi0gICogQHBhcmFtIENhbGxiYWNrSWQgOiBJZCBvZiB0aGUgY2FsbGJhY2sgdG8gYmUgdW5yZWdpc3RlcmVkCisgICogQHBhcmFtIENhbGxiYWNrSUQgOiBJRCBvZiB0aGUgY2FsbGJhY2sgdG8gYmUgdW5yZWdpc3RlcmVkCiAgICogICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAgICogICAgICAgICAgQGFyZyBAcmVmIEhBTF9TRF9UWF9DUExUX0NCX0lEICAgIFNEIFR4IENvbXBsZXRlIENhbGxiYWNrIElECiAgICogICAgICAgICAgQGFyZyBAcmVmIEhBTF9TRF9SWF9DUExUX0NCX0lEICAgIFNEIFJ4IENvbXBsZXRlIENhbGxiYWNrIElECiAgICogICAgICAgICAgQGFyZyBAcmVmIEhBTF9TRF9FUlJPUl9DQl9JRCAgICAgIFNEIEVycm9yIENhbGxiYWNrIElECiAgICogICAgICAgICAgQGFyZyBAcmVmIEhBTF9TRF9BQk9SVF9DQl9JRCAgICAgIFNEIEFib3J0IENhbGxiYWNrIElECi0gICogICAgICAgICAgQGFyZyBAcmVmIEhBTF9TRF9NU1BfSU5JVF9DQl9JRCAgIFNEIE1zcEluaXQgQ2FsbGJhY2sgSUQgCi0gICogICAgICAgICAgQGFyZyBAcmVmIEhBTF9TRF9NU1BfREVJTklUX0NCX0lEIFNEIE1zcERlSW5pdCBDYWxsYmFjayBJRCAgCisgICogICAgICAgICAgQGFyZyBAcmVmIEhBTF9TRF9NU1BfSU5JVF9DQl9JRCAgIFNEIE1zcEluaXQgQ2FsbGJhY2sgSUQKKyAgKiAgICAgICAgICBAYXJnIEByZWYgSEFMX1NEX01TUF9ERUlOSVRfQ0JfSUQgU0QgTXNwRGVJbml0IENhbGxiYWNrIElECiAgICogQHJldHZhbCBzdGF0dXMKICAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9TRF9VblJlZ2lzdGVyQ2FsbGJhY2soU0RfSGFuZGxlVHlwZURlZiAqaHNkLCBIQUxfU0RfQ2FsbGJhY2tJRFR5cGVEZWYgQ2FsbGJhY2tJZCkKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9TRF9VblJlZ2lzdGVyQ2FsbGJhY2soU0RfSGFuZGxlVHlwZURlZiAqaHNkLCBIQUxfU0RfQ2FsbGJhY2tJRFR5cGVEZWYgQ2FsbGJhY2tJRCkKIHsKICAgSEFMX1N0YXR1c1R5cGVEZWYgc3RhdHVzID0gSEFMX09LOwogCiAgIC8qIFByb2Nlc3MgbG9ja2VkICovCiAgIF9fSEFMX0xPQ0soaHNkKTsKLSAgCisKICAgaWYoaHNkLT5TdGF0ZSA9PSBIQUxfU0RfU1RBVEVfUkVBRFkpCiAgIHsKLSAgICBzd2l0Y2ggKENhbGxiYWNrSWQpCisgICAgc3dpdGNoIChDYWxsYmFja0lEKQogICAgIHsKICAgICBjYXNlIEhBTF9TRF9UWF9DUExUX0NCX0lEIDoKICAgICAgIGhzZC0+VHhDcGx0Q2FsbGJhY2sgPSBIQUxfU0RfVHhDcGx0Q2FsbGJhY2s7CkBAIC0xOTIyLDcgKzE5ODEsNyBAQAogICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdCA6CiAgICAgICAvKiBVcGRhdGUgdGhlIGVycm9yIGNvZGUgKi8KLSAgICAgIGhzZC0+RXJyb3JDb2RlIHw9IEhBTF9TRF9FUlJPUl9JTlZBTElEX0NBTExCQUNLOyAKKyAgICAgIGhzZC0+RXJyb3JDb2RlIHw9IEhBTF9TRF9FUlJPUl9JTlZBTElEX0NBTExCQUNLOwogICAgICAgLyogdXBkYXRlIHJldHVybiBzdGF0dXMgKi8KICAgICAgIHN0YXR1cyA9ICBIQUxfRVJST1I7CiAgICAgICBicmVhazsKQEAgLTE5MzAsNyArMTk4OSw3IEBACiAgIH0KICAgZWxzZSBpZiAoaHNkLT5TdGF0ZSA9PSBIQUxfU0RfU1RBVEVfUkVTRVQpCiAgIHsKLSAgICBzd2l0Y2ggKENhbGxiYWNrSWQpCisgICAgc3dpdGNoIChDYWxsYmFja0lEKQogICAgIHsKICAgICBjYXNlIEhBTF9TRF9NU1BfSU5JVF9DQl9JRCA6CiAgICAgICBoc2QtPk1zcEluaXRDYWxsYmFjayA9IEhBTF9TRF9Nc3BJbml0OwpAQCAtMTk0MCw3ICsxOTk5LDcgQEAKICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQgOgogICAgICAgLyogVXBkYXRlIHRoZSBlcnJvciBjb2RlICovCi0gICAgICBoc2QtPkVycm9yQ29kZSB8PSBIQUxfU0RfRVJST1JfSU5WQUxJRF9DQUxMQkFDSzsgCisgICAgICBoc2QtPkVycm9yQ29kZSB8PSBIQUxfU0RfRVJST1JfSU5WQUxJRF9DQUxMQkFDSzsKICAgICAgIC8qIHVwZGF0ZSByZXR1cm4gc3RhdHVzICovCiAgICAgICBzdGF0dXMgPSAgSEFMX0VSUk9SOwogICAgICAgYnJlYWs7CkBAIC0xOTQ5LDcgKzIwMDgsNyBAQAogICBlbHNlCiAgIHsKICAgICAvKiBVcGRhdGUgdGhlIGVycm9yIGNvZGUgKi8KLSAgICBoc2QtPkVycm9yQ29kZSB8PSBIQUxfU0RfRVJST1JfSU5WQUxJRF9DQUxMQkFDSzsgCisgICAgaHNkLT5FcnJvckNvZGUgfD0gSEFMX1NEX0VSUk9SX0lOVkFMSURfQ0FMTEJBQ0s7CiAgICAgLyogdXBkYXRlIHJldHVybiBzdGF0dXMgKi8KICAgICBzdGF0dXMgPSAgSEFMX0VSUk9SOwogICB9CkBAIC0xOTU4LDIxICsyMDE3LDIxIEBACiAgIF9fSEFMX1VOTE9DSyhoc2QpOwogICByZXR1cm4gc3RhdHVzOwogfQotI2VuZGlmCisjZW5kaWYgLyogVVNFX0hBTF9TRF9SRUdJU1RFUl9DQUxMQkFDS1MgKi8KIAogLyoqCiAgICogQH0KICAgKi8KIAogLyoqIEBhZGR0b2dyb3VwIFNEX0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDMKLSAqICBAYnJpZWYgICBtYW5hZ2VtZW50IGZ1bmN0aW9ucyAKKyAqICBAYnJpZWYgICBtYW5hZ2VtZW50IGZ1bmN0aW9ucwogICoKLUB2ZXJiYXRpbSAgIAorQHZlcmJhdGltCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAgICAgICAgICAgICAgICAgICMjIyMjIFBlcmlwaGVyYWwgQ29udHJvbCBmdW5jdGlvbnMgIyMjIyMKLSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICAKKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIFsuLl0KLSAgICBUaGlzIHN1YnNlY3Rpb24gcHJvdmlkZXMgYSBzZXQgb2YgZnVuY3Rpb25zIGFsbG93aW5nIHRvIGNvbnRyb2wgdGhlIFNEIGNhcmQgCisgICAgVGhpcyBzdWJzZWN0aW9uIHByb3ZpZGVzIGEgc2V0IG9mIGZ1bmN0aW9ucyBhbGxvd2luZyB0byBjb250cm9sIHRoZSBTRCBjYXJkCiAgICAgb3BlcmF0aW9ucyBhbmQgZ2V0IHRoZSByZWxhdGVkIGluZm9ybWF0aW9uCiAKIEBlbmR2ZXJiYXRpbQpAQCAtMTk4Miw3OSArMjA0MSwzMSBAQAogLyoqCiAgICogQGJyaWVmICBSZXR1cm5zIGluZm9ybWF0aW9uIHRoZSBpbmZvcm1hdGlvbiBvZiB0aGUgY2FyZCB3aGljaCBhcmUgc3RvcmVkIG9uCiAgICogICAgICAgICB0aGUgQ0lEIHJlZ2lzdGVyLgotICAqIEBwYXJhbSAgaHNkIFBvaW50ZXIgdG8gU0QgaGFuZGxlCi0gICogQHBhcmFtICBwQ0lEIFBvaW50ZXIgdG8gYSBIQUxfU0RfQ0lEVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCAgCi0gICogICAgICAgICBjb250YWlucyBhbGwgQ0lEIHJlZ2lzdGVyIHBhcmFtZXRlcnMgCisgICogQHBhcmFtICBoc2Q6IFBvaW50ZXIgdG8gU0QgaGFuZGxlCisgICogQHBhcmFtICBwQ0lEOiBQb2ludGVyIHRvIGEgSEFMX1NEX0NhcmRDSURUeXBlRGVmIHN0cnVjdHVyZSB0aGF0ICAKKyAgKiAgICAgICAgIGNvbnRhaW5zIGFsbCBDSUQgcmVnaXN0ZXIgcGFyYW1ldGVycwogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1NEX0dldENhcmRDSUQoU0RfSGFuZGxlVHlwZURlZiAqaHNkLCBIQUxfU0RfQ2FyZENJRFR5cGVEZWYgKnBDSUQpCiB7Ci0gIHVpbnQzMl90IHRtcCA9IDBVOwotICAKLSAgLyogQnl0ZSAwICovCi0gIHRtcCA9ICh1aW50OF90KSgoaHNkLT5DSURbMFVdICYgMHhGRjAwMDAwMFUpID4+IDI0VSk7Ci0gIHBDSUQtPk1hbnVmYWN0dXJlcklEID0gdG1wOwotICAKLSAgLyogQnl0ZSAxICovCi0gIHRtcCA9ICh1aW50OF90KSgoaHNkLT5DSURbMFVdICYgMHgwMEZGMDAwMFUpID4+IDE2VSk7Ci0gIHBDSUQtPk9FTV9BcHBsaUlEID0gdG1wIDw8IDhVOwotICAKLSAgLyogQnl0ZSAyICovCi0gIHRtcCA9ICh1aW50OF90KSgoaHNkLT5DSURbMFVdICYgMHgwMDAwMDBGRjAwVSkgPj4gOFUpOwotICBwQ0lELT5PRU1fQXBwbGlJRCB8PSB0bXA7Ci0gIAotICAvKiBCeXRlIDMgKi8KLSAgdG1wID0gKHVpbnQ4X3QpKGhzZC0+Q0lEWzBVXSAmIDB4MDAwMDAwRkZVKTsKLSAgcENJRC0+UHJvZE5hbWUxID0gdG1wIDw8IDI0VTsKLSAgCi0gIC8qIEJ5dGUgNCAqLwotICB0bXAgPSAodWludDhfdCkoKGhzZC0+Q0lEWzFVXSAmIDB4RkYwMDAwMDBVKSA+PiAyNFUpOwotICBwQ0lELT5Qcm9kTmFtZTEgfD0gdG1wIDw8IDE2OwotICAKLSAgLyogQnl0ZSA1ICovCi0gIHRtcCA9ICh1aW50OF90KSgoaHNkLT5DSURbMVVdICYgMHgwMEZGMDAwMFUpID4+IDE2VSk7Ci0gIHBDSUQtPlByb2ROYW1lMSB8PSB0bXAgPDwgOFU7Ci0gIAotICAvKiBCeXRlIDYgKi8KLSAgdG1wID0gKHVpbnQ4X3QpKChoc2QtPkNJRFsxVV0gJiAweDAwMDBGRjAwVSkgPj4gOFUpOwotICBwQ0lELT5Qcm9kTmFtZTEgfD0gdG1wOwotICAKLSAgLyogQnl0ZSA3ICovCi0gIHRtcCA9ICh1aW50OF90KShoc2QtPkNJRFsxVV0gJiAweDAwMDAwMEZGVSk7Ci0gIHBDSUQtPlByb2ROYW1lMiA9IHRtcDsKLSAgCi0gIC8qIEJ5dGUgOCAqLwotICB0bXAgPSAodWludDhfdCkoKGhzZC0+Q0lEWzJVXSAmIDB4RkYwMDAwMDBVKSA+PiAyNFUpOwotICBwQ0lELT5Qcm9kUmV2ID0gdG1wOwotICAKLSAgLyogQnl0ZSA5ICovCi0gIHRtcCA9ICh1aW50OF90KSgoaHNkLT5DSURbMlVdICYgMHgwMEZGMDAwMFUpID4+IDE2VSk7Ci0gIHBDSUQtPlByb2RTTiA9IHRtcCA8PCAyNFU7Ci0gIAotICAvKiBCeXRlIDEwICovCi0gIHRtcCA9ICh1aW50OF90KSgoaHNkLT5DSURbMlVdICYgMHgwMDAwRkYwMFUpID4+IDhVKTsKLSAgcENJRC0+UHJvZFNOIHw9IHRtcCA8PCAxNlU7Ci0gIAotICAvKiBCeXRlIDExICovCi0gIHRtcCA9ICh1aW50OF90KShoc2QtPkNJRFsyVV0gJiAweDAwMDAwMEZGVSk7Ci0gIHBDSUQtPlByb2RTTiB8PSB0bXAgPDwgOFU7Ci0gIAotICAvKiBCeXRlIDEyICovCi0gIHRtcCA9ICh1aW50OF90KSgoaHNkLT5DSURbM1VdICYgMHhGRjAwMDAwMFUpID4+IDI0VSk7Ci0gIHBDSUQtPlByb2RTTiB8PSB0bXA7Ci0gIAotICAvKiBCeXRlIDEzICovCi0gIHRtcCA9ICh1aW50OF90KSgoaHNkLT5DSURbM1VdICYgMHgwMEZGMDAwMFUpID4+IDE2VSk7Ci0gIHBDSUQtPlJlc2VydmVkMSAgIHw9ICh0bXAgJiAweEYwVSkgPj4gNFU7Ci0gIHBDSUQtPk1hbnVmYWN0RGF0ZSA9ICh0bXAgJiAweDBGVSkgPDwgOFU7Ci0gIAotICAvKiBCeXRlIDE0ICovCi0gIHRtcCA9ICh1aW50OF90KSgoaHNkLT5DSURbM1VdICYgMHgwMDAwRkYwMFUpID4+IDhVKTsKLSAgcENJRC0+TWFudWZhY3REYXRlIHw9IHRtcDsKLSAgCi0gIC8qIEJ5dGUgMTUgKi8KLSAgdG1wID0gKHVpbnQ4X3QpKGhzZC0+Q0lEWzNVXSAmIDB4MDAwMDAwRkZVKTsKLSAgcENJRC0+Q0lEX0NSQyAgID0gKHRtcCAmIDB4RkVVKSA+PiAxVTsKKyAgcENJRC0+TWFudWZhY3R1cmVySUQgPSAodWludDhfdCkoKGhzZC0+Q0lEWzBdICYgMHhGRjAwMDAwMFUpID4+IDI0VSk7CisKKyAgcENJRC0+T0VNX0FwcGxpSUQgPSAodWludDE2X3QpKChoc2QtPkNJRFswXSAmIDB4MDBGRkZGMDBVKSA+PiA4VSk7CisKKyAgcENJRC0+UHJvZE5hbWUxID0gKCgoaHNkLT5DSURbMF0gJiAweDAwMDAwMEZGVSkgPDwgMjRVKSB8ICgoaHNkLT5DSURbMV0gJiAweEZGRkZGRjAwVSkgPj4gOFUpKTsKKworICBwQ0lELT5Qcm9kTmFtZTIgPSAodWludDhfdCkoaHNkLT5DSURbMV0gJiAweDAwMDAwMEZGVSk7CisKKyAgcENJRC0+UHJvZFJldiA9ICh1aW50OF90KSgoaHNkLT5DSURbMl0gJiAweEZGMDAwMDAwVSkgPj4gMjRVKTsKKworICBwQ0lELT5Qcm9kU04gPSAoKChoc2QtPkNJRFsyXSAmIDB4MDBGRkZGRkZVKSA8PCA4VSkgfCAoKGhzZC0+Q0lEWzNdICYgMHhGRjAwMDAwMFUpID4+IDI0VSkpOworCisgIHBDSUQtPlJlc2VydmVkMSA9ICh1aW50OF90KSgoaHNkLT5DSURbM10gJiAweDAwRjAwMDAwVSkgPj4gMjBVKTsKKworICBwQ0lELT5NYW51ZmFjdERhdGUgPSAodWludDE2X3QpKChoc2QtPkNJRFszXSAmIDB4MDAwRkZGMDBVKSA+PiA4VSk7CisKKyAgcENJRC0+Q0lEX0NSQyA9ICh1aW50OF90KSgoaHNkLT5DSURbM10gJiAweDAwMDAwMEZFVSkgPj4gMVUpOworCiAgIHBDSUQtPlJlc2VydmVkMiA9IDFVOwogCiAgIHJldHVybiBIQUxfT0s7CkBAIC0yMDYzLDI0NCArMjA3NCwxNzEgQEAKIC8qKgogICAqIEBicmllZiAgUmV0dXJucyBpbmZvcm1hdGlvbiB0aGUgaW5mb3JtYXRpb24gb2YgdGhlIGNhcmQgd2hpY2ggYXJlIHN0b3JlZCBvbgogICAqICAgICAgICAgdGhlIENTRCByZWdpc3Rlci4KLSAgKiBAcGFyYW0gIGhzZCBQb2ludGVyIHRvIFNEIGhhbmRsZQotICAqIEBwYXJhbSAgcENTRCBQb2ludGVyIHRvIGEgSEFMX1NEX0NhcmRDU0RUeXBlRGVmIHN0cnVjdHVyZSB0aGF0ICAKLSAgKiAgICAgICAgIGNvbnRhaW5zIGFsbCBDU0QgcmVnaXN0ZXIgcGFyYW1ldGVycyAgCisgICogQHBhcmFtICBoc2Q6IFBvaW50ZXIgdG8gU0QgaGFuZGxlCisgICogQHBhcmFtICBwQ1NEOiBQb2ludGVyIHRvIGEgSEFMX1NEX0NhcmRDU0RUeXBlRGVmIHN0cnVjdHVyZSB0aGF0ICAKKyAgKiAgICAgICAgIGNvbnRhaW5zIGFsbCBDU0QgcmVnaXN0ZXIgcGFyYW1ldGVycwogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1NEX0dldENhcmRDU0QoU0RfSGFuZGxlVHlwZURlZiAqaHNkLCBIQUxfU0RfQ2FyZENTRFR5cGVEZWYgKnBDU0QpCiB7Ci0gIHVpbnQzMl90IHRtcCA9IDBVOwotICAKLSAgLyogQnl0ZSAwICovCi0gIHRtcCA9IChoc2QtPkNTRFswVV0gJiAweEZGMDAwMDAwVSkgPj4gMjRVOwotICBwQ1NELT5DU0RTdHJ1Y3QgICAgICA9ICh1aW50OF90KSgodG1wICYgMHhDMFUpID4+IDZVKTsKLSAgcENTRC0+U3lzU3BlY1ZlcnNpb24gPSAodWludDhfdCkoKHRtcCAmIDB4M0NVKSA+PiAyVSk7Ci0gIHBDU0QtPlJlc2VydmVkMSAgICAgID0gdG1wICYgMHgwM1U7Ci0gIAotICAvKiBCeXRlIDEgKi8KLSAgdG1wID0gKGhzZC0+Q1NEWzBVXSAmIDB4MDBGRjAwMDBVKSA+PiAxNlU7Ci0gIHBDU0QtPlRBQUMgPSAodWludDhfdCl0bXA7Ci0gIAotICAvKiBCeXRlIDIgKi8KLSAgdG1wID0gKGhzZC0+Q1NEWzBVXSAmIDB4MDAwMEZGMDBVKSA+PiA4VTsKLSAgcENTRC0+TlNBQyA9ICh1aW50OF90KXRtcDsKLSAgCi0gIC8qIEJ5dGUgMyAqLwotICB0bXAgPSBoc2QtPkNTRFswVV0gJiAweDAwMDAwMEZGVTsKLSAgcENTRC0+TWF4QnVzQ2xrRnJlYyA9ICh1aW50OF90KXRtcDsKLSAgCi0gIC8qIEJ5dGUgNCAqLwotICB0bXAgPSAoaHNkLT5DU0RbMVVdICYgMHhGRjAwMDAwMFUpID4+IDI0VTsKLSAgcENTRC0+Q2FyZENvbWRDbGFzc2VzID0gKHVpbnQxNl90KSh0bXAgPDwgNFUpOwotICAKLSAgLyogQnl0ZSA1ICovCi0gIHRtcCA9IChoc2QtPkNTRFsxVV0gJiAweDAwRkYwMDAwVSkgPj4gMTZVOwotICBwQ1NELT5DYXJkQ29tZENsYXNzZXMgfD0gKHVpbnQxNl90KSgodG1wICYgMHhGMFUpID4+IDRVKTsKLSAgcENTRC0+UmRCbG9ja0xlbiAgICAgICA9ICh1aW50OF90KSh0bXAgJiAweDBGVSk7Ci0gIAotICAvKiBCeXRlIDYgKi8KLSAgdG1wID0gKGhzZC0+Q1NEWzFVXSAmIDB4MDAwMEZGMDBVKSA+PiA4VTsKLSAgcENTRC0+UGFydEJsb2NrUmVhZCAgID0gKHVpbnQ4X3QpKCh0bXAgJiAweDgwVSkgPj4gN1UpOwotICBwQ1NELT5XckJsb2NrTWlzYWxpZ24gPSAodWludDhfdCkoKHRtcCAmIDB4NDBVKSA+PiA2VSk7Ci0gIHBDU0QtPlJkQmxvY2tNaXNhbGlnbiA9ICh1aW50OF90KSgodG1wICYgMHgyMFUpID4+IDVVKTsKLSAgcENTRC0+RFNSSW1wbCAgICAgICAgID0gKHVpbnQ4X3QpKCh0bXAgJiAweDEwVSkgPj4gNFUpOwotICBwQ1NELT5SZXNlcnZlZDIgICAgICAgPSAwVTsgLyohPCBSZXNlcnZlZCAqLwotICAgICAgIAorICBwQ1NELT5DU0RTdHJ1Y3QgPSAodWludDhfdCkoKGhzZC0+Q1NEWzBdICYgMHhDMDAwMDAwMFUpID4+IDMwVSk7CisKKyAgcENTRC0+U3lzU3BlY1ZlcnNpb24gPSAodWludDhfdCkoKGhzZC0+Q1NEWzBdICYgMHgzQzAwMDAwMFUpID4+IDI2VSk7CisKKyAgcENTRC0+UmVzZXJ2ZWQxID0gKHVpbnQ4X3QpKChoc2QtPkNTRFswXSAmIDB4MDMwMDAwMDBVKSA+PiAyNFUpOworCisgIHBDU0QtPlRBQUMgPSAodWludDhfdCkoKGhzZC0+Q1NEWzBdICYgMHgwMEZGMDAwMFUpID4+IDE2VSk7CisKKyAgcENTRC0+TlNBQyA9ICh1aW50OF90KSgoaHNkLT5DU0RbMF0gJiAweDAwMDBGRjAwVSkgPj4gOFUpOworCisgIHBDU0QtPk1heEJ1c0Nsa0ZyZWMgPSAodWludDhfdCkoaHNkLT5DU0RbMF0gJiAweDAwMDAwMEZGVSk7CisKKyAgcENTRC0+Q2FyZENvbWRDbGFzc2VzID0gKHVpbnQxNl90KSgoaHNkLT5DU0RbMV0gJiAweEZGRjAwMDAwVSkgPj4gMjBVKTsKKworICBwQ1NELT5SZEJsb2NrTGVuID0gKHVpbnQ4X3QpKChoc2QtPkNTRFsxXSAmIDB4MDAwRjAwMDBVKSA+PiAxNlUpOworCisgIHBDU0QtPlBhcnRCbG9ja1JlYWQgICA9ICh1aW50OF90KSgoaHNkLT5DU0RbMV0gJiAweDAwMDA4MDAwVSkgPj4gMTVVKTsKKworICBwQ1NELT5XckJsb2NrTWlzYWxpZ24gPSAodWludDhfdCkoKGhzZC0+Q1NEWzFdICYgMHgwMDAwNDAwMFUpID4+IDE0VSk7CisKKyAgcENTRC0+UmRCbG9ja01pc2FsaWduID0gKHVpbnQ4X3QpKChoc2QtPkNTRFsxXSAmIDB4MDAwMDIwMDBVKSA+PiAxM1UpOworCisgIHBDU0QtPkRTUkltcGwgPSAodWludDhfdCkoKGhzZC0+Q1NEWzFdICYgMHgwMDAwMTAwMFUpID4+IDEyVSk7CisKKyAgcENTRC0+UmVzZXJ2ZWQyID0gMFU7IC8qITwgUmVzZXJ2ZWQgKi8KKwogICBpZihoc2QtPlNkQ2FyZC5DYXJkVHlwZSA9PSBDQVJEX1NEU0MpCiAgIHsKLSAgICBwQ1NELT5EZXZpY2VTaXplID0gKHRtcCAmIDB4MDNVKSA8PCAxMFU7Ci0gICAgCi0gICAgLyogQnl0ZSA3ICovCi0gICAgdG1wID0gKHVpbnQ4X3QpKGhzZC0+Q1NEWzFVXSAmIDB4MDAwMDAwRkZVKTsKLSAgICBwQ1NELT5EZXZpY2VTaXplIHw9ICh0bXApIDw8IDJVOwotICAgIAotICAgIC8qIEJ5dGUgOCAqLwotICAgIHRtcCA9ICh1aW50OF90KSgoaHNkLT5DU0RbMlVdICYgMHhGRjAwMDAwMFUpID4+IDI0VSk7Ci0gICAgcENTRC0+RGV2aWNlU2l6ZSB8PSAodG1wICYgMHhDMFUpID4+IDZVOwotICAgIAotICAgIHBDU0QtPk1heFJkQ3VycmVudFZERE1pbiA9ICh0bXAgJiAweDM4VSkgPj4gM1U7Ci0gICAgcENTRC0+TWF4UmRDdXJyZW50VkRETWF4ID0gKHRtcCAmIDB4MDdVKTsKLSAgICAKLSAgICAvKiBCeXRlIDkgKi8KLSAgICB0bXAgPSAodWludDhfdCkoKGhzZC0+Q1NEWzJVXSAmIDB4MDBGRjAwMDBVKSA+PiAxNlUpOwotICAgIHBDU0QtPk1heFdyQ3VycmVudFZERE1pbiA9ICh0bXAgJiAweEUwVSkgPj4gNVU7Ci0gICAgcENTRC0+TWF4V3JDdXJyZW50VkRETWF4ID0gKHRtcCAmIDB4MUNVKSA+PiAyVTsKLSAgICBwQ1NELT5EZXZpY2VTaXplTXVsICAgICAgPSAodG1wICYgMHgwM1UpIDw8IDFVOwotICAgIC8qIEJ5dGUgMTAgKi8KLSAgICB0bXAgPSAodWludDhfdCkoKGhzZC0+Q1NEWzJVXSAmIDB4MDAwMEZGMDBVKSA+PiA4VSk7Ci0gICAgcENTRC0+RGV2aWNlU2l6ZU11bCB8PSAodG1wICYgMHg4MFUpID4+IDdVOwotICAgIAotICAgIGhzZC0+U2RDYXJkLkJsb2NrTmJyICA9IChwQ1NELT5EZXZpY2VTaXplICsgMVUpIDsKLSAgICBoc2QtPlNkQ2FyZC5CbG9ja05iciAqPSAoMVUgPDwgKHBDU0QtPkRldmljZVNpemVNdWwgKyAyVSkpOwotICAgIGhzZC0+U2RDYXJkLkJsb2NrU2l6ZSA9IDFVIDw8IChwQ1NELT5SZEJsb2NrTGVuKTsKKyAgICBwQ1NELT5EZXZpY2VTaXplID0gKCgoaHNkLT5DU0RbMV0gJiAweDAwMDAwM0ZGVSkgPDwgMlUpIHwgKChoc2QtPkNTRFsyXSAmIDB4QzAwMDAwMDBVKSA+PiAzMFUpKTsKIAotICAgIGhzZC0+U2RDYXJkLkxvZ0Jsb2NrTmJyID0gIChoc2QtPlNkQ2FyZC5CbG9ja05icikgKiAoKGhzZC0+U2RDYXJkLkJsb2NrU2l6ZSkgLyA1MTJVKTsgCisgICAgcENTRC0+TWF4UmRDdXJyZW50VkRETWluID0gKHVpbnQ4X3QpKChoc2QtPkNTRFsyXSAmIDB4MzgwMDAwMDBVKSA+PiAyN1UpOworCisgICAgcENTRC0+TWF4UmRDdXJyZW50VkRETWF4ID0gKHVpbnQ4X3QpKChoc2QtPkNTRFsyXSAmIDB4MDcwMDAwMDBVKSA+PiAyNFUpOworCisgICAgcENTRC0+TWF4V3JDdXJyZW50VkRETWluID0gKHVpbnQ4X3QpKChoc2QtPkNTRFsyXSAmIDB4MDBFMDAwMDBVKSA+PiAyMVUpOworCisgICAgcENTRC0+TWF4V3JDdXJyZW50VkRETWF4ID0gKHVpbnQ4X3QpKChoc2QtPkNTRFsyXSAmIDB4MDAxQzAwMDBVKSA+PiAxOFUpOworCisgICAgcENTRC0+RGV2aWNlU2l6ZU11bCA9ICh1aW50OF90KSgoaHNkLT5DU0RbMl0gJiAweDAwMDM4MDAwVSkgPj4gMTVVKTsKKworICAgIGhzZC0+U2RDYXJkLkJsb2NrTmJyICA9IChwQ1NELT5EZXZpY2VTaXplICsgMVUpIDsKKyAgICBoc2QtPlNkQ2FyZC5CbG9ja05iciAqPSAoMVVMIDw8ICgocENTRC0+RGV2aWNlU2l6ZU11bCAmIDB4MDdVKSArIDJVKSk7CisgICAgaHNkLT5TZENhcmQuQmxvY2tTaXplID0gKDFVTCA8PCAocENTRC0+UmRCbG9ja0xlbiAmIDB4MEZVKSk7CisKKyAgICBoc2QtPlNkQ2FyZC5Mb2dCbG9ja05iciA9ICAoaHNkLT5TZENhcmQuQmxvY2tOYnIpICogKChoc2QtPlNkQ2FyZC5CbG9ja1NpemUpIC8gNTEyVSk7CiAgICAgaHNkLT5TZENhcmQuTG9nQmxvY2tTaXplID0gNTEyVTsKICAgfQogICBlbHNlIGlmKGhzZC0+U2RDYXJkLkNhcmRUeXBlID09IENBUkRfU0RIQ19TRFhDKQogICB7CiAgICAgLyogQnl0ZSA3ICovCi0gICAgdG1wID0gKHVpbnQ4X3QpKGhzZC0+Q1NEWzFVXSAmIDB4MDAwMDAwRkZVKTsKLSAgICBwQ1NELT5EZXZpY2VTaXplID0gKHRtcCAmIDB4M0ZVKSA8PCAxNlU7Ci0gICAgCi0gICAgLyogQnl0ZSA4ICovCi0gICAgdG1wID0gKHVpbnQ4X3QpKChoc2QtPkNTRFsyVV0gJiAweEZGMDAwMDAwVSkgPj4gMjRVKTsKLSAgICAKLSAgICBwQ1NELT5EZXZpY2VTaXplIHw9ICh0bXAgPDwgOFUpOwotICAgIAotICAgIC8qIEJ5dGUgOSAqLwotICAgIHRtcCA9ICh1aW50OF90KSgoaHNkLT5DU0RbMlVdICYgMHgwMEZGMDAwMFUpID4+IDE2VSk7Ci0gICAgCi0gICAgcENTRC0+RGV2aWNlU2l6ZSB8PSAodG1wKTsKLSAgICAKLSAgICAvKiBCeXRlIDEwICovCi0gICAgdG1wID0gKHVpbnQ4X3QpKChoc2QtPkNTRFsyVV0gJiAweDAwMDBGRjAwVSkgPj4gOFUpOwotICAgIAotICAgIGhzZC0+U2RDYXJkLkxvZ0Jsb2NrTmJyID0gaHNkLT5TZENhcmQuQmxvY2tOYnIgPSAoKCh1aW50NjRfdClwQ1NELT5EZXZpY2VTaXplICsgMVUpICogMTAyNFUpOwotICAgIGhzZC0+U2RDYXJkLkxvZ0Jsb2NrU2l6ZSA9IGhzZC0+U2RDYXJkLkJsb2NrU2l6ZSA9IDUxMlU7CisgICAgcENTRC0+RGV2aWNlU2l6ZSA9ICgoKGhzZC0+Q1NEWzFdICYgMHgwMDAwMDAzRlUpIDw8IDE2VSkgfCAoKGhzZC0+Q1NEWzJdICYgMHhGRkZGMDAwMFUpID4+IDE2VSkpOworCisgICAgaHNkLT5TZENhcmQuQmxvY2tOYnIgPSAoKHBDU0QtPkRldmljZVNpemUgKyAxVSkgKiAxMDI0VSk7CisgICAgaHNkLT5TZENhcmQuTG9nQmxvY2tOYnIgPSBoc2QtPlNkQ2FyZC5CbG9ja05icjsKKyAgICBoc2QtPlNkQ2FyZC5CbG9ja1NpemUgPSA1MTJVOworICAgIGhzZC0+U2RDYXJkLkxvZ0Jsb2NrU2l6ZSA9IGhzZC0+U2RDYXJkLkJsb2NrU2l6ZTsKICAgfQogICBlbHNlCiAgIHsKICAgICAvKiBDbGVhciBhbGwgdGhlIHN0YXRpYyBmbGFncyAqLwotICAgIF9fSEFMX1NEX0NMRUFSX0ZMQUcoaHNkLCBTRElPX1NUQVRJQ19GTEFHUyk7ICAgCisgICAgX19IQUxfU0RfQ0xFQVJfRkxBRyhoc2QsIFNESU9fU1RBVElDX0ZMQUdTKTsKICAgICBoc2QtPkVycm9yQ29kZSB8PSBIQUxfU0RfRVJST1JfVU5TVVBQT1JURURfRkVBVFVSRTsKICAgICBoc2QtPlN0YXRlID0gSEFMX1NEX1NUQVRFX1JFQURZOwogICAgIHJldHVybiBIQUxfRVJST1I7CiAgIH0KLSAgCi0gIHBDU0QtPkVyYXNlR3JTaXplID0gKHRtcCAmIDB4NDBVKSA+PiA2VTsKLSAgcENTRC0+RXJhc2VHck11bCAgPSAodG1wICYgMHgzRlUpIDw8IDFVOwotICAKLSAgLyogQnl0ZSAxMSAqLwotICB0bXAgPSAodWludDhfdCkoaHNkLT5DU0RbMlVdICYgMHgwMDAwMDBGRlUpOwotICBwQ1NELT5FcmFzZUdyTXVsICAgICB8PSAodG1wICYgMHg4MFUpID4+IDdVOwotICBwQ1NELT5XclByb3RlY3RHclNpemUgPSAodG1wICYgMHg3RlUpOwotICAKLSAgLyogQnl0ZSAxMiAqLwotICB0bXAgPSAodWludDhfdCkoKGhzZC0+Q1NEWzNVXSAmIDB4RkYwMDAwMDBVKSA+PiAyNFUpOwotICBwQ1NELT5XclByb3RlY3RHckVuYWJsZSA9ICh0bXAgJiAweDgwVSkgPj4gN1U7Ci0gIHBDU0QtPk1hbkRlZmxFQ0MgICAgICAgID0gKHRtcCAmIDB4NjBVKSA+PiA1VTsKLSAgcENTRC0+V3JTcGVlZEZhY3QgICAgICAgPSAodG1wICYgMHgxQ1UpID4+IDJVOwotICBwQ1NELT5NYXhXckJsb2NrTGVuICAgICA9ICh0bXAgJiAweDAzVSkgPDwgMlU7Ci0gIAotICAvKiBCeXRlIDEzICovCi0gIHRtcCA9ICh1aW50OF90KSgoaHNkLT5DU0RbM1VdICYgMHgwMEZGMDAwMFUpID4+IDE2VSk7Ci0gIHBDU0QtPk1heFdyQmxvY2tMZW4gICAgICB8PSAodG1wICYgMHhDMFUpID4+IDZVOwotICBwQ1NELT5Xcml0ZUJsb2NrUGFQYXJ0aWFsID0gKHRtcCAmIDB4MjBVKSA+PiA1VTsKLSAgcENTRC0+UmVzZXJ2ZWQzICAgICAgICAgICA9IDBVOwotICBwQ1NELT5Db250ZW50UHJvdGVjdEFwcGxpID0gKHRtcCAmIDB4MDFVKTsKLSAgCi0gIC8qIEJ5dGUgMTQgKi8KLSAgdG1wID0gKHVpbnQ4X3QpKChoc2QtPkNTRFszVV0gJiAweDAwMDBGRjAwVSkgPj4gOFUpOwotICBwQ1NELT5GaWxlRm9ybWF0R3JvdW9wID0gKHRtcCAmIDB4ODBVKSA+PiA3VTsKLSAgcENTRC0+Q29weUZsYWcgICAgICAgICA9ICh0bXAgJiAweDQwVSkgPj4gNlU7Ci0gIHBDU0QtPlBlcm1XclByb3RlY3QgICAgPSAodG1wICYgMHgyMFUpID4+IDVVOwotICBwQ1NELT5UZW1wV3JQcm90ZWN0ICAgID0gKHRtcCAmIDB4MTBVKSA+PiA0VTsKLSAgcENTRC0+RmlsZUZvcm1hdCAgICAgICA9ICh0bXAgJiAweDBDVSkgPj4gMlU7Ci0gIHBDU0QtPkVDQyAgICAgICAgICAgICAgPSAodG1wICYgMHgwM1UpOwotICAKLSAgLyogQnl0ZSAxNSAqLwotICB0bXAgPSAodWludDhfdCkoaHNkLT5DU0RbM1VdICYgMHgwMDAwMDBGRlUpOwotICBwQ1NELT5DU0RfQ1JDICAgPSAodG1wICYgMHhGRVUpID4+IDFVOwotICBwQ1NELT5SZXNlcnZlZDQgPSAxVTsKLSAgCisKKyAgcENTRC0+RXJhc2VHclNpemUgPSAodWludDhfdCkoKGhzZC0+Q1NEWzJdICYgMHgwMDAwNDAwMFUpID4+IDE0VSk7CisKKyAgcENTRC0+RXJhc2VHck11bCA9ICh1aW50OF90KSgoaHNkLT5DU0RbMl0gJiAweDAwMDAzRjgwVSkgPj4gN1UpOworCisgIHBDU0QtPldyUHJvdGVjdEdyU2l6ZSA9ICh1aW50OF90KShoc2QtPkNTRFsyXSAmIDB4MDAwMDAwN0ZVKTsKKworICBwQ1NELT5XclByb3RlY3RHckVuYWJsZSA9ICh1aW50OF90KSgoaHNkLT5DU0RbM10gJiAweDgwMDAwMDAwVSkgPj4gMzFVKTsKKworICBwQ1NELT5NYW5EZWZsRUNDID0gKHVpbnQ4X3QpKChoc2QtPkNTRFszXSAmIDB4NjAwMDAwMDBVKSA+PiAyOVUpOworCisgIHBDU0QtPldyU3BlZWRGYWN0ID0gKHVpbnQ4X3QpKChoc2QtPkNTRFszXSAmIDB4MUMwMDAwMDBVKSA+PiAyNlUpOworCisgIHBDU0QtPk1heFdyQmxvY2tMZW49ICh1aW50OF90KSgoaHNkLT5DU0RbM10gJiAweDAzQzAwMDAwVSkgPj4gMjJVKTsKKworICBwQ1NELT5Xcml0ZUJsb2NrUGFQYXJ0aWFsID0gKHVpbnQ4X3QpKChoc2QtPkNTRFszXSAmIDB4MDAyMDAwMDBVKSA+PiAyMVUpOworCisgIHBDU0QtPlJlc2VydmVkMyA9IDA7CisKKyAgcENTRC0+Q29udGVudFByb3RlY3RBcHBsaSA9ICh1aW50OF90KSgoaHNkLT5DU0RbM10gJiAweDAwMDEwMDAwVSkgPj4gMTZVKTsKKworICBwQ1NELT5GaWxlRm9ybWF0R3JvdXAgPSAodWludDhfdCkoKGhzZC0+Q1NEWzNdICYgMHgwMDAwODAwMFUpID4+IDE1VSk7CisKKyAgcENTRC0+Q29weUZsYWcgPSAodWludDhfdCkoKGhzZC0+Q1NEWzNdICYgMHgwMDAwNDAwMFUpID4+IDE0VSk7CisKKyAgcENTRC0+UGVybVdyUHJvdGVjdCA9ICh1aW50OF90KSgoaHNkLT5DU0RbM10gJiAweDAwMDAyMDAwVSkgPj4gMTNVKTsKKworICBwQ1NELT5UZW1wV3JQcm90ZWN0ID0gKHVpbnQ4X3QpKChoc2QtPkNTRFszXSAmIDB4MDAwMDEwMDBVKSA+PiAxMlUpOworCisgIHBDU0QtPkZpbGVGb3JtYXQgPSAodWludDhfdCkoKGhzZC0+Q1NEWzNdICYgMHgwMDAwMEMwMFUpID4+IDEwVSk7CisKKyAgcENTRC0+RUNDPSAodWludDhfdCkoKGhzZC0+Q1NEWzNdICYgMHgwMDAwMDMwMFUpID4+IDhVKTsKKworICBwQ1NELT5DU0RfQ1JDID0gKHVpbnQ4X3QpKChoc2QtPkNTRFszXSAmIDB4MDAwMDAwRkVVKSA+PiAxVSk7CisKKyAgcENTRC0+UmVzZXJ2ZWQ0ID0gMTsKKwogICByZXR1cm4gSEFMX09LOwogfQogCiAvKioKICAgKiBAYnJpZWYgIEdldHMgdGhlIFNEIHN0YXR1cyBpbmZvLgotICAqIEBwYXJhbSAgaHNkIFBvaW50ZXIgdG8gU0QgaGFuZGxlICAgICAgCi0gICogQHBhcmFtICBwU3RhdHVzIFBvaW50ZXIgdG8gdGhlIEhBTF9TRF9DYXJkU3RhdHVzVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCAKLSAgKiAgICAgICAgIHdpbGwgY29udGFpbiB0aGUgU0QgY2FyZCBzdGF0dXMgaW5mb3JtYXRpb24gCisgICogQHBhcmFtICBoc2Q6IFBvaW50ZXIgdG8gU0QgaGFuZGxlCisgICogQHBhcmFtICBwU3RhdHVzOiBQb2ludGVyIHRvIHRoZSBIQUxfU0RfQ2FyZFN0YXR1c1R5cGVEZWYgc3RydWN0dXJlIHRoYXQgCisgICogICAgICAgICB3aWxsIGNvbnRhaW4gdGhlIFNEIGNhcmQgc3RhdHVzIGluZm9ybWF0aW9uCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfU0RfR2V0Q2FyZFN0YXR1cyhTRF9IYW5kbGVUeXBlRGVmICpoc2QsIEhBTF9TRF9DYXJkU3RhdHVzVHlwZURlZiAqcFN0YXR1cykKIHsKLSAgdWludDMyX3QgdG1wID0gMFU7Ci0gIHVpbnQzMl90IHNkX3N0YXR1c1sxNlVdOwotICB1aW50MzJfdCBlcnJvcnN0YXRlID0gSEFMX1NEX0VSUk9SX05PTkU7Ci0gIAorICB1aW50MzJfdCBzZF9zdGF0dXNbMTZdOworICB1aW50MzJfdCBlcnJvcnN0YXRlOworCiAgIGVycm9yc3RhdGUgPSBTRF9TZW5kU0RTdGF0dXMoaHNkLCBzZF9zdGF0dXMpOwotICBpZihlcnJvcnN0YXRlICE9IEhBTF9PSykKKyAgaWYoZXJyb3JzdGF0ZSAhPSBIQUxfU0RfRVJST1JfTk9ORSkKICAgewogICAgIC8qIENsZWFyIGFsbCB0aGUgc3RhdGljIGZsYWdzICovCi0gICAgX19IQUxfU0RfQ0xFQVJfRkxBRyhoc2QsIFNESU9fU1RBVElDX0ZMQUdTKTsgICAKKyAgICBfX0hBTF9TRF9DTEVBUl9GTEFHKGhzZCwgU0RJT19TVEFUSUNfRkxBR1MpOwogICAgIGhzZC0+RXJyb3JDb2RlIHw9IGVycm9yc3RhdGU7CiAgICAgaHNkLT5TdGF0ZSA9IEhBTF9TRF9TVEFURV9SRUFEWTsKICAgICByZXR1cm4gSEFMX0VSUk9SOwogICB9CiAgIGVsc2UKICAgewotICAgIC8qIEJ5dGUgMCAqLwotICAgIHRtcCA9IChzZF9zdGF0dXNbMFVdICYgMHhDMFUpID4+IDZVOwotICAgIHBTdGF0dXMtPkRhdGFCdXNXaWR0aCA9ICh1aW50OF90KXRtcDsKLSAgICAKLSAgICAvKiBCeXRlIDAgKi8KLSAgICB0bXAgPSAoc2Rfc3RhdHVzWzBVXSAmIDB4MjBVKSA+PiA1VTsKLSAgICBwU3RhdHVzLT5TZWN1cmVkTW9kZSA9ICh1aW50OF90KXRtcDsKLSAgICAKLSAgICAvKiBCeXRlIDIgKi8KLSAgICB0bXAgPSAoc2Rfc3RhdHVzWzBVXSAmIDB4MDBGRjAwMDBVKSA+PiAxNlU7Ci0gICAgcFN0YXR1cy0+Q2FyZFR5cGUgPSAodWludDE2X3QpKHRtcCA8PCA4VSk7Ci0gICAgCi0gICAgLyogQnl0ZSAzICovCi0gICAgdG1wID0gKHNkX3N0YXR1c1swVV0gJiAweEZGMDAwMDAwVSkgPj4gMjRVOwotICAgIHBTdGF0dXMtPkNhcmRUeXBlIHw9ICh1aW50MTZfdCl0bXA7Ci0gICAgCi0gICAgLyogQnl0ZSA0ICovCi0gICAgdG1wID0gKHNkX3N0YXR1c1sxVV0gJiAweEZGVSk7Ci0gICAgcFN0YXR1cy0+UHJvdGVjdGVkQXJlYVNpemUgPSAodWludDMyX3QpKHRtcCA8PCAyNFUpOwotICAgIAotICAgIC8qIEJ5dGUgNSAqLwotICAgIHRtcCA9IChzZF9zdGF0dXNbMVVdICYgMHhGRjAwVSkgPj4gOFU7Ci0gICAgcFN0YXR1cy0+UHJvdGVjdGVkQXJlYVNpemUgfD0gKHVpbnQzMl90KSh0bXAgPDwgMTZVKTsKLSAgICAKLSAgICAvKiBCeXRlIDYgKi8KLSAgICB0bXAgPSAoc2Rfc3RhdHVzWzFVXSAmIDB4RkYwMDAwVSkgPj4gMTZVOwotICAgIHBTdGF0dXMtPlByb3RlY3RlZEFyZWFTaXplIHw9ICh1aW50MzJfdCkodG1wIDw8IDhVKTsKLSAgICAKLSAgICAvKiBCeXRlIDcgKi8KLSAgICB0bXAgPSAoc2Rfc3RhdHVzWzFVXSAmIDB4RkYwMDAwMDBVKSA+PiAyNFU7Ci0gICAgcFN0YXR1cy0+UHJvdGVjdGVkQXJlYVNpemUgfD0gKHVpbnQzMl90KXRtcDsKLSAgICAKLSAgICAvKiBCeXRlIDggKi8KLSAgICB0bXAgPSAoc2Rfc3RhdHVzWzJVXSAmIDB4RkZVKTsKLSAgICBwU3RhdHVzLT5TcGVlZENsYXNzID0gKHVpbnQ4X3QpdG1wOwotICAgIAotICAgIC8qIEJ5dGUgOSAqLwotICAgIHRtcCA9IChzZF9zdGF0dXNbMlVdICYgMHhGRjAwVSkgPj4gOFU7Ci0gICAgcFN0YXR1cy0+UGVyZm9ybWFuY2VNb3ZlID0gKHVpbnQ4X3QpdG1wOwotICAgIAotICAgIC8qIEJ5dGUgMTAgKi8KLSAgICB0bXAgPSAoc2Rfc3RhdHVzWzJVXSAmIDB4RjAwMDAwVSkgPj4gMjBVOwotICAgIHBTdGF0dXMtPkFsbG9jYXRpb25Vbml0U2l6ZSA9ICh1aW50OF90KXRtcDsKLSAgICAKLSAgICAvKiBCeXRlIDExICovCi0gICAgdG1wID0gKHNkX3N0YXR1c1syVV0gJiAweEZGMDAwMDAwVSkgPj4gMjRVOwotICAgIHBTdGF0dXMtPkVyYXNlU2l6ZSA9ICh1aW50MTZfdCkodG1wIDw8IDhVKTsKLSAgICAKLSAgICAvKiBCeXRlIDEyICovCi0gICAgdG1wID0gKHNkX3N0YXR1c1szVV0gJiAweEZGVSk7Ci0gICAgcFN0YXR1cy0+RXJhc2VTaXplIHw9ICh1aW50MTZfdCl0bXA7Ci0gICAgCi0gICAgLyogQnl0ZSAxMyAqLwotICAgIHRtcCA9IChzZF9zdGF0dXNbM1VdICYgMHhGQzAwVSkgPj4gMTBVOwotICAgIHBTdGF0dXMtPkVyYXNlVGltZW91dCA9ICh1aW50OF90KXRtcDsKLSAgICAKLSAgICAvKiBCeXRlIDEzICovCi0gICAgdG1wID0gKHNkX3N0YXR1c1szVV0gJiAweDAzMDBVKSA+PiA4VTsKLSAgICBwU3RhdHVzLT5FcmFzZU9mZnNldCA9ICh1aW50OF90KXRtcDsKKyAgICBwU3RhdHVzLT5EYXRhQnVzV2lkdGggPSAodWludDhfdCkoKHNkX3N0YXR1c1swXSAmIDB4QzBVKSA+PiA2VSk7CisKKyAgICBwU3RhdHVzLT5TZWN1cmVkTW9kZSA9ICh1aW50OF90KSgoc2Rfc3RhdHVzWzBdICYgMHgyMFUpID4+IDVVKTsKKworICAgIHBTdGF0dXMtPkNhcmRUeXBlID0gKHVpbnQxNl90KSgoKHNkX3N0YXR1c1swXSAmIDB4MDBGRjAwMDBVKSA+PiA4VSkgfCAoKHNkX3N0YXR1c1swXSAmIDB4RkYwMDAwMDBVKSA+PiAyNFUpKTsKKworICAgIHBTdGF0dXMtPlByb3RlY3RlZEFyZWFTaXplID0gKCgoc2Rfc3RhdHVzWzFdICYgMHhGRlUpIDw8IDI0VSkgICAgfCAoKHNkX3N0YXR1c1sxXSAmIDB4RkYwMFUpIDw8IDhVKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChzZF9zdGF0dXNbMV0gJiAweEZGMDAwMFUpID4+IDhVKSB8ICgoc2Rfc3RhdHVzWzFdICYgMHhGRjAwMDAwMFUpID4+IDI0VSkpOworCisgICAgcFN0YXR1cy0+U3BlZWRDbGFzcyA9ICh1aW50OF90KShzZF9zdGF0dXNbMl0gJiAweEZGVSk7CisKKyAgICBwU3RhdHVzLT5QZXJmb3JtYW5jZU1vdmUgPSAodWludDhfdCkoKHNkX3N0YXR1c1syXSAmIDB4RkYwMFUpID4+IDhVKTsKKworICAgIHBTdGF0dXMtPkFsbG9jYXRpb25Vbml0U2l6ZSA9ICh1aW50OF90KSgoc2Rfc3RhdHVzWzJdICYgMHhGMDAwMDBVKSA+PiAyMFUpOworCisgICAgcFN0YXR1cy0+RXJhc2VTaXplID0gKHVpbnQxNl90KSgoKHNkX3N0YXR1c1syXSAmIDB4RkYwMDAwMDBVKSA+PiAxNlUpIHwgKHNkX3N0YXR1c1szXSAmIDB4RkZVKSk7CisKKyAgICBwU3RhdHVzLT5FcmFzZVRpbWVvdXQgPSAodWludDhfdCkoKHNkX3N0YXR1c1szXSAmIDB4RkMwMFUpID4+IDEwVSk7CisKKyAgICBwU3RhdHVzLT5FcmFzZU9mZnNldCA9ICh1aW50OF90KSgoc2Rfc3RhdHVzWzNdICYgMHgwMzAwVSkgPj4gOFUpOwogICB9Ci0gIAorCiAgIHJldHVybiBIQUxfT0s7CiB9CiAKIC8qKgogICAqIEBicmllZiAgR2V0cyB0aGUgU0QgY2FyZCBpbmZvLgotICAqIEBwYXJhbSAgaHNkIFBvaW50ZXIgdG8gU0QgaGFuZGxlICAgICAgCi0gICogQHBhcmFtICBwQ2FyZEluZm8gUG9pbnRlciB0byB0aGUgSEFMX1NEX0NhcmRJbmZvVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCAKLSAgKiAgICAgICAgIHdpbGwgY29udGFpbiB0aGUgU0QgY2FyZCBzdGF0dXMgaW5mb3JtYXRpb24gCisgICogQHBhcmFtICBoc2Q6IFBvaW50ZXIgdG8gU0QgaGFuZGxlCisgICogQHBhcmFtICBwQ2FyZEluZm86IFBvaW50ZXIgdG8gdGhlIEhBTF9TRF9DYXJkSW5mb1R5cGVEZWYgc3RydWN0dXJlIHRoYXQKKyAgKiAgICAgICAgIHdpbGwgY29udGFpbiB0aGUgU0QgY2FyZCBzdGF0dXMgaW5mb3JtYXRpb24KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9TRF9HZXRDYXJkSW5mbyhTRF9IYW5kbGVUeXBlRGVmICpoc2QsIEhBTF9TRF9DYXJkSW5mb1R5cGVEZWYgKnBDYXJkSW5mbykKQEAgLTIzMTMsMTUgKzIyNTEsMTUgQEAKICAgcENhcmRJbmZvLT5CbG9ja1NpemUgICAgPSAodWludDMyX3QpKGhzZC0+U2RDYXJkLkJsb2NrU2l6ZSk7CiAgIHBDYXJkSW5mby0+TG9nQmxvY2tOYnIgID0gKHVpbnQzMl90KShoc2QtPlNkQ2FyZC5Mb2dCbG9ja05icik7CiAgIHBDYXJkSW5mby0+TG9nQmxvY2tTaXplID0gKHVpbnQzMl90KShoc2QtPlNkQ2FyZC5Mb2dCbG9ja1NpemUpOwotICAKKwogICByZXR1cm4gSEFMX09LOwogfQogCiAvKioKLSAgKiBAYnJpZWYgIEVuYWJsZXMgd2lkZSBidXMgb3BlcmF0aW9uIGZvciB0aGUgcmVxdWVzdGVkIGNhcmQgaWYgc3VwcG9ydGVkIGJ5IAorICAqIEBicmllZiAgRW5hYmxlcyB3aWRlIGJ1cyBvcGVyYXRpb24gZm9yIHRoZSByZXF1ZXN0ZWQgY2FyZCBpZiBzdXBwb3J0ZWQgYnkKICAgKiAgICAgICAgIGNhcmQuCi0gICogQHBhcmFtICBoc2QgUG9pbnRlciB0byBTRCBoYW5kbGUgICAgICAgCi0gICogQHBhcmFtICBXaWRlTW9kZSBTcGVjaWZpZXMgdGhlIFNEIGNhcmQgd2lkZSBidXMgbW9kZSAKKyAgKiBAcGFyYW0gIGhzZDogUG9pbnRlciB0byBTRCBoYW5kbGUKKyAgKiBAcGFyYW0gIFdpZGVNb2RlOiBTcGVjaWZpZXMgdGhlIFNEIGNhcmQgd2lkZSBidXMgbW9kZQogICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAgICogICAgICAgICAgICBAYXJnIFNESU9fQlVTX1dJREVfOEI6IDgtYml0IGRhdGEgdHJhbnNmZXIKICAgKiAgICAgICAgICAgIEBhcmcgU0RJT19CVVNfV0lERV80QjogNC1iaXQgZGF0YSB0cmFuc2ZlcgpAQCAtMjMzMSwxNSArMjI2OSwxNSBAQAogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1NEX0NvbmZpZ1dpZGVCdXNPcGVyYXRpb24oU0RfSGFuZGxlVHlwZURlZiAqaHNkLCB1aW50MzJfdCBXaWRlTW9kZSkKIHsKICAgU0RJT19Jbml0VHlwZURlZiBJbml0OwotICB1aW50MzJfdCBlcnJvcnN0YXRlID0gSEFMX1NEX0VSUk9SX05PTkU7Ci0gIAorICB1aW50MzJfdCBlcnJvcnN0YXRlOworCiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19TRElPX0JVU19XSURFKFdpZGVNb2RlKSk7Ci0gIAotICAvKiBDaG5hZ2UgU2F0dGUgKi8KKworICAvKiBDaGFuZ2UgU3RhdGUgKi8KICAgaHNkLT5TdGF0ZSA9IEhBTF9TRF9TVEFURV9CVVNZOwotICAKLSAgaWYoaHNkLT5TZENhcmQuQ2FyZFR5cGUgIT0gQ0FSRF9TRUNVUkVEKSAKKworICBpZihoc2QtPlNkQ2FyZC5DYXJkVHlwZSAhPSBDQVJEX1NFQ1VSRUQpCiAgIHsKICAgICBpZihXaWRlTW9kZSA9PSBTRElPX0JVU19XSURFXzhCKQogICAgIHsKQEAgLTIzNDgsMTMgKzIyODYsMTMgQEAKICAgICBlbHNlIGlmKFdpZGVNb2RlID09IFNESU9fQlVTX1dJREVfNEIpCiAgICAgewogICAgICAgZXJyb3JzdGF0ZSA9IFNEX1dpZGVCdXNfRW5hYmxlKGhzZCk7Ci0gICAgICAKKwogICAgICAgaHNkLT5FcnJvckNvZGUgfD0gZXJyb3JzdGF0ZTsKICAgICB9CiAgICAgZWxzZSBpZihXaWRlTW9kZSA9PSBTRElPX0JVU19XSURFXzFCKQogICAgIHsKICAgICAgIGVycm9yc3RhdGUgPSBTRF9XaWRlQnVzX0Rpc2FibGUoaHNkKTsKLSAgICAgIAorCiAgICAgICBoc2QtPkVycm9yQ29kZSB8PSBlcnJvcnN0YXRlOwogICAgIH0KICAgICBlbHNlCkBAIC0yMzYyLDEzICsyMzAwLDEzIEBACiAgICAgICAvKiBXaWRlTW9kZSBpcyBub3QgYSB2YWxpZCBhcmd1bWVudCovCiAgICAgICBoc2QtPkVycm9yQ29kZSB8PSBIQUxfU0RfRVJST1JfUEFSQU07CiAgICAgfQotICB9ICAKKyAgfQogICBlbHNlCiAgIHsKICAgICAvKiBNTUMgQ2FyZCBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZSAqLwogICAgIGhzZC0+RXJyb3JDb2RlIHw9IEhBTF9TRF9FUlJPUl9VTlNVUFBPUlRFRF9GRUFUVVJFOwogICB9Ci0gIAorCiAgIGlmKGhzZC0+RXJyb3JDb2RlICE9IEhBTF9TRF9FUlJPUl9OT05FKQogICB7CiAgICAgLyogQ2xlYXIgYWxsIHRoZSBzdGF0aWMgZmxhZ3MgKi8KQEAgLTIzODUsNzMgKzIzMjMsODkgQEAKICAgICBJbml0LkJ1c1dpZGUgICAgICAgICAgICAgPSBXaWRlTW9kZTsKICAgICBJbml0LkhhcmR3YXJlRmxvd0NvbnRyb2wgPSBoc2QtPkluaXQuSGFyZHdhcmVGbG93Q29udHJvbDsKICAgICBJbml0LkNsb2NrRGl2ICAgICAgICAgICAgPSBoc2QtPkluaXQuQ2xvY2tEaXY7Ci0gICAgU0RJT19Jbml0KGhzZC0+SW5zdGFuY2UsIEluaXQpOworICAgICh2b2lkKVNESU9fSW5pdChoc2QtPkluc3RhbmNlLCBJbml0KTsKICAgfQogCiAgIC8qIENoYW5nZSBTdGF0ZSAqLwogICBoc2QtPlN0YXRlID0gSEFMX1NEX1NUQVRFX1JFQURZOwotICAKKwogICByZXR1cm4gSEFMX09LOwogfQogCi0KIC8qKgogICAqIEBicmllZiAgR2V0cyB0aGUgY3VycmVudCBzZCBjYXJkIGRhdGEgc3RhdGUuCi0gICogQHBhcmFtICBoc2QgcG9pbnRlciB0byBTRCBoYW5kbGUKKyAgKiBAcGFyYW0gIGhzZDogcG9pbnRlciB0byBTRCBoYW5kbGUKICAgKiBAcmV0dmFsIENhcmQgc3RhdGUKICAgKi8KIEhBTF9TRF9DYXJkU3RhdGVUeXBlRGVmIEhBTF9TRF9HZXRDYXJkU3RhdGUoU0RfSGFuZGxlVHlwZURlZiAqaHNkKQogewotICBIQUxfU0RfQ2FyZFN0YXRlVHlwZURlZiBjYXJkc3RhdGUgPSAgSEFMX1NEX0NBUkRfVFJBTlNGRVI7Ci0gIHVpbnQzMl90IGVycm9yc3RhdGUgPSBIQUxfU0RfRVJST1JfTk9ORTsKKyAgdWludDMyX3QgY2FyZHN0YXRlOworICB1aW50MzJfdCBlcnJvcnN0YXRlOwogICB1aW50MzJfdCByZXNwMSA9IDA7Ci0gIAorCiAgIGVycm9yc3RhdGUgPSBTRF9TZW5kU3RhdHVzKGhzZCwgJnJlc3AxKTsKLSAgaWYoZXJyb3JzdGF0ZSAhPSBIQUxfT0spCisgIGlmKGVycm9yc3RhdGUgIT0gSEFMX1NEX0VSUk9SX05PTkUpCiAgIHsKICAgICBoc2QtPkVycm9yQ29kZSB8PSBlcnJvcnN0YXRlOwogICB9CiAKLSAgY2FyZHN0YXRlID0gKEhBTF9TRF9DYXJkU3RhdGVUeXBlRGVmKSgocmVzcDEgPj4gOVUpICYgMHgwRlUpOwotICAKLSAgcmV0dXJuIGNhcmRzdGF0ZTsKKyAgY2FyZHN0YXRlID0gKChyZXNwMSA+PiA5VSkgJiAweDBGVSk7CisKKyAgcmV0dXJuIChIQUxfU0RfQ2FyZFN0YXRlVHlwZURlZiljYXJkc3RhdGU7CiB9CiAKIC8qKgogICAqIEBicmllZiAgQWJvcnQgdGhlIGN1cnJlbnQgdHJhbnNmZXIgYW5kIGRpc2FibGUgdGhlIFNELgotICAqIEBwYXJhbSAgaHNkIHBvaW50ZXIgdG8gYSBTRF9IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCisgICogQHBhcmFtICBoc2Q6IHBvaW50ZXIgdG8gYSBTRF9IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCiAgICogICAgICAgICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIFNEIG1vZHVsZS4KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9TRF9BYm9ydChTRF9IYW5kbGVUeXBlRGVmICpoc2QpCiB7CiAgIEhBTF9TRF9DYXJkU3RhdGVUeXBlRGVmIENhcmRTdGF0ZTsKLSAgCisgIHVpbnQzMl90IGNvbnRleHQgPSBoc2QtPkNvbnRleHQ7CisKICAgLyogRElzYWJsZSBBbGwgaW50ZXJydXB0cyAqLwogICBfX0hBTF9TRF9ESVNBQkxFX0lUKGhzZCwgU0RJT19JVF9EQVRBRU5EIHwgU0RJT19JVF9EQ1JDRkFJTCB8IFNESU9fSVRfRFRJTUVPVVR8XAogICAgICAgICAgICAgICAgICAgICAgICAgICAgU0RJT19JVF9UWFVOREVSUnwgU0RJT19JVF9SWE9WRVJSKTsKLSAgCisKICAgLyogQ2xlYXIgQWxsIGZsYWdzICovCi0gIF9fSEFMX1NEX0NMRUFSX0ZMQUcoaHNkLCBTRElPX1NUQVRJQ19GTEFHUyk7Ci0gIAotICBpZigoaHNkLT5oZG1hdHggIT0gTlVMTCkgfHwgKGhzZC0+aGRtYXJ4ICE9IE5VTEwpKQorICBfX0hBTF9TRF9DTEVBUl9GTEFHKGhzZCwgU0RJT19TVEFUSUNfREFUQV9GTEFHUyk7CisKKyAgQ0xFQVJfQklUKGhzZC0+SW5zdGFuY2UtPkRDVFJMLCBTRElPX0RDVFJMX0RURU4pOworCisgIGlmICgoY29udGV4dCAmIFNEX0NPTlRFWFRfRE1BKSAhPSAwVSkKICAgewogICAgIC8qIERpc2FibGUgdGhlIFNEIERNQSByZXF1ZXN0ICovCiAgICAgaHNkLT5JbnN0YW5jZS0+RENUUkwgJj0gKHVpbnQzMl90KX4oKHVpbnQzMl90KVNESU9fRENUUkxfRE1BRU4pOwotICAgIAotICAgIC8qIEFib3J0IHRoZSBTRCBETUEgVHggU3RyZWFtICovCi0gICAgaWYoaHNkLT5oZG1hdHggIT0gTlVMTCkKKworICAgIC8qIEFib3J0IHRoZSBTRCBETUEgVHggY2hhbm5lbCAqLworICAgIGlmICgoKGNvbnRleHQgJiBTRF9DT05URVhUX1dSSVRFX1NJTkdMRV9CTE9DSykgIT0gMFUpIHx8ICgoY29udGV4dCAmIFNEX0NPTlRFWFRfV1JJVEVfTVVMVElQTEVfQkxPQ0spICE9IDBVKSkKICAgICB7Ci0gICAgICBIQUxfRE1BX0Fib3J0KGhzZC0+aGRtYXR4KTsKKyAgICAgIGlmKEhBTF9ETUFfQWJvcnQoaHNkLT5oZG1hdHgpICE9IEhBTF9PSykKKyAgICAgIHsKKyAgICAgICAgaHNkLT5FcnJvckNvZGUgfD0gSEFMX1NEX0VSUk9SX0RNQTsKKyAgICAgIH0KICAgICB9Ci0gICAgLyogQWJvcnQgdGhlIFNEIERNQSBSeCBTdHJlYW0gKi8KLSAgICBpZihoc2QtPmhkbWFyeCAhPSBOVUxMKQorICAgIC8qIEFib3J0IHRoZSBTRCBETUEgUnggY2hhbm5lbCAqLworICAgIGVsc2UgaWYgKCgoY29udGV4dCAmIFNEX0NPTlRFWFRfUkVBRF9TSU5HTEVfQkxPQ0spICE9IDBVKSB8fCAoKGNvbnRleHQgJiBTRF9DT05URVhUX1JFQURfTVVMVElQTEVfQkxPQ0spICE9IDBVKSkKICAgICB7Ci0gICAgICBIQUxfRE1BX0Fib3J0KGhzZC0+aGRtYXJ4KTsKKyAgICAgIGlmKEhBTF9ETUFfQWJvcnQoaHNkLT5oZG1hcngpICE9IEhBTF9PSykKKyAgICAgIHsKKyAgICAgICAgaHNkLT5FcnJvckNvZGUgfD0gSEFMX1NEX0VSUk9SX0RNQTsKKyAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIC8qIE5vdGhpbmcgdG8gZG8gKi8KICAgICB9CiAgIH0KLSAgCisKICAgaHNkLT5TdGF0ZSA9IEhBTF9TRF9TVEFURV9SRUFEWTsKKworICAvKiBJbml0aWFsaXplIHRoZSBTRCBvcGVyYXRpb24gKi8KKyAgaHNkLT5Db250ZXh0ID0gU0RfQ09OVEVYVF9OT05FOworCiAgIENhcmRTdGF0ZSA9IEhBTF9TRF9HZXRDYXJkU3RhdGUoaHNkKTsKICAgaWYoKENhcmRTdGF0ZSA9PSBIQUxfU0RfQ0FSRF9SRUNFSVZJTkcpIHx8IChDYXJkU3RhdGUgPT0gSEFMX1NEX0NBUkRfU0VORElORykpCiAgIHsKQEAgLTI0NjYsNTEgKzI0MjAsNTggQEAKIAogLyoqCiAgICogQGJyaWVmICBBYm9ydCB0aGUgY3VycmVudCB0cmFuc2ZlciBhbmQgZGlzYWJsZSB0aGUgU0QgKElUIG1vZGUpLgotICAqIEBwYXJhbSAgaHNkIHBvaW50ZXIgdG8gYSBTRF9IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCisgICogQHBhcmFtICBoc2Q6IHBvaW50ZXIgdG8gYSBTRF9IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCiAgICogICAgICAgICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIFNEIG1vZHVsZS4KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9TRF9BYm9ydF9JVChTRF9IYW5kbGVUeXBlRGVmICpoc2QpCiB7CiAgIEhBTF9TRF9DYXJkU3RhdGVUeXBlRGVmIENhcmRTdGF0ZTsKLSAgICAKLSAgLyogRElzYWJsZSBBbGwgaW50ZXJydXB0cyAqLworICB1aW50MzJfdCBjb250ZXh0ID0gaHNkLT5Db250ZXh0OworCisgIC8qIERpc2FibGUgQWxsIGludGVycnVwdHMgKi8KICAgX19IQUxfU0RfRElTQUJMRV9JVChoc2QsIFNESU9fSVRfREFUQUVORCB8IFNESU9fSVRfRENSQ0ZBSUwgfCBTRElPX0lUX0RUSU1FT1VUfFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNESU9fSVRfVFhVTkRFUlJ8IFNESU9fSVRfUlhPVkVSUik7Ci0gIAotICAvKiBDbGVhciBBbGwgZmxhZ3MgKi8KLSAgX19IQUxfU0RfQ0xFQVJfRkxBRyhoc2QsIFNESU9fU1RBVElDX0ZMQUdTKTsKLSAgCi0gIGlmKChoc2QtPmhkbWF0eCAhPSBOVUxMKSB8fCAoaHNkLT5oZG1hcnggIT0gTlVMTCkpCisKKyAgQ0xFQVJfQklUKGhzZC0+SW5zdGFuY2UtPkRDVFJMLCBTRElPX0RDVFJMX0RURU4pOworCisgIGlmICgoY29udGV4dCAmIFNEX0NPTlRFWFRfRE1BKSAhPSAwVSkKICAgewogICAgIC8qIERpc2FibGUgdGhlIFNEIERNQSByZXF1ZXN0ICovCiAgICAgaHNkLT5JbnN0YW5jZS0+RENUUkwgJj0gKHVpbnQzMl90KX4oKHVpbnQzMl90KVNESU9fRENUUkxfRE1BRU4pOwotICAgIAotICAgIC8qIEFib3J0IHRoZSBTRCBETUEgVHggU3RyZWFtICovCi0gICAgaWYoaHNkLT5oZG1hdHggIT0gTlVMTCkKKworICAgIC8qIEFib3J0IHRoZSBTRCBETUEgVHggY2hhbm5lbCAqLworICAgIGlmICgoKGNvbnRleHQgJiBTRF9DT05URVhUX1dSSVRFX1NJTkdMRV9CTE9DSykgIT0gMFUpIHx8ICgoY29udGV4dCAmIFNEX0NPTlRFWFRfV1JJVEVfTVVMVElQTEVfQkxPQ0spICE9IDBVKSkKICAgICB7Ci0gICAgICBoc2QtPmhkbWF0eC0+WGZlckFib3J0Q2FsbGJhY2sgPSAgU0RfRE1BVHhBYm9ydDsKKyAgICAgIGhzZC0+aGRtYXR4LT5YZmVyQWJvcnRDYWxsYmFjayA9IFNEX0RNQVR4QWJvcnQ7CiAgICAgICBpZihIQUxfRE1BX0Fib3J0X0lUKGhzZC0+aGRtYXR4KSAhPSBIQUxfT0spCiAgICAgICB7CiAgICAgICAgIGhzZC0+aGRtYXR4ID0gTlVMTDsKICAgICAgIH0KICAgICB9Ci0gICAgLyogQWJvcnQgdGhlIFNEIERNQSBSeCBTdHJlYW0gKi8KLSAgICBpZihoc2QtPmhkbWFyeCAhPSBOVUxMKQorICAgIC8qIEFib3J0IHRoZSBTRCBETUEgUnggY2hhbm5lbCAqLworICAgIGVsc2UgaWYgKCgoY29udGV4dCAmIFNEX0NPTlRFWFRfUkVBRF9TSU5HTEVfQkxPQ0spICE9IDBVKSB8fCAoKGNvbnRleHQgJiBTRF9DT05URVhUX1JFQURfTVVMVElQTEVfQkxPQ0spICE9IDBVKSkKICAgICB7Ci0gICAgICBoc2QtPmhkbWFyeC0+WGZlckFib3J0Q2FsbGJhY2sgPSAgU0RfRE1BUnhBYm9ydDsKKyAgICAgIGhzZC0+aGRtYXJ4LT5YZmVyQWJvcnRDYWxsYmFjayA9IFNEX0RNQVJ4QWJvcnQ7CiAgICAgICBpZihIQUxfRE1BX0Fib3J0X0lUKGhzZC0+aGRtYXJ4KSAhPSBIQUxfT0spCiAgICAgICB7CiAgICAgICAgIGhzZC0+aGRtYXJ4ID0gTlVMTDsKICAgICAgIH0KICAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIC8qIE5vdGhpbmcgdG8gZG8gKi8KKyAgICB9CiAgIH0KLSAgCiAgIC8qIE5vIHRyYW5zZmVyIG9uZ29pbmcgb24gYm90aCBETUEgY2hhbm5lbHMqLwotICBpZigoaHNkLT5oZG1hdHggPT0gTlVMTCkgJiYgKGhzZC0+aGRtYXJ4ID09IE5VTEwpKQorICBlbHNlCiAgIHsKKyAgICAvKiBDbGVhciBBbGwgZmxhZ3MgKi8KKyAgICBfX0hBTF9TRF9DTEVBUl9GTEFHKGhzZCwgU0RJT19TVEFUSUNfREFUQV9GTEFHUyk7CisKICAgICBDYXJkU3RhdGUgPSBIQUxfU0RfR2V0Q2FyZFN0YXRlKGhzZCk7CiAgICAgaHNkLT5TdGF0ZSA9IEhBTF9TRF9TVEFURV9SRUFEWTsKKyAgICBoc2QtPkNvbnRleHQgPSBTRF9DT05URVhUX05PTkU7CiAgICAgaWYoKENhcmRTdGF0ZSA9PSBIQUxfU0RfQ0FSRF9SRUNFSVZJTkcpIHx8IChDYXJkU3RhdGUgPT0gSEFMX1NEX0NBUkRfU0VORElORykpCiAgICAgewogICAgICAgaHNkLT5FcnJvckNvZGUgPSBTRE1NQ19DbWRTdG9wVHJhbnNmZXIoaHNkLT5JbnN0YW5jZSk7CkBAIC0yNTIxLDUzICsyNDgyLDUzIEBACiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0jaWYgKFVTRV9IQUxfU0RfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCisjaWYgZGVmaW5lZCAoVVNFX0hBTF9TRF9SRUdJU1RFUl9DQUxMQkFDS1MpICYmIChVU0VfSEFMX1NEX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxVSkKICAgICAgIGhzZC0+QWJvcnRDcGx0Q2FsbGJhY2soaHNkKTsKICNlbHNlCiAgICAgICBIQUxfU0RfQWJvcnRDYWxsYmFjayhoc2QpOwotI2VuZGlmCisjZW5kaWYgLyogVVNFX0hBTF9TRF9SRUdJU1RFUl9DQUxMQkFDS1MgKi8KICAgICB9CiAgIH0KLSAgCisKICAgcmV0dXJuIEhBTF9PSzsKIH0KIAogLyoqCiAgICogQH0KICAgKi8KLSAgCisKIC8qKgogICAqIEB9CiAgICovCi0gIAotLyogUHJpdmF0ZSBmdW5jdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8gIAorCisvKiBQcml2YXRlIGZ1bmN0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyoqIEBhZGR0b2dyb3VwIFNEX1ByaXZhdGVfRnVuY3Rpb25zCiAgICogQHsKICAgKi8KIAogLyoqCi0gICogQGJyaWVmICBETUEgU0QgdHJhbnNtaXQgcHJvY2VzcyBjb21wbGV0ZSBjYWxsYmFjayAKLSAgKiBAcGFyYW0gIGhkbWEgRE1BIGhhbmRsZQorICAqIEBicmllZiAgRE1BIFNEIHRyYW5zbWl0IHByb2Nlc3MgY29tcGxldGUgY2FsbGJhY2sKKyAgKiBAcGFyYW0gIGhkbWE6IERNQSBoYW5kbGUKICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KLXN0YXRpYyB2b2lkIFNEX0RNQVRyYW5zbWl0Q3BsdChETUFfSGFuZGxlVHlwZURlZiAqaGRtYSkgICAgIAorc3RhdGljIHZvaWQgU0RfRE1BVHJhbnNtaXRDcGx0KERNQV9IYW5kbGVUeXBlRGVmICpoZG1hKQogewogICBTRF9IYW5kbGVUeXBlRGVmKiBoc2QgPSAoU0RfSGFuZGxlVHlwZURlZiogKShoZG1hLT5QYXJlbnQpOwotICAKKwogICAvKiBFbmFibGUgREFUQUVORCBJbnRlcnJ1cHQgKi8KICAgX19IQUxfU0RfRU5BQkxFX0lUKGhzZCwgKFNESU9fSVRfREFUQUVORCkpOwogfQogCiAvKioKLSAgKiBAYnJpZWYgIERNQSBTRCByZWNlaXZlIHByb2Nlc3MgY29tcGxldGUgY2FsbGJhY2sgCi0gICogQHBhcmFtICBoZG1hIERNQSBoYW5kbGUKKyAgKiBAYnJpZWYgIERNQSBTRCByZWNlaXZlIHByb2Nlc3MgY29tcGxldGUgY2FsbGJhY2sKKyAgKiBAcGFyYW0gIGhkbWE6IERNQSBoYW5kbGUKICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KLXN0YXRpYyB2b2lkIFNEX0RNQVJlY2VpdmVDcGx0KERNQV9IYW5kbGVUeXBlRGVmICpoZG1hKSAgCitzdGF0aWMgdm9pZCBTRF9ETUFSZWNlaXZlQ3BsdChETUFfSGFuZGxlVHlwZURlZiAqaGRtYSkKIHsKICAgU0RfSGFuZGxlVHlwZURlZiogaHNkID0gKFNEX0hhbmRsZVR5cGVEZWYqICkoaGRtYS0+UGFyZW50KTsKLSAgdWludDMyX3QgZXJyb3JzdGF0ZSA9IEhBTF9TRF9FUlJPUl9OT05FOwotICAKKyAgdWludDMyX3QgZXJyb3JzdGF0ZTsKKwogICAvKiBTZW5kIHN0b3AgY29tbWFuZCBpbiBtdWx0aWJsb2NrIHdyaXRlICovCiAgIGlmKGhzZC0+Q29udGV4dCA9PSAoU0RfQ09OVEVYVF9SRUFEX01VTFRJUExFX0JMT0NLIHwgU0RfQ09OVEVYVF9ETUEpKQogICB7CkBAIC0yNTgyLDE1ICsyNTQzLDE2IEBACiAjZW5kaWYKICAgICB9CiAgIH0KLSAgCisKICAgLyogRGlzYWJsZSB0aGUgRE1BIHRyYW5zZmVyIGZvciB0cmFuc21pdCByZXF1ZXN0IGJ5IHNldHRpbmcgdGhlIERNQUVOIGJpdAogICBpbiB0aGUgU0QgRENUUkwgcmVnaXN0ZXIgKi8KICAgaHNkLT5JbnN0YW5jZS0+RENUUkwgJj0gKHVpbnQzMl90KX4oKHVpbnQzMl90KVNESU9fRENUUkxfRE1BRU4pOwotICAKKwogICAvKiBDbGVhciBhbGwgdGhlIHN0YXRpYyBmbGFncyAqLwotICBfX0hBTF9TRF9DTEVBUl9GTEFHKGhzZCwgU0RJT19TVEFUSUNfRkxBR1MpOwotICAKKyAgX19IQUxfU0RfQ0xFQVJfRkxBRyhoc2QsIFNESU9fU1RBVElDX0RBVEFfRkxBR1MpOworCiAgIGhzZC0+U3RhdGUgPSBIQUxfU0RfU1RBVEVfUkVBRFk7CisgIGhzZC0+Q29udGV4dCA9IFNEX0NPTlRFWFRfTk9ORTsKIAogI2lmIChVU0VfSEFMX1NEX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxKQogICBoc2QtPlJ4Q3BsdENhbGxiYWNrKGhzZCk7CkBAIC0yNjAwLDE1MSArMjU2MiwxNDYgQEAKIH0KIAogLyoqCi0gICogQGJyaWVmICBETUEgU0QgY29tbXVuaWNhdGlvbiBlcnJvciBjYWxsYmFjayAKLSAgKiBAcGFyYW0gIGhkbWEgRE1BIGhhbmRsZQorICAqIEBicmllZiAgRE1BIFNEIGNvbW11bmljYXRpb24gZXJyb3IgY2FsbGJhY2sKKyAgKiBAcGFyYW0gIGhkbWE6IERNQSBoYW5kbGUKICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KLXN0YXRpYyB2b2lkIFNEX0RNQUVycm9yKERNQV9IYW5kbGVUeXBlRGVmICpoZG1hKSAgIAorc3RhdGljIHZvaWQgU0RfRE1BRXJyb3IoRE1BX0hhbmRsZVR5cGVEZWYgKmhkbWEpCiB7CiAgIFNEX0hhbmRsZVR5cGVEZWYqIGhzZCA9IChTRF9IYW5kbGVUeXBlRGVmKiApKGhkbWEtPlBhcmVudCk7CiAgIEhBTF9TRF9DYXJkU3RhdGVUeXBlRGVmIENhcmRTdGF0ZTsKLSAgCi0gIGlmKChoc2QtPmhkbWFyeC0+RXJyb3JDb2RlID09IEhBTF9ETUFfRVJST1JfVEUpIHx8IChoc2QtPmhkbWF0eC0+RXJyb3JDb2RlID09IEhBTF9ETUFfRVJST1JfVEUpKQorICB1aW50MzJfdCBSeEVycm9yQ29kZSwgVHhFcnJvckNvZGU7CisKKyAgLyogaWYgRE1BIGVycm9yIGlzIEZJRk8gZXJyb3IgaWdub3JlIGl0ICovCisgIGlmKEhBTF9ETUFfR2V0RXJyb3IoaGRtYSkgIT0gSEFMX0RNQV9FUlJPUl9GRSkKICAgewotICAgIC8qIENsZWFyIEFsbCBmbGFncyAqLwotICAgIF9fSEFMX1NEX0NMRUFSX0ZMQUcoaHNkLCBTRElPX1NUQVRJQ19GTEFHUyk7Ci0gICAgCi0gICAgLyogRGlzYWJsZSBBbGwgaW50ZXJydXB0cyAqLwotICAgIF9fSEFMX1NEX0RJU0FCTEVfSVQoaHNkLCBTRElPX0lUX0RBVEFFTkQgfCBTRElPX0lUX0RDUkNGQUlMIHwgU0RJT19JVF9EVElNRU9VVHxcCi0gICAgICBTRElPX0lUX1RYVU5ERVJSfCBTRElPX0lUX1JYT1ZFUlIpOwotICAgIAotICAgIGhzZC0+RXJyb3JDb2RlIHw9IEhBTF9TRF9FUlJPUl9ETUE7Ci0gICAgQ2FyZFN0YXRlID0gSEFMX1NEX0dldENhcmRTdGF0ZShoc2QpOwotICAgIGlmKChDYXJkU3RhdGUgPT0gSEFMX1NEX0NBUkRfUkVDRUlWSU5HKSB8fCAoQ2FyZFN0YXRlID09IEhBTF9TRF9DQVJEX1NFTkRJTkcpKQorICAgIFJ4RXJyb3JDb2RlID0gaHNkLT5oZG1hcngtPkVycm9yQ29kZTsKKyAgICBUeEVycm9yQ29kZSA9IGhzZC0+aGRtYXR4LT5FcnJvckNvZGU7ICAKKyAgICBpZigoUnhFcnJvckNvZGUgPT0gSEFMX0RNQV9FUlJPUl9URSkgfHwgKFR4RXJyb3JDb2RlID09IEhBTF9ETUFfRVJST1JfVEUpKQogICAgIHsKLSAgICAgIGhzZC0+RXJyb3JDb2RlIHw9IFNETU1DX0NtZFN0b3BUcmFuc2Zlcihoc2QtPkluc3RhbmNlKTsKKyAgICAgIC8qIENsZWFyIEFsbCBmbGFncyAqLworICAgICAgX19IQUxfU0RfQ0xFQVJfRkxBRyhoc2QsIFNESU9fU1RBVElDX0ZMQUdTKTsKKworICAgICAgLyogRGlzYWJsZSBBbGwgaW50ZXJydXB0cyAqLworICAgICAgX19IQUxfU0RfRElTQUJMRV9JVChoc2QsIFNESU9fSVRfREFUQUVORCB8IFNESU9fSVRfRENSQ0ZBSUwgfCBTRElPX0lUX0RUSU1FT1VUfFwKKyAgICAgICAgU0RJT19JVF9UWFVOREVSUnwgU0RJT19JVF9SWE9WRVJSKTsKKworICAgICAgaHNkLT5FcnJvckNvZGUgfD0gSEFMX1NEX0VSUk9SX0RNQTsKKyAgICAgIENhcmRTdGF0ZSA9IEhBTF9TRF9HZXRDYXJkU3RhdGUoaHNkKTsKKyAgICAgIGlmKChDYXJkU3RhdGUgPT0gSEFMX1NEX0NBUkRfUkVDRUlWSU5HKSB8fCAoQ2FyZFN0YXRlID09IEhBTF9TRF9DQVJEX1NFTkRJTkcpKQorICAgICAgeworICAgICAgICBoc2QtPkVycm9yQ29kZSB8PSBTRE1NQ19DbWRTdG9wVHJhbnNmZXIoaHNkLT5JbnN0YW5jZSk7CisgICAgICB9CisKKyAgICAgIGhzZC0+U3RhdGU9IEhBTF9TRF9TVEFURV9SRUFEWTsKKyAgICAgIGhzZC0+Q29udGV4dCA9IFNEX0NPTlRFWFRfTk9ORTsKICAgICB9Ci0gICAgCi0gICAgaHNkLT5TdGF0ZT0gSEFMX1NEX1NUQVRFX1JFQURZOwotICB9CiAKICNpZiAoVVNFX0hBTF9TRF9SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkKICAgICBoc2QtPkVycm9yQ2FsbGJhY2soaHNkKTsKICNlbHNlCi0gIEhBTF9TRF9FcnJvckNhbGxiYWNrKGhzZCk7CisgICAgSEFMX1NEX0Vycm9yQ2FsbGJhY2soaHNkKTsKICNlbmRpZgotfQotCi0vKioKLSAgKiBAYnJpZWYgIERNQSBTRCBUeCBBYm9ydCBjYWxsYmFjayAKLSAgKiBAcGFyYW0gIGhkbWEgRE1BIGhhbmRsZQotICAqIEByZXR2YWwgTm9uZQotICAqLwotc3RhdGljIHZvaWQgU0RfRE1BVHhBYm9ydChETUFfSGFuZGxlVHlwZURlZiAqaGRtYSkgICAKLXsKLSAgU0RfSGFuZGxlVHlwZURlZiogaHNkID0gKFNEX0hhbmRsZVR5cGVEZWYqICkoaGRtYS0+UGFyZW50KTsKLSAgSEFMX1NEX0NhcmRTdGF0ZVR5cGVEZWYgQ2FyZFN0YXRlOwotICAKLSAgaWYoaHNkLT5oZG1hdHggIT0gTlVMTCkKLSAgewotICAgIGhzZC0+aGRtYXR4ID0gTlVMTDsKLSAgfQotICAKLSAgLyogQWxsIERNQSBjaGFubmVscyBhcmUgYWJvcnRlZCAqLwotICBpZihoc2QtPmhkbWFyeCA9PSBOVUxMKQotICB7Ci0gICAgQ2FyZFN0YXRlID0gSEFMX1NEX0dldENhcmRTdGF0ZShoc2QpOwotICAgIGhzZC0+RXJyb3JDb2RlID0gSEFMX1NEX0VSUk9SX05PTkU7Ci0gICAgaHNkLT5TdGF0ZSA9IEhBTF9TRF9TVEFURV9SRUFEWTsKLSAgICBpZigoQ2FyZFN0YXRlID09IEhBTF9TRF9DQVJEX1JFQ0VJVklORykgfHwgKENhcmRTdGF0ZSA9PSBIQUxfU0RfQ0FSRF9TRU5ESU5HKSkKLSAgICB7Ci0gICAgICBoc2QtPkVycm9yQ29kZSB8PSBTRE1NQ19DbWRTdG9wVHJhbnNmZXIoaHNkLT5JbnN0YW5jZSk7Ci0gICAgICAKLSAgICAgIGlmKGhzZC0+RXJyb3JDb2RlICE9IEhBTF9TRF9FUlJPUl9OT05FKQotICAgICAgewotI2lmIChVU0VfSEFMX1NEX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxKQotICAgICAgICBoc2QtPkFib3J0Q3BsdENhbGxiYWNrKGhzZCk7Ci0jZWxzZQotICAgICAgICBIQUxfU0RfQWJvcnRDYWxsYmFjayhoc2QpOwotI2VuZGlmCi0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0jaWYgKFVTRV9IQUxfU0RfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCi0gICAgICAgIGhzZC0+RXJyb3JDYWxsYmFjayhoc2QpOwotI2Vsc2UKLSAgICAgICAgSEFMX1NEX0Vycm9yQ2FsbGJhY2soaHNkKTsKLSNlbmRpZgotICAgICAgfQotICAgIH0KICAgfQogfQogCiAvKioKLSAgKiBAYnJpZWYgIERNQSBTRCBSeCBBYm9ydCBjYWxsYmFjayAKLSAgKiBAcGFyYW0gIGhkbWEgRE1BIGhhbmRsZQorICAqIEBicmllZiAgRE1BIFNEIFR4IEFib3J0IGNhbGxiYWNrCisgICogQHBhcmFtICBoZG1hOiBETUEgaGFuZGxlCiAgICogQHJldHZhbCBOb25lCiAgICovCi1zdGF0aWMgdm9pZCBTRF9ETUFSeEFib3J0KERNQV9IYW5kbGVUeXBlRGVmICpoZG1hKSAgIAorc3RhdGljIHZvaWQgU0RfRE1BVHhBYm9ydChETUFfSGFuZGxlVHlwZURlZiAqaGRtYSkKIHsKICAgU0RfSGFuZGxlVHlwZURlZiogaHNkID0gKFNEX0hhbmRsZVR5cGVEZWYqICkoaGRtYS0+UGFyZW50KTsKICAgSEFMX1NEX0NhcmRTdGF0ZVR5cGVEZWYgQ2FyZFN0YXRlOwotICAKLSAgaWYoaHNkLT5oZG1hcnggIT0gTlVMTCkKKworICAvKiBDbGVhciBBbGwgZmxhZ3MgKi8KKyAgX19IQUxfU0RfQ0xFQVJfRkxBRyhoc2QsIFNESU9fU1RBVElDX0RBVEFfRkxBR1MpOworCisgIENhcmRTdGF0ZSA9IEhBTF9TRF9HZXRDYXJkU3RhdGUoaHNkKTsKKyAgaHNkLT5TdGF0ZSA9IEhBTF9TRF9TVEFURV9SRUFEWTsKKyAgaHNkLT5Db250ZXh0ID0gU0RfQ09OVEVYVF9OT05FOworICBpZigoQ2FyZFN0YXRlID09IEhBTF9TRF9DQVJEX1JFQ0VJVklORykgfHwgKENhcmRTdGF0ZSA9PSBIQUxfU0RfQ0FSRF9TRU5ESU5HKSkKICAgewotICAgIGhzZC0+aGRtYXJ4ID0gTlVMTDsKKyAgICBoc2QtPkVycm9yQ29kZSB8PSBTRE1NQ19DbWRTdG9wVHJhbnNmZXIoaHNkLT5JbnN0YW5jZSk7CiAgIH0KLSAgCi0gIC8qIEFsbCBETUEgY2hhbm5lbHMgYXJlIGFib3J0ZWQgKi8KLSAgaWYoaHNkLT5oZG1hdHggPT0gTlVMTCkKKworICBpZihoc2QtPkVycm9yQ29kZSA9PSBIQUxfU0RfRVJST1JfTk9ORSkKICAgewotICAgIENhcmRTdGF0ZSA9IEhBTF9TRF9HZXRDYXJkU3RhdGUoaHNkKTsKLSAgICBoc2QtPkVycm9yQ29kZSA9IEhBTF9TRF9FUlJPUl9OT05FOwotICAgIGhzZC0+U3RhdGUgPSBIQUxfU0RfU1RBVEVfUkVBRFk7Ci0gICAgaWYoKENhcmRTdGF0ZSA9PSBIQUxfU0RfQ0FSRF9SRUNFSVZJTkcpIHx8IChDYXJkU3RhdGUgPT0gSEFMX1NEX0NBUkRfU0VORElORykpCi0gICAgewotICAgICAgaHNkLT5FcnJvckNvZGUgfD0gU0RNTUNfQ21kU3RvcFRyYW5zZmVyKGhzZC0+SW5zdGFuY2UpOwotICAgICAgCi0gICAgICBpZihoc2QtPkVycm9yQ29kZSAhPSBIQUxfU0RfRVJST1JfTk9ORSkKLSAgICAgIHsKICNpZiAoVVNFX0hBTF9TRF9SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkKLSAgICAgICAgaHNkLT5BYm9ydENwbHRDYWxsYmFjayhoc2QpOworICAgIGhzZC0+QWJvcnRDcGx0Q2FsbGJhY2soaHNkKTsKICNlbHNlCi0gICAgICAgIEhBTF9TRF9BYm9ydENhbGxiYWNrKGhzZCk7CisgICAgSEFMX1NEX0Fib3J0Q2FsbGJhY2soaHNkKTsKICNlbmRpZgotICAgICAgfQotICAgICAgZWxzZQotICAgICAgeworICB9CisgIGVsc2UKKyAgewogI2lmIChVU0VfSEFMX1NEX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxKQotICAgICAgICBoc2QtPkVycm9yQ2FsbGJhY2soaHNkKTsKKyAgICBoc2QtPkVycm9yQ2FsbGJhY2soaHNkKTsKICNlbHNlCi0gICAgICAgIEhBTF9TRF9FcnJvckNhbGxiYWNrKGhzZCk7CisgICAgSEFMX1NEX0Vycm9yQ2FsbGJhY2soaHNkKTsKICNlbmRpZgotICAgICAgfQotICAgIH0KICAgfQogfQogCisvKioKKyAgKiBAYnJpZWYgIERNQSBTRCBSeCBBYm9ydCBjYWxsYmFjaworICAqIEBwYXJhbSAgaGRtYTogRE1BIGhhbmRsZQorICAqIEByZXR2YWwgTm9uZQorICAqLworc3RhdGljIHZvaWQgU0RfRE1BUnhBYm9ydChETUFfSGFuZGxlVHlwZURlZiAqaGRtYSkKK3sKKyAgU0RfSGFuZGxlVHlwZURlZiogaHNkID0gKFNEX0hhbmRsZVR5cGVEZWYqICkoaGRtYS0+UGFyZW50KTsKKyAgSEFMX1NEX0NhcmRTdGF0ZVR5cGVEZWYgQ2FyZFN0YXRlOworCisgIC8qIENsZWFyIEFsbCBmbGFncyAqLworICBfX0hBTF9TRF9DTEVBUl9GTEFHKGhzZCwgU0RJT19TVEFUSUNfREFUQV9GTEFHUyk7CisKKyAgQ2FyZFN0YXRlID0gSEFMX1NEX0dldENhcmRTdGF0ZShoc2QpOworICBoc2QtPlN0YXRlID0gSEFMX1NEX1NUQVRFX1JFQURZOworICBoc2QtPkNvbnRleHQgPSBTRF9DT05URVhUX05PTkU7CisgIGlmKChDYXJkU3RhdGUgPT0gSEFMX1NEX0NBUkRfUkVDRUlWSU5HKSB8fCAoQ2FyZFN0YXRlID09IEhBTF9TRF9DQVJEX1NFTkRJTkcpKQorICB7CisgICAgaHNkLT5FcnJvckNvZGUgfD0gU0RNTUNfQ21kU3RvcFRyYW5zZmVyKGhzZC0+SW5zdGFuY2UpOworICB9CisKKyAgaWYoaHNkLT5FcnJvckNvZGUgPT0gSEFMX1NEX0VSUk9SX05PTkUpCisgIHsKKyNpZiAoVVNFX0hBTF9TRF9SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkKKyAgICBoc2QtPkFib3J0Q3BsdENhbGxiYWNrKGhzZCk7CisjZWxzZQorICAgIEhBTF9TRF9BYm9ydENhbGxiYWNrKGhzZCk7CisjZW5kaWYKKyAgfQorICBlbHNlCisgIHsKKyNpZiAoVVNFX0hBTF9TRF9SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkKKyAgICBoc2QtPkVycm9yQ2FsbGJhY2soaHNkKTsKKyNlbHNlCisgICAgSEFMX1NEX0Vycm9yQ2FsbGJhY2soaHNkKTsKKyNlbmRpZgorICB9Cit9CiAKIC8qKgogICAqIEBicmllZiAgSW5pdGlhbGl6ZXMgdGhlIHNkIGNhcmQuCi0gICogQHBhcmFtICBoc2QgUG9pbnRlciB0byBTRCBoYW5kbGUKKyAgKiBAcGFyYW0gIGhzZDogUG9pbnRlciB0byBTRCBoYW5kbGUKICAgKiBAcmV0dmFsIFNEIENhcmQgZXJyb3Igc3RhdGUKICAgKi8KIHN0YXRpYyB1aW50MzJfdCBTRF9Jbml0Q2FyZChTRF9IYW5kbGVUeXBlRGVmICpoc2QpCiB7CiAgIEhBTF9TRF9DYXJkQ1NEVHlwZURlZiBDU0Q7Ci0gIHVpbnQzMl90IGVycm9yc3RhdGUgPSBIQUxfU0RfRVJST1JfTk9ORTsKKyAgdWludDMyX3QgZXJyb3JzdGF0ZTsKICAgdWludDE2X3Qgc2RfcmNhID0gMVU7Ci0gIAorCiAgIC8qIENoZWNrIHRoZSBwb3dlciBTdGF0ZSAqLwotICBpZihTRElPX0dldFBvd2VyU3RhdGUoaHNkLT5JbnN0YW5jZSkgPT0gMFUpIAorICBpZihTRElPX0dldFBvd2VyU3RhdGUoaHNkLT5JbnN0YW5jZSkgPT0gMFUpCiAgIHsKICAgICAvKiBQb3dlciBvZmYgKi8KICAgICByZXR1cm4gSEFMX1NEX0VSUk9SX1JFUVVFU1RfTk9UX0FQUExJQ0FCTEU7CiAgIH0KLSAgCi0gIGlmKGhzZC0+U2RDYXJkLkNhcmRUeXBlICE9IENBUkRfU0VDVVJFRCkgCisKKyAgaWYoaHNkLT5TZENhcmQuQ2FyZFR5cGUgIT0gQ0FSRF9TRUNVUkVEKQogICB7CiAgICAgLyogU2VuZCBDTUQyIEFMTF9TRU5EX0NJRCAqLwogICAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRTZW5kQ0lEKGhzZC0+SW5zdGFuY2UpOwpAQCAtMjc2MSw4ICsyNzE4LDggQEAKICAgICAgIGhzZC0+Q0lEWzNVXSA9IFNESU9fR2V0UmVzcG9uc2UoaHNkLT5JbnN0YW5jZSwgU0RJT19SRVNQNCk7CiAgICAgfQogICB9Ci0gIAotICBpZihoc2QtPlNkQ2FyZC5DYXJkVHlwZSAhPSBDQVJEX1NFQ1VSRUQpIAorCisgIGlmKGhzZC0+U2RDYXJkLkNhcmRUeXBlICE9IENBUkRfU0VDVVJFRCkKICAgewogICAgIC8qIFNlbmQgQ01EMyBTRVRfUkVMX0FERFIgd2l0aCBhcmd1bWVudCAwICovCiAgICAgLyogU0QgQ2FyZCBwdWJsaXNoZXMgaXRzIFJDQS4gKi8KQEAgLTI3NzIsMTEgKzI3MjksMTEgQEAKICAgICAgIHJldHVybiBlcnJvcnN0YXRlOwogICAgIH0KICAgfQotICBpZihoc2QtPlNkQ2FyZC5DYXJkVHlwZSAhPSBDQVJEX1NFQ1VSRUQpIAorICBpZihoc2QtPlNkQ2FyZC5DYXJkVHlwZSAhPSBDQVJEX1NFQ1VSRUQpCiAgIHsKICAgICAvKiBHZXQgdGhlIFNEIGNhcmQgUkNBICovCiAgICAgaHNkLT5TZENhcmQuUmVsQ2FyZEFkZCA9IHNkX3JjYTsKLSAgICAKKwogICAgIC8qIFNlbmQgQ01EOSBTRU5EX0NTRCB3aXRoIGFyZ3VtZW50IGFzIGNhcmQncyBSQ0EgKi8KICAgICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kU2VuZENTRChoc2QtPkluc3RhbmNlLCAodWludDMyX3QpKGhzZC0+U2RDYXJkLlJlbENhcmRBZGQgPDwgMTZVKSk7CiAgICAgaWYoZXJyb3JzdGF0ZSAhPSBIQUxfU0RfRVJST1JfTk9ORSkKQEAgLTI3OTIsMTIgKzI3NDksMTUgQEAKICAgICAgIGhzZC0+Q1NEWzNVXSA9IFNESU9fR2V0UmVzcG9uc2UoaHNkLT5JbnN0YW5jZSwgU0RJT19SRVNQNCk7CiAgICAgfQogICB9Ci0gIAorCiAgIC8qIEdldCB0aGUgQ2FyZCBDbGFzcyAqLwogICBoc2QtPlNkQ2FyZC5DbGFzcyA9IChTRElPX0dldFJlc3BvbnNlKGhzZC0+SW5zdGFuY2UsIFNESU9fUkVTUDIpID4+IDIwVSk7Ci0gIAorCiAgIC8qIEdldCBDU0QgcGFyYW1ldGVycyAqLwotICBIQUxfU0RfR2V0Q2FyZENTRChoc2QsICZDU0QpOworICBpZiAoSEFMX1NEX0dldENhcmRDU0QoaHNkLCAmQ1NEKSAhPSBIQUxfT0spCisgIHsKKyAgICByZXR1cm4gSEFMX1NEX0VSUk9SX1VOU1VQUE9SVEVEX0ZFQVRVUkU7CisgIH0KIAogICAvKiBTZWxlY3QgdGhlIENhcmQgKi8KICAgZXJyb3JzdGF0ZSA9IFNETU1DX0NtZFNlbERlc2VsKGhzZC0+SW5zdGFuY2UsICh1aW50MzJfdCkoKCh1aW50MzJfdCloc2QtPlNkQ2FyZC5SZWxDYXJkQWRkKSA8PCAxNlUpKTsKQEAgLTI4MDYsOCArMjc2Niw4IEBACiAgICAgcmV0dXJuIGVycm9yc3RhdGU7CiAgIH0KIAotICAvKiBDb25maWd1cmUgU0RJTyBwZXJpcGhlcmFsIGludGVyZmFjZSAqLyAgICAgCi0gIFNESU9fSW5pdChoc2QtPkluc3RhbmNlLCBoc2QtPkluaXQpOworICAvKiBDb25maWd1cmUgU0RJTyBwZXJpcGhlcmFsIGludGVyZmFjZSAqLworICAodm9pZClTRElPX0luaXQoaHNkLT5JbnN0YW5jZSwgaHNkLT5Jbml0KTsKIAogICAvKiBBbGwgY2FyZHMgYXJlIGluaXRpYWxpemVkICovCiAgIHJldHVybiBIQUxfU0RfRVJST1JfTk9ORTsKQEAgLTI4MTcsMTM4ICsyNzc3LDEyNiBAQAogICAqIEBicmllZiAgRW5xdWlyZXMgY2FyZHMgYWJvdXQgdGhlaXIgb3BlcmF0aW5nIHZvbHRhZ2UgYW5kIGNvbmZpZ3VyZXMgY2xvY2sKICAgKiAgICAgICAgIGNvbnRyb2xzIGFuZCBzdG9yZXMgU0QgaW5mb3JtYXRpb24gdGhhdCB3aWxsIGJlIG5lZWRlZCBpbiBmdXR1cmUKICAgKiAgICAgICAgIGluIHRoZSBTRCBoYW5kbGUuCi0gICogQHBhcmFtICBoc2QgUG9pbnRlciB0byBTRCBoYW5kbGUKKyAgKiBAcGFyYW0gIGhzZDogUG9pbnRlciB0byBTRCBoYW5kbGUKICAgKiBAcmV0dmFsIGVycm9yIHN0YXRlCiAgICovCiBzdGF0aWMgdWludDMyX3QgU0RfUG93ZXJPTihTRF9IYW5kbGVUeXBlRGVmICpoc2QpCiB7CiAgIF9fSU8gdWludDMyX3QgY291bnQgPSAwVTsKICAgdWludDMyX3QgcmVzcG9uc2UgPSAwVSwgdmFsaWR2b2x0YWdlID0gMFU7Ci0gIHVpbnQzMl90IGVycm9yc3RhdGUgPSBIQUxfU0RfRVJST1JfTk9ORTsKLSAgCisgIHVpbnQzMl90IGVycm9yc3RhdGU7CisKICAgLyogQ01EMDogR09fSURMRV9TVEFURSAqLwogICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kR29JZGxlU3RhdGUoaHNkLT5JbnN0YW5jZSk7CiAgIGlmKGVycm9yc3RhdGUgIT0gSEFMX1NEX0VSUk9SX05PTkUpCiAgIHsKICAgICByZXR1cm4gZXJyb3JzdGF0ZTsKICAgfQotICAKKwogICAvKiBDTUQ4OiBTRU5EX0lGX0NPTkQ6IENvbW1hbmQgYXZhaWxhYmxlIG9ubHkgb24gVjIuMCBjYXJkcyAqLwogICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kT3BlckNvbmQoaHNkLT5JbnN0YW5jZSk7CiAgIGlmKGVycm9yc3RhdGUgIT0gSEFMX1NEX0VSUk9SX05PTkUpCiAgIHsKICAgICBoc2QtPlNkQ2FyZC5DYXJkVmVyc2lvbiA9IENBUkRfVjFfWDsKLSAgICAgIAotICAgIC8qIFNlbmQgQUNNRDQxIFNEX0FQUF9PUF9DT05EIHdpdGggQXJndW1lbnQgMHg4MDEwMDAwMCAqLwotICAgIHdoaWxlKHZhbGlkdm9sdGFnZSA9PSAwVSkKKyAgICAvKiBDTUQwOiBHT19JRExFX1NUQVRFICovCisgICAgZXJyb3JzdGF0ZSA9IFNETU1DX0NtZEdvSWRsZVN0YXRlKGhzZC0+SW5zdGFuY2UpOworICAgIGlmKGVycm9yc3RhdGUgIT0gSEFMX1NEX0VSUk9SX05PTkUpCiAgICAgewotICAgICAgaWYoY291bnQrKyA9PSBTRE1NQ19NQVhfVk9MVF9UUklBTCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIEhBTF9TRF9FUlJPUl9JTlZBTElEX1ZPTFRSQU5HRTsKLSAgICAgIH0KLSAgICAgIAotICAgICAgLyogU0VORCBDTUQ1NSBBUFBfQ01EIHdpdGggUkNBIGFzIDAgKi8KLSAgICAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRBcHBDb21tYW5kKGhzZC0+SW5zdGFuY2UsIDBVKTsKLSAgICAgIGlmKGVycm9yc3RhdGUgIT0gSEFMX1NEX0VSUk9SX05PTkUpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBIQUxfU0RfRVJST1JfVU5TVVBQT1JURURfRkVBVFVSRTsKLSAgICAgIH0KLSAgICAgIAotICAgICAgLyogU2VuZCBDTUQ0MSAqLwotICAgICAgZXJyb3JzdGF0ZSA9IFNETU1DX0NtZEFwcE9wZXJDb21tYW5kKGhzZC0+SW5zdGFuY2UsIFNETU1DX1NURF9DQVBBQ0lUWSk7Ci0gICAgICBpZihlcnJvcnN0YXRlICE9IEhBTF9TRF9FUlJPUl9OT05FKQotICAgICAgewotICAgICAgICByZXR1cm4gSEFMX1NEX0VSUk9SX1VOU1VQUE9SVEVEX0ZFQVRVUkU7Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIC8qIEdldCBjb21tYW5kIHJlc3BvbnNlICovCi0gICAgICByZXNwb25zZSA9IFNESU9fR2V0UmVzcG9uc2UoaHNkLT5JbnN0YW5jZSwgU0RJT19SRVNQMSk7Ci0gICAgICAKLSAgICAgIC8qIEdldCBvcGVyYXRpbmcgdm9sdGFnZSovCi0gICAgICB2YWxpZHZvbHRhZ2UgPSAoKChyZXNwb25zZSA+PiAzMVUpID09IDFVKSA/IDFVIDogMFUpOworICAgICAgcmV0dXJuIGVycm9yc3RhdGU7CiAgICAgfQotICAgIC8qIENhcmQgdHlwZSBpcyBTRFNDICovCi0gICAgaHNkLT5TZENhcmQuQ2FyZFR5cGUgPSBDQVJEX1NEU0M7CisKICAgfQogICBlbHNlCiAgIHsKICAgICBoc2QtPlNkQ2FyZC5DYXJkVmVyc2lvbiA9IENBUkRfVjJfWDsKLSAgICAgICAgCi0gICAgLyogU2VuZCBBQ01ENDEgU0RfQVBQX09QX0NPTkQgd2l0aCBBcmd1bWVudCAweDgwMTAwMDAwICovCi0gICAgd2hpbGUodmFsaWR2b2x0YWdlID09IDBVKQorICB9CisKKyAgaWYoIGhzZC0+U2RDYXJkLkNhcmRWZXJzaW9uID09IENBUkRfVjJfWCkKKyAgeworICAgIC8qIFNFTkQgQ01ENTUgQVBQX0NNRCB3aXRoIFJDQSBhcyAwICovCisgICAgZXJyb3JzdGF0ZSA9IFNETU1DX0NtZEFwcENvbW1hbmQoaHNkLT5JbnN0YW5jZSwgMCk7CisgICAgaWYoZXJyb3JzdGF0ZSAhPSBIQUxfU0RfRVJST1JfTk9ORSkKICAgICB7Ci0gICAgICBpZihjb3VudCsrID09IFNETU1DX01BWF9WT0xUX1RSSUFMKQotICAgICAgewotICAgICAgICByZXR1cm4gSEFMX1NEX0VSUk9SX0lOVkFMSURfVk9MVFJBTkdFOwotICAgICAgfQotICAgICAgCi0gICAgICAvKiBTRU5EIENNRDU1IEFQUF9DTUQgd2l0aCBSQ0EgYXMgMCAqLwotICAgICAgZXJyb3JzdGF0ZSA9IFNETU1DX0NtZEFwcENvbW1hbmQoaHNkLT5JbnN0YW5jZSwgMFUpOwotICAgICAgaWYoZXJyb3JzdGF0ZSAhPSBIQUxfU0RfRVJST1JfTk9ORSkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yc3RhdGU7Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIC8qIFNlbmQgQ01ENDEgKi8KLSAgICAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRBcHBPcGVyQ29tbWFuZChoc2QtPkluc3RhbmNlLCBTRE1NQ19ISUdIX0NBUEFDSVRZKTsKLSAgICAgIGlmKGVycm9yc3RhdGUgIT0gSEFMX1NEX0VSUk9SX05PTkUpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcnN0YXRlOwotICAgICAgfQotICAgICAgCi0gICAgICAvKiBHZXQgY29tbWFuZCByZXNwb25zZSAqLwotICAgICAgcmVzcG9uc2UgPSBTRElPX0dldFJlc3BvbnNlKGhzZC0+SW5zdGFuY2UsIFNESU9fUkVTUDEpOwotICAgICAgCi0gICAgICAvKiBHZXQgb3BlcmF0aW5nIHZvbHRhZ2UqLwotICAgICAgdmFsaWR2b2x0YWdlID0gKCgocmVzcG9uc2UgPj4gMzFVKSA9PSAxVSkgPyAxVSA6IDBVKTsKLSAgICB9Ci0gICAgCi0gICAgaWYoKHJlc3BvbnNlICYgU0RNTUNfSElHSF9DQVBBQ0lUWSkgPT0gU0RNTUNfSElHSF9DQVBBQ0lUWSkgLyogKHJlc3BvbnNlICY9IFNEX0hJR0hfQ0FQQUNJVFkpICovCi0gICAgewotICAgICAgaHNkLT5TZENhcmQuQ2FyZFR5cGUgPSBDQVJEX1NESENfU0RYQzsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGhzZC0+U2RDYXJkLkNhcmRUeXBlID0gQ0FSRF9TRFNDOworICAgICAgcmV0dXJuIEhBTF9TRF9FUlJPUl9VTlNVUFBPUlRFRF9GRUFUVVJFOwogICAgIH0KICAgfQotICAKKyAgLyogU0QgQ0FSRCAqLworICAvKiBTZW5kIEFDTUQ0MSBTRF9BUFBfT1BfQ09ORCB3aXRoIEFyZ3VtZW50IDB4ODAxMDAwMDAgKi8KKyAgd2hpbGUoKGNvdW50IDwgU0RNTUNfTUFYX1ZPTFRfVFJJQUwpICYmICh2YWxpZHZvbHRhZ2UgPT0gMFUpKQorICB7CisgICAgLyogU0VORCBDTUQ1NSBBUFBfQ01EIHdpdGggUkNBIGFzIDAgKi8KKyAgICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kQXBwQ29tbWFuZChoc2QtPkluc3RhbmNlLCAwKTsKKyAgICBpZihlcnJvcnN0YXRlICE9IEhBTF9TRF9FUlJPUl9OT05FKQorICAgIHsKKyAgICAgIHJldHVybiBlcnJvcnN0YXRlOworICAgIH0KKworICAgIC8qIFNlbmQgQ01ENDEgKi8KKyAgICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kQXBwT3BlckNvbW1hbmQoaHNkLT5JbnN0YW5jZSwgU0RNTUNfVk9MVEFHRV9XSU5ET1dfU0QgfCBTRE1NQ19ISUdIX0NBUEFDSVRZIHwgU0RfU1dJVENIXzFfOFZfQ0FQQUNJVFkpOworICAgIGlmKGVycm9yc3RhdGUgIT0gSEFMX1NEX0VSUk9SX05PTkUpCisgICAgeworICAgICAgcmV0dXJuIEhBTF9TRF9FUlJPUl9VTlNVUFBPUlRFRF9GRUFUVVJFOworICAgIH0KKworICAgIC8qIEdldCBjb21tYW5kIHJlc3BvbnNlICovCisgICAgcmVzcG9uc2UgPSBTRElPX0dldFJlc3BvbnNlKGhzZC0+SW5zdGFuY2UsIFNESU9fUkVTUDEpOworCisgICAgLyogR2V0IG9wZXJhdGluZyB2b2x0YWdlKi8KKyAgICB2YWxpZHZvbHRhZ2UgPSAoKChyZXNwb25zZSA+PiAzMVUpID09IDFVKSA/IDFVIDogMFUpOworCisgICAgY291bnQrKzsKKyAgfQorCisgIGlmKGNvdW50ID49IFNETU1DX01BWF9WT0xUX1RSSUFMKQorICB7CisgICAgcmV0dXJuIEhBTF9TRF9FUlJPUl9JTlZBTElEX1ZPTFRSQU5HRTsKKyAgfQorCisgIGlmKChyZXNwb25zZSAmIFNETU1DX0hJR0hfQ0FQQUNJVFkpID09IFNETU1DX0hJR0hfQ0FQQUNJVFkpIC8qIChyZXNwb25zZSAmPSBTRF9ISUdIX0NBUEFDSVRZKSAqLworICB7CisgICAgaHNkLT5TZENhcmQuQ2FyZFR5cGUgPSBDQVJEX1NESENfU0RYQzsKKyAgfQorICBlbHNlCisgIHsKKyAgICBoc2QtPlNkQ2FyZC5DYXJkVHlwZSA9IENBUkRfU0RTQzsKKyAgfQorCisKICAgcmV0dXJuIEhBTF9TRF9FUlJPUl9OT05FOwogfQogCiAvKioKICAgKiBAYnJpZWYgIFR1cm5zIHRoZSBTRElPIG91dHB1dCBzaWduYWxzIG9mZi4KLSAgKiBAcGFyYW0gIGhzZCBQb2ludGVyIHRvIFNEIGhhbmRsZQotICAqIEByZXR2YWwgSEFMIHN0YXR1cworICAqIEBwYXJhbSAgaHNkOiBQb2ludGVyIHRvIFNEIGhhbmRsZQorICAqIEByZXR2YWwgTm9uZQogICAqLwotc3RhdGljIEhBTF9TdGF0dXNUeXBlRGVmIFNEX1Bvd2VyT0ZGKFNEX0hhbmRsZVR5cGVEZWYgKmhzZCkKK3N0YXRpYyB2b2lkIFNEX1Bvd2VyT0ZGKFNEX0hhbmRsZVR5cGVEZWYgKmhzZCkKIHsKICAgLyogU2V0IFBvd2VyIFN0YXRlIHRvIE9GRiAqLwotICBTRElPX1Bvd2VyU3RhdGVfT0ZGKGhzZC0+SW5zdGFuY2UpOwotICAKLSAgcmV0dXJuIEhBTF9PSzsKKyAgKHZvaWQpU0RJT19Qb3dlclN0YXRlX09GRihoc2QtPkluc3RhbmNlKTsKIH0KIAogLyoqCiAgICogQGJyaWVmICBTZW5kIFN0YXR1cyBpbmZvIGNvbW1hbmQuCi0gICogQHBhcmFtICBoc2QgcG9pbnRlciB0byBTRCBoYW5kbGUKLSAgKiBAcGFyYW0gIHBTRHN0YXR1cyBQb2ludGVyIHRvIHRoZSBidWZmZXIgdGhhdCB3aWxsIGNvbnRhaW4gdGhlIFNEIGNhcmQgc3RhdHVzIAorICAqIEBwYXJhbSAgaHNkOiBwb2ludGVyIHRvIFNEIGhhbmRsZQorICAqIEBwYXJhbSAgcFNEc3RhdHVzOiBQb2ludGVyIHRvIHRoZSBidWZmZXIgdGhhdCB3aWxsIGNvbnRhaW4gdGhlIFNEIGNhcmQgc3RhdHVzCiAgICogICAgICAgICBTRCBTdGF0dXMgcmVnaXN0ZXIpCiAgICogQHJldHZhbCBlcnJvciBzdGF0ZQogICAqLwogc3RhdGljIHVpbnQzMl90IFNEX1NlbmRTRFN0YXR1cyhTRF9IYW5kbGVUeXBlRGVmICpoc2QsIHVpbnQzMl90ICpwU0RzdGF0dXMpCiB7CiAgIFNESU9fRGF0YUluaXRUeXBlRGVmIGNvbmZpZzsKLSAgdWludDMyX3QgZXJyb3JzdGF0ZSA9IEhBTF9TRF9FUlJPUl9OT05FOworICB1aW50MzJfdCBlcnJvcnN0YXRlOwogICB1aW50MzJfdCB0aWNrc3RhcnQgPSBIQUxfR2V0VGljaygpOwotICB1aW50MzJfdCBjb3VudCA9IDBVOwotICAKKyAgdWludDMyX3QgY291bnQ7CisgIHVpbnQzMl90ICpwRGF0YSA9IHBTRHN0YXR1czsKKwogICAvKiBDaGVjayBTRCByZXNwb25zZSAqLwogICBpZigoU0RJT19HZXRSZXNwb25zZShoc2QtPkluc3RhbmNlLCBTRElPX1JFU1AxKSAmIFNETU1DX0NBUkRfTE9DS0VEKSA9PSBTRE1NQ19DQVJEX0xPQ0tFRCkKICAgewogICAgIHJldHVybiBIQUxfU0RfRVJST1JfTE9DS19VTkxPQ0tfRkFJTEVEOwogICB9Ci0gIAorCiAgIC8qIFNldCBibG9jayBzaXplIGZvciBjYXJkIGlmIGl0IGlzIG5vdCBlcXVhbCB0byBjdXJyZW50IGJsb2NrIHNpemUgZm9yIGNhcmQgKi8KICAgZXJyb3JzdGF0ZSA9IFNETU1DX0NtZEJsb2NrTGVuZ3RoKGhzZC0+SW5zdGFuY2UsIDY0VSk7CiAgIGlmKGVycm9yc3RhdGUgIT0gSEFMX1NEX0VSUk9SX05PTkUpCkBAIC0yOTU2LDcgKzI5MDQsNyBAQAogICAgIGhzZC0+RXJyb3JDb2RlIHw9IEhBTF9TRF9FUlJPUl9OT05FOwogICAgIHJldHVybiBlcnJvcnN0YXRlOwogICB9Ci0gIAorCiAgIC8qIFNlbmQgQ01ENTUgKi8KICAgZXJyb3JzdGF0ZSA9IFNETU1DX0NtZEFwcENvbW1hbmQoaHNkLT5JbnN0YW5jZSwgKHVpbnQzMl90KShoc2QtPlNkQ2FyZC5SZWxDYXJkQWRkIDw8IDE2VSkpOwogICBpZihlcnJvcnN0YXRlICE9IEhBTF9TRF9FUlJPUl9OT05FKQpAQCAtMjk2NCwxNiArMjkxMiwxNiBAQAogICAgIGhzZC0+RXJyb3JDb2RlIHw9IEhBTF9TRF9FUlJPUl9OT05FOwogICAgIHJldHVybiBlcnJvcnN0YXRlOwogICB9Ci0gIAotICAvKiBDb25maWd1cmUgdGhlIFNEIERQU00gKERhdGEgUGF0aCBTdGF0ZSBNYWNoaW5lKSAqLyAKKworICAvKiBDb25maWd1cmUgdGhlIFNEIERQU00gKERhdGEgUGF0aCBTdGF0ZSBNYWNoaW5lKSAqLwogICBjb25maWcuRGF0YVRpbWVPdXQgICA9IFNETU1DX0RBVEFUSU1FT1VUOwogICBjb25maWcuRGF0YUxlbmd0aCAgICA9IDY0VTsKICAgY29uZmlnLkRhdGFCbG9ja1NpemUgPSBTRElPX0RBVEFCTE9DS19TSVpFXzY0QjsKICAgY29uZmlnLlRyYW5zZmVyRGlyICAgPSBTRElPX1RSQU5TRkVSX0RJUl9UT19TRElPOwogICBjb25maWcuVHJhbnNmZXJNb2RlICA9IFNESU9fVFJBTlNGRVJfTU9ERV9CTE9DSzsKICAgY29uZmlnLkRQU00gICAgICAgICAgPSBTRElPX0RQU01fRU5BQkxFOwotICBTRElPX0NvbmZpZ0RhdGEoaHNkLT5JbnN0YW5jZSwgJmNvbmZpZyk7Ci0gIAorICAodm9pZClTRElPX0NvbmZpZ0RhdGEoaHNkLT5JbnN0YW5jZSwgJmNvbmZpZyk7CisKICAgLyogU2VuZCBBQ01EMTMgKFNEX0FQUF9TVEFVUykgIHdpdGggYXJndW1lbnQgYXMgY2FyZCdzIFJDQSAqLwogICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kU3RhdHVzUmVnaXN0ZXIoaHNkLT5JbnN0YW5jZSk7CiAgIGlmKGVycm9yc3RhdGUgIT0gSEFMX1NEX0VSUk9SX05PTkUpCkBAIC0yOTgxLDcgKzI5MjksNyBAQAogICAgIGhzZC0+RXJyb3JDb2RlIHw9IEhBTF9TRF9FUlJPUl9OT05FOwogICAgIHJldHVybiBlcnJvcnN0YXRlOwogICB9Ci0gIAorCiAgIC8qIEdldCBzdGF0dXMgZGF0YSAqLwogICB3aGlsZSghX19IQUxfU0RfR0VUX0ZMQUcoaHNkLCBTRElPX0ZMQUdfUlhPVkVSUiB8IFNESU9fRkxBR19EQ1JDRkFJTCB8IFNESU9fRkxBR19EVElNRU9VVCB8IFNESU9fRkxBR19EQkNLRU5EKSkKICAgewpAQCAtMjk4OSwxOCArMjkzNywxNyBAQAogICAgIHsKICAgICAgIGZvcihjb3VudCA9IDBVOyBjb3VudCA8IDhVOyBjb3VudCsrKQogICAgICAgewotICAgICAgICAqKHBTRHN0YXR1cyArIGNvdW50KSA9IFNESU9fUmVhZEZJRk8oaHNkLT5JbnN0YW5jZSk7CisgICAgICAgICpwRGF0YSA9IFNESU9fUmVhZEZJRk8oaHNkLT5JbnN0YW5jZSk7CisgICAgICAgIHBEYXRhKys7CiAgICAgICB9Ci0gICAgICAKLSAgICAgIHBTRHN0YXR1cyArPSA4VTsKICAgICB9Ci0gICAgCisKICAgICBpZigoSEFMX0dldFRpY2soKSAtIHRpY2tzdGFydCkgPj0gIFNETU1DX0RBVEFUSU1FT1VUKQogICAgIHsKICAgICAgIHJldHVybiBIQUxfU0RfRVJST1JfVElNRU9VVDsKICAgICB9CiAgIH0KLSAgCisKICAgaWYoX19IQUxfU0RfR0VUX0ZMQUcoaHNkLCBTRElPX0ZMQUdfRFRJTUVPVVQpKQogICB7CiAgICAgcmV0dXJuIEhBTF9TRF9FUlJPUl9EQVRBX1RJTUVPVVQ7CkBAIC0zMDEzLDg4ICsyOTYwLDkyIEBACiAgIHsKICAgICByZXR1cm4gSEFMX1NEX0VSUk9SX1JYX09WRVJSVU47CiAgIH0KKyAgZWxzZQorICB7CisgICAgLyogTm90aGluZyB0byBkbyAqLworICB9CiAKICAgd2hpbGUgKChfX0hBTF9TRF9HRVRfRkxBRyhoc2QsIFNESU9fRkxBR19SWERBVkwpKSkKICAgewotICAgICpwU0RzdGF0dXMgPSBTRElPX1JlYWRGSUZPKGhzZC0+SW5zdGFuY2UpOwotICAgIHBTRHN0YXR1cysrOwotICAgIAorICAgICpwRGF0YSA9IFNESU9fUmVhZEZJRk8oaHNkLT5JbnN0YW5jZSk7CisgICAgcERhdGErKzsKKwogICAgIGlmKChIQUxfR2V0VGljaygpIC0gdGlja3N0YXJ0KSA+PSAgU0RNTUNfREFUQVRJTUVPVVQpCiAgICAgewogICAgICAgcmV0dXJuIEhBTF9TRF9FUlJPUl9USU1FT1VUOwogICAgIH0KICAgfQotICAKKwogICAvKiBDbGVhciBhbGwgdGhlIHN0YXRpYyBzdGF0dXMgZmxhZ3MqLwotICBfX0hBTF9TRF9DTEVBUl9GTEFHKGhzZCwgU0RJT19TVEFUSUNfRkxBR1MpOwotICAKKyAgX19IQUxfU0RfQ0xFQVJfRkxBRyhoc2QsIFNESU9fU1RBVElDX0RBVEFfRkxBR1MpOworCiAgIHJldHVybiBIQUxfU0RfRVJST1JfTk9ORTsKIH0KIAogLyoqCiAgICogQGJyaWVmICBSZXR1cm5zIHRoZSBjdXJyZW50IGNhcmQncyBzdGF0dXMuCi0gICogQHBhcmFtICBoc2QgUG9pbnRlciB0byBTRCBoYW5kbGUKLSAgKiBAcGFyYW0gIHBDYXJkU3RhdHVzIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlciB0aGF0IHdpbGwgY29udGFpbiB0aGUgU0QgY2FyZCAKLSAgKiAgICAgICAgIHN0YXR1cyAoQ2FyZCBTdGF0dXMgcmVnaXN0ZXIpICAKKyAgKiBAcGFyYW0gIGhzZDogUG9pbnRlciB0byBTRCBoYW5kbGUKKyAgKiBAcGFyYW0gIHBDYXJkU3RhdHVzOiBwb2ludGVyIHRvIHRoZSBidWZmZXIgdGhhdCB3aWxsIGNvbnRhaW4gdGhlIFNEIGNhcmQKKyAgKiAgICAgICAgIHN0YXR1cyAoQ2FyZCBTdGF0dXMgcmVnaXN0ZXIpCiAgICogQHJldHZhbCBlcnJvciBzdGF0ZQogICAqLwogc3RhdGljIHVpbnQzMl90IFNEX1NlbmRTdGF0dXMoU0RfSGFuZGxlVHlwZURlZiAqaHNkLCB1aW50MzJfdCAqcENhcmRTdGF0dXMpCiB7Ci0gIHVpbnQzMl90IGVycm9yc3RhdGUgPSBIQUxfU0RfRVJST1JfTk9ORTsKLSAgCisgIHVpbnQzMl90IGVycm9yc3RhdGU7CisKICAgaWYocENhcmRTdGF0dXMgPT0gTlVMTCkKICAgewogICAgIHJldHVybiBIQUxfU0RfRVJST1JfUEFSQU07CiAgIH0KLSAgCisKICAgLyogU2VuZCBTdGF0dXMgY29tbWFuZCAqLwogICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kU2VuZFN0YXR1cyhoc2QtPkluc3RhbmNlLCAodWludDMyX3QpKGhzZC0+U2RDYXJkLlJlbENhcmRBZGQgPDwgMTZVKSk7Ci0gIGlmKGVycm9yc3RhdGUgIT0gSEFMX09LKQorICBpZihlcnJvcnN0YXRlICE9IEhBTF9TRF9FUlJPUl9OT05FKQogICB7CiAgICAgcmV0dXJuIGVycm9yc3RhdGU7CiAgIH0KLSAgCisKICAgLyogR2V0IFNEIGNhcmQgc3RhdHVzICovCiAgICpwQ2FyZFN0YXR1cyA9IFNESU9fR2V0UmVzcG9uc2UoaHNkLT5JbnN0YW5jZSwgU0RJT19SRVNQMSk7Ci0gIAorCiAgIHJldHVybiBIQUxfU0RfRVJST1JfTk9ORTsKIH0KIAogLyoqCiAgICogQGJyaWVmICBFbmFibGVzIHRoZSBTRElPIHdpZGUgYnVzIG1vZGUuCi0gICogQHBhcmFtICBoc2QgcG9pbnRlciB0byBTRCBoYW5kbGUKKyAgKiBAcGFyYW0gIGhzZDogcG9pbnRlciB0byBTRCBoYW5kbGUKICAgKiBAcmV0dmFsIGVycm9yIHN0YXRlCiAgICovCiBzdGF0aWMgdWludDMyX3QgU0RfV2lkZUJ1c19FbmFibGUoU0RfSGFuZGxlVHlwZURlZiAqaHNkKQogewogICB1aW50MzJfdCBzY3JbMlVdID0gezBVLCAwVX07Ci0gIHVpbnQzMl90IGVycm9yc3RhdGUgPSBIQUxfU0RfRVJST1JfTk9ORTsKLSAgCisgIHVpbnQzMl90IGVycm9yc3RhdGU7CisKICAgaWYoKFNESU9fR2V0UmVzcG9uc2UoaHNkLT5JbnN0YW5jZSwgU0RJT19SRVNQMSkgJiBTRE1NQ19DQVJEX0xPQ0tFRCkgPT0gU0RNTUNfQ0FSRF9MT0NLRUQpCiAgIHsKICAgICByZXR1cm4gSEFMX1NEX0VSUk9SX0xPQ0tfVU5MT0NLX0ZBSUxFRDsKICAgfQotICAKKwogICAvKiBHZXQgU0NSIFJlZ2lzdGVyICovCiAgIGVycm9yc3RhdGUgPSBTRF9GaW5kU0NSKGhzZCwgc2NyKTsKLSAgaWYoZXJyb3JzdGF0ZSAhPSBIQUxfT0spCisgIGlmKGVycm9yc3RhdGUgIT0gSEFMX1NEX0VSUk9SX05PTkUpCiAgIHsKICAgICByZXR1cm4gZXJyb3JzdGF0ZTsKICAgfQotICAKKwogICAvKiBJZiByZXF1ZXN0ZWQgY2FyZCBzdXBwb3J0cyB3aWRlIGJ1cyBvcGVyYXRpb24gKi8KICAgaWYoKHNjclsxVV0gJiBTRE1NQ19XSURFX0JVU19TVVBQT1JUKSAhPSBTRE1NQ19BTExaRVJPKQogICB7CiAgICAgLyogU2VuZCBDTUQ1NSBBUFBfQ01EIHdpdGggYXJndW1lbnQgYXMgY2FyZCdzIFJDQS4qLwogICAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRBcHBDb21tYW5kKGhzZC0+SW5zdGFuY2UsICh1aW50MzJfdCkoaHNkLT5TZENhcmQuUmVsQ2FyZEFkZCA8PCAxNlUpKTsKLSAgICBpZihlcnJvcnN0YXRlICE9IEhBTF9PSykKKyAgICBpZihlcnJvcnN0YXRlICE9IEhBTF9TRF9FUlJPUl9OT05FKQogICAgIHsKICAgICAgIHJldHVybiBlcnJvcnN0YXRlOwogICAgIH0KLSAgICAKKwogICAgIC8qIFNlbmQgQUNNRDYgQVBQX0NNRCB3aXRoIGFyZ3VtZW50IGFzIDIgZm9yIHdpZGUgYnVzIG1vZGUgKi8KICAgICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kQnVzV2lkdGgoaHNkLT5JbnN0YW5jZSwgMlUpOwotICAgIGlmKGVycm9yc3RhdGUgIT0gSEFMX09LKQorICAgIGlmKGVycm9yc3RhdGUgIT0gSEFMX1NEX0VSUk9SX05PTkUpCiAgICAgewogICAgICAgcmV0dXJuIGVycm9yc3RhdGU7CiAgICAgfQpAQCAtMzEwOSw0MyArMzA2MCw0MyBAQAogCiAvKioKICAgKiBAYnJpZWYgIERpc2FibGVzIHRoZSBTRElPIHdpZGUgYnVzIG1vZGUuCi0gICogQHBhcmFtICBoc2QgUG9pbnRlciB0byBTRCBoYW5kbGUKKyAgKiBAcGFyYW0gIGhzZDogUG9pbnRlciB0byBTRCBoYW5kbGUKICAgKiBAcmV0dmFsIGVycm9yIHN0YXRlCiAgICovCiBzdGF0aWMgdWludDMyX3QgU0RfV2lkZUJ1c19EaXNhYmxlKFNEX0hhbmRsZVR5cGVEZWYgKmhzZCkKIHsKICAgdWludDMyX3Qgc2NyWzJVXSA9IHswVSwgMFV9OwotICB1aW50MzJfdCBlcnJvcnN0YXRlID0gSEFMX1NEX0VSUk9SX05PTkU7Ci0gIAorICB1aW50MzJfdCBlcnJvcnN0YXRlOworCiAgIGlmKChTRElPX0dldFJlc3BvbnNlKGhzZC0+SW5zdGFuY2UsIFNESU9fUkVTUDEpICYgU0RNTUNfQ0FSRF9MT0NLRUQpID09IFNETU1DX0NBUkRfTE9DS0VEKQogICB7CiAgICAgcmV0dXJuIEhBTF9TRF9FUlJPUl9MT0NLX1VOTE9DS19GQUlMRUQ7CiAgIH0KLSAgCisKICAgLyogR2V0IFNDUiBSZWdpc3RlciAqLwogICBlcnJvcnN0YXRlID0gU0RfRmluZFNDUihoc2QsIHNjcik7Ci0gIGlmKGVycm9yc3RhdGUgIT0gSEFMX09LKQorICBpZihlcnJvcnN0YXRlICE9IEhBTF9TRF9FUlJPUl9OT05FKQogICB7CiAgICAgcmV0dXJuIGVycm9yc3RhdGU7CiAgIH0KLSAgCisKICAgLyogSWYgcmVxdWVzdGVkIGNhcmQgc3VwcG9ydHMgMSBiaXQgbW9kZSBvcGVyYXRpb24gKi8KICAgaWYoKHNjclsxVV0gJiBTRE1NQ19TSU5HTEVfQlVTX1NVUFBPUlQpICE9IFNETU1DX0FMTFpFUk8pCiAgIHsKICAgICAvKiBTZW5kIENNRDU1IEFQUF9DTUQgd2l0aCBhcmd1bWVudCBhcyBjYXJkJ3MgUkNBICovCiAgICAgZXJyb3JzdGF0ZSA9IFNETU1DX0NtZEFwcENvbW1hbmQoaHNkLT5JbnN0YW5jZSwgKHVpbnQzMl90KShoc2QtPlNkQ2FyZC5SZWxDYXJkQWRkIDw8IDE2VSkpOwotICAgIGlmKGVycm9yc3RhdGUgIT0gSEFMX09LKQorICAgIGlmKGVycm9yc3RhdGUgIT0gSEFMX1NEX0VSUk9SX05PTkUpCiAgICAgewogICAgICAgcmV0dXJuIGVycm9yc3RhdGU7CiAgICAgfQotICAgIAorCiAgICAgLyogU2VuZCBBQ01ENiBBUFBfQ01EIHdpdGggYXJndW1lbnQgYXMgMCBmb3Igc2luZ2xlIGJ1cyBtb2RlICovCiAgICAgZXJyb3JzdGF0ZSA9IFNETU1DX0NtZEJ1c1dpZHRoKGhzZC0+SW5zdGFuY2UsIDBVKTsKLSAgICBpZihlcnJvcnN0YXRlICE9IEhBTF9PSykKKyAgICBpZihlcnJvcnN0YXRlICE9IEhBTF9TRF9FUlJPUl9OT05FKQogICAgIHsKICAgICAgIHJldHVybiBlcnJvcnN0YXRlOwogICAgIH0KLSAgICAKKwogICAgIHJldHVybiBIQUxfU0RfRVJST1JfTk9ORTsKICAgfQogICBlbHNlCkBAIC0zMTUzLDMyICszMTA0LDMzIEBACiAgICAgcmV0dXJuIEhBTF9TRF9FUlJPUl9SRVFVRVNUX05PVF9BUFBMSUNBQkxFOwogICB9CiB9Ci0gIAotICAKKworCiAvKioKICAgKiBAYnJpZWYgIEZpbmRzIHRoZSBTRCBjYXJkIFNDUiByZWdpc3RlciB2YWx1ZS4KLSAgKiBAcGFyYW0gIGhzZCBQb2ludGVyIHRvIFNEIGhhbmRsZQotICAqIEBwYXJhbSAgcFNDUiBwb2ludGVyIHRvIHRoZSBidWZmZXIgdGhhdCB3aWxsIGNvbnRhaW4gdGhlIFNDUiB2YWx1ZSAgCisgICogQHBhcmFtICBoc2Q6IFBvaW50ZXIgdG8gU0QgaGFuZGxlCisgICogQHBhcmFtICBwU0NSOiBwb2ludGVyIHRvIHRoZSBidWZmZXIgdGhhdCB3aWxsIGNvbnRhaW4gdGhlIFNDUiB2YWx1ZQogICAqIEByZXR2YWwgZXJyb3Igc3RhdGUKICAgKi8KIHN0YXRpYyB1aW50MzJfdCBTRF9GaW5kU0NSKFNEX0hhbmRsZVR5cGVEZWYgKmhzZCwgdWludDMyX3QgKnBTQ1IpCiB7CiAgIFNESU9fRGF0YUluaXRUeXBlRGVmIGNvbmZpZzsKLSAgdWludDMyX3QgZXJyb3JzdGF0ZSA9IEhBTF9TRF9FUlJPUl9OT05FOworICB1aW50MzJfdCBlcnJvcnN0YXRlOwogICB1aW50MzJfdCB0aWNrc3RhcnQgPSBIQUxfR2V0VGljaygpOwogICB1aW50MzJfdCBpbmRleCA9IDBVOwogICB1aW50MzJfdCB0ZW1wc2NyWzJVXSA9IHswVSwgMFV9OwotICAKKyAgdWludDMyX3QgKnNjciA9IHBTQ1I7CisKICAgLyogU2V0IEJsb2NrIFNpemUgVG8gOCBCeXRlcyAqLwogICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kQmxvY2tMZW5ndGgoaHNkLT5JbnN0YW5jZSwgOFUpOwotICBpZihlcnJvcnN0YXRlICE9IEhBTF9PSykKKyAgaWYoZXJyb3JzdGF0ZSAhPSBIQUxfU0RfRVJST1JfTk9ORSkKICAgewogICAgIHJldHVybiBlcnJvcnN0YXRlOwogICB9CiAKICAgLyogU2VuZCBDTUQ1NSBBUFBfQ01EIHdpdGggYXJndW1lbnQgYXMgY2FyZCdzIFJDQSAqLwogICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kQXBwQ29tbWFuZChoc2QtPkluc3RhbmNlLCAodWludDMyX3QpKChoc2QtPlNkQ2FyZC5SZWxDYXJkQWRkKSA8PCAxNlUpKTsKLSAgaWYoZXJyb3JzdGF0ZSAhPSBIQUxfT0spCisgIGlmKGVycm9yc3RhdGUgIT0gSEFMX1NEX0VSUk9SX05PTkUpCiAgIHsKICAgICByZXR1cm4gZXJyb3JzdGF0ZTsKICAgfQpAQCAtMzE4OSwxNSArMzE0MSwxNSBAQAogICBjb25maWcuVHJhbnNmZXJEaXIgICA9IFNESU9fVFJBTlNGRVJfRElSX1RPX1NESU87CiAgIGNvbmZpZy5UcmFuc2Zlck1vZGUgID0gU0RJT19UUkFOU0ZFUl9NT0RFX0JMT0NLOwogICBjb25maWcuRFBTTSAgICAgICAgICA9IFNESU9fRFBTTV9FTkFCTEU7Ci0gIFNESU9fQ29uZmlnRGF0YShoc2QtPkluc3RhbmNlLCAmY29uZmlnKTsKLSAgCisgICh2b2lkKVNESU9fQ29uZmlnRGF0YShoc2QtPkluc3RhbmNlLCAmY29uZmlnKTsKKwogICAvKiBTZW5kIEFDTUQ1MSBTRF9BUFBfU0VORF9TQ1Igd2l0aCBhcmd1bWVudCBhcyAwICovCiAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRTZW5kU0NSKGhzZC0+SW5zdGFuY2UpOwotICBpZihlcnJvcnN0YXRlICE9IEhBTF9PSykKKyAgaWYoZXJyb3JzdGF0ZSAhPSBIQUxfU0RfRVJST1JfTk9ORSkKICAgewogICAgIHJldHVybiBlcnJvcnN0YXRlOwogICB9Ci0gIAorCiAgIHdoaWxlKCFfX0hBTF9TRF9HRVRfRkxBRyhoc2QsIFNESU9fRkxBR19SWE9WRVJSIHwgU0RJT19GTEFHX0RDUkNGQUlMIHwgU0RJT19GTEFHX0RUSU1FT1VUIHwgU0RJT19GTEFHX0RCQ0tFTkQpKQogICB7CiAgICAgaWYoX19IQUxfU0RfR0VUX0ZMQUcoaHNkLCBTRElPX0ZMQUdfUlhEQVZMKSkKQEAgLTMyMDUsNDIgKzMxNTcsNDMgQEAKICAgICAgICoodGVtcHNjciArIGluZGV4KSA9IFNESU9fUmVhZEZJRk8oaHNkLT5JbnN0YW5jZSk7CiAgICAgICBpbmRleCsrOwogICAgIH0KLSAgICAKKwogICAgIGlmKChIQUxfR2V0VGljaygpIC0gdGlja3N0YXJ0KSA+PSAgU0RNTUNfREFUQVRJTUVPVVQpCiAgICAgewogICAgICAgcmV0dXJuIEhBTF9TRF9FUlJPUl9USU1FT1VUOwogICAgIH0KICAgfQotICAKKwogICBpZihfX0hBTF9TRF9HRVRfRkxBRyhoc2QsIFNESU9fRkxBR19EVElNRU9VVCkpCiAgIHsKICAgICBfX0hBTF9TRF9DTEVBUl9GTEFHKGhzZCwgU0RJT19GTEFHX0RUSU1FT1VUKTsKLSAgICAKKwogICAgIHJldHVybiBIQUxfU0RfRVJST1JfREFUQV9USU1FT1VUOwogICB9CiAgIGVsc2UgaWYoX19IQUxfU0RfR0VUX0ZMQUcoaHNkLCBTRElPX0ZMQUdfRENSQ0ZBSUwpKQogICB7CiAgICAgX19IQUxfU0RfQ0xFQVJfRkxBRyhoc2QsIFNESU9fRkxBR19EQ1JDRkFJTCk7Ci0gICAgCisKICAgICByZXR1cm4gSEFMX1NEX0VSUk9SX0RBVEFfQ1JDX0ZBSUw7CiAgIH0KICAgZWxzZSBpZihfX0hBTF9TRF9HRVRfRkxBRyhoc2QsIFNESU9fRkxBR19SWE9WRVJSKSkKICAgewogICAgIF9fSEFMX1NEX0NMRUFSX0ZMQUcoaHNkLCBTRElPX0ZMQUdfUlhPVkVSUik7Ci0gICAgCisKICAgICByZXR1cm4gSEFMX1NEX0VSUk9SX1JYX09WRVJSVU47CiAgIH0KICAgZWxzZQogICB7CiAgICAgLyogTm8gZXJyb3IgZmxhZyBzZXQgKi8KICAgICAvKiBDbGVhciBhbGwgdGhlIHN0YXRpYyBmbGFncyAqLwotICAgIF9fSEFMX1NEX0NMRUFSX0ZMQUcoaHNkLCBTRElPX1NUQVRJQ19GTEFHUyk7Ci0gICAgCi0gICAgKihwU0NSICsgMVUpID0gKCh0ZW1wc2NyWzBVXSAmIFNETU1DXzBUTzdCSVRTKSA8PCAyNFUpICB8ICgodGVtcHNjclswVV0gJiBTRE1NQ184VE8xNUJJVFMpIDw8IDhVKSB8XAotICAgICAgKCh0ZW1wc2NyWzBVXSAmIFNETU1DXzE2VE8yM0JJVFMpID4+IDhVKSB8ICgodGVtcHNjclswVV0gJiBTRE1NQ18yNFRPMzFCSVRTKSA+PiAyNFUpOwotICAgIAotICAgICoocFNDUikgPSAoKHRlbXBzY3JbMVVdICYgU0RNTUNfMFRPN0JJVFMpIDw8IDI0VSkgIHwgKCh0ZW1wc2NyWzFVXSAmIFNETU1DXzhUTzE1QklUUykgPDwgOFUpIHxcCi0gICAgICAoKHRlbXBzY3JbMVVdICYgU0RNTUNfMTZUTzIzQklUUykgPj4gOFUpIHwgKCh0ZW1wc2NyWzFVXSAmIFNETU1DXzI0VE8zMUJJVFMpID4+IDI0VSk7CisgICAgX19IQUxfU0RfQ0xFQVJfRkxBRyhoc2QsIFNESU9fU1RBVElDX0RBVEFfRkxBR1MpOworCisgICAgKnNjciA9ICgoKHRlbXBzY3JbMV0gJiBTRE1NQ18wVE83QklUUykgPDwgMjQpICB8ICgodGVtcHNjclsxXSAmIFNETU1DXzhUTzE1QklUUykgPDwgOCkgfFwKKyAgICAgICAgICAgICgodGVtcHNjclsxXSAmIFNETU1DXzE2VE8yM0JJVFMpID4+IDgpIHwgKCh0ZW1wc2NyWzFdICYgU0RNTUNfMjRUTzMxQklUUykgPj4gMjQpKTsKKyAgICBzY3IrKzsKKyAgICAqc2NyID0gKCgodGVtcHNjclswXSAmIFNETU1DXzBUTzdCSVRTKSA8PCAyNCkgIHwgKCh0ZW1wc2NyWzBdICYgU0RNTUNfOFRPMTVCSVRTKSA8PCA4KSB8XAorICAgICAgICAgICAgKCh0ZW1wc2NyWzBdICYgU0RNTUNfMTZUTzIzQklUUykgPj4gOCkgfCAoKHRlbXBzY3JbMF0gJiBTRE1NQ18yNFRPMzFCSVRTKSA+PiAyNCkpOworCiAgIH0KIAogICByZXR1cm4gSEFMX1NEX0VSUk9SX05PTkU7CkBAIC0zMjQ4LDYwICszMjAxLDg2IEBACiAKIC8qKgogICAqIEBicmllZiAgV3JhcCB1cCByZWFkaW5nIGluIG5vbi1ibG9ja2luZyBtb2RlLgotICAqIEBwYXJhbSAgaHNkIHBvaW50ZXIgdG8gYSBTRF9IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCisgICogQHBhcmFtICBoc2Q6IHBvaW50ZXIgdG8gYSBTRF9IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCiAgICogICAgICAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uLgotICAqIEByZXR2YWwgSEFMIHN0YXR1cworICAqIEByZXR2YWwgTm9uZQogICAqLwotc3RhdGljIEhBTF9TdGF0dXNUeXBlRGVmIFNEX1JlYWRfSVQoU0RfSGFuZGxlVHlwZURlZiAqaHNkKQorc3RhdGljIHZvaWQgU0RfUmVhZF9JVChTRF9IYW5kbGVUeXBlRGVmICpoc2QpCiB7Ci0gIHVpbnQzMl90IGNvdW50ID0gMFU7Ci0gIHVpbnQzMl90KiB0bXA7CisgIHVpbnQzMl90IGNvdW50LCBkYXRhLCBkYXRhcmVtYWluaW5nOworICB1aW50OF90KiB0bXA7CiAKLSAgdG1wID0gKHVpbnQzMl90Kiloc2QtPnBSeEJ1ZmZQdHI7Ci0gIAotICAvKiBSZWFkIGRhdGEgZnJvbSBTRElPIFJ4IEZJRk8gKi8KLSAgZm9yKGNvdW50ID0gMFU7IGNvdW50IDwgOFU7IGNvdW50KyspCisgIHRtcCA9IGhzZC0+cFJ4QnVmZlB0cjsKKyAgZGF0YXJlbWFpbmluZyA9IGhzZC0+UnhYZmVyU2l6ZTsKKworICBpZiAoZGF0YXJlbWFpbmluZyA+IDBVKQogICB7Ci0gICAgKih0bXAgKyBjb3VudCkgPSBTRElPX1JlYWRGSUZPKGhzZC0+SW5zdGFuY2UpOworICAgIC8qIFJlYWQgZGF0YSBmcm9tIFNESU8gUnggRklGTyAqLworICAgIGZvcihjb3VudCA9IDBVOyBjb3VudCA8IDhVOyBjb3VudCsrKQorICAgIHsKKyAgICAgIGRhdGEgPSBTRElPX1JlYWRGSUZPKGhzZC0+SW5zdGFuY2UpOworICAgICAgKnRtcCA9ICh1aW50OF90KShkYXRhICYgMHhGRlUpOworICAgICAgdG1wKys7CisgICAgICBkYXRhcmVtYWluaW5nLS07CisgICAgICAqdG1wID0gKHVpbnQ4X3QpKChkYXRhID4+IDhVKSAmIDB4RkZVKTsKKyAgICAgIHRtcCsrOworICAgICAgZGF0YXJlbWFpbmluZy0tOworICAgICAgKnRtcCA9ICh1aW50OF90KSgoZGF0YSA+PiAxNlUpICYgMHhGRlUpOworICAgICAgdG1wKys7CisgICAgICBkYXRhcmVtYWluaW5nLS07CisgICAgICAqdG1wID0gKHVpbnQ4X3QpKChkYXRhID4+IDI0VSkgJiAweEZGVSk7CisgICAgICB0bXArKzsKKyAgICAgIGRhdGFyZW1haW5pbmctLTsKKyAgICB9CisKKyAgICBoc2QtPnBSeEJ1ZmZQdHIgPSB0bXA7CisgICAgaHNkLT5SeFhmZXJTaXplID0gZGF0YXJlbWFpbmluZzsKICAgfQotICAKLSAgaHNkLT5wUnhCdWZmUHRyICs9IDhVOwotICAKLSAgcmV0dXJuIEhBTF9PSzsKIH0KIAogLyoqCiAgICogQGJyaWVmICBXcmFwIHVwIHdyaXRpbmcgaW4gbm9uLWJsb2NraW5nIG1vZGUuCi0gICogQHBhcmFtICBoc2QgcG9pbnRlciB0byBhIFNEX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKKyAgKiBAcGFyYW0gIGhzZDogcG9pbnRlciB0byBhIFNEX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKICAgKiAgICAgICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24uCi0gICogQHJldHZhbCBIQUwgc3RhdHVzCisgICogQHJldHZhbCBOb25lCiAgICovCi1zdGF0aWMgSEFMX1N0YXR1c1R5cGVEZWYgU0RfV3JpdGVfSVQoU0RfSGFuZGxlVHlwZURlZiAqaHNkKQorc3RhdGljIHZvaWQgU0RfV3JpdGVfSVQoU0RfSGFuZGxlVHlwZURlZiAqaHNkKQogewotICB1aW50MzJfdCBjb3VudCA9IDBVOwotICB1aW50MzJfdCogdG1wOwotICAKLSAgdG1wID0gKHVpbnQzMl90Kiloc2QtPnBUeEJ1ZmZQdHI7Ci0gIAotICAvKiBXcml0ZSBkYXRhIHRvIFNESU8gVHggRklGTyAqLwotICBmb3IoY291bnQgPSAwVTsgY291bnQgPCA4VTsgY291bnQrKykKKyAgdWludDMyX3QgY291bnQsIGRhdGEsIGRhdGFyZW1haW5pbmc7CisgIHVpbnQ4X3QqIHRtcDsKKworICB0bXAgPSBoc2QtPnBUeEJ1ZmZQdHI7CisgIGRhdGFyZW1haW5pbmcgPSBoc2QtPlR4WGZlclNpemU7CisKKyAgaWYgKGRhdGFyZW1haW5pbmcgPiAwVSkKICAgewotICAgIFNESU9fV3JpdGVGSUZPKGhzZC0+SW5zdGFuY2UsICh0bXAgKyBjb3VudCkpOworICAgIC8qIFdyaXRlIGRhdGEgdG8gU0RJTyBUeCBGSUZPICovCisgICAgZm9yKGNvdW50ID0gMFU7IGNvdW50IDwgOFU7IGNvdW50KyspCisgICAgeworICAgICAgZGF0YSA9ICh1aW50MzJfdCkoKnRtcCk7CisgICAgICB0bXArKzsKKyAgICAgIGRhdGFyZW1haW5pbmctLTsKKyAgICAgIGRhdGEgfD0gKCh1aW50MzJfdCkoKnRtcCkgPDwgOFUpOworICAgICAgdG1wKys7CisgICAgICBkYXRhcmVtYWluaW5nLS07CisgICAgICBkYXRhIHw9ICgodWludDMyX3QpKCp0bXApIDw8IDE2VSk7CisgICAgICB0bXArKzsKKyAgICAgIGRhdGFyZW1haW5pbmctLTsKKyAgICAgIGRhdGEgfD0gKCh1aW50MzJfdCkoKnRtcCkgPDwgMjRVKTsKKyAgICAgIHRtcCsrOworICAgICAgZGF0YXJlbWFpbmluZy0tOworICAgICAgKHZvaWQpU0RJT19Xcml0ZUZJRk8oaHNkLT5JbnN0YW5jZSwgJmRhdGEpOworICAgIH0KKworICAgIGhzZC0+cFR4QnVmZlB0ciA9IHRtcDsKKyAgICBoc2QtPlR4WGZlclNpemUgPSBkYXRhcmVtYWluaW5nOwogICB9Ci0gIAotICBoc2QtPnBUeEJ1ZmZQdHIgKz0gOFU7Ci0gIAotICByZXR1cm4gSEFMX09LOwogfQogCiAvKioKICAgKiBAfQogICAqLwogCi0jZW5kaWYgLyogU1RNMzJGNDA1eHggfHwgU1RNMzJGNDE1eHggfHwgU1RNMzJGNDA3eHggfHwgU1RNMzJGNDE3eHggfHwgU1RNMzJGNDI3eHggfHwgU1RNMzJGNDM3eHggfHwgU1RNMzJGNDI5eHggfHwgU1RNMzJGNDM5eHggfHwKLSAgICAgICAgICBTVE0zMkY0MDF4QyB8fCBTVE0zMkY0MDF4RSB8fCBTVE0zMkY0MTF4RSB8fCBTVE0zMkY0NDZ4eCB8fCBTVE0zMkY0Njl4eCB8fCBTVE0zMkY0Nzl4eCB8fCBTVE0zMkY0MTJaeCB8fCBTVE0zMkY0MTJWeCB8fCAKLSAgICAgICAgICBTVE0zMkY0MTJSeCB8fCBTVE0zMkY0MTJDeCB8fCBTVE0zMkY0MTN4eCB8fCBTVE0zMkY0MjN4eCAqLwotCiAjZW5kaWYgLyogSEFMX1NEX01PRFVMRV9FTkFCTEVEICovCiAKIC8qKgpAQCAtMzMxMiw0ICszMjkxLDYgQEAKICAgKiBAfQogICAqLwogCisjZW5kaWYgLyogU0RJTyAqLworCiAvKioqKioqKioqKioqKioqKioqKioqKioqIChDKSBDT1BZUklHSFQgU1RNaWNyb2VsZWN0cm9uaWNzICoqKioqRU5EIE9GIEZJTEUqKioqLwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjR4eF9oYWxfc21hcnRjYXJkLmMgYi9TcmMvc3RtMzJmNHh4X2hhbF9zbWFydGNhcmQuYwppbmRleCA2Yjc5ZjlhLi4yZGUyYmIwIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmNHh4X2hhbF9zbWFydGNhcmQuYworKysgYi9TcmMvc3RtMzJmNHh4X2hhbF9zbWFydGNhcmQuYwpAQCAtMTU3MCw3ICsxNTcwLDcgQEAKICAgICB9CiAKICAgICAvKiBTTUFSVENBUkQgT3Zlci1SdW4gaW50ZXJydXB0IG9jY3VycmVkIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotICAgIGlmKCgoaXNyZmxhZ3MgJiBTTUFSVENBUkRfRkxBR19PUkUpICE9IFJFU0VUKSAmJiAoKGNyM2l0cyAmIFVTQVJUX0NSM19FSUUpICE9IFJFU0VUKSkKKyAgICBpZigoKGlzcmZsYWdzICYgU01BUlRDQVJEX0ZMQUdfT1JFKSAhPSBSRVNFVCkgJiYgKCgoY3IxaXRzICYgVVNBUlRfQ1IxX1JYTkVJRSkgIT0gUkVTRVQpIHx8ICgoY3IzaXRzICYgVVNBUlRfQ1IzX0VJRSkgIT0gUkVTRVQpKSkKICAgICB7CiAgICAgICBoc2MtPkVycm9yQ29kZSB8PSBIQUxfU01BUlRDQVJEX0VSUk9SX09SRTsKICAgICB9CkBAIC0yMjY5LDYgKzIyNjksNyBAQAogc3RhdGljIHZvaWQgU01BUlRDQVJEX1NldENvbmZpZyhTTUFSVENBUkRfSGFuZGxlVHlwZURlZiAqaHNjKQogewogICB1aW50MzJfdCB0bXByZWcgPSAweDAwVTsKKyAgdWludDMyX3QgcGNsazsKIAogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfU01BUlRDQVJEX0lOU1RBTkNFKGhzYy0+SW5zdGFuY2UpKTsKQEAgLTIzMzUsMTcgKzIzMzYsMjAgQEAKICNpZiBkZWZpbmVkKFVTQVJUNikKICAgaWYoKGhzYy0+SW5zdGFuY2UgPT0gVVNBUlQxKSB8fCAoaHNjLT5JbnN0YW5jZSA9PSBVU0FSVDYpKQogICB7Ci0gICAgaHNjLT5JbnN0YW5jZS0+QlJSID0gU01BUlRDQVJEX0JSUihIQUxfUkNDX0dldFBDTEsyRnJlcSgpLCBoc2MtPkluaXQuQmF1ZFJhdGUpOworICAgIHBjbGsgPSBIQUxfUkNDX0dldFBDTEsyRnJlcSgpOworICAgIGhzYy0+SW5zdGFuY2UtPkJSUiA9IFNNQVJUQ0FSRF9CUlIocGNsaywgaHNjLT5Jbml0LkJhdWRSYXRlKTsKICAgfQogI2Vsc2UKICAgaWYoaHNjLT5JbnN0YW5jZSA9PSBVU0FSVDEpCiAgIHsKLSAgICBoc2MtPkluc3RhbmNlLT5CUlIgPSBTTUFSVENBUkRfQlJSKEhBTF9SQ0NfR2V0UENMSzJGcmVxKCksIGhzYy0+SW5pdC5CYXVkUmF0ZSk7CisgICAgcGNsayA9IEhBTF9SQ0NfR2V0UENMSzJGcmVxKCk7CisgICAgaHNjLT5JbnN0YW5jZS0+QlJSID0gU01BUlRDQVJEX0JSUihwY2xrLCBoc2MtPkluaXQuQmF1ZFJhdGUpOwogICB9CiAjZW5kaWYgLyogVVNBUlQ2ICovCiAgIGVsc2UKICAgewotICAgIGhzYy0+SW5zdGFuY2UtPkJSUiA9IFNNQVJUQ0FSRF9CUlIoSEFMX1JDQ19HZXRQQ0xLMUZyZXEoKSwgaHNjLT5Jbml0LkJhdWRSYXRlKTsKKyAgICBwY2xrID0gSEFMX1JDQ19HZXRQQ0xLMUZyZXEoKTsKKyAgICBoc2MtPkluc3RhbmNlLT5CUlIgPSBTTUFSVENBUkRfQlJSKHBjbGssIGhzYy0+SW5pdC5CYXVkUmF0ZSk7CiAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjR4eF9oYWxfc21idXMuYyBiL1NyYy9zdG0zMmY0eHhfaGFsX3NtYnVzLmMKaW5kZXggNmU3YzUwOC4uNDZhYzAzMSAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZjR4eF9oYWxfc21idXMuYworKysgYi9TcmMvc3RtMzJmNHh4X2hhbF9zbWJ1cy5jCkBAIC05Miw3ICs5Miw3IEBACiAKICAgICAgKioqIENhbGxiYWNrIHJlZ2lzdHJhdGlvbiAqKioKICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KKyAgICBbLi5dCiAgICAgIFRoZSBjb21waWxhdGlvbiBmbGFnIFVTRV9IQUxfU01CVVNfUkVHSVNURVJfQ0FMTEJBQ0tTIHdoZW4gc2V0IHRvIDEKICAgICAgYWxsb3dzIHRoZSB1c2VyIHRvIGNvbmZpZ3VyZSBkeW5hbWljYWxseSB0aGUgZHJpdmVyIGNhbGxiYWNrcy4KICAgICAgVXNlIEZ1bmN0aW9ucyBAcmVmIEhBTF9TTUJVU19SZWdpc3RlckNhbGxiYWNrKCkgb3IgQHJlZiBIQUxfU01CVVNfUmVnaXN0ZXJYWFhDYWxsYmFjaygpCkBAIC0xMTAsOSArMTEwLDkgQEAKICAgICAgICAoKykgTXNwRGVJbml0Q2FsbGJhY2sgICAgOiBjYWxsYmFjayBmb3IgTXNwIERlSW5pdC4KICAgICAgVGhpcyBmdW5jdGlvbiB0YWtlcyBhcyBwYXJhbWV0ZXJzIHRoZSBIQUwgcGVyaXBoZXJhbCBoYW5kbGUsIHRoZSBDYWxsYmFjayBJRAogICAgICBhbmQgYSBwb2ludGVyIHRvIHRoZSB1c2VyIGNhbGxiYWNrIGZ1bmN0aW9uLgotCisgICAgWy4uXQogICAgICBGb3Igc3BlY2lmaWMgY2FsbGJhY2sgQWRkckNhbGxiYWNrIHVzZSBkZWRpY2F0ZWQgcmVnaXN0ZXIgY2FsbGJhY2tzIDogQHJlZiBIQUxfU01CVVNfUmVnaXN0ZXJBZGRyQ2FsbGJhY2soKS4KLQorICAgIFsuLl0KICAgICAgVXNlIGZ1bmN0aW9uIEByZWYgSEFMX1NNQlVTX1VuUmVnaXN0ZXJDYWxsYmFjayB0byByZXNldCBhIGNhbGxiYWNrIHRvIHRoZSBkZWZhdWx0CiAgICAgIHdlYWsgZnVuY3Rpb24uCiAgICAgIEByZWYgSEFMX1NNQlVTX1VuUmVnaXN0ZXJDYWxsYmFjayB0YWtlcyBhcyBwYXJhbWV0ZXJzIHRoZSBIQUwgcGVyaXBoZXJhbCBoYW5kbGUsCkBAIC0xMjcsOSArMTI3LDkgQEAKICAgICAgICAoKykgQWJvcnRDcGx0Q2FsbGJhY2sgICAgOiBjYWxsYmFjayBmb3IgYWJvcnQgY29tcGxldGlvbiBwcm9jZXNzLgogICAgICAgICgrKSBNc3BJbml0Q2FsbGJhY2sgICAgICA6IGNhbGxiYWNrIGZvciBNc3AgSW5pdC4KICAgICAgICAoKykgTXNwRGVJbml0Q2FsbGJhY2sgICAgOiBjYWxsYmFjayBmb3IgTXNwIERlSW5pdC4KLQorICAgIFsuLl0KICAgICAgRm9yIGNhbGxiYWNrIEFkZHJDYWxsYmFjayB1c2UgZGVkaWNhdGVkIHJlZ2lzdGVyIGNhbGxiYWNrcyA6IEByZWYgSEFMX1NNQlVTX1VuUmVnaXN0ZXJBZGRyQ2FsbGJhY2soKS4KLQorICAgIFsuLl0KICAgICAgQnkgZGVmYXVsdCwgYWZ0ZXIgdGhlIEByZWYgSEFMX1NNQlVTX0luaXQoKSBhbmQgd2hlbiB0aGUgc3RhdGUgaXMgQHJlZiBIQUxfU01CVVNfU1RBVEVfUkVTRVQKICAgICAgYWxsIGNhbGxiYWNrcyBhcmUgc2V0IHRvIHRoZSBjb3JyZXNwb25kaW5nIHdlYWsgZnVuY3Rpb25zOgogICAgICBleGFtcGxlcyBAcmVmIEhBTF9TTUJVU19NYXN0ZXJUeENwbHRDYWxsYmFjaygpLCBAcmVmIEhBTF9TTUJVU19NYXN0ZXJSeENwbHRDYWxsYmFjaygpLgpAQCAtMTM4LDcgKzEzOCw3IEBACiAgICAgIHRoZXNlIGNhbGxiYWNrcyBhcmUgbnVsbCAobm90IHJlZ2lzdGVyZWQgYmVmb3JlaGFuZCkuCiAgICAgIElmIE1zcEluaXQgb3IgTXNwRGVJbml0IGFyZSBub3QgbnVsbCwgdGhlIEByZWYgSEFMX1NNQlVTX0luaXQoKS8gQHJlZiBIQUxfU01CVVNfRGVJbml0KCkKICAgICAga2VlcCBhbmQgdXNlIHRoZSB1c2VyIE1zcEluaXQvTXNwRGVJbml0IGNhbGxiYWNrcyAocmVnaXN0ZXJlZCBiZWZvcmVoYW5kKSB3aGF0ZXZlciB0aGUgc3RhdGUuCi0KKyAgICBbLi5dCiAgICAgIENhbGxiYWNrcyBjYW4gYmUgcmVnaXN0ZXJlZC91bnJlZ2lzdGVyZWQgaW4gQHJlZiBIQUxfU01CVVNfU1RBVEVfUkVBRFkgc3RhdGUgb25seS4KICAgICAgRXhjZXB0aW9uIGRvbmUgTXNwSW5pdC9Nc3BEZUluaXQgZnVuY3Rpb25zIHRoYXQgY2FuIGJlIHJlZ2lzdGVyZWQvdW5yZWdpc3RlcmVkCiAgICAgIGluIEByZWYgSEFMX1NNQlVTX1NUQVRFX1JFQURZIG9yIEByZWYgSEFMX1NNQlVTX1NUQVRFX1JFU0VUIHN0YXRlLApAQCAtMTQ2LDcgKzE0Niw3IEBACiAgICAgIFRoZW4sIHRoZSB1c2VyIGZpcnN0IHJlZ2lzdGVycyB0aGUgTXNwSW5pdC9Nc3BEZUluaXQgdXNlciBjYWxsYmFja3MKICAgICAgdXNpbmcgQHJlZiBIQUxfU01CVVNfUmVnaXN0ZXJDYWxsYmFjaygpIGJlZm9yZSBjYWxsaW5nIEByZWYgSEFMX1NNQlVTX0RlSW5pdCgpCiAgICAgIG9yIEByZWYgSEFMX1NNQlVTX0luaXQoKSBmdW5jdGlvbi4KLQorICAgIFsuLl0KICAgICAgV2hlbiB0aGUgY29tcGlsYXRpb24gZmxhZyBVU0VfSEFMX1NNQlVTX1JFR0lTVEVSX0NBTExCQUNLUyBpcyBzZXQgdG8gMCBvcgogICAgICBub3QgZGVmaW5lZCwgdGhlIGNhbGxiYWNrIHJlZ2lzdHJhdGlvbiBmZWF0dXJlIGlzIG5vdCBhdmFpbGFibGUgYW5kIGFsbCBjYWxsYmFja3MKICAgICAgYXJlIHNldCB0byB0aGUgY29ycmVzcG9uZGluZyB3ZWFrIGZ1bmN0aW9ucy4KZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmY0eHhfaGFsX3NwaS5jIGIvU3JjL3N0bTMyZjR4eF9oYWxfc3BpLmMKaW5kZXggZmJlNTdmNC4uZDE2NjY3NCAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZjR4eF9oYWxfc3BpLmMKKysrIGIvU3JjL3N0bTMyZjR4eF9oYWxfc3BpLmMKQEAgLTY1LDE2ICs2NSwxNiBAQAogICAgICAgICAgIFVzZSBGdW5jdGlvbnMgSEFMX1NQSV9SZWdpc3RlckNhbGxiYWNrKCkgdG8gcmVnaXN0ZXIgYW4gaW50ZXJydXB0IGNhbGxiYWNrLgogCiAgICAgICAgICAgRnVuY3Rpb24gSEFMX1NQSV9SZWdpc3RlckNhbGxiYWNrKCkgYWxsb3dzIHRvIHJlZ2lzdGVyIGZvbGxvd2luZyBjYWxsYmFja3M6Ci0gICAgICAgICAgICAoKykgVHhDcGx0Q2FsbGJhY2sgICAgICAgIDogU1BJIFR4IENvbXBsZXRlZCBjYWxsYmFjawotICAgICAgICAgICAgKCspIFJ4Q3BsdENhbGxiYWNrICAgICAgICA6IFNQSSBSeCBDb21wbGV0ZWQgY2FsbGJhY2sKLSAgICAgICAgICAgICgrKSBUeFJ4Q3BsdENhbGxiYWNrICAgICAgOiBTUEkgVHhSeCBDb21wbGV0ZWQgY2FsbGJhY2sKLSAgICAgICAgICAgICgrKSBUeEhhbGZDcGx0Q2FsbGJhY2sgICAgOiBTUEkgVHggSGFsZiBDb21wbGV0ZWQgY2FsbGJhY2sKLSAgICAgICAgICAgICgrKSBSeEhhbGZDcGx0Q2FsbGJhY2sgICAgOiBTUEkgUnggSGFsZiBDb21wbGV0ZWQgY2FsbGJhY2sKLSAgICAgICAgICAgICgrKSBUeFJ4SGFsZkNwbHRDYWxsYmFjayAgOiBTUEkgVHhSeCBIYWxmIENvbXBsZXRlZCBjYWxsYmFjawotICAgICAgICAgICAgKCspIEVycm9yQ2FsbGJhY2sgICAgICAgICA6IFNQSSBFcnJvciBjYWxsYmFjawotICAgICAgICAgICAgKCspIEFib3J0Q3BsdENhbGxiYWNrICAgICA6IFNQSSBBYm9ydCBjYWxsYmFjawotICAgICAgICAgICAgKCspIE1zcEluaXRDYWxsYmFjayAgICAgICA6IFNQSSBNc3AgSW5pdCBjYWxsYmFjawotICAgICAgICAgICAgKCspIE1zcERlSW5pdENhbGxiYWNrICAgICA6IFNQSSBNc3AgRGVJbml0IGNhbGxiYWNrCisgICAgICAgICAgICAoKyspIFR4Q3BsdENhbGxiYWNrICAgICAgICA6IFNQSSBUeCBDb21wbGV0ZWQgY2FsbGJhY2sKKyAgICAgICAgICAgICgrKykgUnhDcGx0Q2FsbGJhY2sgICAgICAgIDogU1BJIFJ4IENvbXBsZXRlZCBjYWxsYmFjaworICAgICAgICAgICAgKCsrKSBUeFJ4Q3BsdENhbGxiYWNrICAgICAgOiBTUEkgVHhSeCBDb21wbGV0ZWQgY2FsbGJhY2sKKyAgICAgICAgICAgICgrKykgVHhIYWxmQ3BsdENhbGxiYWNrICAgIDogU1BJIFR4IEhhbGYgQ29tcGxldGVkIGNhbGxiYWNrCisgICAgICAgICAgICAoKyspIFJ4SGFsZkNwbHRDYWxsYmFjayAgICA6IFNQSSBSeCBIYWxmIENvbXBsZXRlZCBjYWxsYmFjaworICAgICAgICAgICAgKCsrKSBUeFJ4SGFsZkNwbHRDYWxsYmFjayAgOiBTUEkgVHhSeCBIYWxmIENvbXBsZXRlZCBjYWxsYmFjaworICAgICAgICAgICAgKCsrKSBFcnJvckNhbGxiYWNrICAgICAgICAgOiBTUEkgRXJyb3IgY2FsbGJhY2sKKyAgICAgICAgICAgICgrKykgQWJvcnRDcGx0Q2FsbGJhY2sgICAgIDogU1BJIEFib3J0IGNhbGxiYWNrCisgICAgICAgICAgICAoKyspIE1zcEluaXRDYWxsYmFjayAgICAgICA6IFNQSSBNc3AgSW5pdCBjYWxsYmFjaworICAgICAgICAgICAgKCsrKSBNc3BEZUluaXRDYWxsYmFjayAgICAgOiBTUEkgTXNwIERlSW5pdCBjYWxsYmFjawogICAgICAgICAgIFRoaXMgZnVuY3Rpb24gdGFrZXMgYXMgcGFyYW1ldGVycyB0aGUgSEFMIHBlcmlwaGVyYWwgaGFuZGxlLCB0aGUgQ2FsbGJhY2sgSUQKICAgICAgICAgICBhbmQgYSBwb2ludGVyIHRvIHRoZSB1c2VyIGNhbGxiYWNrIGZ1bmN0aW9uLgogCkBAIC04NCwxNyArODQsMTggQEAKICAgICAgICAgICBIQUxfU1BJX1VuUmVnaXN0ZXJDYWxsYmFjayB0YWtlcyBhcyBwYXJhbWV0ZXJzIHRoZSBIQUwgcGVyaXBoZXJhbCBoYW5kbGUsCiAgICAgICAgICAgYW5kIHRoZSBDYWxsYmFjayBJRC4KICAgICAgICAgICBUaGlzIGZ1bmN0aW9uIGFsbG93cyB0byByZXNldCBmb2xsb3dpbmcgY2FsbGJhY2tzOgotICAgICAgICAgICAgKCspIFR4Q3BsdENhbGxiYWNrICAgICAgICA6IFNQSSBUeCBDb21wbGV0ZWQgY2FsbGJhY2sKLSAgICAgICAgICAgICgrKSBSeENwbHRDYWxsYmFjayAgICAgICAgOiBTUEkgUnggQ29tcGxldGVkIGNhbGxiYWNrCi0gICAgICAgICAgICAoKykgVHhSeENwbHRDYWxsYmFjayAgICAgIDogU1BJIFR4UnggQ29tcGxldGVkIGNhbGxiYWNrCi0gICAgICAgICAgICAoKykgVHhIYWxmQ3BsdENhbGxiYWNrICAgIDogU1BJIFR4IEhhbGYgQ29tcGxldGVkIGNhbGxiYWNrCi0gICAgICAgICAgICAoKykgUnhIYWxmQ3BsdENhbGxiYWNrICAgIDogU1BJIFJ4IEhhbGYgQ29tcGxldGVkIGNhbGxiYWNrCi0gICAgICAgICAgICAoKykgVHhSeEhhbGZDcGx0Q2FsbGJhY2sgIDogU1BJIFR4UnggSGFsZiBDb21wbGV0ZWQgY2FsbGJhY2sKLSAgICAgICAgICAgICgrKSBFcnJvckNhbGxiYWNrICAgICAgICAgOiBTUEkgRXJyb3IgY2FsbGJhY2sKLSAgICAgICAgICAgICgrKSBBYm9ydENwbHRDYWxsYmFjayAgICAgOiBTUEkgQWJvcnQgY2FsbGJhY2sKLSAgICAgICAgICAgICgrKSBNc3BJbml0Q2FsbGJhY2sgICAgICAgOiBTUEkgTXNwIEluaXQgY2FsbGJhY2sKLSAgICAgICAgICAgICgrKSBNc3BEZUluaXRDYWxsYmFjayAgICAgOiBTUEkgTXNwIERlSW5pdCBjYWxsYmFjaworICAgICAgICAgICAgKCsrKSBUeENwbHRDYWxsYmFjayAgICAgICAgOiBTUEkgVHggQ29tcGxldGVkIGNhbGxiYWNrCisgICAgICAgICAgICAoKyspIFJ4Q3BsdENhbGxiYWNrICAgICAgICA6IFNQSSBSeCBDb21wbGV0ZWQgY2FsbGJhY2sKKyAgICAgICAgICAgICgrKykgVHhSeENwbHRDYWxsYmFjayAgICAgIDogU1BJIFR4UnggQ29tcGxldGVkIGNhbGxiYWNrCisgICAgICAgICAgICAoKyspIFR4SGFsZkNwbHRDYWxsYmFjayAgICA6IFNQSSBUeCBIYWxmIENvbXBsZXRlZCBjYWxsYmFjaworICAgICAgICAgICAgKCsrKSBSeEhhbGZDcGx0Q2FsbGJhY2sgICAgOiBTUEkgUnggSGFsZiBDb21wbGV0ZWQgY2FsbGJhY2sKKyAgICAgICAgICAgICgrKykgVHhSeEhhbGZDcGx0Q2FsbGJhY2sgIDogU1BJIFR4UnggSGFsZiBDb21wbGV0ZWQgY2FsbGJhY2sKKyAgICAgICAgICAgICgrKykgRXJyb3JDYWxsYmFjayAgICAgICAgIDogU1BJIEVycm9yIGNhbGxiYWNrCisgICAgICAgICAgICAoKyspIEFib3J0Q3BsdENhbGxiYWNrICAgICA6IFNQSSBBYm9ydCBjYWxsYmFjaworICAgICAgICAgICAgKCsrKSBNc3BJbml0Q2FsbGJhY2sgICAgICAgOiBTUEkgTXNwIEluaXQgY2FsbGJhY2sKKyAgICAgICAgICAgICgrKykgTXNwRGVJbml0Q2FsbGJhY2sgICAgIDogU1BJIE1zcCBEZUluaXQgY2FsbGJhY2sKIAorICAgICAgIFsuLl0KICAgICAgICBCeSBkZWZhdWx0LCBhZnRlciB0aGUgSEFMX1NQSV9Jbml0KCkgYW5kIHdoZW4gdGhlIHN0YXRlIGlzIEhBTF9TUElfU1RBVEVfUkVTRVQKICAgICAgICBhbGwgY2FsbGJhY2tzIGFyZSBzZXQgdG8gdGhlIGNvcnJlc3BvbmRpbmcgd2VhayBmdW5jdGlvbnM6CiAgICAgICAgZXhhbXBsZXMgSEFMX1NQSV9NYXN0ZXJUeENwbHRDYWxsYmFjaygpLCBIQUxfU1BJX01hc3RlclJ4Q3BsdENhbGxiYWNrKCkuCkBAIC0xMDQsNiArMTA1LDcgQEAKICAgICAgICBJZiBNc3BJbml0IG9yIE1zcERlSW5pdCBhcmUgbm90IG51bGwsIHRoZSBIQUxfU1BJX0luaXQoKS8gSEFMX1NQSV9EZUluaXQoKQogICAgICAgIGtlZXAgYW5kIHVzZSB0aGUgdXNlciBNc3BJbml0L01zcERlSW5pdCBjYWxsYmFja3MgKHJlZ2lzdGVyZWQgYmVmb3JlaGFuZCkgd2hhdGV2ZXIgdGhlIHN0YXRlLgogCisgICAgICAgWy4uXQogICAgICAgIENhbGxiYWNrcyBjYW4gYmUgcmVnaXN0ZXJlZC91bnJlZ2lzdGVyZWQgaW4gSEFMX1NQSV9TVEFURV9SRUFEWSBzdGF0ZSBvbmx5LgogICAgICAgIEV4Y2VwdGlvbiBkb25lIE1zcEluaXQvTXNwRGVJbml0IGZ1bmN0aW9ucyB0aGF0IGNhbiBiZSByZWdpc3RlcmVkL3VucmVnaXN0ZXJlZAogICAgICAgIGluIEhBTF9TUElfU1RBVEVfUkVBRFkgb3IgSEFMX1NQSV9TVEFURV9SRVNFVCBzdGF0ZSwKQEAgLTExMiw3ICsxMTQsOCBAQAogICAgICAgIHVzaW5nIEhBTF9TUElfUmVnaXN0ZXJDYWxsYmFjaygpIGJlZm9yZSBjYWxsaW5nIEhBTF9TUElfRGVJbml0KCkKICAgICAgICBvciBIQUxfU1BJX0luaXQoKSBmdW5jdGlvbi4KIAotICAgICAgIFdoZW4gVGhlIGNvbXBpbGF0aW9uIGRlZmluZSBVU0VfSEFMX1BQUF9SRUdJU1RFUl9DQUxMQkFDS1MgaXMgc2V0IHRvIDAgb3IKKyAgICAgICBbLi5dCisgICAgICAgV2hlbiB0aGUgY29tcGlsYXRpb24gZGVmaW5lIFVTRV9IQUxfUFBQX1JFR0lTVEVSX0NBTExCQUNLUyBpcyBzZXQgdG8gMCBvcgogICAgICAgIG5vdCBkZWZpbmVkLCB0aGUgY2FsbGJhY2sgcmVnaXN0ZXJpbmcgZmVhdHVyZSBpcyBub3QgYXZhaWxhYmxlCiAgICAgICAgYW5kIHdlYWsgKHN1cmNoYXJnZWQpIGNhbGxiYWNrcyBhcmUgdXNlZC4KIApAQCAtMjY4LDggKzI3MSw4IEBACiAgICovCiAKIC8qKiBAZGVmZ3JvdXAgU1BJX0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDEgSW5pdGlhbGl6YXRpb24gYW5kIGRlLWluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucwotICogIEBicmllZiAgICBJbml0aWFsaXphdGlvbiBhbmQgQ29uZmlndXJhdGlvbiBmdW5jdGlvbnMKLSAqCisgICogIEBicmllZiAgICBJbml0aWFsaXphdGlvbiBhbmQgQ29uZmlndXJhdGlvbiBmdW5jdGlvbnMKKyAgKgogQHZlcmJhdGltCiAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAgICAgICAgICAjIyMjIyBJbml0aWFsaXphdGlvbiBhbmQgZGUtaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zICMjIyMjCkBAIC00ODksNyArNDkyLDggQEAKICAgKiBAcGFyYW0gIHBDYWxsYmFjayBwb2ludGVyIHRvIHRoZSBDYWxsYmFjayBmdW5jdGlvbgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1NQSV9SZWdpc3RlckNhbGxiYWNrKFNQSV9IYW5kbGVUeXBlRGVmICpoc3BpLCBIQUxfU1BJX0NhbGxiYWNrSURUeXBlRGVmIENhbGxiYWNrSUQsIHBTUElfQ2FsbGJhY2tUeXBlRGVmIHBDYWxsYmFjaykKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9TUElfUmVnaXN0ZXJDYWxsYmFjayhTUElfSGFuZGxlVHlwZURlZiAqaHNwaSwgSEFMX1NQSV9DYWxsYmFja0lEVHlwZURlZiBDYWxsYmFja0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBTUElfQ2FsbGJhY2tUeXBlRGVmIHBDYWxsYmFjaykKIHsKICAgSEFMX1N0YXR1c1R5cGVEZWYgc3RhdHVzID0gSEFMX09LOwogCkBAIC02OTksOCArNzAzLDggQEAKICAgKi8KIAogLyoqIEBkZWZncm91cCBTUElfRXhwb3J0ZWRfRnVuY3Rpb25zX0dyb3VwMiBJTyBvcGVyYXRpb24gZnVuY3Rpb25zCi0gKiAgQGJyaWVmICAgRGF0YSB0cmFuc2ZlcnMgZnVuY3Rpb25zCi0gKgorICAqICBAYnJpZWYgICBEYXRhIHRyYW5zZmVycyBmdW5jdGlvbnMKKyAgKgogQHZlcmJhdGltCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAgICAgICAgICAgICAgICAgICMjIyMjIElPIG9wZXJhdGlvbiBmdW5jdGlvbnMgIyMjIyMKQEAgLTE2NDIsNyArMTY0Niw4IEBACiAgIGhzcGktPmhkbWF0eC0+WGZlckFib3J0Q2FsbGJhY2sgPSBOVUxMOwogCiAgIC8qIEVuYWJsZSB0aGUgVHggRE1BIFN0cmVhbS9DaGFubmVsICovCi0gIGlmIChIQUxfT0sgIT0gSEFMX0RNQV9TdGFydF9JVChoc3BpLT5oZG1hdHgsICh1aW50MzJfdCloc3BpLT5wVHhCdWZmUHRyLCAodWludDMyX3QpJmhzcGktPkluc3RhbmNlLT5EUiwgaHNwaS0+VHhYZmVyQ291bnQpKQorICBpZiAoSEFMX09LICE9IEhBTF9ETUFfU3RhcnRfSVQoaHNwaS0+aGRtYXR4LCAodWludDMyX3QpaHNwaS0+cFR4QnVmZlB0ciwgKHVpbnQzMl90KSZoc3BpLT5JbnN0YW5jZS0+RFIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoc3BpLT5UeFhmZXJDb3VudCkpCiAgIHsKICAgICAvKiBVcGRhdGUgU1BJIGVycm9yIGNvZGUgKi8KICAgICBTRVRfQklUKGhzcGktPkVycm9yQ29kZSwgSEFMX1NQSV9FUlJPUl9ETUEpOwpAQCAtMTc1NCw3ICsxNzU5LDggQEAKICAgaHNwaS0+aGRtYXJ4LT5YZmVyQWJvcnRDYWxsYmFjayA9IE5VTEw7CiAKICAgLyogRW5hYmxlIHRoZSBSeCBETUEgU3RyZWFtL0NoYW5uZWwgICovCi0gIGlmIChIQUxfT0sgIT0gSEFMX0RNQV9TdGFydF9JVChoc3BpLT5oZG1hcngsICh1aW50MzJfdCkmaHNwaS0+SW5zdGFuY2UtPkRSLCAodWludDMyX3QpaHNwaS0+cFJ4QnVmZlB0ciwgaHNwaS0+UnhYZmVyQ291bnQpKQorICBpZiAoSEFMX09LICE9IEhBTF9ETUFfU3RhcnRfSVQoaHNwaS0+aGRtYXJ4LCAodWludDMyX3QpJmhzcGktPkluc3RhbmNlLT5EUiwgKHVpbnQzMl90KWhzcGktPnBSeEJ1ZmZQdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoc3BpLT5SeFhmZXJDb3VudCkpCiAgIHsKICAgICAvKiBVcGRhdGUgU1BJIGVycm9yIGNvZGUgKi8KICAgICBTRVRfQklUKGhzcGktPkVycm9yQ29kZSwgSEFMX1NQSV9FUlJPUl9ETUEpOwpAQCAtMTg3NSw3ICsxODgxLDggQEAKICAgaHNwaS0+aGRtYXJ4LT5YZmVyQWJvcnRDYWxsYmFjayA9IE5VTEw7CiAKICAgLyogRW5hYmxlIHRoZSBSeCBETUEgU3RyZWFtL0NoYW5uZWwgICovCi0gIGlmIChIQUxfT0sgIT0gSEFMX0RNQV9TdGFydF9JVChoc3BpLT5oZG1hcngsICh1aW50MzJfdCkmaHNwaS0+SW5zdGFuY2UtPkRSLCAodWludDMyX3QpaHNwaS0+cFJ4QnVmZlB0ciwgaHNwaS0+UnhYZmVyQ291bnQpKQorICBpZiAoSEFMX09LICE9IEhBTF9ETUFfU3RhcnRfSVQoaHNwaS0+aGRtYXJ4LCAodWludDMyX3QpJmhzcGktPkluc3RhbmNlLT5EUiwgKHVpbnQzMl90KWhzcGktPnBSeEJ1ZmZQdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoc3BpLT5SeFhmZXJDb3VudCkpCiAgIHsKICAgICAvKiBVcGRhdGUgU1BJIGVycm9yIGNvZGUgKi8KICAgICBTRVRfQklUKGhzcGktPkVycm9yQ29kZSwgSEFMX1NQSV9FUlJPUl9ETUEpOwpAQCAtMTg5Niw3ICsxOTAzLDggQEAKICAgaHNwaS0+aGRtYXR4LT5YZmVyQWJvcnRDYWxsYmFjayAgICA9IE5VTEw7CiAKICAgLyogRW5hYmxlIHRoZSBUeCBETUEgU3RyZWFtL0NoYW5uZWwgICovCi0gIGlmIChIQUxfT0sgIT0gSEFMX0RNQV9TdGFydF9JVChoc3BpLT5oZG1hdHgsICh1aW50MzJfdCloc3BpLT5wVHhCdWZmUHRyLCAodWludDMyX3QpJmhzcGktPkluc3RhbmNlLT5EUiwgaHNwaS0+VHhYZmVyQ291bnQpKQorICBpZiAoSEFMX09LICE9IEhBTF9ETUFfU3RhcnRfSVQoaHNwaS0+aGRtYXR4LCAodWludDMyX3QpaHNwaS0+cFR4QnVmZlB0ciwgKHVpbnQzMl90KSZoc3BpLT5JbnN0YW5jZS0+RFIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoc3BpLT5UeFhmZXJDb3VudCkpCiAgIHsKICAgICAvKiBVcGRhdGUgU1BJIGVycm9yIGNvZGUgKi8KICAgICBTRVRfQklUKGhzcGktPkVycm9yQ29kZSwgSEFMX1NQSV9FUlJPUl9ETUEpOwpAQCAtMTkzNiwxMSArMTk0NCwxMiBAQAogICAqICAgICAgICAgICAtIFNldCBoYW5kbGUgU3RhdGUgdG8gUkVBRFkKICAgKiBAbm90ZSAgIFRoaXMgcHJvY2VkdXJlIGlzIGV4ZWN1dGVkIGluIGJsb2NraW5nIG1vZGUgOiB3aGVuIGV4aXRpbmcgZnVuY3Rpb24sIEFib3J0IGlzIGNvbnNpZGVyZWQgYXMgY29tcGxldGVkLgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwotKi8KKyAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9TUElfQWJvcnQoU1BJX0hhbmRsZVR5cGVEZWYgKmhzcGkpCiB7CiAgIEhBTF9TdGF0dXNUeXBlRGVmIGVycm9yY29kZTsKLSAgX19JTyB1aW50MzJfdCBjb3VudCwgcmVzZXRjb3VudDsKKyAgX19JTyB1aW50MzJfdCBjb3VudDsKKyAgX19JTyB1aW50MzJfdCByZXNldGNvdW50OwogCiAgIC8qIEluaXRpYWxpemVkIGxvY2FsIHZhcmlhYmxlICAqLwogICBlcnJvcmNvZGUgPSBIQUxfT0s7CkBAIC0xOTYzLDggKzE5NzIsNyBAQAogICAgICAgICBicmVhazsKICAgICAgIH0KICAgICAgIGNvdW50LS07Ci0gICAgfQotICAgIHdoaWxlIChoc3BpLT5TdGF0ZSAhPSBIQUxfU1BJX1NUQVRFX0FCT1JUKTsKKyAgICB9IHdoaWxlIChoc3BpLT5TdGF0ZSAhPSBIQUxfU1BJX1NUQVRFX0FCT1JUKTsKICAgICAvKiBSZXNldCBUaW1lb3V0IENvdW50ZXIgKi8KICAgICBjb3VudCA9IHJlc2V0Y291bnQ7CiAgIH0KQEAgLTE5ODEsOCArMTk4OSw3IEBACiAgICAgICAgIGJyZWFrOwogICAgICAgfQogICAgICAgY291bnQtLTsKLSAgICB9Ci0gICAgd2hpbGUgKGhzcGktPlN0YXRlICE9IEhBTF9TUElfU1RBVEVfQUJPUlQpOworICAgIH0gd2hpbGUgKGhzcGktPlN0YXRlICE9IEhBTF9TUElfU1RBVEVfQUJPUlQpOwogICAgIC8qIFJlc2V0IFRpbWVvdXQgQ291bnRlciAqLwogICAgIGNvdW50ID0gcmVzZXRjb3VudDsKICAgfQpAQCAtMjAxNSw4ICsyMDIyLDcgQEAKICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjb3VudC0tOwotICAgICAgfQotICAgICAgd2hpbGUgKChoc3BpLT5JbnN0YW5jZS0+U1IgJiBTUElfRkxBR19UWEUpID09IFJFU0VUKTsKKyAgICAgIH0gd2hpbGUgKChoc3BpLT5JbnN0YW5jZS0+U1IgJiBTUElfRkxBR19UWEUpID09IFJFU0VUKTsKICAgICB9CiAgIH0KIApAQCAtMjA4MywxMiArMjA4OSwxMyBAQAogICAqIEBub3RlICAgVGhpcyBwcm9jZWR1cmUgaXMgZXhlY3V0ZWQgaW4gSW50ZXJydXB0IG1vZGUsIG1lYW5pbmcgdGhhdCBhYm9ydCBwcm9jZWR1cmUgY291bGQgYmUKICAgKiAgICAgICAgIGNvbnNpZGVyZWQgYXMgY29tcGxldGVkIG9ubHkgd2hlbiB1c2VyIGFib3J0IGNvbXBsZXRlIGNhbGxiYWNrIGlzIGV4ZWN1dGVkIChub3Qgd2hlbiBleGl0aW5nIGZ1bmN0aW9uKS4KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKLSovCisgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfU1BJX0Fib3J0X0lUKFNQSV9IYW5kbGVUeXBlRGVmICpoc3BpKQogewogICBIQUxfU3RhdHVzVHlwZURlZiBlcnJvcmNvZGU7CiAgIHVpbnQzMl90IGFib3J0Y3BsdCA7Ci0gIF9fSU8gdWludDMyX3QgY291bnQsIHJlc2V0Y291bnQ7CisgIF9fSU8gdWludDMyX3QgY291bnQ7CisgIF9fSU8gdWludDMyX3QgcmVzZXRjb3VudDsKIAogICAvKiBJbml0aWFsaXplZCBsb2NhbCB2YXJpYWJsZSAgKi8KICAgZXJyb3Jjb2RlID0gSEFMX09LOwpAQCAtMjExMiw4ICsyMTE5LDcgQEAKICAgICAgICAgYnJlYWs7CiAgICAgICB9CiAgICAgICBjb3VudC0tOwotICAgIH0KLSAgICB3aGlsZSAoaHNwaS0+U3RhdGUgIT0gSEFMX1NQSV9TVEFURV9BQk9SVCk7CisgICAgfSB3aGlsZSAoaHNwaS0+U3RhdGUgIT0gSEFMX1NQSV9TVEFURV9BQk9SVCk7CiAgICAgLyogUmVzZXQgVGltZW91dCBDb3VudGVyICovCiAgICAgY291bnQgPSByZXNldGNvdW50OwogICB9CkBAIC0yMTMwLDggKzIxMzYsNyBAQAogICAgICAgICBicmVhazsKICAgICAgIH0KICAgICAgIGNvdW50LS07Ci0gICAgfQotICAgIHdoaWxlIChoc3BpLT5TdGF0ZSAhPSBIQUxfU1BJX1NUQVRFX0FCT1JUKTsKKyAgICB9IHdoaWxlIChoc3BpLT5TdGF0ZSAhPSBIQUxfU1BJX1NUQVRFX0FCT1JUKTsKICAgICAvKiBSZXNldCBUaW1lb3V0IENvdW50ZXIgKi8KICAgICBjb3VudCA9IHJlc2V0Y291bnQ7CiAgIH0KQEAgLTIzNDcsNyArMjM1Miw4IEBACiAgIH0KIAogICAvKiBTUEkgaW4gRXJyb3IgVHJlYXRtZW50IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSAgaWYgKCgoU1BJX0NIRUNLX0ZMQUcoaXRmbGFnLCBTUElfRkxBR19NT0RGKSAhPSBSRVNFVCkgfHwgKFNQSV9DSEVDS19GTEFHKGl0ZmxhZywgU1BJX0ZMQUdfT1ZSKSAhPSBSRVNFVCkgfHwgKFNQSV9DSEVDS19GTEFHKGl0ZmxhZywgU1BJX0ZMQUdfRlJFKSAhPSBSRVNFVCkpICYmIChTUElfQ0hFQ0tfSVRfU09VUkNFKGl0c291cmNlLCBTUElfSVRfRVJSKSAhPSBSRVNFVCkpCisgIGlmICgoKFNQSV9DSEVDS19GTEFHKGl0ZmxhZywgU1BJX0ZMQUdfTU9ERikgIT0gUkVTRVQpIHx8IChTUElfQ0hFQ0tfRkxBRyhpdGZsYWcsIFNQSV9GTEFHX09WUikgIT0gUkVTRVQpCisgICAgICAgfHwgKFNQSV9DSEVDS19GTEFHKGl0ZmxhZywgU1BJX0ZMQUdfRlJFKSAhPSBSRVNFVCkpICYmIChTUElfQ0hFQ0tfSVRfU09VUkNFKGl0c291cmNlLCBTUElfSVRfRVJSKSAhPSBSRVNFVCkpCiAgIHsKICAgICAvKiBTUEkgT3ZlcnJ1biBlcnJvciBpbnRlcnJ1cHQgb2NjdXJyZWQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgICAgaWYgKFNQSV9DSEVDS19GTEFHKGl0ZmxhZywgU1BJX0ZMQUdfT1ZSKSAhPSBSRVNFVCkKQEAgLTI5NDQsOCArMjk1MCw3IEBACiAgICAgICBicmVhazsKICAgICB9CiAgICAgY291bnQtLTsKLSAgfQotICB3aGlsZSAoKGhzcGktPkluc3RhbmNlLT5TUiAmIFNQSV9GTEFHX1RYRSkgPT0gUkVTRVQpOworICB9IHdoaWxlICgoaHNwaS0+SW5zdGFuY2UtPlNSICYgU1BJX0ZMQUdfVFhFKSA9PSBSRVNFVCk7CiAKICAgLyogQ2hlY2sgaWYgYW4gQWJvcnQgcHJvY2VzcyBpcyBzdGlsbCBvbmdvaW5nICovCiAgIGlmIChoc3BpLT5oZG1hcnggIT0gTlVMTCkKQEAgLTM1NDYsOCArMzU1MSw3IEBACiAgICAgICBicmVhazsKICAgICB9CiAgICAgY291bnQtLTsKLSAgfQotICB3aGlsZSAoKGhzcGktPkluc3RhbmNlLT5TUiAmIFNQSV9GTEFHX1RYRSkgPT0gUkVTRVQpOworICB9IHdoaWxlICgoaHNwaS0+SW5zdGFuY2UtPlNSICYgU1BJX0ZMQUdfVFhFKSA9PSBSRVNFVCk7CiAKICAgLyogQ2hlY2sgdGhlIGVuZCBvZiB0aGUgdHJhbnNhY3Rpb24gKi8KICAgaWYgKFNQSV9FbmRSeFR4VHJhbnNhY3Rpb24oaHNwaSwgU1BJX0RFRkFVTFRfVElNRU9VVCwgdGlja3N0YXJ0KSAhPSBIQUxfT0spCkBAIC0zNzAyLDggKzM3MDYsNyBAQAogICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNvdW50LS07Ci0gIH0KLSAgd2hpbGUgKChoc3BpLT5JbnN0YW5jZS0+U1IgJiBTUElfRkxBR19UWEUpID09IFJFU0VUKTsKKyAgfSB3aGlsZSAoKGhzcGktPkluc3RhbmNlLT5TUiAmIFNQSV9GTEFHX1RYRSkgPT0gUkVTRVQpOwogCiAgIC8qIERpc2FibGUgVFhFIGFuZCBFUlIgaW50ZXJydXB0ICovCiAgIF9fSEFMX1NQSV9ESVNBQkxFX0lUKGhzcGksIChTUElfSVRfVFhFIHwgU1BJX0lUX0VSUikpOwpAQCAtMzc2MCw4ICszNzYzLDcgQEAKICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjb3VudC0tOwotICB9Ci0gIHdoaWxlICgoaHNwaS0+SW5zdGFuY2UtPlNSICYgU1BJX0ZMQUdfVFhFKSA9PSBSRVNFVCk7CisgIH0gd2hpbGUgKChoc3BpLT5JbnN0YW5jZS0+U1IgJiBTUElfRkxBR19UWEUpID09IFJFU0VUKTsKIAogICAvKiBEaXNhYmxlIFNQSSBQZXJpcGhlcmFsICovCiAgIF9fSEFMX1NQSV9ESVNBQkxFKGhzcGkpOwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjR4eF9oYWxfdGltLmMgYi9TcmMvc3RtMzJmNHh4X2hhbF90aW0uYwppbmRleCA5OTAwNGY0Li5lYjk4ZDU3IDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmNHh4X2hhbF90aW0uYworKysgYi9TcmMvc3RtMzJmNHh4X2hhbF90aW0uYwpAQCAtOTgsMTggKzk4LDIyIEBACiAgICAgKioqIENhbGxiYWNrIHJlZ2lzdHJhdGlvbiAqKioKICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKKyAgWy4uXQogICBUaGUgY29tcGlsYXRpb24gZGVmaW5lICBVU0VfSEFMX1RJTV9SRUdJU1RFUl9DQUxMQkFDS1Mgd2hlbiBzZXQgdG8gMQogICBhbGxvd3MgdGhlIHVzZXIgdG8gY29uZmlndXJlIGR5bmFtaWNhbGx5IHRoZSBkcml2ZXIgY2FsbGJhY2tzLgogCisgIFsuLl0KICAgVXNlIEZ1bmN0aW9uIEByZWYgSEFMX1RJTV9SZWdpc3RlckNhbGxiYWNrKCkgdG8gcmVnaXN0ZXIgYSBjYWxsYmFjay4KICAgQHJlZiBIQUxfVElNX1JlZ2lzdGVyQ2FsbGJhY2soKSB0YWtlcyBhcyBwYXJhbWV0ZXJzIHRoZSBIQUwgcGVyaXBoZXJhbCBoYW5kbGUsCiAgIHRoZSBDYWxsYmFjayBJRCBhbmQgYSBwb2ludGVyIHRvIHRoZSB1c2VyIGNhbGxiYWNrIGZ1bmN0aW9uLgogCisgIFsuLl0KICAgVXNlIGZ1bmN0aW9uIEByZWYgSEFMX1RJTV9VblJlZ2lzdGVyQ2FsbGJhY2soKSB0byByZXNldCBhIGNhbGxiYWNrIHRvIHRoZSBkZWZhdWx0CiAgIHdlYWsgZnVuY3Rpb24uCiAgIEByZWYgSEFMX1RJTV9VblJlZ2lzdGVyQ2FsbGJhY2sgdGFrZXMgYXMgcGFyYW1ldGVycyB0aGUgSEFMIHBlcmlwaGVyYWwgaGFuZGxlLAogICBhbmQgdGhlIENhbGxiYWNrIElELgogCisgIFsuLl0KICAgVGhlc2UgZnVuY3Rpb25zIGFsbG93IHRvIHJlZ2lzdGVyL3VucmVnaXN0ZXIgZm9sbG93aW5nIGNhbGxiYWNrczoKICAgICAoKykgQmFzZV9Nc3BJbml0Q2FsbGJhY2sgICAgICAgICAgICAgIDogVElNIEJhc2UgTXNwIEluaXQgQ2FsbGJhY2suCiAgICAgKCspIEJhc2VfTXNwRGVJbml0Q2FsbGJhY2sgICAgICAgICAgICA6IFRJTSBCYXNlIE1zcCBEZUluaXQgQ2FsbGJhY2suCkBAIC0xMzksMTUgKzE0MywxOCBAQAogICAgICgrKSBDb21tdXRhdGlvbkhhbGZDcGx0Q2FsbGJhY2sgICAgICAgOiBUSU0gQ29tbXV0YXRpb24gaGFsZiBjb21wbGV0ZSBDYWxsYmFjay4KICAgICAoKykgQnJlYWtDYWxsYmFjayAgICAgICAgICAgICAgICAgICAgIDogVElNIEJyZWFrIENhbGxiYWNrLgogCisgIFsuLl0KIEJ5IGRlZmF1bHQsIGFmdGVyIHRoZSBJbml0IGFuZCB3aGVuIHRoZSBzdGF0ZSBpcyBIQUxfVElNX1NUQVRFX1JFU0VUCiBhbGwgaW50ZXJydXB0IGNhbGxiYWNrcyBhcmUgc2V0IHRvIHRoZSBjb3JyZXNwb25kaW5nIHdlYWsgZnVuY3Rpb25zOgogICBleGFtcGxlcyBAcmVmIEhBTF9USU1fVHJpZ2dlckNhbGxiYWNrKCksIEByZWYgSEFMX1RJTV9FcnJvckNhbGxiYWNrKCkuCiAKKyAgWy4uXQogICBFeGNlcHRpb24gZG9uZSBmb3IgTXNwSW5pdCBhbmQgTXNwRGVJbml0IGZ1bmN0aW9ucyB0aGF0IGFyZSByZXNldCB0byB0aGUgbGVnYWN5IHdlYWsKICAgZnVuY3Rpb25hbGl0aWVzIGluIHRoZSBJbml0IC8gRGVJbml0IG9ubHkgd2hlbiB0aGVzZSBjYWxsYmFja3MgYXJlIG51bGwKICAgKG5vdCByZWdpc3RlcmVkIGJlZm9yZWhhbmQpLiBJZiBub3QsIE1zcEluaXQgb3IgTXNwRGVJbml0IGFyZSBub3QgbnVsbCwgdGhlIEluaXQgLyBEZUluaXQKICAgICBrZWVwIGFuZCB1c2UgdGhlIHVzZXIgTXNwSW5pdCAvIE1zcERlSW5pdCBjYWxsYmFja3MocmVnaXN0ZXJlZCBiZWZvcmVoYW5kKQogCisgIFsuLl0KICAgICBDYWxsYmFja3MgY2FuIGJlIHJlZ2lzdGVyZWQgLyB1bnJlZ2lzdGVyZWQgaW4gSEFMX1RJTV9TVEFURV9SRUFEWSBzdGF0ZSBvbmx5LgogICAgIEV4Y2VwdGlvbiBkb25lIE1zcEluaXQgLyBNc3BEZUluaXQgdGhhdCBjYW4gYmUgcmVnaXN0ZXJlZCAvIHVucmVnaXN0ZXJlZAogICAgIGluIEhBTF9USU1fU1RBVEVfUkVBRFkgb3IgSEFMX1RJTV9TVEFURV9SRVNFVCBzdGF0ZSwKQEAgLTE1NSw2ICsxNjIsNyBAQAogICBJbiB0aGF0IGNhc2UgZmlyc3QgcmVnaXN0ZXIgdGhlIE1zcEluaXQvTXNwRGVJbml0IHVzZXIgY2FsbGJhY2tzCiAgICAgICB1c2luZyBAcmVmIEhBTF9USU1fUmVnaXN0ZXJDYWxsYmFjaygpIGJlZm9yZSBjYWxsaW5nIERlSW5pdCBvciBJbml0IGZ1bmN0aW9uLgogCisgIFsuLl0KICAgICAgIFdoZW4gVGhlIGNvbXBpbGF0aW9uIGRlZmluZSBVU0VfSEFMX1RJTV9SRUdJU1RFUl9DQUxMQkFDS1MgaXMgc2V0IHRvIDAgb3IKICAgICAgIG5vdCBkZWZpbmVkLCB0aGUgY2FsbGJhY2sgcmVnaXN0cmF0aW9uIGZlYXR1cmUgaXMgbm90IGF2YWlsYWJsZSBhbmQgYWxsIGNhbGxiYWNrcwogICAgICAgYXJlIHNldCB0byB0aGUgY29ycmVzcG9uZGluZyB3ZWFrIGZ1bmN0aW9ucy4KQEAgLTIxMyw3ICsyMjEsNyBAQAogc3RhdGljIHZvaWQgVElNX0RNQVRyaWdnZXJDcGx0KERNQV9IYW5kbGVUeXBlRGVmICpoZG1hKTsKIHN0YXRpYyB2b2lkIFRJTV9ETUFUcmlnZ2VySGFsZkNwbHQoRE1BX0hhbmRsZVR5cGVEZWYgKmhkbWEpOwogc3RhdGljIEhBTF9TdGF0dXNUeXBlRGVmIFRJTV9TbGF2ZVRpbWVyX1NldENvbmZpZyhUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSU1fU2xhdmVDb25maWdUeXBlRGVmICpzU2xhdmVDb25maWcpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSU1fU2xhdmVDb25maWdUeXBlRGVmICpzU2xhdmVDb25maWcpOwogLyoqCiAgICogQH0KICAgKi8KQEAgLTIyNCw4ICsyMzIsOCBAQAogICAqLwogCiAvKiogQGRlZmdyb3VwIFRJTV9FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXAxIFRJTSBUaW1lIEJhc2UgZnVuY3Rpb25zCi0gKiAgQGJyaWVmICAgIFRpbWUgQmFzZSBmdW5jdGlvbnMKLSAqCisgICogIEBicmllZiAgICBUaW1lIEJhc2UgZnVuY3Rpb25zCisgICoKIEB2ZXJiYXRpbQogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgICAgICAgICAgIyMjIyMgVGltZSBCYXNlIGZ1bmN0aW9ucyAjIyMjIwpAQCAtNDc5LDExICs0ODcsMTEgQEAKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9ETUFfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKTsKIAotICBpZiAoKGh0aW0tPlN0YXRlID09IEhBTF9USU1fU1RBVEVfQlVTWSkpCisgIGlmIChodGltLT5TdGF0ZSA9PSBIQUxfVElNX1NUQVRFX0JVU1kpCiAgIHsKICAgICByZXR1cm4gSEFMX0JVU1k7CiAgIH0KLSAgZWxzZSBpZiAoKGh0aW0tPlN0YXRlID09IEhBTF9USU1fU1RBVEVfUkVBRFkpKQorICBlbHNlIGlmIChodGltLT5TdGF0ZSA9PSBIQUxfVElNX1NUQVRFX1JFQURZKQogICB7CiAgICAgaWYgKChwRGF0YSA9PSBOVUxMKSAmJiAoTGVuZ3RoID4gMFUpKQogICAgIHsKQEAgLTU1Niw4ICs1NjQsOCBAQAogICAqLwogCiAvKiogQGRlZmdyb3VwIFRJTV9FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXAyIFRJTSBPdXRwdXQgQ29tcGFyZSBmdW5jdGlvbnMKLSAqICBAYnJpZWYgICAgVElNIE91dHB1dCBDb21wYXJlIGZ1bmN0aW9ucwotICoKKyAgKiAgQGJyaWVmICAgIFRJTSBPdXRwdXQgQ29tcGFyZSBmdW5jdGlvbnMKKyAgKgogQHZlcmJhdGltCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAgICAgICAgICAgICAgIyMjIyMgVElNIE91dHB1dCBDb21wYXJlIGZ1bmN0aW9ucyAjIyMjIwpAQCAtOTIyLDE2ICs5MzAsMTYgQEAKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1fT0NfU3RhcnRfRE1BKFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCB1aW50MzJfdCBDaGFubmVsLCB1aW50MzJfdCAqcERhdGEsIHVpbnQxNl90IExlbmd0aCkKIHsKLSAgIHVpbnQzMl90IHRtcHNtY3I7CisgIHVpbnQzMl90IHRtcHNtY3I7CiAKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9DQ1hfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UsIENoYW5uZWwpKTsKIAotICBpZiAoKGh0aW0tPlN0YXRlID09IEhBTF9USU1fU1RBVEVfQlVTWSkpCisgIGlmIChodGltLT5TdGF0ZSA9PSBIQUxfVElNX1NUQVRFX0JVU1kpCiAgIHsKICAgICByZXR1cm4gSEFMX0JVU1k7CiAgIH0KLSAgZWxzZSBpZiAoKGh0aW0tPlN0YXRlID09IEhBTF9USU1fU1RBVEVfUkVBRFkpKQorICBlbHNlIGlmIChodGltLT5TdGF0ZSA9PSBIQUxfVElNX1NUQVRFX1JFQURZKQogICB7CiAgICAgaWYgKChwRGF0YSA9PSBOVUxMKSAmJiAoTGVuZ3RoID4gMFUpKQogICAgIHsKQEAgLTExMjksOCArMTEzNyw4IEBACiAgICovCiAKIC8qKiBAZGVmZ3JvdXAgVElNX0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDMgVElNIFBXTSBmdW5jdGlvbnMKLSAqICBAYnJpZWYgICAgVElNIFBXTSBmdW5jdGlvbnMKLSAqCisgICogIEBicmllZiAgICBUSU0gUFdNIGZ1bmN0aW9ucworICAqCiBAdmVyYmF0aW0KICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgICAgICAgICAgICAgICAgICAgICMjIyMjIFRJTSBQV00gZnVuY3Rpb25zICMjIyMjCkBAIC0xNTAyLDExICsxNTEwLDExIEBACiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19USU1fQ0NYX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlLCBDaGFubmVsKSk7CiAKLSAgaWYgKChodGltLT5TdGF0ZSA9PSBIQUxfVElNX1NUQVRFX0JVU1kpKQorICBpZiAoaHRpbS0+U3RhdGUgPT0gSEFMX1RJTV9TVEFURV9CVVNZKQogICB7CiAgICAgcmV0dXJuIEhBTF9CVVNZOwogICB9Ci0gIGVsc2UgaWYgKChodGltLT5TdGF0ZSA9PSBIQUxfVElNX1NUQVRFX1JFQURZKSkKKyAgZWxzZSBpZiAoaHRpbS0+U3RhdGUgPT0gSEFMX1RJTV9TVEFURV9SRUFEWSkKICAgewogICAgIGlmICgocERhdGEgPT0gTlVMTCkgJiYgKExlbmd0aCA+IDBVKSkKICAgICB7CkBAIC0xNzAzLDggKzE3MTEsOCBAQAogICAqLwogCiAvKiogQGRlZmdyb3VwIFRJTV9FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXA0IFRJTSBJbnB1dCBDYXB0dXJlIGZ1bmN0aW9ucwotICogIEBicmllZiAgICBUSU0gSW5wdXQgQ2FwdHVyZSBmdW5jdGlvbnMKLSAqCisgICogIEBicmllZiAgICBUSU0gSW5wdXQgQ2FwdHVyZSBmdW5jdGlvbnMKKyAgKgogQHZlcmJhdGltCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAgICAgICAgICAjIyMjIyBUSU0gSW5wdXQgQ2FwdHVyZSBmdW5jdGlvbnMgIyMjIyMKQEAgLTIwNTAsMTEgKzIwNTgsMTEgQEAKICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9DQ1hfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UsIENoYW5uZWwpKTsKICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9ETUFfQ0NfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKTsKIAotICBpZiAoKGh0aW0tPlN0YXRlID09IEhBTF9USU1fU1RBVEVfQlVTWSkpCisgIGlmIChodGltLT5TdGF0ZSA9PSBIQUxfVElNX1NUQVRFX0JVU1kpCiAgIHsKICAgICByZXR1cm4gSEFMX0JVU1k7CiAgIH0KLSAgZWxzZSBpZiAoKGh0aW0tPlN0YXRlID09IEhBTF9USU1fU1RBVEVfUkVBRFkpKQorICBlbHNlIGlmIChodGltLT5TdGF0ZSA9PSBIQUxfVElNX1NUQVRFX1JFQURZKQogICB7CiAgICAgaWYgKChwRGF0YSA9PSBOVUxMKSAmJiAoTGVuZ3RoID4gMFUpKQogICAgIHsKQEAgLTIyMzgsOCArMjI0Niw4IEBACiAgICovCiAKIC8qKiBAZGVmZ3JvdXAgVElNX0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDUgVElNIE9uZSBQdWxzZSBmdW5jdGlvbnMKLSAqICBAYnJpZWYgICAgVElNIE9uZSBQdWxzZSBmdW5jdGlvbnMKLSAqCisgICogIEBicmllZiAgICBUSU0gT25lIFB1bHNlIGZ1bmN0aW9ucworICAqCiBAdmVyYmF0aW0KICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgICAgICAgICAgICAgICAgICAjIyMjIyBUSU0gT25lIFB1bHNlIGZ1bmN0aW9ucyAjIyMjIwpAQCAtMjU1Miw4ICsyNTYwLDggQEAKICAgKi8KIAogLyoqIEBkZWZncm91cCBUSU1fRXhwb3J0ZWRfRnVuY3Rpb25zX0dyb3VwNiBUSU0gRW5jb2RlciBmdW5jdGlvbnMKLSAqICBAYnJpZWYgICAgVElNIEVuY29kZXIgZnVuY3Rpb25zCi0gKgorICAqICBAYnJpZWYgICAgVElNIEVuY29kZXIgZnVuY3Rpb25zCisgICoKIEB2ZXJiYXRpbQogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMjIyMgVElNIEVuY29kZXIgZnVuY3Rpb25zICMjIyMjCkBAIC0yNjA1LDggKzI2MTMsOCBAQAogICBhc3NlcnRfcGFyYW0oSVNfVElNX0VOQ09ERVJfTU9ERShzQ29uZmlnLT5FbmNvZGVyTW9kZSkpOwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0lDX1NFTEVDVElPTihzQ29uZmlnLT5JQzFTZWxlY3Rpb24pKTsKICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9JQ19TRUxFQ1RJT04oc0NvbmZpZy0+SUMyU2VsZWN0aW9uKSk7Ci0gIGFzc2VydF9wYXJhbShJU19USU1fSUNfUE9MQVJJVFkoc0NvbmZpZy0+SUMxUG9sYXJpdHkpKTsKLSAgYXNzZXJ0X3BhcmFtKElTX1RJTV9JQ19QT0xBUklUWShzQ29uZmlnLT5JQzJQb2xhcml0eSkpOworICBhc3NlcnRfcGFyYW0oSVNfVElNX0VOQ09ERVJJTlBVVF9QT0xBUklUWShzQ29uZmlnLT5JQzFQb2xhcml0eSkpOworICBhc3NlcnRfcGFyYW0oSVNfVElNX0VOQ09ERVJJTlBVVF9QT0xBUklUWShzQ29uZmlnLT5JQzJQb2xhcml0eSkpOwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0lDX1BSRVNDQUxFUihzQ29uZmlnLT5JQzFQcmVzY2FsZXIpKTsKICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9JQ19QUkVTQ0FMRVIoc0NvbmZpZy0+SUMyUHJlc2NhbGVyKSk7CiAgIGFzc2VydF9wYXJhbShJU19USU1fSUNfRklMVEVSKHNDb25maWctPklDMUZpbHRlcikpOwpAQCAtMjk1NSwxNiArMjk2MywxNyBAQAogICAqIEBwYXJhbSAgTGVuZ3RoIFRoZSBsZW5ndGggb2YgZGF0YSB0byBiZSB0cmFuc2ZlcnJlZCBmcm9tIFRJTSBwZXJpcGhlcmFsIHRvIG1lbW9yeS4KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1fRW5jb2Rlcl9TdGFydF9ETUEoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sIHVpbnQzMl90IENoYW5uZWwsIHVpbnQzMl90ICpwRGF0YTEsIHVpbnQzMl90ICpwRGF0YTIsIHVpbnQxNl90IExlbmd0aCkKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1fRW5jb2Rlcl9TdGFydF9ETUEoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sIHVpbnQzMl90IENoYW5uZWwsIHVpbnQzMl90ICpwRGF0YTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICpwRGF0YTIsIHVpbnQxNl90IExlbmd0aCkKIHsKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9ETUFfQ0NfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKTsKIAotICBpZiAoKGh0aW0tPlN0YXRlID09IEhBTF9USU1fU1RBVEVfQlVTWSkpCisgIGlmIChodGltLT5TdGF0ZSA9PSBIQUxfVElNX1NUQVRFX0JVU1kpCiAgIHsKICAgICByZXR1cm4gSEFMX0JVU1k7CiAgIH0KLSAgZWxzZSBpZiAoKGh0aW0tPlN0YXRlID09IEhBTF9USU1fU1RBVEVfUkVBRFkpKQorICBlbHNlIGlmIChodGltLT5TdGF0ZSA9PSBIQUxfVElNX1NUQVRFX1JFQURZKQogICB7CiAgICAgaWYgKCgoKHBEYXRhMSA9PSBOVUxMKSB8fCAocERhdGEyID09IE5VTEwpKSkgJiYgKExlbmd0aCA+IDBVKSkKICAgICB7CkBAIC0zMTM4LDggKzMxNDcsOCBAQAogICAqIEB9CiAgICovCiAvKiogQGRlZmdyb3VwIFRJTV9FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXA3IFRJTSBJUlEgaGFuZGxlciBtYW5hZ2VtZW50Ci0gKiAgQGJyaWVmICAgIFRJTSBJUlEgaGFuZGxlciBtYW5hZ2VtZW50Ci0gKgorICAqICBAYnJpZWYgICAgVElNIElSUSBoYW5kbGVyIG1hbmFnZW1lbnQKKyAgKgogQHZlcmJhdGltCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAgICAgICAgICAgICAgICAgICAgIyMjIyMgSVJRIGhhbmRsZXIgbWFuYWdlbWVudCAjIyMjIwpAQCAtMzMzOSw4ICszMzQ4LDggQEAKICAgKi8KIAogLyoqIEBkZWZncm91cCBUSU1fRXhwb3J0ZWRfRnVuY3Rpb25zX0dyb3VwOCBUSU0gUGVyaXBoZXJhbCBDb250cm9sIGZ1bmN0aW9ucwotICogIEBicmllZiAgICBUSU0gUGVyaXBoZXJhbCBDb250cm9sIGZ1bmN0aW9ucwotICoKKyAgKiAgQGJyaWVmICAgIFRJTSBQZXJpcGhlcmFsIENvbnRyb2wgZnVuY3Rpb25zCisgICoKIEB2ZXJiYXRpbQogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgICAgICAgICAgICAgICAjIyMjIyBQZXJpcGhlcmFsIENvbnRyb2wgZnVuY3Rpb25zICMjIyMjCkBAIC0zNjU2LDkgKzM2NjUsMTQgQEAKICAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICAqICAgICAgICAgICAgQGFyZyBUSU1fQ0hBTk5FTF8xOiBUSU0gQ2hhbm5lbCAxIHNlbGVjdGVkCiAgICogICAgICAgICAgICBAYXJnIFRJTV9DSEFOTkVMXzI6IFRJTSBDaGFubmVsIDIgc2VsZWN0ZWQKKyAgKiBAbm90ZSAgVG8gb3V0cHV0IGEgd2F2ZWZvcm0gd2l0aCBhIG1pbmltdW0gZGVsYXkgdXNlciBjYW4gZW5hYmxlIHRoZSBmYXN0CisgICogICAgICAgIG1vZGUgYnkgY2FsbGluZyB0aGUgQHJlZiBfX0hBTF9USU1fRU5BQkxFX09DeEZBU1QgbWFjcm8uIFRoZW4gQ0N4CisgICogICAgICAgIG91dHB1dCBpcyBmb3JjZWQgaW4gcmVzcG9uc2UgdG8gdGhlIGVkZ2UgZGV0ZWN0aW9uIG9uIFRJeCBpbnB1dCwKKyAgKiAgICAgICAgd2l0aG91dCB0YWtpbmcgaW4gYWNjb3VudCB0aGUgY29tcGFyaXNvbi4KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1fT25lUHVsc2VfQ29uZmlnQ2hhbm5lbChUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgIFRJTV9PbmVQdWxzZV9Jbml0VHlwZURlZiAqc0NvbmZpZywgdWludDMyX3QgT3V0cHV0Q2hhbm5lbCwgIHVpbnQzMl90IElucHV0Q2hhbm5lbCkKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1fT25lUHVsc2VfQ29uZmlnQ2hhbm5lbChUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgIFRJTV9PbmVQdWxzZV9Jbml0VHlwZURlZiAqc0NvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBPdXRwdXRDaGFubmVsLCAgdWludDMyX3QgSW5wdXRDaGFubmVsKQogewogICBUSU1fT0NfSW5pdFR5cGVEZWYgdGVtcDE7CiAKQEAgLTM4MDUsMTEgKzM4MTksMTEgQEAKICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9ETUFfU09VUkNFKEJ1cnN0UmVxdWVzdFNyYykpOwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0RNQV9MRU5HVEgoQnVyc3RMZW5ndGgpKTsKIAotICBpZiAoKGh0aW0tPlN0YXRlID09IEhBTF9USU1fU1RBVEVfQlVTWSkpCisgIGlmIChodGltLT5TdGF0ZSA9PSBIQUxfVElNX1NUQVRFX0JVU1kpCiAgIHsKICAgICByZXR1cm4gSEFMX0JVU1k7CiAgIH0KLSAgZWxzZSBpZiAoKGh0aW0tPlN0YXRlID09IEhBTF9USU1fU1RBVEVfUkVBRFkpKQorICBlbHNlIGlmIChodGltLT5TdGF0ZSA9PSBIQUxfVElNX1NUQVRFX1JFQURZKQogICB7CiAgICAgaWYgKChCdXJzdEJ1ZmZlciA9PSBOVUxMKSAmJiAoQnVyc3RMZW5ndGggPiAwVSkpCiAgICAgewpAQCAtMzg1Miw3ICszODY2LDggQEAKICAgICAgIGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzFdLT5YZmVyRXJyb3JDYWxsYmFjayA9IFRJTV9ETUFFcnJvciA7CiAKICAgICAgIC8qIEVuYWJsZSB0aGUgRE1BIHN0cmVhbSAqLwotICAgICAgaWYgKEhBTF9ETUFfU3RhcnRfSVQoaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDMV0sICh1aW50MzJfdClCdXJzdEJ1ZmZlciwgKHVpbnQzMl90KSZodGltLT5JbnN0YW5jZS0+RE1BUiwgKChCdXJzdExlbmd0aCkgPj4gOFUpICsgMVUpICE9IEhBTF9PSykKKyAgICAgIGlmIChIQUxfRE1BX1N0YXJ0X0lUKGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzFdLCAodWludDMyX3QpQnVyc3RCdWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDMyX3QpJmh0aW0tPkluc3RhbmNlLT5ETUFSLCAoKEJ1cnN0TGVuZ3RoKSA+PiA4VSkgKyAxVSkgIT0gSEFMX09LKQogICAgICAgewogICAgICAgICByZXR1cm4gSEFMX0VSUk9SOwogICAgICAgfQpAQCAtMzg2OCw3ICszODgzLDggQEAKICAgICAgIGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzJdLT5YZmVyRXJyb3JDYWxsYmFjayA9IFRJTV9ETUFFcnJvciA7CiAKICAgICAgIC8qIEVuYWJsZSB0aGUgRE1BIHN0cmVhbSAqLwotICAgICAgaWYgKEhBTF9ETUFfU3RhcnRfSVQoaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDMl0sICh1aW50MzJfdClCdXJzdEJ1ZmZlciwgKHVpbnQzMl90KSZodGltLT5JbnN0YW5jZS0+RE1BUiwgKChCdXJzdExlbmd0aCkgPj4gOFUpICsgMVUpICE9IEhBTF9PSykKKyAgICAgIGlmIChIQUxfRE1BX1N0YXJ0X0lUKGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzJdLCAodWludDMyX3QpQnVyc3RCdWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDMyX3QpJmh0aW0tPkluc3RhbmNlLT5ETUFSLCAoKEJ1cnN0TGVuZ3RoKSA+PiA4VSkgKyAxVSkgIT0gSEFMX09LKQogICAgICAgewogICAgICAgICByZXR1cm4gSEFMX0VSUk9SOwogICAgICAgfQpAQCAtMzg4NCw3ICszOTAwLDggQEAKICAgICAgIGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzNdLT5YZmVyRXJyb3JDYWxsYmFjayA9IFRJTV9ETUFFcnJvciA7CiAKICAgICAgIC8qIEVuYWJsZSB0aGUgRE1BIHN0cmVhbSAqLwotICAgICAgaWYgKEhBTF9ETUFfU3RhcnRfSVQoaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDM10sICh1aW50MzJfdClCdXJzdEJ1ZmZlciwgKHVpbnQzMl90KSZodGltLT5JbnN0YW5jZS0+RE1BUiwgKChCdXJzdExlbmd0aCkgPj4gOFUpICsgMVUpICE9IEhBTF9PSykKKyAgICAgIGlmIChIQUxfRE1BX1N0YXJ0X0lUKGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzNdLCAodWludDMyX3QpQnVyc3RCdWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDMyX3QpJmh0aW0tPkluc3RhbmNlLT5ETUFSLCAoKEJ1cnN0TGVuZ3RoKSA+PiA4VSkgKyAxVSkgIT0gSEFMX09LKQogICAgICAgewogICAgICAgICByZXR1cm4gSEFMX0VSUk9SOwogICAgICAgfQpAQCAtMzkwMCw3ICszOTE3LDggQEAKICAgICAgIGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzRdLT5YZmVyRXJyb3JDYWxsYmFjayA9IFRJTV9ETUFFcnJvciA7CiAKICAgICAgIC8qIEVuYWJsZSB0aGUgRE1BIHN0cmVhbSAqLwotICAgICAgaWYgKEhBTF9ETUFfU3RhcnRfSVQoaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDNF0sICh1aW50MzJfdClCdXJzdEJ1ZmZlciwgKHVpbnQzMl90KSZodGltLT5JbnN0YW5jZS0+RE1BUiwgKChCdXJzdExlbmd0aCkgPj4gOFUpICsgMVUpICE9IEhBTF9PSykKKyAgICAgIGlmIChIQUxfRE1BX1N0YXJ0X0lUKGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzRdLCAodWludDMyX3QpQnVyc3RCdWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDMyX3QpJmh0aW0tPkluc3RhbmNlLT5ETUFSLCAoKEJ1cnN0TGVuZ3RoKSA+PiA4VSkgKyAxVSkgIT0gSEFMX09LKQogICAgICAgewogICAgICAgICByZXR1cm4gSEFMX0VSUk9SOwogICAgICAgfQpAQCAtMzkxNiw3ICszOTM0LDggQEAKICAgICAgIGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DT01NVVRBVElPTl0tPlhmZXJFcnJvckNhbGxiYWNrID0gVElNX0RNQUVycm9yIDsKIAogICAgICAgLyogRW5hYmxlIHRoZSBETUEgc3RyZWFtICovCi0gICAgICBpZiAoSEFMX0RNQV9TdGFydF9JVChodGltLT5oZG1hW1RJTV9ETUFfSURfQ09NTVVUQVRJT05dLCAodWludDMyX3QpQnVyc3RCdWZmZXIsICh1aW50MzJfdCkmaHRpbS0+SW5zdGFuY2UtPkRNQVIsICgoQnVyc3RMZW5ndGgpID4+IDhVKSArIDFVKSAhPSBIQUxfT0spCisgICAgICBpZiAoSEFMX0RNQV9TdGFydF9JVChodGltLT5oZG1hW1RJTV9ETUFfSURfQ09NTVVUQVRJT05dLCAodWludDMyX3QpQnVyc3RCdWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDMyX3QpJmh0aW0tPkluc3RhbmNlLT5ETUFSLCAoKEJ1cnN0TGVuZ3RoKSA+PiA4VSkgKyAxVSkgIT0gSEFMX09LKQogICAgICAgewogICAgICAgICByZXR1cm4gSEFMX0VSUk9SOwogICAgICAgfQpAQCAtMzkzMiw3ICszOTUxLDggQEAKICAgICAgIGh0aW0tPmhkbWFbVElNX0RNQV9JRF9UUklHR0VSXS0+WGZlckVycm9yQ2FsbGJhY2sgPSBUSU1fRE1BRXJyb3IgOwogCiAgICAgICAvKiBFbmFibGUgdGhlIERNQSBzdHJlYW0gKi8KLSAgICAgIGlmIChIQUxfRE1BX1N0YXJ0X0lUKGh0aW0tPmhkbWFbVElNX0RNQV9JRF9UUklHR0VSXSwgKHVpbnQzMl90KUJ1cnN0QnVmZmVyLCAodWludDMyX3QpJmh0aW0tPkluc3RhbmNlLT5ETUFSLCAoKEJ1cnN0TGVuZ3RoKSA+PiA4VSkgKyAxVSkgIT0gSEFMX09LKQorICAgICAgaWYgKEhBTF9ETUFfU3RhcnRfSVQoaHRpbS0+aGRtYVtUSU1fRE1BX0lEX1RSSUdHRVJdLCAodWludDMyX3QpQnVyc3RCdWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDMyX3QpJmh0aW0tPkluc3RhbmNlLT5ETUFSLCAoKEJ1cnN0TGVuZ3RoKSA+PiA4VSkgKyAxVSkgIT0gSEFMX09LKQogICAgICAgewogICAgICAgICByZXR1cm4gSEFMX0VSUk9SOwogICAgICAgfQpAQCAtNDA1NSw4ICs0MDc1LDggQEAKICAgKiBAbm90ZSAgIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIHVzZWQgb25seSB3aGVuIEJ1cnN0TGVuZ3RoIGlzIGVxdWFsIHRvIERNQSBkYXRhIHRyYW5zZmVyIGxlbmd0aC4KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1fRE1BQnVyc3RfUmVhZFN0YXJ0KFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCB1aW50MzJfdCBCdXJzdEJhc2VBZGRyZXNzLCB1aW50MzJfdCBCdXJzdFJlcXVlc3RTcmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAgKkJ1cnN0QnVmZmVyLCB1aW50MzJfdCAgQnVyc3RMZW5ndGgpCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNX0RNQUJ1cnN0X1JlYWRTdGFydChUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgdWludDMyX3QgQnVyc3RCYXNlQWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IEJ1cnN0UmVxdWVzdFNyYywgdWludDMyX3QgICpCdXJzdEJ1ZmZlciwgdWludDMyX3QgIEJ1cnN0TGVuZ3RoKQogewogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0RNQUJVUlNUX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSk7CkBAIC00MDY0LDExICs0MDg0LDExIEBACiAgIGFzc2VydF9wYXJhbShJU19USU1fRE1BX1NPVVJDRShCdXJzdFJlcXVlc3RTcmMpKTsKICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9ETUFfTEVOR1RIKEJ1cnN0TGVuZ3RoKSk7CiAKLSAgaWYgKChodGltLT5TdGF0ZSA9PSBIQUxfVElNX1NUQVRFX0JVU1kpKQorICBpZiAoaHRpbS0+U3RhdGUgPT0gSEFMX1RJTV9TVEFURV9CVVNZKQogICB7CiAgICAgcmV0dXJuIEhBTF9CVVNZOwogICB9Ci0gIGVsc2UgaWYgKChodGltLT5TdGF0ZSA9PSBIQUxfVElNX1NUQVRFX1JFQURZKSkKKyAgZWxzZSBpZiAoaHRpbS0+U3RhdGUgPT0gSEFMX1RJTV9TVEFURV9SRUFEWSkKICAgewogICAgIGlmICgoQnVyc3RCdWZmZXIgPT0gTlVMTCkgJiYgKEJ1cnN0TGVuZ3RoID4gMFUpKQogICAgIHsKQEAgLTQzNjYsNyArNDM4Niw3IEBACiAgICAgICAvKiBXaGVuIE9DUmVmIGNsZWFyIGZlYXR1cmUgaXMgdXNlZCB3aXRoIEVUUiBzb3VyY2UsIEVUUiBwcmVzY2FsZXIgbXVzdCBiZSBvZmYgKi8KICAgICAgIGlmIChzQ2xlYXJJbnB1dENvbmZpZy0+Q2xlYXJJbnB1dFByZXNjYWxlciAhPSBUSU1fQ0xFQVJJTlBVVFBSRVNDQUxFUl9ESVYxKQogICAgICAgewotICAgICAgICAgIGh0aW0tPlN0YXRlID0gSEFMX1RJTV9TVEFURV9SRUFEWTsKKyAgICAgICAgaHRpbS0+U3RhdGUgPSBIQUxfVElNX1NUQVRFX1JFQURZOwogICAgICAgICBfX0hBTF9VTkxPQ0soaHRpbSk7CiAgICAgICAgIHJldHVybiBIQUxfRVJST1I7CiAgICAgICB9CkBAIC00NjUzLDkgKzQ2NzMsOSBAQAogCiAgIGh0aW0tPlN0YXRlID0gSEFMX1RJTV9TVEFURV9CVVNZOwogCi0gIGlmKFRJTV9TbGF2ZVRpbWVyX1NldENvbmZpZyhodGltLCBzU2xhdmVDb25maWcpICE9IEhBTF9PSykKKyAgaWYgKFRJTV9TbGF2ZVRpbWVyX1NldENvbmZpZyhodGltLCBzU2xhdmVDb25maWcpICE9IEhBTF9PSykKICAgewotICAgICAgaHRpbS0+U3RhdGUgPSBIQUxfVElNX1NUQVRFX1JFQURZOworICAgIGh0aW0tPlN0YXRlID0gSEFMX1RJTV9TVEFURV9SRUFEWTsKICAgICBfX0hBTF9VTkxPQ0soaHRpbSk7CiAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgfQpAQCAtNDY4Myw3ICs0NzAzLDcgQEAKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1fU2xhdmVDb25maWdTeW5jaHJvX0lUKFRJTV9IYW5kbGVUeXBlRGVmICpodGltLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSU1fU2xhdmVDb25maWdUeXBlRGVmICpzU2xhdmVDb25maWcpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSU1fU2xhdmVDb25maWdUeXBlRGVmICpzU2xhdmVDb25maWcpCiB7CiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19USU1fU0xBVkVfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKTsKQEAgLTQ2OTQsOSArNDcxNCw5IEBACiAKICAgaHRpbS0+U3RhdGUgPSBIQUxfVElNX1NUQVRFX0JVU1k7CiAKLSAgaWYoVElNX1NsYXZlVGltZXJfU2V0Q29uZmlnKGh0aW0sIHNTbGF2ZUNvbmZpZykgIT0gSEFMX09LKQorICBpZiAoVElNX1NsYXZlVGltZXJfU2V0Q29uZmlnKGh0aW0sIHNTbGF2ZUNvbmZpZykgIT0gSEFMX09LKQogICB7Ci0gICAgICBodGltLT5TdGF0ZSA9IEhBTF9USU1fU1RBVEVfUkVBRFk7CisgICAgaHRpbS0+U3RhdGUgPSBIQUxfVElNX1NUQVRFX1JFQURZOwogICAgIF9fSEFMX1VOTE9DSyhodGltKTsKICAgICByZXR1cm4gSEFMX0VSUk9SOwogICB9CkBAIC00Nzg2LDggKzQ4MDYsOCBAQAogICAqLwogCiAvKiogQGRlZmdyb3VwIFRJTV9FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXA5IFRJTSBDYWxsYmFja3MgZnVuY3Rpb25zCi0gKiAgQGJyaWVmICAgIFRJTSBDYWxsYmFja3MgZnVuY3Rpb25zCi0gKgorICAqICBAYnJpZWYgICAgVElNIENhbGxiYWNrcyBmdW5jdGlvbnMKKyAgKgogQHZlcmJhdGltCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAgICAgICAgICAgICAgICAgICAgIyMjIyMgVElNIENhbGxiYWNrcyBmdW5jdGlvbnMgIyMjIyMKQEAgLTQ5OTAsNyArNTAxMCw4IEBACiAgICogICAgICAgICAgQHBhcmFtIHBDYWxsYmFjayBwb2ludGVyIHRvIHRoZSBjYWxsYmFjayBmdW5jdGlvbgogICAqICAgICAgICAgIEByZXR2YWwgc3RhdHVzCiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNX1JlZ2lzdGVyQ2FsbGJhY2soVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sIEhBTF9USU1fQ2FsbGJhY2tJRFR5cGVEZWYgQ2FsbGJhY2tJRCwgcFRJTV9DYWxsYmFja1R5cGVEZWYgcENhbGxiYWNrKQorSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTV9SZWdpc3RlckNhbGxiYWNrKFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCBIQUxfVElNX0NhbGxiYWNrSURUeXBlRGVmIENhbGxiYWNrSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcFRJTV9DYWxsYmFja1R5cGVEZWYgcENhbGxiYWNrKQogewogICBIQUxfU3RhdHVzVHlwZURlZiBzdGF0dXMgPSBIQUxfT0s7CiAKQEAgLTU0NDEsOCArNTQ2Miw4IEBACiAgICovCiAKIC8qKiBAZGVmZ3JvdXAgVElNX0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDEwIFRJTSBQZXJpcGhlcmFsIFN0YXRlIGZ1bmN0aW9ucwotICogIEBicmllZiAgIFRJTSBQZXJpcGhlcmFsIFN0YXRlIGZ1bmN0aW9ucwotICoKKyAgKiAgQGJyaWVmICAgVElNIFBlcmlwaGVyYWwgU3RhdGUgZnVuY3Rpb25zCisgICoKIEB2ZXJiYXRpbQogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgICAgICAgICAgICAgICAgICAgICMjIyMjIFBlcmlwaGVyYWwgU3RhdGUgZnVuY3Rpb25zICMjIyMjCkBAIC02MTIxLDcgKzYxNDIsNyBAQAogICAqIEByZXR2YWwgTm9uZQogICAqLwogc3RhdGljIEhBTF9TdGF0dXNUeXBlRGVmIFRJTV9TbGF2ZVRpbWVyX1NldENvbmZpZyhUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSU1fU2xhdmVDb25maWdUeXBlRGVmICpzU2xhdmVDb25maWcpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJTV9TbGF2ZUNvbmZpZ1R5cGVEZWYgKnNTbGF2ZUNvbmZpZykKIHsKICAgdWludDMyX3QgdG1wc21jcjsKICAgdWludDMyX3QgdG1wY2NtcjE7CmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmNHh4X2hhbF90aW1fZXguYyBiL1NyYy9zdG0zMmY0eHhfaGFsX3RpbV9leC5jCmluZGV4IGZhMmY4ZjEuLjk5YTEzYzAgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmY0eHhfaGFsX3RpbV9leC5jCisrKyBiL1NyYy9zdG0zMmY0eHhfaGFsX3RpbV9leC5jCkBAIC03Miw3ICs3Miw3IEBACiAgICogICAgICAgICAgICAgICAgICAgICAgICBvcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2UKICAgKgogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSovCisgICovCiAKIC8qIEluY2x1ZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAjaW5jbHVkZSAic3RtMzJmNHh4X2hhbC5oIgpAQCAtMzk2LDExICszOTYsMTEgQEAKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9IQUxMX1NFTlNPUl9JTlRFUkZBQ0VfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKTsKIAotICBpZiAoKGh0aW0tPlN0YXRlID09IEhBTF9USU1fU1RBVEVfQlVTWSkpCisgIGlmIChodGltLT5TdGF0ZSA9PSBIQUxfVElNX1NUQVRFX0JVU1kpCiAgIHsKICAgICByZXR1cm4gSEFMX0JVU1k7CiAgIH0KLSAgZWxzZSBpZiAoKGh0aW0tPlN0YXRlID09IEhBTF9USU1fU1RBVEVfUkVBRFkpKQorICBlbHNlIGlmIChodGltLT5TdGF0ZSA9PSBIQUxfVElNX1NUQVRFX1JFQURZKQogICB7CiAgICAgaWYgKCgodWludDMyX3QpcERhdGEgPT0gMFUpICYmIChMZW5ndGggPiAwVSkpCiAgICAgewpAQCAtNzA4LDExICs3MDgsMTEgQEAKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9DQ1hOX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlLCBDaGFubmVsKSk7CiAKLSAgaWYgKChodGltLT5TdGF0ZSA9PSBIQUxfVElNX1NUQVRFX0JVU1kpKQorICBpZiAoaHRpbS0+U3RhdGUgPT0gSEFMX1RJTV9TVEFURV9CVVNZKQogICB7CiAgICAgcmV0dXJuIEhBTF9CVVNZOwogICB9Ci0gIGVsc2UgaWYgKChodGltLT5TdGF0ZSA9PSBIQUxfVElNX1NUQVRFX1JFQURZKSkKKyAgZWxzZSBpZiAoaHRpbS0+U3RhdGUgPT0gSEFMX1RJTV9TVEFURV9SRUFEWSkKICAgewogICAgIGlmICgoKHVpbnQzMl90KXBEYXRhID09IDBVKSAmJiAoTGVuZ3RoID4gMFUpKQogICAgIHsKQEAgLTExMTYsMTEgKzExMTYsMTEgQEAKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9DQ1hOX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlLCBDaGFubmVsKSk7CiAKLSAgaWYgKChodGltLT5TdGF0ZSA9PSBIQUxfVElNX1NUQVRFX0JVU1kpKQorICBpZiAoaHRpbS0+U3RhdGUgPT0gSEFMX1RJTV9TVEFURV9CVVNZKQogICB7CiAgICAgcmV0dXJuIEhBTF9CVVNZOwogICB9Ci0gIGVsc2UgaWYgKChodGltLT5TdGF0ZSA9PSBIQUxfVElNX1NUQVRFX1JFQURZKSkKKyAgZWxzZSBpZiAoaHRpbS0+U3RhdGUgPT0gSEFMX1RJTV9TVEFURV9SRUFEWSkKICAgewogICAgIGlmICgoKHVpbnQzMl90KXBEYXRhID09IDBVKSAmJiAoTGVuZ3RoID4gMFUpKQogICAgIHsKQEAgLTE0NjQsNyArMTQ2NCw4IEBACiAgICogICAgICAgICAgICBAYXJnIFRJTV9DT01NVVRBVElPTl9TT0ZUV0FSRTogIENvbW11dGF0aW9uIHNvdXJjZSBpcyBzZXQgYnkgc29mdHdhcmUgdXNpbmcgdGhlIENPTUcgYml0CiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNRXhfQ29uZmlnQ29tbXV0RXZlbnQoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sIHVpbnQzMl90ICBJbnB1dFRyaWdnZXIsIHVpbnQzMl90ICBDb21tdXRhdGlvblNvdXJjZSkKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1FeF9Db25maWdDb21tdXRFdmVudChUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgdWludDMyX3QgIElucHV0VHJpZ2dlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAgQ29tbXV0YXRpb25Tb3VyY2UpCiB7CiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19USU1fQ09NTVVUQVRJT05fRVZFTlRfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKTsKQEAgLTE1MTksNyArMTUyMCw4IEBACiAgICogICAgICAgICAgICBAYXJnIFRJTV9DT01NVVRBVElPTl9TT0ZUV0FSRTogIENvbW11dGF0aW9uIHNvdXJjZSBpcyBzZXQgYnkgc29mdHdhcmUgdXNpbmcgdGhlIENPTUcgYml0CiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNRXhfQ29uZmlnQ29tbXV0RXZlbnRfSVQoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sIHVpbnQzMl90ICBJbnB1dFRyaWdnZXIsIHVpbnQzMl90ICBDb21tdXRhdGlvblNvdXJjZSkKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1FeF9Db25maWdDb21tdXRFdmVudF9JVChUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgdWludDMyX3QgIElucHV0VHJpZ2dlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAgQ29tbXV0YXRpb25Tb3VyY2UpCiB7CiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19USU1fQ09NTVVUQVRJT05fRVZFTlRfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKTsKQEAgLTE1NzUsNyArMTU3Nyw4IEBACiAgICogICAgICAgICAgICBAYXJnIFRJTV9DT01NVVRBVElPTl9TT0ZUV0FSRTogIENvbW11dGF0aW9uIHNvdXJjZSBpcyBzZXQgYnkgc29mdHdhcmUgdXNpbmcgdGhlIENPTUcgYml0CiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNRXhfQ29uZmlnQ29tbXV0RXZlbnRfRE1BKFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCB1aW50MzJfdCAgSW5wdXRUcmlnZ2VyLCB1aW50MzJfdCAgQ29tbXV0YXRpb25Tb3VyY2UpCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNRXhfQ29uZmlnQ29tbXV0RXZlbnRfRE1BKFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCB1aW50MzJfdCAgSW5wdXRUcmlnZ2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAgQ29tbXV0YXRpb25Tb3VyY2UpCiB7CiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19USU1fQ09NTVVUQVRJT05fRVZFTlRfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKTsKQEAgLTE2MzAsNyArMTYzMyw3IEBACiAgIHVpbnQzMl90IHRtcHNtY3I7CiAKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KLSAgYXNzZXJ0X3BhcmFtKElTX1RJTV9TWU5DSFJPX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSk7CisgIGFzc2VydF9wYXJhbShJU19USU1fTUFTVEVSX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSk7CiAgIGFzc2VydF9wYXJhbShJU19USU1fVFJHT19TT1VSQ0Uoc01hc3RlckNvbmZpZy0+TWFzdGVyT3V0cHV0VHJpZ2dlcikpOwogICBhc3NlcnRfcGFyYW0oSVNfVElNX01TTV9TVEFURShzTWFzdGVyQ29uZmlnLT5NYXN0ZXJTbGF2ZU1vZGUpKTsKIApAQCAtMTY1MSwxNiArMTY1NCwxOSBAQAogICAvKiBTZWxlY3QgdGhlIFRSR08gc291cmNlICovCiAgIHRtcGNyMiB8PSAgc01hc3RlckNvbmZpZy0+TWFzdGVyT3V0cHV0VHJpZ2dlcjsKIAotICAvKiBSZXNldCB0aGUgTVNNIEJpdCAqLwotICB0bXBzbWNyICY9IH5USU1fU01DUl9NU007Ci0gIC8qIFNldCBtYXN0ZXIgbW9kZSAqLwotICB0bXBzbWNyIHw9IHNNYXN0ZXJDb25maWctPk1hc3RlclNsYXZlTW9kZTsKLQogICAvKiBVcGRhdGUgVElNeCBDUjIgKi8KICAgaHRpbS0+SW5zdGFuY2UtPkNSMiA9IHRtcGNyMjsKIAotICAvKiBVcGRhdGUgVElNeCBTTUNSICovCi0gIGh0aW0tPkluc3RhbmNlLT5TTUNSID0gdG1wc21jcjsKKyAgaWYgKElTX1RJTV9TTEFWRV9JTlNUQU5DRShodGltLT5JbnN0YW5jZSkpCisgIHsKKyAgICAvKiBSZXNldCB0aGUgTVNNIEJpdCAqLworICAgIHRtcHNtY3IgJj0gflRJTV9TTUNSX01TTTsKKyAgICAvKiBTZXQgbWFzdGVyIG1vZGUgKi8KKyAgICB0bXBzbWNyIHw9IHNNYXN0ZXJDb25maWctPk1hc3RlclNsYXZlTW9kZTsKKworICAgIC8qIFVwZGF0ZSBUSU14IFNNQ1IgKi8KKyAgICBodGltLT5JbnN0YW5jZS0+U01DUiA9IHRtcHNtY3I7CisgIH0KIAogICAvKiBDaGFuZ2UgdGhlIGh0aW0gc3RhdGUgKi8KICAgaHRpbS0+U3RhdGUgPSBIQUxfVElNX1NUQVRFX1JFQURZOwpAQCAtMTY3Niw2ICsxNjgyLDkgQEAKICAgKiBAcGFyYW0gIGh0aW0gVElNIGhhbmRsZQogICAqIEBwYXJhbSAgc0JyZWFrRGVhZFRpbWVDb25maWcgcG9pbnRlciB0byBhIFRJTV9Db25maWdCcmVha0RlYWRDb25maWdUeXBlRGVmIHN0cnVjdHVyZSB0aGF0CiAgICogICAgICAgICBjb250YWlucyB0aGUgQkRUUiBSZWdpc3RlciBjb25maWd1cmF0aW9uICBpbmZvcm1hdGlvbiBmb3IgdGhlIFRJTSBwZXJpcGhlcmFsLgorICAqIEBub3RlICAgSW50ZXJydXB0cyBjYW4gYmUgZ2VuZXJhdGVkIHdoZW4gYW4gYWN0aXZlIGxldmVsIGlzIGRldGVjdGVkIG9uIHRoZQorICAqICAgICAgICAgYnJlYWsgaW5wdXQsIHRoZSBicmVhayAyIGlucHV0IG9yIHRoZSBzeXN0ZW0gYnJlYWsgaW5wdXQuIEJyZWFrCisgICogICAgICAgICBpbnRlcnJ1cHQgY2FuIGJlIGVuYWJsZWQgYnkgY2FsbGluZyB0aGUgQHJlZiBfX0hBTF9USU1fRU5BQkxFX0lUIG1hY3JvLgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTUV4X0NvbmZpZ0JyZWFrRGVhZFRpbWUoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sCkBAIC0xODg2LDcgKzE4OTUsNyBAQAogICAqLwogCiAvKiBQcml2YXRlIGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyoqIEBkZWZncm91cCBUSU1FeF9Qcml2YXRlX0Z1bmN0aW9ucyBUSU0gRXh0ZW5kZWQgUHJpdmF0ZSBGdW5jdGlvbnMKKy8qKiBAZGVmZ3JvdXAgVElNRXhfUHJpdmF0ZV9GdW5jdGlvbnMgVElNRXggUHJpdmF0ZSBGdW5jdGlvbnMKICAgKiBAewogICAqLwogCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmNHh4X2hhbF91YXJ0LmMgYi9TcmMvc3RtMzJmNHh4X2hhbF91YXJ0LmMKaW5kZXggZDdlMmNmNS4uZWFmNDExNCAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZjR4eF9oYWxfdWFydC5jCisrKyBiL1NyYy9zdG0zMmY0eHhfaGFsX3VhcnQuYwpAQCAtMzI1LDcgKzMyNSw5IEBACiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGlmIChodWFydC0+SW5pdC5Id0Zsb3dDdGwgIT0gVUFSVF9IV0NPTlRST0xfTk9ORSkKICAgewotICAgIC8qIFRoZSBoYXJkd2FyZSBmbG93IGNvbnRyb2wgaXMgYXZhaWxhYmxlIG9ubHkgZm9yIFVTQVJUMSwgVVNBUlQyLCBVU0FSVDMgYW5kIFVTQVJUNiAqLworICAgIC8qIFRoZSBoYXJkd2FyZSBmbG93IGNvbnRyb2wgaXMgYXZhaWxhYmxlIG9ubHkgZm9yIFVTQVJUMSwgVVNBUlQyLCBVU0FSVDMgYW5kIFVTQVJUNi4KKyAgICAgICBFeGNlcHQgZm9yIFNUTTMyRjQ0Nnh4IGRldmljZXMsIHRoYXQgaXMgYXZhaWxhYmxlIGZvciBVU0FSVDEsIFVTQVJUMiwgVVNBUlQzLCBVU0FSVDYsIFVBUlQ0IGFuZCBVQVJUNS4KKyAgICAqLwogICAgIGFzc2VydF9wYXJhbShJU19VQVJUX0hXRkxPV19JTlNUQU5DRShodWFydC0+SW5zdGFuY2UpKTsKICAgICBhc3NlcnRfcGFyYW0oSVNfVUFSVF9IQVJEV0FSRV9GTE9XX0NPTlRST0woaHVhcnQtPkluaXQuSHdGbG93Q3RsKSk7CiAgIH0KQEAgLTEwMDksMTAgKzEwMTEsMTMgQEAKIAogLyoqCiAgICogQGJyaWVmICBTZW5kcyBhbiBhbW91bnQgb2YgZGF0YSBpbiBibG9ja2luZyBtb2RlLgotICAqIEBwYXJhbSAgaHVhcnQgIFBvaW50ZXIgdG8gYSBVQVJUX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKLSAgKiAgICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBVQVJUIG1vZHVsZS4KLSAgKiBAcGFyYW0gIHBEYXRhIFBvaW50ZXIgdG8gZGF0YSBidWZmZXIKLSAgKiBAcGFyYW0gIFNpemUgQW1vdW50IG9mIGRhdGEgdG8gYmUgc2VudAorICAqIEBub3RlICAgV2hlbiBVQVJUIHBhcml0eSBpcyBub3QgZW5hYmxlZCAoUENFID0gMCksIGFuZCBXb3JkIExlbmd0aCBpcyBjb25maWd1cmVkIHRvIDkgYml0cyAoTTEtTTAgPSAwMSksCisgICogICAgICAgICB0aGUgc2VudCBkYXRhIGlzIGhhbmRsZWQgYXMgYSBzZXQgb2YgdTE2LiBJbiB0aGlzIGNhc2UsIFNpemUgbXVzdCBpbmRpY2F0ZSB0aGUgbnVtYmVyCisgICogICAgICAgICBvZiB1MTYgcHJvdmlkZWQgdGhyb3VnaCBwRGF0YS4KKyAgKiBAcGFyYW0gIGh1YXJ0IFBvaW50ZXIgdG8gYSBVQVJUX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKKyAgKiAgICAgICAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciB0aGUgc3BlY2lmaWVkIFVBUlQgbW9kdWxlLgorICAqIEBwYXJhbSAgcERhdGEgUG9pbnRlciB0byBkYXRhIGJ1ZmZlciAodTggb3IgdTE2IGRhdGEgZWxlbWVudHMpLgorICAqIEBwYXJhbSAgU2l6ZSAgQW1vdW50IG9mIGRhdGEgZWxlbWVudHMgKHU4IG9yIHUxNikgdG8gYmUgc2VudAogICAqIEBwYXJhbSAgVGltZW91dCBUaW1lb3V0IGR1cmF0aW9uCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCkBAIC0xMDQwLDYgKzEwNDUsMTAgQEAKIAogICAgIGh1YXJ0LT5UeFhmZXJTaXplID0gU2l6ZTsKICAgICBodWFydC0+VHhYZmVyQ291bnQgPSBTaXplOworCisgICAgLyogUHJvY2VzcyBVbmxvY2tlZCAqLworICAgIF9fSEFMX1VOTE9DSyhodWFydCk7CisKICAgICB3aGlsZSAoaHVhcnQtPlR4WGZlckNvdW50ID4gMFUpCiAgICAgewogICAgICAgaHVhcnQtPlR4WGZlckNvdW50LS07CkBAIC0xMDc4LDkgKzEwODcsNiBAQAogICAgIC8qIEF0IGVuZCBvZiBUeCBwcm9jZXNzLCByZXN0b3JlIGh1YXJ0LT5nU3RhdGUgdG8gUmVhZHkgKi8KICAgICBodWFydC0+Z1N0YXRlID0gSEFMX1VBUlRfU1RBVEVfUkVBRFk7CiAKLSAgICAvKiBQcm9jZXNzIFVubG9ja2VkICovCi0gICAgX19IQUxfVU5MT0NLKGh1YXJ0KTsKLQogICAgIHJldHVybiBIQUxfT0s7CiAgIH0KICAgZWxzZQpAQCAtMTA5MSwxMCArMTA5NywxMyBAQAogCiAvKioKICAgKiBAYnJpZWYgIFJlY2VpdmVzIGFuIGFtb3VudCBvZiBkYXRhIGluIGJsb2NraW5nIG1vZGUuCi0gICogQHBhcmFtICBodWFydCAgUG9pbnRlciB0byBhIFVBUlRfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucwotICAqICAgICAgICAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciB0aGUgc3BlY2lmaWVkIFVBUlQgbW9kdWxlLgotICAqIEBwYXJhbSAgcERhdGEgUG9pbnRlciB0byBkYXRhIGJ1ZmZlcgotICAqIEBwYXJhbSAgU2l6ZSBBbW91bnQgb2YgZGF0YSB0byBiZSByZWNlaXZlZAorICAqIEBub3RlICAgV2hlbiBVQVJUIHBhcml0eSBpcyBub3QgZW5hYmxlZCAoUENFID0gMCksIGFuZCBXb3JkIExlbmd0aCBpcyBjb25maWd1cmVkIHRvIDkgYml0cyAoTTEtTTAgPSAwMSksCisgICogICAgICAgICB0aGUgcmVjZWl2ZWQgZGF0YSBpcyBoYW5kbGVkIGFzIGEgc2V0IG9mIHUxNi4gSW4gdGhpcyBjYXNlLCBTaXplIG11c3QgaW5kaWNhdGUgdGhlIG51bWJlcgorICAqICAgICAgICAgb2YgdTE2IGF2YWlsYWJsZSB0aHJvdWdoIHBEYXRhLgorICAqIEBwYXJhbSAgaHVhcnQgUG9pbnRlciB0byBhIFVBUlRfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucworICAqICAgICAgICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIHRoZSBzcGVjaWZpZWQgVUFSVCBtb2R1bGUuCisgICogQHBhcmFtICBwRGF0YSBQb2ludGVyIHRvIGRhdGEgYnVmZmVyICh1OCBvciB1MTYgZGF0YSBlbGVtZW50cykuCisgICogQHBhcmFtICBTaXplICBBbW91bnQgb2YgZGF0YSBlbGVtZW50cyAodTggb3IgdTE2KSB0byBiZSByZWNlaXZlZC4KICAgKiBAcGFyYW0gIFRpbWVvdXQgVGltZW91dCBkdXJhdGlvbgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwpAQCAtMTEyMyw2ICsxMTMyLDkgQEAKICAgICBodWFydC0+UnhYZmVyU2l6ZSA9IFNpemU7CiAgICAgaHVhcnQtPlJ4WGZlckNvdW50ID0gU2l6ZTsKIAorICAgIC8qIFByb2Nlc3MgVW5sb2NrZWQgKi8KKyAgICBfX0hBTF9VTkxPQ0soaHVhcnQpOworCiAgICAgLyogQ2hlY2sgdGhlIHJlbWFpbiBkYXRhIHRvIGJlIHJlY2VpdmVkICovCiAgICAgd2hpbGUgKGh1YXJ0LT5SeFhmZXJDb3VudCA+IDBVKQogICAgIHsKQEAgLTExNjcsOSArMTE3OSw2IEBACiAgICAgLyogQXQgZW5kIG9mIFJ4IHByb2Nlc3MsIHJlc3RvcmUgaHVhcnQtPlJ4U3RhdGUgdG8gUmVhZHkgKi8KICAgICBodWFydC0+UnhTdGF0ZSA9IEhBTF9VQVJUX1NUQVRFX1JFQURZOwogCi0gICAgLyogUHJvY2VzcyBVbmxvY2tlZCAqLwotICAgIF9fSEFMX1VOTE9DSyhodWFydCk7Ci0KICAgICByZXR1cm4gSEFMX09LOwogICB9CiAgIGVsc2UKQEAgLTExODAsMTAgKzExODksMTMgQEAKIAogLyoqCiAgICogQGJyaWVmICBTZW5kcyBhbiBhbW91bnQgb2YgZGF0YSBpbiBub24gYmxvY2tpbmcgbW9kZS4KLSAgKiBAcGFyYW0gIGh1YXJ0ICBQb2ludGVyIHRvIGEgVUFSVF9IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCi0gICogICAgICAgICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIHRoZSBzcGVjaWZpZWQgVUFSVCBtb2R1bGUuCi0gICogQHBhcmFtICBwRGF0YSBQb2ludGVyIHRvIGRhdGEgYnVmZmVyCi0gICogQHBhcmFtICBTaXplIEFtb3VudCBvZiBkYXRhIHRvIGJlIHNlbnQKKyAgKiBAbm90ZSAgIFdoZW4gVUFSVCBwYXJpdHkgaXMgbm90IGVuYWJsZWQgKFBDRSA9IDApLCBhbmQgV29yZCBMZW5ndGggaXMgY29uZmlndXJlZCB0byA5IGJpdHMgKE0xLU0wID0gMDEpLAorICAqICAgICAgICAgdGhlIHNlbnQgZGF0YSBpcyBoYW5kbGVkIGFzIGEgc2V0IG9mIHUxNi4gSW4gdGhpcyBjYXNlLCBTaXplIG11c3QgaW5kaWNhdGUgdGhlIG51bWJlcgorICAqICAgICAgICAgb2YgdTE2IHByb3ZpZGVkIHRocm91Z2ggcERhdGEuCisgICogQHBhcmFtICBodWFydCBQb2ludGVyIHRvIGEgVUFSVF9IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCisgICogICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBVQVJUIG1vZHVsZS4KKyAgKiBAcGFyYW0gIHBEYXRhIFBvaW50ZXIgdG8gZGF0YSBidWZmZXIgKHU4IG9yIHUxNiBkYXRhIGVsZW1lbnRzKS4KKyAgKiBAcGFyYW0gIFNpemUgIEFtb3VudCBvZiBkYXRhIGVsZW1lbnRzICh1OCBvciB1MTYpIHRvIGJlIHNlbnQKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9VQVJUX1RyYW5zbWl0X0lUKFVBUlRfSGFuZGxlVHlwZURlZiAqaHVhcnQsIHVpbnQ4X3QgKnBEYXRhLCB1aW50MTZfdCBTaXplKQpAQCAtMTIyMiwxMCArMTIzNCwxMyBAQAogCiAvKioKICAgKiBAYnJpZWYgIFJlY2VpdmVzIGFuIGFtb3VudCBvZiBkYXRhIGluIG5vbiBibG9ja2luZyBtb2RlLgotICAqIEBwYXJhbSAgaHVhcnQgIFBvaW50ZXIgdG8gYSBVQVJUX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKLSAgKiAgICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBVQVJUIG1vZHVsZS4KLSAgKiBAcGFyYW0gIHBEYXRhIFBvaW50ZXIgdG8gZGF0YSBidWZmZXIKLSAgKiBAcGFyYW0gIFNpemUgQW1vdW50IG9mIGRhdGEgdG8gYmUgcmVjZWl2ZWQKKyAgKiBAbm90ZSAgIFdoZW4gVUFSVCBwYXJpdHkgaXMgbm90IGVuYWJsZWQgKFBDRSA9IDApLCBhbmQgV29yZCBMZW5ndGggaXMgY29uZmlndXJlZCB0byA5IGJpdHMgKE0xLU0wID0gMDEpLAorICAqICAgICAgICAgdGhlIHJlY2VpdmVkIGRhdGEgaXMgaGFuZGxlZCBhcyBhIHNldCBvZiB1MTYuIEluIHRoaXMgY2FzZSwgU2l6ZSBtdXN0IGluZGljYXRlIHRoZSBudW1iZXIKKyAgKiAgICAgICAgIG9mIHUxNiBhdmFpbGFibGUgdGhyb3VnaCBwRGF0YS4KKyAgKiBAcGFyYW0gIGh1YXJ0IFBvaW50ZXIgdG8gYSBVQVJUX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKKyAgKiAgICAgICAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciB0aGUgc3BlY2lmaWVkIFVBUlQgbW9kdWxlLgorICAqIEBwYXJhbSAgcERhdGEgUG9pbnRlciB0byBkYXRhIGJ1ZmZlciAodTggb3IgdTE2IGRhdGEgZWxlbWVudHMpLgorICAqIEBwYXJhbSAgU2l6ZSAgQW1vdW50IG9mIGRhdGEgZWxlbWVudHMgKHU4IG9yIHUxNikgdG8gYmUgcmVjZWl2ZWQuCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfVUFSVF9SZWNlaXZlX0lUKFVBUlRfSGFuZGxlVHlwZURlZiAqaHVhcnQsIHVpbnQ4X3QgKnBEYXRhLCB1aW50MTZfdCBTaXplKQpAQCAtMTI2OSwxMSArMTI4NCwxNCBAQAogfQogCiAvKioKLSAgKiBAYnJpZWYgIFNlbmRzIGFuIGFtb3VudCBvZiBkYXRhIGluIG5vbiBibG9ja2luZyBtb2RlLgorICAqIEBicmllZiAgU2VuZHMgYW4gYW1vdW50IG9mIGRhdGEgaW4gRE1BIG1vZGUuCisgICogQG5vdGUgICBXaGVuIFVBUlQgcGFyaXR5IGlzIG5vdCBlbmFibGVkIChQQ0UgPSAwKSwgYW5kIFdvcmQgTGVuZ3RoIGlzIGNvbmZpZ3VyZWQgdG8gOSBiaXRzIChNMS1NMCA9IDAxKSwKKyAgKiAgICAgICAgIHRoZSBzZW50IGRhdGEgaXMgaGFuZGxlZCBhcyBhIHNldCBvZiB1MTYuIEluIHRoaXMgY2FzZSwgU2l6ZSBtdXN0IGluZGljYXRlIHRoZSBudW1iZXIKKyAgKiAgICAgICAgIG9mIHUxNiBwcm92aWRlZCB0aHJvdWdoIHBEYXRhLgogICAqIEBwYXJhbSAgaHVhcnQgIFBvaW50ZXIgdG8gYSBVQVJUX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKICAgKiAgICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBVQVJUIG1vZHVsZS4KLSAgKiBAcGFyYW0gIHBEYXRhIFBvaW50ZXIgdG8gZGF0YSBidWZmZXIKLSAgKiBAcGFyYW0gIFNpemUgQW1vdW50IG9mIGRhdGEgdG8gYmUgc2VudAorICAqIEBwYXJhbSAgcERhdGEgUG9pbnRlciB0byBkYXRhIGJ1ZmZlciAodTggb3IgdTE2IGRhdGEgZWxlbWVudHMpLgorICAqIEBwYXJhbSAgU2l6ZSAgQW1vdW50IG9mIGRhdGEgZWxlbWVudHMgKHU4IG9yIHUxNikgdG8gYmUgc2VudAogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1VBUlRfVHJhbnNtaXRfRE1BKFVBUlRfSGFuZGxlVHlwZURlZiAqaHVhcnQsIHVpbnQ4X3QgKnBEYXRhLCB1aW50MTZfdCBTaXplKQpAQCAtMTMzMywxMSArMTM1MSwxNCBAQAogfQogCiAvKioKLSAgKiBAYnJpZWYgIFJlY2VpdmVzIGFuIGFtb3VudCBvZiBkYXRhIGluIG5vbiBibG9ja2luZyBtb2RlLgotICAqIEBwYXJhbSAgaHVhcnQgIFBvaW50ZXIgdG8gYSBVQVJUX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKLSAgKiAgICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBVQVJUIG1vZHVsZS4KLSAgKiBAcGFyYW0gIHBEYXRhIFBvaW50ZXIgdG8gZGF0YSBidWZmZXIKLSAgKiBAcGFyYW0gIFNpemUgQW1vdW50IG9mIGRhdGEgdG8gYmUgcmVjZWl2ZWQKKyAgKiBAYnJpZWYgIFJlY2VpdmVzIGFuIGFtb3VudCBvZiBkYXRhIGluIERNQSBtb2RlLgorICAqIEBub3RlICAgV2hlbiBVQVJUIHBhcml0eSBpcyBub3QgZW5hYmxlZCAoUENFID0gMCksIGFuZCBXb3JkIExlbmd0aCBpcyBjb25maWd1cmVkIHRvIDkgYml0cyAoTTEtTTAgPSAwMSksCisgICogICAgICAgICB0aGUgcmVjZWl2ZWQgZGF0YSBpcyBoYW5kbGVkIGFzIGEgc2V0IG9mIHUxNi4gSW4gdGhpcyBjYXNlLCBTaXplIG11c3QgaW5kaWNhdGUgdGhlIG51bWJlcgorICAqICAgICAgICAgb2YgdTE2IGF2YWlsYWJsZSB0aHJvdWdoIHBEYXRhLgorICAqIEBwYXJhbSAgaHVhcnQgUG9pbnRlciB0byBhIFVBUlRfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucworICAqICAgICAgICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIHRoZSBzcGVjaWZpZWQgVUFSVCBtb2R1bGUuCisgICogQHBhcmFtICBwRGF0YSBQb2ludGVyIHRvIGRhdGEgYnVmZmVyICh1OCBvciB1MTYgZGF0YSBlbGVtZW50cykuCisgICogQHBhcmFtICBTaXplICBBbW91bnQgb2YgZGF0YSBlbGVtZW50cyAodTggb3IgdTE2KSB0byBiZSByZWNlaXZlZC4KICAgKiBAbm90ZSAgIFdoZW4gdGhlIFVBUlQgcGFyaXR5IGlzIGVuYWJsZWQgKFBDRSA9IDEpIHRoZSByZWNlaXZlZCBkYXRhIGNvbnRhaW5zIHRoZSBwYXJpdHkgYml0LgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwpAQCAtMjAzNyw3ICsyMDU4LDcgQEAKICAgICB9CiAKICAgICAvKiBVQVJUIE92ZXItUnVuIGludGVycnVwdCBvY2N1cnJlZCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0gICAgaWYgKCgoaXNyZmxhZ3MgJiBVU0FSVF9TUl9PUkUpICE9IFJFU0VUKSAmJiAoKGNyM2l0cyAmIFVTQVJUX0NSM19FSUUpICE9IFJFU0VUKSkKKyAgICBpZiAoKChpc3JmbGFncyAmIFVTQVJUX1NSX09SRSkgIT0gUkVTRVQpICYmICgoKGNyMWl0cyAmIFVTQVJUX0NSMV9SWE5FSUUpICE9IFJFU0VUKSB8fCAoKGNyM2l0cyAmIFVTQVJUX0NSM19FSUUpICE9IFJFU0VUKSkpCiAgICAgewogICAgICAgaHVhcnQtPkVycm9yQ29kZSB8PSBIQUxfVUFSVF9FUlJPUl9PUkU7CiAgICAgfQpAQCAtMzA0MCw2ICszMDYxLDcgQEAKIHN0YXRpYyB2b2lkIFVBUlRfU2V0Q29uZmlnKFVBUlRfSGFuZGxlVHlwZURlZiAqaHVhcnQpCiB7CiAgIHVpbnQzMl90IHRtcHJlZzsKKyAgdWludDMyX3QgcGNsazsKIAogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfVUFSVF9CQVVEUkFURShodWFydC0+SW5pdC5CYXVkUmF0ZSkpOwpAQCAtMzA3MiwzOSArMzA5NCw1NyBAQAogICBpZiAoaHVhcnQtPkluaXQuT3ZlclNhbXBsaW5nID09IFVBUlRfT1ZFUlNBTVBMSU5HXzgpCiAgIHsKICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFVTQVJUIEJSUiBDb25maWd1cmF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0jaWYgZGVmaW5lZChVU0FSVDYpCisjaWYgZGVmaW5lZChVU0FSVDYpICYmIGRlZmluZWQoVUFSVDkpICYmIGRlZmluZWQoVUFSVDEwKQorICAgIGlmICgoaHVhcnQtPkluc3RhbmNlID09IFVTQVJUMSkgfHwgKGh1YXJ0LT5JbnN0YW5jZSA9PSBVU0FSVDYpIHx8IChodWFydC0+SW5zdGFuY2UgPT0gVUFSVDkpIHx8IChodWFydC0+SW5zdGFuY2UgPT0gVUFSVDEwKSkKKyAgICB7CisgICAgICBwY2xrID0gSEFMX1JDQ19HZXRQQ0xLMkZyZXEoKTsKKyAgICAgIGh1YXJ0LT5JbnN0YW5jZS0+QlJSID0gVUFSVF9CUlJfU0FNUExJTkc4KHBjbGssIGh1YXJ0LT5Jbml0LkJhdWRSYXRlKTsKKyAgICB9CisjZWxpZiBkZWZpbmVkKFVTQVJUNikKICAgICBpZiAoKGh1YXJ0LT5JbnN0YW5jZSA9PSBVU0FSVDEpIHx8IChodWFydC0+SW5zdGFuY2UgPT0gVVNBUlQ2KSkKICAgICB7Ci0gICAgICBodWFydC0+SW5zdGFuY2UtPkJSUiA9IFVBUlRfQlJSX1NBTVBMSU5HOChIQUxfUkNDX0dldFBDTEsyRnJlcSgpLCBodWFydC0+SW5pdC5CYXVkUmF0ZSk7CisgICAgICBwY2xrID0gSEFMX1JDQ19HZXRQQ0xLMkZyZXEoKTsKKyAgICAgIGh1YXJ0LT5JbnN0YW5jZS0+QlJSID0gVUFSVF9CUlJfU0FNUExJTkc4KHBjbGssIGh1YXJ0LT5Jbml0LkJhdWRSYXRlKTsKICAgICB9CiAjZWxzZQogICAgIGlmIChodWFydC0+SW5zdGFuY2UgPT0gVVNBUlQxKQogICAgIHsKLSAgICAgIGh1YXJ0LT5JbnN0YW5jZS0+QlJSID0gVUFSVF9CUlJfU0FNUExJTkc4KEhBTF9SQ0NfR2V0UENMSzJGcmVxKCksIGh1YXJ0LT5Jbml0LkJhdWRSYXRlKTsKKyAgICAgIHBjbGsgPSBIQUxfUkNDX0dldFBDTEsyRnJlcSgpOworICAgICAgaHVhcnQtPkluc3RhbmNlLT5CUlIgPSBVQVJUX0JSUl9TQU1QTElORzgocGNsaywgaHVhcnQtPkluaXQuQmF1ZFJhdGUpOwogICAgIH0KICNlbmRpZiAvKiBVU0FSVDYgKi8KICAgICBlbHNlCiAgICAgewotICAgICAgaHVhcnQtPkluc3RhbmNlLT5CUlIgPSBVQVJUX0JSUl9TQU1QTElORzgoSEFMX1JDQ19HZXRQQ0xLMUZyZXEoKSwgaHVhcnQtPkluaXQuQmF1ZFJhdGUpOworICAgICAgcGNsayA9IEhBTF9SQ0NfR2V0UENMSzFGcmVxKCk7CisgICAgICBodWFydC0+SW5zdGFuY2UtPkJSUiA9IFVBUlRfQlJSX1NBTVBMSU5HOChwY2xrLCBodWFydC0+SW5pdC5CYXVkUmF0ZSk7CiAgICAgfQogICB9CiAgIGVsc2UKICAgewogICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVVNBUlQgQlJSIENvbmZpZ3VyYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSNpZiBkZWZpbmVkKFVTQVJUNikKKyNpZiBkZWZpbmVkKFVTQVJUNikgJiYgZGVmaW5lZChVQVJUOSkgJiYgZGVmaW5lZChVQVJUMTApCisgICAgaWYgKChodWFydC0+SW5zdGFuY2UgPT0gVVNBUlQxKSB8fCAoaHVhcnQtPkluc3RhbmNlID09IFVTQVJUNikgfHwgKGh1YXJ0LT5JbnN0YW5jZSA9PSBVQVJUOSkgfHwgKGh1YXJ0LT5JbnN0YW5jZSA9PSBVQVJUMTApKQorICAgIHsKKyAgICAgIHBjbGsgPSBIQUxfUkNDX0dldFBDTEsyRnJlcSgpOworICAgICAgaHVhcnQtPkluc3RhbmNlLT5CUlIgPSBVQVJUX0JSUl9TQU1QTElORzE2KHBjbGssIGh1YXJ0LT5Jbml0LkJhdWRSYXRlKTsKKyAgICB9CisjZWxpZiBkZWZpbmVkKFVTQVJUNikKICAgICBpZiAoKGh1YXJ0LT5JbnN0YW5jZSA9PSBVU0FSVDEpIHx8IChodWFydC0+SW5zdGFuY2UgPT0gVVNBUlQ2KSkKICAgICB7Ci0gICAgICBodWFydC0+SW5zdGFuY2UtPkJSUiA9IFVBUlRfQlJSX1NBTVBMSU5HMTYoSEFMX1JDQ19HZXRQQ0xLMkZyZXEoKSwgaHVhcnQtPkluaXQuQmF1ZFJhdGUpOworICAgICAgcGNsayA9IEhBTF9SQ0NfR2V0UENMSzJGcmVxKCk7CisgICAgICBodWFydC0+SW5zdGFuY2UtPkJSUiA9IFVBUlRfQlJSX1NBTVBMSU5HMTYocGNsaywgaHVhcnQtPkluaXQuQmF1ZFJhdGUpOwogICAgIH0KICNlbHNlCiAgICAgaWYgKGh1YXJ0LT5JbnN0YW5jZSA9PSBVU0FSVDEpCiAgICAgewotICAgICAgaHVhcnQtPkluc3RhbmNlLT5CUlIgPSBVQVJUX0JSUl9TQU1QTElORzE2KEhBTF9SQ0NfR2V0UENMSzJGcmVxKCksIGh1YXJ0LT5Jbml0LkJhdWRSYXRlKTsKKyAgICAgIHBjbGsgPSBIQUxfUkNDX0dldFBDTEsyRnJlcSgpOworICAgICAgaHVhcnQtPkluc3RhbmNlLT5CUlIgPSBVQVJUX0JSUl9TQU1QTElORzE2KHBjbGssIGh1YXJ0LT5Jbml0LkJhdWRSYXRlKTsKICAgICB9CiAjZW5kaWYgLyogVVNBUlQ2ICovCiAgICAgZWxzZQogICAgIHsKLSAgICAgIGh1YXJ0LT5JbnN0YW5jZS0+QlJSID0gVUFSVF9CUlJfU0FNUExJTkcxNihIQUxfUkNDX0dldFBDTEsxRnJlcSgpLCBodWFydC0+SW5pdC5CYXVkUmF0ZSk7CisgICAgICBwY2xrID0gSEFMX1JDQ19HZXRQQ0xLMUZyZXEoKTsKKyAgICAgIGh1YXJ0LT5JbnN0YW5jZS0+QlJSID0gVUFSVF9CUlJfU0FNUExJTkcxNihwY2xrLCBodWFydC0+SW5pdC5CYXVkUmF0ZSk7CiAgICAgfQogICB9CiB9CmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmNHh4X2hhbF91c2FydC5jIGIvU3JjL3N0bTMyZjR4eF9oYWxfdXNhcnQuYwppbmRleCA2NTViODBkLi5hNjVlYTc5IDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmNHh4X2hhbF91c2FydC5jCisrKyBiL1NyYy9zdG0zMmY0eHhfaGFsX3VzYXJ0LmMKQEAgLTczNCwxMSArNzM0LDE0IEBACiAKIC8qKgogICAqIEBicmllZiAgU2ltcGxleCBTZW5kIGFuIGFtb3VudCBvZiBkYXRhIGluIGJsb2NraW5nIG1vZGUuCi0gICogQHBhcmFtICBodXNhcnQgUG9pbnRlciB0byBhIFVTQVJUX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKLSAgKiAgICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBVU0FSVCBtb2R1bGUuCi0gICogQHBhcmFtICBwVHhEYXRhIFBvaW50ZXIgdG8gZGF0YSBidWZmZXIKLSAgKiBAcGFyYW0gIFNpemUgQW1vdW50IG9mIGRhdGEgdG8gYmUgc2VudAotICAqIEBwYXJhbSAgVGltZW91dCBUaW1lb3V0IGR1cmF0aW9uCisgICogQG5vdGUgICBXaGVuIFVBUlQgcGFyaXR5IGlzIG5vdCBlbmFibGVkIChQQ0UgPSAwKSwgYW5kIFdvcmQgTGVuZ3RoIGlzIGNvbmZpZ3VyZWQgdG8gOSBiaXRzIChNMS1NMCA9IDAxKSwKKyAgKiAgICAgICAgIHRoZSBzZW50IGRhdGEgaXMgaGFuZGxlZCBhcyBhIHNldCBvZiB1MTYuIEluIHRoaXMgY2FzZSwgU2l6ZSBtdXN0IGluZGljYXRlIHRoZSBudW1iZXIKKyAgKiAgICAgICAgIG9mIHUxNiBwcm92aWRlZCB0aHJvdWdoIHBUeERhdGEuCisgICogQHBhcmFtICBodXNhcnQgIFBvaW50ZXIgdG8gYSBVU0FSVF9IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCisgICogICAgICAgICAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciB0aGUgc3BlY2lmaWVkIFVTQVJUIG1vZHVsZS4KKyAgKiBAcGFyYW0gIHBUeERhdGEgUG9pbnRlciB0byBkYXRhIGJ1ZmZlciAodTggb3IgdTE2IGRhdGEgZWxlbWVudHMpLgorICAqIEBwYXJhbSAgU2l6ZSAgICBBbW91bnQgb2YgZGF0YSBlbGVtZW50cyAodTggb3IgdTE2KSB0byBiZSBzZW50LgorICAqIEBwYXJhbSAgVGltZW91dCBUaW1lb3V0IGR1cmF0aW9uLgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1VTQVJUX1RyYW5zbWl0KFVTQVJUX0hhbmRsZVR5cGVEZWYgKmh1c2FydCwgdWludDhfdCAqcFR4RGF0YSwgdWludDE2X3QgU2l6ZSwgdWludDMyX3QgVGltZW91dCkKQEAgLTc1OSw3ICs3NjIsNyBAQAogICAgIGh1c2FydC0+RXJyb3JDb2RlID0gSEFMX1VTQVJUX0VSUk9SX05PTkU7CiAgICAgaHVzYXJ0LT5TdGF0ZSA9IEhBTF9VU0FSVF9TVEFURV9CVVNZX1RYOwogCi0gICAgLyogSW5pdCB0aWNrc3RhcnQgZm9yIHRpbWVvdXQgbWFuYWdtZW50ICovCisgICAgLyogSW5pdCB0aWNrc3RhcnQgZm9yIHRpbWVvdXQgbWFuYWdlbWVudCAqLwogICAgIHRpY2tzdGFydCA9IEhBTF9HZXRUaWNrKCk7CiAKICAgICBodXNhcnQtPlR4WGZlclNpemUgPSBTaXplOwpAQCAtODE1LDExICs4MTgsMTUgQEAKIAogLyoqCiAgICogQGJyaWVmICBGdWxsLUR1cGxleCBSZWNlaXZlIGFuIGFtb3VudCBvZiBkYXRhIGluIGJsb2NraW5nIG1vZGUuCi0gICogQHBhcmFtICBodXNhcnQgUG9pbnRlciB0byBhIFVTQVJUX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKLSAgKiAgICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBVU0FSVCBtb2R1bGUuCi0gICogQHBhcmFtICBwUnhEYXRhIFBvaW50ZXIgdG8gZGF0YSBidWZmZXIKLSAgKiBAcGFyYW0gIFNpemUgQW1vdW50IG9mIGRhdGEgdG8gYmUgcmVjZWl2ZWQKLSAgKiBAcGFyYW0gIFRpbWVvdXQgVGltZW91dCBkdXJhdGlvbgorICAqIEBub3RlICAgVG8gcmVjZWl2ZSBzeW5jaHJvbm91cyBkYXRhLCBkdW1teSBkYXRhIGFyZSBzaW11bHRhbmVvdXNseSB0cmFuc21pdHRlZC4KKyAgKiBAbm90ZSAgIFdoZW4gVUFSVCBwYXJpdHkgaXMgbm90IGVuYWJsZWQgKFBDRSA9IDApLCBhbmQgV29yZCBMZW5ndGggaXMgY29uZmlndXJlZCB0byA5IGJpdHMgKE0xLU0wID0gMDEpLAorICAqICAgICAgICAgdGhlIHJlY2VpdmVkIGRhdGEgaXMgaGFuZGxlZCBhcyBhIHNldCBvZiB1MTYuIEluIHRoaXMgY2FzZSwgU2l6ZSBtdXN0IGluZGljYXRlIHRoZSBudW1iZXIKKyAgKiAgICAgICAgIG9mIHUxNiBhdmFpbGFibGUgdGhyb3VnaCBwUnhEYXRhLgorICAqIEBwYXJhbSAgaHVzYXJ0ICBQb2ludGVyIHRvIGEgVVNBUlRfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucworICAqICAgICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBVU0FSVCBtb2R1bGUuCisgICogQHBhcmFtICBwUnhEYXRhIFBvaW50ZXIgdG8gZGF0YSBidWZmZXIgKHU4IG9yIHUxNiBkYXRhIGVsZW1lbnRzKS4KKyAgKiBAcGFyYW0gIFNpemUgICAgQW1vdW50IG9mIGRhdGEgZWxlbWVudHMgKHU4IG9yIHUxNikgdG8gYmUgcmVjZWl2ZWQuCisgICogQHBhcmFtICBUaW1lb3V0IFRpbWVvdXQgZHVyYXRpb24uCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfVVNBUlRfUmVjZWl2ZShVU0FSVF9IYW5kbGVUeXBlRGVmICpodXNhcnQsIHVpbnQ4X3QgKnBSeERhdGEsIHVpbnQxNl90IFNpemUsIHVpbnQzMl90IFRpbWVvdXQpCkBAIC04MzksNyArODQ2LDcgQEAKICAgICBodXNhcnQtPkVycm9yQ29kZSA9IEhBTF9VU0FSVF9FUlJPUl9OT05FOwogICAgIGh1c2FydC0+U3RhdGUgPSBIQUxfVVNBUlRfU1RBVEVfQlVTWV9SWDsKIAotICAgIC8qIEluaXQgdGlja3N0YXJ0IGZvciB0aW1lb3V0IG1hbmFnbWVudCAqLworICAgIC8qIEluaXQgdGlja3N0YXJ0IGZvciB0aW1lb3V0IG1hbmFnZW1lbnQgKi8KICAgICB0aWNrc3RhcnQgPSBIQUxfR2V0VGljaygpOwogCiAgICAgaHVzYXJ0LT5SeFhmZXJTaXplID0gU2l6ZTsKQEAgLTkxOSwxMiArOTI2LDE1IEBACiB9CiAKIC8qKgotICAqIEBicmllZiAgRnVsbC1EdXBsZXggU2VuZCByZWNlaXZlIGFuIGFtb3VudCBvZiBkYXRhIGluIGZ1bGwtZHVwbGV4IG1vZGUgKGJsb2NraW5nIG1vZGUpLgotICAqIEBwYXJhbSAgaHVzYXJ0IFBvaW50ZXIgdG8gYSBVU0FSVF9IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCi0gICogICAgICAgICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIHRoZSBzcGVjaWZpZWQgVVNBUlQgbW9kdWxlLgotICAqIEBwYXJhbSAgcFR4RGF0YSBQb2ludGVyIHRvIGRhdGEgdHJhbnNtaXR0ZWQgYnVmZmVyCi0gICogQHBhcmFtICBwUnhEYXRhIFBvaW50ZXIgdG8gZGF0YSByZWNlaXZlZCBidWZmZXIKLSAgKiBAcGFyYW0gIFNpemUgQW1vdW50IG9mIGRhdGEgdG8gYmUgc2VudAorICAqIEBicmllZiAgRnVsbC1EdXBsZXggU2VuZCBhbmQgUmVjZWl2ZSBhbiBhbW91bnQgb2YgZGF0YSBpbiBmdWxsLWR1cGxleCBtb2RlIChibG9ja2luZyBtb2RlKS4KKyAgKiBAbm90ZSAgIFdoZW4gVUFSVCBwYXJpdHkgaXMgbm90IGVuYWJsZWQgKFBDRSA9IDApLCBhbmQgV29yZCBMZW5ndGggaXMgY29uZmlndXJlZCB0byA5IGJpdHMgKE0xLU0wID0gMDEpLAorICAqICAgICAgICAgdGhlIHNlbnQgZGF0YSBhbmQgdGhlIHJlY2VpdmVkIGRhdGEgYXJlIGhhbmRsZWQgYXMgc2V0cyBvZiB1MTYuIEluIHRoaXMgY2FzZSwgU2l6ZSBtdXN0IGluZGljYXRlIHRoZSBudW1iZXIKKyAgKiAgICAgICAgIG9mIHUxNiBhdmFpbGFibGUgdGhyb3VnaCBwVHhEYXRhIGFuZCB0aHJvdWdoIHBSeERhdGEuCisgICogQHBhcmFtICBodXNhcnQgIFBvaW50ZXIgdG8gYSBVU0FSVF9IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCisgICogICAgICAgICAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciB0aGUgc3BlY2lmaWVkIFVTQVJUIG1vZHVsZS4KKyAgKiBAcGFyYW0gIHBUeERhdGEgUG9pbnRlciB0byBUWCBkYXRhIGJ1ZmZlciAodTggb3IgdTE2IGRhdGEgZWxlbWVudHMpLgorICAqIEBwYXJhbSAgcFJ4RGF0YSBQb2ludGVyIHRvIFJYIGRhdGEgYnVmZmVyICh1OCBvciB1MTYgZGF0YSBlbGVtZW50cykuCisgICogQHBhcmFtICBTaXplICAgIEFtb3VudCBvZiBkYXRhIGVsZW1lbnRzICh1OCBvciB1MTYpIHRvIGJlIHNlbnQgKHNhbWUgYW1vdW50IHRvIGJlIHJlY2VpdmVkKS4KICAgKiBAcGFyYW0gIFRpbWVvdXQgVGltZW91dCBkdXJhdGlvbgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwpAQCAtOTQ1LDcgKzk1NSw3IEBACiAgICAgaHVzYXJ0LT5FcnJvckNvZGUgPSBIQUxfVVNBUlRfRVJST1JfTk9ORTsKICAgICBodXNhcnQtPlN0YXRlID0gSEFMX1VTQVJUX1NUQVRFX0JVU1lfUlg7CiAKLSAgICAvKiBJbml0IHRpY2tzdGFydCBmb3IgdGltZW91dCBtYW5hZ21lbnQgKi8KKyAgICAvKiBJbml0IHRpY2tzdGFydCBmb3IgdGltZW91dCBtYW5hZ2VtZW50ICovCiAgICAgdGlja3N0YXJ0ID0gSEFMX0dldFRpY2soKTsKIAogICAgIGh1c2FydC0+UnhYZmVyU2l6ZSA9IFNpemU7CkBAIC0xMDM1LDEwICsxMDQ1LDEzIEBACiAKIC8qKgogICAqIEBicmllZiAgU2ltcGxleCBTZW5kIGFuIGFtb3VudCBvZiBkYXRhIGluIG5vbi1ibG9ja2luZyBtb2RlLgotICAqIEBwYXJhbSAgaHVzYXJ0IFBvaW50ZXIgdG8gYSBVU0FSVF9IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCi0gICogICAgICAgICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIHRoZSBzcGVjaWZpZWQgVVNBUlQgbW9kdWxlLgotICAqIEBwYXJhbSAgcFR4RGF0YSBQb2ludGVyIHRvIGRhdGEgYnVmZmVyCi0gICogQHBhcmFtICBTaXplIEFtb3VudCBvZiBkYXRhIHRvIGJlIHNlbnQKKyAgKiBAbm90ZSAgIFdoZW4gVUFSVCBwYXJpdHkgaXMgbm90IGVuYWJsZWQgKFBDRSA9IDApLCBhbmQgV29yZCBMZW5ndGggaXMgY29uZmlndXJlZCB0byA5IGJpdHMgKE0xLU0wID0gMDEpLAorICAqICAgICAgICAgdGhlIHNlbnQgZGF0YSBpcyBoYW5kbGVkIGFzIGEgc2V0IG9mIHUxNi4gSW4gdGhpcyBjYXNlLCBTaXplIG11c3QgaW5kaWNhdGUgdGhlIG51bWJlcgorICAqICAgICAgICAgb2YgdTE2IHByb3ZpZGVkIHRocm91Z2ggcFR4RGF0YS4KKyAgKiBAcGFyYW0gIGh1c2FydCAgUG9pbnRlciB0byBhIFVTQVJUX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKKyAgKiAgICAgICAgICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIHRoZSBzcGVjaWZpZWQgVVNBUlQgbW9kdWxlLgorICAqIEBwYXJhbSAgcFR4RGF0YSBQb2ludGVyIHRvIGRhdGEgYnVmZmVyICh1OCBvciB1MTYgZGF0YSBlbGVtZW50cykuCisgICogQHBhcmFtICBTaXplICAgIEFtb3VudCBvZiBkYXRhIGVsZW1lbnRzICh1OCBvciB1MTYpIHRvIGJlIHNlbnQuCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICogQG5vdGUgICBUaGUgVVNBUlQgZXJyb3JzIGFyZSBub3QgbWFuYWdlZCB0byBhdm9pZCB0aGUgb3ZlcnJ1biBlcnJvci4KICAgKi8KQEAgLTEwODUsMTAgKzEwOTgsMTQgQEAKIAogLyoqCiAgICogQGJyaWVmICBTaW1wbGV4IFJlY2VpdmUgYW4gYW1vdW50IG9mIGRhdGEgaW4gbm9uLWJsb2NraW5nIG1vZGUuCi0gICogQHBhcmFtICBodXNhcnQgUG9pbnRlciB0byBhIFVTQVJUX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKLSAgKiAgICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBVU0FSVCBtb2R1bGUuCi0gICogQHBhcmFtICBwUnhEYXRhIFBvaW50ZXIgdG8gZGF0YSBidWZmZXIKLSAgKiBAcGFyYW0gIFNpemUgQW1vdW50IG9mIGRhdGEgdG8gYmUgcmVjZWl2ZWQKKyAgKiBAbm90ZSAgIFRvIHJlY2VpdmUgc3luY2hyb25vdXMgZGF0YSwgZHVtbXkgZGF0YSBhcmUgc2ltdWx0YW5lb3VzbHkgdHJhbnNtaXR0ZWQuCisgICogQG5vdGUgICBXaGVuIFVBUlQgcGFyaXR5IGlzIG5vdCBlbmFibGVkIChQQ0UgPSAwKSwgYW5kIFdvcmQgTGVuZ3RoIGlzIGNvbmZpZ3VyZWQgdG8gOSBiaXRzIChNMS1NMCA9IDAxKSwKKyAgKiAgICAgICAgIHRoZSByZWNlaXZlZCBkYXRhIGlzIGhhbmRsZWQgYXMgYSBzZXQgb2YgdTE2LiBJbiB0aGlzIGNhc2UsIFNpemUgbXVzdCBpbmRpY2F0ZSB0aGUgbnVtYmVyCisgICogICAgICAgICBvZiB1MTYgYXZhaWxhYmxlIHRocm91Z2ggcFJ4RGF0YS4KKyAgKiBAcGFyYW0gIGh1c2FydCAgUG9pbnRlciB0byBhIFVTQVJUX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKKyAgKiAgICAgICAgICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIHRoZSBzcGVjaWZpZWQgVVNBUlQgbW9kdWxlLgorICAqIEBwYXJhbSAgcFJ4RGF0YSBQb2ludGVyIHRvIGRhdGEgYnVmZmVyICh1OCBvciB1MTYgZGF0YSBlbGVtZW50cykuCisgICogQHBhcmFtICBTaXplICAgIEFtb3VudCBvZiBkYXRhIGVsZW1lbnRzICh1OCBvciB1MTYpIHRvIGJlIHJlY2VpdmVkLgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1VTQVJUX1JlY2VpdmVfSVQoVVNBUlRfSGFuZGxlVHlwZURlZiAqaHVzYXJ0LCB1aW50OF90ICpwUnhEYXRhLCB1aW50MTZfdCBTaXplKQpAQCAtMTEzMCwxMiArMTE0NywxNSBAQAogfQogCiAvKioKLSAgKiBAYnJpZWYgIEZ1bGwtRHVwbGV4IFNlbmQgcmVjZWl2ZSBhbiBhbW91bnQgb2YgZGF0YSBpbiBmdWxsLWR1cGxleCBtb2RlIChub24tYmxvY2tpbmcpLgotICAqIEBwYXJhbSAgaHVzYXJ0IFBvaW50ZXIgdG8gYSBVU0FSVF9IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCi0gICogICAgICAgICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIHRoZSBzcGVjaWZpZWQgVVNBUlQgbW9kdWxlLgotICAqIEBwYXJhbSAgcFR4RGF0YSBQb2ludGVyIHRvIGRhdGEgdHJhbnNtaXR0ZWQgYnVmZmVyCi0gICogQHBhcmFtICBwUnhEYXRhIFBvaW50ZXIgdG8gZGF0YSByZWNlaXZlZCBidWZmZXIKLSAgKiBAcGFyYW0gIFNpemUgQW1vdW50IG9mIGRhdGEgdG8gYmUgcmVjZWl2ZWQKKyAgKiBAYnJpZWYgIEZ1bGwtRHVwbGV4IFNlbmQgYW5kIFJlY2VpdmUgYW4gYW1vdW50IG9mIGRhdGEgaW4gZnVsbC1kdXBsZXggbW9kZSAobm9uLWJsb2NraW5nKS4KKyAgKiBAbm90ZSAgIFdoZW4gVUFSVCBwYXJpdHkgaXMgbm90IGVuYWJsZWQgKFBDRSA9IDApLCBhbmQgV29yZCBMZW5ndGggaXMgY29uZmlndXJlZCB0byA5IGJpdHMgKE0xLU0wID0gMDEpLAorICAqICAgICAgICAgdGhlIHNlbnQgZGF0YSBhbmQgdGhlIHJlY2VpdmVkIGRhdGEgYXJlIGhhbmRsZWQgYXMgc2V0cyBvZiB1MTYuIEluIHRoaXMgY2FzZSwgU2l6ZSBtdXN0IGluZGljYXRlIHRoZSBudW1iZXIKKyAgKiAgICAgICAgIG9mIHUxNiBhdmFpbGFibGUgdGhyb3VnaCBwVHhEYXRhIGFuZCB0aHJvdWdoIHBSeERhdGEuCisgICogQHBhcmFtICBodXNhcnQgIFBvaW50ZXIgdG8gYSBVU0FSVF9IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCisgICogICAgICAgICAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciB0aGUgc3BlY2lmaWVkIFVTQVJUIG1vZHVsZS4KKyAgKiBAcGFyYW0gIHBUeERhdGEgUG9pbnRlciB0byBUWCBkYXRhIGJ1ZmZlciAodTggb3IgdTE2IGRhdGEgZWxlbWVudHMpLgorICAqIEBwYXJhbSAgcFJ4RGF0YSBQb2ludGVyIHRvIFJYIGRhdGEgYnVmZmVyICh1OCBvciB1MTYgZGF0YSBlbGVtZW50cykuCisgICogQHBhcmFtICBTaXplICAgIEFtb3VudCBvZiBkYXRhIGVsZW1lbnRzICh1OCBvciB1MTYpIHRvIGJlIHNlbnQgKHNhbWUgYW1vdW50IHRvIGJlIHJlY2VpdmVkKS4KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9VU0FSVF9UcmFuc21pdFJlY2VpdmVfSVQoVVNBUlRfSGFuZGxlVHlwZURlZiAqaHVzYXJ0LCB1aW50OF90ICpwVHhEYXRhLCB1aW50OF90ICpwUnhEYXRhLCAgdWludDE2X3QgU2l6ZSkKQEAgLTExODMsMTEgKzEyMDMsMTQgQEAKIH0KIAogLyoqCi0gICogQGJyaWVmICBTaW1wbGV4IFNlbmQgYW4gYW1vdW50IG9mIGRhdGEgaW4gbm9uLWJsb2NraW5nIG1vZGUuCi0gICogQHBhcmFtICBodXNhcnQgUG9pbnRlciB0byBhIFVTQVJUX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKLSAgKiAgICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBVU0FSVCBtb2R1bGUuCi0gICogQHBhcmFtICBwVHhEYXRhIFBvaW50ZXIgdG8gZGF0YSBidWZmZXIKLSAgKiBAcGFyYW0gIFNpemUgQW1vdW50IG9mIGRhdGEgdG8gYmUgc2VudAorICAqIEBicmllZiAgU2ltcGxleCBTZW5kIGFuIGFtb3VudCBvZiBkYXRhIGluIERNQSBtb2RlLgorICAqIEBub3RlICAgV2hlbiBVQVJUIHBhcml0eSBpcyBub3QgZW5hYmxlZCAoUENFID0gMCksIGFuZCBXb3JkIExlbmd0aCBpcyBjb25maWd1cmVkIHRvIDkgYml0cyAoTTEtTTAgPSAwMSksCisgICogICAgICAgICB0aGUgc2VudCBkYXRhIGlzIGhhbmRsZWQgYXMgYSBzZXQgb2YgdTE2LiBJbiB0aGlzIGNhc2UsIFNpemUgbXVzdCBpbmRpY2F0ZSB0aGUgbnVtYmVyCisgICogICAgICAgICBvZiB1MTYgcHJvdmlkZWQgdGhyb3VnaCBwVHhEYXRhLgorICAqIEBwYXJhbSAgaHVzYXJ0ICBQb2ludGVyIHRvIGEgVVNBUlRfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucworICAqICAgICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBVU0FSVCBtb2R1bGUuCisgICogQHBhcmFtICBwVHhEYXRhIFBvaW50ZXIgdG8gZGF0YSBidWZmZXIgKHU4IG9yIHUxNiBkYXRhIGVsZW1lbnRzKS4KKyAgKiBAcGFyYW0gIFNpemUgICAgQW1vdW50IG9mIGRhdGEgZWxlbWVudHMgKHU4IG9yIHUxNikgdG8gYmUgc2VudC4KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9VU0FSVF9UcmFuc21pdF9ETUEoVVNBUlRfSGFuZGxlVHlwZURlZiAqaHVzYXJ0LCB1aW50OF90ICpwVHhEYXRhLCB1aW50MTZfdCBTaXplKQpAQCAtMTI0NSwxMSArMTI2OCwxNCBAQAogfQogCiAvKioKLSAgKiBAYnJpZWYgIEZ1bGwtRHVwbGV4IFJlY2VpdmUgYW4gYW1vdW50IG9mIGRhdGEgaW4gbm9uLWJsb2NraW5nIG1vZGUuCi0gICogQHBhcmFtICBodXNhcnQgUG9pbnRlciB0byBhIFVTQVJUX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKLSAgKiAgICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBVU0FSVCBtb2R1bGUuCi0gICogQHBhcmFtICBwUnhEYXRhIFBvaW50ZXIgdG8gZGF0YSBidWZmZXIKLSAgKiBAcGFyYW0gIFNpemUgQW1vdW50IG9mIGRhdGEgdG8gYmUgcmVjZWl2ZWQKKyAgKiBAYnJpZWYgIEZ1bGwtRHVwbGV4IFJlY2VpdmUgYW4gYW1vdW50IG9mIGRhdGEgaW4gRE1BIG1vZGUuCisgICogQG5vdGUgICBXaGVuIFVBUlQgcGFyaXR5IGlzIG5vdCBlbmFibGVkIChQQ0UgPSAwKSwgYW5kIFdvcmQgTGVuZ3RoIGlzIGNvbmZpZ3VyZWQgdG8gOSBiaXRzIChNMS1NMCA9IDAxKSwKKyAgKiAgICAgICAgIHRoZSByZWNlaXZlZCBkYXRhIGlzIGhhbmRsZWQgYXMgYSBzZXQgb2YgdTE2LiBJbiB0aGlzIGNhc2UsIFNpemUgbXVzdCBpbmRpY2F0ZSB0aGUgbnVtYmVyCisgICogICAgICAgICBvZiB1MTYgYXZhaWxhYmxlIHRocm91Z2ggcFJ4RGF0YS4KKyAgKiBAcGFyYW0gIGh1c2FydCAgUG9pbnRlciB0byBhIFVTQVJUX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKKyAgKiAgICAgICAgICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIHRoZSBzcGVjaWZpZWQgVVNBUlQgbW9kdWxlLgorICAqIEBwYXJhbSAgcFJ4RGF0YSBQb2ludGVyIHRvIGRhdGEgYnVmZmVyICh1OCBvciB1MTYgZGF0YSBlbGVtZW50cykuCisgICogQHBhcmFtICBTaXplICAgIEFtb3VudCBvZiBkYXRhIGVsZW1lbnRzICh1OCBvciB1MTYpIHRvIGJlIHJlY2VpdmVkLgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqIEBub3RlICAgVGhlIFVTQVJUIERNQSB0cmFuc21pdCBzdHJlYW0gbXVzdCBiZSBjb25maWd1cmVkIGluIG9yZGVyIHRvIGdlbmVyYXRlIHRoZSBjbG9jayBmb3IgdGhlIHNsYXZlLgogICAqIEBub3RlICAgV2hlbiB0aGUgVVNBUlQgcGFyaXR5IGlzIGVuYWJsZWQgKFBDRSA9IDEpIHRoZSBkYXRhIHJlY2VpdmVkIGNvbnRhaW4gdGhlIHBhcml0eSBiaXQuCkBAIC0xMzM3LDEyICsxMzYzLDE1IEBACiB9CiAKIC8qKgotICAqIEBicmllZiAgRnVsbC1EdXBsZXggVHJhbnNtaXQgUmVjZWl2ZSBhbiBhbW91bnQgb2YgZGF0YSBpbiBub24tYmxvY2tpbmcgbW9kZS4KLSAgKiBAcGFyYW0gIGh1c2FydCBQb2ludGVyIHRvIGEgVVNBUlRfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucwotICAqICAgICAgICAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciB0aGUgc3BlY2lmaWVkIFVTQVJUIG1vZHVsZS4KLSAgKiBAcGFyYW0gIHBUeERhdGEgUG9pbnRlciB0byBkYXRhIHRyYW5zbWl0dGVkIGJ1ZmZlcgotICAqIEBwYXJhbSAgcFJ4RGF0YSBQb2ludGVyIHRvIGRhdGEgcmVjZWl2ZWQgYnVmZmVyCi0gICogQHBhcmFtICBTaXplIEFtb3VudCBvZiBkYXRhIHRvIGJlIHJlY2VpdmVkCisgICogQGJyaWVmICBGdWxsLUR1cGxleCBUcmFuc21pdCBSZWNlaXZlIGFuIGFtb3VudCBvZiBkYXRhIGluIERNQSBtb2RlLgorICAqIEBub3RlICAgV2hlbiBVQVJUIHBhcml0eSBpcyBub3QgZW5hYmxlZCAoUENFID0gMCksIGFuZCBXb3JkIExlbmd0aCBpcyBjb25maWd1cmVkIHRvIDkgYml0cyAoTTEtTTAgPSAwMSksCisgICogICAgICAgICB0aGUgc2VudCBkYXRhIGFuZCB0aGUgcmVjZWl2ZWQgZGF0YSBhcmUgaGFuZGxlZCBhcyBzZXRzIG9mIHUxNi4gSW4gdGhpcyBjYXNlLCBTaXplIG11c3QgaW5kaWNhdGUgdGhlIG51bWJlcgorICAqICAgICAgICAgb2YgdTE2IGF2YWlsYWJsZSB0aHJvdWdoIHBUeERhdGEgYW5kIHRocm91Z2ggcFJ4RGF0YS4KKyAgKiBAcGFyYW0gIGh1c2FydCAgUG9pbnRlciB0byBhIFVTQVJUX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKKyAgKiAgICAgICAgICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIHRoZSBzcGVjaWZpZWQgVVNBUlQgbW9kdWxlLgorICAqIEBwYXJhbSAgcFR4RGF0YSBQb2ludGVyIHRvIFRYIGRhdGEgYnVmZmVyICh1OCBvciB1MTYgZGF0YSBlbGVtZW50cykuCisgICogQHBhcmFtICBwUnhEYXRhIFBvaW50ZXIgdG8gUlggZGF0YSBidWZmZXIgKHU4IG9yIHUxNiBkYXRhIGVsZW1lbnRzKS4KKyAgKiBAcGFyYW0gIFNpemUgICAgQW1vdW50IG9mIGRhdGEgZWxlbWVudHMgKHU4IG9yIHUxNikgdG8gYmUgcmVjZWl2ZWQvc2VudC4KICAgKiBAbm90ZSAgIFdoZW4gdGhlIFVTQVJUIHBhcml0eSBpcyBlbmFibGVkIChQQ0UgPSAxKSB0aGUgZGF0YSByZWNlaXZlZCBjb250YWluIHRoZSBwYXJpdHkgYml0LgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwpAQCAtMTc2Myw3ICsxNzkyLDcgQEAKICAgICB9CiAKICAgICAvKiBVU0FSVCBPdmVyLVJ1biBpbnRlcnJ1cHQgb2NjdXJyZWQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotICAgIGlmICgoKGlzcmZsYWdzICYgVVNBUlRfU1JfT1JFKSAhPSBSRVNFVCkgJiYgKChjcjNpdHMgJiBVU0FSVF9DUjNfRUlFKSAhPSBSRVNFVCkpCisgICAgaWYgKCgoaXNyZmxhZ3MgJiBVU0FSVF9TUl9PUkUpICE9IFJFU0VUKSAmJiAoKChjcjFpdHMgJiBVU0FSVF9DUjFfUlhORUlFKSAhPSBSRVNFVCkgfHwgKChjcjNpdHMgJiBVU0FSVF9DUjNfRUlFKSAhPSBSRVNFVCkpKQogICAgIHsKICAgICAgIGh1c2FydC0+RXJyb3JDb2RlIHw9IEhBTF9VU0FSVF9FUlJPUl9PUkU7CiAgICAgfQpAQCAtMjY4OSw2ICsyNzE4LDcgQEAKIHN0YXRpYyB2b2lkIFVTQVJUX1NldENvbmZpZyhVU0FSVF9IYW5kbGVUeXBlRGVmICpodXNhcnQpCiB7CiAgIHVpbnQzMl90IHRtcHJlZyA9IDB4MDBVOworICB1aW50MzJfdCBwY2xrOwogCiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19VU0FSVF9JTlNUQU5DRShodXNhcnQtPkluc3RhbmNlKSk7CkBAIC0yNzQxLDIwICsyNzcxLDI5IEBACiAgIENMRUFSX0JJVChodXNhcnQtPkluc3RhbmNlLT5DUjMsIChVU0FSVF9DUjNfUlRTRSB8IFVTQVJUX0NSM19DVFNFKSk7CiAKICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBVU0FSVCBCUlIgQ29uZmlndXJhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0jaWYgZGVmaW5lZChVU0FSVDYpIAorI2lmIGRlZmluZWQoVVNBUlQ2KSAmJiBkZWZpbmVkKFVBUlQ5KSAmJiBkZWZpbmVkKFVBUlQxMCkKKyAgIGlmICgoaHVzYXJ0LT5JbnN0YW5jZSA9PSBVU0FSVDEpIHx8IChodXNhcnQtPkluc3RhbmNlID09IFVTQVJUNikgfHwgKGh1c2FydC0+SW5zdGFuY2UgPT0gVUFSVDkpIHx8IChodXNhcnQtPkluc3RhbmNlID09IFVBUlQxMCkpCisgICB7CisgICAgcGNsayA9IEhBTF9SQ0NfR2V0UENMSzJGcmVxKCk7CisgICAgaHVzYXJ0LT5JbnN0YW5jZS0+QlJSID0gVVNBUlRfQlJSKHBjbGssIGh1c2FydC0+SW5pdC5CYXVkUmF0ZSk7CisgICB9CisjZWxpZiBkZWZpbmVkKFVTQVJUNikKICAgaWYoKGh1c2FydC0+SW5zdGFuY2UgPT0gVVNBUlQxKSB8fCAoaHVzYXJ0LT5JbnN0YW5jZSA9PSBVU0FSVDYpKQogICB7Ci0gICAgaHVzYXJ0LT5JbnN0YW5jZS0+QlJSID0gVVNBUlRfQlJSKEhBTF9SQ0NfR2V0UENMSzJGcmVxKCksIGh1c2FydC0+SW5pdC5CYXVkUmF0ZSk7CisgICAgcGNsayA9IEhBTF9SQ0NfR2V0UENMSzJGcmVxKCk7CisgICAgaHVzYXJ0LT5JbnN0YW5jZS0+QlJSID0gVVNBUlRfQlJSKHBjbGssIGh1c2FydC0+SW5pdC5CYXVkUmF0ZSk7CiAgIH0KICNlbHNlCiAgIGlmKGh1c2FydC0+SW5zdGFuY2UgPT0gVVNBUlQxKQogICB7Ci0gICAgaHVzYXJ0LT5JbnN0YW5jZS0+QlJSID0gVVNBUlRfQlJSKEhBTF9SQ0NfR2V0UENMSzJGcmVxKCksIGh1c2FydC0+SW5pdC5CYXVkUmF0ZSk7Ci0gIH0JCi0jZW5kaWYgLyogVVNBUlQ2ICovCQorICAgIHBjbGsgPSBIQUxfUkNDX0dldFBDTEsyRnJlcSgpOworICAgIGh1c2FydC0+SW5zdGFuY2UtPkJSUiA9IFVTQVJUX0JSUihwY2xrLCBodXNhcnQtPkluaXQuQmF1ZFJhdGUpOworICB9CisjZW5kaWYgLyogVVNBUlQ2IHx8IFVBUlQ5IHx8IFVBUlQxMCAqLwkKICAgZWxzZQogICB7Ci0gICAgaHVzYXJ0LT5JbnN0YW5jZS0+QlJSID0gVVNBUlRfQlJSKEhBTF9SQ0NfR2V0UENMSzFGcmVxKCksIGh1c2FydC0+SW5pdC5CYXVkUmF0ZSk7CisgICAgcGNsayA9IEhBTF9SQ0NfR2V0UENMSzFGcmVxKCk7CisgICAgaHVzYXJ0LT5JbnN0YW5jZS0+QlJSID0gVVNBUlRfQlJSKHBjbGssIGh1c2FydC0+SW5pdC5CYXVkUmF0ZSk7CiAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjR4eF9oYWxfd3dkZy5jIGIvU3JjL3N0bTMyZjR4eF9oYWxfd3dkZy5jCmluZGV4IDBjNDNiYTcuLjYwZDQxYjkgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmY0eHhfaGFsX3d3ZGcuYworKysgYi9TcmMvc3RtMzJmNHh4X2hhbF93d2RnLmMKQEAgLTMyLDE3ICszMiwxOSBAQAogICAgICAgICAoKyspIG1pbiB0aW1lIChtUykgPSAxMDAwICogKENvdW50ZXIgLSBXaW5kb3cpIC8gV1dERyBjbG9jawogICAgICAgICAoKyspIG1heCB0aW1lIChtUykgPSAxMDAwICogKENvdW50ZXIgLSAweDQwKSAvIFdXREcgY2xvY2sKICAgICAoKykgVHlwaWNhbCB2YWx1ZXM6Ci0gICAgICAgICgrKykgQ291bnRlciBtaW4gKFRbNTswXSA9IDB4MDApIEA1Nk1IeiAoUENMSzEpIHdpdGggemVybyBwcmVzY2FsZXI6Ci0gICAgICAgICAgICAgbWF4IHRpbWVvdXQgYmVmb3JlIHJlc2V0OiB+NzMuMTS1cwotICAgICAgICAoKyspIENvdW50ZXIgbWF4IChUWzU7MF0gPSAweDNGKSBANTZNSHogKFBDTEsxKSB3aXRoIHByZXNjYWxlciBkaXZpZGluZyBieSAxMjg6Ci0gICAgICAgICAgICAgbWF4IHRpbWVvdXQgYmVmb3JlIHJlc2V0OiB+NTk5LjE4bXMKKyAgICAgICAgKCsrKSBDb3VudGVyIG1pbiAoVFs1OzBdID0gMHgwMCkgQDQyTUh6IChQQ0xLMSkgd2l0aCB6ZXJvIHByZXNjYWxlcjoKKyAgICAgICAgICAgICBtYXggdGltZW91dCBiZWZvcmUgcmVzZXQ6IGFwcHJveGltYXRlbHkgOTcuNTK1cworICAgICAgICAoKyspIENvdW50ZXIgbWF4IChUWzU7MF0gPSAweDNGKSBANDJNSHogKFBDTEsxKSB3aXRoIHByZXNjYWxlciBkaXZpZGluZyBieSA4OgorICAgICAgICAgICAgIG1heCB0aW1lb3V0IGJlZm9yZSByZXNldDogYXBwcm94aW1hdGVseSA0OS45M21zCiAKICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgICAgICAgICAgICAgICAjIyMjIyBIb3cgdG8gdXNlIHRoaXMgZHJpdmVyICMjIyMjCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICBbLi5dCisKICAgICAqKiogQ29tbW9uIGRyaXZlciB1c2FnZSAqKioKICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICBbLi5dCiAgICAgKCspIEVuYWJsZSBXV0RHIEFQQjEgY2xvY2sgdXNpbmcgX19IQUxfUkNDX1dXREdfQ0xLX0VOQUJMRSgpLgogICAgICgrKSBTZXQgdGhlIFdXREcgcHJlc2NhbGVyLCByZWZyZXNoIHdpbmRvdyBhbmQgY291bnRlciB2YWx1ZQogICAgICAgICB1c2luZyBIQUxfV1dER19Jbml0KCkgZnVuY3Rpb24uCkBAIC01OSw5ICs2MSwxMCBAQAogICAgICAgICBIQUxfV1dER19SZWZyZXNoKCkgZnVuY3Rpb24uIFRoaXMgb3BlcmF0aW9uIG11c3Qgb2NjdXIgb25seSB3aGVuCiAgICAgICAgIHRoZSBjb3VudGVyIGlzIGxvd2VyIHRoYW4gdGhlIHJlZnJlc2ggd2luZG93IHZhbHVlIGFscmVhZHkgcHJvZ3JhbW1lZC4KIAotICBbLi5dCiAgICAgKioqIENhbGxiYWNrIHJlZ2lzdHJhdGlvbiAqKioKICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgIFsuLl0KICAgICBUaGUgY29tcGlsYXRpb24gZGVmaW5lICBVU0VfSEFMX1dXREdfUkVHSVNURVJfQ0FMTEJBQ0tTIHdoZW4gc2V0IHRvIDEgYWxsb3dzCiAgICAgdGhlIHVzZXIgdG8gY29uZmlndXJlIGR5bmFtaWNhbGx5IHRoZSBkcml2ZXIgY2FsbGJhY2tzLiBVc2UgRnVuY3Rpb25zCiAgICAgQHJlZiBIQUxfV1dER19SZWdpc3RlckNhbGxiYWNrKCkgdG8gcmVnaXN0ZXIgYSB1c2VyIGNhbGxiYWNrLgpAQCAtODAsMTMgKzgzLDE1IEBACiAgICAgICAgICgrKykgRXdpQ2FsbGJhY2sgOiBjYWxsYmFjayBmb3IgIEVhcmx5IFdha2VVcCBJbnRlcnJ1cHQuCiAgICAgICAgICgrKykgTXNwSW5pdENhbGxiYWNrIDogV1dERyBNc3BJbml0LgogCisgICAgWy4uXQogICAgIFdoZW4gY2FsbGluZyBAcmVmIEhBTF9XV0RHX0luaXQgZnVuY3Rpb24sIGNhbGxiYWNrcyBhcmUgcmVzZXQgdG8gdGhlCi0gICAgY29ycmVzcG9uZGluZyBsZWdhY3kgd2VhayAoc3VyY2hhcmdlZCkgZnVuY3Rpb25zOiAKKyAgICBjb3JyZXNwb25kaW5nIGxlZ2FjeSB3ZWFrIChzdXJjaGFyZ2VkKSBmdW5jdGlvbnM6CiAgICAgQHJlZiBIQUxfV1dER19FYXJseVdha2V1cENhbGxiYWNrKCkgYW5kIEhBTF9XV0RHX01zcEluaXQoKSBvbmx5IGlmIHRoZXkgaGF2ZQogICAgIG5vdCBiZWVuIHJlZ2lzdGVyZWQgYmVmb3JlLgogCisgICAgWy4uXQogICAgIFdoZW4gY29tcGlsYXRpb24gZGVmaW5lIFVTRV9IQUxfV1dER19SRUdJU1RFUl9DQUxMQkFDS1MgaXMgc2V0IHRvIDAgb3IKLSAgICBub3QgZGVmaW5lZCwgdGhlIGNhbGxiYWNrIHJlZ2lzdGVyaW5nIGZlYXR1cmUgaXMgbm90IGF2YWlsYWJsZSAKKyAgICBub3QgZGVmaW5lZCwgdGhlIGNhbGxiYWNrIHJlZ2lzdGVyaW5nIGZlYXR1cmUgaXMgbm90IGF2YWlsYWJsZQogICAgIGFuZCB3ZWFrIChzdXJjaGFyZ2VkKSBjYWxsYmFja3MgYXJlIHVzZWQuCiAKICAgICAqKiogV1dERyBIQUwgZHJpdmVyIG1hY3JvcyBsaXN0ICoqKgpAQCAtMTM4LDggKzE0Myw4IEBACiAgICovCiAKIC8qKiBAZGVmZ3JvdXAgV1dER19FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXAxIEluaXRpYWxpemF0aW9uIGFuZCBDb25maWd1cmF0aW9uIGZ1bmN0aW9ucwotICogIEBicmllZiAgICBJbml0aWFsaXphdGlvbiBhbmQgQ29uZmlndXJhdGlvbiBmdW5jdGlvbnMuCi0gKgorICAqICBAYnJpZWYgICAgSW5pdGlhbGl6YXRpb24gYW5kIENvbmZpZ3VyYXRpb24gZnVuY3Rpb25zLgorICAqCiBAdmVyYmF0aW0KICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgICAgIyMjIyMgSW5pdGlhbGl6YXRpb24gYW5kIENvbmZpZ3VyYXRpb24gZnVuY3Rpb25zICMjIyMjCkBAIC0xNzgsMTIgKzE4MywxMiBAQAogCiAjaWYgKFVTRV9IQUxfV1dER19SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkKICAgLyogUmVzZXQgQ2FsbGJhY2sgcG9pbnRlcnMgKi8KLSAgaWYoaHd3ZGctPkV3aUNhbGxiYWNrID09IE5VTEwpCisgIGlmIChod3dkZy0+RXdpQ2FsbGJhY2sgPT0gTlVMTCkKICAgewogICAgIGh3d2RnLT5Fd2lDYWxsYmFjayA9IEhBTF9XV0RHX0Vhcmx5V2FrZXVwQ2FsbGJhY2s7CiAgIH0KIAotICBpZihod3dkZy0+TXNwSW5pdENhbGxiYWNrID09IE5VTEwpCisgIGlmIChod3dkZy0+TXNwSW5pdENhbGxiYWNrID09IE5VTEwpCiAgIHsKICAgICBod3dkZy0+TXNwSW5pdENhbGxiYWNrID0gSEFMX1dXREdfTXNwSW5pdDsKICAgfQpAQCAtMjQyLDEzICsyNDcsMTMgQEAKIHsKICAgSEFMX1N0YXR1c1R5cGVEZWYgc3RhdHVzID0gSEFMX09LOwogCi0gIGlmKHBDYWxsYmFjayA9PSBOVUxMKQorICBpZiAocENhbGxiYWNrID09IE5VTEwpCiAgIHsKICAgICBzdGF0dXMgPSBIQUxfRVJST1I7CiAgIH0KICAgZWxzZQogICB7Ci0gICAgc3dpdGNoKENhbGxiYWNrSUQpCisgICAgc3dpdGNoIChDYWxsYmFja0lEKQogICAgIHsKICAgICAgIGNhc2UgSEFMX1dXREdfRVdJX0NCX0lEOgogICAgICAgICBod3dkZy0+RXdpQ2FsbGJhY2sgPSBwQ2FsbGJhY2s7CkBAIC0yNzAsNyArMjc1LDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBVbnJlZ2lzdGVyIGEgV1dERyBDYWxsYmFjawotICAqICAgICAgICAgV1dERyBDYWxsYmFjayBpcyByZWRpcmVjdGVkIHRvIHRoZSB3ZWFrIChzdXJjaGFyZ2VkKSBwcmVkZWZpbmVkIGNhbGxiYWNrIAorICAqICAgICAgICAgV1dERyBDYWxsYmFjayBpcyByZWRpcmVjdGVkIHRvIHRoZSB3ZWFrIChzdXJjaGFyZ2VkKSBwcmVkZWZpbmVkIGNhbGxiYWNrCiAgICogQHBhcmFtICBod3dkZyBXV0RHIGhhbmRsZQogICAqIEBwYXJhbSAgQ2FsbGJhY2tJRCBJRCBvZiB0aGUgY2FsbGJhY2sgdG8gYmUgcmVnaXN0ZXJlZAogICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKQEAgLTI4Miw3ICsyODcsNyBAQAogewogICBIQUxfU3RhdHVzVHlwZURlZiBzdGF0dXMgPSBIQUxfT0s7CiAKLSAgc3dpdGNoKENhbGxiYWNrSUQpCisgIHN3aXRjaCAoQ2FsbGJhY2tJRCkKICAgewogICAgIGNhc2UgSEFMX1dXREdfRVdJX0NCX0lEOgogICAgICAgaHd3ZGctPkV3aUNhbGxiYWNrID0gSEFMX1dXREdfRWFybHlXYWtldXBDYWxsYmFjazsKQEAgLTMwNiw4ICszMTEsOCBAQAogICAqLwogCiAvKiogQGRlZmdyb3VwIFdXREdfRXhwb3J0ZWRfRnVuY3Rpb25zX0dyb3VwMiBJTyBvcGVyYXRpb24gZnVuY3Rpb25zCi0gKiAgQGJyaWVmICAgIElPIG9wZXJhdGlvbiBmdW5jdGlvbnMKLSAqCisgICogIEBicmllZiAgICBJTyBvcGVyYXRpb24gZnVuY3Rpb25zCisgICoKIEB2ZXJiYXRpbQogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgICAgICAgICAgICAgICAgICAjIyMjIyBJTyBvcGVyYXRpb24gZnVuY3Rpb25zICMjIyMjCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmNHh4X2xsX2FkYy5jIGIvU3JjL3N0bTMyZjR4eF9sbF9hZGMuYwppbmRleCA4YWNiMjMxLi43OTkyNjk0IDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmNHh4X2xsX2FkYy5jCisrKyBiL1NyYy9zdG0zMmY0eHhfbGxfYWRjLmMKQEAgLTcwOSw4ICs3MDksNyBAQAogICAgICAgICAgICAgICAgICAgIEFEQ19DUjFfRElTQ0VOCiAgICAgICAgICAgICAgICAgIHwgQURDX0NSMV9ESVNDTlVNCiAgICAgICAgICAgICAgICAgLAotICAgICAgICAgICAgICAgICAgIEFEQ19SRUdfSW5pdFN0cnVjdC0+U2VxdWVuY2VyTGVuZ3RoCi0gICAgICAgICAgICAgICAgIHwgQURDX1JFR19Jbml0U3RydWN0LT5TZXF1ZW5jZXJEaXNjb250CisgICAgICAgICAgICAgICAgICAgQURDX1JFR19Jbml0U3RydWN0LT5TZXF1ZW5jZXJEaXNjb250CiAgICAgICAgICAgICAgICAgKTsKICAgICB9CiAgICAgZWxzZQpAQCAtNzE5LDggKzcxOCw3IEBACiAgICAgICAgICAgICAgICAgICAgQURDX0NSMV9ESVNDRU4KICAgICAgICAgICAgICAgICAgfCBBRENfQ1IxX0RJU0NOVU0KICAgICAgICAgICAgICAgICAsCi0gICAgICAgICAgICAgICAgICAgQURDX1JFR19Jbml0U3RydWN0LT5TZXF1ZW5jZXJMZW5ndGgKLSAgICAgICAgICAgICAgICAgfCBMTF9BRENfUkVHX1NFUV9ESVNDT05UX0RJU0FCTEUKKyAgICAgICAgICAgICAgICAgICBMTF9BRENfUkVHX1NFUV9ESVNDT05UX0RJU0FCTEUKICAgICAgICAgICAgICAgICApOwogICAgIH0KICAgICAKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmY0eHhfbGxfZ3Bpby5jIGIvU3JjL3N0bTMyZjR4eF9sbF9ncGlvLmMKaW5kZXggZWJhMTRiMC4uYmZkY2IxZSAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZjR4eF9sbF9ncGlvLmMKKysrIGIvU3JjL3N0bTMyZjR4eF9sbF9ncGlvLmMKQEAgLTIxMSwzNSArMjExLDM5IEBACiAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ29uZmlndXJlIHRoZSBwb3J0IHBpbnMgLS0tLS0tLS0tLS0tLS0tLSAqLwogICAvKiBJbml0aWFsaXplICBwaW5wb3Mgb24gZmlyc3QgcGluIHNldCAqLwogICBwaW5wb3MgPSBQT1NJVElPTl9WQUwoR1BJT19Jbml0U3RydWN0LT5QaW4pOwotCisgIAogICAvKiBDb25maWd1cmUgdGhlIHBvcnQgcGlucyAqLwogICB3aGlsZSAoKChHUElPX0luaXRTdHJ1Y3QtPlBpbikgPj4gcGlucG9zKSAhPSAweDAwMDAwMDAwVSkKICAgewogICAgIC8qIEdldCBjdXJyZW50IGlvIHBvc2l0aW9uICovCiAgICAgY3VycmVudHBpbiA9IChHUElPX0luaXRTdHJ1Y3QtPlBpbikgJiAoMHgwMDAwMDAwMVUgPDwgcGlucG9zKTsKLQorICAgIAogICAgIGlmIChjdXJyZW50cGluKQogICAgIHsKLSAgICAgIC8qIFBpbiBNb2RlIGNvbmZpZ3VyYXRpb24gKi8KLSAgICAgIExMX0dQSU9fU2V0UGluTW9kZShHUElPeCwgY3VycmVudHBpbiwgR1BJT19Jbml0U3RydWN0LT5Nb2RlKTsKLQorICAgICAgCiAgICAgICBpZiAoKEdQSU9fSW5pdFN0cnVjdC0+TW9kZSA9PSBMTF9HUElPX01PREVfT1VUUFVUKSB8fCAoR1BJT19Jbml0U3RydWN0LT5Nb2RlID09IExMX0dQSU9fTU9ERV9BTFRFUk5BVEUpKQogICAgICAgewogICAgICAgICAvKiBDaGVjayBTcGVlZCBtb2RlIHBhcmFtZXRlcnMgKi8KICAgICAgICAgYXNzZXJ0X3BhcmFtKElTX0xMX0dQSU9fU1BFRUQoR1BJT19Jbml0U3RydWN0LT5TcGVlZCkpOwotCisgICAgICAgIAogICAgICAgICAvKiBTcGVlZCBtb2RlIGNvbmZpZ3VyYXRpb24gKi8KICAgICAgICAgTExfR1BJT19TZXRQaW5TcGVlZChHUElPeCwgY3VycmVudHBpbiwgR1BJT19Jbml0U3RydWN0LT5TcGVlZCk7CisgICAgICAgIAorICAgICAgICAvKiBDaGVjayBPdXRwdXQgbW9kZSBwYXJhbWV0ZXJzICovCisgICAgICAgIGFzc2VydF9wYXJhbShJU19MTF9HUElPX09VVFBVVF9UWVBFKEdQSU9fSW5pdFN0cnVjdC0+T3V0cHV0VHlwZSkpOworICAgICAgICAKKyAgICAgICAgLyogT3V0cHV0IG1vZGUgY29uZmlndXJhdGlvbiovCisgICAgICAgIExMX0dQSU9fU2V0UGluT3V0cHV0VHlwZShHUElPeCwgY3VycmVudHBpbiwgR1BJT19Jbml0U3RydWN0LT5PdXRwdXRUeXBlKTsKICAgICAgIH0KLQorICAgICAgCiAgICAgICAvKiBQdWxsLXVwIFB1bGwgZG93biByZXNpc3RvciBjb25maWd1cmF0aW9uKi8KICAgICAgIExMX0dQSU9fU2V0UGluUHVsbChHUElPeCwgY3VycmVudHBpbiwgR1BJT19Jbml0U3RydWN0LT5QdWxsKTsKLQorICAgICAgCiAgICAgICBpZiAoR1BJT19Jbml0U3RydWN0LT5Nb2RlID09IExMX0dQSU9fTU9ERV9BTFRFUk5BVEUpCiAgICAgICB7CiAgICAgICAgIC8qIENoZWNrIEFsdGVybmF0ZSBwYXJhbWV0ZXIgKi8KICAgICAgICAgYXNzZXJ0X3BhcmFtKElTX0xMX0dQSU9fQUxURVJOQVRFKEdQSU9fSW5pdFN0cnVjdC0+QWx0ZXJuYXRlKSk7Ci0KKyAgICAgICAgCiAgICAgICAgIC8qIFNwZWVkIG1vZGUgY29uZmlndXJhdGlvbiAqLwogICAgICAgICBpZiAoUE9TSVRJT05fVkFMKGN1cnJlbnRwaW4pIDwgMHgwMDAwMDAwOFUpCiAgICAgICAgIHsKQEAgLTI1MCwxOSArMjU0LDEzIEBACiAgICAgICAgICAgTExfR1BJT19TZXRBRlBpbl84XzE1KEdQSU94LCBjdXJyZW50cGluLCBHUElPX0luaXRTdHJ1Y3QtPkFsdGVybmF0ZSk7CiAgICAgICAgIH0KICAgICAgIH0KKyAgICAgIAorICAgICAgLyogUGluIE1vZGUgY29uZmlndXJhdGlvbiAqLworICAgICAgTExfR1BJT19TZXRQaW5Nb2RlKEdQSU94LCBjdXJyZW50cGluLCBHUElPX0luaXRTdHJ1Y3QtPk1vZGUpOwogICAgIH0KICAgICBwaW5wb3MrKzsKICAgfQogCi0gIGlmICgoR1BJT19Jbml0U3RydWN0LT5Nb2RlID09IExMX0dQSU9fTU9ERV9PVVRQVVQpIHx8IChHUElPX0luaXRTdHJ1Y3QtPk1vZGUgPT0gTExfR1BJT19NT0RFX0FMVEVSTkFURSkpCi0gIHsKLSAgICAvKiBDaGVjayBPdXRwdXQgbW9kZSBwYXJhbWV0ZXJzICovCi0gICAgYXNzZXJ0X3BhcmFtKElTX0xMX0dQSU9fT1VUUFVUX1RZUEUoR1BJT19Jbml0U3RydWN0LT5PdXRwdXRUeXBlKSk7Ci0KLSAgICAvKiBPdXRwdXQgbW9kZSBjb25maWd1cmF0aW9uKi8KLSAgICBMTF9HUElPX1NldFBpbk91dHB1dFR5cGUoR1BJT3gsIEdQSU9fSW5pdFN0cnVjdC0+UGluLCBHUElPX0luaXRTdHJ1Y3QtPk91dHB1dFR5cGUpOwotCi0gIH0KICAgcmV0dXJuIChTVUNDRVNTKTsKIH0KIApkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjR4eF9sbF9scHRpbS5jIGIvU3JjL3N0bTMyZjR4eF9sbF9scHRpbS5jCmluZGV4IDJjMDUyMTcuLmNiYzIwMzcgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmY0eHhfbGxfbHB0aW0uYworKysgYi9TcmMvc3RtMzJmNHh4X2xsX2xwdGltLmMKQEAgLTQsNyArNCw3IEBACiAgICogQGF1dGhvciAgTUNEIEFwcGxpY2F0aW9uIFRlYW0KICAgKiBAYnJpZWYgICBMUFRJTSBMTCBtb2R1bGUgZHJpdmVyLgogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgICAqIEBhdHRlbnRpb24KKyAgKiBAYXR0ZW50aW9uCiAgICoKICAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE2IFNUTWljcm9lbGVjdHJvbmljcy4KICAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLjwvY2VudGVyPjwvaDI+CkBAIC0xMyw3ICsxMyw4IEBACiAgICogdGhlICJMaWNlbnNlIjsgWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZQogICAqIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdDoKICAgKiAgICAgICAgICAgICAgICAgICAgICAgIG9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZQotICAqICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKi8KICNpZiBkZWZpbmVkKFVTRV9GVUxMX0xMX0RSSVZFUikKIApAQCAtMTcyLDE0ICsxNzMsNiBAQAogfQogCiAvKioKLSAgKiBAfQotICAqLwotCi0vKioKLSAgKiBAfQotICAqLwotCi0vKioKICAgKiBAYnJpZWYgIERpc2FibGUgdGhlIExQVElNIGluc3RhbmNlCiAgICogQHJtdG9sbCBDUiAgICAgICAgICAgRU5BQkxFICAgICAgICBMTF9MUFRJTV9EaXNhYmxlCiAgICogQHBhcmFtICBMUFRJTXggTG93LVBvd2VyIFRpbWVyIGluc3RhbmNlCkBAIC0yMDcsMTEgKzIwMCwxMSBAQAogICAvKiBTYXZlIExQVElNIHNvdXJjZSBjbG9jayAqLwogICBzd2l0Y2ggKCh1aW50MzJfdClMUFRJTXgpCiAgIHsKLSAgICAgY2FzZSBMUFRJTTFfQkFTRToKLSAgICAgICB0bXBjbGtzb3VyY2UgPSBMTF9SQ0NfR2V0TFBUSU1DbG9ja1NvdXJjZShMTF9SQ0NfTFBUSU0xX0NMS1NPVVJDRSk7Ci0gICAgICAgYnJlYWs7Ci0gICAgIGRlZmF1bHQ6Ci0gICAgICAgYnJlYWs7CisgICAgY2FzZSBMUFRJTTFfQkFTRToKKyAgICAgIHRtcGNsa3NvdXJjZSA9IExMX1JDQ19HZXRMUFRJTUNsb2NrU291cmNlKExMX1JDQ19MUFRJTTFfQ0xLU09VUkNFKTsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBicmVhazsKICAgfQogCiAgIC8qIFNhdmUgTFBUSU0gY29uZmlndXJhdGlvbiByZWdpc3RlcnMgKi8KQEAgLTIzMiwxMSArMjI1LDExIEBACiAgICAgLyogRm9yY2UgTFBUSU0gc291cmNlIGtlcm5lbCBjbG9jayBmcm9tIEFQQiAqLwogICAgIHN3aXRjaCAoKHVpbnQzMl90KUxQVElNeCkKICAgICB7Ci0gICAgICAgY2FzZSBMUFRJTTFfQkFTRToKLSAgICAgICAgIExMX1JDQ19TZXRMUFRJTUNsb2NrU291cmNlKExMX1JDQ19MUFRJTTFfQ0xLU09VUkNFX1BDTEsxKTsKLSAgICAgICAgIGJyZWFrOwotICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgTFBUSU0xX0JBU0U6CisgICAgICAgIExMX1JDQ19TZXRMUFRJTUNsb2NrU291cmNlKExMX1JDQ19MUFRJTTFfQ0xLU09VUkNFX1BDTEsxKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBpZiAodG1wQ01QICE9IDBVTCkKQEAgLTI0OSw3ICsyNDIsOCBAQAogICAgICAgZG8KICAgICAgIHsKICAgICAgICAgcmNjX2Nsb2NrLlNZU0NMS19GcmVxdWVuY3ktLTsgLyogVXNlZCBmb3IgdGltZW91dCAqLwotICAgICAgfSB3aGlsZSAoKChMTF9MUFRJTV9Jc0FjdGl2ZUZsYWdfQ01QT0soTFBUSU14KSAhPSAxVUwpKSAmJiAoKHJjY19jbG9jay5TWVNDTEtfRnJlcXVlbmN5KSA+IDBVTCkpOworICAgICAgfQorICAgICAgd2hpbGUgKCgoTExfTFBUSU1fSXNBY3RpdmVGbGFnX0NNUE9LKExQVElNeCkgIT0gMVVMKSkgJiYgKChyY2NfY2xvY2suU1lTQ0xLX0ZyZXF1ZW5jeSkgPiAwVUwpKTsKIAogICAgICAgTExfTFBUSU1fQ2xlYXJGbGFnX0NNUE9LKExQVElNeCk7CiAgICAgfQpAQCAtMjY0LDExICsyNTgsMTMgQEAKICAgICAgIGRvCiAgICAgICB7CiAgICAgICAgIHJjY19jbG9jay5TWVNDTEtfRnJlcXVlbmN5LS07IC8qIFVzZWQgZm9yIHRpbWVvdXQgKi8KLSAgICAgIH0gd2hpbGUgKCgoTExfTFBUSU1fSXNBY3RpdmVGbGFnX0FSUk9LKExQVElNeCkgIT0gMVVMKSkgJiYgKChyY2NfY2xvY2suU1lTQ0xLX0ZyZXF1ZW5jeSkgPiAwVUwpKTsKKyAgICAgIH0KKyAgICAgIHdoaWxlICgoKExMX0xQVElNX0lzQWN0aXZlRmxhZ19BUlJPSyhMUFRJTXgpICE9IDFVTCkpICYmICgocmNjX2Nsb2NrLlNZU0NMS19GcmVxdWVuY3kpID4gMFVMKSk7CiAKICAgICAgIExMX0xQVElNX0NsZWFyRmxhZ19BUlJPSyhMUFRJTXgpOwogICAgIH0KIAorCiAgICAgLyogUmVzdG9yZSBMUFRJTSBzb3VyY2Uga2VybmVsIGNsb2NrICovCiAgICAgTExfUkNDX1NldExQVElNQ2xvY2tTb3VyY2UodG1wY2xrc291cmNlKTsKICAgfQpAQCAtMjg2LDYgKzI4MiwxNCBAQAogICAqIEB9CiAgICovCiAKKy8qKgorICAqIEB9CisgICovCisKKy8qKgorICAqIEB9CisgICovCisKICNlbmRpZiAvKiBMUFRJTTEgKi8KIAogLyoqCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmNHh4X2xsX3JjYy5jIGIvU3JjL3N0bTMyZjR4eF9sbF9yY2MuYwppbmRleCAzN2MxMzBhLi5lYTE4YWRjIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmNHh4X2xsX3JjYy5jCisrKyBiL1NyYy9zdG0zMmY0eHhfbGxfcmNjLmMKQEAgLTE4NSw3ICsxODUsNyBAQAogICAqLwogRXJyb3JTdGF0dXMgTExfUkNDX0RlSW5pdCh2b2lkKQogewotICB1aW50MzJfdCB2bF9tYXNrID0gMFU7CisgIF9fSU8gdWludDMyX3QgdmxfbWFzazsKIAogICAvKiBTZXQgSFNJT04gYml0ICovCiAgIExMX1JDQ19IU0lfRW5hYmxlKCk7CkBAIC0xOTcsMTAgKzE5NywxMiBAQAogICAvKiBSZXNldCBDRkdSIHJlZ2lzdGVyICovCiAgIExMX1JDQ19Xcml0ZVJlZyhDRkdSLCAweDAwMDAwMDAwVSk7CiAKLSAgdmxfbWFzayA9IDB4RkZGRkZGRkZVOworICAvKiBSZWFkIENSIHJlZ2lzdGVyICovCisgIHZsX21hc2sgPSBMTF9SQ0NfUmVhZFJlZyhDUik7CiAKLSAgLyogUmVzZXQgSFNFT04sIFBMTFNZU09OIGJpdHMgKi8KLSAgQ0xFQVJfQklUKHZsX21hc2ssIChSQ0NfQ1JfSFNFT04gfCBSQ0NfQ1JfSFNFQllQIHwgUkNDX0NSX1BMTE9OIHwgUkNDX0NSX0NTU09OKSk7CisgIC8qIFJlc2V0IEhTRU9OLCBIU0VCWVAsIFBMTE9OLCBDU1NPTiBiaXRzICovCisgIENMRUFSX0JJVCh2bF9tYXNrLAorICAgICAgICAgICAgKFJDQ19DUl9IU0VPTiB8IFJDQ19DUl9IU0VCWVAgfCBSQ0NfQ1JfUExMT04gfCBSQ0NfQ1JfQ1NTT04pKTsKIAogI2lmIGRlZmluZWQoUkNDX1BMTFNBSV9TVVBQT1JUKQogICAvKiBSZXNldCBQTExTQUlPTiBiaXQgKi8KQEAgLTIxMiw3ICsyMTQsNyBAQAogICBDTEVBUl9CSVQodmxfbWFzaywgUkNDX0NSX1BMTEkyU09OKTsKICNlbmRpZiAvKiBSQ0NfUExMSTJTX1NVUFBPUlQgKi8KIAotICAvKiBXcml0ZSBuZXcgbWFzayBpbiBDUiByZWdpc3RlciAqLworICAvKiBXcml0ZSBuZXcgdmFsdWUgaW4gQ1IgcmVnaXN0ZXIgKi8KICAgTExfUkNDX1dyaXRlUmVnKENSLCB2bF9tYXNrKTsKIAogICAvKiBTZXQgSFNJVFJJTSBiaXRzIHRvIHRoZSByZXNldCB2YWx1ZSovCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmNHh4X2xsX3NkbW1jLmMgYi9TcmMvc3RtMzJmNHh4X2xsX3NkbW1jLmMKaW5kZXggMmIzZjA2Ny4uNGYyM2E0NSAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZjR4eF9sbF9zZG1tYy5jCisrKyBiL1NyYy9zdG0zMmY0eHhfbGxfc2RtbWMuYwpAQCAtMTUsNyArMTUsNyBAQAogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgICAgICAgICAgICAgICAgICAgIyMjIyMgU0RNTUMgcGVyaXBoZXJhbCBmZWF0dXJlcyAjIyMjIwogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gICAgICAgIAotICAgIFsuLl0gVGhlIFNEL1NETU1DIE1NQyBjYXJkIGhvc3QgaW50ZXJmYWNlIChTRE1NQykgcHJvdmlkZXMgYW4gaW50ZXJmYWNlIGJldHdlZW4gdGhlIEFQQjIKKyAgICBbLi5dIFRoZSBTRC9TRE1NQyBNTUMgY2FyZCBob3N0IGludGVyZmFjZSAoU0RNTUMpIHByb3ZpZGVzIGFuIGludGVyZmFjZSBiZXR3ZWVuIHRoZSBBSEIKICAgICAgICAgIHBlcmlwaGVyYWwgYnVzIGFuZCBNdWx0aU1lZGlhIGNhcmRzIChNTUNzKSwgU0QgbWVtb3J5IGNhcmRzLCBTRE1NQyBjYXJkcyBhbmQgQ0UtQVRBCiAgICAgICAgICBkZXZpY2VzLgogICAgIApAQCAtMjksOCArMjksNyBAQAogICAgICAgICAgKCspIEZ1bGwgc3VwcG9ydCBvZiB0aGUgQ0UtQVRBIGZlYXR1cmVzIChmdWxsIGNvbXBsaWFuY2Ugd2l0aCBDRS1BVEEgZGlnaXRhbCBwcm90b2NvbAogICAgICAgICAgICAgIFJldjEuMSkKICAgICAgICAgICgrKSBEYXRhIHRyYW5zZmVyIHVwIHRvIDQ4IE1IeiBmb3IgdGhlIDggYml0IG1vZGUKLSAgICAgICAgICgrKSBEYXRhIGFuZCBjb21tYW5kIG91dHB1dCBlbmFibGUgc2lnbmFscyB0byBjb250cm9sIGV4dGVybmFsIGJpZGlyZWN0aW9uYWwgZHJpdmVycy4KLSAgICAgICAgICAgICAgICAgCisgICAgICAgICAoKykgRGF0YSBhbmQgY29tbWFuZCBvdXRwdXQgZW5hYmxlIHNpZ25hbHMgdG8gY29udHJvbCBleHRlcm5hbCBiaWRpcmVjdGlvbmFsIGRyaXZlcnMKICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMjIyMgSG93IHRvIHVzZSB0aGlzIGRyaXZlciAjIyMjIwogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTQ0LDggKzQzLDggQEAKICAgICAgIGZ1bmN0aW9uYWxpdGllcyBvZiB0aGUgZXh0ZXJuYWwgZGV2aWNlLgogICAgCiAgICAgWy4uXQotICAgICAgKCspIFRoZSBTRE1NQyBjbG9jayAoU0RNTUNDTEsgPSA0OCBNSHopIGlzIGNvbWluZyBmcm9tIGEgc3BlY2lmaWMgb3V0cHV0IG9mIFBMTCAKLSAgICAgICAgICAoUExMNDhDTEspLiBCZWZvcmUgc3RhcnQgd29ya2luZyB3aXRoIFNETU1DIHBlcmlwaGVyYWwgbWFrZSBzdXJlIHRoYXQgdGhlCisgICAgICAoKykgVGhlIFNETU1DIGNsb2NrIChTRE1NQ0NMSyA9IDQ4IE1IeikgaXMgY29taW5nIGZyb20gYSBzcGVjaWZpYyBvdXRwdXQgKE1TSSwgUExMVVNCMUNMSywKKyAgICAgICAgICBQTExVU0IyQ0xLKS4gQmVmb3JlIHN0YXJ0IHdvcmtpbmcgd2l0aCBTRE1NQyBwZXJpcGhlcmFsIG1ha2Ugc3VyZSB0aGF0IHRoZQogICAgICAgICAgIFBMTCBpcyB3ZWxsIGNvbmZpZ3VyZWQuCiAgICAgICAgICAgVGhlIFNETU1DIHBlcmlwaGVyYWwgdXNlcyB0d28gY2xvY2sgc2lnbmFsczoKICAgICAgICAgICAoKyspIFNETU1DIGFkYXB0ZXIgY2xvY2sgKFNETU1DQ0xLID0gNDggTUh6KQpAQCAtNTcsMTMgKzU2LDEzIEBACiAgICAgICAoKykgRW5hYmxlL0Rpc2FibGUgcGVyaXBoZXJhbCBjbG9jayB1c2luZyBSQ0MgcGVyaXBoZXJhbCBtYWNyb3MgcmVsYXRlZCB0byBTRE1NQwogICAgICAgICAgIHBlcmlwaGVyYWwuCiAKLSAgICAgICgrKSBFbmFibGUgdGhlIFBvd2VyIE9OIFN0YXRlIHVzaW5nIHRoZSBTRElPX1Bvd2VyU3RhdGVfT04oU0RJT3gpIAotICAgICAgICAgIGZ1bmN0aW9uIGFuZCBkaXNhYmxlIGl0IHVzaW5nIHRoZSBmdW5jdGlvbiBTRElPX1Bvd2VyU3RhdGVfT04oU0RJT3gpLgorICAgICAgKCspIEVuYWJsZSB0aGUgUG93ZXIgT04gU3RhdGUgdXNpbmcgdGhlIFNESU9fUG93ZXJTdGF0ZV9PTigpIAorICAgICAgICAgIGZ1bmN0aW9uIGFuZCBkaXNhYmxlIGl0IHVzaW5nIHRoZSBmdW5jdGlvbiBTRElPX1Bvd2VyU3RhdGVfT0ZGKCkuCiAgICAgICAgICAgICAgICAgCiAgICAgICAoKykgRW5hYmxlL0Rpc2FibGUgdGhlIGNsb2NrIHVzaW5nIHRoZSBfX1NESU9fRU5BQkxFKCkvX19TRElPX0RJU0FCTEUoKSBtYWNyb3MuCiAgIAotICAgICAgKCspIEVuYWJsZS9EaXNhYmxlIHRoZSBwZXJpcGhlcmFsIGludGVycnVwdHMgdXNpbmcgdGhlIG1hY3JvcyBfX1NESU9fRU5BQkxFX0lUKGhTRElPLCBJVCkgCi0gICAgICAgICAgYW5kIF9fU0RJT19ESVNBQkxFX0lUKGhTRElPLCBJVCkgaWYgeW91IG5lZWQgdG8gdXNlIGludGVycnVwdCBtb2RlLiAKKyAgICAgICgrKSBFbmFibGUvRGlzYWJsZSB0aGUgcGVyaXBoZXJhbCBpbnRlcnJ1cHRzIHVzaW5nIHRoZSBtYWNyb3MgX19TRElPX0VOQUJMRV9JVCgpIAorICAgICAgICAgIGFuZCBfX1NESU9fRElTQUJMRV9JVCgpIGlmIHlvdSBuZWVkIHRvIHVzZSBpbnRlcnJ1cHQgbW9kZS4gCiAgIAogICAgICAgKCspIFdoZW4gdXNpbmcgdGhlIERNQSBtb2RlIAogICAgICAgICAgICgrKykgQ29uZmlndXJlIHRoZSBETUEgaW4gdGhlIE1TUCBsYXllciBvZiB0aGUgZXh0ZXJuYWwgZGV2aWNlCkBAIC04OSw3ICs4OCw3IEBACiAgICAgICAgICAgICAgIFNESU9fR2V0UmVzcG9uc2UoKSBmdW5jdGlvbi4KICAgCiAgICAgICAoKykgVG8gY29udHJvbCB0aGUgRFBTTSAoRGF0YSBQYXRoIFN0YXRlIE1hY2hpbmUpIGFuZCBzZW5kL3JlY2VpdmUgCi0gICAgICAgICAgIGRhdGEgdG8vZnJvbSB0aGUgY2FyZCB1c2UgdGhlIFNESU9fQ29uZmlnRGF0YSgpLCBTRElPX0dldERhdGFDb3VudGVyKCksIAorICAgICAgICAgICBkYXRhIHRvL2Zyb20gdGhlIGNhcmQgdXNlIHRoZSBTRElPX0RhdGFDb25maWcoKSwgU0RJT19HZXREYXRhQ291bnRlcigpLCAKICAgICAgICAgICBTRElPX1JlYWRGSUZPKCksIFNESU9fV3JpdGVGSUZPKCkgYW5kIFNESU9fR2V0RklGT0NvdW50KCkgZnVuY3Rpb25zLgogICAKICAgICAqKiogUmVhZCBPcGVyYXRpb25zICoqKgpAQCAtMTUxLDcgKzE1MCw3IEBACiAgICogVGhpcyBzb2Z0d2FyZSBjb21wb25lbnQgaXMgbGljZW5zZWQgYnkgU1QgdW5kZXIgQlNEIDMtQ2xhdXNlIGxpY2Vuc2UsCiAgICogdGhlICJMaWNlbnNlIjsgWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZQogICAqIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdDoKLSAgKiAgICAgICAgICAgICAgICAgICAgICAgIG9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZQorICAqICAgICAgICAgICAgICAgICAgICAgICBvcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2UKICAgKgogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKi8gCkBAIC0xNTksNiArMTU4LDggQEAKIC8qIEluY2x1ZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAjaW5jbHVkZSAic3RtMzJmNHh4X2hhbC5oIgogCisjaWYgZGVmaW5lZChTRElPKQorCiAvKiogQGFkZHRvZ3JvdXAgU1RNMzJGNHh4X0hBTF9Ecml2ZXIKICAgKiBAewogICAqLwpAQCAtMTY5LDExICsxNzAsNiBAQAogICAqLwogCiAjaWYgZGVmaW5lZChIQUxfU0RfTU9EVUxFX0VOQUJMRUQpIHx8IGRlZmluZWQoSEFMX01NQ19NT0RVTEVfRU5BQkxFRCkKLSNpZiBkZWZpbmVkKFNUTTMyRjQwNXh4KSB8fCBkZWZpbmVkKFNUTTMyRjQxNXh4KSB8fCBkZWZpbmVkKFNUTTMyRjQwN3h4KSB8fCBkZWZpbmVkKFNUTTMyRjQxN3h4KSB8fCBcCi0gICAgZGVmaW5lZChTVE0zMkY0Mjd4eCkgfHwgZGVmaW5lZChTVE0zMkY0Mzd4eCkgfHwgZGVmaW5lZChTVE0zMkY0Mjl4eCkgfHwgZGVmaW5lZChTVE0zMkY0Mzl4eCkgfHwgXAotICAgIGRlZmluZWQoU1RNMzJGNDAxeEMpIHx8IGRlZmluZWQoU1RNMzJGNDAxeEUpIHx8IGRlZmluZWQoU1RNMzJGNDExeEUpIHx8IGRlZmluZWQoU1RNMzJGNDQ2eHgpIHx8IFwKLSAgICBkZWZpbmVkKFNUTTMyRjQ2OXh4KSB8fCBkZWZpbmVkKFNUTTMyRjQ3OXh4KSB8fCBkZWZpbmVkKFNUTTMyRjQxMlp4KSB8fCBkZWZpbmVkKFNUTTMyRjQxMlZ4KSB8fCBcCi0gICAgZGVmaW5lZChTVE0zMkY0MTJSeCkgfHwgZGVmaW5lZChTVE0zMkY0MTJDeCkgfHwgZGVmaW5lZChTVE0zMkY0MTN4eCkgfHwgZGVmaW5lZChTVE0zMkY0MjN4eCkKIAogLyogUHJpdmF0ZSB0eXBlZGVmIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qIFByaXZhdGUgZGVmaW5lIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0yMDksMTMgKzIwNSwxMyBAQAogLyoqCiAgICogQGJyaWVmICBJbml0aWFsaXplcyB0aGUgU0RNTUMgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpZWQKICAgKiAgICAgICAgIHBhcmFtZXRlcnMgaW4gdGhlIFNETU1DX0luaXRUeXBlRGVmIGFuZCBjcmVhdGUgdGhlIGFzc29jaWF0ZWQgaGFuZGxlLgotICAqIEBwYXJhbSAgU0RJT3ggUG9pbnRlciB0byBTRE1NQyByZWdpc3RlciBiYXNlCi0gICogQHBhcmFtICBJbml0IFNETU1DIGluaXRpYWxpemF0aW9uIHN0cnVjdHVyZSAgIAorICAqIEBwYXJhbSAgU0RJT3g6IFBvaW50ZXIgdG8gU0RNTUMgcmVnaXN0ZXIgYmFzZQorICAqIEBwYXJhbSAgSW5pdDogU0RNTUMgaW5pdGlhbGl6YXRpb24gc3RydWN0dXJlICAgCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBTRElPX0luaXQoU0RJT19UeXBlRGVmICpTRElPeCwgU0RJT19Jbml0VHlwZURlZiBJbml0KQogewotICB1aW50MzJfdCB0bXByZWcgPSAwVTsKKyAgdWludDMyX3QgdG1wcmVnID0gMDsKIAogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfU0RJT19BTExfSU5TVEFOQ0UoU0RJT3gpKTsKQEAgLTI2Myw3ICsyNTksNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIFJlYWQgZGF0YSAod29yZCkgZnJvbSBSeCBGSUZPIGluIGJsb2NraW5nIG1vZGUgKHBvbGxpbmcpIAotICAqIEBwYXJhbSAgU0RJT3ggUG9pbnRlciB0byBTRE1NQyByZWdpc3RlciBiYXNlCisgICogQHBhcmFtICBTRElPeDogUG9pbnRlciB0byBTRE1NQyByZWdpc3RlciBiYXNlCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCiB1aW50MzJfdCBTRElPX1JlYWRGSUZPKFNESU9fVHlwZURlZiAqU0RJT3gpCkBAIC0yNzQsOCArMjcwLDggQEAKIAogLyoqCiAgICogQGJyaWVmICBXcml0ZSBkYXRhICh3b3JkKSB0byBUeCBGSUZPIGluIGJsb2NraW5nIG1vZGUgKHBvbGxpbmcpIAotICAqIEBwYXJhbSAgU0RJT3ggUG9pbnRlciB0byBTRE1NQyByZWdpc3RlciBiYXNlCi0gICogQHBhcmFtICBwV3JpdGVEYXRhIHBvaW50ZXIgdG8gZGF0YSB0byB3cml0ZQorICAqIEBwYXJhbSAgU0RJT3g6IFBvaW50ZXIgdG8gU0RNTUMgcmVnaXN0ZXIgYmFzZQorICAqIEBwYXJhbSAgcFdyaXRlRGF0YTogcG9pbnRlciB0byBkYXRhIHRvIHdyaXRlCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBTRElPX1dyaXRlRklGTyhTRElPX1R5cGVEZWYgKlNESU94LCB1aW50MzJfdCAqcFdyaXRlRGF0YSkKQEAgLTMwNywzMyArMzAzLDM3IEBACiAKIC8qKgogICAqIEBicmllZiAgU2V0IFNETU1DIFBvd2VyIHN0YXRlIHRvIE9OLiAKLSAgKiBAcGFyYW0gIFNESU94IFBvaW50ZXIgdG8gU0RNTUMgcmVnaXN0ZXIgYmFzZQorICAqIEBwYXJhbSAgU0RJT3g6IFBvaW50ZXIgdG8gU0RNTUMgcmVnaXN0ZXIgYmFzZQogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgU0RJT19Qb3dlclN0YXRlX09OKFNESU9fVHlwZURlZiAqU0RJT3gpCiB7ICAKICAgLyogU2V0IHBvd2VyIHN0YXRlIHRvIE9OICovIAogICBTRElPeC0+UE9XRVIgPSBTRElPX1BPV0VSX1BXUkNUUkw7CisKKyAgLyogMW1zOiByZXF1aXJlZCBwb3dlciB1cCB3YWl0aW5nIHRpbWUgYmVmb3JlIHN0YXJ0aW5nIHRoZSBTRCBpbml0aWFsaXphdGlvbgorICBzZXF1ZW5jZSAqLworICBIQUxfRGVsYXkoMik7CiAgIAogICByZXR1cm4gSEFMX09LOwogfQogCiAvKioKICAgKiBAYnJpZWYgIFNldCBTRE1NQyBQb3dlciBzdGF0ZSB0byBPRkYuIAotICAqIEBwYXJhbSAgU0RJT3ggUG9pbnRlciB0byBTRE1NQyByZWdpc3RlciBiYXNlCisgICogQHBhcmFtICBTRElPeDogUG9pbnRlciB0byBTRE1NQyByZWdpc3RlciBiYXNlCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBTRElPX1Bvd2VyU3RhdGVfT0ZGKFNESU9fVHlwZURlZiAqU0RJT3gpCiB7CiAgIC8qIFNldCBwb3dlciBzdGF0ZSB0byBPRkYgKi8KLSAgU0RJT3gtPlBPV0VSID0gMHgwMDAwMDAwMFU7CisgIFNESU94LT5QT1dFUiA9ICh1aW50MzJfdCkweDAwMDAwMDAwOwogICAKICAgcmV0dXJuIEhBTF9PSzsKIH0KIAogLyoqCiAgICogQGJyaWVmICBHZXQgU0RNTUMgUG93ZXIgc3RhdGUuIAotICAqIEBwYXJhbSAgU0RJT3ggUG9pbnRlciB0byBTRE1NQyByZWdpc3RlciBiYXNlCisgICogQHBhcmFtICBTRElPeDogUG9pbnRlciB0byBTRE1NQyByZWdpc3RlciBiYXNlCiAgICogQHJldHZhbCBQb3dlciBzdGF0dXMgb2YgdGhlIGNvbnRyb2xsZXIuIFRoZSByZXR1cm5lZCB2YWx1ZSBjYW4gYmUgb25lIG9mIHRoZSAKICAgKiAgICAgICAgIGZvbGxvd2luZyB2YWx1ZXM6CiAgICogICAgICAgICAgICAtIDB4MDA6IFBvd2VyIE9GRgpAQCAtMzQ4LDE0ICszNDgsMTQgQEAKIC8qKgogICAqIEBicmllZiAgQ29uZmlndXJlIHRoZSBTRE1NQyBjb21tYW5kIHBhdGggYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpZWQgcGFyYW1ldGVycyBpbgogICAqICAgICAgICAgU0RJT19DbWRJbml0VHlwZURlZiBzdHJ1Y3R1cmUgYW5kIHNlbmQgdGhlIGNvbW1hbmQgCi0gICogQHBhcmFtICBTRElPeCBQb2ludGVyIHRvIFNETU1DIHJlZ2lzdGVyIGJhc2UKLSAgKiBAcGFyYW0gIENvbW1hbmQgcG9pbnRlciB0byBhIFNESU9fQ21kSW5pdFR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMgCisgICogQHBhcmFtICBTRElPeDogUG9pbnRlciB0byBTRE1NQyByZWdpc3RlciBiYXNlCisgICogQHBhcmFtICBDb21tYW5kOiBwb2ludGVyIHRvIGEgU0RJT19DbWRJbml0VHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucyAKICAgKiAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciB0aGUgU0RNTUMgY29tbWFuZAogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgU0RJT19TZW5kQ29tbWFuZChTRElPX1R5cGVEZWYgKlNESU94LCBTRElPX0NtZEluaXRUeXBlRGVmICpDb21tYW5kKQogewotICB1aW50MzJfdCB0bXByZWcgPSAwVTsKKyAgdWludDMyX3QgdG1wcmVnID0gMDsKICAgCiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19TRElPX0NNRF9JTkRFWChDb21tYW5kLT5DbWRJbmRleCkpOwpAQCAtMzgwLDcgKzM4MCw3IEBACiAKIC8qKgogICAqIEBicmllZiAgUmV0dXJuIHRoZSBjb21tYW5kIGluZGV4IG9mIGxhc3QgY29tbWFuZCBmb3Igd2hpY2ggcmVzcG9uc2UgcmVjZWl2ZWQKLSAgKiBAcGFyYW0gIFNESU94IFBvaW50ZXIgdG8gU0RNTUMgcmVnaXN0ZXIgYmFzZQorICAqIEBwYXJhbSAgU0RJT3g6IFBvaW50ZXIgdG8gU0RNTUMgcmVnaXN0ZXIgYmFzZQogICAqIEByZXR2YWwgQ29tbWFuZCBpbmRleCBvZiB0aGUgbGFzdCBjb21tYW5kIHJlc3BvbnNlIHJlY2VpdmVkCiAgICovCiB1aW50OF90IFNESU9fR2V0Q29tbWFuZFJlc3BvbnNlKFNESU9fVHlwZURlZiAqU0RJT3gpCkBAIC0zOTEsMjQgKzM5MSwyNCBAQAogCiAvKioKICAgKiBAYnJpZWYgIFJldHVybiB0aGUgcmVzcG9uc2UgcmVjZWl2ZWQgZnJvbSB0aGUgY2FyZCBmb3IgdGhlIGxhc3QgY29tbWFuZAotICAqIEBwYXJhbSAgU0RJT3ggUG9pbnRlciB0byBTRE1NQyByZWdpc3RlciBiYXNlICAgIAotICAqIEBwYXJhbSAgUmVzcG9uc2UgU3BlY2lmaWVzIHRoZSBTRE1NQyByZXNwb25zZSByZWdpc3Rlci4gCisgICogQHBhcmFtICBTRElPeDogUG9pbnRlciB0byBTRE1NQyByZWdpc3RlciBiYXNlICAgIAorICAqIEBwYXJhbSAgUmVzcG9uc2U6IFNwZWNpZmllcyB0aGUgU0RNTUMgcmVzcG9uc2UgcmVnaXN0ZXIuIAogICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAgICogICAgICAgICAgICBAYXJnIFNESU9fUkVTUDE6IFJlc3BvbnNlIFJlZ2lzdGVyIDEKLSAgKiAgICAgICAgICAgIEBhcmcgU0RJT19SRVNQMTogUmVzcG9uc2UgUmVnaXN0ZXIgMgotICAqICAgICAgICAgICAgQGFyZyBTRElPX1JFU1AxOiBSZXNwb25zZSBSZWdpc3RlciAzCi0gICogICAgICAgICAgICBAYXJnIFNESU9fUkVTUDE6IFJlc3BvbnNlIFJlZ2lzdGVyIDQgIAorICAqICAgICAgICAgICAgQGFyZyBTRElPX1JFU1AyOiBSZXNwb25zZSBSZWdpc3RlciAyCisgICogICAgICAgICAgICBAYXJnIFNESU9fUkVTUDM6IFJlc3BvbnNlIFJlZ2lzdGVyIDMKKyAgKiAgICAgICAgICAgIEBhcmcgU0RJT19SRVNQNDogUmVzcG9uc2UgUmVnaXN0ZXIgNCAgCiAgICogQHJldHZhbCBUaGUgQ29ycmVzcG9uZGluZyByZXNwb25zZSByZWdpc3RlciB2YWx1ZQogICAqLwogdWludDMyX3QgU0RJT19HZXRSZXNwb25zZShTRElPX1R5cGVEZWYgKlNESU94LCB1aW50MzJfdCBSZXNwb25zZSkKIHsKLSAgX19JTyB1aW50MzJfdCB0bXAgPSAwVTsKKyAgdWludDMyX3QgdG1wOwogCiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19TRElPX1JFU1AoUmVzcG9uc2UpKTsKICAgCiAgIC8qIEdldCB0aGUgcmVzcG9uc2UgKi8KLSAgdG1wID0gKHVpbnQzMl90KSYoU0RJT3gtPlJFU1AxKSArIFJlc3BvbnNlOworICB0bXAgPSAodWludDMyX3QpKCYoU0RJT3gtPlJFU1AxKSkgKyBSZXNwb25zZTsKICAgCiAgIHJldHVybiAoKihfX0lPIHVpbnQzMl90ICopIHRtcCk7CiB9ICAKQEAgLTQxNiwxNCArNDE2LDE0IEBACiAvKioKICAgKiBAYnJpZWYgIENvbmZpZ3VyZSB0aGUgU0RNTUMgZGF0YSBwYXRoIGFjY29yZGluZyB0byB0aGUgc3BlY2lmaWVkIAogICAqICAgICAgICAgcGFyYW1ldGVycyBpbiB0aGUgU0RJT19EYXRhSW5pdFR5cGVEZWYuCi0gICogQHBhcmFtICBTRElPeCBQb2ludGVyIHRvIFNETU1DIHJlZ2lzdGVyIGJhc2UgIAotICAqIEBwYXJhbSAgRGF0YSAgcG9pbnRlciB0byBhIFNESU9fRGF0YUluaXRUeXBlRGVmIHN0cnVjdHVyZSAKKyAgKiBAcGFyYW0gIFNESU94OiBQb2ludGVyIHRvIFNESU8gcmVnaXN0ZXIgYmFzZSAgCisgICogQHBhcmFtICBEYXRhIDogcG9pbnRlciB0byBhIFNESU9fRGF0YUluaXRUeXBlRGVmIHN0cnVjdHVyZSAKICAgKiAgICAgICAgIHRoYXQgY29udGFpbnMgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIHRoZSBTRE1NQyBkYXRhLgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgU0RJT19Db25maWdEYXRhKFNESU9fVHlwZURlZiAqU0RJT3gsIFNESU9fRGF0YUluaXRUeXBlRGVmKiBEYXRhKQogewotICB1aW50MzJfdCB0bXByZWcgPSAwVTsKKyAgdWludDMyX3QgdG1wcmVnID0gMDsKICAgCiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19TRElPX0RBVEFfTEVOR1RIKERhdGEtPkRhdGFMZW5ndGgpKTsKQEAgLTQ1Myw3ICs0NTMsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIFJldHVybnMgbnVtYmVyIG9mIHJlbWFpbmluZyBkYXRhIGJ5dGVzIHRvIGJlIHRyYW5zZmVycmVkLgotICAqIEBwYXJhbSAgU0RJT3ggUG9pbnRlciB0byBTRE1NQyByZWdpc3RlciBiYXNlCisgICogQHBhcmFtICBTRElPeDogUG9pbnRlciB0byBTRElPIHJlZ2lzdGVyIGJhc2UKICAgKiBAcmV0dmFsIE51bWJlciBvZiByZW1haW5pbmcgZGF0YSBieXRlcyB0byBiZSB0cmFuc2ZlcnJlZAogICAqLwogdWludDMyX3QgU0RJT19HZXREYXRhQ291bnRlcihTRElPX1R5cGVEZWYgKlNESU94KQpAQCAtNDYzLDcgKzQ2Myw3IEBACiAKIC8qKgogICAqIEBicmllZiAgR2V0IHRoZSBGSUZPIGRhdGEKLSAgKiBAcGFyYW0gIFNESU94IFBvaW50ZXIgdG8gU0RNTUMgcmVnaXN0ZXIgYmFzZSAKKyAgKiBAcGFyYW0gIFNESU94OiBQb2ludGVyIHRvIFNESU8gcmVnaXN0ZXIgYmFzZSAKICAgKiBAcmV0dmFsIERhdGEgcmVjZWl2ZWQKICAgKi8KIHVpbnQzMl90IFNESU9fR2V0RklGT0NvdW50KFNESU9fVHlwZURlZiAqU0RJT3gpCkBAIC00NzMsOCArNDczLDggQEAKIAogLyoqCiAgICogQGJyaWVmICBTZXRzIG9uZSBvZiB0aGUgdHdvIG9wdGlvbnMgb2YgaW5zZXJ0aW5nIHJlYWQgd2FpdCBpbnRlcnZhbC4KLSAgKiBAcGFyYW0gIFNESU94IFBvaW50ZXIgdG8gU0RNTUMgcmVnaXN0ZXIgYmFzZSAgIAotICAqIEBwYXJhbSAgU0RJT19SZWFkV2FpdE1vZGUgU0RNTUMgUmVhZCBXYWl0IG9wZXJhdGlvbiBtb2RlLgorICAqIEBwYXJhbSAgU0RJT3g6IFBvaW50ZXIgdG8gU0RJTyByZWdpc3RlciBiYXNlICAgCisgICogQHBhcmFtICBTRElPX1JlYWRXYWl0TW9kZTogU0RNTUMgUmVhZCBXYWl0IG9wZXJhdGlvbiBtb2RlLgogICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZToKICAgKiAgICAgICAgICAgIEBhcmcgU0RJT19SRUFEX1dBSVRfTU9ERV9DTEs6IFJlYWQgV2FpdCBjb250cm9sIGJ5IHN0b3BwaW5nIFNETU1DQ0xLCiAgICogICAgICAgICAgICBAYXJnIFNESU9fUkVBRF9XQUlUX01PREVfREFUQTI6IFJlYWQgV2FpdCBjb250cm9sIHVzaW5nIFNETU1DX0RBVEEyCkBAIC01MTIsMTMgKzUxMiwxMyBAQAogCiAvKioKICAgKiBAYnJpZWYgIFNlbmQgdGhlIERhdGEgQmxvY2sgTGVuZ2h0IGNvbW1hbmQgYW5kIGNoZWNrIHRoZSByZXNwb25zZQotICAqIEBwYXJhbSAgU0RJT3ggUG9pbnRlciB0byBTRE1NQyByZWdpc3RlciBiYXNlIAorICAqIEBwYXJhbSAgU0RJT3g6IFBvaW50ZXIgdG8gU0RJTyByZWdpc3RlciBiYXNlIAogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwogdWludDMyX3QgU0RNTUNfQ21kQmxvY2tMZW5ndGgoU0RJT19UeXBlRGVmICpTRElPeCwgdWludDMyX3QgQmxvY2tTaXplKQogewogICBTRElPX0NtZEluaXRUeXBlRGVmICBzZG1tY19jbWRpbml0OwotICB1aW50MzJfdCBlcnJvcnN0YXRlID0gU0RNTUNfRVJST1JfTk9ORTsKKyAgdWludDMyX3QgZXJyb3JzdGF0ZTsKICAgCiAgIC8qIFNldCBCbG9jayBTaXplIGZvciBDYXJkICovIAogICBzZG1tY19jbWRpbml0LkFyZ3VtZW50ICAgICAgICAgPSAodWludDMyX3QpQmxvY2tTaXplOwpAQCAtNTI2LDcgKzUyNiw3IEBACiAgIHNkbW1jX2NtZGluaXQuUmVzcG9uc2UgICAgICAgICA9IFNESU9fUkVTUE9OU0VfU0hPUlQ7CiAgIHNkbW1jX2NtZGluaXQuV2FpdEZvckludGVycnVwdCA9IFNESU9fV0FJVF9OTzsKICAgc2RtbWNfY21kaW5pdC5DUFNNICAgICAgICAgICAgID0gU0RJT19DUFNNX0VOQUJMRTsKLSAgU0RJT19TZW5kQ29tbWFuZChTRElPeCwgJnNkbW1jX2NtZGluaXQpOworICAodm9pZClTRElPX1NlbmRDb21tYW5kKFNESU94LCAmc2RtbWNfY21kaW5pdCk7CiAgIAogICAvKiBDaGVjayBmb3IgZXJyb3IgY29uZGl0aW9ucyAqLwogICBlcnJvcnN0YXRlID0gU0RNTUNfR2V0Q21kUmVzcDEoU0RJT3gsIFNETU1DX0NNRF9TRVRfQkxPQ0tMRU4sIFNESU9fQ01EVElNRU9VVCk7CkBAIC01MzYsMTMgKzUzNiwxMyBAQAogCiAvKioKICAgKiBAYnJpZWYgIFNlbmQgdGhlIFJlYWQgU2luZ2xlIEJsb2NrIGNvbW1hbmQgYW5kIGNoZWNrIHRoZSByZXNwb25zZQotICAqIEBwYXJhbSAgU0RJT3ggUG9pbnRlciB0byBTRE1NQyByZWdpc3RlciBiYXNlIAorICAqIEBwYXJhbSAgU0RJT3g6IFBvaW50ZXIgdG8gU0RJTyByZWdpc3RlciBiYXNlIAogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwogdWludDMyX3QgU0RNTUNfQ21kUmVhZFNpbmdsZUJsb2NrKFNESU9fVHlwZURlZiAqU0RJT3gsIHVpbnQzMl90IFJlYWRBZGQpCiB7CiAgIFNESU9fQ21kSW5pdFR5cGVEZWYgIHNkbW1jX2NtZGluaXQ7Ci0gIHVpbnQzMl90IGVycm9yc3RhdGUgPSBTRE1NQ19FUlJPUl9OT05FOworICB1aW50MzJfdCBlcnJvcnN0YXRlOwogICAKICAgLyogU2V0IEJsb2NrIFNpemUgZm9yIENhcmQgKi8gCiAgIHNkbW1jX2NtZGluaXQuQXJndW1lbnQgICAgICAgICA9ICh1aW50MzJfdClSZWFkQWRkOwpAQCAtNTUwLDcgKzU1MCw3IEBACiAgIHNkbW1jX2NtZGluaXQuUmVzcG9uc2UgICAgICAgICA9IFNESU9fUkVTUE9OU0VfU0hPUlQ7CiAgIHNkbW1jX2NtZGluaXQuV2FpdEZvckludGVycnVwdCA9IFNESU9fV0FJVF9OTzsKICAgc2RtbWNfY21kaW5pdC5DUFNNICAgICAgICAgICAgID0gU0RJT19DUFNNX0VOQUJMRTsKLSAgU0RJT19TZW5kQ29tbWFuZChTRElPeCwgJnNkbW1jX2NtZGluaXQpOworICAodm9pZClTRElPX1NlbmRDb21tYW5kKFNESU94LCAmc2RtbWNfY21kaW5pdCk7CiAgIAogICAvKiBDaGVjayBmb3IgZXJyb3IgY29uZGl0aW9ucyAqLwogICBlcnJvcnN0YXRlID0gU0RNTUNfR2V0Q21kUmVzcDEoU0RJT3gsIFNETU1DX0NNRF9SRUFEX1NJTkdMRV9CTE9DSywgU0RJT19DTURUSU1FT1VUKTsKQEAgLTU2MCwxMyArNTYwLDEzIEBACiAKIC8qKgogICAqIEBicmllZiAgU2VuZCB0aGUgUmVhZCBNdWx0aSBCbG9jayBjb21tYW5kIGFuZCBjaGVjayB0aGUgcmVzcG9uc2UKLSAgKiBAcGFyYW0gIFNESU94IFBvaW50ZXIgdG8gU0RJTyByZWdpc3RlciBiYXNlIAorICAqIEBwYXJhbSAgU0RJT3g6IFBvaW50ZXIgdG8gU0RJTyByZWdpc3RlciBiYXNlIAogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwogdWludDMyX3QgU0RNTUNfQ21kUmVhZE11bHRpQmxvY2soU0RJT19UeXBlRGVmICpTRElPeCwgdWludDMyX3QgUmVhZEFkZCkKIHsKICAgU0RJT19DbWRJbml0VHlwZURlZiAgc2RtbWNfY21kaW5pdDsKLSAgdWludDMyX3QgZXJyb3JzdGF0ZSA9IFNETU1DX0VSUk9SX05PTkU7CisgIHVpbnQzMl90IGVycm9yc3RhdGU7CiAgIAogICAvKiBTZXQgQmxvY2sgU2l6ZSBmb3IgQ2FyZCAqLyAKICAgc2RtbWNfY21kaW5pdC5Bcmd1bWVudCAgICAgICAgID0gKHVpbnQzMl90KVJlYWRBZGQ7CkBAIC01NzQsNyArNTc0LDcgQEAKICAgc2RtbWNfY21kaW5pdC5SZXNwb25zZSAgICAgICAgID0gU0RJT19SRVNQT05TRV9TSE9SVDsKICAgc2RtbWNfY21kaW5pdC5XYWl0Rm9ySW50ZXJydXB0ID0gU0RJT19XQUlUX05POwogICBzZG1tY19jbWRpbml0LkNQU00gICAgICAgICAgICAgPSBTRElPX0NQU01fRU5BQkxFOwotICBTRElPX1NlbmRDb21tYW5kKFNESU94LCAmc2RtbWNfY21kaW5pdCk7CisgICh2b2lkKVNESU9fU2VuZENvbW1hbmQoU0RJT3gsICZzZG1tY19jbWRpbml0KTsKICAgCiAgIC8qIENoZWNrIGZvciBlcnJvciBjb25kaXRpb25zICovCiAgIGVycm9yc3RhdGUgPSBTRE1NQ19HZXRDbWRSZXNwMShTRElPeCwgU0RNTUNfQ01EX1JFQURfTVVMVF9CTE9DSywgU0RJT19DTURUSU1FT1VUKTsKQEAgLTU4NCwxMyArNTg0LDEzIEBACiAKIC8qKgogICAqIEBicmllZiAgU2VuZCB0aGUgV3JpdGUgU2luZ2xlIEJsb2NrIGNvbW1hbmQgYW5kIGNoZWNrIHRoZSByZXNwb25zZQotICAqIEBwYXJhbSAgU0RJT3ggUG9pbnRlciB0byBTRElPIHJlZ2lzdGVyIGJhc2UgCisgICogQHBhcmFtICBTRElPeDogUG9pbnRlciB0byBTRElPIHJlZ2lzdGVyIGJhc2UgCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCiB1aW50MzJfdCBTRE1NQ19DbWRXcml0ZVNpbmdsZUJsb2NrKFNESU9fVHlwZURlZiAqU0RJT3gsIHVpbnQzMl90IFdyaXRlQWRkKQogewogICBTRElPX0NtZEluaXRUeXBlRGVmICBzZG1tY19jbWRpbml0OwotICB1aW50MzJfdCBlcnJvcnN0YXRlID0gU0RNTUNfRVJST1JfTk9ORTsKKyAgdWludDMyX3QgZXJyb3JzdGF0ZTsKICAgCiAgIC8qIFNldCBCbG9jayBTaXplIGZvciBDYXJkICovIAogICBzZG1tY19jbWRpbml0LkFyZ3VtZW50ICAgICAgICAgPSAodWludDMyX3QpV3JpdGVBZGQ7CkBAIC01OTgsNyArNTk4LDcgQEAKICAgc2RtbWNfY21kaW5pdC5SZXNwb25zZSAgICAgICAgID0gU0RJT19SRVNQT05TRV9TSE9SVDsKICAgc2RtbWNfY21kaW5pdC5XYWl0Rm9ySW50ZXJydXB0ID0gU0RJT19XQUlUX05POwogICBzZG1tY19jbWRpbml0LkNQU00gICAgICAgICAgICAgPSBTRElPX0NQU01fRU5BQkxFOwotICBTRElPX1NlbmRDb21tYW5kKFNESU94LCAmc2RtbWNfY21kaW5pdCk7CisgICh2b2lkKVNESU9fU2VuZENvbW1hbmQoU0RJT3gsICZzZG1tY19jbWRpbml0KTsKICAgCiAgIC8qIENoZWNrIGZvciBlcnJvciBjb25kaXRpb25zICovCiAgIGVycm9yc3RhdGUgPSBTRE1NQ19HZXRDbWRSZXNwMShTRElPeCwgU0RNTUNfQ01EX1dSSVRFX1NJTkdMRV9CTE9DSywgU0RJT19DTURUSU1FT1VUKTsKQEAgLTYwOCwxMyArNjA4LDEzIEBACiAKIC8qKgogICAqIEBicmllZiAgU2VuZCB0aGUgV3JpdGUgTXVsdGkgQmxvY2sgY29tbWFuZCBhbmQgY2hlY2sgdGhlIHJlc3BvbnNlCi0gICogQHBhcmFtICBTRElPeCBQb2ludGVyIHRvIFNESU8gcmVnaXN0ZXIgYmFzZSAKKyAgKiBAcGFyYW0gIFNESU94OiBQb2ludGVyIHRvIFNESU8gcmVnaXN0ZXIgYmFzZSAKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KIHVpbnQzMl90IFNETU1DX0NtZFdyaXRlTXVsdGlCbG9jayhTRElPX1R5cGVEZWYgKlNESU94LCB1aW50MzJfdCBXcml0ZUFkZCkKIHsKICAgU0RJT19DbWRJbml0VHlwZURlZiAgc2RtbWNfY21kaW5pdDsKLSAgdWludDMyX3QgZXJyb3JzdGF0ZSA9IFNETU1DX0VSUk9SX05PTkU7CisgIHVpbnQzMl90IGVycm9yc3RhdGU7CiAgIAogICAvKiBTZXQgQmxvY2sgU2l6ZSBmb3IgQ2FyZCAqLyAKICAgc2RtbWNfY21kaW5pdC5Bcmd1bWVudCAgICAgICAgID0gKHVpbnQzMl90KVdyaXRlQWRkOwpAQCAtNjIyLDcgKzYyMiw3IEBACiAgIHNkbW1jX2NtZGluaXQuUmVzcG9uc2UgICAgICAgICA9IFNESU9fUkVTUE9OU0VfU0hPUlQ7CiAgIHNkbW1jX2NtZGluaXQuV2FpdEZvckludGVycnVwdCA9IFNESU9fV0FJVF9OTzsKICAgc2RtbWNfY21kaW5pdC5DUFNNICAgICAgICAgICAgID0gU0RJT19DUFNNX0VOQUJMRTsKLSAgU0RJT19TZW5kQ29tbWFuZChTRElPeCwgJnNkbW1jX2NtZGluaXQpOworICAodm9pZClTRElPX1NlbmRDb21tYW5kKFNESU94LCAmc2RtbWNfY21kaW5pdCk7CiAgIAogICAvKiBDaGVjayBmb3IgZXJyb3IgY29uZGl0aW9ucyAqLwogICBlcnJvcnN0YXRlID0gU0RNTUNfR2V0Q21kUmVzcDEoU0RJT3gsIFNETU1DX0NNRF9XUklURV9NVUxUX0JMT0NLLCBTRElPX0NNRFRJTUVPVVQpOwpAQCAtNjMyLDEzICs2MzIsMTMgQEAKIAogLyoqCiAgICogQGJyaWVmICBTZW5kIHRoZSBTdGFydCBBZGRyZXNzIEVyYXNlIGNvbW1hbmQgZm9yIFNEIGFuZCBjaGVjayB0aGUgcmVzcG9uc2UKLSAgKiBAcGFyYW0gIFNESU94IFBvaW50ZXIgdG8gU0RJTyByZWdpc3RlciBiYXNlIAorICAqIEBwYXJhbSAgU0RJT3g6IFBvaW50ZXIgdG8gU0RJTyByZWdpc3RlciBiYXNlIAogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwogdWludDMyX3QgU0RNTUNfQ21kU0RFcmFzZVN0YXJ0QWRkKFNESU9fVHlwZURlZiAqU0RJT3gsIHVpbnQzMl90IFN0YXJ0QWRkKQogewogICBTRElPX0NtZEluaXRUeXBlRGVmICBzZG1tY19jbWRpbml0OwotICB1aW50MzJfdCBlcnJvcnN0YXRlID0gU0RNTUNfRVJST1JfTk9ORTsKKyAgdWludDMyX3QgZXJyb3JzdGF0ZTsKICAgCiAgIC8qIFNldCBCbG9jayBTaXplIGZvciBDYXJkICovIAogICBzZG1tY19jbWRpbml0LkFyZ3VtZW50ICAgICAgICAgPSAodWludDMyX3QpU3RhcnRBZGQ7CkBAIC02NDYsNyArNjQ2LDcgQEAKICAgc2RtbWNfY21kaW5pdC5SZXNwb25zZSAgICAgICAgID0gU0RJT19SRVNQT05TRV9TSE9SVDsKICAgc2RtbWNfY21kaW5pdC5XYWl0Rm9ySW50ZXJydXB0ID0gU0RJT19XQUlUX05POwogICBzZG1tY19jbWRpbml0LkNQU00gICAgICAgICAgICAgPSBTRElPX0NQU01fRU5BQkxFOwotICBTRElPX1NlbmRDb21tYW5kKFNESU94LCAmc2RtbWNfY21kaW5pdCk7CisgICh2b2lkKVNESU9fU2VuZENvbW1hbmQoU0RJT3gsICZzZG1tY19jbWRpbml0KTsKICAgCiAgIC8qIENoZWNrIGZvciBlcnJvciBjb25kaXRpb25zICovCiAgIGVycm9yc3RhdGUgPSBTRE1NQ19HZXRDbWRSZXNwMShTRElPeCwgU0RNTUNfQ01EX1NEX0VSQVNFX0dSUF9TVEFSVCwgU0RJT19DTURUSU1FT1VUKTsKQEAgLTY1NiwxMyArNjU2LDEzIEBACiAKIC8qKgogICAqIEBicmllZiAgU2VuZCB0aGUgRW5kIEFkZHJlc3MgRXJhc2UgY29tbWFuZCBmb3IgU0QgYW5kIGNoZWNrIHRoZSByZXNwb25zZQotICAqIEBwYXJhbSAgU0RJT3ggUG9pbnRlciB0byBTRElPIHJlZ2lzdGVyIGJhc2UgCisgICogQHBhcmFtICBTRElPeDogUG9pbnRlciB0byBTRElPIHJlZ2lzdGVyIGJhc2UgCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCiB1aW50MzJfdCBTRE1NQ19DbWRTREVyYXNlRW5kQWRkKFNESU9fVHlwZURlZiAqU0RJT3gsIHVpbnQzMl90IEVuZEFkZCkKIHsKICAgU0RJT19DbWRJbml0VHlwZURlZiAgc2RtbWNfY21kaW5pdDsKLSAgdWludDMyX3QgZXJyb3JzdGF0ZSA9IFNETU1DX0VSUk9SX05PTkU7CisgIHVpbnQzMl90IGVycm9yc3RhdGU7CiAgIAogICAvKiBTZXQgQmxvY2sgU2l6ZSBmb3IgQ2FyZCAqLyAKICAgc2RtbWNfY21kaW5pdC5Bcmd1bWVudCAgICAgICAgID0gKHVpbnQzMl90KUVuZEFkZDsKQEAgLTY3MCw3ICs2NzAsNyBAQAogICBzZG1tY19jbWRpbml0LlJlc3BvbnNlICAgICAgICAgPSBTRElPX1JFU1BPTlNFX1NIT1JUOwogICBzZG1tY19jbWRpbml0LldhaXRGb3JJbnRlcnJ1cHQgPSBTRElPX1dBSVRfTk87CiAgIHNkbW1jX2NtZGluaXQuQ1BTTSAgICAgICAgICAgICA9IFNESU9fQ1BTTV9FTkFCTEU7Ci0gIFNESU9fU2VuZENvbW1hbmQoU0RJT3gsICZzZG1tY19jbWRpbml0KTsKKyAgKHZvaWQpU0RJT19TZW5kQ29tbWFuZChTRElPeCwgJnNkbW1jX2NtZGluaXQpOwogICAKICAgLyogQ2hlY2sgZm9yIGVycm9yIGNvbmRpdGlvbnMgKi8KICAgZXJyb3JzdGF0ZSA9IFNETU1DX0dldENtZFJlc3AxKFNESU94LCBTRE1NQ19DTURfU0RfRVJBU0VfR1JQX0VORCwgU0RJT19DTURUSU1FT1VUKTsKQEAgLTY4MCwxMyArNjgwLDEzIEBACiAKIC8qKgogICAqIEBicmllZiAgU2VuZCB0aGUgU3RhcnQgQWRkcmVzcyBFcmFzZSBjb21tYW5kIGFuZCBjaGVjayB0aGUgcmVzcG9uc2UKLSAgKiBAcGFyYW0gIFNESU94IFBvaW50ZXIgdG8gU0RJTyByZWdpc3RlciBiYXNlIAorICAqIEBwYXJhbSAgU0RJT3g6IFBvaW50ZXIgdG8gU0RJTyByZWdpc3RlciBiYXNlIAogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwogdWludDMyX3QgU0RNTUNfQ21kRXJhc2VTdGFydEFkZChTRElPX1R5cGVEZWYgKlNESU94LCB1aW50MzJfdCBTdGFydEFkZCkKIHsKICAgU0RJT19DbWRJbml0VHlwZURlZiAgc2RtbWNfY21kaW5pdDsKLSAgdWludDMyX3QgZXJyb3JzdGF0ZSA9IFNETU1DX0VSUk9SX05PTkU7CisgIHVpbnQzMl90IGVycm9yc3RhdGU7CiAgIAogICAvKiBTZXQgQmxvY2sgU2l6ZSBmb3IgQ2FyZCAqLyAKICAgc2RtbWNfY21kaW5pdC5Bcmd1bWVudCAgICAgICAgID0gKHVpbnQzMl90KVN0YXJ0QWRkOwpAQCAtNjk0LDcgKzY5NCw3IEBACiAgIHNkbW1jX2NtZGluaXQuUmVzcG9uc2UgICAgICAgICA9IFNESU9fUkVTUE9OU0VfU0hPUlQ7CiAgIHNkbW1jX2NtZGluaXQuV2FpdEZvckludGVycnVwdCA9IFNESU9fV0FJVF9OTzsKICAgc2RtbWNfY21kaW5pdC5DUFNNICAgICAgICAgICAgID0gU0RJT19DUFNNX0VOQUJMRTsKLSAgU0RJT19TZW5kQ29tbWFuZChTRElPeCwgJnNkbW1jX2NtZGluaXQpOworICAodm9pZClTRElPX1NlbmRDb21tYW5kKFNESU94LCAmc2RtbWNfY21kaW5pdCk7CiAgIAogICAvKiBDaGVjayBmb3IgZXJyb3IgY29uZGl0aW9ucyAqLwogICBlcnJvcnN0YXRlID0gU0RNTUNfR2V0Q21kUmVzcDEoU0RJT3gsIFNETU1DX0NNRF9FUkFTRV9HUlBfU1RBUlQsIFNESU9fQ01EVElNRU9VVCk7CkBAIC03MDQsMTMgKzcwNCwxMyBAQAogCiAvKioKICAgKiBAYnJpZWYgIFNlbmQgdGhlIEVuZCBBZGRyZXNzIEVyYXNlIGNvbW1hbmQgYW5kIGNoZWNrIHRoZSByZXNwb25zZQotICAqIEBwYXJhbSAgU0RJT3ggUG9pbnRlciB0byBTRElPIHJlZ2lzdGVyIGJhc2UgCisgICogQHBhcmFtICBTRElPeDogUG9pbnRlciB0byBTRElPIHJlZ2lzdGVyIGJhc2UgCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCiB1aW50MzJfdCBTRE1NQ19DbWRFcmFzZUVuZEFkZChTRElPX1R5cGVEZWYgKlNESU94LCB1aW50MzJfdCBFbmRBZGQpCiB7CiAgIFNESU9fQ21kSW5pdFR5cGVEZWYgIHNkbW1jX2NtZGluaXQ7Ci0gIHVpbnQzMl90IGVycm9yc3RhdGUgPSBTRE1NQ19FUlJPUl9OT05FOworICB1aW50MzJfdCBlcnJvcnN0YXRlOwogICAKICAgLyogU2V0IEJsb2NrIFNpemUgZm9yIENhcmQgKi8gCiAgIHNkbW1jX2NtZGluaXQuQXJndW1lbnQgICAgICAgICA9ICh1aW50MzJfdClFbmRBZGQ7CkBAIC03MTgsNyArNzE4LDcgQEAKICAgc2RtbWNfY21kaW5pdC5SZXNwb25zZSAgICAgICAgID0gU0RJT19SRVNQT05TRV9TSE9SVDsKICAgc2RtbWNfY21kaW5pdC5XYWl0Rm9ySW50ZXJydXB0ID0gU0RJT19XQUlUX05POwogICBzZG1tY19jbWRpbml0LkNQU00gICAgICAgICAgICAgPSBTRElPX0NQU01fRU5BQkxFOwotICBTRElPX1NlbmRDb21tYW5kKFNESU94LCAmc2RtbWNfY21kaW5pdCk7CisgICh2b2lkKVNESU9fU2VuZENvbW1hbmQoU0RJT3gsICZzZG1tY19jbWRpbml0KTsKICAgCiAgIC8qIENoZWNrIGZvciBlcnJvciBjb25kaXRpb25zICovCiAgIGVycm9yc3RhdGUgPSBTRE1NQ19HZXRDbWRSZXNwMShTRElPeCwgU0RNTUNfQ01EX0VSQVNFX0dSUF9FTkQsIFNESU9fQ01EVElNRU9VVCk7CkBAIC03MjgsMTMgKzcyOCwxMyBAQAogCiAvKioKICAgKiBAYnJpZWYgIFNlbmQgdGhlIEVyYXNlIGNvbW1hbmQgYW5kIGNoZWNrIHRoZSByZXNwb25zZQotICAqIEBwYXJhbSAgU0RJT3ggUG9pbnRlciB0byBTRElPIHJlZ2lzdGVyIGJhc2UgCisgICogQHBhcmFtICBTRElPeDogUG9pbnRlciB0byBTRElPIHJlZ2lzdGVyIGJhc2UgCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCiB1aW50MzJfdCBTRE1NQ19DbWRFcmFzZShTRElPX1R5cGVEZWYgKlNESU94KQogewogICBTRElPX0NtZEluaXRUeXBlRGVmICBzZG1tY19jbWRpbml0OwotICB1aW50MzJfdCBlcnJvcnN0YXRlID0gU0RNTUNfRVJST1JfTk9ORTsKKyAgdWludDMyX3QgZXJyb3JzdGF0ZTsKICAgCiAgIC8qIFNldCBCbG9jayBTaXplIGZvciBDYXJkICovIAogICBzZG1tY19jbWRpbml0LkFyZ3VtZW50ICAgICAgICAgPSAwVTsKQEAgLTc0Miw3ICs3NDIsNyBAQAogICBzZG1tY19jbWRpbml0LlJlc3BvbnNlICAgICAgICAgPSBTRElPX1JFU1BPTlNFX1NIT1JUOwogICBzZG1tY19jbWRpbml0LldhaXRGb3JJbnRlcnJ1cHQgPSBTRElPX1dBSVRfTk87CiAgIHNkbW1jX2NtZGluaXQuQ1BTTSAgICAgICAgICAgICA9IFNESU9fQ1BTTV9FTkFCTEU7Ci0gIFNESU9fU2VuZENvbW1hbmQoU0RJT3gsICZzZG1tY19jbWRpbml0KTsKKyAgKHZvaWQpU0RJT19TZW5kQ29tbWFuZChTRElPeCwgJnNkbW1jX2NtZGluaXQpOwogICAKICAgLyogQ2hlY2sgZm9yIGVycm9yIGNvbmRpdGlvbnMgKi8KICAgZXJyb3JzdGF0ZSA9IFNETU1DX0dldENtZFJlc3AxKFNESU94LCBTRE1NQ19DTURfRVJBU0UsIFNESU9fTUFYRVJBU0VUSU1FT1VUKTsKQEAgLTc1MiwxMyArNzUyLDEzIEBACiAKIC8qKgogICAqIEBicmllZiAgU2VuZCB0aGUgU3RvcCBUcmFuc2ZlciBjb21tYW5kIGFuZCBjaGVjayB0aGUgcmVzcG9uc2UuCi0gICogQHBhcmFtICBTRElPeCBQb2ludGVyIHRvIFNESU8gcmVnaXN0ZXIgYmFzZSAKKyAgKiBAcGFyYW0gIFNESU94OiBQb2ludGVyIHRvIFNESU8gcmVnaXN0ZXIgYmFzZSAKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KIHVpbnQzMl90IFNETU1DX0NtZFN0b3BUcmFuc2ZlcihTRElPX1R5cGVEZWYgKlNESU94KQogewogICBTRElPX0NtZEluaXRUeXBlRGVmICBzZG1tY19jbWRpbml0OwotICB1aW50MzJfdCBlcnJvcnN0YXRlID0gU0RNTUNfRVJST1JfTk9ORTsKKyAgdWludDMyX3QgZXJyb3JzdGF0ZTsKICAgCiAgIC8qIFNlbmQgQ01EMTIgU1RPUF9UUkFOU01JU1NJT04gICovCiAgIHNkbW1jX2NtZGluaXQuQXJndW1lbnQgICAgICAgICA9IDBVOwpAQCAtNzY2LDI0ICs3NjYsMjQgQEAKICAgc2RtbWNfY21kaW5pdC5SZXNwb25zZSAgICAgICAgID0gU0RJT19SRVNQT05TRV9TSE9SVDsKICAgc2RtbWNfY21kaW5pdC5XYWl0Rm9ySW50ZXJydXB0ID0gU0RJT19XQUlUX05POwogICBzZG1tY19jbWRpbml0LkNQU00gICAgICAgICAgICAgPSBTRElPX0NQU01fRU5BQkxFOwotICBTRElPX1NlbmRDb21tYW5kKFNESU94LCAmc2RtbWNfY21kaW5pdCk7CisgICh2b2lkKVNESU9fU2VuZENvbW1hbmQoU0RJT3gsICZzZG1tY19jbWRpbml0KTsKICAgCiAgIC8qIENoZWNrIGZvciBlcnJvciBjb25kaXRpb25zICovCi0gIGVycm9yc3RhdGUgPSBTRE1NQ19HZXRDbWRSZXNwMShTRElPeCwgU0RNTUNfQ01EX1NUT1BfVFJBTlNNSVNTSU9OLCAxMDAwMDAwMDBVKTsKKyAgZXJyb3JzdGF0ZSA9IFNETU1DX0dldENtZFJlc3AxKFNESU94LCBTRE1NQ19DTURfU1RPUF9UUkFOU01JU1NJT04sIFNESU9fU1RPUFRSQU5TRkVSVElNRU9VVCk7CiAKICAgcmV0dXJuIGVycm9yc3RhdGU7CiB9CiAKIC8qKgogICAqIEBicmllZiAgU2VuZCB0aGUgU2VsZWN0IERlc2VsZWN0IGNvbW1hbmQgYW5kIGNoZWNrIHRoZSByZXNwb25zZS4KLSAgKiBAcGFyYW0gIFNESU94IFBvaW50ZXIgdG8gU0RJTyByZWdpc3RlciBiYXNlIAotICAqIEBwYXJhbSAgYWRkciBBZGRyZXNzIG9mIHRoZSBjYXJkIHRvIGJlIHNlbGVjdGVkICAKKyAgKiBAcGFyYW0gIFNESU94OiBQb2ludGVyIHRvIFNESU8gcmVnaXN0ZXIgYmFzZSAKKyAgKiBAcGFyYW0gIGFkZHI6IEFkZHJlc3Mgb2YgdGhlIGNhcmQgdG8gYmUgc2VsZWN0ZWQgIAogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwogdWludDMyX3QgU0RNTUNfQ21kU2VsRGVzZWwoU0RJT19UeXBlRGVmICpTRElPeCwgdWludDY0X3QgQWRkcikKIHsKICAgU0RJT19DbWRJbml0VHlwZURlZiAgc2RtbWNfY21kaW5pdDsKLSAgdWludDMyX3QgZXJyb3JzdGF0ZSA9IFNETU1DX0VSUk9SX05PTkU7CisgIHVpbnQzMl90IGVycm9yc3RhdGU7CiAgIAogICAvKiBTZW5kIENNRDcgU0RNTUNfU0VMX0RFU0VMX0NBUkQgKi8KICAgc2RtbWNfY21kaW5pdC5Bcmd1bWVudCAgICAgICAgID0gKHVpbnQzMl90KUFkZHI7CkBAIC03OTEsNyArNzkxLDcgQEAKICAgc2RtbWNfY21kaW5pdC5SZXNwb25zZSAgICAgICAgID0gU0RJT19SRVNQT05TRV9TSE9SVDsKICAgc2RtbWNfY21kaW5pdC5XYWl0Rm9ySW50ZXJydXB0ID0gU0RJT19XQUlUX05POwogICBzZG1tY19jbWRpbml0LkNQU00gICAgICAgICAgICAgPSBTRElPX0NQU01fRU5BQkxFOwotICBTRElPX1NlbmRDb21tYW5kKFNESU94LCAmc2RtbWNfY21kaW5pdCk7CisgICh2b2lkKVNESU9fU2VuZENvbW1hbmQoU0RJT3gsICZzZG1tY19jbWRpbml0KTsKICAgCiAgIC8qIENoZWNrIGZvciBlcnJvciBjb25kaXRpb25zICovCiAgIGVycm9yc3RhdGUgPSBTRE1NQ19HZXRDbWRSZXNwMShTRElPeCwgU0RNTUNfQ01EX1NFTF9ERVNFTF9DQVJELCBTRElPX0NNRFRJTUVPVVQpOwpAQCAtODAxLDIwICs4MDEsMjAgQEAKIAogLyoqCiAgICogQGJyaWVmICBTZW5kIHRoZSBHbyBJZGxlIFN0YXRlIGNvbW1hbmQgYW5kIGNoZWNrIHRoZSByZXNwb25zZS4KLSAgKiBAcGFyYW0gIFNESU94IFBvaW50ZXIgdG8gU0RJTyByZWdpc3RlciBiYXNlIAorICAqIEBwYXJhbSAgU0RJT3g6IFBvaW50ZXIgdG8gU0RJTyByZWdpc3RlciBiYXNlIAogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwogdWludDMyX3QgU0RNTUNfQ21kR29JZGxlU3RhdGUoU0RJT19UeXBlRGVmICpTRElPeCkKIHsKICAgU0RJT19DbWRJbml0VHlwZURlZiAgc2RtbWNfY21kaW5pdDsKLSAgdWludDMyX3QgZXJyb3JzdGF0ZSA9IFNETU1DX0VSUk9SX05PTkU7CisgIHVpbnQzMl90IGVycm9yc3RhdGU7CiAgIAogICBzZG1tY19jbWRpbml0LkFyZ3VtZW50ICAgICAgICAgPSAwVTsKICAgc2RtbWNfY21kaW5pdC5DbWRJbmRleCAgICAgICAgID0gU0RNTUNfQ01EX0dPX0lETEVfU1RBVEU7CiAgIHNkbW1jX2NtZGluaXQuUmVzcG9uc2UgICAgICAgICA9IFNESU9fUkVTUE9OU0VfTk87CiAgIHNkbW1jX2NtZGluaXQuV2FpdEZvckludGVycnVwdCA9IFNESU9fV0FJVF9OTzsKICAgc2RtbWNfY21kaW5pdC5DUFNNICAgICAgICAgICAgID0gU0RJT19DUFNNX0VOQUJMRTsKLSAgU0RJT19TZW5kQ29tbWFuZChTRElPeCwgJnNkbW1jX2NtZGluaXQpOworICAodm9pZClTRElPX1NlbmRDb21tYW5kKFNESU94LCAmc2RtbWNfY21kaW5pdCk7CiAgIAogICAvKiBDaGVjayBmb3IgZXJyb3IgY29uZGl0aW9ucyAqLwogICBlcnJvcnN0YXRlID0gU0RNTUNfR2V0Q21kRXJyb3IoU0RJT3gpOwpAQCAtODI0LDEzICs4MjQsMTMgQEAKIAogLyoqCiAgICogQGJyaWVmICBTZW5kIHRoZSBPcGVyYXRpbmcgQ29uZGl0aW9uIGNvbW1hbmQgYW5kIGNoZWNrIHRoZSByZXNwb25zZS4KLSAgKiBAcGFyYW0gIFNESU94IFBvaW50ZXIgdG8gU0RJTyByZWdpc3RlciBiYXNlIAorICAqIEBwYXJhbSAgU0RJT3g6IFBvaW50ZXIgdG8gU0RJTyByZWdpc3RlciBiYXNlIAogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwogdWludDMyX3QgU0RNTUNfQ21kT3BlckNvbmQoU0RJT19UeXBlRGVmICpTRElPeCkKIHsKICAgU0RJT19DbWRJbml0VHlwZURlZiAgc2RtbWNfY21kaW5pdDsKLSAgdWludDMyX3QgZXJyb3JzdGF0ZSA9IFNETU1DX0VSUk9SX05PTkU7CisgIHVpbnQzMl90IGVycm9yc3RhdGU7CiAgIAogICAvKiBTZW5kIENNRDggdG8gdmVyaWZ5IFNEIGNhcmQgaW50ZXJmYWNlIG9wZXJhdGluZyBjb25kaXRpb24gKi8KICAgLyogQXJndW1lbnQ6IC0gWzMxOjEyXTogUmVzZXJ2ZWQgKHNoYWxsIGJlIHNldCB0byAnMCcpCkBAIC04NDIsNyArODQyLDcgQEAKICAgc2RtbWNfY21kaW5pdC5SZXNwb25zZSAgICAgICAgID0gU0RJT19SRVNQT05TRV9TSE9SVDsKICAgc2RtbWNfY21kaW5pdC5XYWl0Rm9ySW50ZXJydXB0ID0gU0RJT19XQUlUX05POwogICBzZG1tY19jbWRpbml0LkNQU00gICAgICAgICAgICAgPSBTRElPX0NQU01fRU5BQkxFOwotICBTRElPX1NlbmRDb21tYW5kKFNESU94LCAmc2RtbWNfY21kaW5pdCk7CisgICh2b2lkKVNESU9fU2VuZENvbW1hbmQoU0RJT3gsICZzZG1tY19jbWRpbml0KTsKICAgCiAgIC8qIENoZWNrIGZvciBlcnJvciBjb25kaXRpb25zICovCiAgIGVycm9yc3RhdGUgPSBTRE1NQ19HZXRDbWRSZXNwNyhTRElPeCk7CkBAIC04NTQsMjAgKzg1NCwyMSBAQAogICAqIEBicmllZiAgU2VuZCB0aGUgQXBwbGljYXRpb24gY29tbWFuZCB0byB2ZXJpZnkgdGhhdCB0aGF0IHRoZSBuZXh0IGNvbW1hbmQgCiAgICogICAgICAgICBpcyBhbiBhcHBsaWNhdGlvbiBzcGVjaWZpYyBjb20tbWFuZCByYXRoZXIgdGhhbiBhIHN0YW5kYXJkIGNvbW1hbmQKICAgKiAgICAgICAgIGFuZCBjaGVjayB0aGUgcmVzcG9uc2UuCi0gICogQHBhcmFtICBTRElPeCBQb2ludGVyIHRvIFNESU8gcmVnaXN0ZXIgYmFzZSAKKyAgKiBAcGFyYW0gIFNESU94OiBQb2ludGVyIHRvIFNESU8gcmVnaXN0ZXIgYmFzZSAKKyAgKiBAcGFyYW0gIEFyZ3VtZW50OiBDb21tYW5kIEFyZ3VtZW50IAogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwogdWludDMyX3QgU0RNTUNfQ21kQXBwQ29tbWFuZChTRElPX1R5cGVEZWYgKlNESU94LCB1aW50MzJfdCBBcmd1bWVudCkKIHsKICAgU0RJT19DbWRJbml0VHlwZURlZiAgc2RtbWNfY21kaW5pdDsKLSAgdWludDMyX3QgZXJyb3JzdGF0ZSA9IFNETU1DX0VSUk9SX05PTkU7CisgIHVpbnQzMl90IGVycm9yc3RhdGU7CiAgIAogICBzZG1tY19jbWRpbml0LkFyZ3VtZW50ICAgICAgICAgPSAodWludDMyX3QpQXJndW1lbnQ7CiAgIHNkbW1jX2NtZGluaXQuQ21kSW5kZXggICAgICAgICA9IFNETU1DX0NNRF9BUFBfQ01EOwogICBzZG1tY19jbWRpbml0LlJlc3BvbnNlICAgICAgICAgPSBTRElPX1JFU1BPTlNFX1NIT1JUOwogICBzZG1tY19jbWRpbml0LldhaXRGb3JJbnRlcnJ1cHQgPSBTRElPX1dBSVRfTk87CiAgIHNkbW1jX2NtZGluaXQuQ1BTTSAgICAgICAgICAgICA9IFNESU9fQ1BTTV9FTkFCTEU7Ci0gIFNESU9fU2VuZENvbW1hbmQoU0RJT3gsICZzZG1tY19jbWRpbml0KTsKKyAgKHZvaWQpU0RJT19TZW5kQ29tbWFuZChTRElPeCwgJnNkbW1jX2NtZGluaXQpOwogICAKICAgLyogQ2hlY2sgZm9yIGVycm9yIGNvbmRpdGlvbnMgKi8KICAgLyogSWYgdGhlcmUgaXMgYSBIQUxfRVJST1IsIGl0IGlzIGEgTU1DIGNhcmQsIGVsc2UKQEAgLTg4MSwyMCArODgyLDIxIEBACiAvKioKICAgKiBAYnJpZWYgIFNlbmQgdGhlIGNvbW1hbmQgYXNraW5nIHRoZSBhY2Nlc3NlZCBjYXJkIHRvIHNlbmQgaXRzIG9wZXJhdGluZyAKICAgKiAgICAgICAgIGNvbmRpdGlvbiByZWdpc3RlciAoT0NSKQotICAqIEBwYXJhbSAgU0RJT3ggUG9pbnRlciB0byBTRElPIHJlZ2lzdGVyIGJhc2UgCisgICogQHBhcmFtICBTRElPeDogUG9pbnRlciB0byBTRElPIHJlZ2lzdGVyIGJhc2UgCisgICogQHBhcmFtICBBcmd1bWVudDogQ29tbWFuZCBBcmd1bWVudAogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwotdWludDMyX3QgU0RNTUNfQ21kQXBwT3BlckNvbW1hbmQoU0RJT19UeXBlRGVmICpTRElPeCwgdWludDMyX3QgU2RUeXBlKQordWludDMyX3QgU0RNTUNfQ21kQXBwT3BlckNvbW1hbmQoU0RJT19UeXBlRGVmICpTRElPeCwgdWludDMyX3QgQXJndW1lbnQpCiB7CiAgIFNESU9fQ21kSW5pdFR5cGVEZWYgIHNkbW1jX2NtZGluaXQ7Ci0gIHVpbnQzMl90IGVycm9yc3RhdGUgPSBTRE1NQ19FUlJPUl9OT05FOworICB1aW50MzJfdCBlcnJvcnN0YXRlOwogICAKLSAgc2RtbWNfY21kaW5pdC5Bcmd1bWVudCAgICAgICAgID0gU0RNTUNfVk9MVEFHRV9XSU5ET1dfU0QgfCBTZFR5cGU7CisgIHNkbW1jX2NtZGluaXQuQXJndW1lbnQgICAgICAgICA9IFNETU1DX1ZPTFRBR0VfV0lORE9XX1NEIHwgQXJndW1lbnQ7CiAgIHNkbW1jX2NtZGluaXQuQ21kSW5kZXggICAgICAgICA9IFNETU1DX0NNRF9TRF9BUFBfT1BfQ09ORDsKICAgc2RtbWNfY21kaW5pdC5SZXNwb25zZSAgICAgICAgID0gU0RJT19SRVNQT05TRV9TSE9SVDsKICAgc2RtbWNfY21kaW5pdC5XYWl0Rm9ySW50ZXJydXB0ID0gU0RJT19XQUlUX05POwogICBzZG1tY19jbWRpbml0LkNQU00gICAgICAgICAgICAgPSBTRElPX0NQU01fRU5BQkxFOwotICBTRElPX1NlbmRDb21tYW5kKFNESU94LCAmc2RtbWNfY21kaW5pdCk7CisgICh2b2lkKVNESU9fU2VuZENvbW1hbmQoU0RJT3gsICZzZG1tY19jbWRpbml0KTsKICAgCiAgIC8qIENoZWNrIGZvciBlcnJvciBjb25kaXRpb25zICovCiAgIGVycm9yc3RhdGUgPSBTRE1NQ19HZXRDbWRSZXNwMyhTRElPeCk7CkBAIC05MDQsMjAgKzkwNiwyMSBAQAogCiAvKioKICAgKiBAYnJpZWYgIFNlbmQgdGhlIEJ1cyBXaWR0aCBjb21tYW5kIGFuZCBjaGVjayB0aGUgcmVzcG9uc2UuCi0gICogQHBhcmFtICBTRElPeCBQb2ludGVyIHRvIFNESU8gcmVnaXN0ZXIgYmFzZSAKKyAgKiBAcGFyYW0gIFNESU94OiBQb2ludGVyIHRvIFNESU8gcmVnaXN0ZXIgYmFzZSAKKyAgKiBAcGFyYW0gIEJ1c1dpZHRoOiBCdXNXaWR0aAogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwogdWludDMyX3QgU0RNTUNfQ21kQnVzV2lkdGgoU0RJT19UeXBlRGVmICpTRElPeCwgdWludDMyX3QgQnVzV2lkdGgpCiB7CiAgIFNESU9fQ21kSW5pdFR5cGVEZWYgIHNkbW1jX2NtZGluaXQ7Ci0gIHVpbnQzMl90IGVycm9yc3RhdGUgPSBTRE1NQ19FUlJPUl9OT05FOworICB1aW50MzJfdCBlcnJvcnN0YXRlOwogICAKICAgc2RtbWNfY21kaW5pdC5Bcmd1bWVudCAgICAgICAgID0gKHVpbnQzMl90KUJ1c1dpZHRoOwogICBzZG1tY19jbWRpbml0LkNtZEluZGV4ICAgICAgICAgPSBTRE1NQ19DTURfQVBQX1NEX1NFVF9CVVNXSURUSDsKICAgc2RtbWNfY21kaW5pdC5SZXNwb25zZSAgICAgICAgID0gU0RJT19SRVNQT05TRV9TSE9SVDsKICAgc2RtbWNfY21kaW5pdC5XYWl0Rm9ySW50ZXJydXB0ID0gU0RJT19XQUlUX05POwogICBzZG1tY19jbWRpbml0LkNQU00gICAgICAgICAgICAgPSBTRElPX0NQU01fRU5BQkxFOwotICBTRElPX1NlbmRDb21tYW5kKFNESU94LCAmc2RtbWNfY21kaW5pdCk7CisgICh2b2lkKVNESU9fU2VuZENvbW1hbmQoU0RJT3gsICZzZG1tY19jbWRpbml0KTsKICAgCiAgIC8qIENoZWNrIGZvciBlcnJvciBjb25kaXRpb25zICovCiAgIGVycm9yc3RhdGUgPSBTRE1NQ19HZXRDbWRSZXNwMShTRElPeCwgU0RNTUNfQ01EX0FQUF9TRF9TRVRfQlVTV0lEVEgsIFNESU9fQ01EVElNRU9VVCk7CkBAIC05MjcsMTMgKzkzMCwxMyBAQAogCiAvKioKICAgKiBAYnJpZWYgIFNlbmQgdGhlIFNlbmQgU0NSIGNvbW1hbmQgYW5kIGNoZWNrIHRoZSByZXNwb25zZS4KLSAgKiBAcGFyYW0gIFNESU94IFBvaW50ZXIgdG8gU0RNTUMgcmVnaXN0ZXIgYmFzZSAKKyAgKiBAcGFyYW0gIFNESU94OiBQb2ludGVyIHRvIFNESU8gcmVnaXN0ZXIgYmFzZSAKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KIHVpbnQzMl90IFNETU1DX0NtZFNlbmRTQ1IoU0RJT19UeXBlRGVmICpTRElPeCkKIHsKICAgU0RJT19DbWRJbml0VHlwZURlZiAgc2RtbWNfY21kaW5pdDsKLSAgdWludDMyX3QgZXJyb3JzdGF0ZSA9IFNETU1DX0VSUk9SX05PTkU7CisgIHVpbnQzMl90IGVycm9yc3RhdGU7CiAgIAogICAvKiBTZW5kIENNRDUxIFNEX0FQUF9TRU5EX1NDUiAqLwogICBzZG1tY19jbWRpbml0LkFyZ3VtZW50ICAgICAgICAgPSAwVTsKQEAgLTk0MSw3ICs5NDQsNyBAQAogICBzZG1tY19jbWRpbml0LlJlc3BvbnNlICAgICAgICAgPSBTRElPX1JFU1BPTlNFX1NIT1JUOwogICBzZG1tY19jbWRpbml0LldhaXRGb3JJbnRlcnJ1cHQgPSBTRElPX1dBSVRfTk87CiAgIHNkbW1jX2NtZGluaXQuQ1BTTSAgICAgICAgICAgICA9IFNESU9fQ1BTTV9FTkFCTEU7Ci0gIFNESU9fU2VuZENvbW1hbmQoU0RJT3gsICZzZG1tY19jbWRpbml0KTsKKyAgKHZvaWQpU0RJT19TZW5kQ29tbWFuZChTRElPeCwgJnNkbW1jX2NtZGluaXQpOwogICAKICAgLyogQ2hlY2sgZm9yIGVycm9yIGNvbmRpdGlvbnMgKi8KICAgZXJyb3JzdGF0ZSA9IFNETU1DX0dldENtZFJlc3AxKFNESU94LCBTRE1NQ19DTURfU0RfQVBQX1NFTkRfU0NSLCBTRElPX0NNRFRJTUVPVVQpOwpAQCAtOTUxLDEzICs5NTQsMTMgQEAKIAogLyoqCiAgICogQGJyaWVmICBTZW5kIHRoZSBTZW5kIENJRCBjb21tYW5kIGFuZCBjaGVjayB0aGUgcmVzcG9uc2UuCi0gICogQHBhcmFtICBTRElPeCBQb2ludGVyIHRvIFNESU8gcmVnaXN0ZXIgYmFzZSAKKyAgKiBAcGFyYW0gIFNESU94OiBQb2ludGVyIHRvIFNESU8gcmVnaXN0ZXIgYmFzZSAKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KIHVpbnQzMl90IFNETU1DX0NtZFNlbmRDSUQoU0RJT19UeXBlRGVmICpTRElPeCkKIHsKICAgU0RJT19DbWRJbml0VHlwZURlZiAgc2RtbWNfY21kaW5pdDsKLSAgdWludDMyX3QgZXJyb3JzdGF0ZSA9IFNETU1DX0VSUk9SX05PTkU7CisgIHVpbnQzMl90IGVycm9yc3RhdGU7CiAgIAogICAvKiBTZW5kIENNRDIgQUxMX1NFTkRfQ0lEICovCiAgIHNkbW1jX2NtZGluaXQuQXJndW1lbnQgICAgICAgICA9IDBVOwpAQCAtOTY1LDcgKzk2OCw3IEBACiAgIHNkbW1jX2NtZGluaXQuUmVzcG9uc2UgICAgICAgICA9IFNESU9fUkVTUE9OU0VfTE9ORzsKICAgc2RtbWNfY21kaW5pdC5XYWl0Rm9ySW50ZXJydXB0ID0gU0RJT19XQUlUX05POwogICBzZG1tY19jbWRpbml0LkNQU00gICAgICAgICAgICAgPSBTRElPX0NQU01fRU5BQkxFOwotICBTRElPX1NlbmRDb21tYW5kKFNESU94LCAmc2RtbWNfY21kaW5pdCk7CisgICh2b2lkKVNESU9fU2VuZENvbW1hbmQoU0RJT3gsICZzZG1tY19jbWRpbml0KTsKICAgCiAgIC8qIENoZWNrIGZvciBlcnJvciBjb25kaXRpb25zICovCiAgIGVycm9yc3RhdGUgPSBTRE1NQ19HZXRDbWRSZXNwMihTRElPeCk7CkBAIC05NzUsMjEgKzk3OCwyMiBAQAogCiAvKioKICAgKiBAYnJpZWYgIFNlbmQgdGhlIFNlbmQgQ1NEIGNvbW1hbmQgYW5kIGNoZWNrIHRoZSByZXNwb25zZS4KLSAgKiBAcGFyYW0gIFNESU94IFBvaW50ZXIgdG8gU0RJTyByZWdpc3RlciBiYXNlIAorICAqIEBwYXJhbSAgU0RJT3g6IFBvaW50ZXIgdG8gU0RJTyByZWdpc3RlciBiYXNlIAorICAqIEBwYXJhbSAgQXJndW1lbnQ6IENvbW1hbmQgQXJndW1lbnQKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KIHVpbnQzMl90IFNETU1DX0NtZFNlbmRDU0QoU0RJT19UeXBlRGVmICpTRElPeCwgdWludDMyX3QgQXJndW1lbnQpCiB7CiAgIFNESU9fQ21kSW5pdFR5cGVEZWYgIHNkbW1jX2NtZGluaXQ7Ci0gIHVpbnQzMl90IGVycm9yc3RhdGUgPSBTRE1NQ19FUlJPUl9OT05FOworICB1aW50MzJfdCBlcnJvcnN0YXRlOwogICAKICAgLyogU2VuZCBDTUQ5IFNFTkRfQ1NEICovCi0gIHNkbW1jX2NtZGluaXQuQXJndW1lbnQgICAgICAgICA9ICh1aW50MzJfdClBcmd1bWVudDsKKyAgc2RtbWNfY21kaW5pdC5Bcmd1bWVudCAgICAgICAgID0gQXJndW1lbnQ7CiAgIHNkbW1jX2NtZGluaXQuQ21kSW5kZXggICAgICAgICA9IFNETU1DX0NNRF9TRU5EX0NTRDsKICAgc2RtbWNfY21kaW5pdC5SZXNwb25zZSAgICAgICAgID0gU0RJT19SRVNQT05TRV9MT05HOwogICBzZG1tY19jbWRpbml0LldhaXRGb3JJbnRlcnJ1cHQgPSBTRElPX1dBSVRfTk87CiAgIHNkbW1jX2NtZGluaXQuQ1BTTSAgICAgICAgICAgICA9IFNESU9fQ1BTTV9FTkFCTEU7Ci0gIFNESU9fU2VuZENvbW1hbmQoU0RJT3gsICZzZG1tY19jbWRpbml0KTsKKyAgKHZvaWQpU0RJT19TZW5kQ29tbWFuZChTRElPeCwgJnNkbW1jX2NtZGluaXQpOwogICAKICAgLyogQ2hlY2sgZm9yIGVycm9yIGNvbmRpdGlvbnMgKi8KICAgZXJyb3JzdGF0ZSA9IFNETU1DX0dldENtZFJlc3AyKFNESU94KTsKQEAgLTk5OSwxMyArMTAwMywxNCBAQAogCiAvKioKICAgKiBAYnJpZWYgIFNlbmQgdGhlIFNlbmQgQ1NEIGNvbW1hbmQgYW5kIGNoZWNrIHRoZSByZXNwb25zZS4KLSAgKiBAcGFyYW0gIFNESU94IFBvaW50ZXIgdG8gU0RJTyByZWdpc3RlciBiYXNlIAorICAqIEBwYXJhbSAgU0RJT3g6IFBvaW50ZXIgdG8gU0RJTyByZWdpc3RlciBiYXNlIAorICAqIEBwYXJhbSAgcFJDQTogQ2FyZCBSQ0EgIAogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwogdWludDMyX3QgU0RNTUNfQ21kU2V0UmVsQWRkKFNESU9fVHlwZURlZiAqU0RJT3gsIHVpbnQxNl90ICpwUkNBKQogewogICBTRElPX0NtZEluaXRUeXBlRGVmICBzZG1tY19jbWRpbml0OwotICB1aW50MzJfdCBlcnJvcnN0YXRlID0gU0RNTUNfRVJST1JfTk9ORTsKKyAgdWludDMyX3QgZXJyb3JzdGF0ZTsKICAgCiAgIC8qIFNlbmQgQ01EMyBTRF9DTURfU0VUX1JFTF9BRERSICovCiAgIHNkbW1jX2NtZGluaXQuQXJndW1lbnQgICAgICAgICA9IDBVOwpAQCAtMTAxMyw3ICsxMDE4LDcgQEAKICAgc2RtbWNfY21kaW5pdC5SZXNwb25zZSAgICAgICAgID0gU0RJT19SRVNQT05TRV9TSE9SVDsKICAgc2RtbWNfY21kaW5pdC5XYWl0Rm9ySW50ZXJydXB0ID0gU0RJT19XQUlUX05POwogICBzZG1tY19jbWRpbml0LkNQU00gICAgICAgICAgICAgPSBTRElPX0NQU01fRU5BQkxFOwotICBTRElPX1NlbmRDb21tYW5kKFNESU94LCAmc2RtbWNfY21kaW5pdCk7CisgICh2b2lkKVNESU9fU2VuZENvbW1hbmQoU0RJT3gsICZzZG1tY19jbWRpbml0KTsKICAgCiAgIC8qIENoZWNrIGZvciBlcnJvciBjb25kaXRpb25zICovCiAgIGVycm9yc3RhdGUgPSBTRE1NQ19HZXRDbWRSZXNwNihTRElPeCwgU0RNTUNfQ01EX1NFVF9SRUxfQUREUiwgcFJDQSk7CkBAIC0xMDIzLDIwICsxMDI4LDIxIEBACiAKIC8qKgogICAqIEBicmllZiAgU2VuZCB0aGUgU3RhdHVzIGNvbW1hbmQgYW5kIGNoZWNrIHRoZSByZXNwb25zZS4KLSAgKiBAcGFyYW0gIFNESU94IFBvaW50ZXIgdG8gU0RJTyByZWdpc3RlciBiYXNlIAorICAqIEBwYXJhbSAgU0RJT3g6IFBvaW50ZXIgdG8gU0RJTyByZWdpc3RlciBiYXNlIAorICAqIEBwYXJhbSAgQXJndW1lbnQ6IENvbW1hbmQgQXJndW1lbnQKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KIHVpbnQzMl90IFNETU1DX0NtZFNlbmRTdGF0dXMoU0RJT19UeXBlRGVmICpTRElPeCwgdWludDMyX3QgQXJndW1lbnQpCiB7CiAgIFNESU9fQ21kSW5pdFR5cGVEZWYgIHNkbW1jX2NtZGluaXQ7Ci0gIHVpbnQzMl90IGVycm9yc3RhdGUgPSBTRE1NQ19FUlJPUl9OT05FOworICB1aW50MzJfdCBlcnJvcnN0YXRlOwogICAKLSAgc2RtbWNfY21kaW5pdC5Bcmd1bWVudCAgICAgICAgID0gKHVpbnQzMl90KUFyZ3VtZW50OworICBzZG1tY19jbWRpbml0LkFyZ3VtZW50ICAgICAgICAgPSBBcmd1bWVudDsKICAgc2RtbWNfY21kaW5pdC5DbWRJbmRleCAgICAgICAgID0gU0RNTUNfQ01EX1NFTkRfU1RBVFVTOwogICBzZG1tY19jbWRpbml0LlJlc3BvbnNlICAgICAgICAgPSBTRElPX1JFU1BPTlNFX1NIT1JUOwogICBzZG1tY19jbWRpbml0LldhaXRGb3JJbnRlcnJ1cHQgPSBTRElPX1dBSVRfTk87CiAgIHNkbW1jX2NtZGluaXQuQ1BTTSAgICAgICAgICAgICA9IFNESU9fQ1BTTV9FTkFCTEU7Ci0gIFNESU9fU2VuZENvbW1hbmQoU0RJT3gsICZzZG1tY19jbWRpbml0KTsKKyAgKHZvaWQpU0RJT19TZW5kQ29tbWFuZChTRElPeCwgJnNkbW1jX2NtZGluaXQpOwogICAKICAgLyogQ2hlY2sgZm9yIGVycm9yIGNvbmRpdGlvbnMgKi8KICAgZXJyb3JzdGF0ZSA9IFNETU1DX0dldENtZFJlc3AxKFNESU94LCBTRE1NQ19DTURfU0VORF9TVEFUVVMsIFNESU9fQ01EVElNRU9VVCk7CkBAIC0xMDQ2LDIwICsxMDUyLDIwIEBACiAKIC8qKgogICAqIEBicmllZiAgU2VuZCB0aGUgU3RhdHVzIHJlZ2lzdGVyIGNvbW1hbmQgYW5kIGNoZWNrIHRoZSByZXNwb25zZS4KLSAgKiBAcGFyYW0gIFNESU94IFBvaW50ZXIgdG8gU0RJTyByZWdpc3RlciBiYXNlIAorICAqIEBwYXJhbSAgU0RJT3g6IFBvaW50ZXIgdG8gU0RJTyByZWdpc3RlciBiYXNlIAogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwogdWludDMyX3QgU0RNTUNfQ21kU3RhdHVzUmVnaXN0ZXIoU0RJT19UeXBlRGVmICpTRElPeCkKIHsKICAgU0RJT19DbWRJbml0VHlwZURlZiAgc2RtbWNfY21kaW5pdDsKLSAgdWludDMyX3QgZXJyb3JzdGF0ZSA9IFNETU1DX0VSUk9SX05PTkU7CisgIHVpbnQzMl90IGVycm9yc3RhdGU7CiAgIAogICBzZG1tY19jbWRpbml0LkFyZ3VtZW50ICAgICAgICAgPSAwVTsKICAgc2RtbWNfY21kaW5pdC5DbWRJbmRleCAgICAgICAgID0gU0RNTUNfQ01EX1NEX0FQUF9TVEFUVVM7CiAgIHNkbW1jX2NtZGluaXQuUmVzcG9uc2UgICAgICAgICA9IFNESU9fUkVTUE9OU0VfU0hPUlQ7CiAgIHNkbW1jX2NtZGluaXQuV2FpdEZvckludGVycnVwdCA9IFNESU9fV0FJVF9OTzsKICAgc2RtbWNfY21kaW5pdC5DUFNNICAgICAgICAgICAgID0gU0RJT19DUFNNX0VOQUJMRTsKLSAgU0RJT19TZW5kQ29tbWFuZChTRElPeCwgJnNkbW1jX2NtZGluaXQpOworICAodm9pZClTRElPX1NlbmRDb21tYW5kKFNESU94LCAmc2RtbWNfY21kaW5pdCk7CiAgIAogICAvKiBDaGVjayBmb3IgZXJyb3IgY29uZGl0aW9ucyAqLwogICBlcnJvcnN0YXRlID0gU0RNTUNfR2V0Q21kUmVzcDEoU0RJT3gsIFNETU1DX0NNRF9TRF9BUFBfU1RBVFVTLCBTRElPX0NNRFRJTUVPVVQpOwpAQCAtMTA3MCwyMSArMTA3NiwyMSBAQAogLyoqCiAgICogQGJyaWVmICBTZW5kcyBob3N0IGNhcGFjaXR5IHN1cHBvcnQgaW5mb3JtYXRpb24gYW5kIGFjdGl2YXRlcyB0aGUgY2FyZCdzIAogICAqICAgICAgICAgaW5pdGlhbGl6YXRpb24gcHJvY2Vzcy4gU2VuZCBTRE1NQ19DTURfU0VORF9PUF9DT05EIGNvbW1hbmQKLSAgKiBAcGFyYW0gIFNESU94IFBvaW50ZXIgdG8gU0RJTyByZWdpc3RlciBiYXNlIAotICAqIEBwYXJhbWUgQXJndW1lbnQgQXJndW1lbnQgdXNlZCBmb3IgdGhlIGNvbW1hbmQKKyAgKiBAcGFyYW0gIFNESU94OiBQb2ludGVyIHRvIFNESU8gcmVnaXN0ZXIgYmFzZSAKKyAgKiBAcGFyYW1lIEFyZ3VtZW50OiBBcmd1bWVudCB1c2VkIGZvciB0aGUgY29tbWFuZAogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwogdWludDMyX3QgU0RNTUNfQ21kT3BDb25kaXRpb24oU0RJT19UeXBlRGVmICpTRElPeCwgdWludDMyX3QgQXJndW1lbnQpCiB7CiAgIFNESU9fQ21kSW5pdFR5cGVEZWYgIHNkbW1jX2NtZGluaXQ7Ci0gIHVpbnQzMl90IGVycm9yc3RhdGUgPSBTRE1NQ19FUlJPUl9OT05FOworICB1aW50MzJfdCBlcnJvcnN0YXRlOwogICAKICAgc2RtbWNfY21kaW5pdC5Bcmd1bWVudCAgICAgICAgID0gQXJndW1lbnQ7CiAgIHNkbW1jX2NtZGluaXQuQ21kSW5kZXggICAgICAgICA9IFNETU1DX0NNRF9TRU5EX09QX0NPTkQ7CiAgIHNkbW1jX2NtZGluaXQuUmVzcG9uc2UgICAgICAgICA9IFNESU9fUkVTUE9OU0VfU0hPUlQ7CiAgIHNkbW1jX2NtZGluaXQuV2FpdEZvckludGVycnVwdCA9IFNESU9fV0FJVF9OTzsKICAgc2RtbWNfY21kaW5pdC5DUFNNICAgICAgICAgICAgID0gU0RJT19DUFNNX0VOQUJMRTsKLSAgU0RJT19TZW5kQ29tbWFuZChTRElPeCwgJnNkbW1jX2NtZGluaXQpOworICAodm9pZClTRElPX1NlbmRDb21tYW5kKFNESU94LCAmc2RtbWNfY21kaW5pdCk7CiAgIAogICAvKiBDaGVjayBmb3IgZXJyb3IgY29uZGl0aW9ucyAqLwogICBlcnJvcnN0YXRlID0gU0RNTUNfR2V0Q21kUmVzcDMoU0RJT3gpOwpAQCAtMTA5NCwyMSArMTEwMCwyMyBAQAogCiAvKioKICAgKiBAYnJpZWYgIENoZWNrcyBzd2l0Y2hhYmxlIGZ1bmN0aW9uIGFuZCBzd2l0Y2ggY2FyZCBmdW5jdGlvbi4gU0RNTUNfQ01EX0hTX1NXSVRDSCBjb21hbmQKLSAgKiBAcGFyYW0gIFNESU94IFBvaW50ZXIgdG8gU0RJTyByZWdpc3RlciBiYXNlIAotICAqIEBwYXJhbWUgQXJndW1lbnQgQXJndW1lbnQgdXNlZCBmb3IgdGhlIGNvbW1hbmQKKyAgKiBAcGFyYW0gIFNESU94OiBQb2ludGVyIHRvIFNESU8gcmVnaXN0ZXIgYmFzZSAKKyAgKiBAcGFyYW1lIEFyZ3VtZW50OiBBcmd1bWVudCB1c2VkIGZvciB0aGUgY29tbWFuZAogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwogdWludDMyX3QgU0RNTUNfQ21kU3dpdGNoKFNESU9fVHlwZURlZiAqU0RJT3gsIHVpbnQzMl90IEFyZ3VtZW50KQogewogICBTRElPX0NtZEluaXRUeXBlRGVmICBzZG1tY19jbWRpbml0OwotICB1aW50MzJfdCBlcnJvcnN0YXRlID0gU0RNTUNfRVJST1JfTk9ORTsKKyAgdWludDMyX3QgZXJyb3JzdGF0ZTsKICAgCi0gIHNkbW1jX2NtZGluaXQuQXJndW1lbnQgICAgICAgICA9IEFyZ3VtZW50OworICAvKiBTZW5kIENNRDYgdG8gYWN0aXZhdGUgU0RSNTAgTW9kZSBhbmQgUG93ZXIgTGltaXQgMS40NFcgKi8KKyAgLyogQ01EIFJlc3BvbnNlOiBSMSAqLworICBzZG1tY19jbWRpbml0LkFyZ3VtZW50ICAgICAgICAgPSBBcmd1bWVudDsgLyogU0RNTUNfU0RSMjVfU1dJVENIX1BBVFRFUk4gKi8KICAgc2RtbWNfY21kaW5pdC5DbWRJbmRleCAgICAgICAgID0gU0RNTUNfQ01EX0hTX1NXSVRDSDsKICAgc2RtbWNfY21kaW5pdC5SZXNwb25zZSAgICAgICAgID0gU0RJT19SRVNQT05TRV9TSE9SVDsKICAgc2RtbWNfY21kaW5pdC5XYWl0Rm9ySW50ZXJydXB0ID0gU0RJT19XQUlUX05POwogICBzZG1tY19jbWRpbml0LkNQU00gICAgICAgICAgICAgPSBTRElPX0NQU01fRU5BQkxFOwotICBTRElPX1NlbmRDb21tYW5kKFNESU94LCAmc2RtbWNfY21kaW5pdCk7CisgICh2b2lkKVNESU9fU2VuZENvbW1hbmQoU0RJT3gsICZzZG1tY19jbWRpbml0KTsKICAgCiAgIC8qIENoZWNrIGZvciBlcnJvciBjb25kaXRpb25zICovCiAgIGVycm9yc3RhdGUgPSBTRE1NQ19HZXRDbWRSZXNwMShTRElPeCwgU0RNTUNfQ01EX0hTX1NXSVRDSCwgU0RJT19DTURUSU1FT1VUKTsKQEAgLTExMjcsMTMgKzExMzUsMTMgQEAKICAgICAKIC8qKgogICAqIEBicmllZiAgQ2hlY2tzIGZvciBlcnJvciBjb25kaXRpb25zIGZvciBDTUQwLgotICAqIEBwYXJhbSAgaHNkIFNEIGhhbmRsZQorICAqIEBwYXJhbSAgaHNkOiBTRCBoYW5kbGUKICAgKiBAcmV0dmFsIFNEIENhcmQgZXJyb3Igc3RhdGUKICAgKi8KIHN0YXRpYyB1aW50MzJfdCBTRE1NQ19HZXRDbWRFcnJvcihTRElPX1R5cGVEZWYgKlNESU94KQogewogICAvKiA4IGlzIHRoZSBudW1iZXIgb2YgcmVxdWlyZWQgaW5zdHJ1Y3Rpb25zIGN5Y2xlcyBmb3IgdGhlIGJlbG93IGxvb3Agc3RhdGVtZW50LgotICBUaGUgU0RNTUNfQ01EVElNRU9VVCBpcyBleHByZXNzZWQgaW4gbXMgKi8KKyAgVGhlIFNESU9fQ01EVElNRU9VVCBpcyBleHByZXNzZWQgaW4gbXMgKi8KICAgcmVnaXN0ZXIgdWludDMyX3QgY291bnQgPSBTRElPX0NNRFRJTUVPVVQgKiAoU3lzdGVtQ29yZUNsb2NrIC8gOFUgLzEwMDBVKTsKICAgCiAgIGRvCkBAIC0xMTQ2LDIwICsxMTU0LDIxIEBACiAgIH13aGlsZSghX19TRElPX0dFVF9GTEFHKFNESU94LCBTRElPX0ZMQUdfQ01EU0VOVCkpOwogICAKICAgLyogQ2xlYXIgYWxsIHRoZSBzdGF0aWMgZmxhZ3MgKi8KLSAgX19TRElPX0NMRUFSX0ZMQUcoU0RJT3gsIFNESU9fU1RBVElDX0ZMQUdTKTsKKyAgX19TRElPX0NMRUFSX0ZMQUcoU0RJT3gsIFNESU9fU1RBVElDX0NNRF9GTEFHUyk7CiAgIAogICByZXR1cm4gU0RNTUNfRVJST1JfTk9ORTsKIH0KIAogLyoqCiAgICogQGJyaWVmICBDaGVja3MgZm9yIGVycm9yIGNvbmRpdGlvbnMgZm9yIFIxIHJlc3BvbnNlLgotICAqIEBwYXJhbSAgaHNkIFNEIGhhbmRsZQotICAqIEBwYXJhbSAgU0RfQ01EIFRoZSBzZW50IGNvbW1hbmQgaW5kZXggIAorICAqIEBwYXJhbSAgaHNkOiBTRCBoYW5kbGUKKyAgKiBAcGFyYW0gIFNEX0NNRDogVGhlIHNlbnQgY29tbWFuZCBpbmRleCAgCiAgICogQHJldHZhbCBTRCBDYXJkIGVycm9yIHN0YXRlCiAgICovCiBzdGF0aWMgdWludDMyX3QgU0RNTUNfR2V0Q21kUmVzcDEoU0RJT19UeXBlRGVmICpTRElPeCwgdWludDhfdCBTRF9DTUQsIHVpbnQzMl90IFRpbWVvdXQpCiB7CiAgIHVpbnQzMl90IHJlc3BvbnNlX3IxOworICB1aW50MzJfdCBzdGFfcmVnOwogICAKICAgLyogOCBpcyB0aGUgbnVtYmVyIG9mIHJlcXVpcmVkIGluc3RydWN0aW9ucyBjeWNsZXMgZm9yIHRoZSBiZWxvdyBsb29wIHN0YXRlbWVudC4KICAgVGhlIFRpbWVvdXQgaXMgZXhwcmVzc2VkIGluIG1zICovCkBAIC0xMTcxLDkgKzExODAsMTAgQEAKICAgICB7CiAgICAgICByZXR1cm4gU0RNTUNfRVJST1JfVElNRU9VVDsKICAgICB9CisgICAgc3RhX3JlZyA9IFNESU94LT5TVEE7CisgIH13aGlsZSgoKHN0YV9yZWcgJiAoU0RJT19GTEFHX0NDUkNGQUlMIHwgU0RJT19GTEFHX0NNRFJFTkQgfCBTRElPX0ZMQUdfQ1RJTUVPVVQpKSA9PSAwVSkgfHwKKyAgICAgICAgICgoc3RhX3JlZyAmIFNESU9fRkxBR19DTURBQ1QpICE9IDBVICkpOwogICAgIAotICB9d2hpbGUoIV9fU0RJT19HRVRfRkxBRyhTRElPeCwgU0RJT19GTEFHX0NDUkNGQUlMIHwgU0RJT19GTEFHX0NNRFJFTkQgfCBTRElPX0ZMQUdfQ1RJTUVPVVQpKTsKLSAgCiAgIGlmKF9fU0RJT19HRVRfRkxBRyhTRElPeCwgU0RJT19GTEFHX0NUSU1FT1VUKSkKICAgewogICAgIF9fU0RJT19DTEVBUl9GTEFHKFNESU94LCBTRElPX0ZMQUdfQ1RJTUVPVVQpOwpAQCAtMTE4Niw2ICsxMTk2LDEzIEBACiAgICAgCiAgICAgcmV0dXJuIFNETU1DX0VSUk9SX0NNRF9DUkNfRkFJTDsKICAgfQorICBlbHNlCisgIHsKKyAgICAvKiBOb3RoaW5nIHRvIGRvICovCisgIH0KKyAgCisgIC8qIENsZWFyIGFsbCB0aGUgc3RhdGljIGZsYWdzICovCisgIF9fU0RJT19DTEVBUl9GTEFHKFNESU94LCBTRElPX1NUQVRJQ19DTURfRkxBR1MpOwogICAKICAgLyogQ2hlY2sgcmVzcG9uc2UgcmVjZWl2ZWQgaXMgb2YgZGVzaXJlZCBjb21tYW5kICovCiAgIGlmKFNESU9fR2V0Q29tbWFuZFJlc3BvbnNlKFNESU94KSAhPSBTRF9DTUQpCkBAIC0xMTkzLDkgKzEyMTAsNiBAQAogICAgIHJldHVybiBTRE1NQ19FUlJPUl9DTURfQ1JDX0ZBSUw7CiAgIH0KICAgCi0gIC8qIENsZWFyIGFsbCB0aGUgc3RhdGljIGZsYWdzICovCi0gIF9fU0RJT19DTEVBUl9GTEFHKFNESU94LCBTRElPX1NUQVRJQ19GTEFHUyk7Ci0gIAogICAvKiBXZSBoYXZlIHJlY2VpdmVkIHJlc3BvbnNlLCByZXRyaWV2ZSBpdCBmb3IgYW5hbHlzaXMgICovCiAgIHJlc3BvbnNlX3IxID0gU0RJT19HZXRSZXNwb25zZShTRElPeCwgU0RJT19SRVNQMSk7CiAgIApAQCAtMTI4MywxMyArMTI5NywxNCBAQAogCiAvKioKICAgKiBAYnJpZWYgIENoZWNrcyBmb3IgZXJyb3IgY29uZGl0aW9ucyBmb3IgUjIgKENJRCBvciBDU0QpIHJlc3BvbnNlLgotICAqIEBwYXJhbSAgaHNkIFNEIGhhbmRsZQorICAqIEBwYXJhbSAgaHNkOiBTRCBoYW5kbGUKICAgKiBAcmV0dmFsIFNEIENhcmQgZXJyb3Igc3RhdGUKICAgKi8KIHN0YXRpYyB1aW50MzJfdCBTRE1NQ19HZXRDbWRSZXNwMihTRElPX1R5cGVEZWYgKlNESU94KQogeworICB1aW50MzJfdCBzdGFfcmVnOwogICAvKiA4IGlzIHRoZSBudW1iZXIgb2YgcmVxdWlyZWQgaW5zdHJ1Y3Rpb25zIGN5Y2xlcyBmb3IgdGhlIGJlbG93IGxvb3Agc3RhdGVtZW50LgotICBUaGUgU0RNTUNfQ01EVElNRU9VVCBpcyBleHByZXNzZWQgaW4gbXMgKi8KKyAgVGhlIFNESU9fQ01EVElNRU9VVCBpcyBleHByZXNzZWQgaW4gbXMgKi8KICAgcmVnaXN0ZXIgdWludDMyX3QgY291bnQgPSBTRElPX0NNRFRJTUVPVVQgKiAoU3lzdGVtQ29yZUNsb2NrIC8gOFUgLzEwMDBVKTsKICAgCiAgIGRvCkBAIC0xMjk4LDggKzEzMTMsOSBAQAogICAgIHsKICAgICAgIHJldHVybiBTRE1NQ19FUlJPUl9USU1FT1VUOwogICAgIH0KLSAgICAKLSAgfXdoaWxlKCFfX1NESU9fR0VUX0ZMQUcoU0RJT3gsIFNESU9fRkxBR19DQ1JDRkFJTCB8IFNESU9fRkxBR19DTURSRU5EIHwgU0RJT19GTEFHX0NUSU1FT1VUKSk7CisgICAgc3RhX3JlZyA9IFNESU94LT5TVEE7CisgIH13aGlsZSgoKHN0YV9yZWcgJiAoU0RJT19GTEFHX0NDUkNGQUlMIHwgU0RJT19GTEFHX0NNRFJFTkQgfCBTRElPX0ZMQUdfQ1RJTUVPVVQpKSA9PSAwVSkgfHwKKyAgICAgICAgICgoc3RhX3JlZyAmIFNESU9fRkxBR19DTURBQ1QpICE9IDBVICkpOwogICAgIAogICBpZiAoX19TRElPX0dFVF9GTEFHKFNESU94LCBTRElPX0ZMQUdfQ1RJTUVPVVQpKQogICB7CkBAIC0xMzE3LDcgKzEzMzMsNyBAQAogICB7CiAgICAgLyogTm8gZXJyb3IgZmxhZyBzZXQgKi8KICAgICAvKiBDbGVhciBhbGwgdGhlIHN0YXRpYyBmbGFncyAqLwotICAgIF9fU0RJT19DTEVBUl9GTEFHKFNESU94LCBTRElPX1NUQVRJQ19GTEFHUyk7CisgICAgX19TRElPX0NMRUFSX0ZMQUcoU0RJT3gsIFNESU9fU1RBVElDX0NNRF9GTEFHUyk7CiAgIH0KIAogICByZXR1cm4gU0RNTUNfRVJST1JfTk9ORTsKQEAgLTEzMjUsMTMgKzEzNDEsMTQgQEAKIAogLyoqCiAgICogQGJyaWVmICBDaGVja3MgZm9yIGVycm9yIGNvbmRpdGlvbnMgZm9yIFIzIChPQ1IpIHJlc3BvbnNlLgotICAqIEBwYXJhbSAgaHNkIFNEIGhhbmRsZQorICAqIEBwYXJhbSAgaHNkOiBTRCBoYW5kbGUKICAgKiBAcmV0dmFsIFNEIENhcmQgZXJyb3Igc3RhdGUKICAgKi8KIHN0YXRpYyB1aW50MzJfdCBTRE1NQ19HZXRDbWRSZXNwMyhTRElPX1R5cGVEZWYgKlNESU94KQogeworICB1aW50MzJfdCBzdGFfcmVnOwogICAvKiA4IGlzIHRoZSBudW1iZXIgb2YgcmVxdWlyZWQgaW5zdHJ1Y3Rpb25zIGN5Y2xlcyBmb3IgdGhlIGJlbG93IGxvb3Agc3RhdGVtZW50LgotICBUaGUgU0RNTUNfQ01EVElNRU9VVCBpcyBleHByZXNzZWQgaW4gbXMgKi8KKyAgVGhlIFNESU9fQ01EVElNRU9VVCBpcyBleHByZXNzZWQgaW4gbXMgKi8KICAgcmVnaXN0ZXIgdWludDMyX3QgY291bnQgPSBTRElPX0NNRFRJTUVPVVQgKiAoU3lzdGVtQ29yZUNsb2NrIC8gOFUgLzEwMDBVKTsKICAgCiAgIGRvCkBAIC0xMzQwLDkgKzEzNTcsMTAgQEAKICAgICB7CiAgICAgICByZXR1cm4gU0RNTUNfRVJST1JfVElNRU9VVDsKICAgICB9CisgICAgc3RhX3JlZyA9IFNESU94LT5TVEE7CisgIH13aGlsZSgoKHN0YV9yZWcgJiAoU0RJT19GTEFHX0NDUkNGQUlMIHwgU0RJT19GTEFHX0NNRFJFTkQgfCBTRElPX0ZMQUdfQ1RJTUVPVVQpKSA9PSAwVSkgfHwKKyAgICAgICAgICgoc3RhX3JlZyAmIFNESU9fRkxBR19DTURBQ1QpICE9IDBVICkpOwogICAgIAotICB9d2hpbGUoIV9fU0RJT19HRVRfRkxBRyhTRElPeCwgU0RJT19GTEFHX0NDUkNGQUlMIHwgU0RJT19GTEFHX0NNRFJFTkQgfCBTRElPX0ZMQUdfQ1RJTUVPVVQpKTsKLSAgCiAgIGlmKF9fU0RJT19HRVRfRkxBRyhTRElPeCwgU0RJT19GTEFHX0NUSU1FT1VUKSkKICAgewogICAgIF9fU0RJT19DTEVBUl9GTEFHKFNESU94LCBTRElPX0ZMQUdfQ1RJTUVPVVQpOwpAQCAtMTM1MCwxMCArMTM2OCw5IEBACiAgICAgcmV0dXJuIFNETU1DX0VSUk9SX0NNRF9SU1BfVElNRU9VVDsKICAgfQogICBlbHNlCi0gCiAgIHsgIAogICAgIC8qIENsZWFyIGFsbCB0aGUgc3RhdGljIGZsYWdzICovCi0gICAgX19TRElPX0NMRUFSX0ZMQUcoU0RJT3gsIFNESU9fU1RBVElDX0ZMQUdTKTsKKyAgICBfX1NESU9fQ0xFQVJfRkxBRyhTRElPeCwgU0RJT19TVEFUSUNfQ01EX0ZMQUdTKTsKICAgfQogICAKICAgcmV0dXJuIFNETU1DX0VSUk9SX05PTkU7CkBAIC0xMzYxLDE4ICsxMzc4LDE5IEBACiAKIC8qKgogICAqIEBicmllZiAgQ2hlY2tzIGZvciBlcnJvciBjb25kaXRpb25zIGZvciBSNiAoUkNBKSByZXNwb25zZS4KLSAgKiBAcGFyYW0gIGhzZCBTRCBoYW5kbGUKLSAgKiBAcGFyYW0gIFNEX0NNRCBUaGUgc2VudCBjb21tYW5kIGluZGV4Ci0gICogQHBhcmFtICBwUkNBIFBvaW50ZXIgdG8gdGhlIHZhcmlhYmxlIHRoYXQgd2lsbCBjb250YWluIHRoZSBTRCBjYXJkIHJlbGF0aXZlIAorICAqIEBwYXJhbSAgaHNkOiBTRCBoYW5kbGUKKyAgKiBAcGFyYW0gIFNEX0NNRDogVGhlIHNlbnQgY29tbWFuZCBpbmRleAorICAqIEBwYXJhbSAgcFJDQTogUG9pbnRlciB0byB0aGUgdmFyaWFibGUgdGhhdCB3aWxsIGNvbnRhaW4gdGhlIFNEIGNhcmQgcmVsYXRpdmUgCiAgICogICAgICAgICBhZGRyZXNzIFJDQSAgIAogICAqIEByZXR2YWwgU0QgQ2FyZCBlcnJvciBzdGF0ZQogICAqLwogc3RhdGljIHVpbnQzMl90IFNETU1DX0dldENtZFJlc3A2KFNESU9fVHlwZURlZiAqU0RJT3gsIHVpbnQ4X3QgU0RfQ01ELCB1aW50MTZfdCAqcFJDQSkKIHsKICAgdWludDMyX3QgcmVzcG9uc2VfcjE7CisgIHVpbnQzMl90IHN0YV9yZWc7CiAKICAgLyogOCBpcyB0aGUgbnVtYmVyIG9mIHJlcXVpcmVkIGluc3RydWN0aW9ucyBjeWNsZXMgZm9yIHRoZSBiZWxvdyBsb29wIHN0YXRlbWVudC4KLSAgVGhlIFNETU1DX0NNRFRJTUVPVVQgaXMgZXhwcmVzc2VkIGluIG1zICovCisgIFRoZSBTRElPX0NNRFRJTUVPVVQgaXMgZXhwcmVzc2VkIGluIG1zICovCiAgIHJlZ2lzdGVyIHVpbnQzMl90IGNvdW50ID0gU0RJT19DTURUSU1FT1VUICogKFN5c3RlbUNvcmVDbG9jayAvIDhVIC8xMDAwVSk7CiAgIAogICBkbwpAQCAtMTM4MSw5ICsxMzk5LDEwIEBACiAgICAgewogICAgICAgcmV0dXJuIFNETU1DX0VSUk9SX1RJTUVPVVQ7CiAgICAgfQorICAgIHN0YV9yZWcgPSBTRElPeC0+U1RBOworICB9d2hpbGUoKChzdGFfcmVnICYgKFNESU9fRkxBR19DQ1JDRkFJTCB8IFNESU9fRkxBR19DTURSRU5EIHwgU0RJT19GTEFHX0NUSU1FT1VUKSkgPT0gMFUpIHx8CisgICAgICAgICAoKHN0YV9yZWcgJiBTRElPX0ZMQUdfQ01EQUNUKSAhPSAwVSApKTsKICAgICAKLSAgfXdoaWxlKCFfX1NESU9fR0VUX0ZMQUcoU0RJT3gsIFNESU9fRkxBR19DQ1JDRkFJTCB8IFNESU9fRkxBR19DTURSRU5EIHwgU0RJT19GTEFHX0NUSU1FT1VUKSk7Ci0gIAogICBpZihfX1NESU9fR0VUX0ZMQUcoU0RJT3gsIFNESU9fRkxBR19DVElNRU9VVCkpCiAgIHsKICAgICBfX1NESU9fQ0xFQVJfRkxBRyhTRElPeCwgU0RJT19GTEFHX0NUSU1FT1VUKTsKQEAgLTEzOTYsNiArMTQxNSwxMCBAQAogICAgIAogICAgIHJldHVybiBTRE1NQ19FUlJPUl9DTURfQ1JDX0ZBSUw7CiAgIH0KKyAgZWxzZQorICB7CisgICAgLyogTm90aGluZyB0byBkbyAqLworICB9CiAgIAogICAvKiBDaGVjayByZXNwb25zZSByZWNlaXZlZCBpcyBvZiBkZXNpcmVkIGNvbW1hbmQgKi8KICAgaWYoU0RJT19HZXRDb21tYW5kUmVzcG9uc2UoU0RJT3gpICE9IFNEX0NNRCkKQEAgLTE0MDQsNyArMTQyNyw3IEBACiAgIH0KICAgCiAgIC8qIENsZWFyIGFsbCB0aGUgc3RhdGljIGZsYWdzICovCi0gIF9fU0RJT19DTEVBUl9GTEFHKFNESU94LCBTRElPX1NUQVRJQ19GTEFHUyk7CisgIF9fU0RJT19DTEVBUl9GTEFHKFNESU94LCBTRElPX1NUQVRJQ19DTURfRkxBR1MpOwogICAKICAgLyogV2UgaGF2ZSByZWNlaXZlZCByZXNwb25zZSwgcmV0cmlldmUgaXQuICAqLwogICByZXNwb25zZV9yMSA9IFNESU9fR2V0UmVzcG9uc2UoU0RJT3gsIFNESU9fUkVTUDEpOwpAQCAtMTQzMSwxMSArMTQ1NCwxMiBAQAogCiAvKioKICAgKiBAYnJpZWYgIENoZWNrcyBmb3IgZXJyb3IgY29uZGl0aW9ucyBmb3IgUjcgcmVzcG9uc2UuCi0gICogQHBhcmFtICBoc2QgU0QgaGFuZGxlCisgICogQHBhcmFtICBoc2Q6IFNEIGhhbmRsZQogICAqIEByZXR2YWwgU0QgQ2FyZCBlcnJvciBzdGF0ZQogICAqLwogc3RhdGljIHVpbnQzMl90IFNETU1DX0dldENtZFJlc3A3KFNESU9fVHlwZURlZiAqU0RJT3gpCiB7CisgIHVpbnQzMl90IHN0YV9yZWc7CiAgIC8qIDggaXMgdGhlIG51bWJlciBvZiByZXF1aXJlZCBpbnN0cnVjdGlvbnMgY3ljbGVzIGZvciB0aGUgYmVsb3cgbG9vcCBzdGF0ZW1lbnQuCiAgIFRoZSBTRElPX0NNRFRJTUVPVVQgaXMgZXhwcmVzc2VkIGluIG1zICovCiAgIHJlZ2lzdGVyIHVpbnQzMl90IGNvdW50ID0gU0RJT19DTURUSU1FT1VUICogKFN5c3RlbUNvcmVDbG9jayAvIDhVIC8xMDAwVSk7CkBAIC0xNDQ2LDE2ICsxNDcwLDI4IEBACiAgICAgewogICAgICAgcmV0dXJuIFNETU1DX0VSUk9SX1RJTUVPVVQ7CiAgICAgfQorICAgIHN0YV9yZWcgPSBTRElPeC0+U1RBOworICB9d2hpbGUoKChzdGFfcmVnICYgKFNESU9fRkxBR19DQ1JDRkFJTCB8IFNESU9fRkxBR19DTURSRU5EIHwgU0RJT19GTEFHX0NUSU1FT1VUKSkgPT0gMFUpIHx8CisgICAgICAgICAoKHN0YV9yZWcgJiBTRElPX0ZMQUdfQ01EQUNUKSAhPSAwVSApKTsKICAgICAKLSAgfXdoaWxlKCFfX1NESU9fR0VUX0ZMQUcoU0RJT3gsIFNESU9fRkxBR19DQ1JDRkFJTCB8IFNESU9fRkxBR19DTURSRU5EIHwgU0RJT19GTEFHX0NUSU1FT1VUKSk7Ci0KICAgaWYoX19TRElPX0dFVF9GTEFHKFNESU94LCBTRElPX0ZMQUdfQ1RJTUVPVVQpKQogICB7CiAgICAgLyogQ2FyZCBpcyBTRCBWMi4wIGNvbXBsaWFudCAqLwotICAgIF9fU0RJT19DTEVBUl9GTEFHKFNESU94LCBTRElPX0ZMQUdfQ01EUkVORCk7CisgICAgX19TRElPX0NMRUFSX0ZMQUcoU0RJT3gsIFNESU9fRkxBR19DVElNRU9VVCk7CiAgICAgCiAgICAgcmV0dXJuIFNETU1DX0VSUk9SX0NNRF9SU1BfVElNRU9VVDsKICAgfQorICBlbHNlIGlmKF9fU0RJT19HRVRfRkxBRyhTRElPeCwgU0RJT19GTEFHX0NDUkNGQUlMKSkKKyAgeworICAgIC8qIENhcmQgaXMgU0QgVjIuMCBjb21wbGlhbnQgKi8KKyAgICBfX1NESU9fQ0xFQVJfRkxBRyhTRElPeCwgU0RJT19GTEFHX0NDUkNGQUlMKTsKKyAgICAKKyAgICByZXR1cm4gU0RNTUNfRVJST1JfQ01EX0NSQ19GQUlMOworICB9CisgIGVsc2UKKyAgeworICAgIC8qIE5vdGhpbmcgdG8gZG8gKi8KKyAgfQogICAKICAgaWYoX19TRElPX0dFVF9GTEFHKFNESU94LCBTRElPX0ZMQUdfQ01EUkVORCkpCiAgIHsKQEAgLTE0NzEsMTUgKzE1MDcsNyBAQAogICAqIEB9CiAgICovCiAKLS8qKgotICAqIEB9Ci0gICovCi0KLSNlbmRpZiAvKiBTVE0zMkY0MDV4eCB8fCBTVE0zMkY0MTV4eCB8fCBTVE0zMkY0MDd4eCB8fCBTVE0zMkY0MTd4eCB8fCBTVE0zMkY0Mjd4eCB8fCBTVE0zMkY0Mzd4eCB8fCBTVE0zMkY0Mjl4eCB8fCBTVE0zMkY0Mzl4eCB8fAotICAgICAgICAgIFNUTTMyRjQwMXhDIHx8IFNUTTMyRjQwMXhFIHx8IFNUTTMyRjQxMXhFIHx8IFNUTTMyRjQ0Nnh4IHx8IFNUTTMyRjQ2OXh4IHx8IFNUTTMyRjQ3OXh4IHx8IFNUTTMyRjQxMlp4IHx8IFNUTTMyRjQxMlZ4IHx8Ci0gICAgICAgICAgU1RNMzJGNDEyUnggfHwgU1RNMzJGNDEyQ3ggfHwgU1RNMzJGNDEzeHggfHwgU1RNMzJGNDIzeHggKi8KLSNlbmRpZiAvKiAoSEFMX1NEX01PRFVMRV9FTkFCTEVEKSB8fCAoSEFMX01NQ19NT0RVTEVfRU5BQkxFRCkgKi8KLQorI2VuZGlmIC8qIEhBTF9TRF9NT0RVTEVfRU5BQkxFRCB8fCBIQUxfTU1DX01PRFVMRV9FTkFCTEVEICovCiAvKioKICAgKiBAfQogICAqLwpAQCAtMTQ4OCw0ICsxNTE2LDYgQEAKICAgKiBAfQogICAqLwogCisjZW5kaWYgLyogU0RJTyAqLworCiAvKioqKioqKioqKioqKioqKioqKioqKioqIChDKSBDT1BZUklHSFQgU1RNaWNyb2VsZWN0cm9uaWNzICoqKioqRU5EIE9GIEZJTEUqKioqLwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjR4eF9sbF9zcGkuYyBiL1NyYy9zdG0zMmY0eHhfbGxfc3BpLmMKaW5kZXggNWQyOTAyYi4uZGZiZGFiZSAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZjR4eF9sbF9zcGkuYworKysgYi9TcmMvc3RtMzJmNHh4X2xsX3NwaS5jCkBAIC02MCw0MSArNjAsNDEgQEAKIC8qKiBAZGVmZ3JvdXAgU1BJX0xMX1ByaXZhdGVfTWFjcm9zIFNQSSBQcml2YXRlIE1hY3JvcwogICAqIEB7CiAgICovCi0jZGVmaW5lIElTX0xMX1NQSV9UUkFOU0ZFUl9ESVJFQ1RJT04oX19WQUxVRV9fKSAoKChfX1ZBTFVFX18pID09IExMX1NQSV9GVUxMX0RVUExFWCkgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9TUElfU0lNUExFWF9SWCkgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfU1BJX0hBTEZfRFVQTEVYX1JYKSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX1NQSV9IQUxGX0RVUExFWF9UWCkpCisjZGVmaW5lIElTX0xMX1NQSV9UUkFOU0ZFUl9ESVJFQ1RJT04oX19WQUxVRV9fKSAoKChfX1ZBTFVFX18pID09IExMX1NQSV9GVUxMX0RVUExFWCkgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9TUElfU0lNUExFWF9SWCkgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfU1BJX0hBTEZfRFVQTEVYX1JYKSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX1NQSV9IQUxGX0RVUExFWF9UWCkpCiAKICNkZWZpbmUgSVNfTExfU1BJX01PREUoX19WQUxVRV9fKSAoKChfX1ZBTFVFX18pID09IExMX1NQSV9NT0RFX01BU1RFUikgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfU1BJX01PREVfU0xBVkUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfU1BJX01PREVfU0xBVkUpKQogCiAjZGVmaW5lIElTX0xMX1NQSV9EQVRBV0lEVEgoX19WQUxVRV9fKSAoKChfX1ZBTFVFX18pID09IExMX1NQSV9EQVRBV0lEVEhfOEJJVCkgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfU1BJX0RBVEFXSURUSF8xNkJJVCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX1NQSV9EQVRBV0lEVEhfMTZCSVQpKQogCiAjZGVmaW5lIElTX0xMX1NQSV9QT0xBUklUWShfX1ZBTFVFX18pICgoKF9fVkFMVUVfXykgPT0gTExfU1BJX1BPTEFSSVRZX0xPVykgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX1NQSV9QT0xBUklUWV9ISUdIKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9TUElfUE9MQVJJVFlfSElHSCkpCiAKICNkZWZpbmUgSVNfTExfU1BJX1BIQVNFKF9fVkFMVUVfXykgKCgoX19WQUxVRV9fKSA9PSBMTF9TUElfUEhBU0VfMUVER0UpIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9TUElfUEhBU0VfMkVER0UpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX1NQSV9QSEFTRV8yRURHRSkpCiAKLSNkZWZpbmUgSVNfTExfU1BJX05TUyhfX1ZBTFVFX18pICgoKF9fVkFMVUVfXykgPT0gTExfU1BJX05TU19TT0ZUKSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX1NQSV9OU1NfSEFSRF9JTlBVVCkgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9TUElfTlNTX0hBUkRfT1VUUFVUKSkKKyNkZWZpbmUgSVNfTExfU1BJX05TUyhfX1ZBTFVFX18pICgoKF9fVkFMVUVfXykgPT0gTExfU1BJX05TU19TT0ZUKSAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX1NQSV9OU1NfSEFSRF9JTlBVVCkgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9TUElfTlNTX0hBUkRfT1VUUFVUKSkKIAotI2RlZmluZSBJU19MTF9TUElfQkFVRFJBVEUoX19WQUxVRV9fKSAoKChfX1ZBTFVFX18pID09IExMX1NQSV9CQVVEUkFURVBSRVNDQUxFUl9ESVYyKSAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9TUElfQkFVRFJBVEVQUkVTQ0FMRVJfRElWNCkgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfU1BJX0JBVURSQVRFUFJFU0NBTEVSX0RJVjgpICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX1NQSV9CQVVEUkFURVBSRVNDQUxFUl9ESVYxNikgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9TUElfQkFVRFJBVEVQUkVTQ0FMRVJfRElWMzIpICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfU1BJX0JBVURSQVRFUFJFU0NBTEVSX0RJVjY0KSAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX1NQSV9CQVVEUkFURVBSRVNDQUxFUl9ESVYxMjgpIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9TUElfQkFVRFJBVEVQUkVTQ0FMRVJfRElWMjU2KSkKKyNkZWZpbmUgSVNfTExfU1BJX0JBVURSQVRFKF9fVkFMVUVfXykgKCgoX19WQUxVRV9fKSA9PSBMTF9TUElfQkFVRFJBVEVQUkVTQ0FMRVJfRElWMikgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfU1BJX0JBVURSQVRFUFJFU0NBTEVSX0RJVjQpICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX1NQSV9CQVVEUkFURVBSRVNDQUxFUl9ESVY4KSAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9TUElfQkFVRFJBVEVQUkVTQ0FMRVJfRElWMTYpICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfU1BJX0JBVURSQVRFUFJFU0NBTEVSX0RJVjMyKSAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX1NQSV9CQVVEUkFURVBSRVNDQUxFUl9ESVY2NCkgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9TUElfQkFVRFJBVEVQUkVTQ0FMRVJfRElWMTI4KSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfU1BJX0JBVURSQVRFUFJFU0NBTEVSX0RJVjI1NikpCiAKICNkZWZpbmUgSVNfTExfU1BJX0JJVE9SREVSKF9fVkFMVUVfXykgKCgoX19WQUxVRV9fKSA9PSBMTF9TUElfTFNCX0ZJUlNUKSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfU1BJX01TQl9GSVJTVCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfU1BJX01TQl9GSVJTVCkpCiAKICNkZWZpbmUgSVNfTExfU1BJX0NSQ0NBTENVTEFUSU9OKF9fVkFMVUVfXykgKCgoX19WQUxVRV9fKSA9PSBMTF9TUElfQ1JDQ0FMQ1VMQVRJT05fRU5BQkxFKSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfU1BJX0NSQ0NBTENVTEFUSU9OX0RJU0FCTEUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX1NQSV9DUkNDQUxDVUxBVElPTl9ESVNBQkxFKSkKIAogI2RlZmluZSBJU19MTF9TUElfQ1JDX1BPTFlOT01JQUwoX19WQUxVRV9fKSAoKF9fVkFMVUVfXykgPj0gMHgxVSkKIApAQCAtMzMwLDM2ICszMzAsMzYgQEAKICAgKiBAewogICAqLwogCi0jZGVmaW5lIElTX0xMX0kyU19EQVRBRk9STUFUKF9fVkFMVUVfXykgICgoKF9fVkFMVUVfXykgPT0gTExfSTJTX0RBVEFGT1JNQVRfMTZCKSAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfSTJTX0RBVEFGT1JNQVRfMTZCX0VYVEVOREVEKSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfSTJTX0RBVEFGT1JNQVRfMjRCKSAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfSTJTX0RBVEFGT1JNQVRfMzJCKSkKKyNkZWZpbmUgSVNfTExfSTJTX0RBVEFGT1JNQVQoX19WQUxVRV9fKSAgKCgoX19WQUxVRV9fKSA9PSBMTF9JMlNfREFUQUZPUk1BVF8xNkIpICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9JMlNfREFUQUZPUk1BVF8xNkJfRVhURU5ERUQpIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9JMlNfREFUQUZPUk1BVF8yNEIpICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9JMlNfREFUQUZPUk1BVF8zMkIpKQogCiAjZGVmaW5lIElTX0xMX0kyU19DUE9MKF9fVkFMVUVfXykgICAgICAgICgoKF9fVkFMVUVfXykgPT0gTExfSTJTX1BPTEFSSVRZX0xPVykgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9JMlNfUE9MQVJJVFlfSElHSCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfSTJTX1BPTEFSSVRZX0hJR0gpKQogCi0jZGVmaW5lIElTX0xMX0kyU19TVEFOREFSRChfX1ZBTFVFX18pICAgICgoKF9fVkFMVUVfXykgPT0gTExfSTJTX1NUQU5EQVJEX1BISUxJUFMpICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX0kyU19TVEFOREFSRF9NU0IpICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9JMlNfU1RBTkRBUkRfTFNCKSAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfSTJTX1NUQU5EQVJEX1BDTV9TSE9SVCkgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX0kyU19TVEFOREFSRF9QQ01fTE9ORykpCisjZGVmaW5lIElTX0xMX0kyU19TVEFOREFSRChfX1ZBTFVFX18pICAgICgoKF9fVkFMVUVfXykgPT0gTExfSTJTX1NUQU5EQVJEX1BISUxJUFMpICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX0kyU19TVEFOREFSRF9NU0IpICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9JMlNfU1RBTkRBUkRfTFNCKSAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfSTJTX1NUQU5EQVJEX1BDTV9TSE9SVCkgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX0kyU19TVEFOREFSRF9QQ01fTE9ORykpCiAKLSNkZWZpbmUgSVNfTExfSTJTX01PREUoX19WQUxVRV9fKSAgICAgICAgKCgoX19WQUxVRV9fKSA9PSBMTF9JMlNfTU9ERV9TTEFWRV9UWCkgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9JMlNfTU9ERV9TTEFWRV9SWCkgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9JMlNfTU9ERV9NQVNURVJfVFgpIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9JMlNfTU9ERV9NQVNURVJfUlgpKQorI2RlZmluZSBJU19MTF9JMlNfTU9ERShfX1ZBTFVFX18pICAgICAgICAoKChfX1ZBTFVFX18pID09IExMX0kyU19NT0RFX1NMQVZFX1RYKSAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX0kyU19NT0RFX1NMQVZFX1JYKSAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX0kyU19NT0RFX01BU1RFUl9UWCkgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX0kyU19NT0RFX01BU1RFUl9SWCkpCiAKICNkZWZpbmUgSVNfTExfSTJTX01DTEtfT1VUUFVUKF9fVkFMVUVfXykgKCgoX19WQUxVRV9fKSA9PSBMTF9JMlNfTUNMS19PVVRQVVRfRU5BQkxFKSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfSTJTX01DTEtfT1VUUFVUX0RJU0FCTEUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX0kyU19NQ0xLX09VVFBVVF9ESVNBQkxFKSkKIAotI2RlZmluZSBJU19MTF9JMlNfQVVESU9fRlJFUShfX1ZBTFVFX18pICgoKChfX1ZBTFVFX18pID49IExMX0kyU19BVURJT0ZSRVFfOEspICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICgoX19WQUxVRV9fKSA8PSBMTF9JMlNfQVVESU9GUkVRXzE5MkspKSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfSTJTX0FVRElPRlJFUV9ERUZBVUxUKSkKKyNkZWZpbmUgSVNfTExfSTJTX0FVRElPX0ZSRVEoX19WQUxVRV9fKSAoKCgoX19WQUxVRV9fKSA+PSBMTF9JMlNfQVVESU9GUkVRXzhLKSAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoKF9fVkFMVUVfXykgPD0gTExfSTJTX0FVRElPRlJFUV8xOTJLKSkgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfSTJTX0FVRElPRlJFUV9ERUZBVUxUKSkKIAogI2RlZmluZSBJU19MTF9JMlNfUFJFU0NBTEVSX0xJTkVBUihfX1ZBTFVFX18pICAoKF9fVkFMVUVfXykgPj0gMHgyVSkKIAogI2RlZmluZSBJU19MTF9JMlNfUFJFU0NBTEVSX1BBUklUWShfX1ZBTFVFX18pICgoKF9fVkFMVUVfXykgPT0gTExfSTJTX1BSRVNDQUxFUl9QQVJJVFlfRVZFTikgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9JMlNfUFJFU0NBTEVSX1BBUklUWV9PREQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfSTJTX1BSRVNDQUxFUl9QQVJJVFlfT0REKSkKIC8qKgogICAqIEB9CiAgICovCkBAIC0zOTksNyArMzk5LDkgQEAKICAgKi8KIEVycm9yU3RhdHVzIExMX0kyU19Jbml0KFNQSV9UeXBlRGVmICpTUEl4LCBMTF9JMlNfSW5pdFR5cGVEZWYgKkkyU19Jbml0U3RydWN0KQogewotICB1aW50MzJfdCBpMnNkaXYgPSAyVSwgaTJzb2RkID0gMFUsIHBhY2tldGxlbmd0aCA9IDFVOworICB1aW50MzJfdCBpMnNkaXYgPSAyVTsKKyAgdWludDMyX3QgaTJzb2RkID0gMFU7CisgIHVpbnQzMl90IHBhY2tldGxlbmd0aCA9IDFVOwogICB1aW50MzJfdCB0bXA7CiAgIHVpbnQzMl90IHNvdXJjZWNsb2NrOwogICBFcnJvclN0YXR1cyBzdGF0dXMgPSBFUlJPUjsKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmY0eHhfbGxfdGltLmMgYi9TcmMvc3RtMzJmNHh4X2xsX3RpbS5jCmluZGV4IGY5OWQyOWYuLmJlZTkxOWIgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmY0eHhfbGxfdGltLmMKKysrIGIvU3JjL3N0bTMyZjR4eF9sbF90aW0uYwpAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgInN0bTMyX2Fzc2VydC5oIgogI2Vsc2UKICNkZWZpbmUgYXNzZXJ0X3BhcmFtKGV4cHIpICgodm9pZCkwVSkKLSNlbmRpZgorI2VuZGlmIC8qIFVTRV9GVUxMX0FTU0VSVCAqLwogCiAvKiogQGFkZHRvZ3JvdXAgU1RNMzJGNHh4X0xMX0RyaXZlcgogICAqIEB7CkBAIC00Niw4OSArNDYsODkgQEAKICAgKiBAewogICAqLwogI2RlZmluZSBJU19MTF9USU1fQ09VTlRFUk1PREUoX19WQUxVRV9fKSAoKChfX1ZBTFVFX18pID09IExMX1RJTV9DT1VOVEVSTU9ERV9VUCkgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX1RJTV9DT1VOVEVSTU9ERV9ET1dOKSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfVElNX0NPVU5URVJNT0RFX0NFTlRFUl9VUCkgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX1RJTV9DT1VOVEVSTU9ERV9DRU5URVJfRE9XTikgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX1RJTV9DT1VOVEVSTU9ERV9DRU5URVJfVVBfRE9XTikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfVElNX0NPVU5URVJNT0RFX0RPV04pIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9USU1fQ09VTlRFUk1PREVfQ0VOVEVSX1VQKSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfVElNX0NPVU5URVJNT0RFX0NFTlRFUl9ET1dOKSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfVElNX0NPVU5URVJNT0RFX0NFTlRFUl9VUF9ET1dOKSkKIAogI2RlZmluZSBJU19MTF9USU1fQ0xPQ0tESVZJU0lPTihfX1ZBTFVFX18pICgoKF9fVkFMVUVfXykgPT0gTExfVElNX0NMT0NLRElWSVNJT05fRElWMSkgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfVElNX0NMT0NLRElWSVNJT05fRElWMikgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfVElNX0NMT0NLRElWSVNJT05fRElWNCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9USU1fQ0xPQ0tESVZJU0lPTl9ESVYyKSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9USU1fQ0xPQ0tESVZJU0lPTl9ESVY0KSkKIAogI2RlZmluZSBJU19MTF9USU1fT0NNT0RFKF9fVkFMVUVfXykgKCgoX19WQUxVRV9fKSA9PSBMTF9USU1fT0NNT0RFX0ZST1pFTikgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9USU1fT0NNT0RFX0FDVElWRSkgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9USU1fT0NNT0RFX0lOQUNUSVZFKSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX1RJTV9PQ01PREVfVE9HR0xFKSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX1RJTV9PQ01PREVfRk9SQ0VEX0lOQUNUSVZFKSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX1RJTV9PQ01PREVfRk9SQ0VEX0FDVElWRSkgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9USU1fT0NNT0RFX1BXTTEpIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfVElNX09DTU9ERV9QV00yKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfVElNX09DTU9ERV9BQ1RJVkUpIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfVElNX09DTU9ERV9JTkFDVElWRSkgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9USU1fT0NNT0RFX1RPR0dMRSkgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9USU1fT0NNT0RFX0ZPUkNFRF9JTkFDVElWRSkgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9USU1fT0NNT0RFX0ZPUkNFRF9BQ1RJVkUpIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfVElNX09DTU9ERV9QV00xKSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX1RJTV9PQ01PREVfUFdNMikpCiAKICNkZWZpbmUgSVNfTExfVElNX09DU1RBVEUoX19WQUxVRV9fKSAoKChfX1ZBTFVFX18pID09IExMX1RJTV9PQ1NUQVRFX0RJU0FCTEUpIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX1RJTV9PQ1NUQVRFX0VOQUJMRSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9USU1fT0NTVEFURV9FTkFCTEUpKQogCiAjZGVmaW5lIElTX0xMX1RJTV9PQ1BPTEFSSVRZKF9fVkFMVUVfXykgKCgoX19WQUxVRV9fKSA9PSBMTF9USU1fT0NQT0xBUklUWV9ISUdIKSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9USU1fT0NQT0xBUklUWV9MT1cpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfVElNX09DUE9MQVJJVFlfTE9XKSkKIAogI2RlZmluZSBJU19MTF9USU1fT0NJRExFU1RBVEUoX19WQUxVRV9fKSAoKChfX1ZBTFVFX18pID09IExMX1RJTV9PQ0lETEVTVEFURV9MT1cpIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9USU1fT0NJRExFU1RBVEVfSElHSCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfVElNX09DSURMRVNUQVRFX0hJR0gpKQogCiAjZGVmaW5lIElTX0xMX1RJTV9BQ1RJVkVJTlBVVChfX1ZBTFVFX18pICgoKF9fVkFMVUVfXykgPT0gTExfVElNX0FDVElWRUlOUFVUX0RJUkVDVFRJKSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfVElNX0FDVElWRUlOUFVUX0lORElSRUNUVEkpIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9USU1fQUNUSVZFSU5QVVRfVFJDKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9USU1fQUNUSVZFSU5QVVRfSU5ESVJFQ1RUSSkgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX1RJTV9BQ1RJVkVJTlBVVF9UUkMpKQogCiAjZGVmaW5lIElTX0xMX1RJTV9JQ1BTQyhfX1ZBTFVFX18pICgoKF9fVkFMVUVfXykgPT0gTExfVElNX0lDUFNDX0RJVjEpIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9USU1fSUNQU0NfRElWMikgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX1RJTV9JQ1BTQ19ESVY0KSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfVElNX0lDUFNDX0RJVjgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX1RJTV9JQ1BTQ19ESVYyKSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfVElNX0lDUFNDX0RJVjQpIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9USU1fSUNQU0NfRElWOCkpCiAKICNkZWZpbmUgSVNfTExfVElNX0lDX0ZJTFRFUihfX1ZBTFVFX18pICgoKF9fVkFMVUVfXykgPT0gTExfVElNX0lDX0ZJTFRFUl9GRElWMSkgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9USU1fSUNfRklMVEVSX0ZESVYxX04yKSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX1RJTV9JQ19GSUxURVJfRkRJVjFfTjQpIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfVElNX0lDX0ZJTFRFUl9GRElWMV9OOCkgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9USU1fSUNfRklMVEVSX0ZESVYyX042KSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX1RJTV9JQ19GSUxURVJfRkRJVjJfTjgpIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfVElNX0lDX0ZJTFRFUl9GRElWNF9ONikgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9USU1fSUNfRklMVEVSX0ZESVY0X044KSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX1RJTV9JQ19GSUxURVJfRkRJVjhfTjYpIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfVElNX0lDX0ZJTFRFUl9GRElWOF9OOCkgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9USU1fSUNfRklMVEVSX0ZESVYxNl9ONSkgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9USU1fSUNfRklMVEVSX0ZESVYxNl9ONikgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9USU1fSUNfRklMVEVSX0ZESVYxNl9OOCkgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9USU1fSUNfRklMVEVSX0ZESVYzMl9ONSkgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9USU1fSUNfRklMVEVSX0ZESVYzMl9ONikgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9USU1fSUNfRklMVEVSX0ZESVYzMl9OOCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX1RJTV9JQ19GSUxURVJfRkRJVjFfTjIpIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfVElNX0lDX0ZJTFRFUl9GRElWMV9ONCkgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9USU1fSUNfRklMVEVSX0ZESVYxX044KSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX1RJTV9JQ19GSUxURVJfRkRJVjJfTjYpIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfVElNX0lDX0ZJTFRFUl9GRElWMl9OOCkgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9USU1fSUNfRklMVEVSX0ZESVY0X042KSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX1RJTV9JQ19GSUxURVJfRkRJVjRfTjgpIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfVElNX0lDX0ZJTFRFUl9GRElWOF9ONikgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9USU1fSUNfRklMVEVSX0ZESVY4X044KSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX1RJTV9JQ19GSUxURVJfRkRJVjE2X041KSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX1RJTV9JQ19GSUxURVJfRkRJVjE2X042KSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX1RJTV9JQ19GSUxURVJfRkRJVjE2X044KSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX1RJTV9JQ19GSUxURVJfRkRJVjMyX041KSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX1RJTV9JQ19GSUxURVJfRkRJVjMyX042KSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX1RJTV9JQ19GSUxURVJfRkRJVjMyX044KSkKIAogI2RlZmluZSBJU19MTF9USU1fSUNfUE9MQVJJVFkoX19WQUxVRV9fKSAoKChfX1ZBTFVFX18pID09IExMX1RJTV9JQ19QT0xBUklUWV9SSVNJTkcpIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9USU1fSUNfUE9MQVJJVFlfRkFMTElORykgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX1RJTV9JQ19QT0xBUklUWV9CT1RIRURHRSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfVElNX0lDX1BPTEFSSVRZX0ZBTExJTkcpIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9USU1fSUNfUE9MQVJJVFlfQk9USEVER0UpKQogCiAjZGVmaW5lIElTX0xMX1RJTV9FTkNPREVSTU9ERShfX1ZBTFVFX18pICgoKF9fVkFMVUVfXykgPT0gTExfVElNX0VOQ09ERVJNT0RFX1gyX1RJMSkgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX1RJTV9FTkNPREVSTU9ERV9YMl9USTIpIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9USU1fRU5DT0RFUk1PREVfWDRfVEkxMikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfVElNX0VOQ09ERVJNT0RFX1gyX1RJMikgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX1RJTV9FTkNPREVSTU9ERV9YNF9USTEyKSkKIAogI2RlZmluZSBJU19MTF9USU1fSUNfUE9MQVJJVFlfRU5DT0RFUihfX1ZBTFVFX18pICgoKF9fVkFMVUVfXykgPT0gTExfVElNX0lDX1BPTEFSSVRZX1JJU0lORykgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfVElNX0lDX1BPTEFSSVRZX0ZBTExJTkcpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfVElNX0lDX1BPTEFSSVRZX0ZBTExJTkcpKQogCiAjZGVmaW5lIElTX0xMX1RJTV9PU1NSX1NUQVRFKF9fVkFMVUVfXykgKCgoX19WQUxVRV9fKSA9PSBMTF9USU1fT1NTUl9ESVNBQkxFKSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX1RJTV9PU1NSX0VOQUJMRSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9USU1fT1NTUl9FTkFCTEUpKQogCiAjZGVmaW5lIElTX0xMX1RJTV9PU1NJX1NUQVRFKF9fVkFMVUVfXykgKCgoX19WQUxVRV9fKSA9PSBMTF9USU1fT1NTSV9ESVNBQkxFKSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9USU1fT1NTSV9FTkFCTEUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfVElNX09TU0lfRU5BQkxFKSkKIAogI2RlZmluZSBJU19MTF9USU1fTE9DS19MRVZFTChfX1ZBTFVFX18pICgoKF9fVkFMVUVfXykgPT0gTExfVElNX0xPQ0tMRVZFTF9PRkYpIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX1RJTV9MT0NLTEVWRUxfMSkgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9USU1fTE9DS0xFVkVMXzIpICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfVElNX0xPQ0tMRVZFTF8zKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX1RJTV9MT0NLTEVWRUxfMSkgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9USU1fTE9DS0xFVkVMXzIpICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfVElNX0xPQ0tMRVZFTF8zKSkKIAogI2RlZmluZSBJU19MTF9USU1fQlJFQUtfU1RBVEUoX19WQUxVRV9fKSAoKChfX1ZBTFVFX18pID09IExMX1RJTV9CUkVBS19ESVNBQkxFKSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfVElNX0JSRUFLX0VOQUJMRSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfVElNX0JSRUFLX0VOQUJMRSkpCiAKICNkZWZpbmUgSVNfTExfVElNX0JSRUFLX1BPTEFSSVRZKF9fVkFMVUVfXykgKCgoX19WQUxVRV9fKSA9PSBMTF9USU1fQlJFQUtfUE9MQVJJVFlfTE9XKSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfVElNX0JSRUFLX1BPTEFSSVRZX0hJR0gpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX1RJTV9CUkVBS19QT0xBUklUWV9ISUdIKSkKIAogI2RlZmluZSBJU19MTF9USU1fQVVUT01BVElDX09VVFBVVF9TVEFURShfX1ZBTFVFX18pICgoKF9fVkFMVUVfXykgPT0gTExfVElNX0FVVE9NQVRJQ09VVFBVVF9ESVNBQkxFKSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9USU1fQVVUT01BVElDT1VUUFVUX0VOQUJMRSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9USU1fQVVUT01BVElDT1VUUFVUX0VOQUJMRSkpCiAvKioKICAgKiBAfQogICAqLwpAQCAtNjY5LDcgKzY2OSw3IEBACiAgICogQG5vdGUgQXMgdGhlIGJpdHMgQU9FLCBCS1AsIEJLRSwgT1NTUiwgT1NTSSBhbmQgRFRHWzc6MF0gY2FuIGJlIHdyaXRlLWxvY2tlZAogICAqICBkZXBlbmRpbmcgb24gdGhlIExPQ0sgY29uZmlndXJhdGlvbiwgaXQgY2FuIGJlIG5lY2Vzc2FyeSB0byBjb25maWd1cmUgYWxsIG9mCiAgICogIHRoZW0gZHVyaW5nIHRoZSBmaXJzdCB3cml0ZSBhY2Nlc3MgdG8gdGhlIFRJTXhfQkRUUiByZWdpc3Rlci4KLSAgKiBAbm90ZSBNYWNybyBAcmVmIElTX1RJTV9CUkVBS19JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlIE1hY3JvIElTX1RJTV9CUkVBS19JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgIGEgdGltZXIgaW5zdGFuY2UgcHJvdmlkZXMgYSBicmVhayBpbnB1dC4KICAgKiBAcGFyYW0gIFRJTXggVGltZXIgSW5zdGFuY2UKICAgKiBAcGFyYW0gIFRJTV9CRFRSSW5pdFN0cnVjdCBwb2ludGVyIHRvIGEgQHJlZiBMTF9USU1fQkRUUl9Jbml0VHlwZURlZiBzdHJ1Y3R1cmUgKEJyZWFrIGFuZCBEZWFkIFRpbWUgY29uZmlndXJhdGlvbiBkYXRhIHN0cnVjdHVyZSkKQEAgLTcxNyw3ICs3MTcsNyBAQAogICAqLwogCiAvKiogQGFkZHRvZ3JvdXAgVElNX0xMX1ByaXZhdGVfRnVuY3Rpb25zIFRJTSBQcml2YXRlIEZ1bmN0aW9ucwotICogIEBicmllZiAgIFByaXZhdGUgZnVuY3Rpb25zCisgICogIEBicmllZiAgIFByaXZhdGUgZnVuY3Rpb25zCiAgICogQHsKICAgKi8KIC8qKgpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjR4eF9sbF91c2FydC5jIGIvU3JjL3N0bTMyZjR4eF9sbF91c2FydC5jCmluZGV4IGRhYjRmZGQuLjFjM2RkMGMgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmY0eHhfbGxfdXNhcnQuYworKysgYi9TcmMvc3RtMzJmNHh4X2xsX3VzYXJ0LmMKQEAgLTM0NiwxMyArMzQ2LDEzIEBACiAjaWYgZGVmaW5lZChVQVJUOSkKICAgICBlbHNlIGlmIChVU0FSVHggPT0gVUFSVDkpCiAgICAgewotICAgICAgcGVyaXBoY2xrID0gcmNjX2Nsb2Nrcy5QQ0xLMV9GcmVxdWVuY3k7CisgICAgICBwZXJpcGhjbGsgPSByY2NfY2xvY2tzLlBDTEsyX0ZyZXF1ZW5jeTsKICAgICB9CiAjZW5kaWYgLyogVUFSVDkgKi8KICNpZiBkZWZpbmVkKFVBUlQxMCkKICAgICBlbHNlIGlmIChVU0FSVHggPT0gVUFSVDEwKQogICAgIHsKLSAgICAgIHBlcmlwaGNsayA9IHJjY19jbG9ja3MuUENMSzFfRnJlcXVlbmN5OworICAgICAgcGVyaXBoY2xrID0gcmNjX2Nsb2Nrcy5QQ0xLMl9GcmVxdWVuY3k7CiAgICAgfQogI2VuZGlmIC8qIFVBUlQxMCAqLwogICAgIGVsc2UK