ZGlmZiAtLWdpdCBhL0luYy9MZWdhY3kvc3RtMzJfaGFsX2xlZ2FjeS5oIGIvSW5jL0xlZ2FjeS9zdG0zMl9oYWxfbGVnYWN5LmgKaW5kZXggOTA3NjdlZC4uMjk5ZWQ3MCAxMDA2NDQKLS0tIGEvSW5jL0xlZ2FjeS9zdG0zMl9oYWxfbGVnYWN5LmgKKysrIGIvSW5jL0xlZ2FjeS9zdG0zMl9oYWxfbGVnYWN5LmgKQEAgLTIzLDcgKzIzLDcgQEAKICNkZWZpbmUgU1RNMzJfSEFMX0xFR0FDWQogCiAjaWZkZWYgX19jcGx1c3BsdXMKLSBleHRlcm4gIkMiIHsKK2V4dGVybiAiQyIgewogI2VuZGlmCiAKIC8qIEluY2x1ZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0zOCw3ICszOCw2IEBACiAjZGVmaW5lIEFFU19DTEVBUkZMQUdfQ0NGICAgICAgICAgICAgICAgQ1JZUF9DTEVBUkZMQUdfQ0NGCiAjZGVmaW5lIEFFU19DTEVBUkZMQUdfUkRFUlIgICAgICAgICAgICAgQ1JZUF9DTEVBUkZMQUdfUkRFUlIKICNkZWZpbmUgQUVTX0NMRUFSRkxBR19XUkVSUiAgICAgICAgICAgICBDUllQX0NMRUFSRkxBR19XUkVSUgotCiAvKioKICAgKiBAfQogICAqLwpAQCAtMjQxLDcgKzI0MCw3IEBACiAjZGVmaW5lIERBQ19DSElQQ09OTkVDVF9FTkFCTEUgICAgICAgIERBQ19DSElQQ09OTkVDVF9JTlRFUk5BTAogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKFNUTTMyTDEpIHx8IGRlZmluZWQoU1RNMzJMNCkgfHwgZGVmaW5lZChTVE0zMkcwKSB8fCBkZWZpbmVkKFNUTTMyTDUpIHx8IGRlZmluZWQoU1RNMzJINykgfHwgZGVmaW5lZChTVE0zMkY0KQorI2lmIGRlZmluZWQoU1RNMzJMMSkgfHwgZGVmaW5lZChTVE0zMkw0KSB8fCBkZWZpbmVkKFNUTTMyRzApIHx8IGRlZmluZWQoU1RNMzJMNSkgfHwgZGVmaW5lZChTVE0zMkg3KSB8fCBkZWZpbmVkKFNUTTMyRjQpIHx8IGRlZmluZWQoU1RNMzJHNCkKICNkZWZpbmUgSEFMX0RBQ19NU1BfSU5JVF9DQl9JRCAgICAgICBIQUxfREFDX01TUElOSVRfQ0JfSUQKICNkZWZpbmUgSEFMX0RBQ19NU1BfREVJTklUX0NCX0lEICAgICBIQUxfREFDX01TUERFSU5JVF9DQl9JRAogI2VuZGlmCkBAIC0zMTMsOCArMzEyLDEzIEBACiAjZW5kaWYgLyogU1RNMzJMNCAqLwogCiAjaWYgZGVmaW5lZChTVE0zMkcwKQotI2RlZmluZSBETUFfUkVRVUVTVF9EQUMxX0NIQU5ORUwxCQkJCQkJCQkgRE1BX1JFUVVFU1RfREFDMV9DSDEKLSNkZWZpbmUgRE1BX1JFUVVFU1RfREFDMV9DSEFOTkVMMgkJCQkJCQkJIERNQV9SRVFVRVNUX0RBQzFfQ0gyCisjZGVmaW5lIERNQV9SRVFVRVNUX0RBQzFfQ0hBTk5FTDEgICAgICAgICAgICAgICAgRE1BX1JFUVVFU1RfREFDMV9DSDEKKyNkZWZpbmUgRE1BX1JFUVVFU1RfREFDMV9DSEFOTkVMMiAgICAgICAgICAgICAgICBETUFfUkVRVUVTVF9EQUMxX0NIMgorI2RlZmluZSBETUFfUkVRVUVTVF9USU0xNl9UUklHX0NPTSAgICAgICAgICAgICAgIERNQV9SRVFVRVNUX1RJTTE2X0NPTQorI2RlZmluZSBETUFfUkVRVUVTVF9USU0xN19UUklHX0NPTSAgICAgICAgICAgICAgIERNQV9SRVFVRVNUX1RJTTE3X0NPTQorCisjZGVmaW5lIExMX0RNQU1VWF9SRVFfVElNMTZfVFJJR19DT00gICAgICAgICAgICAgTExfRE1BTVVYX1JFUV9USU0xNl9DT00KKyNkZWZpbmUgTExfRE1BTVVYX1JFUV9USU0xN19UUklHX0NPTSAgICAgICAgICAgICBMTF9ETUFNVVhfUkVRX1RJTTE3X0NPTQogI2VuZGlmCiAKICNpZiBkZWZpbmVkKFNUTTMySDcpCkBAIC01OTEsMjQgKzU5NSwyNCBAQAogI2RlZmluZSBHUElPX0FGMV9MUFRJTSAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUElPX0FGMV9MUFRJTTEKICNkZWZpbmUgR1BJT19BRjJfTFBUSU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgR1BJT19BRjJfTFBUSU0xCiAKLSNpZiBkZWZpbmVkKFNUTTMyTDApIHx8IGRlZmluZWQoU1RNMzJMNCkgfHwgZGVmaW5lZChTVE0zMkY0KSB8fCBkZWZpbmVkKFNUTTMyRjIpIHx8IGRlZmluZWQoU1RNMzJGNykgfHwgZGVmaW5lZChTVE0zMkc0KSB8fCBkZWZpbmVkKFNUTTMySDcpCisjaWYgZGVmaW5lZChTVE0zMkwwKSB8fCBkZWZpbmVkKFNUTTMyTDQpIHx8IGRlZmluZWQoU1RNMzJGNCkgfHwgZGVmaW5lZChTVE0zMkYyKSB8fCBkZWZpbmVkKFNUTTMyRjcpIHx8IGRlZmluZWQoU1RNMzJHNCkgfHwgZGVmaW5lZChTVE0zMkg3KSB8fCBkZWZpbmVkKFNUTTMyV0IpCiAjZGVmaW5lICBHUElPX1NQRUVEX0xPVyAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQSU9fU1BFRURfRlJFUV9MT1cKICNkZWZpbmUgIEdQSU9fU1BFRURfTUVESVVNICAgICAgICAgICAgICAgICAgICAgICAgR1BJT19TUEVFRF9GUkVRX01FRElVTQogI2RlZmluZSAgR1BJT19TUEVFRF9GQVNUICAgICAgICAgICAgICAgICAgICAgICAgICBHUElPX1NQRUVEX0ZSRVFfSElHSAogI2RlZmluZSAgR1BJT19TUEVFRF9ISUdIICAgICAgICAgICAgICAgICAgICAgICAgICBHUElPX1NQRUVEX0ZSRVFfVkVSWV9ISUdICi0jZW5kaWYgLyogU1RNMzJMMCB8fCBTVE0zMkw0IHx8IFNUTTMyRjQgfHwgU1RNMzJGMiB8fCBTVE0zMkY3IHx8IFNUTTMyRzQgfHwgU1RNMzJINyovCisjZW5kaWYgLyogU1RNMzJMMCB8fCBTVE0zMkw0IHx8IFNUTTMyRjQgfHwgU1RNMzJGMiB8fCBTVE0zMkY3IHx8IFNUTTMyRzQgfHwgU1RNMzJINyB8fCBTVE0zMldCKi8KIAogI2lmIGRlZmluZWQoU1RNMzJMMSkKLSAjZGVmaW5lICBHUElPX1NQRUVEX1ZFUllfTE9XICAgIEdQSU9fU1BFRURfRlJFUV9MT1cKLSAjZGVmaW5lICBHUElPX1NQRUVEX0xPVyAgICAgICAgIEdQSU9fU1BFRURfRlJFUV9NRURJVU0KLSAjZGVmaW5lICBHUElPX1NQRUVEX01FRElVTSAgICAgIEdQSU9fU1BFRURfRlJFUV9ISUdICi0gI2RlZmluZSAgR1BJT19TUEVFRF9ISUdIICAgICAgICBHUElPX1NQRUVEX0ZSRVFfVkVSWV9ISUdICisjZGVmaW5lICBHUElPX1NQRUVEX1ZFUllfTE9XICAgIEdQSU9fU1BFRURfRlJFUV9MT1cKKyNkZWZpbmUgIEdQSU9fU1BFRURfTE9XICAgICAgICAgR1BJT19TUEVFRF9GUkVRX01FRElVTQorI2RlZmluZSAgR1BJT19TUEVFRF9NRURJVU0gICAgICBHUElPX1NQRUVEX0ZSRVFfSElHSAorI2RlZmluZSAgR1BJT19TUEVFRF9ISUdIICAgICAgICBHUElPX1NQRUVEX0ZSRVFfVkVSWV9ISUdICiAjZW5kaWYgLyogU1RNMzJMMSAqLwogCiAjaWYgZGVmaW5lZChTVE0zMkYwKSB8fCBkZWZpbmVkKFNUTTMyRjMpIHx8IGRlZmluZWQoU1RNMzJGMSkKLSAjZGVmaW5lICBHUElPX1NQRUVEX0xPVyAgICBHUElPX1NQRUVEX0ZSRVFfTE9XCi0gI2RlZmluZSAgR1BJT19TUEVFRF9NRURJVU0gR1BJT19TUEVFRF9GUkVRX01FRElVTQotICNkZWZpbmUgIEdQSU9fU1BFRURfSElHSCAgIEdQSU9fU1BFRURfRlJFUV9ISUdICisjZGVmaW5lICBHUElPX1NQRUVEX0xPVyAgICBHUElPX1NQRUVEX0ZSRVFfTE9XCisjZGVmaW5lICBHUElPX1NQRUVEX01FRElVTSBHUElPX1NQRUVEX0ZSRVFfTUVESVVNCisjZGVmaW5lICBHUElPX1NQRUVEX0hJR0ggICBHUElPX1NQRUVEX0ZSRVFfSElHSAogI2VuZGlmIC8qIFNUTTMyRjAgfHwgU1RNMzJGMyB8fCBTVE0zMkYxICovCiAKICNkZWZpbmUgR1BJT19BRjZfREZTRE0gICAgICAgICAgICAgICAgICAgICAgICAgICAgR1BJT19BRjZfREZTRE0xCkBAIC02NDMsNiArNjQ3LDEwIEBACiAjZGVmaW5lIEhBTF9IUlRJTV9FeHRlcm5hbEV2ZW50Q291bnRlckVuYWJsZSAgICBIQUxfSFJUSU1fRXh0RXZlbnRDb3VudGVyRW5hYmxlCiAjZGVmaW5lIEhBTF9IUlRJTV9FeHRlcm5hbEV2ZW50Q291bnRlckRpc2FibGUgICBIQUxfSFJUSU1fRXh0RXZlbnRDb3VudGVyRGlzYWJsZQogI2RlZmluZSBIQUxfSFJUSU1fRXh0ZXJuYWxFdmVudENvdW50ZXJSZXNldCAgICAgSEFMX0hSVElNX0V4dEV2ZW50Q291bnRlclJlc2V0CisjZGVmaW5lIEhSVElNX1RJTUVFVkVOVF9BICAgICAgICAgICAgICAgICAgICAgICBIUlRJTV9FVkVOVENPVU5URVJfQQorI2RlZmluZSBIUlRJTV9USU1FRVZFTlRfQiAgICAgICAgICAgICAgICAgICAgICAgSFJUSU1fRVZFTlRDT1VOVEVSX0IKKyNkZWZpbmUgSFJUSU1fVElNRUVWRU5UUkVTRVRNT0RFX1VOQ09ORElUSU9OQUwgIEhSVElNX0VWRU5UQ09VTlRFUl9SU1RNT0RFX1VOQ09ORElUSU9OQUwKKyNkZWZpbmUgSFJUSU1fVElNRUVWRU5UUkVTRVRNT0RFX0NPTkRJVElPTkFMICAgIEhSVElNX0VWRU5UQ09VTlRFUl9SU1RNT0RFX0NPTkRJVElPTkFMCiAjZW5kaWYgLyogU1RNMzJHNCAqLwogCiAjaWYgZGVmaW5lZChTVE0zMkg3KQpAQCAtNzY1LDQ5ICs3NzMsNiBAQAogI2RlZmluZSBIUlRJTV9FVkVOVFNSQ18zICAgICAgICAgICAgICAoSFJUSU1fRUVDUjFfRUUxU1JDXzEpCiAjZGVmaW5lIEhSVElNX0VWRU5UU1JDXzQgICAgICAgICAgICAgIChIUlRJTV9FRUNSMV9FRTFTUkNfMSB8IEhSVElNX0VFQ1IxX0VFMVNSQ18wKQogCi0vKiogQGJyaWVmIENvbnN0YW50cyBkZWZpbmluZyB0aGUgZXZlbnRzIHRoYXQgY2FuIGJlIHNlbGVjdGVkIHRvIGNvbmZpZ3VyZSB0aGUKLSAgKiAgICAgICAgc2V0L3Jlc2V0IGNyb3NzYmFyIG9mIGEgdGltZXIgb3V0cHV0Ci0gICovCi0jZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1FVl8xICAgICAgIChIUlRJTV9TRVQxUl9USU1FVk5UMSkKLSNkZWZpbmUgSFJUSU1fT1VUUFVUU0VUX1RJTUVWXzIgICAgICAgKEhSVElNX1NFVDFSX1RJTUVWTlQyKQotI2RlZmluZSBIUlRJTV9PVVRQVVRTRVRfVElNRVZfMyAgICAgICAoSFJUSU1fU0VUMVJfVElNRVZOVDMpCi0jZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1FVl80ICAgICAgIChIUlRJTV9TRVQxUl9USU1FVk5UNCkKLSNkZWZpbmUgSFJUSU1fT1VUUFVUU0VUX1RJTUVWXzUgICAgICAgKEhSVElNX1NFVDFSX1RJTUVWTlQ1KQotI2RlZmluZSBIUlRJTV9PVVRQVVRTRVRfVElNRVZfNiAgICAgICAoSFJUSU1fU0VUMVJfVElNRVZOVDYpCi0jZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1FVl83ICAgICAgIChIUlRJTV9TRVQxUl9USU1FVk5UNykKLSNkZWZpbmUgSFJUSU1fT1VUUFVUU0VUX1RJTUVWXzggICAgICAgKEhSVElNX1NFVDFSX1RJTUVWTlQ4KQotI2RlZmluZSBIUlRJTV9PVVRQVVRTRVRfVElNRVZfOSAgICAgICAoSFJUSU1fU0VUMVJfVElNRVZOVDkpCi0KLSNkZWZpbmUgSFJUSU1fT1VUUFVUUkVTRVRfVElNRVZfMSAgICAgKEhSVElNX1JTVDFSX1RJTUVWTlQxKQotI2RlZmluZSBIUlRJTV9PVVRQVVRSRVNFVF9USU1FVl8yICAgICAoSFJUSU1fUlNUMVJfVElNRVZOVDIpCi0jZGVmaW5lIEhSVElNX09VVFBVVFJFU0VUX1RJTUVWXzMgICAgIChIUlRJTV9SU1QxUl9USU1FVk5UMykKLSNkZWZpbmUgSFJUSU1fT1VUUFVUUkVTRVRfVElNRVZfNCAgICAgKEhSVElNX1JTVDFSX1RJTUVWTlQ0KQotI2RlZmluZSBIUlRJTV9PVVRQVVRSRVNFVF9USU1FVl81ICAgICAoSFJUSU1fUlNUMVJfVElNRVZOVDUpCi0jZGVmaW5lIEhSVElNX09VVFBVVFJFU0VUX1RJTUVWXzYgICAgIChIUlRJTV9SU1QxUl9USU1FVk5UNikKLSNkZWZpbmUgSFJUSU1fT1VUUFVUUkVTRVRfVElNRVZfNyAgICAgKEhSVElNX1JTVDFSX1RJTUVWTlQ3KQotI2RlZmluZSBIUlRJTV9PVVRQVVRSRVNFVF9USU1FVl84ICAgICAoSFJUSU1fUlNUMVJfVElNRVZOVDgpCi0jZGVmaW5lIEhSVElNX09VVFBVVFJFU0VUX1RJTUVWXzkgICAgIChIUlRJTV9SU1QxUl9USU1FVk5UOSkKLQotLyoqIEBicmllZiBDb25zdGFudHMgZGVmaW5pbmcgdGhlIGV2ZW50IGZpbHRlcmluZyBhcHBsaWVkIHRvIGV4dGVybmFsIGV2ZW50cwotICAqICAgICAgICBieSBhIHRpbWVyCi0gICovCi0jZGVmaW5lIEhSVElNX1RJTUVWRU5URklMVEVSX05PTkUgICAgICAgICAgICAgKDB4MDAwMDAwMDBVKQotI2RlZmluZSBIUlRJTV9USU1FVkVOVEZJTFRFUl9CTEFOS0lOR0NNUDEgICAgIChIUlRJTV9FRUZSMV9FRTFGTFRSXzApCi0jZGVmaW5lIEhSVElNX1RJTUVWRU5URklMVEVSX0JMQU5LSU5HQ01QMiAgICAgKEhSVElNX0VFRlIxX0VFMUZMVFJfMSkKLSNkZWZpbmUgSFJUSU1fVElNRVZFTlRGSUxURVJfQkxBTktJTkdDTVAzICAgICAoSFJUSU1fRUVGUjFfRUUxRkxUUl8xIHwgSFJUSU1fRUVGUjFfRUUxRkxUUl8wKQotI2RlZmluZSBIUlRJTV9USU1FVkVOVEZJTFRFUl9CTEFOS0lOR0NNUDQgICAgIChIUlRJTV9FRUZSMV9FRTFGTFRSXzIpCi0jZGVmaW5lIEhSVElNX1RJTUVWRU5URklMVEVSX0JMQU5LSU5HRkxUUjEgICAgKEhSVElNX0VFRlIxX0VFMUZMVFJfMiB8IEhSVElNX0VFRlIxX0VFMUZMVFJfMCkKLSNkZWZpbmUgSFJUSU1fVElNRVZFTlRGSUxURVJfQkxBTktJTkdGTFRSMiAgICAoSFJUSU1fRUVGUjFfRUUxRkxUUl8yIHwgSFJUSU1fRUVGUjFfRUUxRkxUUl8xKQotI2RlZmluZSBIUlRJTV9USU1FVkVOVEZJTFRFUl9CTEFOS0lOR0ZMVFIzICAgIChIUlRJTV9FRUZSMV9FRTFGTFRSXzIgfCBIUlRJTV9FRUZSMV9FRTFGTFRSXzEgfCBIUlRJTV9FRUZSMV9FRTFGTFRSXzApCi0jZGVmaW5lIEhSVElNX1RJTUVWRU5URklMVEVSX0JMQU5LSU5HRkxUUjQgICAgKEhSVElNX0VFRlIxX0VFMUZMVFJfMykKLSNkZWZpbmUgSFJUSU1fVElNRVZFTlRGSUxURVJfQkxBTktJTkdGTFRSNSAgICAoSFJUSU1fRUVGUjFfRUUxRkxUUl8zIHwgSFJUSU1fRUVGUjFfRUUxRkxUUl8wKQotI2RlZmluZSBIUlRJTV9USU1FVkVOVEZJTFRFUl9CTEFOS0lOR0ZMVFI2ICAgIChIUlRJTV9FRUZSMV9FRTFGTFRSXzMgfCBIUlRJTV9FRUZSMV9FRTFGTFRSXzEpCi0jZGVmaW5lIEhSVElNX1RJTUVWRU5URklMVEVSX0JMQU5LSU5HRkxUUjcgICAgKEhSVElNX0VFRlIxX0VFMUZMVFJfMyB8IEhSVElNX0VFRlIxX0VFMUZMVFJfMSB8IEhSVElNX0VFRlIxX0VFMUZMVFJfMCkKLSNkZWZpbmUgSFJUSU1fVElNRVZFTlRGSUxURVJfQkxBTktJTkdGTFRSOCAgICAoSFJUSU1fRUVGUjFfRUUxRkxUUl8zIHwgSFJUSU1fRUVGUjFfRUUxRkxUUl8yKQotI2RlZmluZSBIUlRJTV9USU1FVkVOVEZJTFRFUl9XSU5ET1dJTkdDTVAyICAgIChIUlRJTV9FRUZSMV9FRTFGTFRSXzMgfCBIUlRJTV9FRUZSMV9FRTFGTFRSXzIgfCBIUlRJTV9FRUZSMV9FRTFGTFRSXzApCi0jZGVmaW5lIEhSVElNX1RJTUVWRU5URklMVEVSX1dJTkRPV0lOR0NNUDMgICAgKEhSVElNX0VFRlIxX0VFMUZMVFJfMyB8IEhSVElNX0VFRlIxX0VFMUZMVFJfMiB8IEhSVElNX0VFRlIxX0VFMUZMVFJfMSkKLSNkZWZpbmUgSFJUSU1fVElNRVZFTlRGSUxURVJfV0lORE9XSU5HVElNICAgICAoSFJUSU1fRUVGUjFfRUUxRkxUUl8zIHwgSFJUSU1fRUVGUjFfRUUxRkxUUl8yIHwgSFJUSU1fRUVGUjFfRUUxRkxUUl8xIHwgSFJUSU1fRUVGUjFfRUUxRkxUUl8wKQotCiAvKiogQGJyaWVmIENvbnN0YW50cyBkZWZpbmluZyB0aGUgRExMIGNhbGlicmF0aW9uIHBlcmlvZHMgKGluIG1pY3JvIHNlY29uZHMpCiAgICovCiAjZGVmaW5lIEhSVElNX0NBTElCUkFUSU9OUkFURV83MzAwICAgICAgICAgICAgIDB4MDAwMDAwMDBVCkBAIC05NTUsMTEgKzkyMCwxNiBAQAogI2RlZmluZSBPUEFNUF9QR0FDT05ORUNUX1ZNMCAgICAgICAgICAgICAgICAgIE9QQU1QX1BHQV9DT05ORUNUX0lOVkVSVElOR0lOUFVUX0lPMAogI2RlZmluZSBPUEFNUF9QR0FDT05ORUNUX1ZNMSAgICAgICAgICAgICAgICAgIE9QQU1QX1BHQV9DT05ORUNUX0lOVkVSVElOR0lOUFVUX0lPMQogCi0jaWYgZGVmaW5lZChTVE0zMkwxKSB8fCBkZWZpbmVkKFNUTTMyTDQpIHx8IGRlZmluZWQoU1RNMzJMNSkgfHwgZGVmaW5lZChTVE0zMkg3KQorI2lmIGRlZmluZWQoU1RNMzJMMSkgfHwgZGVmaW5lZChTVE0zMkw0KSB8fCBkZWZpbmVkKFNUTTMyTDUpIHx8IGRlZmluZWQoU1RNMzJINykgfHwgZGVmaW5lZChTVE0zMkc0KQogI2RlZmluZSBIQUxfT1BBTVBfTVNQX0lOSVRfQ0JfSUQgICAgICAgSEFMX09QQU1QX01TUElOSVRfQ0JfSUQKICNkZWZpbmUgSEFMX09QQU1QX01TUF9ERUlOSVRfQ0JfSUQgICAgIEhBTF9PUEFNUF9NU1BERUlOSVRfQ0JfSUQKICNlbmRpZgogCisjaWYgZGVmaW5lZChTVE0zMkw0KSB8fCBkZWZpbmVkKFNUTTMyTDUpCisjZGVmaW5lIE9QQU1QX1BPV0VSTU9ERV9OT1JNQUwgICAgICAgICAgICAgICAgT1BBTVBfUE9XRVJNT0RFX05PUk1BTFBPV0VSCisjZWxpZiBkZWZpbmVkKFNUTTMyRzQpCisjZGVmaW5lIE9QQU1QX1BPV0VSTU9ERV9OT1JNQUwgICAgICAgICAgICAgICAgT1BBTVBfUE9XRVJNT0RFX05PUk1BTFNQRUVECisjZW5kaWYKIAogLyoqCiAgICogQH0KQEAgLTk3MSwxNSArOTQxLDE1IEBACiAjZGVmaW5lIEkyU19TVEFOREFSRF9QSElMTElQUyAgICAgIEkyU19TVEFOREFSRF9QSElMSVBTCiAKICNpZiBkZWZpbmVkKFNUTTMySDcpCi0gICNkZWZpbmUgSTJTX0lUX1RYRSAgICAgICAgICAgICAgIEkyU19JVF9UWFAKLSAgI2RlZmluZSBJMlNfSVRfUlhORSAgICAgICAgICAgICAgSTJTX0lUX1JYUAorI2RlZmluZSBJMlNfSVRfVFhFICAgICAgICAgICAgICAgSTJTX0lUX1RYUAorI2RlZmluZSBJMlNfSVRfUlhORSAgICAgICAgICAgICAgSTJTX0lUX1JYUAogCi0gICNkZWZpbmUgSTJTX0ZMQUdfVFhFICAgICAgICAgICAgIEkyU19GTEFHX1RYUAotICAjZGVmaW5lIEkyU19GTEFHX1JYTkUgICAgICAgICAgICBJMlNfRkxBR19SWFAKKyNkZWZpbmUgSTJTX0ZMQUdfVFhFICAgICAgICAgICAgIEkyU19GTEFHX1RYUAorI2RlZmluZSBJMlNfRkxBR19SWE5FICAgICAgICAgICAgSTJTX0ZMQUdfUlhQCiAjZW5kaWYKIAogI2lmIGRlZmluZWQoU1RNMzJGNykKLSAgI2RlZmluZSBJMlNfQ0xPQ0tfU1lTQ0xLICAgICAgICAgICBJMlNfQ0xPQ0tfUExMCisjZGVmaW5lIEkyU19DTE9DS19TWVNDTEsgICAgICAgICAgIEkyU19DTE9DS19QTEwKICNlbmRpZgogLyoqCiAgICogQH0KQEAgLTExMTQsMTYgKzEwODQsMTYgQEAKIAogI2lmIGRlZmluZWQoU1RNMzJINykKIAotICNkZWZpbmUgU1BJX0ZMQUdfVFhFICAgICAgICAgICAgICAgICAgICBTUElfRkxBR19UWFAKLSAjZGVmaW5lIFNQSV9GTEFHX1JYTkUgICAgICAgICAgICAgICAgICAgU1BJX0ZMQUdfUlhQCisjZGVmaW5lIFNQSV9GTEFHX1RYRSAgICAgICAgICAgICAgICAgICAgU1BJX0ZMQUdfVFhQCisjZGVmaW5lIFNQSV9GTEFHX1JYTkUgICAgICAgICAgICAgICAgICAgU1BJX0ZMQUdfUlhQCiAKLSAjZGVmaW5lIFNQSV9JVF9UWEUgICAgICAgICAgICAgICAgICAgICAgU1BJX0lUX1RYUAotICNkZWZpbmUgU1BJX0lUX1JYTkUgICAgICAgICAgICAgICAgICAgICBTUElfSVRfUlhQCisjZGVmaW5lIFNQSV9JVF9UWEUgICAgICAgICAgICAgICAgICAgICAgU1BJX0lUX1RYUAorI2RlZmluZSBTUElfSVRfUlhORSAgICAgICAgICAgICAgICAgICAgIFNQSV9JVF9SWFAKIAotICNkZWZpbmUgU1BJX0ZSTFZMX0VNUFRZICAgICAgICAgICAgICAgICBTUElfUlhfRklGT18wUEFDS0VUCi0gI2RlZmluZSBTUElfRlJMVkxfUVVBUlRFUl9GVUxMICAgICAgICAgIFNQSV9SWF9GSUZPXzFQQUNLRVQKLSAjZGVmaW5lIFNQSV9GUkxWTF9IQUxGX0ZVTEwgICAgICAgICAgICAgU1BJX1JYX0ZJRk9fMlBBQ0tFVAotICNkZWZpbmUgU1BJX0ZSTFZMX0ZVTEwgICAgICAgICAgICAgICAgICBTUElfUlhfRklGT18zUEFDS0VUCisjZGVmaW5lIFNQSV9GUkxWTF9FTVBUWSAgICAgICAgICAgICAgICAgU1BJX1JYX0ZJRk9fMFBBQ0tFVAorI2RlZmluZSBTUElfRlJMVkxfUVVBUlRFUl9GVUxMICAgICAgICAgIFNQSV9SWF9GSUZPXzFQQUNLRVQKKyNkZWZpbmUgU1BJX0ZSTFZMX0hBTEZfRlVMTCAgICAgICAgICAgICBTUElfUlhfRklGT18yUEFDS0VUCisjZGVmaW5lIFNQSV9GUkxWTF9GVUxMICAgICAgICAgICAgICAgICAgU1BJX1JYX0ZJRk9fM1BBQ0tFVAogCiAjZW5kaWYgLyogU1RNMzJINyAqLwogCkBAIC0xNDUwLDcgKzE0MjAsNyBAQAogI2RlZmluZSBIQVNIX0hNQUNLZXlUeXBlX1Nob3J0S2V5ICBIQVNIX0hNQUNfS0VZVFlQRV9TSE9SVEtFWQogI2RlZmluZSBIQVNIX0hNQUNLZXlUeXBlX0xvbmdLZXkgICBIQVNIX0hNQUNfS0VZVFlQRV9MT05HS0VZCiAKLSNpZiBkZWZpbmVkKFNUTTMyTDQpIHx8IGRlZmluZWQoU1RNMzJGNCkgfHwgZGVmaW5lZChTVE0zMkY3KSB8fCBkZWZpbmVkKFNUTTMySDcpCisjaWYgZGVmaW5lZChTVE0zMkw0KSB8fCBkZWZpbmVkKFNUTTMyTDUpIHx8IGRlZmluZWQoU1RNMzJGMikgfHwgZGVmaW5lZChTVE0zMkY0KSB8fCBkZWZpbmVkKFNUTTMyRjcpIHx8IGRlZmluZWQoU1RNMzJINykKIAogI2RlZmluZSBIQUxfSEFTSF9NRDVfQWNjdW11bGF0ZSAgICAgICAgICAgICAgICBIQUxfSEFTSF9NRDVfQWNjbWx0CiAjZGVmaW5lIEhBTF9IQVNIX01ENV9BY2N1bXVsYXRlX0VuZCAgICAgICAgICAgIEhBTF9IQVNIX01ENV9BY2NtbHRfRW5kCkBAIC0xNDcyLDcgKzE0NDIsNyBAQAogI2RlZmluZSBIQUxfSEFTSEV4X1NIQTI1Nl9BY2N1bXVsYXRlX0lUICAgICAgICBIQUxfSEFTSEV4X1NIQTI1Nl9BY2NtbHRfSVQKICNkZWZpbmUgSEFMX0hBU0hFeF9TSEEyNTZfQWNjdW11bGF0ZV9FbmRfSVQgICAgSEFMX0hBU0hFeF9TSEEyNTZfQWNjbWx0X0VuZF9JVAogCi0jZW5kaWYgIC8qIFNUTTMyTDQgfHwgU1RNMzJGNCB8fCBTVE0zMkY3IHx8IFNUTTMySDcgKi8KKyNlbmRpZiAgLyogU1RNMzJMNCB8fCBTVE0zMkw1IHx8IFNUTTMyRjIgfHwgU1RNMzJGNCB8fCBTVE0zMkY3IHx8IFNUTTMySDcgKi8KIC8qKgogICAqIEB9CiAgICovCkBAIC0xNDg2LDcgKzE0NTYsOCBAQAogI2RlZmluZSBIQUxfRGlzYWJsZURCR1N0b3BNb2RlIEhBTF9EQkdNQ1VfRGlzYWJsZURCR1N0b3BNb2RlCiAjZGVmaW5lIEhBTF9FbmFibGVEQkdTdGFuZGJ5TW9kZSBIQUxfREJHTUNVX0VuYWJsZURCR1N0YW5kYnlNb2RlCiAjZGVmaW5lIEhBTF9EaXNhYmxlREJHU3RhbmRieU1vZGUgSEFMX0RCR01DVV9EaXNhYmxlREJHU3RhbmRieU1vZGUKLSNkZWZpbmUgSEFMX0RCR19Mb3dQb3dlckNvbmZpZyhQZXJpcGgsIGNtZCkgKCgoY21kKT09RU5BQkxFKT8gSEFMX0RCR01DVV9EQkdfRW5hYmxlTG93UG93ZXJDb25maWcoUGVyaXBoKSA6IEhBTF9EQkdNQ1VfREJHX0Rpc2FibGVMb3dQb3dlckNvbmZpZyhQZXJpcGgpKQorI2RlZmluZSBIQUxfREJHX0xvd1Bvd2VyQ29uZmlnKFBlcmlwaCwgY21kKSAoKChjbWRcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKT09RU5BQkxFKT8gSEFMX0RCR01DVV9EQkdfRW5hYmxlTG93UG93ZXJDb25maWcoUGVyaXBoKSA6IEhBTF9EQkdNQ1VfREJHX0Rpc2FibGVMb3dQb3dlckNvbmZpZyhQZXJpcGgpKQogI2RlZmluZSBIQUxfVlJFRklOVF9PdXRwdXRTZWxlY3QgIEhBTF9TWVNDRkdfVlJFRklOVF9PdXRwdXRTZWxlY3QKICNkZWZpbmUgSEFMX0xvY2tfQ21kKGNtZCkgKCgoY21kKT09RU5BQkxFKSA/IEhBTF9TWVNDRkdfRW5hYmxlX0xvY2tfVlJFRklOVCgpIDogSEFMX1NZU0NGR19EaXNhYmxlX0xvY2tfVlJFRklOVCgpKQogI2lmIGRlZmluZWQoU1RNMzJMMCkKQEAgLTE0OTQsNyArMTQ2NSw4IEBACiAjZGVmaW5lIEhBTF9WUkVGSU5UX0NtZChjbWQpICgoKGNtZCk9PUVOQUJMRSk/IEhBTF9TWVNDRkdfRW5hYmxlVlJFRklOVCgpIDogSEFMX1NZU0NGR19EaXNhYmxlVlJFRklOVCgpKQogI2VuZGlmCiAjZGVmaW5lIEhBTF9BRENfRW5hYmxlQnVmZmVyX0NtZChjbWQpICAoKChjbWQpPT1FTkFCTEUpID8gSEFMX0FEQ0V4X0VuYWJsZVZSRUZJTlQoKSA6IEhBTF9BRENFeF9EaXNhYmxlVlJFRklOVCgpKQotI2RlZmluZSBIQUxfQURDX0VuYWJsZUJ1ZmZlclNlbnNvcl9DbWQoY21kKSAoKChjbWQpPT1FTkFCTEUpID8gIEhBTF9BRENFeF9FbmFibGVWUkVGSU5UVGVtcFNlbnNvcigpIDogSEFMX0FEQ0V4X0Rpc2FibGVWUkVGSU5UVGVtcFNlbnNvcigpKQorI2RlZmluZSBIQUxfQURDX0VuYWJsZUJ1ZmZlclNlbnNvcl9DbWQoY21kKSAoKChjbWRcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKT09RU5BQkxFKSA/ICBIQUxfQURDRXhfRW5hYmxlVlJFRklOVFRlbXBTZW5zb3IoKSA6IEhBTF9BRENFeF9EaXNhYmxlVlJFRklOVFRlbXBTZW5zb3IoKSkKICNpZiBkZWZpbmVkKFNUTTMySDdBM3h4KSB8fCBkZWZpbmVkKFNUTTMySDdCM3h4KSB8fCBkZWZpbmVkKFNUTTMySDdCMHh4KSB8fCBkZWZpbmVkKFNUTTMySDdBM3h4USkgfHwgZGVmaW5lZChTVE0zMkg3QjN4eFEpIHx8IGRlZmluZWQoU1RNMzJIN0IweHhRKQogI2RlZmluZSBIQUxfRW5hYmxlU1JEb21haW5EQkdTdG9wTW9kZSAgICAgIEhBTF9FbmFibGVEb21haW4zREJHU3RvcE1vZGUKICNkZWZpbmUgSEFMX0Rpc2FibGVTUkRvbWFpbkRCR1N0b3BNb2RlICAgICBIQUxfRGlzYWJsZURvbWFpbjNEQkdTdG9wTW9kZQpAQCAtMTUxNyw5ICsxNDg5LDkgQEAKICNkZWZpbmUgSEFMX0RBVEFfRUVQUk9NRXhfRXJhc2UgICAgSEFMX0ZMQVNIRXhfREFUQUVFUFJPTV9FcmFzZQogI2RlZmluZSBIQUxfREFUQV9FRVBST01FeF9Qcm9ncmFtICBIQUxfRkxBU0hFeF9EQVRBRUVQUk9NX1Byb2dyYW0KIAotIC8qKgorLyoqCiAgICogQH0KLSAgKi8KKyAqLwogCiAvKiogQGRlZmdyb3VwIEhBTF9JMkNfQWxpYXNlZF9GdW5jdGlvbnMgSEFMIEkyQyBBbGlhc2VkIEZ1bmN0aW9ucyBtYWludGFpbmVkIGZvciBsZWdhY3kgcHVycG9zZQogICAqIEB7CkBAIC0xNTI5LDIwICsxNTAxLDIxIEBACiAjZGVmaW5lIEhBTF9GTVBJMkNFeF9BbmFsb2dGaWx0ZXJfQ29uZmlnICAgICAgSEFMX0ZNUEkyQ0V4X0NvbmZpZ0FuYWxvZ0ZpbHRlcgogI2RlZmluZSBIQUxfRk1QSTJDRXhfRGlnaXRhbEZpbHRlcl9Db25maWcgICAgIEhBTF9GTVBJMkNFeF9Db25maWdEaWdpdGFsRmlsdGVyCiAKLSNkZWZpbmUgSEFMX0kyQ0Zhc3RNb2RlUGx1c0NvbmZpZyhTWVNDRkdfSTJDRmFzdE1vZGVQbHVzLCBjbWQpICgoKGNtZCk9PUVOQUJMRSk/IEhBTF9JMkNFeF9FbmFibGVGYXN0TW9kZVBsdXMoU1lTQ0ZHX0kyQ0Zhc3RNb2RlUGx1cyk6IEhBTF9JMkNFeF9EaXNhYmxlRmFzdE1vZGVQbHVzKFNZU0NGR19JMkNGYXN0TW9kZVBsdXMpKQorI2RlZmluZSBIQUxfSTJDRmFzdE1vZGVQbHVzQ29uZmlnKFNZU0NGR19JMkNGYXN0TW9kZVBsdXMsIGNtZCkgKCgoY21kXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApPT1FTkFCTEUpPyBIQUxfSTJDRXhfRW5hYmxlRmFzdE1vZGVQbHVzKFNZU0NGR19JMkNGYXN0TW9kZVBsdXMpOiBIQUxfSTJDRXhfRGlzYWJsZUZhc3RNb2RlUGx1cyhTWVNDRkdfSTJDRmFzdE1vZGVQbHVzKSkKIAotI2lmIGRlZmluZWQoU1RNMzJINykgfHwgZGVmaW5lZChTVE0zMldCKSB8fCBkZWZpbmVkKFNUTTMyRzApIHx8IGRlZmluZWQoU1RNMzJGMCkgfHwgZGVmaW5lZChTVE0zMkYxKSB8fCBkZWZpbmVkKFNUTTMyRjIpIHx8IGRlZmluZWQoU1RNMzJGMykgfHwgZGVmaW5lZChTVE0zMkY0KSB8fCBkZWZpbmVkKFNUTTMyRjcpIHx8IGRlZmluZWQoU1RNMzJMMCkgfHwgZGVmaW5lZChTVE0zMkw0KSB8fCBkZWZpbmVkKFNUTTMyTDUpIHx8IGRlZmluZWQoU1RNMzJHNCkKKyNpZiBkZWZpbmVkKFNUTTMySDcpIHx8IGRlZmluZWQoU1RNMzJXQikgfHwgZGVmaW5lZChTVE0zMkcwKSB8fCBkZWZpbmVkKFNUTTMyRjApIHx8IGRlZmluZWQoU1RNMzJGMSkgfHwgZGVmaW5lZChTVE0zMkYyKSB8fCBkZWZpbmVkKFNUTTMyRjMpIHx8IGRlZmluZWQoU1RNMzJGNCkgfHwgZGVmaW5lZChTVE0zMkY3KSB8fCBkZWZpbmVkKFNUTTMyTDApIHx8IGRlZmluZWQoU1RNMzJMNCkgfHwgZGVmaW5lZChTVE0zMkw1KSB8fCBkZWZpbmVkKFNUTTMyRzQpIHx8IGRlZmluZWQoU1RNMzJMMSkKICNkZWZpbmUgSEFMX0kyQ19NYXN0ZXJfU2VxdWVudGlhbF9UcmFuc21pdF9JVCAgSEFMX0kyQ19NYXN0ZXJfU2VxX1RyYW5zbWl0X0lUCiAjZGVmaW5lIEhBTF9JMkNfTWFzdGVyX1NlcXVlbnRpYWxfUmVjZWl2ZV9JVCAgIEhBTF9JMkNfTWFzdGVyX1NlcV9SZWNlaXZlX0lUCiAjZGVmaW5lIEhBTF9JMkNfU2xhdmVfU2VxdWVudGlhbF9UcmFuc21pdF9JVCAgIEhBTF9JMkNfU2xhdmVfU2VxX1RyYW5zbWl0X0lUCiAjZGVmaW5lIEhBTF9JMkNfU2xhdmVfU2VxdWVudGlhbF9SZWNlaXZlX0lUICAgIEhBTF9JMkNfU2xhdmVfU2VxX1JlY2VpdmVfSVQKLSNlbmRpZiAvKiBTVE0zMkg3IHx8IFNUTTMyV0IgIHx8IFNUTTMyRzAgfHwgU1RNMzJGMCB8fCBTVE0zMkYxIHx8IFNUTTMyRjIgfHwgU1RNMzJGMyB8fCBTVE0zMkY0IHx8IFNUTTMyRjcgfHwgU1RNMzJMMCB8fCBTVE0zMkw0IHx8IFNUTTMyTDUgfHwgU1RNMzJHNCAqLwotI2lmIGRlZmluZWQoU1RNMzJINykgfHwgZGVmaW5lZChTVE0zMldCKSB8fCBkZWZpbmVkKFNUTTMyRzApIHx8IGRlZmluZWQoU1RNMzJGNCkgfHwgZGVmaW5lZChTVE0zMkY3KSB8fCBkZWZpbmVkKFNUTTMyTDApIHx8IGRlZmluZWQoU1RNMzJMNCkgfHwgZGVmaW5lZChTVE0zMkw1KSB8fCBkZWZpbmVkKFNUTTMyRzQpCisjZW5kaWYgLyogU1RNMzJINyB8fCBTVE0zMldCICB8fCBTVE0zMkcwIHx8IFNUTTMyRjAgfHwgU1RNMzJGMSB8fCBTVE0zMkYyIHx8IFNUTTMyRjMgfHwgU1RNMzJGNCB8fCBTVE0zMkY3IHx8IFNUTTMyTDAgfHwgU1RNMzJMNCB8fCBTVE0zMkw1IHx8IFNUTTMyRzQgfHwgU1RNMzJMMSAqLworI2lmIGRlZmluZWQoU1RNMzJINykgfHwgZGVmaW5lZChTVE0zMldCKSB8fCBkZWZpbmVkKFNUTTMyRzApIHx8IGRlZmluZWQoU1RNMzJGNCkgfHwgZGVmaW5lZChTVE0zMkY3KSB8fCBkZWZpbmVkKFNUTTMyTDApIHx8IGRlZmluZWQoU1RNMzJMNCkgfHwgZGVmaW5lZChTVE0zMkw1KSB8fCBkZWZpbmVkKFNUTTMyRzQpfHwgZGVmaW5lZChTVE0zMkwxKQogI2RlZmluZSBIQUxfSTJDX01hc3Rlcl9TZXF1ZW50aWFsX1RyYW5zbWl0X0RNQSBIQUxfSTJDX01hc3Rlcl9TZXFfVHJhbnNtaXRfRE1BCiAjZGVmaW5lIEhBTF9JMkNfTWFzdGVyX1NlcXVlbnRpYWxfUmVjZWl2ZV9ETUEgIEhBTF9JMkNfTWFzdGVyX1NlcV9SZWNlaXZlX0RNQQogI2RlZmluZSBIQUxfSTJDX1NsYXZlX1NlcXVlbnRpYWxfVHJhbnNtaXRfRE1BICBIQUxfSTJDX1NsYXZlX1NlcV9UcmFuc21pdF9ETUEKICNkZWZpbmUgSEFMX0kyQ19TbGF2ZV9TZXF1ZW50aWFsX1JlY2VpdmVfRE1BICAgSEFMX0kyQ19TbGF2ZV9TZXFfUmVjZWl2ZV9ETUEKLSNlbmRpZiAvKiBTVE0zMkg3IHx8IFNUTTMyV0IgIHx8IFNUTTMyRzAgfHwgU1RNMzJGNCB8fCBTVE0zMkY3IHx8IFNUTTMyTDAgfHwgU1RNMzJMNCB8fCBTVE0zMkw1IHx8IFNUTTMyRzQgKi8KKyNlbmRpZiAvKiBTVE0zMkg3IHx8IFNUTTMyV0IgIHx8IFNUTTMyRzAgfHwgU1RNMzJGNCB8fCBTVE0zMkY3IHx8IFNUTTMyTDAgfHwgU1RNMzJMNCB8fCBTVE0zMkw1IHx8IFNUTTMyRzQgfHwgU1RNMzJMMSAqLwogCiAjaWYgZGVmaW5lZChTVE0zMkY0KQogI2RlZmluZSBIQUxfRk1QSTJDX01hc3Rlcl9TZXF1ZW50aWFsX1RyYW5zbWl0X0lUICBIQUxfRk1QSTJDX01hc3Rlcl9TZXFfVHJhbnNtaXRfSVQKQEAgLTE1NTQsMTkgKzE1MjcsMTkgQEAKICNkZWZpbmUgSEFMX0ZNUEkyQ19TbGF2ZV9TZXF1ZW50aWFsX1RyYW5zbWl0X0RNQSAgSEFMX0ZNUEkyQ19TbGF2ZV9TZXFfVHJhbnNtaXRfRE1BCiAjZGVmaW5lIEhBTF9GTVBJMkNfU2xhdmVfU2VxdWVudGlhbF9SZWNlaXZlX0RNQSAgIEhBTF9GTVBJMkNfU2xhdmVfU2VxX1JlY2VpdmVfRE1BCiAjZW5kaWYgLyogU1RNMzJGNCAqLwotIC8qKgorLyoqCiAgICogQH0KLSAgKi8KKyAqLwogCiAvKiogQGRlZmdyb3VwIEhBTF9QV1JfQWxpYXNlZCBIQUwgUFdSIEFsaWFzZWQgbWFpbnRhaW5lZCBmb3IgbGVnYWN5IHB1cnBvc2UKICAgKiBAewogICAqLwogCiAjaWYgZGVmaW5lZChTVE0zMkcwKQotI2RlZmluZSBIQUxfUFdSX0NvbmZpZ1BWRAkJCQkJCQkJCQkJCQkJCUhBTF9QV1JFeF9Db25maWdQVkQKLSNkZWZpbmUgSEFMX1BXUl9FbmFibGVQVkQJCQkJCQkJCQkJCQkJCQlIQUxfUFdSRXhfRW5hYmxlUFZECi0jZGVmaW5lIEhBTF9QV1JfRGlzYWJsZVBWRAkJCQkJCQkJCQkJCQkgIEhBTF9QV1JFeF9EaXNhYmxlUFZECi0jZGVmaW5lIEhBTF9QV1JfUFZEX0lSUUhhbmRsZXIJCQkJCQkJCQkJCSAgSEFMX1BXUkV4X1BWRF9JUlFIYW5kbGVyCisjZGVmaW5lIEhBTF9QV1JfQ29uZmlnUFZEICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQUxfUFdSRXhfQ29uZmlnUFZECisjZGVmaW5lIEhBTF9QV1JfRW5hYmxlUFZEICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQUxfUFdSRXhfRW5hYmxlUFZECisjZGVmaW5lIEhBTF9QV1JfRGlzYWJsZVBWRCAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQUxfUFdSRXhfRGlzYWJsZVBWRAorI2RlZmluZSBIQUxfUFdSX1BWRF9JUlFIYW5kbGVyICAgICAgICAgICAgICAgICAgICAgICAgSEFMX1BXUkV4X1BWRF9JUlFIYW5kbGVyCiAjZW5kaWYKICNkZWZpbmUgSEFMX1BXUl9QVkRDb25maWcgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTF9QV1JfQ29uZmlnUFZECiAjZGVmaW5lIEhBTF9QV1JfRGlzYWJsZUJrVXBSZWcgICAgICAgICAgICAgICAgICAgICAgICBIQUxfUFdSRXhfRGlzYWJsZUJrVXBSZWcKQEAgLTE2MTEsOSArMTU4NCw5IEBACiAKICNkZWZpbmUgUFdSX01PREVfRVZUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBXUl9QVkRfTU9ERV9OT1JNQUwKIAotIC8qKgorLyoqCiAgICogQH0KLSAgKi8KKyAqLwogCiAvKiogQGRlZmdyb3VwIEhBTF9TTUJVU19BbGlhc2VkX0Z1bmN0aW9ucyBIQUwgU01CVVMgQWxpYXNlZCBGdW5jdGlvbnMgbWFpbnRhaW5lZCBmb3IgbGVnYWN5IHB1cnBvc2UKICAgKiBAewpAQCAtMTg2MiwxNSArMTgzNSwxNSBAQAogI2RlZmluZSBfX0hBTF9GUkVFWkVfUlRDX0RCR01DVSBfX0hBTF9EQkdNQ1VfRlJFRVpFX1JUQwogI2RlZmluZSBfX0hBTF9VTkZSRUVaRV9SVENfREJHTUNVIF9fSEFMX0RCR01DVV9VTkZSRUVaRV9SVEMKICNpZiBkZWZpbmVkKFNUTTMySDcpCi0gICNkZWZpbmUgX19IQUxfRlJFRVpFX1dXREdfREJHTUNVIF9fSEFMX0RCR01DVV9GUkVFWkVfV1dERzEKLSAgI2RlZmluZSBfX0hBTF9VTkZSRUVaRV9XV0RHX0RCR01DVSBfX0hBTF9EQkdNQ1VfVW5GcmVlemVfV1dERzEKLSAgI2RlZmluZSBfX0hBTF9GUkVFWkVfSVdER19EQkdNQ1UgX19IQUxfREJHTUNVX0ZSRUVaRV9JV0RHMQotICAjZGVmaW5lIF9fSEFMX1VORlJFRVpFX0lXREdfREJHTUNVIF9fSEFMX0RCR01DVV9VbkZyZWV6ZV9JV0RHMQorI2RlZmluZSBfX0hBTF9GUkVFWkVfV1dER19EQkdNQ1UgX19IQUxfREJHTUNVX0ZSRUVaRV9XV0RHMQorI2RlZmluZSBfX0hBTF9VTkZSRUVaRV9XV0RHX0RCR01DVSBfX0hBTF9EQkdNQ1VfVW5GcmVlemVfV1dERzEKKyNkZWZpbmUgX19IQUxfRlJFRVpFX0lXREdfREJHTUNVIF9fSEFMX0RCR01DVV9GUkVFWkVfSVdERzEKKyNkZWZpbmUgX19IQUxfVU5GUkVFWkVfSVdER19EQkdNQ1UgX19IQUxfREJHTUNVX1VuRnJlZXplX0lXREcxCiAjZWxzZQotICAjZGVmaW5lIF9fSEFMX0ZSRUVaRV9XV0RHX0RCR01DVSBfX0hBTF9EQkdNQ1VfRlJFRVpFX1dXREcKLSAgI2RlZmluZSBfX0hBTF9VTkZSRUVaRV9XV0RHX0RCR01DVSBfX0hBTF9EQkdNQ1VfVU5GUkVFWkVfV1dERwotICAjZGVmaW5lIF9fSEFMX0ZSRUVaRV9JV0RHX0RCR01DVSBfX0hBTF9EQkdNQ1VfRlJFRVpFX0lXREcKLSAgI2RlZmluZSBfX0hBTF9VTkZSRUVaRV9JV0RHX0RCR01DVSBfX0hBTF9EQkdNQ1VfVU5GUkVFWkVfSVdERworI2RlZmluZSBfX0hBTF9GUkVFWkVfV1dER19EQkdNQ1UgX19IQUxfREJHTUNVX0ZSRUVaRV9XV0RHCisjZGVmaW5lIF9fSEFMX1VORlJFRVpFX1dXREdfREJHTUNVIF9fSEFMX0RCR01DVV9VTkZSRUVaRV9XV0RHCisjZGVmaW5lIF9fSEFMX0ZSRUVaRV9JV0RHX0RCR01DVSBfX0hBTF9EQkdNQ1VfRlJFRVpFX0lXREcKKyNkZWZpbmUgX19IQUxfVU5GUkVFWkVfSVdER19EQkdNQ1UgX19IQUxfREJHTUNVX1VORlJFRVpFX0lXREcKICNlbmRpZiAvKiBTVE0zMkg3ICovCiAjZGVmaW5lIF9fSEFMX0ZSRUVaRV9JMkMxX1RJTUVPVVRfREJHTUNVIF9fSEFMX0RCR01DVV9GUkVFWkVfSTJDMV9USU1FT1VUCiAjZGVmaW5lIF9fSEFMX1VORlJFRVpFX0kyQzFfVElNRU9VVF9EQkdNQ1UgX19IQUxfREJHTUNVX1VORlJFRVpFX0kyQzFfVElNRU9VVApAQCAtMjA4MSw4ICsyMDU0LDggQEAKICAgKi8KIAogI2RlZmluZSBJU19EQUNfV0FWRShXQVZFKSAoKChXQVZFKSA9PSBEQUNfV0FWRV9OT05FKSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICgoV0FWRSkgPT0gREFDX1dBVkVfTk9JU0UpfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAoKFdBVkUpID09IERBQ19XQVZFX1RSSUFOR0xFKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICgoV0FWRSkgPT0gREFDX1dBVkVfTk9JU0UpfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKChXQVZFKSA9PSBEQUNfV0FWRV9UUklBTkdMRSkpCiAKIC8qKgogICAqIEB9CkBAIC0yMTM4LDcgKzIxMTEsNyBAQAogI2RlZmluZSBJU19JMlNfSU5TVEFOQ0VfRVhUICAgICAgICAgICAgIElTX0kyU19BTExfSU5TVEFOQ0VfRVhUCiAKICNpZiBkZWZpbmVkKFNUTTMySDcpCi0gICNkZWZpbmUgX19IQUxfSTJTX0NMRUFSX0ZSRUZMQUcgICAgICAgX19IQUxfSTJTX0NMRUFSX1RJRlJFRkxBRworI2RlZmluZSBfX0hBTF9JMlNfQ0xFQVJfRlJFRkxBRyAgICAgICBfX0hBTF9JMlNfQ0xFQVJfVElGUkVGTEFHCiAjZW5kaWYKIAogLyoqCkBAIC0yMjc1LDcgKzIyNDgsOCBAQAogI2RlZmluZSBSQ0NfU3RvcFdha2VVcENsb2NrX0hTSSAgICAgUkNDX1NUT1BfV0FLRVVQQ0xPQ0tfSFNJCiAKICNkZWZpbmUgSEFMX1JDQ19DQ1NDYWxsYmFjayBIQUxfUkNDX0NTU0NhbGxiYWNrCi0jZGVmaW5lIEhBTF9SQzQ4X0VuYWJsZUJ1ZmZlcl9DbWQoY21kKSAoKChjbWQpPT1FTkFCTEUpID8gSEFMX1JDQ0V4X0VuYWJsZUhTSTQ4X1ZSRUZJTlQoKSA6IEhBTF9SQ0NFeF9EaXNhYmxlSFNJNDhfVlJFRklOVCgpKQorI2RlZmluZSBIQUxfUkM0OF9FbmFibGVCdWZmZXJfQ21kKGNtZCkgKCgoY21kXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApPT1FTkFCTEUpID8gSEFMX1JDQ0V4X0VuYWJsZUhTSTQ4X1ZSRUZJTlQoKSA6IEhBTF9SQ0NFeF9EaXNhYmxlSFNJNDhfVlJFRklOVCgpKQogCiAjZGVmaW5lIF9fQURDX0NMS19ESVNBQkxFICAgICAgICAgIF9fSEFMX1JDQ19BRENfQ0xLX0RJU0FCTEUKICNkZWZpbmUgX19BRENfQ0xLX0VOQUJMRSAgICAgICAgICAgX19IQUxfUkNDX0FEQ19DTEtfRU5BQkxFCkBAIC0zMjQzLDkgKzMyMTcsOCBAQAogI2RlZmluZSBSQ0NfTUNPU09VUkNFX1BMTENMS19OT0RJViAgUkNDX01DTzFTT1VSQ0VfUExMQ0xLCiAjZGVmaW5lIFJDQ19NQ09TT1VSQ0VfUExMQ0xLX0RJVjIgICBSQ0NfTUNPMVNPVVJDRV9QTExDTEtfRElWMgogCi0jaWYgZGVmaW5lZChTVE0zMkw0KQorI2lmIGRlZmluZWQoU1RNMzJMNCkgfHwgZGVmaW5lZChTVE0zMldCKSB8fCBkZWZpbmVkKFNUTTMyRzApIHx8IGRlZmluZWQoU1RNMzJHNCkgfHwgZGVmaW5lZChTVE0zMkw1KSB8fCBkZWZpbmVkKFNUTTMyV0wpCiAjZGVmaW5lIFJDQ19SVENDTEtTT1VSQ0VfTk9fQ0xLICAgICBSQ0NfUlRDQ0xLU09VUkNFX05PTkUKLSNlbGlmIGRlZmluZWQoU1RNMzJXQikgfHwgZGVmaW5lZChTVE0zMkcwKSB8fCBkZWZpbmVkKFNUTTMyRzQpIHx8IGRlZmluZWQoU1RNMzJMNSkKICNlbHNlCiAjZGVmaW5lIFJDQ19SVENDTEtTT1VSQ0VfTk9ORSAgICAgICBSQ0NfUlRDQ0xLU09VUkNFX05PX0NMSwogI2VuZGlmCkBAIC0zMzczLDcgKzMzNDYsNyBAQAogLyoqIEBkZWZncm91cCBIQUxfUlRDX0FsaWFzZWRfTWFjcm9zIEhBTCBSVEMgQWxpYXNlZCBNYWNyb3MgbWFpbnRhaW5lZCBmb3IgbGVnYWN5IHB1cnBvc2UKICAgKiBAewogICAqLwotI2lmIGRlZmluZWQgKFNUTTMyRzApIHx8IGRlZmluZWQgKFNUTTMyTDUpIHx8IGRlZmluZWQgKFNUTTMyTDQxMnh4KSB8fCBkZWZpbmVkIChTVE0zMkw0MjJ4eCkgfHwgZGVmaW5lZCAoU1RNMzJMNFA1eHgpIHx8IGRlZmluZWQgKFNUTTMyTDRRNXh4KSB8fCBkZWZpbmVkIChTVE0zMkc0KQorI2lmIGRlZmluZWQgKFNUTTMyRzApIHx8IGRlZmluZWQgKFNUTTMyTDUpIHx8IGRlZmluZWQgKFNUTTMyTDQxMnh4KSB8fCBkZWZpbmVkIChTVE0zMkw0MjJ4eCkgfHwgZGVmaW5lZCAoU1RNMzJMNFA1eHgpIHx8IGRlZmluZWQgKFNUTTMyTDRRNXh4KSB8fCBkZWZpbmVkIChTVE0zMkc0KSB8fCBkZWZpbmVkIChTVE0zMldMKQogI2Vsc2UKICNkZWZpbmUgX19IQUxfUlRDX0NMRUFSX0ZMQUcgICAgICAgICAgICAgICAgICAgICAgX19IQUxfUlRDX0VYVElfQ0xFQVJfRkxBRwogI2VuZGlmCkBAIC0zMzkzLDE5ICszMzY2LDE5IEBACiAjZWxzZQogI2RlZmluZSBfX0hBTF9SVENfRVhUSV9DTEVBUl9GTEFHKF9fRVhUSV9MSU5FX18pICAoKChfX0VYVElfTElORV9fKSA9PSBSVENfRVhUSV9MSU5FX0FMQVJNX0VWRU5UKSA/IF9fSEFMX1JUQ19BTEFSTV9FWFRJX0NMRUFSX0ZMQUcoKSA6IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKF9fRVhUSV9MSU5FX18pID09IFJUQ19FWFRJX0xJTkVfV0FLRVVQVElNRVJfRVZFTlQpID8gX19IQUxfUlRDX1dBS0VVUFRJTUVSX0VYVElfQ0xFQVJfRkxBRygpIDogXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19IQUxfUlRDX1RBTVBFUl9USU1FU1RBTVBfRVhUSV9DTEVBUl9GTEFHKCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fSEFMX1JUQ19UQU1QRVJfVElNRVNUQU1QX0VYVElfQ0xFQVJfRkxBRygpKSkKICNkZWZpbmUgX19IQUxfUlRDX0VYVElfRU5BQkxFX0lUKF9fRVhUSV9MSU5FX18pICAgKCgoX19FWFRJX0xJTkVfXykgID09IFJUQ19FWFRJX0xJTkVfQUxBUk1fRVZFTlQpID8gX19IQUxfUlRDX0FMQVJNX0VYVElfRU5BQkxFX0lUKCkgOiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKF9fRVhUSV9MSU5FX18pID09IFJUQ19FWFRJX0xJTkVfV0FLRVVQVElNRVJfRVZFTlQpID8gX19IQUxfUlRDX1dBS0VVUFRJTUVSX0VYVElfRU5BQkxFX0lUKCkgOiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0hBTF9SVENfVEFNUEVSX1RJTUVTVEFNUF9FWFRJX0VOQUJMRV9JVCgpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKF9fRVhUSV9MSU5FX18pID09IFJUQ19FWFRJX0xJTkVfV0FLRVVQVElNRVJfRVZFTlQpID8gX19IQUxfUlRDX1dBS0VVUFRJTUVSX0VYVElfRU5BQkxFX0lUKCkgOiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19IQUxfUlRDX1RBTVBFUl9USU1FU1RBTVBfRVhUSV9FTkFCTEVfSVQoKSkpCiAjZGVmaW5lIF9fSEFMX1JUQ19FWFRJX0RJU0FCTEVfSVQoX19FWFRJX0xJTkVfXykgICgoKF9fRVhUSV9MSU5FX18pID09IFJUQ19FWFRJX0xJTkVfQUxBUk1fRVZFTlQpID8gX19IQUxfUlRDX0FMQVJNX0VYVElfRElTQUJMRV9JVCgpIDogXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChfX0VYVElfTElORV9fKSA9PSBSVENfRVhUSV9MSU5FX1dBS0VVUFRJTUVSX0VWRU5UKSA/IF9fSEFMX1JUQ19XQUtFVVBUSU1FUl9FWFRJX0RJU0FCTEVfSVQoKSA6IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fSEFMX1JUQ19UQU1QRVJfVElNRVNUQU1QX0VYVElfRElTQUJMRV9JVCgpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKF9fRVhUSV9MSU5FX18pID09IFJUQ19FWFRJX0xJTkVfV0FLRVVQVElNRVJfRVZFTlQpID8gX19IQUxfUlRDX1dBS0VVUFRJTUVSX0VYVElfRElTQUJMRV9JVCgpIDogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fSEFMX1JUQ19UQU1QRVJfVElNRVNUQU1QX0VYVElfRElTQUJMRV9JVCgpKSkKICNkZWZpbmUgX19IQUxfUlRDX0VYVElfR0VUX0ZMQUcoX19FWFRJX0xJTkVfXykgICAgKCgoX19FWFRJX0xJTkVfXykgPT0gUlRDX0VYVElfTElORV9BTEFSTV9FVkVOVCkgPyBfX0hBTF9SVENfQUxBUk1fRVhUSV9HRVRfRkxBRygpIDogXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChfX0VYVElfTElORV9fKSA9PSBSVENfRVhUSV9MSU5FX1dBS0VVUFRJTUVSX0VWRU5UKSA/IF9fSEFMX1JUQ19XQUtFVVBUSU1FUl9FWFRJX0dFVF9GTEFHKCkgOiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0hBTF9SVENfVEFNUEVSX1RJTUVTVEFNUF9FWFRJX0dFVF9GTEFHKCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoX19FWFRJX0xJTkVfXykgPT0gUlRDX0VYVElfTElORV9XQUtFVVBUSU1FUl9FVkVOVCkgPyBfX0hBTF9SVENfV0FLRVVQVElNRVJfRVhUSV9HRVRfRkxBRygpIDogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fSEFMX1JUQ19UQU1QRVJfVElNRVNUQU1QX0VYVElfR0VUX0ZMQUcoKSkpCiAjZGVmaW5lIF9fSEFMX1JUQ19FWFRJX0dFTkVSQVRFX1NXSVQoX19FWFRJX0xJTkVfXykgICAoKChfX0VYVElfTElORV9fKSA9PSBSVENfRVhUSV9MSU5FX0FMQVJNX0VWRU5UKSA/IF9fSEFMX1JUQ19BTEFSTV9FWFRJX0dFTkVSQVRFX1NXSVQoKSA6IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKF9fRVhUSV9MSU5FX18pID09IFJUQ19FWFRJX0xJTkVfV0FLRVVQVElNRVJfRVZFTlQpID8gX19IQUxfUlRDX1dBS0VVUFRJTUVSX0VYVElfR0VORVJBVEVfU1dJVCgpIDogIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0hBTF9SVENfVEFNUEVSX1RJTUVTVEFNUF9FWFRJX0dFTkVSQVRFX1NXSVQoKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoX19FWFRJX0xJTkVfXykgPT0gUlRDX0VYVElfTElORV9XQUtFVVBUSU1FUl9FVkVOVCkgPyBfX0hBTF9SVENfV0FLRVVQVElNRVJfRVhUSV9HRU5FUkFURV9TV0lUKCkgOiAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0hBTF9SVENfVEFNUEVSX1RJTUVTVEFNUF9FWFRJX0dFTkVSQVRFX1NXSVQoKSkpCiAjZW5kaWYgICAvKiBTVE0zMkYxICovCiAKICNkZWZpbmUgSVNfQUxBUk0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVNfUlRDX0FMQVJNCkBAIC0zNDgxLDkgKzM0NTQsOSBAQAogI2RlZmluZSAgX19IQUxfU0RfU0RJT19DTEVBUl9GTEFHICAgX19IQUxfU0RfU0RNTUNfQ0xFQVJfRkxBRwogI2RlZmluZSAgX19IQUxfU0RfU0RJT19HRVRfSVQgICAgICAgX19IQUxfU0RfU0RNTUNfR0VUX0lUCiAjZGVmaW5lICBfX0hBTF9TRF9TRElPX0NMRUFSX0lUICAgICBfX0hBTF9TRF9TRE1NQ19DTEVBUl9JVAotI2RlZmluZSAgU0RJT19TVEFUSUNfRkxBR1MJICAgICAgICBTRE1NQ19TVEFUSUNfRkxBR1MKLSNkZWZpbmUgIFNESU9fQ01EMFRJTUVPVVQJICAgICAgICAgIFNETU1DX0NNRDBUSU1FT1VUCi0jZGVmaW5lICBTRF9TRElPX1NFTkRfSUZfQ09ORAkgICAgICBTRF9TRE1NQ19TRU5EX0lGX0NPTkQKKyNkZWZpbmUgIFNESU9fU1RBVElDX0ZMQUdTICAgICAgICAgIFNETU1DX1NUQVRJQ19GTEFHUworI2RlZmluZSAgU0RJT19DTUQwVElNRU9VVCAgICAgICAgICAgU0RNTUNfQ01EMFRJTUVPVVQKKyNkZWZpbmUgIFNEX1NESU9fU0VORF9JRl9DT05EICAgICAgIFNEX1NETU1DX1NFTkRfSUZfQ09ORAogLyogYWxpYXMgQ01TSVMgZm9yIGNvbXBhdGliaWxpdGllcyAqLwogI2RlZmluZSAgU0RJT19JUlFuICAgICAgICAgICAgICAgICAgU0RNTUMxX0lSUW4KICNkZWZpbmUgIFNESU9fSVJRSGFuZGxlciAgICAgICAgICAgIFNETU1DMV9JUlFIYW5kbGVyCkBAIC0zNTg5LDYgKzM1NjIsMTMgQEAKICNkZWZpbmUgX19IQUxfVVNBUlRfR0VUQ0xPQ0tTT1VSQ0UgICAgICBVU0FSVF9HRVRDTE9DS1NPVVJDRQogI2RlZmluZSBfX1VTQVJUX0dFVENMT0NLU09VUkNFICAgICAgICAgIFVTQVJUX0dFVENMT0NLU09VUkNFCiAKKyNpZiBkZWZpbmVkKFNUTTMyRjApIHx8IGRlZmluZWQoU1RNMzJGMykgfHwgZGVmaW5lZChTVE0zMkY3KQorI2RlZmluZSBVU0FSVF9PVkVSU0FNUExJTkdfMTYgICAgICAgICAgICAgICAweDAwMDAwMDAwVQorI2RlZmluZSBVU0FSVF9PVkVSU0FNUExJTkdfOCAgICAgICAgICAgICAgICBVU0FSVF9DUjFfT1ZFUjgKKworI2RlZmluZSBJU19VU0FSVF9PVkVSU0FNUExJTkcoX19TQU1QTElOR19fKSAoKChfX1NBTVBMSU5HX18pID09IFVTQVJUX09WRVJTQU1QTElOR18xNikgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1NBTVBMSU5HX18pID09IFVTQVJUX09WRVJTQU1QTElOR184KSkKKyNlbmRpZiAvKiBTVE0zMkYwIHx8IFNUTTMyRjMgfHwgU1RNMzJGNyAqLwogLyoqCiAgICogQH0KICAgKi8KQEAgLTM3NTEsNyArMzczMSw3IEBACiAvKiogQGRlZmdyb3VwIEhBTF9RU1BJX0FsaWFzZWRfTWFjcm9zIEhBTCBRU1BJIEFsaWFzZWQgTWFjcm9zIG1haW50YWluZWQgZm9yIGxlZ2FjeSBwdXJwb3NlCiAgICogQHsKICAgKi8KLSNpZiBkZWZpbmVkIChTVE0zMkw0KSB8fCBkZWZpbmVkIChTVE0zMkY0KSB8fCBkZWZpbmVkIChTVE0zMkY3KQorI2lmIGRlZmluZWQgKFNUTTMyTDQpIHx8IGRlZmluZWQgKFNUTTMyRjQpIHx8IGRlZmluZWQgKFNUTTMyRjcpIHx8IGRlZmluZWQoU1RNMzJINykKICNkZWZpbmUgSEFMX1FQU0lfVElNRU9VVF9ERUZBVUxUX1ZBTFVFIEhBTF9RU1BJX1RJTUVPVVRfREVGQVVMVF9WQUxVRQogI2VuZGlmIC8qIFNUTTMyTDQgfHwgU1RNMzJGNCB8fCBTVE0zMkY3ICovCiAvKioKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmY0eHhfaGFsX2FkYy5oIGIvSW5jL3N0bTMyZjR4eF9oYWxfYWRjLmgKaW5kZXggYmFkZWFiYy4uYTA0MWU3NiAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZjR4eF9oYWxfYWRjLmgKKysrIGIvSW5jL3N0bTMyZjR4eF9oYWxfYWRjLmgKQEAgLTI4LDYgKzI4LDkgQEAKIC8qIEluY2x1ZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAjaW5jbHVkZSAic3RtMzJmNHh4X2hhbF9kZWYuaCIKIAorLyogSW5jbHVkZSBsb3cgbGV2ZWwgZHJpdmVyICovCisjaW5jbHVkZSAic3RtMzJmNHh4X2xsX2FkYy5oIgorCiAvKiogQGFkZHRvZ3JvdXAgU1RNMzJGNHh4X0hBTF9Ecml2ZXIKICAgKiBAewogICAqLwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZjR4eF9oYWxfYWRjX2V4LmggYi9JbmMvc3RtMzJmNHh4X2hhbF9hZGNfZXguaAppbmRleCBlZDM4OTMxLi5iMGNkZDJhIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmNHh4X2hhbF9hZGNfZXguaAorKysgYi9JbmMvc3RtMzJmNHh4X2hhbF9hZGNfZXguaApAQCAtMzA0LDE3ICszMDQsMTggQEAKICAgKi8KICNpZiBkZWZpbmVkKFNUTTMyRjQwNXh4KSB8fCBkZWZpbmVkKFNUTTMyRjQxNXh4KSB8fCBkZWZpbmVkKFNUTTMyRjQwN3h4KSB8fCBkZWZpbmVkKFNUTTMyRjQxN3h4KSB8fCBcCiAgICAgZGVmaW5lZChTVE0zMkY0MDF4QykgfHwgZGVmaW5lZChTVE0zMkY0MDF4RSkgfHwgZGVmaW5lZChTVE0zMkY0MTBUeCkgfHwgZGVmaW5lZChTVE0zMkY0MTBDeCkgfHwgXAotICAgIGRlZmluZWQoU1RNMzJGNDEwUngpIHx8IGRlZmluZWQoU1RNMzJGNDExeEUpIHx8IGRlZmluZWQoU1RNMzJGNDEyWngpIHx8IGRlZmluZWQoU1RNMzJGNDEyVngpIHx8IFwKLSAgICBkZWZpbmVkKFNUTTMyRjQxMlJ4KSB8fCBkZWZpbmVkKFNUTTMyRjQxMkN4KSB8fCBkZWZpbmVkKFNUTTMyRjQxM3h4KSB8fCBkZWZpbmVkKFNUTTMyRjQyM3h4KQorICAgIGRlZmluZWQoU1RNMzJGNDEwUngpIHx8IGRlZmluZWQoU1RNMzJGNDEyWngpIHx8IGRlZmluZWQoU1RNMzJGNDEyVngpIHx8IGRlZmluZWQoU1RNMzJGNDEyUngpIHx8IFwKKyAgICBkZWZpbmVkKFNUTTMyRjQxMkN4KQogI2RlZmluZSBJU19BRENfQ0hBTk5FTChDSEFOTkVMKSAoKENIQU5ORUwpIDw9IEFEQ19DSEFOTkVMXzE4KQotI2VuZGlmIC8qIFNUTTMyRjQwNXh4IHx8IFNUTTMyRjQxNXh4IHx8IFNUTTMyRjQwN3h4IHx8IFNUTTMyRjQxN3h4IHx8IFNUTTMyRjQwMXhDIHx8IFNUTTMyRjQwMXhFIHx8IFNUTTMyRjQxMHh4IHx8IFNUTTMyRjQxMXhFIHx8Ci0gICAgICAgICAgU1RNMzJGNDEyWnggfHwgU1RNMzJGNDEyVnggfHwgU1RNMzJGNDEyUnggfHwgU1RNMzJGNDEyQ3ggfHwgU1RNMzJGNDEzeHggfHwgU1RNMzJGNDIzeHggKi8KLQotI2lmIGRlZmluZWQoU1RNMzJGNDI3eHgpIHx8IGRlZmluZWQoU1RNMzJGNDM3eHgpIHx8IGRlZmluZWQoU1RNMzJGNDI5eHgpIHx8IGRlZmluZWQoU1RNMzJGNDM5eHgpIHx8IFwKLSAgICBkZWZpbmVkKFNUTTMyRjQ0Nnh4KSB8fCBkZWZpbmVkKFNUTTMyRjQ2OXh4KSB8fCBkZWZpbmVkKFNUTTMyRjQ3OXh4KQorI2VuZGlmIC8qIFNUTTMyRjQwNXh4IHx8IFNUTTMyRjQxNXh4IHx8IFNUTTMyRjQwN3h4IHx8IFNUTTMyRjQxN3h4IHx8IFNUTTMyRjQwMXhDIHx8IFNUTTMyRjQwMXhFIHx8CisgICAgICAgICAgU1RNMzJGNDEweHggfHwgU1RNMzJGNDEyWnggfHwgU1RNMzJGNDEyVnggfHwgU1RNMzJGNDEyUnggfHwgU1RNMzJGNDEyQ3ggKi8KKyAgICAgIAorI2lmIGRlZmluZWQoU1RNMzJGNDExeEUpIHx8IGRlZmluZWQoU1RNMzJGNDEzeHgpIHx8IGRlZmluZWQoU1RNMzJGNDIzeHgpIHx8IGRlZmluZWQoU1RNMzJGNDI3eHgpIHx8IFwKKyAgICBkZWZpbmVkKFNUTTMyRjQzN3h4KSB8fCBkZWZpbmVkKFNUTTMyRjQyOXh4KSB8fCBkZWZpbmVkKFNUTTMyRjQzOXh4KSB8fCBkZWZpbmVkKFNUTTMyRjQ0Nnh4KSB8fCBcCisgICAgZGVmaW5lZChTVE0zMkY0Njl4eCkgfHwgZGVmaW5lZChTVE0zMkY0Nzl4eCkKICNkZWZpbmUgSVNfQURDX0NIQU5ORUwoQ0hBTk5FTCkgKCgoQ0hBTk5FTCkgPD0gQURDX0NIQU5ORUxfMTgpICB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKENIQU5ORUwpID09IEFEQ19DSEFOTkVMX1RFTVBTRU5TT1IpKQotI2VuZGlmIC8qIFNUTTMyRjQyN3h4IHx8IFNUTTMyRjQzN3h4IHx8IFNUTTMyRjQyOXh4IHx8IFNUTTMyRjQzOXh4IHx8IFNUTTMyRjQ0Nnh4IHx8IFNUTTMyRjQ2OXh4IHx8IFNUTTMyRjQ3OXh4ICovCisjZW5kaWYgLyogU1RNMzJGNDExeEUgfHwgU1RNMzJGNDEzeHggfHwgU1RNMzJGNDIzeHggfHwgU1RNMzJGNDI3eHggfHwgU1RNMzJGNDM3eHggfHwgU1RNMzJGNDI5eHggfHwgU1RNMzJGNDM5eHggfHwgU1RNMzJGNDQ2eHggfHwgU1RNMzJGNDY5eHggfHwgU1RNMzJGNDc5eHggKi8KIAogI2RlZmluZSBJU19BRENfTU9ERShNT0RFKSAoKChNT0RFKSA9PSBBRENfTU9ERV9JTkRFUEVOREVOVCkgICAgICAgICAgICAgICAgIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTU9ERSkgPT0gQURDX0RVQUxNT0RFX1JFR1NJTVVMVF9JTkpFQ1NJTVVMVCkgICB8fCBcCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJmNHh4X2hhbF9jYW4uaCBiL0luYy9zdG0zMmY0eHhfaGFsX2Nhbi5oCmluZGV4IDA2MTFhNjUuLjA2MmFiZDYgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmY0eHhfaGFsX2Nhbi5oCisrKyBiL0luYy9zdG0zMmY0eHhfaGFsX2Nhbi5oCkBAIC0yNTUsNyArMjU1LDcgQEAKICAgSEFMX0NBTl9SWF9GSUZPMV9NU0dfUEVORElOR19DQl9JRCAgICAgICA9IDB4MDhVLCAgICAvKiE8IENBTiBSeCBGSUZPIDEgbWVzc2FnZSBwZW5kaW5nIGNhbGxiYWNrIElEICAgICAqLwogICBIQUxfQ0FOX1JYX0ZJRk8xX0ZVTExfQ0JfSUQgICAgICAgICAgICAgID0gMHgwOVUsICAgIC8qITwgQ0FOIFJ4IEZJRk8gMSBmdWxsIGNhbGxiYWNrIElEICAgICAgICAgICAgICAgICovCiAgIEhBTF9DQU5fU0xFRVBfQ0JfSUQgICAgICAgICAgICAgICAgICAgICAgPSAweDBBVSwgICAgLyohPCBDQU4gU2xlZXAgY2FsbGJhY2sgSUQgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgSEFMX0NBTl9XQUtFVVBfRlJPTV9SWF9NU0dfQ0JfSUQgICAgICAgICA9IDB4MEJVLCAgICAvKiE8IENBTiBXYWtlIFVwIGZyb3BtIFJ4IG1zZyBjYWxsYmFjayBJRCAgICAgICAgICAqLworICBIQUxfQ0FOX1dBS0VVUF9GUk9NX1JYX01TR19DQl9JRCAgICAgICAgID0gMHgwQlUsICAgIC8qITwgQ0FOIFdha2UgVXAgZnJvbSBSeCBtc2cgY2FsbGJhY2sgSUQgICAgICAgICAgKi8KICAgSEFMX0NBTl9FUlJPUl9DQl9JRCAgICAgICAgICAgICAgICAgICAgICA9IDB4MENVLCAgICAvKiE8IENBTiBFcnJvciBjYWxsYmFjayBJRCAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCiAgIEhBTF9DQU5fTVNQSU5JVF9DQl9JRCAgICAgICAgICAgICAgICAgICAgPSAweDBEVSwgICAgLyohPCBDQU4gTXNwSW5pdCBjYWxsYmFjayBJRCAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTI5NSwxMSArMjk1LDExIEBACiAjZGVmaW5lIEhBTF9DQU5fRVJST1JfUlhfRk9WMCAgICAgICAgICgweDAwMDAwMjAwVSkgIC8qITwgUnggRklGTzAgb3ZlcnJ1biBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBIQUxfQ0FOX0VSUk9SX1JYX0ZPVjEgICAgICAgICAoMHgwMDAwMDQwMFUpICAvKiE8IFJ4IEZJRk8xIG92ZXJydW4gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgSEFMX0NBTl9FUlJPUl9UWF9BTFNUMCAgICAgICAgKDB4MDAwMDA4MDBVKSAgLyohPCBUeE1haWxib3ggMCB0cmFuc21pdCBmYWlsdXJlIGR1ZSB0byBhcmJpdHJhdGlvbiBsb3N0ICovCi0jZGVmaW5lIEhBTF9DQU5fRVJST1JfVFhfVEVSUjAgICAgICAgICgweDAwMDAxMDAwVSkgIC8qITwgVHhNYWlsYm94IDEgdHJhbnNtaXQgZmFpbHVyZSBkdWUgdG8gdHJhbm1pdCBlcnJvciAgICAqLwotI2RlZmluZSBIQUxfQ0FOX0VSUk9SX1RYX0FMU1QxICAgICAgICAoMHgwMDAwMjAwMFUpICAvKiE8IFR4TWFpbGJveCAwIHRyYW5zbWl0IGZhaWx1cmUgZHVlIHRvIGFyYml0cmF0aW9uIGxvc3QgKi8KLSNkZWZpbmUgSEFMX0NBTl9FUlJPUl9UWF9URVJSMSAgICAgICAgKDB4MDAwMDQwMDBVKSAgLyohPCBUeE1haWxib3ggMSB0cmFuc21pdCBmYWlsdXJlIGR1ZSB0byB0cmFubWl0IGVycm9yICAgICovCi0jZGVmaW5lIEhBTF9DQU5fRVJST1JfVFhfQUxTVDIgICAgICAgICgweDAwMDA4MDAwVSkgIC8qITwgVHhNYWlsYm94IDAgdHJhbnNtaXQgZmFpbHVyZSBkdWUgdG8gYXJiaXRyYXRpb24gbG9zdCAqLwotI2RlZmluZSBIQUxfQ0FOX0VSUk9SX1RYX1RFUlIyICAgICAgICAoMHgwMDAxMDAwMFUpICAvKiE8IFR4TWFpbGJveCAxIHRyYW5zbWl0IGZhaWx1cmUgZHVlIHRvIHRyYW5taXQgZXJyb3IgICAgKi8KKyNkZWZpbmUgSEFMX0NBTl9FUlJPUl9UWF9URVJSMCAgICAgICAgKDB4MDAwMDEwMDBVKSAgLyohPCBUeE1haWxib3ggMCB0cmFuc21pdCBmYWlsdXJlIGR1ZSB0byB0cmFuc21pdCBlcnJvciAgICAqLworI2RlZmluZSBIQUxfQ0FOX0VSUk9SX1RYX0FMU1QxICAgICAgICAoMHgwMDAwMjAwMFUpICAvKiE8IFR4TWFpbGJveCAxIHRyYW5zbWl0IGZhaWx1cmUgZHVlIHRvIGFyYml0cmF0aW9uIGxvc3QgKi8KKyNkZWZpbmUgSEFMX0NBTl9FUlJPUl9UWF9URVJSMSAgICAgICAgKDB4MDAwMDQwMDBVKSAgLyohPCBUeE1haWxib3ggMSB0cmFuc21pdCBmYWlsdXJlIGR1ZSB0byB0cmFuc21pdCBlcnJvciAgICAqLworI2RlZmluZSBIQUxfQ0FOX0VSUk9SX1RYX0FMU1QyICAgICAgICAoMHgwMDAwODAwMFUpICAvKiE8IFR4TWFpbGJveCAyIHRyYW5zbWl0IGZhaWx1cmUgZHVlIHRvIGFyYml0cmF0aW9uIGxvc3QgKi8KKyNkZWZpbmUgSEFMX0NBTl9FUlJPUl9UWF9URVJSMiAgICAgICAgKDB4MDAwMTAwMDBVKSAgLyohPCBUeE1haWxib3ggMiB0cmFuc21pdCBmYWlsdXJlIGR1ZSB0byB0cmFuc21pdCBlcnJvciAgICAqLwogI2RlZmluZSBIQUxfQ0FOX0VSUk9SX1RJTUVPVVQgICAgICAgICAoMHgwMDAyMDAwMFUpICAvKiE8IFRpbWVvdXQgZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgSEFMX0NBTl9FUlJPUl9OT1RfSU5JVElBTElaRUQgKDB4MDAwNDAwMDBVKSAgLyohPCBQZXJpcGhlcmFsIG5vdCBpbml0aWFsaXplZCAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIEhBTF9DQU5fRVJST1JfTk9UX1JFQURZICAgICAgICgweDAwMDgwMDAwVSkgIC8qITwgUGVyaXBoZXJhbCBub3QgcmVhZHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZjR4eF9oYWxfY2VjLmggYi9JbmMvc3RtMzJmNHh4X2hhbF9jZWMuaAppbmRleCAzNTE5Y2JkLi5mMzcxYTljIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmNHh4X2hhbF9jZWMuaAorKysgYi9JbmMvc3RtMzJmNHh4X2hhbF9jZWMuaApAQCAtMTIxLDcgKzEyMSw3IEBACiAgICogICAgICAgICAgYjYgIEVycm9yIGluZm9ybWF0aW9uCiAgICogICAgICAgICAgICAgMCAgOiBObyBFcnJvcgogICAqICAgICAgICAgICAgIDEgIDogRXJyb3IKLSAgKiAgICAgICAgICBiNSAgICAgSVAgaW5pdGlsaXNhdGlvbiBzdGF0dXMKKyAgKiAgICAgICAgICBiNSAgICAgSVAgaW5pdGlhbGl6YXRpb24gc3RhdHVzCiAgICogICAgICAgICAgICAgMCAgOiBSZXNldCAoSVAgbm90IGluaXRpYWxpemVkKQogICAqICAgICAgICAgICAgIDEgIDogSW5pdCBkb25lIChJUCBpbml0aWFsaXplZC4gSEFMIENFQyBJbml0IGZ1bmN0aW9uIGFscmVhZHkgY2FsbGVkKQogICAqICAgICAgICAgIGI0LWIzICAobm90IHVzZWQpCkBAIC0xMzgsNyArMTM4LDcgQEAKICAgKiAgICAgICAgICBSeFN0YXRlIHZhbHVlIGNvZGluZyBmb2xsb3cgYmVsb3cgZGVzY3JpYmVkIGJpdG1hcCA6CiAgICogICAgICAgICAgYjctYjYgIChub3QgdXNlZCkKICAgKiAgICAgICAgICAgICB4eCA6IFNob3VsZCBiZSBzZXQgdG8gMDAKLSAgKiAgICAgICAgICBiNSAgICAgSVAgaW5pdGlsaXNhdGlvbiBzdGF0dXMKKyAgKiAgICAgICAgICBiNSAgICAgSVAgaW5pdGlhbGl6YXRpb24gc3RhdHVzCiAgICogICAgICAgICAgICAgMCAgOiBSZXNldCAoSVAgbm90IGluaXRpYWxpemVkKQogICAqICAgICAgICAgICAgIDEgIDogSW5pdCBkb25lIChJUCBpbml0aWFsaXplZCkKICAgKiAgICAgICAgICBiNC1iMiAgKG5vdCB1c2VkKQpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZjR4eF9oYWxfY29uZl90ZW1wbGF0ZS5oIGIvSW5jL3N0bTMyZjR4eF9oYWxfY29uZl90ZW1wbGF0ZS5oCmluZGV4IDM3Yzg3ODAuLmFmYTJmNTYgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmY0eHhfaGFsX2NvbmZfdGVtcGxhdGUuaAorKysgYi9JbmMvc3RtMzJmNHh4X2hhbF9jb25mX3RlbXBsYXRlLmgKQEAgLTc5LDYgKzc5LDcgQEAKICNkZWZpbmUgSEFMX1BDRF9NT0RVTEVfRU5BQkxFRAogI2RlZmluZSBIQUxfSENEX01PRFVMRV9FTkFCTEVECiAjZGVmaW5lIEhBTF9GTVBJMkNfTU9EVUxFX0VOQUJMRUQKKyNkZWZpbmUgSEFMX0ZNUFNNQlVTX01PRFVMRV9FTkFCTEVECiAjZGVmaW5lIEhBTF9TUERJRlJYX01PRFVMRV9FTkFCTEVECiAjZGVmaW5lIEhBTF9ERlNETV9NT0RVTEVfRU5BQkxFRAogI2RlZmluZSBIQUxfTFBUSU1fTU9EVUxFX0VOQUJMRUQKQEAgLTE2Myw2ICsxNjQsNyBAQAogI2RlZmluZSAgVVNFX0hBTF9IQ0RfUkVHSVNURVJfQ0FMTEJBQ0tTICAgICAgICAgMFUgLyogSENEIHJlZ2lzdGVyIGNhbGxiYWNrIGRpc2FibGVkICAgICAgICovCiAjZGVmaW5lICBVU0VfSEFMX0kyQ19SRUdJU1RFUl9DQUxMQkFDS1MgICAgICAgICAwVSAvKiBJMkMgcmVnaXN0ZXIgY2FsbGJhY2sgZGlzYWJsZWQgICAgICAgKi8KICNkZWZpbmUgIFVTRV9IQUxfRk1QSTJDX1JFR0lTVEVSX0NBTExCQUNLUyAgICAgIDBVIC8qIEZNUEkyQyByZWdpc3RlciBjYWxsYmFjayBkaXNhYmxlZCAgICAqLworI2RlZmluZSAgVVNFX0hBTF9GTVBTTUJVU19SRUdJU1RFUl9DQUxMQkFDS1MgICAgMFUgLyogRk1QU01CVVMgcmVnaXN0ZXIgY2FsbGJhY2sgZGlzYWJsZWQgICovCiAjZGVmaW5lICBVU0VfSEFMX0kyU19SRUdJU1RFUl9DQUxMQkFDS1MgICAgICAgICAwVSAvKiBJMlMgcmVnaXN0ZXIgY2FsbGJhY2sgZGlzYWJsZWQgICAgICAgKi8KICNkZWZpbmUgIFVTRV9IQUxfSVJEQV9SRUdJU1RFUl9DQUxMQkFDS1MgICAgICAgIDBVIC8qIElSREEgcmVnaXN0ZXIgY2FsbGJhY2sgZGlzYWJsZWQgICAgICAqLwogI2RlZmluZSAgVVNFX0hBTF9MUFRJTV9SRUdJU1RFUl9DQUxMQkFDS1MgICAgICAgMFUgLyogTFBUSU0gcmVnaXN0ZXIgY2FsbGJhY2sgZGlzYWJsZWQgICAgICovCkBAIC00NTEsNiArNDUzLDEwIEBACiAgI2luY2x1ZGUgInN0bTMyZjR4eF9oYWxfZm1waTJjLmgiCiAjZW5kaWYgLyogSEFMX0ZNUEkyQ19NT0RVTEVfRU5BQkxFRCAqLwogCisjaWZkZWYgSEFMX0ZNUFNNQlVTX01PRFVMRV9FTkFCTEVECisgI2luY2x1ZGUgInN0bTMyZjR4eF9oYWxfZm1wc21idXMuaCIKKyNlbmRpZiAvKiBIQUxfRk1QU01CVVNfTU9EVUxFX0VOQUJMRUQgKi8KKwogI2lmZGVmIEhBTF9TUERJRlJYX01PRFVMRV9FTkFCTEVECiAgI2luY2x1ZGUgInN0bTMyZjR4eF9oYWxfc3BkaWZyeC5oIgogI2VuZGlmIC8qIEhBTF9TUERJRlJYX01PRFVMRV9FTkFCTEVEICovCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJmNHh4X2hhbF9jcnlwLmggYi9JbmMvc3RtMzJmNHh4X2hhbF9jcnlwLmgKaW5kZXggZGM5ZGU2ZS4uODU5NmZlNyAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZjR4eF9oYWxfY3J5cC5oCisrKyBiL0luYy9zdG0zMmY0eHhfaGFsX2NyeXAuaApAQCAtNjUsNiArNjUsNyBAQAogICB1aW50MzJfdCBIZWFkZXJTaXplOyAgICAgICAgICAgICAgICAvKiE8IFRoZSBzaXplIG9mIGhlYWRlciBidWZmZXIgaW4gd29yZCAgKi8KICAgdWludDMyX3QgKkIwOyAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCMCBpcyBmaXJzdCBhdXRoZW50aWNhdGlvbiBibG9jayB1c2VkIG9ubHkgIGluIEFFUyBDQ00gbW9kZSAqLwogICB1aW50MzJfdCBEYXRhV2lkdGhVbml0OyAgICAgICAgICAgICAgLyohPCBEYXRhIFdpdGggVW5pdCwgdGhpcyBwYXJhbWV0ZXIgY2FuIGJlIHZhbHVlIG9mIEByZWYgQ1JZUF9EYXRhX1dpZHRoX1VuaXQqLworICB1aW50MzJfdCBIZWFkZXJXaWR0aFVuaXQ7ICAgICAgICAgICAgLyohPCBIZWFkZXIgV2lkdGggVW5pdCwgdGhpcyBwYXJhbWV0ZXIgY2FuIGJlIHZhbHVlIG9mIEByZWYgQ1JZUF9IZWFkZXJfV2lkdGhfVW5pdCovCiAgIHVpbnQzMl90IEtleUlWQ29uZmlnU2tpcDsgICAgICAgICAgICAvKiE8IENSWVAgcGVyaXBoZXJhbCBLZXkgYW5kIElWIGNvbmZpZ3VyYXRpb24gc2tpcCwgdG8gY29uZmlnIEtleSBhbmQgSW5pdGlhbGl6YXRpb24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3Igb25seSBvbmNlIGFuZCB0byBza2lwIGNvbmZpZ3VyYXRpb24gZm9yIGNvbnNlY3V0aXZlIHByb2Nlc3NpbmdzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgQ1JZUF9Db25maWd1cmF0aW9uX1NraXAgKi8KQEAgLTIxNCw2ICsyMTUsMTcgQEAKICAgKiBAfQogICAqLwogCisvKiogQGRlZmdyb3VwIENSWVBfSGVhZGVyX1dpZHRoX1VuaXQgQ1JZUCBIZWFkZXIgV2lkdGggVW5pdAorICAqIEB7CisgICovCisKKyNkZWZpbmUgQ1JZUF9IRUFERVJXSURUSFVOSVRfV09SRCAgIDB4MDAwMDAwMDBVICAvKiE8IEJ5IGRlZmF1bHQsIGhlYWRlciBzaXplIHVuaXQgaXMgd29yZCAqLworI2RlZmluZSBDUllQX0hFQURFUldJRFRIVU5JVF9CWVRFICAgMHgwMDAwMDAwMVUgIC8qITwgQnkgZGVmYXVsdCwgaGVhZGVyIHNpemUgdW5pdCBpcyBieXRlICovCisKKy8qKgorICAqIEB9CisgICovCisgIAogLyoqIEBkZWZncm91cCBDUllQX0FsZ29yaXRobV9Nb2RlIENSWVAgQWxnb3JpdGhtIE1vZGUKICAgKiBAewogICAqLwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZjR4eF9oYWxfZGFjLmggYi9JbmMvc3RtMzJmNHh4X2hhbF9kYWMuaAppbmRleCBmYzljZTMyLi5hMWY0OWVhIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmNHh4X2hhbF9kYWMuaAorKysgYi9JbmMvc3RtMzJmNHh4X2hhbF9kYWMuaApAQCAtNiw3ICs2LDcgQEAKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICogQGF0dGVudGlvbgogICAqCi0gICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxNyBTVE1pY3JvZWxlY3Ryb25pY3MuCisgICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxNiBTVE1pY3JvZWxlY3Ryb25pY3MuCiAgICogQWxsIHJpZ2h0cyByZXNlcnZlZC48L2NlbnRlcj48L2gyPgogICAqCiAgICogVGhpcyBzb2Z0d2FyZSBjb21wb25lbnQgaXMgbGljZW5zZWQgYnkgU1QgdW5kZXIgQlNEIDMtQ2xhdXNlIGxpY2Vuc2UsCkBAIC0xOCwzNiArMTgsMzQgQEAKICAgKi8KIAogLyogRGVmaW5lIHRvIHByZXZlbnQgcmVjdXJzaXZlIGluY2x1c2lvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSNpZm5kZWYgX19TVE0zMkY0eHhfSEFMX0RBQ19ICi0jZGVmaW5lIF9fU1RNMzJGNHh4X0hBTF9EQUNfSAorI2lmbmRlZiBTVE0zMkY0eHhfSEFMX0RBQ19ICisjZGVmaW5lIFNUTTMyRjR4eF9IQUxfREFDX0gKIAogI2lmZGVmIF9fY3BsdXNwbHVzCi0gZXh0ZXJuICJDIiB7CitleHRlcm4gIkMiIHsKICNlbmRpZgogCi0jaWYgZGVmaW5lZChTVE0zMkY0MDV4eCkgfHwgZGVmaW5lZChTVE0zMkY0MTV4eCkgfHwgZGVmaW5lZChTVE0zMkY0MDd4eCkgfHwgZGVmaW5lZChTVE0zMkY0MTd4eCkgfHxcCi0gICAgZGVmaW5lZChTVE0zMkY0Mjd4eCkgfHwgZGVmaW5lZChTVE0zMkY0Mzd4eCkgfHwgZGVmaW5lZChTVE0zMkY0Mjl4eCkgfHwgZGVmaW5lZChTVE0zMkY0Mzl4eCkgfHxcCi0gICAgZGVmaW5lZChTVE0zMkY0MTBUeCkgfHwgZGVmaW5lZChTVE0zMkY0MTBDeCkgfHwgZGVmaW5lZChTVE0zMkY0MTBSeCkgfHwgZGVmaW5lZChTVE0zMkY0NDZ4eCkgfHxcCi0gICAgZGVmaW5lZChTVE0zMkY0Njl4eCkgfHwgZGVmaW5lZChTVE0zMkY0Nzl4eCkgfHwgZGVmaW5lZChTVE0zMkY0MTN4eCkgfHwgZGVmaW5lZChTVE0zMkY0MjN4eCkKLQotLyogSW5jbHVkZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSNpbmNsdWRlICJzdG0zMmY0eHhfaGFsX2RlZi5oIgotCiAvKiogQGFkZHRvZ3JvdXAgU1RNMzJGNHh4X0hBTF9Ecml2ZXIKICAgKiBAewogICAqLwogCisvKiBJbmNsdWRlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2luY2x1ZGUgInN0bTMyZjR4eF9oYWxfZGVmLmgiCisKKyNpZiBkZWZpbmVkKERBQykKKwogLyoqIEBhZGR0b2dyb3VwIERBQwogICAqIEB7CiAgICovCiAKIC8qIEV4cG9ydGVkIHR5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKIC8qKiBAZGVmZ3JvdXAgREFDX0V4cG9ydGVkX1R5cGVzIERBQyBFeHBvcnRlZCBUeXBlcwogICAqIEB7CiAgICovCiAKLS8qKiAKLSAgKiBAYnJpZWYgSEFMIFN0YXRlIHN0cnVjdHVyZXMgZGVmaW5pdGlvbgorLyoqCisgICogQGJyaWVmICBIQUwgU3RhdGUgc3RydWN0dXJlcyBkZWZpbml0aW9uCiAgICovCiB0eXBlZGVmIGVudW0KIHsKQEAgLTU2LDE2ICs1NCwxNyBAQAogICBIQUxfREFDX1NUQVRFX0JVU1kgICAgICAgICAgICAgID0gMHgwMlUsICAvKiE8IERBQyBpbnRlcm5hbCBwcm9jZXNzaW5nIGlzIG9uZ29pbmcgICAqLwogICBIQUxfREFDX1NUQVRFX1RJTUVPVVQgICAgICAgICAgID0gMHgwM1UsICAvKiE8IERBQyB0aW1lb3V0IHN0YXRlICAgICAgICAgICAgICAgICAgICAqLwogICBIQUxfREFDX1NUQVRFX0VSUk9SICAgICAgICAgICAgID0gMHgwNFUgICAvKiE8IERBQyBlcnJvciBzdGF0ZSAgICAgICAgICAgICAgICAgICAgICAqLwotfUhBTF9EQUNfU3RhdGVUeXBlRGVmOwotIAotLyoqIAotICAqIEBicmllZiBEQUMgaGFuZGxlIFN0cnVjdHVyZSBkZWZpbml0aW9uCisKK30gSEFMX0RBQ19TdGF0ZVR5cGVEZWY7CisKKy8qKgorICAqIEBicmllZiAgREFDIGhhbmRsZSBTdHJ1Y3R1cmUgZGVmaW5pdGlvbgogICAqLwogI2lmIChVU0VfSEFMX0RBQ19SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkKIHR5cGVkZWYgc3RydWN0IF9fREFDX0hhbmRsZVR5cGVEZWYKICNlbHNlCiB0eXBlZGVmIHN0cnVjdAotI2VuZGlmCisjZW5kaWYgLyogVVNFX0hBTF9EQUNfUkVHSVNURVJfQ0FMTEJBQ0tTICovCiB7CiAgIERBQ19UeXBlRGVmICAgICAgICAgICAgICAgICAqSW5zdGFuY2U7ICAgICAvKiE8IFJlZ2lzdGVyIGJhc2UgYWRkcmVzcyAgICAgICAgICAgICAqLwogCkBAIC04MCwzMiArNzksMzUgQEAKICAgX19JTyB1aW50MzJfdCAgICAgICAgICAgICAgIEVycm9yQ29kZTsgICAgIC8qITwgREFDIEVycm9yIGNvZGUgICAgICAgICAgICAgICAgICAgICovCiAKICNpZiAoVVNFX0hBTF9EQUNfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCi0gIHZvaWQgKCogQ29udkNwbHRDYWxsYmFja0NoMSkgICAgICAgICAgICAoc3RydWN0IF9fREFDX0hhbmRsZVR5cGVEZWYgKmhkYWMpOwotICB2b2lkICgqIENvbnZIYWxmQ3BsdENhbGxiYWNrQ2gxKSAgICAgICAgKHN0cnVjdCBfX0RBQ19IYW5kbGVUeXBlRGVmICpoZGFjKTsKLSAgdm9pZCAoKiBFcnJvckNhbGxiYWNrQ2gxKSAgICAgICAgICAgICAgIChzdHJ1Y3QgX19EQUNfSGFuZGxlVHlwZURlZiAqaGRhYyk7Ci0gIHZvaWQgKCogRE1BVW5kZXJydW5DYWxsYmFja0NoMSkgICAgICAgICAoc3RydWN0IF9fREFDX0hhbmRsZVR5cGVEZWYgKmhkYWMpOwotICB2b2lkICgqIENvbnZDcGx0Q2FsbGJhY2tDaDIpICAgICAgICAgICAgKHN0cnVjdCBfX0RBQ19IYW5kbGVUeXBlRGVmKiBoZGFjKTsKLSAgdm9pZCAoKiBDb252SGFsZkNwbHRDYWxsYmFja0NoMikgICAgICAgIChzdHJ1Y3QgX19EQUNfSGFuZGxlVHlwZURlZiogaGRhYyk7Ci0gIHZvaWQgKCogRXJyb3JDYWxsYmFja0NoMikgICAgICAgICAgICAgICAoc3RydWN0IF9fREFDX0hhbmRsZVR5cGVEZWYqIGhkYWMpOwotICB2b2lkICgqIERNQVVuZGVycnVuQ2FsbGJhY2tDaDIpICAgICAgICAgKHN0cnVjdCBfX0RBQ19IYW5kbGVUeXBlRGVmKiBoZGFjKTsKKyAgdm9pZCAoKiBDb252Q3BsdENhbGxiYWNrQ2gxKShzdHJ1Y3QgX19EQUNfSGFuZGxlVHlwZURlZiAqaGRhYyk7CisgIHZvaWQgKCogQ29udkhhbGZDcGx0Q2FsbGJhY2tDaDEpKHN0cnVjdCBfX0RBQ19IYW5kbGVUeXBlRGVmICpoZGFjKTsKKyAgdm9pZCAoKiBFcnJvckNhbGxiYWNrQ2gxKShzdHJ1Y3QgX19EQUNfSGFuZGxlVHlwZURlZiAqaGRhYyk7CisgIHZvaWQgKCogRE1BVW5kZXJydW5DYWxsYmFja0NoMSkoc3RydWN0IF9fREFDX0hhbmRsZVR5cGVEZWYgKmhkYWMpOworI2lmIGRlZmluZWQoREFDX0NIQU5ORUwyX1NVUFBPUlQpCisgIHZvaWQgKCogQ29udkNwbHRDYWxsYmFja0NoMikoc3RydWN0IF9fREFDX0hhbmRsZVR5cGVEZWYgKmhkYWMpOworICB2b2lkICgqIENvbnZIYWxmQ3BsdENhbGxiYWNrQ2gyKShzdHJ1Y3QgX19EQUNfSGFuZGxlVHlwZURlZiAqaGRhYyk7CisgIHZvaWQgKCogRXJyb3JDYWxsYmFja0NoMikoc3RydWN0IF9fREFDX0hhbmRsZVR5cGVEZWYgKmhkYWMpOworICB2b2lkICgqIERNQVVuZGVycnVuQ2FsbGJhY2tDaDIpKHN0cnVjdCBfX0RBQ19IYW5kbGVUeXBlRGVmICpoZGFjKTsKKyNlbmRpZiAvKiBEQUNfQ0hBTk5FTDJfU1VQUE9SVCAqLwogCi0gIHZvaWQgKCogTXNwSW5pdENhbGxiYWNrKSAgICAgICAgICAgICAgICAoc3RydWN0IF9fREFDX0hhbmRsZVR5cGVEZWYgKmhkYWMpOwotICB2b2lkICgqIE1zcERlSW5pdENhbGxiYWNrICkgICAgICAgICAgICAgKHN0cnVjdCBfX0RBQ19IYW5kbGVUeXBlRGVmICpoZGFjKTsKKyAgdm9pZCAoKiBNc3BJbml0Q2FsbGJhY2spKHN0cnVjdCBfX0RBQ19IYW5kbGVUeXBlRGVmICpoZGFjKTsKKyAgdm9pZCAoKiBNc3BEZUluaXRDYWxsYmFjaykoc3RydWN0IF9fREFDX0hhbmRsZVR5cGVEZWYgKmhkYWMpOwogI2VuZGlmIC8qIFVTRV9IQUxfREFDX1JFR0lTVEVSX0NBTExCQUNLUyAqLwogCi19REFDX0hhbmRsZVR5cGVEZWY7Cit9IERBQ19IYW5kbGVUeXBlRGVmOwogCi0vKiogCi0gICogQGJyaWVmIERBQyBDb25maWd1cmF0aW9uIHJlZ3VsYXIgQ2hhbm5lbCBzdHJ1Y3R1cmUgZGVmaW5pdGlvbgorLyoqCisgICogQGJyaWVmICAgREFDIENvbmZpZ3VyYXRpb24gcmVndWxhciBDaGFubmVsIHN0cnVjdHVyZSBkZWZpbml0aW9uCiAgICovCiB0eXBlZGVmIHN0cnVjdAogewotICB1aW50MzJfdCBEQUNfVHJpZ2dlcjsgICAgICAgLyohPCBTcGVjaWZpZXMgdGhlIGV4dGVybmFsIHRyaWdnZXIgZm9yIHRoZSBzZWxlY3RlZCBEQUMgY2hhbm5lbC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBEQUNfdHJpZ2dlcl9zZWxlY3Rpb24gKi8KKyAgdWludDMyX3QgREFDX1RyaWdnZXI7ICAgICAgICAgICAgICAgICAgLyohPCBTcGVjaWZpZXMgdGhlIGV4dGVybmFsIHRyaWdnZXIgZm9yIHRoZSBzZWxlY3RlZCBEQUMgY2hhbm5lbC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIERBQ190cmlnZ2VyX3NlbGVjdGlvbiAqLwogCi0gIHVpbnQzMl90IERBQ19PdXRwdXRCdWZmZXI7ICAvKiE8IFNwZWNpZmllcyB3aGV0aGVyIHRoZSBEQUMgY2hhbm5lbCBvdXRwdXQgYnVmZmVyIGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgREFDX291dHB1dF9idWZmZXIgKi8KLX1EQUNfQ2hhbm5lbENvbmZUeXBlRGVmOworICB1aW50MzJfdCBEQUNfT3V0cHV0QnVmZmVyOyAgICAgICAgICAgICAvKiE8IFNwZWNpZmllcyB3aGV0aGVyIHRoZSBEQUMgY2hhbm5lbCBvdXRwdXQgYnVmZmVyIGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgREFDX291dHB1dF9idWZmZXIgKi8KKworfSBEQUNfQ2hhbm5lbENvbmZUeXBlRGVmOwogCiAjaWYgKFVTRV9IQUxfREFDX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxKQogLyoqCkBAIC0xMTcsMjUgKzExOSwyOSBAQAogICBIQUxfREFDX0NIMV9IQUxGX0NPTVBMRVRFX0NCX0lEICAgICAgICAgICAgPSAweDAxVSwgIC8qITwgREFDIENIMSBoYWxmIENvbXBsZXRlIENhbGxiYWNrIElEICovCiAgIEhBTF9EQUNfQ0gxX0VSUk9SX0lEICAgICAgICAgICAgICAgICAgICAgICA9IDB4MDJVLCAgLyohPCBEQUMgQ0gxIGVycm9yIENhbGxiYWNrIElEICAgICAgICAgKi8KICAgSEFMX0RBQ19DSDFfVU5ERVJSVU5fQ0JfSUQgICAgICAgICAgICAgICAgID0gMHgwM1UsICAvKiE8IERBQyBDSDEgdW5kZXJydW4gQ2FsbGJhY2sgSUQgICAgICAqLworI2lmIGRlZmluZWQoREFDX0NIQU5ORUwyX1NVUFBPUlQpCiAgIEhBTF9EQUNfQ0gyX0NPTVBMRVRFX0NCX0lEICAgICAgICAgICAgICAgICA9IDB4MDRVLCAgLyohPCBEQUMgQ0gyIENvbXBsZXRlIENhbGxiYWNrIElEICAgICAgKi8KICAgSEFMX0RBQ19DSDJfSEFMRl9DT01QTEVURV9DQl9JRCAgICAgICAgICAgID0gMHgwNVUsICAvKiE8IERBQyBDSDIgaGFsZiBDb21wbGV0ZSBDYWxsYmFjayBJRCAqLwogICBIQUxfREFDX0NIMl9FUlJPUl9JRCAgICAgICAgICAgICAgICAgICAgICAgPSAweDA2VSwgIC8qITwgREFDIENIMiBlcnJvciBDYWxsYmFjayBJRCAgICAgICAgICovCiAgIEhBTF9EQUNfQ0gyX1VOREVSUlVOX0NCX0lEICAgICAgICAgICAgICAgICA9IDB4MDdVLCAgLyohPCBEQUMgQ0gyIHVuZGVycnVuIENhbGxiYWNrIElEICAgICAgKi8KLSAgSEFMX0RBQ19NU1BfSU5JVF9DQl9JRCAgICAgICAgICAgICAgICAgICAgID0gMHgwOFUsICAvKiE8IERBQyBNc3BJbml0IENhbGxiYWNrIElEICAgICAgICAgICAqLwotICBIQUxfREFDX01TUF9ERUlOSVRfQ0JfSUQgICAgICAgICAgICAgICAgICAgPSAweDA5VSwgIC8qITwgREFDIE1zcERlSW5pdCBDYWxsYmFjayBJRCAgICAgICAgICovCisjZW5kaWYgLyogREFDX0NIQU5ORUwyX1NVUFBPUlQgKi8KKyAgSEFMX0RBQ19NU1BJTklUX0NCX0lEICAgICAgICAgICAgICAgICAgICAgID0gMHgwOFUsICAvKiE8IERBQyBNc3BJbml0IENhbGxiYWNrIElEICAgICAgICAgICAqLworICBIQUxfREFDX01TUERFSU5JVF9DQl9JRCAgICAgICAgICAgICAgICAgICAgPSAweDA5VSwgIC8qITwgREFDIE1zcERlSW5pdCBDYWxsYmFjayBJRCAgICAgICAgICovCiAgIEhBTF9EQUNfQUxMX0NCX0lEICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MEFVICAgLyohPCBEQUMgQWxsIElEICAgICAgICAgICAgICAgICAgICAgICAgKi8KLX1IQUxfREFDX0NhbGxiYWNrSURUeXBlRGVmOworfSBIQUxfREFDX0NhbGxiYWNrSURUeXBlRGVmOwogCiAvKioKICAgKiBAYnJpZWYgIEhBTCBEQUMgQ2FsbGJhY2sgcG9pbnRlciBkZWZpbml0aW9uCiAgICovCiB0eXBlZGVmIHZvaWQgKCpwREFDX0NhbGxiYWNrVHlwZURlZikoREFDX0hhbmRsZVR5cGVEZWYgKmhkYWMpOwogI2VuZGlmIC8qIFVTRV9IQUxfREFDX1JFR0lTVEVSX0NBTExCQUNLUyAqLworCiAvKioKICAgKiBAfQogICAqLwogCiAvKiBFeHBvcnRlZCBjb25zdGFudHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCiAvKiogQGRlZmdyb3VwIERBQ19FeHBvcnRlZF9Db25zdGFudHMgREFDIEV4cG9ydGVkIENvbnN0YW50cwogICAqIEB7CiAgICovCkBAIC0xNDQsNzcgKzE1MCw4OSBAQAogICAqIEB7CiAgICovCiAjZGVmaW5lICBIQUxfREFDX0VSUk9SX05PTkUgICAgICAgICAgICAgIDB4MDBVICAgIC8qITwgTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lICBIQUxfREFDX0VSUk9SX0RNQVVOREVSUlVOQ0gxICAgIDB4MDFVICAgIC8qITwgREFDIGNoYW5uZWwxIERBTSB1bmRlcnJ1biBlcnJvciAgICovCi0jZGVmaW5lICBIQUxfREFDX0VSUk9SX0RNQVVOREVSUlVOQ0gyICAgIDB4MDJVICAgIC8qITwgREFDIGNoYW5uZWwyIERBTSB1bmRlcnJ1biBlcnJvciAgICovCisjZGVmaW5lICBIQUxfREFDX0VSUk9SX0RNQVVOREVSUlVOQ0gxICAgIDB4MDFVICAgIC8qITwgREFDIGNoYW5uZWwxIERNQSB1bmRlcnJ1biBlcnJvciAgICovCisjaWYgZGVmaW5lZChEQUNfQ0hBTk5FTDJfU1VQUE9SVCkKKyNkZWZpbmUgIEhBTF9EQUNfRVJST1JfRE1BVU5ERVJSVU5DSDIgICAgMHgwMlUgICAgLyohPCBEQUMgY2hhbm5lbDIgRE1BIHVuZGVycnVuIGVycm9yICAgKi8KKyNlbmRpZiAvKiBEQUNfQ0hBTk5FTDJfU1VQUE9SVCAqLwogI2RlZmluZSAgSEFMX0RBQ19FUlJPUl9ETUEgICAgICAgICAgICAgICAweDA0VSAgICAvKiE8IERNQSBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSAgSEFMX0RBQ19FUlJPUl9USU1FT1VUICAgICAgICAgICAweDA4VSAgICAvKiE8IFRpbWVvdXQgZXJyb3IgICAgICAgICAgICAgICAgICAgICAqLwogI2lmIChVU0VfSEFMX0RBQ19SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkKICNkZWZpbmUgSEFMX0RBQ19FUlJPUl9JTlZBTElEX0NBTExCQUNLICAgMHgxMFUgICAgLyohPCBJbnZhbGlkIGNhbGxiYWNrIGVycm9yICAgICAgICAgICAgKi8KICNlbmRpZiAvKiBVU0VfSEFMX0RBQ19SRUdJU1RFUl9DQUxMQkFDS1MgKi8KKwogLyoqCiAgICogQH0KICAgKi8KIAotLyoqIEBkZWZncm91cCBEQUNfdHJpZ2dlcl9zZWxlY3Rpb24gREFDIFRyaWdnZXIgU2VsZWN0aW9uCisvKiogQGRlZmdyb3VwIERBQ190cmlnZ2VyX3NlbGVjdGlvbiBEQUMgdHJpZ2dlciBzZWxlY3Rpb24KICAgKiBAewogICAqLworI2RlZmluZSBEQUNfVFJJR0dFUl9OT05FICAgICAgICAgICAgICAgIDB4MDAwMDAwMDBVTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb252ZXJzaW9uIGlzIGF1dG9tYXRpYyBvbmNlIHRoZSBEQUMxX0RIUnh4eHggcmVnaXN0ZXIgaGFzIGJlZW4gbG9hZGVkLCBhbmQgbm90IGJ5IGV4dGVybmFsIHRyaWdnZXIgKi8KKyNkZWZpbmUgREFDX1RSSUdHRVJfVDJfVFJHTyAgICAgICAgICAgICAoREFDX0NSX1RTRUwxXzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgREFDX0NSX1RFTjEpIC8qITwgVElNMiBUUkdPIHNlbGVjdGVkIGFzIGV4dGVybmFsIGNvbnZlcnNpb24gdHJpZ2dlciBmb3IgREFDIGNoYW5uZWwgKi8KKyNkZWZpbmUgREFDX1RSSUdHRVJfVDRfVFJHTyAgICAgICAgICAgICAoREFDX0NSX1RTRUwxXzIgICAgICAgICAgICAgICAgICB8IERBQ19DUl9UU0VMMV8wIHwgREFDX0NSX1RFTjEpIC8qITwgVElNNCBUUkdPIHNlbGVjdGVkIGFzIGV4dGVybmFsIGNvbnZlcnNpb24gdHJpZ2dlciBmb3IgREFDIGNoYW5uZWwgKi8KKyNkZWZpbmUgREFDX1RSSUdHRVJfVDVfVFJHTyAgICAgICAgICAgICAoICAgICAgICAgICAgICAgICBEQUNfQ1JfVFNFTDFfMSB8IERBQ19DUl9UU0VMMV8wIHwgREFDX0NSX1RFTjEpIC8qITwgVElNMyBUUkdPIHNlbGVjdGVkIGFzIGV4dGVybmFsIGNvbnZlcnNpb24gdHJpZ2dlciBmb3IgREFDIGNoYW5uZWwgKi8KKyNkZWZpbmUgREFDX1RSSUdHRVJfVDZfVFJHTyAgICAgICAgICAgICAoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREFDX0NSX1RFTjEpIC8qITwgQ29udmVyc2lvbiBzdGFydGVkIGJ5IHNvZnR3YXJlIHRyaWdnZXIgZm9yIERBQyBjaGFubmVsICovCisjZGVmaW5lIERBQ19UUklHR0VSX1Q3X1RSR08gICAgICAgICAgICAgKCAgICAgICAgICAgICAgICAgREFDX0NSX1RTRUwxXzEgICAgICAgICAgICAgICAgICB8IERBQ19DUl9URU4xKSAvKiE8IFRJTTcgVFJHTyBzZWxlY3RlZCBhcyBleHRlcm5hbCBjb252ZXJzaW9uIHRyaWdnZXIgZm9yIERBQyBjaGFubmVsICovCisjZGVmaW5lIERBQ19UUklHR0VSX1Q4X1RSR08gICAgICAgICAgICAgKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQUNfQ1JfVFNFTDFfMCB8IERBQ19DUl9URU4xKSAvKiE8IFRJTTggVFJHTyBzZWxlY3RlZCBhcyBleHRlcm5hbCBjb252ZXJzaW9uIHRyaWdnZXIgZm9yIERBQyBjaGFubmVsICovCisjZGVmaW5lIERBQ19UUklHR0VSX0VYVF9JVDkgICAgICAgICAgICAgKERBQ19DUl9UU0VMMV8yIHwgREFDX0NSX1RTRUwxXzEgICAgICAgICAgICAgICAgICB8IERBQ19DUl9URU4xKSAvKiE8IEVYVEkgTGluZTkgZXZlbnQgc2VsZWN0ZWQgYXMgZXh0ZXJuYWwgY29udmVyc2lvbiB0cmlnZ2VyIGZvciBEQUMgY2hhbm5lbCAqLworI2RlZmluZSBEQUNfVFJJR0dFUl9TT0ZUV0FSRSAgICAgICAgICAgIChEQUNfQ1JfVFNFTDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBEQUNfQ1JfVEVOMSkgLyohPCBDb252ZXJzaW9uIHN0YXJ0ZWQgYnkgc29mdHdhcmUgdHJpZ2dlciBmb3IgREFDIGNoYW5uZWwgKi8KIAotI2RlZmluZSBEQUNfVFJJR0dFUl9OT05FICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDBVIC8qITwgQ29udmVyc2lvbiBpcyBhdXRvbWF0aWMgb25jZSB0aGUgREFDMV9ESFJ4eHh4IHJlZ2lzdGVyIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzIGJlZW4gbG9hZGVkLCBhbmQgbm90IGJ5IGV4dGVybmFsIHRyaWdnZXIgKi8KLSNkZWZpbmUgREFDX1RSSUdHRVJfVDJfVFJHTyAgICAgICAgICAgICAgICAoKHVpbnQzMl90KShEQUNfQ1JfVFNFTDFfMiB8IERBQ19DUl9URU4xKSkgLyohPCBUSU0yIFRSR08gc2VsZWN0ZWQgYXMgZXh0ZXJuYWwgY29udmVyc2lvbiB0cmlnZ2VyIGZvciBEQUMgY2hhbm5lbCAqLwotI2RlZmluZSBEQUNfVFJJR0dFUl9UNF9UUkdPICAgICAgICAgICAgICAgICgodWludDMyX3QpKERBQ19DUl9UU0VMMV8yIHwgREFDX0NSX1RTRUwxXzAgfCBEQUNfQ1JfVEVOMSkpIC8qITwgVElNNCBUUkdPIHNlbGVjdGVkIGFzIGV4dGVybmFsIGNvbnZlcnNpb24gdHJpZ2dlciBmb3IgREFDIGNoYW5uZWwgKi8KLSNkZWZpbmUgREFDX1RSSUdHRVJfVDVfVFJHTyAgICAgICAgICAgICAgICAoKHVpbnQzMl90KShEQUNfQ1JfVFNFTDFfMSB8IERBQ19DUl9UU0VMMV8wIHwgREFDX0NSX1RFTjEpKSAvKiE8IFRJTTUgVFJHTyBzZWxlY3RlZCBhcyBleHRlcm5hbCBjb252ZXJzaW9uIHRyaWdnZXIgZm9yIERBQyBjaGFubmVsICovCi0jZGVmaW5lIERBQ19UUklHR0VSX1Q2X1RSR08gICAgICAgICAgICAgICAgKCh1aW50MzJfdClEQUNfQ1JfVEVOMSkgLyohPCBUSU02IFRSR08gc2VsZWN0ZWQgYXMgZXh0ZXJuYWwgY29udmVyc2lvbiB0cmlnZ2VyIGZvciBEQUMgY2hhbm5lbCAqLwotI2RlZmluZSBEQUNfVFJJR0dFUl9UN19UUkdPICAgICAgICAgICAgICAgICgodWludDMyX3QpKERBQ19DUl9UU0VMMV8xIHwgREFDX0NSX1RFTjEpKSAvKiE8IFRJTTcgVFJHTyBzZWxlY3RlZCBhcyBleHRlcm5hbCBjb252ZXJzaW9uIHRyaWdnZXIgZm9yIERBQyBjaGFubmVsICovCi0jZGVmaW5lIERBQ19UUklHR0VSX1Q4X1RSR08gICAgICAgICAgICAgICAgKCh1aW50MzJfdCkoREFDX0NSX1RTRUwxXzAgfCBEQUNfQ1JfVEVOMSkpIC8qITwgVElNOCBUUkdPIHNlbGVjdGVkIGFzIGV4dGVybmFsIGNvbnZlcnNpb24gdHJpZ2dlciBmb3IgREFDIGNoYW5uZWwgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotCi0jZGVmaW5lIERBQ19UUklHR0VSX0VYVF9JVDkgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkoREFDX0NSX1RTRUwxXzIgfCBEQUNfQ1JfVFNFTDFfMSB8IERBQ19DUl9URU4xKSkgLyohPCBFWFRJIExpbmU5IGV2ZW50IHNlbGVjdGVkIGFzIGV4dGVybmFsIGNvbnZlcnNpb24gdHJpZ2dlciBmb3IgREFDIGNoYW5uZWwgKi8KLSNkZWZpbmUgREFDX1RSSUdHRVJfU09GVFdBUkUgICAgICAgICAgICAgICAoKHVpbnQzMl90KShEQUNfQ1JfVFNFTDEgfCBEQUNfQ1JfVEVOMSkpIC8qITwgQ29udmVyc2lvbiBzdGFydGVkIGJ5IHNvZnR3YXJlIHRyaWdnZXIgZm9yIERBQyBjaGFubmVsICovCiAvKioKICAgKiBAfQogICAqLwogCi0vKiogQGRlZmdyb3VwIERBQ19vdXRwdXRfYnVmZmVyICBEQUMgT3V0cHV0IEJ1ZmZlcgorLyoqIEBkZWZncm91cCBEQUNfb3V0cHV0X2J1ZmZlciBEQUMgb3V0cHV0IGJ1ZmZlcgogICAqIEB7CiAgICovCiAjZGVmaW5lIERBQ19PVVRQVVRCVUZGRVJfRU5BQkxFICAgICAgICAgICAgMHgwMDAwMDAwMFUKLSNkZWZpbmUgREFDX09VVFBVVEJVRkZFUl9ESVNBQkxFICAgICAgICAgICAoKHVpbnQzMl90KURBQ19DUl9CT0ZGMSkKKyNkZWZpbmUgREFDX09VVFBVVEJVRkZFUl9ESVNBQkxFICAgICAgICAgICAoREFDX0NSX0JPRkYxKQorCiAvKioKICAgKiBAfQogICAqLwogCi0vKiogQGRlZmdyb3VwIERBQ19DaGFubmVsX3NlbGVjdGlvbiBEQUMgQ2hhbm5lbCBTZWxlY3Rpb24KKy8qKiBAZGVmZ3JvdXAgREFDX0NoYW5uZWxfc2VsZWN0aW9uIERBQyBDaGFubmVsIHNlbGVjdGlvbgogICAqIEB7CiAgICovCiAjZGVmaW5lIERBQ19DSEFOTkVMXzEgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMFUKKyNpZiBkZWZpbmVkKERBQ19DSEFOTkVMMl9TVVBQT1JUKQogI2RlZmluZSBEQUNfQ0hBTk5FTF8yICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTBVCisjZW5kaWYgLyogREFDX0NIQU5ORUwyX1NVUFBPUlQgKi8KIC8qKgogICAqIEB9CiAgICovCiAKLS8qKiBAZGVmZ3JvdXAgREFDX2RhdGFfYWxpZ25tZW50IERBQyBEYXRhIEFsaWdubWVudAorLyoqIEBkZWZncm91cCBEQUNfZGF0YV9hbGlnbm1lbnQgREFDIGRhdGEgYWxpZ25tZW50CiAgICogQHsKICAgKi8KICNkZWZpbmUgREFDX0FMSUdOXzEyQl9SICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwVQogI2RlZmluZSBEQUNfQUxJR05fMTJCX0wgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDRVCiAjZGVmaW5lIERBQ19BTElHTl84Ql9SICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOFUKKwogLyoqCiAgICogQH0KICAgKi8KIAotLyoqIEBkZWZncm91cCBEQUNfZmxhZ3NfZGVmaW5pdGlvbiBEQUMgRmxhZ3MgRGVmaW5pdGlvbgorLyoqIEBkZWZncm91cCBEQUNfZmxhZ3NfZGVmaW5pdGlvbiBEQUMgZmxhZ3MgZGVmaW5pdGlvbgogICAqIEB7Ci0gICovIAotI2RlZmluZSBEQUNfRkxBR19ETUFVRFIxICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpREFDX1NSX0RNQVVEUjEpCi0jZGVmaW5lIERBQ19GTEFHX0RNQVVEUjIgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdClEQUNfU1JfRE1BVURSMikKKyAgKi8KKyNkZWZpbmUgREFDX0ZMQUdfRE1BVURSMSAgICAgICAgICAgICAgICAgICAoREFDX1NSX0RNQVVEUjEpCisjaWYgZGVmaW5lZChEQUNfQ0hBTk5FTDJfU1VQUE9SVCkKKyNkZWZpbmUgREFDX0ZMQUdfRE1BVURSMiAgICAgICAgICAgICAgICAgICAoREFDX1NSX0RNQVVEUjIpCisjZW5kaWYgLyogREFDX0NIQU5ORUwyX1NVUFBPUlQgKi8KKwogLyoqCiAgICogQH0KICAgKi8KIAotLyoqIEBkZWZncm91cCBEQUNfSVRfZGVmaW5pdGlvbiBEQUMgSVQgRGVmaW5pdGlvbgorLyoqIEBkZWZncm91cCBEQUNfSVRfZGVmaW5pdGlvbiAgREFDIElUIGRlZmluaXRpb24KICAgKiBAewotICAqLyAKLSNkZWZpbmUgREFDX0lUX0RNQVVEUjEgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdClEQUNfU1JfRE1BVURSMSkKLSNkZWZpbmUgREFDX0lUX0RNQVVEUjIgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdClEQUNfU1JfRE1BVURSMikKKyAgKi8KKyNkZWZpbmUgREFDX0lUX0RNQVVEUjEgICAgICAgICAgICAgICAgICAgKERBQ19TUl9ETUFVRFIxKQorI2lmIGRlZmluZWQoREFDX0NIQU5ORUwyX1NVUFBPUlQpCisjZGVmaW5lIERBQ19JVF9ETUFVRFIyICAgICAgICAgICAgICAgICAgIChEQUNfU1JfRE1BVURSMikKKyNlbmRpZiAvKiBEQUNfQ0hBTk5FTDJfU1VQUE9SVCAqLworCiAvKioKICAgKiBAfQogICAqLwpAQCAtMjI0LDg5ICsyNDIsMTQ2IEBACiAgICovCiAKIC8qIEV4cG9ydGVkIG1hY3JvIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKIC8qKiBAZGVmZ3JvdXAgREFDX0V4cG9ydGVkX01hY3JvcyBEQUMgRXhwb3J0ZWQgTWFjcm9zCiAgICogQHsKICAgKi8KIAotLyoqIEBicmllZiBSZXNldCBEQUMgaGFuZGxlIHN0YXRlCisvKiogQGJyaWVmIFJlc2V0IERBQyBoYW5kbGUgc3RhdGUuCiAgICogQHBhcmFtICBfX0hBTkRMRV9fIHNwZWNpZmllcyB0aGUgREFDIGhhbmRsZS4KICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KICNpZiAoVVNFX0hBTF9EQUNfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCi0jZGVmaW5lIF9fSEFMX0RBQ19SRVNFVF9IQU5ETEVfU1RBVEUoX19IQU5ETEVfXykgICAgICAgICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPlN0YXRlID0gSEFMX0RBQ19TVEFURV9SRVNFVDsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPk1zcEluaXRDYWxsYmFjayA9IE5VTEw7ICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5Nc3BEZUluaXRDYWxsYmFjayA9IE5VTEw7ICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlKDApCisjZGVmaW5lIF9fSEFMX0RBQ19SRVNFVF9IQU5ETEVfU1RBVEUoX19IQU5ETEVfXykgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5TdGF0ZSAgICAgICAgICAgICA9IEhBTF9EQUNfU1RBVEVfUkVTRVQ7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+TXNwSW5pdENhbGxiYWNrICAgPSBOVUxMOyAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPk1zcERlSW5pdENhbGxiYWNrID0gTlVMTDsgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlKDApCiAjZWxzZQogI2RlZmluZSBfX0hBTF9EQUNfUkVTRVRfSEFORExFX1NUQVRFKF9fSEFORExFX18pICgoX19IQU5ETEVfXyktPlN0YXRlID0gSEFMX0RBQ19TVEFURV9SRVNFVCkKICNlbmRpZiAvKiBVU0VfSEFMX0RBQ19SRUdJU1RFUl9DQUxMQkFDS1MgKi8KIAotLyoqIEBicmllZiBFbmFibGUgdGhlIERBQyBjaGFubmVsCisvKiogQGJyaWVmIEVuYWJsZSB0aGUgREFDIGNoYW5uZWwuCiAgICogQHBhcmFtICBfX0hBTkRMRV9fIHNwZWNpZmllcyB0aGUgREFDIGhhbmRsZS4KICAgKiBAcGFyYW0gIF9fREFDX0NoYW5uZWxfXyBzcGVjaWZpZXMgdGhlIERBQyBjaGFubmVsCiAgICogQHJldHZhbCBOb25lCiAgICovCi0jZGVmaW5lIF9fSEFMX0RBQ19FTkFCTEUoX19IQU5ETEVfXywgX19EQUNfQ2hhbm5lbF9fKSAoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+Q1IgfD0gIChEQUNfQ1JfRU4xIDw8IChfX0RBQ19DaGFubmVsX18pKSkKKyNkZWZpbmUgX19IQUxfREFDX0VOQUJMRShfX0hBTkRMRV9fLCBfX0RBQ19DaGFubmVsX18pIFwKKyAgKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNSIHw9ICAoREFDX0NSX0VOMSA8PCAoKF9fREFDX0NoYW5uZWxfXykgJiAweDEwVUwpKSkKIAotLyoqIEBicmllZiBEaXNhYmxlIHRoZSBEQUMgY2hhbm5lbAorLyoqIEBicmllZiBEaXNhYmxlIHRoZSBEQUMgY2hhbm5lbC4KICAgKiBAcGFyYW0gIF9fSEFORExFX18gc3BlY2lmaWVzIHRoZSBEQUMgaGFuZGxlCiAgICogQHBhcmFtICBfX0RBQ19DaGFubmVsX18gc3BlY2lmaWVzIHRoZSBEQUMgY2hhbm5lbC4KICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KLSNkZWZpbmUgX19IQUxfREFDX0RJU0FCTEUoX19IQU5ETEVfXywgX19EQUNfQ2hhbm5lbF9fKSAoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+Q1IgJj0gIH4oREFDX0NSX0VOMSA8PCAoX19EQUNfQ2hhbm5lbF9fKSkpCisjZGVmaW5lIF9fSEFMX0RBQ19ESVNBQkxFKF9fSEFORExFX18sIF9fREFDX0NoYW5uZWxfXykgXAorICAoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+Q1IgJj0gIH4oREFDX0NSX0VOMSA8PCAoKF9fREFDX0NoYW5uZWxfXykgJiAweDEwVUwpKSkKIAotLyoqIEBicmllZiBFbmFibGUgdGhlIERBQyBpbnRlcnJ1cHQKKy8qKiBAYnJpZWYgU2V0IERIUjEyUjEgYWxpZ25tZW50LgorICAqIEBwYXJhbSAgX19BTElHTk1FTlRfXyBzcGVjaWZpZXMgdGhlIERBQyBhbGlnbm1lbnQKKyAgKiBAcmV0dmFsIE5vbmUKKyAgKi8KKyNkZWZpbmUgREFDX0RIUjEyUjFfQUxJR05NRU5UKF9fQUxJR05NRU5UX18pICgweDAwMDAwMDA4VUwgKyAoX19BTElHTk1FTlRfXykpCisKKyNpZiBkZWZpbmVkKERBQ19DSEFOTkVMMl9TVVBQT1JUKQorLyoqIEBicmllZiAgU2V0IERIUjEyUjIgYWxpZ25tZW50LgorICAqIEBwYXJhbSAgX19BTElHTk1FTlRfXyBzcGVjaWZpZXMgdGhlIERBQyBhbGlnbm1lbnQKKyAgKiBAcmV0dmFsIE5vbmUKKyAgKi8KKyNkZWZpbmUgREFDX0RIUjEyUjJfQUxJR05NRU5UKF9fQUxJR05NRU5UX18pICgweDAwMDAwMDE0VUwgKyAoX19BTElHTk1FTlRfXykpCisjZW5kaWYgLyogREFDX0NIQU5ORUwyX1NVUFBPUlQgKi8KKworLyoqIEBicmllZiAgU2V0IERIUjEyUkQgYWxpZ25tZW50LgorICAqIEBwYXJhbSAgX19BTElHTk1FTlRfXyBzcGVjaWZpZXMgdGhlIERBQyBhbGlnbm1lbnQKKyAgKiBAcmV0dmFsIE5vbmUKKyAgKi8KKyNkZWZpbmUgREFDX0RIUjEyUkRfQUxJR05NRU5UKF9fQUxJR05NRU5UX18pICgweDAwMDAwMDIwVUwgKyAoX19BTElHTk1FTlRfXykpCisKKy8qKiBAYnJpZWYgRW5hYmxlIHRoZSBEQUMgaW50ZXJydXB0LgogICAqIEBwYXJhbSAgX19IQU5ETEVfXyBzcGVjaWZpZXMgdGhlIERBQyBoYW5kbGUKICAgKiBAcGFyYW0gIF9fSU5URVJSVVBUX18gc3BlY2lmaWVzIHRoZSBEQUMgaW50ZXJydXB0LgorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhbnkgY29tYmluYXRpb24gb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisgICogICAgICAgICAgICBAYXJnIERBQ19JVF9ETUFVRFIxIERBQyBjaGFubmVsIDEgRE1BIHVuZGVycnVuIGludGVycnVwdAorICAqICAgICAgICAgICAgQGFyZyBEQUNfSVRfRE1BVURSMiBEQUMgY2hhbm5lbCAyIERNQSB1bmRlcnJ1biBpbnRlcnJ1cHQKICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KICNkZWZpbmUgX19IQUxfREFDX0VOQUJMRV9JVChfX0hBTkRMRV9fLCBfX0lOVEVSUlVQVF9fKSAoKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNSKSB8PSAoX19JTlRFUlJVUFRfXykpCiAKLS8qKiBAYnJpZWYgRGlzYWJsZSB0aGUgREFDIGludGVycnVwdAorLyoqIEBicmllZiBEaXNhYmxlIHRoZSBEQUMgaW50ZXJydXB0LgogICAqIEBwYXJhbSAgX19IQU5ETEVfXyBzcGVjaWZpZXMgdGhlIERBQyBoYW5kbGUKICAgKiBAcGFyYW0gIF9fSU5URVJSVVBUX18gc3BlY2lmaWVzIHRoZSBEQUMgaW50ZXJydXB0LgorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhbnkgY29tYmluYXRpb24gb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisgICogICAgICAgICAgICBAYXJnIERBQ19JVF9ETUFVRFIxIERBQyBjaGFubmVsIDEgRE1BIHVuZGVycnVuIGludGVycnVwdAorICAqICAgICAgICAgICAgQGFyZyBEQUNfSVRfRE1BVURSMiBEQUMgY2hhbm5lbCAyIERNQSB1bmRlcnJ1biBpbnRlcnJ1cHQKICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KICNkZWZpbmUgX19IQUxfREFDX0RJU0FCTEVfSVQoX19IQU5ETEVfXywgX19JTlRFUlJVUFRfXykgKCgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5DUikgJj0gfihfX0lOVEVSUlVQVF9fKSkKIAotLyoqIEBicmllZiAgQ2hlY2tzIGlmIHRoZSBzcGVjaWZpZWQgREFDIGludGVycnVwdCBzb3VyY2UgaXMgZW5hYmxlZCBvciBkaXNhYmxlZC4KKy8qKiBAYnJpZWYgIENoZWNrIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBEQUMgaW50ZXJydXB0IHNvdXJjZSBpcyBlbmFibGVkIG9yIG5vdC4KICAgKiBAcGFyYW0gX19IQU5ETEVfXyBEQUMgaGFuZGxlCiAgICogQHBhcmFtIF9fSU5URVJSVVBUX18gREFDIGludGVycnVwdCBzb3VyY2UgdG8gY2hlY2sKICAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYW55IGNvbWJpbmF0aW9uIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgotICAqICAgICAgICAgICAgQGFyZyBEQUNfSVRfRE1BVURSMTogREFDIGNoYW5uZWwgMSBETUEgdW5kZXJydW4gaW50ZXJydXB0Ci0gICogICAgICAgICAgICBAYXJnIERBQ19JVF9ETUFVRFIyOiBEQUMgY2hhbm5lbCAyIERNQSB1bmRlcnJ1biBpbnRlcnJ1cHQKKyAgKiAgICAgICAgICAgIEBhcmcgREFDX0lUX0RNQVVEUjEgREFDIGNoYW5uZWwgMSBETUEgdW5kZXJydW4gaW50ZXJydXB0CisgICogICAgICAgICAgICBAYXJnIERBQ19JVF9ETUFVRFIyIERBQyBjaGFubmVsIDIgRE1BIHVuZGVycnVuIGludGVycnVwdAogICAqIEByZXR2YWwgU3RhdGUgb2YgaW50ZXJydXB0aW9uIChTRVQgb3IgUkVTRVQpCiAgICovCi0jZGVmaW5lIF9fSEFMX0RBQ19HRVRfSVRfU09VUkNFKF9fSEFORExFX18sIF9fSU5URVJSVVBUX18pICgoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+Q1IgJiAoX19JTlRFUlJVUFRfXykpID09IChfX0lOVEVSUlVQVF9fKSkKKyNkZWZpbmUgX19IQUxfREFDX0dFVF9JVF9TT1VSQ0UoX19IQU5ETEVfXywgX19JTlRFUlJVUFRfXykgKCgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5DUlwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIChfX0lOVEVSUlVQVF9fKSkgPT0gKF9fSU5URVJSVVBUX18pKQogCiAvKiogQGJyaWVmICBHZXQgdGhlIHNlbGVjdGVkIERBQydzIGZsYWcgc3RhdHVzLgogICAqIEBwYXJhbSAgX19IQU5ETEVfXyBzcGVjaWZpZXMgdGhlIERBQyBoYW5kbGUuCi0gICogQHBhcmFtICBfX0ZMQUdfXyBzcGVjaWZpZXMgdGhlIGZsYWcgdG8gY2xlYXIuCi0gICogICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYW55IGNvbWJpbmF0aW9uIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgotICAqICAgICAgICAgICAgQGFyZyBEQUNfRkxBR19ETUFVRFIxOiBETUEgdW5kZXJydW4gMSBmbGFnCi0gICogICAgICAgICAgICBAYXJnIERBQ19GTEFHX0RNQVVEUjI6IERNQSB1bmRlcnJ1biAyIGZsYWcKKyAgKiBAcGFyYW0gIF9fRkxBR19fIHNwZWNpZmllcyB0aGUgREFDIGZsYWcgdG8gZ2V0LgorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhbnkgY29tYmluYXRpb24gb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisgICogICAgICAgICAgICBAYXJnIERBQ19GTEFHX0RNQVVEUjEgREFDIGNoYW5uZWwgMSBETUEgdW5kZXJydW4gZmxhZworICAqICAgICAgICAgICAgQGFyZyBEQUNfRkxBR19ETUFVRFIyIERBQyBjaGFubmVsIDIgRE1BIHVuZGVycnVuIGZsYWcKICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KICNkZWZpbmUgX19IQUxfREFDX0dFVF9GTEFHKF9fSEFORExFX18sIF9fRkxBR19fKSAoKCgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5TUikgJiAoX19GTEFHX18pKSA9PSAoX19GTEFHX18pKQogCiAvKiogQGJyaWVmICBDbGVhciB0aGUgREFDJ3MgZmxhZy4KICAgKiBAcGFyYW0gIF9fSEFORExFX18gc3BlY2lmaWVzIHRoZSBEQUMgaGFuZGxlLgotICAqIEBwYXJhbSAgX19GTEFHX18gc3BlY2lmaWVzIHRoZSBmbGFnIHRvIGNsZWFyLgotICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGFueSBjb21iaW5hdGlvbiBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKLSAgKiAgICAgICAgICAgIEBhcmcgREFDX0ZMQUdfRE1BVURSMTogRE1BIHVuZGVycnVuIDEgZmxhZwotICAqICAgICAgICAgICAgQGFyZyBEQUNfRkxBR19ETUFVRFIyOiBETUEgdW5kZXJydW4gMiBmbGFnCisgICogQHBhcmFtICBfX0ZMQUdfXyBzcGVjaWZpZXMgdGhlIERBQyBmbGFnIHRvIGNsZWFyLgorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhbnkgY29tYmluYXRpb24gb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisgICogICAgICAgICAgICBAYXJnIERBQ19GTEFHX0RNQVVEUjEgREFDIGNoYW5uZWwgMSBETUEgdW5kZXJydW4gZmxhZworICAqICAgICAgICAgICAgQGFyZyBEQUNfRkxBR19ETUFVRFIyIERBQyBjaGFubmVsIDIgRE1BIHVuZGVycnVuIGZsYWcKICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KICNkZWZpbmUgX19IQUxfREFDX0NMRUFSX0ZMQUcoX19IQU5ETEVfXywgX19GTEFHX18pICgoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+U1IpID0gKF9fRkxBR19fKSkKKwogLyoqCiAgICogQH0KICAgKi8KIAotLyogSW5jbHVkZSBEQUMgSEFMIEV4dGVuc2lvbiBtb2R1bGUgKi8KKy8qIFByaXZhdGUgbWFjcm8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qKiBAZGVmZ3JvdXAgREFDX1ByaXZhdGVfTWFjcm9zIERBQyBQcml2YXRlIE1hY3JvcworICAqIEB7CisgICovCisjZGVmaW5lIElTX0RBQ19PVVRQVVRfQlVGRkVSX1NUQVRFKFNUQVRFKSAoKChTVEFURSkgPT0gREFDX09VVFBVVEJVRkZFUl9FTkFCTEUpIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFNUQVRFKSA9PSBEQUNfT1VUUFVUQlVGRkVSX0RJU0FCTEUpKQorCisjaWYgZGVmaW5lZChEQUNfQ0hBTk5FTDJfU1VQUE9SVCkKKyNkZWZpbmUgSVNfREFDX0NIQU5ORUwoQ0hBTk5FTCkgKCgoQ0hBTk5FTCkgPT0gREFDX0NIQU5ORUxfMSkgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChDSEFOTkVMKSA9PSBEQUNfQ0hBTk5FTF8yKSkKKyNlbHNlCisjZGVmaW5lIElTX0RBQ19DSEFOTkVMKENIQU5ORUwpICAoKENIQU5ORUwpID09IERBQ19DSEFOTkVMXzEpCisjZW5kaWYgLyogREFDX0NIQU5ORUwyX1NVUFBPUlQgKi8KKworI2RlZmluZSBJU19EQUNfQUxJR04oQUxJR04pICgoKEFMSUdOKSA9PSBEQUNfQUxJR05fMTJCX1IpIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChBTElHTikgPT0gREFDX0FMSUdOXzEyQl9MKSB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQUxJR04pID09IERBQ19BTElHTl84Ql9SKSkKKworI2RlZmluZSBJU19EQUNfREFUQShEQVRBKSAoKERBVEEpIDw9IDB4RkZGMFVMKQorCisvKioKKyAgKiBAfQorICAqLworCisvKiBJbmNsdWRlIERBQyBIQUwgRXh0ZW5kZWQgbW9kdWxlICovCiAjaW5jbHVkZSAic3RtMzJmNHh4X2hhbF9kYWNfZXguaCIKIAogLyogRXhwb3J0ZWQgZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwogLyoqIEBhZGR0b2dyb3VwIERBQ19FeHBvcnRlZF9GdW5jdGlvbnMKICAgKiBAewogICAqLwpAQCAtMzE0LDExICszODksMTIgQEAKIC8qKiBAYWRkdG9ncm91cCBEQUNfRXhwb3J0ZWRfRnVuY3Rpb25zX0dyb3VwMQogICAqIEB7CiAgICovCi0vKiBJbml0aWFsaXphdGlvbi9kZS1pbml0aWFsaXphdGlvbiBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0RBQ19Jbml0KERBQ19IYW5kbGVUeXBlRGVmKiBoZGFjKTsKLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9EQUNfRGVJbml0KERBQ19IYW5kbGVUeXBlRGVmKiBoZGFjKTsKLXZvaWQgSEFMX0RBQ19Nc3BJbml0KERBQ19IYW5kbGVUeXBlRGVmKiBoZGFjKTsKLXZvaWQgSEFMX0RBQ19Nc3BEZUluaXQoREFDX0hhbmRsZVR5cGVEZWYqIGhkYWMpOworLyogSW5pdGlhbGl6YXRpb24gYW5kIGRlLWluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9EQUNfSW5pdChEQUNfSGFuZGxlVHlwZURlZiAqaGRhYyk7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfREFDX0RlSW5pdChEQUNfSGFuZGxlVHlwZURlZiAqaGRhYyk7Cit2b2lkIEhBTF9EQUNfTXNwSW5pdChEQUNfSGFuZGxlVHlwZURlZiAqaGRhYyk7Cit2b2lkIEhBTF9EQUNfTXNwRGVJbml0KERBQ19IYW5kbGVUeXBlRGVmICpoZGFjKTsKKwogLyoqCiAgICogQH0KICAgKi8KQEAgLTMyNiwxMiArNDAyLDI3IEBACiAvKiogQGFkZHRvZ3JvdXAgREFDX0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDIKICAgKiBAewogICAqLwotLyogSS9PIG9wZXJhdGlvbiBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9EQUNfU3RhcnQoREFDX0hhbmRsZVR5cGVEZWYqIGhkYWMsIHVpbnQzMl90IENoYW5uZWwpOwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0RBQ19TdG9wKERBQ19IYW5kbGVUeXBlRGVmKiBoZGFjLCB1aW50MzJfdCBDaGFubmVsKTsKLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9EQUNfU3RhcnRfRE1BKERBQ19IYW5kbGVUeXBlRGVmKiBoZGFjLCB1aW50MzJfdCBDaGFubmVsLCB1aW50MzJfdCogcERhdGEsIHVpbnQzMl90IExlbmd0aCwgdWludDMyX3QgQWxpZ25tZW50KTsKLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9EQUNfU3RvcF9ETUEoREFDX0hhbmRsZVR5cGVEZWYqIGhkYWMsIHVpbnQzMl90IENoYW5uZWwpOwotdWludDMyX3QgSEFMX0RBQ19HZXRWYWx1ZShEQUNfSGFuZGxlVHlwZURlZiogaGRhYywgdWludDMyX3QgQ2hhbm5lbCk7CisvKiBJTyBvcGVyYXRpb24gZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0RBQ19TdGFydChEQUNfSGFuZGxlVHlwZURlZiAqaGRhYywgdWludDMyX3QgQ2hhbm5lbCk7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfREFDX1N0b3AoREFDX0hhbmRsZVR5cGVEZWYgKmhkYWMsIHVpbnQzMl90IENoYW5uZWwpOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0RBQ19TdGFydF9ETUEoREFDX0hhbmRsZVR5cGVEZWYgKmhkYWMsIHVpbnQzMl90IENoYW5uZWwsIHVpbnQzMl90ICpwRGF0YSwgdWludDMyX3QgTGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgQWxpZ25tZW50KTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9EQUNfU3RvcF9ETUEoREFDX0hhbmRsZVR5cGVEZWYgKmhkYWMsIHVpbnQzMl90IENoYW5uZWwpOwordm9pZCBIQUxfREFDX0lSUUhhbmRsZXIoREFDX0hhbmRsZVR5cGVEZWYgKmhkYWMpOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0RBQ19TZXRWYWx1ZShEQUNfSGFuZGxlVHlwZURlZiAqaGRhYywgdWludDMyX3QgQ2hhbm5lbCwgdWludDMyX3QgQWxpZ25tZW50LCB1aW50MzJfdCBEYXRhKTsKKwordm9pZCBIQUxfREFDX0NvbnZDcGx0Q2FsbGJhY2tDaDEoREFDX0hhbmRsZVR5cGVEZWYgKmhkYWMpOwordm9pZCBIQUxfREFDX0NvbnZIYWxmQ3BsdENhbGxiYWNrQ2gxKERBQ19IYW5kbGVUeXBlRGVmICpoZGFjKTsKK3ZvaWQgSEFMX0RBQ19FcnJvckNhbGxiYWNrQ2gxKERBQ19IYW5kbGVUeXBlRGVmICpoZGFjKTsKK3ZvaWQgSEFMX0RBQ19ETUFVbmRlcnJ1bkNhbGxiYWNrQ2gxKERBQ19IYW5kbGVUeXBlRGVmICpoZGFjKTsKKworI2lmIChVU0VfSEFMX0RBQ19SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkKKy8qIERBQyBjYWxsYmFjayByZWdpc3RlcmluZy91bnJlZ2lzdGVyaW5nICovCitIQUxfU3RhdHVzVHlwZURlZiAgICAgSEFMX0RBQ19SZWdpc3RlckNhbGxiYWNrKERBQ19IYW5kbGVUeXBlRGVmICpoZGFjLCBIQUxfREFDX0NhbGxiYWNrSURUeXBlRGVmIENhbGxiYWNrSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBEQUNfQ2FsbGJhY2tUeXBlRGVmIHBDYWxsYmFjayk7CitIQUxfU3RhdHVzVHlwZURlZiAgICAgSEFMX0RBQ19VblJlZ2lzdGVyQ2FsbGJhY2soREFDX0hhbmRsZVR5cGVEZWYgKmhkYWMsIEhBTF9EQUNfQ2FsbGJhY2tJRFR5cGVEZWYgQ2FsbGJhY2tJRCk7CisjZW5kaWYgLyogVVNFX0hBTF9EQUNfUkVHSVNURVJfQ0FMTEJBQ0tTICovCisKIC8qKgogICAqIEB9CiAgICovCkBAIC0zNDAsOCArNDMxLDggQEAKICAgKiBAewogICAqLwogLyogUGVyaXBoZXJhbCBDb250cm9sIGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9EQUNfQ29uZmlnQ2hhbm5lbChEQUNfSGFuZGxlVHlwZURlZiogaGRhYywgREFDX0NoYW5uZWxDb25mVHlwZURlZiogc0NvbmZpZywgdWludDMyX3QgQ2hhbm5lbCk7Ci1IQUxfU3RhdHVzVHlwZURlZiBIQUxfREFDX1NldFZhbHVlKERBQ19IYW5kbGVUeXBlRGVmKiBoZGFjLCB1aW50MzJfdCBDaGFubmVsLCB1aW50MzJfdCBBbGlnbm1lbnQsIHVpbnQzMl90IERhdGEpOwordWludDMyX3QgSEFMX0RBQ19HZXRWYWx1ZShEQUNfSGFuZGxlVHlwZURlZiAqaGRhYywgdWludDMyX3QgQ2hhbm5lbCk7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfREFDX0NvbmZpZ0NoYW5uZWwoREFDX0hhbmRsZVR5cGVEZWYgKmhkYWMsIERBQ19DaGFubmVsQ29uZlR5cGVEZWYgKnNDb25maWcsIHVpbnQzMl90IENoYW5uZWwpOwogLyoqCiAgICogQH0KICAgKi8KQEAgLTM0OSwyMSArNDQwLDEwIEBACiAvKiogQGFkZHRvZ3JvdXAgREFDX0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDQKICAgKiBAewogICAqLwotLyogUGVyaXBoZXJhbCBTdGF0ZSBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLUhBTF9EQUNfU3RhdGVUeXBlRGVmIEhBTF9EQUNfR2V0U3RhdGUoREFDX0hhbmRsZVR5cGVEZWYqIGhkYWMpOwotdm9pZCBIQUxfREFDX0lSUUhhbmRsZXIoREFDX0hhbmRsZVR5cGVEZWYqIGhkYWMpOworLyogUGVyaXBoZXJhbCBTdGF0ZSBhbmQgRXJyb3IgZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK0hBTF9EQUNfU3RhdGVUeXBlRGVmIEhBTF9EQUNfR2V0U3RhdGUoREFDX0hhbmRsZVR5cGVEZWYgKmhkYWMpOwogdWludDMyX3QgSEFMX0RBQ19HZXRFcnJvcihEQUNfSGFuZGxlVHlwZURlZiAqaGRhYyk7CiAKLXZvaWQgSEFMX0RBQ19Db252Q3BsdENhbGxiYWNrQ2gxKERBQ19IYW5kbGVUeXBlRGVmKiBoZGFjKTsKLXZvaWQgSEFMX0RBQ19Db252SGFsZkNwbHRDYWxsYmFja0NoMShEQUNfSGFuZGxlVHlwZURlZiogaGRhYyk7Ci12b2lkIEhBTF9EQUNfRXJyb3JDYWxsYmFja0NoMShEQUNfSGFuZGxlVHlwZURlZiAqaGRhYyk7Ci12b2lkIEhBTF9EQUNfRE1BVW5kZXJydW5DYWxsYmFja0NoMShEQUNfSGFuZGxlVHlwZURlZiAqaGRhYyk7Ci0KLSNpZiAoVVNFX0hBTF9EQUNfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCi0vKiBEQUMgY2FsbGJhY2sgcmVnaXN0ZXJpbmcvdW5yZWdpc3RlcmluZyAqLwotSEFMX1N0YXR1c1R5cGVEZWYgICAgIEhBTF9EQUNfUmVnaXN0ZXJDYWxsYmFjayAoREFDX0hhbmRsZVR5cGVEZWYgKmhkYWMsIEhBTF9EQUNfQ2FsbGJhY2tJRFR5cGVEZWYgQ2FsbGJhY2tJRCwgcERBQ19DYWxsYmFja1R5cGVEZWYgcENhbGxiYWNrKTsKLUhBTF9TdGF0dXNUeXBlRGVmICAgICBIQUxfREFDX1VuUmVnaXN0ZXJDYWxsYmFjayAoREFDX0hhbmRsZVR5cGVEZWYgKmhkYWMsIEhBTF9EQUNfQ2FsbGJhY2tJRFR5cGVEZWYgQ2FsbGJhY2tJRCk7Ci0jZW5kaWYgLyogVVNFX0hBTF9EQUNfUkVHSVNURVJfQ0FMTEJBQ0tTICovCiAvKioKICAgKiBAfQogICAqLwpAQCAtMzcxLDc0ICs0NTEsMTMgQEAKIC8qKgogICAqIEB9CiAgICovCi0vKiBQcml2YXRlIHR5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyogUHJpdmF0ZSB2YXJpYWJsZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qIFByaXZhdGUgY29uc3RhbnRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKiogQGRlZmdyb3VwIERBQ19Qcml2YXRlX0NvbnN0YW50cyBEQUMgUHJpdmF0ZSBDb25zdGFudHMKLSAgKiBAewotICAqLwogCi0vKioKLSAgKiBAfQotICAqLwotCi0vKiBQcml2YXRlIG1hY3JvcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyoqIEBkZWZncm91cCBEQUNfUHJpdmF0ZV9NYWNyb3MgREFDIFByaXZhdGUgTWFjcm9zCi0gICogQHsKLSAgKi8KLSNkZWZpbmUgSVNfREFDX0RBVEEoREFUQSkgKChEQVRBKSA8PSAweEZGRjBVKQotI2RlZmluZSBJU19EQUNfQUxJR04oQUxJR04pICgoKEFMSUdOKSA9PSBEQUNfQUxJR05fMTJCX1IpIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChBTElHTikgPT0gREFDX0FMSUdOXzEyQl9MKSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQUxJR04pID09IERBQ19BTElHTl84Ql9SKSkKLSNkZWZpbmUgSVNfREFDX0NIQU5ORUwoQ0hBTk5FTCkgKCgoQ0hBTk5FTCkgPT0gREFDX0NIQU5ORUxfMSkgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChDSEFOTkVMKSA9PSBEQUNfQ0hBTk5FTF8yKSkKLSNkZWZpbmUgSVNfREFDX09VVFBVVF9CVUZGRVJfU1RBVEUoU1RBVEUpICgoKFNUQVRFKSA9PSBEQUNfT1VUUFVUQlVGRkVSX0VOQUJMRSkgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoU1RBVEUpID09IERBQ19PVVRQVVRCVUZGRVJfRElTQUJMRSkpCi0KLSNkZWZpbmUgSVNfREFDX1RSSUdHRVIoVFJJR0dFUikgKCgoVFJJR0dFUikgPT0gREFDX1RSSUdHRVJfTk9ORSkgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChUUklHR0VSKSA9PSBEQUNfVFJJR0dFUl9UMl9UUkdPKSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFRSSUdHRVIpID09IERBQ19UUklHR0VSX1Q4X1RSR08pIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVFJJR0dFUikgPT0gREFDX1RSSUdHRVJfVDdfVFJHTykgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChUUklHR0VSKSA9PSBEQUNfVFJJR0dFUl9UNV9UUkdPKSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFRSSUdHRVIpID09IERBQ19UUklHR0VSX1Q2X1RSR08pIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVFJJR0dFUikgPT0gREFDX1RSSUdHRVJfVDRfVFJHTykgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChUUklHR0VSKSA9PSBEQUNfVFJJR0dFUl9FWFRfSVQ5KSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFRSSUdHRVIpID09IERBQ19UUklHR0VSX1NPRlRXQVJFKSkKLQotLyoqIEBicmllZiBTZXQgREhSMTJSMSBhbGlnbm1lbnQKLSAgKiBAcGFyYW0gIF9fQUxJR05NRU5UX18gc3BlY2lmaWVzIHRoZSBEQUMgYWxpZ25tZW50Ci0gICogQHJldHZhbCBOb25lCi0gICovCi0jZGVmaW5lIERBQ19ESFIxMlIxX0FMSUdOTUVOVChfX0FMSUdOTUVOVF9fKSAoMHgwMDAwMDAwOFUgKyAoX19BTElHTk1FTlRfXykpCi0KLS8qKiBAYnJpZWYgIFNldCBESFIxMlIyIGFsaWdubWVudAotICAqIEBwYXJhbSAgX19BTElHTk1FTlRfXyBzcGVjaWZpZXMgdGhlIERBQyBhbGlnbm1lbnQKLSAgKiBAcmV0dmFsIE5vbmUKLSAgKi8KLSNkZWZpbmUgREFDX0RIUjEyUjJfQUxJR05NRU5UKF9fQUxJR05NRU5UX18pICgoKHVpbnQzMl90KTB4MDAwMDAwMTRVKSArIChfX0FMSUdOTUVOVF9fKSkKLQotLyoqIEBicmllZiAgU2V0IERIUjEyUkQgYWxpZ25tZW50Ci0gICogQHBhcmFtICBfX0FMSUdOTUVOVF9fIHNwZWNpZmllcyB0aGUgREFDIGFsaWdubWVudAotICAqIEByZXR2YWwgTm9uZQotICAqLwotI2RlZmluZSBEQUNfREhSMTJSRF9BTElHTk1FTlQoX19BTElHTk1FTlRfXykgKDB4MDAwMDAwMjBVICsgKF9fQUxJR05NRU5UX18pKQotCi0vKioKLSAgKiBAfQotICAqLwotCi0vKiBQcml2YXRlIGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyoqIEBkZWZncm91cCBEQUNfUHJpdmF0ZV9GdW5jdGlvbnMgREFDIFByaXZhdGUgRnVuY3Rpb25zCiAgICogQHsKICAgKi8KLS8qKgotICAqIEB9Ci0gICovCi0jZW5kaWYgLyogU1RNMzJGNDA1eHggfHwgU1RNMzJGNDE1eHggfHwgU1RNMzJGNDA3eHggfHwgU1RNMzJGNDE3eHggfHxcCi0gICAgICAgICAgU1RNMzJGNDI3eHggfHwgU1RNMzJGNDM3eHggfHwgU1RNMzJGNDI5eHggfHwgU1RNMzJGNDM5eHggfHxcCi0gICAgICAgICAgU1RNMzJGNDEweHggfHwgU1RNMzJGNDQ2eHggfHwgU1RNMzJGNDY5eHggfHwgU1RNMzJGNDc5eHggfHxcCi0JCSAgU1RNMzJGNDEzeHggfHwgU1RNMzJGNDIzeHggKi8KLQordm9pZCBEQUNfRE1BQ29udkNwbHRDaDEoRE1BX0hhbmRsZVR5cGVEZWYgKmhkbWEpOwordm9pZCBEQUNfRE1BRXJyb3JDaDEoRE1BX0hhbmRsZVR5cGVEZWYgKmhkbWEpOwordm9pZCBEQUNfRE1BSGFsZkNvbnZDcGx0Q2gxKERNQV9IYW5kbGVUeXBlRGVmICpoZG1hKTsKIC8qKgogICAqIEB9CiAgICovCkBAIC00NDYsMTEgKzQ2NSwxOCBAQAogLyoqCiAgICogQH0KICAgKi8KLSAgCisKKyNlbmRpZiAvKiBEQUMgKi8KKworLyoqCisgICogQH0KKyAgKi8KKwogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CiAjZW5kaWYKIAotI2VuZGlmIC8qX19TVE0zMkY0eHhfSEFMX0RBQ19IICovCisKKyNlbmRpZiAvKiBTVE0zMkY0eHhfSEFMX0RBQ19IICovCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKiogKEMpIENPUFlSSUdIVCBTVE1pY3JvZWxlY3Ryb25pY3MgKioqKipFTkQgT0YgRklMRSoqKiovCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJmNHh4X2hhbF9kYWNfZXguaCBiL0luYy9zdG0zMmY0eHhfaGFsX2RhY19leC5oCmluZGV4IDRlOTc5M2EuLjAzMTU5ZDQgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmY0eHhfaGFsX2RhY19leC5oCisrKyBiL0luYy9zdG0zMmY0eHhfaGFsX2RhY19leC5oCkBAIC0xLDEyICsxLDEyIEBACiAvKioKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gICogQGZpbGUgICAgc3RtMzJmNHh4X2hhbF9kYWMuaAorICAqIEBmaWxlICAgIHN0bTMyZjR4eF9oYWxfZGFjX2V4LmgKICAgKiBAYXV0aG9yICBNQ0QgQXBwbGljYXRpb24gVGVhbQotICAqIEBicmllZiAgIEhlYWRlciBmaWxlIG9mIERBQyBIQUwgRXh0ZW5zaW9uIG1vZHVsZS4KKyAgKiBAYnJpZWYgICBIZWFkZXIgZmlsZSBvZiBEQUMgSEFMIEV4dGVuZGVkIG1vZHVsZS4KICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICogQGF0dGVudGlvbgogICAqCi0gICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxNyBTVE1pY3JvZWxlY3Ryb25pY3MuCisgICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxNiBTVE1pY3JvZWxlY3Ryb25pY3MuCiAgICogQWxsIHJpZ2h0cyByZXNlcnZlZC48L2NlbnRlcj48L2gyPgogICAqCiAgICogVGhpcyBzb2Z0d2FyZSBjb21wb25lbnQgaXMgbGljZW5zZWQgYnkgU1QgdW5kZXIgQlNEIDMtQ2xhdXNlIGxpY2Vuc2UsCkBAIC0xOCw2MiArMTgsNjYgQEAKICAgKi8KIAogLyogRGVmaW5lIHRvIHByZXZlbnQgcmVjdXJzaXZlIGluY2x1c2lvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSNpZm5kZWYgX19TVE0zMkY0eHhfSEFMX0RBQ19FWF9ICi0jZGVmaW5lIF9fU1RNMzJGNHh4X0hBTF9EQUNfRVhfSAorI2lmbmRlZiBTVE0zMkY0eHhfSEFMX0RBQ19FWF9ICisjZGVmaW5lIFNUTTMyRjR4eF9IQUxfREFDX0VYX0gKIAogI2lmZGVmIF9fY3BsdXNwbHVzCi0gZXh0ZXJuICJDIiB7CitleHRlcm4gIkMiIHsKICNlbmRpZgogCi0jaWYgZGVmaW5lZChTVE0zMkY0MDV4eCkgfHwgZGVmaW5lZChTVE0zMkY0MTV4eCkgfHwgZGVmaW5lZChTVE0zMkY0MDd4eCkgfHwgZGVmaW5lZChTVE0zMkY0MTd4eCkgfHxcCi0gICAgZGVmaW5lZChTVE0zMkY0Mjd4eCkgfHwgZGVmaW5lZChTVE0zMkY0Mzd4eCkgfHwgZGVmaW5lZChTVE0zMkY0Mjl4eCkgfHwgZGVmaW5lZChTVE0zMkY0Mzl4eCkgfHxcCi0gICAgZGVmaW5lZChTVE0zMkY0MTBUeCkgfHwgZGVmaW5lZChTVE0zMkY0MTBDeCkgfHwgZGVmaW5lZChTVE0zMkY0MTBSeCkgfHwgZGVmaW5lZChTVE0zMkY0NDZ4eCkgfHxcCi0gICAgZGVmaW5lZChTVE0zMkY0Njl4eCkgfHwgZGVmaW5lZChTVE0zMkY0Nzl4eCkgfHwgZGVmaW5lZChTVE0zMkY0MTN4eCkgfHwgZGVmaW5lZChTVE0zMkY0MjN4eCkKLQotLyogSW5jbHVkZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSNpbmNsdWRlICJzdG0zMmY0eHhfaGFsX2RlZi5oIgotCiAvKiogQGFkZHRvZ3JvdXAgU1RNMzJGNHh4X0hBTF9Ecml2ZXIKICAgKiBAewogICAqLwogCisvKiBJbmNsdWRlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2luY2x1ZGUgInN0bTMyZjR4eF9oYWxfZGVmLmgiCisKKyNpZiBkZWZpbmVkKERBQykKKwogLyoqIEBhZGR0b2dyb3VwIERBQ0V4CiAgICogQHsKICAgKi8KIAogLyogRXhwb3J0ZWQgdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoqCisgICogQGJyaWVmICBIQUwgU3RhdGUgc3RydWN0dXJlcyBkZWZpbml0aW9uCisgICovCisKIC8qIEV4cG9ydGVkIGNvbnN0YW50cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKiogQGRlZmdyb3VwIERBQ0V4X0V4cG9ydGVkX0NvbnN0YW50cyBEQUMgRXhwb3J0ZWQgQ29uc3RhbnRzCisKKy8qKiBAZGVmZ3JvdXAgREFDRXhfRXhwb3J0ZWRfQ29uc3RhbnRzIERBQ0V4IEV4cG9ydGVkIENvbnN0YW50cwogICAqIEB7CiAgICovCiAKLS8qKiBAZGVmZ3JvdXAgREFDRXhfbGZzcnVubWFza190cmlhbmdsZWFtcGxpdHVkZSBEQUMgTEZTIFJ1biBNYXNrIFRyaWFuZ2xlIEFtcGxpdHVkZQorLyoqIEBkZWZncm91cCBEQUNFeF9sZnNydW5tYXNrX3RyaWFuZ2xlYW1wbGl0dWRlIERBQ0V4IGxmc3J1bm1hc2sgdHJpYW5nbGUgYW1wbGl0dWRlCiAgICogQHsKICAgKi8KLSNkZWZpbmUgREFDX0xGU1JVTk1BU0tfQklUMCAgICAgICAgICAgICAgICAweDAwMDAwMDAwVSAvKiE8IFVubWFzayBEQUMgY2hhbm5lbCBMRlNSIGJpdDAgZm9yIG5vaXNlIHdhdmUgZ2VuZXJhdGlvbiAqLwotI2RlZmluZSBEQUNfTEZTUlVOTUFTS19CSVRTMV8wICAgICAgICAgICAgICgodWludDMyX3QpREFDX0NSX01BTVAxXzApIC8qITwgVW5tYXNrIERBQyBjaGFubmVsIExGU1IgYml0WzE6MF0gZm9yIG5vaXNlIHdhdmUgZ2VuZXJhdGlvbiAqLwotI2RlZmluZSBEQUNfTEZTUlVOTUFTS19CSVRTMl8wICAgICAgICAgICAgICgodWludDMyX3QpREFDX0NSX01BTVAxXzEpIC8qITwgVW5tYXNrIERBQyBjaGFubmVsIExGU1IgYml0WzI6MF0gZm9yIG5vaXNlIHdhdmUgZ2VuZXJhdGlvbiAqLwotI2RlZmluZSBEQUNfTEZTUlVOTUFTS19CSVRTM18wICAgICAgICAgICAgICgodWludDMyX3QpREFDX0NSX01BTVAxXzEgfCBEQUNfQ1JfTUFNUDFfMCkvKiE8IFVubWFzayBEQUMgY2hhbm5lbCBMRlNSIGJpdFszOjBdIGZvciBub2lzZSB3YXZlIGdlbmVyYXRpb24gKi8KLSNkZWZpbmUgREFDX0xGU1JVTk1BU0tfQklUUzRfMCAgICAgICAgICAgICAoKHVpbnQzMl90KURBQ19DUl9NQU1QMV8yKSAvKiE8IFVubWFzayBEQUMgY2hhbm5lbCBMRlNSIGJpdFs0OjBdIGZvciBub2lzZSB3YXZlIGdlbmVyYXRpb24gKi8KLSNkZWZpbmUgREFDX0xGU1JVTk1BU0tfQklUUzVfMCAgICAgICAgICAgICAoKHVpbnQzMl90KURBQ19DUl9NQU1QMV8yIHwgREFDX0NSX01BTVAxXzApIC8qITwgVW5tYXNrIERBQyBjaGFubmVsIExGU1IgYml0WzU6MF0gZm9yIG5vaXNlIHdhdmUgZ2VuZXJhdGlvbiAqLwotI2RlZmluZSBEQUNfTEZTUlVOTUFTS19CSVRTNl8wICAgICAgICAgICAgICgodWludDMyX3QpREFDX0NSX01BTVAxXzIgfCBEQUNfQ1JfTUFNUDFfMSkgLyohPCBVbm1hc2sgREFDIGNoYW5uZWwgTEZTUiBiaXRbNjowXSBmb3Igbm9pc2Ugd2F2ZSBnZW5lcmF0aW9uICovCi0jZGVmaW5lIERBQ19MRlNSVU5NQVNLX0JJVFM3XzAgICAgICAgICAgICAgKCh1aW50MzJfdClEQUNfQ1JfTUFNUDFfMiB8IERBQ19DUl9NQU1QMV8xIHwgREFDX0NSX01BTVAxXzApIC8qITwgVW5tYXNrIERBQyBjaGFubmVsIExGU1IgYml0Wzc6MF0gZm9yIG5vaXNlIHdhdmUgZ2VuZXJhdGlvbiAqLwotI2RlZmluZSBEQUNfTEZTUlVOTUFTS19CSVRTOF8wICAgICAgICAgICAgICgodWludDMyX3QpREFDX0NSX01BTVAxXzMpIC8qITwgVW5tYXNrIERBQyBjaGFubmVsIExGU1IgYml0Wzg6MF0gZm9yIG5vaXNlIHdhdmUgZ2VuZXJhdGlvbiAqLwotI2RlZmluZSBEQUNfTEZTUlVOTUFTS19CSVRTOV8wICAgICAgICAgICAgICgodWludDMyX3QpREFDX0NSX01BTVAxXzMgfCBEQUNfQ1JfTUFNUDFfMCkgLyohPCBVbm1hc2sgREFDIGNoYW5uZWwgTEZTUiBiaXRbOTowXSBmb3Igbm9pc2Ugd2F2ZSBnZW5lcmF0aW9uICovCi0jZGVmaW5lIERBQ19MRlNSVU5NQVNLX0JJVFMxMF8wICAgICAgICAgICAgKCh1aW50MzJfdClEQUNfQ1JfTUFNUDFfMyB8IERBQ19DUl9NQU1QMV8xKSAvKiE8IFVubWFzayBEQUMgY2hhbm5lbCBMRlNSIGJpdFsxMDowXSBmb3Igbm9pc2Ugd2F2ZSBnZW5lcmF0aW9uICovCi0jZGVmaW5lIERBQ19MRlNSVU5NQVNLX0JJVFMxMV8wICAgICAgICAgICAgKCh1aW50MzJfdClEQUNfQ1JfTUFNUDFfMyB8IERBQ19DUl9NQU1QMV8xIHwgREFDX0NSX01BTVAxXzApIC8qITwgVW5tYXNrIERBQyBjaGFubmVsIExGU1IgYml0WzExOjBdIGZvciBub2lzZSB3YXZlIGdlbmVyYXRpb24gKi8KLSNkZWZpbmUgREFDX1RSSUFOR0xFQU1QTElUVURFXzEgICAgICAgICAgICAweDAwMDAwMDAwVSAvKiE8IFNlbGVjdCBtYXggdHJpYW5nbGUgYW1wbGl0dWRlIG9mIDEgKi8KLSNkZWZpbmUgREFDX1RSSUFOR0xFQU1QTElUVURFXzMgICAgICAgICAgICAoKHVpbnQzMl90KURBQ19DUl9NQU1QMV8wKSAvKiE8IFNlbGVjdCBtYXggdHJpYW5nbGUgYW1wbGl0dWRlIG9mIDMgKi8KLSNkZWZpbmUgREFDX1RSSUFOR0xFQU1QTElUVURFXzcgICAgICAgICAgICAoKHVpbnQzMl90KURBQ19DUl9NQU1QMV8xKSAvKiE8IFNlbGVjdCBtYXggdHJpYW5nbGUgYW1wbGl0dWRlIG9mIDcgKi8KLSNkZWZpbmUgREFDX1RSSUFOR0xFQU1QTElUVURFXzE1ICAgICAgICAgICAoKHVpbnQzMl90KURBQ19DUl9NQU1QMV8xIHwgREFDX0NSX01BTVAxXzApIC8qITwgU2VsZWN0IG1heCB0cmlhbmdsZSBhbXBsaXR1ZGUgb2YgMTUgKi8KLSNkZWZpbmUgREFDX1RSSUFOR0xFQU1QTElUVURFXzMxICAgICAgICAgICAoKHVpbnQzMl90KURBQ19DUl9NQU1QMV8yKSAvKiE8IFNlbGVjdCBtYXggdHJpYW5nbGUgYW1wbGl0dWRlIG9mIDMxICovCi0jZGVmaW5lIERBQ19UUklBTkdMRUFNUExJVFVERV82MyAgICAgICAgICAgKCh1aW50MzJfdClEQUNfQ1JfTUFNUDFfMiB8IERBQ19DUl9NQU1QMV8wKSAvKiE8IFNlbGVjdCBtYXggdHJpYW5nbGUgYW1wbGl0dWRlIG9mIDYzICovCi0jZGVmaW5lIERBQ19UUklBTkdMRUFNUExJVFVERV8xMjcgICAgICAgICAgKCh1aW50MzJfdClEQUNfQ1JfTUFNUDFfMiB8IERBQ19DUl9NQU1QMV8xKSAvKiE8IFNlbGVjdCBtYXggdHJpYW5nbGUgYW1wbGl0dWRlIG9mIDEyNyAqLwotI2RlZmluZSBEQUNfVFJJQU5HTEVBTVBMSVRVREVfMjU1ICAgICAgICAgICgodWludDMyX3QpREFDX0NSX01BTVAxXzIgfCBEQUNfQ1JfTUFNUDFfMSB8IERBQ19DUl9NQU1QMV8wKSAvKiE8IFNlbGVjdCBtYXggdHJpYW5nbGUgYW1wbGl0dWRlIG9mIDI1NSAqLwotI2RlZmluZSBEQUNfVFJJQU5HTEVBTVBMSVRVREVfNTExICAgICAgICAgICgodWludDMyX3QpREFDX0NSX01BTVAxXzMpIC8qITwgU2VsZWN0IG1heCB0cmlhbmdsZSBhbXBsaXR1ZGUgb2YgNTExICovCi0jZGVmaW5lIERBQ19UUklBTkdMRUFNUExJVFVERV8xMDIzICAgICAgICAgKCh1aW50MzJfdClEQUNfQ1JfTUFNUDFfMyB8IERBQ19DUl9NQU1QMV8wKSAvKiE8IFNlbGVjdCBtYXggdHJpYW5nbGUgYW1wbGl0dWRlIG9mIDEwMjMgKi8KLSNkZWZpbmUgREFDX1RSSUFOR0xFQU1QTElUVURFXzIwNDcgICAgICAgICAoKHVpbnQzMl90KURBQ19DUl9NQU1QMV8zIHwgREFDX0NSX01BTVAxXzEpIC8qITwgU2VsZWN0IG1heCB0cmlhbmdsZSBhbXBsaXR1ZGUgb2YgMjA0NyAqLwotI2RlZmluZSBEQUNfVFJJQU5HTEVBTVBMSVRVREVfNDA5NSAgICAgICAgICgodWludDMyX3QpREFDX0NSX01BTVAxXzMgfCBEQUNfQ1JfTUFNUDFfMSB8IERBQ19DUl9NQU1QMV8wKSAvKiE8IFNlbGVjdCBtYXggdHJpYW5nbGUgYW1wbGl0dWRlIG9mIDQwOTUgKi8KKyNkZWZpbmUgREFDX0xGU1JVTk1BU0tfQklUMCAgICAgICAgICAgICAgICAweDAwMDAwMDAwVUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVW5tYXNrIERBQyBjaGFubmVsIExGU1IgYml0MCBmb3Igbm9pc2Ugd2F2ZSBnZW5lcmF0aW9uICovCisjZGVmaW5lIERBQ19MRlNSVU5NQVNLX0JJVFMxXzAgICAgICAgICAgICAgKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERBQ19DUl9NQU1QMV8wKSAvKiE8IFVubWFzayBEQUMgY2hhbm5lbCBMRlNSIGJpdFsxOjBdIGZvciBub2lzZSB3YXZlIGdlbmVyYXRpb24gKi8KKyNkZWZpbmUgREFDX0xGU1JVTk1BU0tfQklUUzJfMCAgICAgICAgICAgICAoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERBQ19DUl9NQU1QMV8xICAgICAgICAgICAgICAgICApIC8qITwgVW5tYXNrIERBQyBjaGFubmVsIExGU1IgYml0WzI6MF0gZm9yIG5vaXNlIHdhdmUgZ2VuZXJhdGlvbiAqLworI2RlZmluZSBEQUNfTEZTUlVOTUFTS19CSVRTM18wICAgICAgICAgICAgICggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREFDX0NSX01BTVAxXzEgfCBEQUNfQ1JfTUFNUDFfMCkgLyohPCBVbm1hc2sgREFDIGNoYW5uZWwgTEZTUiBiaXRbMzowXSBmb3Igbm9pc2Ugd2F2ZSBnZW5lcmF0aW9uICovCisjZGVmaW5lIERBQ19MRlNSVU5NQVNLX0JJVFM0XzAgICAgICAgICAgICAgKCAgICAgICAgICAgICAgICAgREFDX0NSX01BTVAxXzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSAvKiE8IFVubWFzayBEQUMgY2hhbm5lbCBMRlNSIGJpdFs0OjBdIGZvciBub2lzZSB3YXZlIGdlbmVyYXRpb24gKi8KKyNkZWZpbmUgREFDX0xGU1JVTk1BU0tfQklUUzVfMCAgICAgICAgICAgICAoICAgICAgICAgICAgICAgICBEQUNfQ1JfTUFNUDFfMiAgICAgICAgICAgICAgICAgIHwgREFDX0NSX01BTVAxXzApIC8qITwgVW5tYXNrIERBQyBjaGFubmVsIExGU1IgYml0WzU6MF0gZm9yIG5vaXNlIHdhdmUgZ2VuZXJhdGlvbiAqLworI2RlZmluZSBEQUNfTEZTUlVOTUFTS19CSVRTNl8wICAgICAgICAgICAgICggICAgICAgICAgICAgICAgIERBQ19DUl9NQU1QMV8yIHwgREFDX0NSX01BTVAxXzEgICAgICAgICAgICAgICAgICkgLyohPCBVbm1hc2sgREFDIGNoYW5uZWwgTEZTUiBiaXRbNjowXSBmb3Igbm9pc2Ugd2F2ZSBnZW5lcmF0aW9uICovCisjZGVmaW5lIERBQ19MRlNSVU5NQVNLX0JJVFM3XzAgICAgICAgICAgICAgKCAgICAgICAgICAgICAgICAgREFDX0NSX01BTVAxXzIgfCBEQUNfQ1JfTUFNUDFfMSB8IERBQ19DUl9NQU1QMV8wKSAvKiE8IFVubWFzayBEQUMgY2hhbm5lbCBMRlNSIGJpdFs3OjBdIGZvciBub2lzZSB3YXZlIGdlbmVyYXRpb24gKi8KKyNkZWZpbmUgREFDX0xGU1JVTk1BU0tfQklUUzhfMCAgICAgICAgICAgICAoREFDX0NSX01BTVAxXzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIC8qITwgVW5tYXNrIERBQyBjaGFubmVsIExGU1IgYml0Wzg6MF0gZm9yIG5vaXNlIHdhdmUgZ2VuZXJhdGlvbiAqLworI2RlZmluZSBEQUNfTEZTUlVOTUFTS19CSVRTOV8wICAgICAgICAgICAgIChEQUNfQ1JfTUFNUDFfMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBEQUNfQ1JfTUFNUDFfMCkgLyohPCBVbm1hc2sgREFDIGNoYW5uZWwgTEZTUiBiaXRbOTowXSBmb3Igbm9pc2Ugd2F2ZSBnZW5lcmF0aW9uICovCisjZGVmaW5lIERBQ19MRlNSVU5NQVNLX0JJVFMxMF8wICAgICAgICAgICAgKERBQ19DUl9NQU1QMV8zICAgICAgICAgICAgICAgICAgfCBEQUNfQ1JfTUFNUDFfMSAgICAgICAgICAgICAgICAgKSAvKiE8IFVubWFzayBEQUMgY2hhbm5lbCBMRlNSIGJpdFsxMDowXSBmb3Igbm9pc2Ugd2F2ZSBnZW5lcmF0aW9uICovCisjZGVmaW5lIERBQ19MRlNSVU5NQVNLX0JJVFMxMV8wICAgICAgICAgICAgKERBQ19DUl9NQU1QMV8zICAgICAgICAgICAgICAgICAgfCBEQUNfQ1JfTUFNUDFfMSB8IERBQ19DUl9NQU1QMV8wKSAvKiE8IFVubWFzayBEQUMgY2hhbm5lbCBMRlNSIGJpdFsxMTowXSBmb3Igbm9pc2Ugd2F2ZSBnZW5lcmF0aW9uICovCisjZGVmaW5lIERBQ19UUklBTkdMRUFNUExJVFVERV8xICAgICAgICAgICAgMHgwMDAwMDAwMFVMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNlbGVjdCBtYXggdHJpYW5nbGUgYW1wbGl0dWRlIG9mIDEgKi8KKyNkZWZpbmUgREFDX1RSSUFOR0xFQU1QTElUVURFXzMgICAgICAgICAgICAoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREFDX0NSX01BTVAxXzApIC8qITwgU2VsZWN0IG1heCB0cmlhbmdsZSBhbXBsaXR1ZGUgb2YgMyAqLworI2RlZmluZSBEQUNfVFJJQU5HTEVBTVBMSVRVREVfNyAgICAgICAgICAgICggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREFDX0NSX01BTVAxXzEgICAgICAgICAgICAgICAgICkgLyohPCBTZWxlY3QgbWF4IHRyaWFuZ2xlIGFtcGxpdHVkZSBvZiA3ICovCisjZGVmaW5lIERBQ19UUklBTkdMRUFNUExJVFVERV8xNSAgICAgICAgICAgKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQUNfQ1JfTUFNUDFfMSB8IERBQ19DUl9NQU1QMV8wKSAvKiE8IFNlbGVjdCBtYXggdHJpYW5nbGUgYW1wbGl0dWRlIG9mIDE1ICovCisjZGVmaW5lIERBQ19UUklBTkdMRUFNUExJVFVERV8zMSAgICAgICAgICAgKCAgICAgICAgICAgICAgICAgREFDX0NSX01BTVAxXzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSAvKiE8IFNlbGVjdCBtYXggdHJpYW5nbGUgYW1wbGl0dWRlIG9mIDMxICovCisjZGVmaW5lIERBQ19UUklBTkdMRUFNUExJVFVERV82MyAgICAgICAgICAgKCAgICAgICAgICAgICAgICAgREFDX0NSX01BTVAxXzIgICAgICAgICAgICAgICAgICB8IERBQ19DUl9NQU1QMV8wKSAvKiE8IFNlbGVjdCBtYXggdHJpYW5nbGUgYW1wbGl0dWRlIG9mIDYzICovCisjZGVmaW5lIERBQ19UUklBTkdMRUFNUExJVFVERV8xMjcgICAgICAgICAgKCAgICAgICAgICAgICAgICAgREFDX0NSX01BTVAxXzIgfCBEQUNfQ1JfTUFNUDFfMSAgICAgICAgICAgICAgICAgKSAvKiE8IFNlbGVjdCBtYXggdHJpYW5nbGUgYW1wbGl0dWRlIG9mIDEyNyAqLworI2RlZmluZSBEQUNfVFJJQU5HTEVBTVBMSVRVREVfMjU1ICAgICAgICAgICggICAgICAgICAgICAgICAgIERBQ19DUl9NQU1QMV8yIHwgREFDX0NSX01BTVAxXzEgfCBEQUNfQ1JfTUFNUDFfMCkgLyohPCBTZWxlY3QgbWF4IHRyaWFuZ2xlIGFtcGxpdHVkZSBvZiAyNTUgKi8KKyNkZWZpbmUgREFDX1RSSUFOR0xFQU1QTElUVURFXzUxMSAgICAgICAgICAoREFDX0NSX01BTVAxXzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIC8qITwgU2VsZWN0IG1heCB0cmlhbmdsZSBhbXBsaXR1ZGUgb2YgNTExICovCisjZGVmaW5lIERBQ19UUklBTkdMRUFNUExJVFVERV8xMDIzICAgICAgICAgKERBQ19DUl9NQU1QMV8zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IERBQ19DUl9NQU1QMV8wKSAvKiE8IFNlbGVjdCBtYXggdHJpYW5nbGUgYW1wbGl0dWRlIG9mIDEwMjMgKi8KKyNkZWZpbmUgREFDX1RSSUFOR0xFQU1QTElUVURFXzIwNDcgICAgICAgICAoREFDX0NSX01BTVAxXzMgICAgICAgICAgICAgICAgICB8IERBQ19DUl9NQU1QMV8xICAgICAgICAgICAgICAgICApIC8qITwgU2VsZWN0IG1heCB0cmlhbmdsZSBhbXBsaXR1ZGUgb2YgMjA0NyAqLworI2RlZmluZSBEQUNfVFJJQU5HTEVBTVBMSVRVREVfNDA5NSAgICAgICAgIChEQUNfQ1JfTUFNUDFfMyAgICAgICAgICAgICAgICAgIHwgREFDX0NSX01BTVAxXzEgfCBEQUNfQ1JfTUFNUDFfMCkgLyohPCBTZWxlY3QgbWF4IHRyaWFuZ2xlIGFtcGxpdHVkZSBvZiA0MDk1ICovCisKIC8qKgogICAqIEB9CiAgICovCkBAIC04Myw0NiArODcsMjMgQEAKICAgKi8KIAogLyogRXhwb3J0ZWQgbWFjcm8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qIEV4cG9ydGVkIGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKiogQGFkZHRvZ3JvdXAgREFDRXhfRXhwb3J0ZWRfRnVuY3Rpb25zCisKKworLyogUHJpdmF0ZSBtYWNybyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoqIEBkZWZncm91cCBEQUNFeF9Qcml2YXRlX01hY3JvcyBEQUNFeCBQcml2YXRlIE1hY3JvcwogICAqIEB7CiAgICovCisjZGVmaW5lIElTX0RBQ19UUklHR0VSKFRSSUdHRVIpICgoKFRSSUdHRVIpID09IERBQ19UUklHR0VSX05PTkUpICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVFJJR0dFUikgPT0gREFDX1RSSUdHRVJfVDJfVFJHTykgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChUUklHR0VSKSA9PSBEQUNfVFJJR0dFUl9UOF9UUkdPKSB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFRSSUdHRVIpID09IERBQ19UUklHR0VSX1Q3X1RSR08pIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVFJJR0dFUikgPT0gREFDX1RSSUdHRVJfVDVfVFJHTykgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChUUklHR0VSKSA9PSBEQUNfVFJJR0dFUl9UNl9UUkdPKSB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFRSSUdHRVIpID09IERBQ19UUklHR0VSX1Q0X1RSR08pIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVFJJR0dFUikgPT0gREFDX1RSSUdHRVJfRVhUX0lUOSkgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChUUklHR0VSKSA9PSBEQUNfVFJJR0dFUl9TT0ZUV0FSRSkpCiAKLS8qKiBAYWRkdG9ncm91cCBEQUNFeF9FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXAxCi0gICogQHsKLSAgKi8KLS8qIEV4dGVuc2lvbiBmZWF0dXJlcyBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi11aW50MzJfdCBIQUxfREFDRXhfRHVhbEdldFZhbHVlKERBQ19IYW5kbGVUeXBlRGVmKiBoZGFjKTsKLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9EQUNFeF9UcmlhbmdsZVdhdmVHZW5lcmF0ZShEQUNfSGFuZGxlVHlwZURlZiogaGRhYywgdWludDMyX3QgQ2hhbm5lbCwgdWludDMyX3QgQW1wbGl0dWRlKTsKLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9EQUNFeF9Ob2lzZVdhdmVHZW5lcmF0ZShEQUNfSGFuZGxlVHlwZURlZiogaGRhYywgdWludDMyX3QgQ2hhbm5lbCwgdWludDMyX3QgQW1wbGl0dWRlKTsKLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9EQUNFeF9EdWFsU2V0VmFsdWUoREFDX0hhbmRsZVR5cGVEZWYqIGhkYWMsIHVpbnQzMl90IEFsaWdubWVudCwgdWludDMyX3QgRGF0YTEsIHVpbnQzMl90IERhdGEyKTsKLQotdm9pZCBIQUxfREFDRXhfQ29udkNwbHRDYWxsYmFja0NoMihEQUNfSGFuZGxlVHlwZURlZiogaGRhYyk7Ci12b2lkIEhBTF9EQUNFeF9Db252SGFsZkNwbHRDYWxsYmFja0NoMihEQUNfSGFuZGxlVHlwZURlZiogaGRhYyk7Ci12b2lkIEhBTF9EQUNFeF9FcnJvckNhbGxiYWNrQ2gyKERBQ19IYW5kbGVUeXBlRGVmKiBoZGFjKTsKLXZvaWQgSEFMX0RBQ0V4X0RNQVVuZGVycnVuQ2FsbGJhY2tDaDIoREFDX0hhbmRsZVR5cGVEZWYqIGhkYWMpOwotLyoqCi0gICogQH0KLSAgKi8KLQotLyoqCi0gICogQH0KLSAgKi8KLS8qIFByaXZhdGUgdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKiBQcml2YXRlIHZhcmlhYmxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyogUHJpdmF0ZSBjb25zdGFudHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qKiBAZGVmZ3JvdXAgREFDRXhfUHJpdmF0ZV9Db25zdGFudHMgREFDIFByaXZhdGUgQ29uc3RhbnRzCi0gICogQHsKLSAgKi8KLQotLyoqCi0gICogQH0KLSAgKi8KLQotLyogUHJpdmF0ZSBtYWNyb3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qKiBAZGVmZ3JvdXAgREFDRXhfUHJpdmF0ZV9NYWNyb3MgREFDIFByaXZhdGUgTWFjcm9zCi0gICogQHsKLSAgKi8KICNkZWZpbmUgSVNfREFDX0xGU1JfVU5NQVNLX1RSSUFOR0xFX0FNUExJVFVERShWQUxVRSkgKCgoVkFMVUUpID09IERBQ19MRlNSVU5NQVNLX0JJVDApIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVkFMVUUpID09IERBQ19MRlNSVU5NQVNLX0JJVFMxXzApIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVkFMVUUpID09IERBQ19MRlNSVU5NQVNLX0JJVFMyXzApIHx8IFwKQEAgLTE1MSwyMSArMTMyLDU4IEBACiAgICogQH0KICAgKi8KIAotLyogUHJpdmF0ZSBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qKiBAZGVmZ3JvdXAgREFDRXhfUHJpdmF0ZV9GdW5jdGlvbnMgREFDIFByaXZhdGUgRnVuY3Rpb25zCisvKiBFeHBvcnRlZCBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogRXh0ZW5kZWQgZmVhdHVyZXMgZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiogQGFkZHRvZ3JvdXAgREFDRXhfRXhwb3J0ZWRfRnVuY3Rpb25zCiAgICogQHsKICAgKi8KKworLyoqIEBhZGR0b2dyb3VwIERBQ0V4X0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDIKKyAgKiBAeworICAqLworLyogSU8gb3BlcmF0aW9uIGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0RBQ0V4X1RyaWFuZ2xlV2F2ZUdlbmVyYXRlKERBQ19IYW5kbGVUeXBlRGVmICpoZGFjLCB1aW50MzJfdCBDaGFubmVsLCB1aW50MzJfdCBBbXBsaXR1ZGUpOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0RBQ0V4X05vaXNlV2F2ZUdlbmVyYXRlKERBQ19IYW5kbGVUeXBlRGVmICpoZGFjLCB1aW50MzJfdCBDaGFubmVsLCB1aW50MzJfdCBBbXBsaXR1ZGUpOworCisjaWYgZGVmaW5lZChEQUNfQ0hBTk5FTDJfU1VQUE9SVCkKKyNlbmRpZgorSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0RBQ0V4X0R1YWxTdGFydChEQUNfSGFuZGxlVHlwZURlZiAqaGRhYyk7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfREFDRXhfRHVhbFN0b3AoREFDX0hhbmRsZVR5cGVEZWYgKmhkYWMpOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0RBQ0V4X0R1YWxTZXRWYWx1ZShEQUNfSGFuZGxlVHlwZURlZiAqaGRhYywgdWludDMyX3QgQWxpZ25tZW50LCB1aW50MzJfdCBEYXRhMSwgdWludDMyX3QgRGF0YTIpOwordWludDMyX3QgSEFMX0RBQ0V4X0R1YWxHZXRWYWx1ZShEQUNfSGFuZGxlVHlwZURlZiAqaGRhYyk7CisKKyNpZiBkZWZpbmVkKERBQ19DSEFOTkVMMl9TVVBQT1JUKQorI2VuZGlmCit2b2lkIEhBTF9EQUNFeF9Db252Q3BsdENhbGxiYWNrQ2gyKERBQ19IYW5kbGVUeXBlRGVmICpoZGFjKTsKK3ZvaWQgSEFMX0RBQ0V4X0NvbnZIYWxmQ3BsdENhbGxiYWNrQ2gyKERBQ19IYW5kbGVUeXBlRGVmICpoZGFjKTsKK3ZvaWQgSEFMX0RBQ0V4X0Vycm9yQ2FsbGJhY2tDaDIoREFDX0hhbmRsZVR5cGVEZWYgKmhkYWMpOwordm9pZCBIQUxfREFDRXhfRE1BVW5kZXJydW5DYWxsYmFja0NoMihEQUNfSGFuZGxlVHlwZURlZiAqaGRhYyk7CisKKworLyoqCisgICogQH0KKyAgKi8KKworLyoqCisgICogQH0KKyAgKi8KKworLyoqCisgICogQH0KKyAgKi8KKworLyoqIEBhZGR0b2dyb3VwIERBQ0V4X1ByaXZhdGVfRnVuY3Rpb25zCisgICogQHsKKyAgKi8KKyNpZiBkZWZpbmVkKERBQ19DSEFOTkVMMl9TVVBQT1JUKQorLyogREFDX0RNQUNvbnZDcGx0Q2gyIC8gREFDX0RNQUVycm9yQ2gyIC8gREFDX0RNQUhhbGZDb252Q3BsdENoMiAqLworLyogYXJlIGNhbGxlZCBieSBIQUxfREFDX1N0YXJ0X0RNQSAqLwogdm9pZCBEQUNfRE1BQ29udkNwbHRDaDIoRE1BX0hhbmRsZVR5cGVEZWYgKmhkbWEpOwogdm9pZCBEQUNfRE1BRXJyb3JDaDIoRE1BX0hhbmRsZVR5cGVEZWYgKmhkbWEpOwotdm9pZCBEQUNfRE1BSGFsZkNvbnZDcGx0Q2gyKERNQV9IYW5kbGVUeXBlRGVmICpoZG1hKTsgCi0vKioKLSAgKiBAfQotICAqLwotI2VuZGlmIC8qIFNUTTMyRjQwNXh4IHx8IFNUTTMyRjQxNXh4IHx8IFNUTTMyRjQwN3h4IHx8IFNUTTMyRjQxN3h4IHx8XAotICAgICAgICAgIFNUTTMyRjQyN3h4IHx8IFNUTTMyRjQzN3h4IHx8IFNUTTMyRjQyOXh4IHx8IFNUTTMyRjQzOXh4IHx8XAotICAgICAgICAgIFNUTTMyRjQxMHh4IHx8IFNUTTMyRjQ0Nnh4IHx8IFNUTTMyRjQ2OXh4IHx8IFNUTTMyRjQ3OXh4IHx8XAotCQkgIFNUTTMyRjQxM3h4IHx8IFNUTTMyRjQyM3h4ICovCi0KK3ZvaWQgREFDX0RNQUhhbGZDb252Q3BsdENoMihETUFfSGFuZGxlVHlwZURlZiAqaGRtYSk7CisjZW5kaWYgLyogREFDX0NIQU5ORUwyX1NVUFBPUlQgKi8KIC8qKgogICAqIEB9CiAgICovCkBAIC0xNzMsMTEgKzE5MSwxNyBAQAogLyoqCiAgICogQH0KICAgKi8KLSAgCisKKyNlbmRpZiAvKiBEQUMgKi8KKworLyoqCisgICogQH0KKyAgKi8KKwogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CiAjZW5kaWYKIAotI2VuZGlmIC8qX19TVE0zMkY0eHhfSEFMX0RBQ19FWF9IICovCisjZW5kaWYgLyogU1RNMzJGNHh4X0hBTF9EQUNfRVhfSCAqLwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqIChDKSBDT1BZUklHSFQgU1RNaWNyb2VsZWN0cm9uaWNzICoqKioqRU5EIE9GIEZJTEUqKioqLwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZjR4eF9oYWxfZGVmLmggYi9JbmMvc3RtMzJmNHh4X2hhbF9kZWYuaAppbmRleCBlMzJlMzYyLi45NzVmNzBiIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmNHh4X2hhbF9kZWYuaAorKysgYi9JbmMvc3RtMzJmNHh4X2hhbF9kZWYuaApAQCAtMTA3LDcgKzEwNywxNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfXdoaWxlICgwVSkKICNlbmRpZiAvKiBVU0VfUlRPUyAqLwogCi0jaWYgZGVmaW5lZCAoIF9fR05VQ19fICkgJiYgIWRlZmluZWQgKF9fQ0NfQVJNKSAvKiBHTlUgQ29tcGlsZXIgKi8KKyNpZiBkZWZpbmVkIChfX0FSTUNDX1ZFUlNJT04pICYmIChfX0FSTUNDX1ZFUlNJT04gPj0gNjAxMDA1MCkgLyogQVJNIENvbXBpbGVyIFY2ICovCisgICNpZm5kZWYgX193ZWFrCisgICAgI2RlZmluZSBfX3dlYWsgIF9fYXR0cmlidXRlX18oKHdlYWspKQorICAjZW5kaWYKKyAgI2lmbmRlZiBfX3BhY2tlZAorICAgICNkZWZpbmUgX19wYWNrZWQgIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpCisgICNlbmRpZgorI2VsaWYgZGVmaW5lZCAoIF9fR05VQ19fICkgJiYgIWRlZmluZWQgKF9fQ0NfQVJNKSAvKiBHTlUgQ29tcGlsZXIgKi8KICAgI2lmbmRlZiBfX3dlYWsKICAgICAjZGVmaW5lIF9fd2VhayAgIF9fYXR0cmlidXRlX18oKHdlYWspKQogICAjZW5kaWYgLyogX193ZWFrICovCkBAIC0xMTgsNyArMTI1LDE0IEBACiAKIAogLyogTWFjcm8gdG8gZ2V0IHZhcmlhYmxlIGFsaWduZWQgb24gNC1ieXRlcywgZm9yIF9fSUNDQVJNX18gdGhlIGRpcmVjdGl2ZSAiI3ByYWdtYSBkYXRhX2FsaWdubWVudD00IiBtdXN0IGJlIHVzZWQgaW5zdGVhZCAqLwotI2lmIGRlZmluZWQgKCBfX0dOVUNfXyApICYmICFkZWZpbmVkIChfX0NDX0FSTSkgLyogR05VIENvbXBpbGVyICovCisjaWYgZGVmaW5lZCAoX19BUk1DQ19WRVJTSU9OKSAmJiAoX19BUk1DQ19WRVJTSU9OID49IDYwMTAwNTApIC8qIEFSTSBDb21waWxlciBWNiAqLworICAjaWZuZGVmIF9fQUxJR05fQkVHSU4KKyAgICAjZGVmaW5lIF9fQUxJR05fQkVHSU4KKyAgI2VuZGlmCisgICNpZm5kZWYgX19BTElHTl9FTkQKKyAgICAjZGVmaW5lIF9fQUxJR05fRU5EICAgICAgX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQgKDQpKSkKKyAgI2VuZGlmCisjZWxpZiBkZWZpbmVkICggX19HTlVDX18gKSAmJiAhZGVmaW5lZCAoX19DQ19BUk0pIC8qIEdOVSBDb21waWxlciAqLwogICAjaWZuZGVmIF9fQUxJR05fRU5ECiAjZGVmaW5lIF9fQUxJR05fRU5EICAgIF9fYXR0cmlidXRlX18gKChhbGlnbmVkICg0KSkpCiAgICNlbmRpZiAvKiBfX0FMSUdOX0VORCAqLwpAQCAtMTMwLDcgKzE0NCw3IEBACiAgICAgI2RlZmluZSBfX0FMSUdOX0VORAogICAjZW5kaWYgLyogX19BTElHTl9FTkQgKi8KICAgI2lmbmRlZiBfX0FMSUdOX0JFR0lOICAgICAgCi0gICAgI2lmIGRlZmluZWQgICAoX19DQ19BUk0pICAgICAgLyogQVJNIENvbXBpbGVyICovCisgICAgI2lmIGRlZmluZWQgICAoX19DQ19BUk0pICAgICAgLyogQVJNIENvbXBpbGVyIFY1Ki8KICNkZWZpbmUgX19BTElHTl9CRUdJTiAgICBfX2FsaWduKDQpCiAgICAgI2VsaWYgZGVmaW5lZCAoX19JQ0NBUk1fXykgICAgLyogSUFSIENvbXBpbGVyICovCiAgICAgICAjZGVmaW5lIF9fQUxJR05fQkVHSU4gCkBAIC0xNDIsOSArMTU2LDkgQEAKIC8qKiAKICAgKiBAYnJpZWYgIF9fUkFNX0ZVTkMgZGVmaW5pdGlvbgogICAqLyAKLSNpZiBkZWZpbmVkICggX19DQ19BUk0gICApCi0vKiBBUk0gQ29tcGlsZXIKLSAgIC0tLS0tLS0tLS0tLQorI2lmIGRlZmluZWQgKCBfX0NDX0FSTSAgICkgfHwgKGRlZmluZWQgKF9fQVJNQ0NfVkVSU0lPTikgJiYgKF9fQVJNQ0NfVkVSU0lPTiA+PSA2MDEwMDUwKSkKKy8qIEFSTSBDb21waWxlciBWNC9WNSBhbmQgVjYKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBSQU0gZnVuY3Rpb25zIGFyZSBkZWZpbmVkIHVzaW5nIHRoZSB0b29sY2hhaW4gb3B0aW9ucy4gCiAgICBGdW5jdGlvbnMgdGhhdCBhcmUgZXhlY3V0ZWQgaW4gUkFNIHNob3VsZCByZXNpZGUgaW4gYSBzZXBhcmF0ZSBzb3VyY2UgbW9kdWxlLgogICAgVXNpbmcgdGhlICdPcHRpb25zIGZvciBGaWxlJyBkaWFsb2cgeW91IGNhbiBzaW1wbHkgY2hhbmdlIHRoZSAnQ29kZSAvIENvbnN0JyAKQEAgLTE3NCw5ICsxODgsOSBAQAogLyoqIAogICAqIEBicmllZiAgX19OT0lOTElORSBkZWZpbml0aW9uCiAgICovIAotI2lmIGRlZmluZWQgKCBfX0NDX0FSTSAgICkgfHwgZGVmaW5lZCAgICggIF9fR05VQ19fICApCi0vKiBBUk0gJiBHTlVDb21waWxlciAKLSAgIC0tLS0tLS0tLS0tLS0tLS0gCisjaWYgZGVmaW5lZCAoIF9fQ0NfQVJNICAgKSB8fCAoZGVmaW5lZCAoX19BUk1DQ19WRVJTSU9OKSAmJiAoX19BUk1DQ19WRVJTSU9OID49IDYwMTAwNTApKSB8fCBkZWZpbmVkICAgKCAgX19HTlVDX18gICkKKy8qIEFSTSBWNC9WNSBhbmQgVjYgJiBHTlUgQ29tcGlsZXIKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICovCiAjZGVmaW5lIF9fTk9JTkxJTkUgX19hdHRyaWJ1dGVfXyAoIChub2lubGluZSkgKQogCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJmNHh4X2hhbF9kbWEyZC5oIGIvSW5jL3N0bTMyZjR4eF9oYWxfZG1hMmQuaAppbmRleCAzN2M3Mjk5Li4xNThlZDY3IDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmNHh4X2hhbF9kbWEyZC5oCisrKyBiL0luYy9zdG0zMmY0eHhfaGFsX2RtYTJkLmgKQEAgLTIyLDcgKzIyLDcgQEAKICNkZWZpbmUgU1RNMzJGNHh4X0hBTF9ETUEyRF9ICiAKICNpZmRlZiBfX2NwbHVzcGx1cwotIGV4dGVybiAiQyIgeworZXh0ZXJuICJDIiB7CiAjZW5kaWYKIAogLyogSW5jbHVkZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTcxLDcgKzcxLDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgdmFsdWUgb2YgQHJlZiBETUEyRF9PdXRwdXRfQ29sb3JfTW9kZS4gKi8KIAogICB1aW50MzJfdCAgICAgICAgICAgICBPdXRwdXRPZmZzZXQ7ICAgICAgIC8qITwgU3BlY2lmaWVzIHRoZSBPZmZzZXQgdmFsdWUuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gTWluX0RhdGEgPSAweDAwMDAgYW5kIE1heF9EYXRhID0gMHgzRkZGLiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIG51bWJlciBiZXR3ZWVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNaW5fRGF0YSA9IDB4MDAwMCBhbmQgTWF4X0RhdGEgPSAweDNGRkYuICovCiAKIAogCkBAIC04NSw3ICs4Niw4IEBACiB0eXBlZGVmIHN0cnVjdAogewogICB1aW50MzJfdCAgICAgICAgICAgICBJbnB1dE9mZnNldDsgICAgICAgLyohPCBDb25maWd1cmVzIHRoZSBETUEyRCBmb3JlZ3JvdW5kIG9yIGJhY2tncm91bmQgb2Zmc2V0LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gTWluX0RhdGEgPSAweDAwMDAgYW5kIE1heF9EYXRhID0gMHgzRkZGLiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWluX0RhdGEgPSAweDAwMDAgYW5kIE1heF9EYXRhID0gMHgzRkZGLiAqLwogCiAgIHVpbnQzMl90ICAgICAgICAgICAgIElucHV0Q29sb3JNb2RlOyAgICAvKiE8IENvbmZpZ3VyZXMgdGhlIERNQTJEIGZvcmVncm91bmQgb3IgYmFja2dyb3VuZCBjb2xvciBtb2RlLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIHZhbHVlIG9mIEByZWYgRE1BMkRfSW5wdXRfQ29sb3JfTW9kZS4gKi8KQEAgLTkzLDkgKzk1LDEyIEBACiAgIHVpbnQzMl90ICAgICAgICAgICAgIEFscGhhTW9kZTsgICAgICAgICAvKiE8IENvbmZpZ3VyZXMgdGhlIERNQTJEIGZvcmVncm91bmQgb3IgYmFja2dyb3VuZCBhbHBoYSBtb2RlLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIHZhbHVlIG9mIEByZWYgRE1BMkRfQWxwaGFfTW9kZS4gKi8KIAotICB1aW50MzJfdCAgICAgICAgICAgICBJbnB1dEFscGhhOyAgICAgICAgLyohPCBTcGVjaWZpZXMgdGhlIERNQTJEIGZvcmVncm91bmQgb3IgYmFja2dyb3VuZCBhbHBoYSB2YWx1ZSBhbmQgY29sb3IgdmFsdWUgaW4gY2FzZSBvZiBBOCBvciBBNCBjb2xvciBtb2RlLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gTWluX0RhdGEgPSAweDAwIGFuZCBNYXhfRGF0YSA9IDB4RkYgZXhjZXB0IGZvciB0aGUgY29sb3IgbW9kZXMgZGV0YWlsZWQgYmVsb3cuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBub3RlIEluIGNhc2Ugb2YgQTggb3IgQTQgY29sb3IgbW9kZSAoQVJHQiksIHRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSBudW1iZXIgYmV0d2VlbgorICB1aW50MzJfdCAgICAgICAgICAgICBJbnB1dEFscGhhOyAgICAgICAgLyohPCBTcGVjaWZpZXMgdGhlIERNQTJEIGZvcmVncm91bmQgb3IgYmFja2dyb3VuZCBhbHBoYSB2YWx1ZSBhbmQgY29sb3IgdmFsdWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gY2FzZSBvZiBBOCBvciBBNCBjb2xvciBtb2RlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gTWluX0RhdGEgPSAweDAwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBNYXhfRGF0YSA9IDB4RkYgZXhjZXB0IGZvciB0aGUgY29sb3IgbW9kZXMgZGV0YWlsZWQgYmVsb3cuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBub3RlIEluIGNhc2Ugb2YgQTggb3IgQTQgY29sb3IgbW9kZSAoQVJHQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSBudW1iZXIgYmV0d2VlbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNaW5fRGF0YSA9IDB4MDAwMDAwMDAgYW5kIE1heF9EYXRhID0gMHhGRkZGRkZGRiB3aGVyZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIElucHV0QWxwaGFbMjQ6MzFdIGlzIHRoZSBhbHBoYSB2YWx1ZSBBTFBIQVswOjddCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gSW5wdXRBbHBoYVsxNjoyM10gaXMgdGhlIHJlZCB2YWx1ZSBSRURbMDo3XQpAQCAtMTE2LDQ2ICsxMjEsNDYgQEAKICAgSEFMX0RNQTJEX1NUQVRFX1RJTUVPVVQgICAgICAgICAgID0gMHgwM1UsICAgIC8qITwgVGltZW91dCBzdGF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICBIQUxfRE1BMkRfU1RBVEVfRVJST1IgICAgICAgICAgICAgPSAweDA0VSwgICAgLyohPCBETUEyRCBzdGF0ZSBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIEhBTF9ETUEyRF9TVEFURV9TVVNQRU5EICAgICAgICAgICA9IDB4MDVVICAgICAvKiE8IERNQTJEIHByb2Nlc3MgaXMgc3VzcGVuZGVkICAgICAgICAgICAgICAgICAgKi8KLX1IQUxfRE1BMkRfU3RhdGVUeXBlRGVmOworfSBIQUxfRE1BMkRfU3RhdGVUeXBlRGVmOwogCiAvKioKICAgKiBAYnJpZWYgIERNQTJEIGhhbmRsZSBTdHJ1Y3R1cmUgZGVmaW5pdGlvbgogICAqLwogdHlwZWRlZiBzdHJ1Y3QgX19ETUEyRF9IYW5kbGVUeXBlRGVmCiB7Ci0gIERNQTJEX1R5cGVEZWYgICAgICAgICAgICAgICAqSW5zdGFuY2U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRE1BMkQgcmVnaXN0ZXIgYmFzZSBhZGRyZXNzLiAgICAgICAgICAgICAgICovCisgIERNQTJEX1R5cGVEZWYgICAgICAgICAgICAgICAqSW5zdGFuY2U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRE1BMkQgcmVnaXN0ZXIgYmFzZSBhZGRyZXNzLiAgICAgICAgICAgKi8KIAotICBETUEyRF9Jbml0VHlwZURlZiAgICAgICAgICAgSW5pdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERNQTJEIGNvbW11bmljYXRpb24gcGFyYW1ldGVycy4gICAgICAgICAgICAqLworICBETUEyRF9Jbml0VHlwZURlZiAgICAgICAgICAgSW5pdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERNQTJEIGNvbW11bmljYXRpb24gcGFyYW1ldGVycy4gICAgICAgICovCiAKLSAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICgqIFhmZXJDcGx0Q2FsbGJhY2spKHN0cnVjdCBfX0RNQTJEX0hhbmRsZVR5cGVEZWYgKiBoZG1hMmQpOyAgLyohPCBETUEyRCB0cmFuc2ZlciBjb21wbGV0ZSBjYWxsYmFjay4gICAgICAgICAgKi8KKyAgdm9pZCAoKiBYZmVyQ3BsdENhbGxiYWNrKShzdHJ1Y3QgX19ETUEyRF9IYW5kbGVUeXBlRGVmICpoZG1hMmQpOyAgICAgICAgLyohPCBETUEyRCB0cmFuc2ZlciBjb21wbGV0ZSBjYWxsYmFjay4gICAgICAqLwogCi0gIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAoKiBYZmVyRXJyb3JDYWxsYmFjaykoc3RydWN0IF9fRE1BMkRfSGFuZGxlVHlwZURlZiAqIGhkbWEyZCk7IC8qITwgRE1BMkQgdHJhbnNmZXIgZXJyb3IgY2FsbGJhY2suICAgICAgICAgICAgICovCisgIHZvaWQgKCogWGZlckVycm9yQ2FsbGJhY2spKHN0cnVjdCBfX0RNQTJEX0hhbmRsZVR5cGVEZWYgKmhkbWEyZCk7ICAgICAgIC8qITwgRE1BMkQgdHJhbnNmZXIgZXJyb3IgY2FsbGJhY2suICAgICAgICAgKi8KIAogI2lmIChVU0VfSEFMX0RNQTJEX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxKQotICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgKCogTGluZUV2ZW50Q2FsbGJhY2spKCBzdHJ1Y3QgX19ETUEyRF9IYW5kbGVUeXBlRGVmICogaGRtYTJkKTsgICAvKiE8IERNQTJEIGxpbmUgZXZlbnQgY2FsbGJhY2suICAgICAgKi8KKyAgdm9pZCAoKiBMaW5lRXZlbnRDYWxsYmFjaykoc3RydWN0IF9fRE1BMkRfSGFuZGxlVHlwZURlZiAqaGRtYTJkKTsgICAgICAgLyohPCBETUEyRCBsaW5lIGV2ZW50IGNhbGxiYWNrLiAgICAgICAgICAgICAqLwogCi0gIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAoKiBDTFVUTG9hZGluZ0NwbHRDYWxsYmFjaykoIHN0cnVjdCBfX0RNQTJEX0hhbmRsZVR5cGVEZWYgKiBoZG1hMmQpOyAvKiE8IERNQTJEIENMVVQgbG9hZGluZyBjb21wbGV0aW9uIGNhbGxiYWNrLiAqLworICB2b2lkICgqIENMVVRMb2FkaW5nQ3BsdENhbGxiYWNrKShzdHJ1Y3QgX19ETUEyRF9IYW5kbGVUeXBlRGVmICpoZG1hMmQpOyAvKiE8IERNQTJEIENMVVQgbG9hZGluZyBjb21wbGV0aW9uIGNhbGxiYWNrICovCiAKLSAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICgqIE1zcEluaXRDYWxsYmFjaykoIHN0cnVjdCBfX0RNQTJEX0hhbmRsZVR5cGVEZWYgKiBoZG1hMmQpOyAgIC8qITwgRE1BMkQgTXNwIEluaXQgY2FsbGJhY2suICAgICAgICAgICovCisgIHZvaWQgKCogTXNwSW5pdENhbGxiYWNrKShzdHJ1Y3QgX19ETUEyRF9IYW5kbGVUeXBlRGVmICpoZG1hMmQpOyAgICAgICAgIC8qITwgRE1BMkQgTXNwIEluaXQgY2FsbGJhY2suICAgICAgICAgICAgICAgKi8KIAotICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgKCogTXNwRGVJbml0Q2FsbGJhY2spKCBzdHJ1Y3QgX19ETUEyRF9IYW5kbGVUeXBlRGVmICogaGRtYTJkKTsgLyohPCBETUEyRCBNc3AgRGVJbml0IGNhbGxiYWNrLiAgICAgICAgKi8KKyAgdm9pZCAoKiBNc3BEZUluaXRDYWxsYmFjaykoc3RydWN0IF9fRE1BMkRfSGFuZGxlVHlwZURlZiAqaGRtYTJkKTsgICAgICAgLyohPCBETUEyRCBNc3AgRGVJbml0IGNhbGxiYWNrLiAgICAgICAgICAgICAqLwogCiAjZW5kaWYgLyogKFVTRV9IQUxfRE1BMkRfUkVHSVNURVJfQ0FMTEJBQ0tTKSAqLwogCi0gIERNQTJEX0xheWVyQ2ZnVHlwZURlZiAgICAgICBMYXllckNmZ1tNQVhfRE1BMkRfTEFZRVJdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRE1BMkQgTGF5ZXJzIHBhcmFtZXRlcnMgICAgICAgICAgICovCisgIERNQTJEX0xheWVyQ2ZnVHlwZURlZiAgICAgICBMYXllckNmZ1tNQVhfRE1BMkRfTEFZRVJdOyAgICAgICAgICAgICAgICAgIC8qITwgRE1BMkQgTGF5ZXJzIHBhcmFtZXRlcnMgICAgICAgICAgICAgICAgKi8KIAotICBIQUxfTG9ja1R5cGVEZWYgICAgICAgICAgICAgTG9jazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERNQTJEIGxvY2suICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBIQUxfTG9ja1R5cGVEZWYgICAgICAgICAgICAgTG9jazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERNQTJEIGxvY2suICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKLSAgX19JTyBIQUxfRE1BMkRfU3RhdGVUeXBlRGVmIFN0YXRlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBETUEyRCB0cmFuc2ZlciBzdGF0ZS4gICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyBIQUxfRE1BMkRfU3RhdGVUeXBlRGVmIFN0YXRlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBETUEyRCB0cmFuc2ZlciBzdGF0ZS4gICAgICAgICAgICAgICAgICAqLwogCi0gIF9fSU8gdWludDMyX3QgICAgICAgICAgICAgICBFcnJvckNvZGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRE1BMkQgZXJyb3IgY29kZS4gICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgICAgICAgICAgICAgICBFcnJvckNvZGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRE1BMkQgZXJyb3IgY29kZS4gICAgICAgICAgICAgICAgICAgICAgKi8KIH0gRE1BMkRfSGFuZGxlVHlwZURlZjsKIAogI2lmIChVU0VfSEFMX0RNQTJEX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxKQogLyoqCiAgICogQGJyaWVmICBIQUwgRE1BMkQgQ2FsbGJhY2sgcG9pbnRlciBkZWZpbml0aW9uCiAgICovCi10eXBlZGVmICB2b2lkICgqcERNQTJEX0NhbGxiYWNrVHlwZURlZikoRE1BMkRfSGFuZGxlVHlwZURlZiAqIGhkbWEyZCk7IC8qITwgUG9pbnRlciB0byBhIERNQTJEIGNvbW1vbiBjYWxsYmFjayBmdW5jdGlvbiAqLwordHlwZWRlZiB2b2lkICgqcERNQTJEX0NhbGxiYWNrVHlwZURlZikoRE1BMkRfSGFuZGxlVHlwZURlZiAqaGRtYTJkKTsgLyohPCBQb2ludGVyIHRvIGEgRE1BMkQgY29tbW9uIGNhbGxiYWNrIGZ1bmN0aW9uICovCiAjZW5kaWYgLyogVVNFX0hBTF9ETUEyRF9SRUdJU1RFUl9DQUxMQkFDS1MgKi8KIC8qKgogICAqIEB9CkBAIC0yMjYsMTAgKzIzMSwxMCBAQAogLyoqIEBkZWZncm91cCBETUEyRF9BbHBoYV9Nb2RlIERNQTJEIEFscGhhIE1vZGUKICAgKiBAewogICAqLwotI2RlZmluZSBETUEyRF9OT19NT0RJRl9BTFBIQSAgICAgICAgMHgwMDAwMDAwMFUgIC8qITwgTm8gbW9kaWZpY2F0aW9uIG9mIHRoZSBhbHBoYSBjaGFubmVsIHZhbHVlICovCisjZGVmaW5lIERNQTJEX05PX01PRElGX0FMUEhBICAgICAgICAweDAwMDAwMDAwVSAgLyohPCBObyBtb2RpZmljYXRpb24gb2YgdGhlIGFscGhhIGNoYW5uZWwgdmFsdWUgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBETUEyRF9SRVBMQUNFX0FMUEhBICAgICAgICAgMHgwMDAwMDAwMVUgIC8qITwgUmVwbGFjZSBvcmlnaW5hbCBhbHBoYSBjaGFubmVsIHZhbHVlIGJ5IHByb2dyYW1tZWQgYWxwaGEgdmFsdWUgKi8KICNkZWZpbmUgRE1BMkRfQ09NQklORV9BTFBIQSAgICAgICAgIDB4MDAwMDAwMDJVICAvKiE8IFJlcGxhY2Ugb3JpZ2luYWwgYWxwaGEgY2hhbm5lbCB2YWx1ZSBieSBwcm9ncmFtbWVkIGFscGhhIHZhbHVlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBvcmlnaW5hbCBhbHBoYSBjaGFubmVsIHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggb3JpZ2luYWwgYWxwaGEgY2hhbm5lbCB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKioKICAgKiBAfQogICAqLwpAQCAtMjc3LDcgKzI4Miw4IEBACiAvKiogQGRlZmdyb3VwIERNQTJEX0FsaWFzZXMgRE1BMkQgQVBJIEFsaWFzZXMKICAgKiBAewogICAqLwotI2RlZmluZSBIQUxfRE1BMkRfRGlzYWJsZUNMVVQgICAgICAgSEFMX0RNQTJEX0NMVVRMb2FkaW5nX0Fib3J0ICAgIC8qITwgQWxpYXNlZCB0byBIQUxfRE1BMkRfQ0xVVExvYWRpbmdfQWJvcnQgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBsZWdhY3kgY29kZSAqLworI2RlZmluZSBIQUxfRE1BMkRfRGlzYWJsZUNMVVQgICAgICAgSEFMX0RNQTJEX0NMVVRMb2FkaW5nX0Fib3J0ICAgIC8qITwgQWxpYXNlZCB0byBIQUxfRE1BMkRfQ0xVVExvYWRpbmdfQWJvcnQgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIGxlZ2FjeSBjb2RlICovCiAvKioKICAgKiBAfQogICAqLwpAQCAtMjk0LDcgKzMwMCw3IEBACiAgIEhBTF9ETUEyRF9UUkFOU0ZFUkVSUk9SX0NCX0lEICAgICA9IDB4MDNVLCAgICAvKiE8IERNQTJEIHRyYW5zZmVyIGVycm9yIGNhbGxiYWNrIElEICAgICAgICAgICovCiAgIEhBTF9ETUEyRF9MSU5FRVZFTlRfQ0JfSUQgICAgICAgICA9IDB4MDRVLCAgICAvKiE8IERNQTJEIGxpbmUgZXZlbnQgY2FsbGJhY2sgSUQgICAgICAgICAgICAgICovCiAgIEhBTF9ETUEyRF9DTFVUTE9BRElOR0NQTFRfQ0JfSUQgICA9IDB4MDVVLCAgICAvKiE8IERNQTJEIENMVVQgbG9hZGluZyBjb21wbGV0aW9uIGNhbGxiYWNrIElEICovCi19SEFMX0RNQTJEX0NhbGxiYWNrSURUeXBlRGVmOworfSBIQUxfRE1BMkRfQ2FsbGJhY2tJRFR5cGVEZWY7CiAjZW5kaWYgLyogVVNFX0hBTF9ETUEyRF9SRUdJU1RFUl9DQUxMQkFDS1MgKi8KIAogCkBAIC0zMTEsMTAgKzMxNywxMCBAQAogICAqIEByZXR2YWwgTm9uZQogICAqLwogI2lmIChVU0VfSEFMX0RNQTJEX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxKQotI2RlZmluZSBfX0hBTF9ETUEyRF9SRVNFVF9IQU5ETEVfU1RBVEUoX19IQU5ETEVfXykgZG97ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPlN0YXRlID0gSEFMX0RNQTJEX1NUQVRFX1JFU0VUO1wKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+TXNwSW5pdENhbGxiYWNrID0gTlVMTDsgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5Nc3BEZUluaXRDYWxsYmFjayA9IE5VTEw7ICAgICBcCisjZGVmaW5lIF9fSEFMX0RNQTJEX1JFU0VUX0hBTkRMRV9TVEFURShfX0hBTkRMRV9fKSBkb3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5TdGF0ZSA9IEhBTF9ETUEyRF9TVEFURV9SRVNFVDtcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5Nc3BJbml0Q2FsbGJhY2sgPSBOVUxMOyAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5Nc3BEZUluaXRDYWxsYmFjayA9IE5VTEw7ICAgICBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH13aGlsZSgwKQogI2Vsc2UKICNkZWZpbmUgX19IQUxfRE1BMkRfUkVTRVRfSEFORExFX1NUQVRFKF9fSEFORExFX18pICgoX19IQU5ETEVfXyktPlN0YXRlID0gSEFMX0RNQTJEX1NUQVRFX1JFU0VUKQpAQCAtNDIwLDEyICs0MjYsMTMgQEAKIAogLyogSW5pdGlhbGl6YXRpb24gYW5kIGRlLWluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0RNQTJEX0luaXQoRE1BMkRfSGFuZGxlVHlwZURlZiAqaGRtYTJkKTsKLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9ETUEyRF9EZUluaXQgKERNQTJEX0hhbmRsZVR5cGVEZWYgKmhkbWEyZCk7Ci12b2lkICAgICAgICAgICAgICBIQUxfRE1BMkRfTXNwSW5pdChETUEyRF9IYW5kbGVUeXBlRGVmKiBoZG1hMmQpOwotdm9pZCAgICAgICAgICAgICAgSEFMX0RNQTJEX01zcERlSW5pdChETUEyRF9IYW5kbGVUeXBlRGVmKiBoZG1hMmQpOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0RNQTJEX0RlSW5pdChETUEyRF9IYW5kbGVUeXBlRGVmICpoZG1hMmQpOwordm9pZCAgICAgICAgICAgICAgSEFMX0RNQTJEX01zcEluaXQoRE1BMkRfSGFuZGxlVHlwZURlZiAqaGRtYTJkKTsKK3ZvaWQgICAgICAgICAgICAgIEhBTF9ETUEyRF9Nc3BEZUluaXQoRE1BMkRfSGFuZGxlVHlwZURlZiAqaGRtYTJkKTsKIC8qIENhbGxiYWNrcyBSZWdpc3Rlci9VblJlZ2lzdGVyIGZ1bmN0aW9ucyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWYgKFVTRV9IQUxfRE1BMkRfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfRE1BMkRfUmVnaXN0ZXJDYWxsYmFjayhETUEyRF9IYW5kbGVUeXBlRGVmICpoZG1hMmQsIEhBTF9ETUEyRF9DYWxsYmFja0lEVHlwZURlZiBDYWxsYmFja0lELCBwRE1BMkRfQ2FsbGJhY2tUeXBlRGVmIHBDYWxsYmFjayk7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfRE1BMkRfUmVnaXN0ZXJDYWxsYmFjayhETUEyRF9IYW5kbGVUeXBlRGVmICpoZG1hMmQsIEhBTF9ETUEyRF9DYWxsYmFja0lEVHlwZURlZiBDYWxsYmFja0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcERNQTJEX0NhbGxiYWNrVHlwZURlZiBwQ2FsbGJhY2spOwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0RNQTJEX1VuUmVnaXN0ZXJDYWxsYmFjayhETUEyRF9IYW5kbGVUeXBlRGVmICpoZG1hMmQsIEhBTF9ETUEyRF9DYWxsYmFja0lEVHlwZURlZiBDYWxsYmFja0lEKTsKICNlbmRpZiAvKiBVU0VfSEFMX0RNQTJEX1JFR0lTVEVSX0NBTExCQUNLUyAqLwogCkBAIC00MzksMTYgKzQ0NiwyMiBAQAogICAqLwogCiAvKiBJTyBvcGVyYXRpb24gZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfRE1BMkRfU3RhcnQoRE1BMkRfSGFuZGxlVHlwZURlZiAqaGRtYTJkLCB1aW50MzJfdCBwZGF0YSwgdWludDMyX3QgRHN0QWRkcmVzcywgdWludDMyX3QgV2lkdGgsIHVpbnQzMl90IEhlaWdodCk7Ci1IQUxfU3RhdHVzVHlwZURlZiBIQUxfRE1BMkRfQmxlbmRpbmdTdGFydChETUEyRF9IYW5kbGVUeXBlRGVmICpoZG1hMmQsIHVpbnQzMl90IFNyY0FkZHJlc3MxLCB1aW50MzJfdCBTcmNBZGRyZXNzMiwgdWludDMyX3QgRHN0QWRkcmVzcywgdWludDMyX3QgV2lkdGgsICB1aW50MzJfdCBIZWlnaHQpOwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0RNQTJEX1N0YXJ0X0lUKERNQTJEX0hhbmRsZVR5cGVEZWYgKmhkbWEyZCwgdWludDMyX3QgcGRhdGEsIHVpbnQzMl90IERzdEFkZHJlc3MsIHVpbnQzMl90IFdpZHRoLCB1aW50MzJfdCBIZWlnaHQpOwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0RNQTJEX0JsZW5kaW5nU3RhcnRfSVQoRE1BMkRfSGFuZGxlVHlwZURlZiAqaGRtYTJkLCB1aW50MzJfdCBTcmNBZGRyZXNzMSwgdWludDMyX3QgU3JjQWRkcmVzczIsIHVpbnQzMl90IERzdEFkZHJlc3MsIHVpbnQzMl90IFdpZHRoLCB1aW50MzJfdCBIZWlnaHQpOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0RNQTJEX1N0YXJ0KERNQTJEX0hhbmRsZVR5cGVEZWYgKmhkbWEyZCwgdWludDMyX3QgcGRhdGEsIHVpbnQzMl90IERzdEFkZHJlc3MsIHVpbnQzMl90IFdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IEhlaWdodCk7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfRE1BMkRfQmxlbmRpbmdTdGFydChETUEyRF9IYW5kbGVUeXBlRGVmICpoZG1hMmQsIHVpbnQzMl90IFNyY0FkZHJlc3MxLCB1aW50MzJfdCBTcmNBZGRyZXNzMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IERzdEFkZHJlc3MsIHVpbnQzMl90IFdpZHRoLCAgdWludDMyX3QgSGVpZ2h0KTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9ETUEyRF9TdGFydF9JVChETUEyRF9IYW5kbGVUeXBlRGVmICpoZG1hMmQsIHVpbnQzMl90IHBkYXRhLCB1aW50MzJfdCBEc3RBZGRyZXNzLCB1aW50MzJfdCBXaWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBIZWlnaHQpOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0RNQTJEX0JsZW5kaW5nU3RhcnRfSVQoRE1BMkRfSGFuZGxlVHlwZURlZiAqaGRtYTJkLCB1aW50MzJfdCBTcmNBZGRyZXNzMSwgdWludDMyX3QgU3JjQWRkcmVzczIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBEc3RBZGRyZXNzLCB1aW50MzJfdCBXaWR0aCwgdWludDMyX3QgSGVpZ2h0KTsKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9ETUEyRF9TdXNwZW5kKERNQTJEX0hhbmRsZVR5cGVEZWYgKmhkbWEyZCk7CiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfRE1BMkRfUmVzdW1lKERNQTJEX0hhbmRsZVR5cGVEZWYgKmhkbWEyZCk7CiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfRE1BMkRfQWJvcnQoRE1BMkRfSGFuZGxlVHlwZURlZiAqaGRtYTJkKTsKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9ETUEyRF9FbmFibGVDTFVUKERNQTJEX0hhbmRsZVR5cGVEZWYgKmhkbWEyZCwgdWludDMyX3QgTGF5ZXJJZHgpOwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0RNQTJEX0NMVVRTdGFydExvYWQoRE1BMkRfSGFuZGxlVHlwZURlZiAqaGRtYTJkLCBETUEyRF9DTFVUQ2ZnVHlwZURlZiAqQ0xVVENmZywgdWludDMyX3QgTGF5ZXJJZHgpOwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0RNQTJEX0NMVVRTdGFydExvYWRfSVQoRE1BMkRfSGFuZGxlVHlwZURlZiAqaGRtYTJkLCBETUEyRF9DTFVUQ2ZnVHlwZURlZiAqQ0xVVENmZywgdWludDMyX3QgTGF5ZXJJZHgpOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0RNQTJEX0NMVVRTdGFydExvYWQoRE1BMkRfSGFuZGxlVHlwZURlZiAqaGRtYTJkLCBETUEyRF9DTFVUQ2ZnVHlwZURlZiAqQ0xVVENmZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IExheWVySWR4KTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9ETUEyRF9DTFVUU3RhcnRMb2FkX0lUKERNQTJEX0hhbmRsZVR5cGVEZWYgKmhkbWEyZCwgRE1BMkRfQ0xVVENmZ1R5cGVEZWYgKkNMVVRDZmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBMYXllcklkeCk7CiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfRE1BMkRfQ0xVVExvYWQoRE1BMkRfSGFuZGxlVHlwZURlZiAqaGRtYTJkLCBETUEyRF9DTFVUQ2ZnVHlwZURlZiBDTFVUQ2ZnLCB1aW50MzJfdCBMYXllcklkeCk7CiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfRE1BMkRfQ0xVVExvYWRfSVQoRE1BMkRfSGFuZGxlVHlwZURlZiAqaGRtYTJkLCBETUEyRF9DTFVUQ2ZnVHlwZURlZiBDTFVUQ2ZnLCB1aW50MzJfdCBMYXllcklkeCk7CiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfRE1BMkRfQ0xVVExvYWRpbmdfQWJvcnQoRE1BMkRfSGFuZGxlVHlwZURlZiAqaGRtYTJkLCB1aW50MzJfdCBMYXllcklkeCk7CkBAIC01NjgsMTMgKzU4MSwxNiBAQAogLyoqIEBkZWZncm91cCBETUEyRF9Qcml2YXRlX01hY3JvcyBETUEyRCBQcml2YXRlIE1hY3JvcwogICAqIEB7CiAgICovCi0jZGVmaW5lIElTX0RNQTJEX0xBWUVSKExBWUVSKSAgICAgICAgICAgICAgICAgKCgoTEFZRVIpID09IERNQTJEX0JBQ0tHUk9VTkRfTEFZRVIpIHx8ICgoTEFZRVIpID09IERNQTJEX0ZPUkVHUk9VTkRfTEFZRVIpKQorI2RlZmluZSBJU19ETUEyRF9MQVlFUihMQVlFUikgICAgICAgICAgICAgICAgICgoKExBWUVSKSA9PSBETUEyRF9CQUNLR1JPVU5EX0xBWUVSKVwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChMQVlFUikgPT0gRE1BMkRfRk9SRUdST1VORF9MQVlFUikpCiAKICNkZWZpbmUgSVNfRE1BMkRfTU9ERShNT0RFKSAgICAgICAgICAgICAgICAgICAoKChNT0RFKSA9PSBETUEyRF9NMk0pICAgICAgIHx8ICgoTU9ERSkgPT0gRE1BMkRfTTJNX1BGQykgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKE1PREUpID09IERNQTJEX00yTV9CTEVORCkgfHwgKChNT0RFKSA9PSBETUEyRF9SMk0pKQogCi0jZGVmaW5lIElTX0RNQTJEX0NNT0RFKE1PREVfQVJHQikgICAgICAgICAgICAgKCgoTU9ERV9BUkdCKSA9PSBETUEyRF9PVVRQVVRfQVJHQjg4ODgpIHx8ICgoTU9ERV9BUkdCKSA9PSBETUEyRF9PVVRQVVRfUkdCODg4KSAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChNT0RFX0FSR0IpID09IERNQTJEX09VVFBVVF9SR0I1NjUpICAgfHwgKChNT0RFX0FSR0IpID09IERNQTJEX09VVFBVVF9BUkdCMTU1NSkgfHwgXAorI2RlZmluZSBJU19ETUEyRF9DTU9ERShNT0RFX0FSR0IpICAgICAgICAgICAgICgoKE1PREVfQVJHQikgPT0gRE1BMkRfT1VUUFVUX0FSR0I4ODg4KSB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTU9ERV9BUkdCKSA9PSBETUEyRF9PVVRQVVRfUkdCODg4KSAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChNT0RFX0FSR0IpID09IERNQTJEX09VVFBVVF9SR0I1NjUpICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKE1PREVfQVJHQikgPT0gRE1BMkRfT1VUUFVUX0FSR0IxNTU1KSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTU9ERV9BUkdCKSA9PSBETUEyRF9PVVRQVVRfQVJHQjQ0NDQpKQogCiAjZGVmaW5lIElTX0RNQTJEX0NPTE9SKENPTE9SKSAgICAgICAgICAgICAgICAgKChDT0xPUikgPD0gRE1BMkRfQ09MT1JfVkFMVUUpCkBAIC01ODIsMTEgKzU5OCwxNiBAQAogI2RlZmluZSBJU19ETUEyRF9QSVhFTChQSVhFTCkgICAgICAgICAgICAgICAgICgoUElYRUwpIDw9IERNQTJEX1BJWEVMKQogI2RlZmluZSBJU19ETUEyRF9PRkZTRVQoT09GRlNFVCkgICAgICAgICAgICAgICgoT09GRlNFVCkgPD0gRE1BMkRfT0ZGU0VUKQogCi0jZGVmaW5lIElTX0RNQTJEX0lOUFVUX0NPTE9SX01PREUoSU5QVVRfQ00pICAgKCgoSU5QVVRfQ00pID09IERNQTJEX0lOUFVUX0FSR0I4ODg4KSB8fCAoKElOUFVUX0NNKSA9PSBETUEyRF9JTlBVVF9SR0I4ODgpICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKElOUFVUX0NNKSA9PSBETUEyRF9JTlBVVF9SR0I1NjUpICAgfHwgKChJTlBVVF9DTSkgPT0gRE1BMkRfSU5QVVRfQVJHQjE1NTUpIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChJTlBVVF9DTSkgPT0gRE1BMkRfSU5QVVRfQVJHQjQ0NDQpIHx8ICgoSU5QVVRfQ00pID09IERNQTJEX0lOUFVUX0w4KSAgICAgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoSU5QVVRfQ00pID09IERNQTJEX0lOUFVUX0FMNDQpICAgICB8fCAoKElOUFVUX0NNKSA9PSBETUEyRF9JTlBVVF9BTDg4KSAgICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKElOUFVUX0NNKSA9PSBETUEyRF9JTlBVVF9MNCkgICAgICAgfHwgKChJTlBVVF9DTSkgPT0gRE1BMkRfSU5QVVRfQTgpICAgICAgIHx8IFwKKyNkZWZpbmUgSVNfRE1BMkRfSU5QVVRfQ09MT1JfTU9ERShJTlBVVF9DTSkgICAoKChJTlBVVF9DTSkgPT0gRE1BMkRfSU5QVVRfQVJHQjg4ODgpIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChJTlBVVF9DTSkgPT0gRE1BMkRfSU5QVVRfUkdCODg4KSAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChJTlBVVF9DTSkgPT0gRE1BMkRfSU5QVVRfUkdCNTY1KSAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChJTlBVVF9DTSkgPT0gRE1BMkRfSU5QVVRfQVJHQjE1NTUpIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChJTlBVVF9DTSkgPT0gRE1BMkRfSU5QVVRfQVJHQjQ0NDQpIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChJTlBVVF9DTSkgPT0gRE1BMkRfSU5QVVRfTDgpICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChJTlBVVF9DTSkgPT0gRE1BMkRfSU5QVVRfQUw0NCkgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChJTlBVVF9DTSkgPT0gRE1BMkRfSU5QVVRfQUw4OCkgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChJTlBVVF9DTSkgPT0gRE1BMkRfSU5QVVRfTDQpICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChJTlBVVF9DTSkgPT0gRE1BMkRfSU5QVVRfQTgpICAgICAgIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChJTlBVVF9DTSkgPT0gRE1BMkRfSU5QVVRfQTQpKQogCiAjZGVmaW5lIElTX0RNQTJEX0FMUEhBX01PREUoQWxwaGFNb2RlKSAgICAgICAgKCgoQWxwaGFNb2RlKSA9PSBETUEyRF9OT19NT0RJRl9BTFBIQSkgfHwgXApAQCAtNjAxLDExICs2MjIsMTEgQEAKICNkZWZpbmUgSVNfRE1BMkRfQ0xVVF9TSVpFKENMVVRfU0laRSkgICAgICAgICAoKENMVVRfU0laRSkgPD0gRE1BMkRfQ0xVVF9TSVpFKQogI2RlZmluZSBJU19ETUEyRF9MSU5FV0FURVJNQVJLKExpbmVXYXRlcm1hcmspICgoTGluZVdhdGVybWFyaykgPD0gRE1BMkRfTElORV9XQVRFUk1BUktfTUFYKQogI2RlZmluZSBJU19ETUEyRF9JVChJVCkgICAgICAgICAgICAgICAgICAgICAgICgoKElUKSA9PSBETUEyRF9JVF9DVEMpIHx8ICgoSVQpID09IERNQTJEX0lUX0NBRSkgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKElUKSA9PSBETUEyRF9JVF9UVykgfHwgKChJVCkgPT0gRE1BMkRfSVRfVEMpIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChJVCkgPT0gRE1BMkRfSVRfVEUpIHx8ICgoSVQpID09IERNQTJEX0lUX0NFKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChJVCkgPT0gRE1BMkRfSVRfVFcpICB8fCAoKElUKSA9PSBETUEyRF9JVF9UQykgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChJVCkgPT0gRE1BMkRfSVRfVEUpICB8fCAoKElUKSA9PSBETUEyRF9JVF9DRSkpCiAjZGVmaW5lIElTX0RNQTJEX0dFVF9GTEFHKEZMQUcpICAgICAgICAgICAgICAgKCgoRkxBRykgPT0gRE1BMkRfRkxBR19DVEMpIHx8ICgoRkxBRykgPT0gRE1BMkRfRkxBR19DQUUpIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChGTEFHKSA9PSBETUEyRF9GTEFHX1RXKSAgIHx8ICgoRkxBRykgPT0gRE1BMkRfRkxBR19UQykgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChGTEFHKSA9PSBETUEyRF9GTEFHX1RFKSAgIHx8ICgoRkxBRykgPT0gRE1BMkRfRkxBR19DRSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRkxBRykgPT0gRE1BMkRfRkxBR19UVykgIHx8ICgoRkxBRykgPT0gRE1BMkRfRkxBR19UQykgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChGTEFHKSA9PSBETUEyRF9GTEFHX1RFKSAgfHwgKChGTEFHKSA9PSBETUEyRF9GTEFHX0NFKSkKIC8qKgogICAqIEB9CiAgICovCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJmNHh4X2hhbF9kc2kuaCBiL0luYy9zdG0zMmY0eHhfaGFsX2RzaS5oCmluZGV4IDgyMmE0MzAuLjcxNmRlYTEgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmY0eHhfaGFsX2RzaS5oCisrKyBiL0luYy9zdG0zMmY0eHhfaGFsX2RzaS5oCkBAIC05MjMsNyArOTIzLDcgQEAKIAogLyoqCiAgICogQGJyaWVmIFJlc2V0IERTSSBoYW5kbGUgc3RhdGUuCi0gICogQHBhcmFtICBfX0hBTkRMRV9fOiBEU0kgaGFuZGxlCisgICogQHBhcmFtICBfX0hBTkRMRV9fIERTSSBoYW5kbGUKICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KICNpZiAoVVNFX0hBTF9EU0lfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJmNHh4X2hhbF9leHRpLmggYi9JbmMvc3RtMzJmNHh4X2hhbF9leHRpLmgKaW5kZXggZmY3NDIyMi4uODU3MDExMiAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZjR4eF9oYWxfZXh0aS5oCisrKyBiL0luYy9zdG0zMmY0eHhfaGFsX2V4dGkuaApAQCAtMjQzLDE5ICsyNDMsMTkgQEAKIC8qKiBAZGVmZ3JvdXAgRVhUSV9Qcml2YXRlX01hY3JvcyBFWFRJIFByaXZhdGUgTWFjcm9zCiAgICogQHsKICAgKi8KLSNkZWZpbmUgSVNfRVhUSV9MSU5FKF9fTElORV9fKSAgICAgICAgICAoKCgoX19MSU5FX18pICYgfihFWFRJX1BST1BFUlRZX01BU0sgfCBFWFRJX1BJTl9NQVNLKSkgPT0gMHgwMHUpICYmIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCgoX19MSU5FX18pICYgRVhUSV9QUk9QRVJUWV9NQVNLKSA9PSBFWFRJX0NPTkZJRykgICAgICAgICAgICAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoX19MSU5FX18pICYgRVhUSV9QUk9QRVJUWV9NQVNLKSA9PSBFWFRJX0dQSU8pKSAgICAgICAgICAgICAgICYmIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoX19MSU5FX18pICYgRVhUSV9QSU5fTUFTSykgPCBFWFRJX0xJTkVfTkIpKQorI2RlZmluZSBJU19FWFRJX0xJTkUoX19FWFRJX0xJTkVfXykgICAgICAgICAgKCgoKF9fRVhUSV9MSU5FX18pICYgfihFWFRJX1BST1BFUlRZX01BU0sgfCBFWFRJX1BJTl9NQVNLKSkgPT0gMHgwMHUpICYmIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKChfX0VYVElfTElORV9fKSAmIEVYVElfUFJPUEVSVFlfTUFTSykgPT0gRVhUSV9DT05GSUcpICAgICAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoX19FWFRJX0xJTkVfXykgJiBFWFRJX1BST1BFUlRZX01BU0spID09IEVYVElfR1BJTykpICAgICAgICAgICAgICAgJiYgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKF9fRVhUSV9MSU5FX18pICYgRVhUSV9QSU5fTUFTSykgPCBFWFRJX0xJTkVfTkIpKQogCi0jZGVmaW5lIElTX0VYVElfTU9ERShfX0xJTkVfXykgICAgICAgICAgKCgoKF9fTElORV9fKSAmIEVYVElfTU9ERV9NQVNLKSAhPSAweDAwdSkgJiYgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChfX0xJTkVfXykgJiB+RVhUSV9NT0RFX01BU0spID09IDB4MDB1KSkKKyNkZWZpbmUgSVNfRVhUSV9NT0RFKF9fRVhUSV9MSU5FX18pICAgICAgICAgICgoKChfX0VYVElfTElORV9fKSAmIEVYVElfTU9ERV9NQVNLKSAhPSAweDAwdSkgJiYgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKF9fRVhUSV9MSU5FX18pICYgfkVYVElfTU9ERV9NQVNLKSA9PSAweDAwdSkpCiAKLSNkZWZpbmUgSVNfRVhUSV9UUklHR0VSKF9fTElORV9fKSAgICAgICAoKChfX0xJTkVfXykgICYgfkVYVElfVFJJR0dFUl9NQVNLKSA9PSAweDAwdSkKKyNkZWZpbmUgSVNfRVhUSV9UUklHR0VSKF9fRVhUSV9MSU5FX18pICAgICAgICgoKF9fRVhUSV9MSU5FX18pICAmIH5FWFRJX1RSSUdHRVJfTUFTSykgPT0gMHgwMHUpCiAKLSNkZWZpbmUgSVNfRVhUSV9QRU5ESU5HX0VER0UoX19MSU5FX18pICAoKF9fTElORV9fKSA9PSBFWFRJX1RSSUdHRVJfUklTSU5HX0ZBTExJTkcpCisjZGVmaW5lIElTX0VYVElfUEVORElOR19FREdFKF9fRVhUSV9MSU5FX18pICAoKF9fRVhUSV9MSU5FX18pID09IEVYVElfVFJJR0dFUl9SSVNJTkdfRkFMTElORykKIAotI2RlZmluZSBJU19FWFRJX0NPTkZJR19MSU5FKF9fTElORV9fKSAgICgoKF9fTElORV9fKSAmIEVYVElfQ09ORklHKSAhPSAweDAwdSkKKyNkZWZpbmUgSVNfRVhUSV9DT05GSUdfTElORShfX0VYVElfTElORV9fKSAgICgoKF9fRVhUSV9MSU5FX18pICYgRVhUSV9DT05GSUcpICE9IDB4MDB1KQogCiAjaWYgIWRlZmluZWQgKEdQSU9EKQogI2RlZmluZSBJU19FWFRJX0dQSU9fUE9SVChfX1BPUlRfXykgICAgICgoKF9fUE9SVF9fKSA9PSBFWFRJX0dQSU9BKSB8fCBcCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJmNHh4X2hhbF9mbXBpMmMuaCBiL0luYy9zdG0zMmY0eHhfaGFsX2ZtcGkyYy5oCmluZGV4IGYwZmQyMzAuLjI3MGE5MmIgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmY0eHhfaGFsX2ZtcGkyYy5oCisrKyBiL0luYy9zdG0zMmY0eHhfaGFsX2ZtcGkyYy5oCkBAIC00OTYsNyArNDk2LDggQEAKICAgKgogICAqIEByZXR2YWwgVGhlIG5ldyBzdGF0ZSBvZiBfX0lOVEVSUlVQVF9fIChTRVQgb3IgUkVTRVQpLgogICAqLwotI2RlZmluZSBfX0hBTF9GTVBJMkNfR0VUX0lUX1NPVVJDRShfX0hBTkRMRV9fLCBfX0lOVEVSUlVQVF9fKSAgICAgICgoKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNSMSAmIChfX0lOVEVSUlVQVF9fKSkgPT0gKF9fSU5URVJSVVBUX18pKSA/IFNFVCA6IFJFU0VUKQorI2RlZmluZSBfX0hBTF9GTVBJMkNfR0VUX0lUX1NPVVJDRShfX0hBTkRMRV9fLCBfX0lOVEVSUlVQVF9fKSAgICAgICgoKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNSMSAmIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19JTlRFUlJVUFRfXykpID09IChfX0lOVEVSUlVQVF9fKSkgPyBTRVQgOiBSRVNFVCkKIAogLyoqIEBicmllZiAgQ2hlY2sgd2hldGhlciB0aGUgc3BlY2lmaWVkIEZNUEkyQyBmbGFnIGlzIHNldCBvciBub3QuCiAgICogQHBhcmFtICBfX0hBTkRMRV9fIHNwZWNpZmllcyB0aGUgRk1QSTJDIEhhbmRsZS4KQEAgLTUyMiw3ICs1MjMsOCBAQAogICAqIEByZXR2YWwgVGhlIG5ldyBzdGF0ZSBvZiBfX0ZMQUdfXyAoU0VUIG9yIFJFU0VUKS4KICAgKi8KICNkZWZpbmUgRk1QSTJDX0ZMQUdfTUFTSyAgKDB4MDAwMUZGRkZVKQotI2RlZmluZSBfX0hBTF9GTVBJMkNfR0VUX0ZMQUcoX19IQU5ETEVfXywgX19GTEFHX18pICgoKCgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5JU1IpICYgKF9fRkxBR19fKSkgPT0gKF9fRkxBR19fKSkgPyBTRVQgOiBSRVNFVCkKKyNkZWZpbmUgX19IQUxfRk1QSTJDX0dFVF9GTEFHKF9fSEFORExFX18sIF9fRkxBR19fKSAoKCgoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+SVNSKSAmIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19GTEFHX18pKSA9PSAoX19GTEFHX18pKSA/IFNFVCA6IFJFU0VUKQogCiAvKiogQGJyaWVmICBDbGVhciB0aGUgRk1QSTJDIHBlbmRpbmcgZmxhZ3Mgd2hpY2ggYXJlIGNsZWFyZWQgYnkgd3JpdGluZyAxIGluIGEgc3BlY2lmaWMgYml0LgogICAqIEBwYXJhbSAgX19IQU5ETEVfXyBzcGVjaWZpZXMgdGhlIEZNUEkyQyBIYW5kbGUuCkBAIC01NDIsNyArNTQ0LDcgQEAKICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KICNkZWZpbmUgX19IQUxfRk1QSTJDX0NMRUFSX0ZMQUcoX19IQU5ETEVfXywgX19GTEFHX18pICgoKF9fRkxBR19fKSA9PSBGTVBJMkNfRkxBR19UWEUpID8gKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPklTUiB8PSAoX19GTEFHX18pKSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5JQ1IgPSAoX19GTEFHX18pKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5JQ1IgPSAoX19GTEFHX18pKSkKIAogLyoqIEBicmllZiAgRW5hYmxlIHRoZSBzcGVjaWZpZWQgRk1QSTJDIHBlcmlwaGVyYWwuCiAgICogQHBhcmFtICBfX0hBTkRMRV9fIHNwZWNpZmllcyB0aGUgRk1QSTJDIEhhbmRsZS4KQEAgLTU4NCw3ICs1ODYsOCBAQAogCiAvKiBDYWxsYmFja3MgUmVnaXN0ZXIvVW5SZWdpc3RlciBmdW5jdGlvbnMgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmIChVU0VfSEFMX0ZNUEkyQ19SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkKLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9GTVBJMkNfUmVnaXN0ZXJDYWxsYmFjayhGTVBJMkNfSGFuZGxlVHlwZURlZiAqaGZtcGkyYywgSEFMX0ZNUEkyQ19DYWxsYmFja0lEVHlwZURlZiBDYWxsYmFja0lELCBwRk1QSTJDX0NhbGxiYWNrVHlwZURlZiBwQ2FsbGJhY2spOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0ZNUEkyQ19SZWdpc3RlckNhbGxiYWNrKEZNUEkyQ19IYW5kbGVUeXBlRGVmICpoZm1waTJjLCBIQUxfRk1QSTJDX0NhbGxiYWNrSURUeXBlRGVmIENhbGxiYWNrSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEZNUEkyQ19DYWxsYmFja1R5cGVEZWYgcENhbGxiYWNrKTsKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9GTVBJMkNfVW5SZWdpc3RlckNhbGxiYWNrKEZNUEkyQ19IYW5kbGVUeXBlRGVmICpoZm1waTJjLCBIQUxfRk1QSTJDX0NhbGxiYWNrSURUeXBlRGVmIENhbGxiYWNrSUQpOwogCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfRk1QSTJDX1JlZ2lzdGVyQWRkckNhbGxiYWNrKEZNUEkyQ19IYW5kbGVUeXBlRGVmICpoZm1waTJjLCBwRk1QSTJDX0FkZHJDYWxsYmFja1R5cGVEZWYgcENhbGxiYWNrKTsKQEAgLTU5OSw0OSArNjAyLDcwIEBACiAgICovCiAvKiBJTyBvcGVyYXRpb24gZnVuY3Rpb25zICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyoqKioqKiogQmxvY2tpbmcgbW9kZTogUG9sbGluZyAqLwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0ZNUEkyQ19NYXN0ZXJfVHJhbnNtaXQoRk1QSTJDX0hhbmRsZVR5cGVEZWYgKmhmbXBpMmMsIHVpbnQxNl90IERldkFkZHJlc3MsIHVpbnQ4X3QgKnBEYXRhLCB1aW50MTZfdCBTaXplLCB1aW50MzJfdCBUaW1lb3V0KTsKLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9GTVBJMkNfTWFzdGVyX1JlY2VpdmUoRk1QSTJDX0hhbmRsZVR5cGVEZWYgKmhmbXBpMmMsIHVpbnQxNl90IERldkFkZHJlc3MsIHVpbnQ4X3QgKnBEYXRhLCB1aW50MTZfdCBTaXplLCB1aW50MzJfdCBUaW1lb3V0KTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9GTVBJMkNfTWFzdGVyX1RyYW5zbWl0KEZNUEkyQ19IYW5kbGVUeXBlRGVmICpoZm1waTJjLCB1aW50MTZfdCBEZXZBZGRyZXNzLCB1aW50OF90ICpwRGF0YSwgdWludDE2X3QgU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IFRpbWVvdXQpOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0ZNUEkyQ19NYXN0ZXJfUmVjZWl2ZShGTVBJMkNfSGFuZGxlVHlwZURlZiAqaGZtcGkyYywgdWludDE2X3QgRGV2QWRkcmVzcywgdWludDhfdCAqcERhdGEsIHVpbnQxNl90IFNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IFRpbWVvdXQpOwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0ZNUEkyQ19TbGF2ZV9UcmFuc21pdChGTVBJMkNfSGFuZGxlVHlwZURlZiAqaGZtcGkyYywgdWludDhfdCAqcERhdGEsIHVpbnQxNl90IFNpemUsIHVpbnQzMl90IFRpbWVvdXQpOwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0ZNUEkyQ19TbGF2ZV9SZWNlaXZlKEZNUEkyQ19IYW5kbGVUeXBlRGVmICpoZm1waTJjLCB1aW50OF90ICpwRGF0YSwgdWludDE2X3QgU2l6ZSwgdWludDMyX3QgVGltZW91dCk7Ci1IQUxfU3RhdHVzVHlwZURlZiBIQUxfRk1QSTJDX01lbV9Xcml0ZShGTVBJMkNfSGFuZGxlVHlwZURlZiAqaGZtcGkyYywgdWludDE2X3QgRGV2QWRkcmVzcywgdWludDE2X3QgTWVtQWRkcmVzcywgdWludDE2X3QgTWVtQWRkU2l6ZSwgdWludDhfdCAqcERhdGEsIHVpbnQxNl90IFNpemUsIHVpbnQzMl90IFRpbWVvdXQpOwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0ZNUEkyQ19NZW1fUmVhZChGTVBJMkNfSGFuZGxlVHlwZURlZiAqaGZtcGkyYywgdWludDE2X3QgRGV2QWRkcmVzcywgdWludDE2X3QgTWVtQWRkcmVzcywgdWludDE2X3QgTWVtQWRkU2l6ZSwgdWludDhfdCAqcERhdGEsIHVpbnQxNl90IFNpemUsIHVpbnQzMl90IFRpbWVvdXQpOwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0ZNUEkyQ19Jc0RldmljZVJlYWR5KEZNUEkyQ19IYW5kbGVUeXBlRGVmICpoZm1waTJjLCB1aW50MTZfdCBEZXZBZGRyZXNzLCB1aW50MzJfdCBUcmlhbHMsIHVpbnQzMl90IFRpbWVvdXQpOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0ZNUEkyQ19NZW1fV3JpdGUoRk1QSTJDX0hhbmRsZVR5cGVEZWYgKmhmbXBpMmMsIHVpbnQxNl90IERldkFkZHJlc3MsIHVpbnQxNl90IE1lbUFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBNZW1BZGRTaXplLCB1aW50OF90ICpwRGF0YSwgdWludDE2X3QgU2l6ZSwgdWludDMyX3QgVGltZW91dCk7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfRk1QSTJDX01lbV9SZWFkKEZNUEkyQ19IYW5kbGVUeXBlRGVmICpoZm1waTJjLCB1aW50MTZfdCBEZXZBZGRyZXNzLCB1aW50MTZfdCBNZW1BZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBNZW1BZGRTaXplLCB1aW50OF90ICpwRGF0YSwgdWludDE2X3QgU2l6ZSwgdWludDMyX3QgVGltZW91dCk7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfRk1QSTJDX0lzRGV2aWNlUmVhZHkoRk1QSTJDX0hhbmRsZVR5cGVEZWYgKmhmbXBpMmMsIHVpbnQxNl90IERldkFkZHJlc3MsIHVpbnQzMl90IFRyaWFscywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBUaW1lb3V0KTsKIAogLyoqKioqKiogTm9uLUJsb2NraW5nIG1vZGU6IEludGVycnVwdCAqLwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0ZNUEkyQ19NYXN0ZXJfVHJhbnNtaXRfSVQoRk1QSTJDX0hhbmRsZVR5cGVEZWYgKmhmbXBpMmMsIHVpbnQxNl90IERldkFkZHJlc3MsIHVpbnQ4X3QgKnBEYXRhLCB1aW50MTZfdCBTaXplKTsKLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9GTVBJMkNfTWFzdGVyX1JlY2VpdmVfSVQoRk1QSTJDX0hhbmRsZVR5cGVEZWYgKmhmbXBpMmMsIHVpbnQxNl90IERldkFkZHJlc3MsIHVpbnQ4X3QgKnBEYXRhLCB1aW50MTZfdCBTaXplKTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9GTVBJMkNfTWFzdGVyX1RyYW5zbWl0X0lUKEZNUEkyQ19IYW5kbGVUeXBlRGVmICpoZm1waTJjLCB1aW50MTZfdCBEZXZBZGRyZXNzLCB1aW50OF90ICpwRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IFNpemUpOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0ZNUEkyQ19NYXN0ZXJfUmVjZWl2ZV9JVChGTVBJMkNfSGFuZGxlVHlwZURlZiAqaGZtcGkyYywgdWludDE2X3QgRGV2QWRkcmVzcywgdWludDhfdCAqcERhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IFNpemUpOwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0ZNUEkyQ19TbGF2ZV9UcmFuc21pdF9JVChGTVBJMkNfSGFuZGxlVHlwZURlZiAqaGZtcGkyYywgdWludDhfdCAqcERhdGEsIHVpbnQxNl90IFNpemUpOwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0ZNUEkyQ19TbGF2ZV9SZWNlaXZlX0lUKEZNUEkyQ19IYW5kbGVUeXBlRGVmICpoZm1waTJjLCB1aW50OF90ICpwRGF0YSwgdWludDE2X3QgU2l6ZSk7Ci1IQUxfU3RhdHVzVHlwZURlZiBIQUxfRk1QSTJDX01lbV9Xcml0ZV9JVChGTVBJMkNfSGFuZGxlVHlwZURlZiAqaGZtcGkyYywgdWludDE2X3QgRGV2QWRkcmVzcywgdWludDE2X3QgTWVtQWRkcmVzcywgdWludDE2X3QgTWVtQWRkU2l6ZSwgdWludDhfdCAqcERhdGEsIHVpbnQxNl90IFNpemUpOwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0ZNUEkyQ19NZW1fUmVhZF9JVChGTVBJMkNfSGFuZGxlVHlwZURlZiAqaGZtcGkyYywgdWludDE2X3QgRGV2QWRkcmVzcywgdWludDE2X3QgTWVtQWRkcmVzcywgdWludDE2X3QgTWVtQWRkU2l6ZSwgdWludDhfdCAqcERhdGEsIHVpbnQxNl90IFNpemUpOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0ZNUEkyQ19NZW1fV3JpdGVfSVQoRk1QSTJDX0hhbmRsZVR5cGVEZWYgKmhmbXBpMmMsIHVpbnQxNl90IERldkFkZHJlc3MsIHVpbnQxNl90IE1lbUFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBNZW1BZGRTaXplLCB1aW50OF90ICpwRGF0YSwgdWludDE2X3QgU2l6ZSk7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfRk1QSTJDX01lbV9SZWFkX0lUKEZNUEkyQ19IYW5kbGVUeXBlRGVmICpoZm1waTJjLCB1aW50MTZfdCBEZXZBZGRyZXNzLCB1aW50MTZfdCBNZW1BZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBNZW1BZGRTaXplLCB1aW50OF90ICpwRGF0YSwgdWludDE2X3QgU2l6ZSk7CiAKLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9GTVBJMkNfTWFzdGVyX1NlcV9UcmFuc21pdF9JVChGTVBJMkNfSGFuZGxlVHlwZURlZiAqaGZtcGkyYywgdWludDE2X3QgRGV2QWRkcmVzcywgdWludDhfdCAqcERhdGEsIHVpbnQxNl90IFNpemUsIHVpbnQzMl90IFhmZXJPcHRpb25zKTsKLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9GTVBJMkNfTWFzdGVyX1NlcV9SZWNlaXZlX0lUKEZNUEkyQ19IYW5kbGVUeXBlRGVmICpoZm1waTJjLCB1aW50MTZfdCBEZXZBZGRyZXNzLCB1aW50OF90ICpwRGF0YSwgdWludDE2X3QgU2l6ZSwgdWludDMyX3QgWGZlck9wdGlvbnMpOwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0ZNUEkyQ19TbGF2ZV9TZXFfVHJhbnNtaXRfSVQoRk1QSTJDX0hhbmRsZVR5cGVEZWYgKmhmbXBpMmMsIHVpbnQ4X3QgKnBEYXRhLCB1aW50MTZfdCBTaXplLCB1aW50MzJfdCBYZmVyT3B0aW9ucyk7Ci1IQUxfU3RhdHVzVHlwZURlZiBIQUxfRk1QSTJDX1NsYXZlX1NlcV9SZWNlaXZlX0lUKEZNUEkyQ19IYW5kbGVUeXBlRGVmICpoZm1waTJjLCB1aW50OF90ICpwRGF0YSwgdWludDE2X3QgU2l6ZSwgdWludDMyX3QgWGZlck9wdGlvbnMpOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0ZNUEkyQ19NYXN0ZXJfU2VxX1RyYW5zbWl0X0lUKEZNUEkyQ19IYW5kbGVUeXBlRGVmICpoZm1waTJjLCB1aW50MTZfdCBEZXZBZGRyZXNzLCB1aW50OF90ICpwRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBTaXplLCB1aW50MzJfdCBYZmVyT3B0aW9ucyk7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfRk1QSTJDX01hc3Rlcl9TZXFfUmVjZWl2ZV9JVChGTVBJMkNfSGFuZGxlVHlwZURlZiAqaGZtcGkyYywgdWludDE2X3QgRGV2QWRkcmVzcywgdWludDhfdCAqcERhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBTaXplLCB1aW50MzJfdCBYZmVyT3B0aW9ucyk7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfRk1QSTJDX1NsYXZlX1NlcV9UcmFuc21pdF9JVChGTVBJMkNfSGFuZGxlVHlwZURlZiAqaGZtcGkyYywgdWludDhfdCAqcERhdGEsIHVpbnQxNl90IFNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBYZmVyT3B0aW9ucyk7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfRk1QSTJDX1NsYXZlX1NlcV9SZWNlaXZlX0lUKEZNUEkyQ19IYW5kbGVUeXBlRGVmICpoZm1waTJjLCB1aW50OF90ICpwRGF0YSwgdWludDE2X3QgU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgWGZlck9wdGlvbnMpOwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0ZNUEkyQ19FbmFibGVMaXN0ZW5fSVQoRk1QSTJDX0hhbmRsZVR5cGVEZWYgKmhmbXBpMmMpOwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0ZNUEkyQ19EaXNhYmxlTGlzdGVuX0lUKEZNUEkyQ19IYW5kbGVUeXBlRGVmICpoZm1waTJjKTsKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9GTVBJMkNfTWFzdGVyX0Fib3J0X0lUKEZNUEkyQ19IYW5kbGVUeXBlRGVmICpoZm1waTJjLCB1aW50MTZfdCBEZXZBZGRyZXNzKTsKIAogLyoqKioqKiogTm9uLUJsb2NraW5nIG1vZGU6IERNQSAqLwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0ZNUEkyQ19NYXN0ZXJfVHJhbnNtaXRfRE1BKEZNUEkyQ19IYW5kbGVUeXBlRGVmICpoZm1waTJjLCB1aW50MTZfdCBEZXZBZGRyZXNzLCB1aW50OF90ICpwRGF0YSwgdWludDE2X3QgU2l6ZSk7Ci1IQUxfU3RhdHVzVHlwZURlZiBIQUxfRk1QSTJDX01hc3Rlcl9SZWNlaXZlX0RNQShGTVBJMkNfSGFuZGxlVHlwZURlZiAqaGZtcGkyYywgdWludDE2X3QgRGV2QWRkcmVzcywgdWludDhfdCAqcERhdGEsIHVpbnQxNl90IFNpemUpOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0ZNUEkyQ19NYXN0ZXJfVHJhbnNtaXRfRE1BKEZNUEkyQ19IYW5kbGVUeXBlRGVmICpoZm1waTJjLCB1aW50MTZfdCBEZXZBZGRyZXNzLCB1aW50OF90ICpwRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBTaXplKTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9GTVBJMkNfTWFzdGVyX1JlY2VpdmVfRE1BKEZNUEkyQ19IYW5kbGVUeXBlRGVmICpoZm1waTJjLCB1aW50MTZfdCBEZXZBZGRyZXNzLCB1aW50OF90ICpwRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IFNpemUpOwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0ZNUEkyQ19TbGF2ZV9UcmFuc21pdF9ETUEoRk1QSTJDX0hhbmRsZVR5cGVEZWYgKmhmbXBpMmMsIHVpbnQ4X3QgKnBEYXRhLCB1aW50MTZfdCBTaXplKTsKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9GTVBJMkNfU2xhdmVfUmVjZWl2ZV9ETUEoRk1QSTJDX0hhbmRsZVR5cGVEZWYgKmhmbXBpMmMsIHVpbnQ4X3QgKnBEYXRhLCB1aW50MTZfdCBTaXplKTsKLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9GTVBJMkNfTWVtX1dyaXRlX0RNQShGTVBJMkNfSGFuZGxlVHlwZURlZiAqaGZtcGkyYywgdWludDE2X3QgRGV2QWRkcmVzcywgdWludDE2X3QgTWVtQWRkcmVzcywgdWludDE2X3QgTWVtQWRkU2l6ZSwgdWludDhfdCAqcERhdGEsIHVpbnQxNl90IFNpemUpOwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0ZNUEkyQ19NZW1fUmVhZF9ETUEoRk1QSTJDX0hhbmRsZVR5cGVEZWYgKmhmbXBpMmMsIHVpbnQxNl90IERldkFkZHJlc3MsIHVpbnQxNl90IE1lbUFkZHJlc3MsIHVpbnQxNl90IE1lbUFkZFNpemUsIHVpbnQ4X3QgKnBEYXRhLCB1aW50MTZfdCBTaXplKTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9GTVBJMkNfTWVtX1dyaXRlX0RNQShGTVBJMkNfSGFuZGxlVHlwZURlZiAqaGZtcGkyYywgdWludDE2X3QgRGV2QWRkcmVzcywgdWludDE2X3QgTWVtQWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBNZW1BZGRTaXplLCB1aW50OF90ICpwRGF0YSwgdWludDE2X3QgU2l6ZSk7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfRk1QSTJDX01lbV9SZWFkX0RNQShGTVBJMkNfSGFuZGxlVHlwZURlZiAqaGZtcGkyYywgdWludDE2X3QgRGV2QWRkcmVzcywgdWludDE2X3QgTWVtQWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IE1lbUFkZFNpemUsIHVpbnQ4X3QgKnBEYXRhLCB1aW50MTZfdCBTaXplKTsKIAotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0ZNUEkyQ19NYXN0ZXJfU2VxX1RyYW5zbWl0X0RNQShGTVBJMkNfSGFuZGxlVHlwZURlZiAqaGZtcGkyYywgdWludDE2X3QgRGV2QWRkcmVzcywgdWludDhfdCAqcERhdGEsIHVpbnQxNl90IFNpemUsIHVpbnQzMl90IFhmZXJPcHRpb25zKTsKLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9GTVBJMkNfTWFzdGVyX1NlcV9SZWNlaXZlX0RNQShGTVBJMkNfSGFuZGxlVHlwZURlZiAqaGZtcGkyYywgdWludDE2X3QgRGV2QWRkcmVzcywgdWludDhfdCAqcERhdGEsIHVpbnQxNl90IFNpemUsIHVpbnQzMl90IFhmZXJPcHRpb25zKTsKLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9GTVBJMkNfU2xhdmVfU2VxX1RyYW5zbWl0X0RNQShGTVBJMkNfSGFuZGxlVHlwZURlZiAqaGZtcGkyYywgdWludDhfdCAqcERhdGEsIHVpbnQxNl90IFNpemUsIHVpbnQzMl90IFhmZXJPcHRpb25zKTsKLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9GTVBJMkNfU2xhdmVfU2VxX1JlY2VpdmVfRE1BKEZNUEkyQ19IYW5kbGVUeXBlRGVmICpoZm1waTJjLCB1aW50OF90ICpwRGF0YSwgdWludDE2X3QgU2l6ZSwgdWludDMyX3QgWGZlck9wdGlvbnMpOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0ZNUEkyQ19NYXN0ZXJfU2VxX1RyYW5zbWl0X0RNQShGTVBJMkNfSGFuZGxlVHlwZURlZiAqaGZtcGkyYywgdWludDE2X3QgRGV2QWRkcmVzcywgdWludDhfdCAqcERhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IFNpemUsIHVpbnQzMl90IFhmZXJPcHRpb25zKTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9GTVBJMkNfTWFzdGVyX1NlcV9SZWNlaXZlX0RNQShGTVBJMkNfSGFuZGxlVHlwZURlZiAqaGZtcGkyYywgdWludDE2X3QgRGV2QWRkcmVzcywgdWludDhfdCAqcERhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgU2l6ZSwgdWludDMyX3QgWGZlck9wdGlvbnMpOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0ZNUEkyQ19TbGF2ZV9TZXFfVHJhbnNtaXRfRE1BKEZNUEkyQ19IYW5kbGVUeXBlRGVmICpoZm1waTJjLCB1aW50OF90ICpwRGF0YSwgdWludDE2X3QgU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBYZmVyT3B0aW9ucyk7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfRk1QSTJDX1NsYXZlX1NlcV9SZWNlaXZlX0RNQShGTVBJMkNfSGFuZGxlVHlwZURlZiAqaGZtcGkyYywgdWludDhfdCAqcERhdGEsIHVpbnQxNl90IFNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBYZmVyT3B0aW9ucyk7CiAvKioKICAgKiBAfQogICAqLwogCiAvKiogQGFkZHRvZ3JvdXAgRk1QSTJDX0lSUV9IYW5kbGVyX2FuZF9DYWxsYmFja3MgSVJRIEhhbmRsZXIgYW5kIENhbGxiYWNrcwotICogQHsKLSAqLworICAqIEB7CisgICovCiAvKioqKioqKiBGTVBJMkMgSVJRSGFuZGxlciBhbmQgQ2FsbGJhY2tzIHVzZWQgaW4gbm9uIGJsb2NraW5nIG1vZGVzIChJbnRlcnJ1cHQgYW5kIERNQSkgKi8KIHZvaWQgSEFMX0ZNUEkyQ19FVl9JUlFIYW5kbGVyKEZNUEkyQ19IYW5kbGVUeXBlRGVmICpoZm1waTJjKTsKIHZvaWQgSEFMX0ZNUEkyQ19FUl9JUlFIYW5kbGVyKEZNUEkyQ19IYW5kbGVUeXBlRGVmICpoZm1waTJjKTsKQEAgLTczMyw3ICs3NTcsOCBAQAogI2RlZmluZSBJU19GTVBJMkNfVFJBTlNGRVJfT1RIRVJfT1BUSU9OU19SRVFVRVNUKFJFUVVFU1QpICgoKFJFUVVFU1QpID09IEZNUEkyQ19PVEhFUl9GUkFNRSkgICAgIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChSRVFVRVNUKSA9PSBGTVBJMkNfT1RIRVJfQU5EX0xBU1RfRlJBTUUpKQogCi0jZGVmaW5lIEZNUEkyQ19SRVNFVF9DUjIoX19IQU5ETEVfXykgICAgICAgICAgICAgICAgICgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5DUjIgJj0gKHVpbnQzMl90KX4oKHVpbnQzMl90KShGTVBJMkNfQ1IyX1NBREQgfCBGTVBJMkNfQ1IyX0hFQUQxMFIgfCBGTVBJMkNfQ1IyX05CWVRFUyB8IEZNUEkyQ19DUjJfUkVMT0FEIHwgRk1QSTJDX0NSMl9SRF9XUk4pKSkKKyNkZWZpbmUgRk1QSTJDX1JFU0VUX0NSMihfX0hBTkRMRV9fKSAgICAgICAgICAgICAgICAgKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNSMiAmPSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDMyX3QpfigodWludDMyX3QpKEZNUEkyQ19DUjJfU0FERCB8IEZNUEkyQ19DUjJfSEVBRDEwUiB8IEZNUEkyQ19DUjJfTkJZVEVTIHwgRk1QSTJDX0NSMl9SRUxPQUQgfCBGTVBJMkNfQ1IyX1JEX1dSTikpKQogCiAjZGVmaW5lIEZNUEkyQ19HRVRfQUREUl9NQVRDSChfX0hBTkRMRV9fKSAgICAgICAgICAgICgodWludDE2X3QpKCgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5JU1IgJiBGTVBJMkNfSVNSX0FERENPREUpID4+IDE2VSkpCiAjZGVmaW5lIEZNUEkyQ19HRVRfRElSKF9fSEFORExFX18pICAgICAgICAgICAgICAgICAgICgodWludDhfdCkoKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPklTUiAmIEZNUEkyQ19JU1JfRElSKSA+PiAxNlUpKQpAQCAtNzQ0LDEzICs3NjksMTUgQEAKICNkZWZpbmUgSVNfRk1QSTJDX09XTl9BRERSRVNTMShBRERSRVNTMSkgICAgICAgICAgICAgKChBRERSRVNTMSkgPD0gMHgwMDAwMDNGRlUpCiAjZGVmaW5lIElTX0ZNUEkyQ19PV05fQUREUkVTUzIoQUREUkVTUzIpICAgICAgICAgICAgICgoQUREUkVTUzIpIDw9ICh1aW50MTZfdCkweDAwRkZVKQogCi0jZGVmaW5lIEZNUEkyQ19NRU1fQUREX01TQihfX0FERFJFU1NfXykgICAgICAgICAgICAgICgodWludDhfdCkoKHVpbnQxNl90KSgoKHVpbnQxNl90KSgoX19BRERSRVNTX18pICYgKHVpbnQxNl90KSgweEZGMDBVKSkpID4+IDhVKSkpCisjZGVmaW5lIEZNUEkyQ19NRU1fQUREX01TQihfX0FERFJFU1NfXykgICAgICAgICAgICAgICgodWludDhfdCkoKHVpbnQxNl90KSgoKHVpbnQxNl90KSgoX19BRERSRVNTX18pICYgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50MTZfdCkoMHhGRjAwVSkpKSA+PiA4VSkpKQogI2RlZmluZSBGTVBJMkNfTUVNX0FERF9MU0IoX19BRERSRVNTX18pICAgICAgICAgICAgICAoKHVpbnQ4X3QpKCh1aW50MTZfdCkoKF9fQUREUkVTU19fKSAmICh1aW50MTZfdCkoMHgwMEZGVSkpKSkKIAogI2RlZmluZSBGTVBJMkNfR0VORVJBVEVfU1RBUlQoX19BRERNT0RFX18sX19BRERSRVNTX18pICgoKF9fQURETU9ERV9fKSA9PSBGTVBJMkNfQUREUkVTU0lOR01PREVfN0JJVCkgPyAodWludDMyX3QpKCgoKHVpbnQzMl90KShfX0FERFJFU1NfXykgJiAoRk1QSTJDX0NSMl9TQUREKSkgfCAoRk1QSTJDX0NSMl9TVEFSVCkgfCAoRk1QSTJDX0NSMl9BVVRPRU5EKSkgJiAofkZNUEkyQ19DUjJfUkRfV1JOKSkgOiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90KSgoKCh1aW50MzJfdCkoX19BRERSRVNTX18pICYgKEZNUEkyQ19DUjJfU0FERCkpIHwgKEZNUEkyQ19DUjJfQUREMTApIHwgKEZNUEkyQ19DUjJfU1RBUlQpKSAmICh+Rk1QSTJDX0NSMl9SRF9XUk4pKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90KSgoKCh1aW50MzJfdCkoX19BRERSRVNTX18pICYgKEZNUEkyQ19DUjJfU0FERCkpIHwgKEZNUEkyQ19DUjJfQUREMTApIHwgKEZNUEkyQ19DUjJfU1RBUlQpKSAmICh+Rk1QSTJDX0NSMl9SRF9XUk4pKSkKIAotI2RlZmluZSBGTVBJMkNfQ0hFQ0tfRkxBRyhfX0lTUl9fLCBfX0ZMQUdfXykgICAgICAgICAoKCgoX19JU1JfXykgJiAoKF9fRkxBR19fKSAmIEZNUEkyQ19GTEFHX01BU0spKSA9PSAoKF9fRkxBR19fKSAmIEZNUEkyQ19GTEFHX01BU0spKSA/IFNFVCA6IFJFU0VUKQorI2RlZmluZSBGTVBJMkNfQ0hFQ0tfRkxBRyhfX0lTUl9fLCBfX0ZMQUdfXykgICAgICAgICAoKCgoX19JU1JfXykgJiAgKChfX0ZMQUdfXykgJiBGTVBJMkNfRkxBR19NQVNLKSkgPT0gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19GTEFHX18pICYgRk1QSTJDX0ZMQUdfTUFTSykpID8gU0VUIDogUkVTRVQpCiAjZGVmaW5lIEZNUEkyQ19DSEVDS19JVF9TT1VSQ0UoX19DUjFfXywgX19JVF9fKSAgICAgICgoKChfX0NSMV9fKSAmIChfX0lUX18pKSA9PSAoX19JVF9fKSkgPyBTRVQgOiBSRVNFVCkKIC8qKgogICAqIEB9CmRpZmYgLS1naXQgYS9JbmMvc3RtMzJmNHh4X2hhbF9mbXBpMmNfZXguaCBiL0luYy9zdG0zMmY0eHhfaGFsX2ZtcGkyY19leC5oCmluZGV4IGY2ZDA0YTYuLjMyNmIwNTggMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmY0eHhfaGFsX2ZtcGkyY19leC5oCisrKyBiL0luYy9zdG0zMmY0eHhfaGFsX2ZtcGkyY19leC5oCkBAIC0zOSw3ICszOSw2IEBACiAKIC8qIEV4cG9ydGVkIHR5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiBFeHBvcnRlZCBjb25zdGFudHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCiAvKiogQGRlZmdyb3VwIEZNUEkyQ0V4X0V4cG9ydGVkX0NvbnN0YW50cyBGTVBJMkMgRXh0ZW5kZWQgRXhwb3J0ZWQgQ29uc3RhbnRzCiAgICogQHsKICAgKi8KQEAgLTY3LDIyICs2Niw0OSBAQAogICAqLwogCiAvKiBFeHBvcnRlZCBtYWNybyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyogRXhwb3J0ZWQgZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qKiBAZGVmZ3JvdXAgRk1QSTJDRXhfRXhwb3J0ZWRfTWFjcm9zIEZNUEkyQyBFeHRlbmRlZCBFeHBvcnRlZCBNYWNyb3MKKyAgKiBAeworICAqLwogCisvKioKKyAgKiBAfQorICAqLworCisvKiBFeHBvcnRlZCBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyoqIEBhZGR0b2dyb3VwIEZNUEkyQ0V4X0V4cG9ydGVkX0Z1bmN0aW9ucyBGTVBJMkMgRXh0ZW5kZWQgRXhwb3J0ZWQgRnVuY3Rpb25zCiAgICogQHsKICAgKi8KIAotLyoqIEBhZGR0b2dyb3VwIEZNUEkyQ0V4X0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDEgRXh0ZW5kZWQgZmVhdHVyZXMgZnVuY3Rpb25zCi0gICogQGJyaWVmICAgIEV4dGVuZGVkIGZlYXR1cmVzIGZ1bmN0aW9ucworLyoqIEBhZGR0b2dyb3VwIEZNUEkyQ0V4X0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDEgRk1QSTJDIEV4dGVuZGVkIEZpbHRlciBNb2RlIEZ1bmN0aW9ucwogICAqIEB7CiAgICovCi0KIC8qIFBlcmlwaGVyYWwgQ29udHJvbCBmdW5jdGlvbnMgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9GTVBJMkNFeF9Db25maWdBbmFsb2dGaWx0ZXIoRk1QSTJDX0hhbmRsZVR5cGVEZWYgKmhmbXBpMmMsIHVpbnQzMl90IEFuYWxvZ0ZpbHRlcik7CiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfRk1QSTJDRXhfQ29uZmlnRGlnaXRhbEZpbHRlcihGTVBJMkNfSGFuZGxlVHlwZURlZiAqaGZtcGkyYywgdWludDMyX3QgRGlnaXRhbEZpbHRlcik7CisvKioKKyAgKiBAfQorICAqLworCisvKiogQGFkZHRvZ3JvdXAgRk1QSTJDRXhfRXhwb3J0ZWRfRnVuY3Rpb25zX0dyb3VwMiBGTVBJMkMgRXh0ZW5kZWQgV2FrZVVwIE1vZGUgRnVuY3Rpb25zCisgICogQHsKKyAgKi8KKy8qKgorICAqIEB9CisgICovCisKKy8qKiBAYWRkdG9ncm91cCBGTVBJMkNFeF9FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXAzIEZNUEkyQyBFeHRlbmRlZCBGYXN0TW9kZVBsdXMgRnVuY3Rpb25zCisgICogQHsKKyAgKi8KIHZvaWQgSEFMX0ZNUEkyQ0V4X0VuYWJsZUZhc3RNb2RlUGx1cyh1aW50MzJfdCBDb25maWdGYXN0TW9kZVBsdXMpOwogdm9pZCBIQUxfRk1QSTJDRXhfRGlzYWJsZUZhc3RNb2RlUGx1cyh1aW50MzJfdCBDb25maWdGYXN0TW9kZVBsdXMpOworLyoqCisgICogQH0KKyAgKi8KKworCisvKioKKyAgKiBAfQorICAqLwogCiAvKiBQcml2YXRlIGNvbnN0YW50cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyoqIEBkZWZncm91cCBGTVBJMkNFeF9Qcml2YXRlX0NvbnN0YW50cyBGTVBJMkMgRXh0ZW5kZWQgUHJpdmF0ZSBDb25zdGFudHMKQEAgLTk4LDE1ICsxMjQsMTIgQEAKICAgKiBAewogICAqLwogI2RlZmluZSBJU19GTVBJMkNfQU5BTE9HX0ZJTFRFUihGSUxURVIpICAgICgoKEZJTFRFUikgPT0gRk1QSTJDX0FOQUxPR0ZJTFRFUl9FTkFCTEUpIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRklMVEVSKSA9PSBGTVBJMkNfQU5BTE9HRklMVEVSX0RJU0FCTEUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEZJTFRFUikgPT0gRk1QSTJDX0FOQUxPR0ZJTFRFUl9ESVNBQkxFKSkKIAogI2RlZmluZSBJU19GTVBJMkNfRElHSVRBTF9GSUxURVIoRklMVEVSKSAgICgoRklMVEVSKSA8PSAweDAwMDAwMDBGVSkKIAogI2RlZmluZSBJU19GTVBJMkNfRkFTVE1PREVQTFVTKF9fQ09ORklHX18pICgoKChfX0NPTkZJR19fKSAmIChGTVBJMkNfRkFTVE1PREVQTFVTX1NDTCkpID09IEZNUEkyQ19GQVNUTU9ERVBMVVNfU0NMKSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKF9fQ09ORklHX18pICYgKEZNUEkyQ19GQVNUTU9ERVBMVVNfU0RBKSkgPT0gRk1QSTJDX0ZBU1RNT0RFUExVU19TREEpKQotCi0KLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChfX0NPTkZJR19fKSAmIChGTVBJMkNfRkFTVE1PREVQTFVTX1NEQSkpID09IEZNUEkyQ19GQVNUTU9ERVBMVVNfU0RBKSkKIC8qKgogICAqIEB9CiAgICovCkBAIC0xMjgsMTQgKzE1MSw2IEBACiAgICogQH0KICAgKi8KIAotLyoqCi0gICogQH0KLSAgKi8KLQotLyoqCi0gICogQH0KLSAgKi8KLQogI2VuZGlmIC8qIEZNUEkyQ19DUjFfUEUgKi8KICNpZmRlZiBfX2NwbHVzcGx1cwogfQpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZjR4eF9oYWxfZm1wc21idXMuaCBiL0luYy9zdG0zMmY0eHhfaGFsX2ZtcHNtYnVzLmgKaW5kZXggNTQzMzRhYy4uYzBkY2UyOCAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZjR4eF9oYWxfZm1wc21idXMuaAorKysgYi9JbmMvc3RtMzJmNHh4X2hhbF9mbXBzbWJ1cy5oCkBAIC0yOCw2ICsyOCw3IEBACiAjaWYgZGVmaW5lZChGTVBJMkNfQ1IxX1BFKQogLyogSW5jbHVkZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICNpbmNsdWRlICJzdG0zMmY0eHhfaGFsX2RlZi5oIgorI2luY2x1ZGUgInN0bTMyZjR4eF9oYWxfZm1wc21idXNfZXguaCIKIAogLyoqIEBhZGR0b2dyb3VwIFNUTTMyRjR4eF9IQUxfRHJpdmVyCiAgICogQHsKQEAgLTY2LDcgKzY3LDcgQEAKICAgdWludDMyX3QgT3duQWRkcmVzczI7ICAgICAgICAgICAgLyohPCBTcGVjaWZpZXMgdGhlIHNlY29uZCBkZXZpY2Ugb3duIGFkZHJlc3MgaWYgZHVhbCBhZGRyZXNzaW5nIG1vZGUgaXMgc2VsZWN0ZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSA3LWJpdCBhZGRyZXNzLiAqLwogCi0gIHVpbnQzMl90IE93bkFkZHJlc3MyTWFza3M7ICAgICAgIC8qITwgU3BlY2lmaWVzIHRoZSBhY2tub2xlZGdlIG1hc2sgYWRkcmVzcyBzZWNvbmQgZGV2aWNlIG93biBhZGRyZXNzIGlmIGR1YWwgYWRkcmVzc2luZyBtb2RlIGlzIHNlbGVjdGVkCisgIHVpbnQzMl90IE93bkFkZHJlc3MyTWFza3M7ICAgICAgIC8qITwgU3BlY2lmaWVzIHRoZSBhY2tub3dsZWRnZSBtYXNrIGFkZHJlc3Mgc2Vjb25kIGRldmljZSBvd24gYWRkcmVzcyBpZiBkdWFsIGFkZHJlc3NpbmcgbW9kZSBpcyBzZWxlY3RlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgRk1QU01CVVNfb3duX2FkZHJlc3MyX21hc2tzLiAqLwogCiAgIHVpbnQzMl90IEdlbmVyYWxDYWxsTW9kZTsgICAgICAgIC8qITwgU3BlY2lmaWVzIGlmIGdlbmVyYWwgY2FsbCBtb2RlIGlzIHNlbGVjdGVkLgpAQCAtMzU5LDcgKzM2MCw4IEBACiAjZGVmaW5lIEZNUFNNQlVTX0lUX0FERFJJICAgICAgICAgICAgICAgICAgICAgICAgICBGTVBJMkNfQ1IxX0FERFJJRQogI2RlZmluZSBGTVBTTUJVU19JVF9SWEkgICAgICAgICAgICAgICAgICAgICAgICAgICAgRk1QSTJDX0NSMV9SWElFCiAjZGVmaW5lIEZNUFNNQlVTX0lUX1RYSSAgICAgICAgICAgICAgICAgICAgICAgICAgICBGTVBJMkNfQ1IxX1RYSUUKLSNkZWZpbmUgRk1QU01CVVNfSVRfVFggICAgICAgICAgICAgICAgICAgICAgICAgICAgIChGTVBTTUJVU19JVF9FUlJJIHwgRk1QU01CVVNfSVRfVENJIHwgRk1QU01CVVNfSVRfU1RPUEkgfCBGTVBTTUJVU19JVF9OQUNLSSB8IEZNUFNNQlVTX0lUX1RYSSkKKyNkZWZpbmUgRk1QU01CVVNfSVRfVFggICAgICAgICAgICAgICAgICAgICAgICAgICAgIChGTVBTTUJVU19JVF9FUlJJIHwgRk1QU01CVVNfSVRfVENJIHwgRk1QU01CVVNfSVRfU1RPUEkgfCBGTVBTTUJVU19JVF9OQUNLSSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGTVBTTUJVU19JVF9UWEkpCiAjZGVmaW5lIEZNUFNNQlVTX0lUX1JYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRk1QU01CVVNfSVRfRVJSSSB8IEZNUFNNQlVTX0lUX1RDSSB8IEZNUFNNQlVTX0lUX05BQ0tJIHwgRk1QU01CVVNfSVRfUlhJKQogI2RlZmluZSBGTVBTTUJVU19JVF9BTEVSVCAgICAgICAgICAgICAgICAgICAgICAgICAgKEZNUFNNQlVTX0lUX0VSUkkpCiAjZGVmaW5lIEZNUFNNQlVTX0lUX0FERFIgICAgICAgICAgICAgICAgICAgICAgICAgICAoRk1QU01CVVNfSVRfQUREUkkgfCBGTVBTTUJVU19JVF9TVE9QSSB8IEZNUFNNQlVTX0lUX05BQ0tJKQpAQCAtNDA5LDEwICs0MTEsMTAgQEAKICAgKi8KICNpZiAoVVNFX0hBTF9GTVBTTUJVU19SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkKICNkZWZpbmUgX19IQUxfRk1QU01CVVNfUkVTRVRfSEFORExFX1NUQVRFKF9fSEFORExFX18pICAgICAgICAgICBkb3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5TdGF0ZSA9IEhBTF9GTVBTTUJVU19TVEFURV9SRVNFVDsgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+TXNwSW5pdENhbGxiYWNrID0gTlVMTDsgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5Nc3BEZUluaXRDYWxsYmFjayA9IE5VTEw7ICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlKDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+U3RhdGUgPSBIQUxfRk1QU01CVVNfU1RBVEVfUkVTRVQ7ICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5Nc3BJbml0Q2FsbGJhY2sgPSBOVUxMOyAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5Nc3BEZUluaXRDYWxsYmFjayA9IE5VTEw7ICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUoMCkKICNlbHNlCiAjZGVmaW5lIF9fSEFMX0ZNUFNNQlVTX1JFU0VUX0hBTkRMRV9TVEFURShfX0hBTkRMRV9fKSAgICAgICAgICgoX19IQU5ETEVfXyktPlN0YXRlID0gSEFMX0ZNUFNNQlVTX1NUQVRFX1JFU0VUKQogI2VuZGlmCkBAIC00NjMsNyArNDY1LDggQEAKICAgKgogICAqIEByZXR2YWwgVGhlIG5ldyBzdGF0ZSBvZiBfX0lUX18gKFNFVCBvciBSRVNFVCkuCiAgICovCi0jZGVmaW5lIF9fSEFMX0ZNUFNNQlVTX0dFVF9JVF9TT1VSQ0UoX19IQU5ETEVfXywgX19JTlRFUlJVUFRfXykgKCgoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+Q1IxICYgKF9fSU5URVJSVVBUX18pKSA9PSAoX19JTlRFUlJVUFRfXykpID8gU0VUIDogUkVTRVQpCisjZGVmaW5lIF9fSEFMX0ZNUFNNQlVTX0dFVF9JVF9TT1VSQ0UoX19IQU5ETEVfXywgX19JTlRFUlJVUFRfXykgXAorICAoKCgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5DUjEgJiAoX19JTlRFUlJVUFRfXykpID09IChfX0lOVEVSUlVQVF9fKSkgPyBTRVQgOiBSRVNFVCkKIAogLyoqIEBicmllZiAgQ2hlY2sgd2hldGhlciB0aGUgc3BlY2lmaWVkIEZNUFNNQlVTIGZsYWcgaXMgc2V0IG9yIG5vdC4KICAgKiBAcGFyYW0gIF9fSEFORExFX18gc3BlY2lmaWVzIHRoZSBGTVBTTUJVUyBIYW5kbGUuCkBAIC00ODksNyArNDkyLDggQEAKICAgKiBAcmV0dmFsIFRoZSBuZXcgc3RhdGUgb2YgX19GTEFHX18gKFNFVCBvciBSRVNFVCkuCiAgICovCiAjZGVmaW5lIEZNUFNNQlVTX0ZMQUdfTUFTSyAgKDB4MDAwMUZGRkZVKQotI2RlZmluZSBfX0hBTF9GTVBTTUJVU19HRVRfRkxBRyhfX0hBTkRMRV9fLCBfX0ZMQUdfXykgKCgoKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPklTUikgJiAoKF9fRkxBR19fKSAmIEZNUFNNQlVTX0ZMQUdfTUFTSykpID09ICgoX19GTEFHX18pICYgRk1QU01CVVNfRkxBR19NQVNLKSkgPyBTRVQgOiBSRVNFVCkKKyNkZWZpbmUgX19IQUxfRk1QU01CVVNfR0VUX0ZMQUcoX19IQU5ETEVfXywgX19GTEFHX18pIFwKKyAgKCgoKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPklTUikgJiAoKF9fRkxBR19fKSAmIEZNUFNNQlVTX0ZMQUdfTUFTSykpID09ICgoX19GTEFHX18pICYgRk1QU01CVVNfRkxBR19NQVNLKSkgPyBTRVQgOiBSRVNFVCkKIAogLyoqIEBicmllZiAgQ2xlYXIgdGhlIEZNUFNNQlVTIHBlbmRpbmcgZmxhZ3Mgd2hpY2ggYXJlIGNsZWFyZWQgYnkgd3JpdGluZyAxIGluIGEgc3BlY2lmaWMgYml0LgogICAqIEBwYXJhbSAgX19IQU5ETEVfXyBzcGVjaWZpZXMgdGhlIEZNUFNNQlVTIEhhbmRsZS4KQEAgLTU0MCwxNSArNTQ0LDE1IEBACiAgICovCiAKICNkZWZpbmUgSVNfRk1QU01CVVNfQU5BTE9HX0ZJTFRFUihGSUxURVIpICAgICAgICAgICAgICAgICAgKCgoRklMVEVSKSA9PSBGTVBTTUJVU19BTkFMT0dGSUxURVJfRU5BQkxFKSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChGSUxURVIpID09IEZNUFNNQlVTX0FOQUxPR0ZJTFRFUl9ESVNBQkxFKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRklMVEVSKSA9PSBGTVBTTUJVU19BTkFMT0dGSUxURVJfRElTQUJMRSkpCiAKICNkZWZpbmUgSVNfRk1QU01CVVNfRElHSVRBTF9GSUxURVIoRklMVEVSKSAgICAgICAgICAgICAgICAgKChGSUxURVIpIDw9IDB4MDAwMDAwMEZVKQogCiAjZGVmaW5lIElTX0ZNUFNNQlVTX0FERFJFU1NJTkdfTU9ERShNT0RFKSAgICAgICAgICAgICAgICAgICgoKE1PREUpID09IEZNUFNNQlVTX0FERFJFU1NJTkdNT0RFXzdCSVQpICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChNT0RFKSA9PSBGTVBTTUJVU19BRERSRVNTSU5HTU9ERV8xMEJJVCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKE1PREUpID09IEZNUFNNQlVTX0FERFJFU1NJTkdNT0RFXzEwQklUKSkKIAogI2RlZmluZSBJU19GTVBTTUJVU19EVUFMX0FERFJFU1MoQUREUkVTUykgICAgICAgICAgICAgICAgICAoKChBRERSRVNTKSA9PSBGTVBTTUJVU19EVUFMQUREUkVTU19ESVNBQkxFKSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChBRERSRVNTKSA9PSBGTVBTTUJVU19EVUFMQUREUkVTU19FTkFCTEUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChBRERSRVNTKSA9PSBGTVBTTUJVU19EVUFMQUREUkVTU19FTkFCTEUpKQogCiAjZGVmaW5lIElTX0ZNUFNNQlVTX09XTl9BRERSRVNTMl9NQVNLKE1BU0spICAgICAgICAgICAgICAgICgoKE1BU0spID09IEZNUFNNQlVTX09BMl9OT01BU0spICAgIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTUFTSykgPT0gRk1QU01CVVNfT0EyX01BU0swMSkgICAgfHwgXApAQCAtNTY2LDQ3ICs1NzAsNDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoU1RSRVRDSCkgPT0gRk1QU01CVVNfTk9TVFJFVENIX0VOQUJMRSkpCiAKICNkZWZpbmUgSVNfRk1QU01CVVNfUEVDKFBFQykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoUEVDKSA9PSBGTVBTTUJVU19QRUNfRElTQUJMRSkgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUEVDKSA9PSBGTVBTTUJVU19QRUNfRU5BQkxFKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUEVDKSA9PSBGTVBTTUJVU19QRUNfRU5BQkxFKSkKIAotI2RlZmluZSBJU19GTVBTTUJVU19QRVJJUEhFUkFMX01PREUoTU9ERSkgICAgICAgICAgICAgICAgICAoKChNT0RFKSA9PSBGTVBTTUJVU19QRVJJUEhFUkFMX01PREVfRk1QU01CVVNfSE9TVCkgICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTU9ERSkgPT0gRk1QU01CVVNfUEVSSVBIRVJBTF9NT0RFX0ZNUFNNQlVTX1NMQVZFKSAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTU9ERSkgPT0gRk1QU01CVVNfUEVSSVBIRVJBTF9NT0RFX0ZNUFNNQlVTX1NMQVZFX0FSUCkpCisjZGVmaW5lIElTX0ZNUFNNQlVTX1BFUklQSEVSQUxfTU9ERShNT0RFKSAgICAgICAgICAgICAgICAgICgoKE1PREUpID09IEZNUFNNQlVTX1BFUklQSEVSQUxfTU9ERV9GTVBTTUJVU19IT1NUKSAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTU9ERSkgPT0gRk1QU01CVVNfUEVSSVBIRVJBTF9NT0RFX0ZNUFNNQlVTX1NMQVZFKSAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChNT0RFKSA9PSBGTVBTTUJVU19QRVJJUEhFUkFMX01PREVfRk1QU01CVVNfU0xBVkVfQVJQKSkKIAotI2RlZmluZSBJU19GTVBTTUJVU19UUkFOU0ZFUl9NT0RFKE1PREUpICAgICAgICAgICAgICAgICAgICAoKChNT0RFKSA9PSBGTVBTTUJVU19SRUxPQURfTU9ERSkgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChNT0RFKSA9PSBGTVBTTUJVU19BVVRPRU5EX01PREUpICAgICAgICAgICAgICAgICAgICAgICAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKE1PREUpID09IEZNUFNNQlVTX1NPRlRFTkRfTU9ERSkgICAgICAgICAgICAgICAgICAgICAgICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTU9ERSkgPT0gRk1QU01CVVNfU0VORFBFQ19NT0RFKSAgICAgICAgICAgICAgICAgICAgICAgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChNT0RFKSA9PSAoRk1QU01CVVNfUkVMT0FEX01PREUgfCBGTVBTTUJVU19TRU5EUEVDX01PREUpKSAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKE1PREUpID09IChGTVBTTUJVU19BVVRPRU5EX01PREUgfCBGTVBTTUJVU19TRU5EUEVDX01PREUpKSAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTU9ERSkgPT0gKEZNUFNNQlVTX0FVVE9FTkRfTU9ERSB8IEZNUFNNQlVTX1JFTE9BRF9NT0RFKSkgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChNT0RFKSA9PSAoRk1QU01CVVNfQVVUT0VORF9NT0RFIHwgRk1QU01CVVNfU0VORFBFQ19NT0RFIHwgRk1QU01CVVNfUkVMT0FEX01PREUgKSkpCisjZGVmaW5lIElTX0ZNUFNNQlVTX1RSQU5TRkVSX01PREUoTU9ERSkgICAgICAgICAgICAgICAgICAgICgoKE1PREUpID09IEZNUFNNQlVTX1JFTE9BRF9NT0RFKSAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChNT0RFKSA9PSBGTVBTTUJVU19BVVRPRU5EX01PREUpICAgICAgICAgICAgICAgICAgICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTU9ERSkgPT0gRk1QU01CVVNfU09GVEVORF9NT0RFKSAgICAgICAgICAgICAgICAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKE1PREUpID09IEZNUFNNQlVTX1NFTkRQRUNfTU9ERSkgICAgICAgICAgICAgICAgICAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChNT0RFKSA9PSAoRk1QU01CVVNfUkVMT0FEX01PREUgfCBGTVBTTUJVU19TRU5EUEVDX01PREUpKSAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTU9ERSkgPT0gKEZNUFNNQlVTX0FVVE9FTkRfTU9ERSB8IEZNUFNNQlVTX1NFTkRQRUNfTU9ERSkpICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKE1PREUpID09IChGTVBTTUJVU19BVVRPRU5EX01PREUgfCBGTVBTTUJVU19SRUxPQURfTU9ERSkpICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChNT0RFKSA9PSAoRk1QU01CVVNfQVVUT0VORF9NT0RFIHwgRk1QU01CVVNfU0VORFBFQ19NT0RFIHwgRk1QU01CVVNfUkVMT0FEX01PREUgKSkpCiAKIAogI2RlZmluZSBJU19GTVBTTUJVU19UUkFOU0ZFUl9SRVFVRVNUKFJFUVVFU1QpICAgICAgICAgICAgICAoKChSRVFVRVNUKSA9PSBGTVBTTUJVU19HRU5FUkFURV9TVE9QKSAgICAgICAgICAgICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUkVRVUVTVCkgPT0gRk1QU01CVVNfR0VORVJBVEVfU1RBUlRfUkVBRCkgICAgICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUkVRVUVTVCkgPT0gRk1QU01CVVNfR0VORVJBVEVfU1RBUlRfV1JJVEUpICAgICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUkVRVUVTVCkgPT0gRk1QU01CVVNfTk9fU1RBUlRTVE9QKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUkVRVUVTVCkgPT0gRk1QU01CVVNfR0VORVJBVEVfU1RBUlRfUkVBRCkgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChSRVFVRVNUKSA9PSBGTVBTTUJVU19HRU5FUkFURV9TVEFSVF9XUklURSkgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFJFUVVFU1QpID09IEZNUFNNQlVTX05PX1NUQVJUU1RPUCkpCiAKIAotI2RlZmluZSBJU19GTVBTTUJVU19UUkFOU0ZFUl9PUFRJT05TX1JFUVVFU1QoUkVRVUVTVCkgICAgICAoSVNfRk1QU01CVVNfVFJBTlNGRVJfT1RIRVJfT1BUSU9OU19SRVFVRVNUKFJFUVVFU1QpICAgICAgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChSRVFVRVNUKSA9PSBGTVBTTUJVU19GSVJTVF9GUkFNRSkgICAgICAgICAgICAgICAgICAgICAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFJFUVVFU1QpID09IEZNUFNNQlVTX05FWFRfRlJBTUUpICAgICAgICAgICAgICAgICAgICAgICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUkVRVUVTVCkgPT0gRk1QU01CVVNfRklSU1RfQU5EX0xBU1RfRlJBTUVfTk9fUEVDKSAgICAgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChSRVFVRVNUKSA9PSBGTVBTTUJVU19MQVNUX0ZSQU1FX05PX1BFQykgICAgICAgICAgICAgICAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFJFUVVFU1QpID09IEZNUFNNQlVTX0ZJUlNUX0ZSQU1FX1dJVEhfUEVDKSAgICAgICAgICAgICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUkVRVUVTVCkgPT0gRk1QU01CVVNfRklSU1RfQU5EX0xBU1RfRlJBTUVfV0lUSF9QRUMpICAgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChSRVFVRVNUKSA9PSBGTVBTTUJVU19MQVNUX0ZSQU1FX1dJVEhfUEVDKSkKKyNkZWZpbmUgSVNfRk1QU01CVVNfVFJBTlNGRVJfT1BUSU9OU19SRVFVRVNUKFJFUVVFU1QpICAgICAgKElTX0ZNUFNNQlVTX1RSQU5TRkVSX09USEVSX09QVElPTlNfUkVRVUVTVChSRVFVRVNUKSAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFJFUVVFU1QpID09IEZNUFNNQlVTX0ZJUlNUX0ZSQU1FKSAgICAgICAgICAgICAgICAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChSRVFVRVNUKSA9PSBGTVBTTUJVU19ORVhUX0ZSQU1FKSAgICAgICAgICAgICAgICAgICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUkVRVUVTVCkgPT0gRk1QU01CVVNfRklSU1RfQU5EX0xBU1RfRlJBTUVfTk9fUEVDKSAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFJFUVVFU1QpID09IEZNUFNNQlVTX0xBU1RfRlJBTUVfTk9fUEVDKSAgICAgICAgICAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChSRVFVRVNUKSA9PSBGTVBTTUJVU19GSVJTVF9GUkFNRV9XSVRIX1BFQykgICAgICAgICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUkVRVUVTVCkgPT0gRk1QU01CVVNfRklSU1RfQU5EX0xBU1RfRlJBTUVfV0lUSF9QRUMpICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFJFUVVFU1QpID09IEZNUFNNQlVTX0xBU1RfRlJBTUVfV0lUSF9QRUMpKQogCiAjZGVmaW5lIElTX0ZNUFNNQlVTX1RSQU5TRkVSX09USEVSX09QVElPTlNfUkVRVUVTVChSRVFVRVNUKSAoKChSRVFVRVNUKSA9PSBGTVBTTUJVU19PVEhFUl9GUkFNRV9OT19QRUMpICAgICAgICAgICAgICAgIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFJFUVVFU1QpID09IEZNUFNNQlVTX09USEVSX0FORF9MQVNUX0ZSQU1FX05PX1BFQykgICAgICAgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUkVRVUVTVCkgPT0gRk1QU01CVVNfT1RIRVJfRlJBTUVfV0lUSF9QRUMpICAgICAgICAgICAgICB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChSRVFVRVNUKSA9PSBGTVBTTUJVU19PVEhFUl9BTkRfTEFTVF9GUkFNRV9XSVRIX1BFQykpCiAKLSNkZWZpbmUgRk1QU01CVVNfUkVTRVRfQ1IxKF9fSEFORExFX18pICAgICAgICAgICAgICAgICAgICAgICAoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+Q1IxICY9ICh1aW50MzJfdCl+KCh1aW50MzJfdCkoRk1QSTJDX0NSMV9TTUJIRU4gfCBGTVBJMkNfQ1IxX1NNQkRFTiB8IEZNUEkyQ19DUjFfUEVDRU4pKSkKLSNkZWZpbmUgRk1QU01CVVNfUkVTRVRfQ1IyKF9fSEFORExFX18pICAgICAgICAgICAgICAgICAgICAgICAoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+Q1IyICY9ICh1aW50MzJfdCl+KCh1aW50MzJfdCkoRk1QSTJDX0NSMl9TQUREIHwgRk1QSTJDX0NSMl9IRUFEMTBSIHwgRk1QSTJDX0NSMl9OQllURVMgfCBGTVBJMkNfQ1IyX1JFTE9BRCB8IEZNUEkyQ19DUjJfUkRfV1JOKSkpCisjZGVmaW5lIEZNUFNNQlVTX1JFU0VUX0NSMShfX0hBTkRMRV9fKSAgICAgICAgICAgICAgICAgICAgICAgKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNSMSAmPSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50MzJfdCl+KCh1aW50MzJfdCkoRk1QSTJDX0NSMV9TTUJIRU4gfCBGTVBJMkNfQ1IxX1NNQkRFTiB8IEZNUEkyQ19DUjFfUEVDRU4pKSkKKyNkZWZpbmUgRk1QU01CVVNfUkVTRVRfQ1IyKF9fSEFORExFX18pICAgICAgICAgICAgICAgICAgICAgICAoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+Q1IyICY9IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90KX4oKHVpbnQzMl90KShGTVBJMkNfQ1IyX1NBREQgfCBGTVBJMkNfQ1IyX0hFQUQxMFIgfCBGTVBJMkNfQ1IyX05CWVRFUyB8IEZNUEkyQ19DUjJfUkVMT0FEIHwgRk1QSTJDX0NSMl9SRF9XUk4pKSkKIAogI2RlZmluZSBGTVBTTUJVU19HRU5FUkFURV9TVEFSVChfX0FERE1PREVfXyxfX0FERFJFU1NfXykgICAgICgoKF9fQURETU9ERV9fKSA9PSBGTVBTTUJVU19BRERSRVNTSU5HTU9ERV83QklUKSA/ICh1aW50MzJfdCkoKCgodWludDMyX3QpKF9fQUREUkVTU19fKSAmIChGTVBJMkNfQ1IyX1NBREQpKSB8IChGTVBJMkNfQ1IyX1NUQVJUKSB8IChGTVBJMkNfQ1IyX0FVVE9FTkQpKSAmICh+Rk1QSTJDX0NSMl9SRF9XUk4pKSA6IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50MzJfdCkoKCgodWludDMyX3QpKF9fQUREUkVTU19fKSAmIChGTVBJMkNfQ1IyX1NBREQpKSB8IChGTVBJMkNfQ1IyX0FERDEwKSB8IChGTVBJMkNfQ1IyX1NUQVJUKSkgJiAofkZNUEkyQ19DUjJfUkRfV1JOKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50MzJfdCkoKCgodWludDMyX3QpKF9fQUREUkVTU19fKSAmIChGTVBJMkNfQ1IyX1NBREQpKSB8IChGTVBJMkNfQ1IyX0FERDEwKSB8IChGTVBJMkNfQ1IyX1NUQVJUKSkgJiAofkZNUEkyQ19DUjJfUkRfV1JOKSkpCiAKICNkZWZpbmUgRk1QU01CVVNfR0VUX0FERFJfTUFUQ0goX19IQU5ETEVfXykgICAgICAgICAgICAgICAgICAoKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPklTUiAmIEZNUEkyQ19JU1JfQUREQ09ERSkgPj4gMTdVKQogI2RlZmluZSBGTVBTTUJVU19HRVRfRElSKF9fSEFORExFX18pICAgICAgICAgICAgICAgICAgICAgICAgICgoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+SVNSICYgRk1QSTJDX0lTUl9ESVIpID4+IDE2VSkKQEAgLTYxNCw3ICs2MjAsOCBAQAogI2RlZmluZSBGTVBTTUJVU19HRVRfUEVDX01PREUoX19IQU5ETEVfXykgICAgICAgICAgICAgICAgICAgICgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5DUjIgJiBGTVBJMkNfQ1IyX1BFQ0JZVEUpCiAjZGVmaW5lIEZNUFNNQlVTX0dFVF9BTEVSVF9FTkFCTEVEKF9fSEFORExFX18pICAgICAgICAgICAgICAgICgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5DUjEgJiBGTVBJMkNfQ1IxX0FMRVJURU4pCiAKLSNkZWZpbmUgRk1QU01CVVNfQ0hFQ0tfRkxBRyhfX0lTUl9fLCBfX0ZMQUdfXykgICAgICAgICAgICAgKCgoKF9fSVNSX18pICYgKChfX0ZMQUdfXykgJiBGTVBTTUJVU19GTEFHX01BU0spKSA9PSAoKF9fRkxBR19fKSAmIEZNUFNNQlVTX0ZMQUdfTUFTSykpID8gU0VUIDogUkVTRVQpCisjZGVmaW5lIEZNUFNNQlVTX0NIRUNLX0ZMQUcoX19JU1JfXywgX19GTEFHX18pICAgICAgICAgICAgICgoKChfX0lTUl9fKSAmICgoX19GTEFHX18pICYgRk1QU01CVVNfRkxBR19NQVNLKSkgPT0gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19GTEFHX18pICYgRk1QU01CVVNfRkxBR19NQVNLKSkgPyBTRVQgOiBSRVNFVCkKICNkZWZpbmUgRk1QU01CVVNfQ0hFQ0tfSVRfU09VUkNFKF9fQ1IxX18sIF9fSVRfXykgICAgICAgICAgKCgoKF9fQ1IxX18pICYgKF9fSVRfXykpID09IChfX0lUX18pKSA/IFNFVCA6IFJFU0VUKQogCiAjZGVmaW5lIElTX0ZNUFNNQlVTX09XTl9BRERSRVNTMShBRERSRVNTMSkgICAgICAgICAgICAgICAgICAgICAgICAgKChBRERSRVNTMSkgPD0gMHgwMDAwMDNGRlUpCkBAIC02MzAsOCArNjM3LDggQEAKICAgKi8KIAogLyoqIEBhZGR0b2dyb3VwIEZNUFNNQlVTX0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDEgSW5pdGlhbGl6YXRpb24gYW5kIGRlLWluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucwotICogQHsKLSAqLworICAqIEB7CisgICovCiAKIC8qIEluaXRpYWxpemF0aW9uIGFuZCBkZS1pbml0aWFsaXphdGlvbiBmdW5jdGlvbnMgICoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfRk1QU01CVVNfSW5pdChGTVBTTUJVU19IYW5kbGVUeXBlRGVmICpoZm1wc21idXMpOwpAQCAtNjQzLDcgKzY1MCw4IEBACiAKIC8qIENhbGxiYWNrcyBSZWdpc3Rlci9VblJlZ2lzdGVyIGZ1bmN0aW9ucyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWYgKFVTRV9IQUxfRk1QU01CVVNfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfRk1QU01CVVNfUmVnaXN0ZXJDYWxsYmFjayhGTVBTTUJVU19IYW5kbGVUeXBlRGVmICpoZm1wc21idXMsIEhBTF9GTVBTTUJVU19DYWxsYmFja0lEVHlwZURlZiBDYWxsYmFja0lELCBwRk1QU01CVVNfQ2FsbGJhY2tUeXBlRGVmIHBDYWxsYmFjayk7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfRk1QU01CVVNfUmVnaXN0ZXJDYWxsYmFjayhGTVBTTUJVU19IYW5kbGVUeXBlRGVmICpoZm1wc21idXMsIEhBTF9GTVBTTUJVU19DYWxsYmFja0lEVHlwZURlZiBDYWxsYmFja0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEZNUFNNQlVTX0NhbGxiYWNrVHlwZURlZiBwQ2FsbGJhY2spOwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0ZNUFNNQlVTX1VuUmVnaXN0ZXJDYWxsYmFjayhGTVBTTUJVU19IYW5kbGVUeXBlRGVmICpoZm1wc21idXMsIEhBTF9GTVBTTUJVU19DYWxsYmFja0lEVHlwZURlZiBDYWxsYmFja0lEKTsKIAogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0ZNUFNNQlVTX1JlZ2lzdGVyQWRkckNhbGxiYWNrKEZNUFNNQlVTX0hhbmRsZVR5cGVEZWYgKmhmbXBzbWJ1cywgcEZNUFNNQlVTX0FkZHJDYWxsYmFja1R5cGVEZWYgcENhbGxiYWNrKTsKQEAgLTY1NCwyOCArNjYyLDMzIEBACiAgICovCiAKIC8qKiBAYWRkdG9ncm91cCBGTVBTTUJVU19FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXAyIElucHV0IGFuZCBPdXRwdXQgb3BlcmF0aW9uIGZ1bmN0aW9ucwotICogQHsKLSAqLworICAqIEB7CisgICovCiAKIC8qIElPIG9wZXJhdGlvbiBmdW5jdGlvbnMgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyoqIEBhZGR0b2dyb3VwIEJsb2NraW5nX21vZGVfUG9sbGluZyBCbG9ja2luZyBtb2RlIFBvbGxpbmcKLSAqIEB7Ci0gKi8KKyAgKiBAeworICAqLwogLyoqKioqKiogQmxvY2tpbmcgbW9kZTogUG9sbGluZyAqLwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0ZNUFNNQlVTX0lzRGV2aWNlUmVhZHkoRk1QU01CVVNfSGFuZGxlVHlwZURlZiAqaGZtcHNtYnVzLCB1aW50MTZfdCBEZXZBZGRyZXNzLCB1aW50MzJfdCBUcmlhbHMsIHVpbnQzMl90IFRpbWVvdXQpOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0ZNUFNNQlVTX0lzRGV2aWNlUmVhZHkoRk1QU01CVVNfSGFuZGxlVHlwZURlZiAqaGZtcHNtYnVzLCB1aW50MTZfdCBEZXZBZGRyZXNzLCB1aW50MzJfdCBUcmlhbHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBUaW1lb3V0KTsKIC8qKgogICAqIEB9CiAgICovCiAKIC8qKiBAYWRkdG9ncm91cCBOb24tQmxvY2tpbmdfbW9kZV9JbnRlcnJ1cHQgTm9uLUJsb2NraW5nIG1vZGUgSW50ZXJydXB0Ci0gKiBAewotICovCisgICogQHsKKyAgKi8KIC8qKioqKioqIE5vbi1CbG9ja2luZyBtb2RlOiBJbnRlcnJ1cHQgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9GTVBTTUJVU19NYXN0ZXJfVHJhbnNtaXRfSVQoRk1QU01CVVNfSGFuZGxlVHlwZURlZiAqaGZtcHNtYnVzLCB1aW50MTZfdCBEZXZBZGRyZXNzLCB1aW50OF90ICpwRGF0YSwgdWludDE2X3QgU2l6ZSwgdWludDMyX3QgWGZlck9wdGlvbnMpOwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0ZNUFNNQlVTX01hc3Rlcl9SZWNlaXZlX0lUKEZNUFNNQlVTX0hhbmRsZVR5cGVEZWYgKmhmbXBzbWJ1cywgdWludDE2X3QgRGV2QWRkcmVzcywgdWludDhfdCAqcERhdGEsIHVpbnQxNl90IFNpemUsIHVpbnQzMl90IFhmZXJPcHRpb25zKTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9GTVBTTUJVU19NYXN0ZXJfVHJhbnNtaXRfSVQoRk1QU01CVVNfSGFuZGxlVHlwZURlZiAqaGZtcHNtYnVzLCB1aW50MTZfdCBEZXZBZGRyZXNzLCB1aW50OF90ICpwRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgU2l6ZSwgdWludDMyX3QgWGZlck9wdGlvbnMpOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0ZNUFNNQlVTX01hc3Rlcl9SZWNlaXZlX0lUKEZNUFNNQlVTX0hhbmRsZVR5cGVEZWYgKmhmbXBzbWJ1cywgdWludDE2X3QgRGV2QWRkcmVzcywgdWludDhfdCAqcERhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgU2l6ZSwgdWludDMyX3QgWGZlck9wdGlvbnMpOwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0ZNUFNNQlVTX01hc3Rlcl9BYm9ydF9JVChGTVBTTUJVU19IYW5kbGVUeXBlRGVmICpoZm1wc21idXMsIHVpbnQxNl90IERldkFkZHJlc3MpOwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0ZNUFNNQlVTX1NsYXZlX1RyYW5zbWl0X0lUKEZNUFNNQlVTX0hhbmRsZVR5cGVEZWYgKmhmbXBzbWJ1cywgdWludDhfdCAqcERhdGEsIHVpbnQxNl90IFNpemUsIHVpbnQzMl90IFhmZXJPcHRpb25zKTsKLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9GTVBTTUJVU19TbGF2ZV9SZWNlaXZlX0lUKEZNUFNNQlVTX0hhbmRsZVR5cGVEZWYgKmhmbXBzbWJ1cywgdWludDhfdCAqcERhdGEsIHVpbnQxNl90IFNpemUsIHVpbnQzMl90IFhmZXJPcHRpb25zKTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9GTVBTTUJVU19TbGF2ZV9UcmFuc21pdF9JVChGTVBTTUJVU19IYW5kbGVUeXBlRGVmICpoZm1wc21idXMsIHVpbnQ4X3QgKnBEYXRhLCB1aW50MTZfdCBTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IFhmZXJPcHRpb25zKTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9GTVBTTUJVU19TbGF2ZV9SZWNlaXZlX0lUKEZNUFNNQlVTX0hhbmRsZVR5cGVEZWYgKmhmbXBzbWJ1cywgdWludDhfdCAqcERhdGEsIHVpbnQxNl90IFNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBYZmVyT3B0aW9ucyk7CiAKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9GTVBTTUJVU19FbmFibGVBbGVydF9JVChGTVBTTUJVU19IYW5kbGVUeXBlRGVmICpoZm1wc21idXMpOwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0ZNUFNNQlVTX0Rpc2FibGVBbGVydF9JVChGTVBTTUJVU19IYW5kbGVUeXBlRGVmICpoZm1wc21idXMpOwpAQCAtNjg2LDggKzY5OSw4IEBACiAgICovCiAKIC8qKiBAYWRkdG9ncm91cCBGTVBTTUJVU19JUlFfSGFuZGxlcl9hbmRfQ2FsbGJhY2tzIElSUSBIYW5kbGVyIGFuZCBDYWxsYmFja3MKLSAqIEB7Ci0gKi8KKyAgKiBAeworICAqLwogLyoqKioqKiogRk1QU01CVVMgSVJRSGFuZGxlciBhbmQgQ2FsbGJhY2tzIHVzZWQgaW4gbm9uIGJsb2NraW5nIG1vZGVzIChJbnRlcnJ1cHQpICovCiB2b2lkIEhBTF9GTVBTTUJVU19FVl9JUlFIYW5kbGVyKEZNUFNNQlVTX0hhbmRsZVR5cGVEZWYgKmhmbXBzbWJ1cyk7CiB2b2lkIEhBTF9GTVBTTUJVU19FUl9JUlFIYW5kbGVyKEZNUFNNQlVTX0hhbmRsZVR5cGVEZWYgKmhmbXBzbWJ1cyk7CkBAIC03MDQsOCArNzE3LDggQEAKICAgKi8KIAogLyoqIEBhZGR0b2dyb3VwIEZNUFNNQlVTX0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDMgUGVyaXBoZXJhbCBTdGF0ZSBhbmQgRXJyb3JzIGZ1bmN0aW9ucwotICogIEB7Ci0gKi8KKyAgKiAgQHsKKyAgKi8KIAogLyogUGVyaXBoZXJhbCBTdGF0ZSBhbmQgRXJyb3JzIGZ1bmN0aW9ucyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiB1aW50MzJfdCBIQUxfRk1QU01CVVNfR2V0U3RhdGUoRk1QU01CVVNfSGFuZGxlVHlwZURlZiAqaGZtcHNtYnVzKTsKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmY0eHhfaGFsX2ZtcHNtYnVzX2V4LmggYi9JbmMvc3RtMzJmNHh4X2hhbF9mbXBzbWJ1c19leC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0MWNlNzMKLS0tIC9kZXYvbnVsbAorKysgYi9JbmMvc3RtMzJmNHh4X2hhbF9mbXBzbWJ1c19leC5oCkBAIC0wLDAgKzEsMTMwIEBACisvKioKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQGZpbGUgICAgc3RtMzJmNHh4X2hhbF9mbXBzbWJ1c19leC5oCisgICogQGF1dGhvciAgTUNEIEFwcGxpY2F0aW9uIFRlYW0KKyAgKiBAYnJpZWYgICBIZWFkZXIgZmlsZSBvZiBGTVBTTUJVUyBIQUwgRXh0ZW5kZWQgbW9kdWxlLgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBAYXR0ZW50aW9uCisgICoKKyAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE2IFNUTWljcm9lbGVjdHJvbmljcy4KKyAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLjwvY2VudGVyPjwvaDI+CisgICoKKyAgKiBUaGlzIHNvZnR3YXJlIGNvbXBvbmVudCBpcyBsaWNlbnNlZCBieSBTVCB1bmRlciBCU0QgMy1DbGF1c2UgbGljZW5zZSwKKyAgKiB0aGUgIkxpY2Vuc2UiOyBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlCisgICogTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0OgorICAqICAgICAgICAgICAgICAgICAgICAgICAgb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlCisgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICovCisKKy8qIERlZmluZSB0byBwcmV2ZW50IHJlY3Vyc2l2ZSBpbmNsdXNpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjaWZuZGVmIFNUTTMyRjR4eF9IQUxfRk1QU01CVVNfRVhfSAorI2RlZmluZSBTVE0zMkY0eHhfSEFMX0ZNUFNNQlVTX0VYX0gKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChGTVBJMkNfQ1IxX1BFKQorLyogSW5jbHVkZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNpbmNsdWRlICJzdG0zMmY0eHhfaGFsX2RlZi5oIgorCisvKiogQGFkZHRvZ3JvdXAgU1RNMzJGNHh4X0hBTF9Ecml2ZXIKKyAgKiBAeworICAqLworCisvKiogQGFkZHRvZ3JvdXAgRk1QU01CVVNFeAorICAqIEB7CisgICovCisKKy8qIEV4cG9ydGVkIHR5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIEV4cG9ydGVkIGNvbnN0YW50cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiogQGRlZmdyb3VwIEZNUFNNQlVTRXhfRXhwb3J0ZWRfQ29uc3RhbnRzIEZNUFNNQlVTIEV4dGVuZGVkIEV4cG9ydGVkIENvbnN0YW50cworICAqIEB7CisgICovCisKKy8qKiBAZGVmZ3JvdXAgRk1QU01CVVNFeF9GYXN0TW9kZVBsdXMgRk1QU01CVVMgRXh0ZW5kZWQgRmFzdCBNb2RlIFBsdXMKKyAgKiBAeworICAqLworI2RlZmluZSBGTVBTTUJVU19GQVNUTU9ERVBMVVNfU0NMICAgICAgICAgICAgU1lTQ0ZHX0NGR1JfRk1QSTJDMV9TQ0wgIC8qITwgRW5hYmxlIEZhc3QgTW9kZSBQbHVzIG9uIEZNUEkyQzEgU0NMIHBpbnMgICAgICAgKi8KKyNkZWZpbmUgRk1QU01CVVNfRkFTVE1PREVQTFVTX1NEQSAgICAgICAgICAgIFNZU0NGR19DRkdSX0ZNUEkyQzFfU0RBICAvKiE8IEVuYWJsZSBGYXN0IE1vZGUgUGx1cyBvbiBGTVBJMkMxIFNEQSBwaW5zICAgICAgICovCisvKioKKyAgKiBAfQorICAqLworCisvKioKKyAgKiBAfQorICAqLworCisvKiBFeHBvcnRlZCBtYWNybyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoqIEBkZWZncm91cCBGTVBTTUJVU0V4X0V4cG9ydGVkX01hY3JvcyBGTVBTTUJVUyBFeHRlbmRlZCBFeHBvcnRlZCBNYWNyb3MKKyAgKiBAeworICAqLworCisvKioKKyAgKiBAfQorICAqLworCisvKiBFeHBvcnRlZCBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoqIEBhZGR0b2dyb3VwIEZNUFNNQlVTRXhfRXhwb3J0ZWRfRnVuY3Rpb25zIEZNUFNNQlVTIEV4dGVuZGVkIEV4cG9ydGVkIEZ1bmN0aW9ucworICAqIEB7CisgICovCisKKy8qKiBAYWRkdG9ncm91cCBGTVBTTUJVU0V4X0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDMgRk1QU01CVVMgRXh0ZW5kZWQgRmFzdE1vZGVQbHVzIEZ1bmN0aW9ucworICAqIEB7CisgICovCit2b2lkIEhBTF9GTVBTTUJVU0V4X0VuYWJsZUZhc3RNb2RlUGx1cyh1aW50MzJfdCBDb25maWdGYXN0TW9kZVBsdXMpOwordm9pZCBIQUxfRk1QU01CVVNFeF9EaXNhYmxlRmFzdE1vZGVQbHVzKHVpbnQzMl90IENvbmZpZ0Zhc3RNb2RlUGx1cyk7CisvKioKKyAgKiBAfQorICAqLworCisvKioKKyAgKiBAfQorICAqLworCisvKiBQcml2YXRlIGNvbnN0YW50cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoqIEBkZWZncm91cCBGTVBTTUJVU0V4X1ByaXZhdGVfQ29uc3RhbnRzIEZNUFNNQlVTIEV4dGVuZGVkIFByaXZhdGUgQ29uc3RhbnRzCisgICogQHsKKyAgKi8KKworLyoqCisgICogQH0KKyAgKi8KKworLyogUHJpdmF0ZSBtYWNyb3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qKiBAZGVmZ3JvdXAgRk1QU01CVVNFeF9Qcml2YXRlX01hY3JvIEZNUFNNQlVTIEV4dGVuZGVkIFByaXZhdGUgTWFjcm9zCisgICogQHsKKyAgKi8KKyNkZWZpbmUgSVNfRk1QU01CVVNfRkFTVE1PREVQTFVTKF9fQ09ORklHX18pICgoKChfX0NPTkZJR19fKSAmIChGTVBTTUJVU19GQVNUTU9ERVBMVVNfU0NMKSkgPT0gRk1QU01CVVNfRkFTVE1PREVQTFVTX1NDTCkgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChfX0NPTkZJR19fKSAmIChGTVBTTUJVU19GQVNUTU9ERVBMVVNfU0RBKSkgPT0gRk1QU01CVVNfRkFTVE1PREVQTFVTX1NEQSkpCisvKioKKyAgKiBAfQorICAqLworCisvKiBQcml2YXRlIEZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoqIEBkZWZncm91cCBGTVBTTUJVU0V4X1ByaXZhdGVfRnVuY3Rpb25zIEZNUFNNQlVTIEV4dGVuZGVkIFByaXZhdGUgRnVuY3Rpb25zCisgICogQHsKKyAgKi8KKy8qIFByaXZhdGUgZnVuY3Rpb25zIGFyZSBkZWZpbmVkIGluIHN0bTMyZjR4eF9oYWxfZm1wZm1wc21idXNfZXguYyBmaWxlICovCisvKioKKyAgKiBAfQorICAqLworCisvKioKKyAgKiBAfQorICAqLworCisvKioKKyAgKiBAfQorICAqLworCisjZW5kaWYgLyogRk1QSTJDX0NSMV9QRSAqLworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIFNUTTMyRjR4eF9IQUxfRk1QU01CVVNfRVhfSCAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqIChDKSBDT1BZUklHSFQgU1RNaWNyb2VsZWN0cm9uaWNzICoqKioqRU5EIE9GIEZJTEUqKioqLwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZjR4eF9oYWxfZ3Bpby5oIGIvSW5jL3N0bTMyZjR4eF9oYWxfZ3Bpby5oCmluZGV4IDVhMTc1MzguLjM4YjU2N2QgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmY0eHhfaGFsX2dwaW8uaAorKysgYi9JbmMvc3RtMzJmNHh4X2hhbF9ncGlvLmgKQEAgLTExNSwyMiArMTE1LDIzIEBACiAgICogICAgICAgICAgIC0gWSAgOiBPdXRwdXQgdHlwZSAoUHVzaCBQdWxsIG9yIE9wZW4gRHJhaW4pCiAgICogICAgICAgICAgIC0gWiAgOiBJTyBEaXJlY3Rpb24gbW9kZSAoSW5wdXQsIE91dHB1dCwgQWx0ZXJuYXRlIG9yIEFuYWxvZykKICAgKiBAewotICAqLyAKLSNkZWZpbmUgIEdQSU9fTU9ERV9JTlBVVCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDBVICAgLyohPCBJbnB1dCBGbG9hdGluZyBNb2RlICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lICBHUElPX01PREVfT1VUUFVUX1BQICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxVSAgIC8qITwgT3V0cHV0IFB1c2ggUHVsbCBNb2RlICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSAgR1BJT19NT0RFX09VVFBVVF9PRCAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMVUgICAvKiE8IE91dHB1dCBPcGVuIERyYWluIE1vZGUgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgIEdQSU9fTU9ERV9BRl9QUCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDJVICAgLyohPCBBbHRlcm5hdGUgRnVuY3Rpb24gUHVzaCBQdWxsIE1vZGUgICAgICovCi0jZGVmaW5lICBHUElPX01PREVfQUZfT0QgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEyVSAgIC8qITwgQWx0ZXJuYXRlIEZ1bmN0aW9uIE9wZW4gRHJhaW4gTW9kZSAgICAqLworICAqLworI2RlZmluZSAgR1BJT19NT0RFX0lOUFVUICAgICAgICAgICAgICAgICAgICAgICAgTU9ERV9JTlBVVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJbnB1dCBGbG9hdGluZyBNb2RlICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lICBHUElPX01PREVfT1VUUFVUX1BQICAgICAgICAgICAgICAgICAgICAoTU9ERV9QUCB8IE1PREVfT1VUUFVUKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE91dHB1dCBQdXNoIFB1bGwgTW9kZSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgIEdQSU9fTU9ERV9PVVRQVVRfT0QgICAgICAgICAgICAgICAgICAgIChNT0RFX09EIHwgTU9ERV9PVVRQVVQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgT3V0cHV0IE9wZW4gRHJhaW4gTW9kZSAgICAgICAgICAgICAgICAqLworI2RlZmluZSAgR1BJT19NT0RFX0FGX1BQICAgICAgICAgICAgICAgICAgICAgICAgKE1PREVfUFAgfCBNT0RFX0FGKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBbHRlcm5hdGUgRnVuY3Rpb24gUHVzaCBQdWxsIE1vZGUgICAgICovCisjZGVmaW5lICBHUElPX01PREVfQUZfT0QgICAgICAgICAgICAgICAgICAgICAgICAoTU9ERV9PRCB8IE1PREVfQUYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFsdGVybmF0ZSBGdW5jdGlvbiBPcGVuIERyYWluIE1vZGUgICAgKi8KIAotI2RlZmluZSAgR1BJT19NT0RFX0FOQUxPRyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwM1UgICAvKiE8IEFuYWxvZyBNb2RlICAqLwotICAgIAotI2RlZmluZSAgR1BJT19NT0RFX0lUX1JJU0lORyAgICAgICAgICAgICAgICAgICAgMHgxMDExMDAwMFUgICAvKiE8IEV4dGVybmFsIEludGVycnVwdCBNb2RlIHdpdGggUmlzaW5nIGVkZ2UgdHJpZ2dlciBkZXRlY3Rpb24gICAgICAgICAgKi8KLSNkZWZpbmUgIEdQSU9fTU9ERV9JVF9GQUxMSU5HICAgICAgICAgICAgICAgICAgIDB4MTAyMTAwMDBVICAgLyohPCBFeHRlcm5hbCBJbnRlcnJ1cHQgTW9kZSB3aXRoIEZhbGxpbmcgZWRnZSB0cmlnZ2VyIGRldGVjdGlvbiAgICAgICAgICovCi0jZGVmaW5lICBHUElPX01PREVfSVRfUklTSU5HX0ZBTExJTkcgICAgICAgICAgICAweDEwMzEwMDAwVSAgIC8qITwgRXh0ZXJuYWwgSW50ZXJydXB0IE1vZGUgd2l0aCBSaXNpbmcvRmFsbGluZyBlZGdlIHRyaWdnZXIgZGV0ZWN0aW9uICAqLwotIAotI2RlZmluZSAgR1BJT19NT0RFX0VWVF9SSVNJTkcgICAgICAgICAgICAgICAgICAgMHgxMDEyMDAwMFUgICAvKiE8IEV4dGVybmFsIEV2ZW50IE1vZGUgd2l0aCBSaXNpbmcgZWRnZSB0cmlnZ2VyIGRldGVjdGlvbiAgICAgICAgICAgICAgICovCi0jZGVmaW5lICBHUElPX01PREVfRVZUX0ZBTExJTkcgICAgICAgICAgICAgICAgICAweDEwMjIwMDAwVSAgIC8qITwgRXh0ZXJuYWwgRXZlbnQgTW9kZSB3aXRoIEZhbGxpbmcgZWRnZSB0cmlnZ2VyIGRldGVjdGlvbiAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgIEdQSU9fTU9ERV9FVlRfUklTSU5HX0ZBTExJTkcgICAgICAgICAgIDB4MTAzMjAwMDBVICAgLyohPCBFeHRlcm5hbCBFdmVudCBNb2RlIHdpdGggUmlzaW5nL0ZhbGxpbmcgZWRnZSB0cmlnZ2VyIGRldGVjdGlvbiAgICAgICAqLworI2RlZmluZSAgR1BJT19NT0RFX0FOQUxPRyAgICAgICAgICAgICAgICAgICAgICAgTU9ERV9BTkFMT0cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBbmFsb2cgTW9kZSAgKi8KKworI2RlZmluZSAgR1BJT19NT0RFX0lUX1JJU0lORyAgICAgICAgICAgICAgICAgICAgKEVYVElfTU9ERSB8IEdQSU9fTU9ERV9JVCB8IFJJU0lOR19FREdFKSAgICAgICAgICAgICAgICAgLyohPCBFeHRlcm5hbCBJbnRlcnJ1cHQgTW9kZSB3aXRoIFJpc2luZyBlZGdlIHRyaWdnZXIgZGV0ZWN0aW9uICAgICAgICAgICovCisjZGVmaW5lICBHUElPX01PREVfSVRfRkFMTElORyAgICAgICAgICAgICAgICAgICAoRVhUSV9NT0RFIHwgR1BJT19NT0RFX0lUICAgICAgICAgICAgICAgfCBGQUxMSU5HX0VER0UpICAvKiE8IEV4dGVybmFsIEludGVycnVwdCBNb2RlIHdpdGggRmFsbGluZyBlZGdlIHRyaWdnZXIgZGV0ZWN0aW9uICAgICAgICAgKi8KKyNkZWZpbmUgIEdQSU9fTU9ERV9JVF9SSVNJTkdfRkFMTElORyAgICAgICAgICAgIChFWFRJX01PREUgfCBHUElPX01PREVfSVQgfCBSSVNJTkdfRURHRSB8IEZBTExJTkdfRURHRSkgIC8qITwgRXh0ZXJuYWwgSW50ZXJydXB0IE1vZGUgd2l0aCBSaXNpbmcvRmFsbGluZyBlZGdlIHRyaWdnZXIgZGV0ZWN0aW9uICAqLworCisjZGVmaW5lICBHUElPX01PREVfRVZUX1JJU0lORyAgICAgICAgICAgICAgICAgICAoRVhUSV9NT0RFIHwgR1BJT19NT0RFX0VWVCB8IFJJU0lOR19FREdFKSAgICAgICAgICAgICAgICAvKiE8IEV4dGVybmFsIEV2ZW50IE1vZGUgd2l0aCBSaXNpbmcgZWRnZSB0cmlnZ2VyIGRldGVjdGlvbiAgICAgICAgICAgICAgICovCisjZGVmaW5lICBHUElPX01PREVfRVZUX0ZBTExJTkcgICAgICAgICAgICAgICAgICAoRVhUSV9NT0RFIHwgR1BJT19NT0RFX0VWVCAgICAgICAgICAgICAgIHwgRkFMTElOR19FREdFKSAvKiE8IEV4dGVybmFsIEV2ZW50IE1vZGUgd2l0aCBGYWxsaW5nIGVkZ2UgdHJpZ2dlciBkZXRlY3Rpb24gICAgICAgICAgICAgICovCisjZGVmaW5lICBHUElPX01PREVfRVZUX1JJU0lOR19GQUxMSU5HICAgICAgICAgICAoRVhUSV9NT0RFIHwgR1BJT19NT0RFX0VWVCB8IFJJU0lOR19FREdFIHwgRkFMTElOR19FREdFKSAvKiE8IEV4dGVybmFsIEV2ZW50IE1vZGUgd2l0aCBSaXNpbmcvRmFsbGluZyBlZGdlIHRyaWdnZXIgZGV0ZWN0aW9uICAgICAgICovCisKIC8qKgogICAqIEB9CiAgICovCkBAIC0yNTIsNiArMjUzLDIxIEBACiAvKiogQGRlZmdyb3VwIEdQSU9fUHJpdmF0ZV9Db25zdGFudHMgR1BJTyBQcml2YXRlIENvbnN0YW50cwogICAqIEB7CiAgICovCisjZGVmaW5lIEdQSU9fTU9ERSAgICAgICAgICAgICAweDAwMDAwMDAzVQorI2RlZmluZSBFWFRJX01PREUgICAgICAgICAgICAgMHgxMDAwMDAwMFUKKyNkZWZpbmUgR1BJT19NT0RFX0lUICAgICAgICAgIDB4MDAwMTAwMDBVCisjZGVmaW5lIEdQSU9fTU9ERV9FVlQgICAgICAgICAweDAwMDIwMDAwVQorI2RlZmluZSBSSVNJTkdfRURHRSAgICAgICAgICAgMHgwMDEwMDAwMFUKKyNkZWZpbmUgRkFMTElOR19FREdFICAgICAgICAgIDB4MDAyMDAwMDBVCisjZGVmaW5lIEdQSU9fT1VUUFVUX1RZUEUgICAgICAweDAwMDAwMDEwVQorCisjZGVmaW5lICBNT0RFX0lOUFVUICAgICAgICAgICAweDAwMDAwMDAwVSAgICAgICAgICAgLyohPCBJbnB1dCBNb2RlICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lICBNT0RFX09VVFBVVCAgICAgICAgICAweDAwMDAwMDAxVSAgICAgICAgICAgLyohPCBPdXRwdXQgTW9kZSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lICBNT0RFX0FGICAgICAgICAgICAgICAweDAwMDAwMDAyVSAgICAgICAgICAgLyohPCBBbHRlcm5hdGUgRnVuY3Rpb24gTW9kZSAgICAgICovCisjZGVmaW5lICBNT0RFX0FOQUxPRyAgICAgICAgICAweDAwMDAwMDAzVSAgICAgICAgICAgLyohPCBBbmFsb2cgTW9kZSAgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgIE1PREVfUFAgICAgICAgICAgICAgIDB4MDAwMDAwMDBVICAgICAgICAgICAvKiE8IFB1c2ggUHVsbCBNb2RlICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgIE1PREVfT0QgICAgICAgICAgICAgIDB4MDAwMDAwMTBVICAgICAgICAgICAvKiE8IE9wZW4gRHJhaW4gTW9kZSAgICAgICAgICAgICAgKi8KIAogLyoqCiAgICogQH0KZGlmZiAtLWdpdCBhL0luYy9zdG0zMmY0eHhfaGFsX2dwaW9fZXguaCBiL0luYy9zdG0zMmY0eHhfaGFsX2dwaW9fZXguaAppbmRleCBhYTFlMzRkLi43ZGIzNmNjIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmNHh4X2hhbF9ncGlvX2V4LmgKKysrIGIvSW5jL3N0bTMyZjR4eF9oYWxfZ3Bpb19leC5oCkBAIC0xNDQyLDIxICsxNDQyLDIxIEBACiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gU1RNMzJGNDAxeHgtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotI2lmIGRlZmluZWQoU1RNMzJGNDAxeEMpIHx8IGRlZmluZWQoU1RNMzJGNDAxeEUpIAorI2lmIGRlZmluZWQoU1RNMzJGNDAxeEMpIHx8IGRlZmluZWQoU1RNMzJGNDAxeEUpCiAjZGVmaW5lIElTX0dQSU9fQUYoQUYpICAgKCgoQUYpID09IEdQSU9fQUYwX1JUQ181MEh6KSAgIHx8ICgoQUYpID09IEdQSU9fQUYxMl9TRElPKSAgICAgIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgKChBRikgPT0gR1BJT19BRjBfTUNPKSAgICAgICAgfHwgKChBRikgPT0gR1BJT19BRjBfVEFNUEVSKSAgICAgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAoKEFGKSA9PSBHUElPX0FGMF9TV0opICAgICAgICB8fCAoKEFGKSA9PSBHUElPX0FGMF9UUkFDRSkgICAgICB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQUYpID09IEdQSU9fQUYxX1RJTTEpICAgICAgIHx8ICgoQUYpID09IEdQSU9fQUYxX1RJTTIpICAgICAgIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgKChBRikgPT0gR1BJT19BRjJfVElNMykgICAgICAgfHwgKChBRikgPT0gR1BJT19BRjJfVElNNCkgICAgICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAoKEFGKSA9PSBHUElPX0FGMl9USU01KSAgICAgICB8fCAoKEFGKSA9PSBHUElPX0FGNF9JMkMxKSAgICAgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICgoQUYpID09IEdQSU9fQUY0X0kyQzIpICAgICAgIHx8ICgoQUYpID09IEdQSU9fQUY0X0kyQzMpICAgICAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKChBRikgPT0gR1BJT19BRjVfU1BJMSkgICAgICAgfHwgKChBRikgPT0gR1BJT19BRjVfU1BJMikgICAgICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAoKEFGKSA9PSBHUElPX0FGNl9TUEkzKSAgICAgICB8fCAoKEFGKSA9PSBHUElPX0FGNV9TUEk0KSAgICAgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICgoQUYpID09IEdQSU9fQUY3X1VTQVJUMSkgICAgIHx8ICgoQUYpID09IEdQSU9fQUY3X1VTQVJUMikgICAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKChBRikgPT0gR1BJT19BRjhfVVNBUlQ2KSAgICAgfHwgKChBRikgPT0gR1BJT19BRjEwX09UR19GUykgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAoKEFGKSA9PSBHUElPX0FGMl9USU01KSAgICAgICB8fCAoKEFGKSA9PSBHUElPX0FGM19USU05KSAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICgoQUYpID09IEdQSU9fQUYzX1RJTTEwKSAgICAgIHx8ICgoQUYpID09IEdQSU9fQUYzX1RJTTExKSAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKChBRikgPT0gR1BJT19BRjRfSTJDMSkgICAgICAgfHwgKChBRikgPT0gR1BJT19BRjRfSTJDMikgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAoKEFGKSA9PSBHUElPX0FGNF9JMkMzKSAgICAgICB8fCAoKEFGKSA9PSBHUElPX0FGNV9TUEkxKSAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICgoQUYpID09IEdQSU9fQUY1X1NQSTIpICAgICAgIHx8ICgoQUYpID09IEdQSU9fQUY1X1NQSTQpICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKChBRikgPT0gR1BJT19BRjZfU1BJMykgICAgICAgfHwgKChBRikgPT0gR1BJT19BRjdfVVNBUlQxKSAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAoKEFGKSA9PSBHUElPX0FGN19VU0FSVDIpICAgICB8fCAoKEFGKSA9PSBHUElPX0FGOF9VU0FSVDYpICAgICB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQUYpID09IEdQSU9fQUY5X0kyQzIpICAgICAgIHx8ICgoQUYpID09IEdQSU9fQUY5X0kyQzMpICAgICAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKChBRikgPT0gR1BJT19BRjE1X0VWRU5UT1VUKSkKLQorICAgICAgICAgICAgICAgICAgICAgICAgICAoKEFGKSA9PSBHUElPX0FGMTBfT1RHX0ZTKSAgICB8fCAoKEFGKSA9PSBHUElPX0FGMTVfRVZFTlRPVVQpKQogI2VuZGlmIC8qIFNUTTMyRjQwMXhDIHx8IFNUTTMyRjQwMXhFICovCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFNUTTMyRjQxMHh4LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KZGlmZiAtLWdpdCBhL0luYy9zdG0zMmY0eHhfaGFsX2hhc2guaCBiL0luYy9zdG0zMmY0eHhfaGFsX2hhc2guaAppbmRleCBlYTZmNTkzLi5mN2MwYjlkIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmNHh4X2hhbF9oYXNoLmgKKysrIGIvSW5jL3N0bTMyZjR4eF9oYWxfaGFzaC5oCkBAIC0yMiw3ICsyMiw3IEBACiAjZGVmaW5lIFNUTTMyRjR4eF9IQUxfSEFTSF9ICiAKICNpZmRlZiBfX2NwbHVzcGx1cwotIGV4dGVybiAiQyIgeworZXh0ZXJuICJDIiB7CiAjZW5kaWYKIAogLyogSW5jbHVkZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTUxLDcgKzUxLDcgQEAKIAogICB1aW50MzJfdCBLZXlTaXplOyAgICAgLyohPCBUaGUga2V5IHNpemUgaXMgdXNlZCBvbmx5IGluIEhNQUMgb3BlcmF0aW9uLiAqLwogCi0gIHVpbnQ4X3QqIHBLZXk7ICAgICAgICAvKiE8IFRoZSBrZXkgaXMgdXNlZCBvbmx5IGluIEhNQUMgb3BlcmF0aW9uLiAqLworICB1aW50OF90ICpwS2V5OyAgICAgICAgLyohPCBUaGUga2V5IGlzIHVzZWQgb25seSBpbiBITUFDIG9wZXJhdGlvbi4gKi8KIAogfSBIQVNIX0luaXRUeXBlRGVmOwogCkBAIC02Niw3ICs2Niw3IEBACiAgIEhBTF9IQVNIX1NUQVRFX1RJTUVPVVQgICAgICAgICAgID0gMHgwNlUsICAgIC8qITwgVGltZW91dCBzdGF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICBIQUxfSEFTSF9TVEFURV9FUlJPUiAgICAgICAgICAgICA9IDB4MDdVLCAgICAvKiE8IEVycm9yIHN0YXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgSEFMX0hBU0hfU1RBVEVfU1VTUEVOREVEICAgICAgICAgPSAweDA4VSAgICAgLyohPCBTdXNwZW5kZWQgc3RhdGUgICAgICAgICAgICAgICAgICAgICAgICAgICovCi19SEFMX0hBU0hfU3RhdGVUeXBlRGVmOworfSBIQUxfSEFTSF9TdGF0ZVR5cGVEZWY7CiAKIC8qKgogICAqIEBicmllZiBIQUwgcGhhc2Ugc3RydWN0dXJlcyBkZWZpbml0aW9uCkBAIC04MSw3ICs4MSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0ZXAgMiBjb25zaXN0cyBpbiBlbnRlcmluZyB0aGUgbWVzc2FnZSB0ZXh0KSAqLwogICBIQUxfSEFTSF9QSEFTRV9ITUFDX1NURVBfMyAgICAgICA9IDB4MDVVICAgICAvKiE8IEhBU0ggcGVyaXBoZXJhbCBpcyBpbiBITUFDIHN0ZXAgMyBwcm9jZXNzaW5nIHBoYXNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0ZXAgMyBjb25zaXN0cyBpbiBlbnRlcmluZyB0aGUgb3V0ZXIgaGFzaCBmdW5jdGlvbiBrZXkpICovCi19SEFMX0hBU0hfUGhhc2VUeXBlRGVmOworfSBIQUxfSEFTSF9QaGFzZVR5cGVEZWY7CiAKIC8qKgogICAqIEBicmllZiBIQUwgSEFTSCBtb2RlIHN1c3BlbmQgZGVmaW5pdGlvbnMKQEAgLTkwLDcgKzkwLDcgQEAKIHsKICAgSEFMX0hBU0hfU1VTUEVORF9OT05FICAgICAgICAgICAgPSAweDAwVSwgICAgLyohPCBIQVNIIHBlcmlwaGVyYWwgc3VzcGVuc2lvbiBub3QgcmVxdWVzdGVkICovCiAgIEhBTF9IQVNIX1NVU1BFTkQgICAgICAgICAgICAgICAgID0gMHgwMVUgICAgIC8qITwgSEFTSCBwZXJpcGhlcmFsIHN1c3BlbnNpb24gaXMgcmVxdWVzdGVkICAqLwotfUhBTF9IQVNIX1N1c3BlbmRUeXBlRGVmOworfSBIQUxfSEFTSF9TdXNwZW5kVHlwZURlZjsKIAogI2lmIChVU0VfSEFMX0hBU0hfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDFVKQogLyoqCkBAIC0xMDMsNyArMTAzLDcgQEAKICAgSEFMX0hBU0hfSU5QVVRDUExUX0NCX0lEICAgICAgICAgPSAweDAyVSwgICAgLyohPCBIQVNIIGlucHV0IGNvbXBsZXRpb24gY2FsbGJhY2sgSUQgKi8KICAgSEFMX0hBU0hfREdTVENQTFRfQ0JfSUQgICAgICAgICAgPSAweDAzVSwgICAgLyohPCBIQVNIIGRpZ2VzdCBjb21wdXRhdGlvbiBjb21wbGV0aW9uIGNhbGxiYWNrIElEICovCiAgIEhBTF9IQVNIX0VSUk9SX0NCX0lEICAgICAgICAgICAgID0gMHgwNFUsICAgIC8qITwgSEFTSCBlcnJvciBjYWxsYmFjayBJRCAgICAgKi8KLX1IQUxfSEFTSF9DYWxsYmFja0lEVHlwZURlZjsKK30gSEFMX0hBU0hfQ2FsbGJhY2tJRFR5cGVEZWY7CiAjZW5kaWYgLyogVVNFX0hBTF9IQVNIX1JFR0lTVEVSX0NBTExCQUNLUyAqLwogCiAKQEAgLTE1NSwxNSArMTU1LDE1IEBACiAgIF9fSU8gIHVpbnQzMl90ICAgICAgICAgICAgIEFjY3VtdWxhdGlvbjsgICAgIC8qITwgSEFTSCBtdWx0aSBidWZmZXJzIGFjY3VtdWxhdGlvbiBmbGFnICovCiAKICNpZiAoVVNFX0hBTF9IQVNIX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxKQotICB2b2lkICAgICgqIEluQ3BsdENhbGxiYWNrKSggc3RydWN0IF9fSEFTSF9IYW5kbGVUeXBlRGVmICogaGhhc2gpOyAgICAvKiE8IEhBU0ggaW5wdXQgY29tcGxldGlvbiBjYWxsYmFjayAqLworICB2b2lkICgqIEluQ3BsdENhbGxiYWNrKShzdHJ1Y3QgX19IQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoKTsgICAgICAgICAvKiE8IEhBU0ggaW5wdXQgY29tcGxldGlvbiBjYWxsYmFjayAqLwogCi0gIHZvaWQgICAgKCogRGdzdENwbHRDYWxsYmFjaykoIHN0cnVjdCBfX0hBU0hfSGFuZGxlVHlwZURlZiAqIGhoYXNoKTsgIC8qITwgSEFTSCBkaWdlc3QgY29tcHV0YXRpb24gY29tcGxldGlvbiBjYWxsYmFjayAqLworICB2b2lkICgqIERnc3RDcGx0Q2FsbGJhY2spKHN0cnVjdCBfX0hBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gpOyAgICAgICAvKiE8IEhBU0ggZGlnZXN0IGNvbXB1dGF0aW9uIGNvbXBsZXRpb24gY2FsbGJhY2sgKi8KIAotICB2b2lkICAgICgqIEVycm9yQ2FsbGJhY2spKCBzdHJ1Y3QgX19IQVNIX0hhbmRsZVR5cGVEZWYgKiBoaGFzaCk7ICAgICAvKiE8IEhBU0ggZXJyb3IgY2FsbGJhY2sgKi8KKyAgdm9pZCAoKiBFcnJvckNhbGxiYWNrKShzdHJ1Y3QgX19IQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoKTsgICAgICAgICAgLyohPCBIQVNIIGVycm9yIGNhbGxiYWNrICovCiAKLSAgdm9pZCAgICAoKiBNc3BJbml0Q2FsbGJhY2spKCBzdHJ1Y3QgX19IQVNIX0hhbmRsZVR5cGVEZWYgKiBoaGFzaCk7ICAgLyohPCBIQVNIIE1zcCBJbml0IGNhbGxiYWNrICovCisgIHZvaWQgKCogTXNwSW5pdENhbGxiYWNrKShzdHJ1Y3QgX19IQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoKTsgICAgICAgIC8qITwgSEFTSCBNc3AgSW5pdCBjYWxsYmFjayAqLwogCi0gIHZvaWQgICAgKCogTXNwRGVJbml0Q2FsbGJhY2spKCBzdHJ1Y3QgX19IQVNIX0hhbmRsZVR5cGVEZWYgKiBoaGFzaCk7IC8qITwgSEFTSCBNc3AgRGVJbml0IGNhbGxiYWNrICovCisgIHZvaWQgKCogTXNwRGVJbml0Q2FsbGJhY2spKHN0cnVjdCBfX0hBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gpOyAgICAgIC8qITwgSEFTSCBNc3AgRGVJbml0IGNhbGxiYWNrICovCiAKICNlbmRpZiAvKiAoVVNFX0hBTF9IQVNIX1JFR0lTVEVSX0NBTExCQUNLUykgKi8KIH0gSEFTSF9IYW5kbGVUeXBlRGVmOwpAQCAtMTcyLDcgKzE3Miw3IEBACiAvKioKICAgKiBAYnJpZWYgIEhBTCBIQVNIIENhbGxiYWNrIHBvaW50ZXIgZGVmaW5pdGlvbgogICAqLwotdHlwZWRlZiAgdm9pZCAoKnBIQVNIX0NhbGxiYWNrVHlwZURlZikoSEFTSF9IYW5kbGVUeXBlRGVmICogaGhhc2gpOyAvKiE8IHBvaW50ZXIgdG8gYSBIQVNIIGNvbW1vbiBjYWxsYmFjayBmdW5jdGlvbnMgKi8KK3R5cGVkZWYgIHZvaWQgKCpwSEFTSF9DYWxsYmFja1R5cGVEZWYpKEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gpOyAgLyohPCBwb2ludGVyIHRvIGEgSEFTSCBjb21tb24gY2FsbGJhY2sgZnVuY3Rpb25zICovCiAjZW5kaWYgLyogVVNFX0hBTF9IQVNIX1JFR0lTVEVSX0NBTExCQUNLUyAqLwogCiAvKioKQEAgLTI1MCw3ICsyNTAsNyBAQAogLyoqIEBkZWZncm91cCBIQVNIX2FsaWFzIEhBU0ggQVBJIGFsaWFzCiAgICogQHsKICAgKi8KLSNkZWZpbmUgSEFMX0hBU0hFeF9JUlFIYW5kbGVyICAgSEFMX0hBU0hfSVJRSGFuZGxlciAgLyohPCBIQUxfSEFTSEV4X0lSUUhhbmRsZXIoKSBpcyByZS1kaXJlY3RlZCB0byBIQUxfSEFTSF9JUlFIYW5kbGVyKCkgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBsZWdhY3kgY29kZSAqLworI2RlZmluZSBIQUxfSEFTSEV4X0lSUUhhbmRsZXIgICBIQUxfSEFTSF9JUlFIYW5kbGVyICAvKiE8IFJlZGlyZWN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbGVnYWN5IGNvZGUgKi8KIC8qKgogICAqIEB9CiAgICovCkBAIC0yODgsOCArMjg4LDggQEAKICAgKiBAcmV0dmFsIFRoZSBuZXcgc3RhdGUgb2YgX19GTEFHX18gKFRSVUUgb3IgRkFMU0UpLgogICAqLwogI2RlZmluZSBfX0hBTF9IQVNIX0dFVF9GTEFHKF9fRkxBR19fKSAgKCgoX19GTEFHX18pID4gOFUpICA/ICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEhBU0gtPkNSICYgKF9fRkxBR19fKSkgPT0gKF9fRkxBR19fKSkgOlwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoSEFTSC0+U1IgJiAoX19GTEFHX18pKSA9PSAoX19GTEFHX18pKSApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChIQVNILT5DUiAmIChfX0ZMQUdfXykpID09IChfX0ZMQUdfXykpIDpcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChIQVNILT5TUiAmIChfX0ZMQUdfXykpID09IChfX0ZMQUdfXykpICkKIAogCiAvKiogQGJyaWVmICBDbGVhciB0aGUgc3BlY2lmaWVkIEhBU0ggZmxhZy4KQEAgLTM2Niw3ICszNjYsNyBAQAogICAqIEBicmllZiBTZXQgdGhlIG51bWJlciBvZiB2YWxpZCBiaXRzIGluIHRoZSBsYXN0IHdvcmQgd3JpdHRlbiBpbiBkYXRhIHJlZ2lzdGVyIERJTi4KICAgKiBAcGFyYW0gIF9fU0laRV9fIHNpemUgaW4gYnl0ZXMgb2YgbGFzdCBkYXRhIHdyaXR0ZW4gaW4gRGF0YSByZWdpc3Rlci4KICAgKiBAcmV0dmFsIE5vbmUKLSovCisgICovCiAjZGVmaW5lICBfX0hBTF9IQVNIX1NFVF9OQlZBTElEQklUUyhfX1NJWkVfXykgICAgTU9ESUZZX1JFRyhIQVNILT5TVFIsIEhBU0hfU1RSX05CTFcsIDhVICogKChfX1NJWkVfXykgJSA0VSkpCiAKIC8qKgpAQCAtMzkwLDExICszOTAsMTEgQEAKICAgKi8KICNpZiBkZWZpbmVkKEhBU0hfQ1JfTURNQVQpCiAjZGVmaW5lIEhBU0hfRElHRVNUX0xFTkdUSCgpICgoUkVBRF9CSVQoSEFTSC0+Q1IsIEhBU0hfQ1JfQUxHTykgPT0gSEFTSF9BTEdPU0VMRUNUSU9OX1NIQTEpICAgPyAgMjBVIDogXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFJFQURfQklUKEhBU0gtPkNSLCBIQVNIX0NSX0FMR08pID09IEhBU0hfQUxHT1NFTEVDVElPTl9TSEEyMjQpID8gIDI4VSA6IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChSRUFEX0JJVChIQVNILT5DUiwgSEFTSF9DUl9BTEdPKSA9PSBIQVNIX0FMR09TRUxFQ1RJT05fU0hBMjU2KSA/ICAzMlUgOiAxNlUgKSApICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUkVBRF9CSVQoSEFTSC0+Q1IsIEhBU0hfQ1JfQUxHTykgPT0gSEFTSF9BTEdPU0VMRUNUSU9OX1NIQTIyNCkgPyAgMjhVIDogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUkVBRF9CSVQoSEFTSC0+Q1IsIEhBU0hfQ1JfQUxHTykgPT0gSEFTSF9BTEdPU0VMRUNUSU9OX1NIQTI1NikgPyAgMzJVIDogMTZVICkgKSApCiAjZWxzZQogI2RlZmluZSBIQVNIX0RJR0VTVF9MRU5HVEgoKSAoKFJFQURfQklUKEhBU0gtPkNSLCBIQVNIX0NSX0FMR08pID09IEhBU0hfQUxHT1NFTEVDVElPTl9TSEExKSAgID8gIDIwVSA6IDE2KQotI2VuZGlmCisjZW5kaWYgIC8qIEhBU0hfQ1JfTURNQVQqLwogLyoqCiAgICogQGJyaWVmICBSZXR1cm4gbnVtYmVyIG9mIHdvcmRzIGFscmVhZHkgcHVzaGVkIGluIHRoZSBGSUZPLgogICAqIEByZXR2YWwgTnVtYmVyIG9mIHdvcmRzIGFscmVhZHkgcHVzaGVkIGluIHRoZSBGSUZPCkBAIC00MjgsNyArNDI4LDggQEAKICAgKiBAcGFyYW0gX19TSVpFX18gaW5wdXQgZGF0YSBidWZmZXIgc2l6ZS4KICAgKiBAcmV0dmFsIFNFVCAoX19TSVpFX18gaXMgdmFsaWQpIG9yIFJFU0VUIChfX1NJWkVfXyBpcyBpbnZhbGlkKQogICAqLwotI2RlZmluZSBJU19ITUFDX0RNQV9NVUxUSUJVRkZFUl9TSVpFKF9fSEFORExFX18sX19TSVpFX18pICAoKCgoX19IQU5ETEVfXyktPkRpZ2VzdENhbGN1bGF0aW9uRGlzYWJsZSkgPT0gUkVTRVQpIHx8ICgoKF9fU0laRV9fKSAlIDRVKSA9PSAwVSkpCisjZGVmaW5lIElTX0hNQUNfRE1BX01VTFRJQlVGRkVSX1NJWkUoX19IQU5ETEVfXyxfX1NJWkVfXykgICgoKChfX0hBTkRMRV9fKS0+RGlnZXN0Q2FsY3VsYXRpb25EaXNhYmxlKSA9PSBSRVNFVClcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKChfX1NJWkVfXykgJSA0VSkgPT0gMFUpKQogLyoqCiAgICogQGJyaWVmIEVuc3VyZSB0aGF0IGhhbmRsZSBwaGFzZSBpcyBzZXQgdG8gSEFTSCBwcm9jZXNzaW5nLgogICAqIEBwYXJhbSBfX0hBTkRMRV9fIEhBU0ggaGFuZGxlLgpAQCAtNDcxLDcgKzQ3Miw4IEBACiB2b2lkIEhBTF9IQVNIX0Vycm9yQ2FsbGJhY2soSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCk7CiAvKiBDYWxsYmFja3MgUmVnaXN0ZXIvVW5SZWdpc3RlciBmdW5jdGlvbnMgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmIChVU0VfSEFMX0hBU0hfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfSEFTSF9SZWdpc3RlckNhbGxiYWNrKEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gsIEhBTF9IQVNIX0NhbGxiYWNrSURUeXBlRGVmIENhbGxiYWNrSUQsIHBIQVNIX0NhbGxiYWNrVHlwZURlZiBwQ2FsbGJhY2spOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0hBU0hfUmVnaXN0ZXJDYWxsYmFjayhIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoLCBIQUxfSEFTSF9DYWxsYmFja0lEVHlwZURlZiBDYWxsYmFja0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwSEFTSF9DYWxsYmFja1R5cGVEZWYgcENhbGxiYWNrKTsKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9IQVNIX1VuUmVnaXN0ZXJDYWxsYmFjayhIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoLCBIQUxfSEFTSF9DYWxsYmFja0lEVHlwZURlZiBDYWxsYmFja0lEKTsKICNlbmRpZiAvKiBVU0VfSEFMX0hBU0hfUkVHSVNURVJfQ0FMTEJBQ0tTICovCiAKQEAgLTQ4NiwxMiArNDg4LDE2IEBACiAKIAogLyogSEFTSCBwcm9jZXNzaW5nIHVzaW5nIHBvbGxpbmcgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9IQVNIX1NIQTFfU3RhcnQoSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCwgdWludDhfdCAqcEluQnVmZmVyLCB1aW50MzJfdCBTaXplLCB1aW50OF90KiBwT3V0QnVmZmVyLCB1aW50MzJfdCBUaW1lb3V0KTsKLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9IQVNIX01ENV9TdGFydChIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoLCB1aW50OF90ICpwSW5CdWZmZXIsIHVpbnQzMl90IFNpemUsIHVpbnQ4X3QqIHBPdXRCdWZmZXIsIHVpbnQzMl90IFRpbWVvdXQpOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0hBU0hfU0hBMV9TdGFydChIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoLCB1aW50OF90ICpwSW5CdWZmZXIsIHVpbnQzMl90IFNpemUsIHVpbnQ4X3QgKnBPdXRCdWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IFRpbWVvdXQpOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0hBU0hfTUQ1X1N0YXJ0KEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gsIHVpbnQ4X3QgKnBJbkJ1ZmZlciwgdWludDMyX3QgU2l6ZSwgdWludDhfdCAqcE91dEJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBUaW1lb3V0KTsKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9IQVNIX01ENV9BY2NtbHQoSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCwgdWludDhfdCAqcEluQnVmZmVyLCB1aW50MzJfdCBTaXplKTsKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9IQVNIX1NIQTFfQWNjbWx0KEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gsIHVpbnQ4X3QgKnBJbkJ1ZmZlciwgdWludDMyX3QgU2l6ZSk7Ci1IQUxfU3RhdHVzVHlwZURlZiBIQUxfSEFTSF9NRDVfQWNjbWx0X0VuZChIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoLCB1aW50OF90ICpwSW5CdWZmZXIsIHVpbnQzMl90IFNpemUsIHVpbnQ4X3QqIHBPdXRCdWZmZXIsIHVpbnQzMl90IFRpbWVvdXQpOwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0hBU0hfU0hBMV9BY2NtbHRfRW5kKEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gsIHVpbnQ4X3QgKnBJbkJ1ZmZlciwgdWludDMyX3QgU2l6ZSwgdWludDhfdCogcE91dEJ1ZmZlciwgdWludDMyX3QgVGltZW91dCk7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfSEFTSF9NRDVfQWNjbWx0X0VuZChIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoLCB1aW50OF90ICpwSW5CdWZmZXIsIHVpbnQzMl90IFNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpwT3V0QnVmZmVyLCB1aW50MzJfdCBUaW1lb3V0KTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9IQVNIX1NIQTFfQWNjbWx0X0VuZChIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoLCB1aW50OF90ICpwSW5CdWZmZXIsIHVpbnQzMl90IFNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqcE91dEJ1ZmZlciwgdWludDMyX3QgVGltZW91dCk7CiAKIAogLyoqCkBAIC01MDMsMTIgKzUwOSwxNiBAQAogICAqLwogCiAvKiBIQVNIIHByb2Nlc3NpbmcgdXNpbmcgSVQgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0hBU0hfU0hBMV9TdGFydF9JVChIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoLCB1aW50OF90ICpwSW5CdWZmZXIsIHVpbnQzMl90IFNpemUsIHVpbnQ4X3QqIHBPdXRCdWZmZXIpOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0hBU0hfU0hBMV9TdGFydF9JVChIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoLCB1aW50OF90ICpwSW5CdWZmZXIsIHVpbnQzMl90IFNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnBPdXRCdWZmZXIpOwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0hBU0hfU0hBMV9BY2NtbHRfSVQoSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCwgdWludDhfdCAqcEluQnVmZmVyLCB1aW50MzJfdCBTaXplKTsKLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9IQVNIX1NIQTFfQWNjbWx0X0VuZF9JVChIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoLCB1aW50OF90ICpwSW5CdWZmZXIsIHVpbnQzMl90IFNpemUsIHVpbnQ4X3QqIHBPdXRCdWZmZXIpOwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0hBU0hfTUQ1X1N0YXJ0X0lUKEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gsIHVpbnQ4X3QgKnBJbkJ1ZmZlciwgdWludDMyX3QgU2l6ZSwgdWludDhfdCogcE91dEJ1ZmZlcik7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfSEFTSF9TSEExX0FjY21sdF9FbmRfSVQoSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCwgdWludDhfdCAqcEluQnVmZmVyLCB1aW50MzJfdCBTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnBPdXRCdWZmZXIpOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0hBU0hfTUQ1X1N0YXJ0X0lUKEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gsIHVpbnQ4X3QgKnBJbkJ1ZmZlciwgdWludDMyX3QgU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpwT3V0QnVmZmVyKTsKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9IQVNIX01ENV9BY2NtbHRfSVQoSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCwgdWludDhfdCAqcEluQnVmZmVyLCB1aW50MzJfdCBTaXplKTsKLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9IQVNIX01ENV9BY2NtbHRfRW5kX0lUKEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gsIHVpbnQ4X3QgKnBJbkJ1ZmZlciwgdWludDMyX3QgU2l6ZSwgdWludDhfdCogcE91dEJ1ZmZlcik7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfSEFTSF9NRDVfQWNjbWx0X0VuZF9JVChIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoLCB1aW50OF90ICpwSW5CdWZmZXIsIHVpbnQzMl90IFNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpwT3V0QnVmZmVyKTsKIHZvaWQgSEFMX0hBU0hfSVJRSGFuZGxlcihIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoKTsKIC8qKgogICAqIEB9CkBAIC01MjAsOSArNTMwLDkgQEAKIAogLyogSEFTSCBwcm9jZXNzaW5nIHVzaW5nIERNQSAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9IQVNIX1NIQTFfU3RhcnRfRE1BKEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gsIHVpbnQ4X3QgKnBJbkJ1ZmZlciwgdWludDMyX3QgU2l6ZSk7Ci1IQUxfU3RhdHVzVHlwZURlZiBIQUxfSEFTSF9TSEExX0ZpbmlzaChIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoLCB1aW50OF90KiBwT3V0QnVmZmVyLCB1aW50MzJfdCBUaW1lb3V0KTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9IQVNIX1NIQTFfRmluaXNoKEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gsIHVpbnQ4X3QgKnBPdXRCdWZmZXIsIHVpbnQzMl90IFRpbWVvdXQpOwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0hBU0hfTUQ1X1N0YXJ0X0RNQShIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoLCB1aW50OF90ICpwSW5CdWZmZXIsIHVpbnQzMl90IFNpemUpOwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0hBU0hfTUQ1X0ZpbmlzaChIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoLCB1aW50OF90KiBwT3V0QnVmZmVyLCB1aW50MzJfdCBUaW1lb3V0KTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9IQVNIX01ENV9GaW5pc2goSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCwgdWludDhfdCAqcE91dEJ1ZmZlciwgdWludDMyX3QgVGltZW91dCk7CiAKIC8qKgogICAqIEB9CkBAIC01MzMsOCArNTQzLDEwIEBACiAgICovCiAKIC8qIEhBU0gtTUFDIHByb2Nlc3NpbmcgdXNpbmcgcG9sbGluZyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfSE1BQ19TSEExX1N0YXJ0KEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gsIHVpbnQ4X3QgKnBJbkJ1ZmZlciwgdWludDMyX3QgU2l6ZSwgdWludDhfdCogcE91dEJ1ZmZlciwgdWludDMyX3QgVGltZW91dCk7Ci1IQUxfU3RhdHVzVHlwZURlZiBIQUxfSE1BQ19NRDVfU3RhcnQoSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCwgdWludDhfdCAqcEluQnVmZmVyLCB1aW50MzJfdCBTaXplLCB1aW50OF90KiBwT3V0QnVmZmVyLCB1aW50MzJfdCBUaW1lb3V0KTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9ITUFDX1NIQTFfU3RhcnQoSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCwgdWludDhfdCAqcEluQnVmZmVyLCB1aW50MzJfdCBTaXplLCB1aW50OF90ICpwT3V0QnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBUaW1lb3V0KTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9ITUFDX01ENV9TdGFydChIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoLCB1aW50OF90ICpwSW5CdWZmZXIsIHVpbnQzMl90IFNpemUsIHVpbnQ4X3QgKnBPdXRCdWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgVGltZW91dCk7CiAKIC8qKgogICAqIEB9CkBAIC01NDQsOCArNTU2LDEwIEBACiAgICogQHsKICAgKi8KIAotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0hNQUNfTUQ1X1N0YXJ0X0lUKEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gsIHVpbnQ4X3QgKnBJbkJ1ZmZlciwgdWludDMyX3QgU2l6ZSwgdWludDhfdCogcE91dEJ1ZmZlcik7Ci1IQUxfU3RhdHVzVHlwZURlZiBIQUxfSE1BQ19TSEExX1N0YXJ0X0lUKEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gsIHVpbnQ4X3QgKnBJbkJ1ZmZlciwgdWludDMyX3QgU2l6ZSwgdWludDhfdCogcE91dEJ1ZmZlcik7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfSE1BQ19NRDVfU3RhcnRfSVQoSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCwgdWludDhfdCAqcEluQnVmZmVyLCB1aW50MzJfdCBTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnBPdXRCdWZmZXIpOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0hNQUNfU0hBMV9TdGFydF9JVChIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoLCB1aW50OF90ICpwSW5CdWZmZXIsIHVpbnQzMl90IFNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnBPdXRCdWZmZXIpOwogCiAvKioKICAgKiBAfQpAQCAtNTcxLDggKzU4NSw4IEBACiAvKiBQZXJpcGhlcmFsIFN0YXRlIG1ldGhvZHMgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogSEFMX0hBU0hfU3RhdGVUeXBlRGVmIEhBTF9IQVNIX0dldFN0YXRlKEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gpOwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0hBU0hfR2V0U3RhdHVzKEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gpOwotdm9pZCBIQUxfSEFTSF9Db250ZXh0U2F2aW5nKEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gsIHVpbnQ4X3QqIHBNZW1CdWZmZXIpOwotdm9pZCBIQUxfSEFTSF9Db250ZXh0UmVzdG9yaW5nKEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gsIHVpbnQ4X3QqIHBNZW1CdWZmZXIpOwordm9pZCBIQUxfSEFTSF9Db250ZXh0U2F2aW5nKEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gsIHVpbnQ4X3QgKnBNZW1CdWZmZXIpOwordm9pZCBIQUxfSEFTSF9Db250ZXh0UmVzdG9yaW5nKEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gsIHVpbnQ4X3QgKnBNZW1CdWZmZXIpOwogdm9pZCBIQUxfSEFTSF9Td0ZlZWRfUHJvY2Vzc1N1c3BlbmQoSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCk7CiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfSEFTSF9ETUFGZWVkX1Byb2Nlc3NTdXNwZW5kKEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gpOwogdWludDMyX3QgSEFMX0hBU0hfR2V0RXJyb3IoSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCk7CkBAIC01OTIsMTQgKzYwNiwxOCBAQAogICAqLwogCiAvKiBQcml2YXRlIGZ1bmN0aW9ucyAqLwotSEFMX1N0YXR1c1R5cGVEZWYgSEFTSF9TdGFydChIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoLCB1aW50OF90ICpwSW5CdWZmZXIsIHVpbnQzMl90IFNpemUsIHVpbnQ4X3QqIHBPdXRCdWZmZXIsIHVpbnQzMl90IFRpbWVvdXQsIHVpbnQzMl90IEFsZ29yaXRobSk7CitIQUxfU3RhdHVzVHlwZURlZiBIQVNIX1N0YXJ0KEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gsIHVpbnQ4X3QgKnBJbkJ1ZmZlciwgdWludDMyX3QgU2l6ZSwgdWludDhfdCAqcE91dEJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgVGltZW91dCwgdWludDMyX3QgQWxnb3JpdGhtKTsKIEhBTF9TdGF0dXNUeXBlRGVmIEhBU0hfQWNjdW11bGF0ZShIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoLCB1aW50OF90ICpwSW5CdWZmZXIsIHVpbnQzMl90IFNpemUsIHVpbnQzMl90IEFsZ29yaXRobSk7CiBIQUxfU3RhdHVzVHlwZURlZiBIQVNIX0FjY3VtdWxhdGVfSVQoSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCwgdWludDhfdCAqcEluQnVmZmVyLCB1aW50MzJfdCBTaXplLCB1aW50MzJfdCBBbGdvcml0aG0pOwotSEFMX1N0YXR1c1R5cGVEZWYgSEFTSF9TdGFydF9JVChIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoLCB1aW50OF90ICpwSW5CdWZmZXIsIHVpbnQzMl90IFNpemUsIHVpbnQ4X3QqIHBPdXRCdWZmZXIsIHVpbnQzMl90IEFsZ29yaXRobSk7CitIQUxfU3RhdHVzVHlwZURlZiBIQVNIX1N0YXJ0X0lUKEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gsIHVpbnQ4X3QgKnBJbkJ1ZmZlciwgdWludDMyX3QgU2l6ZSwgdWludDhfdCAqcE91dEJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgQWxnb3JpdGhtKTsKIEhBTF9TdGF0dXNUeXBlRGVmIEhBU0hfU3RhcnRfRE1BKEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gsIHVpbnQ4X3QgKnBJbkJ1ZmZlciwgdWludDMyX3QgU2l6ZSwgdWludDMyX3QgQWxnb3JpdGhtKTsKLUhBTF9TdGF0dXNUeXBlRGVmIEhBU0hfRmluaXNoKEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gsIHVpbnQ4X3QqIHBPdXRCdWZmZXIsIHVpbnQzMl90IFRpbWVvdXQpOwotSEFMX1N0YXR1c1R5cGVEZWYgSE1BQ19TdGFydChIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoLCB1aW50OF90ICpwSW5CdWZmZXIsIHVpbnQzMl90IFNpemUsIHVpbnQ4X3QqIHBPdXRCdWZmZXIsIHVpbnQzMl90IFRpbWVvdXQsIHVpbnQzMl90IEFsZ29yaXRobSk7Ci1IQUxfU3RhdHVzVHlwZURlZiBITUFDX1N0YXJ0X0lUKEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gsIHVpbnQ4X3QgKnBJbkJ1ZmZlciwgdWludDMyX3QgU2l6ZSwgdWludDhfdCogcE91dEJ1ZmZlciwgdWludDMyX3QgQWxnb3JpdGhtKTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBU0hfRmluaXNoKEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gsIHVpbnQ4X3QgKnBPdXRCdWZmZXIsIHVpbnQzMl90IFRpbWVvdXQpOworSEFMX1N0YXR1c1R5cGVEZWYgSE1BQ19TdGFydChIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoLCB1aW50OF90ICpwSW5CdWZmZXIsIHVpbnQzMl90IFNpemUsIHVpbnQ4X3QgKnBPdXRCdWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IFRpbWVvdXQsIHVpbnQzMl90IEFsZ29yaXRobSk7CitIQUxfU3RhdHVzVHlwZURlZiBITUFDX1N0YXJ0X0lUKEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gsIHVpbnQ4X3QgKnBJbkJ1ZmZlciwgdWludDMyX3QgU2l6ZSwgdWludDhfdCAqcE91dEJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgQWxnb3JpdGhtKTsKIEhBTF9TdGF0dXNUeXBlRGVmIEhNQUNfU3RhcnRfRE1BKEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gsIHVpbnQ4X3QgKnBJbkJ1ZmZlciwgdWludDMyX3QgU2l6ZSwgdWludDMyX3QgQWxnb3JpdGhtKTsKIAogLyoqCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJmNHh4X2hhbF9oYXNoX2V4LmggYi9JbmMvc3RtMzJmNHh4X2hhbF9oYXNoX2V4LmgKaW5kZXggNjU4YTcyNy4uMGE5ODQ0YyAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZjR4eF9oYWxfaGFzaF9leC5oCisrKyBiL0luYy9zdG0zMmY0eHhfaGFsX2hhc2hfZXguaApAQCAtMjIsNyArMjIsNyBAQAogI2RlZmluZSBTVE0zMkY0eHhfSEFMX0hBU0hfRVhfSAogCiAjaWZkZWYgX19jcGx1c3BsdXMKLSBleHRlcm4gIkMiIHsKK2V4dGVybiAiQyIgewogI2VuZGlmCiAKIC8qIEluY2x1ZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC01MSwxMiArNTEsMTYgQEAKICAgKiBAewogICAqLwogCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfSEFTSEV4X1NIQTIyNF9TdGFydChIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoLCB1aW50OF90ICpwSW5CdWZmZXIsIHVpbnQzMl90IFNpemUsIHVpbnQ4X3QqIHBPdXRCdWZmZXIsIHVpbnQzMl90IFRpbWVvdXQpOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0hBU0hFeF9TSEEyMjRfU3RhcnQoSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCwgdWludDhfdCAqcEluQnVmZmVyLCB1aW50MzJfdCBTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqcE91dEJ1ZmZlciwgdWludDMyX3QgVGltZW91dCk7CiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfSEFTSEV4X1NIQTIyNF9BY2NtbHQoSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCwgdWludDhfdCAqcEluQnVmZmVyLCB1aW50MzJfdCBTaXplKTsKLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9IQVNIRXhfU0hBMjI0X0FjY21sdF9FbmQoSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCwgdWludDhfdCAqcEluQnVmZmVyLCB1aW50MzJfdCBTaXplLCB1aW50OF90KiBwT3V0QnVmZmVyLCB1aW50MzJfdCBUaW1lb3V0KTsKLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9IQVNIRXhfU0hBMjU2X1N0YXJ0KEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gsIHVpbnQ4X3QgKnBJbkJ1ZmZlciwgdWludDMyX3QgU2l6ZSwgdWludDhfdCogcE91dEJ1ZmZlciwgdWludDMyX3QgVGltZW91dCk7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfSEFTSEV4X1NIQTIyNF9BY2NtbHRfRW5kKEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gsIHVpbnQ4X3QgKnBJbkJ1ZmZlciwgdWludDMyX3QgU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqcE91dEJ1ZmZlciwgdWludDMyX3QgVGltZW91dCk7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfSEFTSEV4X1NIQTI1Nl9TdGFydChIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoLCB1aW50OF90ICpwSW5CdWZmZXIsIHVpbnQzMl90IFNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpwT3V0QnVmZmVyLCB1aW50MzJfdCBUaW1lb3V0KTsKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9IQVNIRXhfU0hBMjU2X0FjY21sdChIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoLCB1aW50OF90ICpwSW5CdWZmZXIsIHVpbnQzMl90IFNpemUpOwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0hBU0hFeF9TSEEyNTZfQWNjbWx0X0VuZChIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoLCB1aW50OF90ICpwSW5CdWZmZXIsIHVpbnQzMl90IFNpemUsIHVpbnQ4X3QqIHBPdXRCdWZmZXIsIHVpbnQzMl90IFRpbWVvdXQpOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0hBU0hFeF9TSEEyNTZfQWNjbWx0X0VuZChIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoLCB1aW50OF90ICpwSW5CdWZmZXIsIHVpbnQzMl90IFNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnBPdXRCdWZmZXIsIHVpbnQzMl90IFRpbWVvdXQpOwogCiAvKioKICAgKiBAfQpAQCAtNjYsMTIgKzcwLDE2IEBACiAgICogQHsKICAgKi8KIAotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0hBU0hFeF9TSEEyMjRfU3RhcnRfSVQoSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCwgdWludDhfdCAqcEluQnVmZmVyLCB1aW50MzJfdCBTaXplLCB1aW50OF90KiBwT3V0QnVmZmVyKTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9IQVNIRXhfU0hBMjI0X1N0YXJ0X0lUKEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gsIHVpbnQ4X3QgKnBJbkJ1ZmZlciwgdWludDMyX3QgU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnBPdXRCdWZmZXIpOwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0hBU0hFeF9TSEEyMjRfQWNjbWx0X0lUKEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gsIHVpbnQ4X3QgKnBJbkJ1ZmZlciwgdWludDMyX3QgU2l6ZSk7Ci1IQUxfU3RhdHVzVHlwZURlZiBIQUxfSEFTSEV4X1NIQTIyNF9BY2NtbHRfRW5kX0lUKEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gsIHVpbnQ4X3QgKnBJbkJ1ZmZlciwgdWludDMyX3QgU2l6ZSwgdWludDhfdCogcE91dEJ1ZmZlcik7Ci1IQUxfU3RhdHVzVHlwZURlZiBIQUxfSEFTSEV4X1NIQTI1Nl9TdGFydF9JVChIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoLCB1aW50OF90ICpwSW5CdWZmZXIsIHVpbnQzMl90IFNpemUsIHVpbnQ4X3QqIHBPdXRCdWZmZXIpOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0hBU0hFeF9TSEEyMjRfQWNjbWx0X0VuZF9JVChIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoLCB1aW50OF90ICpwSW5CdWZmZXIsIHVpbnQzMl90IFNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnBPdXRCdWZmZXIpOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0hBU0hFeF9TSEEyNTZfU3RhcnRfSVQoSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCwgdWludDhfdCAqcEluQnVmZmVyLCB1aW50MzJfdCBTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqcE91dEJ1ZmZlcik7CiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfSEFTSEV4X1NIQTI1Nl9BY2NtbHRfSVQoSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCwgdWludDhfdCAqcEluQnVmZmVyLCB1aW50MzJfdCBTaXplKTsKLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9IQVNIRXhfU0hBMjU2X0FjY21sdF9FbmRfSVQoSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCwgdWludDhfdCAqcEluQnVmZmVyLCB1aW50MzJfdCBTaXplLCB1aW50OF90KiBwT3V0QnVmZmVyKTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9IQVNIRXhfU0hBMjU2X0FjY21sdF9FbmRfSVQoSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCwgdWludDhfdCAqcEluQnVmZmVyLCB1aW50MzJfdCBTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpwT3V0QnVmZmVyKTsKIAogLyoqCiAgICogQH0KQEAgLTgxLDkgKzg5LDkgQEAKICAgKiBAewogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0hBU0hFeF9TSEEyMjRfU3RhcnRfRE1BKEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gsIHVpbnQ4X3QgKnBJbkJ1ZmZlciwgdWludDMyX3QgU2l6ZSk7Ci1IQUxfU3RhdHVzVHlwZURlZiBIQUxfSEFTSEV4X1NIQTIyNF9GaW5pc2goSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCwgdWludDhfdCogcE91dEJ1ZmZlciwgdWludDMyX3QgVGltZW91dCk7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfSEFTSEV4X1NIQTIyNF9GaW5pc2goSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCwgdWludDhfdCAqcE91dEJ1ZmZlciwgdWludDMyX3QgVGltZW91dCk7CiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfSEFTSEV4X1NIQTI1Nl9TdGFydF9ETUEoSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCwgdWludDhfdCAqcEluQnVmZmVyLCB1aW50MzJfdCBTaXplKTsKLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9IQVNIRXhfU0hBMjU2X0ZpbmlzaChIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoLCB1aW50OF90KiBwT3V0QnVmZmVyLCB1aW50MzJfdCBUaW1lb3V0KTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9IQVNIRXhfU0hBMjU2X0ZpbmlzaChIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoLCB1aW50OF90ICpwT3V0QnVmZmVyLCB1aW50MzJfdCBUaW1lb3V0KTsKIAogLyoqCiAgICogQH0KQEAgLTkyLDggKzEwMCwxMCBAQAogLyoqIEBhZGR0b2dyb3VwIEhBU0hFeF9FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXA0IEhNQUMgZXh0ZW5kZWQgcHJvY2Vzc2luZyBmdW5jdGlvbnMgaW4gcG9sbGluZyBtb2RlCiAgICogQHsKICAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9ITUFDRXhfU0hBMjI0X1N0YXJ0KEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gsIHVpbnQ4X3QgKnBJbkJ1ZmZlciwgdWludDMyX3QgU2l6ZSwgdWludDhfdCogcE91dEJ1ZmZlciwgdWludDMyX3QgVGltZW91dCk7Ci1IQUxfU3RhdHVzVHlwZURlZiBIQUxfSE1BQ0V4X1NIQTI1Nl9TdGFydChIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoLCB1aW50OF90ICpwSW5CdWZmZXIsIHVpbnQzMl90IFNpemUsIHVpbnQ4X3QqIHBPdXRCdWZmZXIsIHVpbnQzMl90IFRpbWVvdXQpOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0hNQUNFeF9TSEEyMjRfU3RhcnQoSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCwgdWludDhfdCAqcEluQnVmZmVyLCB1aW50MzJfdCBTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqcE91dEJ1ZmZlciwgdWludDMyX3QgVGltZW91dCk7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfSE1BQ0V4X1NIQTI1Nl9TdGFydChIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoLCB1aW50OF90ICpwSW5CdWZmZXIsIHVpbnQzMl90IFNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpwT3V0QnVmZmVyLCB1aW50MzJfdCBUaW1lb3V0KTsKIC8qKgogICAqIEB9CiAgICovCkBAIC0xMDIsOCArMTEyLDEwIEBACiAgICogQHsKICAgKi8KIAotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0hNQUNFeF9TSEEyMjRfU3RhcnRfSVQoSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCwgdWludDhfdCAqcEluQnVmZmVyLCB1aW50MzJfdCBTaXplLCB1aW50OF90KiBwT3V0QnVmZmVyKTsKLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9ITUFDRXhfU0hBMjU2X1N0YXJ0X0lUKEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gsIHVpbnQ4X3QgKnBJbkJ1ZmZlciwgdWludDMyX3QgU2l6ZSwgdWludDhfdCogcE91dEJ1ZmZlcik7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfSE1BQ0V4X1NIQTIyNF9TdGFydF9JVChIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoLCB1aW50OF90ICpwSW5CdWZmZXIsIHVpbnQzMl90IFNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpwT3V0QnVmZmVyKTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9ITUFDRXhfU0hBMjU2X1N0YXJ0X0lUKEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gsIHVpbnQ4X3QgKnBJbkJ1ZmZlciwgdWludDMyX3QgU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnBPdXRCdWZmZXIpOwogCiAvKioKICAgKiBAfQpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZjR4eF9oYWxfaGNkLmggYi9JbmMvc3RtMzJmNHh4X2hhbF9oY2QuaAppbmRleCAzMGMxMWYyLi5jOWFjMzhhIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmNHh4X2hhbF9oY2QuaAorKysgYi9JbmMvc3RtMzJmNHh4X2hhbF9oY2QuaApAQCAtMzMsNyArMzMsNyBAQAogICAqIEB7CiAgICovCiAKLS8qKiBAYWRkdG9ncm91cCBIQ0QKKy8qKiBAYWRkdG9ncm91cCBIQ0QgSENECiAgICogQHsKICAgKi8KIApAQCAtMTEyLDYgKzExMiwxMCBAQAogI2RlZmluZSBIQ0RfU1BFRURfRlVMTCAgICAgICAgICAgICAgIFVTQkhfRlNMU19TUEVFRAogI2RlZmluZSBIQ0RfU1BFRURfTE9XICAgICAgICAgICAgICAgIFVTQkhfRlNMU19TUEVFRAogCisjZGVmaW5lIEhDRF9ERVZJQ0VfU1BFRURfSElHSCAgICAgICAgICAgICAgIDBVCisjZGVmaW5lIEhDRF9ERVZJQ0VfU1BFRURfRlVMTCAgICAgICAgICAgICAgIDFVCisjZGVmaW5lIEhDRF9ERVZJQ0VfU1BFRURfTE9XICAgICAgICAgICAgICAgIDJVCisKIC8qKgogICAqIEB9CiAgICovCkBAIC0yNjMsOSArMjY3LDYgQEAKIC8qKgogICAqIEB9CiAgICovCi0vKioKLSAgKiBAfQotICAqLwogCiAvKiBQZXJpcGhlcmFsIFN0YXRlIGZ1bmN0aW9ucyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyoqIEBhZGR0b2dyb3VwIEhDRF9FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXA0IFBlcmlwaGVyYWwgU3RhdGUgZnVuY3Rpb25zCkBAIC0yOTQsMjAgKzI5NSwxMSBAQAogICAqIEB9CiAgICovCiAvKiBQcml2YXRlIGZ1bmN0aW9ucyBwcm90b3R5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyoqIEBkZWZncm91cCBIQ0RfUHJpdmF0ZV9GdW5jdGlvbnNfUHJvdG90eXBlcyBIQ0QgUHJpdmF0ZSBGdW5jdGlvbnMgUHJvdG90eXBlcwotICAqIEB7Ci0gICovCiAKLS8qKgorIC8qKgogICAqIEB9CiAgICovCi0KLS8qIFByaXZhdGUgZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKiogQGRlZmdyb3VwIEhDRF9Qcml2YXRlX0Z1bmN0aW9ucyBIQ0QgUHJpdmF0ZSBGdW5jdGlvbnMKLSAgKiBAewotICAqLwotCi0vKioKKyAvKioKICAgKiBAfQogICAqLwogI2VuZGlmIC8qIGRlZmluZWQgKFVTQl9PVEdfRlMpIHx8IGRlZmluZWQgKFVTQl9PVEdfSFMpICovCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJmNHh4X2hhbF9pMmMuaCBiL0luYy9zdG0zMmY0eHhfaGFsX2kyYy5oCmluZGV4IGZmNTc2NTUuLjlhNjIyYjggMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmY0eHhfaGFsX2kyYy5oCisrKyBiL0luYy9zdG0zMmY0eHhfaGFsX2kyYy5oCkBAIC04NSw3ICs4NSw3IEBACiAgICogICAgICAgICAgICAgMDEgOiBBYm9ydCAoQWJvcnQgdXNlciByZXF1ZXN0IG9uIGdvaW5nKQogICAqICAgICAgICAgICAgIDEwIDogVGltZW91dAogICAqICAgICAgICAgICAgIDExIDogRXJyb3IKLSAgKiAgICAgICAgICBiNSAgICAgUGVyaXBoZXJhbCBpbml0aWxpc2F0aW9uIHN0YXR1cworICAqICAgICAgICAgIGI1ICAgICBQZXJpcGhlcmFsIGluaXRpYWxpemF0aW9uIHN0YXR1cwogICAqICAgICAgICAgICAgIDAgIDogUmVzZXQgKFBlcmlwaGVyYWwgbm90IGluaXRpYWxpemVkKQogICAqICAgICAgICAgICAgIDEgIDogSW5pdCBkb25lIChQZXJpcGhlcmFsIGluaXRpYWxpemVkIGFuZCByZWFkeSB0byB1c2UuIEhBTCBJMkMgSW5pdCBmdW5jdGlvbiBjYWxsZWQpCiAgICogICAgICAgICAgYjQgICAgIChub3QgdXNlZCkKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmY0eHhfaGFsX2kycy5oIGIvSW5jL3N0bTMyZjR4eF9oYWxfaTJzLmgKaW5kZXggMjAzZmZjMS4uMWU5Njc2ZiAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZjR4eF9oYWxfaTJzLmgKKysrIGIvSW5jL3N0bTMyZjR4eF9oYWxfaTJzLmgKQEAgLTUxNiw3ICs1MTYsNyBAQAogICAqLwogCiAvKiogQGJyaWVmICBDaGVjayB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgU1BJIGZsYWcgaXMgc2V0IG9yIG5vdC4KLSAgKiBAcGFyYW0gIF9fU1JfXyAgY29weSBvZiBJMlMgU1IgcmVnc2l0ZXIuCisgICogQHBhcmFtICBfX1NSX18gIGNvcHkgb2YgSTJTIFNSIHJlZ2lzdGVyLgogICAqIEBwYXJhbSAgX19GTEFHX18gc3BlY2lmaWVzIHRoZSBmbGFnIHRvIGNoZWNrLgogICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAgKiAgICAgICAgICAgIEBhcmcgSTJTX0ZMQUdfUlhORTogUmVjZWl2ZSBidWZmZXIgbm90IGVtcHR5IGZsYWcKQEAgLTUzMSw3ICs1MzEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgKChfX0ZMQUdfXykgJiBJMlNfRkxBR19NQVNLKSkgPT0gKChfX0ZMQUdfXykgJiBJMlNfRkxBR19NQVNLKSkgPyBTRVQgOiBSRVNFVCkKIAogLyoqIEBicmllZiAgQ2hlY2sgd2hldGhlciB0aGUgc3BlY2lmaWVkIFNQSSBJbnRlcnJ1cHQgaXMgc2V0IG9yIG5vdC4KLSAgKiBAcGFyYW0gIF9fQ1IyX18gIGNvcHkgb2YgSTJTIENSMiByZWdzaXRlci4KKyAgKiBAcGFyYW0gIF9fQ1IyX18gIGNvcHkgb2YgSTJTIENSMiByZWdpc3Rlci4KICAgKiBAcGFyYW0gIF9fSU5URVJSVVBUX18gc3BlY2lmaWVzIHRoZSBTUEkgaW50ZXJydXB0IHNvdXJjZSB0byBjaGVjay4KICAgKiAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAgICogICAgICAgICAgICBAYXJnIEkyU19JVF9UWEU6IFR4IGJ1ZmZlciBlbXB0eSBpbnRlcnJ1cHQgZW5hYmxlCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJmNHh4X2hhbF9pcmRhLmggYi9JbmMvc3RtMzJmNHh4X2hhbF9pcmRhLmgKaW5kZXggYTM5MzU1NS4uNGQ4M2FiYyAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZjR4eF9oYWxfaXJkYS5oCisrKyBiL0luYy9zdG0zMmY0eHhfaGFsX2lyZGEuaApAQCAtODMsOSArODMsOSBAQAogICAqICAgICAgICAgICAgIDAxIDogKE5vdCBVc2VkKQogICAqICAgICAgICAgICAgIDEwIDogVGltZW91dAogICAqICAgICAgICAgICAgIDExIDogRXJyb3IKLSAgKiAgICAgICAgICBiNSAgICAgSVAgaW5pdGlsaXNhdGlvbiBzdGF0dXMKKyAgKiAgICAgICAgICBiNSAgICAgSVAgaW5pdGlhbGlzYXRpb24gc3RhdHVzCiAgICogICAgICAgICAgICAgMCAgOiBSZXNldCAoSVAgbm90IGluaXRpYWxpemVkKQotICAqICAgICAgICAgICAgIDEgIDogSW5pdCBkb25lIChJUCBub3QgaW5pdGlhbGl6ZWQuIEhBTCBJUkRBIEluaXQgZnVuY3Rpb24gYWxyZWFkeSBjYWxsZWQpCisgICogICAgICAgICAgICAgMSAgOiBJbml0IGRvbmUgKElQIGluaXRpYWxpemVkLiBIQUwgSVJEQSBJbml0IGZ1bmN0aW9uIGFscmVhZHkgY2FsbGVkKQogICAqICAgICAgICAgIGI0LWIzICAobm90IHVzZWQpCiAgICogICAgICAgICAgICAgeHggOiBTaG91bGQgYmUgc2V0IHRvIDAwCiAgICogICAgICAgICAgYjIgICAgIEludHJpbnNpYyBwcm9jZXNzIHN0YXRlCkBAIC0xMDAsOSArMTAwLDkgQEAKICAgKiAgICAgICAgICBSeFN0YXRlIHZhbHVlIGNvZGluZyBmb2xsb3cgYmVsb3cgZGVzY3JpYmVkIGJpdG1hcCA6CiAgICogICAgICAgICAgYjctYjYgIChub3QgdXNlZCkKICAgKiAgICAgICAgICAgICB4eCA6IFNob3VsZCBiZSBzZXQgdG8gMDAKLSAgKiAgICAgICAgICBiNSAgICAgSVAgaW5pdGlsaXNhdGlvbiBzdGF0dXMKKyAgKiAgICAgICAgICBiNSAgICAgSVAgaW5pdGlhbGlzYXRpb24gc3RhdHVzCiAgICogICAgICAgICAgICAgMCAgOiBSZXNldCAoSVAgbm90IGluaXRpYWxpemVkKQotICAqICAgICAgICAgICAgIDEgIDogSW5pdCBkb25lIChJUCBub3QgaW5pdGlhbGl6ZWQpCisgICogICAgICAgICAgICAgMSAgOiBJbml0IGRvbmUgKElQIGluaXRpYWxpemVkKQogICAqICAgICAgICAgIGI0LWIyICAobm90IHVzZWQpCiAgICogICAgICAgICAgICB4eHggOiBTaG91bGQgYmUgc2V0IHRvIDAwMAogICAqICAgICAgICAgIGIxICAgICBSeCBzdGF0ZQpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZjR4eF9oYWxfaXdkZy5oIGIvSW5jL3N0bTMyZjR4eF9oYWxfaXdkZy5oCmluZGV4IGNlZDEwOTkuLjMyZjVmZjAgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmY0eHhfaGFsX2l3ZGcuaAorKysgYi9JbmMvc3RtMzJmNHh4X2hhbF9pd2RnLmgKQEAgLTg0LDEzICs4NCwxMCBAQAogI2RlZmluZSBJV0RHX1BSRVNDQUxFUl82NCAgICAgICAgICAgICAgIElXREdfUFJfUFJfMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSVdERyBwcmVzY2FsZXIgc2V0IHRvIDY0ICAqLwogI2RlZmluZSBJV0RHX1BSRVNDQUxFUl8xMjggICAgICAgICAgICAgIChJV0RHX1BSX1BSXzIgfCBJV0RHX1BSX1BSXzApICAgICAgICAgICAgICAgICAgIC8qITwgSVdERyBwcmVzY2FsZXIgc2V0IHRvIDEyOCAqLwogI2RlZmluZSBJV0RHX1BSRVNDQUxFUl8yNTYgICAgICAgICAgICAgIChJV0RHX1BSX1BSXzIgfCBJV0RHX1BSX1BSXzEpICAgICAgICAgICAgICAgICAgIC8qITwgSVdERyBwcmVzY2FsZXIgc2V0IHRvIDI1NiAqLwotCiAvKioKICAgKiBAfQogICAqLwogCi0KLQogLyoqCiAgICogQH0KICAgKi8KQEAgLTEyOCw3ICsxMjUsNyBAQAogICAqIEB7CiAgICovCiAvKiBJbml0aWFsaXphdGlvbi9TdGFydCBmdW5jdGlvbnMgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0lXREdfSW5pdChJV0RHX0hhbmRsZVR5cGVEZWYgKmhpd2RnKTsKK0hBTF9TdGF0dXNUeXBlRGVmICAgICBIQUxfSVdER19Jbml0KElXREdfSGFuZGxlVHlwZURlZiAqaGl3ZGcpOwogLyoqCiAgICogQH0KICAgKi8KQEAgLTEzNyw3ICsxMzQsNyBAQAogICAqIEB7CiAgICovCiAvKiBJL08gb3BlcmF0aW9uIGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0lXREdfUmVmcmVzaChJV0RHX0hhbmRsZVR5cGVEZWYgKmhpd2RnKTsKK0hBTF9TdGF0dXNUeXBlRGVmICAgICBIQUxfSVdER19SZWZyZXNoKElXREdfSGFuZGxlVHlwZURlZiAqaGl3ZGcpOwogLyoqCiAgICogQH0KICAgKi8KZGlmZiAtLWdpdCBhL0luYy9zdG0zMmY0eHhfaGFsX2xwdGltLmggYi9JbmMvc3RtMzJmNHh4X2hhbF9scHRpbS5oCmluZGV4IDBiY2U4N2IuLmE1YWI4MTUgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmY0eHhfaGFsX2xwdGltLmgKKysrIGIvSW5jL3N0bTMyZjR4eF9oYWxfbHB0aW0uaApAQCAtMzU2LDEwICszNTYsMTAgQEAKICAgKi8KICNpZiAoVVNFX0hBTF9MUFRJTV9SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkKICNkZWZpbmUgX19IQUxfTFBUSU1fUkVTRVRfSEFORExFX1NUQVRFKF9fSEFORExFX18pIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+U3RhdGUgICAgICAgICAgICAgPSBIQUxfTFBUSU1fU1RBVEVfUkVTRVQ7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+TXNwSW5pdENhbGxiYWNrICAgPSBOVUxMOyAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+TXNwRGVJbml0Q2FsbGJhY2sgPSBOVUxMOyAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPlN0YXRlICAgICAgICAgICAgID0gSEFMX0xQVElNX1NUQVRFX1JFU0VUOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+TXNwSW5pdENhbGxiYWNrICAgPSBOVUxMOyAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5Nc3BEZUluaXRDYWxsYmFjayA9IE5VTEw7ICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwKQogI2Vsc2UKICNkZWZpbmUgX19IQUxfTFBUSU1fUkVTRVRfSEFORExFX1NUQVRFKF9fSEFORExFX18pICgoX19IQU5ETEVfXyktPlN0YXRlID0gSEFMX0xQVElNX1NUQVRFX1JFU0VUKQogI2VuZGlmIC8qIFVTRV9IQUxfTFBUSU1fUkVHSVNURVJfQ0FMTEJBQ0tTICovCkBAIC00OTUsNyArNDk1LDggQEAKICAgKiBAcmV0dmFsIEludGVycnVwdCBzdGF0dXMuCiAgICovCiAKLSNkZWZpbmUgX19IQUxfTFBUSU1fR0VUX0lUX1NPVVJDRShfX0hBTkRMRV9fLCBfX0lOVEVSUlVQVF9fKSAoKCgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5JRVIgJiAoX19JTlRFUlJVUFRfXykpID09IChfX0lOVEVSUlVQVF9fKSkgPyBTRVQgOiBSRVNFVCkKKyNkZWZpbmUgX19IQUxfTFBUSU1fR0VUX0lUX1NPVVJDRShfX0hBTkRMRV9fLCBfX0lOVEVSUlVQVF9fKSAoKCgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5JRVJcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiAoX19JTlRFUlJVUFRfXykpID09IChfX0lOVEVSUlVQVF9fKSkgPyBTRVQgOiBSRVNFVCkKIAogLyoqIEBicmllZiAgTFBUSU0gT3B0aW9uIFJlZ2lzdGVyCiAgICogQHBhcmFtICBfX0hBTkRMRV9fIExQVElNIGhhbmRsZQpAQCAtNTEzLDUwICs1MTQsNTggQEAKICAgKiBAYnJpZWYgIEVuYWJsZSBpbnRlcnJ1cHQgb24gdGhlIExQVElNIFdha2UtdXAgVGltZXIgYXNzb2NpYXRlZCBFeHRpIGxpbmUuCiAgICogQHJldHZhbCBOb25lCiAgICovCi0jZGVmaW5lIF9fSEFMX0xQVElNX1dBS0VVUFRJTUVSX0VYVElfRU5BQkxFX0lUKCkgICAgICAgKEVYVEktPklNUiB8PSBMUFRJTV9FWFRJX0xJTkVfV0FLRVVQVElNRVJfRVZFTlQpCisjZGVmaW5lIF9fSEFMX0xQVElNX1dBS0VVUFRJTUVSX0VYVElfRU5BQkxFX0lUKCkgICAgICAgKEVYVEktPklNUlwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfD0gTFBUSU1fRVhUSV9MSU5FX1dBS0VVUFRJTUVSX0VWRU5UKQogCiAvKioKICAgKiBAYnJpZWYgIERpc2FibGUgaW50ZXJydXB0IG9uIHRoZSBMUFRJTSBXYWtlLXVwIFRpbWVyIGFzc29jaWF0ZWQgRXh0aSBsaW5lLgogICAqIEByZXR2YWwgTm9uZQogICAqLwotI2RlZmluZSBfX0hBTF9MUFRJTV9XQUtFVVBUSU1FUl9FWFRJX0RJU0FCTEVfSVQoKSAgICAgIChFWFRJLT5JTVIgJj0gfihMUFRJTV9FWFRJX0xJTkVfV0FLRVVQVElNRVJfRVZFTlQpKQorI2RlZmluZSBfX0hBTF9MUFRJTV9XQUtFVVBUSU1FUl9FWFRJX0RJU0FCTEVfSVQoKSAgICAgIChFWFRJLT5JTVJcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICY9IH4oTFBUSU1fRVhUSV9MSU5FX1dBS0VVUFRJTUVSX0VWRU5UKSkKIAogLyoqCiAgICogQGJyaWVmICBFbmFibGUgZXZlbnQgb24gdGhlIExQVElNIFdha2UtdXAgVGltZXIgYXNzb2NpYXRlZCBFeHRpIGxpbmUuCiAgICogQHJldHZhbCBOb25lLgogICAqLwotI2RlZmluZSBfX0hBTF9MUFRJTV9XQUtFVVBUSU1FUl9FWFRJX0VOQUJMRV9FVkVOVCgpICAgIChFWFRJLT5FTVIgfD0gTFBUSU1fRVhUSV9MSU5FX1dBS0VVUFRJTUVSX0VWRU5UKQorI2RlZmluZSBfX0hBTF9MUFRJTV9XQUtFVVBUSU1FUl9FWFRJX0VOQUJMRV9FVkVOVCgpICAgIChFWFRJLT5FTVJcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHw9IExQVElNX0VYVElfTElORV9XQUtFVVBUSU1FUl9FVkVOVCkKIAogLyoqCiAgICogQGJyaWVmICBEaXNhYmxlIGV2ZW50IG9uIHRoZSBMUFRJTSBXYWtlLXVwIFRpbWVyIGFzc29jaWF0ZWQgRXh0aSBsaW5lLgogICAqIEByZXR2YWwgTm9uZS4KICAgKi8KLSNkZWZpbmUgX19IQUxfTFBUSU1fV0FLRVVQVElNRVJfRVhUSV9ESVNBQkxFX0VWRU5UKCkgICAoRVhUSS0+RU1SICY9IH4oTFBUSU1fRVhUSV9MSU5FX1dBS0VVUFRJTUVSX0VWRU5UKSkKKyNkZWZpbmUgX19IQUxfTFBUSU1fV0FLRVVQVElNRVJfRVhUSV9ESVNBQkxFX0VWRU5UKCkgICAoRVhUSS0+RU1SXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmPSB+KExQVElNX0VYVElfTElORV9XQUtFVVBUSU1FUl9FVkVOVCkpCiAjaWYgZGVmaW5lZChFWFRJX0lNUl9NUjIzKQogCiAvKioKICAgKiBAYnJpZWYgIEVuYWJsZSBmYWxsaW5nIGVkZ2UgdHJpZ2dlciBvbiB0aGUgTFBUSU0gV2FrZS11cCBUaW1lciBhc3NvY2lhdGVkIEV4dGkgbGluZS4KICAgKiBAcmV0dmFsIE5vbmUuCiAgICovCi0jZGVmaW5lIF9fSEFMX0xQVElNX1dBS0VVUFRJTUVSX0VYVElfRU5BQkxFX0ZBTExJTkdfRURHRSgpICAgKEVYVEktPkZUU1IgfD0gTFBUSU1fRVhUSV9MSU5FX1dBS0VVUFRJTUVSX0VWRU5UKQorI2RlZmluZSBfX0hBTF9MUFRJTV9XQUtFVVBUSU1FUl9FWFRJX0VOQUJMRV9GQUxMSU5HX0VER0UoKSAgIChFWFRJLT5GVFNSXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8PSBMUFRJTV9FWFRJX0xJTkVfV0FLRVVQVElNRVJfRVZFTlQpCiAKIC8qKgogICAqIEBicmllZiAgRGlzYWJsZSBmYWxsaW5nIGVkZ2UgdHJpZ2dlciBvbiB0aGUgTFBUSU0gV2FrZS11cCBUaW1lciBhc3NvY2lhdGVkIEV4dGkgbGluZS4KICAgKiBAcmV0dmFsIE5vbmUuCiAgICovCi0jZGVmaW5lIF9fSEFMX0xQVElNX1dBS0VVUFRJTUVSX0VYVElfRElTQUJMRV9GQUxMSU5HX0VER0UoKSAgKEVYVEktPkZUU1IgJj0gfihMUFRJTV9FWFRJX0xJTkVfV0FLRVVQVElNRVJfRVZFTlQpKQorI2RlZmluZSBfX0hBTF9MUFRJTV9XQUtFVVBUSU1FUl9FWFRJX0RJU0FCTEVfRkFMTElOR19FREdFKCkgIChFWFRJLT5GVFNSXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmPSB+KExQVElNX0VYVElfTElORV9XQUtFVVBUSU1FUl9FVkVOVCkpCiAKIC8qKgogICAqIEBicmllZiAgRW5hYmxlIHJpc2luZyBlZGdlIHRyaWdnZXIgb24gdGhlIExQVElNIFdha2UtdXAgVGltZXIgYXNzb2NpYXRlZCBFeHRpIGxpbmUuCiAgICogQHJldHZhbCBOb25lLgogICAqLwotI2RlZmluZSBfX0hBTF9MUFRJTV9XQUtFVVBUSU1FUl9FWFRJX0VOQUJMRV9SSVNJTkdfRURHRSgpICAgIChFWFRJLT5SVFNSIHw9IExQVElNX0VYVElfTElORV9XQUtFVVBUSU1FUl9FVkVOVCkKKyNkZWZpbmUgX19IQUxfTFBUSU1fV0FLRVVQVElNRVJfRVhUSV9FTkFCTEVfUklTSU5HX0VER0UoKSAgICAoRVhUSS0+UlRTUlwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfD0gTFBUSU1fRVhUSV9MSU5FX1dBS0VVUFRJTUVSX0VWRU5UKQogCiAvKioKICAgKiBAYnJpZWYgIERpc2FibGUgcmlzaW5nIGVkZ2UgdHJpZ2dlciBvbiB0aGUgTFBUSU0gV2FrZS11cCBUaW1lciBhc3NvY2lhdGVkIEV4dGkgbGluZS4KICAgKiBAcmV0dmFsIE5vbmUuCiAgICovCi0jZGVmaW5lIF9fSEFMX0xQVElNX1dBS0VVUFRJTUVSX0VYVElfRElTQUJMRV9SSVNJTkdfRURHRSgpICAgKEVYVEktPlJUU1IgJj0gfihMUFRJTV9FWFRJX0xJTkVfV0FLRVVQVElNRVJfRVZFTlQpKQorI2RlZmluZSBfX0hBTF9MUFRJTV9XQUtFVVBUSU1FUl9FWFRJX0RJU0FCTEVfUklTSU5HX0VER0UoKSAgIChFWFRJLT5SVFNSXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmPSB+KExQVElNX0VYVElfTElORV9XQUtFVVBUSU1FUl9FVkVOVCkpCiAKIC8qKgogICAqIEBicmllZiAgRW5hYmxlIHJpc2luZyAmIGZhbGxpbmcgZWRnZSB0cmlnZ2VyIG9uIHRoZSBMUFRJTSBXYWtlLXVwIFRpbWVyIGFzc29jaWF0ZWQgRXh0aSBsaW5lLgpAQCAtNTcxLDI2ICs1ODAsMjkgQEAKICAgKiBAcmV0dmFsIE5vbmUuCiAgICovCiAjZGVmaW5lIF9fSEFMX0xQVElNX1dBS0VVUFRJTUVSX0VYVElfRElTQUJMRV9SSVNJTkdfRkFMTElOR19FREdFKCkgZG97X19IQUxfTFBUSU1fV0FLRVVQVElNRVJfRVhUSV9ESVNBQkxFX1JJU0lOR19FREdFKCk7XAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fSEFMX0xQVElNX1dBS0VVUFRJTUVSX0VYVElfRElTQUJMRV9GQUxMSU5HX0VER0UoKTtcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fSEFMX0xQVElNX1dBS0VVUFRJTUVSX0VYVElfRElTQUJMRV9GQUxMSU5HX0VER0UoKTtcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9d2hpbGUoMCkKIAogLyoqCiAgICogQGJyaWVmIENoZWNrIHdoZXRoZXIgdGhlIExQVElNIFdha2UtdXAgVGltZXIgYXNzb2NpYXRlZCBFeHRpIGxpbmUgaW50ZXJydXB0IGZsYWcgaXMgc2V0IG9yIG5vdC4KICAgKiBAcmV0dmFsIExpbmUgU3RhdHVzLgogICAqLwotI2RlZmluZSBfX0hBTF9MUFRJTV9XQUtFVVBUSU1FUl9FWFRJX0dFVF9GTEFHKCkgICAgICAgICAgICAgIChFWFRJLT5QUiAmIExQVElNX0VYVElfTElORV9XQUtFVVBUSU1FUl9FVkVOVCkKKyNkZWZpbmUgX19IQUxfTFBUSU1fV0FLRVVQVElNRVJfRVhUSV9HRVRfRkxBRygpICAgICAgICAgICAgICAoRVhUSS0+UFJcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgTFBUSU1fRVhUSV9MSU5FX1dBS0VVUFRJTUVSX0VWRU5UKQogCiAvKioKICAgKiBAYnJpZWYgQ2xlYXIgdGhlIExQVElNIFdha2UtdXAgVGltZXIgYXNzb2NpYXRlZCBFeHRpIGxpbmUgZmxhZy4KICAgKiBAcmV0dmFsIE5vbmUuCiAgICovCi0jZGVmaW5lIF9fSEFMX0xQVElNX1dBS0VVUFRJTUVSX0VYVElfQ0xFQVJfRkxBRygpICAgICAgICAgICAgKEVYVEktPlBSID0gTFBUSU1fRVhUSV9MSU5FX1dBS0VVUFRJTUVSX0VWRU5UKQorI2RlZmluZSBfX0hBTF9MUFRJTV9XQUtFVVBUSU1FUl9FWFRJX0NMRUFSX0ZMQUcoKSAgICAgICAgICAgIChFWFRJLT5QUlwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBMUFRJTV9FWFRJX0xJTkVfV0FLRVVQVElNRVJfRVZFTlQpCiAKIC8qKgogICAqIEBicmllZiBHZW5lcmF0ZSBhIFNvZnR3YXJlIGludGVycnVwdCBvbiB0aGUgTFBUSU0gV2FrZS11cCBUaW1lciBhc3NvY2lhdGVkIEV4dGkgbGluZS4KICAgKiBAcmV0dmFsIE5vbmUuCiAgICovCi0jZGVmaW5lIF9fSEFMX0xQVElNX1dBS0VVUFRJTUVSX0VYVElfR0VORVJBVEVfU1dJVCgpICAgICAgICAgKEVYVEktPlNXSUVSIHw9IExQVElNX0VYVElfTElORV9XQUtFVVBUSU1FUl9FVkVOVCkKKyNkZWZpbmUgX19IQUxfTFBUSU1fV0FLRVVQVElNRVJfRVhUSV9HRU5FUkFURV9TV0lUKCkgICAgICAgICAoRVhUSS0+U1dJRVJcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHw9IExQVElNX0VYVElfTElORV9XQUtFVVBUSU1FUl9FVkVOVCkKICNlbmRpZiAvKiBFWFRJX0lNUl9NUjIzICovCiAKIC8qKgpAQCAtNjAzLDkgKzYxNSw5IEBACiAgICovCiAKIC8qKiBAYWRkdG9ncm91cCBMUFRJTV9FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXAxCi0gKiAgQGJyaWVmICAgIEluaXRpYWxpemF0aW9uIGFuZCBDb25maWd1cmF0aW9uIGZ1bmN0aW9ucy4KLSAqIEB7Ci0gKi8KKyAgKiAgQGJyaWVmICAgIEluaXRpYWxpemF0aW9uIGFuZCBDb25maWd1cmF0aW9uIGZ1bmN0aW9ucy4KKyAgKiBAeworICAqLwogLyogSW5pdGlhbGl6YXRpb24vZGUtaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9MUFRJTV9Jbml0KExQVElNX0hhbmRsZVR5cGVEZWYgKmhscHRpbSk7CiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfTFBUSU1fRGVJbml0KExQVElNX0hhbmRsZVR5cGVEZWYgKmhscHRpbSk7CkBAIC02MTgsOSArNjMwLDkgQEAKICAgKi8KIAogLyoqIEBhZGR0b2dyb3VwIExQVElNX0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDIKLSAqICBAYnJpZWYgICBTdGFydC1TdG9wIG9wZXJhdGlvbiBmdW5jdGlvbnMuCi0gKiBAewotICovCisgICogIEBicmllZiAgIFN0YXJ0LVN0b3Agb3BlcmF0aW9uIGZ1bmN0aW9ucy4KKyAgKiBAeworICAqLwogLyogU3RhcnQvU3RvcCBvcGVyYXRpb24gZnVuY3Rpb25zICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgUFdNIE1vZGUgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMqLwogLyogQmxvY2tpbmcgbW9kZTogUG9sbGluZyAqLwpAQCAtNjc0LDkgKzY4Niw5IEBACiAgICovCiAKIC8qKiBAYWRkdG9ncm91cCBMUFRJTV9FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXAzCi0gKiAgQGJyaWVmICBSZWFkIG9wZXJhdGlvbiBmdW5jdGlvbnMuCi0gKiBAewotICovCisgICogIEBicmllZiAgUmVhZCBvcGVyYXRpb24gZnVuY3Rpb25zLgorICAqIEB7CisgICovCiAvKiBSZWFkaW5nIG9wZXJhdGlvbiBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogdWludDMyX3QgSEFMX0xQVElNX1JlYWRDb3VudGVyKExQVElNX0hhbmRsZVR5cGVEZWYgKmhscHRpbSk7CiB1aW50MzJfdCBIQUxfTFBUSU1fUmVhZEF1dG9SZWxvYWQoTFBUSU1fSGFuZGxlVHlwZURlZiAqaGxwdGltKTsKQEAgLTY4Niw5ICs2OTgsOSBAQAogICAqLwogCiAvKiogQGFkZHRvZ3JvdXAgTFBUSU1fRXhwb3J0ZWRfRnVuY3Rpb25zX0dyb3VwNAotICogIEBicmllZiAgTFBUSU0gSVJRIGhhbmRsZXIgYW5kIGNhbGxiYWNrIGZ1bmN0aW9ucy4KLSAqIEB7Ci0gKi8KKyAgKiAgQGJyaWVmICBMUFRJTSBJUlEgaGFuZGxlciBhbmQgY2FsbGJhY2sgZnVuY3Rpb25zLgorICAqIEB7CisgICovCiAvKiBMUFRJTSBJUlEgZnVuY3Rpb25zICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogdm9pZCBIQUxfTFBUSU1fSVJRSGFuZGxlcihMUFRJTV9IYW5kbGVUeXBlRGVmICpobHB0aW0pOwogCkBAIC03MDMsNyArNzE1LDggQEAKIAogLyogQ2FsbGJhY2tzIFJlZ2lzdGVyL1VuUmVnaXN0ZXIgZnVuY3Rpb25zICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZiAoVVNFX0hBTF9MUFRJTV9SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkKLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9MUFRJTV9SZWdpc3RlckNhbGxiYWNrKExQVElNX0hhbmRsZVR5cGVEZWYgKmxwaHRpbSwgSEFMX0xQVElNX0NhbGxiYWNrSURUeXBlRGVmIENhbGxiYWNrSUQsIHBMUFRJTV9DYWxsYmFja1R5cGVEZWYgcENhbGxiYWNrKTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9MUFRJTV9SZWdpc3RlckNhbGxiYWNrKExQVElNX0hhbmRsZVR5cGVEZWYgKmxwaHRpbSwgSEFMX0xQVElNX0NhbGxiYWNrSURUeXBlRGVmIENhbGxiYWNrSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwTFBUSU1fQ2FsbGJhY2tUeXBlRGVmIHBDYWxsYmFjayk7CiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfTFBUSU1fVW5SZWdpc3RlckNhbGxiYWNrKExQVElNX0hhbmRsZVR5cGVEZWYgKmxwaHRpbSwgSEFMX0xQVElNX0NhbGxiYWNrSURUeXBlRGVmIENhbGxiYWNrSUQpOwogI2VuZGlmIC8qIFVTRV9IQUxfTFBUSU1fUkVHSVNURVJfQ0FMTEJBQ0tTICovCiAvKioKQEAgLTcxMSw5ICs3MjQsOSBAQAogICAqLwogCiAvKiogQGFkZHRvZ3JvdXAgTFBUSU1fR3JvdXA1Ci0gKiAgQGJyaWVmICAgUGVyaXBoZXJhbCBTdGF0ZSBmdW5jdGlvbnMuCi0gKiBAewotICovCisgICogIEBicmllZiAgIFBlcmlwaGVyYWwgU3RhdGUgZnVuY3Rpb25zLgorICAqIEB7CisgICovCiAvKiBQZXJpcGhlcmFsIFN0YXRlIGZ1bmN0aW9ucyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogSEFMX0xQVElNX1N0YXRlVHlwZURlZiBIQUxfTFBUSU1fR2V0U3RhdGUoTFBUSU1fSGFuZGxlVHlwZURlZiAqaGxwdGltKTsKIC8qKgpAQCAtNzgzLDEzICs3OTYsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fUE9MQVJJVFlfXykgPT0gTFBUSU1fQ0xPQ0tQT0xBUklUWV9GQUxMSU5HKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1BPTEFSSVRZX18pID09IExQVElNX0NMT0NLUE9MQVJJVFlfUklTSU5HX0ZBTExJTkcpKQogCi0jZGVmaW5lIElTX0xQVElNX1RSR19TT1VSQ0UoX19UUklHX18pICAgICAgICAgICAgICAgKCgoX19UUklHX18pID09IExQVElNX1RSSUdTT1VSQ0VfU09GVFdBUkUpIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1RSSUdfXykgPT0gTFBUSU1fVFJJR1NPVVJDRV8wKSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19UUklHX18pID09IExQVElNX1RSSUdTT1VSQ0VfMSkgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fVFJJR19fKSA9PSBMUFRJTV9UUklHU09VUkNFXzIpIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1RSSUdfXykgPT0gTFBUSU1fVFJJR1NPVVJDRV8zKSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19UUklHX18pID09IExQVElNX1RSSUdTT1VSQ0VfNCkgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fVFJJR19fKSA9PSBMUFRJTV9UUklHU09VUkNFXzUpKQorI2RlZmluZSBJU19MUFRJTV9UUkdfU09VUkNFKF9fVFJJR19fKSAgICAgICAgICAgKCgoX19UUklHX18pID09IExQVElNX1RSSUdTT1VSQ0VfU09GVFdBUkUpIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fVFJJR19fKSA9PSBMUFRJTV9UUklHU09VUkNFXzApIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fVFJJR19fKSA9PSBMUFRJTV9UUklHU09VUkNFXzEpIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fVFJJR19fKSA9PSBMUFRJTV9UUklHU09VUkNFXzIpIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fVFJJR19fKSA9PSBMUFRJTV9UUklHU09VUkNFXzMpIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fVFJJR19fKSA9PSBMUFRJTV9UUklHU09VUkNFXzQpIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fVFJJR19fKSA9PSBMUFRJTV9UUklHU09VUkNFXzUpKQogCiAjZGVmaW5lIElTX0xQVElNX0VYVF9UUkdfUE9MQVJJVFkoX19QT0xBUklUWV9fKSAoKChfX1BPTEFSSVRZX18pID09IExQVElNX0FDVElWRUVER0VfUklTSU5HICAgICAgICAgKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1BPTEFSSVRZX18pID09IExQVElNX0FDVElWRUVER0VfRkFMTElORyAgICAgICAgKSB8fCBcCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJmNHh4X2hhbF9tbWMuaCBiL0luYy9zdG0zMmY0eHhfaGFsX21tYy5oCmluZGV4IGE3Y2Q4YmUuLmU2NTE3MmEgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmY0eHhfaGFsX21tYy5oCisrKyBiL0luYy9zdG0zMmY0eHhfaGFsX21tYy5oCkBAIC01NCw3ICs1NCw3IEBACiAgIEhBTF9NTUNfU1RBVEVfQlVTWSAgICAgICAgICAgICAgICAgICA9IDB4MDAwMDAwMDNVLCAgLyohPCBNTUMgcHJvY2VzcyBvbmdvaW5nICAgICAgICAgICAgICAgICAgKi8KICAgSEFMX01NQ19TVEFURV9QUk9HUkFNTUlORyAgICAgICAgICAgID0gMHgwMDAwMDAwNFUsICAvKiE8IE1NQyBQcm9ncmFtbWluZyBTdGF0ZSAgICAgICAgICAgICAgICAqLwogICBIQUxfTU1DX1NUQVRFX1JFQ0VJVklORyAgICAgICAgICAgICAgPSAweDAwMDAwMDA1VSwgIC8qITwgTU1DIFJlY2VpbnZpbmcgU3RhdGUgICAgICAgICAgICAgICAgICovCi0gIEhBTF9NTUNfU1RBVEVfVFJBTlNGRVIgICAgICAgICAgICAgICA9IDB4MDAwMDAwMDZVLCAgLyohPCBNTUMgVHJhbnNmZXJ0IFN0YXRlICAgICAgICAgICAgICAgICAgKi8KKyAgSEFMX01NQ19TVEFURV9UUkFOU0ZFUiAgICAgICAgICAgICAgID0gMHgwMDAwMDAwNlUsICAvKiE8IE1NQyBUcmFuc2ZlciBTdGF0ZSAgICAgICAgICAgICAgICAgICovCiAgIEhBTF9NTUNfU1RBVEVfRVJST1IgICAgICAgICAgICAgICAgICA9IDB4MDAwMDAwMEZVICAgLyohPCBNTUMgaXMgaW4gZXJyb3Igc3RhdGUgICAgICAgICAgICAgICAgKi8KIH1IQUxfTU1DX1N0YXRlVHlwZURlZjsKIC8qKiAKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmY0eHhfaGFsX3JjYy5oIGIvSW5jL3N0bTMyZjR4eF9oYWxfcmNjLmgKaW5kZXggMzZhNjM5Yi4uMmVlZmYzNCAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZjR4eF9oYWxfcmNjLmgKKysrIGIvSW5jL3N0bTMyZjR4eF9oYWxfcmNjLmgKQEAgLTk3NiwxMSArOTc2LDEwIEBACiAgICogICAgICAgICBhIFBvd2VyIE9uIFJlc2V0IChQT1IpLgogICAqIEBwYXJhbSAgX19SVENDTEtTb3VyY2VfXyBzcGVjaWZpZXMgdGhlIFJUQyBjbG9jayBzb3VyY2UuCiAgICogICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgotICAgICAgICAgICAgICAgQGFyZyBAcmVmIFJDQ19SVENDTEtTT1VSQ0VfTk9fQ0xLOiBObyBjbG9jayBzZWxlY3RlZCBhcyBSVEMgY2xvY2suCi0gICogICAgICAgICAgICBAYXJnIEByZWYgUkNDX1JUQ0NMS1NPVVJDRV9MU0U6IExTRSBzZWxlY3RlZCBhcyBSVEMgY2xvY2suCi0gICogICAgICAgICAgICBAYXJnIEByZWYgUkNDX1JUQ0NMS1NPVVJDRV9MU0k6IExTSSBzZWxlY3RlZCBhcyBSVEMgY2xvY2suCi0gICogICAgICAgICAgICBAYXJnIEByZWYgUkNDX1JUQ0NMS1NPVVJDRV9IU0VfRElWWDogSFNFIGNsb2NrIGRpdmlkZWQgYnkgeCBzZWxlY3RlZAotICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzIFJUQyBjbG9jaywgd2hlcmUgeDpbMiwzMV0KKyAgKiAgICAgICAgICAgIEBhcmcgQHJlZiBSQ0NfUlRDQ0xLU09VUkNFX05PX0NMSyA6IE5vIGNsb2NrIHNlbGVjdGVkIGFzIFJUQyBjbG9jay4KKyAgKiAgICAgICAgICAgIEBhcmcgQHJlZiBSQ0NfUlRDQ0xLU09VUkNFX0xTRSA6IExTRSBzZWxlY3RlZCBhcyBSVEMgY2xvY2suCisgICogICAgICAgICAgICBAYXJnIEByZWYgUkNDX1JUQ0NMS1NPVVJDRV9MU0kgOiBMU0kgc2VsZWN0ZWQgYXMgUlRDIGNsb2NrLgorICAqICAgICAgICAgICAgQGFyZyBAcmVmIFJDQ19SVENDTEtTT1VSQ0VfSFNFX0RJVlggSFNFIGRpdmlkZWQgYnkgWCBzZWxlY3RlZCBhcyBSVEMgY2xvY2sgKFggY2FuIGJlIHJldHJpZXZlZCB0aGFua3MgdG8gQHJlZiBfX0hBTF9SQ0NfR0VUX1JUQ19IU0VfUFJFU0NBTEVSKCkKICAgKiBAbm90ZSAgIElmIHRoZSBMU0Ugb3IgTFNJIGlzIHVzZWQgYXMgUlRDIGNsb2NrIHNvdXJjZSwgdGhlIFJUQyBjb250aW51ZXMgdG8KICAgKiAgICAgICAgIHdvcmsgaW4gU1RPUCBhbmQgU1RBTkRCWSBtb2RlcywgYW5kIGNhbiBiZSB1c2VkIGFzIHdha2UtdXAgc291cmNlLgogICAqICAgICAgICAgSG93ZXZlciwgd2hlbiB0aGUgSFNFIGNsb2NrIGlzIHVzZWQgYXMgUlRDIGNsb2NrIHNvdXJjZSwgdGhlIFJUQwpAQCAtMTAwNyw4ICsxMDA2LDcgQEAKIC8qKgogICAqIEBicmllZiAgIEdldCB0aGUgUlRDIGFuZCBIU0UgY2xvY2sgZGl2aWRlciAoUlRDUFJFKS4KICAgKiBAcmV0dmFsIFJldHVybmVkIHZhbHVlIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6Ci0gICogICAgICAgICAgICBAYXJnIEByZWYgUkNDX1JUQ0NMS1NPVVJDRV9IU0VfRElWWDogSFNFIGNsb2NrIGRpdmlkZWQgYnkgeCBzZWxlY3RlZAotICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzIFJUQyBjbG9jaywgd2hlcmUgeDpbMiwzMV0KKyAqICAgICAgICAgICAgQGFyZyBAcmVmIFJDQ19SVENDTEtTT1VSQ0VfSFNFX0RJVlggSFNFIGRpdmlkZWQgYnkgWCBzZWxlY3RlZCBhcyBSVEMgY2xvY2sgKFggY2FuIGJlIHJldHJpZXZlZCB0aGFua3MgdG8gQHJlZiBfX0hBTF9SQ0NfR0VUX1JUQ19IU0VfUFJFU0NBTEVSKCkKICAgKi8KICNkZWZpbmUgIF9fSEFMX1JDQ19HRVRfUlRDX0hTRV9QUkVTQ0FMRVIoKSAoUkVBRF9CSVQoUkNDLT5DRkdSLCBSQ0NfQ0ZHUl9SVENQUkUpIHwgUkNDX0JEQ1JfUlRDU0VMKQogCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJmNHh4X2hhbF9yY2NfZXguaCBiL0luYy9zdG0zMmY0eHhfaGFsX3JjY19leC5oCmluZGV4IDBiODE1MmIuLmRmNmE2NmEgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmY0eHhfaGFsX3JjY19leC5oCisrKyBiL0luYy9zdG0zMmY0eHhfaGFsX3JjY19leC5oCkBAIC0xMDMsNyArMTAzLDcgQEAKICAgKi8KIHR5cGVkZWYgc3RydWN0CiB7Ci0gIHVpbnQzMl90IFBMTFNBSU07ICAgIC8qITwgU3BjaWZpZXMgZGl2aXNpb24gZmFjdG9yIGZvciBQTEwgVkNPIGlucHV0IGNsb2NrLgorICB1aW50MzJfdCBQTExTQUlNOyAgICAvKiE8IFNwZWNpZmllcyBkaXZpc2lvbiBmYWN0b3IgZm9yIFBMTCBWQ08gaW5wdXQgY2xvY2suCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIG51bWJlciBiZXR3ZWVuIE1pbl9EYXRhID0gMiBhbmQgTWF4X0RhdGEgPSA2MyAgICAgICAqLwogCiAgIHVpbnQzMl90IFBMTFNBSU47ICAgIC8qITwgU3BlY2lmaWVzIHRoZSBtdWx0aXBsaWNhdGlvbiBmYWN0b3IgZm9yIFBMTEkyUyBWQ08gb3V0cHV0IGNsb2NrLgpAQCAtNDk2OSw3ICs0OTY5LDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wcmVnID0gUkVBRF9CSVQoUkNDLT5BUEIxRU5SLCBSQ0NfQVBCMUVOUl9SVENBUEJFTik7XAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVTlVTRUQodG1wcmVnKTsgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlKDBVKQotI2lmIGRlZmluZWQoU1RNMzJGNDEyWngpIHx8IGRlZmluZWQoU1RNMzJGNDEyVngpIHx8IGRlZmluZWQoU1RNMzJGNDEyUngpIHx8IGRlZmluZWQoU1RNMzJGNDEzeHgpIHx8IGRlZmluZWQoU1RNMzJGNDIzeHgpCiAjZGVmaW5lIF9fSEFMX1JDQ19VU0FSVDNfQ0xLX0VOQUJMRSgpIGRvIHsgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0lPIHVpbnQzMl90IHRtcHJlZyA9IDB4MDBVOyBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFVF9CSVQoUkNDLT5BUEIxRU5SLCBSQ0NfQVBCMUVOUl9VU0FSVDNFTik7XApAQCAtNDk3Nyw3ICs0OTc2LDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wcmVnID0gUkVBRF9CSVQoUkNDLT5BUEIxRU5SLCBSQ0NfQVBCMUVOUl9VU0FSVDNFTik7XAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVTlVTRUQodG1wcmVnKTsgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlKDBVKQotI2VuZGlmIC8qIFNUTTMyRjQxMlp4IHx8IFNUTTMyRjQxMlZ4IHx8IFNUTTMyRjQxMlJ4IHx8IFNUTTMyRjQxM3h4IHx8IFNUTTMyRjQyM3h4ICovCiAKICNpZiBkZWZpbmVkKFNUTTMyRjQxM3h4KSB8fCBkZWZpbmVkKFNUTTMyRjQyM3h4KQogI2RlZmluZSBfX0hBTF9SQ0NfVUFSVDRfQ0xLX0VOQUJMRSgpICBkbyB7IFwKQEAgLTUwOTgsOSArNTA5Niw3IEBACiAjZW5kaWYgLyogU1RNMzJGNDEzeHggfHwgU1RNMzJGNDIzeHggKi8KICNkZWZpbmUgX19IQUxfUkNDX1JUQ0FQQl9DTEtfRElTQUJMRSgpICAoUkNDLT5BUEIxRU5SICY9IH4oUkNDX0FQQjFFTlJfUlRDQVBCRU4pKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogI2RlZmluZSBfX0hBTF9SQ0NfU1BJM19DTEtfRElTQUJMRSgpICAgIChSQ0MtPkFQQjFFTlIgJj0gfihSQ0NfQVBCMUVOUl9TUEkzRU4pKQotI2lmIGRlZmluZWQoU1RNMzJGNDEyWngpIHx8IGRlZmluZWQoU1RNMzJGNDEyVngpIHx8IGRlZmluZWQoU1RNMzJGNDEyUngpIHx8IGRlZmluZWQoU1RNMzJGNDEzeHgpIHx8IGRlZmluZWQoU1RNMzJGNDIzeHgpCiAjZGVmaW5lIF9fSEFMX1JDQ19VU0FSVDNfQ0xLX0RJU0FCTEUoKSAgKFJDQy0+QVBCMUVOUiAmPSB+KFJDQ19BUEIxRU5SX1VTQVJUM0VOKSkKLSNlbmRpZiAvKiBTVE0zMkY0MTJaeCB8fCBTVE0zMkY0MTJWeCB8fCBTVE0zMkY0MTJSeCB8fCBTVE0zMkY0MTN4eCB8fCBTVE0zMkY0MjN4eCAqLwogI2lmIGRlZmluZWQoU1RNMzJGNDEzeHgpIHx8IGRlZmluZWQoU1RNMzJGNDIzeHgpICAgCiAjZGVmaW5lIF9fSEFMX1JDQ19VQVJUNF9DTEtfRElTQUJMRSgpICAgKFJDQy0+QVBCMUVOUiAmPSB+KFJDQ19BUEIxRU5SX1VBUlQ0RU4pKQogI2RlZmluZSBfX0hBTF9SQ0NfVUFSVDVfQ0xLX0RJU0FCTEUoKSAgIChSQ0MtPkFQQjFFTlIgJj0gfihSQ0NfQVBCMUVOUl9VQVJUNUVOKSkKQEAgLTUxNDAsOSArNTEzNiw3IEBACiAjZW5kaWYgLyogU1RNMzJGNDEzeHggfHwgU1RNMzJGNDIzeHggKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogI2RlZmluZSBfX0hBTF9SQ0NfUlRDQVBCX0lTX0NMS19FTkFCTEVEKCkgICgoUkNDLT5BUEIxRU5SICYgKFJDQ19BUEIxRU5SX1JUQ0FQQkVOKSkgIT0gUkVTRVQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAjZGVmaW5lIF9fSEFMX1JDQ19TUEkzX0lTX0NMS19FTkFCTEVEKCkgICAgKChSQ0MtPkFQQjFFTlIgJiAoUkNDX0FQQjFFTlJfU1BJM0VOKSkgIT0gUkVTRVQpCi0jaWYgZGVmaW5lZChTVE0zMkY0MTJaeCkgfHwgZGVmaW5lZChTVE0zMkY0MTJWeCkgfHwgZGVmaW5lZChTVE0zMkY0MTJSeCkgfHwgZGVmaW5lZChTVE0zMkY0MTN4eCkgfHwgZGVmaW5lZChTVE0zMkY0MjN4eCkKICNkZWZpbmUgX19IQUxfUkNDX1VTQVJUM19JU19DTEtfRU5BQkxFRCgpICAoKFJDQy0+QVBCMUVOUiAmIChSQ0NfQVBCMUVOUl9VU0FSVDNFTikpICE9IFJFU0VUKQotI2VuZGlmIC8qIFNUTTMyRjQxMlp4IHx8IFNUTTMyRjQxMlZ4IHx8IFNUTTMyRjQxMlJ4IHx8IFNUTTMyRjQxM3h4IHwgU1RNMzJGNDIzeHggKi8KICNpZiBkZWZpbmVkKFNUTTMyRjQxM3h4KSB8fCBkZWZpbmVkKFNUTTMyRjQyM3h4KQogI2RlZmluZSBfX0hBTF9SQ0NfVUFSVDRfSVNfQ0xLX0VOQUJMRUQoKSAgKChSQ0MtPkFQQjFFTlIgJiAoUkNDX0FQQjFFTlJfVUFSVDRFTikpICE9IFJFU0VUKSAKICNkZWZpbmUgX19IQUxfUkNDX1VBUlQ1X0lTX0NMS19FTkFCTEVEKCkgICgoUkNDLT5BUEIxRU5SICYgKFJDQ19BUEIxRU5SX1VBUlQ1RU4pKSAhPSBSRVNFVCkgCkBAIC01MTcxLDkgKzUxNjUsNyBAQAogI2VuZGlmIC8qIFNUTTMyRjQxM3h4IHx8IFNUTTMyRjQyM3h4ICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICNkZWZpbmUgX19IQUxfUkNDX1JUQ0FQQl9JU19DTEtfRElTQUJMRUQoKSAgKChSQ0MtPkFQQjFFTlIgJiAoUkNDX0FQQjFFTlJfUlRDQVBCRU4pKSA9PSBSRVNFVCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAjZGVmaW5lIF9fSEFMX1JDQ19TUEkzX0lTX0NMS19ESVNBQkxFRCgpICAgICgoUkNDLT5BUEIxRU5SICYgKFJDQ19BUEIxRU5SX1NQSTNFTikpID09IFJFU0VUKQotI2lmIGRlZmluZWQoU1RNMzJGNDEyWngpIHx8IGRlZmluZWQoU1RNMzJGNDEyVngpIHx8IGRlZmluZWQoU1RNMzJGNDEyUngpIHx8IGRlZmluZWQoU1RNMzJGNDEzeHgpIHx8IGRlZmluZWQoU1RNMzJGNDIzeHgpCiAjZGVmaW5lIF9fSEFMX1JDQ19VU0FSVDNfSVNfQ0xLX0RJU0FCTEVEKCkgICgoUkNDLT5BUEIxRU5SICYgKFJDQ19BUEIxRU5SX1VTQVJUM0VOKSkgPT0gUkVTRVQpCi0jZW5kaWYgLyogU1RNMzJGNDEyWnggfHwgU1RNMzJGNDEyVnggfHwgU1RNMzJGNDEyUnggfHwgU1RNMzJGNDEzeHggfCBTVE0zMkY0MjN4eCAqLwogI2lmIGRlZmluZWQoU1RNMzJGNDEzeHgpIHx8IGRlZmluZWQoU1RNMzJGNDIzeHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogI2RlZmluZSBfX0hBTF9SQ0NfVUFSVDRfSVNfQ0xLX0RJU0FCTEVEKCkgICgoUkNDLT5BUEIxRU5SICYgKFJDQ19BUEIxRU5SX1VBUlQ0RU4pKSA9PSBSRVNFVCkgCiAjZGVmaW5lIF9fSEFMX1JDQ19VQVJUNV9JU19DTEtfRElTQUJMRUQoKSAgKChSQ0MtPkFQQjFFTlIgJiAoUkNDX0FQQjFFTlJfVUFSVDVFTikpID09IFJFU0VUKSAKQEAgLTU0NDUsOSArNTQzNyw3IEBACiAjZGVmaW5lIF9fSEFMX1JDQ19MUFRJTTFfRk9SQ0VfUkVTRVQoKSAgIChSQ0MtPkFQQjFSU1RSIHw9IChSQ0NfQVBCMVJTVFJfTFBUSU0xUlNUKSkgCiAjZW5kaWYgLyogU1RNMzJGNDEzeHggfHwgU1RNMzJGNDIzeHggKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAjZGVmaW5lIF9fSEFMX1JDQ19TUEkzX0ZPUkNFX1JFU0VUKCkgICAgIChSQ0MtPkFQQjFSU1RSIHw9IChSQ0NfQVBCMVJTVFJfU1BJM1JTVCkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotI2lmIGRlZmluZWQoU1RNMzJGNDEyWngpIHx8IGRlZmluZWQoU1RNMzJGNDEyVngpIHx8IGRlZmluZWQoU1RNMzJGNDEyUngpIHx8IGRlZmluZWQoU1RNMzJGNDEzeHgpIHx8IGRlZmluZWQoU1RNMzJGNDIzeHgpCiAjZGVmaW5lIF9fSEFMX1JDQ19VU0FSVDNfRk9SQ0VfUkVTRVQoKSAgIChSQ0MtPkFQQjFSU1RSIHw9IChSQ0NfQVBCMVJTVFJfVVNBUlQzUlNUKSkKLSNlbmRpZiAvKiBTVE0zMkY0MTJaeCB8fCBTVE0zMkY0MTJWeCB8fCBTVE0zMkY0MTJSeCB8fCBTVE0zMkY0MTN4eCB8fCBTVE0zMkY0MjN4eCAqLwogI2lmIGRlZmluZWQoU1RNMzJGNDEzeHgpIHx8IGRlZmluZWQoU1RNMzJGNDIzeHgpCiAjZGVmaW5lIF9fSEFMX1JDQ19VQVJUNF9GT1JDRV9SRVNFVCgpICAgIChSQ0MtPkFQQjFSU1RSIHw9IChSQ0NfQVBCMVJTVFJfVUFSVDRSU1QpKQogI2RlZmluZSBfX0hBTF9SQ0NfVUFSVDVfRk9SQ0VfUkVTRVQoKSAgICAoUkNDLT5BUEIxUlNUUiB8PSAoUkNDX0FQQjFSU1RSX1VBUlQ1UlNUKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCkBAIC01NDc1LDkgKzU0NjUsNyBAQAogI2RlZmluZSBfX0hBTF9SQ0NfTFBUSU0xX1JFTEVBU0VfUkVTRVQoKSAgKFJDQy0+QVBCMVJTVFIgJj0gfihSQ0NfQVBCMVJTVFJfTFBUSU0xUlNUKSkKICNlbmRpZiAvKiBTVE0zMkY0MTN4eCB8fCBTVE0zMkY0MjN4eCAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICNkZWZpbmUgX19IQUxfUkNDX1NQSTNfUkVMRUFTRV9SRVNFVCgpICAgIChSQ0MtPkFQQjFSU1RSICY9IH4oUkNDX0FQQjFSU1RSX1NQSTNSU1QpKQotI2lmIGRlZmluZWQoU1RNMzJGNDEyWngpIHx8IGRlZmluZWQoU1RNMzJGNDEyVngpIHx8IGRlZmluZWQoU1RNMzJGNDEyUngpIHx8IGRlZmluZWQoU1RNMzJGNDEzeHgpIHx8IGRlZmluZWQoU1RNMzJGNDIzeHgpCiAjZGVmaW5lIF9fSEFMX1JDQ19VU0FSVDNfUkVMRUFTRV9SRVNFVCgpICAoUkNDLT5BUEIxUlNUUiAmPSB+KFJDQ19BUEIxUlNUUl9VU0FSVDNSU1QpKQotI2VuZGlmIC8qIFNUTTMyRjQxMlp4IHx8IFNUTTMyRjQxMlZ4IHx8IFNUTTMyRjQxMlJ4IHx8IFNUTTMyRjQxM3h4IHx8IFNUTTMyRjQyM3h4ICovCiAjaWYgZGVmaW5lZChTVE0zMkY0MTN4eCkgfHwgZGVmaW5lZChTVE0zMkY0MjN4eCkKICNkZWZpbmUgX19IQUxfUkNDX1VBUlQ0X1JFTEVBU0VfUkVTRVQoKSAgIChSQ0MtPkFQQjFSU1RSICY9IH4oUkNDX0FQQjFSU1RSX1VBUlQ0UlNUKSkKICNkZWZpbmUgX19IQUxfUkNDX1VBUlQ1X1JFTEVBU0VfUkVTRVQoKSAgIChSQ0MtPkFQQjFSU1RSICY9IH4oUkNDX0FQQjFSU1RSX1VBUlQ1UlNUKSkKQEAgLTU2MzMsOSArNTYyMSw3IEBACiAjZW5kaWYgLyogU1RNMzJGNDEzeHggfHwgU1RNMzJGNDIzeHggKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAjZGVmaW5lIF9fSEFMX1JDQ19SVENBUEJfQ0xLX1NMRUVQX0VOQUJMRSgpICAoUkNDLT5BUEIxTFBFTlIgfD0gKFJDQ19BUEIxTFBFTlJfUlRDQVBCTFBFTikpCiAjZGVmaW5lIF9fSEFMX1JDQ19TUEkzX0NMS19TTEVFUF9FTkFCTEUoKSAgICAoUkNDLT5BUEIxTFBFTlIgfD0gKFJDQ19BUEIxTFBFTlJfU1BJM0xQRU4pKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotI2lmIGRlZmluZWQoU1RNMzJGNDEyWngpIHx8IGRlZmluZWQoU1RNMzJGNDEyVngpIHx8IGRlZmluZWQoU1RNMzJGNDEyUngpIHx8IGRlZmluZWQoU1RNMzJGNDEzeHgpIHx8IGRlZmluZWQoU1RNMzJGNDIzeHgpCiAjZGVmaW5lIF9fSEFMX1JDQ19VU0FSVDNfQ0xLX1NMRUVQX0VOQUJMRSgpICAoUkNDLT5BUEIxTFBFTlIgfD0gKFJDQ19BUEIxTFBFTlJfVVNBUlQzTFBFTikpCi0jZW5kaWYgLyogU1RNMzJGNDEyWnggfHwgU1RNMzJGNDEyVnggfHwgU1RNMzJGNDEyUnggfHwgU1RNMzJGNDEzeHggfHwgU1RNMzJGNDIzeHggKi8KICNpZiBkZWZpbmVkKFNUTTMyRjQxM3h4KSB8fCBkZWZpbmVkKFNUTTMyRjQyM3h4KQogI2RlZmluZSBfX0hBTF9SQ0NfVUFSVDRfQ0xLX1NMRUVQX0VOQUJMRSgpICAgKFJDQy0+QVBCMUxQRU5SIHw9IChSQ0NfQVBCMUxQRU5SX1VBUlQ0TFBFTikpCiAjZGVmaW5lIF9fSEFMX1JDQ19VQVJUNV9DTEtfU0xFRVBfRU5BQkxFKCkgICAoUkNDLT5BUEIxTFBFTlIgfD0gKFJDQ19BUEIxTFBFTlJfVUFSVDVMUEVOKSkKQEAgLTU2NjQsOSArNTY1MCw3IEBACiAjZW5kaWYgLyogU1RNMzJGNDEzeHggfHwgU1RNMzJGNDIzeHggKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAjZGVmaW5lIF9fSEFMX1JDQ19SVENBUEJfQ0xLX1NMRUVQX0RJU0FCTEUoKSAoUkNDLT5BUEIxTFBFTlIgJj0gfihSQ0NfQVBCMUxQRU5SX1JUQ0FQQkxQRU4pKQogI2RlZmluZSBfX0hBTF9SQ0NfU1BJM19DTEtfU0xFRVBfRElTQUJMRSgpICAgKFJDQy0+QVBCMUxQRU5SICY9IH4oUkNDX0FQQjFMUEVOUl9TUEkzTFBFTikpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotI2lmIGRlZmluZWQoU1RNMzJGNDEyWngpIHx8IGRlZmluZWQoU1RNMzJGNDEyVngpIHx8IGRlZmluZWQoU1RNMzJGNDEyUngpIHx8IGRlZmluZWQoU1RNMzJGNDEzeHgpIHx8IGRlZmluZWQoU1RNMzJGNDIzeHgpCiAjZGVmaW5lIF9fSEFMX1JDQ19VU0FSVDNfQ0xLX1NMRUVQX0RJU0FCTEUoKSAoUkNDLT5BUEIxTFBFTlIgJj0gfihSQ0NfQVBCMUxQRU5SX1VTQVJUM0xQRU4pKQotI2VuZGlmIC8qIFNUTTMyRjQxMlp4IHx8IFNUTTMyRjQxMlZ4IHx8IFNUTTMyRjQxMlJ4IHx8IFNUTTMyRjQxM3h4IHx8IFNUTTMyRjQyM3h4ICovCiAjaWYgZGVmaW5lZChTVE0zMkY0MTN4eCkgfHwgZGVmaW5lZChTVE0zMkY0MjN4eCkKICNkZWZpbmUgX19IQUxfUkNDX1VBUlQ0X0NMS19TTEVFUF9ESVNBQkxFKCkgIChSQ0MtPkFQQjFMUEVOUiAmPSB+KFJDQ19BUEIxTFBFTlJfVUFSVDRMUEVOKSkKICNkZWZpbmUgX19IQUxfUkNDX1VBUlQ1X0NMS19TTEVFUF9ESVNBQkxFKCkgIChSQ0MtPkFQQjFMUEVOUiAmPSB+KFJDQ19BUEIxTFBFTlJfVUFSVDVMUEVOKSkKQEAgLTYzODQsNyArNjM2OCw3IEBACiAgICogQHBhcmFtICBfX0RGU0RNMV9DTEtTT1VSQ0VfXyBzcGVjaWZpZXMgdGhlIERGU0RNMSBjbG9jayBzb3VyY2UuCiAgICogICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICAqICAgICAgICAgICAgQGFyZyBSQ0NfREZTRE0xQ0xLU09VUkNFX1BDTEsyOiBQQ0xLMiBjbG9jayB1c2VkIGFzIGtlcm5lbCBjbG9jay4gCi0gICogICAgICAgICAgICBAYXJnIFJDQ19ERlNETTFDTEtTT1VSQ0VfU1lTQ0xLOiBTeXN0ZW0gY2xvY2sgdXNlZCBhcyBrZXJuYWwgY2xvY2suCisgICogICAgICAgICAgICBAYXJnIFJDQ19ERlNETTFDTEtTT1VSQ0VfU1lTQ0xLOiBTeXN0ZW0gY2xvY2sgdXNlZCBhcyBrZXJuZWwgY2xvY2suCiAgICogQHJldHZhbCBOb25lCiAgICovCiAjZGVmaW5lIF9fSEFMX1JDQ19ERlNETTFfQ09ORklHKF9fREZTRE0xX0NMS1NPVVJDRV9fKSAgTU9ESUZZX1JFRyhSQ0MtPkRDS0NGR1IsIFJDQ19EQ0tDRkdSX0NLREZTRE0xU0VMLCAoX19ERlNETTFfQ0xLU09VUkNFX18pKQpAQCAtNjM5Miw3ICs2Mzc2LDcgQEAKIC8qKiBAYnJpZWYgIE1hY3JvIHRvIGdldCB0aGUgREZTRE0xIGNsb2NrIHNvdXJjZS4KICAgKiBAcmV0dmFsIFRoZSBjbG9jayBzb3VyY2UgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAgKiAgICAgICAgICAgIEBhcmcgUkNDX0RGU0RNMUNMS1NPVVJDRV9QQ0xLMjogUENMSzIgY2xvY2sgdXNlZCBhcyBrZXJuZWwgY2xvY2suIAotICAqICAgICAgICAgICAgQGFyZyBSQ0NfREZTRE0xQ0xLU09VUkNFX1NZU0NMSzogU3lzdGVtIGNsb2NrIHVzZWQgYXMga2VybmFsIGNsb2NrLgorICAqICAgICAgICAgICAgQGFyZyBSQ0NfREZTRE0xQ0xLU09VUkNFX1NZU0NMSzogU3lzdGVtIGNsb2NrIHVzZWQgYXMga2VybmVsIGNsb2NrLgogICAqLwogI2RlZmluZSBfX0hBTF9SQ0NfR0VUX0RGU0RNMV9TT1VSQ0UoKSAoKHVpbnQzMl90KShSRUFEX0JJVChSQ0MtPkRDS0NGR1IsIFJDQ19EQ0tDRkdSX0NLREZTRE0xU0VMKSkpCiAKQEAgLTY0MjAsNyArNjQwNCw3IEBACiAgICogQHBhcmFtICBfX0RGU0RNMl9DTEtTT1VSQ0VfXyBzcGVjaWZpZXMgdGhlIERGU0RNMSBjbG9jayBzb3VyY2UuCiAgICogICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICAqICAgICAgICAgICAgQGFyZyBSQ0NfREZTRE0yQ0xLU09VUkNFX1BDTEsyOiBQQ0xLMiBjbG9jayB1c2VkIGFzIGtlcm5lbCBjbG9jay4gCi0gICogICAgICAgICAgICBAYXJnIFJDQ19ERlNETTJDTEtTT1VSQ0VfU1lTQ0xLOiBTeXN0ZW0gY2xvY2sgdXNlZCBhcyBrZXJuYWwgY2xvY2suCisgICogICAgICAgICAgICBAYXJnIFJDQ19ERlNETTJDTEtTT1VSQ0VfU1lTQ0xLOiBTeXN0ZW0gY2xvY2sgdXNlZCBhcyBrZXJuZWwgY2xvY2suCiAgICogQHJldHZhbCBOb25lCiAgICovCiAjZGVmaW5lIF9fSEFMX1JDQ19ERlNETTJfQ09ORklHKF9fREZTRE0yX0NMS1NPVVJDRV9fKSAgTU9ESUZZX1JFRyhSQ0MtPkRDS0NGR1IsIFJDQ19EQ0tDRkdSX0NLREZTRE0xU0VMLCAoX19ERlNETTJfQ0xLU09VUkNFX18pKQpAQCAtNjQyOCw3ICs2NDEyLDcgQEAKIC8qKiBAYnJpZWYgIE1hY3JvIHRvIGdldCB0aGUgREZTRE0yIGNsb2NrIHNvdXJjZS4KICAgKiBAcmV0dmFsIFRoZSBjbG9jayBzb3VyY2UgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAgKiAgICAgICAgICAgIEBhcmcgUkNDX0RGU0RNMkNMS1NPVVJDRV9QQ0xLMjogUENMSzIgY2xvY2sgdXNlZCBhcyBrZXJuZWwgY2xvY2suIAotICAqICAgICAgICAgICAgQGFyZyBSQ0NfREZTRE0yQ0xLU09VUkNFX1NZU0NMSzogU3lzdGVtIGNsb2NrIHVzZWQgYXMga2VybmFsIGNsb2NrLgorICAqICAgICAgICAgICAgQGFyZyBSQ0NfREZTRE0yQ0xLU09VUkNFX1NZU0NMSzogU3lzdGVtIGNsb2NrIHVzZWQgYXMga2VybmVsIGNsb2NrLgogICAqLwogI2RlZmluZSBfX0hBTF9SQ0NfR0VUX0RGU0RNMl9TT1VSQ0UoKSAoKHVpbnQzMl90KShSRUFEX0JJVChSQ0MtPkRDS0NGR1IsIFJDQ19EQ0tDRkdSX0NLREZTRE0xU0VMKSkpCiAKQEAgLTY4NjcsMTYgKzY4NTEsOCBAQAogLyoqIEBkZWZncm91cCBSQ0NFeF9JU19SQ0NfRGVmaW5pdGlvbnMgUkNDIFByaXZhdGUgbWFjcm9zIHRvIGNoZWNrIGlucHV0IHBhcmFtZXRlcnMKICAgKiBAewogICAqLwotI2lmIGRlZmluZWQoU1RNMzJGNDExeEUpCi0jZGVmaW5lIElTX1JDQ19QTExOX1ZBTFVFKFZBTFVFKSAoKDE5MlUgPD0gKFZBTFVFKSkgJiYgKChWQUxVRSkgPD0gNDMyVSkpCi0jZGVmaW5lIElTX1JDQ19QTExJMlNOX1ZBTFVFKFZBTFVFKSAoKDE5MlUgPD0gKFZBTFVFKSkgJiYgKChWQUxVRSkgPD0gNDMyVSkpICAgICAgCi0jZWxzZSAvKiBTVE0zMkY0MDV4eCB8fCBTVE0zMkY0MTV4eCB8fCBTVE0zMkY0MDd4eCB8fCBTVE0zMkY0MTd4eCB8fCBTVE0zMkY0Mjd4eCB8fCBTVE0zMkY0Mzd4eCB8fAotICAgICAgICAgU1RNMzJGNDI5eHggfHwgU1RNMzJGNDM5eHggfHwgU1RNMzJGNDAxeEMgfHwgU1RNMzJGNDAxeEUgfHwgU1RNMzJGNDEwVHggfHwgU1RNMzJGNDEwQ3ggfHwgCi0gICAgICAgICBTVE0zMkY0MTBSeCB8fCBTVE0zMkY0NDZ4eCB8fCBTVE0zMkY0Njl4eCB8fCBTVE0zMkY0Nzl4eCB8fCBTVE0zMkY0MTJDeCB8fCBTVE0zMkY0MTJSeCB8fCAKLSAgICAgICAgIFNUTTMyRjQxMlZ4IHx8IFNUTTMyRjQxMlp4IHx8IFNUTTMyRjQxM3h4IHx8IFNUTTMyRjQyM3h4ICovCiAjZGVmaW5lIElTX1JDQ19QTExOX1ZBTFVFKFZBTFVFKSAoKDUwVSA8PSAoVkFMVUUpKSAmJiAoKFZBTFVFKSA8PSA0MzJVKSkKICNkZWZpbmUgSVNfUkNDX1BMTEkyU05fVkFMVUUoVkFMVUUpICgoNTBVIDw9IChWQUxVRSkpICYmICgoVkFMVUUpIDw9IDQzMlUpKQotI2VuZGlmICAvKiBTVE0zMkY0MTF4RSAqLyAgICAKICAgICAgIAogI2lmIGRlZmluZWQoU1RNMzJGNDI3eHgpIHx8IGRlZmluZWQoU1RNMzJGNDM3eHgpIHx8IGRlZmluZWQoU1RNMzJGNDI5eHgpfHwgZGVmaW5lZChTVE0zMkY0Mzl4eCkKICNkZWZpbmUgSVNfUkNDX1BFUklQSENMT0NLKFNFTEVDVElPTikgKCgxVSA8PSAoU0VMRUNUSU9OKSkgJiYgKChTRUxFQ1RJT04pIDw9IDB4MDAwMDAwN0ZVKSkKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmY0eHhfaGFsX3J0Yy5oIGIvSW5jL3N0bTMyZjR4eF9oYWxfcnRjLmgKaW5kZXggZjVmY2ZkYy4uOWFmYThhMSAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZjR4eF9oYWxfcnRjLmgKKysrIGIvSW5jL3N0bTMyZjR4eF9oYWxfcnRjLmgKQEAgLTEwNSwxMiArMTA1LDExIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIFsxIFNlYyAvIFNlY29uZEZyYWN0aW9uICsxXSBncmFudWxhcml0eS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgZmllbGQgd2lsbCBiZSB1c2VkIG9ubHkgYnkgSEFMX1JUQ19HZXRUaW1lIGZ1bmN0aW9uICovCiAKLSAgdWludDMyX3QgRGF5TGlnaHRTYXZpbmc7ICAvKiE8IFNwZWNpZmllcyBEYXlMaWdodCBTYXZlIE9wZXJhdGlvbi4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgUlRDX0RheUxpZ2h0U2F2aW5nX0RlZmluaXRpb25zICovCisgIHVpbnQzMl90IERheUxpZ2h0U2F2aW5nOyAgLyohPCBUaGlzIGludGVyZmFjZSBpcyBkZXByZWNhdGVkLiBUbyBtYW5hZ2UgRGF5bGlnaHQgU2F2aW5nIFRpbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGVhc2UgdXNlIEhBTF9SVENfRFNUX3h4eCBmdW5jdGlvbnMgKi8KIAotICB1aW50MzJfdCBTdG9yZU9wZXJhdGlvbjsgIC8qITwgU3BlY2lmaWVzIFJUQ19TdG9yZU9wZXJhdGlvbiB2YWx1ZSB0byBiZSB3cml0dGVuIGluIHRoZSBCQ0sgYml0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBDUiByZWdpc3RlciB0byBzdG9yZSB0aGUgb3BlcmF0aW9uLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBSVENfU3RvcmVPcGVyYXRpb25fRGVmaW5pdGlvbnMgKi8KKyAgdWludDMyX3QgU3RvcmVPcGVyYXRpb247ICAvKiE8IFRoaXMgaW50ZXJmYWNlIGlzIGRlcHJlY2F0ZWQuIFRvIG1hbmFnZSBEYXlsaWdodCBTYXZpbmcgVGltZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsZWFzZSB1c2UgSEFMX1JUQ19EU1RfeHh4IGZ1bmN0aW9ucyAqLwogfVJUQ19UaW1lVHlwZURlZjsKIAogLyoqCkBAIC03MDEsNiArNzAwLDExIEBACiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfUlRDX0dldFRpbWUoUlRDX0hhbmRsZVR5cGVEZWYgKmhydGMsIFJUQ19UaW1lVHlwZURlZiAqc1RpbWUsIHVpbnQzMl90IEZvcm1hdCk7CiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfUlRDX1NldERhdGUoUlRDX0hhbmRsZVR5cGVEZWYgKmhydGMsIFJUQ19EYXRlVHlwZURlZiAqc0RhdGUsIHVpbnQzMl90IEZvcm1hdCk7CiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfUlRDX0dldERhdGUoUlRDX0hhbmRsZVR5cGVEZWYgKmhydGMsIFJUQ19EYXRlVHlwZURlZiAqc0RhdGUsIHVpbnQzMl90IEZvcm1hdCk7Cit2b2lkICAgICAgICAgICAgICBIQUxfUlRDX0RTVF9BZGQxSG91cihSVENfSGFuZGxlVHlwZURlZiAqaHJ0Yyk7Cit2b2lkICAgICAgICAgICAgICBIQUxfUlRDX0RTVF9TdWIxSG91cihSVENfSGFuZGxlVHlwZURlZiAqaHJ0Yyk7Cit2b2lkICAgICAgICAgICAgICBIQUxfUlRDX0RTVF9TZXRTdG9yZU9wZXJhdGlvbihSVENfSGFuZGxlVHlwZURlZiAqaHJ0Yyk7Cit2b2lkICAgICAgICAgICAgICBIQUxfUlRDX0RTVF9DbGVhclN0b3JlT3BlcmF0aW9uKFJUQ19IYW5kbGVUeXBlRGVmICpocnRjKTsKK3VpbnQzMl90ICAgICAgICAgIEhBTF9SVENfRFNUX1JlYWRTdG9yZU9wZXJhdGlvbihSVENfSGFuZGxlVHlwZURlZiAqaHJ0Yyk7CiAvKioKICAgKiBAfQogICAqLwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZjR4eF9oYWxfc2FpLmggYi9JbmMvc3RtMzJmNHh4X2hhbF9zYWkuaAppbmRleCBjZTJkNTBlLi4wMzA3ZjkyIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmNHh4X2hhbF9zYWkuaAorKysgYi9JbmMvc3RtMzJmNHh4X2hhbF9zYWkuaApAQCAtMjIsNyArMjIsNyBAQAogI2RlZmluZSBfX1NUTTMyRjR4eF9IQUxfU0FJX0gKIAogI2lmZGVmIF9fY3BsdXNwbHVzCi0gZXh0ZXJuICJDIiB7CitleHRlcm4gIkMiIHsKICNlbmRpZgogCiAvKiBJbmNsdWRlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtNTYsNyArNTYsNyBAQAogICBIQUxfU0FJX1NUQVRFX0JVU1lfUlggICAgPSAweDIyVSwgIC8qITwgRGF0YSByZWNlcHRpb24gcHJvY2VzcyBpcyBvbmdvaW5nICAgICAgICAgICAgICAgICAgKi8KICAgSEFMX1NBSV9TVEFURV9USU1FT1VUICAgID0gMHgwM1UsICAvKiE8IFNBSSB0aW1lb3V0IHN0YXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIEhBTF9TQUlfU1RBVEVfRVJST1IgICAgICA9IDB4MDRVICAgLyohPCBTQUkgZXJyb3Igc3RhdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotfUhBTF9TQUlfU3RhdGVUeXBlRGVmOworfSBIQUxfU0FJX1N0YXRlVHlwZURlZjsKIAogLyoqCiAgICogQGJyaWVmICBTQUkgQ2FsbGJhY2sgcHJvdG90eXBlCkBAIC0xMzIsMTMgKzEzMiwxNCBAQAogCiAgIHVpbnQzMl90IENsb2NrU3Ryb2Jpbmc7ICAgLyohPCBTcGVjaWZpZXMgdGhlIFNBSSBCbG9jayBjbG9jayBzdHJvYmluZyBlZGdlIHNlbnNpdGl2aXR5LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBTQUlfQmxvY2tfQ2xvY2tfU3Ryb2JpbmcgICAgICAgICAgICAgICAgKi8KLX1TQUlfSW5pdFR5cGVEZWY7Cit9IFNBSV9Jbml0VHlwZURlZjsKIC8qKgogICAqIEB9CiAgICovCiAKIC8qKiBAZGVmZ3JvdXAgU0FJX0ZyYW1lX1N0cnVjdHVyZV9kZWZpbml0aW9uIFNBSSBGcmFtZSBTdHJ1Y3R1cmUgZGVmaW5pdGlvbgogICAqIEBicmllZiAgU0FJIEZyYW1lIEluaXQgc3RydWN0dXJlIGRlZmluaXRpb24KKyAgKiBAbm90ZSAgIEZvciBTUERJRiBhbmQgQUM5NyBwcm90b2NvbCwgdGhlc2UgcGFyYW1ldGVycyBhcmUgbm90IHVzZWQgKHNldCBieSBoYXJkd2FyZSkuCiAgICogQHsKICAgKi8KIHR5cGVkZWYgc3RydWN0CkBAIC0xNjIsMTMgKzE2MywxNSBAQAogCiAgIHVpbnQzMl90IEZTT2Zmc2V0OyAgICAgICAgICAgLyohPCBTcGVjaWZpZXMgdGhlIEZyYW1lIHN5bmNocm9uaXphdGlvbiBPZmZzZXQuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIFNBSV9CbG9ja19GU19PZmZzZXQgICAgICAgICAgICAgICAgICovCi19U0FJX0ZyYW1lSW5pdFR5cGVEZWY7Cit9IFNBSV9GcmFtZUluaXRUeXBlRGVmOwogLyoqCiAgICogQH0KICAgKi8KIAogLyoqIEBkZWZncm91cCBTQUlfU2xvdF9TdHJ1Y3R1cmVfZGVmaW5pdGlvbiBTQUkgU2xvdCBTdHJ1Y3R1cmUgZGVmaW5pdGlvbgogICAqIEBicmllZiAgIFNBSSBCbG9jayBTbG90IEluaXQgU3RydWN0dXJlIGRlZmluaXRpb24KKyAgKiBAbm90ZSAgICBGb3IgU1BESUYgcHJvdG9jb2wsIHRoZXNlIHBhcmFtZXRlcnMgYXJlIG5vdCB1c2VkIChzZXQgYnkgaGFyZHdhcmUpLgorICAqIEBub3RlICAgIEZvciBBQzk3IHByb3RvY29sLCBvbmx5IFNsb3RBY3RpdmUgcGFyYW1ldGVyIGlzIHVzZWQgKHRoZSBvdGhlcnMgYXJlIHNldCBieSBoYXJkd2FyZSkuCiAgICogQHsKICAgKi8KIHR5cGVkZWYgc3RydWN0CkBAIC0xODQsNyArMTg3LDcgQEAKIAogICB1aW50MzJfdCBTbG90QWN0aXZlOyAgICAgIC8qITwgU3BlY2lmaWVzIHRoZSBzbG90cyBpbiBhdWRpbyBmcmFtZSB0aGF0IHdpbGwgYmUgYWN0aXZhdGVkLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBTQUlfQmxvY2tfU2xvdF9BY3RpdmUgICAgICAgICAgICAqLwotfVNBSV9TbG90SW5pdFR5cGVEZWY7Cit9IFNBSV9TbG90SW5pdFR5cGVEZWY7CiAvKioKICAgKiBAfQogICAqLwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZjR4eF9oYWxfc2FpX2V4LmggYi9JbmMvc3RtMzJmNHh4X2hhbF9zYWlfZXguaAppbmRleCAzMzk4ZmIyLi5mYmQ0NDk3IDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmNHh4X2hhbF9zYWlfZXguaAorKysgYi9JbmMvc3RtMzJmNHh4X2hhbF9zYWlfZXguaApAQCAtMTUsMTggKzE1LDE4IEBACiAgICogICAgICAgICAgICAgICAgICAgICAgICBvcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2UKICAgKgogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgKi8gCisgICovCiAKIC8qIERlZmluZSB0byBwcmV2ZW50IHJlY3Vyc2l2ZSBpbmNsdXNpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAjaWZuZGVmIF9fU1RNMzJGNHh4X0hBTF9TQUlfRVhfSAogI2RlZmluZSBfX1NUTTMyRjR4eF9IQUxfU0FJX0VYX0gKIAogI2lmZGVmIF9fY3BsdXNwbHVzCi0gZXh0ZXJuICJDIiB7CitleHRlcm4gIkMiIHsKICNlbmRpZgogCiAvKiBJbmNsdWRlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotI2luY2x1ZGUgInN0bTMyZjR4eF9oYWxfZGVmLmgiICAKKyNpbmNsdWRlICJzdG0zMmY0eHhfaGFsX2RlZi5oIgogCiAvKiogQGFkZHRvZ3JvdXAgU1RNMzJGNHh4X0hBTF9Ecml2ZXIKICAgKiBAewpAQCAtNDUsMTIgKzQ1LDEyIEBACiAvKiogQGRlZmdyb3VwIFNBSV9DbG9ja19Tb3VyY2UgIFNBSSBDbG9jayBTb3VyY2UKICAgKiBAewogICAqLwotI2lmIGRlZmluZWQoU1RNMzJGNDEzeHgpIHx8IGRlZmluZWQoU1RNMzJGNDIzeHgpICAgICAgCisjaWYgZGVmaW5lZChTVE0zMkY0MTN4eCkgfHwgZGVmaW5lZChTVE0zMkY0MjN4eCkKICNkZWZpbmUgU0FJX0NMS1NPVVJDRV9QTExJMlMgICAgICAgICAgICAgMHgwMDAwMDAwMFUKICNkZWZpbmUgU0FJX0NMS1NPVVJDRV9FWFQgICAgICAgICAgICAgICAgMHgwMDEwMDAwMFUKICNkZWZpbmUgU0FJX0NMS1NPVVJDRV9QTExSICAgICAgICAgICAgICAgMHgwMDIwMDAwMFUKICNkZWZpbmUgU0FJX0NMS1NPVVJDRV9IUyAgICAgICAgICAgICAgICAgMHgwMDMwMDAwMFUKLSNlbHNlICAgICAgCisjZWxzZQogI2RlZmluZSBTQUlfQ0xLU09VUkNFX1BMTFNBSSAgICAgICAgICAgICAweDAwMDAwMDAwVQogI2RlZmluZSBTQUlfQ0xLU09VUkNFX1BMTEkyUyAgICAgICAgICAgICAweDAwMTAwMDAwVQogI2RlZmluZSBTQUlfQ0xLU09VUkNFX0VYVCAgICAgICAgICAgICAgICAweDAwMjAwMDAwVQpAQCAtNjEsNyArNjEsNyBAQAogLyoqCiAgICogQH0KICAgKi8KLSAgICAgIAorCiAvKiBFeHBvcnRlZCBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyoqIEBhZGR0b2dyb3VwIFNBSUV4X0V4cG9ydGVkX0Z1bmN0aW9ucwogICAqIEB7CkBAIC04NSw3ICs4NSw3IEBACiAvKiBQcml2YXRlIHZhcmlhYmxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyogUHJpdmF0ZSBjb25zdGFudHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qIFByaXZhdGUgbWFjcm9zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0jaWYgZGVmaW5lZChTVE0zMkY0MTN4eCkgfHwgZGVmaW5lZChTVE0zMkY0MjN4eCkgCisjaWYgZGVmaW5lZChTVE0zMkY0MTN4eCkgfHwgZGVmaW5lZChTVE0zMkY0MjN4eCkKICNkZWZpbmUgSVNfU0FJX0NMS19TT1VSQ0UoU09VUkNFKSAoKChTT1VSQ0UpID09IFNBSV9DTEtTT1VSQ0VfUExMSTJTKSB8fFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChTT1VSQ0UpID09IFNBSV9DTEtTT1VSQ0VfRVhUKXx8XAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFNPVVJDRSkgPT0gU0FJX0NMS1NPVVJDRV9QTExSKXx8XApkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZjR4eF9oYWxfc2QuaCBiL0luYy9zdG0zMmY0eHhfaGFsX3NkLmgKaW5kZXggMmUyNTRmMS4uZTgyZTdlMCAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZjR4eF9oYWxfc2QuaAorKysgYi9JbmMvc3RtMzJmNHh4X2hhbF9zZC5oCkBAIC01NSw3ICs1NSw3IEBACiAgIEhBTF9TRF9TVEFURV9CVVNZICAgICAgICAgICAgICAgICAgID0gMHgwMDAwMDAwM1UsICAvKiE8IFNEIHByb2Nlc3Mgb25nb2luZyAgICAgICAgICAgICAgICAgICovCiAgIEhBTF9TRF9TVEFURV9QUk9HUkFNTUlORyAgICAgICAgICAgID0gMHgwMDAwMDAwNFUsICAvKiE8IFNEIFByb2dyYW1taW5nIFN0YXRlICAgICAgICAgICAgICAgICovCiAgIEhBTF9TRF9TVEFURV9SRUNFSVZJTkcgICAgICAgICAgICAgID0gMHgwMDAwMDAwNVUsICAvKiE8IFNEIFJlY2VpdmluZyBTdGF0ZSAgICAgICAgICAgICAgICAgICovCi0gIEhBTF9TRF9TVEFURV9UUkFOU0ZFUiAgICAgICAgICAgICAgID0gMHgwMDAwMDAwNlUsICAvKiE8IFNEIFRyYW5zZmVydCBTdGF0ZSAgICAgICAgICAgICAgICAgICovCisgIEhBTF9TRF9TVEFURV9UUkFOU0ZFUiAgICAgICAgICAgICAgID0gMHgwMDAwMDAwNlUsICAvKiE8IFNEIFRyYW5zZmVyIFN0YXRlICAgICAgICAgICAgICAgICAgKi8KICAgSEFMX1NEX1NUQVRFX0VSUk9SICAgICAgICAgICAgICAgICAgPSAweDAwMDAwMDBGVSAgIC8qITwgU0QgaXMgaW4gZXJyb3Igc3RhdGUgICAgICAgICAgICAgICAgKi8KIH1IQUxfU0RfU3RhdGVUeXBlRGVmOwogLyoqIApkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZjR4eF9oYWxfc21hcnRjYXJkLmggYi9JbmMvc3RtMzJmNHh4X2hhbF9zbWFydGNhcmQuaAppbmRleCA3NWUzMzgzLi5jM2QxNTQ0IDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmNHh4X2hhbF9zbWFydGNhcmQuaAorKysgYi9JbmMvc3RtMzJmNHh4X2hhbF9zbWFydGNhcmQuaApAQCAtMTAxLDcgKzEwMSw3IEBACiAgICogICAgICAgICAgICAgMTEgOiBFcnJvcgogICAqICAgICAgICAgIGI1ICAgICBJUCBpbml0aWxpc2F0aW9uIHN0YXR1cwogICAqICAgICAgICAgICAgIDAgIDogUmVzZXQgKElQIG5vdCBpbml0aWFsaXplZCkKLSAgKiAgICAgICAgICAgICAxICA6IEluaXQgZG9uZSAoSVAgbm90IGluaXRpYWxpemVkLiBIQUwgU01BUlRDQVJEIEluaXQgZnVuY3Rpb24gYWxyZWFkeSBjYWxsZWQpCisgICogICAgICAgICAgICAgMSAgOiBJbml0IGRvbmUgKElQIGluaXRpYWxpemVkLiBIQUwgU01BUlRDQVJEIEluaXQgZnVuY3Rpb24gYWxyZWFkeSBjYWxsZWQpCiAgICogICAgICAgICAgYjQtYjMgIChub3QgdXNlZCkKICAgKiAgICAgICAgICAgICB4eCA6IFNob3VsZCBiZSBzZXQgdG8gMDAKICAgKiAgICAgICAgICBiMiAgICAgSW50cmluc2ljIHByb2Nlc3Mgc3RhdGUKQEAgLTExOCw3ICsxMTgsNyBAQAogICAqICAgICAgICAgICAgIHh4IDogU2hvdWxkIGJlIHNldCB0byAwMAogICAqICAgICAgICAgIGI1ICAgICBJUCBpbml0aWxpc2F0aW9uIHN0YXR1cwogICAqICAgICAgICAgICAgIDAgIDogUmVzZXQgKElQIG5vdCBpbml0aWFsaXplZCkKLSAgKiAgICAgICAgICAgICAxICA6IEluaXQgZG9uZSAoSVAgbm90IGluaXRpYWxpemVkKQorICAqICAgICAgICAgICAgIDEgIDogSW5pdCBkb25lIChJUCBpbml0aWFsaXplZCkKICAgKiAgICAgICAgICBiNC1iMiAgKG5vdCB1c2VkKQogICAqICAgICAgICAgICAgeHh4IDogU2hvdWxkIGJlIHNldCB0byAwMDAKICAgKiAgICAgICAgICBiMSAgICAgUnggc3RhdGUKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmY0eHhfaGFsX3NtYnVzLmggYi9JbmMvc3RtMzJmNHh4X2hhbF9zbWJ1cy5oCmluZGV4IDBjODBmZDMuLjA1NmE2MDAgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmY0eHhfaGFsX3NtYnVzLmgKKysrIGIvSW5jL3N0bTMyZjR4eF9oYWxfc21idXMuaApAQCAtODYsNyArODYsNyBAQAogICAqICAgICAgICAgICAgIDAxIDogQWJvcnQgKEFib3J0IHVzZXIgcmVxdWVzdCBvbiBnb2luZykKICAgKiAgICAgICAgICAgICAxMCA6IFRpbWVvdXQKICAgKiAgICAgICAgICAgICAxMSA6IEVycm9yCi0gICogICAgICAgICAgYjUgICAgIElQIGluaXRpbGlzYXRpb24gc3RhdHVzCisgICogICAgICAgICAgYjUgICAgIElQIGluaXRpYWxpc2F0aW9uIHN0YXR1cwogICAqICAgICAgICAgICAgIDAgIDogUmVzZXQgKElQIG5vdCBpbml0aWFsaXplZCkKICAgKiAgICAgICAgICAgICAxICA6IEluaXQgZG9uZSAoSVAgaW5pdGlhbGl6ZWQgYW5kIHJlYWR5IHRvIHVzZS4gSEFMIFNNQlVTIEluaXQgZnVuY3Rpb24gY2FsbGVkKQogICAqICAgICAgICAgIGI0ICAgICAobm90IHVzZWQpCkBAIC02MDksNyArNjA5LDcgQEAKICAgKiBAfQogICAqLwogCi0vKiogQGFkZHRvZ3JvdXAgU01CVVNfRXhwb3J0ZWRfRnVuY3Rpb25zX0dyb3VwMyBQZXJpcGhlcmFsIFN0YXRlIGFuZCBFcnJvcnMgZnVuY3Rpb25zCisvKiogQGFkZHRvZ3JvdXAgU01CVVNfRXhwb3J0ZWRfRnVuY3Rpb25zX0dyb3VwMyBQZXJpcGhlcmFsIFN0YXRlLCBNb2RlIGFuZCBFcnJvciBmdW5jdGlvbnMKICAgKiBAewogICAqLwogCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJmNHh4X2hhbF9zcGkuaCBiL0luYy9zdG0zMmY0eHhfaGFsX3NwaS5oCmluZGV4IDQxOTAzZGEuLmYyZTA3YzIgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmY0eHhfaGFsX3NwaS5oCisrKyBiL0luYy9zdG0zMmY0eHhfaGFsX3NwaS5oCkBAIC00OTMsNyArNDkzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFVF9CSVQoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+Q1IxLCBTUElfQ1IxX0NSQ0VOKTt9d2hpbGUoMFUpCiAKIC8qKiBAYnJpZWYgIENoZWNrIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBTUEkgZmxhZyBpcyBzZXQgb3Igbm90LgotICAqIEBwYXJhbSAgX19TUl9fICBjb3B5IG9mIFNQSSBTUiByZWdzaXRlci4KKyAgKiBAcGFyYW0gIF9fU1JfXyAgY29weSBvZiBTUEkgU1IgcmVnaXN0ZXIuCiAgICogQHBhcmFtICBfX0ZMQUdfXyBzcGVjaWZpZXMgdGhlIGZsYWcgdG8gY2hlY2suCiAgICogICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICAqICAgICAgICAgICAgQGFyZyBTUElfRkxBR19SWE5FOiBSZWNlaXZlIGJ1ZmZlciBub3QgZW1wdHkgZmxhZwpAQCAtNTA1LDEwICs1MDUsMTEgQEAKICAgKiAgICAgICAgICAgIEBhcmcgU1BJX0ZMQUdfRlJFOiBGcmFtZSBmb3JtYXQgZXJyb3IgZmxhZwogICAqIEByZXR2YWwgU0VUIG9yIFJFU0VULgogICAqLwotI2RlZmluZSBTUElfQ0hFQ0tfRkxBRyhfX1NSX18sIF9fRkxBR19fKSAgICAgICAgICgoKChfX1NSX18pICYgKChfX0ZMQUdfXykgJiBTUElfRkxBR19NQVNLKSkgPT0gKChfX0ZMQUdfXykgJiBTUElfRkxBR19NQVNLKSkgPyBTRVQgOiBSRVNFVCkKKyNkZWZpbmUgU1BJX0NIRUNLX0ZMQUcoX19TUl9fLCBfX0ZMQUdfXykgKCgoKF9fU1JfXykgJiAoKF9fRkxBR19fKSAmIFNQSV9GTEFHX01BU0spKSA9PSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fRkxBR19fKSAmIFNQSV9GTEFHX01BU0spKSA/IFNFVCA6IFJFU0VUKQogCiAvKiogQGJyaWVmICBDaGVjayB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgU1BJIEludGVycnVwdCBpcyBzZXQgb3Igbm90LgotICAqIEBwYXJhbSAgX19DUjJfXyAgY29weSBvZiBTUEkgQ1IyIHJlZ3NpdGVyLgorICAqIEBwYXJhbSAgX19DUjJfXyAgY29weSBvZiBTUEkgQ1IyIHJlZ2lzdGVyLgogICAqIEBwYXJhbSAgX19JTlRFUlJVUFRfXyBzcGVjaWZpZXMgdGhlIFNQSSBpbnRlcnJ1cHQgc291cmNlIHRvIGNoZWNrLgogICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAgKiAgICAgICAgICAgIEBhcmcgU1BJX0lUX1RYRTogVHggYnVmZmVyIGVtcHR5IGludGVycnVwdCBlbmFibGUKQEAgLTUxNiwxNSArNTE3LDE2IEBACiAgICogICAgICAgICAgICBAYXJnIFNQSV9JVF9FUlI6IEVycm9yIGludGVycnVwdCBlbmFibGUKICAgKiBAcmV0dmFsIFNFVCBvciBSRVNFVC4KICAgKi8KLSNkZWZpbmUgU1BJX0NIRUNLX0lUX1NPVVJDRShfX0NSMl9fLCBfX0lOVEVSUlVQVF9fKSAgICAgICgoKChfX0NSMl9fKSAmIChfX0lOVEVSUlVQVF9fKSkgPT0gKF9fSU5URVJSVVBUX18pKSA/IFNFVCA6IFJFU0VUKQorI2RlZmluZSBTUElfQ0hFQ0tfSVRfU09VUkNFKF9fQ1IyX18sIF9fSU5URVJSVVBUX18pICgoKChfX0NSMl9fKSAmIChfX0lOVEVSUlVQVF9fKSkgPT0gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19JTlRFUlJVUFRfXykpID8gU0VUIDogUkVTRVQpCiAKIC8qKiBAYnJpZWYgIENoZWNrcyBpZiBTUEkgTW9kZSBwYXJhbWV0ZXIgaXMgaW4gYWxsb3dlZCByYW5nZS4KICAgKiBAcGFyYW0gIF9fTU9ERV9fIHNwZWNpZmllcyB0aGUgU1BJIE1vZGUuCiAgICogICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIFNQSV9Nb2RlCiAgICogQHJldHZhbCBOb25lCiAgICovCi0jZGVmaW5lIElTX1NQSV9NT0RFKF9fTU9ERV9fKSAoKChfX01PREVfXykgPT0gU1BJX01PREVfU0xBVkUpIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fTU9ERV9fKSA9PSBTUElfTU9ERV9NQVNURVIpKQorI2RlZmluZSBJU19TUElfTU9ERShfX01PREVfXykgICAgICAoKChfX01PREVfXykgPT0gU1BJX01PREVfU0xBVkUpICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX01PREVfXykgPT0gU1BJX01PREVfTUFTVEVSKSkKIAogLyoqIEBicmllZiAgQ2hlY2tzIGlmIFNQSSBEaXJlY3Rpb24gTW9kZSBwYXJhbWV0ZXIgaXMgaW4gYWxsb3dlZCByYW5nZS4KICAgKiBAcGFyYW0gIF9fTU9ERV9fIHNwZWNpZmllcyB0aGUgU1BJIERpcmVjdGlvbiBNb2RlLgpAQCAtNTYxLDI1ICs1NjMsMjUgQEAKICAgKiAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgU1BJX0Nsb2NrX1BvbGFyaXR5CiAgICogQHJldHZhbCBOb25lCiAgICovCi0jZGVmaW5lIElTX1NQSV9DUE9MKF9fQ1BPTF9fKSAoKChfX0NQT0xfXykgPT0gU1BJX1BPTEFSSVRZX0xPVykgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DUE9MX18pID09IFNQSV9QT0xBUklUWV9ISUdIKSkKKyNkZWZpbmUgSVNfU1BJX0NQT0woX19DUE9MX18pICAgICAgKCgoX19DUE9MX18pID09IFNQSV9QT0xBUklUWV9MT1cpIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DUE9MX18pID09IFNQSV9QT0xBUklUWV9ISUdIKSkKIAogLyoqIEBicmllZiAgQ2hlY2tzIGlmIFNQSSBDbG9jayBQaGFzZSBwYXJhbWV0ZXIgaXMgaW4gYWxsb3dlZCByYW5nZS4KICAgKiBAcGFyYW0gIF9fQ1BIQV9fIHNwZWNpZmllcyB0aGUgU1BJIENsb2NrIFBoYXNlLgogICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBTUElfQ2xvY2tfUGhhc2UKICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KLSNkZWZpbmUgSVNfU1BJX0NQSEEoX19DUEhBX18pICgoKF9fQ1BIQV9fKSA9PSBTUElfUEhBU0VfMUVER0UpIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ1BIQV9fKSA9PSBTUElfUEhBU0VfMkVER0UpKQorI2RlZmluZSBJU19TUElfQ1BIQShfX0NQSEFfXykgICAgICAoKChfX0NQSEFfXykgPT0gU1BJX1BIQVNFXzFFREdFKSB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ1BIQV9fKSA9PSBTUElfUEhBU0VfMkVER0UpKQogCiAvKiogQGJyaWVmICBDaGVja3MgaWYgU1BJIFNsYXZlIFNlbGVjdCBwYXJhbWV0ZXIgaXMgaW4gYWxsb3dlZCByYW5nZS4KICAgKiBAcGFyYW0gIF9fTlNTX18gc3BlY2lmaWVzIHRoZSBTUEkgU2xhdmUgU2VsZWN0IG1hbmFnZW1lbnQgcGFyYW1ldGVyLgogICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBTUElfU2xhdmVfU2VsZWN0X21hbmFnZW1lbnQKICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KLSNkZWZpbmUgSVNfU1BJX05TUyhfX05TU19fKSAoKChfX05TU19fKSA9PSBTUElfTlNTX1NPRlQpICAgICAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX05TU19fKSA9PSBTUElfTlNTX0hBUkRfSU5QVVQpIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX05TU19fKSA9PSBTUElfTlNTX0hBUkRfT1VUUFVUKSkKKyNkZWZpbmUgSVNfU1BJX05TUyhfX05TU19fKSAgICAgICAgKCgoX19OU1NfXykgPT0gU1BJX05TU19TT0ZUKSAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fTlNTX18pID09IFNQSV9OU1NfSEFSRF9JTlBVVCkgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX05TU19fKSA9PSBTUElfTlNTX0hBUkRfT1VUUFVUKSkKIAogLyoqIEBicmllZiAgQ2hlY2tzIGlmIFNQSSBCYXVkcmF0ZSBwcmVzY2FsZXIgcGFyYW1ldGVyIGlzIGluIGFsbG93ZWQgcmFuZ2UuCiAgICogQHBhcmFtICBfX1BSRVNDQUxFUl9fIHNwZWNpZmllcyB0aGUgU1BJIEJhdWRyYXRlIHByZXNjYWxlci4KQEAgLTYwMCwxNiArNjAyLDE2IEBACiAgICogICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIFNQSV9NU0JfTFNCX3RyYW5zbWlzc2lvbgogICAqIEByZXR2YWwgTm9uZQogICAqLwotI2RlZmluZSBJU19TUElfRklSU1RfQklUKF9fQklUX18pICgoKF9fQklUX18pID09IFNQSV9GSVJTVEJJVF9NU0IpIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0JJVF9fKSA9PSBTUElfRklSU1RCSVRfTFNCKSkKKyNkZWZpbmUgSVNfU1BJX0ZJUlNUX0JJVChfX0JJVF9fKSAgKCgoX19CSVRfXykgPT0gU1BJX0ZJUlNUQklUX01TQikgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0JJVF9fKSA9PSBTUElfRklSU1RCSVRfTFNCKSkKIAogLyoqIEBicmllZiAgQ2hlY2tzIGlmIFNQSSBUSSBtb2RlIHBhcmFtZXRlciBpcyBpbiBhbGxvd2VkIHJhbmdlLgogICAqIEBwYXJhbSAgX19NT0RFX18gc3BlY2lmaWVzIHRoZSBTUEkgVEkgbW9kZS4KICAgKiAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgU1BJX1RJX21vZGUKICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KLSNkZWZpbmUgSVNfU1BJX1RJTU9ERShfX01PREVfXykgKCgoX19NT0RFX18pID09IFNQSV9USU1PREVfRElTQUJMRSkgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX01PREVfXykgPT0gU1BJX1RJTU9ERV9FTkFCTEUpKQorI2RlZmluZSBJU19TUElfVElNT0RFKF9fTU9ERV9fKSAgICAoKChfX01PREVfXykgPT0gU1BJX1RJTU9ERV9ESVNBQkxFKSB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fTU9ERV9fKSA9PSBTUElfVElNT0RFX0VOQUJMRSkpCiAKIC8qKiBAYnJpZWYgIENoZWNrcyBpZiBTUEkgQ1JDIGNhbGN1bGF0aW9uIGVuYWJsZWQgc3RhdGUgaXMgaW4gYWxsb3dlZCByYW5nZS4KICAgKiBAcGFyYW0gIF9fQ0FMQ1VMQVRJT05fXyBzcGVjaWZpZXMgdGhlIFNQSSBDUkMgY2FsY3VsYXRpb24gZW5hYmxlIHN0YXRlLgpAQCAtNjI0LDcgKzYyNiw5IEBACiAgICogICAgICAgICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gTWluX0RhdGEgPSAwIGFuZCBNYXhfRGF0YSA9IDY1NTM1CiAgICogQHJldHZhbCBOb25lCiAgICovCi0jZGVmaW5lIElTX1NQSV9DUkNfUE9MWU5PTUlBTChfX1BPTFlOT01JQUxfXykgKCgoX19QT0xZTk9NSUFMX18pID49IDB4MVUpICYmICgoX19QT0xZTk9NSUFMX18pIDw9IDB4RkZGRlUpICYmICgoKF9fUE9MWU5PTUlBTF9fKSYweDFVKSAhPSAwVSkpCisjZGVmaW5lIElTX1NQSV9DUkNfUE9MWU5PTUlBTChfX1BPTFlOT01JQUxfXykgKCgoX19QT0xZTk9NSUFMX18pID49IDB4MVUpICAgICYmIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1BPTFlOT01JQUxfXykgPD0gMHhGRkZGVSkgJiYgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKF9fUE9MWU5PTUlBTF9fKSYweDFVKSAhPSAwVSkpCiAKIC8qKiBAYnJpZWYgIENoZWNrcyBpZiBETUEgaGFuZGxlIGlzIHZhbGlkLgogICAqIEBwYXJhbSAgX19IQU5ETEVfXyBzcGVjaWZpZXMgYSBETUEgSGFuZGxlLgpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZjR4eF9oYWxfdGltLmggYi9JbmMvc3RtMzJmNHh4X2hhbF90aW0uaAppbmRleCBkNmYxYTFhLi43ZWM3MzEwIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmNHh4X2hhbF90aW0uaAorKysgYi9JbmMvc3RtMzJmNHh4X2hhbF90aW0uaApAQCAtMjk1LDYgKzI5NSwyNiBAQAogfSBIQUxfVElNX1N0YXRlVHlwZURlZjsKIAogLyoqCisgICogQGJyaWVmICBUSU0gQ2hhbm5lbCBTdGF0ZXMgZGVmaW5pdGlvbgorICAqLwordHlwZWRlZiBlbnVtCit7CisgIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRVNFVCAgICAgICAgICAgICA9IDB4MDBVLCAgICAvKiE8IFRJTSBDaGFubmVsIGluaXRpYWwgc3RhdGUgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZICAgICAgICAgICAgID0gMHgwMVUsICAgIC8qITwgVElNIENoYW5uZWwgcmVhZHkgZm9yIHVzZSAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSAgICAgICAgICAgICAgPSAweDAyVSwgICAgLyohPCBBbiBpbnRlcm5hbCBwcm9jZXNzIGlzIG9uZ29pbmcgb24gdGhlIFRJTSBjaGFubmVsICovCit9IEhBTF9USU1fQ2hhbm5lbFN0YXRlVHlwZURlZjsKKworLyoqCisgICogQGJyaWVmICBETUEgQnVyc3QgU3RhdGVzIGRlZmluaXRpb24KKyAgKi8KK3R5cGVkZWYgZW51bQoreworICBIQUxfRE1BX0JVUlNUX1NUQVRFX1JFU0VUICAgICAgICAgICAgID0gMHgwMFUsICAgIC8qITwgRE1BIEJ1cnN0IGluaXRpYWwgc3RhdGUgKi8KKyAgSEFMX0RNQV9CVVJTVF9TVEFURV9SRUFEWSAgICAgICAgICAgICA9IDB4MDFVLCAgICAvKiE8IERNQSBCdXJzdCByZWFkeSBmb3IgdXNlICovCisgIEhBTF9ETUFfQlVSU1RfU1RBVEVfQlVTWSAgICAgICAgICAgICAgPSAweDAyVSwgICAgLyohPCBPbmdvaW5nIERNQSBCdXJzdCAgICAgICAqLworfSBIQUxfVElNX0RNQUJ1cnN0U3RhdGVUeXBlRGVmOworCisvKioKICAgKiBAYnJpZWYgIEhBTCBBY3RpdmUgY2hhbm5lbCBzdHJ1Y3R1cmVzIGRlZmluaXRpb24KICAgKi8KIHR5cGVkZWYgZW51bQpAQCAtMzE1LDEzICszMzUsMTYgQEAKIHR5cGVkZWYgc3RydWN0CiAjZW5kaWYgLyogVVNFX0hBTF9USU1fUkVHSVNURVJfQ0FMTEJBQ0tTICovCiB7Ci0gIFRJTV9UeXBlRGVmICAgICAgICAgICAgICAgICAqSW5zdGFuY2U7ICAgICAvKiE8IFJlZ2lzdGVyIGJhc2UgYWRkcmVzcyAgICAgICAgICAgICAqLwotICBUSU1fQmFzZV9Jbml0VHlwZURlZiAgICAgICAgSW5pdDsgICAgICAgICAgLyohPCBUSU0gVGltZSBCYXNlIHJlcXVpcmVkIHBhcmFtZXRlcnMgKi8KLSAgSEFMX1RJTV9BY3RpdmVDaGFubmVsICAgICAgIENoYW5uZWw7ICAgICAgIC8qITwgQWN0aXZlIGNoYW5uZWwgICAgICAgICAgICAgICAgICAgICovCi0gIERNQV9IYW5kbGVUeXBlRGVmICAgICAgICAgICAqaGRtYVs3XTsgICAgICAvKiE8IERNQSBIYW5kbGVycyBhcnJheQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGFycmF5IGlzIGFjY2Vzc2VkIGJ5IGEgQHJlZiBETUFfSGFuZGxlX2luZGV4ICovCi0gIEhBTF9Mb2NrVHlwZURlZiAgICAgICAgICAgICBMb2NrOyAgICAgICAgICAvKiE8IExvY2tpbmcgb2JqZWN0ICAgICAgICAgICAgICAgICAgICAqLwotICBfX0lPIEhBTF9USU1fU3RhdGVUeXBlRGVmICAgU3RhdGU7ICAgICAgICAgLyohPCBUSU0gb3BlcmF0aW9uIHN0YXRlICAgICAgICAgICAgICAgKi8KKyAgVElNX1R5cGVEZWYgICAgICAgICAgICAgICAgICAgICAgICAqSW5zdGFuY2U7ICAgICAgICAgLyohPCBSZWdpc3RlciBiYXNlIGFkZHJlc3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIFRJTV9CYXNlX0luaXRUeXBlRGVmICAgICAgICAgICAgICAgSW5pdDsgICAgICAgICAgICAgIC8qITwgVElNIFRpbWUgQmFzZSByZXF1aXJlZCBwYXJhbWV0ZXJzICAgICAgICAgICAgICAgICAqLworICBIQUxfVElNX0FjdGl2ZUNoYW5uZWwgICAgICAgICAgICAgIENoYW5uZWw7ICAgICAgICAgICAvKiE8IEFjdGl2ZSBjaGFubmVsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRE1BX0hhbmRsZVR5cGVEZWYgICAgICAgICAgICAgICAgICAqaGRtYVs3XTsgICAgICAgICAgLyohPCBETUEgSGFuZGxlcnMgYXJyYXkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGFycmF5IGlzIGFjY2Vzc2VkIGJ5IGEgQHJlZiBETUFfSGFuZGxlX2luZGV4ICovCisgIEhBTF9Mb2NrVHlwZURlZiAgICAgICAgICAgICAgICAgICAgTG9jazsgICAgICAgICAgICAgIC8qITwgTG9ja2luZyBvYmplY3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIEhBTF9USU1fU3RhdGVUeXBlRGVmICAgICAgICAgIFN0YXRlOyAgICAgICAgICAgICAvKiE8IFRJTSBvcGVyYXRpb24gc3RhdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyBIQUxfVElNX0NoYW5uZWxTdGF0ZVR5cGVEZWYgICBDaGFubmVsU3RhdGVbNF07ICAgLyohPCBUSU0gY2hhbm5lbCBvcGVyYXRpb24gc3RhdGUgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gSEFMX1RJTV9DaGFubmVsU3RhdGVUeXBlRGVmICAgQ2hhbm5lbE5TdGF0ZVs0XTsgIC8qITwgVElNIGNvbXBsZW1lbnRhcnkgY2hhbm5lbCBvcGVyYXRpb24gc3RhdGUgICAgICAgICAqLworICBfX0lPIEhBTF9USU1fRE1BQnVyc3RTdGF0ZVR5cGVEZWYgIERNQUJ1cnN0U3RhdGU7ICAgICAvKiE8IERNQSBidXJzdCBvcGVyYXRpb24gc3RhdGUgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAogI2lmIChVU0VfSEFMX1RJTV9SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkKICAgdm9pZCAoKiBCYXNlX01zcEluaXRDYWxsYmFjaykoc3RydWN0IF9fVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0pOyAgICAgICAgICAgICAgLyohPCBUSU0gQmFzZSBNc3AgSW5pdCBDYWxsYmFjayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0zNjAsMzQgKzM4MywzNCBAQAogICAqLwogdHlwZWRlZiBlbnVtCiB7Ci0gICBIQUxfVElNX0JBU0VfTVNQSU5JVF9DQl9JRCAgICAgICAgICAgID0gMHgwMFUgICAgLyohPCBUSU0gQmFzZSBNc3BJbml0IENhbGxiYWNrIElEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLEhBTF9USU1fQkFTRV9NU1BERUlOSVRfQ0JfSUQgICAgICAgICAgPSAweDAxVSAgICAvKiE8IFRJTSBCYXNlIE1zcERlSW5pdCBDYWxsYmFjayBJRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAsSEFMX1RJTV9JQ19NU1BJTklUX0NCX0lEICAgICAgICAgICAgICA9IDB4MDJVICAgIC8qITwgVElNIElDIE1zcEluaXQgQ2FsbGJhY2sgSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICxIQUxfVElNX0lDX01TUERFSU5JVF9DQl9JRCAgICAgICAgICAgID0gMHgwM1UgICAgLyohPCBUSU0gSUMgTXNwRGVJbml0IENhbGxiYWNrIElEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLEhBTF9USU1fT0NfTVNQSU5JVF9DQl9JRCAgICAgICAgICAgICAgPSAweDA0VSAgICAvKiE8IFRJTSBPQyBNc3BJbml0IENhbGxiYWNrIElEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAsSEFMX1RJTV9PQ19NU1BERUlOSVRfQ0JfSUQgICAgICAgICAgICA9IDB4MDVVICAgIC8qITwgVElNIE9DIE1zcERlSW5pdCBDYWxsYmFjayBJRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICxIQUxfVElNX1BXTV9NU1BJTklUX0NCX0lEICAgICAgICAgICAgID0gMHgwNlUgICAgLyohPCBUSU0gUFdNIE1zcEluaXQgQ2FsbGJhY2sgSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLEhBTF9USU1fUFdNX01TUERFSU5JVF9DQl9JRCAgICAgICAgICAgPSAweDA3VSAgICAvKiE8IFRJTSBQV00gTXNwRGVJbml0IENhbGxiYWNrIElEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAsSEFMX1RJTV9PTkVfUFVMU0VfTVNQSU5JVF9DQl9JRCAgICAgICA9IDB4MDhVICAgIC8qITwgVElNIE9uZSBQdWxzZSBNc3BJbml0IENhbGxiYWNrIElEICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICxIQUxfVElNX09ORV9QVUxTRV9NU1BERUlOSVRfQ0JfSUQgICAgID0gMHgwOVUgICAgLyohPCBUSU0gT25lIFB1bHNlIE1zcERlSW5pdCBDYWxsYmFjayBJRCAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLEhBTF9USU1fRU5DT0RFUl9NU1BJTklUX0NCX0lEICAgICAgICAgPSAweDBBVSAgICAvKiE8IFRJTSBFbmNvZGVyIE1zcEluaXQgQ2FsbGJhY2sgSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAsSEFMX1RJTV9FTkNPREVSX01TUERFSU5JVF9DQl9JRCAgICAgICA9IDB4MEJVICAgIC8qITwgVElNIEVuY29kZXIgTXNwRGVJbml0IENhbGxiYWNrIElEICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICxIQUxfVElNX0hBTExfU0VOU09SX01TUElOSVRfQ0JfSUQgICAgID0gMHgwQ1UgICAgLyohPCBUSU0gSGFsbCBTZW5zb3IgTXNwRGVJbml0IENhbGxiYWNrIElEICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLEhBTF9USU1fSEFMTF9TRU5TT1JfTVNQREVJTklUX0NCX0lEICAgPSAweDBEVSAgICAvKiE8IFRJTSBIYWxsIFNlbnNvciBNc3BEZUluaXQgQ2FsbGJhY2sgSUQgICAgICAgICAgICAgICAgICAgICAqLwotICAsSEFMX1RJTV9QRVJJT0RfRUxBUFNFRF9DQl9JRCAgICAgICAgICA9IDB4MEVVICAgIC8qITwgVElNIFBlcmlvZCBFbGFwc2VkIENhbGxiYWNrIElEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAsSEFMX1RJTV9QRVJJT0RfRUxBUFNFRF9IQUxGX0NCX0lEICAgICA9IDB4MEZVICAgIC8qITwgVElNIFBlcmlvZCBFbGFwc2VkIGhhbGYgY29tcGxldGUgQ2FsbGJhY2sgSUQgICAgICAgICAgICAgICAqLwotICAsSEFMX1RJTV9UUklHR0VSX0NCX0lEICAgICAgICAgICAgICAgICA9IDB4MTBVICAgIC8qITwgVElNIFRyaWdnZXIgQ2FsbGJhY2sgSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAsSEFMX1RJTV9UUklHR0VSX0hBTEZfQ0JfSUQgICAgICAgICAgICA9IDB4MTFVICAgIC8qITwgVElNIFRyaWdnZXIgaGFsZiBjb21wbGV0ZSBDYWxsYmFjayBJRCAgICAgICAgICAgICAgICAgICAgICAqLworICBIQUxfVElNX0JBU0VfTVNQSU5JVF9DQl9JRCAgICAgICAgICAgICAgPSAweDAwVSAgIC8qITwgVElNIEJhc2UgTXNwSW5pdCBDYWxsYmFjayBJRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICwgSEFMX1RJTV9CQVNFX01TUERFSU5JVF9DQl9JRCAgICAgICAgICA9IDB4MDFVICAgLyohPCBUSU0gQmFzZSBNc3BEZUluaXQgQ2FsbGJhY2sgSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLCBIQUxfVElNX0lDX01TUElOSVRfQ0JfSUQgICAgICAgICAgICAgID0gMHgwMlUgICAvKiE8IFRJTSBJQyBNc3BJbml0IENhbGxiYWNrIElEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAsIEhBTF9USU1fSUNfTVNQREVJTklUX0NCX0lEICAgICAgICAgICAgPSAweDAzVSAgIC8qITwgVElNIElDIE1zcERlSW5pdCBDYWxsYmFjayBJRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICwgSEFMX1RJTV9PQ19NU1BJTklUX0NCX0lEICAgICAgICAgICAgICA9IDB4MDRVICAgLyohPCBUSU0gT0MgTXNwSW5pdCBDYWxsYmFjayBJRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLCBIQUxfVElNX09DX01TUERFSU5JVF9DQl9JRCAgICAgICAgICAgID0gMHgwNVUgICAvKiE8IFRJTSBPQyBNc3BEZUluaXQgQ2FsbGJhY2sgSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAsIEhBTF9USU1fUFdNX01TUElOSVRfQ0JfSUQgICAgICAgICAgICAgPSAweDA2VSAgIC8qITwgVElNIFBXTSBNc3BJbml0IENhbGxiYWNrIElEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICwgSEFMX1RJTV9QV01fTVNQREVJTklUX0NCX0lEICAgICAgICAgICA9IDB4MDdVICAgLyohPCBUSU0gUFdNIE1zcERlSW5pdCBDYWxsYmFjayBJRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLCBIQUxfVElNX09ORV9QVUxTRV9NU1BJTklUX0NCX0lEICAgICAgID0gMHgwOFUgICAvKiE8IFRJTSBPbmUgUHVsc2UgTXNwSW5pdCBDYWxsYmFjayBJRCAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAsIEhBTF9USU1fT05FX1BVTFNFX01TUERFSU5JVF9DQl9JRCAgICAgPSAweDA5VSAgIC8qITwgVElNIE9uZSBQdWxzZSBNc3BEZUluaXQgQ2FsbGJhY2sgSUQgICAgICAgICAgICAgICAgICAgICAgICovCisgICwgSEFMX1RJTV9FTkNPREVSX01TUElOSVRfQ0JfSUQgICAgICAgICA9IDB4MEFVICAgLyohPCBUSU0gRW5jb2RlciBNc3BJbml0IENhbGxiYWNrIElEICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLCBIQUxfVElNX0VOQ09ERVJfTVNQREVJTklUX0NCX0lEICAgICAgID0gMHgwQlUgICAvKiE8IFRJTSBFbmNvZGVyIE1zcERlSW5pdCBDYWxsYmFjayBJRCAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAsIEhBTF9USU1fSEFMTF9TRU5TT1JfTVNQSU5JVF9DQl9JRCAgICAgPSAweDBDVSAgIC8qITwgVElNIEhhbGwgU2Vuc29yIE1zcERlSW5pdCBDYWxsYmFjayBJRCAgICAgICAgICAgICAgICAgICAgICovCisgICwgSEFMX1RJTV9IQUxMX1NFTlNPUl9NU1BERUlOSVRfQ0JfSUQgICA9IDB4MERVICAgLyohPCBUSU0gSGFsbCBTZW5zb3IgTXNwRGVJbml0IENhbGxiYWNrIElEICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLCBIQUxfVElNX1BFUklPRF9FTEFQU0VEX0NCX0lEICAgICAgICAgID0gMHgwRVUgICAvKiE8IFRJTSBQZXJpb2QgRWxhcHNlZCBDYWxsYmFjayBJRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLCBIQUxfVElNX1BFUklPRF9FTEFQU0VEX0hBTEZfQ0JfSUQgICAgID0gMHgwRlUgICAvKiE8IFRJTSBQZXJpb2QgRWxhcHNlZCBoYWxmIGNvbXBsZXRlIENhbGxiYWNrIElEICAgICAgICAgICAgICAgKi8KKyAgLCBIQUxfVElNX1RSSUdHRVJfQ0JfSUQgICAgICAgICAgICAgICAgID0gMHgxMFUgICAvKiE8IFRJTSBUcmlnZ2VyIENhbGxiYWNrIElEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLCBIQUxfVElNX1RSSUdHRVJfSEFMRl9DQl9JRCAgICAgICAgICAgID0gMHgxMVUgICAvKiE8IFRJTSBUcmlnZ2VyIGhhbGYgY29tcGxldGUgQ2FsbGJhY2sgSUQgICAgICAgICAgICAgICAgICAgICAgKi8KIAotICAsSEFMX1RJTV9JQ19DQVBUVVJFX0NCX0lEICAgICAgICAgICAgICA9IDB4MTJVICAgIC8qITwgVElNIElucHV0IENhcHR1cmUgQ2FsbGJhY2sgSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAsSEFMX1RJTV9JQ19DQVBUVVJFX0hBTEZfQ0JfSUQgICAgICAgICA9IDB4MTNVICAgIC8qITwgVElNIElucHV0IENhcHR1cmUgaGFsZiBjb21wbGV0ZSBDYWxsYmFjayBJRCAgICAgICAgICAgICAgICAqLwotICAsSEFMX1RJTV9PQ19ERUxBWV9FTEFQU0VEX0NCX0lEICAgICAgICA9IDB4MTRVICAgIC8qITwgVElNIE91dHB1dCBDb21wYXJlIERlbGF5IEVsYXBzZWQgQ2FsbGJhY2sgSUQgICAgICAgICAgICAgICAqLwotICAsSEFMX1RJTV9QV01fUFVMU0VfRklOSVNIRURfQ0JfSUQgICAgICA9IDB4MTVVICAgIC8qITwgVElNIFBXTSBQdWxzZSBGaW5pc2hlZCBDYWxsYmFjayBJRCAgICAgICAgICAgKi8KLSAgLEhBTF9USU1fUFdNX1BVTFNFX0ZJTklTSEVEX0hBTEZfQ0JfSUQgPSAweDE2VSAgICAvKiE8IFRJTSBQV00gUHVsc2UgRmluaXNoZWQgaGFsZiBjb21wbGV0ZSBDYWxsYmFjayBJRCAgICAgICAgICAgKi8KLSAgLEhBTF9USU1fRVJST1JfQ0JfSUQgICAgICAgICAgICAgICAgICAgPSAweDE3VSAgICAvKiE8IFRJTSBFcnJvciBDYWxsYmFjayBJRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLEhBTF9USU1fQ09NTVVUQVRJT05fQ0JfSUQgICAgICAgICAgICAgPSAweDE4VSAgICAvKiE8IFRJTSBDb21tdXRhdGlvbiBDYWxsYmFjayBJRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLEhBTF9USU1fQ09NTVVUQVRJT05fSEFMRl9DQl9JRCAgICAgICAgPSAweDE5VSAgICAvKiE8IFRJTSBDb21tdXRhdGlvbiBoYWxmIGNvbXBsZXRlIENhbGxiYWNrIElEICAgICAgICAgICAgICAgICAgKi8KLSAgLEhBTF9USU1fQlJFQUtfQ0JfSUQgICAgICAgICAgICAgICAgICAgPSAweDFBVSAgICAvKiE8IFRJTSBCcmVhayBDYWxsYmFjayBJRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLCBIQUxfVElNX0lDX0NBUFRVUkVfQ0JfSUQgICAgICAgICAgICAgID0gMHgxMlUgICAvKiE8IFRJTSBJbnB1dCBDYXB0dXJlIENhbGxiYWNrIElEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLCBIQUxfVElNX0lDX0NBUFRVUkVfSEFMRl9DQl9JRCAgICAgICAgID0gMHgxM1UgICAvKiE8IFRJTSBJbnB1dCBDYXB0dXJlIGhhbGYgY29tcGxldGUgQ2FsbGJhY2sgSUQgICAgICAgICAgICAgICAgKi8KKyAgLCBIQUxfVElNX09DX0RFTEFZX0VMQVBTRURfQ0JfSUQgICAgICAgID0gMHgxNFUgICAvKiE8IFRJTSBPdXRwdXQgQ29tcGFyZSBEZWxheSBFbGFwc2VkIENhbGxiYWNrIElEICAgICAgICAgICAgICAgKi8KKyAgLCBIQUxfVElNX1BXTV9QVUxTRV9GSU5JU0hFRF9DQl9JRCAgICAgID0gMHgxNVUgICAvKiE8IFRJTSBQV00gUHVsc2UgRmluaXNoZWQgQ2FsbGJhY2sgSUQgICAgICAgICAgICovCisgICwgSEFMX1RJTV9QV01fUFVMU0VfRklOSVNIRURfSEFMRl9DQl9JRCA9IDB4MTZVICAgLyohPCBUSU0gUFdNIFB1bHNlIEZpbmlzaGVkIGhhbGYgY29tcGxldGUgQ2FsbGJhY2sgSUQgICAgICAgICAgICovCisgICwgSEFMX1RJTV9FUlJPUl9DQl9JRCAgICAgICAgICAgICAgICAgICA9IDB4MTdVICAgLyohPCBUSU0gRXJyb3IgQ2FsbGJhY2sgSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICwgSEFMX1RJTV9DT01NVVRBVElPTl9DQl9JRCAgICAgICAgICAgICA9IDB4MThVICAgLyohPCBUSU0gQ29tbXV0YXRpb24gQ2FsbGJhY2sgSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICwgSEFMX1RJTV9DT01NVVRBVElPTl9IQUxGX0NCX0lEICAgICAgICA9IDB4MTlVICAgLyohPCBUSU0gQ29tbXV0YXRpb24gaGFsZiBjb21wbGV0ZSBDYWxsYmFjayBJRCAgICAgICAgICAgICAgICAgICovCisgICwgSEFMX1RJTV9CUkVBS19DQl9JRCAgICAgICAgICAgICAgICAgICA9IDB4MUFVICAgLyohPCBUSU0gQnJlYWsgQ2FsbGJhY2sgSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiB9IEhBTF9USU1fQ2FsbGJhY2tJRFR5cGVEZWY7CiAKIC8qKgpAQCAtODIzLDcgKzg0Niw3IEBACiAgICogQHsKICAgKi8KICNkZWZpbmUgVElNX0FVVE9NQVRJQ09VVFBVVF9ESVNBQkxFICAgICAgICAweDAwMDAwMDAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNT0UgY2FuIGJlIHNldCBvbmx5IGJ5IHNvZnR3YXJlICovCi0jZGVmaW5lIFRJTV9BVVRPTUFUSUNPVVRQVVRfRU5BQkxFICAgICAgICAgVElNX0JEVFJfQU9FICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTU9FIGNhbiBiZSBzZXQgYnkgc29mdHdhcmUgb3IgYXV0b21hdGljYWxseSBhdCB0aGUgbmV4dCB1cGRhdGUgZXZlbnQgCisjZGVmaW5lIFRJTV9BVVRPTUFUSUNPVVRQVVRfRU5BQkxFICAgICAgICAgVElNX0JEVFJfQU9FICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTU9FIGNhbiBiZSBzZXQgYnkgc29mdHdhcmUgb3IgYXV0b21hdGljYWxseSBhdCB0aGUgbmV4dCB1cGRhdGUgZXZlbnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpZiBub25lIG9mIHRoZSBicmVhayBpbnB1dHMgQlJLIGFuZCBCUksyIGlzIGFjdGl2ZSkgKi8KIC8qKgogICAqIEB9CkBAIC05MzEsMjQgKzk1NCwyNCBAQAogLyoqIEBkZWZncm91cCBUSU1fRE1BX0J1cnN0X0xlbmd0aCBUSU0gRE1BIEJ1cnN0IExlbmd0aAogICAqIEB7CiAgICovCi0jZGVmaW5lIFRJTV9ETUFCVVJTVExFTkdUSF8xVFJBTlNGRVIgICAgICAgMHgwMDAwMDAwMFUgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVGhlIHRyYW5zZmVyIGlzIGRvbmUgdG8gMSByZWdpc3RlciBzdGFydGluZyB0cm9tIFRJTXhfQ1IxICsgVElNeF9EQ1IuREJBICAgKi8KLSNkZWZpbmUgVElNX0RNQUJVUlNUTEVOR1RIXzJUUkFOU0ZFUlMgICAgICAweDAwMDAwMTAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUaGUgdHJhbnNmZXIgaXMgZG9uZSB0byAyIHJlZ2lzdGVycyBzdGFydGluZyB0cm9tIFRJTXhfQ1IxICsgVElNeF9EQ1IuREJBICAqLwotI2RlZmluZSBUSU1fRE1BQlVSU1RMRU5HVEhfM1RSQU5TRkVSUyAgICAgIDB4MDAwMDAyMDBVICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRoZSB0cmFuc2ZlciBpcyBkb25lIHRvIDMgcmVnaXN0ZXJzIHN0YXJ0aW5nIHRyb20gVElNeF9DUjEgKyBUSU14X0RDUi5EQkEgICovCi0jZGVmaW5lIFRJTV9ETUFCVVJTVExFTkdUSF80VFJBTlNGRVJTICAgICAgMHgwMDAwMDMwMFUgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVGhlIHRyYW5zZmVyIGlzIGRvbmUgdG8gNCByZWdpc3RlcnMgc3RhcnRpbmcgdHJvbSBUSU14X0NSMSArIFRJTXhfRENSLkRCQSAgKi8KLSNkZWZpbmUgVElNX0RNQUJVUlNUTEVOR1RIXzVUUkFOU0ZFUlMgICAgICAweDAwMDAwNDAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUaGUgdHJhbnNmZXIgaXMgZG9uZSB0byA1IHJlZ2lzdGVycyBzdGFydGluZyB0cm9tIFRJTXhfQ1IxICsgVElNeF9EQ1IuREJBICAqLwotI2RlZmluZSBUSU1fRE1BQlVSU1RMRU5HVEhfNlRSQU5TRkVSUyAgICAgIDB4MDAwMDA1MDBVICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRoZSB0cmFuc2ZlciBpcyBkb25lIHRvIDYgcmVnaXN0ZXJzIHN0YXJ0aW5nIHRyb20gVElNeF9DUjEgKyBUSU14X0RDUi5EQkEgICovCi0jZGVmaW5lIFRJTV9ETUFCVVJTVExFTkdUSF83VFJBTlNGRVJTICAgICAgMHgwMDAwMDYwMFUgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVGhlIHRyYW5zZmVyIGlzIGRvbmUgdG8gNyByZWdpc3RlcnMgc3RhcnRpbmcgdHJvbSBUSU14X0NSMSArIFRJTXhfRENSLkRCQSAgKi8KLSNkZWZpbmUgVElNX0RNQUJVUlNUTEVOR1RIXzhUUkFOU0ZFUlMgICAgICAweDAwMDAwNzAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUaGUgdHJhbnNmZXIgaXMgZG9uZSB0byA4IHJlZ2lzdGVycyBzdGFydGluZyB0cm9tIFRJTXhfQ1IxICsgVElNeF9EQ1IuREJBICAqLwotI2RlZmluZSBUSU1fRE1BQlVSU1RMRU5HVEhfOVRSQU5TRkVSUyAgICAgIDB4MDAwMDA4MDBVICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRoZSB0cmFuc2ZlciBpcyBkb25lIHRvIDkgcmVnaXN0ZXJzIHN0YXJ0aW5nIHRyb20gVElNeF9DUjEgKyBUSU14X0RDUi5EQkEgICovCi0jZGVmaW5lIFRJTV9ETUFCVVJTVExFTkdUSF8xMFRSQU5TRkVSUyAgICAgMHgwMDAwMDkwMFUgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVGhlIHRyYW5zZmVyIGlzIGRvbmUgdG8gMTAgcmVnaXN0ZXJzIHN0YXJ0aW5nIHRyb20gVElNeF9DUjEgKyBUSU14X0RDUi5EQkEgKi8KLSNkZWZpbmUgVElNX0RNQUJVUlNUTEVOR1RIXzExVFJBTlNGRVJTICAgICAweDAwMDAwQTAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUaGUgdHJhbnNmZXIgaXMgZG9uZSB0byAxMSByZWdpc3RlcnMgc3RhcnRpbmcgdHJvbSBUSU14X0NSMSArIFRJTXhfRENSLkRCQSAqLwotI2RlZmluZSBUSU1fRE1BQlVSU1RMRU5HVEhfMTJUUkFOU0ZFUlMgICAgIDB4MDAwMDBCMDBVICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRoZSB0cmFuc2ZlciBpcyBkb25lIHRvIDEyIHJlZ2lzdGVycyBzdGFydGluZyB0cm9tIFRJTXhfQ1IxICsgVElNeF9EQ1IuREJBICovCi0jZGVmaW5lIFRJTV9ETUFCVVJTVExFTkdUSF8xM1RSQU5TRkVSUyAgICAgMHgwMDAwMEMwMFUgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVGhlIHRyYW5zZmVyIGlzIGRvbmUgdG8gMTMgcmVnaXN0ZXJzIHN0YXJ0aW5nIHRyb20gVElNeF9DUjEgKyBUSU14X0RDUi5EQkEgKi8KLSNkZWZpbmUgVElNX0RNQUJVUlNUTEVOR1RIXzE0VFJBTlNGRVJTICAgICAweDAwMDAwRDAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUaGUgdHJhbnNmZXIgaXMgZG9uZSB0byAxNCByZWdpc3RlcnMgc3RhcnRpbmcgdHJvbSBUSU14X0NSMSArIFRJTXhfRENSLkRCQSAqLwotI2RlZmluZSBUSU1fRE1BQlVSU1RMRU5HVEhfMTVUUkFOU0ZFUlMgICAgIDB4MDAwMDBFMDBVICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRoZSB0cmFuc2ZlciBpcyBkb25lIHRvIDE1IHJlZ2lzdGVycyBzdGFydGluZyB0cm9tIFRJTXhfQ1IxICsgVElNeF9EQ1IuREJBICovCi0jZGVmaW5lIFRJTV9ETUFCVVJTVExFTkdUSF8xNlRSQU5TRkVSUyAgICAgMHgwMDAwMEYwMFUgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVGhlIHRyYW5zZmVyIGlzIGRvbmUgdG8gMTYgcmVnaXN0ZXJzIHN0YXJ0aW5nIHRyb20gVElNeF9DUjEgKyBUSU14X0RDUi5EQkEgKi8KLSNkZWZpbmUgVElNX0RNQUJVUlNUTEVOR1RIXzE3VFJBTlNGRVJTICAgICAweDAwMDAxMDAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUaGUgdHJhbnNmZXIgaXMgZG9uZSB0byAxNyByZWdpc3RlcnMgc3RhcnRpbmcgdHJvbSBUSU14X0NSMSArIFRJTXhfRENSLkRCQSAqLwotI2RlZmluZSBUSU1fRE1BQlVSU1RMRU5HVEhfMThUUkFOU0ZFUlMgICAgIDB4MDAwMDExMDBVICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRoZSB0cmFuc2ZlciBpcyBkb25lIHRvIDE4IHJlZ2lzdGVycyBzdGFydGluZyB0cm9tIFRJTXhfQ1IxICsgVElNeF9EQ1IuREJBICovCisjZGVmaW5lIFRJTV9ETUFCVVJTVExFTkdUSF8xVFJBTlNGRVIgICAgICAgMHgwMDAwMDAwMFUgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVGhlIHRyYW5zZmVyIGlzIGRvbmUgdG8gMSByZWdpc3RlciBzdGFydGluZyBmcm9tIFRJTXhfQ1IxICsgVElNeF9EQ1IuREJBICAgKi8KKyNkZWZpbmUgVElNX0RNQUJVUlNUTEVOR1RIXzJUUkFOU0ZFUlMgICAgICAweDAwMDAwMTAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUaGUgdHJhbnNmZXIgaXMgZG9uZSB0byAyIHJlZ2lzdGVycyBzdGFydGluZyBmcm9tIFRJTXhfQ1IxICsgVElNeF9EQ1IuREJBICAqLworI2RlZmluZSBUSU1fRE1BQlVSU1RMRU5HVEhfM1RSQU5TRkVSUyAgICAgIDB4MDAwMDAyMDBVICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRoZSB0cmFuc2ZlciBpcyBkb25lIHRvIDMgcmVnaXN0ZXJzIHN0YXJ0aW5nIGZyb20gVElNeF9DUjEgKyBUSU14X0RDUi5EQkEgICovCisjZGVmaW5lIFRJTV9ETUFCVVJTVExFTkdUSF80VFJBTlNGRVJTICAgICAgMHgwMDAwMDMwMFUgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVGhlIHRyYW5zZmVyIGlzIGRvbmUgdG8gNCByZWdpc3RlcnMgc3RhcnRpbmcgZnJvbSBUSU14X0NSMSArIFRJTXhfRENSLkRCQSAgKi8KKyNkZWZpbmUgVElNX0RNQUJVUlNUTEVOR1RIXzVUUkFOU0ZFUlMgICAgICAweDAwMDAwNDAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUaGUgdHJhbnNmZXIgaXMgZG9uZSB0byA1IHJlZ2lzdGVycyBzdGFydGluZyBmcm9tIFRJTXhfQ1IxICsgVElNeF9EQ1IuREJBICAqLworI2RlZmluZSBUSU1fRE1BQlVSU1RMRU5HVEhfNlRSQU5TRkVSUyAgICAgIDB4MDAwMDA1MDBVICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRoZSB0cmFuc2ZlciBpcyBkb25lIHRvIDYgcmVnaXN0ZXJzIHN0YXJ0aW5nIGZyb20gVElNeF9DUjEgKyBUSU14X0RDUi5EQkEgICovCisjZGVmaW5lIFRJTV9ETUFCVVJTVExFTkdUSF83VFJBTlNGRVJTICAgICAgMHgwMDAwMDYwMFUgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVGhlIHRyYW5zZmVyIGlzIGRvbmUgdG8gNyByZWdpc3RlcnMgc3RhcnRpbmcgZnJvbSBUSU14X0NSMSArIFRJTXhfRENSLkRCQSAgKi8KKyNkZWZpbmUgVElNX0RNQUJVUlNUTEVOR1RIXzhUUkFOU0ZFUlMgICAgICAweDAwMDAwNzAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUaGUgdHJhbnNmZXIgaXMgZG9uZSB0byA4IHJlZ2lzdGVycyBzdGFydGluZyBmcm9tIFRJTXhfQ1IxICsgVElNeF9EQ1IuREJBICAqLworI2RlZmluZSBUSU1fRE1BQlVSU1RMRU5HVEhfOVRSQU5TRkVSUyAgICAgIDB4MDAwMDA4MDBVICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRoZSB0cmFuc2ZlciBpcyBkb25lIHRvIDkgcmVnaXN0ZXJzIHN0YXJ0aW5nIGZyb20gVElNeF9DUjEgKyBUSU14X0RDUi5EQkEgICovCisjZGVmaW5lIFRJTV9ETUFCVVJTVExFTkdUSF8xMFRSQU5TRkVSUyAgICAgMHgwMDAwMDkwMFUgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVGhlIHRyYW5zZmVyIGlzIGRvbmUgdG8gMTAgcmVnaXN0ZXJzIHN0YXJ0aW5nIGZyb20gVElNeF9DUjEgKyBUSU14X0RDUi5EQkEgKi8KKyNkZWZpbmUgVElNX0RNQUJVUlNUTEVOR1RIXzExVFJBTlNGRVJTICAgICAweDAwMDAwQTAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUaGUgdHJhbnNmZXIgaXMgZG9uZSB0byAxMSByZWdpc3RlcnMgc3RhcnRpbmcgZnJvbSBUSU14X0NSMSArIFRJTXhfRENSLkRCQSAqLworI2RlZmluZSBUSU1fRE1BQlVSU1RMRU5HVEhfMTJUUkFOU0ZFUlMgICAgIDB4MDAwMDBCMDBVICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRoZSB0cmFuc2ZlciBpcyBkb25lIHRvIDEyIHJlZ2lzdGVycyBzdGFydGluZyBmcm9tIFRJTXhfQ1IxICsgVElNeF9EQ1IuREJBICovCisjZGVmaW5lIFRJTV9ETUFCVVJTVExFTkdUSF8xM1RSQU5TRkVSUyAgICAgMHgwMDAwMEMwMFUgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVGhlIHRyYW5zZmVyIGlzIGRvbmUgdG8gMTMgcmVnaXN0ZXJzIHN0YXJ0aW5nIGZyb20gVElNeF9DUjEgKyBUSU14X0RDUi5EQkEgKi8KKyNkZWZpbmUgVElNX0RNQUJVUlNUTEVOR1RIXzE0VFJBTlNGRVJTICAgICAweDAwMDAwRDAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUaGUgdHJhbnNmZXIgaXMgZG9uZSB0byAxNCByZWdpc3RlcnMgc3RhcnRpbmcgZnJvbSBUSU14X0NSMSArIFRJTXhfRENSLkRCQSAqLworI2RlZmluZSBUSU1fRE1BQlVSU1RMRU5HVEhfMTVUUkFOU0ZFUlMgICAgIDB4MDAwMDBFMDBVICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRoZSB0cmFuc2ZlciBpcyBkb25lIHRvIDE1IHJlZ2lzdGVycyBzdGFydGluZyBmcm9tIFRJTXhfQ1IxICsgVElNeF9EQ1IuREJBICovCisjZGVmaW5lIFRJTV9ETUFCVVJTVExFTkdUSF8xNlRSQU5TRkVSUyAgICAgMHgwMDAwMEYwMFUgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVGhlIHRyYW5zZmVyIGlzIGRvbmUgdG8gMTYgcmVnaXN0ZXJzIHN0YXJ0aW5nIGZyb20gVElNeF9DUjEgKyBUSU14X0RDUi5EQkEgKi8KKyNkZWZpbmUgVElNX0RNQUJVUlNUTEVOR1RIXzE3VFJBTlNGRVJTICAgICAweDAwMDAxMDAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUaGUgdHJhbnNmZXIgaXMgZG9uZSB0byAxNyByZWdpc3RlcnMgc3RhcnRpbmcgZnJvbSBUSU14X0NSMSArIFRJTXhfRENSLkRCQSAqLworI2RlZmluZSBUSU1fRE1BQlVSU1RMRU5HVEhfMThUUkFOU0ZFUlMgICAgIDB4MDAwMDExMDBVICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRoZSB0cmFuc2ZlciBpcyBkb25lIHRvIDE4IHJlZ2lzdGVycyBzdGFydGluZyBmcm9tIFRJTXhfQ1IxICsgVElNeF9EQ1IuREJBICovCiAvKioKICAgKiBAfQogICAqLwpAQCAtOTkzLDI1ICsxMDE2LDQ1IEBACiAgICogQHJldHZhbCBOb25lCiAgICovCiAjaWYgKFVTRV9IQUxfVElNX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxKQotI2RlZmluZSBfX0hBTF9USU1fUkVTRVRfSEFORExFX1NUQVRFKF9fSEFORExFX18pIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+U3RhdGUgICAgICAgICAgICAgPSBIQUxfVElNX1NUQVRFX1JFU0VUOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPkJhc2VfTXNwSW5pdENhbGxiYWNrICAgICAgICAgPSBOVUxMOyAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5CYXNlX01zcERlSW5pdENhbGxiYWNrICAgICAgID0gTlVMTDsgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+SUNfTXNwSW5pdENhbGxiYWNrICAgICAgICAgICA9IE5VTEw7ICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPklDX01zcERlSW5pdENhbGxiYWNrICAgICAgICAgPSBOVUxMOyAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5PQ19Nc3BJbml0Q2FsbGJhY2sgICAgICAgICAgID0gTlVMTDsgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+T0NfTXNwRGVJbml0Q2FsbGJhY2sgICAgICAgICA9IE5VTEw7ICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPlBXTV9Nc3BJbml0Q2FsbGJhY2sgICAgICAgICAgPSBOVUxMOyAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5QV01fTXNwRGVJbml0Q2FsbGJhY2sgICAgICAgID0gTlVMTDsgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+T25lUHVsc2VfTXNwSW5pdENhbGxiYWNrICAgICA9IE5VTEw7ICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPk9uZVB1bHNlX01zcERlSW5pdENhbGxiYWNrICAgPSBOVUxMOyAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5FbmNvZGVyX01zcEluaXRDYWxsYmFjayAgICAgID0gTlVMTDsgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+RW5jb2Rlcl9Nc3BEZUluaXRDYWxsYmFjayAgICA9IE5VTEw7ICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPkhhbGxTZW5zb3JfTXNwSW5pdENhbGxiYWNrICAgPSBOVUxMOyAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5IYWxsU2Vuc29yX01zcERlSW5pdENhbGxiYWNrID0gTlVMTDsgICAgIFwKKyNkZWZpbmUgX19IQUxfVElNX1JFU0VUX0hBTkRMRV9TVEFURShfX0hBTkRMRV9fKSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5TdGF0ZSAgICAgICAgICAgID0gSEFMX1RJTV9TVEFURV9SRVNFVDsgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPkNoYW5uZWxTdGF0ZVswXSAgPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVTRVQ7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+Q2hhbm5lbFN0YXRlWzFdICA9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRVNFVDsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5DaGFubmVsU3RhdGVbMl0gID0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFU0VUOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPkNoYW5uZWxTdGF0ZVszXSAgPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVTRVQ7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+Q2hhbm5lbE5TdGF0ZVswXSA9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRVNFVDsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5DaGFubmVsTlN0YXRlWzFdID0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFU0VUOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPkNoYW5uZWxOU3RhdGVbMl0gPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVTRVQ7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+Q2hhbm5lbE5TdGF0ZVszXSA9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRVNFVDsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5ETUFCdXJzdFN0YXRlICAgID0gSEFMX0RNQV9CVVJTVF9TVEFURV9SRVNFVDsgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPkJhc2VfTXNwSW5pdENhbGxiYWNrICAgICAgICAgPSBOVUxMOyAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+QmFzZV9Nc3BEZUluaXRDYWxsYmFjayAgICAgICA9IE5VTEw7ICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5JQ19Nc3BJbml0Q2FsbGJhY2sgICAgICAgICAgID0gTlVMTDsgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPklDX01zcERlSW5pdENhbGxiYWNrICAgICAgICAgPSBOVUxMOyAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+T0NfTXNwSW5pdENhbGxiYWNrICAgICAgICAgICA9IE5VTEw7ICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5PQ19Nc3BEZUluaXRDYWxsYmFjayAgICAgICAgID0gTlVMTDsgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPlBXTV9Nc3BJbml0Q2FsbGJhY2sgICAgICAgICAgPSBOVUxMOyAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+UFdNX01zcERlSW5pdENhbGxiYWNrICAgICAgICA9IE5VTEw7ICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5PbmVQdWxzZV9Nc3BJbml0Q2FsbGJhY2sgICAgID0gTlVMTDsgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPk9uZVB1bHNlX01zcERlSW5pdENhbGxiYWNrICAgPSBOVUxMOyAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+RW5jb2Rlcl9Nc3BJbml0Q2FsbGJhY2sgICAgICA9IE5VTEw7ICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5FbmNvZGVyX01zcERlSW5pdENhbGxiYWNrICAgID0gTlVMTDsgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPkhhbGxTZW5zb3JfTXNwSW5pdENhbGxiYWNrICAgPSBOVUxMOyAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+SGFsbFNlbnNvcl9Nc3BEZUluaXRDYWxsYmFjayA9IE5VTEw7ICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlKDApCiAjZWxzZQotI2RlZmluZSBfX0hBTF9USU1fUkVTRVRfSEFORExFX1NUQVRFKF9fSEFORExFX18pICgoX19IQU5ETEVfXyktPlN0YXRlID0gSEFMX1RJTV9TVEFURV9SRVNFVCkKKyNkZWZpbmUgX19IQUxfVElNX1JFU0VUX0hBTkRMRV9TVEFURShfX0hBTkRMRV9fKSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5TdGF0ZSAgICAgICAgICAgID0gSEFMX1RJTV9TVEFURV9SRVNFVDsgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPkNoYW5uZWxTdGF0ZVswXSAgPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVTRVQ7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+Q2hhbm5lbFN0YXRlWzFdICA9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRVNFVDsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5DaGFubmVsU3RhdGVbMl0gID0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFU0VUOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPkNoYW5uZWxTdGF0ZVszXSAgPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVTRVQ7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+Q2hhbm5lbE5TdGF0ZVswXSA9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRVNFVDsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5DaGFubmVsTlN0YXRlWzFdID0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFU0VUOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPkNoYW5uZWxOU3RhdGVbMl0gPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVTRVQ7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+Q2hhbm5lbE5TdGF0ZVszXSA9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRVNFVDsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5ETUFCdXJzdFN0YXRlICAgID0gSEFMX0RNQV9CVVJTVF9TVEFURV9SRVNFVDsgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUoMCkKICNlbmRpZiAvKiBVU0VfSEFMX1RJTV9SRUdJU1RFUl9DQUxMQkFDS1MgKi8KIAogLyoqCkBAIC0xNzEwLDE1ICsxNzUzLDE1IEBACiAjZGVmaW5lIElTX1RJTV9USTFTRUxFQ1RJT04oX19USTFTRUxFQ1RJT05fXykgICgoKF9fVEkxU0VMRUNUSU9OX18pID09IFRJTV9USTFTRUxFQ1RJT05fQ0gxKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fVEkxU0VMRUNUSU9OX18pID09IFRJTV9USTFTRUxFQ1RJT05fWE9SQ09NQklOQVRJT04pKQogCi0jZGVmaW5lIElTX1RJTV9ETUFfTEVOR1RIKF9fTEVOR1RIX18pICAgICAgKCgoX19MRU5HVEhfXykgPT0gVElNX0RNQUJVUlNUTEVOR1RIXzFUUkFOU0ZFUikgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fTEVOR1RIX18pID09IFRJTV9ETUFCVVJTVExFTkdUSF8yVFJBTlNGRVJTKSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19MRU5HVEhfXykgPT0gVElNX0RNQUJVUlNUTEVOR1RIXzNUUkFOU0ZFUlMpIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0xFTkdUSF9fKSA9PSBUSU1fRE1BQlVSU1RMRU5HVEhfNFRSQU5TRkVSUykgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fTEVOR1RIX18pID09IFRJTV9ETUFCVVJTVExFTkdUSF81VFJBTlNGRVJTKSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19MRU5HVEhfXykgPT0gVElNX0RNQUJVUlNUTEVOR1RIXzZUUkFOU0ZFUlMpIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0xFTkdUSF9fKSA9PSBUSU1fRE1BQlVSU1RMRU5HVEhfN1RSQU5TRkVSUykgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fTEVOR1RIX18pID09IFRJTV9ETUFCVVJTVExFTkdUSF84VFJBTlNGRVJTKSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19MRU5HVEhfXykgPT0gVElNX0RNQUJVUlNUTEVOR1RIXzlUUkFOU0ZFUlMpIHx8IFwKKyNkZWZpbmUgSVNfVElNX0RNQV9MRU5HVEgoX19MRU5HVEhfXykgICAgICAoKChfX0xFTkdUSF9fKSA9PSBUSU1fRE1BQlVSU1RMRU5HVEhfMVRSQU5TRkVSKSAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0xFTkdUSF9fKSA9PSBUSU1fRE1BQlVSU1RMRU5HVEhfMlRSQU5TRkVSUykgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0xFTkdUSF9fKSA9PSBUSU1fRE1BQlVSU1RMRU5HVEhfM1RSQU5TRkVSUykgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0xFTkdUSF9fKSA9PSBUSU1fRE1BQlVSU1RMRU5HVEhfNFRSQU5TRkVSUykgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0xFTkdUSF9fKSA9PSBUSU1fRE1BQlVSU1RMRU5HVEhfNVRSQU5TRkVSUykgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0xFTkdUSF9fKSA9PSBUSU1fRE1BQlVSU1RMRU5HVEhfNlRSQU5TRkVSUykgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0xFTkdUSF9fKSA9PSBUSU1fRE1BQlVSU1RMRU5HVEhfN1RSQU5TRkVSUykgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0xFTkdUSF9fKSA9PSBUSU1fRE1BQlVSU1RMRU5HVEhfOFRSQU5TRkVSUykgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0xFTkdUSF9fKSA9PSBUSU1fRE1BQlVSU1RMRU5HVEhfOVRSQU5TRkVSUykgIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0xFTkdUSF9fKSA9PSBUSU1fRE1BQlVSU1RMRU5HVEhfMTBUUkFOU0ZFUlMpIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0xFTkdUSF9fKSA9PSBUSU1fRE1BQlVSU1RMRU5HVEhfMTFUUkFOU0ZFUlMpIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0xFTkdUSF9fKSA9PSBUSU1fRE1BQlVSU1RMRU5HVEhfMTJUUkFOU0ZFUlMpIHx8IFwKQEAgLTE3MjksNiArMTc3Miw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19MRU5HVEhfXykgPT0gVElNX0RNQUJVUlNUTEVOR1RIXzE3VFJBTlNGRVJTKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19MRU5HVEhfXykgPT0gVElNX0RNQUJVUlNUTEVOR1RIXzE4VFJBTlNGRVJTKSkKIAorI2RlZmluZSBJU19USU1fRE1BX0RBVEFfTEVOR1RIKExFTkdUSCkgKCgoTEVOR1RIKSA+PSAweDFVKSAmJiAoKExFTkdUSCkgPCAweDEwMDAwVSkpCisKICNkZWZpbmUgSVNfVElNX0lDX0ZJTFRFUihfX0lDRklMVEVSX18pICAgKChfX0lDRklMVEVSX18pIDw9IDB4RlUpCiAKICNkZWZpbmUgSVNfVElNX0RFQURUSU1FKF9fREVBRFRJTUVfXykgICAgKChfX0RFQURUSU1FX18pIDw9IDB4RkZVKQpAQCAtMTc1OSw2ICsxODA0LDQ0IEBACiAgICAoKF9fQ0hBTk5FTF9fKSA9PSBUSU1fQ0hBTk5FTF8zKSA/ICgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5DQ0VSICY9IH4oVElNX0NDRVJfQ0MzUCB8IFRJTV9DQ0VSX0NDM05QKSkgOlwKICAgICgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5DQ0VSICY9IH4oVElNX0NDRVJfQ0M0UCB8IFRJTV9DQ0VSX0NDNE5QKSkpCiAKKyNkZWZpbmUgVElNX0NIQU5ORUxfU1RBVEVfR0VUKF9fSEFORExFX18sIF9fQ0hBTk5FTF9fKVwKKyAgKCgoX19DSEFOTkVMX18pID09IFRJTV9DSEFOTkVMXzEpID8gKF9fSEFORExFX18pLT5DaGFubmVsU3RhdGVbMF0gOlwKKyAgICgoX19DSEFOTkVMX18pID09IFRJTV9DSEFOTkVMXzIpID8gKF9fSEFORExFX18pLT5DaGFubmVsU3RhdGVbMV0gOlwKKyAgICgoX19DSEFOTkVMX18pID09IFRJTV9DSEFOTkVMXzMpID8gKF9fSEFORExFX18pLT5DaGFubmVsU3RhdGVbMl0gOlwKKyAgIChfX0hBTkRMRV9fKS0+Q2hhbm5lbFN0YXRlWzNdKQorCisjZGVmaW5lIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChfX0hBTkRMRV9fLCBfX0NIQU5ORUxfXywgX19DSEFOTkVMX1NUQVRFX18pIFwKKyAgKCgoX19DSEFOTkVMX18pID09IFRJTV9DSEFOTkVMXzEpID8gKChfX0hBTkRMRV9fKS0+Q2hhbm5lbFN0YXRlWzBdID0gKF9fQ0hBTk5FTF9TVEFURV9fKSkgOlwKKyAgICgoX19DSEFOTkVMX18pID09IFRJTV9DSEFOTkVMXzIpID8gKChfX0hBTkRMRV9fKS0+Q2hhbm5lbFN0YXRlWzFdID0gKF9fQ0hBTk5FTF9TVEFURV9fKSkgOlwKKyAgICgoX19DSEFOTkVMX18pID09IFRJTV9DSEFOTkVMXzMpID8gKChfX0hBTkRMRV9fKS0+Q2hhbm5lbFN0YXRlWzJdID0gKF9fQ0hBTk5FTF9TVEFURV9fKSkgOlwKKyAgICgoX19IQU5ETEVfXyktPkNoYW5uZWxTdGF0ZVszXSA9IChfX0NIQU5ORUxfU1RBVEVfXykpKQorCisjZGVmaW5lIFRJTV9DSEFOTkVMX1NUQVRFX1NFVF9BTEwoX19IQU5ETEVfXywgIF9fQ0hBTk5FTF9TVEFURV9fKSBkbyB7IFwKKyAgKF9fSEFORExFX18pLT5DaGFubmVsU3RhdGVbMF0gID0gKF9fQ0hBTk5FTF9TVEFURV9fKTsgIFwKKyAgKF9fSEFORExFX18pLT5DaGFubmVsU3RhdGVbMV0gID0gKF9fQ0hBTk5FTF9TVEFURV9fKTsgIFwKKyAgKF9fSEFORExFX18pLT5DaGFubmVsU3RhdGVbMl0gID0gKF9fQ0hBTk5FTF9TVEFURV9fKTsgIFwKKyAgKF9fSEFORExFX18pLT5DaGFubmVsU3RhdGVbM10gID0gKF9fQ0hBTk5FTF9TVEFURV9fKTsgIFwKKyB9IHdoaWxlKDApCisKKyNkZWZpbmUgVElNX0NIQU5ORUxfTl9TVEFURV9HRVQoX19IQU5ETEVfXywgX19DSEFOTkVMX18pXAorICAoKChfX0NIQU5ORUxfXykgPT0gVElNX0NIQU5ORUxfMSkgPyAoX19IQU5ETEVfXyktPkNoYW5uZWxOU3RhdGVbMF0gOlwKKyAgICgoX19DSEFOTkVMX18pID09IFRJTV9DSEFOTkVMXzIpID8gKF9fSEFORExFX18pLT5DaGFubmVsTlN0YXRlWzFdIDpcCisgICAoKF9fQ0hBTk5FTF9fKSA9PSBUSU1fQ0hBTk5FTF8zKSA/IChfX0hBTkRMRV9fKS0+Q2hhbm5lbE5TdGF0ZVsyXSA6XAorICAgKF9fSEFORExFX18pLT5DaGFubmVsTlN0YXRlWzNdKQorCisjZGVmaW5lIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKF9fSEFORExFX18sIF9fQ0hBTk5FTF9fLCBfX0NIQU5ORUxfU1RBVEVfXykgXAorICAoKChfX0NIQU5ORUxfXykgPT0gVElNX0NIQU5ORUxfMSkgPyAoKF9fSEFORExFX18pLT5DaGFubmVsTlN0YXRlWzBdID0gKF9fQ0hBTk5FTF9TVEFURV9fKSkgOlwKKyAgICgoX19DSEFOTkVMX18pID09IFRJTV9DSEFOTkVMXzIpID8gKChfX0hBTkRMRV9fKS0+Q2hhbm5lbE5TdGF0ZVsxXSA9IChfX0NIQU5ORUxfU1RBVEVfXykpIDpcCisgICAoKF9fQ0hBTk5FTF9fKSA9PSBUSU1fQ0hBTk5FTF8zKSA/ICgoX19IQU5ETEVfXyktPkNoYW5uZWxOU3RhdGVbMl0gPSAoX19DSEFOTkVMX1NUQVRFX18pKSA6XAorICAgKChfX0hBTkRMRV9fKS0+Q2hhbm5lbE5TdGF0ZVszXSA9IChfX0NIQU5ORUxfU1RBVEVfXykpKQorCisjZGVmaW5lIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUX0FMTChfX0hBTkRMRV9fLCAgX19DSEFOTkVMX1NUQVRFX18pIGRvIHsgXAorICAoX19IQU5ETEVfXyktPkNoYW5uZWxOU3RhdGVbMF0gPSAoX19DSEFOTkVMX1NUQVRFX18pOyAgXAorICAoX19IQU5ETEVfXyktPkNoYW5uZWxOU3RhdGVbMV0gPSAoX19DSEFOTkVMX1NUQVRFX18pOyAgXAorICAoX19IQU5ETEVfXyktPkNoYW5uZWxOU3RhdGVbMl0gPSAoX19DSEFOTkVMX1NUQVRFX18pOyAgXAorICAoX19IQU5ETEVfXyktPkNoYW5uZWxOU3RhdGVbM10gPSAoX19DSEFOTkVMX1NUQVRFX18pOyAgXAorIH0gd2hpbGUoMCkKKwogLyoqCiAgICogQH0KICAgKi8KQEAgLTE5MzAsOSArMjAxMywxNSBAQAogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTV9TbGF2ZUNvbmZpZ1N5bmNocm9fSVQoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sIFRJTV9TbGF2ZUNvbmZpZ1R5cGVEZWYgKnNTbGF2ZUNvbmZpZyk7CiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNX0RNQUJ1cnN0X1dyaXRlU3RhcnQoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sIHVpbnQzMl90IEJ1cnN0QmFzZUFkZHJlc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgQnVyc3RSZXF1ZXN0U3JjLCB1aW50MzJfdCAgKkJ1cnN0QnVmZmVyLCB1aW50MzJfdCAgQnVyc3RMZW5ndGgpOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTV9ETUFCdXJzdF9NdWx0aVdyaXRlU3RhcnQoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sIHVpbnQzMl90IEJ1cnN0QmFzZUFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBCdXJzdFJlcXVlc3RTcmMsIHVpbnQzMl90ICpCdXJzdEJ1ZmZlciwgdWludDMyX3QgQnVyc3RMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBEYXRhTGVuZ3RoKTsKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1fRE1BQnVyc3RfV3JpdGVTdG9wKFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCB1aW50MzJfdCBCdXJzdFJlcXVlc3RTcmMpOwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTV9ETUFCdXJzdF9SZWFkU3RhcnQoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sIHVpbnQzMl90IEJ1cnN0QmFzZUFkZHJlc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBCdXJzdFJlcXVlc3RTcmMsIHVpbnQzMl90ICAqQnVyc3RCdWZmZXIsIHVpbnQzMl90ICBCdXJzdExlbmd0aCk7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNX0RNQUJ1cnN0X011bHRpUmVhZFN0YXJ0KFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCB1aW50MzJfdCBCdXJzdEJhc2VBZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBCdXJzdFJlcXVlc3RTcmMsIHVpbnQzMl90ICAqQnVyc3RCdWZmZXIsIHVpbnQzMl90ICBCdXJzdExlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgIERhdGFMZW5ndGgpOwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTV9ETUFCdXJzdF9SZWFkU3RvcChUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgdWludDMyX3QgQnVyc3RSZXF1ZXN0U3JjKTsKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1fR2VuZXJhdGVFdmVudChUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgdWludDMyX3QgRXZlbnRTb3VyY2UpOwogdWludDMyX3QgSEFMX1RJTV9SZWFkQ2FwdHVyZWRWYWx1ZShUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgdWludDMyX3QgQ2hhbm5lbCk7CkBAIC0xOTc4LDYgKzIwNjcsMTEgQEAKIEhBTF9USU1fU3RhdGVUeXBlRGVmIEhBTF9USU1fSUNfR2V0U3RhdGUoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0pOwogSEFMX1RJTV9TdGF0ZVR5cGVEZWYgSEFMX1RJTV9PbmVQdWxzZV9HZXRTdGF0ZShUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSk7CiBIQUxfVElNX1N0YXRlVHlwZURlZiBIQUxfVElNX0VuY29kZXJfR2V0U3RhdGUoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0pOworCisvKiBQZXJpcGhlcmFsIENoYW5uZWwgc3RhdGUgZnVuY3Rpb25zICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitIQUxfVElNX0FjdGl2ZUNoYW5uZWwgSEFMX1RJTV9HZXRBY3RpdmVDaGFubmVsKFRJTV9IYW5kbGVUeXBlRGVmICpodGltKTsKK0hBTF9USU1fQ2hhbm5lbFN0YXRlVHlwZURlZiBIQUxfVElNX0dldENoYW5uZWxTdGF0ZShUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgIHVpbnQzMl90IENoYW5uZWwpOworSEFMX1RJTV9ETUFCdXJzdFN0YXRlVHlwZURlZiBIQUxfVElNX0RNQUJ1cnN0U3RhdGUoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0pOwogLyoqCiAgICogQH0KICAgKi8KQEAgLTE5OTcsNyArMjA5MSw2IEBACiB2b2lkIFRJTV9FVFJfU2V0Q29uZmlnKFRJTV9UeXBlRGVmICpUSU14LCB1aW50MzJfdCBUSU1fRXh0VFJHUHJlc2NhbGVyLAogICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBUSU1fRXh0VFJHUG9sYXJpdHksIHVpbnQzMl90IEV4dFRSR0ZpbHRlcik7CiAKLXZvaWQgVElNX0RNQURlbGF5UHVsc2VDcGx0KERNQV9IYW5kbGVUeXBlRGVmICpoZG1hKTsKIHZvaWQgVElNX0RNQURlbGF5UHVsc2VIYWxmQ3BsdChETUFfSGFuZGxlVHlwZURlZiAqaGRtYSk7CiB2b2lkIFRJTV9ETUFFcnJvcihETUFfSGFuZGxlVHlwZURlZiAqaGRtYSk7CiB2b2lkIFRJTV9ETUFDYXB0dXJlQ3BsdChETUFfSGFuZGxlVHlwZURlZiAqaGRtYSk7CmRpZmYgLS1naXQgYS9JbmMvc3RtMzJmNHh4X2hhbF90aW1fZXguaCBiL0luYy9zdG0zMmY0eHhfaGFsX3RpbV9leC5oCmluZGV4IDg4Y2UyODEuLjczN2ZkYzQgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmY0eHhfaGFsX3RpbV9leC5oCisrKyBiL0luYy9zdG0zMmY0eHhfaGFsX3RpbV9leC5oCkBAIC0xMjksNjYgKzEyOSw2NiBAQAogICAqIEB7CiAgICovCiAjaWYgZGVmaW5lZChTUERJRlJYKQotI2RlZmluZSBJU19USU1fUkVNQVAoSU5TVEFOQ0UsIFRJTV9SRU1BUCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICgoKChJTlNUQU5DRSkgPT0gVElNMikgICYmICgoKFRJTV9SRU1BUCkgPT0gVElNX1RJTTJfVElNOF9UUkdPKSAgICAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVElNX1JFTUFQKSA9PSBUSU1fVElNMl9VU0JGU19TT0YpICAgICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChUSU1fUkVNQVApID09IFRJTV9USU0yX1VTQkhTX1NPRikpKSAgICB8fCBcCi0gICAgICAgICAoKChJTlNUQU5DRSkgPT0gVElNNSkgICYmICgoKFRJTV9SRU1BUCkgPT0gVElNX1RJTTVfR1BJTykgICAgICAgICAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVElNX1JFTUFQKSA9PSBUSU1fVElNNV9MU0kpICAgICAgICAgICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChUSU1fUkVNQVApID09IFRJTV9USU01X0xTRSkgICAgICAgICAgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFRJTV9SRU1BUCkgPT0gVElNX1RJTTVfUlRDKSkpICAgICAgICAgIHx8IFwKLSAgICAgICAgICgoKElOU1RBTkNFKSA9PSBUSU0xMSkgJiYgKCgoVElNX1JFTUFQKSA9PSBUSU1fVElNMTFfR1BJTykgICAgICAgICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChUSU1fUkVNQVApID09IFRJTV9USU0xMV9TUERJRlJYKSAgICAgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFRJTV9SRU1BUCkgPT0gVElNX1RJTTExX0hTRSkpKSkKKyNkZWZpbmUgSVNfVElNX1JFTUFQKElOU1RBTkNFLCBUSU1fUkVNQVApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAoKCgoSU5TVEFOQ0UpID09IFRJTTIpICAmJiAoKChUSU1fUkVNQVApID09IFRJTV9USU0yX1RJTThfVFJHTykgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFRJTV9SRU1BUCkgPT0gVElNX1RJTTJfVVNCRlNfU09GKSAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVElNX1JFTUFQKSA9PSBUSU1fVElNMl9VU0JIU19TT0YpKSkgICAgfHwgXAorICAgKCgoSU5TVEFOQ0UpID09IFRJTTUpICAmJiAoKChUSU1fUkVNQVApID09IFRJTV9USU01X0dQSU8pICAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFRJTV9SRU1BUCkgPT0gVElNX1RJTTVfTFNJKSAgICAgICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVElNX1JFTUFQKSA9PSBUSU1fVElNNV9MU0UpICAgICAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChUSU1fUkVNQVApID09IFRJTV9USU01X1JUQykpKSAgICAgICAgICB8fCBcCisgICAoKChJTlNUQU5DRSkgPT0gVElNMTEpICYmICgoKFRJTV9SRU1BUCkgPT0gVElNX1RJTTExX0dQSU8pICAgICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVElNX1JFTUFQKSA9PSBUSU1fVElNMTFfU1BESUZSWCkgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChUSU1fUkVNQVApID09IFRJTV9USU0xMV9IU0UpKSkpCiAjZWxpZiBkZWZpbmVkKFRJTTIpCiAjaWYgZGVmaW5lZChMUFRJTV9PUl9USU0xX0lUUjJfUk1QKSAmJiBkZWZpbmVkKExQVElNX09SX1RJTTVfSVRSMV9STVApICYmIGRlZmluZWQoTFBUSU1fT1JfVElNNV9JVFIxX1JNUCkKLSNkZWZpbmUgSVNfVElNX1JFTUFQKElOU1RBTkNFLCBUSU1fUkVNQVApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAoKCgoSU5TVEFOQ0UpID09IFRJTTIpICAmJiAoKChUSU1fUkVNQVApID09IFRJTV9USU0yX1RJTThfVFJHTykgICAgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFRJTV9SRU1BUCkgPT0gVElNX1RJTTJfVVNCRlNfU09GKSAgICAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVElNX1JFTUFQKSA9PSBUSU1fVElNMl9VU0JIU19TT0YpKSkgICAgfHwgXAotICAgICAgICAgKCgoSU5TVEFOQ0UpID09IFRJTTUpICAmJiAoKChUSU1fUkVNQVApID09IFRJTV9USU01X0dQSU8pICAgICAgICAgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFRJTV9SRU1BUCkgPT0gVElNX1RJTTVfTFNJKSAgICAgICAgICAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVElNX1JFTUFQKSA9PSBUSU1fVElNNV9MU0UpICAgICAgICAgICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChUSU1fUkVNQVApID09IFRJTV9USU01X1JUQykpKSAgICAgICAgICB8fCBcCi0gICAgICAgICAoKChJTlNUQU5DRSkgPT0gVElNMTEpICYmICgoKFRJTV9SRU1BUCkgPT0gVElNX1RJTTExX0dQSU8pICAgICAgICAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVElNX1JFTUFQKSA9PSBUSU1fVElNMTFfSFNFKSkpICAgICAgICAgfHwgXAotICAgICAgICAgKCgoSU5TVEFOQ0UpID09IFRJTTEpICAmJiAoKChUSU1fUkVNQVApID09IFRJTV9USU0xX1RJTTNfVFJHTykgICAgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFRJTV9SRU1BUCkgPT0gVElNX1RJTTFfTFBUSU0pKSkgICAgICAgIHx8IFwKLSAgICAgICAgICgoKElOU1RBTkNFKSA9PSBUSU01KSAgJiYgKCgoVElNX1JFTUFQKSA9PSBUSU1fVElNNV9USU0zX1RSR08pICAgICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChUSU1fUkVNQVApID09IFRJTV9USU01X0xQVElNKSkpICAgICAgICB8fCBcCi0gICAgICAgICAoKChJTlNUQU5DRSkgPT0gVElNOSkgICYmICgoKFRJTV9SRU1BUCkgPT0gVElNX1RJTTlfVElNM19UUkdPKSAgICAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVElNX1JFTUFQKSA9PSBUSU1fVElNOV9MUFRJTSkpKSkKKyNkZWZpbmUgSVNfVElNX1JFTUFQKElOU1RBTkNFLCBUSU1fUkVNQVApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAoKCgoSU5TVEFOQ0UpID09IFRJTTIpICAmJiAoKChUSU1fUkVNQVApID09IFRJTV9USU0yX1RJTThfVFJHTykgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFRJTV9SRU1BUCkgPT0gVElNX1RJTTJfVVNCRlNfU09GKSAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVElNX1JFTUFQKSA9PSBUSU1fVElNMl9VU0JIU19TT0YpKSkgICAgfHwgXAorICAgKCgoSU5TVEFOQ0UpID09IFRJTTUpICAmJiAoKChUSU1fUkVNQVApID09IFRJTV9USU01X0dQSU8pICAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFRJTV9SRU1BUCkgPT0gVElNX1RJTTVfTFNJKSAgICAgICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVElNX1JFTUFQKSA9PSBUSU1fVElNNV9MU0UpICAgICAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChUSU1fUkVNQVApID09IFRJTV9USU01X1JUQykpKSAgICAgICAgICB8fCBcCisgICAoKChJTlNUQU5DRSkgPT0gVElNMTEpICYmICgoKFRJTV9SRU1BUCkgPT0gVElNX1RJTTExX0dQSU8pICAgICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVElNX1JFTUFQKSA9PSBUSU1fVElNMTFfSFNFKSkpICAgICAgICAgfHwgXAorICAgKCgoSU5TVEFOQ0UpID09IFRJTTEpICAmJiAoKChUSU1fUkVNQVApID09IFRJTV9USU0xX1RJTTNfVFJHTykgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFRJTV9SRU1BUCkgPT0gVElNX1RJTTFfTFBUSU0pKSkgICAgICAgIHx8IFwKKyAgICgoKElOU1RBTkNFKSA9PSBUSU01KSAgJiYgKCgoVElNX1JFTUFQKSA9PSBUSU1fVElNNV9USU0zX1RSR08pICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChUSU1fUkVNQVApID09IFRJTV9USU01X0xQVElNKSkpICAgICAgICB8fCBcCisgICAoKChJTlNUQU5DRSkgPT0gVElNOSkgICYmICgoKFRJTV9SRU1BUCkgPT0gVElNX1RJTTlfVElNM19UUkdPKSAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVElNX1JFTUFQKSA9PSBUSU1fVElNOV9MUFRJTSkpKSkKICNlbGlmIGRlZmluZWQoVElNOCkKLSNkZWZpbmUgSVNfVElNX1JFTUFQKElOU1RBTkNFLCBUSU1fUkVNQVApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAoKCgoSU5TVEFOQ0UpID09IFRJTTIpICAmJiAoKChUSU1fUkVNQVApID09IFRJTV9USU0yX1RJTThfVFJHTykgICAgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFRJTV9SRU1BUCkgPT0gVElNX1RJTTJfVVNCRlNfU09GKSAgICAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVElNX1JFTUFQKSA9PSBUSU1fVElNMl9VU0JIU19TT0YpKSkgICAgfHwgXAotICAgICAgICAgKCgoSU5TVEFOQ0UpID09IFRJTTUpICAmJiAoKChUSU1fUkVNQVApID09IFRJTV9USU01X0dQSU8pICAgICAgICAgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFRJTV9SRU1BUCkgPT0gVElNX1RJTTVfTFNJKSAgICAgICAgICAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVElNX1JFTUFQKSA9PSBUSU1fVElNNV9MU0UpICAgICAgICAgICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChUSU1fUkVNQVApID09IFRJTV9USU01X1JUQykpKSAgICAgICAgICB8fCBcCi0gICAgICAgICAoKChJTlNUQU5DRSkgPT0gVElNMTEpICYmICgoKFRJTV9SRU1BUCkgPT0gVElNX1RJTTExX0dQSU8pICAgICAgICAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVElNX1JFTUFQKSA9PSBUSU1fVElNMTFfSFNFKSkpKQorI2RlZmluZSBJU19USU1fUkVNQVAoSU5TVEFOQ0UsIFRJTV9SRU1BUCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICgoKChJTlNUQU5DRSkgPT0gVElNMikgICYmICgoKFRJTV9SRU1BUCkgPT0gVElNX1RJTTJfVElNOF9UUkdPKSAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVElNX1JFTUFQKSA9PSBUSU1fVElNMl9VU0JGU19TT0YpICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChUSU1fUkVNQVApID09IFRJTV9USU0yX1VTQkhTX1NPRikpKSAgICB8fCBcCisgICAoKChJTlNUQU5DRSkgPT0gVElNNSkgICYmICgoKFRJTV9SRU1BUCkgPT0gVElNX1RJTTVfR1BJTykgICAgICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVElNX1JFTUFQKSA9PSBUSU1fVElNNV9MU0kpICAgICAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChUSU1fUkVNQVApID09IFRJTV9USU01X0xTRSkgICAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFRJTV9SRU1BUCkgPT0gVElNX1RJTTVfUlRDKSkpICAgICAgICAgIHx8IFwKKyAgICgoKElOU1RBTkNFKSA9PSBUSU0xMSkgJiYgKCgoVElNX1JFTUFQKSA9PSBUSU1fVElNMTFfR1BJTykgICAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChUSU1fUkVNQVApID09IFRJTV9USU0xMV9IU0UpKSkpCiAjZWxzZQotI2RlZmluZSBJU19USU1fUkVNQVAoSU5TVEFOQ0UsIFRJTV9SRU1BUCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICgoKChJTlNUQU5DRSkgPT0gVElNMikgICYmICgoKFRJTV9SRU1BUCkgPT0gVElNX1RJTTJfRVRIX1BUUCkgICAgICAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVElNX1JFTUFQKSA9PSBUSU1fVElNMl9VU0JGU19TT0YpICAgICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChUSU1fUkVNQVApID09IFRJTV9USU0yX1VTQkhTX1NPRikpKSAgICB8fCBcCi0gICAgICAgICAoKChJTlNUQU5DRSkgPT0gVElNNSkgICYmICgoKFRJTV9SRU1BUCkgPT0gVElNX1RJTTVfR1BJTykgICAgICAgICAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVElNX1JFTUFQKSA9PSBUSU1fVElNNV9MU0kpICAgICAgICAgICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChUSU1fUkVNQVApID09IFRJTV9USU01X0xTRSkgICAgICAgICAgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFRJTV9SRU1BUCkgPT0gVElNX1RJTTVfUlRDKSkpICAgICAgICAgIHx8IFwKLSAgICAgICAgICgoKElOU1RBTkNFKSA9PSBUSU0xMSkgJiYgKCgoVElNX1JFTUFQKSA9PSBUSU1fVElNMTFfR1BJTykgICAgICAgICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChUSU1fUkVNQVApID09IFRJTV9USU0xMV9IU0UpKSkpCisjZGVmaW5lIElTX1RJTV9SRU1BUChJTlNUQU5DRSwgVElNX1JFTUFQKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgKCgoKElOU1RBTkNFKSA9PSBUSU0yKSAgJiYgKCgoVElNX1JFTUFQKSA9PSBUSU1fVElNMl9FVEhfUFRQKSAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChUSU1fUkVNQVApID09IFRJTV9USU0yX1VTQkZTX1NPRikgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFRJTV9SRU1BUCkgPT0gVElNX1RJTTJfVVNCSFNfU09GKSkpICAgIHx8IFwKKyAgICgoKElOU1RBTkNFKSA9PSBUSU01KSAgJiYgKCgoVElNX1JFTUFQKSA9PSBUSU1fVElNNV9HUElPKSAgICAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChUSU1fUkVNQVApID09IFRJTV9USU01X0xTSSkgICAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFRJTV9SRU1BUCkgPT0gVElNX1RJTTVfTFNFKSAgICAgICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVElNX1JFTUFQKSA9PSBUSU1fVElNNV9SVEMpKSkgICAgICAgICAgfHwgXAorICAgKCgoSU5TVEFOQ0UpID09IFRJTTExKSAmJiAoKChUSU1fUkVNQVApID09IFRJTV9USU0xMV9HUElPKSAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFRJTV9SRU1BUCkgPT0gVElNX1RJTTExX0hTRSkpKSkKICNlbmRpZiAvKiBMUFRJTV9PUl9USU0xX0lUUjJfUk1QICYmICBMUFRJTV9PUl9USU01X0lUUjFfUk1QICYmIExQVElNX09SX1RJTTVfSVRSMV9STVAgKi8KICNlbHNlCi0jZGVmaW5lIElTX1RJTV9SRU1BUChJTlNUQU5DRSwgVElNX1JFTUFQKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgKCgoKElOU1RBTkNFKSA9PSBUSU01KSAgJiYgKCgoVElNX1JFTUFQKSA9PSBUSU1fVElNNV9HUElPKSAgICAgICAgICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChUSU1fUkVNQVApID09IFRJTV9USU01X0xTSSkgICAgICAgICAgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFRJTV9SRU1BUCkgPT0gVElNX1RJTTVfTFNFKSAgICAgICAgICAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVElNX1JFTUFQKSA9PSBUSU1fVElNNV9SVEMpKSkgICAgICAgICAgfHwgXAotICAgICAgICAgKCgoSU5TVEFOQ0UpID09IFRJTTExKSAmJiAoKChUSU1fUkVNQVApID09IFRJTV9USU0xMV9HUElPKSAgICAgICAgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFRJTV9SRU1BUCkgPT0gVElNX1RJTTExX0hTRSkpKSkKKyNkZWZpbmUgSVNfVElNX1JFTUFQKElOU1RBTkNFLCBUSU1fUkVNQVApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAoKCgoSU5TVEFOQ0UpID09IFRJTTUpICAmJiAoKChUSU1fUkVNQVApID09IFRJTV9USU01X0dQSU8pICAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFRJTV9SRU1BUCkgPT0gVElNX1RJTTVfTFNJKSAgICAgICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVElNX1JFTUFQKSA9PSBUSU1fVElNNV9MU0UpICAgICAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChUSU1fUkVNQVApID09IFRJTV9USU01X1JUQykpKSAgICAgICAgICB8fCBcCisgICAoKChJTlNUQU5DRSkgPT0gVElNMTEpICYmICgoKFRJTV9SRU1BUCkgPT0gVElNX1RJTTExX0dQSU8pICAgICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVElNX1JFTUFQKSA9PSBUSU1fVElNMTFfSFNFKSkpKQogI2VuZGlmIC8qIFNQRElGUlggKi8KIAogLyoqCkBAIC0zMTgsNiArMzE4LDcgQEAKICAgKi8KIC8qIEV4dGVuZGVkIFBlcmlwaGVyYWwgU3RhdGUgZnVuY3Rpb25zICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBIQUxfVElNX1N0YXRlVHlwZURlZiBIQUxfVElNRXhfSGFsbFNlbnNvcl9HZXRTdGF0ZShUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSk7CitIQUxfVElNX0NoYW5uZWxTdGF0ZVR5cGVEZWYgSEFMX1RJTUV4X0dldENoYW5uZWxOU3RhdGUoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sICB1aW50MzJfdCBDaGFubmVsTik7CiAvKioKICAgKiBAfQogICAqLwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZjR4eF9oYWxfdWFydC5oIGIvSW5jL3N0bTMyZjR4eF9oYWxfdWFydC5oCmluZGV4IDIxNTRhMDIuLjI0YTQxMTQgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmY0eHhfaGFsX3VhcnQuaAorKysgYi9JbmMvc3RtMzJmNHh4X2hhbF91YXJ0LmgKQEAgLTg4LDcgKzg4LDcgQEAKICAgKiAgICAgICAgICAgICAxMSA6IEVycm9yCiAgICogICAgICAgICAgYjUgICAgIFBlcmlwaGVyYWwgaW5pdGlhbGl6YXRpb24gc3RhdHVzCiAgICogICAgICAgICAgICAgMCAgOiBSZXNldCAoUGVyaXBoZXJhbCBub3QgaW5pdGlhbGl6ZWQpCi0gICogICAgICAgICAgICAgMSAgOiBJbml0IGRvbmUgKFBlcmlwaGVyYWwgbm90IGluaXRpYWxpemVkLiBIQUwgVUFSVCBJbml0IGZ1bmN0aW9uIGFscmVhZHkgY2FsbGVkKQorICAqICAgICAgICAgICAgIDEgIDogSW5pdCBkb25lIChQZXJpcGhlcmFsIGluaXRpYWxpemVkLiBIQUwgVUFSVCBJbml0IGZ1bmN0aW9uIGFscmVhZHkgY2FsbGVkKQogICAqICAgICAgICAgIGI0LWIzICAobm90IHVzZWQpCiAgICogICAgICAgICAgICAgeHggOiBTaG91bGQgYmUgc2V0IHRvIDAwCiAgICogICAgICAgICAgYjIgICAgIEludHJpbnNpYyBwcm9jZXNzIHN0YXRlCkBAIC0xMDUsNyArMTA1LDcgQEAKICAgKiAgICAgICAgICAgICB4eCA6IFNob3VsZCBiZSBzZXQgdG8gMDAKICAgKiAgICAgICAgICBiNSAgICAgUGVyaXBoZXJhbCBpbml0aWFsaXphdGlvbiBzdGF0dXMKICAgKiAgICAgICAgICAgICAwICA6IFJlc2V0IChQZXJpcGhlcmFsIG5vdCBpbml0aWFsaXplZCkKLSAgKiAgICAgICAgICAgICAxICA6IEluaXQgZG9uZSAoUGVyaXBoZXJhbCBub3QgaW5pdGlhbGl6ZWQpCisgICogICAgICAgICAgICAgMSAgOiBJbml0IGRvbmUgKFBlcmlwaGVyYWwgaW5pdGlhbGl6ZWQpCiAgICogICAgICAgICAgYjQtYjIgIChub3QgdXNlZCkKICAgKiAgICAgICAgICAgIHh4eCA6IFNob3VsZCBiZSBzZXQgdG8gMDAwCiAgICogICAgICAgICAgYjEgICAgIFJ4IHN0YXRlCkBAIC0xMzYsNiArMTM2LDE1IEBACiB9IEhBTF9VQVJUX1N0YXRlVHlwZURlZjsKIAogLyoqCisgICogQGJyaWVmIEhBTCBVQVJUIFJlY2VwdGlvbiB0eXBlIGRlZmluaXRpb24KKyAgKiBAbm90ZSAgSEFMIFVBUlQgUmVjZXB0aW9uIHR5cGUgdmFsdWUgYWltcyB0byBpZGVudGlmeSB3aGljaCB0eXBlIG9mIFJlY2VwdGlvbiBpcyBvbmdvaW5nLgorICAqICAgICAgICBJdCBpcyBleHBlY3RlZCB0byBhZG1pdCBmb2xsb3dpbmcgdmFsdWVzIDoKKyAgKiAgICAgICAgICAgSEFMX1VBUlRfUkVDRVBUSU9OX1NUQU5EQVJEICAgICAgICAgPSAweDAwVSwKKyAgKiAgICAgICAgICAgSEFMX1VBUlRfUkVDRVBUSU9OX1RPSURMRSAgICAgICAgICAgPSAweDAxVSwKKyAgKi8KK3R5cGVkZWYgdWludDMyX3QgSEFMX1VBUlRfUnhUeXBlVHlwZURlZjsKKworLyoqCiAgICogQGJyaWVmICBVQVJUIGhhbmRsZSBTdHJ1Y3R1cmUgZGVmaW5pdGlvbgogICAqLwogdHlwZWRlZiBzdHJ1Y3QgX19VQVJUX0hhbmRsZVR5cGVEZWYKQEAgLTE1Niw2ICsxNjUsOCBAQAogCiAgIF9fSU8gdWludDE2X3QgICAgICAgICAgICAgICAgIFJ4WGZlckNvdW50OyAgICAgIC8qITwgVUFSVCBSeCBUcmFuc2ZlciBDb3VudGVyICAgICAgICAgICAqLwogCisgIF9fSU8gSEFMX1VBUlRfUnhUeXBlVHlwZURlZiBSZWNlcHRpb25UeXBlOyAgICAgIC8qITwgVHlwZSBvZiBvbmdvaW5nIHJlY2VwdGlvbiAgICAgICAgICAqLworCiAgIERNQV9IYW5kbGVUeXBlRGVmICAgICAgICAgICAgICpoZG1hdHg7ICAgICAgICAgIC8qITwgVUFSVCBUeCBETUEgSGFuZGxlIHBhcmFtZXRlcnMgICAgICAqLwogCiAgIERNQV9IYW5kbGVUeXBlRGVmICAgICAgICAgICAgICpoZG1hcng7ICAgICAgICAgIC8qITwgVUFSVCBSeCBETUEgSGFuZGxlIHBhcmFtZXRlcnMgICAgICAqLwpAQCAtMTgxLDYgKzE5Miw3IEBACiAgIHZvaWQgKCogQWJvcnRUcmFuc21pdENwbHRDYWxsYmFjaykoc3RydWN0IF9fVUFSVF9IYW5kbGVUeXBlRGVmICpodWFydCk7IC8qITwgVUFSVCBBYm9ydCBUcmFuc21pdCBDb21wbGV0ZSBDYWxsYmFjayAqLwogICB2b2lkICgqIEFib3J0UmVjZWl2ZUNwbHRDYWxsYmFjaykoc3RydWN0IF9fVUFSVF9IYW5kbGVUeXBlRGVmICpodWFydCk7ICAvKiE8IFVBUlQgQWJvcnQgUmVjZWl2ZSBDb21wbGV0ZSBDYWxsYmFjayAgKi8KICAgdm9pZCAoKiBXYWtldXBDYWxsYmFjaykoc3RydWN0IF9fVUFSVF9IYW5kbGVUeXBlRGVmICpodWFydCk7ICAgICAgICAgICAgLyohPCBVQVJUIFdha2V1cCBDYWxsYmFjayAgICAgICAgICAgICAgICAgICovCisgIHZvaWQgKCogUnhFdmVudENhbGxiYWNrKShzdHJ1Y3QgX19VQVJUX0hhbmRsZVR5cGVEZWYgKmh1YXJ0LCB1aW50MTZfdCBQb3MpOyAvKiE8IFVBUlQgUmVjZXB0aW9uIEV2ZW50IENhbGxiYWNrICAgICAqLwogCiAgIHZvaWQgKCogTXNwSW5pdENhbGxiYWNrKShzdHJ1Y3QgX19VQVJUX0hhbmRsZVR5cGVEZWYgKmh1YXJ0KTsgICAgICAgICAgIC8qITwgVUFSVCBNc3AgSW5pdCBjYWxsYmFjayAgICAgICAgICAgICAgICAqLwogICB2b2lkICgqIE1zcERlSW5pdENhbGxiYWNrKShzdHJ1Y3QgX19VQVJUX0hhbmRsZVR5cGVEZWYgKmh1YXJ0KTsgICAgICAgICAvKiE8IFVBUlQgTXNwIERlSW5pdCBjYWxsYmFjayAgICAgICAgICAgICAgKi8KQEAgLTIxMyw2ICsyMjUsNyBAQAogICAqIEBicmllZiAgSEFMIFVBUlQgQ2FsbGJhY2sgcG9pbnRlciBkZWZpbml0aW9uCiAgICovCiB0eXBlZGVmICB2b2lkICgqcFVBUlRfQ2FsbGJhY2tUeXBlRGVmKShVQVJUX0hhbmRsZVR5cGVEZWYgKmh1YXJ0KTsgIC8qITwgcG9pbnRlciB0byBhbiBVQVJUIGNhbGxiYWNrIGZ1bmN0aW9uICovCit0eXBlZGVmICB2b2lkICgqcFVBUlRfUnhFdmVudENhbGxiYWNrVHlwZURlZikoc3RydWN0IF9fVUFSVF9IYW5kbGVUeXBlRGVmICpodWFydCwgdWludDE2X3QgUG9zKTsgICAvKiE8IHBvaW50ZXIgdG8gYSBVQVJUIFJ4IEV2ZW50IHNwZWNpZmljIGNhbGxiYWNrIGZ1bmN0aW9uICovCiAKICNlbmRpZiAvKiBVU0VfSEFMX1VBUlRfUkVHSVNURVJfQ0FMTEJBQ0tTICovCiAKQEAgLTM2OSw2ICszODIsMTUgQEAKICAgKiBAfQogICAqLwogCisvKiogQGRlZmdyb3VwIFVBUlRfUkVDRVBUSU9OX1RZUEVfVmFsdWVzICBVQVJUIFJlY2VwdGlvbiB0eXBlIHZhbHVlcworICAqIEB7CisgICovCisjZGVmaW5lIEhBTF9VQVJUX1JFQ0VQVElPTl9TVEFOREFSRCAgICAgICAgICAoMHgwMDAwMDAwMFUpICAgICAgICAgICAgIC8qITwgU3RhbmRhcmQgcmVjZXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBIQUxfVUFSVF9SRUNFUFRJT05fVE9JRExFICAgICAgICAgICAgKDB4MDAwMDAwMDFVKSAgICAgICAgICAgICAvKiE8IFJlY2VwdGlvbiB0aWxsIGNvbXBsZXRpb24gb3IgSURMRSBldmVudCAgKi8KKy8qKgorICAqIEB9CisgICovCisKIC8qKgogICAqIEB9CiAgICovCkBAIC02ODIsNiArNzA0LDkgQEAKICNpZiAoVVNFX0hBTF9VQVJUX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxKQogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1VBUlRfUmVnaXN0ZXJDYWxsYmFjayhVQVJUX0hhbmRsZVR5cGVEZWYgKmh1YXJ0LCBIQUxfVUFSVF9DYWxsYmFja0lEVHlwZURlZiBDYWxsYmFja0lELCBwVUFSVF9DYWxsYmFja1R5cGVEZWYgcENhbGxiYWNrKTsKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9VQVJUX1VuUmVnaXN0ZXJDYWxsYmFjayhVQVJUX0hhbmRsZVR5cGVEZWYgKmh1YXJ0LCBIQUxfVUFSVF9DYWxsYmFja0lEVHlwZURlZiBDYWxsYmFja0lEKTsKKworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1VBUlRfUmVnaXN0ZXJSeEV2ZW50Q2FsbGJhY2soVUFSVF9IYW5kbGVUeXBlRGVmICpodWFydCwgcFVBUlRfUnhFdmVudENhbGxiYWNrVHlwZURlZiBwQ2FsbGJhY2spOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1VBUlRfVW5SZWdpc3RlclJ4RXZlbnRDYWxsYmFjayhVQVJUX0hhbmRsZVR5cGVEZWYgKmh1YXJ0KTsKICNlbmRpZiAvKiBVU0VfSEFMX1VBUlRfUkVHSVNURVJfQ0FMTEJBQ0tTICovCiAKIC8qKgpAQCAtNzAyLDYgKzcyNywxMSBAQAogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1VBUlRfRE1BUGF1c2UoVUFSVF9IYW5kbGVUeXBlRGVmICpodWFydCk7CiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfVUFSVF9ETUFSZXN1bWUoVUFSVF9IYW5kbGVUeXBlRGVmICpodWFydCk7CiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfVUFSVF9ETUFTdG9wKFVBUlRfSGFuZGxlVHlwZURlZiAqaHVhcnQpOworCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfVUFSVEV4X1JlY2VpdmVUb0lkbGUoVUFSVF9IYW5kbGVUeXBlRGVmICpodWFydCwgdWludDhfdCAqcERhdGEsIHVpbnQxNl90IFNpemUsIHVpbnQxNl90ICpSeExlbiwgdWludDMyX3QgVGltZW91dCk7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfVUFSVEV4X1JlY2VpdmVUb0lkbGVfSVQoVUFSVF9IYW5kbGVUeXBlRGVmICpodWFydCwgdWludDhfdCAqcERhdGEsIHVpbnQxNl90IFNpemUpOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1VBUlRFeF9SZWNlaXZlVG9JZGxlX0RNQShVQVJUX0hhbmRsZVR5cGVEZWYgKmh1YXJ0LCB1aW50OF90ICpwRGF0YSwgdWludDE2X3QgU2l6ZSk7CisKIC8qIFRyYW5zZmVyIEFib3J0IGZ1bmN0aW9ucyAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1VBUlRfQWJvcnQoVUFSVF9IYW5kbGVUeXBlRGVmICpodWFydCk7CiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfVUFSVF9BYm9ydFRyYW5zbWl0KFVBUlRfSGFuZGxlVHlwZURlZiAqaHVhcnQpOwpAQCAtNzIwLDYgKzc1MCw4IEBACiB2b2lkIEhBTF9VQVJUX0Fib3J0VHJhbnNtaXRDcGx0Q2FsbGJhY2soVUFSVF9IYW5kbGVUeXBlRGVmICpodWFydCk7CiB2b2lkIEhBTF9VQVJUX0Fib3J0UmVjZWl2ZUNwbHRDYWxsYmFjayhVQVJUX0hhbmRsZVR5cGVEZWYgKmh1YXJ0KTsKIAordm9pZCBIQUxfVUFSVEV4X1J4RXZlbnRDYWxsYmFjayhVQVJUX0hhbmRsZVR5cGVEZWYgKmh1YXJ0LCB1aW50MTZfdCBTaXplKTsKKwogLyoqCiAgICogQH0KICAgKi8KQEAgLTgyNSw2ICs4NTcsOSBAQAogICAqIEB7CiAgICovCiAKK0hBTF9TdGF0dXNUeXBlRGVmIFVBUlRfU3RhcnRfUmVjZWl2ZV9JVChVQVJUX0hhbmRsZVR5cGVEZWYgKmh1YXJ0LCB1aW50OF90ICpwRGF0YSwgdWludDE2X3QgU2l6ZSk7CitIQUxfU3RhdHVzVHlwZURlZiBVQVJUX1N0YXJ0X1JlY2VpdmVfRE1BKFVBUlRfSGFuZGxlVHlwZURlZiAqaHVhcnQsIHVpbnQ4X3QgKnBEYXRhLCB1aW50MTZfdCBTaXplKTsKKwogLyoqCiAgICogQH0KICAgKi8KZGlmZiAtLWdpdCBhL0luYy9zdG0zMmY0eHhfaGFsX3d3ZGcuaCBiL0luYy9zdG0zMmY0eHhfaGFsX3d3ZGcuaAppbmRleCAwNTY0MGFmLi4wMTdiMzRkIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmNHh4X2hhbF93d2RnLmgKKysrIGIvSW5jL3N0bTMyZjR4eF9oYWxfd3dkZy5oCkBAIC01Niw3ICs1Niw3IEBACiAgIHVpbnQzMl90IENvdW50ZXI7ICAgICAgIC8qITwgU3BlY2lmaWVzIHRoZSBXV0RHIGZyZWUtcnVubmluZyBkb3duY291bnRlciAgdmFsdWUuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIG51bWJlciBiZXR3ZWVuIE1pbl9EYXRhID0gMHg0MCBhbmQgTWF4X0RhdGEgPSAweDdGICovCiAKLSAgdWludDMyX3QgRVdJTW9kZSA7ICAgICAgLyohPCBTcGVjaWZpZXMgaWYgV1dERyBFYXJseSBXYWtldXAgSW50ZXJ1cHQgaXMgZW5hYmxlIG9yIG5vdC4KKyAgdWludDMyX3QgRVdJTW9kZSA7ICAgICAgLyohPCBTcGVjaWZpZXMgaWYgV1dERyBFYXJseSBXYWtldXAgSW50ZXJydXB0IGlzIGVuYWJsZSBvciBub3QuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBXV0RHX0VXSV9Nb2RlICovCiAKIH0gV1dER19Jbml0VHlwZURlZjsKQEAgLTY4LDE3ICs2OCwxNyBAQAogdHlwZWRlZiBzdHJ1Y3QgX19XV0RHX0hhbmRsZVR5cGVEZWYKICNlbHNlCiB0eXBlZGVmIHN0cnVjdAotI2VuZGlmCisjZW5kaWYgLyogVVNFX0hBTF9XV0RHX1JFR0lTVEVSX0NBTExCQUNLUyAqLwogewogICBXV0RHX1R5cGVEZWYgICAgICAqSW5zdGFuY2U7ICAvKiE8IFJlZ2lzdGVyIGJhc2UgYWRkcmVzcyAqLwogCiAgIFdXREdfSW5pdFR5cGVEZWYgIEluaXQ7ICAgICAgIC8qITwgV1dERyByZXF1aXJlZCBwYXJhbWV0ZXJzICovCiAKICNpZiAoVVNFX0hBTF9XV0RHX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxKQotICB2b2lkICAgICAgICAgICAgICAoKiBFd2lDYWxsYmFjaykoc3RydWN0IF9fV1dER19IYW5kbGVUeXBlRGVmICpod3dkZyk7ICAgICAvKiE8IFdXREcgRWFybHkgV2FrZVVwIEludGVycnVwdCBjYWxsYmFjayAqLworICB2b2lkICgqIEV3aUNhbGxiYWNrKShzdHJ1Y3QgX19XV0RHX0hhbmRsZVR5cGVEZWYgKmh3d2RnKTsgICAgICAgICAgICAgICAgICAvKiE8IFdXREcgRWFybHkgV2FrZVVwIEludGVycnVwdCBjYWxsYmFjayAqLwogCi0gIHZvaWQgICAgICAgICAgICAgICgqIE1zcEluaXRDYWxsYmFjaykoc3RydWN0IF9fV1dER19IYW5kbGVUeXBlRGVmICpod3dkZyk7IC8qITwgV1dERyBNc3AgSW5pdCBjYWxsYmFjayAqLwotI2VuZGlmCisgIHZvaWQgKCogTXNwSW5pdENhbGxiYWNrKShzdHJ1Y3QgX19XV0RHX0hhbmRsZVR5cGVEZWYgKmh3d2RnKTsgICAgICAgICAgICAgIC8qITwgV1dERyBNc3AgSW5pdCBjYWxsYmFjayAqLworI2VuZGlmIC8qIFVTRV9IQUxfV1dER19SRUdJU1RFUl9DQUxMQkFDS1MgKi8KIH0gV1dER19IYW5kbGVUeXBlRGVmOwogCiAjaWYgKFVTRV9IQUxfV1dER19SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkKQEAgLTg3LDggKzg3LDggQEAKICAgKi8KIHR5cGVkZWYgZW51bQogewotICBIQUxfV1dER19FV0lfQ0JfSUQgICAgICAgICAgPSAweDAwdSwgICAgLyohPCBXV0RHIEVXSSBjYWxsYmFjayBJRCAqLwotICBIQUxfV1dER19NU1BJTklUX0NCX0lEICAgICAgPSAweDAxdSwgICAgLyohPCBXV0RHIE1zcEluaXQgY2FsbGJhY2sgSUQgKi8KKyAgSEFMX1dXREdfRVdJX0NCX0lEICAgICAgICAgID0gMHgwMFUsICAgIC8qITwgV1dERyBFV0kgY2FsbGJhY2sgSUQgKi8KKyAgSEFMX1dXREdfTVNQSU5JVF9DQl9JRCAgICAgID0gMHgwMVUsICAgIC8qITwgV1dERyBNc3BJbml0IGNhbGxiYWNrIElEICovCiB9IEhBTF9XV0RHX0NhbGxiYWNrSURUeXBlRGVmOwogCiAvKioKQEAgLTk2LDcgKzk2LDcgQEAKICAgKi8KIHR5cGVkZWYgdm9pZCAoKnBXV0RHX0NhbGxiYWNrVHlwZURlZikoV1dER19IYW5kbGVUeXBlRGVmICpocHBwKTsgIC8qITwgcG9pbnRlciB0byBhIFdXREcgY29tbW9uIGNhbGxiYWNrIGZ1bmN0aW9ucyAqLwogCi0jZW5kaWYKKyNlbmRpZiAvKiBVU0VfSEFMX1dXREdfUkVHSVNURVJfQ0FMTEJBQ0tTICovCiAvKioKICAgKiBAfQogICAqLwpAQCAtMjYwLDkgKzI2MCwxMCBAQAogdm9pZCAgICAgICAgICAgICAgICAgIEhBTF9XV0RHX01zcEluaXQoV1dER19IYW5kbGVUeXBlRGVmICpod3dkZyk7CiAvKiBDYWxsYmFja3MgUmVnaXN0ZXIvVW5SZWdpc3RlciBmdW5jdGlvbnMgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmIChVU0VfSEFMX1dXREdfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCi1IQUxfU3RhdHVzVHlwZURlZiAgICAgSEFMX1dXREdfUmVnaXN0ZXJDYWxsYmFjayhXV0RHX0hhbmRsZVR5cGVEZWYgKmh3d2RnLCBIQUxfV1dER19DYWxsYmFja0lEVHlwZURlZiBDYWxsYmFja0lELCBwV1dER19DYWxsYmFja1R5cGVEZWYgcENhbGxiYWNrKTsKK0hBTF9TdGF0dXNUeXBlRGVmICAgICBIQUxfV1dER19SZWdpc3RlckNhbGxiYWNrKFdXREdfSGFuZGxlVHlwZURlZiAqaHd3ZGcsIEhBTF9XV0RHX0NhbGxiYWNrSURUeXBlRGVmIENhbGxiYWNrSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwV1dER19DYWxsYmFja1R5cGVEZWYgcENhbGxiYWNrKTsKIEhBTF9TdGF0dXNUeXBlRGVmICAgICBIQUxfV1dER19VblJlZ2lzdGVyQ2FsbGJhY2soV1dER19IYW5kbGVUeXBlRGVmICpod3dkZywgSEFMX1dXREdfQ2FsbGJhY2tJRFR5cGVEZWYgQ2FsbGJhY2tJRCk7Ci0jZW5kaWYKKyNlbmRpZiAvKiBVU0VfSEFMX1dXREdfUkVHSVNURVJfQ0FMTEJBQ0tTICovCiAKIC8qKgogICAqIEB9CmRpZmYgLS1naXQgYS9JbmMvc3RtMzJmNHh4X2xsX2FkYy5oIGIvSW5jL3N0bTMyZjR4eF9sbF9hZGMuaAppbmRleCAwZDVjY2IyLi45MzQ4OTExIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmNHh4X2xsX2FkYy5oCisrKyBiL0luYy9zdG0zMmY0eHhfbGxfYWRjLmgKQEAgLTUzLDMyICs1MywzMiBAQAogCiAvKiBJbnRlcm5hbCByZWdpc3RlciBvZmZzZXQgZm9yIEFEQyBncm91cCByZWd1bGFyIHNlcXVlbmNlciBjb25maWd1cmF0aW9uICovCiAvKiAob2Zmc2V0IHBsYWNlZCBpbnRvIGEgc3BhcmUgYXJlYSBvZiBsaXRlcmFsIGRlZmluaXRpb24pICovCi0jZGVmaW5lIEFEQ19TUVIxX1JFR09GRlNFVCAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMFUKLSNkZWZpbmUgQURDX1NRUjJfUkVHT0ZGU0VUICAgICAgICAgICAgICAgICAweDAwMDAwMTAwVQotI2RlZmluZSBBRENfU1FSM19SRUdPRkZTRVQgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDBVCi0jZGVmaW5lIEFEQ19TUVI0X1JFR09GRlNFVCAgICAgICAgICAgICAgICAgMHgwMDAwMDMwMFUKKyNkZWZpbmUgQURDX1NRUjFfUkVHT0ZGU0VUICAgICAgICAgICAgICAgICAweDAwMDAwMDAwVUwKKyNkZWZpbmUgQURDX1NRUjJfUkVHT0ZGU0VUICAgICAgICAgICAgICAgICAweDAwMDAwMTAwVUwKKyNkZWZpbmUgQURDX1NRUjNfUkVHT0ZGU0VUICAgICAgICAgICAgICAgICAweDAwMDAwMjAwVUwKKyNkZWZpbmUgQURDX1NRUjRfUkVHT0ZGU0VUICAgICAgICAgICAgICAgICAweDAwMDAwMzAwVUwKIAogI2RlZmluZSBBRENfUkVHX1NRUlhfUkVHT0ZGU0VUX01BU0sgICAgICAgIChBRENfU1FSMV9SRUdPRkZTRVQgfCBBRENfU1FSMl9SRUdPRkZTRVQgfCBBRENfU1FSM19SRUdPRkZTRVQgfCBBRENfU1FSNF9SRUdPRkZTRVQpCiAjZGVmaW5lIEFEQ19SRUdfUkFOS19JRF9TUVJYX01BU0sgICAgICAgICAgKEFEQ19DSEFOTkVMX0lEX05VTUJFUl9NQVNLX1BPU0JJVDApCiAKIC8qIERlZmluaXRpb24gb2YgQURDIGdyb3VwIHJlZ3VsYXIgc2VxdWVuY2VyIGJpdHMgaW5mb3JtYXRpb24gdG8gYmUgaW5zZXJ0ZWQgICovCiAvKiBpbnRvIEFEQyBncm91cCByZWd1bGFyIHNlcXVlbmNlciByYW5rcyBsaXRlcmFscyBkZWZpbml0aW9uLiAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBBRENfUkVHX1JBTktfMV9TUVJYX0JJVE9GRlNFVF9QT1MgICggMFUpIC8qIFZhbHVlIGVxdWl2YWxlbnQgdG8gUE9TSVRJT05fVkFMKEFEQ19TUVIzX1NRMSkgKi8KLSNkZWZpbmUgQURDX1JFR19SQU5LXzJfU1FSWF9CSVRPRkZTRVRfUE9TICAoIDVVKSAvKiBWYWx1ZSBlcXVpdmFsZW50IHRvIFBPU0lUSU9OX1ZBTChBRENfU1FSM19TUTIpICovCi0jZGVmaW5lIEFEQ19SRUdfUkFOS18zX1NRUlhfQklUT0ZGU0VUX1BPUyAgKDEwVSkgLyogVmFsdWUgZXF1aXZhbGVudCB0byBQT1NJVElPTl9WQUwoQURDX1NRUjNfU1EzKSAqLwotI2RlZmluZSBBRENfUkVHX1JBTktfNF9TUVJYX0JJVE9GRlNFVF9QT1MgICgxNVUpIC8qIFZhbHVlIGVxdWl2YWxlbnQgdG8gUE9TSVRJT05fVkFMKEFEQ19TUVIzX1NRNCkgKi8KLSNkZWZpbmUgQURDX1JFR19SQU5LXzVfU1FSWF9CSVRPRkZTRVRfUE9TICAoMjBVKSAvKiBWYWx1ZSBlcXVpdmFsZW50IHRvIFBPU0lUSU9OX1ZBTChBRENfU1FSM19TUTUpICovCi0jZGVmaW5lIEFEQ19SRUdfUkFOS182X1NRUlhfQklUT0ZGU0VUX1BPUyAgKDI1VSkgLyogVmFsdWUgZXF1aXZhbGVudCB0byBQT1NJVElPTl9WQUwoQURDX1NRUjNfU1E2KSAqLwotI2RlZmluZSBBRENfUkVHX1JBTktfN19TUVJYX0JJVE9GRlNFVF9QT1MgICggMFUpIC8qIFZhbHVlIGVxdWl2YWxlbnQgdG8gUE9TSVRJT05fVkFMKEFEQ19TUVIyX1NRNykgKi8KLSNkZWZpbmUgQURDX1JFR19SQU5LXzhfU1FSWF9CSVRPRkZTRVRfUE9TICAoIDVVKSAvKiBWYWx1ZSBlcXVpdmFsZW50IHRvIFBPU0lUSU9OX1ZBTChBRENfU1FSMl9TUTgpICovCi0jZGVmaW5lIEFEQ19SRUdfUkFOS185X1NRUlhfQklUT0ZGU0VUX1BPUyAgKDEwVSkgLyogVmFsdWUgZXF1aXZhbGVudCB0byBQT1NJVElPTl9WQUwoQURDX1NRUjJfU1E5KSAqLwotI2RlZmluZSBBRENfUkVHX1JBTktfMTBfU1FSWF9CSVRPRkZTRVRfUE9TICgxNVUpIC8qIFZhbHVlIGVxdWl2YWxlbnQgdG8gUE9TSVRJT05fVkFMKEFEQ19TUVIyX1NRMTApICovCi0jZGVmaW5lIEFEQ19SRUdfUkFOS18xMV9TUVJYX0JJVE9GRlNFVF9QT1MgKDIwVSkgLyogVmFsdWUgZXF1aXZhbGVudCB0byBQT1NJVElPTl9WQUwoQURDX1NRUjJfU1ExMSkgKi8KLSNkZWZpbmUgQURDX1JFR19SQU5LXzEyX1NRUlhfQklUT0ZGU0VUX1BPUyAoMjVVKSAvKiBWYWx1ZSBlcXVpdmFsZW50IHRvIFBPU0lUSU9OX1ZBTChBRENfU1FSMl9TUTEyKSAqLwotI2RlZmluZSBBRENfUkVHX1JBTktfMTNfU1FSWF9CSVRPRkZTRVRfUE9TICggMFUpIC8qIFZhbHVlIGVxdWl2YWxlbnQgdG8gUE9TSVRJT05fVkFMKEFEQ19TUVIxX1NRMTMpICovCi0jZGVmaW5lIEFEQ19SRUdfUkFOS18xNF9TUVJYX0JJVE9GRlNFVF9QT1MgKCA1VSkgLyogVmFsdWUgZXF1aXZhbGVudCB0byBQT1NJVElPTl9WQUwoQURDX1NRUjFfU1ExNCkgKi8KLSNkZWZpbmUgQURDX1JFR19SQU5LXzE1X1NRUlhfQklUT0ZGU0VUX1BPUyAoMTBVKSAvKiBWYWx1ZSBlcXVpdmFsZW50IHRvIFBPU0lUSU9OX1ZBTChBRENfU1FSMV9TUTE1KSAqLwotI2RlZmluZSBBRENfUkVHX1JBTktfMTZfU1FSWF9CSVRPRkZTRVRfUE9TICgxNVUpIC8qIFZhbHVlIGVxdWl2YWxlbnQgdG8gUE9TSVRJT05fVkFMKEFEQ19TUVIxX1NRMTYpICovCisjZGVmaW5lIEFEQ19SRUdfUkFOS18xX1NRUlhfQklUT0ZGU0VUX1BPUyAgKCAwVUwpIC8qIFZhbHVlIGVxdWl2YWxlbnQgdG8gUE9TSVRJT05fVkFMKEFEQ19TUVIzX1NRMSkgKi8KKyNkZWZpbmUgQURDX1JFR19SQU5LXzJfU1FSWF9CSVRPRkZTRVRfUE9TICAoIDVVTCkgLyogVmFsdWUgZXF1aXZhbGVudCB0byBQT1NJVElPTl9WQUwoQURDX1NRUjNfU1EyKSAqLworI2RlZmluZSBBRENfUkVHX1JBTktfM19TUVJYX0JJVE9GRlNFVF9QT1MgICgxMFVMKSAvKiBWYWx1ZSBlcXVpdmFsZW50IHRvIFBPU0lUSU9OX1ZBTChBRENfU1FSM19TUTMpICovCisjZGVmaW5lIEFEQ19SRUdfUkFOS180X1NRUlhfQklUT0ZGU0VUX1BPUyAgKDE1VUwpIC8qIFZhbHVlIGVxdWl2YWxlbnQgdG8gUE9TSVRJT05fVkFMKEFEQ19TUVIzX1NRNCkgKi8KKyNkZWZpbmUgQURDX1JFR19SQU5LXzVfU1FSWF9CSVRPRkZTRVRfUE9TICAoMjBVTCkgLyogVmFsdWUgZXF1aXZhbGVudCB0byBQT1NJVElPTl9WQUwoQURDX1NRUjNfU1E1KSAqLworI2RlZmluZSBBRENfUkVHX1JBTktfNl9TUVJYX0JJVE9GRlNFVF9QT1MgICgyNVVMKSAvKiBWYWx1ZSBlcXVpdmFsZW50IHRvIFBPU0lUSU9OX1ZBTChBRENfU1FSM19TUTYpICovCisjZGVmaW5lIEFEQ19SRUdfUkFOS183X1NRUlhfQklUT0ZGU0VUX1BPUyAgKCAwVUwpIC8qIFZhbHVlIGVxdWl2YWxlbnQgdG8gUE9TSVRJT05fVkFMKEFEQ19TUVIyX1NRNykgKi8KKyNkZWZpbmUgQURDX1JFR19SQU5LXzhfU1FSWF9CSVRPRkZTRVRfUE9TICAoIDVVTCkgLyogVmFsdWUgZXF1aXZhbGVudCB0byBQT1NJVElPTl9WQUwoQURDX1NRUjJfU1E4KSAqLworI2RlZmluZSBBRENfUkVHX1JBTktfOV9TUVJYX0JJVE9GRlNFVF9QT1MgICgxMFVMKSAvKiBWYWx1ZSBlcXVpdmFsZW50IHRvIFBPU0lUSU9OX1ZBTChBRENfU1FSMl9TUTkpICovCisjZGVmaW5lIEFEQ19SRUdfUkFOS18xMF9TUVJYX0JJVE9GRlNFVF9QT1MgKDE1VUwpIC8qIFZhbHVlIGVxdWl2YWxlbnQgdG8gUE9TSVRJT05fVkFMKEFEQ19TUVIyX1NRMTApICovCisjZGVmaW5lIEFEQ19SRUdfUkFOS18xMV9TUVJYX0JJVE9GRlNFVF9QT1MgKDIwVUwpIC8qIFZhbHVlIGVxdWl2YWxlbnQgdG8gUE9TSVRJT05fVkFMKEFEQ19TUVIyX1NRMTEpICovCisjZGVmaW5lIEFEQ19SRUdfUkFOS18xMl9TUVJYX0JJVE9GRlNFVF9QT1MgKDI1VUwpIC8qIFZhbHVlIGVxdWl2YWxlbnQgdG8gUE9TSVRJT05fVkFMKEFEQ19TUVIyX1NRMTIpICovCisjZGVmaW5lIEFEQ19SRUdfUkFOS18xM19TUVJYX0JJVE9GRlNFVF9QT1MgKCAwVUwpIC8qIFZhbHVlIGVxdWl2YWxlbnQgdG8gUE9TSVRJT05fVkFMKEFEQ19TUVIxX1NRMTMpICovCisjZGVmaW5lIEFEQ19SRUdfUkFOS18xNF9TUVJYX0JJVE9GRlNFVF9QT1MgKCA1VUwpIC8qIFZhbHVlIGVxdWl2YWxlbnQgdG8gUE9TSVRJT05fVkFMKEFEQ19TUVIxX1NRMTQpICovCisjZGVmaW5lIEFEQ19SRUdfUkFOS18xNV9TUVJYX0JJVE9GRlNFVF9QT1MgKDEwVUwpIC8qIFZhbHVlIGVxdWl2YWxlbnQgdG8gUE9TSVRJT05fVkFMKEFEQ19TUVIxX1NRMTUpICovCisjZGVmaW5lIEFEQ19SRUdfUkFOS18xNl9TUVJYX0JJVE9GRlNFVF9QT1MgKDE1VUwpIC8qIFZhbHVlIGVxdWl2YWxlbnQgdG8gUE9TSVRJT05fVkFMKEFEQ19TUVIxX1NRMTYpICovCiAKIC8qIEludGVybmFsIG1hc2sgZm9yIEFEQyBncm91cCBpbmplY3RlZCBzZXF1ZW5jZXI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiBUbyBzZWxlY3QgaW50byBsaXRlcmFsIExMX0FEQ19JTkpfUkFOS194IHRoZSByZWxldmFudCBiaXRzIGZvcjogICAgICAgICAgICAqLwpAQCAtODgsMTcgKzg4LDE3IEBACiAKIC8qIEludGVybmFsIHJlZ2lzdGVyIG9mZnNldCBmb3IgQURDIGdyb3VwIGluamVjdGVkIGRhdGEgcmVnaXN0ZXIgKi8KIC8qIChvZmZzZXQgcGxhY2VkIGludG8gYSBzcGFyZSBhcmVhIG9mIGxpdGVyYWwgZGVmaW5pdGlvbikgKi8KLSNkZWZpbmUgQURDX0pEUjFfUkVHT0ZGU0VUICAgICAgICAgICAgICAgICAweDAwMDAwMDAwVQotI2RlZmluZSBBRENfSkRSMl9SRUdPRkZTRVQgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDBVCi0jZGVmaW5lIEFEQ19KRFIzX1JFR09GRlNFVCAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMFUKLSNkZWZpbmUgQURDX0pEUjRfUkVHT0ZGU0VUICAgICAgICAgICAgICAgICAweDAwMDAwMzAwVQorI2RlZmluZSBBRENfSkRSMV9SRUdPRkZTRVQgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDBVTAorI2RlZmluZSBBRENfSkRSMl9SRUdPRkZTRVQgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDBVTAorI2RlZmluZSBBRENfSkRSM19SRUdPRkZTRVQgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDBVTAorI2RlZmluZSBBRENfSkRSNF9SRUdPRkZTRVQgICAgICAgICAgICAgICAgIDB4MDAwMDAzMDBVTAogCiAvKiBJbnRlcm5hbCByZWdpc3RlciBvZmZzZXQgZm9yIEFEQyBncm91cCBpbmplY3RlZCBvZmZzZXQgY29uZmlndXJhdGlvbiAqLwogLyogKG9mZnNldCBwbGFjZWQgaW50byBhIHNwYXJlIGFyZWEgb2YgbGl0ZXJhbCBkZWZpbml0aW9uKSAqLwotI2RlZmluZSBBRENfSk9GUjFfUkVHT0ZGU0VUICAgICAgICAgICAgICAgIDB4MDAwMDAwMDBVCi0jZGVmaW5lIEFEQ19KT0ZSMl9SRUdPRkZTRVQgICAgICAgICAgICAgICAgMHgwMDAwMTAwMFUKLSNkZWZpbmUgQURDX0pPRlIzX1JFR09GRlNFVCAgICAgICAgICAgICAgICAweDAwMDAyMDAwVQotI2RlZmluZSBBRENfSk9GUjRfUkVHT0ZGU0VUICAgICAgICAgICAgICAgIDB4MDAwMDMwMDBVCisjZGVmaW5lIEFEQ19KT0ZSMV9SRUdPRkZTRVQgICAgICAgICAgICAgICAgMHgwMDAwMDAwMFVMCisjZGVmaW5lIEFEQ19KT0ZSMl9SRUdPRkZTRVQgICAgICAgICAgICAgICAgMHgwMDAwMTAwMFVMCisjZGVmaW5lIEFEQ19KT0ZSM19SRUdPRkZTRVQgICAgICAgICAgICAgICAgMHgwMDAwMjAwMFVMCisjZGVmaW5lIEFEQ19KT0ZSNF9SRUdPRkZTRVQgICAgICAgICAgICAgICAgMHgwMDAwMzAwMFVMCiAKICNkZWZpbmUgQURDX0lOSl9KRFJYX1JFR09GRlNFVF9NQVNLICAgICAgICAoQURDX0pEUjFfUkVHT0ZGU0VUIHwgQURDX0pEUjJfUkVHT0ZGU0VUIHwgQURDX0pEUjNfUkVHT0ZGU0VUIHwgQURDX0pEUjRfUkVHT0ZGU0VUKQogI2RlZmluZSBBRENfSU5KX0pPRlJYX1JFR09GRlNFVF9NQVNLICAgICAgIChBRENfSk9GUjFfUkVHT0ZGU0VUIHwgQURDX0pPRlIyX1JFR09GRlNFVCB8IEFEQ19KT0ZSM19SRUdPRkZTRVQgfCBBRENfSk9GUjRfUkVHT0ZGU0VUKQpAQCAtMTEzLDIyICsxMTMsMjIgQEAKIC8qIE1hc2sgY29udGFpbmluZyB0cmlnZ2VyIHNvdXJjZSBtYXNrcyBmb3IgZWFjaCBvZiBwb3NzaWJsZSAgICAgICAgICAgICAgICAgICovCiAvKiB0cmlnZ2VyIGVkZ2Ugc2VsZWN0aW9uIGR1cGxpY2F0ZWQgd2l0aCBzaGlmdHMgWzA7IDQ7IDg7IDEyXSAgICAgICAgICAgICAgICAqLwogLyogY29ycmVzcG9uZGluZyB0byB7U1cgc3RhcnQ7IGV4dCB0cmlnZ2VyOyBleHQgdHJpZ2dlcjsgZXh0IHRyaWdnZXJ9LiAgICAgICAgKi8KLSNkZWZpbmUgQURDX1JFR19UUklHX1NPVVJDRV9NQVNLICAgICAgICAgICAgKCgoTExfQURDX1JFR19UUklHX1NPRlRXQVJFICYgQURDX0NSMl9FWFRTRUwpID4+ICg0VSAqIDBVKSkgfCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEFEQ19DUjJfRVhUU0VMKSAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PiAoNFUgKiAxVSkpIHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChBRENfQ1IyX0VYVFNFTCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgPj4gKDRVICogMlUpKSB8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQURDX0NSMl9FWFRTRUwpICAgICAgICAgICAgICAgICAgICAgICAgICAgID4+ICg0VSAqIDNVKSkpCisjZGVmaW5lIEFEQ19SRUdfVFJJR19TT1VSQ0VfTUFTSyAgICAgICAgICAgICgoKExMX0FEQ19SRUdfVFJJR19TT0ZUV0FSRSAmIEFEQ19DUjJfRVhUU0VMKSA+PiAoNFVMICogMFVMKSkgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEFEQ19DUjJfRVhUU0VMKSAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PiAoNFVMICogMVVMKSkgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEFEQ19DUjJfRVhUU0VMKSAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PiAoNFVMICogMlVMKSkgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEFEQ19DUjJfRVhUU0VMKSAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PiAoNFVMICogM1VMKSkpCiAKIC8qIE1hc2sgY29udGFpbmluZyB0cmlnZ2VyIGVkZ2UgbWFza3MgZm9yIGVhY2ggb2YgcG9zc2libGUgICAgICAgICAgICAgICAgICAgICovCiAvKiB0cmlnZ2VyIGVkZ2Ugc2VsZWN0aW9uIGR1cGxpY2F0ZWQgd2l0aCBzaGlmdHMgWzA7IDQ7IDg7IDEyXSAgICAgICAgICAgICAgICAqLwogLyogY29ycmVzcG9uZGluZyB0byB7U1cgc3RhcnQ7IGV4dCB0cmlnZ2VyOyBleHQgdHJpZ2dlcjsgZXh0IHRyaWdnZXJ9LiAgICAgICAgKi8KLSNkZWZpbmUgQURDX1JFR19UUklHX0VER0VfTUFTSyAgICAgICAgICAgICAgKCgoTExfQURDX1JFR19UUklHX1NPRlRXQVJFICYgQURDX0NSMl9FWFRFTikgPj4gKDRVICogMFUpKSB8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQURDX1JFR19UUklHX0VYVF9FREdFX0RFRkFVTFQpICAgICAgICAgICAgPj4gKDRVICogMVUpKSB8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQURDX1JFR19UUklHX0VYVF9FREdFX0RFRkFVTFQpICAgICAgICAgICAgPj4gKDRVICogMlUpKSB8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQURDX1JFR19UUklHX0VYVF9FREdFX0RFRkFVTFQpICAgICAgICAgICAgPj4gKDRVICogM1UpKSkKKyNkZWZpbmUgQURDX1JFR19UUklHX0VER0VfTUFTSyAgICAgICAgICAgICAgKCgoTExfQURDX1JFR19UUklHX1NPRlRXQVJFICYgQURDX0NSMl9FWFRFTikgPj4gKDRVTCAqIDBVTCkpIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChBRENfUkVHX1RSSUdfRVhUX0VER0VfREVGQVVMVCkgICAgICAgICAgICA+PiAoNFVMICogMVVMKSkgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEFEQ19SRUdfVFJJR19FWFRfRURHRV9ERUZBVUxUKSAgICAgICAgICAgID4+ICg0VUwgKiAyVUwpKSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQURDX1JFR19UUklHX0VYVF9FREdFX0RFRkFVTFQpICAgICAgICAgICAgPj4gKDRVTCAqIDNVTCkpKQogCiAvKiBEZWZpbml0aW9uIG9mIEFEQyBncm91cCByZWd1bGFyIHRyaWdnZXIgYml0cyBpbmZvcm1hdGlvbi4gICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBBRENfUkVHX1RSSUdfRVhUU0VMX0JJVE9GRlNFVF9QT1MgICgyNFUpIC8qIFZhbHVlIGVxdWl2YWxlbnQgdG8gUE9TSVRJT05fVkFMKEFEQ19DUjJfRVhUU0VMKSAqLwotI2RlZmluZSBBRENfUkVHX1RSSUdfRVhURU5fQklUT0ZGU0VUX1BPUyAgICgyOFUpIC8qIFZhbHVlIGVxdWl2YWxlbnQgdG8gUE9TSVRJT05fVkFMKEFEQ19DUjJfRVhURU4pICovCisjZGVmaW5lIEFEQ19SRUdfVFJJR19FWFRTRUxfQklUT0ZGU0VUX1BPUyAgKDI0VUwpIC8qIFZhbHVlIGVxdWl2YWxlbnQgdG8gUE9TSVRJT05fVkFMKEFEQ19DUjJfRVhUU0VMKSAqLworI2RlZmluZSBBRENfUkVHX1RSSUdfRVhURU5fQklUT0ZGU0VUX1BPUyAgICgyOFVMKSAvKiBWYWx1ZSBlcXVpdmFsZW50IHRvIFBPU0lUSU9OX1ZBTChBRENfQ1IyX0VYVEVOKSAqLwogCiAKIApAQCAtMTQxLDIyICsxNDEsMjIgQEAKIC8qIE1hc2sgY29udGFpbmluZyB0cmlnZ2VyIHNvdXJjZSBtYXNrcyBmb3IgZWFjaCBvZiBwb3NzaWJsZSAgICAgICAgICAgICAgICAgICovCiAvKiB0cmlnZ2VyIGVkZ2Ugc2VsZWN0aW9uIGR1cGxpY2F0ZWQgd2l0aCBzaGlmdHMgWzA7IDQ7IDg7IDEyXSAgICAgICAgICAgICAgICAqLwogLyogY29ycmVzcG9uZGluZyB0byB7U1cgc3RhcnQ7IGV4dCB0cmlnZ2VyOyBleHQgdHJpZ2dlcjsgZXh0IHRyaWdnZXJ9LiAgICAgICAgKi8KLSNkZWZpbmUgQURDX0lOSl9UUklHX1NPVVJDRV9NQVNLICAgICAgICAgICAgKCgoTExfQURDX1JFR19UUklHX1NPRlRXQVJFICYgQURDX0NSMl9KRVhUU0VMKSA+PiAoNFUgKiAwVSkpIHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChBRENfQ1IyX0pFWFRTRUwpICAgICAgICAgICAgICAgICAgICAgICAgICAgID4+ICg0VSAqIDFVKSkgfCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEFEQ19DUjJfSkVYVFNFTCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgPj4gKDRVICogMlUpKSB8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQURDX0NSMl9KRVhUU0VMKSAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PiAoNFUgKiAzVSkpKQorI2RlZmluZSBBRENfSU5KX1RSSUdfU09VUkNFX01BU0sgICAgICAgICAgICAoKChMTF9BRENfUkVHX1RSSUdfU09GVFdBUkUgJiBBRENfQ1IyX0pFWFRTRUwpID4+ICg0VUwgKiAwVUwpKSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQURDX0NSMl9KRVhUU0VMKSAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PiAoNFVMICogMVVMKSkgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEFEQ19DUjJfSkVYVFNFTCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgPj4gKDRVTCAqIDJVTCkpIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChBRENfQ1IyX0pFWFRTRUwpICAgICAgICAgICAgICAgICAgICAgICAgICAgID4+ICg0VUwgKiAzVUwpKSkKIAogLyogTWFzayBjb250YWluaW5nIHRyaWdnZXIgZWRnZSBtYXNrcyBmb3IgZWFjaCBvZiBwb3NzaWJsZSAgICAgICAgICAgICAgICAgICAgKi8KIC8qIHRyaWdnZXIgZWRnZSBzZWxlY3Rpb24gZHVwbGljYXRlZCB3aXRoIHNoaWZ0cyBbMDsgNDsgODsgMTJdICAgICAgICAgICAgICAgICovCiAvKiBjb3JyZXNwb25kaW5nIHRvIHtTVyBzdGFydDsgZXh0IHRyaWdnZXI7IGV4dCB0cmlnZ2VyOyBleHQgdHJpZ2dlcn0uICAgICAgICAqLwotI2RlZmluZSBBRENfSU5KX1RSSUdfRURHRV9NQVNLICAgICAgICAgICAgICAoKChMTF9BRENfSU5KX1RSSUdfU09GVFdBUkUgJiBBRENfQ1IyX0pFWFRFTikgPj4gKDRVICogMFUpKSB8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQURDX0lOSl9UUklHX0VYVF9FREdFX0RFRkFVTFQpICAgICAgICAgICAgID4+ICg0VSAqIDFVKSkgfCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEFEQ19JTkpfVFJJR19FWFRfRURHRV9ERUZBVUxUKSAgICAgICAgICAgICA+PiAoNFUgKiAyVSkpIHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChBRENfSU5KX1RSSUdfRVhUX0VER0VfREVGQVVMVCkgICAgICAgICAgICAgPj4gKDRVICogM1UpKSkKKyNkZWZpbmUgQURDX0lOSl9UUklHX0VER0VfTUFTSyAgICAgICAgICAgICAgKCgoTExfQURDX0lOSl9UUklHX1NPRlRXQVJFICYgQURDX0NSMl9KRVhURU4pID4+ICg0VUwgKiAwVUwpKSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQURDX0lOSl9UUklHX0VYVF9FREdFX0RFRkFVTFQpICAgICAgICAgICAgID4+ICg0VUwgKiAxVUwpKSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQURDX0lOSl9UUklHX0VYVF9FREdFX0RFRkFVTFQpICAgICAgICAgICAgID4+ICg0VUwgKiAyVUwpKSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQURDX0lOSl9UUklHX0VYVF9FREdFX0RFRkFVTFQpICAgICAgICAgICAgID4+ICg0VUwgKiAzVUwpKSkKIAogLyogRGVmaW5pdGlvbiBvZiBBREMgZ3JvdXAgaW5qZWN0ZWQgdHJpZ2dlciBiaXRzIGluZm9ybWF0aW9uLiAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgQURDX0lOSl9UUklHX0VYVFNFTF9CSVRPRkZTRVRfUE9TICAoMTZVKSAvKiBWYWx1ZSBlcXVpdmFsZW50IHRvIFBPU0lUSU9OX1ZBTChBRENfQ1IyX0pFWFRTRUwpICovCi0jZGVmaW5lIEFEQ19JTkpfVFJJR19FWFRFTl9CSVRPRkZTRVRfUE9TICAgKDIwVSkgLyogVmFsdWUgZXF1aXZhbGVudCB0byBQT1NJVElPTl9WQUwoQURDX0NSMl9KRVhURU4pICovCisjZGVmaW5lIEFEQ19JTkpfVFJJR19FWFRTRUxfQklUT0ZGU0VUX1BPUyAgKDE2VUwpIC8qIFZhbHVlIGVxdWl2YWxlbnQgdG8gUE9TSVRJT05fVkFMKEFEQ19DUjJfSkVYVFNFTCkgKi8KKyNkZWZpbmUgQURDX0lOSl9UUklHX0VYVEVOX0JJVE9GRlNFVF9QT1MgICAoMjBVTCkgLyogVmFsdWUgZXF1aXZhbGVudCB0byBQT1NJVElPTl9WQUwoQURDX0NSMl9KRVhURU4pICovCiAKIC8qIEludGVybmFsIG1hc2sgZm9yIEFEQyBjaGFubmVsOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiBUbyBzZWxlY3QgaW50byBsaXRlcmFsIExMX0FEQ19DSEFOTkVMX3ggdGhlIHJlbGV2YW50IGJpdHMgZm9yOiAgICAgICAgICAgICAqLwpAQCAtMTY2LDI5ICsxNjYsMjkgQEAKIC8qIC0gY2hhbm5lbCBzYW1wbGluZyB0aW1lIGRlZmluZWQgYnkgU01QUnggcmVnaXN0ZXIgb2Zmc2V0ICAgICAgICAgICAgICAgICAgICovCiAvKiAgIGFuZCBTTVB4IGJpdHMgcG9zaXRpb25zIGludG8gU01QUnggcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBBRENfQ0hBTk5FTF9JRF9OVU1CRVJfTUFTSyAgICAgICAgIChBRENfQ1IxX0FXRENIKQotI2RlZmluZSBBRENfQ0hBTk5FTF9JRF9OVU1CRVJfQklUT0ZGU0VUX1BPUyAoIDBVKS8qIFZhbHVlIGVxdWl2YWxlbnQgdG8gUE9TSVRJT05fVkFMKEFEQ19DSEFOTkVMX0lEX05VTUJFUl9NQVNLKSAqLworI2RlZmluZSBBRENfQ0hBTk5FTF9JRF9OVU1CRVJfQklUT0ZGU0VUX1BPUyAoIDBVTCkvKiBWYWx1ZSBlcXVpdmFsZW50IHRvIFBPU0lUSU9OX1ZBTChBRENfQ0hBTk5FTF9JRF9OVU1CRVJfTUFTSykgKi8KICNkZWZpbmUgQURDX0NIQU5ORUxfSURfTUFTSyAgICAgICAgICAgICAgICAoQURDX0NIQU5ORUxfSURfTlVNQkVSX01BU0sgfCBBRENfQ0hBTk5FTF9JRF9JTlRFUk5BTF9DSF9NQVNLKQogLyogRXF1aXZhbGVudCBtYXNrIG9mIEFEQ19DSEFOTkVMX05VTUJFUl9NQVNLIGFsaWduZWQgb24gcmVnaXN0ZXIgTFNCIChiaXQgMCkgKi8KICNkZWZpbmUgQURDX0NIQU5ORUxfSURfTlVNQkVSX01BU0tfUE9TQklUMCAweDAwMDAwMDFGVSAvKiBFcXVpdmFsZW50IHRvIHNoaWZ0OiAoQURDX0NIQU5ORUxfTlVNQkVSX01BU0sgPj4gUE9TSVRJT05fVkFMKEFEQ19DSEFOTkVMX05VTUJFUl9NQVNLKSkgKi8KIAogLyogQ2hhbm5lbCBkaWZmZXJlbnRpYXRpb24gYmV0d2VlbiBleHRlcm5hbCBhbmQgaW50ZXJuYWwgY2hhbm5lbHMgKi8KLSNkZWZpbmUgQURDX0NIQU5ORUxfSURfSU5URVJOQUxfQ0ggICAgICAgICAweDgwMDAwMDAwVSAgIC8qIE1hcmtlciBvZiBpbnRlcm5hbCBjaGFubmVsICovCi0jZGVmaW5lIEFEQ19DSEFOTkVMX0lEX0lOVEVSTkFMX0NIXzIgICAgICAgMHg0MDAwMDAwMFUgICAvKiBNYXJrZXIgb2YgaW50ZXJuYWwgY2hhbm5lbCBmb3Igb3RoZXIgQURDIGluc3RhbmNlcywgaW4gY2FzZSBvZiBkaWZmZXJlbnQgQURDIGludGVybmFsIGNoYW5uZWxzIG1hcHBlZCBvbiBzYW1lIGNoYW5uZWwgbnVtYmVyIG9uIGRpZmZlcmVudCBBREMgaW5zdGFuY2VzICovCisjZGVmaW5lIEFEQ19DSEFOTkVMX0lEX0lOVEVSTkFMX0NIICAgICAgICAgMHg4MDAwMDAwMFVMICAgLyogTWFya2VyIG9mIGludGVybmFsIGNoYW5uZWwgKi8KKyNkZWZpbmUgQURDX0NIQU5ORUxfSURfSU5URVJOQUxfQ0hfMiAgICAgICAweDQwMDAwMDAwVUwgICAvKiBNYXJrZXIgb2YgaW50ZXJuYWwgY2hhbm5lbCBmb3Igb3RoZXIgQURDIGluc3RhbmNlcywgaW4gY2FzZSBvZiBkaWZmZXJlbnQgQURDIGludGVybmFsIGNoYW5uZWxzIG1hcHBlZCBvbiBzYW1lIGNoYW5uZWwgbnVtYmVyIG9uIGRpZmZlcmVudCBBREMgaW5zdGFuY2VzICovCiAjZGVmaW5lIEFEQ19DSEFOTkVMX0RJRkZFUkVOQ0lBVElPTl9URU1QU0VOU09SX1ZCQVQgMHgxMDAwMDAwMFUgIC8qIER1bW15IGJpdCBmb3IgZHJpdmVyIGludGVybmFsIHVzYWdlLCBub3QgdXNlZCBpbiBBREMgY2hhbm5lbCBzZXR0aW5nIHJlZ2lzdGVycyBDUjEgb3IgU1FSeCAqLwogI2RlZmluZSBBRENfQ0hBTk5FTF9JRF9JTlRFUk5BTF9DSF9NQVNLICAgIChBRENfQ0hBTk5FTF9JRF9JTlRFUk5BTF9DSCB8IEFEQ19DSEFOTkVMX0lEX0lOVEVSTkFMX0NIXzIgfCBBRENfQ0hBTk5FTF9ESUZGRVJFTkNJQVRJT05fVEVNUFNFTlNPUl9WQkFUKQogCiAvKiBJbnRlcm5hbCByZWdpc3RlciBvZmZzZXQgZm9yIEFEQyBjaGFubmVsIHNhbXBsaW5nIHRpbWUgY29uZmlndXJhdGlvbiAqLwogLyogKG9mZnNldCBwbGFjZWQgaW50byBhIHNwYXJlIGFyZWEgb2YgbGl0ZXJhbCBkZWZpbml0aW9uKSAqLwotI2RlZmluZSBBRENfU01QUjFfUkVHT0ZGU0VUICAgICAgICAgICAgICAgIDB4MDAwMDAwMDBVCi0jZGVmaW5lIEFEQ19TTVBSMl9SRUdPRkZTRVQgICAgICAgICAgICAgICAgMHgwMjAwMDAwMFUKKyNkZWZpbmUgQURDX1NNUFIxX1JFR09GRlNFVCAgICAgICAgICAgICAgICAweDAwMDAwMDAwVUwKKyNkZWZpbmUgQURDX1NNUFIyX1JFR09GRlNFVCAgICAgICAgICAgICAgICAweDAyMDAwMDAwVUwKICNkZWZpbmUgQURDX0NIQU5ORUxfU01QUlhfUkVHT0ZGU0VUX01BU0sgICAoQURDX1NNUFIxX1JFR09GRlNFVCB8IEFEQ19TTVBSMl9SRUdPRkZTRVQpCiAKLSNkZWZpbmUgQURDX0NIQU5ORUxfU01QeF9CSVRPRkZTRVRfTUFTSyAgICAweDAxRjAwMDAwVQotI2RlZmluZSBBRENfQ0hBTk5FTF9TTVB4X0JJVE9GRlNFVF9QT1MgICAgICgyMFUpICAgICAgICAgICAvKiBWYWx1ZSBlcXVpdmFsZW50IHRvIFBPU0lUSU9OX1ZBTChBRENfQ0hBTk5FTF9TTVB4X0JJVE9GRlNFVF9NQVNLKSAqLworI2RlZmluZSBBRENfQ0hBTk5FTF9TTVB4X0JJVE9GRlNFVF9NQVNLICAgIDB4MDFGMDAwMDBVTAorI2RlZmluZSBBRENfQ0hBTk5FTF9TTVB4X0JJVE9GRlNFVF9QT1MgICAgICgyMFVMKSAgICAgICAgICAgLyogVmFsdWUgZXF1aXZhbGVudCB0byBQT1NJVElPTl9WQUwoQURDX0NIQU5ORUxfU01QeF9CSVRPRkZTRVRfTUFTSykgKi8KIAogLyogRGVmaW5pdGlvbiBvZiBjaGFubmVscyBJRCBudW1iZXIgaW5mb3JtYXRpb24gdG8gYmUgaW5zZXJ0ZWQgaW50byAgICAgICAgICAgKi8KIC8qIGNoYW5uZWxzIGxpdGVyYWxzIGRlZmluaXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIEFEQ19DSEFOTkVMXzBfTlVNQkVSICAgICAgICAgICAgICAgMHgwMDAwMDAwMFUKKyNkZWZpbmUgQURDX0NIQU5ORUxfMF9OVU1CRVIgICAgICAgICAgICAgICAweDAwMDAwMDAwVUwKICNkZWZpbmUgQURDX0NIQU5ORUxfMV9OVU1CRVIgICAgICAgICAgICAgICAoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQURDX0NSMV9BV0RDSF8wKQogI2RlZmluZSBBRENfQ0hBTk5FTF8yX05VTUJFUiAgICAgICAgICAgICAgICggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRENfQ1IxX0FXRENIXzEgICAgICAgICAgICAgICAgICApCiAjZGVmaW5lIEFEQ19DSEFOTkVMXzNfTlVNQkVSICAgICAgICAgICAgICAgKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFEQ19DUjFfQVdEQ0hfMSB8IEFEQ19DUjFfQVdEQ0hfMCkKQEAgLTIxMCwyNSArMjEwLDI1IEBACiAKIC8qIERlZmluaXRpb24gb2YgY2hhbm5lbHMgc2FtcGxpbmcgdGltZSBpbmZvcm1hdGlvbiB0byBiZSBpbnNlcnRlZCBpbnRvICAgICAgICovCiAvKiBjaGFubmVscyBsaXRlcmFscyBkZWZpbml0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBBRENfQ0hBTk5FTF8wX1NNUCAgICAgICAgICAgICAgICAgIChBRENfU01QUjJfUkVHT0ZGU0VUIHwgKCggMFUpIDw8IEFEQ19DSEFOTkVMX1NNUHhfQklUT0ZGU0VUX1BPUykpIC8qIFZhbHVlIHNoaWZ0ZWQgaXMgZXF1aXZhbGVudCB0byBQT1NJVElPTl9WQUwoQURDX1NNUFIyX1NNUDApICovCi0jZGVmaW5lIEFEQ19DSEFOTkVMXzFfU01QICAgICAgICAgICAgICAgICAgKEFEQ19TTVBSMl9SRUdPRkZTRVQgfCAoKCAzVSkgPDwgQURDX0NIQU5ORUxfU01QeF9CSVRPRkZTRVRfUE9TKSkgLyogVmFsdWUgc2hpZnRlZCBpcyBlcXVpdmFsZW50IHRvIFBPU0lUSU9OX1ZBTChBRENfU01QUjJfU01QMSkgKi8KLSNkZWZpbmUgQURDX0NIQU5ORUxfMl9TTVAgICAgICAgICAgICAgICAgICAoQURDX1NNUFIyX1JFR09GRlNFVCB8ICgoIDZVKSA8PCBBRENfQ0hBTk5FTF9TTVB4X0JJVE9GRlNFVF9QT1MpKSAvKiBWYWx1ZSBzaGlmdGVkIGlzIGVxdWl2YWxlbnQgdG8gUE9TSVRJT05fVkFMKEFEQ19TTVBSMl9TTVAyKSAqLwotI2RlZmluZSBBRENfQ0hBTk5FTF8zX1NNUCAgICAgICAgICAgICAgICAgIChBRENfU01QUjJfUkVHT0ZGU0VUIHwgKCggOVUpIDw8IEFEQ19DSEFOTkVMX1NNUHhfQklUT0ZGU0VUX1BPUykpIC8qIFZhbHVlIHNoaWZ0ZWQgaXMgZXF1aXZhbGVudCB0byBQT1NJVElPTl9WQUwoQURDX1NNUFIyX1NNUDMpICovCi0jZGVmaW5lIEFEQ19DSEFOTkVMXzRfU01QICAgICAgICAgICAgICAgICAgKEFEQ19TTVBSMl9SRUdPRkZTRVQgfCAoKDEyVSkgPDwgQURDX0NIQU5ORUxfU01QeF9CSVRPRkZTRVRfUE9TKSkgLyogVmFsdWUgc2hpZnRlZCBpcyBlcXVpdmFsZW50IHRvIFBPU0lUSU9OX1ZBTChBRENfU01QUjJfU01QNCkgKi8KLSNkZWZpbmUgQURDX0NIQU5ORUxfNV9TTVAgICAgICAgICAgICAgICAgICAoQURDX1NNUFIyX1JFR09GRlNFVCB8ICgoMTVVKSA8PCBBRENfQ0hBTk5FTF9TTVB4X0JJVE9GRlNFVF9QT1MpKSAvKiBWYWx1ZSBzaGlmdGVkIGlzIGVxdWl2YWxlbnQgdG8gUE9TSVRJT05fVkFMKEFEQ19TTVBSMl9TTVA1KSAqLwotI2RlZmluZSBBRENfQ0hBTk5FTF82X1NNUCAgICAgICAgICAgICAgICAgIChBRENfU01QUjJfUkVHT0ZGU0VUIHwgKCgxOFUpIDw8IEFEQ19DSEFOTkVMX1NNUHhfQklUT0ZGU0VUX1BPUykpIC8qIFZhbHVlIHNoaWZ0ZWQgaXMgZXF1aXZhbGVudCB0byBQT1NJVElPTl9WQUwoQURDX1NNUFIyX1NNUDYpICovCi0jZGVmaW5lIEFEQ19DSEFOTkVMXzdfU01QICAgICAgICAgICAgICAgICAgKEFEQ19TTVBSMl9SRUdPRkZTRVQgfCAoKDIxVSkgPDwgQURDX0NIQU5ORUxfU01QeF9CSVRPRkZTRVRfUE9TKSkgLyogVmFsdWUgc2hpZnRlZCBpcyBlcXVpdmFsZW50IHRvIFBPU0lUSU9OX1ZBTChBRENfU01QUjJfU01QNykgKi8KLSNkZWZpbmUgQURDX0NIQU5ORUxfOF9TTVAgICAgICAgICAgICAgICAgICAoQURDX1NNUFIyX1JFR09GRlNFVCB8ICgoMjRVKSA8PCBBRENfQ0hBTk5FTF9TTVB4X0JJVE9GRlNFVF9QT1MpKSAvKiBWYWx1ZSBzaGlmdGVkIGlzIGVxdWl2YWxlbnQgdG8gUE9TSVRJT05fVkFMKEFEQ19TTVBSMl9TTVA4KSAqLwotI2RlZmluZSBBRENfQ0hBTk5FTF85X1NNUCAgICAgICAgICAgICAgICAgIChBRENfU01QUjJfUkVHT0ZGU0VUIHwgKCgyN1UpIDw8IEFEQ19DSEFOTkVMX1NNUHhfQklUT0ZGU0VUX1BPUykpIC8qIFZhbHVlIHNoaWZ0ZWQgaXMgZXF1aXZhbGVudCB0byBQT1NJVElPTl9WQUwoQURDX1NNUFIyX1NNUDkpICovCi0jZGVmaW5lIEFEQ19DSEFOTkVMXzEwX1NNUCAgICAgICAgICAgICAgICAgKEFEQ19TTVBSMV9SRUdPRkZTRVQgfCAoKCAwVSkgPDwgQURDX0NIQU5ORUxfU01QeF9CSVRPRkZTRVRfUE9TKSkgLyogVmFsdWUgc2hpZnRlZCBpcyBlcXVpdmFsZW50IHRvIFBPU0lUSU9OX1ZBTChBRENfU01QUjFfU01QMTApICovCi0jZGVmaW5lIEFEQ19DSEFOTkVMXzExX1NNUCAgICAgICAgICAgICAgICAgKEFEQ19TTVBSMV9SRUdPRkZTRVQgfCAoKCAzVSkgPDwgQURDX0NIQU5ORUxfU01QeF9CSVRPRkZTRVRfUE9TKSkgLyogVmFsdWUgc2hpZnRlZCBpcyBlcXVpdmFsZW50IHRvIFBPU0lUSU9OX1ZBTChBRENfU01QUjFfU01QMTEpICovCi0jZGVmaW5lIEFEQ19DSEFOTkVMXzEyX1NNUCAgICAgICAgICAgICAgICAgKEFEQ19TTVBSMV9SRUdPRkZTRVQgfCAoKCA2VSkgPDwgQURDX0NIQU5ORUxfU01QeF9CSVRPRkZTRVRfUE9TKSkgLyogVmFsdWUgc2hpZnRlZCBpcyBlcXVpdmFsZW50IHRvIFBPU0lUSU9OX1ZBTChBRENfU01QUjFfU01QMTIpICovCi0jZGVmaW5lIEFEQ19DSEFOTkVMXzEzX1NNUCAgICAgICAgICAgICAgICAgKEFEQ19TTVBSMV9SRUdPRkZTRVQgfCAoKCA5VSkgPDwgQURDX0NIQU5ORUxfU01QeF9CSVRPRkZTRVRfUE9TKSkgLyogVmFsdWUgc2hpZnRlZCBpcyBlcXVpdmFsZW50IHRvIFBPU0lUSU9OX1ZBTChBRENfU01QUjFfU01QMTMpICovCi0jZGVmaW5lIEFEQ19DSEFOTkVMXzE0X1NNUCAgICAgICAgICAgICAgICAgKEFEQ19TTVBSMV9SRUdPRkZTRVQgfCAoKDEyVSkgPDwgQURDX0NIQU5ORUxfU01QeF9CSVRPRkZTRVRfUE9TKSkgLyogVmFsdWUgc2hpZnRlZCBpcyBlcXVpdmFsZW50IHRvIFBPU0lUSU9OX1ZBTChBRENfU01QUjFfU01QMTQpICovCi0jZGVmaW5lIEFEQ19DSEFOTkVMXzE1X1NNUCAgICAgICAgICAgICAgICAgKEFEQ19TTVBSMV9SRUdPRkZTRVQgfCAoKDE1VSkgPDwgQURDX0NIQU5ORUxfU01QeF9CSVRPRkZTRVRfUE9TKSkgLyogVmFsdWUgc2hpZnRlZCBpcyBlcXVpdmFsZW50IHRvIFBPU0lUSU9OX1ZBTChBRENfU01QUjFfU01QMTUpICovCi0jZGVmaW5lIEFEQ19DSEFOTkVMXzE2X1NNUCAgICAgICAgICAgICAgICAgKEFEQ19TTVBSMV9SRUdPRkZTRVQgfCAoKDE4VSkgPDwgQURDX0NIQU5ORUxfU01QeF9CSVRPRkZTRVRfUE9TKSkgLyogVmFsdWUgc2hpZnRlZCBpcyBlcXVpdmFsZW50IHRvIFBPU0lUSU9OX1ZBTChBRENfU01QUjFfU01QMTYpICovCi0jZGVmaW5lIEFEQ19DSEFOTkVMXzE3X1NNUCAgICAgICAgICAgICAgICAgKEFEQ19TTVBSMV9SRUdPRkZTRVQgfCAoKDIxVSkgPDwgQURDX0NIQU5ORUxfU01QeF9CSVRPRkZTRVRfUE9TKSkgLyogVmFsdWUgc2hpZnRlZCBpcyBlcXVpdmFsZW50IHRvIFBPU0lUSU9OX1ZBTChBRENfU01QUjFfU01QMTcpICovCi0jZGVmaW5lIEFEQ19DSEFOTkVMXzE4X1NNUCAgICAgICAgICAgICAgICAgKEFEQ19TTVBSMV9SRUdPRkZTRVQgfCAoKDI0VSkgPDwgQURDX0NIQU5ORUxfU01QeF9CSVRPRkZTRVRfUE9TKSkgLyogVmFsdWUgc2hpZnRlZCBpcyBlcXVpdmFsZW50IHRvIFBPU0lUSU9OX1ZBTChBRENfU01QUjFfU01QMTgpICovCisjZGVmaW5lIEFEQ19DSEFOTkVMXzBfU01QICAgICAgICAgICAgICAgICAgKEFEQ19TTVBSMl9SRUdPRkZTRVQgfCAoKCAwVUwpIDw8IEFEQ19DSEFOTkVMX1NNUHhfQklUT0ZGU0VUX1BPUykpIC8qIFZhbHVlIHNoaWZ0ZWQgaXMgZXF1aXZhbGVudCB0byBQT1NJVElPTl9WQUwoQURDX1NNUFIyX1NNUDApICovCisjZGVmaW5lIEFEQ19DSEFOTkVMXzFfU01QICAgICAgICAgICAgICAgICAgKEFEQ19TTVBSMl9SRUdPRkZTRVQgfCAoKCAzVUwpIDw8IEFEQ19DSEFOTkVMX1NNUHhfQklUT0ZGU0VUX1BPUykpIC8qIFZhbHVlIHNoaWZ0ZWQgaXMgZXF1aXZhbGVudCB0byBQT1NJVElPTl9WQUwoQURDX1NNUFIyX1NNUDEpICovCisjZGVmaW5lIEFEQ19DSEFOTkVMXzJfU01QICAgICAgICAgICAgICAgICAgKEFEQ19TTVBSMl9SRUdPRkZTRVQgfCAoKCA2VUwpIDw8IEFEQ19DSEFOTkVMX1NNUHhfQklUT0ZGU0VUX1BPUykpIC8qIFZhbHVlIHNoaWZ0ZWQgaXMgZXF1aXZhbGVudCB0byBQT1NJVElPTl9WQUwoQURDX1NNUFIyX1NNUDIpICovCisjZGVmaW5lIEFEQ19DSEFOTkVMXzNfU01QICAgICAgICAgICAgICAgICAgKEFEQ19TTVBSMl9SRUdPRkZTRVQgfCAoKCA5VUwpIDw8IEFEQ19DSEFOTkVMX1NNUHhfQklUT0ZGU0VUX1BPUykpIC8qIFZhbHVlIHNoaWZ0ZWQgaXMgZXF1aXZhbGVudCB0byBQT1NJVElPTl9WQUwoQURDX1NNUFIyX1NNUDMpICovCisjZGVmaW5lIEFEQ19DSEFOTkVMXzRfU01QICAgICAgICAgICAgICAgICAgKEFEQ19TTVBSMl9SRUdPRkZTRVQgfCAoKDEyVUwpIDw8IEFEQ19DSEFOTkVMX1NNUHhfQklUT0ZGU0VUX1BPUykpIC8qIFZhbHVlIHNoaWZ0ZWQgaXMgZXF1aXZhbGVudCB0byBQT1NJVElPTl9WQUwoQURDX1NNUFIyX1NNUDQpICovCisjZGVmaW5lIEFEQ19DSEFOTkVMXzVfU01QICAgICAgICAgICAgICAgICAgKEFEQ19TTVBSMl9SRUdPRkZTRVQgfCAoKDE1VUwpIDw8IEFEQ19DSEFOTkVMX1NNUHhfQklUT0ZGU0VUX1BPUykpIC8qIFZhbHVlIHNoaWZ0ZWQgaXMgZXF1aXZhbGVudCB0byBQT1NJVElPTl9WQUwoQURDX1NNUFIyX1NNUDUpICovCisjZGVmaW5lIEFEQ19DSEFOTkVMXzZfU01QICAgICAgICAgICAgICAgICAgKEFEQ19TTVBSMl9SRUdPRkZTRVQgfCAoKDE4VUwpIDw8IEFEQ19DSEFOTkVMX1NNUHhfQklUT0ZGU0VUX1BPUykpIC8qIFZhbHVlIHNoaWZ0ZWQgaXMgZXF1aXZhbGVudCB0byBQT1NJVElPTl9WQUwoQURDX1NNUFIyX1NNUDYpICovCisjZGVmaW5lIEFEQ19DSEFOTkVMXzdfU01QICAgICAgICAgICAgICAgICAgKEFEQ19TTVBSMl9SRUdPRkZTRVQgfCAoKDIxVUwpIDw8IEFEQ19DSEFOTkVMX1NNUHhfQklUT0ZGU0VUX1BPUykpIC8qIFZhbHVlIHNoaWZ0ZWQgaXMgZXF1aXZhbGVudCB0byBQT1NJVElPTl9WQUwoQURDX1NNUFIyX1NNUDcpICovCisjZGVmaW5lIEFEQ19DSEFOTkVMXzhfU01QICAgICAgICAgICAgICAgICAgKEFEQ19TTVBSMl9SRUdPRkZTRVQgfCAoKDI0VUwpIDw8IEFEQ19DSEFOTkVMX1NNUHhfQklUT0ZGU0VUX1BPUykpIC8qIFZhbHVlIHNoaWZ0ZWQgaXMgZXF1aXZhbGVudCB0byBQT1NJVElPTl9WQUwoQURDX1NNUFIyX1NNUDgpICovCisjZGVmaW5lIEFEQ19DSEFOTkVMXzlfU01QICAgICAgICAgICAgICAgICAgKEFEQ19TTVBSMl9SRUdPRkZTRVQgfCAoKDI3VUwpIDw8IEFEQ19DSEFOTkVMX1NNUHhfQklUT0ZGU0VUX1BPUykpIC8qIFZhbHVlIHNoaWZ0ZWQgaXMgZXF1aXZhbGVudCB0byBQT1NJVElPTl9WQUwoQURDX1NNUFIyX1NNUDkpICovCisjZGVmaW5lIEFEQ19DSEFOTkVMXzEwX1NNUCAgICAgICAgICAgICAgICAgKEFEQ19TTVBSMV9SRUdPRkZTRVQgfCAoKCAwVUwpIDw8IEFEQ19DSEFOTkVMX1NNUHhfQklUT0ZGU0VUX1BPUykpIC8qIFZhbHVlIHNoaWZ0ZWQgaXMgZXF1aXZhbGVudCB0byBQT1NJVElPTl9WQUwoQURDX1NNUFIxX1NNUDEwKSAqLworI2RlZmluZSBBRENfQ0hBTk5FTF8xMV9TTVAgICAgICAgICAgICAgICAgIChBRENfU01QUjFfUkVHT0ZGU0VUIHwgKCggM1VMKSA8PCBBRENfQ0hBTk5FTF9TTVB4X0JJVE9GRlNFVF9QT1MpKSAvKiBWYWx1ZSBzaGlmdGVkIGlzIGVxdWl2YWxlbnQgdG8gUE9TSVRJT05fVkFMKEFEQ19TTVBSMV9TTVAxMSkgKi8KKyNkZWZpbmUgQURDX0NIQU5ORUxfMTJfU01QICAgICAgICAgICAgICAgICAoQURDX1NNUFIxX1JFR09GRlNFVCB8ICgoIDZVTCkgPDwgQURDX0NIQU5ORUxfU01QeF9CSVRPRkZTRVRfUE9TKSkgLyogVmFsdWUgc2hpZnRlZCBpcyBlcXVpdmFsZW50IHRvIFBPU0lUSU9OX1ZBTChBRENfU01QUjFfU01QMTIpICovCisjZGVmaW5lIEFEQ19DSEFOTkVMXzEzX1NNUCAgICAgICAgICAgICAgICAgKEFEQ19TTVBSMV9SRUdPRkZTRVQgfCAoKCA5VUwpIDw8IEFEQ19DSEFOTkVMX1NNUHhfQklUT0ZGU0VUX1BPUykpIC8qIFZhbHVlIHNoaWZ0ZWQgaXMgZXF1aXZhbGVudCB0byBQT1NJVElPTl9WQUwoQURDX1NNUFIxX1NNUDEzKSAqLworI2RlZmluZSBBRENfQ0hBTk5FTF8xNF9TTVAgICAgICAgICAgICAgICAgIChBRENfU01QUjFfUkVHT0ZGU0VUIHwgKCgxMlVMKSA8PCBBRENfQ0hBTk5FTF9TTVB4X0JJVE9GRlNFVF9QT1MpKSAvKiBWYWx1ZSBzaGlmdGVkIGlzIGVxdWl2YWxlbnQgdG8gUE9TSVRJT05fVkFMKEFEQ19TTVBSMV9TTVAxNCkgKi8KKyNkZWZpbmUgQURDX0NIQU5ORUxfMTVfU01QICAgICAgICAgICAgICAgICAoQURDX1NNUFIxX1JFR09GRlNFVCB8ICgoMTVVTCkgPDwgQURDX0NIQU5ORUxfU01QeF9CSVRPRkZTRVRfUE9TKSkgLyogVmFsdWUgc2hpZnRlZCBpcyBlcXVpdmFsZW50IHRvIFBPU0lUSU9OX1ZBTChBRENfU01QUjFfU01QMTUpICovCisjZGVmaW5lIEFEQ19DSEFOTkVMXzE2X1NNUCAgICAgICAgICAgICAgICAgKEFEQ19TTVBSMV9SRUdPRkZTRVQgfCAoKDE4VUwpIDw8IEFEQ19DSEFOTkVMX1NNUHhfQklUT0ZGU0VUX1BPUykpIC8qIFZhbHVlIHNoaWZ0ZWQgaXMgZXF1aXZhbGVudCB0byBQT1NJVElPTl9WQUwoQURDX1NNUFIxX1NNUDE2KSAqLworI2RlZmluZSBBRENfQ0hBTk5FTF8xN19TTVAgICAgICAgICAgICAgICAgIChBRENfU01QUjFfUkVHT0ZGU0VUIHwgKCgyMVVMKSA8PCBBRENfQ0hBTk5FTF9TTVB4X0JJVE9GRlNFVF9QT1MpKSAvKiBWYWx1ZSBzaGlmdGVkIGlzIGVxdWl2YWxlbnQgdG8gUE9TSVRJT05fVkFMKEFEQ19TTVBSMV9TTVAxNykgKi8KKyNkZWZpbmUgQURDX0NIQU5ORUxfMThfU01QICAgICAgICAgICAgICAgICAoQURDX1NNUFIxX1JFR09GRlNFVCB8ICgoMjRVTCkgPDwgQURDX0NIQU5ORUxfU01QeF9CSVRPRkZTRVRfUE9TKSkgLyogVmFsdWUgc2hpZnRlZCBpcyBlcXVpdmFsZW50IHRvIFBPU0lUSU9OX1ZBTChBRENfU01QUjFfU01QMTgpICovCiAKIC8qIEludGVybmFsIG1hc2sgZm9yIEFEQyBhbmFsb2cgd2F0Y2hkb2c6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiBUbyBzZWxlY3QgaW50byBsaXRlcmFscyBMTF9BRENfQVdEX0NIQU5ORUx4X3h4eCB0aGUgcmVsZXZhbnQgYml0cyBmb3I6ICAgICAqLwpAQCAtMjM4LDcgKzIzOCw3IEBACiAvKiAgIHNlbGVjdGlvbiBvZiBBREMgZ3JvdXAgKEFEQyBncm91cHMgcmVndWxhciBhbmQtb3IgaW5qZWN0ZWQpLiAgICAgICAgICAgICAqLwogCiAvKiBJbnRlcm5hbCByZWdpc3RlciBvZmZzZXQgZm9yIEFEQyBhbmFsb2cgd2F0Y2hkb2cgY2hhbm5lbCBjb25maWd1cmF0aW9uICovCi0jZGVmaW5lIEFEQ19BV0RfQ1IxX1JFR09GRlNFVCAgICAgICAgICAgICAgMHgwMDAwMDAwMFUKKyNkZWZpbmUgQURDX0FXRF9DUjFfUkVHT0ZGU0VUICAgICAgICAgICAgICAweDAwMDAwMDAwVUwKIAogI2RlZmluZSBBRENfQVdEX0NSWF9SRUdPRkZTRVRfTUFTSyAgICAgICAgIChBRENfQVdEX0NSMV9SRUdPRkZTRVQpCiAKQEAgLTI0NiwyNCArMjQ2LDI0IEBACiAjZGVmaW5lIEFEQ19BV0RfQ1JfQUxMX0NIQU5ORUxfTUFTSyAgICAgICAgKEFEQ19BV0RfQ1IxX0NIQU5ORUxfTUFTSykKIAogLyogSW50ZXJuYWwgcmVnaXN0ZXIgb2Zmc2V0IGZvciBBREMgYW5hbG9nIHdhdGNoZG9nIHRocmVzaG9sZCBjb25maWd1cmF0aW9uICovCi0jZGVmaW5lIEFEQ19BV0RfVFIxX0hJR0hfUkVHT0ZGU0VUICAgICAgICAgMHgwMDAwMDAwMFUKLSNkZWZpbmUgQURDX0FXRF9UUjFfTE9XX1JFR09GRlNFVCAgICAgICAgICAweDAwMDAwMDAxVQorI2RlZmluZSBBRENfQVdEX1RSMV9ISUdIX1JFR09GRlNFVCAgICAgICAgIDB4MDAwMDAwMDBVTAorI2RlZmluZSBBRENfQVdEX1RSMV9MT1dfUkVHT0ZGU0VUICAgICAgICAgIDB4MDAwMDAwMDFVTAogI2RlZmluZSBBRENfQVdEX1RSWF9SRUdPRkZTRVRfTUFTSyAgICAgICAgIChBRENfQVdEX1RSMV9ISUdIX1JFR09GRlNFVCB8IEFEQ19BV0RfVFIxX0xPV19SRUdPRkZTRVQpCiAKIC8qIEFEQyByZWdpc3RlcnMgYml0cyBwb3NpdGlvbnMgKi8KLSNkZWZpbmUgQURDX0NSMV9SRVNfQklUT0ZGU0VUX1BPUyAgICAgICAgICAoMjRVKSAvKiBWYWx1ZSBlcXVpdmFsZW50IHRvIFBPU0lUSU9OX1ZBTChBRENfQ1IxX1JFUykgKi8KLSNkZWZpbmUgQURDX1RSX0hUX0JJVE9GRlNFVF9QT1MgICAgICAgICAgICAoMTZVKSAvKiBWYWx1ZSBlcXVpdmFsZW50IHRvIFBPU0lUSU9OX1ZBTChBRENfVFJfSFQpICovCisjZGVmaW5lIEFEQ19DUjFfUkVTX0JJVE9GRlNFVF9QT1MgICAgICAgICAgKDI0VUwpIC8qIFZhbHVlIGVxdWl2YWxlbnQgdG8gUE9TSVRJT05fVkFMKEFEQ19DUjFfUkVTKSAqLworI2RlZmluZSBBRENfVFJfSFRfQklUT0ZGU0VUX1BPUyAgICAgICAgICAgICgxNlVMKSAvKiBWYWx1ZSBlcXVpdmFsZW50IHRvIFBPU0lUSU9OX1ZBTChBRENfVFJfSFQpICovCiAKIC8qIEFEQyBpbnRlcm5hbCBjaGFubmVscyByZWxhdGVkIGRlZmluaXRpb25zICovCiAvKiBJbnRlcm5hbCB2b2x0YWdlIHJlZmVyZW5jZSBWcmVmSW50ICovCiAjZGVmaW5lIFZSRUZJTlRfQ0FMX0FERFIgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCopICgweDFGRkY3QTJBVSkpIC8qIEludGVybmFsIHZvbHRhZ2UgcmVmZXJlbmNlLCBhZGRyZXNzIG9mIHBhcmFtZXRlciBWUkVGSU5UX0NBTDogVnJlZkludCBBREMgcmF3IGRhdGEgYWNxdWlyZWQgYXQgdGVtcGVyYXR1cmUgMzAgRGVnQyAodG9sZXJhbmNlOiArLTUgRGVnQyksIFZyZWYrID0gMy4zIFYgKHRvbGVyYW5jZTogKy0xMCBtVikuICovCi0jZGVmaW5lIFZSRUZJTlRfQ0FMX1ZSRUYgICAgICAgICAgICAgICAgICAgKCAzMzAwVSkgICAgICAgICAgICAgICAgICAgIC8qIEFuYWxvZyB2b2x0YWdlIHJlZmVyZW5jZSAoVnJlZispIHZhbHVlIHdpdGggd2hpY2ggdGVtcGVyYXR1cmUgc2Vuc29yIGhhcyBiZWVuIGNhbGlicmF0ZWQgaW4gcHJvZHVjdGlvbiAodG9sZXJhbmNlOiArLTEwIG1WKSAodW5pdDogbVYpLiAqLworI2RlZmluZSBWUkVGSU5UX0NBTF9WUkVGICAgICAgICAgICAgICAgICAgICggMzMwMFVMKSAgICAgICAgICAgICAgICAgICAgLyogQW5hbG9nIHZvbHRhZ2UgcmVmZXJlbmNlIChWcmVmKykgdmFsdWUgd2l0aCB3aGljaCB0ZW1wZXJhdHVyZSBzZW5zb3IgaGFzIGJlZW4gY2FsaWJyYXRlZCBpbiBwcm9kdWN0aW9uICh0b2xlcmFuY2U6ICstMTAgbVYpICh1bml0OiBtVikuICovCiAvKiBUZW1wZXJhdHVyZSBzZW5zb3IgKi8KICNkZWZpbmUgVEVNUFNFTlNPUl9DQUwxX0FERFIgICAgICAgICAgICAgICAoKHVpbnQxNl90KikgKDB4MUZGRjdBMkNVKSkgLyogSW50ZXJuYWwgdGVtcGVyYXR1cmUgc2Vuc29yLCBhZGRyZXNzIG9mIHBhcmFtZXRlciBUU19DQUwxOiBPbiBTVE0zMkY0LCB0ZW1wZXJhdHVyZSBzZW5zb3IgQURDIHJhdyBkYXRhIGFjcXVpcmVkIGF0IHRlbXBlcmF0dXJlICAzMCBEZWdDICh0b2xlcmFuY2U6ICstNSBEZWdDKSwgVnJlZisgPSAzLjMgViAodG9sZXJhbmNlOiArLTEwIG1WKS4gKi8KICNkZWZpbmUgVEVNUFNFTlNPUl9DQUwyX0FERFIgICAgICAgICAgICAgICAoKHVpbnQxNl90KikgKDB4MUZGRjdBMkVVKSkgLyogSW50ZXJuYWwgdGVtcGVyYXR1cmUgc2Vuc29yLCBhZGRyZXNzIG9mIHBhcmFtZXRlciBUU19DQUwyOiBPbiBTVE0zMkY0LCB0ZW1wZXJhdHVyZSBzZW5zb3IgQURDIHJhdyBkYXRhIGFjcXVpcmVkIGF0IHRlbXBlcmF0dXJlIDExMCBEZWdDICh0b2xlcmFuY2U6ICstNSBEZWdDKSwgVnJlZisgPSAzLjMgViAodG9sZXJhbmNlOiArLTEwIG1WKS4gKi8KICNkZWZpbmUgVEVNUFNFTlNPUl9DQUwxX1RFTVAgICAgICAgICAgICAgICAoKCBpbnQzMl90KSAgIDMwKSAgICAgICAgICAgLyogSW50ZXJuYWwgdGVtcGVyYXR1cmUgc2Vuc29yLCB0ZW1wZXJhdHVyZSBhdCB3aGljaCB0ZW1wZXJhdHVyZSBzZW5zb3IgaGFzIGJlZW4gY2FsaWJyYXRlZCBpbiBwcm9kdWN0aW9uIGZvciBkYXRhIGludG8gVEVNUFNFTlNPUl9DQUwxX0FERFIgKHRvbGVyYW5jZTogKy01IERlZ0MpICh1bml0OiBEZWdDKS4gKi8KICNkZWZpbmUgVEVNUFNFTlNPUl9DQUwyX1RFTVAgICAgICAgICAgICAgICAoKCBpbnQzMl90KSAgMTEwKSAgICAgICAgICAgLyogSW50ZXJuYWwgdGVtcGVyYXR1cmUgc2Vuc29yLCB0ZW1wZXJhdHVyZSBhdCB3aGljaCB0ZW1wZXJhdHVyZSBzZW5zb3IgaGFzIGJlZW4gY2FsaWJyYXRlZCBpbiBwcm9kdWN0aW9uIGZvciBkYXRhIGludG8gVEVNUFNFTlNPUl9DQUwyX0FERFIgKHRvbGVyYW5jZTogKy01IERlZ0MpICh1bml0OiBEZWdDKS4gKi8KLSNkZWZpbmUgVEVNUFNFTlNPUl9DQUxfVlJFRkFOQUxPRyAgICAgICAgICAoIDMzMDBVKSAgICAgICAgICAgICAgICAgICAgLyogQW5hbG9nIHZvbHRhZ2UgcmVmZXJlbmNlIChWcmVmKykgdm9sdGFnZSB3aXRoIHdoaWNoIHRlbXBlcmF0dXJlIHNlbnNvciBoYXMgYmVlbiBjYWxpYnJhdGVkIGluIHByb2R1Y3Rpb24gKCstMTAgbVYpICh1bml0OiBtVikuICovCisjZGVmaW5lIFRFTVBTRU5TT1JfQ0FMX1ZSRUZBTkFMT0cgICAgICAgICAgKCAzMzAwVUwpICAgICAgICAgICAgICAgICAgICAvKiBBbmFsb2cgdm9sdGFnZSByZWZlcmVuY2UgKFZyZWYrKSB2b2x0YWdlIHdpdGggd2hpY2ggdGVtcGVyYXR1cmUgc2Vuc29yIGhhcyBiZWVuIGNhbGlicmF0ZWQgaW4gcHJvZHVjdGlvbiAoKy0xMCBtVikgKHVuaXQ6IG1WKS4gKi8KIAogLyoqCiAgICogQH0KQEAgLTI5NSw3ICsyOTUsNyBAQAogICAqIEByZXR2YWwgUG9pbnRlciB0byByZWdpc3RlciBhZGRyZXNzCiAgICovCiAjZGVmaW5lIF9fQURDX1BUUl9SRUdfT0ZGU0VUKF9fUkVHX18sIF9fUkVHX09GRkZTRVRfXykgICAgICAgICAgICAgICAgICAgICAgICAgXAotICgoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpICgodWludDMyX3QpKCYoX19SRUdfXykpICsgKChfX1JFR19PRkZGU0VUX18pIDw8IDJVKSkpKQorICgoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpICgodWludDMyX3QpKCYoX19SRUdfXykpICsgKChfX1JFR19PRkZGU0VUX18pIDw8IDJVTCkpKSkKIAogLyoqCiAgICogQH0KQEAgLTQwNiw3ICs0MDYsNyBAQAogewogICB1aW50MzJfdCBUcmlnZ2VyU291cmNlOyAgICAgICAgICAgICAgIC8qITwgU2V0IEFEQyBncm91cCByZWd1bGFyIGNvbnZlcnNpb24gdHJpZ2dlciBzb3VyY2U6IGludGVybmFsIChTVyBzdGFydCkgb3IgZnJvbSBleHRlcm5hbCBJUCAodGltZXIgZXZlbnQsIGV4dGVybmFsIGludGVycnVwdCBsaW5lKS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgQURDX0xMX0VDX1JFR19UUklHR0VSX1NPVVJDRQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQG5vdGUgT24gdGhpcyBTVE0zMiBzZXJpZSwgc2V0dGluZyBvZiBleHRlcm5hbCB0cmlnZ2VyIGVkZ2UgaXMgcGVyZm9ybWVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAbm90ZSBPbiB0aGlzIFNUTTMyIHNlcmllcywgc2V0dGluZyBvZiBleHRlcm5hbCB0cmlnZ2VyIGVkZ2UgaXMgcGVyZm9ybWVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2luZyBmdW5jdGlvbiBAcmVmIExMX0FEQ19SRUdfU3RhcnRDb252ZXJzaW9uRXh0VHJpZygpLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGZlYXR1cmUgY2FuIGJlIG1vZGlmaWVkIGFmdGVyd2FyZHMgdXNpbmcgdW5pdGFyeSBmdW5jdGlvbiBAcmVmIExMX0FEQ19SRUdfU2V0VHJpZ2dlclNvdXJjZSgpLiAqLwpAQCAtNDYwLDcgKzQ2MCw3IEBACiB7CiAgIHVpbnQzMl90IFRyaWdnZXJTb3VyY2U7ICAgICAgICAgICAgICAgLyohPCBTZXQgQURDIGdyb3VwIGluamVjdGVkIGNvbnZlcnNpb24gdHJpZ2dlciBzb3VyY2U6IGludGVybmFsIChTVyBzdGFydCkgb3IgZnJvbSBleHRlcm5hbCBJUCAodGltZXIgZXZlbnQsIGV4dGVybmFsIGludGVycnVwdCBsaW5lKS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgQURDX0xMX0VDX0lOSl9UUklHR0VSX1NPVVJDRQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQG5vdGUgT24gdGhpcyBTVE0zMiBzZXJpZSwgc2V0dGluZyBvZiBleHRlcm5hbCB0cmlnZ2VyIGVkZ2UgaXMgcGVyZm9ybWVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAbm90ZSBPbiB0aGlzIFNUTTMyIHNlcmllcywgc2V0dGluZyBvZiBleHRlcm5hbCB0cmlnZ2VyIGVkZ2UgaXMgcGVyZm9ybWVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2luZyBmdW5jdGlvbiBAcmVmIExMX0FEQ19JTkpfU3RhcnRDb252ZXJzaW9uRXh0VHJpZygpLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGZlYXR1cmUgY2FuIGJlIG1vZGlmaWVkIGFmdGVyd2FyZHMgdXNpbmcgdW5pdGFyeSBmdW5jdGlvbiBAcmVmIExMX0FEQ19JTkpfU2V0VHJpZ2dlclNvdXJjZSgpLiAqLwpAQCAtNTA0LDcgKzUwNCw3IEBACiAjZGVmaW5lIExMX0FEQ19GTEFHX0VPQ1MgICAgICAgICAgICAgICAgICAgQURDX1NSX0VPQyAgICAgICAgIC8qITwgQURDIGZsYWcgQURDIGdyb3VwIHJlZ3VsYXIgZW5kIG9mIHVuaXRhcnkgY29udmVyc2lvbiBvciBzZXF1ZW5jZSBjb252ZXJzaW9ucyAodG8gY29uZmlndXJlIGZsYWcgb2YgZW5kIG9mIGNvbnZlcnNpb24sIHVzZSBmdW5jdGlvbiBAcmVmIExMX0FEQ19SRUdfU2V0RmxhZ0VuZE9mQ29udmVyc2lvbigpICkgKi8KICNkZWZpbmUgTExfQURDX0ZMQUdfT1ZSICAgICAgICAgICAgICAgICAgICBBRENfU1JfT1ZSICAgICAgICAgLyohPCBBREMgZmxhZyBBREMgZ3JvdXAgcmVndWxhciBvdmVycnVuICovCiAjZGVmaW5lIExMX0FEQ19GTEFHX0pTVFJUICAgICAgICAgICAgICAgICAgQURDX1NSX0pTVFJUICAgICAgIC8qITwgQURDIGZsYWcgQURDIGdyb3VwIGluamVjdGVkIGNvbnZlcnNpb24gc3RhcnQgKi8KLSNkZWZpbmUgTExfQURDX0ZMQUdfSkVPUyAgICAgICAgICAgICAgICAgICBBRENfU1JfSkVPQyAgICAgICAgLyohPCBBREMgZmxhZyBBREMgZ3JvdXAgaW5qZWN0ZWQgZW5kIG9mIHNlcXVlbmNlIGNvbnZlcnNpb25zIChOb3RlOiBvbiB0aGlzIFNUTTMyIHNlcmllLCB0aGVyZSBpcyBubyBmbGFnIEFEQyBncm91cCBpbmplY3RlZCBlbmQgb2YgdW5pdGFyeSBjb252ZXJzaW9uLiBGbGFnIG5vdGVkIGFzICJKRU9DIiBpcyBjb3JyZXNwb25kaW5nIHRvIGZsYWcgIkpFT1MiIGluIG90aGVyIFNUTTMyIGZhbWlsaWVzKSAqLworI2RlZmluZSBMTF9BRENfRkxBR19KRU9TICAgICAgICAgICAgICAgICAgIEFEQ19TUl9KRU9DICAgICAgICAvKiE8IEFEQyBmbGFnIEFEQyBncm91cCBpbmplY3RlZCBlbmQgb2Ygc2VxdWVuY2UgY29udmVyc2lvbnMgKE5vdGU6IG9uIHRoaXMgU1RNMzIgc2VyaWVzLCB0aGVyZSBpcyBubyBmbGFnIEFEQyBncm91cCBpbmplY3RlZCBlbmQgb2YgdW5pdGFyeSBjb252ZXJzaW9uLiBGbGFnIG5vdGVkIGFzICJKRU9DIiBpcyBjb3JyZXNwb25kaW5nIHRvIGZsYWcgIkpFT1MiIGluIG90aGVyIFNUTTMyIGZhbWlsaWVzKSAqLwogI2RlZmluZSBMTF9BRENfRkxBR19BV0QxICAgICAgICAgICAgICAgICAgIEFEQ19TUl9BV0QgICAgICAgICAvKiE8IEFEQyBmbGFnIEFEQyBhbmFsb2cgd2F0Y2hkb2cgMSAqLwogI2lmIGRlZmluZWQoQURDX01VTFRJTU9ERV9TVVBQT1JUKQogI2RlZmluZSBMTF9BRENfRkxBR19FT0NTX01TVCAgICAgICAgICAgICAgIEFEQ19DU1JfRU9DMSAgICAgICAvKiE8IEFEQyBmbGFnIEFEQyBtdWx0aW1vZGUgbWFzdGVyIGdyb3VwIHJlZ3VsYXIgZW5kIG9mIHVuaXRhcnkgY29udmVyc2lvbiBvciBzZXF1ZW5jZSBjb252ZXJzaW9ucyAodG8gY29uZmlndXJlIGZsYWcgb2YgZW5kIG9mIGNvbnZlcnNpb24sIHVzZSBmdW5jdGlvbiBAcmVmIExMX0FEQ19SRUdfU2V0RmxhZ0VuZE9mQ29udmVyc2lvbigpICkgKi8KQEAgLTUxMyw5ICs1MTMsOSBAQAogI2RlZmluZSBMTF9BRENfRkxBR19PVlJfTVNUICAgICAgICAgICAgICAgIEFEQ19DU1JfT1ZSMSAgICAvKiE8IEFEQyBmbGFnIEFEQyBtdWx0aW1vZGUgbWFzdGVyIGdyb3VwIHJlZ3VsYXIgb3ZlcnJ1biAqLyAKICNkZWZpbmUgTExfQURDX0ZMQUdfT1ZSX1NMVjEgICAgICAgICAgICAgICBBRENfQ1NSX09WUjIgICAvKiE8IEFEQyBmbGFnIEFEQyBtdWx0aW1vZGUgc2xhdmUgMSBncm91cCByZWd1bGFyIG92ZXJydW4gKi8KICNkZWZpbmUgTExfQURDX0ZMQUdfT1ZSX1NMVjIgICAgICAgICAgICAgICBBRENfQ1NSX09WUjMgICAvKiE8IEFEQyBmbGFnIEFEQyBtdWx0aW1vZGUgc2xhdmUgMiBncm91cCByZWd1bGFyIG92ZXJydW4gKi8KLSNkZWZpbmUgTExfQURDX0ZMQUdfSkVPU19NU1QgICAgICAgICAgICAgICBBRENfQ1NSX0pFT0MxICAgICAvKiE8IEFEQyBmbGFnIEFEQyBtdWx0aW1vZGUgbWFzdGVyIGdyb3VwIGluamVjdGVkIGVuZCBvZiBzZXF1ZW5jZSBjb252ZXJzaW9ucyAoTm90ZTogb24gdGhpcyBTVE0zMiBzZXJpZSwgdGhlcmUgaXMgbm8gZmxhZyBBREMgZ3JvdXAgaW5qZWN0ZWQgZW5kIG9mIHVuaXRhcnkgY29udmVyc2lvbi4gRmxhZyBub3RlZCBhcyAiSkVPQyIgaXMgY29ycmVzcG9uZGluZyB0byBmbGFnICJKRU9TIiBpbiBvdGhlciBTVE0zMiBmYW1pbGllcykgKi8KLSNkZWZpbmUgTExfQURDX0ZMQUdfSkVPU19TTFYxICAgICAgICAgICAgICBBRENfQ1NSX0pFT0MyICAvKiE8IEFEQyBmbGFnIEFEQyBtdWx0aW1vZGUgc2xhdmUgMSBncm91cCBpbmplY3RlZCBlbmQgb2Ygc2VxdWVuY2UgY29udmVyc2lvbnMgKE5vdGU6IG9uIHRoaXMgU1RNMzIgc2VyaWUsIHRoZXJlIGlzIG5vIGZsYWcgQURDIGdyb3VwIGluamVjdGVkIGVuZCBvZiB1bml0YXJ5IGNvbnZlcnNpb24uIEZsYWcgbm90ZWQgYXMgIkpFT0MiIGlzIGNvcnJlc3BvbmRpbmcgdG8gZmxhZyAiSkVPUyIgaW4gb3RoZXIgU1RNMzIgZmFtaWxpZXMpICovCi0jZGVmaW5lIExMX0FEQ19GTEFHX0pFT1NfU0xWMiAgICAgICAgICAgICAgQURDX0NTUl9KRU9DMyAgLyohPCBBREMgZmxhZyBBREMgbXVsdGltb2RlIHNsYXZlIDIgZ3JvdXAgaW5qZWN0ZWQgZW5kIG9mIHNlcXVlbmNlIGNvbnZlcnNpb25zIChOb3RlOiBvbiB0aGlzIFNUTTMyIHNlcmllLCB0aGVyZSBpcyBubyBmbGFnIEFEQyBncm91cCBpbmplY3RlZCBlbmQgb2YgdW5pdGFyeSBjb252ZXJzaW9uLiBGbGFnIG5vdGVkIGFzICJKRU9DIiBpcyBjb3JyZXNwb25kaW5nIHRvIGZsYWcgIkpFT1MiIGluIG90aGVyIFNUTTMyIGZhbWlsaWVzKSAqLworI2RlZmluZSBMTF9BRENfRkxBR19KRU9TX01TVCAgICAgICAgICAgICAgIEFEQ19DU1JfSkVPQzEgICAgIC8qITwgQURDIGZsYWcgQURDIG11bHRpbW9kZSBtYXN0ZXIgZ3JvdXAgaW5qZWN0ZWQgZW5kIG9mIHNlcXVlbmNlIGNvbnZlcnNpb25zIChOb3RlOiBvbiB0aGlzIFNUTTMyIHNlcmllcywgdGhlcmUgaXMgbm8gZmxhZyBBREMgZ3JvdXAgaW5qZWN0ZWQgZW5kIG9mIHVuaXRhcnkgY29udmVyc2lvbi4gRmxhZyBub3RlZCBhcyAiSkVPQyIgaXMgY29ycmVzcG9uZGluZyB0byBmbGFnICJKRU9TIiBpbiBvdGhlciBTVE0zMiBmYW1pbGllcykgKi8KKyNkZWZpbmUgTExfQURDX0ZMQUdfSkVPU19TTFYxICAgICAgICAgICAgICBBRENfQ1NSX0pFT0MyICAvKiE8IEFEQyBmbGFnIEFEQyBtdWx0aW1vZGUgc2xhdmUgMSBncm91cCBpbmplY3RlZCBlbmQgb2Ygc2VxdWVuY2UgY29udmVyc2lvbnMgKE5vdGU6IG9uIHRoaXMgU1RNMzIgc2VyaWVzLCB0aGVyZSBpcyBubyBmbGFnIEFEQyBncm91cCBpbmplY3RlZCBlbmQgb2YgdW5pdGFyeSBjb252ZXJzaW9uLiBGbGFnIG5vdGVkIGFzICJKRU9DIiBpcyBjb3JyZXNwb25kaW5nIHRvIGZsYWcgIkpFT1MiIGluIG90aGVyIFNUTTMyIGZhbWlsaWVzKSAqLworI2RlZmluZSBMTF9BRENfRkxBR19KRU9TX1NMVjIgICAgICAgICAgICAgIEFEQ19DU1JfSkVPQzMgIC8qITwgQURDIGZsYWcgQURDIG11bHRpbW9kZSBzbGF2ZSAyIGdyb3VwIGluamVjdGVkIGVuZCBvZiBzZXF1ZW5jZSBjb252ZXJzaW9ucyAoTm90ZTogb24gdGhpcyBTVE0zMiBzZXJpZXMsIHRoZXJlIGlzIG5vIGZsYWcgQURDIGdyb3VwIGluamVjdGVkIGVuZCBvZiB1bml0YXJ5IGNvbnZlcnNpb24uIEZsYWcgbm90ZWQgYXMgIkpFT0MiIGlzIGNvcnJlc3BvbmRpbmcgdG8gZmxhZyAiSkVPUyIgaW4gb3RoZXIgU1RNMzIgZmFtaWxpZXMpICovCiAjZGVmaW5lIExMX0FEQ19GTEFHX0FXRDFfTVNUICAgICAgICAgICAgICAgQURDX0NTUl9BV0QxICAgICAgIC8qITwgQURDIGZsYWcgQURDIG11bHRpbW9kZSBtYXN0ZXIgYW5hbG9nIHdhdGNoZG9nIDEgb2YgdGhlIEFEQyBtYXN0ZXIgKi8KICNkZWZpbmUgTExfQURDX0ZMQUdfQVdEMV9TTFYxICAgICAgICAgICAgICBBRENfQ1NSX0FXRDIgICAgICAgLyohPCBBREMgZmxhZyBBREMgbXVsdGltb2RlIHNsYXZlIDEgYW5hbG9nIHdhdGNoZG9nIDEgKi8KICNkZWZpbmUgTExfQURDX0ZMQUdfQVdEMV9TTFYyICAgICAgICAgICAgICBBRENfQ1NSX0FXRDMgICAgICAgLyohPCBBREMgZmxhZyBBREMgbXVsdGltb2RlIHNsYXZlIDIgYW5hbG9nIHdhdGNoZG9nIDEgKi8KQEAgLTUzMCw3ICs1MzAsNyBAQAogICAqLwogI2RlZmluZSBMTF9BRENfSVRfRU9DUyAgICAgICAgICAgICAgICAgICAgIEFEQ19DUjFfRU9DSUUgICAgICAvKiE8IEFEQyBpbnRlcnJ1cHRpb24gQURDIGdyb3VwIHJlZ3VsYXIgZW5kIG9mIHVuaXRhcnkgY29udmVyc2lvbiBvciBzZXF1ZW5jZSBjb252ZXJzaW9ucyAodG8gY29uZmlndXJlIGZsYWcgb2YgZW5kIG9mIGNvbnZlcnNpb24sIHVzZSBmdW5jdGlvbiBAcmVmIExMX0FEQ19SRUdfU2V0RmxhZ0VuZE9mQ29udmVyc2lvbigpICkgKi8KICNkZWZpbmUgTExfQURDX0lUX09WUiAgICAgICAgICAgICAgICAgICAgICBBRENfQ1IxX09WUklFICAgICAgLyohPCBBREMgaW50ZXJydXB0aW9uIEFEQyBncm91cCByZWd1bGFyIG92ZXJydW4gKi8KLSNkZWZpbmUgTExfQURDX0lUX0pFT1MgICAgICAgICAgICAgICAgICAgICBBRENfQ1IxX0pFT0NJRSAgICAgLyohPCBBREMgaW50ZXJydXB0aW9uIEFEQyBncm91cCBpbmplY3RlZCBlbmQgb2Ygc2VxdWVuY2UgY29udmVyc2lvbnMgKE5vdGU6IG9uIHRoaXMgU1RNMzIgc2VyaWUsIHRoZXJlIGlzIG5vIGZsYWcgQURDIGdyb3VwIGluamVjdGVkIGVuZCBvZiB1bml0YXJ5IGNvbnZlcnNpb24uIEZsYWcgbm90ZWQgYXMgIkpFT0MiIGlzIGNvcnJlc3BvbmRpbmcgdG8gZmxhZyAiSkVPUyIgaW4gb3RoZXIgU1RNMzIgZmFtaWxpZXMpICovCisjZGVmaW5lIExMX0FEQ19JVF9KRU9TICAgICAgICAgICAgICAgICAgICAgQURDX0NSMV9KRU9DSUUgICAgIC8qITwgQURDIGludGVycnVwdGlvbiBBREMgZ3JvdXAgaW5qZWN0ZWQgZW5kIG9mIHNlcXVlbmNlIGNvbnZlcnNpb25zIChOb3RlOiBvbiB0aGlzIFNUTTMyIHNlcmllcywgdGhlcmUgaXMgbm8gZmxhZyBBREMgZ3JvdXAgaW5qZWN0ZWQgZW5kIG9mIHVuaXRhcnkgY29udmVyc2lvbi4gRmxhZyBub3RlZCBhcyAiSkVPQyIgaXMgY29ycmVzcG9uZGluZyB0byBmbGFnICJKRU9TIiBpbiBvdGhlciBTVE0zMiBmYW1pbGllcykgKi8KICNkZWZpbmUgTExfQURDX0lUX0FXRDEgICAgICAgICAgICAgICAgICAgICBBRENfQ1IxX0FXRElFICAgICAgLyohPCBBREMgaW50ZXJydXB0aW9uIEFEQyBhbmFsb2cgd2F0Y2hkb2cgMSAqLwogLyoqCiAgICogQH0KQEAgLTU0Miw5ICs1NDIsOSBAQAogLyogTGlzdCBvZiBBREMgcmVnaXN0ZXJzIGludGVuZGVkIHRvIGJlIHVzZWQgKG1vc3QgY29tbW9ubHkpIHdpdGggICAgICAgICAgICAgKi8KIC8qIERNQSB0cmFuc2Zlci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiBSZWZlciB0byBmdW5jdGlvbiBAcmVmIExMX0FEQ19ETUFfR2V0UmVnQWRkcigpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBMTF9BRENfRE1BX1JFR19SRUdVTEFSX0RBVEEgICAgICAgICAgMHgwMDAwMDAwMFUgICAvKiBBREMgZ3JvdXAgcmVndWxhciBjb252ZXJzaW9uIGRhdGEgcmVnaXN0ZXIgKGNvcnJlc3BvbmRpbmcgdG8gcmVnaXN0ZXIgRFIpIHRvIGJlIHVzZWQgd2l0aCBBREMgY29uZmlndXJlZCBpbiBpbmRlcGVuZGVudCBtb2RlLiBXaXRob3V0IERNQSB0cmFuc2ZlciwgcmVnaXN0ZXIgYWNjZXNzZWQgYnkgTEwgZnVuY3Rpb24gQHJlZiBMTF9BRENfUkVHX1JlYWRDb252ZXJzaW9uRGF0YTMyKCkgYW5kIG90aGVyIGZ1bmN0aW9ucyBAcmVmIExMX0FEQ19SRUdfUmVhZENvbnZlcnNpb25EYXRheCgpICovCisjZGVmaW5lIExMX0FEQ19ETUFfUkVHX1JFR1VMQVJfREFUQSAgICAgICAgICAweDAwMDAwMDAwVUwgICAvKiBBREMgZ3JvdXAgcmVndWxhciBjb252ZXJzaW9uIGRhdGEgcmVnaXN0ZXIgKGNvcnJlc3BvbmRpbmcgdG8gcmVnaXN0ZXIgRFIpIHRvIGJlIHVzZWQgd2l0aCBBREMgY29uZmlndXJlZCBpbiBpbmRlcGVuZGVudCBtb2RlLiBXaXRob3V0IERNQSB0cmFuc2ZlciwgcmVnaXN0ZXIgYWNjZXNzZWQgYnkgTEwgZnVuY3Rpb24gQHJlZiBMTF9BRENfUkVHX1JlYWRDb252ZXJzaW9uRGF0YTMyKCkgYW5kIG90aGVyIGZ1bmN0aW9ucyBAcmVmIExMX0FEQ19SRUdfUmVhZENvbnZlcnNpb25EYXRheCgpICovCiAjaWYgZGVmaW5lZChBRENfTVVMVElNT0RFX1NVUFBPUlQpCi0jZGVmaW5lIExMX0FEQ19ETUFfUkVHX1JFR1VMQVJfREFUQV9NVUxUSSAgICAweDAwMDAwMDAxVSAgIC8qIEFEQyBncm91cCByZWd1bGFyIGNvbnZlcnNpb24gZGF0YSByZWdpc3RlciAoY29ycmVzcG9uZGluZyB0byByZWdpc3RlciBDRFIpIHRvIGJlIHVzZWQgd2l0aCBBREMgY29uZmlndXJlZCBpbiBtdWx0aW1vZGUgKGF2YWlsYWJsZSBvbiBTVE0zMiBkZXZpY2VzIHdpdGggc2V2ZXJhbCBBREMgaW5zdGFuY2VzKS4gV2l0aG91dCBETUEgdHJhbnNmZXIsIHJlZ2lzdGVyIGFjY2Vzc2VkIGJ5IExMIGZ1bmN0aW9uIEByZWYgTExfQURDX1JFR19SZWFkTXVsdGlDb252ZXJzaW9uRGF0YTMyKCkgKi8KKyNkZWZpbmUgTExfQURDX0RNQV9SRUdfUkVHVUxBUl9EQVRBX01VTFRJICAgIDB4MDAwMDAwMDFVTCAgIC8qIEFEQyBncm91cCByZWd1bGFyIGNvbnZlcnNpb24gZGF0YSByZWdpc3RlciAoY29ycmVzcG9uZGluZyB0byByZWdpc3RlciBDRFIpIHRvIGJlIHVzZWQgd2l0aCBBREMgY29uZmlndXJlZCBpbiBtdWx0aW1vZGUgKGF2YWlsYWJsZSBvbiBTVE0zMiBkZXZpY2VzIHdpdGggc2V2ZXJhbCBBREMgaW5zdGFuY2VzKS4gV2l0aG91dCBETUEgdHJhbnNmZXIsIHJlZ2lzdGVyIGFjY2Vzc2VkIGJ5IExMIGZ1bmN0aW9uIEByZWYgTExfQURDX1JFR19SZWFkTXVsdGlDb252ZXJzaW9uRGF0YTMyKCkgKi8KICNlbmRpZgogLyoqCiAgICogQH0KQEAgLTU1Myw3ICs1NTMsNyBAQAogLyoqIEBkZWZncm91cCBBRENfTExfRUNfQ09NTU9OX0NMT0NLX1NPVVJDRSAgQURDIGNvbW1vbiAtIENsb2NrIHNvdXJjZQogICAqIEB7CiAgICovCi0jZGVmaW5lIExMX0FEQ19DTE9DS19TWU5DX1BDTEtfRElWMiAgICAgICAgMHgwMDAwMDAwMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBREMgc3luY2hyb25vdXMgY2xvY2sgZGVyaXZlZCBmcm9tIEFIQiBjbG9jayB3aXRoIHByZXNjYWxlciBkaXZpc2lvbiBieSAyICovCisjZGVmaW5lIExMX0FEQ19DTE9DS19TWU5DX1BDTEtfRElWMiAgICAgICAgMHgwMDAwMDAwMFVMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQURDIHN5bmNocm9ub3VzIGNsb2NrIGRlcml2ZWQgZnJvbSBBSEIgY2xvY2sgd2l0aCBwcmVzY2FsZXIgZGl2aXNpb24gYnkgMiAqLwogI2RlZmluZSBMTF9BRENfQ0xPQ0tfU1lOQ19QQ0xLX0RJVjQgICAgICAgICggICAgICAgICAgICAgICAgICAgQURDX0NDUl9BRENQUkVfMCkgICAgICAgICAgICAgICAgIC8qITwgQURDIHN5bmNocm9ub3VzIGNsb2NrIGRlcml2ZWQgZnJvbSBBSEIgY2xvY2sgd2l0aCBwcmVzY2FsZXIgZGl2aXNpb24gYnkgNCAqLwogI2RlZmluZSBMTF9BRENfQ0xPQ0tfU1lOQ19QQ0xLX0RJVjYgICAgICAgIChBRENfQ0NSX0FEQ1BSRV8xICAgICAgICAgICAgICAgICAgICkgICAgICAgICAgICAgICAgIC8qITwgQURDIHN5bmNocm9ub3VzIGNsb2NrIGRlcml2ZWQgZnJvbSBBSEIgY2xvY2sgd2l0aCBwcmVzY2FsZXIgZGl2aXNpb24gYnkgNiAqLwogI2RlZmluZSBMTF9BRENfQ0xPQ0tfU1lOQ19QQ0xLX0RJVjggICAgICAgIChBRENfQ0NSX0FEQ1BSRV8xIHwgQURDX0NDUl9BRENQUkVfMCkgICAgICAgICAgICAgICAgIC8qITwgQURDIHN5bmNocm9ub3VzIGNsb2NrIGRlcml2ZWQgZnJvbSBBSEIgY2xvY2sgd2l0aCBwcmVzY2FsZXIgZGl2aXNpb24gYnkgOCAqLwpAQCAtNTY5LDcgKzU2OSw3IEBACiAvKiAgICAgICBJZiB0aGV5IGFyZSBub3QgbGlzdGVkIGJlbG93LCB0aGV5IGRvIG5vdCByZXF1aXJlIGFueSBzcGVjaWZpYyAgICAgICAqLwogLyogICAgICAgcGF0aCBlbmFibGUuIEluIHRoaXMgY2FzZSwgQWNjZXNzIHRvIG1lYXN1cmVtZW50IHBhdGggaXMgZG9uZSAgICAgICAgKi8KIC8qICAgICAgIG9ubHkgYnkgc2VsZWN0aW5nIHRoZSBjb3JyZXNwb25kaW5nIEFEQyBpbnRlcm5hbCBjaGFubmVsLiAgICAgICAgICAgICovCi0jZGVmaW5lIExMX0FEQ19QQVRIX0lOVEVSTkFMX05PTkUgICAgICAgICAgMHgwMDAwMDAwMFUgICAgICAgICAgICAvKiE8IEFEQyBtZWFzdXJlbWVudCBwYXRoZXMgYWxsIGRpc2FibGVkICovCisjZGVmaW5lIExMX0FEQ19QQVRIX0lOVEVSTkFMX05PTkUgICAgICAgICAgMHgwMDAwMDAwMFVMICAgICAgICAgICAgLyohPCBBREMgbWVhc3VyZW1lbnQgcGF0aHMgYWxsIGRpc2FibGVkICovCiAjZGVmaW5lIExMX0FEQ19QQVRIX0lOVEVSTkFMX1ZSRUZJTlQgICAgICAgKEFEQ19DQ1JfVFNWUkVGRSkgICAgICAvKiE8IEFEQyBtZWFzdXJlbWVudCBwYXRoIHRvIGludGVybmFsIGNoYW5uZWwgVnJlZkludCAqLwogI2RlZmluZSBMTF9BRENfUEFUSF9JTlRFUk5BTF9URU1QU0VOU09SICAgIChBRENfQ0NSX1RTVlJFRkUpICAgICAgLyohPCBBREMgbWVhc3VyZW1lbnQgcGF0aCB0byBpbnRlcm5hbCBjaGFubmVsIHRlbXBlcmF0dXJlIHNlbnNvciAqLwogI2RlZmluZSBMTF9BRENfUEFUSF9JTlRFUk5BTF9WQkFUICAgICAgICAgIChBRENfQ0NSX1ZCQVRFKSAgICAgICAgLyohPCBBREMgbWVhc3VyZW1lbnQgcGF0aCB0byBpbnRlcm5hbCBjaGFubmVsIFZiYXQgKi8KQEAgLTU4MCw3ICs1ODAsNyBAQAogLyoqIEBkZWZncm91cCBBRENfTExfRUNfUkVTT0xVVElPTiAgQURDIGluc3RhbmNlIC0gUmVzb2x1dGlvbgogICAqIEB7CiAgICovCi0jZGVmaW5lIExMX0FEQ19SRVNPTFVUSU9OXzEyQiAgICAgICAgICAgICAgMHgwMDAwMDAwMFUgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBREMgcmVzb2x1dGlvbiAxMiBiaXRzICovCisjZGVmaW5lIExMX0FEQ19SRVNPTFVUSU9OXzEyQiAgICAgICAgICAgICAgMHgwMDAwMDAwMFVMICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQURDIHJlc29sdXRpb24gMTIgYml0cyAqLwogI2RlZmluZSBMTF9BRENfUkVTT0xVVElPTl8xMEIgICAgICAgICAgICAgICggICAgICAgICAgICAgICAgQURDX0NSMV9SRVNfMCkgICAgIC8qITwgQURDIHJlc29sdXRpb24gMTAgYml0cyAqLwogI2RlZmluZSBMTF9BRENfUkVTT0xVVElPTl84QiAgICAgICAgICAgICAgIChBRENfQ1IxX1JFU18xICAgICAgICAgICAgICAgICkgICAgIC8qITwgQURDIHJlc29sdXRpb24gIDggYml0cyAqLwogI2RlZmluZSBMTF9BRENfUkVTT0xVVElPTl82QiAgICAgICAgICAgICAgIChBRENfQ1IxX1JFU18xIHwgQURDX0NSMV9SRVNfMCkgICAgIC8qITwgQURDIHJlc29sdXRpb24gIDYgYml0cyAqLwpAQCAtNTkxLDggKzU5MSw4IEBACiAvKiogQGRlZmdyb3VwIEFEQ19MTF9FQ19EQVRBX0FMSUdOICBBREMgaW5zdGFuY2UgLSBEYXRhIGFsaWdubWVudAogICAqIEB7CiAgICovCi0jZGVmaW5lIExMX0FEQ19EQVRBX0FMSUdOX1JJR0hUICAgICAgICAgICAgMHgwMDAwMDAwMFUgICAgICAgICAgICAvKiE8IEFEQyBjb252ZXJzaW9uIGRhdGEgYWxpZ25tZW50OiByaWdodCBhbGlnbmVkIChhbGlnbm1lbnQgb24gZGF0YSByZWdpc3RlciBMU0IgYml0IDApKi8KLSNkZWZpbmUgTExfQURDX0RBVEFfQUxJR05fTEVGVCAgICAgICAgICAgICAoQURDX0NSMl9BTElHTikgICAgICAgIC8qITwgQURDIGNvbnZlcnNpb24gZGF0YSBhbGlnbm1lbnQ6IGxlZnQgYWxpZ25lZCAoYWxpZ21lbnQgb24gZGF0YSByZWdpc3RlciBNU0IgYml0IDE1KSovCisjZGVmaW5lIExMX0FEQ19EQVRBX0FMSUdOX1JJR0hUICAgICAgICAgICAgMHgwMDAwMDAwMFVMICAgICAgICAgICAgLyohPCBBREMgY29udmVyc2lvbiBkYXRhIGFsaWdubWVudDogcmlnaHQgYWxpZ25lZCAoYWxpZ25tZW50IG9uIGRhdGEgcmVnaXN0ZXIgTFNCIGJpdCAwKSovCisjZGVmaW5lIExMX0FEQ19EQVRBX0FMSUdOX0xFRlQgICAgICAgICAgICAgKEFEQ19DUjJfQUxJR04pICAgICAgICAvKiE8IEFEQyBjb252ZXJzaW9uIGRhdGEgYWxpZ25tZW50OiBsZWZ0IGFsaWduZWQgKGFsaWdubWVudCBvbiBkYXRhIHJlZ2lzdGVyIE1TQiBiaXQgMTUpKi8KIC8qKgogICAqIEB9CiAgICovCkBAIC02MDAsNyArNjAwLDcgQEAKIC8qKiBAZGVmZ3JvdXAgQURDX0xMX0VDX1NDQU5fU0VMRUNUSU9OIEFEQyBpbnN0YW5jZSAtIFNjYW4gc2VsZWN0aW9uCiAgICogQHsKICAgKi8KLSNkZWZpbmUgTExfQURDX1NFUV9TQ0FOX0RJU0FCTEUgICAgICAgICAgICAweDAwMDAwMDAwVSAgICAvKiE8IEFEQyBjb252ZXJzaW9uIGlzIHBlcmZvcm1lZCBpbiB1bml0YXJ5IGNvbnZlcnNpb24gbW9kZSAob25lIGNoYW5uZWwgY29udmVydGVkLCB0aGF0IGRlZmluZWQgaW4gcmFuayAxKS4gQ29uZmlndXJhdGlvbiBvZiBib3RoIGdyb3VwcyByZWd1bGFyIGFuZCBpbmplY3RlZCBzZXF1ZW5jZXJzIChzZXF1ZW5jZSBsZW5ndGgsIC4uLikgaXMgZGlzY2FyZGVkOiBlcXVpdmFsZW50IHRvIGxlbmd0aCBvZiAxIHJhbmsuKi8KKyNkZWZpbmUgTExfQURDX1NFUV9TQ0FOX0RJU0FCTEUgICAgICAgICAgICAweDAwMDAwMDAwVUwgICAgLyohPCBBREMgY29udmVyc2lvbiBpcyBwZXJmb3JtZWQgaW4gdW5pdGFyeSBjb252ZXJzaW9uIG1vZGUgKG9uZSBjaGFubmVsIGNvbnZlcnRlZCwgdGhhdCBkZWZpbmVkIGluIHJhbmsgMSkuIENvbmZpZ3VyYXRpb24gb2YgYm90aCBncm91cHMgcmVndWxhciBhbmQgaW5qZWN0ZWQgc2VxdWVuY2VycyAoc2VxdWVuY2UgbGVuZ3RoLCAuLi4pIGlzIGRpc2NhcmRlZDogZXF1aXZhbGVudCB0byBsZW5ndGggb2YgMSByYW5rLiovCiAjZGVmaW5lIExMX0FEQ19TRVFfU0NBTl9FTkFCTEUgICAgICAgICAgICAgKEFEQ19DUjFfU0NBTikgLyohPCBBREMgY29udmVyc2lvbnMgYXJlIHBlcmZvcm1lZCBpbiBzZXF1ZW5jZSBjb252ZXJzaW9ucyBtb2RlLCBhY2NvcmRpbmcgdG8gY29uZmlndXJhdGlvbiBvZiBib3RoIGdyb3VwcyByZWd1bGFyIGFuZCBpbmplY3RlZCBzZXF1ZW5jZXJzIChzZXF1ZW5jZSBsZW5ndGgsIC4uLikuICovCiAvKioKICAgKiBAfQpAQCAtNjA5LDkgKzYwOSw5IEBACiAvKiogQGRlZmdyb3VwIEFEQ19MTF9FQ19HUk9VUFMgIEFEQyBpbnN0YW5jZSAtIEdyb3VwcwogICAqIEB7CiAgICovCi0jZGVmaW5lIExMX0FEQ19HUk9VUF9SRUdVTEFSICAgICAgICAgICAgICAgMHgwMDAwMDAwMVUgICAvKiE8IEFEQyBncm91cCByZWd1bGFyIChhdmFpbGFibGUgb24gYWxsIFNUTTMyIGRldmljZXMpICovCi0jZGVmaW5lIExMX0FEQ19HUk9VUF9JTkpFQ1RFRCAgICAgICAgICAgICAgMHgwMDAwMDAwMlUgICAvKiE8IEFEQyBncm91cCBpbmplY3RlZCAobm90IGF2YWlsYWJsZSBvbiBhbGwgU1RNMzIgZGV2aWNlcykqLwotI2RlZmluZSBMTF9BRENfR1JPVVBfUkVHVUxBUl9JTkpFQ1RFRCAgICAgIDB4MDAwMDAwMDNVICAgLyohPCBBREMgYm90aCBncm91cHMgcmVndWxhciBhbmQgaW5qZWN0ZWQgKi8KKyNkZWZpbmUgTExfQURDX0dST1VQX1JFR1VMQVIgICAgICAgICAgICAgICAweDAwMDAwMDAxVUwgICAvKiE8IEFEQyBncm91cCByZWd1bGFyIChhdmFpbGFibGUgb24gYWxsIFNUTTMyIGRldmljZXMpICovCisjZGVmaW5lIExMX0FEQ19HUk9VUF9JTkpFQ1RFRCAgICAgICAgICAgICAgMHgwMDAwMDAwMlVMICAgLyohPCBBREMgZ3JvdXAgaW5qZWN0ZWQgKG5vdCBhdmFpbGFibGUgb24gYWxsIFNUTTMyIGRldmljZXMpKi8KKyNkZWZpbmUgTExfQURDX0dST1VQX1JFR1VMQVJfSU5KRUNURUQgICAgICAweDAwMDAwMDAzVUwgICAvKiE8IEFEQyBib3RoIGdyb3VwcyByZWd1bGFyIGFuZCBpbmplY3RlZCAqLwogLyoqCiAgICogQH0KICAgKi8KQEAgLTY1Myw3ICs2NTMsNyBAQAogLyoqIEBkZWZncm91cCBBRENfTExfRUNfUkVHX1RSSUdHRVJfU09VUkNFICBBREMgZ3JvdXAgcmVndWxhciAtIFRyaWdnZXIgc291cmNlCiAgICogQHsKICAgKi8KLSNkZWZpbmUgTExfQURDX1JFR19UUklHX1NPRlRXQVJFICAgICAgICAgICAweDAwMDAwMDAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFEQyBncm91cCByZWd1bGFyIGNvbnZlcnNpb24gdHJpZ2dlciBpbnRlcm5hbDogU1cgc3RhcnQuICovCisjZGVmaW5lIExMX0FEQ19SRUdfVFJJR19TT0ZUV0FSRSAgICAgICAgICAgMHgwMDAwMDAwMFVMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQURDIGdyb3VwIHJlZ3VsYXIgY29udmVyc2lvbiB0cmlnZ2VyIGludGVybmFsOiBTVyBzdGFydC4gKi8KICNkZWZpbmUgTExfQURDX1JFR19UUklHX0VYVF9USU0xX0NIMSAgICAgICAoQURDX1JFR19UUklHX0VYVF9FREdFX0RFRkFVTFQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFEQyBncm91cCByZWd1bGFyIGNvbnZlcnNpb24gdHJpZ2dlciBmcm9tIGV4dGVybmFsIElQOiBUSU0xIGNoYW5uZWwgMSBldmVudCAoY2FwdHVyZSBjb21wYXJlOiBpbnB1dCBjYXB0dXJlIG9yIG91dHB1dCBjYXB0dXJlKS4gVHJpZ2dlciBlZGdlIHNldCB0byByaXNpbmcgZWRnZSAoZGVmYXVsdCBzZXR0aW5nKS4gKi8KICNkZWZpbmUgTExfQURDX1JFR19UUklHX0VYVF9USU0xX0NIMiAgICAgICAoQURDX0NSMl9FWFRTRUxfMCB8IEFEQ19SRUdfVFJJR19FWFRfRURHRV9ERUZBVUxUKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFEQyBncm91cCByZWd1bGFyIGNvbnZlcnNpb24gdHJpZ2dlciBmcm9tIGV4dGVybmFsIElQOiBUSU0xIGNoYW5uZWwgMiBldmVudCAoY2FwdHVyZSBjb21wYXJlOiBpbnB1dCBjYXB0dXJlIG9yIG91dHB1dCBjYXB0dXJlKS4gVHJpZ2dlciBlZGdlIHNldCB0byByaXNpbmcgZWRnZSAoZGVmYXVsdCBzZXR0aW5nKS4gKi8KICNkZWZpbmUgTExfQURDX1JFR19UUklHX0VYVF9USU0xX0NIMyAgICAgICAoQURDX0NSMl9FWFRTRUxfMSB8IEFEQ19SRUdfVFJJR19FWFRfRURHRV9ERUZBVUxUKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFEQyBncm91cCByZWd1bGFyIGNvbnZlcnNpb24gdHJpZ2dlciBmcm9tIGV4dGVybmFsIElQOiBUSU0xIGNoYW5uZWwgMyBldmVudCAoY2FwdHVyZSBjb21wYXJlOiBpbnB1dCBjYXB0dXJlIG9yIG91dHB1dCBjYXB0dXJlKS4gVHJpZ2dlciBlZGdlIHNldCB0byByaXNpbmcgZWRnZSAoZGVmYXVsdCBzZXR0aW5nKS4gKi8KQEAgLTY4Nyw3ICs2ODcsNyBAQAogLyoqIEBkZWZncm91cCBBRENfTExfRUNfUkVHX0NPTlRJTlVPVVNfTU9ERSAgQURDIGdyb3VwIHJlZ3VsYXIgLSBDb250aW51b3VzIG1vZGUKICogQHsKICovCi0jZGVmaW5lIExMX0FEQ19SRUdfQ09OVl9TSU5HTEUgICAgICAgICAgICAgMHgwMDAwMDAwMFUgICAgICAgICAgICAgLyohPCBBREMgY29udmVyc2lvbnMgYXJlIHBlcmZvcm1lZCBpbiBzaW5nbGUgbW9kZTogb25lIGNvbnZlcnNpb24gcGVyIHRyaWdnZXIgKi8KKyNkZWZpbmUgTExfQURDX1JFR19DT05WX1NJTkdMRSAgICAgICAgICAgICAweDAwMDAwMDAwVUwgICAgICAgICAgICAgLyohPCBBREMgY29udmVyc2lvbnMgYXJlIHBlcmZvcm1lZCBpbiBzaW5nbGUgbW9kZTogb25lIGNvbnZlcnNpb24gcGVyIHRyaWdnZXIgKi8KICNkZWZpbmUgTExfQURDX1JFR19DT05WX0NPTlRJTlVPVVMgICAgICAgICAoQURDX0NSMl9DT05UKSAgICAgICAgICAvKiE8IEFEQyBjb252ZXJzaW9ucyBhcmUgcGVyZm9ybWVkIGluIGNvbnRpbnVvdXMgbW9kZTogYWZ0ZXIgdGhlIGZpcnN0IHRyaWdnZXIsIGZvbGxvd2luZyBjb252ZXJzaW9ucyBsYXVuY2hlZCBzdWNjZXNzaXZlbHkgYXV0b21hdGljYWxseSAqLwogLyoqCiAgICogQH0KQEAgLTY5Niw3ICs2OTYsNyBAQAogLyoqIEBkZWZncm91cCBBRENfTExfRUNfUkVHX0RNQV9UUkFOU0ZFUiAgQURDIGdyb3VwIHJlZ3VsYXIgLSBETUEgdHJhbnNmZXIgb2YgQURDIGNvbnZlcnNpb24gZGF0YQogICAqIEB7CiAgICovCi0jZGVmaW5lIExMX0FEQ19SRUdfRE1BX1RSQU5TRkVSX05PTkUgICAgICAgMHgwMDAwMDAwMFUgICAgICAgICAgICAgIC8qITwgQURDIGNvbnZlcnNpb25zIGFyZSBub3QgdHJhbnNmZXJyZWQgYnkgRE1BICovCisjZGVmaW5lIExMX0FEQ19SRUdfRE1BX1RSQU5TRkVSX05PTkUgICAgICAgMHgwMDAwMDAwMFVMICAgICAgICAgICAgICAvKiE8IEFEQyBjb252ZXJzaW9ucyBhcmUgbm90IHRyYW5zZmVycmVkIGJ5IERNQSAqLwogI2RlZmluZSBMTF9BRENfUkVHX0RNQV9UUkFOU0ZFUl9MSU1JVEVEICAgICggICAgICAgICAgICAgIEFEQ19DUjJfRE1BKSAgICAgICAgICAvKiE8IEFEQyBjb252ZXJzaW9uIGRhdGEgYXJlIHRyYW5zZmVycmVkIGJ5IERNQSwgaW4gbGltaXRlZCBtb2RlIChvbmUgc2hvdCBtb2RlKTogRE1BIHRyYW5zZmVyIHJlcXVlc3RzIGFyZSBzdG9wcGVkIHdoZW4gbnVtYmVyIG9mIERNQSBkYXRhIHRyYW5zZmVycyAobnVtYmVyIG9mIEFEQyBjb252ZXJzaW9ucykgaXMgcmVhY2hlZC4gVGhpcyBBREMgbW9kZSBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIHdpdGggRE1BIG1vZGUgbm9uLWNpcmN1bGFyLiAqLwogI2RlZmluZSBMTF9BRENfUkVHX0RNQV9UUkFOU0ZFUl9VTkxJTUlURUQgIChBRENfQ1IyX0REUyB8IEFEQ19DUjJfRE1BKSAgICAgICAgICAvKiE8IEFEQyBjb252ZXJzaW9uIGRhdGEgYXJlIHRyYW5zZmVycmVkIGJ5IERNQSwgaW4gdW5saW1pdGVkIG1vZGU6IERNQSB0cmFuc2ZlciByZXF1ZXN0cyBhcmUgdW5saW1pdGVkLCB3aGF0ZXZlciBudW1iZXIgb2YgRE1BIGRhdGEgdHJhbnNmZXJyZWQgKG51bWJlciBvZiBBREMgY29udmVyc2lvbnMpLiBUaGlzIEFEQyBtb2RlIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgd2l0aCBETUEgbW9kZSBjaXJjdWxhci4gKi8KIC8qKgpAQCAtNzA2LDcgKzcwNiw3IEBACiAvKiogQGRlZmdyb3VwIEFEQ19MTF9FQ19SRUdfRkxBR19FT0NfU0VMRUNUSU9OIEFEQyBncm91cCByZWd1bGFyIC0gRmxhZyBFT0Mgc2VsZWN0aW9uICh1bml0YXJ5IG9yIHNlcXVlbmNlIGNvbnZlcnNpb25zKQogICAqIEB7CiAgICovCi0jZGVmaW5lIExMX0FEQ19SRUdfRkxBR19FT0NfU0VRVUVOQ0VfQ09OViAgICAgICAweDAwMDAwMDAwVSAgICAvKiE8IEFEQyBmbGFnIEVPQyAoZW5kIG9mIHVuaXRhcnkgY29udmVyc2lvbikgc2VsZWN0ZWQgKi8KKyNkZWZpbmUgTExfQURDX1JFR19GTEFHX0VPQ19TRVFVRU5DRV9DT05WICAgICAgIDB4MDAwMDAwMDBVTCAgICAvKiE8IEFEQyBmbGFnIEVPQyAoZW5kIG9mIHVuaXRhcnkgY29udmVyc2lvbikgc2VsZWN0ZWQgKi8KICNkZWZpbmUgTExfQURDX1JFR19GTEFHX0VPQ19VTklUQVJZX0NPTlYgICAgICAgIChBRENfQ1IyX0VPQ1MpIC8qITwgQURDIGZsYWcgRU9TIChlbmQgb2Ygc2VxdWVuY2UgY29udmVyc2lvbnMpIHNlbGVjdGVkICovCiAvKioKICAgKiBAfQpAQCAtNzE1LDcgKzcxNSw3IEBACiAvKiogQGRlZmdyb3VwIEFEQ19MTF9FQ19SRUdfU0VRX1NDQU5fTEVOR1RIICBBREMgZ3JvdXAgcmVndWxhciAtIFNlcXVlbmNlciBzY2FuIGxlbmd0aAogICAqIEB7CiAgICovCi0jZGVmaW5lIExMX0FEQ19SRUdfU0VRX1NDQU5fRElTQUJMRSAgICAgICAgMHgwMDAwMDAwMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBREMgZ3JvdXAgcmVndWxhciBzZXF1ZW5jZXIgZGlzYWJsZSAoZXF1aXZhbGVudCB0byBzZXF1ZW5jZXIgb2YgMSByYW5rOiBBREMgY29udmVyc2lvbiBvbiBvbmx5IDEgY2hhbm5lbCkgKi8KKyNkZWZpbmUgTExfQURDX1JFR19TRVFfU0NBTl9ESVNBQkxFICAgICAgICAweDAwMDAwMDAwVUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBREMgZ3JvdXAgcmVndWxhciBzZXF1ZW5jZXIgZGlzYWJsZSAoZXF1aXZhbGVudCB0byBzZXF1ZW5jZXIgb2YgMSByYW5rOiBBREMgY29udmVyc2lvbiBvbiBvbmx5IDEgY2hhbm5lbCkgKi8KICNkZWZpbmUgTExfQURDX1JFR19TRVFfU0NBTl9FTkFCTEVfMlJBTktTICAoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQURDX1NRUjFfTF8wKSAvKiE8IEFEQyBncm91cCByZWd1bGFyIHNlcXVlbmNlciBlbmFibGUgd2l0aCAyIHJhbmtzIGluIHRoZSBzZXF1ZW5jZSAqLwogI2RlZmluZSBMTF9BRENfUkVHX1NFUV9TQ0FOX0VOQUJMRV8zUkFOS1MgICggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRENfU1FSMV9MXzEgICAgICAgICAgICAgICApIC8qITwgQURDIGdyb3VwIHJlZ3VsYXIgc2VxdWVuY2VyIGVuYWJsZSB3aXRoIDMgcmFua3MgaW4gdGhlIHNlcXVlbmNlICovCiAjZGVmaW5lIExMX0FEQ19SRUdfU0VRX1NDQU5fRU5BQkxFXzRSQU5LUyAgKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFEQ19TUVIxX0xfMSB8IEFEQ19TUVIxX0xfMCkgLyohPCBBREMgZ3JvdXAgcmVndWxhciBzZXF1ZW5jZXIgZW5hYmxlIHdpdGggNCByYW5rcyBpbiB0aGUgc2VxdWVuY2UgKi8KQEAgLTczOCw3ICs3MzgsNyBAQAogLyoqIEBkZWZncm91cCBBRENfTExfRUNfUkVHX1NFUV9ESVNDT05UX01PREUgIEFEQyBncm91cCByZWd1bGFyIC0gU2VxdWVuY2VyIGRpc2NvbnRpbnVvdXMgbW9kZQogICAqIEB7CiAgICovCi0jZGVmaW5lIExMX0FEQ19SRUdfU0VRX0RJU0NPTlRfRElTQUJMRSAgICAgMHgwMDAwMDAwMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFEQyBncm91cCByZWd1bGFyIHNlcXVlbmNlciBkaXNjb250aW51b3VzIG1vZGUgZGlzYWJsZSAqLworI2RlZmluZSBMTF9BRENfUkVHX1NFUV9ESVNDT05UX0RJU0FCTEUgICAgIDB4MDAwMDAwMDBVTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQURDIGdyb3VwIHJlZ3VsYXIgc2VxdWVuY2VyIGRpc2NvbnRpbnVvdXMgbW9kZSBkaXNhYmxlICovCiAjZGVmaW5lIExMX0FEQ19SRUdfU0VRX0RJU0NPTlRfMVJBTksgICAgICAgKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFEQ19DUjFfRElTQ0VOKSAvKiE8IEFEQyBncm91cCByZWd1bGFyIHNlcXVlbmNlciBkaXNjb250aW51b3VzIG1vZGUgZW5hYmxlIHdpdGggc2VxdWVuY2UgaW50ZXJydXB0aW9uIGV2ZXJ5IHJhbmsgKi8KICNkZWZpbmUgTExfQURDX1JFR19TRVFfRElTQ09OVF8yUkFOS1MgICAgICAoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFEQ19DUjFfRElTQ05VTV8wIHwgQURDX0NSMV9ESVNDRU4pIC8qITwgQURDIGdyb3VwIHJlZ3VsYXIgc2VxdWVuY2VyIGRpc2NvbnRpbnVvdXMgbW9kZSBlbmFibGVkIHdpdGggc2VxdWVuY2UgaW50ZXJydXB0aW9uIGV2ZXJ5IDIgcmFua3MgKi8KICNkZWZpbmUgTExfQURDX1JFR19TRVFfRElTQ09OVF8zUkFOS1MgICAgICAoICAgICAgICAgICAgICAgICAgICBBRENfQ1IxX0RJU0NOVU1fMSAgICAgICAgICAgICAgICAgICAgIHwgQURDX0NSMV9ESVNDRU4pIC8qITwgQURDIGdyb3VwIHJlZ3VsYXIgc2VxdWVuY2VyIGRpc2NvbnRpbnVvdXMgbW9kZSBlbmFibGUgd2l0aCBzZXF1ZW5jZSBpbnRlcnJ1cHRpb24gZXZlcnkgMyByYW5rcyAqLwpAQCAtNzc3LDcgKzc3Nyw3IEBACiAvKiogQGRlZmdyb3VwIEFEQ19MTF9FQ19JTkpfVFJJR0dFUl9TT1VSQ0UgIEFEQyBncm91cCBpbmplY3RlZCAtIFRyaWdnZXIgc291cmNlCiAgICogQHsKICAgKi8KLSNkZWZpbmUgTExfQURDX0lOSl9UUklHX1NPRlRXQVJFICAgICAgICAgICAweDAwMDAwMDAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBREMgZ3JvdXAgaW5qZWN0ZWQgY29udmVyc2lvbiB0cmlnZ2VyIGludGVybmFsOiBTVyBzdGFydC4gKi8KKyNkZWZpbmUgTExfQURDX0lOSl9UUklHX1NPRlRXQVJFICAgICAgICAgICAweDAwMDAwMDAwVUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQURDIGdyb3VwIGluamVjdGVkIGNvbnZlcnNpb24gdHJpZ2dlciBpbnRlcm5hbDogU1cgc3RhcnQuICovCiAjZGVmaW5lIExMX0FEQ19JTkpfVFJJR19FWFRfVElNMV9DSDQgICAgICAgKEFEQ19JTkpfVFJJR19FWFRfRURHRV9ERUZBVUxUKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQURDIGdyb3VwIGluamVjdGVkIGNvbnZlcnNpb24gdHJpZ2dlciBmcm9tIGV4dGVybmFsIElQOiBUSU0xIGNoYW5uZWwgNCBldmVudCAoY2FwdHVyZSBjb21wYXJlOiBpbnB1dCBjYXB0dXJlIG9yIG91dHB1dCBjYXB0dXJlKS4gVHJpZ2dlciBlZGdlIHNldCB0byByaXNpbmcgZWRnZSAoZGVmYXVsdCBzZXR0aW5nKS4gKi8KICNkZWZpbmUgTExfQURDX0lOSl9UUklHX0VYVF9USU0xX1RSR08gICAgICAoQURDX0NSMl9KRVhUU0VMXzAgfCBBRENfSU5KX1RSSUdfRVhUX0VER0VfREVGQVVMVCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBREMgZ3JvdXAgaW5qZWN0ZWQgY29udmVyc2lvbiB0cmlnZ2VyIGZyb20gZXh0ZXJuYWwgSVA6IFRJTTEgVFJHTy4gVHJpZ2dlciBlZGdlIHNldCB0byByaXNpbmcgZWRnZSAoZGVmYXVsdCBzZXR0aW5nKS4gKi8KICNkZWZpbmUgTExfQURDX0lOSl9UUklHX0VYVF9USU0yX0NIMSAgICAgICAoQURDX0NSMl9KRVhUU0VMXzEgfCBBRENfSU5KX1RSSUdfRVhUX0VER0VfREVGQVVMVCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBREMgZ3JvdXAgaW5qZWN0ZWQgY29udmVyc2lvbiB0cmlnZ2VyIGZyb20gZXh0ZXJuYWwgSVA6IFRJTTIgY2hhbm5lbCAxIGV2ZW50IChjYXB0dXJlIGNvbXBhcmU6IGlucHV0IGNhcHR1cmUgb3Igb3V0cHV0IGNhcHR1cmUpLiBUcmlnZ2VyIGVkZ2Ugc2V0IHRvIHJpc2luZyBlZGdlIChkZWZhdWx0IHNldHRpbmcpLiAqLwpAQCAtODExLDcgKzgxMSw3IEBACiAvKiogQGRlZmdyb3VwIEFEQ19MTF9FQ19JTkpfVFJJR19BVVRPICBBREMgZ3JvdXAgaW5qZWN0ZWQgLSBBdXRvbWF0aWMgdHJpZ2dlciBtb2RlCiAqIEB7CiAqLwotI2RlZmluZSBMTF9BRENfSU5KX1RSSUdfSU5ERVBFTkRFTlQgICAgICAgIDB4MDAwMDAwMDBVICAgICAgICAgICAgLyohPCBBREMgZ3JvdXAgaW5qZWN0ZWQgY29udmVyc2lvbiB0cmlnZ2VyIGluZGVwZW5kZW50LiBTZXR0aW5nIG1hbmRhdG9yeSBpZiBBREMgZ3JvdXAgaW5qZWN0ZWQgaW5qZWN0ZWQgdHJpZ2dlciBzb3VyY2UgaXMgc2V0IHRvIGFuIGV4dGVybmFsIHRyaWdnZXIuICovCisjZGVmaW5lIExMX0FEQ19JTkpfVFJJR19JTkRFUEVOREVOVCAgICAgICAgMHgwMDAwMDAwMFVMICAgICAgICAgICAgLyohPCBBREMgZ3JvdXAgaW5qZWN0ZWQgY29udmVyc2lvbiB0cmlnZ2VyIGluZGVwZW5kZW50LiBTZXR0aW5nIG1hbmRhdG9yeSBpZiBBREMgZ3JvdXAgaW5qZWN0ZWQgaW5qZWN0ZWQgdHJpZ2dlciBzb3VyY2UgaXMgc2V0IHRvIGFuIGV4dGVybmFsIHRyaWdnZXIuICovCiAjZGVmaW5lIExMX0FEQ19JTkpfVFJJR19GUk9NX0dSUF9SRUdVTEFSICAgKEFEQ19DUjFfSkFVVE8pICAgICAgICAvKiE8IEFEQyBncm91cCBpbmplY3RlZCBjb252ZXJzaW9uIHRyaWdnZXIgZnJvbSBBREMgZ3JvdXAgcmVndWxhci4gU2V0dGluZyBjb21wbGlhbnQgb25seSB3aXRoIGdyb3VwIGluamVjdGVkIHRyaWdnZXIgc291cmNlIHNldCB0byBTVyBzdGFydCwgd2l0aG91dCBhbnkgZnVydGhlciBhY3Rpb24gb24gIEFEQyBncm91cCBpbmplY3RlZCBjb252ZXJzaW9uIHN0YXJ0IG9yIHN0b3A6IGluIHRoaXMgY2FzZSwgQURDIGdyb3VwIGluamVjdGVkIGlzIGNvbnRyb2xsZWQgb25seSBmcm9tIEFEQyBncm91cCByZWd1bGFyLiAqLwogLyoqCiAgICogQH0KQEAgLTgyMSw3ICs4MjEsNyBAQAogLyoqIEBkZWZncm91cCBBRENfTExfRUNfSU5KX1NFUV9TQ0FOX0xFTkdUSCAgQURDIGdyb3VwIGluamVjdGVkIC0gU2VxdWVuY2VyIHNjYW4gbGVuZ3RoCiAgICogQHsKICAgKi8KLSNkZWZpbmUgTExfQURDX0lOSl9TRVFfU0NBTl9ESVNBQkxFICAgICAgICAweDAwMDAwMDAwVSAgICAgICAgICAgICAgICAgICAgIC8qITwgQURDIGdyb3VwIGluamVjdGVkIHNlcXVlbmNlciBkaXNhYmxlIChlcXVpdmFsZW50IHRvIHNlcXVlbmNlciBvZiAxIHJhbms6IEFEQyBjb252ZXJzaW9uIG9uIG9ubHkgMSBjaGFubmVsKSAqLworI2RlZmluZSBMTF9BRENfSU5KX1NFUV9TQ0FOX0RJU0FCTEUgICAgICAgIDB4MDAwMDAwMDBVTCAgICAgICAgICAgICAgICAgICAgIC8qITwgQURDIGdyb3VwIGluamVjdGVkIHNlcXVlbmNlciBkaXNhYmxlIChlcXVpdmFsZW50IHRvIHNlcXVlbmNlciBvZiAxIHJhbms6IEFEQyBjb252ZXJzaW9uIG9uIG9ubHkgMSBjaGFubmVsKSAqLwogI2RlZmluZSBMTF9BRENfSU5KX1NFUV9TQ0FOX0VOQUJMRV8yUkFOS1MgICggICAgICAgICAgICAgICAgQURDX0pTUVJfSkxfMCkgLyohPCBBREMgZ3JvdXAgaW5qZWN0ZWQgc2VxdWVuY2VyIGVuYWJsZSB3aXRoIDIgcmFua3MgaW4gdGhlIHNlcXVlbmNlICovCiAjZGVmaW5lIExMX0FEQ19JTkpfU0VRX1NDQU5fRU5BQkxFXzNSQU5LUyAgKEFEQ19KU1FSX0pMXzEgICAgICAgICAgICAgICAgKSAvKiE8IEFEQyBncm91cCBpbmplY3RlZCBzZXF1ZW5jZXIgZW5hYmxlIHdpdGggMyByYW5rcyBpbiB0aGUgc2VxdWVuY2UgKi8KICNkZWZpbmUgTExfQURDX0lOSl9TRVFfU0NBTl9FTkFCTEVfNFJBTktTICAoQURDX0pTUVJfSkxfMSB8IEFEQ19KU1FSX0pMXzApIC8qITwgQURDIGdyb3VwIGluamVjdGVkIHNlcXVlbmNlciBlbmFibGUgd2l0aCA0IHJhbmtzIGluIHRoZSBzZXF1ZW5jZSAqLwpAQCAtODMyLDcgKzgzMiw3IEBACiAvKiogQGRlZmdyb3VwIEFEQ19MTF9FQ19JTkpfU0VRX0RJU0NPTlRfTU9ERSAgQURDIGdyb3VwIGluamVjdGVkIC0gU2VxdWVuY2VyIGRpc2NvbnRpbnVvdXMgbW9kZQogICAqIEB7CiAgICovCi0jZGVmaW5lIExMX0FEQ19JTkpfU0VRX0RJU0NPTlRfRElTQUJMRSAgICAgMHgwMDAwMDAwMFUgICAgICAgICAgICAvKiE8IEFEQyBncm91cCBpbmplY3RlZCBzZXF1ZW5jZXIgZGlzY29udGludW91cyBtb2RlIGRpc2FibGUgKi8KKyNkZWZpbmUgTExfQURDX0lOSl9TRVFfRElTQ09OVF9ESVNBQkxFICAgICAweDAwMDAwMDAwVUwgICAgICAgICAgICAvKiE8IEFEQyBncm91cCBpbmplY3RlZCBzZXF1ZW5jZXIgZGlzY29udGludW91cyBtb2RlIGRpc2FibGUgKi8KICNkZWZpbmUgTExfQURDX0lOSl9TRVFfRElTQ09OVF8xUkFOSyAgICAgICAoQURDX0NSMV9KRElTQ0VOKSAgICAgIC8qITwgQURDIGdyb3VwIGluamVjdGVkIHNlcXVlbmNlciBkaXNjb250aW51b3VzIG1vZGUgZW5hYmxlIHdpdGggc2VxdWVuY2UgaW50ZXJydXB0aW9uIGV2ZXJ5IHJhbmsgKi8KIC8qKgogICAqIEB9CkBAIC04NDEsMTAgKzg0MSwxMCBAQAogLyoqIEBkZWZncm91cCBBRENfTExfRUNfSU5KX1NFUV9SQU5LUyAgQURDIGdyb3VwIGluamVjdGVkIC0gU2VxdWVuY2VyIHJhbmtzCiAgICogQHsKICAgKi8KLSNkZWZpbmUgTExfQURDX0lOSl9SQU5LXzEgICAgICAgICAgICAgICAgICAoQURDX0pEUjFfUkVHT0ZGU0VUIHwgQURDX0pPRlIxX1JFR09GRlNFVCB8IDB4MDAwMDAwMDFVKSAvKiE8IEFEQyBncm91cCBpbmplY3RlZCBzZXF1ZW5jZXIgcmFuayAxICovCi0jZGVmaW5lIExMX0FEQ19JTkpfUkFOS18yICAgICAgICAgICAgICAgICAgKEFEQ19KRFIyX1JFR09GRlNFVCB8IEFEQ19KT0ZSMl9SRUdPRkZTRVQgfCAweDAwMDAwMDAyVSkgLyohPCBBREMgZ3JvdXAgaW5qZWN0ZWQgc2VxdWVuY2VyIHJhbmsgMiAqLwotI2RlZmluZSBMTF9BRENfSU5KX1JBTktfMyAgICAgICAgICAgICAgICAgIChBRENfSkRSM19SRUdPRkZTRVQgfCBBRENfSk9GUjNfUkVHT0ZGU0VUIHwgMHgwMDAwMDAwM1UpIC8qITwgQURDIGdyb3VwIGluamVjdGVkIHNlcXVlbmNlciByYW5rIDMgKi8KLSNkZWZpbmUgTExfQURDX0lOSl9SQU5LXzQgICAgICAgICAgICAgICAgICAoQURDX0pEUjRfUkVHT0ZGU0VUIHwgQURDX0pPRlI0X1JFR09GRlNFVCB8IDB4MDAwMDAwMDRVKSAvKiE8IEFEQyBncm91cCBpbmplY3RlZCBzZXF1ZW5jZXIgcmFuayA0ICovCisjZGVmaW5lIExMX0FEQ19JTkpfUkFOS18xICAgICAgICAgICAgICAgICAgKEFEQ19KRFIxX1JFR09GRlNFVCB8IEFEQ19KT0ZSMV9SRUdPRkZTRVQgfCAweDAwMDAwMDAxVUwpIC8qITwgQURDIGdyb3VwIGluamVjdGVkIHNlcXVlbmNlciByYW5rIDEgKi8KKyNkZWZpbmUgTExfQURDX0lOSl9SQU5LXzIgICAgICAgICAgICAgICAgICAoQURDX0pEUjJfUkVHT0ZGU0VUIHwgQURDX0pPRlIyX1JFR09GRlNFVCB8IDB4MDAwMDAwMDJVTCkgLyohPCBBREMgZ3JvdXAgaW5qZWN0ZWQgc2VxdWVuY2VyIHJhbmsgMiAqLworI2RlZmluZSBMTF9BRENfSU5KX1JBTktfMyAgICAgICAgICAgICAgICAgIChBRENfSkRSM19SRUdPRkZTRVQgfCBBRENfSk9GUjNfUkVHT0ZGU0VUIHwgMHgwMDAwMDAwM1VMKSAvKiE8IEFEQyBncm91cCBpbmplY3RlZCBzZXF1ZW5jZXIgcmFuayAzICovCisjZGVmaW5lIExMX0FEQ19JTkpfUkFOS180ICAgICAgICAgICAgICAgICAgKEFEQ19KRFI0X1JFR09GRlNFVCB8IEFEQ19KT0ZSNF9SRUdPRkZTRVQgfCAweDAwMDAwMDA0VUwpIC8qITwgQURDIGdyb3VwIGluamVjdGVkIHNlcXVlbmNlciByYW5rIDQgKi8KIC8qKgogICAqIEB9CiAgICovCkBAIC04NTIsNyArODUyLDcgQEAKIC8qKiBAZGVmZ3JvdXAgQURDX0xMX0VDX0NIQU5ORUxfU0FNUExJTkdUSU1FICBDaGFubmVsIC0gU2FtcGxpbmcgdGltZQogICAqIEB7CiAgICovCi0jZGVmaW5lIExMX0FEQ19TQU1QTElOR1RJTUVfM0NZQ0xFUyAgICAgICAgMHgwMDAwMDAwMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTYW1wbGluZyB0aW1lIDMgQURDIGNsb2NrIGN5Y2xlcyAqLworI2RlZmluZSBMTF9BRENfU0FNUExJTkdUSU1FXzNDWUNMRVMgICAgICAgIDB4MDAwMDAwMDBVTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNhbXBsaW5nIHRpbWUgMyBBREMgY2xvY2sgY3ljbGVzICovCiAjZGVmaW5lIExMX0FEQ19TQU1QTElOR1RJTUVfMTVDWUNMRVMgICAgICAgKEFEQ19TTVBSMV9TTVAxMF8wKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTYW1wbGluZyB0aW1lIDE1IEFEQyBjbG9jayBjeWNsZXMgKi8KICNkZWZpbmUgTExfQURDX1NBTVBMSU5HVElNRV8yOENZQ0xFUyAgICAgICAoQURDX1NNUFIxX1NNUDEwXzEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNhbXBsaW5nIHRpbWUgMjggQURDIGNsb2NrIGN5Y2xlcyAqLwogI2RlZmluZSBMTF9BRENfU0FNUExJTkdUSU1FXzU2Q1lDTEVTICAgICAgIChBRENfU01QUjFfU01QMTBfMSB8IEFEQ19TTVBSMV9TTVAxMF8wKSAgICAgICAgICAgICAgICAgIC8qITwgU2FtcGxpbmcgdGltZSA1NiBBREMgY2xvY2sgY3ljbGVzICovCkBAIC04NzUsNyArODc1LDcgQEAKIC8qKiBAZGVmZ3JvdXAgQURDX0xMX0VDX0FXRF9DSEFOTkVMUyAgQW5hbG9nIHdhdGNoZG9nIC0gTW9uaXRvcmVkIGNoYW5uZWxzCiAgICogQHsKICAgKi8KLSNkZWZpbmUgTExfQURDX0FXRF9ESVNBQkxFICAgICAgICAgICAgICAgICAweDAwMDAwMDAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBREMgYW5hbG9nIHdhdGNoZG9nIG1vbml0b3JpbmcgZGlzYWJsZWQgKi8KKyNkZWZpbmUgTExfQURDX0FXRF9ESVNBQkxFICAgICAgICAgICAgICAgICAweDAwMDAwMDAwVUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQURDIGFuYWxvZyB3YXRjaGRvZyBtb25pdG9yaW5nIGRpc2FibGVkICovCiAjZGVmaW5lIExMX0FEQ19BV0RfQUxMX0NIQU5ORUxTX1JFRyAgICAgICAgKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRENfQ1IxX0FXREVOICAgICAgICAgICAgICAgICApIC8qITwgQURDIGFuYWxvZyB3YXRjaGRvZyBtb25pdG9yaW5nIG9mIGFsbCBjaGFubmVscywgY29udmVydGVkIGJ5IGdyb3VwIHJlZ3VsYXIgb25seSAqLwogI2RlZmluZSBMTF9BRENfQVdEX0FMTF9DSEFOTkVMU19JTkogICAgICAgICggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFEQ19DUjFfSkFXREVOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSAvKiE8IEFEQyBhbmFsb2cgd2F0Y2hkb2cgbW9uaXRvcmluZyBvZiBhbGwgY2hhbm5lbHMsIGNvbnZlcnRlZCBieSBncm91cCBpbmplY3RlZCBvbmx5ICovCiAjZGVmaW5lIExMX0FEQ19BV0RfQUxMX0NIQU5ORUxTX1JFR19JTkogICAgKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQURDX0NSMV9KQVdERU4gfCBBRENfQ1IxX0FXREVOICAgICAgICAgICAgICAgICApIC8qITwgQURDIGFuYWxvZyB3YXRjaGRvZyBtb25pdG9yaW5nIG9mIGFsbCBjaGFubmVscywgY29udmVydGVkIGJ5IGVpdGhlciBncm91cCByZWd1bGFyIG9yIGluamVjdGVkICovCkBAIC05NjksNyArOTY5LDcgQEAKIC8qKiBAZGVmZ3JvdXAgQURDX0xMX0VDX01VTFRJX01PREUgIE11bHRpbW9kZSAtIE1vZGUKICAgKiBAewogICAqLwotI2RlZmluZSBMTF9BRENfTVVMVElfSU5ERVBFTkRFTlQgICAgICAgICAgIDB4MDAwMDAwMDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQURDIGR1YWwgbW9kZSBkaXNhYmxlZCAoQURDIGluZGVwZW5kZW50IG1vZGUpICovCisjZGVmaW5lIExMX0FEQ19NVUxUSV9JTkRFUEVOREVOVCAgICAgICAgICAgMHgwMDAwMDAwMFVMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQURDIGR1YWwgbW9kZSBkaXNhYmxlZCAoQURDIGluZGVwZW5kZW50IG1vZGUpICovCiAjZGVmaW5lIExMX0FEQ19NVUxUSV9EVUFMX1JFR19TSU1VTFQgICAgICAgKCAgICAgICAgICAgICAgICAgIEFEQ19DQ1JfTVVMVElfMiB8IEFEQ19DQ1JfTVVMVElfMSAgICAgICAgICAgICAgICAgICkgLyohPCBBREMgZHVhbCBtb2RlIGVuYWJsZWQ6IGdyb3VwIHJlZ3VsYXIgc2ltdWx0YW5lb3VzICovCiAjZGVmaW5lIExMX0FEQ19NVUxUSV9EVUFMX1JFR19JTlRFUkwgICAgICAgKCAgICAgICAgICAgICAgICAgIEFEQ19DQ1JfTVVMVElfMiB8IEFEQ19DQ1JfTVVMVElfMSB8IEFEQ19DQ1JfTVVMVElfMCkgLyohPCBBREMgZHVhbCBtb2RlIGVuYWJsZWQ6IENvbWJpbmVkIGdyb3VwIHJlZ3VsYXIgaW50ZXJsZWF2ZWQgKi8KICNkZWZpbmUgTExfQURDX01VTFRJX0RVQUxfSU5KX1NJTVVMVCAgICAgICAoICAgICAgICAgICAgICAgICAgQURDX0NDUl9NVUxUSV8yICAgICAgICAgICAgICAgICAgIHwgQURDX0NDUl9NVUxUSV8wKSAvKiE8IEFEQyBkdWFsIG1vZGUgZW5hYmxlZDogZ3JvdXAgaW5qZWN0ZWQgc2ltdWx0YW5lb3VzICovCkBAIC05OTIsMTMgKzk5MiwxMyBAQAogLyoqIEBkZWZncm91cCBBRENfTExfRUNfTVVMVElfRE1BX1RSQU5TRkVSICBNdWx0aW1vZGUgLSBETUEgdHJhbnNmZXIKICAgKiBAewogICAqLwotI2RlZmluZSBMTF9BRENfTVVMVElfUkVHX0RNQV9FQUNIX0FEQyAgICAgICAgMHgwMDAwMDAwMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQURDIG11bHRpbW9kZSBncm91cCByZWd1bGFyIGNvbnZlcnNpb25zIGFyZSB0cmFuc2ZlcnJlZCBieSBETUE6IGVhY2ggQURDIHVzZXMgaXRzIG93biBETUEgY2hhbm5lbCwgd2l0aCBpdHMgaW5kaXZpZHVhbCBETUEgdHJhbnNmZXIgc2V0dGluZ3MgKi8KKyNkZWZpbmUgTExfQURDX01VTFRJX1JFR19ETUFfRUFDSF9BREMgICAgICAgIDB4MDAwMDAwMDBVTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBREMgbXVsdGltb2RlIGdyb3VwIHJlZ3VsYXIgY29udmVyc2lvbnMgYXJlIHRyYW5zZmVycmVkIGJ5IERNQTogZWFjaCBBREMgdXNlcyBpdHMgb3duIERNQSBjaGFubmVsLCB3aXRoIGl0cyBpbmRpdmlkdWFsIERNQSB0cmFuc2ZlciBzZXR0aW5ncyAqLwogI2RlZmluZSBMTF9BRENfTVVMVElfUkVHX0RNQV9MSU1JVF8xICAgICAgICAgKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFEQ19DQ1JfRE1BXzApIC8qITwgQURDIG11bHRpbW9kZSBncm91cCByZWd1bGFyIGNvbnZlcnNpb25zIGFyZSB0cmFuc2ZlcnJlZCBieSBETUEsIG9uZSBETUEgY2hhbm5lbCBmb3IgYWxsIEFEQyBpbnN0YW5jZXMgKERNQSBvZiBBREMgbWFzdGVyKSwgaW4gbGltaXRlZCBtb2RlIChvbmUgc2hvdCBtb2RlKTogRE1BIHRyYW5zZmVyIHJlcXVlc3RzIGFyZSBzdG9wcGVkIHdoZW4gbnVtYmVyIG9mIERNQSBkYXRhIHRyYW5zZmVycyAobnVtYmVyIG9mIEFEQyBjb252ZXJzaW9ucykgaXMgcmVhY2hlZC4gVGhpcyBBREMgbW9kZSBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIHdpdGggRE1BIG1vZGUgbm9uLWNpcmN1bGFyLiBTZXR0aW5nIG9mIERNQSBtb2RlIDE6IDIgb3IgMyAoZHVhbCBvciB0cmlwbGUgbW9kZSkgaGFsZi13b3JkcyBvbmUgYnkgb25lLCBBREMxIHRoZW4gQURDMiB0aGVuIEFEQzMuICovCiAjZGVmaW5lIExMX0FEQ19NVUxUSV9SRUdfRE1BX0xJTUlUXzIgICAgICAgICAoICAgICAgICAgICAgICBBRENfQ0NSX0RNQV8xICAgICAgICAgICAgICAgICkgLyohPCBBREMgbXVsdGltb2RlIGdyb3VwIHJlZ3VsYXIgY29udmVyc2lvbnMgYXJlIHRyYW5zZmVycmVkIGJ5IERNQSwgb25lIERNQSBjaGFubmVsIGZvciBhbGwgQURDIGluc3RhbmNlcyAoRE1BIG9mIEFEQyBtYXN0ZXIpLCBpbiBsaW1pdGVkIG1vZGUgKG9uZSBzaG90IG1vZGUpOiBETUEgdHJhbnNmZXIgcmVxdWVzdHMgYXJlIHN0b3BwZWQgd2hlbiBudW1iZXIgb2YgRE1BIGRhdGEgdHJhbnNmZXJzIChudW1iZXIgb2YgQURDIGNvbnZlcnNpb25zKSBpcyByZWFjaGVkLiBUaGlzIEFEQyBtb2RlIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgd2l0aCBETUEgbW9kZSBub24tY2lyY3VsYXIuIFNldHRpbmcgb2YgRE1BIG1vZGUgMjogMiBvciAzIChkdWFsIG9yIHRyaXBsZSBtb2RlKSBoYWxmLXdvcmRzIG9uZSBieSBvbmUsIEFEQzImMSB0aGVuIEFEQzEmMyB0aGVuIEFEQzMmMi4gKi8KLSNkZWZpbmUgTExfQURDX01VTFRJX1JFR19ETUFfTElNSVRfMyAgICAgICAgICggICAgICAgICAgICAgIEFEQ19DQ1JfRE1BXzAgfCBBRENfQ0NSX0RNQV8wKSAvKiE8IEFEQyBtdWx0aW1vZGUgZ3JvdXAgcmVndWxhciBjb252ZXJzaW9ucyBhcmUgdHJhbnNmZXJyZWQgYnkgRE1BLCBvbmUgRE1BIGNoYW5uZWwgZm9yIGFsbCBBREMgaW5zdGFuY2VzIChETUEgb2YgQURDIG1hc3RlciksIGluIGxpbWl0ZWQgbW9kZSAob25lIHNob3QgbW9kZSk6IERNQSB0cmFuc2ZlciByZXF1ZXN0cyBhcmUgc3RvcHBlZCB3aGVuIG51bWJlciBvZiBETUEgZGF0YSB0cmFuc2ZlcnMgKG51bWJlciBvZiBBREMgY29udmVyc2lvbnMpIGlzIHJlYWNoZWQuIFRoaXMgQURDIG1vZGUgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCB3aXRoIERNQSBtb2RlIG5vbi1jaXJjdWxhci4gU2V0dGluZyBvZiBETUEgbW9kZSAzOiAyIG9yIDMgKGR1YWwgb3IgdHJpcGxlIG1vZGUpIGJ5dGVzIG9uZSBieSBvbmUsIEFEQzImMSB0aGVuIEFEQzEmMyB0aGVuIEFEQzMmMi4gKi8KKyNkZWZpbmUgTExfQURDX01VTFRJX1JFR19ETUFfTElNSVRfMyAgICAgICAgICggICAgICAgICAgICAgIEFEQ19DQ1JfRE1BXzEgfCBBRENfQ0NSX0RNQV8wKSAvKiE8IEFEQyBtdWx0aW1vZGUgZ3JvdXAgcmVndWxhciBjb252ZXJzaW9ucyBhcmUgdHJhbnNmZXJyZWQgYnkgRE1BLCBvbmUgRE1BIGNoYW5uZWwgZm9yIGFsbCBBREMgaW5zdGFuY2VzIChETUEgb2YgQURDIG1hc3RlciksIGluIGxpbWl0ZWQgbW9kZSAob25lIHNob3QgbW9kZSk6IERNQSB0cmFuc2ZlciByZXF1ZXN0cyBhcmUgc3RvcHBlZCB3aGVuIG51bWJlciBvZiBETUEgZGF0YSB0cmFuc2ZlcnMgKG51bWJlciBvZiBBREMgY29udmVyc2lvbnMpIGlzIHJlYWNoZWQuIFRoaXMgQURDIG1vZGUgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCB3aXRoIERNQSBtb2RlIG5vbi1jaXJjdWxhci4gU2V0dGluZyBvZiBETUEgbW9kZSAzOiAyIG9yIDMgKGR1YWwgb3IgdHJpcGxlIG1vZGUpIGJ5dGVzIG9uZSBieSBvbmUsIEFEQzImMSB0aGVuIEFEQzEmMyB0aGVuIEFEQzMmMi4gKi8KICNkZWZpbmUgTExfQURDX01VTFRJX1JFR19ETUFfVU5MTVRfMSAgICAgICAgIChBRENfQ0NSX0REUyB8ICAgICAgICAgICAgICAgICBBRENfQ0NSX0RNQV8wKSAvKiE8IEFEQyBtdWx0aW1vZGUgZ3JvdXAgcmVndWxhciBjb252ZXJzaW9ucyBhcmUgdHJhbnNmZXJyZWQgYnkgRE1BLCBvbmUgRE1BIGNoYW5uZWwgZm9yIGFsbCBBREMgaW5zdGFuY2VzIChETUEgb2YgQURDIG1hc3RlciksIGluIHVubGltaXRlZCBtb2RlOiBETUEgdHJhbnNmZXIgcmVxdWVzdHMgYXJlIHVubGltaXRlZCwgd2hhdGV2ZXIgbnVtYmVyIG9mIERNQSBkYXRhIHRyYW5zZmVycmVkIChudW1iZXIgb2YgQURDIGNvbnZlcnNpb25zKSBpcyByZWFjaGVkLiBUaGlzIEFEQyBtb2RlIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgd2l0aCBETUEgbW9kZSBub24tY2lyY3VsYXIuIFNldHRpbmcgb2YgRE1BIG1vZGUgMTogMiBvciAzIChkdWFsIG9yIHRyaXBsZSBtb2RlKSBoYWxmLXdvcmRzIG9uZSBieSBvbmUsIEFEQzEgdGhlbiBBREMyIHRoZW4gQURDMy4gKi8KICNkZWZpbmUgTExfQURDX01VTFRJX1JFR19ETUFfVU5MTVRfMiAgICAgICAgIChBRENfQ0NSX0REUyB8IEFEQ19DQ1JfRE1BXzEgICAgICAgICAgICAgICAgKSAvKiE8IEFEQyBtdWx0aW1vZGUgZ3JvdXAgcmVndWxhciBjb252ZXJzaW9ucyBhcmUgdHJhbnNmZXJyZWQgYnkgRE1BLCBvbmUgRE1BIGNoYW5uZWwgZm9yIGFsbCBBREMgaW5zdGFuY2VzIChETUEgb2YgQURDIG1hc3RlciksIGluIHVubGltaXRlZCBtb2RlOiBETUEgdHJhbnNmZXIgcmVxdWVzdHMgYXJlIHVubGltaXRlZCwgd2hhdGV2ZXIgbnVtYmVyIG9mIERNQSBkYXRhIHRyYW5zZmVycmVkIChudW1iZXIgb2YgQURDIGNvbnZlcnNpb25zKSBpcyByZWFjaGVkLiBUaGlzIEFEQyBtb2RlIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgd2l0aCBETUEgbW9kZSBub24tY2lyY3VsYXIuIFNldHRpbmcgb2YgRE1BIG1vZGUgMjogMiBvciAzIChkdWFsIG9yIHRyaXBsZSBtb2RlKSBoYWxmLXdvcmRzIGJ5IHBhaXJzLCBBREMyJjEgdGhlbiBBREMxJjMgdGhlbiBBREMzJjIuICovCi0jZGVmaW5lIExMX0FEQ19NVUxUSV9SRUdfRE1BX1VOTE1UXzMgICAgICAgICAoQURDX0NDUl9ERFMgfCBBRENfQ0NSX0RNQV8wIHwgQURDX0NDUl9ETUFfMCkgLyohPCBBREMgbXVsdGltb2RlIGdyb3VwIHJlZ3VsYXIgY29udmVyc2lvbnMgYXJlIHRyYW5zZmVycmVkIGJ5IERNQSwgb25lIERNQSBjaGFubmVsIGZvciBhbGwgQURDIGluc3RhbmNlcyAoRE1BIG9mIEFEQyBtYXN0ZXIpLCBpbiB1bmxpbWl0ZWQgbW9kZTogRE1BIHRyYW5zZmVyIHJlcXVlc3RzIGFyZSB1bmxpbWl0ZWQsIHdoYXRldmVyIG51bWJlciBvZiBETUEgZGF0YSB0cmFuc2ZlcnJlZCAobnVtYmVyIG9mIEFEQyBjb252ZXJzaW9ucykgaXMgcmVhY2hlZC4gVGhpcyBBREMgbW9kZSBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIHdpdGggRE1BIG1vZGUgbm9uLWNpcmN1bGFyLiBTZXR0aW5nIG9mIERNQSBtb2RlIDM6IDIgb3IgMyAoZHVhbCBvciB0cmlwbGUgbW9kZSkgYnl0ZXMgb25lIGJ5IG9uZSwgQURDMiYxIHRoZW4gQURDMSYzIHRoZW4gQURDMyYyLiAqLworI2RlZmluZSBMTF9BRENfTVVMVElfUkVHX0RNQV9VTkxNVF8zICAgICAgICAgKEFEQ19DQ1JfRERTIHwgQURDX0NDUl9ETUFfMSB8IEFEQ19DQ1JfRE1BXzApIC8qITwgQURDIG11bHRpbW9kZSBncm91cCByZWd1bGFyIGNvbnZlcnNpb25zIGFyZSB0cmFuc2ZlcnJlZCBieSBETUEsIG9uZSBETUEgY2hhbm5lbCBmb3IgYWxsIEFEQyBpbnN0YW5jZXMgKERNQSBvZiBBREMgbWFzdGVyKSwgaW4gdW5saW1pdGVkIG1vZGU6IERNQSB0cmFuc2ZlciByZXF1ZXN0cyBhcmUgdW5saW1pdGVkLCB3aGF0ZXZlciBudW1iZXIgb2YgRE1BIGRhdGEgdHJhbnNmZXJyZWQgKG51bWJlciBvZiBBREMgY29udmVyc2lvbnMpIGlzIHJlYWNoZWQuIFRoaXMgQURDIG1vZGUgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCB3aXRoIERNQSBtb2RlIG5vbi1jaXJjdWxhci4gU2V0dGluZyBvZiBETUEgbW9kZSAzOiAyIG9yIDMgKGR1YWwgb3IgdHJpcGxlIG1vZGUpIGJ5dGVzIG9uZSBieSBvbmUsIEFEQzImMSB0aGVuIEFEQzEmMyB0aGVuIEFEQzMmMi4gKi8KIC8qKgogICAqIEB9CiAgICovCkBAIC0xMDA2LDcgKzEwMDYsNyBAQAogLyoqIEBkZWZncm91cCBBRENfTExfRUNfTVVMVElfVFdPU01QX0RFTEFZICBNdWx0aW1vZGUgLSBEZWxheSBiZXR3ZWVuIHR3byBzYW1wbGluZyBwaGFzZXMKICAgKiBAewogICAqLwotI2RlZmluZSBMTF9BRENfTVVMVElfVFdPU01QX0RFTEFZXzVDWUNMRVMgIDB4MDAwMDAwMDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQURDIG11bHRpbW9kZSBkZWxheSBiZXR3ZWVuIHR3byBzYW1wbGluZyBwaGFzZXM6IDUgQURDIGNsb2NrIGN5Y2xlcyovCisjZGVmaW5lIExMX0FEQ19NVUxUSV9UV09TTVBfREVMQVlfNUNZQ0xFUyAgMHgwMDAwMDAwMFVMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQURDIG11bHRpbW9kZSBkZWxheSBiZXR3ZWVuIHR3byBzYW1wbGluZyBwaGFzZXM6IDUgQURDIGNsb2NrIGN5Y2xlcyovCiAjZGVmaW5lIExMX0FEQ19NVUxUSV9UV09TTVBfREVMQVlfNkNZQ0xFUyAgKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFEQ19DQ1JfREVMQVlfMCkgLyohPCBBREMgbXVsdGltb2RlIGRlbGF5IGJldHdlZW4gdHdvIHNhbXBsaW5nIHBoYXNlczogNiBBREMgY2xvY2sgY3ljbGVzICovCiAjZGVmaW5lIExMX0FEQ19NVUxUSV9UV09TTVBfREVMQVlfN0NZQ0xFUyAgKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFEQ19DQ1JfREVMQVlfMSAgICAgICAgICAgICAgICAgICkgLyohPCBBREMgbXVsdGltb2RlIGRlbGF5IGJldHdlZW4gdHdvIHNhbXBsaW5nIHBoYXNlczogNyBBREMgY2xvY2sgY3ljbGVzICovCiAjZGVmaW5lIExMX0FEQ19NVUxUSV9UV09TTVBfREVMQVlfOENZQ0xFUyAgKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFEQ19DQ1JfREVMQVlfMSB8IEFEQ19DQ1JfREVMQVlfMCkgLyohPCBBREMgbXVsdGltb2RlIGRlbGF5IGJldHdlZW4gdHdvIHNhbXBsaW5nIHBoYXNlczogOCBBREMgY2xvY2sgY3ljbGVzICovCkBAIC0xMDUzLDcgKzEwNTMsNyBAQAogLyogICAgICAgY29uZmlndXJhdGlvbiAoc3lzdGVtIGNsb2NrIHZlcnN1cyBBREMgY2xvY2spLCAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgIGFuZCB0aGVyZWZvcmUgbXVzdCBiZSBkZWZpbmVkIGluIHVzZXIgYXBwbGljYXRpb24uICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICBJbmRpY2F0aW9ucyBmb3IgZXN0aW1hdGlvbiBvZiBBREMgdGltZW91dCBkZWxheXMsIGZvciB0aGlzICAgICAgICAgICAqLwotLyogICAgICAgU1RNMzIgc2VyaWU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgIFNUTTMyIHNlcmllczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAtIEFEQyBlbmFibGUgdGltZTogbWF4aW11bSBkZWxheSBpcyAydXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAocmVmZXIgdG8gZGV2aWNlIGRhdGFzaGVldCwgcGFyYW1ldGVyICJ0U1RBQiIpICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgIC0gQURDIGNvbnZlcnNpb24gdGltZTogZHVyYXRpb24gZGVwZW5kaW5nIG9uIEFEQyBjbG9jayBhbmQgQURDICAgICAgICovCkBAIC0xMDY0LDEzICsxMDY0LDEzIEBACiAvKiBEZWxheSBzZXQgdG8gbWF4aW11bSB2YWx1ZSAocmVmZXIgdG8gZGV2aWNlIGRhdGFzaGVldCwgICAgICAgICAgICAgICAgICAgICAqLwogLyogcGFyYW1ldGVyICJ0U1RBUlQiKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qIFVuaXQ6IHVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIExMX0FEQ19ERUxBWV9WUkVGSU5UX1NUQUJfVVMgICAgICAgKCAgMTBVKSAgLyohPCBEZWxheSBmb3IgaW50ZXJuYWwgdm9sdGFnZSByZWZlcmVuY2Ugc3RhYmlsaXphdGlvbiB0aW1lICovCisjZGVmaW5lIExMX0FEQ19ERUxBWV9WUkVGSU5UX1NUQUJfVVMgICAgICAgKCAgMTBVTCkgIC8qITwgRGVsYXkgZm9yIGludGVybmFsIHZvbHRhZ2UgcmVmZXJlbmNlIHN0YWJpbGl6YXRpb24gdGltZSAqLwogCiAvKiBEZWxheSBmb3IgdGVtcGVyYXR1cmUgc2Vuc29yIHN0YWJpbGl6YXRpb24gdGltZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogTGl0ZXJhbCBzZXQgdG8gbWF4aW11bSB2YWx1ZSAocmVmZXIgdG8gZGV2aWNlIGRhdGFzaGVldCwgICAgICAgICAgICAgICAgICAgKi8KIC8qIHBhcmFtZXRlciAidFNUQVJUIikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiBVbml0OiB1cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBMTF9BRENfREVMQVlfVEVNUFNFTlNPUl9TVEFCX1VTICAgICggIDEwVSkgIC8qITwgRGVsYXkgZm9yIGludGVybmFsIHZvbHRhZ2UgcmVmZXJlbmNlIHN0YWJpbGl6YXRpb24gdGltZSAqLworI2RlZmluZSBMTF9BRENfREVMQVlfVEVNUFNFTlNPUl9TVEFCX1VTICAgICggIDEwVUwpICAvKiE8IERlbGF5IGZvciBpbnRlcm5hbCB2b2x0YWdlIHJlZmVyZW5jZSBzdGFiaWxpemF0aW9uIHRpbWUgKi8KIAogLyoqCiAgICogQH0KQEAgLTExOTIsMTUgKzExOTIsMTUgQEAKICAgKiAgICAgICAgICAgICB1c2luZyBoZWxwZXIgbWFjcm8gQHJlZiBfX0xMX0FEQ19DSEFOTkVMX0lOVEVSTkFMX1RPX0VYVEVSTkFMKCkuCiAgICovCiAjZGVmaW5lIF9fTExfQURDX0RFQ0lNQUxfTkJfVE9fQ0hBTk5FTChfX0RFQ0lNQUxfTkJfXykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAoKChfX0RFQ0lNQUxfTkJfXykgPD0gOVUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgKCgoX19ERUNJTUFMX05CX18pIDw9IDlVTCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgID8gKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAoKF9fREVDSU1BTF9OQl9fKSA8PCBBRENfQ0hBTk5FTF9JRF9OVU1CRVJfQklUT0ZGU0VUX1BPUykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICBcCi0gICAgICAgKEFEQ19TTVBSMl9SRUdPRkZTRVQgfCAoKCh1aW50MzJfdCkgKDNVICogKF9fREVDSU1BTF9OQl9fKSkpIDw8IEFEQ19DSEFOTkVMX1NNUHhfQklUT0ZGU0VUX1BPUykpICAgICAgICAgXAorICAgICAgIChBRENfU01QUjJfUkVHT0ZGU0VUIHwgKCgodWludDMyX3QpICgzVUwgKiAoX19ERUNJTUFMX05CX18pKSkgPDwgQURDX0NIQU5ORUxfU01QeF9CSVRPRkZTRVRfUE9TKSkgICAgICAgICBcCiAgICAgICApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgKChfX0RFQ0lNQUxfTkJfXykgPDwgQURDX0NIQU5ORUxfSURfTlVNQkVSX0JJVE9GRlNFVF9QT1MpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgXAotICAgICAgIChBRENfU01QUjFfUkVHT0ZGU0VUIHwgKCgodWludDMyX3QpICgzVSAqICgoX19ERUNJTUFMX05CX18pIC0gMTBVKSkpIDw8IEFEQ19DSEFOTkVMX1NNUHhfQklUT0ZGU0VUX1BPUykpIFwKKyAgICAgICAoQURDX1NNUFIxX1JFR09GRlNFVCB8ICgoKHVpbnQzMl90KSAoM1VMICogKChfX0RFQ0lNQUxfTkJfXykgLSAxMFVMKSkpIDw8IEFEQ19DSEFOTkVMX1NNUHhfQklUT0ZGU0VUX1BPUykpIFwKICAgICAgICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICkKIApAQCAtMTI1MSw3ICsxMjUxLDcgQEAKICAgKiAgICAgICAgIFZhbHVlICIxIiBpZiB0aGUgY2hhbm5lbCBjb3JyZXNwb25kcyB0byBhIHBhcmFtZXRlciBkZWZpbml0aW9uIG9mIGEgQURDIGludGVybmFsIGNoYW5uZWwuCiAgICovCiAjZGVmaW5lIF9fTExfQURDX0lTX0NIQU5ORUxfSU5URVJOQUwoX19DSEFOTkVMX18pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAoKChfX0NIQU5ORUxfXykgJiBBRENfQ0hBTk5FTF9JRF9JTlRFUk5BTF9DSF9NQVNLKSAhPSAwVSkKKyAgKCgoX19DSEFOTkVMX18pICYgQURDX0NIQU5ORUxfSURfSU5URVJOQUxfQ0hfTUFTSykgIT0gMFVMKQogCiAvKioKICAgKiBAYnJpZWYgIEhlbHBlciBtYWNybyB0byBjb252ZXJ0IGEgY2hhbm5lbCBkZWZpbmVkIGZyb20gcGFyYW1ldGVyCkBAIC0xNDkzLDcgKzE0OTMsNyBAQAogICAqIEByZXR2YWwgVmFsdWUgYmV0d2VlbiBNaW5fRGF0YT0weDAwMCBhbmQgTWF4X0RhdGE9MHhGRkYKICAgKi8KICNkZWZpbmUgX19MTF9BRENfQU5BTE9HV0RfU0VUX1RIUkVTSE9MRF9SRVNPTFVUSU9OKF9fQURDX1JFU09MVVRJT05fXywgX19BV0RfVEhSRVNIT0xEX18pIFwKLSAgKChfX0FXRF9USFJFU0hPTERfXykgPDwgKChfX0FEQ19SRVNPTFVUSU9OX18pID4+IChBRENfQ1IxX1JFU19CSVRPRkZTRVRfUE9TIC0gMVUgKSkpCisgICgoX19BV0RfVEhSRVNIT0xEX18pIDw8ICgoX19BRENfUkVTT0xVVElPTl9fKSA+PiAoQURDX0NSMV9SRVNfQklUT0ZGU0VUX1BPUyAtIDFVTCApKSkKIAogLyoqCiAgICogQGJyaWVmICBIZWxwZXIgbWFjcm8gdG8gZ2V0IHRoZSB2YWx1ZSBvZiBBREMgYW5hbG9nIHdhdGNoZG9nIHRocmVzaG9sZCBoaWdoCkBAIC0xNTE1LDcgKzE1MTUsNyBAQAogICAqIEByZXR2YWwgVmFsdWUgYmV0d2VlbiBNaW5fRGF0YT0weDAwMCBhbmQgTWF4X0RhdGE9MHhGRkYKICAgKi8KICNkZWZpbmUgX19MTF9BRENfQU5BTE9HV0RfR0VUX1RIUkVTSE9MRF9SRVNPTFVUSU9OKF9fQURDX1JFU09MVVRJT05fXywgX19BV0RfVEhSRVNIT0xEXzEyX0JJVFNfXykgXAotICAoKF9fQVdEX1RIUkVTSE9MRF8xMl9CSVRTX18pID4+ICgoX19BRENfUkVTT0xVVElPTl9fKSA+PiAoQURDX0NSMV9SRVNfQklUT0ZGU0VUX1BPUyAtIDFVICkpKQorICAoKF9fQVdEX1RIUkVTSE9MRF8xMl9CSVRTX18pID4+ICgoX19BRENfUkVTT0xVVElPTl9fKSA+PiAoQURDX0NSMV9SRVNfQklUT0ZGU0VUX1BPUyAtIDFVTCApKSkKIAogI2lmIGRlZmluZWQoQURDX01VTFRJTU9ERV9TVVBQT1JUKQogLyoqCkBAIC0xNjAxLDcgKzE2MDEsNyBAQAogICAqIEByZXR2YWwgQURDIGNvbnZlcnNpb24gZGF0YSBlcXVpdmFsZW50IHZvbHRhZ2UgdmFsdWUgKHVuaXQ6IG1Wb2x0KQogICAqLwogI2RlZmluZSBfX0xMX0FEQ19ESUdJVEFMX1NDQUxFKF9fQURDX1JFU09MVVRJT05fXykgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgKDB4RkZGVSA+PiAoKF9fQURDX1JFU09MVVRJT05fXykgPj4gKEFEQ19DUjFfUkVTX0JJVE9GRlNFVF9QT1MgLSAxVSkpKQorICAoMHhGRkZVID4+ICgoX19BRENfUkVTT0xVVElPTl9fKSA+PiAoQURDX0NSMV9SRVNfQklUT0ZGU0VUX1BPUyAtIDFVTCkpKQogCiAvKioKICAgKiBAYnJpZWYgIEhlbHBlciBtYWNybyB0byBjb252ZXJ0IHRoZSBBREMgY29udmVyc2lvbiBkYXRhIGZyb20KQEAgLTE2MjMsOCArMTYyMyw4IEBACiAgICovCiAjZGVmaW5lIF9fTExfQURDX0NPTlZFUlRfREFUQV9SRVNPTFVUSU9OKF9fREFUQV9fLCBfX0FEQ19SRVNPTFVUSU9OX0NVUlJFTlRfXywgX19BRENfUkVTT0xVVElPTl9UQVJHRVRfXykgXAogICAoKChfX0RBVEFfXykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICA8PCAoKF9fQURDX1JFU09MVVRJT05fQ1VSUkVOVF9fKSA+PiAoQURDX0NSMV9SRVNfQklUT0ZGU0VUX1BPUyAtIDFVKSkpICAgICBcCi0gICA+PiAoKF9fQURDX1JFU09MVVRJT05fVEFSR0VUX18pID4+IChBRENfQ1IxX1JFU19CSVRPRkZTRVRfUE9TIC0gMVUpKSAgICAgICAgXAorICAgIDw8ICgoX19BRENfUkVTT0xVVElPTl9DVVJSRU5UX18pID4+IChBRENfQ1IxX1JFU19CSVRPRkZTRVRfUE9TIC0gMVVMKSkpICAgICBcCisgICA+PiAoKF9fQURDX1JFU09MVVRJT05fVEFSR0VUX18pID4+IChBRENfQ1IxX1JFU19CSVRPRkZTRVRfUE9TIC0gMVVMKSkgICAgICAgIFwKICAgKQogCiAvKioKQEAgLTE2NTEsNiArMTY1MSw0MiBAQAogICApCiAKIC8qKgorICAqIEBicmllZiAgSGVscGVyIG1hY3JvIHRvIGNhbGN1bGF0ZSBhbmFsb2cgcmVmZXJlbmNlIHZvbHRhZ2UgKFZyZWYrKQorICAqICAgICAgICAgKHVuaXQ6IG1Wb2x0KSBmcm9tIEFEQyBjb252ZXJzaW9uIGRhdGEgb2YgaW50ZXJuYWwgdm9sdGFnZQorICAqICAgICAgICAgcmVmZXJlbmNlIFZyZWZJbnQuCisgICogQG5vdGUgICBDb21wdXRhdGlvbiBpcyB1c2luZyBWcmVmSW50IGNhbGlicmF0aW9uIHZhbHVlCisgICogICAgICAgICBzdG9yZWQgaW4gc3lzdGVtIG1lbW9yeSBmb3IgZWFjaCBkZXZpY2UgZHVyaW5nIHByb2R1Y3Rpb24uCisgICogQG5vdGUgICBUaGlzIHZvbHRhZ2UgZGVwZW5kcyBvbiB1c2VyIGJvYXJkIGVudmlyb25tZW50OiB2b2x0YWdlIGxldmVsCisgICogICAgICAgICBjb25uZWN0ZWQgdG8gcGluIFZyZWYrLgorICAqICAgICAgICAgT24gZGV2aWNlcyB3aXRoIHNtYWxsIHBhY2thZ2UsIHRoZSBwaW4gVnJlZisgaXMgbm90IHByZXNlbnQKKyAgKiAgICAgICAgIGFuZCBpbnRlcm5hbGx5IGJvbmRlZCB0byBwaW4gVmRkYS4KKyAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWVzLCBjYWxpYnJhdGlvbiBkYXRhIG9mIGludGVybmFsIHZvbHRhZ2UgcmVmZXJlbmNlCisgICogICAgICAgICBWcmVmSW50IGNvcnJlc3BvbmRzIHRvIGEgcmVzb2x1dGlvbiBvZiAxMiBiaXRzLAorICAqICAgICAgICAgdGhpcyBpcyB0aGUgcmVjb21tZW5kZWQgQURDIHJlc29sdXRpb24gdG8gY29udmVydCB2b2x0YWdlIG9mCisgICogICAgICAgICBpbnRlcm5hbCB2b2x0YWdlIHJlZmVyZW5jZSBWcmVmSW50LgorICAqICAgICAgICAgT3RoZXJ3aXNlLCB0aGlzIG1hY3JvIHBlcmZvcm1zIHRoZSBwcm9jZXNzaW5nIHRvIHNjYWxlCisgICogICAgICAgICBBREMgY29udmVyc2lvbiBkYXRhIHRvIDEyIGJpdHMuCisgICogQHBhcmFtICBfX1ZSRUZJTlRfQURDX0RBVEFfXyBBREMgY29udmVyc2lvbiBkYXRhIChyZXNvbHV0aW9uIDEyIGJpdHMpCisgICogICAgICAgICBvZiBpbnRlcm5hbCB2b2x0YWdlIHJlZmVyZW5jZSBWcmVmSW50ICh1bml0OiBkaWdpdGFsIHZhbHVlKS4KKyAgKiBAcGFyYW0gIF9fQURDX1JFU09MVVRJT05fXyBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FEQ19SRVNPTFVUSU9OXzEyQgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FEQ19SRVNPTFVUSU9OXzEwQgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FEQ19SRVNPTFVUSU9OXzhCCisgICogICAgICAgICBAYXJnIEByZWYgTExfQURDX1JFU09MVVRJT05fNkIKKyAgKiBAcmV0dmFsIEFuYWxvZyByZWZlcmVuY2Ugdm9sdGFnZSAodW5pdDogbVYpCisgICovCisjZGVmaW5lIF9fTExfQURDX0NBTENfVlJFRkFOQUxPR19WT0xUQUdFKF9fVlJFRklOVF9BRENfREFUQV9fLFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19BRENfUkVTT0xVVElPTl9fKSAgICAgICAgICAgICAgICAgICBcCisgICgoKHVpbnQzMl90KSgqVlJFRklOVF9DQUxfQUREUikgKiBWUkVGSU5UX0NBTF9WUkVGKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgLyBfX0xMX0FEQ19DT05WRVJUX0RBVEFfUkVTT0xVVElPTigoX19WUkVGSU5UX0FEQ19EQVRBX18pLCAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fQURDX1JFU09MVVRJT05fXyksICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExMX0FEQ19SRVNPTFVUSU9OXzEyQikpCisKKy8qIE5vdGU6IE9uIGRldmljZSBTVE0zMkY0eDksIGNhbGlicmF0aW9uIHBhcmFtZXRlciBUU19DQUwyIGlzIG5vdCBhdmFpbGFibGUuICovCisvKiAgICAgICBUaGVyZWZvcmUsIGhlbHBlciBtYWNybyBfX0xMX0FEQ19DQUxDX1RFTVBFUkFUVVJFKCkgaXMgbm90IGF2YWlsYWJsZS4qLworLyogICAgICAgVXNlIGhlbHBlciBtYWNybyBAcmVmIF9fTExfQURDX0NBTENfVEVNUEVSQVRVUkVfVFlQX1BBUkFNUygpLiAgICAgICAgKi8KKyNpZiAhZGVmaW5lZChTVE0zMkY0NjkpICYmICFkZWZpbmVkKFNUTTMyRjQ3OXh4KSAmJiAhZGVmaW5lZChTVE0zMkY0Mjl4eCkgJiYgIWRlZmluZWQoU1RNMzJGNDM5eHgpCisvKioKICAgKiBAYnJpZWYgIEhlbHBlciBtYWNybyB0byBjYWxjdWxhdGUgdGhlIHRlbXBlcmF0dXJlICh1bml0OiBkZWdyZWUgQ2Vsc2l1cykKICAgKiAgICAgICAgIGZyb20gQURDIGNvbnZlcnNpb24gZGF0YSBvZiBpbnRlcm5hbCB0ZW1wZXJhdHVyZSBzZW5zb3IuCiAgICogQG5vdGUgICBDb21wdXRhdGlvbiBpcyB1c2luZyB0ZW1wZXJhdHVyZSBzZW5zb3IgY2FsaWJyYXRpb24gdmFsdWVzCkBAIC0xNjc3LDcgKzE3MTMsNyBAQAogICAqIEBub3RlICAgQW5hbG9nIHJlZmVyZW5jZSB2b2x0YWdlIChWcmVmKykgbXVzdCBiZSBlaXRoZXIga25vd24gZnJvbQogICAqICAgICAgICAgdXNlciBib2FyZCBlbnZpcm9ubWVudCBvciBjYW4gYmUgY2FsY3VsYXRlZCB1c2luZyBBREMgbWVhc3VyZW1lbnQKICAgKiAgICAgICAgIGFuZCBBREMgaGVscGVyIG1hY3JvIEByZWYgX19MTF9BRENfQ0FMQ19WUkVGQU5BTE9HX1ZPTFRBR0UoKS4KLSAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWUsIGNhbGlicmF0aW9uIGRhdGEgb2YgdGVtcGVyYXR1cmUgc2Vuc29yCisgICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllcywgY2FsaWJyYXRpb24gZGF0YSBvZiB0ZW1wZXJhdHVyZSBzZW5zb3IKICAgKiAgICAgICAgIGNvcnJlc3BvbmRzIHRvIGEgcmVzb2x1dGlvbiBvZiAxMiBiaXRzLAogICAqICAgICAgICAgdGhpcyBpcyB0aGUgcmVjb21tZW5kZWQgQURDIHJlc29sdXRpb24gdG8gY29udmVydCB2b2x0YWdlIG9mCiAgICogICAgICAgICB0ZW1wZXJhdHVyZSBzZW5zb3IuCkBAIC0xNzA4LDYgKzE3NDQsNyBAQAogICAgICkgLyAoaW50MzJfdCkoKGludDMyX3QpKlRFTVBTRU5TT1JfQ0FMMl9BRERSIC0gKGludDMyX3QpKlRFTVBTRU5TT1JfQ0FMMV9BRERSKSBcCiAgICApICsgVEVNUFNFTlNPUl9DQUwxX1RFTVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgKQorI2VuZGlmCiAKIC8qKgogICAqIEBicmllZiAgSGVscGVyIG1hY3JvIHRvIGNhbGN1bGF0ZSB0aGUgdGVtcGVyYXR1cmUgKHVuaXQ6IGRlZ3JlZSBDZWxzaXVzKQpAQCAtMTgyNSw3ICsxODYyLDcgQEAKICNpZiBkZWZpbmVkKEFEQ19NVUxUSU1PREVfU1VQUE9SVCkKIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9BRENfRE1BX0dldFJlZ0FkZHIoQURDX1R5cGVEZWYgKkFEQ3gsIHVpbnQzMl90IFJlZ2lzdGVyKQogewotICByZWdpc3RlciB1aW50MzJfdCBkYXRhX3JlZ19hZGRyID0gMFU7CisgIHVpbnQzMl90IGRhdGFfcmVnX2FkZHIgPSAwVUw7CiAgIAogICBpZiAoUmVnaXN0ZXIgPT0gTExfQURDX0RNQV9SRUdfUkVHVUxBUl9EQVRBKQogICB7CkBAIC0yMDgwLDcgKzIxMTcsNyBAQAogICAqIEBicmllZiAgU2V0IEFEQyBncm91cCByZWd1bGFyIGNvbnZlcnNpb24gdHJpZ2dlciBzb3VyY2U6CiAgICogICAgICAgICBpbnRlcm5hbCAoU1cgc3RhcnQpIG9yIGZyb20gZXh0ZXJuYWwgSVAgKHRpbWVyIGV2ZW50LAogICAqICAgICAgICAgZXh0ZXJuYWwgaW50ZXJydXB0IGxpbmUpLgotICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZSwgc2V0dGluZyBvZiBleHRlcm5hbCB0cmlnZ2VyIGVkZ2UgaXMgcGVyZm9ybWVkCisgICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllcywgc2V0dGluZyBvZiBleHRlcm5hbCB0cmlnZ2VyIGVkZ2UgaXMgcGVyZm9ybWVkCiAgICogICAgICAgICB1c2luZyBmdW5jdGlvbiBAcmVmIExMX0FEQ19SRUdfU3RhcnRDb252ZXJzaW9uRXh0VHJpZygpLgogICAqIEBub3RlICAgQXZhaWxhYmlsaXR5IG9mIHBhcmFtZXRlcnMgb2YgdHJpZ2dlciBzb3VyY2VzIGZyb20gdGltZXIgCiAgICogICAgICAgICBkZXBlbmRzIG9uIHRpbWVycyBhdmFpbGFiaWxpdHkgb24gdGhlIHNlbGVjdGVkIGRldmljZS4KQEAgLTIxMDksNyArMjE0Niw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9BRENfUkVHX1NldFRyaWdnZXJTb3VyY2UoQURDX1R5cGVEZWYgKkFEQ3gsIHVpbnQzMl90IFRyaWdnZXJTb3VyY2UpCiB7Ci0vKiBOb3RlOiBPbiB0aGlzIFNUTTMyIHNlcmllLCBBREMgZ3JvdXAgcmVndWxhciBleHRlcm5hbCB0cmlnZ2VyIGVkZ2UgICAgICAgICovCisvKiBOb3RlOiBPbiB0aGlzIFNUTTMyIHNlcmllcywgQURDIGdyb3VwIHJlZ3VsYXIgZXh0ZXJuYWwgdHJpZ2dlciBlZGdlICAgICAgICAqLwogLyogICAgICAgaXMgdXNlZCB0byBwZXJmb3JtIGEgQURDIGNvbnZlcnNpb24gc3RhcnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgIFRoaXMgZnVuY3Rpb24gZG9lcyBub3Qgc2V0IGV4dGVybmFsIHRyaWdnZXIgZWRnZS4gICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICBUaGlzIGZlYXR1cmUgaXMgc2V0IHVzaW5nIGZ1bmN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMjE1MywxMSArMjE5MCwxMSBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0FEQ19SRUdfR2V0VHJpZ2dlclNvdXJjZShBRENfVHlwZURlZiAqQURDeCkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgVHJpZ2dlclNvdXJjZSA9IFJFQURfQklUKEFEQ3gtPkNSMiwgQURDX0NSMl9FWFRTRUwgfCBBRENfQ1IyX0VYVEVOKTsKKyAgdWludDMyX3QgVHJpZ2dlclNvdXJjZSA9IFJFQURfQklUKEFEQ3gtPkNSMiwgQURDX0NSMl9FWFRTRUwgfCBBRENfQ1IyX0VYVEVOKTsKICAgCiAgIC8qIFZhbHVlIGZvciBzaGlmdCBvZiB7MDsgNDsgODsgMTJ9IGRlcGVuZGluZyBvbiB2YWx1ZSBvZiBiaXRmaWVsZCAgICAgICAgICAqLwogICAvKiBjb3JyZXNwb25kaW5nIHRvIEFEQ19DUjJfRVhURU4gezA7IDE7IDI7IDN9LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgcmVnaXN0ZXIgdWludDMyX3QgU2hpZnRFeHRlbiA9ICgoVHJpZ2dlclNvdXJjZSAmIEFEQ19DUjJfRVhURU4pID4+IChBRENfUkVHX1RSSUdfRVhURU5fQklUT0ZGU0VUX1BPUyAtIDJVKSk7CisgIHVpbnQzMl90IFNoaWZ0RXh0ZW4gPSAoKFRyaWdnZXJTb3VyY2UgJiBBRENfQ1IyX0VYVEVOKSA+PiAoQURDX1JFR19UUklHX0VYVEVOX0JJVE9GRlNFVF9QT1MgLSAyVUwpKTsKICAgCiAgIC8qIFNldCBiaXRmaWVsZCBjb3JyZXNwb25kaW5nIHRvIEFEQ19DUjJfRVhURU4gYW5kIEFEQ19DUjJfRVhUU0VMICAgICAgICAgICAqLwogICAvKiB0byBtYXRjaCB3aXRoIHRyaWdnZXJzIGxpdGVyYWxzIGRlZmluaXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTIxODYsNyArMjIyMyw3IEBACiAvKioKICAgKiBAYnJpZWYgIEdldCBBREMgZ3JvdXAgcmVndWxhciBjb252ZXJzaW9uIHRyaWdnZXIgcG9sYXJpdHkuCiAgICogQG5vdGUgICBBcHBsaWNhYmxlIG9ubHkgZm9yIHRyaWdnZXIgc291cmNlIHNldCB0byBleHRlcm5hbCB0cmlnZ2VyLgotICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZSwgc2V0dGluZyBvZiBleHRlcm5hbCB0cmlnZ2VyIGVkZ2UgaXMgcGVyZm9ybWVkCisgICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllcywgc2V0dGluZyBvZiBleHRlcm5hbCB0cmlnZ2VyIGVkZ2UgaXMgcGVyZm9ybWVkCiAgICogICAgICAgICB1c2luZyBmdW5jdGlvbiBAcmVmIExMX0FEQ19SRUdfU3RhcnRDb252ZXJzaW9uRXh0VHJpZygpLgogICAqIEBybXRvbGwgQ1IyICAgICAgRVhURU4gICAgICAgICAgTExfQURDX1JFR19HZXRUcmlnZ2VyRWRnZQogICAqIEBwYXJhbSAgQURDeCBBREMgaW5zdGFuY2UKQEAgLTIyMjgsNyArMjI2NSw3IEBACiAgICogICAgICAgICAgICAgaGlnaGVzdCBjaGFubmVsIG51bWJlcikuCiAgICogICAgICAgICAgIFNlcXVlbmNlciByYW5rcyBhcmUgc2VsZWN0ZWQgdXNpbmcKICAgKiAgICAgICAgICAgZnVuY3Rpb24gIkxMX0FEQ19SRUdfU2V0U2VxdWVuY2VyQ2hhbm5lbHMoKSIuCi0gICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllLCBncm91cCByZWd1bGFyIHNlcXVlbmNlciBjb25maWd1cmF0aW9uCisgICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllcywgZ3JvdXAgcmVndWxhciBzZXF1ZW5jZXIgY29uZmlndXJhdGlvbgogICAqICAgICAgICAgaXMgY29uZGl0aW9uZWQgdG8gQURDIGluc3RhbmNlIHNlcXVlbmNlciBtb2RlLgogICAqICAgICAgICAgSWYgQURDIGluc3RhbmNlIHNlcXVlbmNlciBtb2RlIGlzIGRpc2FibGVkLCBzZXF1ZW5jZXJzIG9mCiAgICogICAgICAgICBhbGwgZ3JvdXBzIChncm91cCByZWd1bGFyLCBncm91cCBpbmplY3RlZCkgY2FuIGJlIGNvbmZpZ3VyZWQKQEAgLTIyODksNyArMjMyNiw3IEBACiAgICogICAgICAgICAgICAgaGlnaGVzdCBjaGFubmVsIG51bWJlcikuCiAgICogICAgICAgICAgIFNlcXVlbmNlciByYW5rcyBhcmUgc2VsZWN0ZWQgdXNpbmcKICAgKiAgICAgICAgICAgZnVuY3Rpb24gIkxMX0FEQ19SRUdfU2V0U2VxdWVuY2VyQ2hhbm5lbHMoKSIuCi0gICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllLCBncm91cCByZWd1bGFyIHNlcXVlbmNlciBjb25maWd1cmF0aW9uCisgICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllcywgZ3JvdXAgcmVndWxhciBzZXF1ZW5jZXIgY29uZmlndXJhdGlvbgogICAqICAgICAgICAgaXMgY29uZGl0aW9uZWQgdG8gQURDIGluc3RhbmNlIHNlcXVlbmNlciBtb2RlLgogICAqICAgICAgICAgSWYgQURDIGluc3RhbmNlIHNlcXVlbmNlciBtb2RlIGlzIGRpc2FibGVkLCBzZXF1ZW5jZXJzIG9mCiAgICogICAgICAgICBhbGwgZ3JvdXBzIChncm91cCByZWd1bGFyLCBncm91cCBpbmplY3RlZCkgY2FuIGJlIGNvbmZpZ3VyZWQKQEAgLTIzNzksMTMgKzI0MTYsMTMgQEAKICAgKiBAbm90ZSAgIFRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgY29uZmlndXJhdGlvbiBvZjoKICAgKiAgICAgICAgIC0gQ2hhbm5lbHMgb3JkZXJpbmcgaW50byBlYWNoIHJhbmsgb2Ygc2NhbiBzZXF1ZW5jZToKICAgKiAgICAgICAgICAgd2hhdGV2ZXIgY2hhbm5lbCBjYW4gYmUgcGxhY2VkIGludG8gd2hhdGV2ZXIgcmFuay4KLSAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWUsIEFEQyBncm91cCByZWd1bGFyIHNlcXVlbmNlciBpcworICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZXMsIEFEQyBncm91cCByZWd1bGFyIHNlcXVlbmNlciBpcwogICAqICAgICAgICAgZnVsbHkgY29uZmlndXJhYmxlOiBzZXF1ZW5jZXIgbGVuZ3RoIGFuZCBlYWNoIHJhbmsKICAgKiAgICAgICAgIGFmZmVjdGF0aW9uIHRvIGEgY2hhbm5lbCBhcmUgY29uZmlndXJhYmxlLgogICAqICAgICAgICAgUmVmZXIgdG8gZGVzY3JpcHRpb24gb2YgZnVuY3Rpb24gQHJlZiBMTF9BRENfUkVHX1NldFNlcXVlbmNlckxlbmd0aCgpLgogICAqIEBub3RlICAgRGVwZW5kaW5nIG9uIGRldmljZXMgYW5kIHBhY2thZ2VzLCBzb21lIGNoYW5uZWxzIG1heSBub3QgYmUgYXZhaWxhYmxlLgogICAqICAgICAgICAgUmVmZXIgdG8gZGV2aWNlIGRhdGFzaGVldCBmb3IgY2hhbm5lbHMgYXZhaWxhYmlsaXR5LgotICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZSwgdG8gbWVhc3VyZSBpbnRlcm5hbCBjaGFubmVscyAoVnJlZkludCwKKyAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWVzLCB0byBtZWFzdXJlIGludGVybmFsIGNoYW5uZWxzIChWcmVmSW50LAogICAqICAgICAgICAgVGVtcFNlbnNvciwgLi4uKSwgbWVhc3VyZW1lbnQgcGF0aHMgdG8gaW50ZXJuYWwgY2hhbm5lbHMgbXVzdCBiZQogICAqICAgICAgICAgZW5hYmxlZCBzZXBhcmF0ZWx5LgogICAqICAgICAgICAgVGhpcyBjYW4gYmUgZG9uZSB1c2luZyBmdW5jdGlvbiBAcmVmIExMX0FEQ19TZXRDb21tb25QYXRoSW50ZXJuYWxDaCgpLgpAQCAtMjQ1Nyw3ICsyNDk0LDcgQEAKICAgLyogaW4gcmVnaXN0ZXIgYW5kIHJlZ2lzdGVyIHBvc2l0aW9uIGRlcGVuZGluZyBvbiBwYXJhbWV0ZXIgIlJhbmsiLiAgICAgICAgICovCiAgIC8qIFBhcmFtZXRlcnMgIlJhbmsiIGFuZCAiQ2hhbm5lbCIgYXJlIHVzZWQgd2l0aCBtYXNrcyBiZWNhdXNlIGNvbnRhaW5pbmcgICAqLwogICAvKiBvdGhlciBiaXRzIHJlc2VydmVkIGZvciBvdGhlciBwdXJwb3NlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgcmVnaXN0ZXIgX19JTyB1aW50MzJfdCAqcHJlZyA9IF9fQURDX1BUUl9SRUdfT0ZGU0VUKEFEQ3gtPlNRUjEsIF9fQURDX01BU0tfU0hJRlQoUmFuaywgQURDX1JFR19TUVJYX1JFR09GRlNFVF9NQVNLKSk7CisgIF9fSU8gdWludDMyX3QgKnByZWcgPSBfX0FEQ19QVFJfUkVHX09GRlNFVChBREN4LT5TUVIxLCBfX0FEQ19NQVNLX1NISUZUKFJhbmssIEFEQ19SRUdfU1FSWF9SRUdPRkZTRVRfTUFTSykpOwogICAKICAgTU9ESUZZX1JFRygqcHJlZywKICAgICAgICAgICAgICBBRENfQ0hBTk5FTF9JRF9OVU1CRVJfTUFTSyA8PCAoUmFuayAmIEFEQ19SRUdfUkFOS19JRF9TUVJYX01BU0spLApAQCAtMjQ2Nyw3ICsyNTA0LDcgQEAKIC8qKgogICAqIEBicmllZiAgR2V0IEFEQyBncm91cCByZWd1bGFyIHNlcXVlbmNlOiBjaGFubmVsIG9uIHRoZSBzZWxlY3RlZAogICAqICAgICAgICAgc2NhbiBzZXF1ZW5jZSByYW5rLgotICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZSwgQURDIGdyb3VwIHJlZ3VsYXIgc2VxdWVuY2VyIGlzCisgICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllcywgQURDIGdyb3VwIHJlZ3VsYXIgc2VxdWVuY2VyIGlzCiAgICogICAgICAgICBmdWxseSBjb25maWd1cmFibGU6IHNlcXVlbmNlciBsZW5ndGggYW5kIGVhY2ggcmFuawogICAqICAgICAgICAgYWZmZWN0YXRpb24gdG8gYSBjaGFubmVsIGFyZSBjb25maWd1cmFibGUuCiAgICogICAgICAgICBSZWZlciB0byBkZXNjcmlwdGlvbiBvZiBmdW5jdGlvbiBAcmVmIExMX0FEQ19SRUdfU2V0U2VxdWVuY2VyTGVuZ3RoKCkuCkBAIC0yNTUwLDcgKzI1ODcsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0FEQ19SRUdfR2V0U2VxdWVuY2VyUmFua3MoQURDX1R5cGVEZWYgKkFEQ3gsIHVpbnQzMl90IFJhbmspCiB7Ci0gIHJlZ2lzdGVyIF9fSU8gdWludDMyX3QgKnByZWcgPSBfX0FEQ19QVFJfUkVHX09GRlNFVChBREN4LT5TUVIxLCBfX0FEQ19NQVNLX1NISUZUKFJhbmssIEFEQ19SRUdfU1FSWF9SRUdPRkZTRVRfTUFTSykpOworICBfX0lPIHVpbnQzMl90ICpwcmVnID0gX19BRENfUFRSX1JFR19PRkZTRVQoQURDeC0+U1FSMSwgX19BRENfTUFTS19TSElGVChSYW5rLCBBRENfUkVHX1NRUlhfUkVHT0ZGU0VUX01BU0spKTsKICAgCiAgIHJldHVybiAodWludDMyX3QpIChSRUFEX0JJVCgqcHJlZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFEQ19DSEFOTkVMX0lEX05VTUJFUl9NQVNLIDw8IChSYW5rICYgQURDX1JFR19SQU5LX0lEX1NRUlhfTUFTSykpCkBAIC0yNzE1LDcgKzI3NTIsNyBAQAogICAqIEBicmllZiAgU2V0IEFEQyBncm91cCBpbmplY3RlZCBjb252ZXJzaW9uIHRyaWdnZXIgc291cmNlOgogICAqICAgICAgICAgaW50ZXJuYWwgKFNXIHN0YXJ0KSBvciBmcm9tIGV4dGVybmFsIElQICh0aW1lciBldmVudCwKICAgKiAgICAgICAgIGV4dGVybmFsIGludGVycnVwdCBsaW5lKS4KLSAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWUsIHNldHRpbmcgb2YgZXh0ZXJuYWwgdHJpZ2dlciBlZGdlIGlzIHBlcmZvcm1lZAorICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZXMsIHNldHRpbmcgb2YgZXh0ZXJuYWwgdHJpZ2dlciBlZGdlIGlzIHBlcmZvcm1lZAogICAqICAgICAgICAgdXNpbmcgZnVuY3Rpb24gQHJlZiBMTF9BRENfSU5KX1N0YXJ0Q29udmVyc2lvbkV4dFRyaWcoKS4KICAgKiBAbm90ZSAgIEF2YWlsYWJpbGl0eSBvZiBwYXJhbWV0ZXJzIG9mIHRyaWdnZXIgc291cmNlcyBmcm9tIHRpbWVyIAogICAqICAgICAgICAgZGVwZW5kcyBvbiB0aW1lcnMgYXZhaWxhYmlsaXR5IG9uIHRoZSBzZWxlY3RlZCBkZXZpY2UuCkBAIC0yNzQ0LDcgKzI3ODEsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfQURDX0lOSl9TZXRUcmlnZ2VyU291cmNlKEFEQ19UeXBlRGVmICpBREN4LCB1aW50MzJfdCBUcmlnZ2VyU291cmNlKQogewotLyogTm90ZTogT24gdGhpcyBTVE0zMiBzZXJpZSwgQURDIGdyb3VwIGluamVjdGVkIGV4dGVybmFsIHRyaWdnZXIgZWRnZSAgICAgICAqLworLyogTm90ZTogT24gdGhpcyBTVE0zMiBzZXJpZXMsIEFEQyBncm91cCBpbmplY3RlZCBleHRlcm5hbCB0cmlnZ2VyIGVkZ2UgICAgICAgKi8KIC8qICAgICAgIGlzIHVzZWQgdG8gcGVyZm9ybSBhIEFEQyBjb252ZXJzaW9uIHN0YXJ0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IHNldCBleHRlcm5hbCB0cmlnZ2VyIGVkZ2UuICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgVGhpcyBmZWF0dXJlIGlzIHNldCB1c2luZyBmdW5jdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTI3ODgsMTEgKzI4MjUsMTEgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9BRENfSU5KX0dldFRyaWdnZXJTb3VyY2UoQURDX1R5cGVEZWYgKkFEQ3gpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IFRyaWdnZXJTb3VyY2UgPSBSRUFEX0JJVChBREN4LT5DUjIsIEFEQ19DUjJfSkVYVFNFTCB8IEFEQ19DUjJfSkVYVEVOKTsKKyAgdWludDMyX3QgVHJpZ2dlclNvdXJjZSA9IFJFQURfQklUKEFEQ3gtPkNSMiwgQURDX0NSMl9KRVhUU0VMIHwgQURDX0NSMl9KRVhURU4pOwogICAKICAgLyogVmFsdWUgZm9yIHNoaWZ0IG9mIHswOyA0OyA4OyAxMn0gZGVwZW5kaW5nIG9uIHZhbHVlIG9mIGJpdGZpZWxkICAgICAgICAgICovCiAgIC8qIGNvcnJlc3BvbmRpbmcgdG8gQURDX0NSMl9KRVhURU4gezA7IDE7IDI7IDN9LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICByZWdpc3RlciB1aW50MzJfdCBTaGlmdEV4dGVuID0gKChUcmlnZ2VyU291cmNlICYgQURDX0NSMl9KRVhURU4pID4+IChBRENfSU5KX1RSSUdfRVhURU5fQklUT0ZGU0VUX1BPUyAtIDJVKSk7CisgIHVpbnQzMl90IFNoaWZ0RXh0ZW4gPSAoKFRyaWdnZXJTb3VyY2UgJiBBRENfQ1IyX0pFWFRFTikgPj4gKEFEQ19JTkpfVFJJR19FWFRFTl9CSVRPRkZTRVRfUE9TIC0gMlVMKSk7CiAgIAogICAvKiBTZXQgYml0ZmllbGQgY29ycmVzcG9uZGluZyB0byBBRENfQ1IyX0pFWFRFTiBhbmQgQURDX0NSMl9KRVhUU0VMICAgICAgICAgKi8KICAgLyogdG8gbWF0Y2ggd2l0aCB0cmlnZ2VycyBsaXRlcmFscyBkZWZpbml0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0yODM5LDcgKzI4NzYsNyBAQAogICAqICAgICAgICAgLSBTZXF1ZW5jZSBsZW5ndGg6IE51bWJlciBvZiByYW5rcyBpbiB0aGUgc2NhbiBzZXF1ZW5jZS4KICAgKiAgICAgICAgIC0gU2VxdWVuY2UgZGlyZWN0aW9uOiBVbmxlc3Mgc3BlY2lmaWVkIGluIHBhcmFtZXRlcnMsIHNlcXVlbmNlcgogICAqICAgICAgICAgICBzY2FuIGRpcmVjdGlvbiBpcyBmb3J3YXJkIChmcm9tIHJhbmsgMSB0byByYW5rIG4pLgotICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZSwgZ3JvdXAgaW5qZWN0ZWQgc2VxdWVuY2VyIGNvbmZpZ3VyYXRpb24KKyAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWVzLCBncm91cCBpbmplY3RlZCBzZXF1ZW5jZXIgY29uZmlndXJhdGlvbgogICAqICAgICAgICAgaXMgY29uZGl0aW9uZWQgdG8gQURDIGluc3RhbmNlIHNlcXVlbmNlciBtb2RlLgogICAqICAgICAgICAgSWYgQURDIGluc3RhbmNlIHNlcXVlbmNlciBtb2RlIGlzIGRpc2FibGVkLCBzZXF1ZW5jZXJzIG9mCiAgICogICAgICAgICBhbGwgZ3JvdXBzIChncm91cCByZWd1bGFyLCBncm91cCBpbmplY3RlZCkgY2FuIGJlIGNvbmZpZ3VyZWQKQEAgLTI4NjcsNyArMjkwNCw3IEBACiAgICogICAgICAgICAtIFNlcXVlbmNlIGxlbmd0aDogTnVtYmVyIG9mIHJhbmtzIGluIHRoZSBzY2FuIHNlcXVlbmNlLgogICAqICAgICAgICAgLSBTZXF1ZW5jZSBkaXJlY3Rpb246IFVubGVzcyBzcGVjaWZpZWQgaW4gcGFyYW1ldGVycywgc2VxdWVuY2VyCiAgICogICAgICAgICAgIHNjYW4gZGlyZWN0aW9uIGlzIGZvcndhcmQgKGZyb20gcmFuayAxIHRvIHJhbmsgbikuCi0gICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllLCBncm91cCBpbmplY3RlZCBzZXF1ZW5jZXIgY29uZmlndXJhdGlvbgorICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZXMsIGdyb3VwIGluamVjdGVkIHNlcXVlbmNlciBjb25maWd1cmF0aW9uCiAgICogICAgICAgICBpcyBjb25kaXRpb25lZCB0byBBREMgaW5zdGFuY2Ugc2VxdWVuY2VyIG1vZGUuCiAgICogICAgICAgICBJZiBBREMgaW5zdGFuY2Ugc2VxdWVuY2VyIG1vZGUgaXMgZGlzYWJsZWQsIHNlcXVlbmNlcnMgb2YKICAgKiAgICAgICAgIGFsbCBncm91cHMgKGdyb3VwIHJlZ3VsYXIsIGdyb3VwIGluamVjdGVkKSBjYW4gYmUgY29uZmlndXJlZApAQCAtMjkyNiw3ICsyOTYzLDcgQEAKICAgKiAgICAgICAgIHNlcXVlbmNlIHJhbmsuCiAgICogQG5vdGUgICBEZXBlbmRpbmcgb24gZGV2aWNlcyBhbmQgcGFja2FnZXMsIHNvbWUgY2hhbm5lbHMgbWF5IG5vdCBiZSBhdmFpbGFibGUuCiAgICogICAgICAgICBSZWZlciB0byBkZXZpY2UgZGF0YXNoZWV0IGZvciBjaGFubmVscyBhdmFpbGFiaWxpdHkuCi0gICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllLCB0byBtZWFzdXJlIGludGVybmFsIGNoYW5uZWxzIChWcmVmSW50LAorICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZXMsIHRvIG1lYXN1cmUgaW50ZXJuYWwgY2hhbm5lbHMgKFZyZWZJbnQsCiAgICogICAgICAgICBUZW1wU2Vuc29yLCAuLi4pLCBtZWFzdXJlbWVudCBwYXRocyB0byBpbnRlcm5hbCBjaGFubmVscyBtdXN0IGJlCiAgICogICAgICAgICBlbmFibGVkIHNlcGFyYXRlbHkuCiAgICogICAgICAgICBUaGlzIGNhbiBiZSBkb25lIHVzaW5nIGZ1bmN0aW9uIEByZWYgTExfQURDX1NldENvbW1vblBhdGhJbnRlcm5hbENoKCkuCkBAIC0yOTc0LDExICszMDExLDExIEBACiAgIC8qIGluIHJlZ2lzdGVyIGRlcGVuZGluZyBvbiBwYXJhbWV0ZXIgIlJhbmsiLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiBQYXJhbWV0ZXJzICJSYW5rIiBhbmQgIkNoYW5uZWwiIGFyZSB1c2VkIHdpdGggbWFza3MgYmVjYXVzZSBjb250YWluaW5nICAgKi8KICAgLyogb3RoZXIgYml0cyByZXNlcnZlZCBmb3Igb3RoZXIgcHVycG9zZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIHJlZ2lzdGVyIHVpbnQzMl90IHRtcHJlZzEgPSAoUkVBRF9CSVQoQURDeC0+SlNRUiwgQURDX0pTUVJfSkwpID4+IEFEQ19KU1FSX0pMX1BvcykgKyAxVTsKKyAgdWludDMyX3QgdG1wcmVnMSA9IChSRUFEX0JJVChBREN4LT5KU1FSLCBBRENfSlNRUl9KTCkgPj4gQURDX0pTUVJfSkxfUG9zKSArIDFVTDsKICAgCiAgIE1PRElGWV9SRUcoQURDeC0+SlNRUiwKLSAgICAgICAgICAgICBBRENfQ0hBTk5FTF9JRF9OVU1CRVJfTUFTSyA8PCAoNVUgKiAodWludDhfdCkoKChSYW5rKSArIDNVKSAtICh0bXByZWcxKSkpLAotICAgICAgICAgICAgIChDaGFubmVsICYgQURDX0NIQU5ORUxfSURfTlVNQkVSX01BU0spIDw8ICg1VSAqICh1aW50OF90KSgoKFJhbmspICsgM1UpIC0gKHRtcHJlZzEpKSkpOworICAgICAgICAgICAgIEFEQ19DSEFOTkVMX0lEX05VTUJFUl9NQVNLIDw8ICg1VUwgKiAodWludDhfdCkoKChSYW5rKSArIDNVTCkgLSAodG1wcmVnMSkpKSwKKyAgICAgICAgICAgICAoQ2hhbm5lbCAmIEFEQ19DSEFOTkVMX0lEX05VTUJFUl9NQVNLKSA8PCAoNVVMICogKHVpbnQ4X3QpKCgoUmFuaykgKyAzVUwpIC0gKHRtcHJlZzEpKSkpOwogfQogCiAvKioKQEAgLTMwMzksMTEgKzMwNzYsMTEgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9BRENfSU5KX0dldFNlcXVlbmNlclJhbmtzKEFEQ19UeXBlRGVmICpBREN4LCB1aW50MzJfdCBSYW5rKQogewotICByZWdpc3RlciB1aW50MzJfdCB0bXByZWcxID0gKFJFQURfQklUKEFEQ3gtPkpTUVIsIEFEQ19KU1FSX0pMKSA+PiBBRENfSlNRUl9KTF9Qb3MpICArIDFVOworICB1aW50MzJfdCB0bXByZWcxID0gKFJFQURfQklUKEFEQ3gtPkpTUVIsIEFEQ19KU1FSX0pMKSA+PiBBRENfSlNRUl9KTF9Qb3MpICArIDFVTDsKICAgCiAgIHJldHVybiAodWludDMyX3QpKFJFQURfQklUKEFEQ3gtPkpTUVIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFEQ19DSEFOTkVMX0lEX05VTUJFUl9NQVNLIDw8ICg1VSAqICh1aW50OF90KSgoKFJhbmspICsgM1UpIC0gKHRtcHJlZzEpKSkpCi0gICAgICAgICAgICAgICAgICAgID4+ICg1VSAqICh1aW50OF90KSgoKFJhbmspICsgM1UpIC0gKHRtcHJlZzEpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQURDX0NIQU5ORUxfSURfTlVNQkVSX01BU0sgPDwgKDVVTCAqICh1aW50OF90KSgoKFJhbmspICsgM1VMKSAtICh0bXByZWcxKSkpKQorICAgICAgICAgICAgICAgICAgICA+PiAoNVVMICogKHVpbnQ4X3QpKCgoUmFuaykgKyAzVUwpIC0gKHRtcHJlZzEpKSkKICAgICAgICAgICAgICAgICAgICApOwogfQogCkBAIC0zMTE5LDcgKzMxNTYsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfQURDX0lOSl9TZXRPZmZzZXQoQURDX1R5cGVEZWYgKkFEQ3gsIHVpbnQzMl90IFJhbmssIHVpbnQzMl90IE9mZnNldExldmVsKQogewotICByZWdpc3RlciBfX0lPIHVpbnQzMl90ICpwcmVnID0gX19BRENfUFRSX1JFR19PRkZTRVQoQURDeC0+Sk9GUjEsIF9fQURDX01BU0tfU0hJRlQoUmFuaywgQURDX0lOSl9KT0ZSWF9SRUdPRkZTRVRfTUFTSykpOworICBfX0lPIHVpbnQzMl90ICpwcmVnID0gX19BRENfUFRSX1JFR19PRkZTRVQoQURDeC0+Sk9GUjEsIF9fQURDX01BU0tfU0hJRlQoUmFuaywgQURDX0lOSl9KT0ZSWF9SRUdPRkZTRVRfTUFTSykpOwogICAKICAgTU9ESUZZX1JFRygqcHJlZywKICAgICAgICAgICAgICBBRENfSk9GUjFfSk9GRlNFVDEsCkBAIC0zMTQ2LDcgKzMxODMsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0FEQ19JTkpfR2V0T2Zmc2V0KEFEQ19UeXBlRGVmICpBREN4LCB1aW50MzJfdCBSYW5rKQogewotICByZWdpc3RlciBfX0lPIHVpbnQzMl90ICpwcmVnID0gX19BRENfUFRSX1JFR19PRkZTRVQoQURDeC0+Sk9GUjEsIF9fQURDX01BU0tfU0hJRlQoUmFuaywgQURDX0lOSl9KT0ZSWF9SRUdPRkZTRVRfTUFTSykpOworICBfX0lPIHVpbnQzMl90ICpwcmVnID0gX19BRENfUFRSX1JFR19PRkZTRVQoQURDeC0+Sk9GUjEsIF9fQURDX01BU0tfU0hJRlQoUmFuaywgQURDX0lOSl9KT0ZSWF9SRUdPRkZTRVRfTUFTSykpOwogICAKICAgcmV0dXJuICh1aW50MzJfdCkoUkVBRF9CSVQoKnByZWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFEQ19KT0ZSMV9KT0ZGU0VUMSkKQEAgLTMxNzUsNyArMzIxMiw3IEBACiAgICogICAgICAgICBUU190ZW1wLCAuLi4pLgogICAqIEBub3RlICAgQ29udmVyc2lvbiB0aW1lIGlzIHRoZSBhZGRpdGlvbiBvZiBzYW1wbGluZyB0aW1lIGFuZCBwcm9jZXNzaW5nIHRpbWUuCiAgICogICAgICAgICBSZWZlciB0byByZWZlcmVuY2UgbWFudWFsIGZvciBBREMgcHJvY2Vzc2luZyB0aW1lIG9mCi0gICogICAgICAgICB0aGlzIFNUTTMyIHNlcmllLgorICAqICAgICAgICAgdGhpcyBTVE0zMiBzZXJpZXMuCiAgICogQG5vdGUgICBJbiBjYXNlIG9mIEFEQyBjb252ZXJzaW9uIG9mIGludGVybmFsIGNoYW5uZWwgKFZyZWZJbnQsCiAgICogICAgICAgICB0ZW1wZXJhdHVyZSBzZW5zb3IsIC4uLiksIGEgc2FtcGxpbmcgdGltZSBtaW5pbXVtIHZhbHVlCiAgICogICAgICAgICBpcyByZXF1aXJlZC4KQEAgLTMyNDMsNyArMzI4MCw3IEBACiAgIC8qIGluIHJlZ2lzdGVyIGFuZCByZWdpc3RlciBwb3NpdGlvbiBkZXBlbmRpbmcgb24gcGFyYW1ldGVyICJDaGFubmVsIi4gICAgICAqLwogICAvKiBQYXJhbWV0ZXIgIkNoYW5uZWwiIGlzIHVzZWQgd2l0aCBtYXNrcyBiZWNhdXNlIGNvbnRhaW5pbmcgICAgICAgICAgICAgICAgKi8KICAgLyogb3RoZXIgYml0cyByZXNlcnZlZCBmb3Igb3RoZXIgcHVycG9zZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIHJlZ2lzdGVyIF9fSU8gdWludDMyX3QgKnByZWcgPSBfX0FEQ19QVFJfUkVHX09GRlNFVChBREN4LT5TTVBSMSwgX19BRENfTUFTS19TSElGVChDaGFubmVsLCBBRENfQ0hBTk5FTF9TTVBSWF9SRUdPRkZTRVRfTUFTSykpOworICBfX0lPIHVpbnQzMl90ICpwcmVnID0gX19BRENfUFRSX1JFR19PRkZTRVQoQURDeC0+U01QUjEsIF9fQURDX01BU0tfU0hJRlQoQ2hhbm5lbCwgQURDX0NIQU5ORUxfU01QUlhfUkVHT0ZGU0VUX01BU0spKTsKICAgCiAgIE1PRElGWV9SRUcoKnByZWcsCiAgICAgICAgICAgICAgQURDX1NNUFIyX1NNUDAgPDwgX19BRENfTUFTS19TSElGVChDaGFubmVsLCBBRENfQ0hBTk5FTF9TTVB4X0JJVE9GRlNFVF9NQVNLKSwKQEAgLTMyNTcsNyArMzI5NCw3IEBACiAgICogICAgICAgICBvZiBjaGFubmVsIG1hcHBlZCBvbiBBREMgZ3JvdXAgcmVndWxhciBvciBpbmplY3RlZC4KICAgKiBAbm90ZSAgIENvbnZlcnNpb24gdGltZSBpcyB0aGUgYWRkaXRpb24gb2Ygc2FtcGxpbmcgdGltZSBhbmQgcHJvY2Vzc2luZyB0aW1lLgogICAqICAgICAgICAgUmVmZXIgdG8gcmVmZXJlbmNlIG1hbnVhbCBmb3IgQURDIHByb2Nlc3NpbmcgdGltZSBvZgotICAqICAgICAgICAgdGhpcyBTVE0zMiBzZXJpZS4KKyAgKiAgICAgICAgIHRoaXMgU1RNMzIgc2VyaWVzLgogICAqIEBybXRvbGwgU01QUjEgICAgU01QMTggICAgICAgICAgTExfQURDX0dldENoYW5uZWxTYW1wbGluZ1RpbWVcbgogICAqICAgICAgICAgU01QUjEgICAgU01QMTcgICAgICAgICAgTExfQURDX0dldENoYW5uZWxTYW1wbGluZ1RpbWVcbgogICAqICAgICAgICAgU01QUjEgICAgU01QMTYgICAgICAgICAgTExfQURDX0dldENoYW5uZWxTYW1wbGluZ1RpbWVcbgpAQCAtMzMxNiw3ICszMzUzLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9BRENfR2V0Q2hhbm5lbFNhbXBsaW5nVGltZShBRENfVHlwZURlZiAqQURDeCwgdWludDMyX3QgQ2hhbm5lbCkKIHsKLSAgcmVnaXN0ZXIgX19JTyB1aW50MzJfdCAqcHJlZyA9IF9fQURDX1BUUl9SRUdfT0ZGU0VUKEFEQ3gtPlNNUFIxLCBfX0FEQ19NQVNLX1NISUZUKENoYW5uZWwsIEFEQ19DSEFOTkVMX1NNUFJYX1JFR09GRlNFVF9NQVNLKSk7CisgIF9fSU8gdWludDMyX3QgKnByZWcgPSBfX0FEQ19QVFJfUkVHX09GRlNFVChBREN4LT5TTVBSMSwgX19BRENfTUFTS19TSElGVChDaGFubmVsLCBBRENfQ0hBTk5FTF9TTVBSWF9SRUdPRkZTRVRfTUFTSykpOwogICAKICAgcmV0dXJuICh1aW50MzJfdCkoUkVBRF9CSVQoKnByZWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFEQ19TTVBSMl9TTVAwIDw8IF9fQURDX01BU0tfU0hJRlQoQ2hhbm5lbCwgQURDX0NIQU5ORUxfU01QeF9CSVRPRkZTRVRfTUFTSykpCkBAIC0zMzQxLDcgKzMzNzgsNyBAQAogICAqIEBub3RlICAgSW4gY2FzZSBvZiBuZWVkIHRvIGRlZmluZSBhIHNpbmdsZSBjaGFubmVsIHRvIG1vbml0b3IKICAgKiAgICAgICAgIHdpdGggYW5hbG9nIHdhdGNoZG9nIGZyb20gc2VxdWVuY2VyIGNoYW5uZWwgZGVmaW5pdGlvbiwKICAgKiAgICAgICAgIHVzZSBoZWxwZXIgbWFjcm8gQHJlZiBfX0xMX0FEQ19BTkFMT0dXRF9DSEFOTkVMX0dST1VQKCkuCi0gICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllLCB0aGVyZSBpcyBvbmx5IDEga2luZCBvZiBhbmFsb2cgd2F0Y2hkb2cKKyAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWVzLCB0aGVyZSBpcyBvbmx5IDEga2luZCBvZiBhbmFsb2cgd2F0Y2hkb2cKICAgKiAgICAgICAgIGluc3RhbmNlOgogICAqICAgICAgICAgLSBBV0Qgc3RhbmRhcmQgKGluc3RhbmNlIEFXRDEpOgogICAqICAgICAgICAgICAtIGNoYW5uZWxzIG1vbml0b3JlZDogY2FuIG1vbml0b3IgMSBjaGFubmVsIG9yIGFsbCBjaGFubmVscy4KQEAgLTM0NTAsNyArMzQ4Nyw3IEBACiAgICogICAgICAgICAgIEByZWYgX19MTF9BRENfQ0hBTk5FTF9UT19ERUNJTUFMX05CKCkuCiAgICogICAgICAgICAgIEFwcGxpY2FibGUgb25seSB3aGVuIHRoZSBhbmFsb2cgd2F0Y2hkb2cgaXMgc2V0IHRvIG1vbml0b3IKICAgKiAgICAgICAgICAgb25lIGNoYW5uZWwuCi0gICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllLCB0aGVyZSBpcyBvbmx5IDEga2luZCBvZiBhbmFsb2cgd2F0Y2hkb2cKKyAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWVzLCB0aGVyZSBpcyBvbmx5IDEga2luZCBvZiBhbmFsb2cgd2F0Y2hkb2cKICAgKiAgICAgICAgIGluc3RhbmNlOgogICAqICAgICAgICAgLSBBV0Qgc3RhbmRhcmQgKGluc3RhbmNlIEFXRDEpOgogICAqICAgICAgICAgICAtIGNoYW5uZWxzIG1vbml0b3JlZDogY2FuIG1vbml0b3IgMSBjaGFubmVsIG9yIGFsbCBjaGFubmVscy4KQEAgLTM1MzUsNyArMzU3Miw3IEBACiAgICogQG5vdGUgICBJbiBjYXNlIG9mIEFEQyByZXNvbHV0aW9uIGRpZmZlcmVudCBvZiAxMiBiaXRzLAogICAqICAgICAgICAgYW5hbG9nIHdhdGNoZG9nIHRocmVzaG9sZHMgZGF0YSByZXF1aXJlIGEgc3BlY2lmaWMgc2hpZnQuCiAgICogICAgICAgICBVc2UgaGVscGVyIG1hY3JvIEByZWYgX19MTF9BRENfQU5BTE9HV0RfU0VUX1RIUkVTSE9MRF9SRVNPTFVUSU9OKCkuCi0gICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllLCB0aGVyZSBpcyBvbmx5IDEga2luZCBvZiBhbmFsb2cgd2F0Y2hkb2cKKyAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWVzLCB0aGVyZSBpcyBvbmx5IDEga2luZCBvZiBhbmFsb2cgd2F0Y2hkb2cKICAgKiAgICAgICAgIGluc3RhbmNlOgogICAqICAgICAgICAgLSBBV0Qgc3RhbmRhcmQgKGluc3RhbmNlIEFXRDEpOgogICAqICAgICAgICAgICAtIGNoYW5uZWxzIG1vbml0b3JlZDogY2FuIG1vbml0b3IgMSBjaGFubmVsIG9yIGFsbCBjaGFubmVscy4KQEAgLTM1NTMsNyArMzU5MCw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9BRENfU2V0QW5hbG9nV0RUaHJlc2hvbGRzKEFEQ19UeXBlRGVmICpBREN4LCB1aW50MzJfdCBBV0RUaHJlc2hvbGRzSGlnaExvdywgdWludDMyX3QgQVdEVGhyZXNob2xkVmFsdWUpCiB7Ci0gIHJlZ2lzdGVyIF9fSU8gdWludDMyX3QgKnByZWcgPSBfX0FEQ19QVFJfUkVHX09GRlNFVChBREN4LT5IVFIsIEFXRFRocmVzaG9sZHNIaWdoTG93KTsKKyAgX19JTyB1aW50MzJfdCAqcHJlZyA9IF9fQURDX1BUUl9SRUdfT0ZGU0VUKEFEQ3gtPkhUUiwgQVdEVGhyZXNob2xkc0hpZ2hMb3cpOwogICAKICAgTU9ESUZZX1JFRygqcHJlZywKICAgICAgICAgICAgICBBRENfSFRSX0hULApAQCAtMzU3Niw3ICszNjEzLDcgQEAKICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfQURDX0dldEFuYWxvZ1dEVGhyZXNob2xkcyhBRENfVHlwZURlZiAqQURDeCwgdWludDMyX3QgQVdEVGhyZXNob2xkc0hpZ2hMb3cpCiB7Ci0gIHJlZ2lzdGVyIF9fSU8gdWludDMyX3QgKnByZWcgPSBfX0FEQ19QVFJfUkVHX09GRlNFVChBREN4LT5IVFIsIEFXRFRocmVzaG9sZHNIaWdoTG93KTsKKyAgX19JTyB1aW50MzJfdCAqcHJlZyA9IF9fQURDX1BUUl9SRUdfT0ZGU0VUKEFEQ3gtPkhUUiwgQVdEVGhyZXNob2xkc0hpZ2hMb3cpOwogICAKICAgcmV0dXJuICh1aW50MzJfdCkoUkVBRF9CSVQoKnByZWcsIEFEQ19IVFJfSFQpKTsKIH0KQEAgLTM4MjAsNyArMzg1Nyw3IEBACiAKIC8qKgogICAqIEBicmllZiAgRW5hYmxlIHRoZSBzZWxlY3RlZCBBREMgaW5zdGFuY2UuCi0gICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllLCBhZnRlciBBREMgZW5hYmxlLCBhIGRlbGF5IGZvciAKKyAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWVzLCBhZnRlciBBREMgZW5hYmxlLCBhIGRlbGF5IGZvciAKICAgKiAgICAgICAgIEFEQyBpbnRlcm5hbCBhbmFsb2cgc3RhYmlsaXphdGlvbiBpcyByZXF1aXJlZCBiZWZvcmUgcGVyZm9ybWluZyBhCiAgICogICAgICAgICBBREMgY29udmVyc2lvbiBzdGFydC4KICAgKiAgICAgICAgIFJlZmVyIHRvIGRldmljZSBkYXRhc2hlZXQsIHBhcmFtZXRlciB0U1RBQi4KQEAgLTM4NjUsNyArMzkwMiw3IEBACiAKIC8qKgogICAqIEBicmllZiAgU3RhcnQgQURDIGdyb3VwIHJlZ3VsYXIgY29udmVyc2lvbi4KLSAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWUsIHRoaXMgZnVuY3Rpb24gaXMgcmVsZXZhbnQgb25seSBmb3IKKyAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWVzLCB0aGlzIGZ1bmN0aW9uIGlzIHJlbGV2YW50IG9ubHkgZm9yCiAgICogICAgICAgICBpbnRlcm5hbCB0cmlnZ2VyIChTVyBzdGFydCksIG5vdCBmb3IgZXh0ZXJuYWwgdHJpZ2dlcjoKICAgKiAgICAgICAgIC0gSWYgQURDIHRyaWdnZXIgaGFzIGJlZW4gc2V0IHRvIHNvZnR3YXJlIHN0YXJ0LCBBREMgY29udmVyc2lvbgogICAqICAgICAgICAgICBzdGFydHMgaW1tZWRpYXRlbHkuCkBAIC0zODg4LDcgKzM5MjUsNyBAQAogICAqIEBicmllZiAgU3RhcnQgQURDIGdyb3VwIHJlZ3VsYXIgY29udmVyc2lvbiBmcm9tIGV4dGVybmFsIHRyaWdnZXIuCiAgICogQG5vdGUgICBBREMgY29udmVyc2lvbiB3aWxsIHN0YXJ0IGF0IG5leHQgdHJpZ2dlciBldmVudCAob24gdGhlIHNlbGVjdGVkCiAgICogICAgICAgICB0cmlnZ2VyIGVkZ2UpIGZvbGxvd2luZyB0aGUgQURDIHN0YXJ0IGNvbnZlcnNpb24gY29tbWFuZC4KLSAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWUsIHRoaXMgZnVuY3Rpb24gaXMgcmVsZXZhbnQgZm9yIAorICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZXMsIHRoaXMgZnVuY3Rpb24gaXMgcmVsZXZhbnQgZm9yIAogICAqICAgICAgICAgQURDIGNvbnZlcnNpb24gc3RhcnQgZnJvbSBleHRlcm5hbCB0cmlnZ2VyLgogICAqICAgICAgICAgSWYgaW50ZXJuYWwgdHJpZ2dlciAoU1cgc3RhcnQpIGlzIG5lZWRlZCwgcGVyZm9ybSBBREMgY29udmVyc2lvbgogICAqICAgICAgICAgc3RhcnQgdXNpbmcgZnVuY3Rpb24gQHJlZiBMTF9BRENfUkVHX1N0YXJ0Q29udmVyc2lvblNXU3RhcnQoKS4KQEAgLTM5MTAsNyArMzk0Nyw3IEBACiAgICogQG5vdGUgICBObyBtb3JlIEFEQyBjb252ZXJzaW9uIHdpbGwgc3RhcnQgYXQgbmV4dCB0cmlnZ2VyIGV2ZW50CiAgICogICAgICAgICBmb2xsb3dpbmcgdGhlIEFEQyBzdG9wIGNvbnZlcnNpb24gY29tbWFuZC4KICAgKiAgICAgICAgIElmIGEgY29udmVyc2lvbiBpcyBvbi1nb2luZywgaXQgd2lsbCBiZSBjb21wbGV0ZWQuCi0gICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllLCB0aGVyZSBpcyBubyBzcGVjaWZpYyBjb21tYW5kCisgICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllcywgdGhlcmUgaXMgbm8gc3BlY2lmaWMgY29tbWFuZAogICAqICAgICAgICAgdG8gc3RvcCBhIGNvbnZlcnNpb24gb24tZ29pbmcgb3IgdG8gc3RvcCBBREMgY29udmVydGluZwogICAqICAgICAgICAgaW4gY29udGludW91cyBtb2RlLiBUaGVzZSBhY3Rpb25zIGNhbiBiZSBwZXJmb3JtZWQKICAgKiAgICAgICAgIHVzaW5nIGZ1bmN0aW9uIEByZWYgTExfQURDX0Rpc2FibGUoKS4KQEAgLTQwMzgsNyArNDA3NSw3IEBACiAKIC8qKgogICAqIEBicmllZiAgU3RhcnQgQURDIGdyb3VwIGluamVjdGVkIGNvbnZlcnNpb24uCi0gICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllLCB0aGlzIGZ1bmN0aW9uIGlzIHJlbGV2YW50IG9ubHkgZm9yCisgICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllcywgdGhpcyBmdW5jdGlvbiBpcyByZWxldmFudCBvbmx5IGZvcgogICAqICAgICAgICAgaW50ZXJuYWwgdHJpZ2dlciAoU1cgc3RhcnQpLCBub3QgZm9yIGV4dGVybmFsIHRyaWdnZXI6CiAgICogICAgICAgICAtIElmIEFEQyB0cmlnZ2VyIGhhcyBiZWVuIHNldCB0byBzb2Z0d2FyZSBzdGFydCwgQURDIGNvbnZlcnNpb24KICAgKiAgICAgICAgICAgc3RhcnRzIGltbWVkaWF0ZWx5LgpAQCAtNDA2MSw3ICs0MDk4LDcgQEAKICAgKiBAYnJpZWYgIFN0YXJ0IEFEQyBncm91cCBpbmplY3RlZCBjb252ZXJzaW9uIGZyb20gZXh0ZXJuYWwgdHJpZ2dlci4KICAgKiBAbm90ZSAgIEFEQyBjb252ZXJzaW9uIHdpbGwgc3RhcnQgYXQgbmV4dCB0cmlnZ2VyIGV2ZW50IChvbiB0aGUgc2VsZWN0ZWQKICAgKiAgICAgICAgIHRyaWdnZXIgZWRnZSkgZm9sbG93aW5nIHRoZSBBREMgc3RhcnQgY29udmVyc2lvbiBjb21tYW5kLgotICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZSwgdGhpcyBmdW5jdGlvbiBpcyByZWxldmFudCBmb3IgCisgICogQG5vdGUgICBPbiB0aGlzIFNUTTMyIHNlcmllcywgdGhpcyBmdW5jdGlvbiBpcyByZWxldmFudCBmb3IgCiAgICogICAgICAgICBBREMgY29udmVyc2lvbiBzdGFydCBmcm9tIGV4dGVybmFsIHRyaWdnZXIuCiAgICogICAgICAgICBJZiBpbnRlcm5hbCB0cmlnZ2VyIChTVyBzdGFydCkgaXMgbmVlZGVkLCBwZXJmb3JtIEFEQyBjb252ZXJzaW9uCiAgICogICAgICAgICBzdGFydCB1c2luZyBmdW5jdGlvbiBAcmVmIExMX0FEQ19JTkpfU3RhcnRDb252ZXJzaW9uU1dTdGFydCgpLgpAQCAtNDA4Myw3ICs0MTIwLDcgQEAKICAgKiBAbm90ZSAgIE5vIG1vcmUgQURDIGNvbnZlcnNpb24gd2lsbCBzdGFydCBhdCBuZXh0IHRyaWdnZXIgZXZlbnQKICAgKiAgICAgICAgIGZvbGxvd2luZyB0aGUgQURDIHN0b3AgY29udmVyc2lvbiBjb21tYW5kLgogICAqICAgICAgICAgSWYgYSBjb252ZXJzaW9uIGlzIG9uLWdvaW5nLCBpdCB3aWxsIGJlIGNvbXBsZXRlZC4KLSAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWUsIHRoZXJlIGlzIG5vIHNwZWNpZmljIGNvbW1hbmQKKyAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWVzLCB0aGVyZSBpcyBubyBzcGVjaWZpYyBjb21tYW5kCiAgICogICAgICAgICB0byBzdG9wIGEgY29udmVyc2lvbiBvbi1nb2luZyBvciB0byBzdG9wIEFEQyBjb252ZXJ0aW5nCiAgICogICAgICAgICBpbiBjb250aW51b3VzIG1vZGUuIFRoZXNlIGFjdGlvbnMgY2FuIGJlIHBlcmZvcm1lZAogICAqICAgICAgICAgdXNpbmcgZnVuY3Rpb24gQHJlZiBMTF9BRENfRGlzYWJsZSgpLgpAQCAtNDExNSw3ICs0MTUyLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9BRENfSU5KX1JlYWRDb252ZXJzaW9uRGF0YTMyKEFEQ19UeXBlRGVmICpBREN4LCB1aW50MzJfdCBSYW5rKQogewotICByZWdpc3RlciBfX0lPIHVpbnQzMl90ICpwcmVnID0gX19BRENfUFRSX1JFR19PRkZTRVQoQURDeC0+SkRSMSwgX19BRENfTUFTS19TSElGVChSYW5rLCBBRENfSU5KX0pEUlhfUkVHT0ZGU0VUX01BU0spKTsKKyAgX19JTyB1aW50MzJfdCAqcHJlZyA9IF9fQURDX1BUUl9SRUdfT0ZGU0VUKEFEQ3gtPkpEUjEsIF9fQURDX01BU0tfU0hJRlQoUmFuaywgQURDX0lOSl9KRFJYX1JFR09GRlNFVF9NQVNLKSk7CiAgIAogICByZXR1cm4gKHVpbnQzMl90KShSRUFEX0JJVCgqcHJlZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQURDX0pEUjFfSkRBVEEpCkBAIC00MTQyLDcgKzQxNzksNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQxNl90IExMX0FEQ19JTkpfUmVhZENvbnZlcnNpb25EYXRhMTIoQURDX1R5cGVEZWYgKkFEQ3gsIHVpbnQzMl90IFJhbmspCiB7Ci0gIHJlZ2lzdGVyIF9fSU8gdWludDMyX3QgKnByZWcgPSBfX0FEQ19QVFJfUkVHX09GRlNFVChBREN4LT5KRFIxLCBfX0FEQ19NQVNLX1NISUZUKFJhbmssIEFEQ19JTkpfSkRSWF9SRUdPRkZTRVRfTUFTSykpOworICBfX0lPIHVpbnQzMl90ICpwcmVnID0gX19BRENfUFRSX1JFR19PRkZTRVQoQURDeC0+SkRSMSwgX19BRENfTUFTS19TSElGVChSYW5rLCBBRENfSU5KX0pEUlhfUkVHT0ZGU0VUX01BU0spKTsKICAgCiAgIHJldHVybiAodWludDE2X3QpKFJFQURfQklUKCpwcmVnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRENfSkRSMV9KREFUQSkKQEAgLTQxNjksNyArNDIwNiw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDE2X3QgTExfQURDX0lOSl9SZWFkQ29udmVyc2lvbkRhdGExMChBRENfVHlwZURlZiAqQURDeCwgdWludDMyX3QgUmFuaykKIHsKLSAgcmVnaXN0ZXIgX19JTyB1aW50MzJfdCAqcHJlZyA9IF9fQURDX1BUUl9SRUdfT0ZGU0VUKEFEQ3gtPkpEUjEsIF9fQURDX01BU0tfU0hJRlQoUmFuaywgQURDX0lOSl9KRFJYX1JFR09GRlNFVF9NQVNLKSk7CisgIF9fSU8gdWludDMyX3QgKnByZWcgPSBfX0FEQ19QVFJfUkVHX09GRlNFVChBREN4LT5KRFIxLCBfX0FEQ19NQVNLX1NISUZUKFJhbmssIEFEQ19JTkpfSkRSWF9SRUdPRkZTRVRfTUFTSykpOwogICAKICAgcmV0dXJuICh1aW50MTZfdCkoUkVBRF9CSVQoKnByZWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFEQ19KRFIxX0pEQVRBKQpAQCAtNDE5Niw3ICs0MjMzLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50OF90IExMX0FEQ19JTkpfUmVhZENvbnZlcnNpb25EYXRhOChBRENfVHlwZURlZiAqQURDeCwgdWludDMyX3QgUmFuaykKIHsKLSAgcmVnaXN0ZXIgX19JTyB1aW50MzJfdCAqcHJlZyA9IF9fQURDX1BUUl9SRUdfT0ZGU0VUKEFEQ3gtPkpEUjEsIF9fQURDX01BU0tfU0hJRlQoUmFuaywgQURDX0lOSl9KRFJYX1JFR09GRlNFVF9NQVNLKSk7CisgIF9fSU8gdWludDMyX3QgKnByZWcgPSBfX0FEQ19QVFJfUkVHX09GRlNFVChBREN4LT5KRFIxLCBfX0FEQ19NQVNLX1NISUZUKFJhbmssIEFEQ19JTkpfSkRSWF9SRUdPRkZTRVRfTUFTSykpOwogICAKICAgcmV0dXJuICh1aW50OF90KShSRUFEX0JJVCgqcHJlZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRENfSkRSMV9KREFUQSkKQEAgLTQyMjMsNyArNDI2MCw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDhfdCBMTF9BRENfSU5KX1JlYWRDb252ZXJzaW9uRGF0YTYoQURDX1R5cGVEZWYgKkFEQ3gsIHVpbnQzMl90IFJhbmspCiB7Ci0gIHJlZ2lzdGVyIF9fSU8gdWludDMyX3QgKnByZWcgPSBfX0FEQ19QVFJfUkVHX09GRlNFVChBREN4LT5KRFIxLCBfX0FEQ19NQVNLX1NISUZUKFJhbmssIEFEQ19JTkpfSkRSWF9SRUdPRkZTRVRfTUFTSykpOworICBfX0lPIHVpbnQzMl90ICpwcmVnID0gX19BRENfUFRSX1JFR19PRkZTRVQoQURDeC0+SkRSMSwgX19BRENfTUFTS19TSElGVChSYW5rLCBBRENfSU5KX0pEUlhfUkVHT0ZGU0VUX01BU0spKTsKICAgCiAgIHJldHVybiAodWludDhfdCkoUkVBRF9CSVQoKnByZWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQURDX0pEUjFfSkRBVEEpCkBAIC00MjczLDcgKzQzMTAsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0FEQ19Jc0FjdGl2ZUZsYWdfSkVPUyhBRENfVHlwZURlZiAqQURDeCkKIHsKLSAgLyogTm90ZTogb24gdGhpcyBTVE0zMiBzZXJpZSwgdGhlcmUgaXMgbm8gZmxhZyBBREMgZ3JvdXAgaW5qZWN0ZWQgICAgICAgICAgKi8KKyAgLyogTm90ZTogb24gdGhpcyBTVE0zMiBzZXJpZXMsIHRoZXJlIGlzIG5vIGZsYWcgQURDIGdyb3VwIGluamVjdGVkICAgICAgICAgICovCiAgIC8qICAgICAgIGVuZCBvZiB1bml0YXJ5IGNvbnZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICBGbGFnIG5vdGVkIGFzICJKRU9DIiBpcyBjb3JyZXNwb25kaW5nIHRvIGZsYWcgIkpFT1MiICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgaW4gb3RoZXIgU1RNMzIgZmFtaWxpZXMpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC00MzI2LDcgKzQzNjMsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfQURDX0NsZWFyRmxhZ19KRU9TKEFEQ19UeXBlRGVmICpBREN4KQogewotICAvKiBOb3RlOiBvbiB0aGlzIFNUTTMyIHNlcmllLCB0aGVyZSBpcyBubyBmbGFnIEFEQyBncm91cCBpbmplY3RlZCAgICAgICAgICAqLworICAvKiBOb3RlOiBvbiB0aGlzIFNUTTMyIHNlcmllcywgdGhlcmUgaXMgbm8gZmxhZyBBREMgZ3JvdXAgaW5qZWN0ZWQgICAgICAgICAgKi8KICAgLyogICAgICAgZW5kIG9mIHVuaXRhcnkgY29udmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgIEZsYWcgbm90ZWQgYXMgIkpFT0MiIGlzIGNvcnJlc3BvbmRpbmcgdG8gZmxhZyAiSkVPUyIgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICBpbiBvdGhlciBTVE0zMiBmYW1pbGllcykuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTQ0MzgsNyArNDQ3NSw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfQURDX0lzQWN0aXZlRmxhZ19NU1RfSkVPUyhBRENfQ29tbW9uX1R5cGVEZWYgKkFEQ3h5X0NPTU1PTikKIHsKLSAgLyogTm90ZTogb24gdGhpcyBTVE0zMiBzZXJpZSwgdGhlcmUgaXMgbm8gZmxhZyBBREMgZ3JvdXAgaW5qZWN0ZWQgICAgICAgICAgKi8KKyAgLyogTm90ZTogb24gdGhpcyBTVE0zMiBzZXJpZXMsIHRoZXJlIGlzIG5vIGZsYWcgQURDIGdyb3VwIGluamVjdGVkICAgICAgICAgICovCiAgIC8qICAgICAgIGVuZCBvZiB1bml0YXJ5IGNvbnZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICBGbGFnIG5vdGVkIGFzICJKRU9DIiBpcyBjb3JyZXNwb25kaW5nIHRvIGZsYWcgIkpFT1MiICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgaW4gb3RoZXIgU1RNMzIgZmFtaWxpZXMpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC00NDU0LDcgKzQ0OTEsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0FEQ19Jc0FjdGl2ZUZsYWdfU0xWMV9KRU9TKEFEQ19Db21tb25fVHlwZURlZiAqQURDeHlfQ09NTU9OKQogewotICAvKiBOb3RlOiBvbiB0aGlzIFNUTTMyIHNlcmllLCB0aGVyZSBpcyBubyBmbGFnIEFEQyBncm91cCBpbmplY3RlZCAgICAgICAgICAqLworICAvKiBOb3RlOiBvbiB0aGlzIFNUTTMyIHNlcmllcywgdGhlcmUgaXMgbm8gZmxhZyBBREMgZ3JvdXAgaW5qZWN0ZWQgICAgICAgICAgKi8KICAgLyogICAgICAgZW5kIG9mIHVuaXRhcnkgY29udmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgIEZsYWcgbm90ZWQgYXMgIkpFT0MiIGlzIGNvcnJlc3BvbmRpbmcgdG8gZmxhZyAiSkVPUyIgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICBpbiBvdGhlciBTVE0zMiBmYW1pbGllcykuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTQ0NzAsNyArNDUwNyw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfQURDX0lzQWN0aXZlRmxhZ19TTFYyX0pFT1MoQURDX0NvbW1vbl9UeXBlRGVmICpBREN4eV9DT01NT04pCiB7Ci0gIC8qIE5vdGU6IG9uIHRoaXMgU1RNMzIgc2VyaWUsIHRoZXJlIGlzIG5vIGZsYWcgQURDIGdyb3VwIGluamVjdGVkICAgICAgICAgICovCisgIC8qIE5vdGU6IG9uIHRoaXMgU1RNMzIgc2VyaWVzLCB0aGVyZSBpcyBubyBmbGFnIEFEQyBncm91cCBpbmplY3RlZCAgICAgICAgICAqLwogICAvKiAgICAgICBlbmQgb2YgdW5pdGFyeSBjb252ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgRmxhZyBub3RlZCBhcyAiSkVPQyIgaXMgY29ycmVzcG9uZGluZyB0byBmbGFnICJKRU9TIiAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgIGluIG90aGVyIFNUTTMyIGZhbWlsaWVzKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtNDU1OCw3ICs0NTk1LDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0FEQ19FbmFibGVJVF9KRU9TKEFEQ19UeXBlRGVmICpBREN4KQogewotICAvKiBOb3RlOiBvbiB0aGlzIFNUTTMyIHNlcmllLCB0aGVyZSBpcyBubyBmbGFnIEFEQyBncm91cCBpbmplY3RlZCAgICAgICAgICAqLworICAvKiBOb3RlOiBvbiB0aGlzIFNUTTMyIHNlcmllcywgdGhlcmUgaXMgbm8gZmxhZyBBREMgZ3JvdXAgaW5qZWN0ZWQgICAgICAgICAgKi8KICAgLyogICAgICAgZW5kIG9mIHVuaXRhcnkgY29udmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgIEZsYWcgbm90ZWQgYXMgIkpFT0MiIGlzIGNvcnJlc3BvbmRpbmcgdG8gZmxhZyAiSkVPUyIgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICBpbiBvdGhlciBTVE0zMiBmYW1pbGllcykuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTQ2MTEsNyArNDY0OCw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9BRENfRGlzYWJsZUlUX0pFT1MoQURDX1R5cGVEZWYgKkFEQ3gpCiB7Ci0gIC8qIE5vdGU6IG9uIHRoaXMgU1RNMzIgc2VyaWUsIHRoZXJlIGlzIG5vIGZsYWcgQURDIGdyb3VwIGluamVjdGVkICAgICAgICAgICovCisgIC8qIE5vdGU6IG9uIHRoaXMgU1RNMzIgc2VyaWVzLCB0aGVyZSBpcyBubyBmbGFnIEFEQyBncm91cCBpbmplY3RlZCAgICAgICAgICAqLwogICAvKiAgICAgICBlbmQgb2YgdW5pdGFyeSBjb252ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgRmxhZyBub3RlZCBhcyAiSkVPQyIgaXMgY29ycmVzcG9uZGluZyB0byBmbGFnICJKRU9TIiAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgIGluIG90aGVyIFNUTTMyIGZhbWlsaWVzKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtNDY2Nyw3ICs0NzA0LDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9BRENfSXNFbmFibGVkSVRfSkVPUyhBRENfVHlwZURlZiAqQURDeCkKIHsKLSAgLyogTm90ZTogb24gdGhpcyBTVE0zMiBzZXJpZSwgdGhlcmUgaXMgbm8gZmxhZyBBREMgZ3JvdXAgaW5qZWN0ZWQgICAgICAgICAgKi8KKyAgLyogTm90ZTogb24gdGhpcyBTVE0zMiBzZXJpZXMsIHRoZXJlIGlzIG5vIGZsYWcgQURDIGdyb3VwIGluamVjdGVkICAgICAgICAgICovCiAgIC8qICAgICAgIGVuZCBvZiB1bml0YXJ5IGNvbnZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICBGbGFnIG5vdGVkIGFzICJKRU9DIiBpcyBjb3JyZXNwb25kaW5nIHRvIGZsYWcgIkpFT1MiICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgaW4gb3RoZXIgU1RNMzIgZmFtaWxpZXMpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJmNHh4X2xsX2RhYy5oIGIvSW5jL3N0bTMyZjR4eF9sbF9kYWMuaAppbmRleCA1NWViMDljLi40MjAzMTMwIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmNHh4X2xsX2RhYy5oCisrKyBiL0luYy9zdG0zMmY0eHhfbGxfZGFjLmgKQEAgLTYsNyArNiw3IEBACiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqIEBhdHRlbnRpb24KICAgKgotICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTcgU1RNaWNyb2VsZWN0cm9uaWNzLgorICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTYgU1RNaWNyb2VsZWN0cm9uaWNzLgogICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuPC9jZW50ZXI+PC9oMj4KICAgKgogICAqIFRoaXMgc29mdHdhcmUgY29tcG9uZW50IGlzIGxpY2Vuc2VkIGJ5IFNUIHVuZGVyIEJTRCAzLUNsYXVzZSBsaWNlbnNlLApAQCAtMTgsOCArMTgsOCBAQAogICAqLwogCiAvKiBEZWZpbmUgdG8gcHJldmVudCByZWN1cnNpdmUgaW5jbHVzaW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotI2lmbmRlZiBfX1NUTTMyRjR4eF9MTF9EQUNfSAotI2RlZmluZSBfX1NUTTMyRjR4eF9MTF9EQUNfSAorI2lmbmRlZiBTVE0zMkY0eHhfTExfREFDX0gKKyNkZWZpbmUgU1RNMzJGNHh4X0xMX0RBQ19ICiAKICNpZmRlZiBfX2NwbHVzcGx1cwogZXh0ZXJuICJDIiB7CkBAIC00OCw1MiArNDgsODYgQEAKIAogLyogSW50ZXJuYWwgbWFza3MgZm9yIERBQyBjaGFubmVscyBkZWZpbml0aW9uICovCiAvKiBUbyBzZWxlY3QgaW50byBsaXRlcmFsIExMX0RBQ19DSEFOTkVMX3ggdGhlIHJlbGV2YW50IGJpdHMgZm9yOiAgICAgICAgICAgICAqLwotLyogLSBjaGFubmVsIGJpdHMgcG9zaXRpb24gaW50byByZWdpc3RlciBDUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIC0gY2hhbm5lbCBiaXRzIHBvc2l0aW9uIGludG8gcmVnaXN0ZXJzIENSLCBNQ1IsIENDUiwgU0hIUiwgU0hSUiAgICAgICAgICAgICovCiAvKiAtIGNoYW5uZWwgYml0cyBwb3NpdGlvbiBpbnRvIHJlZ2lzdGVyIFNXVFJJRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogLSBjaGFubmVsIHJlZ2lzdGVyIG9mZnNldCBvZiBkYXRhIGhvbGRpbmcgcmVnaXN0ZXIgREhSeCAgICAgICAgICAgICAgICAgICAgKi8KIC8qIC0gY2hhbm5lbCByZWdpc3RlciBvZmZzZXQgb2YgZGF0YSBvdXRwdXQgcmVnaXN0ZXIgRE9SeCAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIERBQ19DUl9DSDFfQklUT0ZGU0VUICAgICAgICAgICAwVSAgICAvKiBQb3NpdGlvbiBvZiBjaGFubmVsIGJpdHMgaW50byByZWdpc3RlcnMgQ1IsIE1DUiwgQ0NSLCBTSEhSLCBTSFJSIG9mIGNoYW5uZWwgMSAqLwotI2RlZmluZSBEQUNfQ1JfQ0gyX0JJVE9GRlNFVCAgICAgICAgICAgMTZVICAgLyogUG9zaXRpb24gb2YgY2hhbm5lbCBiaXRzIGludG8gcmVnaXN0ZXJzIENSLCBNQ1IsIENDUiwgU0hIUiwgU0hSUiBvZiBjaGFubmVsIDIgKi8KLSNkZWZpbmUgREFDX0NSX0NIWF9CSVRPRkZTRVRfTUFTSyAgICAgIChEQUNfQ1JfQ0gxX0JJVE9GRlNFVCB8IERBQ19DUl9DSDJfQklUT0ZGU0VUKQotCi0jZGVmaW5lIERBQ19TV1RSX0NIMSAgICAgICAgICAgICAgICAgICAoREFDX1NXVFJJR1JfU1dUUklHMSkgLyogQ2hhbm5lbCBiaXQgaW50byByZWdpc3RlciBTV1RSSUdSIG9mIGNoYW5uZWwgMS4gVGhpcyBiaXQgaXMgaW50byBhcmVhIG9mIExMX0RBQ19DUl9DSHhfQklUT0ZGU0VUIGJ1dCBleGNsdWRlZCBieSBtYXNrIERBQ19DUl9DSFhfQklUT0ZGU0VUX01BU0sgKGRvbmUgdG8gYmUgZW5hYmxlIHRvIHRyaWcgU1cgc3RhcnQgb2YgYm90aCBEQUMgY2hhbm5lbHMgc2ltdWx0YW5lb3VzbHkpLiAqLworI2RlZmluZSBEQUNfQ1JfQ0gxX0JJVE9GRlNFVCAgICAgICAgICAgMFVMICAgLyogUG9zaXRpb24gb2YgY2hhbm5lbCBiaXRzIGludG8gcmVnaXN0ZXJzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUiwgTUNSLCBDQ1IsIFNISFIsIFNIUlIgb2YgY2hhbm5lbCAxICovCiAjaWYgZGVmaW5lZChEQUNfQ0hBTk5FTDJfU1VQUE9SVCkKLSNkZWZpbmUgREFDX1NXVFJfQ0gyICAgICAgICAgICAgICAgICAgIChEQUNfU1dUUklHUl9TV1RSSUcyKSAvKiBDaGFubmVsIGJpdCBpbnRvIHJlZ2lzdGVyIFNXVFJJR1Igb2YgY2hhbm5lbCAyLiBUaGlzIGJpdCBpcyBpbnRvIGFyZWEgb2YgTExfREFDX0NSX0NIeF9CSVRPRkZTRVQgYnV0IGV4Y2x1ZGVkIGJ5IG1hc2sgREFDX0NSX0NIWF9CSVRPRkZTRVRfTUFTSyAoZG9uZSB0byBiZSBlbmFibGUgdG8gdHJpZyBTVyBzdGFydCBvZiBib3RoIERBQyBjaGFubmVscyBzaW11bHRhbmVvdXNseSkuICovCisjZGVmaW5lIERBQ19DUl9DSDJfQklUT0ZGU0VUICAgICAgICAgICAxNlVMICAvKiBQb3NpdGlvbiBvZiBjaGFubmVsIGJpdHMgaW50byByZWdpc3RlcnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENSLCBNQ1IsIENDUiwgU0hIUiwgU0hSUiBvZiBjaGFubmVsIDIgKi8KKyNkZWZpbmUgREFDX0NSX0NIWF9CSVRPRkZTRVRfTUFTSyAgICAgIChEQUNfQ1JfQ0gxX0JJVE9GRlNFVCB8IERBQ19DUl9DSDJfQklUT0ZGU0VUKQorI2Vsc2UKKyNkZWZpbmUgREFDX0NSX0NIWF9CSVRPRkZTRVRfTUFTSyAgICAgIChEQUNfQ1JfQ0gxX0JJVE9GRlNFVCkKKyNlbmRpZiAvKiBEQUNfQ0hBTk5FTDJfU1VQUE9SVCAqLworCisjZGVmaW5lIERBQ19TV1RSX0NIMSAgICAgICAgICAgICAgICAgICAoREFDX1NXVFJJR1JfU1dUUklHMSkgLyogQ2hhbm5lbCBiaXQgaW50byByZWdpc3RlciBTV1RSSUdSIG9mIGNoYW5uZWwgMS4gKi8KKyNpZiBkZWZpbmVkKERBQ19DSEFOTkVMMl9TVVBQT1JUKQorI2RlZmluZSBEQUNfU1dUUl9DSDIgICAgICAgICAgICAgICAgICAgKERBQ19TV1RSSUdSX1NXVFJJRzIpIC8qIENoYW5uZWwgYml0IGludG8gcmVnaXN0ZXIgU1dUUklHUiBvZiBjaGFubmVsIDIuICovCiAjZGVmaW5lIERBQ19TV1RSX0NIWF9NQVNLICAgICAgICAgICAgICAoREFDX1NXVFJfQ0gxIHwgREFDX1NXVFJfQ0gyKQogI2Vsc2UKICNkZWZpbmUgREFDX1NXVFJfQ0hYX01BU0sgICAgICAgICAgICAgIChEQUNfU1dUUl9DSDEpCiAjZW5kaWYgLyogREFDX0NIQU5ORUwyX1NVUFBPUlQgKi8KIAotI2RlZmluZSBEQUNfUkVHX0RIUjEyUjFfUkVHT0ZGU0VUICAgICAgMHgwMDAwMDAwMFUgICAgICAgICAgICAgLyogUmVnaXN0ZXIgREhSMTJSeCBjaGFubmVsIDEgdGFrZW4gYXMgcmVmZXJlbmNlICovCi0jZGVmaW5lIERBQ19SRUdfREhSMTJMMV9SRUdPRkZTRVQgICAgICAweDAwMTAwMDAwVSAgICAgICAgICAgICAvKiBSZWdpc3RlciBvZmZzZXQgb2YgREhSMTJMeCBjaGFubmVsIDEgdmVyc3VzIERIUjEyUnggY2hhbm5lbCAxIChzaGlmdGVkIGxlZnQgb2YgMjAgYml0cykgKi8KLSNkZWZpbmUgREFDX1JFR19ESFI4UjFfUkVHT0ZGU0VUICAgICAgIDB4MDIwMDAwMDBVICAgICAgICAgICAgIC8qIFJlZ2lzdGVyIG9mZnNldCBvZiBESFI4UnggIGNoYW5uZWwgMSB2ZXJzdXMgREhSMTJSeCBjaGFubmVsIDEgKHNoaWZ0ZWQgbGVmdCBvZiAyNCBiaXRzKSAqLworI2RlZmluZSBEQUNfUkVHX0RIUjEyUjFfUkVHT0ZGU0VUICAgICAgMHgwMDAwMDAwMFVMICAgICAgICAgICAgLyogUmVnaXN0ZXIgREhSMTJSeCBjaGFubmVsIDEgdGFrZW4gYXMgcmVmZXJlbmNlICovCisjZGVmaW5lIERBQ19SRUdfREhSMTJMMV9SRUdPRkZTRVQgICAgICAweDAwMTAwMDAwVUwgICAgICAgICAgICAvKiBSZWdpc3RlciBvZmZzZXQgb2YgREhSMTJMeCBjaGFubmVsIDEgdmVyc3VzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBESFIxMlJ4IGNoYW5uZWwgMSAoc2hpZnRlZCBsZWZ0IG9mIDIwIGJpdHMpICAgKi8KKyNkZWZpbmUgREFDX1JFR19ESFI4UjFfUkVHT0ZGU0VUICAgICAgIDB4MDIwMDAwMDBVTCAgICAgICAgICAgIC8qIFJlZ2lzdGVyIG9mZnNldCBvZiBESFI4UnggIGNoYW5uZWwgMSB2ZXJzdXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERIUjEyUnggY2hhbm5lbCAxIChzaGlmdGVkIGxlZnQgb2YgMjQgYml0cykgICAqLwogI2lmIGRlZmluZWQoREFDX0NIQU5ORUwyX1NVUFBPUlQpCi0jZGVmaW5lIERBQ19SRUdfREhSMTJSMl9SRUdPRkZTRVQgICAgICAweDAwMDMwMDAwVSAgICAgICAgICAgICAvKiBSZWdpc3RlciBvZmZzZXQgb2YgREhSMTJSeCBjaGFubmVsIDIgdmVyc3VzIERIUjEyUnggY2hhbm5lbCAxIChzaGlmdGVkIGxlZnQgb2YgMTYgYml0cykgKi8KLSNkZWZpbmUgREFDX1JFR19ESFIxMkwyX1JFR09GRlNFVCAgICAgIDB4MDA0MDAwMDBVICAgICAgICAgICAgIC8qIFJlZ2lzdGVyIG9mZnNldCBvZiBESFIxMkx4IGNoYW5uZWwgMiB2ZXJzdXMgREhSMTJSeCBjaGFubmVsIDEgKHNoaWZ0ZWQgbGVmdCBvZiAyMCBiaXRzKSAqLwotI2RlZmluZSBEQUNfUkVHX0RIUjhSMl9SRUdPRkZTRVQgICAgICAgMHgwNTAwMDAwMFUgICAgICAgICAgICAgLyogUmVnaXN0ZXIgb2Zmc2V0IG9mIERIUjhSeCAgY2hhbm5lbCAyIHZlcnN1cyBESFIxMlJ4IGNoYW5uZWwgMSAoc2hpZnRlZCBsZWZ0IG9mIDI0IGJpdHMpICovCisjZGVmaW5lIERBQ19SRUdfREhSMTJSMl9SRUdPRkZTRVQgICAgICAweDAwMDMwMDAwVUwgICAgICAgICAgICAvKiBSZWdpc3RlciBvZmZzZXQgb2YgREhSMTJSeCBjaGFubmVsIDIgdmVyc3VzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBESFIxMlJ4IGNoYW5uZWwgMSAoc2hpZnRlZCBsZWZ0IG9mIDE2IGJpdHMpICAgKi8KKyNkZWZpbmUgREFDX1JFR19ESFIxMkwyX1JFR09GRlNFVCAgICAgIDB4MDA0MDAwMDBVTCAgICAgICAgICAgIC8qIFJlZ2lzdGVyIG9mZnNldCBvZiBESFIxMkx4IGNoYW5uZWwgMiB2ZXJzdXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERIUjEyUnggY2hhbm5lbCAxIChzaGlmdGVkIGxlZnQgb2YgMjAgYml0cykgICAqLworI2RlZmluZSBEQUNfUkVHX0RIUjhSMl9SRUdPRkZTRVQgICAgICAgMHgwNTAwMDAwMFVMICAgICAgICAgICAgLyogUmVnaXN0ZXIgb2Zmc2V0IG9mIERIUjhSeCAgY2hhbm5lbCAyIHZlcnN1cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREhSMTJSeCBjaGFubmVsIDEgKHNoaWZ0ZWQgbGVmdCBvZiAyNCBiaXRzKSAgICovCiAjZW5kaWYgLyogREFDX0NIQU5ORUwyX1NVUFBPUlQgKi8KLSNkZWZpbmUgREFDX1JFR19ESFIxMlJYX1JFR09GRlNFVF9NQVNLIDB4MDAwRjAwMDBVCi0jZGVmaW5lIERBQ19SRUdfREhSMTJMWF9SRUdPRkZTRVRfTUFTSyAweDAwRjAwMDAwVQotI2RlZmluZSBEQUNfUkVHX0RIUjhSWF9SRUdPRkZTRVRfTUFTSyAgMHgwRjAwMDAwMFUKLSNkZWZpbmUgREFDX1JFR19ESFJYX1JFR09GRlNFVF9NQVNLICAgIChEQUNfUkVHX0RIUjEyUlhfUkVHT0ZGU0VUX01BU0sgfCBEQUNfUkVHX0RIUjEyTFhfUkVHT0ZGU0VUX01BU0sgfCBEQUNfUkVHX0RIUjhSWF9SRUdPRkZTRVRfTUFTSykKKyNkZWZpbmUgREFDX1JFR19ESFIxMlJYX1JFR09GRlNFVF9NQVNLIDB4MDAwRjAwMDBVTAorI2RlZmluZSBEQUNfUkVHX0RIUjEyTFhfUkVHT0ZGU0VUX01BU0sgMHgwMEYwMDAwMFVMCisjZGVmaW5lIERBQ19SRUdfREhSOFJYX1JFR09GRlNFVF9NQVNLICAweDBGMDAwMDAwVUwKKyNkZWZpbmUgREFDX1JFR19ESFJYX1JFR09GRlNFVF9NQVNLICAgIChEQUNfUkVHX0RIUjEyUlhfUkVHT0ZGU0VUX01BU0tcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBEQUNfUkVHX0RIUjEyTFhfUkVHT0ZGU0VUX01BU0sgfCBEQUNfUkVHX0RIUjhSWF9SRUdPRkZTRVRfTUFTSykKIAotI2RlZmluZSBEQUNfUkVHX0RPUjFfUkVHT0ZGU0VUICAgICAgICAgMHgwMDAwMDAwMFUgICAgICAgICAgICAgLyogUmVnaXN0ZXIgRE9SeCBjaGFubmVsIDEgdGFrZW4gYXMgcmVmZXJlbmNlICovCisjZGVmaW5lIERBQ19SRUdfRE9SMV9SRUdPRkZTRVQgICAgICAgICAweDAwMDAwMDAwVUwgICAgICAgICAgICAvKiBSZWdpc3RlciBET1J4IGNoYW5uZWwgMSB0YWtlbiBhcyByZWZlcmVuY2UgKi8KICNpZiBkZWZpbmVkKERBQ19DSEFOTkVMMl9TVVBQT1JUKQotI2RlZmluZSBEQUNfUkVHX0RPUjJfUkVHT0ZGU0VUICAgICAgICAgMHgxMDAwMDAwMFUgICAgICAgICAgICAgLyogUmVnaXN0ZXIgb2Zmc2V0IG9mIERPUnggY2hhbm5lbCAxIHZlcnN1cyBET1J4IGNoYW5uZWwgMiAoc2hpZnRlZCBsZWZ0IG9mIDI4IGJpdHMpICovCisjZGVmaW5lIERBQ19SRUdfRE9SMl9SRUdPRkZTRVQgICAgICAgICAweDEwMDAwMDAwVUwgICAgICAgICAgICAvKiBSZWdpc3RlciBvZmZzZXQgb2YgRE9SeCBjaGFubmVsIDEgdmVyc3VzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBET1J4IGNoYW5uZWwgMiAoc2hpZnRlZCBsZWZ0IG9mIDI4IGJpdHMpICAgKi8KICNkZWZpbmUgREFDX1JFR19ET1JYX1JFR09GRlNFVF9NQVNLICAgIChEQUNfUkVHX0RPUjFfUkVHT0ZGU0VUIHwgREFDX1JFR19ET1IyX1JFR09GRlNFVCkKLSNlbHNlCi0jZGVmaW5lIERBQ19SRUdfRE9SWF9SRUdPRkZTRVRfTUFTSyAgICAoREFDX1JFR19ET1IxX1JFR09GRlNFVCkKICNlbmRpZiAvKiBEQUNfQ0hBTk5FTDJfU1VQUE9SVCAqLwogCisKKyNkZWZpbmUgREFDX1JFR19ESFJfUkVHT0ZGU0VUX01BU0tfUE9TQklUMCAgICAgICAgIDB4MDAwMDAwMEZVTCAvKiBNYXNrIG9mIGRhdGEgaG9sZCByZWdpc3RlcnMgb2Zmc2V0IChESFIxMlJ4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERIUjEyTHgsIERIUjhSeCwgLi4uKSB3aGVuIHNoaWZ0ZWQgdG8gcG9zaXRpb24gMCAqLworI2RlZmluZSBEQUNfUkVHX0RPUlhfUkVHT0ZGU0VUX01BU0tfUE9TQklUMCAgICAgICAgMHgwMDAwMDAwMVVMIC8qIE1hc2sgb2YgRE9SeCByZWdpc3RlcnMgb2Zmc2V0IHdoZW4gc2hpZnRlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHBvc2l0aW9uIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBEQUNfUkVHX1NIU1JYX1JFR09GRlNFVF9NQVNLX1BPU0JJVDAgICAgICAgMHgwMDAwMDAwMVVMIC8qIE1hc2sgb2YgU0hTUnggcmVnaXN0ZXJzIG9mZnNldCB3aGVuIHNoaWZ0ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBwb3NpdGlvbiAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBEQUNfUkVHX0RIUjEyUlhfUkVHT0ZGU0VUX0JJVE9GRlNFVF9QT1MgICAgICAgICAgIDE2VUwgIC8qIFBvc2l0aW9uIG9mIGJpdHMgcmVnaXN0ZXIgb2Zmc2V0IG9mIERIUjEyUngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFubmVsIDEgb3IgMiB2ZXJzdXMgREhSMTJSeCBjaGFubmVsIDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2hpZnRlZCBsZWZ0IG9mIDE2IGJpdHMpICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERBQ19SRUdfREhSMTJMWF9SRUdPRkZTRVRfQklUT0ZGU0VUX1BPUyAgICAgICAgICAgMjBVTCAgLyogUG9zaXRpb24gb2YgYml0cyByZWdpc3RlciBvZmZzZXQgb2YgREhSMTJMeAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5uZWwgMSBvciAyIHZlcnN1cyBESFIxMlJ4IGNoYW5uZWwgMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzaGlmdGVkIGxlZnQgb2YgMjAgYml0cykgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREFDX1JFR19ESFI4UlhfUkVHT0ZGU0VUX0JJVE9GRlNFVF9QT1MgICAgICAgICAgICAyNFVMICAvKiBQb3NpdGlvbiBvZiBiaXRzIHJlZ2lzdGVyIG9mZnNldCBvZiBESFI4UngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFubmVsIDEgb3IgMiB2ZXJzdXMgREhSMTJSeCBjaGFubmVsIDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2hpZnRlZCBsZWZ0IG9mIDI0IGJpdHMpICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERBQ19SRUdfRE9SWF9SRUdPRkZTRVRfQklUT0ZGU0VUX1BPUyAgICAgICAgICAgICAgMjhVTCAgLyogUG9zaXRpb24gb2YgYml0cyByZWdpc3RlciBvZmZzZXQgb2YgRE9SeAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5uZWwgMSBvciAyIHZlcnN1cyBET1J4IGNoYW5uZWwgMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzaGlmdGVkIGxlZnQgb2YgMjggYml0cykgICAgICAgICAgICAgICAgICAgKi8KKwogLyogREFDIHJlZ2lzdGVycyBiaXRzIHBvc2l0aW9ucyAqLwogI2lmIGRlZmluZWQoREFDX0NIQU5ORUwyX1NVUFBPUlQpCi0jZGVmaW5lIERBQ19ESFIxMlJEX0RBQ0MyREhSX0JJVE9GRlNFVF9QT1MgICAgICAgICAgICAgICAgMTZVICAvKiBWYWx1ZSBlcXVpdmFsZW50IHRvIFBPU0lUSU9OX1ZBTChEQUNfREhSMTJSRF9EQUNDMkRIUikgKi8KLSNkZWZpbmUgREFDX0RIUjEyTERfREFDQzJESFJfQklUT0ZGU0VUX1BPUyAgICAgICAgICAgICAgICAyMFUgIC8qIFZhbHVlIGVxdWl2YWxlbnQgdG8gUE9TSVRJT05fVkFMKERBQ19ESFIxMkxEX0RBQ0MyREhSKSAqLwotI2RlZmluZSBEQUNfREhSOFJEX0RBQ0MyREhSX0JJVE9GRlNFVF9QT1MgICAgICAgICAgICAgICAgICA4VSAgLyogVmFsdWUgZXF1aXZhbGVudCB0byBQT1NJVElPTl9WQUwoREFDX0RIUjhSRF9EQUNDMkRIUikgKi8KLSNlbmRpZiAvKiBEQUNfQ0hBTk5FTDJfU1VQUE9SVCAqLworI2VuZGlmCisjZGVmaW5lIERBQ19ESFIxMlJEX0RBQ0MyREhSX0JJVE9GRlNFVF9QT1MgICAgICAgICAgICAgICAgREFDX0RIUjEyUkRfREFDQzJESFJfUG9zCisjZGVmaW5lIERBQ19ESFIxMkxEX0RBQ0MyREhSX0JJVE9GRlNFVF9QT1MgICAgICAgICAgICAgICAgREFDX0RIUjEyTERfREFDQzJESFJfUG9zCisjZGVmaW5lIERBQ19ESFI4UkRfREFDQzJESFJfQklUT0ZGU0VUX1BPUyAgICAgICAgICAgICAgICAgREFDX0RIUjhSRF9EQUNDMkRIUl9Qb3MKIAogLyogTWlzY2VsbGFuZW91cyBkYXRhICovCi0jZGVmaW5lIERBQ19ESUdJVEFMX1NDQUxFXzEyQklUUyAgICAgICAgICAgICAgICAgICAgICAgIDQwOTVVICAvKiBGdWxsLXNjYWxlIGRpZ2l0YWwgdmFsdWUgd2l0aCBhIHJlc29sdXRpb24gb2YgMTIgYml0cyAodm9sdGFnZSByYW5nZSBkZXRlcm1pbmVkIGJ5IGFuYWxvZyB2b2x0YWdlIHJlZmVyZW5jZXMgVnJlZisgYW5kIFZyZWYtLCByZWZlciB0byByZWZlcmVuY2UgbWFudWFsKSAqLworI2RlZmluZSBEQUNfRElHSVRBTF9TQ0FMRV8xMkJJVFMgICAgICAgICAgICAgICAgICA0MDk1VUwgICAvKiBGdWxsLXNjYWxlIGRpZ2l0YWwgdmFsdWUgd2l0aCBhIHJlc29sdXRpb24gb2YgMTIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0cyAodm9sdGFnZSByYW5nZSBkZXRlcm1pbmVkIGJ5IGFuYWxvZyB2b2x0YWdlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZXMgVnJlZisgYW5kIFZyZWYtLCByZWZlciB0byByZWZlcmVuY2UgbWFudWFsKSAqLwogCiAvKioKICAgKiBAfQpAQCAtMTA2LDI2ICsxNDAsMTUgQEAKICAgKi8KIAogLyoqCi0gICogQGJyaWVmICBEcml2ZXIgbWFjcm8gcmVzZXJ2ZWQgZm9yIGludGVybmFsIHVzZTogaXNvbGF0ZSBiaXRzIHdpdGggdGhlCi0gICogICAgICAgICBzZWxlY3RlZCBtYXNrIGFuZCBzaGlmdCB0aGVtIHRvIHRoZSByZWdpc3RlciBMU0IKLSAgKiAgICAgICAgIChzaGlmdCBtYXNrIG9uIHJlZ2lzdGVyIHBvc2l0aW9uIGJpdCAwKS4KLSAgKiBAcGFyYW0gIF9fQklUU19fIEJpdHMgaW4gcmVnaXN0ZXIgMzIgYml0cwotICAqIEBwYXJhbSAgX19NQVNLX18gTWFzayBpbiByZWdpc3RlciAzMiBiaXRzCi0gICogQHJldHZhbCBCaXRzIGluIHJlZ2lzdGVyIDMyIGJpdHMKLSovCi0jZGVmaW5lIF9fREFDX01BU0tfU0hJRlQoX19CSVRTX18sIF9fTUFTS19fKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAoKChfX0JJVFNfXykgJiAoX19NQVNLX18pKSA+PiBQT1NJVElPTl9WQUwoKF9fTUFTS19fKSkpCi0KLS8qKgogICAqIEBicmllZiAgRHJpdmVyIG1hY3JvIHJlc2VydmVkIGZvciBpbnRlcm5hbCB1c2U6IHNldCBhIHBvaW50ZXIgdG8KICAgKiAgICAgICAgIGEgcmVnaXN0ZXIgZnJvbSBhIHJlZ2lzdGVyIGJhc2lzIGZyb20gd2hpY2ggYW4gb2Zmc2V0CiAgICogICAgICAgICBpcyBhcHBsaWVkLgogICAqIEBwYXJhbSAgX19SRUdfXyBSZWdpc3RlciBiYXNpcyBmcm9tIHdoaWNoIHRoZSBvZmZzZXQgaXMgYXBwbGllZC4KLSAgKiBAcGFyYW0gIF9fUkVHX09GRkZTRVRfXyBPZmZzZXQgdG8gYmUgYXBwbGllZCAodW5pdCBudW1iZXIgb2YgcmVnaXN0ZXJzKS4KKyAgKiBAcGFyYW0gIF9fUkVHX09GRkZTRVRfXyBPZmZzZXQgdG8gYmUgYXBwbGllZCAodW5pdDogbnVtYmVyIG9mIHJlZ2lzdGVycykuCiAgICogQHJldHZhbCBQb2ludGVyIHRvIHJlZ2lzdGVyIGFkZHJlc3MKLSovCisgICovCiAjZGVmaW5lIF9fREFDX1BUUl9SRUdfT0ZGU0VUKF9fUkVHX18sIF9fUkVHX09GRkZTRVRfXykgICAgICAgICAgICAgICAgICAgICAgICAgXAotICgoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpICgodWludDMyX3QpKCYoX19SRUdfXykpICsgKChfX1JFR19PRkZGU0VUX18pIDw8IDJVKSkpKQorICAoKHVpbnQzMl90ICopKCh1aW50MzJfdCkgKCh1aW50MzJfdCkoJihfX1JFR19fKSkgKyAoKF9fUkVHX09GRkZTRVRfXykgPDwgMlVMKSkpKQogCiAvKioKICAgKiBAfQpAQCAtMTQzLDI4ICsxNjYsMzggQEAKICAgKi8KIHR5cGVkZWYgc3RydWN0CiB7Ci0gIHVpbnQzMl90IFRyaWdnZXJTb3VyY2U7ICAgICAgICAgICAgICAgLyohPCBTZXQgdGhlIGNvbnZlcnNpb24gdHJpZ2dlciBzb3VyY2UgZm9yIHRoZSBzZWxlY3RlZCBEQUMgY2hhbm5lbDogaW50ZXJuYWwgKFNXIHN0YXJ0KSBvciBmcm9tIGV4dGVybmFsIElQICh0aW1lciBldmVudCwgZXh0ZXJuYWwgaW50ZXJydXB0IGxpbmUpLgorICB1aW50MzJfdCBUcmlnZ2VyU291cmNlOyAgICAgICAgICAgICAgIC8qITwgU2V0IHRoZSBjb252ZXJzaW9uIHRyaWdnZXIgc291cmNlIGZvciB0aGUgc2VsZWN0ZWQgREFDIGNoYW5uZWw6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbCAoU1cgc3RhcnQpIG9yIGZyb20gZXh0ZXJuYWwgcGVyaXBoZXJhbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRpbWVyIGV2ZW50LCBleHRlcm5hbCBpbnRlcnJ1cHQgbGluZSkuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIERBQ19MTF9FQ19UUklHR0VSX1NPVVJDRQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGZlYXR1cmUgY2FuIGJlIG1vZGlmaWVkIGFmdGVyd2FyZHMgdXNpbmcgdW5pdGFyeSBmdW5jdGlvbiBAcmVmIExMX0RBQ19TZXRUcmlnZ2VyU291cmNlKCkuICovCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgZmVhdHVyZSBjYW4gYmUgbW9kaWZpZWQgYWZ0ZXJ3YXJkcyB1c2luZyB1bml0YXJ5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBAcmVmIExMX0RBQ19TZXRUcmlnZ2VyU291cmNlKCkuICovCiAKICAgdWludDMyX3QgV2F2ZUF1dG9HZW5lcmF0aW9uOyAgICAgICAgICAvKiE8IFNldCB0aGUgd2F2ZWZvcm0gYXV0b21hdGljIGdlbmVyYXRpb24gbW9kZSBmb3IgdGhlIHNlbGVjdGVkIERBQyBjaGFubmVsLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBEQUNfTExfRUNfV0FWRV9BVVRPX0dFTkVSQVRJT05fTU9ERQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGZlYXR1cmUgY2FuIGJlIG1vZGlmaWVkIGFmdGVyd2FyZHMgdXNpbmcgdW5pdGFyeSBmdW5jdGlvbiBAcmVmIExMX0RBQ19TZXRXYXZlQXV0b0dlbmVyYXRpb24oKS4gKi8KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBmZWF0dXJlIGNhbiBiZSBtb2RpZmllZCBhZnRlcndhcmRzIHVzaW5nIHVuaXRhcnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIEByZWYgTExfREFDX1NldFdhdmVBdXRvR2VuZXJhdGlvbigpLiAqLwogCiAgIHVpbnQzMl90IFdhdmVBdXRvR2VuZXJhdGlvbkNvbmZpZzsgICAgLyohPCBTZXQgdGhlIHdhdmVmb3JtIGF1dG9tYXRpYyBnZW5lcmF0aW9uIG1vZGUgZm9yIHRoZSBzZWxlY3RlZCBEQUMgY2hhbm5lbC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHdhdmVmb3JtIGF1dG9tYXRpYyBnZW5lcmF0aW9uIG1vZGUgaXMgc2V0IHRvIG5vaXNlLCB0aGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIERBQ19MTF9FQ19XQVZFX05PSVNFX0xGU1JfVU5NQVNLX0JJVFMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHdhdmVmb3JtIGF1dG9tYXRpYyBnZW5lcmF0aW9uIG1vZGUgaXMgc2V0IHRvIHRyaWFuZ2xlLCB0aGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIERBQ19MTF9FQ19XQVZFX1RSSUFOR0xFX0FNUExJVFVERQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQG5vdGUgSWYgd2F2ZWZvcm0gYXV0b21hdGljIGdlbmVyYXRpb24gbW9kZSBpcyBkaXNhYmxlZCwgdGhpcyBwYXJhbWV0ZXIgaXMgZGlzY2FyZGVkLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGZlYXR1cmUgY2FuIGJlIG1vZGlmaWVkIGFmdGVyd2FyZHMgdXNpbmcgdW5pdGFyeSBmdW5jdGlvbiBAcmVmIExMX0RBQ19TZXRXYXZlTm9pc2VMRlNSKCkgb3IgQHJlZiBMTF9EQUNfU2V0V2F2ZVRyaWFuZ2xlQW1wbGl0dWRlKCksIGRlcGVuZGluZyBvbiB0aGUgd2F2ZSBhdXRvbWF0aWMgZ2VuZXJhdGlvbiBzZWxlY3RlZC4gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHdhdmVmb3JtIGF1dG9tYXRpYyBnZW5lcmF0aW9uIG1vZGUgaXMgc2V0IHRvIG5vaXNlLCB0aGlzIHBhcmFtZXRlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBEQUNfTExfRUNfV0FWRV9OT0lTRV9MRlNSX1VOTUFTS19CSVRTCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiB3YXZlZm9ybSBhdXRvbWF0aWMgZ2VuZXJhdGlvbiBtb2RlIGlzIHNldCB0byB0cmlhbmdsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgREFDX0xMX0VDX1dBVkVfVFJJQU5HTEVfQU1QTElUVURFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAbm90ZSBJZiB3YXZlZm9ybSBhdXRvbWF0aWMgZ2VuZXJhdGlvbiBtb2RlIGlzIGRpc2FibGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgcGFyYW1ldGVyIGlzIGRpc2NhcmRlZC4KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBmZWF0dXJlIGNhbiBiZSBtb2RpZmllZCBhZnRlcndhcmRzIHVzaW5nIHVuaXRhcnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIEByZWYgTExfREFDX1NldFdhdmVOb2lzZUxGU1IoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEByZWYgTExfREFDX1NldFdhdmVUcmlhbmdsZUFtcGxpdHVkZSgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRpbmcgb24gdGhlIHdhdmUgYXV0b21hdGljIGdlbmVyYXRpb24gc2VsZWN0ZWQuICovCiAKICAgdWludDMyX3QgT3V0cHV0QnVmZmVyOyAgICAgICAgICAgICAgICAvKiE8IFNldCB0aGUgb3V0cHV0IGJ1ZmZlciBmb3IgdGhlIHNlbGVjdGVkIERBQyBjaGFubmVsLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBEQUNfTExfRUNfT1VUUFVUX0JVRkZFUgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGZlYXR1cmUgY2FuIGJlIG1vZGlmaWVkIGFmdGVyd2FyZHMgdXNpbmcgdW5pdGFyeSBmdW5jdGlvbiBAcmVmIExMX0RBQ19TZXRPdXRwdXRCdWZmZXIoKS4gKi8KIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBmZWF0dXJlIGNhbiBiZSBtb2RpZmllZCBhZnRlcndhcmRzIHVzaW5nIHVuaXRhcnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIEByZWYgTExfREFDX1NldE91dHB1dEJ1ZmZlcigpLiAqLwogfSBMTF9EQUNfSW5pdFR5cGVEZWY7CiAKIC8qKgpAQCAtMTgzLDcgKzIxNiw2IEBACiAgICovCiAvKiBEQUMgY2hhbm5lbCAxIGZsYWdzICovCiAjZGVmaW5lIExMX0RBQ19GTEFHX0RNQVVEUjEgICAgICAgICAgICAgICAgKERBQ19TUl9ETUFVRFIxKSAgIC8qITwgREFDIGNoYW5uZWwgMSBmbGFnIERNQSB1bmRlcnJ1biAqLwotCiAjaWYgZGVmaW5lZChEQUNfQ0hBTk5FTDJfU1VQUE9SVCkKIC8qIERBQyBjaGFubmVsIDIgZmxhZ3MgKi8KICNkZWZpbmUgTExfREFDX0ZMQUdfRE1BVURSMiAgICAgICAgICAgICAgICAoREFDX1NSX0RNQVVEUjIpICAgLyohPCBEQUMgY2hhbm5lbCAyIGZsYWcgRE1BIHVuZGVycnVuICovCkBAIC0yMTksMTMgKzI1MSwxMyBAQAogICAqIEB7CiAgICovCiAjZGVmaW5lIExMX0RBQ19UUklHX1NPRlRXQVJFICAgICAgICAgICAgICAgKERBQ19DUl9UU0VMMV8yIHwgREFDX0NSX1RTRUwxXzEgfCBEQUNfQ1JfVFNFTDFfMCkgLyohPCBEQUMgY2hhbm5lbCBjb252ZXJzaW9uIHRyaWdnZXIgaW50ZXJuYWwgKFNXIHN0YXJ0KSAqLwotI2RlZmluZSBMTF9EQUNfVFJJR19FWFRfVElNMl9UUkdPICAgICAgICAgIChEQUNfQ1JfVFNFTDFfMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIC8qITwgREFDIGNoYW5uZWwgY29udmVyc2lvbiB0cmlnZ2VyIGZyb20gZXh0ZXJuYWwgSVA6IFRJTTIgVFJHTy4gKi8KLSNkZWZpbmUgTExfREFDX1RSSUdfRVhUX1RJTThfVFJHTyAgICAgICAgICAoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERBQ19DUl9UU0VMMV8wKSAvKiE8IERBQyBjaGFubmVsIGNvbnZlcnNpb24gdHJpZ2dlciBmcm9tIGV4dGVybmFsIElQOiBUSU04IFRSR08uICovCi0jZGVmaW5lIExMX0RBQ19UUklHX0VYVF9USU00X1RSR08gICAgICAgICAgKERBQ19DUl9UU0VMMV8yICAgICAgICAgICAgICAgICAgfCBEQUNfQ1JfVFNFTDFfMCkgLyohPCBEQUMgY2hhbm5lbCBjb252ZXJzaW9uIHRyaWdnZXIgZnJvbSBleHRlcm5hbCBJUDogVElNNCBUUkdPLiAqLwotI2RlZmluZSBMTF9EQUNfVFJJR19FWFRfVElNNl9UUkdPICAgICAgICAgIDB4MDAwMDAwMDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgREFDIGNoYW5uZWwgY29udmVyc2lvbiB0cmlnZ2VyIGZyb20gZXh0ZXJuYWwgSVA6IFRJTTYgVFJHTy4gKi8KLSNkZWZpbmUgTExfREFDX1RSSUdfRVhUX1RJTTdfVFJHTyAgICAgICAgICAoICAgICAgICAgICAgICAgICBEQUNfQ1JfVFNFTDFfMSAgICAgICAgICAgICAgICAgKSAvKiE8IERBQyBjaGFubmVsIGNvbnZlcnNpb24gdHJpZ2dlciBmcm9tIGV4dGVybmFsIElQOiBUSU03IFRSR08uICovCi0jZGVmaW5lIExMX0RBQ19UUklHX0VYVF9USU01X1RSR08gICAgICAgICAgKCAgICAgICAgICAgICAgICAgREFDX0NSX1RTRUwxXzEgfCBEQUNfQ1JfVFNFTDFfMCkgLyohPCBEQUMgY2hhbm5lbCBjb252ZXJzaW9uIHRyaWdnZXIgZnJvbSBleHRlcm5hbCBJUDogVElNNSBUUkdPLiAqLwotI2RlZmluZSBMTF9EQUNfVFJJR19FWFRfRVhUSV9MSU5FOSAgICAgICAgIChEQUNfQ1JfVFNFTDFfMiB8IERBQ19DUl9UU0VMMV8xICAgICAgICAgICAgICAgICApIC8qITwgREFDIGNoYW5uZWwgY29udmVyc2lvbiB0cmlnZ2VyIGZyb20gZXh0ZXJuYWwgSVA6IGV4dGVybmFsIGludGVycnVwdCBsaW5lIDkuICovCisjZGVmaW5lIExMX0RBQ19UUklHX0VYVF9USU0yX1RSR08gICAgICAgICAgKERBQ19DUl9UU0VMMV8yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgLyohPCBEQUMgY2hhbm5lbCBjb252ZXJzaW9uIHRyaWdnZXIgZnJvbSBleHRlcm5hbCBwZXJpcGhlcmFsOiBUSU0yIFRSR08uICovCisjZGVmaW5lIExMX0RBQ19UUklHX0VYVF9USU04X1RSR08gICAgICAgICAgKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQUNfQ1JfVFNFTDFfMCkgLyohPCBEQUMgY2hhbm5lbCBjb252ZXJzaW9uIHRyaWdnZXIgZnJvbSBleHRlcm5hbCBwZXJpcGhlcmFsOiBUSU04IFRSR08uICovCisjZGVmaW5lIExMX0RBQ19UUklHX0VYVF9USU00X1RSR08gICAgICAgICAgKERBQ19DUl9UU0VMMV8yICAgICAgICAgICAgICAgICAgfCBEQUNfQ1JfVFNFTDFfMCkgLyohPCBEQUMgY2hhbm5lbCBjb252ZXJzaW9uIHRyaWdnZXIgZnJvbSBleHRlcm5hbCBwZXJpcGhlcmFsOiBUSU00IFRSR08uICovCisjZGVmaW5lIExMX0RBQ19UUklHX0VYVF9USU02X1RSR08gICAgICAgICAgMHgwMDAwMDAwMFVMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEQUMgY2hhbm5lbCBjb252ZXJzaW9uIHRyaWdnZXIgZnJvbSBleHRlcm5hbCBwZXJpcGhlcmFsOiBUSU02IFRSR08uICovCisjZGVmaW5lIExMX0RBQ19UUklHX0VYVF9USU03X1RSR08gICAgICAgICAgKCAgICAgICAgICAgICAgICAgREFDX0NSX1RTRUwxXzEgICAgICAgICAgICAgICAgICkgLyohPCBEQUMgY2hhbm5lbCBjb252ZXJzaW9uIHRyaWdnZXIgZnJvbSBleHRlcm5hbCBwZXJpcGhlcmFsOiBUSU03IFRSR08uICovCisjZGVmaW5lIExMX0RBQ19UUklHX0VYVF9USU01X1RSR08gICAgICAgICAgKCAgICAgICAgICAgICAgICAgREFDX0NSX1RTRUwxXzEgfCBEQUNfQ1JfVFNFTDFfMCkgLyohPCBEQUMgY2hhbm5lbCBjb252ZXJzaW9uIHRyaWdnZXIgZnJvbSBleHRlcm5hbCBwZXJpcGhlcmFsOiBUSU01IFRSR08uICovCisjZGVmaW5lIExMX0RBQ19UUklHX0VYVF9FWFRJX0xJTkU5ICAgICAgICAgKERBQ19DUl9UU0VMMV8yIHwgREFDX0NSX1RTRUwxXzEgICAgICAgICAgICAgICAgICkgLyohPCBEQUMgY2hhbm5lbCBjb252ZXJzaW9uIHRyaWdnZXIgZnJvbSBleHRlcm5hbCBwZXJpcGhlcmFsOiBleHRlcm5hbCBpbnRlcnJ1cHQgbGluZSA5LiAqLwogLyoqCiAgICogQH0KICAgKi8KQEAgLTIzMyw5ICsyNjUsOSBAQAogLyoqIEBkZWZncm91cCBEQUNfTExfRUNfV0FWRV9BVVRPX0dFTkVSQVRJT05fTU9ERSBEQUMgd2F2ZWZvcm0gYXV0b21hdGljIGdlbmVyYXRpb24gbW9kZQogICAqIEB7CiAgICovCi0jZGVmaW5lIExMX0RBQ19XQVZFX0FVVE9fR0VORVJBVElPTl9OT05FICAgICAweDAwMDAwMDAwVSAgICAgICAgICAgICAvKiE8IERBQyBjaGFubmVsIHdhdmUgYXV0byBnZW5lcmF0aW9uIG1vZGUgZGlzYWJsZWQuICovCi0jZGVmaW5lIExMX0RBQ19XQVZFX0FVVE9fR0VORVJBVElPTl9OT0lTRSAgICAoREFDX0NSX1dBVkUxXzApICAgICAgICAvKiE8IERBQyBjaGFubmVsIHdhdmUgYXV0byBnZW5lcmF0aW9uIG1vZGUgZW5hYmxlZCwgc2V0IGdlbmVyYXRlZCBub2lzZSB3YXZlZm9ybS4gKi8KLSNkZWZpbmUgTExfREFDX1dBVkVfQVVUT19HRU5FUkFUSU9OX1RSSUFOR0xFIChEQUNfQ1JfV0FWRTFfMSkgICAgICAgIC8qITwgREFDIGNoYW5uZWwgd2F2ZSBhdXRvIGdlbmVyYXRpb24gbW9kZSBlbmFibGVkLCBzZXQgZ2VuZXJhdGVkIHRyaWFuZ2xlIHdhdmVmb3JtLiAqLworI2RlZmluZSBMTF9EQUNfV0FWRV9BVVRPX0dFTkVSQVRJT05fTk9ORSAgICAgMHgwMDAwMDAwMFVMICAgICAgICAgICAgICAgICAgICAvKiE8IERBQyBjaGFubmVsIHdhdmUgYXV0byBnZW5lcmF0aW9uIG1vZGUgZGlzYWJsZWQuICovCisjZGVmaW5lIExMX0RBQ19XQVZFX0FVVE9fR0VORVJBVElPTl9OT0lTRSAgICAoICAgICAgICAgICAgICAgREFDX0NSX1dBVkUxXzApIC8qITwgREFDIGNoYW5uZWwgd2F2ZSBhdXRvIGdlbmVyYXRpb24gbW9kZSBlbmFibGVkLCBzZXQgZ2VuZXJhdGVkIG5vaXNlIHdhdmVmb3JtLiAqLworI2RlZmluZSBMTF9EQUNfV0FWRV9BVVRPX0dFTkVSQVRJT05fVFJJQU5HTEUgKERBQ19DUl9XQVZFMV8xICAgICAgICAgICAgICAgKSAvKiE8IERBQyBjaGFubmVsIHdhdmUgYXV0byBnZW5lcmF0aW9uIG1vZGUgZW5hYmxlZCwgc2V0IGdlbmVyYXRlZCB0cmlhbmdsZSB3YXZlZm9ybS4gKi8KIC8qKgogICAqIEB9CiAgICovCkBAIC0yNDMsNyArMjc1LDcgQEAKIC8qKiBAZGVmZ3JvdXAgREFDX0xMX0VDX1dBVkVfTk9JU0VfTEZTUl9VTk1BU0tfQklUUyBEQUMgd2F2ZSBnZW5lcmF0aW9uIC0gTm9pc2UgTEZTUiB1bm1hc2sgYml0cwogICAqIEB7CiAgICovCi0jZGVmaW5lIExMX0RBQ19OT0lTRV9MRlNSX1VOTUFTS19CSVQwICAgICAgMHgwMDAwMDAwMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE5vaXNlIHdhdmUgZ2VuZXJhdGlvbiwgdW5tYXNrIExGU1IgYml0MCwgZm9yIHRoZSBzZWxlY3RlZCBEQUMgY2hhbm5lbCAqLworI2RlZmluZSBMTF9EQUNfTk9JU0VfTEZTUl9VTk1BU0tfQklUMCAgICAgIDB4MDAwMDAwMDBVTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBOb2lzZSB3YXZlIGdlbmVyYXRpb24sIHVubWFzayBMRlNSIGJpdDAsIGZvciB0aGUgc2VsZWN0ZWQgREFDIGNoYW5uZWwgKi8KICNkZWZpbmUgTExfREFDX05PSVNFX0xGU1JfVU5NQVNLX0JJVFMxXzAgICAoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREFDX0NSX01BTVAxXzApIC8qITwgTm9pc2Ugd2F2ZSBnZW5lcmF0aW9uLCB1bm1hc2sgTEZTUiBiaXRzWzE6MF0sIGZvciB0aGUgc2VsZWN0ZWQgREFDIGNoYW5uZWwgKi8KICNkZWZpbmUgTExfREFDX05PSVNFX0xGU1JfVU5NQVNLX0JJVFMyXzAgICAoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERBQ19DUl9NQU1QMV8xICAgICAgICAgICAgICAgICApIC8qITwgTm9pc2Ugd2F2ZSBnZW5lcmF0aW9uLCB1bm1hc2sgTEZTUiBiaXRzWzI6MF0sIGZvciB0aGUgc2VsZWN0ZWQgREFDIGNoYW5uZWwgKi8KICNkZWZpbmUgTExfREFDX05PSVNFX0xGU1JfVU5NQVNLX0JJVFMzXzAgICAoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERBQ19DUl9NQU1QMV8xIHwgREFDX0NSX01BTVAxXzApIC8qITwgTm9pc2Ugd2F2ZSBnZW5lcmF0aW9uLCB1bm1hc2sgTEZTUiBiaXRzWzM6MF0sIGZvciB0aGUgc2VsZWN0ZWQgREFDIGNoYW5uZWwgKi8KQEAgLTI2Miw3ICsyOTQsNyBAQAogLyoqIEBkZWZncm91cCBEQUNfTExfRUNfV0FWRV9UUklBTkdMRV9BTVBMSVRVREUgREFDIHdhdmUgZ2VuZXJhdGlvbiAtIFRyaWFuZ2xlIGFtcGxpdHVkZQogICAqIEB7CiAgICovCi0jZGVmaW5lIExMX0RBQ19UUklBTkdMRV9BTVBMSVRVREVfMSAgICAgICAgMHgwMDAwMDAwMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRyaWFuZ2xlIHdhdmUgZ2VuZXJhdGlvbiwgYW1wbGl0dWRlIG9mIDEgTFNCIG9mIERBQyBvdXRwdXQgcmFuZ2UsIGZvciB0aGUgc2VsZWN0ZWQgREFDIGNoYW5uZWwgKi8KKyNkZWZpbmUgTExfREFDX1RSSUFOR0xFX0FNUExJVFVERV8xICAgICAgICAweDAwMDAwMDAwVUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVHJpYW5nbGUgd2F2ZSBnZW5lcmF0aW9uLCBhbXBsaXR1ZGUgb2YgMSBMU0Igb2YgREFDIG91dHB1dCByYW5nZSwgZm9yIHRoZSBzZWxlY3RlZCBEQUMgY2hhbm5lbCAqLwogI2RlZmluZSBMTF9EQUNfVFJJQU5HTEVfQU1QTElUVURFXzMgICAgICAgICggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQUNfQ1JfTUFNUDFfMCkgLyohPCBUcmlhbmdsZSB3YXZlIGdlbmVyYXRpb24sIGFtcGxpdHVkZSBvZiAzIExTQiBvZiBEQUMgb3V0cHV0IHJhbmdlLCBmb3IgdGhlIHNlbGVjdGVkIERBQyBjaGFubmVsICovCiAjZGVmaW5lIExMX0RBQ19UUklBTkdMRV9BTVBMSVRVREVfNyAgICAgICAgKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQUNfQ1JfTUFNUDFfMSAgICAgICAgICAgICAgICAgKSAvKiE8IFRyaWFuZ2xlIHdhdmUgZ2VuZXJhdGlvbiwgYW1wbGl0dWRlIG9mIDcgTFNCIG9mIERBQyBvdXRwdXQgcmFuZ2UsIGZvciB0aGUgc2VsZWN0ZWQgREFDIGNoYW5uZWwgKi8KICNkZWZpbmUgTExfREFDX1RSSUFOR0xFX0FNUExJVFVERV8xNSAgICAgICAoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERBQ19DUl9NQU1QMV8xIHwgREFDX0NSX01BTVAxXzApIC8qITwgVHJpYW5nbGUgd2F2ZSBnZW5lcmF0aW9uLCBhbXBsaXR1ZGUgb2YgMTUgTFNCIG9mIERBQyBvdXRwdXQgcmFuZ2UsIGZvciB0aGUgc2VsZWN0ZWQgREFDIGNoYW5uZWwgKi8KQEAgLTI4MSwxOCArMzEzLDE3IEBACiAvKiogQGRlZmdyb3VwIERBQ19MTF9FQ19PVVRQVVRfQlVGRkVSIERBQyBjaGFubmVsIG91dHB1dCBidWZmZXIKICAgKiBAewogICAqLwotI2RlZmluZSBMTF9EQUNfT1VUUFVUX0JVRkZFUl9FTkFCTEUgICAgICAgIDB4MDAwMDAwMDBVICAgICAgICAgICAgIC8qITwgVGhlIHNlbGVjdGVkIERBQyBjaGFubmVsIG91dHB1dCBpcyBidWZmZXJlZDogaGlnaGVyIGRyaXZlIGN1cnJlbnQgY2FwYWJpbGl0eSwgYnV0IGFsc28gaGlnaGVyIGN1cnJlbnQgY29uc3VtcHRpb24gKi8KKyNkZWZpbmUgTExfREFDX09VVFBVVF9CVUZGRVJfRU5BQkxFICAgICAgICAweDAwMDAwMDAwVUwgICAgICAgICAgICAvKiE8IFRoZSBzZWxlY3RlZCBEQUMgY2hhbm5lbCBvdXRwdXQgaXMgYnVmZmVyZWQ6IGhpZ2hlciBkcml2ZSBjdXJyZW50IGNhcGFiaWxpdHksIGJ1dCBhbHNvIGhpZ2hlciBjdXJyZW50IGNvbnN1bXB0aW9uICovCiAjZGVmaW5lIExMX0RBQ19PVVRQVVRfQlVGRkVSX0RJU0FCTEUgICAgICAgKERBQ19DUl9CT0ZGMSkgICAgICAgICAgLyohPCBUaGUgc2VsZWN0ZWQgREFDIGNoYW5uZWwgb3V0cHV0IGlzIG5vdCBidWZmZXJlZDogbG93ZXIgZHJpdmUgY3VycmVudCBjYXBhYmlsaXR5LCBidXQgYWxzbyBsb3dlciBjdXJyZW50IGNvbnN1bXB0aW9uICovCiAvKioKICAgKiBAfQogICAqLwogCi0KIC8qKiBAZGVmZ3JvdXAgREFDX0xMX0VDX1JFU09MVVRJT04gIERBQyBjaGFubmVsIG91dHB1dCByZXNvbHV0aW9uCiAgICogQHsKICAgKi8KLSNkZWZpbmUgTExfREFDX1JFU09MVVRJT05fMTJCICAgICAgICAgICAgICAweDAwMDAwMDAwVSAgICAgICAgICAgICAvKiE8IERBQyBjaGFubmVsIHJlc29sdXRpb24gMTIgYml0cyAqLwotI2RlZmluZSBMTF9EQUNfUkVTT0xVVElPTl84QiAgICAgICAgICAgICAgIDB4MDAwMDAwMDJVICAgICAgICAgICAgIC8qITwgREFDIGNoYW5uZWwgcmVzb2x1dGlvbiA4IGJpdHMgKi8KKyNkZWZpbmUgTExfREFDX1JFU09MVVRJT05fMTJCICAgICAgICAgICAgICAweDAwMDAwMDAwVUwgICAgICAgICAgICAvKiE8IERBQyBjaGFubmVsIHJlc29sdXRpb24gMTIgYml0cyAqLworI2RlZmluZSBMTF9EQUNfUkVTT0xVVElPTl84QiAgICAgICAgICAgICAgIDB4MDAwMDAwMDJVTCAgICAgICAgICAgIC8qITwgREFDIGNoYW5uZWwgcmVzb2x1dGlvbiA4IGJpdHMgKi8KIC8qKgogICAqIEB9CiAgICovCkBAIC0zMDMsMTUgKzMzNCwxNSBAQAogLyogTGlzdCBvZiBEQUMgcmVnaXN0ZXJzIGludGVuZGVkIHRvIGJlIHVzZWQgKG1vc3QgY29tbW9ubHkpIHdpdGggICAgICAgICAgICAgKi8KIC8qIERNQSB0cmFuc2Zlci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiBSZWZlciB0byBmdW5jdGlvbiBAcmVmIExMX0RBQ19ETUFfR2V0UmVnQWRkcigpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBMTF9EQUNfRE1BX1JFR19EQVRBXzEyQklUU19SSUdIVF9BTElHTkVEICBEQUNfUkVHX0RIUjEyUlhfUkVHT0ZGU0VUX01BU0sgLyohPCBEQUMgY2hhbm5lbCBkYXRhIGhvbGRpbmcgcmVnaXN0ZXIgMTIgYml0cyByaWdodCBhbGlnbmVkICovCi0jZGVmaW5lIExMX0RBQ19ETUFfUkVHX0RBVEFfMTJCSVRTX0xFRlRfQUxJR05FRCAgIERBQ19SRUdfREhSMTJMWF9SRUdPRkZTRVRfTUFTSyAvKiE8IERBQyBjaGFubmVsIGRhdGEgaG9sZGluZyByZWdpc3RlciAxMiBiaXRzIGxlZnQgYWxpZ25lZCAqLwotI2RlZmluZSBMTF9EQUNfRE1BX1JFR19EQVRBXzhCSVRTX1JJR0hUX0FMSUdORUQgICBEQUNfUkVHX0RIUjhSWF9SRUdPRkZTRVRfTUFTSyAgLyohPCBEQUMgY2hhbm5lbCBkYXRhIGhvbGRpbmcgcmVnaXN0ZXIgOCBiaXRzIHJpZ2h0IGFsaWduZWQgKi8KKyNkZWZpbmUgTExfREFDX0RNQV9SRUdfREFUQV8xMkJJVFNfUklHSFRfQUxJR05FRCAgREFDX1JFR19ESFIxMlJYX1JFR09GRlNFVF9CSVRPRkZTRVRfUE9TIC8qITwgREFDIGNoYW5uZWwgZGF0YSBob2xkaW5nIHJlZ2lzdGVyIDEyIGJpdHMgcmlnaHQgYWxpZ25lZCAqLworI2RlZmluZSBMTF9EQUNfRE1BX1JFR19EQVRBXzEyQklUU19MRUZUX0FMSUdORUQgICBEQUNfUkVHX0RIUjEyTFhfUkVHT0ZGU0VUX0JJVE9GRlNFVF9QT1MgLyohPCBEQUMgY2hhbm5lbCBkYXRhIGhvbGRpbmcgcmVnaXN0ZXIgMTIgYml0cyBsZWZ0IGFsaWduZWQgKi8KKyNkZWZpbmUgTExfREFDX0RNQV9SRUdfREFUQV84QklUU19SSUdIVF9BTElHTkVEICAgREFDX1JFR19ESFI4UlhfUkVHT0ZGU0VUX0JJVE9GRlNFVF9QT1MgIC8qITwgREFDIGNoYW5uZWwgZGF0YSBob2xkaW5nIHJlZ2lzdGVyIDggYml0cyByaWdodCBhbGlnbmVkICovCiAvKioKICAgKiBAfQogICAqLwogCiAvKiogQGRlZmdyb3VwIERBQ19MTF9FQ19IV19ERUxBWVMgIERlZmluaXRpb25zIG9mIERBQyBoYXJkd2FyZSBjb25zdHJhaW50cyBkZWxheXMKLSAgKiBAbm90ZSAgIE9ubHkgREFDIElQIEhXIGRlbGF5cyBhcmUgZGVmaW5lZCBpbiBEQUMgTEwgZHJpdmVyIGRyaXZlciwKKyAgKiBAbm90ZSAgIE9ubHkgREFDIHBlcmlwaGVyYWwgSFcgZGVsYXlzIGFyZSBkZWZpbmVkIGluIERBQyBMTCBkcml2ZXIgZHJpdmVyLAogICAqICAgICAgICAgbm90IHRpbWVvdXQgdmFsdWVzLgogICAqICAgICAgICAgRm9yIGRldGFpbHMgb24gZGVsYXlzIHZhbHVlcywgcmVmZXIgdG8gZGVzY3JpcHRpb25zIGluIHNvdXJjZSBjb2RlCiAgICogICAgICAgICBhYm92ZSBlYWNoIGxpdGVyYWwgZGVmaW5pdGlvbi4KQEAgLTMzMCw3ICszNjEsNyBAQAogLyogTGl0ZXJhbCBzZXQgdG8gbWF4aW11bSB2YWx1ZSAocmVmZXIgdG8gZGV2aWNlIGRhdGFzaGVldCwgICAgICAgICAgICAgICAgICAgKi8KIC8qIHBhcmFtZXRlciAidFdBS0VVUCIpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiBVbml0OiB1cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBMTF9EQUNfREVMQVlfU1RBUlRVUF9WT0xUQUdFX1NFVFRMSU5HX1VTICAgICAgICAgICAgIDE1VSAgLyohPCBEZWxheSBmb3IgREFDIGNoYW5uZWwgdm9sdGFnZSBzZXR0bGluZyB0aW1lIGZyb20gREFDIGNoYW5uZWwgc3RhcnR1cCAodHJhbnNpdGlvbiBmcm9tIGRpc2FibGUgdG8gZW5hYmxlKSAqLworI2RlZmluZSBMTF9EQUNfREVMQVlfU1RBUlRVUF9WT0xUQUdFX1NFVFRMSU5HX1VTICAgICAgICAgICAgIDE1VUwgLyohPCBEZWxheSBmb3IgREFDIGNoYW5uZWwgdm9sdGFnZSBzZXR0bGluZyB0aW1lIGZyb20gREFDIGNoYW5uZWwgc3RhcnR1cCAodHJhbnNpdGlvbiBmcm9tIGRpc2FibGUgdG8gZW5hYmxlKSAqLwogCiAvKiBEZWxheSBmb3IgREFDIGNoYW5uZWwgdm9sdGFnZSBzZXR0bGluZyB0aW1lLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogTm90ZTogREFDIGNoYW5uZWwgc3RhcnR1cCB0aW1lIGRlcGVuZHMgb24gYm9hcmQgYXBwbGljYXRpb24gZW52aXJvbm1lbnQ6ICAgKi8KQEAgLTM0Myw3ICszNzQsOCBAQAogLyogTGl0ZXJhbCBzZXQgdG8gbWF4aW11bSB2YWx1ZSAocmVmZXIgdG8gZGV2aWNlIGRhdGFzaGVldCwgICAgICAgICAgICAgICAgICAgKi8KIC8qIHBhcmFtZXRlciAidFNFVFRMSU5HIikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiBVbml0OiB1cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBMTF9EQUNfREVMQVlfVk9MVEFHRV9TRVRUTElOR19VUyAgICAgICAgICAgICAgICAgICAgMTJVICAvKiE8IERlbGF5IGZvciBEQUMgY2hhbm5lbCB2b2x0YWdlIHNldHRsaW5nIHRpbWUgKi8KKyNkZWZpbmUgTExfREFDX0RFTEFZX1ZPTFRBR0VfU0VUVExJTkdfVVMgICAgICAgICAgICAgICAgICAgIDEyVUwgLyohPCBEZWxheSBmb3IgREFDIGNoYW5uZWwgdm9sdGFnZSBzZXR0bGluZyB0aW1lICovCisKIC8qKgogICAqIEB9CiAgICovCkBAIC0zOTcsNyArNDI5LDcgQEAKICAgKiBAcGFyYW0gIF9fQ0hBTk5FTF9fIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAgICogICAgICAgICBAYXJnIEByZWYgTExfREFDX0NIQU5ORUxfMQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RBQ19DSEFOTkVMXzIgKDEpCi0gICogICAgICAgICAKKyAgKgogICAqICAgICAgICAgKDEpIE9uIHRoaXMgU1RNMzIgc2VyaWUsIHBhcmFtZXRlciBub3QgYXZhaWxhYmxlIG9uIGFsbCBkZXZpY2VzLgogICAqICAgICAgICAgICAgIFJlZmVyIHRvIGRldmljZSBkYXRhc2hlZXQgZm9yIGNoYW5uZWxzIGF2YWlsYWJpbGl0eS4KICAgKiBAcmV0dmFsIDEuLi4yICh2YWx1ZSAiMiIgZGVwZW5kaW5nIG9uIERBQyBjaGFubmVsIDIgYXZhaWxhYmlsaXR5KQpAQCAtNDE3LDM5ICs0NDksMzkgQEAKICAgKiBAcmV0dmFsIFJldHVybmVkIHZhbHVlIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAgICogICAgICAgICBAYXJnIEByZWYgTExfREFDX0NIQU5ORUxfMQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RBQ19DSEFOTkVMXzIgKDEpCi0gICogICAgICAgICAKKyAgKgogICAqICAgICAgICAgKDEpIE9uIHRoaXMgU1RNMzIgc2VyaWUsIHBhcmFtZXRlciBub3QgYXZhaWxhYmxlIG9uIGFsbCBkZXZpY2VzLgogICAqICAgICAgICAgICAgIFJlZmVyIHRvIGRldmljZSBkYXRhc2hlZXQgZm9yIGNoYW5uZWxzIGF2YWlsYWJpbGl0eS4KICAgKi8KICNpZiBkZWZpbmVkKERBQ19DSEFOTkVMMl9TVVBQT1JUKQogI2RlZmluZSBfX0xMX0RBQ19ERUNJTUFMX05CX1RPX0NIQU5ORUwoX19ERUNJTUFMX05CX18pICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgKCgoX19ERUNJTUFMX05CX18pID09IDFVKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAoKChfX0RFQ0lNQUxfTkJfXykgPT0gMVVMKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICA/ICggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgTExfREFDX0NIQU5ORUxfMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAoKChfX0RFQ0lNQUxfTkJfXykgPT0gMlUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICgoKF9fREVDSU1BTF9OQl9fKSA9PSAyVUwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgID8gKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICBMTF9EQUNfQ0hBTk5FTF8yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgIDBVTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICkKICNlbHNlCiAjZGVmaW5lIF9fTExfREFDX0RFQ0lNQUxfTkJfVE9fQ0hBTk5FTChfX0RFQ0lNQUxfTkJfXykgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAoKChfX0RFQ0lNQUxfTkJfXykgPT0gMVUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICgoKF9fREVDSU1BTF9OQl9fKSA9PSAxVUwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgID8gKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICBMTF9EQUNfQ0hBTk5FTF8xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIDBVTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICkKLSNlbmRpZiAgLyogREFDX0NIQU5ORUwyX1NVUFBPUlQgKi8KKyNlbmRpZiAvKiBEQUNfQ0hBTk5FTDJfU1VQUE9SVCAqLwogCiAvKioKICAgKiBAYnJpZWYgIEhlbHBlciBtYWNybyB0byBkZWZpbmUgdGhlIERBQyBjb252ZXJzaW9uIGRhdGEgZnVsbC1zY2FsZSBkaWdpdGFsCkBAIC00NjMsNyArNDk1LDcgQEAKICAgKiBAcmV0dmFsIEFEQyBjb252ZXJzaW9uIGRhdGEgZXF1aXZhbGVudCB2b2x0YWdlIHZhbHVlICh1bml0OiBtVm9sdCkKICAgKi8KICNkZWZpbmUgX19MTF9EQUNfRElHSVRBTF9TQ0FMRShfX0RBQ19SRVNPTFVUSU9OX18pICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICgoMHgwMDAwMEZGRlUpID4+ICgoX19EQUNfUkVTT0xVVElPTl9fKSA8PCAxVSkpCisgICgoMHgwMDAwMEZGRlVMKSA+PiAoKF9fREFDX1JFU09MVVRJT05fXykgPDwgMVVMKSkKIAogLyoqCiAgICogQGJyaWVmICBIZWxwZXIgbWFjcm8gdG8gY2FsY3VsYXRlIHRoZSBEQUMgY29udmVyc2lvbiBkYXRhICh1bml0OiBkaWdpdGFsCkBAIC00NzQsOCArNTA2LDggQEAKICAgKiAgICAgICAgIEByZWYgTExfREFDX0NvbnZlcnREYXRhMTJSaWdodEFsaWduZWQoKS4KICAgKiBAbm90ZSAgIEFuYWxvZyByZWZlcmVuY2Ugdm9sdGFnZSAoVnJlZispIG11c3QgYmUgZWl0aGVyIGtub3duIGZyb20KICAgKiAgICAgICAgIHVzZXIgYm9hcmQgZW52aXJvbm1lbnQgb3IgY2FuIGJlIGNhbGN1bGF0ZWQgdXNpbmcgQURDIG1lYXN1cmVtZW50Ci0gICogICAgICAgICBhbmQgQURDIGhlbHBlciBtYWNybyBAcmVmIF9fTExfQURDX0NBTENfVlJFRkFOQUxPR19WT0xUQUdFKCkuCi0gICogQHBhcmFtICBfX1ZSRUZBTkFMT0dfVk9MVEFHRV9fIEFuYWxvZyByZWZlcmVuY2Ugdm9sdGFnZSAodW5pdCBtVikKKyAgKiAgICAgICAgIGFuZCBBREMgaGVscGVyIG1hY3JvIF9fTExfQURDX0NBTENfVlJFRkFOQUxPR19WT0xUQUdFKCkuCisgICogQHBhcmFtICBfX1ZSRUZBTkFMT0dfVk9MVEFHRV9fIEFuYWxvZyByZWZlcmVuY2Ugdm9sdGFnZSAodW5pdDogbVYpCiAgICogQHBhcmFtICBfX0RBQ19WT0xUQUdFX18gVm9sdGFnZSB0byBiZSBnZW5lcmF0ZWQgYnkgREFDIGNoYW5uZWwKICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAodW5pdDogbVZvbHQpLgogICAqIEBwYXJhbSAgX19EQUNfUkVTT0xVVElPTl9fIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CkBAIC00ODYsOSArNTE4LDkgQEAKICNkZWZpbmUgX19MTF9EQUNfQ0FMQ19WT0xUQUdFX1RPX0RBVEEoX19WUkVGQU5BTE9HX1ZPTFRBR0VfXyxcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fREFDX1ZPTFRBR0VfXyxcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fREFDX1JFU09MVVRJT05fXykgICAgICAgICAgICAgICAgICAgICAgXAotICAoKF9fREFDX1ZPTFRBR0VfXykgKiBfX0xMX0RBQ19ESUdJVEFMX1NDQUxFKF9fREFDX1JFU09MVVRJT05fXykgICAgICAgICAgICAgIFwKLSAgIC8gKF9fVlJFRkFOQUxPR19WT0xUQUdFX18pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICkKKygoX19EQUNfVk9MVEFHRV9fKSAqIF9fTExfREFDX0RJR0lUQUxfU0NBTEUoX19EQUNfUkVTT0xVVElPTl9fKSAgICAgICAgICAgICAgXAorIC8gKF9fVlJFRkFOQUxPR19WT0xUQUdFX18pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCispCiAKIC8qKgogICAqIEB9CkBAIC01MDMsMTAgKzUzNSw2IEBACiAvKiogQGRlZmdyb3VwIERBQ19MTF9FeHBvcnRlZF9GdW5jdGlvbnMgREFDIEV4cG9ydGVkIEZ1bmN0aW9ucwogICAqIEB7CiAgICovCi0vKiogQGRlZmdyb3VwIERBQ19MTF9FRl9Db25maWd1cmF0aW9uIENvbmZpZ3VyYXRpb24gb2YgREFDIGNoYW5uZWxzCi0gICogQHsKLSAgKi8KLQogLyoqCiAgICogQGJyaWVmICBTZXQgdGhlIGNvbnZlcnNpb24gdHJpZ2dlciBzb3VyY2UgZm9yIHRoZSBzZWxlY3RlZCBEQUMgY2hhbm5lbC4KICAgKiBAbm90ZSAgIEZvciBjb252ZXJzaW9uIHRyaWdnZXIgc291cmNlIHRvIGJlIGVmZmVjdGl2ZSwgREFDIHRyaWdnZXIKQEAgLTUyMSw3ICs1NDksNyBAQAogICAqIEBwYXJhbSAgREFDX0NoYW5uZWwgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9EQUNfQ0hBTk5FTF8xCiAgICogICAgICAgICBAYXJnIEByZWYgTExfREFDX0NIQU5ORUxfMiAoMSkKLSAgKiAgICAgICAgIAorICAqCiAgICogICAgICAgICAoMSkgT24gdGhpcyBTVE0zMiBzZXJpZSwgcGFyYW1ldGVyIG5vdCBhdmFpbGFibGUgb24gYWxsIGRldmljZXMuCiAgICogICAgICAgICAgICAgUmVmZXIgdG8gZGV2aWNlIGRhdGFzaGVldCBmb3IgY2hhbm5lbHMgYXZhaWxhYmlsaXR5LgogICAqIEBwYXJhbSAgVHJpZ2dlclNvdXJjZSBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgpAQCAtNTU0LDcgKzU4Miw3IEBACiAgICogQHBhcmFtICBEQUNfQ2hhbm5lbCBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RBQ19DSEFOTkVMXzEKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9EQUNfQ0hBTk5FTF8yICgxKQotICAqICAgICAgICAgCisgICoKICAgKiAgICAgICAgICgxKSBPbiB0aGlzIFNUTTMyIHNlcmllLCBwYXJhbWV0ZXIgbm90IGF2YWlsYWJsZSBvbiBhbGwgZGV2aWNlcy4KICAgKiAgICAgICAgICAgICBSZWZlciB0byBkZXZpY2UgZGF0YXNoZWV0IGZvciBjaGFubmVscyBhdmFpbGFiaWxpdHkuCiAgICogQHJldHZhbCBSZXR1cm5lZCB2YWx1ZSBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgpAQCAtNTgzLDcgKzYxMSw3IEBACiAgICogQHBhcmFtICBEQUNfQ2hhbm5lbCBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RBQ19DSEFOTkVMXzEKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9EQUNfQ0hBTk5FTF8yICgxKQotICAqICAgICAgICAgCisgICoKICAgKiAgICAgICAgICgxKSBPbiB0aGlzIFNUTTMyIHNlcmllLCBwYXJhbWV0ZXIgbm90IGF2YWlsYWJsZSBvbiBhbGwgZGV2aWNlcy4KICAgKiAgICAgICAgICAgICBSZWZlciB0byBkZXZpY2UgZGF0YXNoZWV0IGZvciBjaGFubmVscyBhdmFpbGFiaWxpdHkuCiAgICogQHBhcmFtICBXYXZlQXV0b0dlbmVyYXRpb24gVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKQEAgLTYwOCw3ICs2MzYsNyBAQAogICAqIEBwYXJhbSAgREFDX0NoYW5uZWwgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9EQUNfQ0hBTk5FTF8xCiAgICogICAgICAgICBAYXJnIEByZWYgTExfREFDX0NIQU5ORUxfMiAoMSkKLSAgKiAgICAgICAgIAorICAqCiAgICogICAgICAgICAoMSkgT24gdGhpcyBTVE0zMiBzZXJpZSwgcGFyYW1ldGVyIG5vdCBhdmFpbGFibGUgb24gYWxsIGRldmljZXMuCiAgICogICAgICAgICAgICAgUmVmZXIgdG8gZGV2aWNlIGRhdGFzaGVldCBmb3IgY2hhbm5lbHMgYXZhaWxhYmlsaXR5LgogICAqIEByZXR2YWwgUmV0dXJuZWQgdmFsdWUgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKQEAgLTYzNyw3ICs2NjUsNyBAQAogICAqIEBwYXJhbSAgREFDX0NoYW5uZWwgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9EQUNfQ0hBTk5FTF8xCiAgICogICAgICAgICBAYXJnIEByZWYgTExfREFDX0NIQU5ORUxfMiAoMSkKLSAgKiAgICAgICAgIAorICAqCiAgICogICAgICAgICAoMSkgT24gdGhpcyBTVE0zMiBzZXJpZSwgcGFyYW1ldGVyIG5vdCBhdmFpbGFibGUgb24gYWxsIGRldmljZXMuCiAgICogICAgICAgICAgICAgUmVmZXIgdG8gZGV2aWNlIGRhdGFzaGVldCBmb3IgY2hhbm5lbHMgYXZhaWxhYmlsaXR5LgogICAqIEBwYXJhbSAgTm9pc2VMRlNSTWFzayBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgpAQCAtNjYzLDcgKzY5MSw3IEBACiB9CiAKIC8qKgotICAqIEBicmllZiAgU2V0IHRoZSBub2lzZSB3YXZlZm9ybSBnZW5lcmF0aW9uIGZvciB0aGUgc2VsZWN0ZWQgREFDIGNoYW5uZWw6CisgICogQGJyaWVmICBHZXQgdGhlIG5vaXNlIHdhdmVmb3JtIGdlbmVyYXRpb24gZm9yIHRoZSBzZWxlY3RlZCBEQUMgY2hhbm5lbDoKICAgKiAgICAgICAgIE5vaXNlIG1vZGUgYW5kIHBhcmFtZXRlcnMgTEZTUiAobGluZWFyIGZlZWRiYWNrIHNoaWZ0IHJlZ2lzdGVyKS4KICAgKiBAcm10b2xsIENSICAgICAgIE1BTVAxICAgICAgICAgIExMX0RBQ19HZXRXYXZlTm9pc2VMRlNSXG4KICAgKiAgICAgICAgIENSICAgICAgIE1BTVAyICAgICAgICAgIExMX0RBQ19HZXRXYXZlTm9pc2VMRlNSCkBAIC02NzEsNyArNjk5LDcgQEAKICAgKiBAcGFyYW0gIERBQ19DaGFubmVsIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAgICogICAgICAgICBAYXJnIEByZWYgTExfREFDX0NIQU5ORUxfMQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RBQ19DSEFOTkVMXzIgKDEpCi0gICogICAgICAgICAKKyAgKgogICAqICAgICAgICAgKDEpIE9uIHRoaXMgU1RNMzIgc2VyaWUsIHBhcmFtZXRlciBub3QgYXZhaWxhYmxlIG9uIGFsbCBkZXZpY2VzLgogICAqICAgICAgICAgICAgIFJlZmVyIHRvIGRldmljZSBkYXRhc2hlZXQgZm9yIGNoYW5uZWxzIGF2YWlsYWJpbGl0eS4KICAgKiBAcmV0dmFsIFJldHVybmVkIHZhbHVlIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CkBAIC03MDksNyArNzM3LDcgQEAKICAgKiBAcGFyYW0gIERBQ19DaGFubmVsIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAgICogICAgICAgICBAYXJnIEByZWYgTExfREFDX0NIQU5ORUxfMQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RBQ19DSEFOTkVMXzIgKDEpCi0gICogICAgICAgICAKKyAgKgogICAqICAgICAgICAgKDEpIE9uIHRoaXMgU1RNMzIgc2VyaWUsIHBhcmFtZXRlciBub3QgYXZhaWxhYmxlIG9uIGFsbCBkZXZpY2VzLgogICAqICAgICAgICAgICAgIFJlZmVyIHRvIGRldmljZSBkYXRhc2hlZXQgZm9yIGNoYW5uZWxzIGF2YWlsYWJpbGl0eS4KICAgKiBAcGFyYW0gIFRyaWFuZ2xlQW1wbGl0dWRlIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CkBAIC03MjcsNyArNzU1LDggQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9EQUNfVFJJQU5HTEVfQU1QTElUVURFXzQwOTUKICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KLV9fU1RBVElDX0lOTElORSB2b2lkIExMX0RBQ19TZXRXYXZlVHJpYW5nbGVBbXBsaXR1ZGUoREFDX1R5cGVEZWYgKkRBQ3gsIHVpbnQzMl90IERBQ19DaGFubmVsLCB1aW50MzJfdCBUcmlhbmdsZUFtcGxpdHVkZSkKK19fU1RBVElDX0lOTElORSB2b2lkIExMX0RBQ19TZXRXYXZlVHJpYW5nbGVBbXBsaXR1ZGUoREFDX1R5cGVEZWYgKkRBQ3gsIHVpbnQzMl90IERBQ19DaGFubmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBUcmlhbmdsZUFtcGxpdHVkZSkKIHsKICAgTU9ESUZZX1JFRyhEQUN4LT5DUiwKICAgICAgICAgICAgICBEQUNfQ1JfTUFNUDEgPDwgKERBQ19DaGFubmVsICYgREFDX0NSX0NIWF9CSVRPRkZTRVRfTUFTSyksCkBAIC03MzUsNyArNzY0LDcgQEAKIH0KIAogLyoqCi0gICogQGJyaWVmICBTZXQgdGhlIHRyaWFuZ2xlIHdhdmVmb3JtIGdlbmVyYXRpb24gZm9yIHRoZSBzZWxlY3RlZCBEQUMgY2hhbm5lbDoKKyAgKiBAYnJpZWYgIEdldCB0aGUgdHJpYW5nbGUgd2F2ZWZvcm0gZ2VuZXJhdGlvbiBmb3IgdGhlIHNlbGVjdGVkIERBQyBjaGFubmVsOgogICAqICAgICAgICAgdHJpYW5nbGUgbW9kZSBhbmQgYW1wbGl0dWRlLgogICAqIEBybXRvbGwgQ1IgICAgICAgTUFNUDEgICAgICAgICAgTExfREFDX0dldFdhdmVUcmlhbmdsZUFtcGxpdHVkZVxuCiAgICogICAgICAgICBDUiAgICAgICBNQU1QMiAgICAgICAgICBMTF9EQUNfR2V0V2F2ZVRyaWFuZ2xlQW1wbGl0dWRlCkBAIC03NDMsNyArNzcyLDcgQEAKICAgKiBAcGFyYW0gIERBQ19DaGFubmVsIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAgICogICAgICAgICBAYXJnIEByZWYgTExfREFDX0NIQU5ORUxfMQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RBQ19DSEFOTkVMXzIgKDEpCi0gICogICAgICAgICAKKyAgKgogICAqICAgICAgICAgKDEpIE9uIHRoaXMgU1RNMzIgc2VyaWUsIHBhcmFtZXRlciBub3QgYXZhaWxhYmxlIG9uIGFsbCBkZXZpY2VzLgogICAqICAgICAgICAgICAgIFJlZmVyIHRvIGRldmljZSBkYXRhc2hlZXQgZm9yIGNoYW5uZWxzIGF2YWlsYWJpbGl0eS4KICAgKiBAcmV0dmFsIFJldHVybmVkIHZhbHVlIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CkBAIC03NzUsNyArODA0LDcgQEAKICAgKiBAcGFyYW0gIERBQ19DaGFubmVsIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAgICogICAgICAgICBAYXJnIEByZWYgTExfREFDX0NIQU5ORUxfMQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RBQ19DSEFOTkVMXzIgKDEpCi0gICogICAgICAgICAKKyAgKgogICAqICAgICAgICAgKDEpIE9uIHRoaXMgU1RNMzIgc2VyaWUsIHBhcmFtZXRlciBub3QgYXZhaWxhYmxlIG9uIGFsbCBkZXZpY2VzLgogICAqICAgICAgICAgICAgIFJlZmVyIHRvIGRldmljZSBkYXRhc2hlZXQgZm9yIGNoYW5uZWxzIGF2YWlsYWJpbGl0eS4KICAgKiBAcGFyYW0gIE91dHB1dEJ1ZmZlciBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgpAQCAtNzk4LDcgKzgyNyw3IEBACiAgICogQHBhcmFtICBEQUNfQ2hhbm5lbCBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RBQ19DSEFOTkVMXzEKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9EQUNfQ0hBTk5FTF8yICgxKQotICAqICAgICAgICAgCisgICoKICAgKiAgICAgICAgICgxKSBPbiB0aGlzIFNUTTMyIHNlcmllLCBwYXJhbWV0ZXIgbm90IGF2YWlsYWJsZSBvbiBhbGwgZGV2aWNlcy4KICAgKiAgICAgICAgICAgICBSZWZlciB0byBkZXZpY2UgZGF0YXNoZWV0IGZvciBjaGFubmVscyBhdmFpbGFiaWxpdHkuCiAgICogQHJldHZhbCBSZXR1cm5lZCB2YWx1ZSBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgpAQCAtODMwLDcgKzg1OSw3IEBACiAgICogQHBhcmFtICBEQUNfQ2hhbm5lbCBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RBQ19DSEFOTkVMXzEKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9EQUNfQ0hBTk5FTF8yICgxKQotICAqICAgICAgICAgCisgICoKICAgKiAgICAgICAgICgxKSBPbiB0aGlzIFNUTTMyIHNlcmllLCBwYXJhbWV0ZXIgbm90IGF2YWlsYWJsZSBvbiBhbGwgZGV2aWNlcy4KICAgKiAgICAgICAgICAgICBSZWZlciB0byBkZXZpY2UgZGF0YXNoZWV0IGZvciBjaGFubmVscyBhdmFpbGFiaWxpdHkuCiAgICogQHJldHZhbCBOb25lCkBAIC04NTEsNyArODgwLDcgQEAKICAgKiBAcGFyYW0gIERBQ19DaGFubmVsIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAgICogICAgICAgICBAYXJnIEByZWYgTExfREFDX0NIQU5ORUxfMQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RBQ19DSEFOTkVMXzIgKDEpCi0gICogICAgICAgICAKKyAgKgogICAqICAgICAgICAgKDEpIE9uIHRoaXMgU1RNMzIgc2VyaWUsIHBhcmFtZXRlciBub3QgYXZhaWxhYmxlIG9uIGFsbCBkZXZpY2VzLgogICAqICAgICAgICAgICAgIFJlZmVyIHRvIGRldmljZSBkYXRhc2hlZXQgZm9yIGNoYW5uZWxzIGF2YWlsYWJpbGl0eS4KICAgKiBAcmV0dmFsIE5vbmUKQEAgLTg3MSwxNiArOTAwLDE2IEBACiAgICogQHBhcmFtICBEQUNfQ2hhbm5lbCBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RBQ19DSEFOTkVMXzEKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9EQUNfQ0hBTk5FTF8yICgxKQotICAqICAgICAgICAgCisgICoKICAgKiAgICAgICAgICgxKSBPbiB0aGlzIFNUTTMyIHNlcmllLCBwYXJhbWV0ZXIgbm90IGF2YWlsYWJsZSBvbiBhbGwgZGV2aWNlcy4KICAgKiAgICAgICAgICAgICBSZWZlciB0byBkZXZpY2UgZGF0YXNoZWV0IGZvciBjaGFubmVscyBhdmFpbGFiaWxpdHkuCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfREFDX0lzRE1BUmVxRW5hYmxlZChEQUNfVHlwZURlZiAqREFDeCwgdWludDMyX3QgREFDX0NoYW5uZWwpCiB7Ci0gIHJldHVybiAoUkVBRF9CSVQoREFDeC0+Q1IsCi0gICAgICAgICAgICAgICAgICAgREFDX0NSX0RNQUVOMSA8PCAoREFDX0NoYW5uZWwgJiBEQUNfQ1JfQ0hYX0JJVE9GRlNFVF9NQVNLKSkKLSAgICAgICAgICA9PSAoREFDX0NSX0RNQUVOMSA8PCAoREFDX0NoYW5uZWwgJiBEQUNfQ1JfQ0hYX0JJVE9GRlNFVF9NQVNLKSkpOworICByZXR1cm4gKChSRUFEX0JJVChEQUN4LT5DUiwKKyAgICAgICAgICAgICAgICAgICAgREFDX0NSX0RNQUVOMSA8PCAoREFDX0NoYW5uZWwgJiBEQUNfQ1JfQ0hYX0JJVE9GRlNFVF9NQVNLKSkKKyAgICAgICAgICAgPT0gKERBQ19DUl9ETUFFTjEgPDwgKERBQ19DaGFubmVsICYgREFDX0NSX0NIWF9CSVRPRkZTRVRfTUFTSykpKSA/IDFVTCA6IDBVTCk7CiB9CiAKIC8qKgpAQCAtODk2LDcgKzkyNSw4IEBACiAgICogICAgICAgICAgIExMX0RNQV9Db25maWdBZGRyZXNzZXMoRE1BMSwKICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMTF9ETUFfQ0hBTk5FTF8xLAogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50MzJfdCkmPCBhcnJheSBvciB2YXJpYWJsZSA+LAotICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExMX0RBQ19ETUFfR2V0UmVnQWRkcihEQUMxLCBMTF9EQUNfQ0hBTk5FTF8xLCBMTF9EQUNfRE1BX1JFR19EQVRBXzEyQklUU19SSUdIVF9BTElHTkVEKSwKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMTF9EQUNfRE1BX0dldFJlZ0FkZHIoREFDMSwgTExfREFDX0NIQU5ORUxfMSwKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMTF9EQUNfRE1BX1JFR19EQVRBXzEyQklUU19SSUdIVF9BTElHTkVEKSwKICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMTF9ETUFfRElSRUNUSU9OX01FTU9SWV9UT19QRVJJUEgpOwogICAqIEBybXRvbGwgREhSMTJSMSAgREFDQzFESFIgICAgICAgTExfREFDX0RNQV9HZXRSZWdBZGRyXG4KICAgKiAgICAgICAgIERIUjEyTDEgIERBQ0MxREhSICAgICAgIExMX0RBQ19ETUFfR2V0UmVnQWRkclxuCkBAIC05MDgsNyArOTM4LDcgQEAKICAgKiBAcGFyYW0gIERBQ19DaGFubmVsIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAgICogICAgICAgICBAYXJnIEByZWYgTExfREFDX0NIQU5ORUxfMQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RBQ19DSEFOTkVMXzIgKDEpCi0gICogICAgICAgICAKKyAgKgogICAqICAgICAgICAgKDEpIE9uIHRoaXMgU1RNMzIgc2VyaWUsIHBhcmFtZXRlciBub3QgYXZhaWxhYmxlIG9uIGFsbCBkZXZpY2VzLgogICAqICAgICAgICAgICAgIFJlZmVyIHRvIGRldmljZSBkYXRhc2hlZXQgZm9yIGNoYW5uZWxzIGF2YWlsYWJpbGl0eS4KICAgKiBAcGFyYW0gIFJlZ2lzdGVyIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CkBAIC05MjEsNyArOTUxLDggQEAKIHsKICAgLyogUmV0cmlldmUgYWRkcmVzcyBvZiByZWdpc3RlciBESFIxMlJ4LCBESFIxMkx4IG9yIERIUjhSeCBkZXBlbmRpbmcgb24gICAgICovCiAgIC8qIERBQyBjaGFubmVsIHNlbGVjdGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICByZXR1cm4gKCh1aW50MzJfdCkoX19EQUNfUFRSX1JFR19PRkZTRVQoKERBQ3gpLT5ESFIxMlIxLCBfX0RBQ19NQVNLX1NISUZUKERBQ19DaGFubmVsLCBSZWdpc3RlcikpKSk7CisgIHJldHVybiAoKHVpbnQzMl90KShfX0RBQ19QVFJfUkVHX09GRlNFVCgoREFDeCktPkRIUjEyUjEsICgoREFDX0NoYW5uZWwgPj4gKFJlZ2lzdGVyICYgMHgxRlVMKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgREFDX1JFR19ESFJfUkVHT0ZGU0VUX01BU0tfUE9TQklUMCkpKSk7CiB9CiAvKioKICAgKiBAfQpAQCAtOTQyLDcgKzk3Myw3IEBACiAgICogQHBhcmFtICBEQUNfQ2hhbm5lbCBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RBQ19DSEFOTkVMXzEKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9EQUNfQ0hBTk5FTF8yICgxKQotICAqICAgICAgICAgCisgICoKICAgKiAgICAgICAgICgxKSBPbiB0aGlzIFNUTTMyIHNlcmllLCBwYXJhbWV0ZXIgbm90IGF2YWlsYWJsZSBvbiBhbGwgZGV2aWNlcy4KICAgKiAgICAgICAgICAgICBSZWZlciB0byBkZXZpY2UgZGF0YXNoZWV0IGZvciBjaGFubmVscyBhdmFpbGFiaWxpdHkuCiAgICogQHJldHZhbCBOb25lCkBAIC05NjEsNyArOTkyLDcgQEAKICAgKiBAcGFyYW0gIERBQ19DaGFubmVsIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAgICogICAgICAgICBAYXJnIEByZWYgTExfREFDX0NIQU5ORUxfMQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RBQ19DSEFOTkVMXzIgKDEpCi0gICogICAgICAgICAKKyAgKgogICAqICAgICAgICAgKDEpIE9uIHRoaXMgU1RNMzIgc2VyaWUsIHBhcmFtZXRlciBub3QgYXZhaWxhYmxlIG9uIGFsbCBkZXZpY2VzLgogICAqICAgICAgICAgICAgIFJlZmVyIHRvIGRldmljZSBkYXRhc2hlZXQgZm9yIGNoYW5uZWxzIGF2YWlsYWJpbGl0eS4KICAgKiBAcmV0dmFsIE5vbmUKQEAgLTk4MSwxNiArMTAxMiwxNiBAQAogICAqIEBwYXJhbSAgREFDX0NoYW5uZWwgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9EQUNfQ0hBTk5FTF8xCiAgICogICAgICAgICBAYXJnIEByZWYgTExfREFDX0NIQU5ORUxfMiAoMSkKLSAgKiAgICAgICAgIAorICAqCiAgICogICAgICAgICAoMSkgT24gdGhpcyBTVE0zMiBzZXJpZSwgcGFyYW1ldGVyIG5vdCBhdmFpbGFibGUgb24gYWxsIGRldmljZXMuCiAgICogICAgICAgICAgICAgUmVmZXIgdG8gZGV2aWNlIGRhdGFzaGVldCBmb3IgY2hhbm5lbHMgYXZhaWxhYmlsaXR5LgogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0RBQ19Jc0VuYWJsZWQoREFDX1R5cGVEZWYgKkRBQ3gsIHVpbnQzMl90IERBQ19DaGFubmVsKQogewotICByZXR1cm4gKFJFQURfQklUKERBQ3gtPkNSLAotICAgICAgICAgICAgICAgICAgIERBQ19DUl9FTjEgPDwgKERBQ19DaGFubmVsICYgREFDX0NSX0NIWF9CSVRPRkZTRVRfTUFTSykpCi0gICAgICAgICAgPT0gKERBQ19DUl9FTjEgPDwgKERBQ19DaGFubmVsICYgREFDX0NSX0NIWF9CSVRPRkZTRVRfTUFTSykpKTsKKyAgcmV0dXJuICgoUkVBRF9CSVQoREFDeC0+Q1IsCisgICAgICAgICAgICAgICAgICAgIERBQ19DUl9FTjEgPDwgKERBQ19DaGFubmVsICYgREFDX0NSX0NIWF9CSVRPRkZTRVRfTUFTSykpCisgICAgICAgICAgID09IChEQUNfQ1JfRU4xIDw8IChEQUNfQ2hhbm5lbCAmIERBQ19DUl9DSFhfQklUT0ZGU0VUX01BU0spKSkgPyAxVUwgOiAwVUwpOwogfQogCiAvKioKQEAgLTEwMDksNyArMTA0MCw3IEBACiAgICogQHBhcmFtICBEQUNfQ2hhbm5lbCBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RBQ19DSEFOTkVMXzEKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9EQUNfQ0hBTk5FTF8yICgxKQotICAqICAgICAgICAgCisgICoKICAgKiAgICAgICAgICgxKSBPbiB0aGlzIFNUTTMyIHNlcmllLCBwYXJhbWV0ZXIgbm90IGF2YWlsYWJsZSBvbiBhbGwgZGV2aWNlcy4KICAgKiAgICAgICAgICAgICBSZWZlciB0byBkZXZpY2UgZGF0YXNoZWV0IGZvciBjaGFubmVscyBhdmFpbGFiaWxpdHkuCiAgICogQHJldHZhbCBOb25lCkBAIC0xMDI4LDcgKzEwNTksNyBAQAogICAqIEBwYXJhbSAgREFDX0NoYW5uZWwgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9EQUNfQ0hBTk5FTF8xCiAgICogICAgICAgICBAYXJnIEByZWYgTExfREFDX0NIQU5ORUxfMiAoMSkKLSAgKiAgICAgICAgIAorICAqCiAgICogICAgICAgICAoMSkgT24gdGhpcyBTVE0zMiBzZXJpZSwgcGFyYW1ldGVyIG5vdCBhdmFpbGFibGUgb24gYWxsIGRldmljZXMuCiAgICogICAgICAgICAgICAgUmVmZXIgdG8gZGV2aWNlIGRhdGFzaGVldCBmb3IgY2hhbm5lbHMgYXZhaWxhYmlsaXR5LgogICAqIEByZXR2YWwgTm9uZQpAQCAtMTA0OCwyMiArMTA3OSwyNCBAQAogICAqIEBwYXJhbSAgREFDX0NoYW5uZWwgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9EQUNfQ0hBTk5FTF8xCiAgICogICAgICAgICBAYXJnIEByZWYgTExfREFDX0NIQU5ORUxfMiAoMSkKLSAgKiAgICAgICAgIAorICAqCiAgICogICAgICAgICAoMSkgT24gdGhpcyBTVE0zMiBzZXJpZSwgcGFyYW1ldGVyIG5vdCBhdmFpbGFibGUgb24gYWxsIGRldmljZXMuCiAgICogICAgICAgICAgICAgUmVmZXIgdG8gZGV2aWNlIGRhdGFzaGVldCBmb3IgY2hhbm5lbHMgYXZhaWxhYmlsaXR5LgogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0RBQ19Jc1RyaWdnZXJFbmFibGVkKERBQ19UeXBlRGVmICpEQUN4LCB1aW50MzJfdCBEQUNfQ2hhbm5lbCkKIHsKLSAgcmV0dXJuIChSRUFEX0JJVChEQUN4LT5DUiwKLSAgICAgICAgICAgICAgICAgICBEQUNfQ1JfVEVOMSA8PCAoREFDX0NoYW5uZWwgJiBEQUNfQ1JfQ0hYX0JJVE9GRlNFVF9NQVNLKSkKLSAgICAgICAgICA9PSAoREFDX0NSX1RFTjEgPDwgKERBQ19DaGFubmVsICYgREFDX0NSX0NIWF9CSVRPRkZTRVRfTUFTSykpKTsKKyAgcmV0dXJuICgoUkVBRF9CSVQoREFDeC0+Q1IsCisgICAgICAgICAgICAgICAgICAgIERBQ19DUl9URU4xIDw8IChEQUNfQ2hhbm5lbCAmIERBQ19DUl9DSFhfQklUT0ZGU0VUX01BU0spKQorICAgICAgICAgICA9PSAoREFDX0NSX1RFTjEgPDwgKERBQ19DaGFubmVsICYgREFDX0NSX0NIWF9CSVRPRkZTRVRfTUFTSykpKSA/IDFVTCA6IDBVTCk7CiB9CiAKIC8qKgogICAqIEBicmllZiAgVHJpZyBEQUMgY29udmVyc2lvbiBieSBzb2Z0d2FyZSBmb3IgdGhlIHNlbGVjdGVkIERBQyBjaGFubmVsLgogICAqIEBub3RlICAgUHJlbGltaW5hcmlseSwgREFDIHRyaWdnZXIgbXVzdCBiZSBzZXQgdG8gc29mdHdhcmUgdHJpZ2dlcgotICAqICAgICAgICAgdXNpbmcgZnVuY3Rpb24gQHJlZiBMTF9EQUNfU2V0VHJpZ2dlclNvdXJjZSgpCisgICogICAgICAgICB1c2luZyBmdW5jdGlvbgorICAqICAgICAgICAgICBAcmVmIExMX0RBQ19Jbml0KCkKKyAgKiAgICAgICAgICAgQHJlZiBMTF9EQUNfU2V0VHJpZ2dlclNvdXJjZSgpCiAgICogICAgICAgICB3aXRoIHBhcmFtZXRlciAiTExfREFDX1RSSUdHRVJfU09GVFdBUkUiLgogICAqICAgICAgICAgYW5kIERBQyB0cmlnZ2VyIG11c3QgYmUgZW5hYmxlZCB1c2luZwogICAqICAgICAgICAgZnVuY3Rpb24gQHJlZiBMTF9EQUNfRW5hYmxlVHJpZ2dlcigpLgpAQCAtMTA3Nyw3ICsxMTEwLDcgQEAKICAgKiBAcGFyYW0gIERBQ19DaGFubmVsICBUaGlzIHBhcmFtZXRlciBjYW4gYSBjb21iaW5hdGlvbiBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9EQUNfQ0hBTk5FTF8xCiAgICogICAgICAgICBAYXJnIEByZWYgTExfREFDX0NIQU5ORUxfMiAoMSkKLSAgKiAgICAgICAgIAorICAqCiAgICogICAgICAgICAoMSkgT24gdGhpcyBTVE0zMiBzZXJpZSwgcGFyYW1ldGVyIG5vdCBhdmFpbGFibGUgb24gYWxsIGRldmljZXMuCiAgICogICAgICAgICAgICAgUmVmZXIgdG8gZGV2aWNlIGRhdGFzaGVldCBmb3IgY2hhbm5lbHMgYXZhaWxhYmlsaXR5LgogICAqIEByZXR2YWwgTm9uZQpAQCAtMTA5OCw3ICsxMTMxLDcgQEAKICAgKiBAcGFyYW0gIERBQ19DaGFubmVsIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAgICogICAgICAgICBAYXJnIEByZWYgTExfREFDX0NIQU5ORUxfMQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RBQ19DSEFOTkVMXzIgKDEpCi0gICogICAgICAgICAKKyAgKgogICAqICAgICAgICAgKDEpIE9uIHRoaXMgU1RNMzIgc2VyaWUsIHBhcmFtZXRlciBub3QgYXZhaWxhYmxlIG9uIGFsbCBkZXZpY2VzLgogICAqICAgICAgICAgICAgIFJlZmVyIHRvIGRldmljZSBkYXRhc2hlZXQgZm9yIGNoYW5uZWxzIGF2YWlsYWJpbGl0eS4KICAgKiBAcGFyYW0gIERhdGEgVmFsdWUgYmV0d2VlbiBNaW5fRGF0YT0weDAwMCBhbmQgTWF4X0RhdGE9MHhGRkYKQEAgLTExMDYsMTEgKzExMzksMTAgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0RBQ19Db252ZXJ0RGF0YTEyUmlnaHRBbGlnbmVkKERBQ19UeXBlRGVmICpEQUN4LCB1aW50MzJfdCBEQUNfQ2hhbm5lbCwgdWludDMyX3QgRGF0YSkKIHsKLSAgcmVnaXN0ZXIgX19JTyB1aW50MzJfdCAqcHJlZyA9IF9fREFDX1BUUl9SRUdfT0ZGU0VUKERBQ3gtPkRIUjEyUjEsIF9fREFDX01BU0tfU0hJRlQoREFDX0NoYW5uZWwsIERBQ19SRUdfREhSMTJSWF9SRUdPRkZTRVRfTUFTSykpOwotICAKLSAgTU9ESUZZX1JFRygqcHJlZywKLSAgICAgICAgICAgICBEQUNfREhSMTJSMV9EQUNDMURIUiwKLSAgICAgICAgICAgICBEYXRhKTsKKyAgX19JTyB1aW50MzJfdCAqcHJlZyA9IF9fREFDX1BUUl9SRUdfT0ZGU0VUKERBQ3gtPkRIUjEyUjEsIChEQUNfQ2hhbm5lbCA+PiBEQUNfUkVHX0RIUjEyUlhfUkVHT0ZGU0VUX0JJVE9GRlNFVF9QT1MpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIERBQ19SRUdfREhSX1JFR09GRlNFVF9NQVNLX1BPU0JJVDApOworCisgIE1PRElGWV9SRUcoKnByZWcsIERBQ19ESFIxMlIxX0RBQ0MxREhSLCBEYXRhKTsKIH0KIAogLyoqCkBAIC0xMTIzLDcgKzExNTUsNyBAQAogICAqIEBwYXJhbSAgREFDX0NoYW5uZWwgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9EQUNfQ0hBTk5FTF8xCiAgICogICAgICAgICBAYXJnIEByZWYgTExfREFDX0NIQU5ORUxfMiAoMSkKLSAgKiAgICAgICAgIAorICAqCiAgICogICAgICAgICAoMSkgT24gdGhpcyBTVE0zMiBzZXJpZSwgcGFyYW1ldGVyIG5vdCBhdmFpbGFibGUgb24gYWxsIGRldmljZXMuCiAgICogICAgICAgICAgICAgUmVmZXIgdG8gZGV2aWNlIGRhdGFzaGVldCBmb3IgY2hhbm5lbHMgYXZhaWxhYmlsaXR5LgogICAqIEBwYXJhbSAgRGF0YSBWYWx1ZSBiZXR3ZWVuIE1pbl9EYXRhPTB4MDAwIGFuZCBNYXhfRGF0YT0weEZGRgpAQCAtMTEzMSwxMSArMTE2MywxMCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfREFDX0NvbnZlcnREYXRhMTJMZWZ0QWxpZ25lZChEQUNfVHlwZURlZiAqREFDeCwgdWludDMyX3QgREFDX0NoYW5uZWwsIHVpbnQzMl90IERhdGEpCiB7Ci0gIHJlZ2lzdGVyIF9fSU8gdWludDMyX3QgKnByZWcgPSBfX0RBQ19QVFJfUkVHX09GRlNFVChEQUN4LT5ESFIxMlIxLCBfX0RBQ19NQVNLX1NISUZUKERBQ19DaGFubmVsLCBEQUNfUkVHX0RIUjEyTFhfUkVHT0ZGU0VUX01BU0spKTsKLSAgCi0gIE1PRElGWV9SRUcoKnByZWcsCi0gICAgICAgICAgICAgREFDX0RIUjEyTDFfREFDQzFESFIsCi0gICAgICAgICAgICAgRGF0YSk7CisgIF9fSU8gdWludDMyX3QgKnByZWcgPSBfX0RBQ19QVFJfUkVHX09GRlNFVChEQUN4LT5ESFIxMlIxLCAoREFDX0NoYW5uZWwgPj4gREFDX1JFR19ESFIxMkxYX1JFR09GRlNFVF9CSVRPRkZTRVRfUE9TKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiBEQUNfUkVHX0RIUl9SRUdPRkZTRVRfTUFTS19QT1NCSVQwKTsKKworICBNT0RJRllfUkVHKCpwcmVnLCBEQUNfREhSMTJMMV9EQUNDMURIUiwgRGF0YSk7CiB9CiAKIC8qKgpAQCAtMTE0OCw3ICsxMTc5LDcgQEAKICAgKiBAcGFyYW0gIERBQ19DaGFubmVsIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAgICogICAgICAgICBAYXJnIEByZWYgTExfREFDX0NIQU5ORUxfMQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RBQ19DSEFOTkVMXzIgKDEpCi0gICogICAgICAgICAKKyAgKgogICAqICAgICAgICAgKDEpIE9uIHRoaXMgU1RNMzIgc2VyaWUsIHBhcmFtZXRlciBub3QgYXZhaWxhYmxlIG9uIGFsbCBkZXZpY2VzLgogICAqICAgICAgICAgICAgIFJlZmVyIHRvIGRldmljZSBkYXRhc2hlZXQgZm9yIGNoYW5uZWxzIGF2YWlsYWJpbGl0eS4KICAgKiBAcGFyYW0gIERhdGEgVmFsdWUgYmV0d2VlbiBNaW5fRGF0YT0weDAwIGFuZCBNYXhfRGF0YT0weEZGCkBAIC0xMTU2LDExICsxMTg3LDEwIEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9EQUNfQ29udmVydERhdGE4UmlnaHRBbGlnbmVkKERBQ19UeXBlRGVmICpEQUN4LCB1aW50MzJfdCBEQUNfQ2hhbm5lbCwgdWludDMyX3QgRGF0YSkKIHsKLSAgcmVnaXN0ZXIgX19JTyB1aW50MzJfdCAqcHJlZyA9IF9fREFDX1BUUl9SRUdfT0ZGU0VUKERBQ3gtPkRIUjEyUjEsIF9fREFDX01BU0tfU0hJRlQoREFDX0NoYW5uZWwsIERBQ19SRUdfREhSOFJYX1JFR09GRlNFVF9NQVNLKSk7Ci0gIAotICBNT0RJRllfUkVHKCpwcmVnLAotICAgICAgICAgICAgIERBQ19ESFI4UjFfREFDQzFESFIsCi0gICAgICAgICAgICAgRGF0YSk7CisgIF9fSU8gdWludDMyX3QgKnByZWcgPSBfX0RBQ19QVFJfUkVHX09GRlNFVChEQUN4LT5ESFIxMlIxLCAoREFDX0NoYW5uZWwgPj4gREFDX1JFR19ESFI4UlhfUkVHT0ZGU0VUX0JJVE9GRlNFVF9QT1MpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIERBQ19SRUdfREhSX1JFR09GRlNFVF9NQVNLX1BPU0JJVDApOworCisgIE1PRElGWV9SRUcoKnByZWcsIERBQ19ESFI4UjFfREFDQzFESFIsIERhdGEpOwogfQogCiAjaWYgZGVmaW5lZChEQUNfQ0hBTk5FTDJfU1VQUE9SVCkKQEAgLTExNzUsNyArMTIwNSw4IEBACiAgICogQHBhcmFtICBEYXRhQ2hhbm5lbDIgVmFsdWUgYmV0d2VlbiBNaW5fRGF0YT0weDAwMCBhbmQgTWF4X0RhdGE9MHhGRkYKICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KLV9fU1RBVElDX0lOTElORSB2b2lkIExMX0RBQ19Db252ZXJ0RHVhbERhdGExMlJpZ2h0QWxpZ25lZChEQUNfVHlwZURlZiAqREFDeCwgdWludDMyX3QgRGF0YUNoYW5uZWwxLCB1aW50MzJfdCBEYXRhQ2hhbm5lbDIpCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9EQUNfQ29udmVydER1YWxEYXRhMTJSaWdodEFsaWduZWQoREFDX1R5cGVEZWYgKkRBQ3gsIHVpbnQzMl90IERhdGFDaGFubmVsMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBEYXRhQ2hhbm5lbDIpCiB7CiAgIE1PRElGWV9SRUcoREFDeC0+REhSMTJSRCwKICAgICAgICAgICAgICAoREFDX0RIUjEyUkRfREFDQzJESFIgfCBEQUNfREhSMTJSRF9EQUNDMURIUiksCkBAIC0xMTkzLDcgKzEyMjQsOCBAQAogICAqIEBwYXJhbSAgRGF0YUNoYW5uZWwyIFZhbHVlIGJldHdlZW4gTWluX0RhdGE9MHgwMDAgYW5kIE1heF9EYXRhPTB4RkZGCiAgICogQHJldHZhbCBOb25lCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9EQUNfQ29udmVydER1YWxEYXRhMTJMZWZ0QWxpZ25lZChEQUNfVHlwZURlZiAqREFDeCwgdWludDMyX3QgRGF0YUNoYW5uZWwxLCB1aW50MzJfdCBEYXRhQ2hhbm5lbDIpCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9EQUNfQ29udmVydER1YWxEYXRhMTJMZWZ0QWxpZ25lZChEQUNfVHlwZURlZiAqREFDeCwgdWludDMyX3QgRGF0YUNoYW5uZWwxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgRGF0YUNoYW5uZWwyKQogewogICAvKiBOb3RlOiBEYXRhIG9mIERBQyBjaGFubmVsIDIgc2hpZnQgdmFsdWUgc3VidHJhY3RlZCBvZiA0IGJlY2F1c2UgICAgICAgICAgKi8KICAgLyogICAgICAgZGF0YSBvbiAxNiBiaXRzIGFuZCBEQUMgY2hhbm5lbCAyIGJpdHMgZmllbGQgaXMgb24gdGhlIDEyIE1TQiwgICAgICovCkBAIC0xMjE0LDE0ICsxMjQ2LDE1IEBACiAgICogQHBhcmFtICBEYXRhQ2hhbm5lbDIgVmFsdWUgYmV0d2VlbiBNaW5fRGF0YT0weDAwIGFuZCBNYXhfRGF0YT0weEZGCiAgICogQHJldHZhbCBOb25lCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9EQUNfQ29udmVydER1YWxEYXRhOFJpZ2h0QWxpZ25lZChEQUNfVHlwZURlZiAqREFDeCwgdWludDMyX3QgRGF0YUNoYW5uZWwxLCB1aW50MzJfdCBEYXRhQ2hhbm5lbDIpCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9EQUNfQ29udmVydER1YWxEYXRhOFJpZ2h0QWxpZ25lZChEQUNfVHlwZURlZiAqREFDeCwgdWludDMyX3QgRGF0YUNoYW5uZWwxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgRGF0YUNoYW5uZWwyKQogewogICBNT0RJRllfUkVHKERBQ3gtPkRIUjhSRCwKICAgICAgICAgICAgICAoREFDX0RIUjhSRF9EQUNDMkRIUiB8IERBQ19ESFI4UkRfREFDQzFESFIpLAogICAgICAgICAgICAgICgoRGF0YUNoYW5uZWwyIDw8IERBQ19ESFI4UkRfREFDQzJESFJfQklUT0ZGU0VUX1BPUykgfCBEYXRhQ2hhbm5lbDEpKTsKIH0KLQogI2VuZGlmIC8qIERBQ19DSEFOTkVMMl9TVVBQT1JUICovCisKIC8qKgogICAqIEBicmllZiAgUmV0cmlldmUgb3V0cHV0IGRhdGEgY3VycmVudGx5IGdlbmVyYXRlZCBmb3IgdGhlIHNlbGVjdGVkIERBQyBjaGFubmVsLgogICAqIEBub3RlICAgV2hhdGV2ZXIgYWxpZ25tZW50IGFuZCByZXNvbHV0aW9uIHNldHRpbmdzCkBAIC0xMjM0LDE1ICsxMjY3LDE2IEBACiAgICogQHBhcmFtICBEQUNfQ2hhbm5lbCBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RBQ19DSEFOTkVMXzEKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9EQUNfQ0hBTk5FTF8yICgxKQotICAqICAgICAgICAgCisgICoKICAgKiAgICAgICAgICgxKSBPbiB0aGlzIFNUTTMyIHNlcmllLCBwYXJhbWV0ZXIgbm90IGF2YWlsYWJsZSBvbiBhbGwgZGV2aWNlcy4KICAgKiAgICAgICAgICAgICBSZWZlciB0byBkZXZpY2UgZGF0YXNoZWV0IGZvciBjaGFubmVscyBhdmFpbGFiaWxpdHkuCiAgICogQHJldHZhbCBWYWx1ZSBiZXR3ZWVuIE1pbl9EYXRhPTB4MDAwIGFuZCBNYXhfRGF0YT0weEZGRgogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0RBQ19SZXRyaWV2ZU91dHB1dERhdGEoREFDX1R5cGVEZWYgKkRBQ3gsIHVpbnQzMl90IERBQ19DaGFubmVsKQogewotICByZWdpc3RlciBfX0lPIHVpbnQzMl90ICpwcmVnID0gX19EQUNfUFRSX1JFR19PRkZTRVQoREFDeC0+RE9SMSwgX19EQUNfTUFTS19TSElGVChEQUNfQ2hhbm5lbCwgREFDX1JFR19ET1JYX1JFR09GRlNFVF9NQVNLKSk7Ci0gIAorICBfX0lPIHVpbnQzMl90IGNvbnN0ICpwcmVnID0gX19EQUNfUFRSX1JFR19PRkZTRVQoREFDeC0+RE9SMSwgKERBQ19DaGFubmVsID4+IERBQ19SRUdfRE9SWF9SRUdPRkZTRVRfQklUT0ZGU0VUX1BPUykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgREFDX1JFR19ET1JYX1JFR09GRlNFVF9NQVNLX1BPU0JJVDApOworCiAgIHJldHVybiAodWludDE2X3QpIFJFQURfQklUKCpwcmVnLCBEQUNfRE9SMV9EQUNDMURPUik7CiB9CiAKQEAgLTEyNTMsNiArMTI4Nyw4IEBACiAvKiogQGRlZmdyb3VwIERBQ19MTF9FRl9GTEFHX01hbmFnZW1lbnQgRkxBRyBNYW5hZ2VtZW50CiAgICogQHsKICAgKi8KKworCiAvKioKICAgKiBAYnJpZWYgIEdldCBEQUMgdW5kZXJydW4gZmxhZyBmb3IgREFDIGNoYW5uZWwgMQogICAqIEBybXRvbGwgU1IgICAgICAgRE1BVURSMSAgICAgICAgTExfREFDX0lzQWN0aXZlRmxhZ19ETUFVRFIxCkBAIC0xMjYxLDcgKzEyOTcsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0RBQ19Jc0FjdGl2ZUZsYWdfRE1BVURSMShEQUNfVHlwZURlZiAqREFDeCkKIHsKLSAgcmV0dXJuIChSRUFEX0JJVChEQUN4LT5TUiwgTExfREFDX0ZMQUdfRE1BVURSMSkgPT0gKExMX0RBQ19GTEFHX0RNQVVEUjEpKTsKKyAgcmV0dXJuICgoUkVBRF9CSVQoREFDeC0+U1IsIExMX0RBQ19GTEFHX0RNQVVEUjEpID09IChMTF9EQUNfRkxBR19ETUFVRFIxKSkgPyAxVUwgOiAwVUwpOwogfQogCiAjaWYgZGVmaW5lZChEQUNfQ0hBTk5FTDJfU1VQUE9SVCkKQEAgLTEyNzMsNyArMTMwOSw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfREFDX0lzQWN0aXZlRmxhZ19ETUFVRFIyKERBQ19UeXBlRGVmICpEQUN4KQogewotICByZXR1cm4gKFJFQURfQklUKERBQ3gtPlNSLCBMTF9EQUNfRkxBR19ETUFVRFIyKSA9PSAoTExfREFDX0ZMQUdfRE1BVURSMikpOworICByZXR1cm4gKChSRUFEX0JJVChEQUN4LT5TUiwgTExfREFDX0ZMQUdfRE1BVURSMikgPT0gKExMX0RBQ19GTEFHX0RNQVVEUjIpKSA/IDFVTCA6IDBVTCk7CiB9CiAjZW5kaWYgLyogREFDX0NIQU5ORUwyX1NVUFBPUlQgKi8KIApAQCAtMTM2NSw3ICsxNDAxLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9EQUNfSXNFbmFibGVkSVRfRE1BVURSMShEQUNfVHlwZURlZiAqREFDeCkKIHsKLSAgcmV0dXJuIChSRUFEX0JJVChEQUN4LT5DUiwgTExfREFDX0lUX0RNQVVEUklFMSkgPT0gKExMX0RBQ19JVF9ETUFVRFJJRTEpKTsKKyAgcmV0dXJuICgoUkVBRF9CSVQoREFDeC0+Q1IsIExMX0RBQ19JVF9ETUFVRFJJRTEpID09IChMTF9EQUNfSVRfRE1BVURSSUUxKSkgPyAxVUwgOiAwVUwpOwogfQogCiAjaWYgZGVmaW5lZChEQUNfQ0hBTk5FTDJfU1VQUE9SVCkKQEAgLTEzNzcsNyArMTQxMyw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfREFDX0lzRW5hYmxlZElUX0RNQVVEUjIoREFDX1R5cGVEZWYgKkRBQ3gpCiB7Ci0gIHJldHVybiAoUkVBRF9CSVQoREFDeC0+Q1IsIExMX0RBQ19JVF9ETUFVRFJJRTIpID09IChMTF9EQUNfSVRfRE1BVURSSUUyKSk7CisgIHJldHVybiAoKFJFQURfQklUKERBQ3gtPkNSLCBMTF9EQUNfSVRfRE1BVURSSUUyKSA9PSAoTExfREFDX0lUX0RNQVVEUklFMikpID8gMVVMIDogMFVMKTsKIH0KICNlbmRpZiAvKiBEQUNfQ0hBTk5FTDJfU1VQUE9SVCAqLwogCkBAIC0xMzkwLDkgKzE0MjYsOSBAQAogICAqIEB7CiAgICovCiAKLUVycm9yU3RhdHVzIExMX0RBQ19EZUluaXQoREFDX1R5cGVEZWYqIERBQ3gpOwotRXJyb3JTdGF0dXMgTExfREFDX0luaXQoREFDX1R5cGVEZWYqIERBQ3gsIHVpbnQzMl90IERBQ19DaGFubmVsLCBMTF9EQUNfSW5pdFR5cGVEZWYqIERBQ19Jbml0U3RydWN0KTsKLXZvaWQgICAgICAgIExMX0RBQ19TdHJ1Y3RJbml0KExMX0RBQ19Jbml0VHlwZURlZiogREFDX0luaXRTdHJ1Y3QpOworRXJyb3JTdGF0dXMgTExfREFDX0RlSW5pdChEQUNfVHlwZURlZiAqREFDeCk7CitFcnJvclN0YXR1cyBMTF9EQUNfSW5pdChEQUNfVHlwZURlZiAqREFDeCwgdWludDMyX3QgREFDX0NoYW5uZWwsIExMX0RBQ19Jbml0VHlwZURlZiAqREFDX0luaXRTdHJ1Y3QpOwordm9pZCAgICAgICAgTExfREFDX1N0cnVjdEluaXQoTExfREFDX0luaXRUeXBlRGVmICpEQUNfSW5pdFN0cnVjdCk7CiAKIC8qKgogICAqIEB9CkBAIC0xNDE3LDYgKzE0NTMsNiBAQAogfQogI2VuZGlmCiAKLSNlbmRpZiAvKiBfX1NUTTMyRjR4eF9MTF9EQUNfSCAqLworI2VuZGlmIC8qIFNUTTMyRjR4eF9MTF9EQUNfSCAqLwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqIChDKSBDT1BZUklHSFQgU1RNaWNyb2VsZWN0cm9uaWNzICoqKioqRU5EIE9GIEZJTEUqKioqLwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZjR4eF9sbF9kbWEuaCBiL0luYy9zdG0zMmY0eHhfbGxfZG1hLmgKaW5kZXggYTE1NjBkNi4uNjMyNjRlNiAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZjR4eF9sbF9kbWEuaAorKysgYi9JbmMvc3RtMzJmNHh4X2xsX2RtYS5oCkBAIC0yODUsMTQgKzI4NSwyNCBAQAogLyoqIEBkZWZncm91cCBETUFfTExfRUNfQ0hBTk5FTCBDSEFOTkVMCiAgICogQHsKICAgKi8KLSNkZWZpbmUgTExfRE1BX0NIQU5ORUxfMCAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2VsZWN0IENoYW5uZWwwIG9mIERNQSBJbnN0YW5jZSAqLwotI2RlZmluZSBMTF9ETUFfQ0hBTk5FTF8xICAgICAgICAgICAgICAgICAgRE1BX1N4Q1JfQ0hTRUxfMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTZWxlY3QgQ2hhbm5lbDEgb2YgRE1BIEluc3RhbmNlICovCi0jZGVmaW5lIExMX0RNQV9DSEFOTkVMXzIgICAgICAgICAgICAgICAgICBETUFfU3hDUl9DSFNFTF8xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNlbGVjdCBDaGFubmVsMiBvZiBETUEgSW5zdGFuY2UgKi8KLSNkZWZpbmUgTExfRE1BX0NIQU5ORUxfMyAgICAgICAgICAgICAgICAgIChETUFfU3hDUl9DSFNFTF8wIHwgRE1BX1N4Q1JfQ0hTRUxfMSkgICAgICAgICAgICAgICAgICAgICAgLyogU2VsZWN0IENoYW5uZWwzIG9mIERNQSBJbnN0YW5jZSAqLwotI2RlZmluZSBMTF9ETUFfQ0hBTk5FTF80ICAgICAgICAgICAgICAgICAgRE1BX1N4Q1JfQ0hTRUxfMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTZWxlY3QgQ2hhbm5lbDQgb2YgRE1BIEluc3RhbmNlICovCi0jZGVmaW5lIExMX0RNQV9DSEFOTkVMXzUgICAgICAgICAgICAgICAgICAoRE1BX1N4Q1JfQ0hTRUxfMiB8IERNQV9TeENSX0NIU0VMXzApICAgICAgICAgICAgICAgICAgICAgIC8qIFNlbGVjdCBDaGFubmVsNSBvZiBETUEgSW5zdGFuY2UgKi8KLSNkZWZpbmUgTExfRE1BX0NIQU5ORUxfNiAgICAgICAgICAgICAgICAgIChETUFfU3hDUl9DSFNFTF8yIHwgRE1BX1N4Q1JfQ0hTRUxfMSkgICAgICAgICAgICAgICAgICAgICAgLyogU2VsZWN0IENoYW5uZWw2IG9mIERNQSBJbnN0YW5jZSAqLwotI2RlZmluZSBMTF9ETUFfQ0hBTk5FTF83ICAgICAgICAgICAgICAgICAgKERNQV9TeENSX0NIU0VMXzIgfCBETUFfU3hDUl9DSFNFTF8xIHwgRE1BX1N4Q1JfQ0hTRUxfMCkgICAvKiBTZWxlY3QgQ2hhbm5lbDcgb2YgRE1BIEluc3RhbmNlICovCisjZGVmaW5lIExMX0RNQV9DSEFOTkVMXzAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTZWxlY3QgQ2hhbm5lbDAgb2YgRE1BIEluc3RhbmNlICovCisjZGVmaW5lIExMX0RNQV9DSEFOTkVMXzEgICAgICAgICAgICAgICAgICBETUFfU3hDUl9DSFNFTF8wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTZWxlY3QgQ2hhbm5lbDEgb2YgRE1BIEluc3RhbmNlICovCisjZGVmaW5lIExMX0RNQV9DSEFOTkVMXzIgICAgICAgICAgICAgICAgICBETUFfU3hDUl9DSFNFTF8xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTZWxlY3QgQ2hhbm5lbDIgb2YgRE1BIEluc3RhbmNlICovCisjZGVmaW5lIExMX0RNQV9DSEFOTkVMXzMgICAgICAgICAgICAgICAgICAoRE1BX1N4Q1JfQ0hTRUxfMCB8IERNQV9TeENSX0NIU0VMXzEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTZWxlY3QgQ2hhbm5lbDMgb2YgRE1BIEluc3RhbmNlICovCisjZGVmaW5lIExMX0RNQV9DSEFOTkVMXzQgICAgICAgICAgICAgICAgICBETUFfU3hDUl9DSFNFTF8yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTZWxlY3QgQ2hhbm5lbDQgb2YgRE1BIEluc3RhbmNlICovCisjZGVmaW5lIExMX0RNQV9DSEFOTkVMXzUgICAgICAgICAgICAgICAgICAoRE1BX1N4Q1JfQ0hTRUxfMiB8IERNQV9TeENSX0NIU0VMXzApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTZWxlY3QgQ2hhbm5lbDUgb2YgRE1BIEluc3RhbmNlICovCisjZGVmaW5lIExMX0RNQV9DSEFOTkVMXzYgICAgICAgICAgICAgICAgICAoRE1BX1N4Q1JfQ0hTRUxfMiB8IERNQV9TeENSX0NIU0VMXzEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTZWxlY3QgQ2hhbm5lbDYgb2YgRE1BIEluc3RhbmNlICovCisjZGVmaW5lIExMX0RNQV9DSEFOTkVMXzcgICAgICAgICAgICAgICAgICAoRE1BX1N4Q1JfQ0hTRUxfMiB8IERNQV9TeENSX0NIU0VMXzEgfCBETUFfU3hDUl9DSFNFTF8wKSAgICAgICAgICAgICAgICAgICAgICAvKiBTZWxlY3QgQ2hhbm5lbDcgb2YgRE1BIEluc3RhbmNlICovCisjaWYgZGVmaW5lZCAoRE1BX1N4Q1JfQ0hTRUxfMykKKyNkZWZpbmUgTExfRE1BX0NIQU5ORUxfOCAgICAgICAgICAgICAgICAgIERNQV9TeENSX0NIU0VMXzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNlbGVjdCBDaGFubmVsOCBvZiBETUEgSW5zdGFuY2UgKi8KKyNkZWZpbmUgTExfRE1BX0NIQU5ORUxfOSAgICAgICAgICAgICAgICAgIChETUFfU3hDUl9DSFNFTF8zIHwgRE1BX1N4Q1JfQ0hTRUxfMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNlbGVjdCBDaGFubmVsOSBvZiBETUEgSW5zdGFuY2UgKi8KKyNkZWZpbmUgTExfRE1BX0NIQU5ORUxfMTAgICAgICAgICAgICAgICAgIChETUFfU3hDUl9DSFNFTF8zIHwgRE1BX1N4Q1JfQ0hTRUxfMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNlbGVjdCBDaGFubmVsMTAgb2YgRE1BIEluc3RhbmNlICovCisjZGVmaW5lIExMX0RNQV9DSEFOTkVMXzExICAgICAgICAgICAgICAgICAoRE1BX1N4Q1JfQ0hTRUxfMyB8IERNQV9TeENSX0NIU0VMXzEgfCBETUFfU3hDUl9DSFNFTF8wKSAgICAgICAgICAgICAgICAgICAgICAvKiBTZWxlY3QgQ2hhbm5lbDExIG9mIERNQSBJbnN0YW5jZSAqLworI2RlZmluZSBMTF9ETUFfQ0hBTk5FTF8xMiAgICAgICAgICAgICAgICAgKERNQV9TeENSX0NIU0VMXzMgfCBETUFfU3hDUl9DSFNFTF8yKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2VsZWN0IENoYW5uZWwxMiBvZiBETUEgSW5zdGFuY2UgKi8KKyNkZWZpbmUgTExfRE1BX0NIQU5ORUxfMTMgICAgICAgICAgICAgICAgIChETUFfU3hDUl9DSFNFTF8zIHwgRE1BX1N4Q1JfQ0hTRUxfMiB8IERNQV9TeENSX0NIU0VMXzApICAgICAgICAgICAgICAgICAgICAgIC8qIFNlbGVjdCBDaGFubmVsMTMgb2YgRE1BIEluc3RhbmNlICovCisjZGVmaW5lIExMX0RNQV9DSEFOTkVMXzE0ICAgICAgICAgICAgICAgICAoRE1BX1N4Q1JfQ0hTRUxfMyB8IERNQV9TeENSX0NIU0VMXzIgfCBETUFfU3hDUl9DSFNFTF8xKSAgICAgICAgICAgICAgICAgICAgICAvKiBTZWxlY3QgQ2hhbm5lbDE0IG9mIERNQSBJbnN0YW5jZSAqLworI2RlZmluZSBMTF9ETUFfQ0hBTk5FTF8xNSAgICAgICAgICAgICAgICAgKERNQV9TeENSX0NIU0VMXzMgfCBETUFfU3hDUl9DSFNFTF8yIHwgRE1BX1N4Q1JfQ0hTRUxfMSB8IERNQV9TeENSX0NIU0VMXzApICAgLyogU2VsZWN0IENoYW5uZWwxNSBvZiBETUEgSW5zdGFuY2UgKi8KKyNlbmRpZiAvKiBETUFfU3hDUl9DSFNFTF8zICovCiAvKioKICAgKiBAfQogICAqLwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZjR4eF9sbF9kbWEyZC5oIGIvSW5jL3N0bTMyZjR4eF9sbF9kbWEyZC5oCmluZGV4IDY4NjRiNTQuLmE3ODNkMDUgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmY0eHhfbGxfZG1hMmQuaAorKysgYi9JbmMvc3RtMzJmNHh4X2xsX2RtYTJkLmgKQEAgLTY2LDczICs2NiwxMDMgQEAKICAgdWludDMyX3QgTW9kZTsgICAgICAgICAgICAgICAgIC8qITwgU3BlY2lmaWVzIHRoZSBETUEyRCB0cmFuc2ZlciBtb2RlLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgdmFsdWUgb2YgQHJlZiBETUEyRF9MTF9FQ19NT0RFLgogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBtb2RpZmllZCBhZnRlcndhcmRzIHVzaW5nIHVuaXRhcnkgZnVuY3Rpb24gQHJlZiBMTF9ETUEyRF9TZXRNb2RlKCkuKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG1vZGlmaWVkIGFmdGVyd2FyZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzaW5nIHVuaXRhcnkgZnVuY3Rpb24gQHJlZiBMTF9ETUEyRF9TZXRNb2RlKCkuICovCiAKICAgdWludDMyX3QgQ29sb3JNb2RlOyAgICAgICAgICAgIC8qITwgU3BlY2lmaWVzIHRoZSBjb2xvciBmb3JtYXQgb2YgdGhlIG91dHB1dCBpbWFnZS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIHZhbHVlIG9mIEByZWYgRE1BMkRfTExfRUNfT1VUUFVUX0NPTE9SX01PREUuCiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG1vZGlmaWVkIGFmdGVyd2FyZHMgdXNpbmcgdW5pdGFyeSBmdW5jdGlvbiBAcmVmIExMX0RNQTJEX1NldE91dHB1dENvbG9yTW9kZSgpLiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgbW9kaWZpZWQgYWZ0ZXJ3YXJkcyB1c2luZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pdGFyeSBmdW5jdGlvbiBAcmVmIExMX0RNQTJEX1NldE91dHB1dENvbG9yTW9kZSgpLiAqLwogCiAgIHVpbnQzMl90IE91dHB1dEJsdWU7ICAgICAgICAgICAvKiE8IFNwZWNpZmllcyB0aGUgQmx1ZSB2YWx1ZSBvZiB0aGUgb3V0cHV0IGltYWdlLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSBudW1iZXIgYmV0d2VlbiBNaW5fRGF0YSA9IDB4MDAgYW5kIE1heF9EYXRhID0gMHhGRiBpZiBBUkdCODg4OCBjb2xvciBtb2RlIGlzIHNlbGVjdGVkLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSBudW1iZXIgYmV0d2VlbiBNaW5fRGF0YSA9IDB4MDAgYW5kIE1heF9EYXRhID0gMHhGRiBpZiBSR0I4ODggY29sb3IgbW9kZSBpcyBzZWxlY3RlZC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gTWluX0RhdGEgPSAweDAwIGFuZCBNYXhfRGF0YSA9IDB4MUYgaWYgUkdCNTY1IGNvbG9yIG1vZGUgaXMgc2VsZWN0ZWQuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIG51bWJlciBiZXR3ZWVuIE1pbl9EYXRhID0gMHgwMCBhbmQgTWF4X0RhdGEgPSAweDFGIGlmIEFSR0IxNTU1IGNvbG9yIG1vZGUgaXMgc2VsZWN0ZWQuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIG51bWJlciBiZXR3ZWVuIE1pbl9EYXRhID0gMHgwMCBhbmQgTWF4X0RhdGEgPSAweDBGIGlmIEFSR0I0NDQ0IGNvbG9yIG1vZGUgaXMgc2VsZWN0ZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIG51bWJlciBiZXR3ZWVuOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1pbl9EYXRhID0gMHgwMCBhbmQgTWF4X0RhdGEgPSAweEZGIGlmIEFSR0I4ODg4IGNvbG9yIG1vZGUgaXMgc2VsZWN0ZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIG51bWJlciBiZXR3ZWVuOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1pbl9EYXRhID0gMHgwMCBhbmQgTWF4X0RhdGEgPSAweEZGIGlmIFJHQjg4OCBjb2xvciBtb2RlIGlzIHNlbGVjdGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSBudW1iZXIgYmV0d2VlbjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNaW5fRGF0YSA9IDB4MDAgYW5kIE1heF9EYXRhID0gMHgxRiBpZiBSR0I1NjUgY29sb3IgbW9kZSBpcyBzZWxlY3RlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW46CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWluX0RhdGEgPSAweDAwIGFuZCBNYXhfRGF0YSA9IDB4MUYgaWYgQVJHQjE1NTUgY29sb3IgbW9kZSBpcyBzZWxlY3RlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW46CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWluX0RhdGEgPSAweDAwIGFuZCBNYXhfRGF0YSA9IDB4MEYgaWYgQVJHQjQ0NDQgY29sb3IgbW9kZSBpcyBzZWxlY3RlZC4KIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgbW9kaWZpZWQgYWZ0ZXJ3YXJkcyB1c2luZyB1bml0YXJ5IGZ1bmN0aW9uIEByZWYgTExfRE1BMkRfU2V0T3V0cHV0Q29sb3IoKSBvciBjb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBtb2RpZmllZCBhZnRlcndhcmRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2luZyB1bml0YXJ5IGZ1bmN0aW9uIEByZWYgTExfRE1BMkRfU2V0T3V0cHV0Q29sb3IoKSBvciBjb25maWd1cmF0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIEByZWYgTExfRE1BMkRfQ29uZmlnT3V0cHV0Q29sb3IoKS4gKi8KIAogICB1aW50MzJfdCBPdXRwdXRHcmVlbjsgICAgICAgICAgLyohPCBTcGVjaWZpZXMgdGhlIEdyZWVuIHZhbHVlIG9mIHRoZSBvdXRwdXQgaW1hZ2UuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIG51bWJlciBiZXR3ZWVuIE1pbl9EYXRhID0gMHgwMCBhbmQgTWF4X0RhdGEgPSAweEZGIGlmIEFSR0I4ODg4IGNvbG9yIG1vZGUgaXMgc2VsZWN0ZWQuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIG51bWJlciBiZXR3ZWVuIE1pbl9EYXRhID0gMHgwMCBhbmQgTWF4X0RhdGEgPSAweEZGIGlmIFJHQjg4OCBjb2xvciBtb2RlIGlzIHNlbGVjdGVkLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSBudW1iZXIgYmV0d2VlbiBNaW5fRGF0YSA9IDB4MDAgYW5kIE1heF9EYXRhID0gMHgzRiBpZiBSR0I1NjUgY29sb3IgbW9kZSBpcyBzZWxlY3RlZC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gTWluX0RhdGEgPSAweDAwIGFuZCBNYXhfRGF0YSA9IDB4MUYgaWYgQVJHQjE1NTUgY29sb3IgbW9kZSBpcyBzZWxlY3RlZC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gTWluX0RhdGEgPSAweDAwIGFuZCBNYXhfRGF0YSA9IDB4MEYgaWYgQVJHQjQ0NDQgY29sb3IgbW9kZSBpcyBzZWxlY3RlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW46CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWluX0RhdGEgPSAweDAwIGFuZCBNYXhfRGF0YSA9IDB4RkYgaWYgQVJHQjg4ODggY29sb3IgbW9kZSBpcyBzZWxlY3RlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW46CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWluX0RhdGEgPSAweDAwIGFuZCBNYXhfRGF0YSA9IDB4RkYgaWYgUkdCODg4IGNvbG9yIG1vZGUgaXMgc2VsZWN0ZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIG51bWJlciBiZXR3ZWVuOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1pbl9EYXRhID0gMHgwMCBhbmQgTWF4X0RhdGEgPSAweDNGIGlmIFJHQjU2NSBjb2xvciBtb2RlIGlzIHNlbGVjdGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSBudW1iZXIgYmV0d2VlbjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNaW5fRGF0YSA9IDB4MDAgYW5kIE1heF9EYXRhID0gMHgxRiBpZiBBUkdCMTU1NSBjb2xvciBtb2RlIGlzIHNlbGVjdGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSBudW1iZXIgYmV0d2VlbjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNaW5fRGF0YSA9IDB4MDAgYW5kIE1heF9EYXRhID0gMHgwRiBpZiBBUkdCNDQ0NCBjb2xvciBtb2RlIGlzIHNlbGVjdGVkLgogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBtb2RpZmllZCBhZnRlcndhcmRzIHVzaW5nIHVuaXRhcnkgZnVuY3Rpb24gQHJlZiBMTF9ETUEyRF9TZXRPdXRwdXRDb2xvcigpIG9yIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG1vZGlmaWVkIGFmdGVyd2FyZHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNpbmcgdW5pdGFyeSBmdW5jdGlvbiBAcmVmIExMX0RNQTJEX1NldE91dHB1dENvbG9yKCkgb3IgY29uZmlndXJhdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBAcmVmIExMX0RNQTJEX0NvbmZpZ091dHB1dENvbG9yKCkuICovCiAKICAgdWludDMyX3QgT3V0cHV0UmVkOyAgICAgICAgICAgIC8qITwgU3BlY2lmaWVzIHRoZSBSZWQgdmFsdWUgb2YgdGhlIG91dHB1dCBpbWFnZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gTWluX0RhdGEgPSAweDAwIGFuZCBNYXhfRGF0YSA9IDB4RkYgaWYgQVJHQjg4ODggY29sb3IgbW9kZSBpcyBzZWxlY3RlZC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gTWluX0RhdGEgPSAweDAwIGFuZCBNYXhfRGF0YSA9IDB4RkYgaWYgUkdCODg4IGNvbG9yIG1vZGUgaXMgc2VsZWN0ZWQuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIG51bWJlciBiZXR3ZWVuIE1pbl9EYXRhID0gMHgwMCBhbmQgTWF4X0RhdGEgPSAweDFGIGlmIFJHQjU2NSBjb2xvciBtb2RlIGlzIHNlbGVjdGVkLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSBudW1iZXIgYmV0d2VlbiBNaW5fRGF0YSA9IDB4MDAgYW5kIE1heF9EYXRhID0gMHgxRiBpZiBBUkdCMTU1NSBjb2xvciBtb2RlIGlzIHNlbGVjdGVkLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSBudW1iZXIgYmV0d2VlbiBNaW5fRGF0YSA9IDB4MDAgYW5kIE1heF9EYXRhID0gMHgwRiBpZiBBUkdCNDQ0NCBjb2xvciBtb2RlIGlzIHNlbGVjdGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSBudW1iZXIgYmV0d2VlbjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNaW5fRGF0YSA9IDB4MDAgYW5kIE1heF9EYXRhID0gMHhGRiBpZiBBUkdCODg4OCBjb2xvciBtb2RlIGlzIHNlbGVjdGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSBudW1iZXIgYmV0d2VlbjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNaW5fRGF0YSA9IDB4MDAgYW5kIE1heF9EYXRhID0gMHhGRiBpZiBSR0I4ODggY29sb3IgbW9kZSBpcyBzZWxlY3RlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW46CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWluX0RhdGEgPSAweDAwIGFuZCBNYXhfRGF0YSA9IDB4MUYgaWYgUkdCNTY1IGNvbG9yIG1vZGUgaXMgc2VsZWN0ZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIG51bWJlciBiZXR3ZWVuOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1pbl9EYXRhID0gMHgwMCBhbmQgTWF4X0RhdGEgPSAweDFGIGlmIEFSR0IxNTU1IGNvbG9yIG1vZGUgaXMgc2VsZWN0ZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIG51bWJlciBiZXR3ZWVuOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1pbl9EYXRhID0gMHgwMCBhbmQgTWF4X0RhdGEgPSAweDBGIGlmIEFSR0I0NDQ0IGNvbG9yIG1vZGUgaXMgc2VsZWN0ZWQuCiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG1vZGlmaWVkIGFmdGVyd2FyZHMgdXNpbmcgdW5pdGFyeSBmdW5jdGlvbiBAcmVmIExMX0RNQTJEX1NldE91dHB1dENvbG9yKCkgb3IgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgbW9kaWZpZWQgYWZ0ZXJ3YXJkcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2luZyB1bml0YXJ5IGZ1bmN0aW9uIEByZWYgTExfRE1BMkRfU2V0T3V0cHV0Q29sb3IoKSBvciBjb25maWd1cmF0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIEByZWYgTExfRE1BMkRfQ29uZmlnT3V0cHV0Q29sb3IoKS4gKi8KIAogICB1aW50MzJfdCBPdXRwdXRBbHBoYTsgICAgICAgICAgLyohPCBTcGVjaWZpZXMgdGhlIEFscGhhIGNoYW5uZWwgb2YgdGhlIG91dHB1dCBpbWFnZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gTWluX0RhdGEgPSAweDAwIGFuZCBNYXhfRGF0YSA9IDB4RkYgaWYgQVJHQjg4ODggY29sb3IgbW9kZSBpcyBzZWxlY3RlZC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gTWluX0RhdGEgPSAweDAwIGFuZCBNYXhfRGF0YSA9IDB4MDEgaWYgQVJHQjE1NTUgY29sb3IgbW9kZSBpcyBzZWxlY3RlZC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gTWluX0RhdGEgPSAweDAwIGFuZCBNYXhfRGF0YSA9IDB4MEYgaWYgQVJHQjQ0NDQgY29sb3IgbW9kZSBpcyBzZWxlY3RlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW46CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWluX0RhdGEgPSAweDAwIGFuZCBNYXhfRGF0YSA9IDB4RkYgaWYgQVJHQjg4ODggY29sb3IgbW9kZSBpcyBzZWxlY3RlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW46CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWluX0RhdGEgPSAweDAwIGFuZCBNYXhfRGF0YSA9IDB4MDEgaWYgQVJHQjE1NTUgY29sb3IgbW9kZSBpcyBzZWxlY3RlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW46CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWluX0RhdGEgPSAweDAwIGFuZCBNYXhfRGF0YSA9IDB4MEYgaWYgQVJHQjQ0NDQgY29sb3IgbW9kZSBpcyBzZWxlY3RlZC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBUaGlzIHBhcmFtZXRlciBpcyBub3QgY29uc2lkZXJlZCBpZiBSR0I4ODggb3IgUkdCNTY1IGNvbG9yIG1vZGUgaXMgc2VsZWN0ZWQuCiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG1vZGlmaWVkIGFmdGVyd2FyZHMgdXNpbmcgdW5pdGFyeSBmdW5jdGlvbiBAcmVmIExMX0RNQTJEX1NldE91dHB1dENvbG9yKCkgb3IgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgbW9kaWZpZWQgYWZ0ZXJ3YXJkcyB1c2luZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pdGFyeSBmdW5jdGlvbiBAcmVmIExMX0RNQTJEX1NldE91dHB1dENvbG9yKCkgb3IgY29uZmlndXJhdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBAcmVmIExMX0RNQTJEX0NvbmZpZ091dHB1dENvbG9yKCkuICovCiAKICAgdWludDMyX3QgT3V0cHV0TWVtb3J5QWRkcmVzczsgIC8qITwgU3BlY2lmaWVzIHRoZSBtZW1vcnkgYWRkcmVzcy4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gTWluX0RhdGEgPSAweDAwMDAgYW5kIE1heF9EYXRhID0gMHhGRkZGRkZGRi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW46CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWluX0RhdGEgPSAweDAwMDAgYW5kIE1heF9EYXRhID0gMHhGRkZGRkZGRi4KIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgbW9kaWZpZWQgYWZ0ZXJ3YXJkcyB1c2luZyB1bml0YXJ5IGZ1bmN0aW9uIEByZWYgTExfRE1BMkRfU2V0T3V0cHV0TWVtQWRkcigpLiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgbW9kaWZpZWQgYWZ0ZXJ3YXJkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNpbmcgdW5pdGFyeSBmdW5jdGlvbiBAcmVmIExMX0RNQTJEX1NldE91dHB1dE1lbUFkZHIoKS4gKi8KIAogCiAKICAgdWludDMyX3QgTGluZU9mZnNldDsgICAgICAgICAgIC8qITwgU3BlY2lmaWVzIHRoZSBvdXRwdXQgbGluZSBvZmZzZXQgdmFsdWUuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIG51bWJlciBiZXR3ZWVuIE1pbl9EYXRhID0gMHgwMDAwIGFuZCBNYXhfRGF0YSA9IDB4M0ZGRi4KIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgbW9kaWZpZWQgYWZ0ZXJ3YXJkcyB1c2luZyB1bml0YXJ5IGZ1bmN0aW9uIEByZWYgTExfRE1BMkRfU2V0TGluZU9mZnNldCgpLiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgbW9kaWZpZWQgYWZ0ZXJ3YXJkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNpbmcgdW5pdGFyeSBmdW5jdGlvbiBAcmVmIExMX0RNQTJEX1NldExpbmVPZmZzZXQoKS4gKi8KIAogICB1aW50MzJfdCBOYnJPZkxpbmVzOyAgICAgICAgICAgLyohPCBTcGVjaWZpZXMgdGhlIG51bWJlciBvZiBsaW5lcyBvZiB0aGUgYXJlYSB0byBiZSB0cmFuc2ZlcnJlZC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gTWluX0RhdGEgPSAweDAwMDAgYW5kIE1heF9EYXRhID0gMHhGRkZGLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSBudW1iZXIgYmV0d2VlbjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNaW5fRGF0YSA9IDB4MDAwMCBhbmQgTWF4X0RhdGEgPSAweEZGRkYuCiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG1vZGlmaWVkIGFmdGVyd2FyZHMgdXNpbmcgdW5pdGFyeSBmdW5jdGlvbiBAcmVmIExMX0RNQTJEX1NldE5ick9mTGluZXMoKS4gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG1vZGlmaWVkIGFmdGVyd2FyZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzaW5nIHVuaXRhcnkgZnVuY3Rpb24gQHJlZiBMTF9ETUEyRF9TZXROYnJPZkxpbmVzKCkuICovCiAKLSAgdWludDMyX3QgTmJyT2ZQaXhlbHNQZXJMaW5lczsgIC8qITwgU3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgcGl4ZWxzIHBlciBsaW5lcyBvZiB0aGUgYXJlYSB0byBiZSB0cmFuc2ZlcmVkLgorICB1aW50MzJfdCBOYnJPZlBpeGVsc1BlckxpbmVzOyAgLyohPCBTcGVjaWZpZXMgdGhlIG51bWJlciBvZiBwaXhlbHMgcGVyIGxpbmVzIG9mIHRoZSBhcmVhIHRvIGJlIHRyYW5zZmVycmVkLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSBudW1iZXIgYmV0d2VlbiBNaW5fRGF0YSA9IDB4MDAwMCBhbmQgTWF4X0RhdGEgPSAweDNGRkYuCiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG1vZGlmaWVkIGFmdGVyd2FyZHMgdXNpbmcgdW5pdGFyeSBmdW5jdGlvbiBAcmVmIExMX0RNQTJEX1NldE5ick9mUGl4ZWxzUGVyTGluZXMoKS4gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG1vZGlmaWVkIGFmdGVyd2FyZHMgdXNpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXRhcnkgZnVuY3Rpb24gQHJlZiBMTF9ETUEyRF9TZXROYnJPZlBpeGVsc1BlckxpbmVzKCkuICovCiAKIAogfSBMTF9ETUEyRF9Jbml0VHlwZURlZjsKQEAgLTE0Myw3ICsxNzMsOCBAQAogdHlwZWRlZiBzdHJ1Y3QKIHsKICAgdWludDMyX3QgTWVtb3J5QWRkcmVzczsgICAgICAgIC8qITwgU3BlY2lmaWVzIHRoZSBmb3JlZ3JvdW5kIG9yIGJhY2tncm91bmQgbWVtb3J5IGFkZHJlc3MuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIG51bWJlciBiZXR3ZWVuIE1pbl9EYXRhID0gMHgwMDAwIGFuZCBNYXhfRGF0YSA9IDB4RkZGRkZGRkYuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIG51bWJlciBiZXR3ZWVuOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1pbl9EYXRhID0gMHgwMDAwIGFuZCBNYXhfRGF0YSA9IDB4RkZGRkZGRkYuCiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG1vZGlmaWVkIGFmdGVyd2FyZHMgdXNpbmcgdW5pdGFyeSBmdW5jdGlvbnMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBAcmVmIExMX0RNQTJEX0ZHTkRfU2V0TWVtQWRkcigpIGZvciBmb3JlZ3JvdW5kIGxheWVyLApAQCAtMjEzLDcgKzI0NCw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gQHJlZiBMTF9ETUEyRF9CR05EX1NldFJlZENvbG9yKCkgZm9yIGJhY2tncm91bmQgbGF5ZXIuICovCiAKICAgdWludDMyX3QgQ0xVVE1lbW9yeUFkZHJlc3M7ICAgIC8qITwgU3BlY2lmaWVzIHRoZSBmb3JlZ3JvdW5kIG9yIGJhY2tncm91bmQgQ0xVVCBtZW1vcnkgYWRkcmVzcy4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gTWluX0RhdGEgPSAweDAwMDAgYW5kIE1heF9EYXRhID0gMHhGRkZGRkZGRi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW46CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWluX0RhdGEgPSAweDAwMDAgYW5kIE1heF9EYXRhID0gMHhGRkZGRkZGRi4KIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgbW9kaWZpZWQgYWZ0ZXJ3YXJkcyB1c2luZyB1bml0YXJ5IGZ1bmN0aW9ucwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIEByZWYgTExfRE1BMkRfRkdORF9TZXRDTFVUTWVtQWRkcigpIGZvciBmb3JlZ3JvdW5kIGxheWVyLApAQCAtMjMxLDQ1ICsyNjMsNjggQEAKICAgdWludDMyX3QgQ29sb3JNb2RlOyAgICAgICAgICAgIC8qITwgU3BlY2lmaWVzIHRoZSBjb2xvciBmb3JtYXQgb2YgdGhlIG91dHB1dCBpbWFnZS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIHZhbHVlIG9mIEByZWYgRE1BMkRfTExfRUNfT1VUUFVUX0NPTE9SX01PREUuCiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG1vZGlmaWVkIGFmdGVyd2FyZHMgdXNpbmcgdW5pdGFyeSBmdW5jdGlvbiBAcmVmIExMX0RNQTJEX1NldE91dHB1dENvbG9yTW9kZSgpLiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgbW9kaWZpZWQgYWZ0ZXJ3YXJkcyB1c2luZworICAgICAgICAgICAgICAgICAgICB1bml0YXJ5IGZ1bmN0aW9uIEByZWYgTExfRE1BMkRfU2V0T3V0cHV0Q29sb3JNb2RlKCkuICovCiAKICAgdWludDMyX3QgT3V0cHV0Qmx1ZTsgICAgICAgICAgIC8qITwgU3BlY2lmaWVzIHRoZSBCbHVlIHZhbHVlIG9mIHRoZSBvdXRwdXQgaW1hZ2UuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIG51bWJlciBiZXR3ZWVuIE1pbl9EYXRhID0gMHgwMCBhbmQgTWF4X0RhdGEgPSAweEZGIGlmIEFSR0I4ODg4IGNvbG9yIG1vZGUgaXMgc2VsZWN0ZWQuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIG51bWJlciBiZXR3ZWVuIE1pbl9EYXRhID0gMHgwMCBhbmQgTWF4X0RhdGEgPSAweEZGIGlmIFJHQjg4OCBjb2xvciBtb2RlIGlzIHNlbGVjdGVkLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSBudW1iZXIgYmV0d2VlbiBNaW5fRGF0YSA9IDB4MDAgYW5kIE1heF9EYXRhID0gMHgxRiBpZiBSR0I1NjUgY29sb3IgbW9kZSBpcyBzZWxlY3RlZC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gTWluX0RhdGEgPSAweDAwIGFuZCBNYXhfRGF0YSA9IDB4MUYgaWYgQVJHQjE1NTUgY29sb3IgbW9kZSBpcyBzZWxlY3RlZC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gTWluX0RhdGEgPSAweDAwIGFuZCBNYXhfRGF0YSA9IDB4MEYgaWYgQVJHQjQ0NDQgY29sb3IgbW9kZSBpcyBzZWxlY3RlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW46CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWluX0RhdGEgPSAweDAwIGFuZCBNYXhfRGF0YSA9IDB4RkYgaWYgQVJHQjg4ODggY29sb3IgbW9kZSBpcyBzZWxlY3RlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW46CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWluX0RhdGEgPSAweDAwIGFuZCBNYXhfRGF0YSA9IDB4RkYgaWYgUkdCODg4IGNvbG9yIG1vZGUgaXMgc2VsZWN0ZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIG51bWJlciBiZXR3ZWVuOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1pbl9EYXRhID0gMHgwMCBhbmQgTWF4X0RhdGEgPSAweDFGIGlmIFJHQjU2NSBjb2xvciBtb2RlIGlzIHNlbGVjdGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSBudW1iZXIgYmV0d2VlbjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNaW5fRGF0YSA9IDB4MDAgYW5kIE1heF9EYXRhID0gMHgxRiBpZiBBUkdCMTU1NSBjb2xvciBtb2RlIGlzIHNlbGVjdGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSBudW1iZXIgYmV0d2VlbjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNaW5fRGF0YSA9IDB4MDAgYW5kIE1heF9EYXRhID0gMHgwRiBpZiBBUkdCNDQ0NCBjb2xvciBtb2RlIGlzIHNlbGVjdGVkLgogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBtb2RpZmllZCBhZnRlcndhcmRzIHVzaW5nIHVuaXRhcnkgZnVuY3Rpb24gQHJlZiBMTF9ETUEyRF9TZXRPdXRwdXRDb2xvcigpIG9yIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG1vZGlmaWVkIGFmdGVyd2FyZHMgdXNpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXRhcnkgZnVuY3Rpb24gQHJlZiBMTF9ETUEyRF9TZXRPdXRwdXRDb2xvcigpIG9yIGNvbmZpZ3VyYXRpb24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gQHJlZiBMTF9ETUEyRF9Db25maWdPdXRwdXRDb2xvcigpLiAqLwogCiAgIHVpbnQzMl90IE91dHB1dEdyZWVuOyAgICAgICAgICAvKiE8IFNwZWNpZmllcyB0aGUgR3JlZW4gdmFsdWUgb2YgdGhlIG91dHB1dCBpbWFnZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gTWluX0RhdGEgPSAweDAwIGFuZCBNYXhfRGF0YSA9IDB4RkYgaWYgQVJHQjg4ODggY29sb3IgbW9kZSBpcyBzZWxlY3RlZC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gTWluX0RhdGEgPSAweDAwIGFuZCBNYXhfRGF0YSA9IDB4RkYgaWYgUkdCODg4IGNvbG9yIG1vZGUgaXMgc2VsZWN0ZWQuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIG51bWJlciBiZXR3ZWVuIE1pbl9EYXRhID0gMHgwMCBhbmQgTWF4X0RhdGEgPSAweDNGIGlmIFJHQjU2NSBjb2xvciBtb2RlIGlzIHNlbGVjdGVkLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSBudW1iZXIgYmV0d2VlbiBNaW5fRGF0YSA9IDB4MDAgYW5kIE1heF9EYXRhID0gMHgxRiBpZiBBUkdCMTU1NSBjb2xvciBtb2RlIGlzIHNlbGVjdGVkLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSBudW1iZXIgYmV0d2VlbiBNaW5fRGF0YSA9IDB4MDAgYW5kIE1heF9EYXRhID0gMHgwRiBpZiBBUkdCNDQ0NCBjb2xvciBtb2RlIGlzIHNlbGVjdGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSBudW1iZXIgYmV0d2VlbjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNaW5fRGF0YSA9IDB4MDAgYW5kIE1heF9EYXRhID0gMHhGRiBpZiBBUkdCODg4OCBjb2xvciBtb2RlIGlzIHNlbGVjdGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSBudW1iZXIgYmV0d2VlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1pbl9EYXRhID0gMHgwMCBhbmQgTWF4X0RhdGEgPSAweEZGIGlmIFJHQjg4OCBjb2xvciBtb2RlIGlzIHNlbGVjdGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSBudW1iZXIgYmV0d2VlbjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNaW5fRGF0YSA9IDB4MDAgYW5kIE1heF9EYXRhID0gMHgzRiBpZiBSR0I1NjUgY29sb3IgbW9kZSBpcyBzZWxlY3RlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW46CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWluX0RhdGEgPSAweDAwIGFuZCBNYXhfRGF0YSA9IDB4MUYgaWYgQVJHQjE1NTUgY29sb3IgbW9kZSBpcyBzZWxlY3RlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW46CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWluX0RhdGEgPSAweDAwIGFuZCBNYXhfRGF0YSA9IDB4MEYgaWYgQVJHQjQ0NDQgY29sb3IgbW9kZSBpcyBzZWxlY3RlZC4KIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgbW9kaWZpZWQgYWZ0ZXJ3YXJkcyB1c2luZyB1bml0YXJ5IGZ1bmN0aW9uIEByZWYgTExfRE1BMkRfU2V0T3V0cHV0Q29sb3IoKSBvciBjb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBtb2RpZmllZCBhZnRlcndhcmRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2luZyB1bml0YXJ5IGZ1bmN0aW9uIEByZWYgTExfRE1BMkRfU2V0T3V0cHV0Q29sb3IoKSBvciBjb25maWd1cmF0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIEByZWYgTExfRE1BMkRfQ29uZmlnT3V0cHV0Q29sb3IoKS4gKi8KIAogICB1aW50MzJfdCBPdXRwdXRSZWQ7ICAgICAgICAgICAgLyohPCBTcGVjaWZpZXMgdGhlIFJlZCB2YWx1ZSBvZiB0aGUgb3V0cHV0IGltYWdlLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSBudW1iZXIgYmV0d2VlbiBNaW5fRGF0YSA9IDB4MDAgYW5kIE1heF9EYXRhID0gMHhGRiBpZiBBUkdCODg4OCBjb2xvciBtb2RlIGlzIHNlbGVjdGVkLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSBudW1iZXIgYmV0d2VlbiBNaW5fRGF0YSA9IDB4MDAgYW5kIE1heF9EYXRhID0gMHhGRiBpZiBSR0I4ODggY29sb3IgbW9kZSBpcyBzZWxlY3RlZC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gTWluX0RhdGEgPSAweDAwIGFuZCBNYXhfRGF0YSA9IDB4MUYgaWYgUkdCNTY1IGNvbG9yIG1vZGUgaXMgc2VsZWN0ZWQuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIG51bWJlciBiZXR3ZWVuIE1pbl9EYXRhID0gMHgwMCBhbmQgTWF4X0RhdGEgPSAweDFGIGlmIEFSR0IxNTU1IGNvbG9yIG1vZGUgaXMgc2VsZWN0ZWQuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIG51bWJlciBiZXR3ZWVuIE1pbl9EYXRhID0gMHgwMCBhbmQgTWF4X0RhdGEgPSAweDBGIGlmIEFSR0I0NDQ0IGNvbG9yIG1vZGUgaXMgc2VsZWN0ZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIG51bWJlciBiZXR3ZWVuOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1pbl9EYXRhID0gMHgwMCBhbmQgTWF4X0RhdGEgPSAweEZGIGlmIEFSR0I4ODg4IGNvbG9yIG1vZGUgaXMgc2VsZWN0ZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIG51bWJlciBiZXR3ZWVuOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1pbl9EYXRhID0gMHgwMCBhbmQgTWF4X0RhdGEgPSAweEZGIGlmIFJHQjg4OCBjb2xvciBtb2RlIGlzIHNlbGVjdGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSBudW1iZXIgYmV0d2VlbjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNaW5fRGF0YSA9IDB4MDAgYW5kIE1heF9EYXRhID0gMHgxRiBpZiBSR0I1NjUgY29sb3IgbW9kZSBpcyBzZWxlY3RlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW46CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWluX0RhdGEgPSAweDAwIGFuZCBNYXhfRGF0YSA9IDB4MUYgaWYgQVJHQjE1NTUgY29sb3IgbW9kZSBpcyBzZWxlY3RlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW46CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWluX0RhdGEgPSAweDAwIGFuZCBNYXhfRGF0YSA9IDB4MEYgaWYgQVJHQjQ0NDQgY29sb3IgbW9kZSBpcyBzZWxlY3RlZC4KIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgbW9kaWZpZWQgYWZ0ZXJ3YXJkcyB1c2luZyB1bml0YXJ5IGZ1bmN0aW9uIEByZWYgTExfRE1BMkRfU2V0T3V0cHV0Q29sb3IoKSBvciBjb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBtb2RpZmllZCBhZnRlcndhcmRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2luZyB1bml0YXJ5IGZ1bmN0aW9uIEByZWYgTExfRE1BMkRfU2V0T3V0cHV0Q29sb3IoKSBvciBjb25maWd1cmF0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIEByZWYgTExfRE1BMkRfQ29uZmlnT3V0cHV0Q29sb3IoKS4gKi8KIAogICB1aW50MzJfdCBPdXRwdXRBbHBoYTsgICAgICAgICAgLyohPCBTcGVjaWZpZXMgdGhlIEFscGhhIGNoYW5uZWwgb2YgdGhlIG91dHB1dCBpbWFnZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gTWluX0RhdGEgPSAweDAwIGFuZCBNYXhfRGF0YSA9IDB4RkYgaWYgQVJHQjg4ODggY29sb3IgbW9kZSBpcyBzZWxlY3RlZC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gTWluX0RhdGEgPSAweDAwIGFuZCBNYXhfRGF0YSA9IDB4MDEgaWYgQVJHQjE1NTUgY29sb3IgbW9kZSBpcyBzZWxlY3RlZC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gTWluX0RhdGEgPSAweDAwIGFuZCBNYXhfRGF0YSA9IDB4MEYgaWYgQVJHQjQ0NDQgY29sb3IgbW9kZSBpcyBzZWxlY3RlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW46CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWluX0RhdGEgPSAweDAwIGFuZCBNYXhfRGF0YSA9IDB4RkYgaWYgQVJHQjg4ODggY29sb3IgbW9kZSBpcyBzZWxlY3RlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW46CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWluX0RhdGEgPSAweDAwIGFuZCBNYXhfRGF0YSA9IDB4MDEgaWYgQVJHQjE1NTUgY29sb3IgbW9kZSBpcyBzZWxlY3RlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW46CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWluX0RhdGEgPSAweDAwIGFuZCBNYXhfRGF0YSA9IDB4MEYgaWYgQVJHQjQ0NDQgY29sb3IgbW9kZSBpcyBzZWxlY3RlZC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBUaGlzIHBhcmFtZXRlciBpcyBub3QgY29uc2lkZXJlZCBpZiBSR0I4ODggb3IgUkdCNTY1IGNvbG9yIG1vZGUgaXMgc2VsZWN0ZWQuCiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG1vZGlmaWVkIGFmdGVyd2FyZHMgdXNpbmcgdW5pdGFyeSBmdW5jdGlvbiBAcmVmIExMX0RNQTJEX1NldE91dHB1dENvbG9yKCkgb3IgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgbW9kaWZpZWQgYWZ0ZXJ3YXJkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNpbmcgdW5pdGFyeSBmdW5jdGlvbiBAcmVmIExMX0RNQTJEX1NldE91dHB1dENvbG9yKCkgb3IgY29uZmlndXJhdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBAcmVmIExMX0RNQTJEX0NvbmZpZ091dHB1dENvbG9yKCkuICovCiAKIH0gTExfRE1BMkRfQ29sb3JUeXBlRGVmOwpAQCAtMzU3LDkgKzQxMiwxMSBAQAogICAqIEB7CiAgICovCiAjZGVmaW5lIExMX0RNQTJEX0FMUEhBX01PREVfTk9fTU9ESUYgICAgICAgMHgwMDAwMDAwMFUgICAgICAgICAgICAgLyohPCBObyBtb2RpZmljYXRpb24gb2YgdGhlIGFscGhhIGNoYW5uZWwgdmFsdWUgKi8KLSNkZWZpbmUgTExfRE1BMkRfQUxQSEFfTU9ERV9SRVBMQUNFICAgICAgICBETUEyRF9GR1BGQ0NSX0FNXzAgICAgICAvKiE8IFJlcGxhY2Ugb3JpZ2luYWwgYWxwaGEgY2hhbm5lbCB2YWx1ZSBieSBwcm9ncmFtbWVkIGFscGhhIHZhbHVlICovCi0jZGVmaW5lIExMX0RNQTJEX0FMUEhBX01PREVfQ09NQklORSAgICAgICAgRE1BMkRfRkdQRkNDUl9BTV8xICAgICAgLyohPCBSZXBsYWNlIG9yaWdpbmFsIGFscGhhIGNoYW5uZWwgdmFsdWUgYnkgcHJvZ3JhbW1lZCBhbHBoYSB2YWx1ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggb3JpZ2luYWwgYWxwaGEgY2hhbm5lbCB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIExMX0RNQTJEX0FMUEhBX01PREVfUkVQTEFDRSAgICAgICAgRE1BMkRfRkdQRkNDUl9BTV8wICAgICAgLyohPCBSZXBsYWNlIG9yaWdpbmFsIGFscGhhIGNoYW5uZWwgdmFsdWUgYnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyYW1tZWQgYWxwaGEgdmFsdWUgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBMTF9ETUEyRF9BTFBIQV9NT0RFX0NPTUJJTkUgICAgICAgIERNQTJEX0ZHUEZDQ1JfQU1fMSAgICAgIC8qITwgUmVwbGFjZSBvcmlnaW5hbCBhbHBoYSBjaGFubmVsIHZhbHVlIGJ5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmFtbWVkIGFscGhhIHZhbHVlIHdpdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbCBhbHBoYSBjaGFubmVsIHZhbHVlICAgICAgICAgICAgICAgKi8KIC8qKgogICAqIEB9CiAgICovCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJmNHh4X2xsX2ZtcGkyYy5oIGIvSW5jL3N0bTMyZjR4eF9sbF9mbXBpMmMuaAppbmRleCBkMmVmMjNlLi4xZjJlNzA3IDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmNHh4X2xsX2ZtcGkyYy5oCisrKyBiL0luYy9zdG0zMmY0eHhfbGxfZm1waTJjLmgKQEAgLTM2MSwxMSArMzYxLDExIEBACiAgICogQHJldHZhbCBWYWx1ZSBiZXR3ZWVuIE1pbl9EYXRhPTAgYW5kIE1heF9EYXRhPTB4RkZGRkZGRkYKICAgKi8KICNkZWZpbmUgX19MTF9GTVBJMkNfQ09OVkVSVF9USU1JTkdTKF9fUFJFU0NBTEVSX18sIF9fREFUQV9TRVRVUF9USU1FX18sIF9fREFUQV9IT0xEX1RJTUVfXywgX19DTE9DS19ISUdIX1BFUklPRF9fLCBfX0NMT0NLX0xPV19QRVJJT0RfXykgICBcCi0gICAgICAgICgoKCh1aW50MzJfdCkoX19QUkVTQ0FMRVJfXykgICAgICAgICA8PCBGTVBJMkNfVElNSU5HUl9QUkVTQ19Qb3MpICAmIEZNUEkyQ19USU1JTkdSX1BSRVNDKSAgIHwgXAotICAgICAgICAgKCgodWludDMyX3QpKF9fREFUQV9TRVRVUF9USU1FX18pICAgPDwgRk1QSTJDX1RJTUlOR1JfU0NMREVMX1BvcykgJiBGTVBJMkNfVElNSU5HUl9TQ0xERUwpICB8IFwKLSAgICAgICAgICgoKHVpbnQzMl90KShfX0RBVEFfSE9MRF9USU1FX18pICAgIDw8IEZNUEkyQ19USU1JTkdSX1NEQURFTF9Qb3MpICYgRk1QSTJDX1RJTUlOR1JfU0RBREVMKSAgfCBcCi0gICAgICAgICAoKCh1aW50MzJfdCkoX19DTE9DS19ISUdIX1BFUklPRF9fKSA8PCBGTVBJMkNfVElNSU5HUl9TQ0xIX1BvcykgICAmIEZNUEkyQ19USU1JTkdSX1NDTEgpICAgIHwgXAotICAgICAgICAgKCgodWludDMyX3QpKF9fQ0xPQ0tfTE9XX1BFUklPRF9fKSAgPDwgRk1QSTJDX1RJTUlOR1JfU0NMTF9Qb3MpICAgJiBGTVBJMkNfVElNSU5HUl9TQ0xMKSkKKyAgKCgoKHVpbnQzMl90KShfX1BSRVNDQUxFUl9fKSAgICAgICAgIDw8IEZNUEkyQ19USU1JTkdSX1BSRVNDX1BvcykgICYgRk1QSTJDX1RJTUlOR1JfUFJFU0MpICAgfCBcCisgICAoKCh1aW50MzJfdCkoX19EQVRBX1NFVFVQX1RJTUVfXykgICA8PCBGTVBJMkNfVElNSU5HUl9TQ0xERUxfUG9zKSAmIEZNUEkyQ19USU1JTkdSX1NDTERFTCkgIHwgXAorICAgKCgodWludDMyX3QpKF9fREFUQV9IT0xEX1RJTUVfXykgICAgPDwgRk1QSTJDX1RJTUlOR1JfU0RBREVMX1BvcykgJiBGTVBJMkNfVElNSU5HUl9TREFERUwpICB8IFwKKyAgICgoKHVpbnQzMl90KShfX0NMT0NLX0hJR0hfUEVSSU9EX18pIDw8IEZNUEkyQ19USU1JTkdSX1NDTEhfUG9zKSAgICYgRk1QSTJDX1RJTUlOR1JfU0NMSCkgICAgfCBcCisgICAoKCh1aW50MzJfdCkoX19DTE9DS19MT1dfUEVSSU9EX18pICA8PCBGTVBJMkNfVElNSU5HUl9TQ0xMX1BvcykgICAmIEZNUEkyQ19USU1JTkdSX1NDTEwpKQogLyoqCiAgICogQH0KICAgKi8KQEAgLTU4NCwxMiArNTg0LDEyIEBACiAgIGlmIChEaXJlY3Rpb24gPT0gTExfRk1QSTJDX0RNQV9SRUdfREFUQV9UUkFOU01JVCkKICAgewogICAgIC8qIHJldHVybiBhZGRyZXNzIG9mIFRYRFIgcmVnaXN0ZXIgKi8KLSAgICBkYXRhX3JlZ19hZGRyID0gKHVpbnQzMl90KSAmIChGTVBJMkN4LT5UWERSKTsKKyAgICBkYXRhX3JlZ19hZGRyID0gKHVpbnQzMl90KSAmKEZNUEkyQ3gtPlRYRFIpOwogICB9CiAgIGVsc2UKICAgewogICAgIC8qIHJldHVybiBhZGRyZXNzIG9mIFJYRFIgcmVnaXN0ZXIgKi8KLSAgICBkYXRhX3JlZ19hZGRyID0gKHVpbnQzMl90KSAmIChGTVBJMkN4LT5SWERSKTsKKyAgICBkYXRhX3JlZ19hZGRyID0gKHVpbnQzMl90KSAmKEZNUEkyQ3gtPlJYRFIpOwogICB9CiAKICAgcmV0dXJuIGRhdGFfcmVnX2FkZHI7CkBAIC0xMTI1LDcgKzExMjUsNyBAQAogfQogCiAvKioKLSAgKiBAYnJpZWYgIEdldCB0aGUgU01CdXMgRXh0ZW50ZWQgQ3VtdWxhdGl2ZSBDbG9jayBUaW1lb3V0QiBzZXR0aW5nLgorICAqIEBicmllZiAgR2V0IHRoZSBTTUJ1cyBFeHRlbmRlZCBDdW11bGF0aXZlIENsb2NrIFRpbWVvdXRCIHNldHRpbmcuCiAgICogQG5vdGUgICBNYWNybyBJU19GTVBTTUJVU19BTExfSU5TVEFOQ0UoRk1QSTJDeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICAgIFNNQnVzIGZlYXR1cmUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBGTVBJMkN4IEluc3RhbmNlLgogICAqIEBybXRvbGwgVElNRU9VVFIgICAgIFRJTUVPVVRCICAgICAgTExfRk1QSTJDX0dldFNNQnVzVGltZW91dEIKQEAgLTIwNTIsNyArMjA1Miw5IEBACiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9GTVBJMkNfSGFuZGxlVHJhbnNmZXIoRk1QSTJDX1R5cGVEZWYgKkZNUEkyQ3gsIHVpbnQzMl90IFNsYXZlQWRkciwgdWludDMyX3QgU2xhdmVBZGRyU2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBUcmFuc2ZlclNpemUsIHVpbnQzMl90IEVuZE1vZGUsIHVpbnQzMl90IFJlcXVlc3QpCiB7Ci0gIE1PRElGWV9SRUcoRk1QSTJDeC0+Q1IyLCBGTVBJMkNfQ1IyX1NBREQgfCBGTVBJMkNfQ1IyX0FERDEwIHwgKEZNUEkyQ19DUjJfUkRfV1JOICYgKHVpbnQzMl90KShSZXF1ZXN0ID4+ICgzMVUgLSBGTVBJMkNfQ1IyX1JEX1dSTl9Qb3MpKSkgfCBGTVBJMkNfQ1IyX1NUQVJUIHwgRk1QSTJDX0NSMl9TVE9QIHwgRk1QSTJDX0NSMl9SRUxPQUQgfAorICBNT0RJRllfUkVHKEZNUEkyQ3gtPkNSMiwgRk1QSTJDX0NSMl9TQUREIHwgRk1QSTJDX0NSMl9BREQxMCB8CisgICAgICAgICAgICAgKEZNUEkyQ19DUjJfUkRfV1JOICYgKHVpbnQzMl90KShSZXF1ZXN0ID4+ICgzMVUgLSBGTVBJMkNfQ1IyX1JEX1dSTl9Qb3MpKSkgfAorICAgICAgICAgICAgIEZNUEkyQ19DUjJfU1RBUlQgfCBGTVBJMkNfQ1IyX1NUT1AgfCBGTVBJMkNfQ1IyX1JFTE9BRCB8CiAgICAgICAgICAgICAgRk1QSTJDX0NSMl9OQllURVMgfCBGTVBJMkNfQ1IyX0FVVE9FTkQgfCBGTVBJMkNfQ1IyX0hFQUQxMFIsCiAgICAgICAgICAgICAgU2xhdmVBZGRyIHwgU2xhdmVBZGRyU2l6ZSB8IChUcmFuc2ZlclNpemUgPDwgRk1QSTJDX0NSMl9OQllURVNfUG9zKSB8IEVuZE1vZGUgfCBSZXF1ZXN0KTsKIH0KQEAgLTIxMTksNyArMjEyMSw3IEBACiAgICogQHJtdG9sbCBQRUNSICAgICAgICAgUEVDICAgICAgICAgICBMTF9GTVBJMkNfR2V0U01CdXNQRUMKICAgKiBAcGFyYW0gIEZNUEkyQ3ggRk1QSTJDIEluc3RhbmNlLgogICAqIEByZXR2YWwgVmFsdWUgYmV0d2VlbiBNaW5fRGF0YT0weDAwIGFuZCBNYXhfRGF0YT0weEZGCi0qLworICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0ZNUEkyQ19HZXRTTUJ1c1BFQyhGTVBJMkNfVHlwZURlZiAqRk1QSTJDeCkKIHsKICAgcmV0dXJuICh1aW50MzJfdCkoUkVBRF9CSVQoRk1QSTJDeC0+UEVDUiwgRk1QSTJDX1BFQ1JfUEVDKSk7CmRpZmYgLS1naXQgYS9JbmMvc3RtMzJmNHh4X2xsX2dwaW8uaCBiL0luYy9zdG0zMmY0eHhfbGxfZ3Bpby5oCmluZGV4IDNmMWIzYTEuLjc2ZTkxNzAgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmY0eHhfbGxfZ3Bpby5oCisrKyBiL0luYy9zdG0zMmY0eHhfbGxfZ3Bpby5oCkBAIC05MzksNyArOTM5LDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0dQSU9fVG9nZ2xlUGluKEdQSU9fVHlwZURlZiAqR1BJT3gsIHVpbnQzMl90IFBpbk1hc2spCiB7Ci0gIFdSSVRFX1JFRyhHUElPeC0+T0RSLCBSRUFEX1JFRyhHUElPeC0+T0RSKSBeIFBpbk1hc2spOworICB1aW50MzJfdCBvZHIgPSBSRUFEX1JFRyhHUElPeC0+T0RSKTsKKyAgV1JJVEVfUkVHKEdQSU94LT5CU1JSLCAoKG9kciAmIFBpbk1hc2spIDw8IDE2dSkgfCAofm9kciAmIFBpbk1hc2spKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJmNHh4X2xsX2kyYy5oIGIvSW5jL3N0bTMyZjR4eF9sbF9pMmMuaAppbmRleCBhMDM4MGE1Li41YTQ2YmFiIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmNHh4X2xsX2kyYy5oCisrKyBiL0luYy9zdG0zMmY0eHhfbGxfaTJjLmgKQEAgLTE0NjgsNyArMTQ2OCw3IEBACiAKIC8qKgogICAqIEBicmllZiAgSW5kaWNhdGUgdGhlIHN0YXR1cyBvZiBHZW5lcmFsIGNhbGwgYWRkcmVzcyByZWNlcHRpb24gKFNsYXZlIG1vZGUpLgotICAqIEBub3RlICAgUkVTRVQ6IE5vIEdlbmVyYWxsIGNhbGwgYWRkcmVzcworICAqIEBub3RlICAgUkVTRVQ6IE5vIEdlbmVyYWwgY2FsbCBhZGRyZXNzCiAgICogICAgICAgICBTRVQ6IEdlbmVyYWwgY2FsbCBhZGRyZXNzIHJlY2VpdmVkLgogICAqIEBub3RlICAgVGhpcyBzdGF0dXMgaXMgY2xlYXJlZCBieSBoYXJkd2FyZSBhZnRlciBhIFNUT1AgY29uZGl0aW9uIG9yIHJlcGVhdGVkIFNUQVJUIGNvbmRpdGlvbi4KICAgKiBAcm10b2xsIFNSMiAgICAgICAgICBHRU5DQUxMICAgICAgIExMX0kyQ19Jc0FjdGl2ZUZsYWdfR0VOQ0FMTApkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZjR4eF9sbF9pd2RnLmggYi9JbmMvc3RtMzJmNHh4X2xsX2l3ZGcuaAppbmRleCA1NzExMzUxLi4yZjFiODQ0IDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmNHh4X2xsX2l3ZGcuaAorKysgYi9JbmMvc3RtMzJmNHh4X2xsX2l3ZGcuaApAQCAtMjM2LDcgKzIzNiw2IEBACiAgIHJldHVybiAoUkVBRF9SRUcoSVdER3gtPlJMUikpOwogfQogCi0KIC8qKgogICAqIEB9CiAgICovCkBAIC0yODMsNyArMjgyLDYgQEAKICAgKiBAfQogICAqLwogCi0KIC8qKgogICAqIEB9CiAgICovCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJmNHh4X2xsX2xwdGltLmggYi9JbmMvc3RtMzJmNHh4X2xsX2xwdGltLmgKaW5kZXggMWI2YmFkOS4uMGQ4ZThlYSAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZjR4eF9sbF9scHRpbS5oCisrKyBiL0luYy9zdG0zMmY0eHhfbGxfbHB0aW0uaApAQCAtMTU1LDcgKzE1NSw3IEBACiAvKiogQGRlZmdyb3VwIExQVElNX0xMX0VDX09VVFBVVF9XQVZFRk9STSBPdXRwdXQgV2F2ZWZvcm0gVHlwZQogICAqIEB7CiAgICovCi0jZGVmaW5lIExMX0xQVElNX09VVFBVVF9XQVZFRk9STV9QV00gICAgICAgICAgMHgwMDAwMDAwMFUgICAgIC8qITxMUFRJTSAgZ2VuZXJhdGVzIGVpdGhlciBhIFBXTSB3YXZlZm9ybSBvciBhIE9uZSBwdWxzZSB3YXZlZm9ybSBkZXBlbmRpbmcgb24gY2hvc2VuIG9wZXJhdGluZyBtb2RlIENPTlRJTk9VUyBvciBTSU5HTEUqLworI2RlZmluZSBMTF9MUFRJTV9PVVRQVVRfV0FWRUZPUk1fUFdNICAgICAgICAgIDB4MDAwMDAwMDBVICAgICAvKiE8TFBUSU0gIGdlbmVyYXRlcyBlaXRoZXIgYSBQV00gd2F2ZWZvcm0gb3IgYSBPbmUgcHVsc2Ugd2F2ZWZvcm0gZGVwZW5kaW5nIG9uIGNob3NlbiBvcGVyYXRpbmcgbW9kZSBDT05USU5VT1VTIG9yIFNJTkdMRSovCiAjZGVmaW5lIExMX0xQVElNX09VVFBVVF9XQVZFRk9STV9TRVRPTkNFICAgICAgTFBUSU1fQ0ZHUl9XQVZFIC8qITxMUFRJTSAgZ2VuZXJhdGVzIGEgU2V0IE9uY2Ugd2F2ZWZvcm0qLwogLyoqCiAgICogQH0KQEAgLTI1OCw3ICsyNTgsNiBAQAogLyoqCiAgICogQH0KICAgKi8KLSNpZiBkZWZpbmVkKExQVElNX09SX09SKQogCiAvKiogQGRlZmdyb3VwIExQVElNX0VDX0lOUFVUMV9TUkMgSW5wdXQxIFNvdXJjZQogICAqIEB7CkBAIC0yNzAsNyArMjY5LDYgQEAKIC8qKgogICAqIEB9CiAgICovCi0jZW5kaWYgLyogTFBUSU1fT1JfT1IgKi8KIAogLyoqCiAgICogQH0KQEAgLTYyMCw3ICs2MTgsNiBAQAogewogICByZXR1cm4gKHVpbnQzMl90KShSRUFEX0JJVChMUFRJTXgtPkNGR1IsIExQVElNX0NGR1JfUFJFU0MpKTsKIH0KLSNpZiAgZGVmaW5lZChMUFRJTV9PUl9PUikKIAogLyoqCiAgICogQGJyaWVmICBTZXQgTFBUSU0gaW5wdXQgMSBzb3VyY2UgKGRlZmF1bHQgR1BJTykuCkBAIC02MzcsNyArNjM0LDYgQEAKIHsKICAgTU9ESUZZX1JFRyhMUFRJTXgtPk9SLCBMUFRJTV9PUl9PUiwgU3JjKTsKIH0KLSNlbmRpZiAvKiBMUFRJTV9PUl9PUiAqLwogCiAvKioKICAgKiBAfQpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZjR4eF9sbF9yY2MuaCBiL0luYy9zdG0zMmY0eHhfbGxfcmNjLmgKaW5kZXggMGNiNDA5OS4uZDRjMjQ5ZiAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZjR4eF9sbF9yY2MuaAorKysgYi9JbmMvc3RtMzJmNHh4X2xsX3JjYy5oCkBAIC01MzM4LDcgKzUzMzgsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfUkNDX1BMTEkyU19Db25maWdEb21haW5fU0FJKHVpbnQzMl90IFNvdXJjZSwgdWludDMyX3QgUExMTSwgdWludDMyX3QgUExMTiwgdWludDMyX3QgUExMUV9SLCB1aW50MzJfdCBQTExESVZRX1IpCiB7Ci0gIHJlZ2lzdGVyIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJlJDQy0+UExMQ0ZHUikgKyAoU291cmNlICYgMHg4MFUpKSk7CisgIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJlJDQy0+UExMQ0ZHUikgKyAoU291cmNlICYgMHg4MFUpKSk7CiAgIE1PRElGWV9SRUcoKnBSZWcsIFJDQ19QTExDRkdSX1BMTFNSQywgKFNvdXJjZSAmICh+MHg4MFUpKSk7CiAjaWYgZGVmaW5lZChSQ0NfUExMSTJTQ0ZHUl9QTExJMlNNKQogICBNT0RJRllfUkVHKFJDQy0+UExMSTJTQ0ZHUiwgUkNDX1BMTEkyU0NGR1JfUExMSTJTTSwgUExMTSk7CkBAIC01NDU4LDcgKzU0NTgsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfUkNDX1BMTEkyU19Db25maWdEb21haW5fNDhNKHVpbnQzMl90IFNvdXJjZSwgdWludDMyX3QgUExMTSwgdWludDMyX3QgUExMTiwgdWludDMyX3QgUExMUSkKIHsKLSAgcmVnaXN0ZXIgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmUkNDLT5QTExDRkdSKSArIChTb3VyY2UgJiAweDgwVSkpKTsKKyAgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmUkNDLT5QTExDRkdSKSArIChTb3VyY2UgJiAweDgwVSkpKTsKICAgTU9ESUZZX1JFRygqcFJlZywgUkNDX1BMTENGR1JfUExMU1JDLCAoU291cmNlICYgKH4weDgwVSkpKTsKICNpZiBkZWZpbmVkKFJDQ19QTExJMlNDRkdSX1BMTEkyU00pCiAgIE1PRElGWV9SRUcoUkNDLT5QTExJMlNDRkdSLCBSQ0NfUExMSTJTQ0ZHUl9QTExJMlNNLCBQTExNKTsKQEAgLTU2NjIsNyArNTY2Miw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9SQ0NfUExMSTJTX0NvbmZpZ0RvbWFpbl9JMlModWludDMyX3QgU291cmNlLCB1aW50MzJfdCBQTExNLCB1aW50MzJfdCBQTExOLCB1aW50MzJfdCBQTExSKQogewotICByZWdpc3RlciBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZSQ0MtPlBMTENGR1IpICsgKFNvdXJjZSAmIDB4ODBVKSkpOworICBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZSQ0MtPlBMTENGR1IpICsgKFNvdXJjZSAmIDB4ODBVKSkpOwogICBNT0RJRllfUkVHKCpwUmVnLCBSQ0NfUExMQ0ZHUl9QTExTUkMsIChTb3VyY2UgJiAofjB4ODBVKSkpOwogI2lmIGRlZmluZWQoUkNDX1BMTEkyU0NGR1JfUExMSTJTTSkKICAgTU9ESUZZX1JFRyhSQ0MtPlBMTEkyU0NGR1IsIFJDQ19QTExJMlNDRkdSX1BMTEkyU00sIFBMTE0pOwpAQCAtNTkyNCw5ICs1OTI0LDkgQEAKIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9SQ0NfUExMSTJTX0dldE1haW5Tb3VyY2Uodm9pZCkKIHsKICNpZiBkZWZpbmVkKFJDQ19QTExJMlNDRkdSX1BMTEkyU1NSQykKLSAgcmVnaXN0ZXIgdWludDMyX3QgcGxsc3JjID0gUkVBRF9CSVQoUkNDLT5QTExDRkdSLCBSQ0NfUExMQ0ZHUl9QTExTUkMpOwotICByZWdpc3RlciB1aW50MzJfdCBwbGxpMnNzc3JjMCA9IFJFQURfQklUKFJDQy0+UExMSTJTQ0ZHUiwgUkNDX1BMTEkyU0NGR1JfUExMSTJTU1JDKTsKLSAgcmVnaXN0ZXIgdWludDMyX3QgcGxsaTJzc3NyYzEgPSBSRUFEX0JJVChSQ0MtPlBMTEkyU0NGR1IsIFJDQ19QTExJMlNDRkdSX1BMTEkyU1NSQykgPj4gMTVVOworICB1aW50MzJfdCBwbGxzcmMgPSBSRUFEX0JJVChSQ0MtPlBMTENGR1IsIFJDQ19QTExDRkdSX1BMTFNSQyk7CisgIHVpbnQzMl90IHBsbGkyc3NzcmMwID0gUkVBRF9CSVQoUkNDLT5QTExJMlNDRkdSLCBSQ0NfUExMSTJTQ0ZHUl9QTExJMlNTUkMpOworICB1aW50MzJfdCBwbGxpMnNzc3JjMSA9IFJFQURfQklUKFJDQy0+UExMSTJTQ0ZHUiwgUkNDX1BMTEkyU0NGR1JfUExMSTJTU1JDKSA+PiAxNVU7CiAgIHJldHVybiAodWludDMyX3QpKHBsbHNyYyB8IHBsbGkyc3NzcmMwIHwgcGxsaTJzc3NyYzEpOwogI2Vsc2UKICAgcmV0dXJuICh1aW50MzJfdCkoUkVBRF9CSVQoUkNDLT5QTExDRkdSLCBSQ0NfUExMQ0ZHUl9QTExTUkMpKTsKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmY0eHhfbGxfc2RtbWMuaCBiL0luYy9zdG0zMmY0eHhfbGxfc2RtbWMuaAppbmRleCBjOTY2YzkwLi41NDBhMGUxIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmNHh4X2xsX3NkbW1jLmgKKysrIGIvSW5jL3N0bTMyZjR4eF9sbF9zZG1tYy5oCkBAIC0zMDEsNyArMzAxLDkgQEAKICNkZWZpbmUgU0RNTUNfU0lOR0xFX0JVU19TVVBQT1JUICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDBVCiAjZGVmaW5lIFNETU1DX0NBUkRfTE9DS0VEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAwMDAwVQogCisjaWZuZGVmIFNETU1DX0RBVEFUSU1FT1VUCiAjZGVmaW5lIFNETU1DX0RBVEFUSU1FT1VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGVQorI2VuZGlmIC8qIFNETU1DX0RBVEFUSU1FT1VUICovCiAKICNkZWZpbmUgU0RNTUNfMFRPN0JJVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRkZVCiAjZGVmaW5lIFNETU1DXzhUTzE1QklUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGRjAwVQpAQCAtNDU1LDcgKzQ1Nyw3IEBACiAgICogQH0KICAgKi8KIAotLyoqIEBkZWZncm91cCBTRElPX0xMX0RhdGFfTGVuZ3RoIERhdGEgTGVuZ2h0CisvKiogQGRlZmdyb3VwIFNESU9fTExfRGF0YV9MZW5ndGggRGF0YSBMZW5ndGgKICAgKiBAewogICAqLwogI2RlZmluZSBJU19TRElPX0RBVEFfTEVOR1RIKExFTkdUSCkgKChMRU5HVEgpIDw9IDB4MDFGRkZGRkZVKQpAQCAtMTA4OSw2ICsxMDkxLDcgQEAKIHVpbnQzMl90IFNETU1DX0NtZFNlbmRTQ1IoU0RJT19UeXBlRGVmICpTRElPeCk7CiB1aW50MzJfdCBTRE1NQ19DbWRTZW5kQ0lEKFNESU9fVHlwZURlZiAqU0RJT3gpOwogdWludDMyX3QgU0RNTUNfQ21kU2VuZENTRChTRElPX1R5cGVEZWYgKlNESU94LCB1aW50MzJfdCBBcmd1bWVudCk7Cit1aW50MzJfdCBTRE1NQ19DbWRTZW5kRVhUQ1NEKFNESU9fVHlwZURlZiAqU0RJT3gsIHVpbnQzMl90IEFyZ3VtZW50KTsKIHVpbnQzMl90IFNETU1DX0NtZFNldFJlbEFkZChTRElPX1R5cGVEZWYgKlNESU94LCB1aW50MTZfdCAqcFJDQSk7CiB1aW50MzJfdCBTRE1NQ19DbWRTZW5kU3RhdHVzKFNESU9fVHlwZURlZiAqU0RJT3gsIHVpbnQzMl90IEFyZ3VtZW50KTsKIHVpbnQzMl90IFNETU1DX0NtZFN0YXR1c1JlZ2lzdGVyKFNESU9fVHlwZURlZiAqU0RJT3gpOwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZjR4eF9sbF9zcGkuaCBiL0luYy9zdG0zMmY0eHhfbGxfc3BpLmgKaW5kZXggYjhhMzMwYy4uZWM2MWIzNiAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZjR4eF9sbF9zcGkuaAorKysgYi9JbmMvc3RtMzJmNHh4X2xsX3NwaS5oCkBAIC03MTAsOCArNzEwLDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9TUElfR2V0TlNTTW9kZShTUElfVHlwZURlZiAqU1BJeCkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgU3NtICA9IChSRUFEX0JJVChTUEl4LT5DUjEsIFNQSV9DUjFfU1NNKSk7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IFNzb2UgPSAoUkVBRF9CSVQoU1BJeC0+Q1IyLCAgU1BJX0NSMl9TU09FKSA8PCAxNlUpOworICB1aW50MzJfdCBTc20gID0gKFJFQURfQklUKFNQSXgtPkNSMSwgU1BJX0NSMV9TU00pKTsKKyAgdWludDMyX3QgU3NvZSA9IChSRUFEX0JJVChTUEl4LT5DUjIsICBTUElfQ1IyX1NTT0UpIDw8IDE2VSk7CiAgIHJldHVybiAoU3NtIHwgU3NvZSk7CiB9CiAKQEAgLTEyNDIsMTAgKzEyNDIsMTAgQEAKIC8qKiBAZGVmZ3JvdXAgSTJTX0xMX0VDX0RBVEFfRk9STUFUIERhdGEgZm9ybWF0CiAgICogQHsKICAgKi8KLSNkZWZpbmUgTExfSTJTX0RBVEFGT1JNQVRfMTZCICAgICAgICAgICAgICAweDAwMDAwMDAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEYXRhIGxlbmd0aCAxNiBiaXRzLCBDaGFubmVsIGxlbmdodCAxNmJpdCAqLwotI2RlZmluZSBMTF9JMlNfREFUQUZPUk1BVF8xNkJfRVhURU5ERUQgICAgIChTUElfSTJTQ0ZHUl9DSExFTikgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERhdGEgbGVuZ3RoIDE2IGJpdHMsIENoYW5uZWwgbGVuZ2h0IDMyYml0ICovCi0jZGVmaW5lIExMX0kyU19EQVRBRk9STUFUXzI0QiAgICAgICAgICAgICAgKFNQSV9JMlNDRkdSX0NITEVOIHwgU1BJX0kyU0NGR1JfREFUTEVOXzApICAgIC8qITwgRGF0YSBsZW5ndGggMjQgYml0cywgQ2hhbm5lbCBsZW5naHQgMzJiaXQgKi8KLSNkZWZpbmUgTExfSTJTX0RBVEFGT1JNQVRfMzJCICAgICAgICAgICAgICAoU1BJX0kyU0NGR1JfQ0hMRU4gfCBTUElfSTJTQ0ZHUl9EQVRMRU5fMSkgICAgLyohPCBEYXRhIGxlbmd0aCAxNiBiaXRzLCBDaGFubmVsIGxlbmdodCAzMmJpdCAqLworI2RlZmluZSBMTF9JMlNfREFUQUZPUk1BVF8xNkIgICAgICAgICAgICAgIDB4MDAwMDAwMDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERhdGEgbGVuZ3RoIDE2IGJpdHMsIENoYW5uZWwgbGVuZ3RoIDE2Yml0ICovCisjZGVmaW5lIExMX0kyU19EQVRBRk9STUFUXzE2Ql9FWFRFTkRFRCAgICAgKFNQSV9JMlNDRkdSX0NITEVOKSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRGF0YSBsZW5ndGggMTYgYml0cywgQ2hhbm5lbCBsZW5ndGggMzJiaXQgKi8KKyNkZWZpbmUgTExfSTJTX0RBVEFGT1JNQVRfMjRCICAgICAgICAgICAgICAoU1BJX0kyU0NGR1JfQ0hMRU4gfCBTUElfSTJTQ0ZHUl9EQVRMRU5fMCkgICAgLyohPCBEYXRhIGxlbmd0aCAyNCBiaXRzLCBDaGFubmVsIGxlbmd0aCAzMmJpdCAqLworI2RlZmluZSBMTF9JMlNfREFUQUZPUk1BVF8zMkIgICAgICAgICAgICAgIChTUElfSTJTQ0ZHUl9DSExFTiB8IFNQSV9JMlNDRkdSX0RBVExFTl8xKSAgICAvKiE8IERhdGEgbGVuZ3RoIDE2IGJpdHMsIENoYW5uZWwgbGVuZ3RoIDMyYml0ICovCiAvKioKICAgKiBAfQogICAqLwpAQCAtMTU4MCw3ICsxNTgwLDcgQEAKIH0KIAogLyoqCi0gICogQGJyaWVmICBFbmFibGUgdGhlIG1hc3RlciBjbG9jayBvdXB1dCAoUGluIE1DSykKKyAgKiBAYnJpZWYgIEVuYWJsZSB0aGUgbWFzdGVyIGNsb2NrIG91dHB1dCAoUGluIE1DSykKICAgKiBAcm10b2xsIEkyU1BSICAgICAgICBNQ0tPRSAgICAgICAgIExMX0kyU19FbmFibGVNYXN0ZXJDbG9jawogICAqIEBwYXJhbSAgU1BJeCBTUEkgSW5zdGFuY2UKICAgKiBAcmV0dmFsIE5vbmUKQEAgLTE1OTEsNyArMTU5MSw3IEBACiB9CiAKIC8qKgotICAqIEBicmllZiAgRGlzYWJsZSB0aGUgbWFzdGVyIGNsb2NrIG91cHV0IChQaW4gTUNLKQorICAqIEBicmllZiAgRGlzYWJsZSB0aGUgbWFzdGVyIGNsb2NrIG91dHB1dCAoUGluIE1DSykKICAgKiBAcm10b2xsIEkyU1BSICAgICAgICBNQ0tPRSAgICAgICAgIExMX0kyU19EaXNhYmxlTWFzdGVyQ2xvY2sKICAgKiBAcGFyYW0gIFNQSXggU1BJIEluc3RhbmNlCiAgICogQHJldHZhbCBOb25lCkBAIC0xNjAyLDcgKzE2MDIsNyBAQAogfQogCiAvKioKLSAgKiBAYnJpZWYgIENoZWNrIGlmIHRoZSBtYXN0ZXIgY2xvY2sgb3VwdXQgKFBpbiBNQ0spIGlzIGVuYWJsZWQKKyAgKiBAYnJpZWYgIENoZWNrIGlmIHRoZSBtYXN0ZXIgY2xvY2sgb3V0cHV0IChQaW4gTUNLKSBpcyBlbmFibGVkCiAgICogQHJtdG9sbCBJMlNQUiAgICAgICAgTUNLT0UgICAgICAgICBMTF9JMlNfSXNFbmFibGVkTWFzdGVyQ2xvY2sKICAgKiBAcGFyYW0gIFNQSXggU1BJIEluc3RhbmNlCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJmNHh4X2xsX3RpbS5oIGIvSW5jL3N0bTMyZjR4eF9sbF90aW0uaAppbmRleCA1N2QyZWM3Li5lOWIwYjc0IDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmNHh4X2xsX3RpbS5oCisrKyBiL0luYy9zdG0zMmY0eHhfbGxfdGltLmgKQEAgLTIwNCwxMyArMjA0LDE0IEBACiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBmZWF0dXJlIGNhbiBiZSBtb2RpZmllZCBhZnRlcndhcmRzIHVzaW5nIHVuaXRhcnkgZnVuY3Rpb24gQHJlZiBMTF9USU1fU2V0Q2xvY2tEaXZpc2lvbigpLiovCiAKLSAgdWludDhfdCBSZXBldGl0aW9uQ291bnRlcjsgIC8qITwgU3BlY2lmaWVzIHRoZSByZXBldGl0aW9uIGNvdW50ZXIgdmFsdWUuIEVhY2ggdGltZSB0aGUgUkNSIGRvd25jb3VudGVyCisgIHVpbnQzMl90IFJlcGV0aXRpb25Db3VudGVyOyAgLyohPCBTcGVjaWZpZXMgdGhlIHJlcGV0aXRpb24gY291bnRlciB2YWx1ZS4gRWFjaCB0aW1lIHRoZSBSQ1IgZG93bmNvdW50ZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhY2hlcyB6ZXJvLCBhbiB1cGRhdGUgZXZlbnQgaXMgZ2VuZXJhdGVkIGFuZCBjb3VudGluZyByZXN0YXJ0cwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIHRoZSBSQ1IgdmFsdWUgKE4pLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIG1lYW5zIGluIFBXTSBtb2RlIHRoYXQgKE4rMSkgY29ycmVzcG9uZHMgdG86CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gdGhlIG51bWJlciBvZiBQV00gcGVyaW9kcyBpbiBlZGdlLWFsaWduZWQgbW9kZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIHRoZSBudW1iZXIgb2YgaGFsZiBQV00gcGVyaW9kIGluIGNlbnRlci1hbGlnbmVkIG1vZGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIG51bWJlciBiZXR3ZWVuIDB4MDAgYW5kIDB4RkYuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQIHRpbWVyczogdGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIG51bWJlciBiZXR3ZWVuIE1pbl9EYXRhID0gMHgwMCBhbmQgTWF4X0RhdGEgPSAweEZGLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZHZhbmNlZCB0aW1lcnM6IHRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSBudW1iZXIgYmV0d2VlbiBNaW5fRGF0YSA9IDB4MDAwMCBhbmQgTWF4X0RhdGEgPSAweEZGRkYuCiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBmZWF0dXJlIGNhbiBiZSBtb2RpZmllZCBhZnRlcndhcmRzIHVzaW5nIHVuaXRhcnkgZnVuY3Rpb24gQHJlZiBMTF9USU1fU2V0UmVwZXRpdGlvbkNvdW50ZXIoKS4qLwogfSBMTF9USU1fSW5pdFR5cGVEZWY7CkBAIC01MDcsOCArNTA4LDggQEAKIC8qKiBAZGVmZ3JvdXAgVElNX0xMX0VDX09ORVBVTFNFTU9ERSBPbmUgUHVsc2UgTW9kZQogICAqIEB7CiAgICovCi0jZGVmaW5lIExMX1RJTV9PTkVQVUxTRU1PREVfU0lOR0xFICAgICAgICAgICAgIFRJTV9DUjFfT1BNICAgICAgICAgIC8qITwgQ291bnRlciBpcyBub3Qgc3RvcHBlZCBhdCB1cGRhdGUgZXZlbnQgKi8KLSNkZWZpbmUgTExfVElNX09ORVBVTFNFTU9ERV9SRVBFVElUSVZFICAgICAgICAgMHgwMDAwMDAwMFUgICAgICAgICAgLyohPCBDb3VudGVyIHN0b3BzIGNvdW50aW5nIGF0IHRoZSBuZXh0IHVwZGF0ZSBldmVudCAqLworI2RlZmluZSBMTF9USU1fT05FUFVMU0VNT0RFX1NJTkdMRSAgICAgICAgICAgICBUSU1fQ1IxX09QTSAgICAgICAgICAvKiE8IENvdW50ZXIgc3RvcHMgY291bnRpbmcgYXQgdGhlIG5leHQgdXBkYXRlIGV2ZW50ICovCisjZGVmaW5lIExMX1RJTV9PTkVQVUxTRU1PREVfUkVQRVRJVElWRSAgICAgICAgIDB4MDAwMDAwMDBVICAgICAgICAgIC8qITwgQ291bnRlciBpcyBub3Qgc3RvcHBlZCBhdCB1cGRhdGUgZXZlbnQgKi8KIC8qKgogICAqIEB9CiAgICovCkBAIC01MTgsOCArNTE5LDggQEAKICAgKi8KICNkZWZpbmUgTExfVElNX0NPVU5URVJNT0RFX1VQICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMFUgICAgICAgICAgLyohPENvdW50ZXIgdXNlZCBhcyB1cGNvdW50ZXIgKi8KICNkZWZpbmUgTExfVElNX0NPVU5URVJNT0RFX0RPV04gICAgICAgICAgICAgICAgVElNX0NSMV9ESVIgICAgICAgICAgLyohPCBDb3VudGVyIHVzZWQgYXMgZG93bmNvdW50ZXIgKi8KLSNkZWZpbmUgTExfVElNX0NPVU5URVJNT0RFX0NFTlRFUl9VUCAgICAgICAgICAgVElNX0NSMV9DTVNfMCAgICAgICAgLyohPCBUaGUgY291bnRlciBjb3VudHMgdXAgYW5kIGRvd24gYWx0ZXJuYXRpdmVseS4gT3V0cHV0IGNvbXBhcmUgaW50ZXJydXB0IGZsYWdzIG9mIG91dHB1dCBjaGFubmVscyAgYXJlIHNldCBvbmx5IHdoZW4gdGhlIGNvdW50ZXIgaXMgY291bnRpbmcgZG93bi4gKi8KLSNkZWZpbmUgTExfVElNX0NPVU5URVJNT0RFX0NFTlRFUl9ET1dOICAgICAgICAgVElNX0NSMV9DTVNfMSAgICAgICAgLyohPFRoZSBjb3VudGVyIGNvdW50cyB1cCBhbmQgZG93biBhbHRlcm5hdGl2ZWx5LiBPdXRwdXQgY29tcGFyZSBpbnRlcnJ1cHQgZmxhZ3Mgb2Ygb3V0cHV0IGNoYW5uZWxzICBhcmUgc2V0IG9ubHkgd2hlbiB0aGUgY291bnRlciBpcyBjb3VudGluZyB1cCAqLworI2RlZmluZSBMTF9USU1fQ09VTlRFUk1PREVfQ0VOVEVSX0RPV04gICAgICAgICBUSU1fQ1IxX0NNU18wICAgICAgICAvKiE8IFRoZSBjb3VudGVyIGNvdW50cyB1cCBhbmQgZG93biBhbHRlcm5hdGl2ZWx5LiBPdXRwdXQgY29tcGFyZSBpbnRlcnJ1cHQgZmxhZ3Mgb2Ygb3V0cHV0IGNoYW5uZWxzICBhcmUgc2V0IG9ubHkgd2hlbiB0aGUgY291bnRlciBpcyBjb3VudGluZyBkb3duLiAqLworI2RlZmluZSBMTF9USU1fQ09VTlRFUk1PREVfQ0VOVEVSX1VQICAgICAgICAgICBUSU1fQ1IxX0NNU18xICAgICAgICAvKiE8VGhlIGNvdW50ZXIgY291bnRzIHVwIGFuZCBkb3duIGFsdGVybmF0aXZlbHkuIE91dHB1dCBjb21wYXJlIGludGVycnVwdCBmbGFncyBvZiBvdXRwdXQgY2hhbm5lbHMgIGFyZSBzZXQgb25seSB3aGVuIHRoZSBjb3VudGVyIGlzIGNvdW50aW5nIHVwICovCiAjZGVmaW5lIExMX1RJTV9DT1VOVEVSTU9ERV9DRU5URVJfVVBfRE9XTiAgICAgIFRJTV9DUjFfQ01TICAgICAgICAgIC8qITwgVGhlIGNvdW50ZXIgY291bnRzIHVwIGFuZCBkb3duIGFsdGVybmF0aXZlbHkuIE91dHB1dCBjb21wYXJlIGludGVycnVwdCBmbGFncyBvZiBvdXRwdXQgY2hhbm5lbHMgIGFyZSBzZXQgb25seSB3aGVuIHRoZSBjb3VudGVyIGlzIGNvdW50aW5nIHVwIG9yIGRvd24uICovCiAvKioKICAgKiBAfQpAQCAtOTAyLDE0ICs5MDMsMzIgQEAKICNkZWZpbmUgTExfVElNX1RJTTExX1RJMV9STVBfR1BJTyAgICAgICAgVElNMTFfT1JfUk1QX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVElNMTEgY2hhbm5lbCAxIGlzIGNvbm5lY3RlZCB0byBHUElPICovCiAjaWYgZGVmaW5lZChTUERJRlJYKQogI2RlZmluZSBMTF9USU1fVElNMTFfVEkxX1JNUF9TUERJRlJYICAgICAoVElNX09SX1RJMV9STVBfMCB8IFRJTTExX09SX1JNUF9NQVNLKSAgICAgLyohPCBUSU0xMSBjaGFubmVsIDEgaXMgY29ubmVjdGVkIHRvIFNQRElGUlggKi8KKworLyogTGVnYWN5IGRlZmluZSAqLworI2RlZmluZSAgTExfVElNX1RJTTExX1RJMV9STVBfR1BJTzEgICAgICBMTF9USU1fVElNMTFfVEkxX1JNUF9TUERJRlJYICAgICAgICAgICAgICAgLyohPCBMZWdhY3kgZGVmaW5lIGZvciBMTF9USU1fVElNMTFfVEkxX1JNUF9TUERJRlJYICovCisKICNlbHNlCi0jZGVmaW5lIExMX1RJTV9USU0xMV9USTFfUk1QX0dQSU8xICAgICAgIChUSU1fT1JfVEkxX1JNUF8wIHwgVElNMTFfT1JfUk1QX01BU0spICAgICAvKiE8IFRJTTExIGNoYW5uZWwgMSBpcyBjb25uZWN0ZWQgdG8gR1BJTyAqLyAgCi0jZW5kaWYKKyNkZWZpbmUgTExfVElNX1RJTTExX1RJMV9STVBfR1BJTzEgICAgICAgKFRJTV9PUl9USTFfUk1QXzAgfCBUSU0xMV9PUl9STVBfTUFTSykgICAgIC8qITwgVElNMTEgY2hhbm5lbCAxIGlzIGNvbm5lY3RlZCB0byBHUElPICovCisjZW5kaWYgLyogU1BESUZSWCAqLwogI2RlZmluZSBMTF9USU1fVElNMTFfVEkxX1JNUF9HUElPMiAgICAgICAoVElNX09SX1RJMV9STVAgICB8IFRJTTExX09SX1JNUF9NQVNLKSAgICAgLyohPCBUSU0xMSBjaGFubmVsIDEgaXMgY29ubmVjdGVkIHRvIEdQSU8gKi8KICNkZWZpbmUgTExfVElNX1RJTTExX1RJMV9STVBfSFNFX1JUQyAgICAgKFRJTV9PUl9USTFfUk1QXzEgfCBUSU0xMV9PUl9STVBfTUFTSykgICAgIC8qITwgVElNMTEgY2hhbm5lbCAxIGlzIGNvbm5lY3RlZCB0byBIU0VfUlRDICovCiAvKioKICAgKiBAfQogICAqLworI2lmIGRlZmluZWQoTFBUSU1fT1JfVElNMV9JVFIyX1JNUCkgJiYgZGVmaW5lZChMUFRJTV9PUl9USU01X0lUUjFfUk1QKSAmJiBkZWZpbmVkKExQVElNX09SX1RJTTlfSVRSMV9STVApCisKKyNkZWZpbmUgTExfVElNX0xQVElNX1JFTUFQX01BU0sgICAgICAgICAgIDB4MTAwMDAwMDBVCisKKyNkZWZpbmUgTExfVElNX1RJTTlfSVRSMV9STVBfVElNM19UUkdPICAgIExMX1RJTV9MUFRJTV9SRU1BUF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUSU05X0lUUjEgaXMgY29ubmVjdGVkIHRvIFRJTTMgVFJHTyAqLworI2RlZmluZSBMTF9USU1fVElNOV9JVFIxX1JNUF9MUFRJTSAgICAgICAoTExfVElNX0xQVElNX1JFTUFQX01BU0sgfCBMUFRJTV9PUl9USU05X0lUUjFfUk1QKSAgICAvKiE8IFRJTTlfSVRSMSBpcyBjb25uZWN0ZWQgdG8gTFBUSU0xIG91dHB1dCAqLworCisjZGVmaW5lIExMX1RJTV9USU01X0lUUjFfUk1QX1RJTTNfVFJHTyAgICBMTF9USU1fTFBUSU1fUkVNQVBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVElNNV9JVFIxIGlzIGNvbm5lY3RlZCB0byBUSU0zIFRSR08gKi8KKyNkZWZpbmUgTExfVElNX1RJTTVfSVRSMV9STVBfTFBUSU0gICAgICAgKExMX1RJTV9MUFRJTV9SRU1BUF9NQVNLIHwgTFBUSU1fT1JfVElNNV9JVFIxX1JNUCkgICAgLyohPCBUSU01X0lUUjEgaXMgY29ubmVjdGVkIHRvIExQVElNMSBvdXRwdXQgKi8KKworI2RlZmluZSBMTF9USU1fVElNMV9JVFIyX1JNUF9USU0zX1RSR08gICAgTExfVElNX0xQVElNX1JFTUFQX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRJTTFfSVRSMiBpcyBjb25uZWN0ZWQgdG8gVElNMyBUUkdPICovCisjZGVmaW5lIExMX1RJTV9USU0xX0lUUjJfUk1QX0xQVElNICAgICAgIChMTF9USU1fTFBUSU1fUkVNQVBfTUFTSyB8IExQVElNX09SX1RJTTFfSVRSMl9STVApICAgIC8qITwgVElNMV9JVFIyIGlzIGNvbm5lY3RlZCB0byBMUFRJTTEgb3V0cHV0ICovCisKKyNlbmRpZiAvKiBMUFRJTV9PUl9USU0xX0lUUjJfUk1QICYmICBMUFRJTV9PUl9USU01X0lUUjFfUk1QICYmIExQVElNX09SX1RJTTlfSVRSMV9STVAgKi8KIAogLyoqCiAgICogQH0KQEAgLTEyMTAsNyArMTIyOSwxNiBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1RJTV9HZXRDb3VudGVyTW9kZShUSU1fVHlwZURlZiAqVElNeCkKIHsKLSAgcmV0dXJuICh1aW50MzJfdCkoUkVBRF9CSVQoVElNeC0+Q1IxLCBUSU1fQ1IxX0RJUiB8IFRJTV9DUjFfQ01TKSk7CisgIHVpbnQzMl90IGNvdW50ZXJfbW9kZTsKKworICBjb3VudGVyX21vZGUgPSAodWludDMyX3QpKFJFQURfQklUKFRJTXgtPkNSMSwgVElNX0NSMV9DTVMpKTsKKworICBpZiAoY291bnRlcl9tb2RlID09IDBVKQorICB7CisgICAgY291bnRlcl9tb2RlID0gKHVpbnQzMl90KShSRUFEX0JJVChUSU14LT5DUjEsIFRJTV9DUjFfRElSKSk7CisgIH0KKworICByZXR1cm4gY291bnRlcl9tb2RlOwogfQogCiAvKioKQEAgLTEzODMsNyArMTQxMSw3IEBACiAgICogICAgICAgd2hldGhlciBvciBub3QgYSB0aW1lciBpbnN0YW5jZSBzdXBwb3J0cyBhIHJlcGV0aXRpb24gY291bnRlci4KICAgKiBAcm10b2xsIFJDUiAgICAgICAgICBSRVAgICAgICAgICAgIExMX1RJTV9TZXRSZXBldGl0aW9uQ291bnRlcgogICAqIEBwYXJhbSAgVElNeCBUaW1lciBpbnN0YW5jZQotICAqIEBwYXJhbSAgUmVwZXRpdGlvbkNvdW50ZXIgYmV0d2VlbiBNaW5fRGF0YT0wIGFuZCBNYXhfRGF0YT0yNTUKKyAgKiBAcGFyYW0gIFJlcGV0aXRpb25Db3VudGVyIGJldHdlZW4gTWluX0RhdGE9MCBhbmQgTWF4X0RhdGE9MjU1IG9yIDY1NTM1IGZvciBhZHZhbmNlZCB0aW1lci4KICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX1RJTV9TZXRSZXBldGl0aW9uQ291bnRlcihUSU1fVHlwZURlZiAqVElNeCwgdWludDMyX3QgUmVwZXRpdGlvbkNvdW50ZXIpCkBAIC0xNjExLDggKzE2MzksOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfVElNX09DX0NvbmZpZ091dHB1dChUSU1fVHlwZURlZiAqVElNeCwgdWludDMyX3QgQ2hhbm5lbCwgdWludDMyX3QgQ29uZmlndXJhdGlvbikKIHsKLSAgcmVnaXN0ZXIgdWludDhfdCBpQ2hhbm5lbCA9IFRJTV9HRVRfQ0hBTk5FTF9JTkRFWChDaGFubmVsKTsKLSAgcmVnaXN0ZXIgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmVElNeC0+Q0NNUjEpICsgT0ZGU0VUX1RBQl9DQ01SeFtpQ2hhbm5lbF0pKTsKKyAgdWludDhfdCBpQ2hhbm5lbCA9IFRJTV9HRVRfQ0hBTk5FTF9JTkRFWChDaGFubmVsKTsKKyAgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmVElNeC0+Q0NNUjEpICsgT0ZGU0VUX1RBQl9DQ01SeFtpQ2hhbm5lbF0pKTsKICAgQ0xFQVJfQklUKCpwUmVnLCAoVElNX0NDTVIxX0NDMVMgPDwgU0hJRlRfVEFCX09DeHhbaUNoYW5uZWxdKSk7CiAgIE1PRElGWV9SRUcoVElNeC0+Q0NFUiwgKFRJTV9DQ0VSX0NDMVAgPDwgU0hJRlRfVEFCX0NDeFBbaUNoYW5uZWxdKSwKICAgICAgICAgICAgICAoQ29uZmlndXJhdGlvbiAmIFRJTV9DQ0VSX0NDMVApIDw8IFNISUZUX1RBQl9DQ3hQW2lDaGFubmVsXSk7CkBAIC0xNjQ2LDggKzE2NzQsOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfVElNX09DX1NldE1vZGUoVElNX1R5cGVEZWYgKlRJTXgsIHVpbnQzMl90IENoYW5uZWwsIHVpbnQzMl90IE1vZGUpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQ4X3QgaUNoYW5uZWwgPSBUSU1fR0VUX0NIQU5ORUxfSU5ERVgoQ2hhbm5lbCk7Ci0gIHJlZ2lzdGVyIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJlRJTXgtPkNDTVIxKSArIE9GRlNFVF9UQUJfQ0NNUnhbaUNoYW5uZWxdKSk7CisgIHVpbnQ4X3QgaUNoYW5uZWwgPSBUSU1fR0VUX0NIQU5ORUxfSU5ERVgoQ2hhbm5lbCk7CisgIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJlRJTXgtPkNDTVIxKSArIE9GRlNFVF9UQUJfQ0NNUnhbaUNoYW5uZWxdKSk7CiAgIE1PRElGWV9SRUcoKnBSZWcsICgoVElNX0NDTVIxX09DMU0gIHwgVElNX0NDTVIxX0NDMVMpIDw8IFNISUZUX1RBQl9PQ3h4W2lDaGFubmVsXSksICBNb2RlIDw8IFNISUZUX1RBQl9PQ3h4W2lDaGFubmVsXSk7CiB9CiAKQEAgLTE2NzUsOCArMTcwMyw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVElNX09DX0dldE1vZGUoVElNX1R5cGVEZWYgKlRJTXgsIHVpbnQzMl90IENoYW5uZWwpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQ4X3QgaUNoYW5uZWwgPSBUSU1fR0VUX0NIQU5ORUxfSU5ERVgoQ2hhbm5lbCk7Ci0gIHJlZ2lzdGVyIGNvbnN0IF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJlRJTXgtPkNDTVIxKSArIE9GRlNFVF9UQUJfQ0NNUnhbaUNoYW5uZWxdKSk7CisgIHVpbnQ4X3QgaUNoYW5uZWwgPSBUSU1fR0VUX0NIQU5ORUxfSU5ERVgoQ2hhbm5lbCk7CisgIGNvbnN0IF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJlRJTXgtPkNDTVIxKSArIE9GRlNFVF9UQUJfQ0NNUnhbaUNoYW5uZWxdKSk7CiAgIHJldHVybiAoUkVBRF9CSVQoKnBSZWcsICgoVElNX0NDTVIxX09DMU0gIHwgVElNX0NDTVIxX0NDMVMpIDw8IFNISUZUX1RBQl9PQ3h4W2lDaGFubmVsXSkpID4+IFNISUZUX1RBQl9PQ3h4W2lDaGFubmVsXSk7CiB9CiAKQEAgLTE3MDUsNyArMTczMyw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9USU1fT0NfU2V0UG9sYXJpdHkoVElNX1R5cGVEZWYgKlRJTXgsIHVpbnQzMl90IENoYW5uZWwsIHVpbnQzMl90IFBvbGFyaXR5KQogewotICByZWdpc3RlciB1aW50OF90IGlDaGFubmVsID0gVElNX0dFVF9DSEFOTkVMX0lOREVYKENoYW5uZWwpOworICB1aW50OF90IGlDaGFubmVsID0gVElNX0dFVF9DSEFOTkVMX0lOREVYKENoYW5uZWwpOwogICBNT0RJRllfUkVHKFRJTXgtPkNDRVIsIChUSU1fQ0NFUl9DQzFQIDw8IFNISUZUX1RBQl9DQ3hQW2lDaGFubmVsXSksICBQb2xhcml0eSA8PCBTSElGVF9UQUJfQ0N4UFtpQ2hhbm5lbF0pOwogfQogCkBAIC0xNzMzLDcgKzE3NjEsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1RJTV9PQ19HZXRQb2xhcml0eShUSU1fVHlwZURlZiAqVElNeCwgdWludDMyX3QgQ2hhbm5lbCkKIHsKLSAgcmVnaXN0ZXIgdWludDhfdCBpQ2hhbm5lbCA9IFRJTV9HRVRfQ0hBTk5FTF9JTkRFWChDaGFubmVsKTsKKyAgdWludDhfdCBpQ2hhbm5lbCA9IFRJTV9HRVRfQ0hBTk5FTF9JTkRFWChDaGFubmVsKTsKICAgcmV0dXJuIChSRUFEX0JJVChUSU14LT5DQ0VSLCAoVElNX0NDRVJfQ0MxUCA8PCBTSElGVF9UQUJfQ0N4UFtpQ2hhbm5lbF0pKSA+PiBTSElGVF9UQUJfQ0N4UFtpQ2hhbm5lbF0pOwogfQogCkBAIC0xNzY2LDcgKzE3OTQsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfVElNX09DX1NldElkbGVTdGF0ZShUSU1fVHlwZURlZiAqVElNeCwgdWludDMyX3QgQ2hhbm5lbCwgdWludDMyX3QgSWRsZVN0YXRlKQogewotICByZWdpc3RlciB1aW50OF90IGlDaGFubmVsID0gVElNX0dFVF9DSEFOTkVMX0lOREVYKENoYW5uZWwpOworICB1aW50OF90IGlDaGFubmVsID0gVElNX0dFVF9DSEFOTkVMX0lOREVYKENoYW5uZWwpOwogICBNT0RJRllfUkVHKFRJTXgtPkNSMiwgKFRJTV9DUjJfT0lTMSA8PCBTSElGVF9UQUJfT0lTeFtpQ2hhbm5lbF0pLCAgSWRsZVN0YXRlIDw8IFNISUZUX1RBQl9PSVN4W2lDaGFubmVsXSk7CiB9CiAKQEAgLTE3OTQsNyArMTgyMiw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVElNX09DX0dldElkbGVTdGF0ZShUSU1fVHlwZURlZiAqVElNeCwgdWludDMyX3QgQ2hhbm5lbCkKIHsKLSAgcmVnaXN0ZXIgdWludDhfdCBpQ2hhbm5lbCA9IFRJTV9HRVRfQ0hBTk5FTF9JTkRFWChDaGFubmVsKTsKKyAgdWludDhfdCBpQ2hhbm5lbCA9IFRJTV9HRVRfQ0hBTk5FTF9JTkRFWChDaGFubmVsKTsKICAgcmV0dXJuIChSRUFEX0JJVChUSU14LT5DUjIsIChUSU1fQ1IyX09JUzEgPDwgU0hJRlRfVEFCX09JU3hbaUNoYW5uZWxdKSkgPj4gU0hJRlRfVEFCX09JU3hbaUNoYW5uZWxdKTsKIH0KIApAQCAtMTgxNSw4ICsxODQzLDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX1RJTV9PQ19FbmFibGVGYXN0KFRJTV9UeXBlRGVmICpUSU14LCB1aW50MzJfdCBDaGFubmVsKQogewotICByZWdpc3RlciB1aW50OF90IGlDaGFubmVsID0gVElNX0dFVF9DSEFOTkVMX0lOREVYKENoYW5uZWwpOwotICByZWdpc3RlciBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZUSU14LT5DQ01SMSkgKyBPRkZTRVRfVEFCX0NDTVJ4W2lDaGFubmVsXSkpOworICB1aW50OF90IGlDaGFubmVsID0gVElNX0dFVF9DSEFOTkVMX0lOREVYKENoYW5uZWwpOworICBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZUSU14LT5DQ01SMSkgKyBPRkZTRVRfVEFCX0NDTVJ4W2lDaGFubmVsXSkpOwogICBTRVRfQklUKCpwUmVnLCAoVElNX0NDTVIxX09DMUZFIDw8IFNISUZUX1RBQl9PQ3h4W2lDaGFubmVsXSkpOwogCiB9CkBAIC0xODM3LDggKzE4NjUsOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfVElNX09DX0Rpc2FibGVGYXN0KFRJTV9UeXBlRGVmICpUSU14LCB1aW50MzJfdCBDaGFubmVsKQogewotICByZWdpc3RlciB1aW50OF90IGlDaGFubmVsID0gVElNX0dFVF9DSEFOTkVMX0lOREVYKENoYW5uZWwpOwotICByZWdpc3RlciBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZUSU14LT5DQ01SMSkgKyBPRkZTRVRfVEFCX0NDTVJ4W2lDaGFubmVsXSkpOworICB1aW50OF90IGlDaGFubmVsID0gVElNX0dFVF9DSEFOTkVMX0lOREVYKENoYW5uZWwpOworICBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZUSU14LT5DQ01SMSkgKyBPRkZTRVRfVEFCX0NDTVJ4W2lDaGFubmVsXSkpOwogICBDTEVBUl9CSVQoKnBSZWcsIChUSU1fQ0NNUjFfT0MxRkUgPDwgU0hJRlRfVEFCX09DeHhbaUNoYW5uZWxdKSk7CiAKIH0KQEAgLTE4NTksOSArMTg4Nyw5IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVElNX09DX0lzRW5hYmxlZEZhc3QoVElNX1R5cGVEZWYgKlRJTXgsIHVpbnQzMl90IENoYW5uZWwpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQ4X3QgaUNoYW5uZWwgPSBUSU1fR0VUX0NIQU5ORUxfSU5ERVgoQ2hhbm5lbCk7Ci0gIHJlZ2lzdGVyIGNvbnN0IF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJlRJTXgtPkNDTVIxKSArIE9GRlNFVF9UQUJfQ0NNUnhbaUNoYW5uZWxdKSk7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGJpdGZpZWxkID0gVElNX0NDTVIxX09DMUZFIDw8IFNISUZUX1RBQl9PQ3h4W2lDaGFubmVsXTsKKyAgdWludDhfdCBpQ2hhbm5lbCA9IFRJTV9HRVRfQ0hBTk5FTF9JTkRFWChDaGFubmVsKTsKKyAgY29uc3QgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmVElNeC0+Q0NNUjEpICsgT0ZGU0VUX1RBQl9DQ01SeFtpQ2hhbm5lbF0pKTsKKyAgdWludDMyX3QgYml0ZmllbGQgPSBUSU1fQ0NNUjFfT0MxRkUgPDwgU0hJRlRfVEFCX09DeHhbaUNoYW5uZWxdOwogICByZXR1cm4gKChSRUFEX0JJVCgqcFJlZywgYml0ZmllbGQpID09IGJpdGZpZWxkKSA/IDFVTCA6IDBVTCk7CiB9CiAKQEAgLTE4ODEsOCArMTkwOSw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9USU1fT0NfRW5hYmxlUHJlbG9hZChUSU1fVHlwZURlZiAqVElNeCwgdWludDMyX3QgQ2hhbm5lbCkKIHsKLSAgcmVnaXN0ZXIgdWludDhfdCBpQ2hhbm5lbCA9IFRJTV9HRVRfQ0hBTk5FTF9JTkRFWChDaGFubmVsKTsKLSAgcmVnaXN0ZXIgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmVElNeC0+Q0NNUjEpICsgT0ZGU0VUX1RBQl9DQ01SeFtpQ2hhbm5lbF0pKTsKKyAgdWludDhfdCBpQ2hhbm5lbCA9IFRJTV9HRVRfQ0hBTk5FTF9JTkRFWChDaGFubmVsKTsKKyAgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmVElNeC0+Q0NNUjEpICsgT0ZGU0VUX1RBQl9DQ01SeFtpQ2hhbm5lbF0pKTsKICAgU0VUX0JJVCgqcFJlZywgKFRJTV9DQ01SMV9PQzFQRSA8PCBTSElGVF9UQUJfT0N4eFtpQ2hhbm5lbF0pKTsKIH0KIApAQCAtMTkwMiw4ICsxOTMwLDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX1RJTV9PQ19EaXNhYmxlUHJlbG9hZChUSU1fVHlwZURlZiAqVElNeCwgdWludDMyX3QgQ2hhbm5lbCkKIHsKLSAgcmVnaXN0ZXIgdWludDhfdCBpQ2hhbm5lbCA9IFRJTV9HRVRfQ0hBTk5FTF9JTkRFWChDaGFubmVsKTsKLSAgcmVnaXN0ZXIgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmVElNeC0+Q0NNUjEpICsgT0ZGU0VUX1RBQl9DQ01SeFtpQ2hhbm5lbF0pKTsKKyAgdWludDhfdCBpQ2hhbm5lbCA9IFRJTV9HRVRfQ0hBTk5FTF9JTkRFWChDaGFubmVsKTsKKyAgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmVElNeC0+Q0NNUjEpICsgT0ZGU0VUX1RBQl9DQ01SeFtpQ2hhbm5lbF0pKTsKICAgQ0xFQVJfQklUKCpwUmVnLCAoVElNX0NDTVIxX09DMVBFIDw8IFNISUZUX1RBQl9PQ3h4W2lDaGFubmVsXSkpOwogfQogCkBAIC0xOTIzLDkgKzE5NTEsOSBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1RJTV9PQ19Jc0VuYWJsZWRQcmVsb2FkKFRJTV9UeXBlRGVmICpUSU14LCB1aW50MzJfdCBDaGFubmVsKQogewotICByZWdpc3RlciB1aW50OF90IGlDaGFubmVsID0gVElNX0dFVF9DSEFOTkVMX0lOREVYKENoYW5uZWwpOwotICByZWdpc3RlciBjb25zdCBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZUSU14LT5DQ01SMSkgKyBPRkZTRVRfVEFCX0NDTVJ4W2lDaGFubmVsXSkpOwotICByZWdpc3RlciB1aW50MzJfdCBiaXRmaWVsZCA9IFRJTV9DQ01SMV9PQzFQRSA8PCBTSElGVF9UQUJfT0N4eFtpQ2hhbm5lbF07CisgIHVpbnQ4X3QgaUNoYW5uZWwgPSBUSU1fR0VUX0NIQU5ORUxfSU5ERVgoQ2hhbm5lbCk7CisgIGNvbnN0IF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJlRJTXgtPkNDTVIxKSArIE9GRlNFVF9UQUJfQ0NNUnhbaUNoYW5uZWxdKSk7CisgIHVpbnQzMl90IGJpdGZpZWxkID0gVElNX0NDTVIxX09DMVBFIDw8IFNISUZUX1RBQl9PQ3h4W2lDaGFubmVsXTsKICAgcmV0dXJuICgoUkVBRF9CSVQoKnBSZWcsIGJpdGZpZWxkKSA9PSBiaXRmaWVsZCkgPyAxVUwgOiAwVUwpOwogfQogCkBAIC0xOTQ4LDggKzE5NzYsOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfVElNX09DX0VuYWJsZUNsZWFyKFRJTV9UeXBlRGVmICpUSU14LCB1aW50MzJfdCBDaGFubmVsKQogewotICByZWdpc3RlciB1aW50OF90IGlDaGFubmVsID0gVElNX0dFVF9DSEFOTkVMX0lOREVYKENoYW5uZWwpOwotICByZWdpc3RlciBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZUSU14LT5DQ01SMSkgKyBPRkZTRVRfVEFCX0NDTVJ4W2lDaGFubmVsXSkpOworICB1aW50OF90IGlDaGFubmVsID0gVElNX0dFVF9DSEFOTkVMX0lOREVYKENoYW5uZWwpOworICBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZUSU14LT5DQ01SMSkgKyBPRkZTRVRfVEFCX0NDTVJ4W2lDaGFubmVsXSkpOwogICBTRVRfQklUKCpwUmVnLCAoVElNX0NDTVIxX09DMUNFIDw8IFNISUZUX1RBQl9PQ3h4W2lDaGFubmVsXSkpOwogfQogCkBAIC0xOTcxLDggKzE5OTksOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfVElNX09DX0Rpc2FibGVDbGVhcihUSU1fVHlwZURlZiAqVElNeCwgdWludDMyX3QgQ2hhbm5lbCkKIHsKLSAgcmVnaXN0ZXIgdWludDhfdCBpQ2hhbm5lbCA9IFRJTV9HRVRfQ0hBTk5FTF9JTkRFWChDaGFubmVsKTsKLSAgcmVnaXN0ZXIgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmVElNeC0+Q0NNUjEpICsgT0ZGU0VUX1RBQl9DQ01SeFtpQ2hhbm5lbF0pKTsKKyAgdWludDhfdCBpQ2hhbm5lbCA9IFRJTV9HRVRfQ0hBTk5FTF9JTkRFWChDaGFubmVsKTsKKyAgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmVElNeC0+Q0NNUjEpICsgT0ZGU0VUX1RBQl9DQ01SeFtpQ2hhbm5lbF0pKTsKICAgQ0xFQVJfQklUKCpwUmVnLCAoVElNX0NDTVIxX09DMUNFIDw8IFNISUZUX1RBQl9PQ3h4W2lDaGFubmVsXSkpOwogfQogCkBAIC0xOTk2LDkgKzIwMjQsOSBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1RJTV9PQ19Jc0VuYWJsZWRDbGVhcihUSU1fVHlwZURlZiAqVElNeCwgdWludDMyX3QgQ2hhbm5lbCkKIHsKLSAgcmVnaXN0ZXIgdWludDhfdCBpQ2hhbm5lbCA9IFRJTV9HRVRfQ0hBTk5FTF9JTkRFWChDaGFubmVsKTsKLSAgcmVnaXN0ZXIgY29uc3QgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmVElNeC0+Q0NNUjEpICsgT0ZGU0VUX1RBQl9DQ01SeFtpQ2hhbm5lbF0pKTsKLSAgcmVnaXN0ZXIgdWludDMyX3QgYml0ZmllbGQgPSBUSU1fQ0NNUjFfT0MxQ0UgPDwgU0hJRlRfVEFCX09DeHhbaUNoYW5uZWxdOworICB1aW50OF90IGlDaGFubmVsID0gVElNX0dFVF9DSEFOTkVMX0lOREVYKENoYW5uZWwpOworICBjb25zdCBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZUSU14LT5DQ01SMSkgKyBPRkZTRVRfVEFCX0NDTVJ4W2lDaGFubmVsXSkpOworICB1aW50MzJfdCBiaXRmaWVsZCA9IFRJTV9DQ01SMV9PQzFDRSA8PCBTSElGVF9UQUJfT0N4eFtpQ2hhbm5lbF07CiAgIHJldHVybiAoKFJFQURfQklUKCpwUmVnLCBiaXRmaWVsZCkgPT0gYml0ZmllbGQpID8gMVVMIDogMFVMKTsKIH0KIApAQCAtMjE5Myw4ICsyMjIxLDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX1RJTV9JQ19Db25maWcoVElNX1R5cGVEZWYgKlRJTXgsIHVpbnQzMl90IENoYW5uZWwsIHVpbnQzMl90IENvbmZpZ3VyYXRpb24pCiB7Ci0gIHJlZ2lzdGVyIHVpbnQ4X3QgaUNoYW5uZWwgPSBUSU1fR0VUX0NIQU5ORUxfSU5ERVgoQ2hhbm5lbCk7Ci0gIHJlZ2lzdGVyIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJlRJTXgtPkNDTVIxKSArIE9GRlNFVF9UQUJfQ0NNUnhbaUNoYW5uZWxdKSk7CisgIHVpbnQ4X3QgaUNoYW5uZWwgPSBUSU1fR0VUX0NIQU5ORUxfSU5ERVgoQ2hhbm5lbCk7CisgIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJlRJTXgtPkNDTVIxKSArIE9GRlNFVF9UQUJfQ0NNUnhbaUNoYW5uZWxdKSk7CiAgIE1PRElGWV9SRUcoKnBSZWcsICgoVElNX0NDTVIxX0lDMUYgfCBUSU1fQ0NNUjFfSUMxUFNDIHwgVElNX0NDTVIxX0NDMVMpIDw8IFNISUZUX1RBQl9JQ3h4W2lDaGFubmVsXSksCiAgICAgICAgICAgICAgKChDb25maWd1cmF0aW9uID4+IDE2VSkgJiAoVElNX0NDTVIxX0lDMUYgfCBUSU1fQ0NNUjFfSUMxUFNDIHwgVElNX0NDTVIxX0NDMVMpKSAgPDwgU0hJRlRfVEFCX0lDeHhbaUNoYW5uZWxdKTsKICAgTU9ESUZZX1JFRyhUSU14LT5DQ0VSLCAoKFRJTV9DQ0VSX0NDMU5QIHwgVElNX0NDRVJfQ0MxUCkgPDwgU0hJRlRfVEFCX0NDeFBbaUNoYW5uZWxdKSwKQEAgLTIyMjEsOCArMjI0OSw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9USU1fSUNfU2V0QWN0aXZlSW5wdXQoVElNX1R5cGVEZWYgKlRJTXgsIHVpbnQzMl90IENoYW5uZWwsIHVpbnQzMl90IElDQWN0aXZlSW5wdXQpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQ4X3QgaUNoYW5uZWwgPSBUSU1fR0VUX0NIQU5ORUxfSU5ERVgoQ2hhbm5lbCk7Ci0gIHJlZ2lzdGVyIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJlRJTXgtPkNDTVIxKSArIE9GRlNFVF9UQUJfQ0NNUnhbaUNoYW5uZWxdKSk7CisgIHVpbnQ4X3QgaUNoYW5uZWwgPSBUSU1fR0VUX0NIQU5ORUxfSU5ERVgoQ2hhbm5lbCk7CisgIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJlRJTXgtPkNDTVIxKSArIE9GRlNFVF9UQUJfQ0NNUnhbaUNoYW5uZWxdKSk7CiAgIE1PRElGWV9SRUcoKnBSZWcsICgoVElNX0NDTVIxX0NDMVMpIDw8IFNISUZUX1RBQl9JQ3h4W2lDaGFubmVsXSksIChJQ0FjdGl2ZUlucHV0ID4+IDE2VSkgPDwgU0hJRlRfVEFCX0lDeHhbaUNoYW5uZWxdKTsKIH0KIApAQCAtMjI0NSw4ICsyMjczLDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9USU1fSUNfR2V0QWN0aXZlSW5wdXQoVElNX1R5cGVEZWYgKlRJTXgsIHVpbnQzMl90IENoYW5uZWwpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQ4X3QgaUNoYW5uZWwgPSBUSU1fR0VUX0NIQU5ORUxfSU5ERVgoQ2hhbm5lbCk7Ci0gIHJlZ2lzdGVyIGNvbnN0IF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJlRJTXgtPkNDTVIxKSArIE9GRlNFVF9UQUJfQ0NNUnhbaUNoYW5uZWxdKSk7CisgIHVpbnQ4X3QgaUNoYW5uZWwgPSBUSU1fR0VUX0NIQU5ORUxfSU5ERVgoQ2hhbm5lbCk7CisgIGNvbnN0IF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJlRJTXgtPkNDTVIxKSArIE9GRlNFVF9UQUJfQ0NNUnhbaUNoYW5uZWxdKSk7CiAgIHJldHVybiAoKFJFQURfQklUKCpwUmVnLCAoKFRJTV9DQ01SMV9DQzFTKSA8PCBTSElGVF9UQUJfSUN4eFtpQ2hhbm5lbF0pKSA+PiBTSElGVF9UQUJfSUN4eFtpQ2hhbm5lbF0pIDw8IDE2VSk7CiB9CiAKQEAgLTIyNzEsOCArMjI5OSw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9USU1fSUNfU2V0UHJlc2NhbGVyKFRJTV9UeXBlRGVmICpUSU14LCB1aW50MzJfdCBDaGFubmVsLCB1aW50MzJfdCBJQ1ByZXNjYWxlcikKIHsKLSAgcmVnaXN0ZXIgdWludDhfdCBpQ2hhbm5lbCA9IFRJTV9HRVRfQ0hBTk5FTF9JTkRFWChDaGFubmVsKTsKLSAgcmVnaXN0ZXIgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmVElNeC0+Q0NNUjEpICsgT0ZGU0VUX1RBQl9DQ01SeFtpQ2hhbm5lbF0pKTsKKyAgdWludDhfdCBpQ2hhbm5lbCA9IFRJTV9HRVRfQ0hBTk5FTF9JTkRFWChDaGFubmVsKTsKKyAgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmVElNeC0+Q0NNUjEpICsgT0ZGU0VUX1RBQl9DQ01SeFtpQ2hhbm5lbF0pKTsKICAgTU9ESUZZX1JFRygqcFJlZywgKChUSU1fQ0NNUjFfSUMxUFNDKSA8PCBTSElGVF9UQUJfSUN4eFtpQ2hhbm5lbF0pLCAoSUNQcmVzY2FsZXIgPj4gMTZVKSA8PCBTSElGVF9UQUJfSUN4eFtpQ2hhbm5lbF0pOwogfQogCkBAIC0yMjk2LDggKzIzMjQsOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1RJTV9JQ19HZXRQcmVzY2FsZXIoVElNX1R5cGVEZWYgKlRJTXgsIHVpbnQzMl90IENoYW5uZWwpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQ4X3QgaUNoYW5uZWwgPSBUSU1fR0VUX0NIQU5ORUxfSU5ERVgoQ2hhbm5lbCk7Ci0gIHJlZ2lzdGVyIGNvbnN0IF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJlRJTXgtPkNDTVIxKSArIE9GRlNFVF9UQUJfQ0NNUnhbaUNoYW5uZWxdKSk7CisgIHVpbnQ4X3QgaUNoYW5uZWwgPSBUSU1fR0VUX0NIQU5ORUxfSU5ERVgoQ2hhbm5lbCk7CisgIGNvbnN0IF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJlRJTXgtPkNDTVIxKSArIE9GRlNFVF9UQUJfQ0NNUnhbaUNoYW5uZWxdKSk7CiAgIHJldHVybiAoKFJFQURfQklUKCpwUmVnLCAoKFRJTV9DQ01SMV9JQzFQU0MpIDw8IFNISUZUX1RBQl9JQ3h4W2lDaGFubmVsXSkpID4+IFNISUZUX1RBQl9JQ3h4W2lDaGFubmVsXSkgPDwgMTZVKTsKIH0KIApAQCAtMjMzNCw4ICsyMzYyLDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX1RJTV9JQ19TZXRGaWx0ZXIoVElNX1R5cGVEZWYgKlRJTXgsIHVpbnQzMl90IENoYW5uZWwsIHVpbnQzMl90IElDRmlsdGVyKQogewotICByZWdpc3RlciB1aW50OF90IGlDaGFubmVsID0gVElNX0dFVF9DSEFOTkVMX0lOREVYKENoYW5uZWwpOwotICByZWdpc3RlciBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZUSU14LT5DQ01SMSkgKyBPRkZTRVRfVEFCX0NDTVJ4W2lDaGFubmVsXSkpOworICB1aW50OF90IGlDaGFubmVsID0gVElNX0dFVF9DSEFOTkVMX0lOREVYKENoYW5uZWwpOworICBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZUSU14LT5DQ01SMSkgKyBPRkZTRVRfVEFCX0NDTVJ4W2lDaGFubmVsXSkpOwogICBNT0RJRllfUkVHKCpwUmVnLCAoKFRJTV9DQ01SMV9JQzFGKSA8PCBTSElGVF9UQUJfSUN4eFtpQ2hhbm5lbF0pLCAoSUNGaWx0ZXIgPj4gMTZVKSA8PCBTSElGVF9UQUJfSUN4eFtpQ2hhbm5lbF0pOwogfQogCkBAIC0yMzcxLDggKzIzOTksOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1RJTV9JQ19HZXRGaWx0ZXIoVElNX1R5cGVEZWYgKlRJTXgsIHVpbnQzMl90IENoYW5uZWwpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQ4X3QgaUNoYW5uZWwgPSBUSU1fR0VUX0NIQU5ORUxfSU5ERVgoQ2hhbm5lbCk7Ci0gIHJlZ2lzdGVyIGNvbnN0IF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJlRJTXgtPkNDTVIxKSArIE9GRlNFVF9UQUJfQ0NNUnhbaUNoYW5uZWxdKSk7CisgIHVpbnQ4X3QgaUNoYW5uZWwgPSBUSU1fR0VUX0NIQU5ORUxfSU5ERVgoQ2hhbm5lbCk7CisgIGNvbnN0IF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJlRJTXgtPkNDTVIxKSArIE9GRlNFVF9UQUJfQ0NNUnhbaUNoYW5uZWxdKSk7CiAgIHJldHVybiAoKFJFQURfQklUKCpwUmVnLCAoKFRJTV9DQ01SMV9JQzFGKSA8PCBTSElGVF9UQUJfSUN4eFtpQ2hhbm5lbF0pKSA+PiBTSElGVF9UQUJfSUN4eFtpQ2hhbm5lbF0pIDw8IDE2VSk7CiB9CiAKQEAgLTI0MDAsNyArMjQyOCw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9USU1fSUNfU2V0UG9sYXJpdHkoVElNX1R5cGVEZWYgKlRJTXgsIHVpbnQzMl90IENoYW5uZWwsIHVpbnQzMl90IElDUG9sYXJpdHkpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQ4X3QgaUNoYW5uZWwgPSBUSU1fR0VUX0NIQU5ORUxfSU5ERVgoQ2hhbm5lbCk7CisgIHVpbnQ4X3QgaUNoYW5uZWwgPSBUSU1fR0VUX0NIQU5ORUxfSU5ERVgoQ2hhbm5lbCk7CiAgIE1PRElGWV9SRUcoVElNeC0+Q0NFUiwgKChUSU1fQ0NFUl9DQzFOUCB8IFRJTV9DQ0VSX0NDMVApIDw8IFNISUZUX1RBQl9DQ3hQW2lDaGFubmVsXSksCiAgICAgICAgICAgICAgSUNQb2xhcml0eSA8PCBTSElGVF9UQUJfQ0N4UFtpQ2hhbm5lbF0pOwogfQpAQCAtMjQyOCw3ICsyNDU2LDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9USU1fSUNfR2V0UG9sYXJpdHkoVElNX1R5cGVEZWYgKlRJTXgsIHVpbnQzMl90IENoYW5uZWwpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQ4X3QgaUNoYW5uZWwgPSBUSU1fR0VUX0NIQU5ORUxfSU5ERVgoQ2hhbm5lbCk7CisgIHVpbnQ4X3QgaUNoYW5uZWwgPSBUSU1fR0VUX0NIQU5ORUxfSU5ERVgoQ2hhbm5lbCk7CiAgIHJldHVybiAoUkVBRF9CSVQoVElNeC0+Q0NFUiwgKChUSU1fQ0NFUl9DQzFOUCB8IFRJTV9DQ0VSX0NDMVApIDw8IFNISUZUX1RBQl9DQ3hQW2lDaGFubmVsXSkpID4+CiAgICAgICAgICAgU0hJRlRfVEFCX0NDeFBbaUNoYW5uZWxdKTsKIH0KQEAgLTMwMDYsOSArMzAzNCwxMyBAQAogICAqIEBicmllZiAgUmVtYXAgVElNIGlucHV0cyAoaW5wdXQgY2hhbm5lbCwgaW50ZXJuYWwvZXh0ZXJuYWwgdHJpZ2dlcnMpLgogICAqIEBub3RlIE1hY3JvIElTX1RJTV9SRU1BUF9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgIGEgc29tZSB0aW1lciBpbnB1dHMgY2FuIGJlIHJlbWFwcGVkLgotICAqIEBybXRvbGwgVElNMl9PUiAgICAgSVRSMV9STVAgICAgICAgICAgTExfVElNX1NldFJlbWFwXG4KKyAgKiBAcm10b2xsIFRJTTFfT1IgICAgIElUUjJfUk1QICAgICAgICAgIExMX1RJTV9TZXRSZW1hcFxuCisgICogICAgICAgICBUSU0yX09SICAgICBJVFIxX1JNUCAgICAgICAgICBMTF9USU1fU2V0UmVtYXBcbgorICAqICAgICAgICAgVElNNV9PUiAgICAgSVRSMV9STVAgICAgICAgICAgTExfVElNX1NldFJlbWFwXG4KICAgKiAgICAgICAgIFRJTTVfT1IgICAgIFRJNF9STVAgICAgICAgICAgIExMX1RJTV9TZXRSZW1hcFxuCi0gICogICAgICAgICBUSU0xMV9PUiAgICBUSTFfUk1QICAgICAgICAgICBMTF9USU1fU2V0UmVtYXAKKyAgKiAgICAgICAgIFRJTTlfT1IgICAgIElUUjFfUk1QICAgICAgICAgIExMX1RJTV9TZXRSZW1hcFxuCisgICogICAgICAgICBUSU0xMV9PUiAgICBUSTFfUk1QICAgICAgICAgICBMTF9USU1fU2V0UmVtYXBcbgorICAqICAgICAgICAgTFBUSU0xX09SICAgT1IgICAgICAgICAgICAgICAgTExfVElNX1NldFJlbWFwCiAgICogQHBhcmFtICBUSU14IFRpbWVyIGluc3RhbmNlCiAgICogQHBhcmFtICBSZW1hcCBSZW1hcCBwYXJhbSBkZXBlbmRzIG9uIHRoZSBUSU14LiBEZXNjcmlwdGlvbiBhdmFpbGFibGUgb25seQogICAqICAgICAgICAgaW4gQ0hNIHZlcnNpb24gb2YgdGhlIFVzZXIgTWFudWFsIChub3QgaW4gLnBkZikuCkBAIC0zMDE2LDYgKzMwNDgsMTIgQEAKICAgKgogICAqICAgICAgICAgQmVsb3cgZGVzY3JpcHRpb24gc3VtbWFyaXplcyAiVGltZXIgSW5zdGFuY2UiIGFuZCAiUmVtYXAiIHBhcmFtIGNvbWJpbmF0aW9uczoKICAgKgorICAqICAgICAgICAgVElNMTogb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzCisgICoKKyAgKiAgICAgICAgICAgIElUUjJfUk1QIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXMKKyAgKiAgICAgICAgICAgIEBhcmcgQHJlZiBMTF9USU1fVElNMV9JVFIyX1JNUF9USU0zX1RSR08gKCopCisgICogICAgICAgICAgICBAYXJnIEByZWYgTExfVElNX1RJTTFfSVRSMl9STVBfTFBUSU0gKCopCisgICoKICAgKiAgICAgICAgIFRJTTI6IG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlcwogICAqCiAgICogICAgICAgICAgICBJVFIxX1JNUCBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzCkBAIC0zMDI5LDYgKzMwNjcsMTQgQEAKICAgKiAgICAgICAgICAgIEBhcmcgQHJlZiBMTF9USU1fVElNNV9USTRfUk1QX0xTSQogICAqICAgICAgICAgICAgQGFyZyBAcmVmIExMX1RJTV9USU01X1RJNF9STVBfTFNFCiAgICogICAgICAgICAgICBAYXJnIEByZWYgTExfVElNX1RJTTVfVEk0X1JNUF9SVEMKKyAgKiAgICAgICAgICAgIEBhcmcgQHJlZiBMTF9USU1fVElNNV9JVFIxX1JNUF9USU0zX1RSR08gKCopCisgICogICAgICAgICAgICBAYXJnIEByZWYgTExfVElNX1RJTTVfSVRSMV9STVBfTFBUSU0gKCopCisgICoKKyAgKiAgICAgICAgIFRJTTk6IG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlcworICAqCisgICogICAgICAgICAgICBJVFIxX1JNUCBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzCisgICogICAgICAgICAgICBAYXJnIEByZWYgTExfVElNX1RJTTlfSVRSMV9STVBfVElNM19UUkdPICgqKQorICAqICAgICAgICAgICAgQGFyZyBAcmVmIExMX1RJTV9USU05X0lUUjFfUk1QX0xQVElNICgqKQogICAqCiAgICogICAgICAgICBUSU0xMTogb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzCiAgICoKQEAgLTMwNDQsNyArMzA5MCwyMiBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfVElNX1NldFJlbWFwKFRJTV9UeXBlRGVmICpUSU14LCB1aW50MzJfdCBSZW1hcCkKIHsKKyNpZiBkZWZpbmVkKExQVElNX09SX1RJTTFfSVRSMl9STVApICYmIGRlZmluZWQoTFBUSU1fT1JfVElNNV9JVFIxX1JNUCkgJiYgZGVmaW5lZChMUFRJTV9PUl9USU05X0lUUjFfUk1QKQorICBpZiAoKFJlbWFwICYgTExfVElNX0xQVElNX1JFTUFQX01BU0spID09IExMX1RJTV9MUFRJTV9SRU1BUF9NQVNLKQorICB7CisgICAgLyogQ29ubmVjdCBUSU14IGludGVybmFsIHRyaWdnZXIgdG8gTFBUSU0xIG91dHB1dCAqLworICAgIFNFVF9CSVQoUkNDLT5BUEIxRU5SLCBSQ0NfQVBCMUVOUl9MUFRJTTFFTik7CisgICAgTU9ESUZZX1JFRyhMUFRJTTEtPk9SLAorICAgICAgICAgICAgICAgKExQVElNX09SX1RJTTFfSVRSMl9STVAgfCBMUFRJTV9PUl9USU01X0lUUjFfUk1QIHwgTFBUSU1fT1JfVElNOV9JVFIxX1JNUCksCisgICAgICAgICAgICAgICBSZW1hcCAmIH4oTExfVElNX0xQVElNX1JFTUFQX01BU0spKTsKKyAgfQorICBlbHNlCisgIHsKKyAgICBNT0RJRllfUkVHKFRJTXgtPk9SLCAoUmVtYXAgPj4gVElNeF9PUl9STVBfU0hJRlQpLCAoUmVtYXAgJiBUSU14X09SX1JNUF9NQVNLKSk7CisgIH0KKyNlbHNlCiAgIE1PRElGWV9SRUcoVElNeC0+T1IsIChSZW1hcCA+PiBUSU14X09SX1JNUF9TSElGVCksIChSZW1hcCAmIFRJTXhfT1JfUk1QX01BU0spKTsKKyNlbmRpZiAvKiBMUFRJTV9PUl9USU0xX0lUUjJfUk1QICYmICBMUFRJTV9PUl9USU01X0lUUjFfUk1QICYmIExQVElNX09SX1RJTTlfSVRSMV9STVAgKi8KIH0KIAogLyoqCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJmNHh4X2xsX3VzYXJ0LmggYi9JbmMvc3RtMzJmNHh4X2xsX3VzYXJ0LmgKaW5kZXggZWVkY2RlOC4uMWRkZGRiNCAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZjR4eF9sbF91c2FydC5oCisrKyBiL0luYy9zdG0zMmY0eHhfbGxfdXNhcnQuaApAQCAtMTA0Myw4ICsxMDQzLDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9VU0FSVF9HZXRCYXVkUmF0ZShVU0FSVF9UeXBlRGVmICpVU0FSVHgsIHVpbnQzMl90IFBlcmlwaENsaywgdWludDMyX3QgT3ZlclNhbXBsaW5nKQogewotICByZWdpc3RlciB1aW50MzJfdCB1c2FydGRpdiA9IDB4MFU7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGJycnJlc3VsdCA9IDB4MFU7CisgIHVpbnQzMl90IHVzYXJ0ZGl2ID0gMHgwVTsKKyAgdWludDMyX3QgYnJycmVzdWx0ID0gMHgwVTsKIAogICB1c2FydGRpdiA9IFVTQVJUeC0+QlJSOwogCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJmNHh4X2xsX3VzYi5oIGIvSW5jL3N0bTMyZjR4eF9sbF91c2IuaAppbmRleCAzMDJhYjgxLi4yOGJlNTE4IDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmNHh4X2xsX3VzYi5oCisrKyBiL0luYy9zdG0zMmY0eHhfbGxfdXNiLmgKQEAgLTE4Niw2ICsxODYsOCBAQAogCiAgIHVpbnQ4X3QgICAqeGZlcl9idWZmOyAgICAgICAgIC8qITwgUG9pbnRlciB0byB0cmFuc2ZlciBidWZmZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAorICB1aW50MzJfdCAgWGZlclNpemU7ICAgICAgICAgICAgIC8qITwgT1RHIENoYW5uZWwgdHJhbnNmZXIgc2l6ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCiAgIHVpbnQzMl90ICB4ZmVyX2xlbjsgICAgICAgICAgIC8qITwgQ3VycmVudCB0cmFuc2ZlciBsZW5ndGguICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAogICB1aW50MzJfdCAgeGZlcl9jb3VudDsgICAgICAgICAvKiE8IFBhcnRpYWwgdHJhbnNmZXIgbGVuZ3RoIGluIGNhc2Ugb2YgbXVsdGkgcGFja2V0IHRyYW5zZmVyLiAgICAgICAgICAgICAgICAgICovCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJmNHh4X2xsX3V0aWxzLmggYi9JbmMvc3RtMzJmNHh4X2xsX3V0aWxzLmgKaW5kZXggNjBlYTcwNy4uM2JhYzMwYyAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZjR4eF9sbF91dGlscy5oCisrKyBiL0luYy9zdG0zMmY0eHhfbGxfdXRpbHMuaApAQCAtMjc5LDYgKzI3OSw3IEBACiAgICovCiAKIHZvaWQgICAgICAgIExMX1NldFN5c3RlbUNvcmVDbG9jayh1aW50MzJfdCBIQ0xLRnJlcXVlbmN5KTsKK0Vycm9yU3RhdHVzIExMX1NldEZsYXNoTGF0ZW5jeSh1aW50MzJfdCBIQ0xLX0ZyZXF1ZW5jeSk7CiBFcnJvclN0YXR1cyBMTF9QTExfQ29uZmlnU3lzdGVtQ2xvY2tfSFNJKExMX1VUSUxTX1BMTEluaXRUeXBlRGVmICpVVElMU19QTExJbml0U3RydWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMTF9VVElMU19DbGtJbml0VHlwZURlZiAqVVRJTFNfQ2xrSW5pdFN0cnVjdCk7CiBFcnJvclN0YXR1cyBMTF9QTExfQ29uZmlnU3lzdGVtQ2xvY2tfSFNFKHVpbnQzMl90IEhTRUZyZXF1ZW5jeSwgdWludDMyX3QgSFNFQnlwYXNzLApkaWZmIC0tZ2l0IGEvUkVBRE1FLm1kIGIvUkVBRE1FLm1kCmluZGV4IDM3MGQyMGIuLjIyZTE0NzkgMTAwNjQ0Ci0tLSBhL1JFQURNRS5tZAorKysgYi9SRUFETUUubWQKQEAgLTQyLDcgKzQyLDggQEAKIFRhZyB2MS43LjcgfCBUYWcgdjIuNi40IHwgVGFnIHY1LjQuMF9jbTQgfCBUYWcgdjEuMjQuMiAoYW5kIGZvbGxvd2luZywgaWYgYW55LCB0aWxsIG5leHQgdGFnKQogVGFnIHYxLjcuOCB8IFRhZyB2Mi42LjUgfCBUYWcgdjUuNC4wX2NtNCB8IFRhZyB2MS4yNS4wIChhbmQgZm9sbG93aW5nLCBpZiBhbnksIHRpbGwgbmV4dCB0YWcpCiBUYWcgdjEuNy45IHwgVGFnIHYyLjYuNSB8IFRhZyB2NS40LjBfY200IHwgVGFnIHYxLjI1LjEgKGFuZCBmb2xsb3dpbmcsIGlmIGFueSwgdGlsbCBuZXh0IHRhZykKLVRhZyB2MS43LjEwIHwgVGFnIHYyLjYuNSB8IFRhZyB2NS40LjBfY200IHwgVGFnIHYxLjI1LjIgKGFuZCBmb2xsb3dpbmcsIGlmIGFueSwgdGlsbCBuZXh0IHRhZykKK1RhZyB2MS43LjEwfCBUYWcgdjIuNi41IHwgVGFnIHY1LjQuMF9jbTQgfCBUYWcgdjEuMjUuMiAoYW5kIGZvbGxvd2luZywgaWYgYW55LCB0aWxsIG5leHQgdGFnKQorVGFnIHYxLjcuMTF8IFRhZyB2Mi42LjYgfCBUYWcgdjUuNC4wX2NtNCB8IFRhZyB2MS4yNi4wIChhbmQgZm9sbG93aW5nLCBpZiBhbnksIHRpbGwgbmV4dCB0YWcpCiAKIFRoZSBmdWxsICoqU1RNMzJDdWJlRjQqKiBNQ1UgcGFja2FnZSBpcyBhdmFpbGFibGUgW2hlcmVdKGh0dHBzOi8vZ2l0aHViLmNvbS9TVE1pY3JvZWxlY3Ryb25pY3MvU1RNMzJDdWJlRjQpLgogCmRpZmYgLS1naXQgYS9SZWxlYXNlX05vdGVzLmh0bWwgYi9SZWxlYXNlX05vdGVzLmh0bWwKaW5kZXggOWI2MjYzNy4uMDJkZmIxNSAxMDA2NDQKLS0tIGEvUmVsZWFzZV9Ob3Rlcy5odG1sCisrKyBiL1JlbGVhc2VfTm90ZXMuaHRtbApAQCAtMzYsNiArMzYsOCBAQAogCiAKIAorCisKIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXdpbmRvd3MtMTI1MiI+CiA8bGluayByZWw9IkZpbGUtTGlzdCIgaHJlZj0iUmVsZWFzZV9Ob3Rlc19mb3JfU1RNMzJGNDV4X1N0ZFBlcmlwaF9Ecml2ZXJfZmlsZXMvZmlsZWxpc3QueG1sIj4KIDxsaW5rIHJlbD0iRWRpdC1UaW1lLURhdGEiIGhyZWY9IlJlbGVhc2VfTm90ZXNfZm9yX1NUTTMyRjQ1eF9TdGRQZXJpcGhfRHJpdmVyX2ZpbGVzL2VkaXRkYXRhLm1zbyI+PCEtLVtpZiAhbXNvXT4KQEAgLTkxNCw3ICs5MTYsOCBAQAogIDxvOnNoYXBlbGF5b3V0IHY6ZXh0PSJlZGl0Ij4KICAgPG86aWRtYXAgdjpleHQ9ImVkaXQiIGRhdGE9IjEiLz4KICA8L286c2hhcGVsYXlvdXQ+PC94bWw+PCFbZW5kaWZdLS0+Ci0gIDxtZXRhIGNvbnRlbnQ9Ik1DRCBBcHBsaWNhdGlvbiBUZWFtIiBuYW1lPSJhdXRob3IiPjwvaGVhZD48Ym9keSBsaW5rPSJibHVlIiB2bGluaz0iYmx1ZSI+CisgIDxtZXRhIGNvbnRlbnQ9Ik1DRCBBcHBsaWNhdGlvbiBUZWFtIiBuYW1lPSJhdXRob3IiPjwvaGVhZD4KKzxib2R5IGxpbms9ImJsdWUiIHZsaW5rPSJibHVlIj4KIAogPGRpdiBjbGFzcz0iV29yZFNlY3Rpb24xIj4KIApAQCAtOTQ2LDIyICs5NDksNTMgQEAKICAgICA8dGQgc3R5bGU9InBhZGRpbmc6IDBpbjsiIHZhbGlnbj0idG9wIj4KICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0iTXNvTm9ybWFsVGFibGUiIHN0eWxlPSJ3aWR0aDogNjc1cHQ7IiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiB3aWR0aD0iOTAwIj4KIDx0Ym9keT48dHI+PHRkIHN0eWxlPSJwYWRkaW5nOiAwaW47IiB2YWxpZ249InRvcCI+Ci0gICAgICAgIDxoMiBzdHlsZT0iYmFja2dyb3VuZDogcmdiKDUxLCAxMDIsIDI1NSkgbm9uZSByZXBlYXQgc2Nyb2xsIDAlIDUwJTsgLW1vei1iYWNrZ3JvdW5kLWNsaXA6IC1tb3otaW5pdGlhbDsgLW1vei1iYWNrZ3JvdW5kLW9yaWdpbjogLW1vei1pbml0aWFsOyAtbW96LWJhY2tncm91bmQtaW5saW5lLXBvbGljeTogLW1vei1pbml0aWFsOyI+PGEgbmFtZT0iSGlzdG9yeSI+PC9hPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEycHQ7IGNvbG9yOiB3aGl0ZTsiPlVwZGF0ZSBIaXN0b3J5PC9zcGFuPjwvaDI+CisgICAgICAgIDxoMiBzdHlsZT0iYmFja2dyb3VuZDogcmdiKDUxLCAxMDIsIDI1NSkgbm9uZSByZXBlYXQgc2Nyb2xsIDAlIDUwJTsgLW1vei1iYWNrZ3JvdW5kLWNsaXA6IGluaXRpYWw7IC1tb3otYmFja2dyb3VuZC1vcmlnaW46IGluaXRpYWw7IC1tb3otYmFja2dyb3VuZC1pbmxpbmUtcG9saWN5OiBpbml0aWFsOyI+PGEgbmFtZT0iSGlzdG9yeSI+PC9hPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEycHQ7IGNvbG9yOiB3aGl0ZTsiPlVwZGF0ZSBIaXN0b3J5PC9zcGFuPjwvaDI+PGJyPgorICAgICAgICAgICAgICAgICAgPGgzIHN0eWxlPSJiYWNrZ3JvdW5kOiByZ2IoNTEsIDEwMiwgMjU1KSBub25lIHJlcGVhdCBzY3JvbGwgMCUgNTAlOyAtbW96LWJhY2tncm91bmQtY2xpcDogaW5pdGlhbDsgLW1vei1iYWNrZ3JvdW5kLW9yaWdpbjogaW5pdGlhbDsgLW1vei1iYWNrZ3JvdW5kLWlubGluZS1wb2xpY3k6IGluaXRpYWw7IG1hcmdpbi1yaWdodDogNTAwcHQ7IHdpZHRoOiAyNzRweDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBBcmlhbDsgY29sb3I6IHdoaXRlOyI+VjEuNy4xMSAvIDEyLUZlYnJ1YXJ5LTIwMjE8L3NwYW4+PC9oMz4KKworCisKICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICA8aDMgc3R5bGU9ImJhY2tncm91bmQ6IHJnYig1MSwgMTAyLCAyNTUpIG5vbmUgcmVwZWF0IHNjcm9sbCAwJSA1MCU7IC1tb3otYmFja2dyb3VuZC1jbGlwOiAtbW96LWluaXRpYWw7IC1tb3otYmFja2dyb3VuZC1vcmlnaW46IC1tb3otaW5pdGlhbDsgLW1vei1iYWNrZ3JvdW5kLWlubGluZS1wb2xpY3k6IC1tb3otaW5pdGlhbDsgbWFyZ2luLXJpZ2h0OiA1MDBwdDsgd2lkdGg6IDI3NHB4OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IEFyaWFsOyBjb2xvcjogd2hpdGU7Ij5WVjEuNy4xMCAvIDIyLU9jdG9iZXItMjAyMDwvc3Bhbj48L2gzPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luOiA0LjVwdCAwY20gNC41cHQgMThwdDsiPjxiIHN0eWxlPSIiPjx1PjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hOyBjb2xvcjogYmxhY2s7Ij5NYWluCitDaGFuZ2VzPC9zcGFuPjwvdT48L2I+PC9wPgorICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJmb250LWZhbWlseTogVmVyZGFuYTsgbGluZS1oZWlnaHQ6IDEuNDsgZm9udC1zaXplOiAxNHB4OyBjb2xvcjogcmdiKDE3LCAxNywgMTcpOyBmb250LXN0eWxlOiBub3JtYWw7IGZvbnQtd2VpZ2h0OiA0MDA7IGxldHRlci1zcGFjaW5nOiBub3JtYWw7IG9ycGhhbnM6IDI7IHRleHQtYWxpZ246IHN0YXJ0OyB0ZXh0LWluZGVudDogMHB4OyB0ZXh0LXRyYW5zZm9ybTogbm9uZTsgd2hpdGUtc3BhY2U6IG5vcm1hbDsgd2lkb3dzOiAyOyB3b3JkLXNwYWNpbmc6IDBweDsiPgorPGxpIHN0eWxlPSJsaW5lLWhlaWdodDogMS40OyI+R2VuZXJhbCB1cGRhdGVzIHRvIGZpeCBrbm93biBkZWZlY3RzIGFuZCBlbmhhbmNlbWVudHMgaW1wbGVtZW50YXRpb248L2xpPjxsaSBzdHlsZT0ibGluZS1oZWlnaHQ6IDEuNDsiPkFkZGVkIG5ldzxzcGFuPiZuYnNwOzwvc3Bhbj48c3Ryb25nIHN0eWxlPSJsaW5lLWhlaWdodDogMS40OyBmb250LXNpemU6IDFlbTsgZm9udC13ZWlnaHQ6IDcwMDsiPkhBTCBGTVBTTUJVUyBleHRlbmRlZDwvc3Ryb25nPjxzcGFuPiZuYnNwOzwvc3Bhbj5kcml2ZXIgdG8gc3VwcG9ydCBGTVBTTUJVUyBmYXN0IE1vZGUgUGx1cy48L2xpPjxsaSBzdHlsZT0ibGluZS1oZWlnaHQ6IDEuNDsiPlJlbW92ZWQgk3JlZ2lzdGVylCBrZXl3b3JkIHRvIGJlIGNvbXBsaWFudCB3aXRoIG5ldyBDKysgcnVsZXM6PHVsIHN0eWxlPSJsaW5lLWhlaWdodDogMS40OyI+PGxpIHN0eWxlPSJsaW5lLWhlaWdodDogMS40OyI+VGhlIHJlZ2lzdGVyIHN0b3JhZ2UgY2xhc3Mgc3BlY2lmaWVyIHdhcyBkZXByZWNhdGVkIGluIEMrKzExIGFuZCByZW1vdmVkIGluIEMrKzE3LjwvbGk+PC91bD48L2xpPjxsaSBzdHlsZT0ibGluZS1oZWlnaHQ6IDEuNDsiPjxzdHJvbmcgc3R5bGU9ImxpbmUtaGVpZ2h0OiAxLjQ7IGZvbnQtc2l6ZTogMWVtOyBmb250LXdlaWdodDogNzAwOyI+SEFMPC9zdHJvbmc+PHVsIHN0eWxlPSJsaW5lLWhlaWdodDogMS40OyI+PGxpIHN0eWxlPSJsaW5lLWhlaWdodDogMS40OyI+PHN0cm9uZyBzdHlsZT0ibGluZS1oZWlnaHQ6IDEuNDsgZm9udC1zaXplOiAxZW07IGZvbnQtd2VpZ2h0OiA3MDA7Ij5IQUw8L3N0cm9uZz48c3Bhbj4mbmJzcDs8L3NwYW4+dXBkYXRlPC9saT48bGkgc3R5bGU9ImxpbmUtaGVpZ2h0OiAxLjQ7Ij5HZW5lcmFsIHVwZGF0ZXMgdG8gZml4IGtub3duIGRlZmVjdHMgYW5kIGVuaGFuY2VtZW50cyBpbXBsZW1lbnRhdGlvbi48L2xpPjxsaSBzdHlsZT0ibGluZS1oZWlnaHQ6IDEuNDsiPkFkZGVkIG5ldyBkZWZpbmVzIGZvciBBUk0gY29tcGlsZXIgVjY6PHVsIHN0eWxlPSJsaW5lLWhlaWdodDogMS40OyI+PGxpIHN0eWxlPSJsaW5lLWhlaWdodDogMS40OyI+X193ZWFrPC9saT48bGkgc3R5bGU9ImxpbmUtaGVpZ2h0OiAxLjQ7Ij5fX3BhY2tlZDwvbGk+PGxpIHN0eWxlPSJsaW5lLWhlaWdodDogMS40OyI+X19OT0lOTElORTwvbGk+PC91bD48L2xpPjxsaSBzdHlsZT0ibGluZS1oZWlnaHQ6IDEuNDsiPlVwZGF0ZWQgSEFMIFRpbWVCYXNlIFRJTSwgUlRDIGFsYXJtIGFuZCBSVEMgV2FrZVVwIHRlbXBsYXRlcyBmb3IgbW9yZSByb2J1c3RuZXNzPHVsIHN0eWxlPSJsaW5lLWhlaWdodDogMS40OyI+PGxpIHN0eWxlPSJsaW5lLWhlaWdodDogMS40OyI+VXBkYXRlZCBIYWxfSW5pdF9UaWNrKCkgQVBJIHRvIHByb3BvZXJ0eSBzdG9yZSB0aGUgcHJpb3JpdHkgd2hlbiB1c2luZyB0aGUgbm9uLWRlZmF1bHQgdGltZSBiYXNlLjwvbGk+PC91bD48L2xpPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpIHN0eWxlPSJsaW5lLWhlaWdodDogMS40OyI+VXBkYXRlZCBQUFBfTU9EVUxFX0VOQUJMRUQgZm9yIEZNUFNNQlVTLjwvbGk+PC91bD48dWwgc3R5bGU9ImxpbmUtaGVpZ2h0OiAxLjQ7Ij4KKzxsaSBzdHlsZT0ibGluZS1oZWlnaHQ6IDEuNDsiPjxzdHJvbmcgc3R5bGU9ImxpbmUtaGVpZ2h0OiAxLjQ7IGZvbnQtc2l6ZTogMWVtOyBmb250LXdlaWdodDogNzAwOyI+SEFML0xMIEFEQzwvc3Ryb25nPjxzcGFuPiZuYnNwOzwvc3Bhbj51cGRhdGU8dWwgc3R5bGU9ImxpbmUtaGVpZ2h0OiAxLjQ7Ij48bGkgc3R5bGU9ImxpbmUtaGVpZ2h0OiAxLjQ7Ij5VcGRhdGVkIHRvIGFkZCBpbmNsdWRlIG9mIHRoZSBMTCBBREMgZHJpdmVyLjwvbGk+PGxpIHN0eWxlPSJsaW5lLWhlaWdodDogMS40OyI+VXBkYXRlZCB0aGUgZm9sbG93aW5nIEFQSXMgdG8gc2V0IHN0YXR1cyBIQUxfQURDX1NUQVRFX0VSUk9SX0lOVEVSTkFMIGFuZCBlcnJvciBjb2RlIEhBTF9BRENfRVJST1JfSU5URVJOQUwgd2hlbiBlcnJvciBvY2N1cnM6PHVsIHN0eWxlPSJsaW5lLWhlaWdodDogMS40OyI+PGxpIHN0eWxlPSJsaW5lLWhlaWdodDogMS40OyI+SEFMX0FEQ19TdGFydCgpPC9saT48bGkgc3R5bGU9ImxpbmUtaGVpZ2h0OiAxLjQ7Ij5IQUxfQURDX1N0YXJ0X0lUKCk8L2xpPjxsaSBzdHlsZT0ibGluZS1oZWlnaHQ6IDEuNDsiPkhBTF9BRENfU3RhcnRfRE1BKCk8L2xpPjxsaSBzdHlsZT0ibGluZS1oZWlnaHQ6IDEuNDsiPkhBTF9BRENFeF9JbmplY3RlZFN0YXJ0KCk8L2xpPjxsaSBzdHlsZT0ibGluZS1oZWlnaHQ6IDEuNDsiPkhBTF9BRENFeF9JbmplY3RlZFN0YXJ0X0lUKCk8L2xpPjxsaSBzdHlsZT0ibGluZS1oZWlnaHQ6IDEuNDsiPkhBTF9BRENFeF9NdWx0aU1vZGVTdGFydF9ETUEoKTwvbGk+PC91bD48L2xpPjxsaSBzdHlsZT0ibGluZS1oZWlnaHQ6IDEuNDsiPlVwZGF0ZWQgSEFMX0FEQ19TdG9wX0RNQSgpIEFQSSB0byBjaGVjayBpZiBETUEgc3RhdGUgaXMgQnVzeSBiZWZvcmUgY2FsbGluZyBIQUxfRE1BX0Fib3J0KCkgQVBJIHRvIGF2b2lkIERNQSBpbnRlcm5hbCBlcnJvci48L2xpPjxsaSBzdHlsZT0ibGluZS1oZWlnaHQ6IDEuNDsiPlVwZGF0ZWQgSVNfQURDX0NIQU5ORUwgdG8gc3VwcG9ydCB0ZW1wZXJhdHVyZSBzZW5zb3IgZm9yOjx1bCBzdHlsZT0ibGluZS1oZWlnaHQ6IDEuNDsiPjxsaSBzdHlsZT0ibGluZS1oZWlnaHQ6IDEuNDsiPlNUTTMyRjQxMXhFPC9saT48bGkgc3R5bGU9ImxpbmUtaGVpZ2h0OiAxLjQ7Ij5TVE0zMkY0MTN4eDwvbGk+PGxpIHN0eWxlPSJsaW5lLWhlaWdodDogMS40OyI+U1RNMzJGNDIzeHg8L2xpPjwvdWw+PC9saT48bGkgc3R5bGU9ImxpbmUtaGVpZ2h0OiAxLjQ7Ij5GaXhlZCB3cm9uZyBkZWZpbmVkIHZhbHVlcyBmb3I6PHVsIHN0eWxlPSJsaW5lLWhlaWdodDogMS40OyI+PGxpIHN0eWxlPSJsaW5lLWhlaWdodDogMS40OyI+TExfQURDX01VTFRJX1JFR19ETUFfTElNSVRfMzwvbGk+PGxpIHN0eWxlPSJsaW5lLWhlaWdodDogMS40OyI+TExfQURDX01VTFRJX1JFR19ETUFfVU5MTVRfMzwvbGk+PC91bD48L2xpPjxsaSBzdHlsZT0ibGluZS1oZWlnaHQ6IDEuNDsiPkFkZGVkIF9fTExfQURDX0NBTENfVlJFRkFOQUxPR19WT0xUQUdFKCkgbWFjcm8gdG8gZXZhbHVhdGUgYW5hbG9nIHJlZmVyZW5jZSB2b2x0YWdlLjwvbGk+PGxpIHN0eWxlPSJsaW5lLWhlaWdodDogMS40OyI+UmVtb3ZlZCBfX0xMX0FEQ19DQUxDX1RFTVBFUkFUVVJFKCkgbWFjcm8gZm9yIFNUTTMyRjR4OSBkZXZpY2VzIGFzIHRoZSBUU19DQUwyIGlzIG5vdCBhdmFpbGFibGUuPC9saT48L3VsPjwvbGk+PGxpIHN0eWxlPSJsaW5lLWhlaWdodDogMS40OyI+PHN0cm9uZyBzdHlsZT0ibGluZS1oZWlnaHQ6IDEuNDsgZm9udC1zaXplOiAxZW07IGZvbnQtd2VpZ2h0OiA3MDA7Ij5IQUwvTEwgREFDPC9zdHJvbmc+PHNwYW4+Jm5ic3A7PC9zcGFuPnVwZGF0ZTx1bCBzdHlsZT0ibGluZS1oZWlnaHQ6IDEuNDsiPjxsaSBzdHlsZT0ibGluZS1oZWlnaHQ6IDEuNDsiPkFkZGVkIHJlc3RydWN0aW9uIG9uIERBQyBDaGFubmVsIDIgZGVmaW5lcyBhbmQgcGFyYW1ldHJlcy48L2xpPjxsaSBzdHlsZT0ibGluZS1oZWlnaHQ6IDEuNDsiPkhBTF9EQUNfTVNQSU5JVF9DQl9JRCBhbmQgSEFMX0RBQ19NU1BERUlOSVRfQ0JfSUQgdXNlZCBpbnN0ZWFkIG9mIEhBTF9EQUNfTVNQX0lOSVRfQ0JfSUQgYW5kIEhBTF9EQUNfTVNQX0RFSU5JVF9DQl9JRC48L2xpPjxsaSBzdHlsZT0ibGluZS1oZWlnaHQ6IDEuNDsiPlVwZGF0ZWQgdG8gc3VwcG9ydCBkdWFsIG1vZGU6PHVsIHN0eWxlPSJsaW5lLWhlaWdodDogMS40OyI+PGxpIHN0eWxlPSJsaW5lLWhlaWdodDogMS40OyI+QWRkZWQgdHdvIG5ldyBBUElzOjx1bCBzdHlsZT0ibGluZS1oZWlnaHQ6IDEuNDsiPjxsaSBzdHlsZT0ibGluZS1oZWlnaHQ6IDEuNDsiPkhBTF9EQUNFeF9EdWFsU3RhcnQoKTwvbGk+PGxpIHN0eWxlPSJsaW5lLWhlaWdodDogMS40OyI+SEFMX0RBQ0V4X0R1YWxTdG9wKCk8L2xpPjwvdWw+PC9saT48L3VsPjwvbGk+PGxpIHN0eWxlPSJsaW5lLWhlaWdodDogMS40OyI+QWRkZWQgcG9zaXRpb24gYml0IGRlZmluaXRpb24gdG8gYmUgdXNlZCBpbnN0ZWFkIG9mIF9fREFDX01BU0tfU0hJRlQgbWFjcm88dWwgc3R5bGU9ImxpbmUtaGVpZ2h0OiAxLjQ7Ij48bGkgc3R5bGU9ImxpbmUtaGVpZ2h0OiAxLjQ7Ij5fX0RBQ19NQVNLX1NISUZUIG1hY3JvIGhhcyBiZWVuIHJlbW92ZWQuPC9saT48L3VsPjwvbGk+PGxpIHN0eWxlPSJsaW5lLWhlaWdodDogMS40OyI+VXBkYXRlZCBIQUxfREFDX1N0YXJ0X0RNQSgpIEFQSSB0byByZXR1cm4gSEFMX0VSUk9SIHdoZW4gZXJyb3Igb2NjdXJzLjwvbGk+PGxpIHN0eWxlPSJsaW5lLWhlaWdodDogMS40OyI+VXBkYXRlZCBIQUxfREFDX1N0b3BfRE1BKCkgQVBJIHRvIG5vdCByZXR1cm4gSEFMX0VSUk9SIHdoZW4gREFDIGlzIGFscmVhZHkgZGlzYWJsZWQuPC9saT48L3VsPjxzdHJvbmcgc3R5bGU9ImxpbmUtaGVpZ2h0OiAxLjQ7IGZvbnQtc2l6ZTogMWVtOyBmb250LXdlaWdodDogNzAwOyI+PC9zdHJvbmc+PC9saT48bGkgc3R5bGU9ImxpbmUtaGVpZ2h0OiAxLjQ7Ij48c3Ryb25nIHN0eWxlPSJsaW5lLWhlaWdodDogMS40OyBmb250LXNpemU6IDFlbTsgZm9udC13ZWlnaHQ6IDcwMDsiPkhBTCBDRUM8L3N0cm9uZz48c3Bhbj4gPC9zcGFuPnVwZGF0ZTwvbGk+PHVsPjxsaSBzdHlsZT0ibGluZS1oZWlnaHQ6IDEuNDsiPlVwZGF0ZWQgSEFMX0NFQ19JUlFIYW5kbGVyKCkgQVBJIHRvIGF2b2lkIGFwcGVuZGluZyBhbiBleHRyYSBieXRlIHRvIHRoZSBlbmQgb2YgYSBtZXNzYWdlLjwvbGk+PC91bD48L3VsPjx1bCBzdHlsZT0ibGluZS1oZWlnaHQ6IDEuNDsiPjxsaSBzdHlsZT0ibGluZS1oZWlnaHQ6IDEuNDsiPjxzdHJvbmcgc3R5bGU9ImxpbmUtaGVpZ2h0OiAxLjQ7IGZvbnQtc2l6ZTogMWVtOyBmb250LXdlaWdodDogNzAwOyI+SEFML0xMIEdQSU88L3N0cm9uZz48c3Bhbj4mbmJzcDs8L3NwYW4+dXBkYXRlPHVsIHN0eWxlPSJsaW5lLWhlaWdodDogMS40OyI+PGxpIHN0eWxlPSJsaW5lLWhlaWdodDogMS40OyI+VXBkYXRlZCBJU19HUElPX0FGKCkgdG8gYWRkIG1pc3NpbmcgdmFsdWVzIGZvciBTVE0zMkY0MDF4QyBhbmQgU1RNMzJGNDAxeEUgZGV2aWNlczo8dWwgc3R5bGU9ImxpbmUtaGVpZ2h0OiAxLjQ7Ij48bGkgc3R5bGU9ImxpbmUtaGVpZ2h0OiAxLjQ7Ij5HUElPX0FGM19USU05PC9saT48bGkgc3R5bGU9ImxpbmUtaGVpZ2h0OiAxLjQ7Ij5HUElPX0FGM19USU0xMDwvbGk+PGxpIHN0eWxlPSJsaW5lLWhlaWdodDogMS40OyI+R1BJT19BRjNfVElNMTE8L2xpPjwvdWw+PC9saT48bGkgc3R5bGU9ImxpbmUtaGVpZ2h0OiAxLjQ7Ij5VcGRhdGVkIExML0hBTCBHUElPX1RvZ2dsZVBpbigpIEFQSXMgdG8gYWxsb3cgbXVsdGkgUGluknMgdG9nZ2xpbmcuPC9saT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgc3R5bGU9ImxpbmUtaGVpZ2h0OiAxLjQ7Ij5VcGRhdGVkIEhBTF9HUElPX0luaXQoKSBBUEkgdG8gYXZvaWQgdGhlIGNvbmZpZ3VyYXRpb24gb2YgUFVQRFIgcmVnaXN0ZXIgd2hlbiBBbmFsb2cgbW9kZSBpcyBzZWxlY3RlZC48L2xpPgorPC91bD48L2xpPjxsaSBzdHlsZT0ibGluZS1oZWlnaHQ6IDEuNDsiPjxzdHJvbmcgc3R5bGU9ImxpbmUtaGVpZ2h0OiAxLjQ7IGZvbnQtc2l6ZTogMWVtOyBmb250LXdlaWdodDogNzAwOyI+SEFML0xMIFJDQzwvc3Ryb25nPjxzcGFuPiZuYnNwOzwvc3Bhbj51cGRhdGU8dWwgc3R5bGU9ImxpbmUtaGVpZ2h0OiAxLjQ7Ij48bGkgc3R5bGU9ImxpbmUtaGVpZ2h0OiAxLjQ7Ij5VcGRhdGVkCitIQUxfUkNDX09zY0NvbmZpZygpIEFQSSB0byBhZGQgbWlzc2luZyBjaGVja3MgYW5kIHRvIGRvbpJ0IHJldHVybgorSEFMX0VSUk9SIGlmIHJlcXVlc3QgcmVwZWF0cyB0aGUgY3VycmVudCBQTEwgY29uZmlndXJhdGlvbi48L2xpPjxsaSBzdHlsZT0ibGluZS1oZWlnaHQ6IDEuNDsiPlVwZGF0ZWQgSVNfUkNDX1BMTE5fVkFMVUUoVkFMVUUpIG1hY3JvIGluIGNhc2Ugb2YgU1RNMzJGNDExeEUgZGV2aWNlIGluIG9yZGVyIHRvIGJlIGFsaWduZWQgd2l0aCByZWZlcmVuY2UgbWFudWFsLjwvbGk+PC91bD48c3Ryb25nIHN0eWxlPSJsaW5lLWhlaWdodDogMS40OyBmb250LXNpemU6IDFlbTsgZm9udC13ZWlnaHQ6IDcwMDsiPjwvc3Ryb25nPjwvbGk+PGxpIHN0eWxlPSJsaW5lLWhlaWdodDogMS40OyI+PHN0cm9uZyBzdHlsZT0ibGluZS1oZWlnaHQ6IDEuNDsgZm9udC1zaXplOiAxZW07IGZvbnQtd2VpZ2h0OiA3MDA7Ij5IQUwgU0Q8L3N0cm9uZz48c3Bhbj4gPC9zcGFuPnVwZGF0ZTwvbGk+PHVsPjxsaSBzdHlsZT0ibGluZS1oZWlnaHQ6IDEuNDsiPlVwZGF0ZSBmdW5jdGlvbiBTRF9GaW5kU0NSKCkgdG8gcmVzb2x2ZSBpc3N1ZSBvZiBGSUZPIGJsb2NraW5nIHdoZW4gcmVhZGluZy48L2xpPjxsaSBzdHlsZT0ibGluZS1oZWlnaHQ6IDEuNDsiPlVwZGF0ZSByZWFkL3dyaXRlIGZ1bmN0aW9ucyBpbiBETUEgbW9kZSBpbiBvcmRlciB0byBmb3JjZSB0aGUgRE1BIGRpcmVjdGlvbiwgdXBkYXRlZCBmdW5jdGlvbnM6PC9saT48dWw+PGxpIHN0eWxlPSJsaW5lLWhlaWdodDogMS40OyI+SEFMX1NEX1JlYWRCbG9ja3NfRE1BKCk8L2xpPjwvdWw+PHVsPjxsaSBzdHlsZT0ibGluZS1oZWlnaHQ6IDEuNDsiPkhBTF9TRF9Xcml0ZUJsb2Nrc19ETUEoKTwvbGk+PC91bD48bGkgc3R5bGU9ImxpbmUtaGVpZ2h0OiAxLjQ7Ij5BZGQKK3RoZSBibG9jayBzaXplIHNldHRpbmdzIGluIHRoZSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbnMgYW5kIHJlbW92ZSBpdAorZnJvbSByZWFkL3dyaXRlIHRyYW5zYWN0aW9ucyB0byBhdm9pZCByZXBlYXRlZCBhbmQgaW5lZmZpY2llbnQKK3JlY29uZmlndXJhdGlvbiwgdXBkYXRlZCBmdW5jdGlvbnM6PC9saT48dWw+PGxpIHN0eWxlPSJsaW5lLWhlaWdodDogMS40OyI+SEFMX1NEX0luaXRDYXJkKCk8L2xpPjwvdWw+PHVsPjxsaSBzdHlsZT0ibGluZS1oZWlnaHQ6IDEuNDsiPkhBTF9TRF9HZXRDYXJkU3RhdHVzKCk8L2xpPjwvdWw+PHVsPjxsaSBzdHlsZT0ibGluZS1oZWlnaHQ6IDEuNDsiPkhBTF9TRF9Db25maWdXaWRlQnVzT3BlcmF0aW9uKCkmbmJzcDs8L2xpPjwvdWw+PHVsPjxsaSBzdHlsZT0ibGluZS1oZWlnaHQ6IDEuNDsiPkhBTF9TRF9SZWFkQmxvY2tzKCk8L2xpPjwvdWw+PHVsPjxsaSBzdHlsZT0ibGluZS1oZWlnaHQ6IDEuNDsiPkhBTF9TRF9Xcml0ZUJsb2NrcygpPC9saT48L3VsPjx1bD48bGkgc3R5bGU9ImxpbmUtaGVpZ2h0OiAxLjQ7Ij5IQUxfU0RfUmVhZEJsb2Nrc19JVCgpPC9saT48L3VsPjx1bD48bGkgc3R5bGU9ImxpbmUtaGVpZ2h0OiAxLjQ7Ij5IQUxfU0RfV3JpdGVCbG9ja3NfSVQoKTwvbGk+PC91bD48dWw+PGxpIHN0eWxlPSJsaW5lLWhlaWdodDogMS40OyI+SEFMX1NEX1JlYWRCbG9ja3NfRE1BKCk8L2xpPjwvdWw+PHVsPjxsaSBzdHlsZT0ibGluZS1oZWlnaHQ6IDEuNDsiPkhBTF9TRF9Xcml0ZUJsb2Nrc19ETUEoKTwvbGk+PC91bD48L3VsPjwvdWw+PHVsIHN0eWxlPSJsaW5lLWhlaWdodDogMS40OyI+PGxpIHN0eWxlPSJsaW5lLWhlaWdodDogMS40OyI+PHN0cm9uZyBzdHlsZT0ibGluZS1oZWlnaHQ6IDEuNDsgZm9udC1zaXplOiAxZW07IGZvbnQtd2VpZ2h0OiA3MDA7Ij5IQUwmbmJzcDtNTUM8L3N0cm9uZz48c3Bhbj4gPC9zcGFuPnVwZGF0ZTwvbGk+PHVsPjxsaSBzdHlsZT0ibGluZS1oZWlnaHQ6IDEuNDsiPkFkZAordGhlIGJsb2NrIHNpemUgc2V0dGluZ3MgaW4gdGhlIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGFuZCByZW1vdmUgaXQKK2Zyb20gcmVhZC93cml0ZSB0cmFuc2FjdGlvbnMgdG8gYXZvaWQgcmVwZWF0ZWQgYW5kIGluZWZmaWNpZW50CityZWNvbmZpZ3VyYXRpb24sIHVwZGF0ZWQgZnVuY3Rpb25zOjwvbGk+PHVsPjxsaSBzdHlsZT0ibGluZS1oZWlnaHQ6IDEuNDsiPkhBTF9NTUNfSW5pdENhcmQoKTwvbGk+PC91bD48dWw+PGxpIHN0eWxlPSJsaW5lLWhlaWdodDogMS40OyI+SEFMX01NQ19SZWFkQmxvY2tzKCk8L2xpPjwvdWw+PHVsPjxsaSBzdHlsZT0ibGluZS1oZWlnaHQ6IDEuNDsiPkhBTF9NTUNfV3JpdGVCbG9ja3MoKTwvbGk+PC91bD48dWw+PGxpIHN0eWxlPSJsaW5lLWhlaWdodDogMS40OyI+SEFMX01NQ19SZWFkQmxvY2tzX0lUKCk8L2xpPjwvdWw+PHVsPjxsaSBzdHlsZT0ibGluZS1oZWlnaHQ6IDEuNDsiPkhBTF9NTUNfV3JpdGVCbG9ja3NfSVQoKTwvbGk+PC91bD48dWw+PGxpIHN0eWxlPSJsaW5lLWhlaWdodDogMS40OyI+SEFMX01NQ19SZWFkQmxvY2tzX0RNQSgpPC9saT48L3VsPjx1bD48bGkgc3R5bGU9ImxpbmUtaGVpZ2h0OiAxLjQ7Ij5IQUxfTU1DX1dyaXRlQmxvY2tzX0RNQSgpPC9saT48L3VsPjxsaSBzdHlsZT0ibGluZS1oZWlnaHQ6IDEuNDsiPlVwZGF0ZSByZWFkL3dyaXRlIGZ1bmN0aW9ucyBpbiBETUEgbW9kZSBpbiBvcmRlciB0byBmb3JjZSB0aGUgRE1BIGRpcmVjdGlvbiwgdXBkYXRlZCBmdW5jdGlvbnM6PC9saT48dWw+PGxpIHN0eWxlPSJsaW5lLWhlaWdodDogMS40OyI+SEFMX01NQ19SZWFkQmxvY2tzX0RNQSgpPC9saT48L3VsPjx1bD48bGkgc3R5bGU9ImxpbmUtaGVpZ2h0OiAxLjQ7Ij5IQUxfTU1DX1dyaXRlQmxvY2tzX0RNQSgpPC9saT48L3VsPjxsaSBzdHlsZT0ibGluZS1oZWlnaHQ6IDEuNDsiPkRlcGxveQorbmV3IGZ1bmN0aW9ucyBNTUNfUmVhZEV4dENTRCgpIGFuZCBTRE1NQ19DbWRTZW5kRVhUQ1NEICgpIHRoYXQgcmVhZCBhbmQKK2NoZWNrIHRoZSBzZWN0b3JzJm5ic3A7bnVtYmVyIG9mIHRoZSBkZXZpY2UgaW4gb3JkZXIgdG8gcmVzb2x2ZSB0aGUKK2lzc3VlIG9mIHdyb25nbHkgcmVhZGluZyBiaWcgbWVtb3J5IHNpemUuPC9saT48L3VsPjxsaSBzdHlsZT0ibGluZS1oZWlnaHQ6IDEuNDsgZm9udC13ZWlnaHQ6IGJvbGQ7Ij5IQUwgTkFORCB1cGRhdGU8L2xpPjx1bD48bGkgc3R5bGU9ImxpbmUtaGVpZ2h0OiAxLjQ7Ij5VcGRhdGUgZnVuY3Rpb25zIEhBTF9OQU5EX1JlYWRfU3BhcmVBcmVhXzE2YigpIGFuZCBIQUxfTkFORF9Xcml0ZV9TcGFyZUFyZWFfMTZiKCkgdG8gZml4IGNvbHVtbiBhZGRyZXNzIGNhbGN1bGF0aW9uIGlzc3VlLjwvbGk+PC91bD48L3VsPjx1bCBzdHlsZT0ibGluZS1oZWlnaHQ6IDEuNDsiPjxsaSBzdHlsZT0ibGluZS1oZWlnaHQ6IDEuNDsiPjxzdHJvbmcgc3R5bGU9ImxpbmUtaGVpZ2h0OiAxLjQ7IGZvbnQtc2l6ZTogMWVtOyBmb250LXdlaWdodDogNzAwOyI+TEwgU0RNTUMgdXBkYXRlPC9zdHJvbmc+PC9saT48dWw+PGxpIHN0eWxlPSJsaW5lLWhlaWdodDogMS40OyI+VXBkYXRlIHRoZSBkZWZpbml0aW9uIG9mIFNETU1DX0RBVEFUSU1FT1VUIGNvbnN0YW50IGluIG9yZGVyIHRvIGFsbG93IHRoZSB1c2VyIHRvIHJlZGVmaW5lIGl0IGluIGhpcyBwcm9wZXIgYXBwbGljYXRpb24uPC9saT48bGkgc3R5bGU9ImxpbmUtaGVpZ2h0OiAxLjQ7Ij5SZW1vdmUgJ3JlZ2lzdGVyJyBzdG9yYWdlIGNsYXNzIHNwZWNpZmllciBmcm9tIExMIFNETU1DIGRyaXZlci48L2xpPjxsaSBzdHlsZT0ibGluZS1oZWlnaHQ6IDEuNDsiPkRlcGxveQorbmV3IGZ1bmN0aW9ucyBNTUNfUmVhZEV4dENTRCgpIGFuZCBTRE1NQ19DbWRTZW5kRVhUQ1NEICgpIHRoYXQgcmVhZCBhbmQKK2NoZWNrIHRoZSBzZWN0b3JzIG51bWJlciBvZiB0aGUgZGV2aWNlIGluIG9yZGVyIHRvIHJlc29sdmUgdGhlIGlzc3VlIG9mCit3cm9uZ2x5IHJlYWRpbmcgYmlnIG1lbW9yeSBzaXplLjwvbGk+PC91bD48L3VsPjx1bCBzdHlsZT0ibGluZS1oZWlnaHQ6IDEuNDsiPjxsaSBzdHlsZT0ibGluZS1oZWlnaHQ6IDEuNDsiPjxzdHJvbmcgc3R5bGU9ImxpbmUtaGVpZ2h0OiAxLjQ7IGZvbnQtc2l6ZTogMWVtOyBmb250LXdlaWdodDogNzAwOyI+SEFMIFNNQlVTPC9zdHJvbmc+PHNwYW4+Jm5ic3A7PC9zcGFuPnVwZGF0ZTx1bCBzdHlsZT0ibGluZS1oZWlnaHQ6IDEuNDsiPjxsaSBzdHlsZT0ibGluZS1oZWlnaHQ6IDEuNDsiPlN1cHBvcnQgZm9yIEZhc3QgTW9kZSBQbHVzIHRvIGJlIFNNQlVTIHJldiAzIGNvbXBsaWFudC48L2xpPjxsaSBzdHlsZT0ibGluZS1oZWlnaHQ6IDEuNDsiPkFkZGVkIEhBTF9GTVBTTUJVU0V4X0VuYWJsZUZhc3RNb2RlUGx1cygpIGFuZCBIQUxfRk1QU01CVVNFeF9EaXNhYmxlRmFzdE1vZGVQbHVzKCkgQVBJcyB0byBtYW5hZ2UgRm0rLjwvbGk+PGxpIHN0eWxlPSJsaW5lLWhlaWdodDogMS40OyI+VXBkYXRlZAorU01CVVNfTWFzdGVyVHJhbnNtaXRfQlRGKCkgLCBTTUJVU19NYXN0ZXJUcmFuc21pdF9UWEUoKSBhbmQKK1NNQlVTX01hc3RlclJlY2VpdmVfQlRGKCkgQVBJcyB0byZuYnNwO2FsbG93IHN0b3AgZ2VuZXJhdGlvbiB3aGVuCitDdXJyZW50WGZlck9wdGlvbnMgaXMgZGlmZmVyZW50IGZyb20gU01CVVNfRklSU1RfRlJBTUUgYW5kCitTTUJVU19ORVhUX0ZSQU1FLjwvbGk+PGxpIHN0eWxlPSJsaW5lLWhlaWdodDogMS40OyI+VXBkYXRlZCBTTUJVU19JVEVycm9yKCkgQVBJIHRvIGNvcnJlY3QgdGhlIHR3aWNlIGNhbGwgb2YgSEFMX1NNQlVTX0Vycm9yQ2FsbGJhY2suPC9saT48L3VsPjwvbGk+PGxpIHN0eWxlPSJsaW5lLWhlaWdodDogMS40OyI+PHN0cm9uZyBzdHlsZT0ibGluZS1oZWlnaHQ6IDEuNDsgZm9udC1zaXplOiAxZW07IGZvbnQtd2VpZ2h0OiA3MDA7Ij5IQUwgU1BJPC9zdHJvbmc+PHNwYW4+Jm5ic3A7PC9zcGFuPnVwZGF0ZTwvbGk+PHVsPjxsaSBzdHlsZT0ibGluZS1oZWlnaHQ6IDEuNDsiPlVwZGF0ZWQgSEFMX1NQSV9Jbml0KCkgQVBJPHVsIHN0eWxlPSJsaW5lLWhlaWdodDogMS40OyI+PGxpIHN0eWxlPSJsaW5lLWhlaWdodDogMS40OyI+VG8gYXZvaWQgc2V0dGluZyB0aGUgQmF1ZFJhdGVQcmVzY2FsZXIgaW4gY2FzZSBvZiBTbGF2ZSBNb3Rvcm9sYSBNb2RlLjwvbGk+PGxpIHN0eWxlPSJsaW5lLWhlaWdodDogMS40OyI+VXNlIHRoZSBiaXQtbWFzayBmb3IgU1BJIGNvbmZpZ3VyYXRpb24uPC9saT48L3VsPjwvbGk+PC91bD48dWw+PGxpIHN0eWxlPSJsaW5lLWhlaWdodDogMS40OyI+VXBkYXRlZCBUcmFuc21pdC9SZWNlaXZlIHByb2Nlc3NlcyBpbiBoYWxmLWR1cGxleCBtb2RlPHVsIHN0eWxlPSJsaW5lLWhlaWdodDogMS40OyI+PGxpIHN0eWxlPSJsaW5lLWhlaWdodDogMS40OyI+RGlzYWJsZSB0aGUgU1BJIGluc3RhbmNlIGJlZm9yZSBzZXR0aW5nIEJESU9FIGJpdC48L2xpPjwvdWw+PC9saT48L3VsPjx1bD48bGkgc3R5bGU9ImxpbmUtaGVpZ2h0OiAxLjQ7Ij5GaXhlZCB3cm9uZyB0aW1lb3V0IG1hbmFnZW1lbnQ8L2xpPjwvdWw+PHVsPjxsaSBzdHlsZT0ibGluZS1oZWlnaHQ6IDEuNDsiPkNhbGN1bGF0ZSBUaW1lb3V0IGJhc2VkIG9uIGEgc29mdHdhcmUgbG9vcCB0byBhdm9pZCBibG9ja2luZyBpc3N1ZSBpZiBTeXN0aWNrIGlzIGRpc2FibGVkLjwvbGk+PC91bD48L3VsPjx1bCBzdHlsZT0ibGluZS1oZWlnaHQ6IDEuNDsiPjxsaSBzdHlsZT0ibGluZS1oZWlnaHQ6IDEuNDsiPjxzdHJvbmcgc3R5bGU9ImxpbmUtaGVpZ2h0OiAxLjQ7IGZvbnQtc2l6ZTogMWVtOyBmb250LXdlaWdodDogNzAwOyI+SEFMIFNQRElGUlgmbmJzcDs8L3N0cm9uZz48c3Bhbj48L3NwYW4+dXBkYXRlPC9saT48dWw+PGxpIHN0eWxlPSJsaW5lLWhlaWdodDogMS40OyI+UmVtb3ZlICdyZWdpc3Rlcicgc3RvcmFnZSBjbGFzcyBzcGVjaWZpZXIgZnJvbSBIQUwgU1BESUZSWCBkcml2ZXIuPC9saT48L3VsPjwvdWw+PHVsIHN0eWxlPSJsaW5lLWhlaWdodDogMS40OyI+PGxpIHN0eWxlPSJsaW5lLWhlaWdodDogMS40OyI+PHN0cm9uZyBzdHlsZT0ibGluZS1oZWlnaHQ6IDEuNDsgZm9udC1zaXplOiAxZW07IGZvbnQtd2VpZ2h0OiA3MDA7Ij5IQUwgSTJTPC9zdHJvbmc+PHNwYW4+Jm5ic3A7PC9zcGFuPnVwZGF0ZTx1bCBzdHlsZT0ibGluZS1oZWlnaHQ6IDEuNDsiPjxsaSBzdHlsZT0ibGluZS1oZWlnaHQ6IDEuNDsiPlVwZGF0ZWQgSTJTRXggQVBJcyB0byBjb3JyZWN0bHkgc3VwcG9ydCBjaXJjdWxhciB0cmFuc2ZlcnM8dWwgc3R5bGU9ImxpbmUtaGVpZ2h0OiAxLjQ7Ij48bGkgc3R5bGU9ImxpbmUtaGVpZ2h0OiAxLjQ7Ij5VcGRhdGVkIEkyU0V4X1R4UnhETUFDcGx0KCkgQVBJIHRvIG1hbmFnZSBETUEgY2lyY3VsYXIgbW9kZS48L2xpPjwvdWw+PC9saT48bGkgc3R5bGU9ImxpbmUtaGVpZ2h0OiAxLjQ7Ij5VcGRhdGVkIEhBTF9JMlNFeF9UcmFuc21pdFJlY2VpdmVfRE1BKCkgQVBJIHRvIHNldCBoZG1hdHggKHRyYW5zZmVydCBjYWxsYmFjayBhbmQgaGFsZikgdG8gTlVMTC48L2xpPjwvdWw+PC9saT48bGkgc3R5bGU9ImxpbmUtaGVpZ2h0OiAxLjQ7Ij48c3Ryb25nIHN0eWxlPSJsaW5lLWhlaWdodDogMS40OyBmb250LXNpemU6IDFlbTsgZm9udC13ZWlnaHQ6IDcwMDsiPkhBTCBTQUk8L3N0cm9uZz48c3Bhbj4mbmJzcDs8L3NwYW4+dXBkYXRlPHVsIHN0eWxlPSJsaW5lLWhlaWdodDogMS40OyI+PGxpIHN0eWxlPSJsaW5lLWhlaWdodDogMS40OyI+VXBkYXRlZCB0byBhdm9pZCB0aGUgaW5jb3JyZWN0IGxlZnQvcmlnaHQgc3luY2hyb25pemF0aW9uLjx1bCBzdHlsZT0ibGluZS1oZWlnaHQ6IDEuNDsiPjxsaSBzdHlsZT0ibGluZS1oZWlnaHQ6IDEuNDsiPlVwZGF0ZWQgSEFMX1NBSV9UcmFuc21pdF9ETUEoKSBBUEkgdG8gZm9sbG93IHRoZSBzZXF1ZW5jZSBkZXNjcmliZWQgaW4gdGhlIHJlZmVyZW5jZSBtYW51YWwgZm9yIHNsYXZlIHRyYW5zbWl0dGVyIG1vZGUuPC9saT48L3VsPjwvbGk+PGxpIHN0eWxlPSJsaW5lLWhlaWdodDogMS40OyI+VXBkYXRlZCBIQUxfU0FJX0luaXQoKSBBUEkgdG8gY29ycmVjdCB0aGUgZm9ybXVsYSBpbiBjYXNlIG9mIFNQRElGIGlzIHdyb25nLjwvbGk+PC91bD48L2xpPjxsaSBzdHlsZT0ibGluZS1oZWlnaHQ6IDEuNDsiPjxzdHJvbmcgc3R5bGU9ImxpbmUtaGVpZ2h0OiAxLjQ7IGZvbnQtc2l6ZTogMWVtOyBmb250LXdlaWdodDogNzAwOyI+SEFMIENSWVA8L3N0cm9uZz48c3Bhbj4mbmJzcDs8L3NwYW4+dXBkYXRlPHVsIHN0eWxlPSJsaW5lLWhlaWdodDogMS40OyI+PGxpIHN0eWxlPSJsaW5lLWhlaWdodDogMS40OyI+VXBkYXRlZCBIQUxfQ1JZUF9TZXRDb25maWcoKSBhbmQgSEFMX0NSWVBfR2V0Q29uZmlnKCkgQVBJcyB0byBzZXQvZ2V0IHRoZSBjb250aW5lbnQgb2YgS2V5SVZDb25maWdTa2lwIGNvcnJlY3RseS48L2xpPjwvdWw+PC9saT48bGkgc3R5bGU9ImxpbmUtaGVpZ2h0OiAxLjQ7Ij48c3Ryb25nIHN0eWxlPSJsaW5lLWhlaWdodDogMS40OyBmb250LXNpemU6IDFlbTsgZm9udC13ZWlnaHQ6IDcwMDsiPkhBTCBFWFRJPC9zdHJvbmc+PHNwYW4+Jm5ic3A7PC9zcGFuPnVwZGF0ZTx1bCBzdHlsZT0ibGluZS1oZWlnaHQ6IDEuNDsiPjxsaSBzdHlsZT0ibGluZS1oZWlnaHQ6IDEuNDsiPl9fRVhUSV9MSU5FX18gaXMgbm93IHVzZWQgaW5zdGVhZCBvZiBfX0xJTkVfXzxzcGFuPjwvc3Bhbj48c3Ryb25nIHN0eWxlPSJsaW5lLWhlaWdodDogMS40OyBmb250LXNpemU6IDFlbTsgZm9udC13ZWlnaHQ6IDcwMDsiPjwvc3Ryb25nPjxzcGFuPiA8L3NwYW4+d2hpY2ggaXMgYSBzdGFuZGFyZCBDIG1hY3JvLjwvbGk+PC91bD48L2xpPjxsaSBzdHlsZT0ibGluZS1oZWlnaHQ6IDEuNDsiPjxzdHJvbmcgc3R5bGU9ImxpbmUtaGVpZ2h0OiAxLjQ7IGZvbnQtc2l6ZTogMWVtOyBmb250LXdlaWdodDogNzAwOyI+SEFMIERDTUk8L3N0cm9uZz48dWwgc3R5bGU9ImxpbmUtaGVpZ2h0OiAxLjQ7Ij48bGkgc3R5bGU9ImxpbmUtaGVpZ2h0OiAxLjQ7Ij5TdXBwb3J0IG9mIEhBTCBjYWxsYmFjayByZWdpc3RyYXRpb24gZmVhdHVyZSBmb3IgRENNSSBleHRlbmRlZCBkcml2ZXIuPC9saT48L3VsPjwvbGk+PGxpIHN0eWxlPSJsaW5lLWhlaWdodDogMS40OyI+PHN0cm9uZyBzdHlsZT0ibGluZS1oZWlnaHQ6IDEuNDsgZm9udC1zaXplOiAxZW07IGZvbnQtd2VpZ2h0OiA3MDA7Ij5IQUwvTEwgVElNPC9zdHJvbmc+PHNwYW4+Jm5ic3A7PC9zcGFuPnVwZGF0ZTx1bCBzdHlsZT0ibGluZS1oZWlnaHQ6IDEuNDsiPjxsaSBzdHlsZT0ibGluZS1oZWlnaHQ6IDEuNDsiPlVwZGF0ZWQKK0hBTF9USU1FeF9PbmVQdWxzZU5fU3RhcnQoKSBhbmQgSEFMX1RJTUV4X09uZVB1bHNlTl9TdG9wKCkgQVBJcworKHBvb2xpbmcgYW5kIElUIG1vZGUpIHRvIHRha2UgaW50byBjb25zaWRlcmF0aW9uIGFsbCBPdXRwdXRDaGFubmVsCitwYXJhbWV0ZXJzLjwvbGk+PGxpIHN0eWxlPSJsaW5lLWhlaWdodDogMS40OyI+Q29ycmVjdGVkIHJldmVyc2VkIGRlc2NyaXB0aW9uIG9mIFRJTV9MTF9FQ19PTkVQVUxTRU1PREUgT25lIFB1bHNlIE1vZGUuPC9saT48bGkgc3R5bGU9ImxpbmUtaGVpZ2h0OiAxLjQ7Ij5VcGRhdGVkIExMX1RJTV9HZXRDb3VudGVyTW9kZSgpIEFQSSB0byByZXR1cm4gdGhlIGNvcnJlY3QgY291bnRlciBtb2RlLjwvbGk+PC91bD48L2xpPjxsaSBzdHlsZT0ibGluZS1oZWlnaHQ6IDEuNDsiPjxzdHJvbmcgc3R5bGU9ImxpbmUtaGVpZ2h0OiAxLjQ7IGZvbnQtc2l6ZTogMWVtOyBmb250LXdlaWdodDogNzAwOyI+SEFML0xMIFNNQVJUQ0FSRDwvc3Ryb25nPjxzcGFuPiZuYnNwOzwvc3Bhbj51cGRhdGU8dWwgc3R5bGU9ImxpbmUtaGVpZ2h0OiAxLjQ7Ij48bGkgc3R5bGU9ImxpbmUtaGVpZ2h0OiAxLjQ7Ij5GaXhlZAoraW52YWxpZCBpbml0aWFsaXphdGlvbiBvZiBTTUFSVENBUkQgY29uZmlndXJhdGlvbiBieSByZW1vdmluZyBGSUZPIG1vZGUKK2NvbmZpZ3VyYXRpb24gYXMgaXQgaXMgbm90IG1lbWJlciBvZiBTTUFSVENBUkRfSW5pdFR5cGVEZWYgU3RydWN0dXJlLjwvbGk+PGxpIHN0eWxlPSJsaW5lLWhlaWdodDogMS40OyI+Rml4ZWQgdHlwb3MgaW4gU01BUlRDQVJEIFN0YXRlIGRlZmluaXRpb24gZGVzY3JpcHRpb248L2xpPjwvdWw+PC9saT48bGkgc3R5bGU9ImxpbmUtaGVpZ2h0OiAxLjQ7Ij48c3Ryb25nIHN0eWxlPSJsaW5lLWhlaWdodDogMS40OyBmb250LXNpemU6IDFlbTsgZm9udC13ZWlnaHQ6IDcwMDsiPkhBTC9MTCBJUkRBPC9zdHJvbmc+PHNwYW4+Jm5ic3A7PC9zcGFuPnVwZGF0ZTwvbGk+PHVsPjxsaSBzdHlsZT0ibGluZS1oZWlnaHQ6IDEuNDsiPkZpeGVkIHR5cG9zIGluIElSREEgU3RhdGUgZGVmaW5pdGlvbiBkZXNjcmlwdGlvbjwvbGk+PC91bD48L3VsPjx1bCBzdHlsZT0ibGluZS1oZWlnaHQ6IDEuNDsiPjxsaSBzdHlsZT0ibGluZS1oZWlnaHQ6IDEuNDsiPjxzdHJvbmcgc3R5bGU9ImxpbmUtaGVpZ2h0OiAxLjQ7IGZvbnQtc2l6ZTogMWVtOyBmb250LXdlaWdodDogNzAwOyI+TEwgVVNBUlQ8L3N0cm9uZz48c3Bhbj4mbmJzcDs8L3NwYW4+dXBkYXRlPC9saT48dWw+PGxpIHN0eWxlPSJsaW5lLWhlaWdodDogMS40OyI+UmVtb3ZlIHVzZWxlc3MgY2hlY2sgb24gbWF4aW11bSBCUlIgdmFsdWUgYnkgcmVtb3ZpbmcgSVNfTExfVVNBUlRfQlJSX01BWCgpIG1hY3JvLjwvbGk+PGxpIHN0eWxlPSJsaW5lLWhlaWdodDogMS40OyI+VXBkYXRlIFVTQVJUIHBvbGxpbmcgYW5kIGludGVycnVwdGlvbiBwcm9jZXNzZXMgdG8gZml4IGlzc3VlcyByZWxhdGVkIHRvIGFjY2Vzc2VzIG91dCBvZiB1c2VyIHNwZWNpZmllZCBidWZmZXIuPC9saT48L3VsPjwvdWw+PHVsIHN0eWxlPSJsaW5lLWhlaWdodDogMS40OyI+PGxpIHN0eWxlPSJsaW5lLWhlaWdodDogMS40OyI+PHN0cm9uZyBzdHlsZT0ibGluZS1oZWlnaHQ6IDEuNDsgZm9udC1zaXplOiAxZW07IGZvbnQtd2VpZ2h0OiA3MDA7Ij5IQUwgVVNCPC9zdHJvbmc+PHNwYW4+Jm5ic3A7PC9zcGFuPnVwZGF0ZTx1bCBzdHlsZT0ibGluZS1oZWlnaHQ6IDEuNDsiPjxsaSBzdHlsZT0ibGluZS1oZWlnaHQ6IDEuNDsiPkVuaGFuY2VkIFVTQiBPVEcgaG9zdCBIQUwgd2l0aCBVU0IgRE1BIGlzIGVuYWJsZWQ6PHVsIHN0eWxlPSJsaW5lLWhlaWdodDogMS40OyI+PGxpIHN0eWxlPSJsaW5lLWhlaWdodDogMS40OyI+Zml4ZWQgcGluZyBhbmQgZGF0YSB0b2dnbGUgaXNzdWUsPC9saT48bGkgc3R5bGU9ImxpbmUtaGVpZ2h0OiAxLjQ7Ij5yZXdvcmtlZCBDaGFubmVsIGVycm9yIHJlcG9ydCBtYW5hZ2VtZW50PC9saT48L3VsPjwvbGk+PC91bD48L2xpPjwvdWw+PC9saT4KKyAgICAgICAgICAgICAgICAgIDwvdWw+CisgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYTsiIGxhbmc9IkVOLVVTIj48c3BhbiBzdHlsZT0iIj48L3NwYW4+PC9zcGFuPjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW46IDQuNXB0IDBjbSA0LjVwdCAxOHB0OyBmb250LWZhbWlseTogVmVyZGFuYTsiPjwvcD48aDMgc3R5bGU9ImJhY2tncm91bmQ6IHJnYig1MSwgMTAyLCAyNTUpIG5vbmUgcmVwZWF0IHNjcm9sbCAwJSA1MCU7IC1tb3otYmFja2dyb3VuZC1jbGlwOiBpbml0aWFsOyAtbW96LWJhY2tncm91bmQtb3JpZ2luOiBpbml0aWFsOyAtbW96LWJhY2tncm91bmQtaW5saW5lLXBvbGljeTogaW5pdGlhbDsgbWFyZ2luLXJpZ2h0OiA1MDBwdDsgd2lkdGg6IDI3NHB4OyBmb250LWZhbWlseTogVmVyZGFuYTsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGNvbG9yOiB3aGl0ZTsiPlYxLjcuMTAgLyAyMi1PY3RvYmVyLTIwMjA8L3NwYW4+PC9oMz4KIAogCiAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbjogNC41cHQgMGNtIDQuNXB0IDE4cHQ7Ij48YiBzdHlsZT0iIj48dT48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYTsgY29sb3I6IGJsYWNrOyI+TWFpbgotQ2hhbmdlczwvc3Bhbj48L3U+PC9iPjwvcD4KLQotCi0gICAgICAgICAgICAKLSAgICAgICAgICAgIAotCi0gICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPjwvc3Bhbj4KK0NoYW5nZXM8L3NwYW4+PC91PjwvYj48L3A+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiIGxhbmc9IkVOLVVTIj48L3NwYW4+CiAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgIDx1bCBzdHlsZT0ibWFyZ2luLXRvcDogMGNtOyIgdHlwZT0iZGlzYyI+CiA8bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiIGxhbmc9IkVOLVVTIj5HZW5lcmFsIHVwZGF0ZXMgdG8gZml4IGtub3duIGRlZmVjdHMuPC9zcGFuPjwvbGk+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7Ij5IQUwvTEwgSTJDIDwvc3Bhbj48L2I+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiPnVwZGF0ZTwvc3Bhbj48L2xpPgpAQCAtOTc3LDcgKzEwMTEsNyBAQAogb3BlcmF0aW9uIGZhaWxlZDogZml4IHR5cG8gk2hkbWFyeJQgcmVwbGFjZWQgYnkgk2hkbWF0eJQ8L3NwYW4+PGJyPgogPC9zcGFuPjwvbGk+PC91bD48L3VsPgogICAgICAgICAgICAgICAgICAgPC91bD4KLSAgICAgICAgICAgICAgICAgIDxoMyBzdHlsZT0iYmFja2dyb3VuZDogcmdiKDUxLCAxMDIsIDI1NSkgbm9uZSByZXBlYXQgc2Nyb2xsIDAlIDUwJTsgLW1vei1iYWNrZ3JvdW5kLWNsaXA6IC1tb3otaW5pdGlhbDsgLW1vei1iYWNrZ3JvdW5kLW9yaWdpbjogLW1vei1pbml0aWFsOyAtbW96LWJhY2tncm91bmQtaW5saW5lLXBvbGljeTogLW1vei1pbml0aWFsOyBtYXJnaW4tcmlnaHQ6IDUwMHB0OyB3aWR0aDogMjc0cHg7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogQXJpYWw7IGNvbG9yOiB3aGl0ZTsiPjEuNy45IC8gMTQtQXVndXN0LTIwMjA8L3NwYW4+PC9oMz4KKyAgICAgICAgICAgICAgICAgIDxoMyBzdHlsZT0iYmFja2dyb3VuZDogcmdiKDUxLCAxMDIsIDI1NSkgbm9uZSByZXBlYXQgc2Nyb2xsIDAlIDUwJTsgLW1vei1iYWNrZ3JvdW5kLWNsaXA6IGluaXRpYWw7IC1tb3otYmFja2dyb3VuZC1vcmlnaW46IGluaXRpYWw7IC1tb3otYmFja2dyb3VuZC1pbmxpbmUtcG9saWN5OiBpbml0aWFsOyBtYXJnaW4tcmlnaHQ6IDUwMHB0OyB3aWR0aDogMjc0cHg7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogQXJpYWw7IGNvbG9yOiB3aGl0ZTsiPlYxLjcuOSAvIDE0LUF1Z3VzdC0yMDIwPC9zcGFuPjwvaDM+CiAKIAogICAgICAgICAgICAgCkBAIC0xMDIxLDcgKzEwNTUsNyBAQAogICAgICByZXdvcmsgb24gVVNCRF9TdGFydCgpIGFuZCBVU0JEX1N0b3AoKSBBUElzOiBzdG9wcGluZyBkZXZpY2Ugd2lsbCBiZQogICAgICBoYW5kbGVkIGJ5IEhBTF9QQ0RfRGVJbml0KCkgQVBJLjxvOnA+PC9vOnA+PC9zcGFuPjwvbGk+PC91bD48dWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7IiBsYW5nPSJFTi1VUyI+PHNwYW4gc3R5bGU9IiI+Jm5ic3A7IDwvc3Bhbj5SZW1vdmUKICAgICAgbm9uIHVzZWQgQVBJIGZvciBVU0IgZGV2aWNlIG1vZGUuPG86cD48L286cD48L3NwYW4+PC9saT48L3VsPjwvdWw+Ci08aDMgc3R5bGU9ImJhY2tncm91bmQ6IHJnYig1MSwgMTAyLCAyNTUpIG5vbmUgcmVwZWF0IHNjcm9sbCAwJSA1MCU7IC1tb3otYmFja2dyb3VuZC1jbGlwOiAtbW96LWluaXRpYWw7IC1tb3otYmFja2dyb3VuZC1vcmlnaW46IC1tb3otaW5pdGlhbDsgLW1vei1iYWNrZ3JvdW5kLWlubGluZS1wb2xpY3k6IC1tb3otaW5pdGlhbDsgbWFyZ2luLXJpZ2h0OiA1MDBwdDsgd2lkdGg6IDI3NHB4OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IEFyaWFsOyBjb2xvcjogd2hpdGU7Ij5WMS43LjggLyAxMi1GZWJydWFyeS0yMDIwPC9zcGFuPjwvaDM+Cis8aDMgc3R5bGU9ImJhY2tncm91bmQ6IHJnYig1MSwgMTAyLCAyNTUpIG5vbmUgcmVwZWF0IHNjcm9sbCAwJSA1MCU7IC1tb3otYmFja2dyb3VuZC1jbGlwOiBpbml0aWFsOyAtbW96LWJhY2tncm91bmQtb3JpZ2luOiBpbml0aWFsOyAtbW96LWJhY2tncm91bmQtaW5saW5lLXBvbGljeTogaW5pdGlhbDsgbWFyZ2luLXJpZ2h0OiA1MDBwdDsgd2lkdGg6IDI3NHB4OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IEFyaWFsOyBjb2xvcjogd2hpdGU7Ij5WMS43LjggLyAxMi1GZWJydWFyeS0yMDIwPC9zcGFuPjwvaDM+CiAKICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbjogNC41cHQgMGNtIDQuNXB0IDE4cHQ7Ij48YiBzdHlsZT0iIj48dT48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYTsgY29sb3I6IGJsYWNrOyI+TWFpbgpAQCAtMTA3Miw3ICsxMTA2LDcgQEAKICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgPC91bD4KIAotICAgICAgICAgICAgICAgICAgPGgzIHN0eWxlPSJiYWNrZ3JvdW5kOiByZ2IoNTEsIDEwMiwgMjU1KSBub25lIHJlcGVhdCBzY3JvbGwgMCUgNTAlOyAtbW96LWJhY2tncm91bmQtY2xpcDogLW1vei1pbml0aWFsOyAtbW96LWJhY2tncm91bmQtb3JpZ2luOiAtbW96LWluaXRpYWw7IC1tb3otYmFja2dyb3VuZC1pbmxpbmUtcG9saWN5OiAtbW96LWluaXRpYWw7IG1hcmdpbi1yaWdodDogNTAwcHQ7IHdpZHRoOiAyNzRweDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBBcmlhbDsgY29sb3I6IHdoaXRlOyI+VjEuNy43IC8gMDYtRGVjZW1iZXItMjAxOTwvc3Bhbj48L2gzPgorICAgICAgICAgICAgICAgICAgPGgzIHN0eWxlPSJiYWNrZ3JvdW5kOiByZ2IoNTEsIDEwMiwgMjU1KSBub25lIHJlcGVhdCBzY3JvbGwgMCUgNTAlOyAtbW96LWJhY2tncm91bmQtY2xpcDogaW5pdGlhbDsgLW1vei1iYWNrZ3JvdW5kLW9yaWdpbjogaW5pdGlhbDsgLW1vei1iYWNrZ3JvdW5kLWlubGluZS1wb2xpY3k6IGluaXRpYWw7IG1hcmdpbi1yaWdodDogNTAwcHQ7IHdpZHRoOiAyNzRweDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBBcmlhbDsgY29sb3I6IHdoaXRlOyI+VjEuNy43IC8gMDYtRGVjZW1iZXItMjAxOTwvc3Bhbj48L2gzPgogCiAgICAgICAgICAgICA8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luOiA0LjVwdCAwY20gNC41cHQgMThwdDsiPjxiIHN0eWxlPSIiPjx1PjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hOyBjb2xvcjogYmxhY2s7Ij5NYWluCiBDaGFuZ2VzPC9zcGFuPjwvdT48L2I+PC9wPgpAQCAtMTE1MSw3ICsxMTg1LDcgQEAKIGNvbmRpdGlvbiBhbmQgaGFuZGxlIGl0IGJlZm9yZSBjbGVhcmluZyB0aGUgQUREUiBmbGFnPC9zcGFuPjwvbGk+PC91bD48L3VsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48Yj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyI+SEFMIE5BTkQgPC9zcGFuPjwvYj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyI+dXBkYXRlPC9zcGFuPjwvbGk+PHVsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPlVwZGF0ZQogSEFMX05BTkRfV3JpdGVfUGFnZV84YigpLCBIQUxfTkFORF9Xcml0ZV9QYWdlXzE2YigpIGFuZCZuYnNwOwogSEFMX05BTkRfV3JpdGVfU3BhcmVBcmVhXzE2YigpIHRvIG1hbmFnZSBjb3JyZWN0bHkgdGhlIHRpbWUgb3V0Ci1jb25kaXRpb24uPC9zcGFuPjwvbGk+PC91bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PGI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiPkhBTCBTQUkgPC9zcGFuPjwvYj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyI+dXBkYXRlPC9zcGFuPjwvbGk+PHVsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPk9wdGltaXplIFNBSV9ETUFUeENwbHQoKSBhbmQgU0FJX0RNQVJ4Q3BsdCgpIEFQSXMgdG8gY2hlY2sgb24gIk1vZGUiIHBhcmFtZXRlciBpbnN0ZWFkIG9mJm5ic3A7Q0lSQyBiaXQgaW4gdGhlIENSIHJlZ2lzdGVyLjwvc3Bhbj48L2xpPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPlJlbW92ZSB1bnVzZWQgU0FJX0ZJRk9fU0laRSBkZWZpbmU8L3NwYW4+PC9saT48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiIGxhbmc9IkVOLVVTIj5VcGRhdGUgSEFMX1NBSV9SZWNlaXZlX0RNQSgpIHByb2dyYW1taW5nIHNlcXVlbmNlIHRvIGJlIGlubGluZSB3aXRoIHJlZmVyZW5jZSBtYW51YWw8YnI+PC9zcGFuPjwvbGk+PC91bD48L3VsPjxoMyBzdHlsZT0iYmFja2dyb3VuZDogcmdiKDUxLCAxMDIsIDI1NSkgbm9uZSByZXBlYXQgc2Nyb2xsIDAlIDUwJTsgLW1vei1iYWNrZ3JvdW5kLWNsaXA6IC1tb3otaW5pdGlhbDsgLW1vei1iYWNrZ3JvdW5kLW9yaWdpbjogLW1vei1pbml0aWFsOyAtbW96LWJhY2tncm91bmQtaW5saW5lLXBvbGljeTogLW1vei1pbml0aWFsOyBtYXJnaW4tcmlnaHQ6IDUwMHB0OyB3aWR0aDogMjc0cHg7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogQXJpYWw7IGNvbG9yOiB3aGl0ZTsiPlYxLjcuNiAvIDEyLUFwcmlsLTIwMTk8L3NwYW4+PC9oMz4KK2NvbmRpdGlvbi48L3NwYW4+PC9saT48L3VsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48Yj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyI+SEFMIFNBSSA8L3NwYW4+PC9iPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7Ij51cGRhdGU8L3NwYW4+PC9saT48dWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7IiBsYW5nPSJFTi1VUyI+T3B0aW1pemUgU0FJX0RNQVR4Q3BsdCgpIGFuZCBTQUlfRE1BUnhDcGx0KCkgQVBJcyB0byBjaGVjayBvbiAiTW9kZSIgcGFyYW1ldGVyIGluc3RlYWQgb2YmbmJzcDtDSVJDIGJpdCBpbiB0aGUgQ1IgcmVnaXN0ZXIuPC9zcGFuPjwvbGk+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7IiBsYW5nPSJFTi1VUyI+UmVtb3ZlIHVudXNlZCBTQUlfRklGT19TSVpFIGRlZmluZTwvc3Bhbj48L2xpPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPlVwZGF0ZSBIQUxfU0FJX1JlY2VpdmVfRE1BKCkgcHJvZ3JhbW1pbmcgc2VxdWVuY2UgdG8gYmUgaW5saW5lIHdpdGggcmVmZXJlbmNlIG1hbnVhbDxicj48L3NwYW4+PC9saT48L3VsPjwvdWw+PGgzIHN0eWxlPSJiYWNrZ3JvdW5kOiByZ2IoNTEsIDEwMiwgMjU1KSBub25lIHJlcGVhdCBzY3JvbGwgMCUgNTAlOyAtbW96LWJhY2tncm91bmQtY2xpcDogaW5pdGlhbDsgLW1vei1iYWNrZ3JvdW5kLW9yaWdpbjogaW5pdGlhbDsgLW1vei1iYWNrZ3JvdW5kLWlubGluZS1wb2xpY3k6IGluaXRpYWw7IG1hcmdpbi1yaWdodDogNTAwcHQ7IHdpZHRoOiAyNzRweDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBBcmlhbDsgY29sb3I6IHdoaXRlOyI+VjEuNy42IC8gMTItQXByaWwtMjAxOTwvc3Bhbj48L2gzPgogICAgICAgICAgICAgPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbjogNC41cHQgMGNtIDQuNXB0IDE4cHQ7Ij48YiBzdHlsZT0iIj48dT48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYTsgY29sb3I6IGJsYWNrOyI+TWFpbgogQ2hhbmdlczwvc3Bhbj48L3U+PC9iPjwvcD4KICAgICAgICAgICAgIApAQCAtMTE3Niw3ICsxMjEwLDcgQEAKICAgICAgQ29kZVNvbmFyIHdhcm5pbmcgb24gUENEX1BvcnRfSVJRSGFuZGxlcigpIGFuZCAmbmJzcDtIQ0RfUG9ydF9JUlFIYW5kbGVyKCkKICAgICAgaW50ZXJydXB0IGhhbmRsZXJzPG86cD48L286cD48L3NwYW4+PC9saT48L3VsPjwvdWw+CiAKLTxoMyBzdHlsZT0iYmFja2dyb3VuZDogcmdiKDUxLCAxMDIsIDI1NSkgbm9uZSByZXBlYXQgc2Nyb2xsIDAlIDUwJTsgLW1vei1iYWNrZ3JvdW5kLWNsaXA6IC1tb3otaW5pdGlhbDsgLW1vei1iYWNrZ3JvdW5kLW9yaWdpbjogLW1vei1pbml0aWFsOyAtbW96LWJhY2tncm91bmQtaW5saW5lLXBvbGljeTogLW1vei1pbml0aWFsOyBtYXJnaW4tcmlnaHQ6IDUwMHB0OyB3aWR0aDogMjc0cHg7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogQXJpYWw7IGNvbG9yOiB3aGl0ZTsiPlYxLjcuNSAvIDA4LUZlYnJ1YXJ5LTIwMTk8L3NwYW4+PC9oMz4KKzxoMyBzdHlsZT0iYmFja2dyb3VuZDogcmdiKDUxLCAxMDIsIDI1NSkgbm9uZSByZXBlYXQgc2Nyb2xsIDAlIDUwJTsgLW1vei1iYWNrZ3JvdW5kLWNsaXA6IGluaXRpYWw7IC1tb3otYmFja2dyb3VuZC1vcmlnaW46IGluaXRpYWw7IC1tb3otYmFja2dyb3VuZC1pbmxpbmUtcG9saWN5OiBpbml0aWFsOyBtYXJnaW4tcmlnaHQ6IDUwMHB0OyB3aWR0aDogMjc0cHg7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogQXJpYWw7IGNvbG9yOiB3aGl0ZTsiPlYxLjcuNSAvIDA4LUZlYnJ1YXJ5LTIwMTk8L3NwYW4+PC9oMz4KICAgICAgICAgICAgIDxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW46IDQuNXB0IDBjbSA0LjVwdCAxOHB0OyI+PGIgc3R5bGU9IiI+PHU+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmE7IGNvbG9yOiBibGFjazsiPk1haW4KIENoYW5nZXM8L3NwYW4+PC91PjwvYj48L3A+CiAgICAgICAgICAgICAKQEAgLTE1NjgsOSArMTYwMiw5IEBACiAKICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+PC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij48L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+PC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+PC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+PC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiBib2xkOyI+PC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+PC9zcGFuPjwvc3Bhbj4KICAgICAgICAgICAgIAotICAgIDxoMyBzdHlsZT0iYmFja2dyb3VuZDogcmdiKDUxLCAxMDIsIDI1NSkgbm9uZSByZXBlYXQgc2Nyb2xsIDAlIDUwJTsgLW1vei1iYWNrZ3JvdW5kLWNsaXA6IC1tb3otaW5pdGlhbDsgLW1vei1iYWNrZ3JvdW5kLW9yaWdpbjogLW1vei1pbml0aWFsOyAtbW96LWJhY2tncm91bmQtaW5saW5lLXBvbGljeTogLW1vei1pbml0aWFsOyBtYXJnaW4tcmlnaHQ6IDUwMHB0OyB3aWR0aDogMjc0cHg7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogQXJpYWw7IGNvbG9yOiB3aGl0ZTsiPlYxLjcuNCAvIDAyLUZlYnJ1YXJ5LTIwMTg8L3NwYW4+PC9oMz48cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luOiA0LjVwdCAwY20gNC41cHQgMThwdDsiPjxiIHN0eWxlPSIiPjx1PjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hOyBjb2xvcjogYmxhY2s7Ij5NYWluCisgICAgPGgzIHN0eWxlPSJiYWNrZ3JvdW5kOiByZ2IoNTEsIDEwMiwgMjU1KSBub25lIHJlcGVhdCBzY3JvbGwgMCUgNTAlOyAtbW96LWJhY2tncm91bmQtY2xpcDogaW5pdGlhbDsgLW1vei1iYWNrZ3JvdW5kLW9yaWdpbjogaW5pdGlhbDsgLW1vei1iYWNrZ3JvdW5kLWlubGluZS1wb2xpY3k6IGluaXRpYWw7IG1hcmdpbi1yaWdodDogNTAwcHQ7IHdpZHRoOiAyNzRweDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBBcmlhbDsgY29sb3I6IHdoaXRlOyI+VjEuNy40IC8gMDItRmVicnVhcnktMjAxODwvc3Bhbj48L2gzPjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW46IDQuNXB0IDBjbSA0LjVwdCAxOHB0OyI+PGIgc3R5bGU9IiI+PHU+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmE7IGNvbG9yOiBibGFjazsiPk1haW4KIENoYW5nZXM8L3NwYW4+PC91PjwvYj48L3A+PHVsIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwaW47IGNvbG9yOiByZ2IoMCwgMCwgMCk7IGZvbnQtZmFtaWx5OiAnVGltZXMgTmV3IFJvbWFuJzsgZm9udC1zaXplOiBtZWRpdW07IGZvbnQtc3R5bGU6IG5vcm1hbDsgZm9udC12YXJpYW50OiBub3JtYWw7IGZvbnQtd2VpZ2h0OiBub3JtYWw7IGxldHRlci1zcGFjaW5nOiBub3JtYWw7IGxpbmUtaGVpZ2h0OiBub3JtYWw7IHRleHQtYWxpZ246IHN0YXJ0OyB0ZXh0LWluZGVudDogMHB4OyB0ZXh0LXRyYW5zZm9ybTogbm9uZTsgd2hpdGUtc3BhY2U6IG5vcm1hbDsgd29yZC1zcGFjaW5nOiAwcHg7IG1hcmdpbi10b3A6IDBjbTsiIHR5cGU9InNxdWFyZSI+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyBmb250LXNpemU6IDEwcHQ7Ij5HZW5lcmFsIHVwZGF0ZXMgCi10byBmaXgga25vd24gZGVmZWN0cyBhbmQgZW5oYW5jZW1lbnRzIGltcGxlbWVudGF0aW9uPC9zcGFuPjwvbGk+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiBib2xkOyI+SEFMJm5ic3A7PC9zcGFuPnVwZGF0ZTwvc3Bhbj48L2xpPjx1bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij5VcGRhdGUgVU5VU0VEKCkgbWFjcm8gaW1wbGVtZW50YXRpb24gdG8gYXZvaWQgR0NDIHdhcm5pbmc8L3NwYW4+PC9saT48dWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+VGhlIHdhcm5pbmcgaXMgZGV0ZWN0ZWQgd2hlbiB0aGUgVU5VU0VEKCkgbWFjcm8gaXMgY2FsbGVkIGZyb20gQysrIGZpbGU8L3NwYW4+PC9saT48L3VsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiPlVwZGF0ZSB0byBtYWtlIFJBTUZVTkMgZGVmaW5lIGFzIGdlbmVyaWMgdHlwZSBpbnN0ZWFkIG9mIEhBTF9TdGF0dXNUeXBkZWYgdHlwZS48L3NwYW4+PC9saT48L3VsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiPjxzcGFuIHN0eWxlPSJmb250LXdlaWdodDogYm9sZDsiPkhBTCBGTEFTSCA8L3NwYW4+dXBkYXRlPC9zcGFuPjwvbGk+PHVsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiPlVwZGF0ZSB0aGUmbmJzcDtwcm90b3R5cGVzIG9mIHRoZSBmb2xsb3dpbmcgQVBJcyBhZnRlciBjaGFuZ2Ugb24gUkFNRlVOQyBkZWZpbmVzJm5ic3A7PC9zcGFuPjwvbGk+PHVsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiPkhBTF9GTEFTSEV4X1N0b3BGbGFzaEludGVyZmFjZUNsaygpPC9zcGFuPjwvbGk+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+SEFMX0ZMQVNIRXhfU3RhcnRGbGFzaEludGVyZmFjZUNsaygpPC9zcGFuPjwvbGk+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+SEFMX0ZMQVNIRXhfRW5hYmxlRmxhc2hTbGVlcE1vZGUoKTwvc3Bhbj48L2xpPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiPkhBTF9GTEFTSEV4X0Rpc2FibGVGbGFzaFNsZWVwTW9kZSgpPGJyPjwvc3Bhbj48L2xpPjwvdWw+PC91bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij48c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6IGJvbGQ7Ij5IQUwgU0FJIDwvc3Bhbj51cGRhdGU8L3NwYW4+PC9saT48dWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+VXBkYXRlIEhBTF9TQUlfRE1BU3RvcCgpIGFuZCBIQUxfU0FJX0Fib3J0KCkgcHJvY2VzcyB0byBmaXggdGhlIGxvY2svdW5sb2NrIGF1ZGlvIGlzc3VlPC9zcGFuPjwvbGk+PC91bD48L3VsPjxoMyBzdHlsZT0iYmFja2dyb3VuZDogcmdiKDUxLCAxMDIsIDI1NSkgbm9uZSByZXBlYXQgc2Nyb2xsIDAlIDUwJTsgLW1vei1iYWNrZ3JvdW5kLWNsaXA6IC1tb3otaW5pdGlhbDsgLW1vei1iYWNrZ3JvdW5kLW9yaWdpbjogLW1vei1pbml0aWFsOyAtbW96LWJhY2tncm91bmQtaW5saW5lLXBvbGljeTogLW1vei1pbml0aWFsOyBtYXJnaW4tcmlnaHQ6IDUwMHB0OyB3aWR0aDogMjc0cHg7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogQXJpYWw7IGNvbG9yOiB3aGl0ZTsiPlYxLjcuMyAvIDIyLURlY2VtYmVyLTIwMTc8L3NwYW4+PC9oMz48cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luOiA0LjVwdCAwY20gNC41cHQgMThwdDsiPjxiIHN0eWxlPSIiPjx1PjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hOyBjb2xvcjogYmxhY2s7Ij5NYWluCit0byBmaXgga25vd24gZGVmZWN0cyBhbmQgZW5oYW5jZW1lbnRzIGltcGxlbWVudGF0aW9uPC9zcGFuPjwvbGk+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiBib2xkOyI+SEFMJm5ic3A7PC9zcGFuPnVwZGF0ZTwvc3Bhbj48L2xpPjx1bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij5VcGRhdGUgVU5VU0VEKCkgbWFjcm8gaW1wbGVtZW50YXRpb24gdG8gYXZvaWQgR0NDIHdhcm5pbmc8L3NwYW4+PC9saT48dWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+VGhlIHdhcm5pbmcgaXMgZGV0ZWN0ZWQgd2hlbiB0aGUgVU5VU0VEKCkgbWFjcm8gaXMgY2FsbGVkIGZyb20gQysrIGZpbGU8L3NwYW4+PC9saT48L3VsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiPlVwZGF0ZSB0byBtYWtlIFJBTUZVTkMgZGVmaW5lIGFzIGdlbmVyaWMgdHlwZSBpbnN0ZWFkIG9mIEhBTF9TdGF0dXNUeXBkZWYgdHlwZS48L3NwYW4+PC9saT48L3VsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiPjxzcGFuIHN0eWxlPSJmb250LXdlaWdodDogYm9sZDsiPkhBTCBGTEFTSCA8L3NwYW4+dXBkYXRlPC9zcGFuPjwvbGk+PHVsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiPlVwZGF0ZSB0aGUmbmJzcDtwcm90b3R5cGVzIG9mIHRoZSBmb2xsb3dpbmcgQVBJcyBhZnRlciBjaGFuZ2Ugb24gUkFNRlVOQyBkZWZpbmVzJm5ic3A7PC9zcGFuPjwvbGk+PHVsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiPkhBTF9GTEFTSEV4X1N0b3BGbGFzaEludGVyZmFjZUNsaygpPC9zcGFuPjwvbGk+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+SEFMX0ZMQVNIRXhfU3RhcnRGbGFzaEludGVyZmFjZUNsaygpPC9zcGFuPjwvbGk+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+SEFMX0ZMQVNIRXhfRW5hYmxlRmxhc2hTbGVlcE1vZGUoKTwvc3Bhbj48L2xpPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiPkhBTF9GTEFTSEV4X0Rpc2FibGVGbGFzaFNsZWVwTW9kZSgpPGJyPjwvc3Bhbj48L2xpPjwvdWw+PC91bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij48c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6IGJvbGQ7Ij5IQUwgU0FJIDwvc3Bhbj51cGRhdGU8L3NwYW4+PC9saT48dWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+VXBkYXRlIEhBTF9TQUlfRE1BU3RvcCgpIGFuZCBIQUxfU0FJX0Fib3J0KCkgcHJvY2VzcyB0byBmaXggdGhlIGxvY2svdW5sb2NrIGF1ZGlvIGlzc3VlPC9zcGFuPjwvbGk+PC91bD48L3VsPjxoMyBzdHlsZT0iYmFja2dyb3VuZDogcmdiKDUxLCAxMDIsIDI1NSkgbm9uZSByZXBlYXQgc2Nyb2xsIDAlIDUwJTsgLW1vei1iYWNrZ3JvdW5kLWNsaXA6IGluaXRpYWw7IC1tb3otYmFja2dyb3VuZC1vcmlnaW46IGluaXRpYWw7IC1tb3otYmFja2dyb3VuZC1pbmxpbmUtcG9saWN5OiBpbml0aWFsOyBtYXJnaW4tcmlnaHQ6IDUwMHB0OyB3aWR0aDogMjc0cHg7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogQXJpYWw7IGNvbG9yOiB3aGl0ZTsiPlYxLjcuMyAvIDIyLURlY2VtYmVyLTIwMTc8L3NwYW4+PC9oMz48cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luOiA0LjVwdCAwY20gNC41cHQgMThwdDsiPjxiIHN0eWxlPSIiPjx1PjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hOyBjb2xvcjogYmxhY2s7Ij5NYWluCiBDaGFuZ2VzPC9zcGFuPjwvdT48L2I+PC9wPjx1bCBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMGluOyBjb2xvcjogcmdiKDAsIDAsIDApOyBmb250LWZhbWlseTogJ1RpbWVzIE5ldyBSb21hbic7IGZvbnQtc2l6ZTogbWVkaXVtOyBmb250LXN0eWxlOiBub3JtYWw7IGZvbnQtdmFyaWFudDogbm9ybWFsOyBmb250LXdlaWdodDogbm9ybWFsOyBsZXR0ZXItc3BhY2luZzogbm9ybWFsOyBsaW5lLWhlaWdodDogbm9ybWFsOyB0ZXh0LWFsaWduOiBzdGFydDsgdGV4dC1pbmRlbnQ6IDBweDsgdGV4dC10cmFuc2Zvcm06IG5vbmU7IHdoaXRlLXNwYWNlOiBub3JtYWw7IHdvcmQtc3BhY2luZzogMHB4OyBtYXJnaW4tdG9wOiAwY207IiB0eXBlPSJzcXVhcmUiPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6IFZlcmRhbmEsc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMHB0OyI+R2VuZXJhbCB1cGRhdGVzIAogdG8gZml4IGtub3duIGRlZmVjdHMgYW5kIGVuaGFuY2VtZW50cyBpbXBsZW1lbnRhdGlvbjwvc3Bhbj48L2xpPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luOiA0LjVwdCAwaW47IGZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6ICdUaW1lcyBOZXcgUm9tYW4nLHNlcmlmOyBjb2xvcjogYmxhY2s7Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6IFZlcmRhbmEsc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMHB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiBib2xkOyI+VGhlIGZvbGxvd2luZyBjaGFuZ2VzIGRvbmUgb24gdGhlIEhBTCBkcml2ZXJzIHJlcXVpcmUgYW4gdXBkYXRlIG9uIHRoZSBhcHBsaWNhdGlvbiBjb2RlIGJhc2VkIG9uIG9sZGVyIEhBTCB2ZXJzaW9uczwvc3Bhbj48L3NwYW4+PC9saT48dWwgc3R5bGU9Im1hcmdpbi1ib3R0b206IDBpbjsiPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luOiA0LjVwdCAwaW47IGZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6ICZxdW90O1RpbWVzIE5ldyBSb21hbiZxdW90OyxzZXJpZjsgY29sb3I6IGJsYWNrOyBmb250LXdlaWdodDogYm9sZDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hOyI+UmV3b3JrIG9mIEhBTCBDQU4gZHJpdmVyIChjb21wYXRpYmlsaXR5IGJyZWFrKSZuYnNwOzwvc3Bhbj48L2xpPjx1bCBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMGluOyI+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW46IDQuNXB0IDBpbjsgZm9udC1zaXplOiAxMnB0OyBmb250LWZhbWlseTogJnF1b3Q7VGltZXMgTmV3IFJvbWFuJnF1b3Q7LHNlcmlmOyBjb2xvcjogYmxhY2s7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYTsiPkEKIG5ldyBIQUwgQ0FOIGRyaXZlciBoYXMgYmVlbiByZWRlc2lnbmVkIHdpdGggbmV3IEFQSXMsIHRvIGJ5cGFzcwpAQCAtMTYwMiw3ICsxNjM2LDcgQEAKICAgICAgICAgYWxsb3dpbmcgdG8gZ2V0IHRoZSBIU0UgY2xvY2sgZGl2aWRlciBmb3IgUlRDIHBlcmlwaGVyYWw8L3NwYW4+PC9saT48L3VsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPkVuc3VyZSByZXNldCBvZiBDSVIgYW5kIENTUgogICAgICAgIHJlZ2lzdGVycyB3aGVuIGlzc3VpbmcgSEFMX1JDQ19EZUluaXQoKS9MTF9SQ0NfRGVJbml0IGZ1bmN0aW9uczwvc3Bhbj48L2xpPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYTsiPlVwZGF0ZSBIQUxfUkNDX09zY0NvbmZpZygpJm5ic3A7dG8ga2VlcCBiYWNrdXAgZG9tYWluIGVuYWJsZWQgd2hlbiBjb25maWd1cmluZyByZXNwZWN0aXZlbHkmbmJzcDtMU0UgYW5kIFJUQyBjbG9jayBzb3VyY2U8L3NwYW4+PC9saT48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmE7Ij5BZGQgbmV3IEhBTCBpbnRlcmZhY2VzIGFsbG93aW5nIHRvIGNvbnRyb2wgdGhlIGFjdGl2YXRpb24gb3IgZGVhY3RpdmF0aW9uIG9mIFBMTEkyUyBhbmQgUExMU0FJOjwvc3Bhbj48L2xpPjx1bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmE7Ij5IQUxfUkNDRXhfRW5hYmxlUExMSTJTKCk8L3NwYW4+PC9saT48L3VsPjwvdWw+PHVsIHN0eWxlPSJtYXJnaW4tdG9wOiAwY207IiB0eXBlPSJzcXVhcmUiPjx1bCBzdHlsZT0ibWFyZ2luLXRvcDogMGNtOyIgdHlwZT0ic3F1YXJlIj48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmE7Ij5IQUxfUkNDRXhfRGlzYWJsZVBMTEkyUygpPC9zcGFuPjwvbGk+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW46IDQuNXB0IDBpbjsgZm9udC1zaXplOiAxMnB0OyBmb250LWZhbWlseTogJnF1b3Q7VGltZXMgTmV3IFJvbWFuJnF1b3Q7LHNlcmlmOyBjb2xvcjogYmxhY2s7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYTsiPkhBTF9SQ0NFeF9FbmFibGVQTExTQUkoKTwvc3Bhbj48L2xpPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luOiA0LjVwdCAwaW47IGZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6ICZxdW90O1RpbWVzIE5ldyBSb21hbiZxdW90OyxzZXJpZjsgY29sb3I6IGJsYWNrOyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmE7Ij5IQUxfUkNDRXhfRGlzYWJsZVBMTFNBSSgpPC9zcGFuPjwvbGk+PC91bD48L3VsPjwvdWw+PHVsIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwaW47IGNvbG9yOiByZ2IoMCwgMCwgMCk7IGZvbnQtZmFtaWx5OiAnVGltZXMgTmV3IFJvbWFuJzsgZm9udC1zaXplOiBtZWRpdW07IGZvbnQtc3R5bGU6IG5vcm1hbDsgZm9udC12YXJpYW50OiBub3JtYWw7IGZvbnQtd2VpZ2h0OiBub3JtYWw7IGxldHRlci1zcGFjaW5nOiBub3JtYWw7IGxpbmUtaGVpZ2h0OiBub3JtYWw7IHRleHQtYWxpZ246IHN0YXJ0OyB0ZXh0LWluZGVudDogMHB4OyB0ZXh0LXRyYW5zZm9ybTogbm9uZTsgd2hpdGUtc3BhY2U6IG5vcm1hbDsgd29yZC1zcGFjaW5nOiAwcHg7IG1hcmdpbi10b3A6IDBjbTsiIHR5cGU9InNxdWFyZSI+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW46IDQuNXB0IDBpbjsgZm9udC1zaXplOiAxMnB0OyBmb250LWZhbWlseTogJnF1b3Q7VGltZXMgTmV3IFJvbWFuJnF1b3Q7LHNlcmlmOyBjb2xvcjogYmxhY2s7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYTsiPjxzcGFuIHN0eWxlPSJmb250LXdlaWdodDogYm9sZDsiPkxMIFJDQzwvc3Bhbj4gdXBkYXRlJm5ic3A7PC9zcGFuPjwvbGk+PHVsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPkFkZCBuZXcgTEwgUkNDIG1hY3JvIDwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMnB0OyBmb250LWZhbWlseTogJnF1b3Q7VGltZXMgTmV3IFJvbWFuJnF1b3Q7LHNlcmlmOyIgbGFuZz0iRU4tVVMiPjxvOnA+PC9vOnA+PC9zcGFuPjwvbGk+PHVsIHN0eWxlPSJtYXJnaW4tdG9wOiAwY207IiB0eXBlPSJzcXVhcmUiPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPkxMX1JDQ19QTExfU2V0TWFpblNvdXJjZSgpCiAgICAgICAgIGFsbG93aW5nIHRvIGNvbmZpZ3VyZSBQTEwgbWFpbiBjbG9jayBzb3VyY2U8L3NwYW4+PC9saT48L3VsPjwvdWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hOyI+PHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiBib2xkOyI+TEwgRk1DIC8gTEwgRlNNQyA8L3NwYW4+dXBkYXRlPC9zcGFuPjwvbGk+PHVsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYTsiPkFkZCBjbGVhciBvZiB0aGUgUFRZUCBiaXQgdG8gc2VsZWN0IHRoZSBQQ0FSRCBtb2RlIGluIDwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYTsiPkZNQ19QQ0NBUkRfSW5pdCgpIC8gPC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hOyI+RlNNQ19QQ0NBUkRfSW5pdCgpPC9zcGFuPjwvbGk+PC91bD48L3VsPgotPGgzIHN0eWxlPSJiYWNrZ3JvdW5kOiByZ2IoNTEsIDEwMiwgMjU1KSBub25lIHJlcGVhdCBzY3JvbGwgMCUgNTAlOyAtbW96LWJhY2tncm91bmQtY2xpcDogLW1vei1pbml0aWFsOyAtbW96LWJhY2tncm91bmQtb3JpZ2luOiAtbW96LWluaXRpYWw7IC1tb3otYmFja2dyb3VuZC1pbmxpbmUtcG9saWN5OiAtbW96LWluaXRpYWw7IG1hcmdpbi1yaWdodDogNTAwcHQ7IHdpZHRoOiAxOTdweDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBBcmlhbDsgY29sb3I6IHdoaXRlOyI+VjEuNy4yIC8gMDYtT2N0b2Jlci0yMDE3PC9zcGFuPjwvaDM+PHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbjogNC41cHQgMGNtIDQuNXB0IDE4cHQ7Ij48YiBzdHlsZT0iIj48dT48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYTsgY29sb3I6IGJsYWNrOyI+TWFpbgorPGgzIHN0eWxlPSJiYWNrZ3JvdW5kOiByZ2IoNTEsIDEwMiwgMjU1KSBub25lIHJlcGVhdCBzY3JvbGwgMCUgNTAlOyAtbW96LWJhY2tncm91bmQtY2xpcDogaW5pdGlhbDsgLW1vei1iYWNrZ3JvdW5kLW9yaWdpbjogaW5pdGlhbDsgLW1vei1iYWNrZ3JvdW5kLWlubGluZS1wb2xpY3k6IGluaXRpYWw7IG1hcmdpbi1yaWdodDogNTAwcHQ7IHdpZHRoOiAxOTdweDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBBcmlhbDsgY29sb3I6IHdoaXRlOyI+VjEuNy4yIC8gMDYtT2N0b2Jlci0yMDE3PC9zcGFuPjwvaDM+PHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbjogNC41cHQgMGNtIDQuNXB0IDE4cHQ7Ij48YiBzdHlsZT0iIj48dT48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYTsgY29sb3I6IGJsYWNrOyI+TWFpbgogQ2hhbmdlczwvc3Bhbj48L3U+PC9iPjwvcD48dWwgc3R5bGU9Im1hcmdpbi1ib3R0b206IDBpbjsgY29sb3I6IHJnYigwLCAwLCAwKTsgZm9udC1mYW1pbHk6ICdUaW1lcyBOZXcgUm9tYW4nOyBmb250LXNpemU6IG1lZGl1bTsgZm9udC1zdHlsZTogbm9ybWFsOyBmb250LXZhcmlhbnQ6IG5vcm1hbDsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDsgbGluZS1oZWlnaHQ6IG5vcm1hbDsgdGV4dC1hbGlnbjogc3RhcnQ7IHRleHQtaW5kZW50OiAwcHg7IHRleHQtdHJhbnNmb3JtOiBub25lOyB3aGl0ZS1zcGFjZTogbm9ybWFsOyB3b3JkLXNwYWNpbmc6IDBweDsgbWFyZ2luLXRvcDogMGNtOyIgdHlwZT0ic3F1YXJlIj48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiBWZXJkYW5hLHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTBwdDsiPkdlbmVyYWwgdXBkYXRlcyAKIHRvIGZpeCBrbm93biBkZWZlY3RzIGFuZCBlbmhhbmNlbWVudHMgaW1wbGVtZW50YXRpb248L3NwYW4+PC9saT48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij5GaXggY29tcGlsYXRpb24mbmJzcDt3YXJuaW5nIHdpdGggR0NDIGNvbXBpbGVyPC9zcGFuPjwvbGk+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyBmb250LXNpemU6IDEwcHQ7IGZvbnQtd2VpZ2h0OiBub3JtYWw7Ij5SZW1vdmUgRGF0ZSBhbmQgdmVyc2lvbiBmcm9tJm5ic3A7aGVhZGVyIGZpbGVzPC9zcGFuPjwvbGk+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyBmb250LXNpemU6IDEwcHQ7Ij5VcGRhdGUgSEFMIGRyaXZlcnMgdG8gcmVmZXIgdG8gdGhlIG5ldyZuYnNwO0NNU0lTIGJpdCBwb3NpdGlvbiBkZWZpbmVzIGluc3RlYWQgb2YgdXNhZ2UgdGhlIDwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6IFZlcmRhbmEsc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMHB0OyI+UE9TSVRJT05fVkFMKCkgbWFjcm88L3NwYW4+PC9saT48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij48c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6IGJvbGQ7Ij5IQUwgR2VuZXJpYyA8L3NwYW4+dXBkYXRlPC9zcGFuPjwvbGk+PHVsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiPnN0bTMyZjR4eF9oYWxfZGVmLmggZmlsZSBjaGFuZ2VzOiZuYnNwOzwvc3Bhbj48L2xpPjx1bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij5VcGRhdGUgX193ZWFrIGFuZCBfX3BhY2tlZCBkZWZpbmVkIHZhbHVlcyBmb3ImbmJzcDtBUk0gY29tcGlsZXI8L3NwYW4+PC9saT48L3VsPjx1bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij5VcGRhdGUgX19BTElHTl9CRUdJTiBhbmQgX19BTElHTl9FTkQgZGVmaW5lZCB2YWx1ZXMgZm9yJm5ic3A7QVJNIGNvbXBpbGVyPC9zcGFuPjwvbGk+PC91bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij5zdG0zMmY0eHhfbGxfc3lzdGVtLmggZmlsZTogYWRkJm5ic3A7TExfU1lTQ0ZHX1JFTUFQX1NEUkFNIGRlZmluZTwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiPjwvc3Bhbj48L2xpPjwvdWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiBib2xkOyI+SEFMIEFEQyA8L3NwYW4+dXBkYXRlPC9zcGFuPjwvbGk+PHVsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPkZpeCB3cm9uZyBkZWZpbml0aW9uIG9mIEFEQyBjaGFubmVsIHRlbXBlcmF0dXJlIHNlbnNvciBmb3IgU1RNMzJGNDEzeHggYW5kIFNUTTMyRjQyM3h4IGRldmljZXMuPC9zcGFuPjwvbGk+PC91bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij48c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6IGJvbGQ7Ij5IQUwgRE1BIDwvc3Bhbj51cGRhdGU8L3NwYW4+PC9saT48dWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+VXBkYXRlJm5ic3A7dmFsdWVzIGZvciB0aGUgZm9sbG93aW5nIGRlZmluZXM6IERNQV9GTEFHX0ZFSUYwXzQgYW5kIDwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiPkRNQV9GTEFHX0RNRUlGMF80Jm5ic3A7PC9zcGFuPjwvbGk+PC91bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij48c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6IGJvbGQ7Ij5IQUwgRFNJIDwvc3Bhbj51cGRhdGU8L3NwYW4+PC9saT48dWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+Rml4IEV4dHJhIHdhcm5pbmcgd2l0aCBTVzRTVE0zMiBjb21waWxlcjwvc3Bhbj48L2xpPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiPkZpeCBEU0kgZGlzcGxheSBpc3N1ZSB3aGVuIHVzaW5nIEVXQVJNIHcvIGhpZ2ggbGV2ZWwgb3B0aW1pemF0aW9uJm5ic3A7PC9zcGFuPjwvbGk+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+Rml4IE1JU1JBQyZuYnNwO2Vycm9yczwvc3Bhbj48L2xpPjwvdWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiBib2xkOyI+SEFMIEZMQVNIIDwvc3Bhbj51cGRhdGU8L3NwYW4+PC9saT48dWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+SEFMX0ZMQVNIX1VubG9jaygpIHVwZGF0ZSB0byByZXR1cm4gc3RhdGUgZXJyb3Igd2hlbiB0aGUgRkxBU0ggaXMgYWxyZWFkeSB1bmxvY2tlZDwvc3Bhbj48L2xpPjwvdWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7Ij5IQUwgRk1QSTJDJm5ic3A7PC9zcGFuPjwvYj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyI+dXBkYXRlPC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEycHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtUaW1lcyBOZXcgUm9tYW4mcXVvdDssc2VyaWY7Ij48bzpwPjwvbzpwPjwvc3Bhbj48L2xpPjx1bCBzdHlsZT0ibWFyZ2luLXRvcDogMGNtOyIgdHlwZT0ic3F1YXJlIj48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiIGxhbmc9IkVOLVVTIj5VcGRhdGUKICAgICAgIEludGVyZmFjZSBBUElzIGhlYWRlcnMgdG8gcmVtb3ZlIGNvbmZ1c2luZyBtZXNzYWdlIGFib3V0IGRldmljZSBhZGRyZXNzPC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEycHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtUaW1lcyBOZXcgUm9tYW4mcXVvdDssc2VyaWY7IiBsYW5nPSJFTi1VUyI+PG86cD48L286cD48L3NwYW4+PC9saT48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiIGxhbmc9IkVOLVVTIj5VcGRhdGUKQEAgLTE2MzMsNyArMTY2Nyw3IEBACiA8cCBjbGFzcz0iTXNvTGlzdFBhcmFncmFwaCIgc3R5bGU9Im1hcmdpbjogNC41cHQgMGNtIDQuNXB0IDM2cHQ7IHRleHQtaW5kZW50OiAtMThwdDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBTeW1ib2w7IGNvbG9yOiBibGFjazsiIGxhbmc9IkVOLVVTIj48c3BhbiBzdHlsZT0iIj48L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7IGNvbG9yOiBibGFjazsiIGxhbmc9IkVOLVVTIj48bzpwPjwvbzpwPjwvc3Bhbj48L3A+CiA8dWwgc3R5bGU9Im1hcmdpbi1ib3R0b206IDBpbjsgY29sb3I6IHJnYigwLCAwLCAwKTsgZm9udC1mYW1pbHk6ICdUaW1lcyBOZXcgUm9tYW4nOyBmb250LXNpemU6IG1lZGl1bTsgZm9udC1zdHlsZTogbm9ybWFsOyBmb250LXZhcmlhbnQ6IG5vcm1hbDsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDsgbGluZS1oZWlnaHQ6IG5vcm1hbDsgdGV4dC1hbGlnbjogc3RhcnQ7IHRleHQtaW5kZW50OiAwcHg7IHRleHQtdHJhbnNmb3JtOiBub25lOyB3aGl0ZS1zcGFjZTogbm9ybWFsOyB3b3JkLXNwYWNpbmc6IDBweDsgbWFyZ2luLXRvcDogMGNtOyIgdHlwZT0ic3F1YXJlIj48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij48c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6IGJvbGQ7Ij5IQUwgUk5HIDwvc3Bhbj51cGRhdGU8L3NwYW4+PC9saT48dWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+SEFMX1JOR19Jbml0KCkgcmVtb3ZlIExvY2soKS9VbmxvY2soKTwvc3Bhbj48L2xpPjwvdWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiBib2xkOyI+SEFMIE1NQyA8L3NwYW4+dXBkYXRlPC9zcGFuPjwvbGk+PHVsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiPkhBTF9NTUNfRXJhc2UoKSBBUEk6Jm5ic3A7PC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyBmb250LXNpemU6IDEwcHQ7Ij5hZGQgbWlzc2luZyAoKSB0byBmaXgmbmJzcDtjb21waWxhdGlvbiB3YXJuaW5nIDwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6IFZlcmRhbmEsc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMHB0OyI+ZGV0ZWN0ZWQgPC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyBmb250LXNpemU6IDEwcHQ7Ij53aXRoIFNXNFNUTTMyIHdoZW4gZXh0cmEgZmVhdHVyZSBpcyBlbmFibGVkLjwvc3Bhbj48L2xpPjwvdWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiBib2xkOyI+SEFMIFJUQyA8L3NwYW4+dXBkYXRlPC9zcGFuPjwvbGk+PHVsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiPkhBTF9SVENfSW5pdCgpIEFQSTogPC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyBmb250LXNpemU6IDEwcHQ7Ij51cGRhdGUgdG8gZm9yY2UgdGhlIHdhaXQgZm9yIHN5bmNocm8gYmVmb3JlIHNldHRpbmcgVEFGQ1IgcmVnaXN0ZXIgd2hlbiBCWVBTSEFEIGJpdCBpbiBDUiByZWdpc3RlciBpcyAwLjwvc3Bhbj48L2xpPjwvdWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiBib2xkOyI+SEFMIFNBSSA8L3NwYW4+dXBkYXRlPC9zcGFuPjwvbGk+PHVsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPlVwZGF0ZSBIQUxfU0FJX0RNQVN0b3AoKSBBUEkgdG8gZmx1c2ggZmlmbyBhZnRlciBkaXNhYmxpbmcmbmJzcDtTQUk8L3NwYW4+PC9saT48L3VsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiPjxzcGFuIHN0eWxlPSJmb250LXdlaWdodDogYm9sZDsiPkhBTCBJMlMgPC9zcGFuPnVwZGF0ZTwvc3Bhbj48L2xpPjx1bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiIGxhbmc9IkVOLVVTIj5VcGRhdGUgSTJTIERNQSBmdWxsZHVwbGV4IHByb2Nlc3MgdG8gaGFuZGxlIEkyUyBSeCBhbmQgVHggRE1BIEhhbGYgdHJhbnNmZXIgY29tcGxldGUgY2FsbGJhY2s8L3NwYW4+PC9saT48L3VsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiPjxzcGFuIHN0eWxlPSJmb250LXdlaWdodDogYm9sZDsiPkhBTCBUSU0gPC9zcGFuPnVwZGF0ZTwvc3Bhbj48L2xpPjx1bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij5VcGRhdGUgSEFMX1RJTUV4X09DTl94eHh4KCkgYW5kIEhBTF9USU1FeF9QV01OX3h4eCgpIEFQSSBkZXNjcmlwdGlvbiZuYnNwO3RvIHJlbW92ZSBzdXBwb3J0IG9mIFRJTV9DSEFOTkVMXzQ8L3NwYW4+PC9saT48L3VsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiPjxzcGFuIHN0eWxlPSJmb250LXdlaWdodDogYm9sZDsiPkxMIERNQSA8L3NwYW4+dXBkYXRlPC9zcGFuPjwvbGk+PHVsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiPlVwZGF0ZSB0byBjbGVhciBETUEgZmxhZ3MgdXNpbmcgV1JJVEVfUkVHKCkgaW5zdGVhZCBTRVRfUkVHKCkgQVBJIHRvIGF2b2lkIHJlYWQgYWNjZXNzIHRvIHRoZSBJRkNSIHJlZ2lzdGVyIHRoYXQgaXMgd3JpdGUgb25seS48L3NwYW4+PC9saT48L3VsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiPjxzcGFuIHN0eWxlPSJmb250LXdlaWdodDogYm9sZDsiPkxMIFJUQyA8L3NwYW4+dXBkYXRlPC9zcGFuPjwvbGk+PHVsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiPkZpeCB3YXJuaW5nIHdpdGggc3RhdGljIGFuYWx5emVyPC9zcGFuPjwvbGk+PC91bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij48c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6IGJvbGQ7Ij5MTCBVU0FSVCA8L3NwYW4+dXBkYXRlPC9zcGFuPjwvbGk+PHVsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiPkFkZCBhc3NlcnQgbWFjcm9zIHRvIGNoZWNrIFVTQVJUIEJhdWRSYXRlIHJlZ2lzdGVyPC9zcGFuPjwvbGk+PC91bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij48c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6IGJvbGQ7Ij5MTCBJMkMgPC9zcGFuPnVwZGF0ZTwvc3Bhbj48L2xpPjx1bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsiIGxhbmc9IkVOLVVTIj5SZW5hbWUgSVNfSTJDX0NMT0NLX1NQRUVEKCkKICAgICAgIGFuZCBJU19JMkNfRFVUWV9DWUNMRSgpIHJlc3BlY3RpdmVseSB0byBJU19MTF9JMkNfQ0xPQ0tfU1BFRUQoKSBhbmQKLSAgICAgIElTX0xMX0kyQ19EVVRZX0NZQ0xFKCkgdG8gYXZvaWQgaW5jb21wYXRpYmxlIG1hY3JvcyByZWRlZmluaXRpb24uPC9zcGFuPjwvbGk+PC91bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij48c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6IGJvbGQ7Ij5MTCBUSU0gPC9zcGFuPnVwZGF0ZTwvc3Bhbj48L2xpPjx1bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij5VcGRhdGUgTExfVElNX0VuYWJsZVVwZGF0ZUV2ZW50KCkgQVBJIHRvIGNsZWFyIFVESVMgYml0IGluIFRJTSBDUjEgcmVnaXN0ZXIgaW5zdGVhZCBvZiBzZXR0aW5nIGl0Ljwvc3Bhbj48L2xpPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiPlVwZGF0ZSBMTF9USU1fRGlzYWJsZVVwZGF0ZUV2ZW50KCkgQVBJIHRvIHNldCBVRElTIGJpdCBpbiBUSU0gQ1IxIHJlZ2lzdGVyIGluc3RlYWQgb2YgY2xlYXJpbmcgaXQuPC9zcGFuPjwvbGk+PC91bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij48c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6IGJvbGQ7Ij5MTCBVU0FSVCA8L3NwYW4+dXBkYXRlPC9zcGFuPjwvbGk+PHVsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiPkZpeCBNSVNSQSBlcnJvciB3LyBJU19MTF9VU0FSVF9CUlIoKSBtYWNybzwvc3Bhbj48L2xpPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiPkZpeCB3cm9uZyBjaGVjayB3aGVuIFVBUlQxMCBpbnN0YW5jZSBpcyB1c2VkPC9zcGFuPjwvbGk+PC91bD48L3VsPjxoMyBzdHlsZT0iYmFja2dyb3VuZDogcmdiKDUxLCAxMDIsIDI1NSkgbm9uZSByZXBlYXQgc2Nyb2xsIDAlIDUwJTsgLW1vei1iYWNrZ3JvdW5kLWNsaXA6IC1tb3otaW5pdGlhbDsgLW1vei1iYWNrZ3JvdW5kLW9yaWdpbjogLW1vei1pbml0aWFsOyAtbW96LWJhY2tncm91bmQtaW5saW5lLXBvbGljeTogLW1vei1pbml0aWFsOyBtYXJnaW4tcmlnaHQ6IDUwMHB0OyB3aWR0aDogMTk3cHg7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogQXJpYWw7IGNvbG9yOiB3aGl0ZTsiPlYxLjcuMSAvIDE0LUFwcmlsLTIwMTc8L3NwYW4+PC9oMz48cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luOiA0LjVwdCAwY20gNC41cHQgMThwdDsiPjxiIHN0eWxlPSIiPjx1PjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hOyBjb2xvcjogYmxhY2s7Ij5NYWluCisgICAgICBJU19MTF9JMkNfRFVUWV9DWUNMRSgpIHRvIGF2b2lkIGluY29tcGF0aWJsZSBtYWNyb3MgcmVkZWZpbml0aW9uLjwvc3Bhbj48L2xpPjwvdWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiBib2xkOyI+TEwgVElNIDwvc3Bhbj51cGRhdGU8L3NwYW4+PC9saT48dWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+VXBkYXRlIExMX1RJTV9FbmFibGVVcGRhdGVFdmVudCgpIEFQSSB0byBjbGVhciBVRElTIGJpdCBpbiBUSU0gQ1IxIHJlZ2lzdGVyIGluc3RlYWQgb2Ygc2V0dGluZyBpdC48L3NwYW4+PC9saT48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij5VcGRhdGUgTExfVElNX0Rpc2FibGVVcGRhdGVFdmVudCgpIEFQSSB0byBzZXQgVURJUyBiaXQgaW4gVElNIENSMSByZWdpc3RlciBpbnN0ZWFkIG9mIGNsZWFyaW5nIGl0Ljwvc3Bhbj48L2xpPjwvdWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiBib2xkOyI+TEwgVVNBUlQgPC9zcGFuPnVwZGF0ZTwvc3Bhbj48L2xpPjx1bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij5GaXggTUlTUkEgZXJyb3Igdy8gSVNfTExfVVNBUlRfQlJSKCkgbWFjcm88L3NwYW4+PC9saT48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij5GaXggd3JvbmcgY2hlY2sgd2hlbiBVQVJUMTAgaW5zdGFuY2UgaXMgdXNlZDwvc3Bhbj48L2xpPjwvdWw+PC91bD48aDMgc3R5bGU9ImJhY2tncm91bmQ6IHJnYig1MSwgMTAyLCAyNTUpIG5vbmUgcmVwZWF0IHNjcm9sbCAwJSA1MCU7IC1tb3otYmFja2dyb3VuZC1jbGlwOiBpbml0aWFsOyAtbW96LWJhY2tncm91bmQtb3JpZ2luOiBpbml0aWFsOyAtbW96LWJhY2tncm91bmQtaW5saW5lLXBvbGljeTogaW5pdGlhbDsgbWFyZ2luLXJpZ2h0OiA1MDBwdDsgd2lkdGg6IDE5N3B4OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IEFyaWFsOyBjb2xvcjogd2hpdGU7Ij5WMS43LjEgLyAxNC1BcHJpbC0yMDE3PC9zcGFuPjwvaDM+PHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbjogNC41cHQgMGNtIDQuNXB0IDE4cHQ7Ij48YiBzdHlsZT0iIj48dT48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYTsgY29sb3I6IGJsYWNrOyI+TWFpbgogQ2hhbmdlczwvc3Bhbj48L3U+PC9iPjwvcD4KIAogPHVsIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwaW47IGNvbG9yOiByZ2IoMCwgMCwgMCk7IGZvbnQtZmFtaWx5OiAnVGltZXMgTmV3IFJvbWFuJzsgZm9udC1zaXplOiBtZWRpdW07IGZvbnQtc3R5bGU6IG5vcm1hbDsgZm9udC12YXJpYW50OiBub3JtYWw7IGZvbnQtd2VpZ2h0OiBub3JtYWw7IGxldHRlci1zcGFjaW5nOiBub3JtYWw7IGxpbmUtaGVpZ2h0OiBub3JtYWw7IHRleHQtYWxpZ246IHN0YXJ0OyB0ZXh0LWluZGVudDogMHB4OyB0ZXh0LXRyYW5zZm9ybTogbm9uZTsgd2hpdGUtc3BhY2U6IG5vcm1hbDsgd29yZC1zcGFjaW5nOiAwcHg7IG1hcmdpbi10b3A6IDBjbTsiIHR5cGU9InNxdWFyZSI+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJjb2xvcjogcmdiKDAsIDAsIDApOyBmb250LWZhbWlseTogVmVyZGFuYTsgZm9udC1zaXplOiAxMy4zMzMzcHg7IGZvbnQtc3R5bGU6IG5vcm1hbDsgZm9udC12YXJpYW50OiBub3JtYWw7IGxldHRlci1zcGFjaW5nOiBub3JtYWw7IGxpbmUtaGVpZ2h0OiBub3JtYWw7IHRleHQtYWxpZ246IGxlZnQ7IHRleHQtaW5kZW50OiAwcHg7IHRleHQtdHJhbnNmb3JtOiBub25lOyB3aGl0ZS1zcGFjZTogbm9ybWFsOyB3aWRvd3M6IDE7IHdvcmQtc3BhY2luZzogMHB4OyBkaXNwbGF5OiBpbmxpbmUgISBpbXBvcnRhbnQ7IGZsb2F0OiBub25lOyI+VXBkYXRlIENITSBVc2VyTWFudWFscyB0byBzdXBwb3J0IExMIGRyaXZlcnM8L3NwYW4+PC9saT48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiBWZXJkYW5hLHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTBwdDsiPkdlbmVyYWwgdXBkYXRlcyAKQEAgLTE2NDcsNyArMTY4MSw3IEBACiA8dWwgc3R5bGU9Im1hcmdpbi1ib3R0b206IDBpbjsgY29sb3I6IHJnYigwLCAwLCAwKTsgZm9udC1mYW1pbHk6ICdUaW1lcyBOZXcgUm9tYW4nOyBmb250LXNpemU6IG1lZGl1bTsgZm9udC1zdHlsZTogbm9ybWFsOyBmb250LXZhcmlhbnQ6IG5vcm1hbDsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDsgbGluZS1oZWlnaHQ6IG5vcm1hbDsgdGV4dC1hbGlnbjogc3RhcnQ7IHRleHQtaW5kZW50OiAwcHg7IHRleHQtdHJhbnNmb3JtOiBub25lOyB3aGl0ZS1zcGFjZTogbm9ybWFsOyB3b3JkLXNwYWNpbmc6IDBweDsgbWFyZ2luLXRvcDogMGNtOyIgdHlwZT0ic3F1YXJlIj48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij48c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6IGJvbGQ7Ij5IQUwgUFdSIDwvc3Bhbj51cGRhdGU8L3NwYW4+PC9saT48dWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+SEFMX1BXUkV4X0VudGVyVW5kZXJEcml2ZVNUT1BNb2RlKCkgQVBJOiByZW1vdmUgY2hlY2sgb24gVURSRFkgZmxhZzwvc3Bhbj48L2xpPjwvdWw+PC91bD4KIDx1bCBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMGluOyBjb2xvcjogcmdiKDAsIDAsIDApOyBmb250LWZhbWlseTogJ1RpbWVzIE5ldyBSb21hbic7IGZvbnQtc2l6ZTogbWVkaXVtOyBmb250LXN0eWxlOiBub3JtYWw7IGZvbnQtdmFyaWFudDogbm9ybWFsOyBmb250LXdlaWdodDogbm9ybWFsOyBsZXR0ZXItc3BhY2luZzogbm9ybWFsOyBsaW5lLWhlaWdodDogbm9ybWFsOyB0ZXh0LWFsaWduOiBzdGFydDsgdGV4dC1pbmRlbnQ6IDBweDsgdGV4dC10cmFuc2Zvcm06IG5vbmU7IHdoaXRlLXNwYWNlOiBub3JtYWw7IHdvcmQtc3BhY2luZzogMHB4OyBtYXJnaW4tdG9wOiAwY207IiB0eXBlPSJzcXVhcmUiPjxsaSBzdHlsZT0ibWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyBjb2xvcjogYmxhY2s7IiBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiPjxzcGFuIHN0eWxlPSJmb250LXdlaWdodDogYm9sZDsiPkxMIEFEQyA8L3NwYW4+dXBkYXRlPC9zcGFuPjwvbGk+PHVsPjxsaSBzdHlsZT0ibWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyBjb2xvcjogYmxhY2s7IiBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiPkZpeCB3cm9uZyBBREMgZ3JvdXAgaW5qZWN0ZWQgc2VxdWVuY2UgY29uZmlndXJhdGlvbjwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiPjwvc3Bhbj48L2xpPjwvdWw+PHVsPjx1bD48bGkgc3R5bGU9Im1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsgY29sb3I6IGJsYWNrOyIgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij5MTF9BRENfSU5KX1NldFNlcXVlbmNlclJhbmtzKCkKIGFuZCBMTF9BRENfSU5KX0dldFNlcXVlbmNlclJhbmtzKCkgQVBJJ3MgdXBkYXRlIHRvIHRha2UgaW4KLWNvbnNpZGVyYXRpb24gdGhlIEFEQyBudW1iZXIgb2YgY29udmVyc2lvbnM8L3NwYW4+PC9saT48L3VsPjwvdWw+PHVsPjx1bD48bGkgc3R5bGU9Im1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsgY29sb3I6IGJsYWNrOyIgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij5VcGRhdGUgdGhlJm5ic3A7PC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+ZGVmaW5lZCB2YWx1ZXMgZm9yPC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+IEFEQyBncm91cCBpbmplY3RlZCBzZXFlbmNlciByYW5rcyZuYnNwOzwvc3Bhbj48L2xpPjwvdWw+PC91bD48L3VsPjxoMyBzdHlsZT0iYmFja2dyb3VuZDogcmdiKDUxLCAxMDIsIDI1NSkgbm9uZSByZXBlYXQgc2Nyb2xsIDAlIDUwJTsgLW1vei1iYWNrZ3JvdW5kLWNsaXA6IC1tb3otaW5pdGlhbDsgLW1vei1iYWNrZ3JvdW5kLW9yaWdpbjogLW1vei1pbml0aWFsOyAtbW96LWJhY2tncm91bmQtaW5saW5lLXBvbGljeTogLW1vei1pbml0aWFsOyBtYXJnaW4tcmlnaHQ6IDUwMHB0OyB3aWR0aDogMTk3cHg7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogQXJpYWw7IGNvbG9yOiB3aGl0ZTsiPlYxLjcuMCAvIDE3LUZlYnJ1YXJ5LTIwMTc8L3NwYW4+PC9oMz48cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luOiA0LjVwdCAwY20gNC41cHQgMThwdDsiPjxiIHN0eWxlPSIiPjx1PjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hOyBjb2xvcjogYmxhY2s7Ij5NYWluCitjb25zaWRlcmF0aW9uIHRoZSBBREMgbnVtYmVyIG9mIGNvbnZlcnNpb25zPC9zcGFuPjwvbGk+PC91bD48L3VsPjx1bD48dWw+PGxpIHN0eWxlPSJtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7IGNvbG9yOiBibGFjazsiIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+VXBkYXRlIHRoZSZuYnNwOzwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiPmRlZmluZWQgdmFsdWVzIGZvcjwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiPiBBREMgZ3JvdXAgaW5qZWN0ZWQgc2VxZW5jZXIgcmFua3MmbmJzcDs8L3NwYW4+PC9saT48L3VsPjwvdWw+PC91bD48aDMgc3R5bGU9ImJhY2tncm91bmQ6IHJnYig1MSwgMTAyLCAyNTUpIG5vbmUgcmVwZWF0IHNjcm9sbCAwJSA1MCU7IC1tb3otYmFja2dyb3VuZC1jbGlwOiBpbml0aWFsOyAtbW96LWJhY2tncm91bmQtb3JpZ2luOiBpbml0aWFsOyAtbW96LWJhY2tncm91bmQtaW5saW5lLXBvbGljeTogaW5pdGlhbDsgbWFyZ2luLXJpZ2h0OiA1MDBwdDsgd2lkdGg6IDE5N3B4OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IEFyaWFsOyBjb2xvcjogd2hpdGU7Ij5WMS43LjAgLyAxNy1GZWJydWFyeS0yMDE3PC9zcGFuPjwvaDM+PHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbjogNC41cHQgMGNtIDQuNXB0IDE4cHQ7Ij48YiBzdHlsZT0iIj48dT48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYTsgY29sb3I6IGJsYWNrOyI+TWFpbgogQ2hhbmdlczwvc3Bhbj48L3U+PC9iPjwvcD4KIAogPHVsIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwaW47IGNvbG9yOiByZ2IoMCwgMCwgMCk7IGZvbnQtZmFtaWx5OiAnVGltZXMgTmV3IFJvbWFuJzsgZm9udC1zaXplOiBtZWRpdW07IGZvbnQtc3R5bGU6IG5vcm1hbDsgZm9udC12YXJpYW50OiBub3JtYWw7IGZvbnQtd2VpZ2h0OiBub3JtYWw7IGxldHRlci1zcGFjaW5nOiBub3JtYWw7IGxpbmUtaGVpZ2h0OiBub3JtYWw7IHRleHQtYWxpZ246IHN0YXJ0OyB0ZXh0LWluZGVudDogMHB4OyB0ZXh0LXRyYW5zZm9ybTogbm9uZTsgd2hpdGUtc3BhY2U6IG5vcm1hbDsgd29yZC1zcGFjaW5nOiAwcHg7IG1hcmdpbi10b3A6IDBjbTsiIHR5cGU9InNxdWFyZSI+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJjb2xvcjogcmdiKDAsIDAsIDApOyBmb250LWZhbWlseTogVmVyZGFuYTsgZm9udC1zaXplOiAxMy4zMzMzcHg7IGZvbnQtc3R5bGU6IG5vcm1hbDsgZm9udC12YXJpYW50OiBub3JtYWw7IGZvbnQtd2VpZ2h0OiBib2xkOyBsZXR0ZXItc3BhY2luZzogbm9ybWFsOyBsaW5lLWhlaWdodDogbm9ybWFsOyB0ZXh0LWFsaWduOiBsZWZ0OyB0ZXh0LWluZGVudDogMHB4OyB0ZXh0LXRyYW5zZm9ybTogbm9uZTsgd2hpdGUtc3BhY2U6IG5vcm1hbDsgd2lkb3dzOiAxOyB3b3JkLXNwYWNpbmc6IDBweDsgZGlzcGxheTogaW5saW5lICEgaW1wb3J0YW50OyBmbG9hdDogbm9uZTsiPkFkZCBMb3cgTGF5ZXIgZHJpdmVycyBhbGxvd2luZyBwZXJmb3JtYW5jZSBhbmQgZm9vdHByaW50IG9wdGltaXphdGlvbjwvc3Bhbj48L2xpPjx1bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbjogNC41cHQgMGluOyBmb250LXNpemU6IDEycHQ7IGZvbnQtZmFtaWx5OiAnVGltZXMgTmV3IFJvbWFuJyxzZXJpZjsgY29sb3I6IGJsYWNrOyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmE7Ij5Mb3cKQEAgLTE2NzMsMTAgKzE3MDcsMTAgQEAKIHRoZSZuYnNwOzwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyBjb2xvcjogYmxhY2s7IiBsYW5nPSJFTi1VUyI+STJTIGNsb2NrIGlucHV0IGZyZXF1ZW5jeQogY2FsY3VsYXRpb24mbmJzcDs8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsgY29sb3I6IGJsYWNrOyIgbGFuZz0iRU4tVVMiPnRvIEhBTCBSQ0MgZHJpdmVyLjwvc3Bhbj48L2xpPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsgY29sb3I6IGJsYWNrOyIgbGFuZz0iRU4tVVMiPlVwZGF0ZSB0aGUKIEhBTCBJMlNFeCBkcml2ZXIgdG8ga2VlcCBvbmx5IGZ1bGwgZHVwbGV4IGZlYXR1cmUuPC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7IGNvbG9yOiBibGFjazsiIGxhbmc9IkVOLVVTIj48L3NwYW4+PC9saT48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsgY29sb3I6IGJsYWNrOyIgbGFuZz0iRU4tVVMiPkhBTF9JMlNfSW5pdCgpIEFQSSB1cGRhdGVkIHRvPC9zcGFuPjwvbGk+PHVsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyBjb2xvcjogYmxhY2s7IiBsYW5nPSJFTi1VUyI+Rml4IHdyb25nIEkyUyBjbG9jayBjYWxjdWxhdGlvbiB3aGVuIFBDTSBtb2RlIGlzIHVzZWQuPC9zcGFuPjwvbGk+PC91bD48dWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7IGNvbG9yOiBibGFjazsiIGxhbmc9IkVOLVVTIj5SZXR1cm4gc3RhdGUmbmJzcDs8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsgY29sb3I6IGJsYWNrOyIgbGFuZz0iRU4tVVMiPkhBTF9JMlNfRVJST1JfUFJFU0NBTEVSPC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7IGNvbG9yOiBibGFjazsiIGxhbmc9IkVOLVVTIj4mbmJzcDt3aGVuIHRoZSBJMlMgY2xvY2sgaXMgd3JvbmdseSBjb25maWd1cmVkPC9zcGFuPjwvbGk+PC91bD48L3VsPjwvdWw+Ci08dWwgc3R5bGU9Im1hcmdpbi1ib3R0b206IDBpbjsgY29sb3I6IHJnYigwLCAwLCAwKTsgZm9udC1mYW1pbHk6ICdUaW1lcyBOZXcgUm9tYW4nOyBmb250LXNpemU6IG1lZGl1bTsgZm9udC1zdHlsZTogbm9ybWFsOyBmb250LXZhcmlhbnQ6IG5vcm1hbDsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDsgbGluZS1oZWlnaHQ6IG5vcm1hbDsgdGV4dC1hbGlnbjogc3RhcnQ7IHRleHQtaW5kZW50OiAwcHg7IHRleHQtdHJhbnNmb3JtOiBub25lOyB3aGl0ZS1zcGFjZTogbm9ybWFsOyB3b3JkLXNwYWNpbmc6IDBweDsgbWFyZ2luLXRvcDogMGNtOyIgdHlwZT0ic3F1YXJlIj48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImNvbG9yOiByZ2IoMCwgMCwgMCk7IGZvbnQtZmFtaWx5OiBWZXJkYW5hLHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTMuMzMzM3B4OyBmb250LXN0eWxlOiBub3JtYWw7IGZvbnQtdmFyaWFudDogbm9ybWFsOyBmb250LXdlaWdodDogbm9ybWFsOyBsZXR0ZXItc3BhY2luZzogbm9ybWFsOyBsaW5lLWhlaWdodDogbm9ybWFsOyB0ZXh0LWFsaWduOiBsZWZ0OyB0ZXh0LWluZGVudDogMHB4OyB0ZXh0LXRyYW5zZm9ybTogbm9uZTsgd2hpdGUtc3BhY2U6IG5vcm1hbDsgd2lkb3dzOiAxOyB3b3JkLXNwYWNpbmc6IDBweDsgZGlzcGxheTogaW5saW5lICEgaW1wb3J0YW50OyBmbG9hdDogbm9uZTsiPjxzcGFuIHN0eWxlPSJmb250LXdlaWdodDogYm9sZDsiPkhBTCBMVERDIDwvc3Bhbj51cGRhdGU8L3NwYW4+PC9saT48dWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAnU2Vnb2UgVUknOyBjb2xvcjogcmdiKDAsIDAsIDApOyBkaXJlY3Rpb246IGx0cjsiIGRpcj0ibHRyIj5PcHRpbWl6ZSBIQUxfTFREQ19JUlFIYW5kbGVyKCkgZnVuY3Rpb24gYnkgdXNpbmcgZGlyZWN0IHJlZ2lzdGVyIHJlYWQ8L3NwYW4+PC9saT48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICdTZWdvZSBVSSc7IGNvbG9yOiByZ2IoMCwgMCwgMCk7IGRpcmVjdGlvbjogbHRyOyIgZGlyPSJsdHIiPlJlbmFtZSB0aGUgZm9sbG93aW5nIEFQSSdzPC9zcGFuPjwvbGk+PHVsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJ1NlZ29lIFVJJzsgY29sb3I6IHJnYigwLCAwLCAwKTsgZGlyZWN0aW9uOiBsdHI7IiBkaXI9Imx0ciI+SEFMX0xURENfUmVsYW9kKCkgYnkgSEFMX0xURENfUmVsb2FkKCk8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICdTZWdvZSBVSSc7IGNvbG9yOiByZ2IoMCwgMCwgMCk7IGRpcmVjdGlvbjogbHRyOyIgZGlyPSJsdHIiPiZuYnNwOzwvc3Bhbj48L2xpPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJ1NlZ29lIFVJJzsgY29sb3I6IHJnYigwLCAwLCAwKTsgZGlyZWN0aW9uOiBsdHI7IiBkaXI9Imx0ciI+SEFMX0xURENfU3RydWN0SW5pdEZyb21WaWRlb0NvbmZpZygpIGJ5IEhBTF9MVERDRXhfU3RydWN0SW5pdEZyb21WaWRlb0NvbmZpZygpPC9zcGFuPjwvbGk+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAnU2Vnb2UgVUknOyBjb2xvcjogcmdiKDAsIDAsIDApOyBkaXJlY3Rpb246IGx0cjsiIGRpcj0ibHRyIj5IQUxfTFREQ19TdHJ1Y3RJbml0RnJvbUFkYXB0ZWRDb21tYW5kQ29uZmlnKCkgYnkgSEFMX0xURENFeF9TdHJ1Y3RJbml0RnJvbUFkYXB0ZWRDb21tYW5kQ29uZmlnKCk8L3NwYW4+PC9saT48L3VsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJ1NlZ29lIFVJJzsgY29sb3I6IHJnYigwLCAwLCAwKTsgZGlyZWN0aW9uOiBsdHI7IiBkaXI9Imx0ciI+QWRkIG5ldyBkZWZpbmVzIGZvciBMVERDIGxheWVycyAoTFREQ19MQVlFUl8xIC8gTFREQ19MQVlFUl8yKTwvc3Bhbj48L2xpPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJ1NlZ29lIFVJJzsgY29sb3I6IHJnYigwLCAwLCAwKTsgZGlyZWN0aW9uOiBsdHI7IiBkaXI9Imx0ciI+UmVtb3ZlIHVudXNlZCBhc3NlcnRzPC9zcGFuPjwvbGk+PC91bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbjogNC41cHQgMGluOyBmb250LXNpemU6IDEycHQ7IGZvbnQtZmFtaWx5OiAnVGltZXMgTmV3IFJvbWFuJyxzZXJpZjsgY29sb3I6IGJsYWNrOyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiBWZXJkYW5hLHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTBwdDsiPjxzcGFuIHN0eWxlPSJmb250LXdlaWdodDogYm9sZDsiPkhBTCBVU0I8L3NwYW4+PHNwYW4gY2xhc3M9IkFwcGxlLWNvbnZlcnRlZC1zcGFjZSI+IDxzcGFuIHN0eWxlPSJmb250LXdlaWdodDogYm9sZDsiPlBDRDwvc3Bhbj4gPC9zcGFuPnVwZGF0ZTwvc3Bhbj48L2xpPjx1bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbjogNC41cHQgMGluOyBmb250LXNpemU6IDEycHQ7IGZvbnQtZmFtaWx5OiAnVGltZXMgTmV3IFJvbWFuJyxzZXJpZjsgY29sb3I6IGJsYWNrOyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiBWZXJkYW5hLHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTBwdDsiPkZsdXNoIGFsbCBUWCBGSUZPcyBvbiBVU0IgUmVzZXQ8L3NwYW4+PC9saT48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbjogNC41cHQgMGluOyBmb250LXNpemU6IDEycHQ7IGZvbnQtZmFtaWx5OiAnVGltZXMgTmV3IFJvbWFuJyxzZXJpZjsgY29sb3I6IGJsYWNrOyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiBWZXJkYW5hLHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTBwdDsiPlJlbW92ZSBMb2NrIG1lY2hhbmlzbSBmcm9tIEhBTF9QQ0RfRVBfVHJhbnNtaXQoKSBhbmQgSEFMX1BDRF9FUF9SZWNlaXZlKCkgQVBJJ3M8L3NwYW4+PC9saT48L3VsPjwvdWw+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICdTZWdvZSBVSSc7IGNvbG9yOiByZ2IoMCwgMCwgMCk7IGRpcmVjdGlvbjogbHRyOyIgZGlyPSJsdHIiPjwvc3Bhbj48dWwgc3R5bGU9Im1hcmdpbi1ib3R0b206IDBpbjsgY29sb3I6IHJnYigwLCAwLCAwKTsgZm9udC1mYW1pbHk6ICdUaW1lcyBOZXcgUm9tYW4nOyBmb250LXNpemU6IG1lZGl1bTsgZm9udC1zdHlsZTogbm9ybWFsOyBmb250LXZhcmlhbnQ6IG5vcm1hbDsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDsgbGluZS1oZWlnaHQ6IG5vcm1hbDsgdGV4dC1hbGlnbjogc3RhcnQ7IHRleHQtaW5kZW50OiAwcHg7IHRleHQtdHJhbnNmb3JtOiBub25lOyB3aGl0ZS1zcGFjZTogbm9ybWFsOyB3b3JkLXNwYWNpbmc6IDBweDsgbWFyZ2luLXRvcDogMGNtOyIgdHlwZT0ic3F1YXJlIj48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbjogNC41cHQgMGluOyBmb250LXNpemU6IDEycHQ7IGZvbnQtZmFtaWx5OiAnVGltZXMgTmV3IFJvbWFuJyxzZXJpZjsgY29sb3I6IGJsYWNrOyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiBWZXJkYW5hLHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTBwdDsiPjxzcGFuIHN0eWxlPSJmb250LXdlaWdodDogYm9sZDsiPkxMIFVTQjwvc3Bhbj48c3BhbiBjbGFzcz0iQXBwbGUtY29udmVydGVkLXNwYWNlIj4gPC9zcGFuPnVwZGF0ZTwvc3Bhbj48L2xpPjx1bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbjogNC41cHQgMGluOyBmb250LXNpemU6IDEycHQ7IGZvbnQtZmFtaWx5OiAnVGltZXMgTmV3IFJvbWFuJyxzZXJpZjsgY29sb3I6IGJsYWNrOyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiBWZXJkYW5hLHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTBwdDsiPkVuYWJsZSBETUEgQnVyc3QgbW9kZSBmb3IgVVNCIE9URyBIUzwvc3Bhbj48L2xpPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iY29sb3I6IHJnYigwLCAwLCAwKTsgZm9udC1mYW1pbHk6IFZlcmRhbmEsc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMy4zMzMzcHg7IGZvbnQtc3R5bGU6IG5vcm1hbDsgZm9udC12YXJpYW50OiBub3JtYWw7IGZvbnQtd2VpZ2h0OiBub3JtYWw7IGxldHRlci1zcGFjaW5nOiBub3JtYWw7IGxpbmUtaGVpZ2h0OiBub3JtYWw7IHRleHQtYWxpZ246IGxlZnQ7IHRleHQtaW5kZW50OiAwcHg7IHRleHQtdHJhbnNmb3JtOiBub25lOyB3aGl0ZS1zcGFjZTogbm9ybWFsOyB3aWRvd3M6IDE7IHdvcmQtc3BhY2luZzogMHB4OyBkaXNwbGF5OiBpbmxpbmUgISBpbXBvcnRhbnQ7IGZsb2F0OiBub25lOyI+Rml4IFNEIGNhcmQgZGV0ZWN0aW9uIGlzc3VlPC9zcGFuPjwvbGk+PC91bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbjogNC41cHQgMGluOyBmb250LXNpemU6IDEycHQ7IGZvbnQtZmFtaWx5OiAnVGltZXMgTmV3IFJvbWFuJyxzZXJpZjsgY29sb3I6IGJsYWNrOyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiBWZXJkYW5hLHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTBwdDsiPjxzcGFuIHN0eWxlPSJmb250LXdlaWdodDogYm9sZDsiPkxMIFNETU1DPC9zcGFuPjxzcGFuIGNsYXNzPSJBcHBsZS1jb252ZXJ0ZWQtc3BhY2UiPiZuYnNwOzwvc3Bhbj51cGRhdGU8L3NwYW4+PC9saT48dWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW46IDQuNXB0IDBpbjsgZm9udC1zaXplOiAxMnB0OyBmb250LWZhbWlseTogJ1RpbWVzIE5ldyBSb21hbicsc2VyaWY7IGNvbG9yOiBibGFjazsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyBmb250LXNpemU6IDEwcHQ7Ij5BZGQgbmV3IFNETU1DX0NtZFNERXJhc2VTdGFydEFkZCwgU0RNTUNfQ21kU0RFcmFzZUVuZEFkZCwgU0RNTUNfQ21kT3BDb25kaXRpb24gYW5kIFNETU1DX0NtZFN3aXRjaCBmdW5jdGlvbnM8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiBWZXJkYW5hLHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTBwdDsiPjwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7QXJpYWwmcXVvdDssc2Fucy1zZXJpZjsgY29sb3I6IHJnYigwLCAzMiwgODIpOyIgbGFuZz0iRU4tVVMiPjxzcGFuIHN0eWxlPSIiPjwvc3Bhbj48L3NwYW4+PC9saT48L3VsPjwvdWw+PGgzIHN0eWxlPSJiYWNrZ3JvdW5kOiByZ2IoNTEsIDEwMiwgMjU1KSBub25lIHJlcGVhdCBzY3JvbGwgMCUgNTAlOyAtbW96LWJhY2tncm91bmQtY2xpcDogLW1vei1pbml0aWFsOyAtbW96LWJhY2tncm91bmQtb3JpZ2luOiAtbW96LWluaXRpYWw7IC1tb3otYmFja2dyb3VuZC1pbmxpbmUtcG9saWN5OiAtbW96LWluaXRpYWw7IG1hcmdpbi1yaWdodDogNTAwcHQ7IHdpZHRoOiAxODBweDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBBcmlhbDsgY29sb3I6IHdoaXRlOyI+VjEuNi4wIC8gMDQtTm92ZW1iZXItMjAxNjwvc3Bhbj48L2gzPjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW46IDQuNXB0IDBjbSA0LjVwdCAxOHB0OyI+PGIgc3R5bGU9IiI+PHU+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmE7IGNvbG9yOiBibGFjazsiPk1haW4KKzx1bCBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMGluOyBjb2xvcjogcmdiKDAsIDAsIDApOyBmb250LWZhbWlseTogJ1RpbWVzIE5ldyBSb21hbic7IGZvbnQtc2l6ZTogbWVkaXVtOyBmb250LXN0eWxlOiBub3JtYWw7IGZvbnQtdmFyaWFudDogbm9ybWFsOyBmb250LXdlaWdodDogbm9ybWFsOyBsZXR0ZXItc3BhY2luZzogbm9ybWFsOyBsaW5lLWhlaWdodDogbm9ybWFsOyB0ZXh0LWFsaWduOiBzdGFydDsgdGV4dC1pbmRlbnQ6IDBweDsgdGV4dC10cmFuc2Zvcm06IG5vbmU7IHdoaXRlLXNwYWNlOiBub3JtYWw7IHdvcmQtc3BhY2luZzogMHB4OyBtYXJnaW4tdG9wOiAwY207IiB0eXBlPSJzcXVhcmUiPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iY29sb3I6IHJnYigwLCAwLCAwKTsgZm9udC1mYW1pbHk6IFZlcmRhbmEsc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMy4zMzMzcHg7IGZvbnQtc3R5bGU6IG5vcm1hbDsgZm9udC12YXJpYW50OiBub3JtYWw7IGZvbnQtd2VpZ2h0OiBub3JtYWw7IGxldHRlci1zcGFjaW5nOiBub3JtYWw7IGxpbmUtaGVpZ2h0OiBub3JtYWw7IHRleHQtYWxpZ246IGxlZnQ7IHRleHQtaW5kZW50OiAwcHg7IHRleHQtdHJhbnNmb3JtOiBub25lOyB3aGl0ZS1zcGFjZTogbm9ybWFsOyB3aWRvd3M6IDE7IHdvcmQtc3BhY2luZzogMHB4OyBkaXNwbGF5OiBpbmxpbmUgISBpbXBvcnRhbnQ7IGZsb2F0OiBub25lOyI+PHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiBib2xkOyI+SEFMIExUREMgPC9zcGFuPnVwZGF0ZTwvc3Bhbj48L2xpPjx1bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICdTZWdvZSBVSSc7IGNvbG9yOiByZ2IoMCwgMCwgMCk7IGRpcmVjdGlvbjogbHRyOyIgZGlyPSJsdHIiPk9wdGltaXplIEhBTF9MVERDX0lSUUhhbmRsZXIoKSBmdW5jdGlvbiBieSB1c2luZyBkaXJlY3QgcmVnaXN0ZXIgcmVhZDwvc3Bhbj48L2xpPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJ1NlZ29lIFVJJzsgY29sb3I6IHJnYigwLCAwLCAwKTsgZGlyZWN0aW9uOiBsdHI7IiBkaXI9Imx0ciI+UmVuYW1lIHRoZSBmb2xsb3dpbmcgQVBJJ3M8L3NwYW4+PC9saT48dWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAnU2Vnb2UgVUknOyBjb2xvcjogcmdiKDAsIDAsIDApOyBkaXJlY3Rpb246IGx0cjsiIGRpcj0ibHRyIj5IQUxfTFREQ19SZWxhb2QoKSBieSBIQUxfTFREQ19SZWxvYWQoKTwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJ1NlZ29lIFVJJzsgY29sb3I6IHJnYigwLCAwLCAwKTsgZGlyZWN0aW9uOiBsdHI7IiBkaXI9Imx0ciI+Jm5ic3A7PC9zcGFuPjwvbGk+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAnU2Vnb2UgVUknOyBjb2xvcjogcmdiKDAsIDAsIDApOyBkaXJlY3Rpb246IGx0cjsiIGRpcj0ibHRyIj5IQUxfTFREQ19TdHJ1Y3RJbml0RnJvbVZpZGVvQ29uZmlnKCkgYnkgSEFMX0xURENFeF9TdHJ1Y3RJbml0RnJvbVZpZGVvQ29uZmlnKCk8L3NwYW4+PC9saT48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICdTZWdvZSBVSSc7IGNvbG9yOiByZ2IoMCwgMCwgMCk7IGRpcmVjdGlvbjogbHRyOyIgZGlyPSJsdHIiPkhBTF9MVERDX1N0cnVjdEluaXRGcm9tQWRhcHRlZENvbW1hbmRDb25maWcoKSBieSBIQUxfTFREQ0V4X1N0cnVjdEluaXRGcm9tQWRhcHRlZENvbW1hbmRDb25maWcoKTwvc3Bhbj48L2xpPjwvdWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAnU2Vnb2UgVUknOyBjb2xvcjogcmdiKDAsIDAsIDApOyBkaXJlY3Rpb246IGx0cjsiIGRpcj0ibHRyIj5BZGQgbmV3IGRlZmluZXMgZm9yIExUREMgbGF5ZXJzIChMVERDX0xBWUVSXzEgLyBMVERDX0xBWUVSXzIpPC9zcGFuPjwvbGk+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAnU2Vnb2UgVUknOyBjb2xvcjogcmdiKDAsIDAsIDApOyBkaXJlY3Rpb246IGx0cjsiIGRpcj0ibHRyIj5SZW1vdmUgdW51c2VkIGFzc2VydHM8L3NwYW4+PC9saT48L3VsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luOiA0LjVwdCAwaW47IGZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6ICdUaW1lcyBOZXcgUm9tYW4nLHNlcmlmOyBjb2xvcjogYmxhY2s7Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6IFZlcmRhbmEsc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMHB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiBib2xkOyI+SEFMIFVTQjwvc3Bhbj48c3BhbiBjbGFzcz0iQXBwbGUtY29udmVydGVkLXNwYWNlIj4gPHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiBib2xkOyI+UENEPC9zcGFuPiA8L3NwYW4+dXBkYXRlPC9zcGFuPjwvbGk+PHVsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luOiA0LjVwdCAwaW47IGZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6ICdUaW1lcyBOZXcgUm9tYW4nLHNlcmlmOyBjb2xvcjogYmxhY2s7Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6IFZlcmRhbmEsc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMHB0OyI+Rmx1c2ggYWxsIFRYIEZJRk9zIG9uIFVTQiBSZXNldDwvc3Bhbj48L2xpPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luOiA0LjVwdCAwaW47IGZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6ICdUaW1lcyBOZXcgUm9tYW4nLHNlcmlmOyBjb2xvcjogYmxhY2s7Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6IFZlcmRhbmEsc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMHB0OyI+UmVtb3ZlIExvY2sgbWVjaGFuaXNtIGZyb20gSEFMX1BDRF9FUF9UcmFuc21pdCgpIGFuZCBIQUxfUENEX0VQX1JlY2VpdmUoKSBBUEknczwvc3Bhbj48L2xpPjwvdWw+PC91bD48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJ1NlZ29lIFVJJzsgY29sb3I6IHJnYigwLCAwLCAwKTsgZGlyZWN0aW9uOiBsdHI7IiBkaXI9Imx0ciI+PC9zcGFuPjx1bCBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMGluOyBjb2xvcjogcmdiKDAsIDAsIDApOyBmb250LWZhbWlseTogJ1RpbWVzIE5ldyBSb21hbic7IGZvbnQtc2l6ZTogbWVkaXVtOyBmb250LXN0eWxlOiBub3JtYWw7IGZvbnQtdmFyaWFudDogbm9ybWFsOyBmb250LXdlaWdodDogbm9ybWFsOyBsZXR0ZXItc3BhY2luZzogbm9ybWFsOyBsaW5lLWhlaWdodDogbm9ybWFsOyB0ZXh0LWFsaWduOiBzdGFydDsgdGV4dC1pbmRlbnQ6IDBweDsgdGV4dC10cmFuc2Zvcm06IG5vbmU7IHdoaXRlLXNwYWNlOiBub3JtYWw7IHdvcmQtc3BhY2luZzogMHB4OyBtYXJnaW4tdG9wOiAwY207IiB0eXBlPSJzcXVhcmUiPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luOiA0LjVwdCAwaW47IGZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6ICdUaW1lcyBOZXcgUm9tYW4nLHNlcmlmOyBjb2xvcjogYmxhY2s7Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6IFZlcmRhbmEsc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMHB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiBib2xkOyI+TEwgVVNCPC9zcGFuPjxzcGFuIGNsYXNzPSJBcHBsZS1jb252ZXJ0ZWQtc3BhY2UiPiA8L3NwYW4+dXBkYXRlPC9zcGFuPjwvbGk+PHVsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luOiA0LjVwdCAwaW47IGZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6ICdUaW1lcyBOZXcgUm9tYW4nLHNlcmlmOyBjb2xvcjogYmxhY2s7Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6IFZlcmRhbmEsc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMHB0OyI+RW5hYmxlIERNQSBCdXJzdCBtb2RlIGZvciBVU0IgT1RHIEhTPC9zcGFuPjwvbGk+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJjb2xvcjogcmdiKDAsIDAsIDApOyBmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyBmb250LXNpemU6IDEzLjMzMzNweDsgZm9udC1zdHlsZTogbm9ybWFsOyBmb250LXZhcmlhbnQ6IG5vcm1hbDsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDsgbGluZS1oZWlnaHQ6IG5vcm1hbDsgdGV4dC1hbGlnbjogbGVmdDsgdGV4dC1pbmRlbnQ6IDBweDsgdGV4dC10cmFuc2Zvcm06IG5vbmU7IHdoaXRlLXNwYWNlOiBub3JtYWw7IHdpZG93czogMTsgd29yZC1zcGFjaW5nOiAwcHg7IGRpc3BsYXk6IGlubGluZSAhIGltcG9ydGFudDsgZmxvYXQ6IG5vbmU7Ij5GaXggU0QgY2FyZCBkZXRlY3Rpb24gaXNzdWU8L3NwYW4+PC9saT48L3VsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luOiA0LjVwdCAwaW47IGZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6ICdUaW1lcyBOZXcgUm9tYW4nLHNlcmlmOyBjb2xvcjogYmxhY2s7Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6IFZlcmRhbmEsc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMHB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiBib2xkOyI+TEwgU0RNTUM8L3NwYW4+PHNwYW4gY2xhc3M9IkFwcGxlLWNvbnZlcnRlZC1zcGFjZSI+Jm5ic3A7PC9zcGFuPnVwZGF0ZTwvc3Bhbj48L2xpPjx1bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbjogNC41cHQgMGluOyBmb250LXNpemU6IDEycHQ7IGZvbnQtZmFtaWx5OiAnVGltZXMgTmV3IFJvbWFuJyxzZXJpZjsgY29sb3I6IGJsYWNrOyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiBWZXJkYW5hLHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTBwdDsiPkFkZCBuZXcgU0RNTUNfQ21kU0RFcmFzZVN0YXJ0QWRkLCBTRE1NQ19DbWRTREVyYXNlRW5kQWRkLCBTRE1NQ19DbWRPcENvbmRpdGlvbiBhbmQgU0RNTUNfQ21kU3dpdGNoIGZ1bmN0aW9uczwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6IFZlcmRhbmEsc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMHB0OyI+PC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtBcmlhbCZxdW90OyxzYW5zLXNlcmlmOyBjb2xvcjogcmdiKDAsIDMyLCA4Mik7IiBsYW5nPSJFTi1VUyI+PHNwYW4gc3R5bGU9IiI+PC9zcGFuPjwvc3Bhbj48L2xpPjwvdWw+PC91bD48aDMgc3R5bGU9ImJhY2tncm91bmQ6IHJnYig1MSwgMTAyLCAyNTUpIG5vbmUgcmVwZWF0IHNjcm9sbCAwJSA1MCU7IC1tb3otYmFja2dyb3VuZC1jbGlwOiBpbml0aWFsOyAtbW96LWJhY2tncm91bmQtb3JpZ2luOiBpbml0aWFsOyAtbW96LWJhY2tncm91bmQtaW5saW5lLXBvbGljeTogaW5pdGlhbDsgbWFyZ2luLXJpZ2h0OiA1MDBwdDsgd2lkdGg6IDE4MHB4OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IEFyaWFsOyBjb2xvcjogd2hpdGU7Ij5WMS42LjAgLyAwNC1Ob3ZlbWJlci0yMDE2PC9zcGFuPjwvaDM+PHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbjogNC41cHQgMGNtIDQuNXB0IDE4cHQ7Ij48YiBzdHlsZT0iIj48dT48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYTsgY29sb3I6IGJsYWNrOyI+TWFpbgogQ2hhbmdlczwvc3Bhbj48L3U+PC9iPjwvcD4KIAotPHVsIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwaW47IGNvbG9yOiByZ2IoMCwgMCwgMCk7IGZvbnQtZmFtaWx5OiAnVGltZXMgTmV3IFJvbWFuJzsgZm9udC1zaXplOiBtZWRpdW07IGZvbnQtc3R5bGU6IG5vcm1hbDsgZm9udC12YXJpYW50OiBub3JtYWw7IGZvbnQtd2VpZ2h0OiBub3JtYWw7IGxldHRlci1zcGFjaW5nOiBub3JtYWw7IGxpbmUtaGVpZ2h0OiBub3JtYWw7IHRleHQtYWxpZ246IHN0YXJ0OyB0ZXh0LWluZGVudDogMHB4OyB0ZXh0LXRyYW5zZm9ybTogbm9uZTsgd2hpdGUtc3BhY2U6IG5vcm1hbDsgd29yZC1zcGFjaW5nOiAwcHg7IG1hcmdpbi10b3A6IDBjbTsiIHR5cGU9InNxdWFyZSI+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJjb2xvcjogcmdiKDAsIDAsIDApOyBmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyBmb250LXNpemU6IDEzLjMzMzNweDsgZm9udC1zdHlsZTogbm9ybWFsOyBmb250LXZhcmlhbnQ6IG5vcm1hbDsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDsgbGluZS1oZWlnaHQ6IG5vcm1hbDsgdGV4dC1hbGlnbjogbGVmdDsgdGV4dC1pbmRlbnQ6IDBweDsgdGV4dC10cmFuc2Zvcm06IG5vbmU7IHdoaXRlLXNwYWNlOiBub3JtYWw7IHdpZG93czogMTsgd29yZC1zcGFjaW5nOiAwcHg7IGRpc3BsYXk6IGlubGluZSAhIGltcG9ydGFudDsgZmxvYXQ6IG5vbmU7Ij5BZGQ8c3BhbiBjbGFzcz0iQXBwbGUtY29udmVydGVkLXNwYWNlIj4mbmJzcDs8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hLHNhbnMtc2VyaWY7Ij5zdXBwb3J0IG9mPHNwYW4gY2xhc3M9IkFwcGxlLWNvbnZlcnRlZC1zcGFjZSI+Jm5ic3A7PC9zcGFuPjxiPlNUTTMyRjQxM3h4IGFuZCZuYnNwOzwvYj48L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmEsc2Fucy1zZXJpZjsiPjxiPlNUTTMyRjQyM3h4PC9iPjwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyI+IGRldmljZXM8L3NwYW4+PC9saT48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmEsc2Fucy1zZXJpZjsiPkdlbmVyYWwgdXBkYXRlcyB0byBmaXgga25vd24gZGVmZWN0cyBhbmQgZW5oYW5jZW1lbnRzIGltcGxlbWVudGF0aW9uPC9zcGFuPjwvbGk+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJjb2xvcjogcmdiKDAsIDAsIDApOyBmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyBmb250LXNpemU6IDEzLjMzMzNweDsgZm9udC1zdHlsZTogbm9ybWFsOyBmb250LXZhcmlhbnQ6IG5vcm1hbDsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDsgbGluZS1oZWlnaHQ6IG5vcm1hbDsgdGV4dC1hbGlnbjogbGVmdDsgdGV4dC1pbmRlbnQ6IDBweDsgdGV4dC10cmFuc2Zvcm06IG5vbmU7IHdoaXRlLXNwYWNlOiBub3JtYWw7IHdpZG93czogMTsgd29yZC1zcGFjaW5nOiAwcHg7IGRpc3BsYXk6IGlubGluZSAhIGltcG9ydGFudDsgZmxvYXQ6IG5vbmU7Ij48c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6IGJvbGQ7Ij5IQUwgQ0FOPC9zcGFuPiB1cGRhdGU8L3NwYW4+PC9saT48dWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7IiBsYW5nPSJFTi1VUyI+VXBkYXRlIHRvIGFkZCB0aGUgc3VwcG9ydCBvZiAzIENBTiBtYW5hZ2VtZW50PC9zcGFuPjwvbGk+PC91bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImNvbG9yOiByZ2IoMCwgMCwgMCk7IGZvbnQtZmFtaWx5OiBWZXJkYW5hLHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTMuMzMzM3B4OyBmb250LXN0eWxlOiBub3JtYWw7IGZvbnQtdmFyaWFudDogbm9ybWFsOyBmb250LXdlaWdodDogbm9ybWFsOyBsZXR0ZXItc3BhY2luZzogbm9ybWFsOyBsaW5lLWhlaWdodDogbm9ybWFsOyB0ZXh0LWFsaWduOiBsZWZ0OyB0ZXh0LWluZGVudDogMHB4OyB0ZXh0LXRyYW5zZm9ybTogbm9uZTsgd2hpdGUtc3BhY2U6IG5vcm1hbDsgd2lkb3dzOiAxOyB3b3JkLXNwYWNpbmc6IDBweDsgZGlzcGxheTogaW5saW5lICEgaW1wb3J0YW50OyBmbG9hdDogbm9uZTsiPjxzcGFuIHN0eWxlPSJmb250LXdlaWdodDogYm9sZDsiPkhBTCBDUllQPC9zcGFuPiB1cGRhdGU8L3NwYW4+PC9saT48dWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7IiBsYW5nPSJFTi1VUyI+VXBkYXRlIHRvIGFkZCB0aGUgc3VwcG9ydCBvZiBBRVMgZmVhdHVyZXM8L3NwYW4+PC9saT48L3VsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iY29sb3I6IHJnYigwLCAwLCAwKTsgZm9udC1mYW1pbHk6IFZlcmRhbmEsc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMy4zMzMzcHg7IGZvbnQtc3R5bGU6IG5vcm1hbDsgZm9udC12YXJpYW50OiBub3JtYWw7IGZvbnQtd2VpZ2h0OiBub3JtYWw7IGxldHRlci1zcGFjaW5nOiBub3JtYWw7IGxpbmUtaGVpZ2h0OiBub3JtYWw7IHRleHQtYWxpZ246IGxlZnQ7IHRleHQtaW5kZW50OiAwcHg7IHRleHQtdHJhbnNmb3JtOiBub25lOyB3aGl0ZS1zcGFjZTogbm9ybWFsOyB3aWRvd3M6IDE7IHdvcmQtc3BhY2luZzogMHB4OyBkaXNwbGF5OiBpbmxpbmUgISBpbXBvcnRhbnQ7IGZsb2F0OiBub25lOyI+PHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiBib2xkOyI+SEFMIERGU0RNPC9zcGFuPiB1cGRhdGU8L3NwYW4+PC9saT48dWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW46IDQuNXB0IDBpbjsgZm9udC1zaXplOiAxMnB0OyBmb250LWZhbWlseTogJ1RpbWVzIE5ldyBSb21hbicsc2VyaWY7IGNvbG9yOiBibGFjazsiPjxzcGFuIHN0eWxlPSJjb2xvcjogcmdiKDAsIDAsIDApOyBmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyBmb250LXNpemU6IDEzLjMzMzNweDsgZm9udC1zdHlsZTogbm9ybWFsOyBmb250LXZhcmlhbnQ6IG5vcm1hbDsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDsgbGluZS1oZWlnaHQ6IG5vcm1hbDsgdGV4dC1hbGlnbjogbGVmdDsgdGV4dC1pbmRlbnQ6IDBweDsgdGV4dC10cmFuc2Zvcm06IG5vbmU7IHdoaXRlLXNwYWNlOiBub3JtYWw7IHdpZG93czogMTsgd29yZC1zcGFjaW5nOiAwcHg7IGZsb2F0OiBub25lOyBkaXNwbGF5OiBpbmxpbmUgISBpbXBvcnRhbnQ7Ij5BZGQgZGVmaW5pdGlvbnMgZm9yIG5ldyBleHRlcm5hbCB0cmlnZ2VyIGZpbHRlcnM8L3NwYW4+PC9saT48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbjogNC41cHQgMGluOyBmb250LXNpemU6IDEycHQ7IGZvbnQtZmFtaWx5OiAnVGltZXMgTmV3IFJvbWFuJyxzZXJpZjsgY29sb3I6IGJsYWNrOyI+PHNwYW4gc3R5bGU9ImNvbG9yOiByZ2IoMCwgMCwgMCk7IGZvbnQtZmFtaWx5OiBWZXJkYW5hLHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTMuMzMzM3B4OyBmb250LXN0eWxlOiBub3JtYWw7IGZvbnQtdmFyaWFudDogbm9ybWFsOyBmb250LXdlaWdodDogbm9ybWFsOyBsZXR0ZXItc3BhY2luZzogbm9ybWFsOyBsaW5lLWhlaWdodDogbm9ybWFsOyB0ZXh0LWFsaWduOiBsZWZ0OyB0ZXh0LWluZGVudDogMHB4OyB0ZXh0LXRyYW5zZm9ybTogbm9uZTsgd2hpdGUtc3BhY2U6IG5vcm1hbDsgd2lkb3dzOiAxOyB3b3JkLXNwYWNpbmc6IDBweDsgZmxvYXQ6IG5vbmU7IGRpc3BsYXk6IGlubGluZSAhIGltcG9ydGFudDsiPkFkZCBkZWZpbml0aW9uIGZvciBuZXcgQ2hhbm5lbHMgNCwgNSwgNiBhbmQgNzwvc3Bhbj48L2xpPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luOiA0LjVwdCAwaW47IGZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6ICdUaW1lcyBOZXcgUm9tYW4nLHNlcmlmOyBjb2xvcjogYmxhY2s7Ij48c3BhbiBzdHlsZT0iY29sb3I6IHJnYigwLCAwLCAwKTsgZm9udC1mYW1pbHk6IFZlcmRhbmEsc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMy4zMzMzcHg7IGZvbnQtc3R5bGU6IG5vcm1hbDsgZm9udC12YXJpYW50OiBub3JtYWw7IGZvbnQtd2VpZ2h0OiBub3JtYWw7IGxldHRlci1zcGFjaW5nOiBub3JtYWw7IGxpbmUtaGVpZ2h0OiBub3JtYWw7IHRleHQtYWxpZ246IGxlZnQ7IHRleHQtaW5kZW50OiAwcHg7IHRleHQtdHJhbnNmb3JtOiBub25lOyB3aGl0ZS1zcGFjZTogbm9ybWFsOyB3aWRvd3M6IDE7IHdvcmQtc3BhY2luZzogMHB4OyBkaXNwbGF5OiBpbmxpbmUgISBpbXBvcnRhbnQ7Ij5BZGQgZnVuY3Rpb25zIGFuZCBBUEkgZm9yIEZpbHRlciBzdGF0ZSBjb25maWd1cmF0aW9uIGFuZCBtYW5hZ2VtZW50PC9zcGFuPjwvbGk+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW46IDQuNXB0IDBpbjsgZm9udC1zaXplOiAxMnB0OyBmb250LWZhbWlseTogJ1RpbWVzIE5ldyBSb21hbicsc2VyaWY7IGNvbG9yOiBibGFjazsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hLHNhbnMtc2VyaWY7IGNvbG9yOiBibGFjazsiIGxhbmc9IkVOLVVTIj5BZGQgbmV3IGZ1bmN0aW9uczombmJzcDs8L3NwYW4+PC9saT48dWwgc3R5bGU9Im1hcmdpbi1ib3R0b206IDBpbjsiPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luOiA0LjVwdCAwaW47IGZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6ICdUaW1lcyBOZXcgUm9tYW4nLHNlcmlmOyBjb2xvcjogYmxhY2s7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyBjb2xvcjogYmxhY2s7IiBsYW5nPSJFTi1VUyI+SEFMX0RGU0RNX0JpdHN0cmVhbUNsb2NrX1N0YXJ0KCk8L3NwYW4+PC9saT48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbjogNC41cHQgMGluOyBmb250LXNpemU6IDEycHQ7IGZvbnQtZmFtaWx5OiAnVGltZXMgTmV3IFJvbWFuJyxzZXJpZjsgY29sb3I6IGJsYWNrOyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmEsc2Fucy1zZXJpZjsgY29sb3I6IGJsYWNrOyIgbGFuZz0iRU4tVVMiPjwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyBjb2xvcjogYmxhY2s7IiBsYW5nPSJFTi1VUyI+SEFMX0RGU0RNX0JpdHN0cmVhbUNsb2NrX1N0b3AoKTwvc3Bhbj48L2xpPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luOiA0LjVwdCAwaW47IGZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6ICdUaW1lcyBOZXcgUm9tYW4nLHNlcmlmOyBjb2xvcjogYmxhY2s7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyBjb2xvcjogYmxhY2s7IiBsYW5nPSJFTi1VUyI+SEFMX0RGU0RNX0JpdFN0cmVhbUNsa0Rpc3RyaWJ1dGlvbl9Db25maWcoKSZuYnNwOzwvc3Bhbj48L2xpPjwvdWw+PC91bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbjogNC41cHQgMGluOyBmb250LXNpemU6IDEycHQ7IGZvbnQtZmFtaWx5OiAnVGltZXMgTmV3IFJvbWFuJyxzZXJpZjsgY29sb3I6IGJsYWNrOyI+PHNwYW4gc3R5bGU9ImNvbG9yOiByZ2IoMCwgMCwgMCk7IGZvbnQtZmFtaWx5OiBWZXJkYW5hLHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTMuMzMzM3B4OyBmb250LXN0eWxlOiBub3JtYWw7IGZvbnQtdmFyaWFudDogbm9ybWFsOyBmb250LXdlaWdodDogbm9ybWFsOyBsZXR0ZXItc3BhY2luZzogbm9ybWFsOyBsaW5lLWhlaWdodDogbm9ybWFsOyB0ZXh0LWFsaWduOiBsZWZ0OyB0ZXh0LWluZGVudDogMHB4OyB0ZXh0LXRyYW5zZm9ybTogbm9uZTsgd2hpdGUtc3BhY2U6IG5vcm1hbDsgd2lkb3dzOiAxOyB3b3JkLXNwYWNpbmc6IDBweDsgZmxvYXQ6IG5vbmU7IGRpc3BsYXk6IGlubGluZSAhIGltcG9ydGFudDsiPjxzcGFuIHN0eWxlPSJmb250LXdlaWdodDogYm9sZDsiPkhBTCBETUE8L3NwYW4+PC9zcGFuPjwvbGk+PHVsIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwaW47Ij48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbjogNC41cHQgMGluOyBmb250LXNpemU6IDEycHQ7IGZvbnQtZmFtaWx5OiAnVGltZXMgTmV3IFJvbWFuJyxzZXJpZjsgY29sb3I6IGJsYWNrOyI+PHNwYW4gc3R5bGU9ImNvbG9yOiByZ2IoMCwgMCwgMCk7IGZvbnQtZmFtaWx5OiBWZXJkYW5hLHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTMuMzMzM3B4OyBmb250LXN0eWxlOiBub3JtYWw7IGZvbnQtdmFyaWFudDogbm9ybWFsOyBmb250LXdlaWdodDogbm9ybWFsOyBsZXR0ZXItc3BhY2luZzogbm9ybWFsOyBsaW5lLWhlaWdodDogbm9ybWFsOyB0ZXh0LWFsaWduOiBsZWZ0OyB0ZXh0LWluZGVudDogMHB4OyB0ZXh0LXRyYW5zZm9ybTogbm9uZTsgd2hpdGUtc3BhY2U6IG5vcm1hbDsgd2lkb3dzOiAxOyB3b3JkLXNwYWNpbmc6IDBweDsgZmxvYXQ6IG5vbmU7IGRpc3BsYXk6IGlubGluZSAhIGltcG9ydGFudDsiPkFkZCB0aGUgc3VwcG9ydCBvZiBETUEgQ2hhbm5lbHMgZnJvbSA4IHRvIDE1PC9zcGFuPjwvbGk+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW46IDQuNXB0IDBpbjsgZm9udC1zaXplOiAxMnB0OyBmb250LWZhbWlseTogJ1RpbWVzIE5ldyBSb21hbicsc2VyaWY7IGNvbG9yOiBibGFjazsiPjxzcGFuIHN0eWxlPSJjb2xvcjogcmdiKDAsIDAsIDApOyBmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyBmb250LXNpemU6IDEzLjMzMzNweDsgZm9udC1zdHlsZTogbm9ybWFsOyBmb250LXZhcmlhbnQ6IG5vcm1hbDsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDsgbGluZS1oZWlnaHQ6IG5vcm1hbDsgdGV4dC1hbGlnbjogbGVmdDsgdGV4dC1pbmRlbnQ6IDBweDsgdGV4dC10cmFuc2Zvcm06IG5vbmU7IHdoaXRlLXNwYWNlOiBub3JtYWw7IHdpZG93czogMTsgd29yZC1zcGFjaW5nOiAwcHg7IGZsb2F0OiBub25lOyBkaXNwbGF5OiBpbmxpbmUgISBpbXBvcnRhbnQ7Ij5VcGRhdGUgSEFMX0RNQV9EZUluaXQoKSBmdW5jdGlvbiB3aXRoIHRoZSBjaGVjayBvbiBETUEgc3RyZWFtIGluc3RhbmNlPC9zcGFuPjwvbGk+PC91bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbjogNC41cHQgMGluOyBmb250LXNpemU6IDEycHQ7IGZvbnQtZmFtaWx5OiAnVGltZXMgTmV3IFJvbWFuJyxzZXJpZjsgY29sb3I6IGJsYWNrOyI+PGI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmEsc2Fucy1zZXJpZjsiPkhBTCBEU0k8L3NwYW4+PC9iPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hLHNhbnMtc2VyaWY7Ij4mbmJzcDt1cGRhdGU8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6ICdUaW1lcyBOZXcgUm9tYW4nLHNlcmlmOyI+PG86cD48L286cD48L3NwYW4+PC9saT48dWwgc3R5bGU9Im1hcmdpbi1ib3R0b206IDBpbjsgbWFyZ2luLXRvcDogMGNtOyBsaXN0LXN0eWxlLXR5cGU6IGNpcmNsZTsiPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luOiA0LjVwdCAwaW47IGZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6ICdUaW1lcyBOZXcgUm9tYW4nLHNlcmlmOyBjb2xvcjogYmxhY2s7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPlVwZGF0ZSBIQUxfRFNJX0NvbmZpZ0hvc3RUaW1lb3V0cygpIGFuZCBIQUxfRFNJX0luaXQoKSBmdW5jdGlvbnMgdG8gYXZvaWQgc2NyYXRjaCBpbiBEU0lfQ0NSIHJlZ2lzdGVyPC9zcGFuPjwvbGk+PC91bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbjogNC41cHQgMGluOyBmb250LXNpemU6IDEycHQ7IGZvbnQtZmFtaWx5OiAnVGltZXMgTmV3IFJvbWFuJyxzZXJpZjsgY29sb3I6IGJsYWNrOyI+PGI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmEsc2Fucy1zZXJpZjsiPkhBTCBGTEFTSDwvc3Bhbj48L2I+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmEsc2Fucy1zZXJpZjsiPiB1cGRhdGU8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6ICdUaW1lcyBOZXcgUm9tYW4nLHNlcmlmOyI+PG86cD48L286cD48L3NwYW4+PC9saT48dWwgc3R5bGU9Im1hcmdpbi1ib3R0b206IDBpbjsgbWFyZ2luLXRvcDogMGNtOyBsaXN0LXN0eWxlLXR5cGU6IGNpcmNsZTsiPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luOiA0LjVwdCAwaW47IGZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6ICdUaW1lcyBOZXcgUm9tYW4nLHNlcmlmOyBjb2xvcjogYmxhY2s7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPkVuaGFuY2UgRkxBU0hfV2FpdEZvckxhc3RPcGVyYXRpb24oKSBmdW5jdGlvbiBpbXBsZW1lbnRhdGlvbjwvc3Bhbj48L2xpPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luOiA0LjVwdCAwaW47IGZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6ICdUaW1lcyBOZXcgUm9tYW4nLHNlcmlmOyBjb2xvcjogYmxhY2s7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPlVwZGF0ZSBfX0hBTF9GTEFTSF9HRVRfRkxBRygpIG1hY3JvIGltcGxlbWVudGF0aW9uPGJyPjwvc3Bhbj48L2xpPjwvdWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW46IDQuNXB0IDBpbjsgZm9udC1zaXplOiAxMnB0OyBmb250LWZhbWlseTogJ1RpbWVzIE5ldyBSb21hbicsc2VyaWY7IGNvbG9yOiBibGFjazsiPjxzcGFuIHN0eWxlPSJjb2xvcjogcmdiKDAsIDAsIDApOyBmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyBmb250LXNpemU6IDEzLjMzMzNweDsgZm9udC1zdHlsZTogbm9ybWFsOyBmb250LXZhcmlhbnQ6IG5vcm1hbDsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDsgbGluZS1oZWlnaHQ6IG5vcm1hbDsgdGV4dC1hbGlnbjogbGVmdDsgdGV4dC1pbmRlbnQ6IDBweDsgdGV4dC10cmFuc2Zvcm06IG5vbmU7IHdoaXRlLXNwYWNlOiBub3JtYWw7IHdpZG93czogMTsgd29yZC1zcGFjaW5nOiAwcHg7IGZsb2F0OiBub25lOyBkaXNwbGF5OiBpbmxpbmUgISBpbXBvcnRhbnQ7Ij48c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6IGJvbGQ7Ij5IQUwgR1BJTzwvc3Bhbj48c3BhbiBjbGFzcz0iQXBwbGUtY29udmVydGVkLXNwYWNlIj4mbmJzcDs8L3NwYW4+dXBkYXRlPC9zcGFuPjwvbGk+PHVsIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwaW47Ij48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbjogNC41cHQgMGluOyBmb250LXNpemU6IDEycHQ7IGZvbnQtZmFtaWx5OiAnVGltZXMgTmV3IFJvbWFuJyxzZXJpZjsgY29sb3I6IGJsYWNrOyI+PHNwYW4gc3R5bGU9ImNvbG9yOiByZ2IoMCwgMCwgMCk7IGZvbnQtZmFtaWx5OiBWZXJkYW5hLHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTMuMzMzM3B4OyBmb250LXN0eWxlOiBub3JtYWw7IGZvbnQtdmFyaWFudDogbm9ybWFsOyBmb250LXdlaWdodDogbm9ybWFsOyBsZXR0ZXItc3BhY2luZzogbm9ybWFsOyBsaW5lLWhlaWdodDogbm9ybWFsOyB0ZXh0LWFsaWduOiBsZWZ0OyB0ZXh0LWluZGVudDogMHB4OyB0ZXh0LXRyYW5zZm9ybTogbm9uZTsgd2hpdGUtc3BhY2U6IG5vcm1hbDsgd2lkb3dzOiAxOyB3b3JkLXNwYWNpbmc6IDBweDsgZmxvYXQ6IG5vbmU7IGRpc3BsYXk6IGlubGluZSAhIGltcG9ydGFudDsiPkFkZCBzcGVjaWZpYyBhbHRlcm5hdGUgZnVuY3Rpb25zIGRlZmluaXRpb25zPC9zcGFuPjwvbGk+PC91bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbjogNC41cHQgMGluOyBmb250LXNpemU6IDEycHQ7IGZvbnQtZmFtaWx5OiAnVGltZXMgTmV3IFJvbWFuJyxzZXJpZjsgY29sb3I6IGJsYWNrOyI+PGI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmEsc2Fucy1zZXJpZjsiPkhBTCBJMkMgPC9zcGFuPjwvYj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyI+dXBkYXRlPC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEycHQ7IGZvbnQtZmFtaWx5OiAnVGltZXMgTmV3IFJvbWFuJyxzZXJpZjsiPjxvOnA+PC9vOnA+PC9zcGFuPjwvbGk+PHVsIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwaW47IG1hcmdpbi10b3A6IDBjbTsgbGlzdC1zdHlsZS10eXBlOiBjaXJjbGU7Ij48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbjogNC41cHQgMGluOyBmb250LXNpemU6IDEycHQ7IGZvbnQtZmFtaWx5OiAnVGltZXMgTmV3IFJvbWFuJyxzZXJpZjsgY29sb3I6IGJsYWNrOyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmEsc2Fucy1zZXJpZjsiIGxhbmc9IkVOLVVTIj5VcGRhdGUgSTJDX0RNQUVycm9yKCkgZnVuY3Rpb24gaW1wbGVtZW50YXRpb24gdG8gaWdub3JlIERNQSBGSUZPIGVycm9yPC9zcGFuPjwvbGk+PC91bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbjogNC41cHQgMGluOyBmb250LXNpemU6IDEycHQ7IGZvbnQtZmFtaWx5OiAnVGltZXMgTmV3IFJvbWFuJyxzZXJpZjsgY29sb3I6IGJsYWNrOyI+PGI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmEsc2Fucy1zZXJpZjsiPkhBTCBJMlMgPC9zcGFuPjwvYj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyI+dXBkYXRlPC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEycHQ7IGZvbnQtZmFtaWx5OiAnVGltZXMgTmV3IFJvbWFuJyxzZXJpZjsiPjxvOnA+PC9vOnA+PC9zcGFuPjwvbGk+PHVsIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwaW47IG1hcmdpbi10b3A6IDBjbTsgbGlzdC1zdHlsZS10eXBlOiBjaXJjbGU7Ij48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbjogNC41cHQgMGluOyBmb250LXNpemU6IDEycHQ7IGZvbnQtZmFtaWx5OiAnVGltZXMgTmV3IFJvbWFuJyxzZXJpZjsgY29sb3I6IGJsYWNrOyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmEsc2Fucy1zZXJpZjsiIGxhbmc9IkVOLVVTIj5FbmhhbmNlIEhBTF9JMlNfSW5pdCgpIGltcGxlbWVudGF0aW9uIHRvIHRlc3Qgb24gUENNX1NIT1JUIGFuZCBQQ01fTE9ORyBzdGFuZGFyZHM8L3NwYW4+PC9saT48L3VsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luOiA0LjVwdCAwaW47IGZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6ICdUaW1lcyBOZXcgUm9tYW4nLHNlcmlmOyBjb2xvcjogYmxhY2s7Ij48Yj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPkhBTCBJUkRBPC9zcGFuPjwvYj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPjxzcGFuIGNsYXNzPSJBcHBsZS1jb252ZXJ0ZWQtc3BhY2UiPiZuYnNwOzwvc3Bhbj51cGRhdGU8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6ICdUaW1lcyBOZXcgUm9tYW4nLHNlcmlmOyIgbGFuZz0iRU4tVVMiPjxvOnA+PC9vOnA+PC9zcGFuPjwvbGk+PHVsIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwaW47IG1hcmdpbi10b3A6IDBjbTsgbGlzdC1zdHlsZS10eXBlOiBjaXJjbGU7Ij48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbjogNC41cHQgMGluOyBmb250LXNpemU6IDEycHQ7IGZvbnQtZmFtaWx5OiAnVGltZXMgTmV3IFJvbWFuJyxzZXJpZjsgY29sb3I6IGJsYWNrOyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmEsc2Fucy1zZXJpZjsiIGxhbmc9IkVOLVVTIj5BZGQgbmV3IGZ1bmN0aW9ucyBhbmQgY2FsbCBiYWNrcyBmb3IgVHJhbnNmZXIgQWJvcnQ8bzpwPjwvbzpwPjwvc3Bhbj48L2xpPjx1bCBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMGluOyBtYXJnaW4tdG9wOiAwY207IiB0eXBlPSJzcXVhcmUiPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luOiA0LjVwdCAwaW47IGZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6ICdUaW1lcyBOZXcgUm9tYW4nLHNlcmlmOyBjb2xvcjogYmxhY2s7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPkhBTF9JUkRBX0Fib3J0KCk8bzpwPjwvbzpwPjwvc3Bhbj48L2xpPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luOiA0LjVwdCAwaW47IGZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6ICdUaW1lcyBOZXcgUm9tYW4nLHNlcmlmOyBjb2xvcjogYmxhY2s7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPkhBTF9JUkRBX0Fib3J0VHJhbnNtaXQoKTxvOnA+PC9vOnA+PC9zcGFuPjwvbGk+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW46IDQuNXB0IDBpbjsgZm9udC1zaXplOiAxMnB0OyBmb250LWZhbWlseTogJ1RpbWVzIE5ldyBSb21hbicsc2VyaWY7IGNvbG9yOiBibGFjazsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hLHNhbnMtc2VyaWY7IiBsYW5nPSJFTi1VUyI+SEFMX0lSREFfQWJvcnRSZWNlaXZlKCk8bzpwPjwvbzpwPjwvc3Bhbj48L2xpPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luOiA0LjVwdCAwaW47IGZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6ICdUaW1lcyBOZXcgUm9tYW4nLHNlcmlmOyBjb2xvcjogYmxhY2s7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPkhBTF9JUkRBX0Fib3J0X0lUKCk8bzpwPjwvbzpwPjwvc3Bhbj48L2xpPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luOiA0LjVwdCAwaW47IGZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6ICdUaW1lcyBOZXcgUm9tYW4nLHNlcmlmOyBjb2xvcjogYmxhY2s7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPkhBTF9JUkRBX0Fib3J0VHJhbnNtaXRfSVQoKTxvOnA+PC9vOnA+PC9zcGFuPjwvbGk+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW46IDQuNXB0IDBpbjsgZm9udC1zaXplOiAxMnB0OyBmb250LWZhbWlseTogJ1RpbWVzIE5ldyBSb21hbicsc2VyaWY7IGNvbG9yOiBibGFjazsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hLHNhbnMtc2VyaWY7IiBsYW5nPSJFTi1VUyI+SEFMX0lSREFfQWJvcnRSZWNlaXZlX0lUKCk8bzpwPjwvbzpwPjwvc3Bhbj48L2xpPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luOiA0LjVwdCAwaW47IGZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6ICdUaW1lcyBOZXcgUm9tYW4nLHNlcmlmOyBjb2xvcjogYmxhY2s7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPkhBTF9JUkRBX0Fib3J0Q3BsdENhbGxiYWNrKCk8bzpwPjwvbzpwPjwvc3Bhbj48L2xpPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luOiA0LjVwdCAwaW47IGZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6ICdUaW1lcyBOZXcgUm9tYW4nLHNlcmlmOyBjb2xvcjogYmxhY2s7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPkhBTF9JUkRBX0Fib3J0VHJhbnNtaXRDcGx0Q2FsbGJhY2soKTxvOnA+PC9vOnA+PC9zcGFuPjwvbGk+PC91bD48L3VsPjx1bCBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMGluOyBtYXJnaW4tdG9wOiAwY207IiB0eXBlPSJzcXVhcmUiPjx1bCBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMGluOyBtYXJnaW4tdG9wOiAwY207IiB0eXBlPSJzcXVhcmUiPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luOiA0LjVwdCAwaW47IGZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6ICdUaW1lcyBOZXcgUm9tYW4nLHNlcmlmOyBjb2xvcjogYmxhY2s7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPkhBTF9JUkRBX0Fib3J0UmVjZWl2ZUNwbHRDYWxsYmFjaygpPC9zcGFuPjwvbGk+PC91bD48L3VsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luOiA0LjVwdCAwaW47IGZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6ICdUaW1lcyBOZXcgUm9tYW4nLHNlcmlmOyBjb2xvcjogYmxhY2s7Ij48Yj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPkhBTCBQQ0Q8L3NwYW4+PC9iPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hLHNhbnMtc2VyaWY7IiBsYW5nPSJFTi1VUyI+PHNwYW4gY2xhc3M9IkFwcGxlLWNvbnZlcnRlZC1zcGFjZSI+IDwvc3Bhbj51cGRhdGU8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6ICdUaW1lcyBOZXcgUm9tYW4nLHNlcmlmOyIgbGFuZz0iRU4tVVMiPjxvOnA+PC9vOnA+PC9zcGFuPjwvbGk+PHVsIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwaW47IG1hcmdpbi10b3A6IDBjbTsgbGlzdC1zdHlsZS10eXBlOiBjaXJjbGU7Ij48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbjogNC41cHQgMGluOyBmb250LXNpemU6IDEycHQ7IGZvbnQtZmFtaWx5OiAnVGltZXMgTmV3IFJvbWFuJyxzZXJpZjsgY29sb3I6IGJsYWNrOyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmEsc2Fucy1zZXJpZjsiIGxhbmc9IkVOLVVTIj5VcGRhdGUgSEFMX1BDRF9HZXRSeENvdW50KCkgJm5ic3A7ZnVuY3Rpb24gaW1wbGVtZW50YXRpb248L3NwYW4+PC9saT48L3VsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luOiA0LjVwdCAwaW47IGZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6ICdUaW1lcyBOZXcgUm9tYW4nLHNlcmlmOyBjb2xvcjogYmxhY2s7Ij48c3BhbiBzdHlsZT0iY29sb3I6IHJnYigwLCAwLCAwKTsgZm9udC1mYW1pbHk6IFZlcmRhbmEsc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMy4zMzMzcHg7IGZvbnQtc3R5bGU6IG5vcm1hbDsgZm9udC12YXJpYW50OiBub3JtYWw7IGZvbnQtd2VpZ2h0OiBub3JtYWw7IGxldHRlci1zcGFjaW5nOiBub3JtYWw7IGxpbmUtaGVpZ2h0OiBub3JtYWw7IHRleHQtYWxpZ246IGxlZnQ7IHRleHQtaW5kZW50OiAwcHg7IHRleHQtdHJhbnNmb3JtOiBub25lOyB3aGl0ZS1zcGFjZTogbm9ybWFsOyB3aWRvd3M6IDE7IHdvcmQtc3BhY2luZzogMHB4OyBmbG9hdDogbm9uZTsgZGlzcGxheTogaW5saW5lICEgaW1wb3J0YW50OyI+PHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiBib2xkOyI+SEFMIFJDQzwvc3Bhbj48c3BhbiBjbGFzcz0iQXBwbGUtY29udmVydGVkLXNwYWNlIj4mbmJzcDs8L3NwYW4+dXBkYXRlPC9zcGFuPjwvbGk+PHVsIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwaW47Ij48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbjogNC41cHQgMGluOyBmb250LXNpemU6IDEycHQ7IGZvbnQtZmFtaWx5OiAnVGltZXMgTmV3IFJvbWFuJyxzZXJpZjsgY29sb3I6IGJsYWNrOyI+PHNwYW4gc3R5bGU9ImNvbG9yOiByZ2IoMCwgMCwgMCk7IGZvbnQtZmFtaWx5OiBWZXJkYW5hLHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTMuMzMzM3B4OyBmb250LXN0eWxlOiBub3JtYWw7IGZvbnQtdmFyaWFudDogbm9ybWFsOyBmb250LXdlaWdodDogbm9ybWFsOyBsZXR0ZXItc3BhY2luZzogbm9ybWFsOyBsaW5lLWhlaWdodDogbm9ybWFsOyB0ZXh0LWFsaWduOiBsZWZ0OyB0ZXh0LWluZGVudDogMHB4OyB0ZXh0LXRyYW5zZm9ybTogbm9uZTsgd2hpdGUtc3BhY2U6IG5vcm1hbDsgd2lkb3dzOiAxOyB3b3JkLXNwYWNpbmc6IDBweDsgZmxvYXQ6IG5vbmU7IGRpc3BsYXk6IGlubGluZSAhIGltcG9ydGFudDsiPlVwZGF0ZSBfX0hBTF9SQ0NfSFNFX0NPTkZJRygpIG1hY3JvIGltcGxlbWVudGF0aW9uPC9zcGFuPjwvbGk+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW46IDQuNXB0IDBpbjsgZm9udC1zaXplOiAxMnB0OyBmb250LWZhbWlseTogJ1RpbWVzIE5ldyBSb21hbicsc2VyaWY7IGNvbG9yOiBibGFjazsiPjxzcGFuIHN0eWxlPSJjb2xvcjogcmdiKDAsIDAsIDApOyBmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyBmb250LXNpemU6IDEzLjMzMzNweDsgZm9udC1zdHlsZTogbm9ybWFsOyBmb250LXZhcmlhbnQ6IG5vcm1hbDsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDsgbGluZS1oZWlnaHQ6IG5vcm1hbDsgdGV4dC1hbGlnbjogbGVmdDsgdGV4dC1pbmRlbnQ6IDBweDsgdGV4dC10cmFuc2Zvcm06IG5vbmU7IHdoaXRlLXNwYWNlOiBub3JtYWw7IHdpZG93czogMTsgd29yZC1zcGFjaW5nOiAwcHg7IGZsb2F0OiBub25lOyBkaXNwbGF5OiBpbmxpbmUgISBpbXBvcnRhbnQ7Ij5VcGRhdGU8c3BhbiBjbGFzcz0iQXBwbGUtY29udmVydGVkLXNwYWNlIj4mbmJzcDs8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjogcmdiKDAsIDAsIDApOyBmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyBmb250LXNpemU6IDEzLjMzMzNweDsgZm9udC1zdHlsZTogbm9ybWFsOyBmb250LXZhcmlhbnQ6IG5vcm1hbDsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDsgbGluZS1oZWlnaHQ6IG5vcm1hbDsgdGV4dC1hbGlnbjogbGVmdDsgdGV4dC1pbmRlbnQ6IDBweDsgdGV4dC10cmFuc2Zvcm06IG5vbmU7IHdoaXRlLXNwYWNlOiBub3JtYWw7IHdpZG93czogMTsgd29yZC1zcGFjaW5nOiAwcHg7IGZsb2F0OiBub25lOyBkaXNwbGF5OiBpbmxpbmUgISBpbXBvcnRhbnQ7Ij5fX0hBTF9SQ0NfTFNFX0NPTkZJRygpIG1hY3JvIGltcGxlbWVudGF0aW9uPC9zcGFuPjwvbGk+PC91bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbjogNC41cHQgMGluOyBmb250LXNpemU6IDEycHQ7IGZvbnQtZmFtaWx5OiAnVGltZXMgTmV3IFJvbWFuJyxzZXJpZjsgY29sb3I6IGJsYWNrOyI+PGI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmEsc2Fucy1zZXJpZjsiIGxhbmc9IkVOLVVTIj5IQUwgU01BUlRDQVJEPC9zcGFuPjwvYj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPjxzcGFuIGNsYXNzPSJBcHBsZS1jb252ZXJ0ZWQtc3BhY2UiPiZuYnNwOzwvc3Bhbj51cGRhdGU8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6ICdUaW1lcyBOZXcgUm9tYW4nLHNlcmlmOyIgbGFuZz0iRU4tVVMiPjxvOnA+PC9vOnA+PC9zcGFuPjwvbGk+PHVsIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwaW47IG1hcmdpbi10b3A6IDBjbTsiIHR5cGU9InNxdWFyZSI+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW46IDQuNXB0IDBpbjsgZm9udC1zaXplOiAxMnB0OyBmb250LWZhbWlseTogJ1RpbWVzIE5ldyBSb21hbicsc2VyaWY7IGNvbG9yOiBibGFjazsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hLHNhbnMtc2VyaWY7IiBsYW5nPSJFTi1VUyI+QWRkIG5ldyBmdW5jdGlvbnMgYW5kIGNhbGwgYmFja3MgZm9yIFRyYW5zZmVyIEFib3J0PG86cD48L286cD48L3NwYW4+PC9saT48dWwgc3R5bGU9Im1hcmdpbi1ib3R0b206IDBpbjsgbWFyZ2luLXRvcDogMGNtOyIgdHlwZT0ic3F1YXJlIj48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbjogNC41cHQgMGluOyBmb250LXNpemU6IDEycHQ7IGZvbnQtZmFtaWx5OiAnVGltZXMgTmV3IFJvbWFuJyxzZXJpZjsgY29sb3I6IGJsYWNrOyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmEsc2Fucy1zZXJpZjsiIGxhbmc9IkVOLVVTIj5IQUxfPC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjogd2luZG93dGV4dDsiIGxhbmc9IkVOLVVTIj48c3BhbiBjbGFzcz0iQXBwbGUtY29udmVydGVkLXNwYWNlIj4mbmJzcDs8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hLHNhbnMtc2VyaWY7IiBsYW5nPSJFTi1VUyI+U01BUlRDQVJEX0Fib3J0KCk8bzpwPjwvbzpwPjwvc3Bhbj48L2xpPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luOiA0LjVwdCAwaW47IGZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6ICdUaW1lcyBOZXcgUm9tYW4nLHNlcmlmOyBjb2xvcjogYmxhY2s7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPkhBTF88L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiB3aW5kb3d0ZXh0OyIgbGFuZz0iRU4tVVMiPjxzcGFuIGNsYXNzPSJBcHBsZS1jb252ZXJ0ZWQtc3BhY2UiPiZuYnNwOzwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmEsc2Fucy1zZXJpZjsiIGxhbmc9IkVOLVVTIj5TTUFSVENBUkRfQWJvcnRUcmFuc21pdCgpPG86cD48L286cD48L3NwYW4+PC9saT48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbjogNC41cHQgMGluOyBmb250LXNpemU6IDEycHQ7IGZvbnQtZmFtaWx5OiAnVGltZXMgTmV3IFJvbWFuJyxzZXJpZjsgY29sb3I6IGJsYWNrOyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmEsc2Fucy1zZXJpZjsiIGxhbmc9IkVOLVVTIj5IQUxfPC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjogd2luZG93dGV4dDsiIGxhbmc9IkVOLVVTIj48c3BhbiBjbGFzcz0iQXBwbGUtY29udmVydGVkLXNwYWNlIj4mbmJzcDs8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hLHNhbnMtc2VyaWY7IiBsYW5nPSJFTi1VUyI+U01BUlRDQVJEX0Fib3J0UmVjZWl2ZSgpPG86cD48L286cD48L3NwYW4+PC9saT48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbjogNC41cHQgMGluOyBmb250LXNpemU6IDEycHQ7IGZvbnQtZmFtaWx5OiAnVGltZXMgTmV3IFJvbWFuJyxzZXJpZjsgY29sb3I6IGJsYWNrOyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmEsc2Fucy1zZXJpZjsiIGxhbmc9IkVOLVVTIj5IQUxfPC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjogd2luZG93dGV4dDsiIGxhbmc9IkVOLVVTIj48c3BhbiBjbGFzcz0iQXBwbGUtY29udmVydGVkLXNwYWNlIj4mbmJzcDs8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hLHNhbnMtc2VyaWY7IiBsYW5nPSJFTi1VUyI+U01BUlRDQVJEX0Fib3J0X0lUKCk8bzpwPjwvbzpwPjwvc3Bhbj48L2xpPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luOiA0LjVwdCAwaW47IGZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6ICdUaW1lcyBOZXcgUm9tYW4nLHNlcmlmOyBjb2xvcjogYmxhY2s7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPkhBTF88L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiB3aW5kb3d0ZXh0OyIgbGFuZz0iRU4tVVMiPjxzcGFuIGNsYXNzPSJBcHBsZS1jb252ZXJ0ZWQtc3BhY2UiPiZuYnNwOzwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmEsc2Fucy1zZXJpZjsiIGxhbmc9IkVOLVVTIj5TTUFSVENBUkRfQWJvcnRUcmFuc21pdF9JVCgpPG86cD48L286cD48L3NwYW4+PC9saT48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbjogNC41cHQgMGluOyBmb250LXNpemU6IDEycHQ7IGZvbnQtZmFtaWx5OiAnVGltZXMgTmV3IFJvbWFuJyxzZXJpZjsgY29sb3I6IGJsYWNrOyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmEsc2Fucy1zZXJpZjsiIGxhbmc9IkVOLVVTIj5IQUxfPC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjogd2luZG93dGV4dDsiIGxhbmc9IkVOLVVTIj48c3BhbiBjbGFzcz0iQXBwbGUtY29udmVydGVkLXNwYWNlIj4mbmJzcDs8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hLHNhbnMtc2VyaWY7IiBsYW5nPSJFTi1VUyI+U01BUlRDQVJEX0Fib3J0UmVjZWl2ZV9JVCgpPG86cD48L286cD48L3NwYW4+PC9saT48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbjogNC41cHQgMGluOyBmb250LXNpemU6IDEycHQ7IGZvbnQtZmFtaWx5OiAnVGltZXMgTmV3IFJvbWFuJyxzZXJpZjsgY29sb3I6IGJsYWNrOyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmEsc2Fucy1zZXJpZjsiIGxhbmc9IkVOLVVTIj5IQUxfPC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjogd2luZG93dGV4dDsiIGxhbmc9IkVOLVVTIj48c3BhbiBjbGFzcz0iQXBwbGUtY29udmVydGVkLXNwYWNlIj4mbmJzcDs8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hLHNhbnMtc2VyaWY7IiBsYW5nPSJFTi1VUyI+U01BUlRDQVJEX0Fib3J0Q3BsdENhbGxiYWNrKCk8bzpwPjwvbzpwPjwvc3Bhbj48L2xpPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luOiA0LjVwdCAwaW47IGZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6ICdUaW1lcyBOZXcgUm9tYW4nLHNlcmlmOyBjb2xvcjogYmxhY2s7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPkhBTF88L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiB3aW5kb3d0ZXh0OyIgbGFuZz0iRU4tVVMiPjxzcGFuIGNsYXNzPSJBcHBsZS1jb252ZXJ0ZWQtc3BhY2UiPiZuYnNwOzwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmEsc2Fucy1zZXJpZjsiIGxhbmc9IkVOLVVTIj5TTUFSVENBUkRfQWJvcnRUcmFuc21pdENwbHRDYWxsYmFjaygpPG86cD48L286cD48L3NwYW4+PC9saT48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbjogNC41cHQgMGluOyBmb250LXNpemU6IDEycHQ7IGZvbnQtZmFtaWx5OiAnVGltZXMgTmV3IFJvbWFuJyxzZXJpZjsgY29sb3I6IGJsYWNrOyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmEsc2Fucy1zZXJpZjsiIGxhbmc9IkVOLVVTIj5IQUxfPC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjogd2luZG93dGV4dDsiIGxhbmc9IkVOLVVTIj48c3BhbiBjbGFzcz0iQXBwbGUtY29udmVydGVkLXNwYWNlIj4mbmJzcDs8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hLHNhbnMtc2VyaWY7IiBsYW5nPSJFTi1VUyI+U01BUlRDQVJEX0Fib3J0UmVjZWl2ZUNwbHRDYWxsYmFjaygpPC9zcGFuPjwvbGk+PC91bD48L3VsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luOiA0LjVwdCAwaW47IGZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6ICdUaW1lcyBOZXcgUm9tYW4nLHNlcmlmOyBjb2xvcjogYmxhY2s7Ij48c3BhbiBzdHlsZT0iY29sb3I6IHJnYigwLCAwLCAwKTsgZm9udC1mYW1pbHk6IFZlcmRhbmEsc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMy4zMzMzcHg7IGZvbnQtc3R5bGU6IG5vcm1hbDsgZm9udC12YXJpYW50OiBub3JtYWw7IGZvbnQtd2VpZ2h0OiBub3JtYWw7IGxldHRlci1zcGFjaW5nOiBub3JtYWw7IGxpbmUtaGVpZ2h0OiBub3JtYWw7IHRleHQtYWxpZ246IGxlZnQ7IHRleHQtaW5kZW50OiAwcHg7IHRleHQtdHJhbnNmb3JtOiBub25lOyB3aGl0ZS1zcGFjZTogbm9ybWFsOyB3aWRvd3M6IDE7IHdvcmQtc3BhY2luZzogMHB4OyBmbG9hdDogbm9uZTsgZGlzcGxheTogaW5saW5lICEgaW1wb3J0YW50OyI+PHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiBib2xkOyI+SEFMIFRJTTwvc3Bhbj48c3BhbiBjbGFzcz0iQXBwbGUtY29udmVydGVkLXNwYWNlIj48c3BhbiBjbGFzcz0iQXBwbGUtY29udmVydGVkLXNwYWNlIj4mbmJzcDs8L3NwYW4+PC9zcGFuPnVwZGF0ZTwvc3Bhbj48L2xpPjx1bCBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMGluOyI+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW46IDQuNXB0IDBpbjsgZm9udC1zaXplOiAxMnB0OyBmb250LWZhbWlseTogJ1RpbWVzIE5ldyBSb21hbicsc2VyaWY7IGNvbG9yOiBibGFjazsiPjxzcGFuIHN0eWxlPSJjb2xvcjogcmdiKDAsIDAsIDApOyBmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyBmb250LXNpemU6IDEzLjMzMzNweDsgZm9udC1zdHlsZTogbm9ybWFsOyBmb250LXZhcmlhbnQ6IG5vcm1hbDsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDsgbGluZS1oZWlnaHQ6IG5vcm1hbDsgdGV4dC1hbGlnbjogbGVmdDsgdGV4dC1pbmRlbnQ6IDBweDsgdGV4dC10cmFuc2Zvcm06IG5vbmU7IHdoaXRlLXNwYWNlOiBub3JtYWw7IHdpZG93czogMTsgd29yZC1zcGFjaW5nOiAwcHg7IGZsb2F0OiBub25lOyBkaXNwbGF5OiBpbmxpbmUgISBpbXBvcnRhbnQ7Ij5VcGRhdGUgSEFMX1RJTUV4X1JlbWFwQ29uZmlnKCkgZnVuY3Rpb24gdG8gbWFuYWdlIFRJTSBpbnRlcm5hbCB0cmlnZ2VyIHJlbWFwOiBMUFRJTSBvciBUSU0zX1RSR088L3NwYW4+PC9saT48L3VsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luOiA0LjVwdCAwaW47IGZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6ICdUaW1lcyBOZXcgUm9tYW4nLHNlcmlmOyBjb2xvcjogYmxhY2s7Ij48c3BhbiBzdHlsZT0iY29sb3I6IHJnYigwLCAwLCAwKTsgZm9udC1mYW1pbHk6IFZlcmRhbmEsc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMy4zMzMzcHg7IGZvbnQtc3R5bGU6IG5vcm1hbDsgZm9udC12YXJpYW50OiBub3JtYWw7IGZvbnQtd2VpZ2h0OiBub3JtYWw7IGxldHRlci1zcGFjaW5nOiBub3JtYWw7IGxpbmUtaGVpZ2h0OiBub3JtYWw7IHRleHQtYWxpZ246IGxlZnQ7IHRleHQtaW5kZW50OiAwcHg7IHRleHQtdHJhbnNmb3JtOiBub25lOyB3aGl0ZS1zcGFjZTogbm9ybWFsOyB3aWRvd3M6IDE7IHdvcmQtc3BhY2luZzogMHB4OyBmbG9hdDogbm9uZTsgZGlzcGxheTogaW5saW5lICEgaW1wb3J0YW50OyI+PHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiBib2xkOyI+SEFMIFVBUlQ8c3BhbiBjbGFzcz0iQXBwbGUtY29udmVydGVkLXNwYWNlIj4mbmJzcDs8L3NwYW4+PC9zcGFuPnVwZGF0ZTwvc3Bhbj48L2xpPjx1bCBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMGluOyI+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW46IDQuNXB0IDBpbjsgZm9udC1zaXplOiAxMnB0OyBmb250LWZhbWlseTogJ1RpbWVzIE5ldyBSb21hbicsc2VyaWY7IGNvbG9yOiBibGFjazsiPjxzcGFuIHN0eWxlPSJjb2xvcjogcmdiKDAsIDAsIDApOyBmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyBmb250LXNpemU6IDEzLjMzMzNweDsgZm9udC1zdHlsZTogbm9ybWFsOyBmb250LXZhcmlhbnQ6IG5vcm1hbDsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDsgbGluZS1oZWlnaHQ6IG5vcm1hbDsgdGV4dC1hbGlnbjogbGVmdDsgdGV4dC1pbmRlbnQ6IDBweDsgdGV4dC10cmFuc2Zvcm06IG5vbmU7IHdoaXRlLXNwYWNlOiBub3JtYWw7IHdpZG93czogMTsgd29yZC1zcGFjaW5nOiAwcHg7IGZsb2F0OiBub25lOyBkaXNwbGF5OiBpbmxpbmUgISBpbXBvcnRhbnQ7Ij5BZGQgVHJhbnNmZXIgYWJvcnQgZnVuY3Rpb25zIGFuZCBjYWxsYmFja3M8L3NwYW4+PC9saT48L3VsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luOiA0LjVwdCAwaW47IGZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6ICdUaW1lcyBOZXcgUm9tYW4nLHNlcmlmOyBjb2xvcjogYmxhY2s7Ij48c3BhbiBzdHlsZT0iY29sb3I6IHJnYigwLCAwLCAwKTsgZm9udC1mYW1pbHk6IFZlcmRhbmEsc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMy4zMzMzcHg7IGZvbnQtc3R5bGU6IG5vcm1hbDsgZm9udC12YXJpYW50OiBub3JtYWw7IGZvbnQtd2VpZ2h0OiBub3JtYWw7IGxldHRlci1zcGFjaW5nOiBub3JtYWw7IGxpbmUtaGVpZ2h0OiBub3JtYWw7IHRleHQtYWxpZ246IGxlZnQ7IHRleHQtaW5kZW50OiAwcHg7IHRleHQtdHJhbnNmb3JtOiBub25lOyB3aGl0ZS1zcGFjZTogbm9ybWFsOyB3aWRvd3M6IDE7IHdvcmQtc3BhY2luZzogMHB4OyBmbG9hdDogbm9uZTsgZGlzcGxheTogaW5saW5lICEgaW1wb3J0YW50OyI+PHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiBib2xkOyI+SEFMIFVTQVJUPHNwYW4gY2xhc3M9IkFwcGxlLWNvbnZlcnRlZC1zcGFjZSI+Jm5ic3A7PC9zcGFuPjwvc3Bhbj51cGRhdGU8L3NwYW4+PC9saT48dWwgc3R5bGU9Im1hcmdpbi1ib3R0b206IDBpbjsiPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luOiA0LjVwdCAwaW47IGZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6ICdUaW1lcyBOZXcgUm9tYW4nLHNlcmlmOyBjb2xvcjogYmxhY2s7Ij48c3BhbiBzdHlsZT0iY29sb3I6IHJnYigwLCAwLCAwKTsgZm9udC1mYW1pbHk6IFZlcmRhbmEsc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMy4zMzMzcHg7IGZvbnQtc3R5bGU6IG5vcm1hbDsgZm9udC12YXJpYW50OiBub3JtYWw7IGZvbnQtd2VpZ2h0OiBub3JtYWw7IGxldHRlci1zcGFjaW5nOiBub3JtYWw7IGxpbmUtaGVpZ2h0OiBub3JtYWw7IHRleHQtYWxpZ246IGxlZnQ7IHRleHQtaW5kZW50OiAwcHg7IHRleHQtdHJhbnNmb3JtOiBub25lOyB3aGl0ZS1zcGFjZTogbm9ybWFsOyB3aWRvd3M6IDE7IHdvcmQtc3BhY2luZzogMHB4OyBmbG9hdDogbm9uZTsgZGlzcGxheTogaW5saW5lICEgaW1wb3J0YW50OyI+QWRkIFRyYW5zZmVyIGFib3J0IGZ1bmN0aW9ucyBhbmQgY2FsbGJhY2tzPC9zcGFuPjwvbGk+PC91bD48L3VsPjxoMyBzdHlsZT0iYmFja2dyb3VuZDogcmdiKDUxLCAxMDIsIDI1NSkgbm9uZSByZXBlYXQgc2Nyb2xsIDAlIDUwJTsgLW1vei1iYWNrZ3JvdW5kLWNsaXA6IC1tb3otaW5pdGlhbDsgLW1vei1iYWNrZ3JvdW5kLW9yaWdpbjogLW1vei1pbml0aWFsOyAtbW96LWJhY2tncm91bmQtaW5saW5lLXBvbGljeTogLW1vei1pbml0aWFsOyBtYXJnaW4tcmlnaHQ6IDUwMHB0OyB3aWR0aDogMTgwcHg7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogQXJpYWw7IGNvbG9yOiB3aGl0ZTsiPlYxLjUuMiAvIDIyLVNlcHRlbWJlci0yMDE2PC9zcGFuPjwvaDM+PHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbjogNC41cHQgMGNtIDQuNXB0IDE4cHQ7Ij48YiBzdHlsZT0iIj48dT48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYTsgY29sb3I6IGJsYWNrOyI+TWFpbgorPHVsIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwaW47IGNvbG9yOiByZ2IoMCwgMCwgMCk7IGZvbnQtZmFtaWx5OiAnVGltZXMgTmV3IFJvbWFuJzsgZm9udC1zaXplOiBtZWRpdW07IGZvbnQtc3R5bGU6IG5vcm1hbDsgZm9udC12YXJpYW50OiBub3JtYWw7IGZvbnQtd2VpZ2h0OiBub3JtYWw7IGxldHRlci1zcGFjaW5nOiBub3JtYWw7IGxpbmUtaGVpZ2h0OiBub3JtYWw7IHRleHQtYWxpZ246IHN0YXJ0OyB0ZXh0LWluZGVudDogMHB4OyB0ZXh0LXRyYW5zZm9ybTogbm9uZTsgd2hpdGUtc3BhY2U6IG5vcm1hbDsgd29yZC1zcGFjaW5nOiAwcHg7IG1hcmdpbi10b3A6IDBjbTsiIHR5cGU9InNxdWFyZSI+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJjb2xvcjogcmdiKDAsIDAsIDApOyBmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyBmb250LXNpemU6IDEzLjMzMzNweDsgZm9udC1zdHlsZTogbm9ybWFsOyBmb250LXZhcmlhbnQ6IG5vcm1hbDsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDsgbGluZS1oZWlnaHQ6IG5vcm1hbDsgdGV4dC1hbGlnbjogbGVmdDsgdGV4dC1pbmRlbnQ6IDBweDsgdGV4dC10cmFuc2Zvcm06IG5vbmU7IHdoaXRlLXNwYWNlOiBub3JtYWw7IHdpZG93czogMTsgd29yZC1zcGFjaW5nOiAwcHg7IGRpc3BsYXk6IGlubGluZSAhIGltcG9ydGFudDsgZmxvYXQ6IG5vbmU7Ij5BZGQ8c3BhbiBjbGFzcz0iQXBwbGUtY29udmVydGVkLXNwYWNlIj4mbmJzcDs8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hLHNhbnMtc2VyaWY7Ij5zdXBwb3J0IG9mPHNwYW4gY2xhc3M9IkFwcGxlLWNvbnZlcnRlZC1zcGFjZSI+Jm5ic3A7PC9zcGFuPjxiPlNUTTMyRjQxM3h4IGFuZCZuYnNwOzwvYj48L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmEsc2Fucy1zZXJpZjsiPjxiPlNUTTMyRjQyM3h4PC9iPjwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyI+IGRldmljZXM8L3NwYW4+PC9saT48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmEsc2Fucy1zZXJpZjsiPkdlbmVyYWwgdXBkYXRlcyB0byBmaXgga25vd24gZGVmZWN0cyBhbmQgZW5oYW5jZW1lbnRzIGltcGxlbWVudGF0aW9uPC9zcGFuPjwvbGk+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJjb2xvcjogcmdiKDAsIDAsIDApOyBmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyBmb250LXNpemU6IDEzLjMzMzNweDsgZm9udC1zdHlsZTogbm9ybWFsOyBmb250LXZhcmlhbnQ6IG5vcm1hbDsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDsgbGluZS1oZWlnaHQ6IG5vcm1hbDsgdGV4dC1hbGlnbjogbGVmdDsgdGV4dC1pbmRlbnQ6IDBweDsgdGV4dC10cmFuc2Zvcm06IG5vbmU7IHdoaXRlLXNwYWNlOiBub3JtYWw7IHdpZG93czogMTsgd29yZC1zcGFjaW5nOiAwcHg7IGRpc3BsYXk6IGlubGluZSAhIGltcG9ydGFudDsgZmxvYXQ6IG5vbmU7Ij48c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6IGJvbGQ7Ij5IQUwgQ0FOPC9zcGFuPiB1cGRhdGU8L3NwYW4+PC9saT48dWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7IiBsYW5nPSJFTi1VUyI+VXBkYXRlIHRvIGFkZCB0aGUgc3VwcG9ydCBvZiAzIENBTiBtYW5hZ2VtZW50PC9zcGFuPjwvbGk+PC91bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImNvbG9yOiByZ2IoMCwgMCwgMCk7IGZvbnQtZmFtaWx5OiBWZXJkYW5hLHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTMuMzMzM3B4OyBmb250LXN0eWxlOiBub3JtYWw7IGZvbnQtdmFyaWFudDogbm9ybWFsOyBmb250LXdlaWdodDogbm9ybWFsOyBsZXR0ZXItc3BhY2luZzogbm9ybWFsOyBsaW5lLWhlaWdodDogbm9ybWFsOyB0ZXh0LWFsaWduOiBsZWZ0OyB0ZXh0LWluZGVudDogMHB4OyB0ZXh0LXRyYW5zZm9ybTogbm9uZTsgd2hpdGUtc3BhY2U6IG5vcm1hbDsgd2lkb3dzOiAxOyB3b3JkLXNwYWNpbmc6IDBweDsgZGlzcGxheTogaW5saW5lICEgaW1wb3J0YW50OyBmbG9hdDogbm9uZTsiPjxzcGFuIHN0eWxlPSJmb250LXdlaWdodDogYm9sZDsiPkhBTCBDUllQPC9zcGFuPiB1cGRhdGU8L3NwYW4+PC9saT48dWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7IiBsYW5nPSJFTi1VUyI+VXBkYXRlIHRvIGFkZCB0aGUgc3VwcG9ydCBvZiBBRVMgZmVhdHVyZXM8L3NwYW4+PC9saT48L3VsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iY29sb3I6IHJnYigwLCAwLCAwKTsgZm9udC1mYW1pbHk6IFZlcmRhbmEsc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMy4zMzMzcHg7IGZvbnQtc3R5bGU6IG5vcm1hbDsgZm9udC12YXJpYW50OiBub3JtYWw7IGZvbnQtd2VpZ2h0OiBub3JtYWw7IGxldHRlci1zcGFjaW5nOiBub3JtYWw7IGxpbmUtaGVpZ2h0OiBub3JtYWw7IHRleHQtYWxpZ246IGxlZnQ7IHRleHQtaW5kZW50OiAwcHg7IHRleHQtdHJhbnNmb3JtOiBub25lOyB3aGl0ZS1zcGFjZTogbm9ybWFsOyB3aWRvd3M6IDE7IHdvcmQtc3BhY2luZzogMHB4OyBkaXNwbGF5OiBpbmxpbmUgISBpbXBvcnRhbnQ7IGZsb2F0OiBub25lOyI+PHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiBib2xkOyI+SEFMIERGU0RNPC9zcGFuPiB1cGRhdGU8L3NwYW4+PC9saT48dWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW46IDQuNXB0IDBpbjsgZm9udC1zaXplOiAxMnB0OyBmb250LWZhbWlseTogJ1RpbWVzIE5ldyBSb21hbicsc2VyaWY7IGNvbG9yOiBibGFjazsiPjxzcGFuIHN0eWxlPSJjb2xvcjogcmdiKDAsIDAsIDApOyBmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyBmb250LXNpemU6IDEzLjMzMzNweDsgZm9udC1zdHlsZTogbm9ybWFsOyBmb250LXZhcmlhbnQ6IG5vcm1hbDsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDsgbGluZS1oZWlnaHQ6IG5vcm1hbDsgdGV4dC1hbGlnbjogbGVmdDsgdGV4dC1pbmRlbnQ6IDBweDsgdGV4dC10cmFuc2Zvcm06IG5vbmU7IHdoaXRlLXNwYWNlOiBub3JtYWw7IHdpZG93czogMTsgd29yZC1zcGFjaW5nOiAwcHg7IGZsb2F0OiBub25lOyBkaXNwbGF5OiBpbmxpbmUgISBpbXBvcnRhbnQ7Ij5BZGQgZGVmaW5pdGlvbnMgZm9yIG5ldyBleHRlcm5hbCB0cmlnZ2VyIGZpbHRlcnM8L3NwYW4+PC9saT48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbjogNC41cHQgMGluOyBmb250LXNpemU6IDEycHQ7IGZvbnQtZmFtaWx5OiAnVGltZXMgTmV3IFJvbWFuJyxzZXJpZjsgY29sb3I6IGJsYWNrOyI+PHNwYW4gc3R5bGU9ImNvbG9yOiByZ2IoMCwgMCwgMCk7IGZvbnQtZmFtaWx5OiBWZXJkYW5hLHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTMuMzMzM3B4OyBmb250LXN0eWxlOiBub3JtYWw7IGZvbnQtdmFyaWFudDogbm9ybWFsOyBmb250LXdlaWdodDogbm9ybWFsOyBsZXR0ZXItc3BhY2luZzogbm9ybWFsOyBsaW5lLWhlaWdodDogbm9ybWFsOyB0ZXh0LWFsaWduOiBsZWZ0OyB0ZXh0LWluZGVudDogMHB4OyB0ZXh0LXRyYW5zZm9ybTogbm9uZTsgd2hpdGUtc3BhY2U6IG5vcm1hbDsgd2lkb3dzOiAxOyB3b3JkLXNwYWNpbmc6IDBweDsgZmxvYXQ6IG5vbmU7IGRpc3BsYXk6IGlubGluZSAhIGltcG9ydGFudDsiPkFkZCBkZWZpbml0aW9uIGZvciBuZXcgQ2hhbm5lbHMgNCwgNSwgNiBhbmQgNzwvc3Bhbj48L2xpPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luOiA0LjVwdCAwaW47IGZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6ICdUaW1lcyBOZXcgUm9tYW4nLHNlcmlmOyBjb2xvcjogYmxhY2s7Ij48c3BhbiBzdHlsZT0iY29sb3I6IHJnYigwLCAwLCAwKTsgZm9udC1mYW1pbHk6IFZlcmRhbmEsc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMy4zMzMzcHg7IGZvbnQtc3R5bGU6IG5vcm1hbDsgZm9udC12YXJpYW50OiBub3JtYWw7IGZvbnQtd2VpZ2h0OiBub3JtYWw7IGxldHRlci1zcGFjaW5nOiBub3JtYWw7IGxpbmUtaGVpZ2h0OiBub3JtYWw7IHRleHQtYWxpZ246IGxlZnQ7IHRleHQtaW5kZW50OiAwcHg7IHRleHQtdHJhbnNmb3JtOiBub25lOyB3aGl0ZS1zcGFjZTogbm9ybWFsOyB3aWRvd3M6IDE7IHdvcmQtc3BhY2luZzogMHB4OyBkaXNwbGF5OiBpbmxpbmUgISBpbXBvcnRhbnQ7Ij5BZGQgZnVuY3Rpb25zIGFuZCBBUEkgZm9yIEZpbHRlciBzdGF0ZSBjb25maWd1cmF0aW9uIGFuZCBtYW5hZ2VtZW50PC9zcGFuPjwvbGk+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW46IDQuNXB0IDBpbjsgZm9udC1zaXplOiAxMnB0OyBmb250LWZhbWlseTogJ1RpbWVzIE5ldyBSb21hbicsc2VyaWY7IGNvbG9yOiBibGFjazsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hLHNhbnMtc2VyaWY7IGNvbG9yOiBibGFjazsiIGxhbmc9IkVOLVVTIj5BZGQgbmV3IGZ1bmN0aW9uczombmJzcDs8L3NwYW4+PC9saT48dWwgc3R5bGU9Im1hcmdpbi1ib3R0b206IDBpbjsiPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luOiA0LjVwdCAwaW47IGZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6ICdUaW1lcyBOZXcgUm9tYW4nLHNlcmlmOyBjb2xvcjogYmxhY2s7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyBjb2xvcjogYmxhY2s7IiBsYW5nPSJFTi1VUyI+SEFMX0RGU0RNX0JpdHN0cmVhbUNsb2NrX1N0YXJ0KCk8L3NwYW4+PC9saT48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbjogNC41cHQgMGluOyBmb250LXNpemU6IDEycHQ7IGZvbnQtZmFtaWx5OiAnVGltZXMgTmV3IFJvbWFuJyxzZXJpZjsgY29sb3I6IGJsYWNrOyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmEsc2Fucy1zZXJpZjsgY29sb3I6IGJsYWNrOyIgbGFuZz0iRU4tVVMiPjwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyBjb2xvcjogYmxhY2s7IiBsYW5nPSJFTi1VUyI+SEFMX0RGU0RNX0JpdHN0cmVhbUNsb2NrX1N0b3AoKTwvc3Bhbj48L2xpPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luOiA0LjVwdCAwaW47IGZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6ICdUaW1lcyBOZXcgUm9tYW4nLHNlcmlmOyBjb2xvcjogYmxhY2s7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyBjb2xvcjogYmxhY2s7IiBsYW5nPSJFTi1VUyI+SEFMX0RGU0RNX0JpdFN0cmVhbUNsa0Rpc3RyaWJ1dGlvbl9Db25maWcoKSZuYnNwOzwvc3Bhbj48L2xpPjwvdWw+PC91bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbjogNC41cHQgMGluOyBmb250LXNpemU6IDEycHQ7IGZvbnQtZmFtaWx5OiAnVGltZXMgTmV3IFJvbWFuJyxzZXJpZjsgY29sb3I6IGJsYWNrOyI+PHNwYW4gc3R5bGU9ImNvbG9yOiByZ2IoMCwgMCwgMCk7IGZvbnQtZmFtaWx5OiBWZXJkYW5hLHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTMuMzMzM3B4OyBmb250LXN0eWxlOiBub3JtYWw7IGZvbnQtdmFyaWFudDogbm9ybWFsOyBmb250LXdlaWdodDogbm9ybWFsOyBsZXR0ZXItc3BhY2luZzogbm9ybWFsOyBsaW5lLWhlaWdodDogbm9ybWFsOyB0ZXh0LWFsaWduOiBsZWZ0OyB0ZXh0LWluZGVudDogMHB4OyB0ZXh0LXRyYW5zZm9ybTogbm9uZTsgd2hpdGUtc3BhY2U6IG5vcm1hbDsgd2lkb3dzOiAxOyB3b3JkLXNwYWNpbmc6IDBweDsgZmxvYXQ6IG5vbmU7IGRpc3BsYXk6IGlubGluZSAhIGltcG9ydGFudDsiPjxzcGFuIHN0eWxlPSJmb250LXdlaWdodDogYm9sZDsiPkhBTCBETUE8L3NwYW4+PC9zcGFuPjwvbGk+PHVsIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwaW47Ij48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbjogNC41cHQgMGluOyBmb250LXNpemU6IDEycHQ7IGZvbnQtZmFtaWx5OiAnVGltZXMgTmV3IFJvbWFuJyxzZXJpZjsgY29sb3I6IGJsYWNrOyI+PHNwYW4gc3R5bGU9ImNvbG9yOiByZ2IoMCwgMCwgMCk7IGZvbnQtZmFtaWx5OiBWZXJkYW5hLHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTMuMzMzM3B4OyBmb250LXN0eWxlOiBub3JtYWw7IGZvbnQtdmFyaWFudDogbm9ybWFsOyBmb250LXdlaWdodDogbm9ybWFsOyBsZXR0ZXItc3BhY2luZzogbm9ybWFsOyBsaW5lLWhlaWdodDogbm9ybWFsOyB0ZXh0LWFsaWduOiBsZWZ0OyB0ZXh0LWluZGVudDogMHB4OyB0ZXh0LXRyYW5zZm9ybTogbm9uZTsgd2hpdGUtc3BhY2U6IG5vcm1hbDsgd2lkb3dzOiAxOyB3b3JkLXNwYWNpbmc6IDBweDsgZmxvYXQ6IG5vbmU7IGRpc3BsYXk6IGlubGluZSAhIGltcG9ydGFudDsiPkFkZCB0aGUgc3VwcG9ydCBvZiBETUEgQ2hhbm5lbHMgZnJvbSA4IHRvIDE1PC9zcGFuPjwvbGk+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW46IDQuNXB0IDBpbjsgZm9udC1zaXplOiAxMnB0OyBmb250LWZhbWlseTogJ1RpbWVzIE5ldyBSb21hbicsc2VyaWY7IGNvbG9yOiBibGFjazsiPjxzcGFuIHN0eWxlPSJjb2xvcjogcmdiKDAsIDAsIDApOyBmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyBmb250LXNpemU6IDEzLjMzMzNweDsgZm9udC1zdHlsZTogbm9ybWFsOyBmb250LXZhcmlhbnQ6IG5vcm1hbDsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDsgbGluZS1oZWlnaHQ6IG5vcm1hbDsgdGV4dC1hbGlnbjogbGVmdDsgdGV4dC1pbmRlbnQ6IDBweDsgdGV4dC10cmFuc2Zvcm06IG5vbmU7IHdoaXRlLXNwYWNlOiBub3JtYWw7IHdpZG93czogMTsgd29yZC1zcGFjaW5nOiAwcHg7IGZsb2F0OiBub25lOyBkaXNwbGF5OiBpbmxpbmUgISBpbXBvcnRhbnQ7Ij5VcGRhdGUgSEFMX0RNQV9EZUluaXQoKSBmdW5jdGlvbiB3aXRoIHRoZSBjaGVjayBvbiBETUEgc3RyZWFtIGluc3RhbmNlPC9zcGFuPjwvbGk+PC91bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbjogNC41cHQgMGluOyBmb250LXNpemU6IDEycHQ7IGZvbnQtZmFtaWx5OiAnVGltZXMgTmV3IFJvbWFuJyxzZXJpZjsgY29sb3I6IGJsYWNrOyI+PGI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmEsc2Fucy1zZXJpZjsiPkhBTCBEU0k8L3NwYW4+PC9iPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hLHNhbnMtc2VyaWY7Ij4mbmJzcDt1cGRhdGU8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6ICdUaW1lcyBOZXcgUm9tYW4nLHNlcmlmOyI+PG86cD48L286cD48L3NwYW4+PC9saT48dWwgc3R5bGU9Im1hcmdpbi1ib3R0b206IDBpbjsgbWFyZ2luLXRvcDogMGNtOyBsaXN0LXN0eWxlLXR5cGU6IGNpcmNsZTsiPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luOiA0LjVwdCAwaW47IGZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6ICdUaW1lcyBOZXcgUm9tYW4nLHNlcmlmOyBjb2xvcjogYmxhY2s7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPlVwZGF0ZSBIQUxfRFNJX0NvbmZpZ0hvc3RUaW1lb3V0cygpIGFuZCBIQUxfRFNJX0luaXQoKSBmdW5jdGlvbnMgdG8gYXZvaWQgc2NyYXRjaCBpbiBEU0lfQ0NSIHJlZ2lzdGVyPC9zcGFuPjwvbGk+PC91bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbjogNC41cHQgMGluOyBmb250LXNpemU6IDEycHQ7IGZvbnQtZmFtaWx5OiAnVGltZXMgTmV3IFJvbWFuJyxzZXJpZjsgY29sb3I6IGJsYWNrOyI+PGI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmEsc2Fucy1zZXJpZjsiPkhBTCBGTEFTSDwvc3Bhbj48L2I+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmEsc2Fucy1zZXJpZjsiPiB1cGRhdGU8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6ICdUaW1lcyBOZXcgUm9tYW4nLHNlcmlmOyI+PG86cD48L286cD48L3NwYW4+PC9saT48dWwgc3R5bGU9Im1hcmdpbi1ib3R0b206IDBpbjsgbWFyZ2luLXRvcDogMGNtOyBsaXN0LXN0eWxlLXR5cGU6IGNpcmNsZTsiPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luOiA0LjVwdCAwaW47IGZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6ICdUaW1lcyBOZXcgUm9tYW4nLHNlcmlmOyBjb2xvcjogYmxhY2s7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPkVuaGFuY2UgRkxBU0hfV2FpdEZvckxhc3RPcGVyYXRpb24oKSBmdW5jdGlvbiBpbXBsZW1lbnRhdGlvbjwvc3Bhbj48L2xpPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luOiA0LjVwdCAwaW47IGZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6ICdUaW1lcyBOZXcgUm9tYW4nLHNlcmlmOyBjb2xvcjogYmxhY2s7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPlVwZGF0ZSBfX0hBTF9GTEFTSF9HRVRfRkxBRygpIG1hY3JvIGltcGxlbWVudGF0aW9uPGJyPjwvc3Bhbj48L2xpPjwvdWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW46IDQuNXB0IDBpbjsgZm9udC1zaXplOiAxMnB0OyBmb250LWZhbWlseTogJ1RpbWVzIE5ldyBSb21hbicsc2VyaWY7IGNvbG9yOiBibGFjazsiPjxzcGFuIHN0eWxlPSJjb2xvcjogcmdiKDAsIDAsIDApOyBmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyBmb250LXNpemU6IDEzLjMzMzNweDsgZm9udC1zdHlsZTogbm9ybWFsOyBmb250LXZhcmlhbnQ6IG5vcm1hbDsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDsgbGluZS1oZWlnaHQ6IG5vcm1hbDsgdGV4dC1hbGlnbjogbGVmdDsgdGV4dC1pbmRlbnQ6IDBweDsgdGV4dC10cmFuc2Zvcm06IG5vbmU7IHdoaXRlLXNwYWNlOiBub3JtYWw7IHdpZG93czogMTsgd29yZC1zcGFjaW5nOiAwcHg7IGZsb2F0OiBub25lOyBkaXNwbGF5OiBpbmxpbmUgISBpbXBvcnRhbnQ7Ij48c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6IGJvbGQ7Ij5IQUwgR1BJTzwvc3Bhbj48c3BhbiBjbGFzcz0iQXBwbGUtY29udmVydGVkLXNwYWNlIj4mbmJzcDs8L3NwYW4+dXBkYXRlPC9zcGFuPjwvbGk+PHVsIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwaW47Ij48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbjogNC41cHQgMGluOyBmb250LXNpemU6IDEycHQ7IGZvbnQtZmFtaWx5OiAnVGltZXMgTmV3IFJvbWFuJyxzZXJpZjsgY29sb3I6IGJsYWNrOyI+PHNwYW4gc3R5bGU9ImNvbG9yOiByZ2IoMCwgMCwgMCk7IGZvbnQtZmFtaWx5OiBWZXJkYW5hLHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTMuMzMzM3B4OyBmb250LXN0eWxlOiBub3JtYWw7IGZvbnQtdmFyaWFudDogbm9ybWFsOyBmb250LXdlaWdodDogbm9ybWFsOyBsZXR0ZXItc3BhY2luZzogbm9ybWFsOyBsaW5lLWhlaWdodDogbm9ybWFsOyB0ZXh0LWFsaWduOiBsZWZ0OyB0ZXh0LWluZGVudDogMHB4OyB0ZXh0LXRyYW5zZm9ybTogbm9uZTsgd2hpdGUtc3BhY2U6IG5vcm1hbDsgd2lkb3dzOiAxOyB3b3JkLXNwYWNpbmc6IDBweDsgZmxvYXQ6IG5vbmU7IGRpc3BsYXk6IGlubGluZSAhIGltcG9ydGFudDsiPkFkZCBzcGVjaWZpYyBhbHRlcm5hdGUgZnVuY3Rpb25zIGRlZmluaXRpb25zPC9zcGFuPjwvbGk+PC91bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbjogNC41cHQgMGluOyBmb250LXNpemU6IDEycHQ7IGZvbnQtZmFtaWx5OiAnVGltZXMgTmV3IFJvbWFuJyxzZXJpZjsgY29sb3I6IGJsYWNrOyI+PGI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmEsc2Fucy1zZXJpZjsiPkhBTCBJMkMgPC9zcGFuPjwvYj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyI+dXBkYXRlPC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEycHQ7IGZvbnQtZmFtaWx5OiAnVGltZXMgTmV3IFJvbWFuJyxzZXJpZjsiPjxvOnA+PC9vOnA+PC9zcGFuPjwvbGk+PHVsIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwaW47IG1hcmdpbi10b3A6IDBjbTsgbGlzdC1zdHlsZS10eXBlOiBjaXJjbGU7Ij48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbjogNC41cHQgMGluOyBmb250LXNpemU6IDEycHQ7IGZvbnQtZmFtaWx5OiAnVGltZXMgTmV3IFJvbWFuJyxzZXJpZjsgY29sb3I6IGJsYWNrOyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmEsc2Fucy1zZXJpZjsiIGxhbmc9IkVOLVVTIj5VcGRhdGUgSTJDX0RNQUVycm9yKCkgZnVuY3Rpb24gaW1wbGVtZW50YXRpb24gdG8gaWdub3JlIERNQSBGSUZPIGVycm9yPC9zcGFuPjwvbGk+PC91bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbjogNC41cHQgMGluOyBmb250LXNpemU6IDEycHQ7IGZvbnQtZmFtaWx5OiAnVGltZXMgTmV3IFJvbWFuJyxzZXJpZjsgY29sb3I6IGJsYWNrOyI+PGI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmEsc2Fucy1zZXJpZjsiPkhBTCBJMlMgPC9zcGFuPjwvYj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyI+dXBkYXRlPC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEycHQ7IGZvbnQtZmFtaWx5OiAnVGltZXMgTmV3IFJvbWFuJyxzZXJpZjsiPjxvOnA+PC9vOnA+PC9zcGFuPjwvbGk+PHVsIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwaW47IG1hcmdpbi10b3A6IDBjbTsgbGlzdC1zdHlsZS10eXBlOiBjaXJjbGU7Ij48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbjogNC41cHQgMGluOyBmb250LXNpemU6IDEycHQ7IGZvbnQtZmFtaWx5OiAnVGltZXMgTmV3IFJvbWFuJyxzZXJpZjsgY29sb3I6IGJsYWNrOyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmEsc2Fucy1zZXJpZjsiIGxhbmc9IkVOLVVTIj5FbmhhbmNlIEhBTF9JMlNfSW5pdCgpIGltcGxlbWVudGF0aW9uIHRvIHRlc3Qgb24gUENNX1NIT1JUIGFuZCBQQ01fTE9ORyBzdGFuZGFyZHM8L3NwYW4+PC9saT48L3VsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luOiA0LjVwdCAwaW47IGZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6ICdUaW1lcyBOZXcgUm9tYW4nLHNlcmlmOyBjb2xvcjogYmxhY2s7Ij48Yj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPkhBTCBJUkRBPC9zcGFuPjwvYj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPjxzcGFuIGNsYXNzPSJBcHBsZS1jb252ZXJ0ZWQtc3BhY2UiPiZuYnNwOzwvc3Bhbj51cGRhdGU8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6ICdUaW1lcyBOZXcgUm9tYW4nLHNlcmlmOyIgbGFuZz0iRU4tVVMiPjxvOnA+PC9vOnA+PC9zcGFuPjwvbGk+PHVsIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwaW47IG1hcmdpbi10b3A6IDBjbTsgbGlzdC1zdHlsZS10eXBlOiBjaXJjbGU7Ij48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbjogNC41cHQgMGluOyBmb250LXNpemU6IDEycHQ7IGZvbnQtZmFtaWx5OiAnVGltZXMgTmV3IFJvbWFuJyxzZXJpZjsgY29sb3I6IGJsYWNrOyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmEsc2Fucy1zZXJpZjsiIGxhbmc9IkVOLVVTIj5BZGQgbmV3IGZ1bmN0aW9ucyBhbmQgY2FsbCBiYWNrcyBmb3IgVHJhbnNmZXIgQWJvcnQ8bzpwPjwvbzpwPjwvc3Bhbj48L2xpPjx1bCBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMGluOyBtYXJnaW4tdG9wOiAwY207IiB0eXBlPSJzcXVhcmUiPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luOiA0LjVwdCAwaW47IGZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6ICdUaW1lcyBOZXcgUm9tYW4nLHNlcmlmOyBjb2xvcjogYmxhY2s7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPkhBTF9JUkRBX0Fib3J0KCk8bzpwPjwvbzpwPjwvc3Bhbj48L2xpPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luOiA0LjVwdCAwaW47IGZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6ICdUaW1lcyBOZXcgUm9tYW4nLHNlcmlmOyBjb2xvcjogYmxhY2s7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPkhBTF9JUkRBX0Fib3J0VHJhbnNtaXQoKTxvOnA+PC9vOnA+PC9zcGFuPjwvbGk+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW46IDQuNXB0IDBpbjsgZm9udC1zaXplOiAxMnB0OyBmb250LWZhbWlseTogJ1RpbWVzIE5ldyBSb21hbicsc2VyaWY7IGNvbG9yOiBibGFjazsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hLHNhbnMtc2VyaWY7IiBsYW5nPSJFTi1VUyI+SEFMX0lSREFfQWJvcnRSZWNlaXZlKCk8bzpwPjwvbzpwPjwvc3Bhbj48L2xpPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luOiA0LjVwdCAwaW47IGZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6ICdUaW1lcyBOZXcgUm9tYW4nLHNlcmlmOyBjb2xvcjogYmxhY2s7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPkhBTF9JUkRBX0Fib3J0X0lUKCk8bzpwPjwvbzpwPjwvc3Bhbj48L2xpPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luOiA0LjVwdCAwaW47IGZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6ICdUaW1lcyBOZXcgUm9tYW4nLHNlcmlmOyBjb2xvcjogYmxhY2s7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPkhBTF9JUkRBX0Fib3J0VHJhbnNtaXRfSVQoKTxvOnA+PC9vOnA+PC9zcGFuPjwvbGk+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW46IDQuNXB0IDBpbjsgZm9udC1zaXplOiAxMnB0OyBmb250LWZhbWlseTogJ1RpbWVzIE5ldyBSb21hbicsc2VyaWY7IGNvbG9yOiBibGFjazsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hLHNhbnMtc2VyaWY7IiBsYW5nPSJFTi1VUyI+SEFMX0lSREFfQWJvcnRSZWNlaXZlX0lUKCk8bzpwPjwvbzpwPjwvc3Bhbj48L2xpPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luOiA0LjVwdCAwaW47IGZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6ICdUaW1lcyBOZXcgUm9tYW4nLHNlcmlmOyBjb2xvcjogYmxhY2s7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPkhBTF9JUkRBX0Fib3J0Q3BsdENhbGxiYWNrKCk8bzpwPjwvbzpwPjwvc3Bhbj48L2xpPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luOiA0LjVwdCAwaW47IGZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6ICdUaW1lcyBOZXcgUm9tYW4nLHNlcmlmOyBjb2xvcjogYmxhY2s7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPkhBTF9JUkRBX0Fib3J0VHJhbnNtaXRDcGx0Q2FsbGJhY2soKTxvOnA+PC9vOnA+PC9zcGFuPjwvbGk+PC91bD48L3VsPjx1bCBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMGluOyBtYXJnaW4tdG9wOiAwY207IiB0eXBlPSJzcXVhcmUiPjx1bCBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMGluOyBtYXJnaW4tdG9wOiAwY207IiB0eXBlPSJzcXVhcmUiPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luOiA0LjVwdCAwaW47IGZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6ICdUaW1lcyBOZXcgUm9tYW4nLHNlcmlmOyBjb2xvcjogYmxhY2s7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPkhBTF9JUkRBX0Fib3J0UmVjZWl2ZUNwbHRDYWxsYmFjaygpPC9zcGFuPjwvbGk+PC91bD48L3VsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luOiA0LjVwdCAwaW47IGZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6ICdUaW1lcyBOZXcgUm9tYW4nLHNlcmlmOyBjb2xvcjogYmxhY2s7Ij48Yj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPkhBTCBQQ0Q8L3NwYW4+PC9iPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hLHNhbnMtc2VyaWY7IiBsYW5nPSJFTi1VUyI+PHNwYW4gY2xhc3M9IkFwcGxlLWNvbnZlcnRlZC1zcGFjZSI+IDwvc3Bhbj51cGRhdGU8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6ICdUaW1lcyBOZXcgUm9tYW4nLHNlcmlmOyIgbGFuZz0iRU4tVVMiPjxvOnA+PC9vOnA+PC9zcGFuPjwvbGk+PHVsIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwaW47IG1hcmdpbi10b3A6IDBjbTsgbGlzdC1zdHlsZS10eXBlOiBjaXJjbGU7Ij48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbjogNC41cHQgMGluOyBmb250LXNpemU6IDEycHQ7IGZvbnQtZmFtaWx5OiAnVGltZXMgTmV3IFJvbWFuJyxzZXJpZjsgY29sb3I6IGJsYWNrOyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmEsc2Fucy1zZXJpZjsiIGxhbmc9IkVOLVVTIj5VcGRhdGUgSEFMX1BDRF9HZXRSeENvdW50KCkgJm5ic3A7ZnVuY3Rpb24gaW1wbGVtZW50YXRpb248L3NwYW4+PC9saT48L3VsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luOiA0LjVwdCAwaW47IGZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6ICdUaW1lcyBOZXcgUm9tYW4nLHNlcmlmOyBjb2xvcjogYmxhY2s7Ij48c3BhbiBzdHlsZT0iY29sb3I6IHJnYigwLCAwLCAwKTsgZm9udC1mYW1pbHk6IFZlcmRhbmEsc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMy4zMzMzcHg7IGZvbnQtc3R5bGU6IG5vcm1hbDsgZm9udC12YXJpYW50OiBub3JtYWw7IGZvbnQtd2VpZ2h0OiBub3JtYWw7IGxldHRlci1zcGFjaW5nOiBub3JtYWw7IGxpbmUtaGVpZ2h0OiBub3JtYWw7IHRleHQtYWxpZ246IGxlZnQ7IHRleHQtaW5kZW50OiAwcHg7IHRleHQtdHJhbnNmb3JtOiBub25lOyB3aGl0ZS1zcGFjZTogbm9ybWFsOyB3aWRvd3M6IDE7IHdvcmQtc3BhY2luZzogMHB4OyBmbG9hdDogbm9uZTsgZGlzcGxheTogaW5saW5lICEgaW1wb3J0YW50OyI+PHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiBib2xkOyI+SEFMIFJDQzwvc3Bhbj48c3BhbiBjbGFzcz0iQXBwbGUtY29udmVydGVkLXNwYWNlIj4mbmJzcDs8L3NwYW4+dXBkYXRlPC9zcGFuPjwvbGk+PHVsIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwaW47Ij48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbjogNC41cHQgMGluOyBmb250LXNpemU6IDEycHQ7IGZvbnQtZmFtaWx5OiAnVGltZXMgTmV3IFJvbWFuJyxzZXJpZjsgY29sb3I6IGJsYWNrOyI+PHNwYW4gc3R5bGU9ImNvbG9yOiByZ2IoMCwgMCwgMCk7IGZvbnQtZmFtaWx5OiBWZXJkYW5hLHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTMuMzMzM3B4OyBmb250LXN0eWxlOiBub3JtYWw7IGZvbnQtdmFyaWFudDogbm9ybWFsOyBmb250LXdlaWdodDogbm9ybWFsOyBsZXR0ZXItc3BhY2luZzogbm9ybWFsOyBsaW5lLWhlaWdodDogbm9ybWFsOyB0ZXh0LWFsaWduOiBsZWZ0OyB0ZXh0LWluZGVudDogMHB4OyB0ZXh0LXRyYW5zZm9ybTogbm9uZTsgd2hpdGUtc3BhY2U6IG5vcm1hbDsgd2lkb3dzOiAxOyB3b3JkLXNwYWNpbmc6IDBweDsgZmxvYXQ6IG5vbmU7IGRpc3BsYXk6IGlubGluZSAhIGltcG9ydGFudDsiPlVwZGF0ZSBfX0hBTF9SQ0NfSFNFX0NPTkZJRygpIG1hY3JvIGltcGxlbWVudGF0aW9uPC9zcGFuPjwvbGk+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW46IDQuNXB0IDBpbjsgZm9udC1zaXplOiAxMnB0OyBmb250LWZhbWlseTogJ1RpbWVzIE5ldyBSb21hbicsc2VyaWY7IGNvbG9yOiBibGFjazsiPjxzcGFuIHN0eWxlPSJjb2xvcjogcmdiKDAsIDAsIDApOyBmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyBmb250LXNpemU6IDEzLjMzMzNweDsgZm9udC1zdHlsZTogbm9ybWFsOyBmb250LXZhcmlhbnQ6IG5vcm1hbDsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDsgbGluZS1oZWlnaHQ6IG5vcm1hbDsgdGV4dC1hbGlnbjogbGVmdDsgdGV4dC1pbmRlbnQ6IDBweDsgdGV4dC10cmFuc2Zvcm06IG5vbmU7IHdoaXRlLXNwYWNlOiBub3JtYWw7IHdpZG93czogMTsgd29yZC1zcGFjaW5nOiAwcHg7IGZsb2F0OiBub25lOyBkaXNwbGF5OiBpbmxpbmUgISBpbXBvcnRhbnQ7Ij5VcGRhdGU8c3BhbiBjbGFzcz0iQXBwbGUtY29udmVydGVkLXNwYWNlIj4mbmJzcDs8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjogcmdiKDAsIDAsIDApOyBmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyBmb250LXNpemU6IDEzLjMzMzNweDsgZm9udC1zdHlsZTogbm9ybWFsOyBmb250LXZhcmlhbnQ6IG5vcm1hbDsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDsgbGluZS1oZWlnaHQ6IG5vcm1hbDsgdGV4dC1hbGlnbjogbGVmdDsgdGV4dC1pbmRlbnQ6IDBweDsgdGV4dC10cmFuc2Zvcm06IG5vbmU7IHdoaXRlLXNwYWNlOiBub3JtYWw7IHdpZG93czogMTsgd29yZC1zcGFjaW5nOiAwcHg7IGZsb2F0OiBub25lOyBkaXNwbGF5OiBpbmxpbmUgISBpbXBvcnRhbnQ7Ij5fX0hBTF9SQ0NfTFNFX0NPTkZJRygpIG1hY3JvIGltcGxlbWVudGF0aW9uPC9zcGFuPjwvbGk+PC91bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbjogNC41cHQgMGluOyBmb250LXNpemU6IDEycHQ7IGZvbnQtZmFtaWx5OiAnVGltZXMgTmV3IFJvbWFuJyxzZXJpZjsgY29sb3I6IGJsYWNrOyI+PGI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmEsc2Fucy1zZXJpZjsiIGxhbmc9IkVOLVVTIj5IQUwgU01BUlRDQVJEPC9zcGFuPjwvYj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPjxzcGFuIGNsYXNzPSJBcHBsZS1jb252ZXJ0ZWQtc3BhY2UiPiZuYnNwOzwvc3Bhbj51cGRhdGU8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6ICdUaW1lcyBOZXcgUm9tYW4nLHNlcmlmOyIgbGFuZz0iRU4tVVMiPjxvOnA+PC9vOnA+PC9zcGFuPjwvbGk+PHVsIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwaW47IG1hcmdpbi10b3A6IDBjbTsiIHR5cGU9InNxdWFyZSI+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW46IDQuNXB0IDBpbjsgZm9udC1zaXplOiAxMnB0OyBmb250LWZhbWlseTogJ1RpbWVzIE5ldyBSb21hbicsc2VyaWY7IGNvbG9yOiBibGFjazsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hLHNhbnMtc2VyaWY7IiBsYW5nPSJFTi1VUyI+QWRkIG5ldyBmdW5jdGlvbnMgYW5kIGNhbGwgYmFja3MgZm9yIFRyYW5zZmVyIEFib3J0PG86cD48L286cD48L3NwYW4+PC9saT48dWwgc3R5bGU9Im1hcmdpbi1ib3R0b206IDBpbjsgbWFyZ2luLXRvcDogMGNtOyIgdHlwZT0ic3F1YXJlIj48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbjogNC41cHQgMGluOyBmb250LXNpemU6IDEycHQ7IGZvbnQtZmFtaWx5OiAnVGltZXMgTmV3IFJvbWFuJyxzZXJpZjsgY29sb3I6IGJsYWNrOyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmEsc2Fucy1zZXJpZjsiIGxhbmc9IkVOLVVTIj5IQUxfPC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjogd2luZG93dGV4dDsiIGxhbmc9IkVOLVVTIj48c3BhbiBjbGFzcz0iQXBwbGUtY29udmVydGVkLXNwYWNlIj4mbmJzcDs8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hLHNhbnMtc2VyaWY7IiBsYW5nPSJFTi1VUyI+U01BUlRDQVJEX0Fib3J0KCk8bzpwPjwvbzpwPjwvc3Bhbj48L2xpPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luOiA0LjVwdCAwaW47IGZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6ICdUaW1lcyBOZXcgUm9tYW4nLHNlcmlmOyBjb2xvcjogYmxhY2s7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPkhBTF88L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiB3aW5kb3d0ZXh0OyIgbGFuZz0iRU4tVVMiPjxzcGFuIGNsYXNzPSJBcHBsZS1jb252ZXJ0ZWQtc3BhY2UiPiZuYnNwOzwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmEsc2Fucy1zZXJpZjsiIGxhbmc9IkVOLVVTIj5TTUFSVENBUkRfQWJvcnRUcmFuc21pdCgpPG86cD48L286cD48L3NwYW4+PC9saT48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbjogNC41cHQgMGluOyBmb250LXNpemU6IDEycHQ7IGZvbnQtZmFtaWx5OiAnVGltZXMgTmV3IFJvbWFuJyxzZXJpZjsgY29sb3I6IGJsYWNrOyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmEsc2Fucy1zZXJpZjsiIGxhbmc9IkVOLVVTIj5IQUxfPC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjogd2luZG93dGV4dDsiIGxhbmc9IkVOLVVTIj48c3BhbiBjbGFzcz0iQXBwbGUtY29udmVydGVkLXNwYWNlIj4mbmJzcDs8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hLHNhbnMtc2VyaWY7IiBsYW5nPSJFTi1VUyI+U01BUlRDQVJEX0Fib3J0UmVjZWl2ZSgpPG86cD48L286cD48L3NwYW4+PC9saT48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbjogNC41cHQgMGluOyBmb250LXNpemU6IDEycHQ7IGZvbnQtZmFtaWx5OiAnVGltZXMgTmV3IFJvbWFuJyxzZXJpZjsgY29sb3I6IGJsYWNrOyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmEsc2Fucy1zZXJpZjsiIGxhbmc9IkVOLVVTIj5IQUxfPC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjogd2luZG93dGV4dDsiIGxhbmc9IkVOLVVTIj48c3BhbiBjbGFzcz0iQXBwbGUtY29udmVydGVkLXNwYWNlIj4mbmJzcDs8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hLHNhbnMtc2VyaWY7IiBsYW5nPSJFTi1VUyI+U01BUlRDQVJEX0Fib3J0X0lUKCk8bzpwPjwvbzpwPjwvc3Bhbj48L2xpPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luOiA0LjVwdCAwaW47IGZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6ICdUaW1lcyBOZXcgUm9tYW4nLHNlcmlmOyBjb2xvcjogYmxhY2s7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPkhBTF88L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiB3aW5kb3d0ZXh0OyIgbGFuZz0iRU4tVVMiPjxzcGFuIGNsYXNzPSJBcHBsZS1jb252ZXJ0ZWQtc3BhY2UiPiZuYnNwOzwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmEsc2Fucy1zZXJpZjsiIGxhbmc9IkVOLVVTIj5TTUFSVENBUkRfQWJvcnRUcmFuc21pdF9JVCgpPG86cD48L286cD48L3NwYW4+PC9saT48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbjogNC41cHQgMGluOyBmb250LXNpemU6IDEycHQ7IGZvbnQtZmFtaWx5OiAnVGltZXMgTmV3IFJvbWFuJyxzZXJpZjsgY29sb3I6IGJsYWNrOyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmEsc2Fucy1zZXJpZjsiIGxhbmc9IkVOLVVTIj5IQUxfPC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjogd2luZG93dGV4dDsiIGxhbmc9IkVOLVVTIj48c3BhbiBjbGFzcz0iQXBwbGUtY29udmVydGVkLXNwYWNlIj4mbmJzcDs8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hLHNhbnMtc2VyaWY7IiBsYW5nPSJFTi1VUyI+U01BUlRDQVJEX0Fib3J0UmVjZWl2ZV9JVCgpPG86cD48L286cD48L3NwYW4+PC9saT48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbjogNC41cHQgMGluOyBmb250LXNpemU6IDEycHQ7IGZvbnQtZmFtaWx5OiAnVGltZXMgTmV3IFJvbWFuJyxzZXJpZjsgY29sb3I6IGJsYWNrOyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmEsc2Fucy1zZXJpZjsiIGxhbmc9IkVOLVVTIj5IQUxfPC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjogd2luZG93dGV4dDsiIGxhbmc9IkVOLVVTIj48c3BhbiBjbGFzcz0iQXBwbGUtY29udmVydGVkLXNwYWNlIj4mbmJzcDs8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hLHNhbnMtc2VyaWY7IiBsYW5nPSJFTi1VUyI+U01BUlRDQVJEX0Fib3J0Q3BsdENhbGxiYWNrKCk8bzpwPjwvbzpwPjwvc3Bhbj48L2xpPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luOiA0LjVwdCAwaW47IGZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6ICdUaW1lcyBOZXcgUm9tYW4nLHNlcmlmOyBjb2xvcjogYmxhY2s7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPkhBTF88L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiB3aW5kb3d0ZXh0OyIgbGFuZz0iRU4tVVMiPjxzcGFuIGNsYXNzPSJBcHBsZS1jb252ZXJ0ZWQtc3BhY2UiPiZuYnNwOzwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmEsc2Fucy1zZXJpZjsiIGxhbmc9IkVOLVVTIj5TTUFSVENBUkRfQWJvcnRUcmFuc21pdENwbHRDYWxsYmFjaygpPG86cD48L286cD48L3NwYW4+PC9saT48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbjogNC41cHQgMGluOyBmb250LXNpemU6IDEycHQ7IGZvbnQtZmFtaWx5OiAnVGltZXMgTmV3IFJvbWFuJyxzZXJpZjsgY29sb3I6IGJsYWNrOyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmEsc2Fucy1zZXJpZjsiIGxhbmc9IkVOLVVTIj5IQUxfPC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjogd2luZG93dGV4dDsiIGxhbmc9IkVOLVVTIj48c3BhbiBjbGFzcz0iQXBwbGUtY29udmVydGVkLXNwYWNlIj4mbmJzcDs8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hLHNhbnMtc2VyaWY7IiBsYW5nPSJFTi1VUyI+U01BUlRDQVJEX0Fib3J0UmVjZWl2ZUNwbHRDYWxsYmFjaygpPC9zcGFuPjwvbGk+PC91bD48L3VsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luOiA0LjVwdCAwaW47IGZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6ICdUaW1lcyBOZXcgUm9tYW4nLHNlcmlmOyBjb2xvcjogYmxhY2s7Ij48c3BhbiBzdHlsZT0iY29sb3I6IHJnYigwLCAwLCAwKTsgZm9udC1mYW1pbHk6IFZlcmRhbmEsc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMy4zMzMzcHg7IGZvbnQtc3R5bGU6IG5vcm1hbDsgZm9udC12YXJpYW50OiBub3JtYWw7IGZvbnQtd2VpZ2h0OiBub3JtYWw7IGxldHRlci1zcGFjaW5nOiBub3JtYWw7IGxpbmUtaGVpZ2h0OiBub3JtYWw7IHRleHQtYWxpZ246IGxlZnQ7IHRleHQtaW5kZW50OiAwcHg7IHRleHQtdHJhbnNmb3JtOiBub25lOyB3aGl0ZS1zcGFjZTogbm9ybWFsOyB3aWRvd3M6IDE7IHdvcmQtc3BhY2luZzogMHB4OyBmbG9hdDogbm9uZTsgZGlzcGxheTogaW5saW5lICEgaW1wb3J0YW50OyI+PHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiBib2xkOyI+SEFMIFRJTTwvc3Bhbj48c3BhbiBjbGFzcz0iQXBwbGUtY29udmVydGVkLXNwYWNlIj48c3BhbiBjbGFzcz0iQXBwbGUtY29udmVydGVkLXNwYWNlIj4mbmJzcDs8L3NwYW4+PC9zcGFuPnVwZGF0ZTwvc3Bhbj48L2xpPjx1bCBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMGluOyI+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW46IDQuNXB0IDBpbjsgZm9udC1zaXplOiAxMnB0OyBmb250LWZhbWlseTogJ1RpbWVzIE5ldyBSb21hbicsc2VyaWY7IGNvbG9yOiBibGFjazsiPjxzcGFuIHN0eWxlPSJjb2xvcjogcmdiKDAsIDAsIDApOyBmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyBmb250LXNpemU6IDEzLjMzMzNweDsgZm9udC1zdHlsZTogbm9ybWFsOyBmb250LXZhcmlhbnQ6IG5vcm1hbDsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDsgbGluZS1oZWlnaHQ6IG5vcm1hbDsgdGV4dC1hbGlnbjogbGVmdDsgdGV4dC1pbmRlbnQ6IDBweDsgdGV4dC10cmFuc2Zvcm06IG5vbmU7IHdoaXRlLXNwYWNlOiBub3JtYWw7IHdpZG93czogMTsgd29yZC1zcGFjaW5nOiAwcHg7IGZsb2F0OiBub25lOyBkaXNwbGF5OiBpbmxpbmUgISBpbXBvcnRhbnQ7Ij5VcGRhdGUgSEFMX1RJTUV4X1JlbWFwQ29uZmlnKCkgZnVuY3Rpb24gdG8gbWFuYWdlIFRJTSBpbnRlcm5hbCB0cmlnZ2VyIHJlbWFwOiBMUFRJTSBvciBUSU0zX1RSR088L3NwYW4+PC9saT48L3VsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luOiA0LjVwdCAwaW47IGZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6ICdUaW1lcyBOZXcgUm9tYW4nLHNlcmlmOyBjb2xvcjogYmxhY2s7Ij48c3BhbiBzdHlsZT0iY29sb3I6IHJnYigwLCAwLCAwKTsgZm9udC1mYW1pbHk6IFZlcmRhbmEsc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMy4zMzMzcHg7IGZvbnQtc3R5bGU6IG5vcm1hbDsgZm9udC12YXJpYW50OiBub3JtYWw7IGZvbnQtd2VpZ2h0OiBub3JtYWw7IGxldHRlci1zcGFjaW5nOiBub3JtYWw7IGxpbmUtaGVpZ2h0OiBub3JtYWw7IHRleHQtYWxpZ246IGxlZnQ7IHRleHQtaW5kZW50OiAwcHg7IHRleHQtdHJhbnNmb3JtOiBub25lOyB3aGl0ZS1zcGFjZTogbm9ybWFsOyB3aWRvd3M6IDE7IHdvcmQtc3BhY2luZzogMHB4OyBmbG9hdDogbm9uZTsgZGlzcGxheTogaW5saW5lICEgaW1wb3J0YW50OyI+PHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiBib2xkOyI+SEFMIFVBUlQ8c3BhbiBjbGFzcz0iQXBwbGUtY29udmVydGVkLXNwYWNlIj4mbmJzcDs8L3NwYW4+PC9zcGFuPnVwZGF0ZTwvc3Bhbj48L2xpPjx1bCBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMGluOyI+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW46IDQuNXB0IDBpbjsgZm9udC1zaXplOiAxMnB0OyBmb250LWZhbWlseTogJ1RpbWVzIE5ldyBSb21hbicsc2VyaWY7IGNvbG9yOiBibGFjazsiPjxzcGFuIHN0eWxlPSJjb2xvcjogcmdiKDAsIDAsIDApOyBmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyBmb250LXNpemU6IDEzLjMzMzNweDsgZm9udC1zdHlsZTogbm9ybWFsOyBmb250LXZhcmlhbnQ6IG5vcm1hbDsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDsgbGluZS1oZWlnaHQ6IG5vcm1hbDsgdGV4dC1hbGlnbjogbGVmdDsgdGV4dC1pbmRlbnQ6IDBweDsgdGV4dC10cmFuc2Zvcm06IG5vbmU7IHdoaXRlLXNwYWNlOiBub3JtYWw7IHdpZG93czogMTsgd29yZC1zcGFjaW5nOiAwcHg7IGZsb2F0OiBub25lOyBkaXNwbGF5OiBpbmxpbmUgISBpbXBvcnRhbnQ7Ij5BZGQgVHJhbnNmZXIgYWJvcnQgZnVuY3Rpb25zIGFuZCBjYWxsYmFja3M8L3NwYW4+PC9saT48L3VsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luOiA0LjVwdCAwaW47IGZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6ICdUaW1lcyBOZXcgUm9tYW4nLHNlcmlmOyBjb2xvcjogYmxhY2s7Ij48c3BhbiBzdHlsZT0iY29sb3I6IHJnYigwLCAwLCAwKTsgZm9udC1mYW1pbHk6IFZlcmRhbmEsc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMy4zMzMzcHg7IGZvbnQtc3R5bGU6IG5vcm1hbDsgZm9udC12YXJpYW50OiBub3JtYWw7IGZvbnQtd2VpZ2h0OiBub3JtYWw7IGxldHRlci1zcGFjaW5nOiBub3JtYWw7IGxpbmUtaGVpZ2h0OiBub3JtYWw7IHRleHQtYWxpZ246IGxlZnQ7IHRleHQtaW5kZW50OiAwcHg7IHRleHQtdHJhbnNmb3JtOiBub25lOyB3aGl0ZS1zcGFjZTogbm9ybWFsOyB3aWRvd3M6IDE7IHdvcmQtc3BhY2luZzogMHB4OyBmbG9hdDogbm9uZTsgZGlzcGxheTogaW5saW5lICEgaW1wb3J0YW50OyI+PHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiBib2xkOyI+SEFMIFVTQVJUPHNwYW4gY2xhc3M9IkFwcGxlLWNvbnZlcnRlZC1zcGFjZSI+Jm5ic3A7PC9zcGFuPjwvc3Bhbj51cGRhdGU8L3NwYW4+PC9saT48dWwgc3R5bGU9Im1hcmdpbi1ib3R0b206IDBpbjsiPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luOiA0LjVwdCAwaW47IGZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6ICdUaW1lcyBOZXcgUm9tYW4nLHNlcmlmOyBjb2xvcjogYmxhY2s7Ij48c3BhbiBzdHlsZT0iY29sb3I6IHJnYigwLCAwLCAwKTsgZm9udC1mYW1pbHk6IFZlcmRhbmEsc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMy4zMzMzcHg7IGZvbnQtc3R5bGU6IG5vcm1hbDsgZm9udC12YXJpYW50OiBub3JtYWw7IGZvbnQtd2VpZ2h0OiBub3JtYWw7IGxldHRlci1zcGFjaW5nOiBub3JtYWw7IGxpbmUtaGVpZ2h0OiBub3JtYWw7IHRleHQtYWxpZ246IGxlZnQ7IHRleHQtaW5kZW50OiAwcHg7IHRleHQtdHJhbnNmb3JtOiBub25lOyB3aGl0ZS1zcGFjZTogbm9ybWFsOyB3aWRvd3M6IDE7IHdvcmQtc3BhY2luZzogMHB4OyBmbG9hdDogbm9uZTsgZGlzcGxheTogaW5saW5lICEgaW1wb3J0YW50OyI+QWRkIFRyYW5zZmVyIGFib3J0IGZ1bmN0aW9ucyBhbmQgY2FsbGJhY2tzPC9zcGFuPjwvbGk+PC91bD48L3VsPjxoMyBzdHlsZT0iYmFja2dyb3VuZDogcmdiKDUxLCAxMDIsIDI1NSkgbm9uZSByZXBlYXQgc2Nyb2xsIDAlIDUwJTsgLW1vei1iYWNrZ3JvdW5kLWNsaXA6IGluaXRpYWw7IC1tb3otYmFja2dyb3VuZC1vcmlnaW46IGluaXRpYWw7IC1tb3otYmFja2dyb3VuZC1pbmxpbmUtcG9saWN5OiBpbml0aWFsOyBtYXJnaW4tcmlnaHQ6IDUwMHB0OyB3aWR0aDogMTgwcHg7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogQXJpYWw7IGNvbG9yOiB3aGl0ZTsiPlYxLjUuMiAvIDIyLVNlcHRlbWJlci0yMDE2PC9zcGFuPjwvaDM+PHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbjogNC41cHQgMGNtIDQuNXB0IDE4cHQ7Ij48YiBzdHlsZT0iIj48dT48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYTsgY29sb3I6IGJsYWNrOyI+TWFpbgogQ2hhbmdlczwvc3Bhbj48L3U+PC9iPjwvcD4KIAogPHVsIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwaW47IGNvbG9yOiByZ2IoMCwgMCwgMCk7IGZvbnQtZmFtaWx5OiAnVGltZXMgTmV3IFJvbWFuJzsgZm9udC1zaXplOiBtZWRpdW07IGZvbnQtc3R5bGU6IG5vcm1hbDsgZm9udC12YXJpYW50OiBub3JtYWw7IGZvbnQtd2VpZ2h0OiBub3JtYWw7IGxldHRlci1zcGFjaW5nOiBub3JtYWw7IGxpbmUtaGVpZ2h0OiBub3JtYWw7IHRleHQtYWxpZ246IHN0YXJ0OyB0ZXh0LWluZGVudDogMHB4OyB0ZXh0LXRyYW5zZm9ybTogbm9uZTsgd2hpdGUtc3BhY2U6IG5vcm1hbDsgd29yZC1zcGFjaW5nOiAwcHg7IG1hcmdpbi10b3A6IDBjbTsiIHR5cGU9InNxdWFyZSI+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJjb2xvcjogcmdiKDAsIDAsIDApOyBmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyBmb250LXNpemU6IDEzLjMzMzNweDsgZm9udC1zdHlsZTogbm9ybWFsOyBmb250LXZhcmlhbnQ6IG5vcm1hbDsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDsgbGluZS1oZWlnaHQ6IG5vcm1hbDsgdGV4dC1hbGlnbjogbGVmdDsgdGV4dC1pbmRlbnQ6IDBweDsgdGV4dC10cmFuc2Zvcm06IG5vbmU7IHdoaXRlLXNwYWNlOiBub3JtYWw7IHdpZG93czogMTsgd29yZC1zcGFjaW5nOiAwcHg7IGRpc3BsYXk6IGlubGluZSAhIGltcG9ydGFudDsgZmxvYXQ6IG5vbmU7Ij48c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6IGJvbGQ7Ij5IQUwgSTJDPC9zcGFuPiB1cGRhdGU8L3NwYW4+PC9saT48dWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7IiBsYW5nPSJFTi1VUyI+Rml4IHdyb25nCkBAIC0xNjg1LDcgKzE3MTksNyBAQAogPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsgY29sb3I6IGJsYWNrOyIgbGFuZz0iRU4tVVMiPlVwZGF0ZSBJMkMgQVBJJ3MgPC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7IGNvbG9yOiBibGFjazsiIGxhbmc9IkVOLVVTIj4oUG9sbGluZywgSVQgYW5kIERNQSBpbnRlcmZhY2VzKTwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyBjb2xvcjogYmxhY2s7IiBsYW5nPSJFTi1VUyI+IHRvIG1hbmFnZSBJMkMgPC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7IGNvbG9yOiBibGFjazsiIGxhbmc9IkVOLVVTIj5YZmVyU2l6ZSBhbmQmbmJzcDtYZmVyQ291bnQ8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsgY29sb3I6IGJsYWNrOyIgbGFuZz0iRU4tVVMiPiBoYW5kbGUgcGFyYW1ldGVycyBpbnN0ZWFkIG9mIEFQSSBzaXplIHBhcmFtZXRlciB0byBoZWxwIHVzZXIgdG8gZ2V0IGluZm9ybWF0aW9uIG9mIGNvdW50ZXIgaW4gY2FzZSBvZiBlcnJvci4mbmJzcDs8L3NwYW4+PC9wPjwvbGk+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPgogCiA8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyBjb2xvcjogYmxhY2s7IiBsYW5nPSJFTi1VUyI+VXBkYXRlIEFib3J0IGZ1bmN0aW9uYWxpdHkgdG8gbWFuYWdlIERNQSB1c2UKLWNhc2U8L3NwYW4+PC9wPjwvbGk+PC91bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImNvbG9yOiByZ2IoMCwgMCwgMCk7IGZvbnQtZmFtaWx5OiBWZXJkYW5hLHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTMuMzMzM3B4OyBmb250LXN0eWxlOiBub3JtYWw7IGZvbnQtdmFyaWFudDogbm9ybWFsOyBmb250LXdlaWdodDogbm9ybWFsOyBsZXR0ZXItc3BhY2luZzogbm9ybWFsOyBsaW5lLWhlaWdodDogbm9ybWFsOyB0ZXh0LWFsaWduOiBsZWZ0OyB0ZXh0LWluZGVudDogMHB4OyB0ZXh0LXRyYW5zZm9ybTogbm9uZTsgd2hpdGUtc3BhY2U6IG5vcm1hbDsgd2lkb3dzOiAxOyB3b3JkLXNwYWNpbmc6IDBweDsgZGlzcGxheTogaW5saW5lICEgaW1wb3J0YW50OyBmbG9hdDogbm9uZTsiPjxzcGFuIHN0eWxlPSJmb250LXdlaWdodDogYm9sZDsiPkhBTCBGTVBJMkM8L3NwYW4+IHVwZGF0ZTwvc3Bhbj48L2xpPjx1bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImNvbG9yOiByZ2IoMCwgMCwgMCk7IGZvbnQtZmFtaWx5OiBWZXJkYW5hLHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTMuMzMzM3B4OyBmb250LXN0eWxlOiBub3JtYWw7IGZvbnQtdmFyaWFudDogbm9ybWFsOyBmb250LXdlaWdodDogbm9ybWFsOyBsZXR0ZXItc3BhY2luZzogbm9ybWFsOyBsaW5lLWhlaWdodDogbm9ybWFsOyB0ZXh0LWFsaWduOiBsZWZ0OyB0ZXh0LWluZGVudDogMHB4OyB0ZXh0LXRyYW5zZm9ybTogbm9uZTsgd2hpdGUtc3BhY2U6IG5vcm1hbDsgd2lkb3dzOiAxOyB3b3JkLXNwYWNpbmc6IDBweDsgZGlzcGxheTogaW5saW5lICEgaW1wb3J0YW50OyBmbG9hdDogbm9uZTsiPlVwZGF0ZSB0byBkaXNhYmxlIE93biBBZGRyZXNzPC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjogcmdiKDAsIDAsIDApOyBmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyBmb250LXNpemU6IDEzLjMzMzNweDsgZm9udC1zdHlsZTogbm9ybWFsOyBmb250LXZhcmlhbnQ6IG5vcm1hbDsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDsgbGluZS1oZWlnaHQ6IG5vcm1hbDsgdGV4dC1hbGlnbjogbGVmdDsgdGV4dC1pbmRlbnQ6IDBweDsgdGV4dC10cmFuc2Zvcm06IG5vbmU7IHdoaXRlLXNwYWNlOiBub3JtYWw7IHdpZG93czogMTsgd29yZC1zcGFjaW5nOiAwcHg7IGRpc3BsYXk6IGlubGluZSAhIGltcG9ydGFudDsgZmxvYXQ6IG5vbmU7Ij48L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiByZ2IoMCwgMCwgMCk7IGZvbnQtZmFtaWx5OiBWZXJkYW5hLHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTMuMzMzM3B4OyBmb250LXN0eWxlOiBub3JtYWw7IGZvbnQtdmFyaWFudDogbm9ybWFsOyBmb250LXdlaWdodDogbm9ybWFsOyBsZXR0ZXItc3BhY2luZzogbm9ybWFsOyBsaW5lLWhlaWdodDogbm9ybWFsOyB0ZXh0LWFsaWduOiBsZWZ0OyB0ZXh0LWluZGVudDogMHB4OyB0ZXh0LXRyYW5zZm9ybTogbm9uZTsgd2hpdGUtc3BhY2U6IG5vcm1hbDsgd2lkb3dzOiAxOyB3b3JkLXNwYWNpbmc6IDBweDsgZGlzcGxheTogaW5saW5lICEgaW1wb3J0YW50OyBmbG9hdDogbm9uZTsiPiBiZWZvcmUmbmJzcDtzZXR0aW5nIHRoZSA8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiByZ2IoMCwgMCwgMCk7IGZvbnQtZmFtaWx5OiBWZXJkYW5hLHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTMuMzMzM3B4OyBmb250LXN0eWxlOiBub3JtYWw7IGZvbnQtdmFyaWFudDogbm9ybWFsOyBmb250LXdlaWdodDogbm9ybWFsOyBsZXR0ZXItc3BhY2luZzogbm9ybWFsOyBsaW5lLWhlaWdodDogbm9ybWFsOyB0ZXh0LWFsaWduOiBsZWZ0OyB0ZXh0LWluZGVudDogMHB4OyB0ZXh0LXRyYW5zZm9ybTogbm9uZTsgd2hpdGUtc3BhY2U6IG5vcm1hbDsgd2lkb3dzOiAxOyB3b3JkLXNwYWNpbmc6IDBweDsgZGlzcGxheTogaW5saW5lICEgaW1wb3J0YW50OyBmbG9hdDogbm9uZTsiPm5ldyBPd24gQWRkcmVzczwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6IHJnYigwLCAwLCAwKTsgZm9udC1mYW1pbHk6IFZlcmRhbmEsc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMy4zMzMzcHg7IGZvbnQtc3R5bGU6IG5vcm1hbDsgZm9udC12YXJpYW50OiBub3JtYWw7IGZvbnQtd2VpZ2h0OiBub3JtYWw7IGxldHRlci1zcGFjaW5nOiBub3JtYWw7IGxpbmUtaGVpZ2h0OiBub3JtYWw7IHRleHQtYWxpZ246IGxlZnQ7IHRleHQtaW5kZW50OiAwcHg7IHRleHQtdHJhbnNmb3JtOiBub25lOyB3aGl0ZS1zcGFjZTogbm9ybWFsOyB3aWRvd3M6IDE7IHdvcmQtc3BhY2luZzogMHB4OyBkaXNwbGF5OiBpbmxpbmUgISBpbXBvcnRhbnQ7IGZsb2F0OiBub25lOyI+IGNvbmZpZ3VyYXRpb246PC9zcGFuPjwvbGk+PHVsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iY29sb3I6IHJnYigwLCAwLCAwKTsgZm9udC1mYW1pbHk6IFZlcmRhbmEsc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMy4zMzMzcHg7IGZvbnQtc3R5bGU6IG5vcm1hbDsgZm9udC12YXJpYW50OiBub3JtYWw7IGZvbnQtd2VpZ2h0OiBub3JtYWw7IGxldHRlci1zcGFjaW5nOiBub3JtYWw7IGxpbmUtaGVpZ2h0OiBub3JtYWw7IHRleHQtYWxpZ246IGxlZnQ7IHRleHQtaW5kZW50OiAwcHg7IHRleHQtdHJhbnNmb3JtOiBub25lOyB3aGl0ZS1zcGFjZTogbm9ybWFsOyB3aWRvd3M6IDE7IHdvcmQtc3BhY2luZzogMHB4OyBkaXNwbGF5OiBpbmxpbmUgISBpbXBvcnRhbnQ7IGZsb2F0OiBub25lOyI+VXBkYXRlIEhBTF9GTVBJMkNfSW5pdCgpIHRvIGRpc2FibGUgRk1QSTJDX09BUnhfRU4gYml0IGJlZm9yZSBhbnkgY29uZmlndXJhdGlvbiBpbiBPQVJ4IHJlZ2lzdGVyczwvc3Bhbj48L2xpPjwvdWw+PC91bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImNvbG9yOiByZ2IoMCwgMCwgMCk7IGZvbnQtZmFtaWx5OiBWZXJkYW5hLHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTMuMzMzM3B4OyBmb250LXN0eWxlOiBub3JtYWw7IGZvbnQtdmFyaWFudDogbm9ybWFsOyBmb250LXdlaWdodDogbm9ybWFsOyBsZXR0ZXItc3BhY2luZzogbm9ybWFsOyBsaW5lLWhlaWdodDogbm9ybWFsOyB0ZXh0LWFsaWduOiBsZWZ0OyB0ZXh0LWluZGVudDogMHB4OyB0ZXh0LXRyYW5zZm9ybTogbm9uZTsgd2hpdGUtc3BhY2U6IG5vcm1hbDsgd2lkb3dzOiAxOyB3b3JkLXNwYWNpbmc6IDBweDsgZGlzcGxheTogaW5saW5lICEgaW1wb3J0YW50OyBmbG9hdDogbm9uZTsiPjxzcGFuIHN0eWxlPSJmb250LXdlaWdodDogYm9sZDsiPkhBTCBDQU4gPC9zcGFuPnVwZGF0ZTwvc3Bhbj48L2xpPjx1bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImNvbG9yOiByZ2IoMCwgMCwgMCk7IGZvbnQtZmFtaWx5OiBWZXJkYW5hLHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTMuMzMzM3B4OyBmb250LXN0eWxlOiBub3JtYWw7IGZvbnQtdmFyaWFudDogbm9ybWFsOyBmb250LXdlaWdodDogbm9ybWFsOyBsZXR0ZXItc3BhY2luZzogbm9ybWFsOyBsaW5lLWhlaWdodDogbm9ybWFsOyB0ZXh0LWFsaWduOiBsZWZ0OyB0ZXh0LWluZGVudDogMHB4OyB0ZXh0LXRyYW5zZm9ybTogbm9uZTsgd2hpdGUtc3BhY2U6IG5vcm1hbDsgd2lkb3dzOiAxOyB3b3JkLXNwYWNpbmc6IDBweDsgZGlzcGxheTogaW5saW5lICEgaW1wb3J0YW50OyBmbG9hdDogbm9uZTsiPlVwZGF0ZSBDQU4gcmVjZWl2ZSBwcm9jZXNzZXMgdG8gc2V0IENBTiBSeE1zZyBGSUZPTnVtYmVyIHBhcmFtZXRlcjwvc3Bhbj48L2xpPjwvdWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJjb2xvcjogcmdiKDAsIDAsIDApOyBmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyBmb250LXNpemU6IDEzLjMzMzNweDsgZm9udC1zdHlsZTogbm9ybWFsOyBmb250LXZhcmlhbnQ6IG5vcm1hbDsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDsgbGluZS1oZWlnaHQ6IG5vcm1hbDsgdGV4dC1hbGlnbjogbGVmdDsgdGV4dC1pbmRlbnQ6IDBweDsgdGV4dC10cmFuc2Zvcm06IG5vbmU7IHdoaXRlLXNwYWNlOiBub3JtYWw7IHdpZG93czogMTsgd29yZC1zcGFjaW5nOiAwcHg7IGRpc3BsYXk6IGlubGluZSAhIGltcG9ydGFudDsgZmxvYXQ6IG5vbmU7Ij48c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6IGJvbGQ7Ij5IQUwgVUFSVCA8L3NwYW4+dXBkYXRlPC9zcGFuPjwvbGk+PHVsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iY29sb3I6IHJnYigwLCAwLCAwKTsgZm9udC1mYW1pbHk6IFZlcmRhbmEsc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMy4zMzMzcHg7IGZvbnQtc3R5bGU6IG5vcm1hbDsgZm9udC12YXJpYW50OiBub3JtYWw7IGZvbnQtd2VpZ2h0OiBub3JtYWw7IGxldHRlci1zcGFjaW5nOiBub3JtYWw7IGxpbmUtaGVpZ2h0OiBub3JtYWw7IHRleHQtYWxpZ246IGxlZnQ7IHRleHQtaW5kZW50OiAwcHg7IHRleHQtdHJhbnNmb3JtOiBub25lOyB3aGl0ZS1zcGFjZTogbm9ybWFsOyB3aWRvd3M6IDE7IHdvcmQtc3BhY2luZzogMHB4OyBkaXNwbGF5OiBpbmxpbmUgISBpbXBvcnRhbnQ7IGZsb2F0OiBub25lOyI+VXBkYXRlJm5ic3A7VUFSVCBoYW5kbGUgPC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjogcmdiKDAsIDAsIDApOyBmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyBmb250LXNpemU6IDEzLjMzMzNweDsgZm9udC1zdHlsZTogbm9ybWFsOyBmb250LXZhcmlhbnQ6IG5vcm1hbDsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDsgbGluZS1oZWlnaHQ6IG5vcm1hbDsgdGV4dC1hbGlnbjogbGVmdDsgdGV4dC1pbmRlbnQ6IDBweDsgdGV4dC10cmFuc2Zvcm06IG5vbmU7IHdoaXRlLXNwYWNlOiBub3JtYWw7IHdpZG93czogMTsgd29yZC1zcGFjaW5nOiAwcHg7IGRpc3BsYXk6IGlubGluZSAhIGltcG9ydGFudDsgZmxvYXQ6IG5vbmU7Ij5UeFhmZXJDb3VudCBhbmQgUnhYZmVyQ291bnQgPC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjogcmdiKDAsIDAsIDApOyBmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyBmb250LXNpemU6IDEzLjMzMzNweDsgZm9udC1zdHlsZTogbm9ybWFsOyBmb250LXZhcmlhbnQ6IG5vcm1hbDsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDsgbGluZS1oZWlnaHQ6IG5vcm1hbDsgdGV4dC1hbGlnbjogbGVmdDsgdGV4dC1pbmRlbnQ6IDBweDsgdGV4dC10cmFuc2Zvcm06IG5vbmU7IHdoaXRlLXNwYWNlOiBub3JtYWw7IHdpZG93czogMTsgd29yZC1zcGFjaW5nOiAwcHg7IGRpc3BsYXk6IGlubGluZSAhIGltcG9ydGFudDsgZmxvYXQ6IG5vbmU7Ij5wYXJhbWV0ZXJzIGFzIHZvbGF0aWxlIHRvIGF2b2lkIGV2ZW50dWFsJm5ic3A7aXNzdWUgd2l0aCBIaWdoIFNwZWVkIG9wdGltaXphdGlvbiAmbmJzcDs8L3NwYW4+PC9saT48L3VsPjwvdWw+PGgzIHN0eWxlPSJiYWNrZ3JvdW5kOiByZ2IoNTEsIDEwMiwgMjU1KSBub25lIHJlcGVhdCBzY3JvbGwgMCUgNTAlOyAtbW96LWJhY2tncm91bmQtY2xpcDogLW1vei1pbml0aWFsOyAtbW96LWJhY2tncm91bmQtb3JpZ2luOiAtbW96LWluaXRpYWw7IC1tb3otYmFja2dyb3VuZC1pbmxpbmUtcG9saWN5OiAtbW96LWluaXRpYWw7IG1hcmdpbi1yaWdodDogNTAwcHQ7IHdpZHRoOiAxODBweDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBBcmlhbDsgY29sb3I6IHdoaXRlOyI+VjEuNS4xIC8gMDEtSnVseS0yMDE2PC9zcGFuPjwvaDM+PHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbjogNC41cHQgMGNtIDQuNXB0IDE4cHQ7Ij48YiBzdHlsZT0iIj48dT48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYTsgY29sb3I6IGJsYWNrOyI+TWFpbgorY2FzZTwvc3Bhbj48L3A+PC9saT48L3VsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iY29sb3I6IHJnYigwLCAwLCAwKTsgZm9udC1mYW1pbHk6IFZlcmRhbmEsc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMy4zMzMzcHg7IGZvbnQtc3R5bGU6IG5vcm1hbDsgZm9udC12YXJpYW50OiBub3JtYWw7IGZvbnQtd2VpZ2h0OiBub3JtYWw7IGxldHRlci1zcGFjaW5nOiBub3JtYWw7IGxpbmUtaGVpZ2h0OiBub3JtYWw7IHRleHQtYWxpZ246IGxlZnQ7IHRleHQtaW5kZW50OiAwcHg7IHRleHQtdHJhbnNmb3JtOiBub25lOyB3aGl0ZS1zcGFjZTogbm9ybWFsOyB3aWRvd3M6IDE7IHdvcmQtc3BhY2luZzogMHB4OyBkaXNwbGF5OiBpbmxpbmUgISBpbXBvcnRhbnQ7IGZsb2F0OiBub25lOyI+PHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiBib2xkOyI+SEFMIEZNUEkyQzwvc3Bhbj4gdXBkYXRlPC9zcGFuPjwvbGk+PHVsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iY29sb3I6IHJnYigwLCAwLCAwKTsgZm9udC1mYW1pbHk6IFZlcmRhbmEsc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMy4zMzMzcHg7IGZvbnQtc3R5bGU6IG5vcm1hbDsgZm9udC12YXJpYW50OiBub3JtYWw7IGZvbnQtd2VpZ2h0OiBub3JtYWw7IGxldHRlci1zcGFjaW5nOiBub3JtYWw7IGxpbmUtaGVpZ2h0OiBub3JtYWw7IHRleHQtYWxpZ246IGxlZnQ7IHRleHQtaW5kZW50OiAwcHg7IHRleHQtdHJhbnNmb3JtOiBub25lOyB3aGl0ZS1zcGFjZTogbm9ybWFsOyB3aWRvd3M6IDE7IHdvcmQtc3BhY2luZzogMHB4OyBkaXNwbGF5OiBpbmxpbmUgISBpbXBvcnRhbnQ7IGZsb2F0OiBub25lOyI+VXBkYXRlIHRvIGRpc2FibGUgT3duIEFkZHJlc3M8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiByZ2IoMCwgMCwgMCk7IGZvbnQtZmFtaWx5OiBWZXJkYW5hLHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTMuMzMzM3B4OyBmb250LXN0eWxlOiBub3JtYWw7IGZvbnQtdmFyaWFudDogbm9ybWFsOyBmb250LXdlaWdodDogbm9ybWFsOyBsZXR0ZXItc3BhY2luZzogbm9ybWFsOyBsaW5lLWhlaWdodDogbm9ybWFsOyB0ZXh0LWFsaWduOiBsZWZ0OyB0ZXh0LWluZGVudDogMHB4OyB0ZXh0LXRyYW5zZm9ybTogbm9uZTsgd2hpdGUtc3BhY2U6IG5vcm1hbDsgd2lkb3dzOiAxOyB3b3JkLXNwYWNpbmc6IDBweDsgZGlzcGxheTogaW5saW5lICEgaW1wb3J0YW50OyBmbG9hdDogbm9uZTsiPjwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6IHJnYigwLCAwLCAwKTsgZm9udC1mYW1pbHk6IFZlcmRhbmEsc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMy4zMzMzcHg7IGZvbnQtc3R5bGU6IG5vcm1hbDsgZm9udC12YXJpYW50OiBub3JtYWw7IGZvbnQtd2VpZ2h0OiBub3JtYWw7IGxldHRlci1zcGFjaW5nOiBub3JtYWw7IGxpbmUtaGVpZ2h0OiBub3JtYWw7IHRleHQtYWxpZ246IGxlZnQ7IHRleHQtaW5kZW50OiAwcHg7IHRleHQtdHJhbnNmb3JtOiBub25lOyB3aGl0ZS1zcGFjZTogbm9ybWFsOyB3aWRvd3M6IDE7IHdvcmQtc3BhY2luZzogMHB4OyBkaXNwbGF5OiBpbmxpbmUgISBpbXBvcnRhbnQ7IGZsb2F0OiBub25lOyI+IGJlZm9yZSZuYnNwO3NldHRpbmcgdGhlIDwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6IHJnYigwLCAwLCAwKTsgZm9udC1mYW1pbHk6IFZlcmRhbmEsc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMy4zMzMzcHg7IGZvbnQtc3R5bGU6IG5vcm1hbDsgZm9udC12YXJpYW50OiBub3JtYWw7IGZvbnQtd2VpZ2h0OiBub3JtYWw7IGxldHRlci1zcGFjaW5nOiBub3JtYWw7IGxpbmUtaGVpZ2h0OiBub3JtYWw7IHRleHQtYWxpZ246IGxlZnQ7IHRleHQtaW5kZW50OiAwcHg7IHRleHQtdHJhbnNmb3JtOiBub25lOyB3aGl0ZS1zcGFjZTogbm9ybWFsOyB3aWRvd3M6IDE7IHdvcmQtc3BhY2luZzogMHB4OyBkaXNwbGF5OiBpbmxpbmUgISBpbXBvcnRhbnQ7IGZsb2F0OiBub25lOyI+bmV3IE93biBBZGRyZXNzPC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjogcmdiKDAsIDAsIDApOyBmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyBmb250LXNpemU6IDEzLjMzMzNweDsgZm9udC1zdHlsZTogbm9ybWFsOyBmb250LXZhcmlhbnQ6IG5vcm1hbDsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDsgbGluZS1oZWlnaHQ6IG5vcm1hbDsgdGV4dC1hbGlnbjogbGVmdDsgdGV4dC1pbmRlbnQ6IDBweDsgdGV4dC10cmFuc2Zvcm06IG5vbmU7IHdoaXRlLXNwYWNlOiBub3JtYWw7IHdpZG93czogMTsgd29yZC1zcGFjaW5nOiAwcHg7IGRpc3BsYXk6IGlubGluZSAhIGltcG9ydGFudDsgZmxvYXQ6IG5vbmU7Ij4gY29uZmlndXJhdGlvbjo8L3NwYW4+PC9saT48dWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJjb2xvcjogcmdiKDAsIDAsIDApOyBmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyBmb250LXNpemU6IDEzLjMzMzNweDsgZm9udC1zdHlsZTogbm9ybWFsOyBmb250LXZhcmlhbnQ6IG5vcm1hbDsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDsgbGluZS1oZWlnaHQ6IG5vcm1hbDsgdGV4dC1hbGlnbjogbGVmdDsgdGV4dC1pbmRlbnQ6IDBweDsgdGV4dC10cmFuc2Zvcm06IG5vbmU7IHdoaXRlLXNwYWNlOiBub3JtYWw7IHdpZG93czogMTsgd29yZC1zcGFjaW5nOiAwcHg7IGRpc3BsYXk6IGlubGluZSAhIGltcG9ydGFudDsgZmxvYXQ6IG5vbmU7Ij5VcGRhdGUgSEFMX0ZNUEkyQ19Jbml0KCkgdG8gZGlzYWJsZSBGTVBJMkNfT0FSeF9FTiBiaXQgYmVmb3JlIGFueSBjb25maWd1cmF0aW9uIGluIE9BUnggcmVnaXN0ZXJzPC9zcGFuPjwvbGk+PC91bD48L3VsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iY29sb3I6IHJnYigwLCAwLCAwKTsgZm9udC1mYW1pbHk6IFZlcmRhbmEsc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMy4zMzMzcHg7IGZvbnQtc3R5bGU6IG5vcm1hbDsgZm9udC12YXJpYW50OiBub3JtYWw7IGZvbnQtd2VpZ2h0OiBub3JtYWw7IGxldHRlci1zcGFjaW5nOiBub3JtYWw7IGxpbmUtaGVpZ2h0OiBub3JtYWw7IHRleHQtYWxpZ246IGxlZnQ7IHRleHQtaW5kZW50OiAwcHg7IHRleHQtdHJhbnNmb3JtOiBub25lOyB3aGl0ZS1zcGFjZTogbm9ybWFsOyB3aWRvd3M6IDE7IHdvcmQtc3BhY2luZzogMHB4OyBkaXNwbGF5OiBpbmxpbmUgISBpbXBvcnRhbnQ7IGZsb2F0OiBub25lOyI+PHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiBib2xkOyI+SEFMIENBTiA8L3NwYW4+dXBkYXRlPC9zcGFuPjwvbGk+PHVsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iY29sb3I6IHJnYigwLCAwLCAwKTsgZm9udC1mYW1pbHk6IFZlcmRhbmEsc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMy4zMzMzcHg7IGZvbnQtc3R5bGU6IG5vcm1hbDsgZm9udC12YXJpYW50OiBub3JtYWw7IGZvbnQtd2VpZ2h0OiBub3JtYWw7IGxldHRlci1zcGFjaW5nOiBub3JtYWw7IGxpbmUtaGVpZ2h0OiBub3JtYWw7IHRleHQtYWxpZ246IGxlZnQ7IHRleHQtaW5kZW50OiAwcHg7IHRleHQtdHJhbnNmb3JtOiBub25lOyB3aGl0ZS1zcGFjZTogbm9ybWFsOyB3aWRvd3M6IDE7IHdvcmQtc3BhY2luZzogMHB4OyBkaXNwbGF5OiBpbmxpbmUgISBpbXBvcnRhbnQ7IGZsb2F0OiBub25lOyI+VXBkYXRlIENBTiByZWNlaXZlIHByb2Nlc3NlcyB0byBzZXQgQ0FOIFJ4TXNnIEZJRk9OdW1iZXIgcGFyYW1ldGVyPC9zcGFuPjwvbGk+PC91bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImNvbG9yOiByZ2IoMCwgMCwgMCk7IGZvbnQtZmFtaWx5OiBWZXJkYW5hLHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTMuMzMzM3B4OyBmb250LXN0eWxlOiBub3JtYWw7IGZvbnQtdmFyaWFudDogbm9ybWFsOyBmb250LXdlaWdodDogbm9ybWFsOyBsZXR0ZXItc3BhY2luZzogbm9ybWFsOyBsaW5lLWhlaWdodDogbm9ybWFsOyB0ZXh0LWFsaWduOiBsZWZ0OyB0ZXh0LWluZGVudDogMHB4OyB0ZXh0LXRyYW5zZm9ybTogbm9uZTsgd2hpdGUtc3BhY2U6IG5vcm1hbDsgd2lkb3dzOiAxOyB3b3JkLXNwYWNpbmc6IDBweDsgZGlzcGxheTogaW5saW5lICEgaW1wb3J0YW50OyBmbG9hdDogbm9uZTsiPjxzcGFuIHN0eWxlPSJmb250LXdlaWdodDogYm9sZDsiPkhBTCBVQVJUIDwvc3Bhbj51cGRhdGU8L3NwYW4+PC9saT48dWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJjb2xvcjogcmdiKDAsIDAsIDApOyBmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyBmb250LXNpemU6IDEzLjMzMzNweDsgZm9udC1zdHlsZTogbm9ybWFsOyBmb250LXZhcmlhbnQ6IG5vcm1hbDsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDsgbGluZS1oZWlnaHQ6IG5vcm1hbDsgdGV4dC1hbGlnbjogbGVmdDsgdGV4dC1pbmRlbnQ6IDBweDsgdGV4dC10cmFuc2Zvcm06IG5vbmU7IHdoaXRlLXNwYWNlOiBub3JtYWw7IHdpZG93czogMTsgd29yZC1zcGFjaW5nOiAwcHg7IGRpc3BsYXk6IGlubGluZSAhIGltcG9ydGFudDsgZmxvYXQ6IG5vbmU7Ij5VcGRhdGUmbmJzcDtVQVJUIGhhbmRsZSA8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiByZ2IoMCwgMCwgMCk7IGZvbnQtZmFtaWx5OiBWZXJkYW5hLHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTMuMzMzM3B4OyBmb250LXN0eWxlOiBub3JtYWw7IGZvbnQtdmFyaWFudDogbm9ybWFsOyBmb250LXdlaWdodDogbm9ybWFsOyBsZXR0ZXItc3BhY2luZzogbm9ybWFsOyBsaW5lLWhlaWdodDogbm9ybWFsOyB0ZXh0LWFsaWduOiBsZWZ0OyB0ZXh0LWluZGVudDogMHB4OyB0ZXh0LXRyYW5zZm9ybTogbm9uZTsgd2hpdGUtc3BhY2U6IG5vcm1hbDsgd2lkb3dzOiAxOyB3b3JkLXNwYWNpbmc6IDBweDsgZGlzcGxheTogaW5saW5lICEgaW1wb3J0YW50OyBmbG9hdDogbm9uZTsiPlR4WGZlckNvdW50IGFuZCBSeFhmZXJDb3VudCA8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiByZ2IoMCwgMCwgMCk7IGZvbnQtZmFtaWx5OiBWZXJkYW5hLHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTMuMzMzM3B4OyBmb250LXN0eWxlOiBub3JtYWw7IGZvbnQtdmFyaWFudDogbm9ybWFsOyBmb250LXdlaWdodDogbm9ybWFsOyBsZXR0ZXItc3BhY2luZzogbm9ybWFsOyBsaW5lLWhlaWdodDogbm9ybWFsOyB0ZXh0LWFsaWduOiBsZWZ0OyB0ZXh0LWluZGVudDogMHB4OyB0ZXh0LXRyYW5zZm9ybTogbm9uZTsgd2hpdGUtc3BhY2U6IG5vcm1hbDsgd2lkb3dzOiAxOyB3b3JkLXNwYWNpbmc6IDBweDsgZGlzcGxheTogaW5saW5lICEgaW1wb3J0YW50OyBmbG9hdDogbm9uZTsiPnBhcmFtZXRlcnMgYXMgdm9sYXRpbGUgdG8gYXZvaWQgZXZlbnR1YWwmbmJzcDtpc3N1ZSB3aXRoIEhpZ2ggU3BlZWQgb3B0aW1pemF0aW9uICZuYnNwOzwvc3Bhbj48L2xpPjwvdWw+PC91bD48aDMgc3R5bGU9ImJhY2tncm91bmQ6IHJnYig1MSwgMTAyLCAyNTUpIG5vbmUgcmVwZWF0IHNjcm9sbCAwJSA1MCU7IC1tb3otYmFja2dyb3VuZC1jbGlwOiBpbml0aWFsOyAtbW96LWJhY2tncm91bmQtb3JpZ2luOiBpbml0aWFsOyAtbW96LWJhY2tncm91bmQtaW5saW5lLXBvbGljeTogaW5pdGlhbDsgbWFyZ2luLXJpZ2h0OiA1MDBwdDsgd2lkdGg6IDE4MHB4OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IEFyaWFsOyBjb2xvcjogd2hpdGU7Ij5WMS41LjEgLyAwMS1KdWx5LTIwMTY8L3NwYW4+PC9oMz48cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luOiA0LjVwdCAwY20gNC41cHQgMThwdDsiPjxiIHN0eWxlPSIiPjx1PjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hOyBjb2xvcjogYmxhY2s7Ij5NYWluCiBDaGFuZ2VzPC9zcGFuPjwvdT48L2I+PC9wPgogCiA8dWwgc3R5bGU9Im1hcmdpbi1ib3R0b206IDBpbjsgY29sb3I6IHJnYigwLCAwLCAwKTsgZm9udC1mYW1pbHk6ICdUaW1lcyBOZXcgUm9tYW4nOyBmb250LXNpemU6IG1lZGl1bTsgZm9udC1zdHlsZTogbm9ybWFsOyBmb250LXZhcmlhbnQ6IG5vcm1hbDsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDsgbGluZS1oZWlnaHQ6IG5vcm1hbDsgdGV4dC1hbGlnbjogc3RhcnQ7IHRleHQtaW5kZW50OiAwcHg7IHRleHQtdHJhbnNmb3JtOiBub25lOyB3aGl0ZS1zcGFjZTogbm9ybWFsOyB3b3JkLXNwYWNpbmc6IDBweDsgbWFyZ2luLXRvcDogMGNtOyIgdHlwZT0ic3F1YXJlIj48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImNvbG9yOiByZ2IoMCwgMCwgMCk7IGZvbnQtZmFtaWx5OiBWZXJkYW5hLHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTMuMzMzM3B4OyBmb250LXN0eWxlOiBub3JtYWw7IGZvbnQtdmFyaWFudDogbm9ybWFsOyBmb250LXdlaWdodDogbm9ybWFsOyBsZXR0ZXItc3BhY2luZzogbm9ybWFsOyBsaW5lLWhlaWdodDogbm9ybWFsOyB0ZXh0LWFsaWduOiBsZWZ0OyB0ZXh0LWluZGVudDogMHB4OyB0ZXh0LXRyYW5zZm9ybTogbm9uZTsgd2hpdGUtc3BhY2U6IG5vcm1hbDsgd2lkb3dzOiAxOyB3b3JkLXNwYWNpbmc6IDBweDsgZGlzcGxheTogaW5saW5lICEgaW1wb3J0YW50OyBmbG9hdDogbm9uZTsiPjxzcGFuIHN0eWxlPSJmb250LXdlaWdodDogYm9sZDsiPkhBTCBHUElPPC9zcGFuPiB1cGRhdGU8L3NwYW4+PC9saT48dWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJjb2xvcjogcmdiKDAsIDAsIDApOyBmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyBmb250LXNpemU6IDEzLjMzMzNweDsgZm9udC1zdHlsZTogbm9ybWFsOyBmb250LXZhcmlhbnQ6IG5vcm1hbDsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDsgbGluZS1oZWlnaHQ6IG5vcm1hbDsgdGV4dC1hbGlnbjogbGVmdDsgdGV4dC1pbmRlbnQ6IDBweDsgdGV4dC10cmFuc2Zvcm06IG5vbmU7IHdoaXRlLXNwYWNlOiBub3JtYWw7IHdpZG93czogMTsgd29yZC1zcGFjaW5nOiAwcHg7IGRpc3BsYXk6IGlubGluZSAhIGltcG9ydGFudDsgZmxvYXQ6IG5vbmU7Ij5IQUxfR1BJT19Jbml0KCkvSEFMX0dQSU9fRGVJbml0KCkgQVBJJ3M6IHVwZGF0ZSZuYnNwO0dQSU9fR0VUX0lOREVYKCkgbWFjcm8gaW1wbGVtZW50YXRpb24gdG8gc3VwcG9ydCBhbGwgR1BJTydzPC9zcGFuPjwvbGk+PC91bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImNvbG9yOiByZ2IoMCwgMCwgMCk7IGZvbnQtZmFtaWx5OiBWZXJkYW5hLHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTMuMzMzM3B4OyBmb250LXN0eWxlOiBub3JtYWw7IGZvbnQtdmFyaWFudDogbm9ybWFsOyBmb250LXdlaWdodDogbm9ybWFsOyBsZXR0ZXItc3BhY2luZzogbm9ybWFsOyBsaW5lLWhlaWdodDogbm9ybWFsOyB0ZXh0LWFsaWduOiBsZWZ0OyB0ZXh0LWluZGVudDogMHB4OyB0ZXh0LXRyYW5zZm9ybTogbm9uZTsgd2hpdGUtc3BhY2U6IG5vcm1hbDsgd2lkb3dzOiAxOyB3b3JkLXNwYWNpbmc6IDBweDsgZGlzcGxheTogaW5saW5lICEgaW1wb3J0YW50OyBmbG9hdDogbm9uZTsiPjxzcGFuIHN0eWxlPSJmb250LXdlaWdodDogYm9sZDsiPkhBTCBTUEk8L3NwYW4+IHVwZGF0ZTwvc3Bhbj48L2xpPjx1bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImNvbG9yOiByZ2IoMCwgMCwgMCk7IGZvbnQtZmFtaWx5OiBWZXJkYW5hLHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTMuMzMzM3B4OyBmb250LXN0eWxlOiBub3JtYWw7IGZvbnQtdmFyaWFudDogbm9ybWFsOyBmb250LXdlaWdodDogbm9ybWFsOyBsZXR0ZXItc3BhY2luZzogbm9ybWFsOyBsaW5lLWhlaWdodDogbm9ybWFsOyB0ZXh0LWFsaWduOiBsZWZ0OyB0ZXh0LWluZGVudDogMHB4OyB0ZXh0LXRyYW5zZm9ybTogbm9uZTsgd2hpdGUtc3BhY2U6IG5vcm1hbDsgd2lkb3dzOiAxOyB3b3JkLXNwYWNpbmc6IDBweDsgZGlzcGxheTogaW5saW5lICEgaW1wb3J0YW50OyBmbG9hdDogbm9uZTsiPkZpeCByZWdyZXNzaW9uIGlzc3VlOiByZXRvcmUmbmJzcDtIQUxfU1BJX0RNQVBhdXNlKCkgYW5kIEhBTF9TUElfRE1BUmVzdW1lKCkmbmJzcDs8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiByZ2IoMCwgMCwgMCk7IGZvbnQtZmFtaWx5OiBWZXJkYW5hLHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTMuMzMzM3B4OyBmb250LXN0eWxlOiBub3JtYWw7IGZvbnQtdmFyaWFudDogbm9ybWFsOyBmb250LXdlaWdodDogbm9ybWFsOyBsZXR0ZXItc3BhY2luZzogbm9ybWFsOyBsaW5lLWhlaWdodDogbm9ybWFsOyB0ZXh0LWFsaWduOiBsZWZ0OyB0ZXh0LWluZGVudDogMHB4OyB0ZXh0LXRyYW5zZm9ybTogbm9uZTsgd2hpdGUtc3BhY2U6IG5vcm1hbDsgd2lkb3dzOiAxOyB3b3JkLXNwYWNpbmc6IDBweDsgZGlzcGxheTogaW5saW5lICEgaW1wb3J0YW50OyBmbG9hdDogbm9uZTsiPkFQSSdzPC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjogcmdiKDAsIDAsIDApOyBmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyBmb250LXNpemU6IDEzLjMzMzNweDsgZm9udC1zdHlsZTogbm9ybWFsOyBmb250LXZhcmlhbnQ6IG5vcm1hbDsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDsgbGluZS1oZWlnaHQ6IG5vcm1hbDsgdGV4dC1hbGlnbjogbGVmdDsgdGV4dC1pbmRlbnQ6IDBweDsgdGV4dC10cmFuc2Zvcm06IG5vbmU7IHdoaXRlLXNwYWNlOiBub3JtYWw7IHdpZG93czogMTsgd29yZC1zcGFjaW5nOiAwcHg7IGRpc3BsYXk6IGlubGluZSAhIGltcG9ydGFudDsgZmxvYXQ6IG5vbmU7Ij4gPC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjogcmdiKDMxLCA3MywgMTI1KTsiIGxhbmc9IkVOLVVTIj48L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiByZ2IoMCwgMCwgMCk7IGZvbnQtZmFtaWx5OiBWZXJkYW5hLHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTMuMzMzM3B4OyBmb250LXN0eWxlOiBub3JtYWw7IGZvbnQtdmFyaWFudDogbm9ybWFsOyBmb250LXdlaWdodDogbm9ybWFsOyBsZXR0ZXItc3BhY2luZzogbm9ybWFsOyBsaW5lLWhlaWdodDogbm9ybWFsOyB0ZXh0LWFsaWduOiBsZWZ0OyB0ZXh0LWluZGVudDogMHB4OyB0ZXh0LXRyYW5zZm9ybTogbm9uZTsgd2hpdGUtc3BhY2U6IG5vcm1hbDsgd2lkb3dzOiAxOyB3b3JkLXNwYWNpbmc6IDBweDsgZGlzcGxheTogaW5saW5lICEgaW1wb3J0YW50OyBmbG9hdDogbm9uZTsiPjwvc3Bhbj48L2xpPjwvdWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJjb2xvcjogcmdiKDAsIDAsIDApOyBmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyBmb250LXNpemU6IDEzLjMzMzNweDsgZm9udC1zdHlsZTogbm9ybWFsOyBmb250LXZhcmlhbnQ6IG5vcm1hbDsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDsgbGluZS1oZWlnaHQ6IG5vcm1hbDsgdGV4dC1hbGlnbjogbGVmdDsgdGV4dC1pbmRlbnQ6IDBweDsgdGV4dC10cmFuc2Zvcm06IG5vbmU7IHdoaXRlLXNwYWNlOiBub3JtYWw7IHdpZG93czogMTsgd29yZC1zcGFjaW5nOiAwcHg7IGRpc3BsYXk6IGlubGluZSAhIGltcG9ydGFudDsgZmxvYXQ6IG5vbmU7Ij48c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6IGJvbGQ7Ij5IQUwgUkNDPC9zcGFuPiB1cGRhdGU8L3NwYW4+PC9saT48dWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJjb2xvcjogcmdiKDAsIDAsIDApOyBmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyBmb250LXNpemU6IDEzLjMzMzNweDsgZm9udC1zdHlsZTogbm9ybWFsOyBmb250LXZhcmlhbnQ6IG5vcm1hbDsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDsgbGluZS1oZWlnaHQ6IG5vcm1hbDsgdGV4dC1hbGlnbjogbGVmdDsgdGV4dC1pbmRlbnQ6IDBweDsgdGV4dC10cmFuc2Zvcm06IG5vbmU7IHdoaXRlLXNwYWNlOiBub3JtYWw7IHdpZG93czogMTsgd29yZC1zcGFjaW5nOiAwcHg7IGRpc3BsYXk6IGlubGluZSAhIGltcG9ydGFudDsgZmxvYXQ6IG5vbmU7Ij5GaXggRlNNQyBtYWNyb3MgY29tcGlsYXRpb24gd2FybmluZ3Mgd2l0aCBTVE0zMkY0MTJSeCBkZXZpY2VzPC9zcGFuPjwvbGk+PC91bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImNvbG9yOiByZ2IoMCwgMCwgMCk7IGZvbnQtZmFtaWx5OiBWZXJkYW5hLHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTMuMzMzM3B4OyBmb250LXN0eWxlOiBub3JtYWw7IGZvbnQtdmFyaWFudDogbm9ybWFsOyBmb250LXdlaWdodDogbm9ybWFsOyBsZXR0ZXItc3BhY2luZzogbm9ybWFsOyBsaW5lLWhlaWdodDogbm9ybWFsOyB0ZXh0LWFsaWduOiBsZWZ0OyB0ZXh0LWluZGVudDogMHB4OyB0ZXh0LXRyYW5zZm9ybTogbm9uZTsgd2hpdGUtc3BhY2U6IG5vcm1hbDsgd2lkb3dzOiAxOyB3b3JkLXNwYWNpbmc6IDBweDsgZGlzcGxheTogaW5saW5lICEgaW1wb3J0YW50OyBmbG9hdDogbm9uZTsiPjxzcGFuIHN0eWxlPSJmb250LXdlaWdodDogYm9sZDsiPkhBTCBETUEgPC9zcGFuPnVwZGF0ZTwvc3Bhbj48L2xpPjx1bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImNvbG9yOiByZ2IoMCwgMCwgMCk7IGZvbnQtZmFtaWx5OiBWZXJkYW5hLHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTMuMzMzM3B4OyBmb250LXN0eWxlOiBub3JtYWw7IGZvbnQtdmFyaWFudDogbm9ybWFsOyBmb250LXdlaWdodDogbm9ybWFsOyBsZXR0ZXItc3BhY2luZzogbm9ybWFsOyBsaW5lLWhlaWdodDogbm9ybWFsOyB0ZXh0LWFsaWduOiBsZWZ0OyB0ZXh0LWluZGVudDogMHB4OyB0ZXh0LXRyYW5zZm9ybTogbm9uZTsgd2hpdGUtc3BhY2U6IG5vcm1hbDsgd2lkb3dzOiAxOyB3b3JkLXNwYWNpbmc6IDBweDsgZGlzcGxheTogaW5saW5lICEgaW1wb3J0YW50OyBmbG9hdDogbm9uZTsiPkhBTF9ETUFfUG9sbEZvcnRyYW5zZmVyKCkgQVBJIGNsZWFuIHVwIDxicj48L3NwYW4+PC9saT48L3VsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iY29sb3I6IHJnYigwLCAwLCAwKTsgZm9udC1mYW1pbHk6IFZlcmRhbmEsc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMy4zMzMzcHg7IGZvbnQtc3R5bGU6IG5vcm1hbDsgZm9udC12YXJpYW50OiBub3JtYWw7IGZvbnQtd2VpZ2h0OiBub3JtYWw7IGxldHRlci1zcGFjaW5nOiBub3JtYWw7IGxpbmUtaGVpZ2h0OiBub3JtYWw7IHRleHQtYWxpZ246IGxlZnQ7IHRleHQtaW5kZW50OiAwcHg7IHRleHQtdHJhbnNmb3JtOiBub25lOyB3aGl0ZS1zcGFjZTogbm9ybWFsOyB3aWRvd3M6IDE7IHdvcmQtc3BhY2luZzogMHB4OyBkaXNwbGF5OiBpbmxpbmUgISBpbXBvcnRhbnQ7IGZsb2F0OiBub25lOyI+PHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiBib2xkOyI+SEFMIFBQUCA8L3NwYW4+dXBkYXRlKFBQUCByZWZlcnMgdG8gSVJEQSwgVUFSVCwgVVNBUlQgYW5kIFNNQVJUQ0FSRCk8L3NwYW4+PC9saT48dWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJjb2xvcjogcmdiKDAsIDAsIDApOyBmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyBmb250LXNpemU6IDEzLjMzMzNweDsgZm9udC1zdHlsZTogbm9ybWFsOyBmb250LXZhcmlhbnQ6IG5vcm1hbDsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDsgbGluZS1oZWlnaHQ6IG5vcm1hbDsgdGV4dC1hbGlnbjogbGVmdDsgdGV4dC1pbmRlbnQ6IDBweDsgdGV4dC10cmFuc2Zvcm06IG5vbmU7IHdoaXRlLXNwYWNlOiBub3JtYWw7IHdpZG93czogMTsgd29yZC1zcGFjaW5nOiAwcHg7IGRpc3BsYXk6IGlubGluZSAhIGltcG9ydGFudDsgZmxvYXQ6IG5vbmU7Ij5VcGRhdGUgSEFMX1BQUF9JUlFIYW5kbGVyKCkgdG8gYWRkIGEgY2hlY2sgb24gaW50ZXJydXB0IHNvdXJjZSBiZWZvcmUgbWFuYWdpbmcgdGhlIGVycm9yPC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJnF1b3Q7Q291cmllciBOZXcmcXVvdDs7IGNvbG9yOiByZ2IoMzEsIDczLCAxMjUpOyIgbGFuZz0iRU4tVVMiPjxzcGFuIHN0eWxlPSIiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJnF1b3Q7VGltZXMgTmV3IFJvbWFuJnF1b3Q7OyBmb250LXN0eWxlOiBub3JtYWw7IGZvbnQtdmFyaWFudDogbm9ybWFsOyBmb250LXdlaWdodDogbm9ybWFsOyBmb250LXNpemU6IDdwdDsgbGluZS1oZWlnaHQ6IG5vcm1hbDsgZm9udC1zaXplLWFkanVzdDogbm9uZTsgZm9udC1zdHJldGNoOiBub3JtYWw7Ij4mbmJzcDs8L3NwYW4+PC9zcGFuPjwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6IHJnYigzMSwgNzMsIDEyNSk7IiBsYW5nPSJFTi1VUyI+PG86cD48L286cD48L3NwYW4+PC9saT48L3VsPjwvdWw+CkBAIC0xNjk0LDcgKzE3MjgsNyBAQAogPHVsIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwaW47IGNvbG9yOiByZ2IoMCwgMCwgMCk7IGZvbnQtZmFtaWx5OiAnVGltZXMgTmV3IFJvbWFuJzsgZm9udC1zaXplOiBtZWRpdW07IGZvbnQtc3R5bGU6IG5vcm1hbDsgZm9udC12YXJpYW50OiBub3JtYWw7IGZvbnQtd2VpZ2h0OiBub3JtYWw7IGxldHRlci1zcGFjaW5nOiBub3JtYWw7IGxpbmUtaGVpZ2h0OiBub3JtYWw7IHRleHQtYWxpZ246IHN0YXJ0OyB0ZXh0LWluZGVudDogMHB4OyB0ZXh0LXRyYW5zZm9ybTogbm9uZTsgd2hpdGUtc3BhY2U6IG5vcm1hbDsgd29yZC1zcGFjaW5nOiAwcHg7IG1hcmdpbi10b3A6IDBjbTsiIHR5cGU9InNxdWFyZSI+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJjb2xvcjogcmdiKDAsIDAsIDApOyBmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyBmb250LXNpemU6IDEzLjMzMzNweDsgZm9udC1zdHlsZTogbm9ybWFsOyBmb250LXZhcmlhbnQ6IG5vcm1hbDsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDsgbGluZS1oZWlnaHQ6IG5vcm1hbDsgdGV4dC1hbGlnbjogbGVmdDsgdGV4dC1pbmRlbnQ6IDBweDsgdGV4dC10cmFuc2Zvcm06IG5vbmU7IHdoaXRlLXNwYWNlOiBub3JtYWw7IHdpZG93czogMTsgd29yZC1zcGFjaW5nOiAwcHg7IGRpc3BsYXk6IGlubGluZSAhIGltcG9ydGFudDsgZmxvYXQ6IG5vbmU7Ij48c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6IGJvbGQ7Ij5IQUwgUVNQSSA8L3NwYW4+dXBkYXRlPC9zcGFuPjwvbGk+PHVsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iY29sb3I6IHJnYigwLCAwLCAwKTsgZm9udC1mYW1pbHk6IFZlcmRhbmEsc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMy4zMzMzcHg7IGZvbnQtc3R5bGU6IG5vcm1hbDsgZm9udC12YXJpYW50OiBub3JtYWw7IGZvbnQtd2VpZ2h0OiBub3JtYWw7IGxldHRlci1zcGFjaW5nOiBub3JtYWw7IGxpbmUtaGVpZ2h0OiBub3JtYWw7IHRleHQtYWxpZ246IGxlZnQ7IHRleHQtaW5kZW50OiAwcHg7IHRleHQtdHJhbnNmb3JtOiBub25lOyB3aGl0ZS1zcGFjZTogbm9ybWFsOyB3aWRvd3M6IDE7IHdvcmQtc3BhY2luZzogMHB4OyBkaXNwbGF5OiBpbmxpbmUgISBpbXBvcnRhbnQ7IGZsb2F0OiBub25lOyI+SW1wbGVtZW50CiB3b3JrYXJvdW5kIHRvIGZpeCB0aGUgbGltaXRhdGlvbiZuYnNwOzwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyBjb2xvcjogYmxhY2s7IiBsYW5nPSJFTi1VUyI+cHJvbm91bmNlZCA8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiByZ2IoMCwgMCwgMCk7IGZvbnQtZmFtaWx5OiBWZXJkYW5hLHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTMuMzMzM3B4OyBmb250LXN0eWxlOiBub3JtYWw7IGZvbnQtdmFyaWFudDogbm9ybWFsOyBmb250LXdlaWdodDogbm9ybWFsOyBsZXR0ZXItc3BhY2luZzogbm9ybWFsOyBsaW5lLWhlaWdodDogbm9ybWFsOyB0ZXh0LWFsaWduOiBsZWZ0OyB0ZXh0LWluZGVudDogMHB4OyB0ZXh0LXRyYW5zZm9ybTogbm9uZTsgd2hpdGUtc3BhY2U6IG5vcm1hbDsgd2lkb3dzOiAxOyB3b3JkLXNwYWNpbmc6IDBweDsgZGlzcGxheTogaW5saW5lICEgaW1wb3J0YW50OyBmbG9hdDogbm9uZTsiPiBpbiB0aGUmbmJzcDtFcnJhdGEKIHNoZWV0Jm5ic3A7Mi4xLjggc2VjdGlvbjogSW4gc29tZSBzcGVjaWZpYyBjYXNlcywgRE1BMiBkYXRhIGNvcnJ1cHRpb24KLW9jY3VycyB3aGVuIG1hbmFnaW5nIEFIQiBhbmQgQVBCMiBwZXJpcGhlcmFscyBpbiBhIGNvbmN1cnJlbnQgd2F5PC9zcGFuPjwvbGk+PC91bD48L3VsPjxoMyBzdHlsZT0iYmFja2dyb3VuZDogcmdiKDUxLCAxMDIsIDI1NSkgbm9uZSByZXBlYXQgc2Nyb2xsIDAlIDUwJTsgLW1vei1iYWNrZ3JvdW5kLWNsaXA6IC1tb3otaW5pdGlhbDsgLW1vei1iYWNrZ3JvdW5kLW9yaWdpbjogLW1vei1pbml0aWFsOyAtbW96LWJhY2tncm91bmQtaW5saW5lLXBvbGljeTogLW1vei1pbml0aWFsOyBtYXJnaW4tcmlnaHQ6IDUwMHB0OyB3aWR0aDogMTgwcHg7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogQXJpYWw7IGNvbG9yOiB3aGl0ZTsiPlYxLjUuMCAvIDA2LU1heS0yMDE2PC9zcGFuPjwvaDM+CitvY2N1cnMgd2hlbiBtYW5hZ2luZyBBSEIgYW5kIEFQQjIgcGVyaXBoZXJhbHMgaW4gYSBjb25jdXJyZW50IHdheTwvc3Bhbj48L2xpPjwvdWw+PC91bD48aDMgc3R5bGU9ImJhY2tncm91bmQ6IHJnYig1MSwgMTAyLCAyNTUpIG5vbmUgcmVwZWF0IHNjcm9sbCAwJSA1MCU7IC1tb3otYmFja2dyb3VuZC1jbGlwOiBpbml0aWFsOyAtbW96LWJhY2tncm91bmQtb3JpZ2luOiBpbml0aWFsOyAtbW96LWJhY2tncm91bmQtaW5saW5lLXBvbGljeTogaW5pdGlhbDsgbWFyZ2luLXJpZ2h0OiA1MDBwdDsgd2lkdGg6IDE4MHB4OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IEFyaWFsOyBjb2xvcjogd2hpdGU7Ij5WMS41LjAgLyAwNi1NYXktMjAxNjwvc3Bhbj48L2gzPgogPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbjogNC41cHQgMGNtIDQuNXB0IDE4cHQ7Ij48YiBzdHlsZT0iIj48dT48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYTsgY29sb3I6IGJsYWNrOyI+TWFpbgogQ2hhbmdlczwvc3Bhbj48L3U+PC9iPjwvcD4KIApAQCAtMTc0NSw3ICsxNzc5LDcgQEAKICAgICAgZGV2aWNlczwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPiB0byBwcm92aWRlJm5ic3A7dGhlIHBvc3NpYmlsaXR5IHRvIGNvbnZlcnQgVnJlZkludCBjaGFubmVsIHdoZW4gYm90aAogICAgICBWcmVmSW50IGFuZCBWYmF0IGNoYW5uZWxzIGFyZSBzZWxlY3RlZC48L3NwYW4+PC9saT48L3VsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luOiA0LjVwdCAwaW47IGZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6ICdUaW1lcyBOZXcgUm9tYW4nLHNlcmlmOyBjb2xvcjogYmxhY2s7Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6IFZlcmRhbmEsc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMHB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiBib2xkOyI+SEFMIFNQRElGUlg8c3BhbiBjbGFzcz0iQXBwbGUtY29udmVydGVkLXNwYWNlIj4mbmJzcDs8L3NwYW4+PC9zcGFuPnVwZGF0ZTwvc3Bhbj48L2xpPjx1bCBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMGluOyI+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW46IDQuNXB0IDBpbjsgZm9udC1zaXplOiAxMnB0OyBmb250LWZhbWlseTogJ1RpbWVzIE5ldyBSb21hbicsc2VyaWY7IGNvbG9yOiBibGFjazsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyBmb250LXNpemU6IDEwcHQ7Ij5PdmVyYWxsIGRyaXZlciB1cGRhdGUgZm9yIHdhaXQgb24gZmxhZyBtYW5hZ2VtZW50IG9wdGltaXphdGlvbjxzcGFuIGNsYXNzPSJBcHBsZS1jb252ZXJ0ZWQtc3BhY2UiPiZuYnNwOzwvc3Bhbj48L3NwYW4+PC9saT48L3VsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luOiA0LjVwdCAwaW47IGZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6ICdUaW1lcyBOZXcgUm9tYW4nLHNlcmlmOyBjb2xvcjogYmxhY2s7Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6IFZlcmRhbmEsc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMHB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiBib2xkOyI+SEFMIFdXREc8c3BhbiBjbGFzcz0iQXBwbGUtY29udmVydGVkLXNwYWNlIj4mbmJzcDs8L3NwYW4+PC9zcGFuPnVwZGF0ZSZuYnNwOzwvc3Bhbj48L2xpPjx1bCBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMGluOyI+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW46IDQuNXB0IDBpbjsgZm9udC1zaXplOiAxMnB0OyBmb250LWZhbWlseTogJ1RpbWVzIE5ldyBSb21hbicsc2VyaWY7IGNvbG9yOiBibGFjazsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyBmb250LXNpemU6IDEwcHQ7Ij5PdmVyYWxsIHJld29yayBvZiB0aGUgZHJpdmVyIGZvciBtb3JlIGVmZmljaWVudCBpbXBsZW1lbnRhdGlvbjwvc3Bhbj48L2xpPjx1bCBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMGluOyI+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW46IDQuNXB0IDBpbjsgZm9udC1zaXplOiAxMnB0OyBmb250LWZhbWlseTogJ1RpbWVzIE5ldyBSb21hbicsc2VyaWY7IGNvbG9yOiBibGFjazsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyBmb250LXNpemU6IDEwcHQ7Ij5SZW1vdmUgdGhlIGZvbGxvd2luZyBBUElzOjwvc3Bhbj48L2xpPjx1bCBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMGluOyI+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW46IDQuNXB0IDBpbjsgZm9udC1zaXplOiAxMnB0OyBmb250LWZhbWlseTogJ1RpbWVzIE5ldyBSb21hbicsc2VyaWY7IGNvbG9yOiBibGFjazsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyBmb250LXNpemU6IDEwcHQ7Ij5IQUxfV1dER19TdGFydCgpPC9zcGFuPjwvbGk+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW46IDQuNXB0IDBpbjsgZm9udC1zaXplOiAxMnB0OyBmb250LWZhbWlseTogJ1RpbWVzIE5ldyBSb21hbicsc2VyaWY7IGNvbG9yOiBibGFjazsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyBmb250LXNpemU6IDEwcHQ7Ij5IQUxfV1dER19TdGFydF9JVCgpPC9zcGFuPjwvbGk+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW46IDQuNXB0IDBpbjsgZm9udC1zaXplOiAxMnB0OyBmb250LWZhbWlseTogJ1RpbWVzIE5ldyBSb21hbicsc2VyaWY7IGNvbG9yOiBibGFjazsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyBmb250LXNpemU6IDEwcHQ7Ij5IQUxfV1dER19Nc3BEZUluaXQoKTwvc3Bhbj48L2xpPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luOiA0LjVwdCAwaW47IGZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6ICdUaW1lcyBOZXcgUm9tYW4nLHNlcmlmOyBjb2xvcjogYmxhY2s7Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6IFZlcmRhbmEsc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMHB0OyI+SEFMX1dXREdfR2V0U3RhdGUoKTwvc3Bhbj48L2xpPjwvdWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW46IDQuNXB0IDBpbjsgZm9udC1zaXplOiAxMnB0OyBmb250LWZhbWlseTogJ1RpbWVzIE5ldyBSb21hbicsc2VyaWY7IGNvbG9yOiBibGFjazsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyBmb250LXNpemU6IDEwcHQ7Ij5VcGRhdGUgaW1wbGVtZW50YXRpb246PC9zcGFuPjwvbGk+PHVsIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwaW47Ij48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbjogNC41cHQgMGluOyBmb250LXNpemU6IDEycHQ7IGZvbnQtZmFtaWx5OiAnVGltZXMgTmV3IFJvbWFuJyxzZXJpZjsgY29sb3I6IGJsYWNrOyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiBWZXJkYW5hLHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTBwdDsiPkhBTF9XV0RHX0luaXQoKTwvc3Bhbj48L2xpPjx1bCBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMGluOyI+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW46IDQuNXB0IDBpbjsgZm9udC1zaXplOiAxMnB0OyBmb250LWZhbWlseTogJ1RpbWVzIE5ldyBSb21hbicsc2VyaWY7IGNvbG9yOiBibGFjazsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyBmb250LXNpemU6IDEwcHQ7Ij5BJm5ic3A7bmV3IHBhcmFtZXRlciBpbiB0aGUgSW5pdCBTdHJ1Y3R1cmU6Jm5ic3A7RVdJTW9kZTwvc3Bhbj48L2xpPjwvdWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW46IDQuNXB0IDBpbjsgZm9udC1zaXplOiAxMnB0OyBmb250LWZhbWlseTogJ1RpbWVzIE5ldyBSb21hbicsc2VyaWY7IGNvbG9yOiBibGFjazsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyBmb250LXNpemU6IDEwcHQ7Ij5IQUxfV1dER19Nc3BJbml0KCk8L3NwYW4+PC9saT48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbjogNC41cHQgMGluOyBmb250LXNpemU6IDEycHQ7IGZvbnQtZmFtaWx5OiAnVGltZXMgTmV3IFJvbWFuJyxzZXJpZjsgY29sb3I6IGJsYWNrOyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiBWZXJkYW5hLHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTBwdDsiPkhBTF9XV0RHX1JlZnJlc2goKSZuYnNwOzwvc3Bhbj48L2xpPjx1bCBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMGluOyI+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW46IDQuNXB0IDBpbjsgZm9udC1zaXplOiAxMnB0OyBmb250LWZhbWlseTogJ1RpbWVzIE5ldyBSb21hbicsc2VyaWY7IGNvbG9yOiBibGFjazsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyBmb250LXNpemU6IDEwcHQ7Ij5UaGlzIGZ1bmN0aW9uIGluc3VyZXMgdGhlIHJlbG9hZCBvZiB0aGUgY291bnRlcjwvc3Bhbj48L2xpPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luOiA0LjVwdCAwaW47IGZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6ICdUaW1lcyBOZXcgUm9tYW4nLHNlcmlmOyBjb2xvcjogYmxhY2s7Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6IFZlcmRhbmEsc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMHB0OyI+VGhlICJjb3VudGVyIiBwYXJhbWV0ZXIgaGFzIGJlZW4gcmVtb3ZlZDwvc3Bhbj48L2xpPjwvdWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW46IDQuNXB0IDBpbjsgZm9udC1zaXplOiAxMnB0OyBmb250LWZhbWlseTogJ1RpbWVzIE5ldyBSb21hbicsc2VyaWY7IGNvbG9yOiBibGFjazsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyBmb250LXNpemU6IDEwcHQ7Ij5IQUxfV1dER19JUlFIYW5kbGVyKCk8L3NwYW4+PC9saT48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbjogNC41cHQgMGluOyBmb250LXNpemU6IDEycHQ7IGZvbnQtZmFtaWx5OiAnVGltZXMgTmV3IFJvbWFuJyxzZXJpZjsgY29sb3I6IGJsYWNrOyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiBWZXJkYW5hLHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTBwdDsiPkhBTF9XV0RHX0Vhcmx5V2FrZXVwQ2FsbGJhY2soKSBpcyB0aGUgbmV3IHByb3RvdHlwZSBvZiBIQUxfV1dER19XYWtlVXBDYWxsYmFjaygpPGJyPjwvc3Bhbj48L2xpPjwvdWw+PC91bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbjogNC41cHQgMGluOyBmb250LXNpemU6IDEycHQ7IGZvbnQtZmFtaWx5OiAnVGltZXMgTmV3IFJvbWFuJyxzZXJpZjsgY29sb3I6IGJsYWNrOyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiBWZXJkYW5hLHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTBwdDsiPlJlZmVyIHRvIHRoZSBmb2xsb3dpbmcgZXhhbXBsZSB0byBpZGVudGlmeSB0aGUgY2hhbmdlczogV1dER19FeGFtcGxlPC9zcGFuPjwvbGk+PC91bD48L3VsPgogCi08aDMgc3R5bGU9ImJhY2tncm91bmQ6IHJnYig1MSwgMTAyLCAyNTUpIG5vbmUgcmVwZWF0IHNjcm9sbCAwJSA1MCU7IC1tb3otYmFja2dyb3VuZC1jbGlwOiAtbW96LWluaXRpYWw7IC1tb3otYmFja2dyb3VuZC1vcmlnaW46IC1tb3otaW5pdGlhbDsgLW1vei1iYWNrZ3JvdW5kLWlubGluZS1wb2xpY3k6IC1tb3otaW5pdGlhbDsgbWFyZ2luLXJpZ2h0OiA1MDBwdDsgd2lkdGg6IDE4MHB4OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IEFyaWFsOyBjb2xvcjogd2hpdGU7Ij5WMS40LjQgLyAyMi1KYW51YXJ5LTIwMTY8L3NwYW4+PC9oMz4KKzxoMyBzdHlsZT0iYmFja2dyb3VuZDogcmdiKDUxLCAxMDIsIDI1NSkgbm9uZSByZXBlYXQgc2Nyb2xsIDAlIDUwJTsgLW1vei1iYWNrZ3JvdW5kLWNsaXA6IGluaXRpYWw7IC1tb3otYmFja2dyb3VuZC1vcmlnaW46IGluaXRpYWw7IC1tb3otYmFja2dyb3VuZC1pbmxpbmUtcG9saWN5OiBpbml0aWFsOyBtYXJnaW4tcmlnaHQ6IDUwMHB0OyB3aWR0aDogMTgwcHg7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogQXJpYWw7IGNvbG9yOiB3aGl0ZTsiPlYxLjQuNCAvIDIyLUphbnVhcnktMjAxNjwvc3Bhbj48L2gzPgogPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbjogNC41cHQgMGNtIDQuNXB0IDE4cHQ7Ij48YiBzdHlsZT0iIj48dT48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYTsgY29sb3I6IGJsYWNrOyI+TWFpbgogQ2hhbmdlczwvc3Bhbj48L3U+PC9iPjwvcD48dWwgc3R5bGU9Im1hcmdpbi10b3A6IDBjbTsiIHR5cGU9InNxdWFyZSI+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPgogCkBAIC0xOTU3LDExICsxOTkxLDExIEBACiA8L2xpPjx1bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbjogNC41cHQgMGluOyBmb250LXNpemU6IDEycHQ7IGZvbnQtZmFtaWx5OiAnVGltZXMgTmV3IFJvbWFuJyxzZXJpZjsgY29sb3I6IGJsYWNrOyI+CiAKIDxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7IiBsYW5nPSJFTi1VUyI+VXBkYXRlIHRoZSBGU01DX05PUlNSQU1fSW5pdCgpIGZ1bmN0aW9uIHRvIHVzZQotQnVyc3RBY2Nlc3NNb2RlIGZpZWxkIHByb3Blcmx5PC9zcGFuPjwvbGk+PC91bD48L3VsPjxicj48aDMgc3R5bGU9ImJhY2tncm91bmQ6IHJnYig1MSwgMTAyLCAyNTUpIG5vbmUgcmVwZWF0IHNjcm9sbCAwJSA1MCU7IC1tb3otYmFja2dyb3VuZC1jbGlwOiAtbW96LWluaXRpYWw7IC1tb3otYmFja2dyb3VuZC1vcmlnaW46IC1tb3otaW5pdGlhbDsgLW1vei1iYWNrZ3JvdW5kLWlubGluZS1wb2xpY3k6IC1tb3otaW5pdGlhbDsgbWFyZ2luLXJpZ2h0OiA1MDBwdDsgd2lkdGg6IDE4MHB4OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IEFyaWFsOyBjb2xvcjogd2hpdGU7Ij5WMS40LjQgLyAxMS1EZWNlbWJlci0yMDE1PC9zcGFuPjwvaDM+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IEFyaWFsOyBjb2xvcjogd2hpdGU7Ij48L3NwYW4+PGIgc3R5bGU9IiI+PHU+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmE7IGNvbG9yOiBibGFjazsiPk1haW4KK0J1cnN0QWNjZXNzTW9kZSBmaWVsZCBwcm9wZXJseTwvc3Bhbj48L2xpPjwvdWw+PC91bD48YnI+PGgzIHN0eWxlPSJiYWNrZ3JvdW5kOiByZ2IoNTEsIDEwMiwgMjU1KSBub25lIHJlcGVhdCBzY3JvbGwgMCUgNTAlOyAtbW96LWJhY2tncm91bmQtY2xpcDogaW5pdGlhbDsgLW1vei1iYWNrZ3JvdW5kLW9yaWdpbjogaW5pdGlhbDsgLW1vei1iYWNrZ3JvdW5kLWlubGluZS1wb2xpY3k6IGluaXRpYWw7IG1hcmdpbi1yaWdodDogNTAwcHQ7IHdpZHRoOiAxODBweDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBBcmlhbDsgY29sb3I6IHdoaXRlOyI+VjEuNC40IC8gMTEtRGVjZW1iZXItMjAxNTwvc3Bhbj48L2gzPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBBcmlhbDsgY29sb3I6IHdoaXRlOyI+PC9zcGFuPjxiIHN0eWxlPSIiPjx1PjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hOyBjb2xvcjogYmxhY2s7Ij5NYWluCiBDaGFuZ2VzPC9zcGFuPjwvdT48L2I+PHVsIHN0eWxlPSJtYXJnaW4tdG9wOiAwY207IiB0eXBlPSJzcXVhcmUiPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiPjxzcGFuIHN0eWxlPSJmb250LXdlaWdodDogYm9sZDsiPkhBTCBHZW5lcmljIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7IGZvbnQtd2VpZ2h0OiBub3JtYWw7Ij51cGRhdGU8L3NwYW4+PC9saT48dWw+PGxpIHN0eWxlPSJtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7IGNvbG9yOiBibGFjazsiIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+PC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+VXBkYXRlIEhBTCAKIHdlYWsgZW1wdHkgY2FsbGJhY2tzIHRvIHByZXZlbnQgdW51c2VkIGFyZ3VtZW50IGNvbXBpbGF0aW9uIHdhcm5pbmdzIHdpdGggc29tZSAKIGNvbXBpbGVycyBieSBjYWxsaW5nIHRoZSBmb2xsb3dpbmcgbGluZTo8L3NwYW4+Ci08L2xpPjx1bD48bGkgc3R5bGU9Im1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsgY29sb3I6IGJsYWNrOyIgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij5VTlVTRUQoaHBwcCk7PC9zcGFuPjwvbGk+PC91bD48bGkgc3R5bGU9Im1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsgY29sb3I6IGJsYWNrOyIgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij5TVE0zMkZ4eHhfVXNlcl9NYW51YWwuY2htIGZpbGVzIHJlZ2VuZXJhdGVkIGZvciBIQUwgVjEuNC4zPC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+PC9zcGFuPjwvbGk+PC91bD48bGkgc3R5bGU9Im1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsgY29sb3I6IGJsYWNrOyIgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij48c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6IGJvbGQ7Ij5IQUwgRVRIPC9zcGFuPiB1cGRhdGUmbmJzcDs8L3NwYW4+PC9saT48dWw+PGxpIHN0eWxlPSJtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7IGNvbG9yOiBibGFjazsiIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+VXBkYXRlIEhBTF9FVEhfSW5pdCgpIGZ1bmN0aW9uIHRvIGFkZCB0aW1lb3V0IG9uIHRoZSBTb2Z0d2FyZSByZXNldCBtYW5hZ2VtZW50PC9zcGFuPjxicj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogQXJpYWw7IGNvbG9yOiB3aGl0ZTsiPjwvc3Bhbj48L2xpPjwvdWw+PC91bD48aDMgc3R5bGU9ImJhY2tncm91bmQ6IHJnYig1MSwgMTAyLCAyNTUpIG5vbmUgcmVwZWF0IHNjcm9sbCAwJSA1MCU7IC1tb3otYmFja2dyb3VuZC1jbGlwOiAtbW96LWluaXRpYWw7IC1tb3otYmFja2dyb3VuZC1vcmlnaW46IC1tb3otaW5pdGlhbDsgLW1vei1iYWNrZ3JvdW5kLWlubGluZS1wb2xpY3k6IC1tb3otaW5pdGlhbDsgbWFyZ2luLXJpZ2h0OiA1MDBwdDsgd2lkdGg6IDE4MHB4OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IEFyaWFsOyBjb2xvcjogd2hpdGU7Ij5WMS40LjIgLyAxMC1Ob3ZlbWJlci0yMDE1PC9zcGFuPjwvaDM+Cis8L2xpPjx1bD48bGkgc3R5bGU9Im1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsgY29sb3I6IGJsYWNrOyIgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij5VTlVTRUQoaHBwcCk7PC9zcGFuPjwvbGk+PC91bD48bGkgc3R5bGU9Im1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsgY29sb3I6IGJsYWNrOyIgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij5TVE0zMkZ4eHhfVXNlcl9NYW51YWwuY2htIGZpbGVzIHJlZ2VuZXJhdGVkIGZvciBIQUwgVjEuNC4zPC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+PC9zcGFuPjwvbGk+PC91bD48bGkgc3R5bGU9Im1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsgY29sb3I6IGJsYWNrOyIgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij48c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6IGJvbGQ7Ij5IQUwgRVRIPC9zcGFuPiB1cGRhdGUmbmJzcDs8L3NwYW4+PC9saT48dWw+PGxpIHN0eWxlPSJtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7IGNvbG9yOiBibGFjazsiIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+VXBkYXRlIEhBTF9FVEhfSW5pdCgpIGZ1bmN0aW9uIHRvIGFkZCB0aW1lb3V0IG9uIHRoZSBTb2Z0d2FyZSByZXNldCBtYW5hZ2VtZW50PC9zcGFuPjxicj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogQXJpYWw7IGNvbG9yOiB3aGl0ZTsiPjwvc3Bhbj48L2xpPjwvdWw+PC91bD48aDMgc3R5bGU9ImJhY2tncm91bmQ6IHJnYig1MSwgMTAyLCAyNTUpIG5vbmUgcmVwZWF0IHNjcm9sbCAwJSA1MCU7IC1tb3otYmFja2dyb3VuZC1jbGlwOiBpbml0aWFsOyAtbW96LWJhY2tncm91bmQtb3JpZ2luOiBpbml0aWFsOyAtbW96LWJhY2tncm91bmQtaW5saW5lLXBvbGljeTogaW5pdGlhbDsgbWFyZ2luLXJpZ2h0OiA1MDBwdDsgd2lkdGg6IDE4MHB4OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IEFyaWFsOyBjb2xvcjogd2hpdGU7Ij5WMS40LjIgLyAxMC1Ob3ZlbWJlci0yMDE1PC9zcGFuPjwvaDM+CiAKICAgICAgICAgICAgIDxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW46IDQuNXB0IDBjbSA0LjVwdCAxOHB0OyI+PGI+PHU+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssJnF1b3Q7c2Fucy1zZXJpZiZxdW90OzsgY29sb3I6IGJsYWNrOyI+TWFpbiBDaGFuZ2VzPC9zcGFuPjwvdT48L2I+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6ICZxdW90O1RpbWVzIE5ldyBSb21hbiZxdW90OywmcXVvdDtzZXJpZiZxdW90OzsiPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4KIApAQCAtMTk3NCw3ICsyMDA4LDcgQEAKIEhBTCB3ZWFrIGVtcHR5IGNhbGxiYWNrcyB0byBwcmV2ZW50IHVudXNlZCBhcmd1bWVudCBjb21waWxhdGlvbgogd2FybmluZ3Mgd2l0aCBzb21lIGNvbXBpbGVycyBieSBjYWxsaW5nIHRoZSBmb2xsb3dpbmcgbGluZTo8L3NwYW4+PC9saT48dWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+VU5VU0VEKGhwcHApOzxicj48YnI+PC9zcGFuPjwvbGk+PC91bD48L3VsPjwvdWw+CiA8dWwgc3R5bGU9Im1hcmdpbi1ib3R0b206IDBpbjsgY29sb3I6IHJnYigwLCAwLCAwKTsgZm9udC1mYW1pbHk6ICdUaW1lcyBOZXcgUm9tYW4nOyBmb250LXNpemU6IG1lZGl1bTsgZm9udC1zdHlsZTogbm9ybWFsOyBmb250LXZhcmlhbnQ6IG5vcm1hbDsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDsgbGluZS1oZWlnaHQ6IG5vcm1hbDsgdGV4dC1hbGlnbjogc3RhcnQ7IHRleHQtaW5kZW50OiAwcHg7IHRleHQtdHJhbnNmb3JtOiBub25lOyB3aGl0ZS1zcGFjZTogbm9ybWFsOyB3b3JkLXNwYWNpbmc6IDBweDsgbWFyZ2luLXRvcDogMGNtOyIgdHlwZT0ic3F1YXJlIj48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij48c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6IGJvbGQ7Ij5IQUwgQ09SVEVYIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij51cGRhdGU8L3NwYW4+PC9saT48dWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+UmVtb3ZlIGR1cGxpY2F0aW9uIGZvciBfX0hBTF9DT1JURVhfU1lTVElDS0NMS19DT05GSUcoKSBtYWNybzwvc3Bhbj48L2xpPjwvdWw+PC91bD48dWwgc3R5bGU9Im1hcmdpbi1ib3R0b206IDBpbjsgY29sb3I6IHJnYigwLCAwLCAwKTsgZm9udC1mYW1pbHk6ICdUaW1lcyBOZXcgUm9tYW4nOyBmb250LXNpemU6IG1lZGl1bTsgZm9udC1zdHlsZTogbm9ybWFsOyBmb250LXZhcmlhbnQ6IG5vcm1hbDsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDsgbGluZS1oZWlnaHQ6IG5vcm1hbDsgdGV4dC1hbGlnbjogc3RhcnQ7IHRleHQtaW5kZW50OiAwcHg7IHRleHQtdHJhbnNmb3JtOiBub25lOyB3aGl0ZS1zcGFjZTogbm9ybWFsOyB3b3JkLXNwYWNpbmc6IDBweDsgbWFyZ2luLXRvcDogMGNtOyIgdHlwZT0ic3F1YXJlIj48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij48c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6IGJvbGQ7Ij5IQUwgSEFTSCA8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+dXBkYXRlPC9zcGFuPjwvbGk+PHVsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiPlJlbmFtZSBIQUxfSEFTSF9TVEFURVR5cGVEZWYgdG8gSEFMX0hBU0hfU3RhdGVUeXBlRGVmPC9zcGFuPjwvbGk+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+UmVuYW1lIEhBTF9IQVNIX1BoYXNlVHlwZURlZiB0byBIQUxfSEFTSF9QaGFzZVR5cGVEZWY8YnI+PC9zcGFuPjwvbGk+PC91bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij48c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6IGJvbGQ7Ij5IQUwgUkNDIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij51cGRhdGU8L3NwYW4+PC9saT48dWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyIgbGFuZz0iRU4tVVMiPkFkZCBuZXcgbWFjcm9zIF9fSEFMX1JDQ188c3BhbiBzdHlsZT0iZm9udC1zdHlsZTogaXRhbGljOyI+UFBQPC9zcGFuPl9JU19DTEtfRU5BQkxFRCgpIHRvIGNoZWNrIG9uIENsb2NrIGVuYWJsZS9kaXNhYmxlIHN0YXR1czwvc3Bhbj48L2xpPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiIGxhbmc9IkVOLVVTIj5VcGRhdGUgX19IQUxfUkNDX1VTQl9PVEdfRlNfQ0xLX0RJU0FCTEUoKSBtYWNybyB0byByZW1vdmUgdGhlIGRpc2FibGUgZm9yIHRoZSBTWVNDRkc8L3NwYW4+PC9saT48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7IiBsYW5nPSJFTi1VUyI+VXBkYXRlIEhBTF9SQ0NfTUNPQ29uZmlnKCkgQVBJIHRvIHVzZSBuZXcgZGVmaW5lcyBmb3IgdGhlIEdQSU8gU3BlZWQ8L3NwYW4+PC9saT48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7IiBsYW5nPSJFTi1VUyI+R2VuZXJpYyB1cGRhdGUgdG8gaW1wcm92ZSB0aGUgUExMJm5ic3A7VkNPIG1pbiB2YWx1ZSgxMDBNSHopOiBQTExOLCBQTExJMlMgYW5kIFBMTFNBSSBtaW4gdmFsdWUgaXMgNTAgaW5zdGVhZCBvZiAxOTI8L3NwYW4+PC9saT48L3VsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiPjxzcGFuIHN0eWxlPSJmb250LXdlaWdodDogYm9sZDsiPkhBTCBGTEFTSCA8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+dXBkYXRlPC9zcGFuPjwvbGk+PHVsPjxsaSBzdHlsZT0ibWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyBjb2xvcjogcmdiKDIsIDMsIDIpOyBmb250LWZhbWlseTogVmVyZGFuYTsiIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDExLjdweDsgZm9udC1zdHlsZTogbm9ybWFsOyBmb250LXZhcmlhbnQ6IG5vcm1hbDsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDsgbGluZS1oZWlnaHQ6IDIwcHg7IHRleHQtYWxpZ246IHN0YXJ0OyB0ZXh0LWluZGVudDogMHB4OyB0ZXh0LXRyYW5zZm9ybTogbm9uZTsgd2hpdGUtc3BhY2U6IG5vcm1hbDsgd29yZC1zcGFjaW5nOiAwcHg7IGRpc3BsYXk6IGlubGluZSAhIGltcG9ydGFudDsgZmxvYXQ6IG5vbmU7IGJhY2tncm91bmQtY29sb3I6IHJnYigyNTUsIDI1NSwgMjU1KTsiPl9fSEFMX0ZMQVNIX0lOU1RSVUNUSU9OX0NBQ0hFX1JFU0VUKCkgbWFjcm86IHVwZGF0ZSB0byZuYnNwOzwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMS43cHg7IGZvbnQtc3R5bGU6IG5vcm1hbDsgZm9udC12YXJpYW50OiBub3JtYWw7IGZvbnQtd2VpZ2h0OiBub3JtYWw7IGxldHRlci1zcGFjaW5nOiBub3JtYWw7IGxpbmUtaGVpZ2h0OiAyMHB4OyB0ZXh0LWFsaWduOiBzdGFydDsgdGV4dC1pbmRlbnQ6IDBweDsgdGV4dC10cmFuc2Zvcm06IG5vbmU7IHdoaXRlLXNwYWNlOiBub3JtYWw7IHdvcmQtc3BhY2luZzogMHB4OyBkaXNwbGF5OiBpbmxpbmUgISBpbXBvcnRhbnQ7IGZsb2F0OiBub25lOyBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjU1LCAyNTUsIDI1NSk7Ij5yZXNldCAmbmJzcDs8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTEuN3B4OyBmb250LXN0eWxlOiBub3JtYWw7IGZvbnQtdmFyaWFudDogbm9ybWFsOyBmb250LXdlaWdodDogbm9ybWFsOyBsZXR0ZXItc3BhY2luZzogbm9ybWFsOyBsaW5lLWhlaWdodDogMjBweDsgdGV4dC1hbGlnbjogc3RhcnQ7IHRleHQtaW5kZW50OiAwcHg7IHRleHQtdHJhbnNmb3JtOiBub25lOyB3aGl0ZS1zcGFjZTogbm9ybWFsOyB3b3JkLXNwYWNpbmc6IDBweDsgZGlzcGxheTogaW5saW5lICEgaW1wb3J0YW50OyBmbG9hdDogbm9uZTsgYmFja2dyb3VuZC1jb2xvcjogcmdiKDI1NSwgMjU1LCAyNTUpOyI+SUNSU1QgPC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDExLjdweDsgZm9udC1zdHlsZTogbm9ybWFsOyBmb250LXZhcmlhbnQ6IG5vcm1hbDsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDsgbGluZS1oZWlnaHQ6IDIwcHg7IHRleHQtYWxpZ246IHN0YXJ0OyB0ZXh0LWluZGVudDogMHB4OyB0ZXh0LXRyYW5zZm9ybTogbm9uZTsgd2hpdGUtc3BhY2U6IG5vcm1hbDsgd29yZC1zcGFjaW5nOiAwcHg7IGRpc3BsYXk6IGlubGluZSAhIGltcG9ydGFudDsgZmxvYXQ6IG5vbmU7IGJhY2tncm91bmQtY29sb3I6IHJnYigyNTUsIDI1NSwgMjU1KTsiPmJpdCBpbiB0aGUgQUNSIHJlZ2lzdGVyIGFmdGVyIHNldHRpbmcgaXQuPC9zcGFuPjwvbGk+PGxpIHN0eWxlPSJtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7IGNvbG9yOiByZ2IoMiwgMywgMik7IGZvbnQtZmFtaWx5OiBWZXJkYW5hOyIgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij5VcGRhdGUgdG8gc3VwcG9ydCB1bnRpbCAxNSBGTEFTSCB3YWl0IHN0YXRlIChGTEFTSF9MQVRFTkNZXzE1KSBmb3IgU1RNMzJGNDQ2eHggZGV2aWNlcyA8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij48L3NwYW4+PC9saT48L3VsPjxsaSBzdHlsZT0ibWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyBjb2xvcjogYmxhY2s7IiBjbGFzcz0iTXNvTm9ybWFsIj4KLTxwIGNsYXNzPSJNc29MaXN0UGFyYWdyYXBoIj48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiPjxzcGFuIHN0eWxlPSJmb250LXdlaWdodDogYm9sZDsiPkhBTCBDUllQJm5ic3A7PC9zcGFuPjwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiPnVwZGF0ZTwvc3Bhbj48L3A+PC9saT48dWw+PGxpIHN0eWxlPSJtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7IGNvbG9yOiBibGFjazsiIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+VXBkYXRlIEhBTF9DUllQX0RFU0VDQl9EZWNyeXB0KCkgQVBJIHRvIGZpeCB0aGUgaW52ZXJ0ZWQgcFBsYWluRGF0YSBhbmQgcEN5cGhlckRhdGEgcGFyYW1ldGVycyBpc3N1ZTwvc3Bhbj48L2xpPjwvdWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiBib2xkOyI+SEFMIEkyUyA8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+dXBkYXRlPC9zcGFuPjwvbGk+PHVsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiPlVwZGF0ZSBIQUxfSTJTX0luaXQoKSBBUEkmbmJzcDt0byBjYWxsIF9fSEFMX1JDQ19JMlNfQ09ORklHKCkgbWFjcm8gd2hlbiBleHRlcm5hbCBJMlMgY2xvY2sgaXMgc2VsZWN0ZWQ8L3NwYW4+PC9saT48L3VsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiPjxzcGFuIHN0eWxlPSJmb250LXdlaWdodDogYm9sZDsiPkhBTCBMVERDIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij51cGRhdGU8L3NwYW4+PC9saT48dWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+VXBkYXRlIEhBTF9MVERDX1NldFdpbmRvd1Bvc2l0aW9uKCkgQVBJJm5ic3A7dG8gY29uZmlndXJlIEltbWVkaWF0ZSZuYnNwO3JlbG9hZCZuYnNwOzwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiPnJlZ2lzdGVyIDwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiPmluc3RlYWQgb2YgdmVydGljYWwgYmxhbmtpbmcgcmVsb2FkIHJlZ2lzdGVyLjwvc3Bhbj48L2xpPjwvdWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiBib2xkOyI+SEFMIFRJTSA8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+dXBkYXRlPC9zcGFuPjwvbGk+PHVsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiPlVwZGF0ZSBIQUxfVElNX0NvbmZpZ0Nsb2NrU291cmNlKCkgQVBJIHRvJm5ic3A7Y2hlY2sgb25seSB0aGUgcmVxdWlyZWQgcGFyYW1ldGVyczwvc3Bhbj48L2xpPjwvdWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiBib2xkOyI+SEFMIE5BTkQgPC9zcGFuPjwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiPnVwZGF0ZTwvc3Bhbj48L2xpPjx1bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij5VcGRhdGUgSEFMX05BTkRfUmVhZF9QYWdlKCkvSEFMX05BTkRfV3JpdGVfUGFnZSgpL0hBTF9OQU5EX1JlYWRfU3BhcmVBcmVhKCkgQVBJcyB0byBtYW5hZ2UgY29ycmVjdGx5IHRoZSBOQU5EIFBhZ2UgYWNjZXNzPC9zcGFuPjwvbGk+PC91bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij48c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6IGJvbGQ7Ij5IQUwgQ0FOIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij51cGRhdGU8L3NwYW4+PC9saT48dWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+VXBkYXRlIHRvIHVzZSAiPSIgaW5zdGVhZCBvZiAifD0iIHRvIGNsZWFyIGZsYWdzIGluIHRoZSBNU1IsIFRTUiwgUkYwUiBhbmQgUkYxUiByZWdpc3RlcnM8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij48L3NwYW4+PC9saT48L3VsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiPjxzcGFuIHN0eWxlPSJmb250LXdlaWdodDogYm9sZDsiPkhBTCBIQ0QgPC9zcGFuPjwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiPnVwZGF0ZTwvc3Bhbj48L2xpPjx1bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij5GaXggdHlwbyBpbiBfX0hBTF9VU0JfT1RHX0hTX1dBS0VVUF9FWFRJX0VOQUJMRV9SSVNJTkdfRkFMTElOR19FREdFKCkgbWFjcm8gaW1wbGVtZW50YXRpb248L3NwYW4+PC9saT48L3VsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiPjxzcGFuIHN0eWxlPSJmb250LXdlaWdodDogYm9sZDsiPkhBTCBQQ0QgPC9zcGFuPjwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiPnVwZGF0ZTwvc3Bhbj48L2xpPjx1bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij5VcGRhdGUgSEFMX1BDRF9JUlFIYW5kbGVyKCkgQVBJIHRvIGF2b2lkIGlzc3VlIHdoZW4mbmJzcDtETUEgbW9kZSBlbmFibGVkIGZvciBTdGF0dXMgUGhhc2UgSU4gc3RhZ2U8L3NwYW4+PC9saT48L3VsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiPjxzcGFuIHN0eWxlPSJmb250LXdlaWdodDogYm9sZDsiPkxMIEZNQyA8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+dXBkYXRlPC9zcGFuPjwvbGk+PHVsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiPlVwZGF0ZSB0aGUgRk1DX05PUlNSQU1fRXh0ZW5kZWRfVGltaW5nX0luaXQoKSBBUEkgdG8gcmVtb3ZlIHRoZSBjaGVjayBvbiZuYnNwO0NMS0RJdmlzb24gYW5kIERhdGFMYXRlbmN5IHBhcmFtZXRlcnM8L3NwYW4+PC9saT48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij5VcGRhdGUgdGhlIDwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiPkZNQ19OT1JTUkFNX0luaXQoKSBBUEkgdG8gYWRkIGEgY2hlY2sgb24gdGhlIFBhZ2VTaXplIHBhcmFtZXRlciBmb3IgU1RNMzJGNDIvNDN4eCBkZXZpY2VzPC9zcGFuPjwvbGk+PC91bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij48c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6IGJvbGQ7Ij5MTCBGU01DIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij51cGRhdGU8L3NwYW4+PC9saT48dWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+VXBkYXRlIHRoZSBGU01DX05PUlNSQU1fRXh0ZW5kZWRfVGltaW5nX0luaXQoKSBBUEkgdG8gcmVtb3ZlIHRoZSBjaGVjayBvbiZuYnNwO0NMS0RJdmlzb24gYW5kIERhdGFMYXRlbmN5IHBhcmFtZXRlcnM8L3NwYW4+PC9saT48L3VsPjwvdWw+PGgzIHN0eWxlPSJiYWNrZ3JvdW5kOiByZ2IoNTEsIDEwMiwgMjU1KSBub25lIHJlcGVhdCBzY3JvbGwgMCUgNTAlOyAtbW96LWJhY2tncm91bmQtY2xpcDogLW1vei1pbml0aWFsOyAtbW96LWJhY2tncm91bmQtb3JpZ2luOiAtbW96LWluaXRpYWw7IC1tb3otYmFja2dyb3VuZC1pbmxpbmUtcG9saWN5OiAtbW96LWluaXRpYWw7IG1hcmdpbi1yaWdodDogNTAwcHQ7IHdpZHRoOiAxODBweDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBBcmlhbDsgY29sb3I6IHdoaXRlOyI+VjEuNC4xIC8gMDktT2N0b2Jlci0yMDE1PC9zcGFuPjwvaDM+Cis8cCBjbGFzcz0iTXNvTGlzdFBhcmFncmFwaCI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij48c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6IGJvbGQ7Ij5IQUwgQ1JZUCZuYnNwOzwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij51cGRhdGU8L3NwYW4+PC9wPjwvbGk+PHVsPjxsaSBzdHlsZT0ibWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyBjb2xvcjogYmxhY2s7IiBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiPlVwZGF0ZSBIQUxfQ1JZUF9ERVNFQ0JfRGVjcnlwdCgpIEFQSSB0byBmaXggdGhlIGludmVydGVkIHBQbGFpbkRhdGEgYW5kIHBDeXBoZXJEYXRhIHBhcmFtZXRlcnMgaXNzdWU8L3NwYW4+PC9saT48L3VsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiPjxzcGFuIHN0eWxlPSJmb250LXdlaWdodDogYm9sZDsiPkhBTCBJMlMgPC9zcGFuPjwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiPnVwZGF0ZTwvc3Bhbj48L2xpPjx1bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij5VcGRhdGUgSEFMX0kyU19Jbml0KCkgQVBJJm5ic3A7dG8gY2FsbCBfX0hBTF9SQ0NfSTJTX0NPTkZJRygpIG1hY3JvIHdoZW4gZXh0ZXJuYWwgSTJTIGNsb2NrIGlzIHNlbGVjdGVkPC9zcGFuPjwvbGk+PC91bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij48c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6IGJvbGQ7Ij5IQUwgTFREQyA8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+dXBkYXRlPC9zcGFuPjwvbGk+PHVsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiPlVwZGF0ZSBIQUxfTFREQ19TZXRXaW5kb3dQb3NpdGlvbigpIEFQSSZuYnNwO3RvIGNvbmZpZ3VyZSBJbW1lZGlhdGUmbmJzcDtyZWxvYWQmbmJzcDs8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij5yZWdpc3RlciA8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij5pbnN0ZWFkIG9mIHZlcnRpY2FsIGJsYW5raW5nIHJlbG9hZCByZWdpc3Rlci48L3NwYW4+PC9saT48L3VsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiPjxzcGFuIHN0eWxlPSJmb250LXdlaWdodDogYm9sZDsiPkhBTCBUSU0gPC9zcGFuPjwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiPnVwZGF0ZTwvc3Bhbj48L2xpPjx1bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij5VcGRhdGUgSEFMX1RJTV9Db25maWdDbG9ja1NvdXJjZSgpIEFQSSB0byZuYnNwO2NoZWNrIG9ubHkgdGhlIHJlcXVpcmVkIHBhcmFtZXRlcnM8L3NwYW4+PC9saT48L3VsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiPjxzcGFuIHN0eWxlPSJmb250LXdlaWdodDogYm9sZDsiPkhBTCBOQU5EIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij51cGRhdGU8L3NwYW4+PC9saT48dWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+VXBkYXRlIEhBTF9OQU5EX1JlYWRfUGFnZSgpL0hBTF9OQU5EX1dyaXRlX1BhZ2UoKS9IQUxfTkFORF9SZWFkX1NwYXJlQXJlYSgpIEFQSXMgdG8gbWFuYWdlIGNvcnJlY3RseSB0aGUgTkFORCBQYWdlIGFjY2Vzczwvc3Bhbj48L2xpPjwvdWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiBib2xkOyI+SEFMIENBTiA8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+dXBkYXRlPC9zcGFuPjwvbGk+PHVsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiPlVwZGF0ZSB0byB1c2UgIj0iIGluc3RlYWQgb2YgInw9IiB0byBjbGVhciBmbGFncyBpbiB0aGUgTVNSLCBUU1IsIFJGMFIgYW5kIFJGMVIgcmVnaXN0ZXJzPC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+PC9zcGFuPjwvbGk+PC91bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij48c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6IGJvbGQ7Ij5IQUwgSENEIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij51cGRhdGU8L3NwYW4+PC9saT48dWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+Rml4IHR5cG8gaW4gX19IQUxfVVNCX09UR19IU19XQUtFVVBfRVhUSV9FTkFCTEVfUklTSU5HX0ZBTExJTkdfRURHRSgpIG1hY3JvIGltcGxlbWVudGF0aW9uPC9zcGFuPjwvbGk+PC91bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij48c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6IGJvbGQ7Ij5IQUwgUENEIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij51cGRhdGU8L3NwYW4+PC9saT48dWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+VXBkYXRlIEhBTF9QQ0RfSVJRSGFuZGxlcigpIEFQSSB0byBhdm9pZCBpc3N1ZSB3aGVuJm5ic3A7RE1BIG1vZGUgZW5hYmxlZCBmb3IgU3RhdHVzIFBoYXNlIElOIHN0YWdlPC9zcGFuPjwvbGk+PC91bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij48c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6IGJvbGQ7Ij5MTCBGTUMgPC9zcGFuPjwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiPnVwZGF0ZTwvc3Bhbj48L2xpPjx1bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij5VcGRhdGUgdGhlIEZNQ19OT1JTUkFNX0V4dGVuZGVkX1RpbWluZ19Jbml0KCkgQVBJIHRvIHJlbW92ZSB0aGUgY2hlY2sgb24mbmJzcDtDTEtESXZpc29uIGFuZCBEYXRhTGF0ZW5jeSBwYXJhbWV0ZXJzPC9zcGFuPjwvbGk+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+VXBkYXRlIHRoZSA8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij5GTUNfTk9SU1JBTV9Jbml0KCkgQVBJIHRvIGFkZCBhIGNoZWNrIG9uIHRoZSBQYWdlU2l6ZSBwYXJhbWV0ZXIgZm9yIFNUTTMyRjQyLzQzeHggZGV2aWNlczwvc3Bhbj48L2xpPjwvdWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiBib2xkOyI+TEwgRlNNQyA8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+dXBkYXRlPC9zcGFuPjwvbGk+PHVsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiPlVwZGF0ZSB0aGUgRlNNQ19OT1JTUkFNX0V4dGVuZGVkX1RpbWluZ19Jbml0KCkgQVBJIHRvIHJlbW92ZSB0aGUgY2hlY2sgb24mbmJzcDtDTEtESXZpc29uIGFuZCBEYXRhTGF0ZW5jeSBwYXJhbWV0ZXJzPC9zcGFuPjwvbGk+PC91bD48L3VsPjxoMyBzdHlsZT0iYmFja2dyb3VuZDogcmdiKDUxLCAxMDIsIDI1NSkgbm9uZSByZXBlYXQgc2Nyb2xsIDAlIDUwJTsgLW1vei1iYWNrZ3JvdW5kLWNsaXA6IGluaXRpYWw7IC1tb3otYmFja2dyb3VuZC1vcmlnaW46IGluaXRpYWw7IC1tb3otYmFja2dyb3VuZC1pbmxpbmUtcG9saWN5OiBpbml0aWFsOyBtYXJnaW4tcmlnaHQ6IDUwMHB0OyB3aWR0aDogMTgwcHg7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogQXJpYWw7IGNvbG9yOiB3aGl0ZTsiPlYxLjQuMSAvIDA5LU9jdG9iZXItMjAxNTwvc3Bhbj48L2gzPgogCiAgICAgICAgICAgICA8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luOiA0LjVwdCAwY20gNC41cHQgMThwdDsiPjxiPjx1PjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LCZxdW90O3NhbnMtc2VyaWYmcXVvdDs7IGNvbG9yOiBibGFjazsiPk1haW4gQ2hhbmdlczwvc3Bhbj48L3U+PC9iPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEycHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtUaW1lcyBOZXcgUm9tYW4mcXVvdDssJnF1b3Q7c2VyaWYmcXVvdDs7Ij48bzpwPjwvbzpwPjwvc3Bhbj48L3A+CiAKQEAgLTE5OTEsNyArMjAyNSw3IEBACiBIQUxfRFNJX0ZvcmNlUlhMb3dQb3dlcigpLCBIQUxfRFNJX0ZvcmNlRGF0YUxhbmVzSW5SWCgpLAogSEFMX0RTSV9TZXRQdWxsRG93bigpIGFuZCBIQUxfRFNJX1NldENvbnRlbnRpb25EZXRlY3Rpb25PZmYoKSBmdW5jdGlvbnM8L3NwYW4+PC9saT48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7IiBsYW5nPSJFTi1VUyI+VXBkYXRlIERTSV9IU19QTV9FTkFCTEUgZGVmaW5lIHZhbHVlPC9zcGFuPjwvbGk+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyIgbGFuZz0iRU4tVVMiPkltcGxlbWVudAogd29ya2Fyb3VuZCBmb3IgdGhlIGhhcmR3YXJlIGxpbWl0YXRpb246IJNUaGUgdGltZSB0byBhY3RpdmF0ZSB0aGUgY2xvY2sKLWJldHdlZW4gSFMgdHJhbnNtaXNzaW9ucyBpcyBub3QgY2FsY3VsYXRlZCBjb3JyZWN0bHmUPC9zcGFuPjwvbGk+PC91bD48L3VsPjxoMyBzdHlsZT0iYmFja2dyb3VuZDogcmdiKDUxLCAxMDIsIDI1NSkgbm9uZSByZXBlYXQgc2Nyb2xsIDAlIDUwJTsgLW1vei1iYWNrZ3JvdW5kLWNsaXA6IC1tb3otaW5pdGlhbDsgLW1vei1iYWNrZ3JvdW5kLW9yaWdpbjogLW1vei1pbml0aWFsOyAtbW96LWJhY2tncm91bmQtaW5saW5lLXBvbGljeTogLW1vei1pbml0aWFsOyBtYXJnaW4tcmlnaHQ6IDUwMHB0OyB3aWR0aDogMTgwcHg7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogQXJpYWw7IGNvbG9yOiB3aGl0ZTsiPlYxLjQuMCAvIDE0LUF1Z3VzdC0yMDE1PC9zcGFuPjwvaDM+CitiZXR3ZWVuIEhTIHRyYW5zbWlzc2lvbnMgaXMgbm90IGNhbGN1bGF0ZWQgY29ycmVjdGx5lDwvc3Bhbj48L2xpPjwvdWw+PC91bD48aDMgc3R5bGU9ImJhY2tncm91bmQ6IHJnYig1MSwgMTAyLCAyNTUpIG5vbmUgcmVwZWF0IHNjcm9sbCAwJSA1MCU7IC1tb3otYmFja2dyb3VuZC1jbGlwOiBpbml0aWFsOyAtbW96LWJhY2tncm91bmQtb3JpZ2luOiBpbml0aWFsOyAtbW96LWJhY2tncm91bmQtaW5saW5lLXBvbGljeTogaW5pdGlhbDsgbWFyZ2luLXJpZ2h0OiA1MDBwdDsgd2lkdGg6IDE4MHB4OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IEFyaWFsOyBjb2xvcjogd2hpdGU7Ij5WMS40LjAgLyAxNC1BdWd1c3QtMjAxNTwvc3Bhbj48L2gzPgogCiAgICAgICAgICAgICA8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luOiA0LjVwdCAwY20gNC41cHQgMThwdDsiPjxiPjx1PjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LCZxdW90O3NhbnMtc2VyaWYmcXVvdDs7IGNvbG9yOiBibGFjazsiPk1haW4gQ2hhbmdlczwvc3Bhbj48L3U+PC9iPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEycHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtUaW1lcyBOZXcgUm9tYW4mcXVvdDssJnF1b3Q7c2VyaWYmcXVvdDs7Ij48bzpwPjwvbzpwPjwvc3Bhbj48L3A+CiAKQEAgLTIwMDgsNyArMjA0Miw3IEBACiBIQUxfUFdSRXhfRW5hYmxlV2FrZVVwUGluUG9sYXJpdHlGYWxsaW5nRWRnZSgpLCBhcHBsaWNhYmxlIG9ubHkgdG8gPC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+U1RNMzJGNDY5eHggYW5kIFNUTTMyRjQ3OXh4IGRldmljZXM8L3NwYW4+PC9saT48L3VsPjwvdWw+PHVsIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwaW47IGNvbG9yOiByZ2IoMCwgMCwgMCk7IGZvbnQtZmFtaWx5OiAnVGltZXMgTmV3IFJvbWFuJzsgZm9udC1zaXplOiBtZWRpdW07IGZvbnQtc3R5bGU6IG5vcm1hbDsgZm9udC12YXJpYW50OiBub3JtYWw7IGZvbnQtd2VpZ2h0OiBub3JtYWw7IGxldHRlci1zcGFjaW5nOiBub3JtYWw7IGxpbmUtaGVpZ2h0OiBub3JtYWw7IHRleHQtYWxpZ246IHN0YXJ0OyB0ZXh0LWluZGVudDogMHB4OyB0ZXh0LXRyYW5zZm9ybTogbm9uZTsgd2hpdGUtc3BhY2U6IG5vcm1hbDsgd29yZC1zcGFjaW5nOiAwcHg7IG1hcmdpbi10b3A6IDBjbTsiIHR5cGU9InNxdWFyZSI+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiBib2xkOyI+SEFMIFJUQyA8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+dXBkYXRlPC9zcGFuPjwvbGk+PHVsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiIGxhbmc9IkVOLVVTIj5VcGRhdGUgSEFMX1JUQ0V4X1NldFdha2VVcFRpbWVyKCkgYW5kIEhBTF9SVENFeF9TZXRXYWtlVXBUaW1lcl9JVCgpIGZ1bmN0aW9ucyB0byBwcm9wZXJseSBjaGVjayBvbiB0aGUgV1VUV0YgZmxhZzwvc3Bhbj48L2xpPjwvdWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiBib2xkOyI+SEFMIFRJTSA8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+dXBkYXRlPC9zcGFuPjwvbGk+PHVsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiPmFkZAogbmV3IGRlZmluZXMgVElNX1NZU1RFTUJSRUFLSU5QVVRfSEFSREZBVUxULCZuYnNwOwogVElNX1NZU1RFTUJSRUFLSU5QVVRfUFZEIGFuZCBUSU1fU1lTVEVNQlJFQUtJTlBVVF9IQVJERkFVTFRfUFZELAotYXBwbGljYWJsZSBvbmx5IHRvIFNUTTMyRjQxMHh4IGRldmljZXM8L3NwYW4+PC9saT48L3VsPjwvdWw+PGgzIHN0eWxlPSJiYWNrZ3JvdW5kOiByZ2IoNTEsIDEwMiwgMjU1KSBub25lIHJlcGVhdCBzY3JvbGwgMCUgNTAlOyAtbW96LWJhY2tncm91bmQtY2xpcDogLW1vei1pbml0aWFsOyAtbW96LWJhY2tncm91bmQtb3JpZ2luOiAtbW96LWluaXRpYWw7IC1tb3otYmFja2dyb3VuZC1pbmxpbmUtcG9saWN5OiAtbW96LWluaXRpYWw7IG1hcmdpbi1yaWdodDogNTAwcHQ7IHdpZHRoOiAxODBweDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBBcmlhbDsgY29sb3I6IHdoaXRlOyI+VjEuMy4yIC8gMjYtSnVuZS0yMDE1PC9zcGFuPjwvaDM+CithcHBsaWNhYmxlIG9ubHkgdG8gU1RNMzJGNDEweHggZGV2aWNlczwvc3Bhbj48L2xpPjwvdWw+PC91bD48aDMgc3R5bGU9ImJhY2tncm91bmQ6IHJnYig1MSwgMTAyLCAyNTUpIG5vbmUgcmVwZWF0IHNjcm9sbCAwJSA1MCU7IC1tb3otYmFja2dyb3VuZC1jbGlwOiBpbml0aWFsOyAtbW96LWJhY2tncm91bmQtb3JpZ2luOiBpbml0aWFsOyAtbW96LWJhY2tncm91bmQtaW5saW5lLXBvbGljeTogaW5pdGlhbDsgbWFyZ2luLXJpZ2h0OiA1MDBwdDsgd2lkdGg6IDE4MHB4OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IEFyaWFsOyBjb2xvcjogd2hpdGU7Ij5WMS4zLjIgLyAyNi1KdW5lLTIwMTU8L3NwYW4+PC9oMz4KIAogICAgICAgICAgICAgPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbjogNC41cHQgMGNtIDQuNXB0IDE4cHQ7Ij48Yj48dT48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OywmcXVvdDtzYW5zLXNlcmlmJnF1b3Q7OyBjb2xvcjogYmxhY2s7Ij5NYWluIENoYW5nZXM8L3NwYW4+PC91PjwvYj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMnB0OyBmb250LWZhbWlseTogJnF1b3Q7VGltZXMgTmV3IFJvbWFuJnF1b3Q7LCZxdW90O3NlcmlmJnF1b3Q7OyI+PG86cD48L286cD48L3NwYW4+PC9wPgogCkBAIC0yMDI5LDcgKzIwNjMsNyBAQAogZm9yIHRoZSBFeHRlcm5hbFRyaWdJbmplY0NvbnZFZGdlIHBhcmFtZXRlciBpbiB0aGUgQURDX0luaXRUeXBlRGVmCiBzdHJ1Y3R1cmUgdG8gc2VsZWN0IHRoZSBBREMgc29mdHdhcmUgdHJpZ2dlciBtb2RlLjwvc3Bhbj48L2xpPjwvdWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiBib2xkOyI+SEFMIEZMQVNIIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij51cGRhdGU8L3NwYW4+PC9saT48dWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+RkxBU0hfT0JfR2V0UkRQKCkgQVBJIHVwZGF0ZSB0byByZXR1cm4gdWludDhfdCBpbnN0ZWFkIG9mIEZsYWdTdGF0dXM8L3NwYW4+PC9saT48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij4mbmJzcDtfX0hBTF9GTEFTSF9HRVRfTEFURU5DWSgpIG5ldyBtYWNybyA8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij5hZGQgdG8gZ2V0IHRoZSBmbGFzaCBsYXRlbmN5PC9zcGFuPjwvbGk+PC91bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij48c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6IGJvbGQ7Ij5IQUwgU1BJIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij51cGRhdGU8L3NwYW4+PC9saT48dWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+Rml4IHRoZSB3cm9uZyBkZWZpbml0aW9uIG9mIEhBTF9TUElfRVJST1JfRkxBRyBsaXRlcmFsPC9zcGFuPjwvbGk+PC91bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij48c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6IGJvbGQ7Ij5IQUwgSTJTIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij51cGRhdGU8L3NwYW4+PC9saT48dWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+SEFMX0kyU19UcmFuc21pdCgpIEFQSSB1cGRhdGUgdG8gY2hlY2sgb24gYnVzeSBmbGFnIG9ubHkgZm9yIEkyUyBzbGF2ZSBtb2RlPC9zcGFuPjwvbGk+PC91bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij48c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6IGJvbGQ7Ij5IQUwgQ1JDIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij51cGRhdGU8L3NwYW4+PC9saT48dWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+X19IQUxfQ1JDX1NFVF9JRFIoKSBtYWNybyBpbXBsZW1lbnRhdGlvbiBjaGFuZ2UgdG8gdXNlIFdSSVRFX1JFRygpIGluc3RlYWQgb2YgTU9ESUZZX1JFRygpPC9zcGFuPjwvbGk+PC91bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij48c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6IGJvbGQ7Ij5IQUwgRE1BMkQgPC9zcGFuPjwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiPnVwZGF0ZTwvc3Bhbj48L2xpPjx1bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij5IQUxfRE1BMkRfQ29uZmlnTGF5ZXIoKSBBUEkgdXBkYXRlIHRvIHVzZSAiPSIgaW5zdGVhZCBvZiAifD0iIHRvIGVyYXNlIDwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiPkJHQ09MUiBhbmQ8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij4gRkdDT0xSIHJlZ2lzdGVycyBiZWZvcmUgc2V0dGluZyB0aGUgbmV3IGNvbmZpZ3VyYXRpb248L3NwYW4+PC9saT48L3VsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiPjxzcGFuIHN0eWxlPSJmb250LXdlaWdodDogYm9sZDsiPkhBTCBIQVNIIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij51cGRhdGU8L3NwYW4+PC9saT48dWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+SEFMX0hBU0hfPHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiBib2xkOyI+TU9ERTwvc3Bhbj5fU3RhcnRfSVQoKSZuYnNwOzwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyI+KDwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiPjxzcGFuIHN0eWxlPSJmb250LXdlaWdodDogYm9sZDsiPk1PREUgPC9zcGFuPnN0YW5kcyBmb3IgPC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hLHNhbnMtc2VyaWY7Ij5NRDUsIFNIQTEsIFNIQTIyNCBhbmQgU0hBMzYpIHVwZGF0ZXM6PC9zcGFuPjwvbGk+PHVsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiPjwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiPkZpeCZuYnNwO3Byb2Nlc3NpbmcgZmFpbCBmb3Igc21hbGwgaW5wdXQgYnVmZmVyczwvc3Bhbj48L2xpPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiPlVwZGF0ZQogdG8gdW5sb2NrIHRoZSBwcm9jZXNzIGFuZCBjYWxsJm5ic3A7cmV0dXJuIEhBTF9PSyZuYnNwO2F0IHRoZSBlbmQgb2YgSEFTSAotcHJvY2Vzc2luZyB0byBhdm9pZCBpbmNvcnJlY3RseSByZXBlYXRpbmcgc29mdHdhcmU8L3NwYW4+PC9saT48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij5VcGRhdGUgdG8gcHJvcGVybHkgbWFuYWdlIHRoZSBIYXNoSVRDb3VudGVyPC9zcGFuPjwvbGk+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+VXBkYXRlIHRvIGNhbGwgdGhlIEhBTF9IQVNIX0luQ3BsdENhbGxiYWNrKCkgYXQgdGhlIGVuZCBvZiB0aGUgY29tcGxldGUgYnVmZmVyIGluc3RlYWQgb2Y8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij4gZXZlcnkgZWFjaCA1MTIgYml0cyA8L3NwYW4+PC9saT48L3VsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiPl9fSEFMX0hBU0hfR0VUX0ZMQUcoKSB1cGRhdGUgdG8gJm5ic3A7Y2hlY2sgdGhlIHJpZ2h0IHJlZ2lzdGVyIHdoZW4gdGhlIERJTk5FIGZsYWcgJm5ic3A7aXMgc2VsZWN0ZWQ8L3NwYW4+PC9saT48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij5IQUxfSEFTSF9TSEExX0FjY3VtdWxhdGUoKSB1cGRhdGVzOjwvc3Bhbj48L2xpPjx1bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij5BZGQgYSZuYnNwO2NhbGwgdG8gdGhlIG5ldyBJU19IQVNIX1NIQTFfQlVGRkVSX1NJWkUoKSBtYWNybyB0byBjaGVjayB0aGUgc2l6ZSBwYXJhbWV0ZXIuJm5ic3A7PC9zcGFuPjwvbGk+PC91bD48dWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+QWRkIHRoZSBmb2xsb3dpbmcgbm90ZSBpbiBBUEkgZGVzY3JpcHRpb248L3NwYW4+PC9saT48L3VsPjwvdWw+PC91bD48ZGl2IHN0eWxlPSJtYXJnaW4tbGVmdDogMTIwcHg7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OywmcXVvdDtzYW5zLXNlcmlmJnF1b3Q7OyI+Jm5ic3A7KiBAbm90ZSZuYnNwOyBJbnB1dCBidWZmZXIgc2l6ZSBpbiBieXRlcyBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNCBvdGhlcndpc2UgdGhlIGRpZ2VzdCBjb21wdXRhdGlvbiBpcyBjb3JydXB0ZWQuPC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LCZxdW90O3NhbnMtc2VyaWYmcXVvdDs7Ij48L3NwYW4+PC9kaXY+PHVsIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwaW47IGNvbG9yOiByZ2IoMCwgMCwgMCk7IGZvbnQtZmFtaWx5OiAnVGltZXMgTmV3IFJvbWFuJzsgZm9udC1zaXplOiBtZWRpdW07IGZvbnQtc3R5bGU6IG5vcm1hbDsgZm9udC12YXJpYW50OiBub3JtYWw7IGZvbnQtd2VpZ2h0OiBub3JtYWw7IGxldHRlci1zcGFjaW5nOiBub3JtYWw7IGxpbmUtaGVpZ2h0OiBub3JtYWw7IHRleHQtYWxpZ246IHN0YXJ0OyB0ZXh0LWluZGVudDogMHB4OyB0ZXh0LXRyYW5zZm9ybTogbm9uZTsgd2hpdGUtc3BhY2U6IG5vcm1hbDsgd29yZC1zcGFjaW5nOiAwcHg7IG1hcmdpbi10b3A6IDBjbTsiIHR5cGU9InNxdWFyZSI+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiBib2xkOyI+SEFMIFJUQyA8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+dXBkYXRlPC9zcGFuPjwvbGk+PHVsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiPlVwZGF0ZSB0byBkZWZpbmUmbmJzcDs8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij5oYXJkd2FyZSA8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij48L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsgY29sb3I6IGJsYWNrOyIgbGFuZz0iRU4tVVMiPmluZGVwZW5kZW50IGw8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij5pdGVyYWxzIG5hbWVzPC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7IGNvbG9yOiBibGFjazsiIGxhbmc9IkVOLVVTIj48L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij46PC9zcGFuPjwvbGk+PHVsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiPlJlbmFtZSBSVENfVEFNUEVSUElOX1BDMTMgYnkgJm5ic3A7UlRDX1RBTVBFUlBJTl9ERUZBVUxUPC9zcGFuPjwvbGk+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+UmVuYW1lIFJUQ19UQU1QRVJQSU5fUEEwIGJ5IFJUQ19UQU1QRVJQSU5fUE9TMTwvc3Bhbj48L2xpPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiPlJlbmFtZSBSVENfVEFNUEVSUElOX1BJOCBieSBSVENfVEFNUEVSUElOX1BPUzE8L3NwYW4+PC9saT48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij5SZW5hbWUgUlRDX1RJTUVTVEFNUFBJTl9QQzEzIGJ5IFJUQ19USU1FU1RBTVBQSU5fREVGQVVMVDwvc3Bhbj48L2xpPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiPlJlbmFtZSBSVENfVElNRVNUQU1QUElOX1BBMCBieSBSVENfVElNRVNUQU1QUElOX1BPUzE8L3NwYW4+PC9saT48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij5SZW5hbWUgUlRDX1RJTUVTVEFNUFBJTl9QSTggYnkgUlRDX1RJTUVTVEFNUFBJTl9QT1MxPGJyPjwvc3Bhbj48L2xpPjwvdWw+PC91bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij48c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6IGJvbGQ7Ij5IQUwgRVRIIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij51cGRhdGU8L3NwYW4+PC9saT48dWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+UmVtb3ZlIGR1cGxpY2F0ZWQmbmJzcDtJU19FVEhfRFVQTEVYX01PREUoKSBhbmQgSVNfRVRIX1JYX01PREUoKSBtYWNyb3M8L3NwYW4+PC9saT48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij5SZW1vdmUgaWxsZWdhbCBzcGFjZSBFVEhfTUFDX1JFQURDT05UUk9MTEVSX0ZMVVNISU5HIG1hY3JvPC9zcGFuPjwvbGk+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+VXBkYXRlIEVUSF9NQUNfUkVBRENPTlRST0xMRVJfWFhYIGRlZmluZWQgdmFsdWVzIChYWFggY2FuIGJlIElETEUsIFJFQURJTkdfREFUQSBhbmQgUkVBRElOR19TVEFUVVMpPGJyPjwvc3Bhbj48L2xpPjwvdWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiBib2xkOyI+SEFMIFBDRCA8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+dXBkYXRlPC9zcGFuPjwvbGk+PHVsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiPkhBTF9QQ0RfSVJRSGFuZGxlciBBUEk6IGZpeCB0aGUgYmFkIENvbmZpZ3VyYXRpb24gb2YgVHVybmFyb3VuZCBUaW1lPC9zcGFuPjwvbGk+PC91bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij48c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6IGJvbGQ7Ij5IQUwgSENEIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij51cGRhdGU8L3NwYW4+PC9saT48dWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+VXBkYXRlIHRvIHVzZSBsb2NhbCB2YXJpYWJsZSZuYnNwO2luIFVTQiBIb3N0IGNoYW5uZWwgcmUtYWN0aXZhdGlvbjwvc3Bhbj48L2xpPjwvdWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiBib2xkOyI+TEwgRk1DIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij51cGRhdGU8L3NwYW4+PC9saT48dWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+Rk1DX1NEUkFNX1NlbmRDb21tYW5kKCkgQVBJOiByZW1vdmUgdGhlIGZvbGxvd2luZyBsaW5lOiByZXR1cm4gSEFMX0VSUk9SOzwvc3Bhbj48L2xpPjwvdWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiBib2xkOyI+TEwgVVNCIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij51cGRhdGU8L3NwYW4+PC9saT48dWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+VVNCX0ZsdXNoVHhGaWZvJm5ic3A7QVBJOiB1cGRhdGUgdG8gZmx1c2ggYWxsIFR4IEZJRk88L3NwYW4+PC9saT48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij5VcGRhdGUgdG8gdXNlIGxvY2FsIHZhcmlhYmxlJm5ic3A7aW4gVVNCIEhvc3QgY2hhbm5lbCByZS1hY3RpdmF0aW9uPC9zcGFuPjwvbGk+PC91bD48L3VsPjxoMyBzdHlsZT0iYmFja2dyb3VuZDogcmdiKDUxLCAxMDIsIDI1NSkgbm9uZSByZXBlYXQgc2Nyb2xsIDAlIDUwJTsgLW1vei1iYWNrZ3JvdW5kLWNsaXA6IC1tb3otaW5pdGlhbDsgLW1vei1iYWNrZ3JvdW5kLW9yaWdpbjogLW1vei1pbml0aWFsOyAtbW96LWJhY2tncm91bmQtaW5saW5lLXBvbGljeTogLW1vei1pbml0aWFsOyBtYXJnaW4tcmlnaHQ6IDUwMHB0OyB3aWR0aDogMTgwcHg7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogQXJpYWw7IGNvbG9yOiB3aGl0ZTsiPlYxLjMuMSAvIDI1LU1hcnMtMjAxNTwvc3Bhbj48L2gzPgorcHJvY2Vzc2luZyB0byBhdm9pZCBpbmNvcnJlY3RseSByZXBlYXRpbmcgc29mdHdhcmU8L3NwYW4+PC9saT48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij5VcGRhdGUgdG8gcHJvcGVybHkgbWFuYWdlIHRoZSBIYXNoSVRDb3VudGVyPC9zcGFuPjwvbGk+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+VXBkYXRlIHRvIGNhbGwgdGhlIEhBTF9IQVNIX0luQ3BsdENhbGxiYWNrKCkgYXQgdGhlIGVuZCBvZiB0aGUgY29tcGxldGUgYnVmZmVyIGluc3RlYWQgb2Y8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij4gZXZlcnkgZWFjaCA1MTIgYml0cyA8L3NwYW4+PC9saT48L3VsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiPl9fSEFMX0hBU0hfR0VUX0ZMQUcoKSB1cGRhdGUgdG8gJm5ic3A7Y2hlY2sgdGhlIHJpZ2h0IHJlZ2lzdGVyIHdoZW4gdGhlIERJTk5FIGZsYWcgJm5ic3A7aXMgc2VsZWN0ZWQ8L3NwYW4+PC9saT48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij5IQUxfSEFTSF9TSEExX0FjY3VtdWxhdGUoKSB1cGRhdGVzOjwvc3Bhbj48L2xpPjx1bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij5BZGQgYSZuYnNwO2NhbGwgdG8gdGhlIG5ldyBJU19IQVNIX1NIQTFfQlVGRkVSX1NJWkUoKSBtYWNybyB0byBjaGVjayB0aGUgc2l6ZSBwYXJhbWV0ZXIuJm5ic3A7PC9zcGFuPjwvbGk+PC91bD48dWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+QWRkIHRoZSBmb2xsb3dpbmcgbm90ZSBpbiBBUEkgZGVzY3JpcHRpb248L3NwYW4+PC9saT48L3VsPjwvdWw+PC91bD48ZGl2IHN0eWxlPSJtYXJnaW4tbGVmdDogMTIwcHg7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OywmcXVvdDtzYW5zLXNlcmlmJnF1b3Q7OyI+Jm5ic3A7KiBAbm90ZSZuYnNwOyBJbnB1dCBidWZmZXIgc2l6ZSBpbiBieXRlcyBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNCBvdGhlcndpc2UgdGhlIGRpZ2VzdCBjb21wdXRhdGlvbiBpcyBjb3JydXB0ZWQuPC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LCZxdW90O3NhbnMtc2VyaWYmcXVvdDs7Ij48L3NwYW4+PC9kaXY+PHVsIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwaW47IGNvbG9yOiByZ2IoMCwgMCwgMCk7IGZvbnQtZmFtaWx5OiAnVGltZXMgTmV3IFJvbWFuJzsgZm9udC1zaXplOiBtZWRpdW07IGZvbnQtc3R5bGU6IG5vcm1hbDsgZm9udC12YXJpYW50OiBub3JtYWw7IGZvbnQtd2VpZ2h0OiBub3JtYWw7IGxldHRlci1zcGFjaW5nOiBub3JtYWw7IGxpbmUtaGVpZ2h0OiBub3JtYWw7IHRleHQtYWxpZ246IHN0YXJ0OyB0ZXh0LWluZGVudDogMHB4OyB0ZXh0LXRyYW5zZm9ybTogbm9uZTsgd2hpdGUtc3BhY2U6IG5vcm1hbDsgd29yZC1zcGFjaW5nOiAwcHg7IG1hcmdpbi10b3A6IDBjbTsiIHR5cGU9InNxdWFyZSI+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiBib2xkOyI+SEFMIFJUQyA8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+dXBkYXRlPC9zcGFuPjwvbGk+PHVsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiPlVwZGF0ZSB0byBkZWZpbmUmbmJzcDs8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij5oYXJkd2FyZSA8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij48L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssc2Fucy1zZXJpZjsgY29sb3I6IGJsYWNrOyIgbGFuZz0iRU4tVVMiPmluZGVwZW5kZW50IGw8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij5pdGVyYWxzIG5hbWVzPC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LHNhbnMtc2VyaWY7IGNvbG9yOiBibGFjazsiIGxhbmc9IkVOLVVTIj48L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij46PC9zcGFuPjwvbGk+PHVsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiPlJlbmFtZSBSVENfVEFNUEVSUElOX1BDMTMgYnkgJm5ic3A7UlRDX1RBTVBFUlBJTl9ERUZBVUxUPC9zcGFuPjwvbGk+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+UmVuYW1lIFJUQ19UQU1QRVJQSU5fUEEwIGJ5IFJUQ19UQU1QRVJQSU5fUE9TMTwvc3Bhbj48L2xpPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiPlJlbmFtZSBSVENfVEFNUEVSUElOX1BJOCBieSBSVENfVEFNUEVSUElOX1BPUzE8L3NwYW4+PC9saT48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij5SZW5hbWUgUlRDX1RJTUVTVEFNUFBJTl9QQzEzIGJ5IFJUQ19USU1FU1RBTVBQSU5fREVGQVVMVDwvc3Bhbj48L2xpPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiPlJlbmFtZSBSVENfVElNRVNUQU1QUElOX1BBMCBieSBSVENfVElNRVNUQU1QUElOX1BPUzE8L3NwYW4+PC9saT48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij5SZW5hbWUgUlRDX1RJTUVTVEFNUFBJTl9QSTggYnkgUlRDX1RJTUVTVEFNUFBJTl9QT1MxPGJyPjwvc3Bhbj48L2xpPjwvdWw+PC91bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij48c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6IGJvbGQ7Ij5IQUwgRVRIIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij51cGRhdGU8L3NwYW4+PC9saT48dWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+UmVtb3ZlIGR1cGxpY2F0ZWQmbmJzcDtJU19FVEhfRFVQTEVYX01PREUoKSBhbmQgSVNfRVRIX1JYX01PREUoKSBtYWNyb3M8L3NwYW4+PC9saT48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij5SZW1vdmUgaWxsZWdhbCBzcGFjZSBFVEhfTUFDX1JFQURDT05UUk9MTEVSX0ZMVVNISU5HIG1hY3JvPC9zcGFuPjwvbGk+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+VXBkYXRlIEVUSF9NQUNfUkVBRENPTlRST0xMRVJfWFhYIGRlZmluZWQgdmFsdWVzIChYWFggY2FuIGJlIElETEUsIFJFQURJTkdfREFUQSBhbmQgUkVBRElOR19TVEFUVVMpPGJyPjwvc3Bhbj48L2xpPjwvdWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiBib2xkOyI+SEFMIFBDRCA8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+dXBkYXRlPC9zcGFuPjwvbGk+PHVsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiPkhBTF9QQ0RfSVJRSGFuZGxlciBBUEk6IGZpeCB0aGUgYmFkIENvbmZpZ3VyYXRpb24gb2YgVHVybmFyb3VuZCBUaW1lPC9zcGFuPjwvbGk+PC91bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij48c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6IGJvbGQ7Ij5IQUwgSENEIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij51cGRhdGU8L3NwYW4+PC9saT48dWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+VXBkYXRlIHRvIHVzZSBsb2NhbCB2YXJpYWJsZSZuYnNwO2luIFVTQiBIb3N0IGNoYW5uZWwgcmUtYWN0aXZhdGlvbjwvc3Bhbj48L2xpPjwvdWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiBib2xkOyI+TEwgRk1DIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij51cGRhdGU8L3NwYW4+PC9saT48dWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+Rk1DX1NEUkFNX1NlbmRDb21tYW5kKCkgQVBJOiByZW1vdmUgdGhlIGZvbGxvd2luZyBsaW5lOiByZXR1cm4gSEFMX0VSUk9SOzwvc3Bhbj48L2xpPjwvdWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiBib2xkOyI+TEwgVVNCIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij51cGRhdGU8L3NwYW4+PC9saT48dWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+VVNCX0ZsdXNoVHhGaWZvJm5ic3A7QVBJOiB1cGRhdGUgdG8gZmx1c2ggYWxsIFR4IEZJRk88L3NwYW4+PC9saT48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij5VcGRhdGUgdG8gdXNlIGxvY2FsIHZhcmlhYmxlJm5ic3A7aW4gVVNCIEhvc3QgY2hhbm5lbCByZS1hY3RpdmF0aW9uPC9zcGFuPjwvbGk+PC91bD48L3VsPjxoMyBzdHlsZT0iYmFja2dyb3VuZDogcmdiKDUxLCAxMDIsIDI1NSkgbm9uZSByZXBlYXQgc2Nyb2xsIDAlIDUwJTsgLW1vei1iYWNrZ3JvdW5kLWNsaXA6IGluaXRpYWw7IC1tb3otYmFja2dyb3VuZC1vcmlnaW46IGluaXRpYWw7IC1tb3otYmFja2dyb3VuZC1pbmxpbmUtcG9saWN5OiBpbml0aWFsOyBtYXJnaW4tcmlnaHQ6IDUwMHB0OyB3aWR0aDogMTgwcHg7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogQXJpYWw7IGNvbG9yOiB3aGl0ZTsiPlYxLjMuMSAvIDI1LU1hcnMtMjAxNTwvc3Bhbj48L2gzPgogCiAgICAgICAgICAgICA8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luOiA0LjVwdCAwY20gNC41cHQgMThwdDsiPjxiPjx1PjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LCZxdW90O3NhbnMtc2VyaWYmcXVvdDs7IGNvbG9yOiBibGFjazsiPk1haW4gQ2hhbmdlczwvc3Bhbj48L3U+PC9iPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEycHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtUaW1lcyBOZXcgUm9tYW4mcXVvdDssJnF1b3Q7c2VyaWYmcXVvdDs7Ij48bzpwPjwvbzpwPjwvc3Bhbj48L3A+CiAKQEAgLTIwMzksNyArMjA3Myw3IEBACiAgICAgICAgICAgICAKICAgICAgICAgICAgIAogICAgICAgICAgICAgPHVsIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwaW47IGNvbG9yOiByZ2IoMCwgMCwgMCk7IGZvbnQtZmFtaWx5OiAnVGltZXMgTmV3IFJvbWFuJzsgZm9udC1zaXplOiBtZWRpdW07IGZvbnQtc3R5bGU6IG5vcm1hbDsgZm9udC12YXJpYW50OiBub3JtYWw7IGZvbnQtd2VpZ2h0OiBub3JtYWw7IGxldHRlci1zcGFjaW5nOiBub3JtYWw7IGxpbmUtaGVpZ2h0OiBub3JtYWw7IHRleHQtYWxpZ246IHN0YXJ0OyB0ZXh0LWluZGVudDogMHB4OyB0ZXh0LXRyYW5zZm9ybTogbm9uZTsgd2hpdGUtc3BhY2U6IG5vcm1hbDsgd29yZC1zcGFjaW5nOiAwcHg7IG1hcmdpbi10b3A6IDBjbTsiIHR5cGU9InNxdWFyZSI+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiBib2xkOyI+SEFMIFBXUiA8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+dXBkYXRlPC9zcGFuPjwvbGk+PHVsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiPkZpeCBjb21waWxhdGlvbiBpc3N1ZSB3aXRoIFNUTTMyRjQxN3h4IHByb2R1Y3Q6IHVwZGF0ZSZuYnNwOzxzcGFuIHN0eWxlPSJmb250LXdlaWdodDogYm9sZDsiPlNUTTMyRjE3eHg8L3NwYW4+IGJ5IDwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiPjxzcGFuIHN0eWxlPSJmb250LXdlaWdodDogYm9sZDsiPlNUTTMyRjQxN3h4PC9zcGFuPjwvc3Bhbj48L2xpPjwvdWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiBib2xkOyI+SEFMIFNQSSA8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+dXBkYXRlPC9zcGFuPjwvbGk+PHVsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiPlJlbW92ZSB1bnVzZWQgdmFyaWFibGUgdG8gYXZvaWQgd2FybmluZyB3aXRoIFRydWVTVFVESU8mbmJzcDs8L3NwYW4+PC9saT48L3VsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiPjxzcGFuIHN0eWxlPSJmb250LXdlaWdodDogYm9sZDsiPkhBTCBJMkMgPC9zcGFuPjwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiPnVwZGF0ZTwvc3Bhbj48L2xpPjx1bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij5JMkMgUG9sbGluZy9JVC9ETUEgcHJvY2Vzc2VzOiBtb3ZlIHRoZSZuYnNwO3dhaXQgbG9vcCBvbiBidXN5IGZsYWcgYXQgdGhlIHRvcCBvZiB0aGUgcHJvY2Vzc2VzLCA8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmEsc2Fucy1zZXJpZjsiPnRvIGVuc3VyZSB0aGF0IHNvZnR3YXJlIG5vdCBwZXJmb3JtIGFueSB3cml0ZSBhY2Nlc3MgdG8gSTJDX0NSMSByZWdpc3RlciBiZWZvcmUgaGFyZHdhcmUgY2xlYXJpbmcmbmJzcDtTVE9QIGJpdCA8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmEsc2Fucy1zZXJpZjsiPmFuZCB0byBhdm9pZCBhbHNvIHRoZSB3YWl0aW5nIGxvb3Agb24gQlVTWSBmbGFnIHVuZGVyIEkyQy9ETUEgSVNSLjwvc3Bhbj48L2xpPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyI+VXBkYXRlIGJ1c3kgZmxhZyZuYnNwO1RpbWVvdXQgdmFsdWU8L3NwYW4+PC9saT48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmEsc2Fucy1zZXJpZjsiPkkyQyBNYXN0ZXIgUmVjZWl2ZSBQcm9jZXNzZXMgdXBkYXRlIHRvIGRpc2FibGUgQUNLIGJlZm9yZSBnZW5lcmF0ZSB0aGUgU1RPUCZuYnNwOzwvc3Bhbj48L2xpPjwvdWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiBib2xkOyI+SEFMIERBQyA8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+dXBkYXRlPC9zcGFuPjwvbGk+PHVsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OyxzYW5zLXNlcmlmOyIgbGFuZz0iRU4tVVMiPkZpeAotVjEuMy4wIHJlZ3Jlc3Npb24gaXNzdWUgd2l0aCBEQUMgc29mdHdhcmUgdHJpZ2dlciBjb25maWd1cmF0aW9uPC9zcGFuPjwvbGk+PC91bD48L3VsPjxoMyBzdHlsZT0iYmFja2dyb3VuZDogcmdiKDUxLCAxMDIsIDI1NSkgbm9uZSByZXBlYXQgc2Nyb2xsIDAlIDUwJTsgLW1vei1iYWNrZ3JvdW5kLWNsaXA6IC1tb3otaW5pdGlhbDsgLW1vei1iYWNrZ3JvdW5kLW9yaWdpbjogLW1vei1pbml0aWFsOyAtbW96LWJhY2tncm91bmQtaW5saW5lLXBvbGljeTogLW1vei1pbml0aWFsOyBtYXJnaW4tcmlnaHQ6IDUwMHB0OyB3aWR0aDogMTgwcHg7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogQXJpYWw7IGNvbG9yOiB3aGl0ZTsiPlYxLjMuMCAvIDA5LU1hcnMtMjAxNTwvc3Bhbj48L2gzPgorVjEuMy4wIHJlZ3Jlc3Npb24gaXNzdWUgd2l0aCBEQUMgc29mdHdhcmUgdHJpZ2dlciBjb25maWd1cmF0aW9uPC9zcGFuPjwvbGk+PC91bD48L3VsPjxoMyBzdHlsZT0iYmFja2dyb3VuZDogcmdiKDUxLCAxMDIsIDI1NSkgbm9uZSByZXBlYXQgc2Nyb2xsIDAlIDUwJTsgLW1vei1iYWNrZ3JvdW5kLWNsaXA6IGluaXRpYWw7IC1tb3otYmFja2dyb3VuZC1vcmlnaW46IGluaXRpYWw7IC1tb3otYmFja2dyb3VuZC1pbmxpbmUtcG9saWN5OiBpbml0aWFsOyBtYXJnaW4tcmlnaHQ6IDUwMHB0OyB3aWR0aDogMTgwcHg7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogQXJpYWw7IGNvbG9yOiB3aGl0ZTsiPlYxLjMuMCAvIDA5LU1hcnMtMjAxNTwvc3Bhbj48L2gzPgogCiAgICAgICAgICAgICA8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luOiA0LjVwdCAwY20gNC41cHQgMThwdDsiPjxiPjx1PjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LCZxdW90O3NhbnMtc2VyaWYmcXVvdDs7IGNvbG9yOiBibGFjazsiPk1haW4gQ2hhbmdlczwvc3Bhbj48L3U+PC9iPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEycHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtUaW1lcyBOZXcgUm9tYW4mcXVvdDssJnF1b3Q7c2VyaWYmcXVvdDs7Ij48bzpwPjwvbzpwPjwvc3Bhbj48L3A+CiAKQEAgLTIwOTYsNyArMjEzMCw3IEBACiAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJtYXJnaW4tbGVmdDogMTIwcHg7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYTsiPjxzcGFuIHN0eWxlPSJmb250LXN0eWxlOiBpdGFsaWM7Ij4mbmJzcDsmbmJzcDsqIEBub3RlJm5ic3A7Jm5ic3A7IFRyYW5zaXRpb24gTFNFIEJ5cGFzcyB0byBMU0UgT24gYW5kIExTRSBPbiB0byBMU0UgQnlwYXNzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgbWFjcm8uPGJyPiZuYnNwOwogKiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBVc2VyIHNob3VsZCByZXF1ZXN0IGEKIHRyYW5zaXRpb24gdG8gTFNFIE9mZiBmaXJzdCBhbmQgdGhlbiBMU0UgT24gb3IgTFNFIEJ5cGFzcy48L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LCZxdW90O3NhbnMtc2VyaWYmcXVvdDs7Ij48L3NwYW4+PC9kaXY+PHVsIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwaW47IGNvbG9yOiByZ2IoMCwgMCwgMCk7IGZvbnQtZmFtaWx5OiAnVGltZXMgTmV3IFJvbWFuJzsgZm9udC1zaXplOiBtZWRpdW07IGZvbnQtc3R5bGU6IG5vcm1hbDsgZm9udC12YXJpYW50OiBub3JtYWw7IGZvbnQtd2VpZ2h0OiBub3JtYWw7IGxldHRlci1zcGFjaW5nOiBub3JtYWw7IGxpbmUtaGVpZ2h0OiBub3JtYWw7IHRleHQtYWxpZ246IHN0YXJ0OyB0ZXh0LWluZGVudDogMHB4OyB0ZXh0LXRyYW5zZm9ybTogbm9uZTsgd2hpdGUtc3BhY2U6IG5vcm1hbDsgd29yZC1zcGFjaW5nOiAwcHg7IG1hcmdpbi10b3A6IDBjbTsiIHR5cGU9InNxdWFyZSI+PHVsPjxsaSBzdHlsZT0ibWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyBjb2xvcjogYmxhY2s7IiBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiIGxhbmc9IkVOLVVTIj5BZGQgdGhlIAotZm9sbG93aW5nIG5ldyAgbWFjcm9zIGZvciBQTEwmbmJzcDtzb3VyY2UgYW5kIFBMTE0mbmJzcDtzZWxlY3Rpb24gOjxvOnA+PC9vOnA+PC9zcGFuPjwvbGk+PHVsPjxsaSBzdHlsZT0iZm9udC1zdHlsZTogaXRhbGljOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7IGNvbG9yOiBibGFjazsiIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyIgbGFuZz0iRU4tVVMiPl9fSEFMX1JDQ19QTExfUExMU09VUkNFX0NPTkZJRygpPG86cD48L286cD48L3NwYW4+PC9saT48L3VsPjx1bD48bGkgc3R5bGU9ImZvbnQtc3R5bGU6IGl0YWxpYzsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyBjb2xvcjogYmxhY2s7IiBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiIGxhbmc9IkVOLVVTIj5fX0hBTF9SQ0NfUExMX1BMTE1fQ09ORklHKCk8L3NwYW4+PC9saT48L3VsPjxsaSBzdHlsZT0iZm9udC1zdHlsZTogaXRhbGljOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7IGNvbG9yOiBibGFjazsiIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyIgbGFuZz0iRU4tVVMiPk1hY3JvcyByZW5hbWU6PC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyIgbGFuZz0iRU4tVVMiPjwvc3Bhbj48L2xpPjx1bD48bGkgc3R5bGU9Im1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsgY29sb3I6IGJsYWNrOyIgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssJnF1b3Q7c2Fucy1zZXJpZiZxdW90OzsiPkhBTF9SQ0NfT1RHSFNfRk9SQ0VfUkVTRVQoKSBieSZuYnNwOzwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OywmcXVvdDtzYW5zLXNlcmlmJnF1b3Q7OyI+SEFMX1JDQ19VU0JfT1RHX0hTX0ZPUkNFX1JFU0VUPC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LCZxdW90O3NhbnMtc2VyaWYmcXVvdDs7Ij4oKTwvc3Bhbj48L2xpPjxsaSBzdHlsZT0ibWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyBjb2xvcjogYmxhY2s7IiBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OywmcXVvdDtzYW5zLXNlcmlmJnF1b3Q7OyI+SEFMX1JDQ19PVEdIU19SRUxFQVNFX1JFU0VUKCkgYnkmbmJzcDs8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssJnF1b3Q7c2Fucy1zZXJpZiZxdW90OzsiPkhBTF9SQ0NfVVNCX09UR19IU19SRUxFQVNFX1JFU0VUPC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LCZxdW90O3NhbnMtc2VyaWYmcXVvdDs7Ij4oKTwvc3Bhbj48L2xpPjxsaSBzdHlsZT0ibWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyBjb2xvcjogYmxhY2s7IiBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OywmcXVvdDtzYW5zLXNlcmlmJnF1b3Q7OyI+SEFMX1JDQ19PVEdIU19DTEtfU0xFRVBfRU5BQkxFKCkgYnkmbmJzcDs8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssJnF1b3Q7c2Fucy1zZXJpZiZxdW90OzsiPkhBTF9SQ0NfVVNCX09UR19IU19DTEtfU0xFRVBfRU5BQkxFPC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LCZxdW90O3NhbnMtc2VyaWYmcXVvdDs7Ij4oKTwvc3Bhbj48L2xpPjxsaSBzdHlsZT0ibWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyBjb2xvcjogYmxhY2s7IiBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OywmcXVvdDtzYW5zLXNlcmlmJnF1b3Q7OyI+SEFMX1JDQ19PVEdIU19DTEtfU0xFRVBfRElTQUJMRSgpIGJ5Jm5ic3A7PC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LCZxdW90O3NhbnMtc2VyaWYmcXVvdDs7Ij5IQUxfUkNDX1VTQl9PVEdfSFNfQ0xLX1NMRUVQX0RJU0FCTEU8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssJnF1b3Q7c2Fucy1zZXJpZiZxdW90OzsiPigpPC9zcGFuPjwvbGk+PGxpIHN0eWxlPSJtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7IGNvbG9yOiBibGFjazsiIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LCZxdW90O3NhbnMtc2VyaWYmcXVvdDs7Ij5IQUxfUkNDX09UR0hTVUxQSV9DTEtfU0xFRVBfRU5BQkxFKCkgYnkmbmJzcDs8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssJnF1b3Q7c2Fucy1zZXJpZiZxdW90OzsiPkhBTF9SQ0NfVVNCX09UR19IU19VTFBJX0NMS19TTEVFUF9FTkFCTEU8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssJnF1b3Q7c2Fucy1zZXJpZiZxdW90OzsiPigpPC9zcGFuPjwvbGk+PGxpIHN0eWxlPSJtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7IGNvbG9yOiBibGFjazsiIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LCZxdW90O3NhbnMtc2VyaWYmcXVvdDs7Ij5IQUxfUkNDX09UR0hTVUxQSV9DTEtfU0xFRVBfRElTQUJMRSgpIGJ5Jm5ic3A7PC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LCZxdW90O3NhbnMtc2VyaWYmcXVvdDs7Ij5IQUxfUkNDX1VTQl9PVEdfSFNfVUxQSV9DTEtfU0xFRVBfRElTQUJMRTwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OywmcXVvdDtzYW5zLXNlcmlmJnF1b3Q7OyI+KCk8L3NwYW4+PC9saT48L3VsPjxsaSBzdHlsZT0ibWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyBjb2xvcjogYmxhY2s7IGZvbnQtZmFtaWx5OiBWZXJkYW5hOyIgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsiPkFkZCZuYnNwO19fSEFMX1JDQ19TWVNDTEtfQ09ORklHKCkgPC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7Ij5uZXcgbWFjcm88L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsiPiB0byBjb25maWd1cmUgdGhlIHN5c3RlbSBjbG9jayBzb3VyY2UgKDwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyI+U1lTQ0xLPC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7Ij4pPC9zcGFuPjwvbGk+PGxpIHN0eWxlPSJtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7IGNvbG9yOiBibGFjazsiIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LCZxdW90O3NhbnMtc2VyaWYmcXVvdDs7Ij5fX0hBTF9SQ0NfR0VUX1NZU0NMS19TT1VSQ0UoKSB1cGRhdGVzOjwvc3Bhbj48L2xpPjx1bD48bGkgc3R5bGU9Im1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsgY29sb3I6IGJsYWNrOyIgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssJnF1b3Q7c2Fucy1zZXJpZiZxdW90OzsiPkFkZCBuZXcgUkNDIExpdGVyYWxzOjwvc3Bhbj48L2xpPjx1bD48bGkgc3R5bGU9Im1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsgY29sb3I6IGJsYWNrOyIgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssJnF1b3Q7c2Fucy1zZXJpZiZxdW90OzsiPlJDQ19TWVNDTEtTT1VSQ0VfU1RBVFVTX0hTSTwvc3Bhbj48L2xpPjxsaSBzdHlsZT0ibWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyBjb2xvcjogYmxhY2s7IiBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OywmcXVvdDtzYW5zLXNlcmlmJnF1b3Q7OyI+UkNDX1NZU0NMS1NPVVJDRV9TVEFUVVNfSFNFPC9zcGFuPjwvbGk+PGxpIHN0eWxlPSJtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7IGNvbG9yOiBibGFjazsiIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LCZxdW90O3NhbnMtc2VyaWYmcXVvdDs7Ij5SQ0NfU1lTQ0xLU09VUkNFX1NUQVRVU19QTExDTEs8L3NwYW4+PC9saT48bGkgc3R5bGU9Im1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsgY29sb3I6IGJsYWNrOyIgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssJnF1b3Q7c2Fucy1zZXJpZiZxdW90OzsiPlJDQ19TWVNDTEtTT1VSQ0VfU1RBVFVTX1BMTFJDTEs8L3NwYW4+PC9saT48L3VsPjwvdWw+PHVsPjxsaSBzdHlsZT0ibWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyBjb2xvcjogYmxhY2s7IiBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OywmcXVvdDtzYW5zLXNlcmlmJnF1b3Q7OyI+Jm5ic3A7PC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LCZxdW90O3NhbnMtc2VyaWYmcXVvdDs7Ij5VcGRhdGUgbWFjcm8gZGVzY3JpcHRpb24gdG8gcmVmZXIgdG8gdGhlIGxpdGVyYWxzIGFib3ZlPC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LCZxdW90O3NhbnMtc2VyaWYmcXVvdDs7Ij4gPC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjogcmdiKDcxLCA3MSwgNzEpOyBmb250LWZhbWlseTogaGVsdmV0aWNhLGFyaWFsLHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMjZweDsgZm9udC1zdHlsZTogbm9ybWFsOyBmb250LXZhcmlhbnQ6IG5vcm1hbDsgZm9udC13ZWlnaHQ6IGJvbGQ7IGxldHRlci1zcGFjaW5nOiBub3JtYWw7IGxpbmUtaGVpZ2h0OiAyMHB4OyB0ZXh0LWFsaWduOiBzdGFydDsgdGV4dC1pbmRlbnQ6IDBweDsgdGV4dC10cmFuc2Zvcm06IG5vbmU7IHdoaXRlLXNwYWNlOiBub3JtYWw7IHdvcmQtc3BhY2luZzogMHB4OyBkaXNwbGF5OiBpbmxpbmUgISBpbXBvcnRhbnQ7IGZsb2F0OiBub25lOyBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjU1LCAyNTUsIDI1NSk7Ij48L3NwYW4+PC9saT48L3VsPjwvdWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiBib2xkOyI+SEFMIFBXUiA8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+dXBkYXRlPC9zcGFuPjwvbGk+PHVsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiPkFkZCBuZXcgZGVmaW5lIFBXUl9XQUtFVVBfUElOMjwvc3Bhbj48L2xpPjxsaSBzdHlsZT0ibWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyBjb2xvcjogYmxhY2s7IiBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiPkFkZCBuZXcgQVBJIHRvIENvbnRyb2wvR2V0IDwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiPlZPUyZuYnNwO2JpdHMgb2YgQ1IgcmVnaXN0ZXI8L3NwYW4+PC9saT48dWw+PGxpPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+SEFMX1BXUl9IQUxfUFdSRXhfQ29udHJvbFZvbHRhZ2VTY2FsaW5nKCk8L3NwYW4+PC9saT48bGk+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij5IQUxfUFdSRXhfR2V0Vm9sdGFnZVJhbmdlKCk8L3NwYW4+PC9saT48L3VsPjxsaT48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OywmcXVvdDtzYW5zLXNlcmlmJnF1b3Q7OyIgbGFuZz0iRU4tVVMiPl9fSEFMX1BXUl88L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTFwdDsgZm9udC1mYW1pbHk6ICZxdW90O0NhbGlicmkmcXVvdDssJnF1b3Q7c2Fucy1zZXJpZiZxdW90OzsgY29sb3I6IGJsYWNrOyIgbGFuZz0iRU4tVVMiPiBWT0xUQUdFU0NBTElOR19DT05GSUc8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssJnF1b3Q7c2Fucy1zZXJpZiZxdW90OzsiIGxhbmc9IkVOLVVTIj4oKTogSW1wbGVtZW50IHdvcmthcm91bmQgdG8gY292ZXIgVk9TIGxpbWl0YXRpb24gZGVsYXkgd2hlbiBQTEwgaXMgZW5hYmxlZCBhZnRlciBzZXR0aW5nIHRoZSBWT1MgY29uZmlndXJhdGlvbjwvc3Bhbj48c3BhbiBzdHlsZT0iYmFja2dyb3VuZDogcmdiKDI1MiwgMjUyLCAyNTIpIG5vbmUgcmVwZWF0IHNjcm9sbCAwJSA1MCU7IC1tb3otYmFja2dyb3VuZC1jbGlwOiAtbW96LWluaXRpYWw7IC1tb3otYmFja2dyb3VuZC1vcmlnaW46IC1tb3otaW5pdGlhbDsgLW1vei1iYWNrZ3JvdW5kLWlubGluZS1wb2xpY3k6IC1tb3otaW5pdGlhbDsgZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7SGVsdmV0aWNhJnF1b3Q7LCZxdW90O3NhbnMtc2VyaWYmcXVvdDs7IGNvbG9yOiByZ2IoMiwgMywgMik7IiBsYW5nPSJFTi1VUyI+PHNwYW4gc3R5bGU9InRleHQtYWxpZ246IHN0YXJ0OyBmbG9hdDogbm9uZTsgd29yZC1zcGFjaW5nOiAwcHg7Ij4gPC9zcGFuPjwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiPjwvc3Bhbj48L2xpPjwvdWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiBib2xkOyI+SEFMIEdQSU8gPC9zcGFuPjwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiPnVwZGF0ZTwvc3Bhbj48L2xpPjx1bD48bGkgc3R5bGU9Im1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsgY29sb3I6IGJsYWNrOyIgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7IiBsYW5nPSJFTi1VUyI+QWRkIHRoZSAKK2ZvbGxvd2luZyBuZXcgIG1hY3JvcyBmb3IgUExMJm5ic3A7c291cmNlIGFuZCBQTExNJm5ic3A7c2VsZWN0aW9uIDo8bzpwPjwvbzpwPjwvc3Bhbj48L2xpPjx1bD48bGkgc3R5bGU9ImZvbnQtc3R5bGU6IGl0YWxpYzsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyBjb2xvcjogYmxhY2s7IiBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiIGxhbmc9IkVOLVVTIj5fX0hBTF9SQ0NfUExMX1BMTFNPVVJDRV9DT05GSUcoKTxvOnA+PC9vOnA+PC9zcGFuPjwvbGk+PC91bD48dWw+PGxpIHN0eWxlPSJmb250LXN0eWxlOiBpdGFsaWM7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsgY29sb3I6IGJsYWNrOyIgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7IiBsYW5nPSJFTi1VUyI+X19IQUxfUkNDX1BMTF9QTExNX0NPTkZJRygpPC9zcGFuPjwvbGk+PC91bD48bGkgc3R5bGU9ImZvbnQtc3R5bGU6IGl0YWxpYzsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyBjb2xvcjogYmxhY2s7IiBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiIGxhbmc9IkVOLVVTIj5NYWNyb3MgcmVuYW1lOjwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiIGxhbmc9IkVOLVVTIj48L3NwYW4+PC9saT48dWw+PGxpIHN0eWxlPSJtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7IGNvbG9yOiBibGFjazsiIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LCZxdW90O3NhbnMtc2VyaWYmcXVvdDs7Ij5IQUxfUkNDX09UR0hTX0ZPUkNFX1JFU0VUKCkgYnkmbmJzcDs8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssJnF1b3Q7c2Fucy1zZXJpZiZxdW90OzsiPkhBTF9SQ0NfVVNCX09UR19IU19GT1JDRV9SRVNFVDwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OywmcXVvdDtzYW5zLXNlcmlmJnF1b3Q7OyI+KCk8L3NwYW4+PC9saT48bGkgc3R5bGU9Im1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsgY29sb3I6IGJsYWNrOyIgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssJnF1b3Q7c2Fucy1zZXJpZiZxdW90OzsiPkhBTF9SQ0NfT1RHSFNfUkVMRUFTRV9SRVNFVCgpIGJ5Jm5ic3A7PC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LCZxdW90O3NhbnMtc2VyaWYmcXVvdDs7Ij5IQUxfUkNDX1VTQl9PVEdfSFNfUkVMRUFTRV9SRVNFVDwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OywmcXVvdDtzYW5zLXNlcmlmJnF1b3Q7OyI+KCk8L3NwYW4+PC9saT48bGkgc3R5bGU9Im1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsgY29sb3I6IGJsYWNrOyIgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssJnF1b3Q7c2Fucy1zZXJpZiZxdW90OzsiPkhBTF9SQ0NfT1RHSFNfQ0xLX1NMRUVQX0VOQUJMRSgpIGJ5Jm5ic3A7PC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LCZxdW90O3NhbnMtc2VyaWYmcXVvdDs7Ij5IQUxfUkNDX1VTQl9PVEdfSFNfQ0xLX1NMRUVQX0VOQUJMRTwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OywmcXVvdDtzYW5zLXNlcmlmJnF1b3Q7OyI+KCk8L3NwYW4+PC9saT48bGkgc3R5bGU9Im1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsgY29sb3I6IGJsYWNrOyIgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssJnF1b3Q7c2Fucy1zZXJpZiZxdW90OzsiPkhBTF9SQ0NfT1RHSFNfQ0xLX1NMRUVQX0RJU0FCTEUoKSBieSZuYnNwOzwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OywmcXVvdDtzYW5zLXNlcmlmJnF1b3Q7OyI+SEFMX1JDQ19VU0JfT1RHX0hTX0NMS19TTEVFUF9ESVNBQkxFPC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LCZxdW90O3NhbnMtc2VyaWYmcXVvdDs7Ij4oKTwvc3Bhbj48L2xpPjxsaSBzdHlsZT0ibWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyBjb2xvcjogYmxhY2s7IiBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OywmcXVvdDtzYW5zLXNlcmlmJnF1b3Q7OyI+SEFMX1JDQ19PVEdIU1VMUElfQ0xLX1NMRUVQX0VOQUJMRSgpIGJ5Jm5ic3A7PC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LCZxdW90O3NhbnMtc2VyaWYmcXVvdDs7Ij5IQUxfUkNDX1VTQl9PVEdfSFNfVUxQSV9DTEtfU0xFRVBfRU5BQkxFPC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LCZxdW90O3NhbnMtc2VyaWYmcXVvdDs7Ij4oKTwvc3Bhbj48L2xpPjxsaSBzdHlsZT0ibWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyBjb2xvcjogYmxhY2s7IiBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OywmcXVvdDtzYW5zLXNlcmlmJnF1b3Q7OyI+SEFMX1JDQ19PVEdIU1VMUElfQ0xLX1NMRUVQX0RJU0FCTEUoKSBieSZuYnNwOzwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OywmcXVvdDtzYW5zLXNlcmlmJnF1b3Q7OyI+SEFMX1JDQ19VU0JfT1RHX0hTX1VMUElfQ0xLX1NMRUVQX0RJU0FCTEU8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssJnF1b3Q7c2Fucy1zZXJpZiZxdW90OzsiPigpPC9zcGFuPjwvbGk+PC91bD48bGkgc3R5bGU9Im1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsgY29sb3I6IGJsYWNrOyBmb250LWZhbWlseTogVmVyZGFuYTsiIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7Ij5BZGQmbmJzcDtfX0hBTF9SQ0NfU1lTQ0xLX0NPTkZJRygpIDwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyI+bmV3IG1hY3JvPC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7Ij4gdG8gY29uZmlndXJlIHRoZSBzeXN0ZW0gY2xvY2sgc291cmNlICg8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsiPlNZU0NMSzwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyI+KTwvc3Bhbj48L2xpPjxsaSBzdHlsZT0ibWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyBjb2xvcjogYmxhY2s7IiBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OywmcXVvdDtzYW5zLXNlcmlmJnF1b3Q7OyI+X19IQUxfUkNDX0dFVF9TWVNDTEtfU09VUkNFKCkgdXBkYXRlczo8L3NwYW4+PC9saT48dWw+PGxpIHN0eWxlPSJtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7IGNvbG9yOiBibGFjazsiIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LCZxdW90O3NhbnMtc2VyaWYmcXVvdDs7Ij5BZGQgbmV3IFJDQyBMaXRlcmFsczo8L3NwYW4+PC9saT48dWw+PGxpIHN0eWxlPSJtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7IGNvbG9yOiBibGFjazsiIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LCZxdW90O3NhbnMtc2VyaWYmcXVvdDs7Ij5SQ0NfU1lTQ0xLU09VUkNFX1NUQVRVU19IU0k8L3NwYW4+PC9saT48bGkgc3R5bGU9Im1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsgY29sb3I6IGJsYWNrOyIgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssJnF1b3Q7c2Fucy1zZXJpZiZxdW90OzsiPlJDQ19TWVNDTEtTT1VSQ0VfU1RBVFVTX0hTRTwvc3Bhbj48L2xpPjxsaSBzdHlsZT0ibWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyBjb2xvcjogYmxhY2s7IiBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OywmcXVvdDtzYW5zLXNlcmlmJnF1b3Q7OyI+UkNDX1NZU0NMS1NPVVJDRV9TVEFUVVNfUExMQ0xLPC9zcGFuPjwvbGk+PGxpIHN0eWxlPSJtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7IGNvbG9yOiBibGFjazsiIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LCZxdW90O3NhbnMtc2VyaWYmcXVvdDs7Ij5SQ0NfU1lTQ0xLU09VUkNFX1NUQVRVU19QTExSQ0xLPC9zcGFuPjwvbGk+PC91bD48L3VsPjx1bD48bGkgc3R5bGU9Im1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsgY29sb3I6IGJsYWNrOyIgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssJnF1b3Q7c2Fucy1zZXJpZiZxdW90OzsiPiZuYnNwOzwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OywmcXVvdDtzYW5zLXNlcmlmJnF1b3Q7OyI+VXBkYXRlIG1hY3JvIGRlc2NyaXB0aW9uIHRvIHJlZmVyIHRvIHRoZSBsaXRlcmFscyBhYm92ZTwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OywmcXVvdDtzYW5zLXNlcmlmJnF1b3Q7OyI+IDwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6IHJnYig3MSwgNzEsIDcxKTsgZm9udC1mYW1pbHk6IGhlbHZldGljYSxhcmlhbCxzYW5zLXNlcmlmOyBmb250LXNpemU6IDI2cHg7IGZvbnQtc3R5bGU6IG5vcm1hbDsgZm9udC12YXJpYW50OiBub3JtYWw7IGZvbnQtd2VpZ2h0OiBib2xkOyBsZXR0ZXItc3BhY2luZzogbm9ybWFsOyBsaW5lLWhlaWdodDogMjBweDsgdGV4dC1hbGlnbjogc3RhcnQ7IHRleHQtaW5kZW50OiAwcHg7IHRleHQtdHJhbnNmb3JtOiBub25lOyB3aGl0ZS1zcGFjZTogbm9ybWFsOyB3b3JkLXNwYWNpbmc6IDBweDsgZGlzcGxheTogaW5saW5lICEgaW1wb3J0YW50OyBmbG9hdDogbm9uZTsgYmFja2dyb3VuZC1jb2xvcjogcmdiKDI1NSwgMjU1LCAyNTUpOyI+PC9zcGFuPjwvbGk+PC91bD48L3VsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiPjxzcGFuIHN0eWxlPSJmb250LXdlaWdodDogYm9sZDsiPkhBTCBQV1IgPC9zcGFuPjwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiPnVwZGF0ZTwvc3Bhbj48L2xpPjx1bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij5BZGQgbmV3IGRlZmluZSBQV1JfV0FLRVVQX1BJTjI8L3NwYW4+PC9saT48bGkgc3R5bGU9Im1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsgY29sb3I6IGJsYWNrOyIgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij5BZGQgbmV3IEFQSSB0byBDb250cm9sL0dldCA8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij5WT1MmbmJzcDtiaXRzIG9mIENSIHJlZ2lzdGVyPC9zcGFuPjwvbGk+PHVsPjxsaT48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiPkhBTF9QV1JfSEFMX1BXUkV4X0NvbnRyb2xWb2x0YWdlU2NhbGluZygpPC9zcGFuPjwvbGk+PGxpPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+SEFMX1BXUkV4X0dldFZvbHRhZ2VSYW5nZSgpPC9zcGFuPjwvbGk+PC91bD48bGk+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssJnF1b3Q7c2Fucy1zZXJpZiZxdW90OzsiIGxhbmc9IkVOLVVTIj5fX0hBTF9QV1JfPC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDExcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtDYWxpYnJpJnF1b3Q7LCZxdW90O3NhbnMtc2VyaWYmcXVvdDs7IGNvbG9yOiBibGFjazsiIGxhbmc9IkVOLVVTIj4gVk9MVEFHRVNDQUxJTkdfQ09ORklHPC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LCZxdW90O3NhbnMtc2VyaWYmcXVvdDs7IiBsYW5nPSJFTi1VUyI+KCk6IEltcGxlbWVudCB3b3JrYXJvdW5kIHRvIGNvdmVyIFZPUyBsaW1pdGF0aW9uIGRlbGF5IHdoZW4gUExMIGlzIGVuYWJsZWQgYWZ0ZXIgc2V0dGluZyB0aGUgVk9TIGNvbmZpZ3VyYXRpb248L3NwYW4+PHNwYW4gc3R5bGU9ImJhY2tncm91bmQ6IHJnYigyNTIsIDI1MiwgMjUyKSBub25lIHJlcGVhdCBzY3JvbGwgMCUgNTAlOyAtbW96LWJhY2tncm91bmQtY2xpcDogaW5pdGlhbDsgLW1vei1iYWNrZ3JvdW5kLW9yaWdpbjogaW5pdGlhbDsgLW1vei1iYWNrZ3JvdW5kLWlubGluZS1wb2xpY3k6IGluaXRpYWw7IGZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O0hlbHZldGljYSZxdW90OywmcXVvdDtzYW5zLXNlcmlmJnF1b3Q7OyBjb2xvcjogcmdiKDIsIDMsIDIpOyIgbGFuZz0iRU4tVVMiPjxzcGFuIHN0eWxlPSJ0ZXh0LWFsaWduOiBzdGFydDsgZmxvYXQ6IG5vbmU7IHdvcmQtc3BhY2luZzogMHB4OyI+IDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij48L3NwYW4+PC9saT48L3VsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiPjxzcGFuIHN0eWxlPSJmb250LXdlaWdodDogYm9sZDsiPkhBTCBHUElPIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij51cGRhdGU8L3NwYW4+PC9saT48dWw+PGxpIHN0eWxlPSJtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7IGNvbG9yOiBibGFjazsiIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyIgbGFuZz0iRU4tVVMiPkFkZCB0aGUgCiBuZXcgQWx0ZXJuYXRlIGZ1bmN0aW9ucyBsaXRlcmFscyByZWxhdGVkIHRvIHJlbWFwIGZvciA8c3BhbiBzdHlsZT0iZm9udC1zdHlsZTogaXRhbGljOyBmb250LXdlaWdodDogYm9sZDsiPlNQSSwgVVNBUlQsIEkyQywgU1BESUZSWCwgQ0VDIGFuZCAKIFFTUEk8L3NwYW4+PC9zcGFuPjwvbGk+PGxpIHN0eWxlPSJtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7IGNvbG9yOiBibGFjazsiIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDExcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtDYWxpYnJpJnF1b3Q7LCZxdW90O3NhbnMtc2VyaWYmcXVvdDs7IGNvbG9yOiBibGFjazsiIGxhbmc9IkVOLVVTIj48c21hbGw+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiBWZXJkYW5hOyI+SEFMX0dQSU9fRGVJbml0KCk6CiBVcGRhdGUmbmJzcDt0byBjaGVjayBpZiBHUElPIFBpbiB4IGlzIGFscmVhZHkgdXNlZCBpbiBFWFRJIG1vZGUgb24KQEAgLTIxNDUsNyArMjE3OSw3IEBACiBkdXBsZXggbWFuYWdlbWVudCBhbmQgYWRkIHRoZSBhdHRyaWJ1dGUgX193ZWFrIGluIHRoZSBHZW5lcmljIEFQSTwvc3Bhbj48L2xpPjx1bD48bGkgc3R5bGU9Im1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsgY29sb3I6IGJsYWNrOyIgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7IiBsYW5nPSJFTi1VUyI+SEFMXzwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiIGxhbmc9IkVOLVVTIj5JMlNfSW5pdCgpLCBIQUxfSTJTX0RNQVBhdXNlKCksJm5ic3A7PC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyIgbGFuZz0iRU4tVVMiPkhBTF9JMlNfRE1BU3RvcCgpLCZuYnNwOzwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiIGxhbmc9IkVOLVVTIj5IQUxfSTJTX0RNQVJlc3VtZSgpLCZuYnNwOzwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiIGxhbmc9IkVOLVVTIj5IQUxfSTJTX0lSUUhhbmRsZSgpPC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyIgbGFuZz0iRU4tVVMiPiA8bzpwPjwvbzpwPjwvc3Bhbj48L2xpPjwvdWw+PGxpIHN0eWxlPSJtYXJnaW46IDQuNXB0IDBpbjsgZm9udC1mYW1pbHk6ICdUaW1lcyBOZXcgUm9tYW4nLHNlcmlmOyBjb2xvcjogYmxhY2s7IGZvbnQtc2l6ZTogMTJwdDsiIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyBmb250LXNpemU6IDEwcHQ7Ij5Nb3ZlIHRoZSBmb2xsb3dpbmcgc3RhdGljIGZ1bmN0aW9ucyBmcm9tIGdlbmVyaWMgdG8gZXh0ZW5zaW9uIGRyaXZlcjwvc3Bhbj48L2xpPjx1bD48bGkgc3R5bGU9Im1hcmdpbjogNC41cHQgMGluOyBmb250LWZhbWlseTogJ1RpbWVzIE5ldyBSb21hbicsc2VyaWY7IGNvbG9yOiBibGFjazsgZm9udC1zaXplOiAxMnB0OyIgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiBWZXJkYW5hLHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTBwdDsiPiZuYnNwO0kyU19ETUFSeENwbHQoKSBhbmQgSTJTX0RNQVR4Q3BsdCgpPC9zcGFuPjwvbGk+PC91bD48bGkgc3R5bGU9Im1hcmdpbjogNC41cHQgMGluOyBmb250LWZhbWlseTogJ1RpbWVzIE5ldyBSb21hbicsc2VyaWY7IGNvbG9yOiBibGFjazsgZm9udC1zaXplOiAxMnB0OyIgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiBWZXJkYW5hLHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTBwdDsiPlJlbW92ZSBzdGF0aWMgYXR0cmlidXRlIGZyb20gSTJTX1RyYW5zbWl0X0lUKCkgYW5kIEkyU19SZWNlaXZlX0lUKCkgZnVuY3Rpb25zPC9zcGFuPjwvbGk+PGxpIHN0eWxlPSJtYXJnaW46IDQuNXB0IDBpbjsgZm9udC1mYW1pbHk6ICdUaW1lcyBOZXcgUm9tYW4nLHNlcmlmOyBjb2xvcjogYmxhY2s7IGZvbnQtc2l6ZTogMTJwdDsiIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogVmVyZGFuYSxzYW5zLXNlcmlmOyBmb250LXNpemU6IDEwcHQ7Ij5Nb3ZlIEkyU3hFWFQoKSBtYWNybyB0byBleHRlbnNpb24gZmlsZTwvc3Bhbj48L2xpPjxsaSBzdHlsZT0ibWFyZ2luOiA0LjVwdCAwaW47IGZvbnQtZmFtaWx5OiAnVGltZXMgTmV3IFJvbWFuJyxzZXJpZjsgY29sb3I6IGJsYWNrOyBmb250LXNpemU6IDEycHQ7IiBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6IFZlcmRhbmEsc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMHB0OyI+QWRkIEkyU19DTE9DS19QTExSIGFuZCA8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiBWZXJkYW5hLHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTBwdDsiPkkyU19DTE9DS19QTExTUkMgZGVmaW5lcyBmb3IgSTJTIGNsb2NrIHNvdXJjZTwvc3Bhbj48L2xpPjxsaSBzdHlsZT0ibWFyZ2luOiA0LjVwdCAwaW47IGZvbnQtZmFtaWx5OiAnVGltZXMgTmV3IFJvbWFuJyxzZXJpZjsgY29sb3I6IGJsYWNrOyBmb250LXNpemU6IDEycHQ7IiBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6IFZlcmRhbmEsc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMHB0OyI+QWRkIG5ldyBmdW5jdGlvbiBJMlNfR2V0SW5wdXRDbG9jaygpPGJyPjwvc3Bhbj48L2xpPjwvdWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiBib2xkOyI+SEFMIExMIEZNQyA8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+dXBkYXRlPC9zcGFuPjwvbGk+PHVsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiPkFkZCBXcml0ZUZpZm8gYW5kIFBhZ2VTaXplIGZpZWxkcyBpbiB0aGUgRk1DX05PUlNSQU1fSW5pdFR5cGVEZWYgc3RydWN0dXJlPC9zcGFuPjwvbGk+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+QWRkCiBGTUNfUEFHRV9TSVpFX05PTkUsIEZNQ19QQUdFX1NJWkVfMTI4LCBGTUNfUEFHRV9TSVpFXzI1NiwKIEZNQ19QQUdFX1NJWkVfMTAyNCwgRk1DX1dSSVRFX0ZJRk9fRElTQUJMRSwgRk1DX1dSSVRFX0ZJRk9fRU5BQkxFCi1kZWZpbmVzPC9zcGFuPjwvbGk+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+VXBkYXRlIEZNQ19OT1JTUkFNX0luaXQoKSwgRk1DX05PUlNSQU1fRGVJbml0KCkgYW5kJm5ic3A7Rk1DX05PUlNSQU1fRXh0ZW5kZWRfVGltaW5nX0luaXQoKSZuYnNwO2Z1bmN0aW9uczwvc3Bhbj48L2xpPjwvdWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiBib2xkOyI+SEFMIExMIFVTQiA8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+dXBkYXRlPC9zcGFuPjwvbGk+PHVsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiPlVwZGF0ZSBVU0JfT1RHX0NmZ1R5cGVEZWYgc3RydWN0dXJlIHRvIHN1cHBvcnQgTFBNLCA8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij5scG1fZW5hYmxlIDwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiPmZpZWxkIGFkZGVkPC9zcGFuPjwvbGk+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+VXBkYXRlIFVTQl9Ib3N0SW5pdCgpIGFuZCBVU0JfRGV2SW5pdCgpIGZ1bmN0aW9ucyB0byBzdXBwb3J0IHRoZSBWQlVTIFNlbnNpbmcgQiBhY3RpdmF0aW9uPC9zcGFuPjwvbGk+PC91bD48L3VsPjxoMyBzdHlsZT0iYmFja2dyb3VuZDogcmdiKDUxLCAxMDIsIDI1NSkgbm9uZSByZXBlYXQgc2Nyb2xsIDAlIDUwJTsgLW1vei1iYWNrZ3JvdW5kLWNsaXA6IC1tb3otaW5pdGlhbDsgLW1vei1iYWNrZ3JvdW5kLW9yaWdpbjogLW1vei1pbml0aWFsOyAtbW96LWJhY2tncm91bmQtaW5saW5lLXBvbGljeTogLW1vei1pbml0aWFsOyBtYXJnaW4tcmlnaHQ6IDUwMHB0OyB3aWR0aDogMjAycHg7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogQXJpYWw7IGNvbG9yOiB3aGl0ZTsiPlYxLjIuMCAvIDI2LURlY2VtYmVyLTIwMTQ8L3NwYW4+PC9oMz4KK2RlZmluZXM8L3NwYW4+PC9saT48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij5VcGRhdGUgRk1DX05PUlNSQU1fSW5pdCgpLCBGTUNfTk9SU1JBTV9EZUluaXQoKSBhbmQmbmJzcDtGTUNfTk9SU1JBTV9FeHRlbmRlZF9UaW1pbmdfSW5pdCgpJm5ic3A7ZnVuY3Rpb25zPC9zcGFuPjwvbGk+PC91bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij48c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6IGJvbGQ7Ij5IQUwgTEwgVVNCIDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij51cGRhdGU8L3NwYW4+PC9saT48dWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+VXBkYXRlIFVTQl9PVEdfQ2ZnVHlwZURlZiBzdHJ1Y3R1cmUgdG8gc3VwcG9ydCBMUE0sIDwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdWZXJkYW5hJywnc2Fucy1zZXJpZic7IGZvbnQtc2l6ZTogMTBwdDsiPmxwbV9lbmFibGUgPC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogJ1ZlcmRhbmEnLCdzYW5zLXNlcmlmJzsgZm9udC1zaXplOiAxMHB0OyI+ZmllbGQgYWRkZWQ8L3NwYW4+PC9saT48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnVmVyZGFuYScsJ3NhbnMtc2VyaWYnOyBmb250LXNpemU6IDEwcHQ7Ij5VcGRhdGUgVVNCX0hvc3RJbml0KCkgYW5kIFVTQl9EZXZJbml0KCkgZnVuY3Rpb25zIHRvIHN1cHBvcnQgdGhlIFZCVVMgU2Vuc2luZyBCIGFjdGl2YXRpb248L3NwYW4+PC9saT48L3VsPjwvdWw+PGgzIHN0eWxlPSJiYWNrZ3JvdW5kOiByZ2IoNTEsIDEwMiwgMjU1KSBub25lIHJlcGVhdCBzY3JvbGwgMCUgNTAlOyAtbW96LWJhY2tncm91bmQtY2xpcDogaW5pdGlhbDsgLW1vei1iYWNrZ3JvdW5kLW9yaWdpbjogaW5pdGlhbDsgLW1vei1iYWNrZ3JvdW5kLWlubGluZS1wb2xpY3k6IGluaXRpYWw7IG1hcmdpbi1yaWdodDogNTAwcHQ7IHdpZHRoOiAyMDJweDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBBcmlhbDsgY29sb3I6IHdoaXRlOyI+VjEuMi4wIC8gMjYtRGVjZW1iZXItMjAxNDwvc3Bhbj48L2gzPgogCiAKICAgICAgICAgICAgIApAQCAtMjM2NCw3ICsyMzk4LDcgQEAKICAgICAgICAgICAgIAogCiAgICAgICAgICAgICAKLSAgICAgICAgICAgIDxoMyBzdHlsZT0iYmFja2dyb3VuZDogcmdiKDUxLCAxMDIsIDI1NSkgbm9uZSByZXBlYXQgc2Nyb2xsIDAlIDUwJTsgLW1vei1iYWNrZ3JvdW5kLWNsaXA6IC1tb3otaW5pdGlhbDsgLW1vei1iYWNrZ3JvdW5kLW9yaWdpbjogLW1vei1pbml0aWFsOyAtbW96LWJhY2tncm91bmQtaW5saW5lLXBvbGljeTogLW1vei1pbml0aWFsOyBtYXJnaW4tcmlnaHQ6IDUwMHB0OyB3aWR0aDogMTgwcHg7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogQXJpYWw7IGNvbG9yOiB3aGl0ZTsiPlYxLjEuMCAvIDE5LUp1bmUtMjAxNDwvc3Bhbj48L2gzPgorICAgICAgICAgICAgPGgzIHN0eWxlPSJiYWNrZ3JvdW5kOiByZ2IoNTEsIDEwMiwgMjU1KSBub25lIHJlcGVhdCBzY3JvbGwgMCUgNTAlOyAtbW96LWJhY2tncm91bmQtY2xpcDogaW5pdGlhbDsgLW1vei1iYWNrZ3JvdW5kLW9yaWdpbjogaW5pdGlhbDsgLW1vei1iYWNrZ3JvdW5kLWlubGluZS1wb2xpY3k6IGluaXRpYWw7IG1hcmdpbi1yaWdodDogNTAwcHQ7IHdpZHRoOiAxODBweDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBBcmlhbDsgY29sb3I6IHdoaXRlOyI+VjEuMS4wIC8gMTktSnVuZS0yMDE0PC9zcGFuPjwvaDM+CiAKICAgICAgICAgICAgIDxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW46IDQuNXB0IDBjbSA0LjVwdCAxOHB0OyI+PGI+PHU+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssJnF1b3Q7c2Fucy1zZXJpZiZxdW90OzsgY29sb3I6IGJsYWNrOyI+TWFpbiBDaGFuZ2VzPC9zcGFuPjwvdT48L2I+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6ICZxdW90O1RpbWVzIE5ldyBSb21hbiZxdW90OywmcXVvdDtzZXJpZiZxdW90OzsiPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4KIApAQCAtMjg2OSw3ICsyOTAzLDcgQEAKICAgICAgICAgICAgICAgPC91bD4KIAogPC91bD4KLTxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LCZxdW90O3NhbnMtc2VyaWYmcXVvdDs7Ij48c3BhbiBzdHlsZT0iZm9udC1zdHlsZTogaXRhbGljOyI+PC9zcGFuPjwvc3Bhbj48aDMgc3R5bGU9ImJhY2tncm91bmQ6IHJnYig1MSwgMTAyLCAyNTUpIG5vbmUgcmVwZWF0IHNjcm9sbCAwJSA1MCU7IC1tb3otYmFja2dyb3VuZC1jbGlwOiAtbW96LWluaXRpYWw7IC1tb3otYmFja2dyb3VuZC1vcmlnaW46IC1tb3otaW5pdGlhbDsgLW1vei1iYWNrZ3JvdW5kLWlubGluZS1wb2xpY3k6IC1tb3otaW5pdGlhbDsgbWFyZ2luLXJpZ2h0OiA1MDBwdDsgd2lkdGg6IDE4MHB4OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IEFyaWFsOyBjb2xvcjogd2hpdGU7Ij5WMS4wLjAgLyAxOC1GZWJydWFyeS0yMDE0PC9zcGFuPjwvaDM+Cis8c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OywmcXVvdDtzYW5zLXNlcmlmJnF1b3Q7OyI+PHNwYW4gc3R5bGU9ImZvbnQtc3R5bGU6IGl0YWxpYzsiPjwvc3Bhbj48L3NwYW4+PGgzIHN0eWxlPSJiYWNrZ3JvdW5kOiByZ2IoNTEsIDEwMiwgMjU1KSBub25lIHJlcGVhdCBzY3JvbGwgMCUgNTAlOyAtbW96LWJhY2tncm91bmQtY2xpcDogaW5pdGlhbDsgLW1vei1iYWNrZ3JvdW5kLW9yaWdpbjogaW5pdGlhbDsgLW1vei1iYWNrZ3JvdW5kLWlubGluZS1wb2xpY3k6IGluaXRpYWw7IG1hcmdpbi1yaWdodDogNTAwcHQ7IHdpZHRoOiAxODBweDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBBcmlhbDsgY29sb3I6IHdoaXRlOyI+VjEuMC4wIC8gMTgtRmVicnVhcnktMjAxNDwvc3Bhbj48L2gzPgogCiAgICAgICAgICAgICA8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luOiA0LjVwdCAwY20gNC41cHQgMThwdDsiPjxiPjx1PjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LCZxdW90O3NhbnMtc2VyaWYmcXVvdDs7IGNvbG9yOiBibGFjazsiPk1haW4gQ2hhbmdlczwvc3Bhbj48L3U+PC9iPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEycHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtUaW1lcyBOZXcgUm9tYW4mcXVvdDssJnF1b3Q7c2VyaWYmcXVvdDs7Ij48bzpwPjwvbzpwPjwvc3Bhbj48L3A+CiAKQEAgLTI4NzksNyArMjkxMyw3IEBACiAgICAgICAgICAgICAKICAgICAgICAgICAgIAogICAgICAgICAgICAgPHVsIHN0eWxlPSJtYXJnaW4tdG9wOiAwY207IiB0eXBlPSJzcXVhcmUiPgotICAgICAgICAgICAgICA8bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmE7Ij5GaXJzdCBvZmZpY2lhbCByZWxlYXNlPC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LCZxdW90O3NhbnMtc2VyaWYmcXVvdDs7Ij48L3NwYW4+PC9saT48L3VsPjxoMiBzdHlsZT0iYmFja2dyb3VuZDogcmdiKDUxLCAxMDIsIDI1NSkgbm9uZSByZXBlYXQgc2Nyb2xsIDAlIDUwJTsgLW1vei1iYWNrZ3JvdW5kLWNsaXA6IC1tb3otaW5pdGlhbDsgLW1vei1iYWNrZ3JvdW5kLW9yaWdpbjogLW1vei1pbml0aWFsOyAtbW96LWJhY2tncm91bmQtaW5saW5lLXBvbGljeTogLW1vei1pbml0aWFsOyI+PGEgbmFtZT0iTGljZW5zZSI+PC9hPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEycHQ7IGNvbG9yOiB3aGl0ZTsiPkxpY2Vuc2U8bzpwPjwvbzpwPjwvc3Bhbj48L2gyPgorICAgICAgICAgICAgICA8bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmE7Ij5GaXJzdCBvZmZpY2lhbCByZWxlYXNlPC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LCZxdW90O3NhbnMtc2VyaWYmcXVvdDs7Ij48L3NwYW4+PC9saT48L3VsPjxoMiBzdHlsZT0iYmFja2dyb3VuZDogcmdiKDUxLCAxMDIsIDI1NSkgbm9uZSByZXBlYXQgc2Nyb2xsIDAlIDUwJTsgLW1vei1iYWNrZ3JvdW5kLWNsaXA6IGluaXRpYWw7IC1tb3otYmFja2dyb3VuZC1vcmlnaW46IGluaXRpYWw7IC1tb3otYmFja2dyb3VuZC1pbmxpbmUtcG9saWN5OiBpbml0aWFsOyI+PGEgbmFtZT0iTGljZW5zZSI+PC9hPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEycHQ7IGNvbG9yOiB3aGl0ZTsiPkxpY2Vuc2U8bzpwPjwvbzpwPjwvc3Bhbj48L2gyPgogICAgICAgICAgICAgPGRpdiBzdHlsZT0idGV4dC1hbGlnbjoganVzdGlmeTsiPgogICAgICAgICAgICAgPGRpdiBzdHlsZT0idGV4dC1hbGlnbjoganVzdGlmeTsiPjxmb250IHNpemU9Ii0xIj48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssJnF1b3Q7c2Fucy1zZXJpZiZxdW90OzsiPgogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmNHh4X2hhbC5jIGIvU3JjL3N0bTMyZjR4eF9oYWwuYwppbmRleCA2YTc5MTBkLi4xNjM1MTIzIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmNHh4X2hhbC5jCisrKyBiL1NyYy9zdG0zMmY0eHhfaGFsLmMKQEAgLTUwLDExICs1MCwxMSBAQAogICAqIEB7CiAgICovCiAvKioKLSAgKiBAYnJpZWYgU1RNMzJGNHh4IEhBTCBEcml2ZXIgdmVyc2lvbiBudW1iZXIgVjEuNy4xMAorICAqIEBicmllZiBTVE0zMkY0eHggSEFMIERyaXZlciB2ZXJzaW9uIG51bWJlciBWMS43LjExCiAgICovCiAjZGVmaW5lIF9fU1RNMzJGNHh4X0hBTF9WRVJTSU9OX01BSU4gICAoMHgwMVUpIC8qITwgWzMxOjI0XSBtYWluIHZlcnNpb24gKi8KICNkZWZpbmUgX19TVE0zMkY0eHhfSEFMX1ZFUlNJT05fU1VCMSAgICgweDA3VSkgLyohPCBbMjM6MTZdIHN1YjEgdmVyc2lvbiAqLwotI2RlZmluZSBfX1NUTTMyRjR4eF9IQUxfVkVSU0lPTl9TVUIyICAgKDB4MEFVKSAvKiE8IFsxNTo4XSAgc3ViMiB2ZXJzaW9uICovCisjZGVmaW5lIF9fU1RNMzJGNHh4X0hBTF9WRVJTSU9OX1NVQjIgICAoMHgwQlUpIC8qITwgWzE1OjhdICBzdWIyIHZlcnNpb24gKi8KICNkZWZpbmUgX19TVE0zMkY0eHhfSEFMX1ZFUlNJT05fUkMgICAgICgweDAwVSkgLyohPCBbNzowXSAgcmVsZWFzZSBjYW5kaWRhdGUgKi8gCiAjZGVmaW5lIF9fU1RNMzJGNHh4X0hBTF9WRVJTSU9OICAgICAgICAgKChfX1NUTTMyRjR4eF9IQUxfVkVSU0lPTl9NQUlOIDw8IDI0VSlcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfChfX1NUTTMyRjR4eF9IQUxfVkVSU0lPTl9TVUIxIDw8IDE2VSlcCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmNHh4X2hhbF9hZGMuYyBiL1NyYy9zdG0zMmY0eHhfaGFsX2FkYy5jCmluZGV4IGUyMThmNzYuLjg3YzE0NDUgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmY0eHhfaGFsX2FkYy5jCisrKyBiL1NyYy9zdG0zMmY0eHhfaGFsX2FkYy5jCkBAIC0zLDcgKzMsNyBAQAogICAqIEBmaWxlICAgIHN0bTMyZjR4eF9oYWxfYWRjLmMKICAgKiBAYXV0aG9yICBNQ0QgQXBwbGljYXRpb24gVGVhbQogICAqIEBicmllZiAgIFRoaXMgZmlsZSBwcm92aWRlcyBmaXJtd2FyZSBmdW5jdGlvbnMgdG8gbWFuYWdlIHRoZSBmb2xsb3dpbmcgCi0gICogICAgICAgICAgZnVuY3Rpb25hbGl0aWVzIG9mIHRoZSBBbmFsb2cgdG8gRGlnaXRhbCBDb252ZXJ0b3IgKEFEQykgcGVyaXBoZXJhbDoKKyAgKiAgICAgICAgICBmdW5jdGlvbmFsaXRpZXMgb2YgdGhlIEFuYWxvZyB0byBEaWdpdGFsIENvbnZlcnRlciAoQURDKSBwZXJpcGhlcmFsOgogICAqICAgICAgICAgICArIEluaXRpYWxpemF0aW9uIGFuZCBkZS1pbml0aWFsaXphdGlvbiBmdW5jdGlvbnMKICAgKiAgICAgICAgICAgKyBJTyBvcGVyYXRpb24gZnVuY3Rpb25zCiAgICogICAgICAgICAgICsgU3RhdGUgYW5kIGVycm9ycyBmdW5jdGlvbnMKQEAgLTgxNCw2ICs4MTQsMTQgQEAKICAgICAgIH0KICAgICB9CiAgIH0KKyAgZWxzZQorICB7CisgICAgLyogVXBkYXRlIEFEQyBzdGF0ZSBtYWNoaW5lIHRvIGVycm9yICovCisgICAgU0VUX0JJVChoYWRjLT5TdGF0ZSwgSEFMX0FEQ19TVEFURV9FUlJPUl9JTlRFUk5BTCk7CisKKyAgICAvKiBTZXQgQURDIGVycm9yIGNvZGUgdG8gQURDIElQIGludGVybmFsIGVycm9yICovCisgICAgU0VUX0JJVChoYWRjLT5FcnJvckNvZGUsIEhBTF9BRENfRVJST1JfSU5URVJOQUwpOworICB9CiAgIAogICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCiAgIHJldHVybiBIQUxfT0s7CkBAIC05MDUsMTMgKzkxMywxNyBAQAogICAgIHsKICAgICAgIGlmKChUaW1lb3V0ID09IDBVKSB8fCAoKEhBTF9HZXRUaWNrKCkgLSB0aWNrc3RhcnQgKSA+IFRpbWVvdXQpKQogICAgICAgewotICAgICAgICAvKiBVcGRhdGUgQURDIHN0YXRlIG1hY2hpbmUgdG8gdGltZW91dCAqLwotICAgICAgICBTRVRfQklUKGhhZGMtPlN0YXRlLCBIQUxfQURDX1NUQVRFX1RJTUVPVVQpOwotICAgICAgICAKLSAgICAgICAgLyogUHJvY2VzcyB1bmxvY2tlZCAqLwotICAgICAgICBfX0hBTF9VTkxPQ0soaGFkYyk7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CisgICAgICAgIC8qIE5ldyBjaGVjayB0byBhdm9pZCBmYWxzZSB0aW1lb3V0IGRldGVjdGlvbiBpbiBjYXNlIG9mIHByZWVtcHRpb24gKi8KKyAgICAgICAgaWYoIShfX0hBTF9BRENfR0VUX0ZMQUcoaGFkYywgQURDX0ZMQUdfRU9DKSkpCisgICAgICAgIHsKKyAgICAgICAgICAvKiBVcGRhdGUgQURDIHN0YXRlIG1hY2hpbmUgdG8gdGltZW91dCAqLworICAgICAgICAgIFNFVF9CSVQoaGFkYy0+U3RhdGUsIEhBTF9BRENfU1RBVEVfVElNRU9VVCk7CisgICAgICAgICAgCisgICAgICAgICAgLyogUHJvY2VzcyB1bmxvY2tlZCAqLworICAgICAgICAgIF9fSEFMX1VOTE9DSyhoYWRjKTsKKyAgICAgICAgICAKKyAgICAgICAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CisgICAgICAgIH0KICAgICAgIH0KICAgICB9CiAgIH0KQEAgLTk3NiwxMyArOTg4LDE3IEBACiAgICAgewogICAgICAgaWYoKFRpbWVvdXQgPT0gMFUpIHx8ICgoSEFMX0dldFRpY2soKSAtIHRpY2tzdGFydCApID4gVGltZW91dCkpCiAgICAgICB7Ci0gICAgICAgIC8qIFVwZGF0ZSBBREMgc3RhdGUgbWFjaGluZSB0byB0aW1lb3V0ICovCi0gICAgICAgIFNFVF9CSVQoaGFkYy0+U3RhdGUsIEhBTF9BRENfU1RBVEVfVElNRU9VVCk7Ci0gICAgICAgIAotICAgICAgICAvKiBQcm9jZXNzIHVubG9ja2VkICovCi0gICAgICAgIF9fSEFMX1VOTE9DSyhoYWRjKTsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiBIQUxfVElNRU9VVDsKKyAgICAgICAgLyogTmV3IGNoZWNrIHRvIGF2b2lkIGZhbHNlIHRpbWVvdXQgZGV0ZWN0aW9uIGluIGNhc2Ugb2YgcHJlZW1wdGlvbiAqLworICAgICAgICBpZighKF9fSEFMX0FEQ19HRVRfRkxBRyhoYWRjLEV2ZW50VHlwZSkpKQorICAgICAgICB7CisgICAgICAgICAgLyogVXBkYXRlIEFEQyBzdGF0ZSBtYWNoaW5lIHRvIHRpbWVvdXQgKi8KKyAgICAgICAgICBTRVRfQklUKGhhZGMtPlN0YXRlLCBIQUxfQURDX1NUQVRFX1RJTUVPVVQpOworICAgICAgICAgIAorICAgICAgICAgIC8qIFByb2Nlc3MgdW5sb2NrZWQgKi8KKyAgICAgICAgICBfX0hBTF9VTkxPQ0soaGFkYyk7CisgICAgICAgICAgCisgICAgICAgICAgcmV0dXJuIEhBTF9USU1FT1VUOworICAgICAgICB9CiAgICAgICB9CiAgICAgfQogICB9CkBAIC0xMTIyLDYgKzExMzgsMTQgQEAKICAgICAgIH0KICAgICB9CiAgIH0KKyAgZWxzZQorICB7CisgICAgLyogVXBkYXRlIEFEQyBzdGF0ZSBtYWNoaW5lIHRvIGVycm9yICovCisgICAgU0VUX0JJVChoYWRjLT5TdGF0ZSwgSEFMX0FEQ19TVEFURV9FUlJPUl9JTlRFUk5BTCk7CisKKyAgICAvKiBTZXQgQURDIGVycm9yIGNvZGUgdG8gQURDIElQIGludGVybmFsIGVycm9yICovCisgICAgU0VUX0JJVChoYWRjLT5FcnJvckNvZGUsIEhBTF9BRENfRVJST1JfSU5URVJOQUwpOworICB9CiAgIAogICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCiAgIHJldHVybiBIQUxfT0s7CkBAIC0xMzY0LDYgKzEzODgsMTMgQEAKICAgICB9CiAgIH0KICAgCisgIC8qIENoZWNrIEFEQyBETUEgTW9kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogLSBkaXNhYmxlIHRoZSBETUEgTW9kZSBpZiBpdCBpcyBhbHJlYWR5IGVuYWJsZWQgICAgICAgICAgICAgICAgICAgICAgICAqLworICBpZigoaGFkYy0+SW5zdGFuY2UtPkNSMiAmIEFEQ19DUjJfRE1BKSA9PSBBRENfQ1IyX0RNQSkKKyAgeworICAgIENMRUFSX0JJVChoYWRjLT5JbnN0YW5jZS0+Q1IyLCBBRENfQ1IyX0RNQSk7CisgIH0KKyAgCiAgIC8qIFN0YXJ0IGNvbnZlcnNpb24gaWYgQURDIGlzIGVmZmVjdGl2ZWx5IGVuYWJsZWQgKi8KICAgaWYoSEFMX0lTX0JJVF9TRVQoaGFkYy0+SW5zdGFuY2UtPkNSMiwgQURDX0NSMl9BRE9OKSkKICAgewpAQCAtMTQ1Nyw2ICsxNDg4LDE0IEBACiAgICAgICB9CiAgICAgfQogICB9CisgIGVsc2UKKyAgeworICAgIC8qIFVwZGF0ZSBBREMgc3RhdGUgbWFjaGluZSB0byBlcnJvciAqLworICAgIFNFVF9CSVQoaGFkYy0+U3RhdGUsIEhBTF9BRENfU1RBVEVfRVJST1JfSU5URVJOQUwpOworCisgICAgLyogU2V0IEFEQyBlcnJvciBjb2RlIHRvIEFEQyBJUCBpbnRlcm5hbCBlcnJvciAqLworICAgIFNFVF9CSVQoaGFkYy0+RXJyb3JDb2RlLCBIQUxfQURDX0VSUk9SX0lOVEVSTkFMKTsKKyAgfQogICAKICAgLyogUmV0dXJuIGZ1bmN0aW9uIHN0YXR1cyAqLwogICByZXR1cm4gSEFMX09LOwpAQCAtMTQ5MCw3ICsxNTI5LDE3IEBACiAgICAgCiAgICAgLyogRGlzYWJsZSB0aGUgRE1BIGNoYW5uZWwgKGluIGNhc2Ugb2YgRE1BIGluIGNpcmN1bGFyIG1vZGUgb3Igc3RvcCB3aGlsZSAqLwogICAgIC8qIERNQSB0cmFuc2ZlciBpcyBvbiBnb2luZykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICB0bXBfaGFsX3N0YXR1cyA9IEhBTF9ETUFfQWJvcnQoaGFkYy0+RE1BX0hhbmRsZSk7CisgICAgaWYgKGhhZGMtPkRNQV9IYW5kbGUtPlN0YXRlID09IEhBTF9ETUFfU1RBVEVfQlVTWSkKKyAgICB7CisgICAgICB0bXBfaGFsX3N0YXR1cyA9IEhBTF9ETUFfQWJvcnQoaGFkYy0+RE1BX0hhbmRsZSk7CisgICAgICAKKyAgICAgIC8qIENoZWNrIGlmIERNQSBjaGFubmVsIGVmZmVjdGl2ZWx5IGRpc2FibGVkICovCisgICAgICBpZiAodG1wX2hhbF9zdGF0dXMgIT0gSEFMX09LKQorICAgICAgeworICAgICAgICAvKiBVcGRhdGUgQURDIHN0YXRlIG1hY2hpbmUgdG8gZXJyb3IgKi8KKyAgICAgICAgU0VUX0JJVChoYWRjLT5TdGF0ZSwgSEFMX0FEQ19TVEFURV9FUlJPUl9ETUEpOworICAgICAgfQorICAgIH0KICAgICAKICAgICAvKiBEaXNhYmxlIEFEQyBvdmVycnVuIGludGVycnVwdCAqLwogICAgIF9fSEFMX0FEQ19ESVNBQkxFX0lUKGhhZGMsIEFEQ19JVF9PVlIpOwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjR4eF9oYWxfYWRjX2V4LmMgYi9TcmMvc3RtMzJmNHh4X2hhbF9hZGNfZXguYwppbmRleCA1ZDBjZjdmLi5jNTQ4OTUyIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmNHh4X2hhbF9hZGNfZXguYworKysgYi9TcmMvc3RtMzJmNHh4X2hhbF9hZGNfZXguYwpAQCAtMjI3LDYgKzIyNywxNCBAQAogICAgICAgfQogICAgIH0KICAgfQorICBlbHNlCisgIHsKKyAgICAvKiBVcGRhdGUgQURDIHN0YXRlIG1hY2hpbmUgdG8gZXJyb3IgKi8KKyAgICBTRVRfQklUKGhhZGMtPlN0YXRlLCBIQUxfQURDX1NUQVRFX0VSUk9SX0lOVEVSTkFMKTsKKworICAgIC8qIFNldCBBREMgZXJyb3IgY29kZSB0byBBREMgSVAgaW50ZXJuYWwgZXJyb3IgKi8KKyAgICBTRVRfQklUKGhhZGMtPkVycm9yQ29kZSwgSEFMX0FEQ19FUlJPUl9JTlRFUk5BTCk7CisgIH0KICAgCiAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KICAgcmV0dXJuIEhBTF9PSzsKQEAgLTMyNSw2ICszMzMsMTQgQEAKICAgICAgIH0KICAgICB9CiAgIH0KKyAgZWxzZQorICB7CisgICAgLyogVXBkYXRlIEFEQyBzdGF0ZSBtYWNoaW5lIHRvIGVycm9yICovCisgICAgU0VUX0JJVChoYWRjLT5TdGF0ZSwgSEFMX0FEQ19TVEFURV9FUlJPUl9JTlRFUk5BTCk7CisKKyAgICAvKiBTZXQgQURDIGVycm9yIGNvZGUgdG8gQURDIElQIGludGVybmFsIGVycm9yICovCisgICAgU0VUX0JJVChoYWRjLT5FcnJvckNvZGUsIEhBTF9BRENfRVJST1JfSU5URVJOQUwpOworICB9CiAgIAogICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCiAgIHJldHVybiBIQUxfT0s7CkBAIC00MTEsMTAgKzQyNywxNCBAQAogICAgIHsKICAgICAgIGlmKChUaW1lb3V0ID09IDBVKXx8KChIQUxfR2V0VGljaygpIC0gdGlja3N0YXJ0ICkgPiBUaW1lb3V0KSkKICAgICAgIHsKLSAgICAgICAgaGFkYy0+U3RhdGU9IEhBTF9BRENfU1RBVEVfVElNRU9VVDsKLSAgICAgICAgLyogUHJvY2VzcyB1bmxvY2tlZCAqLwotICAgICAgICBfX0hBTF9VTkxPQ0soaGFkYyk7Ci0gICAgICAgIHJldHVybiBIQUxfVElNRU9VVDsKKyAgICAgICAgLyogTmV3IGNoZWNrIHRvIGF2b2lkIGZhbHNlIHRpbWVvdXQgZGV0ZWN0aW9uIGluIGNhc2Ugb2YgcHJlZW1wdGlvbiAqLworICAgICAgICBpZighKF9fSEFMX0FEQ19HRVRfRkxBRyhoYWRjLCBBRENfRkxBR19KRU9DKSkpCisgICAgICAgIHsKKyAgICAgICAgICBoYWRjLT5TdGF0ZT0gSEFMX0FEQ19TVEFURV9USU1FT1VUOworICAgICAgICAgIC8qIFByb2Nlc3MgdW5sb2NrZWQgKi8KKyAgICAgICAgICBfX0hBTF9VTkxPQ0soaGFkYyk7CisgICAgICAgICAgcmV0dXJuIEhBTF9USU1FT1VUOworICAgICAgICB9CiAgICAgICB9CiAgICAgfQogICB9CkBAIC02ODQsNiArNzA0LDE0IEBACiAgICAgICBoYWRjLT5JbnN0YW5jZS0+Q1IyIHw9ICh1aW50MzJfdClBRENfQ1IyX1NXU1RBUlQ7CiAgICAgfQogICB9CisgIGVsc2UKKyAgeworICAgIC8qIFVwZGF0ZSBBREMgc3RhdGUgbWFjaGluZSB0byBlcnJvciAqLworICAgIFNFVF9CSVQoaGFkYy0+U3RhdGUsIEhBTF9BRENfU1RBVEVfRVJST1JfSU5URVJOQUwpOworCisgICAgLyogU2V0IEFEQyBlcnJvciBjb2RlIHRvIEFEQyBJUCBpbnRlcm5hbCBlcnJvciAqLworICAgIFNFVF9CSVQoaGFkYy0+RXJyb3JDb2RlLCBIQUxfQURDX0VSUk9SX0lOVEVSTkFMKTsKKyAgfQogICAKICAgLyogUmV0dXJuIGZ1bmN0aW9uIHN0YXR1cyAqLwogICByZXR1cm4gSEFMX09LOwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjR4eF9oYWxfY2FuLmMgYi9TcmMvc3RtMzJmNHh4X2hhbF9jYW4uYwppbmRleCAwZmJjNzIzLi44NmY2YzdjIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmNHh4X2hhbF9jYW4uYworKysgYi9TcmMvc3RtMzJmNHh4X2hhbF9jYW4uYwpAQCAtMTIwLDcgKzEyMCw3IEBACiAgICAgICAgICAgc3VibWl0dGVkICh0aGUgc2xlZXAgbW9kZSBpcyBub3QgeWV0IGVudGVyZWQpLCBhbmQgYmVjb21lCiAgICAgICAgICAgSEFMX0NBTl9TVEFURV9TTEVFUF9BQ1RJVkUgd2hlbiB0aGUgc2xlZXAgbW9kZSBpcyBlZmZlY3RpdmUuCiAKLSAgICAgICgjKSBUaGUgd2FrZS11cCBmcm9tIHNsZWVwIG1vZGUgY2FuIGJlIHRyaWdnZWQgYnkgdHdvIHdheXM6CisgICAgICAoIykgVGhlIHdha2UtdXAgZnJvbSBzbGVlcCBtb2RlIGNhbiBiZSB0cmlnZ2VyZWQgYnkgdHdvIHdheXM6CiAgICAgICAgICAgICAoKyspIFVzaW5nIEhBTF9DQU5fV2FrZVVwKCkuIFdoZW4gcmV0dXJuaW5nIGZyb20gdGhpcyBmdW5jdGlvbiwKICAgICAgICAgICAgICAgICAgdGhlIHNsZWVwIG1vZGUgaXMgZXhpdGVkIChpZiByZXR1cm4gc3RhdHVzIGlzIEhBTF9PSykuCiAgICAgICAgICAgICAoKyspIFdoZW4gYSBzdGFydCBvZiBSeCBDQU4gZnJhbWUgaXMgZGV0ZWN0ZWQgYnkgdGhlIENBTiBwZXJpcGhlcmFsLApAQCAtNTM3LDE5ICs1MzcsMTkgQEAKICAgKiAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciBDQU4gbW9kdWxlCiAgICogQHBhcmFtICBDYWxsYmFja0lEIElEIG9mIHRoZSBjYWxsYmFjayB0byBiZSByZWdpc3RlcmVkCiAgICogICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgotICAqICAgICAgICAgICBAYXJnIEByZWYgSEFMX0NBTl9UWF9NQUlMQk9YMF9DT01QTEVURV9DQl9JRCBUeCBNYWlsYm94IDAgQ29tcGxldGUgY2FsbGJhY2sgSUQKLSAgKiAgICAgICAgICAgQGFyZyBAcmVmIEhBTF9DQU5fVFhfTUFJTEJPWDFfQ09NUExFVEVfQ0JfSUQgVHggTWFpbGJveCAxIENvbXBsZXRlIGNhbGxiYWNrIElECi0gICogICAgICAgICAgIEBhcmcgQHJlZiBIQUxfQ0FOX1RYX01BSUxCT1gyX0NPTVBMRVRFX0NCX0lEIFR4IE1haWxib3ggMiBDb21wbGV0ZSBjYWxsYmFjayBJRAotICAqICAgICAgICAgICBAYXJnIEByZWYgSEFMX0NBTl9UWF9NQUlMQk9YMF9BQk9SVF9DQl9JRCBUeCBNYWlsYm94IDAgQWJvcnQgY2FsbGJhY2sgSUQKLSAgKiAgICAgICAgICAgQGFyZyBAcmVmIEhBTF9DQU5fVFhfTUFJTEJPWDFfQUJPUlRfQ0JfSUQgVHggTWFpbGJveCAxIEFib3J0IGNhbGxiYWNrIElECi0gICogICAgICAgICAgIEBhcmcgQHJlZiBIQUxfQ0FOX1RYX01BSUxCT1gyX0FCT1JUX0NCX0lEIFR4IE1haWxib3ggMiBBYm9ydCBjYWxsYmFjayBJRAotICAqICAgICAgICAgICBAYXJnIEByZWYgSEFMX0NBTl9SWF9GSUZPMF9NU0dfUEVORElOR19DQl9JRCBSeCBGaWZvIDAgbWVzc2FnZSBwZW5kaW5nIGNhbGxiYWNrIElECi0gICogICAgICAgICAgIEBhcmcgQHJlZiBIQUxfQ0FOX1JYX0ZJRk8wX0ZVTExfQ0JfSUQgUnggRmlmbyAwIGZ1bGwgY2FsbGJhY2sgSUQKLSAgKiAgICAgICAgICAgQGFyZyBAcmVmIEhBTF9DQU5fUlhfRklGTzFfTVNHX1BFTkRJTkdfQ0JfSUQgUnggRmlmbyAxIG1lc3NhZ2UgcGVuZGluZyBjYWxsYmFjayBJRAotICAqICAgICAgICAgICBAYXJnIEByZWYgSEFMX0NBTl9SWF9GSUZPMV9GVUxMX0NCX0lEIFJ4IEZpZm8gMSBmdWxsIGNhbGxiYWNrIElECi0gICogICAgICAgICAgIEBhcmcgQHJlZiBIQUxfQ0FOX1NMRUVQX0NCX0lEIFNsZWVwIGNhbGxiYWNrIElECi0gICogICAgICAgICAgIEBhcmcgQHJlZiBIQUxfQ0FOX1dBS0VVUF9GUk9NX1JYX01TR19DQl9JRCBXYWtlIFVwIGZyb20gUnggbWVzc2FnZSBjYWxsYmFjayBJRAotICAqICAgICAgICAgICBAYXJnIEByZWYgSEFMX0NBTl9FUlJPUl9DQl9JRCBFcnJvciBjYWxsYmFjayBJRAorICAqICAgICAgICAgICBAYXJnIEByZWYgSEFMX0NBTl9UWF9NQUlMQk9YMF9DT01QTEVURV9DQUxMQkFDS19DQl9JRCBUeCBNYWlsYm94IDAgQ29tcGxldGUgY2FsbGJhY2sgSUQKKyAgKiAgICAgICAgICAgQGFyZyBAcmVmIEhBTF9DQU5fVFhfTUFJTEJPWDFfQ09NUExFVEVfQ0FMTEJBQ0tfQ0JfSUQgVHggTWFpbGJveCAxIENvbXBsZXRlIGNhbGxiYWNrIElECisgICogICAgICAgICAgIEBhcmcgQHJlZiBIQUxfQ0FOX1RYX01BSUxCT1gyX0NPTVBMRVRFX0NBTExCQUNLX0NCX0lEIFR4IE1haWxib3ggMiBDb21wbGV0ZSBjYWxsYmFjayBJRAorICAqICAgICAgICAgICBAYXJnIEByZWYgSEFMX0NBTl9UWF9NQUlMQk9YMF9BQk9SVF9DQUxMQkFDS19DQl9JRCBUeCBNYWlsYm94IDAgQWJvcnQgY2FsbGJhY2sgSUQKKyAgKiAgICAgICAgICAgQGFyZyBAcmVmIEhBTF9DQU5fVFhfTUFJTEJPWDFfQUJPUlRfQ0FMTEJBQ0tfQ0JfSUQgVHggTWFpbGJveCAxIEFib3J0IGNhbGxiYWNrIElECisgICogICAgICAgICAgIEBhcmcgQHJlZiBIQUxfQ0FOX1RYX01BSUxCT1gyX0FCT1JUX0NBTExCQUNLX0NCX0lEIFR4IE1haWxib3ggMiBBYm9ydCBjYWxsYmFjayBJRAorICAqICAgICAgICAgICBAYXJnIEByZWYgSEFMX0NBTl9SWF9GSUZPMF9NU0dfUEVORElOR19DQUxMQkFDS19DQl9JRCBSeCBGaWZvIDAgbWVzc2FnZSBwZW5kaW5nIGNhbGxiYWNrIElECisgICogICAgICAgICAgIEBhcmcgQHJlZiBIQUxfQ0FOX1JYX0ZJRk8wX0ZVTExfQ0FMTEJBQ0tfQ0JfSUQgUnggRmlmbyAwIGZ1bGwgY2FsbGJhY2sgSUQKKyAgKiAgICAgICAgICAgQGFyZyBAcmVmIEhBTF9DQU5fUlhfRklGTzFfTVNHUEVORElOR19DQUxMQkFDS19DQl9JRCBSeCBGaWZvIDEgbWVzc2FnZSBwZW5kaW5nIGNhbGxiYWNrIElECisgICogICAgICAgICAgIEBhcmcgQHJlZiBIQUxfQ0FOX1JYX0ZJRk8xX0ZVTExfQ0FMTEJBQ0tfQ0JfSUQgUnggRmlmbyAxIGZ1bGwgY2FsbGJhY2sgSUQKKyAgKiAgICAgICAgICAgQGFyZyBAcmVmIEhBTF9DQU5fU0xFRVBfQ0FMTEJBQ0tfQ0JfSUQgU2xlZXAgY2FsbGJhY2sgSUQKKyAgKiAgICAgICAgICAgQGFyZyBAcmVmIEhBTF9DQU5fV0FLRVVQX0ZST01fUlhfTVNHX0NBTExCQUNLX0NCX0lEIFdha2UgVXAgZnJvbSBSeCBtZXNzYWdlIGNhbGxiYWNrIElECisgICogICAgICAgICAgIEBhcmcgQHJlZiBIQUxfQ0FOX0VSUk9SX0NBTExCQUNLX0NCX0lEIEVycm9yIGNhbGxiYWNrIElECiAgICogICAgICAgICAgIEBhcmcgQHJlZiBIQUxfQ0FOX01TUElOSVRfQ0JfSUQgTXNwSW5pdCBjYWxsYmFjayBJRAogICAqICAgICAgICAgICBAYXJnIEByZWYgSEFMX0NBTl9NU1BERUlOSVRfQ0JfSUQgTXNwRGVJbml0IGNhbGxiYWNrIElECiAgICogQHBhcmFtICBwQ2FsbGJhY2sgcG9pbnRlciB0byB0aGUgQ2FsbGJhY2sgZnVuY3Rpb24KQEAgLTY4MCwxOSArNjgwLDE5IEBACiAgICogICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgQ0FOIG1vZHVsZQogICAqIEBwYXJhbSAgQ2FsbGJhY2tJRCBJRCBvZiB0aGUgY2FsbGJhY2sgdG8gYmUgdW5yZWdpc3RlcmVkCiAgICogICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgotICAqICAgICAgICAgICBAYXJnIEByZWYgSEFMX0NBTl9UWF9NQUlMQk9YMF9DT01QTEVURV9DQl9JRCBUeCBNYWlsYm94IDAgQ29tcGxldGUgY2FsbGJhY2sgSUQKLSAgKiAgICAgICAgICAgQGFyZyBAcmVmIEhBTF9DQU5fVFhfTUFJTEJPWDFfQ09NUExFVEVfQ0JfSUQgVHggTWFpbGJveCAxIENvbXBsZXRlIGNhbGxiYWNrIElECi0gICogICAgICAgICAgIEBhcmcgQHJlZiBIQUxfQ0FOX1RYX01BSUxCT1gyX0NPTVBMRVRFX0NCX0lEIFR4IE1haWxib3ggMiBDb21wbGV0ZSBjYWxsYmFjayBJRAotICAqICAgICAgICAgICBAYXJnIEByZWYgSEFMX0NBTl9UWF9NQUlMQk9YMF9BQk9SVF9DQl9JRCBUeCBNYWlsYm94IDAgQWJvcnQgY2FsbGJhY2sgSUQKLSAgKiAgICAgICAgICAgQGFyZyBAcmVmIEhBTF9DQU5fVFhfTUFJTEJPWDFfQUJPUlRfQ0JfSUQgVHggTWFpbGJveCAxIEFib3J0IGNhbGxiYWNrIElECi0gICogICAgICAgICAgIEBhcmcgQHJlZiBIQUxfQ0FOX1RYX01BSUxCT1gyX0FCT1JUX0NCX0lEIFR4IE1haWxib3ggMiBBYm9ydCBjYWxsYmFjayBJRAotICAqICAgICAgICAgICBAYXJnIEByZWYgSEFMX0NBTl9SWF9GSUZPMF9NU0dfUEVORElOR19DQl9JRCBSeCBGaWZvIDAgbWVzc2FnZSBwZW5kaW5nIGNhbGxiYWNrIElECi0gICogICAgICAgICAgIEBhcmcgQHJlZiBIQUxfQ0FOX1JYX0ZJRk8wX0ZVTExfQ0JfSUQgUnggRmlmbyAwIGZ1bGwgY2FsbGJhY2sgSUQKLSAgKiAgICAgICAgICAgQGFyZyBAcmVmIEhBTF9DQU5fUlhfRklGTzFfTVNHX1BFTkRJTkdfQ0JfSUQgUnggRmlmbyAxIG1lc3NhZ2UgcGVuZGluZyBjYWxsYmFjayBJRAotICAqICAgICAgICAgICBAYXJnIEByZWYgSEFMX0NBTl9SWF9GSUZPMV9GVUxMX0NCX0lEIFJ4IEZpZm8gMSBmdWxsIGNhbGxiYWNrIElECi0gICogICAgICAgICAgIEBhcmcgQHJlZiBIQUxfQ0FOX1NMRUVQX0NCX0lEIFNsZWVwIGNhbGxiYWNrIElECi0gICogICAgICAgICAgIEBhcmcgQHJlZiBIQUxfQ0FOX1dBS0VVUF9GUk9NX1JYX01TR19DQl9JRCBXYWtlIFVwIGZyb20gUnggbWVzc2FnZSBjYWxsYmFjayBJRAotICAqICAgICAgICAgICBAYXJnIEByZWYgSEFMX0NBTl9FUlJPUl9DQl9JRCBFcnJvciBjYWxsYmFjayBJRAorICAqICAgICAgICAgICBAYXJnIEByZWYgSEFMX0NBTl9UWF9NQUlMQk9YMF9DT01QTEVURV9DQUxMQkFDS19DQl9JRCBUeCBNYWlsYm94IDAgQ29tcGxldGUgY2FsbGJhY2sgSUQKKyAgKiAgICAgICAgICAgQGFyZyBAcmVmIEhBTF9DQU5fVFhfTUFJTEJPWDFfQ09NUExFVEVfQ0FMTEJBQ0tfQ0JfSUQgVHggTWFpbGJveCAxIENvbXBsZXRlIGNhbGxiYWNrIElECisgICogICAgICAgICAgIEBhcmcgQHJlZiBIQUxfQ0FOX1RYX01BSUxCT1gyX0NPTVBMRVRFX0NBTExCQUNLX0NCX0lEIFR4IE1haWxib3ggMiBDb21wbGV0ZSBjYWxsYmFjayBJRAorICAqICAgICAgICAgICBAYXJnIEByZWYgSEFMX0NBTl9UWF9NQUlMQk9YMF9BQk9SVF9DQUxMQkFDS19DQl9JRCBUeCBNYWlsYm94IDAgQWJvcnQgY2FsbGJhY2sgSUQKKyAgKiAgICAgICAgICAgQGFyZyBAcmVmIEhBTF9DQU5fVFhfTUFJTEJPWDFfQUJPUlRfQ0FMTEJBQ0tfQ0JfSUQgVHggTWFpbGJveCAxIEFib3J0IGNhbGxiYWNrIElECisgICogICAgICAgICAgIEBhcmcgQHJlZiBIQUxfQ0FOX1RYX01BSUxCT1gyX0FCT1JUX0NBTExCQUNLX0NCX0lEIFR4IE1haWxib3ggMiBBYm9ydCBjYWxsYmFjayBJRAorICAqICAgICAgICAgICBAYXJnIEByZWYgSEFMX0NBTl9SWF9GSUZPMF9NU0dfUEVORElOR19DQUxMQkFDS19DQl9JRCBSeCBGaWZvIDAgbWVzc2FnZSBwZW5kaW5nIGNhbGxiYWNrIElECisgICogICAgICAgICAgIEBhcmcgQHJlZiBIQUxfQ0FOX1JYX0ZJRk8wX0ZVTExfQ0FMTEJBQ0tfQ0JfSUQgUnggRmlmbyAwIGZ1bGwgY2FsbGJhY2sgSUQKKyAgKiAgICAgICAgICAgQGFyZyBAcmVmIEhBTF9DQU5fUlhfRklGTzFfTVNHUEVORElOR19DQUxMQkFDS19DQl9JRCBSeCBGaWZvIDEgbWVzc2FnZSBwZW5kaW5nIGNhbGxiYWNrIElECisgICogICAgICAgICAgIEBhcmcgQHJlZiBIQUxfQ0FOX1JYX0ZJRk8xX0ZVTExfQ0FMTEJBQ0tfQ0JfSUQgUnggRmlmbyAxIGZ1bGwgY2FsbGJhY2sgSUQKKyAgKiAgICAgICAgICAgQGFyZyBAcmVmIEhBTF9DQU5fU0xFRVBfQ0FMTEJBQ0tfQ0JfSUQgU2xlZXAgY2FsbGJhY2sgSUQKKyAgKiAgICAgICAgICAgQGFyZyBAcmVmIEhBTF9DQU5fV0FLRVVQX0ZST01fUlhfTVNHX0NBTExCQUNLX0NCX0lEIFdha2UgVXAgZnJvbSBSeCBtZXNzYWdlIGNhbGxiYWNrIElECisgICogICAgICAgICAgIEBhcmcgQHJlZiBIQUxfQ0FOX0VSUk9SX0NBTExCQUNLX0NCX0lEIEVycm9yIGNhbGxiYWNrIElECiAgICogICAgICAgICAgIEBhcmcgQHJlZiBIQUxfQ0FOX01TUElOSVRfQ0JfSUQgTXNwSW5pdCBjYWxsYmFjayBJRAogICAqICAgICAgICAgICBAYXJnIEByZWYgSEFMX0NBTl9NU1BERUlOSVRfQ0JfSUQgTXNwRGVJbml0IGNhbGxiYWNrIElECiAgICogQHJldHZhbCBIQUwgc3RhdHVzCkBAIC0xOTAxLDcgKzE5MDEsNyBAQAogICAgIC8qIENoZWNrIGlmIG1lc3NhZ2UgaXMgc3RpbGwgcGVuZGluZyAqLwogICAgIGlmICgoaGNhbi0+SW5zdGFuY2UtPlJGMFIgJiBDQU5fUkYwUl9GTVAwKSAhPSAwVSkKICAgICB7Ci0gICAgICAvKiBSZWNlaXZlIEZJRk8gMCBtZXNhZ2UgcGVuZGluZyBDYWxsYmFjayAqLworICAgICAgLyogUmVjZWl2ZSBGSUZPIDAgbWVzc2FnZSBwZW5kaW5nIENhbGxiYWNrICovCiAjaWYgVVNFX0hBTF9DQU5fUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEKICAgICAgIC8qIENhbGwgcmVnaXN0ZXJlZCBjYWxsYmFjayovCiAgICAgICBoY2FuLT5SeEZpZm8wTXNnUGVuZGluZ0NhbGxiYWNrKGhjYW4pOwpAQCAtMTk1MCw3ICsxOTUwLDcgQEAKICAgICAvKiBDaGVjayBpZiBtZXNzYWdlIGlzIHN0aWxsIHBlbmRpbmcgKi8KICAgICBpZiAoKGhjYW4tPkluc3RhbmNlLT5SRjFSICYgQ0FOX1JGMVJfRk1QMSkgIT0gMFUpCiAgICAgewotICAgICAgLyogUmVjZWl2ZSBGSUZPIDEgbWVzYWdlIHBlbmRpbmcgQ2FsbGJhY2sgKi8KKyAgICAgIC8qIFJlY2VpdmUgRklGTyAxIG1lc3NhZ2UgcGVuZGluZyBDYWxsYmFjayAqLwogI2lmIFVTRV9IQUxfQ0FOX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxCiAgICAgICAvKiBDYWxsIHJlZ2lzdGVyZWQgY2FsbGJhY2sqLwogICAgICAgaGNhbi0+UnhGaWZvMU1zZ1BlbmRpbmdDYWxsYmFjayhoY2FuKTsKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmY0eHhfaGFsX2NlYy5jIGIvU3JjL3N0bTMyZjR4eF9oYWxfY2VjLmMKaW5kZXggNWQ5ZjY4My4uNzQyMDkwNyAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZjR4eF9oYWxfY2VjLmMKKysrIGIvU3JjL3N0bTMyZjR4eF9oYWxfY2VjLmMKQEAgLTgyMiwxOSArODIyLDE1IEBACiAgIC8qIENFQyBUWCBieXRlIHJlcXVlc3QgaW50ZXJydXB0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgIGlmICgocmVnICYgQ0VDX0ZMQUdfVFhCUikgIT0gMFUpCiAgIHsKKyAgICAtLWhjZWMtPlR4WGZlckNvdW50OwogICAgIGlmIChoY2VjLT5UeFhmZXJDb3VudCA9PSAwVSkKICAgICB7CiAgICAgICAvKiBpZiB0aGlzIGlzIHRoZSBsYXN0IGJ5dGUgdHJhbnNtaXNzaW9uLCBzZXQgVFggRW5kIG9mIE1lc3NhZ2UgKFRYRU9NKSBiaXQgKi8KICAgICAgIF9fSEFMX0NFQ19MQVNUX0JZVEVfVFhfU0VUKGhjZWMpOwotICAgICAgaGNlYy0+SW5zdGFuY2UtPlRYRFIgPSAqaGNlYy0+cFR4QnVmZlB0cjsKLSAgICAgIGhjZWMtPnBUeEJ1ZmZQdHIrKzsKICAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGhjZWMtPkluc3RhbmNlLT5UWERSID0gKmhjZWMtPnBUeEJ1ZmZQdHI7Ci0gICAgICBoY2VjLT5wVHhCdWZmUHRyKys7Ci0gICAgICBoY2VjLT5UeFhmZXJDb3VudC0tOwotICAgIH0KKyAgICAvKiBJbiBhbGwgY2FzZXMgdHJhbnNtaXQgdGhlIGJ5dGUgKi8KKyAgICBoY2VjLT5JbnN0YW5jZS0+VFhEUiA9ICpoY2VjLT5wVHhCdWZmUHRyOworICAgIGhjZWMtPnBUeEJ1ZmZQdHIrKzsKICAgICAvKiBjbGVhciBUeC1CeXRlIHJlcXVlc3QgZmxhZyAqLwogICAgIF9fSEFMX0NFQ19DTEVBUl9GTEFHKGhjZWMsIENFQ19GTEFHX1RYQlIpOwogICB9CmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmNHh4X2hhbF9jcnlwLmMgYi9TcmMvc3RtMzJmNHh4X2hhbF9jcnlwLmMKaW5kZXggOTdmOGJkNy4uZWZiNjRlNSAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZjR4eF9oYWxfY3J5cC5jCisrKyBiL1NyYy9zdG0zMmY0eHhfaGFsX2NyeXAuYwpAQCAtNTg2LDYgKzU4Niw4IEBACiAgICAgaGNyeXAtPkluaXQuSGVhZGVyU2l6ZSA9IHBDb25mLT5IZWFkZXJTaXplOwogICAgIGhjcnlwLT5Jbml0LkIwICAgICAgICAgPSBwQ29uZi0+QjA7CiAgICAgaGNyeXAtPkluaXQuRGF0YVdpZHRoVW5pdCA9IHBDb25mLT5EYXRhV2lkdGhVbml0OworICAgIGhjcnlwLT5Jbml0LktleUlWQ29uZmlnU2tpcCA9IHBDb25mLT5LZXlJVkNvbmZpZ1NraXA7CisgICAgaGNyeXAtPkluaXQuSGVhZGVyV2lkdGhVbml0ID0gcENvbmYtPkhlYWRlcldpZHRoVW5pdDsKIAogICAgIC8qIFNldCB0aGUga2V5IHNpemUoVGhpcyBiaXQgZmllbGQgaXMgZG9uknQgY2FyZSBpbiB0aGUgREVTIG9yIFRERVMgbW9kZXMpIGRhdGEgdHlwZSwgQWxnb01vZGUgYW5kIG9wZXJhdGluZyBtb2RlKi8KICNpZiBkZWZpbmVkIChDUllQKQpAQCAtNjYwLDcgKzY2Miw5IEBACiAgICAgcENvbmYtPkhlYWRlciAgICAgICAgICA9IGhjcnlwLT5Jbml0LkhlYWRlciA7CiAgICAgcENvbmYtPkhlYWRlclNpemUgICAgICA9IGhjcnlwLT5Jbml0LkhlYWRlclNpemU7CiAgICAgcENvbmYtPkIwICAgICAgICAgICAgICA9IGhjcnlwLT5Jbml0LkIwOwotICAgIHBDb25mLT5EYXRhV2lkdGhVbml0ICAgID0gaGNyeXAtPkluaXQuRGF0YVdpZHRoVW5pdDsKKyAgICBwQ29uZi0+RGF0YVdpZHRoVW5pdCAgID0gaGNyeXAtPkluaXQuRGF0YVdpZHRoVW5pdDsKKyAgICBwQ29uZi0+S2V5SVZDb25maWdTa2lwID0gaGNyeXAtPkluaXQuS2V5SVZDb25maWdTa2lwOworICAgIHBDb25mLT5IZWFkZXJXaWR0aFVuaXQgPSBoY3J5cC0+SW5pdC5IZWFkZXJXaWR0aFVuaXQ7CiAKICAgICAvKiBQcm9jZXNzIFVubG9ja2VkICovCiAgICAgX19IQUxfVU5MT0NLKGhjcnlwKTsKQEAgLTY5Miw4ICs2OTYsOCBAQAogICAvKiBQcmV2ZW50IHVudXNlZCBhcmd1bWVudChzKSBjb21waWxhdGlvbiB3YXJuaW5nICovCiAgIFVOVVNFRChoY3J5cCk7CiAKLSAgLyogTk9URSA6IFRoaXMgZnVuY3Rpb24gU2hvdWxkIG5vdCBiZSBtb2RpZmllZCwgd2hlbiB0aGUgY2FsbGJhY2sgaXMgbmVlZGVkLAotICAgICAgICAgICAgdGhlIEhBTF9DUllQX01zcEluaXQgY291bGQgYmUgaW1wbGVtZW50ZWQgaW4gdGhlIHVzZXIgZmlsZQorICAvKiBOT1RFIDogVGhpcyBmdW5jdGlvbiBzaG91bGQgbm90IGJlIG1vZGlmaWVkLCB3aGVuIHRoZSBjYWxsYmFjayBpcyBuZWVkZWQsCisgICAgICAgICAgICB0aGUgSEFMX0NSWVBfTXNwSW5pdCBjYW4gYmUgaW1wbGVtZW50ZWQgaW4gdGhlIHVzZXIgZmlsZQogICAgKi8KIH0KIApAQCAtNzA4LDggKzcxMiw4IEBACiAgIC8qIFByZXZlbnQgdW51c2VkIGFyZ3VtZW50KHMpIGNvbXBpbGF0aW9uIHdhcm5pbmcgKi8KICAgVU5VU0VEKGhjcnlwKTsKIAotICAvKiBOT1RFIDogVGhpcyBmdW5jdGlvbiBTaG91bGQgbm90IGJlIG1vZGlmaWVkLCB3aGVuIHRoZSBjYWxsYmFjayBpcyBuZWVkZWQsCi0gICAgICAgICAgICB0aGUgSEFMX0NSWVBfTXNwRGVJbml0IGNvdWxkIGJlIGltcGxlbWVudGVkIGluIHRoZSB1c2VyIGZpbGUKKyAgLyogTk9URSA6IFRoaXMgZnVuY3Rpb24gc2hvdWxkIG5vdCBiZSBtb2RpZmllZCwgd2hlbiB0aGUgY2FsbGJhY2sgaXMgbmVlZGVkLAorICAgICAgICAgICAgdGhlIEhBTF9DUllQX01zcERlSW5pdCBjYW4gYmUgaW1wbGVtZW50ZWQgaW4gdGhlIHVzZXIgZmlsZQogICAgKi8KIH0KIApAQCAtMjE1Nyw4ICsyMTYxLDggQEAKICAgLyogUHJldmVudCB1bnVzZWQgYXJndW1lbnQocykgY29tcGlsYXRpb24gd2FybmluZyAqLwogICBVTlVTRUQoaGNyeXApOwogCi0gIC8qIE5PVEUgOiBUaGlzIGZ1bmN0aW9uIFNob3VsZCBub3QgYmUgbW9kaWZpZWQsIHdoZW4gdGhlIGNhbGxiYWNrIGlzIG5lZWRlZCwKLSAgICAgICAgICAgIHRoZSBIQUxfQ1JZUF9JbkNwbHRDYWxsYmFjayBjb3VsZCBiZSBpbXBsZW1lbnRlZCBpbiB0aGUgdXNlciBmaWxlCisgIC8qIE5PVEUgOiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBub3QgYmUgbW9kaWZpZWQsIHdoZW4gdGhlIGNhbGxiYWNrIGlzIG5lZWRlZCwKKyAgICAgICAgICAgIHRoZSBIQUxfQ1JZUF9JbkNwbHRDYWxsYmFjayBjYW4gYmUgaW1wbGVtZW50ZWQgaW4gdGhlIHVzZXIgZmlsZQogICAgKi8KIH0KIApAQCAtMjE3Myw4ICsyMTc3LDggQEAKICAgLyogUHJldmVudCB1bnVzZWQgYXJndW1lbnQocykgY29tcGlsYXRpb24gd2FybmluZyAqLwogICBVTlVTRUQoaGNyeXApOwogCi0gIC8qIE5PVEUgOiBUaGlzIGZ1bmN0aW9uIFNob3VsZCBub3QgYmUgbW9kaWZpZWQsIHdoZW4gdGhlIGNhbGxiYWNrIGlzIG5lZWRlZCwKLSAgICAgICAgICAgIHRoZSBIQUxfQ1JZUF9PdXRDcGx0Q2FsbGJhY2sgY291bGQgYmUgaW1wbGVtZW50ZWQgaW4gdGhlIHVzZXIgZmlsZQorICAvKiBOT1RFIDogVGhpcyBmdW5jdGlvbiBzaG91bGQgbm90IGJlIG1vZGlmaWVkLCB3aGVuIHRoZSBjYWxsYmFjayBpcyBuZWVkZWQsCisgICAgICAgICAgICB0aGUgSEFMX0NSWVBfT3V0Q3BsdENhbGxiYWNrIGNhbiBiZSBpbXBsZW1lbnRlZCBpbiB0aGUgdXNlciBmaWxlCiAgICAqLwogfQogCkBAIC01NTQwLDE3ICs1NTQ0LDE3IEBACiAgICAgaGNyeXAtPkNyeXBJbkNvdW50Kys7CiAgICAgaGNyeXAtPkluc3RhbmNlLT5ESU5SICA9ICoodWludDMyX3QgKikoaGNyeXAtPnBDcnlwSW5CdWZmUHRyICsgaGNyeXAtPkNyeXBJbkNvdW50KTsKICAgICBoY3J5cC0+Q3J5cEluQ291bnQrKzsKLSAgICBpZiAoKGhjcnlwLT5DcnlwSW5Db3VudCA9PSAgaGNyeXAtPlNpemUpICYmIChoY3J5cC0+SW5pdC5BbGdvcml0aG0gPT0gQ1JZUF9BRVNfR0NNX0dNQUMpKQotICAgIHsKLSAgICAgIC8qIENhbGwgSW5wdXQgdHJhbnNmZXIgY29tcGxldGUgY2FsbGJhY2sgKi8KKyAgICBpZiAoKGhjcnlwLT5DcnlwSW5Db3VudCA9PSAoaGNyeXAtPlNpemUgLyA0VSkpICYmICgoaGNyeXAtPlNpemUgJSAxNlUpID09IDBVKSkKKyAgICAgIHsKKyAgICAgICAgLyogQ2FsbCBJbnB1dCB0cmFuc2ZlciBjb21wbGV0ZSBjYWxsYmFjayAqLwogI2lmIChVU0VfSEFMX0NSWVBfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCi0gICAgICAvKkNhbGwgcmVnaXN0ZXJlZCBJbnB1dCBjb21wbGV0ZSBjYWxsYmFjayovCi0gICAgICBoY3J5cC0+SW5DcGx0Q2FsbGJhY2soaGNyeXApOworICAgICAgICAvKkNhbGwgcmVnaXN0ZXJlZCBJbnB1dCBjb21wbGV0ZSBjYWxsYmFjayovCisgICAgICAgIGhjcnlwLT5JbkNwbHRDYWxsYmFjayhoY3J5cCk7CiAjZWxzZQotICAgICAgLypDYWxsIGxlZ2FjeSB3ZWFrIElucHV0IGNvbXBsZXRlIGNhbGxiYWNrKi8KLSAgICAgIEhBTF9DUllQX0luQ3BsdENhbGxiYWNrKGhjcnlwKTsKKyAgICAgICAgLypDYWxsIGxlZ2FjeSB3ZWFrIElucHV0IGNvbXBsZXRlIGNhbGxiYWNrKi8KKyAgICAgICAgSEFMX0NSWVBfSW5DcGx0Q2FsbGJhY2soaGNyeXApOwogI2VuZGlmIC8qIFVTRV9IQUxfQ1JZUF9SRUdJU1RFUl9DQUxMQkFDS1MgKi8KLSAgICB9CisgICAgICB9CiAgIH0KICAgZWxzZSAvKiBMYXN0IGJsb2NrIG9mIHBheWxvYWQgPCAxMjhiaXQqLwogICB7CkBAIC01NTk5LDEwICs1NjAzLDI0IEBACiBzdGF0aWMgSEFMX1N0YXR1c1R5cGVEZWYgQ1JZUF9HQ01DQ01fU2V0SGVhZGVyUGhhc2UoQ1JZUF9IYW5kbGVUeXBlRGVmICpoY3J5cCwgdWludDMyX3QgVGltZW91dCkKIHsKICAgdWludDMyX3QgbG9vcGNvdW50ZXI7CisgIHVpbnQzMl90IHNpemVfaW5fYnl0ZXM7CisgIHVpbnQzMl90IHRtcDsKKyAgdWludDMyX3QgbWFza1sxMl0gPSB7MHgwVSwgMHhGRjAwMDAwMFUsIDB4RkZGRjAwMDBVLCAweEZGRkZGRjAwVSwgIC8qIDMyLWJpdCBkYXRhIHR5cGUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgMHgwVSwgMHgwMDAwRkYwMFUsIDB4MDAwMEZGRkZVLCAweEZGMDBGRkZGVSwgIC8qIDE2LWJpdCBkYXRhIHR5cGUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgMHgwVSwgMHgwMDAwMDBGRlUsIDB4MDAwMEZGRkZVLCAweDAwRkZGRkZGVX07IC8qICA4LWJpdCBkYXRhIHR5cGUgKi8KIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogSGVhZGVyIHBoYXNlIGZvciBHQ00vR01BQyBvciBDQ00gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0gIGlmICgoaGNyeXAtPkluaXQuSGVhZGVyU2l6ZSAhPSAwVSkpCisgIGlmIChoY3J5cC0+SW5pdC5IZWFkZXJXaWR0aFVuaXQgPT0gQ1JZUF9IRUFERVJXSURUSFVOSVRfV09SRCkKKyAgeworICAgIHNpemVfaW5fYnl0ZXMgPSBoY3J5cC0+SW5pdC5IZWFkZXJTaXplICogNFU7CisgIH0KKyAgZWxzZQorICB7CisgICAgc2l6ZV9pbl9ieXRlcyA9IGhjcnlwLT5Jbml0LkhlYWRlclNpemU7CisgIH0KKworICBpZiAoc2l6ZV9pbl9ieXRlcyAhPSAwVSkKICAgewogCiAjaWYgZGVmaW5lZChDUllQKQpAQCAtNTYxMywxMCArNTYzMSwxMCBAQAogICAgIC8qIEVuYWJsZSB0aGUgQ1JZUCBwZXJpcGhlcmFsICovCiAgICAgX19IQUxfQ1JZUF9FTkFCTEUoaGNyeXApOwogCi0gICAgaWYgKChoY3J5cC0+SW5pdC5IZWFkZXJTaXplICUgNFUpID09IDBVKQorICAgIGlmICgoc2l6ZV9pbl9ieXRlcyAlIDE2VSkgPT0gMFUpCiAgICAgewogICAgICAgLyogSGVhZGVyU2l6ZSAlNCwgbm8gcGFkZGluZyAqLwotICAgICAgZm9yIChsb29wY291bnRlciA9IDBVOyAobG9vcGNvdW50ZXIgPCBoY3J5cC0+SW5pdC5IZWFkZXJTaXplKTsgbG9vcGNvdW50ZXIgKz0gNFUpCisgICAgICBmb3IgKGxvb3Bjb3VudGVyID0gMFU7IChsb29wY291bnRlciA8IChzaXplX2luX2J5dGVzIC8gNFUpKTsgbG9vcGNvdW50ZXIgKz0gNFUpCiAgICAgICB7CiAgICAgICAgIGhjcnlwLT5JbnN0YW5jZS0+RElOID0gKih1aW50MzJfdCAqKShoY3J5cC0+SW5pdC5IZWFkZXIgKyBoY3J5cC0+Q3J5cEhlYWRlckNvdW50KTsKICAgICAgICAgaGNyeXAtPkNyeXBIZWFkZXJDb3VudCsrIDsKQEAgLTU2NDYsNyArNTY2NCw3IEBACiAgICAgZWxzZQogICAgIHsKICAgICAgIC8qV3JpdGUgaGVhZGVyIGJsb2NrIGluIHRoZSBJTiBGSUZPIHdpdGhvdXQgbGFzdCBibG9jayAqLwotICAgICAgZm9yIChsb29wY291bnRlciA9IDBVOyAobG9vcGNvdW50ZXIgPCAoKGhjcnlwLT5Jbml0LkhlYWRlclNpemUpIC0gKGhjcnlwLT5Jbml0LkhlYWRlclNpemUgJSA0VSkpKTsgbG9vcGNvdW50ZXIgKz0gNFUpCisgICAgICBmb3IgKGxvb3Bjb3VudGVyID0gMFU7IChsb29wY291bnRlciA8ICgoc2l6ZV9pbl9ieXRlcyAvIDE2VSkgKiA0VSkpOyBsb29wY291bnRlciArPSA0VSkKICAgICAgIHsKICAgICAgICAgaGNyeXAtPkluc3RhbmNlLT5ESU4gPSAqKHVpbnQzMl90ICopKGhjcnlwLT5Jbml0LkhlYWRlciArIGhjcnlwLT5DcnlwSGVhZGVyQ291bnQpOwogICAgICAgICBoY3J5cC0+Q3J5cEhlYWRlckNvdW50KysgOwpAQCAtNTY3MywxNiArNTY5MSwzNCBAQAogICAgICAgICB9CiAgICAgICB9CiAgICAgICAvKiAgTGFzdCBibG9jayBvcHRpb25hbGx5IHBhZCB0aGUgZGF0YSB3aXRoIHplcm9zKi8KLSAgICAgIGZvciAobG9vcGNvdW50ZXIgPSAwVTsgKGxvb3Bjb3VudGVyIDwgKGhjcnlwLT5Jbml0LkhlYWRlclNpemUgJSA0VSkpOyBsb29wY291bnRlcisrKQorICAgICAgZm9yIChsb29wY291bnRlciA9IDBVOyAobG9vcGNvdW50ZXIgPCAoKHNpemVfaW5fYnl0ZXMgLyA0VSkgJSA0VSkpOyBsb29wY291bnRlcisrKQogICAgICAgewogICAgICAgICBoY3J5cC0+SW5zdGFuY2UtPkRJTiA9ICoodWludDMyX3QgKikoaGNyeXAtPkluaXQuSGVhZGVyICsgaGNyeXAtPkNyeXBIZWFkZXJDb3VudCk7CiAgICAgICAgIGhjcnlwLT5DcnlwSGVhZGVyQ291bnQrKyA7CiAgICAgICB9Ci0gICAgICB3aGlsZSAobG9vcGNvdW50ZXIgPCA0VSkKKyAgICAgIC8qIElmIHRoZSBoZWFkZXIgc2l6ZSBpcyBhIG11bHRpcGxlIG9mIHdvcmRzICovCisgICAgICBpZiAoKHNpemVfaW5fYnl0ZXMgJSA0VSkgPT0gMFUpCiAgICAgICB7Ci0gICAgICAgIC8qIHBhZCB0aGUgZGF0YSB3aXRoIHplcm9zIHRvIGhhdmUgYSBjb21wbGV0ZSBibG9jayAqLwotICAgICAgICBoY3J5cC0+SW5zdGFuY2UtPkRJTiA9IDB4MFU7CisgICAgICAgIC8qIFBhZCB0aGUgZGF0YSB3aXRoIHplcm9zIHRvIGhhdmUgYSBjb21wbGV0ZSBibG9jayAqLworICAgICAgICB3aGlsZSAobG9vcGNvdW50ZXIgPCA0VSkKKyAgICAgICAgeworICAgICAgICAgIGhjcnlwLT5JbnN0YW5jZS0+RElOID0gMHgwVTsKKyAgICAgICAgICBsb29wY291bnRlcisrOworICAgICAgICB9CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIC8qIEVudGVyIGxhc3QgYnl0ZXMsIHBhZGRlZCB3aXRoIHplcm9lcyAqLworICAgICAgICB0bXAgPSAgKih1aW50MzJfdCAqKShoY3J5cC0+SW5pdC5IZWFkZXIgKyBoY3J5cC0+Q3J5cEhlYWRlckNvdW50KTsKKyAgICAgICAgdG1wICY9IG1hc2tbKGhjcnlwLT5Jbml0LkRhdGFUeXBlICogMlUpICsgKHNpemVfaW5fYnl0ZXMgJSA0VSldOworICAgICAgICBoY3J5cC0+SW5zdGFuY2UtPkRJTiA9IHRtcDsKICAgICAgICAgbG9vcGNvdW50ZXIrKzsKKyAgICAgICAgLyogUGFkIHRoZSBkYXRhIHdpdGggemVyb3MgdG8gaGF2ZSBhIGNvbXBsZXRlIGJsb2NrICovCisgICAgICAgIHdoaWxlIChsb29wY291bnRlciA8IDRVKQorICAgICAgICB7CisgICAgICAgICAgaGNyeXAtPkluc3RhbmNlLT5ESU4gPSAweDBVOworICAgICAgICAgIGxvb3Bjb3VudGVyKys7CisgICAgICAgIH0KICAgICAgIH0KICAgICAgIC8qIFdhaXQgZm9yIENDRiBJRkVNIHRvIGJlIHJhaXNlZCAqLwogICAgICAgaWYgKENSWVBfV2FpdE9uSUZFTUZsYWcoaGNyeXAsIFRpbWVvdXQpICE9IEhBTF9PSykKQEAgLTU3MjgsMTAgKzU3NjQsMTEgQEAKICAgICAgIF9fSEFMX0NSWVBfRU5BQkxFKGhjcnlwKTsKIAogICAgIH0KLSAgICBpZiAoKGhjcnlwLT5Jbml0LkhlYWRlclNpemUgJSA0VSkgPT0gMFUpCisgICAgLyogSWYgc2l6ZV9pbl9ieXRlcyBpcyBhIG11bHRpcGxlIG9mIGJsb2NrcyAoYSBtdWx0aXBsZSBvZiBmb3VyIDMyLWJpdHMgd29yZHMgKSAqLworICAgIGlmICgoc2l6ZV9pbl9ieXRlcyAlIDE2VSkgPT0gMFUpCiAgICAgewotICAgICAgLyogSGVhZGVyU2l6ZSAlNCwgbm8gcGFkZGluZyAqLwotICAgICAgZm9yIChsb29wY291bnRlciA9IDBVOyAobG9vcGNvdW50ZXIgPCBoY3J5cC0+SW5pdC5IZWFkZXJTaXplKTsgbG9vcGNvdW50ZXIgKz0gNFUpCisgICAgICAvKiBObyBwYWRkaW5nICovCisgICAgICBmb3IgKGxvb3Bjb3VudGVyID0gMFU7IChsb29wY291bnRlciA8IChzaXplX2luX2J5dGVzIC8gNFUpKTsgbG9vcGNvdW50ZXIgKz0gNFUpCiAgICAgICB7CiAgICAgICAgIC8qIFdyaXRlIHRoZSBpbnB1dCBibG9jayBpbiB0aGUgZGF0YSBpbnB1dCByZWdpc3RlciAqLwogICAgICAgICBoY3J5cC0+SW5zdGFuY2UtPkRJTlIgPSAqKHVpbnQzMl90ICopKGhjcnlwLT5Jbml0LkhlYWRlciArIGhjcnlwLT5DcnlwSGVhZGVyQ291bnQpOwpAQCAtNTc2Myw3ICs1ODAwLDcgQEAKICAgICBlbHNlCiAgICAgewogICAgICAgLypXcml0ZSBoZWFkZXIgYmxvY2sgaW4gdGhlIElOIEZJRk8gd2l0aG91dCBsYXN0IGJsb2NrICovCi0gICAgICBmb3IgKGxvb3Bjb3VudGVyID0gMFU7IChsb29wY291bnRlciA8ICgoaGNyeXAtPkluaXQuSGVhZGVyU2l6ZSkgLSAoaGNyeXAtPkluaXQuSGVhZGVyU2l6ZSAlIDRVKSkpOyBsb29wY291bnRlciArPSA0VSkKKyAgICAgIGZvciAobG9vcGNvdW50ZXIgPSAwVTsgKGxvb3Bjb3VudGVyIDwgKChzaXplX2luX2J5dGVzIC8gMTZVKSAqIDRVKSk7IGxvb3Bjb3VudGVyICs9IDRVKQogICAgICAgewogICAgICAgICAvKiBXcml0ZSB0aGUgaW5wdXQgYmxvY2sgaW4gdGhlIGRhdGEgaW5wdXQgcmVnaXN0ZXIgKi8KICAgICAgICAgaGNyeXAtPkluc3RhbmNlLT5ESU5SID0gKih1aW50MzJfdCAqKShoY3J5cC0+SW5pdC5IZWFkZXIgKyBoY3J5cC0+Q3J5cEhlYWRlckNvdW50KTsKQEAgLTU3OTEsMTcgKzU4MjgsMzUgQEAKICAgICAgICAgLyogQ2xlYXIgQ0NGIGZsYWcgKi8KICAgICAgICAgX19IQUxfQ1JZUF9DTEVBUl9GTEFHKGhjcnlwLCBDUllQX0NDRl9DTEVBUik7CiAgICAgICB9Ci0gICAgICAvKiAgTGFzdCBibG9jayBvcHRpb25hbGx5IHBhZCB0aGUgZGF0YSB3aXRoIHplcm9zKi8KLSAgICAgIGZvciAobG9vcGNvdW50ZXIgPSAwVTsgKGxvb3Bjb3VudGVyIDwgKGhjcnlwLT5Jbml0LkhlYWRlclNpemUgJSA0VSkpOyBsb29wY291bnRlcisrKQorICAgICAgLyogV3JpdGUgbGFzdCBjb21wbGV0ZSB3b3JkcyAqLworICAgICAgZm9yIChsb29wY291bnRlciA9IDBVOyAobG9vcGNvdW50ZXIgPCAoKHNpemVfaW5fYnl0ZXMgLyA0VSkgJSA0VSkpOyBsb29wY291bnRlcisrKQogICAgICAgewogICAgICAgICBoY3J5cC0+SW5zdGFuY2UtPkRJTlIgPSAqKHVpbnQzMl90ICopKGhjcnlwLT5Jbml0LkhlYWRlciArIGhjcnlwLT5DcnlwSGVhZGVyQ291bnQpOwogICAgICAgICBoY3J5cC0+Q3J5cEhlYWRlckNvdW50KysgOwogICAgICAgfQotICAgICAgd2hpbGUgKGxvb3Bjb3VudGVyIDwgNFUpCisgICAgICAvKiBJZiB0aGUgaGVhZGVyIHNpemUgaXMgYSBtdWx0aXBsZSBvZiB3b3JkcyAqLworICAgICAgaWYgKChzaXplX2luX2J5dGVzICUgNFUpID09IDBVKQogICAgICAgewotICAgICAgICAvKlBhZCB0aGUgZGF0YSB3aXRoIHplcm9zIHRvIGhhdmUgYSBjb21wbGV0ZSBibG9jayAqLwotICAgICAgICBoY3J5cC0+SW5zdGFuY2UtPkRJTlIgPSAweDBVOworICAgICAgICAvKiBQYWQgdGhlIGRhdGEgd2l0aCB6ZXJvcyB0byBoYXZlIGEgY29tcGxldGUgYmxvY2sgKi8KKyAgICAgICAgd2hpbGUgKGxvb3Bjb3VudGVyIDwgNFUpCisgICAgICAgIHsKKyAgICAgICAgICBoY3J5cC0+SW5zdGFuY2UtPkRJTlIgPSAweDBVOworICAgICAgICAgIGxvb3Bjb3VudGVyKys7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgLyogRW50ZXIgbGFzdCBieXRlcywgcGFkZGVkIHdpdGggemVyb2VzICovCisgICAgICAgIHRtcCA9ICAqKHVpbnQzMl90ICopKGhjcnlwLT5Jbml0LkhlYWRlciArIGhjcnlwLT5DcnlwSGVhZGVyQ291bnQpOworICAgICAgICB0bXAgJj0gbWFza1soaGNyeXAtPkluaXQuRGF0YVR5cGUgKiAyVSkgKyAoc2l6ZV9pbl9ieXRlcyAlIDRVKV07CisgICAgICAgIGhjcnlwLT5JbnN0YW5jZS0+RElOUiA9IHRtcDsKICAgICAgICAgbG9vcGNvdW50ZXIrKzsKKyAgICAgICAgLyogUGFkIHRoZSBkYXRhIHdpdGggemVyb3MgdG8gaGF2ZSBhIGNvbXBsZXRlIGJsb2NrICovCisgICAgICAgIHdoaWxlIChsb29wY291bnRlciA8IDRVKQorICAgICAgICB7CisgICAgICAgICAgaGNyeXAtPkluc3RhbmNlLT5ESU5SID0gMHgwVTsKKyAgICAgICAgICBsb29wY291bnRlcisrOworICAgICAgICB9CiAgICAgICB9CiAKICAgICAgIGlmIChDUllQX1dhaXRPbkNDRmxhZyhoY3J5cCwgVGltZW91dCkgIT0gSEFMX09LKQpAQCAtNTg1Miw5ICs1OTA3LDIzIEBACiB7CiAgIF9fSU8gdWludDMyX3QgY291bnQgID0gMFU7CiAgIHVpbnQzMl90IGxvb3Bjb3VudGVyOworICB1aW50MzJfdCBoZWFkZXJzaXplX2luX2J5dGVzOworICB1aW50MzJfdCB0bXA7CisgIHVpbnQzMl90IG1hc2tbMTJdID0gezB4MFUsIDB4RkYwMDAwMDBVLCAweEZGRkYwMDAwVSwgMHhGRkZGRkYwMFUsICAvKiAzMi1iaXQgZGF0YSB0eXBlICovCisgICAgICAgICAgICAgICAgICAgICAgIDB4MFUsIDB4MDAwMEZGMDBVLCAweDAwMDBGRkZGVSwgMHhGRjAwRkZGRlUsICAvKiAxNi1iaXQgZGF0YSB0eXBlICovCisgICAgICAgICAgICAgICAgICAgICAgIDB4MFUsIDB4MDAwMDAwRkZVLCAweDAwMDBGRkZGVSwgMHgwMEZGRkZGRlV9OyAvKiAgOC1iaXQgZGF0YSB0eXBlICovCiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqIEhlYWRlciBwaGFzZSBmb3IgR0NNL0dNQUMgb3IgQ0NNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgaWYgKChoY3J5cC0+SW5pdC5IZWFkZXJTaXplICE9IDBVKSkKKyAgaWYgKGhjcnlwLT5Jbml0LkhlYWRlcldpZHRoVW5pdCA9PSBDUllQX0hFQURFUldJRFRIVU5JVF9XT1JEKQorICB7CisgICAgaGVhZGVyc2l6ZV9pbl9ieXRlcyA9IGhjcnlwLT5Jbml0LkhlYWRlclNpemUgKiA0VTsKKyAgfQorICBlbHNlCisgIHsKKyAgICBoZWFkZXJzaXplX2luX2J5dGVzID0gaGNyeXAtPkluaXQuSGVhZGVyU2l6ZTsKKyAgfQorICAKKyAgaWYgKGhlYWRlcnNpemVfaW5fYnl0ZXMgIT0gMFUpCiAgIHsKIAogI2lmIGRlZmluZWQoQ1JZUCkKQEAgLTU4NjUsMTAgKzU5MzQsMTAgQEAKICAgICAvKiBFbmFibGUgdGhlIENSWVAgcGVyaXBoZXJhbCAqLwogICAgIF9fSEFMX0NSWVBfRU5BQkxFKGhjcnlwKTsKIAotICAgIGlmICgoaGNyeXAtPkluaXQuSGVhZGVyU2l6ZSAlIDRVKSA9PSAwVSkKKyAgICBpZiAoKGhlYWRlcnNpemVfaW5fYnl0ZXMgJSAxNlUpID09IDBVKQogICAgIHsKICAgICAgIC8qIEhlYWRlclNpemUgJTQsIG5vIHBhZGRpbmcgKi8KLSAgICAgIGZvciAobG9vcGNvdW50ZXIgPSAwVTsgKGxvb3Bjb3VudGVyIDwgaGNyeXAtPkluaXQuSGVhZGVyU2l6ZSk7IGxvb3Bjb3VudGVyICs9IDRVKQorICAgICAgZm9yIChsb29wY291bnRlciA9IDBVOyAobG9vcGNvdW50ZXIgPCAoaGVhZGVyc2l6ZV9pbl9ieXRlcyAvIDRVKSk7IGxvb3Bjb3VudGVyICs9IDRVKQogICAgICAgewogICAgICAgICBoY3J5cC0+SW5zdGFuY2UtPkRJTiA9ICoodWludDMyX3QgKikoaGNyeXAtPkluaXQuSGVhZGVyICsgaGNyeXAtPkNyeXBIZWFkZXJDb3VudCk7CiAgICAgICAgIGhjcnlwLT5DcnlwSGVhZGVyQ291bnQrKyA7CkBAIC01OTAzLDcgKzU5NzIsNyBAQAogICAgIGVsc2UKICAgICB7CiAgICAgICAvKldyaXRlIGhlYWRlciBibG9jayBpbiB0aGUgSU4gRklGTyB3aXRob3V0IGxhc3QgYmxvY2sgKi8KLSAgICAgIGZvciAobG9vcGNvdW50ZXIgPSAwVTsgKGxvb3Bjb3VudGVyIDwgKChoY3J5cC0+SW5pdC5IZWFkZXJTaXplKSAtIChoY3J5cC0+SW5pdC5IZWFkZXJTaXplICUgNFUpKSk7IGxvb3Bjb3VudGVyICs9IDRVKQorICAgICAgZm9yIChsb29wY291bnRlciA9IDBVOyAobG9vcGNvdW50ZXIgPCAoKGhlYWRlcnNpemVfaW5fYnl0ZXMgLyAxNlUpICogNFUpKTsgbG9vcGNvdW50ZXIgKz0gNFUpCiAgICAgICB7CiAgICAgICAgIGhjcnlwLT5JbnN0YW5jZS0+RElOID0gKih1aW50MzJfdCAqKShoY3J5cC0+SW5pdC5IZWFkZXIgKyBoY3J5cC0+Q3J5cEhlYWRlckNvdW50KTsKICAgICAgICAgaGNyeXAtPkNyeXBIZWFkZXJDb3VudCsrIDsKQEAgLTU5MzUsMTYgKzYwMDQsMzQgQEAKICAgICAgICAgfSB3aGlsZSAoSEFMX0lTX0JJVF9DTFIoaGNyeXAtPkluc3RhbmNlLT5TUiwgQ1JZUF9GTEFHX0lGRU0pKTsKICAgICAgIH0KICAgICAgIC8qICBMYXN0IGJsb2NrIG9wdGlvbmFsbHkgcGFkIHRoZSBkYXRhIHdpdGggemVyb3MqLwotICAgICAgZm9yIChsb29wY291bnRlciA9IDBVOyAobG9vcGNvdW50ZXIgPCAoaGNyeXAtPkluaXQuSGVhZGVyU2l6ZSAlIDRVKSk7IGxvb3Bjb3VudGVyKyspCisgICAgICBmb3IgKGxvb3Bjb3VudGVyID0gMFU7IChsb29wY291bnRlciA8ICgoaGVhZGVyc2l6ZV9pbl9ieXRlcyAvIDRVKSAlIDRVKSk7IGxvb3Bjb3VudGVyKyspCiAgICAgICB7CiAgICAgICAgIGhjcnlwLT5JbnN0YW5jZS0+RElOID0gKih1aW50MzJfdCAqKShoY3J5cC0+SW5pdC5IZWFkZXIgKyBoY3J5cC0+Q3J5cEhlYWRlckNvdW50KTsKICAgICAgICAgaGNyeXAtPkNyeXBIZWFkZXJDb3VudCsrIDsKICAgICAgIH0KLSAgICAgIHdoaWxlIChsb29wY291bnRlciA8IDRVKQorICAgICAgLyogSWYgdGhlIGhlYWRlciBzaXplIGlzIGEgbXVsdGlwbGUgb2Ygd29yZHMgKi8KKyAgICAgIGlmICgoaGVhZGVyc2l6ZV9pbl9ieXRlcyAlIDRVKSA9PSAwVSkKICAgICAgIHsKICAgICAgICAgLyogUGFkIHRoZSBkYXRhIHdpdGggemVyb3MgdG8gaGF2ZSBhIGNvbXBsZXRlIGJsb2NrICovCi0gICAgICAgIGhjcnlwLT5JbnN0YW5jZS0+RElOID0gMHgwVTsKKyAgICAgICAgd2hpbGUgKGxvb3Bjb3VudGVyIDwgNFUpCisgICAgICAgIHsKKyAgICAgICAgICBoY3J5cC0+SW5zdGFuY2UtPkRJTiA9IDB4MFU7CisgICAgICAgICAgbG9vcGNvdW50ZXIrKzsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICAvKiBFbnRlciBsYXN0IGJ5dGVzLCBwYWRkZWQgd2l0aCB6ZXJvZXMgKi8KKyAgICAgICAgdG1wID0gICoodWludDMyX3QgKikoaGNyeXAtPkluaXQuSGVhZGVyICsgaGNyeXAtPkNyeXBIZWFkZXJDb3VudCk7CisgICAgICAgIHRtcCAmPSBtYXNrWyhoY3J5cC0+SW5pdC5EYXRhVHlwZSAqIDJVKSArIChoZWFkZXJzaXplX2luX2J5dGVzICUgNFUpXTsKKyAgICAgICAgaGNyeXAtPkluc3RhbmNlLT5ESU4gPSB0bXA7CiAgICAgICAgIGxvb3Bjb3VudGVyKys7CisgICAgICAgIC8qIFBhZCB0aGUgZGF0YSB3aXRoIHplcm9zIHRvIGhhdmUgYSBjb21wbGV0ZSBibG9jayAqLworICAgICAgICB3aGlsZSAobG9vcGNvdW50ZXIgPCA0VSkKKyAgICAgICAgeworICAgICAgICAgIGhjcnlwLT5JbnN0YW5jZS0+RElOID0gMHgwVTsKKyAgICAgICAgICBsb29wY291bnRlcisrOworICAgICAgICB9CiAgICAgICB9CiAgICAgICAvKiBXYWl0IGZvciBJRkVNIHRvIGJlIHJhaXNlZCAqLwogICAgICAgY291bnQgPSBDUllQX1RJTUVPVVRfR0NNQ0NNSEVBREVSUEhBU0U7CkBAIC01OTk5LDEwICs2MDg2LDEwIEBACiAgICAgICAvKiBFbmFibGUgdGhlIENSWVAgcGVyaXBoZXJhbCAqLwogICAgICAgX19IQUxfQ1JZUF9FTkFCTEUoaGNyeXApOwogICAgIH0KLSAgICBpZiAoKGhjcnlwLT5Jbml0LkhlYWRlclNpemUgJSA0VSkgPT0gMFUpCisgICAgaWYgKChoZWFkZXJzaXplX2luX2J5dGVzICUgMTZVKSA9PSAwVSkKICAgICB7CiAgICAgICAvKiBIZWFkZXJTaXplICU0LCBubyBwYWRkaW5nICovCi0gICAgICBmb3IgKGxvb3Bjb3VudGVyID0gMFU7IChsb29wY291bnRlciA8IGhjcnlwLT5Jbml0LkhlYWRlclNpemUpOyBsb29wY291bnRlciArPSA0VSkKKyAgICAgIGZvciAobG9vcGNvdW50ZXIgPSAwVTsgKGxvb3Bjb3VudGVyIDwgKGhlYWRlcnNpemVfaW5fYnl0ZXMgLyA0VSkpOyBsb29wY291bnRlciArPSA0VSkKICAgICAgIHsKICAgICAgICAgLyogV3JpdGUgdGhlIGlucHV0IGJsb2NrIGluIHRoZSBkYXRhIGlucHV0IHJlZ2lzdGVyICovCiAgICAgICAgIGhjcnlwLT5JbnN0YW5jZS0+RElOUiA9ICoodWludDMyX3QgKikoaGNyeXAtPkluaXQuSGVhZGVyICsgaGNyeXAtPkNyeXBIZWFkZXJDb3VudCk7CkBAIC02MDQxLDcgKzYxMjgsNyBAQAogICAgIGVsc2UKICAgICB7CiAgICAgICAvKldyaXRlIGhlYWRlciBibG9jayBpbiB0aGUgSU4gRklGTyB3aXRob3V0IGxhc3QgYmxvY2sgKi8KLSAgICAgIGZvciAobG9vcGNvdW50ZXIgPSAwVTsgKGxvb3Bjb3VudGVyIDwgKChoY3J5cC0+SW5pdC5IZWFkZXJTaXplKSAtIChoY3J5cC0+SW5pdC5IZWFkZXJTaXplICUgNFUpKSk7IGxvb3Bjb3VudGVyICs9IDRVKQorICAgICAgZm9yIChsb29wY291bnRlciA9IDBVOyAobG9vcGNvdW50ZXIgPCAoKGhlYWRlcnNpemVfaW5fYnl0ZXMgLyAxNlUpICogNFUpKTsgbG9vcGNvdW50ZXIgKz0gNFUpCiAgICAgICB7CiAgICAgICAgIC8qIFdyaXRlIHRoZSBJbnB1dCBibG9jayBpbiB0aGUgRGF0YSBJbnB1dCByZWdpc3RlciAqLwogICAgICAgICBoY3J5cC0+SW5zdGFuY2UtPkRJTlIgPSAqKHVpbnQzMl90ICopKGhjcnlwLT5Jbml0LkhlYWRlciArIGhjcnlwLT5DcnlwSGVhZGVyQ291bnQpOwpAQCAtNjA3NywxOCArNjE2NCwzNSBAQAogICAgICAgICBfX0hBTF9DUllQX0NMRUFSX0ZMQUcoaGNyeXAsIENSWVBfQ0NGX0NMRUFSKTsKICAgICAgIH0KICAgICAgIC8qICBMYXN0IGJsb2NrIG9wdGlvbmFsbHkgcGFkIHRoZSBkYXRhIHdpdGggemVyb3MqLwotICAgICAgZm9yIChsb29wY291bnRlciA9IDBVOyAobG9vcGNvdW50ZXIgPCAoaGNyeXAtPkluaXQuSGVhZGVyU2l6ZSAlIDRVKSk7IGxvb3Bjb3VudGVyKyspCisgICAgICBmb3IgKGxvb3Bjb3VudGVyID0gMFU7IChsb29wY291bnRlciA8ICgoaGVhZGVyc2l6ZV9pbl9ieXRlcyAvNFUpICUgNFUpKTsgbG9vcGNvdW50ZXIrKykKICAgICAgIHsKICAgICAgICAgaGNyeXAtPkluc3RhbmNlLT5ESU5SID0gKih1aW50MzJfdCAqKShoY3J5cC0+SW5pdC5IZWFkZXIgKyBoY3J5cC0+Q3J5cEhlYWRlckNvdW50KTsKICAgICAgICAgaGNyeXAtPkNyeXBIZWFkZXJDb3VudCsrIDsKICAgICAgIH0KLSAgICAgIHdoaWxlIChsb29wY291bnRlciA8IDRVKQorICAgICAgLyogSWYgdGhlIGhlYWRlciBzaXplIGlzIGEgbXVsdGlwbGUgb2Ygd29yZHMgKi8KKyAgICAgIGlmICgoaGVhZGVyc2l6ZV9pbl9ieXRlcyAlIDRVKSA9PSAwVSkKICAgICAgIHsKICAgICAgICAgLyogUGFkIHRoZSBkYXRhIHdpdGggemVyb3MgdG8gaGF2ZSBhIGNvbXBsZXRlIGJsb2NrICovCi0gICAgICAgIGhjcnlwLT5JbnN0YW5jZS0+RElOUiA9IDB4MFU7Ci0gICAgICAgIGxvb3Bjb3VudGVyKys7CisgICAgICAgIHdoaWxlIChsb29wY291bnRlciA8IDRVKQorICAgICAgICB7CisgICAgICAgICAgaGNyeXAtPkluc3RhbmNlLT5ESU5SID0gMHgwVTsKKyAgICAgICAgICBsb29wY291bnRlcisrOworICAgICAgICB9CiAgICAgICB9Ci0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgLyogRW50ZXIgbGFzdCBieXRlcywgcGFkZGVkIHdpdGggemVyb2VzICovCisgICAgICAgIHRtcCA9ICAqKHVpbnQzMl90ICopKGhjcnlwLT5Jbml0LkhlYWRlciArIGhjcnlwLT5DcnlwSGVhZGVyQ291bnQpOworICAgICAgICB0bXAgJj0gbWFza1soaGNyeXAtPkluaXQuRGF0YVR5cGUgKiAyVSkgKyAoaGVhZGVyc2l6ZV9pbl9ieXRlcyAlIDRVKV07CisgICAgICAgIGhjcnlwLT5JbnN0YW5jZS0+RElOUiA9IHRtcDsKKyAgICAgICAgbG9vcGNvdW50ZXIrKzsKKyAgICAgICAgLyogUGFkIHRoZSBkYXRhIHdpdGggemVyb3MgdG8gaGF2ZSBhIGNvbXBsZXRlIGJsb2NrICovCisgICAgICAgIHdoaWxlIChsb29wY291bnRlciA8IDRVKQorICAgICAgICB7CisgICAgICAgICAgaGNyeXAtPkluc3RhbmNlLT5ESU5SID0gMHgwVTsKKyAgICAgICAgICBsb29wY291bnRlcisrOworICAgICAgICB9CisgICAgICB9CiAgICAgICAvKldhaXQgb24gQ0NGIGZsYWcqLwogICAgICAgY291bnQgPSBDUllQX1RJTUVPVVRfR0NNQ0NNSEVBREVSUEhBU0U7CiAgICAgICBkbwpAQCAtNjE0NywxMCArNjI1MSwyNSBAQAogICB1aW50MzJfdCBsYXN0d29yZHNpemU7CiAgIHVpbnQzMl90IG5wYmxiOwogI2VuZGlmCisgIHVpbnQzMl90IGhlYWRlcnNpemVfaW5fYnl0ZXM7CisgIHVpbnQzMl90IHRtcDsKKyAgdWludDMyX3QgbWFza1sxMl0gPSB7MHgwVSwgMHhGRjAwMDAwMFUsIDB4RkZGRjAwMDBVLCAweEZGRkZGRjAwVSwgIC8qIDMyLWJpdCBkYXRhIHR5cGUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgMHgwVSwgMHgwMDAwRkYwMFUsIDB4MDAwMEZGRkZVLCAweEZGMDBGRkZGVSwgIC8qIDE2LWJpdCBkYXRhIHR5cGUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgMHgwVSwgMHgwMDAwMDBGRlUsIDB4MDAwMEZGRkZVLCAweDAwRkZGRkZGVX07IC8qICA4LWJpdCBkYXRhIHR5cGUgKi8KKworICBpZiAoaGNyeXAtPkluaXQuSGVhZGVyV2lkdGhVbml0ID09IENSWVBfSEVBREVSV0lEVEhVTklUX1dPUkQpCisgIHsKKyAgICBoZWFkZXJzaXplX2luX2J5dGVzID0gaGNyeXAtPkluaXQuSGVhZGVyU2l6ZSAqIDRVOworICB9CisgIGVsc2UKKyAgeworICAgIGhlYWRlcnNpemVfaW5fYnl0ZXMgPSBoY3J5cC0+SW5pdC5IZWFkZXJTaXplOworICB9CisKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqIEhlYWRlciBwaGFzZSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKICNpZiBkZWZpbmVkKENSWVApCi0gIGlmIChoY3J5cC0+SW5pdC5IZWFkZXJTaXplID09ICBoY3J5cC0+Q3J5cEhlYWRlckNvdW50KQorICBpZiAoaGVhZGVyc2l6ZV9pbl9ieXRlcyA8PSAoKHVpbnQzMl90KShoY3J5cC0+Q3J5cEhlYWRlckNvdW50KSAqIDRVKSkKICAgewogICAgIC8qIERpc2FibGUgaW50ZXJydXB0cyAqLwogICAgIF9fSEFMX0NSWVBfRElTQUJMRV9JVChoY3J5cCwgQ1JZUF9JVF9JTkkpOwpAQCAtNjE3MCw3ICs2Mjg5LDcgQEAKICAgICAvKiBFbmFibGUgdGhlIENSWVAgcGVyaXBoZXJhbCAqLwogICAgIF9fSEFMX0NSWVBfRU5BQkxFKGhjcnlwKTsKICAgfQotICBlbHNlIGlmICgoKGhjcnlwLT5Jbml0LkhlYWRlclNpemUpIC0gKGhjcnlwLT5DcnlwSGVhZGVyQ291bnQpKSA+PSA0VSkKKyAgZWxzZSBpZiAoKChoZWFkZXJzaXplX2luX2J5dGVzIC8gNFUpIC0gKGhjcnlwLT5DcnlwSGVhZGVyQ291bnQpKSA+PSA0VSkKIAogICB7CiAgICAgLyogSGVhZGVyU2l6ZSAlNCwgbm8gcGFkZGluZyAqLwpAQCAtNjE4NiwyMSArNjMwNSw0MSBAQAogICBlbHNlCiAgIHsKICAgICAvKiAgTGFzdCBibG9jayBvcHRpb25hbGx5IHBhZCB0aGUgZGF0YSB3aXRoIHplcm9zKi8KLSAgICBmb3IgKGxvb3Bjb3VudGVyID0gMFU7IGxvb3Bjb3VudGVyIDwgKGhjcnlwLT5Jbml0LkhlYWRlclNpemUgJSA0VSk7IGxvb3Bjb3VudGVyKyspCisgICAgZm9yIChsb29wY291bnRlciA9IDBVOyBsb29wY291bnRlciA8ICgoaGVhZGVyc2l6ZV9pbl9ieXRlcyAvIDRVKSAlIDRVKTsgbG9vcGNvdW50ZXIrKykKICAgICB7CiAgICAgICBoY3J5cC0+SW5zdGFuY2UtPkRJTiA9ICoodWludDMyX3QgKikoaGNyeXAtPkluaXQuSGVhZGVyICsgaGNyeXAtPkNyeXBIZWFkZXJDb3VudCk7CiAgICAgICBoY3J5cC0+Q3J5cEhlYWRlckNvdW50KysgOwogICAgIH0KLSAgICB3aGlsZSAobG9vcGNvdW50ZXIgPCA0VSkKKyAgICBpZiAoKGhlYWRlcnNpemVfaW5fYnl0ZXMgJSA0VSkgPT0gMFUpCiAgICAgewogICAgICAgLyogUGFkIHRoZSBkYXRhIHdpdGggemVyb3MgdG8gaGF2ZSBhIGNvbXBsZXRlIGJsb2NrICovCisgICAgICB3aGlsZSAobG9vcGNvdW50ZXIgPCA0VSkKKyAgICAgIHsKKyAgICAgICAgaGNyeXAtPkluc3RhbmNlLT5ESU4gPSAweDBVOworICAgICAgICBsb29wY291bnRlcisrOworICAgICAgICBoY3J5cC0+Q3J5cEhlYWRlckNvdW50Kys7CisgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAvKiBFbnRlciBsYXN0IGJ5dGVzLCBwYWRkZWQgd2l0aCB6ZXJvcyAqLworICAgICAgdG1wID0gICoodWludDMyX3QgKikoaGNyeXAtPkluaXQuSGVhZGVyICsgaGNyeXAtPkNyeXBIZWFkZXJDb3VudCk7CisgICAgICB0bXAgJj0gbWFza1soaGNyeXAtPkluaXQuRGF0YVR5cGUgKiAyVSkgKyAoaGVhZGVyc2l6ZV9pbl9ieXRlcyAlIDRVKV07CisgICAgICBoY3J5cC0+SW5zdGFuY2UtPkRJTiA9IHRtcDsKKyAgICAgIGxvb3Bjb3VudGVyKys7CisgICAgICBoY3J5cC0+Q3J5cEhlYWRlckNvdW50Kys7CisgICAgICAvKiBQYWQgdGhlIGRhdGEgd2l0aCB6ZXJvcyB0byBoYXZlIGEgY29tcGxldGUgYmxvY2sgKi8KKyAgICB3aGlsZSAobG9vcGNvdW50ZXIgPCA0VSkKKyAgICB7CiAgICAgICBoY3J5cC0+SW5zdGFuY2UtPkRJTiA9IDB4MFU7CiAgICAgICBsb29wY291bnRlcisrOworICAgICAgICBoY3J5cC0+Q3J5cEhlYWRlckNvdW50Kys7CisgICAgICB9CiAgICAgfQogICB9CiAjZWxzZSAvKiBBRVMgKi8KIAotICBpZiAoaGNyeXAtPkluaXQuSGVhZGVyU2l6ZSA9PSAgaGNyeXAtPkNyeXBIZWFkZXJDb3VudCkKKyAgaWYgKGhlYWRlcnNpemVfaW5fYnl0ZXMgPD0gKCh1aW50MzJfdCkoaGNyeXAtPkNyeXBIZWFkZXJDb3VudCkgKiA0VSkpCiAgIHsKICAgICAvKiBTZXQgdGhlIHBoYXNlICovCiAgICAgaGNyeXAtPlBoYXNlID0gQ1JZUF9QSEFTRV9QUk9DRVNTOwpAQCAtNjI4NCw3ICs2NDIzLDcgQEAKICAgICAgIH0KICAgICB9CiAgIH0KLSAgZWxzZSBpZiAoKChoY3J5cC0+SW5pdC5IZWFkZXJTaXplKSAtIChoY3J5cC0+Q3J5cEhlYWRlckNvdW50KSkgPj0gNFUpCisgIGVsc2UgaWYgKCgoaGVhZGVyc2l6ZV9pbl9ieXRlcyAvIDRVKSAtIChoY3J5cC0+Q3J5cEhlYWRlckNvdW50KSkgPj0gNFUpCiAgIHsKICAgICAvKiBXcml0ZSB0aGUgaW5wdXQgYmxvY2sgaW4gdGhlIElOIEZJRk8gKi8KICAgICBoY3J5cC0+SW5zdGFuY2UtPkRJTlIgID0gKih1aW50MzJfdCAqKShoY3J5cC0+SW5pdC5IZWFkZXIgKyBoY3J5cC0+Q3J5cEhlYWRlckNvdW50KTsKQEAgLTYyOTksMTYgKzY0MzgsMzcgQEAKICAgZWxzZSAvKkhlYWRlclNpemUgPCA0IG9yIEhlYWRlclNpemUgPjQgJiBIZWFkZXJTaXplICU0ICE9IDAqLwogICB7CiAgICAgLyogIExhc3QgYmxvY2sgb3B0aW9uYWxseSBwYWQgdGhlIGRhdGEgd2l0aCB6ZXJvcyovCi0gICAgZm9yIChsb29wY291bnRlciA9IDBVOyBsb29wY291bnRlciA8IChoY3J5cC0+SW5pdC5IZWFkZXJTaXplICUgNFUpOyBsb29wY291bnRlcisrKQorICAgIGZvciAobG9vcGNvdW50ZXIgPSAwVTsgbG9vcGNvdW50ZXIgPCAoKGhlYWRlcnNpemVfaW5fYnl0ZXMgLyA0VSkgJSA0VSk7IGxvb3Bjb3VudGVyKyspCiAgICAgewogICAgICAgaGNyeXAtPkluc3RhbmNlLT5ESU5SID0gKih1aW50MzJfdCAqKShoY3J5cC0+SW5pdC5IZWFkZXIgKyBoY3J5cC0+Q3J5cEhlYWRlckNvdW50KTsKICAgICAgIGhjcnlwLT5DcnlwSGVhZGVyQ291bnQrKyA7CiAgICAgfQorICAgIC8qIElmIHRoZSBoZWFkZXIgc2l6ZSBpcyBhIG11bHRpcGxlIG9mIHdvcmRzICovCisgICAgaWYgKChoZWFkZXJzaXplX2luX2J5dGVzICUgNFUpID09IDBVKQorICAgIHsKKyAgICAgIC8qIFBhZCB0aGUgZGF0YSB3aXRoIHplcm9zIHRvIGhhdmUgYSBjb21wbGV0ZSBibG9jayAqLworICAgICAgd2hpbGUgKGxvb3Bjb3VudGVyIDwgNFUpCisgICAgICB7CisgICAgICAgIGhjcnlwLT5JbnN0YW5jZS0+RElOUiA9IDB4MFU7CisgICAgICAgIGxvb3Bjb3VudGVyKys7CisgICAgICAgIGhjcnlwLT5DcnlwSGVhZGVyQ291bnQrKzsKKyAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIC8qIEVudGVyIGxhc3QgYnl0ZXMsIHBhZGRlZCB3aXRoIHplcm9zICovCisgICAgICB0bXAgPSAgKih1aW50MzJfdCAqKShoY3J5cC0+SW5pdC5IZWFkZXIgKyBoY3J5cC0+Q3J5cEhlYWRlckNvdW50KTsKKyAgICAgIHRtcCAmPSBtYXNrWyhoY3J5cC0+SW5pdC5EYXRhVHlwZSAqIDJVKSArIChoZWFkZXJzaXplX2luX2J5dGVzICUgNFUpXTsKKyAgICAgIGhjcnlwLT5JbnN0YW5jZS0+RElOUiA9IHRtcDsKKyAgICAgIGxvb3Bjb3VudGVyKys7CisgICAgICBoY3J5cC0+Q3J5cEhlYWRlckNvdW50Kys7CisgICAgICAvKiBQYWQgdGhlIGRhdGEgd2l0aCB6ZXJvcyB0byBoYXZlIGEgY29tcGxldGUgYmxvY2sgKi8KICAgICB3aGlsZSAobG9vcGNvdW50ZXIgPCA0VSkKICAgICB7Ci0gICAgICAvKiBwYWQgdGhlIGRhdGEgd2l0aCB6ZXJvcyB0byBoYXZlIGEgY29tcGxldGUgYmxvY2sgKi8KICAgICAgIGhjcnlwLT5JbnN0YW5jZS0+RElOUiA9IDB4MFU7CiAgICAgICBsb29wY291bnRlcisrOworICAgICAgICBoY3J5cC0+Q3J5cEhlYWRlckNvdW50Kys7CisgICAgICB9CiAgICAgfQogICB9CiAjZW5kaWYgLyogRW5kIEFFUyBvciBDUllQICovCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmNHh4X2hhbF9jcnlwX2V4LmMgYi9TcmMvc3RtMzJmNHh4X2hhbF9jcnlwX2V4LmMKaW5kZXggMzY5YTAzYy4uNDNiMjM4YSAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZjR4eF9oYWxfY3J5cF9leC5jCisrKyBiL1NyYy9zdG0zMmY0eHhfaGFsX2NyeXBfZXguYwpAQCAtMTI4LDEwICsxMjgsMTcgQEAKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9DUllQRXhfQUVTR0NNX0dlbmVyYXRlQXV0aFRBRyhDUllQX0hhbmRsZVR5cGVEZWYgKmhjcnlwLCB1aW50MzJfdCAqQXV0aFRhZywgdWludDMyX3QgVGltZW91dCkKIHsKICAgdWludDMyX3QgdGlja3N0YXJ0OworICAvKiBBc3N1bWUgZmlyc3QgSW5pdC5IZWFkZXJTaXplIGlzIGluIHdvcmRzICovCiAgIHVpbnQ2NF90IGhlYWRlcmxlbmd0aCA9ICh1aW50NjRfdCkoaGNyeXAtPkluaXQuSGVhZGVyU2l6ZSkgKiAzMlU7IC8qIEhlYWRlciBsZW5ndGggaW4gYml0cyAqLwotICB1aW50NjRfdCBpbnB1dGxlbmd0aCA9ICh1aW50NjRfdCloY3J5cC0+U2l6ZXNTdW0gKiA4VTsgLyogaW5wdXQgbGVuZ3RoIGluIGJpdHMgKi8KKyAgdWludDY0X3QgaW5wdXRsZW5ndGggPSAodWludDY0X3QpaGNyeXAtPlNpemVzU3VtICogOFU7IC8qIElucHV0IGxlbmd0aCBpbiBiaXRzICovCiAgIHVpbnQzMl90IHRhZ2FkZHIgPSAodWludDMyX3QpQXV0aFRhZzsKIAorICAvKiBDb3JyZWN0IGhlYWRlcmxlbmd0aCBpZiBJbml0LkhlYWRlclNpemUgaXMgYWN0dWFsbHkgaW4gYnl0ZXMgKi8KKyAgaWYgKGhjcnlwLT5Jbml0LkhlYWRlcldpZHRoVW5pdCA9PSBDUllQX0hFQURFUldJRFRIVU5JVF9CWVRFKQorICB7CisgICAgaGVhZGVybGVuZ3RoIC89IDRVOworICB9CisKICAgaWYgKGhjcnlwLT5TdGF0ZSA9PSBIQUxfQ1JZUF9TVEFURV9SRUFEWSkKICAgewogICAgIC8qIFByb2Nlc3MgbG9ja2VkICovCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmNHh4X2hhbF9kYWMuYyBiL1NyYy9zdG0zMmY0eHhfaGFsX2RhYy5jCmluZGV4IDg1MGY4MDkuLmI0YWEzN2QgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmY0eHhfaGFsX2RhYy5jCisrKyBiL1NyYy9zdG0zMmY0eHhfaGFsX2RhYy5jCkBAIC0zLDEyNSArMywxMzggQEAKICAgKiBAZmlsZSAgICBzdG0zMmY0eHhfaGFsX2RhYy5jCiAgICogQGF1dGhvciAgTUNEIEFwcGxpY2F0aW9uIFRlYW0KICAgKiBAYnJpZWYgICBEQUMgSEFMIG1vZHVsZSBkcml2ZXIuCi0gICogICAgICAgICBUaGlzIGZpbGUgcHJvdmlkZXMgZmlybXdhcmUgZnVuY3Rpb25zIHRvIG1hbmFnZSB0aGUgZm9sbG93aW5nIAorICAqICAgICAgICAgVGhpcyBmaWxlIHByb3ZpZGVzIGZpcm13YXJlIGZ1bmN0aW9ucyB0byBtYW5hZ2UgdGhlIGZvbGxvd2luZwogICAqICAgICAgICAgZnVuY3Rpb25hbGl0aWVzIG9mIHRoZSBEaWdpdGFsIHRvIEFuYWxvZyBDb252ZXJ0ZXIgKERBQykgcGVyaXBoZXJhbDoKICAgKiAgICAgICAgICAgKyBJbml0aWFsaXphdGlvbiBhbmQgZGUtaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zCiAgICogICAgICAgICAgICsgSU8gb3BlcmF0aW9uIGZ1bmN0aW9ucwogICAqICAgICAgICAgICArIFBlcmlwaGVyYWwgQ29udHJvbCBmdW5jdGlvbnMKLSAgKiAgICAgICAgICAgKyBQZXJpcGhlcmFsIFN0YXRlIGFuZCBFcnJvcnMgZnVuY3Rpb25zICAgICAgCi0gICogICAgIAorICAqICAgICAgICAgICArIFBlcmlwaGVyYWwgU3RhdGUgYW5kIEVycm9ycyBmdW5jdGlvbnMKICAgKgotICBAdmVyYmF0aW0gICAgICAKKyAgKgorICBAdmVyYmF0aW0KICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgICAgICAgICAgICAgICAgIyMjIyMgREFDIFBlcmlwaGVyYWwgZmVhdHVyZXMgIyMjIyMKICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgWy4uXSAgICAgICAgCi0gICAgICAqKiogREFDIENoYW5uZWxzICoqKgotICAgICAgPT09PT09PT09PT09PT09PT09PT0gIAogICAgIFsuLl0KLSAgICBUaGUgZGV2aWNlIGludGVncmF0ZXMgdHdvIDEyLWJpdCBEaWdpdGFsIEFuYWxvZyBDb252ZXJ0ZXJzIHRoYXQgY2FuIAotICAgIGJlIHVzZWQgaW5kZXBlbmRlbnRseSBvciBzaW11bHRhbmVvdXNseSAoZHVhbCBtb2RlKToKKyAgICAgICoqKiBEQUMgQ2hhbm5lbHMgKioqCisgICAgICA9PT09PT09PT09PT09PT09PT09PQorICAgIFsuLl0KKyAgICBTVE0zMkY0IGRldmljZXMgaW50ZWdyYXRlIHR3byAxMi1iaXQgRGlnaXRhbCBBbmFsb2cgQ29udmVydGVycworCisgICAgVGhlIDIgY29udmVydGVycyAoaS5lLiBjaGFubmVsMSAmIGNoYW5uZWwyKQorICAgIGNhbiBiZSB1c2VkIGluZGVwZW5kZW50bHkgb3Igc2ltdWx0YW5lb3VzbHkgKGR1YWwgbW9kZSk6CiAgICAgICAoIykgREFDIGNoYW5uZWwxIHdpdGggREFDX09VVDEgKFBBNCkgYXMgb3V0cHV0CiAgICAgICAoIykgREFDIGNoYW5uZWwyIHdpdGggREFDX09VVDIgKFBBNSkgYXMgb3V0cHV0Ci0gICAgICAKKwogICAgICAgKioqIERBQyBUcmlnZ2VycyAqKioKICAgICAgID09PT09PT09PT09PT09PT09PT09CiAgICAgWy4uXQogICAgIERpZ2l0YWwgdG8gQW5hbG9nIGNvbnZlcnNpb24gY2FuIGJlIG5vbi10cmlnZ2VyZWQgdXNpbmcgREFDX1RSSUdHRVJfTk9ORQotICAgIGFuZCBEQUNfT1VUMS9EQUNfT1VUMiBpcyBhdmFpbGFibGUgb25jZSB3cml0aW5nIHRvIERIUnggcmVnaXN0ZXIuIAotICAgIFsuLl0gCisgICAgYW5kIERBQ19PVVQxL0RBQ19PVVQyIGlzIGF2YWlsYWJsZSBvbmNlIHdyaXRpbmcgdG8gREhSeCByZWdpc3Rlci4KKyAgICBbLi5dCiAgICAgRGlnaXRhbCB0byBBbmFsb2cgY29udmVyc2lvbiBjYW4gYmUgdHJpZ2dlcmVkIGJ5OgotICAgICAgKCMpIEV4dGVybmFsIGV2ZW50OiBFWFRJIExpbmUgOSAoYW55IEdQSU94X1BpbjkpIHVzaW5nIERBQ19UUklHR0VSX0VYVF9JVDkuCi0gICAgICAgICAgVGhlIHVzZWQgcGluIChHUElPeF9QaW45KSBtdXN0IGJlIGNvbmZpZ3VyZWQgaW4gaW5wdXQgbW9kZS4KLSAgCi0gICAgICAoIykgVGltZXJzIFRSR086IFRJTTIsIFRJTTQsIFRJTTUsIFRJTTYsIFRJTTcgYW5kIFRJTTggCisgICAgICAoIykgRXh0ZXJuYWwgZXZlbnQ6IEVYVEkgTGluZSA5IChhbnkgR1BJT3hfUElOXzkpIHVzaW5nIERBQ19UUklHR0VSX0VYVF9JVDkuCisgICAgICAgICAgVGhlIHVzZWQgcGluIChHUElPeF9QSU5fOSkgbXVzdCBiZSBjb25maWd1cmVkIGluIGlucHV0IG1vZGUuCisKKyAgICAgICgjKSBUaW1lcnMgVFJHTzogVElNMiwgVElNNCwgVElNNSwgVElNNiwgVElNNyBhbmQgVElNOAogICAgICAgICAgIChEQUNfVFJJR0dFUl9UMl9UUkdPLCBEQUNfVFJJR0dFUl9UNF9UUkdPLi4uKQotICAKKwogICAgICAgKCMpIFNvZnR3YXJlIHVzaW5nIERBQ19UUklHR0VSX1NPRlRXQVJFCi0gIAorCiAgICAgICAqKiogREFDIEJ1ZmZlciBtb2RlIGZlYXR1cmUgKioqCi0gICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IAotICAgICAgWy4uXSAKLSAgICAgIEVhY2ggREFDIGNoYW5uZWwgaW50ZWdyYXRlcyBhbiBvdXRwdXQgYnVmZmVyIHRoYXQgY2FuIGJlIHVzZWQgdG8gCisgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgICBbLi5dCisgICAgICBFYWNoIERBQyBjaGFubmVsIGludGVncmF0ZXMgYW4gb3V0cHV0IGJ1ZmZlciB0aGF0IGNhbiBiZSB1c2VkIHRvCiAgICAgICByZWR1Y2UgdGhlIG91dHB1dCBpbXBlZGFuY2UsIGFuZCB0byBkcml2ZSBleHRlcm5hbCBsb2FkcyBkaXJlY3RseQogICAgICAgd2l0aG91dCBoYXZpbmcgdG8gYWRkIGFuIGV4dGVybmFsIG9wZXJhdGlvbmFsIGFtcGxpZmllci4KLSAgICAgIFRvIGVuYWJsZSwgdGhlIG91dHB1dCBidWZmZXIgdXNlICAKKyAgICAgIFRvIGVuYWJsZSwgdGhlIG91dHB1dCBidWZmZXIgdXNlCiAgICAgICBzQ29uZmlnLkRBQ19PdXRwdXRCdWZmZXIgPSBEQUNfT1VUUFVUQlVGRkVSX0VOQUJMRTsKLSAgICAgIFsuLl0gICAgICAgICAgIAotICAgICAgKEApIFJlZmVyIHRvIHRoZSBkZXZpY2UgZGF0YXNoZWV0IGZvciBtb3JlIGRldGFpbHMgYWJvdXQgb3V0cHV0IAorICAgICAgWy4uXQorICAgICAgKEApIFJlZmVyIHRvIHRoZSBkZXZpY2UgZGF0YXNoZWV0IGZvciBtb3JlIGRldGFpbHMgYWJvdXQgb3V0cHV0CiAgICAgICAgICAgaW1wZWRhbmNlIHZhbHVlIHdpdGggYW5kIHdpdGhvdXQgb3V0cHV0IGJ1ZmZlci4KLSAgICAgICAgICAgIAorCiAgICAgICAgKioqIERBQyB3YXZlIGdlbmVyYXRpb24gZmVhdHVyZSAqKioKLSAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAKLSAgICAgICBbLi5dICAgICAKKyAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgICAgIFsuLl0KICAgICAgICBCb3RoIERBQyBjaGFubmVscyBjYW4gYmUgdXNlZCB0byBnZW5lcmF0ZQotICAgICAgICAgKCMpIE5vaXNlIHdhdmUgCisgICAgICAgICAoIykgTm9pc2Ugd2F2ZQogICAgICAgICAgKCMpIFRyaWFuZ2xlIHdhdmUKLSAgICAgICAgICAgIAorCiAgICAgICAgKioqIERBQyBkYXRhIGZvcm1hdCAqKioKICAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PQotICAgICAgIFsuLl0gICAKKyAgICAgICBbLi5dCiAgICAgICAgVGhlIERBQyBkYXRhIGZvcm1hdCBjYW4gYmU6CiAgICAgICAgICAoIykgOC1iaXQgcmlnaHQgYWxpZ25tZW50IHVzaW5nIERBQ19BTElHTl84Ql9SCiAgICAgICAgICAoIykgMTItYml0IGxlZnQgYWxpZ25tZW50IHVzaW5nIERBQ19BTElHTl8xMkJfTAogICAgICAgICAgKCMpIDEyLWJpdCByaWdodCBhbGlnbm1lbnQgdXNpbmcgREFDX0FMSUdOXzEyQl9SCi0gIAotICAgICAgICoqKiBEQUMgZGF0YSB2YWx1ZSB0byB2b2x0YWdlIGNvcnJlc3BvbmRlbmNlICoqKiAgCi0gICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IAotICAgICAgIFsuLl0gCi0gICAgICAgVGhlIGFuYWxvZyBvdXRwdXQgdm9sdGFnZSBvbiBlYWNoIERBQyBjaGFubmVsIHBpbiBpcyBkZXRlcm1pbmVkCi0gICAgICAgYnkgdGhlIGZvbGxvd2luZyBlcXVhdGlvbjogCi0gICAgICAgREFDX09VVHggPSBWUkVGKyAqIERPUiAvIDQwOTUKLSAgICAgICB3aXRoICBET1IgaXMgdGhlIERhdGEgT3V0cHV0IFJlZ2lzdGVyCi0gICAgICAgICAgVkVGKyBpcyB0aGUgaW5wdXQgdm9sdGFnZSByZWZlcmVuY2UgKHJlZmVyIHRvIHRoZSBkZXZpY2UgZGF0YXNoZWV0KQotICAgICAgICBlLmcuIFRvIHNldCBEQUNfT1VUMSB0byAwLjdWLCB1c2UKLSAgICAgICAgICBBc3N1bWluZyB0aGF0IFZSRUYrID0gMy4zViwgREFDX09VVDEgPSAoMy4zICogODY4KSAvIDQwOTUgPSAwLjdWCi0gIAotICAgICAgICoqKiBETUEgcmVxdWVzdHMgICoqKgotICAgICAgID09PT09PT09PT09PT09PT09PT09PQotICAgICAgIFsuLl0gICAgCi0gICAgICAgQSBETUExIHJlcXVlc3QgY2FuIGJlIGdlbmVyYXRlZCB3aGVuIGFuIGV4dGVybmFsIHRyaWdnZXIgKGJ1dCBub3QKLSAgICAgICBhIHNvZnR3YXJlIHRyaWdnZXIpIG9jY3VycyBpZiBETUExIHJlcXVlc3RzIGFyZSBlbmFibGVkIHVzaW5nCi0gICAgICAgSEFMX0RBQ19TdGFydF9ETUEoKQorCisgICAgICAgKioqIERBQyBkYXRhIHZhbHVlIHRvIHZvbHRhZ2UgY29ycmVzcG9uZGVuY2UgKioqCisgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgWy4uXQorICAgICAgIFRoZSBhbmFsb2cgb3V0cHV0IHZvbHRhZ2Ugb24gZWFjaCBEQUMgY2hhbm5lbCBwaW4gaXMgZGV0ZXJtaW5lZAorICAgICAgIGJ5IHRoZSBmb2xsb3dpbmcgZXF1YXRpb246CisgICAgICAgWy4uXQorICAgICAgIERBQ19PVVR4ID0gVlJFRisgKiBET1IgLyA0MDk1CisgICAgICAgKCspIHdpdGggIERPUiBpcyB0aGUgRGF0YSBPdXRwdXQgUmVnaXN0ZXIKKyAgICAgICBbLi5dCisgICAgICAgICAgVlJFRisgaXMgdGhlIGlucHV0IHZvbHRhZ2UgcmVmZXJlbmNlIChyZWZlciB0byB0aGUgZGV2aWNlIGRhdGFzaGVldCkKKyAgICAgICBbLi5dCisgICAgICAgIGUuZy4gVG8gc2V0IERBQ19PVVQxIHRvIDAuN1YsIHVzZQorICAgICAgICgrKSBBc3N1bWluZyB0aGF0IFZSRUYrID0gMy4zViwgREFDX09VVDEgPSAoMy4zICogODY4KSAvIDQwOTUgPSAwLjdWCisKKyAgICAgICAqKiogRE1BIHJlcXVlc3RzICoqKgorICAgICAgID09PT09PT09PT09PT09PT09PT09PQorICAgICAgIFsuLl0KKyAgICAgICBBIERNQSByZXF1ZXN0IGNhbiBiZSBnZW5lcmF0ZWQgd2hlbiBhbiBleHRlcm5hbCB0cmlnZ2VyIChidXQgbm90IGEgc29mdHdhcmUgdHJpZ2dlcikKKyAgICAgICBvY2N1cnMgaWYgRE1BMSByZXF1ZXN0cyBhcmUgZW5hYmxlZCB1c2luZyBIQUxfREFDX1N0YXJ0X0RNQSgpLgogICAgICAgIERNQTEgcmVxdWVzdHMgYXJlIG1hcHBlZCBhcyBmb2xsb3dpbmc6Ci0gICAgICAgICAoIykgREFDIGNoYW5uZWwxIDogbWFwcGVkIG9uIERNQTEgU3RyZWFtNSBjaGFubmVsNyB3aGljaCBtdXN0IGJlIAotICAgICAgICAgICAgIGFscmVhZHkgY29uZmlndXJlZAotICAgICAgICAgKCMpIERBQyBjaGFubmVsMiA6IG1hcHBlZCBvbiBETUExIFN0cmVhbTYgY2hhbm5lbDcgd2hpY2ggbXVzdCBiZSAKLSAgICAgICAgICAgICBhbHJlYWR5IGNvbmZpZ3VyZWQKLSAgICAgICAKLSAgICAtQC0gRm9yIER1YWwgbW9kZSBhbmQgc3BlY2lmaWMgc2lnbmFsIChUcmlhbmdsZSBhbmQgbm9pc2UpIGdlbmVyYXRpb24gcGxlYXNlIAotICAgICAgICByZWZlciB0byBFeHRlbnNpb24gRmVhdHVyZXMgRHJpdmVyIGRlc2NyaXB0aW9uICAgICAgICAKLSAgCi0gICAgICAKKyAgICAgICgjKSBEQUMgY2hhbm5lbDEgbWFwcGVkIG9uIERNQTEgU3RyZWFtNSBjaGFubmVsNyB3aGljaCBtdXN0IGJlIAorICAgICAgICAgIGFscmVhZHkgY29uZmlndXJlZAorICAgICAgKCMpIERBQyBjaGFubmVsMiBtYXBwZWQgb24gRE1BMSBTdHJlYW02IGNoYW5uZWw3IHdoaWNoIG11c3QgYmUgCisgICAgICAgICAgYWxyZWFkeSBjb25maWd1cmVkCisKKyAgICAgWy4uXQorICAgIChAKSBGb3IgRHVhbCBtb2RlIGFuZCBzcGVjaWZpYyBzaWduYWwgKFRyaWFuZ2xlIGFuZCBub2lzZSkgZ2VuZXJhdGlvbiBwbGVhc2UKKyAgICAgICAgcmVmZXIgdG8gRXh0ZW5kZWQgRmVhdHVyZXMgRHJpdmVyIGRlc2NyaXB0aW9uCisKICAgICAgICAgICAgICAgICAgICAgICAjIyMjIyBIb3cgdG8gdXNlIHRoaXMgZHJpdmVyICMjIyMjCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgIFsuLl0gICAgICAgICAgCisgICAgWy4uXQogICAgICAgKCspIERBQyBBUEIgY2xvY2sgbXVzdCBiZSBlbmFibGVkIHRvIGdldCB3cml0ZSBhY2Nlc3MgdG8gREFDCiAgICAgICAgICAgcmVnaXN0ZXJzIHVzaW5nIEhBTF9EQUNfSW5pdCgpCiAgICAgICAoKykgQ29uZmlndXJlIERBQ19PVVR4IChEQUNfT1VUMTogUEE0LCBEQUNfT1VUMjogUEE1KSBpbiBhbmFsb2cgbW9kZS4KICAgICAgICgrKSBDb25maWd1cmUgdGhlIERBQyBjaGFubmVsIHVzaW5nIEhBTF9EQUNfQ29uZmlnQ2hhbm5lbCgpIGZ1bmN0aW9uLgotICAgICAgKCspIEVuYWJsZSB0aGUgREFDIGNoYW5uZWwgdXNpbmcgSEFMX0RBQ19TdGFydCgpIG9yIEhBTF9EQUNfU3RhcnRfRE1BIGZ1bmN0aW9ucworICAgICAgKCspIEVuYWJsZSB0aGUgREFDIGNoYW5uZWwgdXNpbmcgSEFMX0RBQ19TdGFydCgpIG9yIEhBTF9EQUNfU3RhcnRfRE1BKCkgZnVuY3Rpb25zLgorCiAKICAgICAgKioqIFBvbGxpbmcgbW9kZSBJTyBvcGVyYXRpb24gKioqCiAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICBbLi5dICAgIAotICAgICAgICgrKSBTdGFydCB0aGUgREFDIHBlcmlwaGVyYWwgdXNpbmcgSEFMX0RBQ19TdGFydCgpIAorICAgICBbLi5dCisgICAgICAgKCspIFN0YXJ0IHRoZSBEQUMgcGVyaXBoZXJhbCB1c2luZyBIQUxfREFDX1N0YXJ0KCkKICAgICAgICAoKykgVG8gcmVhZCB0aGUgREFDIGxhc3QgZGF0YSBvdXRwdXQgdmFsdWUsIHVzZSB0aGUgSEFMX0RBQ19HZXRWYWx1ZSgpIGZ1bmN0aW9uLgogICAgICAgICgrKSBTdG9wIHRoZSBEQUMgcGVyaXBoZXJhbCB1c2luZyBIQUxfREFDX1N0b3AoKQotICAgICAgIAotICAgICAqKiogRE1BIG1vZGUgSU8gb3BlcmF0aW9uICoqKiAgICAKKworICAgICAqKiogRE1BIG1vZGUgSU8gb3BlcmF0aW9uICoqKgogICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgWy4uXSAgICAKLSAgICAgICAoKykgU3RhcnQgdGhlIERBQyBwZXJpcGhlcmFsIHVzaW5nIEhBTF9EQUNfU3RhcnRfRE1BKCksIGF0IHRoaXMgc3RhZ2UgdGhlIHVzZXIgc3BlY2lmeSB0aGUgbGVuZ3RoIAotICAgICAgICAgICBvZiBkYXRhIHRvIGJlIHRyYW5zZmVycmVkIGF0IGVhY2ggZW5kIG9mIGNvbnZlcnNpb24gCi0gICAgICAgKCspIEF0IFRoZSBlbmQgb2YgZGF0YSB0cmFuc2ZlciBIQUxfREFDX0NvbnZDcGx0Q2FsbGJhY2tDaDEoKW9yIEhBTF9EQUNfQ29udkNwbHRDYWxsYmFja0NoMigpICAKLSAgICAgICAgICAgZnVuY3Rpb24gaXMgZXhlY3V0ZWQgYW5kIHVzZXIgY2FuIGFkZCBoaXMgb3duIGNvZGUgYnkgY3VzdG9taXphdGlvbiBvZiBmdW5jdGlvbiBwb2ludGVyIAotICAgICAgICAgICBIQUxfREFDX0NvbnZDcGx0Q2FsbGJhY2tDaDEgb3IgSEFMX0RBQ19Db252Q3BsdENhbGxiYWNrQ2gyCi0gICAgICAgKCspIEluIGNhc2Ugb2YgdHJhbnNmZXIgRXJyb3IsIEhBTF9EQUNfRXJyb3JDYWxsYmFja0NoMSgpIGZ1bmN0aW9uIGlzIGV4ZWN1dGVkIGFuZCB1c2VyIGNhbiAKKyAgICAgWy4uXQorICAgICAgICgrKSBTdGFydCB0aGUgREFDIHBlcmlwaGVyYWwgdXNpbmcgSEFMX0RBQ19TdGFydF9ETUEoKSwgYXQgdGhpcyBzdGFnZSB0aGUgdXNlciBzcGVjaWZ5IHRoZSBsZW5ndGgKKyAgICAgICAgICAgb2YgZGF0YSB0byBiZSB0cmFuc2ZlcnJlZCBhdCBlYWNoIGVuZCBvZiBjb252ZXJzaW9uCisgICAgICAgICAgIEZpcnN0IGlzc3VlZCB0cmlnZ2VyIHdpbGwgc3RhcnQgdGhlIGNvbnZlcnNpb24gb2YgdGhlIHZhbHVlIHByZXZpb3VzbHkgc2V0IGJ5IEhBTF9EQUNfU2V0VmFsdWUoKS4KKyAgICAgICAoKykgQXQgdGhlIG1pZGRsZSBvZiBkYXRhIHRyYW5zZmVyIEhBTF9EQUNfQ29udkhhbGZDcGx0Q2FsbGJhY2tDaDEoKSBvciBIQUxfREFDRXhfQ29udkhhbGZDcGx0Q2FsbGJhY2tDaDIoKQorICAgICAgICAgICBmdW5jdGlvbiBpcyBleGVjdXRlZCBhbmQgdXNlciBjYW4gYWRkIGhpcyBvd24gY29kZSBieSBjdXN0b21pemF0aW9uIG9mIGZ1bmN0aW9uIHBvaW50ZXIKKyAgICAgICAgICAgSEFMX0RBQ19Db252SGFsZkNwbHRDYWxsYmFja0NoMSgpIG9yIEhBTF9EQUNFeF9Db252SGFsZkNwbHRDYWxsYmFja0NoMigpCisgICAgICAgKCspIEF0IFRoZSBlbmQgb2YgZGF0YSB0cmFuc2ZlciBIQUxfREFDX0NvbnZDcGx0Q2FsbGJhY2tDaDEoKSBvciBIQUxfREFDRXhfQ29udkhhbGZDcGx0Q2FsbGJhY2tDaDIoKQorICAgICAgICAgICBmdW5jdGlvbiBpcyBleGVjdXRlZCBhbmQgdXNlciBjYW4gYWRkIGhpcyBvd24gY29kZSBieSBjdXN0b21pemF0aW9uIG9mIGZ1bmN0aW9uIHBvaW50ZXIKKyAgICAgICAgICAgSEFMX0RBQ19Db252Q3BsdENhbGxiYWNrQ2gxKCkgb3IgSEFMX0RBQ0V4X0NvbnZIYWxmQ3BsdENhbGxiYWNrQ2gyKCkKKyAgICAgICAoKykgSW4gY2FzZSBvZiB0cmFuc2ZlciBFcnJvciwgSEFMX0RBQ19FcnJvckNhbGxiYWNrQ2gxKCkgZnVuY3Rpb24gaXMgZXhlY3V0ZWQgYW5kIHVzZXIgY2FuCiAgICAgICAgICAgICBhZGQgaGlzIG93biBjb2RlIGJ5IGN1c3RvbWl6YXRpb24gb2YgZnVuY3Rpb24gcG9pbnRlciBIQUxfREFDX0Vycm9yQ2FsbGJhY2tDaDEKKyAgICAgICAoKykgSW4gY2FzZSBvZiBETUEgdW5kZXJydW4sIERBQyBpbnRlcnJ1cHRpb24gdHJpZ2dlcnMgYW5kIGV4ZWN1dGUgaW50ZXJuYWwgZnVuY3Rpb24gSEFMX0RBQ19JUlFIYW5kbGVyLgorICAgICAgICAgICBIQUxfREFDX0RNQVVuZGVycnVuQ2FsbGJhY2tDaDEoKSBvciBIQUxfREFDRXhfRE1BVW5kZXJydW5DYWxsYmFja0NoMigpCisgICAgICAgICAgIGZ1bmN0aW9uIGlzIGV4ZWN1dGVkIGFuZCB1c2VyIGNhbiBhZGQgaGlzIG93biBjb2RlIGJ5IGN1c3RvbWl6YXRpb24gb2YgZnVuY3Rpb24gcG9pbnRlcgorICAgICAgICAgICBIQUxfREFDX0RNQVVuZGVycnVuQ2FsbGJhY2tDaDEoKSBvciBIQUxfREFDRXhfRE1BVW5kZXJydW5DYWxsYmFja0NoMigpIGFuZAorICAgICAgICAgICBhZGQgaGlzIG93biBjb2RlIGJ5IGN1c3RvbWl6YXRpb24gb2YgZnVuY3Rpb24gcG9pbnRlciBIQUxfREFDX0Vycm9yQ2FsbGJhY2tDaDEoKQogICAgICAgICgrKSBTdG9wIHRoZSBEQUMgcGVyaXBoZXJhbCB1c2luZyBIQUxfREFDX1N0b3BfRE1BKCkKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAqKiogQ2FsbGJhY2sgcmVnaXN0cmF0aW9uICoqKgogICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgIFsuLl0KQEAgLTE3NywyNCArMTkwLDI1IEBACiAgICAgICBXaGVuIFRoZSBjb21waWxhdGlvbiBkZWZpbmUgVVNFX0hBTF9EQUNfUkVHSVNURVJfQ0FMTEJBQ0tTIGlzIHNldCB0byAwIG9yCiAgICAgICBub3QgZGVmaW5lZCwgdGhlIGNhbGxiYWNrIHJlZ2lzdGVyaW5nIGZlYXR1cmUgaXMgbm90IGF2YWlsYWJsZQogICAgICAgYW5kIHdlYWsgKHN1cmNoYXJnZWQpIGNhbGxiYWNrcyBhcmUgdXNlZC4KKwogICAgICAqKiogREFDIEhBTCBkcml2ZXIgbWFjcm9zIGxpc3QgKioqCi0gICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAKKyAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgIFsuLl0KICAgICAgICBCZWxvdyB0aGUgbGlzdCBvZiBtb3N0IHVzZWQgbWFjcm9zIGluIERBQyBIQUwgZHJpdmVyLgotICAgICAgIAorCiAgICAgICAoKykgX19IQUxfREFDX0VOQUJMRSA6IEVuYWJsZSB0aGUgREFDIHBlcmlwaGVyYWwKICAgICAgICgrKSBfX0hBTF9EQUNfRElTQUJMRSA6IERpc2FibGUgdGhlIERBQyBwZXJpcGhlcmFsCiAgICAgICAoKykgX19IQUxfREFDX0NMRUFSX0ZMQUc6IENsZWFyIHRoZSBEQUMncyBwZW5kaW5nIGZsYWdzCiAgICAgICAoKykgX19IQUxfREFDX0dFVF9GTEFHOiBHZXQgdGhlIHNlbGVjdGVkIERBQydzIGZsYWcgc3RhdHVzCi0gICAgICAKKwogICAgICBbLi5dCi0gICAgICAoQCkgWW91IGNhbiByZWZlciB0byB0aGUgREFDIEhBTCBkcml2ZXIgaGVhZGVyIGZpbGUgZm9yIG1vcmUgdXNlZnVsIG1hY3JvcyAgCi0gICAKLSBAZW5kdmVyYmF0aW0gICAgCisgICAgICAoQCkgWW91IGNhbiByZWZlciB0byB0aGUgREFDIEhBTCBkcml2ZXIgaGVhZGVyIGZpbGUgZm9yIG1vcmUgdXNlZnVsIG1hY3JvcworCitAZW5kdmVyYmF0aW0KICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICogQGF0dGVudGlvbgogICAqCi0gICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxNyBTVE1pY3JvZWxlY3Ryb25pY3MuCisgICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxNiBTVE1pY3JvZWxlY3Ryb25pY3MuCiAgICogQWxsIHJpZ2h0cyByZXNlcnZlZC48L2NlbnRlcj48L2gyPgogICAqCiAgICogVGhpcyBzb2Z0d2FyZSBjb21wb25lbnQgaXMgbGljZW5zZWQgYnkgU1QgdW5kZXIgQlNEIDMtQ2xhdXNlIGxpY2Vuc2UsCkBAIC0yMDMsOCArMjE3LDcgQEAKICAgKiAgICAgICAgICAgICAgICAgICAgICAgIG9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZQogICAqCiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAqLyAKLQorICAqLwogCiAvKiBJbmNsdWRlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogI2luY2x1ZGUgInN0bTMyZjR4eF9oYWwuaCIKQEAgLTIxMyw5MCArMjI2LDgxIEBACiAgICogQHsKICAgKi8KIAorI2lmZGVmIEhBTF9EQUNfTU9EVUxFX0VOQUJMRUQKKyNpZiBkZWZpbmVkKERBQykKKwogLyoqIEBkZWZncm91cCBEQUMgREFDCiAgICogQGJyaWVmIERBQyBkcml2ZXIgbW9kdWxlcwogICAqIEB7Ci0gICovIAorICAqLwogCi0jaWZkZWYgSEFMX0RBQ19NT0RVTEVfRU5BQkxFRAotCi0jaWYgZGVmaW5lZChTVE0zMkY0MDV4eCkgfHwgZGVmaW5lZChTVE0zMkY0MTV4eCkgfHwgZGVmaW5lZChTVE0zMkY0MDd4eCkgfHwgZGVmaW5lZChTVE0zMkY0MTd4eCkgfHxcCi0gICAgZGVmaW5lZChTVE0zMkY0Mjd4eCkgfHwgZGVmaW5lZChTVE0zMkY0Mzd4eCkgfHwgZGVmaW5lZChTVE0zMkY0Mjl4eCkgfHwgZGVmaW5lZChTVE0zMkY0Mzl4eCkgfHxcCi0gICAgZGVmaW5lZChTVE0zMkY0MTBUeCkgfHwgZGVmaW5lZChTVE0zMkY0MTBDeCkgfHwgZGVmaW5lZChTVE0zMkY0MTBSeCkgfHwgZGVmaW5lZChTVE0zMkY0NDZ4eCkgfHxcCi0gICAgZGVmaW5lZChTVE0zMkY0Njl4eCkgfHwgZGVmaW5lZChTVE0zMkY0Nzl4eCkgfHwgZGVmaW5lZChTVE0zMkY0MTN4eCkgfHwgZGVmaW5lZChTVE0zMkY0MjN4eCkKIC8qIFByaXZhdGUgdHlwZWRlZiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiBQcml2YXRlIGRlZmluZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogUHJpdmF0ZSBjb25zdGFudHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qIFByaXZhdGUgbWFjcm8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiBQcml2YXRlIHZhcmlhYmxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyoqIEBhZGR0b2dyb3VwIERBQ19Qcml2YXRlX0Z1bmN0aW9ucwotICAqIEB7Ci0gICovCiAvKiBQcml2YXRlIGZ1bmN0aW9uIHByb3RvdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotc3RhdGljIHZvaWQgREFDX0RNQUNvbnZDcGx0Q2gxKERNQV9IYW5kbGVUeXBlRGVmICpoZG1hKTsKLXN0YXRpYyB2b2lkIERBQ19ETUFFcnJvckNoMShETUFfSGFuZGxlVHlwZURlZiAqaGRtYSk7Ci1zdGF0aWMgdm9pZCBEQUNfRE1BSGFsZkNvbnZDcGx0Q2gxKERNQV9IYW5kbGVUeXBlRGVmICpoZG1hKTsgCi0vKioKLSAgKiBAfQotICAqLworLyogRXhwb3J0ZWQgZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi0vKiBFeHBvcnRlZCBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyoqIEBkZWZncm91cCBEQUNfRXhwb3J0ZWRfRnVuY3Rpb25zIERBQyBFeHBvcnRlZCBGdW5jdGlvbnMKICAgKiBAewogICAqLwogCi0vKiogQGRlZmdyb3VwIERBQ19FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXAxIEluaXRpYWxpemF0aW9uIGFuZCBkZS1pbml0aWFsaXphdGlvbiBmdW5jdGlvbnMgCi0gKiAgQGJyaWVmICAgIEluaXRpYWxpemF0aW9uIGFuZCBDb25maWd1cmF0aW9uIGZ1bmN0aW9ucyAKLSAqCi1AdmVyYmF0aW0gICAgCisvKiogQGRlZmdyb3VwIERBQ19FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXAxIEluaXRpYWxpemF0aW9uIGFuZCBkZS1pbml0aWFsaXphdGlvbiBmdW5jdGlvbnMKKyAgKiAgQGJyaWVmICAgIEluaXRpYWxpemF0aW9uIGFuZCBDb25maWd1cmF0aW9uIGZ1bmN0aW9ucworICAqCitAdmVyYmF0aW0KICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgICAgICAgICMjIyMjIEluaXRpYWxpemF0aW9uIGFuZCBkZS1pbml0aWFsaXphdGlvbiBmdW5jdGlvbnMgIyMjIyMKICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgWy4uXSAgVGhpcyBzZWN0aW9uIHByb3ZpZGVzIGZ1bmN0aW9ucyBhbGxvd2luZyB0bzoKLSAgICAgICgrKSBJbml0aWFsaXplIGFuZCBjb25maWd1cmUgdGhlIERBQy4gCi0gICAgICAoKykgRGUtaW5pdGlhbGl6ZSB0aGUgREFDLiAKLSAgICAgICAgIAorICAgICAgKCspIEluaXRpYWxpemUgYW5kIGNvbmZpZ3VyZSB0aGUgREFDLgorICAgICAgKCspIERlLWluaXRpYWxpemUgdGhlIERBQy4KKwogQGVuZHZlcmJhdGltCiAgICogQHsKICAgKi8KIAogLyoqCi0gICogQGJyaWVmICBJbml0aWFsaXplcyB0aGUgREFDIHBlcmlwaGVyYWwgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpZWQgcGFyYW1ldGVycwotICAqICAgICAgICAgaW4gdGhlIERBQ19Jbml0U3RydWN0LgorICAqIEBicmllZiAgSW5pdGlhbGl6ZSB0aGUgREFDIHBlcmlwaGVyYWwgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpZWQgcGFyYW1ldGVycworICAqICAgICAgICAgaW4gdGhlIERBQ19Jbml0U3RydWN0IGFuZCBpbml0aWFsaXplIHRoZSBhc3NvY2lhdGVkIGhhbmRsZS4KICAgKiBAcGFyYW0gIGhkYWMgcG9pbnRlciB0byBhIERBQ19IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCiAgICogICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBEQUMuCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfREFDX0luaXQoREFDX0hhbmRsZVR5cGVEZWYqIGhkYWMpCi17IAorSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0RBQ19Jbml0KERBQ19IYW5kbGVUeXBlRGVmICpoZGFjKQorewogICAvKiBDaGVjayBEQUMgaGFuZGxlICovCi0gIGlmKGhkYWMgPT0gTlVMTCkKKyAgaWYgKGhkYWMgPT0gTlVMTCkKICAgewotICAgICByZXR1cm4gSEFMX0VSUk9SOworICAgIHJldHVybiBIQUxfRVJST1I7CiAgIH0KICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KICAgYXNzZXJ0X3BhcmFtKElTX0RBQ19BTExfSU5TVEFOQ0UoaGRhYy0+SW5zdGFuY2UpKTsKLSAgCi0gIGlmKGhkYWMtPlN0YXRlID09IEhBTF9EQUNfU1RBVEVfUkVTRVQpCi0gIHsgIAorCisgIGlmIChoZGFjLT5TdGF0ZSA9PSBIQUxfREFDX1NUQVRFX1JFU0VUKQorICB7CiAjaWYgKFVTRV9IQUxfREFDX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxKQogICAgIC8qIEluaXQgdGhlIERBQyBDYWxsYmFjayBzZXR0aW5ncyAqLwogICAgIGhkYWMtPkNvbnZDcGx0Q2FsbGJhY2tDaDEgICAgICAgICAgID0gSEFMX0RBQ19Db252Q3BsdENhbGxiYWNrQ2gxOwogICAgIGhkYWMtPkNvbnZIYWxmQ3BsdENhbGxiYWNrQ2gxICAgICAgID0gSEFMX0RBQ19Db252SGFsZkNwbHRDYWxsYmFja0NoMTsKICAgICBoZGFjLT5FcnJvckNhbGxiYWNrQ2gxICAgICAgICAgICAgICA9IEhBTF9EQUNfRXJyb3JDYWxsYmFja0NoMTsKICAgICBoZGFjLT5ETUFVbmRlcnJ1bkNhbGxiYWNrQ2gxICAgICAgICA9IEhBTF9EQUNfRE1BVW5kZXJydW5DYWxsYmFja0NoMTsKLQorI2lmIGRlZmluZWQoREFDX0NIQU5ORUwyX1NVUFBPUlQpCiAgICAgaGRhYy0+Q29udkNwbHRDYWxsYmFja0NoMiAgICAgICAgICAgPSBIQUxfREFDRXhfQ29udkNwbHRDYWxsYmFja0NoMjsKICAgICBoZGFjLT5Db252SGFsZkNwbHRDYWxsYmFja0NoMiAgICAgICA9IEhBTF9EQUNFeF9Db252SGFsZkNwbHRDYWxsYmFja0NoMjsKICAgICBoZGFjLT5FcnJvckNhbGxiYWNrQ2gyICAgICAgICAgICAgICA9IEhBTF9EQUNFeF9FcnJvckNhbGxiYWNrQ2gyOwogICAgIGhkYWMtPkRNQVVuZGVycnVuQ2FsbGJhY2tDaDIgICAgICAgID0gSEFMX0RBQ0V4X0RNQVVuZGVycnVuQ2FsbGJhY2tDaDI7Ci0KLSAgICBpZihoZGFjLT5Nc3BJbml0Q2FsbGJhY2sgPT0gTlVMTCkKKyNlbmRpZiAvKiBEQUNfQ0hBTk5FTDJfU1VQUE9SVCAqLworICAgIGlmIChoZGFjLT5Nc3BJbml0Q2FsbGJhY2sgPT0gTlVMTCkKICAgICB7Ci0gICAgICBoZGFjLT5Nc3BJbml0Q2FsbGJhY2sgICAgICAgICAgICAgICA9IEhBTF9EQUNfTXNwSW5pdDsKKyAgICAgIGhkYWMtPk1zcEluaXRDYWxsYmFjayAgICAgICAgICAgICA9IEhBTF9EQUNfTXNwSW5pdDsKICAgICB9CiAjZW5kaWYgLyogVVNFX0hBTF9EQUNfUkVHSVNURVJfQ0FMTEJBQ0tTICovCisKICAgICAvKiBBbGxvY2F0ZSBsb2NrIHJlc291cmNlIGFuZCBpbml0aWFsaXplIGl0ICovCiAgICAgaGRhYy0+TG9jayA9IEhBTF9VTkxPQ0tFRDsKKwogI2lmIChVU0VfSEFMX0RBQ19SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkKICAgICAvKiBJbml0IHRoZSBsb3cgbGV2ZWwgaGFyZHdhcmUgKi8KICAgICBoZGFjLT5Nc3BJbml0Q2FsbGJhY2soaGRhYyk7CkBAIC0zMDUsMzIgKzMwOSwzMiBAQAogICAgIEhBTF9EQUNfTXNwSW5pdChoZGFjKTsKICNlbmRpZiAvKiBVU0VfSEFMX0RBQ19SRUdJU1RFUl9DQUxMQkFDS1MgKi8KICAgfQotICAKKwogICAvKiBJbml0aWFsaXplIHRoZSBEQUMgc3RhdGUqLwogICBoZGFjLT5TdGF0ZSA9IEhBTF9EQUNfU1RBVEVfQlVTWTsKLSAgCisKICAgLyogU2V0IERBQyBlcnJvciBjb2RlIHRvIG5vbmUgKi8KICAgaGRhYy0+RXJyb3JDb2RlID0gSEFMX0RBQ19FUlJPUl9OT05FOwotICAKKwogICAvKiBJbml0aWFsaXplIHRoZSBEQUMgc3RhdGUqLwogICBoZGFjLT5TdGF0ZSA9IEhBTF9EQUNfU1RBVEVfUkVBRFk7Ci0gIAorCiAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KICAgcmV0dXJuIEhBTF9PSzsKIH0KIAogLyoqCi0gICogQGJyaWVmICBEZWluaXRpYWxpemVzIHRoZSBEQUMgcGVyaXBoZXJhbCByZWdpc3RlcnMgdG8gdGhlaXIgZGVmYXVsdCByZXNldCB2YWx1ZXMuCisgICogQGJyaWVmICBEZWluaXRpYWxpemUgdGhlIERBQyBwZXJpcGhlcmFsIHJlZ2lzdGVycyB0byB0aGVpciBkZWZhdWx0IHJlc2V0IHZhbHVlcy4KICAgKiBAcGFyYW0gIGhkYWMgcG9pbnRlciB0byBhIERBQ19IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCiAgICogICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBEQUMuCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfREFDX0RlSW5pdChEQUNfSGFuZGxlVHlwZURlZiogaGRhYykKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9EQUNfRGVJbml0KERBQ19IYW5kbGVUeXBlRGVmICpoZGFjKQogewogICAvKiBDaGVjayBEQUMgaGFuZGxlICovCi0gIGlmKGhkYWMgPT0gTlVMTCkKKyAgaWYgKGhkYWMgPT0gTlVMTCkKICAgewotICAgICByZXR1cm4gSEFMX0VSUk9SOworICAgIHJldHVybiBIQUxfRVJST1I7CiAgIH0KIAogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwpAQCAtMzQwLDcgKzM0NCw3IEBACiAgIGhkYWMtPlN0YXRlID0gSEFMX0RBQ19TVEFURV9CVVNZOwogCiAjaWYgKFVTRV9IQUxfREFDX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxKQotICBpZihoZGFjLT5Nc3BEZUluaXRDYWxsYmFjayA9PSBOVUxMKQorICBpZiAoaGRhYy0+TXNwRGVJbml0Q2FsbGJhY2sgPT0gTlVMTCkKICAgewogICAgIGhkYWMtPk1zcERlSW5pdENhbGxiYWNrID0gSEFMX0RBQ19Nc3BEZUluaXQ7CiAgIH0KQEAgLTM2NSwzMyArMzY5LDM1IEBACiB9CiAKIC8qKgotICAqIEBicmllZiAgSW5pdGlhbGl6ZXMgdGhlIERBQyBNU1AuCisgICogQGJyaWVmICBJbml0aWFsaXplIHRoZSBEQUMgTVNQLgogICAqIEBwYXJhbSAgaGRhYyBwb2ludGVyIHRvIGEgREFDX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKICAgKiAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciB0aGUgc3BlY2lmaWVkIERBQy4KICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KLV9fd2VhayB2b2lkIEhBTF9EQUNfTXNwSW5pdChEQUNfSGFuZGxlVHlwZURlZiogaGRhYykKK19fd2VhayB2b2lkIEhBTF9EQUNfTXNwSW5pdChEQUNfSGFuZGxlVHlwZURlZiAqaGRhYykKIHsKICAgLyogUHJldmVudCB1bnVzZWQgYXJndW1lbnQocykgY29tcGlsYXRpb24gd2FybmluZyAqLwogICBVTlVTRUQoaGRhYyk7Ci0gIC8qIE5PVEUgOiBUaGlzIGZ1bmN0aW9uIFNob3VsZCBub3QgYmUgbW9kaWZpZWQsIHdoZW4gdGhlIGNhbGxiYWNrIGlzIG5lZWRlZCwKKworICAvKiBOT1RFIDogVGhpcyBmdW5jdGlvbiBzaG91bGQgbm90IGJlIG1vZGlmaWVkLCB3aGVuIHRoZSBjYWxsYmFjayBpcyBuZWVkZWQsCiAgICAgICAgICAgICB0aGUgSEFMX0RBQ19Nc3BJbml0IGNvdWxkIGJlIGltcGxlbWVudGVkIGluIHRoZSB1c2VyIGZpbGUKLSAgICovIAorICAgKi8KIH0KIAogLyoqCi0gICogQGJyaWVmICBEZUluaXRpYWxpemVzIHRoZSBEQUMgTVNQLgorICAqIEBicmllZiAgRGVJbml0aWFsaXplIHRoZSBEQUMgTVNQLgogICAqIEBwYXJhbSAgaGRhYyBwb2ludGVyIHRvIGEgREFDX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKLSAgKiAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciB0aGUgc3BlY2lmaWVkIERBQy4gIAorICAqICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIHRoZSBzcGVjaWZpZWQgREFDLgogICAqIEByZXR2YWwgTm9uZQogICAqLwotX193ZWFrIHZvaWQgSEFMX0RBQ19Nc3BEZUluaXQoREFDX0hhbmRsZVR5cGVEZWYqIGhkYWMpCitfX3dlYWsgdm9pZCBIQUxfREFDX01zcERlSW5pdChEQUNfSGFuZGxlVHlwZURlZiAqaGRhYykKIHsKICAgLyogUHJldmVudCB1bnVzZWQgYXJndW1lbnQocykgY29tcGlsYXRpb24gd2FybmluZyAqLwogICBVTlVTRUQoaGRhYyk7Ci0gIC8qIE5PVEUgOiBUaGlzIGZ1bmN0aW9uIFNob3VsZCBub3QgYmUgbW9kaWZpZWQsIHdoZW4gdGhlIGNhbGxiYWNrIGlzIG5lZWRlZCwKKworICAvKiBOT1RFIDogVGhpcyBmdW5jdGlvbiBzaG91bGQgbm90IGJlIG1vZGlmaWVkLCB3aGVuIHRoZSBjYWxsYmFjayBpcyBuZWVkZWQsCiAgICAgICAgICAgICB0aGUgSEFMX0RBQ19Nc3BEZUluaXQgY291bGQgYmUgaW1wbGVtZW50ZWQgaW4gdGhlIHVzZXIgZmlsZQotICAgKi8gCisgICAqLwogfQogCiAvKioKQEAgLTM5OSwxOSArNDA1LDE5IEBACiAgICovCiAKIC8qKiBAZGVmZ3JvdXAgREFDX0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDIgSU8gb3BlcmF0aW9uIGZ1bmN0aW9ucwotICogIEBicmllZiAgICBJTyBvcGVyYXRpb24gZnVuY3Rpb25zIAotICoKLUB2ZXJiYXRpbSAgIAorICAqICBAYnJpZWYgICAgSU8gb3BlcmF0aW9uIGZ1bmN0aW9ucworICAqCitAdmVyYmF0aW0KICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgICAgICAgIyMjIyMgSU8gb3BlcmF0aW9uIGZ1bmN0aW9ucyAjIyMjIwotICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gIAorICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICBbLi5dICBUaGlzIHNlY3Rpb24gcHJvdmlkZXMgZnVuY3Rpb25zIGFsbG93aW5nIHRvOgogICAgICAgKCspIFN0YXJ0IGNvbnZlcnNpb24uCiAgICAgICAoKykgU3RvcCBjb252ZXJzaW9uLgogICAgICAgKCspIFN0YXJ0IGNvbnZlcnNpb24gYW5kIGVuYWJsZSBETUEgdHJhbnNmZXIuCiAgICAgICAoKykgU3RvcCBjb252ZXJzaW9uIGFuZCBkaXNhYmxlIERNQSB0cmFuc2Zlci4KICAgICAgICgrKSBHZXQgcmVzdWx0IG9mIGNvbnZlcnNpb24uCi0gICAgICAgICAgICAgICAgICAgICAKKwogQGVuZHZlcmJhdGltCiAgICogQHsKICAgKi8KQEAgLTQyMCw1NyArNDI2LDUzIEBACiAgICogQGJyaWVmICBFbmFibGVzIERBQyBhbmQgc3RhcnRzIGNvbnZlcnNpb24gb2YgY2hhbm5lbC4KICAgKiBAcGFyYW0gIGhkYWMgcG9pbnRlciB0byBhIERBQ19IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCiAgICogICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBEQUMuCi0gICogQHBhcmFtICBDaGFubmVsIFRoZSBzZWxlY3RlZCBEQUMgY2hhbm5lbC4gCisgICogQHBhcmFtICBDaGFubmVsIFRoZSBzZWxlY3RlZCBEQUMgY2hhbm5lbC4KICAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICAqICAgICAgICAgICAgQGFyZyBEQUNfQ0hBTk5FTF8xOiBEQUMgQ2hhbm5lbDEgc2VsZWN0ZWQKICAgKiAgICAgICAgICAgIEBhcmcgREFDX0NIQU5ORUxfMjogREFDIENoYW5uZWwyIHNlbGVjdGVkCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfREFDX1N0YXJ0KERBQ19IYW5kbGVUeXBlRGVmKiBoZGFjLCB1aW50MzJfdCBDaGFubmVsKQorSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0RBQ19TdGFydChEQUNfSGFuZGxlVHlwZURlZiAqaGRhYywgdWludDMyX3QgQ2hhbm5lbCkKIHsKLSAgdWludDMyX3QgdG1wMSA9IDBVLCB0bXAyID0gMFU7Ci0gIAogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfREFDX0NIQU5ORUwoQ2hhbm5lbCkpOwotICAKKwogICAvKiBQcm9jZXNzIGxvY2tlZCAqLwogICBfX0hBTF9MT0NLKGhkYWMpOwotICAKKwogICAvKiBDaGFuZ2UgREFDIHN0YXRlICovCiAgIGhkYWMtPlN0YXRlID0gSEFMX0RBQ19TVEFURV9CVVNZOwotICAKKwogICAvKiBFbmFibGUgdGhlIFBlcmlwaGVyYWwgKi8KICAgX19IQUxfREFDX0VOQUJMRShoZGFjLCBDaGFubmVsKTsKLSAgCi0gIGlmKENoYW5uZWwgPT0gREFDX0NIQU5ORUxfMSkKKworICBpZiAoQ2hhbm5lbCA9PSBEQUNfQ0hBTk5FTF8xKQogICB7Ci0gICAgdG1wMSA9IGhkYWMtPkluc3RhbmNlLT5DUiAmIERBQ19DUl9URU4xOwotICAgIHRtcDIgPSBoZGFjLT5JbnN0YW5jZS0+Q1IgJiBEQUNfQ1JfVFNFTDE7CiAgICAgLyogQ2hlY2sgaWYgc29mdHdhcmUgdHJpZ2dlciBlbmFibGVkICovCi0gICAgaWYoKHRtcDEgPT0gIERBQ19DUl9URU4xKSAmJiAodG1wMiA9PSAgREFDX0NSX1RTRUwxKSkKKyAgICBpZiAoKGhkYWMtPkluc3RhbmNlLT5DUiAmIChEQUNfQ1JfVEVOMSB8IERBQ19DUl9UU0VMMSkpID09IERBQ19UUklHR0VSX1NPRlRXQVJFKQogICAgIHsKICAgICAgIC8qIEVuYWJsZSB0aGUgc2VsZWN0ZWQgREFDIHNvZnR3YXJlIGNvbnZlcnNpb24gKi8KLSAgICAgIGhkYWMtPkluc3RhbmNlLT5TV1RSSUdSIHw9ICh1aW50MzJfdClEQUNfU1dUUklHUl9TV1RSSUcxOworICAgICAgU0VUX0JJVChoZGFjLT5JbnN0YW5jZS0+U1dUUklHUiwgREFDX1NXVFJJR1JfU1dUUklHMSk7CiAgICAgfQogICB9CisjaWYgZGVmaW5lZChEQUNfQ0hBTk5FTDJfU1VQUE9SVCkKICAgZWxzZQogICB7Ci0gICAgdG1wMSA9IGhkYWMtPkluc3RhbmNlLT5DUiAmIERBQ19DUl9URU4yOwotICAgIHRtcDIgPSBoZGFjLT5JbnN0YW5jZS0+Q1IgJiBEQUNfQ1JfVFNFTDI7ICAgIAogICAgIC8qIENoZWNrIGlmIHNvZnR3YXJlIHRyaWdnZXIgZW5hYmxlZCAqLwotICAgIGlmKCh0bXAxID09IERBQ19DUl9URU4yKSAmJiAodG1wMiA9PSBEQUNfQ1JfVFNFTDIpKQorICAgIGlmICgoaGRhYy0+SW5zdGFuY2UtPkNSICYgKERBQ19DUl9URU4yIHwgREFDX0NSX1RTRUwyKSkgPT0gKERBQ19UUklHR0VSX1NPRlRXQVJFIDw8IChDaGFubmVsICYgMHgxMFVMKSkpCiAgICAgewogICAgICAgLyogRW5hYmxlIHRoZSBzZWxlY3RlZCBEQUMgc29mdHdhcmUgY29udmVyc2lvbiovCi0gICAgICBoZGFjLT5JbnN0YW5jZS0+U1dUUklHUiB8PSAodWludDMyX3QpREFDX1NXVFJJR1JfU1dUUklHMjsKKyAgICAgIFNFVF9CSVQoaGRhYy0+SW5zdGFuY2UtPlNXVFJJR1IsIERBQ19TV1RSSUdSX1NXVFJJRzIpOwogICAgIH0KICAgfQotICAKKyNlbmRpZiAvKiBEQUNfQ0hBTk5FTDJfU1VQUE9SVCAqLworCiAgIC8qIENoYW5nZSBEQUMgc3RhdGUgKi8KICAgaGRhYy0+U3RhdGUgPSBIQUxfREFDX1NUQVRFX1JFQURZOwotICAKKwogICAvKiBQcm9jZXNzIHVubG9ja2VkICovCiAgIF9fSEFMX1VOTE9DSyhoZGFjKTsKLSAgICAKKwogICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCiAgIHJldHVybiBIQUxfT0s7CiB9CkBAIC00NzksMjMgKzQ4MSwyMyBAQAogICAqIEBicmllZiAgRGlzYWJsZXMgREFDIGFuZCBzdG9wIGNvbnZlcnNpb24gb2YgY2hhbm5lbC4KICAgKiBAcGFyYW0gIGhkYWMgcG9pbnRlciB0byBhIERBQ19IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCiAgICogICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBEQUMuCi0gICogQHBhcmFtICBDaGFubmVsIFRoZSBzZWxlY3RlZCBEQUMgY2hhbm5lbC4gCisgICogQHBhcmFtICBDaGFubmVsIFRoZSBzZWxlY3RlZCBEQUMgY2hhbm5lbC4KICAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICAqICAgICAgICAgICAgQGFyZyBEQUNfQ0hBTk5FTF8xOiBEQUMgQ2hhbm5lbDEgc2VsZWN0ZWQKLSAgKiAgICAgICAgICAgIEBhcmcgREFDX0NIQU5ORUxfMjogREFDIENoYW5uZWwyIHNlbGVjdGVkICAKKyAgKiAgICAgICAgICAgIEBhcmcgREFDX0NIQU5ORUxfMjogREFDIENoYW5uZWwyIHNlbGVjdGVkCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfREFDX1N0b3AoREFDX0hhbmRsZVR5cGVEZWYqIGhkYWMsIHVpbnQzMl90IENoYW5uZWwpCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfREFDX1N0b3AoREFDX0hhbmRsZVR5cGVEZWYgKmhkYWMsIHVpbnQzMl90IENoYW5uZWwpCiB7CiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19EQUNfQ0hBTk5FTChDaGFubmVsKSk7Ci0gIAorCiAgIC8qIERpc2FibGUgdGhlIFBlcmlwaGVyYWwgKi8KICAgX19IQUxfREFDX0RJU0FCTEUoaGRhYywgQ2hhbm5lbCk7Ci0gCisKICAgLyogQ2hhbmdlIERBQyBzdGF0ZSAqLwogICBoZGFjLT5TdGF0ZSA9IEhBTF9EQUNfU1RBVEVfUkVBRFk7Ci0gIAorCiAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KICAgcmV0dXJuIEhBTF9PSzsKIH0KQEAgLTUwNCwxMSArNTA2LDExIEBACiAgICogQGJyaWVmICBFbmFibGVzIERBQyBhbmQgc3RhcnRzIGNvbnZlcnNpb24gb2YgY2hhbm5lbC4KICAgKiBAcGFyYW0gIGhkYWMgcG9pbnRlciB0byBhIERBQ19IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCiAgICogICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBEQUMuCi0gICogQHBhcmFtICBDaGFubmVsIFRoZSBzZWxlY3RlZCBEQUMgY2hhbm5lbC4gCisgICogQHBhcmFtICBDaGFubmVsIFRoZSBzZWxlY3RlZCBEQUMgY2hhbm5lbC4KICAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICAqICAgICAgICAgICAgQGFyZyBEQUNfQ0hBTk5FTF8xOiBEQUMgQ2hhbm5lbDEgc2VsZWN0ZWQKICAgKiAgICAgICAgICAgIEBhcmcgREFDX0NIQU5ORUxfMjogREFDIENoYW5uZWwyIHNlbGVjdGVkCi0gICogQHBhcmFtICBwRGF0YSBUaGUgZGVzdGluYXRpb24gcGVyaXBoZXJhbCBCdWZmZXIgYWRkcmVzcy4KKyAgKiBAcGFyYW0gIHBEYXRhIFRoZSBzb3VyY2UgQnVmZmVyIGFkZHJlc3MuCiAgICogQHBhcmFtICBMZW5ndGggVGhlIGxlbmd0aCBvZiBkYXRhIHRvIGJlIHRyYW5zZmVycmVkIGZyb20gbWVtb3J5IHRvIERBQyBwZXJpcGhlcmFsCiAgICogQHBhcmFtICBBbGlnbm1lbnQgU3BlY2lmaWVzIHRoZSBkYXRhIGFsaWdubWVudCBmb3IgREFDIGNoYW5uZWwuCiAgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKQEAgLTUxNywyMSArNTE5LDIzIEBACiAgICogICAgICAgICAgICBAYXJnIERBQ19BTElHTl8xMkJfUjogMTJiaXQgcmlnaHQgZGF0YSBhbGlnbm1lbnQgc2VsZWN0ZWQKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9EQUNfU3RhcnRfRE1BKERBQ19IYW5kbGVUeXBlRGVmKiBoZGFjLCB1aW50MzJfdCBDaGFubmVsLCB1aW50MzJfdCogcERhdGEsIHVpbnQzMl90IExlbmd0aCwgdWludDMyX3QgQWxpZ25tZW50KQorSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0RBQ19TdGFydF9ETUEoREFDX0hhbmRsZVR5cGVEZWYgKmhkYWMsIHVpbnQzMl90IENoYW5uZWwsIHVpbnQzMl90ICpwRGF0YSwgdWludDMyX3QgTGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgQWxpZ25tZW50KQogeworICBIQUxfU3RhdHVzVHlwZURlZiBzdGF0dXMgPSBIQUxfRVJST1I7CiAgIHVpbnQzMl90IHRtcHJlZyA9IDBVOwotICAgIAorCiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19EQUNfQ0hBTk5FTChDaGFubmVsKSk7CiAgIGFzc2VydF9wYXJhbShJU19EQUNfQUxJR04oQWxpZ25tZW50KSk7Ci0gIAorCiAgIC8qIFByb2Nlc3MgbG9ja2VkICovCiAgIF9fSEFMX0xPQ0soaGRhYyk7Ci0gIAorCiAgIC8qIENoYW5nZSBEQUMgc3RhdGUgKi8KICAgaGRhYy0+U3RhdGUgPSBIQUxfREFDX1NUQVRFX0JVU1k7CiAKLSAgaWYoQ2hhbm5lbCA9PSBEQUNfQ0hBTk5FTF8xKQorICBpZiAoQ2hhbm5lbCA9PSBEQUNfQ0hBTk5FTF8xKQogICB7CiAgICAgLyogU2V0IHRoZSBETUEgdHJhbnNmZXIgY29tcGxldGUgY2FsbGJhY2sgZm9yIGNoYW5uZWwxICovCiAgICAgaGRhYy0+RE1BX0hhbmRsZTEtPlhmZXJDcGx0Q2FsbGJhY2sgPSBEQUNfRE1BQ29udkNwbHRDaDE7CkBAIC01NDMsMTAgKzU0NywxMCBAQAogICAgIGhkYWMtPkRNQV9IYW5kbGUxLT5YZmVyRXJyb3JDYWxsYmFjayA9IERBQ19ETUFFcnJvckNoMTsKIAogICAgIC8qIEVuYWJsZSB0aGUgc2VsZWN0ZWQgREFDIGNoYW5uZWwxIERNQSByZXF1ZXN0ICovCi0gICAgaGRhYy0+SW5zdGFuY2UtPkNSIHw9IERBQ19DUl9ETUFFTjE7Ci0gICAgCisgICAgU0VUX0JJVChoZGFjLT5JbnN0YW5jZS0+Q1IsIERBQ19DUl9ETUFFTjEpOworCiAgICAgLyogQ2FzZSBvZiB1c2Ugb2YgY2hhbm5lbCAxICovCi0gICAgc3dpdGNoKEFsaWdubWVudCkKKyAgICBzd2l0Y2ggKEFsaWdubWVudCkKICAgICB7CiAgICAgICBjYXNlIERBQ19BTElHTl8xMkJfUjoKICAgICAgICAgLyogR2V0IERIUjEyUjEgYWRkcmVzcyAqLwpAQCAtNTY0LDYgKzU2OCw3IEBACiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgfQorI2lmIGRlZmluZWQoREFDX0NIQU5ORUwyX1NVUFBPUlQpCiAgIGVsc2UKICAgewogICAgIC8qIFNldCB0aGUgRE1BIHRyYW5zZmVyIGNvbXBsZXRlIGNhbGxiYWNrIGZvciBjaGFubmVsMiAqLwpAQCAtNTc2LDEwICs1ODEsMTAgQEAKICAgICBoZGFjLT5ETUFfSGFuZGxlMi0+WGZlckVycm9yQ2FsbGJhY2sgPSBEQUNfRE1BRXJyb3JDaDI7CiAKICAgICAvKiBFbmFibGUgdGhlIHNlbGVjdGVkIERBQyBjaGFubmVsMiBETUEgcmVxdWVzdCAqLwotICAgIGhkYWMtPkluc3RhbmNlLT5DUiB8PSBEQUNfQ1JfRE1BRU4yOworICAgIFNFVF9CSVQoaGRhYy0+SW5zdGFuY2UtPkNSLCBEQUNfQ1JfRE1BRU4yKTsKIAogICAgIC8qIENhc2Ugb2YgdXNlIG9mIGNoYW5uZWwgMiAqLwotICAgIHN3aXRjaChBbGlnbm1lbnQpCisgICAgc3dpdGNoIChBbGlnbm1lbnQpCiAgICAgewogICAgICAgY2FzZSBEQUNfQUxJR05fMTJCX1I6CiAgICAgICAgIC8qIEdldCBESFIxMlIyIGFkZHJlc3MgKi8KQEAgLTU5Nyw3OSArNjAyLDM5IEBACiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgfQotICAKKyNlbmRpZiAvKiBEQUNfQ0hBTk5FTDJfU1VQUE9SVCAqLworCiAgIC8qIEVuYWJsZSB0aGUgRE1BIFN0cmVhbSAqLwotICBpZihDaGFubmVsID09IERBQ19DSEFOTkVMXzEpCisgIGlmIChDaGFubmVsID09IERBQ19DSEFOTkVMXzEpCiAgIHsKICAgICAvKiBFbmFibGUgdGhlIERBQyBETUEgdW5kZXJydW4gaW50ZXJydXB0ICovCiAgICAgX19IQUxfREFDX0VOQUJMRV9JVChoZGFjLCBEQUNfSVRfRE1BVURSMSk7Ci0gICAgCisKICAgICAvKiBFbmFibGUgdGhlIERNQSBTdHJlYW0gKi8KLSAgICBIQUxfRE1BX1N0YXJ0X0lUKGhkYWMtPkRNQV9IYW5kbGUxLCAodWludDMyX3QpcERhdGEsIHRtcHJlZywgTGVuZ3RoKTsKLSAgfSAKKyAgICBzdGF0dXMgPSBIQUxfRE1BX1N0YXJ0X0lUKGhkYWMtPkRNQV9IYW5kbGUxLCAodWludDMyX3QpcERhdGEsIHRtcHJlZywgTGVuZ3RoKTsKKyAgfQorI2lmIGRlZmluZWQoREFDX0NIQU5ORUwyX1NVUFBPUlQpCiAgIGVsc2UKICAgewogICAgIC8qIEVuYWJsZSB0aGUgREFDIERNQSB1bmRlcnJ1biBpbnRlcnJ1cHQgKi8KICAgICBfX0hBTF9EQUNfRU5BQkxFX0lUKGhkYWMsIERBQ19JVF9ETUFVRFIyKTsKLSAgICAKKwogICAgIC8qIEVuYWJsZSB0aGUgRE1BIFN0cmVhbSAqLwotICAgIEhBTF9ETUFfU3RhcnRfSVQoaGRhYy0+RE1BX0hhbmRsZTIsICh1aW50MzJfdClwRGF0YSwgdG1wcmVnLCBMZW5ndGgpOworICAgIHN0YXR1cyA9IEhBTF9ETUFfU3RhcnRfSVQoaGRhYy0+RE1BX0hhbmRsZTIsICh1aW50MzJfdClwRGF0YSwgdG1wcmVnLCBMZW5ndGgpOwogICB9Ci0gIAotICAvKiBFbmFibGUgdGhlIFBlcmlwaGVyYWwgKi8KLSAgX19IQUxfREFDX0VOQUJMRShoZGFjLCBDaGFubmVsKTsKLSAgCisjZW5kaWYgLyogREFDX0NIQU5ORUwyX1NVUFBPUlQgKi8KKwogICAvKiBQcm9jZXNzIFVubG9ja2VkICovCiAgIF9fSEFMX1VOTE9DSyhoZGFjKTsKLSAgCi0gIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KLSAgcmV0dXJuIEhBTF9PSzsKLX0KIAotLyoqCi0gICogQGJyaWVmICBEaXNhYmxlcyBEQUMgYW5kIHN0b3AgY29udmVyc2lvbiBvZiBjaGFubmVsLgotICAqIEBwYXJhbSAgaGRhYyBwb2ludGVyIHRvIGEgREFDX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKLSAgKiAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciB0aGUgc3BlY2lmaWVkIERBQy4KLSAgKiBAcGFyYW0gIENoYW5uZWwgVGhlIHNlbGVjdGVkIERBQyBjaGFubmVsLiAKLSAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgotICAqICAgICAgICAgICAgQGFyZyBEQUNfQ0hBTk5FTF8xOiBEQUMgQ2hhbm5lbDEgc2VsZWN0ZWQKLSAgKiAgICAgICAgICAgIEBhcmcgREFDX0NIQU5ORUxfMjogREFDIENoYW5uZWwyIHNlbGVjdGVkICAgCi0gICogQHJldHZhbCBIQUwgc3RhdHVzCi0gICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfREFDX1N0b3BfRE1BKERBQ19IYW5kbGVUeXBlRGVmKiBoZGFjLCB1aW50MzJfdCBDaGFubmVsKQotewotICBIQUxfU3RhdHVzVHlwZURlZiBzdGF0dXMgPSBIQUxfT0s7Ci0KLSAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KLSAgYXNzZXJ0X3BhcmFtKElTX0RBQ19DSEFOTkVMKENoYW5uZWwpKTsKLSAgCi0gIC8qIERpc2FibGUgdGhlIHNlbGVjdGVkIERBQyBjaGFubmVsIERNQSByZXF1ZXN0ICovCi0gICBoZGFjLT5JbnN0YW5jZS0+Q1IgJj0gfihEQUNfQ1JfRE1BRU4xIDw8IENoYW5uZWwpOwotICAgIAotICAvKiBEaXNhYmxlIHRoZSBQZXJpcGhlcmFsICovCi0gIF9fSEFMX0RBQ19ESVNBQkxFKGhkYWMsIENoYW5uZWwpOwotICAKLSAgLyogRGlzYWJsZSB0aGUgRE1BIENoYW5uZWwgKi8KLSAgLyogQ2hhbm5lbDEgaXMgdXNlZCAqLwotICBpZihDaGFubmVsID09IERBQ19DSEFOTkVMXzEpCi0gIHsgCi0gICAgc3RhdHVzID0gSEFMX0RNQV9BYm9ydChoZGFjLT5ETUFfSGFuZGxlMSk7Ci0gIH0KLSAgZWxzZSAvKiBDaGFubmVsMiBpcyB1c2VkIGZvciAqLwotICB7IAotICAgIHN0YXR1cyA9IEhBTF9ETUFfQWJvcnQoaGRhYy0+RE1BX0hhbmRsZTIpOyAKLSAgfQotCi0gIC8qIENoZWNrIGlmIERNQSBDaGFubmVsIGVmZmVjdGl2ZWx5IGRpc2FibGVkICovCi0gIGlmKHN0YXR1cyAhPSBIQUxfT0spCisgIGlmIChzdGF0dXMgPT0gSEFMX09LKQogICB7Ci0gICAgLyogVXBkYXRlIERBQyBzdGF0ZSBtYWNoaW5lIHRvIGVycm9yICovCi0gICAgaGRhYy0+U3RhdGUgPSBIQUxfREFDX1NUQVRFX0VSUk9SOyAgICAgIAorICAgIC8qIEVuYWJsZSB0aGUgUGVyaXBoZXJhbCAqLworICAgIF9fSEFMX0RBQ19FTkFCTEUoaGRhYywgQ2hhbm5lbCk7CiAgIH0KICAgZWxzZQogICB7Ci0gICAgLyogQ2hhbmdlIERBQyBzdGF0ZSAqLwotICAgIGhkYWMtPlN0YXRlID0gSEFMX0RBQ19TVEFURV9SRUFEWTsKKyAgICBoZGFjLT5FcnJvckNvZGUgfD0gSEFMX0RBQ19FUlJPUl9ETUE7CiAgIH0KIAogICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCkBAIC02NzcsMTExICs2NDIsMTkyIEBACiB9CiAKIC8qKgotICAqIEBicmllZiAgUmV0dXJucyB0aGUgbGFzdCBkYXRhIG91dHB1dCB2YWx1ZSBvZiB0aGUgc2VsZWN0ZWQgREFDIGNoYW5uZWwuCisgICogQGJyaWVmICBEaXNhYmxlcyBEQUMgYW5kIHN0b3AgY29udmVyc2lvbiBvZiBjaGFubmVsLgogICAqIEBwYXJhbSAgaGRhYyBwb2ludGVyIHRvIGEgREFDX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKICAgKiAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciB0aGUgc3BlY2lmaWVkIERBQy4KLSAgKiBAcGFyYW0gIENoYW5uZWwgVGhlIHNlbGVjdGVkIERBQyBjaGFubmVsLiAKKyAgKiBAcGFyYW0gIENoYW5uZWwgVGhlIHNlbGVjdGVkIERBQyBjaGFubmVsLgogICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAgICogICAgICAgICAgICBAYXJnIERBQ19DSEFOTkVMXzE6IERBQyBDaGFubmVsMSBzZWxlY3RlZAogICAqICAgICAgICAgICAgQGFyZyBEQUNfQ0hBTk5FTF8yOiBEQUMgQ2hhbm5lbDIgc2VsZWN0ZWQKLSAgKiBAcmV0dmFsIFRoZSBzZWxlY3RlZCBEQUMgY2hhbm5lbCBkYXRhIG91dHB1dCB2YWx1ZS4KKyAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KLXVpbnQzMl90IEhBTF9EQUNfR2V0VmFsdWUoREFDX0hhbmRsZVR5cGVEZWYqIGhkYWMsIHVpbnQzMl90IENoYW5uZWwpCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfREFDX1N0b3BfRE1BKERBQ19IYW5kbGVUeXBlRGVmICpoZGFjLCB1aW50MzJfdCBDaGFubmVsKQogewogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfREFDX0NIQU5ORUwoQ2hhbm5lbCkpOwotICAKLSAgLyogUmV0dXJucyB0aGUgREFDIGNoYW5uZWwgZGF0YSBvdXRwdXQgcmVnaXN0ZXIgdmFsdWUgKi8KLSAgaWYoQ2hhbm5lbCA9PSBEQUNfQ0hBTk5FTF8xKQorCisgIC8qIERpc2FibGUgdGhlIHNlbGVjdGVkIERBQyBjaGFubmVsIERNQSByZXF1ZXN0ICovCisgIGhkYWMtPkluc3RhbmNlLT5DUiAmPSB+KERBQ19DUl9ETUFFTjEgPDwgKENoYW5uZWwgJiAweDEwVUwpKTsKKworICAvKiBEaXNhYmxlIHRoZSBQZXJpcGhlcmFsICovCisgIF9fSEFMX0RBQ19ESVNBQkxFKGhkYWMsIENoYW5uZWwpOworCisgIC8qIERpc2FibGUgdGhlIERNQSBTdHJlYW0gKi8KKworICAvKiBDaGFubmVsMSBpcyB1c2VkICovCisgIGlmIChDaGFubmVsID09IERBQ19DSEFOTkVMXzEpCiAgIHsKLSAgICByZXR1cm4gaGRhYy0+SW5zdGFuY2UtPkRPUjE7CisgICAgLyogRGlzYWJsZSB0aGUgRE1BIFN0cmVhbSAqLworICAgICh2b2lkKUhBTF9ETUFfQWJvcnQoaGRhYy0+RE1BX0hhbmRsZTEpOworCisgICAgLyogRGlzYWJsZSB0aGUgREFDIERNQSB1bmRlcnJ1biBpbnRlcnJ1cHQgKi8KKyAgICBfX0hBTF9EQUNfRElTQUJMRV9JVChoZGFjLCBEQUNfSVRfRE1BVURSMSk7CiAgIH0KLSAgZWxzZQorI2lmIGRlZmluZWQoREFDX0NIQU5ORUwyX1NVUFBPUlQpCisgIGVsc2UgLyogQ2hhbm5lbDIgaXMgdXNlZCBmb3IgKi8KICAgewotICAgIHJldHVybiBoZGFjLT5JbnN0YW5jZS0+RE9SMjsKKyAgICAvKiBEaXNhYmxlIHRoZSBETUEgU3RyZWFtICovCisgICAgKHZvaWQpSEFMX0RNQV9BYm9ydChoZGFjLT5ETUFfSGFuZGxlMik7CisKKyAgICAvKiBEaXNhYmxlIHRoZSBEQUMgRE1BIHVuZGVycnVuIGludGVycnVwdCAqLworICAgIF9fSEFMX0RBQ19ESVNBQkxFX0lUKGhkYWMsIERBQ19JVF9ETUFVRFIyKTsKICAgfQorI2VuZGlmIC8qIERBQ19DSEFOTkVMMl9TVVBQT1JUICovCisKKyAgLyogQ2hhbmdlIERBQyBzdGF0ZSAqLworICBoZGFjLT5TdGF0ZSA9IEhBTF9EQUNfU1RBVEVfUkVBRFk7CisKKyAgLyogUmV0dXJuIGZ1bmN0aW9uIHN0YXR1cyAqLworICByZXR1cm4gSEFMX09LOwogfQogCiAvKioKLSAgKiBAYnJpZWYgIEhhbmRsZXMgREFDIGludGVycnVwdCByZXF1ZXN0ICAKKyAgKiBAYnJpZWYgIEhhbmRsZXMgREFDIGludGVycnVwdCByZXF1ZXN0CisgICogICAgICAgICBUaGlzIGZ1bmN0aW9uIHVzZXMgdGhlIGludGVycnVwdGlvbiBvZiBETUEKKyAgKiAgICAgICAgIHVuZGVycnVuLgogICAqIEBwYXJhbSAgaGRhYyBwb2ludGVyIHRvIGEgREFDX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKICAgKiAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciB0aGUgc3BlY2lmaWVkIERBQy4KICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KLXZvaWQgSEFMX0RBQ19JUlFIYW5kbGVyKERBQ19IYW5kbGVUeXBlRGVmKiBoZGFjKQordm9pZCBIQUxfREFDX0lSUUhhbmRsZXIoREFDX0hhbmRsZVR5cGVEZWYgKmhkYWMpCiB7Ci0gIC8qIENoZWNrIHVuZGVycnVuIGNoYW5uZWwgMSBmbGFnICovCi0gIGlmKF9fSEFMX0RBQ19HRVRfRkxBRyhoZGFjLCBEQUNfRkxBR19ETUFVRFIxKSkKKyAgaWYgKF9fSEFMX0RBQ19HRVRfSVRfU09VUkNFKGhkYWMsIERBQ19JVF9ETUFVRFIxKSkKICAgewotICAgIC8qIENoYW5nZSBEQUMgc3RhdGUgdG8gZXJyb3Igc3RhdGUgKi8KLSAgICBoZGFjLT5TdGF0ZSA9IEhBTF9EQUNfU1RBVEVfRVJST1I7Ci0gICAgCi0gICAgLyogU2V0IERBQyBlcnJvciBjb2RlIHRvIGNoYW5uZWwxIERNQSB1bmRlcnJ1biBlcnJvciAqLwotICAgIGhkYWMtPkVycm9yQ29kZSB8PSBIQUxfREFDX0VSUk9SX0RNQVVOREVSUlVOQ0gxOwotICAgIAotICAgIC8qIENsZWFyIHRoZSB1bmRlcnJ1biBmbGFnICovCi0gICAgX19IQUxfREFDX0NMRUFSX0ZMQUcoaGRhYyxEQUNfRkxBR19ETUFVRFIxKTsKLSAgICAKLSAgICAvKiBEaXNhYmxlIHRoZSBzZWxlY3RlZCBEQUMgY2hhbm5lbDEgRE1BIHJlcXVlc3QgKi8KLSAgICBoZGFjLT5JbnN0YW5jZS0+Q1IgJj0gfkRBQ19DUl9ETUFFTjE7Ci0gICAgCi0gICAgLyogRXJyb3IgY2FsbGJhY2sgKi8gCisgICAgLyogQ2hlY2sgdW5kZXJydW4gZmxhZyBvZiBEQUMgY2hhbm5lbCAxICovCisgICAgaWYgKF9fSEFMX0RBQ19HRVRfRkxBRyhoZGFjLCBEQUNfRkxBR19ETUFVRFIxKSkKKyAgICB7CisgICAgICAvKiBDaGFuZ2UgREFDIHN0YXRlIHRvIGVycm9yIHN0YXRlICovCisgICAgICBoZGFjLT5TdGF0ZSA9IEhBTF9EQUNfU1RBVEVfRVJST1I7CisKKyAgICAgIC8qIFNldCBEQUMgZXJyb3IgY29kZSB0byBjaGFubmVsMSBETUEgdW5kZXJydW4gZXJyb3IgKi8KKyAgICAgIFNFVF9CSVQoaGRhYy0+RXJyb3JDb2RlLCBIQUxfREFDX0VSUk9SX0RNQVVOREVSUlVOQ0gxKTsKKworICAgICAgLyogQ2xlYXIgdGhlIHVuZGVycnVuIGZsYWcgKi8KKyAgICAgIF9fSEFMX0RBQ19DTEVBUl9GTEFHKGhkYWMsIERBQ19GTEFHX0RNQVVEUjEpOworCisgICAgICAvKiBEaXNhYmxlIHRoZSBzZWxlY3RlZCBEQUMgY2hhbm5lbDEgRE1BIHJlcXVlc3QgKi8KKyAgICAgIENMRUFSX0JJVChoZGFjLT5JbnN0YW5jZS0+Q1IsIERBQ19DUl9ETUFFTjEpOworCisgICAgICAvKiBFcnJvciBjYWxsYmFjayAqLwogI2lmIChVU0VfSEFMX0RBQ19SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkKICAgICAgIGhkYWMtPkRNQVVuZGVycnVuQ2FsbGJhY2tDaDEoaGRhYyk7CiAjZWxzZQotICAgIEhBTF9EQUNfRE1BVW5kZXJydW5DYWxsYmFja0NoMShoZGFjKTsKKyAgICAgIEhBTF9EQUNfRE1BVW5kZXJydW5DYWxsYmFja0NoMShoZGFjKTsKICNlbmRpZiAvKiBVU0VfSEFMX0RBQ19SRUdJU1RFUl9DQUxMQkFDS1MgKi8KKyAgICB9CiAgIH0KLSAgLyogQ2hlY2sgdW5kZXJydW4gY2hhbm5lbCAyIGZsYWcgKi8KLSAgaWYoX19IQUxfREFDX0dFVF9GTEFHKGhkYWMsIERBQ19GTEFHX0RNQVVEUjIpKQorCisjaWYgZGVmaW5lZChEQUNfQ0hBTk5FTDJfU1VQUE9SVCkKKyAgaWYgKF9fSEFMX0RBQ19HRVRfSVRfU09VUkNFKGhkYWMsIERBQ19JVF9ETUFVRFIyKSkKICAgewotICAgIC8qIENoYW5nZSBEQUMgc3RhdGUgdG8gZXJyb3Igc3RhdGUgKi8KLSAgICBoZGFjLT5TdGF0ZSA9IEhBTF9EQUNfU1RBVEVfRVJST1I7Ci0gICAgCi0gICAgLyogU2V0IERBQyBlcnJvciBjb2RlIHRvIGNoYW5uZWwyIERNQSB1bmRlcnJ1biBlcnJvciAqLwotICAgIGhkYWMtPkVycm9yQ29kZSB8PSBIQUxfREFDX0VSUk9SX0RNQVVOREVSUlVOQ0gyOwotICAgIAotICAgIC8qIENsZWFyIHRoZSB1bmRlcnJ1biBmbGFnICovCi0gICAgX19IQUxfREFDX0NMRUFSX0ZMQUcoaGRhYyxEQUNfRkxBR19ETUFVRFIyKTsKLSAgICAKLSAgICAvKiBEaXNhYmxlIHRoZSBzZWxlY3RlZCBEQUMgY2hhbm5lbDEgRE1BIHJlcXVlc3QgKi8KLSAgICBoZGFjLT5JbnN0YW5jZS0+Q1IgJj0gfkRBQ19DUl9ETUFFTjI7Ci0gICAgCi0gICAgLyogRXJyb3IgY2FsbGJhY2sgKi8gCisgICAgLyogQ2hlY2sgdW5kZXJydW4gZmxhZyBvZiBEQUMgY2hhbm5lbCAyICovCisgICAgaWYgKF9fSEFMX0RBQ19HRVRfRkxBRyhoZGFjLCBEQUNfRkxBR19ETUFVRFIyKSkKKyAgICB7CisgICAgICAvKiBDaGFuZ2UgREFDIHN0YXRlIHRvIGVycm9yIHN0YXRlICovCisgICAgICBoZGFjLT5TdGF0ZSA9IEhBTF9EQUNfU1RBVEVfRVJST1I7CisKKyAgICAgIC8qIFNldCBEQUMgZXJyb3IgY29kZSB0byBjaGFubmVsMiBETUEgdW5kZXJydW4gZXJyb3IgKi8KKyAgICAgIFNFVF9CSVQoaGRhYy0+RXJyb3JDb2RlLCBIQUxfREFDX0VSUk9SX0RNQVVOREVSUlVOQ0gyKTsKKworICAgICAgLyogQ2xlYXIgdGhlIHVuZGVycnVuIGZsYWcgKi8KKyAgICAgIF9fSEFMX0RBQ19DTEVBUl9GTEFHKGhkYWMsIERBQ19GTEFHX0RNQVVEUjIpOworCisgICAgICAvKiBEaXNhYmxlIHRoZSBzZWxlY3RlZCBEQUMgY2hhbm5lbDIgRE1BIHJlcXVlc3QgKi8KKyAgICAgIENMRUFSX0JJVChoZGFjLT5JbnN0YW5jZS0+Q1IsIERBQ19DUl9ETUFFTjIpOworCisgICAgICAvKiBFcnJvciBjYWxsYmFjayAqLwogI2lmIChVU0VfSEFMX0RBQ19SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkKICAgICAgIGhkYWMtPkRNQVVuZGVycnVuQ2FsbGJhY2tDaDIoaGRhYyk7CiAjZWxzZQotICAgIEhBTF9EQUNFeF9ETUFVbmRlcnJ1bkNhbGxiYWNrQ2gyKGhkYWMpOworICAgICAgSEFMX0RBQ0V4X0RNQVVuZGVycnVuQ2FsbGJhY2tDaDIoaGRhYyk7CiAjZW5kaWYgLyogVVNFX0hBTF9EQUNfUkVHSVNURVJfQ0FMTEJBQ0tTICovCisgICAgfQogICB9CisjZW5kaWYgLyogREFDX0NIQU5ORUwyX1NVUFBPUlQgKi8KIH0KIAogLyoqCi0gICogQGJyaWVmICBDb252ZXJzaW9uIGNvbXBsZXRlIGNhbGxiYWNrIGluIG5vbiBibG9ja2luZyBtb2RlIGZvciBDaGFubmVsMSAKKyAgKiBAYnJpZWYgIFNldCB0aGUgc3BlY2lmaWVkIGRhdGEgaG9sZGluZyByZWdpc3RlciB2YWx1ZSBmb3IgREFDIGNoYW5uZWwuCisgICogQHBhcmFtICBoZGFjIHBvaW50ZXIgdG8gYSBEQUNfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucworICAqICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIHRoZSBzcGVjaWZpZWQgREFDLgorICAqIEBwYXJhbSAgQ2hhbm5lbCBUaGUgc2VsZWN0ZWQgREFDIGNoYW5uZWwuCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAgKiAgICAgICAgICAgIEBhcmcgREFDX0NIQU5ORUxfMTogREFDIENoYW5uZWwxIHNlbGVjdGVkCisgICogICAgICAgICAgICBAYXJnIERBQ19DSEFOTkVMXzI6IERBQyBDaGFubmVsMiBzZWxlY3RlZAorICAqIEBwYXJhbSAgQWxpZ25tZW50IFNwZWNpZmllcyB0aGUgZGF0YSBhbGlnbm1lbnQuCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAgKiAgICAgICAgICAgIEBhcmcgREFDX0FMSUdOXzhCX1I6IDhiaXQgcmlnaHQgZGF0YSBhbGlnbm1lbnQgc2VsZWN0ZWQKKyAgKiAgICAgICAgICAgIEBhcmcgREFDX0FMSUdOXzEyQl9MOiAxMmJpdCBsZWZ0IGRhdGEgYWxpZ25tZW50IHNlbGVjdGVkCisgICogICAgICAgICAgICBAYXJnIERBQ19BTElHTl8xMkJfUjogMTJiaXQgcmlnaHQgZGF0YSBhbGlnbm1lbnQgc2VsZWN0ZWQKKyAgKiBAcGFyYW0gIERhdGEgRGF0YSB0byBiZSBsb2FkZWQgaW4gdGhlIHNlbGVjdGVkIGRhdGEgaG9sZGluZyByZWdpc3Rlci4KKyAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKKyAgKi8KK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9EQUNfU2V0VmFsdWUoREFDX0hhbmRsZVR5cGVEZWYgKmhkYWMsIHVpbnQzMl90IENoYW5uZWwsIHVpbnQzMl90IEFsaWdubWVudCwgdWludDMyX3QgRGF0YSkKK3sKKyAgX19JTyB1aW50MzJfdCB0bXAgPSAwVUw7CisKKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KKyAgYXNzZXJ0X3BhcmFtKElTX0RBQ19DSEFOTkVMKENoYW5uZWwpKTsKKyAgYXNzZXJ0X3BhcmFtKElTX0RBQ19BTElHTihBbGlnbm1lbnQpKTsKKyAgYXNzZXJ0X3BhcmFtKElTX0RBQ19EQVRBKERhdGEpKTsKKworICB0bXAgPSAodWludDMyX3QpaGRhYy0+SW5zdGFuY2U7CisgIGlmIChDaGFubmVsID09IERBQ19DSEFOTkVMXzEpCisgIHsKKyAgICB0bXAgKz0gREFDX0RIUjEyUjFfQUxJR05NRU5UKEFsaWdubWVudCk7CisgIH0KKyNpZiBkZWZpbmVkKERBQ19DSEFOTkVMMl9TVVBQT1JUKQorICBlbHNlCisgIHsKKyAgICB0bXAgKz0gREFDX0RIUjEyUjJfQUxJR05NRU5UKEFsaWdubWVudCk7CisgIH0KKyNlbmRpZiAvKiBEQUNfQ0hBTk5FTDJfU1VQUE9SVCAqLworCisgIC8qIFNldCB0aGUgREFDIGNoYW5uZWwgc2VsZWN0ZWQgZGF0YSBob2xkaW5nIHJlZ2lzdGVyICovCisgICooX19JTyB1aW50MzJfdCAqKSB0bXAgPSBEYXRhOworCisgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KKyAgcmV0dXJuIEhBTF9PSzsKK30KKworLyoqCisgICogQGJyaWVmICBDb252ZXJzaW9uIGNvbXBsZXRlIGNhbGxiYWNrIGluIG5vbi1ibG9ja2luZyBtb2RlIGZvciBDaGFubmVsMQogICAqIEBwYXJhbSAgaGRhYyBwb2ludGVyIHRvIGEgREFDX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKICAgKiAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciB0aGUgc3BlY2lmaWVkIERBQy4KICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KLV9fd2VhayB2b2lkIEhBTF9EQUNfQ29udkNwbHRDYWxsYmFja0NoMShEQUNfSGFuZGxlVHlwZURlZiogaGRhYykKK19fd2VhayB2b2lkIEhBTF9EQUNfQ29udkNwbHRDYWxsYmFja0NoMShEQUNfSGFuZGxlVHlwZURlZiAqaGRhYykKIHsKICAgLyogUHJldmVudCB1bnVzZWQgYXJndW1lbnQocykgY29tcGlsYXRpb24gd2FybmluZyAqLwogICBVTlVTRUQoaGRhYyk7Ci0gIC8qIE5PVEUgOiBUaGlzIGZ1bmN0aW9uIFNob3VsZCBub3QgYmUgbW9kaWZpZWQsIHdoZW4gdGhlIGNhbGxiYWNrIGlzIG5lZWRlZCwKLSAgICAgICAgICAgIHRoZSBIQUxfREFDX0NvbnZDcGx0Q2FsbGJhY2sgY291bGQgYmUgaW1wbGVtZW50ZWQgaW4gdGhlIHVzZXIgZmlsZQorCisgIC8qIE5PVEUgOiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBub3QgYmUgbW9kaWZpZWQsIHdoZW4gdGhlIGNhbGxiYWNrIGlzIG5lZWRlZCwKKyAgICAgICAgICAgIHRoZSBIQUxfREFDX0NvbnZDcGx0Q2FsbGJhY2tDaDEgY291bGQgYmUgaW1wbGVtZW50ZWQgaW4gdGhlIHVzZXIgZmlsZQogICAgKi8KIH0KIAogLyoqCi0gICogQGJyaWVmICBDb252ZXJzaW9uIGhhbGYgRE1BIHRyYW5zZmVyIGNhbGxiYWNrIGluIG5vbiBibG9ja2luZyBtb2RlIGZvciBDaGFubmVsMSAKKyAgKiBAYnJpZWYgIENvbnZlcnNpb24gaGFsZiBETUEgdHJhbnNmZXIgY2FsbGJhY2sgaW4gbm9uLWJsb2NraW5nIG1vZGUgZm9yIENoYW5uZWwxCiAgICogQHBhcmFtICBoZGFjIHBvaW50ZXIgdG8gYSBEQUNfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucwogICAqICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIHRoZSBzcGVjaWZpZWQgREFDLgogICAqIEByZXR2YWwgTm9uZQogICAqLwotX193ZWFrIHZvaWQgSEFMX0RBQ19Db252SGFsZkNwbHRDYWxsYmFja0NoMShEQUNfSGFuZGxlVHlwZURlZiogaGRhYykKK19fd2VhayB2b2lkIEhBTF9EQUNfQ29udkhhbGZDcGx0Q2FsbGJhY2tDaDEoREFDX0hhbmRsZVR5cGVEZWYgKmhkYWMpCiB7CiAgIC8qIFByZXZlbnQgdW51c2VkIGFyZ3VtZW50KHMpIGNvbXBpbGF0aW9uIHdhcm5pbmcgKi8KICAgVU5VU0VEKGhkYWMpOwotICAvKiBOT1RFIDogVGhpcyBmdW5jdGlvbiBTaG91bGQgbm90IGJlIG1vZGlmaWVkLCB3aGVuIHRoZSBjYWxsYmFjayBpcyBuZWVkZWQsCisKKyAgLyogTk9URSA6IFRoaXMgZnVuY3Rpb24gc2hvdWxkIG5vdCBiZSBtb2RpZmllZCwgd2hlbiB0aGUgY2FsbGJhY2sgaXMgbmVlZGVkLAogICAgICAgICAgICAgdGhlIEhBTF9EQUNfQ29udkhhbGZDcGx0Q2FsbGJhY2tDaDEgY291bGQgYmUgaW1wbGVtZW50ZWQgaW4gdGhlIHVzZXIgZmlsZQogICAgKi8KIH0KQEAgLTc5Niw3ICs4NDIsOCBAQAogewogICAvKiBQcmV2ZW50IHVudXNlZCBhcmd1bWVudChzKSBjb21waWxhdGlvbiB3YXJuaW5nICovCiAgIFVOVVNFRChoZGFjKTsKLSAgLyogTk9URSA6IFRoaXMgZnVuY3Rpb24gU2hvdWxkIG5vdCBiZSBtb2RpZmllZCwgd2hlbiB0aGUgY2FsbGJhY2sgaXMgbmVlZGVkLAorCisgIC8qIE5PVEUgOiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBub3QgYmUgbW9kaWZpZWQsIHdoZW4gdGhlIGNhbGxiYWNrIGlzIG5lZWRlZCwKICAgICAgICAgICAgIHRoZSBIQUxfREFDX0Vycm9yQ2FsbGJhY2tDaDEgY291bGQgYmUgaW1wbGVtZW50ZWQgaW4gdGhlIHVzZXIgZmlsZQogICAgKi8KIH0KQEAgLTgxMSw3ICs4NTgsOCBAQAogewogICAvKiBQcmV2ZW50IHVudXNlZCBhcmd1bWVudChzKSBjb21waWxhdGlvbiB3YXJuaW5nICovCiAgIFVOVVNFRChoZGFjKTsKLSAgLyogTk9URSA6IFRoaXMgZnVuY3Rpb24gU2hvdWxkIG5vdCBiZSBtb2RpZmllZCwgd2hlbiB0aGUgY2FsbGJhY2sgaXMgbmVlZGVkLAorCisgIC8qIE5PVEUgOiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBub3QgYmUgbW9kaWZpZWQsIHdoZW4gdGhlIGNhbGxiYWNrIGlzIG5lZWRlZCwKICAgICAgICAgICAgIHRoZSBIQUxfREFDX0RNQVVuZGVycnVuQ2FsbGJhY2tDaDEgY291bGQgYmUgaW1wbGVtZW50ZWQgaW4gdGhlIHVzZXIgZmlsZQogICAgKi8KIH0KQEAgLTgxOSwxMTEgKzg2NywxMDEgQEAKIC8qKgogICAqIEB9CiAgICovCi0gIAorCiAvKiogQGRlZmdyb3VwIERBQ19FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXAzIFBlcmlwaGVyYWwgQ29udHJvbCBmdW5jdGlvbnMKLSAqICBAYnJpZWYgICAJUGVyaXBoZXJhbCBDb250cm9sIGZ1bmN0aW9ucyAKLSAqCi1AdmVyYmF0aW0gICAKKyAgKiAgQGJyaWVmICAgIFBlcmlwaGVyYWwgQ29udHJvbCBmdW5jdGlvbnMKKyAgKgorQHZlcmJhdGltCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAgICAgICAgICMjIyMjIFBlcmlwaGVyYWwgQ29udHJvbCBmdW5jdGlvbnMgIyMjIyMKLSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICAKKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgWy4uXSAgVGhpcyBzZWN0aW9uIHByb3ZpZGVzIGZ1bmN0aW9ucyBhbGxvd2luZyB0bzoKLSAgICAgICgrKSBDb25maWd1cmUgY2hhbm5lbHMuIAorICAgICAgKCspIENvbmZpZ3VyZSBjaGFubmVscy4KICAgICAgICgrKSBTZXQgdGhlIHNwZWNpZmllZCBkYXRhIGhvbGRpbmcgcmVnaXN0ZXIgdmFsdWUgZm9yIERBQyBjaGFubmVsLgotICAgICAgCisKIEBlbmR2ZXJiYXRpbQogICAqIEB7CiAgICovCiAKIC8qKgorICAqIEBicmllZiAgUmV0dXJucyB0aGUgbGFzdCBkYXRhIG91dHB1dCB2YWx1ZSBvZiB0aGUgc2VsZWN0ZWQgREFDIGNoYW5uZWwuCisgICogQHBhcmFtICBoZGFjIHBvaW50ZXIgdG8gYSBEQUNfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucworICAqICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIHRoZSBzcGVjaWZpZWQgREFDLgorICAqIEBwYXJhbSAgQ2hhbm5lbCBUaGUgc2VsZWN0ZWQgREFDIGNoYW5uZWwuCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAgKiAgICAgICAgICAgIEBhcmcgREFDX0NIQU5ORUxfMTogREFDIENoYW5uZWwxIHNlbGVjdGVkCisgICogICAgICAgICAgICBAYXJnIERBQ19DSEFOTkVMXzI6IERBQyBDaGFubmVsMiBzZWxlY3RlZAorICAqIEByZXR2YWwgVGhlIHNlbGVjdGVkIERBQyBjaGFubmVsIGRhdGEgb3V0cHV0IHZhbHVlLgorICAqLwordWludDMyX3QgSEFMX0RBQ19HZXRWYWx1ZShEQUNfSGFuZGxlVHlwZURlZiAqaGRhYywgdWludDMyX3QgQ2hhbm5lbCkKK3sKKyAgdWludDMyX3QgdG1wID0gMFU7CisKKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KKyAgYXNzZXJ0X3BhcmFtKElTX0RBQ19DSEFOTkVMKENoYW5uZWwpKTsKKworICBpZiAoQ2hhbm5lbCA9PSBEQUNfQ0hBTk5FTF8xKQorICB7CisgICAgdG1wID0gaGRhYy0+SW5zdGFuY2UtPkRPUjE7CisgIH0KKyNpZiBkZWZpbmVkKERBQ19DSEFOTkVMMl9TVVBQT1JUKQorICBlbHNlCisgIHsKKyAgICB0bXAgPSBoZGFjLT5JbnN0YW5jZS0+RE9SMjsKKyAgfQorI2VuZGlmIC8qIERBQ19DSEFOTkVMMl9TVVBQT1JUICovCisgIC8qIFJldHVybnMgdGhlIERBQyBjaGFubmVsIGRhdGEgb3V0cHV0IHJlZ2lzdGVyIHZhbHVlICovCisgIHJldHVybiB0bXA7Cit9CisKKy8qKgogICAqIEBicmllZiAgQ29uZmlndXJlcyB0aGUgc2VsZWN0ZWQgREFDIGNoYW5uZWwuCiAgICogQHBhcmFtICBoZGFjIHBvaW50ZXIgdG8gYSBEQUNfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucwogICAqICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIHRoZSBzcGVjaWZpZWQgREFDLgogICAqIEBwYXJhbSAgc0NvbmZpZyBEQUMgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUuCi0gICogQHBhcmFtICBDaGFubmVsIFRoZSBzZWxlY3RlZCBEQUMgY2hhbm5lbC4gCisgICogQHBhcmFtICBDaGFubmVsIFRoZSBzZWxlY3RlZCBEQUMgY2hhbm5lbC4KICAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICAqICAgICAgICAgICAgQGFyZyBEQUNfQ0hBTk5FTF8xOiBEQUMgQ2hhbm5lbDEgc2VsZWN0ZWQKICAgKiAgICAgICAgICAgIEBhcmcgREFDX0NIQU5ORUxfMjogREFDIENoYW5uZWwyIHNlbGVjdGVkCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfREFDX0NvbmZpZ0NoYW5uZWwoREFDX0hhbmRsZVR5cGVEZWYqIGhkYWMsIERBQ19DaGFubmVsQ29uZlR5cGVEZWYqIHNDb25maWcsIHVpbnQzMl90IENoYW5uZWwpCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfREFDX0NvbmZpZ0NoYW5uZWwoREFDX0hhbmRsZVR5cGVEZWYgKmhkYWMsIERBQ19DaGFubmVsQ29uZlR5cGVEZWYgKnNDb25maWcsIHVpbnQzMl90IENoYW5uZWwpCiB7Ci0gIHVpbnQzMl90IHRtcHJlZzEgPSAwVSwgdG1wcmVnMiA9IDBVOworICB1aW50MzJfdCB0bXByZWcxOworICB1aW50MzJfdCB0bXByZWcyOwogCiAgIC8qIENoZWNrIHRoZSBEQUMgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfREFDX1RSSUdHRVIoc0NvbmZpZy0+REFDX1RyaWdnZXIpKTsKICAgYXNzZXJ0X3BhcmFtKElTX0RBQ19PVVRQVVRfQlVGRkVSX1NUQVRFKHNDb25maWctPkRBQ19PdXRwdXRCdWZmZXIpKTsKICAgYXNzZXJ0X3BhcmFtKElTX0RBQ19DSEFOTkVMKENoYW5uZWwpKTsKLSAgCisKICAgLyogUHJvY2VzcyBsb2NrZWQgKi8KICAgX19IQUxfTE9DSyhoZGFjKTsKLSAgCisKICAgLyogQ2hhbmdlIERBQyBzdGF0ZSAqLwogICBoZGFjLT5TdGF0ZSA9IEhBTF9EQUNfU1RBVEVfQlVTWTsKLSAgCisKICAgLyogR2V0IHRoZSBEQUMgQ1IgdmFsdWUgKi8KICAgdG1wcmVnMSA9IGhkYWMtPkluc3RhbmNlLT5DUjsKICAgLyogQ2xlYXIgQk9GRngsIFRFTngsIFRTRUx4LCBXQVZFeCBhbmQgTUFNUHggYml0cyAqLwotICB0bXByZWcxICY9IH4oKCh1aW50MzJfdCkoREFDX0NSX01BTVAxIHwgREFDX0NSX1dBVkUxIHwgREFDX0NSX1RTRUwxIHwgREFDX0NSX1RFTjEgfCBEQUNfQ1JfQk9GRjEpKSA8PCBDaGFubmVsKTsKKyAgdG1wcmVnMSAmPSB+KCgodWludDMyX3QpKERBQ19DUl9NQU1QMSB8IERBQ19DUl9XQVZFMSB8IERBQ19DUl9UU0VMMSB8IERBQ19DUl9URU4xIHwgREFDX0NSX0JPRkYxKSkgPDwgKENoYW5uZWwgJiAweDEwVUwpKTsKICAgLyogQ29uZmlndXJlIGZvciB0aGUgc2VsZWN0ZWQgREFDIGNoYW5uZWw6IGJ1ZmZlciBvdXRwdXQsIHRyaWdnZXIgKi8KICAgLyogU2V0IFRTRUx4IGFuZCBURU54IGJpdHMgYWNjb3JkaW5nIHRvIERBQ19UcmlnZ2VyIHZhbHVlICovCi0gIC8qIFNldCBCT0ZGeCBiaXQgYWNjb3JkaW5nIHRvIERBQ19PdXRwdXRCdWZmZXIgdmFsdWUgKi8gICAKKyAgLyogU2V0IEJPRkZ4IGJpdCBhY2NvcmRpbmcgdG8gREFDX091dHB1dEJ1ZmZlciB2YWx1ZSAqLwogICB0bXByZWcyID0gKHNDb25maWctPkRBQ19UcmlnZ2VyIHwgc0NvbmZpZy0+REFDX091dHB1dEJ1ZmZlcik7CiAgIC8qIENhbGN1bGF0ZSBDUiByZWdpc3RlciB2YWx1ZSBkZXBlbmRpbmcgb24gREFDX0NoYW5uZWwgKi8KLSAgdG1wcmVnMSB8PSB0bXByZWcyIDw8IENoYW5uZWw7CisgIHRtcHJlZzEgfD0gdG1wcmVnMiA8PCAoQ2hhbm5lbCAmIDB4MTBVTCk7CiAgIC8qIFdyaXRlIHRvIERBQyBDUiAqLwogICBoZGFjLT5JbnN0YW5jZS0+Q1IgPSB0bXByZWcxOwogICAvKiBEaXNhYmxlIHdhdmUgZ2VuZXJhdGlvbiAqLwotICBoZGFjLT5JbnN0YW5jZS0+Q1IgJj0gfihEQUNfQ1JfV0FWRTEgPDwgQ2hhbm5lbCk7Ci0gIAorICBDTEVBUl9CSVQoaGRhYy0+SW5zdGFuY2UtPkNSLCAoREFDX0NSX1dBVkUxIDw8IChDaGFubmVsICYgMHgxMFVMKSkpOworCiAgIC8qIENoYW5nZSBEQUMgc3RhdGUgKi8KICAgaGRhYy0+U3RhdGUgPSBIQUxfREFDX1NUQVRFX1JFQURZOwotICAKKwogICAvKiBQcm9jZXNzIHVubG9ja2VkICovCiAgIF9fSEFMX1VOTE9DSyhoZGFjKTsKLSAgCi0gIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KLSAgcmV0dXJuIEhBTF9PSzsKLX0KIAotLyoqCi0gICogQGJyaWVmICBTZXQgdGhlIHNwZWNpZmllZCBkYXRhIGhvbGRpbmcgcmVnaXN0ZXIgdmFsdWUgZm9yIERBQyBjaGFubmVsLgotICAqIEBwYXJhbSAgaGRhYyBwb2ludGVyIHRvIGEgREFDX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKLSAgKiAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciB0aGUgc3BlY2lmaWVkIERBQy4KLSAgKiBAcGFyYW0gIENoYW5uZWwgVGhlIHNlbGVjdGVkIERBQyBjaGFubmVsLiAKLSAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgotICAqICAgICAgICAgICAgQGFyZyBEQUNfQ0hBTk5FTF8xOiBEQUMgQ2hhbm5lbDEgc2VsZWN0ZWQKLSAgKiAgICAgICAgICAgIEBhcmcgREFDX0NIQU5ORUxfMjogREFDIENoYW5uZWwyIHNlbGVjdGVkICAKLSAgKiBAcGFyYW0gIEFsaWdubWVudCBTcGVjaWZpZXMgdGhlIGRhdGEgYWxpZ25tZW50LgotICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6Ci0gICogICAgICAgICAgICBAYXJnIERBQ19BTElHTl84Ql9SOiA4Yml0IHJpZ2h0IGRhdGEgYWxpZ25tZW50IHNlbGVjdGVkCi0gICogICAgICAgICAgICBAYXJnIERBQ19BTElHTl8xMkJfTDogMTJiaXQgbGVmdCBkYXRhIGFsaWdubWVudCBzZWxlY3RlZAotICAqICAgICAgICAgICAgQGFyZyBEQUNfQUxJR05fMTJCX1I6IDEyYml0IHJpZ2h0IGRhdGEgYWxpZ25tZW50IHNlbGVjdGVkCi0gICogQHBhcmFtICBEYXRhIERhdGEgdG8gYmUgbG9hZGVkIGluIHRoZSBzZWxlY3RlZCBkYXRhIGhvbGRpbmcgcmVnaXN0ZXIuCi0gICogQHJldHZhbCBIQUwgc3RhdHVzCi0gICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfREFDX1NldFZhbHVlKERBQ19IYW5kbGVUeXBlRGVmKiBoZGFjLCB1aW50MzJfdCBDaGFubmVsLCB1aW50MzJfdCBBbGlnbm1lbnQsIHVpbnQzMl90IERhdGEpCi17ICAKLSAgX19JTyB1aW50MzJfdCB0bXAgPSAwVTsKLSAgCi0gIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCi0gIGFzc2VydF9wYXJhbShJU19EQUNfQ0hBTk5FTChDaGFubmVsKSk7Ci0gIGFzc2VydF9wYXJhbShJU19EQUNfQUxJR04oQWxpZ25tZW50KSk7Ci0gIGFzc2VydF9wYXJhbShJU19EQUNfREFUQShEYXRhKSk7Ci0gIAotICB0bXAgPSAodWludDMyX3QpaGRhYy0+SW5zdGFuY2U7IAotICBpZihDaGFubmVsID09IERBQ19DSEFOTkVMXzEpCi0gIHsKLSAgICB0bXAgKz0gREFDX0RIUjEyUjFfQUxJR05NRU5UKEFsaWdubWVudCk7Ci0gIH0KLSAgZWxzZQotICB7Ci0gICAgdG1wICs9IERBQ19ESFIxMlIyX0FMSUdOTUVOVChBbGlnbm1lbnQpOwotICB9Ci0KLSAgLyogU2V0IHRoZSBEQUMgY2hhbm5lbDEgc2VsZWN0ZWQgZGF0YSBob2xkaW5nIHJlZ2lzdGVyICovCi0gICooX19JTyB1aW50MzJfdCAqKSB0bXAgPSBEYXRhOwotICAKICAgLyogUmV0dXJuIGZ1bmN0aW9uIHN0YXR1cyAqLwogICByZXR1cm4gSEFMX09LOwogfQpAQCAtOTMzLDMwICs5NzEsMzAgQEAKICAgKi8KIAogLyoqIEBkZWZncm91cCBEQUNfRXhwb3J0ZWRfRnVuY3Rpb25zX0dyb3VwNCBQZXJpcGhlcmFsIFN0YXRlIGFuZCBFcnJvcnMgZnVuY3Rpb25zCi0gKiAgQGJyaWVmICAgUGVyaXBoZXJhbCBTdGF0ZSBhbmQgRXJyb3JzIGZ1bmN0aW9ucyAKLSAqCi1AdmVyYmF0aW0gICAKKyAgKiAgQGJyaWVmICAgUGVyaXBoZXJhbCBTdGF0ZSBhbmQgRXJyb3JzIGZ1bmN0aW9ucworICAqCitAdmVyYmF0aW0KICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgICAgICAjIyMjIyBQZXJpcGhlcmFsIFN0YXRlIGFuZCBFcnJvcnMgZnVuY3Rpb25zICMjIyMjCi0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgCisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgIFsuLl0KICAgICBUaGlzIHN1YnNlY3Rpb24gcHJvdmlkZXMgZnVuY3Rpb25zIGFsbG93aW5nIHRvCiAgICAgICAoKykgQ2hlY2sgdGhlIERBQyBzdGF0ZS4KICAgICAgICgrKSBDaGVjayB0aGUgREFDIEVycm9ycy4KLSAgICAgICAgCisKIEBlbmR2ZXJiYXRpbQogICAqIEB7CiAgICovCiAKIC8qKgotICAqIEBicmllZiAgcmV0dXJuIHRoZSBEQUMgc3RhdGUKKyAgKiBAYnJpZWYgIHJldHVybiB0aGUgREFDIGhhbmRsZSBzdGF0ZQogICAqIEBwYXJhbSAgaGRhYyBwb2ludGVyIHRvIGEgREFDX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKICAgKiAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciB0aGUgc3BlY2lmaWVkIERBQy4KICAgKiBAcmV0dmFsIEhBTCBzdGF0ZQogICAqLwotSEFMX0RBQ19TdGF0ZVR5cGVEZWYgSEFMX0RBQ19HZXRTdGF0ZShEQUNfSGFuZGxlVHlwZURlZiogaGRhYykKK0hBTF9EQUNfU3RhdGVUeXBlRGVmIEhBTF9EQUNfR2V0U3RhdGUoREFDX0hhbmRsZVR5cGVEZWYgKmhkYWMpCiB7Ci0gIC8qIFJldHVybiBEQUMgc3RhdGUgKi8KKyAgLyogUmV0dXJuIERBQyBoYW5kbGUgc3RhdGUgKi8KICAgcmV0dXJuIGhkYWMtPlN0YXRlOwogfQogCkBAIC05OTEsOSArMTAyOSw5IEBACiAvKioKICAgKiBAYnJpZWYgIFJlZ2lzdGVyIGEgVXNlciBEQUMgQ2FsbGJhY2sKICAgKiAgICAgICAgIFRvIGJlIHVzZWQgaW5zdGVhZCBvZiB0aGUgd2VhayAoc3VyY2hhcmdlZCkgcHJlZGVmaW5lZCBjYWxsYmFjawotICAqIEBwYXJhbSBoZGFjIERBQyBoYW5kbGUKKyAgKiBAcGFyYW0gIGhkYWMgREFDIGhhbmRsZQogICAqIEBwYXJhbSAgQ2FsbGJhY2tJRCBJRCBvZiB0aGUgY2FsbGJhY2sgdG8gYmUgcmVnaXN0ZXJlZAotICAqICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAgKiAgICAgICAgICBAYXJnIEByZWYgSEFMX0RBQ19FUlJPUl9JTlZBTElEX0NBTExCQUNLICAgREFDIEVycm9yIENhbGxiYWNrIElECiAgICogICAgICAgICAgQGFyZyBAcmVmIEhBTF9EQUNfQ0gxX0NPTVBMRVRFX0NCX0lEICAgICAgIERBQyBDSDEgQ29tcGxldGUgQ2FsbGJhY2sgSUQKICAgKiAgICAgICAgICBAYXJnIEByZWYgSEFMX0RBQ19DSDFfSEFMRl9DT01QTEVURV9DQl9JRCAgREFDIENIMSBIYWxmIENvbXBsZXRlIENhbGxiYWNrIElECkBAIC0xMDAzLDE3ICsxMDQxLDE4IEBACiAgICogICAgICAgICAgQGFyZyBAcmVmIEhBTF9EQUNfQ0gyX0hBTEZfQ09NUExFVEVfQ0JfSUQgIERBQyBDSDIgSGFsZiBDb21wbGV0ZSBDYWxsYmFjayBJRAogICAqICAgICAgICAgIEBhcmcgQHJlZiBIQUxfREFDX0NIMl9FUlJPUl9JRCAgICAgICAgICAgICBEQUMgQ0gyIEVycm9yIENhbGxiYWNrIElECiAgICogICAgICAgICAgQGFyZyBAcmVmIEhBTF9EQUNfQ0gyX1VOREVSUlVOX0NCX0lEICAgICAgIERBQyBDSDIgVW5kZXJSdW4gQ2FsbGJhY2sgSUQKLSAgKiAgICAgICAgICBAYXJnIEByZWYgSEFMX0RBQ19NU1BfSU5JVF9DQl9JRCAgICAgICAgICAgREFDIE1TUCBJbml0IENhbGxiYWNrIElECi0gICogICAgICAgICAgQGFyZyBAcmVmIEhBTF9EQUNfTVNQX0RFSU5JVF9DQl9JRCAgICAgICAgIERBQyBNU1AgRGVJbml0IENhbGxiYWNrIElECisgICogICAgICAgICAgQGFyZyBAcmVmIEhBTF9EQUNfTVNQSU5JVF9DQl9JRCAgICAgICAgICAgIERBQyBNU1AgSW5pdCBDYWxsYmFjayBJRAorICAqICAgICAgICAgIEBhcmcgQHJlZiBIQUxfREFDX01TUERFSU5JVF9DQl9JRCAgICAgICAgICBEQUMgTVNQIERlSW5pdCBDYWxsYmFjayBJRAogICAqCi0gICAgKiBAcGFyYW0gcENhbGxiYWNrIHBvaW50ZXIgdG8gdGhlIENhbGxiYWNrIGZ1bmN0aW9uCisgICogQHBhcmFtICBwQ2FsbGJhY2sgcG9pbnRlciB0byB0aGUgQ2FsbGJhY2sgZnVuY3Rpb24KICAgKiBAcmV0dmFsIHN0YXR1cwogICAqLwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0RBQ19SZWdpc3RlckNhbGxiYWNrIChEQUNfSGFuZGxlVHlwZURlZiAqaGRhYywgSEFMX0RBQ19DYWxsYmFja0lEVHlwZURlZiBDYWxsYmFja0lELCBwREFDX0NhbGxiYWNrVHlwZURlZiBwQ2FsbGJhY2spCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfREFDX1JlZ2lzdGVyQ2FsbGJhY2soREFDX0hhbmRsZVR5cGVEZWYgKmhkYWMsIEhBTF9EQUNfQ2FsbGJhY2tJRFR5cGVEZWYgQ2FsbGJhY2tJRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwREFDX0NhbGxiYWNrVHlwZURlZiBwQ2FsbGJhY2spCiB7CiAgIEhBTF9TdGF0dXNUeXBlRGVmIHN0YXR1cyA9IEhBTF9PSzsKIAotICBpZihwQ2FsbGJhY2sgPT0gTlVMTCkKKyAgaWYgKHBDYWxsYmFjayA9PSBOVUxMKQogICB7CiAgICAgLyogVXBkYXRlIHRoZSBlcnJvciBjb2RlICovCiAgICAgaGRhYy0+RXJyb3JDb2RlIHw9IEhBTF9EQUNfRVJST1JfSU5WQUxJRF9DQUxMQkFDSzsKQEAgLTEwMjMsNjQgKzEwNjIsNjYgQEAKICAgLyogUHJvY2VzcyBsb2NrZWQgKi8KICAgX19IQUxfTE9DSyhoZGFjKTsKIAotICBpZihoZGFjLT5TdGF0ZSA9PSBIQUxfREFDX1NUQVRFX1JFQURZKQorICBpZiAoaGRhYy0+U3RhdGUgPT0gSEFMX0RBQ19TVEFURV9SRUFEWSkKICAgewogICAgIHN3aXRjaCAoQ2FsbGJhY2tJRCkKICAgICB7Ci0gICAgY2FzZSBIQUxfREFDX0NIMV9DT01QTEVURV9DQl9JRCA6Ci0gICAgICBoZGFjLT5Db252Q3BsdENhbGxiYWNrQ2gxID0gcENhbGxiYWNrOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBIQUxfREFDX0NIMV9IQUxGX0NPTVBMRVRFX0NCX0lEIDoKLSAgICAgIGhkYWMtPkNvbnZIYWxmQ3BsdENhbGxiYWNrQ2gxID0gcENhbGxiYWNrOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBIQUxfREFDX0NIMV9FUlJPUl9JRCA6Ci0gICAgICBoZGFjLT5FcnJvckNhbGxiYWNrQ2gxID0gcENhbGxiYWNrOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBIQUxfREFDX0NIMV9VTkRFUlJVTl9DQl9JRCA6Ci0gICAgICBoZGFjLT5ETUFVbmRlcnJ1bkNhbGxiYWNrQ2gxID0gcENhbGxiYWNrOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBIQUxfREFDX0NIMl9DT01QTEVURV9DQl9JRCA6Ci0gICAgICBoZGFjLT5Db252Q3BsdENhbGxiYWNrQ2gyID0gcENhbGxiYWNrOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBIQUxfREFDX0NIMl9IQUxGX0NPTVBMRVRFX0NCX0lEIDoKLSAgICAgIGhkYWMtPkNvbnZIYWxmQ3BsdENhbGxiYWNrQ2gyID0gcENhbGxiYWNrOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBIQUxfREFDX0NIMl9FUlJPUl9JRCA6Ci0gICAgICBoZGFjLT5FcnJvckNhbGxiYWNrQ2gyID0gcENhbGxiYWNrOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBIQUxfREFDX0NIMl9VTkRFUlJVTl9DQl9JRCA6Ci0gICAgICBoZGFjLT5ETUFVbmRlcnJ1bkNhbGxiYWNrQ2gyID0gcENhbGxiYWNrOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBIQUxfREFDX01TUF9JTklUX0NCX0lEIDoKLSAgICAgIGhkYWMtPk1zcEluaXRDYWxsYmFjayA9IHBDYWxsYmFjazsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgSEFMX0RBQ19NU1BfREVJTklUX0NCX0lEIDoKLSAgICAgIGhkYWMtPk1zcERlSW5pdENhbGxiYWNrID0gcENhbGxiYWNrOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdCA6Ci0gICAgICAvKiBVcGRhdGUgdGhlIGVycm9yIGNvZGUgKi8KLSAgICAgIGhkYWMtPkVycm9yQ29kZSB8PSBIQUxfREFDX0VSUk9SX0lOVkFMSURfQ0FMTEJBQ0s7Ci0gICAgICAvKiB1cGRhdGUgcmV0dXJuIHN0YXR1cyAqLwotICAgICAgc3RhdHVzID0gIEhBTF9FUlJPUjsKLSAgICAgIGJyZWFrOworICAgICAgY2FzZSBIQUxfREFDX0NIMV9DT01QTEVURV9DQl9JRCA6CisgICAgICAgIGhkYWMtPkNvbnZDcGx0Q2FsbGJhY2tDaDEgPSBwQ2FsbGJhY2s7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBIQUxfREFDX0NIMV9IQUxGX0NPTVBMRVRFX0NCX0lEIDoKKyAgICAgICAgaGRhYy0+Q29udkhhbGZDcGx0Q2FsbGJhY2tDaDEgPSBwQ2FsbGJhY2s7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBIQUxfREFDX0NIMV9FUlJPUl9JRCA6CisgICAgICAgIGhkYWMtPkVycm9yQ2FsbGJhY2tDaDEgPSBwQ2FsbGJhY2s7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBIQUxfREFDX0NIMV9VTkRFUlJVTl9DQl9JRCA6CisgICAgICAgIGhkYWMtPkRNQVVuZGVycnVuQ2FsbGJhY2tDaDEgPSBwQ2FsbGJhY2s7CisgICAgICAgIGJyZWFrOworI2lmIGRlZmluZWQoREFDX0NIQU5ORUwyX1NVUFBPUlQpCisgICAgICBjYXNlIEhBTF9EQUNfQ0gyX0NPTVBMRVRFX0NCX0lEIDoKKyAgICAgICAgaGRhYy0+Q29udkNwbHRDYWxsYmFja0NoMiA9IHBDYWxsYmFjazsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEhBTF9EQUNfQ0gyX0hBTEZfQ09NUExFVEVfQ0JfSUQgOgorICAgICAgICBoZGFjLT5Db252SGFsZkNwbHRDYWxsYmFja0NoMiA9IHBDYWxsYmFjazsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEhBTF9EQUNfQ0gyX0VSUk9SX0lEIDoKKyAgICAgICAgaGRhYy0+RXJyb3JDYWxsYmFja0NoMiA9IHBDYWxsYmFjazsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEhBTF9EQUNfQ0gyX1VOREVSUlVOX0NCX0lEIDoKKyAgICAgICAgaGRhYy0+RE1BVW5kZXJydW5DYWxsYmFja0NoMiA9IHBDYWxsYmFjazsKKyAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogREFDX0NIQU5ORUwyX1NVUFBPUlQgKi8KKyAgICAgIGNhc2UgSEFMX0RBQ19NU1BJTklUX0NCX0lEIDoKKyAgICAgICAgaGRhYy0+TXNwSW5pdENhbGxiYWNrID0gcENhbGxiYWNrOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgSEFMX0RBQ19NU1BERUlOSVRfQ0JfSUQgOgorICAgICAgICBoZGFjLT5Nc3BEZUluaXRDYWxsYmFjayA9IHBDYWxsYmFjazsKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0IDoKKyAgICAgICAgLyogVXBkYXRlIHRoZSBlcnJvciBjb2RlICovCisgICAgICAgIGhkYWMtPkVycm9yQ29kZSB8PSBIQUxfREFDX0VSUk9SX0lOVkFMSURfQ0FMTEJBQ0s7CisgICAgICAgIC8qIHVwZGF0ZSByZXR1cm4gc3RhdHVzICovCisgICAgICAgIHN0YXR1cyA9ICBIQUxfRVJST1I7CisgICAgICAgIGJyZWFrOwogICAgIH0KICAgfQogICBlbHNlIGlmIChoZGFjLT5TdGF0ZSA9PSBIQUxfREFDX1NUQVRFX1JFU0VUKQogICB7CiAgICAgc3dpdGNoIChDYWxsYmFja0lEKQogICAgIHsKLSAgICBjYXNlIEhBTF9EQUNfTVNQX0lOSVRfQ0JfSUQgOgotICAgICAgaGRhYy0+TXNwSW5pdENhbGxiYWNrID0gcENhbGxiYWNrOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBIQUxfREFDX01TUF9ERUlOSVRfQ0JfSUQgOgotICAgICAgaGRhYy0+TXNwRGVJbml0Q2FsbGJhY2sgPSBwQ2FsbGJhY2s7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0IDoKLSAgICAgIC8qIFVwZGF0ZSB0aGUgZXJyb3IgY29kZSAqLwotICAgICAgaGRhYy0+RXJyb3JDb2RlIHw9IEhBTF9EQUNfRVJST1JfSU5WQUxJRF9DQUxMQkFDSzsKLSAgICAgIC8qIHVwZGF0ZSByZXR1cm4gc3RhdHVzICovCi0gICAgICBzdGF0dXMgPSAgSEFMX0VSUk9SOwotICAgICAgYnJlYWs7CisgICAgICBjYXNlIEhBTF9EQUNfTVNQSU5JVF9DQl9JRCA6CisgICAgICAgIGhkYWMtPk1zcEluaXRDYWxsYmFjayA9IHBDYWxsYmFjazsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEhBTF9EQUNfTVNQREVJTklUX0NCX0lEIDoKKyAgICAgICAgaGRhYy0+TXNwRGVJbml0Q2FsbGJhY2sgPSBwQ2FsbGJhY2s7CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdCA6CisgICAgICAgIC8qIFVwZGF0ZSB0aGUgZXJyb3IgY29kZSAqLworICAgICAgICBoZGFjLT5FcnJvckNvZGUgfD0gSEFMX0RBQ19FUlJPUl9JTlZBTElEX0NBTExCQUNLOworICAgICAgICAvKiB1cGRhdGUgcmV0dXJuIHN0YXR1cyAqLworICAgICAgICBzdGF0dXMgPSAgSEFMX0VSUk9SOworICAgICAgICBicmVhazsKICAgICB9CiAgIH0KICAgZWxzZQpAQCAtMTA5OSwxMCArMTE0MCwxMCBAQAogLyoqCiAgICogQGJyaWVmICBVbnJlZ2lzdGVyIGEgVXNlciBEQUMgQ2FsbGJhY2sKICAgKiAgICAgICAgIERBQyBDYWxsYmFjayBpcyByZWRpcmVjdGVkIHRvIHRoZSB3ZWFrIChzdXJjaGFyZ2VkKSBwcmVkZWZpbmVkIGNhbGxiYWNrCi0gICogQHBhcmFtIGhkYWMgREFDIGhhbmRsZQorICAqIEBwYXJhbSAgaGRhYyBEQUMgaGFuZGxlCiAgICogQHBhcmFtICBDYWxsYmFja0lEIElEIG9mIHRoZSBjYWxsYmFjayB0byBiZSB1bnJlZ2lzdGVyZWQKLSAgKiAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKLSAgKiAgICAgICAgICBAYXJnIEByZWYgSEFMX0RBQ19DSDFfQ09NUExFVEVfQ0JfSUQgICAgICAgICAgREFDIENIMSB0cmFuZmVyIENvbXBsZXRlIENhbGxiYWNrIElECisgICogICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorICAqICAgICAgICAgIEBhcmcgQHJlZiBIQUxfREFDX0NIMV9DT01QTEVURV9DQl9JRCAgICAgICAgICBEQUMgQ0gxIHRyYW5zZmVyIENvbXBsZXRlIENhbGxiYWNrIElECiAgICogICAgICAgICAgQGFyZyBAcmVmIEhBTF9EQUNfQ0gxX0hBTEZfQ09NUExFVEVfQ0JfSUQgICAgIERBQyBDSDEgSGFsZiBDb21wbGV0ZSBDYWxsYmFjayBJRAogICAqICAgICAgICAgIEBhcmcgQHJlZiBIQUxfREFDX0NIMV9FUlJPUl9JRCAgICAgICAgICAgICAgICBEQUMgQ0gxIEVycm9yIENhbGxiYWNrIElECiAgICogICAgICAgICAgQGFyZyBAcmVmIEhBTF9EQUNfQ0gxX1VOREVSUlVOX0NCX0lEICAgICAgICAgIERBQyBDSDEgVW5kZXJSdW4gQ2FsbGJhY2sgSUQKQEAgLTExMTAsODggKzExNTEsOTIgQEAKICAgKiAgICAgICAgICBAYXJnIEByZWYgSEFMX0RBQ19DSDJfSEFMRl9DT01QTEVURV9DQl9JRCAgICAgREFDIENIMiBIYWxmIENvbXBsZXRlIENhbGxiYWNrIElECiAgICogICAgICAgICAgQGFyZyBAcmVmIEhBTF9EQUNfQ0gyX0VSUk9SX0lEICAgICAgICAgICAgICAgIERBQyBDSDIgRXJyb3IgQ2FsbGJhY2sgSUQKICAgKiAgICAgICAgICBAYXJnIEByZWYgSEFMX0RBQ19DSDJfVU5ERVJSVU5fQ0JfSUQgICAgICAgICAgREFDIENIMiBVbmRlclJ1biBDYWxsYmFjayBJRAotICAqICAgICAgICAgIEBhcmcgQHJlZiBIQUxfREFDX01TUF9JTklUX0NCX0lEICAgICAgICAgICAgICBEQUMgTVNQIEluaXQgQ2FsbGJhY2sgSUQKLSAgKiAgICAgICAgICBAYXJnIEByZWYgSEFMX0RBQ19NU1BfREVJTklUX0NCX0lEICAgICAgICAgICAgREFDIE1TUCBEZUluaXQgQ2FsbGJhY2sgSUQKKyAgKiAgICAgICAgICBAYXJnIEByZWYgSEFMX0RBQ19NU1BJTklUX0NCX0lEICAgICAgICAgICAgICAgREFDIE1TUCBJbml0IENhbGxiYWNrIElECisgICogICAgICAgICAgQGFyZyBAcmVmIEhBTF9EQUNfTVNQREVJTklUX0NCX0lEICAgICAgICAgICAgIERBQyBNU1AgRGVJbml0IENhbGxiYWNrIElECiAgICogICAgICAgICAgQGFyZyBAcmVmIEhBTF9EQUNfQUxMX0NCX0lEICAgICAgICAgICAgICAgICAgIERBQyBBbGwgY2FsbGJhY2tzCiAgICogQHJldHZhbCBzdGF0dXMKICAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9EQUNfVW5SZWdpc3RlckNhbGxiYWNrIChEQUNfSGFuZGxlVHlwZURlZiAqaGRhYywgSEFMX0RBQ19DYWxsYmFja0lEVHlwZURlZiBDYWxsYmFja0lEKQorSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0RBQ19VblJlZ2lzdGVyQ2FsbGJhY2soREFDX0hhbmRsZVR5cGVEZWYgKmhkYWMsIEhBTF9EQUNfQ2FsbGJhY2tJRFR5cGVEZWYgQ2FsbGJhY2tJRCkKIHsKICAgSEFMX1N0YXR1c1R5cGVEZWYgc3RhdHVzID0gSEFMX09LOwogCiAgIC8qIFByb2Nlc3MgbG9ja2VkICovCiAgIF9fSEFMX0xPQ0soaGRhYyk7CiAKLSAgaWYoaGRhYy0+U3RhdGUgPT0gSEFMX0RBQ19TVEFURV9SRUFEWSkKKyAgaWYgKGhkYWMtPlN0YXRlID09IEhBTF9EQUNfU1RBVEVfUkVBRFkpCiAgIHsKICAgICBzd2l0Y2ggKENhbGxiYWNrSUQpCiAgICAgewotICAgIGNhc2UgSEFMX0RBQ19DSDFfQ09NUExFVEVfQ0JfSUQgOgotICAgICAgaGRhYy0+Q29udkNwbHRDYWxsYmFja0NoMSA9IEhBTF9EQUNfQ29udkNwbHRDYWxsYmFja0NoMTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgSEFMX0RBQ19DSDFfSEFMRl9DT01QTEVURV9DQl9JRCA6Ci0gICAgICBoZGFjLT5Db252SGFsZkNwbHRDYWxsYmFja0NoMSA9IEhBTF9EQUNfQ29udkhhbGZDcGx0Q2FsbGJhY2tDaDE7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEhBTF9EQUNfQ0gxX0VSUk9SX0lEIDoKLSAgICAgIGhkYWMtPkVycm9yQ2FsbGJhY2tDaDEgPSBIQUxfREFDX0Vycm9yQ2FsbGJhY2tDaDE7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEhBTF9EQUNfQ0gxX1VOREVSUlVOX0NCX0lEIDoKLSAgICAgIGhkYWMtPkRNQVVuZGVycnVuQ2FsbGJhY2tDaDEgPSBIQUxfREFDX0RNQVVuZGVycnVuQ2FsbGJhY2tDaDE7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEhBTF9EQUNfQ0gyX0NPTVBMRVRFX0NCX0lEIDoKLSAgICAgIGhkYWMtPkNvbnZDcGx0Q2FsbGJhY2tDaDIgPSBIQUxfREFDRXhfQ29udkNwbHRDYWxsYmFja0NoMjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgSEFMX0RBQ19DSDJfSEFMRl9DT01QTEVURV9DQl9JRCA6Ci0gICAgICBoZGFjLT5Db252SGFsZkNwbHRDYWxsYmFja0NoMiA9IEhBTF9EQUNFeF9Db252SGFsZkNwbHRDYWxsYmFja0NoMjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgSEFMX0RBQ19DSDJfRVJST1JfSUQgOgotICAgICAgaGRhYy0+RXJyb3JDYWxsYmFja0NoMiA9IEhBTF9EQUNFeF9FcnJvckNhbGxiYWNrQ2gyOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBIQUxfREFDX0NIMl9VTkRFUlJVTl9DQl9JRCA6Ci0gICAgICBoZGFjLT5ETUFVbmRlcnJ1bkNhbGxiYWNrQ2gyID0gSEFMX0RBQ0V4X0RNQVVuZGVycnVuQ2FsbGJhY2tDaDI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEhBTF9EQUNfTVNQX0lOSVRfQ0JfSUQgOgotICAgICAgaGRhYy0+TXNwSW5pdENhbGxiYWNrID0gSEFMX0RBQ19Nc3BJbml0OwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBIQUxfREFDX01TUF9ERUlOSVRfQ0JfSUQgOgotICAgICAgaGRhYy0+TXNwRGVJbml0Q2FsbGJhY2sgPSBIQUxfREFDX01zcERlSW5pdDsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgSEFMX0RBQ19BTExfQ0JfSUQgOgotICAgICAgaGRhYy0+Q29udkNwbHRDYWxsYmFja0NoMSA9IEhBTF9EQUNfQ29udkNwbHRDYWxsYmFja0NoMTsKLSAgICAgIGhkYWMtPkNvbnZIYWxmQ3BsdENhbGxiYWNrQ2gxID0gSEFMX0RBQ19Db252SGFsZkNwbHRDYWxsYmFja0NoMTsKLSAgICAgIGhkYWMtPkVycm9yQ2FsbGJhY2tDaDEgPSBIQUxfREFDX0Vycm9yQ2FsbGJhY2tDaDE7Ci0gICAgICBoZGFjLT5ETUFVbmRlcnJ1bkNhbGxiYWNrQ2gxID0gSEFMX0RBQ19ETUFVbmRlcnJ1bkNhbGxiYWNrQ2gxOwotICAgICAgaGRhYy0+Q29udkNwbHRDYWxsYmFja0NoMiA9IEhBTF9EQUNFeF9Db252Q3BsdENhbGxiYWNrQ2gyOwotICAgICAgaGRhYy0+Q29udkhhbGZDcGx0Q2FsbGJhY2tDaDIgPSBIQUxfREFDRXhfQ29udkhhbGZDcGx0Q2FsbGJhY2tDaDI7Ci0gICAgICBoZGFjLT5FcnJvckNhbGxiYWNrQ2gyID0gSEFMX0RBQ0V4X0Vycm9yQ2FsbGJhY2tDaDI7Ci0gICAgICBoZGFjLT5ETUFVbmRlcnJ1bkNhbGxiYWNrQ2gyID0gSEFMX0RBQ0V4X0RNQVVuZGVycnVuQ2FsbGJhY2tDaDI7Ci0gICAgICBoZGFjLT5Nc3BJbml0Q2FsbGJhY2sgPSBIQUxfREFDX01zcEluaXQ7Ci0gICAgICBoZGFjLT5Nc3BEZUluaXRDYWxsYmFjayA9IEhBTF9EQUNfTXNwRGVJbml0OwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdCA6Ci0gICAgICAvKiBVcGRhdGUgdGhlIGVycm9yIGNvZGUgKi8KLSAgICAgIGhkYWMtPkVycm9yQ29kZSB8PSBIQUxfREFDX0VSUk9SX0lOVkFMSURfQ0FMTEJBQ0s7Ci0gICAgICAvKiB1cGRhdGUgcmV0dXJuIHN0YXR1cyAqLwotICAgICAgc3RhdHVzID0gIEhBTF9FUlJPUjsKLSAgICAgIGJyZWFrOworICAgICAgY2FzZSBIQUxfREFDX0NIMV9DT01QTEVURV9DQl9JRCA6CisgICAgICAgIGhkYWMtPkNvbnZDcGx0Q2FsbGJhY2tDaDEgPSBIQUxfREFDX0NvbnZDcGx0Q2FsbGJhY2tDaDE7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBIQUxfREFDX0NIMV9IQUxGX0NPTVBMRVRFX0NCX0lEIDoKKyAgICAgICAgaGRhYy0+Q29udkhhbGZDcGx0Q2FsbGJhY2tDaDEgPSBIQUxfREFDX0NvbnZIYWxmQ3BsdENhbGxiYWNrQ2gxOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgSEFMX0RBQ19DSDFfRVJST1JfSUQgOgorICAgICAgICBoZGFjLT5FcnJvckNhbGxiYWNrQ2gxID0gSEFMX0RBQ19FcnJvckNhbGxiYWNrQ2gxOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgSEFMX0RBQ19DSDFfVU5ERVJSVU5fQ0JfSUQgOgorICAgICAgICBoZGFjLT5ETUFVbmRlcnJ1bkNhbGxiYWNrQ2gxID0gSEFMX0RBQ19ETUFVbmRlcnJ1bkNhbGxiYWNrQ2gxOworICAgICAgICBicmVhazsKKyNpZiBkZWZpbmVkKERBQ19DSEFOTkVMMl9TVVBQT1JUKQorICAgICAgY2FzZSBIQUxfREFDX0NIMl9DT01QTEVURV9DQl9JRCA6CisgICAgICAgIGhkYWMtPkNvbnZDcGx0Q2FsbGJhY2tDaDIgPSBIQUxfREFDRXhfQ29udkNwbHRDYWxsYmFja0NoMjsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEhBTF9EQUNfQ0gyX0hBTEZfQ09NUExFVEVfQ0JfSUQgOgorICAgICAgICBoZGFjLT5Db252SGFsZkNwbHRDYWxsYmFja0NoMiA9IEhBTF9EQUNFeF9Db252SGFsZkNwbHRDYWxsYmFja0NoMjsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEhBTF9EQUNfQ0gyX0VSUk9SX0lEIDoKKyAgICAgICAgaGRhYy0+RXJyb3JDYWxsYmFja0NoMiA9IEhBTF9EQUNFeF9FcnJvckNhbGxiYWNrQ2gyOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgSEFMX0RBQ19DSDJfVU5ERVJSVU5fQ0JfSUQgOgorICAgICAgICBoZGFjLT5ETUFVbmRlcnJ1bkNhbGxiYWNrQ2gyID0gSEFMX0RBQ0V4X0RNQVVuZGVycnVuQ2FsbGJhY2tDaDI7CisgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIERBQ19DSEFOTkVMMl9TVVBQT1JUICovCisgICAgICBjYXNlIEhBTF9EQUNfTVNQSU5JVF9DQl9JRCA6CisgICAgICAgIGhkYWMtPk1zcEluaXRDYWxsYmFjayA9IEhBTF9EQUNfTXNwSW5pdDsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEhBTF9EQUNfTVNQREVJTklUX0NCX0lEIDoKKyAgICAgICAgaGRhYy0+TXNwRGVJbml0Q2FsbGJhY2sgPSBIQUxfREFDX01zcERlSW5pdDsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEhBTF9EQUNfQUxMX0NCX0lEIDoKKyAgICAgICAgaGRhYy0+Q29udkNwbHRDYWxsYmFja0NoMSA9IEhBTF9EQUNfQ29udkNwbHRDYWxsYmFja0NoMTsKKyAgICAgICAgaGRhYy0+Q29udkhhbGZDcGx0Q2FsbGJhY2tDaDEgPSBIQUxfREFDX0NvbnZIYWxmQ3BsdENhbGxiYWNrQ2gxOworICAgICAgICBoZGFjLT5FcnJvckNhbGxiYWNrQ2gxID0gSEFMX0RBQ19FcnJvckNhbGxiYWNrQ2gxOworICAgICAgICBoZGFjLT5ETUFVbmRlcnJ1bkNhbGxiYWNrQ2gxID0gSEFMX0RBQ19ETUFVbmRlcnJ1bkNhbGxiYWNrQ2gxOworI2lmIGRlZmluZWQoREFDX0NIQU5ORUwyX1NVUFBPUlQpCisgICAgICAgIGhkYWMtPkNvbnZDcGx0Q2FsbGJhY2tDaDIgPSBIQUxfREFDRXhfQ29udkNwbHRDYWxsYmFja0NoMjsKKyAgICAgICAgaGRhYy0+Q29udkhhbGZDcGx0Q2FsbGJhY2tDaDIgPSBIQUxfREFDRXhfQ29udkhhbGZDcGx0Q2FsbGJhY2tDaDI7CisgICAgICAgIGhkYWMtPkVycm9yQ2FsbGJhY2tDaDIgPSBIQUxfREFDRXhfRXJyb3JDYWxsYmFja0NoMjsKKyAgICAgICAgaGRhYy0+RE1BVW5kZXJydW5DYWxsYmFja0NoMiA9IEhBTF9EQUNFeF9ETUFVbmRlcnJ1bkNhbGxiYWNrQ2gyOworI2VuZGlmIC8qIERBQ19DSEFOTkVMMl9TVVBQT1JUICovCisgICAgICAgIGhkYWMtPk1zcEluaXRDYWxsYmFjayA9IEhBTF9EQUNfTXNwSW5pdDsKKyAgICAgICAgaGRhYy0+TXNwRGVJbml0Q2FsbGJhY2sgPSBIQUxfREFDX01zcERlSW5pdDsKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0IDoKKyAgICAgICAgLyogVXBkYXRlIHRoZSBlcnJvciBjb2RlICovCisgICAgICAgIGhkYWMtPkVycm9yQ29kZSB8PSBIQUxfREFDX0VSUk9SX0lOVkFMSURfQ0FMTEJBQ0s7CisgICAgICAgIC8qIHVwZGF0ZSByZXR1cm4gc3RhdHVzICovCisgICAgICAgIHN0YXR1cyA9ICBIQUxfRVJST1I7CisgICAgICAgIGJyZWFrOwogICAgIH0KICAgfQogICBlbHNlIGlmIChoZGFjLT5TdGF0ZSA9PSBIQUxfREFDX1NUQVRFX1JFU0VUKQogICB7CiAgICAgc3dpdGNoIChDYWxsYmFja0lEKQogICAgIHsKLSAgICBjYXNlIEhBTF9EQUNfTVNQX0lOSVRfQ0JfSUQgOgotICAgICAgaGRhYy0+TXNwSW5pdENhbGxiYWNrID0gSEFMX0RBQ19Nc3BJbml0OwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBIQUxfREFDX01TUF9ERUlOSVRfQ0JfSUQgOgotICAgICAgaGRhYy0+TXNwRGVJbml0Q2FsbGJhY2sgPSBIQUxfREFDX01zcERlSW5pdDsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQgOgotICAgICAgLyogVXBkYXRlIHRoZSBlcnJvciBjb2RlICovCi0gICAgICBoZGFjLT5FcnJvckNvZGUgfD0gSEFMX0RBQ19FUlJPUl9JTlZBTElEX0NBTExCQUNLOwotICAgICAgLyogdXBkYXRlIHJldHVybiBzdGF0dXMgKi8KLSAgICAgIHN0YXR1cyA9ICBIQUxfRVJST1I7Ci0gICAgICBicmVhazsKKyAgICAgIGNhc2UgSEFMX0RBQ19NU1BJTklUX0NCX0lEIDoKKyAgICAgICAgaGRhYy0+TXNwSW5pdENhbGxiYWNrID0gSEFMX0RBQ19Nc3BJbml0OworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgSEFMX0RBQ19NU1BERUlOSVRfQ0JfSUQgOgorICAgICAgICBoZGFjLT5Nc3BEZUluaXRDYWxsYmFjayA9IEhBTF9EQUNfTXNwRGVJbml0OworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQgOgorICAgICAgICAvKiBVcGRhdGUgdGhlIGVycm9yIGNvZGUgKi8KKyAgICAgICAgaGRhYy0+RXJyb3JDb2RlIHw9IEhBTF9EQUNfRVJST1JfSU5WQUxJRF9DQUxMQkFDSzsKKyAgICAgICAgLyogdXBkYXRlIHJldHVybiBzdGF0dXMgKi8KKyAgICAgICAgc3RhdHVzID0gIEhBTF9FUlJPUjsKKyAgICAgICAgYnJlYWs7CiAgICAgfQogICB9CiAgIGVsc2UKQEAgLTEyMjEsNzYgKzEyNjYsNzUgQEAKICAgKi8KIAogLyoqCi0gICogQGJyaWVmICBETUEgY29udmVyc2lvbiBjb21wbGV0ZSBjYWxsYmFjay4gCisgICogQGJyaWVmICBETUEgY29udmVyc2lvbiBjb21wbGV0ZSBjYWxsYmFjay4KICAgKiBAcGFyYW0gIGhkbWEgcG9pbnRlciB0byBhIERNQV9IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCiAgICogICAgICAgICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIHRoZSBzcGVjaWZpZWQgRE1BIG1vZHVsZS4KICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KLXN0YXRpYyB2b2lkIERBQ19ETUFDb252Q3BsdENoMShETUFfSGFuZGxlVHlwZURlZiAqaGRtYSkgICAKK3ZvaWQgREFDX0RNQUNvbnZDcGx0Q2gxKERNQV9IYW5kbGVUeXBlRGVmICpoZG1hKQogewotICBEQUNfSGFuZGxlVHlwZURlZiogaGRhYyA9ICggREFDX0hhbmRsZVR5cGVEZWYqICkoKERNQV9IYW5kbGVUeXBlRGVmKiApaGRtYSktPlBhcmVudDsKLSAgCisgIERBQ19IYW5kbGVUeXBlRGVmICpoZGFjID0gKERBQ19IYW5kbGVUeXBlRGVmICopKChETUFfSGFuZGxlVHlwZURlZiAqKWhkbWEpLT5QYXJlbnQ7CisKICNpZiAoVVNFX0hBTF9EQUNfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCiAgIGhkYWMtPkNvbnZDcGx0Q2FsbGJhY2tDaDEoaGRhYyk7CiAjZWxzZQotICBIQUxfREFDX0NvbnZDcGx0Q2FsbGJhY2tDaDEoaGRhYyk7IAorICBIQUxfREFDX0NvbnZDcGx0Q2FsbGJhY2tDaDEoaGRhYyk7CiAjZW5kaWYgLyogVVNFX0hBTF9EQUNfUkVHSVNURVJfQ0FMTEJBQ0tTICovCi0gIAotICBoZGFjLT5TdGF0ZT0gSEFMX0RBQ19TVEFURV9SRUFEWTsKKworICBoZGFjLT5TdGF0ZSA9IEhBTF9EQUNfU1RBVEVfUkVBRFk7CiB9CiAKIC8qKgotICAqIEBicmllZiAgRE1BIGhhbGYgdHJhbnNmZXIgY29tcGxldGUgY2FsbGJhY2suIAorICAqIEBicmllZiAgRE1BIGhhbGYgdHJhbnNmZXIgY29tcGxldGUgY2FsbGJhY2suCiAgICogQHBhcmFtICBoZG1hIHBvaW50ZXIgdG8gYSBETUFfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucwogICAqICAgICAgICAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciB0aGUgc3BlY2lmaWVkIERNQSBtb2R1bGUuCiAgICogQHJldHZhbCBOb25lCiAgICovCi1zdGF0aWMgdm9pZCBEQUNfRE1BSGFsZkNvbnZDcGx0Q2gxKERNQV9IYW5kbGVUeXBlRGVmICpoZG1hKSAgIAordm9pZCBEQUNfRE1BSGFsZkNvbnZDcGx0Q2gxKERNQV9IYW5kbGVUeXBlRGVmICpoZG1hKQogewotICAgIERBQ19IYW5kbGVUeXBlRGVmKiBoZGFjID0gKCBEQUNfSGFuZGxlVHlwZURlZiogKSgoRE1BX0hhbmRsZVR5cGVEZWYqICloZG1hKS0+UGFyZW50OwotICAgIC8qIENvbnZlcnNpb24gY29tcGxldGUgY2FsbGJhY2sgKi8KKyAgREFDX0hhbmRsZVR5cGVEZWYgKmhkYWMgPSAoREFDX0hhbmRsZVR5cGVEZWYgKikoKERNQV9IYW5kbGVUeXBlRGVmICopaGRtYSktPlBhcmVudDsKKyAgLyogQ29udmVyc2lvbiBjb21wbGV0ZSBjYWxsYmFjayAqLwogI2lmIChVU0VfSEFMX0RBQ19SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkKICAgaGRhYy0+Q29udkhhbGZDcGx0Q2FsbGJhY2tDaDEoaGRhYyk7CiAjZWxzZQotICAgIEhBTF9EQUNfQ29udkhhbGZDcGx0Q2FsbGJhY2tDaDEoaGRhYyk7IAorICBIQUxfREFDX0NvbnZIYWxmQ3BsdENhbGxiYWNrQ2gxKGhkYWMpOwogI2VuZGlmICAvKiBVU0VfSEFMX0RBQ19SRUdJU1RFUl9DQUxMQkFDS1MgKi8KIH0KIAogLyoqCi0gICogQGJyaWVmICBETUEgZXJyb3IgY2FsbGJhY2sgCisgICogQGJyaWVmICBETUEgZXJyb3IgY2FsbGJhY2sKICAgKiBAcGFyYW0gIGhkbWEgcG9pbnRlciB0byBhIERNQV9IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCiAgICogICAgICAgICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIHRoZSBzcGVjaWZpZWQgRE1BIG1vZHVsZS4KICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KLXN0YXRpYyB2b2lkIERBQ19ETUFFcnJvckNoMShETUFfSGFuZGxlVHlwZURlZiAqaGRtYSkgICAKK3ZvaWQgREFDX0RNQUVycm9yQ2gxKERNQV9IYW5kbGVUeXBlRGVmICpoZG1hKQogewotICBEQUNfSGFuZGxlVHlwZURlZiogaGRhYyA9ICggREFDX0hhbmRsZVR5cGVEZWYqICkoKERNQV9IYW5kbGVUeXBlRGVmKiApaGRtYSktPlBhcmVudDsKLSAgICAKKyAgREFDX0hhbmRsZVR5cGVEZWYgKmhkYWMgPSAoREFDX0hhbmRsZVR5cGVEZWYgKikoKERNQV9IYW5kbGVUeXBlRGVmICopaGRtYSktPlBhcmVudDsKKwogICAvKiBTZXQgREFDIGVycm9yIGNvZGUgdG8gRE1BIGVycm9yICovCiAgIGhkYWMtPkVycm9yQ29kZSB8PSBIQUxfREFDX0VSUk9SX0RNQTsKLSAgICAKKwogI2lmIChVU0VfSEFMX0RBQ19SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkKICAgaGRhYy0+RXJyb3JDYWxsYmFja0NoMShoZGFjKTsKICNlbHNlCi0gIEhBTF9EQUNfRXJyb3JDYWxsYmFja0NoMShoZGFjKTsgCisgIEhBTF9EQUNfRXJyb3JDYWxsYmFja0NoMShoZGFjKTsKICNlbmRpZiAvKiBVU0VfSEFMX0RBQ19SRUdJU1RFUl9DQUxMQkFDS1MgKi8KLSAgICAKLSAgaGRhYy0+U3RhdGU9IEhBTF9EQUNfU1RBVEVfUkVBRFk7CisKKyAgaGRhYy0+U3RhdGUgPSBIQUxfREFDX1NUQVRFX1JFQURZOwogfQogCiAvKioKICAgKiBAfQogICAqLwotI2VuZGlmIC8qIFNUTTMyRjQwNXh4IHx8IFNUTTMyRjQxNXh4IHx8IFNUTTMyRjQwN3h4IHx8IFNUTTMyRjQxN3h4IHx8XAotICAgICAgICAgIFNUTTMyRjQyN3h4IHx8IFNUTTMyRjQzN3h4IHx8IFNUTTMyRjQyOXh4IHx8IFNUTTMyRjQzOXh4IHx8XAotICAgICAgICAgIFNUTTMyRjQxMHh4IHx8IFNUTTMyRjQ0Nnh4IHx8IFNUTTMyRjQ2OXh4IHx8IFNUTTMyRjQ3OXh4IHx8XAotCQkgIFNUTTMyRjQxM3h4IHx8IFNUTTMyRjQyM3h4ICovCi0jZW5kaWYgLyogSEFMX0RBQ19NT0RVTEVfRU5BQkxFRCAqLwogCiAvKioKICAgKiBAfQogICAqLwogCisjZW5kaWYgLyogREFDICovCisKKyNlbmRpZiAvKiBIQUxfREFDX01PRFVMRV9FTkFCTEVEICovCisKIC8qKgogICAqIEB9CiAgICovCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmNHh4X2hhbF9kYWNfZXguYyBiL1NyYy9zdG0zMmY0eHhfaGFsX2RhY19leC5jCmluZGV4IGRiNzRhY2YuLjUwZmYyYjggMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmY0eHhfaGFsX2RhY19leC5jCisrKyBiL1NyYy9zdG0zMmY0eHhfaGFsX2RhY19leC5jCkBAIC0yLDI4ICsyLDM2IEBACiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqIEBmaWxlICAgIHN0bTMyZjR4eF9oYWxfZGFjX2V4LmMKICAgKiBAYXV0aG9yICBNQ0QgQXBwbGljYXRpb24gVGVhbQotICAqIEBicmllZiAgIERBQyBIQUwgbW9kdWxlIGRyaXZlci4KLSAgKiAgICAgICAgIFRoaXMgZmlsZSBwcm92aWRlcyBmaXJtd2FyZSBmdW5jdGlvbnMgdG8gbWFuYWdlIHRoZSBmb2xsb3dpbmcgCi0gICogICAgICAgICBmdW5jdGlvbmFsaXRpZXMgb2YgREFDIGV4dGVuc2lvbiBwZXJpcGhlcmFsOgotICAqICAgICAgICAgICArIEV4dGVuZGVkIGZlYXR1cmVzIGZ1bmN0aW9ucwotICAqICAgICAKKyAgKiBAYnJpZWYgICBFeHRlbmRlZCBEQUMgSEFMIG1vZHVsZSBkcml2ZXIuCisgICogICAgICAgICAgVGhpcyBmaWxlIHByb3ZpZGVzIGZpcm13YXJlIGZ1bmN0aW9ucyB0byBtYW5hZ2UgdGhlIGV4dGVuZGVkCisgICogICAgICAgICAgZnVuY3Rpb25hbGl0aWVzIG9mIHRoZSBEQUMgcGVyaXBoZXJhbC4KICAgKgotICBAdmVyYmF0aW0gICAgICAKKyAgKgorICBAdmVyYmF0aW0KICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgICAgICAgICAgICAgICAgIyMjIyMgSG93IHRvIHVzZSB0aGlzIGRyaXZlciAjIyMjIwogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICBbLi5dICAgICAgICAgIAotICAgICAgKCspIFdoZW4gRHVhbCBtb2RlIGlzIGVuYWJsZWQgKGkuZSBEQUMgQ2hhbm5lbDEgYW5kIENoYW5uZWwyIGFyZSB1c2VkIHNpbXVsdGFuZW91c2x5KSA6CisgICAgWy4uXQorCisgICAgICoqKiBEdWFsIG1vZGUgSU8gb3BlcmF0aW9uICoqKgorICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICAgWy4uXQorICAgICAgKCspIFdoZW4gRHVhbCBtb2RlIGlzIGVuYWJsZWQgKGkuZS4gREFDIENoYW5uZWwxIGFuZCBDaGFubmVsMiBhcmUgdXNlZCBzaW11bHRhbmVvdXNseSkgOgogICAgICAgICAgIFVzZSBIQUxfREFDRXhfRHVhbEdldFZhbHVlKCkgdG8gZ2V0IGRpZ2l0YWwgZGF0YSB0byBiZSBjb252ZXJ0ZWQgYW5kIHVzZQotICAgICAgICAgIEhBTF9EQUNFeF9EdWFsU2V0VmFsdWUoKSB0byBzZXQgZGlnaXRhbCB2YWx1ZSB0byBjb252ZXJ0ZWQgc2ltdWx0YW5lb3VzbHkgaW4gQ2hhbm5lbCAxIGFuZCBDaGFubmVsIDIuICAKKyAgICAgICAgICBIQUxfREFDRXhfRHVhbFNldFZhbHVlKCkgdG8gc2V0IGRpZ2l0YWwgdmFsdWUgdG8gY29udmVydGVkIHNpbXVsdGFuZW91c2x5IGluCisgICAgICAgICAgQ2hhbm5lbCAxIGFuZCBDaGFubmVsIDIuCisKKyAgICAgKioqIFNpZ25hbCBnZW5lcmF0aW9uIG9wZXJhdGlvbiAqKioKKyAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICAgWy4uXQogICAgICAgKCspIFVzZSBIQUxfREFDRXhfVHJpYW5nbGVXYXZlR2VuZXJhdGUoKSB0byBnZW5lcmF0ZSBUcmlhbmdsZSBzaWduYWwuCiAgICAgICAoKykgVXNlIEhBTF9EQUNFeF9Ob2lzZVdhdmVHZW5lcmF0ZSgpIHRvIGdlbmVyYXRlIE5vaXNlIHNpZ25hbC4KLSAgIAotIEBlbmR2ZXJiYXRpbSAgICAKKworIEBlbmR2ZXJiYXRpbQogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKiBAYXR0ZW50aW9uCiAgICoKLSAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE3IFNUTWljcm9lbGVjdHJvbmljcy4KKyAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE2IFNUTWljcm9lbGVjdHJvbmljcy4KICAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLjwvY2VudGVyPjwvaDI+CiAgICoKICAgKiBUaGlzIHNvZnR3YXJlIGNvbXBvbmVudCBpcyBsaWNlbnNlZCBieSBTVCB1bmRlciBCU0QgMy1DbGF1c2UgbGljZW5zZSwKQEAgLTMyLDcgKzQwLDcgQEAKICAgKiAgICAgICAgICAgICAgICAgICAgICAgIG9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZQogICAqCiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAqLyAKKyAgKi8KIAogCiAvKiBJbmNsdWRlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtNDIsMzUgKzUwLDMzIEBACiAgICogQHsKICAgKi8KIAotLyoqIEBkZWZncm91cCBEQUNFeCBEQUNFeAotICAqIEBicmllZiBEQUMgZHJpdmVyIG1vZHVsZXMKLSAgKiBAewotICAqLyAKLQogI2lmZGVmIEhBTF9EQUNfTU9EVUxFX0VOQUJMRUQKIAotI2lmIGRlZmluZWQoU1RNMzJGNDA1eHgpIHx8IGRlZmluZWQoU1RNMzJGNDE1eHgpIHx8IGRlZmluZWQoU1RNMzJGNDA3eHgpIHx8IGRlZmluZWQoU1RNMzJGNDE3eHgpIHx8XAotICAgIGRlZmluZWQoU1RNMzJGNDI3eHgpIHx8IGRlZmluZWQoU1RNMzJGNDM3eHgpIHx8IGRlZmluZWQoU1RNMzJGNDI5eHgpIHx8IGRlZmluZWQoU1RNMzJGNDM5eHgpIHx8XAotICAgIGRlZmluZWQoU1RNMzJGNDEwVHgpIHx8IGRlZmluZWQoU1RNMzJGNDEwQ3gpIHx8IGRlZmluZWQoU1RNMzJGNDEwUngpIHx8IGRlZmluZWQoU1RNMzJGNDQ2eHgpIHx8XAotICAgIGRlZmluZWQoU1RNMzJGNDY5eHgpIHx8IGRlZmluZWQoU1RNMzJGNDc5eHgpIHx8IGRlZmluZWQoU1RNMzJGNDEzeHgpIHx8IGRlZmluZWQoU1RNMzJGNDIzeHgpCisjaWYgZGVmaW5lZChEQUMpCisKKy8qKiBAZGVmZ3JvdXAgREFDRXggREFDRXgKKyAgKiBAYnJpZWYgREFDIEV4dGVuZGVkIEhBTCBtb2R1bGUgZHJpdmVyCisgICogQHsKKyAgKi8KKwogLyogUHJpdmF0ZSB0eXBlZGVmIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qIFByaXZhdGUgZGVmaW5lIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiBQcml2YXRlIG1hY3JvIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyogUHJpdmF0ZSB2YXJpYWJsZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qIFByaXZhdGUgZnVuY3Rpb24gcHJvdG90eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKiBQcml2YXRlIGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyogRXhwb3J0ZWQgZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qKiBAZGVmZ3JvdXAgREFDRXhfRXhwb3J0ZWRfRnVuY3Rpb25zIERBQyBFeHBvcnRlZCBGdW5jdGlvbnMKKworLyoqIEBkZWZncm91cCBEQUNFeF9FeHBvcnRlZF9GdW5jdGlvbnMgREFDRXggRXhwb3J0ZWQgRnVuY3Rpb25zCiAgICogQHsKICAgKi8KIAotLyoqIEBkZWZncm91cCBEQUNFeF9FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXAxIEV4dGVuZGVkIGZlYXR1cmVzIGZ1bmN0aW9ucwotICogIEBicmllZiAgICBFeHRlbmRlZCBmZWF0dXJlcyBmdW5jdGlvbnMgCi0gKgotQHZlcmJhdGltICAgCisvKiogQGRlZmdyb3VwIERBQ0V4X0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDIgSU8gb3BlcmF0aW9uIGZ1bmN0aW9ucworICAqICBAYnJpZWYgICAgRXh0ZW5kZWQgSU8gb3BlcmF0aW9uIGZ1bmN0aW9ucworICAqCitAdmVyYmF0aW0KICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgICAgICAgICAgICMjIyMjIEV4dGVuZGVkIGZlYXR1cmVzIGZ1bmN0aW9ucyAjIyMjIwotICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gIAorICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICBbLi5dICBUaGlzIHNlY3Rpb24gcHJvdmlkZXMgZnVuY3Rpb25zIGFsbG93aW5nIHRvOgogICAgICAgKCspIFN0YXJ0IGNvbnZlcnNpb24uCiAgICAgICAoKykgU3RvcCBjb252ZXJzaW9uLgpAQCAtNzgsMzcgKzg0LDg2IEBACiAgICAgICAoKykgU3RvcCBjb252ZXJzaW9uIGFuZCBkaXNhYmxlIERNQSB0cmFuc2Zlci4KICAgICAgICgrKSBHZXQgcmVzdWx0IG9mIGNvbnZlcnNpb24uCiAgICAgICAoKykgR2V0IHJlc3VsdCBvZiBkdWFsIG1vZGUgY29udmVyc2lvbi4KLSAgICAgICAgICAgICAgICAgICAgIAorCiBAZW5kdmVyYmF0aW0KICAgKiBAewogICAqLwogCisjaWYgZGVmaW5lZChEQUNfQ0hBTk5FTDJfU1VQUE9SVCkKIC8qKgotICAqIEBicmllZiAgUmV0dXJucyB0aGUgbGFzdCBkYXRhIG91dHB1dCB2YWx1ZSBvZiB0aGUgc2VsZWN0ZWQgREFDIGNoYW5uZWwuCisgICogQGJyaWVmICBFbmFibGVzIERBQyBhbmQgc3RhcnRzIGNvbnZlcnNpb24gb2YgYm90aCBjaGFubmVscy4KICAgKiBAcGFyYW0gIGhkYWMgcG9pbnRlciB0byBhIERBQ19IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCiAgICogICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBEQUMuCi0gICogQHJldHZhbCBUaGUgc2VsZWN0ZWQgREFDIGNoYW5uZWwgZGF0YSBvdXRwdXQgdmFsdWUuCisgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCi11aW50MzJfdCBIQUxfREFDRXhfRHVhbEdldFZhbHVlKERBQ19IYW5kbGVUeXBlRGVmKiBoZGFjKQorSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0RBQ0V4X0R1YWxTdGFydChEQUNfSGFuZGxlVHlwZURlZiAqaGRhYykKIHsKLSAgdWludDMyX3QgdG1wID0gMFU7Ci0gIAotICB0bXAgfD0gaGRhYy0+SW5zdGFuY2UtPkRPUjE7Ci0gIAotICB0bXAgfD0gaGRhYy0+SW5zdGFuY2UtPkRPUjIgPDwgMTZVOwotICAKLSAgLyogUmV0dXJucyB0aGUgREFDIGNoYW5uZWwgZGF0YSBvdXRwdXQgcmVnaXN0ZXIgdmFsdWUgKi8KLSAgcmV0dXJuIHRtcDsKKyAgdWludDMyX3QgdG1wX3N3dHJpZyA9IDBVTDsKKworCisgIC8qIFByb2Nlc3MgbG9ja2VkICovCisgIF9fSEFMX0xPQ0soaGRhYyk7CisKKyAgLyogQ2hhbmdlIERBQyBzdGF0ZSAqLworICBoZGFjLT5TdGF0ZSA9IEhBTF9EQUNfU1RBVEVfQlVTWTsKKworICAvKiBFbmFibGUgdGhlIFBlcmlwaGVyYWwgKi8KKyAgX19IQUxfREFDX0VOQUJMRShoZGFjLCBEQUNfQ0hBTk5FTF8xKTsKKyAgX19IQUxfREFDX0VOQUJMRShoZGFjLCBEQUNfQ0hBTk5FTF8yKTsKKworICAvKiBDaGVjayBpZiBzb2Z0d2FyZSB0cmlnZ2VyIGVuYWJsZWQgKi8KKyAgaWYgKChoZGFjLT5JbnN0YW5jZS0+Q1IgJiAoREFDX0NSX1RFTjEgfCBEQUNfQ1JfVFNFTDEpKSA9PSBEQUNfVFJJR0dFUl9TT0ZUV0FSRSkKKyAgeworICAgIHRtcF9zd3RyaWcgfD0gREFDX1NXVFJJR1JfU1dUUklHMTsKKyAgfQorICBpZiAoKGhkYWMtPkluc3RhbmNlLT5DUiAmIChEQUNfQ1JfVEVOMiB8IERBQ19DUl9UU0VMMikpID09IChEQUNfVFJJR0dFUl9TT0ZUV0FSRSA8PCAoREFDX0NIQU5ORUxfMiAmIDB4MTBVTCkpKQorICB7CisgICAgdG1wX3N3dHJpZyB8PSBEQUNfU1dUUklHUl9TV1RSSUcyOworICB9CisgIC8qIEVuYWJsZSB0aGUgc2VsZWN0ZWQgREFDIHNvZnR3YXJlIGNvbnZlcnNpb24qLworICBTRVRfQklUKGhkYWMtPkluc3RhbmNlLT5TV1RSSUdSLCB0bXBfc3d0cmlnKTsKKworICAvKiBDaGFuZ2UgREFDIHN0YXRlICovCisgIGhkYWMtPlN0YXRlID0gSEFMX0RBQ19TVEFURV9SRUFEWTsKKworICAvKiBQcm9jZXNzIHVubG9ja2VkICovCisgIF9fSEFMX1VOTE9DSyhoZGFjKTsKKworICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCisgIHJldHVybiBIQUxfT0s7CiB9CiAKIC8qKgotICAqIEBicmllZiAgRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgc2VsZWN0ZWQgREFDIGNoYW5uZWwgd2F2ZSBnZW5lcmF0aW9uLgorICAqIEBicmllZiAgRGlzYWJsZXMgREFDIGFuZCBzdG9wIGNvbnZlcnNpb24gb2YgYm90aCBjaGFubmVscy4KICAgKiBAcGFyYW0gIGhkYWMgcG9pbnRlciB0byBhIERBQ19IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCiAgICogICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBEQUMuCi0gICogQHBhcmFtICBDaGFubmVsIFRoZSBzZWxlY3RlZCBEQUMgY2hhbm5lbC4gCisgICogQHJldHZhbCBIQUwgc3RhdHVzCisgICovCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfREFDRXhfRHVhbFN0b3AoREFDX0hhbmRsZVR5cGVEZWYgKmhkYWMpCit7CisKKyAgLyogRGlzYWJsZSB0aGUgUGVyaXBoZXJhbCAqLworICBfX0hBTF9EQUNfRElTQUJMRShoZGFjLCBEQUNfQ0hBTk5FTF8xKTsKKyAgX19IQUxfREFDX0RJU0FCTEUoaGRhYywgREFDX0NIQU5ORUxfMik7CisKKyAgLyogQ2hhbmdlIERBQyBzdGF0ZSAqLworICBoZGFjLT5TdGF0ZSA9IEhBTF9EQUNfU1RBVEVfUkVBRFk7CisKKyAgLyogUmV0dXJuIGZ1bmN0aW9uIHN0YXR1cyAqLworICByZXR1cm4gSEFMX09LOworfQorCisjZW5kaWYgLyogREFDX0NIQU5ORUwyX1NVUFBPUlQgKi8KKworLyoqCisgICogQGJyaWVmICBFbmFibGUgb3IgZGlzYWJsZSB0aGUgc2VsZWN0ZWQgREFDIGNoYW5uZWwgd2F2ZSBnZW5lcmF0aW9uLgorICAqIEBwYXJhbSAgaGRhYyBwb2ludGVyIHRvIGEgREFDX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKKyAgKiAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciB0aGUgc3BlY2lmaWVkIERBQy4KKyAgKiBAcGFyYW0gIENoYW5uZWwgVGhlIHNlbGVjdGVkIERBQyBjaGFubmVsLgogICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6Ci0gICogICAgICAgICAgICBEQUNfQ0hBTk5FTF8xIC8gREFDX0NIQU5ORUxfMgotICAqIEBwYXJhbSAgQW1wbGl0dWRlIFNlbGVjdCBtYXggdHJpYW5nbGUgYW1wbGl0dWRlLiAKKyAgKiAgICAgICAgICAgIEBhcmcgREFDX0NIQU5ORUxfMTogREFDIENoYW5uZWwxIHNlbGVjdGVkCisgICogICAgICAgICAgICBAYXJnIERBQ19DSEFOTkVMXzI6IERBQyBDaGFubmVsMiBzZWxlY3RlZAorICAqIEBwYXJhbSAgQW1wbGl0dWRlIFNlbGVjdCBtYXggdHJpYW5nbGUgYW1wbGl0dWRlLgogICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAgICogICAgICAgICAgICBAYXJnIERBQ19UUklBTkdMRUFNUExJVFVERV8xOiBTZWxlY3QgbWF4IHRyaWFuZ2xlIGFtcGxpdHVkZSBvZiAxCiAgICogICAgICAgICAgICBAYXJnIERBQ19UUklBTkdMRUFNUExJVFVERV8zOiBTZWxlY3QgbWF4IHRyaWFuZ2xlIGFtcGxpdHVkZSBvZiAzCkBAIC0xMjEsODIgKzE3Niw4NiBAQAogICAqICAgICAgICAgICAgQGFyZyBEQUNfVFJJQU5HTEVBTVBMSVRVREVfNTExOiBTZWxlY3QgbWF4IHRyaWFuZ2xlIGFtcGxpdHVkZSBvZiA1MTEKICAgKiAgICAgICAgICAgIEBhcmcgREFDX1RSSUFOR0xFQU1QTElUVURFXzEwMjM6IFNlbGVjdCBtYXggdHJpYW5nbGUgYW1wbGl0dWRlIG9mIDEwMjMKICAgKiAgICAgICAgICAgIEBhcmcgREFDX1RSSUFOR0xFQU1QTElUVURFXzIwNDc6IFNlbGVjdCBtYXggdHJpYW5nbGUgYW1wbGl0dWRlIG9mIDIwNDcKLSAgKiAgICAgICAgICAgIEBhcmcgREFDX1RSSUFOR0xFQU1QTElUVURFXzQwOTU6IFNlbGVjdCBtYXggdHJpYW5nbGUgYW1wbGl0dWRlIG9mIDQwOTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICogICAgICAgICAgICBAYXJnIERBQ19UUklBTkdMRUFNUExJVFVERV80MDk1OiBTZWxlY3QgbWF4IHRyaWFuZ2xlIGFtcGxpdHVkZSBvZiA0MDk1CiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfREFDRXhfVHJpYW5nbGVXYXZlR2VuZXJhdGUoREFDX0hhbmRsZVR5cGVEZWYqIGhkYWMsIHVpbnQzMl90IENoYW5uZWwsIHVpbnQzMl90IEFtcGxpdHVkZSkKLXsgIAorSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0RBQ0V4X1RyaWFuZ2xlV2F2ZUdlbmVyYXRlKERBQ19IYW5kbGVUeXBlRGVmICpoZGFjLCB1aW50MzJfdCBDaGFubmVsLCB1aW50MzJfdCBBbXBsaXR1ZGUpCit7CiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19EQUNfQ0hBTk5FTChDaGFubmVsKSk7CiAgIGFzc2VydF9wYXJhbShJU19EQUNfTEZTUl9VTk1BU0tfVFJJQU5HTEVfQU1QTElUVURFKEFtcGxpdHVkZSkpOwotICAKKwogICAvKiBQcm9jZXNzIGxvY2tlZCAqLwogICBfX0hBTF9MT0NLKGhkYWMpOwotICAKKwogICAvKiBDaGFuZ2UgREFDIHN0YXRlICovCiAgIGhkYWMtPlN0YXRlID0gSEFMX0RBQ19TVEFURV9CVVNZOwotICAKLSAgLyogRW5hYmxlIHRoZSBzZWxlY3RlZCB3YXZlIGdlbmVyYXRpb24gZm9yIHRoZSBzZWxlY3RlZCBEQUMgY2hhbm5lbCAqLwotICBNT0RJRllfUkVHKGhkYWMtPkluc3RhbmNlLT5DUiwgKERBQ19DUl9XQVZFMSB8IERBQ19DUl9NQU1QMSkgPDwgQ2hhbm5lbCwgKERBQ19DUl9XQVZFMV8xIHwgQW1wbGl0dWRlKSA8PCBDaGFubmVsKTsKLSAgCisKKyAgLyogRW5hYmxlIHRoZSB0cmlhbmdsZSB3YXZlIGdlbmVyYXRpb24gZm9yIHRoZSBzZWxlY3RlZCBEQUMgY2hhbm5lbCAqLworICBNT0RJRllfUkVHKGhkYWMtPkluc3RhbmNlLT5DUiwgKChEQUNfQ1JfV0FWRTEpIHwgKERBQ19DUl9NQU1QMSkpIDw8IChDaGFubmVsICYgMHgxMFVMKSwKKyAgICAgICAgICAgICAoREFDX0NSX1dBVkUxXzEgfCBBbXBsaXR1ZGUpIDw8IChDaGFubmVsICYgMHgxMFVMKSk7CisKICAgLyogQ2hhbmdlIERBQyBzdGF0ZSAqLwogICBoZGFjLT5TdGF0ZSA9IEhBTF9EQUNfU1RBVEVfUkVBRFk7Ci0gIAorCiAgIC8qIFByb2Nlc3MgdW5sb2NrZWQgKi8KICAgX19IQUxfVU5MT0NLKGhkYWMpOwotICAKKwogICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCiAgIHJldHVybiBIQUxfT0s7CiB9CiAKIC8qKgotICAqIEBicmllZiAgRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgc2VsZWN0ZWQgREFDIGNoYW5uZWwgd2F2ZSBnZW5lcmF0aW9uLgorICAqIEBicmllZiAgRW5hYmxlIG9yIGRpc2FibGUgdGhlIHNlbGVjdGVkIERBQyBjaGFubmVsIHdhdmUgZ2VuZXJhdGlvbi4KICAgKiBAcGFyYW0gIGhkYWMgcG9pbnRlciB0byBhIERBQ19IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCi0gICogICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBEQUMuIAotICAqIEBwYXJhbSAgQ2hhbm5lbCBUaGUgc2VsZWN0ZWQgREFDIGNoYW5uZWwuIAorICAqICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIHRoZSBzcGVjaWZpZWQgREFDLgorICAqIEBwYXJhbSAgQ2hhbm5lbCBUaGUgc2VsZWN0ZWQgREFDIGNoYW5uZWwuCiAgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKLSAgKiAgICAgICAgICAgIERBQ19DSEFOTkVMXzEgLyBEQUNfQ0hBTk5FTF8yCi0gICogQHBhcmFtICBBbXBsaXR1ZGUgVW5tYXNrIERBQyBjaGFubmVsIExGU1IgZm9yIG5vaXNlIHdhdmUgZ2VuZXJhdGlvbi4gCi0gICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczogCisgICogICAgICAgICAgICBAYXJnIERBQ19DSEFOTkVMXzE6IERBQyBDaGFubmVsMSBzZWxlY3RlZAorICAqICAgICAgICAgICAgQGFyZyBEQUNfQ0hBTk5FTF8yOiBEQUMgQ2hhbm5lbDIgc2VsZWN0ZWQKKyAgKiBAcGFyYW0gIEFtcGxpdHVkZSBVbm1hc2sgREFDIGNoYW5uZWwgTEZTUiBmb3Igbm9pc2Ugd2F2ZSBnZW5lcmF0aW9uLgorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAgICogICAgICAgICAgICBAYXJnIERBQ19MRlNSVU5NQVNLX0JJVDA6IFVubWFzayBEQUMgY2hhbm5lbCBMRlNSIGJpdDAgZm9yIG5vaXNlIHdhdmUgZ2VuZXJhdGlvbgotICAqICAgICAgICAgICAgQGFyZyBEQUNfTEZTUlVOTUFTS19CSVRTMV8wOiBVbm1hc2sgREFDIGNoYW5uZWwgTEZTUiBiaXRbMTowXSBmb3Igbm9pc2Ugd2F2ZSBnZW5lcmF0aW9uICAKKyAgKiAgICAgICAgICAgIEBhcmcgREFDX0xGU1JVTk1BU0tfQklUUzFfMDogVW5tYXNrIERBQyBjaGFubmVsIExGU1IgYml0WzE6MF0gZm9yIG5vaXNlIHdhdmUgZ2VuZXJhdGlvbgogICAqICAgICAgICAgICAgQGFyZyBEQUNfTEZTUlVOTUFTS19CSVRTMl8wOiBVbm1hc2sgREFDIGNoYW5uZWwgTEZTUiBiaXRbMjowXSBmb3Igbm9pc2Ugd2F2ZSBnZW5lcmF0aW9uCi0gICogICAgICAgICAgICBAYXJnIERBQ19MRlNSVU5NQVNLX0JJVFMzXzA6IFVubWFzayBEQUMgY2hhbm5lbCBMRlNSIGJpdFszOjBdIGZvciBub2lzZSB3YXZlIGdlbmVyYXRpb24gCi0gICogICAgICAgICAgICBAYXJnIERBQ19MRlNSVU5NQVNLX0JJVFM0XzA6IFVubWFzayBEQUMgY2hhbm5lbCBMRlNSIGJpdFs0OjBdIGZvciBub2lzZSB3YXZlIGdlbmVyYXRpb24gCi0gICogICAgICAgICAgICBAYXJnIERBQ19MRlNSVU5NQVNLX0JJVFM1XzA6IFVubWFzayBEQUMgY2hhbm5lbCBMRlNSIGJpdFs1OjBdIGZvciBub2lzZSB3YXZlIGdlbmVyYXRpb24gCi0gICogICAgICAgICAgICBAYXJnIERBQ19MRlNSVU5NQVNLX0JJVFM2XzA6IFVubWFzayBEQUMgY2hhbm5lbCBMRlNSIGJpdFs2OjBdIGZvciBub2lzZSB3YXZlIGdlbmVyYXRpb24gCi0gICogICAgICAgICAgICBAYXJnIERBQ19MRlNSVU5NQVNLX0JJVFM3XzA6IFVubWFzayBEQUMgY2hhbm5lbCBMRlNSIGJpdFs3OjBdIGZvciBub2lzZSB3YXZlIGdlbmVyYXRpb24gCi0gICogICAgICAgICAgICBAYXJnIERBQ19MRlNSVU5NQVNLX0JJVFM4XzA6IFVubWFzayBEQUMgY2hhbm5lbCBMRlNSIGJpdFs4OjBdIGZvciBub2lzZSB3YXZlIGdlbmVyYXRpb24gCi0gICogICAgICAgICAgICBAYXJnIERBQ19MRlNSVU5NQVNLX0JJVFM5XzA6IFVubWFzayBEQUMgY2hhbm5lbCBMRlNSIGJpdFs5OjBdIGZvciBub2lzZSB3YXZlIGdlbmVyYXRpb24gCi0gICogICAgICAgICAgICBAYXJnIERBQ19MRlNSVU5NQVNLX0JJVFMxMF8wOiBVbm1hc2sgREFDIGNoYW5uZWwgTEZTUiBiaXRbMTA6MF0gZm9yIG5vaXNlIHdhdmUgZ2VuZXJhdGlvbiAKLSAgKiAgICAgICAgICAgIEBhcmcgREFDX0xGU1JVTk1BU0tfQklUUzExXzA6IFVubWFzayBEQUMgY2hhbm5lbCBMRlNSIGJpdFsxMTowXSBmb3Igbm9pc2Ugd2F2ZSBnZW5lcmF0aW9uIAorICAqICAgICAgICAgICAgQGFyZyBEQUNfTEZTUlVOTUFTS19CSVRTM18wOiBVbm1hc2sgREFDIGNoYW5uZWwgTEZTUiBiaXRbMzowXSBmb3Igbm9pc2Ugd2F2ZSBnZW5lcmF0aW9uCisgICogICAgICAgICAgICBAYXJnIERBQ19MRlNSVU5NQVNLX0JJVFM0XzA6IFVubWFzayBEQUMgY2hhbm5lbCBMRlNSIGJpdFs0OjBdIGZvciBub2lzZSB3YXZlIGdlbmVyYXRpb24KKyAgKiAgICAgICAgICAgIEBhcmcgREFDX0xGU1JVTk1BU0tfQklUUzVfMDogVW5tYXNrIERBQyBjaGFubmVsIExGU1IgYml0WzU6MF0gZm9yIG5vaXNlIHdhdmUgZ2VuZXJhdGlvbgorICAqICAgICAgICAgICAgQGFyZyBEQUNfTEZTUlVOTUFTS19CSVRTNl8wOiBVbm1hc2sgREFDIGNoYW5uZWwgTEZTUiBiaXRbNjowXSBmb3Igbm9pc2Ugd2F2ZSBnZW5lcmF0aW9uCisgICogICAgICAgICAgICBAYXJnIERBQ19MRlNSVU5NQVNLX0JJVFM3XzA6IFVubWFzayBEQUMgY2hhbm5lbCBMRlNSIGJpdFs3OjBdIGZvciBub2lzZSB3YXZlIGdlbmVyYXRpb24KKyAgKiAgICAgICAgICAgIEBhcmcgREFDX0xGU1JVTk1BU0tfQklUUzhfMDogVW5tYXNrIERBQyBjaGFubmVsIExGU1IgYml0Wzg6MF0gZm9yIG5vaXNlIHdhdmUgZ2VuZXJhdGlvbgorICAqICAgICAgICAgICAgQGFyZyBEQUNfTEZTUlVOTUFTS19CSVRTOV8wOiBVbm1hc2sgREFDIGNoYW5uZWwgTEZTUiBiaXRbOTowXSBmb3Igbm9pc2Ugd2F2ZSBnZW5lcmF0aW9uCisgICogICAgICAgICAgICBAYXJnIERBQ19MRlNSVU5NQVNLX0JJVFMxMF8wOiBVbm1hc2sgREFDIGNoYW5uZWwgTEZTUiBiaXRbMTA6MF0gZm9yIG5vaXNlIHdhdmUgZ2VuZXJhdGlvbgorICAqICAgICAgICAgICAgQGFyZyBEQUNfTEZTUlVOTUFTS19CSVRTMTFfMDogVW5tYXNrIERBQyBjaGFubmVsIExGU1IgYml0WzExOjBdIGZvciBub2lzZSB3YXZlIGdlbmVyYXRpb24KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9EQUNFeF9Ob2lzZVdhdmVHZW5lcmF0ZShEQUNfSGFuZGxlVHlwZURlZiogaGRhYywgdWludDMyX3QgQ2hhbm5lbCwgdWludDMyX3QgQW1wbGl0dWRlKQoteyAgCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfREFDRXhfTm9pc2VXYXZlR2VuZXJhdGUoREFDX0hhbmRsZVR5cGVEZWYgKmhkYWMsIHVpbnQzMl90IENoYW5uZWwsIHVpbnQzMl90IEFtcGxpdHVkZSkKK3sKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KICAgYXNzZXJ0X3BhcmFtKElTX0RBQ19DSEFOTkVMKENoYW5uZWwpKTsKICAgYXNzZXJ0X3BhcmFtKElTX0RBQ19MRlNSX1VOTUFTS19UUklBTkdMRV9BTVBMSVRVREUoQW1wbGl0dWRlKSk7Ci0gIAorCiAgIC8qIFByb2Nlc3MgbG9ja2VkICovCiAgIF9fSEFMX0xPQ0soaGRhYyk7Ci0gIAorCiAgIC8qIENoYW5nZSBEQUMgc3RhdGUgKi8KICAgaGRhYy0+U3RhdGUgPSBIQUxfREFDX1NUQVRFX0JVU1k7Ci0gIAotICAvKiBFbmFibGUgdGhlIHNlbGVjdGVkIHdhdmUgZ2VuZXJhdGlvbiBmb3IgdGhlIHNlbGVjdGVkIERBQyBjaGFubmVsICovCi0gIE1PRElGWV9SRUcoaGRhYy0+SW5zdGFuY2UtPkNSLCAoREFDX0NSX1dBVkUxIHwgREFDX0NSX01BTVAxKSA8PCBDaGFubmVsLCAoREFDX0NSX1dBVkUxXzAgfCBBbXBsaXR1ZGUpIDw8IENoYW5uZWwpOwotICAKKworICAvKiBFbmFibGUgdGhlIG5vaXNlIHdhdmUgZ2VuZXJhdGlvbiBmb3IgdGhlIHNlbGVjdGVkIERBQyBjaGFubmVsICovCisgIE1PRElGWV9SRUcoaGRhYy0+SW5zdGFuY2UtPkNSLCAoKERBQ19DUl9XQVZFMSkgfCAoREFDX0NSX01BTVAxKSkgPDwgKENoYW5uZWwgJiAweDEwVUwpLAorICAgICAgICAgICAgIChEQUNfQ1JfV0FWRTFfMCB8IEFtcGxpdHVkZSkgPDwgKENoYW5uZWwgJiAweDEwVUwpKTsKKwogICAvKiBDaGFuZ2UgREFDIHN0YXRlICovCiAgIGhkYWMtPlN0YXRlID0gSEFMX0RBQ19TVEFURV9SRUFEWTsKLSAgCisKICAgLyogUHJvY2VzcyB1bmxvY2tlZCAqLwogICBfX0hBTF9VTkxPQ0soaGRhYyk7Ci0gIAorCiAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KICAgcmV0dXJuIEhBTF9PSzsKIH0KIAorI2lmIGRlZmluZWQoREFDX0NIQU5ORUwyX1NVUFBPUlQpCiAvKioKICAgKiBAYnJpZWYgIFNldCB0aGUgc3BlY2lmaWVkIGRhdGEgaG9sZGluZyByZWdpc3RlciB2YWx1ZSBmb3IgZHVhbCBEQUMgY2hhbm5lbC4KICAgKiBAcGFyYW0gIGhkYWMgcG9pbnRlciB0byBhIERBQ19IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCkBAIC0yMDYsNzIgKzI2NSw3MSBAQAogICAqICAgICAgICAgICAgREFDX0FMSUdOXzhCX1I6IDhiaXQgcmlnaHQgZGF0YSBhbGlnbm1lbnQgc2VsZWN0ZWQKICAgKiAgICAgICAgICAgIERBQ19BTElHTl8xMkJfTDogMTJiaXQgbGVmdCBkYXRhIGFsaWdubWVudCBzZWxlY3RlZAogICAqICAgICAgICAgICAgREFDX0FMSUdOXzEyQl9SOiAxMmJpdCByaWdodCBkYXRhIGFsaWdubWVudCBzZWxlY3RlZAotICAqIEBwYXJhbSAgRGF0YTEgRGF0YSBmb3IgREFDIENoYW5uZWwyIHRvIGJlIGxvYWRlZCBpbiB0aGUgc2VsZWN0ZWQgZGF0YSBob2xkaW5nIHJlZ2lzdGVyLgotICAqIEBwYXJhbSAgRGF0YTIgRGF0YSBmb3IgREFDIENoYW5uZWwxIHRvIGJlIGxvYWRlZCBpbiB0aGUgc2VsZWN0ZWQgZGF0YSAgaG9sZGluZyByZWdpc3Rlci4KKyAgKiBAcGFyYW0gIERhdGExIERhdGEgZm9yIERBQyBDaGFubmVsMSB0byBiZSBsb2FkZWQgaW4gdGhlIHNlbGVjdGVkIGRhdGEgaG9sZGluZyByZWdpc3Rlci4KKyAgKiBAcGFyYW0gIERhdGEyIERhdGEgZm9yIERBQyBDaGFubmVsMiB0byBiZSBsb2FkZWQgaW4gdGhlIHNlbGVjdGVkIGRhdGEgIGhvbGRpbmcgcmVnaXN0ZXIuCiAgICogQG5vdGUgICBJbiBkdWFsIG1vZGUsIGEgdW5pcXVlIHJlZ2lzdGVyIGFjY2VzcyBpcyByZXF1aXJlZCB0byB3cml0ZSBpbiBib3RoCiAgICogICAgICAgICAgREFDIGNoYW5uZWxzIGF0IHRoZSBzYW1lIHRpbWUuCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfREFDRXhfRHVhbFNldFZhbHVlKERBQ19IYW5kbGVUeXBlRGVmKiBoZGFjLCB1aW50MzJfdCBBbGlnbm1lbnQsIHVpbnQzMl90IERhdGExLCB1aW50MzJfdCBEYXRhMikKLXsgIAotICB1aW50MzJfdCBkYXRhID0gMFUsIHRtcCA9IDBVOwotICAKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9EQUNFeF9EdWFsU2V0VmFsdWUoREFDX0hhbmRsZVR5cGVEZWYgKmhkYWMsIHVpbnQzMl90IEFsaWdubWVudCwgdWludDMyX3QgRGF0YTEsIHVpbnQzMl90IERhdGEyKQoreworICB1aW50MzJfdCBkYXRhOworICB1aW50MzJfdCB0bXA7CisKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KICAgYXNzZXJ0X3BhcmFtKElTX0RBQ19BTElHTihBbGlnbm1lbnQpKTsKICAgYXNzZXJ0X3BhcmFtKElTX0RBQ19EQVRBKERhdGExKSk7CiAgIGFzc2VydF9wYXJhbShJU19EQUNfREFUQShEYXRhMikpOwotICAKKwogICAvKiBDYWxjdWxhdGUgYW5kIHNldCBkdWFsIERBQyBkYXRhIGhvbGRpbmcgcmVnaXN0ZXIgdmFsdWUgKi8KICAgaWYgKEFsaWdubWVudCA9PSBEQUNfQUxJR05fOEJfUikKICAgewotICAgIGRhdGEgPSAoKHVpbnQzMl90KURhdGEyIDw8IDhVKSB8IERhdGExOyAKKyAgICBkYXRhID0gKCh1aW50MzJfdClEYXRhMiA8PCA4VSkgfCBEYXRhMTsKICAgfQogICBlbHNlCiAgIHsKICAgICBkYXRhID0gKCh1aW50MzJfdClEYXRhMiA8PCAxNlUpIHwgRGF0YTE7CiAgIH0KLSAgCisKICAgdG1wID0gKHVpbnQzMl90KWhkYWMtPkluc3RhbmNlOwogICB0bXAgKz0gREFDX0RIUjEyUkRfQUxJR05NRU5UKEFsaWdubWVudCk7CiAKICAgLyogU2V0IHRoZSBkdWFsIERBQyBzZWxlY3RlZCBkYXRhIGhvbGRpbmcgcmVnaXN0ZXIgKi8KICAgKihfX0lPIHVpbnQzMl90ICopdG1wID0gZGF0YTsKLSAgCisKICAgLyogUmV0dXJuIGZ1bmN0aW9uIHN0YXR1cyAqLwogICByZXR1cm4gSEFMX09LOwogfQogCiAvKioKLSAgKiBAfQotICAqLwotCi0vKioKLSAgKiBAYnJpZWYgIENvbnZlcnNpb24gY29tcGxldGUgY2FsbGJhY2sgaW4gbm9uIGJsb2NraW5nIG1vZGUgZm9yIENoYW5uZWwyIAorICAqIEBicmllZiAgQ29udmVyc2lvbiBjb21wbGV0ZSBjYWxsYmFjayBpbiBub24tYmxvY2tpbmcgbW9kZSBmb3IgQ2hhbm5lbDIuCiAgICogQHBhcmFtICBoZGFjIHBvaW50ZXIgdG8gYSBEQUNfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucwogICAqICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIHRoZSBzcGVjaWZpZWQgREFDLgogICAqIEByZXR2YWwgTm9uZQogICAqLwotX193ZWFrIHZvaWQgSEFMX0RBQ0V4X0NvbnZDcGx0Q2FsbGJhY2tDaDIoREFDX0hhbmRsZVR5cGVEZWYqIGhkYWMpCitfX3dlYWsgdm9pZCBIQUxfREFDRXhfQ29udkNwbHRDYWxsYmFja0NoMihEQUNfSGFuZGxlVHlwZURlZiAqaGRhYykKIHsKICAgLyogUHJldmVudCB1bnVzZWQgYXJndW1lbnQocykgY29tcGlsYXRpb24gd2FybmluZyAqLwogICBVTlVTRUQoaGRhYyk7Ci0gIC8qIE5PVEUgOiBUaGlzIGZ1bmN0aW9uIFNob3VsZCBub3QgYmUgbW9kaWZpZWQsIHdoZW4gdGhlIGNhbGxiYWNrIGlzIG5lZWRlZCwKLSAgICAgICAgICAgIHRoZSBIQUxfREFDX0NvbnZDcGx0Q2FsbGJhY2sgY291bGQgYmUgaW1wbGVtZW50ZWQgaW4gdGhlIHVzZXIgZmlsZQorCisgIC8qIE5PVEUgOiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBub3QgYmUgbW9kaWZpZWQsIHdoZW4gdGhlIGNhbGxiYWNrIGlzIG5lZWRlZCwKKyAgICAgICAgICAgIHRoZSBIQUxfREFDRXhfQ29udkNwbHRDYWxsYmFja0NoMiBjb3VsZCBiZSBpbXBsZW1lbnRlZCBpbiB0aGUgdXNlciBmaWxlCiAgICAqLwogfQogCiAvKioKLSAgKiBAYnJpZWYgIENvbnZlcnNpb24gaGFsZiBETUEgdHJhbnNmZXIgY2FsbGJhY2sgaW4gbm9uIGJsb2NraW5nIG1vZGUgZm9yIENoYW5uZWwyIAorICAqIEBicmllZiAgQ29udmVyc2lvbiBoYWxmIERNQSB0cmFuc2ZlciBjYWxsYmFjayBpbiBub24tYmxvY2tpbmcgbW9kZSBmb3IgQ2hhbm5lbDIuCiAgICogQHBhcmFtICBoZGFjIHBvaW50ZXIgdG8gYSBEQUNfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucwogICAqICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIHRoZSBzcGVjaWZpZWQgREFDLgogICAqIEByZXR2YWwgTm9uZQogICAqLwotX193ZWFrIHZvaWQgSEFMX0RBQ0V4X0NvbnZIYWxmQ3BsdENhbGxiYWNrQ2gyKERBQ19IYW5kbGVUeXBlRGVmKiBoZGFjKQorX193ZWFrIHZvaWQgSEFMX0RBQ0V4X0NvbnZIYWxmQ3BsdENhbGxiYWNrQ2gyKERBQ19IYW5kbGVUeXBlRGVmICpoZGFjKQogewogICAvKiBQcmV2ZW50IHVudXNlZCBhcmd1bWVudChzKSBjb21waWxhdGlvbiB3YXJuaW5nICovCiAgIFVOVVNFRChoZGFjKTsKLSAgLyogTk9URSA6IFRoaXMgZnVuY3Rpb24gU2hvdWxkIG5vdCBiZSBtb2RpZmllZCwgd2hlbiB0aGUgY2FsbGJhY2sgaXMgbmVlZGVkLAotICAgICAgICAgICAgdGhlIEhBTF9EQUNfQ29udkhhbGZDcGx0Q2FsbGJhY2tDaDIgY291bGQgYmUgaW1wbGVtZW50ZWQgaW4gdGhlIHVzZXIgZmlsZQorCisgIC8qIE5PVEUgOiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBub3QgYmUgbW9kaWZpZWQsIHdoZW4gdGhlIGNhbGxiYWNrIGlzIG5lZWRlZCwKKyAgICAgICAgICAgIHRoZSBIQUxfREFDRXhfQ29udkhhbGZDcGx0Q2FsbGJhY2tDaDIgY291bGQgYmUgaW1wbGVtZW50ZWQgaW4gdGhlIHVzZXIgZmlsZQogICAgKi8KIH0KIApAQCAtMjg1LDEzICszNDMsMTQgQEAKIHsKICAgLyogUHJldmVudCB1bnVzZWQgYXJndW1lbnQocykgY29tcGlsYXRpb24gd2FybmluZyAqLwogICBVTlVTRUQoaGRhYyk7Ci0gIC8qIE5PVEUgOiBUaGlzIGZ1bmN0aW9uIFNob3VsZCBub3QgYmUgbW9kaWZpZWQsIHdoZW4gdGhlIGNhbGxiYWNrIGlzIG5lZWRlZCwKLSAgICAgICAgICAgIHRoZSBIQUxfREFDX0Vycm9yQ2FsbGJhY2sgY291bGQgYmUgaW1wbGVtZW50ZWQgaW4gdGhlIHVzZXIgZmlsZQorCisgIC8qIE5PVEUgOiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBub3QgYmUgbW9kaWZpZWQsIHdoZW4gdGhlIGNhbGxiYWNrIGlzIG5lZWRlZCwKKyAgICAgICAgICAgIHRoZSBIQUxfREFDRXhfRXJyb3JDYWxsYmFja0NoMiBjb3VsZCBiZSBpbXBsZW1lbnRlZCBpbiB0aGUgdXNlciBmaWxlCiAgICAqLwogfQogCiAvKioKLSAgKiBAYnJpZWYgIERNQSB1bmRlcnJ1biBEQUMgY2FsbGJhY2sgZm9yIGNoYW5uZWwyLgorICAqIEBicmllZiAgRE1BIHVuZGVycnVuIERBQyBjYWxsYmFjayBmb3IgQ2hhbm5lbDIuCiAgICogQHBhcmFtICBoZGFjIHBvaW50ZXIgdG8gYSBEQUNfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucwogICAqICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIHRoZSBzcGVjaWZpZWQgREFDLgogICAqIEByZXR2YWwgTm9uZQpAQCAtMzAwLDc3ICszNTksMTM0IEBACiB7CiAgIC8qIFByZXZlbnQgdW51c2VkIGFyZ3VtZW50KHMpIGNvbXBpbGF0aW9uIHdhcm5pbmcgKi8KICAgVU5VU0VEKGhkYWMpOwotICAvKiBOT1RFIDogVGhpcyBmdW5jdGlvbiBTaG91bGQgbm90IGJlIG1vZGlmaWVkLCB3aGVuIHRoZSBjYWxsYmFjayBpcyBuZWVkZWQsCi0gICAgICAgICAgICB0aGUgSEFMX0RBQ19ETUFVbmRlcnJ1bkNhbGxiYWNrQ2gyIGNvdWxkIGJlIGltcGxlbWVudGVkIGluIHRoZSB1c2VyIGZpbGUKKworICAvKiBOT1RFIDogVGhpcyBmdW5jdGlvbiBzaG91bGQgbm90IGJlIG1vZGlmaWVkLCB3aGVuIHRoZSBjYWxsYmFjayBpcyBuZWVkZWQsCisgICAgICAgICAgICB0aGUgSEFMX0RBQ0V4X0RNQVVuZGVycnVuQ2FsbGJhY2tDaDIgY291bGQgYmUgaW1wbGVtZW50ZWQgaW4gdGhlIHVzZXIgZmlsZQogICAgKi8KIH0KKyNlbmRpZiAvKiBEQUNfQ0hBTk5FTDJfU1VQUE9SVCAqLworCiAKIC8qKgotICAqIEBicmllZiAgRE1BIGNvbnZlcnNpb24gY29tcGxldGUgY2FsbGJhY2suIAorICAqIEB9CisgICovCisKKy8qKiBAZGVmZ3JvdXAgREFDRXhfRXhwb3J0ZWRfRnVuY3Rpb25zX0dyb3VwMyBQZXJpcGhlcmFsIENvbnRyb2wgZnVuY3Rpb25zCisgICogIEBicmllZiAgICBFeHRlbmRlZCBQZXJpcGhlcmFsIENvbnRyb2wgZnVuY3Rpb25zCisgICoKK0B2ZXJiYXRpbQorICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICAgICAgICAgICAjIyMjIyBQZXJpcGhlcmFsIENvbnRyb2wgZnVuY3Rpb25zICMjIyMjCisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIFsuLl0gIFRoaXMgc2VjdGlvbiBwcm92aWRlcyBmdW5jdGlvbnMgYWxsb3dpbmcgdG86CisgICAgICAoKykgU2V0IHRoZSBzcGVjaWZpZWQgZGF0YSBob2xkaW5nIHJlZ2lzdGVyIHZhbHVlIGZvciBEQUMgY2hhbm5lbC4KKworQGVuZHZlcmJhdGltCisgICogQHsKKyAgKi8KKworI2lmIGRlZmluZWQoREFDX0NIQU5ORUwyX1NVUFBPUlQpCisvKioKKyAgKiBAYnJpZWYgIFJldHVybiB0aGUgbGFzdCBkYXRhIG91dHB1dCB2YWx1ZSBvZiB0aGUgc2VsZWN0ZWQgREFDIGNoYW5uZWwuCisgICogQHBhcmFtICBoZGFjIHBvaW50ZXIgdG8gYSBEQUNfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucworICAqICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIHRoZSBzcGVjaWZpZWQgREFDLgorICAqIEByZXR2YWwgVGhlIHNlbGVjdGVkIERBQyBjaGFubmVsIGRhdGEgb3V0cHV0IHZhbHVlLgorICAqLwordWludDMyX3QgSEFMX0RBQ0V4X0R1YWxHZXRWYWx1ZShEQUNfSGFuZGxlVHlwZURlZiAqaGRhYykKK3sKKyAgdWludDMyX3QgdG1wID0gMFVMOworCisgIHRtcCB8PSBoZGFjLT5JbnN0YW5jZS0+RE9SMTsKKworICB0bXAgfD0gaGRhYy0+SW5zdGFuY2UtPkRPUjIgPDwgMTZVTDsKKworICAvKiBSZXR1cm5zIHRoZSBEQUMgY2hhbm5lbCBkYXRhIG91dHB1dCByZWdpc3RlciB2YWx1ZSAqLworICByZXR1cm4gdG1wOworfQorI2VuZGlmIC8qIERBQ19DSEFOTkVMMl9TVVBQT1JUICovCisKKy8qKgorICAqIEB9CisgICovCisvKioKKyAgKiBAfQorICAqLworCisvKiBQcml2YXRlIGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoqIEBkZWZncm91cCBEQUNFeF9Qcml2YXRlX0Z1bmN0aW9ucyBEQUNFeCBwcml2YXRlIGZ1bmN0aW9ucworICAqICBAYnJpZWYgICAgRXh0ZW5kZWQgcHJpdmF0ZSBmdW5jdGlvbnMKKyAgKiBAeworICAqLworCisjaWYgZGVmaW5lZChEQUNfQ0hBTk5FTDJfU1VQUE9SVCkKKy8qKgorICAqIEBicmllZiAgRE1BIGNvbnZlcnNpb24gY29tcGxldGUgY2FsbGJhY2suCiAgICogQHBhcmFtICBoZG1hIHBvaW50ZXIgdG8gYSBETUFfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucwogICAqICAgICAgICAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciB0aGUgc3BlY2lmaWVkIERNQSBtb2R1bGUuCiAgICogQHJldHZhbCBOb25lCiAgICovCi12b2lkIERBQ19ETUFDb252Q3BsdENoMihETUFfSGFuZGxlVHlwZURlZiAqaGRtYSkgICAKK3ZvaWQgREFDX0RNQUNvbnZDcGx0Q2gyKERNQV9IYW5kbGVUeXBlRGVmICpoZG1hKQogewotICBEQUNfSGFuZGxlVHlwZURlZiogaGRhYyA9ICggREFDX0hhbmRsZVR5cGVEZWYqICkoKERNQV9IYW5kbGVUeXBlRGVmKiApaGRtYSktPlBhcmVudDsKLSAgCisgIERBQ19IYW5kbGVUeXBlRGVmICpoZGFjID0gKERBQ19IYW5kbGVUeXBlRGVmICopKChETUFfSGFuZGxlVHlwZURlZiAqKWhkbWEpLT5QYXJlbnQ7CisKICNpZiAoVVNFX0hBTF9EQUNfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCiAgIGhkYWMtPkNvbnZDcGx0Q2FsbGJhY2tDaDIoaGRhYyk7CiAjZWxzZQotICBIQUxfREFDRXhfQ29udkNwbHRDYWxsYmFja0NoMihoZGFjKTsgCisgIEhBTF9EQUNFeF9Db252Q3BsdENhbGxiYWNrQ2gyKGhkYWMpOwogI2VuZGlmIC8qIFVTRV9IQUxfREFDX1JFR0lTVEVSX0NBTExCQUNLUyAqLwotICAKLSAgaGRhYy0+U3RhdGU9IEhBTF9EQUNfU1RBVEVfUkVBRFk7CisKKyAgaGRhYy0+U3RhdGUgPSBIQUxfREFDX1NUQVRFX1JFQURZOwogfQogCiAvKioKLSAgKiBAYnJpZWYgIERNQSBoYWxmIHRyYW5zZmVyIGNvbXBsZXRlIGNhbGxiYWNrLiAKKyAgKiBAYnJpZWYgIERNQSBoYWxmIHRyYW5zZmVyIGNvbXBsZXRlIGNhbGxiYWNrLgogICAqIEBwYXJhbSAgaGRtYSBwb2ludGVyIHRvIGEgRE1BX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKICAgKiAgICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBETUEgbW9kdWxlLgogICAqIEByZXR2YWwgTm9uZQogICAqLwotdm9pZCBEQUNfRE1BSGFsZkNvbnZDcGx0Q2gyKERNQV9IYW5kbGVUeXBlRGVmICpoZG1hKSAgIAordm9pZCBEQUNfRE1BSGFsZkNvbnZDcGx0Q2gyKERNQV9IYW5kbGVUeXBlRGVmICpoZG1hKQogewotICAgIERBQ19IYW5kbGVUeXBlRGVmKiBoZGFjID0gKCBEQUNfSGFuZGxlVHlwZURlZiogKSgoRE1BX0hhbmRsZVR5cGVEZWYqICloZG1hKS0+UGFyZW50OwotICAgIC8qIENvbnZlcnNpb24gY29tcGxldGUgY2FsbGJhY2sgKi8KKyAgREFDX0hhbmRsZVR5cGVEZWYgKmhkYWMgPSAoREFDX0hhbmRsZVR5cGVEZWYgKikoKERNQV9IYW5kbGVUeXBlRGVmICopaGRtYSktPlBhcmVudDsKKyAgLyogQ29udmVyc2lvbiBjb21wbGV0ZSBjYWxsYmFjayAqLwogI2lmIChVU0VfSEFMX0RBQ19SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkKICAgaGRhYy0+Q29udkhhbGZDcGx0Q2FsbGJhY2tDaDIoaGRhYyk7CiAjZWxzZQotICAgIEhBTF9EQUNFeF9Db252SGFsZkNwbHRDYWxsYmFja0NoMihoZGFjKTsgCisgIEhBTF9EQUNFeF9Db252SGFsZkNwbHRDYWxsYmFja0NoMihoZGFjKTsKICNlbmRpZiAvKiBVU0VfSEFMX0RBQ19SRUdJU1RFUl9DQUxMQkFDS1MgKi8KIH0KIAogLyoqCi0gICogQGJyaWVmICBETUEgZXJyb3IgY2FsbGJhY2sgCisgICogQGJyaWVmICBETUEgZXJyb3IgY2FsbGJhY2suCiAgICogQHBhcmFtICBoZG1hIHBvaW50ZXIgdG8gYSBETUFfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucwogICAqICAgICAgICAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciB0aGUgc3BlY2lmaWVkIERNQSBtb2R1bGUuCiAgICogQHJldHZhbCBOb25lCiAgICovCi12b2lkIERBQ19ETUFFcnJvckNoMihETUFfSGFuZGxlVHlwZURlZiAqaGRtYSkgICAKK3ZvaWQgREFDX0RNQUVycm9yQ2gyKERNQV9IYW5kbGVUeXBlRGVmICpoZG1hKQogewotICBEQUNfSGFuZGxlVHlwZURlZiogaGRhYyA9ICggREFDX0hhbmRsZVR5cGVEZWYqICkoKERNQV9IYW5kbGVUeXBlRGVmKiApaGRtYSktPlBhcmVudDsKLSAgICAKKyAgREFDX0hhbmRsZVR5cGVEZWYgKmhkYWMgPSAoREFDX0hhbmRsZVR5cGVEZWYgKikoKERNQV9IYW5kbGVUeXBlRGVmICopaGRtYSktPlBhcmVudDsKKwogICAvKiBTZXQgREFDIGVycm9yIGNvZGUgdG8gRE1BIGVycm9yICovCiAgIGhkYWMtPkVycm9yQ29kZSB8PSBIQUxfREFDX0VSUk9SX0RNQTsKLSAgICAKKwogI2lmIChVU0VfSEFMX0RBQ19SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkKICAgaGRhYy0+RXJyb3JDYWxsYmFja0NoMihoZGFjKTsKICNlbHNlCi0gIEhBTF9EQUNFeF9FcnJvckNhbGxiYWNrQ2gyKGhkYWMpOyAKKyAgSEFMX0RBQ0V4X0Vycm9yQ2FsbGJhY2tDaDIoaGRhYyk7CiAjZW5kaWYgLyogVVNFX0hBTF9EQUNfUkVHSVNURVJfQ0FMTEJBQ0tTICovCi0gICAgCi0gIGhkYWMtPlN0YXRlPSBIQUxfREFDX1NUQVRFX1JFQURZOworCisgIGhkYWMtPlN0YXRlID0gSEFMX0RBQ19TVEFURV9SRUFEWTsKIH0KKyNlbmRpZiAvKiBEQUNfQ0hBTk5FTDJfU1VQUE9SVCAqLwogCiAvKioKICAgKiBAfQogICAqLwogCi0jZW5kaWYgLyogU1RNMzJGNDA1eHggfHwgU1RNMzJGNDE1eHggfHwgU1RNMzJGNDA3eHggfHwgU1RNMzJGNDE3eHggfHxcCi0gICAgICAgICAgU1RNMzJGNDI3eHggfHwgU1RNMzJGNDM3eHggfHwgU1RNMzJGNDI5eHggfHwgU1RNMzJGNDM5eHggfHxcCi0gICAgICAgICAgU1RNMzJGNDEweHggfHwgU1RNMzJGNDQ2eHggfHwgU1RNMzJGNDY5eHggfHwgU1RNMzJGNDc5eHggfHxcCi0JCSAgU1RNMzJGNDEzeHggfHwgU1RNMzJGNDIzeHggKi8KKy8qKgorICAqIEB9CisgICovCisKKyNlbmRpZiAvKiBEQUMgKi8KIAogI2VuZGlmIC8qIEhBTF9EQUNfTU9EVUxFX0VOQUJMRUQgKi8KIApAQCAtMzc4LDggKzQ5NCw0IEBACiAgICogQH0KICAgKi8KIAotLyoqCi0gICogQH0KLSAgKi8KLQogLyoqKioqKioqKioqKioqKioqKioqKioqKiAoQykgQ09QWVJJR0hUIFNUTWljcm9lbGVjdHJvbmljcyAqKioqKkVORCBPRiBGSUxFKioqKi8KZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmY0eHhfaGFsX2RjbWlfZXguYyBiL1NyYy9zdG0zMmY0eHhfaGFsX2RjbWlfZXguYwppbmRleCA4OWFkOWM3Li5iMjE0NTRjIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmNHh4X2hhbF9kY21pX2V4LmMKKysrIGIvU3JjL3N0bTMyZjR4eF9oYWxfZGNtaV9leC5jCkBAIC0xMiwxMCArMTIsMTAgQEAKICAgICAgICAgICAgICAgICMjIyMjIERDTUkgcGVyaXBoZXJhbCBleHRlbnNpb24gZmVhdHVyZXMgICMjIyMjCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCi0gIFsuLl0gQ29tcGFyaW5nIHRvIG90aGVyIHByZXZpb3VzIGRldmljZXMsIHRoZSBEQ01JIGludGVyZmFjZSBmb3IgU1RNMzJGNDQ2eHggCisgIFsuLl0gQ29tcGFyaW5nIHRvIG90aGVyIHByZXZpb3VzIGRldmljZXMsIHRoZSBEQ01JIGludGVyZmFjZSBmb3IgU1RNMzJGNDQ2eHgKICAgICAgICBkZXZpY2VzIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgYWRkaXRpb25hbCBmZWF0dXJlcyA6CiAKLSAgICAgICAoKykgU3VwcG9ydCBvZiBCbGFjayBhbmQgV2hpdGUgY2FtZXJhcyAKKyAgICAgICAoKykgU3VwcG9ydCBvZiBCbGFjayBhbmQgV2hpdGUgY2FtZXJhcwogCiAgICAgICAgICAgICAgICAgICAgICAjIyMjIyBIb3cgdG8gdXNlIHRoaXMgZHJpdmVyICMjIyMjCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMTAyLDcgKzEwMiwyNyBAQAogI2VuZGlmIC8qIFNUTTMyRjQ0Nnh4IHx8IFNUTTMyRjQ2OXh4IHx8IFNUTTMyRjQ3OXh4ICovCiAgIGlmKGhkY21pLT5TdGF0ZSA9PSBIQUxfRENNSV9TVEFURV9SRVNFVCkKICAgeworICAgIC8qIEFsbG9jYXRlIGxvY2sgcmVzb3VyY2UgYW5kIGluaXRpYWxpemUgaXQgKi8KKyAgICBoZGNtaS0+TG9jayA9IEhBTF9VTkxPQ0tFRDsKICAgICAvKiBJbml0IHRoZSBsb3cgbGV2ZWwgaGFyZHdhcmUgKi8KKyAgLyogSW5pdCB0aGUgRENNSSBDYWxsYmFjayBzZXR0aW5ncyAqLworI2lmIChVU0VfSEFMX0RDTUlfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCisgICAgaGRjbWktPkZyYW1lRXZlbnRDYWxsYmFjayA9IEhBTF9EQ01JX0ZyYW1lRXZlbnRDYWxsYmFjazsgLyogTGVnYWN5IHdlYWsgRnJhbWVFdmVudENhbGxiYWNrICAqLworICAgIGhkY21pLT5Wc3luY0V2ZW50Q2FsbGJhY2sgPSBIQUxfRENNSV9Wc3luY0V2ZW50Q2FsbGJhY2s7IC8qIExlZ2FjeSB3ZWFrIFZzeW5jRXZlbnRDYWxsYmFjayAgKi8KKyAgICBoZGNtaS0+TGluZUV2ZW50Q2FsbGJhY2sgID0gSEFMX0RDTUlfTGluZUV2ZW50Q2FsbGJhY2s7ICAvKiBMZWdhY3kgd2VhayBMaW5lRXZlbnRDYWxsYmFjayAgICovCisgICAgaGRjbWktPkVycm9yQ2FsbGJhY2sgICAgICA9IEhBTF9EQ01JX0Vycm9yQ2FsbGJhY2s7ICAgICAgLyogTGVnYWN5IHdlYWsgRXJyb3JDYWxsYmFjayAgICAgICAqLworCisgICAgaWYoaGRjbWktPk1zcEluaXRDYWxsYmFjayA9PSBOVUxMKQorICAgIHsKKyAgICAgIC8qIExlZ2FjeSB3ZWFrIE1zcEluaXQgQ2FsbGJhY2sgICAgICAgICovCisgICAgICBoZGNtaS0+TXNwSW5pdENhbGxiYWNrID0gSEFMX0RDTUlfTXNwSW5pdDsKKyAgICB9CisgICAgLyogSW5pdGlhbGl6ZSB0aGUgbG93IGxldmVsIGhhcmR3YXJlIChNU1ApICovCisgICAgaGRjbWktPk1zcEluaXRDYWxsYmFjayhoZGNtaSk7CisjZWxzZQorICAgIC8qIEluaXQgdGhlIGxvdyBsZXZlbCBoYXJkd2FyZSA6IEdQSU8sIENMT0NLLCBOVklDIGFuZCBETUEgKi8KKyAgICBIQUxfRENNSV9Nc3BJbml0KGhkY21pKTsKKyNlbmRpZiAvKiAoVVNFX0hBTF9EQ01JX1JFR0lTVEVSX0NBTExCQUNLUykgKi8KICAgICBIQUxfRENNSV9Nc3BJbml0KGhkY21pKTsKICAgfQogCkBAIC0xMjAsNyArMTQwLDcgQEAKICAgaGRjbWktPkluc3RhbmNlLT5DUiB8PSAgKHVpbnQzMl90KShoZGNtaS0+SW5pdC5TeW5jaHJvTW9kZSB8IGhkY21pLT5Jbml0LkNhcHR1cmVSYXRlIHxcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGRjbWktPkluaXQuVlNQb2xhcml0eSAgfCBoZGNtaS0+SW5pdC5IU1BvbGFyaXR5ICB8XAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhkY21pLT5Jbml0LlBDS1BvbGFyaXR5IHwgaGRjbWktPkluaXQuRXh0ZW5kZWREYXRhTW9kZSB8XAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhkY21pLT5Jbml0LkpQRUdNb2RlIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhkY21pLT5Jbml0LkpQRUdNb2RlCiAjaWYgZGVmaW5lZChTVE0zMkY0NDZ4eCkgfHwgZGVmaW5lZChTVE0zMkY0Njl4eCkgfHwgZGVmaW5lZChTVE0zMkY0Nzl4eCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGhkY21pLT5Jbml0LkJ5dGVTZWxlY3RNb2RlIHxcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGRjbWktPkluaXQuQnl0ZVNlbGVjdFN0YXJ0IHwgaGRjbWktPkluaXQuTGluZVNlbGVjdE1vZGUgfFwKQEAgLTE0Nyw3ICsxNjcsNyBAQAogCiAgIHJldHVybiBIQUxfT0s7CiB9Ci0gIAorCiAvKioKICAgKiBAfQogICAqLwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjR4eF9oYWxfZG1hMmQuYyBiL1NyYy9zdG0zMmY0eHhfaGFsX2RtYTJkLmMKaW5kZXggYTkxNTYyMC4uZDc2ZDI5NiAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZjR4eF9oYWxfZG1hMmQuYworKysgYi9TcmMvc3RtMzJmNHh4X2hhbF9kbWEyZC5jCkBAIC0yMDEsNyArMjAxLDggQEAKIC8qKiBAYWRkdG9ncm91cCBETUEyRF9Qcml2YXRlX0Z1bmN0aW9ucyBETUEyRCBQcml2YXRlIEZ1bmN0aW9ucwogICAqIEB7CiAgICovCi1zdGF0aWMgdm9pZCBETUEyRF9TZXRDb25maWcoRE1BMkRfSGFuZGxlVHlwZURlZiAqaGRtYTJkLCB1aW50MzJfdCBwZGF0YSwgdWludDMyX3QgRHN0QWRkcmVzcywgdWludDMyX3QgV2lkdGgsIHVpbnQzMl90IEhlaWdodCk7CitzdGF0aWMgdm9pZCBETUEyRF9TZXRDb25maWcoRE1BMkRfSGFuZGxlVHlwZURlZiAqaGRtYTJkLCB1aW50MzJfdCBwZGF0YSwgdWludDMyX3QgRHN0QWRkcmVzcywgdWludDMyX3QgV2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgSGVpZ2h0KTsKIC8qKgogICAqIEB9CiAgICovCkBAIC0yMTMsOCArMjE0LDggQEAKICAgKi8KIAogLyoqIEBkZWZncm91cCBETUEyRF9FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXAxIEluaXRpYWxpemF0aW9uIGFuZCBkZS1pbml0aWFsaXphdGlvbiBmdW5jdGlvbnMKLSAqICBAYnJpZWYgICBJbml0aWFsaXphdGlvbiBhbmQgQ29uZmlndXJhdGlvbiBmdW5jdGlvbnMKLSAqCisgICogIEBicmllZiAgIEluaXRpYWxpemF0aW9uIGFuZCBDb25maWd1cmF0aW9uIGZ1bmN0aW9ucworICAqCiBAdmVyYmF0aW0KICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgICAgICAgICAgIyMjIyMgSW5pdGlhbGl6YXRpb24gYW5kIENvbmZpZ3VyYXRpb24gZnVuY3Rpb25zICMjIyMjCkBAIC0yMzcsOSArMjM4LDkgQEAKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9ETUEyRF9Jbml0KERNQTJEX0hhbmRsZVR5cGVEZWYgKmhkbWEyZCkKIHsKICAgLyogQ2hlY2sgdGhlIERNQTJEIHBlcmlwaGVyYWwgc3RhdGUgKi8KLSAgaWYoaGRtYTJkID09IE5VTEwpCisgIGlmIChoZG1hMmQgPT0gTlVMTCkKICAgewotICAgICByZXR1cm4gSEFMX0VSUk9SOworICAgIHJldHVybiBIQUxfRVJST1I7CiAgIH0KIAogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwpAQCAtMjU0LDcgKzI1NSw3IEBACiAgICAgLyogUmVzZXQgQ2FsbGJhY2sgcG9pbnRlcnMgaW4gSEFMX0RNQTJEX1NUQVRFX1JFU0VUIG9ubHkgKi8KICAgICBoZG1hMmQtPkxpbmVFdmVudENhbGxiYWNrICAgICAgID0gSEFMX0RNQTJEX0xpbmVFdmVudENhbGxiYWNrOwogICAgIGhkbWEyZC0+Q0xVVExvYWRpbmdDcGx0Q2FsbGJhY2sgPSBIQUxfRE1BMkRfQ0xVVExvYWRpbmdDcGx0Q2FsbGJhY2s7Ci0gICAgaWYoaGRtYTJkLT5Nc3BJbml0Q2FsbGJhY2sgPT0gTlVMTCkKKyAgICBpZiAoaGRtYTJkLT5Nc3BJbml0Q2FsbGJhY2sgPT0gTlVMTCkKICAgICB7CiAgICAgICBoZG1hMmQtPk1zcEluaXRDYWxsYmFjayA9IEhBTF9ETUEyRF9Nc3BJbml0OwogICAgIH0KQEAgLTI2Myw3ICsyNjQsNyBAQAogICAgIGhkbWEyZC0+TXNwSW5pdENhbGxiYWNrKGhkbWEyZCk7CiAgIH0KICNlbHNlCi0gIGlmKGhkbWEyZC0+U3RhdGUgPT0gSEFMX0RNQTJEX1NUQVRFX1JFU0VUKQorICBpZiAoaGRtYTJkLT5TdGF0ZSA9PSBIQUxfRE1BMkRfU1RBVEVfUkVTRVQpCiAgIHsKICAgICAvKiBBbGxvY2F0ZSBsb2NrIHJlc291cmNlIGFuZCBpbml0aWFsaXplIGl0ICovCiAgICAgaGRtYTJkLT5Mb2NrID0gSEFMX1VOTE9DS0VEOwpAQCAtMzA2LDkgKzMwNyw5IEBACiB7CiAKICAgLyogQ2hlY2sgdGhlIERNQTJEIHBlcmlwaGVyYWwgc3RhdGUgKi8KLSAgaWYoaGRtYTJkID09IE5VTEwpCisgIGlmIChoZG1hMmQgPT0gTlVMTCkKICAgewotICAgICByZXR1cm4gSEFMX0VSUk9SOworICAgIHJldHVybiBIQUxfRVJST1I7CiAgIH0KIAogICAvKiBCZWZvcmUgYWJvcnRpbmcgYW55IERNQTJEIHRyYW5zZmVyIG9yIENMVVQgbG9hZGluZywgY2hlY2sKQEAgLTM2MSwxMyArMzYyLDEzIEBACiAKICNpZiAoVVNFX0hBTF9ETUEyRF9SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkKIAotICAgIGlmKGhkbWEyZC0+TXNwRGVJbml0Q2FsbGJhY2sgPT0gTlVMTCkKLSAgICB7Ci0gICAgICBoZG1hMmQtPk1zcERlSW5pdENhbGxiYWNrID0gSEFMX0RNQTJEX01zcERlSW5pdDsKLSAgICB9CisgIGlmIChoZG1hMmQtPk1zcERlSW5pdENhbGxiYWNrID09IE5VTEwpCisgIHsKKyAgICBoZG1hMmQtPk1zcERlSW5pdENhbGxiYWNrID0gSEFMX0RNQTJEX01zcERlSW5pdDsKKyAgfQogCi0gICAgLyogRGVJbml0IHRoZSBsb3cgbGV2ZWwgaGFyZHdhcmUgKi8KLSAgICBoZG1hMmQtPk1zcERlSW5pdENhbGxiYWNrKGhkbWEyZCk7CisgIC8qIERlSW5pdCB0aGUgbG93IGxldmVsIGhhcmR3YXJlICovCisgIGhkbWEyZC0+TXNwRGVJbml0Q2FsbGJhY2soaGRtYTJkKTsKIAogI2Vsc2UKICAgLyogQ2Fycnkgb24gd2l0aCBkZS1pbml0aWFsaXphdGlvbiBvZiBsb3cgbGV2ZWwgaGFyZHdhcmUgKi8KQEAgLTM5Miw3ICszOTMsNyBAQAogICAqICAgICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIERNQTJELgogICAqIEByZXR2YWwgTm9uZQogICAqLwotX193ZWFrIHZvaWQgSEFMX0RNQTJEX01zcEluaXQoRE1BMkRfSGFuZGxlVHlwZURlZiogaGRtYTJkKQorX193ZWFrIHZvaWQgSEFMX0RNQTJEX01zcEluaXQoRE1BMkRfSGFuZGxlVHlwZURlZiAqaGRtYTJkKQogewogICAvKiBQcmV2ZW50IHVudXNlZCBhcmd1bWVudChzKSBjb21waWxhdGlvbiB3YXJuaW5nICovCiAgIFVOVVNFRChoZG1hMmQpOwpAQCAtNDA4LDcgKzQwOSw3IEBACiAgICogICAgICAgICAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciB0aGUgRE1BMkQuCiAgICogQHJldHZhbCBOb25lCiAgICovCi1fX3dlYWsgdm9pZCBIQUxfRE1BMkRfTXNwRGVJbml0KERNQTJEX0hhbmRsZVR5cGVEZWYqIGhkbWEyZCkKK19fd2VhayB2b2lkIEhBTF9ETUEyRF9Nc3BEZUluaXQoRE1BMkRfSGFuZGxlVHlwZURlZiAqaGRtYTJkKQogewogICAvKiBQcmV2ZW50IHVudXNlZCBhcmd1bWVudChzKSBjb21waWxhdGlvbiB3YXJuaW5nICovCiAgIFVOVVNFRChoZG1hMmQpOwpAQCAtNDM1LDExICs0MzYsMTIgQEAKICAgKiBAbm90ZSBObyB3ZWFrIHByZWRlZmluZWQgY2FsbGJhY2tzIGFyZSBkZWZpbmVkIGZvciBIQUxfRE1BMkRfVFJBTlNGRVJDT01QTEVURV9DQl9JRCBvciBIQUxfRE1BMkRfVFJBTlNGRVJFUlJPUl9DQl9JRAogICAqIEByZXR2YWwgc3RhdHVzCiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfRE1BMkRfUmVnaXN0ZXJDYWxsYmFjayhETUEyRF9IYW5kbGVUeXBlRGVmICpoZG1hMmQsIEhBTF9ETUEyRF9DYWxsYmFja0lEVHlwZURlZiBDYWxsYmFja0lELCBwRE1BMkRfQ2FsbGJhY2tUeXBlRGVmIHBDYWxsYmFjaykKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9ETUEyRF9SZWdpc3RlckNhbGxiYWNrKERNQTJEX0hhbmRsZVR5cGVEZWYgKmhkbWEyZCwgSEFMX0RNQTJEX0NhbGxiYWNrSURUeXBlRGVmIENhbGxiYWNrSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwRE1BMkRfQ2FsbGJhY2tUeXBlRGVmIHBDYWxsYmFjaykKIHsKICAgSEFMX1N0YXR1c1R5cGVEZWYgc3RhdHVzID0gSEFMX09LOwogCi0gIGlmKHBDYWxsYmFjayA9PSBOVUxMKQorICBpZiAocENhbGxiYWNrID09IE5VTEwpCiAgIHsKICAgICAvKiBVcGRhdGUgdGhlIGVycm9yIGNvZGUgKi8KICAgICBoZG1hMmQtPkVycm9yQ29kZSB8PSBIQUxfRE1BMkRfRVJST1JfSU5WQUxJRF9DQUxMQkFDSzsKQEAgLTQ0OCw2OCArNDUwLDY4IEBACiAgIC8qIFByb2Nlc3MgbG9ja2VkICovCiAgIF9fSEFMX0xPQ0soaGRtYTJkKTsKIAotICBpZihIQUxfRE1BMkRfU1RBVEVfUkVBRFkgPT0gaGRtYTJkLT5TdGF0ZSkKKyAgaWYgKEhBTF9ETUEyRF9TVEFURV9SRUFEWSA9PSBoZG1hMmQtPlN0YXRlKQogICB7CiAgICAgc3dpdGNoIChDYWxsYmFja0lEKQogICAgIHsKLSAgICBjYXNlIEhBTF9ETUEyRF9UUkFOU0ZFUkNPTVBMRVRFX0NCX0lEIDoKLSAgICAgIGhkbWEyZC0+WGZlckNwbHRDYWxsYmFjayA9IHBDYWxsYmFjazsKLSAgICAgIGJyZWFrOworICAgICAgY2FzZSBIQUxfRE1BMkRfVFJBTlNGRVJDT01QTEVURV9DQl9JRCA6CisgICAgICAgIGhkbWEyZC0+WGZlckNwbHRDYWxsYmFjayA9IHBDYWxsYmFjazsKKyAgICAgICAgYnJlYWs7CiAKLSAgICBjYXNlIEhBTF9ETUEyRF9UUkFOU0ZFUkVSUk9SX0NCX0lEIDoKLSAgICAgIGhkbWEyZC0+WGZlckVycm9yQ2FsbGJhY2sgPSBwQ2FsbGJhY2s7Ci0gICAgICBicmVhazsKKyAgICAgIGNhc2UgSEFMX0RNQTJEX1RSQU5TRkVSRVJST1JfQ0JfSUQgOgorICAgICAgICBoZG1hMmQtPlhmZXJFcnJvckNhbGxiYWNrID0gcENhbGxiYWNrOworICAgICAgICBicmVhazsKIAotICAgIGNhc2UgSEFMX0RNQTJEX0xJTkVFVkVOVF9DQl9JRCA6Ci0gICAgICBoZG1hMmQtPkxpbmVFdmVudENhbGxiYWNrID0gcENhbGxiYWNrOwotICAgICAgYnJlYWs7CisgICAgICBjYXNlIEhBTF9ETUEyRF9MSU5FRVZFTlRfQ0JfSUQgOgorICAgICAgICBoZG1hMmQtPkxpbmVFdmVudENhbGxiYWNrID0gcENhbGxiYWNrOworICAgICAgICBicmVhazsKIAotICAgIGNhc2UgSEFMX0RNQTJEX0NMVVRMT0FESU5HQ1BMVF9DQl9JRCA6Ci0gICAgICBoZG1hMmQtPkNMVVRMb2FkaW5nQ3BsdENhbGxiYWNrID0gcENhbGxiYWNrOwotICAgICAgYnJlYWs7CisgICAgICBjYXNlIEhBTF9ETUEyRF9DTFVUTE9BRElOR0NQTFRfQ0JfSUQgOgorICAgICAgICBoZG1hMmQtPkNMVVRMb2FkaW5nQ3BsdENhbGxiYWNrID0gcENhbGxiYWNrOworICAgICAgICBicmVhazsKIAotICAgIGNhc2UgSEFMX0RNQTJEX01TUElOSVRfQ0JfSUQgOgotICAgICAgaGRtYTJkLT5Nc3BJbml0Q2FsbGJhY2sgPSBwQ2FsbGJhY2s7Ci0gICAgICBicmVhazsKKyAgICAgIGNhc2UgSEFMX0RNQTJEX01TUElOSVRfQ0JfSUQgOgorICAgICAgICBoZG1hMmQtPk1zcEluaXRDYWxsYmFjayA9IHBDYWxsYmFjazsKKyAgICAgICAgYnJlYWs7CiAKLSAgICBjYXNlIEhBTF9ETUEyRF9NU1BERUlOSVRfQ0JfSUQgOgotICAgICAgaGRtYTJkLT5Nc3BEZUluaXRDYWxsYmFjayA9IHBDYWxsYmFjazsKLSAgICAgIGJyZWFrOworICAgICAgY2FzZSBIQUxfRE1BMkRfTVNQREVJTklUX0NCX0lEIDoKKyAgICAgICAgaGRtYTJkLT5Nc3BEZUluaXRDYWxsYmFjayA9IHBDYWxsYmFjazsKKyAgICAgICAgYnJlYWs7CiAKLSAgICBkZWZhdWx0IDoKLSAgICAgLyogVXBkYXRlIHRoZSBlcnJvciBjb2RlICovCi0gICAgIGhkbWEyZC0+RXJyb3JDb2RlIHw9IEhBTF9ETUEyRF9FUlJPUl9JTlZBTElEX0NBTExCQUNLOwotICAgICAvKiB1cGRhdGUgcmV0dXJuIHN0YXR1cyAqLwotICAgICAgc3RhdHVzID0gIEhBTF9FUlJPUjsKLSAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdCA6CisgICAgICAgIC8qIFVwZGF0ZSB0aGUgZXJyb3IgY29kZSAqLworICAgICAgICBoZG1hMmQtPkVycm9yQ29kZSB8PSBIQUxfRE1BMkRfRVJST1JfSU5WQUxJRF9DQUxMQkFDSzsKKyAgICAgICAgLyogdXBkYXRlIHJldHVybiBzdGF0dXMgKi8KKyAgICAgICAgc3RhdHVzID0gIEhBTF9FUlJPUjsKKyAgICAgICAgYnJlYWs7CiAgICAgfQogICB9Ci0gIGVsc2UgaWYoSEFMX0RNQTJEX1NUQVRFX1JFU0VUID09IGhkbWEyZC0+U3RhdGUpCisgIGVsc2UgaWYgKEhBTF9ETUEyRF9TVEFURV9SRVNFVCA9PSBoZG1hMmQtPlN0YXRlKQogICB7CiAgICAgc3dpdGNoIChDYWxsYmFja0lEKQogICAgIHsKLSAgICBjYXNlIEhBTF9ETUEyRF9NU1BJTklUX0NCX0lEIDoKLSAgICAgIGhkbWEyZC0+TXNwSW5pdENhbGxiYWNrID0gcENhbGxiYWNrOwotICAgICAgYnJlYWs7CisgICAgICBjYXNlIEhBTF9ETUEyRF9NU1BJTklUX0NCX0lEIDoKKyAgICAgICAgaGRtYTJkLT5Nc3BJbml0Q2FsbGJhY2sgPSBwQ2FsbGJhY2s7CisgICAgICAgIGJyZWFrOwogCi0gICAgY2FzZSBIQUxfRE1BMkRfTVNQREVJTklUX0NCX0lEIDoKLSAgICAgIGhkbWEyZC0+TXNwRGVJbml0Q2FsbGJhY2sgPSBwQ2FsbGJhY2s7Ci0gICAgICBicmVhazsKKyAgICAgIGNhc2UgSEFMX0RNQTJEX01TUERFSU5JVF9DQl9JRCA6CisgICAgICAgIGhkbWEyZC0+TXNwRGVJbml0Q2FsbGJhY2sgPSBwQ2FsbGJhY2s7CisgICAgICAgIGJyZWFrOwogCi0gICAgZGVmYXVsdCA6Ci0gICAgIC8qIFVwZGF0ZSB0aGUgZXJyb3IgY29kZSAqLwotICAgICBoZG1hMmQtPkVycm9yQ29kZSB8PSBIQUxfRE1BMkRfRVJST1JfSU5WQUxJRF9DQUxMQkFDSzsKLSAgICAgLyogdXBkYXRlIHJldHVybiBzdGF0dXMgKi8KLSAgICAgIHN0YXR1cyA9ICBIQUxfRVJST1I7Ci0gICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQgOgorICAgICAgICAvKiBVcGRhdGUgdGhlIGVycm9yIGNvZGUgKi8KKyAgICAgICAgaGRtYTJkLT5FcnJvckNvZGUgfD0gSEFMX0RNQTJEX0VSUk9SX0lOVkFMSURfQ0FMTEJBQ0s7CisgICAgICAgIC8qIHVwZGF0ZSByZXR1cm4gc3RhdHVzICovCisgICAgICAgIHN0YXR1cyA9ICBIQUxfRVJST1I7CisgICAgICAgIGJyZWFrOwogICAgIH0KICAgfQogICBlbHNlCiAgIHsKICAgICAvKiBVcGRhdGUgdGhlIGVycm9yIGNvZGUgKi8KLSAgICAgaGRtYTJkLT5FcnJvckNvZGUgfD0gSEFMX0RNQTJEX0VSUk9SX0lOVkFMSURfQ0FMTEJBQ0s7Ci0gICAgIC8qIHVwZGF0ZSByZXR1cm4gc3RhdHVzICovCi0gICAgICBzdGF0dXMgPSAgSEFMX0VSUk9SOworICAgIGhkbWEyZC0+RXJyb3JDb2RlIHw9IEhBTF9ETUEyRF9FUlJPUl9JTlZBTElEX0NBTExCQUNLOworICAgIC8qIHVwZGF0ZSByZXR1cm4gc3RhdHVzICovCisgICAgc3RhdHVzID0gIEhBTF9FUlJPUjsKICAgfQogCiAgIC8qIFJlbGVhc2UgTG9jayAqLwpAQCAtNTM0LDczICs1MzYsNzMgQEAKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9ETUEyRF9VblJlZ2lzdGVyQ2FsbGJhY2soRE1BMkRfSGFuZGxlVHlwZURlZiAqaGRtYTJkLCBIQUxfRE1BMkRfQ2FsbGJhY2tJRFR5cGVEZWYgQ2FsbGJhY2tJRCkKIHsKLUhBTF9TdGF0dXNUeXBlRGVmIHN0YXR1cyA9IEhBTF9PSzsKKyAgSEFMX1N0YXR1c1R5cGVEZWYgc3RhdHVzID0gSEFMX09LOwogCiAgIC8qIFByb2Nlc3MgbG9ja2VkICovCiAgIF9fSEFMX0xPQ0soaGRtYTJkKTsKIAotICBpZihIQUxfRE1BMkRfU1RBVEVfUkVBRFkgPT0gaGRtYTJkLT5TdGF0ZSkKKyAgaWYgKEhBTF9ETUEyRF9TVEFURV9SRUFEWSA9PSBoZG1hMmQtPlN0YXRlKQogICB7CiAgICAgc3dpdGNoIChDYWxsYmFja0lEKQogICAgIHsKLSAgICBjYXNlIEhBTF9ETUEyRF9UUkFOU0ZFUkNPTVBMRVRFX0NCX0lEIDoKLSAgICAgIGhkbWEyZC0+WGZlckNwbHRDYWxsYmFjayA9IE5VTEw7Ci0gICAgICBicmVhazsKKyAgICAgIGNhc2UgSEFMX0RNQTJEX1RSQU5TRkVSQ09NUExFVEVfQ0JfSUQgOgorICAgICAgICBoZG1hMmQtPlhmZXJDcGx0Q2FsbGJhY2sgPSBOVUxMOworICAgICAgICBicmVhazsKIAotICAgIGNhc2UgSEFMX0RNQTJEX1RSQU5TRkVSRVJST1JfQ0JfSUQgOgotICAgICAgaGRtYTJkLT5YZmVyRXJyb3JDYWxsYmFjayA9IE5VTEw7Ci0gICAgICBicmVhazsKKyAgICAgIGNhc2UgSEFMX0RNQTJEX1RSQU5TRkVSRVJST1JfQ0JfSUQgOgorICAgICAgICBoZG1hMmQtPlhmZXJFcnJvckNhbGxiYWNrID0gTlVMTDsKKyAgICAgICAgYnJlYWs7CiAKLSAgICBjYXNlIEhBTF9ETUEyRF9MSU5FRVZFTlRfQ0JfSUQgOgotICAgICAgaGRtYTJkLT5MaW5lRXZlbnRDYWxsYmFjayA9IEhBTF9ETUEyRF9MaW5lRXZlbnRDYWxsYmFjazsKLSAgICAgIGJyZWFrOworICAgICAgY2FzZSBIQUxfRE1BMkRfTElORUVWRU5UX0NCX0lEIDoKKyAgICAgICAgaGRtYTJkLT5MaW5lRXZlbnRDYWxsYmFjayA9IEhBTF9ETUEyRF9MaW5lRXZlbnRDYWxsYmFjazsKKyAgICAgICAgYnJlYWs7CiAKLSAgICBjYXNlIEhBTF9ETUEyRF9DTFVUTE9BRElOR0NQTFRfQ0JfSUQgOgotICAgICAgaGRtYTJkLT5DTFVUTG9hZGluZ0NwbHRDYWxsYmFjayA9IEhBTF9ETUEyRF9DTFVUTG9hZGluZ0NwbHRDYWxsYmFjazsKLSAgICAgIGJyZWFrOworICAgICAgY2FzZSBIQUxfRE1BMkRfQ0xVVExPQURJTkdDUExUX0NCX0lEIDoKKyAgICAgICAgaGRtYTJkLT5DTFVUTG9hZGluZ0NwbHRDYWxsYmFjayA9IEhBTF9ETUEyRF9DTFVUTG9hZGluZ0NwbHRDYWxsYmFjazsKKyAgICAgICAgYnJlYWs7CiAKLSAgICBjYXNlIEhBTF9ETUEyRF9NU1BJTklUX0NCX0lEIDoKLSAgICAgIGhkbWEyZC0+TXNwSW5pdENhbGxiYWNrID0gSEFMX0RNQTJEX01zcEluaXQ7IC8qIExlZ2FjeSB3ZWFrIChzdXJjaGFyZ2VkKSBNc3AgSW5pdCAqLwotICAgICAgYnJlYWs7CisgICAgICBjYXNlIEhBTF9ETUEyRF9NU1BJTklUX0NCX0lEIDoKKyAgICAgICAgaGRtYTJkLT5Nc3BJbml0Q2FsbGJhY2sgPSBIQUxfRE1BMkRfTXNwSW5pdDsgLyogTGVnYWN5IHdlYWsgKHN1cmNoYXJnZWQpIE1zcCBJbml0ICovCisgICAgICAgIGJyZWFrOwogCi0gICAgY2FzZSBIQUxfRE1BMkRfTVNQREVJTklUX0NCX0lEIDoKLSAgICAgIGhkbWEyZC0+TXNwRGVJbml0Q2FsbGJhY2sgPSBIQUxfRE1BMkRfTXNwRGVJbml0OyAvKiBMZWdhY3kgd2VhayAoc3VyY2hhcmdlZCkgTXNwIERlSW5pdCAqLwotICAgICAgYnJlYWs7CisgICAgICBjYXNlIEhBTF9ETUEyRF9NU1BERUlOSVRfQ0JfSUQgOgorICAgICAgICBoZG1hMmQtPk1zcERlSW5pdENhbGxiYWNrID0gSEFMX0RNQTJEX01zcERlSW5pdDsgLyogTGVnYWN5IHdlYWsgKHN1cmNoYXJnZWQpIE1zcCBEZUluaXQgKi8KKyAgICAgICAgYnJlYWs7CiAKLSAgICBkZWZhdWx0IDoKLSAgICAgLyogVXBkYXRlIHRoZSBlcnJvciBjb2RlICovCi0gICAgIGhkbWEyZC0+RXJyb3JDb2RlIHw9IEhBTF9ETUEyRF9FUlJPUl9JTlZBTElEX0NBTExCQUNLOwotICAgICAvKiB1cGRhdGUgcmV0dXJuIHN0YXR1cyAqLwotICAgICAgc3RhdHVzID0gIEhBTF9FUlJPUjsKLSAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdCA6CisgICAgICAgIC8qIFVwZGF0ZSB0aGUgZXJyb3IgY29kZSAqLworICAgICAgICBoZG1hMmQtPkVycm9yQ29kZSB8PSBIQUxfRE1BMkRfRVJST1JfSU5WQUxJRF9DQUxMQkFDSzsKKyAgICAgICAgLyogdXBkYXRlIHJldHVybiBzdGF0dXMgKi8KKyAgICAgICAgc3RhdHVzID0gIEhBTF9FUlJPUjsKKyAgICAgICAgYnJlYWs7CiAgICAgfQogICB9Ci0gIGVsc2UgaWYoSEFMX0RNQTJEX1NUQVRFX1JFU0VUID09IGhkbWEyZC0+U3RhdGUpCisgIGVsc2UgaWYgKEhBTF9ETUEyRF9TVEFURV9SRVNFVCA9PSBoZG1hMmQtPlN0YXRlKQogICB7CiAgICAgc3dpdGNoIChDYWxsYmFja0lEKQogICAgIHsKLSAgICBjYXNlIEhBTF9ETUEyRF9NU1BJTklUX0NCX0lEIDoKLSAgICAgIGhkbWEyZC0+TXNwSW5pdENhbGxiYWNrID0gSEFMX0RNQTJEX01zcEluaXQ7ICAgLyogTGVnYWN5IHdlYWsgKHN1cmNoYXJnZWQpIE1zcCBJbml0ICovCi0gICAgICBicmVhazsKKyAgICAgIGNhc2UgSEFMX0RNQTJEX01TUElOSVRfQ0JfSUQgOgorICAgICAgICBoZG1hMmQtPk1zcEluaXRDYWxsYmFjayA9IEhBTF9ETUEyRF9Nc3BJbml0OyAgIC8qIExlZ2FjeSB3ZWFrIChzdXJjaGFyZ2VkKSBNc3AgSW5pdCAqLworICAgICAgICBicmVhazsKIAotICAgIGNhc2UgSEFMX0RNQTJEX01TUERFSU5JVF9DQl9JRCA6Ci0gICAgICBoZG1hMmQtPk1zcERlSW5pdENhbGxiYWNrID0gSEFMX0RNQTJEX01zcERlSW5pdDsgIC8qIExlZ2FjeSB3ZWFrIChzdXJjaGFyZ2VkKSBNc3AgRGVJbml0ICovCi0gICAgICBicmVhazsKKyAgICAgIGNhc2UgSEFMX0RNQTJEX01TUERFSU5JVF9DQl9JRCA6CisgICAgICAgIGhkbWEyZC0+TXNwRGVJbml0Q2FsbGJhY2sgPSBIQUxfRE1BMkRfTXNwRGVJbml0OyAgLyogTGVnYWN5IHdlYWsgKHN1cmNoYXJnZWQpIE1zcCBEZUluaXQgKi8KKyAgICAgICAgYnJlYWs7CiAKLSAgICBkZWZhdWx0IDoKLSAgICAgLyogVXBkYXRlIHRoZSBlcnJvciBjb2RlICovCi0gICAgIGhkbWEyZC0+RXJyb3JDb2RlIHw9IEhBTF9ETUEyRF9FUlJPUl9JTlZBTElEX0NBTExCQUNLOwotICAgICAvKiB1cGRhdGUgcmV0dXJuIHN0YXR1cyAqLwotICAgICAgc3RhdHVzID0gIEhBTF9FUlJPUjsKLSAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdCA6CisgICAgICAgIC8qIFVwZGF0ZSB0aGUgZXJyb3IgY29kZSAqLworICAgICAgICBoZG1hMmQtPkVycm9yQ29kZSB8PSBIQUxfRE1BMkRfRVJST1JfSU5WQUxJRF9DQUxMQkFDSzsKKyAgICAgICAgLyogdXBkYXRlIHJldHVybiBzdGF0dXMgKi8KKyAgICAgICAgc3RhdHVzID0gIEhBTF9FUlJPUjsKKyAgICAgICAgYnJlYWs7CiAgICAgfQogICB9CiAgIGVsc2UKICAgewotICAgICAvKiBVcGRhdGUgdGhlIGVycm9yIGNvZGUgKi8KLSAgICAgaGRtYTJkLT5FcnJvckNvZGUgfD0gSEFMX0RNQTJEX0VSUk9SX0lOVkFMSURfQ0FMTEJBQ0s7Ci0gICAgIC8qIHVwZGF0ZSByZXR1cm4gc3RhdHVzICovCi0gICAgICBzdGF0dXMgPSAgSEFMX0VSUk9SOworICAgIC8qIFVwZGF0ZSB0aGUgZXJyb3IgY29kZSAqLworICAgIGhkbWEyZC0+RXJyb3JDb2RlIHw9IEhBTF9ETUEyRF9FUlJPUl9JTlZBTElEX0NBTExCQUNLOworICAgIC8qIHVwZGF0ZSByZXR1cm4gc3RhdHVzICovCisgICAgc3RhdHVzID0gIEhBTF9FUlJPUjsKICAgfQogCiAgIC8qIFJlbGVhc2UgTG9jayAqLwpAQCAtNjE1LDggKzYxNyw4IEBACiAKIAogLyoqIEBkZWZncm91cCBETUEyRF9FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXAyIElPIG9wZXJhdGlvbiBmdW5jdGlvbnMKLSAqICBAYnJpZWYgICBJTyBvcGVyYXRpb24gZnVuY3Rpb25zCi0gKgorICAqICBAYnJpZWYgICBJTyBvcGVyYXRpb24gZnVuY3Rpb25zCisgICoKIEB2ZXJiYXRpbQogID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgICAgICAgICAgICAgICAgICAjIyMjIyAgSU8gb3BlcmF0aW9uIGZ1bmN0aW9ucyAgIyMjIyMKQEAgLTY1OCwxMSArNjYwLDEzIEBACiAgICogICAgICAgICAgICAgICAgICAgICBjb252ZXJzaW9uIG1vZGUgaXMgc2VsZWN0ZWQsIG9yIGNvbmZpZ3VyZQogICAqICAgICAgICAgICAgICAgICAgICAgdGhlIGNvbG9yIHZhbHVlIGlmIFJlZ2lzdGVyLXRvLU1lbW9yeSBtb2RlIGlzIHNlbGVjdGVkLgogICAqIEBwYXJhbSAgRHN0QWRkcmVzcyBUaGUgZGVzdGluYXRpb24gbWVtb3J5IEJ1ZmZlciBhZGRyZXNzLgotICAqIEBwYXJhbSAgV2lkdGggICAgICBUaGUgd2lkdGggb2YgZGF0YSB0byBiZSB0cmFuc2ZlcnJlZCBmcm9tIHNvdXJjZSB0byBkZXN0aW5hdGlvbiAoZXhwcmVzc2VkIGluIG51bWJlciBvZiBwaXhlbHMgcGVyIGxpbmUpLgorICAqIEBwYXJhbSAgV2lkdGggICAgICBUaGUgd2lkdGggb2YgZGF0YSB0byBiZSB0cmFuc2ZlcnJlZCBmcm9tIHNvdXJjZQorICAqICAgICAgICAgICAgICAgICAgICB0byBkZXN0aW5hdGlvbiAoZXhwcmVzc2VkIGluIG51bWJlciBvZiBwaXhlbHMgcGVyIGxpbmUpLgogICAqIEBwYXJhbSAgSGVpZ2h0ICAgICBUaGUgaGVpZ2h0IG9mIGRhdGEgdG8gYmUgdHJhbnNmZXJyZWQgZnJvbSBzb3VyY2UgdG8gZGVzdGluYXRpb24gKGV4cHJlc3NlZCBpbiBudW1iZXIgb2YgbGluZXMpLgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0RNQTJEX1N0YXJ0KERNQTJEX0hhbmRsZVR5cGVEZWYgKmhkbWEyZCwgdWludDMyX3QgcGRhdGEsIHVpbnQzMl90IERzdEFkZHJlc3MsIHVpbnQzMl90IFdpZHRoLCAgdWludDMyX3QgSGVpZ2h0KQorSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0RNQTJEX1N0YXJ0KERNQTJEX0hhbmRsZVR5cGVEZWYgKmhkbWEyZCwgdWludDMyX3QgcGRhdGEsIHVpbnQzMl90IERzdEFkZHJlc3MsIHVpbnQzMl90IFdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IEhlaWdodCkKIHsKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KICAgYXNzZXJ0X3BhcmFtKElTX0RNQTJEX0xJTkUoSGVpZ2h0KSk7CkBAIC02OTIsMTEgKzY5NiwxMyBAQAogICAqICAgICAgICAgICAgICAgICAgICAgY29udmVyc2lvbiBtb2RlIGlzIHNlbGVjdGVkLCBvciBjb25maWd1cmUKICAgKiAgICAgICAgICAgICAgICAgICAgIHRoZSBjb2xvciB2YWx1ZSBpZiBSZWdpc3Rlci10by1NZW1vcnkgbW9kZSBpcyBzZWxlY3RlZC4KICAgKiBAcGFyYW0gIERzdEFkZHJlc3MgVGhlIGRlc3RpbmF0aW9uIG1lbW9yeSBCdWZmZXIgYWRkcmVzcy4KLSAgKiBAcGFyYW0gIFdpZHRoICAgICAgVGhlIHdpZHRoIG9mIGRhdGEgdG8gYmUgdHJhbnNmZXJyZWQgZnJvbSBzb3VyY2UgdG8gZGVzdGluYXRpb24gKGV4cHJlc3NlZCBpbiBudW1iZXIgb2YgcGl4ZWxzIHBlciBsaW5lKS4KKyAgKiBAcGFyYW0gIFdpZHRoICAgICAgVGhlIHdpZHRoIG9mIGRhdGEgdG8gYmUgdHJhbnNmZXJyZWQgZnJvbSBzb3VyY2UKKyAgKiAgICAgICAgICAgICAgICAgICAgdG8gZGVzdGluYXRpb24gKGV4cHJlc3NlZCBpbiBudW1iZXIgb2YgcGl4ZWxzIHBlciBsaW5lKS4KICAgKiBAcGFyYW0gIEhlaWdodCAgICAgVGhlIGhlaWdodCBvZiBkYXRhIHRvIGJlIHRyYW5zZmVycmVkIGZyb20gc291cmNlIHRvIGRlc3RpbmF0aW9uIChleHByZXNzZWQgaW4gbnVtYmVyIG9mIGxpbmVzKS4KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9ETUEyRF9TdGFydF9JVChETUEyRF9IYW5kbGVUeXBlRGVmICpoZG1hMmQsIHVpbnQzMl90IHBkYXRhLCB1aW50MzJfdCBEc3RBZGRyZXNzLCB1aW50MzJfdCBXaWR0aCwgIHVpbnQzMl90IEhlaWdodCkKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9ETUEyRF9TdGFydF9JVChETUEyRF9IYW5kbGVUeXBlRGVmICpoZG1hMmQsIHVpbnQzMl90IHBkYXRhLCB1aW50MzJfdCBEc3RBZGRyZXNzLCB1aW50MzJfdCBXaWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBIZWlnaHQpCiB7CiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19ETUEyRF9MSU5FKEhlaWdodCkpOwpAQCAtNzEyLDcgKzcxOCw3IEBACiAgIERNQTJEX1NldENvbmZpZyhoZG1hMmQsIHBkYXRhLCBEc3RBZGRyZXNzLCBXaWR0aCwgSGVpZ2h0KTsKIAogICAvKiBFbmFibGUgdGhlIHRyYW5zZmVyIGNvbXBsZXRlLCB0cmFuc2ZlciBlcnJvciBhbmQgY29uZmlndXJhdGlvbiBlcnJvciBpbnRlcnJ1cHRzICovCi0gIF9fSEFMX0RNQTJEX0VOQUJMRV9JVChoZG1hMmQsIERNQTJEX0lUX1RDfERNQTJEX0lUX1RFfERNQTJEX0lUX0NFKTsKKyAgX19IQUxfRE1BMkRfRU5BQkxFX0lUKGhkbWEyZCwgRE1BMkRfSVRfVEMgfCBETUEyRF9JVF9URSB8IERNQTJEX0lUX0NFKTsKIAogICAvKiBFbmFibGUgdGhlIFBlcmlwaGVyYWwgKi8KICAgX19IQUxfRE1BMkRfRU5BQkxFKGhkbWEyZCk7CkBAIC03MjcsMTEgKzczMywxMyBAQAogICAqIEBwYXJhbSAgU3JjQWRkcmVzczEgVGhlIHNvdXJjZSBtZW1vcnkgQnVmZmVyIGFkZHJlc3MgZm9yIHRoZSBmb3JlZ3JvdW5kIGxheWVyLgogICAqIEBwYXJhbSAgU3JjQWRkcmVzczIgVGhlIHNvdXJjZSBtZW1vcnkgQnVmZmVyIGFkZHJlc3MgZm9yIHRoZSBiYWNrZ3JvdW5kIGxheWVyLgogICAqIEBwYXJhbSAgRHN0QWRkcmVzcyAgVGhlIGRlc3RpbmF0aW9uIG1lbW9yeSBCdWZmZXIgYWRkcmVzcy4KLSAgKiBAcGFyYW0gIFdpZHRoICAgICAgIFRoZSB3aWR0aCBvZiBkYXRhIHRvIGJlIHRyYW5zZmVycmVkIGZyb20gc291cmNlIHRvIGRlc3RpbmF0aW9uIChleHByZXNzZWQgaW4gbnVtYmVyIG9mIHBpeGVscyBwZXIgbGluZSkuCisgICogQHBhcmFtICBXaWR0aCAgICAgICBUaGUgd2lkdGggb2YgZGF0YSB0byBiZSB0cmFuc2ZlcnJlZCBmcm9tIHNvdXJjZQorICAqICAgICAgICAgICAgICAgICAgICAgdG8gZGVzdGluYXRpb24gKGV4cHJlc3NlZCBpbiBudW1iZXIgb2YgcGl4ZWxzIHBlciBsaW5lKS4KICAgKiBAcGFyYW0gIEhlaWdodCAgICAgIFRoZSBoZWlnaHQgb2YgZGF0YSB0byBiZSB0cmFuc2ZlcnJlZCBmcm9tIHNvdXJjZSB0byBkZXN0aW5hdGlvbiAoZXhwcmVzc2VkIGluIG51bWJlciBvZiBsaW5lcykuCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfRE1BMkRfQmxlbmRpbmdTdGFydChETUEyRF9IYW5kbGVUeXBlRGVmICpoZG1hMmQsIHVpbnQzMl90IFNyY0FkZHJlc3MxLCB1aW50MzJfdCAgU3JjQWRkcmVzczIsIHVpbnQzMl90IERzdEFkZHJlc3MsIHVpbnQzMl90IFdpZHRoLCAgdWludDMyX3QgSGVpZ2h0KQorSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0RNQTJEX0JsZW5kaW5nU3RhcnQoRE1BMkRfSGFuZGxlVHlwZURlZiAqaGRtYTJkLCB1aW50MzJfdCBTcmNBZGRyZXNzMSwgdWludDMyX3QgIFNyY0FkZHJlc3MyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgRHN0QWRkcmVzcywgdWludDMyX3QgV2lkdGgsICB1aW50MzJfdCBIZWlnaHQpCiB7CiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19ETUEyRF9MSU5FKEhlaWdodCkpOwpAQCAtNzYyLDExICs3NzAsMTMgQEAKICAgKiBAcGFyYW0gIFNyY0FkZHJlc3MxIFRoZSBzb3VyY2UgbWVtb3J5IEJ1ZmZlciBhZGRyZXNzIGZvciB0aGUgZm9yZWdyb3VuZCBsYXllci4KICAgKiBAcGFyYW0gIFNyY0FkZHJlc3MyIFRoZSBzb3VyY2UgbWVtb3J5IEJ1ZmZlciBhZGRyZXNzIGZvciB0aGUgYmFja2dyb3VuZCBsYXllci4KICAgKiBAcGFyYW0gIERzdEFkZHJlc3MgIFRoZSBkZXN0aW5hdGlvbiBtZW1vcnkgQnVmZmVyIGFkZHJlc3MuCi0gICogQHBhcmFtICBXaWR0aCAgICAgICBUaGUgd2lkdGggb2YgZGF0YSB0byBiZSB0cmFuc2ZlcnJlZCBmcm9tIHNvdXJjZSB0byBkZXN0aW5hdGlvbiAoZXhwcmVzc2VkIGluIG51bWJlciBvZiBwaXhlbHMgcGVyIGxpbmUpLgorICAqIEBwYXJhbSAgV2lkdGggICAgICAgVGhlIHdpZHRoIG9mIGRhdGEgdG8gYmUgdHJhbnNmZXJyZWQgZnJvbSBzb3VyY2UKKyAgKiAgICAgICAgICAgICAgICAgICAgIHRvIGRlc3RpbmF0aW9uIChleHByZXNzZWQgaW4gbnVtYmVyIG9mIHBpeGVscyBwZXIgbGluZSkuCiAgICogQHBhcmFtICBIZWlnaHQgICAgICBUaGUgaGVpZ2h0IG9mIGRhdGEgdG8gYmUgdHJhbnNmZXJyZWQgZnJvbSBzb3VyY2UgdG8gZGVzdGluYXRpb24gKGV4cHJlc3NlZCBpbiBudW1iZXIgb2YgbGluZXMpLgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0RNQTJEX0JsZW5kaW5nU3RhcnRfSVQoRE1BMkRfSGFuZGxlVHlwZURlZiAqaGRtYTJkLCB1aW50MzJfdCBTcmNBZGRyZXNzMSwgdWludDMyX3QgIFNyY0FkZHJlc3MyLCB1aW50MzJfdCBEc3RBZGRyZXNzLCB1aW50MzJfdCBXaWR0aCwgIHVpbnQzMl90IEhlaWdodCkKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9ETUEyRF9CbGVuZGluZ1N0YXJ0X0lUKERNQTJEX0hhbmRsZVR5cGVEZWYgKmhkbWEyZCwgdWludDMyX3QgU3JjQWRkcmVzczEsIHVpbnQzMl90ICBTcmNBZGRyZXNzMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IERzdEFkZHJlc3MsIHVpbnQzMl90IFdpZHRoLCAgdWludDMyX3QgSGVpZ2h0KQogewogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfRE1BMkRfTElORShIZWlnaHQpKTsKQEAgLTc4NSw3ICs3OTUsNyBAQAogICBETUEyRF9TZXRDb25maWcoaGRtYTJkLCBTcmNBZGRyZXNzMSwgRHN0QWRkcmVzcywgV2lkdGgsIEhlaWdodCk7CiAKICAgLyogRW5hYmxlIHRoZSB0cmFuc2ZlciBjb21wbGV0ZSwgdHJhbnNmZXIgZXJyb3IgYW5kIGNvbmZpZ3VyYXRpb24gZXJyb3IgaW50ZXJydXB0cyAqLwotICBfX0hBTF9ETUEyRF9FTkFCTEVfSVQoaGRtYTJkLCBETUEyRF9JVF9UQ3xETUEyRF9JVF9URXxETUEyRF9JVF9DRSk7CisgIF9fSEFMX0RNQTJEX0VOQUJMRV9JVChoZG1hMmQsIERNQTJEX0lUX1RDIHwgRE1BMkRfSVRfVEUgfCBETUEyRF9JVF9DRSk7CiAKICAgLyogRW5hYmxlIHRoZSBQZXJpcGhlcmFsICovCiAgIF9fSEFMX0RNQTJEX0VOQUJMRShoZG1hMmQpOwpAQCAtODA3LDE1ICs4MTcsMTUgQEAKICAgLyogU1RBUlQgYml0IGlzIHJlc2V0IHRvIG1ha2Ugc3VyZSBub3QgdG8gc2V0IGl0IGFnYWluLCBpbiB0aGUgZXZlbnQgdGhlIEhXIGNsZWFycyBpdAogICAgICBiZXR3ZWVuIHRoZSByZWdpc3RlciByZWFkIGFuZCB0aGUgcmVnaXN0ZXIgd3JpdGUgYnkgdGhlIENQVSAod3JpdGluZyAwIGhhcyBubwogICAgICBlZmZlY3Qgb24gU1RBUlQgYml0dmFsdWUpICovCi0gICBNT0RJRllfUkVHKGhkbWEyZC0+SW5zdGFuY2UtPkNSLCBETUEyRF9DUl9BQk9SVHxETUEyRF9DUl9TVEFSVCwgRE1BMkRfQ1JfQUJPUlQpOworICBNT0RJRllfUkVHKGhkbWEyZC0+SW5zdGFuY2UtPkNSLCBETUEyRF9DUl9BQk9SVCB8IERNQTJEX0NSX1NUQVJULCBETUEyRF9DUl9BQk9SVCk7CiAKICAgLyogR2V0IHRpY2sgKi8KICAgdGlja3N0YXJ0ID0gSEFMX0dldFRpY2soKTsKIAogICAvKiBDaGVjayBpZiB0aGUgRE1BMkQgaXMgZWZmZWN0aXZlbHkgZGlzYWJsZWQgKi8KLSAgd2hpbGUoKGhkbWEyZC0+SW5zdGFuY2UtPkNSICYgRE1BMkRfQ1JfU1RBUlQpICE9IDBVKQorICB3aGlsZSAoKGhkbWEyZC0+SW5zdGFuY2UtPkNSICYgRE1BMkRfQ1JfU1RBUlQpICE9IDBVKQogICB7Ci0gICAgaWYoKEhBTF9HZXRUaWNrKCkgLSB0aWNrc3RhcnQgKSA+IERNQTJEX1RJTUVPVVRfQUJPUlQpCisgICAgaWYgKChIQUxfR2V0VGljaygpIC0gdGlja3N0YXJ0KSA+IERNQTJEX1RJTUVPVVRfQUJPUlQpCiAgICAgewogICAgICAgLyogVXBkYXRlIGVycm9yIGNvZGUgKi8KICAgICAgIGhkbWEyZC0+RXJyb3JDb2RlIHw9IEhBTF9ETUEyRF9FUlJPUl9USU1FT1VUOwpAQCAtODMxLDcgKzg0MSw3IEBACiAgIH0KIAogICAvKiBEaXNhYmxlIHRoZSBUcmFuc2ZlciBDb21wbGV0ZSwgVHJhbnNmZXIgRXJyb3IgYW5kIENvbmZpZ3VyYXRpb24gRXJyb3IgaW50ZXJydXB0cyAqLwotICBfX0hBTF9ETUEyRF9ESVNBQkxFX0lUKGhkbWEyZCwgRE1BMkRfSVRfVEN8RE1BMkRfSVRfVEV8RE1BMkRfSVRfQ0UpOworICBfX0hBTF9ETUEyRF9ESVNBQkxFX0lUKGhkbWEyZCwgRE1BMkRfSVRfVEMgfCBETUEyRF9JVF9URSB8IERNQTJEX0lUX0NFKTsKIAogICAvKiBDaGFuZ2UgdGhlIERNQTJEIHN0YXRlKi8KICAgaGRtYTJkLT5TdGF0ZSA9IEhBTF9ETUEyRF9TVEFURV9SRUFEWTsKQEAgLTg1Niw3ICs4NjYsNyBAQAogICAvKiBTVEFSVCBiaXQgaXMgcmVzZXQgdG8gbWFrZSBzdXJlIG5vdCB0byBzZXQgaXQgYWdhaW4sIGluIHRoZSBldmVudCB0aGUgSFcgY2xlYXJzIGl0CiAgICAgIGJldHdlZW4gdGhlIHJlZ2lzdGVyIHJlYWQgYW5kIHRoZSByZWdpc3RlciB3cml0ZSBieSB0aGUgQ1BVICh3cml0aW5nIDAgaGFzIG5vCiAgICAgIGVmZmVjdCBvbiBTVEFSVCBiaXR2YWx1ZSkuICovCi0gIE1PRElGWV9SRUcoaGRtYTJkLT5JbnN0YW5jZS0+Q1IsIERNQTJEX0NSX1NVU1B8RE1BMkRfQ1JfU1RBUlQsIERNQTJEX0NSX1NVU1ApOworICBNT0RJRllfUkVHKGhkbWEyZC0+SW5zdGFuY2UtPkNSLCBETUEyRF9DUl9TVVNQIHwgRE1BMkRfQ1JfU1RBUlQsIERNQTJEX0NSX1NVU1ApOwogCiAgIC8qIEdldCB0aWNrICovCiAgIHRpY2tzdGFydCA9IEhBTF9HZXRUaWNrKCk7CkBAIC04NjQsNyArODc0LDcgQEAKICAgLyogQ2hlY2sgaWYgdGhlIERNQTJEIGlzIGVmZmVjdGl2ZWx5IHN1c3BlbmRlZCAqLwogICB3aGlsZSAoKGhkbWEyZC0+SW5zdGFuY2UtPkNSICYgKERNQTJEX0NSX1NVU1AgfCBETUEyRF9DUl9TVEFSVCkpID09IERNQTJEX0NSX1NUQVJUKQogICB7Ci0gICAgaWYoKEhBTF9HZXRUaWNrKCkgLSB0aWNrc3RhcnQgKSA+IERNQTJEX1RJTUVPVVRfU1VTUEVORCkKKyAgICBpZiAoKEhBTF9HZXRUaWNrKCkgLSB0aWNrc3RhcnQpID4gRE1BMkRfVElNRU9VVF9TVVNQRU5EKQogICAgIHsKICAgICAgIC8qIFVwZGF0ZSBlcnJvciBjb2RlICovCiAgICAgICBoZG1hMmQtPkVycm9yQ29kZSB8PSBIQUxfRE1BMkRfRVJST1JfVElNRU9VVDsKQEAgLTg3Niw3ICs4ODYsNyBAQAogICAgIH0KICAgfQogCi0gICAvKiBDaGVjayB3aGV0aGVyIG9yIG5vdCBhIHRyYW5zZmVyIGlzIGFjdHVhbGx5IHN1c3BlbmRlZCBhbmQgY2hhbmdlIHRoZSBETUEyRCBzdGF0ZSBhY2NvcmRpbmdseSAqLworICAvKiBDaGVjayB3aGV0aGVyIG9yIG5vdCBhIHRyYW5zZmVyIGlzIGFjdHVhbGx5IHN1c3BlbmRlZCBhbmQgY2hhbmdlIHRoZSBETUEyRCBzdGF0ZSBhY2NvcmRpbmdseSAqLwogICBpZiAoKGhkbWEyZC0+SW5zdGFuY2UtPkNSICYgRE1BMkRfQ1JfU1RBUlQpICE9IDBVKQogICB7CiAgICAgaGRtYTJkLT5TdGF0ZSA9IEhBTF9ETUEyRF9TVEFURV9TVVNQRU5EOwpAQCAtODg0LDcgKzg5NCw3IEBACiAgIGVsc2UKICAgewogICAgIC8qIE1ha2Ugc3VyZSBTVVNQIGJpdCBpcyBjbGVhcmVkIHNpbmNlIGl0IGlzIG1lYW5pbmdsZXNzCi0gICAgICAgd2hlbiBubyB0cmFuZmVyIGlzIG9uLWdvaW5nICovCisgICAgICAgd2hlbiBubyB0cmFuc2ZlciBpcyBvbi1nb2luZyAqLwogICAgIENMRUFSX0JJVChoZG1hMmQtPkluc3RhbmNlLT5DUiwgRE1BMkRfQ1JfU1VTUCk7CiAgIH0KIApAQCAtOTAwLDcgKzkxMCw3IEBACiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfRE1BMkRfUmVzdW1lKERNQTJEX0hhbmRsZVR5cGVEZWYgKmhkbWEyZCkKIHsKICAgLyogQ2hlY2sgdGhlIFNVU1AgYW5kIFNUQVJUIGJpdHMgKi8KLSAgaWYoKGhkbWEyZC0+SW5zdGFuY2UtPkNSICYgKERNQTJEX0NSX1NVU1AgfCBETUEyRF9DUl9TVEFSVCkpID09IChETUEyRF9DUl9TVVNQIHwgRE1BMkRfQ1JfU1RBUlQpKQorICBpZiAoKGhkbWEyZC0+SW5zdGFuY2UtPkNSICYgKERNQTJEX0NSX1NVU1AgfCBETUEyRF9DUl9TVEFSVCkpID09IChETUEyRF9DUl9TVVNQIHwgRE1BMkRfQ1JfU1RBUlQpKQogICB7CiAgICAgLyogT25nb2luZyB0cmFuc2ZlciBpcyBzdXNwZW5kZWQ6IGNoYW5nZSB0aGUgRE1BMkQgc3RhdGUgYmVmb3JlIHJlc3VtaW5nICovCiAgICAgaGRtYTJkLT5TdGF0ZSA9IEhBTF9ETUEyRF9TVEFURV9CVVNZOwpAQCAtOTEwLDcgKzkyMCw3IEBACiAgIC8qIFNUQVJUIGJpdCBpcyByZXNldCB0byBtYWtlIHN1cmUgbm90IHRvIHNldCBpdCBhZ2FpbiwgaW4gdGhlIGV2ZW50IHRoZSBIVyBjbGVhcnMgaXQKICAgICAgYmV0d2VlbiB0aGUgcmVnaXN0ZXIgcmVhZCBhbmQgdGhlIHJlZ2lzdGVyIHdyaXRlIGJ5IHRoZSBDUFUgKHdyaXRpbmcgMCBoYXMgbm8KICAgICAgZWZmZWN0IG9uIFNUQVJUIGJpdHZhbHVlKS4gKi8KLSAgQ0xFQVJfQklUKGhkbWEyZC0+SW5zdGFuY2UtPkNSLCAoRE1BMkRfQ1JfU1VTUHxETUEyRF9DUl9TVEFSVCkpOworICBDTEVBUl9CSVQoaGRtYTJkLT5JbnN0YW5jZS0+Q1IsIChETUEyRF9DUl9TVVNQIHwgRE1BMkRfQ1JfU1RBUlQpKTsKIAogICByZXR1cm4gSEFMX09LOwogfQpAQCAtOTM2LDcgKzk0Niw3IEBACiAgIC8qIENoYW5nZSBETUEyRCBwZXJpcGhlcmFsIHN0YXRlICovCiAgIGhkbWEyZC0+U3RhdGUgPSBIQUxfRE1BMkRfU1RBVEVfQlVTWTsKIAotICBpZihMYXllcklkeCA9PSBETUEyRF9CQUNLR1JPVU5EX0xBWUVSKQorICBpZiAoTGF5ZXJJZHggPT0gRE1BMkRfQkFDS0dST1VORF9MQVlFUikKICAgewogICAgIC8qIEVuYWJsZSB0aGUgYmFja2dyb3VuZCBDTFVUIGxvYWRpbmcgKi8KICAgICBTRVRfQklUKGhkbWEyZC0+SW5zdGFuY2UtPkJHUEZDQ1IsIERNQTJEX0JHUEZDQ1JfU1RBUlQpOwpAQCAtOTc1LDE0ICs5ODUsMTQgQEAKICAgaGRtYTJkLT5TdGF0ZSA9IEhBTF9ETUEyRF9TVEFURV9CVVNZOwogCiAgIC8qIENvbmZpZ3VyZSB0aGUgQ0xVVCBvZiB0aGUgYmFja2dyb3VuZCBETUEyRCBsYXllciAqLwotICBpZihMYXllcklkeCA9PSBETUEyRF9CQUNLR1JPVU5EX0xBWUVSKQorICBpZiAoTGF5ZXJJZHggPT0gRE1BMkRfQkFDS0dST1VORF9MQVlFUikKICAgewogICAgIC8qIFdyaXRlIGJhY2tncm91bmQgQ0xVVCBtZW1vcnkgYWRkcmVzcyAqLwogICAgIFdSSVRFX1JFRyhoZG1hMmQtPkluc3RhbmNlLT5CR0NNQVIsICh1aW50MzJfdClDTFVUQ2ZnLT5wQ0xVVCk7CiAKICAgICAvKiBXcml0ZSBiYWNrZ3JvdW5kIENMVVQgc2l6ZSBhbmQgQ0xVVCBjb2xvciBtb2RlICovCiAgICAgTU9ESUZZX1JFRyhoZG1hMmQtPkluc3RhbmNlLT5CR1BGQ0NSLCAoRE1BMkRfQkdQRkNDUl9DUyB8IERNQTJEX0JHUEZDQ1JfQ0NNKSwKLSAgICAgICAgICAgICgoQ0xVVENmZy0+U2l6ZSA8PCBETUEyRF9CR1BGQ0NSX0NTX1BvcykgfCAoQ0xVVENmZy0+Q0xVVENvbG9yTW9kZSA8PCBETUEyRF9CR1BGQ0NSX0NDTV9Qb3MpKSk7CisgICAgICAgICAgICAgICAoKENMVVRDZmctPlNpemUgPDwgRE1BMkRfQkdQRkNDUl9DU19Qb3MpIHwgKENMVVRDZmctPkNMVVRDb2xvck1vZGUgPDwgRE1BMkRfQkdQRkNDUl9DQ01fUG9zKSkpOwogCiAgICAgLyogRW5hYmxlIHRoZSBDTFVUIGxvYWRpbmcgZm9yIHRoZSBiYWNrZ3JvdW5kICovCiAgICAgU0VUX0JJVChoZG1hMmQtPkluc3RhbmNlLT5CR1BGQ0NSLCBETUEyRF9CR1BGQ0NSX1NUQVJUKTsKQEAgLTk5NSw5ICsxMDA1LDkgQEAKIAogICAgIC8qIFdyaXRlIGZvcmVncm91bmQgQ0xVVCBzaXplIGFuZCBDTFVUIGNvbG9yIG1vZGUgKi8KICAgICBNT0RJRllfUkVHKGhkbWEyZC0+SW5zdGFuY2UtPkZHUEZDQ1IsIChETUEyRF9GR1BGQ0NSX0NTIHwgRE1BMkRfRkdQRkNDUl9DQ00pLAotICAgICAgICAgICAgKChDTFVUQ2ZnLT5TaXplIDw8IERNQTJEX0ZHUEZDQ1JfQ1NfUG9zKSB8IChDTFVUQ2ZnLT5DTFVUQ29sb3JNb2RlIDw8IERNQTJEX0ZHUEZDQ1JfQ0NNX1BvcykpKTsKKyAgICAgICAgICAgICAgICgoQ0xVVENmZy0+U2l6ZSA8PCBETUEyRF9GR1BGQ0NSX0NTX1BvcykgfCAoQ0xVVENmZy0+Q0xVVENvbG9yTW9kZSA8PCBETUEyRF9GR1BGQ0NSX0NDTV9Qb3MpKSk7CiAKLSAvKiBFbmFibGUgdGhlIENMVVQgbG9hZGluZyBmb3IgdGhlIGZvcmVncm91bmQgKi8KKyAgICAvKiBFbmFibGUgdGhlIENMVVQgbG9hZGluZyBmb3IgdGhlIGZvcmVncm91bmQgKi8KICAgICBTRVRfQklUKGhkbWEyZC0+SW5zdGFuY2UtPkZHUEZDQ1IsIERNQTJEX0ZHUEZDQ1JfU1RBUlQpOwogICB9CiAKQEAgLTEwMTUsNyArMTAyNSw4IEBACiAgICogICAgICAgICAgICAgICAgICAgRE1BMkRfQkFDS0dST1VORF9MQVlFUigwKSAvIERNQTJEX0ZPUkVHUk9VTkRfTEFZRVIoMSkKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9ETUEyRF9DTFVUU3RhcnRMb2FkX0lUKERNQTJEX0hhbmRsZVR5cGVEZWYgKmhkbWEyZCwgRE1BMkRfQ0xVVENmZ1R5cGVEZWYgKkNMVVRDZmcsIHVpbnQzMl90IExheWVySWR4KQorSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0RNQTJEX0NMVVRTdGFydExvYWRfSVQoRE1BMkRfSGFuZGxlVHlwZURlZiAqaGRtYTJkLCBETUEyRF9DTFVUQ2ZnVHlwZURlZiAqQ0xVVENmZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IExheWVySWR4KQogewogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfRE1BMkRfTEFZRVIoTGF5ZXJJZHgpKTsKQEAgLTEwMjksMTcgKzEwNDAsMTcgQEAKICAgaGRtYTJkLT5TdGF0ZSA9IEhBTF9ETUEyRF9TVEFURV9CVVNZOwogCiAgIC8qIENvbmZpZ3VyZSB0aGUgQ0xVVCBvZiB0aGUgYmFja2dyb3VuZCBETUEyRCBsYXllciAqLwotICBpZihMYXllcklkeCA9PSBETUEyRF9CQUNLR1JPVU5EX0xBWUVSKQorICBpZiAoTGF5ZXJJZHggPT0gRE1BMkRfQkFDS0dST1VORF9MQVlFUikKICAgewogICAgIC8qIFdyaXRlIGJhY2tncm91bmQgQ0xVVCBtZW1vcnkgYWRkcmVzcyAqLwogICAgIFdSSVRFX1JFRyhoZG1hMmQtPkluc3RhbmNlLT5CR0NNQVIsICh1aW50MzJfdClDTFVUQ2ZnLT5wQ0xVVCk7CiAKICAgICAvKiBXcml0ZSBiYWNrZ3JvdW5kIENMVVQgc2l6ZSBhbmQgQ0xVVCBjb2xvciBtb2RlICovCiAgICAgTU9ESUZZX1JFRyhoZG1hMmQtPkluc3RhbmNlLT5CR1BGQ0NSLCAoRE1BMkRfQkdQRkNDUl9DUyB8IERNQTJEX0JHUEZDQ1JfQ0NNKSwKLSAgICAgICAgICAgICgoQ0xVVENmZy0+U2l6ZSA8PCBETUEyRF9CR1BGQ0NSX0NTX1BvcykgfCAoQ0xVVENmZy0+Q0xVVENvbG9yTW9kZSA8PCBETUEyRF9CR1BGQ0NSX0NDTV9Qb3MpKSk7CisgICAgICAgICAgICAgICAoKENMVVRDZmctPlNpemUgPDwgRE1BMkRfQkdQRkNDUl9DU19Qb3MpIHwgKENMVVRDZmctPkNMVVRDb2xvck1vZGUgPDwgRE1BMkRfQkdQRkNDUl9DQ01fUG9zKSkpOwogCiAgICAgLyogRW5hYmxlIHRoZSBDTFVUIFRyYW5zZmVyIENvbXBsZXRlLCB0cmFuc2ZlciBFcnJvciwgY29uZmlndXJhdGlvbiBFcnJvciBhbmQgQ0xVVCBBY2Nlc3MgRXJyb3IgaW50ZXJydXB0cyAqLwotICAgIF9fSEFMX0RNQTJEX0VOQUJMRV9JVChoZG1hMmQsIERNQTJEX0lUX0NUQyB8IERNQTJEX0lUX1RFIHwgRE1BMkRfSVRfQ0UgfERNQTJEX0lUX0NBRSk7CisgICAgX19IQUxfRE1BMkRfRU5BQkxFX0lUKGhkbWEyZCwgRE1BMkRfSVRfQ1RDIHwgRE1BMkRfSVRfVEUgfCBETUEyRF9JVF9DRSB8IERNQTJEX0lUX0NBRSk7CiAKICAgICAvKiBFbmFibGUgdGhlIENMVVQgbG9hZGluZyBmb3IgdGhlIGJhY2tncm91bmQgKi8KICAgICBTRVRfQklUKGhkbWEyZC0+SW5zdGFuY2UtPkJHUEZDQ1IsIERNQTJEX0JHUEZDQ1JfU1RBUlQpOwpAQCAtMTA1MiwxMCArMTA2MywxMCBAQAogCiAgICAgLyogV3JpdGUgZm9yZWdyb3VuZCBDTFVUIHNpemUgYW5kIENMVVQgY29sb3IgbW9kZSAqLwogICAgIE1PRElGWV9SRUcoaGRtYTJkLT5JbnN0YW5jZS0+RkdQRkNDUiwgKERNQTJEX0ZHUEZDQ1JfQ1MgfCBETUEyRF9GR1BGQ0NSX0NDTSksCi0gICAgICAgICAgICAoKENMVVRDZmctPlNpemUgPDwgRE1BMkRfRkdQRkNDUl9DU19Qb3MpIHwgKENMVVRDZmctPkNMVVRDb2xvck1vZGUgPDwgRE1BMkRfRkdQRkNDUl9DQ01fUG9zKSkpOworICAgICAgICAgICAgICAgKChDTFVUQ2ZnLT5TaXplIDw8IERNQTJEX0ZHUEZDQ1JfQ1NfUG9zKSB8IChDTFVUQ2ZnLT5DTFVUQ29sb3JNb2RlIDw8IERNQTJEX0ZHUEZDQ1JfQ0NNX1BvcykpKTsKIAogICAgIC8qIEVuYWJsZSB0aGUgQ0xVVCBUcmFuc2ZlciBDb21wbGV0ZSwgdHJhbnNmZXIgRXJyb3IsIGNvbmZpZ3VyYXRpb24gRXJyb3IgYW5kIENMVVQgQWNjZXNzIEVycm9yIGludGVycnVwdHMgKi8KLSAgICBfX0hBTF9ETUEyRF9FTkFCTEVfSVQoaGRtYTJkLCBETUEyRF9JVF9DVEMgfCBETUEyRF9JVF9URSB8IERNQTJEX0lUX0NFIHxETUEyRF9JVF9DQUUpOworICAgIF9fSEFMX0RNQTJEX0VOQUJMRV9JVChoZG1hMmQsIERNQTJEX0lUX0NUQyB8IERNQTJEX0lUX1RFIHwgRE1BMkRfSVRfQ0UgfCBETUEyRF9JVF9DQUUpOwogCiAgICAgLyogRW5hYmxlIHRoZSBDTFVUIGxvYWRpbmcgZm9yIHRoZSBmb3JlZ3JvdW5kICovCiAgICAgU0VUX0JJVChoZG1hMmQtPkluc3RhbmNlLT5GR1BGQ0NSLCBETUEyRF9GR1BGQ0NSX1NUQVJUKTsKQEAgLTEwOTIsMTQgKzExMDMsMTQgQEAKICAgaGRtYTJkLT5TdGF0ZSA9IEhBTF9ETUEyRF9TVEFURV9CVVNZOwogCiAgIC8qIENvbmZpZ3VyZSB0aGUgQ0xVVCBvZiB0aGUgYmFja2dyb3VuZCBETUEyRCBsYXllciAqLwotICBpZihMYXllcklkeCA9PSBETUEyRF9CQUNLR1JPVU5EX0xBWUVSKQorICBpZiAoTGF5ZXJJZHggPT0gRE1BMkRfQkFDS0dST1VORF9MQVlFUikKICAgewogICAgIC8qIFdyaXRlIGJhY2tncm91bmQgQ0xVVCBtZW1vcnkgYWRkcmVzcyAqLwogICAgIFdSSVRFX1JFRyhoZG1hMmQtPkluc3RhbmNlLT5CR0NNQVIsICh1aW50MzJfdClDTFVUQ2ZnLnBDTFVUKTsKIAogICAgIC8qIFdyaXRlIGJhY2tncm91bmQgQ0xVVCBzaXplIGFuZCBDTFVUIGNvbG9yIG1vZGUgKi8KICAgICBNT0RJRllfUkVHKGhkbWEyZC0+SW5zdGFuY2UtPkJHUEZDQ1IsIChETUEyRF9CR1BGQ0NSX0NTIHwgRE1BMkRfQkdQRkNDUl9DQ00pLAotICAgICAgICAgICAgKChDTFVUQ2ZnLlNpemUgPDwgRE1BMkRfQkdQRkNDUl9DU19Qb3MpIHwgKENMVVRDZmcuQ0xVVENvbG9yTW9kZSA8PCBETUEyRF9CR1BGQ0NSX0NDTV9Qb3MpKSk7CisgICAgICAgICAgICAgICAoKENMVVRDZmcuU2l6ZSA8PCBETUEyRF9CR1BGQ0NSX0NTX1BvcykgfCAoQ0xVVENmZy5DTFVUQ29sb3JNb2RlIDw8IERNQTJEX0JHUEZDQ1JfQ0NNX1BvcykpKTsKIAogICAgIC8qIEVuYWJsZSB0aGUgQ0xVVCBsb2FkaW5nIGZvciB0aGUgYmFja2dyb3VuZCAqLwogICAgIFNFVF9CSVQoaGRtYTJkLT5JbnN0YW5jZS0+QkdQRkNDUiwgRE1BMkRfQkdQRkNDUl9TVEFSVCk7CkBAIC0xMTEyLDkgKzExMjMsOSBAQAogCiAgICAgLyogV3JpdGUgZm9yZWdyb3VuZCBDTFVUIHNpemUgYW5kIENMVVQgY29sb3IgbW9kZSAqLwogICAgIE1PRElGWV9SRUcoaGRtYTJkLT5JbnN0YW5jZS0+RkdQRkNDUiwgKERNQTJEX0ZHUEZDQ1JfQ1MgfCBETUEyRF9GR1BGQ0NSX0NDTSksCi0gICAgICAgICAgICAoKENMVVRDZmcuU2l6ZSA8PCBETUEyRF9GR1BGQ0NSX0NTX1BvcykgfCAoQ0xVVENmZy5DTFVUQ29sb3JNb2RlIDw8IERNQTJEX0ZHUEZDQ1JfQ0NNX1BvcykpKTsKKyAgICAgICAgICAgICAgICgoQ0xVVENmZy5TaXplIDw8IERNQTJEX0ZHUEZDQ1JfQ1NfUG9zKSB8IChDTFVUQ2ZnLkNMVVRDb2xvck1vZGUgPDwgRE1BMkRfRkdQRkNDUl9DQ01fUG9zKSkpOwogCi0gLyogRW5hYmxlIHRoZSBDTFVUIGxvYWRpbmcgZm9yIHRoZSBmb3JlZ3JvdW5kICovCisgICAgLyogRW5hYmxlIHRoZSBDTFVUIGxvYWRpbmcgZm9yIHRoZSBmb3JlZ3JvdW5kICovCiAgICAgU0VUX0JJVChoZG1hMmQtPkluc3RhbmNlLT5GR1BGQ0NSLCBETUEyRF9GR1BGQ0NSX1NUQVJUKTsKICAgfQogCkBAIC0xMTQ5LDE3ICsxMTYwLDE3IEBACiAgIGhkbWEyZC0+U3RhdGUgPSBIQUxfRE1BMkRfU1RBVEVfQlVTWTsKIAogICAvKiBDb25maWd1cmUgdGhlIENMVVQgb2YgdGhlIGJhY2tncm91bmQgRE1BMkQgbGF5ZXIgKi8KLSAgaWYoTGF5ZXJJZHggPT0gRE1BMkRfQkFDS0dST1VORF9MQVlFUikKKyAgaWYgKExheWVySWR4ID09IERNQTJEX0JBQ0tHUk9VTkRfTEFZRVIpCiAgIHsKICAgICAvKiBXcml0ZSBiYWNrZ3JvdW5kIENMVVQgbWVtb3J5IGFkZHJlc3MgKi8KICAgICBXUklURV9SRUcoaGRtYTJkLT5JbnN0YW5jZS0+QkdDTUFSLCAodWludDMyX3QpQ0xVVENmZy5wQ0xVVCk7CiAKICAgICAvKiBXcml0ZSBiYWNrZ3JvdW5kIENMVVQgc2l6ZSBhbmQgQ0xVVCBjb2xvciBtb2RlICovCiAgICAgTU9ESUZZX1JFRyhoZG1hMmQtPkluc3RhbmNlLT5CR1BGQ0NSLCAoRE1BMkRfQkdQRkNDUl9DUyB8IERNQTJEX0JHUEZDQ1JfQ0NNKSwKLSAgICAgICAgICAgICgoQ0xVVENmZy5TaXplIDw8IERNQTJEX0JHUEZDQ1JfQ1NfUG9zKSB8IChDTFVUQ2ZnLkNMVVRDb2xvck1vZGUgPDwgRE1BMkRfQkdQRkNDUl9DQ01fUG9zKSkpOworICAgICAgICAgICAgICAgKChDTFVUQ2ZnLlNpemUgPDwgRE1BMkRfQkdQRkNDUl9DU19Qb3MpIHwgKENMVVRDZmcuQ0xVVENvbG9yTW9kZSA8PCBETUEyRF9CR1BGQ0NSX0NDTV9Qb3MpKSk7CiAKICAgICAvKiBFbmFibGUgdGhlIENMVVQgVHJhbnNmZXIgQ29tcGxldGUsIHRyYW5zZmVyIEVycm9yLCBjb25maWd1cmF0aW9uIEVycm9yIGFuZCBDTFVUIEFjY2VzcyBFcnJvciBpbnRlcnJ1cHRzICovCi0gICAgX19IQUxfRE1BMkRfRU5BQkxFX0lUKGhkbWEyZCwgRE1BMkRfSVRfQ1RDIHwgRE1BMkRfSVRfVEUgfCBETUEyRF9JVF9DRSB8RE1BMkRfSVRfQ0FFKTsKKyAgICBfX0hBTF9ETUEyRF9FTkFCTEVfSVQoaGRtYTJkLCBETUEyRF9JVF9DVEMgfCBETUEyRF9JVF9URSB8IERNQTJEX0lUX0NFIHwgRE1BMkRfSVRfQ0FFKTsKIAogICAgIC8qIEVuYWJsZSB0aGUgQ0xVVCBsb2FkaW5nIGZvciB0aGUgYmFja2dyb3VuZCAqLwogICAgIFNFVF9CSVQoaGRtYTJkLT5JbnN0YW5jZS0+QkdQRkNDUiwgRE1BMkRfQkdQRkNDUl9TVEFSVCk7CkBAIC0xMTcyLDEwICsxMTgzLDEwIEBACiAKICAgICAvKiBXcml0ZSBmb3JlZ3JvdW5kIENMVVQgc2l6ZSBhbmQgQ0xVVCBjb2xvciBtb2RlICovCiAgICAgTU9ESUZZX1JFRyhoZG1hMmQtPkluc3RhbmNlLT5GR1BGQ0NSLCAoRE1BMkRfRkdQRkNDUl9DUyB8IERNQTJEX0ZHUEZDQ1JfQ0NNKSwKLSAgICAgICAgICAgICgoQ0xVVENmZy5TaXplIDw8IERNQTJEX0ZHUEZDQ1JfQ1NfUG9zKSB8IChDTFVUQ2ZnLkNMVVRDb2xvck1vZGUgPDwgRE1BMkRfRkdQRkNDUl9DQ01fUG9zKSkpOworICAgICAgICAgICAgICAgKChDTFVUQ2ZnLlNpemUgPDwgRE1BMkRfRkdQRkNDUl9DU19Qb3MpIHwgKENMVVRDZmcuQ0xVVENvbG9yTW9kZSA8PCBETUEyRF9GR1BGQ0NSX0NDTV9Qb3MpKSk7CiAKICAgICAvKiBFbmFibGUgdGhlIENMVVQgVHJhbnNmZXIgQ29tcGxldGUsIHRyYW5zZmVyIEVycm9yLCBjb25maWd1cmF0aW9uIEVycm9yIGFuZCBDTFVUIEFjY2VzcyBFcnJvciBpbnRlcnJ1cHRzICovCi0gICAgX19IQUxfRE1BMkRfRU5BQkxFX0lUKGhkbWEyZCwgRE1BMkRfSVRfQ1RDIHwgRE1BMkRfSVRfVEUgfCBETUEyRF9JVF9DRSB8RE1BMkRfSVRfQ0FFKTsKKyAgICBfX0hBTF9ETUEyRF9FTkFCTEVfSVQoaGRtYTJkLCBETUEyRF9JVF9DVEMgfCBETUEyRF9JVF9URSB8IERNQTJEX0lUX0NFIHwgRE1BMkRfSVRfQ0FFKTsKIAogICAgIC8qIEVuYWJsZSB0aGUgQ0xVVCBsb2FkaW5nIGZvciB0aGUgZm9yZWdyb3VuZCAqLwogICAgIFNFVF9CSVQoaGRtYTJkLT5JbnN0YW5jZS0+RkdQRkNDUiwgRE1BMkRfRkdQRkNDUl9TVEFSVCk7CkBAIC0xMTk2LDEzICsxMjA3LDEzIEBACiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfRE1BMkRfQ0xVVExvYWRpbmdfQWJvcnQoRE1BMkRfSGFuZGxlVHlwZURlZiAqaGRtYTJkLCB1aW50MzJfdCBMYXllcklkeCkKIHsKICAgdWludDMyX3QgdGlja3N0YXJ0OwotICBjb25zdCBfX0lPIHVpbnQzMl90ICogcmVnID0gICYoaGRtYTJkLT5JbnN0YW5jZS0+QkdQRkNDUik7IC8qIGJ5IGRlZmF1bHQsIHBvaW50IGF0IGJhY2tncm91bmQgcmVnaXN0ZXIgKi8KKyAgY29uc3QgX19JTyB1aW50MzJfdCAqcmVnID0gICYoaGRtYTJkLT5JbnN0YW5jZS0+QkdQRkNDUik7ICAvKiBieSBkZWZhdWx0LCBwb2ludCBhdCBiYWNrZ3JvdW5kIHJlZ2lzdGVyICovCiAKICAgLyogQWJvcnQgdGhlIENMVVQgbG9hZGluZyAqLwogICBTRVRfQklUKGhkbWEyZC0+SW5zdGFuY2UtPkNSLCBETUEyRF9DUl9BQk9SVCk7CiAKICAgLyogSWYgZm9yZWdyb3VuZCBDTFVUIGxvYWRpbmcgaXMgY29uc2lkZXJlZCwgdXBkYXRlIGxvY2FsIHZhcmlhYmxlcyAqLwotICBpZihMYXllcklkeCA9PSBETUEyRF9GT1JFR1JPVU5EX0xBWUVSKQorICBpZiAoTGF5ZXJJZHggPT0gRE1BMkRfRk9SRUdST1VORF9MQVlFUikKICAgewogICAgIHJlZyAgPSAmKGhkbWEyZC0+SW5zdGFuY2UtPkZHUEZDQ1IpOwogICB9CkBAIC0xMjEyLDkgKzEyMjMsOSBAQAogICB0aWNrc3RhcnQgPSBIQUxfR2V0VGljaygpOwogCiAgIC8qIENoZWNrIGlmIHRoZSBDTFVUIGxvYWRpbmcgaXMgYWJvcnRlZCAqLwotICB3aGlsZSgoKnJlZyAmIERNQTJEX0JHUEZDQ1JfU1RBUlQpICE9IDBVKQorICB3aGlsZSAoKCpyZWcgJiBETUEyRF9CR1BGQ0NSX1NUQVJUKSAhPSAwVSkKICAgewotICAgIGlmKChIQUxfR2V0VGljaygpIC0gdGlja3N0YXJ0ICkgPiBETUEyRF9USU1FT1VUX0FCT1JUKQorICAgIGlmICgoSEFMX0dldFRpY2soKSAtIHRpY2tzdGFydCkgPiBETUEyRF9USU1FT1VUX0FCT1JUKQogICAgIHsKICAgICAgIC8qIFVwZGF0ZSBlcnJvciBjb2RlICovCiAgICAgICBoZG1hMmQtPkVycm9yQ29kZSB8PSBIQUxfRE1BMkRfRVJST1JfVElNRU9VVDsKQEAgLTEyMzAsNyArMTI0MSw3IEBACiAgIH0KIAogICAvKiBEaXNhYmxlIHRoZSBDTFVUIFRyYW5zZmVyIENvbXBsZXRlLCBUcmFuc2ZlciBFcnJvciwgQ29uZmlndXJhdGlvbiBFcnJvciBhbmQgQ0xVVCBBY2Nlc3MgRXJyb3IgaW50ZXJydXB0cyAqLwotICBfX0hBTF9ETUEyRF9ESVNBQkxFX0lUKGhkbWEyZCwgRE1BMkRfSVRfQ1RDIHwgRE1BMkRfSVRfVEUgfCBETUEyRF9JVF9DRSB8RE1BMkRfSVRfQ0FFKTsKKyAgX19IQUxfRE1BMkRfRElTQUJMRV9JVChoZG1hMmQsIERNQTJEX0lUX0NUQyB8IERNQTJEX0lUX1RFIHwgRE1BMkRfSVRfQ0UgfCBETUEyRF9JVF9DQUUpOwogCiAgIC8qIENoYW5nZSB0aGUgRE1BMkQgc3RhdGUqLwogICBoZG1hMmQtPlN0YXRlID0gSEFMX0RNQTJEX1NUQVRFX1JFQURZOwpAQCAtMTI1NCwxMyArMTI2NSwxMyBAQAogewogICB1aW50MzJfdCB0aWNrc3RhcnQ7CiAgIHVpbnQzMl90IGxvYWRzdXNwZW5kZWQ7Ci0gIGNvbnN0IF9fSU8gdWludDMyX3QgKiByZWcgPSAgJihoZG1hMmQtPkluc3RhbmNlLT5CR1BGQ0NSKTsgLyogYnkgZGVmYXVsdCwgcG9pbnQgYXQgYmFja2dyb3VuZCByZWdpc3RlciAqLworICBjb25zdCBfX0lPIHVpbnQzMl90ICpyZWcgPSAgJihoZG1hMmQtPkluc3RhbmNlLT5CR1BGQ0NSKTsgIC8qIGJ5IGRlZmF1bHQsIHBvaW50IGF0IGJhY2tncm91bmQgcmVnaXN0ZXIgKi8KIAogICAvKiBTdXNwZW5kIHRoZSBDTFVUIGxvYWRpbmcgKi8KICAgU0VUX0JJVChoZG1hMmQtPkluc3RhbmNlLT5DUiwgRE1BMkRfQ1JfU1VTUCk7CiAKICAgLyogSWYgZm9yZWdyb3VuZCBDTFVUIGxvYWRpbmcgaXMgY29uc2lkZXJlZCwgdXBkYXRlIGxvY2FsIHZhcmlhYmxlcyAqLwotICBpZihMYXllcklkeCA9PSBETUEyRF9GT1JFR1JPVU5EX0xBWUVSKQorICBpZiAoTGF5ZXJJZHggPT0gRE1BMkRfRk9SRUdST1VORF9MQVlFUikKICAgewogICAgIHJlZyAgPSAmKGhkbWEyZC0+SW5zdGFuY2UtPkZHUEZDQ1IpOwogICB9CkBAIC0xMjY5LDExICsxMjgwLDEzIEBACiAgIHRpY2tzdGFydCA9IEhBTF9HZXRUaWNrKCk7CiAKICAgLyogQ2hlY2sgaWYgdGhlIENMVVQgbG9hZGluZyBpcyBzdXNwZW5kZWQgKi8KLSAgbG9hZHN1c3BlbmRlZCA9ICgoaGRtYTJkLT5JbnN0YW5jZS0+Q1IgJiBETUEyRF9DUl9TVVNQKSA9PSBETUEyRF9DUl9TVVNQKT8gMVVMOiAwVUw7IC8qMXN0IGNvbmRpdGlvbjogU3VzcGVuZCBDaGVjayovCi0gIGxvYWRzdXNwZW5kZWQgfD0gKCgqcmVnICYgRE1BMkRfQkdQRkNDUl9TVEFSVCkgIT0gRE1BMkRfQkdQRkNDUl9TVEFSVCk/IDFVTDogMFVMOyAvKjJuZCBjb25kaXRpb246IE5vdCBTdGFydCBDaGVjayAqLworICAvKiAxc3QgY29uZGl0aW9uOiBTdXNwZW5kIENoZWNrICovCisgIGxvYWRzdXNwZW5kZWQgPSAoKGhkbWEyZC0+SW5zdGFuY2UtPkNSICYgRE1BMkRfQ1JfU1VTUCkgPT0gRE1BMkRfQ1JfU1VTUCkgPyAxVUwgOiAwVUw7CisgIC8qIDJuZCBjb25kaXRpb246IE5vdCBTdGFydCBDaGVjayAqLworICBsb2Fkc3VzcGVuZGVkIHw9ICgoKnJlZyAmIERNQTJEX0JHUEZDQ1JfU1RBUlQpICE9IERNQTJEX0JHUEZDQ1JfU1RBUlQpID8gMVVMIDogMFVMOwogICB3aGlsZSAobG9hZHN1c3BlbmRlZCA9PSAwVUwpCiAgIHsKLSAgICBpZigoSEFMX0dldFRpY2soKSAtIHRpY2tzdGFydCApID4gRE1BMkRfVElNRU9VVF9TVVNQRU5EKQorICAgIGlmICgoSEFMX0dldFRpY2soKSAtIHRpY2tzdGFydCkgPiBETUEyRF9USU1FT1VUX1NVU1BFTkQpCiAgICAgewogICAgICAgLyogVXBkYXRlIGVycm9yIGNvZGUgKi8KICAgICAgIGhkbWEyZC0+RXJyb3JDb2RlIHw9IEhBTF9ETUEyRF9FUlJPUl9USU1FT1VUOwpAQCAtMTI4MywxMSArMTI5NiwxMyBAQAogCiAgICAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CiAgICAgfQotICAgIGxvYWRzdXNwZW5kZWQgPSAoKGhkbWEyZC0+SW5zdGFuY2UtPkNSICYgRE1BMkRfQ1JfU1VTUCkgPT0gRE1BMkRfQ1JfU1VTUCk/IDFVTDogMFVMOyAvKjFzdCBjb25kaXRpb246IFN1c3BlbmQgQ2hlY2sqLwotICAgIGxvYWRzdXNwZW5kZWQgfD0gKCgqcmVnICYgRE1BMkRfQkdQRkNDUl9TVEFSVCkgIT0gRE1BMkRfQkdQRkNDUl9TVEFSVCk/IDFVTDogMFVMOyAvKjJuZCBjb25kaXRpb246IE5vdCBTdGFydCBDaGVjayAqLworICAgIC8qIDFzdCBjb25kaXRpb246IFN1c3BlbmQgQ2hlY2sgKi8KKyAgICBsb2Fkc3VzcGVuZGVkID0gKChoZG1hMmQtPkluc3RhbmNlLT5DUiAmIERNQTJEX0NSX1NVU1ApID09IERNQTJEX0NSX1NVU1ApID8gMVVMIDogMFVMOworICAgIC8qIDJuZCBjb25kaXRpb246IE5vdCBTdGFydCBDaGVjayAqLworICAgIGxvYWRzdXNwZW5kZWQgfD0gKCgqcmVnICYgRE1BMkRfQkdQRkNDUl9TVEFSVCkgIT0gRE1BMkRfQkdQRkNDUl9TVEFSVCkgPyAxVUwgOiAwVUw7CiAgIH0KIAotICAgLyogQ2hlY2sgd2hldGhlciBvciBub3QgYSB0cmFuc2ZlciBpcyBhY3R1YWxseSBzdXNwZW5kZWQgYW5kIGNoYW5nZSB0aGUgRE1BMkQgc3RhdGUgYWNjb3JkaW5nbHkgKi8KKyAgLyogQ2hlY2sgd2hldGhlciBvciBub3QgYSB0cmFuc2ZlciBpcyBhY3R1YWxseSBzdXNwZW5kZWQgYW5kIGNoYW5nZSB0aGUgRE1BMkQgc3RhdGUgYWNjb3JkaW5nbHkgKi8KICAgaWYgKCgqcmVnICYgRE1BMkRfQkdQRkNDUl9TVEFSVCkgIT0gMFUpCiAgIHsKICAgICBoZG1hMmQtPlN0YXRlID0gSEFMX0RNQTJEX1NUQVRFX1NVU1BFTkQ7CkBAIC0xMjk1LDcgKzEzMTAsNyBAQAogICBlbHNlCiAgIHsKICAgICAvKiBNYWtlIHN1cmUgU1VTUCBiaXQgaXMgY2xlYXJlZCBzaW5jZSBpdCBpcyBtZWFuaW5nbGVzcwotICAgICAgIHdoZW4gbm8gdHJhbmZlciBpcyBvbi1nb2luZyAqLworICAgICAgIHdoZW4gbm8gdHJhbnNmZXIgaXMgb24tZ29pbmcgKi8KICAgICBDTEVBUl9CSVQoaGRtYTJkLT5JbnN0YW5jZS0+Q1IsIERNQTJEX0NSX1NVU1ApOwogICB9CiAKQEAgLTEzMTQsMTggKzEzMjksMTggQEAKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9ETUEyRF9DTFVUTG9hZGluZ19SZXN1bWUoRE1BMkRfSGFuZGxlVHlwZURlZiAqaGRtYTJkLCB1aW50MzJfdCBMYXllcklkeCkKIHsKICAgLyogQ2hlY2sgdGhlIFNVU1AgYW5kIFNUQVJUIGJpdHMgZm9yIGJhY2tncm91bmQgb3IgZm9yZWdyb3VuZCBDTFVUIGxvYWRpbmcgKi8KLSAgaWYoTGF5ZXJJZHggPT0gRE1BMkRfQkFDS0dST1VORF9MQVlFUikKKyAgaWYgKExheWVySWR4ID09IERNQTJEX0JBQ0tHUk9VTkRfTEFZRVIpCiAgIHsKICAgICAvKiBCYWNrZ3JvdW5kIENMVVQgbG9hZGluZyBzdXNwZW5zaW9uIGNoZWNrICovCiAgICAgaWYgKChoZG1hMmQtPkluc3RhbmNlLT5DUiAmIERNQTJEX0NSX1NVU1ApID09IERNQTJEX0NSX1NVU1ApCiAgICAgewotICAgICAgaWYoKGhkbWEyZC0+SW5zdGFuY2UtPkJHUEZDQ1IgJiBETUEyRF9CR1BGQ0NSX1NUQVJUKSA9PSBETUEyRF9CR1BGQ0NSX1NUQVJUKQorICAgICAgaWYgKChoZG1hMmQtPkluc3RhbmNlLT5CR1BGQ0NSICYgRE1BMkRfQkdQRkNDUl9TVEFSVCkgPT0gRE1BMkRfQkdQRkNDUl9TVEFSVCkKICAgICAgIHsKLSAgICAgIC8qIE9uZ29pbmcgQ0xVVCBsb2FkaW5nIGlzIHN1c3BlbmRlZDogY2hhbmdlIHRoZSBETUEyRCBzdGF0ZSBiZWZvcmUgcmVzdW1pbmcgKi8KLSAgICAgIGhkbWEyZC0+U3RhdGUgPSBIQUxfRE1BMkRfU1RBVEVfQlVTWTsKKyAgICAgICAgLyogT25nb2luZyBDTFVUIGxvYWRpbmcgaXMgc3VzcGVuZGVkOiBjaGFuZ2UgdGhlIERNQTJEIHN0YXRlIGJlZm9yZSByZXN1bWluZyAqLworICAgICAgICBoZG1hMmQtPlN0YXRlID0gSEFMX0RNQTJEX1NUQVRFX0JVU1k7CisgICAgICB9CiAgICAgfQogICB9Ci0gIH0KICAgZWxzZQogICB7CiAgICAgLyogRm9yZWdyb3VuZCBDTFVUIGxvYWRpbmcgc3VzcGVuc2lvbiBjaGVjayAqLwpAQCAtMTMzMywxMSArMTM0OCwxMSBAQAogICAgIHsKICAgICAgIGlmICgoaGRtYTJkLT5JbnN0YW5jZS0+RkdQRkNDUiAmIERNQTJEX0ZHUEZDQ1JfU1RBUlQpID09IERNQTJEX0ZHUEZDQ1JfU1RBUlQpCiAgICAgICB7Ci0gICAgICAvKiBPbmdvaW5nIENMVVQgbG9hZGluZyBpcyBzdXNwZW5kZWQ6IGNoYW5nZSB0aGUgRE1BMkQgc3RhdGUgYmVmb3JlIHJlc3VtaW5nICovCi0gICAgICBoZG1hMmQtPlN0YXRlID0gSEFMX0RNQTJEX1NUQVRFX0JVU1k7CisgICAgICAgIC8qIE9uZ29pbmcgQ0xVVCBsb2FkaW5nIGlzIHN1c3BlbmRlZDogY2hhbmdlIHRoZSBETUEyRCBzdGF0ZSBiZWZvcmUgcmVzdW1pbmcgKi8KKyAgICAgICAgaGRtYTJkLT5TdGF0ZSA9IEhBTF9ETUEyRF9TVEFURV9CVVNZOworICAgICAgfQogICAgIH0KICAgfQotICB9CiAKICAgLyogUmVzdW1lIHRoZSBDTFVUIGxvYWRpbmcgKi8KICAgQ0xFQVJfQklUKGhkbWEyZC0+SW5zdGFuY2UtPkNSLCBETUEyRF9DUl9TVVNQKTsKQEAgLTEzNjEsMTUgKzEzNzYsMTUgQEAKICAgX19JTyB1aW50MzJfdCBpc3JmbGFncyA9IDB4MFU7CiAKICAgLyogUG9sbGluZyBmb3IgRE1BMkQgdHJhbnNmZXIgKi8KLSAgaWYoKGhkbWEyZC0+SW5zdGFuY2UtPkNSICYgRE1BMkRfQ1JfU1RBUlQpICE9IDBVKQorICBpZiAoKGhkbWEyZC0+SW5zdGFuY2UtPkNSICYgRE1BMkRfQ1JfU1RBUlQpICE9IDBVKQogICB7Ci0gICAvKiBHZXQgdGljayAqLwotICAgdGlja3N0YXJ0ID0gSEFMX0dldFRpY2soKTsKKyAgICAvKiBHZXQgdGljayAqLworICAgIHRpY2tzdGFydCA9IEhBTF9HZXRUaWNrKCk7CiAKLSAgICB3aGlsZShfX0hBTF9ETUEyRF9HRVRfRkxBRyhoZG1hMmQsIERNQTJEX0ZMQUdfVEMpID09IDBVKQorICAgIHdoaWxlIChfX0hBTF9ETUEyRF9HRVRfRkxBRyhoZG1hMmQsIERNQTJEX0ZMQUdfVEMpID09IDBVKQogICAgIHsKICAgICAgIGlzcmZsYWdzID0gUkVBRF9SRUcoaGRtYTJkLT5JbnN0YW5jZS0+SVNSKTsKLSAgICAgIGlmICgoaXNyZmxhZ3MgJiAoRE1BMkRfRkxBR19DRXxETUEyRF9GTEFHX1RFKSkgIT0gMFUpCisgICAgICBpZiAoKGlzcmZsYWdzICYgKERNQTJEX0ZMQUdfQ0UgfCBETUEyRF9GTEFHX1RFKSkgIT0gMFUpCiAgICAgICB7CiAgICAgICAgIGlmICgoaXNyZmxhZ3MgJiBETUEyRF9GTEFHX0NFKSAhPSAwVSkKICAgICAgICAgewpAQCAtMTM5MSw5ICsxNDA2LDkgQEAKICAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICAgIH0KICAgICAgIC8qIENoZWNrIGZvciB0aGUgVGltZW91dCAqLwotICAgICAgaWYoVGltZW91dCAhPSBIQUxfTUFYX0RFTEFZKQorICAgICAgaWYgKFRpbWVvdXQgIT0gSEFMX01BWF9ERUxBWSkKICAgICAgIHsKLSAgICAgICAgaWYoKChIQUxfR2V0VGljaygpIC0gdGlja3N0YXJ0ICkgPiBUaW1lb3V0KXx8KFRpbWVvdXQgPT0gMFUpKQorICAgICAgICBpZiAoKChIQUxfR2V0VGljaygpIC0gdGlja3N0YXJ0KSA+IFRpbWVvdXQpIHx8IChUaW1lb3V0ID09IDBVKSkKICAgICAgICAgewogICAgICAgICAgIC8qIFVwZGF0ZSBlcnJvciBjb2RlICovCiAgICAgICAgICAgaGRtYTJkLT5FcnJvckNvZGUgfD0gSEFMX0RNQTJEX0VSUk9SX1RJTUVPVVQ7CkBAIC0xNDE3LDEwICsxNDMyLDEwIEBACiAgICAgLyogR2V0IHRpY2sgKi8KICAgICB0aWNrc3RhcnQgPSBIQUxfR2V0VGljaygpOwogCi0gICAgd2hpbGUoX19IQUxfRE1BMkRfR0VUX0ZMQUcoaGRtYTJkLCBETUEyRF9GTEFHX0NUQykgPT0gMFUpCisgICAgd2hpbGUgKF9fSEFMX0RNQTJEX0dFVF9GTEFHKGhkbWEyZCwgRE1BMkRfRkxBR19DVEMpID09IDBVKQogICAgIHsKICAgICAgIGlzcmZsYWdzID0gUkVBRF9SRUcoaGRtYTJkLT5JbnN0YW5jZS0+SVNSKTsKLSAgICAgIGlmICgoaXNyZmxhZ3MgJiAoRE1BMkRfRkxBR19DQUV8RE1BMkRfRkxBR19DRXxETUEyRF9GTEFHX1RFKSkgIT0gMFUpCisgICAgICBpZiAoKGlzcmZsYWdzICYgKERNQTJEX0ZMQUdfQ0FFIHwgRE1BMkRfRkxBR19DRSB8IERNQTJEX0ZMQUdfVEUpKSAhPSAwVSkKICAgICAgIHsKICAgICAgICAgaWYgKChpc3JmbGFncyAmIERNQTJEX0ZMQUdfQ0FFKSAhPSAwVSkKICAgICAgICAgewpAQCAtMTQzOCw3ICsxNDUzLDcgQEAKICAgICAgICAgX19IQUxfRE1BMkRfQ0xFQVJfRkxBRyhoZG1hMmQsIERNQTJEX0ZMQUdfQ0FFIHwgRE1BMkRfRkxBR19DRSB8IERNQTJEX0ZMQUdfVEUpOwogCiAgICAgICAgIC8qIENoYW5nZSBETUEyRCBzdGF0ZSAqLwotICAgICAgICBoZG1hMmQtPlN0YXRlPSBIQUxfRE1BMkRfU1RBVEVfRVJST1I7CisgICAgICAgIGhkbWEyZC0+U3RhdGUgPSBIQUxfRE1BMkRfU1RBVEVfRVJST1I7CiAKICAgICAgICAgLyogUHJvY2VzcyB1bmxvY2tlZCAqLwogICAgICAgICBfX0hBTF9VTkxPQ0soaGRtYTJkKTsKQEAgLTE0NDYsMTUgKzE0NjEsMTUgQEAKICAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICAgIH0KICAgICAgIC8qIENoZWNrIGZvciB0aGUgVGltZW91dCAqLwotICAgICAgaWYoVGltZW91dCAhPSBIQUxfTUFYX0RFTEFZKQorICAgICAgaWYgKFRpbWVvdXQgIT0gSEFMX01BWF9ERUxBWSkKICAgICAgIHsKLSAgICAgICAgaWYoKChIQUxfR2V0VGljaygpIC0gdGlja3N0YXJ0ICkgPiBUaW1lb3V0KXx8KFRpbWVvdXQgPT0gMFUpKQorICAgICAgICBpZiAoKChIQUxfR2V0VGljaygpIC0gdGlja3N0YXJ0KSA+IFRpbWVvdXQpIHx8IChUaW1lb3V0ID09IDBVKSkKICAgICAgICAgewogICAgICAgICAgIC8qIFVwZGF0ZSBlcnJvciBjb2RlICovCiAgICAgICAgICAgaGRtYTJkLT5FcnJvckNvZGUgfD0gSEFMX0RNQTJEX0VSUk9SX1RJTUVPVVQ7CiAKICAgICAgICAgICAvKiBDaGFuZ2UgdGhlIERNQTJEIHN0YXRlICovCi0gICAgICAgICAgaGRtYTJkLT5TdGF0ZT0gSEFMX0RNQTJEX1NUQVRFX1RJTUVPVVQ7CisgICAgICAgICAgaGRtYTJkLT5TdGF0ZSA9IEhBTF9ETUEyRF9TVEFURV9USU1FT1VUOwogCiAgICAgICAgICAgLyogUHJvY2VzcyB1bmxvY2tlZCAqLwogICAgICAgICAgIF9fSEFMX1VOTE9DSyhoZG1hMmQpOwpAQCAtMTQ2Niw3ICsxNDgxLDcgQEAKICAgfQogCiAgIC8qIENsZWFyIHRoZSB0cmFuc2ZlciBjb21wbGV0ZSBhbmQgQ0xVVCBsb2FkaW5nIGZsYWdzICovCi0gIF9fSEFMX0RNQTJEX0NMRUFSX0ZMQUcoaGRtYTJkLCBETUEyRF9GTEFHX1RDfERNQTJEX0ZMQUdfQ1RDKTsKKyAgX19IQUxfRE1BMkRfQ0xFQVJfRkxBRyhoZG1hMmQsIERNQTJEX0ZMQUdfVEMgfCBETUEyRF9GTEFHX0NUQyk7CiAKICAgLyogQ2hhbmdlIERNQTJEIHN0YXRlICovCiAgIGhkbWEyZC0+U3RhdGUgPSBIQUxfRE1BMkRfU1RBVEVfUkVBRFk7CkBAIC0xNTA3LDcgKzE1MjIsNyBAQAogICAgICAgLyogUHJvY2VzcyBVbmxvY2tlZCAqLwogICAgICAgX19IQUxfVU5MT0NLKGhkbWEyZCk7CiAKLSAgICAgIGlmKGhkbWEyZC0+WGZlckVycm9yQ2FsbGJhY2sgIT0gTlVMTCkKKyAgICAgIGlmIChoZG1hMmQtPlhmZXJFcnJvckNhbGxiYWNrICE9IE5VTEwpCiAgICAgICB7CiAgICAgICAgIC8qIFRyYW5zZmVyIGVycm9yIENhbGxiYWNrICovCiAgICAgICAgIGhkbWEyZC0+WGZlckVycm9yQ2FsbGJhY2soaGRtYTJkKTsKQEAgLTE1MzQsNyArMTU0OSw3IEBACiAgICAgICAvKiBQcm9jZXNzIFVubG9ja2VkICovCiAgICAgICBfX0hBTF9VTkxPQ0soaGRtYTJkKTsKIAotICAgICAgaWYoaGRtYTJkLT5YZmVyRXJyb3JDYWxsYmFjayAhPSBOVUxMKQorICAgICAgaWYgKGhkbWEyZC0+WGZlckVycm9yQ2FsbGJhY2sgIT0gTlVMTCkKICAgICAgIHsKICAgICAgICAgLyogVHJhbnNmZXIgZXJyb3IgQ2FsbGJhY2sgKi8KICAgICAgICAgaGRtYTJkLT5YZmVyRXJyb3JDYWxsYmFjayhoZG1hMmQpOwpAQCAtMTU2MSw3ICsxNTc2LDcgQEAKICAgICAgIC8qIFByb2Nlc3MgVW5sb2NrZWQgKi8KICAgICAgIF9fSEFMX1VOTE9DSyhoZG1hMmQpOwogCi0gICAgICBpZihoZG1hMmQtPlhmZXJFcnJvckNhbGxiYWNrICE9IE5VTEwpCisgICAgICBpZiAoaGRtYTJkLT5YZmVyRXJyb3JDYWxsYmFjayAhPSBOVUxMKQogICAgICAgewogICAgICAgICAvKiBUcmFuc2ZlciBlcnJvciBDYWxsYmFjayAqLwogICAgICAgICBoZG1hMmQtPlhmZXJFcnJvckNhbGxiYWNrKGhkbWEyZCk7CkBAIC0xNjA4LDcgKzE2MjMsNyBAQAogICAgICAgLyogUHJvY2VzcyBVbmxvY2tlZCAqLwogICAgICAgX19IQUxfVU5MT0NLKGhkbWEyZCk7CiAKLSAgICAgIGlmKGhkbWEyZC0+WGZlckNwbHRDYWxsYmFjayAhPSBOVUxMKQorICAgICAgaWYgKGhkbWEyZC0+WGZlckNwbHRDYWxsYmFjayAhPSBOVUxMKQogICAgICAgewogICAgICAgICAvKiBUcmFuc2ZlciBjb21wbGV0ZSBDYWxsYmFjayAqLwogICAgICAgICBoZG1hMmQtPlhmZXJDcGx0Q2FsbGJhY2soaGRtYTJkKTsKQEAgLTE2ODMsOCArMTY5OCw4IEBACiAgICovCiAKIC8qKiBAZGVmZ3JvdXAgRE1BMkRfRXhwb3J0ZWRfRnVuY3Rpb25zX0dyb3VwMyBQZXJpcGhlcmFsIENvbnRyb2wgZnVuY3Rpb25zCi0gKiAgQGJyaWVmICAgIFBlcmlwaGVyYWwgQ29udHJvbCBmdW5jdGlvbnMKLSAqCisgICogIEBicmllZiAgICBQZXJpcGhlcmFsIENvbnRyb2wgZnVuY3Rpb25zCisgICoKIEB2ZXJiYXRpbQogID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgICAgICAgICAgICAgICAgIyMjIyMgUGVyaXBoZXJhbCBDb250cm9sIGZ1bmN0aW9ucyAjIyMjIwpAQCAtMTcxNCwxNSArMTcyOSwxNiBAQAogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0RNQTJEX0NvbmZpZ0xheWVyKERNQTJEX0hhbmRsZVR5cGVEZWYgKmhkbWEyZCwgdWludDMyX3QgTGF5ZXJJZHgpCiB7CiAgIERNQTJEX0xheWVyQ2ZnVHlwZURlZiAqcExheWVyQ2ZnOwotICB1aW50MzJfdCByZWdNYXNrLCByZWdWYWx1ZTsKKyAgdWludDMyX3QgcmVnTWFzazsKKyAgdWludDMyX3QgcmVnVmFsdWU7CiAKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KICAgYXNzZXJ0X3BhcmFtKElTX0RNQTJEX0xBWUVSKExheWVySWR4KSk7CiAgIGFzc2VydF9wYXJhbShJU19ETUEyRF9PRkZTRVQoaGRtYTJkLT5MYXllckNmZ1tMYXllcklkeF0uSW5wdXRPZmZzZXQpKTsKLSAgaWYoaGRtYTJkLT5Jbml0Lk1vZGUgIT0gRE1BMkRfUjJNKQorICBpZiAoaGRtYTJkLT5Jbml0Lk1vZGUgIT0gRE1BMkRfUjJNKQogICB7CiAgICAgYXNzZXJ0X3BhcmFtKElTX0RNQTJEX0lOUFVUX0NPTE9SX01PREUoaGRtYTJkLT5MYXllckNmZ1tMYXllcklkeF0uSW5wdXRDb2xvck1vZGUpKTsKLSAgICBpZihoZG1hMmQtPkluaXQuTW9kZSAhPSBETUEyRF9NMk0pCisgICAgaWYgKGhkbWEyZC0+SW5pdC5Nb2RlICE9IERNQTJEX00yTSkKICAgICB7CiAgICAgICBhc3NlcnRfcGFyYW0oSVNfRE1BMkRfQUxQSEFfTU9ERShoZG1hMmQtPkxheWVyQ2ZnW0xheWVySWR4XS5BbHBoYU1vZGUpKTsKICAgICB9CkBAIC0xNzQ3LDExICsxNzYzLDExIEBACiAgIH0KICAgZWxzZQogICB7Ci0gICAgcmVnVmFsdWUgfD0gIChwTGF5ZXJDZmctPklucHV0QWxwaGEgPDwgRE1BMkRfQkdQRkNDUl9BTFBIQV9Qb3MpOworICAgIHJlZ1ZhbHVlIHw9IChwTGF5ZXJDZmctPklucHV0QWxwaGEgPDwgRE1BMkRfQkdQRkNDUl9BTFBIQV9Qb3MpOwogICB9CiAKICAgLyogQ29uZmlndXJlIHRoZSBiYWNrZ3JvdW5kIERNQTJEIGxheWVyICovCi0gIGlmKExheWVySWR4ID09IERNQTJEX0JBQ0tHUk9VTkRfTEFZRVIpCisgIGlmIChMYXllcklkeCA9PSBETUEyRF9CQUNLR1JPVU5EX0xBWUVSKQogICB7CiAgICAgLyogV3JpdGUgRE1BMkQgQkdQRkNDUiByZWdpc3RlciAqLwogICAgIE1PRElGWV9SRUcoaGRtYTJkLT5JbnN0YW5jZS0+QkdQRkNDUiwgcmVnTWFzaywgcmVnVmFsdWUpOwpAQCAtMTc2Miw3ICsxNzc4LDggQEAKICAgICAvKiBETUEyRCBCR0NPTFIgcmVnaXN0ZXIgY29uZmlndXJhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICAgICBpZiAoKHBMYXllckNmZy0+SW5wdXRDb2xvck1vZGUgPT0gRE1BMkRfSU5QVVRfQTQpIHx8IChwTGF5ZXJDZmctPklucHV0Q29sb3JNb2RlID09IERNQTJEX0lOUFVUX0E4KSkKICAgICB7Ci0gICAgICBXUklURV9SRUcoaGRtYTJkLT5JbnN0YW5jZS0+QkdDT0xSLCBwTGF5ZXJDZmctPklucHV0QWxwaGEgJiAoRE1BMkRfQkdDT0xSX0JMVUV8RE1BMkRfQkdDT0xSX0dSRUVOfERNQTJEX0JHQ09MUl9SRUQpKTsKKyAgICAgIFdSSVRFX1JFRyhoZG1hMmQtPkluc3RhbmNlLT5CR0NPTFIsIHBMYXllckNmZy0+SW5wdXRBbHBoYSAmIChETUEyRF9CR0NPTFJfQkxVRSB8IERNQTJEX0JHQ09MUl9HUkVFTiB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBETUEyRF9CR0NPTFJfUkVEKSk7CiAgICAgfQogICB9CiAgIC8qIENvbmZpZ3VyZSB0aGUgZm9yZWdyb3VuZCBETUEyRCBsYXllciAqLwpAQCAtMTc3MCw3ICsxNzg3LDcgQEAKICAgewogCiAKLSAgICAgLyogV3JpdGUgRE1BMkQgRkdQRkNDUiByZWdpc3RlciAqLworICAgIC8qIFdyaXRlIERNQTJEIEZHUEZDQ1IgcmVnaXN0ZXIgKi8KICAgICBNT0RJRllfUkVHKGhkbWEyZC0+SW5zdGFuY2UtPkZHUEZDQ1IsIHJlZ01hc2ssIHJlZ1ZhbHVlKTsKIAogICAgIC8qIERNQTJEIEZHT1IgcmVnaXN0ZXIgY29uZmlndXJhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTE3NzksNyArMTc5Niw4IEBACiAgICAgLyogRE1BMkQgRkdDT0xSIHJlZ2lzdGVyIGNvbmZpZ3VyYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgICAgaWYgKChwTGF5ZXJDZmctPklucHV0Q29sb3JNb2RlID09IERNQTJEX0lOUFVUX0E0KSB8fCAocExheWVyQ2ZnLT5JbnB1dENvbG9yTW9kZSA9PSBETUEyRF9JTlBVVF9BOCkpCiAgICAgewotICAgICAgV1JJVEVfUkVHKGhkbWEyZC0+SW5zdGFuY2UtPkZHQ09MUiwgcExheWVyQ2ZnLT5JbnB1dEFscGhhICYgKERNQTJEX0ZHQ09MUl9CTFVFfERNQTJEX0ZHQ09MUl9HUkVFTnxETUEyRF9GR0NPTFJfUkVEKSk7CisgICAgICBXUklURV9SRUcoaGRtYTJkLT5JbnN0YW5jZS0+RkdDT0xSLCBwTGF5ZXJDZmctPklucHV0QWxwaGEgJiAoRE1BMkRfRkdDT0xSX0JMVUUgfCBETUEyRF9GR0NPTFJfR1JFRU4gfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRE1BMkRfRkdDT0xSX1JFRCkpOwogICAgIH0KICAgfQogICAvKiBJbml0aWFsaXplIHRoZSBETUEyRCBzdGF0ZSovCkBAIC0xODE5LDI0ICsxODM3LDI0IEBACiAgIGhkbWEyZC0+U3RhdGUgPSBIQUxfRE1BMkRfU1RBVEVfQlVTWTsKIAogICAvKiBDb25maWd1cmUgdGhlIENMVVQgb2YgdGhlIGJhY2tncm91bmQgRE1BMkQgbGF5ZXIgKi8KLSAgaWYoTGF5ZXJJZHggPT0gRE1BMkRfQkFDS0dST1VORF9MQVlFUikKKyAgaWYgKExheWVySWR4ID09IERNQTJEX0JBQ0tHUk9VTkRfTEFZRVIpCiAgIHsKICAgICAvKiBXcml0ZSBiYWNrZ3JvdW5kIENMVVQgbWVtb3J5IGFkZHJlc3MgKi8KICAgICBXUklURV9SRUcoaGRtYTJkLT5JbnN0YW5jZS0+QkdDTUFSLCAodWludDMyX3QpQ0xVVENmZy5wQ0xVVCk7CiAKICAgICAvKiBXcml0ZSBiYWNrZ3JvdW5kIENMVVQgc2l6ZSBhbmQgQ0xVVCBjb2xvciBtb2RlICovCiAgICAgTU9ESUZZX1JFRyhoZG1hMmQtPkluc3RhbmNlLT5CR1BGQ0NSLCAoRE1BMkRfQkdQRkNDUl9DUyB8IERNQTJEX0JHUEZDQ1JfQ0NNKSwKLSAgICAgICAgICAgICgoQ0xVVENmZy5TaXplIDw8IERNQTJEX0JHUEZDQ1JfQ1NfUG9zKSB8IChDTFVUQ2ZnLkNMVVRDb2xvck1vZGUgPDwgRE1BMkRfQkdQRkNDUl9DQ01fUG9zKSkpOwotIH0KLSAvKiBDb25maWd1cmUgdGhlIENMVVQgb2YgdGhlIGZvcmVncm91bmQgRE1BMkQgbGF5ZXIgKi8KLSBlbHNlCi0gewotICAgLyogV3JpdGUgZm9yZWdyb3VuZCBDTFVUIG1lbW9yeSBhZGRyZXNzICovCisgICAgICAgICAgICAgICAoKENMVVRDZmcuU2l6ZSA8PCBETUEyRF9CR1BGQ0NSX0NTX1BvcykgfCAoQ0xVVENmZy5DTFVUQ29sb3JNb2RlIDw8IERNQTJEX0JHUEZDQ1JfQ0NNX1BvcykpKTsKKyAgfQorICAvKiBDb25maWd1cmUgdGhlIENMVVQgb2YgdGhlIGZvcmVncm91bmQgRE1BMkQgbGF5ZXIgKi8KKyAgZWxzZQorICB7CisgICAgLyogV3JpdGUgZm9yZWdyb3VuZCBDTFVUIG1lbW9yeSBhZGRyZXNzICovCiAgICAgV1JJVEVfUkVHKGhkbWEyZC0+SW5zdGFuY2UtPkZHQ01BUiwgKHVpbnQzMl90KUNMVVRDZmcucENMVVQpOwogCiAgICAgLyogV3JpdGUgZm9yZWdyb3VuZCBDTFVUIHNpemUgYW5kIENMVVQgY29sb3IgbW9kZSAqLwogICAgIE1PRElGWV9SRUcoaGRtYTJkLT5JbnN0YW5jZS0+RkdQRkNDUiwgKERNQTJEX0ZHUEZDQ1JfQ1MgfCBETUEyRF9GR1BGQ0NSX0NDTSksCi0gICAgICAgICAgICAoKENMVVRDZmcuU2l6ZSA8PCBETUEyRF9GR1BGQ0NSX0NTX1BvcykgfCAoQ0xVVENmZy5DTFVUQ29sb3JNb2RlIDw8IERNQTJEX0ZHUEZDQ1JfQ0NNX1BvcykpKTsKKyAgICAgICAgICAgICAgICgoQ0xVVENmZy5TaXplIDw8IERNQTJEX0ZHUEZDQ1JfQ1NfUG9zKSB8IChDTFVUQ2ZnLkNMVVRDb2xvck1vZGUgPDwgRE1BMkRfRkdQRkNDUl9DQ01fUG9zKSkpOwogICB9CiAKICAgLyogU2V0IHRoZSBETUEyRCBzdGF0ZSB0byBSZWFkeSovCkBAIC0xODYyLDggKzE4ODAsNiBAQAogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0RNQTJEX1Byb2dyYW1MaW5lRXZlbnQoRE1BMkRfSGFuZGxlVHlwZURlZiAqaGRtYTJkLCB1aW50MzJfdCBMaW5lKQogewogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwotICBhc3NlcnRfcGFyYW0oSVNfRE1BMkRfTElORVdBVEVSTUFSSyhMaW5lKSk7Ci0KICAgaWYgKExpbmUgPiBETUEyRF9MV1JfTFcpCiAgIHsKICAgICByZXR1cm4gSEFMX0VSUk9SOwpAQCAtMTk3MCw4ICsxOTg2LDggQEAKIAogCiAvKiogQGRlZmdyb3VwIERNQTJEX0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDQgUGVyaXBoZXJhbCBTdGF0ZSBhbmQgRXJyb3IgZnVuY3Rpb25zCi0gKiAgQGJyaWVmICAgIFBlcmlwaGVyYWwgU3RhdGUgZnVuY3Rpb25zCi0gKgorICAqICBAYnJpZWYgICAgUGVyaXBoZXJhbCBTdGF0ZSBmdW5jdGlvbnMKKyAgKgogQHZlcmJhdGltCiAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAgICAgICAgICAgICAgIyMjIyMgUGVyaXBoZXJhbCBTdGF0ZSBhbmQgRXJyb3JzIGZ1bmN0aW9ucyAjIyMjIwpAQCAtMjAzMCw3ICsyMDQ2LDggQEAKICAgKiBAcGFyYW0gIEhlaWdodCAgICAgVGhlIGhlaWdodCBvZiBkYXRhIHRvIGJlIHRyYW5zZmVycmVkIGZyb20gc291cmNlIHRvIGRlc3RpbmF0aW9uLgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwotc3RhdGljIHZvaWQgRE1BMkRfU2V0Q29uZmlnKERNQTJEX0hhbmRsZVR5cGVEZWYgKmhkbWEyZCwgdWludDMyX3QgcGRhdGEsIHVpbnQzMl90IERzdEFkZHJlc3MsIHVpbnQzMl90IFdpZHRoLCB1aW50MzJfdCBIZWlnaHQpCitzdGF0aWMgdm9pZCBETUEyRF9TZXRDb25maWcoRE1BMkRfSGFuZGxlVHlwZURlZiAqaGRtYTJkLCB1aW50MzJfdCBwZGF0YSwgdWludDMyX3QgRHN0QWRkcmVzcywgdWludDMyX3QgV2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgSGVpZ2h0KQogewogICB1aW50MzJfdCB0bXA7CiAgIHVpbnQzMl90IHRtcDE7CkBAIC0yMDM5LDcgKzIwNTYsNyBAQAogICB1aW50MzJfdCB0bXA0OwogCiAgIC8qIENvbmZpZ3VyZSBETUEyRCBkYXRhIHNpemUgKi8KLSAgTU9ESUZZX1JFRyhoZG1hMmQtPkluc3RhbmNlLT5OTFIsIChETUEyRF9OTFJfTkx8RE1BMkRfTkxSX1BMKSwgKEhlaWdodHwgKFdpZHRoIDw8IERNQTJEX05MUl9QTF9Qb3MpKSk7CisgIE1PRElGWV9SRUcoaGRtYTJkLT5JbnN0YW5jZS0+TkxSLCAoRE1BMkRfTkxSX05MIHwgRE1BMkRfTkxSX1BMKSwgKEhlaWdodCB8IChXaWR0aCA8PCBETUEyRF9OTFJfUExfUG9zKSkpOwogCiAgIC8qIENvbmZpZ3VyZSBETUEyRCBkZXN0aW5hdGlvbiBhZGRyZXNzICovCiAgIFdSSVRFX1JFRyhoZG1hMmQtPkluc3RhbmNlLT5PTUFSLCBEc3RBZGRyZXNzKTsKQEAgLTIwNTUsNyArMjA3Miw3IEBACiAgICAgLyogUHJlcGFyZSB0aGUgdmFsdWUgdG8gYmUgd3JpdHRlbiB0byB0aGUgT0NPTFIgcmVnaXN0ZXIgYWNjb3JkaW5nIHRvIHRoZSBjb2xvciBtb2RlICovCiAgICAgaWYgKGhkbWEyZC0+SW5pdC5Db2xvck1vZGUgPT0gRE1BMkRfT1VUUFVUX0FSR0I4ODg4KQogICAgIHsKLSAgICAgIHRtcCA9ICh0bXAzIHwgdG1wMiB8IHRtcDF8IHRtcDQpOworICAgICAgdG1wID0gKHRtcDMgfCB0bXAyIHwgdG1wMSB8IHRtcDQpOwogICAgIH0KICAgICBlbHNlIGlmIChoZG1hMmQtPkluaXQuQ29sb3JNb2RlID09IERNQTJEX09VVFBVVF9SR0I4ODgpCiAgICAgewpAQCAtMjA2NSw3ICsyMDgyLDcgQEAKICAgICB7CiAgICAgICB0bXAyID0gKHRtcDIgPj4gMTlVKTsKICAgICAgIHRtcDMgPSAodG1wMyA+PiAxMFUpOwotICAgICAgdG1wNCA9ICh0bXA0ID4+IDNVICk7CisgICAgICB0bXA0ID0gKHRtcDQgPj4gM1UpOwogICAgICAgdG1wICA9ICgodG1wMyA8PCA1VSkgfCAodG1wMiA8PCAxMVUpIHwgdG1wNCk7CiAgICAgfQogICAgIGVsc2UgaWYgKGhkbWEyZC0+SW5pdC5Db2xvck1vZGUgPT0gRE1BMkRfT1VUUFVUX0FSR0IxNTU1KQpAQCAtMjA3Myw3ICsyMDkwLDcgQEAKICAgICAgIHRtcDEgPSAodG1wMSA+PiAzMVUpOwogICAgICAgdG1wMiA9ICh0bXAyID4+IDE5VSk7CiAgICAgICB0bXAzID0gKHRtcDMgPj4gMTFVKTsKLSAgICAgIHRtcDQgPSAodG1wNCA+PiAzVSApOworICAgICAgdG1wNCA9ICh0bXA0ID4+IDNVKTsKICAgICAgIHRtcCAgPSAoKHRtcDMgPDwgNVUpIHwgKHRtcDIgPDwgMTBVKSB8ICh0bXAxIDw8IDE1VSkgfCB0bXA0KTsKICAgICB9CiAgICAgZWxzZSAvKiBEaGRtYTJkLT5Jbml0LkNvbG9yTW9kZSA9IERNQTJEX09VVFBVVF9BUkdCNDQ0NCAqLwpAQCAtMjA4MSw3ICsyMDk4LDcgQEAKICAgICAgIHRtcDEgPSAodG1wMSA+PiAyOFUpOwogICAgICAgdG1wMiA9ICh0bXAyID4+IDIwVSk7CiAgICAgICB0bXAzID0gKHRtcDMgPj4gMTJVKTsKLSAgICAgIHRtcDQgPSAodG1wNCA+PiA0VSApOworICAgICAgdG1wNCA9ICh0bXA0ID4+IDRVKTsKICAgICAgIHRtcCAgPSAoKHRtcDMgPDwgNFUpIHwgKHRtcDIgPDwgOFUpIHwgKHRtcDEgPDwgMTJVKSB8IHRtcDQpOwogICAgIH0KICAgICAvKiBXcml0ZSB0byBETUEyRCBPQ09MUiByZWdpc3RlciAqLwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjR4eF9oYWxfZHNpLmMgYi9TcmMvc3RtMzJmNHh4X2hhbF9kc2kuYwppbmRleCA1NDhhMzMwLi5kYTU3YThmIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmNHh4X2hhbF9kc2kuYworKysgYi9TcmMvc3RtMzJmNHh4X2hhbF9kc2kuYwpAQCAtMjI4OSw3ICsyMjg5LDcgQEAKICAgKiBAYnJpZWYgIEN1c3RvbSBsYW5lIHBpbnMgY29uZmlndXJhdGlvbgogICAqIEBwYXJhbSAgaGRzaSAgcG9pbnRlciB0byBhIERTSV9IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCiAgICogICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIERTSS4KLSAgKiBAcGFyYW0gIEN1c3RvbUxhbmUgIEZ1bmN0aW9uIHRvIGJlIGFwcGx5ZWQgb24gc2VsZWN0ZWQgbGFuZS4KKyAgKiBAcGFyYW0gIEN1c3RvbUxhbmUgIEZ1bmN0aW9uIHRvIGJlIGFwcGxpZWQgb24gc2VsZWN0ZWQgbGFuZS4KICAgKiAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhbnkgdmFsdWUgb2YgQGFyZyBEU0lfQ3VzdG9tTGFuZQogICAqIEBwYXJhbSAgTGFuZSAgc2VsZWN0IGJldHdlZW4gY2xvY2sgb3IgZGF0YSBsYW5lIDAgb3IgZGF0YSBsYW5lIDEuCiAgICogICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYW55IHZhbHVlIG9mIEBhcmcgRFNJX0xhbmVfU2VsZWN0CmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmNHh4X2hhbF9mbXBpMmMuYyBiL1NyYy9zdG0zMmY0eHhfaGFsX2ZtcGkyYy5jCmluZGV4IGZmYmFjYjguLjBmMTAzMTAgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmY0eHhfaGFsX2ZtcGkyYy5jCisrKyBiL1NyYy9zdG0zMmY0eHhfaGFsX2ZtcGkyYy5jCkBAIC05Myw3ICs5Myw3IEBACiAgICAgWy4uXQogICAgICAgKCspIEEgc3BlY2lmaWMgb3B0aW9uIGZpZWxkIG1hbmFnZSB0aGUgZGlmZmVyZW50IHN0ZXBzIG9mIGEgc2VxdWVudGlhbCB0cmFuc2ZlcgogICAgICAgKCspIE9wdGlvbiBmaWVsZCB2YWx1ZXMgYXJlIGRlZmluZWQgdGhyb3VnaCBAcmVmIEZNUEkyQ19YRkVST1BUSU9OUyBhbmQgYXJlIGxpc3RlZCBiZWxvdzoKLSAgICAgICgrKykgRk1QSTJDX0ZJUlNUX0FORF9MQVNUX0ZSQU1FOiBObyBzZXF1ZW50aWFsIHVzYWdlLCBmdW5jdGlvbm5hbCBpcyBzYW1lIGFzIGFzc29jaWF0ZWQgaW50ZXJmYWNlcyBpbiBubyBzZXF1ZW50aWFsIG1vZGUKKyAgICAgICgrKykgRk1QSTJDX0ZJUlNUX0FORF9MQVNUX0ZSQU1FOiBObyBzZXF1ZW50aWFsIHVzYWdlLCBmdW5jdGlvbmFsIGlzIHNhbWUgYXMgYXNzb2NpYXRlZCBpbnRlcmZhY2VzIGluIG5vIHNlcXVlbnRpYWwgbW9kZQogICAgICAgKCsrKSBGTVBJMkNfRklSU1RfRlJBTUU6IFNlcXVlbnRpYWwgdXNhZ2UsIHRoaXMgb3B0aW9uIGFsbG93IHRvIG1hbmFnZSBhIHNlcXVlbmNlIHdpdGggc3RhcnQgY29uZGl0aW9uLCBhZGRyZXNzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGRhdGEgdG8gdHJhbnNmZXIgd2l0aG91dCBhIGZpbmFsIHN0b3AgY29uZGl0aW9uCiAgICAgICAoKyspIEZNUEkyQ19GSVJTVF9BTkRfTkVYVF9GUkFNRTogU2VxdWVudGlhbCB1c2FnZSAoTWFzdGVyIG9ubHkpLCB0aGlzIG9wdGlvbiBhbGxvdyB0byBtYW5hZ2UgYSBzZXF1ZW5jZSB3aXRoIHN0YXJ0IGNvbmRpdGlvbiwgYWRkcmVzcwpAQCAtMTEyLDcgKzExMiw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciBIQUxfRk1QSTJDX01hc3Rlcl9TZXFfUmVjZWl2ZV9JVChvcHRpb24gRk1QSTJDX0ZJUlNUX0FORF9ORVhUX0ZSQU1FIHRoZW4gRk1QSTJDX05FWFRfRlJBTUUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciBIQUxfRk1QSTJDX01hc3Rlcl9TZXFfVHJhbnNtaXRfRE1BKG9wdGlvbiBGTVBJMkNfRklSU1RfQU5EX05FWFRfRlJBTUUgdGhlbiBGTVBJMkNfTkVYVF9GUkFNRSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIEhBTF9GTVBJMkNfTWFzdGVyX1NlcV9SZWNlaXZlX0RNQShvcHRpb24gRk1QSTJDX0ZJUlNUX0FORF9ORVhUX0ZSQU1FIHRoZW4gRk1QSTJDX05FWFRfRlJBTUUpLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZW4gdXNhZ2Ugb2YgdGhpcyBvcHRpb24gRk1QSTJDX0xBU1RfRlJBTUVfTk9fU1RPUCBhdCB0aGUgbGFzdCBUcmFuc21pdCBvciBSZWNlaXZlIHNlcXVlbmNlIHBlcm1pdCB0byBjYWxsIHRoZSBvcG9zaXRlIGludGVyZmFjZSBSZWNlaXZlIG9yIFRyYW5zbWl0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlbiB1c2FnZSBvZiB0aGlzIG9wdGlvbiBGTVBJMkNfTEFTVF9GUkFNRV9OT19TVE9QIGF0IHRoZSBsYXN0IFRyYW5zbWl0IG9yIFJlY2VpdmUgc2VxdWVuY2UgcGVybWl0IHRvIGNhbGwgdGhlIG9wcG9zaXRlIGludGVyZmFjZSBSZWNlaXZlIG9yIFRyYW5zbWl0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRob3V0IHN0b3BwaW5nIHRoZSBjb21tdW5pY2F0aW9uIGFuZCBzbyBnZW5lcmF0ZSBhIHJlc3RhcnQgY29uZGl0aW9uLgogICAgICAgKCsrKSBGTVBJMkNfT1RIRVJfRlJBTUU6IFNlcXVlbnRpYWwgdXNhZ2UgKE1hc3RlciBvbmx5KSwgdGhpcyBvcHRpb24gYWxsb3cgdG8gbWFuYWdlIGEgcmVzdGFydCBjb25kaXRpb24gYWZ0ZXIgZWFjaCBjYWxsIG9mIHRoZSBzYW1lIG1hc3RlciBzZXF1ZW50aWFsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlLgpAQCAtMTIyLDcgKzEyMiw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciBIQUxfRk1QSTJDX01hc3Rlcl9TZXFfUmVjZWl2ZV9ETUEob3B0aW9uIEZNUEkyQ19GSVJTVF9GUkFNRSB0aGVuIEZNUEkyQ19PVEhFUl9GUkFNRSkuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlbiB1c2FnZSBvZiB0aGlzIG9wdGlvbiBGTVBJMkNfT1RIRVJfQU5EX0xBU1RfRlJBTUUgYXQgdGhlIGxhc3QgZnJhbWUgdG8gaGVscCBhdXRvbWF0aWMgZ2VuZXJhdGlvbiBvZiBTVE9QIGNvbmRpdGlvbi4KIAotICAgICAgKCspIERpZmZlcmVudHMgc2VxdWVudGlhbCBGTVBJMkMgaW50ZXJmYWNlcyBhcmUgbGlzdGVkIGJlbG93OgorICAgICAgKCspIERpZmZlcmVudCBzZXF1ZW50aWFsIEZNUEkyQyBpbnRlcmZhY2VzIGFyZSBsaXN0ZWQgYmVsb3c6CiAgICAgICAoKyspIFNlcXVlbnRpYWwgdHJhbnNtaXQgaW4gbWFzdGVyIEZNUEkyQyBtb2RlIGFuIGFtb3VudCBvZiBkYXRhIGluIG5vbi1ibG9ja2luZyBtb2RlIHVzaW5nIEByZWYgSEFMX0ZNUEkyQ19NYXN0ZXJfU2VxX1RyYW5zbWl0X0lUKCkKICAgICAgICAgICAgIG9yIHVzaW5nIEByZWYgSEFMX0ZNUEkyQ19NYXN0ZXJfU2VxX1RyYW5zbWl0X0RNQSgpCiAgICAgICAoKysrKSBBdCB0cmFuc21pc3Npb24gZW5kIG9mIGN1cnJlbnQgZnJhbWUgdHJhbnNmZXIsIEByZWYgSEFMX0ZNUEkyQ19NYXN0ZXJUeENwbHRDYWxsYmFjaygpIGlzIGV4ZWN1dGVkIGFuZCB1c2VyIGNhbgpAQCAtMzkxLDggKzM5MSwxMCBAQAogc3RhdGljIHZvaWQgRk1QSTJDX0lURXJyb3IoRk1QSTJDX0hhbmRsZVR5cGVEZWYgKmhmbXBpMmMsIHVpbnQzMl90IEVycm9yQ29kZSk7CiAKIC8qIFByaXZhdGUgZnVuY3Rpb25zIHRvIGhhbmRsZSBJVCB0cmFuc2ZlciAqLwotc3RhdGljIEhBTF9TdGF0dXNUeXBlRGVmIEZNUEkyQ19SZXF1ZXN0TWVtb3J5V3JpdGUoRk1QSTJDX0hhbmRsZVR5cGVEZWYgKmhmbXBpMmMsIHVpbnQxNl90IERldkFkZHJlc3MsIHVpbnQxNl90IE1lbUFkZHJlc3MsIHVpbnQxNl90IE1lbUFkZFNpemUsIHVpbnQzMl90IFRpbWVvdXQsIHVpbnQzMl90IFRpY2tzdGFydCk7Ci1zdGF0aWMgSEFMX1N0YXR1c1R5cGVEZWYgRk1QSTJDX1JlcXVlc3RNZW1vcnlSZWFkKEZNUEkyQ19IYW5kbGVUeXBlRGVmICpoZm1waTJjLCB1aW50MTZfdCBEZXZBZGRyZXNzLCB1aW50MTZfdCBNZW1BZGRyZXNzLCB1aW50MTZfdCBNZW1BZGRTaXplLCB1aW50MzJfdCBUaW1lb3V0LCB1aW50MzJfdCBUaWNrc3RhcnQpOworc3RhdGljIEhBTF9TdGF0dXNUeXBlRGVmIEZNUEkyQ19SZXF1ZXN0TWVtb3J5V3JpdGUoRk1QSTJDX0hhbmRsZVR5cGVEZWYgKmhmbXBpMmMsIHVpbnQxNl90IERldkFkZHJlc3MsIHVpbnQxNl90IE1lbUFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBNZW1BZGRTaXplLCB1aW50MzJfdCBUaW1lb3V0LCB1aW50MzJfdCBUaWNrc3RhcnQpOworc3RhdGljIEhBTF9TdGF0dXNUeXBlRGVmIEZNUEkyQ19SZXF1ZXN0TWVtb3J5UmVhZChGTVBJMkNfSGFuZGxlVHlwZURlZiAqaGZtcGkyYywgdWludDE2X3QgRGV2QWRkcmVzcywgdWludDE2X3QgTWVtQWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgTWVtQWRkU2l6ZSwgdWludDMyX3QgVGltZW91dCwgdWludDMyX3QgVGlja3N0YXJ0KTsKIAogLyogUHJpdmF0ZSBmdW5jdGlvbnMgZm9yIEZNUEkyQyB0cmFuc2ZlciBJUlEgaGFuZGxlciAqLwogc3RhdGljIEhBTF9TdGF0dXNUeXBlRGVmIEZNUEkyQ19NYXN0ZXJfSVNSX0lUKHN0cnVjdCBfX0ZNUEkyQ19IYW5kbGVUeXBlRGVmICpoZm1waTJjLCB1aW50MzJfdCBJVEZsYWdzLCB1aW50MzJfdCBJVFNvdXJjZXMpOwpAQCAtNDAxLDcgKzQwMyw4IEBACiBzdGF0aWMgSEFMX1N0YXR1c1R5cGVEZWYgRk1QSTJDX1NsYXZlX0lTUl9ETUEoc3RydWN0IF9fRk1QSTJDX0hhbmRsZVR5cGVEZWYgKmhmbXBpMmMsIHVpbnQzMl90IElURmxhZ3MsIHVpbnQzMl90IElUU291cmNlcyk7CiAKIC8qIFByaXZhdGUgZnVuY3Rpb25zIHRvIGhhbmRsZSBmbGFncyBkdXJpbmcgcG9sbGluZyB0cmFuc2ZlciAqLwotc3RhdGljIEhBTF9TdGF0dXNUeXBlRGVmIEZNUEkyQ19XYWl0T25GbGFnVW50aWxUaW1lb3V0KEZNUEkyQ19IYW5kbGVUeXBlRGVmICpoZm1waTJjLCB1aW50MzJfdCBGbGFnLCBGbGFnU3RhdHVzIFN0YXR1cywgdWludDMyX3QgVGltZW91dCwgdWludDMyX3QgVGlja3N0YXJ0KTsKK3N0YXRpYyBIQUxfU3RhdHVzVHlwZURlZiBGTVBJMkNfV2FpdE9uRmxhZ1VudGlsVGltZW91dChGTVBJMkNfSGFuZGxlVHlwZURlZiAqaGZtcGkyYywgdWludDMyX3QgRmxhZywgRmxhZ1N0YXR1cyBTdGF0dXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgVGltZW91dCwgdWludDMyX3QgVGlja3N0YXJ0KTsKIHN0YXRpYyBIQUxfU3RhdHVzVHlwZURlZiBGTVBJMkNfV2FpdE9uVFhJU0ZsYWdVbnRpbFRpbWVvdXQoRk1QSTJDX0hhbmRsZVR5cGVEZWYgKmhmbXBpMmMsIHVpbnQzMl90IFRpbWVvdXQsIHVpbnQzMl90IFRpY2tzdGFydCk7CiBzdGF0aWMgSEFMX1N0YXR1c1R5cGVEZWYgRk1QSTJDX1dhaXRPblJYTkVGbGFnVW50aWxUaW1lb3V0KEZNUEkyQ19IYW5kbGVUeXBlRGVmICpoZm1waTJjLCB1aW50MzJfdCBUaW1lb3V0LCB1aW50MzJfdCBUaWNrc3RhcnQpOwogc3RhdGljIEhBTF9TdGF0dXNUeXBlRGVmIEZNUEkyQ19XYWl0T25TVE9QRmxhZ1VudGlsVGltZW91dChGTVBJMkNfSGFuZGxlVHlwZURlZiAqaGZtcGkyYywgdWludDMyX3QgVGltZW91dCwgdWludDMyX3QgVGlja3N0YXJ0KTsKQEAgLTQxOCw3ICs0MjEsOCBAQAogc3RhdGljIHZvaWQgRk1QSTJDX0ZsdXNoX1RYRFIoRk1QSTJDX0hhbmRsZVR5cGVEZWYgKmhmbXBpMmMpOwogCiAvKiBQcml2YXRlIGZ1bmN0aW9uIHRvIGhhbmRsZSAgc3RhcnQsIHJlc3RhcnQgb3Igc3RvcCBhIHRyYW5zZmVyICovCi1zdGF0aWMgdm9pZCBGTVBJMkNfVHJhbnNmZXJDb25maWcoRk1QSTJDX0hhbmRsZVR5cGVEZWYgKmhmbXBpMmMsIHVpbnQxNl90IERldkFkZHJlc3MsIHVpbnQ4X3QgU2l6ZSwgdWludDMyX3QgTW9kZSwgdWludDMyX3QgUmVxdWVzdCk7CitzdGF0aWMgdm9pZCBGTVBJMkNfVHJhbnNmZXJDb25maWcoRk1QSTJDX0hhbmRsZVR5cGVEZWYgKmhmbXBpMmMsIHVpbnQxNl90IERldkFkZHJlc3MsIHVpbnQ4X3QgU2l6ZSwgdWludDMyX3QgTW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBSZXF1ZXN0KTsKIAogLyogUHJpdmF0ZSBmdW5jdGlvbiB0byBDb252ZXJ0IFNwZWNpZmljIG9wdGlvbnMgKi8KIHN0YXRpYyB2b2lkIEZNUEkyQ19Db252ZXJ0T3RoZXJYZmVyT3B0aW9ucyhGTVBJMkNfSGFuZGxlVHlwZURlZiAqaGZtcGkyYyk7CkBAIC00MzMsOCArNDM3LDggQEAKICAgKi8KIAogLyoqIEBkZWZncm91cCBGTVBJMkNfRXhwb3J0ZWRfRnVuY3Rpb25zX0dyb3VwMSBJbml0aWFsaXphdGlvbiBhbmQgZGUtaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zCi0gKiAgQGJyaWVmICAgIEluaXRpYWxpemF0aW9uIGFuZCBDb25maWd1cmF0aW9uIGZ1bmN0aW9ucwotICoKKyAgKiAgQGJyaWVmICAgIEluaXRpYWxpemF0aW9uIGFuZCBDb25maWd1cmF0aW9uIGZ1bmN0aW9ucworICAqCiBAdmVyYmF0aW0KICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgICAgICAgICMjIyMjIEluaXRpYWxpemF0aW9uIGFuZCBkZS1pbml0aWFsaXphdGlvbiBmdW5jdGlvbnMgIyMjIyMKQEAgLTY3Myw3ICs2NzcsOCBAQAogICAqIEBwYXJhbSAgcENhbGxiYWNrIHBvaW50ZXIgdG8gdGhlIENhbGxiYWNrIGZ1bmN0aW9uCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfRk1QSTJDX1JlZ2lzdGVyQ2FsbGJhY2soRk1QSTJDX0hhbmRsZVR5cGVEZWYgKmhmbXBpMmMsIEhBTF9GTVBJMkNfQ2FsbGJhY2tJRFR5cGVEZWYgQ2FsbGJhY2tJRCwgcEZNUEkyQ19DYWxsYmFja1R5cGVEZWYgcENhbGxiYWNrKQorSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0ZNUEkyQ19SZWdpc3RlckNhbGxiYWNrKEZNUEkyQ19IYW5kbGVUeXBlRGVmICpoZm1waTJjLCBIQUxfRk1QSTJDX0NhbGxiYWNrSURUeXBlRGVmIENhbGxiYWNrSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEZNUEkyQ19DYWxsYmFja1R5cGVEZWYgcENhbGxiYWNrKQogewogICBIQUxfU3RhdHVzVHlwZURlZiBzdGF0dXMgPSBIQUxfT0s7CiAKQEAgLTk3OCw4ICs5ODMsOCBAQAogICAqLwogCiAvKiogQGRlZmdyb3VwIEZNUEkyQ19FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXAyIElucHV0IGFuZCBPdXRwdXQgb3BlcmF0aW9uIGZ1bmN0aW9ucwotICogIEBicmllZiAgIERhdGEgdHJhbnNmZXJzIGZ1bmN0aW9ucwotICoKKyAgKiAgQGJyaWVmICAgRGF0YSB0cmFuc2ZlcnMgZnVuY3Rpb25zCisgICoKIEB2ZXJiYXRpbQogID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgICAgICAgICAgICAgICAgICAjIyMjIyBJTyBvcGVyYXRpb24gZnVuY3Rpb25zICMjIyMjCkBAIC0xMDYxLDcgKzEwNjYsOCBAQAogICAqIEBwYXJhbSAgVGltZW91dCBUaW1lb3V0IGR1cmF0aW9uCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfRk1QSTJDX01hc3Rlcl9UcmFuc21pdChGTVBJMkNfSGFuZGxlVHlwZURlZiAqaGZtcGkyYywgdWludDE2X3QgRGV2QWRkcmVzcywgdWludDhfdCAqcERhdGEsIHVpbnQxNl90IFNpemUsIHVpbnQzMl90IFRpbWVvdXQpCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfRk1QSTJDX01hc3Rlcl9UcmFuc21pdChGTVBJMkNfSGFuZGxlVHlwZURlZiAqaGZtcGkyYywgdWludDE2X3QgRGV2QWRkcmVzcywgdWludDhfdCAqcERhdGEsIHVpbnQxNl90IFNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBUaW1lb3V0KQogewogICB1aW50MzJfdCB0aWNrc3RhcnQ7CiAKQEAgLTExNzUsNyArMTE4MSw4IEBACiAgICogQHBhcmFtICBUaW1lb3V0IFRpbWVvdXQgZHVyYXRpb24KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9GTVBJMkNfTWFzdGVyX1JlY2VpdmUoRk1QSTJDX0hhbmRsZVR5cGVEZWYgKmhmbXBpMmMsIHVpbnQxNl90IERldkFkZHJlc3MsIHVpbnQ4X3QgKnBEYXRhLCB1aW50MTZfdCBTaXplLCB1aW50MzJfdCBUaW1lb3V0KQorSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0ZNUEkyQ19NYXN0ZXJfUmVjZWl2ZShGTVBJMkNfSGFuZGxlVHlwZURlZiAqaGZtcGkyYywgdWludDE2X3QgRGV2QWRkcmVzcywgdWludDhfdCAqcERhdGEsIHVpbnQxNl90IFNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IFRpbWVvdXQpCiB7CiAgIHVpbnQzMl90IHRpY2tzdGFydDsKIApAQCAtMTU1MSw3ICsxNTU4LDggQEAKICAgKiBAcGFyYW0gIFNpemUgQW1vdW50IG9mIGRhdGEgdG8gYmUgc2VudAogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0ZNUEkyQ19NYXN0ZXJfVHJhbnNtaXRfSVQoRk1QSTJDX0hhbmRsZVR5cGVEZWYgKmhmbXBpMmMsIHVpbnQxNl90IERldkFkZHJlc3MsIHVpbnQ4X3QgKnBEYXRhLCB1aW50MTZfdCBTaXplKQorSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0ZNUEkyQ19NYXN0ZXJfVHJhbnNtaXRfSVQoRk1QSTJDX0hhbmRsZVR5cGVEZWYgKmhmbXBpMmMsIHVpbnQxNl90IERldkFkZHJlc3MsIHVpbnQ4X3QgKnBEYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgU2l6ZSkKIHsKICAgdWludDMyX3QgeGZlcm1vZGU7CiAKQEAgLTE3ODcsNyArMTc5NSw4IEBACiAgICogQHBhcmFtICBTaXplIEFtb3VudCBvZiBkYXRhIHRvIGJlIHNlbnQKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9GTVBJMkNfTWFzdGVyX1RyYW5zbWl0X0RNQShGTVBJMkNfSGFuZGxlVHlwZURlZiAqaGZtcGkyYywgdWludDE2X3QgRGV2QWRkcmVzcywgdWludDhfdCAqcERhdGEsIHVpbnQxNl90IFNpemUpCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfRk1QSTJDX01hc3Rlcl9UcmFuc21pdF9ETUEoRk1QSTJDX0hhbmRsZVR5cGVEZWYgKmhmbXBpMmMsIHVpbnQxNl90IERldkFkZHJlc3MsIHVpbnQ4X3QgKnBEYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IFNpemUpCiB7CiAgIHVpbnQzMl90IHhmZXJtb2RlOwogICBIQUxfU3RhdHVzVHlwZURlZiBkbWF4ZmVyc3RhdHVzOwpAQCAtMTkzMCw3ICsxOTM5LDggQEAKICAgKiBAcGFyYW0gIFNpemUgQW1vdW50IG9mIGRhdGEgdG8gYmUgc2VudAogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0ZNUEkyQ19NYXN0ZXJfUmVjZWl2ZV9ETUEoRk1QSTJDX0hhbmRsZVR5cGVEZWYgKmhmbXBpMmMsIHVpbnQxNl90IERldkFkZHJlc3MsIHVpbnQ4X3QgKnBEYXRhLCB1aW50MTZfdCBTaXplKQorSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0ZNUEkyQ19NYXN0ZXJfUmVjZWl2ZV9ETUEoRk1QSTJDX0hhbmRsZVR5cGVEZWYgKmhmbXBpMmMsIHVpbnQxNl90IERldkFkZHJlc3MsIHVpbnQ4X3QgKnBEYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgU2l6ZSkKIHsKICAgdWludDMyX3QgeGZlcm1vZGU7CiAgIEhBTF9TdGF0dXNUeXBlRGVmIGRtYXhmZXJzdGF0dXM7CkBAIC0yMjgxLDcgKzIyOTEsOCBAQAogICAqIEBwYXJhbSAgVGltZW91dCBUaW1lb3V0IGR1cmF0aW9uCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfRk1QSTJDX01lbV9Xcml0ZShGTVBJMkNfSGFuZGxlVHlwZURlZiAqaGZtcGkyYywgdWludDE2X3QgRGV2QWRkcmVzcywgdWludDE2X3QgTWVtQWRkcmVzcywgdWludDE2X3QgTWVtQWRkU2l6ZSwgdWludDhfdCAqcERhdGEsIHVpbnQxNl90IFNpemUsIHVpbnQzMl90IFRpbWVvdXQpCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfRk1QSTJDX01lbV9Xcml0ZShGTVBJMkNfSGFuZGxlVHlwZURlZiAqaGZtcGkyYywgdWludDE2X3QgRGV2QWRkcmVzcywgdWludDE2X3QgTWVtQWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IE1lbUFkZFNpemUsIHVpbnQ4X3QgKnBEYXRhLCB1aW50MTZfdCBTaXplLCB1aW50MzJfdCBUaW1lb3V0KQogewogICB1aW50MzJfdCB0aWNrc3RhcnQ7CiAKQEAgLTIzNzMsOCArMjM4NCw3IEBACiAgICAgICAgIH0KICAgICAgIH0KIAotICAgIH0KLSAgICB3aGlsZSAoaGZtcGkyYy0+WGZlckNvdW50ID4gMFUpOworICAgIH0gd2hpbGUgKGhmbXBpMmMtPlhmZXJDb3VudCA+IDBVKTsKIAogICAgIC8qIE5vIG5lZWQgdG8gQ2hlY2sgVEMgZmxhZywgd2l0aCBBVVRPRU5EIG1vZGUgdGhlIHN0b3AgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgKi8KICAgICAvKiBXYWl0IHVudGlsIFNUT1BGIGZsYWcgaXMgcmVzZXQgKi8KQEAgLTI0MTYsNyArMjQyNiw4IEBACiAgICogQHBhcmFtICBUaW1lb3V0IFRpbWVvdXQgZHVyYXRpb24KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9GTVBJMkNfTWVtX1JlYWQoRk1QSTJDX0hhbmRsZVR5cGVEZWYgKmhmbXBpMmMsIHVpbnQxNl90IERldkFkZHJlc3MsIHVpbnQxNl90IE1lbUFkZHJlc3MsIHVpbnQxNl90IE1lbUFkZFNpemUsIHVpbnQ4X3QgKnBEYXRhLCB1aW50MTZfdCBTaXplLCB1aW50MzJfdCBUaW1lb3V0KQorSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0ZNUEkyQ19NZW1fUmVhZChGTVBJMkNfSGFuZGxlVHlwZURlZiAqaGZtcGkyYywgdWludDE2X3QgRGV2QWRkcmVzcywgdWludDE2X3QgTWVtQWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgTWVtQWRkU2l6ZSwgdWludDhfdCAqcERhdGEsIHVpbnQxNl90IFNpemUsIHVpbnQzMl90IFRpbWVvdXQpCiB7CiAgIHVpbnQzMl90IHRpY2tzdGFydDsKIApAQCAtMjUwOCw4ICsyNTE5LDcgQEAKICAgICAgICAgICBGTVBJMkNfVHJhbnNmZXJDb25maWcoaGZtcGkyYywgRGV2QWRkcmVzcywgKHVpbnQ4X3QpaGZtcGkyYy0+WGZlclNpemUsIEZNUEkyQ19BVVRPRU5EX01PREUsIEZNUEkyQ19OT19TVEFSVFNUT1ApOwogICAgICAgICB9CiAgICAgICB9Ci0gICAgfQotICAgIHdoaWxlIChoZm1waTJjLT5YZmVyQ291bnQgPiAwVSk7CisgICAgfSB3aGlsZSAoaGZtcGkyYy0+WGZlckNvdW50ID4gMFUpOwogCiAgICAgLyogTm8gbmVlZCB0byBDaGVjayBUQyBmbGFnLCB3aXRoIEFVVE9FTkQgbW9kZSB0aGUgc3RvcCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCAqLwogICAgIC8qIFdhaXQgdW50aWwgU1RPUEYgZmxhZyBpcyByZXNldCAqLwpAQCAtMjU0OSw3ICsyNTU5LDggQEAKICAgKiBAcGFyYW0gIFNpemUgQW1vdW50IG9mIGRhdGEgdG8gYmUgc2VudAogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0ZNUEkyQ19NZW1fV3JpdGVfSVQoRk1QSTJDX0hhbmRsZVR5cGVEZWYgKmhmbXBpMmMsIHVpbnQxNl90IERldkFkZHJlc3MsIHVpbnQxNl90IE1lbUFkZHJlc3MsIHVpbnQxNl90IE1lbUFkZFNpemUsIHVpbnQ4X3QgKnBEYXRhLCB1aW50MTZfdCBTaXplKQorSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0ZNUEkyQ19NZW1fV3JpdGVfSVQoRk1QSTJDX0hhbmRsZVR5cGVEZWYgKmhmbXBpMmMsIHVpbnQxNl90IERldkFkZHJlc3MsIHVpbnQxNl90IE1lbUFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBNZW1BZGRTaXplLCB1aW50OF90ICpwRGF0YSwgdWludDE2X3QgU2l6ZSkKIHsKICAgdWludDMyX3QgdGlja3N0YXJ0OwogICB1aW50MzJfdCB4ZmVybW9kZTsKQEAgLTI2NDAsNyArMjY1MSw4IEBACiAgICogQHBhcmFtICBTaXplIEFtb3VudCBvZiBkYXRhIHRvIGJlIHNlbnQKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9GTVBJMkNfTWVtX1JlYWRfSVQoRk1QSTJDX0hhbmRsZVR5cGVEZWYgKmhmbXBpMmMsIHVpbnQxNl90IERldkFkZHJlc3MsIHVpbnQxNl90IE1lbUFkZHJlc3MsIHVpbnQxNl90IE1lbUFkZFNpemUsIHVpbnQ4X3QgKnBEYXRhLCB1aW50MTZfdCBTaXplKQorSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0ZNUEkyQ19NZW1fUmVhZF9JVChGTVBJMkNfSGFuZGxlVHlwZURlZiAqaGZtcGkyYywgdWludDE2X3QgRGV2QWRkcmVzcywgdWludDE2X3QgTWVtQWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgTWVtQWRkU2l6ZSwgdWludDhfdCAqcERhdGEsIHVpbnQxNl90IFNpemUpCiB7CiAgIHVpbnQzMl90IHRpY2tzdGFydDsKICAgdWludDMyX3QgeGZlcm1vZGU7CkBAIC0yNzMwLDcgKzI3NDIsOCBAQAogICAqIEBwYXJhbSAgU2l6ZSBBbW91bnQgb2YgZGF0YSB0byBiZSBzZW50CiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfRk1QSTJDX01lbV9Xcml0ZV9ETUEoRk1QSTJDX0hhbmRsZVR5cGVEZWYgKmhmbXBpMmMsIHVpbnQxNl90IERldkFkZHJlc3MsIHVpbnQxNl90IE1lbUFkZHJlc3MsIHVpbnQxNl90IE1lbUFkZFNpemUsIHVpbnQ4X3QgKnBEYXRhLCB1aW50MTZfdCBTaXplKQorSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0ZNUEkyQ19NZW1fV3JpdGVfRE1BKEZNUEkyQ19IYW5kbGVUeXBlRGVmICpoZm1waTJjLCB1aW50MTZfdCBEZXZBZGRyZXNzLCB1aW50MTZfdCBNZW1BZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IE1lbUFkZFNpemUsIHVpbnQ4X3QgKnBEYXRhLCB1aW50MTZfdCBTaXplKQogewogICB1aW50MzJfdCB0aWNrc3RhcnQ7CiAgIHVpbnQzMl90IHhmZXJtb2RlOwpAQCAtMjg3NCw3ICsyODg3LDggQEAKICAgKiBAcGFyYW0gIFNpemUgQW1vdW50IG9mIGRhdGEgdG8gYmUgcmVhZAogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0ZNUEkyQ19NZW1fUmVhZF9ETUEoRk1QSTJDX0hhbmRsZVR5cGVEZWYgKmhmbXBpMmMsIHVpbnQxNl90IERldkFkZHJlc3MsIHVpbnQxNl90IE1lbUFkZHJlc3MsIHVpbnQxNl90IE1lbUFkZFNpemUsIHVpbnQ4X3QgKnBEYXRhLCB1aW50MTZfdCBTaXplKQorSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0ZNUEkyQ19NZW1fUmVhZF9ETUEoRk1QSTJDX0hhbmRsZVR5cGVEZWYgKmhmbXBpMmMsIHVpbnQxNl90IERldkFkZHJlc3MsIHVpbnQxNl90IE1lbUFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBNZW1BZGRTaXplLCB1aW50OF90ICpwRGF0YSwgdWludDE2X3QgU2l6ZSkKIHsKICAgdWludDMyX3QgdGlja3N0YXJ0OwogICB1aW50MzJfdCB4ZmVybW9kZTsKQEAgLTMxMjUsOCArMzEzOSw3IEBACiAKICAgICAgIC8qIEluY3JlbWVudCBUcmlhbHMgKi8KICAgICAgIEZNUEkyQ19UcmlhbHMrKzsKLSAgICB9Ci0gICAgd2hpbGUgKEZNUEkyQ19UcmlhbHMgPCBUcmlhbHMpOworICAgIH0gd2hpbGUgKEZNUEkyQ19UcmlhbHMgPCBUcmlhbHMpOwogCiAgICAgLyogVXBkYXRlIEZNUEkyQyBzdGF0ZSAqLwogICAgIGhmbXBpMmMtPlN0YXRlID0gSEFMX0ZNUEkyQ19TVEFURV9SRUFEWTsKQEAgLTMxNTcsNyArMzE3MCw4IEBACiAgICogQHBhcmFtICBYZmVyT3B0aW9ucyBPcHRpb25zIG9mIFRyYW5zZmVyLCB2YWx1ZSBvZiBAcmVmIEZNUEkyQ19YRkVST1BUSU9OUwogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0ZNUEkyQ19NYXN0ZXJfU2VxX1RyYW5zbWl0X0lUKEZNUEkyQ19IYW5kbGVUeXBlRGVmICpoZm1waTJjLCB1aW50MTZfdCBEZXZBZGRyZXNzLCB1aW50OF90ICpwRGF0YSwgdWludDE2X3QgU2l6ZSwgdWludDMyX3QgWGZlck9wdGlvbnMpCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfRk1QSTJDX01hc3Rlcl9TZXFfVHJhbnNtaXRfSVQoRk1QSTJDX0hhbmRsZVR5cGVEZWYgKmhmbXBpMmMsIHVpbnQxNl90IERldkFkZHJlc3MsIHVpbnQ4X3QgKnBEYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IFNpemUsIHVpbnQzMl90IFhmZXJPcHRpb25zKQogewogICB1aW50MzJfdCB4ZmVybW9kZTsKICAgdWludDMyX3QgeGZlcnJlcXVlc3QgPSBGTVBJMkNfR0VORVJBVEVfU1RBUlRfV1JJVEU7CkBAIC0zMjQxLDcgKzMyNTUsOCBAQAogICAqIEBwYXJhbSAgWGZlck9wdGlvbnMgT3B0aW9ucyBvZiBUcmFuc2ZlciwgdmFsdWUgb2YgQHJlZiBGTVBJMkNfWEZFUk9QVElPTlMKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9GTVBJMkNfTWFzdGVyX1NlcV9UcmFuc21pdF9ETUEoRk1QSTJDX0hhbmRsZVR5cGVEZWYgKmhmbXBpMmMsIHVpbnQxNl90IERldkFkZHJlc3MsIHVpbnQ4X3QgKnBEYXRhLCB1aW50MTZfdCBTaXplLCB1aW50MzJfdCBYZmVyT3B0aW9ucykKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9GTVBJMkNfTWFzdGVyX1NlcV9UcmFuc21pdF9ETUEoRk1QSTJDX0hhbmRsZVR5cGVEZWYgKmhmbXBpMmMsIHVpbnQxNl90IERldkFkZHJlc3MsIHVpbnQ4X3QgKnBEYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBTaXplLCB1aW50MzJfdCBYZmVyT3B0aW9ucykKIHsKICAgdWludDMyX3QgeGZlcm1vZGU7CiAgIHVpbnQzMl90IHhmZXJyZXF1ZXN0ID0gRk1QSTJDX0dFTkVSQVRFX1NUQVJUX1dSSVRFOwpAQCAtMzQwMyw3ICszNDE4LDggQEAKICAgKiBAcGFyYW0gIFhmZXJPcHRpb25zIE9wdGlvbnMgb2YgVHJhbnNmZXIsIHZhbHVlIG9mIEByZWYgRk1QSTJDX1hGRVJPUFRJT05TCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfRk1QSTJDX01hc3Rlcl9TZXFfUmVjZWl2ZV9JVChGTVBJMkNfSGFuZGxlVHlwZURlZiAqaGZtcGkyYywgdWludDE2X3QgRGV2QWRkcmVzcywgdWludDhfdCAqcERhdGEsIHVpbnQxNl90IFNpemUsIHVpbnQzMl90IFhmZXJPcHRpb25zKQorSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0ZNUEkyQ19NYXN0ZXJfU2VxX1JlY2VpdmVfSVQoRk1QSTJDX0hhbmRsZVR5cGVEZWYgKmhmbXBpMmMsIHVpbnQxNl90IERldkFkZHJlc3MsIHVpbnQ4X3QgKnBEYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgU2l6ZSwgdWludDMyX3QgWGZlck9wdGlvbnMpCiB7CiAgIHVpbnQzMl90IHhmZXJtb2RlOwogICB1aW50MzJfdCB4ZmVycmVxdWVzdCA9IEZNUEkyQ19HRU5FUkFURV9TVEFSVF9SRUFEOwpAQCAtMzQ4Nyw3ICszNTAzLDggQEAKICAgKiBAcGFyYW0gIFhmZXJPcHRpb25zIE9wdGlvbnMgb2YgVHJhbnNmZXIsIHZhbHVlIG9mIEByZWYgRk1QSTJDX1hGRVJPUFRJT05TCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfRk1QSTJDX01hc3Rlcl9TZXFfUmVjZWl2ZV9ETUEoRk1QSTJDX0hhbmRsZVR5cGVEZWYgKmhmbXBpMmMsIHVpbnQxNl90IERldkFkZHJlc3MsIHVpbnQ4X3QgKnBEYXRhLCB1aW50MTZfdCBTaXplLCB1aW50MzJfdCBYZmVyT3B0aW9ucykKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9GTVBJMkNfTWFzdGVyX1NlcV9SZWNlaXZlX0RNQShGTVBJMkNfSGFuZGxlVHlwZURlZiAqaGZtcGkyYywgdWludDE2X3QgRGV2QWRkcmVzcywgdWludDhfdCAqcERhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgU2l6ZSwgdWludDMyX3QgWGZlck9wdGlvbnMpCiB7CiAgIHVpbnQzMl90IHhmZXJtb2RlOwogICB1aW50MzJfdCB4ZmVycmVxdWVzdCA9IEZNUEkyQ19HRU5FUkFURV9TVEFSVF9SRUFEOwpAQCAtMzY0Nyw3ICszNjY0LDggQEAKICAgKiBAcGFyYW0gIFhmZXJPcHRpb25zIE9wdGlvbnMgb2YgVHJhbnNmZXIsIHZhbHVlIG9mIEByZWYgRk1QSTJDX1hGRVJPUFRJT05TCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfRk1QSTJDX1NsYXZlX1NlcV9UcmFuc21pdF9JVChGTVBJMkNfSGFuZGxlVHlwZURlZiAqaGZtcGkyYywgdWludDhfdCAqcERhdGEsIHVpbnQxNl90IFNpemUsIHVpbnQzMl90IFhmZXJPcHRpb25zKQorSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0ZNUEkyQ19TbGF2ZV9TZXFfVHJhbnNtaXRfSVQoRk1QSTJDX0hhbmRsZVR5cGVEZWYgKmhmbXBpMmMsIHVpbnQ4X3QgKnBEYXRhLCB1aW50MTZfdCBTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgWGZlck9wdGlvbnMpCiB7CiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19GTVBJMkNfVFJBTlNGRVJfT1BUSU9OU19SRVFVRVNUKFhmZXJPcHRpb25zKSk7CkBAIC0zNzQyLDcgKzM3NjAsOCBAQAogICAqIEBwYXJhbSAgWGZlck9wdGlvbnMgT3B0aW9ucyBvZiBUcmFuc2ZlciwgdmFsdWUgb2YgQHJlZiBGTVBJMkNfWEZFUk9QVElPTlMKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9GTVBJMkNfU2xhdmVfU2VxX1RyYW5zbWl0X0RNQShGTVBJMkNfSGFuZGxlVHlwZURlZiAqaGZtcGkyYywgdWludDhfdCAqcERhdGEsIHVpbnQxNl90IFNpemUsIHVpbnQzMl90IFhmZXJPcHRpb25zKQorSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0ZNUEkyQ19TbGF2ZV9TZXFfVHJhbnNtaXRfRE1BKEZNUEkyQ19IYW5kbGVUeXBlRGVmICpoZm1waTJjLCB1aW50OF90ICpwRGF0YSwgdWludDE2X3QgU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBYZmVyT3B0aW9ucykKIHsKICAgSEFMX1N0YXR1c1R5cGVEZWYgZG1heGZlcnN0YXR1czsKIApAQCAtMzkyMSw3ICszOTQwLDggQEAKICAgKiBAcGFyYW0gIFhmZXJPcHRpb25zIE9wdGlvbnMgb2YgVHJhbnNmZXIsIHZhbHVlIG9mIEByZWYgRk1QSTJDX1hGRVJPUFRJT05TCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfRk1QSTJDX1NsYXZlX1NlcV9SZWNlaXZlX0lUKEZNUEkyQ19IYW5kbGVUeXBlRGVmICpoZm1waTJjLCB1aW50OF90ICpwRGF0YSwgdWludDE2X3QgU2l6ZSwgdWludDMyX3QgWGZlck9wdGlvbnMpCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfRk1QSTJDX1NsYXZlX1NlcV9SZWNlaXZlX0lUKEZNUEkyQ19IYW5kbGVUeXBlRGVmICpoZm1waTJjLCB1aW50OF90ICpwRGF0YSwgdWludDE2X3QgU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgWGZlck9wdGlvbnMpCiB7CiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19GTVBJMkNfVFJBTlNGRVJfT1BUSU9OU19SRVFVRVNUKFhmZXJPcHRpb25zKSk7CkBAIC00MDE2LDcgKzQwMzYsOCBAQAogICAqIEBwYXJhbSAgWGZlck9wdGlvbnMgT3B0aW9ucyBvZiBUcmFuc2ZlciwgdmFsdWUgb2YgQHJlZiBGTVBJMkNfWEZFUk9QVElPTlMKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9GTVBJMkNfU2xhdmVfU2VxX1JlY2VpdmVfRE1BKEZNUEkyQ19IYW5kbGVUeXBlRGVmICpoZm1waTJjLCB1aW50OF90ICpwRGF0YSwgdWludDE2X3QgU2l6ZSwgdWludDMyX3QgWGZlck9wdGlvbnMpCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfRk1QSTJDX1NsYXZlX1NlcV9SZWNlaXZlX0RNQShGTVBJMkNfSGFuZGxlVHlwZURlZiAqaGZtcGkyYywgdWludDhfdCAqcERhdGEsIHVpbnQxNl90IFNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBYZmVyT3B0aW9ucykKIHsKICAgSEFMX1N0YXR1c1R5cGVEZWYgZG1heGZlcnN0YXR1czsKIApAQCAtNDMwMSw4ICs0MzIyLDggQEAKICAgKi8KIAogLyoqIEBkZWZncm91cCBGTVBJMkNfSVJRX0hhbmRsZXJfYW5kX0NhbGxiYWNrcyBJUlEgSGFuZGxlciBhbmQgQ2FsbGJhY2tzCi0gKiBAewotICovCisgICogQHsKKyAgKi8KIAogLyoqCiAgICogQGJyaWVmICBUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgRk1QSTJDIGV2ZW50IGludGVycnVwdCByZXF1ZXN0LgpAQCAtNDU0MCw4ICs0NTYxLDggQEAKICAgKi8KIAogLyoqIEBkZWZncm91cCBGTVBJMkNfRXhwb3J0ZWRfRnVuY3Rpb25zX0dyb3VwMyBQZXJpcGhlcmFsIFN0YXRlLCBNb2RlIGFuZCBFcnJvciBmdW5jdGlvbnMKLSAqICBAYnJpZWYgICBQZXJpcGhlcmFsIFN0YXRlLCBNb2RlIGFuZCBFcnJvciBmdW5jdGlvbnMKLSAqCisgICogIEBicmllZiAgIFBlcmlwaGVyYWwgU3RhdGUsIE1vZGUgYW5kIEVycm9yIGZ1bmN0aW9ucworICAqCiBAdmVyYmF0aW0KICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgICAgICAjIyMjIyBQZXJpcGhlcmFsIFN0YXRlLCBNb2RlIGFuZCBFcnJvciBmdW5jdGlvbnMgIyMjIyMKQEAgLTQ1NzgsMTEgKzQ1OTksMTEgQEAKIH0KIAogLyoqCi0qIEBicmllZiAgUmV0dXJuIHRoZSBGTVBJMkMgZXJyb3IgY29kZS4KKyAgKiBAYnJpZWYgIFJldHVybiB0aGUgRk1QSTJDIGVycm9yIGNvZGUuCiAgICogQHBhcmFtICBoZm1waTJjIFBvaW50ZXIgdG8gYSBGTVBJMkNfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucwogICAqICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBGTVBJMkMuCi0qIEByZXR2YWwgRk1QSTJDIEVycm9yIENvZGUKLSovCisgICogQHJldHZhbCBGTVBJMkMgRXJyb3IgQ29kZQorICAqLwogdWludDMyX3QgSEFMX0ZNUEkyQ19HZXRFcnJvcihGTVBJMkNfSGFuZGxlVHlwZURlZiAqaGZtcGkyYykKIHsKICAgcmV0dXJuIGhmbXBpMmMtPkVycm9yQ29kZTsKQEAgLTQ3NjgsNyArNDc4OSw4IEBACiAgICAgLyogU28gY2xlYXIgRmxhZyBOQUNLRiBvbmx5ICovCiAgICAgaWYgKGhmbXBpMmMtPlhmZXJDb3VudCA9PSAwVSkKICAgICB7Ci0gICAgICBpZiAoKGhmbXBpMmMtPlN0YXRlID09IEhBTF9GTVBJMkNfU1RBVEVfTElTVEVOKSAmJiAodG1wb3B0aW9ucyA9PSBGTVBJMkNfRklSU1RfQU5EX0xBU1RfRlJBTUUpKSAvKiBTYW1lIGFjdGlvbiBtdXN0IGJlIGRvbmUgZm9yICh0bXBvcHRpb25zID09IEZNUEkyQ19MQVNUX0ZSQU1FKSB3aGljaCByZW1vdmVkIGZvciBXYXJuaW5nW1BhMTM0XTogbGVmdCBhbmQgcmlnaHQgb3BlcmFuZHMgYXJlIGlkZW50aWNhbCAqLworICAgICAgLyogU2FtZSBhY3Rpb24gbXVzdCBiZSBkb25lIGZvciAodG1wb3B0aW9ucyA9PSBGTVBJMkNfTEFTVF9GUkFNRSkgd2hpY2ggcmVtb3ZlZCBmb3IgV2FybmluZ1tQYTEzNF06IGxlZnQgYW5kIHJpZ2h0IG9wZXJhbmRzIGFyZSBpZGVudGljYWwgKi8KKyAgICAgIGlmICgoaGZtcGkyYy0+U3RhdGUgPT0gSEFMX0ZNUEkyQ19TVEFURV9MSVNURU4pICYmICh0bXBvcHRpb25zID09IEZNUEkyQ19GSVJTVF9BTkRfTEFTVF9GUkFNRSkpCiAgICAgICB7CiAgICAgICAgIC8qIENhbGwgRk1QSTJDIExpc3RlbiBjb21wbGV0ZSBwcm9jZXNzICovCiAgICAgICAgIEZNUEkyQ19JVExpc3RlbkNwbHQoaGZtcGkyYywgdG1wSVRGbGFncyk7CkBAIC00ODI4LDcgKzQ4NTAsOCBAQAogICAgICAgRk1QSTJDX0lUU2xhdmVTZXFDcGx0KGhmbXBpMmMpOwogICAgIH0KICAgfQotICBlbHNlIGlmICgoRk1QSTJDX0NIRUNLX0ZMQUcodG1wSVRGbGFncywgRk1QSTJDX0ZMQUdfQUREUikgIT0gUkVTRVQpICYmIChGTVBJMkNfQ0hFQ0tfSVRfU09VUkNFKElUU291cmNlcywgRk1QSTJDX0lUX0FERFJJKSAhPSBSRVNFVCkpCisgIGVsc2UgaWYgKChGTVBJMkNfQ0hFQ0tfRkxBRyh0bXBJVEZsYWdzLCBGTVBJMkNfRkxBR19BRERSKSAhPSBSRVNFVCkgJiYgXAorICAgICAgICAgICAoRk1QSTJDX0NIRUNLX0lUX1NPVVJDRShJVFNvdXJjZXMsIEZNUEkyQ19JVF9BRERSSSkgIT0gUkVTRVQpKQogICB7CiAgICAgRk1QSTJDX0lUQWRkckNwbHQoaGZtcGkyYywgdG1wSVRGbGFncyk7CiAgIH0KQEAgLTQ4MzYsNyArNDg1OSw3IEBACiAgIHsKICAgICAvKiBXcml0ZSBkYXRhIHRvIFRYRFIgb25seSBpZiBYZmVyQ291bnQgbm90IHJlYWNoICIwIiAqLwogICAgIC8qIEEgVFhJUyBmbGFnIGNhbiBiZSBzZXQsIGR1cmluZyBTVE9QIHRyZWF0bWVudCAgICAgICovCi0gICAgLyogQ2hlY2sgaWYgYWxsIERhdGFzIGhhdmUgYWxyZWFkeSBiZWVuIHNlbnQgKi8KKyAgICAvKiBDaGVjayBpZiBhbGwgZGF0YSBoYXZlIGFscmVhZHkgYmVlbiBzZW50ICovCiAgICAgLyogSWYgaXQgaXMgdGhlIGNhc2UsIHRoaXMgbGFzdCB3cml0ZSBpbiBUWERSIGlzIG5vdCBzZW50LCBjb3JyZXNwb25kIHRvIGEgZHVtbXkgVFhJUyBldmVudCAqLwogICAgIGlmIChoZm1waTJjLT5YZmVyQ291bnQgPiAwVSkKICAgICB7CkBAIC01MDY0LDcgKzUwODcsOCBAQAogCiAgICAgICBpZiAodHJlYXRkbWFuYWNrID09IDFVKQogICAgICAgewotICAgICAgICBpZiAoKGhmbXBpMmMtPlN0YXRlID09IEhBTF9GTVBJMkNfU1RBVEVfTElTVEVOKSAmJiAodG1wb3B0aW9ucyA9PSBGTVBJMkNfRklSU1RfQU5EX0xBU1RfRlJBTUUpKSAvKiBTYW1lIGFjdGlvbiBtdXN0IGJlIGRvbmUgZm9yICh0bXBvcHRpb25zID09IEZNUEkyQ19MQVNUX0ZSQU1FKSB3aGljaCByZW1vdmVkIGZvciBXYXJuaW5nW1BhMTM0XTogbGVmdCBhbmQgcmlnaHQgb3BlcmFuZHMgYXJlIGlkZW50aWNhbCAqLworICAgICAgICAvKiBTYW1lIGFjdGlvbiBtdXN0IGJlIGRvbmUgZm9yICh0bXBvcHRpb25zID09IEZNUEkyQ19MQVNUX0ZSQU1FKSB3aGljaCByZW1vdmVkIGZvciBXYXJuaW5nW1BhMTM0XTogbGVmdCBhbmQgcmlnaHQgb3BlcmFuZHMgYXJlIGlkZW50aWNhbCAqLworICAgICAgICBpZiAoKGhmbXBpMmMtPlN0YXRlID09IEhBTF9GTVBJMkNfU1RBVEVfTElTVEVOKSAmJiAodG1wb3B0aW9ucyA9PSBGTVBJMkNfRklSU1RfQU5EX0xBU1RfRlJBTUUpKQogICAgICAgICB7CiAgICAgICAgICAgLyogQ2FsbCBGTVBJMkMgTGlzdGVuIGNvbXBsZXRlIHByb2Nlc3MgKi8KICAgICAgICAgICBGTVBJMkNfSVRMaXN0ZW5DcGx0KGhmbXBpMmMsIElURmxhZ3MpOwpAQCAtNTE1Miw3ICs1MTc2LDggQEAKICAgKiBAcGFyYW0gIFRpY2tzdGFydCBUaWNrIHN0YXJ0IHZhbHVlCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCi1zdGF0aWMgSEFMX1N0YXR1c1R5cGVEZWYgRk1QSTJDX1JlcXVlc3RNZW1vcnlXcml0ZShGTVBJMkNfSGFuZGxlVHlwZURlZiAqaGZtcGkyYywgdWludDE2X3QgRGV2QWRkcmVzcywgdWludDE2X3QgTWVtQWRkcmVzcywgdWludDE2X3QgTWVtQWRkU2l6ZSwgdWludDMyX3QgVGltZW91dCwgdWludDMyX3QgVGlja3N0YXJ0KQorc3RhdGljIEhBTF9TdGF0dXNUeXBlRGVmIEZNUEkyQ19SZXF1ZXN0TWVtb3J5V3JpdGUoRk1QSTJDX0hhbmRsZVR5cGVEZWYgKmhmbXBpMmMsIHVpbnQxNl90IERldkFkZHJlc3MsIHVpbnQxNl90IE1lbUFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBNZW1BZGRTaXplLCB1aW50MzJfdCBUaW1lb3V0LCB1aW50MzJfdCBUaWNrc3RhcnQpCiB7CiAgIEZNUEkyQ19UcmFuc2ZlckNvbmZpZyhoZm1waTJjLCBEZXZBZGRyZXNzLCAodWludDhfdClNZW1BZGRTaXplLCBGTVBJMkNfUkVMT0FEX01PREUsIEZNUEkyQ19HRU5FUkFURV9TVEFSVF9XUklURSk7CiAKQEAgLTUyMDUsNyArNTIzMCw4IEBACiAgICogQHBhcmFtICBUaWNrc3RhcnQgVGljayBzdGFydCB2YWx1ZQogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwotc3RhdGljIEhBTF9TdGF0dXNUeXBlRGVmIEZNUEkyQ19SZXF1ZXN0TWVtb3J5UmVhZChGTVBJMkNfSGFuZGxlVHlwZURlZiAqaGZtcGkyYywgdWludDE2X3QgRGV2QWRkcmVzcywgdWludDE2X3QgTWVtQWRkcmVzcywgdWludDE2X3QgTWVtQWRkU2l6ZSwgdWludDMyX3QgVGltZW91dCwgdWludDMyX3QgVGlja3N0YXJ0KQorc3RhdGljIEhBTF9TdGF0dXNUeXBlRGVmIEZNUEkyQ19SZXF1ZXN0TWVtb3J5UmVhZChGTVBJMkNfSGFuZGxlVHlwZURlZiAqaGZtcGkyYywgdWludDE2X3QgRGV2QWRkcmVzcywgdWludDE2X3QgTWVtQWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgTWVtQWRkU2l6ZSwgdWludDMyX3QgVGltZW91dCwgdWludDMyX3QgVGlja3N0YXJ0KQogewogICBGTVBJMkNfVHJhbnNmZXJDb25maWcoaGZtcGkyYywgRGV2QWRkcmVzcywgKHVpbnQ4X3QpTWVtQWRkU2l6ZSwgRk1QSTJDX1NPRlRFTkRfTU9ERSwgRk1QSTJDX0dFTkVSQVRFX1NUQVJUX1dSSVRFKTsKIApAQCAtNTcyMCw3ICs1NzQ2LDcgQEAKICAgfQogICBlbHNlIGlmIChoZm1waTJjLT5YZmVyT3B0aW9ucyAhPSBGTVBJMkNfTk9fT1BUSU9OX0ZSQU1FKQogICB7Ci0gICAgLyogQ2FsbCB0aGUgU2VxdWVudGlhbCBDb21wbGV0ZSBjYWxsYmFjaywgdG8gaW5mb3JtIHVwcGVyIGxheWVyIG9mIHRoZSBlbmQgb2YgVHJhbmZlciAqLworICAgIC8qIENhbGwgdGhlIFNlcXVlbnRpYWwgQ29tcGxldGUgY2FsbGJhY2ssIHRvIGluZm9ybSB1cHBlciBsYXllciBvZiB0aGUgZW5kIG9mIFRyYW5zZmVyICovCiAgICAgRk1QSTJDX0lUU2xhdmVTZXFDcGx0KGhmbXBpMmMpOwogCiAgICAgaGZtcGkyYy0+WGZlck9wdGlvbnMgPSBGTVBJMkNfTk9fT1BUSU9OX0ZSQU1FOwpAQCAtNTg1Nyw3ICs1ODgzLDcgQEAKICAgICAvKiBEaXNhYmxlIGFsbCBpbnRlcnJ1cHRzICovCiAgICAgRk1QSTJDX0Rpc2FibGVfSVJRKGhmbXBpMmMsIEZNUEkyQ19YRkVSX0xJU1RFTl9JVCB8IEZNUEkyQ19YRkVSX1JYX0lUIHwgRk1QSTJDX1hGRVJfVFhfSVQpOwogCi0gICAgLyogSWYgc3RhdGUgaXMgYW4gYWJvcnQgdHJlYXRtZW50IG9uIGdvaW5kLCBkb24ndCBjaGFuZ2Ugc3RhdGUgKi8KKyAgICAvKiBJZiBzdGF0ZSBpcyBhbiBhYm9ydCB0cmVhdG1lbnQgb24gZ29pbmcsIGRvbid0IGNoYW5nZSBzdGF0ZSAqLwogICAgIC8qIFRoaXMgY2hhbmdlIHdpbGwgYmUgZG8gbGF0ZXIgKi8KICAgICBpZiAoaGZtcGkyYy0+U3RhdGUgIT0gSEFMX0ZNUEkyQ19TVEFURV9BQk9SVCkKICAgICB7CkBAIC01ODY5LDcgKzU4OTUsOCBAQAogCiAgIC8qIEFib3J0IERNQSBUWCB0cmFuc2ZlciBpZiBhbnkgKi8KICAgdG1wcHJldmlvdXNzdGF0ZSA9IGhmbXBpMmMtPlByZXZpb3VzU3RhdGU7Ci0gIGlmICgoaGZtcGkyYy0+aGRtYXR4ICE9IE5VTEwpICYmICgodG1wcHJldmlvdXNzdGF0ZSA9PSBGTVBJMkNfU1RBVEVfTUFTVEVSX0JVU1lfVFgpIHx8ICh0bXBwcmV2aW91c3N0YXRlID09IEZNUEkyQ19TVEFURV9TTEFWRV9CVVNZX1RYKSkpCisgIGlmICgoaGZtcGkyYy0+aGRtYXR4ICE9IE5VTEwpICYmICgodG1wcHJldmlvdXNzdGF0ZSA9PSBGTVBJMkNfU1RBVEVfTUFTVEVSX0JVU1lfVFgpIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0bXBwcmV2aW91c3N0YXRlID09IEZNUEkyQ19TVEFURV9TTEFWRV9CVVNZX1RYKSkpCiAgIHsKICAgICBpZiAoKGhmbXBpMmMtPkluc3RhbmNlLT5DUjEgJiBGTVBJMkNfQ1IxX1RYRE1BRU4pID09IEZNUEkyQ19DUjFfVFhETUFFTikKICAgICB7CkBAIC01ODk4LDcgKzU5MjUsOCBAQAogICAgIH0KICAgfQogICAvKiBBYm9ydCBETUEgUlggdHJhbnNmZXIgaWYgYW55ICovCi0gIGVsc2UgaWYgKChoZm1waTJjLT5oZG1hcnggIT0gTlVMTCkgJiYgKCh0bXBwcmV2aW91c3N0YXRlID09IEZNUEkyQ19TVEFURV9NQVNURVJfQlVTWV9SWCkgfHwgKHRtcHByZXZpb3Vzc3RhdGUgPT0gRk1QSTJDX1NUQVRFX1NMQVZFX0JVU1lfUlgpKSkKKyAgZWxzZSBpZiAoKGhmbXBpMmMtPmhkbWFyeCAhPSBOVUxMKSAmJiAoKHRtcHByZXZpb3Vzc3RhdGUgPT0gRk1QSTJDX1NUQVRFX01BU1RFUl9CVVNZX1JYKSB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0bXBwcmV2aW91c3N0YXRlID09IEZNUEkyQ19TVEFURV9TTEFWRV9CVVNZX1JYKSkpCiAgIHsKICAgICBpZiAoKGhmbXBpMmMtPkluc3RhbmNlLT5DUjEgJiBGTVBJMkNfQ1IxX1JYRE1BRU4pID09IEZNUEkyQ19DUjFfUlhETUFFTikKICAgICB7CkBAIC02MjExLDcgKzYyMzksOCBAQAogICAqIEBwYXJhbSAgVGlja3N0YXJ0IFRpY2sgc3RhcnQgdmFsdWUKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KLXN0YXRpYyBIQUxfU3RhdHVzVHlwZURlZiBGTVBJMkNfV2FpdE9uRmxhZ1VudGlsVGltZW91dChGTVBJMkNfSGFuZGxlVHlwZURlZiAqaGZtcGkyYywgdWludDMyX3QgRmxhZywgRmxhZ1N0YXR1cyBTdGF0dXMsIHVpbnQzMl90IFRpbWVvdXQsIHVpbnQzMl90IFRpY2tzdGFydCkKK3N0YXRpYyBIQUxfU3RhdHVzVHlwZURlZiBGTVBJMkNfV2FpdE9uRmxhZ1VudGlsVGltZW91dChGTVBJMkNfSGFuZGxlVHlwZURlZiAqaGZtcGkyYywgdWludDMyX3QgRmxhZywgRmxhZ1N0YXR1cyBTdGF0dXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgVGltZW91dCwgdWludDMyX3QgVGlja3N0YXJ0KQogewogICB3aGlsZSAoX19IQUxfRk1QSTJDX0dFVF9GTEFHKGhmbXBpMmMsIEZsYWcpID09IFN0YXR1cykKICAgewpAQCAtNjQ0Myw3ICs2NDcyLDggQEAKICAgKiAgICAgQGFyZyBAcmVmIEZNUEkyQ19HRU5FUkFURV9TVEFSVF9XUklURSBHZW5lcmF0ZSBSZXN0YXJ0IGZvciB3cml0ZSByZXF1ZXN0LgogICAqIEByZXR2YWwgTm9uZQogICAqLwotc3RhdGljIHZvaWQgRk1QSTJDX1RyYW5zZmVyQ29uZmlnKEZNUEkyQ19IYW5kbGVUeXBlRGVmICpoZm1waTJjLCB1aW50MTZfdCBEZXZBZGRyZXNzLCB1aW50OF90IFNpemUsIHVpbnQzMl90IE1vZGUsIHVpbnQzMl90IFJlcXVlc3QpCitzdGF0aWMgdm9pZCBGTVBJMkNfVHJhbnNmZXJDb25maWcoRk1QSTJDX0hhbmRsZVR5cGVEZWYgKmhmbXBpMmMsIHVpbnQxNl90IERldkFkZHJlc3MsIHVpbnQ4X3QgU2l6ZSwgdWludDMyX3QgTW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBSZXF1ZXN0KQogewogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfRk1QSTJDX0FMTF9JTlNUQU5DRShoZm1waTJjLT5JbnN0YW5jZSkpOwpAQCAtNjQ1MSw4ICs2NDgxLDExIEBACiAgIGFzc2VydF9wYXJhbShJU19UUkFOU0ZFUl9SRVFVRVNUKFJlcXVlc3QpKTsKIAogICAvKiB1cGRhdGUgQ1IyIHJlZ2lzdGVyICovCi0gIE1PRElGWV9SRUcoaGZtcGkyYy0+SW5zdGFuY2UtPkNSMiwgKChGTVBJMkNfQ1IyX1NBREQgfCBGTVBJMkNfQ1IyX05CWVRFUyB8IEZNUEkyQ19DUjJfUkVMT0FEIHwgRk1QSTJDX0NSMl9BVVRPRU5EIHwgKEZNUEkyQ19DUjJfUkRfV1JOICYgKHVpbnQzMl90KShSZXF1ZXN0ID4+ICgzMVUgLSBGTVBJMkNfQ1IyX1JEX1dSTl9Qb3MpKSkgfCBGTVBJMkNfQ1IyX1NUQVJUIHwgRk1QSTJDX0NSMl9TVE9QKSksIFwKLSAgICAgICAgICAgICAodWludDMyX3QpKCgodWludDMyX3QpRGV2QWRkcmVzcyAmIEZNUEkyQ19DUjJfU0FERCkgfCAoKCh1aW50MzJfdClTaXplIDw8IEZNUEkyQ19DUjJfTkJZVEVTX1BvcykgJiBGTVBJMkNfQ1IyX05CWVRFUykgfCAodWludDMyX3QpTW9kZSB8ICh1aW50MzJfdClSZXF1ZXN0KSk7CisgIE1PRElGWV9SRUcoaGZtcGkyYy0+SW5zdGFuY2UtPkNSMiwKKyAgICAgICAgICAgICAoKEZNUEkyQ19DUjJfU0FERCB8IEZNUEkyQ19DUjJfTkJZVEVTIHwgRk1QSTJDX0NSMl9SRUxPQUQgfCBGTVBJMkNfQ1IyX0FVVE9FTkQgfCBcCisgICAgICAgICAgICAgICAoRk1QSTJDX0NSMl9SRF9XUk4gJiAodWludDMyX3QpKFJlcXVlc3QgPj4gKDMxVSAtIEZNUEkyQ19DUjJfUkRfV1JOX1BvcykpKSB8IEZNUEkyQ19DUjJfU1RBUlQgfCBGTVBJMkNfQ1IyX1NUT1ApKSwgXAorICAgICAgICAgICAgICh1aW50MzJfdCkoKCh1aW50MzJfdClEZXZBZGRyZXNzICYgRk1QSTJDX0NSMl9TQUREKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdClTaXplIDw8IEZNUEkyQ19DUjJfTkJZVEVTX1BvcykgJiBGTVBJMkNfQ1IyX05CWVRFUykgfCAodWludDMyX3QpTW9kZSB8ICh1aW50MzJfdClSZXF1ZXN0KSk7CiB9CiAKIC8qKgpAQCAtNjU5Miw3ICs2NjI1LDcgQEAKIH0KIAogLyoqCi0gICogQGJyaWVmICBDb252ZXJ0IEZNUEkyQ3ggT1RIRVJfeHh4IFhmZXJPcHRpb25zIHRvIGZ1bmN0aW9ubmFsIFhmZXJPcHRpb25zLgorICAqIEBicmllZiAgQ29udmVydCBGTVBJMkN4IE9USEVSX3h4eCBYZmVyT3B0aW9ucyB0byBmdW5jdGlvbmFsIFhmZXJPcHRpb25zLgogICAqIEBwYXJhbSAgaGZtcGkyYyBGTVBJMkMgaGFuZGxlLgogICAqIEByZXR2YWwgTm9uZQogICAqLwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjR4eF9oYWxfZm1waTJjX2V4LmMgYi9TcmMvc3RtMzJmNHh4X2hhbF9mbXBpMmNfZXguYwppbmRleCBmZjk5NmU3Li5hNmFjYzllIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmNHh4X2hhbF9mbXBpMmNfZXguYworKysgYi9TcmMvc3RtMzJmNHh4X2hhbF9mbXBpMmNfZXguYwpAQCAtNzAsNyArNzAsNyBAQAogCiAvKiogQGRlZmdyb3VwIEZNUEkyQ0V4X0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDEgRXh0ZW5kZWQgZmVhdHVyZXMgZnVuY3Rpb25zCiAgICogQGJyaWVmICAgIEV4dGVuZGVkIGZlYXR1cmVzIGZ1bmN0aW9ucwotICoKKyAgKgogQHZlcmJhdGltCiAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAgICAgICAgICAgICAgICAgICMjIyMjIEV4dGVuZGVkIGZlYXR1cmVzIGZ1bmN0aW9ucyAjIyMjIwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjR4eF9oYWxfZm1wc21idXMuYyBiL1NyYy9zdG0zMmY0eHhfaGFsX2ZtcHNtYnVzLmMKaW5kZXggZGRhNjI5MC4uYzJiYzc3OSAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZjR4eF9oYWxfZm1wc21idXMuYworKysgYi9TcmMvc3RtMzJmNHh4X2hhbF9mbXBzbWJ1cy5jCkBAIC0yMDQsNyArMjA0LDggQEAKIC8qKiBAYWRkdG9ncm91cCBGTVBTTUJVU19Qcml2YXRlX0Z1bmN0aW9ucyBGTVBTTUJVUyBQcml2YXRlIEZ1bmN0aW9ucwogICAqIEB7CiAgICovCi1zdGF0aWMgSEFMX1N0YXR1c1R5cGVEZWYgRk1QU01CVVNfV2FpdE9uRmxhZ1VudGlsVGltZW91dChGTVBTTUJVU19IYW5kbGVUeXBlRGVmICpoZm1wc21idXMsIHVpbnQzMl90IEZsYWcsIEZsYWdTdGF0dXMgU3RhdHVzLCB1aW50MzJfdCBUaW1lb3V0KTsKK3N0YXRpYyBIQUxfU3RhdHVzVHlwZURlZiBGTVBTTUJVU19XYWl0T25GbGFnVW50aWxUaW1lb3V0KEZNUFNNQlVTX0hhbmRsZVR5cGVEZWYgKmhmbXBzbWJ1cywgdWludDMyX3QgRmxhZywgRmxhZ1N0YXR1cyBTdGF0dXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBUaW1lb3V0KTsKIAogc3RhdGljIHZvaWQgRk1QU01CVVNfRW5hYmxlX0lSUShGTVBTTUJVU19IYW5kbGVUeXBlRGVmICpoZm1wc21idXMsIHVpbnQzMl90IEludGVycnVwdFJlcXVlc3QpOwogc3RhdGljIHZvaWQgRk1QU01CVVNfRGlzYWJsZV9JUlEoRk1QU01CVVNfSGFuZGxlVHlwZURlZiAqaGZtcHNtYnVzLCB1aW50MzJfdCBJbnRlcnJ1cHRSZXF1ZXN0KTsKQEAgLTIxNSw3ICsyMTYsOCBAQAogCiBzdGF0aWMgdm9pZCBGTVBTTUJVU19JVEVycm9ySGFuZGxlcihGTVBTTUJVU19IYW5kbGVUeXBlRGVmICpoZm1wc21idXMpOwogCi1zdGF0aWMgdm9pZCBGTVBTTUJVU19UcmFuc2ZlckNvbmZpZyhGTVBTTUJVU19IYW5kbGVUeXBlRGVmICpoZm1wc21idXMsICB1aW50MTZfdCBEZXZBZGRyZXNzLCB1aW50OF90IFNpemUsIHVpbnQzMl90IE1vZGUsIHVpbnQzMl90IFJlcXVlc3QpOworc3RhdGljIHZvaWQgRk1QU01CVVNfVHJhbnNmZXJDb25maWcoRk1QU01CVVNfSGFuZGxlVHlwZURlZiAqaGZtcHNtYnVzLCAgdWludDE2X3QgRGV2QWRkcmVzcywgdWludDhfdCBTaXplLCB1aW50MzJfdCBNb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgUmVxdWVzdCk7CiAvKioKICAgKiBAfQogICAqLwpAQCAtMjI3LDggKzIyOSw4IEBACiAgICovCiAKIC8qKiBAZGVmZ3JvdXAgRk1QU01CVVNfRXhwb3J0ZWRfRnVuY3Rpb25zX0dyb3VwMSBJbml0aWFsaXphdGlvbiBhbmQgZGUtaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zCi0gKiAgQGJyaWVmICAgIEluaXRpYWxpemF0aW9uIGFuZCBDb25maWd1cmF0aW9uIGZ1bmN0aW9ucwotICoKKyAgKiAgQGJyaWVmICAgIEluaXRpYWxpemF0aW9uIGFuZCBDb25maWd1cmF0aW9uIGZ1bmN0aW9ucworICAqCiBAdmVyYmF0aW0KICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgICAgICAgICMjIyMjIEluaXRpYWxpemF0aW9uIGFuZCBkZS1pbml0aWFsaXphdGlvbiBmdW5jdGlvbnMgIyMjIyMKQEAgLTU4MCw3ICs1ODIsOCBAQAogICAqIEBwYXJhbSAgcENhbGxiYWNrIHBvaW50ZXIgdG8gdGhlIENhbGxiYWNrIGZ1bmN0aW9uCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfRk1QU01CVVNfUmVnaXN0ZXJDYWxsYmFjayhGTVBTTUJVU19IYW5kbGVUeXBlRGVmICpoZm1wc21idXMsIEhBTF9GTVBTTUJVU19DYWxsYmFja0lEVHlwZURlZiBDYWxsYmFja0lELCBwRk1QU01CVVNfQ2FsbGJhY2tUeXBlRGVmIHBDYWxsYmFjaykKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9GTVBTTUJVU19SZWdpc3RlckNhbGxiYWNrKEZNUFNNQlVTX0hhbmRsZVR5cGVEZWYgKmhmbXBzbWJ1cywgSEFMX0ZNUFNNQlVTX0NhbGxiYWNrSURUeXBlRGVmIENhbGxiYWNrSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwRk1QU01CVVNfQ2FsbGJhY2tUeXBlRGVmIHBDYWxsYmFjaykKIHsKICAgSEFMX1N0YXR1c1R5cGVEZWYgc3RhdHVzID0gSEFMX09LOwogCkBAIC04NTksOCArODYyLDggQEAKICAgKi8KIAogLyoqIEBkZWZncm91cCBGTVBTTUJVU19FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXAyIElucHV0IGFuZCBPdXRwdXQgb3BlcmF0aW9uIGZ1bmN0aW9ucwotICogIEBicmllZiAgIERhdGEgdHJhbnNmZXJzIGZ1bmN0aW9ucwotICoKKyAgKiAgQGJyaWVmICAgRGF0YSB0cmFuc2ZlcnMgZnVuY3Rpb25zCisgICoKIEB2ZXJiYXRpbQogID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgICAgICAgICAgICAgICAgICAjIyMjIyBJTyBvcGVyYXRpb24gZnVuY3Rpb25zICMjIyMjCkBAIC05MTIsNyArOTE1LDggQEAKICAgKiBAcGFyYW0gIFhmZXJPcHRpb25zIE9wdGlvbnMgb2YgVHJhbnNmZXIsIHZhbHVlIG9mIEByZWYgRk1QU01CVVNfWGZlck9wdGlvbnNfZGVmaW5pdGlvbgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0ZNUFNNQlVTX01hc3Rlcl9UcmFuc21pdF9JVChGTVBTTUJVU19IYW5kbGVUeXBlRGVmICpoZm1wc21idXMsIHVpbnQxNl90IERldkFkZHJlc3MsIHVpbnQ4X3QgKnBEYXRhLCB1aW50MTZfdCBTaXplLCB1aW50MzJfdCBYZmVyT3B0aW9ucykKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9GTVBTTUJVU19NYXN0ZXJfVHJhbnNtaXRfSVQoRk1QU01CVVNfSGFuZGxlVHlwZURlZiAqaGZtcHNtYnVzLCB1aW50MTZfdCBEZXZBZGRyZXNzLCB1aW50OF90ICpwRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgU2l6ZSwgdWludDMyX3QgWGZlck9wdGlvbnMpCiB7CiAgIHVpbnQzMl90IHRtcDsKIApAQCAtOTUxLDcgKzk1NSw4IEBACiAgICAgLyogU2V0IE5CWVRFUyB0byB3cml0ZSBhbmQgcmVsb2FkIGlmIHNpemUgPiBNQVhfTkJZVEVfU0laRSBhbmQgZ2VuZXJhdGUgUkVTVEFSVCAqLwogICAgIGlmICgoaGZtcHNtYnVzLT5YZmVyU2l6ZSA8IGhmbXBzbWJ1cy0+WGZlckNvdW50KSAmJiAoaGZtcHNtYnVzLT5YZmVyU2l6ZSA9PSBNQVhfTkJZVEVfU0laRSkpCiAgICAgewotICAgICAgRk1QU01CVVNfVHJhbnNmZXJDb25maWcoaGZtcHNtYnVzLCBEZXZBZGRyZXNzLCAodWludDhfdCloZm1wc21idXMtPlhmZXJTaXplLCBGTVBTTUJVU19SRUxPQURfTU9ERSB8IChoZm1wc21idXMtPlhmZXJPcHRpb25zICYgRk1QU01CVVNfU0VORFBFQ19NT0RFKSwgRk1QU01CVVNfR0VORVJBVEVfU1RBUlRfV1JJVEUpOworICAgICAgRk1QU01CVVNfVHJhbnNmZXJDb25maWcoaGZtcHNtYnVzLCBEZXZBZGRyZXNzLCAodWludDhfdCloZm1wc21idXMtPlhmZXJTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRk1QU01CVVNfUkVMT0FEX01PREUgfCAoaGZtcHNtYnVzLT5YZmVyT3B0aW9ucyAmIEZNUFNNQlVTX1NFTkRQRUNfTU9ERSksIEZNUFNNQlVTX0dFTkVSQVRFX1NUQVJUX1dSSVRFKTsKICAgICB9CiAgICAgZWxzZQogICAgIHsKQEAgLTEwMTEsNyArMTAxNiw4IEBACiAgICogQHBhcmFtICBYZmVyT3B0aW9ucyBPcHRpb25zIG9mIFRyYW5zZmVyLCB2YWx1ZSBvZiBAcmVmIEZNUFNNQlVTX1hmZXJPcHRpb25zX2RlZmluaXRpb24KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9GTVBTTUJVU19NYXN0ZXJfUmVjZWl2ZV9JVChGTVBTTUJVU19IYW5kbGVUeXBlRGVmICpoZm1wc21idXMsIHVpbnQxNl90IERldkFkZHJlc3MsIHVpbnQ4X3QgKnBEYXRhLCB1aW50MTZfdCBTaXplLCB1aW50MzJfdCBYZmVyT3B0aW9ucykKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9GTVBTTUJVU19NYXN0ZXJfUmVjZWl2ZV9JVChGTVBTTUJVU19IYW5kbGVUeXBlRGVmICpoZm1wc21idXMsIHVpbnQxNl90IERldkFkZHJlc3MsIHVpbnQ4X3QgKnBEYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IFNpemUsIHVpbnQzMl90IFhmZXJPcHRpb25zKQogewogICB1aW50MzJfdCB0bXA7CiAKQEAgLTEwNTEsNyArMTA1Nyw4IEBACiAgICAgLyogU2V0IE5CWVRFUyB0byB3cml0ZSBhbmQgcmVsb2FkIGlmIHNpemUgPiBNQVhfTkJZVEVfU0laRSBhbmQgZ2VuZXJhdGUgUkVTVEFSVCAqLwogICAgIGlmICgoaGZtcHNtYnVzLT5YZmVyU2l6ZSA8IGhmbXBzbWJ1cy0+WGZlckNvdW50KSAmJiAoaGZtcHNtYnVzLT5YZmVyU2l6ZSA9PSBNQVhfTkJZVEVfU0laRSkpCiAgICAgewotICAgICAgRk1QU01CVVNfVHJhbnNmZXJDb25maWcoaGZtcHNtYnVzLCBEZXZBZGRyZXNzLCAodWludDhfdCloZm1wc21idXMtPlhmZXJTaXplLCBGTVBTTUJVU19SRUxPQURfTU9ERSAgfCAoaGZtcHNtYnVzLT5YZmVyT3B0aW9ucyAmIEZNUFNNQlVTX1NFTkRQRUNfTU9ERSksIEZNUFNNQlVTX0dFTkVSQVRFX1NUQVJUX1JFQUQpOworICAgICAgRk1QU01CVVNfVHJhbnNmZXJDb25maWcoaGZtcHNtYnVzLCBEZXZBZGRyZXNzLCAodWludDhfdCloZm1wc21idXMtPlhmZXJTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRk1QU01CVVNfUkVMT0FEX01PREUgIHwgKGhmbXBzbWJ1cy0+WGZlck9wdGlvbnMgJiBGTVBTTUJVU19TRU5EUEVDX01PREUpLCBGTVBTTUJVU19HRU5FUkFURV9TVEFSVF9SRUFEKTsKICAgICB9CiAgICAgZWxzZQogICAgIHsKQEAgLTExNjYsNyArMTE3Myw4IEBACiAgICogQHBhcmFtICBYZmVyT3B0aW9ucyBPcHRpb25zIG9mIFRyYW5zZmVyLCB2YWx1ZSBvZiBAcmVmIEZNUFNNQlVTX1hmZXJPcHRpb25zX2RlZmluaXRpb24KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9GTVBTTUJVU19TbGF2ZV9UcmFuc21pdF9JVChGTVBTTUJVU19IYW5kbGVUeXBlRGVmICpoZm1wc21idXMsIHVpbnQ4X3QgKnBEYXRhLCB1aW50MTZfdCBTaXplLCB1aW50MzJfdCBYZmVyT3B0aW9ucykKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9GTVBTTUJVU19TbGF2ZV9UcmFuc21pdF9JVChGTVBTTUJVU19IYW5kbGVUeXBlRGVmICpoZm1wc21idXMsIHVpbnQ4X3QgKnBEYXRhLCB1aW50MTZfdCBTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IFhmZXJPcHRpb25zKQogewogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfRk1QU01CVVNfVFJBTlNGRVJfT1BUSU9OU19SRVFVRVNUKFhmZXJPcHRpb25zKSk7CkBAIC0xMjE0LDcgKzEyMjIsOCBAQAogICAgIC8qIFNldCBOQllURVMgdG8gd3JpdGUgYW5kIHJlbG9hZCBpZiBzaXplID4gTUFYX05CWVRFX1NJWkUgYW5kIGdlbmVyYXRlIFJFU1RBUlQgKi8KICAgICBpZiAoKGhmbXBzbWJ1cy0+WGZlclNpemUgPCBoZm1wc21idXMtPlhmZXJDb3VudCkgJiYgKGhmbXBzbWJ1cy0+WGZlclNpemUgPT0gTUFYX05CWVRFX1NJWkUpKQogICAgIHsKLSAgICAgIEZNUFNNQlVTX1RyYW5zZmVyQ29uZmlnKGhmbXBzbWJ1cywgMCwgKHVpbnQ4X3QpaGZtcHNtYnVzLT5YZmVyU2l6ZSwgRk1QU01CVVNfUkVMT0FEX01PREUgfCAoaGZtcHNtYnVzLT5YZmVyT3B0aW9ucyAmIEZNUFNNQlVTX1NFTkRQRUNfTU9ERSksIEZNUFNNQlVTX05PX1NUQVJUU1RPUCk7CisgICAgICBGTVBTTUJVU19UcmFuc2ZlckNvbmZpZyhoZm1wc21idXMsIDAsICh1aW50OF90KWhmbXBzbWJ1cy0+WGZlclNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGTVBTTUJVU19SRUxPQURfTU9ERSB8IChoZm1wc21idXMtPlhmZXJPcHRpb25zICYgRk1QU01CVVNfU0VORFBFQ19NT0RFKSwgRk1QU01CVVNfTk9fU1RBUlRTVE9QKTsKICAgICB9CiAgICAgZWxzZQogICAgIHsKQEAgLTEyNjAsNyArMTI2OSw4IEBACiAgICogQHBhcmFtICBYZmVyT3B0aW9ucyBPcHRpb25zIG9mIFRyYW5zZmVyLCB2YWx1ZSBvZiBAcmVmIEZNUFNNQlVTX1hmZXJPcHRpb25zX2RlZmluaXRpb24KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9GTVBTTUJVU19TbGF2ZV9SZWNlaXZlX0lUKEZNUFNNQlVTX0hhbmRsZVR5cGVEZWYgKmhmbXBzbWJ1cywgdWludDhfdCAqcERhdGEsIHVpbnQxNl90IFNpemUsIHVpbnQzMl90IFhmZXJPcHRpb25zKQorSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0ZNUFNNQlVTX1NsYXZlX1JlY2VpdmVfSVQoRk1QU01CVVNfSGFuZGxlVHlwZURlZiAqaGZtcHNtYnVzLCB1aW50OF90ICpwRGF0YSwgdWludDE2X3QgU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IFhmZXJPcHRpb25zKQogewogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfRk1QU01CVVNfVFJBTlNGRVJfT1BUSU9OU19SRVFVRVNUKFhmZXJPcHRpb25zKSk7CkBAIC0xNDE4LDcgKzE0MjgsOCBAQAogICAqIEBwYXJhbSAgVGltZW91dCBUaW1lb3V0IGR1cmF0aW9uCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfRk1QU01CVVNfSXNEZXZpY2VSZWFkeShGTVBTTUJVU19IYW5kbGVUeXBlRGVmICpoZm1wc21idXMsIHVpbnQxNl90IERldkFkZHJlc3MsIHVpbnQzMl90IFRyaWFscywgdWludDMyX3QgVGltZW91dCkKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9GTVBTTUJVU19Jc0RldmljZVJlYWR5KEZNUFNNQlVTX0hhbmRsZVR5cGVEZWYgKmhmbXBzbWJ1cywgdWludDE2X3QgRGV2QWRkcmVzcywgdWludDMyX3QgVHJpYWxzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgVGltZW91dCkKIHsKICAgdWludDMyX3QgdGlja3N0YXJ0OwogCkBAIC0xNTI3LDggKzE1MzgsNyBAQAogCiAgICAgICAvKiBJbmNyZW1lbnQgVHJpYWxzICovCiAgICAgICBGTVBTTUJVU19UcmlhbHMrKzsKLSAgICB9Ci0gICAgd2hpbGUgKEZNUFNNQlVTX1RyaWFscyA8IFRyaWFscyk7CisgICAgfSB3aGlsZSAoRk1QU01CVVNfVHJpYWxzIDwgVHJpYWxzKTsKIAogICAgIGhmbXBzbWJ1cy0+U3RhdGUgPSBIQUxfRk1QU01CVVNfU1RBVEVfUkVBRFk7CiAKQEAgLTE1NTAsOCArMTU2MCw4IEBACiAgICovCiAKIC8qKiBAZGVmZ3JvdXAgRk1QU01CVVNfSVJRX0hhbmRsZXJfYW5kX0NhbGxiYWNrcyBJUlEgSGFuZGxlciBhbmQgQ2FsbGJhY2tzCi0gKiBAewotICovCisgICogQHsKKyAgKi8KIAogLyoqCiAgICogQGJyaWVmICBIYW5kbGUgRk1QU01CVVMgZXZlbnQgaW50ZXJydXB0IHJlcXVlc3QuCkBAIC0xNTY3LDcgKzE1NzcsMTIgQEAKICAgdWludDMyX3QgdG1wY3IxdmFsdWUgPSBSRUFEX1JFRyhoZm1wc21idXMtPkluc3RhbmNlLT5DUjEpOwogCiAgIC8qIEZNUFNNQlVTIGluIG1vZGUgVHJhbnNtaXR0ZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSAgaWYgKChGTVBTTUJVU19DSEVDS19JVF9TT1VSQ0UodG1wY3IxdmFsdWUsIChGTVBTTUJVU19JVF9UQ0kgfCBGTVBTTUJVU19JVF9TVE9QSSB8IEZNUFNNQlVTX0lUX05BQ0tJIHwgRk1QU01CVVNfSVRfVFhJKSkgIT0gUkVTRVQpICYmICgoRk1QU01CVVNfQ0hFQ0tfRkxBRyh0bXBpc3J2YWx1ZSwgRk1QU01CVVNfRkxBR19UWElTKSAhPSBSRVNFVCkgfHwgKEZNUFNNQlVTX0NIRUNLX0ZMQUcodG1waXNydmFsdWUsIEZNUFNNQlVTX0ZMQUdfVENSKSAhPSBSRVNFVCkgfHwgKEZNUFNNQlVTX0NIRUNLX0ZMQUcodG1waXNydmFsdWUsIEZNUFNNQlVTX0ZMQUdfVEMpICE9IFJFU0VUKSB8fCAoRk1QU01CVVNfQ0hFQ0tfRkxBRyh0bXBpc3J2YWx1ZSwgRk1QU01CVVNfRkxBR19TVE9QRikgIT0gUkVTRVQpIHx8IChGTVBTTUJVU19DSEVDS19GTEFHKHRtcGlzcnZhbHVlLCBGTVBTTUJVU19GTEFHX0FGKSAhPSBSRVNFVCkpKQorICBpZiAoKEZNUFNNQlVTX0NIRUNLX0lUX1NPVVJDRSh0bXBjcjF2YWx1ZSwgKEZNUFNNQlVTX0lUX1RDSSB8IEZNUFNNQlVTX0lUX1NUT1BJIHwgRk1QU01CVVNfSVRfTkFDS0kgfCBGTVBTTUJVU19JVF9UWEkpKSAhPSBSRVNFVCkgJiYKKyAgICAgICgoRk1QU01CVVNfQ0hFQ0tfRkxBRyh0bXBpc3J2YWx1ZSwgRk1QU01CVVNfRkxBR19UWElTKSAhPSBSRVNFVCkgfHwKKyAgICAgICAoRk1QU01CVVNfQ0hFQ0tfRkxBRyh0bXBpc3J2YWx1ZSwgRk1QU01CVVNfRkxBR19UQ1IpICE9IFJFU0VUKSB8fAorICAgICAgIChGTVBTTUJVU19DSEVDS19GTEFHKHRtcGlzcnZhbHVlLCBGTVBTTUJVU19GTEFHX1RDKSAhPSBSRVNFVCkgfHwKKyAgICAgICAoRk1QU01CVVNfQ0hFQ0tfRkxBRyh0bXBpc3J2YWx1ZSwgRk1QU01CVVNfRkxBR19TVE9QRikgIT0gUkVTRVQpIHx8CisgICAgICAgKEZNUFNNQlVTX0NIRUNLX0ZMQUcodG1waXNydmFsdWUsIEZNUFNNQlVTX0ZMQUdfQUYpICE9IFJFU0VUKSkpCiAgIHsKICAgICAvKiBTbGF2ZSBtb2RlIHNlbGVjdGVkICovCiAgICAgaWYgKChoZm1wc21idXMtPlN0YXRlICYgSEFMX0ZNUFNNQlVTX1NUQVRFX1NMQVZFX0JVU1lfVFgpID09IEhBTF9GTVBTTUJVU19TVEFURV9TTEFWRV9CVVNZX1RYKQpAQCAtMTU4Niw3ICsxNjAxLDEyIEBACiAgIH0KIAogICAvKiBGTVBTTUJVUyBpbiBtb2RlIFJlY2VpdmVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotICBpZiAoKEZNUFNNQlVTX0NIRUNLX0lUX1NPVVJDRSh0bXBjcjF2YWx1ZSwgKEZNUFNNQlVTX0lUX1RDSSB8IEZNUFNNQlVTX0lUX1NUT1BJIHwgRk1QU01CVVNfSVRfTkFDS0kgfCBGTVBTTUJVU19JVF9SWEkpKSAhPSBSRVNFVCkgJiYgKChGTVBTTUJVU19DSEVDS19GTEFHKHRtcGlzcnZhbHVlLCBGTVBTTUJVU19GTEFHX1JYTkUpICE9IFJFU0VUKSB8fCAoRk1QU01CVVNfQ0hFQ0tfRkxBRyh0bXBpc3J2YWx1ZSwgRk1QU01CVVNfRkxBR19UQ1IpICE9IFJFU0VUKSB8fCAoRk1QU01CVVNfQ0hFQ0tfRkxBRyh0bXBpc3J2YWx1ZSwgRk1QU01CVVNfRkxBR19UQykgIT0gUkVTRVQpIHx8IChGTVBTTUJVU19DSEVDS19GTEFHKHRtcGlzcnZhbHVlLCBGTVBTTUJVU19GTEFHX1NUT1BGKSAhPSBSRVNFVCkgfHwgKEZNUFNNQlVTX0NIRUNLX0ZMQUcodG1waXNydmFsdWUsIEZNUFNNQlVTX0ZMQUdfQUYpICE9IFJFU0VUKSkpCisgIGlmICgoRk1QU01CVVNfQ0hFQ0tfSVRfU09VUkNFKHRtcGNyMXZhbHVlLCAoRk1QU01CVVNfSVRfVENJIHwgRk1QU01CVVNfSVRfU1RPUEkgfCBGTVBTTUJVU19JVF9OQUNLSSB8IEZNUFNNQlVTX0lUX1JYSSkpICE9IFJFU0VUKSAmJgorICAgICAgKChGTVBTTUJVU19DSEVDS19GTEFHKHRtcGlzcnZhbHVlLCBGTVBTTUJVU19GTEFHX1JYTkUpICE9IFJFU0VUKSB8fAorICAgICAgIChGTVBTTUJVU19DSEVDS19GTEFHKHRtcGlzcnZhbHVlLCBGTVBTTUJVU19GTEFHX1RDUikgIT0gUkVTRVQpIHx8CisgICAgICAgKEZNUFNNQlVTX0NIRUNLX0ZMQUcodG1waXNydmFsdWUsIEZNUFNNQlVTX0ZMQUdfVEMpICE9IFJFU0VUKSB8fAorICAgICAgIChGTVBTTUJVU19DSEVDS19GTEFHKHRtcGlzcnZhbHVlLCBGTVBTTUJVU19GTEFHX1NUT1BGKSAhPSBSRVNFVCkgfHwKKyAgICAgICAoRk1QU01CVVNfQ0hFQ0tfRkxBRyh0bXBpc3J2YWx1ZSwgRk1QU01CVVNfRkxBR19BRikgIT0gUkVTRVQpKSkKICAgewogICAgIC8qIFNsYXZlIG1vZGUgc2VsZWN0ZWQgKi8KICAgICBpZiAoKGhmbXBzbWJ1cy0+U3RhdGUgJiBIQUxfRk1QU01CVVNfU1RBVEVfU0xBVkVfQlVTWV9SWCkgPT0gSEFMX0ZNUFNNQlVTX1NUQVRFX1NMQVZFX0JVU1lfUlgpCkBAIC0xNjA1LDcgKzE2MjUsMTIgQEAKICAgfQogCiAgIC8qIEZNUFNNQlVTIGluIG1vZGUgTGlzdGVuZXIgT25seSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0gIGlmICgoKEZNUFNNQlVTX0NIRUNLX0lUX1NPVVJDRSh0bXBjcjF2YWx1ZSwgRk1QU01CVVNfSVRfQUREUkkpICE9IFJFU0VUKSB8fCAoRk1QU01CVVNfQ0hFQ0tfSVRfU09VUkNFKHRtcGNyMXZhbHVlLCBGTVBTTUJVU19JVF9TVE9QSSkgIT0gUkVTRVQpIHx8IChGTVBTTUJVU19DSEVDS19JVF9TT1VSQ0UodG1wY3IxdmFsdWUsIEZNUFNNQlVTX0lUX05BQ0tJKSAhPSBSRVNFVCkpICYmICgoRk1QU01CVVNfQ0hFQ0tfRkxBRyh0bXBpc3J2YWx1ZSwgRk1QU01CVVNfRkxBR19BRERSKSAhPSBSRVNFVCkgfHwgKEZNUFNNQlVTX0NIRUNLX0ZMQUcodG1waXNydmFsdWUsIEZNUFNNQlVTX0ZMQUdfU1RPUEYpICE9IFJFU0VUKSB8fCAoRk1QU01CVVNfQ0hFQ0tfRkxBRyh0bXBpc3J2YWx1ZSwgRk1QU01CVVNfRkxBR19BRikgIT0gUkVTRVQpKSkKKyAgaWYgKCgoRk1QU01CVVNfQ0hFQ0tfSVRfU09VUkNFKHRtcGNyMXZhbHVlLCBGTVBTTUJVU19JVF9BRERSSSkgIT0gUkVTRVQpIHx8CisgICAgICAgKEZNUFNNQlVTX0NIRUNLX0lUX1NPVVJDRSh0bXBjcjF2YWx1ZSwgRk1QU01CVVNfSVRfU1RPUEkpICE9IFJFU0VUKSB8fAorICAgICAgIChGTVBTTUJVU19DSEVDS19JVF9TT1VSQ0UodG1wY3IxdmFsdWUsIEZNUFNNQlVTX0lUX05BQ0tJKSAhPSBSRVNFVCkpICYmCisgICAgICAoKEZNUFNNQlVTX0NIRUNLX0ZMQUcodG1waXNydmFsdWUsIEZNUFNNQlVTX0ZMQUdfQUREUikgIT0gUkVTRVQpIHx8CisgICAgICAgKEZNUFNNQlVTX0NIRUNLX0ZMQUcodG1waXNydmFsdWUsIEZNUFNNQlVTX0ZMQUdfU1RPUEYpICE9IFJFU0VUKSB8fAorICAgICAgIChGTVBTTUJVU19DSEVDS19GTEFHKHRtcGlzcnZhbHVlLCBGTVBTTUJVU19GTEFHX0FGKSAhPSBSRVNFVCkpKQogICB7CiAgICAgaWYgKChoZm1wc21idXMtPlN0YXRlICYgSEFMX0ZNUFNNQlVTX1NUQVRFX0xJU1RFTikgPT0gSEFMX0ZNUFNNQlVTX1NUQVRFX0xJU1RFTikKICAgICB7CkBAIC0xNzQ1LDggKzE3NzAsOCBAQAogICAqLwogCiAvKiogQGRlZmdyb3VwIEZNUFNNQlVTX0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDMgUGVyaXBoZXJhbCBTdGF0ZSBhbmQgRXJyb3JzIGZ1bmN0aW9ucwotICogIEBicmllZiAgIFBlcmlwaGVyYWwgU3RhdGUgYW5kIEVycm9ycyBmdW5jdGlvbnMKLSAqCisgICogIEBicmllZiAgIFBlcmlwaGVyYWwgU3RhdGUgYW5kIEVycm9ycyBmdW5jdGlvbnMKKyAgKgogQHZlcmJhdGltCiAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAgICAgICAgIyMjIyMgUGVyaXBoZXJhbCBTdGF0ZSBhbmQgRXJyb3JzIGZ1bmN0aW9ucyAjIyMjIwpAQCAtMTc3MiwxMSArMTc5NywxMSBAQAogfQogCiAvKioKLSogQGJyaWVmICBSZXR1cm4gdGhlIEZNUFNNQlVTIGVycm9yIGNvZGUuCisgICogQGJyaWVmICBSZXR1cm4gdGhlIEZNUFNNQlVTIGVycm9yIGNvZGUuCiAgICogQHBhcmFtICBoZm1wc21idXMgUG9pbnRlciB0byBhIEZNUFNNQlVTX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKICAgKiAgICAgICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIHRoZSBzcGVjaWZpZWQgRk1QU01CVVMuCi0qIEByZXR2YWwgRk1QU01CVVMgRXJyb3IgQ29kZQotKi8KKyAgKiBAcmV0dmFsIEZNUFNNQlVTIEVycm9yIENvZGUKKyAgKi8KIHVpbnQzMl90IEhBTF9GTVBTTUJVU19HZXRFcnJvcihGTVBTTUJVU19IYW5kbGVUeXBlRGVmICpoZm1wc21idXMpCiB7CiAgIHJldHVybiBoZm1wc21idXMtPkVycm9yQ29kZTsKQEAgLTE3OTEsNyArMTgxNiw3IEBACiAgICovCiAKIC8qKiBAYWRkdG9ncm91cCBGTVBTTUJVU19Qcml2YXRlX0Z1bmN0aW9ucyBGTVBTTUJVUyBQcml2YXRlIEZ1bmN0aW9ucwotICogIEBicmllZiAgIERhdGEgdHJhbnNmZXJzIFByaXZhdGUgZnVuY3Rpb25zCisgICogIEBicmllZiAgIERhdGEgdHJhbnNmZXJzIFByaXZhdGUgZnVuY3Rpb25zCiAgICogQHsKICAgKi8KIApAQCAtMTg1NSw3ICsxODgwLDcgQEAKICAgICAgIC8qIFByb2Nlc3MgVW5sb2NrZWQgKi8KICAgICAgIF9fSEFMX1VOTE9DSyhoZm1wc21idXMpOwogCi0gICAgICAvKiBSRWVuYWJsZSB0aGUgc2VsZWN0ZWQgRk1QU01CVVMgcGVyaXBoZXJhbCAqLworICAgICAgLyogUmUtZW5hYmxlIHRoZSBzZWxlY3RlZCBGTVBTTUJVUyBwZXJpcGhlcmFsICovCiAgICAgICBfX0hBTF9GTVBTTUJVU19FTkFCTEUoaGZtcHNtYnVzKTsKIAogICAgICAgLyogQ2FsbCB0aGUgY29ycmVzcG9uZGluZyBjYWxsYmFjayB0byBpbmZvcm0gdXBwZXIgbGF5ZXIgb2YgRW5kIG9mIFRyYW5zZmVyICovCkBAIC0xOTQyLDcgKzE5NjcsOCBAQAogCiAgICAgICBpZiAoaGZtcHNtYnVzLT5YZmVyQ291bnQgPiBNQVhfTkJZVEVfU0laRSkKICAgICAgIHsKLSAgICAgICAgRk1QU01CVVNfVHJhbnNmZXJDb25maWcoaGZtcHNtYnVzLCBEZXZBZGRyZXNzLCBNQVhfTkJZVEVfU0laRSwgKEZNUFNNQlVTX1JFTE9BRF9NT0RFIHwgKGhmbXBzbWJ1cy0+WGZlck9wdGlvbnMgJiBGTVBTTUJVU19TRU5EUEVDX01PREUpKSwgRk1QU01CVVNfTk9fU1RBUlRTVE9QKTsKKyAgICAgICAgRk1QU01CVVNfVHJhbnNmZXJDb25maWcoaGZtcHNtYnVzLCBEZXZBZGRyZXNzLCBNQVhfTkJZVEVfU0laRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZNUFNNQlVTX1JFTE9BRF9NT0RFIHwgKGhmbXBzbWJ1cy0+WGZlck9wdGlvbnMgJiBGTVBTTUJVU19TRU5EUEVDX01PREUpKSwgRk1QU01CVVNfTk9fU1RBUlRTVE9QKTsKICAgICAgICAgaGZtcHNtYnVzLT5YZmVyU2l6ZSA9IE1BWF9OQllURV9TSVpFOwogICAgICAgfQogICAgICAgZWxzZQpAQCAtMjE1Niw3ICsyMTgyLDggQEAKICAgICBIQUxfRk1QU01CVVNfQWRkckNhbGxiYWNrKGhmbXBzbWJ1cywgVHJhbnNmZXJEaXJlY3Rpb24sIFNsYXZlQWRkckNvZGUpOwogI2VuZGlmIC8qIFVTRV9IQUxfRk1QU01CVVNfUkVHSVNURVJfQ0FMTEJBQ0tTICovCiAgIH0KLSAgZWxzZSBpZiAoKEZNUFNNQlVTX0NIRUNLX0ZMQUcoU3RhdHVzRmxhZ3MsIEZNUFNNQlVTX0ZMQUdfUlhORSkgIT0gUkVTRVQpIHx8IChGTVBTTUJVU19DSEVDS19GTEFHKFN0YXR1c0ZsYWdzLCBGTVBTTUJVU19GTEFHX1RDUikgIT0gUkVTRVQpKQorICBlbHNlIGlmICgoRk1QU01CVVNfQ0hFQ0tfRkxBRyhTdGF0dXNGbGFncywgRk1QU01CVVNfRkxBR19SWE5FKSAhPSBSRVNFVCkgfHwKKyAgICAgICAgICAgKEZNUFNNQlVTX0NIRUNLX0ZMQUcoU3RhdHVzRmxhZ3MsIEZNUFNNQlVTX0ZMQUdfVENSKSAhPSBSRVNFVCkpCiAgIHsKICAgICBpZiAoKGhmbXBzbWJ1cy0+U3RhdGUgJiBIQUxfRk1QU01CVVNfU1RBVEVfU0xBVkVfQlVTWV9SWCkgPT0gSEFMX0ZNUFNNQlVTX1NUQVRFX1NMQVZFX0JVU1lfUlgpCiAgICAgewpAQCAtMjIxMSw3ICsyMjM4LDggQEAKICAgICAgIHsKICAgICAgICAgaWYgKGhmbXBzbWJ1cy0+WGZlckNvdW50ID4gTUFYX05CWVRFX1NJWkUpCiAgICAgICAgIHsKLSAgICAgICAgICBGTVBTTUJVU19UcmFuc2ZlckNvbmZpZyhoZm1wc21idXMsIDAsIE1BWF9OQllURV9TSVpFLCAoRk1QU01CVVNfUkVMT0FEX01PREUgfCAoaGZtcHNtYnVzLT5YZmVyT3B0aW9ucyAmIEZNUFNNQlVTX1NFTkRQRUNfTU9ERSkpLCBGTVBTTUJVU19OT19TVEFSVFNUT1ApOworICAgICAgICAgIEZNUFNNQlVTX1RyYW5zZmVyQ29uZmlnKGhmbXBzbWJ1cywgMCwgTUFYX05CWVRFX1NJWkUsIChGTVBTTUJVU19SRUxPQURfTU9ERSB8IChoZm1wc21idXMtPlhmZXJPcHRpb25zICYgRk1QU01CVVNfU0VORFBFQ19NT0RFKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRk1QU01CVVNfTk9fU1RBUlRTVE9QKTsKICAgICAgICAgICBoZm1wc21idXMtPlhmZXJTaXplID0gTUFYX05CWVRFX1NJWkU7CiAgICAgICAgIH0KICAgICAgICAgZWxzZQpAQCAtMjU1NSw3ICsyNTgzLDggQEAKICAgKiBAcGFyYW0gIFRpbWVvdXQgVGltZW91dCBkdXJhdGlvbgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwotc3RhdGljIEhBTF9TdGF0dXNUeXBlRGVmIEZNUFNNQlVTX1dhaXRPbkZsYWdVbnRpbFRpbWVvdXQoRk1QU01CVVNfSGFuZGxlVHlwZURlZiAqaGZtcHNtYnVzLCB1aW50MzJfdCBGbGFnLCBGbGFnU3RhdHVzIFN0YXR1cywgdWludDMyX3QgVGltZW91dCkKK3N0YXRpYyBIQUxfU3RhdHVzVHlwZURlZiBGTVBTTUJVU19XYWl0T25GbGFnVW50aWxUaW1lb3V0KEZNUFNNQlVTX0hhbmRsZVR5cGVEZWYgKmhmbXBzbWJ1cywgdWludDMyX3QgRmxhZywgRmxhZ1N0YXR1cyBTdGF0dXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBUaW1lb3V0KQogewogICB1aW50MzJfdCB0aWNrc3RhcnQgPSBIQUxfR2V0VGljaygpOwogCkBAIC0yNjA0LDcgKzI2MzMsOCBAQAogICAqICAgICBAYXJnIEByZWYgRk1QU01CVVNfR0VORVJBVEVfU1RBUlRfV1JJVEUgR2VuZXJhdGUgUmVzdGFydCBmb3Igd3JpdGUgcmVxdWVzdC4KICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KLXN0YXRpYyB2b2lkIEZNUFNNQlVTX1RyYW5zZmVyQ29uZmlnKEZNUFNNQlVTX0hhbmRsZVR5cGVEZWYgKmhmbXBzbWJ1cywgIHVpbnQxNl90IERldkFkZHJlc3MsIHVpbnQ4X3QgU2l6ZSwgdWludDMyX3QgTW9kZSwgdWludDMyX3QgUmVxdWVzdCkKK3N0YXRpYyB2b2lkIEZNUFNNQlVTX1RyYW5zZmVyQ29uZmlnKEZNUFNNQlVTX0hhbmRsZVR5cGVEZWYgKmhmbXBzbWJ1cywgIHVpbnQxNl90IERldkFkZHJlc3MsIHVpbnQ4X3QgU2l6ZSwgdWludDMyX3QgTW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IFJlcXVlc3QpCiB7CiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19GTVBTTUJVU19BTExfSU5TVEFOQ0UoaGZtcHNtYnVzLT5JbnN0YW5jZSkpOwpAQCAtMjYxMiwxMiArMjY0MiwxNiBAQAogICBhc3NlcnRfcGFyYW0oSVNfRk1QU01CVVNfVFJBTlNGRVJfUkVRVUVTVChSZXF1ZXN0KSk7CiAKICAgLyogdXBkYXRlIENSMiByZWdpc3RlciAqLwotICBNT0RJRllfUkVHKGhmbXBzbWJ1cy0+SW5zdGFuY2UtPkNSMiwgKChGTVBJMkNfQ1IyX1NBREQgfCBGTVBJMkNfQ1IyX05CWVRFUyB8IEZNUEkyQ19DUjJfUkVMT0FEIHwgRk1QSTJDX0NSMl9BVVRPRU5EIHwgKEZNUEkyQ19DUjJfUkRfV1JOICYgKHVpbnQzMl90KShSZXF1ZXN0ID4+ICgzMVVMIC0gRk1QSTJDX0NSMl9SRF9XUk5fUG9zKSkpIHwgRk1QSTJDX0NSMl9TVEFSVCB8IEZNUEkyQ19DUjJfU1RPUCAgfCBGTVBJMkNfQ1IyX1BFQ0JZVEUpKSwgXAotICAgICAgICAgICAgICh1aW50MzJfdCkoKCh1aW50MzJfdClEZXZBZGRyZXNzICYgRk1QSTJDX0NSMl9TQUREKSB8ICgoKHVpbnQzMl90KVNpemUgPDwgRk1QSTJDX0NSMl9OQllURVNfUG9zKSAmIEZNUEkyQ19DUjJfTkJZVEVTKSB8ICh1aW50MzJfdClNb2RlIHwgKHVpbnQzMl90KVJlcXVlc3QpKTsKKyAgTU9ESUZZX1JFRyhoZm1wc21idXMtPkluc3RhbmNlLT5DUjIsCisgICAgICAgICAgICAgKChGTVBJMkNfQ1IyX1NBREQgfCBGTVBJMkNfQ1IyX05CWVRFUyB8IEZNUEkyQ19DUjJfUkVMT0FEIHwgRk1QSTJDX0NSMl9BVVRPRU5EIHwgXAorICAgICAgICAgICAgICAgKEZNUEkyQ19DUjJfUkRfV1JOICYgKHVpbnQzMl90KShSZXF1ZXN0ID4+ICgzMVVMIC0gRk1QSTJDX0NSMl9SRF9XUk5fUG9zKSkpIHwgXAorICAgICAgICAgICAgICAgRk1QSTJDX0NSMl9TVEFSVCB8IEZNUEkyQ19DUjJfU1RPUCAgfCBGTVBJMkNfQ1IyX1BFQ0JZVEUpKSwgXAorICAgICAgICAgICAgICh1aW50MzJfdCkoKCh1aW50MzJfdClEZXZBZGRyZXNzICYgRk1QSTJDX0NSMl9TQUREKSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KVNpemUgPDwgRk1QSTJDX0NSMl9OQllURVNfUG9zKSAmIEZNUEkyQ19DUjJfTkJZVEVTKSB8ICh1aW50MzJfdClNb2RlIHwgKHVpbnQzMl90KVJlcXVlc3QpKTsKIH0KIAogLyoqCi0gICogQGJyaWVmICBDb252ZXJ0IEZNUFNNQlVTeCBPVEhFUl94eHggWGZlck9wdGlvbnMgdG8gZnVuY3Rpb25uYWwgWGZlck9wdGlvbnMuCisgICogQGJyaWVmICBDb252ZXJ0IEZNUFNNQlVTeCBPVEhFUl94eHggWGZlck9wdGlvbnMgdG8gZnVuY3Rpb25hbCBYZmVyT3B0aW9ucy4KICAgKiBAcGFyYW0gIGhmbXBzbWJ1cyBGTVBTTUJVUyBoYW5kbGUuCiAgICogQHJldHZhbCBOb25lCiAgICovCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmNHh4X2hhbF9mbXBzbWJ1c19leC5jIGIvU3JjL3N0bTMyZjR4eF9oYWxfZm1wc21idXNfZXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTljNzZmCi0tLSAvZGV2L251bGwKKysrIGIvU3JjL3N0bTMyZjR4eF9oYWxfZm1wc21idXNfZXguYwpAQCAtMCwwICsxLDE0NiBAQAorLyoqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEBmaWxlICAgIHN0bTMyZjR4eF9oYWxfZm1wc21idXNfZXguYworICAqIEBhdXRob3IgIE1DRCBBcHBsaWNhdGlvbiBUZWFtCisgICogQGJyaWVmICAgRk1QU01CVVMgRXh0ZW5kZWQgSEFMIG1vZHVsZSBkcml2ZXIuCisgICogICAgICAgICAgVGhpcyBmaWxlIHByb3ZpZGVzIGZpcm13YXJlIGZ1bmN0aW9ucyB0byBtYW5hZ2UgdGhlIGZvbGxvd2luZworICAqICAgICAgICAgIGZ1bmN0aW9uYWxpdGllcyBvZiBGTVBTTUJVUyBFeHRlbmRlZCBwZXJpcGhlcmFsOgorICAqICAgICAgICAgICArIEV4dGVuZGVkIGZlYXR1cmVzIGZ1bmN0aW9ucworICAqCisgIEB2ZXJiYXRpbQorICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICAgICAgICAgICAgICMjIyMjIEZNUFNNQlVTIHBlcmlwaGVyYWwgRXh0ZW5kZWQgZmVhdHVyZXMgICMjIyMjCisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgIFsuLl0gQ29tcGFyaW5nIHRvIG90aGVyIHByZXZpb3VzIGRldmljZXMsIHRoZSBGTVBTTUJVUyBpbnRlcmZhY2UgZm9yIFNUTTMyRjR4eAorICAgICAgIGRldmljZXMgY29udGFpbnMgdGhlIGZvbGxvd2luZyBhZGRpdGlvbmFsIGZlYXR1cmVzCisKKyAgICAgICAoKykgRGlzYWJsZSBvciBlbmFibGUgRmFzdCBNb2RlIFBsdXMKKworICAgICAgICAgICAgICAgICAgICAgIyMjIyMgSG93IHRvIHVzZSB0aGlzIGRyaXZlciAjIyMjIworICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICAoIykgQ29uZmlndXJlIHRoZSBlbmFibGUgb3IgZGlzYWJsZSBvZiBmYXN0IG1vZGUgcGx1cyBkcml2aW5nIGNhcGFiaWxpdHkgdXNpbmcgdGhlIGZ1bmN0aW9ucyA6CisgICAgICAgICAgKCsrKSBIQUxfRk1QU01CVVNFeF9FbmFibGVGYXN0TW9kZVBsdXMoKQorICAgICAgICAgICgrKykgSEFMX0ZNUFNNQlVTRXhfRGlzYWJsZUZhc3RNb2RlUGx1cygpCisgIEBlbmR2ZXJiYXRpbQorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBAYXR0ZW50aW9uCisgICoKKyAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE2IFNUTWljcm9lbGVjdHJvbmljcy4KKyAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLjwvY2VudGVyPjwvaDI+CisgICoKKyAgKiBUaGlzIHNvZnR3YXJlIGNvbXBvbmVudCBpcyBsaWNlbnNlZCBieSBTVCB1bmRlciBCU0QgMy1DbGF1c2UgbGljZW5zZSwKKyAgKiB0aGUgIkxpY2Vuc2UiOyBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlCisgICogTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0OgorICAqICAgICAgICAgICAgICAgICAgICAgICAgb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlCisgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICovCisKKy8qIEluY2x1ZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjaW5jbHVkZSAic3RtMzJmNHh4X2hhbC5oIgorCisvKiogQGFkZHRvZ3JvdXAgU1RNMzJGNHh4X0hBTF9Ecml2ZXIKKyAgKiBAeworICAqLworCisvKiogQGRlZmdyb3VwIEZNUFNNQlVTRXggRk1QU01CVVNFeAorICAqIEBicmllZiBGTVBTTUJVUyBFeHRlbmRlZCBIQUwgbW9kdWxlIGRyaXZlcgorICAqIEB7CisgICovCisKKyNpZmRlZiBIQUxfRk1QU01CVVNfTU9EVUxFX0VOQUJMRUQKKyNpZiBkZWZpbmVkKEZNUEkyQ19DUjFfUEUpCisKKy8qIFByaXZhdGUgdHlwZWRlZiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBQcml2YXRlIGRlZmluZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogUHJpdmF0ZSBtYWNybyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIFByaXZhdGUgdmFyaWFibGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBQcml2YXRlIGZ1bmN0aW9uIHByb3RvdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogUHJpdmF0ZSBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoqIEBkZWZncm91cCBGTVBTTUJVU0V4X0V4cG9ydGVkX0Z1bmN0aW9ucyBGTVBTTUJVUyBFeHRlbmRlZCBFeHBvcnRlZCBGdW5jdGlvbnMKKyAgKiBAeworICAqLworCisvKiogQGRlZmdyb3VwIEZNUFNNQlVTRXhfRXhwb3J0ZWRfRnVuY3Rpb25zX0dyb3VwMSBFeHRlbmRlZCBmZWF0dXJlcyBmdW5jdGlvbnMKKyAgKiBAYnJpZWYgICAgRXh0ZW5kZWQgZmVhdHVyZXMgZnVuY3Rpb25zCisgKgorQHZlcmJhdGltCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgICAgICAgICAgICAgICAgICAgICMjIyMjIEV4dGVuZGVkIGZlYXR1cmVzIGZ1bmN0aW9ucyAjIyMjIworID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBbLi5dIFRoaXMgc2VjdGlvbiBwcm92aWRlcyBmdW5jdGlvbnMgYWxsb3dpbmcgdG86CisKKyAgICAgICgrKSBDb25maWd1cmUgRmFzdCBNb2RlIFBsdXMKKworQGVuZHZlcmJhdGltCisgICogQHsKKyAgKi8KKworLyoqCisgICogQGJyaWVmIEVuYWJsZSB0aGUgRk1QU01CVVMgZmFzdCBtb2RlIHBsdXMgZHJpdmluZyBjYXBhYmlsaXR5LgorICAqIEBwYXJhbSBDb25maWdGYXN0TW9kZVBsdXMgU2VsZWN0cyB0aGUgcGluLgorICAqICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgQHJlZiBGTVBTTUJVU0V4X0Zhc3RNb2RlUGx1cyB2YWx1ZXMKKyAgKiBAbm90ZSAgRm9yIEZNUEkyQzEsIGZhc3QgbW9kZSBwbHVzIGRyaXZpbmcgY2FwYWJpbGl0eSBjYW4gYmUgZW5hYmxlZCBvbiBhbGwgc2VsZWN0ZWQKKyAgKiAgICAgICAgRk1QSTJDMSBwaW5zIHVzaW5nIEZNUEkyQ19GQVNUTU9ERVBMVVNfRk1QSTJDMSBwYXJhbWV0ZXIgb3IgaW5kZXBlbmRlbnRseQorICAqICAgICAgICBvbiBlYWNoIG9uZSBvZiB0aGUgZm9sbG93aW5nIHBpbnMgUEI2LCBQQjcsIFBCOCBhbmQgUEI5LgorICAqIEBub3RlICBGb3IgcmVtYWluaW5nIEZNUEkyQzEgcGlucyAoUEExNCwgUEExNS4uLikgZmFzdCBtb2RlIHBsdXMgZHJpdmluZyBjYXBhYmlsaXR5CisgICogICAgICAgIGNhbiBiZSBlbmFibGVkIG9ubHkgYnkgdXNpbmcgRk1QSTJDX0ZBU1RNT0RFUExVU19GTVBJMkMxIHBhcmFtZXRlci4KKyAgKiBAcmV0dmFsIE5vbmUKKyAgKi8KK3ZvaWQgSEFMX0ZNUFNNQlVTRXhfRW5hYmxlRmFzdE1vZGVQbHVzKHVpbnQzMl90IENvbmZpZ0Zhc3RNb2RlUGx1cykKK3sKKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlciAqLworICBhc3NlcnRfcGFyYW0oSVNfRk1QU01CVVNfRkFTVE1PREVQTFVTKENvbmZpZ0Zhc3RNb2RlUGx1cykpOworCisgIC8qIEVuYWJsZSBTWVNDRkcgY2xvY2sgKi8KKyAgX19IQUxfUkNDX1NZU0NGR19DTEtfRU5BQkxFKCk7CisKKyAgLyogRW5hYmxlIGZhc3QgbW9kZSBwbHVzIGRyaXZpbmcgY2FwYWJpbGl0eSBmb3Igc2VsZWN0ZWQgcGluICovCisgIFNFVF9CSVQoU1lTQ0ZHLT5DRkdSLCAodWludDMyX3QpQ29uZmlnRmFzdE1vZGVQbHVzKTsKK30KKworLyoqCisgICogQGJyaWVmIERpc2FibGUgdGhlIEZNUFNNQlVTIGZhc3QgbW9kZSBwbHVzIGRyaXZpbmcgY2FwYWJpbGl0eS4KKyAgKiBAcGFyYW0gQ29uZmlnRmFzdE1vZGVQbHVzIFNlbGVjdHMgdGhlIHBpbi4KKyAgKiAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIEByZWYgRk1QU01CVVNFeF9GYXN0TW9kZVBsdXMgdmFsdWVzCisgICogQG5vdGUgIEZvciBGTVBJMkMxLCBmYXN0IG1vZGUgcGx1cyBkcml2aW5nIGNhcGFiaWxpdHkgY2FuIGJlIGRpc2FibGVkIG9uIGFsbCBzZWxlY3RlZAorICAqICAgICAgICBGTVBJMkMxIHBpbnMgdXNpbmcgRk1QSTJDX0ZBU1RNT0RFUExVU19GTVBJMkMxIHBhcmFtZXRlciBvciBpbmRlcGVuZGVudGx5CisgICogICAgICAgIG9uIGVhY2ggb25lIG9mIHRoZSBmb2xsb3dpbmcgcGlucyBQQjYsIFBCNywgUEI4IGFuZCBQQjkuCisgICogQG5vdGUgIEZvciByZW1haW5pbmcgRk1QSTJDMSBwaW5zIChQQTE0LCBQQTE1Li4uKSBmYXN0IG1vZGUgcGx1cyBkcml2aW5nIGNhcGFiaWxpdHkKKyAgKiAgICAgICAgY2FuIGJlIGRpc2FibGVkIG9ubHkgYnkgdXNpbmcgRk1QSTJDX0ZBU1RNT0RFUExVU19GTVBJMkMxIHBhcmFtZXRlci4KKyAgKiBAcmV0dmFsIE5vbmUKKyAgKi8KK3ZvaWQgSEFMX0ZNUFNNQlVTRXhfRGlzYWJsZUZhc3RNb2RlUGx1cyh1aW50MzJfdCBDb25maWdGYXN0TW9kZVBsdXMpCit7CisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXIgKi8KKyAgYXNzZXJ0X3BhcmFtKElTX0ZNUFNNQlVTX0ZBU1RNT0RFUExVUyhDb25maWdGYXN0TW9kZVBsdXMpKTsKKworICAvKiBFbmFibGUgU1lTQ0ZHIGNsb2NrICovCisgIF9fSEFMX1JDQ19TWVNDRkdfQ0xLX0VOQUJMRSgpOworCisgIC8qIERpc2FibGUgZmFzdCBtb2RlIHBsdXMgZHJpdmluZyBjYXBhYmlsaXR5IGZvciBzZWxlY3RlZCBwaW4gKi8KKyAgQ0xFQVJfQklUKFNZU0NGRy0+Q0ZHUiwgKHVpbnQzMl90KUNvbmZpZ0Zhc3RNb2RlUGx1cyk7Cit9CisKKworLyoqCisgICogQH0KKyAgKi8KKworLyoqCisgICogQH0KKyAgKi8KKworI2VuZGlmIC8qIEZNUEkyQ19DUjFfUEUgKi8KKyNlbmRpZiAvKiBIQUxfRk1QU01CVVNfTU9EVUxFX0VOQUJMRUQgKi8KKy8qKgorICAqIEB9CisgICovCisKKy8qKgorICAqIEB9CisgICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKiogKEMpIENPUFlSSUdIVCBTVE1pY3JvZWxlY3Ryb25pY3MgKioqKipFTkQgT0YgRklMRSoqKiovCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmNHh4X2hhbF9ncGlvLmMgYi9TcmMvc3RtMzJmNHh4X2hhbF9ncGlvLmMKaW5kZXggODkwOTBkNi4uZjk2ZDJiYiAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZjR4eF9oYWxfZ3Bpby5jCisrKyBiL1NyYy9zdG0zMmY0eHhfaGFsX2dwaW8uYwpAQCAtMTIzLDEzICsxMjMsNiBAQAogLyoqIEBhZGR0b2dyb3VwIEdQSU9fUHJpdmF0ZV9Db25zdGFudHMgR1BJTyBQcml2YXRlIENvbnN0YW50cwogICAqIEB7CiAgICovCi0jZGVmaW5lIEdQSU9fTU9ERSAgICAgICAgICAgICAweDAwMDAwMDAzVQotI2RlZmluZSBFWFRJX01PREUgICAgICAgICAgICAgMHgxMDAwMDAwMFUKLSNkZWZpbmUgR1BJT19NT0RFX0lUICAgICAgICAgIDB4MDAwMTAwMDBVCi0jZGVmaW5lIEdQSU9fTU9ERV9FVlQgICAgICAgICAweDAwMDIwMDAwVQotI2RlZmluZSBSSVNJTkdfRURHRSAgICAgICAgICAgMHgwMDEwMDAwMFUKLSNkZWZpbmUgRkFMTElOR19FREdFICAgICAgICAgIDB4MDAyMDAwMDBVCi0jZGVmaW5lIEdQSU9fT1VUUFVUX1RZUEUgICAgICAweDAwMDAwMDEwVQogCiAjZGVmaW5lIEdQSU9fTlVNQkVSICAgICAgICAgICAxNlUKIC8qKgpAQCAtMTkzLDggKzE4Niw4IEBACiAgICAgewogICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gR1BJTyBNb2RlIENvbmZpZ3VyYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICAgICAgIC8qIEluIGNhc2Ugb2YgT3V0cHV0IG9yIEFsdGVybmF0ZSBmdW5jdGlvbiBtb2RlIHNlbGVjdGlvbiAqLwotICAgICAgaWYoKEdQSU9fSW5pdC0+TW9kZSA9PSBHUElPX01PREVfT1VUUFVUX1BQKSB8fCAoR1BJT19Jbml0LT5Nb2RlID09IEdQSU9fTU9ERV9BRl9QUCkgfHwKLSAgICAgICAgIChHUElPX0luaXQtPk1vZGUgPT0gR1BJT19NT0RFX09VVFBVVF9PRCkgfHwgKEdQSU9fSW5pdC0+TW9kZSA9PSBHUElPX01PREVfQUZfT0QpKQorICAgICAgaWYoKChHUElPX0luaXQtPk1vZGUgJiBHUElPX01PREUpID09IE1PREVfT1VUUFVUKSB8fCBcCisgICAgICAgICAgKEdQSU9fSW5pdC0+TW9kZSAmIEdQSU9fTU9ERSkgPT0gTU9ERV9BRikKICAgICAgIHsKICAgICAgICAgLyogQ2hlY2sgdGhlIFNwZWVkIHBhcmFtZXRlciAqLwogICAgICAgICBhc3NlcnRfcGFyYW0oSVNfR1BJT19TUEVFRChHUElPX0luaXQtPlNwZWVkKSk7CkBAIC0yMTEsMTQgKzIwNCwxNyBAQAogICAgICAgICBHUElPeC0+T1RZUEVSID0gdGVtcDsKICAgICAgICB9CiAKLSAgICAgIC8qIEFjdGl2YXRlIHRoZSBQdWxsLXVwIG9yIFB1bGwgZG93biByZXNpc3RvciBmb3IgdGhlIGN1cnJlbnQgSU8gKi8KLSAgICAgIHRlbXAgPSBHUElPeC0+UFVQRFI7Ci0gICAgICB0ZW1wICY9IH4oR1BJT19QVVBEUl9QVVBEUjAgPDwgKHBvc2l0aW9uICogMlUpKTsKLSAgICAgIHRlbXAgfD0gKChHUElPX0luaXQtPlB1bGwpIDw8IChwb3NpdGlvbiAqIDJVKSk7Ci0gICAgICBHUElPeC0+UFVQRFIgPSB0ZW1wOworICAgICAgaWYoKEdQSU9fSW5pdC0+TW9kZSAmIEdQSU9fTU9ERSkgIT0gTU9ERV9BTkFMT0cpCisgICAgICB7CisgICAgICAgIC8qIEFjdGl2YXRlIHRoZSBQdWxsLXVwIG9yIFB1bGwgZG93biByZXNpc3RvciBmb3IgdGhlIGN1cnJlbnQgSU8gKi8KKyAgICAgICAgdGVtcCA9IEdQSU94LT5QVVBEUjsKKyAgICAgICAgdGVtcCAmPSB+KEdQSU9fUFVQRFJfUFVQRFIwIDw8IChwb3NpdGlvbiAqIDJVKSk7CisgICAgICAgIHRlbXAgfD0gKChHUElPX0luaXQtPlB1bGwpIDw8IChwb3NpdGlvbiAqIDJVKSk7CisgICAgICAgIEdQSU94LT5QVVBEUiA9IHRlbXA7CisgICAgICB9CiAKICAgICAgIC8qIEluIGNhc2Ugb2YgQWx0ZXJuYXRlIGZ1bmN0aW9uIG1vZGUgc2VsZWN0aW9uICovCi0gICAgICBpZigoR1BJT19Jbml0LT5Nb2RlID09IEdQSU9fTU9ERV9BRl9QUCkgfHwgKEdQSU9fSW5pdC0+TW9kZSA9PSBHUElPX01PREVfQUZfT0QpKQorICAgICAgaWYoKEdQSU9fSW5pdC0+TW9kZSAmIEdQSU9fTU9ERSkgPT0gTU9ERV9BRikKICAgICAgIHsKICAgICAgICAgLyogQ2hlY2sgdGhlIEFsdGVybmF0ZSBmdW5jdGlvbiBwYXJhbWV0ZXIgKi8KICAgICAgICAgYXNzZXJ0X3BhcmFtKElTX0dQSU9fQUYoR1BJT19Jbml0LT5BbHRlcm5hdGUpKTsKQEAgLTQzNCwxNyArNDMwLDE2IEBACiAgICovCiB2b2lkIEhBTF9HUElPX1RvZ2dsZVBpbihHUElPX1R5cGVEZWYqIEdQSU94LCB1aW50MTZfdCBHUElPX1BpbikKIHsKKyAgdWludDMyX3Qgb2RyOworCiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19HUElPX1BJTihHUElPX1BpbikpOwogCi0gIGlmICgoR1BJT3gtPk9EUiAmIEdQSU9fUGluKSA9PSBHUElPX1BpbikKLSAgewotICAgIEdQSU94LT5CU1JSID0gKHVpbnQzMl90KUdQSU9fUGluIDw8IEdQSU9fTlVNQkVSOwotICB9Ci0gIGVsc2UKLSAgewotICAgIEdQSU94LT5CU1JSID0gR1BJT19QaW47Ci0gIH0KKyAgLyogZ2V0IGN1cnJlbnQgT3VwdXQgRGF0YSBSZWdpc3RlciB2YWx1ZSAqLworICBvZHIgPSBHUElPeC0+T0RSOworCisgIC8qIFNldCBzZWxlY3RlZCBwaW5zIHRoYXQgd2VyZSBhdCBsb3cgbGV2ZWwsIGFuZCByZXNldCBvbmVzIHRoYXQgd2VyZSBoaWdoICovCisgIEdQSU94LT5CU1JSID0gKChvZHIgJiBHUElPX1BpbikgPDwgR1BJT19OVU1CRVIpIHwgKH5vZHIgJiBHUElPX1Bpbik7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjR4eF9oYWxfaGFzaC5jIGIvU3JjL3N0bTMyZjR4eF9oYWxfaGFzaC5jCmluZGV4IDhlZDZhMTUuLmM5MDFlMTkgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmY0eHhfaGFsX2hhc2guYworKysgYi9TcmMvc3RtMzJmNHh4X2hhbF9oYXNoLmMKQEAgLTM0LDcgKzM0LDcgQEAKICAgICAgICAgICAgICgrKyspIEFzc29jaWF0ZSB0aGUgaW5pdGlhbGl6ZWQgRE1BIGhhbmRsZSB0byB0aGUgSEFTSCBETUEgaGFuZGxlCiAgICAgICAgICAgICAgICAgdXNpbmcgIF9fSEFMX0xJTktETUEoKQogICAgICAgICAgICAgKCsrKykgQ29uZmlndXJlIHRoZSBwcmlvcml0eSBhbmQgZW5hYmxlIHRoZSBOVklDIGZvciB0aGUgdHJhbnNmZXIgY29tcGxldGUKLSAgICAgICAgICAgICAgICBpbnRlcnJ1cHQgb24gdGhlIERNQSBTdHJlYW06IHVzZQorICAgICAgICAgICAgICAgIGludGVycnVwdCBvbiB0aGUgRE1BIHN0cmVhbTogdXNlCiAgICAgICAgICAgICAgICAgIEhBTF9OVklDX1NldFByaW9yaXR5KCkgYW5kCiAgICAgICAgICAgICAgICAgIEhBTF9OVklDX0VuYWJsZUlSUSgpCiAKQEAgLTcxLDEwICs3MSwxMSBAQAogICAgICAgICAgICAgIHdlbGwgdGhlIGNvbXB1dGVkIGRpZ2VzdC4KIAogICAgICAgICAoIyMpIEluIERNQSBtb2RlLCBtdWx0aS1idWZmZXIgSEFTSCBhbmQgSE1BQyBwcm9jZXNzaW5nIGFyZSBwb3NzaWJsZS4KLSAgICAgICAgICAgICAgKCsrKykgSEFTSCBwcm9jZXNzaW5nOiBvbmNlIGluaXRpYWxpemF0aW9uIGlzIGRvbmUsIE1ETUFUIGJpdCBtdXN0IGJlIHNldCB0aHJ1IF9fSEFMX0hBU0hfU0VUX01ETUFUKCkgbWFjcm8uCi0gICAgICAgICAgICAgRnJvbSB0aGF0IHBvaW50LCBlYWNoIGJ1ZmZlciBjYW4gYmUgZmVkIHRvIHRoZSBQZXJpcGhlcmFsIHRocnUgSEFMX0hBU0hfeHh4X1N0YXJ0X0RNQSgpIEFQSS4KKyAgICAgICAgICAgICAgKCsrKykgSEFTSCBwcm9jZXNzaW5nOiBvbmNlIGluaXRpYWxpemF0aW9uIGlzIGRvbmUsIE1ETUFUIGJpdCBtdXN0IGJlIHNldAorICAgICAgICAgICAgICAgdGhyb3VnaCBfX0hBTF9IQVNIX1NFVF9NRE1BVCgpIG1hY3JvLgorICAgICAgICAgICAgIEZyb20gdGhhdCBwb2ludCwgZWFjaCBidWZmZXIgY2FuIGJlIGZlZCB0byB0aGUgUGVyaXBoZXJhbCB0aHJvdWdoIEhBTF9IQVNIX3h4eF9TdGFydF9ETUEoKSBBUEkuCiAgICAgICAgICAgICAgQmVmb3JlIGVudGVyaW5nIHRoZSBsYXN0IGJ1ZmZlciwgcmVzZXQgdGhlIE1ETUFUIGJpdCB3aXRoIF9fSEFMX0hBU0hfUkVTRVRfTURNQVQoKQotICAgICAgICAgICAgIG1hY3JvIHRoZW4gd3JhcC11cCB0aGUgSEFTSCBwcm9jZXNzaW5nIGluIGZlZWRpbmcgdGhlIGxhc3QgaW5wdXQgYnVmZmVyIHRocnUgdGhlCisgICAgICAgICAgICAgbWFjcm8gdGhlbiB3cmFwLXVwIHRoZSBIQVNIIHByb2Nlc3NpbmcgaW4gZmVlZGluZyB0aGUgbGFzdCBpbnB1dCBidWZmZXIgdGhyb3VnaCB0aGUKICAgICAgICAgICAgICBzYW1lIEFQSSBIQUxfSEFTSF94eHhfU3RhcnRfRE1BKCkuIFRoZSBkaWdlc3QgY2FuIHRoZW4gYmUgcmV0cmlldmVkIHdpdGggYSBjYWxsIHRvCiAgICAgICAgICAgICAgQVBJIEhBTF9IQVNIX3h4eF9GaW5pc2goKS4KICAgICAgICAgICAgICAoKysrKSBITUFDIHByb2Nlc3NpbmcgKHJlcXVpcmVzIHRvIHJlc29ydCB0byBleHRlbmRlZCBmdW5jdGlvbnMpOgpAQCAtMTE5LDI1ICsxMjAsMjcgQEAKICAgICAgICAgYW5kIG5vdCBleHRyYSBiaXRzLgogCiAgICAgICAgICgjIykgSWYgdXNlciBuZWVkcyB0byBwZXJmb3JtIGEgaGFzaCBjb21wdXRhdGlvbiBvZiBhIGxhcmdlIGlucHV0IGJ1ZmZlciB0aGF0IGlzIHNwcmVhZCBhcm91bmQgdmFyaW91cyBwbGFjZXMKLSAgICAgICAgaW4gbWVtb3J5IGFuZCB3aGVyZSBlYWNoIHBpZWNlIG9mIHRoaXMgaW5wdXQgYnVmZmVyIGlzIG5vdCBuZWNlc3NhcmlseSBhIG11bHRpcGxlIG9mIDQgYnl0ZXMgaW4gc2l6ZSwgaXQKLSAgICAgICAgYmVjb21lcyBuZWNlc3NhcnkgdG8gdXNlIGEgdGVtcG9yYXJ5IGJ1ZmZlciB0byBmb3JtYXQgdGhlIGRhdGEgYWNjb3JkaW5nbHkgYmVmb3JlIGZlZWRpbmcgdGhlbSB0byB0aGUgUGVyaXBoZXJhbC4KKyAgICAgICAgaW4gbWVtb3J5IGFuZCB3aGVyZSBlYWNoIHBpZWNlIG9mIHRoaXMgaW5wdXQgYnVmZmVyIGlzIG5vdCBuZWNlc3NhcmlseSBhIG11bHRpcGxlIG9mIDQgYnl0ZXMgaW4gc2l6ZSwgaXQgYmVjb21lcworICAgICAgICBuZWNlc3NhcnkgdG8gdXNlIGEgdGVtcG9yYXJ5IGJ1ZmZlciB0byBmb3JtYXQgdGhlIGRhdGEgYWNjb3JkaW5nbHkgYmVmb3JlIGZlZWRpbmcgdGhlbSB0byB0aGUgUGVyaXBoZXJhbC4KICAgICAgICAgSXQgaXMgYWR2aXNlZCB0byB0aGUgdXNlciB0bwogICAgICAgICgrKyspIGFjaGlldmUgdGhlIGZpcnN0IGZvcm1hdHRpbmcgb3BlcmF0aW9uIGJ5IHNvZnR3YXJlIHRoZW4gZW50ZXIgdGhlIGRhdGEKLSAgICAgICAoKysrKSB3aGlsZSB0aGUgUGVyaXBoZXJhbCBpcyBwcm9jZXNzaW5nIHRoZSBmaXJzdCBpbnB1dCBzZXQsIGNhcnJ5IG91dCB0aGUgc2Vjb25kIGZvcm1hdHRpbmcgb3BlcmF0aW9uIGJ5IHNvZnR3YXJlLCB0byBiZSByZWFkeSB3aGVuIERJTklTIG9jY3Vycy4KKyAgICAgICAoKysrKSB3aGlsZSB0aGUgUGVyaXBoZXJhbCBpcyBwcm9jZXNzaW5nIHRoZSBmaXJzdCBpbnB1dCBzZXQsIGNhcnJ5IG91dCB0aGUgc2Vjb25kIGZvcm1hdHRpbmcKKyAgICAgICAgb3BlcmF0aW9uIGJ5IHNvZnR3YXJlLCB0byBiZSByZWFkeSB3aGVuIERJTklTIG9jY3Vycy4KICAgICAgICAoKysrKSByZXBlYXQgc3RlcCAyIHVudGlsIHRoZSB3aG9sZSBtZXNzYWdlIGlzIHByb2Nlc3NlZC4KIAogICAgICBbLi5dCiAgICAgICAoIykgSEFMIGluIERNQSBtb2RlCiAKICAgICAgICAgKCMjKSBBZ2FpbiwgZHVlIHRvIGhhcmR3YXJlIGRlc2lnbiwgdGhlIERNQSB0cmFuc2ZlciB0byBmZWVkIHRoZSBkYXRhIGNhbiBvbmx5IGJlIGRvbmUgb24gYSB3b3JkLWJhc2lzLgotICAgICAgICBUaGUgc2FtZSBmaWVsZCBkZXNjcmliZWQgYWJvdmUgaW4gSEFTSF9TVFIgaXMgdXNlZCB0byBzcGVjaWZ5IHdoaWNoIGJpdHMgdG8gZGlzY2FyZCBhdCB0aGUgZW5kIG9mIHRoZSBETUEgdHJhbnNmZXIKLSAgICAgICAgdG8gcHJvY2VzcyBvbmx5IHRoZSBtZXNzYWdlIGJpdHMgYW5kIG5vdCBleHRyYSBiaXRzLiBEdWUgdG8gaGFyZHdhcmUgaW1wbGVtZW50YXRpb24sIHRoaXMgaXMgcG9zc2libGUgb25seSBhdCB0aGUKLSAgICAgICAgZW5kIG9mIHRoZSBjb21wbGV0ZSBtZXNzYWdlLiBXaGVuIHNldmVyYWwgRE1BIHRyYW5zZmVycyBhcmUgbmVlZGVkIHRvIGVudGVyIHRoZSBtZXNzYWdlLCB0aGlzIGlzIG5vdCBhcHBsaWNhYmxlIGF0Ci0gICAgICAgIHRoZSBlbmQgb2YgdGhlIGludGVybWVkaWFyeSB0cmFuc2ZlcnMuCisgICAgICAgIFRoZSBzYW1lIGZpZWxkIGRlc2NyaWJlZCBhYm92ZSBpbiBIQVNIX1NUUiBpcyB1c2VkIHRvIHNwZWNpZnkgd2hpY2ggYml0cyB0byBkaXNjYXJkIGF0IHRoZSBlbmQgb2YgdGhlCisgICAgICAgIERNQSB0cmFuc2ZlciB0byBwcm9jZXNzIG9ubHkgdGhlIG1lc3NhZ2UgYml0cyBhbmQgbm90IGV4dHJhIGJpdHMuIER1ZSB0byBoYXJkd2FyZSBpbXBsZW1lbnRhdGlvbiwKKyAgICAgICAgdGhpcyBpcyBwb3NzaWJsZSBvbmx5IGF0IHRoZSBlbmQgb2YgdGhlIGNvbXBsZXRlIG1lc3NhZ2UuIFdoZW4gc2V2ZXJhbCBETUEgdHJhbnNmZXJzIGFyZSBuZWVkZWQgdG8KKyAgICAgICAgZW50ZXIgdGhlIG1lc3NhZ2UsIHRoaXMgaXMgbm90IGFwcGxpY2FibGUgYXQgdGhlIGVuZCBvZiB0aGUgaW50ZXJtZWRpYXJ5IHRyYW5zZmVycy4KIAotICAgICAgICAoIyMpIFNpbWlsYXJseSB0byB0aGUgaW50ZXJydXB0aW9uLWRyaXZlbiBtb2RlLCBpdCBpcyBzdWdnZXN0ZWQgdG8gdGhlIHVzZXIgdG8gZm9ybWF0IHRoZSBjb25zZWN1dGl2ZSBjaHVua3Mgb2YgZGF0YQotICAgICAgICBieSBzb2Z0d2FyZSB3aGlsZSB0aGUgRE1BIHRyYW5zZmVyIGFuZCBwcm9jZXNzaW5nIGlzIG9uLWdvaW5nIGZvciB0aGUgZmlyc3QgcGFydHMgb2YgdGhlIG1lc3NhZ2UuIER1ZSB0byB0aGUgMzItYml0IGFsaWdubWVudAotICAgICAgICByZXF1aXJlZCBmb3IgdGhlIERNQSB0cmFuc2ZlciwgaXQgaXMgdW5kZXJsaW5lZCB0aGF0IHRoZSBzb2Z0d2FyZSBmb3JtYXR0aW5nIG9wZXJhdGlvbiBpcyBtb3JlIGNvbXBsZXggdGhhbiBpbiB0aGUgSVQgbW9kZS4KKyAgICAgICAgKCMjKSBTaW1pbGFybHkgdG8gdGhlIGludGVycnVwdGlvbi1kcml2ZW4gbW9kZSwgaXQgaXMgc3VnZ2VzdGVkIHRvIHRoZSB1c2VyIHRvIGZvcm1hdCB0aGUgY29uc2VjdXRpdmUKKyAgICAgICAgY2h1bmtzIG9mIGRhdGEgYnkgc29mdHdhcmUgd2hpbGUgdGhlIERNQSB0cmFuc2ZlciBhbmQgcHJvY2Vzc2luZyBpcyBvbi1nb2luZyBmb3IgdGhlIGZpcnN0IHBhcnRzIG9mCisgICAgICAgIHRoZSBtZXNzYWdlLiBEdWUgdG8gdGhlIDMyLWJpdCBhbGlnbm1lbnQgcmVxdWlyZWQgZm9yIHRoZSBETUEgdHJhbnNmZXIsIGl0IGlzIHVuZGVybGluZWQgdGhhdCB0aGUKKyAgICAgICAgc29mdHdhcmUgZm9ybWF0dGluZyBvcGVyYXRpb24gaXMgbW9yZSBjb21wbGV4IHRoYW4gaW4gdGhlIElUIG1vZGUuCiAKICAgICAgKioqIENhbGxiYWNrIHJlZ2lzdHJhdGlvbiAqKioKICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTI3MCw3ICsyNzMsOCBAQAogc3RhdGljIHZvaWQgSEFTSF9ETUFYZmVyQ3BsdChETUFfSGFuZGxlVHlwZURlZiAqaGRtYSk7CiBzdGF0aWMgdm9pZCBIQVNIX0RNQUVycm9yKERNQV9IYW5kbGVUeXBlRGVmICpoZG1hKTsKIHN0YXRpYyB2b2lkIEhBU0hfR2V0RGlnZXN0KHVpbnQ4X3QgKnBNc2dEaWdlc3QsIHVpbnQ4X3QgU2l6ZSk7Ci1zdGF0aWMgSEFMX1N0YXR1c1R5cGVEZWYgSEFTSF9XYWl0T25GbGFnVW50aWxUaW1lb3V0KEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gsIHVpbnQzMl90IEZsYWcsIEZsYWdTdGF0dXMgU3RhdHVzLCB1aW50MzJfdCBUaW1lb3V0KTsKK3N0YXRpYyBIQUxfU3RhdHVzVHlwZURlZiBIQVNIX1dhaXRPbkZsYWdVbnRpbFRpbWVvdXQoSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCwgdWludDMyX3QgRmxhZywgRmxhZ1N0YXR1cyBTdGF0dXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IFRpbWVvdXQpOwogc3RhdGljIEhBTF9TdGF0dXNUeXBlRGVmIEhBU0hfV3JpdGVEYXRhKEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gsIHVpbnQ4X3QgKnBJbkJ1ZmZlciwgdWludDMyX3QgU2l6ZSk7CiBzdGF0aWMgSEFMX1N0YXR1c1R5cGVEZWYgSEFTSF9JVChIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoKTsKIHN0YXRpYyB1aW50MzJfdCBIQVNIX1dyaXRlX0Jsb2NrX0RhdGEoSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCk7CkBAIC0yODQsOCArMjg4LDggQEAKICAgKi8KIAogLyoqIEBkZWZncm91cCBIQVNIX0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDEgSW5pdGlhbGl6YXRpb24gYW5kIGRlLWluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucwotICogIEBicmllZiAgICBJbml0aWFsaXphdGlvbiwgY29uZmlndXJhdGlvbiBhbmQgY2FsbC1iYWNrIGZ1bmN0aW9ucy4KLSAqCisgICogIEBicmllZiAgICBJbml0aWFsaXphdGlvbiwgY29uZmlndXJhdGlvbiBhbmQgY2FsbC1iYWNrIGZ1bmN0aW9ucy4KKyAgKgogQHZlcmJhdGltCiAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAgICAgICAgICAjIyMjIyBJbml0aWFsaXphdGlvbiBhbmQgZGUtaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zICMjIyMjCkBAIC0zMjQsMTEgKzMyOCwxMSBAQAogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0hBU0hfSW5pdChIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoKQogewogICAvKiBDaGVjayB0aGUgaGFzaCBoYW5kbGUgYWxsb2NhdGlvbiAqLwotICBpZihoaGFzaCA9PSBOVUxMKQorICBpZiAoaGhhc2ggPT0gTlVMTCkKICAgewogICAgIHJldHVybiBIQUxfRVJST1I7CiAgIH0KLSAgCisKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KICAgYXNzZXJ0X3BhcmFtKElTX0hBU0hfREFUQVRZUEUoaGhhc2gtPkluaXQuRGF0YVR5cGUpKTsKIApAQCAtMzQwLDkgKzM0NCwxMCBAQAogCiAgICAgLyogUmVzZXQgQ2FsbGJhY2sgcG9pbnRlcnMgaW4gSEFMX0hBU0hfU1RBVEVfUkVTRVQgb25seSAqLwogICAgIGhoYXNoLT5JbkNwbHRDYWxsYmFjayA9ICBIQUxfSEFTSF9JbkNwbHRDYWxsYmFjazsgICAgIC8qIExlZ2FjeSB3ZWFrIChzdXJjaGFyZ2VkKSBpbnB1dCBjb21wbGV0aW9uIGNhbGxiYWNrICovCi0gICAgaGhhc2gtPkRnc3RDcGx0Q2FsbGJhY2sgPSAgSEFMX0hBU0hfRGdzdENwbHRDYWxsYmFjazsgLyogTGVnYWN5IHdlYWsgKHN1cmNoYXJnZWQpIGRpZ2VzdCBjb21wdXRhdGlvbiBjb21wbGV0aW9uIGNhbGxiYWNrICovCisgICAgaGhhc2gtPkRnc3RDcGx0Q2FsbGJhY2sgPSAgSEFMX0hBU0hfRGdzdENwbHRDYWxsYmFjazsgLyogTGVnYWN5IHdlYWsgKHN1cmNoYXJnZWQpIGRpZ2VzdCBjb21wdXRhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRpb24gY2FsbGJhY2sgKi8KICAgICBoaGFzaC0+RXJyb3JDYWxsYmFjayA9ICBIQUxfSEFTSF9FcnJvckNhbGxiYWNrOyAgICAgICAvKiBMZWdhY3kgd2VhayAoc3VyY2hhcmdlZCkgZXJyb3IgY2FsbGJhY2sgKi8KLSAgICBpZihoaGFzaC0+TXNwSW5pdENhbGxiYWNrID09IE5VTEwpCisgICAgaWYgKGhoYXNoLT5Nc3BJbml0Q2FsbGJhY2sgPT0gTlVMTCkKICAgICB7CiAgICAgICBoaGFzaC0+TXNwSW5pdENhbGxiYWNrID0gSEFMX0hBU0hfTXNwSW5pdDsKICAgICB9CkBAIC0zNTEsNyArMzU2LDcgQEAKICAgICBoaGFzaC0+TXNwSW5pdENhbGxiYWNrKGhoYXNoKTsKICAgfQogI2Vsc2UKLSAgaWYoaGhhc2gtPlN0YXRlID09IEhBTF9IQVNIX1NUQVRFX1JFU0VUKQorICBpZiAoaGhhc2gtPlN0YXRlID09IEhBTF9IQVNIX1NUQVRFX1JFU0VUKQogICB7CiAgICAgLyogQWxsb2NhdGUgbG9jayByZXNvdXJjZSBhbmQgaW5pdGlhbGl6ZSBpdCAqLwogICAgIGhoYXNoLT5Mb2NrID0gSEFMX1VOTE9DS0VEOwpAQCAtMzYxLDcgKzM2Niw3IEBACiAgIH0KICNlbmRpZiAvKiAoVVNFX0hBTF9IQVNIX1JFR0lTVEVSX0NBTExCQUNLUykgKi8KIAotICAgIC8qIENoYW5nZSB0aGUgSEFTSCBzdGF0ZSAqLworICAvKiBDaGFuZ2UgdGhlIEhBU0ggc3RhdGUgKi8KICAgaGhhc2gtPlN0YXRlID0gSEFMX0hBU0hfU1RBVEVfQlVTWTsKIAogICAvKiBSZXNldCBIYXNoSW5Db3VudCwgSGFzaElUQ291bnRlciwgSGFzaEJ1ZmZTaXplIGFuZCBOYldvcmRzQWxyZWFkeVB1c2hlZCAqLwpAQCAtMzgwLDggKzM4NSw4IEBACiAgIE1PRElGWV9SRUcoSEFTSC0+Q1IsIEhBU0hfQ1JfREFUQVRZUEUsIGhoYXNoLT5Jbml0LkRhdGFUeXBlKTsKICNpZiBkZWZpbmVkKEhBU0hfQ1JfTURNQVQpCiAgIC8qIFJlc2V0IE1ETUFUIGJpdCAqLwotX19IQUxfSEFTSF9SRVNFVF9NRE1BVCgpOwotI2VuZGlmCisgIF9fSEFMX0hBU0hfUkVTRVRfTURNQVQoKTsKKyNlbmRpZiAvKiBIQVNIX0NSX01ETUFUICovCiAgIC8qIFJlc2V0IEhBU0ggaGFuZGxlIHN0YXR1cyAqLwogICBoaGFzaC0+U3RhdHVzID0gSEFMX09LOwogCkBAIC00MDMsNyArNDA4LDcgQEAKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9IQVNIX0RlSW5pdChIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoKQogewogICAvKiBDaGVjayB0aGUgSEFTSCBoYW5kbGUgYWxsb2NhdGlvbiAqLwotICBpZihoaGFzaCA9PSBOVUxMKQorICBpZiAoaGhhc2ggPT0gTlVMTCkKICAgewogICAgIHJldHVybiBIQUxfRVJST1I7CiAgIH0KQEAgLTQyMiwxMyArNDI3LDEzIEBACiAgIGhoYXNoLT5EaWdlc3RDYWxjdWxhdGlvbkRpc2FibGUgPSBSRVNFVDsKIAogI2lmIChVU0VfSEFMX0hBU0hfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCi0gICAgaWYoaGhhc2gtPk1zcERlSW5pdENhbGxiYWNrID09IE5VTEwpCi0gICAgewotICAgICAgaGhhc2gtPk1zcERlSW5pdENhbGxiYWNrID0gSEFMX0hBU0hfTXNwRGVJbml0OwotICAgIH0KKyAgaWYgKGhoYXNoLT5Nc3BEZUluaXRDYWxsYmFjayA9PSBOVUxMKQorICB7CisgICAgaGhhc2gtPk1zcERlSW5pdENhbGxiYWNrID0gSEFMX0hBU0hfTXNwRGVJbml0OworICB9CiAKLSAgICAvKiBEZUluaXQgdGhlIGxvdyBsZXZlbCBoYXJkd2FyZSAqLwotICAgIGhoYXNoLT5Nc3BEZUluaXRDYWxsYmFjayhoaGFzaCk7CisgIC8qIERlSW5pdCB0aGUgbG93IGxldmVsIGhhcmR3YXJlICovCisgIGhoYXNoLT5Nc3BEZUluaXRDYWxsYmFjayhoaGFzaCk7CiAjZWxzZQogICAvKiBEZUluaXQgdGhlIGxvdyBsZXZlbCBoYXJkd2FyZTogQ0xPQ0ssIE5WSUMgKi8KICAgSEFMX0hBU0hfTXNwRGVJbml0KGhoYXNoKTsKQEAgLTQ4NSw3ICs0OTAsNyBAQAogICAqIEBicmllZiAgSW5wdXQgZGF0YSB0cmFuc2ZlciBjb21wbGV0ZSBjYWxsIGJhY2suCiAgICogQG5vdGUgICBIQUxfSEFTSF9JbkNwbHRDYWxsYmFjaygpIGlzIGNhbGxlZCB3aGVuIHRoZSBjb21wbGV0ZSBpbnB1dCBtZXNzYWdlCiAgICogICAgICAgICBoYXMgYmVlbiBmZWQgdG8gdGhlIFBlcmlwaGVyYWwuIFRoaXMgQVBJIGlzIGludm9rZWQgb25seSB3aGVuIGlucHV0IGRhdGEgYXJlCi0gICogICAgICAgICBlbnRlcmVkIHVuZGVyIGludGVycnVwdGlvbiBvciB0aHJ1IERNQS4KKyAgKiAgICAgICAgIGVudGVyZWQgdW5kZXIgaW50ZXJydXB0aW9uIG9yIHRocm91Z2ggRE1BLgogICAqIEBub3RlICAgSW4gY2FzZSBvZiBIQVNIIG9yIEhNQUMgbXVsdGktYnVmZmVyIERNQSBmZWVkaW5nIGNhc2UgKE1ETUFUIGJpdCBzZXQpLAogICAqICAgICAgICAgSEFMX0hBU0hfSW5DcGx0Q2FsbGJhY2soKSBpcyBjYWxsZWQgYXQgdGhlIGVuZCBvZiBlYWNoIGJ1ZmZlciBmZWVkaW5nCiAgICogICAgICAgICB0byB0aGUgUGVyaXBoZXJhbC4KQEAgLTU1MSwxMSArNTU2LDEyIEBACiAgICogQHBhcmFtIHBDYWxsYmFjayBwb2ludGVyIHRvIHRoZSBDYWxsYmFjayBmdW5jdGlvbgogICAqIEByZXR2YWwgc3RhdHVzCiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfSEFTSF9SZWdpc3RlckNhbGxiYWNrKEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gsIEhBTF9IQVNIX0NhbGxiYWNrSURUeXBlRGVmIENhbGxiYWNrSUQsIHBIQVNIX0NhbGxiYWNrVHlwZURlZiBwQ2FsbGJhY2spCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfSEFTSF9SZWdpc3RlckNhbGxiYWNrKEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gsIEhBTF9IQVNIX0NhbGxiYWNrSURUeXBlRGVmIENhbGxiYWNrSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBIQVNIX0NhbGxiYWNrVHlwZURlZiBwQ2FsbGJhY2spCiB7CiAgIEhBTF9TdGF0dXNUeXBlRGVmIHN0YXR1cyA9IEhBTF9PSzsKIAotICBpZihwQ2FsbGJhY2sgPT0gTlVMTCkKKyAgaWYgKHBDYWxsYmFjayA9PSBOVUxMKQogICB7CiAgICAgLyogVXBkYXRlIHRoZSBlcnJvciBjb2RlICovCiAgICAgaGhhc2gtPkVycm9yQ29kZSB8PSBIQUxfSEFTSF9FUlJPUl9JTlZBTElEX0NBTExCQUNLOwpAQCAtNTY0LDY0ICs1NzAsNjQgQEAKICAgLyogUHJvY2VzcyBsb2NrZWQgKi8KICAgX19IQUxfTE9DSyhoaGFzaCk7CiAKLSAgaWYoSEFMX0hBU0hfU1RBVEVfUkVBRFkgPT0gaGhhc2gtPlN0YXRlKQorICBpZiAoSEFMX0hBU0hfU1RBVEVfUkVBRFkgPT0gaGhhc2gtPlN0YXRlKQogICB7CiAgICAgc3dpdGNoIChDYWxsYmFja0lEKQogICAgIHsKLSAgICBjYXNlIEhBTF9IQVNIX0lOUFVUQ1BMVF9DQl9JRCA6Ci0gICAgICBoaGFzaC0+SW5DcGx0Q2FsbGJhY2sgPSBwQ2FsbGJhY2s7Ci0gICAgICBicmVhazsKKyAgICAgIGNhc2UgSEFMX0hBU0hfSU5QVVRDUExUX0NCX0lEIDoKKyAgICAgICAgaGhhc2gtPkluQ3BsdENhbGxiYWNrID0gcENhbGxiYWNrOworICAgICAgICBicmVhazsKIAotICAgIGNhc2UgSEFMX0hBU0hfREdTVENQTFRfQ0JfSUQgOgotICAgICAgaGhhc2gtPkRnc3RDcGx0Q2FsbGJhY2sgPSBwQ2FsbGJhY2s7Ci0gICAgICBicmVhazsKKyAgICAgIGNhc2UgSEFMX0hBU0hfREdTVENQTFRfQ0JfSUQgOgorICAgICAgICBoaGFzaC0+RGdzdENwbHRDYWxsYmFjayA9IHBDYWxsYmFjazsKKyAgICAgICAgYnJlYWs7CiAKLSAgICBjYXNlIEhBTF9IQVNIX0VSUk9SX0NCX0lEIDoKLSAgICAgIGhoYXNoLT5FcnJvckNhbGxiYWNrID0gcENhbGxiYWNrOwotICAgICAgYnJlYWs7CisgICAgICBjYXNlIEhBTF9IQVNIX0VSUk9SX0NCX0lEIDoKKyAgICAgICAgaGhhc2gtPkVycm9yQ2FsbGJhY2sgPSBwQ2FsbGJhY2s7CisgICAgICAgIGJyZWFrOwogCi0gICAgY2FzZSBIQUxfSEFTSF9NU1BJTklUX0NCX0lEIDoKLSAgICAgIGhoYXNoLT5Nc3BJbml0Q2FsbGJhY2sgPSBwQ2FsbGJhY2s7Ci0gICAgICBicmVhazsKKyAgICAgIGNhc2UgSEFMX0hBU0hfTVNQSU5JVF9DQl9JRCA6CisgICAgICAgIGhoYXNoLT5Nc3BJbml0Q2FsbGJhY2sgPSBwQ2FsbGJhY2s7CisgICAgICAgIGJyZWFrOwogCi0gICAgY2FzZSBIQUxfSEFTSF9NU1BERUlOSVRfQ0JfSUQgOgotICAgICAgaGhhc2gtPk1zcERlSW5pdENhbGxiYWNrID0gcENhbGxiYWNrOwotICAgICAgYnJlYWs7CisgICAgICBjYXNlIEhBTF9IQVNIX01TUERFSU5JVF9DQl9JRCA6CisgICAgICAgIGhoYXNoLT5Nc3BEZUluaXRDYWxsYmFjayA9IHBDYWxsYmFjazsKKyAgICAgICAgYnJlYWs7CiAKLSAgICBkZWZhdWx0IDoKLSAgICAgLyogVXBkYXRlIHRoZSBlcnJvciBjb2RlICovCi0gICAgIGhoYXNoLT5FcnJvckNvZGUgfD0gSEFMX0hBU0hfRVJST1JfSU5WQUxJRF9DQUxMQkFDSzsKLSAgICAgLyogdXBkYXRlIHJldHVybiBzdGF0dXMgKi8KLSAgICAgIHN0YXR1cyA9ICBIQUxfRVJST1I7Ci0gICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQgOgorICAgICAgICAvKiBVcGRhdGUgdGhlIGVycm9yIGNvZGUgKi8KKyAgICAgICAgaGhhc2gtPkVycm9yQ29kZSB8PSBIQUxfSEFTSF9FUlJPUl9JTlZBTElEX0NBTExCQUNLOworICAgICAgICAvKiB1cGRhdGUgcmV0dXJuIHN0YXR1cyAqLworICAgICAgICBzdGF0dXMgPSAgSEFMX0VSUk9SOworICAgICAgICBicmVhazsKICAgICB9CiAgIH0KLSAgZWxzZSBpZihIQUxfSEFTSF9TVEFURV9SRVNFVCA9PSBoaGFzaC0+U3RhdGUpCisgIGVsc2UgaWYgKEhBTF9IQVNIX1NUQVRFX1JFU0VUID09IGhoYXNoLT5TdGF0ZSkKICAgewogICAgIHN3aXRjaCAoQ2FsbGJhY2tJRCkKICAgICB7Ci0gICAgY2FzZSBIQUxfSEFTSF9NU1BJTklUX0NCX0lEIDoKLSAgICAgIGhoYXNoLT5Nc3BJbml0Q2FsbGJhY2sgPSBwQ2FsbGJhY2s7Ci0gICAgICBicmVhazsKKyAgICAgIGNhc2UgSEFMX0hBU0hfTVNQSU5JVF9DQl9JRCA6CisgICAgICAgIGhoYXNoLT5Nc3BJbml0Q2FsbGJhY2sgPSBwQ2FsbGJhY2s7CisgICAgICAgIGJyZWFrOwogCi0gICAgY2FzZSBIQUxfSEFTSF9NU1BERUlOSVRfQ0JfSUQgOgotICAgICAgaGhhc2gtPk1zcERlSW5pdENhbGxiYWNrID0gcENhbGxiYWNrOwotICAgICAgYnJlYWs7CisgICAgICBjYXNlIEhBTF9IQVNIX01TUERFSU5JVF9DQl9JRCA6CisgICAgICAgIGhoYXNoLT5Nc3BEZUluaXRDYWxsYmFjayA9IHBDYWxsYmFjazsKKyAgICAgICAgYnJlYWs7CiAKLSAgICBkZWZhdWx0IDoKLSAgICAgLyogVXBkYXRlIHRoZSBlcnJvciBjb2RlICovCi0gICAgIGhoYXNoLT5FcnJvckNvZGUgfD0gSEFMX0hBU0hfRVJST1JfSU5WQUxJRF9DQUxMQkFDSzsKLSAgICAgLyogdXBkYXRlIHJldHVybiBzdGF0dXMgKi8KLSAgICAgIHN0YXR1cyA9ICBIQUxfRVJST1I7Ci0gICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQgOgorICAgICAgICAvKiBVcGRhdGUgdGhlIGVycm9yIGNvZGUgKi8KKyAgICAgICAgaGhhc2gtPkVycm9yQ29kZSB8PSBIQUxfSEFTSF9FUlJPUl9JTlZBTElEX0NBTExCQUNLOworICAgICAgICAvKiB1cGRhdGUgcmV0dXJuIHN0YXR1cyAqLworICAgICAgICBzdGF0dXMgPSAgSEFMX0VSUk9SOworICAgICAgICBicmVhazsKICAgICB9CiAgIH0KICAgZWxzZQogICB7CiAgICAgLyogVXBkYXRlIHRoZSBlcnJvciBjb2RlICovCi0gICAgIGhoYXNoLT5FcnJvckNvZGUgfD0gSEFMX0hBU0hfRVJST1JfSU5WQUxJRF9DQUxMQkFDSzsKLSAgICAgLyogdXBkYXRlIHJldHVybiBzdGF0dXMgKi8KLSAgICAgIHN0YXR1cyA9ICBIQUxfRVJST1I7CisgICAgaGhhc2gtPkVycm9yQ29kZSB8PSBIQUxfSEFTSF9FUlJPUl9JTlZBTElEX0NBTExCQUNLOworICAgIC8qIHVwZGF0ZSByZXR1cm4gc3RhdHVzICovCisgICAgc3RhdHVzID0gIEhBTF9FUlJPUjsKICAgfQogCiAgIC8qIFJlbGVhc2UgTG9jayAqLwpAQCAtNjQ0LDY5ICs2NTAsNzAgQEAKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9IQVNIX1VuUmVnaXN0ZXJDYWxsYmFjayhIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoLCBIQUxfSEFTSF9DYWxsYmFja0lEVHlwZURlZiBDYWxsYmFja0lEKQogewotSEFMX1N0YXR1c1R5cGVEZWYgc3RhdHVzID0gSEFMX09LOworICBIQUxfU3RhdHVzVHlwZURlZiBzdGF0dXMgPSBIQUxfT0s7CiAKICAgLyogUHJvY2VzcyBsb2NrZWQgKi8KICAgX19IQUxfTE9DSyhoaGFzaCk7CiAKLSAgaWYoSEFMX0hBU0hfU1RBVEVfUkVBRFkgPT0gaGhhc2gtPlN0YXRlKQorICBpZiAoSEFMX0hBU0hfU1RBVEVfUkVBRFkgPT0gaGhhc2gtPlN0YXRlKQogICB7CiAgICAgc3dpdGNoIChDYWxsYmFja0lEKQogICAgIHsKLSAgICBjYXNlIEhBTF9IQVNIX0lOUFVUQ1BMVF9DQl9JRCA6Ci0gICAgICBoaGFzaC0+SW5DcGx0Q2FsbGJhY2sgPSBIQUxfSEFTSF9JbkNwbHRDYWxsYmFjazsgICAgIC8qIExlZ2FjeSB3ZWFrIChzdXJjaGFyZ2VkKSBpbnB1dCBjb21wbGV0aW9uIGNhbGxiYWNrICovCi0gICAgICBicmVhazsKKyAgICAgIGNhc2UgSEFMX0hBU0hfSU5QVVRDUExUX0NCX0lEIDoKKyAgICAgICAgaGhhc2gtPkluQ3BsdENhbGxiYWNrID0gSEFMX0hBU0hfSW5DcGx0Q2FsbGJhY2s7ICAgICAvKiBMZWdhY3kgd2VhayAoc3VyY2hhcmdlZCkgaW5wdXQgY29tcGxldGlvbiBjYWxsYmFjayAqLworICAgICAgICBicmVhazsKIAotICAgIGNhc2UgSEFMX0hBU0hfREdTVENQTFRfQ0JfSUQgOgotICAgICAgaGhhc2gtPkRnc3RDcGx0Q2FsbGJhY2sgPSBIQUxfSEFTSF9EZ3N0Q3BsdENhbGxiYWNrOyAvKiBMZWdhY3kgd2VhayAoc3VyY2hhcmdlZCkgZGlnZXN0IGNvbXB1dGF0aW9uIGNvbXBsZXRpb24gY2FsbGJhY2sgKi8KLSAgICAgIGJyZWFrOworICAgICAgY2FzZSBIQUxfSEFTSF9ER1NUQ1BMVF9DQl9JRCA6CisgICAgICAgIGhoYXNoLT5EZ3N0Q3BsdENhbGxiYWNrID0gSEFMX0hBU0hfRGdzdENwbHRDYWxsYmFjazsgLyogTGVnYWN5IHdlYWsgKHN1cmNoYXJnZWQpIGRpZ2VzdCBjb21wdXRhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRpb24gY2FsbGJhY2sgKi8KKyAgICAgICAgYnJlYWs7CiAKLSAgICBjYXNlIEhBTF9IQVNIX0VSUk9SX0NCX0lEIDoKLSAgICAgIGhoYXNoLT5FcnJvckNhbGxiYWNrID0gSEFMX0hBU0hfRXJyb3JDYWxsYmFjazsgICAgICAgLyogTGVnYWN5IHdlYWsgKHN1cmNoYXJnZWQpIGVycm9yIGNhbGxiYWNrICovCi0gICAgICBicmVhazsKKyAgICAgIGNhc2UgSEFMX0hBU0hfRVJST1JfQ0JfSUQgOgorICAgICAgICBoaGFzaC0+RXJyb3JDYWxsYmFjayA9IEhBTF9IQVNIX0Vycm9yQ2FsbGJhY2s7ICAgICAgIC8qIExlZ2FjeSB3ZWFrIChzdXJjaGFyZ2VkKSBlcnJvciBjYWxsYmFjayAqLworICAgICAgICBicmVhazsKIAotICAgIGNhc2UgSEFMX0hBU0hfTVNQSU5JVF9DQl9JRCA6Ci0gICAgICBoaGFzaC0+TXNwSW5pdENhbGxiYWNrID0gSEFMX0hBU0hfTXNwSW5pdDsgICAgICAgICAgIC8qIExlZ2FjeSB3ZWFrIChzdXJjaGFyZ2VkKSBNc3AgSW5pdCAqLwotICAgICAgYnJlYWs7CisgICAgICBjYXNlIEhBTF9IQVNIX01TUElOSVRfQ0JfSUQgOgorICAgICAgICBoaGFzaC0+TXNwSW5pdENhbGxiYWNrID0gSEFMX0hBU0hfTXNwSW5pdDsgICAgICAgICAgIC8qIExlZ2FjeSB3ZWFrIChzdXJjaGFyZ2VkKSBNc3AgSW5pdCAqLworICAgICAgICBicmVhazsKIAotICAgIGNhc2UgSEFMX0hBU0hfTVNQREVJTklUX0NCX0lEIDoKLSAgICAgIGhoYXNoLT5Nc3BEZUluaXRDYWxsYmFjayA9IEhBTF9IQVNIX01zcERlSW5pdDsgICAgICAgLyogTGVnYWN5IHdlYWsgKHN1cmNoYXJnZWQpIE1zcCBEZUluaXQgKi8KLSAgICAgIGJyZWFrOworICAgICAgY2FzZSBIQUxfSEFTSF9NU1BERUlOSVRfQ0JfSUQgOgorICAgICAgICBoaGFzaC0+TXNwRGVJbml0Q2FsbGJhY2sgPSBIQUxfSEFTSF9Nc3BEZUluaXQ7ICAgICAgIC8qIExlZ2FjeSB3ZWFrIChzdXJjaGFyZ2VkKSBNc3AgRGVJbml0ICovCisgICAgICAgIGJyZWFrOwogCi0gICAgZGVmYXVsdCA6Ci0gICAgIC8qIFVwZGF0ZSB0aGUgZXJyb3IgY29kZSAqLwotICAgICBoaGFzaC0+RXJyb3JDb2RlIHw9IEhBTF9IQVNIX0VSUk9SX0lOVkFMSURfQ0FMTEJBQ0s7Ci0gICAgIC8qIHVwZGF0ZSByZXR1cm4gc3RhdHVzICovCi0gICAgICBzdGF0dXMgPSAgSEFMX0VSUk9SOwotICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0IDoKKyAgICAgICAgLyogVXBkYXRlIHRoZSBlcnJvciBjb2RlICovCisgICAgICAgIGhoYXNoLT5FcnJvckNvZGUgfD0gSEFMX0hBU0hfRVJST1JfSU5WQUxJRF9DQUxMQkFDSzsKKyAgICAgICAgLyogdXBkYXRlIHJldHVybiBzdGF0dXMgKi8KKyAgICAgICAgc3RhdHVzID0gIEhBTF9FUlJPUjsKKyAgICAgICAgYnJlYWs7CiAgICAgfQogICB9Ci0gIGVsc2UgaWYoSEFMX0hBU0hfU1RBVEVfUkVTRVQgPT0gaGhhc2gtPlN0YXRlKQorICBlbHNlIGlmIChIQUxfSEFTSF9TVEFURV9SRVNFVCA9PSBoaGFzaC0+U3RhdGUpCiAgIHsKICAgICBzd2l0Y2ggKENhbGxiYWNrSUQpCiAgICAgewotICAgIGNhc2UgSEFMX0hBU0hfTVNQSU5JVF9DQl9JRCA6Ci0gICAgICBoaGFzaC0+TXNwSW5pdENhbGxiYWNrID0gSEFMX0hBU0hfTXNwSW5pdDsgICAgICAgICAgIC8qIExlZ2FjeSB3ZWFrIChzdXJjaGFyZ2VkKSBNc3AgSW5pdCAqLwotICAgICAgYnJlYWs7CisgICAgICBjYXNlIEhBTF9IQVNIX01TUElOSVRfQ0JfSUQgOgorICAgICAgICBoaGFzaC0+TXNwSW5pdENhbGxiYWNrID0gSEFMX0hBU0hfTXNwSW5pdDsgICAgICAgICAgIC8qIExlZ2FjeSB3ZWFrIChzdXJjaGFyZ2VkKSBNc3AgSW5pdCAqLworICAgICAgICBicmVhazsKIAotICAgIGNhc2UgSEFMX0hBU0hfTVNQREVJTklUX0NCX0lEIDoKLSAgICAgIGhoYXNoLT5Nc3BEZUluaXRDYWxsYmFjayA9IEhBTF9IQVNIX01zcERlSW5pdDsgICAgICAgLyogTGVnYWN5IHdlYWsgKHN1cmNoYXJnZWQpIE1zcCBEZUluaXQgKi8KLSAgICAgIGJyZWFrOworICAgICAgY2FzZSBIQUxfSEFTSF9NU1BERUlOSVRfQ0JfSUQgOgorICAgICAgICBoaGFzaC0+TXNwRGVJbml0Q2FsbGJhY2sgPSBIQUxfSEFTSF9Nc3BEZUluaXQ7ICAgICAgIC8qIExlZ2FjeSB3ZWFrIChzdXJjaGFyZ2VkKSBNc3AgRGVJbml0ICovCisgICAgICAgIGJyZWFrOwogCi0gICAgZGVmYXVsdCA6Ci0gICAgIC8qIFVwZGF0ZSB0aGUgZXJyb3IgY29kZSAqLwotICAgICBoaGFzaC0+RXJyb3JDb2RlIHw9IEhBTF9IQVNIX0VSUk9SX0lOVkFMSURfQ0FMTEJBQ0s7Ci0gICAgIC8qIHVwZGF0ZSByZXR1cm4gc3RhdHVzICovCi0gICAgICBzdGF0dXMgPSAgSEFMX0VSUk9SOwotICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0IDoKKyAgICAgICAgLyogVXBkYXRlIHRoZSBlcnJvciBjb2RlICovCisgICAgICAgIGhoYXNoLT5FcnJvckNvZGUgfD0gSEFMX0hBU0hfRVJST1JfSU5WQUxJRF9DQUxMQkFDSzsKKyAgICAgICAgLyogdXBkYXRlIHJldHVybiBzdGF0dXMgKi8KKyAgICAgICAgc3RhdHVzID0gIEhBTF9FUlJPUjsKKyAgICAgICAgYnJlYWs7CiAgICAgfQogICB9CiAgIGVsc2UKICAgewotICAgICAvKiBVcGRhdGUgdGhlIGVycm9yIGNvZGUgKi8KLSAgICAgaGhhc2gtPkVycm9yQ29kZSB8PSBIQUxfSEFTSF9FUlJPUl9JTlZBTElEX0NBTExCQUNLOwotICAgICAvKiB1cGRhdGUgcmV0dXJuIHN0YXR1cyAqLwotICAgICAgc3RhdHVzID0gIEhBTF9FUlJPUjsKKyAgICAvKiBVcGRhdGUgdGhlIGVycm9yIGNvZGUgKi8KKyAgICBoaGFzaC0+RXJyb3JDb2RlIHw9IEhBTF9IQVNIX0VSUk9SX0lOVkFMSURfQ0FMTEJBQ0s7CisgICAgLyogdXBkYXRlIHJldHVybiBzdGF0dXMgKi8KKyAgICBzdGF0dXMgPSAgSEFMX0VSUk9SOwogICB9CiAKICAgLyogUmVsZWFzZSBMb2NrICovCkBAIC03MjAsOCArNzI3LDggQEAKICAgKi8KIAogLyoqIEBkZWZncm91cCBIQVNIX0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDIgSEFTSCBwcm9jZXNzaW5nIGZ1bmN0aW9ucyBpbiBwb2xsaW5nIG1vZGUKLSAqICBAYnJpZWYgICBIQVNIIHByb2Nlc3NpbmcgZnVuY3Rpb25zIHVzaW5nIHBvbGxpbmcgbW9kZS4KLSAqCisgICogIEBicmllZiAgIEhBU0ggcHJvY2Vzc2luZyBmdW5jdGlvbnMgdXNpbmcgcG9sbGluZyBtb2RlLgorICAqCiBAdmVyYmF0aW0KICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgICAgICAgICAgICMjIyMjIFBvbGxpbmcgbW9kZSBIQVNIIHByb2Nlc3NpbmcgZnVuY3Rpb25zICMjIyMjCkBAIC03NTksNyArNzY2LDggQEAKICAgKiBAcGFyYW0gIFRpbWVvdXQgVGltZW91dCB2YWx1ZQogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0hBU0hfTUQ1X1N0YXJ0KEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gsIHVpbnQ4X3QgKnBJbkJ1ZmZlciwgdWludDMyX3QgU2l6ZSwgdWludDhfdCogcE91dEJ1ZmZlciwgdWludDMyX3QgVGltZW91dCkKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9IQVNIX01ENV9TdGFydChIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoLCB1aW50OF90ICpwSW5CdWZmZXIsIHVpbnQzMl90IFNpemUsIHVpbnQ4X3QgKnBPdXRCdWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgVGltZW91dCkKIHsKICAgcmV0dXJuIEhBU0hfU3RhcnQoaGhhc2gsIHBJbkJ1ZmZlciwgU2l6ZSwgcE91dEJ1ZmZlciwgVGltZW91dCwgSEFTSF9BTEdPU0VMRUNUSU9OX01ENSk7CiB9CkBAIC03ODYsNyArNzk0LDcgQEAKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9IQVNIX01ENV9BY2NtbHQoSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCwgdWludDhfdCAqcEluQnVmZmVyLCB1aW50MzJfdCBTaXplKQogewotICByZXR1cm4gIEhBU0hfQWNjdW11bGF0ZShoaGFzaCwgcEluQnVmZmVyLCBTaXplLEhBU0hfQUxHT1NFTEVDVElPTl9NRDUpOworICByZXR1cm4gIEhBU0hfQWNjdW11bGF0ZShoaGFzaCwgcEluQnVmZmVyLCBTaXplLCBIQVNIX0FMR09TRUxFQ1RJT05fTUQ1KTsKIH0KIAogLyoqCkBAIC03OTksNyArODA3LDggQEAKICAgKiBAcGFyYW0gIFRpbWVvdXQgVGltZW91dCB2YWx1ZQogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0hBU0hfTUQ1X0FjY21sdF9FbmQoSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCwgdWludDhfdCAqcEluQnVmZmVyLCB1aW50MzJfdCBTaXplLCB1aW50OF90KiBwT3V0QnVmZmVyLCB1aW50MzJfdCBUaW1lb3V0KQorSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0hBU0hfTUQ1X0FjY21sdF9FbmQoSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCwgdWludDhfdCAqcEluQnVmZmVyLCB1aW50MzJfdCBTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqcE91dEJ1ZmZlciwgdWludDMyX3QgVGltZW91dCkKIHsKICAgcmV0dXJuIEhBU0hfU3RhcnQoaGhhc2gsIHBJbkJ1ZmZlciwgU2l6ZSwgcE91dEJ1ZmZlciwgVGltZW91dCwgSEFTSF9BTEdPU0VMRUNUSU9OX01ENSk7CiB9CkBAIC04MTUsNyArODI0LDggQEAKICAgKiBAcGFyYW0gIFRpbWVvdXQgVGltZW91dCB2YWx1ZQogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0hBU0hfU0hBMV9TdGFydChIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoLCB1aW50OF90ICpwSW5CdWZmZXIsIHVpbnQzMl90IFNpemUsIHVpbnQ4X3QqIHBPdXRCdWZmZXIsIHVpbnQzMl90IFRpbWVvdXQpCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfSEFTSF9TSEExX1N0YXJ0KEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gsIHVpbnQ4X3QgKnBJbkJ1ZmZlciwgdWludDMyX3QgU2l6ZSwgdWludDhfdCAqcE91dEJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgVGltZW91dCkKIHsKICAgcmV0dXJuIEhBU0hfU3RhcnQoaGhhc2gsIHBJbkJ1ZmZlciwgU2l6ZSwgcE91dEJ1ZmZlciwgVGltZW91dCwgSEFTSF9BTEdPU0VMRUNUSU9OX1NIQTEpOwogfQpAQCAtODQyLDcgKzg1Miw3IEBACiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfSEFTSF9TSEExX0FjY21sdChIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoLCB1aW50OF90ICpwSW5CdWZmZXIsIHVpbnQzMl90IFNpemUpCiB7Ci0gIHJldHVybiAgSEFTSF9BY2N1bXVsYXRlKGhoYXNoLCBwSW5CdWZmZXIsIFNpemUsSEFTSF9BTEdPU0VMRUNUSU9OX1NIQTEpOworICByZXR1cm4gIEhBU0hfQWNjdW11bGF0ZShoaGFzaCwgcEluQnVmZmVyLCBTaXplLCBIQVNIX0FMR09TRUxFQ1RJT05fU0hBMSk7CiB9CiAKIC8qKgpAQCAtODU1LDcgKzg2NSw4IEBACiAgICogQHBhcmFtICBUaW1lb3V0IFRpbWVvdXQgdmFsdWUKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9IQVNIX1NIQTFfQWNjbWx0X0VuZChIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoLCB1aW50OF90ICpwSW5CdWZmZXIsIHVpbnQzMl90IFNpemUsIHVpbnQ4X3QqIHBPdXRCdWZmZXIsIHVpbnQzMl90IFRpbWVvdXQpCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfSEFTSF9TSEExX0FjY21sdF9FbmQoSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCwgdWludDhfdCAqcEluQnVmZmVyLCB1aW50MzJfdCBTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnBPdXRCdWZmZXIsIHVpbnQzMl90IFRpbWVvdXQpCiB7CiAgIHJldHVybiBIQVNIX1N0YXJ0KGhoYXNoLCBwSW5CdWZmZXIsIFNpemUsIHBPdXRCdWZmZXIsIFRpbWVvdXQsIEhBU0hfQUxHT1NFTEVDVElPTl9TSEExKTsKIH0KQEAgLTg2NSw4ICs4NzYsOCBAQAogICAqLwogCiAvKiogQGRlZmdyb3VwIEhBU0hfRXhwb3J0ZWRfRnVuY3Rpb25zX0dyb3VwMyBIQVNIIHByb2Nlc3NpbmcgZnVuY3Rpb25zIGluIGludGVycnVwdCBtb2RlCi0gKiAgQGJyaWVmICAgSEFTSCBwcm9jZXNzaW5nIGZ1bmN0aW9ucyB1c2luZyBpbnRlcnJ1cHQgbW9kZS4KLSAqCisgICogIEBicmllZiAgIEhBU0ggcHJvY2Vzc2luZyBmdW5jdGlvbnMgdXNpbmcgaW50ZXJydXB0IG1vZGUuCisgICoKIEB2ZXJiYXRpbQogID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgICAgICAgICAgICAgIyMjIyMgSW50ZXJydXB0aW9uIG1vZGUgSEFTSCBwcm9jZXNzaW5nIGZ1bmN0aW9ucyAjIyMjIwpAQCAtOTAyLDkgKzkxMywxMCBAQAogICAqIEBwYXJhbSAgcE91dEJ1ZmZlciBwb2ludGVyIHRvIHRoZSBjb21wdXRlZCBkaWdlc3QuIERpZ2VzdCBzaXplIGlzIDE2IGJ5dGVzLgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0hBU0hfTUQ1X1N0YXJ0X0lUKEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gsIHVpbnQ4X3QgKnBJbkJ1ZmZlciwgdWludDMyX3QgU2l6ZSwgdWludDhfdCogcE91dEJ1ZmZlcikKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9IQVNIX01ENV9TdGFydF9JVChIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoLCB1aW50OF90ICpwSW5CdWZmZXIsIHVpbnQzMl90IFNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqcE91dEJ1ZmZlcikKIHsKLSAgcmV0dXJuIEhBU0hfU3RhcnRfSVQoaGhhc2gsIHBJbkJ1ZmZlciwgU2l6ZSwgcE91dEJ1ZmZlcixIQVNIX0FMR09TRUxFQ1RJT05fTUQ1KTsKKyAgcmV0dXJuIEhBU0hfU3RhcnRfSVQoaGhhc2gsIHBJbkJ1ZmZlciwgU2l6ZSwgcE91dEJ1ZmZlciwgSEFTSF9BTEdPU0VMRUNUSU9OX01ENSk7CiB9CiAKIC8qKgpAQCAtOTI3LDcgKzkzOSw3IEBACiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfSEFTSF9NRDVfQWNjbWx0X0lUKEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gsIHVpbnQ4X3QgKnBJbkJ1ZmZlciwgdWludDMyX3QgU2l6ZSkKIHsKLSAgcmV0dXJuICBIQVNIX0FjY3VtdWxhdGVfSVQoaGhhc2gsIHBJbkJ1ZmZlciwgU2l6ZSxIQVNIX0FMR09TRUxFQ1RJT05fTUQ1KTsKKyAgcmV0dXJuICBIQVNIX0FjY3VtdWxhdGVfSVQoaGhhc2gsIHBJbkJ1ZmZlciwgU2l6ZSwgSEFTSF9BTEdPU0VMRUNUSU9OX01ENSk7CiB9CiAKIC8qKgpAQCAtOTM5LDkgKzk1MSwxMCBAQAogICAqIEBwYXJhbSAgcE91dEJ1ZmZlciBwb2ludGVyIHRvIHRoZSBjb21wdXRlZCBkaWdlc3QuIERpZ2VzdCBzaXplIGlzIDE2IGJ5dGVzLgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0hBU0hfTUQ1X0FjY21sdF9FbmRfSVQoSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCwgdWludDhfdCAqcEluQnVmZmVyLCB1aW50MzJfdCBTaXplLCB1aW50OF90KiBwT3V0QnVmZmVyKQorSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0hBU0hfTUQ1X0FjY21sdF9FbmRfSVQoSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCwgdWludDhfdCAqcEluQnVmZmVyLCB1aW50MzJfdCBTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqcE91dEJ1ZmZlcikKIHsKLSAgcmV0dXJuIEhBU0hfU3RhcnRfSVQoaGhhc2gsIHBJbkJ1ZmZlciwgU2l6ZSwgcE91dEJ1ZmZlcixIQVNIX0FMR09TRUxFQ1RJT05fTUQ1KTsKKyAgcmV0dXJuIEhBU0hfU3RhcnRfSVQoaGhhc2gsIHBJbkJ1ZmZlciwgU2l6ZSwgcE91dEJ1ZmZlciwgSEFTSF9BTEdPU0VMRUNUSU9OX01ENSk7CiB9CiAKIC8qKgpAQCAtOTU0LDkgKzk2NywxMCBAQAogICAqIEBwYXJhbSAgcE91dEJ1ZmZlciBwb2ludGVyIHRvIHRoZSBjb21wdXRlZCBkaWdlc3QuIERpZ2VzdCBzaXplIGlzIDIwIGJ5dGVzLgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0hBU0hfU0hBMV9TdGFydF9JVChIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoLCB1aW50OF90ICpwSW5CdWZmZXIsIHVpbnQzMl90IFNpemUsIHVpbnQ4X3QqIHBPdXRCdWZmZXIpCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfSEFTSF9TSEExX1N0YXJ0X0lUKEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gsIHVpbnQ4X3QgKnBJbkJ1ZmZlciwgdWludDMyX3QgU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqcE91dEJ1ZmZlcikKIHsKLSAgcmV0dXJuIEhBU0hfU3RhcnRfSVQoaGhhc2gsIHBJbkJ1ZmZlciwgU2l6ZSwgcE91dEJ1ZmZlcixIQVNIX0FMR09TRUxFQ1RJT05fU0hBMSk7CisgIHJldHVybiBIQVNIX1N0YXJ0X0lUKGhoYXNoLCBwSW5CdWZmZXIsIFNpemUsIHBPdXRCdWZmZXIsIEhBU0hfQUxHT1NFTEVDVElPTl9TSEExKTsKIH0KIAogCkBAIC05ODAsNyArOTk0LDcgQEAKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9IQVNIX1NIQTFfQWNjbWx0X0lUKEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gsIHVpbnQ4X3QgKnBJbkJ1ZmZlciwgdWludDMyX3QgU2l6ZSkKIHsKLSAgcmV0dXJuICBIQVNIX0FjY3VtdWxhdGVfSVQoaGhhc2gsIHBJbkJ1ZmZlciwgU2l6ZSxIQVNIX0FMR09TRUxFQ1RJT05fU0hBMSk7CisgIHJldHVybiAgSEFTSF9BY2N1bXVsYXRlX0lUKGhoYXNoLCBwSW5CdWZmZXIsIFNpemUsIEhBU0hfQUxHT1NFTEVDVElPTl9TSEExKTsKIH0KIAogLyoqCkBAIC05OTIsOSArMTAwNiwxMCBAQAogICAqIEBwYXJhbSAgcE91dEJ1ZmZlciBwb2ludGVyIHRvIHRoZSBjb21wdXRlZCBkaWdlc3QuIERpZ2VzdCBzaXplIGlzIDIwIGJ5dGVzLgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0hBU0hfU0hBMV9BY2NtbHRfRW5kX0lUKEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gsIHVpbnQ4X3QgKnBJbkJ1ZmZlciwgdWludDMyX3QgU2l6ZSwgdWludDhfdCogcE91dEJ1ZmZlcikKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9IQVNIX1NIQTFfQWNjbWx0X0VuZF9JVChIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoLCB1aW50OF90ICpwSW5CdWZmZXIsIHVpbnQzMl90IFNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqcE91dEJ1ZmZlcikKIHsKLSAgcmV0dXJuIEhBU0hfU3RhcnRfSVQoaGhhc2gsIHBJbkJ1ZmZlciwgU2l6ZSwgcE91dEJ1ZmZlcixIQVNIX0FMR09TRUxFQ1RJT05fU0hBMSk7CisgIHJldHVybiBIQVNIX1N0YXJ0X0lUKGhoYXNoLCBwSW5CdWZmZXIsIFNpemUsIHBPdXRCdWZmZXIsIEhBU0hfQUxHT1NFTEVDVElPTl9TSEExKTsKIH0KIAogLyoqCkBAIC0xMDI3LDggKzEwNDIsOCBAQAogICAqLwogCiAvKiogQGRlZmdyb3VwIEhBU0hfRXhwb3J0ZWRfRnVuY3Rpb25zX0dyb3VwNCBIQVNIIHByb2Nlc3NpbmcgZnVuY3Rpb25zIGluIERNQSBtb2RlCi0gKiAgQGJyaWVmICAgSEFTSCBwcm9jZXNzaW5nIGZ1bmN0aW9ucyB1c2luZyBETUEgbW9kZS4KLSAqCisgICogIEBicmllZiAgIEhBU0ggcHJvY2Vzc2luZyBmdW5jdGlvbnMgdXNpbmcgRE1BIG1vZGUuCisgICoKIEB2ZXJiYXRpbQogID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgICAgICAgICAgICAgICAgIyMjIyMgRE1BIG1vZGUgSEFTSCBwcm9jZXNzaW5nIGZ1bmN0aW9ucyAjIyMjIwpAQCAtMTA3OSw5ICsxMDk0LDkgQEAKICAgKiBAcGFyYW0gIFRpbWVvdXQgVGltZW91dCB2YWx1ZS4KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9IQVNIX01ENV9GaW5pc2goSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCwgdWludDhfdCogcE91dEJ1ZmZlciwgdWludDMyX3QgVGltZW91dCkKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9IQVNIX01ENV9GaW5pc2goSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCwgdWludDhfdCAqcE91dEJ1ZmZlciwgdWludDMyX3QgVGltZW91dCkKIHsKLSAgIHJldHVybiBIQVNIX0ZpbmlzaChoaGFzaCwgcE91dEJ1ZmZlciwgVGltZW91dCk7CisgIHJldHVybiBIQVNIX0ZpbmlzaChoaGFzaCwgcE91dEJ1ZmZlciwgVGltZW91dCk7CiB9CiAKIC8qKgpAQCAtMTExMCw5ICsxMTI1LDkgQEAKICAgKiBAcGFyYW0gIFRpbWVvdXQgVGltZW91dCB2YWx1ZS4KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9IQVNIX1NIQTFfRmluaXNoKEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gsIHVpbnQ4X3QqIHBPdXRCdWZmZXIsIHVpbnQzMl90IFRpbWVvdXQpCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfSEFTSF9TSEExX0ZpbmlzaChIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoLCB1aW50OF90ICpwT3V0QnVmZmVyLCB1aW50MzJfdCBUaW1lb3V0KQogewotICAgcmV0dXJuIEhBU0hfRmluaXNoKGhoYXNoLCBwT3V0QnVmZmVyLCBUaW1lb3V0KTsKKyAgcmV0dXJuIEhBU0hfRmluaXNoKGhoYXNoLCBwT3V0QnVmZmVyLCBUaW1lb3V0KTsKIH0KIAogLyoqCkBAIC0xMTIwLDggKzExMzUsOCBAQAogICAqLwogCiAvKiogQGRlZmdyb3VwIEhBU0hfRXhwb3J0ZWRfRnVuY3Rpb25zX0dyb3VwNSBITUFDIHByb2Nlc3NpbmcgZnVuY3Rpb25zIGluIHBvbGxpbmcgbW9kZQotICogIEBicmllZiAgIEhNQUMgcHJvY2Vzc2luZyBmdW5jdGlvbnMgdXNpbmcgcG9sbGluZyBtb2RlLgotICoKKyAgKiAgQGJyaWVmICAgSE1BQyBwcm9jZXNzaW5nIGZ1bmN0aW9ucyB1c2luZyBwb2xsaW5nIG1vZGUuCisgICoKIEB2ZXJiYXRpbQogID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgICAgICAgICAgICAgIyMjIyMgUG9sbGluZyBtb2RlIEhNQUMgcHJvY2Vzc2luZyBmdW5jdGlvbnMgIyMjIyMKQEAgLTExNTEsNyArMTE2Niw4IEBACiAgICogQHBhcmFtICBUaW1lb3V0IFRpbWVvdXQgdmFsdWUuCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfSE1BQ19NRDVfU3RhcnQoSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCwgdWludDhfdCAqcEluQnVmZmVyLCB1aW50MzJfdCBTaXplLCB1aW50OF90KiBwT3V0QnVmZmVyLCB1aW50MzJfdCBUaW1lb3V0KQorSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0hNQUNfTUQ1X1N0YXJ0KEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gsIHVpbnQ4X3QgKnBJbkJ1ZmZlciwgdWludDMyX3QgU2l6ZSwgdWludDhfdCAqcE91dEJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBUaW1lb3V0KQogewogICByZXR1cm4gSE1BQ19TdGFydChoaGFzaCwgcEluQnVmZmVyLCBTaXplLCBwT3V0QnVmZmVyLCBUaW1lb3V0LCBIQVNIX0FMR09TRUxFQ1RJT05fTUQ1KTsKIH0KQEAgLTExNjksNyArMTE4NSw4IEBACiAgICogQHBhcmFtICBUaW1lb3V0IFRpbWVvdXQgdmFsdWUuCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfSE1BQ19TSEExX1N0YXJ0KEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gsIHVpbnQ4X3QgKnBJbkJ1ZmZlciwgdWludDMyX3QgU2l6ZSwgdWludDhfdCogcE91dEJ1ZmZlciwgdWludDMyX3QgVGltZW91dCkKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9ITUFDX1NIQTFfU3RhcnQoSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCwgdWludDhfdCAqcEluQnVmZmVyLCB1aW50MzJfdCBTaXplLCB1aW50OF90ICpwT3V0QnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBUaW1lb3V0KQogewogICByZXR1cm4gSE1BQ19TdGFydChoaGFzaCwgcEluQnVmZmVyLCBTaXplLCBwT3V0QnVmZmVyLCBUaW1lb3V0LCBIQVNIX0FMR09TRUxFQ1RJT05fU0hBMSk7CiB9CkBAIC0xMTgwLDggKzExOTcsOCBAQAogCiAKIC8qKiBAZGVmZ3JvdXAgSEFTSF9FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXA2IEhNQUMgcHJvY2Vzc2luZyBmdW5jdGlvbnMgaW4gaW50ZXJydXB0IG1vZGUKLSAqICBAYnJpZWYgICBITUFDIHByb2Nlc3NpbmcgZnVuY3Rpb25zIHVzaW5nIGludGVycnVwdCBtb2RlLgotICoKKyAgKiAgQGJyaWVmICAgSE1BQyBwcm9jZXNzaW5nIGZ1bmN0aW9ucyB1c2luZyBpbnRlcnJ1cHQgbW9kZS4KKyAgKgogQHZlcmJhdGltCiAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAgICAgICAgICAgICAjIyMjIyBJbnRlcnJ1cHQgbW9kZSBITUFDIHByb2Nlc3NpbmcgZnVuY3Rpb25zICMjIyMjCkBAIC0xMjEwLDcgKzEyMjcsOCBAQAogICAqIEBwYXJhbSAgcE91dEJ1ZmZlciBwb2ludGVyIHRvIHRoZSBjb21wdXRlZCBkaWdlc3QuIERpZ2VzdCBzaXplIGlzIDE2IGJ5dGVzLgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0hNQUNfTUQ1X1N0YXJ0X0lUKEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gsIHVpbnQ4X3QgKnBJbkJ1ZmZlciwgdWludDMyX3QgU2l6ZSwgdWludDhfdCogcE91dEJ1ZmZlcikKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9ITUFDX01ENV9TdGFydF9JVChIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoLCB1aW50OF90ICpwSW5CdWZmZXIsIHVpbnQzMl90IFNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqcE91dEJ1ZmZlcikKIHsKICAgcmV0dXJuICBITUFDX1N0YXJ0X0lUKGhoYXNoLCBwSW5CdWZmZXIsIFNpemUsIHBPdXRCdWZmZXIsIEhBU0hfQUxHT1NFTEVDVElPTl9NRDUpOwogfQpAQCAtMTIyNyw3ICsxMjQ1LDggQEAKICAgKiBAcGFyYW0gIHBPdXRCdWZmZXIgcG9pbnRlciB0byB0aGUgY29tcHV0ZWQgZGlnZXN0LiBEaWdlc3Qgc2l6ZSBpcyAyMCBieXRlcy4KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9ITUFDX1NIQTFfU3RhcnRfSVQoSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCwgdWludDhfdCAqcEluQnVmZmVyLCB1aW50MzJfdCBTaXplLCB1aW50OF90KiBwT3V0QnVmZmVyKQorSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0hNQUNfU0hBMV9TdGFydF9JVChIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoLCB1aW50OF90ICpwSW5CdWZmZXIsIHVpbnQzMl90IFNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnBPdXRCdWZmZXIpCiB7CiAgIHJldHVybiAgSE1BQ19TdGFydF9JVChoaGFzaCwgcEluQnVmZmVyLCBTaXplLCBwT3V0QnVmZmVyLCBIQVNIX0FMR09TRUxFQ1RJT05fU0hBMSk7CiB9CkBAIC0xMjM5LDggKzEyNTgsOCBAQAogCiAKIC8qKiBAZGVmZ3JvdXAgSEFTSF9FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXA3IEhNQUMgcHJvY2Vzc2luZyBmdW5jdGlvbnMgaW4gRE1BIG1vZGUKLSAqICBAYnJpZWYgICBITUFDIHByb2Nlc3NpbmcgZnVuY3Rpb25zIHVzaW5nIERNQSBtb2Rlcy4KLSAqCisgICogIEBicmllZiAgIEhNQUMgcHJvY2Vzc2luZyBmdW5jdGlvbnMgdXNpbmcgRE1BIG1vZGVzLgorICAqCiBAdmVyYmF0aW0KICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgICAgICAgICAgICMjIyMjIERNQSBtb2RlIEhNQUMgcHJvY2Vzc2luZyBmdW5jdGlvbnMgIyMjIyMKQEAgLTEzMTUsOCArMTMzNCw4IEBACiAgICovCiAKIC8qKiBAZGVmZ3JvdXAgSEFTSF9FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXA4IFBlcmlwaGVyYWwgc3RhdGVzIGZ1bmN0aW9ucwotICogIEBicmllZiAgIFBlcmlwaGVyYWwgU3RhdGUgZnVuY3Rpb25zLgotICoKKyAgKiAgQGJyaWVmICAgUGVyaXBoZXJhbCBTdGF0ZSBmdW5jdGlvbnMuCisgICoKIEB2ZXJiYXRpbQogID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgICAgICAgICAgICAgICAgICAjIyMjIyBQZXJpcGhlcmFsIFN0YXRlIG1ldGhvZHMgIyMjIyMKQEAgLTEzODMsNyArMTQwMiw3IEBACiAgICogICAgICAgICBtdXN0IGJlIGF0IGxlYXN0IChIQVNIX05VTUJFUl9PRl9DU1JfUkVHSVNURVJTICsgMykgKiA0IHVpbnQ4IGxvbmcuCiAgICogQHJldHZhbCBOb25lCiAgICovCi12b2lkIEhBTF9IQVNIX0NvbnRleHRTYXZpbmcoSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCwgdWludDhfdCogcE1lbUJ1ZmZlcikKK3ZvaWQgSEFMX0hBU0hfQ29udGV4dFNhdmluZyhIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoLCB1aW50OF90ICpwTWVtQnVmZmVyKQogewogICB1aW50MzJfdCBtZW1fcHRyID0gKHVpbnQzMl90KXBNZW1CdWZmZXI7CiAgIHVpbnQzMl90IGNzcl9wdHIgPSAodWludDMyX3QpSEFTSC0+Q1NSOwpAQCAtMTM5MywyNCArMTQxMiwyNiBAQAogICBVTlVTRUQoaGhhc2gpOwogCiAgIC8qIFNhdmUgSU1SIHJlZ2lzdGVyIGNvbnRlbnQgKi8KLSAgKih1aW50MzJfdCopKG1lbV9wdHIpID0gUkVBRF9CSVQoSEFTSC0+SU1SLEhBU0hfSVRfRElOSXxIQVNIX0lUX0RDSSk7Ci0gIG1lbV9wdHIrPTRVOworICAqKHVpbnQzMl90ICopKG1lbV9wdHIpID0gUkVBRF9CSVQoSEFTSC0+SU1SLCBIQVNIX0lUX0RJTkkgfCBIQVNIX0lUX0RDSSk7CisgIG1lbV9wdHIgKz0gNFU7CiAgIC8qIFNhdmUgU1RSIHJlZ2lzdGVyIGNvbnRlbnQgKi8KLSAgKih1aW50MzJfdCopKG1lbV9wdHIpID0gUkVBRF9CSVQoSEFTSC0+U1RSLEhBU0hfU1RSX05CTFcpOwotICBtZW1fcHRyKz00VTsKKyAgKih1aW50MzJfdCAqKShtZW1fcHRyKSA9IFJFQURfQklUKEhBU0gtPlNUUiwgSEFTSF9TVFJfTkJMVyk7CisgIG1lbV9wdHIgKz0gNFU7CiAgIC8qIFNhdmUgQ1IgcmVnaXN0ZXIgY29udGVudCAqLwogI2lmIGRlZmluZWQoSEFTSF9DUl9NRE1BVCkKLSAgICAgICoodWludDMyX3QqKShtZW1fcHRyKSA9IFJFQURfQklUKEhBU0gtPkNSLEhBU0hfQ1JfRE1BRXxIQVNIX0NSX0RBVEFUWVBFfEhBU0hfQ1JfTU9ERXxIQVNIX0NSX0FMR098SEFTSF9DUl9MS0VZfEhBU0hfQ1JfTURNQVQpOworICAqKHVpbnQzMl90ICopKG1lbV9wdHIpID0gUkVBRF9CSVQoSEFTSC0+Q1IsIEhBU0hfQ1JfRE1BRSB8IEhBU0hfQ1JfREFUQVRZUEUgfCBIQVNIX0NSX01PREUgfCBIQVNIX0NSX0FMR08gfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFTSF9DUl9MS0VZIHwgSEFTSF9DUl9NRE1BVCk7CiAjZWxzZQotICAgICAgKih1aW50MzJfdCopKG1lbV9wdHIpID0gUkVBRF9CSVQoSEFTSC0+Q1IsSEFTSF9DUl9ETUFFfEhBU0hfQ1JfREFUQVRZUEV8SEFTSF9DUl9NT0RFfEhBU0hfQ1JfQUxHT3xIQVNIX0NSX0xLRVkpOwotI2VuZGlmCi0gIG1lbV9wdHIrPTRVOworICAqKHVpbnQzMl90ICopKG1lbV9wdHIpID0gUkVBRF9CSVQoSEFTSC0+Q1IsIEhBU0hfQ1JfRE1BRSB8IEhBU0hfQ1JfREFUQVRZUEUgfCBIQVNIX0NSX01PREUgfCBIQVNIX0NSX0FMR08gfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFTSF9DUl9MS0VZKTsKKyNlbmRpZiAvKiBIQVNIX0NSX01ETUFUKi8KKyAgbWVtX3B0ciArPSA0VTsKICAgLyogQnkgZGVmYXVsdCwgc2F2ZSBhbGwgQ1NScyByZWdpc3RlcnMgKi8KLSAgZm9yIChpID0gSEFTSF9OVU1CRVJfT0ZfQ1NSX1JFR0lTVEVSUzsgaSA+MFU7IGktLSkKKyAgZm9yIChpID0gSEFTSF9OVU1CRVJfT0ZfQ1NSX1JFR0lTVEVSUzsgaSA+IDBVOyBpLS0pCiAgIHsKLSAgICAqKHVpbnQzMl90KikobWVtX3B0cikgPSAqKHVpbnQzMl90KikoY3NyX3B0cik7Ci0gICAgbWVtX3B0cis9NFU7Ci0gICAgY3NyX3B0cis9NFU7CisgICAgKih1aW50MzJfdCAqKShtZW1fcHRyKSA9ICoodWludDMyX3QgKikoY3NyX3B0cik7CisgICAgbWVtX3B0ciArPSA0VTsKKyAgICBjc3JfcHRyICs9IDRVOwogICB9CiB9CiAKQEAgLTE0MjcsNyArMTQ0OCw3IEBACiAgICogICAgICAgICBiZWZvcmVoYW5kKS4KICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KLXZvaWQgSEFMX0hBU0hfQ29udGV4dFJlc3RvcmluZyhIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoLCB1aW50OF90KiBwTWVtQnVmZmVyKQordm9pZCBIQUxfSEFTSF9Db250ZXh0UmVzdG9yaW5nKEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gsIHVpbnQ4X3QgKnBNZW1CdWZmZXIpCiB7CiAgIHVpbnQzMl90IG1lbV9wdHIgPSAodWludDMyX3QpcE1lbUJ1ZmZlcjsKICAgdWludDMyX3QgY3NyX3B0ciA9ICh1aW50MzJfdClIQVNILT5DU1I7CkBAIC0xNDM3LDI1ICsxNDU4LDI1IEBACiAgIFVOVVNFRChoaGFzaCk7CiAKICAgLyogUmVzdG9yZSBJTVIgcmVnaXN0ZXIgY29udGVudCAqLwotICBXUklURV9SRUcoSEFTSC0+SU1SLCAoKih1aW50MzJfdCopKG1lbV9wdHIpKSk7Ci0gIG1lbV9wdHIrPTRVOworICBXUklURV9SRUcoSEFTSC0+SU1SLCAoKih1aW50MzJfdCAqKShtZW1fcHRyKSkpOworICBtZW1fcHRyICs9IDRVOwogICAvKiBSZXN0b3JlIFNUUiByZWdpc3RlciBjb250ZW50ICovCi0gIFdSSVRFX1JFRyhIQVNILT5TVFIsICgqKHVpbnQzMl90KikobWVtX3B0cikpKTsKLSAgbWVtX3B0cis9NFU7CisgIFdSSVRFX1JFRyhIQVNILT5TVFIsICgqKHVpbnQzMl90ICopKG1lbV9wdHIpKSk7CisgIG1lbV9wdHIgKz0gNFU7CiAgIC8qIFJlc3RvcmUgQ1IgcmVnaXN0ZXIgY29udGVudCAqLwotICBXUklURV9SRUcoSEFTSC0+Q1IsICgqKHVpbnQzMl90KikobWVtX3B0cikpKTsKLSAgbWVtX3B0cis9NFU7CisgIFdSSVRFX1JFRyhIQVNILT5DUiwgKCoodWludDMyX3QgKikobWVtX3B0cikpKTsKKyAgbWVtX3B0ciArPSA0VTsKIAogICAvKiBSZXNldCB0aGUgSEFTSCBwcm9jZXNzb3IgYmVmb3JlIHJlc3RvcmluZyB0aGUgQ29udGV4dAogICBTd2FwIFJlZ2lzdGVycyAoQ1NSKSAqLwogICBfX0hBTF9IQVNIX0lOSVQoKTsKIAogICAvKiBCeSBkZWZhdWx0LCByZXN0b3JlIGFsbCBDU1IgcmVnaXN0ZXJzICovCi0gIGZvciAoaSA9IEhBU0hfTlVNQkVSX09GX0NTUl9SRUdJU1RFUlM7IGkgPjBVOyBpLS0pCisgIGZvciAoaSA9IEhBU0hfTlVNQkVSX09GX0NTUl9SRUdJU1RFUlM7IGkgPiAwVTsgaS0tKQogICB7Ci0gICAgV1JJVEVfUkVHKCgqKHVpbnQzMl90KikoY3NyX3B0cikpLCAoKih1aW50MzJfdCopKG1lbV9wdHIpKSk7Ci0gICAgbWVtX3B0cis9NFU7Ci0gICAgY3NyX3B0cis9NFU7CisgICAgV1JJVEVfUkVHKCgqKHVpbnQzMl90ICopKGNzcl9wdHIpKSwgKCoodWludDMyX3QgKikobWVtX3B0cikpKTsKKyAgICBtZW1fcHRyICs9IDRVOworICAgIGNzcl9wdHIgKz0gNFU7CiAgIH0KIH0KIApAQCAtMTQ5OCw3ICsxNTE5LDcgQEAKICAgZWxzZQogICB7CiAKLSAgIC8qIE1ha2Ugc3VyZSB0aGVyZSBpcyBlbm91Z2ggdGltZSB0byBzdXNwZW5kIHRoZSBwcm9jZXNzaW5nICovCisgICAgLyogTWFrZSBzdXJlIHRoZXJlIGlzIGVub3VnaCB0aW1lIHRvIHN1c3BlbmQgdGhlIHByb2Nlc3NpbmcgKi8KICAgICB0bXBfcmVtYWluaW5nX0RNQVRyYW5zZmVyU2l6ZV9pbldvcmRzID0gKChETUFfU3RyZWFtX1R5cGVEZWYgKiloaGFzaC0+aGRtYWluLT5JbnN0YW5jZSktPk5EVFI7CiAKICAgICBpZiAodG1wX3JlbWFpbmluZ19ETUFUcmFuc2ZlclNpemVfaW5Xb3JkcyA8PSBIQVNIX0RNQV9TVVNQRU5TSU9OX1dPUkRTX0xJTUlUKQpAQCAtMTUxMSw3ICsxNTMyLDcgQEAKICAgICAvKiBXYWl0IGZvciBCVVNZIGZsYWcgdG8gYmUgcmVzZXQgKi8KICAgICBpZiAoSEFTSF9XYWl0T25GbGFnVW50aWxUaW1lb3V0KGhoYXNoLCBIQVNIX0ZMQUdfQlVTWSwgU0VULCBIQVNIX1RJTUVPVVRWQUxVRSkgIT0gSEFMX09LKQogICAgIHsKLSAgICAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CisgICAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CiAgICAgfQogCiAgICAgaWYgKF9fSEFMX0hBU0hfR0VUX0ZMQUcoSEFTSF9GTEFHX0RDSVMpICE9IFJFU0VUKQpAQCAtMTUyMiw3ICsxNTQzLDcgQEAKICAgICAvKiBXYWl0IGZvciBCVVNZIGZsYWcgdG8gYmUgc2V0ICovCiAgICAgaWYgKEhBU0hfV2FpdE9uRmxhZ1VudGlsVGltZW91dChoaGFzaCwgSEFTSF9GTEFHX0JVU1ksIFJFU0VULCBIQVNIX1RJTUVPVVRWQUxVRSkgIT0gSEFMX09LKQogICAgIHsKLSAgICAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CisgICAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CiAgICAgfQogICAgIC8qIERpc2FibGUgRE1BIGNoYW5uZWwgKi8KICAgICAvKiBOb3RlIHRoYXQgdGhlIEFib3J0IGZ1bmN0aW9uIHdpbGwKQEAgLTE1MzAsMTMgKzE1NTEsMTMgQEAKICAgICAgIC0gVW5sb2NrCiAgICAgICAtIFNldCB0aGUgU3RhdGUKICAgICAqLwotICAgIGlmIChIQUxfRE1BX0Fib3J0KGhoYXNoLT5oZG1haW4pICE9SEFMX09LKQorICAgIGlmIChIQUxfRE1BX0Fib3J0KGhoYXNoLT5oZG1haW4pICE9IEhBTF9PSykKICAgICB7CiAgICAgICByZXR1cm4gSEFMX0VSUk9SOwogICAgIH0KIAogICAgIC8qIENsZWFyIERNQUUgYml0ICovCi0gICAgQ0xFQVJfQklUKEhBU0gtPkNSLEhBU0hfQ1JfRE1BRSk7CisgICAgQ0xFQVJfQklUKEhBU0gtPkNSLCBIQVNIX0NSX0RNQUUpOwogCiAgICAgLyogV2FpdCBmb3IgQlVTWSBmbGFnIHRvIGJlIHJlc2V0ICovCiAgICAgaWYgKEhBU0hfV2FpdE9uRmxhZ1VudGlsVGltZW91dChoaGFzaCwgSEFTSF9GTEFHX0JVU1ksIFNFVCwgSEFTSF9USU1FT1VUVkFMVUUpICE9IEhBTF9PSykKQEAgLTE1NzAsMTkgKzE1OTEsMjIgQEAKICAgICB7CiAKICAgICAgIC8qIENvbXB1dGUgaG93IG1hbnkgd29yZHMgd2VyZSBzdXBwb3NlZCB0byBiZSB0cmFuc2ZlcnJlZCBieSBETUEgKi8KLSAgICAgIHRtcF9pbml0aWFsX0RNQVRyYW5zZmVyU2l6ZV9pbldvcmRzID0gKCgoaGhhc2gtPkhhc2hJbkNvdW50JTRVKSE9MFUpID8gICgoaGhhc2gtPkhhc2hJbkNvdW50KzNVKS80VSk6IChoaGFzaC0+SGFzaEluQ291bnQvNFUpKTsKKyAgICAgIHRtcF9pbml0aWFsX0RNQVRyYW5zZmVyU2l6ZV9pbldvcmRzID0gKCgoaGhhc2gtPkhhc2hJbkNvdW50ICUgNFUpICE9IDBVKSA/IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoaGhhc2gtPkhhc2hJbkNvdW50ICsgM1UpIC8gNFUpIDogKGhoYXNoLT5IYXNoSW5Db3VudCAvIDRVKSk7CiAKLSAgICAgIC8qIElmIGRpc2NyZXBhbmN5IGJldHdlZW4gdGhlIG51bWJlciBvZiB3b3JkcyByZXBvcnRlZCBieSBETUEgUGVyaXBoZXJhbCBhbmQgdGhlIG51bWJlcnMgb2Ygd29yZHMgZW50ZXJlZCBhcyByZXBvcnRlZAotICAgICAgICBieSBIQVNIIFBlcmlwaGVyYWwsIGNvcnJlY3QgaXQgKi8KKyAgICAgIC8qIElmIGRpc2NyZXBhbmN5IGJldHdlZW4gdGhlIG51bWJlciBvZiB3b3JkcyByZXBvcnRlZCBieSBETUEgUGVyaXBoZXJhbCBhbmQKKyAgICAgICAgdGhlIG51bWJlcnMgb2Ygd29yZHMgZW50ZXJlZCBhcyByZXBvcnRlZCBieSBIQVNIIFBlcmlwaGVyYWwsIGNvcnJlY3QgaXQgKi8KICAgICAgIC8qIHRtcF93b3Jkc19hbHJlYWR5X3B1c2hlZCByZWZsZWN0cyB0aGUgbnVtYmVyIG9mIHdvcmRzIHRoYXQgd2VyZSBhbHJlYWR5IHB1c2hlZCBiZWZvcmUKICAgICAgICAgIHRoZSBzdGFydCBvZiBETUEgdHJhbnNmZXIgKG11bHRpLWJ1ZmZlciBwcm9jZXNzaW5nIGNhc2UpICovCiAgICAgICB0bXBfd29yZHNfYWxyZWFkeV9wdXNoZWQgPSBoaGFzaC0+TmJXb3Jkc0FscmVhZHlQdXNoZWQ7Ci0gICAgICBpZiAoKCh0bXBfd29yZHNfYWxyZWFkeV9wdXNoZWQgKyB0bXBfaW5pdGlhbF9ETUFUcmFuc2ZlclNpemVfaW5Xb3JkcyAtIHRtcF9yZW1haW5pbmdfRE1BVHJhbnNmZXJTaXplX2luV29yZHMpICUxNlUpICAhPSBIQVNIX05CV19QVVNIRUQoKSkKKyAgICAgIGlmICgoKHRtcF93b3Jkc19hbHJlYWR5X3B1c2hlZCArIHRtcF9pbml0aWFsX0RNQVRyYW5zZmVyU2l6ZV9pbldvcmRzIC0gXAorICAgICAgICAgICAgdG1wX3JlbWFpbmluZ19ETUFUcmFuc2ZlclNpemVfaW5Xb3JkcykgJSAxNlUpICE9IEhBU0hfTkJXX1BVU0hFRCgpKQogICAgICAgewogICAgICAgICB0bXBfcmVtYWluaW5nX0RNQVRyYW5zZmVyU2l6ZV9pbldvcmRzLS07IC8qIG9uZSBsZXNzIHdvcmQgdG8gYmUgdHJhbnNmZXJyZWQgYWdhaW4gKi8KICAgICAgIH0KIAotICAgICAgLyogQWNjb3JkaW5nbHksIHVwZGF0ZSB0aGUgaW5wdXQgcG9pbnRlciB0aGF0IHBvaW50cyBhdCB0aGUgbmV4dCB3b3JkIHRvIGJlIHRyYW5zZmVycmVkIHRvIHRoZSBQZXJpcGhlcmFsIGJ5IERNQSAqLworICAgICAgLyogQWNjb3JkaW5nbHksIHVwZGF0ZSB0aGUgaW5wdXQgcG9pbnRlciB0aGF0IHBvaW50cyBhdCB0aGUgbmV4dCB3b3JkIHRvIGJlCisgICAgICAgICB0cmFuc2ZlcnJlZCB0byB0aGUgUGVyaXBoZXJhbCBieSBETUEgKi8KICAgICAgIGhoYXNoLT5wSGFzaEluQnVmZlB0ciArPSAgNFUgKiAodG1wX2luaXRpYWxfRE1BVHJhbnNmZXJTaXplX2luV29yZHMgLSB0bXBfcmVtYWluaW5nX0RNQVRyYW5zZmVyU2l6ZV9pbldvcmRzKSA7CiAKICAgICAgIC8qIEFuZCBzdG9yZSBpbiBIYXNoSW5Db3VudCB0aGUgcmVtYWluaW5nIHNpemUgdG8gdHJhbnNmZXIgKGluIGJ5dGVzKSAqLwpAQCAtMTYwMiw3ICsxNjI2LDcgQEAKICAgKiBAYnJpZWYgIFJldHVybiB0aGUgSEFTSCBoYW5kbGUgZXJyb3IgY29kZS4KICAgKiBAcGFyYW0gIGhoYXNoIHBvaW50ZXIgdG8gYSBIQVNIX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlLgogICAqIEByZXR2YWwgSEFTSCBFcnJvciBDb2RlCi0qLworICAqLwogdWludDMyX3QgSEFMX0hBU0hfR2V0RXJyb3IoSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCkKIHsKICAgLyogUmV0dXJuIEhBU0ggRXJyb3IgQ29kZSAqLwpAQCAtMTYzMCwxMCArMTY1NCwxMCBAQAogICAqLwogc3RhdGljIHZvaWQgSEFTSF9ETUFYZmVyQ3BsdChETUFfSGFuZGxlVHlwZURlZiAqaGRtYSkKIHsKLSAgSEFTSF9IYW5kbGVUeXBlRGVmKiBoaGFzaCA9ICggSEFTSF9IYW5kbGVUeXBlRGVmKiApKChETUFfSGFuZGxlVHlwZURlZiogKWhkbWEpLT5QYXJlbnQ7CisgIEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2ggPSAoSEFTSF9IYW5kbGVUeXBlRGVmICopKChETUFfSGFuZGxlVHlwZURlZiAqKWhkbWEpLT5QYXJlbnQ7CiAgIHVpbnQzMl90IGlucHV0YWRkcjsKICAgdWludDMyX3QgYnVmZmVyc2l6ZTsKLSAgSEFMX1N0YXR1c1R5cGVEZWYgc3RhdHVzIDsKKyAgSEFMX1N0YXR1c1R5cGVEZWYgc3RhdHVzID0gSEFMX09LOwogCiAgIGlmIChoaGFzaC0+U3RhdGUgIT0gSEFMX0hBU0hfU1RBVEVfU1VTUEVOREVEKQogICB7CkBAIC0xNzAwLDcgKzE3MjQsNyBAQAogICAgICAgICAgIG5vIGRpZ2VzdCBjYWxjdWxhdGlvbiB3aWxsIGJlIHRyaWdnZXJlZCBhdCB0aGUgZW5kIG9mIHRoZSBpbnB1dCBidWZmZXIgZmVlZGluZyB0byB0aGUgUGVyaXBoZXJhbCAqLwogICAgICAgICAgIF9fSEFMX0hBU0hfU0VUX01ETUFUKCk7CiAgICAgICAgIH0KLSNlbmRpZgorI2VuZGlmIC8qIEhBU0hfQ1JfTURNQVQqLwogICAgICAgfQogICAgICAgZWxzZSAgLypjYXNlIChoaGFzaC0+UGhhc2UgPT0gSEFMX0hBU0hfUEhBU0VfSE1BQ19TVEVQXzIpKi8KICAgICAgIHsKQEAgLTE3MzQsMTkgKzE3NTgsMjMgQEAKICAgICAgICAgfQogICAgICAgfQogCi0gICAgLyogQ29uZmlndXJlIHRoZSBOdW1iZXIgb2YgdmFsaWQgYml0cyBpbiBsYXN0IHdvcmQgb2YgdGhlIG1lc3NhZ2UgKi8KLSAgICBfX0hBTF9IQVNIX1NFVF9OQlZBTElEQklUUyhidWZmZXJzaXplKTsKKyAgICAgIC8qIENvbmZpZ3VyZSB0aGUgTnVtYmVyIG9mIHZhbGlkIGJpdHMgaW4gbGFzdCB3b3JkIG9mIHRoZSBtZXNzYWdlICovCisgICAgICBfX0hBTF9IQVNIX1NFVF9OQlZBTElEQklUUyhidWZmZXJzaXplKTsKIAotICAgICAgLyogU2V0IHRoZSBIQVNIIERNQSB0cmFuc2ZlcnQgY29tcGxldGlvbiBjYWxsIGJhY2sgKi8KKyAgICAgIC8qIFNldCB0aGUgSEFTSCBETUEgdHJhbnNmZXIgY29tcGxldGlvbiBjYWxsIGJhY2sgKi8KICAgICAgIGhoYXNoLT5oZG1haW4tPlhmZXJDcGx0Q2FsbGJhY2sgPSBIQVNIX0RNQVhmZXJDcGx0OwogCi0gICAgICAvKiBFbmFibGUgdGhlIERNQSBJbiBETUEgU3RyZWFtICovCi0gICAgc3RhdHVzID0gSEFMX0RNQV9TdGFydF9JVChoaGFzaC0+aGRtYWluLCBpbnB1dGFkZHIsICh1aW50MzJfdCkmSEFTSC0+RElOLCAoKChidWZmZXJzaXplICU0VSkhPTBVKSA/ICgoYnVmZmVyc2l6ZSsoNFUtKGJ1ZmZlcnNpemUgJTRVKSkpLzRVKTooYnVmZmVyc2l6ZS80VSkpKTsKKyAgICAgIC8qIEVuYWJsZSB0aGUgRE1BIEluIERNQSBzdHJlYW0gKi8KKyAgICAgIHN0YXR1cyA9IEhBTF9ETUFfU3RhcnRfSVQoaGhhc2gtPmhkbWFpbiwgaW5wdXRhZGRyLCAodWludDMyX3QpJkhBU0gtPkRJTiwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChidWZmZXJzaXplICUgNFUpICE9IDBVKSA/ICgoYnVmZmVyc2l6ZSArICg0VSAtIChidWZmZXJzaXplICUgNFUpKSkgLyA0VSkgOiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYnVmZmVyc2l6ZSAvIDRVKSkpOwogCi0gICAgLyogRW5hYmxlIERNQSByZXF1ZXN0cyAqLwotICAgIFNFVF9CSVQoSEFTSC0+Q1IsIEhBU0hfQ1JfRE1BRSk7CiAKLSAgICAgICAgICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCisKKyAgICAgIC8qIEVuYWJsZSBETUEgcmVxdWVzdHMgKi8KKyAgICAgIFNFVF9CSVQoSEFTSC0+Q1IsIEhBU0hfQ1JfRE1BRSk7CisKKyAgICAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KICAgICAgIGlmIChzdGF0dXMgIT0gSEFMX09LKQogICAgICAgewogICAgICAgICAvKiBVcGRhdGUgSEFTSCBzdGF0ZSBtYWNoaW5lIHRvIGVycm9yICovCkBAIC0xNzU1LDkgKzE3ODMsOSBAQAogICAgICAgZWxzZQogICAgICAgewogICAgICAgICAvKiBDaGFuZ2UgSEFTSCBzdGF0ZSAqLwotICAgICAgICBoaGFzaC0+U3RhdGUgPSBIQUxfSEFTSF9TVEFURV9SRUFEWTsKKyAgICAgICAgaGhhc2gtPlN0YXRlID0gSEFMX0hBU0hfU1RBVEVfQlVTWTsKICAgICAgIH0KLSAgfQorICAgIH0KICAgfQogCiAgIHJldHVybjsKQEAgLTE3NzIsMTQgKzE4MDAsMTQgQEAKICAgKi8KIHN0YXRpYyB2b2lkIEhBU0hfRE1BRXJyb3IoRE1BX0hhbmRsZVR5cGVEZWYgKmhkbWEpCiB7Ci0gIEhBU0hfSGFuZGxlVHlwZURlZiogaGhhc2ggPSAoIEhBU0hfSGFuZGxlVHlwZURlZiogKSgoRE1BX0hhbmRsZVR5cGVEZWYqICloZG1hKS0+UGFyZW50OworICBIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoID0gKEhBU0hfSGFuZGxlVHlwZURlZiAqKSgoRE1BX0hhbmRsZVR5cGVEZWYgKiloZG1hKS0+UGFyZW50OwogCiAgIGlmIChoaGFzaC0+U3RhdGUgIT0gSEFMX0hBU0hfU1RBVEVfU1VTUEVOREVEKQogICB7CiAgICAgaGhhc2gtPkVycm9yQ29kZSB8PSBIQUxfSEFTSF9FUlJPUl9ETUE7CiAgICAgLyogU2V0IEhBU0ggc3RhdGUgdG8gcmVhZHkgdG8gcHJldmVudCBhbnkgYmxvY2tpbmcgaXNzdWUgaW4gdXNlciBjb2RlCiAgICAgICAgcHJlc2VudCBpbiBIQUxfSEFTSF9FcnJvckNhbGxiYWNrKCkgKi8KLSAgICBoaGFzaC0+U3RhdGU9IEhBTF9IQVNIX1NUQVRFX1JFQURZOworICAgIGhoYXNoLT5TdGF0ZSA9IEhBTF9IQVNIX1NUQVRFX1JFQURZOwogICAgIC8qIFNldCBIQVNIIGhhbmRsZSBzdGF0dXMgdG8gZXJyb3IgKi8KICAgICBoaGFzaC0+U3RhdHVzID0gSEFMX0VSUk9SOwogI2lmIChVU0VfSEFMX0hBU0hfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCkBAIC0xODA5LDE1ICsxODM3LDE1IEBACiAgIHVpbnQzMl90IGJ1ZmZlcmNvdW50ZXI7CiAgIF9fSU8gdWludDMyX3QgaW5wdXRhZGRyID0gKHVpbnQzMl90KSBwSW5CdWZmZXI7CiAKLSAgZm9yKGJ1ZmZlcmNvdW50ZXIgPSAwVTsgYnVmZmVyY291bnRlciA8IFNpemU7IGJ1ZmZlcmNvdW50ZXIrPTRVKQorICBmb3IgKGJ1ZmZlcmNvdW50ZXIgPSAwVTsgYnVmZmVyY291bnRlciA8IFNpemU7IGJ1ZmZlcmNvdW50ZXIgKz0gNFUpCiAgIHsKICAgICAvKiBXcml0ZSBpbnB1dCBkYXRhIDQgYnl0ZXMgYXQgYSB0aW1lICovCi0gICAgSEFTSC0+RElOID0gKih1aW50MzJfdCopaW5wdXRhZGRyOwotICAgIGlucHV0YWRkcis9NFU7CisgICAgSEFTSC0+RElOID0gKih1aW50MzJfdCAqKWlucHV0YWRkcjsKKyAgICBpbnB1dGFkZHIgKz0gNFU7CiAKICAgICAvKiBJZiB0aGUgc3VzcGVuc2lvbiBmbGFnIGhhcyBiZWVuIHJhaXNlZCBhbmQgaWYgdGhlIHByb2Nlc3NpbmcgaXMgbm90IGFib3V0CiAgICAgdG8gZW5kLCBzdXNwZW5kIHByb2Nlc3NpbmcgKi8KLSAgICBpZiAoKGhoYXNoLT5TdXNwZW5kUmVxdWVzdCA9PSBIQUxfSEFTSF9TVVNQRU5EKSAmJiAoKGJ1ZmZlcmNvdW50ZXIrNFUpIDwgU2l6ZSkpCisgICAgaWYgKChoaGFzaC0+U3VzcGVuZFJlcXVlc3QgPT0gSEFMX0hBU0hfU1VTUEVORCkgJiYgKChidWZmZXJjb3VudGVyICsgNFUpIDwgU2l6ZSkpCiAgICAgewogICAgICAgLyogV2FpdCBmb3IgRElOSVMgPSAxLCB3aGljaCBvY2N1cnMgd2hlbiAxNiAzMi1iaXQgbG9jYXRpb25zIGFyZSBmcmVlCiAgICAgICBpbiB0aGUgaW5wdXQgYnVmZmVyICovCkBAIC0xODMxLDE0ICsxODU5LDE0IEBACiAgICAgICAgIGlmICgoaGhhc2gtPlBoYXNlID09IEhBTF9IQVNIX1BIQVNFX1BST0NFU1MpIHx8IChoaGFzaC0+UGhhc2UgPT0gSEFMX0hBU0hfUEhBU0VfSE1BQ19TVEVQXzIpKQogICAgICAgICB7CiAgICAgICAgICAgLyogU2F2ZSBjdXJyZW50IHJlYWRpbmcgYW5kIHdyaXRpbmcgbG9jYXRpb25zIG9mIElucHV0IGFuZCBPdXRwdXQgYnVmZmVycyAqLwotICAgICAgICAgIGhoYXNoLT5wSGFzaEluQnVmZlB0ciA9ICAodWludDhfdCAqKWlucHV0YWRkcjsKKyAgICAgICAgICBoaGFzaC0+cEhhc2hJbkJ1ZmZQdHIgPSAodWludDhfdCAqKWlucHV0YWRkcjsKICAgICAgICAgICAvKiBTYXZlIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCByZW1haW4gdG8gYmUgcHJvY2Vzc2VkIGF0IHRoaXMgcG9pbnQgKi8KICAgICAgICAgICBoaGFzaC0+SGFzaEluQ291bnQgICAgPSAgU2l6ZSAtIChidWZmZXJjb3VudGVyICsgNFUpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKChoaGFzaC0+UGhhc2UgPT0gSEFMX0hBU0hfUEhBU0VfSE1BQ19TVEVQXzEpIHx8IChoaGFzaC0+UGhhc2UgPT0gSEFMX0hBU0hfUEhBU0VfSE1BQ19TVEVQXzMpKQogICAgICAgICB7CiAgICAgICAgICAgLyogU2F2ZSBjdXJyZW50IHJlYWRpbmcgYW5kIHdyaXRpbmcgbG9jYXRpb25zIG9mIElucHV0IGFuZCBPdXRwdXQgYnVmZmVycyAqLwotICAgICAgICAgIGhoYXNoLT5wSGFzaEtleUJ1ZmZQdHIgID0gICh1aW50OF90ICopaW5wdXRhZGRyOworICAgICAgICAgIGhoYXNoLT5wSGFzaEtleUJ1ZmZQdHIgID0gKHVpbnQ4X3QgKilpbnB1dGFkZHI7CiAgICAgICAgICAgLyogU2F2ZSB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgcmVtYWluIHRvIGJlIHByb2Nlc3NlZCBhdCB0aGlzIHBvaW50ICovCiAgICAgICAgICAgaGhhc2gtPkhhc2hLZXlDb3VudCAgPSAgU2l6ZSAtIChidWZmZXJjb3VudGVyICsgNFUpOwogICAgICAgICB9CkBAIC0xODcyLDY3ICsxOTAwLDY3IEBACiB7CiAgIHVpbnQzMl90IG1zZ2RpZ2VzdCA9ICh1aW50MzJfdClwTXNnRGlnZXN0OwogCi0gIHN3aXRjaChTaXplKQorICBzd2l0Y2ggKFNpemUpCiAgIHsKICAgICAvKiBSZWFkIHRoZSBtZXNzYWdlIGRpZ2VzdCAqLwogICAgIGNhc2UgMTY6ICAvKiBNRDUgKi8KLSAgICAgICoodWludDMyX3QqKShtc2dkaWdlc3QpID0gX19SRVYoSEFTSC0+SFJbMF0pOwotICAgICAgbXNnZGlnZXN0Kz00VTsKLSAgICAgICoodWludDMyX3QqKShtc2dkaWdlc3QpID0gX19SRVYoSEFTSC0+SFJbMV0pOwotICAgICAgbXNnZGlnZXN0Kz00VTsKLSAgICAgICoodWludDMyX3QqKShtc2dkaWdlc3QpID0gX19SRVYoSEFTSC0+SFJbMl0pOwotICAgICAgbXNnZGlnZXN0Kz00VTsKLSAgICAgICoodWludDMyX3QqKShtc2dkaWdlc3QpID0gX19SRVYoSEFTSC0+SFJbM10pOwotICAgIGJyZWFrOworICAgICAgKih1aW50MzJfdCAqKShtc2dkaWdlc3QpID0gX19SRVYoSEFTSC0+SFJbMF0pOworICAgICAgbXNnZGlnZXN0ICs9IDRVOworICAgICAgKih1aW50MzJfdCAqKShtc2dkaWdlc3QpID0gX19SRVYoSEFTSC0+SFJbMV0pOworICAgICAgbXNnZGlnZXN0ICs9IDRVOworICAgICAgKih1aW50MzJfdCAqKShtc2dkaWdlc3QpID0gX19SRVYoSEFTSC0+SFJbMl0pOworICAgICAgbXNnZGlnZXN0ICs9IDRVOworICAgICAgKih1aW50MzJfdCAqKShtc2dkaWdlc3QpID0gX19SRVYoSEFTSC0+SFJbM10pOworICAgICAgYnJlYWs7CiAgICAgY2FzZSAyMDogIC8qIFNIQTEgKi8KLSAgICAgICoodWludDMyX3QqKShtc2dkaWdlc3QpID0gX19SRVYoSEFTSC0+SFJbMF0pOwotICAgICAgbXNnZGlnZXN0Kz00VTsKLSAgICAgICoodWludDMyX3QqKShtc2dkaWdlc3QpID0gX19SRVYoSEFTSC0+SFJbMV0pOwotICAgICAgbXNnZGlnZXN0Kz00VTsKLSAgICAgICoodWludDMyX3QqKShtc2dkaWdlc3QpID0gX19SRVYoSEFTSC0+SFJbMl0pOwotICAgICAgbXNnZGlnZXN0Kz00VTsKLSAgICAgICoodWludDMyX3QqKShtc2dkaWdlc3QpID0gX19SRVYoSEFTSC0+SFJbM10pOwotICAgICAgbXNnZGlnZXN0Kz00VTsKLSAgICAgICoodWludDMyX3QqKShtc2dkaWdlc3QpID0gX19SRVYoSEFTSC0+SFJbNF0pOwotICAgIGJyZWFrOwotICBjYXNlIDI4OiAgLyogU0hBMjI0ICovCi0gICAgKih1aW50MzJfdCopKG1zZ2RpZ2VzdCkgPSBfX1JFVihIQVNILT5IUlswXSk7Ci0gICAgbXNnZGlnZXN0Kz00VTsKLSAgICAqKHVpbnQzMl90KikobXNnZGlnZXN0KSA9IF9fUkVWKEhBU0gtPkhSWzFdKTsKLSAgICBtc2dkaWdlc3QrPTRVOwotICAgICoodWludDMyX3QqKShtc2dkaWdlc3QpID0gX19SRVYoSEFTSC0+SFJbMl0pOwotICAgIG1zZ2RpZ2VzdCs9NFU7Ci0gICAgKih1aW50MzJfdCopKG1zZ2RpZ2VzdCkgPSBfX1JFVihIQVNILT5IUlszXSk7Ci0gICAgbXNnZGlnZXN0Kz00VTsKLSAgICAqKHVpbnQzMl90KikobXNnZGlnZXN0KSA9IF9fUkVWKEhBU0gtPkhSWzRdKTsKKyAgICAgICoodWludDMyX3QgKikobXNnZGlnZXN0KSA9IF9fUkVWKEhBU0gtPkhSWzBdKTsKKyAgICAgIG1zZ2RpZ2VzdCArPSA0VTsKKyAgICAgICoodWludDMyX3QgKikobXNnZGlnZXN0KSA9IF9fUkVWKEhBU0gtPkhSWzFdKTsKKyAgICAgIG1zZ2RpZ2VzdCArPSA0VTsKKyAgICAgICoodWludDMyX3QgKikobXNnZGlnZXN0KSA9IF9fUkVWKEhBU0gtPkhSWzJdKTsKKyAgICAgIG1zZ2RpZ2VzdCArPSA0VTsKKyAgICAgICoodWludDMyX3QgKikobXNnZGlnZXN0KSA9IF9fUkVWKEhBU0gtPkhSWzNdKTsKKyAgICAgIG1zZ2RpZ2VzdCArPSA0VTsKKyAgICAgICoodWludDMyX3QgKikobXNnZGlnZXN0KSA9IF9fUkVWKEhBU0gtPkhSWzRdKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgMjg6ICAvKiBTSEEyMjQgKi8KKyAgICAgICoodWludDMyX3QgKikobXNnZGlnZXN0KSA9IF9fUkVWKEhBU0gtPkhSWzBdKTsKKyAgICAgIG1zZ2RpZ2VzdCArPSA0VTsKKyAgICAgICoodWludDMyX3QgKikobXNnZGlnZXN0KSA9IF9fUkVWKEhBU0gtPkhSWzFdKTsKKyAgICAgIG1zZ2RpZ2VzdCArPSA0VTsKKyAgICAgICoodWludDMyX3QgKikobXNnZGlnZXN0KSA9IF9fUkVWKEhBU0gtPkhSWzJdKTsKKyAgICAgIG1zZ2RpZ2VzdCArPSA0VTsKKyAgICAgICoodWludDMyX3QgKikobXNnZGlnZXN0KSA9IF9fUkVWKEhBU0gtPkhSWzNdKTsKKyAgICAgIG1zZ2RpZ2VzdCArPSA0VTsKKyAgICAgICoodWludDMyX3QgKikobXNnZGlnZXN0KSA9IF9fUkVWKEhBU0gtPkhSWzRdKTsKICNpZiBkZWZpbmVkKEhBU0hfQ1JfTURNQVQpCi0gICAgbXNnZGlnZXN0Kz00VTsKLSAgICAqKHVpbnQzMl90KikobXNnZGlnZXN0KSA9IF9fUkVWKEhBU0hfRElHRVNULT5IUls1XSk7Ci0gICAgbXNnZGlnZXN0Kz00VTsKLSAgICAqKHVpbnQzMl90KikobXNnZGlnZXN0KSA9IF9fUkVWKEhBU0hfRElHRVNULT5IUls2XSk7Ci0jZW5kaWYKLSAgICBicmVhazsKLSAgY2FzZSAzMjogICAvKiBTSEEyNTYgKi8KLSAgICAqKHVpbnQzMl90KikobXNnZGlnZXN0KSA9IF9fUkVWKEhBU0gtPkhSWzBdKTsKLSAgICBtc2dkaWdlc3QrPTRVOwotICAgICoodWludDMyX3QqKShtc2dkaWdlc3QpID0gX19SRVYoSEFTSC0+SFJbMV0pOwotICAgIG1zZ2RpZ2VzdCs9NFU7Ci0gICAgKih1aW50MzJfdCopKG1zZ2RpZ2VzdCkgPSBfX1JFVihIQVNILT5IUlsyXSk7Ci0gICAgbXNnZGlnZXN0Kz00VTsKLSAgICAqKHVpbnQzMl90KikobXNnZGlnZXN0KSA9IF9fUkVWKEhBU0gtPkhSWzNdKTsKLSAgICBtc2dkaWdlc3QrPTRVOwotICAgICoodWludDMyX3QqKShtc2dkaWdlc3QpID0gX19SRVYoSEFTSC0+SFJbNF0pOworICAgICAgbXNnZGlnZXN0ICs9IDRVOworICAgICAgKih1aW50MzJfdCAqKShtc2dkaWdlc3QpID0gX19SRVYoSEFTSF9ESUdFU1QtPkhSWzVdKTsKKyAgICAgIG1zZ2RpZ2VzdCArPSA0VTsKKyAgICAgICoodWludDMyX3QgKikobXNnZGlnZXN0KSA9IF9fUkVWKEhBU0hfRElHRVNULT5IUls2XSk7CisjZW5kaWYgLyogSEFTSF9DUl9NRE1BVCovCisgICAgICBicmVhazsKKyAgICBjYXNlIDMyOiAgIC8qIFNIQTI1NiAqLworICAgICAgKih1aW50MzJfdCAqKShtc2dkaWdlc3QpID0gX19SRVYoSEFTSC0+SFJbMF0pOworICAgICAgbXNnZGlnZXN0ICs9IDRVOworICAgICAgKih1aW50MzJfdCAqKShtc2dkaWdlc3QpID0gX19SRVYoSEFTSC0+SFJbMV0pOworICAgICAgbXNnZGlnZXN0ICs9IDRVOworICAgICAgKih1aW50MzJfdCAqKShtc2dkaWdlc3QpID0gX19SRVYoSEFTSC0+SFJbMl0pOworICAgICAgbXNnZGlnZXN0ICs9IDRVOworICAgICAgKih1aW50MzJfdCAqKShtc2dkaWdlc3QpID0gX19SRVYoSEFTSC0+SFJbM10pOworICAgICAgbXNnZGlnZXN0ICs9IDRVOworICAgICAgKih1aW50MzJfdCAqKShtc2dkaWdlc3QpID0gX19SRVYoSEFTSC0+SFJbNF0pOwogI2lmIGRlZmluZWQoSEFTSF9DUl9NRE1BVCkKLSAgICBtc2dkaWdlc3QrPTRVOwotICAgICoodWludDMyX3QqKShtc2dkaWdlc3QpID0gX19SRVYoSEFTSF9ESUdFU1QtPkhSWzVdKTsKLSAgICBtc2dkaWdlc3QrPTRVOwotICAgICoodWludDMyX3QqKShtc2dkaWdlc3QpID0gX19SRVYoSEFTSF9ESUdFU1QtPkhSWzZdKTsKLSAgICBtc2dkaWdlc3QrPTRVOwotICAgICoodWludDMyX3QqKShtc2dkaWdlc3QpID0gX19SRVYoSEFTSF9ESUdFU1QtPkhSWzddKTsKLSNlbmRpZgotICAgIGJyZWFrOworICAgICAgbXNnZGlnZXN0ICs9IDRVOworICAgICAgKih1aW50MzJfdCAqKShtc2dkaWdlc3QpID0gX19SRVYoSEFTSF9ESUdFU1QtPkhSWzVdKTsKKyAgICAgIG1zZ2RpZ2VzdCArPSA0VTsKKyAgICAgICoodWludDMyX3QgKikobXNnZGlnZXN0KSA9IF9fUkVWKEhBU0hfRElHRVNULT5IUls2XSk7CisgICAgICBtc2dkaWdlc3QgKz0gNFU7CisgICAgICAqKHVpbnQzMl90ICopKG1zZ2RpZ2VzdCkgPSBfX1JFVihIQVNIX0RJR0VTVC0+SFJbN10pOworI2VuZGlmIC8qIEhBU0hfQ1JfTURNQVQqLworICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKLSAgICBicmVhazsKKyAgICAgIGJyZWFrOwogICB9CiB9CiAKQEAgLTE5NDYsMTkgKzE5NzQsMjAgQEAKICAgKiBAcGFyYW0gIFRpbWVvdXQgVGltZW91dCBkdXJhdGlvbi4KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KLXN0YXRpYyBIQUxfU3RhdHVzVHlwZURlZiBIQVNIX1dhaXRPbkZsYWdVbnRpbFRpbWVvdXQoSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCwgdWludDMyX3QgRmxhZywgRmxhZ1N0YXR1cyBTdGF0dXMsIHVpbnQzMl90IFRpbWVvdXQpCitzdGF0aWMgSEFMX1N0YXR1c1R5cGVEZWYgSEFTSF9XYWl0T25GbGFnVW50aWxUaW1lb3V0KEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gsIHVpbnQzMl90IEZsYWcsIEZsYWdTdGF0dXMgU3RhdHVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBUaW1lb3V0KQogewogICB1aW50MzJfdCB0aWNrc3RhcnQgPSBIQUxfR2V0VGljaygpOwogCiAgIC8qIFdhaXQgdW50aWwgZmxhZyBpcyBzZXQgKi8KLSAgaWYoU3RhdHVzID09IFJFU0VUKQorICBpZiAoU3RhdHVzID09IFJFU0VUKQogICB7Ci0gICAgd2hpbGUoX19IQUxfSEFTSF9HRVRfRkxBRyhGbGFnKSA9PSBSRVNFVCkKKyAgICB3aGlsZSAoX19IQUxfSEFTSF9HRVRfRkxBRyhGbGFnKSA9PSBSRVNFVCkKICAgICB7CiAgICAgICAvKiBDaGVjayBmb3IgdGhlIFRpbWVvdXQgKi8KLSAgICAgIGlmKFRpbWVvdXQgIT0gSEFMX01BWF9ERUxBWSkKKyAgICAgIGlmIChUaW1lb3V0ICE9IEhBTF9NQVhfREVMQVkpCiAgICAgICB7Ci0gICAgICAgIGlmKCgoSEFMX0dldFRpY2soKS10aWNrc3RhcnQpID4gVGltZW91dCkgfHwgKFRpbWVvdXQgPT0gMFUpKQorICAgICAgICBpZiAoKChIQUxfR2V0VGljaygpIC0gdGlja3N0YXJ0KSA+IFRpbWVvdXQpIHx8IChUaW1lb3V0ID09IDBVKSkKICAgICAgICAgewogICAgICAgICAgIC8qIFNldCBTdGF0ZSB0byBSZWFkeSB0byBiZSBhYmxlIHRvIHJlc3RhcnQgbGF0ZXIgb24gKi8KICAgICAgICAgICBoaGFzaC0+U3RhdGUgID0gSEFMX0hBU0hfU1RBVEVfUkVBRFk7CkBAIC0xOTc1LDEyICsyMDA0LDEyIEBACiAgIH0KICAgZWxzZQogICB7Ci0gICAgd2hpbGUoX19IQUxfSEFTSF9HRVRfRkxBRyhGbGFnKSAhPSBSRVNFVCkKKyAgICB3aGlsZSAoX19IQUxfSEFTSF9HRVRfRkxBRyhGbGFnKSAhPSBSRVNFVCkKICAgICB7CiAgICAgICAvKiBDaGVjayBmb3IgdGhlIFRpbWVvdXQgKi8KLSAgICAgIGlmKFRpbWVvdXQgIT0gSEFMX01BWF9ERUxBWSkKKyAgICAgIGlmIChUaW1lb3V0ICE9IEhBTF9NQVhfREVMQVkpCiAgICAgICB7Ci0gICAgICAgIGlmKCgoSEFMX0dldFRpY2soKS10aWNrc3RhcnQpID4gVGltZW91dCkgfHwgKFRpbWVvdXQgPT0gMFUpKQorICAgICAgICBpZiAoKChIQUxfR2V0VGljaygpIC0gdGlja3N0YXJ0KSA+IFRpbWVvdXQpIHx8IChUaW1lb3V0ID09IDBVKSkKICAgICAgICAgewogICAgICAgICAgIC8qIFNldCBTdGF0ZSB0byBSZWFkeSB0byBiZSBhYmxlIHRvIHJlc3RhcnQgbGF0ZXIgb24gKi8KICAgICAgICAgICBoaGFzaC0+U3RhdGUgID0gSEFMX0hBU0hfU1RBVEVfUkVBRFk7CkBAIC0yMDEzLDEwICsyMDQyLDEwIEBACiAgIGlmIChoaGFzaC0+U3RhdGUgPT0gSEFMX0hBU0hfU1RBVEVfQlVTWSkKICAgewogICAgIC8qIElUQ291bnRlciBtdXN0IG5vdCBiZSBlcXVhbCB0byAwIGF0IHRoaXMgcG9pbnQuIFJlcG9ydCBhbiBlcnJvciBpZiB0aGlzIGlzIHRoZSBjYXNlLiAqLwotICAgIGlmKGhoYXNoLT5IYXNoSVRDb3VudGVyID09IDBVKQorICAgIGlmIChoaGFzaC0+SGFzaElUQ291bnRlciA9PSAwVSkKICAgICB7CiAgICAgICAvKiBEaXNhYmxlIEludGVycnVwdHMgKi8KLSAgICAgIF9fSEFMX0hBU0hfRElTQUJMRV9JVChIQVNIX0lUX0RJTkl8SEFTSF9JVF9EQ0kpOworICAgICAgX19IQUxfSEFTSF9ESVNBQkxFX0lUKEhBU0hfSVRfRElOSSB8IEhBU0hfSVRfRENJKTsKICAgICAgIC8qIEhBU0ggc3RhdGUgc2V0IGJhY2sgdG8gUmVhZHkgdG8gcHJldmVudCBhbnkgaXNzdWUgaW4gdXNlciBjb2RlCiAgICAgICAgICBwcmVzZW50IGluIEhBTF9IQVNIX0Vycm9yQ2FsbGJhY2soKSAqLwogICAgICAgaGhhc2gtPlN0YXRlID0gSEFMX0hBU0hfU1RBVEVfUkVBRFk7CkBAIC0yMDI0LDkgKzIwNTMsOSBAQAogICAgIH0KICAgICBlbHNlIGlmIChoaGFzaC0+SGFzaElUQ291bnRlciA9PSAxVSkKICAgICB7Ci0gICAgIC8qIFRoaXMgaXMgdGhlIGZpcnN0IGNhbGwgdG8gSEFTSF9JVCwgdGhlIGZpcnN0IGlucHV0IGRhdGEgYXJlIGFib3V0IHRvIGJlCi0gICAgICAgIGVudGVyZWQgaW4gdGhlIFBlcmlwaGVyYWwuIEEgc3BlY2lmaWMgcHJvY2Vzc2luZyBpcyBjYXJyaWVkIG91dCBhdCB0aGlzIHBvaW50IHRvCi0gICAgICAgIHN0YXJ0LXVwIHRoZSBwcm9jZXNzaW5nLiAqLworICAgICAgLyogVGhpcyBpcyB0aGUgZmlyc3QgY2FsbCB0byBIQVNIX0lULCB0aGUgZmlyc3QgaW5wdXQgZGF0YSBhcmUgYWJvdXQgdG8gYmUKKyAgICAgICAgIGVudGVyZWQgaW4gdGhlIFBlcmlwaGVyYWwuIEEgc3BlY2lmaWMgcHJvY2Vzc2luZyBpcyBjYXJyaWVkIG91dCBhdCB0aGlzIHBvaW50IHRvCisgICAgICAgICBzdGFydC11cCB0aGUgcHJvY2Vzc2luZy4gKi8KICAgICAgIGhoYXNoLT5IYXNoSVRDb3VudGVyID0gMlU7CiAgICAgfQogICAgIGVsc2UKQEAgLTIwNDMsNyArMjA3Miw3IEBACiAgICAgICBIQVNIX0dldERpZ2VzdChoaGFzaC0+cEhhc2hPdXRCdWZmUHRyLCBIQVNIX0RJR0VTVF9MRU5HVEgoKSk7CiAKICAgICAgIC8qIERpc2FibGUgSW50ZXJydXB0cyAqLwotICAgICAgX19IQUxfSEFTSF9ESVNBQkxFX0lUKEhBU0hfSVRfRElOSXxIQVNIX0lUX0RDSSk7CisgICAgICBfX0hBTF9IQVNIX0RJU0FCTEVfSVQoSEFTSF9JVF9ESU5JIHwgSEFTSF9JVF9EQ0kpOwogICAgICAgLyogQ2hhbmdlIHRoZSBIQVNIIHN0YXRlICovCiAgICAgICBoaGFzaC0+U3RhdGUgPSBIQUxfSEFTSF9TVEFURV9SRUFEWTsKICAgICAgIC8qIFJlc2V0IEhBU0ggc3RhdGUgbWFjaGluZSAqLwpAQCAtMjA2NCwxMCArMjA5MywxMCBAQAogCiAgICAgICAvKiBJZiB0aGUgc3VzcGVuc2lvbiBmbGFnIGhhcyBiZWVuIHJhaXNlZCBhbmQgaWYgdGhlIHByb2Nlc3NpbmcgaXMgbm90IGFib3V0CiAgICAgICAgICB0byBlbmQsIHN1c3BlbmQgcHJvY2Vzc2luZyAqLwotICAgICAgaWYgKCAoaGhhc2gtPkhhc2hJbkNvdW50ICE9IDBVKSAmJiAgKGhoYXNoLT5TdXNwZW5kUmVxdWVzdCA9PSBIQUxfSEFTSF9TVVNQRU5EKSkKKyAgICAgIGlmICgoaGhhc2gtPkhhc2hJbkNvdW50ICE9IDBVKSAmJiAoaGhhc2gtPlN1c3BlbmRSZXF1ZXN0ID09IEhBTF9IQVNIX1NVU1BFTkQpKQogICAgICAgewogICAgICAgICAvKiBEaXNhYmxlIEludGVycnVwdHMgKi8KLSAgICAgICAgX19IQUxfSEFTSF9ESVNBQkxFX0lUKEhBU0hfSVRfRElOSXxIQVNIX0lUX0RDSSk7CisgICAgICAgIF9fSEFMX0hBU0hfRElTQUJMRV9JVChIQVNIX0lUX0RJTkkgfCBIQVNIX0lUX0RDSSk7CiAKICAgICAgICAgLyogUmVzZXQgU3VzcGVuZFJlcXVlc3QgKi8KICAgICAgICAgaGhhc2gtPlN1c3BlbmRSZXF1ZXN0ID0gSEFMX0hBU0hfU1VTUEVORF9OT05FOwpAQCAtMjA3OCw3ICsyMTA3LDcgQEAKICAgICAgICAgcmV0dXJuIEhBTF9PSzsKICAgICAgIH0KIAotICAgICAgLyogRW50ZXIgaW5wdXQgZGF0YSBpbiB0aGUgUGVyaXBoZXJhbCB0aHJ1IEhBU0hfV3JpdGVfQmxvY2tfRGF0YSgpIGNhbGwgYW5kCisgICAgICAvKiBFbnRlciBpbnB1dCBkYXRhIGluIHRoZSBQZXJpcGhlcmFsIHRocm91Z2ggSEFTSF9Xcml0ZV9CbG9ja19EYXRhKCkgY2FsbCBhbmQKICAgICAgICAgY2hlY2sgd2hldGhlciB0aGUgZGlnZXN0IGNhbGN1bGF0aW9uIGhhcyBiZWVuIHRyaWdnZXJlZCAqLwogICAgICAgaWYgKEhBU0hfV3JpdGVfQmxvY2tfRGF0YShoaGFzaCkgPT0gSEFTSF9ESUdFU1RfQ0FMQ1VMQVRJT05fU1RBUlRFRCkKICAgICAgIHsKQEAgLTIwOTYsNyArMjEyNSw3IEBACiAgICAgICAgICAgaWYgKEhBU0hfV2FpdE9uRmxhZ1VudGlsVGltZW91dChoaGFzaCwgSEFTSF9GTEFHX0JVU1ksIFNFVCwgSEFTSF9USU1FT1VUVkFMVUUpICE9IEhBTF9PSykKICAgICAgICAgICB7CiAgICAgICAgICAgICAvKiBEaXNhYmxlIEludGVycnVwdHMgKi8KLSAgICAgICAgICAgIF9fSEFMX0hBU0hfRElTQUJMRV9JVChIQVNIX0lUX0RJTkl8SEFTSF9JVF9EQ0kpOworICAgICAgICAgICAgX19IQUxfSEFTSF9ESVNBQkxFX0lUKEhBU0hfSVRfRElOSSB8IEhBU0hfSVRfRENJKTsKICAgICAgICAgICAgIHJldHVybiBIQUxfVElNRU9VVDsKICAgICAgICAgICB9CiAgICAgICAgICAgLyogSW5pdGlhbGl6YXRpb24gc3RhcnQgZm9yIEhNQUMgU1RFUCAyICovCkBAIC0yMTA0LDcgKzIxMzMsOCBAQAogICAgICAgICAgIF9fSEFMX0hBU0hfU0VUX05CVkFMSURCSVRTKGhoYXNoLT5IYXNoQnVmZlNpemUpOyAgLyogU2V0IE5CTFcgZm9yIHRoZSBpbnB1dCBtZXNzYWdlICovCiAgICAgICAgICAgaGhhc2gtPkhhc2hJbkNvdW50ID0gaGhhc2gtPkhhc2hCdWZmU2l6ZTsgICAgICAgICAvKiBTZXQgdGhlIGlucHV0IGRhdGEgc2l6ZSAoaW4gYnl0ZXMpICovCiAgICAgICAgICAgaGhhc2gtPnBIYXNoSW5CdWZmUHRyID0gaGhhc2gtPnBIYXNoTXNnQnVmZlB0cjsgICAvKiBTZXQgdGhlIGlucHV0IGRhdGEgYWRkcmVzcyAqLwotICAgICAgICAgIGhoYXNoLT5IYXNoSVRDb3VudGVyID0gMTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2V0IElUQ291bnRlciB0byAxIHRvIGluZGljYXRlIHRoZSBzdGFydCBvZiBhIG5ldyBwaGFzZSAqLworICAgICAgICAgIGhoYXNoLT5IYXNoSVRDb3VudGVyID0gMTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2V0IElUQ291bnRlciB0byAxIHRvIGluZGljYXRlIHRoZSBzdGFydAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgYSBuZXcgcGhhc2UgKi8KICAgICAgICAgICBfX0hBTF9IQVNIX0VOQUJMRV9JVChIQVNIX0lUX0RJTkkpOyAgICAgICAgICAgICAgIC8qIEVuYWJsZSBJVCAod2FzIGRpc2FibGVkIGluIEhBU0hfV3JpdGVfQmxvY2tfRGF0YSkgKi8KICAgICAgICAgfQogICAgICAgICBlbHNlIGlmIChoaGFzaC0+UGhhc2UgPT0gSEFMX0hBU0hfUEhBU0VfSE1BQ19TVEVQXzIpCkBAIC0yMTEzLDcgKzIxNDMsNyBAQAogICAgICAgICAgIGlmIChIQVNIX1dhaXRPbkZsYWdVbnRpbFRpbWVvdXQoaGhhc2gsIEhBU0hfRkxBR19CVVNZLCBTRVQsIEhBU0hfVElNRU9VVFZBTFVFKSAhPSBIQUxfT0spCiAgICAgICAgICAgewogICAgICAgICAgICAgLyogRGlzYWJsZSBJbnRlcnJ1cHRzICovCi0gICAgICAgICAgICBfX0hBTF9IQVNIX0RJU0FCTEVfSVQoSEFTSF9JVF9ESU5JfEhBU0hfSVRfRENJKTsKKyAgICAgICAgICAgIF9fSEFMX0hBU0hfRElTQUJMRV9JVChIQVNIX0lUX0RJTkkgfCBIQVNIX0lUX0RDSSk7CiAgICAgICAgICAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CiAgICAgICAgICAgfQogICAgICAgICAgIC8qIEluaXRpYWxpemF0aW9uIHN0YXJ0IGZvciBITUFDIFNURVAgMyAqLwpAQCAtMjEyMSw3ICsyMTUxLDggQEAKICAgICAgICAgICBfX0hBTF9IQVNIX1NFVF9OQlZBTElEQklUUyhoaGFzaC0+SW5pdC5LZXlTaXplKTsgICAvKiBTZXQgTkJMVyBmb3IgdGhlIGtleSAqLwogICAgICAgICAgIGhoYXNoLT5IYXNoSW5Db3VudCA9IGhoYXNoLT5Jbml0LktleVNpemU7ICAgICAgICAgIC8qIFNldCB0aGUga2V5IHNpemUgKGluIGJ5dGVzKSAqLwogICAgICAgICAgIGhoYXNoLT5wSGFzaEluQnVmZlB0ciA9IGhoYXNoLT5Jbml0LnBLZXk7ICAgICAgICAgIC8qIFNldCB0aGUga2V5IGFkZHJlc3MgKi8KLSAgICAgICAgICBoaGFzaC0+SGFzaElUQ291bnRlciA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTZXQgSVRDb3VudGVyIHRvIDEgdG8gaW5kaWNhdGUgdGhlIHN0YXJ0IG9mIGEgbmV3IHBoYXNlICovCisgICAgICAgICAgaGhhc2gtPkhhc2hJVENvdW50ZXIgPSAxOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2V0IElUQ291bnRlciB0byAxIHRvIGluZGljYXRlIHRoZSBzdGFydAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIGEgbmV3IHBoYXNlICovCiAgICAgICAgICAgX19IQUxfSEFTSF9FTkFCTEVfSVQoSEFTSF9JVF9ESU5JKTsgICAgICAgICAgICAgICAgLyogRW5hYmxlIElUICh3YXMgZGlzYWJsZWQgaW4gSEFTSF9Xcml0ZV9CbG9ja19EYXRhKSAqLwogICAgICAgICB9CiAgICAgICAgIGVsc2UKQEAgLTIxNTUsMjggKzIxODYsMjggQEAKICAgdWludDMyX3QgcmV0ID0gSEFTSF9ESUdFU1RfQ0FMQ1VMQVRJT05fTk9UX1NUQVJURUQ7CiAKICAgLyogSWYgdGhlcmUgYXJlIG1vcmUgdGhhbiA2NCBieXRlcyByZW1haW5pbmcgdG8gYmUgZW50ZXJlZCAqLwotICBpZihoaGFzaC0+SGFzaEluQ291bnQgPiA2NFUpCisgIGlmIChoaGFzaC0+SGFzaEluQ291bnQgPiA2NFUpCiAgIHsKICAgICBpbnB1dGFkZHIgPSAodWludDMyX3QpaGhhc2gtPnBIYXNoSW5CdWZmUHRyOwogICAgIC8qIFdyaXRlIHRoZSBJbnB1dCBibG9jayBpbiB0aGUgRGF0YSBJTiByZWdpc3RlcgogICAgICAgKDE2IDMyLWJpdCB3b3Jkcywgb3IgNjQgYnl0ZXMgYXJlIGVudGVyZWQpICovCi0gICAgZm9yKGJ1ZmZlcmNvdW50ZXIgPSAwVTsgYnVmZmVyY291bnRlciA8IDY0VTsgYnVmZmVyY291bnRlcis9NFUpCisgICAgZm9yIChidWZmZXJjb3VudGVyID0gMFU7IGJ1ZmZlcmNvdW50ZXIgPCA2NFU7IGJ1ZmZlcmNvdW50ZXIgKz0gNFUpCiAgICAgewotICAgICAgSEFTSC0+RElOID0gKih1aW50MzJfdCopaW5wdXRhZGRyOwotICAgICAgaW5wdXRhZGRyKz00VTsKKyAgICAgIEhBU0gtPkRJTiA9ICoodWludDMyX3QgKilpbnB1dGFkZHI7CisgICAgICBpbnB1dGFkZHIgKz0gNFU7CiAgICAgfQogICAgIC8qIElmIHRoaXMgaXMgdGhlIHN0YXJ0IG9mIGlucHV0IGRhdGEgZW50ZXJpbmcsIGFuIGFkZGl0aW9uYWwgd29yZAogICAgICAgbXVzdCBiZSBlbnRlcmVkIHRvIHN0YXJ0IHVwIHRoZSBIQVNIIHByb2Nlc3NpbmcgKi8KLSAgICBpZihoaGFzaC0+SGFzaElUQ291bnRlciA9PSAyVSkKKyAgICBpZiAoaGhhc2gtPkhhc2hJVENvdW50ZXIgPT0gMlUpCiAgICAgewotICAgICAgSEFTSC0+RElOID0gKih1aW50MzJfdCopaW5wdXRhZGRyOwotICAgICAgaWYoaGhhc2gtPkhhc2hJbkNvdW50ID49IDY4VSkKKyAgICAgIEhBU0gtPkRJTiA9ICoodWludDMyX3QgKilpbnB1dGFkZHI7CisgICAgICBpZiAoaGhhc2gtPkhhc2hJbkNvdW50ID49IDY4VSkKICAgICAgIHsKICAgICAgICAgLyogVGhlcmUgYXJlIHN0aWxsIGRhdGEgd2FpdGluZyB0byBiZSBlbnRlcmVkIGluIHRoZSBQZXJpcGhlcmFsLgogICAgICAgICAgICBEZWNyZW1lbnQgYnVmZmVyIGNvdW50ZXIgYW5kIHNldCBwb2ludGVyIHRvIHRoZSBwcm9wZXIKICAgICAgICAgICAgbWVtb3J5IGxvY2F0aW9uIGZvciB0aGUgbmV4dCBkYXRhIGVudGVyaW5nIHJvdW5kLiAqLwogICAgICAgICBoaGFzaC0+SGFzaEluQ291bnQgLT0gNjhVOwotICAgICAgICBoaGFzaC0+cEhhc2hJbkJ1ZmZQdHIrPSA2OFU7CisgICAgICAgIGhoYXNoLT5wSGFzaEluQnVmZlB0ciArPSA2OFU7CiAgICAgICB9CiAgICAgICBlbHNlCiAgICAgICB7CkBAIC0yMTkwLDcgKzIyMjEsNyBAQAogICAgICAgICAgRGVjcmVtZW50IGJ1ZmZlciBjb3VudGVyIGFuZCBzZXQgcG9pbnRlciB0byB0aGUgcHJvcGVyCiAgICAgICAgIG1lbW9yeSBsb2NhdGlvbiBmb3IgdGhlIG5leHQgZGF0YSBlbnRlcmluZyByb3VuZC4qLwogICAgICAgaGhhc2gtPkhhc2hJbkNvdW50IC09IDY0VTsKLSAgICAgIGhoYXNoLT5wSGFzaEluQnVmZlB0cis9IDY0VTsKKyAgICAgIGhoYXNoLT5wSGFzaEluQnVmZlB0ciArPSA2NFU7CiAgICAgfQogICB9CiAgIGVsc2UKQEAgLTIyMDYsMTAgKzIyMzcsMTAgQEAKICAgICBfX0hBTF9IQVNIX0RJU0FCTEVfSVQoSEFTSF9JVF9ESU5JKTsKIAogICAgIC8qIFdyaXRlIHRoZSBJbnB1dCBibG9jayBpbiB0aGUgRGF0YSBJTiByZWdpc3RlciAqLwotICAgIGZvcihidWZmZXJjb3VudGVyID0gMFU7IGJ1ZmZlcmNvdW50ZXIgPCAoKGlucHV0Y291bnRlciszVSkvNFUpOyBidWZmZXJjb3VudGVyKyspCisgICAgZm9yIChidWZmZXJjb3VudGVyID0gMFU7IGJ1ZmZlcmNvdW50ZXIgPCAoKGlucHV0Y291bnRlciArIDNVKSAvIDRVKTsgYnVmZmVyY291bnRlcisrKQogICAgIHsKLSAgICAgIEhBU0gtPkRJTiA9ICoodWludDMyX3QqKWlucHV0YWRkcjsKLSAgICAgIGlucHV0YWRkcis9NFU7CisgICAgICBIQVNILT5ESU4gPSAqKHVpbnQzMl90ICopaW5wdXRhZGRyOworICAgICAgaW5wdXRhZGRyICs9IDRVOwogICAgIH0KIAogICAgIGlmIChoaGFzaC0+QWNjdW11bGF0aW9uID09IDFVKQpAQCAtMjIyMyw5ICsyMjU0LDkgQEAKICAgICAgIGhoYXNoLT5TdGF0ZSA9IEhBTF9IQVNIX1NUQVRFX1JFQURZOwogICAgICAgLyogQ2FsbCBJbnB1dCBkYXRhIHRyYW5zZmVyIGNvbXBsZXRlIGNhbGwgYmFjayAqLwogI2lmIChVU0VfSEFMX0hBU0hfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCi0gICAgICAgIGhoYXNoLT5JbkNwbHRDYWxsYmFjayhoaGFzaCk7CisgICAgICBoaGFzaC0+SW5DcGx0Q2FsbGJhY2soaGhhc2gpOwogI2Vsc2UKLSAgICAgICAgSEFMX0hBU0hfSW5DcGx0Q2FsbGJhY2soaGhhc2gpOworICAgICAgSEFMX0hBU0hfSW5DcGx0Q2FsbGJhY2soaGhhc2gpOwogI2VuZGlmIC8qIFVTRV9IQUxfSEFTSF9SRUdJU1RFUl9DQUxMQkFDS1MgKi8KICAgICB9CiAgICAgZWxzZQpAQCAtMjI1NSw3ICsyMjg2LDggQEAKIHN0YXRpYyBIQUxfU3RhdHVzVHlwZURlZiBITUFDX1Byb2Nlc3NpbmcoSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCwgdWludDMyX3QgVGltZW91dCkKIHsKICAgLyogRW5zdXJlIGZpcnN0IHRoYXQgUGhhc2UgaXMgY29ycmVjdCAqLwotICBpZiAoKGhoYXNoLT5QaGFzZSAhPSBIQUxfSEFTSF9QSEFTRV9ITUFDX1NURVBfMSkgJiYgKGhoYXNoLT5QaGFzZSAhPSBIQUxfSEFTSF9QSEFTRV9ITUFDX1NURVBfMikgJiYgKGhoYXNoLT5QaGFzZSAhPSBIQUxfSEFTSF9QSEFTRV9ITUFDX1NURVBfMykpCisgIGlmICgoaGhhc2gtPlBoYXNlICE9IEhBTF9IQVNIX1BIQVNFX0hNQUNfU1RFUF8xKSAmJiAoaGhhc2gtPlBoYXNlICE9IEhBTF9IQVNIX1BIQVNFX0hNQUNfU1RFUF8yKQorICAgICAgJiYgKGhoYXNoLT5QaGFzZSAhPSBIQUxfSEFTSF9QSEFTRV9ITUFDX1NURVBfMykpCiAgIHsKICAgICAvKiBDaGFuZ2UgdGhlIEhBU0ggc3RhdGUgKi8KICAgICBoaGFzaC0+U3RhdGUgPSBIQUxfSEFTSF9TVEFURV9SRUFEWTsKQEAgLTIzNTIsMTEgKzIzODQsMTEgQEAKICAgfQogCiAKLSAvKiBITUFDIFN0ZXAgMyBwcm9jZXNzaW5nLgotICAgICBBZnRlciBwaGFzZSBjaGVjaywgSE1BQ19Qcm9jZXNzaW5nKCkgbWF5Ci0gICAgIC0gZGlyZWN0bHkgc3RhcnQgdXAgZnJvbSB0aGlzIHBvaW50IGluIHJlc3VtcHRpb24gY2FzZQotICAgICAgIGlmIHRoZSBzYW1lIFN0ZXAgMyBwcm9jZXNzaW5nIHdhcyBzdXNwZW5kZWQgcHJldmlvdXNseQotICAgIC0gb3IgZmFsbCB0aHJvdWdoIGZyb20gdGhlIFN0ZXAgMiBwcm9jZXNzaW5nIGNhcnJpZWQgb3V0IGhlcmVhYm92ZSAqLworICAvKiBITUFDIFN0ZXAgMyBwcm9jZXNzaW5nLgorICAgICAgQWZ0ZXIgcGhhc2UgY2hlY2ssIEhNQUNfUHJvY2Vzc2luZygpIG1heQorICAgICAgLSBkaXJlY3RseSBzdGFydCB1cCBmcm9tIHRoaXMgcG9pbnQgaW4gcmVzdW1wdGlvbiBjYXNlCisgICAgICAgIGlmIHRoZSBzYW1lIFN0ZXAgMyBwcm9jZXNzaW5nIHdhcyBzdXNwZW5kZWQgcHJldmlvdXNseQorICAgICAtIG9yIGZhbGwgdGhyb3VnaCBmcm9tIHRoZSBTdGVwIDIgcHJvY2Vzc2luZyBjYXJyaWVkIG91dCBoZXJlYWJvdmUgKi8KICAgaWYgKGhoYXNoLT5QaGFzZSA9PSBIQUxfSEFTSF9QSEFTRV9ITUFDX1NURVBfMykKICAgewogICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiBTVEVQIDMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMjM4NCw3ICsyNDE2LDcgQEAKICAgICBfX0hBTF9IQVNIX1NUQVJUX0RJR0VTVCgpOwogCiAgICAgLyogV2FpdCBmb3IgRENJUyBmbGFnIHRvIGJlIHNldCAqLwotICAgICBpZiAoSEFTSF9XYWl0T25GbGFnVW50aWxUaW1lb3V0KGhoYXNoLCBIQVNIX0ZMQUdfRENJUywgUkVTRVQsIFRpbWVvdXQpICE9IEhBTF9PSykKKyAgICBpZiAoSEFTSF9XYWl0T25GbGFnVW50aWxUaW1lb3V0KGhoYXNoLCBIQVNIX0ZMQUdfRENJUywgUkVTRVQsIFRpbWVvdXQpICE9IEhBTF9PSykKICAgICB7CiAgICAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CiAgICAgfQpAQCAtMjM5NiwxNCArMjQyOCwxNCBAQAogICAgIGhoYXNoLT5QaGFzZSA9IEhBTF9IQVNIX1BIQVNFX1JFQURZOwogICB9CiAKLSAgIC8qIENoYW5nZSB0aGUgSEFTSCBzdGF0ZSAqLwotICAgaGhhc2gtPlN0YXRlID0gSEFMX0hBU0hfU1RBVEVfUkVBRFk7CisgIC8qIENoYW5nZSB0aGUgSEFTSCBzdGF0ZSAqLworICBoaGFzaC0+U3RhdGUgPSBIQUxfSEFTSF9TVEFURV9SRUFEWTsKIAotICAgLyogUHJvY2VzcyBVbmxvY2sgKi8KLSAgIF9fSEFMX1VOTE9DSyhoaGFzaCk7CisgIC8qIFByb2Nlc3MgVW5sb2NrICovCisgIF9fSEFMX1VOTE9DSyhoaGFzaCk7CiAKLSAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KLSAgIHJldHVybiBIQUxfT0s7CisgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KKyAgcmV0dXJuIEhBTF9PSzsKIH0KIAogCkBAIC0yNDE5LDcgKzI0NTEsOCBAQAogICAqIEBwYXJhbSAgQWxnb3JpdGhtIEhBU0ggYWxnb3JpdGhtLgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwotSEFMX1N0YXR1c1R5cGVEZWYgSEFTSF9TdGFydChIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoLCB1aW50OF90ICpwSW5CdWZmZXIsIHVpbnQzMl90IFNpemUsIHVpbnQ4X3QqIHBPdXRCdWZmZXIsIHVpbnQzMl90IFRpbWVvdXQsIHVpbnQzMl90IEFsZ29yaXRobSkKK0hBTF9TdGF0dXNUeXBlRGVmIEhBU0hfU3RhcnQoSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCwgdWludDhfdCAqcEluQnVmZmVyLCB1aW50MzJfdCBTaXplLCB1aW50OF90ICpwT3V0QnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBUaW1lb3V0LCB1aW50MzJfdCBBbGdvcml0aG0pCiB7CiAgIHVpbnQ4X3QgKnBJbkJ1ZmZlcl90bXA7ICAvKiBpbnB1dCBkYXRhIGFkZHJlc3MsIGlucHV0IHBhcmFtZXRlciBvZiBIQVNIX1dyaXRlRGF0YSgpICAgICAgICAgKi8KICAgdWludDMyX3QgU2l6ZV90bXA7IC8qIGlucHV0IGRhdGEgc2l6ZSAoaW4gYnl0ZXMpLCBpbnB1dCBwYXJhbWV0ZXIgb2YgSEFTSF9Xcml0ZURhdGEoKSAqLwpAQCAtMjQyNyw3ICsyNDYwLDcgQEAKIAogCiAgIC8qIEluaXRpYXRlIEhBU0ggcHJvY2Vzc2luZyBpbiBjYXNlIG9mIHN0YXJ0IG9yIHJlc3VtcHRpb24gKi8KLWlmKChTdGF0ZV90bXAgPT0gSEFMX0hBU0hfU1RBVEVfUkVBRFkpIHx8IChTdGF0ZV90bXAgPT0gSEFMX0hBU0hfU1RBVEVfU1VTUEVOREVEKSkKKyAgaWYgKChTdGF0ZV90bXAgPT0gSEFMX0hBU0hfU1RBVEVfUkVBRFkpIHx8IChTdGF0ZV90bXAgPT0gSEFMX0hBU0hfU1RBVEVfU1VTUEVOREVEKSkKICAgewogICAgIC8qIENoZWNrIGlucHV0IHBhcmFtZXRlcnMgKi8KICAgICBpZiAoKHBJbkJ1ZmZlciA9PSBOVUxMKSB8fCAocE91dEJ1ZmZlciA9PSBOVUxMKSkKQEAgLTI0NDAsMTMgKzI0NzMsMTMgQEAKICAgICBfX0hBTF9MT0NLKGhoYXNoKTsKIAogICAgIC8qIENoZWNrIGlmIGluaXRpYWxpemF0aW9uIHBoYXNlIGhhcyBub3QgYmVlbiBhbHJlYWR5IHBlcmZvcm1lZCAqLwotICAgIGlmKGhoYXNoLT5QaGFzZSA9PSBIQUxfSEFTSF9QSEFTRV9SRUFEWSkKKyAgICBpZiAoaGhhc2gtPlBoYXNlID09IEhBTF9IQVNIX1BIQVNFX1JFQURZKQogICAgIHsKICAgICAgIC8qIENoYW5nZSB0aGUgSEFTSCBzdGF0ZSAqLwogICAgICAgaGhhc2gtPlN0YXRlID0gSEFMX0hBU0hfU1RBVEVfQlVTWTsKIAogICAgICAgLyogU2VsZWN0IHRoZSBIQVNIIGFsZ29yaXRobSwgY2xlYXIgSE1BQyBtb2RlIGFuZCBsb25nIGtleSBzZWxlY3Rpb24gYml0LCByZXNldCB0aGUgSEFTSCBwcm9jZXNzb3IgY29yZSAqLwotICAgICAgTU9ESUZZX1JFRyhIQVNILT5DUiwgSEFTSF9DUl9MS0VZfEhBU0hfQ1JfQUxHT3xIQVNIX0NSX01PREV8SEFTSF9DUl9JTklULCBBbGdvcml0aG0gfCBIQVNIX0NSX0lOSVQpOworICAgICAgTU9ESUZZX1JFRyhIQVNILT5DUiwgSEFTSF9DUl9MS0VZIHwgSEFTSF9DUl9BTEdPIHwgSEFTSF9DUl9NT0RFIHwgSEFTSF9DUl9JTklULCBBbGdvcml0aG0gfCBIQVNIX0NSX0lOSVQpOwogCiAgICAgICAvKiBDb25maWd1cmUgdGhlIG51bWJlciBvZiB2YWxpZCBiaXRzIGluIGxhc3Qgd29yZCBvZiB0aGUgbWVzc2FnZSAqLwogICAgICAgX19IQUxfSEFTSF9TRVRfTkJWQUxJREJJVFMoU2l6ZSk7CkBAIC0yNTY4LDcgKzI2MDEsNyBAQAogICB9CiAKICAgLyogSW5pdGlhdGUgSEFTSCBwcm9jZXNzaW5nIGluIGNhc2Ugb2Ygc3RhcnQgb3IgcmVzdW1wdGlvbiAqLwotaWYoKFN0YXRlX3RtcCA9PSBIQUxfSEFTSF9TVEFURV9SRUFEWSkgfHwgKFN0YXRlX3RtcCA9PSBIQUxfSEFTSF9TVEFURV9TVVNQRU5ERUQpKQorICBpZiAoKFN0YXRlX3RtcCA9PSBIQUxfSEFTSF9TVEFURV9SRUFEWSkgfHwgKFN0YXRlX3RtcCA9PSBIQUxfSEFTSF9TVEFURV9TVVNQRU5ERUQpKQogICB7CiAgICAgLyogQ2hlY2sgaW5wdXQgcGFyYW1ldGVycyAqLwogICAgIGlmICgocEluQnVmZmVyID09IE5VTEwpIHx8IChTaXplID09IDBVKSkKQEAgLTI1NzcsNyArMjYxMCw3IEBACiAgICAgICByZXR1cm4gIEhBTF9FUlJPUjsKICAgICB9CiAKLSAgICAgLyogUHJvY2VzcyBMb2NrZWQgKi8KKyAgICAvKiBQcm9jZXNzIExvY2tlZCAqLwogICAgIF9fSEFMX0xPQ0soaGhhc2gpOwogCiAgICAgLyogSWYgcmVzdW1pbmcgdGhlIEhBU0ggcHJvY2Vzc2luZyAqLwpAQCAtMjYwNCwxMCArMjYzNywxMCBAQAogICAgICAgU2l6ZV90bXAgPSBTaXplOyAgICAgICAgICAgICAgLyogU2l6ZV90bXAgY29udGFpbnMgdGhlIGlucHV0IGRhdGEgc2l6ZSBpbiBieXRlcyAqLwogCiAgICAgICAvKiBDaGVjayBpZiBpbml0aWFsaXphdGlvbiBwaGFzZSBoYXMgYWxyZWFkeSBiZSBwZXJmb3JtZWQgKi8KLSAgICAgIGlmKGhoYXNoLT5QaGFzZSA9PSBIQUxfSEFTSF9QSEFTRV9SRUFEWSkKKyAgICAgIGlmIChoaGFzaC0+UGhhc2UgPT0gSEFMX0hBU0hfUEhBU0VfUkVBRFkpCiAgICAgICB7CiAgICAgICAgIC8qIFNlbGVjdCB0aGUgSEFTSCBhbGdvcml0aG0sIGNsZWFyIEhNQUMgbW9kZSBhbmQgbG9uZyBrZXkgc2VsZWN0aW9uIGJpdCwgcmVzZXQgdGhlIEhBU0ggcHJvY2Vzc29yIGNvcmUgKi8KLSAgICAgICAgTU9ESUZZX1JFRyhIQVNILT5DUiwgSEFTSF9DUl9MS0VZfEhBU0hfQ1JfQUxHT3xIQVNIX0NSX01PREV8SEFTSF9DUl9JTklULCBBbGdvcml0aG0gfCBIQVNIX0NSX0lOSVQpOworICAgICAgICBNT0RJRllfUkVHKEhBU0gtPkNSLCBIQVNIX0NSX0xLRVkgfCBIQVNIX0NSX0FMR08gfCBIQVNIX0NSX01PREUgfCBIQVNIX0NSX0lOSVQsIEFsZ29yaXRobSB8IEhBU0hfQ1JfSU5JVCk7CiAgICAgICB9CiAKICAgICAgIC8qIFNldCB0aGUgcGhhc2UgKi8KQEAgLTI2NzEsNyArMjcwNCw3IEBACiAgIH0KIAogICAvKiBJbml0aWF0ZSBIQVNIIHByb2Nlc3NpbmcgaW4gY2FzZSBvZiBzdGFydCBvciByZXN1bXB0aW9uICovCi0gIGlmKChTdGF0ZV90bXAgPT0gSEFMX0hBU0hfU1RBVEVfUkVBRFkpIHx8IChTdGF0ZV90bXAgPT0gSEFMX0hBU0hfU1RBVEVfU1VTUEVOREVEKSkKKyAgaWYgKChTdGF0ZV90bXAgPT0gSEFMX0hBU0hfU1RBVEVfUkVBRFkpIHx8IChTdGF0ZV90bXAgPT0gSEFMX0hBU0hfU1RBVEVfU1VTUEVOREVEKSkKICAgewogICAgIC8qIENoZWNrIGlucHV0IHBhcmFtZXRlcnMgKi8KICAgICBpZiAoKHBJbkJ1ZmZlciA9PSBOVUxMKSB8fCAoU2l6ZSA9PSAwVSkpCkBAIC0yNjgwLDcgKzI3MTMsNyBAQAogICAgICAgcmV0dXJuICBIQUxfRVJST1I7CiAgICAgfQogCi0gICAgIC8qIFByb2Nlc3MgTG9ja2VkICovCisgICAgLyogUHJvY2VzcyBMb2NrZWQgKi8KICAgICBfX0hBTF9MT0NLKGhoYXNoKTsKIAogICAgIC8qIElmIHJlc3VtaW5nIHRoZSBIQVNIIHByb2Nlc3NpbmcgKi8KQEAgLTI2OTUsMTUgKzI3MjgsMTUgQEAKICAgICAgIGhoYXNoLT5TdGF0ZSA9IEhBTF9IQVNIX1NUQVRFX0JVU1k7CiAKICAgICAgIC8qIENoZWNrIGlmIGluaXRpYWxpemF0aW9uIHBoYXNlIGhhcyBhbHJlYWR5IGJlIHBlcmZvcm1lZCAqLwotICAgICAgaWYoaGhhc2gtPlBoYXNlID09IEhBTF9IQVNIX1BIQVNFX1JFQURZKQorICAgICAgaWYgKGhoYXNoLT5QaGFzZSA9PSBIQUxfSEFTSF9QSEFTRV9SRUFEWSkKICAgICAgIHsKICAgICAgICAgLyogU2VsZWN0IHRoZSBIQVNIIGFsZ29yaXRobSwgY2xlYXIgSE1BQyBtb2RlIGFuZCBsb25nIGtleSBzZWxlY3Rpb24gYml0LCByZXNldCB0aGUgSEFTSCBwcm9jZXNzb3IgY29yZSAqLwotICAgICAgICBNT0RJRllfUkVHKEhBU0gtPkNSLCBIQVNIX0NSX0xLRVl8SEFTSF9DUl9BTEdPfEhBU0hfQ1JfTU9ERXxIQVNIX0NSX0lOSVQsIEFsZ29yaXRobSB8IEhBU0hfQ1JfSU5JVCk7CisgICAgICAgIE1PRElGWV9SRUcoSEFTSC0+Q1IsIEhBU0hfQ1JfTEtFWSB8IEhBU0hfQ1JfQUxHTyB8IEhBU0hfQ1JfTU9ERSB8IEhBU0hfQ1JfSU5JVCwgQWxnb3JpdGhtIHwgSEFTSF9DUl9JTklUKTsKICAgICAgICAgaGhhc2gtPkhhc2hJVENvdW50ZXIgPSAxOwogICAgICAgfQogICAgICAgZWxzZQogICAgICAgewotICAgICAgICAgaGhhc2gtPkhhc2hJVENvdW50ZXIgPSAzOyAvKiAnY3J1aXNlLXNwZWVkJyByZWFjaGVkIGR1cmluZyBhIHByZXZpb3VzIGJ1ZmZlciBwcm9jZXNzaW5nICovCisgICAgICAgIGhoYXNoLT5IYXNoSVRDb3VudGVyID0gMzsgLyogJ2NydWlzZS1zcGVlZCcgcmVhY2hlZCBkdXJpbmcgYSBwcmV2aW91cyBidWZmZXIgcHJvY2Vzc2luZyAqLwogICAgICAgfQogCiAgICAgICAvKiBTZXQgdGhlIHBoYXNlICovCkBAIC0yNzEzLDEzICsyNzQ2LDEzIEBACiAgICAgICAgZmVkIHRvIHRoZSBQZXJpcGhlcmFsKSwgdGhlIERJTklFIGludGVycnVwdGlvbiB3b24ndCBiZSB0cmlnZ2VyZWQgd2hlbiBESU5JRSBpcyBzZXQuCiAgICAgICAgVGhlcmVmb3JlLCBmaXJzdCB3b3JkcyBhcmUgbWFudWFsbHkgZW50ZXJlZCB1bnRpbCBESU5JUyByYWlzZXMsIG9yIHVudGlsIHRoZXJlCiAgICAgICAgaXMgbm90IG1vcmUgZGF0YSB0byBlbnRlci4gKi8KLSAgICAgIHdoaWxlKCghKF9fSEFMX0hBU0hfR0VUX0ZMQUcoSEFTSF9GTEFHX0RJTklTKSkpICYmIChTaXplVmFyID4gMFUpKQorICAgICAgd2hpbGUgKCghKF9fSEFMX0hBU0hfR0VUX0ZMQUcoSEFTSF9GTEFHX0RJTklTKSkpICYmIChTaXplVmFyID4gMFUpKQogICAgICAgewogCiAgICAgICAgIC8qIFdyaXRlIGlucHV0IGRhdGEgNCBieXRlcyBhdCBhIHRpbWUgKi8KLSAgICAgICAgSEFTSC0+RElOID0gKih1aW50MzJfdCopaW5wdXRhZGRyOwotICAgICAgICBpbnB1dGFkZHIrPTRVOwotICAgICAgICBTaXplVmFyLT00VTsKKyAgICAgICAgSEFTSC0+RElOID0gKih1aW50MzJfdCAqKWlucHV0YWRkcjsKKyAgICAgICAgaW5wdXRhZGRyICs9IDRVOworICAgICAgICBTaXplVmFyIC09IDRVOwogICAgICAgfQogCiAgICAgICAvKiBJZiBESU5JUyBpcyBzdGlsbCBub3Qgc2V0IG9yIGlmIGFsbCB0aGUgZGF0YSBoYXZlIGJlZW4gZmVkLCBzdG9wIGhlcmUgKi8KQEAgLTI3NDAsMTAgKzI3NzMsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gYmUgZmVkIHRvIHRoZSBQZXJpcGhlcmFsICovCiAgICAgICBoaGFzaC0+cEhhc2hJbkJ1ZmZQdHIgPSAodWludDhfdCAqKWlucHV0YWRkcjsgICAgICAgLyogUG9pbnRzIGF0IGRhdGEgd2hpY2ggd2lsbCBiZSBmZWQgdG8gdGhlIFBlcmlwaGVyYWwgYXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG5leHQgaW50ZXJydXB0aW9uICovCi0gICAgIC8qIEluIGNhc2Ugb2Ygc3VzcGVuc2lvbiwgaGhhc2gtPkhhc2hJbkNvdW50IGFuZCBoaGFzaC0+cEhhc2hJbkJ1ZmZQdHIgY29udGFpbgotICAgICAgICB0aGUgaW5mb3JtYXRpb24gZGVzY3JpYmluZyB3aGVyZSB0aGUgSEFTSCBwcm9jZXNzIGlzIHN0b3BwZWQuCi0gICAgICAgIFRoZXNlIHZhcmlhYmxlcyBhcmUgdXNlZCBsYXRlciBvbiB0byByZXN1bWUgdGhlIEhBU0ggcHJvY2Vzc2luZyBhdCB0aGUKLSAgICAgICAgY29ycmVjdCBsb2NhdGlvbi4gKi8KKyAgICAgIC8qIEluIGNhc2Ugb2Ygc3VzcGVuc2lvbiwgaGhhc2gtPkhhc2hJbkNvdW50IGFuZCBoaGFzaC0+cEhhc2hJbkJ1ZmZQdHIgY29udGFpbgorICAgICAgICAgdGhlIGluZm9ybWF0aW9uIGRlc2NyaWJpbmcgd2hlcmUgdGhlIEhBU0ggcHJvY2VzcyBpcyBzdG9wcGVkLgorICAgICAgICAgVGhlc2UgdmFyaWFibGVzIGFyZSB1c2VkIGxhdGVyIG9uIHRvIHJlc3VtZSB0aGUgSEFTSCBwcm9jZXNzaW5nIGF0IHRoZQorICAgICAgICAgY29ycmVjdCBsb2NhdGlvbi4gKi8KIAogICAgIH0KIApAQCAtMjc4MCwxNiArMjgxMywxNyBAQAogICAqIEBwYXJhbSAgQWxnb3JpdGhtIEhBU0ggYWxnb3JpdGhtLgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwotSEFMX1N0YXR1c1R5cGVEZWYgSEFTSF9TdGFydF9JVChIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoLCB1aW50OF90ICpwSW5CdWZmZXIsIHVpbnQzMl90IFNpemUsIHVpbnQ4X3QqIHBPdXRCdWZmZXIsIHVpbnQzMl90IEFsZ29yaXRobSkKK0hBTF9TdGF0dXNUeXBlRGVmIEhBU0hfU3RhcnRfSVQoSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCwgdWludDhfdCAqcEluQnVmZmVyLCB1aW50MzJfdCBTaXplLCB1aW50OF90ICpwT3V0QnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBBbGdvcml0aG0pCiB7Ci0gICBIQUxfSEFTSF9TdGF0ZVR5cGVEZWYgU3RhdGVfdG1wID0gaGhhc2gtPlN0YXRlOworICBIQUxfSEFTSF9TdGF0ZVR5cGVEZWYgU3RhdGVfdG1wID0gaGhhc2gtPlN0YXRlOwogICBfX0lPIHVpbnQzMl90IGlucHV0YWRkciA9ICh1aW50MzJfdCkgcEluQnVmZmVyOwogICB1aW50MzJfdCBwb2xsaW5nX3N0ZXAgPSAwVTsKICAgdWludDMyX3QgaW5pdGlhbGl6YXRpb25fc2tpcHBlZCA9IDBVOwogICB1aW50MzJfdCBTaXplVmFyID0gU2l6ZTsKIAogICAvKiBJZiBTdGF0ZSBpcyByZWFkeSBvciBzdXNwZW5kZWQsIHN0YXJ0IG9yIHJlc3VtZSBJVC1iYXNlZCBIQVNIIHByb2Nlc3NpbmcgKi8KLWlmKChTdGF0ZV90bXAgPT0gSEFMX0hBU0hfU1RBVEVfUkVBRFkpIHx8IChTdGF0ZV90bXAgPT0gSEFMX0hBU0hfU1RBVEVfU1VTUEVOREVEKSkKKyAgaWYgKChTdGF0ZV90bXAgPT0gSEFMX0hBU0hfU1RBVEVfUkVBRFkpIHx8IChTdGF0ZV90bXAgPT0gSEFMX0hBU0hfU1RBVEVfU1VTUEVOREVEKSkKICAgewogICAgIC8qIENoZWNrIGlucHV0IHBhcmFtZXRlcnMgKi8KICAgICBpZiAoKHBJbkJ1ZmZlciA9PSBOVUxMKSB8fCAoU2l6ZSA9PSAwVSkgfHwgKHBPdXRCdWZmZXIgPT0gTlVMTCkpCkBAIC0yODA4LDIzICsyODQyLDIzIEBACiAgICAgaGhhc2gtPkhhc2hJVENvdW50ZXIgPSAxOwogCiAgICAgLyogQ2hlY2sgaWYgaW5pdGlhbGl6YXRpb24gcGhhc2UgaGFzIGFscmVhZHkgYmUgcGVyZm9ybWVkICovCi0gICAgaWYoaGhhc2gtPlBoYXNlID09IEhBTF9IQVNIX1BIQVNFX1JFQURZKQorICAgIGlmIChoaGFzaC0+UGhhc2UgPT0gSEFMX0hBU0hfUEhBU0VfUkVBRFkpCiAgICAgewogICAgICAgLyogU2VsZWN0IHRoZSBIQVNIIGFsZ29yaXRobSwgY2xlYXIgSE1BQyBtb2RlIGFuZCBsb25nIGtleSBzZWxlY3Rpb24gYml0LCByZXNldCB0aGUgSEFTSCBwcm9jZXNzb3IgY29yZSAqLwotICAgICAgTU9ESUZZX1JFRyhIQVNILT5DUiwgSEFTSF9DUl9MS0VZfEhBU0hfQ1JfQUxHT3xIQVNIX0NSX01PREV8SEFTSF9DUl9JTklULCBBbGdvcml0aG0gfCBIQVNIX0NSX0lOSVQpOworICAgICAgTU9ESUZZX1JFRyhIQVNILT5DUiwgSEFTSF9DUl9MS0VZIHwgSEFTSF9DUl9BTEdPIHwgSEFTSF9DUl9NT0RFIHwgSEFTSF9DUl9JTklULCBBbGdvcml0aG0gfCBIQVNIX0NSX0lOSVQpOwogCiAgICAgICAvKiBDb25maWd1cmUgdGhlIG51bWJlciBvZiB2YWxpZCBiaXRzIGluIGxhc3Qgd29yZCBvZiB0aGUgbWVzc2FnZSAqLwotICAgICBfX0hBTF9IQVNIX1NFVF9OQlZBTElEQklUUyhTaXplVmFyKTsKKyAgICAgIF9fSEFMX0hBU0hfU0VUX05CVkFMSURCSVRTKFNpemVWYXIpOwogCiAKICAgICAgIGhoYXNoLT5IYXNoSW5Db3VudCA9IFNpemVWYXI7ICAgICAgICAgICAgLyogQ291bnRlciB1c2VkIHRvIGtlZXAgdHJhY2sgb2YgbnVtYmVyIG9mIGRhdGEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gYmUgZmVkIHRvIHRoZSBQZXJpcGhlcmFsICovCiAgICAgICBoaGFzaC0+cEhhc2hJbkJ1ZmZQdHIgPSBwSW5CdWZmZXI7ICAgICAgIC8qIFBvaW50cyBhdCBkYXRhIHdoaWNoIHdpbGwgYmUgZmVkIHRvIHRoZSBQZXJpcGhlcmFsIGF0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBuZXh0IGludGVycnVwdGlvbiAqLwotICAgICAvKiBJbiBjYXNlIG9mIHN1c3BlbnNpb24sIGhoYXNoLT5IYXNoSW5Db3VudCBhbmQgaGhhc2gtPnBIYXNoSW5CdWZmUHRyIGNvbnRhaW4KLSAgICAgICAgdGhlIGluZm9ybWF0aW9uIGRlc2NyaWJpbmcgd2hlcmUgdGhlIEhBU0ggcHJvY2VzcyBpcyBzdG9wcGVkLgotICAgICAgICBUaGVzZSB2YXJpYWJsZXMgYXJlIHVzZWQgbGF0ZXIgb24gdG8gcmVzdW1lIHRoZSBIQVNIIHByb2Nlc3NpbmcgYXQgdGhlCi0gICAgICAgIGNvcnJlY3QgbG9jYXRpb24uICovCisgICAgICAvKiBJbiBjYXNlIG9mIHN1c3BlbnNpb24sIGhoYXNoLT5IYXNoSW5Db3VudCBhbmQgaGhhc2gtPnBIYXNoSW5CdWZmUHRyIGNvbnRhaW4KKyAgICAgICAgIHRoZSBpbmZvcm1hdGlvbiBkZXNjcmliaW5nIHdoZXJlIHRoZSBIQVNIIHByb2Nlc3MgaXMgc3RvcHBlZC4KKyAgICAgICAgIFRoZXNlIHZhcmlhYmxlcyBhcmUgdXNlZCBsYXRlciBvbiB0byByZXN1bWUgdGhlIEhBU0ggcHJvY2Vzc2luZyBhdCB0aGUKKyAgICAgICAgIGNvcnJlY3QgbG9jYXRpb24uICovCiAKICAgICAgIGhoYXNoLT5wSGFzaE91dEJ1ZmZQdHIgPSBwT3V0QnVmZmVyOyAgICAgLyogUG9pbnRzIGF0IHRoZSBjb21wdXRlZCBkaWdlc3QgKi8KICAgICB9CkBAIC0yODM2LDE3ICsyODcwLDE3IEBACiAgICAgLyogU2V0IHRoZSBwaGFzZSAqLwogICAgIGhoYXNoLT5QaGFzZSA9IEhBTF9IQVNIX1BIQVNFX1BST0NFU1M7CiAKLSAgIC8qIElmIERJTklTIGlzIGVxdWFsIHRvIDAgKGZvciBleGFtcGxlIGlmIGFuIGluY29tcGxldGUgYmxvY2sgaGFzIGJlZW4gcHJldmlvdXNseQotICAgICBmZWQgdG8gdGhlIFBlcmlwaGVyYWwpLCB0aGUgRElOSUUgaW50ZXJydXB0aW9uIHdvbid0IGJlIHRyaWdnZXJlZCB3aGVuIERJTklFIGlzIHNldC4KLSAgICAgVGhlcmVmb3JlLCBmaXJzdCB3b3JkcyBhcmUgbWFudWFsbHkgZW50ZXJlZCB1bnRpbCBESU5JUyByYWlzZXMuICovCi0gICAgd2hpbGUoKCEoX19IQUxfSEFTSF9HRVRfRkxBRyhIQVNIX0ZMQUdfRElOSVMpKSkgJiYgKFNpemVWYXIgPiAzVSkpCisgICAgLyogSWYgRElOSVMgaXMgZXF1YWwgdG8gMCAoZm9yIGV4YW1wbGUgaWYgYW4gaW5jb21wbGV0ZSBibG9jayBoYXMgYmVlbiBwcmV2aW91c2x5CisgICAgICBmZWQgdG8gdGhlIFBlcmlwaGVyYWwpLCB0aGUgRElOSUUgaW50ZXJydXB0aW9uIHdvbid0IGJlIHRyaWdnZXJlZCB3aGVuIERJTklFIGlzIHNldC4KKyAgICAgIFRoZXJlZm9yZSwgZmlyc3Qgd29yZHMgYXJlIG1hbnVhbGx5IGVudGVyZWQgdW50aWwgRElOSVMgcmFpc2VzLiAqLworICAgIHdoaWxlICgoIShfX0hBTF9IQVNIX0dFVF9GTEFHKEhBU0hfRkxBR19ESU5JUykpKSAmJiAoU2l6ZVZhciA+IDNVKSkKICAgICB7CiAgICAgICBwb2xsaW5nX3N0ZXAgPSAxVTsgLyogbm90ZSB0aGF0IHNvbWUgd29yZHMgYXJlIGVudGVyZWQgYmVmb3JlIGVuYWJsaW5nIHRoZSBpbnRlcnJ1cHQgKi8KIAogICAgICAgLyogV3JpdGUgaW5wdXQgZGF0YSA0IGJ5dGVzIGF0IGEgdGltZSAqLwotICAgICAgSEFTSC0+RElOID0gKih1aW50MzJfdCopaW5wdXRhZGRyOwotICAgICAgaW5wdXRhZGRyKz00VTsKLSAgICAgIFNpemVWYXItPTRVOworICAgICAgSEFTSC0+RElOID0gKih1aW50MzJfdCAqKWlucHV0YWRkcjsKKyAgICAgIGlucHV0YWRkciArPSA0VTsKKyAgICAgIFNpemVWYXIgLT0gNFU7CiAgICAgfQogCiAgICAgaWYgKHBvbGxpbmdfc3RlcCA9PSAxVSkKQEAgLTI4NTgsNyArMjg5Miw3IEBACiAgICAgICAgIGhoYXNoLT5wSGFzaE91dEJ1ZmZQdHIgPSBwT3V0QnVmZmVyOyAgICAgLyogUG9pbnRzIGF0IHRoZSBjb21wdXRlZCBkaWdlc3QgKi8KIAogICAgICAgICAvKiBTdGFydCB0aGUgRGlnZXN0IGNhbGN1bGF0aW9uICovCi0gICAgICAgICBfX0hBTF9IQVNIX1NUQVJUX0RJR0VTVCgpOworICAgICAgICBfX0hBTF9IQVNIX1NUQVJUX0RJR0VTVCgpOwogICAgICAgICAvKiBQcm9jZXNzIFVubG9jayAqLwogICAgICAgICBfX0hBTF9VTkxPQ0soaGhhc2gpOwogCkBAIC0yODc1LDcgKzI5MDksOCBAQAogICAgICAgICAgICBVcGRhdGUgSGFzaEluQ291bnQgYW5kIHBIYXNoSW5CdWZmUHRyIGFjY29yZGluZ2x5LiAqLwogICAgICAgICBoaGFzaC0+SGFzaEluQ291bnQgPSBTaXplVmFyOwogICAgICAgICBoaGFzaC0+cEhhc2hJbkJ1ZmZQdHIgPSAodWludDhfdCAqKWlucHV0YWRkcjsKLSAgICAgICAgX19IQUxfSEFTSF9TRVRfTkJWQUxJREJJVFMoU2l6ZVZhcik7ICAvKiBVcGRhdGUgdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIG51bWJlciBvZiB2YWxpZCBiaXRzIGluIGxhc3Qgd29yZCBvZiB0aGUgbWVzc2FnZSAqLworICAgICAgICBfX0hBTF9IQVNIX1NFVF9OQlZBTElEQklUUygKKyAgICAgICAgICBTaXplVmFyKTsgIC8qIFVwZGF0ZSB0aGUgY29uZmlndXJhdGlvbiBvZiB0aGUgbnVtYmVyIG9mIHZhbGlkIGJpdHMgaW4gbGFzdCB3b3JkIG9mIHRoZSBtZXNzYWdlICovCiAgICAgICAgIGhoYXNoLT5wSGFzaE91dEJ1ZmZQdHIgPSBwT3V0QnVmZmVyOyAgLyogUG9pbnRzIGF0IHRoZSBjb21wdXRlZCBkaWdlc3QgKi8KICAgICAgICAgaWYgKGluaXRpYWxpemF0aW9uX3NraXBwZWQgPT0gMVUpCiAgICAgICAgIHsKQEAgLTI4ODcsMTEgKzI5MjIsMTEgQEAKICAgICAgICAgLyogRElOSVMgaXMgbm90IHNldCBidXQgaXQgcmVtYWlucyBhIGZldyBkYXRhIHRvIGVudGVyIChub3QgZW5vdWdoIGZvciBhIGZ1bGwgd29yZCkuCiAgICAgICAgICAgIE1hbnVhbGx5IGVudGVyIHRoZSBsYXN0IGJ5dGVzIGJlZm9yZSBlbmFibGluZyBEQ0lFLiAqLwogICAgICAgICBfX0hBTF9IQVNIX1NFVF9OQlZBTElEQklUUyhTaXplVmFyKTsKLSAgICAgICAgSEFTSC0+RElOID0gKih1aW50MzJfdCopaW5wdXRhZGRyOworICAgICAgICBIQVNILT5ESU4gPSAqKHVpbnQzMl90ICopaW5wdXRhZGRyOwogCi0gICAgICAgICAvKiBTdGFydCB0aGUgRGlnZXN0IGNhbGN1bGF0aW9uICovCisgICAgICAgIC8qIFN0YXJ0IHRoZSBEaWdlc3QgY2FsY3VsYXRpb24gKi8KICAgICAgICAgaGhhc2gtPnBIYXNoT3V0QnVmZlB0ciA9IHBPdXRCdWZmZXI7ICAgICAvKiBQb2ludHMgYXQgdGhlIGNvbXB1dGVkIGRpZ2VzdCAqLwotICAgICAgICAgX19IQUxfSEFTSF9TVEFSVF9ESUdFU1QoKTsKKyAgICAgICAgX19IQUxfSEFTSF9TVEFSVF9ESUdFU1QoKTsKICAgICAgICAgLyogUHJvY2VzcyBVbmxvY2sgKi8KICAgICAgICAgX19IQUxfVU5MT0NLKGhoYXNoKTsKIApAQCAtMjkwOCw3ICsyOTQzLDcgQEAKICAgICBfX0hBTF9VTkxPQ0soaGhhc2gpOwogCiAgICAgLyogRW5hYmxlIEludGVycnVwdHMgKi8KLSAgICBfX0hBTF9IQVNIX0VOQUJMRV9JVChIQVNIX0lUX0RJTkl8SEFTSF9JVF9EQ0kpOworICAgIF9fSEFMX0hBU0hfRU5BQkxFX0lUKEhBU0hfSVRfRElOSSB8IEhBU0hfSVRfRENJKTsKIAogICAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KICAgICByZXR1cm4gSEFMX09LOwpAQCAtMjk0MywyMCArMjk3OCwyMCBAQAogICBIQUxfU3RhdHVzVHlwZURlZiBzdGF0dXMgOwogICBIQUxfSEFTSF9TdGF0ZVR5cGVEZWYgU3RhdGVfdG1wID0gaGhhc2gtPlN0YXRlOwogCi0jaWYgZGVmaW5lZCAoSEFTSF9DUl9NRE1BVCkKKyAgI2lmIGRlZmluZWQgKEhBU0hfQ1JfTURNQVQpCiAgIC8qIE1ha2Ugc3VyZSB0aGUgaW5wdXQgYnVmZmVyIHNpemUgKGluIGJ5dGVzKSBpcyBhIG11bHRpcGxlIG9mIDQgd2hlbiBNRE1BVCBiaXQgaXMgc2V0CiAgICAgIChjYXNlIG9mIG11bHRpLWJ1ZmZlciBIQVNIIHByb2Nlc3NpbmcpICovCiAgIGFzc2VydF9wYXJhbShJU19IQVNIX0RNQV9NVUxUSUJVRkZFUl9TSVpFKFNpemUpKTsKLSNlbmRpZiAvKiBNRE1BIGRlZmluZWQqLwotICAgLyogSWYgU3RhdGUgaXMgcmVhZHkgb3Igc3VzcGVuZGVkLCBzdGFydCBvciByZXN1bWUgcG9sbGluZy1iYXNlZCBIQVNIIHByb2Nlc3NpbmcgKi8KLWlmKChTdGF0ZV90bXAgPT0gSEFMX0hBU0hfU1RBVEVfUkVBRFkpIHx8IChTdGF0ZV90bXAgPT0gSEFMX0hBU0hfU1RBVEVfU1VTUEVOREVEKSkKKyAgI2VuZGlmIC8qIE1ETUEgZGVmaW5lZCovCisgIC8qIElmIFN0YXRlIGlzIHJlYWR5IG9yIHN1c3BlbmRlZCwgc3RhcnQgb3IgcmVzdW1lIHBvbGxpbmctYmFzZWQgSEFTSCBwcm9jZXNzaW5nICovCisgIGlmICgoU3RhdGVfdG1wID09IEhBTF9IQVNIX1NUQVRFX1JFQURZKSB8fCAoU3RhdGVfdG1wID09IEhBTF9IQVNIX1NUQVRFX1NVU1BFTkRFRCkpCiAgIHsKICAgICAvKiBDaGVjayBpbnB1dCBwYXJhbWV0ZXJzICovCi0gICAgaWYgKCAocEluQnVmZmVyID09IE5VTEwgKSB8fCAoU2l6ZSA9PSAwVSkgfHwKLSAgICAvKiBDaGVjayBwaGFzZSBjb2hlcmVuY3kuIFBoYXNlIG11c3QgYmUKLSAgICAgICBlaXRoZXIgUkVBRFkgKGZyZXNoIHN0YXJ0KQotICAgICAgIG9yIFBST0NFU1MgKG11bHRpLWJ1ZmZlciBIQVNIIG1hbmFnZW1lbnQpICovCi0gICAgICAgKChoaGFzaC0+UGhhc2UgIT0gSEFMX0hBU0hfUEhBU0VfUkVBRFkpICYmICghKElTX0hBU0hfUFJPQ0VTU0lORyhoaGFzaCkpKSkpCisgICAgaWYgKChwSW5CdWZmZXIgPT0gTlVMTCkgfHwgKFNpemUgPT0gMFUpIHx8CisgICAgICAgIC8qIENoZWNrIHBoYXNlIGNvaGVyZW5jeS4gUGhhc2UgbXVzdCBiZQorICAgICAgICAgICBlaXRoZXIgUkVBRFkgKGZyZXNoIHN0YXJ0KQorICAgICAgICAgICBvciBQUk9DRVNTIChtdWx0aS1idWZmZXIgSEFTSCBtYW5hZ2VtZW50KSAqLworICAgICAgICAoKGhoYXNoLT5QaGFzZSAhPSBIQUxfSEFTSF9QSEFTRV9SRUFEWSkgJiYgKCEoSVNfSEFTSF9QUk9DRVNTSU5HKGhoYXNoKSkpKSkKICAgICB7CiAgICAgICBoaGFzaC0+U3RhdGUgPSBIQUxfSEFTSF9TVEFURV9SRUFEWTsKICAgICAgIHJldHVybiAgSEFMX0VSUk9SOwpAQCAtMjk3NiwxMCArMzAxMSwxMCBAQAogICAgICAgICAgSWYgUGhhc2UgaXMgYWxyZWFkeSBzZXQgdG8gSEFMX0hBU0hfUEhBU0VfUFJPQ0VTUywgdGhpcyBtZWFucyB0aGUKICAgICAgICAgIEFQSSBpcyBwcm9jZXNzaW5nIGEgbmV3IGlucHV0IGRhdGEgbWVzc2FnZSBpbiBjYXNlIG9mIG11bHRpLWJ1ZmZlciBIQVNICiAgICAgICAgICBjb21wdXRhdGlvbi4gKi8KLSAgICAgIGlmKGhoYXNoLT5QaGFzZSA9PSBIQUxfSEFTSF9QSEFTRV9SRUFEWSkKKyAgICAgIGlmIChoaGFzaC0+UGhhc2UgPT0gSEFMX0hBU0hfUEhBU0VfUkVBRFkpCiAgICAgICB7CiAgICAgICAgIC8qIFNlbGVjdCB0aGUgSEFTSCBhbGdvcml0aG0sIGNsZWFyIEhNQUMgbW9kZSBhbmQgbG9uZyBrZXkgc2VsZWN0aW9uIGJpdCwgcmVzZXQgdGhlIEhBU0ggcHJvY2Vzc29yIGNvcmUgKi8KLSAgICAgICAgTU9ESUZZX1JFRyhIQVNILT5DUiwgSEFTSF9DUl9MS0VZfEhBU0hfQ1JfQUxHT3xIQVNIX0NSX01PREV8SEFTSF9DUl9JTklULCBBbGdvcml0aG0gfCBIQVNIX0NSX0lOSVQpOworICAgICAgICBNT0RJRllfUkVHKEhBU0gtPkNSLCBIQVNIX0NSX0xLRVkgfCBIQVNIX0NSX0FMR08gfCBIQVNIX0NSX01PREUgfCBIQVNIX0NSX0lOSVQsIEFsZ29yaXRobSB8IEhBU0hfQ1JfSU5JVCk7CiAKICAgICAgICAgLyogU2V0IHRoZSBwaGFzZSAqLwogICAgICAgICBoaGFzaC0+UGhhc2UgPSBIQUxfSEFTSF9QSEFTRV9QUk9DRVNTOwpAQCAtMzAxMCw3ICszMDQ1LDcgQEAKIAogICAgIH0KIAotICAgIC8qIFNldCB0aGUgSEFTSCBETUEgdHJhbnNmZXJ0IGNvbXBsZXRlIGNhbGxiYWNrICovCisgICAgLyogU2V0IHRoZSBIQVNIIERNQSB0cmFuc2ZlciBjb21wbGV0ZSBjYWxsYmFjayAqLwogICAgIGhoYXNoLT5oZG1haW4tPlhmZXJDcGx0Q2FsbGJhY2sgPSBIQVNIX0RNQVhmZXJDcGx0OwogICAgIC8qIFNldCB0aGUgRE1BIGVycm9yIGNhbGxiYWNrICovCiAgICAgaGhhc2gtPmhkbWFpbi0+WGZlckVycm9yQ2FsbGJhY2sgPSBIQVNIX0RNQUVycm9yOwpAQCAtMzAxOCw4ICszMDUzLDEwIEBACiAgICAgLyogU3RvcmUgbnVtYmVyIG9mIHdvcmRzIGFscmVhZHkgcHVzaGVkIHRvIG1hbmFnZSBwcm9wZXIgRE1BIHByb2Nlc3Npbmcgc3VzcGVuc2lvbiAqLwogICAgIGhoYXNoLT5OYldvcmRzQWxyZWFkeVB1c2hlZCA9IEhBU0hfTkJXX1BVU0hFRCgpOwogCi0gICAgLyogRW5hYmxlIHRoZSBETUEgSW4gRE1BIFN0cmVhbSAqLwotICAgIHN0YXR1cyA9IEhBTF9ETUFfU3RhcnRfSVQoaGhhc2gtPmhkbWFpbiwgaW5wdXRhZGRyLCAodWludDMyX3QpJkhBU0gtPkRJTiwgKCgoaW5wdXRTaXplICU0VSkhPTBVKSA/ICgoaW5wdXRTaXplKyg0VS0oaW5wdXRTaXplICU0VSkpKS80VSk6KGlucHV0U2l6ZS80VSkpKTsKKyAgICAvKiBFbmFibGUgdGhlIERNQSBJbiBETUEgc3RyZWFtICovCisgICAgc3RhdHVzID0gSEFMX0RNQV9TdGFydF9JVChoaGFzaC0+aGRtYWluLCBpbnB1dGFkZHIsICh1aW50MzJfdCkmSEFTSC0+RElOLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChpbnB1dFNpemUgJSA0VSkgIT0gMFUpID8gKChpbnB1dFNpemUgKyAoNFUgLSAoaW5wdXRTaXplICUgNFUpKSkgLyA0VSkgOiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlucHV0U2l6ZSAvIDRVKSkpOwogCiAgICAgLyogRW5hYmxlIERNQSByZXF1ZXN0cyAqLwogICAgIFNFVF9CSVQoSEFTSC0+Q1IsIEhBU0hfQ1JfRE1BRSk7CkBAIC0zMDUwLDEwICszMDg3LDEwIEBACiAgICogQHBhcmFtICBUaW1lb3V0IFRpbWVvdXQgdmFsdWUuCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQVNIX0ZpbmlzaChIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoLCB1aW50OF90KiBwT3V0QnVmZmVyLCB1aW50MzJfdCBUaW1lb3V0KQorSEFMX1N0YXR1c1R5cGVEZWYgSEFTSF9GaW5pc2goSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCwgdWludDhfdCAqcE91dEJ1ZmZlciwgdWludDMyX3QgVGltZW91dCkKIHsKIAotICBpZihoaGFzaC0+U3RhdGUgPT0gSEFMX0hBU0hfU1RBVEVfUkVBRFkpCisgIGlmIChoaGFzaC0+U3RhdGUgPT0gSEFMX0hBU0hfU1RBVEVfUkVBRFkpCiAgIHsKICAgICAvKiBDaGVjayBwYXJhbWV0ZXIgKi8KICAgICBpZiAocE91dEJ1ZmZlciA9PSBOVUxMKQpAQCAtMzExMSwxNSArMzE0OCwxNyBAQAogICAqIEBwYXJhbSAgQWxnb3JpdGhtIEhBU0ggYWxnb3JpdGhtLgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwotSEFMX1N0YXR1c1R5cGVEZWYgSE1BQ19TdGFydChIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoLCB1aW50OF90ICpwSW5CdWZmZXIsIHVpbnQzMl90IFNpemUsIHVpbnQ4X3QqIHBPdXRCdWZmZXIsIHVpbnQzMl90IFRpbWVvdXQsIHVpbnQzMl90IEFsZ29yaXRobSkKK0hBTF9TdGF0dXNUeXBlRGVmIEhNQUNfU3RhcnQoSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCwgdWludDhfdCAqcEluQnVmZmVyLCB1aW50MzJfdCBTaXplLCB1aW50OF90ICpwT3V0QnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBUaW1lb3V0LCB1aW50MzJfdCBBbGdvcml0aG0pCiB7Ci0gICAgSEFMX0hBU0hfU3RhdGVUeXBlRGVmIFN0YXRlX3RtcCA9IGhoYXNoLT5TdGF0ZTsKKyAgSEFMX0hBU0hfU3RhdGVUeXBlRGVmIFN0YXRlX3RtcCA9IGhoYXNoLT5TdGF0ZTsKIAotICAgLyogSWYgU3RhdGUgaXMgcmVhZHkgb3Igc3VzcGVuZGVkLCBzdGFydCBvciByZXN1bWUgcG9sbGluZy1iYXNlZCBIQVNIIHByb2Nlc3NpbmcgKi8KLWlmKChTdGF0ZV90bXAgPT0gSEFMX0hBU0hfU1RBVEVfUkVBRFkpIHx8IChTdGF0ZV90bXAgPT0gSEFMX0hBU0hfU1RBVEVfU1VTUEVOREVEKSkKKyAgLyogSWYgU3RhdGUgaXMgcmVhZHkgb3Igc3VzcGVuZGVkLCBzdGFydCBvciByZXN1bWUgcG9sbGluZy1iYXNlZCBIQVNIIHByb2Nlc3NpbmcgKi8KKyAgaWYgKChTdGF0ZV90bXAgPT0gSEFMX0hBU0hfU1RBVEVfUkVBRFkpIHx8IChTdGF0ZV90bXAgPT0gSEFMX0hBU0hfU1RBVEVfU1VTUEVOREVEKSkKICAgewogICAgIC8qIENoZWNrIGlucHV0IHBhcmFtZXRlcnMgKi8KLSAgICBpZiAoKHBJbkJ1ZmZlciA9PSBOVUxMKSB8fCAoU2l6ZSA9PSAwVSkgfHwgKGhoYXNoLT5Jbml0LnBLZXkgPT0gTlVMTCkgfHwgKGhoYXNoLT5Jbml0LktleVNpemUgPT0gMFUpIHx8IChwT3V0QnVmZmVyID09IE5VTEwpKQorICAgIGlmICgocEluQnVmZmVyID09IE5VTEwpIHx8IChTaXplID09IDBVKSB8fCAoaGhhc2gtPkluaXQucEtleSA9PSBOVUxMKSB8fCAoaGhhc2gtPkluaXQuS2V5U2l6ZSA9PSAwVSkKKyAgICAgICAgfHwgKHBPdXRCdWZmZXIgPT0gTlVMTCkpCiAgICAgewogICAgICAgaGhhc2gtPlN0YXRlID0gSEFMX0hBU0hfU1RBVEVfUkVBRFk7CiAgICAgICByZXR1cm4gIEhBTF9FUlJPUjsKQEAgLTMxMzIsMjggKzMxNzEsMzQgQEAKICAgICBoaGFzaC0+U3RhdGUgPSBIQUxfSEFTSF9TVEFURV9CVVNZOwogCiAgICAgLyogQ2hlY2sgaWYgaW5pdGlhbGl6YXRpb24gcGhhc2UgaGFzIGFscmVhZHkgYmUgcGVyZm9ybWVkICovCi0gICAgaWYoaGhhc2gtPlBoYXNlID09IEhBTF9IQVNIX1BIQVNFX1JFQURZKQorICAgIGlmIChoaGFzaC0+UGhhc2UgPT0gSEFMX0hBU0hfUEhBU0VfUkVBRFkpCiAgICAgewogICAgICAgLyogQ2hlY2sgaWYga2V5IHNpemUgaXMgbGFyZ2VyIHRoYW4gNjQgYnl0ZXMsIGFjY29yZGluZ2x5IHNldCBMS0VZIGFuZCB0aGUgb3RoZXIgc2V0dGluZyBiaXRzICovCi0gICAgICBpZihoaGFzaC0+SW5pdC5LZXlTaXplID4gNjRVKQorICAgICAgaWYgKGhoYXNoLT5Jbml0LktleVNpemUgPiA2NFUpCiAgICAgICB7Ci0gICAgICAgIE1PRElGWV9SRUcoSEFTSC0+Q1IsIEhBU0hfQ1JfTEtFWXxIQVNIX0NSX0FMR098SEFTSF9DUl9NT0RFfEhBU0hfQ1JfSU5JVCwgQWxnb3JpdGhtIHwgSEFTSF9BTEdPTU9ERV9ITUFDIHwgSEFTSF9ITUFDX0tFWVRZUEVfTE9OR0tFWSB8IEhBU0hfQ1JfSU5JVCk7CisgICAgICAgIE1PRElGWV9SRUcoSEFTSC0+Q1IsIEhBU0hfQ1JfTEtFWSB8IEhBU0hfQ1JfQUxHTyB8IEhBU0hfQ1JfTU9ERSB8IEhBU0hfQ1JfSU5JVCwKKyAgICAgICAgICAgICAgICAgICBBbGdvcml0aG0gfCBIQVNIX0FMR09NT0RFX0hNQUMgfCBIQVNIX0hNQUNfS0VZVFlQRV9MT05HS0VZIHwgSEFTSF9DUl9JTklUKTsKICAgICAgIH0KICAgICAgIGVsc2UKICAgICAgIHsKLSAgICAgICAgTU9ESUZZX1JFRyhIQVNILT5DUiwgSEFTSF9DUl9MS0VZfEhBU0hfQ1JfQUxHT3xIQVNIX0NSX01PREV8SEFTSF9DUl9JTklULCBBbGdvcml0aG0gfCBIQVNIX0FMR09NT0RFX0hNQUMgfCBIQVNIX0NSX0lOSVQpOworICAgICAgICBNT0RJRllfUkVHKEhBU0gtPkNSLCBIQVNIX0NSX0xLRVkgfCBIQVNIX0NSX0FMR08gfCBIQVNIX0NSX01PREUgfCBIQVNIX0NSX0lOSVQsCisgICAgICAgICAgICAgICAgICAgQWxnb3JpdGhtIHwgSEFTSF9BTEdPTU9ERV9ITUFDIHwgSEFTSF9DUl9JTklUKTsKICAgICAgIH0KICAgICAgIC8qIFNldCB0aGUgcGhhc2UgdG8gU3RlcCAxICovCiAgICAgICBoaGFzaC0+UGhhc2UgPSBIQUxfSEFTSF9QSEFTRV9ITUFDX1NURVBfMTsKICAgICAgIC8qIFJlc29ydCB0byBoaGFzaCBpbnRlcm5hbCBmaWVsZHMgdG8gZmVlZCB0aGUgUGVyaXBoZXJhbC4KICAgICAgICAgIFBhcmFtZXRlcnMgd2lsbCBiZSB1cGRhdGVkIGluIGNhc2Ugb2Ygc3VzcGVuc2lvbiB0byBjb250YWluIHRoZSBwcm9wZXIKICAgICAgICAgIGluZm9ybWF0aW9uIGF0IHJlc3VtcHRpb24gdGltZS4gKi8KLSAgICAgIGhoYXNoLT5wSGFzaE91dEJ1ZmZQdHIgID0gcE91dEJ1ZmZlcjsgICAgICAgICAgICAvKiBPdXRwdXQgZGlnZXN0IGFkZHJlc3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgIGhoYXNoLT5wSGFzaEluQnVmZlB0ciAgID0gcEluQnVmZmVyOyAgICAgICAgICAgICAvKiBJbnB1dCBkYXRhIGFkZHJlc3MsIEhNQUNfUHJvY2Vzc2luZyBpbnB1dCBwYXJhbWV0ZXIgZm9yIFN0ZXAgMiAgICAgKi8KLSAgICAgIGhoYXNoLT5IYXNoSW5Db3VudCAgICAgID0gU2l6ZTsgICAgICAgICAgICAgICAgICAvKiBJbnB1dCBkYXRhIHNpemUsIEhNQUNfUHJvY2Vzc2luZyBpbnB1dCBwYXJhbWV0ZXIgZm9yIFN0ZXAgMiAgICAgICAgKi8KLSAgICAgIGhoYXNoLT5IYXNoQnVmZlNpemUgICAgID0gU2l6ZTsgICAgICAgICAgICAgICAgICAvKiBTdG9yZSB0aGUgaW5wdXQgYnVmZmVyIHNpemUgZm9yIHRoZSB3aG9sZSBITUFDIHByb2Nlc3MgICAgICAgICAgICAgKi8KLSAgICAgIGhoYXNoLT5wSGFzaEtleUJ1ZmZQdHIgID0gaGhhc2gtPkluaXQucEtleTsgICAgICAvKiBLZXkgYWRkcmVzcywgSE1BQ19Qcm9jZXNzaW5nIGlucHV0IHBhcmFtZXRlciBmb3IgU3RlcCAxIGFuZCBTdGVwIDMgKi8KLSAgICAgIGhoYXNoLT5IYXNoS2V5Q291bnQgICAgID0gaGhhc2gtPkluaXQuS2V5U2l6ZTsgICAvKiBLZXkgc2l6ZSwgSE1BQ19Qcm9jZXNzaW5nIGlucHV0IHBhcmFtZXRlciBmb3IgU3RlcCAxIGFuZCBTdGVwIDMgICAgKi8KKyAgICAgIGhoYXNoLT5wSGFzaE91dEJ1ZmZQdHIgID0gcE91dEJ1ZmZlcjsgICAgICAgICAgICAvKiBPdXRwdXQgZGlnZXN0IGFkZHJlc3MgICAgKi8KKyAgICAgIGhoYXNoLT5wSGFzaEluQnVmZlB0ciAgID0gcEluQnVmZmVyOyAgICAgICAgICAgICAvKiBJbnB1dCBkYXRhIGFkZHJlc3MsIEhNQUNfUHJvY2Vzc2luZyBpbnB1dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlciBmb3IgU3RlcCAyICAgICAqLworICAgICAgaGhhc2gtPkhhc2hJbkNvdW50ICAgICAgPSBTaXplOyAgICAgICAgICAgICAgICAgIC8qIElucHV0IGRhdGEgc2l6ZSwgSE1BQ19Qcm9jZXNzaW5nIGlucHV0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyIGZvciBTdGVwIDIgICAgICAgICovCisgICAgICBoaGFzaC0+SGFzaEJ1ZmZTaXplICAgICA9IFNpemU7ICAgICAgICAgICAgICAgICAgLyogU3RvcmUgdGhlIGlucHV0IGJ1ZmZlciBzaXplIGZvciB0aGUgd2hvbGUgSE1BQyBwcm9jZXNzKi8KKyAgICAgIGhoYXNoLT5wSGFzaEtleUJ1ZmZQdHIgID0gaGhhc2gtPkluaXQucEtleTsgICAgICAvKiBLZXkgYWRkcmVzcywgSE1BQ19Qcm9jZXNzaW5nIGlucHV0IHBhcmFtZXRlciBmb3IgU3RlcAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgYW5kIFN0ZXAgMyAqLworICAgICAgaGhhc2gtPkhhc2hLZXlDb3VudCAgICAgPSBoaGFzaC0+SW5pdC5LZXlTaXplOyAgIC8qIEtleSBzaXplLCBITUFDX1Byb2Nlc3NpbmcgaW5wdXQgcGFyYW1ldGVyIGZvciBTdGVwIDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgU3RlcCAzICAgICovCiAgICAgfQogCiAgICAgLyogQ2Fycnkgb3V0IEhNQUMgcHJvY2Vzc2luZyAqLwpAQCAtMzE4MSwxNSArMzIyNiwxNyBAQAogICAqIEBwYXJhbSAgQWxnb3JpdGhtIEhBU0ggYWxnb3JpdGhtLgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwotSEFMX1N0YXR1c1R5cGVEZWYgSE1BQ19TdGFydF9JVChIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoLCB1aW50OF90ICpwSW5CdWZmZXIsIHVpbnQzMl90IFNpemUsIHVpbnQ4X3QqIHBPdXRCdWZmZXIsIHVpbnQzMl90IEFsZ29yaXRobSkKK0hBTF9TdGF0dXNUeXBlRGVmIEhNQUNfU3RhcnRfSVQoSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCwgdWludDhfdCAqcEluQnVmZmVyLCB1aW50MzJfdCBTaXplLCB1aW50OF90ICpwT3V0QnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBBbGdvcml0aG0pCiB7Ci0gICAgSEFMX0hBU0hfU3RhdGVUeXBlRGVmIFN0YXRlX3RtcCA9IGhoYXNoLT5TdGF0ZTsKKyAgSEFMX0hBU0hfU3RhdGVUeXBlRGVmIFN0YXRlX3RtcCA9IGhoYXNoLT5TdGF0ZTsKIAogICAvKiBJZiBTdGF0ZSBpcyByZWFkeSBvciBzdXNwZW5kZWQsIHN0YXJ0IG9yIHJlc3VtZSBJVC1iYXNlZCBIQVNIIHByb2Nlc3NpbmcgKi8KLWlmKChTdGF0ZV90bXAgPT0gSEFMX0hBU0hfU1RBVEVfUkVBRFkpIHx8IChTdGF0ZV90bXAgPT0gSEFMX0hBU0hfU1RBVEVfU1VTUEVOREVEKSkKKyAgaWYgKChTdGF0ZV90bXAgPT0gSEFMX0hBU0hfU1RBVEVfUkVBRFkpIHx8IChTdGF0ZV90bXAgPT0gSEFMX0hBU0hfU1RBVEVfU1VTUEVOREVEKSkKICAgewogICAgIC8qIENoZWNrIGlucHV0IHBhcmFtZXRlcnMgKi8KLSAgICBpZiAoKHBJbkJ1ZmZlciA9PSBOVUxMKSB8fCAoU2l6ZSA9PSAwVSkgfHwgKGhoYXNoLT5Jbml0LnBLZXkgPT0gTlVMTCkgfHwgKGhoYXNoLT5Jbml0LktleVNpemUgPT0gMFUpIHx8IChwT3V0QnVmZmVyID09IE5VTEwpKQorICAgIGlmICgocEluQnVmZmVyID09IE5VTEwpIHx8IChTaXplID09IDBVKSB8fCAoaGhhc2gtPkluaXQucEtleSA9PSBOVUxMKSB8fCAoaGhhc2gtPkluaXQuS2V5U2l6ZSA9PSAwVSkKKyAgICAgICAgfHwgKHBPdXRCdWZmZXIgPT0gTlVMTCkpCiAgICAgewogICAgICAgaGhhc2gtPlN0YXRlID0gSEFMX0hBU0hfU1RBVEVfUkVBRFk7CiAgICAgICByZXR1cm4gIEhBTF9FUlJPUjsKQEAgLTMyMDgsMTMgKzMyNTUsMTUgQEAKICAgICBpZiAoaGhhc2gtPlBoYXNlID09IEhBTF9IQVNIX1BIQVNFX1JFQURZKQogICAgIHsKICAgICAgIC8qIENoZWNrIGlmIGtleSBzaXplIGlzIGxhcmdlciB0aGFuIDY0IGJ5dGVzLCBhY2NvcmRpbmdseSBzZXQgTEtFWSBhbmQgdGhlIG90aGVyIHNldHRpbmcgYml0cyAqLwotICAgICAgaWYoaGhhc2gtPkluaXQuS2V5U2l6ZSA+IDY0VSkKKyAgICAgIGlmIChoaGFzaC0+SW5pdC5LZXlTaXplID4gNjRVKQogICAgICAgewotICAgICAgICBNT0RJRllfUkVHKEhBU0gtPkNSLCBIQVNIX0NSX0xLRVl8SEFTSF9DUl9BTEdPfEhBU0hfQ1JfTU9ERXxIQVNIX0NSX0lOSVQsIEFsZ29yaXRobSB8IEhBU0hfQUxHT01PREVfSE1BQyB8IEhBU0hfSE1BQ19LRVlUWVBFX0xPTkdLRVkgfCBIQVNIX0NSX0lOSVQpOworICAgICAgICBNT0RJRllfUkVHKEhBU0gtPkNSLCBIQVNIX0NSX0xLRVkgfCBIQVNIX0NSX0FMR08gfCBIQVNIX0NSX01PREUgfCBIQVNIX0NSX0lOSVQsCisgICAgICAgICAgICAgICAgICAgQWxnb3JpdGhtIHwgSEFTSF9BTEdPTU9ERV9ITUFDIHwgSEFTSF9ITUFDX0tFWVRZUEVfTE9OR0tFWSB8IEhBU0hfQ1JfSU5JVCk7CiAgICAgICB9CiAgICAgICBlbHNlCiAgICAgICB7Ci0gICAgICAgIE1PRElGWV9SRUcoSEFTSC0+Q1IsIEhBU0hfQ1JfTEtFWXxIQVNIX0NSX0FMR098SEFTSF9DUl9NT0RFfEhBU0hfQ1JfSU5JVCwgQWxnb3JpdGhtIHwgSEFTSF9BTEdPTU9ERV9ITUFDIHwgSEFTSF9DUl9JTklUKTsKKyAgICAgICAgTU9ESUZZX1JFRyhIQVNILT5DUiwgSEFTSF9DUl9MS0VZIHwgSEFTSF9DUl9BTEdPIHwgSEFTSF9DUl9NT0RFIHwgSEFTSF9DUl9JTklULAorICAgICAgICAgICAgICAgICAgIEFsZ29yaXRobSB8IEhBU0hfQUxHT01PREVfSE1BQyB8IEhBU0hfQ1JfSU5JVCk7CiAgICAgICB9CiAKICAgICAgIC8qIFJlc29ydCB0byBoaGFzaCBpbnRlcm5hbCBmaWVsZHMgaGhhc2gtPnBIYXNoSW5CdWZmUHRyIGFuZCBoaGFzaC0+SGFzaEluQ291bnQKQEAgLTMyNTksNyArMzMwOCw3IEBACiAgICAgX19IQUxfVU5MT0NLKGhoYXNoKTsKIAogICAgIC8qIEVuYWJsZSBJbnRlcnJ1cHRzICovCi0gICAgX19IQUxfSEFTSF9FTkFCTEVfSVQoSEFTSF9JVF9ESU5JfEhBU0hfSVRfRENJKTsKKyAgICBfX0hBTF9IQVNIX0VOQUJMRV9JVChIQVNIX0lUX0RJTkkgfCBIQVNIX0lUX0RDSSk7CiAKICAgICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCiAgICAgcmV0dXJuIEhBTF9PSzsKQEAgLTMyOTQsMTggKzMzNDMsMTggQEAKICAgdWludDMyX3QgaW5wdXRTaXplOwogICBIQUxfU3RhdHVzVHlwZURlZiBzdGF0dXMgOwogICBIQUxfSEFTSF9TdGF0ZVR5cGVEZWYgU3RhdGVfdG1wID0gaGhhc2gtPlN0YXRlOwotICAgLyogTWFrZSBzdXJlIHRoZSBpbnB1dCBidWZmZXIgc2l6ZSAoaW4gYnl0ZXMpIGlzIGEgbXVsdGlwbGUgb2YgNCB3aGVuIGRpZ2VzdCBjYWxjdWxhdGlvbgotICAgICAgaXMgZGlzYWJsZWQgKG11bHRpLWJ1ZmZlciBITUFDIHByb2Nlc3NpbmcsIE1ETUFUIGJpdCB0byBiZSBzZXQpICovCi0gICBhc3NlcnRfcGFyYW0oSVNfSE1BQ19ETUFfTVVMVElCVUZGRVJfU0laRShoaGFzaCwgU2l6ZSkpOworICAvKiBNYWtlIHN1cmUgdGhlIGlucHV0IGJ1ZmZlciBzaXplIChpbiBieXRlcykgaXMgYSBtdWx0aXBsZSBvZiA0IHdoZW4gZGlnZXN0IGNhbGN1bGF0aW9uCisgICAgIGlzIGRpc2FibGVkIChtdWx0aS1idWZmZXIgSE1BQyBwcm9jZXNzaW5nLCBNRE1BVCBiaXQgdG8gYmUgc2V0KSAqLworICBhc3NlcnRfcGFyYW0oSVNfSE1BQ19ETUFfTVVMVElCVUZGRVJfU0laRShoaGFzaCwgU2l6ZSkpOwogICAvKiBJZiBTdGF0ZSBpcyByZWFkeSBvciBzdXNwZW5kZWQsIHN0YXJ0IG9yIHJlc3VtZSBETUEtYmFzZWQgSEFTSCBwcm9jZXNzaW5nICovCi1pZigoU3RhdGVfdG1wID09IEhBTF9IQVNIX1NUQVRFX1JFQURZKSB8fCAoU3RhdGVfdG1wID09IEhBTF9IQVNIX1NUQVRFX1NVU1BFTkRFRCkpCisgIGlmICgoU3RhdGVfdG1wID09IEhBTF9IQVNIX1NUQVRFX1JFQURZKSB8fCAoU3RhdGVfdG1wID09IEhBTF9IQVNIX1NUQVRFX1NVU1BFTkRFRCkpCiAgIHsKICAgICAvKiBDaGVjayBpbnB1dCBwYXJhbWV0ZXJzICovCi0gICAgaWYgKChwSW5CdWZmZXIgPT0gTlVMTCApIHx8IChTaXplID09IDBVKSB8fCAoaGhhc2gtPkluaXQucEtleSA9PSBOVUxMICkgfHwgKGhoYXNoLT5Jbml0LktleVNpemUgPT0gMFUpIHx8Ci0gICAvKiBDaGVjayBwaGFzZSBjb2hlcmVuY3kuIFBoYXNlIG11c3QgYmUKLSAgICAgICBlaXRoZXIgUkVBRFkgKGZyZXNoIHN0YXJ0KQotICAgICAgIG9yIG9uZSBvZiBITUFDIFBST0NFU1Mgc3RlcHMgKG11bHRpLWJ1ZmZlciBIQVNIIG1hbmFnZW1lbnQpICovCi0gICAgICAgKChoaGFzaC0+UGhhc2UgIT0gSEFMX0hBU0hfUEhBU0VfUkVBRFkpICYmICghKElTX0hNQUNfUFJPQ0VTU0lORyhoaGFzaCkpKSkpCisgICAgaWYgKChwSW5CdWZmZXIgPT0gTlVMTCkgfHwgKFNpemUgPT0gMFUpIHx8IChoaGFzaC0+SW5pdC5wS2V5ID09IE5VTEwpIHx8IChoaGFzaC0+SW5pdC5LZXlTaXplID09IDBVKSB8fAorICAgICAgICAvKiBDaGVjayBwaGFzZSBjb2hlcmVuY3kuIFBoYXNlIG11c3QgYmUKKyAgICAgICAgICAgIGVpdGhlciBSRUFEWSAoZnJlc2ggc3RhcnQpCisgICAgICAgICAgICBvciBvbmUgb2YgSE1BQyBQUk9DRVNTIHN0ZXBzIChtdWx0aS1idWZmZXIgSEFTSCBtYW5hZ2VtZW50KSAqLworICAgICAgICAoKGhoYXNoLT5QaGFzZSAhPSBIQUxfSEFTSF9QSEFTRV9SRUFEWSkgJiYgKCEoSVNfSE1BQ19QUk9DRVNTSU5HKGhoYXNoKSkpKSkKICAgICB7CiAgICAgICBoaGFzaC0+U3RhdGUgPSBIQUxfSEFTSF9TVEFURV9SRUFEWTsKICAgICAgIHJldHVybiAgSEFMX0VSUk9SOwpAQCAtMzMxOCw3NyArMzM2Nyw4MSBAQAogICAgIC8qIElmIG5vdCBhIGNhc2Ugb2YgcmVzdW1wdGlvbiBhZnRlciBzdXNwZW5zaW9uICovCiAgICAgaWYgKGhoYXNoLT5TdGF0ZSA9PSBIQUxfSEFTSF9TVEFURV9SRUFEWSkKICAgICB7Ci0gICAgLyogQ2hlY2sgd2hldGhlciBvciBub3QgaW5pdGlhbGl6YXRpb24gcGhhc2UgaGFzIGFscmVhZHkgYmUgcGVyZm9ybWVkICovCi0gICAgaWYoaGhhc2gtPlBoYXNlID09IEhBTF9IQVNIX1BIQVNFX1JFQURZKQotICAgIHsKLSAgICAgIC8qIENoYW5nZSB0aGUgSEFTSCBzdGF0ZSAqLwotICAgICAgaGhhc2gtPlN0YXRlID0gSEFMX0hBU0hfU1RBVEVfQlVTWTsKLSAgI2lmIGRlZmluZWQoSEFTSF9DUl9NRE1BVCkKLSAgICAgIC8qIENoZWNrIGlmIGtleSBzaXplIGlzIGxhcmdlciB0aGFuIDY0IGJ5dGVzLCBhY2NvcmRpbmdseSBzZXQgTEtFWSBhbmQgdGhlIG90aGVyIHNldHRpbmcgYml0cy4KLSAgICAgICAgIEF0IHRoZSBzYW1lIHRpbWUsIGVuc3VyZSBNRE1BVCBiaXQgaXMgY2xlYXJlZC4gKi8KLSAgICAgIGlmKGhoYXNoLT5Jbml0LktleVNpemUgPiA2NFUpCisgICAgICAvKiBDaGVjayB3aGV0aGVyIG9yIG5vdCBpbml0aWFsaXphdGlvbiBwaGFzZSBoYXMgYWxyZWFkeSBiZSBwZXJmb3JtZWQgKi8KKyAgICAgIGlmIChoaGFzaC0+UGhhc2UgPT0gSEFMX0hBU0hfUEhBU0VfUkVBRFkpCiAgICAgICB7Ci0gICAgICAgIE1PRElGWV9SRUcoSEFTSC0+Q1IsIEhBU0hfQ1JfTURNQVR8SEFTSF9DUl9MS0VZfEhBU0hfQ1JfQUxHT3xIQVNIX0NSX01PREV8SEFTSF9DUl9JTklULCBBbGdvcml0aG0gfCBIQVNIX0FMR09NT0RFX0hNQUMgfCBIQVNIX0hNQUNfS0VZVFlQRV9MT05HS0VZIHwgSEFTSF9DUl9JTklUKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgTU9ESUZZX1JFRyhIQVNILT5DUiwgSEFTSF9DUl9NRE1BVHxIQVNIX0NSX0xLRVl8SEFTSF9DUl9BTEdPfEhBU0hfQ1JfTU9ERXxIQVNIX0NSX0lOSVQsIEFsZ29yaXRobSB8IEhBU0hfQUxHT01PREVfSE1BQyB8IEhBU0hfQ1JfSU5JVCk7Ci0gICAgICB9Ci0gICNlbHNlCi0gICAgICAvKiBDaGVjayBpZiBrZXkgc2l6ZSBpcyBsYXJnZXIgdGhhbiA2NCBieXRlcywgYWNjb3JkaW5nbHkgc2V0IExLRVkgYW5kIHRoZSBvdGhlciBzZXR0aW5nIGJpdHMgKi8KLSAgICAgIGlmKGhoYXNoLT5Jbml0LktleVNpemUgPiA2NFUpCi0gICAgICB7Ci0gICAgICAgIE1PRElGWV9SRUcoSEFTSC0+Q1IsIEhBU0hfQ1JfTEtFWXxIQVNIX0NSX0FMR098SEFTSF9DUl9NT0RFfEhBU0hfQ1JfSU5JVCwgQWxnb3JpdGhtIHwgSEFTSF9BTEdPTU9ERV9ITUFDIHwgSEFTSF9ITUFDX0tFWVRZUEVfTE9OR0tFWSB8IEhBU0hfQ1JfSU5JVCk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIE1PRElGWV9SRUcoSEFTSC0+Q1IsIEhBU0hfQ1JfTEtFWXxIQVNIX0NSX0FMR098SEFTSF9DUl9NT0RFfEhBU0hfQ1JfSU5JVCwgQWxnb3JpdGhtIHwgSEFTSF9BTEdPTU9ERV9ITUFDIHwgSEFTSF9DUl9JTklUKTsKLSAgICAgIH0KLSAgICNlbmRpZgotICAgICAgLyogU3RvcmUgaW5wdXQgYXBhcmFtZXRlcnMgaW4gaGFuZGxlIGZpZWxkcyB0byBtYW5hZ2Ugc3RlcHMgdHJhbnNpdGlvbgotICAgICAgICAgb3IgcG9zc2libGUgSE1BQyBzdXNwZW5zaW9uL3Jlc3VtcHRpb24gKi8KLSAgICAgIGhoYXNoLT5IYXNoSW5Db3VudCA9IGhoYXNoLT5Jbml0LktleVNpemU7ICAgLyogSW5pdGlhbCBzaXplIGZvciBmaXJzdCBETUEgdHJhbnNmZXIgKGtleSBzaXplKSAgICAgICovCi0gICAgICBoaGFzaC0+cEhhc2hLZXlCdWZmUHRyID0gaGhhc2gtPkluaXQucEtleTsgIC8qIEtleSBhZGRyZXNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgaGhhc2gtPnBIYXNoSW5CdWZmUHRyICA9IGhoYXNoLT5Jbml0LnBLZXkgOyAvKiBGaXJzdCBhZGRyZXNzIHBhc3NlZCB0byBETUEgKGtleSBhZGRyZXNzIGF0IFN0ZXAgMSkgKi8KLSAgICAgIGhoYXNoLT5wSGFzaE1zZ0J1ZmZQdHIgPSBwSW5CdWZmZXI7ICAgICAgICAgLyogSW5wdXQgZGF0YSBhZGRyZXNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICBoaGFzaC0+SGFzaEJ1ZmZTaXplID0gU2l6ZTsgICAgICAgICAgICAgICAgIC8qIGlucHV0IGRhdGEgc2l6ZSAoaW4gYnl0ZXMpICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAvKiBDaGFuZ2UgdGhlIEhBU0ggc3RhdGUgKi8KKyAgICAgICAgaGhhc2gtPlN0YXRlID0gSEFMX0hBU0hfU1RBVEVfQlVTWTsKKyNpZiBkZWZpbmVkKEhBU0hfQ1JfTURNQVQpCisgICAgICAgIC8qIENoZWNrIGlmIGtleSBzaXplIGlzIGxhcmdlciB0aGFuIDY0IGJ5dGVzLCBhY2NvcmRpbmdseSBzZXQgTEtFWSBhbmQgdGhlIG90aGVyIHNldHRpbmcgYml0cy4KKyAgICAgICAgICAgQXQgdGhlIHNhbWUgdGltZSwgZW5zdXJlIE1ETUFUIGJpdCBpcyBjbGVhcmVkLiAqLworICAgICAgICBpZiAoaGhhc2gtPkluaXQuS2V5U2l6ZSA+IDY0VSkKKyAgICAgICAgeworICAgICAgICAgIE1PRElGWV9SRUcoSEFTSC0+Q1IsIEhBU0hfQ1JfTURNQVQgfCBIQVNIX0NSX0xLRVkgfCBIQVNIX0NSX0FMR08gfCBIQVNIX0NSX01PREUgfCBIQVNIX0NSX0lOSVQsCisgICAgICAgICAgICAgICAgICAgICBBbGdvcml0aG0gfCBIQVNIX0FMR09NT0RFX0hNQUMgfCBIQVNIX0hNQUNfS0VZVFlQRV9MT05HS0VZIHwgSEFTSF9DUl9JTklUKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBNT0RJRllfUkVHKEhBU0gtPkNSLCBIQVNIX0NSX01ETUFUIHwgSEFTSF9DUl9MS0VZIHwgSEFTSF9DUl9BTEdPIHwgSEFTSF9DUl9NT0RFIHwgSEFTSF9DUl9JTklULAorICAgICAgICAgICAgICAgICAgICAgQWxnb3JpdGhtIHwgSEFTSF9BTEdPTU9ERV9ITUFDIHwgSEFTSF9DUl9JTklUKTsKKyAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgLyogQ2hlY2sgaWYga2V5IHNpemUgaXMgbGFyZ2VyIHRoYW4gNjQgYnl0ZXMsIGFjY29yZGluZ2x5IHNldCBMS0VZIGFuZCB0aGUgb3RoZXIgc2V0dGluZyBiaXRzICovCisgICAgICAgIGlmIChoaGFzaC0+SW5pdC5LZXlTaXplID4gNjRVKQorICAgICAgICB7CisgICAgICAgICAgTU9ESUZZX1JFRyhIQVNILT5DUiwgSEFTSF9DUl9MS0VZIHwgSEFTSF9DUl9BTEdPIHwgSEFTSF9DUl9NT0RFIHwgSEFTSF9DUl9JTklULAorICAgICAgICAgICAgICAgICAgICAgQWxnb3JpdGhtIHwgSEFTSF9BTEdPTU9ERV9ITUFDIHwgSEFTSF9ITUFDX0tFWVRZUEVfTE9OR0tFWSB8IEhBU0hfQ1JfSU5JVCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgTU9ESUZZX1JFRyhIQVNILT5DUiwgSEFTSF9DUl9MS0VZIHwgSEFTSF9DUl9BTEdPIHwgSEFTSF9DUl9NT0RFIHwgSEFTSF9DUl9JTklULAorICAgICAgICAgICAgICAgICAgICAgQWxnb3JpdGhtIHwgSEFTSF9BTEdPTU9ERV9ITUFDIHwgSEFTSF9DUl9JTklUKTsKKyAgICAgICAgfQorI2VuZGlmIC8qIEhBU0hfQ1JfTURNQVQqLworICAgICAgICAvKiBTdG9yZSBpbnB1dCBhcGFyYW1ldGVycyBpbiBoYW5kbGUgZmllbGRzIHRvIG1hbmFnZSBzdGVwcyB0cmFuc2l0aW9uCisgICAgICAgICAgIG9yIHBvc3NpYmxlIEhNQUMgc3VzcGVuc2lvbi9yZXN1bXB0aW9uICovCisgICAgICAgIGhoYXNoLT5IYXNoSW5Db3VudCA9IGhoYXNoLT5Jbml0LktleVNpemU7ICAgLyogSW5pdGlhbCBzaXplIGZvciBmaXJzdCBETUEgdHJhbnNmZXIgKGtleSBzaXplKSAgICAgICovCisgICAgICAgIGhoYXNoLT5wSGFzaEtleUJ1ZmZQdHIgPSBoaGFzaC0+SW5pdC5wS2V5OyAgLyogS2V5IGFkZHJlc3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgIGhoYXNoLT5wSGFzaEluQnVmZlB0ciAgPSBoaGFzaC0+SW5pdC5wS2V5IDsgLyogRmlyc3QgYWRkcmVzcyBwYXNzZWQgdG8gRE1BIChrZXkgYWRkcmVzcyBhdCBTdGVwIDEpICovCisgICAgICAgIGhoYXNoLT5wSGFzaE1zZ0J1ZmZQdHIgPSBwSW5CdWZmZXI7ICAgICAgICAgLyogSW5wdXQgZGF0YSBhZGRyZXNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgIGhoYXNoLT5IYXNoQnVmZlNpemUgPSBTaXplOyAgICAgICAgICAgICAgICAgLyogaW5wdXQgZGF0YSBzaXplIChpbiBieXRlcykgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKLSAgICAgIC8qIFNldCBETUEgaW5wdXQgcGFyYW1ldGVycyAqLwotICAgICAgaW5wdXRhZGRyID0gKHVpbnQzMl90KShoaGFzaC0+SW5pdC5wS2V5KTsgICAvKiBBZGRyZXNzIHBhc3NlZCB0byBETUEgKHN0YXJ0IGJ5IGVudGVyaW5nIEtleSBtZXNzYWdlKSAqLwotICAgICAgaW5wdXRTaXplID0gaGhhc2gtPkluaXQuS2V5U2l6ZTsgICAgICAgICAgICAvKiBTaXplIGZvciBmaXJzdCBETUEgdHJhbnNmZXIgKGluIGJ5dGVzKSAqLworICAgICAgICAvKiBTZXQgRE1BIGlucHV0IHBhcmFtZXRlcnMgKi8KKyAgICAgICAgaW5wdXRhZGRyID0gKHVpbnQzMl90KShoaGFzaC0+SW5pdC5wS2V5KTsgICAvKiBBZGRyZXNzIHBhc3NlZCB0byBETUEgKHN0YXJ0IGJ5IGVudGVyaW5nIEtleSBtZXNzYWdlKSAqLworICAgICAgICBpbnB1dFNpemUgPSBoaGFzaC0+SW5pdC5LZXlTaXplOyAgICAgICAgICAgIC8qIFNpemUgZm9yIGZpcnN0IERNQSB0cmFuc2ZlciAoaW4gYnl0ZXMpICovCiAKLSAgICAgIC8qIENvbmZpZ3VyZSB0aGUgbnVtYmVyIG9mIHZhbGlkIGJpdHMgaW4gbGFzdCB3b3JkIG9mIHRoZSBrZXkgKi8KLSAgICAgIF9fSEFMX0hBU0hfU0VUX05CVkFMSURCSVRTKGhoYXNoLT5Jbml0LktleVNpemUpOworICAgICAgICAvKiBDb25maWd1cmUgdGhlIG51bWJlciBvZiB2YWxpZCBiaXRzIGluIGxhc3Qgd29yZCBvZiB0aGUga2V5ICovCisgICAgICAgIF9fSEFMX0hBU0hfU0VUX05CVkFMSURCSVRTKGhoYXNoLT5Jbml0LktleVNpemUpOwogCi0gICAgICAvKiBTZXQgdGhlIHBoYXNlIHRvIFN0ZXAgMSAqLwotICAgICAgaGhhc2gtPlBoYXNlID0gSEFMX0hBU0hfUEhBU0VfSE1BQ19TVEVQXzE7CisgICAgICAgIC8qIFNldCB0aGUgcGhhc2UgdG8gU3RlcCAxICovCisgICAgICAgIGhoYXNoLT5QaGFzZSA9IEhBTF9IQVNIX1BIQVNFX0hNQUNfU1RFUF8xOwogCi0gICAgfQorICAgICAgfQogICAgICAgZWxzZSBpZiAoaGhhc2gtPlBoYXNlID09IEhBTF9IQVNIX1BIQVNFX0hNQUNfU1RFUF8yKQotICAgIHsKLSAgICAgIC8qIFByb2Nlc3MgYSBuZXcgaW5wdXQgZGF0YSBtZXNzYWdlIGluIGNhc2Ugb2YgbXVsdGktYnVmZmVyIEhNQUMgcHJvY2Vzc2luZwotICAgICAgICAodGhpcyBpcyBub3QgYSByZXN1bXB0aW9uIGNhc2UpICovCisgICAgICB7CisgICAgICAgIC8qIFByb2Nlc3MgYSBuZXcgaW5wdXQgZGF0YSBtZXNzYWdlIGluIGNhc2Ugb2YgbXVsdGktYnVmZmVyIEhNQUMgcHJvY2Vzc2luZworICAgICAgICAgICh0aGlzIGlzIG5vdCBhIHJlc3VtcHRpb24gY2FzZSkgKi8KIAotICAgICAgLyogQ2hhbmdlIHRoZSBIQVNIIHN0YXRlICovCi0gICAgICBoaGFzaC0+U3RhdGUgPSBIQUxfSEFTSF9TVEFURV9CVVNZOworICAgICAgICAvKiBDaGFuZ2UgdGhlIEhBU0ggc3RhdGUgKi8KKyAgICAgICAgaGhhc2gtPlN0YXRlID0gSEFMX0hBU0hfU1RBVEVfQlVTWTsKIAotICAgICAgLyogU2F2ZSBpbnB1dCBwYXJhbWV0ZXJzIHRvIGJlIGFibGUgdG8gbWFuYWdlIHBvc3NpYmxlIHN1c3BlbnNpb24vcmVzdW1wdGlvbiAqLworICAgICAgICAvKiBTYXZlIGlucHV0IHBhcmFtZXRlcnMgdG8gYmUgYWJsZSB0byBtYW5hZ2UgcG9zc2libGUgc3VzcGVuc2lvbi9yZXN1bXB0aW9uICovCiAgICAgICAgIGhoYXNoLT5IYXNoSW5Db3VudCA9IFNpemU7ICAgICAgICAgICAgICAgIC8qIElucHV0IG1lc3NhZ2UgYWRkcmVzcyAgICAgICAqLwogICAgICAgICBoaGFzaC0+cEhhc2hJbkJ1ZmZQdHIgPSBwSW5CdWZmZXI7ICAgICAgICAvKiBJbnB1dCBtZXNzYWdlIHNpemUgaW4gYnl0ZXMgKi8KIAotICAgICAgLyogU2V0IERNQSBpbnB1dCBwYXJhbWV0ZXJzICovCisgICAgICAgIC8qIFNldCBETUEgaW5wdXQgcGFyYW1ldGVycyAqLwogICAgICAgICBpbnB1dGFkZHIgPSAodWludDMyX3QpcEluQnVmZmVyOyAgICAgICAgICAgLyogSW5wdXQgbWVzc2FnZSBhZGRyZXNzICAgICAgICovCiAgICAgICAgIGlucHV0U2l6ZSA9IFNpemU7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJbnB1dCBtZXNzYWdlIHNpemUgaW4gYnl0ZXMgKi8KIAotICAgICAgaWYgKGhoYXNoLT5EaWdlc3RDYWxjdWxhdGlvbkRpc2FibGUgPT0gUkVTRVQpCi0gICAgICB7Ci0gICAgICAgIC8qIFRoaXMgbWVhbnMgdGhpcyBpcyB0aGUgbGFzdCBidWZmZXIgb2YgdGhlIG11bHRpLWJ1ZmZlciBzZXF1ZW5jZTogRENBTCBuZWVkcyB0byBiZSBzZXQuICovCisgICAgICAgIGlmIChoaGFzaC0+RGlnZXN0Q2FsY3VsYXRpb25EaXNhYmxlID09IFJFU0VUKQorICAgICAgICB7CisgICAgICAgICAgLyogVGhpcyBtZWFucyB0aGlzIGlzIHRoZSBsYXN0IGJ1ZmZlciBvZiB0aGUgbXVsdGktYnVmZmVyIHNlcXVlbmNlOiBEQ0FMIG5lZWRzIHRvIGJlIHNldC4gKi8KICNpZiBkZWZpbmVkKEhBU0hfQ1JfTURNQVQpCi0gICAgICAgIF9fSEFMX0hBU0hfUkVTRVRfTURNQVQoKTsKLSNlbmRpZgotICAgICAgICBfX0hBTF9IQVNIX1NFVF9OQlZBTElEQklUUyhpbnB1dFNpemUpOworICAgICAgICAgIF9fSEFMX0hBU0hfUkVTRVRfTURNQVQoKTsKKyNlbmRpZiAgLyogSEFTSF9DUl9NRE1BVCovCisgICAgICAgICAgX19IQUxfSEFTSF9TRVRfTkJWQUxJREJJVFMoaW5wdXRTaXplKTsKKyAgICAgICAgfQogICAgICAgfQotICAgIH0KICAgICAgIGVsc2UKICAgICAgIHsKICAgICAgICAgLyogUGhhc2Ugbm90IGFsaWduZWQgd2l0aCBoYW5kbGUgUkVBRFkgc3RhdGUgKi8KQEAgLTMzOTksNyArMzQ1Miw3IEBACiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICAgLyogUmVzdW1wdGlvbiBjYXNlIChwaGFzZSBtYXkgYmUgU3RlcCAxLCAyIG9yIDMpICovCisgICAgICAvKiBSZXN1bXB0aW9uIGNhc2UgKHBoYXNlIG1heSBiZSBTdGVwIDEsIDIgb3IgMykgKi8KIAogICAgICAgLyogQ2hhbmdlIHRoZSBIQVNIIHN0YXRlICovCiAgICAgICBoaGFzaC0+U3RhdGUgPSBIQUxfSEFTSF9TVEFURV9CVVNZOwpAQCAtMzQxMyw3ICszNDY2LDcgQEAKICAgICB9CiAKIAotICAgIC8qIFNldCB0aGUgSEFTSCBETUEgdHJhbnNmZXJ0IGNvbXBsZXRlIGNhbGxiYWNrICovCisgICAgLyogU2V0IHRoZSBIQVNIIERNQSB0cmFuc2ZlciBjb21wbGV0ZSBjYWxsYmFjayAqLwogICAgIGhoYXNoLT5oZG1haW4tPlhmZXJDcGx0Q2FsbGJhY2sgPSBIQVNIX0RNQVhmZXJDcGx0OwogICAgIC8qIFNldCB0aGUgRE1BIGVycm9yIGNhbGxiYWNrICovCiAgICAgaGhhc2gtPmhkbWFpbi0+WGZlckVycm9yQ2FsbGJhY2sgPSBIQVNIX0RNQUVycm9yOwpAQCAtMzQyMSw4ICszNDc0LDEwIEBACiAgICAgLyogU3RvcmUgbnVtYmVyIG9mIHdvcmRzIGFscmVhZHkgcHVzaGVkIHRvIG1hbmFnZSBwcm9wZXIgRE1BIHByb2Nlc3Npbmcgc3VzcGVuc2lvbiAqLwogICAgIGhoYXNoLT5OYldvcmRzQWxyZWFkeVB1c2hlZCA9IEhBU0hfTkJXX1BVU0hFRCgpOwogCi0gICAgLyogRW5hYmxlIHRoZSBETUEgSW4gRE1BIFN0cmVhbSAqLwotICAgIHN0YXR1cyA9IEhBTF9ETUFfU3RhcnRfSVQoaGhhc2gtPmhkbWFpbiwgaW5wdXRhZGRyLCAodWludDMyX3QpJkhBU0gtPkRJTiwgKCgoaW5wdXRTaXplICU0VSkhPTBVKSA/ICgoaW5wdXRTaXplKyg0VS0oaW5wdXRTaXplICU0VSkpKS80VSk6KGlucHV0U2l6ZS80VSkpKTsKKyAgICAvKiBFbmFibGUgdGhlIERNQSBJbiBETUEgc3RyZWFtICovCisgICAgc3RhdHVzID0gSEFMX0RNQV9TdGFydF9JVChoaGFzaC0+aGRtYWluLCBpbnB1dGFkZHIsICh1aW50MzJfdCkmSEFTSC0+RElOLCAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoaW5wdXRTaXplICUgNFUpICE9IDBVKSA/ICgoaW5wdXRTaXplICsgKDRVIC0gKGlucHV0U2l6ZSAlIDRVKSkpIC8gNFUpIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKGlucHV0U2l6ZSAvIDRVKSkpOwogICAgIC8qIEVuYWJsZSBETUEgcmVxdWVzdHMgKi8KICAgICBTRVRfQklUKEhBU0gtPkNSLCBIQVNIX0NSX0RNQUUpOwogCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmNHh4X2hhbF9oYXNoX2V4LmMgYi9TcmMvc3RtMzJmNHh4X2hhbF9oYXNoX2V4LmMKaW5kZXggNjQwMDc5Zi4uZTczM2Y1YSAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZjR4eF9oYWxfaGFzaF9leC5jCisrKyBiL1NyYy9zdG0zMmY0eHhfaGFsX2hhc2hfZXguYwpAQCAtNSw3ICs1LDcgQEAKICAgKiBAYnJpZWYgICBFeHRlbmRlZCBIQVNIIEhBTCBtb2R1bGUgZHJpdmVyLgogICAqICAgICAgICAgIFRoaXMgZmlsZSBwcm92aWRlcyBmaXJtd2FyZSBmdW5jdGlvbnMgdG8gbWFuYWdlIHRoZSBmb2xsb3dpbmcKICAgKiAgICAgICAgICBmdW5jdGlvbmFsaXRpZXMgb2YgdGhlIEhBU0ggcGVyaXBoZXJhbCBmb3IgU0hBLTIyNCBhbmQgU0hBLTI1NgotICAqICAgICAgICAgIGFsb2dyaXRobXM6CisgICogICAgICAgICAgYWxnb3JpdGhtczoKICAgKiAgICAgICAgICAgKyBIQVNIIG9yIEhNQUMgcHJvY2Vzc2luZyBpbiBwb2xsaW5nIG1vZGUKICAgKiAgICAgICAgICAgKyBIQVNIIG9yIEhNQUMgcHJvY2Vzc2luZyBpbiBpbnRlcnJ1cHQgbW9kZQogICAqICAgICAgICAgICArIEhBU0ggb3IgSE1BQyBwcm9jZXNzaW5nIGluIERNQSBtb2RlCkBAIC0zOSwxNyArMzksMTggQEAKICAgICAgICAgICAgICBVc2VyIG11c3QgcmVzb3J0IHRvIEhBTF9IQVNIRXhfeHh4X0FjY3VtdWxhdGVfRW5kKCkgdG8gZW50ZXIgdGhlIGxhc3Qgb25lIGFuZCByZXRyaWV2ZSBhcwogICAgICAgICAgICAgIHdlbGwgdGhlIGNvbXB1dGVkIGRpZ2VzdC4KIAotICAgICAgICAoIyMpIEluIGludGVycnVwdCBtb2RlLCBBUEkgSEFMX0hBU0hFeF94eHhfQWNjdW11bGF0ZV9JVCgpIG11c3QgYmUgY2FsbGVkIGZvciBlYWNoIGlucHV0IGJ1ZmZlciwgCisgICAgICAgICgjIykgSW4gaW50ZXJydXB0IG1vZGUsIEFQSSBIQUxfSEFTSEV4X3h4eF9BY2N1bXVsYXRlX0lUKCkgbXVzdCBiZSBjYWxsZWQgZm9yIGVhY2ggaW5wdXQgYnVmZmVyLAogICAgICAgICAgICAgIGV4Y2VwdCBmb3IgdGhlIGxhc3Qgb25lLgogICAgICAgICAgICAgIFVzZXIgbXVzdCByZXNvcnQgdG8gSEFMX0hBU0hFeF94eHhfQWNjdW11bGF0ZV9FbmRfSVQoKSB0byBlbnRlciB0aGUgbGFzdCBvbmUgYW5kIHJldHJpZXZlIGFzCiAgICAgICAgICAgICAgd2VsbCB0aGUgY29tcHV0ZWQgZGlnZXN0LgogCiAgICAgICAgICgjIykgSW4gRE1BIG1vZGUsIG11bHRpLWJ1ZmZlciBIQVNIIGFuZCBITUFDIHByb2Nlc3NpbmcgYXJlIHBvc3NpYmxlLgogCi0gICAgICAgICAgICAgICgrKyspIEhBU0ggcHJvY2Vzc2luZzogb25jZSBpbml0aWFsaXphdGlvbiBpcyBkb25lLCBNRE1BVCBiaXQgbXVzdCBiZSBzZXQgdGhydSBfX0hBTF9IQVNIX1NFVF9NRE1BVCgpIG1hY3JvLgotICAgICAgICAgICAgIEZyb20gdGhhdCBwb2ludCwgZWFjaCBidWZmZXIgY2FuIGJlIGZlZCB0byB0aGUgUGVyaXBoZXJhbCB0aHJ1IEhBTF9IQVNIRXhfeHh4X1N0YXJ0X0RNQSgpIEFQSS4KKyAgICAgICAgICAgICAgKCsrKykgSEFTSCBwcm9jZXNzaW5nOiBvbmNlIGluaXRpYWxpemF0aW9uIGlzIGRvbmUsIE1ETUFUIGJpdCBtdXN0IGJlIHNldCB0aHJvdWdoCisgICAgICAgICAgICAgICBfX0hBTF9IQVNIX1NFVF9NRE1BVCgpIG1hY3JvLgorICAgICAgICAgICAgIEZyb20gdGhhdCBwb2ludCwgZWFjaCBidWZmZXIgY2FuIGJlIGZlZCB0byB0aGUgUGVyaXBoZXJhbCB0aHJvdWdoIEhBTF9IQVNIRXhfeHh4X1N0YXJ0X0RNQSgpIEFQSS4KICAgICAgICAgICAgICBCZWZvcmUgZW50ZXJpbmcgdGhlIGxhc3QgYnVmZmVyLCByZXNldCB0aGUgTURNQVQgYml0IHdpdGggX19IQUxfSEFTSF9SRVNFVF9NRE1BVCgpCi0gICAgICAgICAgICAgbWFjcm8gdGhlbiB3cmFwLXVwIHRoZSBIQVNIIHByb2Nlc3NpbmcgaW4gZmVlZGluZyB0aGUgbGFzdCBpbnB1dCBidWZmZXIgdGhydSB0aGUKKyAgICAgICAgICAgICBtYWNybyB0aGVuIHdyYXAtdXAgdGhlIEhBU0ggcHJvY2Vzc2luZyBpbiBmZWVkaW5nIHRoZSBsYXN0IGlucHV0IGJ1ZmZlciB0aHJvdWdoIHRoZQogICAgICAgICAgICAgIHNhbWUgQVBJIEhBTF9IQVNIRXhfeHh4X1N0YXJ0X0RNQSgpLiBUaGUgZGlnZXN0IGNhbiB0aGVuIGJlIHJldHJpZXZlZCB3aXRoIGEgY2FsbCB0bwogICAgICAgICAgICAgIEFQSSBIQUxfSEFTSEV4X3h4eF9GaW5pc2goKS4KIApAQCAtMTA3LDggKzEwOCw4IEBACiAgICovCiAKIC8qKiBAZGVmZ3JvdXAgSEFTSEV4X0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDEgSEFTSCBleHRlbmRlZCBwcm9jZXNzaW5nIGZ1bmN0aW9ucyBpbiBwb2xsaW5nIG1vZGUKLSAqICBAYnJpZWYgICBIQVNIIGV4dGVuZGVkIHByb2Nlc3NpbmcgZnVuY3Rpb25zIHVzaW5nIHBvbGxpbmcgbW9kZS4KLSAqCisgICogIEBicmllZiAgIEhBU0ggZXh0ZW5kZWQgcHJvY2Vzc2luZyBmdW5jdGlvbnMgdXNpbmcgcG9sbGluZyBtb2RlLgorICAqCiBAdmVyYmF0aW0KICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgICAgICAgICAjIyMjIyBQb2xsaW5nIG1vZGUgSEFTSCBleHRlbmRlZCBwcm9jZXNzaW5nIGZ1bmN0aW9ucyAjIyMjIwpAQCAtMTQ3LDcgKzE0OCw4IEBACiAgICogQHBhcmFtICBUaW1lb3V0IFRpbWVvdXQgdmFsdWUKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9IQVNIRXhfU0hBMjI0X1N0YXJ0KEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gsIHVpbnQ4X3QgKnBJbkJ1ZmZlciwgdWludDMyX3QgU2l6ZSwgdWludDhfdCogcE91dEJ1ZmZlciwgdWludDMyX3QgVGltZW91dCkKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9IQVNIRXhfU0hBMjI0X1N0YXJ0KEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gsIHVpbnQ4X3QgKnBJbkJ1ZmZlciwgdWludDMyX3QgU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnBPdXRCdWZmZXIsIHVpbnQzMl90IFRpbWVvdXQpCiB7CiAgIHJldHVybiBIQVNIX1N0YXJ0KGhoYXNoLCBwSW5CdWZmZXIsIFNpemUsIHBPdXRCdWZmZXIsIFRpbWVvdXQsIEhBU0hfQUxHT1NFTEVDVElPTl9TSEEyMjQpOwogfQpAQCAtMTc0LDcgKzE3Niw3IEBACiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfSEFTSEV4X1NIQTIyNF9BY2NtbHQoSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCwgdWludDhfdCAqcEluQnVmZmVyLCB1aW50MzJfdCBTaXplKQogewotICByZXR1cm4gIEhBU0hfQWNjdW11bGF0ZShoaGFzaCwgcEluQnVmZmVyLCBTaXplLEhBU0hfQUxHT1NFTEVDVElPTl9TSEEyMjQpOworICByZXR1cm4gIEhBU0hfQWNjdW11bGF0ZShoaGFzaCwgcEluQnVmZmVyLCBTaXplLCBIQVNIX0FMR09TRUxFQ1RJT05fU0hBMjI0KTsKIH0KIAogLyoqCkBAIC0xODcsNyArMTg5LDggQEAKICAgKiBAcGFyYW0gIFRpbWVvdXQgVGltZW91dCB2YWx1ZQogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0hBU0hFeF9TSEEyMjRfQWNjbWx0X0VuZChIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoLCB1aW50OF90ICpwSW5CdWZmZXIsIHVpbnQzMl90IFNpemUsIHVpbnQ4X3QqIHBPdXRCdWZmZXIsIHVpbnQzMl90IFRpbWVvdXQpCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfSEFTSEV4X1NIQTIyNF9BY2NtbHRfRW5kKEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gsIHVpbnQ4X3QgKnBJbkJ1ZmZlciwgdWludDMyX3QgU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqcE91dEJ1ZmZlciwgdWludDMyX3QgVGltZW91dCkKIHsKICAgcmV0dXJuIEhBU0hfU3RhcnQoaGhhc2gsIHBJbkJ1ZmZlciwgU2l6ZSwgcE91dEJ1ZmZlciwgVGltZW91dCwgSEFTSF9BTEdPU0VMRUNUSU9OX1NIQTIyNCk7CiB9CkBAIC0yMDMsNyArMjA2LDggQEAKICAgKiBAcGFyYW0gIFRpbWVvdXQgVGltZW91dCB2YWx1ZQogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0hBU0hFeF9TSEEyNTZfU3RhcnQoSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCwgdWludDhfdCAqcEluQnVmZmVyLCB1aW50MzJfdCBTaXplLCB1aW50OF90KiBwT3V0QnVmZmVyLCB1aW50MzJfdCBUaW1lb3V0KQorSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0hBU0hFeF9TSEEyNTZfU3RhcnQoSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCwgdWludDhfdCAqcEluQnVmZmVyLCB1aW50MzJfdCBTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqcE91dEJ1ZmZlciwgdWludDMyX3QgVGltZW91dCkKIHsKICAgcmV0dXJuIEhBU0hfU3RhcnQoaGhhc2gsIHBJbkJ1ZmZlciwgU2l6ZSwgcE91dEJ1ZmZlciwgVGltZW91dCwgSEFTSF9BTEdPU0VMRUNUSU9OX1NIQTI1Nik7CiB9CkBAIC0yMzAsNyArMjM0LDcgQEAKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9IQVNIRXhfU0hBMjU2X0FjY21sdChIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoLCB1aW50OF90ICpwSW5CdWZmZXIsIHVpbnQzMl90IFNpemUpCiB7Ci0gIHJldHVybiAgSEFTSF9BY2N1bXVsYXRlKGhoYXNoLCBwSW5CdWZmZXIsIFNpemUsSEFTSF9BTEdPU0VMRUNUSU9OX1NIQTI1Nik7CisgIHJldHVybiAgSEFTSF9BY2N1bXVsYXRlKGhoYXNoLCBwSW5CdWZmZXIsIFNpemUsIEhBU0hfQUxHT1NFTEVDVElPTl9TSEEyNTYpOwogfQogCiAvKioKQEAgLTI0Myw3ICsyNDcsOCBAQAogICAqIEBwYXJhbSAgVGltZW91dCBUaW1lb3V0IHZhbHVlCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfSEFTSEV4X1NIQTI1Nl9BY2NtbHRfRW5kKEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gsIHVpbnQ4X3QgKnBJbkJ1ZmZlciwgdWludDMyX3QgU2l6ZSwgdWludDhfdCogcE91dEJ1ZmZlciwgdWludDMyX3QgVGltZW91dCkKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9IQVNIRXhfU0hBMjU2X0FjY21sdF9FbmQoSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCwgdWludDhfdCAqcEluQnVmZmVyLCB1aW50MzJfdCBTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpwT3V0QnVmZmVyLCB1aW50MzJfdCBUaW1lb3V0KQogewogICByZXR1cm4gSEFTSF9TdGFydChoaGFzaCwgcEluQnVmZmVyLCBTaXplLCBwT3V0QnVmZmVyLCBUaW1lb3V0LCBIQVNIX0FMR09TRUxFQ1RJT05fU0hBMjU2KTsKIH0KQEAgLTI1Myw4ICsyNTgsOCBAQAogICAqLwogCiAvKiogQGRlZmdyb3VwIEhBU0hFeF9FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXAyIEhBU0ggZXh0ZW5kZWQgcHJvY2Vzc2luZyBmdW5jdGlvbnMgaW4gaW50ZXJydXB0IG1vZGUKLSAqICBAYnJpZWYgICBIQVNIIGV4dGVuZGVkIHByb2Nlc3NpbmcgZnVuY3Rpb25zIHVzaW5nIGludGVycnVwdCBtb2RlLgotICoKKyAgKiAgQGJyaWVmICAgSEFTSCBleHRlbmRlZCBwcm9jZXNzaW5nIGZ1bmN0aW9ucyB1c2luZyBpbnRlcnJ1cHQgbW9kZS4KKyAgKgogQHZlcmJhdGltCiAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAgICAgICMjIyMjIEludGVycnVwdGlvbiBtb2RlIEhBU0ggZXh0ZW5kZWQgcHJvY2Vzc2luZyBmdW5jdGlvbnMgIyMjIyMKQEAgLTI4NSw5ICsyOTAsMTAgQEAKICAgKiBAcGFyYW0gIHBPdXRCdWZmZXIgcG9pbnRlciB0byB0aGUgY29tcHV0ZWQgZGlnZXN0LiBEaWdlc3Qgc2l6ZSBpcyAyOCBieXRlcy4KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9IQVNIRXhfU0hBMjI0X1N0YXJ0X0lUKEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gsIHVpbnQ4X3QgKnBJbkJ1ZmZlciwgdWludDMyX3QgU2l6ZSwgdWludDhfdCogcE91dEJ1ZmZlcikKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9IQVNIRXhfU0hBMjI0X1N0YXJ0X0lUKEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gsIHVpbnQ4X3QgKnBJbkJ1ZmZlciwgdWludDMyX3QgU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnBPdXRCdWZmZXIpCiB7Ci0gIHJldHVybiBIQVNIX1N0YXJ0X0lUKGhoYXNoLCBwSW5CdWZmZXIsIFNpemUsIHBPdXRCdWZmZXIsSEFTSF9BTEdPU0VMRUNUSU9OX1NIQTIyNCk7CisgIHJldHVybiBIQVNIX1N0YXJ0X0lUKGhoYXNoLCBwSW5CdWZmZXIsIFNpemUsIHBPdXRCdWZmZXIsIEhBU0hfQUxHT1NFTEVDVElPTl9TSEEyMjQpOwogfQogCiAvKioKQEAgLTMxMCw3ICszMTYsNyBAQAogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0hBU0hFeF9TSEEyMjRfQWNjbWx0X0lUKEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gsIHVpbnQ4X3QgKnBJbkJ1ZmZlciwgdWludDMyX3QgU2l6ZSkKIHsKLSAgcmV0dXJuICBIQVNIX0FjY3VtdWxhdGVfSVQoaGhhc2gsIHBJbkJ1ZmZlciwgU2l6ZSxIQVNIX0FMR09TRUxFQ1RJT05fU0hBMjI0KTsKKyAgcmV0dXJuICBIQVNIX0FjY3VtdWxhdGVfSVQoaGhhc2gsIHBJbkJ1ZmZlciwgU2l6ZSwgSEFTSF9BTEdPU0VMRUNUSU9OX1NIQTIyNCk7CiB9CiAKIC8qKgpAQCAtMzIyLDkgKzMyOCwxMCBAQAogICAqIEBwYXJhbSAgcE91dEJ1ZmZlciBwb2ludGVyIHRvIHRoZSBjb21wdXRlZCBkaWdlc3QuIERpZ2VzdCBzaXplIGlzIDI4IGJ5dGVzLgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0hBU0hFeF9TSEEyMjRfQWNjbWx0X0VuZF9JVChIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoLCB1aW50OF90ICpwSW5CdWZmZXIsIHVpbnQzMl90IFNpemUsIHVpbnQ4X3QqIHBPdXRCdWZmZXIpCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfSEFTSEV4X1NIQTIyNF9BY2NtbHRfRW5kX0lUKEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gsIHVpbnQ4X3QgKnBJbkJ1ZmZlciwgdWludDMyX3QgU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqcE91dEJ1ZmZlcikKIHsKLSAgcmV0dXJuIEhBU0hfU3RhcnRfSVQoaGhhc2gsIHBJbkJ1ZmZlciwgU2l6ZSwgcE91dEJ1ZmZlcixIQVNIX0FMR09TRUxFQ1RJT05fU0hBMjI0KTsKKyAgcmV0dXJuIEhBU0hfU3RhcnRfSVQoaGhhc2gsIHBJbkJ1ZmZlciwgU2l6ZSwgcE91dEJ1ZmZlciwgSEFTSF9BTEdPU0VMRUNUSU9OX1NIQTIyNCk7CiB9CiAKIC8qKgpAQCAtMzM3LDkgKzM0NCwxMCBAQAogICAqIEBwYXJhbSAgcE91dEJ1ZmZlciBwb2ludGVyIHRvIHRoZSBjb21wdXRlZCBkaWdlc3QuIERpZ2VzdCBzaXplIGlzIDMyIGJ5dGVzLgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0hBU0hFeF9TSEEyNTZfU3RhcnRfSVQoSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCwgdWludDhfdCAqcEluQnVmZmVyLCB1aW50MzJfdCBTaXplLCB1aW50OF90KiBwT3V0QnVmZmVyKQorSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0hBU0hFeF9TSEEyNTZfU3RhcnRfSVQoSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCwgdWludDhfdCAqcEluQnVmZmVyLCB1aW50MzJfdCBTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqcE91dEJ1ZmZlcikKIHsKLSAgcmV0dXJuIEhBU0hfU3RhcnRfSVQoaGhhc2gsIHBJbkJ1ZmZlciwgU2l6ZSwgcE91dEJ1ZmZlcixIQVNIX0FMR09TRUxFQ1RJT05fU0hBMjU2KTsKKyAgcmV0dXJuIEhBU0hfU3RhcnRfSVQoaGhhc2gsIHBJbkJ1ZmZlciwgU2l6ZSwgcE91dEJ1ZmZlciwgSEFTSF9BTEdPU0VMRUNUSU9OX1NIQTI1Nik7CiB9CiAKIC8qKgpAQCAtMzYyLDcgKzM3MCw3IEBACiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfSEFTSEV4X1NIQTI1Nl9BY2NtbHRfSVQoSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCwgdWludDhfdCAqcEluQnVmZmVyLCB1aW50MzJfdCBTaXplKQogewotICByZXR1cm4gIEhBU0hfQWNjdW11bGF0ZV9JVChoaGFzaCwgcEluQnVmZmVyLCBTaXplLEhBU0hfQUxHT1NFTEVDVElPTl9TSEEyNTYpOworICByZXR1cm4gIEhBU0hfQWNjdW11bGF0ZV9JVChoaGFzaCwgcEluQnVmZmVyLCBTaXplLCBIQVNIX0FMR09TRUxFQ1RJT05fU0hBMjU2KTsKIH0KIAogLyoqCkBAIC0zNzQsOSArMzgyLDEwIEBACiAgICogQHBhcmFtICBwT3V0QnVmZmVyIHBvaW50ZXIgdG8gdGhlIGNvbXB1dGVkIGRpZ2VzdC4gRGlnZXN0IHNpemUgaXMgMzIgYnl0ZXMuCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfSEFTSEV4X1NIQTI1Nl9BY2NtbHRfRW5kX0lUKEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gsIHVpbnQ4X3QgKnBJbkJ1ZmZlciwgdWludDMyX3QgU2l6ZSwgdWludDhfdCogcE91dEJ1ZmZlcikKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9IQVNIRXhfU0hBMjU2X0FjY21sdF9FbmRfSVQoSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCwgdWludDhfdCAqcEluQnVmZmVyLCB1aW50MzJfdCBTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpwT3V0QnVmZmVyKQogewotICByZXR1cm4gSEFTSF9TdGFydF9JVChoaGFzaCwgcEluQnVmZmVyLCBTaXplLCBwT3V0QnVmZmVyLEhBU0hfQUxHT1NFTEVDVElPTl9TSEEyNTYpOworICByZXR1cm4gSEFTSF9TdGFydF9JVChoaGFzaCwgcEluQnVmZmVyLCBTaXplLCBwT3V0QnVmZmVyLCBIQVNIX0FMR09TRUxFQ1RJT05fU0hBMjU2KTsKIH0KIAogLyoqCkBAIC0zODQsMTEgKzM5MywxMSBAQAogICAqLwogCiAvKiogQGRlZmdyb3VwIEhBU0hFeF9FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXAzIEhBU0ggZXh0ZW5kZWQgcHJvY2Vzc2luZyBmdW5jdGlvbnMgaW4gRE1BIG1vZGUKLSAqICBAYnJpZWYgICBIQVNIIGV4dGVuZGVkIHByb2Nlc3NpbmcgZnVuY3Rpb25zIHVzaW5nIERNQSBtb2RlLgotICoKKyAgKiAgQGJyaWVmICAgSEFTSCBleHRlbmRlZCBwcm9jZXNzaW5nIGZ1bmN0aW9ucyB1c2luZyBETUEgbW9kZS4KKyAgKgogQHZlcmJhdGltCiAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICAgICAgICAgICAgICMjIyMjIERNQSBtb2RlIEhBU0ggZXh0ZW5kZWQgIHByb2Nlc3NpbmcgZnVuY3Rpb25zcyAjIyMjIworICAgICAgICAgICAgICAgICMjIyMjIERNQSBtb2RlIEhBU0ggZXh0ZW5kZWQgIHByb2Nlc3NpbmcgZnVuY3Rpb25zICMjIyMjCiAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgIFsuLl0gIFRoaXMgc2VjdGlvbiBwcm92aWRlcyBmdW5jdGlvbnMgYWxsb3dpbmcgdG8gY2FsY3VsYXRlIGluIERNQSBtb2RlCiAgICAgICAgICAgdGhlIGhhc2ggdmFsdWUgdXNpbmcgb25lIG9mIHRoZSBmb2xsb3dpbmcgYWxnb3JpdGhtczoKQEAgLTQ0MCw5ICs0NDksOSBAQAogICAqIEBwYXJhbSAgVGltZW91dCBUaW1lb3V0IHZhbHVlLgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0hBU0hFeF9TSEEyMjRfRmluaXNoKEhBU0hfSGFuZGxlVHlwZURlZiAqaGhhc2gsIHVpbnQ4X3QqIHBPdXRCdWZmZXIsIHVpbnQzMl90IFRpbWVvdXQpCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfSEFTSEV4X1NIQTIyNF9GaW5pc2goSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCwgdWludDhfdCAqcE91dEJ1ZmZlciwgdWludDMyX3QgVGltZW91dCkKIHsKLSAgIHJldHVybiBIQVNIX0ZpbmlzaChoaGFzaCwgcE91dEJ1ZmZlciwgVGltZW91dCk7CisgIHJldHVybiBIQVNIX0ZpbmlzaChoaGFzaCwgcE91dEJ1ZmZlciwgVGltZW91dCk7CiB9CiAKIC8qKgpAQCAtNDcwLDkgKzQ3OSw5IEBACiAgICogQHBhcmFtICBUaW1lb3V0IFRpbWVvdXQgdmFsdWUuCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfSEFTSEV4X1NIQTI1Nl9GaW5pc2goSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCwgdWludDhfdCogcE91dEJ1ZmZlciwgdWludDMyX3QgVGltZW91dCkKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9IQVNIRXhfU0hBMjU2X0ZpbmlzaChIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoLCB1aW50OF90ICpwT3V0QnVmZmVyLCB1aW50MzJfdCBUaW1lb3V0KQogewotICAgcmV0dXJuIEhBU0hfRmluaXNoKGhoYXNoLCBwT3V0QnVmZmVyLCBUaW1lb3V0KTsKKyAgcmV0dXJuIEhBU0hfRmluaXNoKGhoYXNoLCBwT3V0QnVmZmVyLCBUaW1lb3V0KTsKIH0KIAogLyoqCkBAIC00ODAsOCArNDg5LDggQEAKICAgKi8KIAogLyoqIEBkZWZncm91cCBIQVNIRXhfRXhwb3J0ZWRfRnVuY3Rpb25zX0dyb3VwNCBITUFDIGV4dGVuZGVkIHByb2Nlc3NpbmcgZnVuY3Rpb25zIGluIHBvbGxpbmcgbW9kZQotICogIEBicmllZiAgIEhNQUMgZXh0ZW5kZWQgcHJvY2Vzc2luZyBmdW5jdGlvbnMgdXNpbmcgcG9sbGluZyBtb2RlLgotICoKKyAgKiAgQGJyaWVmICAgSE1BQyBleHRlbmRlZCBwcm9jZXNzaW5nIGZ1bmN0aW9ucyB1c2luZyBwb2xsaW5nIG1vZGUuCisgICoKIEB2ZXJiYXRpbQogID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgICAgICAgICAjIyMjIyBQb2xsaW5nIG1vZGUgSE1BQyBleHRlbmRlZCBwcm9jZXNzaW5nIGZ1bmN0aW9ucyAjIyMjIwpAQCAtNTEyLDcgKzUyMSw4IEBACiAgICogQHBhcmFtICBUaW1lb3V0IFRpbWVvdXQgdmFsdWUuCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfSE1BQ0V4X1NIQTIyNF9TdGFydChIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoLCB1aW50OF90ICpwSW5CdWZmZXIsIHVpbnQzMl90IFNpemUsIHVpbnQ4X3QqIHBPdXRCdWZmZXIsIHVpbnQzMl90IFRpbWVvdXQpCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfSE1BQ0V4X1NIQTIyNF9TdGFydChIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoLCB1aW50OF90ICpwSW5CdWZmZXIsIHVpbnQzMl90IFNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpwT3V0QnVmZmVyLCB1aW50MzJfdCBUaW1lb3V0KQogewogICByZXR1cm4gSE1BQ19TdGFydChoaGFzaCwgcEluQnVmZmVyLCBTaXplLCBwT3V0QnVmZmVyLCBUaW1lb3V0LCBIQVNIX0FMR09TRUxFQ1RJT05fU0hBMjI0KTsKIH0KQEAgLTUzMCw3ICs1NDAsOCBAQAogICAqIEBwYXJhbSAgVGltZW91dCBUaW1lb3V0IHZhbHVlLgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0hNQUNFeF9TSEEyNTZfU3RhcnQoSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCwgdWludDhfdCAqcEluQnVmZmVyLCB1aW50MzJfdCBTaXplLCB1aW50OF90KiBwT3V0QnVmZmVyLCB1aW50MzJfdCBUaW1lb3V0KQorSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0hNQUNFeF9TSEEyNTZfU3RhcnQoSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCwgdWludDhfdCAqcEluQnVmZmVyLCB1aW50MzJfdCBTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqcE91dEJ1ZmZlciwgdWludDMyX3QgVGltZW91dCkKIHsKICAgcmV0dXJuIEhNQUNfU3RhcnQoaGhhc2gsIHBJbkJ1ZmZlciwgU2l6ZSwgcE91dEJ1ZmZlciwgVGltZW91dCwgSEFTSF9BTEdPU0VMRUNUSU9OX1NIQTI1Nik7CiB9CkBAIC01NDEsOCArNTUyLDggQEAKIAogCiAvKiogQGRlZmdyb3VwIEhBU0hFeF9FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXA1IEhNQUMgZXh0ZW5kZWQgcHJvY2Vzc2luZyBmdW5jdGlvbnMgaW4gaW50ZXJydXB0IG1vZGUKLSAqICBAYnJpZWYgICBITUFDIGV4dGVuZGVkIHByb2Nlc3NpbmcgZnVuY3Rpb25zIHVzaW5nIGludGVycnVwdGlvbiBtb2RlLgotICoKKyAgKiAgQGJyaWVmICAgSE1BQyBleHRlbmRlZCBwcm9jZXNzaW5nIGZ1bmN0aW9ucyB1c2luZyBpbnRlcnJ1cHRpb24gbW9kZS4KKyAgKgogQHZlcmJhdGltCiAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAgICAgICAgICMjIyMjIEludGVycnVwdCBtb2RlIEhNQUMgZXh0ZW5kZWQgcHJvY2Vzc2luZyBmdW5jdGlvbnMgIyMjIyMKQEAgLTU3Miw3ICs1ODMsOCBAQAogICAqIEBwYXJhbSAgcE91dEJ1ZmZlciBwb2ludGVyIHRvIHRoZSBjb21wdXRlZCBkaWdlc3QuIERpZ2VzdCBzaXplIGlzIDI4IGJ5dGVzLgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0hNQUNFeF9TSEEyMjRfU3RhcnRfSVQoSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCwgdWludDhfdCAqcEluQnVmZmVyLCB1aW50MzJfdCBTaXplLCB1aW50OF90KiBwT3V0QnVmZmVyKQorSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0hNQUNFeF9TSEEyMjRfU3RhcnRfSVQoSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCwgdWludDhfdCAqcEluQnVmZmVyLCB1aW50MzJfdCBTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqcE91dEJ1ZmZlcikKIHsKICAgcmV0dXJuICBITUFDX1N0YXJ0X0lUKGhoYXNoLCBwSW5CdWZmZXIsIFNpemUsIHBPdXRCdWZmZXIsIEhBU0hfQUxHT1NFTEVDVElPTl9TSEEyMjQpOwogfQpAQCAtNTg5LDcgKzYwMSw4IEBACiAgICogQHBhcmFtICBwT3V0QnVmZmVyIHBvaW50ZXIgdG8gdGhlIGNvbXB1dGVkIGRpZ2VzdC4gRGlnZXN0IHNpemUgaXMgMzIgYnl0ZXMuCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfSE1BQ0V4X1NIQTI1Nl9TdGFydF9JVChIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoLCB1aW50OF90ICpwSW5CdWZmZXIsIHVpbnQzMl90IFNpemUsIHVpbnQ4X3QqIHBPdXRCdWZmZXIpCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfSE1BQ0V4X1NIQTI1Nl9TdGFydF9JVChIQVNIX0hhbmRsZVR5cGVEZWYgKmhoYXNoLCB1aW50OF90ICpwSW5CdWZmZXIsIHVpbnQzMl90IFNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpwT3V0QnVmZmVyKQogewogICByZXR1cm4gIEhNQUNfU3RhcnRfSVQoaGhhc2gsIHBJbkJ1ZmZlciwgU2l6ZSwgcE91dEJ1ZmZlciwgSEFTSF9BTEdPU0VMRUNUSU9OX1NIQTI1Nik7CiB9CkBAIC02MDMsOCArNjE2LDggQEAKIAogCiAvKiogQGRlZmdyb3VwIEhBU0hFeF9FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXA2IEhNQUMgZXh0ZW5kZWQgcHJvY2Vzc2luZyBmdW5jdGlvbnMgaW4gRE1BIG1vZGUKLSAqICBAYnJpZWYgICBITUFDIGV4dGVuZGVkIHByb2Nlc3NpbmcgZnVuY3Rpb25zIHVzaW5nIERNQSBtb2RlLgotICoKKyAgKiAgQGJyaWVmICAgSE1BQyBleHRlbmRlZCBwcm9jZXNzaW5nIGZ1bmN0aW9ucyB1c2luZyBETUEgbW9kZS4KKyAgKgogQHZlcmJhdGltCiAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAgICAgICAgICAjIyMjIyBETUEgbW9kZSBITUFDIGV4dGVuZGVkIHByb2Nlc3NpbmcgZnVuY3Rpb25zICMjIyMjCkBAIC02ODEsOCArNjk0LDggQEAKICAgKi8KIAogLyoqIEBkZWZncm91cCBIQVNIRXhfRXhwb3J0ZWRfRnVuY3Rpb25zX0dyb3VwNyBNdWx0aS1idWZmZXIgSE1BQyBleHRlbmRlZCBwcm9jZXNzaW5nIGZ1bmN0aW9ucyBpbiBETUEgbW9kZQotICogIEBicmllZiAgIEhNQUMgZXh0ZW5kZWQgcHJvY2Vzc2luZyBmdW5jdGlvbnMgaW4gbXVsdGktYnVmZmVyIERNQSBtb2RlLgotICoKKyAgKiAgQGJyaWVmICAgSE1BQyBleHRlbmRlZCBwcm9jZXNzaW5nIGZ1bmN0aW9ucyBpbiBtdWx0aS1idWZmZXIgRE1BIG1vZGUuCisgICoKIEB2ZXJiYXRpbQogID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgICMjIyMjIE11bHRpLWJ1ZmZlciBETUEgbW9kZSBITUFDIGV4dGVuZGVkIHByb2Nlc3NpbmcgZnVuY3Rpb25zICMjIyMjCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmNHh4X2hhbF9oY2QuYyBiL1NyYy9zdG0zMmY0eHhfaGFsX2hjZC5jCmluZGV4IGYwZmZkMGIuLjE4ZjRlM2IgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmY0eHhfaGFsX2hjZC5jCisrKyBiL1NyYy9zdG0zMmY0eHhfaGFsX2hjZC5jCkBAIC0xODUsOSArMTg1LDkgQEAKICAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBmcm9tIDAgdG8gMjU1CiAgICogQHBhcmFtICBzcGVlZCBDdXJyZW50IGRldmljZSBzcGVlZC4KICAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZXNlIHZhbHVlczoKLSAgKiAgICAgICAgICAgIEhDRF9TUEVFRF9ISUdIOiBIaWdoIHNwZWVkIG1vZGUsCi0gICogICAgICAgICAgICBIQ0RfU1BFRURfRlVMTDogRnVsbCBzcGVlZCBtb2RlLAotICAqICAgICAgICAgICAgSENEX1NQRUVEX0xPVzogTG93IHNwZWVkIG1vZGUKKyAgKiAgICAgICAgICAgIEhDRF9ERVZJQ0VfU1BFRURfSElHSDogSGlnaCBzcGVlZCBtb2RlLAorICAqICAgICAgICAgICAgSENEX0RFVklDRV9TUEVFRF9GVUxMOiBGdWxsIHNwZWVkIG1vZGUsCisgICogICAgICAgICAgICBIQ0RfREVWSUNFX1NQRUVEX0xPVzogTG93IHNwZWVkIG1vZGUKICAgKiBAcGFyYW0gIGVwX3R5cGUgRW5kcG9pbnQgVHlwZS4KICAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZXNlIHZhbHVlczoKICAgKiAgICAgICAgICAgIEVQX1RZUEVfQ1RSTDogQ29udHJvbCB0eXBlLApAQCAtNTY2LDYgKzU2NiwxNiBAQAogICAgICAgX19IQUxfSENEX0NMRUFSX0ZMQUcoaGhjZCwgVVNCX09UR19HSU5UU1RTX1NPRik7CiAgICAgfQogCisgICAgLyogSGFuZGxlIFJ4IFF1ZXVlIExldmVsIEludGVycnVwdHMgKi8KKyAgICBpZiAoKF9fSEFMX0hDRF9HRVRfRkxBRyhoaGNkLCBVU0JfT1RHX0dJTlRTVFNfUlhGTFZMKSkgIT0gMFUpCisgICAgeworICAgICAgVVNCX01BU0tfSU5URVJSVVBUKGhoY2QtPkluc3RhbmNlLCBVU0JfT1RHX0dJTlRTVFNfUlhGTFZMKTsKKworICAgICAgSENEX1JYUUxWTF9JUlFIYW5kbGVyKGhoY2QpOworCisgICAgICBVU0JfVU5NQVNLX0lOVEVSUlVQVChoaGNkLT5JbnN0YW5jZSwgVVNCX09UR19HSU5UU1RTX1JYRkxWTCk7CisgICAgfQorCiAgICAgLyogSGFuZGxlIEhvc3QgY2hhbm5lbCBJbnRlcnJ1cHQgKi8KICAgICBpZiAoX19IQUxfSENEX0dFVF9GTEFHKGhoY2QsIFVTQl9PVEdfR0lOVFNUU19IQ0lOVCkpCiAgICAgewpAQCAtNTg2LDE2ICs1OTYsNiBAQAogICAgICAgfQogICAgICAgX19IQUxfSENEX0NMRUFSX0ZMQUcoaGhjZCwgVVNCX09UR19HSU5UU1RTX0hDSU5UKTsKICAgICB9Ci0KLSAgICAvKiBIYW5kbGUgUnggUXVldWUgTGV2ZWwgSW50ZXJydXB0cyAqLwotICAgIGlmICgoX19IQUxfSENEX0dFVF9GTEFHKGhoY2QsIFVTQl9PVEdfR0lOVFNUU19SWEZMVkwpKSAhPSAwVSkKLSAgICB7Ci0gICAgICBVU0JfTUFTS19JTlRFUlJVUFQoaGhjZC0+SW5zdGFuY2UsIFVTQl9PVEdfR0lOVFNUU19SWEZMVkwpOwotCi0gICAgICBIQ0RfUlhRTFZMX0lSUUhhbmRsZXIoaGhjZCk7Ci0KLSAgICAgIFVTQl9VTk1BU0tfSU5URVJSVVBUKGhoY2QtPkluc3RhbmNlLCBVU0JfT1RHX0dJTlRTVFNfUlhGTFZMKTsKLSAgICB9CiAgIH0KIH0KIApAQCAtMTIwNywxMCArMTIwNywxNyBAQAogICBlbHNlIGlmICgoVVNCeF9IQyhjaF9udW0pLT5IQ0lOVCAmIFVTQl9PVEdfSENJTlRfRFRFUlIpID09IFVTQl9PVEdfSENJTlRfRFRFUlIpCiAgIHsKICAgICBfX0hBTF9IQ0RfVU5NQVNLX0hBTFRfSENfSU5UKGNoX251bSk7Ci0gICAgKHZvaWQpVVNCX0hDX0hhbHQoaGhjZC0+SW5zdGFuY2UsICh1aW50OF90KWNoX251bSk7Ci0gICAgX19IQUxfSENEX0NMRUFSX0hDX0lOVChjaF9udW0sIFVTQl9PVEdfSENJTlRfTkFLKTsKICAgICBoaGNkLT5oY1tjaF9udW1dLnN0YXRlID0gSENfREFUQVRHTEVSUjsKKyAgICBfX0hBTF9IQ0RfQ0xFQVJfSENfSU5UKGNoX251bSwgVVNCX09UR19IQ0lOVF9OQUspOwogICAgIF9fSEFMX0hDRF9DTEVBUl9IQ19JTlQoY2hfbnVtLCBVU0JfT1RHX0hDSU5UX0RURVJSKTsKKyAgICAodm9pZClVU0JfSENfSGFsdChoaGNkLT5JbnN0YW5jZSwgKHVpbnQ4X3QpY2hfbnVtKTsKKyAgfQorICBlbHNlIGlmICgoVVNCeF9IQyhjaF9udW0pLT5IQ0lOVCAmIFVTQl9PVEdfSENJTlRfVFhFUlIpID09IFVTQl9PVEdfSENJTlRfVFhFUlIpCisgIHsKKyAgICBfX0hBTF9IQ0RfVU5NQVNLX0hBTFRfSENfSU5UKGNoX251bSk7CisgICAgaGhjZC0+aGNbY2hfbnVtXS5zdGF0ZSA9IEhDX1hBQ1RFUlI7CisgICAgKHZvaWQpVVNCX0hDX0hhbHQoaGhjZC0+SW5zdGFuY2UsICh1aW50OF90KWNoX251bSk7CisgICAgX19IQUxfSENEX0NMRUFSX0hDX0lOVChjaF9udW0sIFVTQl9PVEdfSENJTlRfVFhFUlIpOwogICB9CiAgIGVsc2UKICAgewpAQCAtMTIyNyw3ICsxMjM0LDcgQEAKICAgewogICAgIGlmIChoaGNkLT5Jbml0LmRtYV9lbmFibGUgIT0gMFUpCiAgICAgewotICAgICAgaGhjZC0+aGNbY2hfbnVtXS54ZmVyX2NvdW50ID0gaGhjZC0+aGNbY2hfbnVtXS54ZmVyX2xlbiAtIFwKKyAgICAgIGhoY2QtPmhjW2NoX251bV0ueGZlcl9jb3VudCA9IGhoY2QtPmhjW2NoX251bV0uWGZlclNpemUgLSBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoVVNCeF9IQyhjaF9udW0pLT5IQ1RTSVogJiBVU0JfT1RHX0hDVFNJWl9YRlJTSVopOwogICAgIH0KIApAQCAtMTI2OCw4ICsxMjc1LDE4IEBACiAgICAgewogICAgICAgLyogLi4uICovCiAgICAgfQotICAgIGhoY2QtPmhjW2NoX251bV0udG9nZ2xlX2luIF49IDFVOwogCisgICAgaWYgKGhoY2QtPkluaXQuZG1hX2VuYWJsZSA9PSAxVSkKKyAgICB7CisgICAgICBpZiAoKChoaGNkLT5oY1tjaF9udW1dLlhmZXJTaXplIC8gaGhjZC0+aGNbY2hfbnVtXS5tYXhfcGFja2V0KSAmIDFVKSAhPSAwVSkKKyAgICAgIHsKKyAgICAgICAgaGhjZC0+aGNbY2hfbnVtXS50b2dnbGVfaW4gXj0gMVU7CisgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICBoaGNkLT5oY1tjaF9udW1dLnRvZ2dsZV9pbiBePSAxVTsKKyAgICB9CiAgIH0KICAgZWxzZSBpZiAoKFVTQnhfSEMoY2hfbnVtKS0+SENJTlQgJiBVU0JfT1RHX0hDSU5UX0NISCkgPT0gVVNCX09UR19IQ0lOVF9DSEgpCiAgIHsKQEAgLTEyNzcsMTcgKzEyOTQsMTcgQEAKIAogICAgIGlmIChoaGNkLT5oY1tjaF9udW1dLnN0YXRlID09IEhDX1hGUkMpCiAgICAgewotICAgICAgaGhjZC0+aGNbY2hfbnVtXS51cmJfc3RhdGUgID0gVVJCX0RPTkU7CisgICAgICBoaGNkLT5oY1tjaF9udW1dLnVyYl9zdGF0ZSA9IFVSQl9ET05FOwogICAgIH0KICAgICBlbHNlIGlmIChoaGNkLT5oY1tjaF9udW1dLnN0YXRlID09IEhDX1NUQUxMKQogICAgIHsKLSAgICAgIGhoY2QtPmhjW2NoX251bV0udXJiX3N0YXRlICA9IFVSQl9TVEFMTDsKKyAgICAgIGhoY2QtPmhjW2NoX251bV0udXJiX3N0YXRlID0gVVJCX1NUQUxMOwogICAgIH0KICAgICBlbHNlIGlmICgoaGhjZC0+aGNbY2hfbnVtXS5zdGF0ZSA9PSBIQ19YQUNURVJSKSB8fAogICAgICAgICAgICAgIChoaGNkLT5oY1tjaF9udW1dLnN0YXRlID09IEhDX0RBVEFUR0xFUlIpKQogICAgIHsKICAgICAgIGhoY2QtPmhjW2NoX251bV0uRXJyQ250Kys7Ci0gICAgICBpZiAoaGhjZC0+aGNbY2hfbnVtXS5FcnJDbnQgPiAzVSkKKyAgICAgIGlmIChoaGNkLT5oY1tjaF9udW1dLkVyckNudCA+IDJVKQogICAgICAgewogICAgICAgICBoaGNkLT5oY1tjaF9udW1dLkVyckNudCA9IDBVOwogICAgICAgICBoaGNkLT5oY1tjaF9udW1dLnVyYl9zdGF0ZSA9IFVSQl9FUlJPUjsKQEAgLTEyOTUsMTggKzEzMTIsMTkgQEAKICAgICAgIGVsc2UKICAgICAgIHsKICAgICAgICAgaGhjZC0+aGNbY2hfbnVtXS51cmJfc3RhdGUgPSBVUkJfTk9UUkVBRFk7Ci0gICAgICB9CiAKLSAgICAgIC8qIHJlLWFjdGl2YXRlIHRoZSBjaGFubmVsICAqLwotICAgICAgdG1wcmVnID0gVVNCeF9IQyhjaF9udW0pLT5IQ0NIQVI7Ci0gICAgICB0bXByZWcgJj0gflVTQl9PVEdfSENDSEFSX0NIRElTOwotICAgICAgdG1wcmVnIHw9IFVTQl9PVEdfSENDSEFSX0NIRU5BOwotICAgICAgVVNCeF9IQyhjaF9udW0pLT5IQ0NIQVIgPSB0bXByZWc7CisgICAgICAgIC8qIHJlLWFjdGl2YXRlIHRoZSBjaGFubmVsICovCisgICAgICAgIHRtcHJlZyA9IFVTQnhfSEMoY2hfbnVtKS0+SENDSEFSOworICAgICAgICB0bXByZWcgJj0gflVTQl9PVEdfSENDSEFSX0NIRElTOworICAgICAgICB0bXByZWcgfD0gVVNCX09UR19IQ0NIQVJfQ0hFTkE7CisgICAgICAgIFVTQnhfSEMoY2hfbnVtKS0+SENDSEFSID0gdG1wcmVnOworICAgICAgfQogICAgIH0KICAgICBlbHNlIGlmIChoaGNkLT5oY1tjaF9udW1dLnN0YXRlID09IEhDX05BSykKICAgICB7CiAgICAgICBoaGNkLT5oY1tjaF9udW1dLnVyYl9zdGF0ZSAgPSBVUkJfTk9UUkVBRFk7Ci0gICAgICAvKiByZS1hY3RpdmF0ZSB0aGUgY2hhbm5lbCAgKi8KKworICAgICAgLyogcmUtYWN0aXZhdGUgdGhlIGNoYW5uZWwgKi8KICAgICAgIHRtcHJlZyA9IFVTQnhfSEMoY2hfbnVtKS0+SENDSEFSOwogICAgICAgdG1wcmVnICY9IH5VU0JfT1RHX0hDQ0hBUl9DSERJUzsKICAgICAgIHRtcHJlZyB8PSBVU0JfT1RHX0hDQ0hBUl9DSEVOQTsKQEAgLTEzMjQsMTQgKzEzNDIsNiBAQAogICAgIF9fSEFMX0hDRF9DTEVBUl9IQ19JTlQoY2hfbnVtLCBVU0JfT1RHX0hDSU5UX0NISCk7CiAgICAgSEFMX0hDRF9IQ19Ob3RpZnlVUkJDaGFuZ2VfQ2FsbGJhY2soaGhjZCwgKHVpbnQ4X3QpY2hfbnVtLCBoaGNkLT5oY1tjaF9udW1dLnVyYl9zdGF0ZSk7CiAgIH0KLSAgZWxzZSBpZiAoKFVTQnhfSEMoY2hfbnVtKS0+SENJTlQgJiBVU0JfT1RHX0hDSU5UX1RYRVJSKSA9PSBVU0JfT1RHX0hDSU5UX1RYRVJSKQotICB7Ci0gICAgX19IQUxfSENEX1VOTUFTS19IQUxUX0hDX0lOVChjaF9udW0pOwotICAgIGhoY2QtPmhjW2NoX251bV0uRXJyQ250Kys7Ci0gICAgaGhjZC0+aGNbY2hfbnVtXS5zdGF0ZSA9IEhDX1hBQ1RFUlI7Ci0gICAgKHZvaWQpVVNCX0hDX0hhbHQoaGhjZC0+SW5zdGFuY2UsICh1aW50OF90KWNoX251bSk7Ci0gICAgX19IQUxfSENEX0NMRUFSX0hDX0lOVChjaF9udW0sIFVTQl9PVEdfSENJTlRfVFhFUlIpOwotICB9CiAgIGVsc2UgaWYgKChVU0J4X0hDKGNoX251bSktPkhDSU5UICYgVVNCX09UR19IQ0lOVF9OQUspID09IFVTQl9PVEdfSENJTlRfTkFLKQogICB7CiAgICAgaWYgKGhoY2QtPmhjW2NoX251bV0uZXBfdHlwZSA9PSBFUF9UWVBFX0lOVFIpCkBAIC0xMzc3LDYgKzEzODcsNyBAQAogICB1aW50MzJfdCBVU0J4X0JBU0UgPSAodWludDMyX3QpVVNCeDsKICAgdWludDMyX3QgY2hfbnVtID0gKHVpbnQzMl90KWNobnVtOwogICB1aW50MzJfdCB0bXByZWc7CisgIHVpbnQzMl90IG51bV9wYWNrZXRzOwogCiAgIGlmICgoVVNCeF9IQyhjaF9udW0pLT5IQ0lOVCAmIFVTQl9PVEdfSENJTlRfQUhCRVJSKSA9PSBVU0JfT1RHX0hDSU5UX0FIQkVSUikKICAgewpAQCAtMTM5NSwxNSArMTQwNiw2IEBACiAgICAgICAodm9pZClVU0JfSENfSGFsdChoaGNkLT5JbnN0YW5jZSwgKHVpbnQ4X3QpY2hfbnVtKTsKICAgICB9CiAgIH0KLSAgZWxzZSBpZiAoKFVTQnhfSEMoY2hfbnVtKS0+SENJTlQgJiBVU0JfT1RHX0hDSU5UX05ZRVQpID09IFVTQl9PVEdfSENJTlRfTllFVCkKLSAgewotICAgIGhoY2QtPmhjW2NoX251bV0uc3RhdGUgPSBIQ19OWUVUOwotICAgIGhoY2QtPmhjW2NoX251bV0uZG9fcGluZyA9IDFVOwotICAgIGhoY2QtPmhjW2NoX251bV0uRXJyQ250ID0gMFU7Ci0gICAgX19IQUxfSENEX1VOTUFTS19IQUxUX0hDX0lOVChjaF9udW0pOwotICAgICh2b2lkKVVTQl9IQ19IYWx0KGhoY2QtPkluc3RhbmNlLCAodWludDhfdCljaF9udW0pOwotICAgIF9fSEFMX0hDRF9DTEVBUl9IQ19JTlQoY2hfbnVtLCBVU0JfT1RHX0hDSU5UX05ZRVQpOwotICB9CiAgIGVsc2UgaWYgKChVU0J4X0hDKGNoX251bSktPkhDSU5UICYgVVNCX09UR19IQ0lOVF9GUk1PUikgPT0gVVNCX09UR19IQ0lOVF9GUk1PUikKICAgewogICAgIF9fSEFMX0hDRF9VTk1BU0tfSEFMVF9IQ19JTlQoY2hfbnVtKTsKQEAgLTE0MTMsMTEgKzE0MTUsMjcgQEAKICAgZWxzZSBpZiAoKFVTQnhfSEMoY2hfbnVtKS0+SENJTlQgJiBVU0JfT1RHX0hDSU5UX1hGUkMpID09IFVTQl9PVEdfSENJTlRfWEZSQykKICAgewogICAgIGhoY2QtPmhjW2NoX251bV0uRXJyQ250ID0gMFU7CisKKyAgICAvKiB0cmFuc2FjdGlvbiBjb21wbGV0ZWQgd2l0aCBOWUVUIHN0YXRlLCB1cGRhdGUgZG8gcGluZyBzdGF0ZSAqLworICAgIGlmICgoVVNCeF9IQyhjaF9udW0pLT5IQ0lOVCAmIFVTQl9PVEdfSENJTlRfTllFVCkgPT0gVVNCX09UR19IQ0lOVF9OWUVUKQorICAgIHsKKyAgICAgIGhoY2QtPmhjW2NoX251bV0uZG9fcGluZyA9IDFVOworICAgICAgX19IQUxfSENEX0NMRUFSX0hDX0lOVChjaF9udW0sIFVTQl9PVEdfSENJTlRfTllFVCk7CisgICAgfQogICAgIF9fSEFMX0hDRF9VTk1BU0tfSEFMVF9IQ19JTlQoY2hfbnVtKTsKICAgICAodm9pZClVU0JfSENfSGFsdChoaGNkLT5JbnN0YW5jZSwgKHVpbnQ4X3QpY2hfbnVtKTsKICAgICBfX0hBTF9IQ0RfQ0xFQVJfSENfSU5UKGNoX251bSwgVVNCX09UR19IQ0lOVF9YRlJDKTsKICAgICBoaGNkLT5oY1tjaF9udW1dLnN0YXRlID0gSENfWEZSQzsKICAgfQorICBlbHNlIGlmICgoVVNCeF9IQyhjaF9udW0pLT5IQ0lOVCAmIFVTQl9PVEdfSENJTlRfTllFVCkgPT0gVVNCX09UR19IQ0lOVF9OWUVUKQorICB7CisgICAgaGhjZC0+aGNbY2hfbnVtXS5zdGF0ZSA9IEhDX05ZRVQ7CisgICAgaGhjZC0+aGNbY2hfbnVtXS5kb19waW5nID0gMVU7CisgICAgaGhjZC0+aGNbY2hfbnVtXS5FcnJDbnQgPSAwVTsKKyAgICBfX0hBTF9IQ0RfVU5NQVNLX0hBTFRfSENfSU5UKGNoX251bSk7CisgICAgKHZvaWQpVVNCX0hDX0hhbHQoaGhjZC0+SW5zdGFuY2UsICh1aW50OF90KWNoX251bSk7CisgICAgX19IQUxfSENEX0NMRUFSX0hDX0lOVChjaF9udW0sIFVTQl9PVEdfSENJTlRfTllFVCk7CisgIH0KICAgZWxzZSBpZiAoKFVTQnhfSEMoY2hfbnVtKS0+SENJTlQgJiBVU0JfT1RHX0hDSU5UX1NUQUxMKSA9PSBVU0JfT1RHX0hDSU5UX1NUQUxMKQogICB7CiAgICAgX19IQUxfSENEX0NMRUFSX0hDX0lOVChjaF9udW0sIFVTQl9PVEdfSENJTlRfU1RBTEwpOwpAQCAtMTQzMiw3ICsxNDUwLDcgQEAKIAogICAgIGlmIChoaGNkLT5oY1tjaF9udW1dLmRvX3BpbmcgPT0gMFUpCiAgICAgewotICAgICAgaWYgKGhoY2QtPmhjW2NoX251bV0uc3BlZWQgPT0gSENEX1NQRUVEX0hJR0gpCisgICAgICBpZiAoaGhjZC0+aGNbY2hfbnVtXS5zcGVlZCA9PSBIQ0RfREVWSUNFX1NQRUVEX0hJR0gpCiAgICAgICB7CiAgICAgICAgIGhoY2QtPmhjW2NoX251bV0uZG9fcGluZyA9IDFVOwogICAgICAgfQpAQCAtMTQ0NCw5ICsxNDYyLDI2IEBACiAgIH0KICAgZWxzZSBpZiAoKFVTQnhfSEMoY2hfbnVtKS0+SENJTlQgJiBVU0JfT1RHX0hDSU5UX1RYRVJSKSA9PSBVU0JfT1RHX0hDSU5UX1RYRVJSKQogICB7Ci0gICAgX19IQUxfSENEX1VOTUFTS19IQUxUX0hDX0lOVChjaF9udW0pOwotICAgICh2b2lkKVVTQl9IQ19IYWx0KGhoY2QtPkluc3RhbmNlLCAodWludDhfdCljaF9udW0pOwotICAgIGhoY2QtPmhjW2NoX251bV0uc3RhdGUgPSBIQ19YQUNURVJSOworICAgIGlmIChoaGNkLT5Jbml0LmRtYV9lbmFibGUgPT0gMFUpCisgICAgeworICAgICAgaGhjZC0+aGNbY2hfbnVtXS5zdGF0ZSA9IEhDX1hBQ1RFUlI7CisgICAgICBfX0hBTF9IQ0RfVU5NQVNLX0hBTFRfSENfSU5UKGNoX251bSk7CisgICAgICAodm9pZClVU0JfSENfSGFsdChoaGNkLT5JbnN0YW5jZSwgKHVpbnQ4X3QpY2hfbnVtKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIGhoY2QtPmhjW2NoX251bV0uRXJyQ250Kys7CisgICAgICBpZiAoaGhjZC0+aGNbY2hfbnVtXS5FcnJDbnQgPiAyVSkKKyAgICAgIHsKKyAgICAgICAgaGhjZC0+aGNbY2hfbnVtXS5FcnJDbnQgPSAwVTsKKyAgICAgICAgaGhjZC0+aGNbY2hfbnVtXS51cmJfc3RhdGUgPSBVUkJfRVJST1I7CisgICAgICAgIEhBTF9IQ0RfSENfTm90aWZ5VVJCQ2hhbmdlX0NhbGxiYWNrKGhoY2QsICh1aW50OF90KWNoX251bSwgaGhjZC0+aGNbY2hfbnVtXS51cmJfc3RhdGUpOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICBoaGNkLT5oY1tjaF9udW1dLnVyYl9zdGF0ZSA9IFVSQl9OT1RSRUFEWTsKKyAgICAgIH0KKyAgICB9CiAgICAgX19IQUxfSENEX0NMRUFSX0hDX0lOVChjaF9udW0sIFVTQl9PVEdfSENJTlRfVFhFUlIpOwogICB9CiAgIGVsc2UgaWYgKChVU0J4X0hDKGNoX251bSktPkhDSU5UICYgVVNCX09UR19IQ0lOVF9EVEVSUikgPT0gVVNCX09UR19IQ0lOVF9EVEVSUikKQEAgLTE0NjcsNyArMTUwMiwyMiBAQAogICAgICAgaWYgKChoaGNkLT5oY1tjaF9udW1dLmVwX3R5cGUgPT0gRVBfVFlQRV9CVUxLKSB8fAogICAgICAgICAgIChoaGNkLT5oY1tjaF9udW1dLmVwX3R5cGUgPT0gRVBfVFlQRV9JTlRSKSkKICAgICAgIHsKLSAgICAgICAgaGhjZC0+aGNbY2hfbnVtXS50b2dnbGVfb3V0IF49IDFVOworICAgICAgICBpZiAoaGhjZC0+SW5pdC5kbWFfZW5hYmxlID09IDFVKQorICAgICAgICB7CisgICAgICAgICAgaWYgKGhoY2QtPmhjW2NoX251bV0ueGZlcl9sZW4gPiAwVSkKKyAgICAgICAgICB7CisgICAgICAgICAgICBudW1fcGFja2V0cyA9IChoaGNkLT5oY1tjaF9udW1dLnhmZXJfbGVuICsgaGhjZC0+aGNbY2hfbnVtXS5tYXhfcGFja2V0IC0gMVUpIC8gaGhjZC0+aGNbY2hfbnVtXS5tYXhfcGFja2V0OworCisgICAgICAgICAgICBpZiAoKG51bV9wYWNrZXRzICYgMVUpICE9IDBVKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBoaGNkLT5oY1tjaF9udW1dLnRvZ2dsZV9vdXQgXj0gMVU7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIGhoY2QtPmhjW2NoX251bV0udG9nZ2xlX291dCBePSAxVTsKKyAgICAgICAgfQogICAgICAgfQogICAgIH0KICAgICBlbHNlIGlmIChoaGNkLT5oY1tjaF9udW1dLnN0YXRlID09IEhDX05BSykKQEAgLTE0ODYsNyArMTUzNiw3IEBACiAgICAgICAgICAgICAgKGhoY2QtPmhjW2NoX251bV0uc3RhdGUgPT0gSENfREFUQVRHTEVSUikpCiAgICAgewogICAgICAgaGhjZC0+aGNbY2hfbnVtXS5FcnJDbnQrKzsKLSAgICAgIGlmIChoaGNkLT5oY1tjaF9udW1dLkVyckNudCA+IDNVKQorICAgICAgaWYgKGhoY2QtPmhjW2NoX251bV0uRXJyQ250ID4gMlUpCiAgICAgICB7CiAgICAgICAgIGhoY2QtPmhjW2NoX251bV0uRXJyQ250ID0gMFU7CiAgICAgICAgIGhoY2QtPmhjW2NoX251bV0udXJiX3N0YXRlID0gVVJCX0VSUk9SOwpAQCAtMTQ5NCwxMyArMTU0NCwxMyBAQAogICAgICAgZWxzZQogICAgICAgewogICAgICAgICBoaGNkLT5oY1tjaF9udW1dLnVyYl9zdGF0ZSA9IFVSQl9OT1RSRUFEWTsKLSAgICAgIH0KIAotICAgICAgLyogcmUtYWN0aXZhdGUgdGhlIGNoYW5uZWwgICovCi0gICAgICB0bXByZWcgPSBVU0J4X0hDKGNoX251bSktPkhDQ0hBUjsKLSAgICAgIHRtcHJlZyAmPSB+VVNCX09UR19IQ0NIQVJfQ0hESVM7Ci0gICAgICB0bXByZWcgfD0gVVNCX09UR19IQ0NIQVJfQ0hFTkE7Ci0gICAgICBVU0J4X0hDKGNoX251bSktPkhDQ0hBUiA9IHRtcHJlZzsKKyAgICAgICAgLyogcmUtYWN0aXZhdGUgdGhlIGNoYW5uZWwgICovCisgICAgICAgIHRtcHJlZyA9IFVTQnhfSEMoY2hfbnVtKS0+SENDSEFSOworICAgICAgICB0bXByZWcgJj0gflVTQl9PVEdfSENDSEFSX0NIRElTOworICAgICAgICB0bXByZWcgfD0gVVNCX09UR19IQ0NIQVJfQ0hFTkE7CisgICAgICAgIFVTQnhfSEMoY2hfbnVtKS0+SENDSEFSID0gdG1wcmVnOworICAgICAgfQogICAgIH0KICAgICBlbHNlCiAgICAgewpAQCAtMTUyNywxNCArMTU3NywxNSBAQAogICB1aW50MzJfdCBVU0J4X0JBU0UgPSAodWludDMyX3QpVVNCeDsKICAgdWludDMyX3QgcGt0c3RzOwogICB1aW50MzJfdCBwa3RjbnQ7Ci0gIHVpbnQzMl90IHRlbXA7CisgIHVpbnQzMl90IEdyeHN0c3BSZWc7CisgIHVpbnQzMl90IHhmZXJTaXplUGt0Q250OwogICB1aW50MzJfdCB0bXByZWc7CiAgIHVpbnQzMl90IGNoX251bTsKIAotICB0ZW1wID0gaGhjZC0+SW5zdGFuY2UtPkdSWFNUU1A7Ci0gIGNoX251bSA9IHRlbXAgJiBVU0JfT1RHX0dSWFNUU1BfRVBOVU07Ci0gIHBrdHN0cyA9ICh0ZW1wICYgVVNCX09UR19HUlhTVFNQX1BLVFNUUykgPj4gMTc7Ci0gIHBrdGNudCA9ICh0ZW1wICYgVVNCX09UR19HUlhTVFNQX0JDTlQpID4+IDQ7CisgIEdyeHN0c3BSZWcgPSBoaGNkLT5JbnN0YW5jZS0+R1JYU1RTUDsKKyAgY2hfbnVtID0gR3J4c3RzcFJlZyAmIFVTQl9PVEdfR1JYU1RTUF9FUE5VTTsKKyAgcGt0c3RzID0gKEdyeHN0c3BSZWcgJiBVU0JfT1RHX0dSWFNUU1BfUEtUU1RTKSA+PiAxNzsKKyAgcGt0Y250ID0gKEdyeHN0c3BSZWcgJiBVU0JfT1RHX0dSWFNUU1BfQkNOVCkgPj4gNDsKIAogICBzd2l0Y2ggKHBrdHN0cykKICAgewpAQCAtMTU0MiwyMCArMTU5MywzMSBAQAogICAgICAgLyogUmVhZCB0aGUgZGF0YSBpbnRvIHRoZSBob3N0IGJ1ZmZlci4gKi8KICAgICAgIGlmICgocGt0Y250ID4gMFUpICYmIChoaGNkLT5oY1tjaF9udW1dLnhmZXJfYnVmZiAhPSAodm9pZCAqKTApKQogICAgICAgewotICAgICAgICAodm9pZClVU0JfUmVhZFBhY2tldChoaGNkLT5JbnN0YW5jZSwgaGhjZC0+aGNbY2hfbnVtXS54ZmVyX2J1ZmYsICh1aW50MTZfdClwa3RjbnQpOwotCi0gICAgICAgIC8qbWFuYWdlIG11bHRpcGxlIFhmZXIgKi8KLSAgICAgICAgaGhjZC0+aGNbY2hfbnVtXS54ZmVyX2J1ZmYgKz0gcGt0Y250OwotICAgICAgICBoaGNkLT5oY1tjaF9udW1dLnhmZXJfY291bnQgICs9IHBrdGNudDsKLQotICAgICAgICBpZiAoKFVTQnhfSEMoY2hfbnVtKS0+SENUU0laICYgVVNCX09UR19IQ1RTSVpfUEtUQ05UKSA+IDBVKQorICAgICAgICBpZiAoKGhoY2QtPmhjW2NoX251bV0ueGZlcl9jb3VudCArIHBrdGNudCkgPD0gaGhjZC0+aGNbY2hfbnVtXS54ZmVyX2xlbikKICAgICAgICAgewotICAgICAgICAgIC8qIHJlLWFjdGl2YXRlIHRoZSBjaGFubmVsIHdoZW4gbW9yZSBwYWNrZXRzIGFyZSBleHBlY3RlZCAqLwotICAgICAgICAgIHRtcHJlZyA9IFVTQnhfSEMoY2hfbnVtKS0+SENDSEFSOwotICAgICAgICAgIHRtcHJlZyAmPSB+VVNCX09UR19IQ0NIQVJfQ0hESVM7Ci0gICAgICAgICAgdG1wcmVnIHw9IFVTQl9PVEdfSENDSEFSX0NIRU5BOwotICAgICAgICAgIFVTQnhfSEMoY2hfbnVtKS0+SENDSEFSID0gdG1wcmVnOwotICAgICAgICAgIGhoY2QtPmhjW2NoX251bV0udG9nZ2xlX2luIF49IDFVOworICAgICAgICAgICh2b2lkKVVTQl9SZWFkUGFja2V0KGhoY2QtPkluc3RhbmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhoY2QtPmhjW2NoX251bV0ueGZlcl9idWZmLCAodWludDE2X3QpcGt0Y250KTsKKworICAgICAgICAgIC8qIG1hbmFnZSBtdWx0aXBsZSBYZmVyICovCisgICAgICAgICAgaGhjZC0+aGNbY2hfbnVtXS54ZmVyX2J1ZmYgKz0gcGt0Y250OworICAgICAgICAgIGhoY2QtPmhjW2NoX251bV0ueGZlcl9jb3VudCArPSBwa3RjbnQ7CisKKyAgICAgICAgICAvKiBnZXQgdHJhbnNmZXIgc2l6ZSBwYWNrZXQgY291bnQgKi8KKyAgICAgICAgICB4ZmVyU2l6ZVBrdENudCA9IChVU0J4X0hDKGNoX251bSktPkhDVFNJWiAmIFVTQl9PVEdfSENUU0laX1BLVENOVCkgPj4gMTk7CisKKyAgICAgICAgICBpZiAoKGhoY2QtPmhjW2NoX251bV0ubWF4X3BhY2tldCA9PSBwa3RjbnQpICYmICh4ZmVyU2l6ZVBrdENudCA+IDBVKSkKKyAgICAgICAgICB7CisgICAgICAgICAgICAvKiByZS1hY3RpdmF0ZSB0aGUgY2hhbm5lbCB3aGVuIG1vcmUgcGFja2V0cyBhcmUgZXhwZWN0ZWQgKi8KKyAgICAgICAgICAgIHRtcHJlZyA9IFVTQnhfSEMoY2hfbnVtKS0+SENDSEFSOworICAgICAgICAgICAgdG1wcmVnICY9IH5VU0JfT1RHX0hDQ0hBUl9DSERJUzsKKyAgICAgICAgICAgIHRtcHJlZyB8PSBVU0JfT1RHX0hDQ0hBUl9DSEVOQTsKKyAgICAgICAgICAgIFVTQnhfSEMoY2hfbnVtKS0+SENDSEFSID0gdG1wcmVnOworICAgICAgICAgICAgaGhjZC0+aGNbY2hfbnVtXS50b2dnbGVfaW4gXj0gMVU7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIGhoY2QtPmhjW2NoX251bV0udXJiX3N0YXRlID0gVVJCX0VSUk9SOwogICAgICAgICB9CiAgICAgICB9CiAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmY0eHhfaGFsX2kyYy5jIGIvU3JjL3N0bTMyZjR4eF9oYWxfaTJjLmMKaW5kZXggM2ZiNmMzYy4uY2RmNGFjNyAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZjR4eF9oYWxfaTJjLmMKKysrIGIvU3JjL3N0bTMyZjR4eF9oYWxfaTJjLmMKQEAgLTkwLDcgKzkwLDcgQEAKICAgICBbLi5dCiAgICAgICAoKykgQSBzcGVjaWZpYyBvcHRpb24gZmllbGQgbWFuYWdlIHRoZSBkaWZmZXJlbnQgc3RlcHMgb2YgYSBzZXF1ZW50aWFsIHRyYW5zZmVyCiAgICAgICAoKykgT3B0aW9uIGZpZWxkIHZhbHVlcyBhcmUgZGVmaW5lZCB0aHJvdWdoIEByZWYgSTJDX1hmZXJPcHRpb25zX2RlZmluaXRpb24gYW5kIGFyZSBsaXN0ZWQgYmVsb3c6Ci0gICAgICAoKyspIEkyQ19GSVJTVF9BTkRfTEFTVF9GUkFNRTogTm8gc2VxdWVudGlhbCB1c2FnZSwgZnVuY3Rpb25uYWwgaXMgc2FtZSBhcyBhc3NvY2lhdGVkIGludGVyZmFjZXMgaW4gbm8gc2VxdWVudGlhbCBtb2RlCisgICAgICAoKyspIEkyQ19GSVJTVF9BTkRfTEFTVF9GUkFNRTogTm8gc2VxdWVudGlhbCB1c2FnZSwgZnVuY3Rpb25hbCBpcyBzYW1lIGFzIGFzc29jaWF0ZWQgaW50ZXJmYWNlcyBpbiBubyBzZXF1ZW50aWFsIG1vZGUKICAgICAgICgrKykgSTJDX0ZJUlNUX0ZSQU1FOiBTZXF1ZW50aWFsIHVzYWdlLCB0aGlzIG9wdGlvbiBhbGxvdyB0byBtYW5hZ2UgYSBzZXF1ZW5jZSB3aXRoIHN0YXJ0IGNvbmRpdGlvbiwgYWRkcmVzcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBkYXRhIHRvIHRyYW5zZmVyIHdpdGhvdXQgYSBmaW5hbCBzdG9wIGNvbmRpdGlvbgogICAgICAgKCsrKSBJMkNfRklSU1RfQU5EX05FWFRfRlJBTUU6IFNlcXVlbnRpYWwgdXNhZ2UgKE1hc3RlciBvbmx5KSwgdGhpcyBvcHRpb24gYWxsb3cgdG8gbWFuYWdlIGEgc2VxdWVuY2Ugd2l0aCBzdGFydCBjb25kaXRpb24sIGFkZHJlc3MKQEAgLTEwOSw3ICsxMDksNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgSEFMX0kyQ19NYXN0ZXJfU2VxX1JlY2VpdmVfSVQob3B0aW9uIEkyQ19GSVJTVF9BTkRfTkVYVF9GUkFNRSB0aGVuIEkyQ19ORVhUX0ZSQU1FKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgSEFMX0kyQ19NYXN0ZXJfU2VxX1RyYW5zbWl0X0RNQShvcHRpb24gSTJDX0ZJUlNUX0FORF9ORVhUX0ZSQU1FIHRoZW4gSTJDX05FWFRfRlJBTUUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciBIQUxfSTJDX01hc3Rlcl9TZXFfUmVjZWl2ZV9ETUEob3B0aW9uIEkyQ19GSVJTVF9BTkRfTkVYVF9GUkFNRSB0aGVuIEkyQ19ORVhUX0ZSQU1FKS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGVuIHVzYWdlIG9mIHRoaXMgb3B0aW9uIEkyQ19MQVNUX0ZSQU1FX05PX1NUT1AgYXQgdGhlIGxhc3QgVHJhbnNtaXQgb3IgUmVjZWl2ZSBzZXF1ZW5jZSBwZXJtaXQgdG8gY2FsbCB0aGUgb3Bvc2l0ZSBpbnRlcmZhY2UgUmVjZWl2ZSBvciBUcmFuc21pdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZW4gdXNhZ2Ugb2YgdGhpcyBvcHRpb24gSTJDX0xBU1RfRlJBTUVfTk9fU1RPUCBhdCB0aGUgbGFzdCBUcmFuc21pdCBvciBSZWNlaXZlIHNlcXVlbmNlIHBlcm1pdCB0byBjYWxsIHRoZSBvcHBvc2l0ZSBpbnRlcmZhY2UgUmVjZWl2ZSBvciBUcmFuc21pdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aG91dCBzdG9wcGluZyB0aGUgY29tbXVuaWNhdGlvbiBhbmQgc28gZ2VuZXJhdGUgYSByZXN0YXJ0IGNvbmRpdGlvbi4KICAgICAgICgrKykgSTJDX09USEVSX0ZSQU1FOiBTZXF1ZW50aWFsIHVzYWdlIChNYXN0ZXIgb25seSksIHRoaXMgb3B0aW9uIGFsbG93IHRvIG1hbmFnZSBhIHJlc3RhcnQgY29uZGl0aW9uIGFmdGVyIGVhY2ggY2FsbCBvZiB0aGUgc2FtZSBtYXN0ZXIgc2VxdWVudGlhbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVyZmFjZS4KQEAgLTExOSw3ICsxMTksNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgSEFMX0kyQ19NYXN0ZXJfU2VxX1JlY2VpdmVfRE1BKG9wdGlvbiBJMkNfRklSU1RfRlJBTUUgdGhlbiBJMkNfT1RIRVJfRlJBTUUpLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZW4gdXNhZ2Ugb2YgdGhpcyBvcHRpb24gSTJDX09USEVSX0FORF9MQVNUX0ZSQU1FIGF0IHRoZSBsYXN0IGZyYW1lIHRvIGhlbHAgYXV0b21hdGljIGdlbmVyYXRpb24gb2YgU1RPUCBjb25kaXRpb24uCiAKLSAgICAgICgrKSBEaWZmZXJlbnRzIHNlcXVlbnRpYWwgSTJDIGludGVyZmFjZXMgYXJlIGxpc3RlZCBiZWxvdzoKKyAgICAgICgrKSBEaWZmZXJlbnQgc2VxdWVudGlhbCBJMkMgaW50ZXJmYWNlcyBhcmUgbGlzdGVkIGJlbG93OgogICAgICAgKCsrKSBTZXF1ZW50aWFsIHRyYW5zbWl0IGluIG1hc3RlciBJMkMgbW9kZSBhbiBhbW91bnQgb2YgZGF0YSBpbiBub24tYmxvY2tpbmcgbW9kZSB1c2luZyBAcmVmIEhBTF9JMkNfTWFzdGVyX1NlcV9UcmFuc21pdF9JVCgpCiAgICAgICAgICAgICBvciB1c2luZyBAcmVmIEhBTF9JMkNfTWFzdGVyX1NlcV9UcmFuc21pdF9ETUEoKQogICAgICAgKCsrKykgQXQgdHJhbnNtaXNzaW9uIGVuZCBvZiBjdXJyZW50IGZyYW1lIHRyYW5zZmVyLCBAcmVmIEhBTF9JMkNfTWFzdGVyVHhDcGx0Q2FsbGJhY2soKSBpcyBleGVjdXRlZCBhbmQgdXNlciBjYW4KQEAgLTE5ODYsMjAgKzE5ODYsMzcgQEAKIAogICAgIGlmIChoaTJjLT5YZmVyU2l6ZSA+IDBVKQogICAgIHsKLSAgICAgIC8qIFNldCB0aGUgSTJDIERNQSB0cmFuc2ZlciBjb21wbGV0ZSBjYWxsYmFjayAqLwotICAgICAgaGkyYy0+aGRtYXR4LT5YZmVyQ3BsdENhbGxiYWNrID0gSTJDX0RNQVhmZXJDcGx0OworICAgICAgaWYgKGhpMmMtPmhkbWF0eCAhPSBOVUxMKQorICAgICAgeworICAgICAgICAvKiBTZXQgdGhlIEkyQyBETUEgdHJhbnNmZXIgY29tcGxldGUgY2FsbGJhY2sgKi8KKyAgICAgICAgaGkyYy0+aGRtYXR4LT5YZmVyQ3BsdENhbGxiYWNrID0gSTJDX0RNQVhmZXJDcGx0OwogCi0gICAgICAvKiBTZXQgdGhlIERNQSBlcnJvciBjYWxsYmFjayAqLwotICAgICAgaGkyYy0+aGRtYXR4LT5YZmVyRXJyb3JDYWxsYmFjayA9IEkyQ19ETUFFcnJvcjsKKyAgICAgICAgLyogU2V0IHRoZSBETUEgZXJyb3IgY2FsbGJhY2sgKi8KKyAgICAgICAgaGkyYy0+aGRtYXR4LT5YZmVyRXJyb3JDYWxsYmFjayA9IEkyQ19ETUFFcnJvcjsKIAotICAgICAgLyogU2V0IHRoZSB1bnVzZWQgRE1BIGNhbGxiYWNrcyB0byBOVUxMICovCi0gICAgICBoaTJjLT5oZG1hdHgtPlhmZXJIYWxmQ3BsdENhbGxiYWNrID0gTlVMTDsKLSAgICAgIGhpMmMtPmhkbWF0eC0+WGZlck0xQ3BsdENhbGxiYWNrID0gTlVMTDsKLSAgICAgIGhpMmMtPmhkbWF0eC0+WGZlck0xSGFsZkNwbHRDYWxsYmFjayA9IE5VTEw7Ci0gICAgICBoaTJjLT5oZG1hdHgtPlhmZXJBYm9ydENhbGxiYWNrID0gTlVMTDsKKyAgICAgICAgLyogU2V0IHRoZSB1bnVzZWQgRE1BIGNhbGxiYWNrcyB0byBOVUxMICovCisgICAgICAgIGhpMmMtPmhkbWF0eC0+WGZlckhhbGZDcGx0Q2FsbGJhY2sgPSBOVUxMOworICAgICAgICBoaTJjLT5oZG1hdHgtPlhmZXJNMUNwbHRDYWxsYmFjayA9IE5VTEw7CisgICAgICAgIGhpMmMtPmhkbWF0eC0+WGZlck0xSGFsZkNwbHRDYWxsYmFjayA9IE5VTEw7CisgICAgICAgIGhpMmMtPmhkbWF0eC0+WGZlckFib3J0Q2FsbGJhY2sgPSBOVUxMOwogCi0gICAgICAvKiBFbmFibGUgdGhlIERNQSBzdHJlYW0gKi8KLSAgICAgIGRtYXhmZXJzdGF0dXMgPSBIQUxfRE1BX1N0YXJ0X0lUKGhpMmMtPmhkbWF0eCwgKHVpbnQzMl90KWhpMmMtPnBCdWZmUHRyLCAodWludDMyX3QpJmhpMmMtPkluc3RhbmNlLT5EUiwgaGkyYy0+WGZlclNpemUpOworICAgICAgICAvKiBFbmFibGUgdGhlIERNQSBzdHJlYW0gKi8KKyAgICAgICAgZG1heGZlcnN0YXR1cyA9IEhBTF9ETUFfU3RhcnRfSVQoaGkyYy0+aGRtYXR4LCAodWludDMyX3QpaGkyYy0+cEJ1ZmZQdHIsICh1aW50MzJfdCkmaGkyYy0+SW5zdGFuY2UtPkRSLCBoaTJjLT5YZmVyU2l6ZSk7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIC8qIFVwZGF0ZSBJMkMgc3RhdGUgKi8KKyAgICAgICAgaGkyYy0+U3RhdGUgICAgID0gSEFMX0kyQ19TVEFURV9SRUFEWTsKKyAgICAgICAgaGkyYy0+TW9kZSAgICAgID0gSEFMX0kyQ19NT0RFX05PTkU7CisKKyAgICAgICAgLyogVXBkYXRlIEkyQyBlcnJvciBjb2RlICovCisgICAgICAgIGhpMmMtPkVycm9yQ29kZSB8PSBIQUxfSTJDX0VSUk9SX0RNQV9QQVJBTTsKKworICAgICAgICAvKiBQcm9jZXNzIFVubG9ja2VkICovCisgICAgICAgIF9fSEFMX1VOTE9DSyhoaTJjKTsKKworICAgICAgICByZXR1cm4gSEFMX0VSUk9SOworICAgICAgfQogCiAgICAgICBpZiAoZG1heGZlcnN0YXR1cyA9PSBIQUxfT0spCiAgICAgICB7CkBAIC0yMTI3LDIwICsyMTQ0LDM3IEBACiAKICAgICBpZiAoaGkyYy0+WGZlclNpemUgPiAwVSkKICAgICB7Ci0gICAgICAvKiBTZXQgdGhlIEkyQyBETUEgdHJhbnNmZXIgY29tcGxldGUgY2FsbGJhY2sgKi8KLSAgICAgIGhpMmMtPmhkbWFyeC0+WGZlckNwbHRDYWxsYmFjayA9IEkyQ19ETUFYZmVyQ3BsdDsKKyAgICAgIGlmIChoaTJjLT5oZG1hcnggIT0gTlVMTCkKKyAgICAgIHsKKyAgICAgICAgLyogU2V0IHRoZSBJMkMgRE1BIHRyYW5zZmVyIGNvbXBsZXRlIGNhbGxiYWNrICovCisgICAgICAgIGhpMmMtPmhkbWFyeC0+WGZlckNwbHRDYWxsYmFjayA9IEkyQ19ETUFYZmVyQ3BsdDsKIAotICAgICAgLyogU2V0IHRoZSBETUEgZXJyb3IgY2FsbGJhY2sgKi8KLSAgICAgIGhpMmMtPmhkbWFyeC0+WGZlckVycm9yQ2FsbGJhY2sgPSBJMkNfRE1BRXJyb3I7CisgICAgICAgIC8qIFNldCB0aGUgRE1BIGVycm9yIGNhbGxiYWNrICovCisgICAgICAgIGhpMmMtPmhkbWFyeC0+WGZlckVycm9yQ2FsbGJhY2sgPSBJMkNfRE1BRXJyb3I7CiAKLSAgICAgIC8qIFNldCB0aGUgdW51c2VkIERNQSBjYWxsYmFja3MgdG8gTlVMTCAqLwotICAgICAgaGkyYy0+aGRtYXJ4LT5YZmVySGFsZkNwbHRDYWxsYmFjayA9IE5VTEw7Ci0gICAgICBoaTJjLT5oZG1hcngtPlhmZXJNMUNwbHRDYWxsYmFjayA9IE5VTEw7Ci0gICAgICBoaTJjLT5oZG1hcngtPlhmZXJNMUhhbGZDcGx0Q2FsbGJhY2sgPSBOVUxMOwotICAgICAgaGkyYy0+aGRtYXJ4LT5YZmVyQWJvcnRDYWxsYmFjayA9IE5VTEw7CisgICAgICAgIC8qIFNldCB0aGUgdW51c2VkIERNQSBjYWxsYmFja3MgdG8gTlVMTCAqLworICAgICAgICBoaTJjLT5oZG1hcngtPlhmZXJIYWxmQ3BsdENhbGxiYWNrID0gTlVMTDsKKyAgICAgICAgaGkyYy0+aGRtYXJ4LT5YZmVyTTFDcGx0Q2FsbGJhY2sgPSBOVUxMOworICAgICAgICBoaTJjLT5oZG1hcngtPlhmZXJNMUhhbGZDcGx0Q2FsbGJhY2sgPSBOVUxMOworICAgICAgICBoaTJjLT5oZG1hcngtPlhmZXJBYm9ydENhbGxiYWNrID0gTlVMTDsKIAotICAgICAgLyogRW5hYmxlIHRoZSBETUEgc3RyZWFtICovCi0gICAgICBkbWF4ZmVyc3RhdHVzID0gSEFMX0RNQV9TdGFydF9JVChoaTJjLT5oZG1hcngsICh1aW50MzJfdCkmaGkyYy0+SW5zdGFuY2UtPkRSLCAodWludDMyX3QpaGkyYy0+cEJ1ZmZQdHIsIGhpMmMtPlhmZXJTaXplKTsKKyAgICAgICAgLyogRW5hYmxlIHRoZSBETUEgc3RyZWFtICovCisgICAgICAgIGRtYXhmZXJzdGF0dXMgPSBIQUxfRE1BX1N0YXJ0X0lUKGhpMmMtPmhkbWFyeCwgKHVpbnQzMl90KSZoaTJjLT5JbnN0YW5jZS0+RFIsICh1aW50MzJfdCloaTJjLT5wQnVmZlB0ciwgaGkyYy0+WGZlclNpemUpOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICAvKiBVcGRhdGUgSTJDIHN0YXRlICovCisgICAgICAgIGhpMmMtPlN0YXRlICAgICA9IEhBTF9JMkNfU1RBVEVfUkVBRFk7CisgICAgICAgIGhpMmMtPk1vZGUgICAgICA9IEhBTF9JMkNfTU9ERV9OT05FOworCisgICAgICAgIC8qIFVwZGF0ZSBJMkMgZXJyb3IgY29kZSAqLworICAgICAgICBoaTJjLT5FcnJvckNvZGUgfD0gSEFMX0kyQ19FUlJPUl9ETUFfUEFSQU07CisKKyAgICAgICAgLyogUHJvY2VzcyBVbmxvY2tlZCAqLworICAgICAgICBfX0hBTF9VTkxPQ0soaGkyYyk7CisKKyAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgICAgIH0KIAogICAgICAgaWYgKGRtYXhmZXJzdGF0dXMgPT0gSEFMX09LKQogICAgICAgewpAQCAtMjI0NywyMCArMjI4MSwzNyBAQAogICAgIGhpMmMtPlhmZXJTaXplICAgID0gaGkyYy0+WGZlckNvdW50OwogICAgIGhpMmMtPlhmZXJPcHRpb25zID0gSTJDX05PX09QVElPTl9GUkFNRTsKIAotICAgIC8qIFNldCB0aGUgSTJDIERNQSB0cmFuc2ZlciBjb21wbGV0ZSBjYWxsYmFjayAqLwotICAgIGhpMmMtPmhkbWF0eC0+WGZlckNwbHRDYWxsYmFjayA9IEkyQ19ETUFYZmVyQ3BsdDsKKyAgICBpZiAoaGkyYy0+aGRtYXR4ICE9IE5VTEwpCisgICAgeworICAgICAgLyogU2V0IHRoZSBJMkMgRE1BIHRyYW5zZmVyIGNvbXBsZXRlIGNhbGxiYWNrICovCisgICAgICBoaTJjLT5oZG1hdHgtPlhmZXJDcGx0Q2FsbGJhY2sgPSBJMkNfRE1BWGZlckNwbHQ7CiAKLSAgICAvKiBTZXQgdGhlIERNQSBlcnJvciBjYWxsYmFjayAqLwotICAgIGhpMmMtPmhkbWF0eC0+WGZlckVycm9yQ2FsbGJhY2sgPSBJMkNfRE1BRXJyb3I7CisgICAgICAvKiBTZXQgdGhlIERNQSBlcnJvciBjYWxsYmFjayAqLworICAgICAgaGkyYy0+aGRtYXR4LT5YZmVyRXJyb3JDYWxsYmFjayA9IEkyQ19ETUFFcnJvcjsKIAotICAgIC8qIFNldCB0aGUgdW51c2VkIERNQSBjYWxsYmFja3MgdG8gTlVMTCAqLwotICAgIGhpMmMtPmhkbWF0eC0+WGZlckhhbGZDcGx0Q2FsbGJhY2sgPSBOVUxMOwotICAgIGhpMmMtPmhkbWF0eC0+WGZlck0xQ3BsdENhbGxiYWNrID0gTlVMTDsKLSAgICBoaTJjLT5oZG1hdHgtPlhmZXJNMUhhbGZDcGx0Q2FsbGJhY2sgPSBOVUxMOwotICAgIGhpMmMtPmhkbWF0eC0+WGZlckFib3J0Q2FsbGJhY2sgPSBOVUxMOworICAgICAgLyogU2V0IHRoZSB1bnVzZWQgRE1BIGNhbGxiYWNrcyB0byBOVUxMICovCisgICAgICBoaTJjLT5oZG1hdHgtPlhmZXJIYWxmQ3BsdENhbGxiYWNrID0gTlVMTDsKKyAgICAgIGhpMmMtPmhkbWF0eC0+WGZlck0xQ3BsdENhbGxiYWNrID0gTlVMTDsKKyAgICAgIGhpMmMtPmhkbWF0eC0+WGZlck0xSGFsZkNwbHRDYWxsYmFjayA9IE5VTEw7CisgICAgICBoaTJjLT5oZG1hdHgtPlhmZXJBYm9ydENhbGxiYWNrID0gTlVMTDsKIAotICAgIC8qIEVuYWJsZSB0aGUgRE1BIHN0cmVhbSAqLwotICAgIGRtYXhmZXJzdGF0dXMgPSBIQUxfRE1BX1N0YXJ0X0lUKGhpMmMtPmhkbWF0eCwgKHVpbnQzMl90KWhpMmMtPnBCdWZmUHRyLCAodWludDMyX3QpJmhpMmMtPkluc3RhbmNlLT5EUiwgaGkyYy0+WGZlclNpemUpOworICAgICAgLyogRW5hYmxlIHRoZSBETUEgc3RyZWFtICovCisgICAgICBkbWF4ZmVyc3RhdHVzID0gSEFMX0RNQV9TdGFydF9JVChoaTJjLT5oZG1hdHgsICh1aW50MzJfdCloaTJjLT5wQnVmZlB0ciwgKHVpbnQzMl90KSZoaTJjLT5JbnN0YW5jZS0+RFIsIGhpMmMtPlhmZXJTaXplKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIC8qIFVwZGF0ZSBJMkMgc3RhdGUgKi8KKyAgICAgIGhpMmMtPlN0YXRlICAgICA9IEhBTF9JMkNfU1RBVEVfTElTVEVOOworICAgICAgaGkyYy0+TW9kZSAgICAgID0gSEFMX0kyQ19NT0RFX05PTkU7CisKKyAgICAgIC8qIFVwZGF0ZSBJMkMgZXJyb3IgY29kZSAqLworICAgICAgaGkyYy0+RXJyb3JDb2RlIHw9IEhBTF9JMkNfRVJST1JfRE1BX1BBUkFNOworCisgICAgICAvKiBQcm9jZXNzIFVubG9ja2VkICovCisgICAgICBfX0hBTF9VTkxPQ0soaGkyYyk7CisKKyAgICAgIHJldHVybiBIQUxfRVJST1I7CisgICAgfQogCiAgICAgaWYgKGRtYXhmZXJzdGF0dXMgPT0gSEFMX09LKQogICAgIHsKQEAgLTIzNDQsMjAgKzIzOTUsMzcgQEAKICAgICBoaTJjLT5YZmVyU2l6ZSAgICA9IGhpMmMtPlhmZXJDb3VudDsKICAgICBoaTJjLT5YZmVyT3B0aW9ucyA9IEkyQ19OT19PUFRJT05fRlJBTUU7CiAKLSAgICAvKiBTZXQgdGhlIEkyQyBETUEgdHJhbnNmZXIgY29tcGxldGUgY2FsbGJhY2sgKi8KLSAgICBoaTJjLT5oZG1hcngtPlhmZXJDcGx0Q2FsbGJhY2sgPSBJMkNfRE1BWGZlckNwbHQ7CisgICAgaWYgKGhpMmMtPmhkbWFyeCAhPSBOVUxMKQorICAgIHsKKyAgICAgIC8qIFNldCB0aGUgSTJDIERNQSB0cmFuc2ZlciBjb21wbGV0ZSBjYWxsYmFjayAqLworICAgICAgaGkyYy0+aGRtYXJ4LT5YZmVyQ3BsdENhbGxiYWNrID0gSTJDX0RNQVhmZXJDcGx0OwogCi0gICAgLyogU2V0IHRoZSBETUEgZXJyb3IgY2FsbGJhY2sgKi8KLSAgICBoaTJjLT5oZG1hcngtPlhmZXJFcnJvckNhbGxiYWNrID0gSTJDX0RNQUVycm9yOworICAgICAgLyogU2V0IHRoZSBETUEgZXJyb3IgY2FsbGJhY2sgKi8KKyAgICAgIGhpMmMtPmhkbWFyeC0+WGZlckVycm9yQ2FsbGJhY2sgPSBJMkNfRE1BRXJyb3I7CiAKLSAgICAvKiBTZXQgdGhlIHVudXNlZCBETUEgY2FsbGJhY2tzIHRvIE5VTEwgKi8KLSAgICBoaTJjLT5oZG1hcngtPlhmZXJIYWxmQ3BsdENhbGxiYWNrID0gTlVMTDsKLSAgICBoaTJjLT5oZG1hcngtPlhmZXJNMUNwbHRDYWxsYmFjayA9IE5VTEw7Ci0gICAgaGkyYy0+aGRtYXJ4LT5YZmVyTTFIYWxmQ3BsdENhbGxiYWNrID0gTlVMTDsKLSAgICBoaTJjLT5oZG1hcngtPlhmZXJBYm9ydENhbGxiYWNrID0gTlVMTDsKKyAgICAgIC8qIFNldCB0aGUgdW51c2VkIERNQSBjYWxsYmFja3MgdG8gTlVMTCAqLworICAgICAgaGkyYy0+aGRtYXJ4LT5YZmVySGFsZkNwbHRDYWxsYmFjayA9IE5VTEw7CisgICAgICBoaTJjLT5oZG1hcngtPlhmZXJNMUNwbHRDYWxsYmFjayA9IE5VTEw7CisgICAgICBoaTJjLT5oZG1hcngtPlhmZXJNMUhhbGZDcGx0Q2FsbGJhY2sgPSBOVUxMOworICAgICAgaGkyYy0+aGRtYXJ4LT5YZmVyQWJvcnRDYWxsYmFjayA9IE5VTEw7CiAKLSAgICAvKiBFbmFibGUgdGhlIERNQSBzdHJlYW0gKi8KLSAgICBkbWF4ZmVyc3RhdHVzID0gSEFMX0RNQV9TdGFydF9JVChoaTJjLT5oZG1hcngsICh1aW50MzJfdCkmaGkyYy0+SW5zdGFuY2UtPkRSLCAodWludDMyX3QpaGkyYy0+cEJ1ZmZQdHIsIGhpMmMtPlhmZXJTaXplKTsKKyAgICAgIC8qIEVuYWJsZSB0aGUgRE1BIHN0cmVhbSAqLworICAgICAgZG1heGZlcnN0YXR1cyA9IEhBTF9ETUFfU3RhcnRfSVQoaGkyYy0+aGRtYXJ4LCAodWludDMyX3QpJmhpMmMtPkluc3RhbmNlLT5EUiwgKHVpbnQzMl90KWhpMmMtPnBCdWZmUHRyLCBoaTJjLT5YZmVyU2l6ZSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAvKiBVcGRhdGUgSTJDIHN0YXRlICovCisgICAgICBoaTJjLT5TdGF0ZSAgICAgPSBIQUxfSTJDX1NUQVRFX0xJU1RFTjsKKyAgICAgIGhpMmMtPk1vZGUgICAgICA9IEhBTF9JMkNfTU9ERV9OT05FOworCisgICAgICAvKiBVcGRhdGUgSTJDIGVycm9yIGNvZGUgKi8KKyAgICAgIGhpMmMtPkVycm9yQ29kZSB8PSBIQUxfSTJDX0VSUk9SX0RNQV9QQVJBTTsKKworICAgICAgLyogUHJvY2VzcyBVbmxvY2tlZCAqLworICAgICAgX19IQUxfVU5MT0NLKGhpMmMpOworCisgICAgICByZXR1cm4gSEFMX0VSUk9SOworICAgIH0KIAogICAgIGlmIChkbWF4ZmVyc3RhdHVzID09IEhBTF9PSykKICAgICB7CkBAIC0zMDIyLDIwICszMDkwLDM3IEBACiAKICAgICBpZiAoaGkyYy0+WGZlclNpemUgPiAwVSkKICAgICB7Ci0gICAgICAvKiBTZXQgdGhlIEkyQyBETUEgdHJhbnNmZXIgY29tcGxldGUgY2FsbGJhY2sgKi8KLSAgICAgIGhpMmMtPmhkbWF0eC0+WGZlckNwbHRDYWxsYmFjayA9IEkyQ19ETUFYZmVyQ3BsdDsKKyAgICAgIGlmIChoaTJjLT5oZG1hdHggIT0gTlVMTCkKKyAgICAgIHsKKyAgICAgICAgLyogU2V0IHRoZSBJMkMgRE1BIHRyYW5zZmVyIGNvbXBsZXRlIGNhbGxiYWNrICovCisgICAgICAgIGhpMmMtPmhkbWF0eC0+WGZlckNwbHRDYWxsYmFjayA9IEkyQ19ETUFYZmVyQ3BsdDsKIAotICAgICAgLyogU2V0IHRoZSBETUEgZXJyb3IgY2FsbGJhY2sgKi8KLSAgICAgIGhpMmMtPmhkbWF0eC0+WGZlckVycm9yQ2FsbGJhY2sgPSBJMkNfRE1BRXJyb3I7CisgICAgICAgIC8qIFNldCB0aGUgRE1BIGVycm9yIGNhbGxiYWNrICovCisgICAgICAgIGhpMmMtPmhkbWF0eC0+WGZlckVycm9yQ2FsbGJhY2sgPSBJMkNfRE1BRXJyb3I7CiAKLSAgICAgIC8qIFNldCB0aGUgdW51c2VkIERNQSBjYWxsYmFja3MgdG8gTlVMTCAqLwotICAgICAgaGkyYy0+aGRtYXR4LT5YZmVySGFsZkNwbHRDYWxsYmFjayA9IE5VTEw7Ci0gICAgICBoaTJjLT5oZG1hdHgtPlhmZXJNMUNwbHRDYWxsYmFjayA9IE5VTEw7Ci0gICAgICBoaTJjLT5oZG1hdHgtPlhmZXJNMUhhbGZDcGx0Q2FsbGJhY2sgPSBOVUxMOwotICAgICAgaGkyYy0+aGRtYXR4LT5YZmVyQWJvcnRDYWxsYmFjayA9IE5VTEw7CisgICAgICAgIC8qIFNldCB0aGUgdW51c2VkIERNQSBjYWxsYmFja3MgdG8gTlVMTCAqLworICAgICAgICBoaTJjLT5oZG1hdHgtPlhmZXJIYWxmQ3BsdENhbGxiYWNrID0gTlVMTDsKKyAgICAgICAgaGkyYy0+aGRtYXR4LT5YZmVyTTFDcGx0Q2FsbGJhY2sgPSBOVUxMOworICAgICAgICBoaTJjLT5oZG1hdHgtPlhmZXJNMUhhbGZDcGx0Q2FsbGJhY2sgPSBOVUxMOworICAgICAgICBoaTJjLT5oZG1hdHgtPlhmZXJBYm9ydENhbGxiYWNrID0gTlVMTDsKIAotICAgICAgLyogRW5hYmxlIHRoZSBETUEgc3RyZWFtICovCi0gICAgICBkbWF4ZmVyc3RhdHVzID0gSEFMX0RNQV9TdGFydF9JVChoaTJjLT5oZG1hdHgsICh1aW50MzJfdCloaTJjLT5wQnVmZlB0ciwgKHVpbnQzMl90KSZoaTJjLT5JbnN0YW5jZS0+RFIsIGhpMmMtPlhmZXJTaXplKTsKKyAgICAgICAgLyogRW5hYmxlIHRoZSBETUEgc3RyZWFtICovCisgICAgICAgIGRtYXhmZXJzdGF0dXMgPSBIQUxfRE1BX1N0YXJ0X0lUKGhpMmMtPmhkbWF0eCwgKHVpbnQzMl90KWhpMmMtPnBCdWZmUHRyLCAodWludDMyX3QpJmhpMmMtPkluc3RhbmNlLT5EUiwgaGkyYy0+WGZlclNpemUpOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICAvKiBVcGRhdGUgSTJDIHN0YXRlICovCisgICAgICAgIGhpMmMtPlN0YXRlICAgICA9IEhBTF9JMkNfU1RBVEVfUkVBRFk7CisgICAgICAgIGhpMmMtPk1vZGUgICAgICA9IEhBTF9JMkNfTU9ERV9OT05FOworCisgICAgICAgIC8qIFVwZGF0ZSBJMkMgZXJyb3IgY29kZSAqLworICAgICAgICBoaTJjLT5FcnJvckNvZGUgfD0gSEFMX0kyQ19FUlJPUl9ETUFfUEFSQU07CisKKyAgICAgICAgLyogUHJvY2VzcyBVbmxvY2tlZCAqLworICAgICAgICBfX0hBTF9VTkxPQ0soaGkyYyk7CisKKyAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgICAgIH0KIAogICAgICAgaWYgKGRtYXhmZXJzdGF0dXMgPT0gSEFMX09LKQogICAgICAgewpAQCAtMzA0OCwxMSArMzEzMyw4IEBACiAgICAgICAgICAgLyogUHJldmVudCB1bnVzZWQgYXJndW1lbnQocykgY29tcGlsYXRpb24gYW5kIE1JU1JBIHdhcm5pbmcgKi8KICAgICAgICAgICBVTlVTRUQoZG1heGZlcnN0YXR1cyk7CiAKLSAgICAgICAgICAvKiBDbGVhciBkaXJlY3RseSBDb21wbGV0ZSBjYWxsYmFjayBhcyBubyBYZmVyQWJvcnRDYWxsYmFjayBpcyB1c2VkIHRvIGZpbmFsaXplIEFib3J0IHRyZWF0bWVudCAqLwotICAgICAgICAgIGlmIChoaTJjLT5oZG1hdHggIT0gTlVMTCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBoaTJjLT5oZG1hdHgtPlhmZXJDcGx0Q2FsbGJhY2sgPSBOVUxMOwotICAgICAgICAgIH0KKyAgICAgICAgICAvKiBTZXQgdGhlIHVudXNlZCBJMkMgRE1BIHRyYW5zZmVyIGNvbXBsZXRlIGNhbGxiYWNrIHRvIE5VTEwgKi8KKyAgICAgICAgICBoaTJjLT5oZG1hdHgtPlhmZXJDcGx0Q2FsbGJhY2sgPSBOVUxMOwogCiAgICAgICAgICAgLyogRGlzYWJsZSBBY2tub3dsZWRnZSAqLwogICAgICAgICAgIENMRUFSX0JJVChoaTJjLT5JbnN0YW5jZS0+Q1IxLCBJMkNfQ1IxX0FDSyk7CkBAIC0zMTg4LDIwICszMjcwLDM3IEBACiAKICAgICBpZiAoaGkyYy0+WGZlclNpemUgPiAwVSkKICAgICB7Ci0gICAgICAvKiBTZXQgdGhlIEkyQyBETUEgdHJhbnNmZXIgY29tcGxldGUgY2FsbGJhY2sgKi8KLSAgICAgIGhpMmMtPmhkbWFyeC0+WGZlckNwbHRDYWxsYmFjayA9IEkyQ19ETUFYZmVyQ3BsdDsKKyAgICAgIGlmIChoaTJjLT5oZG1hcnggIT0gTlVMTCkKKyAgICAgIHsKKyAgICAgICAgLyogU2V0IHRoZSBJMkMgRE1BIHRyYW5zZmVyIGNvbXBsZXRlIGNhbGxiYWNrICovCisgICAgICAgIGhpMmMtPmhkbWFyeC0+WGZlckNwbHRDYWxsYmFjayA9IEkyQ19ETUFYZmVyQ3BsdDsKIAotICAgICAgLyogU2V0IHRoZSBETUEgZXJyb3IgY2FsbGJhY2sgKi8KLSAgICAgIGhpMmMtPmhkbWFyeC0+WGZlckVycm9yQ2FsbGJhY2sgPSBJMkNfRE1BRXJyb3I7CisgICAgICAgIC8qIFNldCB0aGUgRE1BIGVycm9yIGNhbGxiYWNrICovCisgICAgICAgIGhpMmMtPmhkbWFyeC0+WGZlckVycm9yQ2FsbGJhY2sgPSBJMkNfRE1BRXJyb3I7CiAKLSAgICAgIC8qIFNldCB0aGUgdW51c2VkIERNQSBjYWxsYmFja3MgdG8gTlVMTCAqLwotICAgICAgaGkyYy0+aGRtYXJ4LT5YZmVySGFsZkNwbHRDYWxsYmFjayA9IE5VTEw7Ci0gICAgICBoaTJjLT5oZG1hcngtPlhmZXJNMUNwbHRDYWxsYmFjayA9IE5VTEw7Ci0gICAgICBoaTJjLT5oZG1hcngtPlhmZXJNMUhhbGZDcGx0Q2FsbGJhY2sgPSBOVUxMOwotICAgICAgaGkyYy0+aGRtYXJ4LT5YZmVyQWJvcnRDYWxsYmFjayA9IE5VTEw7CisgICAgICAgIC8qIFNldCB0aGUgdW51c2VkIERNQSBjYWxsYmFja3MgdG8gTlVMTCAqLworICAgICAgICBoaTJjLT5oZG1hcngtPlhmZXJIYWxmQ3BsdENhbGxiYWNrID0gTlVMTDsKKyAgICAgICAgaGkyYy0+aGRtYXJ4LT5YZmVyTTFDcGx0Q2FsbGJhY2sgPSBOVUxMOworICAgICAgICBoaTJjLT5oZG1hcngtPlhmZXJNMUhhbGZDcGx0Q2FsbGJhY2sgPSBOVUxMOworICAgICAgICBoaTJjLT5oZG1hcngtPlhmZXJBYm9ydENhbGxiYWNrID0gTlVMTDsKIAotICAgICAgLyogRW5hYmxlIHRoZSBETUEgc3RyZWFtICovCi0gICAgICBkbWF4ZmVyc3RhdHVzID0gSEFMX0RNQV9TdGFydF9JVChoaTJjLT5oZG1hcngsICh1aW50MzJfdCkmaGkyYy0+SW5zdGFuY2UtPkRSLCAodWludDMyX3QpaGkyYy0+cEJ1ZmZQdHIsIGhpMmMtPlhmZXJTaXplKTsKKyAgICAgICAgLyogRW5hYmxlIHRoZSBETUEgc3RyZWFtICovCisgICAgICAgIGRtYXhmZXJzdGF0dXMgPSBIQUxfRE1BX1N0YXJ0X0lUKGhpMmMtPmhkbWFyeCwgKHVpbnQzMl90KSZoaTJjLT5JbnN0YW5jZS0+RFIsICh1aW50MzJfdCloaTJjLT5wQnVmZlB0ciwgaGkyYy0+WGZlclNpemUpOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICAvKiBVcGRhdGUgSTJDIHN0YXRlICovCisgICAgICAgIGhpMmMtPlN0YXRlICAgICA9IEhBTF9JMkNfU1RBVEVfUkVBRFk7CisgICAgICAgIGhpMmMtPk1vZGUgICAgICA9IEhBTF9JMkNfTU9ERV9OT05FOworCisgICAgICAgIC8qIFVwZGF0ZSBJMkMgZXJyb3IgY29kZSAqLworICAgICAgICBoaTJjLT5FcnJvckNvZGUgfD0gSEFMX0kyQ19FUlJPUl9ETUFfUEFSQU07CisKKyAgICAgICAgLyogUHJvY2VzcyBVbmxvY2tlZCAqLworICAgICAgICBfX0hBTF9VTkxPQ0soaGkyYyk7CisKKyAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgICAgIH0KIAogICAgICAgaWYgKGRtYXhmZXJzdGF0dXMgPT0gSEFMX09LKQogICAgICAgewpAQCAtMzIxNCwxMSArMzMxMyw4IEBACiAgICAgICAgICAgLyogUHJldmVudCB1bnVzZWQgYXJndW1lbnQocykgY29tcGlsYXRpb24gYW5kIE1JU1JBIHdhcm5pbmcgKi8KICAgICAgICAgICBVTlVTRUQoZG1heGZlcnN0YXR1cyk7CiAKLSAgICAgICAgICAvKiBDbGVhciBkaXJlY3RseSBDb21wbGV0ZSBjYWxsYmFjayBhcyBubyBYZmVyQWJvcnRDYWxsYmFjayBpcyB1c2VkIHRvIGZpbmFsaXplIEFib3J0IHRyZWF0bWVudCAqLwotICAgICAgICAgIGlmIChoaTJjLT5oZG1hcnggIT0gTlVMTCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBoaTJjLT5oZG1hcngtPlhmZXJDcGx0Q2FsbGJhY2sgPSBOVUxMOwotICAgICAgICAgIH0KKyAgICAgICAgICAvKiBTZXQgdGhlIHVudXNlZCBJMkMgRE1BIHRyYW5zZmVyIGNvbXBsZXRlIGNhbGxiYWNrIHRvIE5VTEwgKi8KKyAgICAgICAgICBoaTJjLT5oZG1hcngtPlhmZXJDcGx0Q2FsbGJhY2sgPSBOVUxMOwogCiAgICAgICAgICAgLyogRGlzYWJsZSBBY2tub3dsZWRnZSAqLwogICAgICAgICAgIENMRUFSX0JJVChoaTJjLT5JbnN0YW5jZS0+Q1IxLCBJMkNfQ1IxX0FDSyk7CkBAIC0zNjA5LDE4ICszNzA1LDM1IEBACiAKICAgICBpZiAoaGkyYy0+WGZlclNpemUgPiAwVSkKICAgICB7Ci0gICAgICAvKiBTZXQgdGhlIEkyQyBETUEgdHJhbnNmZXIgY29tcGxldGUgY2FsbGJhY2sgKi8KLSAgICAgIGhpMmMtPmhkbWF0eC0+WGZlckNwbHRDYWxsYmFjayA9IEkyQ19ETUFYZmVyQ3BsdDsKKyAgICAgIGlmIChoaTJjLT5oZG1hdHggIT0gTlVMTCkKKyAgICAgIHsKKyAgICAgICAgLyogU2V0IHRoZSBJMkMgRE1BIHRyYW5zZmVyIGNvbXBsZXRlIGNhbGxiYWNrICovCisgICAgICAgIGhpMmMtPmhkbWF0eC0+WGZlckNwbHRDYWxsYmFjayA9IEkyQ19ETUFYZmVyQ3BsdDsKIAotICAgICAgLyogU2V0IHRoZSBETUEgZXJyb3IgY2FsbGJhY2sgKi8KLSAgICAgIGhpMmMtPmhkbWF0eC0+WGZlckVycm9yQ2FsbGJhY2sgPSBJMkNfRE1BRXJyb3I7CisgICAgICAgIC8qIFNldCB0aGUgRE1BIGVycm9yIGNhbGxiYWNrICovCisgICAgICAgIGhpMmMtPmhkbWF0eC0+WGZlckVycm9yQ2FsbGJhY2sgPSBJMkNfRE1BRXJyb3I7CiAKLSAgICAgIC8qIFNldCB0aGUgdW51c2VkIERNQSBjYWxsYmFja3MgdG8gTlVMTCAqLwotICAgICAgaGkyYy0+aGRtYXR4LT5YZmVySGFsZkNwbHRDYWxsYmFjayA9IE5VTEw7Ci0gICAgICBoaTJjLT5oZG1hdHgtPlhmZXJBYm9ydENhbGxiYWNrID0gTlVMTDsKKyAgICAgICAgLyogU2V0IHRoZSB1bnVzZWQgRE1BIGNhbGxiYWNrcyB0byBOVUxMICovCisgICAgICAgIGhpMmMtPmhkbWF0eC0+WGZlckhhbGZDcGx0Q2FsbGJhY2sgPSBOVUxMOworICAgICAgICBoaTJjLT5oZG1hdHgtPlhmZXJBYm9ydENhbGxiYWNrID0gTlVMTDsKIAotICAgICAgLyogRW5hYmxlIHRoZSBETUEgc3RyZWFtICovCi0gICAgICBkbWF4ZmVyc3RhdHVzID0gSEFMX0RNQV9TdGFydF9JVChoaTJjLT5oZG1hdHgsICh1aW50MzJfdCloaTJjLT5wQnVmZlB0ciwgKHVpbnQzMl90KSZoaTJjLT5JbnN0YW5jZS0+RFIsIGhpMmMtPlhmZXJTaXplKTsKKyAgICAgICAgLyogRW5hYmxlIHRoZSBETUEgc3RyZWFtICovCisgICAgICAgIGRtYXhmZXJzdGF0dXMgPSBIQUxfRE1BX1N0YXJ0X0lUKGhpMmMtPmhkbWF0eCwgKHVpbnQzMl90KWhpMmMtPnBCdWZmUHRyLCAodWludDMyX3QpJmhpMmMtPkluc3RhbmNlLT5EUiwgaGkyYy0+WGZlclNpemUpOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICAvKiBVcGRhdGUgSTJDIHN0YXRlICovCisgICAgICAgIGhpMmMtPlN0YXRlICAgICA9IEhBTF9JMkNfU1RBVEVfUkVBRFk7CisgICAgICAgIGhpMmMtPk1vZGUgICAgICA9IEhBTF9JMkNfTU9ERV9OT05FOworCisgICAgICAgIC8qIFVwZGF0ZSBJMkMgZXJyb3IgY29kZSAqLworICAgICAgICBoaTJjLT5FcnJvckNvZGUgfD0gSEFMX0kyQ19FUlJPUl9ETUFfUEFSQU07CisKKyAgICAgICAgLyogUHJvY2VzcyBVbmxvY2tlZCAqLworICAgICAgICBfX0hBTF9VTkxPQ0soaGkyYyk7CisKKyAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgICAgIH0KIAogICAgICAgaWYgKGRtYXhmZXJzdGF0dXMgPT0gSEFMX09LKQogICAgICAgewpAQCAtMzkzMywyMCArNDA0NiwzNSBAQAogICAgICAgICAgIFNFVF9CSVQoaGkyYy0+SW5zdGFuY2UtPkNSMiwgSTJDX0NSMl9MQVNUKTsKICAgICAgICAgfQogICAgICAgfQorICAgICAgaWYgKGhpMmMtPmhkbWFyeCAhPSBOVUxMKQorICAgICAgeworICAgICAgICAvKiBTZXQgdGhlIEkyQyBETUEgdHJhbnNmZXIgY29tcGxldGUgY2FsbGJhY2sgKi8KKyAgICAgICAgaGkyYy0+aGRtYXJ4LT5YZmVyQ3BsdENhbGxiYWNrID0gSTJDX0RNQVhmZXJDcGx0OwogCi0gICAgICAvKiBTZXQgdGhlIEkyQyBETUEgdHJhbnNmZXIgY29tcGxldGUgY2FsbGJhY2sgKi8KLSAgICAgIGhpMmMtPmhkbWFyeC0+WGZlckNwbHRDYWxsYmFjayA9IEkyQ19ETUFYZmVyQ3BsdDsKKyAgICAgICAgLyogU2V0IHRoZSBETUEgZXJyb3IgY2FsbGJhY2sgKi8KKyAgICAgICAgaGkyYy0+aGRtYXJ4LT5YZmVyRXJyb3JDYWxsYmFjayA9IEkyQ19ETUFFcnJvcjsKIAotICAgICAgLyogU2V0IHRoZSBETUEgZXJyb3IgY2FsbGJhY2sgKi8KLSAgICAgIGhpMmMtPmhkbWFyeC0+WGZlckVycm9yQ2FsbGJhY2sgPSBJMkNfRE1BRXJyb3I7CisgICAgICAgIC8qIFNldCB0aGUgdW51c2VkIERNQSBjYWxsYmFja3MgdG8gTlVMTCAqLworICAgICAgICBoaTJjLT5oZG1hcngtPlhmZXJIYWxmQ3BsdENhbGxiYWNrID0gTlVMTDsKKyAgICAgICAgaGkyYy0+aGRtYXJ4LT5YZmVyQWJvcnRDYWxsYmFjayA9IE5VTEw7CiAKLSAgICAgIC8qIFNldCB0aGUgdW51c2VkIERNQSBjYWxsYmFja3MgdG8gTlVMTCAqLwotICAgICAgaGkyYy0+aGRtYXJ4LT5YZmVySGFsZkNwbHRDYWxsYmFjayA9IE5VTEw7Ci0gICAgICBoaTJjLT5oZG1hcngtPlhmZXJBYm9ydENhbGxiYWNrID0gTlVMTDsKKyAgICAgICAgLyogRW5hYmxlIHRoZSBETUEgc3RyZWFtICovCisgICAgICAgIGRtYXhmZXJzdGF0dXMgPSBIQUxfRE1BX1N0YXJ0X0lUKGhpMmMtPmhkbWFyeCwgKHVpbnQzMl90KSZoaTJjLT5JbnN0YW5jZS0+RFIsICh1aW50MzJfdCloaTJjLT5wQnVmZlB0ciwgaGkyYy0+WGZlclNpemUpOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICAvKiBVcGRhdGUgSTJDIHN0YXRlICovCisgICAgICAgIGhpMmMtPlN0YXRlICAgICA9IEhBTF9JMkNfU1RBVEVfUkVBRFk7CisgICAgICAgIGhpMmMtPk1vZGUgICAgICA9IEhBTF9JMkNfTU9ERV9OT05FOwogCi0gICAgICAvKiBFbmFibGUgdGhlIERNQSBzdHJlYW0gKi8KLSAgICAgIGRtYXhmZXJzdGF0dXMgPSBIQUxfRE1BX1N0YXJ0X0lUKGhpMmMtPmhkbWFyeCwgKHVpbnQzMl90KSZoaTJjLT5JbnN0YW5jZS0+RFIsICh1aW50MzJfdCloaTJjLT5wQnVmZlB0ciwgaGkyYy0+WGZlclNpemUpOworICAgICAgICAvKiBVcGRhdGUgSTJDIGVycm9yIGNvZGUgKi8KKyAgICAgICAgaGkyYy0+RXJyb3JDb2RlIHw9IEhBTF9JMkNfRVJST1JfRE1BX1BBUkFNOwogCisgICAgICAgIC8qIFByb2Nlc3MgVW5sb2NrZWQgKi8KKyAgICAgICAgX19IQUxfVU5MT0NLKGhpMmMpOworCisgICAgICAgIHJldHVybiBIQUxfRVJST1I7CisgICAgICB9CiAgICAgICBpZiAoZG1heGZlcnN0YXR1cyA9PSBIQUxfT0spCiAgICAgICB7CiAgICAgICAgIC8qIElmIHRyYW5zZmVyIGRpcmVjdGlvbiBub3QgY2hhbmdlIGFuZCB0aGVyZSBpcyBubyByZXF1ZXN0IHRvIHN0YXJ0IGFub3RoZXIgZnJhbWUsIGRvIG5vdCBnZW5lcmF0ZSBSZXN0YXJ0IENvbmRpdGlvbiAqLwpAQCAtNDE5NiwxOCArNDMyNCwzNSBAQAogICAgIGhpMmMtPlhmZXJTaXplICAgID0gaGkyYy0+WGZlckNvdW50OwogICAgIGhpMmMtPlhmZXJPcHRpb25zID0gWGZlck9wdGlvbnM7CiAKLSAgICAvKiBTZXQgdGhlIEkyQyBETUEgdHJhbnNmZXIgY29tcGxldGUgY2FsbGJhY2sgKi8KLSAgICBoaTJjLT5oZG1hdHgtPlhmZXJDcGx0Q2FsbGJhY2sgPSBJMkNfRE1BWGZlckNwbHQ7CisgICAgaWYgKGhpMmMtPmhkbWF0eCAhPSBOVUxMKQorICAgIHsKKyAgICAgIC8qIFNldCB0aGUgSTJDIERNQSB0cmFuc2ZlciBjb21wbGV0ZSBjYWxsYmFjayAqLworICAgICAgaGkyYy0+aGRtYXR4LT5YZmVyQ3BsdENhbGxiYWNrID0gSTJDX0RNQVhmZXJDcGx0OwogCi0gICAgLyogU2V0IHRoZSBETUEgZXJyb3IgY2FsbGJhY2sgKi8KLSAgICBoaTJjLT5oZG1hdHgtPlhmZXJFcnJvckNhbGxiYWNrID0gSTJDX0RNQUVycm9yOworICAgICAgLyogU2V0IHRoZSBETUEgZXJyb3IgY2FsbGJhY2sgKi8KKyAgICAgIGhpMmMtPmhkbWF0eC0+WGZlckVycm9yQ2FsbGJhY2sgPSBJMkNfRE1BRXJyb3I7CiAKLSAgICAvKiBTZXQgdGhlIHVudXNlZCBETUEgY2FsbGJhY2tzIHRvIE5VTEwgKi8KLSAgICBoaTJjLT5oZG1hdHgtPlhmZXJIYWxmQ3BsdENhbGxiYWNrID0gTlVMTDsKLSAgICBoaTJjLT5oZG1hdHgtPlhmZXJBYm9ydENhbGxiYWNrID0gTlVMTDsKKyAgICAgIC8qIFNldCB0aGUgdW51c2VkIERNQSBjYWxsYmFja3MgdG8gTlVMTCAqLworICAgICAgaGkyYy0+aGRtYXR4LT5YZmVySGFsZkNwbHRDYWxsYmFjayA9IE5VTEw7CisgICAgICBoaTJjLT5oZG1hdHgtPlhmZXJBYm9ydENhbGxiYWNrID0gTlVMTDsKIAotICAgIC8qIEVuYWJsZSB0aGUgRE1BIHN0cmVhbSAqLwotICAgIGRtYXhmZXJzdGF0dXMgPSBIQUxfRE1BX1N0YXJ0X0lUKGhpMmMtPmhkbWF0eCwgKHVpbnQzMl90KWhpMmMtPnBCdWZmUHRyLCAodWludDMyX3QpJmhpMmMtPkluc3RhbmNlLT5EUiwgaGkyYy0+WGZlclNpemUpOworICAgICAgLyogRW5hYmxlIHRoZSBETUEgc3RyZWFtICovCisgICAgICBkbWF4ZmVyc3RhdHVzID0gSEFMX0RNQV9TdGFydF9JVChoaTJjLT5oZG1hdHgsICh1aW50MzJfdCloaTJjLT5wQnVmZlB0ciwgKHVpbnQzMl90KSZoaTJjLT5JbnN0YW5jZS0+RFIsIGhpMmMtPlhmZXJTaXplKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIC8qIFVwZGF0ZSBJMkMgc3RhdGUgKi8KKyAgICAgIGhpMmMtPlN0YXRlICAgICA9IEhBTF9JMkNfU1RBVEVfTElTVEVOOworICAgICAgaGkyYy0+TW9kZSAgICAgID0gSEFMX0kyQ19NT0RFX05PTkU7CisKKyAgICAgIC8qIFVwZGF0ZSBJMkMgZXJyb3IgY29kZSAqLworICAgICAgaGkyYy0+RXJyb3JDb2RlIHw9IEhBTF9JMkNfRVJST1JfRE1BX1BBUkFNOworCisgICAgICAvKiBQcm9jZXNzIFVubG9ja2VkICovCisgICAgICBfX0hBTF9VTkxPQ0soaGkyYyk7CisKKyAgICAgIHJldHVybiBIQUxfRVJST1I7CisgICAgfQogCiAgICAgaWYgKGRtYXhmZXJzdGF0dXMgPT0gSEFMX09LKQogICAgIHsKQEAgLTQ0MTksMTggKzQ1NjQsMzUgQEAKICAgICBoaTJjLT5YZmVyU2l6ZSAgICA9IGhpMmMtPlhmZXJDb3VudDsKICAgICBoaTJjLT5YZmVyT3B0aW9ucyA9IFhmZXJPcHRpb25zOwogCi0gICAgLyogU2V0IHRoZSBJMkMgRE1BIHRyYW5zZmVyIGNvbXBsZXRlIGNhbGxiYWNrICovCi0gICAgaGkyYy0+aGRtYXJ4LT5YZmVyQ3BsdENhbGxiYWNrID0gSTJDX0RNQVhmZXJDcGx0OworICAgIGlmIChoaTJjLT5oZG1hcnggIT0gTlVMTCkKKyAgICB7CisgICAgICAvKiBTZXQgdGhlIEkyQyBETUEgdHJhbnNmZXIgY29tcGxldGUgY2FsbGJhY2sgKi8KKyAgICAgIGhpMmMtPmhkbWFyeC0+WGZlckNwbHRDYWxsYmFjayA9IEkyQ19ETUFYZmVyQ3BsdDsKIAotICAgIC8qIFNldCB0aGUgRE1BIGVycm9yIGNhbGxiYWNrICovCi0gICAgaGkyYy0+aGRtYXJ4LT5YZmVyRXJyb3JDYWxsYmFjayA9IEkyQ19ETUFFcnJvcjsKKyAgICAgIC8qIFNldCB0aGUgRE1BIGVycm9yIGNhbGxiYWNrICovCisgICAgICBoaTJjLT5oZG1hcngtPlhmZXJFcnJvckNhbGxiYWNrID0gSTJDX0RNQUVycm9yOwogCi0gICAgLyogU2V0IHRoZSB1bnVzZWQgRE1BIGNhbGxiYWNrcyB0byBOVUxMICovCi0gICAgaGkyYy0+aGRtYXJ4LT5YZmVySGFsZkNwbHRDYWxsYmFjayA9IE5VTEw7Ci0gICAgaGkyYy0+aGRtYXJ4LT5YZmVyQWJvcnRDYWxsYmFjayA9IE5VTEw7CisgICAgICAvKiBTZXQgdGhlIHVudXNlZCBETUEgY2FsbGJhY2tzIHRvIE5VTEwgKi8KKyAgICAgIGhpMmMtPmhkbWFyeC0+WGZlckhhbGZDcGx0Q2FsbGJhY2sgPSBOVUxMOworICAgICAgaGkyYy0+aGRtYXJ4LT5YZmVyQWJvcnRDYWxsYmFjayA9IE5VTEw7CiAKLSAgICAvKiBFbmFibGUgdGhlIERNQSBzdHJlYW0gKi8KLSAgICBkbWF4ZmVyc3RhdHVzID0gSEFMX0RNQV9TdGFydF9JVChoaTJjLT5oZG1hcngsICh1aW50MzJfdCkmaGkyYy0+SW5zdGFuY2UtPkRSLCAodWludDMyX3QpaGkyYy0+cEJ1ZmZQdHIsIGhpMmMtPlhmZXJTaXplKTsKKyAgICAgIC8qIEVuYWJsZSB0aGUgRE1BIHN0cmVhbSAqLworICAgICAgZG1heGZlcnN0YXR1cyA9IEhBTF9ETUFfU3RhcnRfSVQoaGkyYy0+aGRtYXJ4LCAodWludDMyX3QpJmhpMmMtPkluc3RhbmNlLT5EUiwgKHVpbnQzMl90KWhpMmMtPnBCdWZmUHRyLCBoaTJjLT5YZmVyU2l6ZSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAvKiBVcGRhdGUgSTJDIHN0YXRlICovCisgICAgICBoaTJjLT5TdGF0ZSAgICAgPSBIQUxfSTJDX1NUQVRFX0xJU1RFTjsKKyAgICAgIGhpMmMtPk1vZGUgICAgICA9IEhBTF9JMkNfTU9ERV9OT05FOworCisgICAgICAvKiBVcGRhdGUgSTJDIGVycm9yIGNvZGUgKi8KKyAgICAgIGhpMmMtPkVycm9yQ29kZSB8PSBIQUxfSTJDX0VSUk9SX0RNQV9QQVJBTTsKKworICAgICAgLyogUHJvY2VzcyBVbmxvY2tlZCAqLworICAgICAgX19IQUxfVU5MT0NLKGhpMmMpOworCisgICAgICByZXR1cm4gSEFMX0VSUk9SOworICAgIH0KIAogICAgIGlmIChkbWF4ZmVyc3RhdHVzID09IEhBTF9PSykKICAgICB7CkBAIC01NjI3LDEzICs1Nzg5LDExIEBACiAgIC8qIFNlbmQgc2xhdmUgYWRkcmVzcyAqLwogICBoaTJjLT5JbnN0YW5jZS0+RFIgPSBJMkNfMTBCSVRfQUREUkVTUyhoaTJjLT5EZXZhZGRyZXNzKTsKIAotICBpZiAoKGhpMmMtPmhkbWF0eCAhPSBOVUxMKSB8fCAoaGkyYy0+aGRtYXJ4ICE9IE5VTEwpKQorICBpZiAoKChoaTJjLT5oZG1hdHggIT0gTlVMTCkgJiYgKGhpMmMtPmhkbWF0eC0+WGZlckNwbHRDYWxsYmFjayAhPSBOVUxMKSkKKyAgICAgIHx8ICgoaGkyYy0+aGRtYXJ4ICE9IE5VTEwpICYmIChoaTJjLT5oZG1hcngtPlhmZXJDcGx0Q2FsbGJhY2sgIT0gTlVMTCkpKQogICB7Ci0gICAgaWYgKChoaTJjLT5oZG1hdHgtPlhmZXJDcGx0Q2FsbGJhY2sgIT0gTlVMTCkgfHwgKGhpMmMtPmhkbWFyeC0+WGZlckNwbHRDYWxsYmFjayAhPSBOVUxMKSkKLSAgICB7Ci0gICAgICAvKiBFbmFibGUgRE1BIFJlcXVlc3QgKi8KLSAgICAgIFNFVF9CSVQoaGkyYy0+SW5zdGFuY2UtPkNSMiwgSTJDX0NSMl9ETUFFTik7Ci0gICAgfQorICAgIC8qIEVuYWJsZSBETUEgUmVxdWVzdCAqLworICAgIFNFVF9CSVQoaGkyYy0+SW5zdGFuY2UtPkNSMiwgSTJDX0NSMl9ETUFFTik7CiAgIH0KIH0KIApAQCAtNzI5NSw3ICs3NDU1LDcgQEAKIH0KIAogLyoqCi0gICogQGJyaWVmICBDb252ZXJ0IEkyQ3ggT1RIRVJfeHh4IFhmZXJPcHRpb25zIHRvIGZ1bmN0aW9ubmFsIFhmZXJPcHRpb25zLgorICAqIEBicmllZiAgQ29udmVydCBJMkN4IE9USEVSX3h4eCBYZmVyT3B0aW9ucyB0byBmdW5jdGlvbmFsIFhmZXJPcHRpb25zLgogICAqIEBwYXJhbSAgaGkyYyBJMkMgaGFuZGxlLgogICAqIEByZXR2YWwgTm9uZQogICAqLwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjR4eF9oYWxfaTJzLmMgYi9TcmMvc3RtMzJmNHh4X2hhbF9pMnMuYwppbmRleCAzNWUyOWY4Li41ZmViYzM5IDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmNHh4X2hhbF9pMnMuYworKysgYi9TcmMvc3RtMzJmNHh4X2hhbF9pMnMuYwpAQCAtOTAsNyArOTAsNyBAQAogICAgICAoKykgU3RvcCB0aGUgRE1BIFRyYW5zZmVyIHVzaW5nIEhBTF9JMlNfRE1BU3RvcCgpCiAgICAgICAgICBJbiBTbGF2ZSBtb2RlLCBpZiBIQUxfSTJTX0RNQVN0b3AgaXMgdXNlZCB0byBzdG9wIHRoZSBjb21tdW5pY2F0aW9uLCBhbiBlcnJvcgogICAgICAgICAgSEFMX0kyU19FUlJPUl9CVVNZX0xJTkVfUlggaXMgcmFpc2VkIGFzIHRoZSBtYXN0ZXIgY29udGludWUgdG8gdHJhbnNtaXQgZGF0YS4KLSAgICAgICAgIEluIHRoaXMgY2FzZSBfX0hBTF9JMlNfRkxVU0hfUlhfRFIgbWFjcm8gbXVzdCBiZSB1c2VkIHRvIGZsdXNoIHRoZSByZW1haW5pbmcgZGF0YSAKKyAgICAgICAgIEluIHRoaXMgY2FzZSBfX0hBTF9JMlNfRkxVU0hfUlhfRFIgbWFjcm8gbXVzdCBiZSB1c2VkIHRvIGZsdXNoIHRoZSByZW1haW5pbmcgZGF0YQogICAgICAgICAgaW5zaWRlIERSIHJlZ2lzdGVyIGFuZCBhdm9pZCB1c2luZyBEZUluaXQvSW5pdCBwcm9jZXNzIGZvciB0aGUgbmV4dCB0cmFuc2Zlci4KIAogICAgKioqIEkyUyBIQUwgZHJpdmVyIG1hY3JvcyBsaXN0ICoqKgpAQCAtMTAzLDggKzEwMyw4IEBACiAgICAgICAoKykgX19IQUxfSTJTX0VOQUJMRV9JVCA6IEVuYWJsZSB0aGUgc3BlY2lmaWVkIEkyUyBpbnRlcnJ1cHRzCiAgICAgICAoKykgX19IQUxfSTJTX0RJU0FCTEVfSVQgOiBEaXNhYmxlIHRoZSBzcGVjaWZpZWQgSTJTIGludGVycnVwdHMKICAgICAgICgrKSBfX0hBTF9JMlNfR0VUX0ZMQUc6IENoZWNrIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBJMlMgZmxhZyBpcyBzZXQgb3Igbm90Ci0KICAgICAgICgrKSBfX0hBTF9JMlNfRkxVU0hfUlhfRFI6IFJlYWQgRFIgUmVnaXN0ZXIgdG8gRmx1c2ggUlggRGF0YQorCiAgICAgWy4uXQogICAgICAgKEApIFlvdSBjYW4gcmVmZXIgdG8gdGhlIEkyUyBIQUwgZHJpdmVyIGhlYWRlciBmaWxlIGZvciBtb3JlIHVzZWZ1bCBtYWNyb3MKIApAQCAtMzUyLDcgKzM1Miw3IEBACiAgICAgLyogSTJTIHN0YW5kYXJkICovCiAgICAgaWYgKGhpMnMtPkluaXQuU3RhbmRhcmQgPD0gSTJTX1NUQU5EQVJEX0xTQikKICAgICB7Ci0gICAgICAvKiBJbiBJMlMgc3RhbmRhcmQgcGFja2V0IGxlbmdodCBpcyBtdWx0aXBsaWVkIGJ5IDIgKi8KKyAgICAgIC8qIEluIEkyUyBzdGFuZGFyZCBwYWNrZXQgbGVuZ3RoIGlzIG11bHRpcGxpZWQgYnkgMiAqLwogICAgICAgcGFja2V0bGVuZ3RoID0gcGFja2V0bGVuZ3RoICogMlU7CiAgICAgfQogCkBAIC00NjksOSArNDY5LDExIEBACiAgICAgfQogCiAgICAgLyogQ29uZmlndXJlIHRoZSBJMlMgU2xhdmUgd2l0aCB0aGUgSTJTIE1hc3RlciBwYXJhbWV0ZXIgdmFsdWVzICovCi0gICAgdG1wcmVnIHw9ICh1aW50MTZfdCkoKHVpbnQxNl90KVNQSV9JMlNDRkdSX0kyU01PRCB8ICh1aW50MTZfdCkodG1wIHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50MTZfdCkoaGkycy0+SW5pdC5TdGFuZGFyZCB8ICh1aW50MTZfdCkoaGkycy0+SW5pdC5EYXRhRm9ybWF0IHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQxNl90KWhpMnMtPkluaXQuQ1BPTCkpKSk7CisgICAgdG1wcmVnIHw9ICh1aW50MTZfdCkoKHVpbnQxNl90KVNQSV9JMlNDRkdSX0kyU01PRCAgICB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAodWludDE2X3QpdG1wICAgICAgICAgICAgICAgICAgIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50MTZfdCloaTJzLT5Jbml0LlN0YW5kYXJkICAgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQxNl90KWhpMnMtPkluaXQuRGF0YUZvcm1hdCB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAodWludDE2X3QpaGkycy0+SW5pdC5DUE9MKTsKIAogICAgIC8qIFdyaXRlIHRvIFNQSXggSTJTQ0ZHUiAqLwogICAgIFdSSVRFX1JFRyhJMlN4RVhUKGhpMnMtPkluc3RhbmNlKS0+STJTQ0ZHUiwgdG1wcmVnKTsKQEAgLTgzMSw3ICs4MzMsNyBAQAogICAqIEBub3RlICAgV2hlbiBhIDE2LWJpdCBkYXRhIGZyYW1lIG9yIGEgMTYtYml0IGRhdGEgZnJhbWUgZXh0ZW5kZWQgaXMgc2VsZWN0ZWQgZHVyaW5nIHRoZSBJMlMKICAgKiAgICAgICAgIGNvbmZpZ3VyYXRpb24gcGhhc2UsIHRoZSBTaXplIHBhcmFtZXRlciBtZWFucyB0aGUgbnVtYmVyIG9mIDE2LWJpdCBkYXRhIGxlbmd0aAogICAqICAgICAgICAgaW4gdGhlIHRyYW5zYWN0aW9uIGFuZCB3aGVuIGEgMjQtYml0IGRhdGEgZnJhbWUgb3IgYSAzMi1iaXQgZGF0YSBmcmFtZSBpcyBzZWxlY3RlZAotICAqICAgICAgICAgdGhlIFNpemUgcGFyYW1ldGVyIG1lYW5zIHRoZSBudW1iZXIgb2YgMTYtYml0IGRhdGEgbGVuZ3RoLgorICAqICAgICAgICAgdGhlIFNpemUgcGFyYW1ldGVyIG1lYW5zIHRoZSBudW1iZXIgb2YgMjQtYml0IG9yIDMyLWJpdCBkYXRhIGxlbmd0aC4KICAgKiBAcGFyYW0gIFRpbWVvdXQgVGltZW91dCBkdXJhdGlvbgogICAqIEBub3RlICAgVGhlIEkyUyBpcyBrZXB0IGVuYWJsZWQgYXQgdGhlIGVuZCBvZiB0cmFuc2FjdGlvbiB0byBhdm9pZCB0aGUgY2xvY2sgZGUtc3luY2hyb25pemF0aW9uCiAgICogICAgICAgICBiZXR3ZWVuIE1hc3RlciBhbmQgU2xhdmUoZXhhbXBsZTogYXVkaW8gc3RyZWFtaW5nKS4KQEAgLTk0OCw3ICs5NTAsNyBAQAogICAqIEBub3RlICAgV2hlbiBhIDE2LWJpdCBkYXRhIGZyYW1lIG9yIGEgMTYtYml0IGRhdGEgZnJhbWUgZXh0ZW5kZWQgaXMgc2VsZWN0ZWQgZHVyaW5nIHRoZSBJMlMKICAgKiAgICAgICAgIGNvbmZpZ3VyYXRpb24gcGhhc2UsIHRoZSBTaXplIHBhcmFtZXRlciBtZWFucyB0aGUgbnVtYmVyIG9mIDE2LWJpdCBkYXRhIGxlbmd0aAogICAqICAgICAgICAgaW4gdGhlIHRyYW5zYWN0aW9uIGFuZCB3aGVuIGEgMjQtYml0IGRhdGEgZnJhbWUgb3IgYSAzMi1iaXQgZGF0YSBmcmFtZSBpcyBzZWxlY3RlZAotICAqICAgICAgICAgdGhlIFNpemUgcGFyYW1ldGVyIG1lYW5zIHRoZSBudW1iZXIgb2YgMTYtYml0IGRhdGEgbGVuZ3RoLgorICAqICAgICAgICAgdGhlIFNpemUgcGFyYW1ldGVyIG1lYW5zIHRoZSBudW1iZXIgb2YgMjQtYml0IG9yIDMyLWJpdCBkYXRhIGxlbmd0aC4KICAgKiBAcGFyYW0gIFRpbWVvdXQgVGltZW91dCBkdXJhdGlvbgogICAqIEBub3RlICAgVGhlIEkyUyBpcyBrZXB0IGVuYWJsZWQgYXQgdGhlIGVuZCBvZiB0cmFuc2FjdGlvbiB0byBhdm9pZCB0aGUgY2xvY2sgZGUtc3luY2hyb25pemF0aW9uCiAgICogICAgICAgICBiZXR3ZWVuIE1hc3RlciBhbmQgU2xhdmUoZXhhbXBsZTogYXVkaW8gc3RyZWFtaW5nKS4KQEAgLTEwNDksNyArMTA1MSw3IEBACiAgICogQG5vdGUgICBXaGVuIGEgMTYtYml0IGRhdGEgZnJhbWUgb3IgYSAxNi1iaXQgZGF0YSBmcmFtZSBleHRlbmRlZCBpcyBzZWxlY3RlZCBkdXJpbmcgdGhlIEkyUwogICAqICAgICAgICAgY29uZmlndXJhdGlvbiBwaGFzZSwgdGhlIFNpemUgcGFyYW1ldGVyIG1lYW5zIHRoZSBudW1iZXIgb2YgMTYtYml0IGRhdGEgbGVuZ3RoCiAgICogICAgICAgICBpbiB0aGUgdHJhbnNhY3Rpb24gYW5kIHdoZW4gYSAyNC1iaXQgZGF0YSBmcmFtZSBvciBhIDMyLWJpdCBkYXRhIGZyYW1lIGlzIHNlbGVjdGVkCi0gICogICAgICAgICB0aGUgU2l6ZSBwYXJhbWV0ZXIgbWVhbnMgdGhlIG51bWJlciBvZiAxNi1iaXQgZGF0YSBsZW5ndGguCisgICogICAgICAgICB0aGUgU2l6ZSBwYXJhbWV0ZXIgbWVhbnMgdGhlIG51bWJlciBvZiAyNC1iaXQgb3IgMzItYml0IGRhdGEgbGVuZ3RoLgogICAqIEBub3RlICAgVGhlIEkyUyBpcyBrZXB0IGVuYWJsZWQgYXQgdGhlIGVuZCBvZiB0cmFuc2FjdGlvbiB0byBhdm9pZCB0aGUgY2xvY2sgZGUtc3luY2hyb25pemF0aW9uCiAgICogICAgICAgICBiZXR3ZWVuIE1hc3RlciBhbmQgU2xhdmUoZXhhbXBsZTogYXVkaW8gc3RyZWFtaW5nKS4KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKQEAgLTExMTMsNyArMTExNSw3IEBACiAgICogQG5vdGUgICBXaGVuIGEgMTYtYml0IGRhdGEgZnJhbWUgb3IgYSAxNi1iaXQgZGF0YSBmcmFtZSBleHRlbmRlZCBpcyBzZWxlY3RlZCBkdXJpbmcgdGhlIEkyUwogICAqICAgICAgICAgY29uZmlndXJhdGlvbiBwaGFzZSwgdGhlIFNpemUgcGFyYW1ldGVyIG1lYW5zIHRoZSBudW1iZXIgb2YgMTYtYml0IGRhdGEgbGVuZ3RoCiAgICogICAgICAgICBpbiB0aGUgdHJhbnNhY3Rpb24gYW5kIHdoZW4gYSAyNC1iaXQgZGF0YSBmcmFtZSBvciBhIDMyLWJpdCBkYXRhIGZyYW1lIGlzIHNlbGVjdGVkCi0gICogICAgICAgICB0aGUgU2l6ZSBwYXJhbWV0ZXIgbWVhbnMgdGhlIG51bWJlciBvZiAxNi1iaXQgZGF0YSBsZW5ndGguCisgICogICAgICAgICB0aGUgU2l6ZSBwYXJhbWV0ZXIgbWVhbnMgdGhlIG51bWJlciBvZiAyNC1iaXQgb3IgMzItYml0IGRhdGEgbGVuZ3RoLgogICAqIEBub3RlICAgVGhlIEkyUyBpcyBrZXB0IGVuYWJsZWQgYXQgdGhlIGVuZCBvZiB0cmFuc2FjdGlvbiB0byBhdm9pZCB0aGUgY2xvY2sgZGUtc3luY2hyb25pemF0aW9uCiAgICogICAgICAgICBiZXR3ZWVuIE1hc3RlciBhbmQgU2xhdmUoZXhhbXBsZTogYXVkaW8gc3RyZWFtaW5nKS4KICAgKiBAbm90ZSAgIEl0IGlzIHJlY29tbWVuZGVkIHRvIHVzZSBETUEgZm9yIHRoZSBJMlMgcmVjZWl2ZXIgdG8gYXZvaWQgZGUtc3luY2hyb25pemF0aW9uCkBAIC0xMTc5LDcgKzExODEsNyBAQAogICAqIEBub3RlICAgV2hlbiBhIDE2LWJpdCBkYXRhIGZyYW1lIG9yIGEgMTYtYml0IGRhdGEgZnJhbWUgZXh0ZW5kZWQgaXMgc2VsZWN0ZWQgZHVyaW5nIHRoZSBJMlMKICAgKiAgICAgICAgIGNvbmZpZ3VyYXRpb24gcGhhc2UsIHRoZSBTaXplIHBhcmFtZXRlciBtZWFucyB0aGUgbnVtYmVyIG9mIDE2LWJpdCBkYXRhIGxlbmd0aAogICAqICAgICAgICAgaW4gdGhlIHRyYW5zYWN0aW9uIGFuZCB3aGVuIGEgMjQtYml0IGRhdGEgZnJhbWUgb3IgYSAzMi1iaXQgZGF0YSBmcmFtZSBpcyBzZWxlY3RlZAotICAqICAgICAgICAgdGhlIFNpemUgcGFyYW1ldGVyIG1lYW5zIHRoZSBudW1iZXIgb2YgMTYtYml0IGRhdGEgbGVuZ3RoLgorICAqICAgICAgICAgdGhlIFNpemUgcGFyYW1ldGVyIG1lYW5zIHRoZSBudW1iZXIgb2YgMjQtYml0IG9yIDMyLWJpdCBkYXRhIGxlbmd0aC4KICAgKiBAbm90ZSAgIFRoZSBJMlMgaXMga2VwdCBlbmFibGVkIGF0IHRoZSBlbmQgb2YgdHJhbnNhY3Rpb24gdG8gYXZvaWQgdGhlIGNsb2NrIGRlLXN5bmNocm9uaXphdGlvbgogICAqICAgICAgICAgYmV0d2VlbiBNYXN0ZXIgYW5kIFNsYXZlKGV4YW1wbGU6IGF1ZGlvIHN0cmVhbWluZykuCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCkBAIC0xMjcwLDcgKzEyNzIsNyBAQAogICAqIEBub3RlICAgV2hlbiBhIDE2LWJpdCBkYXRhIGZyYW1lIG9yIGEgMTYtYml0IGRhdGEgZnJhbWUgZXh0ZW5kZWQgaXMgc2VsZWN0ZWQgZHVyaW5nIHRoZSBJMlMKICAgKiAgICAgICAgIGNvbmZpZ3VyYXRpb24gcGhhc2UsIHRoZSBTaXplIHBhcmFtZXRlciBtZWFucyB0aGUgbnVtYmVyIG9mIDE2LWJpdCBkYXRhIGxlbmd0aAogICAqICAgICAgICAgaW4gdGhlIHRyYW5zYWN0aW9uIGFuZCB3aGVuIGEgMjQtYml0IGRhdGEgZnJhbWUgb3IgYSAzMi1iaXQgZGF0YSBmcmFtZSBpcyBzZWxlY3RlZAotICAqICAgICAgICAgdGhlIFNpemUgcGFyYW1ldGVyIG1lYW5zIHRoZSBudW1iZXIgb2YgMTYtYml0IGRhdGEgbGVuZ3RoLgorICAqICAgICAgICAgdGhlIFNpemUgcGFyYW1ldGVyIG1lYW5zIHRoZSBudW1iZXIgb2YgMjQtYml0IG9yIDMyLWJpdCBkYXRhIGxlbmd0aC4KICAgKiBAbm90ZSAgIFRoZSBJMlMgaXMga2VwdCBlbmFibGVkIGF0IHRoZSBlbmQgb2YgdHJhbnNhY3Rpb24gdG8gYXZvaWQgdGhlIGNsb2NrIGRlLXN5bmNocm9uaXphdGlvbgogICAqICAgICAgICAgYmV0d2VlbiBNYXN0ZXIgYW5kIFNsYXZlKGV4YW1wbGU6IGF1ZGlvIHN0cmVhbWluZykuCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmNHh4X2hhbF9pMnNfZXguYyBiL1NyYy9zdG0zMmY0eHhfaGFsX2kyc19leC5jCmluZGV4IDc5MWMyMTkuLmNkMGRiNWUgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmY0eHhfaGFsX2kyc19leC5jCisrKyBiL1NyYy9zdG0zMmY0eHhfaGFsX2kyc19leC5jCkBAIC0xMjksOCArMTI5LDExIEBACiBzdGF0aWMgdm9pZCBJMlNFeF9SeElTUl9JMlNFeHQoSTJTX0hhbmRsZVR5cGVEZWYgKmhpMnMpOwogc3RhdGljIHZvaWQgSTJTRXhfVHhJU1JfSTJTKEkyU19IYW5kbGVUeXBlRGVmICpoaTJzKTsKIHN0YXRpYyB2b2lkIEkyU0V4X1R4SVNSX0kyU0V4dChJMlNfSGFuZGxlVHlwZURlZiAqaGkycyk7Ci1zdGF0aWMgSEFMX1N0YXR1c1R5cGVEZWYgSTJTRXhfRnVsbER1cGxleFdhaXRGbGFnU3RhdGVVbnRpbFRpbWVvdXQoSTJTX0hhbmRsZVR5cGVEZWYgKmhpMnMsIHVpbnQzMl90IEZsYWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgU3RhdGUsIHVpbnQzMl90IFRpbWVvdXQsIEkyU19Vc2VUeXBlRGVmIGkyc1VzZWQpOworc3RhdGljIEhBTF9TdGF0dXNUeXBlRGVmIEkyU0V4X0Z1bGxEdXBsZXhXYWl0RmxhZ1N0YXRlVW50aWxUaW1lb3V0KEkyU19IYW5kbGVUeXBlRGVmICpoaTJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IEZsYWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgU3RhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgVGltZW91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJMlNfVXNlVHlwZURlZiBpMnNVc2VkKTsKIC8qKgogICAqIEB9CiAgICovCkBAIC0yMDIsOCArMjA1LDExIEBACiAgICogICAgICAgICBiZXR3ZWVuIE1hc3RlciBhbmQgU2xhdmUoZXhhbXBsZTogYXVkaW8gc3RyZWFtaW5nKS4KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9JMlNFeF9UcmFuc21pdFJlY2VpdmUoSTJTX0hhbmRsZVR5cGVEZWYgKmhpMnMsIHVpbnQxNl90ICpwVHhEYXRhLCB1aW50MTZfdCAqcFJ4RGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgU2l6ZSwgdWludDMyX3QgVGltZW91dCkKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9JMlNFeF9UcmFuc21pdFJlY2VpdmUoSTJTX0hhbmRsZVR5cGVEZWYgKmhpMnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90ICpwVHhEYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCAqcFJ4RGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgVGltZW91dCkKIHsKICAgdWludDMyX3QgdG1wMSA9IDBVOwogICBIQUxfU3RhdHVzVHlwZURlZiBlcnJvcmNvZGUgPSBIQUxfT0s7CkBAIC00MjAsNyArNDI2LDkgQEAKICAgKiAgICAgICAgIGJldHdlZW4gTWFzdGVyIGFuZCBTbGF2ZShleGFtcGxlOiBhdWRpbyBzdHJlYW1pbmcpLgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0kyU0V4X1RyYW5zbWl0UmVjZWl2ZV9JVChJMlNfSGFuZGxlVHlwZURlZiAqaGkycywgdWludDE2X3QgKnBUeERhdGEsIHVpbnQxNl90ICpwUnhEYXRhLAorSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0kyU0V4X1RyYW5zbWl0UmVjZWl2ZV9JVChJMlNfSGFuZGxlVHlwZURlZiAqaGkycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgKnBUeERhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90ICpwUnhEYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBTaXplKQogewogICB1aW50MzJfdCB0bXAxID0gMFU7CkBAIC01MzAsNyArNTM4LDkgQEAKICAgKiAgICAgICAgIGJldHdlZW4gTWFzdGVyIGFuZCBTbGF2ZShleGFtcGxlOiBhdWRpbyBzdHJlYW1pbmcpLgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0kyU0V4X1RyYW5zbWl0UmVjZWl2ZV9ETUEoSTJTX0hhbmRsZVR5cGVEZWYgKmhpMnMsIHVpbnQxNl90ICpwVHhEYXRhLCB1aW50MTZfdCAqcFJ4RGF0YSwKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9JMlNFeF9UcmFuc21pdFJlY2VpdmVfRE1BKEkyU19IYW5kbGVUeXBlRGVmICpoaTJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgKnBUeERhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCAqcFJ4RGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IFNpemUpCiB7CiAgIHVpbnQzMl90ICp0bXAgPSBOVUxMOwpAQCAtNTg2LDExICs1OTYsMTEgQEAKICAgLyogU2V0IHRoZSBJMlMgUnggRE1BIGVycm9yIGNhbGxiYWNrICovCiAgIGhpMnMtPmhkbWFyeC0+WGZlckVycm9yQ2FsbGJhY2sgPSBJMlNFeF9UeFJ4RE1BRXJyb3I7CiAKLSAgLyogU2V0IHRoZSBJMlMgVHggRE1BIEhhbGYgdHJhbnNmZXIgY29tcGxldGUgY2FsbGJhY2sgKi8KLSAgaGkycy0+aGRtYXR4LT5YZmVySGFsZkNwbHRDYWxsYmFjayAgPSBJMlNFeF9UeFJ4RE1BSGFsZkNwbHQ7CisgIC8qIFNldCB0aGUgSTJTIFR4IERNQSBIYWxmIHRyYW5zZmVyIGNvbXBsZXRlIGNhbGxiYWNrIGFzIE5VTEwgKi8KKyAgaGkycy0+aGRtYXR4LT5YZmVySGFsZkNwbHRDYWxsYmFjayAgPSBOVUxMOwogCi0gIC8qIFNldCB0aGUgSTJTIFR4IERNQSB0cmFuc2ZlciBjb21wbGV0ZSBjYWxsYmFjayAqLwotICBoaTJzLT5oZG1hdHgtPlhmZXJDcGx0Q2FsbGJhY2sgID0gSTJTRXhfVHhSeERNQUNwbHQ7CisgIC8qIFNldCB0aGUgSTJTIFR4IERNQSB0cmFuc2ZlciBjb21wbGV0ZSBjYWxsYmFjayBhcyBOVUxMICovCisgIGhpMnMtPmhkbWF0eC0+WGZlckNwbHRDYWxsYmFjayAgPSBOVUxMOwogCiAgIC8qIFNldCB0aGUgSTJTIFR4IERNQSBlcnJvciBjYWxsYmFjayAqLwogICBoaTJzLT5oZG1hdHgtPlhmZXJFcnJvckNhbGxiYWNrID0gSTJTRXhfVHhSeERNQUVycm9yOwpAQCAtODc3LDY1ICs4ODcsMzQgQEAKIHsKICAgSTJTX0hhbmRsZVR5cGVEZWYgKmhpMnMgPSAoSTJTX0hhbmRsZVR5cGVEZWYgKikoKERNQV9IYW5kbGVUeXBlRGVmICopaGRtYSktPlBhcmVudDsKIAotICAvKiBpZiBETUEgaXMgY29uZmlndXJlZCBpbiBETUFfTk9STUFMIG1vZGUgKi8KKyAgLyogSWYgRE1BIGlzIGNvbmZpZ3VyZWQgaW4gRE1BX05PUk1BTCBtb2RlICovCiAgIGlmIChoZG1hLT5Jbml0Lk1vZGUgPT0gRE1BX05PUk1BTCkKICAgewotICAgIGlmIChoaTJzLT5oZG1hcnggPT0gaGRtYSkKKyAgICBpZiAoKChoaTJzLT5JbnN0YW5jZS0+STJTQ0ZHUiAmIFNQSV9JMlNDRkdSX0kyU0NGRykgPT0gSTJTX01PREVfTUFTVEVSX1RYKSB8fCBcCisgICAgICAgICgoaGkycy0+SW5zdGFuY2UtPkkyU0NGR1IgJiBTUElfSTJTQ0ZHUl9JMlNDRkcpID09IEkyU19NT0RFX1NMQVZFX1RYKSkKKyAgICAvKiBEaXNhYmxlIFR4ICYgUnggRE1BIFJlcXVlc3RzICovCiAgICAgewotICAgICAgLyogRGlzYWJsZSBSeCBETUEgUmVxdWVzdCAqLwotICAgICAgaWYgKCgoaGkycy0+SW5zdGFuY2UtPkkyU0NGR1IgJiBTUElfSTJTQ0ZHUl9JMlNDRkcpID09IEkyU19NT0RFX01BU1RFUl9UWCkgfHwgXAotICAgICAgICAgICgoaGkycy0+SW5zdGFuY2UtPkkyU0NGR1IgJiBTUElfSTJTQ0ZHUl9JMlNDRkcpID09IEkyU19NT0RFX1NMQVZFX1RYKSkKLSAgICAgIHsKLSAgICAgICAgQ0xFQVJfQklUKEkyU3hFWFQoaGkycy0+SW5zdGFuY2UpLT5DUjIsIFNQSV9DUjJfUlhETUFFTik7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIENMRUFSX0JJVChoaTJzLT5JbnN0YW5jZS0+Q1IyLCBTUElfQ1IyX1JYRE1BRU4pOwotICAgICAgfQotCi0gICAgICBoaTJzLT5SeFhmZXJDb3VudCA9IDBVOwotCi0gICAgICBpZiAoaGkycy0+VHhYZmVyQ291bnQgPT0gMFUpCi0gICAgICB7Ci0gICAgICAgIGhpMnMtPlN0YXRlID0gSEFMX0kyU19TVEFURV9SRUFEWTsKLQotICAgICAgICAvKiBDYWxsIHVzZXIgVHhSeCBjb21wbGV0ZSBjYWxsYmFjayAqLwotI2lmIChVU0VfSEFMX0kyU19SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMVUpCi0gICAgICAgIGhpMnMtPlR4UnhDcGx0Q2FsbGJhY2soaGkycyk7Ci0jZWxzZQotICAgICAgICBIQUxfSTJTRXhfVHhSeENwbHRDYWxsYmFjayhoaTJzKTsKLSNlbmRpZiAvKiBVU0VfSEFMX0kyU19SRUdJU1RFUl9DQUxMQkFDS1MgKi8KLSAgICAgIH0KKyAgICAgIENMRUFSX0JJVChJMlN4RVhUKGhpMnMtPkluc3RhbmNlKS0+Q1IyLCBTUElfQ1IyX1JYRE1BRU4pOworICAgICAgQ0xFQVJfQklUKGhpMnMtPkluc3RhbmNlLT5DUjIsIFNQSV9DUjJfVFhETUFFTik7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICBDTEVBUl9CSVQoaGkycy0+SW5zdGFuY2UtPkNSMiwgU1BJX0NSMl9SWERNQUVOKTsKKyAgICAgIENMRUFSX0JJVChJMlN4RVhUKGhpMnMtPkluc3RhbmNlKS0+Q1IyLCBTUElfQ1IyX1RYRE1BRU4pOwogICAgIH0KIAotICAgIGlmIChoaTJzLT5oZG1hdHggPT0gaGRtYSkKLSAgICB7Ci0gICAgICAvKiBEaXNhYmxlIFR4IERNQSBSZXF1ZXN0ICovCi0gICAgICBpZiAoKChoaTJzLT5JbnN0YW5jZS0+STJTQ0ZHUiAmIFNQSV9JMlNDRkdSX0kyU0NGRykgPT0gSTJTX01PREVfTUFTVEVSX1RYKSB8fCBcCi0gICAgICAgICAgKChoaTJzLT5JbnN0YW5jZS0+STJTQ0ZHUiAmIFNQSV9JMlNDRkdSX0kyU0NGRykgPT0gSTJTX01PREVfU0xBVkVfVFgpKQotICAgICAgewotICAgICAgICBDTEVBUl9CSVQoaGkycy0+SW5zdGFuY2UtPkNSMiwgU1BJX0NSMl9UWERNQUVOKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgQ0xFQVJfQklUKEkyU3hFWFQoaGkycy0+SW5zdGFuY2UpLT5DUjIsIFNQSV9DUjJfVFhETUFFTik7Ci0gICAgICB9CisgICAgaGkycy0+UnhYZmVyQ291bnQgPSAwVTsKKyAgICBoaTJzLT5UeFhmZXJDb3VudCA9IDBVOwogCi0gICAgICBoaTJzLT5UeFhmZXJDb3VudCA9IDBVOwotCi0gICAgICBpZiAoaGkycy0+UnhYZmVyQ291bnQgPT0gMFUpCi0gICAgICB7Ci0gICAgICAgIGhpMnMtPlN0YXRlID0gSEFMX0kyU19TVEFURV9SRUFEWTsKLQotICAgICAgICAvKiBDYWxsIHVzZXIgVHhSeCBjb21wbGV0ZSBjYWxsYmFjayAqLwotI2lmIChVU0VfSEFMX0kyU19SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMVUpCi0gICAgICAgIGhpMnMtPlR4UnhDcGx0Q2FsbGJhY2soaGkycyk7Ci0jZWxzZQotICAgICAgICBIQUxfSTJTRXhfVHhSeENwbHRDYWxsYmFjayhoaTJzKTsKLSNlbmRpZiAvKiBVU0VfSEFMX0kyU19SRUdJU1RFUl9DQUxMQkFDS1MgKi8KLSAgICAgIH0KLSAgICB9CisgICAgaGkycy0+U3RhdGUgPSBIQUxfSTJTX1NUQVRFX1JFQURZOwogICB9CisKKyAgLyogQ2FsbCB1c2VyIFR4UnggY29tcGxldGUgY2FsbGJhY2sgKi8KKyNpZiAoVVNFX0hBTF9JMlNfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDFVKQorICBoaTJzLT5UeFJ4Q3BsdENhbGxiYWNrKGhpMnMpOworI2Vsc2UKKyAgSEFMX0kyU0V4X1R4UnhDcGx0Q2FsbGJhY2soaGkycyk7CisjZW5kaWYgLyogVVNFX0hBTF9JMlNfUkVHSVNURVJfQ0FMTEJBQ0tTICovCiB9CiAKIC8qKgpAQCAtMTA5MSw4ICsxMDcwLDExIEBACiAgICogQHBhcmFtIGkyc1VzZWQgSTJTIGluc3RhbmNlIHJlZmVyZW5jZQogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwotc3RhdGljIEhBTF9TdGF0dXNUeXBlRGVmIEkyU0V4X0Z1bGxEdXBsZXhXYWl0RmxhZ1N0YXRlVW50aWxUaW1lb3V0KEkyU19IYW5kbGVUeXBlRGVmICpoaTJzLCB1aW50MzJfdCBGbGFnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IFN0YXRlLCB1aW50MzJfdCBUaW1lb3V0LCBJMlNfVXNlVHlwZURlZiBpMnNVc2VkKQorc3RhdGljIEhBTF9TdGF0dXNUeXBlRGVmIEkyU0V4X0Z1bGxEdXBsZXhXYWl0RmxhZ1N0YXRlVW50aWxUaW1lb3V0KEkyU19IYW5kbGVUeXBlRGVmICpoaTJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IEZsYWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgU3RhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgVGltZW91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJMlNfVXNlVHlwZURlZiBpMnNVc2VkKQogewogICB1aW50MzJfdCB0aWNrc3RhcnQgPSBIQUxfR2V0VGljaygpOwogCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmNHh4X2hhbF9pd2RnLmMgYi9TcmMvc3RtMzJmNHh4X2hhbF9pd2RnLmMKaW5kZXggYzM1Njk3My4uNmNiYmMyNCAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZjR4eF9oYWxfaXdkZy5jCisrKyBiL1NyYy9zdG0zMmY0eHhfaGFsX2l3ZGcuYwpAQCAtMTYsMzMgKzE2LDQzIEBACiAgICAgKCspIFRoZSBJV0RHIGNhbiBiZSBzdGFydGVkIGJ5IGVpdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZSAoY29uZmlndXJhYmxlCiAgICAgICAgIHRocm91Z2ggb3B0aW9uIGJ5dGUpLgogCi0gICAgKCspIFRoZSBJV0RHIGlzIGNsb2NrZWQgYnkgTG93LVNwZWVkIGNsb2NrIChMU0kpIGFuZCB0aHVzIHN0YXlzIGFjdGl2ZSBldmVuCi0gICAgICAgIGlmIHRoZSBtYWluIGNsb2NrIGZhaWxzLgorICAgICgrKSBUaGUgSVdERyBpcyBjbG9ja2VkIGJ5IHRoZSBMb3ctU3BlZWQgSW50ZXJuYWwgY2xvY2sgKExTSSkgYW5kIHRodXMgc3RheXMKKyAgICAgICAgYWN0aXZlIGV2ZW4gaWYgdGhlIG1haW4gY2xvY2sgZmFpbHMuCiAKLSAgICAoKykgT25jZSB0aGUgSVdERyBpcyBzdGFydGVkLCB0aGUgTFNJIGlzIGZvcmNlZCBPTiBhbmQgYm90aCBjYW4gbm90IGJlCisgICAgKCspIE9uY2UgdGhlIElXREcgaXMgc3RhcnRlZCwgdGhlIExTSSBpcyBmb3JjZWQgT04gYW5kIGJvdGggY2Fubm90IGJlCiAgICAgICAgIGRpc2FibGVkLiBUaGUgY291bnRlciBzdGFydHMgY291bnRpbmcgZG93biBmcm9tIHRoZSByZXNldCB2YWx1ZSAoMHhGRkYpLgogICAgICAgICBXaGVuIGl0IHJlYWNoZXMgdGhlIGVuZCBvZiBjb3VudCB2YWx1ZSAoMHgwMDApIGEgcmVzZXQgc2lnbmFsIGlzCiAgICAgICAgIGdlbmVyYXRlZCAoSVdERyByZXNldCkuCiAKICAgICAoKykgV2hlbmV2ZXIgdGhlIGtleSB2YWx1ZSAweDAwMDAgQUFBQSBpcyB3cml0dGVuIGluIHRoZSBJV0RHX0tSIHJlZ2lzdGVyLAotICAgICAgICB0aGUgSVdER19STFIgdmFsdWUgaXMgcmVsb2FkZWQgaW4gdGhlIGNvdW50ZXIgYW5kIHRoZSB3YXRjaGRvZyByZXNldCBpcwotICAgICAgICBwcmV2ZW50ZWQuCisgICAgICAgIHRoZSBJV0RHX1JMUiB2YWx1ZSBpcyByZWxvYWRlZCBpbnRvIHRoZSBjb3VudGVyIGFuZCB0aGUgd2F0Y2hkb2cgcmVzZXQKKyAgICAgICAgaXMgcHJldmVudGVkLgogCiAgICAgKCspIFRoZSBJV0RHIGlzIGltcGxlbWVudGVkIGluIHRoZSBWREQgdm9sdGFnZSBkb21haW4gdGhhdCBpcyBzdGlsbCBmdW5jdGlvbmFsCi0gICAgICAgIGluIFNUT1AgYW5kIFNUQU5EQlkgbW9kZSAoSVdERyByZXNldCBjYW4gd2FrZS11cCBmcm9tIFNUQU5EQlkpLgorICAgICAgICBpbiBTVE9QIGFuZCBTVEFOREJZIG1vZGUgKElXREcgcmVzZXQgY2FuIHdha2UgdXAgdGhlIENQVSBmcm9tIFNUQU5EQlkpLgogICAgICAgICBJV0RHUlNUIGZsYWcgaW4gUkNDX0NTUiByZWdpc3RlciBjYW4gYmUgdXNlZCB0byBpbmZvcm0gd2hlbiBhbiBJV0RHCiAgICAgICAgIHJlc2V0IG9jY3Vycy4KIAotICAgICgrKSBEZWJ1ZyBtb2RlIDogV2hlbiB0aGUgbWljcm9jb250cm9sbGVyIGVudGVycyBkZWJ1ZyBtb2RlIChjb3JlIGhhbHRlZCksCisgICAgKCspIERlYnVnIG1vZGU6IFdoZW4gdGhlIG1pY3JvY29udHJvbGxlciBlbnRlcnMgZGVidWcgbW9kZSAoY29yZSBoYWx0ZWQpLAogICAgICAgICB0aGUgSVdERyBjb3VudGVyIGVpdGhlciBjb250aW51ZXMgdG8gd29yayBub3JtYWxseSBvciBzdG9wcywgZGVwZW5kaW5nCiAgICAgICAgIG9uIERCR19JV0RHX1NUT1AgY29uZmlndXJhdGlvbiBiaXQgaW4gREJHIG1vZHVsZSwgYWNjZXNzaWJsZSB0aHJvdWdoCiAgICAgICAgIF9fSEFMX0RCR01DVV9GUkVFWkVfSVdERygpIGFuZCBfX0hBTF9EQkdNQ1VfVU5GUkVFWkVfSVdERygpIG1hY3Jvcy4KIAogICAgIFsuLl0gTWluLW1heCB0aW1lb3V0IHZhbHVlIEAzMktIeiAoTFNJKTogfjEyNXVzIC8gfjMyLjdzCi0gICAgICAgICBUaGUgSVdERyB0aW1lb3V0IG1heSB2YXJ5IGR1ZSB0byBMU0kgZnJlcXVlbmN5IGRpc3BlcnNpb24uIFNUTTMyRjR4eAotICAgICAgICAgZGV2aWNlcyBwcm92aWRlIHRoZSBjYXBhYmlsaXR5IHRvIG1lYXN1cmUgdGhlIExTSSBmcmVxdWVuY3kgKExTSSBjbG9jawotICAgICAgICAgY29ubmVjdGVkIGludGVybmFsbHkgdG8gVElNNSBDSDQgaW5wdXQgY2FwdHVyZSkuIFRoZSBtZWFzdXJlZCB2YWx1ZQotICAgICAgICAgY2FuIGJlIHVzZWQgdG8gaGF2ZSBhbiBJV0RHIHRpbWVvdXQgd2l0aCBhbiBhY2NlcHRhYmxlIGFjY3VyYWN5LgorICAgICAgICAgVGhlIElXREcgdGltZW91dCBtYXkgdmFyeSBkdWUgdG8gTFNJIGNsb2NrIGZyZXF1ZW5jeSBkaXNwZXJzaW9uLgorICAgICAgICAgU1RNMzJGNHh4IGRldmljZXMgcHJvdmlkZSB0aGUgY2FwYWJpbGl0eSB0byBtZWFzdXJlIHRoZSBMU0kgY2xvY2sKKyAgICAgICAgIGZyZXF1ZW5jeSAoTFNJIGNsb2NrIGlzIGludGVybmFsbHkgY29ubmVjdGVkIHRvIFRJTTUgQ0g0IGlucHV0IGNhcHR1cmUpLgorICAgICAgICAgVGhlIG1lYXN1cmVkIHZhbHVlIGNhbiBiZSB1c2VkIHRvIGhhdmUgYW4gSVdERyB0aW1lb3V0IHdpdGggYW4KKyAgICAgICAgIGFjY2VwdGFibGUgYWNjdXJhY3kuCisKKyAgICBbLi5dIERlZmF1bHQgdGltZW91dCB2YWx1ZSAobmVjZXNzYXJ5IGZvciBJV0RHX1NSIHN0YXR1cyByZWdpc3RlciB1cGRhdGUpOgorICAgICAgICAgQ29uc3RhbnQgTFNJX1ZBTFVFIGlzIGRlZmluZWQgYmFzZWQgb24gdGhlIG5vbWluYWwgTFNJIGNsb2NrIGZyZXF1ZW5jeS4KKyAgICAgICAgIFRoaXMgZnJlcXVlbmN5IGJlaW5nIHN1YmplY3QgdG8gdmFyaWF0aW9ucyBhcyBtZW50aW9uZWQgYWJvdmUsIHRoZQorICAgICAgICAgZGVmYXVsdCB0aW1lb3V0IHZhbHVlIChkZWZpbmVkIHRocm91Z2ggY29uc3RhbnQgSEFMX0lXREdfREVGQVVMVF9USU1FT1VUCisgICAgICAgICBiZWxvdykgbWF5IGJlY29tZSB0b28gc2hvcnQgb3IgdG9vIGxvbmcuCisgICAgICAgICBJbiBzdWNoIGNhc2VzLCB0aGlzIGRlZmF1bHQgdGltZW91dCB2YWx1ZSBjYW4gYmUgdHVuZWQgYnkgcmVkZWZpbmluZworICAgICAgICAgdGhlIGNvbnN0YW50IExTSV9WQUxVRSBhdCB1c2VyLWFwcGxpY2F0aW9uIGxldmVsIChiYXNlZCwgZm9yIGluc3RhbmNlLAorICAgICAgICAgb24gdGhlIG1lYXN1cmVkIExTSSBjbG9jayBmcmVxdWVuY3kgYXMgZXhwbGFpbmVkIGFib3ZlKS4KIAogICAgICAgICAgICAgICAgICAgICAgIyMjIyMgSG93IHRvIHVzZSB0aGlzIGRyaXZlciAjIyMjIwogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTEwMiwxMCArMTEyLDE1IEBACiAvKiogQGRlZmdyb3VwIElXREdfUHJpdmF0ZV9EZWZpbmVzIElXREcgUHJpdmF0ZSBEZWZpbmVzCiAgICogQHsKICAgKi8KLS8qIFN0YXR1cyByZWdpc3RlciBuZWVkIDUgUkMgTFNJIGRpdmlkZWQgYnkgcHJlc2NhbGVyIGNsb2NrIHRvIGJlIHVwZGF0ZWQuIFdpdGgKLSAgIGhpZ2hlciBwcmVzY2FsZXIgKDI1NiksIGFuZCBhY2NvcmRpbmcgdG8gTFNJIHZhcmlhdGlvbiwgd2UgbmVlZCB0byB3YWl0IGF0Ci0gICBsZWFzdCA2IGN5Y2xlcyBzbyA0OCBtcy4gKi8KLSNkZWZpbmUgSEFMX0lXREdfREVGQVVMVF9USU1FT1VUICAgICAgICAgICAgNDh1CisvKiBTdGF0dXMgcmVnaXN0ZXIgbmVlZHMgdXAgdG8gNSBMU0kgY2xvY2sgcGVyaW9kcyBkaXZpZGVkIGJ5IHRoZSBjbG9jaworICAgcHJlc2NhbGVyIHRvIGJlIHVwZGF0ZWQuIFRoZSBudW1iZXIgb2YgTFNJIGNsb2NrIHBlcmlvZHMgaXMgdXBwZXItcm91bmRlZCB0bworICAgNiBmb3IgdGhlIHRpbWVvdXQgdmFsdWUgY2FsY3VsYXRpb24uCisgICBUaGUgdGltZW91dCB2YWx1ZSBpcyBhbHNvIGNhbGN1bGF0ZWQgdXNpbmcgdGhlIGhpZ2hlc3QgcHJlc2NhbGVyICgyNTYpIGFuZAorICAgdGhlIExTSV9WQUxVRSBjb25zdGFudC4gVGhlIHZhbHVlIG9mIHRoaXMgY29uc3RhbnQgY2FuIGJlIGNoYW5nZWQgYnkgdGhlIHVzZXIKKyAgIHRvIHRha2UgaW50byBhY2NvdW50IHBvc3NpYmxlIExTSSBjbG9jayBwZXJpb2QgdmFyaWF0aW9ucy4KKyAgIFRoZSB0aW1lb3V0IHZhbHVlIGlzIG11bHRpcGxpZWQgYnkgMTAwMCB0byBiZSBjb252ZXJ0ZWQgaW4gbWlsbGlzZWNvbmRzLiAqLworI2RlZmluZSBIQUxfSVdER19ERUZBVUxUX1RJTUVPVVQgICAgICAgICgoNlVMICogMjU2VUwgKiAxMDAwVUwpIC8gTFNJX1ZBTFVFKQorI2RlZmluZSBJV0RHX0tFUk5FTF9VUERBVEVfRkxBR1MgICAgICAgIChJV0RHX1NSX1JWVSB8IElXREdfU1JfUFZVKQogLyoqCiAgICogQH0KICAgKi8KQEAgLTE3NCwxMSArMTg5LDE0IEBACiAgIHRpY2tzdGFydCA9IEhBTF9HZXRUaWNrKCk7CiAKICAgLyogV2FpdCBmb3IgcmVnaXN0ZXIgdG8gYmUgdXBkYXRlZCAqLwotICB3aGlsZSAoaGl3ZGctPkluc3RhbmNlLT5TUiAhPSAweDAwdSkKKyAgd2hpbGUgKChoaXdkZy0+SW5zdGFuY2UtPlNSICYgSVdER19LRVJORUxfVVBEQVRFX0ZMQUdTKSAhPSAweDAwdSkKICAgewogICAgIGlmICgoSEFMX0dldFRpY2soKSAtIHRpY2tzdGFydCkgPiBIQUxfSVdER19ERUZBVUxUX1RJTUVPVVQpCiAgICAgewotICAgICAgcmV0dXJuIEhBTF9USU1FT1VUOworICAgICAgaWYgKChoaXdkZy0+SW5zdGFuY2UtPlNSICYgSVdER19LRVJORUxfVVBEQVRFX0ZMQUdTKSAhPSAweDAwdSkKKyAgICAgIHsKKyAgICAgICAgcmV0dXJuIEhBTF9USU1FT1VUOworICAgICAgfQogICAgIH0KICAgfQogCkBAIC0xODksNiArMjA3LDcgQEAKICAgcmV0dXJuIEhBTF9PSzsKIH0KIAorCiAvKioKICAgKiBAfQogICAqLwpAQCAtMjA4LDcgKzIyNyw2IEBACiAgICogQHsKICAgKi8KIAotCiAvKioKICAgKiBAYnJpZWYgIFJlZnJlc2ggdGhlIElXREcuCiAgICogQHBhcmFtICBoaXdkZyAgcG9pbnRlciB0byBhIElXREdfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucwpAQCAtMjI0LDYgKzI0Miw3IEBACiAgIHJldHVybiBIQUxfT0s7CiB9CiAKKwogLyoqCiAgICogQH0KICAgKi8KZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmY0eHhfaGFsX2xwdGltLmMgYi9TcmMvc3RtMzJmNHh4X2hhbF9scHRpbS5jCmluZGV4IGFhZGFmMmEuLjMzOGJjODEgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmY0eHhfaGFsX2xwdGltLmMKKysrIGIvU3JjL3N0bTMyZjR4eF9oYWxfbHB0aW0uYwpAQCAtMTk0LDggKzE5NCw4IEBACiAgICovCiAKIC8qKiBAZGVmZ3JvdXAgTFBUSU1fRXhwb3J0ZWRfRnVuY3Rpb25zX0dyb3VwMSBJbml0aWFsaXphdGlvbi9kZS1pbml0aWFsaXphdGlvbiBmdW5jdGlvbnMKLSAqICBAYnJpZWYgICAgSW5pdGlhbGl6YXRpb24gYW5kIENvbmZpZ3VyYXRpb24gZnVuY3Rpb25zLgotICoKKyAgKiAgQGJyaWVmICAgIEluaXRpYWxpemF0aW9uIGFuZCBDb25maWd1cmF0aW9uIGZ1bmN0aW9ucy4KKyAgKgogQHZlcmJhdGltCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAgICAgICAgICAjIyMjIyBJbml0aWFsaXphdGlvbiBhbmQgZGUtaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zICMjIyMjCkBAIC0yMzIsMTYgKzIzMiwxNyBAQAogCiAgIGFzc2VydF9wYXJhbShJU19MUFRJTV9DTE9DS19TT1VSQ0UoaGxwdGltLT5Jbml0LkNsb2NrLlNvdXJjZSkpOwogICBhc3NlcnRfcGFyYW0oSVNfTFBUSU1fQ0xPQ0tfUFJFU0NBTEVSKGhscHRpbS0+SW5pdC5DbG9jay5QcmVzY2FsZXIpKTsKLSAgaWYgKChobHB0aW0tPkluaXQuQ2xvY2suU291cmNlKSA9PSBMUFRJTV9DTE9DS1NPVVJDRV9VTFBUSU0pCisgIGlmICgoaGxwdGltLT5Jbml0LkNsb2NrLlNvdXJjZSA9PSBMUFRJTV9DTE9DS1NPVVJDRV9VTFBUSU0pIAorICAgfHwgKGhscHRpbS0+SW5pdC5Db3VudGVyU291cmNlID09IExQVElNX0NPVU5URVJTT1VSQ0VfRVhURVJOQUwpKQogICB7CiAgICAgYXNzZXJ0X3BhcmFtKElTX0xQVElNX0NMT0NLX1BPTEFSSVRZKGhscHRpbS0+SW5pdC5VbHRyYUxvd1Bvd2VyQ2xvY2suUG9sYXJpdHkpKTsKICAgICBhc3NlcnRfcGFyYW0oSVNfTFBUSU1fQ0xPQ0tfU0FNUExFX1RJTUUoaGxwdGltLT5Jbml0LlVsdHJhTG93UG93ZXJDbG9jay5TYW1wbGVUaW1lKSk7CiAgIH0KICAgYXNzZXJ0X3BhcmFtKElTX0xQVElNX1RSR19TT1VSQ0UoaGxwdGltLT5Jbml0LlRyaWdnZXIuU291cmNlKSk7Ci0gIGlmICgoaGxwdGltLT5Jbml0LlRyaWdnZXIuU291cmNlKSAhPSBMUFRJTV9UUklHU09VUkNFX1NPRlRXQVJFKQorICBpZiAoaGxwdGltLT5Jbml0LlRyaWdnZXIuU291cmNlICE9IExQVElNX1RSSUdTT1VSQ0VfU09GVFdBUkUpCiAgIHsKLSAgICBhc3NlcnRfcGFyYW0oSVNfTFBUSU1fVFJJR19TQU1QTEVfVElNRShobHB0aW0tPkluaXQuVHJpZ2dlci5TYW1wbGVUaW1lKSk7CiAgICAgYXNzZXJ0X3BhcmFtKElTX0xQVElNX0VYVF9UUkdfUE9MQVJJVFkoaGxwdGltLT5Jbml0LlRyaWdnZXIuQWN0aXZlRWRnZSkpOworICAgIGFzc2VydF9wYXJhbShJU19MUFRJTV9UUklHX1NBTVBMRV9USU1FKGhscHRpbS0+SW5pdC5UcmlnZ2VyLlNhbXBsZVRpbWUpKTsKICAgfQogICBhc3NlcnRfcGFyYW0oSVNfTFBUSU1fT1VUUFVUX1BPTEFSSVRZKGhscHRpbS0+SW5pdC5PdXRwdXRQb2xhcml0eSkpOwogICBhc3NlcnRfcGFyYW0oSVNfTFBUSU1fVVBEQVRFX01PREUoaGxwdGltLT5Jbml0LlVwZGF0ZU1vZGUpKTsKQEAgLTI3NSwxNyArMjc2LDE4IEBACiAgIC8qIEdldCB0aGUgTFBUSU14IENGR1IgdmFsdWUgKi8KICAgdG1wY2ZnciA9IGhscHRpbS0+SW5zdGFuY2UtPkNGR1I7CiAKLSAgaWYgKCgoaGxwdGltLT5Jbml0LkNsb2NrLlNvdXJjZSkgPT0gTFBUSU1fQ0xPQ0tTT1VSQ0VfVUxQVElNKSB8fCAoKGhscHRpbS0+SW5pdC5Db3VudGVyU291cmNlKSA9PSBMUFRJTV9DT1VOVEVSU09VUkNFX0VYVEVSTkFMKSkKKyAgaWYgKChobHB0aW0tPkluaXQuQ2xvY2suU291cmNlID09IExQVElNX0NMT0NLU09VUkNFX1VMUFRJTSkgCisgICB8fCAoaGxwdGltLT5Jbml0LkNvdW50ZXJTb3VyY2UgPT0gTFBUSU1fQ09VTlRFUlNPVVJDRV9FWFRFUk5BTCkpCiAgIHsKICAgICB0bXBjZmdyICY9ICh1aW50MzJfdCkofihMUFRJTV9DRkdSX0NLUE9MIHwgTFBUSU1fQ0ZHUl9DS0ZMVCkpOwogICB9Ci0gIGlmICgoaGxwdGltLT5Jbml0LlRyaWdnZXIuU291cmNlKSAhPSBMUFRJTV9UUklHU09VUkNFX1NPRlRXQVJFKQorICBpZiAoaGxwdGltLT5Jbml0LlRyaWdnZXIuU291cmNlICE9IExQVElNX1RSSUdTT1VSQ0VfU09GVFdBUkUpCiAgIHsKICAgICB0bXBjZmdyICY9ICh1aW50MzJfdCkofihMUFRJTV9DRkdSX1RSR0ZMVCB8IExQVElNX0NGR1JfVFJJR1NFTCkpOwogICB9CiAKLSAgLyogQ2xlYXIgQ0tTRUwsIENLUE9MLCBQUkVTQywgVFJJR0VOLCBUUkdGTFQsIFdBVlBPTCwgUFJFTE9BRCAmIENPVU5UTU9ERSBiaXRzICovCi0gIHRtcGNmZ3IgJj0gKHVpbnQzMl90KSh+KExQVElNX0NGR1JfQ0tTRUwgfCBMUFRJTV9DRkdSX0NLUE9MIHwgTFBUSU1fQ0ZHUl9UUklHRU4gfCBMUFRJTV9DRkdSX1BSRUxPQUQgfAorICAvKiBDbGVhciBDS1NFTCwgUFJFU0MsIFRSSUdFTiwgVFJHRkxULCBXQVZQT0wsIFBSRUxPQUQgJiBDT1VOVE1PREUgYml0cyAqLworICB0bXBjZmdyICY9ICh1aW50MzJfdCkofihMUFRJTV9DRkdSX0NLU0VMIHwgTFBUSU1fQ0ZHUl9UUklHRU4gfCBMUFRJTV9DRkdSX1BSRUxPQUQgfAogICAgICAgICAgICAgICAgICAgICAgICAgICBMUFRJTV9DRkdSX1dBVlBPTCB8IExQVElNX0NGR1JfUFJFU0MgfCBMUFRJTV9DRkdSX0NPVU5UTU9ERSkpOwogCiAgIC8qIFNldCBpbml0aWFsaXphdGlvbiBwYXJhbWV0ZXJzICovCkBAIC0yOTUsMTMgKzI5NywyNSBAQAogICAgICAgICAgICAgICBobHB0aW0tPkluaXQuVXBkYXRlTW9kZSAgICAgIHwKICAgICAgICAgICAgICAgaGxwdGltLT5Jbml0LkNvdW50ZXJTb3VyY2UpOwogCi0gIGlmICgoKGhscHRpbS0+SW5pdC5DbG9jay5Tb3VyY2UpID09IExQVElNX0NMT0NLU09VUkNFX1VMUFRJTSkgfHwgKChobHB0aW0tPkluaXQuQ291bnRlclNvdXJjZSkgPT0gTFBUSU1fQ09VTlRFUlNPVVJDRV9FWFRFUk5BTCkpCisgIC8qIEdsaXRjaCBmaWx0ZXJzIGZvciBpbnRlcm5hbCB0cmlnZ2VycyBhbmQgIGV4dGVybmFsIGlucHV0cyBhcmUgY29uZmlndXJlZAorICAgKiBvbmx5IGlmIGFuIGludGVybmFsIGNsb2NrIHNvdXJjZSBpcyBwcm92aWRlZCB0byB0aGUgTFBUSU0KKyAgICovCisgIGlmIChobHB0aW0tPkluaXQuQ2xvY2suU291cmNlID09IExQVElNX0NMT0NLU09VUkNFX0FQQkNMT0NLX0xQT1NDKQorICB7CisgICAgdG1wY2ZnciB8PSAoaGxwdGltLT5Jbml0LlRyaWdnZXIuU2FtcGxlVGltZSB8CisgICAgICAgICAgICAgICAgaGxwdGltLT5Jbml0LlVsdHJhTG93UG93ZXJDbG9jay5TYW1wbGVUaW1lKTsKKyAgfQorCisgIC8qIENvbmZpZ3VyZSBMUFRJTSBleHRlcm5hbCBjbG9jayBwb2xhcml0eSBhbmQgZGlnaXRhbCBmaWx0ZXIgKi8KKyAgaWYgKChobHB0aW0tPkluaXQuQ2xvY2suU291cmNlID09IExQVElNX0NMT0NLU09VUkNFX1VMUFRJTSkgCisgICB8fCAoaGxwdGltLT5Jbml0LkNvdW50ZXJTb3VyY2UgPT0gTFBUSU1fQ09VTlRFUlNPVVJDRV9FWFRFUk5BTCkpCiAgIHsKICAgICB0bXBjZmdyIHw9IChobHB0aW0tPkluaXQuVWx0cmFMb3dQb3dlckNsb2NrLlBvbGFyaXR5IHwKICAgICAgICAgICAgICAgICBobHB0aW0tPkluaXQuVWx0cmFMb3dQb3dlckNsb2NrLlNhbXBsZVRpbWUpOwogICB9CiAKLSAgaWYgKChobHB0aW0tPkluaXQuVHJpZ2dlci5Tb3VyY2UpICE9IExQVElNX1RSSUdTT1VSQ0VfU09GVFdBUkUpCisgIC8qIENvbmZpZ3VyZSBMUFRJTSBleHRlcm5hbCB0cmlnZ2VyICovCisgIGlmIChobHB0aW0tPkluaXQuVHJpZ2dlci5Tb3VyY2UgIT0gTFBUSU1fVFJJR1NPVVJDRV9TT0ZUV0FSRSkKICAgewogICAgIC8qIEVuYWJsZSBFeHRlcm5hbCB0cmlnZ2VyIGFuZCBzZXQgdGhlIHRyaWdnZXIgc291cmNlICovCiAgICAgdG1wY2ZnciB8PSAoaGxwdGltLT5Jbml0LlRyaWdnZXIuU291cmNlICAgICB8CkBAIC00MDEsOCArNDE1LDggQEAKICAgKi8KIAogLyoqIEBkZWZncm91cCBMUFRJTV9FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXAyIExQVElNIFN0YXJ0LVN0b3Agb3BlcmF0aW9uIGZ1bmN0aW9ucwotICogIEBicmllZiAgIFN0YXJ0LVN0b3Agb3BlcmF0aW9uIGZ1bmN0aW9ucy4KLSAqCisgICogIEBicmllZiAgIFN0YXJ0LVN0b3Agb3BlcmF0aW9uIGZ1bmN0aW9ucy4KKyAgKgogQHZlcmJhdGltCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAgICAgICAgICAgICMjIyMjIExQVElNIFN0YXJ0IFN0b3Agb3BlcmF0aW9uIGZ1bmN0aW9ucyAjIyMjIwpAQCAtMTUzNSw3ICsxNTQ5LDggQEAKICAgaGxwdGltLT5TdGF0ZSA9IEhBTF9MUFRJTV9TVEFURV9CVVNZOwogCiAgIC8qIElmIGNsb2NrIHNvdXJjZSBpcyBub3QgVUxQVElNIGNsb2NrIGFuZCBjb3VudGVyIHNvdXJjZSBpcyBleHRlcm5hbCwgdGhlbiBpdCBtdXN0IG5vdCBiZSBwcmVzY2FsZWQgKi8KLSAgaWYgKChobHB0aW0tPkluaXQuQ2xvY2suU291cmNlICE9IExQVElNX0NMT0NLU09VUkNFX1VMUFRJTSkgJiYgKGhscHRpbS0+SW5pdC5Db3VudGVyU291cmNlID09IExQVElNX0NPVU5URVJTT1VSQ0VfRVhURVJOQUwpKQorICBpZiAoKGhscHRpbS0+SW5pdC5DbG9jay5Tb3VyY2UgIT0gTFBUSU1fQ0xPQ0tTT1VSQ0VfVUxQVElNKQorICAgICAgJiYgKGhscHRpbS0+SW5pdC5Db3VudGVyU291cmNlID09IExQVElNX0NPVU5URVJTT1VSQ0VfRVhURVJOQUwpKQogICB7CiAgICAgLyogQ2hlY2sgaWYgY2xvY2sgaXMgcHJlc2NhbGVkICovCiAgICAgYXNzZXJ0X3BhcmFtKElTX0xQVElNX0NMT0NLX1BSRVNDQUxFUkRJVjEoaGxwdGltLT5Jbml0LkNsb2NrLlByZXNjYWxlcikpOwpAQCAtMTYyMCw3ICsxNjM1LDggQEAKICNlbmRpZiAvKiBFWFRJX0lNUl9NUjIzICovCiAKICAgLyogSWYgY2xvY2sgc291cmNlIGlzIG5vdCBVTFBUSU0gY2xvY2sgYW5kIGNvdW50ZXIgc291cmNlIGlzIGV4dGVybmFsLCB0aGVuIGl0IG11c3Qgbm90IGJlIHByZXNjYWxlZCAqLwotICBpZiAoKGhscHRpbS0+SW5pdC5DbG9jay5Tb3VyY2UgIT0gTFBUSU1fQ0xPQ0tTT1VSQ0VfVUxQVElNKSAmJiAoaGxwdGltLT5Jbml0LkNvdW50ZXJTb3VyY2UgPT0gTFBUSU1fQ09VTlRFUlNPVVJDRV9FWFRFUk5BTCkpCisgIGlmICgoaGxwdGltLT5Jbml0LkNsb2NrLlNvdXJjZSAhPSBMUFRJTV9DTE9DS1NPVVJDRV9VTFBUSU0pCisgICAgICAmJiAoaGxwdGltLT5Jbml0LkNvdW50ZXJTb3VyY2UgPT0gTFBUSU1fQ09VTlRFUlNPVVJDRV9FWFRFUk5BTCkpCiAgIHsKICAgICAvKiBDaGVjayBpZiBjbG9jayBpcyBwcmVzY2FsZWQgKi8KICAgICBhc3NlcnRfcGFyYW0oSVNfTFBUSU1fQ0xPQ0tfUFJFU0NBTEVSRElWMShobHB0aW0tPkluaXQuQ2xvY2suUHJlc2NhbGVyKSk7CkBAIC0xNzE1LDggKzE3MzEsOCBAQAogICAqLwogCiAvKiogQGRlZmdyb3VwIExQVElNX0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDMgTFBUSU0gUmVhZCBvcGVyYXRpb24gZnVuY3Rpb25zCi0gKiAgQGJyaWVmICBSZWFkIG9wZXJhdGlvbiBmdW5jdGlvbnMuCi0gKgorICAqICBAYnJpZWYgIFJlYWQgb3BlcmF0aW9uIGZ1bmN0aW9ucy4KKyAgKgogQHZlcmJhdGltCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAgICAgICAgICAgICAgIyMjIyMgTFBUSU0gUmVhZCBvcGVyYXRpb24gZnVuY3Rpb25zICMjIyMjCkBAIC0xNzczLDggKzE3ODksOCBAQAogICAqLwogCiAvKiogQGRlZmdyb3VwIExQVElNX0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDQgTFBUSU0gSVJRIGhhbmRsZXIgYW5kIGNhbGxiYWNrcwotICogIEBicmllZiAgTFBUSU0gIElSUSBoYW5kbGVyLgotICoKKyAgKiAgQGJyaWVmICBMUFRJTSAgSVJRIGhhbmRsZXIuCisgICoKIEB2ZXJiYXRpbQogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgICAgICAgICAgICAgICAgICAjIyMjIyBMUFRJTSBJUlEgaGFuZGxlciBhbmQgY2FsbGJhY2tzICAjIyMjIwpAQCAtMjI0NCw4ICsyMjYwLDggQEAKICAgKi8KIAogLyoqIEBkZWZncm91cCBMUFRJTV9Hcm91cDUgUGVyaXBoZXJhbCBTdGF0ZSBmdW5jdGlvbnMKLSAqICBAYnJpZWYgICBQZXJpcGhlcmFsIFN0YXRlIGZ1bmN0aW9ucy4KLSAqCisgICogIEBicmllZiAgIFBlcmlwaGVyYWwgU3RhdGUgZnVuY3Rpb25zLgorICAqCiBAdmVyYmF0aW0KICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgICAgICAgICAgICAgICAgIyMjIyMgUGVyaXBoZXJhbCBTdGF0ZSBmdW5jdGlvbnMgIyMjIyMKQEAgLTIzMjAsOCArMjMzNiw3IEBACiAgICAgewogICAgICAgcmVzdWx0ID0gSEFMX1RJTUVPVVQ7CiAgICAgfQotICB9Ci0gIHdoaWxlICgoIShfX0hBTF9MUFRJTV9HRVRfRkxBRygoaGxwdGltKSwgKGZsYWcpKSkpICYmIChjb3VudCAhPSAwVUwpKTsKKyAgfSB3aGlsZSAoKCEoX19IQUxfTFBUSU1fR0VUX0ZMQUcoKGhscHRpbSksIChmbGFnKSkpKSAmJiAoY291bnQgIT0gMFVMKSk7CiAKICAgcmV0dXJuIHJlc3VsdDsKIH0KZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmY0eHhfaGFsX21tYy5jIGIvU3JjL3N0bTMyZjR4eF9oYWxfbW1jLmMKaW5kZXggZWFmNzA4OC4uMGJlOTg2MCAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZjR4eF9oYWxfbW1jLmMKKysrIGIvU3JjL3N0bTMyZjR4eF9oYWxfbW1jLmMKQEAgLTI4Nyw2ICsyODcsNyBAQAogc3RhdGljIHVpbnQzMl90IE1NQ19Jbml0Q2FyZChNTUNfSGFuZGxlVHlwZURlZiAqaG1tYyk7CiBzdGF0aWMgdWludDMyX3QgTU1DX1Bvd2VyT04oTU1DX0hhbmRsZVR5cGVEZWYgKmhtbWMpOwogc3RhdGljIHVpbnQzMl90IE1NQ19TZW5kU3RhdHVzKE1NQ19IYW5kbGVUeXBlRGVmICpobW1jLCB1aW50MzJfdCAqcENhcmRTdGF0dXMpOworc3RhdGljIHVpbnQzMl90IE1NQ19SZWFkRXh0Q1NEKE1NQ19IYW5kbGVUeXBlRGVmICpobW1jLCB1aW50MzJfdCAqcEZpZWxkRGF0YSwgdWludDE2X3QgRmllbGRJbmRleCwgdWludDMyX3QgVGltZW91dCk7CiBzdGF0aWMgdm9pZCAgICAgTU1DX1Bvd2VyT0ZGKE1NQ19IYW5kbGVUeXBlRGVmICpobW1jKTsKIHN0YXRpYyB2b2lkICAgICBNTUNfV3JpdGVfSVQoTU1DX0hhbmRsZVR5cGVEZWYgKmhtbWMpOwogc3RhdGljIHZvaWQgICAgIE1NQ19SZWFkX0lUKE1NQ19IYW5kbGVUeXBlRGVmICpobW1jKTsKQEAgLTQ0NCw2ICs0NDUsMTcgQEAKICAgICByZXR1cm4gSEFMX0VSUk9SOwogICB9CiAKKyAgLyogU2V0IEJsb2NrIFNpemUgZm9yIENhcmQgKi8KKyAgZXJyb3JzdGF0ZSA9IFNETU1DX0NtZEJsb2NrTGVuZ3RoKGhtbWMtPkluc3RhbmNlLCBNTUNfQkxPQ0tTSVpFKTsKKyAgaWYoZXJyb3JzdGF0ZSAhPSBIQUxfTU1DX0VSUk9SX05PTkUpCisgIHsKKyAgICAvKiBDbGVhciBhbGwgdGhlIHN0YXRpYyBmbGFncyAqLworICAgIF9fSEFMX01NQ19DTEVBUl9GTEFHKGhtbWMsIFNESU9fU1RBVElDX0ZMQUdTKTsKKyAgICBobW1jLT5FcnJvckNvZGUgfD0gZXJyb3JzdGF0ZTsKKyAgICBobW1jLT5TdGF0ZSA9IEhBTF9NTUNfU1RBVEVfUkVBRFk7CisgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgfQorCiAgIHJldHVybiBIQUxfT0s7CiB9CiAKQEAgLTU4NCwxNyArNTk2LDYgQEAKICAgICAgIGFkZCAqPSA1MTJVOwogICAgIH0KIAotICAgIC8qIFNldCBCbG9jayBTaXplIGZvciBDYXJkICovCi0gICAgZXJyb3JzdGF0ZSA9IFNETU1DX0NtZEJsb2NrTGVuZ3RoKGhtbWMtPkluc3RhbmNlLCBNTUNfQkxPQ0tTSVpFKTsKLSAgICBpZihlcnJvcnN0YXRlICE9IEhBTF9NTUNfRVJST1JfTk9ORSkKLSAgICB7Ci0gICAgICAvKiBDbGVhciBhbGwgdGhlIHN0YXRpYyBmbGFncyAqLwotICAgICAgX19IQUxfTU1DX0NMRUFSX0ZMQUcoaG1tYywgU0RJT19TVEFUSUNfRkxBR1MpOwotICAgICAgaG1tYy0+RXJyb3JDb2RlIHw9IGVycm9yc3RhdGU7Ci0gICAgICBobW1jLT5TdGF0ZSA9IEhBTF9NTUNfU1RBVEVfUkVBRFk7Ci0gICAgICByZXR1cm4gSEFMX0VSUk9SOwotICAgIH0KLQogICAgIC8qIENvbmZpZ3VyZSB0aGUgTU1DIERQU00gKERhdGEgUGF0aCBTdGF0ZSBNYWNoaW5lKSAqLwogICAgIGNvbmZpZy5EYXRhVGltZU91dCAgID0gU0RNTUNfREFUQVRJTUVPVVQ7CiAgICAgY29uZmlnLkRhdGFMZW5ndGggICAgPSBOdW1iZXJPZkJsb2NrcyAqIE1NQ19CTE9DS1NJWkU7CkBAIC04MDAsMTcgKzgwMSw2IEBACiAgICAgICBhZGQgKj0gNTEyVTsKICAgICB9CiAKLSAgICAvKiBTZXQgQmxvY2sgU2l6ZSBmb3IgQ2FyZCAqLwotICAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRCbG9ja0xlbmd0aChobW1jLT5JbnN0YW5jZSwgTU1DX0JMT0NLU0laRSk7Ci0gICAgaWYoZXJyb3JzdGF0ZSAhPSBIQUxfTU1DX0VSUk9SX05PTkUpCi0gICAgewotICAgICAgLyogQ2xlYXIgYWxsIHRoZSBzdGF0aWMgZmxhZ3MgKi8KLSAgICAgIF9fSEFMX01NQ19DTEVBUl9GTEFHKGhtbWMsIFNESU9fU1RBVElDX0ZMQUdTKTsKLSAgICAgIGhtbWMtPkVycm9yQ29kZSB8PSBlcnJvcnN0YXRlOwotICAgICAgaG1tYy0+U3RhdGUgPSBIQUxfTU1DX1NUQVRFX1JFQURZOwotICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKLSAgICB9Ci0KICAgICAvKiBXcml0ZSBCbG9ja3MgaW4gUG9sbGluZyBtb2RlICovCiAgICAgaWYoTnVtYmVyT2ZCbG9ja3MgPiAxVSkKICAgICB7CkBAIC05OTYsMTcgKzk4Niw2IEBACiAgICAgICBhZGQgKj0gNTEyVTsKICAgICB9CiAKLSAgICAvKiBTZXQgQmxvY2sgU2l6ZSBmb3IgQ2FyZCAqLwotICAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRCbG9ja0xlbmd0aChobW1jLT5JbnN0YW5jZSwgTU1DX0JMT0NLU0laRSk7Ci0gICAgaWYoZXJyb3JzdGF0ZSAhPSBIQUxfTU1DX0VSUk9SX05PTkUpCi0gICAgewotICAgICAgLyogQ2xlYXIgYWxsIHRoZSBzdGF0aWMgZmxhZ3MgKi8KLSAgICAgIF9fSEFMX01NQ19DTEVBUl9GTEFHKGhtbWMsIFNESU9fU1RBVElDX0ZMQUdTKTsKLSAgICAgIGhtbWMtPkVycm9yQ29kZSB8PSBlcnJvcnN0YXRlOwotICAgICAgaG1tYy0+U3RhdGUgPSBIQUxfTU1DX1NUQVRFX1JFQURZOwotICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKLSAgICB9Ci0KICAgICAvKiBDb25maWd1cmUgdGhlIE1NQyBEUFNNIChEYXRhIFBhdGggU3RhdGUgTWFjaGluZSkgKi8KICAgICBjb25maWcuRGF0YVRpbWVPdXQgICA9IFNETU1DX0RBVEFUSU1FT1VUOwogICAgIGNvbmZpZy5EYXRhTGVuZ3RoICAgID0gTU1DX0JMT0NLU0laRSAqIE51bWJlck9mQmxvY2tzOwpAQCAtMTEwNCwxNyArMTA4Myw2IEBACiAgICAgICBhZGQgKj0gNTEyVTsKICAgICB9CiAKLSAgICAvKiBTZXQgQmxvY2sgU2l6ZSBmb3IgQ2FyZCAqLwotICAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRCbG9ja0xlbmd0aChobW1jLT5JbnN0YW5jZSwgTU1DX0JMT0NLU0laRSk7Ci0gICAgaWYoZXJyb3JzdGF0ZSAhPSBIQUxfTU1DX0VSUk9SX05PTkUpCi0gICAgewotICAgICAgLyogQ2xlYXIgYWxsIHRoZSBzdGF0aWMgZmxhZ3MgKi8KLSAgICAgIF9fSEFMX01NQ19DTEVBUl9GTEFHKGhtbWMsIFNESU9fU1RBVElDX0ZMQUdTKTsKLSAgICAgIGhtbWMtPkVycm9yQ29kZSB8PSBlcnJvcnN0YXRlOwotICAgICAgaG1tYy0+U3RhdGUgPSBIQUxfTU1DX1NUQVRFX1JFQURZOwotICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKLSAgICB9Ci0KICAgICAvKiBXcml0ZSBCbG9ja3MgaW4gUG9sbGluZyBtb2RlICovCiAgICAgaWYoTnVtYmVyT2ZCbG9ja3MgPiAxVSkKICAgICB7CkBAIC0xMjE2LDE2ICsxMTg0LDkgQEAKICAgICAgIGFkZCAqPSA1MTJVOwogICAgIH0KIAotICAgIC8qIFNldCBCbG9jayBTaXplIGZvciBDYXJkICovIAotICAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRCbG9ja0xlbmd0aChobW1jLT5JbnN0YW5jZSwgTU1DX0JMT0NLU0laRSk7Ci0gICAgaWYoZXJyb3JzdGF0ZSAhPSBIQUxfTU1DX0VSUk9SX05PTkUpCi0gICAgewotICAgICAgLyogQ2xlYXIgYWxsIHRoZSBzdGF0aWMgZmxhZ3MgKi8KLSAgICAgIF9fSEFMX01NQ19DTEVBUl9GTEFHKGhtbWMsIFNESU9fU1RBVElDX0ZMQUdTKTsgCi0gICAgICBobW1jLT5FcnJvckNvZGUgPSBlcnJvcnN0YXRlOwotICAgICAgaG1tYy0+U3RhdGUgPSBIQUxfTU1DX1NUQVRFX1JFQURZOwotICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKLSAgICB9CisgICAgLyogRm9yY2UgRE1BIERpcmVjdGlvbiAqLworICAgIGhtbWMtPmhkbWFyeC0+SW5pdC5EaXJlY3Rpb24gPSBETUFfUEVSSVBIX1RPX01FTU9SWTsKKyAgICBNT0RJRllfUkVHKGhtbWMtPmhkbWFyeC0+SW5zdGFuY2UtPkNSLCBETUFfU3hDUl9ESVIsIGhtbWMtPmhkbWFyeC0+SW5pdC5EaXJlY3Rpb24pOwogCiAgICAgLyogRW5hYmxlIHRoZSBETUEgQ2hhbm5lbCAqLwogICAgIGlmKEhBTF9ETUFfU3RhcnRfSVQoaG1tYy0+aGRtYXJ4LCAodWludDMyX3QpJmhtbWMtPkluc3RhbmNlLT5GSUZPLCAodWludDMyX3QpcERhdGEsICh1aW50MzJfdCkoTU1DX0JMT0NLU0laRSAqIE51bWJlck9mQmxvY2tzKS80KSAhPSBIQUxfT0spCkBAIC0xMzQ1LDE2ICsxMzA2LDYgQEAKICAgICAgIGFkZCAqPSA1MTJVOwogICAgIH0KIAotICAgIC8qIFNldCBCbG9jayBTaXplIGZvciBDYXJkICovCi0gICAgZXJyb3JzdGF0ZSA9IFNETU1DX0NtZEJsb2NrTGVuZ3RoKGhtbWMtPkluc3RhbmNlLCBNTUNfQkxPQ0tTSVpFKTsKLSAgICBpZihlcnJvcnN0YXRlICE9IEhBTF9NTUNfRVJST1JfTk9ORSkKLSAgICB7Ci0gICAgICAvKiBDbGVhciBhbGwgdGhlIHN0YXRpYyBmbGFncyAqLwotICAgICAgX19IQUxfTU1DX0NMRUFSX0ZMQUcoaG1tYywgU0RJT19TVEFUSUNfRkxBR1MpOwotICAgICAgaG1tYy0+RXJyb3JDb2RlIHw9IGVycm9yc3RhdGU7Ci0gICAgICBobW1jLT5TdGF0ZSA9IEhBTF9NTUNfU1RBVEVfUkVBRFk7Ci0gICAgICByZXR1cm4gSEFMX0VSUk9SOwotICAgIH0KIAogICAgIC8qIFdyaXRlIEJsb2NrcyBpbiBQb2xsaW5nIG1vZGUgKi8KICAgICBpZihOdW1iZXJPZkJsb2NrcyA+IDFVKQpAQCAtMTM4NCw2ICsxMzM1LDEwIEBACiAgICAgLyogRW5hYmxlIFNESU8gRE1BIHRyYW5zZmVyICovCiAgICAgX19IQUxfTU1DX0RNQV9FTkFCTEUoaG1tYyk7CiAKKyAgICAvKiBGb3JjZSBETUEgRGlyZWN0aW9uICovCisgICAgaG1tYy0+aGRtYXR4LT5Jbml0LkRpcmVjdGlvbiA9IERNQV9NRU1PUllfVE9fUEVSSVBIOworICAgIE1PRElGWV9SRUcoaG1tYy0+aGRtYXR4LT5JbnN0YW5jZS0+Q1IsIERNQV9TeENSX0RJUiwgaG1tYy0+aGRtYXR4LT5Jbml0LkRpcmVjdGlvbik7CisKICAgICAvKiBFbmFibGUgdGhlIERNQSBDaGFubmVsICovCiAgICAgaWYoSEFMX0RNQV9TdGFydF9JVChobW1jLT5oZG1hdHgsICh1aW50MzJfdClwRGF0YSwgKHVpbnQzMl90KSZobW1jLT5JbnN0YW5jZS0+RklGTywgKHVpbnQzMl90KShNTUNfQkxPQ0tTSVpFICogTnVtYmVyT2ZCbG9ja3MpLzQpICE9IEhBTF9PSykKICAgICB7CkBAIC0yMDQ1LDYgKzIwMDAsOCBAQAogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX01NQ19HZXRDYXJkQ1NEKE1NQ19IYW5kbGVUeXBlRGVmICpobW1jLCBIQUxfTU1DX0NhcmRDU0RUeXBlRGVmICpwQ1NEKQogeworICB1aW50MzJfdCBibG9ja19uYnIgPSAwOworCiAgIHBDU0QtPkNTRFN0cnVjdCA9ICh1aW50OF90KSgoaG1tYy0+Q1NEWzBdICYgMHhDMDAwMDAwMFUpID4+IDMwVSk7CiAKICAgcENTRC0+U3lzU3BlY1ZlcnNpb24gPSAodWludDhfdCkoKGhtbWMtPkNTRFswXSAmIDB4M0MwMDAwMDBVKSA+PiAyNlUpOwpAQCAtMjA4MywxMyArMjA0MCwzNSBAQAogCiAgIHBDU0QtPkRldmljZVNpemVNdWwgPSAodWludDhfdCkoKGhtbWMtPkNTRFsyXSAmIDB4MDAwMzgwMDBVKSA+PiAxNVUpOwogCi0gIGhtbWMtPk1tY0NhcmQuQmxvY2tOYnIgID0gKHBDU0QtPkRldmljZVNpemUgKyAxVSkgOwotICBobW1jLT5NbWNDYXJkLkJsb2NrTmJyICo9ICgxVUwgPDwgKChwQ1NELT5EZXZpY2VTaXplTXVsICYgMHgwN1UpICsgMlUpKTsKLSAgaG1tYy0+TW1jQ2FyZC5CbG9ja1NpemUgPSAoMVVMIDw8IChwQ1NELT5SZEJsb2NrTGVuICYgMHgwRlUpKTsKKyAgaWYoTU1DX1JlYWRFeHRDU0QoaG1tYywgJmJsb2NrX25iciwgMjEyLCAweDBGRkZGRkZGVSkgIT0gSEFMX09LKSAvKiBGaWVsZCBTRUNfQ09VTlQgWzIxNToyMTJdICovCisgIHsKKyAgICByZXR1cm4gSEFMX0VSUk9SOworICB9CiAKLSAgaG1tYy0+TW1jQ2FyZC5Mb2dCbG9ja05iciA9ICAoaG1tYy0+TW1jQ2FyZC5CbG9ja05icikgKiAoKGhtbWMtPk1tY0NhcmQuQmxvY2tTaXplKSAvIDUxMlUpOwotICBobW1jLT5NbWNDYXJkLkxvZ0Jsb2NrU2l6ZSA9IDUxMlU7Ci0gIAorICBpZihobW1jLT5NbWNDYXJkLkNhcmRUeXBlID09IE1NQ19MT1dfQ0FQQUNJVFlfQ0FSRCkKKyAgeworICAgIGhtbWMtPk1tY0NhcmQuQmxvY2tOYnIgID0gKHBDU0QtPkRldmljZVNpemUgKyAxVSkgOworICAgIGhtbWMtPk1tY0NhcmQuQmxvY2tOYnIgKj0gKDFVTCA8PCAoKHBDU0QtPkRldmljZVNpemVNdWwgJiAweDA3VSkgKyAyVSkpOworICAgIGhtbWMtPk1tY0NhcmQuQmxvY2tTaXplID0gKDFVTCA8PCAocENTRC0+UmRCbG9ja0xlbiAmIDB4MEZVKSk7CisgICAgaG1tYy0+TW1jQ2FyZC5Mb2dCbG9ja05iciA9ICAoaG1tYy0+TW1jQ2FyZC5CbG9ja05icikgKiAoKGhtbWMtPk1tY0NhcmQuQmxvY2tTaXplKSAvIDUxMlUpOworICAgIGhtbWMtPk1tY0NhcmQuTG9nQmxvY2tTaXplID0gNTEyVTsKKyAgfQorICBlbHNlIGlmKGhtbWMtPk1tY0NhcmQuQ2FyZFR5cGUgPT0gTU1DX0hJR0hfQ0FQQUNJVFlfQ0FSRCkKKyAgeworICAgIGhtbWMtPk1tY0NhcmQuQmxvY2tOYnIgPSBibG9ja19uYnI7CisgICAgaG1tYy0+TW1jQ2FyZC5Mb2dCbG9ja05iciA9IGhtbWMtPk1tY0NhcmQuQmxvY2tOYnI7CisgICAgaG1tYy0+TW1jQ2FyZC5CbG9ja1NpemUgPSA1MTJVOworICAgIGhtbWMtPk1tY0NhcmQuTG9nQmxvY2tTaXplID0gaG1tYy0+TW1jQ2FyZC5CbG9ja1NpemU7CisgIH0KKyAgZWxzZQorICB7CisgICAgLyogQ2xlYXIgYWxsIHRoZSBzdGF0aWMgZmxhZ3MgKi8KKyAgICBfX0hBTF9NTUNfQ0xFQVJfRkxBRyhobW1jLCBTRElPX1NUQVRJQ19GTEFHUyk7CisgICAgaG1tYy0+RXJyb3JDb2RlIHw9IEhBTF9NTUNfRVJST1JfVU5TVVBQT1JURURfRkVBVFVSRTsKKyAgICBobW1jLT5TdGF0ZSA9IEhBTF9NTUNfU1RBVEVfUkVBRFk7CisgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgfQorCiAgIHBDU0QtPkVyYXNlR3JTaXplID0gKHVpbnQ4X3QpKChobW1jLT5DU0RbMl0gJiAweDAwMDA0MDAwVSkgPj4gMTRVKTsKIAogICBwQ1NELT5FcmFzZUdyTXVsID0gKHVpbnQ4X3QpKChobW1jLT5DU0RbMl0gJiAweDAwMDAzRjgwVSkgPj4gN1UpOwpAQCAtMjE3MCw3ICsyMTQ5LDcgQEAKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KICAgYXNzZXJ0X3BhcmFtKElTX1NESU9fQlVTX1dJREUoV2lkZU1vZGUpKTsKIAotICAvKiBDaG5hZ2UgU2F0dGUgKi8KKyAgLyogQ2hhbmdlIFN0YXRlICovCiAgIGhtbWMtPlN0YXRlID0gSEFMX01NQ19TVEFURV9CVVNZOwogCiAgIC8qIFVwZGF0ZSBDbG9jayBmb3IgQnVzIG1vZGUgdXBkYXRlICovCkBAIC0yODExLDYgKzI3OTAsOTMgQEAKIH0KIAogLyoqCisgICogQGJyaWVmICBSZWFkcyBleHRlbmRlZCBDU0QgcmVnaXN0ZXIgdG8gZ2V0IHRoZSBzZWN0b3JzIG51bWJlciBvZiB0aGUgZGV2aWNlCisgICogQHBhcmFtICBobW1jOiBQb2ludGVyIHRvIE1NQyBoYW5kbGUKKyAgKiBAcGFyYW0gIHBGaWVsZERhdGE6IFBvaW50ZXIgdG8gdGhlIHJlYWQgYnVmZmVyCisgICogQHBhcmFtICBGaWVsZEluZGV4OiBJbmRleCBvZiB0aGUgZmllbGQgdG8gYmUgcmVhZAorICAqIEBwYXJhbSAgVGltZW91dDogU3BlY2lmeSB0aW1lb3V0IHZhbHVlCisgICogQHJldHZhbCBIQUwgc3RhdHVzCisgICovCitzdGF0aWMgdWludDMyX3QgTU1DX1JlYWRFeHRDU0QoTU1DX0hhbmRsZVR5cGVEZWYgKmhtbWMsIHVpbnQzMl90ICpwRmllbGREYXRhLCB1aW50MTZfdCBGaWVsZEluZGV4LCB1aW50MzJfdCBUaW1lb3V0KQoreworICBTRElPX0RhdGFJbml0VHlwZURlZiBjb25maWc7CisgIHVpbnQzMl90IGVycm9yc3RhdGU7CisgIHVpbnQzMl90IHRpY2tzdGFydCA9IEhBTF9HZXRUaWNrKCk7CisgIHVpbnQzMl90IGNvdW50OworICB1aW50MzJfdCBpID0gMDsKKyAgdWludDMyX3QgdG1wX2RhdGE7CisKKyAgaG1tYy0+RXJyb3JDb2RlID0gSEFMX01NQ19FUlJPUl9OT05FOworCisgIC8qIEluaXRpYWxpemUgZGF0YSBjb250cm9sIHJlZ2lzdGVyICovCisgIGhtbWMtPkluc3RhbmNlLT5EQ1RSTCA9IDA7CisKKyAgLyogQ29uZmlndXJlIHRoZSBNTUMgRFBTTSAoRGF0YSBQYXRoIFN0YXRlIE1hY2hpbmUpICovCisgIGNvbmZpZy5EYXRhVGltZU91dCAgID0gU0RNTUNfREFUQVRJTUVPVVQ7CisgIGNvbmZpZy5EYXRhTGVuZ3RoICAgID0gNTEyOworICBjb25maWcuRGF0YUJsb2NrU2l6ZSA9IFNESU9fREFUQUJMT0NLX1NJWkVfNTEyQjsKKyAgY29uZmlnLlRyYW5zZmVyRGlyICAgPSBTRElPX1RSQU5TRkVSX0RJUl9UT19TRElPOworICBjb25maWcuVHJhbnNmZXJNb2RlICA9IFNESU9fVFJBTlNGRVJfTU9ERV9CTE9DSzsKKyAgY29uZmlnLkRQU00gICAgICAgICAgPSBTRElPX0RQU01fRU5BQkxFOworICAodm9pZClTRElPX0NvbmZpZ0RhdGEoaG1tYy0+SW5zdGFuY2UsICZjb25maWcpOworCisgIC8qIFNldCBCbG9jayBTaXplIGZvciBDYXJkICovCisgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRTZW5kRVhUQ1NEKGhtbWMtPkluc3RhbmNlLCAwKTsKKyAgaWYoZXJyb3JzdGF0ZSAhPSBIQUxfTU1DX0VSUk9SX05PTkUpCisgIHsKKyAgICAvKiBDbGVhciBhbGwgdGhlIHN0YXRpYyBmbGFncyAqLworICAgIF9fSEFMX01NQ19DTEVBUl9GTEFHKGhtbWMsIFNESU9fU1RBVElDX0ZMQUdTKTsKKyAgICBobW1jLT5FcnJvckNvZGUgfD0gZXJyb3JzdGF0ZTsKKyAgICBobW1jLT5TdGF0ZSA9IEhBTF9NTUNfU1RBVEVfUkVBRFk7CisgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgfQorCisgIC8qIFBvbGwgb24gU0RNTUMgZmxhZ3MgKi8KKyAgd2hpbGUoIV9fSEFMX01NQ19HRVRfRkxBRyhobW1jLCBTRElPX0ZMQUdfUlhPVkVSUiB8IFNESU9fRkxBR19EQ1JDRkFJTCB8IFNESU9fRkxBR19EVElNRU9VVCB8IFNESU9fRkxBR19EQVRBRU5EKSkKKyAgeworICAgIGlmKF9fSEFMX01NQ19HRVRfRkxBRyhobW1jLCBTRElPX0ZMQUdfUlhGSUZPSEYpKQorICAgIHsKKyAgICAgIC8qIFJlYWQgZGF0YSBmcm9tIFNETU1DIFJ4IEZJRk8gKi8KKyAgICAgIGZvcihjb3VudCA9IDBVOyBjb3VudCA8IDhVOyBjb3VudCsrKQorICAgICAgeworICAgICAgICB0bXBfZGF0YSA9IFNESU9fUmVhZEZJRk8oaG1tYy0+SW5zdGFuY2UpOworICAgICAgICAvKiBlZyA6IFNFQ19DT1VOVCAgIDogRmllbGRJbmRleCA9IDIxMiA9PiBpK2NvdW50ID0gNTMgKi8KKyAgICAgICAgLyogICAgICBERVZJQ0VfVFlQRSA6IEZpZWxkSW5kZXggPSAxOTYgPT4gaStjb3VudCA9IDQ5ICovCisgICAgICAgIGlmICgoaSArIGNvdW50KSA9PSAoKHVpbnQzMl90KUZpZWxkSW5kZXgvNFUpKQorICAgICAgICB7CisgICAgICAgICAgKnBGaWVsZERhdGEgPSB0bXBfZGF0YTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgaSArPSA4VTsKKyAgICB9CisKKyAgICBpZigoKEhBTF9HZXRUaWNrKCktdGlja3N0YXJ0KSA+PSAgVGltZW91dCkgfHwgKFRpbWVvdXQgPT0gMFUpKQorICAgIHsKKyAgICAgIC8qIENsZWFyIGFsbCB0aGUgc3RhdGljIGZsYWdzICovCisgICAgICBfX0hBTF9NTUNfQ0xFQVJfRkxBRyhobW1jLCBTRElPX1NUQVRJQ19GTEFHUyk7CisgICAgICBobW1jLT5FcnJvckNvZGUgfD0gSEFMX01NQ19FUlJPUl9USU1FT1VUOworICAgICAgaG1tYy0+U3RhdGU9IEhBTF9NTUNfU1RBVEVfUkVBRFk7CisgICAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CisgICAgfQorICB9CisKKyAgLyogV2hpbGUgY2FyZCBpcyBub3QgcmVhZHkgZm9yIGRhdGEgYW5kIHRyaWFsIG51bWJlciBmb3Igc2VuZGluZyBDTUQxMyBpcyBub3QgZXhjZWVkZWQgKi8KKyAgZXJyb3JzdGF0ZSA9IFNETU1DX0NtZFNlbmRTdGF0dXMoaG1tYy0+SW5zdGFuY2UsICh1aW50MzJfdCkoKCh1aW50MzJfdClobW1jLT5NbWNDYXJkLlJlbENhcmRBZGQpIDw8IDE2KSk7CisgIGlmKGVycm9yc3RhdGUgIT0gSEFMX01NQ19FUlJPUl9OT05FKQorICB7CisgICAgaG1tYy0+RXJyb3JDb2RlIHw9IGVycm9yc3RhdGU7CisgIH0KKworICAvKiBDbGVhciBhbGwgdGhlIHN0YXRpYyBmbGFncyAqLworICBfX0hBTF9NTUNfQ0xFQVJfRkxBRyhobW1jLCBTRElPX1NUQVRJQ19EQVRBX0ZMQUdTKTsKKworICBobW1jLT5TdGF0ZSA9IEhBTF9NTUNfU1RBVEVfUkVBRFk7CisKKyAgcmV0dXJuIEhBTF9PSzsKK30KKworCisvKioKICAgKiBAYnJpZWYgIFdyYXAgdXAgcmVhZGluZyBpbiBub24tYmxvY2tpbmcgbW9kZS4KICAgKiBAcGFyYW0gIGhtbWM6IHBvaW50ZXIgdG8gYSBNTUNfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucwogICAqICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbi4KZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmY0eHhfaGFsX25hbmQuYyBiL1NyYy9zdG0zMmY0eHhfaGFsX25hbmQuYwppbmRleCAzNDA0ZDE5Li4yYmZmNDdmIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmNHh4X2hhbF9uYW5kLmMKKysrIGIvU3JjL3N0bTMyZjR4eF9oYWxfbmFuZC5jCkBAIC03NjAsNiArNzYwLDIxIEBACiAgICAgICAvKiBHbyBiYWNrIHRvIHJlYWQgbW9kZSAqLwogICAgICAgKihfX0lPIHVpbnQ4X3QgKikoKHVpbnQzMl90KShkZXZpY2VhZGRyZXNzIHwgQ01EX0FSRUEpKSA9ICgodWludDhfdCkweDAwKTsKICAgICB9CisKKyAgICAvKiBDYWxjdWxhdGUgUGFnZVNpemUgKi8KKyNpZmRlZiBGU01DX1BDUjJfUFdJRAorICAgIGlmIChobmFuZC0+SW5pdC5NZW1vcnlEYXRhV2lkdGggPT0gRlNNQ19OQU5EX1BDQ19NRU1fQlVTX1dJRFRIXzgpCisjZWxzZSAvKiBGTUNfUENSMl9QV0lEIGlzIGRlZmluZWQgKi8KKyAgICBpZiAoaG5hbmQtPkluaXQuTWVtb3J5RGF0YVdpZHRoID09IEZNQ19OQU5EX1BDQ19NRU1fQlVTX1dJRFRIXzgpCisjZW5kaWYKKyAgICB7CisgICAgICBzaXplID0gc2l6ZSAvIDJVOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgLyogRG8gbm90aGluZyAqLworICAgICAgLyogS2VlcCB0aGUgc2FtZSBQYWdlU2l6ZSBmb3IgRk1DX05BTkRfTUVNX0JVU19XSURUSF8xNiovCisgICAgfQogICAgIAogICAgIC8qIEdldCBEYXRhIGludG8gQnVmZmVyICovICAgIAogICAgIGZvcig7IGluZGV4IDwgc2l6ZTsgaW5kZXgrKykKQEAgLTEwMDIsNiArMTAxNywyMSBAQAogICAgICAgICAqKF9fSU8gdWludDhfdCAqKSgodWludDMyX3QpKGRldmljZWFkZHJlc3MgfCBBRERSX0FSRUEpKSA9IEFERFJfM1JEX0NZQ0xFKG5hbmRhZGRyZXNzKTsKICAgICAgIH0KICAgICB9CisKKyAgICAvKiBDYWxjdWxhdGUgUGFnZVNpemUgKi8KKyNpZmRlZiBGU01DX1BDUjJfUFdJRAorICAgIGlmIChobmFuZC0+SW5pdC5NZW1vcnlEYXRhV2lkdGggPT0gRlNNQ19OQU5EX1BDQ19NRU1fQlVTX1dJRFRIXzgpCisjZWxzZSAvKiBGTUNfUENSMl9QV0lEIGlzIGRlZmluZWQgKi8KKyAgICBpZiAoaG5hbmQtPkluaXQuTWVtb3J5RGF0YVdpZHRoID09IEZNQ19OQU5EX1BDQ19NRU1fQlVTX1dJRFRIXzgpCisjZW5kaWYKKyAgICB7CisgICAgICBzaXplID0gc2l6ZSAvIDJVOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgLyogRG8gbm90aGluZyAqLworICAgICAgLyogS2VlcCB0aGUgc2FtZSBQYWdlU2l6ZSBmb3IgRk1DX05BTkRfTUVNX0JVU19XSURUSF8xNiovCisgICAgfQogICAKICAgICAvKiBXcml0ZSBkYXRhIHRvIG1lbW9yeSAqLwogICAgIGZvcig7IGluZGV4IDwgc2l6ZTsgaW5kZXgrKykKQEAgLTEyMTksNyArMTI0OSw3IEBACiAgIG5hbmRhZGRyZXNzID0gQVJSQVlfQUREUkVTUyhwQWRkcmVzcywgaG5hbmQpOwogICAKICAgLyogQ29sdW1uIGluIHBhZ2UgYWRkcmVzcyAqLwotICBjb2x1bW5hZGRyZXNzID0gKHVpbnQzMl90KShDT0xVTU5fQUREUkVTUyhobmFuZCkgKiAyVSk7CisgIGNvbHVtbmFkZHJlc3MgPSAodWludDMyX3QpKENPTFVNTl9BRERSRVNTKGhuYW5kKSk7CiAgIAogICAvKiBTcGFyZSBhcmVhKHMpIHJlYWQgbG9vcCAqLyAKICAgd2hpbGUoKE51bVNwYXJlQXJlYVRvUmVhZCAhPSAwVSkgJiYgKG5hbmRhZGRyZXNzIDwgKChobmFuZC0+Q29uZmlnLkJsb2NrU2l6ZSkgKiAoaG5hbmQtPkNvbmZpZy5CbG9ja05icikpKSkKQEAgLTE0ODcsNyArMTUxNyw3IEBACiAgIG5hbmRhZGRyZXNzID0gQVJSQVlfQUREUkVTUyhwQWRkcmVzcywgaG5hbmQpOwogICAKICAgLyogQ29sdW1uIGluIHBhZ2UgYWRkcmVzcyAqLwotICBjb2x1bW5hZGRyZXNzID0gKHVpbnQzMl90KShDT0xVTU5fQUREUkVTUyhobmFuZCkgKiAyVSk7CisgIGNvbHVtbmFkZHJlc3MgPSAodWludDMyX3QpKENPTFVNTl9BRERSRVNTKGhuYW5kKSk7CiAgIAogICAvKiBTcGFyZSBhcmVhKHMpIHdyaXRlIGxvb3AgKi8KICAgd2hpbGUoKE51bVNwYXJlQXJlYVRvd3JpdGUgIT0gMFUpICYmIChuYW5kYWRkcmVzcyA8ICgoaG5hbmQtPkNvbmZpZy5CbG9ja1NpemUpICogKGhuYW5kLT5Db25maWcuQmxvY2tOYnIpKSkpCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmNHh4X2hhbF9wd3IuYyBiL1NyYy9zdG0zMmY0eHhfaGFsX3B3ci5jCmluZGV4IGJhMmNlNTkuLmY4OTVhMjYgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmY0eHhfaGFsX3B3ci5jCisrKyBiL1NyYy9zdG0zMmY0eHhfaGFsX3B3ci5jCkBAIC0xMDAsMTEgKzEwMCwxOSBAQAogICAqICAgICAgICAgYmFja3VwIGRhdGEgcmVnaXN0ZXJzIGFuZCBiYWNrdXAgU1JBTSkuCiAgICogQG5vdGUgSWYgdGhlIEhTRSBkaXZpZGVkIGJ5IDIsIDMsIC4uMzEgaXMgdXNlZCBhcyB0aGUgUlRDIGNsb2NrLCB0aGUgCiAgICogICAgICAgICBCYWNrdXAgRG9tYWluIEFjY2VzcyBzaG91bGQgYmUga2VwdCBlbmFibGVkLgorICAqIEBub3RlIFRoZSBmb2xsb3dpbmcgc2VxdWVuY2UgaXMgcmVxdWlyZWQgdG8gYnlwYXNzIHRoZSBkZWxheSBiZXR3ZWVuCisgICogICAgICAgICBEQlAgYml0IHByb2dyYW1taW5nIGFuZCB0aGUgZWZmZWN0aXZlIGVuYWJsaW5nICBvZiB0aGUgYmFja3VwIGRvbWFpbi4KKyAgKiAgICAgICAgIFBsZWFzZSBjaGVjayB0aGUgRXJyYXRhIFNoZWV0IGZvciBtb3JlIGRldGFpbHMgdW5kZXIgIlBvc3NpYmxlIGRlbGF5CisgICogICAgICAgICBpbiBiYWNrdXAgZG9tYWluIHByb3RlY3Rpb24gZGlzYWJsaW5nL2VuYWJsaW5nIGFmdGVyIHByb2dyYW1taW5nIHRoZQorICAqICAgICAgICAgREJQIGJpdCIgc2VjdGlvbi4KICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KIHZvaWQgSEFMX1BXUl9FbmFibGVCa1VwQWNjZXNzKHZvaWQpCiB7CisgIF9fSU8gdWludDMyX3QgZHVtbXlyZWFkOwogICAqKF9fSU8gdWludDMyX3QgKikgQ1JfREJQX0JCID0gKHVpbnQzMl90KUVOQUJMRTsKKyAgZHVtbXlyZWFkID0gUFdSLT5DUjsKKyAgVU5VU0VEKGR1bW15cmVhZCk7CiB9CiAKIC8qKgpAQCAtMTEyLDExICsxMjAsMTkgQEAKICAgKiAgICAgICAgIGJhY2t1cCBkYXRhIHJlZ2lzdGVycyBhbmQgYmFja3VwIFNSQU0pLgogICAqIEBub3RlIElmIHRoZSBIU0UgZGl2aWRlZCBieSAyLCAzLCAuLjMxIGlzIHVzZWQgYXMgdGhlIFJUQyBjbG9jaywgdGhlIAogICAqICAgICAgICAgQmFja3VwIERvbWFpbiBBY2Nlc3Mgc2hvdWxkIGJlIGtlcHQgZW5hYmxlZC4KKyAgKiBAbm90ZSBUaGUgZm9sbG93aW5nIHNlcXVlbmNlIGlzIHJlcXVpcmVkIHRvIGJ5cGFzcyB0aGUgZGVsYXkgYmV0d2VlbgorICAqICAgICAgICAgREJQIGJpdCBwcm9ncmFtbWluZyBhbmQgdGhlIGVmZmVjdGl2ZSBkaXNhYmxpbmcgIG9mIHRoZSBiYWNrdXAgZG9tYWluLgorICAqICAgICAgICAgUGxlYXNlIGNoZWNrIHRoZSBFcnJhdGEgU2hlZXQgZm9yIG1vcmUgZGV0YWlscyB1bmRlciAiUG9zc2libGUgZGVsYXkKKyAgKiAgICAgICAgIGluIGJhY2t1cCBkb21haW4gcHJvdGVjdGlvbiBkaXNhYmxpbmcvZW5hYmxpbmcgYWZ0ZXIgcHJvZ3JhbW1pbmcgdGhlCisgICogICAgICAgICBEQlAgYml0IiBzZWN0aW9uLgogICAqIEByZXR2YWwgTm9uZQogICAqLwogdm9pZCBIQUxfUFdSX0Rpc2FibGVCa1VwQWNjZXNzKHZvaWQpCiB7CisgIF9fSU8gdWludDMyX3QgZHVtbXlyZWFkOwogICAqKF9fSU8gdWludDMyX3QgKikgQ1JfREJQX0JCID0gKHVpbnQzMl90KURJU0FCTEU7CisgIGR1bW15cmVhZCA9IFBXUi0+Q1I7CisgIFVOVVNFRChkdW1teXJlYWQpOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmY0eHhfaGFsX3JjYy5jIGIvU3JjL3N0bTMyZjR4eF9oYWxfcmNjLmMKaW5kZXggNzY0MGI2NS4uNTUyZWYxOCAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZjR4eF9oYWxfcmNjLmMKKysrIGIvU3JjL3N0bTMyZjR4eF9oYWxfcmNjLmMKQEAgLTU0MCwxMSArNTQwLDIyIEBACiAgICAgICB7CiAgICAgICAgIC8qIERvIG5vdCByZXR1cm4gSEFMX0VSUk9SIGlmIHJlcXVlc3QgcmVwZWF0cyB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uICovCiAgICAgICAgIHBsbF9jb25maWcgPSBSQ0MtPlBMTENGR1I7Ci0gICAgICAgIGlmKChSRUFEX0JJVChwbGxfY29uZmlnLCBSQ0NfUExMQ0ZHUl9QTExTUkMpICE9IFJDQ19Pc2NJbml0U3RydWN0LT5QTEwuUExMU291cmNlKSB8fAotICAgICAgICAgICAoUkVBRF9CSVQocGxsX2NvbmZpZywgUkNDX1BMTENGR1JfUExMTSkgIT0gUkNDX09zY0luaXRTdHJ1Y3QtPlBMTC5QTExNKSB8fAotICAgICAgICAgICAoUkVBRF9CSVQocGxsX2NvbmZpZywgUkNDX1BMTENGR1JfUExMTikgIT0gUkNDX09zY0luaXRTdHJ1Y3QtPlBMTC5QTExOKSB8fAotICAgICAgICAgICAoUkVBRF9CSVQocGxsX2NvbmZpZywgUkNDX1BMTENGR1JfUExMUCkgIT0gUkNDX09zY0luaXRTdHJ1Y3QtPlBMTC5QTExQKSB8fAotICAgICAgICAgICAoUkVBRF9CSVQocGxsX2NvbmZpZywgUkNDX1BMTENGR1JfUExMUSkgIT0gUkNDX09zY0luaXRTdHJ1Y3QtPlBMTC5QTExRKSkKKyNpZiBkZWZpbmVkIChSQ0NfUExMQ0ZHUl9QTExSKQorICAgICAgICBpZiAoKChSQ0NfT3NjSW5pdFN0cnVjdC0+UExMLlBMTFN0YXRlKSA9PSBSQ0NfUExMX09GRikgfHwKKyAgICAgICAgICAgIChSRUFEX0JJVChwbGxfY29uZmlnLCBSQ0NfUExMQ0ZHUl9QTExTUkMpICE9IFJDQ19Pc2NJbml0U3RydWN0LT5QTEwuUExMU291cmNlKSB8fAorICAgICAgICAgICAgKFJFQURfQklUKHBsbF9jb25maWcsIFJDQ19QTExDRkdSX1BMTE0pICE9IChSQ0NfT3NjSW5pdFN0cnVjdC0+UExMLlBMTE0pIDw8IFJDQ19QTExDRkdSX1BMTE1fUG9zKSB8fAorICAgICAgICAgICAgKFJFQURfQklUKHBsbF9jb25maWcsIFJDQ19QTExDRkdSX1BMTE4pICE9IChSQ0NfT3NjSW5pdFN0cnVjdC0+UExMLlBMTE4pIDw8IFJDQ19QTExDRkdSX1BMTE5fUG9zKSB8fAorICAgICAgICAgICAgKFJFQURfQklUKHBsbF9jb25maWcsIFJDQ19QTExDRkdSX1BMTFApICE9ICgoKFJDQ19Pc2NJbml0U3RydWN0LT5QTEwuUExMUCA+PiAxVSkgLSAxVSkpIDw8IFJDQ19QTExDRkdSX1BMTFBfUG9zKSB8fAorICAgICAgICAgICAgKFJFQURfQklUKHBsbF9jb25maWcsIFJDQ19QTExDRkdSX1BMTFEpICE9IChSQ0NfT3NjSW5pdFN0cnVjdC0+UExMLlBMTFEgPDwgUkNDX1BMTENGR1JfUExMUV9Qb3MpKSB8fAorICAgICAgICAgICAgKFJFQURfQklUKHBsbF9jb25maWcsIFJDQ19QTExDRkdSX1BMTFIpICE9IChSQ0NfT3NjSW5pdFN0cnVjdC0+UExMLlBMTFIgPDwgUkNDX1BMTENGR1JfUExMUl9Qb3MpKSkKKyNlbHNlCisgICAgICAgIGlmICgoKFJDQ19Pc2NJbml0U3RydWN0LT5QTEwuUExMU3RhdGUpID09IFJDQ19QTExfT0ZGKSB8fAorICAgICAgICAgICAgKFJFQURfQklUKHBsbF9jb25maWcsIFJDQ19QTExDRkdSX1BMTFNSQykgIT0gUkNDX09zY0luaXRTdHJ1Y3QtPlBMTC5QTExTb3VyY2UpIHx8CisgICAgICAgICAgICAoUkVBRF9CSVQocGxsX2NvbmZpZywgUkNDX1BMTENGR1JfUExMTSkgIT0gKFJDQ19Pc2NJbml0U3RydWN0LT5QTEwuUExMTSkgPDwgUkNDX1BMTENGR1JfUExMTV9Qb3MpIHx8CisgICAgICAgICAgICAoUkVBRF9CSVQocGxsX2NvbmZpZywgUkNDX1BMTENGR1JfUExMTikgIT0gKFJDQ19Pc2NJbml0U3RydWN0LT5QTEwuUExMTikgPDwgUkNDX1BMTENGR1JfUExMTl9Qb3MpIHx8CisgICAgICAgICAgICAoUkVBRF9CSVQocGxsX2NvbmZpZywgUkNDX1BMTENGR1JfUExMUCkgIT0gKCgoUkNDX09zY0luaXRTdHJ1Y3QtPlBMTC5QTExQID4+IDFVKSAtIDFVKSkgPDwgUkNDX1BMTENGR1JfUExMUF9Qb3MpIHx8CisgICAgICAgICAgICAoUkVBRF9CSVQocGxsX2NvbmZpZywgUkNDX1BMTENGR1JfUExMUSkgIT0gKFJDQ19Pc2NJbml0U3RydWN0LT5QTEwuUExMUSA8PCBSQ0NfUExMQ0ZHUl9QTExRX1BvcykpKQorI2VuZGlmCiAgICAgICAgIHsKICAgICAgICAgICByZXR1cm4gSEFMX0VSUk9SOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmNHh4X2hhbF9yY2NfZXguYyBiL1NyYy9zdG0zMmY0eHhfaGFsX3JjY19leC5jCmluZGV4IDBkM2FhY2MuLmU0MmI4NTAgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmY0eHhfaGFsX3JjY19leC5jCisrKyBiL1NyYy9zdG0zMmY0eHhfaGFsX3JjY19leC5jCkBAIC0zMzM0LDcgKzMzMzQsMTMgQEAKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9SQ0NfT3NjQ29uZmlnKFJDQ19Pc2NJbml0VHlwZURlZiAgKlJDQ19Pc2NJbml0U3RydWN0KQogewotICB1aW50MzJfdCB0aWNrc3RhcnQgPSAwVTsKKyAgdWludDMyX3QgdGlja3N0YXJ0LCBwbGxfY29uZmlnOworCisgIC8qIENoZWNrIE51bGwgcG9pbnRlciAqLworICBpZihSQ0NfT3NjSW5pdFN0cnVjdCA9PSBOVUxMKQorICB7CisgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgfQogCiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19SQ0NfT1NDSUxMQVRPUlRZUEUoUkNDX09zY0luaXRTdHJ1Y3QtPk9zY2lsbGF0b3JUeXBlKSk7CkBAIC0zNjEyLDEzICszNjE4LDEyIEBACiAgICAgICAgIH0KIAogICAgICAgICAvKiBDb25maWd1cmUgdGhlIG1haW4gUExMIGNsb2NrIHNvdXJjZSwgbXVsdGlwbGljYXRpb24gYW5kIGRpdmlzaW9uIGZhY3RvcnMuICovCi0gICAgICAgIF9fSEFMX1JDQ19QTExfQ09ORklHKFJDQ19Pc2NJbml0U3RydWN0LT5QTEwuUExMU291cmNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSQ0NfT3NjSW5pdFN0cnVjdC0+UExMLlBMTE0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJDQ19Pc2NJbml0U3RydWN0LT5QTEwuUExMTiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkNDX09zY0luaXRTdHJ1Y3QtPlBMTC5QTExQLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSQ0NfT3NjSW5pdFN0cnVjdC0+UExMLlBMTFEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJDQ19Pc2NJbml0U3RydWN0LT5QTEwuUExMUik7Ci0KKyAgICAgICAgV1JJVEVfUkVHKFJDQy0+UExMQ0ZHUiwgKFJDQ19Pc2NJbml0U3RydWN0LT5QTEwuUExMU291cmNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJDQ19Pc2NJbml0U3RydWN0LT5QTEwuUExMTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChSQ0NfT3NjSW5pdFN0cnVjdC0+UExMLlBMTE4gPDwgUkNDX1BMTENGR1JfUExMTl9Qb3MpICAgICAgICAgICAgICAgICAgICAgICB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKFJDQ19Pc2NJbml0U3RydWN0LT5QTEwuUExMUCA+PiAxVSkgLSAxVSkgPDwgUkNDX1BMTENGR1JfUExMUF9Qb3MpICAgICAgICB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChSQ0NfT3NjSW5pdFN0cnVjdC0+UExMLlBMTFEgPDwgUkNDX1BMTENGR1JfUExMUV9Qb3MpICAgICAgICAgICAgICAgICAgICAgICB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChSQ0NfT3NjSW5pdFN0cnVjdC0+UExMLlBMTFIgPDwgUkNDX1BMTENGR1JfUExMUl9Qb3MpKSk7CiAgICAgICAgIC8qIEVuYWJsZSB0aGUgbWFpbiBQTEwuICovCiAgICAgICAgIF9fSEFMX1JDQ19QTExfRU5BQkxFKCk7CiAKQEAgLTM2NTQsNyArMzY1OSwzNSBAQAogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgICAgIC8qIENoZWNrIGlmIHRoZXJlIGlzIGEgcmVxdWVzdCB0byBkaXNhYmxlIHRoZSBQTEwgdXNlZCBhcyBTeXN0ZW0gY2xvY2sgc291cmNlICovCisgICAgICBpZigoUkNDX09zY0luaXRTdHJ1Y3QtPlBMTC5QTExTdGF0ZSkgPT0gUkNDX1BMTF9PRkYpCisgICAgICB7CisgICAgICAgIHJldHVybiBIQUxfRVJST1I7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIC8qIERvIG5vdCByZXR1cm4gSEFMX0VSUk9SIGlmIHJlcXVlc3QgcmVwZWF0cyB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uICovCisgICAgICAgIHBsbF9jb25maWcgPSBSQ0MtPlBMTENGR1I7CisjaWYgZGVmaW5lZCAoUkNDX1BMTENGR1JfUExMUikKKyAgICAgICAgaWYgKCgoUkNDX09zY0luaXRTdHJ1Y3QtPlBMTC5QTExTdGF0ZSkgPT0gUkNDX1BMTF9PRkYpIHx8CisgICAgICAgICAgICAoUkVBRF9CSVQocGxsX2NvbmZpZywgUkNDX1BMTENGR1JfUExMU1JDKSAhPSBSQ0NfT3NjSW5pdFN0cnVjdC0+UExMLlBMTFNvdXJjZSkgfHwKKyAgICAgICAgICAgIChSRUFEX0JJVChwbGxfY29uZmlnLCBSQ0NfUExMQ0ZHUl9QTExNKSAhPSAoUkNDX09zY0luaXRTdHJ1Y3QtPlBMTC5QTExNKSA8PCBSQ0NfUExMQ0ZHUl9QTExNX1BvcykgfHwKKyAgICAgICAgICAgIChSRUFEX0JJVChwbGxfY29uZmlnLCBSQ0NfUExMQ0ZHUl9QTExOKSAhPSAoUkNDX09zY0luaXRTdHJ1Y3QtPlBMTC5QTExOKSA8PCBSQ0NfUExMQ0ZHUl9QTExOX1BvcykgfHwKKyAgICAgICAgICAgIChSRUFEX0JJVChwbGxfY29uZmlnLCBSQ0NfUExMQ0ZHUl9QTExQKSAhPSAoKChSQ0NfT3NjSW5pdFN0cnVjdC0+UExMLlBMTFAgPj4gMVUpIC0gMVUpKSA8PCBSQ0NfUExMQ0ZHUl9QTExQX1BvcykgfHwKKyAgICAgICAgICAgIChSRUFEX0JJVChwbGxfY29uZmlnLCBSQ0NfUExMQ0ZHUl9QTExRKSAhPSAoUkNDX09zY0luaXRTdHJ1Y3QtPlBMTC5QTExRIDw8IFJDQ19QTExDRkdSX1BMTFFfUG9zKSkgfHwKKyAgICAgICAgICAgIChSRUFEX0JJVChwbGxfY29uZmlnLCBSQ0NfUExMQ0ZHUl9QTExSKSAhPSAoUkNDX09zY0luaXRTdHJ1Y3QtPlBMTC5QTExSIDw8IFJDQ19QTExDRkdSX1BMTFJfUG9zKSkpCisjZWxzZQorICAgICAgICBpZiAoKChSQ0NfT3NjSW5pdFN0cnVjdC0+UExMLlBMTFN0YXRlKSA9PSBSQ0NfUExMX09GRikgfHwKKyAgICAgICAgICAgIChSRUFEX0JJVChwbGxfY29uZmlnLCBSQ0NfUExMQ0ZHUl9QTExTUkMpICE9IFJDQ19Pc2NJbml0U3RydWN0LT5QTEwuUExMU291cmNlKSB8fAorICAgICAgICAgICAgKFJFQURfQklUKHBsbF9jb25maWcsIFJDQ19QTExDRkdSX1BMTE0pICE9IChSQ0NfT3NjSW5pdFN0cnVjdC0+UExMLlBMTE0pIDw8IFJDQ19QTExDRkdSX1BMTE1fUG9zKSB8fAorICAgICAgICAgICAgKFJFQURfQklUKHBsbF9jb25maWcsIFJDQ19QTExDRkdSX1BMTE4pICE9IChSQ0NfT3NjSW5pdFN0cnVjdC0+UExMLlBMTE4pIDw8IFJDQ19QTExDRkdSX1BMTE5fUG9zKSB8fAorICAgICAgICAgICAgKFJFQURfQklUKHBsbF9jb25maWcsIFJDQ19QTExDRkdSX1BMTFApICE9ICgoKFJDQ19Pc2NJbml0U3RydWN0LT5QTEwuUExMUCA+PiAxVSkgLSAxVSkpIDw8IFJDQ19QTExDRkdSX1BMTFBfUG9zKSB8fAorICAgICAgICAgICAgKFJFQURfQklUKHBsbF9jb25maWcsIFJDQ19QTExDRkdSX1BMTFEpICE9IChSQ0NfT3NjSW5pdFN0cnVjdC0+UExMLlBMTFEgPDwgUkNDX1BMTENGR1JfUExMUV9Qb3MpKSkKKyNlbmRpZgorICAgICAgICB7CisgICAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgICAgICAgfQorICAgICAgfQogICAgIH0KICAgfQogICByZXR1cm4gSEFMX09LOwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjR4eF9oYWxfcnRjLmMgYi9TcmMvc3RtMzJmNHh4X2hhbF9ydGMuYwppbmRleCBjYWU3YjljLi5jMTI4NzllIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmNHh4X2hhbF9ydGMuYworKysgYi9TcmMvc3RtMzJmNHh4X2hhbF9ydGMuYwpAQCAtNzk4LDEwICs3OTgsMTAgQEAKICAgICAvKiBTZXQgdGhlIFJUQ19UUiByZWdpc3RlciAqLwogICAgIGhydGMtPkluc3RhbmNlLT5UUiA9ICh1aW50MzJfdCkodG1wcmVnICYgUlRDX1RSX1JFU0VSVkVEX01BU0spOwogCi0gICAgLyogQ2xlYXIgdGhlIGJpdHMgdG8gYmUgY29uZmlndXJlZCAqLworICAgIC8qIFRoaXMgaW50ZXJmYWNlIGlzIGRlcHJlY2F0ZWQuIFRvIG1hbmFnZSBEYXlsaWdodCBTYXZpbmcgVGltZSwgcGxlYXNlIHVzZSBIQUxfUlRDX0RTVF94eHggZnVuY3Rpb25zICovCiAgICAgaHJ0Yy0+SW5zdGFuY2UtPkNSICY9ICh1aW50MzJfdCl+UlRDX0NSX0JDSzsKIAotICAgIC8qIENvbmZpZ3VyZSB0aGUgUlRDX0NSIHJlZ2lzdGVyICovCisgICAgLyogVGhpcyBpbnRlcmZhY2UgaXMgZGVwcmVjYXRlZC4gVG8gbWFuYWdlIERheWxpZ2h0IFNhdmluZyBUaW1lLCBwbGVhc2UgdXNlIEhBTF9SVENfRFNUX3h4eCBmdW5jdGlvbnMgKi8KICAgICBocnRjLT5JbnN0YW5jZS0+Q1IgfD0gKHVpbnQzMl90KShzVGltZS0+RGF5TGlnaHRTYXZpbmcgfCBzVGltZS0+U3RvcmVPcGVyYXRpb24pOwogCiAgICAgLyogRXhpdCBJbml0aWFsaXphdGlvbiBtb2RlICovCkBAIC0xNzU4LDYgKzE3NTgsNzIgQEAKIH0KIAogLyoqCisgICogQGJyaWVmICBEYXlsaWdodCBTYXZpbmcgVGltZSwgQWRkIG9uZSBob3VyIHRvIHRoZSBjYWxlbmRhciBpbiBvbmUgc2luZ2xlIG9wZXJhdGlvbgorICAqICAgICAgICAgd2l0aG91dCBnb2luZyB0aHJvdWdoIHRoZSBpbml0aWFsaXphdGlvbiBwcm9jZWR1cmUuCisgICogQHBhcmFtICBocnRjIFJUQyBoYW5kbGUKKyAgKiBAcmV0dmFsIE5vbmUKKyAgKi8KK3ZvaWQgSEFMX1JUQ19EU1RfQWRkMUhvdXIoUlRDX0hhbmRsZVR5cGVEZWYgKmhydGMpCit7CisgIFVOVVNFRChocnRjKTsKKyAgX19IQUxfUlRDX1dSSVRFUFJPVEVDVElPTl9ESVNBQkxFKGhydGMpOworICBTRVRfQklUKFJUQy0+Q1IsIFJUQ19DUl9BREQxSCk7CisgIF9fSEFMX1JUQ19XUklURVBST1RFQ1RJT05fRU5BQkxFKGhydGMpOworfQorCisvKioKKyAgKiBAYnJpZWYgIERheWxpZ2h0IFNhdmluZyBUaW1lLCBTdWJzdHJhY3Qgb25lIGhvdXIgZnJvbSB0aGUgY2FsZW5kYXIgaW4gb25lCisgICogICAgICAgICBzaW5nbGUgb3BlcmF0aW9uIHdpdGhvdXQgZ29pbmcgdGhyb3VnaCB0aGUgaW5pdGlhbGl6YXRpb24gcHJvY2VkdXJlLgorICAqIEBwYXJhbSAgaHJ0YyBSVEMgaGFuZGxlCisgICogQHJldHZhbCBOb25lCisgICovCit2b2lkIEhBTF9SVENfRFNUX1N1YjFIb3VyKFJUQ19IYW5kbGVUeXBlRGVmICpocnRjKQoreworICBVTlVTRUQoaHJ0Yyk7CisgIF9fSEFMX1JUQ19XUklURVBST1RFQ1RJT05fRElTQUJMRShocnRjKTsKKyAgU0VUX0JJVChSVEMtPkNSLCBSVENfQ1JfU1VCMUgpOworICBfX0hBTF9SVENfV1JJVEVQUk9URUNUSU9OX0VOQUJMRShocnRjKTsKK30KKworLyoqCisgICogQGJyaWVmICBEYXlsaWdodCBTYXZpbmcgVGltZSwgU2V0IHRoZSBzdG9yZSBvcGVyYXRpb24gYml0LgorICAqIEBub3RlICAgSXQgY2FuIGJlIHVzZWQgYnkgdGhlIHNvZnR3YXJlIGluIG9yZGVyIHRvIG1lbW9yaXplIHRoZSBEU1Qgc3RhdHVzLgorICAqIEBwYXJhbSAgaHJ0YyBSVEMgaGFuZGxlCisgICogQHJldHZhbCBOb25lCisgICovCit2b2lkIEhBTF9SVENfRFNUX1NldFN0b3JlT3BlcmF0aW9uKFJUQ19IYW5kbGVUeXBlRGVmICpocnRjKQoreworICBVTlVTRUQoaHJ0Yyk7CisgIF9fSEFMX1JUQ19XUklURVBST1RFQ1RJT05fRElTQUJMRShocnRjKTsKKyAgU0VUX0JJVChSVEMtPkNSLCBSVENfQ1JfQktQKTsKKyAgX19IQUxfUlRDX1dSSVRFUFJPVEVDVElPTl9FTkFCTEUoaHJ0Yyk7Cit9CisKKy8qKgorICAqIEBicmllZiAgRGF5bGlnaHQgU2F2aW5nIFRpbWUsIENsZWFyIHRoZSBzdG9yZSBvcGVyYXRpb24gYml0LgorICAqIEBwYXJhbSAgaHJ0YyBSVEMgaGFuZGxlCisgICogQHJldHZhbCBOb25lCisgICovCit2b2lkIEhBTF9SVENfRFNUX0NsZWFyU3RvcmVPcGVyYXRpb24oUlRDX0hhbmRsZVR5cGVEZWYgKmhydGMpCit7CisgIFVOVVNFRChocnRjKTsKKyAgX19IQUxfUlRDX1dSSVRFUFJPVEVDVElPTl9ESVNBQkxFKGhydGMpOworICBDTEVBUl9CSVQoUlRDLT5DUiwgUlRDX0NSX0JLUCk7CisgIF9fSEFMX1JUQ19XUklURVBST1RFQ1RJT05fRU5BQkxFKGhydGMpOworfQorCisvKioKKyAgKiBAYnJpZWYgIERheWxpZ2h0IFNhdmluZyBUaW1lLCBSZWFkIHRoZSBzdG9yZSBvcGVyYXRpb24gYml0LgorICAqIEBwYXJhbSAgaHJ0YyBSVEMgaGFuZGxlCisgICogQHJldHZhbCBvcGVyYXRpb24gc2VlIFJUQ19TdG9yZU9wZXJhdGlvbl9EZWZpbml0aW9ucworICAqLwordWludDMyX3QgSEFMX1JUQ19EU1RfUmVhZFN0b3JlT3BlcmF0aW9uKFJUQ19IYW5kbGVUeXBlRGVmICpocnRjKQoreworICBVTlVTRUQoaHJ0Yyk7CisgIHJldHVybiBSRUFEX0JJVChSVEMtPkNSLCBSVENfQ1JfQktQKTsKK30KKworLyoqCiAgICogQH0KICAgKi8KIApkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjR4eF9oYWxfc2FpLmMgYi9TcmMvc3RtMzJmNHh4X2hhbF9zYWkuYwppbmRleCBlOTRjMWExLi43ZDE1N2NjIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmNHh4X2hhbF9zYWkuYworKysgYi9TcmMvc3RtMzJmNHh4X2hhbF9zYWkuYwpAQCAtMjM0LDEwICsyMzQsMTEgQEAKIC8qKiBAZGVmZ3JvdXAgU0FJX1ByaXZhdGVfVHlwZWRlZnMgIFNBSSBQcml2YXRlIFR5cGVkZWZzCiAgICogQHsKICAgKi8KLXR5cGVkZWYgZW51bSB7Cit0eXBlZGVmIGVudW0KK3sKICAgU0FJX01PREVfRE1BLAogICBTQUlfTU9ERV9JVAotfVNBSV9Nb2RlVHlwZWRlZjsKK30gU0FJX01vZGVUeXBlZGVmOwogLyoqCiAgICogQH0KICAgKi8KQEAgLTI0OCw2ICsyNDksNyBAQAogICAqIEB7CiAgICovCiAjZGVmaW5lIFNBSV9ERUZBVUxUX1RJTUVPVVQgICA0VSAvKiA0bXMgKi8KKyNkZWZpbmUgU0FJX0xPTkdfVElNRU9VVCAgICAgIDEwMDBVIC8qIDFzICovCiAvKioKICAgKiBAfQogICAqLwpAQCAtMzM3LDIzICszMzksMjMgQEAKICAgYXNzZXJ0X3BhcmFtKElTX1NBSV9TVVBQT1JURURfUFJPVE9DT0wocHJvdG9jb2wpKTsKICAgYXNzZXJ0X3BhcmFtKElTX1NBSV9QUk9UT0NPTF9EQVRBU0laRShkYXRhc2l6ZSkpOwogCi0gIHN3aXRjaChwcm90b2NvbCkKKyAgc3dpdGNoIChwcm90b2NvbCkKICAgewotICBjYXNlIFNBSV9JMlNfU1RBTkRBUkQgOgotICBjYXNlIFNBSV9JMlNfTVNCSlVTVElGSUVEIDoKLSAgY2FzZSBTQUlfSTJTX0xTQkpVU1RJRklFRCA6Ci0gICAgc3RhdHVzID0gU0FJX0luaXRJMlMoaHNhaSwgcHJvdG9jb2wsIGRhdGFzaXplLCBuYnNsb3QpOwotICAgIGJyZWFrOwotICBjYXNlIFNBSV9QQ01fTE9ORyA6Ci0gIGNhc2UgU0FJX1BDTV9TSE9SVCA6Ci0gICAgc3RhdHVzID0gU0FJX0luaXRQQ00oaHNhaSwgcHJvdG9jb2wsIGRhdGFzaXplLCBuYnNsb3QpOwotICAgIGJyZWFrOwotICBkZWZhdWx0IDoKLSAgICBzdGF0dXMgPSBIQUxfRVJST1I7Ci0gICAgYnJlYWs7CisgICAgY2FzZSBTQUlfSTJTX1NUQU5EQVJEIDoKKyAgICBjYXNlIFNBSV9JMlNfTVNCSlVTVElGSUVEIDoKKyAgICBjYXNlIFNBSV9JMlNfTFNCSlVTVElGSUVEIDoKKyAgICAgIHN0YXR1cyA9IFNBSV9Jbml0STJTKGhzYWksIHByb3RvY29sLCBkYXRhc2l6ZSwgbmJzbG90KTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgU0FJX1BDTV9MT05HIDoKKyAgICBjYXNlIFNBSV9QQ01fU0hPUlQgOgorICAgICAgc3RhdHVzID0gU0FJX0luaXRQQ00oaHNhaSwgcHJvdG9jb2wsIGRhdGFzaXplLCBuYnNsb3QpOworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdCA6CisgICAgICBzdGF0dXMgPSBIQUxfRVJST1I7CisgICAgICBicmVhazsKICAgfQogCi0gIGlmKHN0YXR1cyA9PSBIQUxfT0spCisgIGlmIChzdGF0dXMgPT0gSEFMX09LKQogICB7CiAgICAgc3RhdHVzID0gSEFMX1NBSV9Jbml0KGhzYWkpOwogICB9CkBAIC0zODEsNyArMzgzLDcgQEAKICAgdWludDMyX3Qgc3luY2VuX2JpdHMgPSAwVTsKIAogICAvKiBDaGVjayB0aGUgU0FJIGhhbmRsZSBhbGxvY2F0aW9uICovCi0gIGlmKGhzYWkgPT0gTlVMTCkKKyAgaWYgKGhzYWkgPT0gTlVMTCkKICAgewogICAgIHJldHVybiBIQUxfRVJST1I7CiAgIH0KQEAgLTQxOCw3ICs0MjAsNyBAQAogICBhc3NlcnRfcGFyYW0oSVNfU0FJX0JMT0NLX1NMT1RfTlVNQkVSKGhzYWktPlNsb3RJbml0LlNsb3ROdW1iZXIpKTsKICAgYXNzZXJ0X3BhcmFtKElTX1NBSV9TTE9UX0FDVElWRShoc2FpLT5TbG90SW5pdC5TbG90QWN0aXZlKSk7CiAKLSAgaWYoaHNhaS0+U3RhdGUgPT0gSEFMX1NBSV9TVEFURV9SRVNFVCkKKyAgaWYgKGhzYWktPlN0YXRlID09IEhBTF9TQUlfU1RBVEVfUkVTRVQpCiAgIHsKICAgICAvKiBBbGxvY2F0ZSBsb2NrIHJlc291cmNlIGFuZCBpbml0aWFsaXplIGl0ICovCiAgICAgaHNhaS0+TG9jayA9IEhBTF9VTkxPQ0tFRDsKQEAgLTQ1NSw3ICs0NTcsNyBAQAogICAgICBNQ0xLX3ggPSBTQUlfQ0tfeCAvIChNQ0tESVZbMzowXSAqIDIpIHdpdGggTUNMS194ID0gMjU2ICogRlMKICAgICAgRlMgPSBTQUlfQ0tfeCAvIChNQ0tESVZbMzowXSAqIDIpICogMjU2CiAgICAgIE1DS0RJVlszOjBdID0gU0FJX0NLX3ggLyBGUyAqIDUxMiAqLwotICBpZihoc2FpLT5Jbml0LkF1ZGlvRnJlcXVlbmN5ICE9IFNBSV9BVURJT19GUkVRVUVOQ1lfTUNLRElWKQorICBpZiAoaHNhaS0+SW5pdC5BdWRpb0ZyZXF1ZW5jeSAhPSBTQUlfQVVESU9fRlJFUVVFTkNZX01DS0RJVikKICAgewogICAgIC8qIEdldCBTQUkgY2xvY2sgc291cmNlIGJhc2VkIG9uIFNvdXJjZSBjbG9jayBzZWxlY3Rpb24gZnJvbSBSQ0MgKi8KICAgICBmcmVxID0gU0FJX0dldElucHV0Q2xvY2soaHNhaSk7CkBAIC00NjYsOSArNDY4LDE1IEBACiAgICAgaHNhaS0+SW5pdC5NY2tkaXYgPSB0bXByZWdpc3RlckdDUiAvIDEwVTsKIAogICAgIC8qIFJvdW5kIHJlc3VsdCB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyICovCi0gICAgaWYoKHRtcHJlZ2lzdGVyR0NSICUgMTBVKSA+IDhVKQorICAgIGlmICgodG1wcmVnaXN0ZXJHQ1IgJSAxMFUpID4gOFUpCiAgICAgewotICAgICAgaHNhaS0+SW5pdC5NY2tkaXYrPSAxVTsKKyAgICAgIGhzYWktPkluaXQuTWNrZGl2ICs9IDFVOworICAgIH0KKworICAgIC8qIEZvciBTUERJRiBwcm90b2NvbCwgU0FJIHNoYWxsIHByb3ZpZGUgYSBiaXQgY2xvY2sgdHdpY2UgZmFzdGVyIHRoZSBzeW1ib2wtcmF0ZSAqLworICAgIGlmIChoc2FpLT5Jbml0LlByb3RvY29sID09IFNBSV9TUERJRl9QUk9UT0NPTCkKKyAgICB7CisgICAgICBoc2FpLT5Jbml0Lk1ja2RpdiA9IGhzYWktPkluaXQuTWNrZGl2ID4+IDE7CiAgICAgfQogICB9CiAKQEAgLTQ3Niw0MSArNDg0LDQxIEBACiAgIGFzc2VydF9wYXJhbShJU19TQUlfQkxPQ0tfTUFTVEVSX0RJVklERVIoaHNhaS0+SW5pdC5NY2tkaXYpKTsKIAogICAvKiBDb21wdXRlIENLU1RSIGJpdHMgb2YgU0FJIENSMSBhY2NvcmRpbmcgdG8gQ2xvY2tTdHJvYmluZyBhbmQgQXVkaW9Nb2RlICovCi0gIGlmKChoc2FpLT5Jbml0LkF1ZGlvTW9kZSA9PSBTQUlfTU9ERU1BU1RFUl9UWCkgfHwgKGhzYWktPkluaXQuQXVkaW9Nb2RlID09IFNBSV9NT0RFU0xBVkVfVFgpKQorICBpZiAoKGhzYWktPkluaXQuQXVkaW9Nb2RlID09IFNBSV9NT0RFTUFTVEVSX1RYKSB8fCAoaHNhaS0+SW5pdC5BdWRpb01vZGUgPT0gU0FJX01PREVTTEFWRV9UWCkpCiAgIHsKLSAgICBja3N0cl9iaXRzID0gKGhzYWktPkluaXQuQ2xvY2tTdHJvYmluZyA9PSBTQUlfQ0xPQ0tTVFJPQklOR19SSVNJTkdFREdFKSA/IDBVOiBTQUlfeENSMV9DS1NUUjsKKyAgICBja3N0cl9iaXRzID0gKGhzYWktPkluaXQuQ2xvY2tTdHJvYmluZyA9PSBTQUlfQ0xPQ0tTVFJPQklOR19SSVNJTkdFREdFKSA/IDBVIDogU0FJX3hDUjFfQ0tTVFI7CiAgIH0KICAgZWxzZQogICB7Ci0gICAgY2tzdHJfYml0cyA9IChoc2FpLT5Jbml0LkNsb2NrU3Ryb2JpbmcgPT0gU0FJX0NMT0NLU1RST0JJTkdfUklTSU5HRURHRSkgPyBTQUlfeENSMV9DS1NUUjogMFU7CisgICAgY2tzdHJfYml0cyA9IChoc2FpLT5Jbml0LkNsb2NrU3Ryb2JpbmcgPT0gU0FJX0NMT0NLU1RST0JJTkdfUklTSU5HRURHRSkgPyBTQUlfeENSMV9DS1NUUiA6IDBVOwogICB9CiAKICAgLyogU0FJIEJsb2NrIENvbmZpZ3VyYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0gIHN3aXRjaChoc2FpLT5Jbml0LlN5bmNocm8pCisgIHN3aXRjaCAoaHNhaS0+SW5pdC5TeW5jaHJvKQogICB7Ci0gIGNhc2UgU0FJX0FTWU5DSFJPTk9VUyA6CisgICAgY2FzZSBTQUlfQVNZTkNIUk9OT1VTIDoKICAgICB7CiAgICAgICBzeW5jZW5fYml0cyA9IDBVOwogICAgIH0KICAgICBicmVhazsKLSAgY2FzZSBTQUlfU1lOQ0hST05PVVMgOgorICAgIGNhc2UgU0FJX1NZTkNIUk9OT1VTIDoKICAgICB7CiAgICAgICBzeW5jZW5fYml0cyA9IFNBSV94Q1IxX1NZTkNFTl8wOwogICAgIH0KICAgICBicmVhazsKLSAgY2FzZSBTQUlfU1lOQ0hST05PVVNfRVhUX1NBSTEgOgotICBjYXNlIFNBSV9TWU5DSFJPTk9VU19FWFRfU0FJMiA6CisgICAgY2FzZSBTQUlfU1lOQ0hST05PVVNfRVhUX1NBSTEgOgorICAgIGNhc2UgU0FJX1NZTkNIUk9OT1VTX0VYVF9TQUkyIDoKICAgICB7CiAgICAgICBzeW5jZW5fYml0cyA9IFNBSV94Q1IxX1NZTkNFTl8xOwogICAgIH0KICAgICBicmVhazsKLSAgZGVmYXVsdDoKLSAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgYnJlYWs7CiAgIH0KIAogICAvKiBTQUkgQ1IxIENvbmZpZ3VyYXRpb24gKi8KICAgaHNhaS0+SW5zdGFuY2UtPkNSMSAmPSB+KFNBSV94Q1IxX01PREUgfCBTQUlfeENSMV9QUlRDRkcgfCAgU0FJX3hDUjFfRFMgfCAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFNBSV94Q1IxX0xTQkZJUlNUIHwgU0FJX3hDUjFfQ0tTVFIgfCBTQUlfeENSMV9TWU5DRU4gfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFNBSV94Q1IxX0xTQkZJUlNUIHwgU0FJX3hDUjFfQ0tTVFIgfCBTQUlfeENSMV9TWU5DRU4gfCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQUlfeENSMV9NT05PIHwgU0FJX3hDUjFfT1VURFJJViAgfCBTQUlfeENSMV9ETUFFTiB8ICBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQUlfeENSMV9OT0RJViB8IFNBSV94Q1IxX01DS0RJVik7CiAKQEAgLTUyNSwxOCArNTMzLDE4IEBACiAgIGhzYWktPkluc3RhbmNlLT5DUjIgfD0gKGhzYWktPkluaXQuRklGT1RocmVzaG9sZCB8IGhzYWktPkluaXQuQ29tcGFuZGluZ01vZGUgfCBoc2FpLT5Jbml0LlRyaVN0YXRlKTsKIAogICAvKiBTQUkgRnJhbWUgQ29uZmlndXJhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0gIGhzYWktPkluc3RhbmNlLT5GUkNSJj0ofihTQUlfeEZSQ1JfRlJMIHwgU0FJX3hGUkNSX0ZTQUxMIHwgU0FJX3hGUkNSX0ZTREVGIHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgU0FJX3hGUkNSX0ZTUE9MIHwgU0FJX3hGUkNSX0ZTT0ZGKSk7Ci0gIGhzYWktPkluc3RhbmNlLT5GUkNSfD0oKGhzYWktPkZyYW1lSW5pdC5GcmFtZUxlbmd0aCAtIDFVKSB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGhzYWktPkZyYW1lSW5pdC5GU09mZnNldCAgICAgfAotICAgICAgICAgICAgICAgICAgICAgICAgICBoc2FpLT5GcmFtZUluaXQuRlNEZWZpbml0aW9uIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaHNhaS0+RnJhbWVJbml0LkZTUG9sYXJpdHkgICB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICgoaHNhaS0+RnJhbWVJbml0LkFjdGl2ZUZyYW1lTGVuZ3RoIC0gMVUpIDw8IDhVKSk7CisgIGhzYWktPkluc3RhbmNlLT5GUkNSICY9ICh+KFNBSV94RlJDUl9GUkwgfCBTQUlfeEZSQ1JfRlNBTEwgfCBTQUlfeEZSQ1JfRlNERUYgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNBSV94RlJDUl9GU1BPTCB8IFNBSV94RlJDUl9GU09GRikpOworICBoc2FpLT5JbnN0YW5jZS0+RlJDUiB8PSAoKGhzYWktPkZyYW1lSW5pdC5GcmFtZUxlbmd0aCAtIDFVKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICBoc2FpLT5GcmFtZUluaXQuRlNPZmZzZXQgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGhzYWktPkZyYW1lSW5pdC5GU0RlZmluaXRpb24gfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaHNhaS0+RnJhbWVJbml0LkZTUG9sYXJpdHkgICB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGhzYWktPkZyYW1lSW5pdC5BY3RpdmVGcmFtZUxlbmd0aCAtIDFVKSA8PCA4VSkpOwogCiAgIC8qIFNBSSBCbG9ja194IFNMT1QgQ29uZmlndXJhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogICAvKiBUaGlzIHJlZ2lzdGVyIGhhcyBubyBtZWFuaW5nIGluIEFDIDk3IGFuZCBTUERJRiBhdWRpbyBwcm90b2NvbCAqLwogICBoc2FpLT5JbnN0YW5jZS0+U0xPVFIgJj0gfihTQUlfeFNMT1RSX0ZCT0ZGIHwgU0FJX3hTTE9UUl9TTE9UU1ogfCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNBSV94U0xPVFJfTkJTTE9UIHwgU0FJX3hTTE9UUl9TTE9URU4gKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0FJX3hTTE9UUl9OQlNMT1QgfCBTQUlfeFNMT1RSX1NMT1RFTik7CiAKICAgaHNhaS0+SW5zdGFuY2UtPlNMT1RSIHw9ICBoc2FpLT5TbG90SW5pdC5GaXJzdEJpdE9mZnNldCB8ICBoc2FpLT5TbG90SW5pdC5TbG90U2l6ZSAgfCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGhzYWktPlNsb3RJbml0LlNsb3RBY3RpdmUgPDwgMTZVKSB8ICgoaHNhaS0+U2xvdEluaXQuU2xvdE51bWJlciAtIDFVKSA8PCAgOFUpOwpAQCAtNTQ1LDcgKzU1Myw3IEBACiAgIGhzYWktPkVycm9yQ29kZSA9IEhBTF9TQUlfRVJST1JfTk9ORTsKIAogICAvKiBJbml0aWFsaXplIHRoZSBTQUkgc3RhdGUgKi8KLSAgaHNhaS0+U3RhdGU9IEhBTF9TQUlfU1RBVEVfUkVBRFk7CisgIGhzYWktPlN0YXRlID0gSEFMX1NBSV9TVEFURV9SRUFEWTsKIAogICAvKiBSZWxlYXNlIExvY2sgKi8KICAgX19IQUxfVU5MT0NLKGhzYWkpOwpAQCAtNTYyLDcgKzU3MCw3IEBACiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfU0FJX0RlSW5pdChTQUlfSGFuZGxlVHlwZURlZiAqaHNhaSkKIHsKICAgLyogQ2hlY2sgdGhlIFNBSSBoYW5kbGUgYWxsb2NhdGlvbiAqLwotICBpZihoc2FpID09IE5VTEwpCisgIGlmIChoc2FpID09IE5VTEwpCiAgIHsKICAgICByZXR1cm4gSEFMX0VSUk9SOwogICB9CkBAIC04NjUsMTYgKzg3MywxNiBAQAogICAqIEBwYXJhbSAgVGltZW91dCBUaW1lb3V0IGR1cmF0aW9uCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfU0FJX1RyYW5zbWl0KFNBSV9IYW5kbGVUeXBlRGVmICpoc2FpLCB1aW50OF90KiBwRGF0YSwgdWludDE2X3QgU2l6ZSwgdWludDMyX3QgVGltZW91dCkKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9TQUlfVHJhbnNtaXQoU0FJX0hhbmRsZVR5cGVEZWYgKmhzYWksIHVpbnQ4X3QgKnBEYXRhLCB1aW50MTZfdCBTaXplLCB1aW50MzJfdCBUaW1lb3V0KQogewogICB1aW50MzJfdCB0aWNrc3RhcnQgPSBIQUxfR2V0VGljaygpOwogCi0gIGlmKChwRGF0YSA9PSBOVUxMICkgfHwgKFNpemUgPT0gMCkpCisgIGlmICgocERhdGEgPT0gTlVMTCkgfHwgKFNpemUgPT0gMCkpCiAgIHsKICAgICByZXR1cm4gIEhBTF9FUlJPUjsKICAgfQogCi0gIGlmKGhzYWktPlN0YXRlID09IEhBTF9TQUlfU1RBVEVfUkVBRFkpCisgIGlmIChoc2FpLT5TdGF0ZSA9PSBIQUxfU0FJX1NUQVRFX1JFQURZKQogICB7CiAgICAgLyogUHJvY2VzcyBMb2NrZWQgKi8KICAgICBfX0hBTF9MT0NLKGhzYWkpOwpAQCAtODg2LDcgKzg5NCw3IEBACiAgICAgaHNhaS0+RXJyb3JDb2RlID0gSEFMX1NBSV9FUlJPUl9OT05FOwogCiAgICAgLyogQ2hlY2sgaWYgdGhlIFNBSSBpcyBhbHJlYWR5IGVuYWJsZWQgKi8KLSAgICBpZigoaHNhaS0+SW5zdGFuY2UtPkNSMSAmIFNBSV94Q1IxX1NBSUVOKSA9PSBSRVNFVCkKKyAgICBpZiAoKGhzYWktPkluc3RhbmNlLT5DUjEgJiBTQUlfeENSMV9TQUlFTikgPT0gUkVTRVQpCiAgICAgewogICAgICAgLyogZmlsbCB0aGUgZmlmbyB3aXRoIGRhdGEgYmVmb3JlIHRvIGVuYWJsZWQgdGhlIFNBSSAqLwogICAgICAgU0FJX0ZpbGxGaWZvKGhzYWkpOwpAQCAtODk0LDMxICs5MDIsMzEgQEAKICAgICAgIF9fSEFMX1NBSV9FTkFCTEUoaHNhaSk7CiAgICAgfQogCi0gICAgd2hpbGUoaHNhaS0+WGZlckNvdW50ID4gMFUpCisgICAgd2hpbGUgKGhzYWktPlhmZXJDb3VudCA+IDBVKQogICAgIHsKICAgICAgIC8qIFdyaXRlIGRhdGEgaWYgdGhlIEZJRk8gaXMgbm90IGZ1bGwgKi8KLSAgICAgIGlmKChoc2FpLT5JbnN0YW5jZS0+U1IgJiBTQUlfeFNSX0ZMVkwpICE9IFNBSV9GSUZPU1RBVFVTX0ZVTEwpCisgICAgICBpZiAoKGhzYWktPkluc3RhbmNlLT5TUiAmIFNBSV94U1JfRkxWTCkgIT0gU0FJX0ZJRk9TVEFUVVNfRlVMTCkKICAgICAgIHsKLSAgICAgICAgaWYoKGhzYWktPkluaXQuRGF0YVNpemUgPT0gU0FJX0RBVEFTSVpFXzgpICYmIChoc2FpLT5Jbml0LkNvbXBhbmRpbmdNb2RlID09IFNBSV9OT0NPTVBBTkRJTkcpKQorICAgICAgICBpZiAoKGhzYWktPkluaXQuRGF0YVNpemUgPT0gU0FJX0RBVEFTSVpFXzgpICYmIChoc2FpLT5Jbml0LkNvbXBhbmRpbmdNb2RlID09IFNBSV9OT0NPTVBBTkRJTkcpKQogICAgICAgICB7CiAgICAgICAgICAgaHNhaS0+SW5zdGFuY2UtPkRSID0gKCpoc2FpLT5wQnVmZlB0cisrKTsKICAgICAgICAgfQotICAgICAgICBlbHNlIGlmKGhzYWktPkluaXQuRGF0YVNpemUgPD0gU0FJX0RBVEFTSVpFXzE2KQorICAgICAgICBlbHNlIGlmIChoc2FpLT5Jbml0LkRhdGFTaXplIDw9IFNBSV9EQVRBU0laRV8xNikKICAgICAgICAgewogICAgICAgICAgIGhzYWktPkluc3RhbmNlLT5EUiA9ICooKHVpbnQxNl90ICopaHNhaS0+cEJ1ZmZQdHIpOwotICAgICAgICAgIGhzYWktPnBCdWZmUHRyKz0gMlU7CisgICAgICAgICAgaHNhaS0+cEJ1ZmZQdHIgKz0gMlU7CiAgICAgICAgIH0KICAgICAgICAgZWxzZQogICAgICAgICB7CiAgICAgICAgICAgaHNhaS0+SW5zdGFuY2UtPkRSID0gKigodWludDMyX3QgKiloc2FpLT5wQnVmZlB0cik7Ci0gICAgICAgICAgaHNhaS0+cEJ1ZmZQdHIrPSA0VTsKKyAgICAgICAgICBoc2FpLT5wQnVmZlB0ciArPSA0VTsKICAgICAgICAgfQogICAgICAgICBoc2FpLT5YZmVyQ291bnQtLTsKICAgICAgIH0KICAgICAgIGVsc2UKICAgICAgIHsKICAgICAgICAgLyogQ2hlY2sgZm9yIHRoZSBUaW1lb3V0ICovCi0gICAgICAgIGlmKChUaW1lb3V0ICE9IEhBTF9NQVhfREVMQVkpICYmICgoVGltZW91dCA9PSAwVSl8fCgoSEFMX0dldFRpY2soKSAtIHRpY2tzdGFydCkgPiBUaW1lb3V0KSkpCisgICAgICAgIGlmICgoVGltZW91dCAhPSBIQUxfTUFYX0RFTEFZKSAmJiAoKFRpbWVvdXQgPT0gMFUpIHx8ICgoSEFMX0dldFRpY2soKSAtIHRpY2tzdGFydCkgPiBUaW1lb3V0KSkpCiAgICAgICAgIHsKICAgICAgICAgICAvKiBVcGRhdGUgZXJyb3IgY29kZSAqLwogICAgICAgICAgIGhzYWktPkVycm9yQ29kZSB8PSBIQUxfU0FJX0VSUk9SX1RJTUVPVVQ7CkBAIC05NjksMTIgKzk3NywxMiBAQAogewogICB1aW50MzJfdCB0aWNrc3RhcnQgPSBIQUxfR2V0VGljaygpOwogCi0gIGlmKChwRGF0YSA9PSBOVUxMICkgfHwgKFNpemUgPT0gMCkpCisgIGlmICgocERhdGEgPT0gTlVMTCkgfHwgKFNpemUgPT0gMCkpCiAgIHsKICAgICByZXR1cm4gIEhBTF9FUlJPUjsKICAgfQogCi0gIGlmKGhzYWktPlN0YXRlID09IEhBTF9TQUlfU1RBVEVfUkVBRFkpCisgIGlmIChoc2FpLT5TdGF0ZSA9PSBIQUxfU0FJX1NUQVRFX1JFQURZKQogICB7CiAgICAgLyogUHJvY2VzcyBMb2NrZWQgKi8KICAgICBfX0hBTF9MT0NLKGhzYWkpOwpAQCAtOTg2LDM3ICs5OTQsMzcgQEAKICAgICBoc2FpLT5FcnJvckNvZGUgPSBIQUxfU0FJX0VSUk9SX05PTkU7CiAKICAgICAvKiBDaGVjayBpZiB0aGUgU0FJIGlzIGFscmVhZHkgZW5hYmxlZCAqLwotICAgIGlmKChoc2FpLT5JbnN0YW5jZS0+Q1IxICYgU0FJX3hDUjFfU0FJRU4pID09IFJFU0VUKQorICAgIGlmICgoaHNhaS0+SW5zdGFuY2UtPkNSMSAmIFNBSV94Q1IxX1NBSUVOKSA9PSBSRVNFVCkKICAgICB7CiAgICAgICAvKiBFbmFibGUgU0FJIHBlcmlwaGVyYWwgKi8KICAgICAgIF9fSEFMX1NBSV9FTkFCTEUoaHNhaSk7CiAgICAgfQogCiAgICAgLyogUmVjZWl2ZSBkYXRhICovCi0gICAgd2hpbGUoaHNhaS0+WGZlckNvdW50ID4gMFUpCisgICAgd2hpbGUgKGhzYWktPlhmZXJDb3VudCA+IDBVKQogICAgIHsKLSAgICAgIGlmKChoc2FpLT5JbnN0YW5jZS0+U1IgJiBTQUlfeFNSX0ZMVkwpICE9IFNBSV9GSUZPU1RBVFVTX0VNUFRZKQorICAgICAgaWYgKChoc2FpLT5JbnN0YW5jZS0+U1IgJiBTQUlfeFNSX0ZMVkwpICE9IFNBSV9GSUZPU1RBVFVTX0VNUFRZKQogICAgICAgewotICAgICAgICBpZigoaHNhaS0+SW5pdC5EYXRhU2l6ZSA9PSBTQUlfREFUQVNJWkVfOCkgJiYgKGhzYWktPkluaXQuQ29tcGFuZGluZ01vZGUgPT0gU0FJX05PQ09NUEFORElORykpCisgICAgICAgIGlmICgoaHNhaS0+SW5pdC5EYXRhU2l6ZSA9PSBTQUlfREFUQVNJWkVfOCkgJiYgKGhzYWktPkluaXQuQ29tcGFuZGluZ01vZGUgPT0gU0FJX05PQ09NUEFORElORykpCiAgICAgICAgIHsKICAgICAgICAgICAoKmhzYWktPnBCdWZmUHRyKyspID0gaHNhaS0+SW5zdGFuY2UtPkRSOwogICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYoaHNhaS0+SW5pdC5EYXRhU2l6ZSA8PSBTQUlfREFUQVNJWkVfMTYpCisgICAgICAgIGVsc2UgaWYgKGhzYWktPkluaXQuRGF0YVNpemUgPD0gU0FJX0RBVEFTSVpFXzE2KQogICAgICAgICB7Ci0gICAgICAgICAgKigodWludDE2X3QqKWhzYWktPnBCdWZmUHRyKSA9IGhzYWktPkluc3RhbmNlLT5EUjsKLSAgICAgICAgICBoc2FpLT5wQnVmZlB0cis9IDJVOworICAgICAgICAgICooKHVpbnQxNl90ICopaHNhaS0+cEJ1ZmZQdHIpID0gaHNhaS0+SW5zdGFuY2UtPkRSOworICAgICAgICAgIGhzYWktPnBCdWZmUHRyICs9IDJVOwogICAgICAgICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgewotICAgICAgICAgICooKHVpbnQzMl90Kiloc2FpLT5wQnVmZlB0cikgPSBoc2FpLT5JbnN0YW5jZS0+RFI7Ci0gICAgICAgICAgaHNhaS0+cEJ1ZmZQdHIrPSA0VTsKKyAgICAgICAgICAqKCh1aW50MzJfdCAqKWhzYWktPnBCdWZmUHRyKSA9IGhzYWktPkluc3RhbmNlLT5EUjsKKyAgICAgICAgICBoc2FpLT5wQnVmZlB0ciArPSA0VTsKICAgICAgICAgfQogICAgICAgICBoc2FpLT5YZmVyQ291bnQtLTsKICAgICAgIH0KICAgICAgIGVsc2UKICAgICAgIHsKICAgICAgICAgLyogQ2hlY2sgZm9yIHRoZSBUaW1lb3V0ICovCi0gICAgICAgIGlmKChUaW1lb3V0ICE9IEhBTF9NQVhfREVMQVkpICYmICgoVGltZW91dCA9PSAwVSl8fCgoSEFMX0dldFRpY2soKSAtIHRpY2tzdGFydCApID4gVGltZW91dCkpKQorICAgICAgICBpZiAoKFRpbWVvdXQgIT0gSEFMX01BWF9ERUxBWSkgJiYgKChUaW1lb3V0ID09IDBVKSB8fCAoKEhBTF9HZXRUaWNrKCkgLSB0aWNrc3RhcnQpID4gVGltZW91dCkpKQogICAgICAgICB7CiAgICAgICAgICAgLyogVXBkYXRlIGVycm9yIGNvZGUgKi8KICAgICAgICAgICBoc2FpLT5FcnJvckNvZGUgfD0gSEFMX1NBSV9FUlJPUl9USU1FT1VUOwpAQCAtMTA2NCwxMiArMTA3MiwxMiBAQAogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1NBSV9UcmFuc21pdF9JVChTQUlfSGFuZGxlVHlwZURlZiAqaHNhaSwgdWludDhfdCAqcERhdGEsIHVpbnQxNl90IFNpemUpCiB7Ci0gIGlmKChwRGF0YSA9PSBOVUxMKSB8fCAoU2l6ZSA9PSAwKSkKKyAgaWYgKChwRGF0YSA9PSBOVUxMKSB8fCAoU2l6ZSA9PSAwKSkKICAgewogICAgIHJldHVybiAgSEFMX0VSUk9SOwogICB9CiAKLSAgaWYoaHNhaS0+U3RhdGUgPT0gSEFMX1NBSV9TVEFURV9SRUFEWSkKKyAgaWYgKGhzYWktPlN0YXRlID09IEhBTF9TQUlfU1RBVEVfUkVBRFkpCiAgIHsKICAgICAvKiBQcm9jZXNzIExvY2tlZCAqLwogICAgIF9fSEFMX0xPQ0soaHNhaSk7CkBAIC0xMDgwLDExICsxMDg4LDExIEBACiAgICAgaHNhaS0+RXJyb3JDb2RlID0gSEFMX1NBSV9FUlJPUl9OT05FOwogICAgIGhzYWktPlN0YXRlID0gSEFMX1NBSV9TVEFURV9CVVNZX1RYOwogCi0gICAgaWYoKGhzYWktPkluaXQuRGF0YVNpemUgPT0gU0FJX0RBVEFTSVpFXzgpICYmIChoc2FpLT5Jbml0LkNvbXBhbmRpbmdNb2RlID09IFNBSV9OT0NPTVBBTkRJTkcpKQorICAgIGlmICgoaHNhaS0+SW5pdC5EYXRhU2l6ZSA9PSBTQUlfREFUQVNJWkVfOCkgJiYgKGhzYWktPkluaXQuQ29tcGFuZGluZ01vZGUgPT0gU0FJX05PQ09NUEFORElORykpCiAgICAgewogICAgICAgaHNhaS0+SW50ZXJydXB0U2VydmljZVJvdXRpbmUgPSBTQUlfVHJhbnNtaXRfSVQ4Qml0OwogICAgIH0KLSAgICBlbHNlIGlmKGhzYWktPkluaXQuRGF0YVNpemUgPD0gU0FJX0RBVEFTSVpFXzE2KQorICAgIGVsc2UgaWYgKGhzYWktPkluaXQuRGF0YVNpemUgPD0gU0FJX0RBVEFTSVpFXzE2KQogICAgIHsKICAgICAgIGhzYWktPkludGVycnVwdFNlcnZpY2VSb3V0aW5lID0gU0FJX1RyYW5zbWl0X0lUMTZCaXQ7CiAgICAgfQpAQCAtMTEwMCw3ICsxMTA4LDcgQEAKICAgICBfX0hBTF9TQUlfRU5BQkxFX0lUKGhzYWksIFNBSV9JbnRlcnJ1cHRGbGFnKGhzYWksIFNBSV9NT0RFX0lUKSk7CiAKICAgICAvKiBDaGVjayBpZiB0aGUgU0FJIGlzIGFscmVhZHkgZW5hYmxlZCAqLwotICAgIGlmKChoc2FpLT5JbnN0YW5jZS0+Q1IxICYgU0FJX3hDUjFfU0FJRU4pID09IFJFU0VUKQorICAgIGlmICgoaHNhaS0+SW5zdGFuY2UtPkNSMSAmIFNBSV94Q1IxX1NBSUVOKSA9PSBSRVNFVCkKICAgICB7CiAgICAgICAvKiBFbmFibGUgU0FJIHBlcmlwaGVyYWwgKi8KICAgICAgIF9fSEFMX1NBSV9FTkFCTEUoaHNhaSk7CkBAIC0xMTI2LDEyICsxMTM0LDEyIEBACiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfU0FJX1JlY2VpdmVfSVQoU0FJX0hhbmRsZVR5cGVEZWYgKmhzYWksIHVpbnQ4X3QgKnBEYXRhLCB1aW50MTZfdCBTaXplKQogewotICBpZigocERhdGEgPT0gTlVMTCkgfHwgKFNpemUgPT0gMCkpCisgIGlmICgocERhdGEgPT0gTlVMTCkgfHwgKFNpemUgPT0gMCkpCiAgIHsKICAgICByZXR1cm4gIEhBTF9FUlJPUjsKICAgfQogCi0gIGlmKGhzYWktPlN0YXRlID09IEhBTF9TQUlfU1RBVEVfUkVBRFkpCisgIGlmIChoc2FpLT5TdGF0ZSA9PSBIQUxfU0FJX1NUQVRFX1JFQURZKQogICB7CiAgICAgLyogUHJvY2VzcyBMb2NrZWQgKi8KICAgICBfX0hBTF9MT0NLKGhzYWkpOwpAQCAtMTE0MiwxMSArMTE1MCwxMSBAQAogICAgIGhzYWktPkVycm9yQ29kZSA9IEhBTF9TQUlfRVJST1JfTk9ORTsKICAgICBoc2FpLT5TdGF0ZSA9IEhBTF9TQUlfU1RBVEVfQlVTWV9SWDsKIAotICAgIGlmKChoc2FpLT5Jbml0LkRhdGFTaXplID09IFNBSV9EQVRBU0laRV84KSAmJiAoaHNhaS0+SW5pdC5Db21wYW5kaW5nTW9kZSA9PSBTQUlfTk9DT01QQU5ESU5HKSkKKyAgICBpZiAoKGhzYWktPkluaXQuRGF0YVNpemUgPT0gU0FJX0RBVEFTSVpFXzgpICYmIChoc2FpLT5Jbml0LkNvbXBhbmRpbmdNb2RlID09IFNBSV9OT0NPTVBBTkRJTkcpKQogICAgIHsKICAgICAgIGhzYWktPkludGVycnVwdFNlcnZpY2VSb3V0aW5lID0gU0FJX1JlY2VpdmVfSVQ4Qml0OwogICAgIH0KLSAgICBlbHNlIGlmKGhzYWktPkluaXQuRGF0YVNpemUgPD0gU0FJX0RBVEFTSVpFXzE2KQorICAgIGVsc2UgaWYgKGhzYWktPkluaXQuRGF0YVNpemUgPD0gU0FJX0RBVEFTSVpFXzE2KQogICAgIHsKICAgICAgIGhzYWktPkludGVycnVwdFNlcnZpY2VSb3V0aW5lID0gU0FJX1JlY2VpdmVfSVQxNkJpdDsKICAgICB9CkBAIC0xMTU5LDcgKzExNjcsNyBAQAogICAgIF9fSEFMX1NBSV9FTkFCTEVfSVQoaHNhaSwgU0FJX0ludGVycnVwdEZsYWcoaHNhaSwgU0FJX01PREVfSVQpKTsKIAogICAgIC8qIENoZWNrIGlmIHRoZSBTQUkgaXMgYWxyZWFkeSBlbmFibGVkICovCi0gICAgaWYoKGhzYWktPkluc3RhbmNlLT5DUjEgJiBTQUlfeENSMV9TQUlFTikgPT0gUkVTRVQpCisgICAgaWYgKChoc2FpLT5JbnN0YW5jZS0+Q1IxICYgU0FJX3hDUjFfU0FJRU4pID09IFJFU0VUKQogICAgIHsKICAgICAgIC8qIEVuYWJsZSBTQUkgcGVyaXBoZXJhbCAqLwogICAgICAgX19IQUxfU0FJX0VOQUJMRShoc2FpKTsKQEAgLTEyNDAsMTIgKzEyNDgsMTIgQEAKICAgaHNhaS0+SW5zdGFuY2UtPkNSMSAmPSB+U0FJX3hDUjFfRE1BRU47CiAKICAgLyogQWJvcnQgdGhlIFNBSSBUeCBETUEgU3RyZWFtICovCi0gIGlmKChoc2FpLT5oZG1hdHggIT0gTlVMTCkgJiYgKGhzYWktPlN0YXRlID09IEhBTF9TQUlfU1RBVEVfQlVTWV9UWCkpCisgIGlmICgoaHNhaS0+aGRtYXR4ICE9IE5VTEwpICYmIChoc2FpLT5TdGF0ZSA9PSBIQUxfU0FJX1NUQVRFX0JVU1lfVFgpKQogICB7Ci0gICAgaWYoSEFMX0RNQV9BYm9ydChoc2FpLT5oZG1hdHgpICE9IEhBTF9PSykKKyAgICBpZiAoSEFMX0RNQV9BYm9ydChoc2FpLT5oZG1hdHgpICE9IEhBTF9PSykKICAgICB7CiAgICAgICAvKiBJZiB0aGUgRE1BIFR4IGVycm9yQ29kZSBpcyBkaWZmZXJlbnQgZnJvbSBETUEgTm8gVHJhbnNmZXIgdGhlbiByZXR1cm4gRXJyb3IgKi8KLSAgICAgIGlmKGhzYWktPmhkbWF0eC0+RXJyb3JDb2RlICE9IEhBTF9ETUFfRVJST1JfTk9fWEZFUikKKyAgICAgIGlmIChoc2FpLT5oZG1hdHgtPkVycm9yQ29kZSAhPSBIQUxfRE1BX0VSUk9SX05PX1hGRVIpCiAgICAgICB7CiAgICAgICAgIHN0YXR1cyA9IEhBTF9FUlJPUjsKICAgICAgICAgaHNhaS0+RXJyb3JDb2RlIHw9IEhBTF9TQUlfRVJST1JfRE1BOwpAQCAtMTI1NCwxMiArMTI2MiwxMiBAQAogICB9CiAKICAgLyogQWJvcnQgdGhlIFNBSSBSeCBETUEgU3RyZWFtICovCi0gIGlmKChoc2FpLT5oZG1hcnggIT0gTlVMTCkgJiYgKGhzYWktPlN0YXRlID09IEhBTF9TQUlfU1RBVEVfQlVTWV9SWCkpCisgIGlmICgoaHNhaS0+aGRtYXJ4ICE9IE5VTEwpICYmIChoc2FpLT5TdGF0ZSA9PSBIQUxfU0FJX1NUQVRFX0JVU1lfUlgpKQogICB7Ci0gICAgaWYoSEFMX0RNQV9BYm9ydChoc2FpLT5oZG1hcngpICE9IEhBTF9PSykKKyAgICBpZiAoSEFMX0RNQV9BYm9ydChoc2FpLT5oZG1hcngpICE9IEhBTF9PSykKICAgICB7CiAgICAgICAvKiBJZiB0aGUgRE1BIFJ4IGVycm9yQ29kZSBpcyBkaWZmZXJlbnQgZnJvbSBETUEgTm8gVHJhbnNmZXIgdGhlbiByZXR1cm4gRXJyb3IgKi8KLSAgICAgIGlmKGhzYWktPmhkbWFyeC0+RXJyb3JDb2RlICE9IEhBTF9ETUFfRVJST1JfTk9fWEZFUikKKyAgICAgIGlmIChoc2FpLT5oZG1hcngtPkVycm9yQ29kZSAhPSBIQUxfRE1BX0VSUk9SX05PX1hGRVIpCiAgICAgICB7CiAgICAgICAgIHN0YXR1cyA9IEhBTF9FUlJPUjsKICAgICAgICAgaHNhaS0+RXJyb3JDb2RlIHw9IEhBTF9TQUlfRVJST1JfRE1BOwpAQCAtMTI5NiwxOCArMTMwNCwxOCBAQAogICBfX0hBTF9MT0NLKGhzYWkpOwogCiAgIC8qIENoZWNrIFNBSSBETUEgaXMgZW5hYmxlZCBvciBub3QgKi8KLSAgaWYoKGhzYWktPkluc3RhbmNlLT5DUjEgJiBTQUlfeENSMV9ETUFFTikgPT0gU0FJX3hDUjFfRE1BRU4pCisgIGlmICgoaHNhaS0+SW5zdGFuY2UtPkNSMSAmIFNBSV94Q1IxX0RNQUVOKSA9PSBTQUlfeENSMV9ETUFFTikKICAgewogICAgIC8qIERpc2FibGUgdGhlIFNBSSBETUEgcmVxdWVzdCAqLwogICAgIGhzYWktPkluc3RhbmNlLT5DUjEgJj0gflNBSV94Q1IxX0RNQUVOOwogCiAgICAgLyogQWJvcnQgdGhlIFNBSSBUeCBETUEgU3RyZWFtICovCi0gICAgaWYoKGhzYWktPmhkbWF0eCAhPSBOVUxMKSAmJiAoaHNhaS0+U3RhdGUgPT0gSEFMX1NBSV9TVEFURV9CVVNZX1RYKSkKKyAgICBpZiAoKGhzYWktPmhkbWF0eCAhPSBOVUxMKSAmJiAoaHNhaS0+U3RhdGUgPT0gSEFMX1NBSV9TVEFURV9CVVNZX1RYKSkKICAgICB7Ci0gICAgICBpZihIQUxfRE1BX0Fib3J0KGhzYWktPmhkbWF0eCkgIT0gSEFMX09LKQorICAgICAgaWYgKEhBTF9ETUFfQWJvcnQoaHNhaS0+aGRtYXR4KSAhPSBIQUxfT0spCiAgICAgICB7CiAgICAgICAgIC8qIElmIHRoZSBETUEgVHggZXJyb3JDb2RlIGlzIGRpZmZlcmVudCBmcm9tIERNQSBObyBUcmFuc2ZlciB0aGVuIHJldHVybiBFcnJvciAqLwotICAgICAgICBpZihoc2FpLT5oZG1hdHgtPkVycm9yQ29kZSAhPSBIQUxfRE1BX0VSUk9SX05PX1hGRVIpCisgICAgICAgIGlmIChoc2FpLT5oZG1hdHgtPkVycm9yQ29kZSAhPSBIQUxfRE1BX0VSUk9SX05PX1hGRVIpCiAgICAgICAgIHsKICAgICAgICAgICBzdGF0dXMgPSBIQUxfRVJST1I7CiAgICAgICAgICAgaHNhaS0+RXJyb3JDb2RlIHw9IEhBTF9TQUlfRVJST1JfRE1BOwpAQCAtMTMxNiwxMiArMTMyNCwxMiBAQAogICAgIH0KIAogICAgIC8qIEFib3J0IHRoZSBTQUkgUnggRE1BIFN0cmVhbSAqLwotICAgIGlmKChoc2FpLT5oZG1hcnggIT0gTlVMTCkgJiYgKGhzYWktPlN0YXRlID09IEhBTF9TQUlfU1RBVEVfQlVTWV9SWCkpCisgICAgaWYgKChoc2FpLT5oZG1hcnggIT0gTlVMTCkgJiYgKGhzYWktPlN0YXRlID09IEhBTF9TQUlfU1RBVEVfQlVTWV9SWCkpCiAgICAgewotICAgICAgaWYoSEFMX0RNQV9BYm9ydChoc2FpLT5oZG1hcngpICE9IEhBTF9PSykKKyAgICAgIGlmIChIQUxfRE1BX0Fib3J0KGhzYWktPmhkbWFyeCkgIT0gSEFMX09LKQogICAgICAgewogICAgICAgICAvKiBJZiB0aGUgRE1BIFJ4IGVycm9yQ29kZSBpcyBkaWZmZXJlbnQgZnJvbSBETUEgTm8gVHJhbnNmZXIgdGhlbiByZXR1cm4gRXJyb3IgKi8KLSAgICAgICAgaWYoaHNhaS0+aGRtYXJ4LT5FcnJvckNvZGUgIT0gSEFMX0RNQV9FUlJPUl9OT19YRkVSKQorICAgICAgICBpZiAoaHNhaS0+aGRtYXJ4LT5FcnJvckNvZGUgIT0gSEFMX0RNQV9FUlJPUl9OT19YRkVSKQogICAgICAgICB7CiAgICAgICAgICAgc3RhdHVzID0gSEFMX0VSUk9SOwogICAgICAgICAgIGhzYWktPkVycm9yQ29kZSB8PSBIQUxfU0FJX0VSUk9SX0RNQTsKQEAgLTEzNTksMTIgKzEzNjcsMTQgQEAKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9TQUlfVHJhbnNtaXRfRE1BKFNBSV9IYW5kbGVUeXBlRGVmICpoc2FpLCB1aW50OF90ICpwRGF0YSwgdWludDE2X3QgU2l6ZSkKIHsKLSAgaWYoKHBEYXRhID09IE5VTEwpIHx8IChTaXplID09IDApKQorICB1aW50MzJfdCB0aWNrc3RhcnQgPSBIQUxfR2V0VGljaygpOworCisgIGlmICgocERhdGEgPT0gTlVMTCkgfHwgKFNpemUgPT0gMCkpCiAgIHsKICAgICByZXR1cm4gIEhBTF9FUlJPUjsKICAgfQogCi0gIGlmKGhzYWktPlN0YXRlID09IEhBTF9TQUlfU1RBVEVfUkVBRFkpCisgIGlmIChoc2FpLT5TdGF0ZSA9PSBIQUxfU0FJX1NUQVRFX1JFQURZKQogICB7CiAgICAgLyogUHJvY2VzcyBMb2NrZWQgKi8KICAgICBfX0hBTF9MT0NLKGhzYWkpOwpAQCAtMTM4OCwyNSArMTM5OCw0MSBAQAogICAgIGhzYWktPmhkbWF0eC0+WGZlckFib3J0Q2FsbGJhY2sgPSBOVUxMOwogCiAgICAgLyogRW5hYmxlIHRoZSBUeCBETUEgU3RyZWFtICovCi0gICAgaWYoSEFMX0RNQV9TdGFydF9JVChoc2FpLT5oZG1hdHgsICh1aW50MzJfdCloc2FpLT5wQnVmZlB0ciwgKHVpbnQzMl90KSZoc2FpLT5JbnN0YW5jZS0+RFIsIGhzYWktPlhmZXJTaXplKSAhPSBIQUxfT0spCisgICAgaWYgKEhBTF9ETUFfU3RhcnRfSVQoaHNhaS0+aGRtYXR4LCAodWludDMyX3QpaHNhaS0+cEJ1ZmZQdHIsICh1aW50MzJfdCkmaHNhaS0+SW5zdGFuY2UtPkRSLCBoc2FpLT5YZmVyU2l6ZSkgIT0gSEFMX09LKQogICAgIHsKICAgICAgIF9fSEFMX1VOTE9DSyhoc2FpKTsKICAgICAgIHJldHVybiAgSEFMX0VSUk9SOwogICAgIH0KIAotICAgIC8qIENoZWNrIGlmIHRoZSBTQUkgaXMgYWxyZWFkeSBlbmFibGVkICovCi0gICAgaWYoKGhzYWktPkluc3RhbmNlLT5DUjEgJiBTQUlfeENSMV9TQUlFTikgPT0gUkVTRVQpCi0gICAgewotICAgICAgLyogRW5hYmxlIFNBSSBwZXJpcGhlcmFsICovCi0gICAgICBfX0hBTF9TQUlfRU5BQkxFKGhzYWkpOwotICAgIH0KLQogICAgIC8qIEVuYWJsZSB0aGUgaW50ZXJydXB0cyBmb3IgZXJyb3IgaGFuZGxpbmcgKi8KICAgICBfX0hBTF9TQUlfRU5BQkxFX0lUKGhzYWksIFNBSV9JbnRlcnJ1cHRGbGFnKGhzYWksIFNBSV9NT0RFX0RNQSkpOwogCiAgICAgLyogRW5hYmxlIFNBSSBUeCBETUEgUmVxdWVzdCAqLwogICAgIGhzYWktPkluc3RhbmNlLT5DUjEgfD0gU0FJX3hDUjFfRE1BRU47CiAKKyAgICAvKiBXYWl0IHVudGlsIEZJRk8gaXMgbm90IGVtcHR5ICovCisgICAgd2hpbGUgKChoc2FpLT5JbnN0YW5jZS0+U1IgJiBTQUlfeFNSX0ZMVkwpID09IFNBSV9GSUZPU1RBVFVTX0VNUFRZKQorICAgIHsKKyAgICAgIC8qIENoZWNrIGZvciB0aGUgVGltZW91dCAqLworICAgICAgaWYgKChIQUxfR2V0VGljaygpIC0gdGlja3N0YXJ0KSA+IFNBSV9MT05HX1RJTUVPVVQpCisgICAgICB7CisgICAgICAgIC8qIFVwZGF0ZSBlcnJvciBjb2RlICovCisgICAgICAgIGhzYWktPkVycm9yQ29kZSB8PSBIQUxfU0FJX0VSUk9SX1RJTUVPVVQ7CisKKyAgICAgICAgLyogUHJvY2VzcyBVbmxvY2tlZCAqLworICAgICAgICBfX0hBTF9VTkxPQ0soaHNhaSk7CisKKyAgICAgICAgcmV0dXJuIEhBTF9USU1FT1VUOworICAgICAgfQorICAgIH0KKworICAgIC8qIENoZWNrIGlmIHRoZSBTQUkgaXMgYWxyZWFkeSBlbmFibGVkICovCisgICAgaWYgKChoc2FpLT5JbnN0YW5jZS0+Q1IxICYgU0FJX3hDUjFfU0FJRU4pID09IDBVKQorICAgIHsKKyAgICAgIC8qIEVuYWJsZSBTQUkgcGVyaXBoZXJhbCAqLworICAgICAgX19IQUxfU0FJX0VOQUJMRShoc2FpKTsKKyAgICB9CisKICAgICAvKiBQcm9jZXNzIFVubG9ja2VkICovCiAgICAgX19IQUxfVU5MT0NLKGhzYWkpOwogCkBAIC0xNDI4LDEyICsxNDU0LDEyIEBACiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfU0FJX1JlY2VpdmVfRE1BKFNBSV9IYW5kbGVUeXBlRGVmICpoc2FpLCB1aW50OF90ICpwRGF0YSwgdWludDE2X3QgU2l6ZSkKIHsKLSAgaWYoKHBEYXRhID09IE5VTEwpIHx8IChTaXplID09IDApKQorICBpZiAoKHBEYXRhID09IE5VTEwpIHx8IChTaXplID09IDApKQogICB7CiAgICAgcmV0dXJuICBIQUxfRVJST1I7CiAgIH0KIAotICBpZihoc2FpLT5TdGF0ZSA9PSBIQUxfU0FJX1NUQVRFX1JFQURZKQorICBpZiAoaHNhaS0+U3RhdGUgPT0gSEFMX1NBSV9TVEFURV9SRUFEWSkKICAgewogICAgIC8qIFByb2Nlc3MgTG9ja2VkICovCiAgICAgX19IQUxfTE9DSyhoc2FpKTsKQEAgLTE0NTcsNyArMTQ4Myw3IEBACiAgICAgaHNhaS0+aGRtYXJ4LT5YZmVyQWJvcnRDYWxsYmFjayA9IE5VTEw7CiAKICAgICAvKiBFbmFibGUgdGhlIFJ4IERNQSBTdHJlYW0gKi8KLSAgICBpZihIQUxfRE1BX1N0YXJ0X0lUKGhzYWktPmhkbWFyeCwgKHVpbnQzMl90KSZoc2FpLT5JbnN0YW5jZS0+RFIsICh1aW50MzJfdCloc2FpLT5wQnVmZlB0ciwgaHNhaS0+WGZlclNpemUpICE9IEhBTF9PSykKKyAgICBpZiAoSEFMX0RNQV9TdGFydF9JVChoc2FpLT5oZG1hcngsICh1aW50MzJfdCkmaHNhaS0+SW5zdGFuY2UtPkRSLCAodWludDMyX3QpaHNhaS0+cEJ1ZmZQdHIsIGhzYWktPlhmZXJTaXplKSAhPSBIQUxfT0spCiAgICAgewogICAgICAgX19IQUxfVU5MT0NLKGhzYWkpOwogICAgICAgcmV0dXJuICBIQUxfRVJST1I7CkBAIC0xNDcwLDcgKzE0OTYsNyBAQAogICAgIGhzYWktPkluc3RhbmNlLT5DUjEgfD0gU0FJX3hDUjFfRE1BRU47CiAKICAgICAvKiBDaGVjayBpZiB0aGUgU0FJIGlzIGFscmVhZHkgZW5hYmxlZCAqLwotICAgIGlmKChoc2FpLT5JbnN0YW5jZS0+Q1IxICYgU0FJX3hDUjFfU0FJRU4pID09IFJFU0VUKQorICAgIGlmICgoaHNhaS0+SW5zdGFuY2UtPkNSMSAmIFNBSV94Q1IxX1NBSUVOKSA9PSBSRVNFVCkKICAgICB7CiAgICAgICAvKiBFbmFibGUgU0FJIHBlcmlwaGVyYWwgKi8KICAgICAgIF9fSEFMX1NBSV9FTkFCTEUoaHNhaSk7CkBAIC0xNDk4LDcgKzE1MjQsNyBAQAogewogICBhc3NlcnRfcGFyYW0oSVNfU0FJX0JMT0NLX01VVEVfVkFMVUUodmFsKSk7CiAKLSAgaWYoaHNhaS0+U3RhdGUgIT0gSEFMX1NBSV9TVEFURV9SRVNFVCkKKyAgaWYgKGhzYWktPlN0YXRlICE9IEhBTF9TQUlfU1RBVEVfUkVTRVQpCiAgIHsKICAgICBDTEVBUl9CSVQoaHNhaS0+SW5zdGFuY2UtPkNSMiwgU0FJX3hDUjJfTVVURVZBTCB8IFNBSV94Q1IyX01VVEUpOwogICAgIFNFVF9CSVQoaHNhaS0+SW5zdGFuY2UtPkNSMiwgU0FJX3hDUjJfTVVURSB8IHZhbCk7CkBAIC0xNTE1LDcgKzE1NDEsNyBAQAogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1NBSV9EaXNhYmxlVHhNdXRlTW9kZShTQUlfSGFuZGxlVHlwZURlZiAqaHNhaSkKIHsKLSAgaWYoaHNhaS0+U3RhdGUgIT0gSEFMX1NBSV9TVEFURV9SRVNFVCkKKyAgaWYgKGhzYWktPlN0YXRlICE9IEhBTF9TQUlfU1RBVEVfUkVTRVQpCiAgIHsKICAgICBDTEVBUl9CSVQoaHNhaS0+SW5zdGFuY2UtPkNSMiwgU0FJX3hDUjJfTVVURVZBTCB8IFNBSV94Q1IyX01VVEUpOwogICAgIHJldHVybiBIQUxfT0s7CkBAIC0xNTM1LDcgKzE1NjEsNyBAQAogewogICBhc3NlcnRfcGFyYW0oSVNfU0FJX0JMT0NLX01VVEVfQ09VTlRFUihjb3VudGVyKSk7CiAKLSAgaWYoaHNhaS0+U3RhdGUgIT0gSEFMX1NBSV9TVEFURV9SRVNFVCkKKyAgaWYgKGhzYWktPlN0YXRlICE9IEhBTF9TQUlfU1RBVEVfUkVTRVQpCiAgIHsKICAgICAvKiBzZXQgdGhlIG11dGUgY291bnRlciAqLwogICAgIENMRUFSX0JJVChoc2FpLT5JbnN0YW5jZS0+Q1IyLCBTQUlfeENSMl9NVVRFQ05UKTsKQEAgLTE1NTYsNyArMTU4Miw3IEBACiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfU0FJX0Rpc2FibGVSeE11dGVNb2RlKFNBSV9IYW5kbGVUeXBlRGVmICpoc2FpKQogewotICBpZihoc2FpLT5TdGF0ZSAhPSBIQUxfU0FJX1NUQVRFX1JFU0VUKQorICBpZiAoaHNhaS0+U3RhdGUgIT0gSEFMX1NBSV9TVEFURV9SRVNFVCkKICAgewogICAgIC8qIHNldCB0aGUgbXV0ZWNhbGxiYWNrIHRvIE5VTEwgKi8KICAgICBoc2FpLT5tdXRlY2FsbGJhY2sgPSAoU0FJY2FsbGJhY2spTlVMTDsKQEAgLTE1NzUsNyArMTYwMSw3IEBACiAgICovCiB2b2lkIEhBTF9TQUlfSVJRSGFuZGxlcihTQUlfSGFuZGxlVHlwZURlZiAqaHNhaSkKIHsKLSAgaWYoaHNhaS0+U3RhdGUgIT0gSEFMX1NBSV9TVEFURV9SRVNFVCkKKyAgaWYgKGhzYWktPlN0YXRlICE9IEhBTF9TQUlfU1RBVEVfUkVTRVQpCiAgIHsKICAgICB1aW50MzJfdCBpdGZsYWdzID0gaHNhaS0+SW5zdGFuY2UtPlNSOwogICAgIHVpbnQzMl90IGl0c291cmNlcyA9IGhzYWktPkluc3RhbmNlLT5JTVI7CkBAIC0xNTgzLDEyICsxNjA5LDEyIEBACiAgICAgdWludDMyX3QgdG1wZXJyb3I7CiAKICAgICAvKiBTQUkgRmlmbyByZXF1ZXN0IGludGVycnVwdCBvY2N1cnJlZCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotICAgIGlmKCgoaXRmbGFncyAmIFNBSV94U1JfRlJFUSkgPT0gU0FJX3hTUl9GUkVRKSAmJiAoKGl0c291cmNlcyAmIFNBSV9JVF9GUkVRKSA9PSBTQUlfSVRfRlJFUSkpCisgICAgaWYgKCgoaXRmbGFncyAmIFNBSV94U1JfRlJFUSkgPT0gU0FJX3hTUl9GUkVRKSAmJiAoKGl0c291cmNlcyAmIFNBSV9JVF9GUkVRKSA9PSBTQUlfSVRfRlJFUSkpCiAgICAgewogICAgICAgaHNhaS0+SW50ZXJydXB0U2VydmljZVJvdXRpbmUoaHNhaSk7CiAgICAgfQogICAgIC8qIFNBSSBPdmVycnVuIGVycm9yIGludGVycnVwdCBvY2N1cnJlZCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSAgICBlbHNlIGlmKCgoaXRmbGFncyAmIFNBSV9GTEFHX09WUlVEUikgPT0gU0FJX0ZMQUdfT1ZSVURSKSAmJiAoKGl0c291cmNlcyAmIFNBSV9JVF9PVlJVRFIpID09IFNBSV9JVF9PVlJVRFIpKQorICAgIGVsc2UgaWYgKCgoaXRmbGFncyAmIFNBSV9GTEFHX09WUlVEUikgPT0gU0FJX0ZMQUdfT1ZSVURSKSAmJiAoKGl0c291cmNlcyAmIFNBSV9JVF9PVlJVRFIpID09IFNBSV9JVF9PVlJVRFIpKQogICAgIHsKICAgICAgIC8qIENsZWFyIHRoZSBTQUkgT3ZlcnJ1biBmbGFnICovCiAgICAgICBfX0hBTF9TQUlfQ0xFQVJfRkxBRyhoc2FpLCBTQUlfRkxBR19PVlJVRFIpOwpAQCAtMTYwNywyMCArMTYzMywyMCBAQAogI2VuZGlmIC8qIFVTRV9IQUxfU0FJX1JFR0lTVEVSX0NBTExCQUNLUyAqLwogICAgIH0KICAgICAvKiBTQUkgbXV0ZWRldCBpbnRlcnJ1cHQgb2NjdXJyZWQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0gICAgZWxzZSBpZigoKGl0ZmxhZ3MgJiBTQUlfRkxBR19NVVRFREVUKSA9PSBTQUlfRkxBR19NVVRFREVUKSAmJiAoKGl0c291cmNlcyAmIFNBSV9JVF9NVVRFREVUKSA9PSBTQUlfSVRfTVVURURFVCkpCisgICAgZWxzZSBpZiAoKChpdGZsYWdzICYgU0FJX0ZMQUdfTVVURURFVCkgPT0gU0FJX0ZMQUdfTVVURURFVCkgJiYgKChpdHNvdXJjZXMgJiBTQUlfSVRfTVVURURFVCkgPT0gU0FJX0lUX01VVEVERVQpKQogICAgIHsKICAgICAgIC8qIENsZWFyIHRoZSBTQUkgbXV0ZWRldCBmbGFnICovCiAgICAgICBfX0hBTF9TQUlfQ0xFQVJfRkxBRyhoc2FpLCBTQUlfRkxBR19NVVRFREVUKTsKIAogICAgICAgLyogY2FsbCB0aGUgY2FsbCBiYWNrIGZ1bmN0aW9uICovCi0gICAgICBpZihoc2FpLT5tdXRlY2FsbGJhY2sgIT0gKFNBSWNhbGxiYWNrKU5VTEwpCisgICAgICBpZiAoaHNhaS0+bXV0ZWNhbGxiYWNrICE9IChTQUljYWxsYmFjaylOVUxMKQogICAgICAgewogICAgICAgICAvKiBpbmZvcm0gdGhlIHVzZXIgdGhhdCBhbiBSWCBtdXRlIGV2ZW50IGhhcyBiZWVuIGRldGVjdGVkICovCiAgICAgICAgIGhzYWktPm11dGVjYWxsYmFjaygpOwogICAgICAgfQogICAgIH0KICAgICAvKiBTQUkgQUZTREVUIGludGVycnVwdCBvY2N1cnJlZCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSAgICBlbHNlIGlmKCgoaXRmbGFncyAmIFNBSV9GTEFHX0FGU0RFVCkgPT0gU0FJX0ZMQUdfQUZTREVUKSAmJiAoKGl0c291cmNlcyAmIFNBSV9JVF9BRlNERVQpID09IFNBSV9JVF9BRlNERVQpKQorICAgIGVsc2UgaWYgKCgoaXRmbGFncyAmIFNBSV9GTEFHX0FGU0RFVCkgPT0gU0FJX0ZMQUdfQUZTREVUKSAmJiAoKGl0c291cmNlcyAmIFNBSV9JVF9BRlNERVQpID09IFNBSV9JVF9BRlNERVQpKQogICAgIHsKICAgICAgIC8qIENsZWFyIHRoZSBTQUkgQUZTREVUIGZsYWcgKi8KICAgICAgIF9fSEFMX1NBSV9DTEVBUl9GTEFHKGhzYWksIFNBSV9GTEFHX0FGU0RFVCk7CkBAIC0xNjI5LDEwICsxNjU1LDEwIEBACiAgICAgICBoc2FpLT5FcnJvckNvZGUgfD0gSEFMX1NBSV9FUlJPUl9BRlNERVQ7CiAKICAgICAgIC8qIENoZWNrIFNBSSBETUEgaXMgZW5hYmxlZCBvciBub3QgKi8KLSAgICAgIGlmKChjcjFjb25maWcgJiBTQUlfeENSMV9ETUFFTikgPT0gU0FJX3hDUjFfRE1BRU4pCisgICAgICBpZiAoKGNyMWNvbmZpZyAmIFNBSV94Q1IxX0RNQUVOKSA9PSBTQUlfeENSMV9ETUFFTikKICAgICAgIHsKICAgICAgICAgLyogQWJvcnQgdGhlIFNBSSBETUEgU3RyZWFtcyAqLwotICAgICAgICBpZihoc2FpLT5oZG1hdHggIT0gTlVMTCkKKyAgICAgICAgaWYgKGhzYWktPmhkbWF0eCAhPSBOVUxMKQogICAgICAgICB7CiAgICAgICAgICAgLyogU2V0IHRoZSBETUEgVHggYWJvcnQgY2FsbGJhY2sgKi8KICAgICAgICAgICBoc2FpLT5oZG1hdHgtPlhmZXJBYm9ydENhbGxiYWNrID0gU0FJX0RNQUFib3J0OwpAQCAtMTY0MCw3ICsxNjY2LDcgQEAKICAgICAgICAgICAvKiBBYm9ydCBETUEgaW4gSVQgbW9kZSAqLwogICAgICAgICAgIEhBTF9ETUFfQWJvcnRfSVQoaHNhaS0+aGRtYXR4KTsKICAgICAgICAgfQotICAgICAgICBlbHNlIGlmKGhzYWktPmhkbWFyeCAhPSBOVUxMKQorICAgICAgICBlbHNlIGlmIChoc2FpLT5oZG1hcnggIT0gTlVMTCkKICAgICAgICAgewogICAgICAgICAgIC8qIFNldCB0aGUgRE1BIFJ4IGFib3J0IGNhbGxiYWNrICovCiAgICAgICAgICAgaHNhaS0+aGRtYXJ4LT5YZmVyQWJvcnRDYWxsYmFjayA9IFNBSV9ETUFBYm9ydDsKQEAgLTE2NjMsNyArMTY4OSw3IEBACiAgICAgICB9CiAgICAgfQogICAgIC8qIFNBSSBMRlNERVQgaW50ZXJydXB0IG9jY3VycmVkIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotICAgIGVsc2UgaWYoKChpdGZsYWdzICYgU0FJX0ZMQUdfTEZTREVUKSA9PSBTQUlfRkxBR19MRlNERVQpICYmICgoaXRzb3VyY2VzICYgU0FJX0lUX0xGU0RFVCkgPT0gU0FJX0lUX0xGU0RFVCkpCisgICAgZWxzZSBpZiAoKChpdGZsYWdzICYgU0FJX0ZMQUdfTEZTREVUKSA9PSBTQUlfRkxBR19MRlNERVQpICYmICgoaXRzb3VyY2VzICYgU0FJX0lUX0xGU0RFVCkgPT0gU0FJX0lUX0xGU0RFVCkpCiAgICAgewogICAgICAgLyogQ2xlYXIgdGhlIFNBSSBMRlNERVQgZmxhZyAqLwogICAgICAgX19IQUxfU0FJX0NMRUFSX0ZMQUcoaHNhaSwgU0FJX0ZMQUdfTEZTREVUKTsKQEAgLTE2NzIsMTAgKzE2OTgsMTAgQEAKICAgICAgIGhzYWktPkVycm9yQ29kZSB8PSBIQUxfU0FJX0VSUk9SX0xGU0RFVDsKIAogICAgICAgLyogQ2hlY2sgU0FJIERNQSBpcyBlbmFibGVkIG9yIG5vdCAqLwotICAgICAgaWYoKGNyMWNvbmZpZyAmIFNBSV94Q1IxX0RNQUVOKSA9PSBTQUlfeENSMV9ETUFFTikKKyAgICAgIGlmICgoY3IxY29uZmlnICYgU0FJX3hDUjFfRE1BRU4pID09IFNBSV94Q1IxX0RNQUVOKQogICAgICAgewogICAgICAgICAvKiBBYm9ydCB0aGUgU0FJIERNQSBTdHJlYW1zICovCi0gICAgICAgIGlmKGhzYWktPmhkbWF0eCAhPSBOVUxMKQorICAgICAgICBpZiAoaHNhaS0+aGRtYXR4ICE9IE5VTEwpCiAgICAgICAgIHsKICAgICAgICAgICAvKiBTZXQgdGhlIERNQSBUeCBhYm9ydCBjYWxsYmFjayAqLwogICAgICAgICAgIGhzYWktPmhkbWF0eC0+WGZlckFib3J0Q2FsbGJhY2sgPSBTQUlfRE1BQWJvcnQ7CkBAIC0xNjgzLDcgKzE3MDksNyBAQAogICAgICAgICAgIC8qIEFib3J0IERNQSBpbiBJVCBtb2RlICovCiAgICAgICAgICAgSEFMX0RNQV9BYm9ydF9JVChoc2FpLT5oZG1hdHgpOwogICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYoaHNhaS0+aGRtYXJ4ICE9IE5VTEwpCisgICAgICAgIGVsc2UgaWYgKGhzYWktPmhkbWFyeCAhPSBOVUxMKQogICAgICAgICB7CiAgICAgICAgICAgLyogU2V0IHRoZSBETUEgUnggYWJvcnQgY2FsbGJhY2sgKi8KICAgICAgICAgICBoc2FpLT5oZG1hcngtPlhmZXJBYm9ydENhbGxiYWNrID0gU0FJX0RNQUFib3J0OwpAQCAtMTcwNiw3ICsxNzMyLDcgQEAKICAgICAgIH0KICAgICB9CiAgICAgLyogU0FJIFdDS0NGRyBpbnRlcnJ1cHQgb2NjdXJyZWQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0gICAgZWxzZSBpZigoKGl0ZmxhZ3MgJiBTQUlfRkxBR19XQ0tDRkcpID09IFNBSV9GTEFHX1dDS0NGRykgJiYgKChpdHNvdXJjZXMgJiBTQUlfSVRfV0NLQ0ZHKSA9PSBTQUlfSVRfV0NLQ0ZHKSkKKyAgICBlbHNlIGlmICgoKGl0ZmxhZ3MgJiBTQUlfRkxBR19XQ0tDRkcpID09IFNBSV9GTEFHX1dDS0NGRykgJiYgKChpdHNvdXJjZXMgJiBTQUlfSVRfV0NLQ0ZHKSA9PSBTQUlfSVRfV0NLQ0ZHKSkKICAgICB7CiAgICAgICAvKiBDbGVhciB0aGUgU0FJIFdDS0NGRyBmbGFnICovCiAgICAgICBfX0hBTF9TQUlfQ0xFQVJfRkxBRyhoc2FpLCBTQUlfRkxBR19XQ0tDRkcpOwpAQCAtMTcxNSwxMCArMTc0MSwxMCBAQAogICAgICAgaHNhaS0+RXJyb3JDb2RlIHw9IEhBTF9TQUlfRVJST1JfV0NLQ0ZHOwogCiAgICAgICAvKiBDaGVjayBTQUkgRE1BIGlzIGVuYWJsZWQgb3Igbm90ICovCi0gICAgICBpZigoY3IxY29uZmlnICYgU0FJX3hDUjFfRE1BRU4pID09IFNBSV94Q1IxX0RNQUVOKQorICAgICAgaWYgKChjcjFjb25maWcgJiBTQUlfeENSMV9ETUFFTikgPT0gU0FJX3hDUjFfRE1BRU4pCiAgICAgICB7CiAgICAgICAgIC8qIEFib3J0IHRoZSBTQUkgRE1BIFN0cmVhbXMgKi8KLSAgICAgICAgaWYoaHNhaS0+aGRtYXR4ICE9IE5VTEwpCisgICAgICAgIGlmIChoc2FpLT5oZG1hdHggIT0gTlVMTCkKICAgICAgICAgewogICAgICAgICAgIC8qIFNldCB0aGUgRE1BIFR4IGFib3J0IGNhbGxiYWNrICovCiAgICAgICAgICAgaHNhaS0+aGRtYXR4LT5YZmVyQWJvcnRDYWxsYmFjayA9IFNBSV9ETUFBYm9ydDsKQEAgLTE3MjYsNyArMTc1Miw3IEBACiAgICAgICAgICAgLyogQWJvcnQgRE1BIGluIElUIG1vZGUgKi8KICAgICAgICAgICBIQUxfRE1BX0Fib3J0X0lUKGhzYWktPmhkbWF0eCk7CiAgICAgICAgIH0KLSAgICAgICAgZWxzZSBpZihoc2FpLT5oZG1hcnggIT0gTlVMTCkKKyAgICAgICAgZWxzZSBpZiAoaHNhaS0+aGRtYXJ4ICE9IE5VTEwpCiAgICAgICAgIHsKICAgICAgICAgICAvKiBTZXQgdGhlIERNQSBSeCBhYm9ydCBjYWxsYmFjayAqLwogICAgICAgICAgIGhzYWktPmhkbWFyeC0+WGZlckFib3J0Q2FsbGJhY2sgPSBTQUlfRE1BQWJvcnQ7CkBAIC0xNzU3LDcgKzE3ODMsNyBAQAogICAgICAgfQogICAgIH0KICAgICAvKiBTQUkgQ05SRFkgaW50ZXJydXB0IG9jY3VycmVkIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotICAgIGVsc2UgaWYoKChpdGZsYWdzICYgU0FJX0ZMQUdfQ05SRFkpID09IFNBSV9GTEFHX0NOUkRZKSAmJiAoKGl0c291cmNlcyAmIFNBSV9JVF9DTlJEWSkgPT0gU0FJX0lUX0NOUkRZKSkKKyAgICBlbHNlIGlmICgoKGl0ZmxhZ3MgJiBTQUlfRkxBR19DTlJEWSkgPT0gU0FJX0ZMQUdfQ05SRFkpICYmICgoaXRzb3VyY2VzICYgU0FJX0lUX0NOUkRZKSA9PSBTQUlfSVRfQ05SRFkpKQogICAgIHsKICAgICAgIC8qIENsZWFyIHRoZSBTQUkgQ05SRFkgZmxhZyAqLwogICAgICAgX19IQUxfU0FJX0NMRUFSX0ZMQUcoaHNhaSwgU0FJX0ZMQUdfQ05SRFkpOwpAQCAtMTkyOSwxMiArMTk1NSwxNCBAQAogICBoc2FpLT5Jbml0LlByb3RvY29sICAgICAgICAgICAgPSBTQUlfRlJFRV9QUk9UT0NPTDsKICAgaHNhaS0+SW5pdC5GaXJzdEJpdCAgICAgICAgICAgID0gU0FJX0ZJUlNUQklUX01TQjsKICAgLyogQ29tcHV0ZSBDbG9ja1N0cm9iaW5nIGFjY29yZGluZyBBdWRpb01vZGUgKi8KLSAgaWYoKGhzYWktPkluaXQuQXVkaW9Nb2RlID09IFNBSV9NT0RFTUFTVEVSX1RYKSB8fCAoaHNhaS0+SW5pdC5BdWRpb01vZGUgPT0gU0FJX01PREVTTEFWRV9UWCkpCi0gIHsgLyogVHJhbnNtaXQgKi8KKyAgaWYgKChoc2FpLT5Jbml0LkF1ZGlvTW9kZSA9PSBTQUlfTU9ERU1BU1RFUl9UWCkgfHwgKGhzYWktPkluaXQuQXVkaW9Nb2RlID09IFNBSV9NT0RFU0xBVkVfVFgpKQorICB7CisgICAgLyogVHJhbnNtaXQgKi8KICAgICBoc2FpLT5Jbml0LkNsb2NrU3Ryb2JpbmcgICAgID0gU0FJX0NMT0NLU1RST0JJTkdfRkFMTElOR0VER0U7CiAgIH0KICAgZWxzZQotICB7IC8qIFJlY2VpdmUgKi8KKyAgeworICAgIC8qIFJlY2VpdmUgKi8KICAgICBoc2FpLT5Jbml0LkNsb2NrU3Ryb2JpbmcgICAgID0gU0FJX0NMT0NLU1RST0JJTkdfUklTSU5HRURHRTsKICAgfQogICBoc2FpLT5GcmFtZUluaXQuRlNEZWZpbml0aW9uICAgPSBTQUlfRlNfQ0hBTk5FTF9JREVOVElGSUNBVElPTjsKQEAgLTE5NDMsNyArMTk3MSw3IEBACiAgIGhzYWktPlNsb3RJbml0LlNsb3ROdW1iZXIgICAgICA9IG5ic2xvdDsKIAogICAvKiBpbiBJUzIgdGhlIG51bWJlciBvZiBzbG90IG11c3QgYmUgZXZlbiAqLwotICBpZigobmJzbG90ICYgMHgxVSkgIT0gMFUpCisgIGlmICgobmJzbG90ICYgMHgxVSkgIT0gMFUpCiAgIHsKICAgICByZXR1cm4gSEFMX0VSUk9SOwogICB9CkBAIC0xOTU1LDQyICsxOTgzLDQyIEBACiAgIH0KICAgZWxzZQogICB7Ci0gICAgIC8qIFNBSV9JMlNfTVNCSlVTVElGSUVEIG9yIFNBSV9JMlNfTFNCSlVTVElGSUVEICovCisgICAgLyogU0FJX0kyU19NU0JKVVNUSUZJRUQgb3IgU0FJX0kyU19MU0JKVVNUSUZJRUQgKi8KICAgICBoc2FpLT5GcmFtZUluaXQuRlNQb2xhcml0eSA9IFNBSV9GU19BQ1RJVkVfSElHSDsKICAgICBoc2FpLT5GcmFtZUluaXQuRlNPZmZzZXQgICA9IFNBSV9GU19GSVJTVEJJVDsKICAgfQogCiAgIC8qIEZyYW1lIGRlZmluaXRpb24gKi8KLSAgc3dpdGNoKGRhdGFzaXplKQorICBzd2l0Y2ggKGRhdGFzaXplKQogICB7Ci0gIGNhc2UgU0FJX1BST1RPQ09MX0RBVEFTSVpFXzE2QklUOgotICAgIGhzYWktPkluaXQuRGF0YVNpemUgPSBTQUlfREFUQVNJWkVfMTY7Ci0gICAgaHNhaS0+RnJhbWVJbml0LkZyYW1lTGVuZ3RoID0gMzJVKihuYnNsb3QvMlUpOwotICAgIGhzYWktPkZyYW1lSW5pdC5BY3RpdmVGcmFtZUxlbmd0aCA9IDE2VSoobmJzbG90LzJVKTsKLSAgICBoc2FpLT5TbG90SW5pdC5TbG90U2l6ZSA9IFNBSV9TTE9UU0laRV8xNkI7Ci0gICAgYnJlYWs7Ci0gIGNhc2UgU0FJX1BST1RPQ09MX0RBVEFTSVpFXzE2QklURVhURU5ERUQgOgotICAgIGhzYWktPkluaXQuRGF0YVNpemUgPSBTQUlfREFUQVNJWkVfMTY7Ci0gICAgaHNhaS0+RnJhbWVJbml0LkZyYW1lTGVuZ3RoID0gNjRVKihuYnNsb3QvMlUpOwotICAgIGhzYWktPkZyYW1lSW5pdC5BY3RpdmVGcmFtZUxlbmd0aCA9IDMyVSoobmJzbG90LzJVKTsKLSAgICBoc2FpLT5TbG90SW5pdC5TbG90U2l6ZSA9IFNBSV9TTE9UU0laRV8zMkI7Ci0gICAgYnJlYWs7Ci0gIGNhc2UgU0FJX1BST1RPQ09MX0RBVEFTSVpFXzI0QklUOgotICAgIGhzYWktPkluaXQuRGF0YVNpemUgPSBTQUlfREFUQVNJWkVfMjQ7Ci0gICAgaHNhaS0+RnJhbWVJbml0LkZyYW1lTGVuZ3RoID0gNjRVKihuYnNsb3QvMlUpOwotICAgIGhzYWktPkZyYW1lSW5pdC5BY3RpdmVGcmFtZUxlbmd0aCA9IDMyVSoobmJzbG90LzJVKTsKLSAgICBoc2FpLT5TbG90SW5pdC5TbG90U2l6ZSA9IFNBSV9TTE9UU0laRV8zMkI7Ci0gICAgYnJlYWs7Ci0gIGNhc2UgU0FJX1BST1RPQ09MX0RBVEFTSVpFXzMyQklUOgotICAgIGhzYWktPkluaXQuRGF0YVNpemUgPSBTQUlfREFUQVNJWkVfMzI7Ci0gICAgaHNhaS0+RnJhbWVJbml0LkZyYW1lTGVuZ3RoID0gNjRVKihuYnNsb3QvMlUpOwotICAgIGhzYWktPkZyYW1lSW5pdC5BY3RpdmVGcmFtZUxlbmd0aCA9IDMyVSoobmJzbG90LzJVKTsKLSAgICBoc2FpLT5TbG90SW5pdC5TbG90U2l6ZSA9IFNBSV9TTE9UU0laRV8zMkI7Ci0gICAgYnJlYWs7Ci0gIGRlZmF1bHQgOgotICAgIHJldHVybiBIQUxfRVJST1I7CisgICAgY2FzZSBTQUlfUFJPVE9DT0xfREFUQVNJWkVfMTZCSVQ6CisgICAgICBoc2FpLT5Jbml0LkRhdGFTaXplID0gU0FJX0RBVEFTSVpFXzE2OworICAgICAgaHNhaS0+RnJhbWVJbml0LkZyYW1lTGVuZ3RoID0gMzJVICogKG5ic2xvdCAvIDJVKTsKKyAgICAgIGhzYWktPkZyYW1lSW5pdC5BY3RpdmVGcmFtZUxlbmd0aCA9IDE2VSAqIChuYnNsb3QgLyAyVSk7CisgICAgICBoc2FpLT5TbG90SW5pdC5TbG90U2l6ZSA9IFNBSV9TTE9UU0laRV8xNkI7CisgICAgICBicmVhazsKKyAgICBjYXNlIFNBSV9QUk9UT0NPTF9EQVRBU0laRV8xNkJJVEVYVEVOREVEIDoKKyAgICAgIGhzYWktPkluaXQuRGF0YVNpemUgPSBTQUlfREFUQVNJWkVfMTY7CisgICAgICBoc2FpLT5GcmFtZUluaXQuRnJhbWVMZW5ndGggPSA2NFUgKiAobmJzbG90IC8gMlUpOworICAgICAgaHNhaS0+RnJhbWVJbml0LkFjdGl2ZUZyYW1lTGVuZ3RoID0gMzJVICogKG5ic2xvdCAvIDJVKTsKKyAgICAgIGhzYWktPlNsb3RJbml0LlNsb3RTaXplID0gU0FJX1NMT1RTSVpFXzMyQjsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgU0FJX1BST1RPQ09MX0RBVEFTSVpFXzI0QklUOgorICAgICAgaHNhaS0+SW5pdC5EYXRhU2l6ZSA9IFNBSV9EQVRBU0laRV8yNDsKKyAgICAgIGhzYWktPkZyYW1lSW5pdC5GcmFtZUxlbmd0aCA9IDY0VSAqIChuYnNsb3QgLyAyVSk7CisgICAgICBoc2FpLT5GcmFtZUluaXQuQWN0aXZlRnJhbWVMZW5ndGggPSAzMlUgKiAobmJzbG90IC8gMlUpOworICAgICAgaHNhaS0+U2xvdEluaXQuU2xvdFNpemUgPSBTQUlfU0xPVFNJWkVfMzJCOworICAgICAgYnJlYWs7CisgICAgY2FzZSBTQUlfUFJPVE9DT0xfREFUQVNJWkVfMzJCSVQ6CisgICAgICBoc2FpLT5Jbml0LkRhdGFTaXplID0gU0FJX0RBVEFTSVpFXzMyOworICAgICAgaHNhaS0+RnJhbWVJbml0LkZyYW1lTGVuZ3RoID0gNjRVICogKG5ic2xvdCAvIDJVKTsKKyAgICAgIGhzYWktPkZyYW1lSW5pdC5BY3RpdmVGcmFtZUxlbmd0aCA9IDMyVSAqIChuYnNsb3QgLyAyVSk7CisgICAgICBoc2FpLT5TbG90SW5pdC5TbG90U2l6ZSA9IFNBSV9TTE9UU0laRV8zMkI7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0IDoKKyAgICAgIHJldHVybiBIQUxfRVJST1I7CiAgIH0KLSAgaWYocHJvdG9jb2wgPT0gU0FJX0kyU19MU0JKVVNUSUZJRUQpCisgIGlmIChwcm90b2NvbCA9PSBTQUlfSTJTX0xTQkpVU1RJRklFRCkKICAgewogICAgIGlmIChkYXRhc2l6ZSA9PSBTQUlfUFJPVE9DT0xfREFUQVNJWkVfMTZCSVRFWFRFTkRFRCkKICAgICB7CkBAIC0yMDE5LDEyICsyMDQ3LDE0IEBACiAgIGhzYWktPkluaXQuUHJvdG9jb2wgICAgICAgICAgICA9IFNBSV9GUkVFX1BST1RPQ09MOwogICBoc2FpLT5Jbml0LkZpcnN0Qml0ICAgICAgICAgICAgPSBTQUlfRklSU1RCSVRfTVNCOwogICAvKiBDb21wdXRlIENsb2NrU3Ryb2JpbmcgYWNjb3JkaW5nIEF1ZGlvTW9kZSAqLwotICBpZigoaHNhaS0+SW5pdC5BdWRpb01vZGUgPT0gU0FJX01PREVNQVNURVJfVFgpIHx8IChoc2FpLT5Jbml0LkF1ZGlvTW9kZSA9PSBTQUlfTU9ERVNMQVZFX1RYKSkKLSAgeyAvKiBUcmFuc21pdCAqLworICBpZiAoKGhzYWktPkluaXQuQXVkaW9Nb2RlID09IFNBSV9NT0RFTUFTVEVSX1RYKSB8fCAoaHNhaS0+SW5pdC5BdWRpb01vZGUgPT0gU0FJX01PREVTTEFWRV9UWCkpCisgIHsKKyAgICAvKiBUcmFuc21pdCAqLwogICAgIGhzYWktPkluaXQuQ2xvY2tTdHJvYmluZyAgICAgPSBTQUlfQ0xPQ0tTVFJPQklOR19SSVNJTkdFREdFOwogICB9CiAgIGVsc2UKLSAgeyAvKiBSZWNlaXZlICovCisgIHsKKyAgICAvKiBSZWNlaXZlICovCiAgICAgaHNhaS0+SW5pdC5DbG9ja1N0cm9iaW5nICAgICA9IFNBSV9DTE9DS1NUUk9CSU5HX0ZBTExJTkdFREdFOwogICB9CiAgIGhzYWktPkZyYW1lSW5pdC5GU0RlZmluaXRpb24gICA9IFNBSV9GU19TVEFSVEZSQU1FOwpAQCAtMjA0NCwzMCArMjA3NCwzMCBAQAogICAgIGhzYWktPkZyYW1lSW5pdC5BY3RpdmVGcmFtZUxlbmd0aCA9IDEzOwogICB9CiAKLSAgc3dpdGNoKGRhdGFzaXplKQorICBzd2l0Y2ggKGRhdGFzaXplKQogICB7Ci0gIGNhc2UgU0FJX1BST1RPQ09MX0RBVEFTSVpFXzE2QklUOgotICAgIGhzYWktPkluaXQuRGF0YVNpemUgPSBTQUlfREFUQVNJWkVfMTY7Ci0gICAgaHNhaS0+RnJhbWVJbml0LkZyYW1lTGVuZ3RoID0gMTZVICogbmJzbG90OwotICAgIGhzYWktPlNsb3RJbml0LlNsb3RTaXplID0gU0FJX1NMT1RTSVpFXzE2QjsKLSAgICBicmVhazsKLSAgY2FzZSBTQUlfUFJPVE9DT0xfREFUQVNJWkVfMTZCSVRFWFRFTkRFRCA6Ci0gICAgaHNhaS0+SW5pdC5EYXRhU2l6ZSA9IFNBSV9EQVRBU0laRV8xNjsKLSAgICBoc2FpLT5GcmFtZUluaXQuRnJhbWVMZW5ndGggPSAzMlUgKiBuYnNsb3Q7Ci0gICAgaHNhaS0+U2xvdEluaXQuU2xvdFNpemUgPSBTQUlfU0xPVFNJWkVfMzJCOwotICAgIGJyZWFrOwotICBjYXNlIFNBSV9QUk9UT0NPTF9EQVRBU0laRV8yNEJJVCA6Ci0gICAgaHNhaS0+SW5pdC5EYXRhU2l6ZSA9IFNBSV9EQVRBU0laRV8yNDsKLSAgICBoc2FpLT5GcmFtZUluaXQuRnJhbWVMZW5ndGggPSAzMlUgKiBuYnNsb3Q7Ci0gICAgaHNhaS0+U2xvdEluaXQuU2xvdFNpemUgPSBTQUlfU0xPVFNJWkVfMzJCOwotICAgIGJyZWFrOwotICBjYXNlIFNBSV9QUk9UT0NPTF9EQVRBU0laRV8zMkJJVDoKLSAgICBoc2FpLT5Jbml0LkRhdGFTaXplID0gU0FJX0RBVEFTSVpFXzMyOwotICAgIGhzYWktPkZyYW1lSW5pdC5GcmFtZUxlbmd0aCA9IDMyVSAqIG5ic2xvdDsKLSAgICBoc2FpLT5TbG90SW5pdC5TbG90U2l6ZSA9IFNBSV9TTE9UU0laRV8zMkI7Ci0gICAgYnJlYWs7Ci0gIGRlZmF1bHQgOgotICAgIHJldHVybiBIQUxfRVJST1I7CisgICAgY2FzZSBTQUlfUFJPVE9DT0xfREFUQVNJWkVfMTZCSVQ6CisgICAgICBoc2FpLT5Jbml0LkRhdGFTaXplID0gU0FJX0RBVEFTSVpFXzE2OworICAgICAgaHNhaS0+RnJhbWVJbml0LkZyYW1lTGVuZ3RoID0gMTZVICogbmJzbG90OworICAgICAgaHNhaS0+U2xvdEluaXQuU2xvdFNpemUgPSBTQUlfU0xPVFNJWkVfMTZCOworICAgICAgYnJlYWs7CisgICAgY2FzZSBTQUlfUFJPVE9DT0xfREFUQVNJWkVfMTZCSVRFWFRFTkRFRCA6CisgICAgICBoc2FpLT5Jbml0LkRhdGFTaXplID0gU0FJX0RBVEFTSVpFXzE2OworICAgICAgaHNhaS0+RnJhbWVJbml0LkZyYW1lTGVuZ3RoID0gMzJVICogbmJzbG90OworICAgICAgaHNhaS0+U2xvdEluaXQuU2xvdFNpemUgPSBTQUlfU0xPVFNJWkVfMzJCOworICAgICAgYnJlYWs7CisgICAgY2FzZSBTQUlfUFJPVE9DT0xfREFUQVNJWkVfMjRCSVQgOgorICAgICAgaHNhaS0+SW5pdC5EYXRhU2l6ZSA9IFNBSV9EQVRBU0laRV8yNDsKKyAgICAgIGhzYWktPkZyYW1lSW5pdC5GcmFtZUxlbmd0aCA9IDMyVSAqIG5ic2xvdDsKKyAgICAgIGhzYWktPlNsb3RJbml0LlNsb3RTaXplID0gU0FJX1NMT1RTSVpFXzMyQjsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgU0FJX1BST1RPQ09MX0RBVEFTSVpFXzMyQklUOgorICAgICAgaHNhaS0+SW5pdC5EYXRhU2l6ZSA9IFNBSV9EQVRBU0laRV8zMjsKKyAgICAgIGhzYWktPkZyYW1lSW5pdC5GcmFtZUxlbmd0aCA9IDMyVSAqIG5ic2xvdDsKKyAgICAgIGhzYWktPlNsb3RJbml0LlNsb3RTaXplID0gU0FJX1NMT1RTSVpFXzMyQjsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQgOgorICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgfQogCiAgIHJldHVybiBIQUxfT0s7CkBAIC0yMDgyLDIxICsyMTEyLDIxIEBACiBzdGF0aWMgdm9pZCBTQUlfRmlsbEZpZm8oU0FJX0hhbmRsZVR5cGVEZWYgKmhzYWkpCiB7CiAgIC8qIGZpbGwgdGhlIGZpZm8gd2l0aCBkYXRhIGJlZm9yZSB0byBlbmFibGVkIHRoZSBTQUkgKi8KLSAgd2hpbGUoKChoc2FpLT5JbnN0YW5jZS0+U1IgJiBTQUlfeFNSX0ZMVkwpICE9IFNBSV9GSUZPU1RBVFVTX0ZVTEwpICYmIChoc2FpLT5YZmVyQ291bnQgPiAwVSkpCisgIHdoaWxlICgoKGhzYWktPkluc3RhbmNlLT5TUiAmIFNBSV94U1JfRkxWTCkgIT0gU0FJX0ZJRk9TVEFUVVNfRlVMTCkgJiYgKGhzYWktPlhmZXJDb3VudCA+IDBVKSkKICAgewotICAgIGlmKChoc2FpLT5Jbml0LkRhdGFTaXplID09IFNBSV9EQVRBU0laRV84KSAmJiAoaHNhaS0+SW5pdC5Db21wYW5kaW5nTW9kZSA9PSBTQUlfTk9DT01QQU5ESU5HKSkKKyAgICBpZiAoKGhzYWktPkluaXQuRGF0YVNpemUgPT0gU0FJX0RBVEFTSVpFXzgpICYmIChoc2FpLT5Jbml0LkNvbXBhbmRpbmdNb2RlID09IFNBSV9OT0NPTVBBTkRJTkcpKQogICAgIHsKICAgICAgIGhzYWktPkluc3RhbmNlLT5EUiA9ICgqaHNhaS0+cEJ1ZmZQdHIrKyk7CiAgICAgfQotICAgIGVsc2UgaWYoaHNhaS0+SW5pdC5EYXRhU2l6ZSA8PSBTQUlfREFUQVNJWkVfMTYpCisgICAgZWxzZSBpZiAoaHNhaS0+SW5pdC5EYXRhU2l6ZSA8PSBTQUlfREFUQVNJWkVfMTYpCiAgICAgewogICAgICAgaHNhaS0+SW5zdGFuY2UtPkRSID0gKigodWludDMyX3QgKiloc2FpLT5wQnVmZlB0cik7Ci0gICAgICBoc2FpLT5wQnVmZlB0cis9IDJVOworICAgICAgaHNhaS0+cEJ1ZmZQdHIgKz0gMlU7CiAgICAgfQogICAgIGVsc2UKICAgICB7CiAgICAgICBoc2FpLT5JbnN0YW5jZS0+RFIgPSAqKCh1aW50MzJfdCAqKWhzYWktPnBCdWZmUHRyKTsKLSAgICAgIGhzYWktPnBCdWZmUHRyKz0gNFU7CisgICAgICBoc2FpLT5wQnVmZlB0ciArPSA0VTsKICAgICB9CiAgICAgaHNhaS0+WGZlckNvdW50LS07CiAgIH0KQEAgLTIxMTMsMjUgKzIxNDMsMjUgQEAKIHsKICAgdWludDMyX3QgdG1wSVQgPSBTQUlfSVRfT1ZSVURSOwogCi0gIGlmKG1vZGUgPT0gU0FJX01PREVfSVQpCisgIGlmIChtb2RlID09IFNBSV9NT0RFX0lUKQogICB7Ci0gICAgdG1wSVR8PSBTQUlfSVRfRlJFUTsKKyAgICB0bXBJVCB8PSBTQUlfSVRfRlJFUTsKICAgfQogCi0gIGlmKChoc2FpLT5Jbml0LlByb3RvY29sID09IFNBSV9BQzk3X1BST1RPQ09MKSAmJgotICAgICgoaHNhaS0+SW5pdC5BdWRpb01vZGUgPT0gU0FJX01PREVTTEFWRV9SWCkgfHwgKGhzYWktPkluaXQuQXVkaW9Nb2RlID09IFNBSV9NT0RFTUFTVEVSX1JYKSkpCisgIGlmICgoaHNhaS0+SW5pdC5Qcm90b2NvbCA9PSBTQUlfQUM5N19QUk9UT0NPTCkgJiYKKyAgICAgICgoaHNhaS0+SW5pdC5BdWRpb01vZGUgPT0gU0FJX01PREVTTEFWRV9SWCkgfHwgKGhzYWktPkluaXQuQXVkaW9Nb2RlID09IFNBSV9NT0RFTUFTVEVSX1JYKSkpCiAgIHsKLSAgICB0bXBJVHw9IFNBSV9JVF9DTlJEWTsKKyAgICB0bXBJVCB8PSBTQUlfSVRfQ05SRFk7CiAgIH0KIAotICBpZigoaHNhaS0+SW5pdC5BdWRpb01vZGUgPT0gU0FJX01PREVTTEFWRV9SWCkgfHwgKGhzYWktPkluaXQuQXVkaW9Nb2RlID09IFNBSV9NT0RFU0xBVkVfVFgpKQorICBpZiAoKGhzYWktPkluaXQuQXVkaW9Nb2RlID09IFNBSV9NT0RFU0xBVkVfUlgpIHx8IChoc2FpLT5Jbml0LkF1ZGlvTW9kZSA9PSBTQUlfTU9ERVNMQVZFX1RYKSkKICAgewotICAgIHRtcElUfD0gU0FJX0lUX0FGU0RFVCB8IFNBSV9JVF9MRlNERVQ7CisgICAgdG1wSVQgfD0gU0FJX0lUX0FGU0RFVCB8IFNBSV9JVF9MRlNERVQ7CiAgIH0KICAgZWxzZQogICB7CiAgICAgLyogaHNhaSBoYXMgYmVlbiBjb25maWd1cmVkIGluIG1hc3RlciBtb2RlICovCi0gICAgdG1wSVR8PSBTQUlfSVRfV0NLQ0ZHOworICAgIHRtcElUIHw9IFNBSV9JVF9XQ0tDRkc7CiAgIH0KICAgcmV0dXJuIHRtcElUOwogfQpAQCAtMjE0NCw3ICsyMTc0LDcgQEAKICAgKi8KIHN0YXRpYyBIQUxfU3RhdHVzVHlwZURlZiBTQUlfRGlzYWJsZShTQUlfSGFuZGxlVHlwZURlZiAqaHNhaSkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgY291bnQgPSBTQUlfREVGQVVMVF9USU1FT1VUICogKFN5c3RlbUNvcmVDbG9jayAvN1UvMTAwMFUpOworICB1aW50MzJfdCBjb3VudCA9IFNBSV9ERUZBVUxUX1RJTUVPVVQgKiAoU3lzdGVtQ29yZUNsb2NrIC8gN1UgLyAxMDAwVSk7CiAgIEhBTF9TdGF0dXNUeXBlRGVmIHN0YXR1cyA9IEhBTF9PSzsKIAogICAvKiBEaXNhYmxlIHRoZSBTQUkgaW5zdGFuY2UgKi8KQEAgLTIxNjAsNyArMjE5MCw4IEBACiAgICAgICBzdGF0dXMgPSBIQUxfVElNRU9VVDsKICAgICAgIGJyZWFrOwogICAgIH0KLSAgfSB3aGlsZSgoaHNhaS0+SW5zdGFuY2UtPkNSMSAmIFNBSV94Q1IxX1NBSUVOKSAhPSBSRVNFVCk7CisgIH0KKyAgd2hpbGUgKChoc2FpLT5JbnN0YW5jZS0+Q1IxICYgU0FJX3hDUjFfU0FJRU4pICE9IFJFU0VUKTsKIAogICByZXR1cm4gc3RhdHVzOwogfQpAQCAtMjE3Myw3ICsyMjA0LDcgQEAKICAgKi8KIHN0YXRpYyB2b2lkIFNBSV9UcmFuc21pdF9JVDhCaXQoU0FJX0hhbmRsZVR5cGVEZWYgKmhzYWkpCiB7Ci0gIGlmKGhzYWktPlhmZXJDb3VudCA9PSAwVSkKKyAgaWYgKGhzYWktPlhmZXJDb3VudCA9PSAwVSkKICAgewogICAgIC8qIEhhbmRsZSB0aGUgZW5kIG9mIHRoZSB0cmFuc21pc3Npb24gKi8KICAgICAvKiBEaXNhYmxlIEZSRVEgYW5kIE9WUlVEUiBpbnRlcnJ1cHRzICovCkBAIC0yMjAxLDcgKzIyMzIsNyBAQAogICAqLwogc3RhdGljIHZvaWQgU0FJX1RyYW5zbWl0X0lUMTZCaXQoU0FJX0hhbmRsZVR5cGVEZWYgKmhzYWkpCiB7Ci0gIGlmKGhzYWktPlhmZXJDb3VudCA9PSAwVSkKKyAgaWYgKGhzYWktPlhmZXJDb3VudCA9PSAwVSkKICAgewogICAgIC8qIEhhbmRsZSB0aGUgZW5kIG9mIHRoZSB0cmFuc21pc3Npb24gKi8KICAgICAvKiBEaXNhYmxlIEZSRVEgYW5kIE9WUlVEUiBpbnRlcnJ1cHRzICovCkBAIC0yMjE3LDcgKzIyNDgsNyBAQAogICB7CiAgICAgLyogV3JpdGUgZGF0YSBvbiBEUiByZWdpc3RlciAqLwogICAgIGhzYWktPkluc3RhbmNlLT5EUiA9ICoodWludDE2X3QgKiloc2FpLT5wQnVmZlB0cjsKLSAgICBoc2FpLT5wQnVmZlB0cis9MlU7CisgICAgaHNhaS0+cEJ1ZmZQdHIgKz0gMlU7CiAgICAgaHNhaS0+WGZlckNvdW50LS07CiAgIH0KIH0KQEAgLTIyMzAsNyArMjI2MSw3IEBACiAgICovCiBzdGF0aWMgdm9pZCBTQUlfVHJhbnNtaXRfSVQzMkJpdChTQUlfSGFuZGxlVHlwZURlZiAqaHNhaSkKIHsKLSAgaWYoaHNhaS0+WGZlckNvdW50ID09IDBVKQorICBpZiAoaHNhaS0+WGZlckNvdW50ID09IDBVKQogICB7CiAgICAgLyogSGFuZGxlIHRoZSBlbmQgb2YgdGhlIHRyYW5zbWlzc2lvbiAqLwogICAgIC8qIERpc2FibGUgRlJFUSBhbmQgT1ZSVURSIGludGVycnVwdHMgKi8KQEAgLTIyNDYsNyArMjI3Nyw3IEBACiAgIHsKICAgICAvKiBXcml0ZSBkYXRhIG9uIERSIHJlZ2lzdGVyICovCiAgICAgaHNhaS0+SW5zdGFuY2UtPkRSID0gKih1aW50MzJfdCAqKWhzYWktPnBCdWZmUHRyOwotICAgIGhzYWktPnBCdWZmUHRyKz00VTsKKyAgICBoc2FpLT5wQnVmZlB0ciArPSA0VTsKICAgICBoc2FpLT5YZmVyQ291bnQtLTsKICAgfQogfQpAQCAtMjI2NCw3ICsyMjk1LDcgQEAKICAgaHNhaS0+WGZlckNvdW50LS07CiAKICAgLyogQ2hlY2sgZW5kIG9mIHRoZSB0cmFuc2ZlciAqLwotICBpZihoc2FpLT5YZmVyQ291bnQgPT0gMFUpCisgIGlmIChoc2FpLT5YZmVyQ291bnQgPT0gMFUpCiAgIHsKICAgICAvKiBEaXNhYmxlIFRYRSBhbmQgT1ZSVURSIGludGVycnVwdHMgKi8KICAgICBfX0hBTF9TQUlfRElTQUJMRV9JVChoc2FpLCBTQUlfSW50ZXJydXB0RmxhZyhoc2FpLCBTQUlfTU9ERV9JVCkpOwpAQCAtMjI5MCwxMiArMjMyMSwxMiBAQAogc3RhdGljIHZvaWQgU0FJX1JlY2VpdmVfSVQxNkJpdChTQUlfSGFuZGxlVHlwZURlZiAqaHNhaSkKIHsKICAgLyogUmVjZWl2ZSBkYXRhICovCi0gICoodWludDE2X3QqKWhzYWktPnBCdWZmUHRyID0gaHNhaS0+SW5zdGFuY2UtPkRSOwotICBoc2FpLT5wQnVmZlB0cis9MlU7CisgICoodWludDE2X3QgKiloc2FpLT5wQnVmZlB0ciA9IGhzYWktPkluc3RhbmNlLT5EUjsKKyAgaHNhaS0+cEJ1ZmZQdHIgKz0gMlU7CiAgIGhzYWktPlhmZXJDb3VudC0tOwogCiAgIC8qIENoZWNrIGVuZCBvZiB0aGUgdHJhbnNmZXIgKi8KLSAgaWYoaHNhaS0+WGZlckNvdW50ID09IDBVKQorICBpZiAoaHNhaS0+WGZlckNvdW50ID09IDBVKQogICB7CiAgICAgLyogRGlzYWJsZSBUWEUgYW5kIE9WUlVEUiBpbnRlcnJ1cHRzICovCiAgICAgX19IQUxfU0FJX0RJU0FCTEVfSVQoaHNhaSwgU0FJX0ludGVycnVwdEZsYWcoaHNhaSwgU0FJX01PREVfSVQpKTsKQEAgLTIzMjEsMTIgKzIzNTIsMTIgQEAKIHN0YXRpYyB2b2lkIFNBSV9SZWNlaXZlX0lUMzJCaXQoU0FJX0hhbmRsZVR5cGVEZWYgKmhzYWkpCiB7CiAgIC8qIFJlY2VpdmUgZGF0YSAqLwotICAqKHVpbnQzMl90Kiloc2FpLT5wQnVmZlB0ciA9IGhzYWktPkluc3RhbmNlLT5EUjsKLSAgaHNhaS0+cEJ1ZmZQdHIrPTRVOworICAqKHVpbnQzMl90ICopaHNhaS0+cEJ1ZmZQdHIgPSBoc2FpLT5JbnN0YW5jZS0+RFI7CisgIGhzYWktPnBCdWZmUHRyICs9IDRVOwogICBoc2FpLT5YZmVyQ291bnQtLTsKIAogICAvKiBDaGVjayBlbmQgb2YgdGhlIHRyYW5zZmVyICovCi0gIGlmKGhzYWktPlhmZXJDb3VudCA9PSAwVSkKKyAgaWYgKGhzYWktPlhmZXJDb3VudCA9PSAwVSkKICAgewogICAgIC8qIERpc2FibGUgVFhFIGFuZCBPVlJVRFIgaW50ZXJydXB0cyAqLwogICAgIF9fSEFMX1NBSV9ESVNBQkxFX0lUKGhzYWksIFNBSV9JbnRlcnJ1cHRGbGFnKGhzYWksIFNBSV9NT0RFX0lUKSk7CkBAIC0yMzUxLDcgKzIzODIsNyBAQAogICAqLwogc3RhdGljIHZvaWQgU0FJX0RNQVR4Q3BsdChETUFfSGFuZGxlVHlwZURlZiAqaGRtYSkKIHsKLSAgU0FJX0hhbmRsZVR5cGVEZWYqIGhzYWkgPSAoU0FJX0hhbmRsZVR5cGVEZWYqKSgoRE1BX0hhbmRsZVR5cGVEZWYqICloZG1hKS0+UGFyZW50OworICBTQUlfSGFuZGxlVHlwZURlZiAqaHNhaSA9IChTQUlfSGFuZGxlVHlwZURlZiAqKSgoRE1BX0hhbmRsZVR5cGVEZWYgKiloZG1hKS0+UGFyZW50OwogCiAgIGlmIChoZG1hLT5Jbml0Lk1vZGUgIT0gRE1BX0NJUkNVTEFSKQogICB7CkBAIC0yMzYzLDcgKzIzOTQsNyBAQAogICAgIC8qIFN0b3AgdGhlIGludGVycnVwdHMgZXJyb3IgaGFuZGxpbmcgKi8KICAgICBfX0hBTF9TQUlfRElTQUJMRV9JVChoc2FpLCBTQUlfSW50ZXJydXB0RmxhZyhoc2FpLCBTQUlfTU9ERV9ETUEpKTsKIAotICAgIGhzYWktPlN0YXRlPSBIQUxfU0FJX1NUQVRFX1JFQURZOworICAgIGhzYWktPlN0YXRlID0gSEFMX1NBSV9TVEFURV9SRUFEWTsKICAgfQogI2lmIChVU0VfSEFMX1NBSV9SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkKICAgaHNhaS0+VHhDcGx0Q2FsbGJhY2soaHNhaSk7CkBAIC0yMzgwLDcgKzI0MTEsNyBAQAogICAqLwogc3RhdGljIHZvaWQgU0FJX0RNQVR4SGFsZkNwbHQoRE1BX0hhbmRsZVR5cGVEZWYgKmhkbWEpCiB7Ci0gIFNBSV9IYW5kbGVUeXBlRGVmKiBoc2FpID0gKFNBSV9IYW5kbGVUeXBlRGVmKikoKERNQV9IYW5kbGVUeXBlRGVmKiloZG1hKS0+UGFyZW50OworICBTQUlfSGFuZGxlVHlwZURlZiAqaHNhaSA9IChTQUlfSGFuZGxlVHlwZURlZiAqKSgoRE1BX0hhbmRsZVR5cGVEZWYgKiloZG1hKS0+UGFyZW50OwogCiAjaWYgKFVTRV9IQUxfU0FJX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxKQogICBoc2FpLT5UeEhhbGZDcGx0Q2FsbGJhY2soaHNhaSk7CkBAIC0yMzk3LDcgKzI0MjgsNyBAQAogICAqLwogc3RhdGljIHZvaWQgU0FJX0RNQVJ4Q3BsdChETUFfSGFuZGxlVHlwZURlZiAqaGRtYSkKIHsKLSAgU0FJX0hhbmRsZVR5cGVEZWYqIGhzYWkgPSAoIFNBSV9IYW5kbGVUeXBlRGVmKiApKChETUFfSGFuZGxlVHlwZURlZiogKWhkbWEpLT5QYXJlbnQ7CisgIFNBSV9IYW5kbGVUeXBlRGVmICpoc2FpID0gKFNBSV9IYW5kbGVUeXBlRGVmICopKChETUFfSGFuZGxlVHlwZURlZiAqKWhkbWEpLT5QYXJlbnQ7CiAKICAgaWYgKGhkbWEtPkluaXQuTW9kZSAhPSBETUFfQ0lSQ1VMQVIpCiAgIHsKQEAgLTI0MjUsNyArMjQ1Niw3IEBACiAgICovCiBzdGF0aWMgdm9pZCBTQUlfRE1BUnhIYWxmQ3BsdChETUFfSGFuZGxlVHlwZURlZiAqaGRtYSkKIHsKLSAgU0FJX0hhbmRsZVR5cGVEZWYqIGhzYWkgPSAoU0FJX0hhbmRsZVR5cGVEZWYqKSgoRE1BX0hhbmRsZVR5cGVEZWYqKWhkbWEpLT5QYXJlbnQ7CisgIFNBSV9IYW5kbGVUeXBlRGVmICpoc2FpID0gKFNBSV9IYW5kbGVUeXBlRGVmICopKChETUFfSGFuZGxlVHlwZURlZiAqKWhkbWEpLT5QYXJlbnQ7CiAKICNpZiAoVVNFX0hBTF9TQUlfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCiAgIGhzYWktPlJ4SGFsZkNwbHRDYWxsYmFjayhoc2FpKTsKQEAgLTI0NDIsMTIgKzI0NzMsMTIgQEAKICAgKi8KIHN0YXRpYyB2b2lkIFNBSV9ETUFFcnJvcihETUFfSGFuZGxlVHlwZURlZiAqaGRtYSkKIHsKLSAgU0FJX0hhbmRsZVR5cGVEZWYqIGhzYWkgPSAoIFNBSV9IYW5kbGVUeXBlRGVmKiApKChETUFfSGFuZGxlVHlwZURlZiogKWhkbWEpLT5QYXJlbnQ7CisgIFNBSV9IYW5kbGVUeXBlRGVmICpoc2FpID0gKFNBSV9IYW5kbGVUeXBlRGVmICopKChETUFfSGFuZGxlVHlwZURlZiAqKWhkbWEpLT5QYXJlbnQ7CiAKICAgLyogU2V0IFNBSSBlcnJvciBjb2RlICovCiAgIGhzYWktPkVycm9yQ29kZSB8PSBIQUxfU0FJX0VSUk9SX0RNQTsKIAotICBpZigoaHNhaS0+aGRtYXR4LT5FcnJvckNvZGUgPT0gSEFMX0RNQV9FUlJPUl9URSkgfHwgKGhzYWktPmhkbWFyeC0+RXJyb3JDb2RlID09IEhBTF9ETUFfRVJST1JfVEUpKQorICBpZiAoKGhzYWktPmhkbWF0eC0+RXJyb3JDb2RlID09IEhBTF9ETUFfRVJST1JfVEUpIHx8IChoc2FpLT5oZG1hcngtPkVycm9yQ29kZSA9PSBIQUxfRE1BX0VSUk9SX1RFKSkKICAgewogICAgIC8qIERpc2FibGUgdGhlIFNBSSBETUEgcmVxdWVzdCAqLwogICAgIGhzYWktPkluc3RhbmNlLT5DUjEgJj0gflNBSV94Q1IxX0RNQUVOOwpAQCAtMjQ3Nyw3ICsyNTA4LDcgQEAKICAgKi8KIHN0YXRpYyB2b2lkIFNBSV9ETUFBYm9ydChETUFfSGFuZGxlVHlwZURlZiAqaGRtYSkKIHsKLSAgU0FJX0hhbmRsZVR5cGVEZWYqIGhzYWkgPSAoIFNBSV9IYW5kbGVUeXBlRGVmKiApKChETUFfSGFuZGxlVHlwZURlZiogKWhkbWEpLT5QYXJlbnQ7CisgIFNBSV9IYW5kbGVUeXBlRGVmICpoc2FpID0gKFNBSV9IYW5kbGVUeXBlRGVmICopKChETUFfSGFuZGxlVHlwZURlZiAqKWhkbWEpLT5QYXJlbnQ7CiAKICAgLyogRGlzYWJsZSBETUEgcmVxdWVzdCAqLwogICBoc2FpLT5JbnN0YW5jZS0+Q1IxICY9IH5TQUlfeENSMV9ETUFFTjsKQEAgLTI0ODYsNyArMjUxNyw3IEBACiAgIGhzYWktPkluc3RhbmNlLT5JTVIgPSAwVTsKICAgaHNhaS0+SW5zdGFuY2UtPkNMUkZSID0gMHhGRkZGRkZGRlU7CiAKLSAgaWYoaHNhaS0+RXJyb3JDb2RlICE9IEhBTF9TQUlfRVJST1JfV0NLQ0ZHKQorICBpZiAoaHNhaS0+RXJyb3JDb2RlICE9IEhBTF9TQUlfRVJST1JfV0NLQ0ZHKQogICB7CiAgICAgLyogRGlzYWJsZSBTQUkgcGVyaXBoZXJhbCAqLwogICAgIFNBSV9EaXNhYmxlKGhzYWkpOwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjR4eF9oYWxfc2FpX2V4LmMgYi9TcmMvc3RtMzJmNHh4X2hhbF9zYWlfZXguYwppbmRleCBkMmU0NDgzLi4xMjBhMjc3IDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmNHh4X2hhbF9zYWlfZXguYworKysgYi9TcmMvc3RtMzJmNHh4X2hhbF9zYWlfZXguYwpAQCAtMywyNCArMywyNCBAQAogICAqIEBmaWxlICAgIHN0bTMyZjR4eF9oYWxfc2FpX2V4LmMKICAgKiBAYXV0aG9yICBNQ0QgQXBwbGljYXRpb24gVGVhbQogICAqIEBicmllZiAgIFNBSSBFeHRlbnNpb24gSEFMIG1vZHVsZSBkcml2ZXIuCi0gICogICAgICAgICAgVGhpcyBmaWxlIHByb3ZpZGVzIGZpcm13YXJlIGZ1bmN0aW9ucyB0byBtYW5hZ2UgdGhlIGZvbGxvd2luZyAKKyAgKiAgICAgICAgICBUaGlzIGZpbGUgcHJvdmlkZXMgZmlybXdhcmUgZnVuY3Rpb25zIHRvIG1hbmFnZSB0aGUgZm9sbG93aW5nCiAgICogICAgICAgICAgZnVuY3Rpb25hbGl0aWVzIG9mIFNBSSBleHRlbnNpb24gcGVyaXBoZXJhbDoKICAgKiAgICAgICAgICAgKyBFeHRlbnNpb24gZmVhdHVyZXMgZnVuY3Rpb25zCi0gICogICAgICAgICAKKyAgKgogICBAdmVyYmF0aW0KICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgICAgICAgICAjIyMjIyBTQUkgcGVyaXBoZXJhbCBleHRlbnNpb24gZmVhdHVyZXMgICMjIyMjCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICAgICAgICAKLSAgWy4uXSBDb21wYXJpbmcgdG8gb3RoZXIgcHJldmlvdXMgZGV2aWNlcywgdGhlIFNBSSBpbnRlcmZhY2UgZm9yIFNUTTMyRjQ0Nnh4IAorCisgIFsuLl0gQ29tcGFyaW5nIHRvIG90aGVyIHByZXZpb3VzIGRldmljZXMsIHRoZSBTQUkgaW50ZXJmYWNlIGZvciBTVE0zMkY0NDZ4eAogICAgICAgIGRldmljZXMgY29udGFpbnMgdGhlIGZvbGxvd2luZyBhZGRpdGlvbmFsIGZlYXR1cmVzIDoKLSAgICAgICAKKwogICAgICAgICgrKSBQb3NzaWJpbGl0eSB0byBiZSBjbG9ja2VkIGZyb20gUExMUgotICAgCisKICAgICAgICAgICAgICAgICAgICAgICMjIyMjIEhvdyB0byB1c2UgdGhpcyBkcml2ZXIgIyMjIyMKICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIFsuLl0gVGhpcyBkcml2ZXIgcHJvdmlkZXMgZnVuY3Rpb25zIHRvIG1hbmFnZSBzZXZlcmFsIHNvdXJjZXMgdG8gY2xvY2sgU0FJCi0gIAorCiAgIEBlbmR2ZXJiYXRpbQogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKiBAYXR0ZW50aW9uCkBAIC0zNCw3ICszNCw3IEBACiAgICogICAgICAgICAgICAgICAgICAgICAgICBvcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2UKICAgKgogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgKi8gCisgICovCiAKIC8qIEluY2x1ZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAjaW5jbHVkZSAic3RtMzJmNHh4X2hhbC5oIgpAQCAtNjUsMjQgKzY1LDI0IEBACiAvKiogQGRlZmdyb3VwIFNBSV9Qcml2YXRlX0Z1bmN0aW9ucyAgU0FJIFByaXZhdGUgRnVuY3Rpb25zCiAgICogQHsKICAgKi8KLSAvKioKLSAgKiBAfQotICAqLwotICAKKy8qKgorICogQH0KKyAqLworCiAvKiBFeHBvcnRlZCBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyoqIEBkZWZncm91cCBTQUlFeF9FeHBvcnRlZF9GdW5jdGlvbnMgU0FJIEV4dGVuZGVkIEV4cG9ydGVkIEZ1bmN0aW9ucwogICAqIEB7CiAgICovCiAKLS8qKiBAZGVmZ3JvdXAgU0FJRXhfRXhwb3J0ZWRfRnVuY3Rpb25zX0dyb3VwMSBFeHRlbnNpb24gZmVhdHVyZXMgZnVuY3Rpb25zIAorLyoqIEBkZWZncm91cCBTQUlFeF9FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXAxIEV4dGVuc2lvbiBmZWF0dXJlcyBmdW5jdGlvbnMKICAgKiAgQGJyaWVmICAgRXh0ZW5zaW9uIGZlYXR1cmVzIGZ1bmN0aW9ucwogICAqCi1AdmVyYmF0aW0gICAgCitAdmVyYmF0aW0KICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgICAgICAgICAgICAgICAgICMjIyMjIEV4dGVuc2lvbiBmZWF0dXJlcyBGdW5jdGlvbnMgIyMjIyMKICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgWy4uXQotICAgIFRoaXMgc3Vic2VjdGlvbiBwcm92aWRlcyBhIHNldCBvZiBmdW5jdGlvbnMgYWxsb3dpbmcgdG8gbWFuYWdlIHRoZSBwb3NzaWJsZSAKKyAgICBUaGlzIHN1YnNlY3Rpb24gcHJvdmlkZXMgYSBzZXQgb2YgZnVuY3Rpb25zIGFsbG93aW5nIHRvIG1hbmFnZSB0aGUgcG9zc2libGUKICAgICBTQUkgY2xvY2sgc291cmNlcy4KIAogQGVuZHZlcmJhdGltCkBAIC05Miw0MSArOTIsNDEgQEAKIC8qKgogICAqIEBicmllZiAgQ29uZmlndXJlIFNBSSBCbG9jayBzeW5jaHJvbml6YXRpb24gbW9kZQogICAqIEBwYXJhbSAgaHNhaSBwb2ludGVyIHRvIGEgU0FJX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKLSAgKiAgICAgICAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciBTQUkgbW9kdWxlLiAgIAotICAqIEByZXR2YWwgU0FJIENsb2NrIElucHV0IAorICAqICAgICAgICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIFNBSSBtb2R1bGUuCisgICogQHJldHZhbCBTQUkgQ2xvY2sgSW5wdXQKICAgKi8KIHZvaWQgU0FJX0Jsb2NrU3luY2hyb0NvbmZpZyhTQUlfSGFuZGxlVHlwZURlZiAqaHNhaSkKIHsKICAgdWludDMyX3QgdG1wcmVnaXN0ZXJHQ1I7CiAKLSNpZiBkZWZpbmVkKFNUTTMyRjQ0Nnh4KSAgCisjaWYgZGVmaW5lZChTVE0zMkY0NDZ4eCkKICAgLyogVGhpcyBzZXR0aW5nIG11c3QgYmUgZG9uZSB3aXRoIGJvdGggYXVkaW8gYmxvY2sgKEEgJiBCKSBkaXNhYmxlZCAgICAgICAgICovCi0gIHN3aXRjaChoc2FpLT5Jbml0LlN5bmNocm9FeHQpCisgIHN3aXRjaCAoaHNhaS0+SW5pdC5TeW5jaHJvRXh0KQogICB7Ci0gIGNhc2UgU0FJX1NZTkNFWFRfRElTQUJMRSA6Ci0gICAgdG1wcmVnaXN0ZXJHQ1IgPSAwVTsKLSAgICBicmVhazsKLSAgY2FzZSBTQUlfU1lOQ0VYVF9PVVRCTE9DS0FfRU5BQkxFIDoKLSAgICB0bXByZWdpc3RlckdDUiA9IFNBSV9HQ1JfU1lOQ09VVF8wOwotICAgIGJyZWFrOwotICBjYXNlIFNBSV9TWU5DRVhUX09VVEJMT0NLQl9FTkFCTEUgOgotICAgIHRtcHJlZ2lzdGVyR0NSID0gU0FJX0dDUl9TWU5DT1VUXzE7Ci0gICAgYnJlYWs7Ci0gIGRlZmF1bHQ6Ci0gICAgdG1wcmVnaXN0ZXJHQ1IgPSAwVTsKLSAgICBicmVhazsKKyAgICBjYXNlIFNBSV9TWU5DRVhUX0RJU0FCTEUgOgorICAgICAgdG1wcmVnaXN0ZXJHQ1IgPSAwVTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgU0FJX1NZTkNFWFRfT1VUQkxPQ0tBX0VOQUJMRSA6CisgICAgICB0bXByZWdpc3RlckdDUiA9IFNBSV9HQ1JfU1lOQ09VVF8wOworICAgICAgYnJlYWs7CisgICAgY2FzZSBTQUlfU1lOQ0VYVF9PVVRCTE9DS0JfRU5BQkxFIDoKKyAgICAgIHRtcHJlZ2lzdGVyR0NSID0gU0FJX0dDUl9TWU5DT1VUXzE7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgdG1wcmVnaXN0ZXJHQ1IgPSAwVTsKKyAgICAgIGJyZWFrOwogICB9CiAKLSAgaWYoKGhzYWktPkluaXQuU3luY2hybykgPT0gU0FJX1NZTkNIUk9OT1VTX0VYVF9TQUkyKQorICBpZiAoKGhzYWktPkluaXQuU3luY2hybykgPT0gU0FJX1NZTkNIUk9OT1VTX0VYVF9TQUkyKQogICB7CiAgICAgdG1wcmVnaXN0ZXJHQ1IgfD0gU0FJX0dDUl9TWU5DSU5fMDsKICAgfQogCi0gIGlmKChoc2FpLT5JbnN0YW5jZSA9PSBTQUkxX0Jsb2NrX0EpIHx8IChoc2FpLT5JbnN0YW5jZSA9PSBTQUkxX0Jsb2NrX0IpKQorICBpZiAoKGhzYWktPkluc3RhbmNlID09IFNBSTFfQmxvY2tfQSkgfHwgKGhzYWktPkluc3RhbmNlID09IFNBSTFfQmxvY2tfQikpCiAgIHsKICAgICBTQUkxLT5HQ1IgPSB0bXByZWdpc3RlckdDUjsKICAgfQotICBlbHNlIAorICBlbHNlCiAgIHsKICAgICBTQUkyLT5HQ1IgPSB0bXByZWdpc3RlckdDUjsKICAgfQpAQCAtMTM0LDM1ICsxMzQsMzUgQEAKICNpZiBkZWZpbmVkKFNUTTMyRjQyN3h4KSB8fCBkZWZpbmVkKFNUTTMyRjQzN3h4KSB8fCBkZWZpbmVkKFNUTTMyRjQyOXh4KSB8fCBkZWZpbmVkKFNUTTMyRjQzOXh4KSB8fCBcCiAgICAgZGVmaW5lZChTVE0zMkY0Njl4eCkgfHwgZGVmaW5lZChTVE0zMkY0Nzl4eCkgfHwgZGVmaW5lZChTVE0zMkY0MTN4eCkgfHwgZGVmaW5lZChTVE0zMkY0MjN4eCkKICAgLyogVGhpcyBzZXR0aW5nIG11c3QgYmUgZG9uZSB3aXRoIGJvdGggYXVkaW8gYmxvY2sgKEEgJiBCKSBkaXNhYmxlZCAgICAgICAgICovCi0gIHN3aXRjaChoc2FpLT5Jbml0LlN5bmNocm9FeHQpCisgIHN3aXRjaCAoaHNhaS0+SW5pdC5TeW5jaHJvRXh0KQogICB7Ci0gIGNhc2UgU0FJX1NZTkNFWFRfRElTQUJMRSA6Ci0gICAgdG1wcmVnaXN0ZXJHQ1IgPSAwVTsKLSAgICBicmVhazsKLSAgY2FzZSBTQUlfU1lOQ0VYVF9PVVRCTE9DS0FfRU5BQkxFIDoKLSAgICB0bXByZWdpc3RlckdDUiA9IFNBSV9HQ1JfU1lOQ09VVF8wOwotICAgIGJyZWFrOwotICBjYXNlIFNBSV9TWU5DRVhUX09VVEJMT0NLQl9FTkFCTEUgOgotICAgIHRtcHJlZ2lzdGVyR0NSID0gU0FJX0dDUl9TWU5DT1VUXzE7Ci0gICAgYnJlYWs7Ci0gIGRlZmF1bHQ6Ci0gICAgdG1wcmVnaXN0ZXJHQ1IgPSAwVTsKLSAgICBicmVhazsKKyAgICBjYXNlIFNBSV9TWU5DRVhUX0RJU0FCTEUgOgorICAgICAgdG1wcmVnaXN0ZXJHQ1IgPSAwVTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgU0FJX1NZTkNFWFRfT1VUQkxPQ0tBX0VOQUJMRSA6CisgICAgICB0bXByZWdpc3RlckdDUiA9IFNBSV9HQ1JfU1lOQ09VVF8wOworICAgICAgYnJlYWs7CisgICAgY2FzZSBTQUlfU1lOQ0VYVF9PVVRCTE9DS0JfRU5BQkxFIDoKKyAgICAgIHRtcHJlZ2lzdGVyR0NSID0gU0FJX0dDUl9TWU5DT1VUXzE7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgdG1wcmVnaXN0ZXJHQ1IgPSAwVTsKKyAgICAgIGJyZWFrOwogICB9CiAgIFNBSTEtPkdDUiA9IHRtcHJlZ2lzdGVyR0NSOwotI2VuZGlmIC8qIFNUTTMyRjQyN3h4IHx8IFNUTTMyRjQzN3h4IHx8IFNUTTMyRjQyOXh4IHx8IFNUTTMyRjQzOXh4IHx8IFNUTTMyRjQ2OXh4IHx8IFNUTTMyRjQ3OXh4IHx8IFNUTTMyRjQxM3h4IHx8IFNUTTMyRjQyM3h4ICovIAorI2VuZGlmIC8qIFNUTTMyRjQyN3h4IHx8IFNUTTMyRjQzN3h4IHx8IFNUTTMyRjQyOXh4IHx8IFNUTTMyRjQzOXh4IHx8IFNUTTMyRjQ2OXh4IHx8IFNUTTMyRjQ3OXh4IHx8IFNUTTMyRjQxM3h4IHx8IFNUTTMyRjQyM3h4ICovCiB9Ci0gIC8qKgotICAqIEBicmllZiAgR2V0IFNBSSBJbnB1dCBDbG9jayBiYXNlZCBvbiBTQUkgc291cmNlIGNsb2NrIHNlbGVjdGlvbgotICAqIEBwYXJhbSAgaHNhaSBwb2ludGVyIHRvIGEgU0FJX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKLSAgKiAgICAgICAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciBTQUkgbW9kdWxlLiAgIAotICAqIEByZXR2YWwgU0FJIENsb2NrIElucHV0IAotICAqLwotdWludDMyX3QgU0FJX0dldElucHV0Q2xvY2soU0FJX0hhbmRsZVR5cGVEZWYgKmhzYWkpICAgCisvKioKKyogQGJyaWVmICBHZXQgU0FJIElucHV0IENsb2NrIGJhc2VkIG9uIFNBSSBzb3VyY2UgY2xvY2sgc2VsZWN0aW9uCisqIEBwYXJhbSAgaHNhaSBwb2ludGVyIHRvIGEgU0FJX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKKyogICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgU0FJIG1vZHVsZS4KKyogQHJldHZhbCBTQUkgQ2xvY2sgSW5wdXQKKyovCit1aW50MzJfdCBTQUlfR2V0SW5wdXRDbG9jayhTQUlfSGFuZGxlVHlwZURlZiAqaHNhaSkKIHsKICAgLyogVGhpcyB2YXJpYWJsZSB1c2VkIHRvIHN0b3JlIHRoZSBTQUlfQ0tfeCAodmFsdWUgaW4gSHopICovCiAgIHVpbnQzMl90IHNhaWNsb2Nrc291cmNlID0gMFU7Ci0gIAorCiAjaWYgZGVmaW5lZChTVE0zMkY0NDZ4eCkKICAgaWYgKChoc2FpLT5JbnN0YW5jZSA9PSBTQUkxX0Jsb2NrX0EpIHx8IChoc2FpLT5JbnN0YW5jZSA9PSBTQUkxX0Jsb2NrX0IpKQogICB7CkBAIC0xNzAsMTggKzE3MCwxOCBAQAogICB9CiAgIGVsc2UgLyogU0FJMl9CbG9ja19BIHx8IFNBSTJfQmxvY2tfQiovCiAgIHsKLSAgICBzYWljbG9ja3NvdXJjZSA9IEhBTF9SQ0NFeF9HZXRQZXJpcGhDTEtGcmVxKFJDQ19QRVJJUEhDTEtfU0FJMik7IAorICAgIHNhaWNsb2Nrc291cmNlID0gSEFMX1JDQ0V4X0dldFBlcmlwaENMS0ZyZXEoUkNDX1BFUklQSENMS19TQUkyKTsKICAgfQogI2VuZGlmIC8qIFNUTTMyRjQ0Nnh4ICovCiAjaWYgZGVmaW5lZChTVE0zMkY0Mjd4eCkgfHwgZGVmaW5lZChTVE0zMkY0Mzd4eCkgfHwgZGVmaW5lZChTVE0zMkY0Mjl4eCkgfHwgZGVmaW5lZChTVE0zMkY0Mzl4eCkgfHwgXAogICBkZWZpbmVkKFNUTTMyRjQ2OXh4KSB8fCBkZWZpbmVkKFNUTTMyRjQ3OXh4KSB8fCBkZWZpbmVkKFNUTTMyRjQxM3h4KSB8fCBkZWZpbmVkKFNUTTMyRjQyM3h4KQogICB1aW50MzJfdCB2Y29pbnB1dCA9IDBVLCB0bXByZWcgPSAwVTsKLSAgCisKICAgLyogQ2hlY2sgdGhlIFNBSSBCbG9jayBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19TQUlfQ0xLX1NPVVJDRShoc2FpLT5Jbml0LkNsb2NrU291cmNlKSk7Ci0gCisKICAgLyogU0FJIEJsb2NrIGNsb2NrIHNvdXJjZSBzZWxlY3Rpb24gKi8KLSAgaWYoaHNhaS0+SW5zdGFuY2UgPT0gU0FJMV9CbG9ja19BKQorICBpZiAoaHNhaS0+SW5zdGFuY2UgPT0gU0FJMV9CbG9ja19BKQogICB7CiAgICAgX19IQUxfUkNDX1NBSV9CTE9DS0FDTEtTT1VSQ0VfQ09ORklHKGhzYWktPkluaXQuQ2xvY2tTb3VyY2UpOwogICB9CkBAIC0xODksOSArMTg5LDkgQEAKICAgewogICAgIF9fSEFMX1JDQ19TQUlfQkxPQ0tCQ0xLU09VUkNFX0NPTkZJRygodWludDMyX3QpKGhzYWktPkluaXQuQ2xvY2tTb3VyY2UgPDwgMlUpKTsKICAgfQotICAKKwogICAvKiBWQ08gSW5wdXQgQ2xvY2sgdmFsdWUgY2FsY3VsYXRpb24gKi8KLSAgaWYoKFJDQy0+UExMQ0ZHUiAmIFJDQ19QTExDRkdSX1BMTFNSQykgPT0gUkNDX1BMTFNPVVJDRV9IU0kpCisgIGlmICgoUkNDLT5QTExDRkdSICYgUkNDX1BMTENGR1JfUExMU1JDKSA9PSBSQ0NfUExMU09VUkNFX0hTSSkKICAgewogICAgIC8qIEluIENhc2UgdGhlIFBMTCBTb3VyY2UgaXMgSFNJIChJbnRlcm5hbCBDbG9jaykgKi8KICAgICB2Y29pbnB1dCA9IChIU0lfVkFMVUUgLyAodWludDMyX3QpKFJDQy0+UExMQ0ZHUiAmIFJDQ19QTExDRkdSX1BMTE0pKTsKQEAgLTIwMiwzOCArMjAyLDM4IEBACiAgICAgdmNvaW5wdXQgPSAoKEhTRV9WQUxVRSAvICh1aW50MzJfdCkoUkNDLT5QTExDRkdSICYgUkNDX1BMTENGR1JfUExMTSkpKTsKICAgfQogI2lmIGRlZmluZWQoU1RNMzJGNDEzeHgpIHx8IGRlZmluZWQoU1RNMzJGNDIzeHgpCi0gLyogU0FJX0NMS194IDogU0FJIEJsb2NrIENsb2NrIGNvbmZpZ3VyYXRpb24gZm9yIGRpZmZlcmVudCBjbG9jayBzb3VyY2VzIHNlbGVjdGVkICovCi0gIGlmKGhzYWktPkluaXQuQ2xvY2tTb3VyY2UgPT0gU0FJX0NMS1NPVVJDRV9QTExSKQorICAvKiBTQUlfQ0xLX3ggOiBTQUkgQmxvY2sgQ2xvY2sgY29uZmlndXJhdGlvbiBmb3IgZGlmZmVyZW50IGNsb2NrIHNvdXJjZXMgc2VsZWN0ZWQgKi8KKyAgaWYgKGhzYWktPkluaXQuQ2xvY2tTb3VyY2UgPT0gU0FJX0NMS1NPVVJDRV9QTExSKQogICB7CiAgICAgLyogQ29uZmlndXJlIHRoZSBQTExJMlMgZGl2aXNpb24gZmFjdG9yICovCiAgICAgLyogUExMX1ZDTyBJbnB1dCAgPSBQTExfU09VUkNFL1BMTE0gKi8KICAgICAvKiBQTExfVkNPIE91dHB1dCA9IFBMTF9WQ08gSW5wdXQgKiBQTExOICovCiAgICAgLyogU0FJX0NMSyhmaXJzdCBsZXZlbCkgPSBQTExfVkNPIE91dHB1dC9QTExSICovCiAgICAgdG1wcmVnID0gKFJDQy0+UExMQ0ZHUiAmIFJDQ19QTExDRkdSX1BMTFIpID4+IDI4VTsKLSAgICBzYWljbG9ja3NvdXJjZSA9ICh2Y29pbnB1dCAqICgoUkNDLT5QTExDRkdSICYgUkNDX1BMTENGR1JfUExMTikgPj4gNlUpKS8odG1wcmVnKTsKKyAgICBzYWljbG9ja3NvdXJjZSA9ICh2Y29pbnB1dCAqICgoUkNDLT5QTExDRkdSICYgUkNDX1BMTENGR1JfUExMTikgPj4gNlUpKSAvICh0bXByZWcpOwogCiAgICAgLyogU0FJX0NMS194ID0gU0FJX0NMSyhmaXJzdCBsZXZlbCkvUExMRElWUiAqLwogICAgIHRtcHJlZyA9ICgoKFJDQy0+RENLQ0ZHUiAmIFJDQ19EQ0tDRkdSX1BMTERJVlIpID4+IDhVKSArIDFVKTsKLSAgICAgIAotICAgIHNhaWNsb2Nrc291cmNlID0gc2FpY2xvY2tzb3VyY2UvKHRtcHJlZyk7IAorCisgICAgc2FpY2xvY2tzb3VyY2UgPSBzYWljbG9ja3NvdXJjZSAvICh0bXByZWcpOwogCiAgIH0KLSAgZWxzZSBpZihoc2FpLT5Jbml0LkNsb2NrU291cmNlID09IFNBSV9DTEtTT1VSQ0VfUExMSTJTKQotICB7ICAgICAgICAKKyAgZWxzZSBpZiAoaHNhaS0+SW5pdC5DbG9ja1NvdXJjZSA9PSBTQUlfQ0xLU09VUkNFX1BMTEkyUykKKyAgewogICAgIC8qIENvbmZpZ3VyZSB0aGUgUExMSTJTIGRpdmlzaW9uIGZhY3RvciAqLwogICAgIC8qIFBMTEkyU19WQ08gSW5wdXQgID0gUExMX1NPVVJDRS9QTExNICovCiAgICAgLyogUExMSTJTX1ZDTyBPdXRwdXQgPSBQTExJMlNfVkNPIElucHV0ICogUExMSTJTTiAqLwogICAgIC8qIFNBSV9DTEsoZmlyc3QgbGV2ZWwpID0gUExMSTJTX1ZDTyBPdXRwdXQvUExMSTJTUiAqLwogICAgIHRtcHJlZyA9IChSQ0MtPlBMTEkyU0NGR1IgJiBSQ0NfUExMSTJTQ0ZHUl9QTExJMlNSKSA+PiAyOFU7Ci0gICAgc2FpY2xvY2tzb3VyY2UgPSAodmNvaW5wdXQgKiAoKFJDQy0+UExMSTJTQ0ZHUiAmIFJDQ19QTExJMlNDRkdSX1BMTEkyU04pID4+IDZVKSkvKHRtcHJlZyk7Ci0gICAgCisgICAgc2FpY2xvY2tzb3VyY2UgPSAodmNvaW5wdXQgKiAoKFJDQy0+UExMSTJTQ0ZHUiAmIFJDQ19QTExJMlNDRkdSX1BMTEkyU04pID4+IDZVKSkgLyAodG1wcmVnKTsKKwogICAgIC8qIFNBSV9DTEtfeCA9IFNBSV9DTEsoZmlyc3QgbGV2ZWwpL1BMTEkyU0RJVlIgKi8KLSAgICB0bXByZWcgPSAoKFJDQy0+RENLQ0ZHUiAmIFJDQ19EQ0tDRkdSX1BMTEkyU0RJVlIpICsgMVUpOyAKLSAgICBzYWljbG9ja3NvdXJjZSA9IHNhaWNsb2Nrc291cmNlLyh0bXByZWcpOworICAgIHRtcHJlZyA9ICgoUkNDLT5EQ0tDRkdSICYgUkNDX0RDS0NGR1JfUExMSTJTRElWUikgKyAxVSk7CisgICAgc2FpY2xvY2tzb3VyY2UgPSBzYWljbG9ja3NvdXJjZSAvICh0bXByZWcpOwogICB9Ci0gIGVsc2UgaWYoaHNhaS0+SW5pdC5DbG9ja1NvdXJjZSA9PSBTQUlfQ0xLU09VUkNFX0hTKQorICBlbHNlIGlmIChoc2FpLT5Jbml0LkNsb2NrU291cmNlID09IFNBSV9DTEtTT1VSQ0VfSFMpCiAgIHsKLSAgICBpZigoUkNDLT5QTExDRkdSICYgUkNDX1BMTENGR1JfUExMU1JDKSA9PSBSQ0NfUExMU09VUkNFX0hTRSkKKyAgICBpZiAoKFJDQy0+UExMQ0ZHUiAmIFJDQ19QTExDRkdSX1BMTFNSQykgPT0gUkNDX1BMTFNPVVJDRV9IU0UpCiAgICAgewogICAgICAgLyogR2V0IHRoZSBJMlMgc291cmNlIGNsb2NrIHZhbHVlICovCiAgICAgICBzYWljbG9ja3NvdXJjZSA9ICh1aW50MzJfdCkoSFNFX1ZBTFVFKTsKQEAgLTI1MCw0MyArMjUwLDQzIEBACiAgIH0KICNlbHNlCiAgIC8qIFNBSV9DTEtfeCA6IFNBSSBCbG9jayBDbG9jayBjb25maWd1cmF0aW9uIGZvciBkaWZmZXJlbnQgY2xvY2sgc291cmNlcyBzZWxlY3RlZCAqLwotICBpZihoc2FpLT5Jbml0LkNsb2NrU291cmNlID09IFNBSV9DTEtTT1VSQ0VfUExMU0FJKQorICBpZiAoaHNhaS0+SW5pdC5DbG9ja1NvdXJjZSA9PSBTQUlfQ0xLU09VUkNFX1BMTFNBSSkKICAgewogICAgIC8qIENvbmZpZ3VyZSB0aGUgUExMSTJTIGRpdmlzaW9uIGZhY3RvciAqLwogICAgIC8qIFBMTFNBSV9WQ08gSW5wdXQgID0gUExMX1NPVVJDRS9QTExNICovCiAgICAgLyogUExMU0FJX1ZDTyBPdXRwdXQgPSBQTExTQUlfVkNPIElucHV0ICogUExMU0FJTiAqLwogICAgIC8qIFNBSV9DTEsoZmlyc3QgbGV2ZWwpID0gUExMU0FJX1ZDTyBPdXRwdXQvUExMU0FJUSAqLwogICAgIHRtcHJlZyA9IChSQ0MtPlBMTFNBSUNGR1IgJiBSQ0NfUExMU0FJQ0ZHUl9QTExTQUlRKSA+PiAyNFU7Ci0gICAgc2FpY2xvY2tzb3VyY2UgPSAodmNvaW5wdXQgKiAoKFJDQy0+UExMU0FJQ0ZHUiAmIFJDQ19QTExTQUlDRkdSX1BMTFNBSU4pID4+IDZVKSkvKHRtcHJlZyk7CisgICAgc2FpY2xvY2tzb3VyY2UgPSAodmNvaW5wdXQgKiAoKFJDQy0+UExMU0FJQ0ZHUiAmIFJDQ19QTExTQUlDRkdSX1BMTFNBSU4pID4+IDZVKSkgLyAodG1wcmVnKTsKIAogICAgIC8qIFNBSV9DTEtfeCA9IFNBSV9DTEsoZmlyc3QgbGV2ZWwpL1BMTFNBSURJVlEgKi8KICAgICB0bXByZWcgPSAoKChSQ0MtPkRDS0NGR1IgJiBSQ0NfRENLQ0ZHUl9QTExTQUlESVZRKSA+PiA4VSkgKyAxVSk7Ci0gICAgc2FpY2xvY2tzb3VyY2UgPSBzYWljbG9ja3NvdXJjZS8odG1wcmVnKTsgCisgICAgc2FpY2xvY2tzb3VyY2UgPSBzYWljbG9ja3NvdXJjZSAvICh0bXByZWcpOwogCiAgIH0KLSAgZWxzZSBpZihoc2FpLT5Jbml0LkNsb2NrU291cmNlID09IFNBSV9DTEtTT1VSQ0VfUExMSTJTKQotICB7ICAgICAgICAKKyAgZWxzZSBpZiAoaHNhaS0+SW5pdC5DbG9ja1NvdXJjZSA9PSBTQUlfQ0xLU09VUkNFX1BMTEkyUykKKyAgewogICAgIC8qIENvbmZpZ3VyZSB0aGUgUExMSTJTIGRpdmlzaW9uIGZhY3RvciAqLwogICAgIC8qIFBMTEkyU19WQ08gSW5wdXQgID0gUExMX1NPVVJDRS9QTExNICovCiAgICAgLyogUExMSTJTX1ZDTyBPdXRwdXQgPSBQTExJMlNfVkNPIElucHV0ICogUExMSTJTTiAqLwogICAgIC8qIFNBSV9DTEsoZmlyc3QgbGV2ZWwpID0gUExMSTJTX1ZDTyBPdXRwdXQvUExMSTJTUSAqLwogICAgIHRtcHJlZyA9IChSQ0MtPlBMTEkyU0NGR1IgJiBSQ0NfUExMSTJTQ0ZHUl9QTExJMlNRKSA+PiAyNFU7Ci0gICAgc2FpY2xvY2tzb3VyY2UgPSAodmNvaW5wdXQgKiAoKFJDQy0+UExMSTJTQ0ZHUiAmIFJDQ19QTExJMlNDRkdSX1BMTEkyU04pID4+IDZVKSkvKHRtcHJlZyk7Ci0gICAgCisgICAgc2FpY2xvY2tzb3VyY2UgPSAodmNvaW5wdXQgKiAoKFJDQy0+UExMSTJTQ0ZHUiAmIFJDQ19QTExJMlNDRkdSX1BMTEkyU04pID4+IDZVKSkgLyAodG1wcmVnKTsKKwogICAgIC8qIFNBSV9DTEtfeCA9IFNBSV9DTEsoZmlyc3QgbGV2ZWwpL1BMTEkyU0RJVlEgKi8KLSAgICB0bXByZWcgPSAoKFJDQy0+RENLQ0ZHUiAmIFJDQ19EQ0tDRkdSX1BMTEkyU0RJVlEpICsgMVUpOyAKLSAgICBzYWljbG9ja3NvdXJjZSA9IHNhaWNsb2Nrc291cmNlLyh0bXByZWcpOworICAgIHRtcHJlZyA9ICgoUkNDLT5EQ0tDRkdSICYgUkNDX0RDS0NGR1JfUExMSTJTRElWUSkgKyAxVSk7CisgICAgc2FpY2xvY2tzb3VyY2UgPSBzYWljbG9ja3NvdXJjZSAvICh0bXByZWcpOwogICB9CiAgIGVsc2UgLyogc0NvbmZpZy0+Q2xvY2tTb3VyY2UgPT0gU0FJX0NMS1NvdXJjZV9FeHQgKi8KICAgewogICAgIC8qIEVuYWJsZSB0aGUgRXh0ZXJuYWwgQ2xvY2sgc2VsZWN0aW9uICovCiAgICAgX19IQUxfUkNDX0kyU19DT05GSUcoUkNDX0kyU0NMS1NPVVJDRV9FWFQpOwotICAgIAorCiAgICAgc2FpY2xvY2tzb3VyY2UgPSBFWFRFUk5BTF9DTE9DS19WQUxVRTsKICAgfQotI2VuZGlmIC8qIFNUTTMyRjQxM3h4IHx8IFNUTTMyRjQyM3h4ICovICAKKyNlbmRpZiAvKiBTVE0zMkY0MTN4eCB8fCBTVE0zMkY0MjN4eCAqLwogI2VuZGlmIC8qIFNUTTMyRjQyN3h4IHx8IFNUTTMyRjQzN3h4IHx8IFNUTTMyRjQyOXh4IHx8IFNUTTMyRjQzOXh4IHx8IFNUTTMyRjQ2OXh4IHx8IFNUTTMyRjQ3OXh4IHx8IFNUTTMyRjQxM3h4IHx8IFNUTTMyRjQyM3h4ICovCi0gICAgICAgLyogdGhlIHJldHVybiByZXN1bHQgaXMgdGhlIHZhbHVlIG9mIFNBSSBjbG9jayAqLworICAvKiB0aGUgcmV0dXJuIHJlc3VsdCBpcyB0aGUgdmFsdWUgb2YgU0FJIGNsb2NrICovCiAgIHJldHVybiBzYWljbG9ja3NvdXJjZTsKIH0KIApkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjR4eF9oYWxfc2QuYyBiL1NyYy9zdG0zMmY0eHhfaGFsX3NkLmMKaW5kZXggZDJhODhkNy4uZWEzNmZlYiAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZjR4eF9oYWxfc2QuYworKysgYi9TcmMvc3RtMzJmNHh4X2hhbF9zZC5jCkBAIC00NDgsNiArNDQ4LDE3IEBACiAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgfQogCisgIC8qIFNldCBCbG9jayBTaXplIGZvciBDYXJkICovCisgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRCbG9ja0xlbmd0aChoc2QtPkluc3RhbmNlLCBCTE9DS1NJWkUpOworICBpZihlcnJvcnN0YXRlICE9IEhBTF9TRF9FUlJPUl9OT05FKQorICB7CisgICAgLyogQ2xlYXIgYWxsIHRoZSBzdGF0aWMgZmxhZ3MgKi8KKyAgICBfX0hBTF9TRF9DTEVBUl9GTEFHKGhzZCwgU0RJT19TVEFUSUNfRkxBR1MpOworICAgIGhzZC0+RXJyb3JDb2RlIHw9IGVycm9yc3RhdGU7CisgICAgaHNkLT5TdGF0ZSA9IEhBTF9TRF9TVEFURV9SRUFEWTsKKyAgICByZXR1cm4gSEFMX0VSUk9SOworICB9CisKICAgcmV0dXJuIEhBTF9PSzsKIH0KIApAQCAtNTg4LDE3ICs1OTksNiBAQAogICAgICAgYWRkICo9IDUxMlU7CiAgICAgfQogCi0gICAgLyogU2V0IEJsb2NrIFNpemUgZm9yIENhcmQgKi8KLSAgICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kQmxvY2tMZW5ndGgoaHNkLT5JbnN0YW5jZSwgQkxPQ0tTSVpFKTsKLSAgICBpZihlcnJvcnN0YXRlICE9IEhBTF9TRF9FUlJPUl9OT05FKQotICAgIHsKLSAgICAgIC8qIENsZWFyIGFsbCB0aGUgc3RhdGljIGZsYWdzICovCi0gICAgICBfX0hBTF9TRF9DTEVBUl9GTEFHKGhzZCwgU0RJT19TVEFUSUNfRkxBR1MpOwotICAgICAgaHNkLT5FcnJvckNvZGUgfD0gZXJyb3JzdGF0ZTsKLSAgICAgIGhzZC0+U3RhdGUgPSBIQUxfU0RfU1RBVEVfUkVBRFk7Ci0gICAgICByZXR1cm4gSEFMX0VSUk9SOwotICAgIH0KLQogICAgIC8qIENvbmZpZ3VyZSB0aGUgU0QgRFBTTSAoRGF0YSBQYXRoIFN0YXRlIE1hY2hpbmUpICovCiAgICAgY29uZmlnLkRhdGFUaW1lT3V0ICAgPSBTRE1NQ19EQVRBVElNRU9VVDsKICAgICBjb25maWcuRGF0YUxlbmd0aCAgICA9IE51bWJlck9mQmxvY2tzICogQkxPQ0tTSVpFOwpAQCAtODE0LDE3ICs4MTQsNiBAQAogICAgICAgYWRkICo9IDUxMlU7CiAgICAgfQogCi0gICAgLyogU2V0IEJsb2NrIFNpemUgZm9yIENhcmQgKi8KLSAgICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kQmxvY2tMZW5ndGgoaHNkLT5JbnN0YW5jZSwgQkxPQ0tTSVpFKTsKLSAgICBpZihlcnJvcnN0YXRlICE9IEhBTF9TRF9FUlJPUl9OT05FKQotICAgIHsKLSAgICAgIC8qIENsZWFyIGFsbCB0aGUgc3RhdGljIGZsYWdzICovCi0gICAgICBfX0hBTF9TRF9DTEVBUl9GTEFHKGhzZCwgU0RJT19TVEFUSUNfRkxBR1MpOwotICAgICAgaHNkLT5FcnJvckNvZGUgfD0gZXJyb3JzdGF0ZTsKLSAgICAgIGhzZC0+U3RhdGUgPSBIQUxfU0RfU1RBVEVfUkVBRFk7Ci0gICAgICByZXR1cm4gSEFMX0VSUk9SOwotICAgIH0KLQogICAgIC8qIENvbmZpZ3VyZSB0aGUgU0QgRFBTTSAoRGF0YSBQYXRoIFN0YXRlIE1hY2hpbmUpICovCiAgICAgY29uZmlnLkRhdGFUaW1lT3V0ICAgPSBTRE1NQ19EQVRBVElNRU9VVDsKICAgICBjb25maWcuRGF0YUxlbmd0aCAgICA9IE51bWJlck9mQmxvY2tzICogQkxPQ0tTSVpFOwpAQCAtMTAxOSwxNyArMTAwOCw2IEBACiAgICAgICBhZGQgKj0gNTEyVTsKICAgICB9CiAKLSAgICAvKiBTZXQgQmxvY2sgU2l6ZSBmb3IgQ2FyZCAqLwotICAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRCbG9ja0xlbmd0aChoc2QtPkluc3RhbmNlLCBCTE9DS1NJWkUpOwotICAgIGlmKGVycm9yc3RhdGUgIT0gSEFMX1NEX0VSUk9SX05PTkUpCi0gICAgewotICAgICAgLyogQ2xlYXIgYWxsIHRoZSBzdGF0aWMgZmxhZ3MgKi8KLSAgICAgIF9fSEFMX1NEX0NMRUFSX0ZMQUcoaHNkLCBTRElPX1NUQVRJQ19GTEFHUyk7Ci0gICAgICBoc2QtPkVycm9yQ29kZSB8PSBlcnJvcnN0YXRlOwotICAgICAgaHNkLT5TdGF0ZSA9IEhBTF9TRF9TVEFURV9SRUFEWTsKLSAgICAgIHJldHVybiBIQUxfRVJST1I7Ci0gICAgfQotCiAgICAgLyogQ29uZmlndXJlIHRoZSBTRCBEUFNNIChEYXRhIFBhdGggU3RhdGUgTWFjaGluZSkgKi8KICAgICBjb25maWcuRGF0YVRpbWVPdXQgICA9IFNETU1DX0RBVEFUSU1FT1VUOwogICAgIGNvbmZpZy5EYXRhTGVuZ3RoICAgID0gQkxPQ0tTSVpFICogTnVtYmVyT2ZCbG9ja3M7CkBAIC0xMTI3LDE3ICsxMTA1LDYgQEAKICAgICAgIGFkZCAqPSA1MTJVOwogICAgIH0KIAotICAgIC8qIFNldCBCbG9jayBTaXplIGZvciBDYXJkICovCi0gICAgZXJyb3JzdGF0ZSA9IFNETU1DX0NtZEJsb2NrTGVuZ3RoKGhzZC0+SW5zdGFuY2UsIEJMT0NLU0laRSk7Ci0gICAgaWYoZXJyb3JzdGF0ZSAhPSBIQUxfU0RfRVJST1JfTk9ORSkKLSAgICB7Ci0gICAgICAvKiBDbGVhciBhbGwgdGhlIHN0YXRpYyBmbGFncyAqLwotICAgICAgX19IQUxfU0RfQ0xFQVJfRkxBRyhoc2QsIFNESU9fU1RBVElDX0ZMQUdTKTsKLSAgICAgIGhzZC0+RXJyb3JDb2RlIHw9IGVycm9yc3RhdGU7Ci0gICAgICBoc2QtPlN0YXRlID0gSEFMX1NEX1NUQVRFX1JFQURZOwotICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKLSAgICB9Ci0KICAgICAvKiBXcml0ZSBCbG9ja3MgaW4gUG9sbGluZyBtb2RlICovCiAgICAgaWYoTnVtYmVyT2ZCbG9ja3MgPiAxVSkKICAgICB7CkBAIC0xMjM1LDYgKzEyMDIsMTAgQEAKICAgICAvKiBTZXQgdGhlIERNQSBBYm9ydCBjYWxsYmFjayAqLwogICAgIGhzZC0+aGRtYXJ4LT5YZmVyQWJvcnRDYWxsYmFjayA9IE5VTEw7CiAKKyAgICAvKiBGb3JjZSBETUEgRGlyZWN0aW9uICovCisgICAgaHNkLT5oZG1hcngtPkluaXQuRGlyZWN0aW9uID0gRE1BX1BFUklQSF9UT19NRU1PUlk7CisgICAgTU9ESUZZX1JFRyhoc2QtPmhkbWFyeC0+SW5zdGFuY2UtPkNSLCBETUFfU3hDUl9ESVIsIGhzZC0+aGRtYXJ4LT5Jbml0LkRpcmVjdGlvbik7CisKICAgICAvKiBFbmFibGUgdGhlIERNQSBDaGFubmVsICovCiAgICAgaWYoSEFMX0RNQV9TdGFydF9JVChoc2QtPmhkbWFyeCwgKHVpbnQzMl90KSZoc2QtPkluc3RhbmNlLT5GSUZPLCAodWludDMyX3QpcERhdGEsICh1aW50MzJfdCkoQkxPQ0tTSVpFICogTnVtYmVyT2ZCbG9ja3MpLzRVKSAhPSBIQUxfT0spCiAgICAgewpAQCAtMTI1NCwxNyArMTIyNSw2IEBACiAgICAgICAgIGFkZCAqPSA1MTJVOwogICAgICAgfQogCi0gICAgICAvKiBTZXQgQmxvY2sgU2l6ZSBmb3IgQ2FyZCAqLwotICAgICAgZXJyb3JzdGF0ZSA9IFNETU1DX0NtZEJsb2NrTGVuZ3RoKGhzZC0+SW5zdGFuY2UsIEJMT0NLU0laRSk7Ci0gICAgICBpZihlcnJvcnN0YXRlICE9IEhBTF9TRF9FUlJPUl9OT05FKQotICAgICAgewotICAgICAgICAvKiBDbGVhciBhbGwgdGhlIHN0YXRpYyBmbGFncyAqLwotICAgICAgICBfX0hBTF9TRF9DTEVBUl9GTEFHKGhzZCwgU0RJT19TVEFUSUNfRkxBR1MpOwotICAgICAgICBoc2QtPkVycm9yQ29kZSB8PSBlcnJvcnN0YXRlOwotICAgICAgICBoc2QtPlN0YXRlID0gSEFMX1NEX1NUQVRFX1JFQURZOwotICAgICAgICByZXR1cm4gSEFMX0VSUk9SOwotICAgICAgfQotCiAgICAgICAvKiBDb25maWd1cmUgdGhlIFNEIERQU00gKERhdGEgUGF0aCBTdGF0ZSBNYWNoaW5lKSAqLwogICAgICAgY29uZmlnLkRhdGFUaW1lT3V0ICAgPSBTRE1NQ19EQVRBVElNRU9VVDsKICAgICAgIGNvbmZpZy5EYXRhTGVuZ3RoICAgID0gQkxPQ0tTSVpFICogTnVtYmVyT2ZCbG9ja3M7CkBAIC0xMzY5LDE3ICsxMzI5LDYgQEAKICAgICAgIGFkZCAqPSA1MTJVOwogICAgIH0KIAotICAgIC8qIFNldCBCbG9jayBTaXplIGZvciBDYXJkICovCi0gICAgZXJyb3JzdGF0ZSA9IFNETU1DX0NtZEJsb2NrTGVuZ3RoKGhzZC0+SW5zdGFuY2UsIEJMT0NLU0laRSk7Ci0gICAgaWYoZXJyb3JzdGF0ZSAhPSBIQUxfU0RfRVJST1JfTk9ORSkKLSAgICB7Ci0gICAgICAvKiBDbGVhciBhbGwgdGhlIHN0YXRpYyBmbGFncyAqLwotICAgICAgX19IQUxfU0RfQ0xFQVJfRkxBRyhoc2QsIFNESU9fU1RBVElDX0ZMQUdTKTsKLSAgICAgIGhzZC0+RXJyb3JDb2RlIHw9IGVycm9yc3RhdGU7Ci0gICAgICBoc2QtPlN0YXRlID0gSEFMX1NEX1NUQVRFX1JFQURZOwotICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKLSAgICB9Ci0KICAgICAvKiBXcml0ZSBCbG9ja3MgaW4gUG9sbGluZyBtb2RlICovCiAgICAgaWYoTnVtYmVyT2ZCbG9ja3MgPiAxVSkKICAgICB7CkBAIC0xNDA4LDYgKzEzNTcsMTAgQEAKICAgICAvKiBFbmFibGUgU0RJTyBETUEgdHJhbnNmZXIgKi8KICAgICBfX0hBTF9TRF9ETUFfRU5BQkxFKGhzZCk7CiAKKyAgICAvKiBGb3JjZSBETUEgRGlyZWN0aW9uICovCisgICAgaHNkLT5oZG1hdHgtPkluaXQuRGlyZWN0aW9uID0gRE1BX01FTU9SWV9UT19QRVJJUEg7CisgICAgTU9ESUZZX1JFRyhoc2QtPmhkbWF0eC0+SW5zdGFuY2UtPkNSLCBETUFfU3hDUl9ESVIsIGhzZC0+aGRtYXR4LT5Jbml0LkRpcmVjdGlvbik7CisKICAgICAvKiBFbmFibGUgdGhlIERNQSBDaGFubmVsICovCiAgICAgaWYoSEFMX0RNQV9TdGFydF9JVChoc2QtPmhkbWF0eCwgKHVpbnQzMl90KXBEYXRhLCAodWludDMyX3QpJmhzZC0+SW5zdGFuY2UtPkZJRk8sICh1aW50MzJfdCkoQkxPQ0tTSVpFICogTnVtYmVyT2ZCbG9ja3MpLzRVKSAhPSBIQUxfT0spCiAgICAgewpAQCAtMjE5Nyw2ICsyMTUwLDcgQEAKIHsKICAgdWludDMyX3Qgc2Rfc3RhdHVzWzE2XTsKICAgdWludDMyX3QgZXJyb3JzdGF0ZTsKKyAgSEFMX1N0YXR1c1R5cGVEZWYgc3RhdHVzID0gSEFMX09LOwogCiAgIGVycm9yc3RhdGUgPSBTRF9TZW5kU0RTdGF0dXMoaHNkLCBzZF9zdGF0dXMpOwogICBpZihlcnJvcnN0YXRlICE9IEhBTF9TRF9FUlJPUl9OT05FKQpAQCAtMjIwNSw3ICsyMTU5LDcgQEAKICAgICBfX0hBTF9TRF9DTEVBUl9GTEFHKGhzZCwgU0RJT19TVEFUSUNfRkxBR1MpOwogICAgIGhzZC0+RXJyb3JDb2RlIHw9IGVycm9yc3RhdGU7CiAgICAgaHNkLT5TdGF0ZSA9IEhBTF9TRF9TVEFURV9SRUFEWTsKLSAgICByZXR1cm4gSEFMX0VSUk9SOworICAgIHN0YXR1cyA9IEhBTF9FUlJPUjsKICAgfQogICBlbHNlCiAgIHsKQEAgLTIyMzEsNyArMjE4NSwxOCBAQAogICAgIHBTdGF0dXMtPkVyYXNlT2Zmc2V0ID0gKHVpbnQ4X3QpKChzZF9zdGF0dXNbM10gJiAweDAzMDBVKSA+PiA4VSk7CiAgIH0KIAotICByZXR1cm4gSEFMX09LOworICAvKiBTZXQgQmxvY2sgU2l6ZSBmb3IgQ2FyZCAqLworICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kQmxvY2tMZW5ndGgoaHNkLT5JbnN0YW5jZSwgQkxPQ0tTSVpFKTsKKyAgaWYoZXJyb3JzdGF0ZSAhPSBIQUxfU0RfRVJST1JfTk9ORSkKKyAgeworICAgIC8qIENsZWFyIGFsbCB0aGUgc3RhdGljIGZsYWdzICovCisgICAgX19IQUxfU0RfQ0xFQVJfRkxBRyhoc2QsIFNESU9fU1RBVElDX0ZMQUdTKTsKKyAgICBoc2QtPkVycm9yQ29kZSA9IGVycm9yc3RhdGU7CisgICAgaHNkLT5TdGF0ZSA9IEhBTF9TRF9TVEFURV9SRUFEWTsKKyAgICBzdGF0dXMgPSBIQUxfRVJST1I7CisgIH0KKworICByZXR1cm4gc3RhdHVzOwogfQogCiAvKioKQEAgLTIyNzAsNiArMjIzNSw3IEBACiB7CiAgIFNESU9fSW5pdFR5cGVEZWYgSW5pdDsKICAgdWludDMyX3QgZXJyb3JzdGF0ZTsKKyAgSEFMX1N0YXR1c1R5cGVEZWYgc3RhdHVzID0gSEFMX09LOwogCiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19TRElPX0JVU19XSURFKFdpZGVNb2RlKSk7CkBAIC0yMzEyLDcgKzIyNzgsNyBAQAogICAgIC8qIENsZWFyIGFsbCB0aGUgc3RhdGljIGZsYWdzICovCiAgICAgX19IQUxfU0RfQ0xFQVJfRkxBRyhoc2QsIFNESU9fU1RBVElDX0ZMQUdTKTsKICAgICBoc2QtPlN0YXRlID0gSEFMX1NEX1NUQVRFX1JFQURZOwotICAgIHJldHVybiBIQUxfRVJST1I7CisgICAgc3RhdHVzID0gSEFMX0VSUk9SOwogICB9CiAgIGVsc2UKICAgewpAQCAtMjMyNiwxMCArMjI5MiwyMCBAQAogICAgICh2b2lkKVNESU9fSW5pdChoc2QtPkluc3RhbmNlLCBJbml0KTsKICAgfQogCisgIC8qIFNldCBCbG9jayBTaXplIGZvciBDYXJkICovCisgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRCbG9ja0xlbmd0aChoc2QtPkluc3RhbmNlLCBCTE9DS1NJWkUpOworICBpZihlcnJvcnN0YXRlICE9IEhBTF9TRF9FUlJPUl9OT05FKQorICB7CisgICAgLyogQ2xlYXIgYWxsIHRoZSBzdGF0aWMgZmxhZ3MgKi8KKyAgICBfX0hBTF9TRF9DTEVBUl9GTEFHKGhzZCwgU0RJT19TVEFUSUNfRkxBR1MpOworICAgIGhzZC0+RXJyb3JDb2RlIHw9IGVycm9yc3RhdGU7CisgICAgc3RhdHVzID0gSEFMX0VSUk9SOworICB9CisKICAgLyogQ2hhbmdlIFN0YXRlICovCiAgIGhzZC0+U3RhdGUgPSBIQUxfU0RfU1RBVEVfUkVBRFk7CiAKLSAgcmV0dXJuIEhBTF9PSzsKKyAgcmV0dXJuIHN0YXR1czsKIH0KIAogLyoqCkBAIC0zMTUwLDEzICszMTI2LDE3IEBACiAgICAgcmV0dXJuIGVycm9yc3RhdGU7CiAgIH0KIAotICB3aGlsZSghX19IQUxfU0RfR0VUX0ZMQUcoaHNkLCBTRElPX0ZMQUdfUlhPVkVSUiB8IFNESU9fRkxBR19EQ1JDRkFJTCB8IFNESU9fRkxBR19EVElNRU9VVCB8IFNESU9fRkxBR19EQkNLRU5EKSkKKyAgd2hpbGUoIV9fSEFMX1NEX0dFVF9GTEFHKGhzZCwgU0RJT19GTEFHX1JYT1ZFUlIgfCBTRElPX0ZMQUdfRENSQ0ZBSUwgfCBTRElPX0ZMQUdfRFRJTUVPVVQpKQogICB7CiAgICAgaWYoX19IQUxfU0RfR0VUX0ZMQUcoaHNkLCBTRElPX0ZMQUdfUlhEQVZMKSkKICAgICB7CiAgICAgICAqKHRlbXBzY3IgKyBpbmRleCkgPSBTRElPX1JlYWRGSUZPKGhzZC0+SW5zdGFuY2UpOwogICAgICAgaW5kZXgrKzsKICAgICB9CisgICAgZWxzZSBpZighX19IQUxfU0RfR0VUX0ZMQUcoaHNkLCBTRElPX0ZMQUdfUlhBQ1QpKQorICAgIHsKKyAgICAgIGJyZWFrOworICAgIH0KIAogICAgIGlmKChIQUxfR2V0VGljaygpIC0gdGlja3N0YXJ0KSA+PSAgU0RNTUNfREFUQVRJTUVPVVQpCiAgICAgewpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjR4eF9oYWxfc21hcnRjYXJkLmMgYi9TcmMvc3RtMzJmNHh4X2hhbF9zbWFydGNhcmQuYwppbmRleCAyZGUyYmIwLi43MWE2YzE1IDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmNHh4X2hhbF9zbWFydGNhcmQuYworKysgYi9TcmMvc3RtMzJmNHh4X2hhbF9zbWFydGNhcmQuYwpAQCAtNzQwLDcgKzc0MCw3IEBACiAgICAgICAgICAgIGFuZCBIQUxfU01BUlRDQVJEX0Vycm9yQ2FsbGJhY2soKSB1c2VyIGNhbGxiYWNrIGlzIGV4ZWN1dGVkLiBUcmFuc2ZlciBpcyBrZXB0IG9uZ29pbmcgb24gU01BUlRDQVJEIHNpZGUuCiAgICAgICAgICAgIElmIHVzZXIgd2FudHMgdG8gYWJvcnQgaXQsIEFib3J0IHNlcnZpY2VzIHNob3VsZCBiZSBjYWxsZWQgYnkgdXNlci4KICAgICAgICAoKykgRXJyb3IgaXMgY29uc2lkZXJlZCBhcyBCbG9ja2luZyA6IFRyYW5zZmVyIGNvdWxkIG5vdCBiZSBjb21wbGV0ZWQgcHJvcGVybHkgYW5kIGlzIGFib3J0ZWQuCi0gICAgICAgICAgIFRoaXMgY29uY2VybnMgRnJhbWUgRXJyb3IgaW4gSW50ZXJydXB0IG1vZGUgdHJhbm1pc3Npb24sIE92ZXJydW4gRXJyb3IgaW4gSW50ZXJydXB0IG1vZGUgcmVjZXB0aW9uIGFuZCBhbGwgZXJyb3JzIGluIERNQSBtb2RlLgorICAgICAgICAgICBUaGlzIGNvbmNlcm5zIEZyYW1lIEVycm9yIGluIEludGVycnVwdCBtb2RlIHRyYW5zbWlzc2lvbiwgT3ZlcnJ1biBFcnJvciBpbiBJbnRlcnJ1cHQgbW9kZSByZWNlcHRpb24gYW5kIGFsbCBlcnJvcnMgaW4gRE1BIG1vZGUuCiAgICAgICAgICAgIEVycm9yIGNvZGUgaXMgc2V0IHRvIGFsbG93IHVzZXIgdG8gaWRlbnRpZnkgZXJyb3IgdHlwZSwgYW5kIEhBTF9TTUFSVENBUkRfRXJyb3JDYWxsYmFjaygpIHVzZXIgY2FsbGJhY2sgaXMgZXhlY3V0ZWQuCiAKIEBlbmR2ZXJiYXRpbQpAQCAtNzU4LDcgKzc1OCw3IEBACiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfU01BUlRDQVJEX1RyYW5zbWl0KFNNQVJUQ0FSRF9IYW5kbGVUeXBlRGVmICpoc2MsIHVpbnQ4X3QgKnBEYXRhLCB1aW50MTZfdCBTaXplLCB1aW50MzJfdCBUaW1lb3V0KQogewotICB1aW50MTZfdCogdG1wOworICB1aW50OF90ICp0bXAgPSBwRGF0YTsKICAgdWludDMyX3QgdGlja3N0YXJ0ID0gMFU7CiAKICAgaWYoaHNjLT5nU3RhdGUgPT0gSEFMX1NNQVJUQ0FSRF9TVEFURV9SRUFEWSkKQEAgLTc3NCw3ICs3NzQsNyBAQAogICAgIGhzYy0+RXJyb3JDb2RlID0gSEFMX1NNQVJUQ0FSRF9FUlJPUl9OT05FOwogICAgIGhzYy0+Z1N0YXRlID0gSEFMX1NNQVJUQ0FSRF9TVEFURV9CVVNZX1RYOwogCi0gICAgLyogSW5pdCB0aWNrc3RhcnQgZm9yIHRpbWVvdXQgbWFuYWdtZW50ICovCisgICAgLyogSW5pdCB0aWNrc3RhcnQgZm9yIHRpbWVvdXQgbWFuYWdlbWVudCAqLwogICAgIHRpY2tzdGFydCA9IEhBTF9HZXRUaWNrKCk7CiAKICAgICBoc2MtPlR4WGZlclNpemUgPSBTaXplOwpAQCAtNzg2LDkgKzc4Niw4IEBACiAgICAgICB7CiAgICAgICAgIHJldHVybiBIQUxfVElNRU9VVDsKICAgICAgIH0KLSAgICAgIHRtcCA9ICh1aW50MTZfdCopIHBEYXRhOwotICAgICAgaHNjLT5JbnN0YW5jZS0+RFIgPSAoKnRtcCAmICh1aW50MTZfdCkweDAxRkYpOwotICAgICAgcERhdGEgKz0xVTsKKyAgICAgIGhzYy0+SW5zdGFuY2UtPkRSID0gKHVpbnQ4X3QpKCp0bXAgJiAweEZGVSk7CisgICAgICB0bXArKzsKICAgICB9CiAKICAgICBpZihTTUFSVENBUkRfV2FpdE9uRmxhZ1VudGlsVGltZW91dChoc2MsIFNNQVJUQ0FSRF9GTEFHX1RDLCBSRVNFVCwgdGlja3N0YXJ0LCBUaW1lb3V0KSAhPSBIQUxfT0spCkBAIC04MjEsNyArODIwLDcgQEAKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9TTUFSVENBUkRfUmVjZWl2ZShTTUFSVENBUkRfSGFuZGxlVHlwZURlZiAqaHNjLCB1aW50OF90ICpwRGF0YSwgdWludDE2X3QgU2l6ZSwgdWludDMyX3QgVGltZW91dCkKIHsKLSAgdWludDE2X3QqIHRtcDsKKyAgdWludDhfdCAgKnRtcCA9IHBEYXRhOwogICB1aW50MzJfdCB0aWNrc3RhcnQgPSAwVTsKIAogICBpZihoc2MtPlJ4U3RhdGUgPT0gSEFMX1NNQVJUQ0FSRF9TVEFURV9SRUFEWSkKQEAgLTgzNyw3ICs4MzYsNyBAQAogICAgIGhzYy0+RXJyb3JDb2RlID0gSEFMX1NNQVJUQ0FSRF9FUlJPUl9OT05FOwogICAgIGhzYy0+UnhTdGF0ZSA9IEhBTF9TTUFSVENBUkRfU1RBVEVfQlVTWV9SWDsKIAotICAgIC8qIEluaXQgdGlja3N0YXJ0IGZvciB0aW1lb3V0IG1hbmFnbWVudCAqLworICAgIC8qIEluaXQgdGlja3N0YXJ0IGZvciB0aW1lb3V0IG1hbmFnZW1lbnQgKi8KICAgICB0aWNrc3RhcnQgPSBIQUxfR2V0VGljaygpOwogCiAgICAgaHNjLT5SeFhmZXJTaXplID0gU2l6ZTsKQEAgLTg1MSw5ICs4NTAsOCBAQAogICAgICAgewogICAgICAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CiAgICAgICB9Ci0gICAgICB0bXAgPSAodWludDE2X3QqKSBwRGF0YTsKLSAgICAgICp0bXAgPSAodWludDhfdCkoaHNjLT5JbnN0YW5jZS0+RFIgJiAodWludDhfdCkweEZGKTsKLSAgICAgIHBEYXRhICs9MVU7CisgICAgICAqdG1wID0gKHVpbnQ4X3QpKGhzYy0+SW5zdGFuY2UtPkRSICYgKHVpbnQ4X3QpMHhGRlUpOworICAgICAgdG1wKys7CiAgICAgfQogCiAgICAgLyogQXQgZW5kIG9mIFJ4IHByb2Nlc3MsIHJlc3RvcmUgaHNjLT5SeFN0YXRlIHRvIFJlYWR5ICovCkBAIC0xOTk5LDE0ICsxOTk3LDEyIEBACiAgICovCiBzdGF0aWMgSEFMX1N0YXR1c1R5cGVEZWYgU01BUlRDQVJEX1RyYW5zbWl0X0lUKFNNQVJUQ0FSRF9IYW5kbGVUeXBlRGVmICpoc2MpCiB7Ci0gIHVpbnQxNl90KiB0bXA7CiAKICAgLyogQ2hlY2sgdGhhdCBhIFR4IHByb2Nlc3MgaXMgb25nb2luZyAqLwogICBpZihoc2MtPmdTdGF0ZSA9PSBIQUxfU01BUlRDQVJEX1NUQVRFX0JVU1lfVFgpCiAgIHsKLSAgICB0bXAgPSAodWludDE2X3QqKSBoc2MtPnBUeEJ1ZmZQdHI7Ci0gICAgaHNjLT5JbnN0YW5jZS0+RFIgPSAodWludDE2X3QpKCp0bXAgJiAodWludDE2X3QpMHgwMUZGKTsKLSAgICBoc2MtPnBUeEJ1ZmZQdHIgKz0gMVU7CisgICAgaHNjLT5JbnN0YW5jZS0+RFIgPSAodWludDhfdCkoKmhzYy0+cFR4QnVmZlB0ciAmIDB4RkZVKTsKKyAgICBoc2MtPnBUeEJ1ZmZQdHIrKzsKIAogICAgIGlmKC0taHNjLT5UeFhmZXJDb3VudCA9PSAwVSkKICAgICB7CkBAIC0yMDYxLDE0ICsyMDU3LDEyIEBACiAgICovCiBzdGF0aWMgSEFMX1N0YXR1c1R5cGVEZWYgU01BUlRDQVJEX1JlY2VpdmVfSVQoU01BUlRDQVJEX0hhbmRsZVR5cGVEZWYgKmhzYykKIHsKLSAgdWludDE2X3QqIHRtcDsKIAogICAvKiBDaGVjayB0aGF0IGEgUnggcHJvY2VzcyBpcyBvbmdvaW5nICovCiAgIGlmKGhzYy0+UnhTdGF0ZSA9PSBIQUxfU01BUlRDQVJEX1NUQVRFX0JVU1lfUlgpCiAgIHsKLSAgICB0bXAgPSAodWludDE2X3QqKSBoc2MtPnBSeEJ1ZmZQdHI7Ci0gICAgKnRtcCA9ICh1aW50OF90KShoc2MtPkluc3RhbmNlLT5EUiAmICh1aW50OF90KTB4MDBGRik7Ci0gICAgaHNjLT5wUnhCdWZmUHRyICs9IDFVOworICAgICpoc2MtPnBSeEJ1ZmZQdHIgPSAodWludDhfdCkoaHNjLT5JbnN0YW5jZS0+RFIgJiAodWludDhfdCkweEZGVSk7CisgICAgaHNjLT5wUnhCdWZmUHRyKys7CiAKICAgICBpZigtLWhzYy0+UnhYZmVyQ291bnQgPT0gMFUpCiAgICAgewpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjR4eF9oYWxfc21idXMuYyBiL1NyYy9zdG0zMmY0eHhfaGFsX3NtYnVzLmMKaW5kZXggNDZhYzAzMS4uMTUwMjZiNCAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZjR4eF9oYWxfc21idXMuYworKysgYi9TcmMvc3RtMzJmNHh4X2hhbF9zbWJ1cy5jCkBAIC0xOTI1LDE0ICsxOTI1LDEyIEBACiB7CiAgIC8qIERlY2xhcmF0aW9uIG9mIHRlbXBvcmFyeSB2YXJpYWJsZXMgdG8gcHJldmVudCB1bmRlZmluZWQgYmVoYXZpb3Igb2Ygdm9sYXRpbGUgdXNhZ2UgKi8KICAgdWludDMyX3QgQ3VycmVudFN0YXRlICAgICAgID0gaHNtYnVzLT5TdGF0ZTsKLSAgdWludDMyX3QgQ3VycmVudE1vZGUgICAgICAgID0gaHNtYnVzLT5Nb2RlOwogICB1aW50MzJfdCBDdXJyZW50WGZlck9wdGlvbnMgPSBoc21idXMtPlhmZXJPcHRpb25zOwogCiAgIGlmICgoaHNtYnVzLT5YZmVyU2l6ZSA9PSAwVSkgJiYgKEN1cnJlbnRTdGF0ZSA9PSBIQUxfU01CVVNfU1RBVEVfQlVTWV9UWCkpCiAgIHsKICAgICAvKiBDYWxsIFR4Q3BsdENhbGxiYWNrKCkgZGlyZWN0bHkgaWYgbm8gc3RvcCBtb2RlIGlzIHNldCAqLwotICAgIGlmICgoKEN1cnJlbnRYZmVyT3B0aW9ucyAhPSBTTUJVU19GSVJTVF9BTkRfTEFTVF9GUkFNRV9OT19QRUMpIHx8IChDdXJyZW50WGZlck9wdGlvbnMgIT0gU01CVVNfRklSU1RfQU5EX0xBU1RfRlJBTUVfV0lUSF9QRUMpKSAmJiBcCi0gICAgICAgICgoQ3VycmVudFhmZXJPcHRpb25zICE9IFNNQlVTX0xBU1RfRlJBTUVfTk9fUEVDKSB8fCAoQ3VycmVudFhmZXJPcHRpb25zICE9IFNNQlVTX0xBU1RfRlJBTUVfV0lUSF9QRUMpKSAmJiAoQ3VycmVudFhmZXJPcHRpb25zICE9IFNNQlVTX05PX09QVElPTl9GUkFNRSkpCisgICAgaWYgKCgoQ3VycmVudFhmZXJPcHRpb25zID09IFNNQlVTX0ZJUlNUX0ZSQU1FKSB8fCAoQ3VycmVudFhmZXJPcHRpb25zID09IFNNQlVTX05FWFRfRlJBTUUpKSAmJiAoQ3VycmVudFhmZXJPcHRpb25zICE9IFNNQlVTX05PX09QVElPTl9GUkFNRSkpCiAgICAgewogICAgICAgX19IQUxfU01CVVNfRElTQUJMRV9JVChoc21idXMsIFNNQlVTX0lUX0VWVCB8IFNNQlVTX0lUX0JVRiB8IFNNQlVTX0lUX0VSUik7CiAKQEAgLTIwMTcsNyArMjAxNSw3IEBACiAgICAgZWxzZQogICAgIHsKICAgICAgIC8qIENhbGwgVHhDcGx0Q2FsbGJhY2soKSBkaXJlY3RseSBpZiBubyBzdG9wIG1vZGUgaXMgc2V0ICovCi0gICAgICBpZiAoKChDdXJyZW50WGZlck9wdGlvbnMgIT0gU01CVVNfRklSU1RfQU5EX0xBU1RfRlJBTUVfTk9fUEVDKSB8fCAoQ3VycmVudFhmZXJPcHRpb25zICE9IFNNQlVTX0ZJUlNUX0FORF9MQVNUX0ZSQU1FX1dJVEhfUEVDKSkgJiYgKChDdXJyZW50WGZlck9wdGlvbnMgIT0gU01CVVNfTEFTVF9GUkFNRV9OT19QRUMpIHx8IChDdXJyZW50WGZlck9wdGlvbnMgIT0gU01CVVNfTEFTVF9GUkFNRV9XSVRIX1BFQykpICYmIChDdXJyZW50WGZlck9wdGlvbnMgIT0gU01CVVNfTk9fT1BUSU9OX0ZSQU1FKSkKKyAgICAgIGlmICgoKEN1cnJlbnRYZmVyT3B0aW9ucyA9PSBTTUJVU19GSVJTVF9GUkFNRSkgfHwgKEN1cnJlbnRYZmVyT3B0aW9ucyA9PSBTTUJVU19ORVhUX0ZSQU1FKSkgJiYgKEN1cnJlbnRYZmVyT3B0aW9ucyAhPSBTTUJVU19OT19PUFRJT05fRlJBTUUpKQogICAgICAgewogICAgICAgICBfX0hBTF9TTUJVU19ESVNBQkxFX0lUKGhzbWJ1cywgU01CVVNfSVRfRVZUIHwgU01CVVNfSVRfQlVGIHwgU01CVVNfSVRfRVJSKTsKIApAQCAtMjE2Niw3ICsyMTY0LDcgQEAKICAgZWxzZSBpZiAoaHNtYnVzLT5YZmVyQ291bnQgPT0gMlUpCiAgIHsKICAgICAvKiBQcmVwYXJlIG5leHQgdHJhbnNmZXIgb3Igc3RvcCBjdXJyZW50IHRyYW5zZmVyICovCi0gICAgaWYgKChDdXJyZW50WGZlck9wdGlvbnMgPT0gU01CVVNfTkVYVF9GUkFNRSkgfHwgKEN1cnJlbnRYZmVyT3B0aW9ucyA9PSBTTUJVU19GSVJTVF9GUkFNRSkgfHwgKEN1cnJlbnRYZmVyT3B0aW9ucyA9PSBTTUJVU19MQVNUX0ZSQU1FX05PX1BFQykpCisgICAgaWYgKChDdXJyZW50WGZlck9wdGlvbnMgPT0gU01CVVNfTkVYVF9GUkFNRSkgfHwgKEN1cnJlbnRYZmVyT3B0aW9ucyA9PSBTTUJVU19GSVJTVF9GUkFNRSkpCiAgICAgewogICAgICAgLyogRGlzYWJsZSBBY2tub3dsZWRnZSAqLwogICAgICAgQ0xFQVJfQklUKGhzbWJ1cy0+SW5zdGFuY2UtPkNSMSwgSTJDX0NSMV9BQ0spOwpAQCAtMjI2OCw4ICsyMjY2LDYgQEAKIHN0YXRpYyBIQUxfU3RhdHVzVHlwZURlZiBTTUJVU19NYXN0ZXJfQUREUihTTUJVU19IYW5kbGVUeXBlRGVmICpoc21idXMpCiB7CiAgIC8qIERlY2xhcmF0aW9uIG9mIHRlbXBvcmFyeSB2YXJpYWJsZSB0byBwcmV2ZW50IHVuZGVmaW5lZCBiZWhhdmlvciBvZiB2b2xhdGlsZSB1c2FnZSAqLwotICB1aW50MzJfdCBDdXJyZW50TW9kZSAgICAgICAgPSBoc21idXMtPk1vZGU7Ci0gIHVpbnQzMl90IEN1cnJlbnRYZmVyT3B0aW9ucyA9IGhzbWJ1cy0+WGZlck9wdGlvbnM7CiAgIHVpbnQzMl90IFByZXZfU3RhdGUgICAgICAgICA9IGhzbWJ1cy0+UHJldmlvdXNTdGF0ZTsKIAogICBpZiAoaHNtYnVzLT5TdGF0ZSA9PSBIQUxfU01CVVNfU1RBVEVfQlVTWV9SWCkKQEAgLTI3MTEsNyArMjcwNyw2IEBACiAgICAgfQogCiAgICAgLyogQ2FsbCB1c2VyIGVycm9yIGNhbGxiYWNrICovCi0gICAgSEFMX1NNQlVTX0Vycm9yQ2FsbGJhY2soaHNtYnVzKTsKICNpZiAoVVNFX0hBTF9TTUJVU19SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkKICAgICBoc21idXMtPkVycm9yQ2FsbGJhY2soaHNtYnVzKTsKICNlbHNlCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmNHh4X2hhbF9zcGRpZnJ4LmMgYi9TcmMvc3RtMzJmNHh4X2hhbF9zcGRpZnJ4LmMKaW5kZXggMWJhMWM0ZC4uNTBmYWM1ZSAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZjR4eF9oYWxfc3BkaWZyeC5jCisrKyBiL1NyYy9zdG0zMmY0eHhfaGFsX3NwZGlmcnguYwpAQCAtOTMsNyArOTMsNyBAQAogCiAgIFRoZSBjb21waWxhdGlvbiBkZWZpbmUgIFVTRV9IQUxfU1BESUZSWF9SRUdJU1RFUl9DQUxMQkFDS1Mgd2hlbiBzZXQgdG8gMQogICBhbGxvd3MgdGhlIHVzZXIgdG8gY29uZmlndXJlIGR5bmFtaWNhbGx5IHRoZSBkcml2ZXIgY2FsbGJhY2tzLgotICBVc2UgSEFMX1NQRElGUlhfUmVnaXN0ZXJDYWxsYmFjaygpIGZ1bnRpb24gdG8gcmVnaXN0ZXIgYW4gaW50ZXJydXB0IGNhbGxiYWNrLgorICBVc2UgSEFMX1NQRElGUlhfUmVnaXN0ZXJDYWxsYmFjaygpIGZ1bmN0aW9uIHRvIHJlZ2lzdGVyIGFuIGludGVycnVwdCBjYWxsYmFjay4KIAogICBUaGUgSEFMX1NQRElGUlhfUmVnaXN0ZXJDYWxsYmFjaygpIGZ1bmN0aW9uIGFsbG93cyB0byByZWdpc3RlciB0aGUgZm9sbG93aW5nIGNhbGxiYWNrczoKICAgICAoKykgUnhIYWxmQ3BsdENhbGxiYWNrICA6IFNQRElGUlggRGF0YSBmbG93IGhhbGYgY29tcGxldGVkIGNhbGxiYWNrLgpAQCAtODQxLDcgKzg0MSw3IEBACiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfU1BESUZSWF9SZWNlaXZlRGF0YUZsb3dfSVQoU1BESUZSWF9IYW5kbGVUeXBlRGVmICpoc3BkaWYsIHVpbnQzMl90ICpwRGF0YSwgdWludDE2X3QgU2l6ZSkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgY291bnQgPSBTUERJRlJYX1RJTUVPVVRfVkFMVUUgKiAoU3lzdGVtQ29yZUNsb2NrIC8gMjRVIC8gMTAwMFUpOworICB1aW50MzJfdCBjb3VudCA9IFNQRElGUlhfVElNRU9VVF9WQUxVRSAqIChTeXN0ZW1Db3JlQ2xvY2sgLyAyNFUgLyAxMDAwVSk7CiAKICAgY29uc3QgSEFMX1NQRElGUlhfU3RhdGVUeXBlRGVmIHRlbXBTdGF0ZSA9IGhzcGRpZi0+U3RhdGU7CiAKQEAgLTkyNiw3ICs5MjYsNyBAQAogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1NQRElGUlhfUmVjZWl2ZUNvbnRyb2xGbG93X0lUKFNQRElGUlhfSGFuZGxlVHlwZURlZiAqaHNwZGlmLCB1aW50MzJfdCAqcERhdGEsIHVpbnQxNl90IFNpemUpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGNvdW50ID0gU1BESUZSWF9USU1FT1VUX1ZBTFVFICogKFN5c3RlbUNvcmVDbG9jayAvIDI0VSAvIDEwMDBVKTsKKyAgdWludDMyX3QgY291bnQgPSBTUERJRlJYX1RJTUVPVVRfVkFMVUUgKiAoU3lzdGVtQ29yZUNsb2NrIC8gMjRVIC8gMTAwMFUpOwogCiAgIGNvbnN0IEhBTF9TUERJRlJYX1N0YXRlVHlwZURlZiB0ZW1wU3RhdGUgPSBoc3BkaWYtPlN0YXRlOwogCkBAIC0xMDExLDcgKzEwMTEsNyBAQAogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1NQRElGUlhfUmVjZWl2ZURhdGFGbG93X0RNQShTUERJRlJYX0hhbmRsZVR5cGVEZWYgKmhzcGRpZiwgdWludDMyX3QgKnBEYXRhLCB1aW50MTZfdCBTaXplKQogewotICByZWdpc3RlciB1aW50MzJfdCBjb3VudCA9IFNQRElGUlhfVElNRU9VVF9WQUxVRSAqIChTeXN0ZW1Db3JlQ2xvY2sgLyAyNFUgLyAxMDAwVSk7CisgIHVpbnQzMl90IGNvdW50ID0gU1BESUZSWF9USU1FT1VUX1ZBTFVFICogKFN5c3RlbUNvcmVDbG9jayAvIDI0VSAvIDEwMDBVKTsKIAogICBjb25zdCBIQUxfU1BESUZSWF9TdGF0ZVR5cGVEZWYgdGVtcFN0YXRlID0gaHNwZGlmLT5TdGF0ZTsKIApAQCAtMTExMiw3ICsxMTEyLDcgQEAKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9TUERJRlJYX1JlY2VpdmVDb250cm9sRmxvd19ETUEoU1BESUZSWF9IYW5kbGVUeXBlRGVmICpoc3BkaWYsIHVpbnQzMl90ICpwRGF0YSwgdWludDE2X3QgU2l6ZSkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgY291bnQgPSBTUERJRlJYX1RJTUVPVVRfVkFMVUUgKiAoU3lzdGVtQ29yZUNsb2NrIC8gMjRVIC8gMTAwMFUpOworICB1aW50MzJfdCBjb3VudCA9IFNQRElGUlhfVElNRU9VVF9WQUxVRSAqIChTeXN0ZW1Db3JlQ2xvY2sgLyAyNFUgLyAxMDAwVSk7CiAKICAgY29uc3QgSEFMX1NQRElGUlhfU3RhdGVUeXBlRGVmIHRlbXBTdGF0ZSA9IGhzcGRpZi0+U3RhdGU7CiAKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmY0eHhfaGFsX3NwaS5jIGIvU3JjL3N0bTMyZjR4eF9oYWxfc3BpLmMKaW5kZXggOTk1MzFmNy4uOGFmYTZlNyAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZjR4eF9oYWxfc3BpLmMKKysrIGIvU3JjL3N0bTMyZjR4eF9oYWxfc3BpLmMKQEAgLTEzMSw3ICsxMzEsNyBAQAogICAgICAgIERhdGFTaXplID0gU1BJX0RBVEFTSVpFXzhCSVQ6CiAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiAgICAgICAgfCAgICAgICAgIHwgICAgICAgICAgICAgICAgfCAyTGluZXMgRnVsbGR1cGxleCAgIHwgICAgIDJMaW5lcyBSeE9ubHkgICAgfCAgICAgICAgIDFMaW5lICAgICAgICB8Ci0gICAgICAgfCBQcm9jZXNzIHwgVHJhbmZlcnQgbW9kZSAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CisgICAgICAgfCBQcm9jZXNzIHwgVHJhbnNmZXIgbW9kZSAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgfCAgICAgICAgIHwgICAgICAgICAgICAgICAgfCAgTWFzdGVyICB8ICBTbGF2ZSAgIHwgIE1hc3RlciAgIHwgIFNsYXZlICAgfCAgTWFzdGVyICAgfCAgU2xhdmUgICB8CiAgICAgICAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18CiAgICAgICAgfCAgICBUICAgIHwgICAgIFBvbGxpbmcgICAgfCBGcGNsay8yICB8IEZwY2xrLzIgIHwgICAgTkEgICAgIHwgICAgTkEgICAgfCAgICBOQSAgICAgfCAgIE5BICAgICB8CkBAIC0xNTYsNyArMTU2LDcgQEAKICAgICAgICBEYXRhU2l6ZSA9IFNQSV9EQVRBU0laRV8xNkJJVDoKICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKICAgICAgICB8ICAgICAgICAgfCAgICAgICAgICAgICAgICB8IDJMaW5lcyBGdWxsZHVwbGV4ICAgfCAgICAgMkxpbmVzIFJ4T25seSAgICB8ICAgICAgICAgMUxpbmUgICAgICAgIHwKLSAgICAgICB8IFByb2Nlc3MgfCBUcmFuZmVydCBtb2RlICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKKyAgICAgICB8IFByb2Nlc3MgfCBUcmFuc2ZlciBtb2RlICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKICAgICAgICB8ICAgICAgICAgfCAgICAgICAgICAgICAgICB8ICBNYXN0ZXIgIHwgIFNsYXZlICAgfCAgTWFzdGVyICAgfCAgU2xhdmUgICB8ICBNYXN0ZXIgICB8ICBTbGF2ZSAgIHwKICAgICAgICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXwKICAgICAgICB8ICAgIFQgICAgfCAgICAgUG9sbGluZyAgICB8IEZwY2xrLzIgIHwgRnBjbGsvMiAgfCAgICBOQSAgICAgfCAgICBOQSAgICB8ICAgIE5BICAgICB8ICAgTkEgICAgIHwKQEAgLTMzMSw2ICszMzEsMjQgQEAKICAgewogICAgIGFzc2VydF9wYXJhbShJU19TUElfQ1BPTChoc3BpLT5Jbml0LkNMS1BvbGFyaXR5KSk7CiAgICAgYXNzZXJ0X3BhcmFtKElTX1NQSV9DUEhBKGhzcGktPkluaXQuQ0xLUGhhc2UpKTsKKworICAgIGlmIChoc3BpLT5Jbml0Lk1vZGUgPT0gU1BJX01PREVfTUFTVEVSKQorICAgIHsKKyAgICAgIGFzc2VydF9wYXJhbShJU19TUElfQkFVRFJBVEVfUFJFU0NBTEVSKGhzcGktPkluaXQuQmF1ZFJhdGVQcmVzY2FsZXIpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIC8qIEJhdWRyYXRlIHByZXNjYWxlciBub3QgdXNlIGluIE1vdG9yYW9sYSBTbGF2ZSBtb2RlLiBmb3JjZSB0byBkZWZhdWx0IHZhbHVlICovCisgICAgICBoc3BpLT5Jbml0LkJhdWRSYXRlUHJlc2NhbGVyID0gU1BJX0JBVURSQVRFUFJFU0NBTEVSXzI7CisgICAgfQorICB9CisgIGVsc2UKKyAgeworICAgIGFzc2VydF9wYXJhbShJU19TUElfQkFVRFJBVEVfUFJFU0NBTEVSKGhzcGktPkluaXQuQmF1ZFJhdGVQcmVzY2FsZXIpKTsKKworICAgIC8qIEZvcmNlIHBvbGFyaXR5IGFuZCBwaGFzZSB0byBUSSBwcm90b2Nhb2wgcmVxdWlyZW1lbnRzICovCisgICAgaHNwaS0+SW5pdC5DTEtQb2xhcml0eSA9IFNQSV9QT0xBUklUWV9MT1c7CisgICAgaHNwaS0+SW5pdC5DTEtQaGFzZSAgICA9IFNQSV9QSEFTRV8xRURHRTsKICAgfQogI2lmIChVU0VfU1BJX0NSQyAhPSAwVSkKICAgYXNzZXJ0X3BhcmFtKElTX1NQSV9DUkNfQ0FMQ1VMQVRJT04oaHNwaS0+SW5pdC5DUkNDYWxjdWxhdGlvbikpOwpAQCAtMzc5LDE5ICszOTcsMjUgQEAKICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBTUEl4IENSMSAmIENSMiBDb25maWd1cmF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgIC8qIENvbmZpZ3VyZSA6IFNQSSBNb2RlLCBDb21tdW5pY2F0aW9uIE1vZGUsIERhdGEgc2l6ZSwgQ2xvY2sgcG9sYXJpdHkgYW5kIHBoYXNlLCBOU1MgbWFuYWdlbWVudCwKICAgQ29tbXVuaWNhdGlvbiBzcGVlZCwgRmlyc3QgYml0IGFuZCBDUkMgY2FsY3VsYXRpb24gc3RhdGUgKi8KLSAgV1JJVEVfUkVHKGhzcGktPkluc3RhbmNlLT5DUjEsIChoc3BpLT5Jbml0Lk1vZGUgfCBoc3BpLT5Jbml0LkRpcmVjdGlvbiB8IGhzcGktPkluaXQuRGF0YVNpemUgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhzcGktPkluaXQuQ0xLUG9sYXJpdHkgfCBoc3BpLT5Jbml0LkNMS1BoYXNlIHwgKGhzcGktPkluaXQuTlNTICYgU1BJX0NSMV9TU00pIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoc3BpLT5Jbml0LkJhdWRSYXRlUHJlc2NhbGVyIHwgaHNwaS0+SW5pdC5GaXJzdEJpdCAgfCBoc3BpLT5Jbml0LkNSQ0NhbGN1bGF0aW9uKSk7CisgIFdSSVRFX1JFRyhoc3BpLT5JbnN0YW5jZS0+Q1IxLCAoKGhzcGktPkluaXQuTW9kZSAmIChTUElfQ1IxX01TVFIgfCBTUElfQ1IxX1NTSSkpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaHNwaS0+SW5pdC5EaXJlY3Rpb24gJiAoU1BJX0NSMV9SWE9OTFkgfCBTUElfQ1IxX0JJRElNT0RFKSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChoc3BpLT5Jbml0LkRhdGFTaXplICYgU1BJX0NSMV9ERkYpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaHNwaS0+SW5pdC5DTEtQb2xhcml0eSAmIFNQSV9DUjFfQ1BPTCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChoc3BpLT5Jbml0LkNMS1BoYXNlICYgU1BJX0NSMV9DUEhBKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGhzcGktPkluaXQuTlNTICYgU1BJX0NSMV9TU00pIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaHNwaS0+SW5pdC5CYXVkUmF0ZVByZXNjYWxlciAmIFNQSV9DUjFfQlJfTXNrKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGhzcGktPkluaXQuRmlyc3RCaXQgICYgU1BJX0NSMV9MU0JGSVJTVCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChoc3BpLT5Jbml0LkNSQ0NhbGN1bGF0aW9uICYgU1BJX0NSMV9DUkNFTikpKTsKIAogICAvKiBDb25maWd1cmUgOiBOU1MgbWFuYWdlbWVudCwgVEkgTW9kZSAqLwotICBXUklURV9SRUcoaHNwaS0+SW5zdGFuY2UtPkNSMiwgKCgoaHNwaS0+SW5pdC5OU1MgPj4gMTZVKSAmIFNQSV9DUjJfU1NPRSkgfCBoc3BpLT5Jbml0LlRJTW9kZSkpOworICBXUklURV9SRUcoaHNwaS0+SW5zdGFuY2UtPkNSMiwgKCgoaHNwaS0+SW5pdC5OU1MgPj4gMTZVKSAmIFNQSV9DUjJfU1NPRSkgfCAoaHNwaS0+SW5pdC5USU1vZGUgJiBTUElfQ1IyX0ZSRikpKTsKIAogI2lmIChVU0VfU1BJX0NSQyAhPSAwVSkKICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFNQSXggQ1JDUE9MWSBDb25maWd1cmF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLSovCiAgIC8qIENvbmZpZ3VyZSA6IENSQyBQb2x5bm9taWFsICovCiAgIGlmIChoc3BpLT5Jbml0LkNSQ0NhbGN1bGF0aW9uID09IFNQSV9DUkNDQUxDVUxBVElPTl9FTkFCTEUpCiAgIHsKLSAgICBXUklURV9SRUcoaHNwaS0+SW5zdGFuY2UtPkNSQ1BSLCBoc3BpLT5Jbml0LkNSQ1BvbHlub21pYWwpOworICAgIFdSSVRFX1JFRyhoc3BpLT5JbnN0YW5jZS0+Q1JDUFIsIChoc3BpLT5Jbml0LkNSQ1BvbHlub21pYWwgJiBTUElfQ1JDUFJfQ1JDUE9MWV9Nc2spKTsKICAgfQogI2VuZGlmIC8qIFVTRV9TUElfQ1JDICovCiAKQEAgLTc4OSw2ICs4MTMsOCBAQAogICAvKiBDb25maWd1cmUgY29tbXVuaWNhdGlvbiBkaXJlY3Rpb24gOiAxTGluZSAqLwogICBpZiAoaHNwaS0+SW5pdC5EaXJlY3Rpb24gPT0gU1BJX0RJUkVDVElPTl8xTElORSkKICAgeworICAgIC8qIERpc2FibGUgU1BJIFBlcmlwaGVyYWwgYmVmb3JlIHNldCAxTGluZSBkaXJlY3Rpb24gKEJJRElPRSBiaXQpICovCisgICAgX19IQUxfU1BJX0RJU0FCTEUoaHNwaSk7CiAgICAgU1BJXzFMSU5FX1RYKGhzcGkpOwogICB9CiAKQEAgLTkwOSw2ICs5MzUsOSBAQAogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1NQSV9SZWNlaXZlKFNQSV9IYW5kbGVUeXBlRGVmICpoc3BpLCB1aW50OF90ICpwRGF0YSwgdWludDE2X3QgU2l6ZSwgdWludDMyX3QgVGltZW91dCkKIHsKKyNpZiAoVVNFX1NQSV9DUkMgIT0gMFUpCisgIF9fSU8gdWludDMyX3QgdG1wcmVnID0gMFU7CisjZW5kaWYgLyogVVNFX1NQSV9DUkMgKi8KICAgdWludDMyX3QgdGlja3N0YXJ0OwogICBIQUxfU3RhdHVzVHlwZURlZiBlcnJvcmNvZGUgPSBIQUxfT0s7CiAKQEAgLTk2NCw2ICs5OTMsOCBAQAogICAvKiBDb25maWd1cmUgY29tbXVuaWNhdGlvbiBkaXJlY3Rpb246IDFMaW5lICovCiAgIGlmIChoc3BpLT5Jbml0LkRpcmVjdGlvbiA9PSBTUElfRElSRUNUSU9OXzFMSU5FKQogICB7CisgICAgLyogRGlzYWJsZSBTUEkgUGVyaXBoZXJhbCBiZWZvcmUgc2V0IDFMaW5lIGRpcmVjdGlvbiAoQklESU9FIGJpdCkgKi8KKyAgICBfX0hBTF9TUElfRElTQUJMRShoc3BpKTsKICAgICBTUElfMUxJTkVfUlgoaHNwaSk7CiAgIH0KIApAQCAtMTA1OCw3ICsxMDg5LDkgQEAKICAgICB9CiAKICAgICAvKiBSZWFkIENSQyB0byBGbHVzaCBEUiBhbmQgUlhORSBmbGFnICovCi0gICAgUkVBRF9SRUcoaHNwaS0+SW5zdGFuY2UtPkRSKTsKKyAgICB0bXByZWcgPSBSRUFEX1JFRyhoc3BpLT5JbnN0YW5jZS0+RFIpOworICAgIC8qIFRvIGF2b2lkIEdDQyB3YXJuaW5nICovCisgICAgVU5VU0VEKHRtcHJlZyk7CiAgIH0KICNlbmRpZiAvKiBVU0VfU1BJX0NSQyAqLwogCkBAIC0xMTAxLDYgKzExMzQsOSBAQAogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1NQSV9UcmFuc21pdFJlY2VpdmUoU1BJX0hhbmRsZVR5cGVEZWYgKmhzcGksIHVpbnQ4X3QgKnBUeERhdGEsIHVpbnQ4X3QgKnBSeERhdGEsIHVpbnQxNl90IFNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBUaW1lb3V0KQogeworI2lmIChVU0VfU1BJX0NSQyAhPSAwVSkKKyAgX19JTyB1aW50MzJfdCB0bXByZWcgPSAwVTsKKyNlbmRpZiAvKiBVU0VfU1BJX0NSQyAqLwogICB1aW50MTZfdCAgICAgICAgICAgICBpbml0aWFsX1R4WGZlckNvdW50OwogICB1aW50MzJfdCAgICAgICAgICAgICB0bXBfbW9kZTsKICAgSEFMX1NQSV9TdGF0ZVR5cGVEZWYgdG1wX3N0YXRlOwpAQCAtMTI3NSw3ICsxMzExLDkgQEAKICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQogICAgIC8qIFJlYWQgQ1JDICovCi0gICAgUkVBRF9SRUcoaHNwaS0+SW5zdGFuY2UtPkRSKTsKKyAgICB0bXByZWcgPSBSRUFEX1JFRyhoc3BpLT5JbnN0YW5jZS0+RFIpOworICAgIC8qIFRvIGF2b2lkIEdDQyB3YXJuaW5nICovCisgICAgVU5VU0VEKHRtcHJlZyk7CiAgIH0KIAogICAvKiBDaGVjayBpZiBDUkMgZXJyb3Igb2NjdXJyZWQgKi8KQEAgLTEzNjUsNiArMTQwMyw4IEBACiAgIC8qIENvbmZpZ3VyZSBjb21tdW5pY2F0aW9uIGRpcmVjdGlvbiA6IDFMaW5lICovCiAgIGlmIChoc3BpLT5Jbml0LkRpcmVjdGlvbiA9PSBTUElfRElSRUNUSU9OXzFMSU5FKQogICB7CisgICAgLyogRGlzYWJsZSBTUEkgUGVyaXBoZXJhbCBiZWZvcmUgc2V0IDFMaW5lIGRpcmVjdGlvbiAoQklESU9FIGJpdCkgKi8KKyAgICBfX0hBTF9TUElfRElTQUJMRShoc3BpKTsKICAgICBTUElfMUxJTkVfVFgoaHNwaSk7CiAgIH0KIApAQCAtMTQ1Miw2ICsxNDkyLDggQEAKICAgLyogQ29uZmlndXJlIGNvbW11bmljYXRpb24gZGlyZWN0aW9uIDogMUxpbmUgKi8KICAgaWYgKGhzcGktPkluaXQuRGlyZWN0aW9uID09IFNQSV9ESVJFQ1RJT05fMUxJTkUpCiAgIHsKKyAgICAvKiBEaXNhYmxlIFNQSSBQZXJpcGhlcmFsIGJlZm9yZSBzZXQgMUxpbmUgZGlyZWN0aW9uIChCSURJT0UgYml0KSAqLworICAgIF9fSEFMX1NQSV9ESVNBQkxFKGhzcGkpOwogICAgIFNQSV8xTElORV9SWChoc3BpKTsKICAgfQogCkBAIC0xNjIyLDYgKzE2NjQsOCBAQAogICAvKiBDb25maWd1cmUgY29tbXVuaWNhdGlvbiBkaXJlY3Rpb24gOiAxTGluZSAqLwogICBpZiAoaHNwaS0+SW5pdC5EaXJlY3Rpb24gPT0gU1BJX0RJUkVDVElPTl8xTElORSkKICAgeworICAgIC8qIERpc2FibGUgU1BJIFBlcmlwaGVyYWwgYmVmb3JlIHNldCAxTGluZSBkaXJlY3Rpb24gKEJJRElPRSBiaXQpICovCisgICAgX19IQUxfU1BJX0RJU0FCTEUoaHNwaSk7CiAgICAgU1BJXzFMSU5FX1RYKGhzcGkpOwogICB9CiAKQEAgLTE3MzUsNiArMTc3OSw4IEBACiAgIC8qIENvbmZpZ3VyZSBjb21tdW5pY2F0aW9uIGRpcmVjdGlvbiA6IDFMaW5lICovCiAgIGlmIChoc3BpLT5Jbml0LkRpcmVjdGlvbiA9PSBTUElfRElSRUNUSU9OXzFMSU5FKQogICB7CisgICAgLyogRGlzYWJsZSBTUEkgUGVyaXBoZXJhbCBiZWZvcmUgc2V0IDFMaW5lIGRpcmVjdGlvbiAoQklESU9FIGJpdCkgKi8KKyAgICBfX0hBTF9TUElfRElTQUJMRShoc3BpKTsKICAgICBTUElfMUxJTkVfUlgoaHNwaSk7CiAgIH0KIApAQCAtMjY4NSw2ICsyNzMxLDkgQEAKIHsKICAgU1BJX0hhbmRsZVR5cGVEZWYgKmhzcGkgPSAoU1BJX0hhbmRsZVR5cGVEZWYgKikoKChETUFfSGFuZGxlVHlwZURlZiAqKWhkbWEpLT5QYXJlbnQpOyAvKiBEZXJvZ2F0aW9uIE1JU1JBQzIwMTItUnVsZS0xMS41ICovCiAgIHVpbnQzMl90IHRpY2tzdGFydDsKKyNpZiAoVVNFX1NQSV9DUkMgIT0gMFUpCisgIF9fSU8gdWludDMyX3QgdG1wcmVnID0gMFU7CisjZW5kaWYgLyogVVNFX1NQSV9DUkMgKi8KIAogICAvKiBJbml0IHRpY2tzdGFydCBmb3IgdGltZW91dCBtYW5hZ2VtZW50Ki8KICAgdGlja3N0YXJ0ID0gSEFMX0dldFRpY2soKTsKQEAgLTI3MDYsNyArMjc1NSw5IEBACiAgICAgICAgIFNFVF9CSVQoaHNwaS0+RXJyb3JDb2RlLCBIQUxfU1BJX0VSUk9SX0NSQyk7CiAgICAgICB9CiAgICAgICAvKiBSZWFkIENSQyAqLwotICAgICAgUkVBRF9SRUcoaHNwaS0+SW5zdGFuY2UtPkRSKTsKKyAgICAgIHRtcHJlZyA9IFJFQURfUkVHKGhzcGktPkluc3RhbmNlLT5EUik7CisgICAgICAvKiBUbyBhdm9pZCBHQ0Mgd2FybmluZyAqLworICAgICAgVU5VU0VEKHRtcHJlZyk7CiAgICAgfQogI2VuZGlmIC8qIFVTRV9TUElfQ1JDICovCiAKQEAgLTI3NjksNiArMjgyMCw5IEBACiB7CiAgIFNQSV9IYW5kbGVUeXBlRGVmICpoc3BpID0gKFNQSV9IYW5kbGVUeXBlRGVmICopKCgoRE1BX0hhbmRsZVR5cGVEZWYgKiloZG1hKS0+UGFyZW50KTsgLyogRGVyb2dhdGlvbiBNSVNSQUMyMDEyLVJ1bGUtMTEuNSAqLwogICB1aW50MzJfdCB0aWNrc3RhcnQ7CisjaWYgKFVTRV9TUElfQ1JDICE9IDBVKQorICBfX0lPIHVpbnQzMl90IHRtcHJlZyA9IDBVOworI2VuZGlmIC8qIFVTRV9TUElfQ1JDICovCiAKICAgLyogSW5pdCB0aWNrc3RhcnQgZm9yIHRpbWVvdXQgbWFuYWdlbWVudCovCiAgIHRpY2tzdGFydCA9IEhBTF9HZXRUaWNrKCk7CkBAIC0yNzg5LDcgKzI4NDMsOSBAQAogICAgICAgICBTRVRfQklUKGhzcGktPkVycm9yQ29kZSwgSEFMX1NQSV9FUlJPUl9DUkMpOwogICAgICAgfQogICAgICAgLyogUmVhZCBDUkMgdG8gRmx1c2ggRFIgYW5kIFJYTkUgZmxhZyAqLwotICAgICAgUkVBRF9SRUcoaHNwaS0+SW5zdGFuY2UtPkRSKTsKKyAgICAgIHRtcHJlZyA9IFJFQURfUkVHKGhzcGktPkluc3RhbmNlLT5EUik7CisgICAgICAvKiBUbyBhdm9pZCBHQ0Mgd2FybmluZyAqLworICAgICAgVU5VU0VEKHRtcHJlZyk7CiAgICAgfQogI2VuZGlmIC8qIFVTRV9TUElfQ1JDICovCiAKQEAgLTMxMDAsOCArMzE1NiwxMiBAQAogICAqLwogc3RhdGljIHZvaWQgU1BJXzJsaW5lc1J4SVNSXzhCSVRDUkMoc3RydWN0IF9fU1BJX0hhbmRsZVR5cGVEZWYgKmhzcGkpCiB7Ci0gIC8qIFJlYWQgOGJpdCBDUkMgdG8gZmx1c2ggRGF0YSBSZWdzaXRlciAqLwotICBSRUFEX1JFRygqKF9fSU8gdWludDhfdCAqKSZoc3BpLT5JbnN0YW5jZS0+RFIpOworICBfX0lPIHVpbnQzMl90IHRtcHJlZyA9IDBVOworCisgIC8qIFJlYWQgOGJpdCBDUkMgdG8gZmx1c2ggRGF0YSBSZWdpc3RlciAqLworICB0bXByZWcgPSBSRUFEX1JFRygqKF9fSU8gdWludDhfdCAqKSZoc3BpLT5JbnN0YW5jZS0+RFIpOworICAvKiBUbyBhdm9pZCBHQ0Mgd2FybmluZyAqLworICBVTlVTRUQodG1wcmVnKTsKIAogICAvKiBEaXNhYmxlIFJYTkUgYW5kIEVSUiBpbnRlcnJ1cHQgKi8KICAgX19IQUxfU1BJX0RJU0FCTEVfSVQoaHNwaSwgKFNQSV9JVF9SWE5FIHwgU1BJX0lUX0VSUikpOwpAQCAtMzE5MSw4ICszMjUxLDEyIEBACiAgICovCiBzdGF0aWMgdm9pZCBTUElfMmxpbmVzUnhJU1JfMTZCSVRDUkMoc3RydWN0IF9fU1BJX0hhbmRsZVR5cGVEZWYgKmhzcGkpCiB7Ci0gIC8qIFJlYWQgMTZiaXQgQ1JDIHRvIGZsdXNoIERhdGEgUmVnc2l0ZXIgKi8KLSAgUkVBRF9SRUcoaHNwaS0+SW5zdGFuY2UtPkRSKTsKKyAgX19JTyB1aW50MzJfdCB0bXByZWcgPSAwVTsKKworICAvKiBSZWFkIDE2Yml0IENSQyB0byBmbHVzaCBEYXRhIFJlZ2lzdGVyICovCisgIHRtcHJlZyA9IFJFQURfUkVHKGhzcGktPkluc3RhbmNlLT5EUik7CisgIC8qIFRvIGF2b2lkIEdDQyB3YXJuaW5nICovCisgIFVOVVNFRCh0bXByZWcpOyAgCiAKICAgLyogRGlzYWJsZSBSWE5FIGludGVycnVwdCAqLwogICBfX0hBTF9TUElfRElTQUJMRV9JVChoc3BpLCBTUElfSVRfUlhORSk7CkBAIC0zMjQ3LDggKzMzMTEsMTIgQEAKICAgKi8KIHN0YXRpYyB2b2lkIFNQSV9SeElTUl84QklUQ1JDKHN0cnVjdCBfX1NQSV9IYW5kbGVUeXBlRGVmICpoc3BpKQogeworICBfX0lPIHVpbnQzMl90IHRtcHJlZyA9IDBVOworCiAgIC8qIFJlYWQgOGJpdCBDUkMgdG8gZmx1c2ggRGF0YSBSZWdpc3RlciAqLwotICBSRUFEX1JFRygqKF9fSU8gdWludDhfdCAqKSZoc3BpLT5JbnN0YW5jZS0+RFIpOworICB0bXByZWcgPSBSRUFEX1JFRygqKF9fSU8gdWludDhfdCAqKSZoc3BpLT5JbnN0YW5jZS0+RFIpOworICAvKiBUbyBhdm9pZCBHQ0Mgd2FybmluZyAqLworICBVTlVTRUQodG1wcmVnKTsKIAogICBTUElfQ2xvc2VSeF9JU1IoaHNwaSk7CiB9CkBAIC0zMjk2LDggKzMzNjQsMTIgQEAKICAgKi8KIHN0YXRpYyB2b2lkIFNQSV9SeElTUl8xNkJJVENSQyhzdHJ1Y3QgX19TUElfSGFuZGxlVHlwZURlZiAqaHNwaSkKIHsKKyAgX19JTyB1aW50MzJfdCB0bXByZWcgPSAwVTsKKwogICAvKiBSZWFkIDE2Yml0IENSQyB0byBmbHVzaCBEYXRhIFJlZ2lzdGVyICovCi0gIFJFQURfUkVHKGhzcGktPkluc3RhbmNlLT5EUik7CisgIHRtcHJlZyA9IFJFQURfUkVHKGhzcGktPkluc3RhbmNlLT5EUik7CisgIC8qIFRvIGF2b2lkIEdDQyB3YXJuaW5nICovCisgIFVOVVNFRCh0bXByZWcpOwogCiAgIC8qIERpc2FibGUgUlhORSBhbmQgRVJSIGludGVycnVwdCAqLwogICBfX0hBTF9TUElfRElTQUJMRV9JVChoc3BpLCAoU1BJX0lUX1JYTkUgfCBTUElfSVRfRVJSKSk7CkBAIC0zNDAzLDE1ICszNDc1LDI2IEBACiBzdGF0aWMgSEFMX1N0YXR1c1R5cGVEZWYgU1BJX1dhaXRGbGFnU3RhdGVVbnRpbFRpbWVvdXQoU1BJX0hhbmRsZVR5cGVEZWYgKmhzcGksIHVpbnQzMl90IEZsYWcsIEZsYWdTdGF0dXMgU3RhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgVGltZW91dCwgdWludDMyX3QgVGlja3N0YXJ0KQogeworICBfX0lPIHVpbnQzMl90IGNvdW50OworICB1aW50MzJfdCB0bXBfdGltZW91dDsKKyAgdWludDMyX3QgdG1wX3RpY2tzdGFydDsKKworICAvKiBBZGp1c3QgVGltZW91dCB2YWx1ZSAgaW4gY2FzZSBvZiBlbmQgb2YgdHJhbnNmZXIgKi8KKyAgdG1wX3RpbWVvdXQgICA9IFRpbWVvdXQgLSAoSEFMX0dldFRpY2soKSAtIFRpY2tzdGFydCk7CisgIHRtcF90aWNrc3RhcnQgPSBIQUxfR2V0VGljaygpOworCisgIC8qIENhbGN1bGF0ZSBUaW1lb3V0IGJhc2VkIG9uIGEgc29mdHdhcmUgbG9vcCB0byBhdm9pZCBibG9ja2luZyBpc3N1ZSBpZiBTeXN0aWNrIGlzIGRpc2FibGVkICovCisgIGNvdW50ID0gdG1wX3RpbWVvdXQgKiAoKFN5c3RlbUNvcmVDbG9jayAqIDMyVSkgPj4gMjBVKTsKKwogICB3aGlsZSAoKF9fSEFMX1NQSV9HRVRfRkxBRyhoc3BpLCBGbGFnKSA/IFNFVCA6IFJFU0VUKSAhPSBTdGF0ZSkKICAgewogICAgIGlmIChUaW1lb3V0ICE9IEhBTF9NQVhfREVMQVkpCiAgICAgewotICAgICAgaWYgKCgoSEFMX0dldFRpY2soKSAtIFRpY2tzdGFydCkgPj0gVGltZW91dCkgfHwgKFRpbWVvdXQgPT0gMFUpKQorICAgICAgaWYgKCgoSEFMX0dldFRpY2soKSAtIHRtcF90aWNrc3RhcnQpID49IHRtcF90aW1lb3V0KSB8fCAodG1wX3RpbWVvdXQgPT0gMFUpKQogICAgICAgewogICAgICAgICAvKiBEaXNhYmxlIHRoZSBTUEkgYW5kIHJlc2V0IHRoZSBDUkM6IHRoZSBDUkMgdmFsdWUgc2hvdWxkIGJlIGNsZWFyZWQKLSAgICAgICAgb24gYm90aCBtYXN0ZXIgYW5kIHNsYXZlIHNpZGVzIGluIG9yZGVyIHRvIHJlc3luY2hyb25pemUgdGhlIG1hc3RlcgotICAgICAgICBhbmQgc2xhdmUgZm9yIHRoZWlyIHJlc3BlY3RpdmUgQ1JDIGNhbGN1bGF0aW9uICovCisgICAgICAgICAgIG9uIGJvdGggbWFzdGVyIGFuZCBzbGF2ZSBzaWRlcyBpbiBvcmRlciB0byByZXN5bmNocm9uaXplIHRoZSBtYXN0ZXIKKyAgICAgICAgICAgYW5kIHNsYXZlIGZvciB0aGVpciByZXNwZWN0aXZlIENSQyBjYWxjdWxhdGlvbiAqLwogCiAgICAgICAgIC8qIERpc2FibGUgVFhFLCBSWE5FIGFuZCBFUlIgaW50ZXJydXB0cyBmb3IgdGhlIGludGVycnVwdCBwcm9jZXNzICovCiAgICAgICAgIF9fSEFMX1NQSV9ESVNBQkxFX0lUKGhzcGksIChTUElfSVRfVFhFIHwgU1BJX0lUX1JYTkUgfCBTUElfSVRfRVJSKSk7CkBAIC0zNDM2LDYgKzM1MTksMTIgQEAKIAogICAgICAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CiAgICAgICB9CisgICAgICAvKiBJZiBTeXN0aWNrIGlzIGRpc2FibGVkIG9yIG5vdCBpbmNyZW1lbnRlZCwgZGVhY3RpdmF0ZSB0aW1lb3V0IHRvIGdvIGluIGRpc2FibGUgbG9vcCBwcm9jZWR1cmUgKi8KKyAgICAgIGlmKGNvdW50ID09IDBVKQorICAgICAgeworICAgICAgICB0bXBfdGltZW91dCA9IDBVOworICAgICAgfQorICAgICAgY291bnQtLTsKICAgICB9CiAgIH0KIApAQCAtMzU0NSw3ICszNjM0LDcgQEAKICAgdWludDMyX3QgdGlja3N0YXJ0OwogICBfX0lPIHVpbnQzMl90IGNvdW50ID0gU1BJX0RFRkFVTFRfVElNRU9VVCAqIChTeXN0ZW1Db3JlQ2xvY2sgLyAyNFUgLyAxMDAwVSk7CiAKLSAgLyogSW5pdCB0aWNrc3RhcnQgZm9yIHRpbWVvdXQgbWFuYWdtZW50Ki8KKyAgLyogSW5pdCB0aWNrc3RhcnQgZm9yIHRpbWVvdXQgbWFuYWdlbWVudCAqLwogICB0aWNrc3RhcnQgPSBIQUxfR2V0VGljaygpOwogCiAgIC8qIERpc2FibGUgRVJSIGludGVycnVwdCAqLwpAQCAtMzc2MSw2ICszODUwLDcgQEAKICAgKi8KIHN0YXRpYyB2b2lkIFNQSV9BYm9ydFJ4X0lTUihTUElfSGFuZGxlVHlwZURlZiAqaHNwaSkKIHsKKyAgX19JTyB1aW50MzJfdCB0bXByZWcgPSAwVTsKICAgX19JTyB1aW50MzJfdCBjb3VudCA9IFNQSV9ERUZBVUxUX1RJTUVPVVQgKiAoU3lzdGVtQ29yZUNsb2NrIC8gMjRVIC8gMTAwMFUpOwogCiAgIC8qIFdhaXQgdW50aWwgVFhFIGZsYWcgaXMgc2V0ICovCkBAIC0zNzgwLDggKzM4NzAsMTAgQEAKICAgLyogRGlzYWJsZSBUWEVJRSwgUlhORUlFIGFuZCBFUlJJRShtb2RlIGZhdWx0IGV2ZW50LCBvdmVycnVuIGVycm9yLCBUSSBmcmFtZSBlcnJvcikgaW50ZXJydXB0cyAqLwogICBDTEVBUl9CSVQoaHNwaS0+SW5zdGFuY2UtPkNSMiwgKFNQSV9DUjJfVFhFSUUgfCBTUElfQ1IyX1JYTkVJRSB8IFNQSV9DUjJfRVJSSUUpKTsKIAotICAvKiBSZWFkIENSQyB0byBmbHVzaCBEYXRhIFJlZ2lzdGVyICovCi0gIFJFQURfUkVHKGhzcGktPkluc3RhbmNlLT5EUik7CisgIC8qIEZsdXNoIERhdGEgUmVnaXN0ZXIgYnkgYSBibGFuayByZWFkICovCisgIHRtcHJlZyA9IFJFQURfUkVHKGhzcGktPkluc3RhbmNlLT5EUik7CisgIC8qIFRvIGF2b2lkIEdDQyB3YXJuaW5nICovCisgIFVOVVNFRCh0bXByZWcpOwogCiAgIGhzcGktPlN0YXRlID0gSEFMX1NQSV9TVEFURV9BQk9SVDsKIH0KZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmY0eHhfaGFsX3RpbS5jIGIvU3JjL3N0bTMyZjR4eF9oYWxfdGltLmMKaW5kZXggZWI5OGQ1Ny4uNDUxYzYyZCAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZjR4eF9oYWxfdGltLmMKKysrIGIvU3JjL3N0bTMyZjR4eF9oYWxfdGltLmMKQEAgLTE5OCw3ICsxOTgsNyBAQAogCiAvKiBQcml2YXRlIHR5cGVkZWYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyogUHJpdmF0ZSBkZWZpbmUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qIFByaXZhdGUgbWFjcm8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBQcml2YXRlIG1hY3JvcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyogUHJpdmF0ZSB2YXJpYWJsZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qIFByaXZhdGUgZnVuY3Rpb24gcHJvdG90eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiogQGFkZHRvZ3JvdXAgVElNX1ByaXZhdGVfRnVuY3Rpb25zCkBAIC0yMTgsNiArMjE4LDcgQEAKIHN0YXRpYyB2b2lkIFRJTV9JVFJ4X1NldENvbmZpZyhUSU1fVHlwZURlZiAqVElNeCwgdWludDMyX3QgSW5wdXRUcmlnZ2VyU291cmNlKTsKIHN0YXRpYyB2b2lkIFRJTV9ETUFQZXJpb2RFbGFwc2VkQ3BsdChETUFfSGFuZGxlVHlwZURlZiAqaGRtYSk7CiBzdGF0aWMgdm9pZCBUSU1fRE1BUGVyaW9kRWxhcHNlZEhhbGZDcGx0KERNQV9IYW5kbGVUeXBlRGVmICpoZG1hKTsKK3N0YXRpYyB2b2lkIFRJTV9ETUFEZWxheVB1bHNlQ3BsdChETUFfSGFuZGxlVHlwZURlZiAqaGRtYSk7CiBzdGF0aWMgdm9pZCBUSU1fRE1BVHJpZ2dlckNwbHQoRE1BX0hhbmRsZVR5cGVEZWYgKmhkbWEpOwogc3RhdGljIHZvaWQgVElNX0RNQVRyaWdnZXJIYWxmQ3BsdChETUFfSGFuZGxlVHlwZURlZiAqaGRtYSk7CiBzdGF0aWMgSEFMX1N0YXR1c1R5cGVEZWYgVElNX1NsYXZlVGltZXJfU2V0Q29uZmlnKFRJTV9IYW5kbGVUeXBlRGVmICpodGltLApAQCAtMzAzLDYgKzMwNCwxMyBAQAogICAvKiBTZXQgdGhlIFRpbWUgQmFzZSBjb25maWd1cmF0aW9uICovCiAgIFRJTV9CYXNlX1NldENvbmZpZyhodGltLT5JbnN0YW5jZSwgJmh0aW0tPkluaXQpOwogCisgIC8qIEluaXRpYWxpemUgdGhlIERNQSBidXJzdCBvcGVyYXRpb24gc3RhdGUgKi8KKyAgaHRpbS0+RE1BQnVyc3RTdGF0ZSA9IEhBTF9ETUFfQlVSU1RfU1RBVEVfUkVBRFk7CisKKyAgLyogSW5pdGlhbGl6ZSB0aGUgVElNIGNoYW5uZWxzIHN0YXRlICovCisgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVF9BTEwoaHRpbSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVRfQUxMKGh0aW0sIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisKICAgLyogSW5pdGlhbGl6ZSB0aGUgVElNIHN0YXRlKi8KICAgaHRpbS0+U3RhdGUgPSBIQUxfVElNX1NUQVRFX1JFQURZOwogCkBAIC0zMzYsNiArMzQ0LDEzIEBACiAgIEhBTF9USU1fQmFzZV9Nc3BEZUluaXQoaHRpbSk7CiAjZW5kaWYgLyogVVNFX0hBTF9USU1fUkVHSVNURVJfQ0FMTEJBQ0tTICovCiAKKyAgLyogQ2hhbmdlIHRoZSBETUEgYnVyc3Qgb3BlcmF0aW9uIHN0YXRlICovCisgIGh0aW0tPkRNQUJ1cnN0U3RhdGUgPSBIQUxfRE1BX0JVUlNUX1NUQVRFX1JFU0VUOworCisgIC8qIENoYW5nZSB0aGUgVElNIGNoYW5uZWxzIHN0YXRlICovCisgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVF9BTEwoaHRpbSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFU0VUKTsKKyAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVRfQUxMKGh0aW0sIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRVNFVCk7CisKICAgLyogQ2hhbmdlIFRJTSBzdGF0ZSAqLwogICBodGltLT5TdGF0ZSA9IEhBTF9USU1fU1RBVEVfUkVTRVQ7CiAKQEAgLTM4OCwxOSArNDAzLDI5IEBACiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19USU1fSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKTsKIAorICAvKiBDaGVjayB0aGUgVElNIHN0YXRlICovCisgIGlmIChodGltLT5TdGF0ZSAhPSBIQUxfVElNX1NUQVRFX1JFQURZKQorICB7CisgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgfQorCiAgIC8qIFNldCB0aGUgVElNIHN0YXRlICovCiAgIGh0aW0tPlN0YXRlID0gSEFMX1RJTV9TVEFURV9CVVNZOwogCiAgIC8qIEVuYWJsZSB0aGUgUGVyaXBoZXJhbCwgZXhjZXB0IGluIHRyaWdnZXIgbW9kZSB3aGVyZSBlbmFibGUgaXMgYXV0b21hdGljYWxseSBkb25lIHdpdGggdHJpZ2dlciAqLwotICB0bXBzbWNyID0gaHRpbS0+SW5zdGFuY2UtPlNNQ1IgJiBUSU1fU01DUl9TTVM7Ci0gIGlmICghSVNfVElNX1NMQVZFTU9ERV9UUklHR0VSX0VOQUJMRUQodG1wc21jcikpCisgIGlmIChJU19USU1fU0xBVkVfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKQorICB7CisgICAgdG1wc21jciA9IGh0aW0tPkluc3RhbmNlLT5TTUNSICYgVElNX1NNQ1JfU01TOworICAgIGlmICghSVNfVElNX1NMQVZFTU9ERV9UUklHR0VSX0VOQUJMRUQodG1wc21jcikpCisgICAgeworICAgICAgX19IQUxfVElNX0VOQUJMRShodGltKTsKKyAgICB9CisgIH0KKyAgZWxzZQogICB7CiAgICAgX19IQUxfVElNX0VOQUJMRShodGltKTsKICAgfQogCi0gIC8qIENoYW5nZSB0aGUgVElNIHN0YXRlKi8KLSAgaHRpbS0+U3RhdGUgPSBIQUxfVElNX1NUQVRFX1JFQURZOwotCiAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KICAgcmV0dXJuIEhBTF9PSzsKIH0KQEAgLTQxNSwxMyArNDQwLDEwIEBACiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19USU1fSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKTsKIAotICAvKiBTZXQgdGhlIFRJTSBzdGF0ZSAqLwotICBodGltLT5TdGF0ZSA9IEhBTF9USU1fU1RBVEVfQlVTWTsKLQogICAvKiBEaXNhYmxlIHRoZSBQZXJpcGhlcmFsICovCiAgIF9fSEFMX1RJTV9ESVNBQkxFKGh0aW0pOwogCi0gIC8qIENoYW5nZSB0aGUgVElNIHN0YXRlKi8KKyAgLyogU2V0IHRoZSBUSU0gc3RhdGUgKi8KICAgaHRpbS0+U3RhdGUgPSBIQUxfVElNX1NUQVRFX1JFQURZOwogCiAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KQEAgLTQ0MCwxMiArNDYyLDI4IEBACiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19USU1fSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKTsKIAorICAvKiBDaGVjayB0aGUgVElNIHN0YXRlICovCisgIGlmIChodGltLT5TdGF0ZSAhPSBIQUxfVElNX1NUQVRFX1JFQURZKQorICB7CisgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgfQorCisgIC8qIFNldCB0aGUgVElNIHN0YXRlICovCisgIGh0aW0tPlN0YXRlID0gSEFMX1RJTV9TVEFURV9CVVNZOworCiAgIC8qIEVuYWJsZSB0aGUgVElNIFVwZGF0ZSBpbnRlcnJ1cHQgKi8KICAgX19IQUxfVElNX0VOQUJMRV9JVChodGltLCBUSU1fSVRfVVBEQVRFKTsKIAogICAvKiBFbmFibGUgdGhlIFBlcmlwaGVyYWwsIGV4Y2VwdCBpbiB0cmlnZ2VyIG1vZGUgd2hlcmUgZW5hYmxlIGlzIGF1dG9tYXRpY2FsbHkgZG9uZSB3aXRoIHRyaWdnZXIgKi8KLSAgdG1wc21jciA9IGh0aW0tPkluc3RhbmNlLT5TTUNSICYgVElNX1NNQ1JfU01TOwotICBpZiAoIUlTX1RJTV9TTEFWRU1PREVfVFJJR0dFUl9FTkFCTEVEKHRtcHNtY3IpKQorICBpZiAoSVNfVElNX1NMQVZFX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSkKKyAgeworICAgIHRtcHNtY3IgPSBodGltLT5JbnN0YW5jZS0+U01DUiAmIFRJTV9TTUNSX1NNUzsKKyAgICBpZiAoIUlTX1RJTV9TTEFWRU1PREVfVFJJR0dFUl9FTkFCTEVEKHRtcHNtY3IpKQorICAgIHsKKyAgICAgIF9fSEFMX1RJTV9FTkFCTEUoaHRpbSk7CisgICAgfQorICB9CisgIGVsc2UKICAgewogICAgIF9fSEFMX1RJTV9FTkFCTEUoaHRpbSk7CiAgIH0KQEAgLTQ2MywxMiArNTAxLDE2IEBACiB7CiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19USU1fSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKTsKKwogICAvKiBEaXNhYmxlIHRoZSBUSU0gVXBkYXRlIGludGVycnVwdCAqLwogICBfX0hBTF9USU1fRElTQUJMRV9JVChodGltLCBUSU1fSVRfVVBEQVRFKTsKIAogICAvKiBEaXNhYmxlIHRoZSBQZXJpcGhlcmFsICovCiAgIF9fSEFMX1RJTV9ESVNBQkxFKGh0aW0pOwogCisgIC8qIFNldCB0aGUgVElNIHN0YXRlICovCisgIGh0aW0tPlN0YXRlID0gSEFMX1RJTV9TVEFURV9SRUFEWTsKKwogICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCiAgIHJldHVybiBIQUxfT0s7CiB9CkBAIC00ODcsNiArNTI5LDcgQEAKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9ETUFfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKTsKIAorICAvKiBTZXQgdGhlIFRJTSBzdGF0ZSAqLwogICBpZiAoaHRpbS0+U3RhdGUgPT0gSEFMX1RJTV9TVEFURV9CVVNZKQogICB7CiAgICAgcmV0dXJuIEhBTF9CVVNZOwpAQCAtNTA0LDcgKzU0Nyw3IEBACiAgIH0KICAgZWxzZQogICB7Ci0gICAgLyogbm90aGluZyB0byBkbyAqLworICAgIHJldHVybiBIQUxfRVJST1I7CiAgIH0KIAogICAvKiBTZXQgdGhlIERNQSBQZXJpb2QgZWxhcHNlZCBjYWxsYmFja3MgKi8KQEAgLTUxNyw2ICs1NjAsNyBAQAogICAvKiBFbmFibGUgdGhlIERNQSBzdHJlYW0gKi8KICAgaWYgKEhBTF9ETUFfU3RhcnRfSVQoaHRpbS0+aGRtYVtUSU1fRE1BX0lEX1VQREFURV0sICh1aW50MzJfdClwRGF0YSwgKHVpbnQzMl90KSZodGltLT5JbnN0YW5jZS0+QVJSLCBMZW5ndGgpICE9IEhBTF9PSykKICAgeworICAgIC8qIFJldHVybiBlcnJvciBzdGF0dXMgKi8KICAgICByZXR1cm4gSEFMX0VSUk9SOwogICB9CiAKQEAgLTUyNCw4ICs1NjgsMTUgQEAKICAgX19IQUxfVElNX0VOQUJMRV9ETUEoaHRpbSwgVElNX0RNQV9VUERBVEUpOwogCiAgIC8qIEVuYWJsZSB0aGUgUGVyaXBoZXJhbCwgZXhjZXB0IGluIHRyaWdnZXIgbW9kZSB3aGVyZSBlbmFibGUgaXMgYXV0b21hdGljYWxseSBkb25lIHdpdGggdHJpZ2dlciAqLwotICB0bXBzbWNyID0gaHRpbS0+SW5zdGFuY2UtPlNNQ1IgJiBUSU1fU01DUl9TTVM7Ci0gIGlmICghSVNfVElNX1NMQVZFTU9ERV9UUklHR0VSX0VOQUJMRUQodG1wc21jcikpCisgIGlmIChJU19USU1fU0xBVkVfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKQorICB7CisgICAgdG1wc21jciA9IGh0aW0tPkluc3RhbmNlLT5TTUNSICYgVElNX1NNQ1JfU01TOworICAgIGlmICghSVNfVElNX1NMQVZFTU9ERV9UUklHR0VSX0VOQUJMRUQodG1wc21jcikpCisgICAgeworICAgICAgX19IQUxfVElNX0VOQUJMRShodGltKTsKKyAgICB9CisgIH0KKyAgZWxzZQogICB7CiAgICAgX19IQUxfVElNX0VOQUJMRShodGltKTsKICAgfQpAQCAtNTUyLDcgKzYwMyw3IEBACiAgIC8qIERpc2FibGUgdGhlIFBlcmlwaGVyYWwgKi8KICAgX19IQUxfVElNX0RJU0FCTEUoaHRpbSk7CiAKLSAgLyogQ2hhbmdlIHRoZSBodGltIHN0YXRlICovCisgIC8qIFNldCB0aGUgVElNIHN0YXRlICovCiAgIGh0aW0tPlN0YXRlID0gSEFMX1RJTV9TVEFURV9SRUFEWTsKIAogICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCkBAIC02MzUsNiArNjg2LDEzIEBACiAgIC8qIEluaXQgdGhlIGJhc2UgdGltZSBmb3IgdGhlIE91dHB1dCBDb21wYXJlICovCiAgIFRJTV9CYXNlX1NldENvbmZpZyhodGltLT5JbnN0YW5jZSwgICZodGltLT5Jbml0KTsKIAorICAvKiBJbml0aWFsaXplIHRoZSBETUEgYnVyc3Qgb3BlcmF0aW9uIHN0YXRlICovCisgIGh0aW0tPkRNQUJ1cnN0U3RhdGUgPSBIQUxfRE1BX0JVUlNUX1NUQVRFX1JFQURZOworCisgIC8qIEluaXRpYWxpemUgdGhlIFRJTSBjaGFubmVscyBzdGF0ZSAqLworICBUSU1fQ0hBTk5FTF9TVEFURV9TRVRfQUxMKGh0aW0sIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUX0FMTChodGltLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworCiAgIC8qIEluaXRpYWxpemUgdGhlIFRJTSBzdGF0ZSovCiAgIGh0aW0tPlN0YXRlID0gSEFMX1RJTV9TVEFURV9SRUFEWTsKIApAQCAtNjY4LDYgKzcyNiwxMyBAQAogICBIQUxfVElNX09DX01zcERlSW5pdChodGltKTsKICNlbmRpZiAvKiBVU0VfSEFMX1RJTV9SRUdJU1RFUl9DQUxMQkFDS1MgKi8KIAorICAvKiBDaGFuZ2UgdGhlIERNQSBidXJzdCBvcGVyYXRpb24gc3RhdGUgKi8KKyAgaHRpbS0+RE1BQnVyc3RTdGF0ZSA9IEhBTF9ETUFfQlVSU1RfU1RBVEVfUkVTRVQ7CisKKyAgLyogQ2hhbmdlIHRoZSBUSU0gY2hhbm5lbHMgc3RhdGUgKi8KKyAgVElNX0NIQU5ORUxfU1RBVEVfU0VUX0FMTChodGltLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVTRVQpOworICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVF9BTEwoaHRpbSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFU0VUKTsKKwogICAvKiBDaGFuZ2UgVElNIHN0YXRlICovCiAgIGh0aW0tPlN0YXRlID0gSEFMX1RJTV9TVEFURV9SRVNFVDsKIApAQCAtNzI1LDYgKzc5MCwxNSBAQAogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0NDWF9JTlNUQU5DRShodGltLT5JbnN0YW5jZSwgQ2hhbm5lbCkpOwogCisgIC8qIENoZWNrIHRoZSBUSU0gY2hhbm5lbCBzdGF0ZSAqLworICBpZiAoVElNX0NIQU5ORUxfU1RBVEVfR0VUKGh0aW0sIENoYW5uZWwpICE9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkKKyAgeworICAgIHJldHVybiBIQUxfRVJST1I7CisgIH0KKworICAvKiBTZXQgdGhlIFRJTSBjaGFubmVsIHN0YXRlICovCisgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBDaGFubmVsLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSk7CisKICAgLyogRW5hYmxlIHRoZSBPdXRwdXQgY29tcGFyZSBjaGFubmVsICovCiAgIFRJTV9DQ3hDaGFubmVsQ21kKGh0aW0tPkluc3RhbmNlLCBDaGFubmVsLCBUSU1fQ0N4X0VOQUJMRSk7CiAKQEAgLTczNSw4ICs4MDksMTUgQEAKICAgfQogCiAgIC8qIEVuYWJsZSB0aGUgUGVyaXBoZXJhbCwgZXhjZXB0IGluIHRyaWdnZXIgbW9kZSB3aGVyZSBlbmFibGUgaXMgYXV0b21hdGljYWxseSBkb25lIHdpdGggdHJpZ2dlciAqLwotICB0bXBzbWNyID0gaHRpbS0+SW5zdGFuY2UtPlNNQ1IgJiBUSU1fU01DUl9TTVM7Ci0gIGlmICghSVNfVElNX1NMQVZFTU9ERV9UUklHR0VSX0VOQUJMRUQodG1wc21jcikpCisgIGlmIChJU19USU1fU0xBVkVfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKQorICB7CisgICAgdG1wc21jciA9IGh0aW0tPkluc3RhbmNlLT5TTUNSICYgVElNX1NNQ1JfU01TOworICAgIGlmICghSVNfVElNX1NMQVZFTU9ERV9UUklHR0VSX0VOQUJMRUQodG1wc21jcikpCisgICAgeworICAgICAgX19IQUxfVElNX0VOQUJMRShodGltKTsKKyAgICB9CisgIH0KKyAgZWxzZQogICB7CiAgICAgX19IQUxfVElNX0VOQUJMRShodGltKTsKICAgfQpAQCAtNzczLDYgKzg1NCw5IEBACiAgIC8qIERpc2FibGUgdGhlIFBlcmlwaGVyYWwgKi8KICAgX19IQUxfVElNX0RJU0FCTEUoaHRpbSk7CiAKKyAgLyogU2V0IHRoZSBUSU0gY2hhbm5lbCBzdGF0ZSAqLworICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgQ2hhbm5lbCwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKwogICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCiAgIHJldHVybiBIQUxfT0s7CiB9CkBAIC03OTUsNiArODc5LDE1IEBACiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19USU1fQ0NYX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlLCBDaGFubmVsKSk7CiAKKyAgLyogQ2hlY2sgdGhlIFRJTSBjaGFubmVsIHN0YXRlICovCisgIGlmIChUSU1fQ0hBTk5FTF9TVEFURV9HRVQoaHRpbSwgQ2hhbm5lbCkgIT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQorICB7CisgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgfQorCisgIC8qIFNldCB0aGUgVElNIGNoYW5uZWwgc3RhdGUgKi8KKyAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIENoYW5uZWwsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKTsKKwogICBzd2l0Y2ggKENoYW5uZWwpCiAgIHsKICAgICBjYXNlIFRJTV9DSEFOTkVMXzE6CkBAIC04MzksOCArOTMyLDE1IEBACiAgIH0KIAogICAvKiBFbmFibGUgdGhlIFBlcmlwaGVyYWwsIGV4Y2VwdCBpbiB0cmlnZ2VyIG1vZGUgd2hlcmUgZW5hYmxlIGlzIGF1dG9tYXRpY2FsbHkgZG9uZSB3aXRoIHRyaWdnZXIgKi8KLSAgdG1wc21jciA9IGh0aW0tPkluc3RhbmNlLT5TTUNSICYgVElNX1NNQ1JfU01TOwotICBpZiAoIUlTX1RJTV9TTEFWRU1PREVfVFJJR0dFUl9FTkFCTEVEKHRtcHNtY3IpKQorICBpZiAoSVNfVElNX1NMQVZFX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSkKKyAgeworICAgIHRtcHNtY3IgPSBodGltLT5JbnN0YW5jZS0+U01DUiAmIFRJTV9TTUNSX1NNUzsKKyAgICBpZiAoIUlTX1RJTV9TTEFWRU1PREVfVFJJR0dFUl9FTkFCTEVEKHRtcHNtY3IpKQorICAgIHsKKyAgICAgIF9fSEFMX1RJTV9FTkFCTEUoaHRpbSk7CisgICAgfQorICB9CisgIGVsc2UKICAgewogICAgIF9fSEFMX1RJTV9FTkFCTEUoaHRpbSk7CiAgIH0KQEAgLTkxMSw2ICsxMDExLDkgQEAKICAgLyogRGlzYWJsZSB0aGUgUGVyaXBoZXJhbCAqLwogICBfX0hBTF9USU1fRElTQUJMRShodGltKTsKIAorICAvKiBTZXQgdGhlIFRJTSBjaGFubmVsIHN0YXRlICovCisgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBDaGFubmVsLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworCiAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KICAgcmV0dXJuIEhBTF9PSzsKIH0KQEAgLTkzNSwxMSArMTAzOCwxMiBAQAogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0NDWF9JTlNUQU5DRShodGltLT5JbnN0YW5jZSwgQ2hhbm5lbCkpOwogCi0gIGlmIChodGltLT5TdGF0ZSA9PSBIQUxfVElNX1NUQVRFX0JVU1kpCisgIC8qIFNldCB0aGUgVElNIGNoYW5uZWwgc3RhdGUgKi8KKyAgaWYgKFRJTV9DSEFOTkVMX1NUQVRFX0dFVChodGltLCBDaGFubmVsKSA9PSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSkKICAgewogICAgIHJldHVybiBIQUxfQlVTWTsKICAgfQotICBlbHNlIGlmIChodGltLT5TdGF0ZSA9PSBIQUxfVElNX1NUQVRFX1JFQURZKQorICBlbHNlIGlmIChUSU1fQ0hBTk5FTF9TVEFURV9HRVQoaHRpbSwgQ2hhbm5lbCkgPT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQogICB7CiAgICAgaWYgKChwRGF0YSA9PSBOVUxMKSAmJiAoTGVuZ3RoID4gMFUpKQogICAgIHsKQEAgLTk0NywxMiArMTA1MSwxMiBAQAogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgaHRpbS0+U3RhdGUgPSBIQUxfVElNX1NUQVRFX0JVU1k7CisgICAgICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgQ2hhbm5lbCwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpOwogICAgIH0KICAgfQogICBlbHNlCiAgIHsKLSAgICAvKiBub3RoaW5nIHRvIGRvICovCisgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgfQogCiAgIHN3aXRjaCAoQ2hhbm5lbCkKQEAgLTk2OSw2ICsxMDczLDcgQEAKICAgICAgIC8qIEVuYWJsZSB0aGUgRE1BIHN0cmVhbSAqLwogICAgICAgaWYgKEhBTF9ETUFfU3RhcnRfSVQoaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDMV0sICh1aW50MzJfdClwRGF0YSwgKHVpbnQzMl90KSZodGltLT5JbnN0YW5jZS0+Q0NSMSwgTGVuZ3RoKSAhPSBIQUxfT0spCiAgICAgICB7CisgICAgICAgIC8qIFJldHVybiBlcnJvciBzdGF0dXMgKi8KICAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICAgIH0KIApAQCAtOTg5LDYgKzEwOTQsNyBAQAogICAgICAgLyogRW5hYmxlIHRoZSBETUEgc3RyZWFtICovCiAgICAgICBpZiAoSEFMX0RNQV9TdGFydF9JVChodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MyXSwgKHVpbnQzMl90KXBEYXRhLCAodWludDMyX3QpJmh0aW0tPkluc3RhbmNlLT5DQ1IyLCBMZW5ndGgpICE9IEhBTF9PSykKICAgICAgIHsKKyAgICAgICAgLyogUmV0dXJuIGVycm9yIHN0YXR1cyAqLwogICAgICAgICByZXR1cm4gSEFMX0VSUk9SOwogICAgICAgfQogCkBAIC0xMDA5LDYgKzExMTUsNyBAQAogICAgICAgLyogRW5hYmxlIHRoZSBETUEgc3RyZWFtICovCiAgICAgICBpZiAoSEFMX0RNQV9TdGFydF9JVChodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MzXSwgKHVpbnQzMl90KXBEYXRhLCAodWludDMyX3QpJmh0aW0tPkluc3RhbmNlLT5DQ1IzLCBMZW5ndGgpICE9IEhBTF9PSykKICAgICAgIHsKKyAgICAgICAgLyogUmV0dXJuIGVycm9yIHN0YXR1cyAqLwogICAgICAgICByZXR1cm4gSEFMX0VSUk9SOwogICAgICAgfQogICAgICAgLyogRW5hYmxlIHRoZSBUSU0gQ2FwdHVyZS9Db21wYXJlIDMgRE1BIHJlcXVlc3QgKi8KQEAgLTEwMjgsNiArMTEzNSw3IEBACiAgICAgICAvKiBFbmFibGUgdGhlIERNQSBzdHJlYW0gKi8KICAgICAgIGlmIChIQUxfRE1BX1N0YXJ0X0lUKGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzRdLCAodWludDMyX3QpcERhdGEsICh1aW50MzJfdCkmaHRpbS0+SW5zdGFuY2UtPkNDUjQsIExlbmd0aCkgIT0gSEFMX09LKQogICAgICAgeworICAgICAgICAvKiBSZXR1cm4gZXJyb3Igc3RhdHVzICovCiAgICAgICAgIHJldHVybiBIQUxfRVJST1I7CiAgICAgICB9CiAgICAgICAvKiBFbmFibGUgdGhlIFRJTSBDYXB0dXJlL0NvbXBhcmUgNCBETUEgcmVxdWVzdCAqLwpAQCAtMTA0OSw4ICsxMTU3LDE1IEBACiAgIH0KIAogICAvKiBFbmFibGUgdGhlIFBlcmlwaGVyYWwsIGV4Y2VwdCBpbiB0cmlnZ2VyIG1vZGUgd2hlcmUgZW5hYmxlIGlzIGF1dG9tYXRpY2FsbHkgZG9uZSB3aXRoIHRyaWdnZXIgKi8KLSAgdG1wc21jciA9IGh0aW0tPkluc3RhbmNlLT5TTUNSICYgVElNX1NNQ1JfU01TOwotICBpZiAoIUlTX1RJTV9TTEFWRU1PREVfVFJJR0dFUl9FTkFCTEVEKHRtcHNtY3IpKQorICBpZiAoSVNfVElNX1NMQVZFX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSkKKyAgeworICAgIHRtcHNtY3IgPSBodGltLT5JbnN0YW5jZS0+U01DUiAmIFRJTV9TTUNSX1NNUzsKKyAgICBpZiAoIUlTX1RJTV9TTEFWRU1PREVfVFJJR0dFUl9FTkFCTEVEKHRtcHNtY3IpKQorICAgIHsKKyAgICAgIF9fSEFMX1RJTV9FTkFCTEUoaHRpbSk7CisgICAgfQorICB9CisgIGVsc2UKICAgewogICAgIF9fSEFMX1RJTV9FTkFCTEUoaHRpbSk7CiAgIH0KQEAgLTExMjUsOCArMTI0MCw4IEBACiAgIC8qIERpc2FibGUgdGhlIFBlcmlwaGVyYWwgKi8KICAgX19IQUxfVElNX0RJU0FCTEUoaHRpbSk7CiAKLSAgLyogQ2hhbmdlIHRoZSBodGltIHN0YXRlICovCi0gIGh0aW0tPlN0YXRlID0gSEFMX1RJTV9TVEFURV9SRUFEWTsKKyAgLyogU2V0IHRoZSBUSU0gY2hhbm5lbCBzdGF0ZSAqLworICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgQ2hhbm5lbCwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKIAogICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCiAgIHJldHVybiBIQUxfT0s7CkBAIC0xMjA4LDYgKzEzMjMsMTMgQEAKICAgLyogSW5pdCB0aGUgYmFzZSB0aW1lIGZvciB0aGUgUFdNICovCiAgIFRJTV9CYXNlX1NldENvbmZpZyhodGltLT5JbnN0YW5jZSwgJmh0aW0tPkluaXQpOwogCisgIC8qIEluaXRpYWxpemUgdGhlIERNQSBidXJzdCBvcGVyYXRpb24gc3RhdGUgKi8KKyAgaHRpbS0+RE1BQnVyc3RTdGF0ZSA9IEhBTF9ETUFfQlVSU1RfU1RBVEVfUkVBRFk7CisKKyAgLyogSW5pdGlhbGl6ZSB0aGUgVElNIGNoYW5uZWxzIHN0YXRlICovCisgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVF9BTEwoaHRpbSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVRfQUxMKGh0aW0sIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisKICAgLyogSW5pdGlhbGl6ZSB0aGUgVElNIHN0YXRlKi8KICAgaHRpbS0+U3RhdGUgPSBIQUxfVElNX1NUQVRFX1JFQURZOwogCkBAIC0xMjQxLDYgKzEzNjMsMTMgQEAKICAgSEFMX1RJTV9QV01fTXNwRGVJbml0KGh0aW0pOwogI2VuZGlmIC8qIFVTRV9IQUxfVElNX1JFR0lTVEVSX0NBTExCQUNLUyAqLwogCisgIC8qIENoYW5nZSB0aGUgRE1BIGJ1cnN0IG9wZXJhdGlvbiBzdGF0ZSAqLworICBodGltLT5ETUFCdXJzdFN0YXRlID0gSEFMX0RNQV9CVVJTVF9TVEFURV9SRVNFVDsKKworICAvKiBDaGFuZ2UgdGhlIFRJTSBjaGFubmVscyBzdGF0ZSAqLworICBUSU1fQ0hBTk5FTF9TVEFURV9TRVRfQUxMKGh0aW0sIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRVNFVCk7CisgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUX0FMTChodGltLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVTRVQpOworCiAgIC8qIENoYW5nZSBUSU0gc3RhdGUgKi8KICAgaHRpbS0+U3RhdGUgPSBIQUxfVElNX1NUQVRFX1JFU0VUOwogCkBAIC0xMjk4LDYgKzE0MjcsMTUgQEAKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9DQ1hfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UsIENoYW5uZWwpKTsKIAorICAvKiBDaGVjayB0aGUgVElNIGNoYW5uZWwgc3RhdGUgKi8KKyAgaWYgKFRJTV9DSEFOTkVMX1NUQVRFX0dFVChodGltLCBDaGFubmVsKSAhPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpCisgIHsKKyAgICByZXR1cm4gSEFMX0VSUk9SOworICB9CisKKyAgLyogU2V0IHRoZSBUSU0gY2hhbm5lbCBzdGF0ZSAqLworICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgQ2hhbm5lbCwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpOworCiAgIC8qIEVuYWJsZSB0aGUgQ2FwdHVyZSBjb21wYXJlIGNoYW5uZWwgKi8KICAgVElNX0NDeENoYW5uZWxDbWQoaHRpbS0+SW5zdGFuY2UsIENoYW5uZWwsIFRJTV9DQ3hfRU5BQkxFKTsKIApAQCAtMTMwOCw4ICsxNDQ2LDE1IEBACiAgIH0KIAogICAvKiBFbmFibGUgdGhlIFBlcmlwaGVyYWwsIGV4Y2VwdCBpbiB0cmlnZ2VyIG1vZGUgd2hlcmUgZW5hYmxlIGlzIGF1dG9tYXRpY2FsbHkgZG9uZSB3aXRoIHRyaWdnZXIgKi8KLSAgdG1wc21jciA9IGh0aW0tPkluc3RhbmNlLT5TTUNSICYgVElNX1NNQ1JfU01TOwotICBpZiAoIUlTX1RJTV9TTEFWRU1PREVfVFJJR0dFUl9FTkFCTEVEKHRtcHNtY3IpKQorICBpZiAoSVNfVElNX1NMQVZFX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSkKKyAgeworICAgIHRtcHNtY3IgPSBodGltLT5JbnN0YW5jZS0+U01DUiAmIFRJTV9TTUNSX1NNUzsKKyAgICBpZiAoIUlTX1RJTV9TTEFWRU1PREVfVFJJR0dFUl9FTkFCTEVEKHRtcHNtY3IpKQorICAgIHsKKyAgICAgIF9fSEFMX1RJTV9FTkFCTEUoaHRpbSk7CisgICAgfQorICB9CisgIGVsc2UKICAgewogICAgIF9fSEFMX1RJTV9FTkFCTEUoaHRpbSk7CiAgIH0KQEAgLTEzNDYsOCArMTQ5MSw4IEBACiAgIC8qIERpc2FibGUgdGhlIFBlcmlwaGVyYWwgKi8KICAgX19IQUxfVElNX0RJU0FCTEUoaHRpbSk7CiAKLSAgLyogQ2hhbmdlIHRoZSBodGltIHN0YXRlICovCi0gIGh0aW0tPlN0YXRlID0gSEFMX1RJTV9TVEFURV9SRUFEWTsKKyAgLyogU2V0IHRoZSBUSU0gY2hhbm5lbCBzdGF0ZSAqLworICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgQ2hhbm5lbCwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKIAogICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCiAgIHJldHVybiBIQUxfT0s7CkBAIC0xMzcwLDYgKzE1MTUsMTUgQEAKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9DQ1hfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UsIENoYW5uZWwpKTsKIAorICAvKiBDaGVjayB0aGUgVElNIGNoYW5uZWwgc3RhdGUgKi8KKyAgaWYgKFRJTV9DSEFOTkVMX1NUQVRFX0dFVChodGltLCBDaGFubmVsKSAhPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpCisgIHsKKyAgICByZXR1cm4gSEFMX0VSUk9SOworICB9CisKKyAgLyogU2V0IHRoZSBUSU0gY2hhbm5lbCBzdGF0ZSAqLworICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgQ2hhbm5lbCwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpOworCiAgIHN3aXRjaCAoQ2hhbm5lbCkKICAgewogICAgIGNhc2UgVElNX0NIQU5ORUxfMToKQEAgLTE0MTQsOCArMTU2OCwxNSBAQAogICB9CiAKICAgLyogRW5hYmxlIHRoZSBQZXJpcGhlcmFsLCBleGNlcHQgaW4gdHJpZ2dlciBtb2RlIHdoZXJlIGVuYWJsZSBpcyBhdXRvbWF0aWNhbGx5IGRvbmUgd2l0aCB0cmlnZ2VyICovCi0gIHRtcHNtY3IgPSBodGltLT5JbnN0YW5jZS0+U01DUiAmIFRJTV9TTUNSX1NNUzsKLSAgaWYgKCFJU19USU1fU0xBVkVNT0RFX1RSSUdHRVJfRU5BQkxFRCh0bXBzbWNyKSkKKyAgaWYgKElTX1RJTV9TTEFWRV9JTlNUQU5DRShodGltLT5JbnN0YW5jZSkpCisgIHsKKyAgICB0bXBzbWNyID0gaHRpbS0+SW5zdGFuY2UtPlNNQ1IgJiBUSU1fU01DUl9TTVM7CisgICAgaWYgKCFJU19USU1fU0xBVkVNT0RFX1RSSUdHRVJfRU5BQkxFRCh0bXBzbWNyKSkKKyAgICB7CisgICAgICBfX0hBTF9USU1fRU5BQkxFKGh0aW0pOworICAgIH0KKyAgfQorICBlbHNlCiAgIHsKICAgICBfX0hBTF9USU1fRU5BQkxFKGh0aW0pOwogICB9CkBAIC0xNDg2LDYgKzE2NDcsOSBAQAogICAvKiBEaXNhYmxlIHRoZSBQZXJpcGhlcmFsICovCiAgIF9fSEFMX1RJTV9ESVNBQkxFKGh0aW0pOwogCisgIC8qIFNldCB0aGUgVElNIGNoYW5uZWwgc3RhdGUgKi8KKyAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIENoYW5uZWwsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisKICAgLyogUmV0dXJuIGZ1bmN0aW9uIHN0YXR1cyAqLwogICByZXR1cm4gSEFMX09LOwogfQpAQCAtMTUxMCwxMSArMTY3NCwxMiBAQAogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0NDWF9JTlNUQU5DRShodGltLT5JbnN0YW5jZSwgQ2hhbm5lbCkpOwogCi0gIGlmIChodGltLT5TdGF0ZSA9PSBIQUxfVElNX1NUQVRFX0JVU1kpCisgIC8qIFNldCB0aGUgVElNIGNoYW5uZWwgc3RhdGUgKi8KKyAgaWYgKFRJTV9DSEFOTkVMX1NUQVRFX0dFVChodGltLCBDaGFubmVsKSA9PSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSkKICAgewogICAgIHJldHVybiBIQUxfQlVTWTsKICAgfQotICBlbHNlIGlmIChodGltLT5TdGF0ZSA9PSBIQUxfVElNX1NUQVRFX1JFQURZKQorICBlbHNlIGlmIChUSU1fQ0hBTk5FTF9TVEFURV9HRVQoaHRpbSwgQ2hhbm5lbCkgPT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQogICB7CiAgICAgaWYgKChwRGF0YSA9PSBOVUxMKSAmJiAoTGVuZ3RoID4gMFUpKQogICAgIHsKQEAgLTE1MjIsMTIgKzE2ODcsMTIgQEAKICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAgIGh0aW0tPlN0YXRlID0gSEFMX1RJTV9TVEFURV9CVVNZOworICAgICAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIENoYW5uZWwsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKTsKICAgICB9CiAgIH0KICAgZWxzZQogICB7Ci0gICAgLyogbm90aGluZyB0byBkbyAqLworICAgIHJldHVybiBIQUxfRVJST1I7CiAgIH0KIAogICBzd2l0Y2ggKENoYW5uZWwpCkBAIC0xNTQ0LDYgKzE3MDksNyBAQAogICAgICAgLyogRW5hYmxlIHRoZSBETUEgc3RyZWFtICovCiAgICAgICBpZiAoSEFMX0RNQV9TdGFydF9JVChodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MxXSwgKHVpbnQzMl90KXBEYXRhLCAodWludDMyX3QpJmh0aW0tPkluc3RhbmNlLT5DQ1IxLCBMZW5ndGgpICE9IEhBTF9PSykKICAgICAgIHsKKyAgICAgICAgLyogUmV0dXJuIGVycm9yIHN0YXR1cyAqLwogICAgICAgICByZXR1cm4gSEFMX0VSUk9SOwogICAgICAgfQogCkBAIC0xNTY0LDYgKzE3MzAsNyBAQAogICAgICAgLyogRW5hYmxlIHRoZSBETUEgc3RyZWFtICovCiAgICAgICBpZiAoSEFMX0RNQV9TdGFydF9JVChodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MyXSwgKHVpbnQzMl90KXBEYXRhLCAodWludDMyX3QpJmh0aW0tPkluc3RhbmNlLT5DQ1IyLCBMZW5ndGgpICE9IEhBTF9PSykKICAgICAgIHsKKyAgICAgICAgLyogUmV0dXJuIGVycm9yIHN0YXR1cyAqLwogICAgICAgICByZXR1cm4gSEFMX0VSUk9SOwogICAgICAgfQogICAgICAgLyogRW5hYmxlIHRoZSBUSU0gQ2FwdHVyZS9Db21wYXJlIDIgRE1BIHJlcXVlc3QgKi8KQEAgLTE1ODMsNiArMTc1MCw3IEBACiAgICAgICAvKiBFbmFibGUgdGhlIERNQSBzdHJlYW0gKi8KICAgICAgIGlmIChIQUxfRE1BX1N0YXJ0X0lUKGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzNdLCAodWludDMyX3QpcERhdGEsICh1aW50MzJfdCkmaHRpbS0+SW5zdGFuY2UtPkNDUjMsIExlbmd0aCkgIT0gSEFMX09LKQogICAgICAgeworICAgICAgICAvKiBSZXR1cm4gZXJyb3Igc3RhdHVzICovCiAgICAgICAgIHJldHVybiBIQUxfRVJST1I7CiAgICAgICB9CiAgICAgICAvKiBFbmFibGUgdGhlIFRJTSBPdXRwdXQgQ2FwdHVyZS9Db21wYXJlIDMgcmVxdWVzdCAqLwpAQCAtMTYwMiw2ICsxNzcwLDcgQEAKICAgICAgIC8qIEVuYWJsZSB0aGUgRE1BIHN0cmVhbSAqLwogICAgICAgaWYgKEhBTF9ETUFfU3RhcnRfSVQoaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDNF0sICh1aW50MzJfdClwRGF0YSwgKHVpbnQzMl90KSZodGltLT5JbnN0YW5jZS0+Q0NSNCwgTGVuZ3RoKSAhPSBIQUxfT0spCiAgICAgICB7CisgICAgICAgIC8qIFJldHVybiBlcnJvciBzdGF0dXMgKi8KICAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICAgIH0KICAgICAgIC8qIEVuYWJsZSB0aGUgVElNIENhcHR1cmUvQ29tcGFyZSA0IERNQSByZXF1ZXN0ICovCkBAIC0xNjIzLDggKzE3OTIsMTUgQEAKICAgfQogCiAgIC8qIEVuYWJsZSB0aGUgUGVyaXBoZXJhbCwgZXhjZXB0IGluIHRyaWdnZXIgbW9kZSB3aGVyZSBlbmFibGUgaXMgYXV0b21hdGljYWxseSBkb25lIHdpdGggdHJpZ2dlciAqLwotICB0bXBzbWNyID0gaHRpbS0+SW5zdGFuY2UtPlNNQ1IgJiBUSU1fU01DUl9TTVM7Ci0gIGlmICghSVNfVElNX1NMQVZFTU9ERV9UUklHR0VSX0VOQUJMRUQodG1wc21jcikpCisgIGlmIChJU19USU1fU0xBVkVfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKQorICB7CisgICAgdG1wc21jciA9IGh0aW0tPkluc3RhbmNlLT5TTUNSICYgVElNX1NNQ1JfU01TOworICAgIGlmICghSVNfVElNX1NMQVZFTU9ERV9UUklHR0VSX0VOQUJMRUQodG1wc21jcikpCisgICAgeworICAgICAgX19IQUxfVElNX0VOQUJMRShodGltKTsKKyAgICB9CisgIH0KKyAgZWxzZQogICB7CiAgICAgX19IQUxfVElNX0VOQUJMRShodGltKTsKICAgfQpAQCAtMTY5OSw4ICsxODc1LDggQEAKICAgLyogRGlzYWJsZSB0aGUgUGVyaXBoZXJhbCAqLwogICBfX0hBTF9USU1fRElTQUJMRShodGltKTsKIAotICAvKiBDaGFuZ2UgdGhlIGh0aW0gc3RhdGUgKi8KLSAgaHRpbS0+U3RhdGUgPSBIQUxfVElNX1NUQVRFX1JFQURZOworICAvKiBTZXQgdGhlIFRJTSBjaGFubmVsIHN0YXRlICovCisgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBDaGFubmVsLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOwogCiAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KICAgcmV0dXJuIEhBTF9PSzsKQEAgLTE3ODIsNiArMTk1OCwxMyBAQAogICAvKiBJbml0IHRoZSBiYXNlIHRpbWUgZm9yIHRoZSBpbnB1dCBjYXB0dXJlICovCiAgIFRJTV9CYXNlX1NldENvbmZpZyhodGltLT5JbnN0YW5jZSwgJmh0aW0tPkluaXQpOwogCisgIC8qIEluaXRpYWxpemUgdGhlIERNQSBidXJzdCBvcGVyYXRpb24gc3RhdGUgKi8KKyAgaHRpbS0+RE1BQnVyc3RTdGF0ZSA9IEhBTF9ETUFfQlVSU1RfU1RBVEVfUkVBRFk7CisKKyAgLyogSW5pdGlhbGl6ZSB0aGUgVElNIGNoYW5uZWxzIHN0YXRlICovCisgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVF9BTEwoaHRpbSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVRfQUxMKGh0aW0sIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisKICAgLyogSW5pdGlhbGl6ZSB0aGUgVElNIHN0YXRlKi8KICAgaHRpbS0+U3RhdGUgPSBIQUxfVElNX1NUQVRFX1JFQURZOwogCkBAIC0xODE1LDYgKzE5OTgsMTMgQEAKICAgSEFMX1RJTV9JQ19Nc3BEZUluaXQoaHRpbSk7CiAjZW5kaWYgLyogVVNFX0hBTF9USU1fUkVHSVNURVJfQ0FMTEJBQ0tTICovCiAKKyAgLyogQ2hhbmdlIHRoZSBETUEgYnVyc3Qgb3BlcmF0aW9uIHN0YXRlICovCisgIGh0aW0tPkRNQUJ1cnN0U3RhdGUgPSBIQUxfRE1BX0JVUlNUX1NUQVRFX1JFU0VUOworCisgIC8qIENoYW5nZSB0aGUgVElNIGNoYW5uZWxzIHN0YXRlICovCisgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVF9BTEwoaHRpbSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFU0VUKTsKKyAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVRfQUxMKGh0aW0sIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRVNFVCk7CisKICAgLyogQ2hhbmdlIFRJTSBzdGF0ZSAqLwogICBodGltLT5TdGF0ZSA9IEhBTF9USU1fU1RBVEVfUkVTRVQ7CiAKQEAgLTE4NjgsMTYgKzIwNTgsMzYgQEAKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1fSUNfU3RhcnQoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sIHVpbnQzMl90IENoYW5uZWwpCiB7CiAgIHVpbnQzMl90IHRtcHNtY3I7CisgIEhBTF9USU1fQ2hhbm5lbFN0YXRlVHlwZURlZiBjaGFubmVsX3N0YXRlID0gVElNX0NIQU5ORUxfU1RBVEVfR0VUKGh0aW0sIENoYW5uZWwpOworICBIQUxfVElNX0NoYW5uZWxTdGF0ZVR5cGVEZWYgY29tcGxlbWVudGFyeV9jaGFubmVsX3N0YXRlID0gVElNX0NIQU5ORUxfTl9TVEFURV9HRVQoaHRpbSwgQ2hhbm5lbCk7CiAKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9DQ1hfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UsIENoYW5uZWwpKTsKIAorICAvKiBDaGVjayB0aGUgVElNIGNoYW5uZWwgc3RhdGUgKi8KKyAgaWYgKChjaGFubmVsX3N0YXRlICE9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkKKyAgICAgIHx8IChjb21wbGVtZW50YXJ5X2NoYW5uZWxfc3RhdGUgIT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKSkKKyAgeworICAgIHJldHVybiBIQUxfRVJST1I7CisgIH0KKworICAvKiBTZXQgdGhlIFRJTSBjaGFubmVsIHN0YXRlICovCisgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBDaGFubmVsLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSk7CisgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIENoYW5uZWwsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKTsKKwogICAvKiBFbmFibGUgdGhlIElucHV0IENhcHR1cmUgY2hhbm5lbCAqLwogICBUSU1fQ0N4Q2hhbm5lbENtZChodGltLT5JbnN0YW5jZSwgQ2hhbm5lbCwgVElNX0NDeF9FTkFCTEUpOwogCiAgIC8qIEVuYWJsZSB0aGUgUGVyaXBoZXJhbCwgZXhjZXB0IGluIHRyaWdnZXIgbW9kZSB3aGVyZSBlbmFibGUgaXMgYXV0b21hdGljYWxseSBkb25lIHdpdGggdHJpZ2dlciAqLwotICB0bXBzbWNyID0gaHRpbS0+SW5zdGFuY2UtPlNNQ1IgJiBUSU1fU01DUl9TTVM7Ci0gIGlmICghSVNfVElNX1NMQVZFTU9ERV9UUklHR0VSX0VOQUJMRUQodG1wc21jcikpCisgIGlmIChJU19USU1fU0xBVkVfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKQorICB7CisgICAgdG1wc21jciA9IGh0aW0tPkluc3RhbmNlLT5TTUNSICYgVElNX1NNQ1JfU01TOworICAgIGlmICghSVNfVElNX1NMQVZFTU9ERV9UUklHR0VSX0VOQUJMRUQodG1wc21jcikpCisgICAgeworICAgICAgX19IQUxfVElNX0VOQUJMRShodGltKTsKKyAgICB9CisgIH0KKyAgZWxzZQogICB7CiAgICAgX19IQUxfVElNX0VOQUJMRShodGltKTsKICAgfQpAQCAtMTkwOCw2ICsyMTE4LDEwIEBACiAgIC8qIERpc2FibGUgdGhlIFBlcmlwaGVyYWwgKi8KICAgX19IQUxfVElNX0RJU0FCTEUoaHRpbSk7CiAKKyAgLyogU2V0IHRoZSBUSU0gY2hhbm5lbCBzdGF0ZSAqLworICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgQ2hhbm5lbCwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgQ2hhbm5lbCwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKwogICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCiAgIHJldHVybiBIQUxfT0s7CiB9CkBAIC0xOTI2LDEwICsyMTQwLDIzIEBACiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNX0lDX1N0YXJ0X0lUKFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCB1aW50MzJfdCBDaGFubmVsKQogewogICB1aW50MzJfdCB0bXBzbWNyOworICBIQUxfVElNX0NoYW5uZWxTdGF0ZVR5cGVEZWYgY2hhbm5lbF9zdGF0ZSA9IFRJTV9DSEFOTkVMX1NUQVRFX0dFVChodGltLCBDaGFubmVsKTsKKyAgSEFMX1RJTV9DaGFubmVsU3RhdGVUeXBlRGVmIGNvbXBsZW1lbnRhcnlfY2hhbm5lbF9zdGF0ZSA9IFRJTV9DSEFOTkVMX05fU1RBVEVfR0VUKGh0aW0sIENoYW5uZWwpOwogCiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19USU1fQ0NYX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlLCBDaGFubmVsKSk7CiAKKyAgLyogQ2hlY2sgdGhlIFRJTSBjaGFubmVsIHN0YXRlICovCisgIGlmICgoY2hhbm5lbF9zdGF0ZSAhPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpCisgICAgICB8fCAoY29tcGxlbWVudGFyeV9jaGFubmVsX3N0YXRlICE9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkpCisgIHsKKyAgICByZXR1cm4gSEFMX0VSUk9SOworICB9CisKKyAgLyogU2V0IHRoZSBUSU0gY2hhbm5lbCBzdGF0ZSAqLworICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgQ2hhbm5lbCwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpOworICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBDaGFubmVsLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSk7CisKICAgc3dpdGNoIChDaGFubmVsKQogICB7CiAgICAgY2FzZSBUSU1fQ0hBTk5FTF8xOgpAQCAtMTk2Nyw4ICsyMTk0LDE1IEBACiAgIFRJTV9DQ3hDaGFubmVsQ21kKGh0aW0tPkluc3RhbmNlLCBDaGFubmVsLCBUSU1fQ0N4X0VOQUJMRSk7CiAKICAgLyogRW5hYmxlIHRoZSBQZXJpcGhlcmFsLCBleGNlcHQgaW4gdHJpZ2dlciBtb2RlIHdoZXJlIGVuYWJsZSBpcyBhdXRvbWF0aWNhbGx5IGRvbmUgd2l0aCB0cmlnZ2VyICovCi0gIHRtcHNtY3IgPSBodGltLT5JbnN0YW5jZS0+U01DUiAmIFRJTV9TTUNSX1NNUzsKLSAgaWYgKCFJU19USU1fU0xBVkVNT0RFX1RSSUdHRVJfRU5BQkxFRCh0bXBzbWNyKSkKKyAgaWYgKElTX1RJTV9TTEFWRV9JTlNUQU5DRShodGltLT5JbnN0YW5jZSkpCisgIHsKKyAgICB0bXBzbWNyID0gaHRpbS0+SW5zdGFuY2UtPlNNQ1IgJiBUSU1fU01DUl9TTVM7CisgICAgaWYgKCFJU19USU1fU0xBVkVNT0RFX1RSSUdHRVJfRU5BQkxFRCh0bXBzbWNyKSkKKyAgICB7CisgICAgICBfX0hBTF9USU1fRU5BQkxFKGh0aW0pOworICAgIH0KKyAgfQorICBlbHNlCiAgIHsKICAgICBfX0hBTF9USU1fRU5BQkxFKGh0aW0pOwogICB9CkBAIC0yMDMzLDYgKzIyNjcsMTAgQEAKICAgLyogRGlzYWJsZSB0aGUgUGVyaXBoZXJhbCAqLwogICBfX0hBTF9USU1fRElTQUJMRShodGltKTsKIAorICAvKiBTZXQgdGhlIFRJTSBjaGFubmVsIHN0YXRlICovCisgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBDaGFubmVsLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBDaGFubmVsLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworCiAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KICAgcmV0dXJuIEhBTF9PSzsKIH0KQEAgLTIwNTMsMTYgKzIyOTEsMjEgQEAKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1fSUNfU3RhcnRfRE1BKFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCB1aW50MzJfdCBDaGFubmVsLCB1aW50MzJfdCAqcERhdGEsIHVpbnQxNl90IExlbmd0aCkKIHsKICAgdWludDMyX3QgdG1wc21jcjsKKyAgSEFMX1RJTV9DaGFubmVsU3RhdGVUeXBlRGVmIGNoYW5uZWxfc3RhdGUgPSBUSU1fQ0hBTk5FTF9TVEFURV9HRVQoaHRpbSwgQ2hhbm5lbCk7CisgIEhBTF9USU1fQ2hhbm5lbFN0YXRlVHlwZURlZiBjb21wbGVtZW50YXJ5X2NoYW5uZWxfc3RhdGUgPSBUSU1fQ0hBTk5FTF9OX1NUQVRFX0dFVChodGltLCBDaGFubmVsKTsKIAogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0NDWF9JTlNUQU5DRShodGltLT5JbnN0YW5jZSwgQ2hhbm5lbCkpOwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0RNQV9DQ19JTlNUQU5DRShodGltLT5JbnN0YW5jZSkpOwogCi0gIGlmIChodGltLT5TdGF0ZSA9PSBIQUxfVElNX1NUQVRFX0JVU1kpCisgIC8qIFNldCB0aGUgVElNIGNoYW5uZWwgc3RhdGUgKi8KKyAgaWYgKChjaGFubmVsX3N0YXRlID09IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKQorICAgICAgfHwgKGNvbXBsZW1lbnRhcnlfY2hhbm5lbF9zdGF0ZSA9PSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSkpCiAgIHsKICAgICByZXR1cm4gSEFMX0JVU1k7CiAgIH0KLSAgZWxzZSBpZiAoaHRpbS0+U3RhdGUgPT0gSEFMX1RJTV9TVEFURV9SRUFEWSkKKyAgZWxzZSBpZiAoKGNoYW5uZWxfc3RhdGUgPT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQorICAgICAgICAgICAmJiAoY29tcGxlbWVudGFyeV9jaGFubmVsX3N0YXRlID09IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkpCiAgIHsKICAgICBpZiAoKHBEYXRhID09IE5VTEwpICYmIChMZW5ndGggPiAwVSkpCiAgICAgewpAQCAtMjA3MCwxMiArMjMxMywxMyBAQAogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgaHRpbS0+U3RhdGUgPSBIQUxfVElNX1NUQVRFX0JVU1k7CisgICAgICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgQ2hhbm5lbCwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpOworICAgICAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgQ2hhbm5lbCwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpOwogICAgIH0KICAgfQogICBlbHNlCiAgIHsKLSAgICAvKiBub3RoaW5nIHRvIGRvICovCisgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgfQogCiAgIHN3aXRjaCAoQ2hhbm5lbCkKQEAgLTIwOTIsNiArMjMzNiw3IEBACiAgICAgICAvKiBFbmFibGUgdGhlIERNQSBzdHJlYW0gKi8KICAgICAgIGlmIChIQUxfRE1BX1N0YXJ0X0lUKGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzFdLCAodWludDMyX3QpJmh0aW0tPkluc3RhbmNlLT5DQ1IxLCAodWludDMyX3QpcERhdGEsIExlbmd0aCkgIT0gSEFMX09LKQogICAgICAgeworICAgICAgICAvKiBSZXR1cm4gZXJyb3Igc3RhdHVzICovCiAgICAgICAgIHJldHVybiBIQUxfRVJST1I7CiAgICAgICB9CiAgICAgICAvKiBFbmFibGUgdGhlIFRJTSBDYXB0dXJlL0NvbXBhcmUgMSBETUEgcmVxdWVzdCAqLwpAQCAtMjExMSw2ICsyMzU2LDcgQEAKICAgICAgIC8qIEVuYWJsZSB0aGUgRE1BIHN0cmVhbSAqLwogICAgICAgaWYgKEhBTF9ETUFfU3RhcnRfSVQoaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDMl0sICh1aW50MzJfdCkmaHRpbS0+SW5zdGFuY2UtPkNDUjIsICh1aW50MzJfdClwRGF0YSwgTGVuZ3RoKSAhPSBIQUxfT0spCiAgICAgICB7CisgICAgICAgIC8qIFJldHVybiBlcnJvciBzdGF0dXMgKi8KICAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICAgIH0KICAgICAgIC8qIEVuYWJsZSB0aGUgVElNIENhcHR1cmUvQ29tcGFyZSAyICBETUEgcmVxdWVzdCAqLwpAQCAtMjEzMCw2ICsyMzc2LDcgQEAKICAgICAgIC8qIEVuYWJsZSB0aGUgRE1BIHN0cmVhbSAqLwogICAgICAgaWYgKEhBTF9ETUFfU3RhcnRfSVQoaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDM10sICh1aW50MzJfdCkmaHRpbS0+SW5zdGFuY2UtPkNDUjMsICh1aW50MzJfdClwRGF0YSwgTGVuZ3RoKSAhPSBIQUxfT0spCiAgICAgICB7CisgICAgICAgIC8qIFJldHVybiBlcnJvciBzdGF0dXMgKi8KICAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICAgIH0KICAgICAgIC8qIEVuYWJsZSB0aGUgVElNIENhcHR1cmUvQ29tcGFyZSAzICBETUEgcmVxdWVzdCAqLwpAQCAtMjE0OSw2ICsyMzk2LDcgQEAKICAgICAgIC8qIEVuYWJsZSB0aGUgRE1BIHN0cmVhbSAqLwogICAgICAgaWYgKEhBTF9ETUFfU3RhcnRfSVQoaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDNF0sICh1aW50MzJfdCkmaHRpbS0+SW5zdGFuY2UtPkNDUjQsICh1aW50MzJfdClwRGF0YSwgTGVuZ3RoKSAhPSBIQUxfT0spCiAgICAgICB7CisgICAgICAgIC8qIFJldHVybiBlcnJvciBzdGF0dXMgKi8KICAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICAgIH0KICAgICAgIC8qIEVuYWJsZSB0aGUgVElNIENhcHR1cmUvQ29tcGFyZSA0ICBETUEgcmVxdWVzdCAqLwpAQCAtMjE2NCw4ICsyNDEyLDE1IEBACiAgIFRJTV9DQ3hDaGFubmVsQ21kKGh0aW0tPkluc3RhbmNlLCBDaGFubmVsLCBUSU1fQ0N4X0VOQUJMRSk7CiAKICAgLyogRW5hYmxlIHRoZSBQZXJpcGhlcmFsLCBleGNlcHQgaW4gdHJpZ2dlciBtb2RlIHdoZXJlIGVuYWJsZSBpcyBhdXRvbWF0aWNhbGx5IGRvbmUgd2l0aCB0cmlnZ2VyICovCi0gIHRtcHNtY3IgPSBodGltLT5JbnN0YW5jZS0+U01DUiAmIFRJTV9TTUNSX1NNUzsKLSAgaWYgKCFJU19USU1fU0xBVkVNT0RFX1RSSUdHRVJfRU5BQkxFRCh0bXBzbWNyKSkKKyAgaWYgKElTX1RJTV9TTEFWRV9JTlNUQU5DRShodGltLT5JbnN0YW5jZSkpCisgIHsKKyAgICB0bXBzbWNyID0gaHRpbS0+SW5zdGFuY2UtPlNNQ1IgJiBUSU1fU01DUl9TTVM7CisgICAgaWYgKCFJU19USU1fU0xBVkVNT0RFX1RSSUdHRVJfRU5BQkxFRCh0bXBzbWNyKSkKKyAgICB7CisgICAgICBfX0hBTF9USU1fRU5BQkxFKGh0aW0pOworICAgIH0KKyAgfQorICBlbHNlCiAgIHsKICAgICBfX0hBTF9USU1fRU5BQkxFKGh0aW0pOwogICB9CkBAIC0yMTkxLDYgKzI0NDYsOSBAQAogICBhc3NlcnRfcGFyYW0oSVNfVElNX0NDWF9JTlNUQU5DRShodGltLT5JbnN0YW5jZSwgQ2hhbm5lbCkpOwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0RNQV9DQ19JTlNUQU5DRShodGltLT5JbnN0YW5jZSkpOwogCisgIC8qIERpc2FibGUgdGhlIElucHV0IENhcHR1cmUgY2hhbm5lbCAqLworICBUSU1fQ0N4Q2hhbm5lbENtZChodGltLT5JbnN0YW5jZSwgQ2hhbm5lbCwgVElNX0NDeF9ESVNBQkxFKTsKKwogICBzd2l0Y2ggKENoYW5uZWwpCiAgIHsKICAgICBjYXNlIFRJTV9DSEFOTkVMXzE6CkBAIC0yMjI5LDE0ICsyNDg3LDEyIEBACiAgICAgICBicmVhazsKICAgfQogCi0gIC8qIERpc2FibGUgdGhlIElucHV0IENhcHR1cmUgY2hhbm5lbCAqLwotICBUSU1fQ0N4Q2hhbm5lbENtZChodGltLT5JbnN0YW5jZSwgQ2hhbm5lbCwgVElNX0NDeF9ESVNBQkxFKTsKLQogICAvKiBEaXNhYmxlIHRoZSBQZXJpcGhlcmFsICovCiAgIF9fSEFMX1RJTV9ESVNBQkxFKGh0aW0pOwogCi0gIC8qIENoYW5nZSB0aGUgaHRpbSBzdGF0ZSAqLwotICBodGltLT5TdGF0ZSA9IEhBTF9USU1fU1RBVEVfUkVBRFk7CisgIC8qIFNldCB0aGUgVElNIGNoYW5uZWwgc3RhdGUgKi8KKyAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIENoYW5uZWwsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIENoYW5uZWwsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CiAKICAgLyogUmV0dXJuIGZ1bmN0aW9uIHN0YXR1cyAqLwogICByZXR1cm4gSEFMX09LOwpAQCAtMjI3Myw2ICsyNTI5LDkgQEAKICAgKiAgICAgICAgIHJlcXVpcmVzIGEgdGltZXIgcmVzZXQgdG8gYXZvaWQgdW5leHBlY3RlZCBkaXJlY3Rpb24KICAgKiAgICAgICAgIGR1ZSB0byBESVIgYml0IHJlYWRvbmx5IGluIGNlbnRlciBhbGlnbmVkIG1vZGUuCiAgICogICAgICAgICBFeDogY2FsbCBAcmVmIEhBTF9USU1fT25lUHVsc2VfRGVJbml0KCkgYmVmb3JlIEhBTF9USU1fT25lUHVsc2VfSW5pdCgpCisgICogQG5vdGUgICBXaGVuIHRoZSB0aW1lciBpbnN0YW5jZSBpcyBpbml0aWFsaXplZCBpbiBPbmUgUHVsc2UgbW9kZSwgdGltZXIKKyAgKiAgICAgICAgIGNoYW5uZWxzIDEgYW5kIGNoYW5uZWwgMiBhcmUgcmVzZXJ2ZWQgYW5kIGNhbm5vdCBiZSB1c2VkIGZvciBvdGhlcgorICAqICAgICAgICAgcHVycG9zZS4KICAgKiBAcGFyYW0gIGh0aW0gVElNIE9uZSBQdWxzZSBoYW5kbGUKICAgKiBAcGFyYW0gIE9uZVB1bHNlTW9kZSBTZWxlY3QgdGhlIE9uZSBwdWxzZSBtb2RlLgogICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKQEAgLTIzMjgsNiArMjU4NywxNSBAQAogICAvKiBDb25maWd1cmUgdGhlIE9QTSBNb2RlICovCiAgIGh0aW0tPkluc3RhbmNlLT5DUjEgfD0gT25lUHVsc2VNb2RlOwogCisgIC8qIEluaXRpYWxpemUgdGhlIERNQSBidXJzdCBvcGVyYXRpb24gc3RhdGUgKi8KKyAgaHRpbS0+RE1BQnVyc3RTdGF0ZSA9IEhBTF9ETUFfQlVSU1RfU1RBVEVfUkVBRFk7CisKKyAgLyogSW5pdGlhbGl6ZSB0aGUgVElNIGNoYW5uZWxzIHN0YXRlICovCisgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8xLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMiwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMiwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKwogICAvKiBJbml0aWFsaXplIHRoZSBUSU0gc3RhdGUqLwogICBodGltLT5TdGF0ZSA9IEhBTF9USU1fU1RBVEVfUkVBRFk7CiAKQEAgLTIzNjEsNiArMjYyOSwxNSBAQAogICBIQUxfVElNX09uZVB1bHNlX01zcERlSW5pdChodGltKTsKICNlbmRpZiAvKiBVU0VfSEFMX1RJTV9SRUdJU1RFUl9DQUxMQkFDS1MgKi8KIAorICAvKiBDaGFuZ2UgdGhlIERNQSBidXJzdCBvcGVyYXRpb24gc3RhdGUgKi8KKyAgaHRpbS0+RE1BQnVyc3RTdGF0ZSA9IEhBTF9ETUFfQlVSU1RfU1RBVEVfUkVTRVQ7CisKKyAgLyogU2V0IHRoZSBUSU0gY2hhbm5lbCBzdGF0ZSAqLworICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFU0VUKTsKKyAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzIsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRVNFVCk7CisgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRVNFVCk7CisgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzIsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRVNFVCk7CisKICAgLyogQ2hhbmdlIFRJTSBzdGF0ZSAqLwogICBodGltLT5TdGF0ZSA9IEhBTF9USU1fU1RBVEVfUkVTRVQ7CiAKQEAgLTI0MDIsMjMgKzI2NzksNDQgQEAKIAogLyoqCiAgICogQGJyaWVmICBTdGFydHMgdGhlIFRJTSBPbmUgUHVsc2Ugc2lnbmFsIGdlbmVyYXRpb24uCisgICogQG5vdGUgVGhvdWdoIE91dHB1dENoYW5uZWwgcGFyYW1ldGVyIGlzIGRlcHJlY2F0ZWQgYW5kIGlnbm9yZWQgYnkgdGhlIGZ1bmN0aW9uCisgICogICAgICAgIGl0IGhhcyBiZWVuIGtlcHQgdG8gYXZvaWQgSEFMX1RJTSBBUEkgY29tcGF0aWJpbGl0eSBicmVhay4KKyAgKiBAbm90ZSBUaGUgcHVsc2Ugb3V0cHV0IGNoYW5uZWwgaXMgZGV0ZXJtaW5lZCB3aGVuIGNhbGxpbmcgCisgICogICAgICAgQHJlZiBIQUxfVElNX09uZVB1bHNlX0NvbmZpZ0NoYW5uZWwoKS4gCiAgICogQHBhcmFtICBodGltIFRJTSBPbmUgUHVsc2UgaGFuZGxlCi0gICogQHBhcmFtICBPdXRwdXRDaGFubmVsIFRJTSBDaGFubmVscyB0byBiZSBlbmFibGVkCi0gICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKLSAgKiAgICAgICAgICAgIEBhcmcgVElNX0NIQU5ORUxfMTogVElNIENoYW5uZWwgMSBzZWxlY3RlZAotICAqICAgICAgICAgICAgQGFyZyBUSU1fQ0hBTk5FTF8yOiBUSU0gQ2hhbm5lbCAyIHNlbGVjdGVkCisgICogQHBhcmFtICBPdXRwdXRDaGFubmVsIFNlZSBub3RlIGFib3ZlCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNX09uZVB1bHNlX1N0YXJ0KFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCB1aW50MzJfdCBPdXRwdXRDaGFubmVsKQogeworICBIQUxfVElNX0NoYW5uZWxTdGF0ZVR5cGVEZWYgY2hhbm5lbF8xX3N0YXRlID0gVElNX0NIQU5ORUxfU1RBVEVfR0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEpOworICBIQUxfVElNX0NoYW5uZWxTdGF0ZVR5cGVEZWYgY2hhbm5lbF8yX3N0YXRlID0gVElNX0NIQU5ORUxfU1RBVEVfR0VUKGh0aW0sIFRJTV9DSEFOTkVMXzIpOworICBIQUxfVElNX0NoYW5uZWxTdGF0ZVR5cGVEZWYgY29tcGxlbWVudGFyeV9jaGFubmVsXzFfc3RhdGUgPSBUSU1fQ0hBTk5FTF9OX1NUQVRFX0dFVChodGltLCBUSU1fQ0hBTk5FTF8xKTsKKyAgSEFMX1RJTV9DaGFubmVsU3RhdGVUeXBlRGVmIGNvbXBsZW1lbnRhcnlfY2hhbm5lbF8yX3N0YXRlID0gVElNX0NIQU5ORUxfTl9TVEFURV9HRVQoaHRpbSwgVElNX0NIQU5ORUxfMik7CisKICAgLyogUHJldmVudCB1bnVzZWQgYXJndW1lbnQocykgY29tcGlsYXRpb24gd2FybmluZyAqLwogICBVTlVTRUQoT3V0cHV0Q2hhbm5lbCk7CiAKKyAgLyogQ2hlY2sgdGhlIFRJTSBjaGFubmVscyBzdGF0ZSAqLworICBpZiAoKGNoYW5uZWxfMV9zdGF0ZSAhPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpCisgICAgICB8fCAoY2hhbm5lbF8yX3N0YXRlICE9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkKKyAgICAgIHx8IChjb21wbGVtZW50YXJ5X2NoYW5uZWxfMV9zdGF0ZSAhPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpCisgICAgICB8fCAoY29tcGxlbWVudGFyeV9jaGFubmVsXzJfc3RhdGUgIT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKSkKKyAgeworICAgIHJldHVybiBIQUxfRVJST1I7CisgIH0KKworICAvKiBTZXQgdGhlIFRJTSBjaGFubmVscyBzdGF0ZSAqLworICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpOworICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMiwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpOworICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8xLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSk7CisgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzIsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKTsKKwogICAvKiBFbmFibGUgdGhlIENhcHR1cmUgY29tcGFyZSBhbmQgdGhlIElucHV0IENhcHR1cmUgY2hhbm5lbHMKICAgICAoaW4gdGhlIE9QTSBNb2RlIHRoZSB0d28gcG9zc2libGUgY2hhbm5lbHMgdGhhdCBjYW4gYmUgdXNlZCBhcmUgVElNX0NIQU5ORUxfMSBhbmQgVElNX0NIQU5ORUxfMikKICAgICBpZiBUSU1fQ0hBTk5FTF8xIGlzIHVzZWQgYXMgb3V0cHV0LCB0aGUgVElNX0NIQU5ORUxfMiB3aWxsIGJlIHVzZWQgYXMgaW5wdXQgYW5kCiAgICAgaWYgVElNX0NIQU5ORUxfMSBpcyB1c2VkIGFzIGlucHV0LCB0aGUgVElNX0NIQU5ORUxfMiB3aWxsIGJlIHVzZWQgYXMgb3V0cHV0Ci0gICAgaW4gYWxsIGNvbWJpbmF0aW9ucywgdGhlIFRJTV9DSEFOTkVMXzEgYW5kIFRJTV9DSEFOTkVMXzIgc2hvdWxkIGJlIGVuYWJsZWQgdG9nZXRoZXIKKyAgICB3aGF0ZXZlciB0aGUgY29tYmluYXRpb24sIHRoZSBUSU1fQ0hBTk5FTF8xIGFuZCBUSU1fQ0hBTk5FTF8yIHNob3VsZCBiZSBlbmFibGVkIHRvZ2V0aGVyCiAKICAgICBObyBuZWVkIHRvIGVuYWJsZSB0aGUgY291bnRlciwgaXQncyBlbmFibGVkIGF1dG9tYXRpY2FsbHkgYnkgaGFyZHdhcmUKICAgICAodGhlIGNvdW50ZXIgc3RhcnRzIGluIHJlc3BvbnNlIHRvIGEgc3RpbXVsdXMgYW5kIGdlbmVyYXRlIGEgcHVsc2UgKi8KQEAgLTI0MzgsMTEgKzI3MzYsMTIgQEAKIAogLyoqCiAgICogQGJyaWVmICBTdG9wcyB0aGUgVElNIE9uZSBQdWxzZSBzaWduYWwgZ2VuZXJhdGlvbi4KKyAgKiBAbm90ZSBUaG91Z2ggT3V0cHV0Q2hhbm5lbCBwYXJhbWV0ZXIgaXMgZGVwcmVjYXRlZCBhbmQgaWdub3JlZCBieSB0aGUgZnVuY3Rpb24KKyAgKiAgICAgICAgaXQgaGFzIGJlZW4ga2VwdCB0byBhdm9pZCBIQUxfVElNIEFQSSBjb21wYXRpYmlsaXR5IGJyZWFrLgorICAqIEBub3RlIFRoZSBwdWxzZSBvdXRwdXQgY2hhbm5lbCBpcyBkZXRlcm1pbmVkIHdoZW4gY2FsbGluZyAKKyAgKiAgICAgICBAcmVmIEhBTF9USU1fT25lUHVsc2VfQ29uZmlnQ2hhbm5lbCgpLiAKICAgKiBAcGFyYW0gIGh0aW0gVElNIE9uZSBQdWxzZSBoYW5kbGUKLSAgKiBAcGFyYW0gIE91dHB1dENoYW5uZWwgVElNIENoYW5uZWxzIHRvIGJlIGRpc2FibGUKLSAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgotICAqICAgICAgICAgICAgQGFyZyBUSU1fQ0hBTk5FTF8xOiBUSU0gQ2hhbm5lbCAxIHNlbGVjdGVkCi0gICogICAgICAgICAgICBAYXJnIFRJTV9DSEFOTkVMXzI6IFRJTSBDaGFubmVsIDIgc2VsZWN0ZWQKKyAgKiBAcGFyYW0gIE91dHB1dENoYW5uZWwgU2VlIG5vdGUgYWJvdmUKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1fT25lUHVsc2VfU3RvcChUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgdWludDMyX3QgT3V0cHV0Q2hhbm5lbCkKQEAgLTI0NTQsNyArMjc1Myw3IEBACiAgIChpbiB0aGUgT1BNIE1vZGUgdGhlIHR3byBwb3NzaWJsZSBjaGFubmVscyB0aGF0IGNhbiBiZSB1c2VkIGFyZSBUSU1fQ0hBTk5FTF8xIGFuZCBUSU1fQ0hBTk5FTF8yKQogICBpZiBUSU1fQ0hBTk5FTF8xIGlzIHVzZWQgYXMgb3V0cHV0LCB0aGUgVElNX0NIQU5ORUxfMiB3aWxsIGJlIHVzZWQgYXMgaW5wdXQgYW5kCiAgIGlmIFRJTV9DSEFOTkVMXzEgaXMgdXNlZCBhcyBpbnB1dCwgdGhlIFRJTV9DSEFOTkVMXzIgd2lsbCBiZSB1c2VkIGFzIG91dHB1dAotICBpbiBhbGwgY29tYmluYXRpb25zLCB0aGUgVElNX0NIQU5ORUxfMSBhbmQgVElNX0NIQU5ORUxfMiBzaG91bGQgYmUgZGlzYWJsZWQgdG9nZXRoZXIgKi8KKyAgd2hhdGV2ZXIgdGhlIGNvbWJpbmF0aW9uLCB0aGUgVElNX0NIQU5ORUxfMSBhbmQgVElNX0NIQU5ORUxfMiBzaG91bGQgYmUgZGlzYWJsZWQgdG9nZXRoZXIgKi8KIAogICBUSU1fQ0N4Q2hhbm5lbENtZChodGltLT5JbnN0YW5jZSwgVElNX0NIQU5ORUxfMSwgVElNX0NDeF9ESVNBQkxFKTsKICAgVElNX0NDeENoYW5uZWxDbWQoaHRpbS0+SW5zdGFuY2UsIFRJTV9DSEFOTkVMXzIsIFRJTV9DQ3hfRElTQUJMRSk7CkBAIC0yNDY4LDI5ICsyNzY3LDU2IEBACiAgIC8qIERpc2FibGUgdGhlIFBlcmlwaGVyYWwgKi8KICAgX19IQUxfVElNX0RJU0FCTEUoaHRpbSk7CiAKKyAgLyogU2V0IHRoZSBUSU0gY2hhbm5lbHMgc3RhdGUgKi8KKyAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8yLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8xLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8yLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworCiAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KICAgcmV0dXJuIEhBTF9PSzsKIH0KIAogLyoqCiAgICogQGJyaWVmICBTdGFydHMgdGhlIFRJTSBPbmUgUHVsc2Ugc2lnbmFsIGdlbmVyYXRpb24gaW4gaW50ZXJydXB0IG1vZGUuCisgICogQG5vdGUgVGhvdWdoIE91dHB1dENoYW5uZWwgcGFyYW1ldGVyIGlzIGRlcHJlY2F0ZWQgYW5kIGlnbm9yZWQgYnkgdGhlIGZ1bmN0aW9uCisgICogICAgICAgIGl0IGhhcyBiZWVuIGtlcHQgdG8gYXZvaWQgSEFMX1RJTSBBUEkgY29tcGF0aWJpbGl0eSBicmVhay4KKyAgKiBAbm90ZSBUaGUgcHVsc2Ugb3V0cHV0IGNoYW5uZWwgaXMgZGV0ZXJtaW5lZCB3aGVuIGNhbGxpbmcgCisgICogICAgICAgQHJlZiBIQUxfVElNX09uZVB1bHNlX0NvbmZpZ0NoYW5uZWwoKS4gCiAgICogQHBhcmFtICBodGltIFRJTSBPbmUgUHVsc2UgaGFuZGxlCi0gICogQHBhcmFtICBPdXRwdXRDaGFubmVsIFRJTSBDaGFubmVscyB0byBiZSBlbmFibGVkCi0gICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKLSAgKiAgICAgICAgICAgIEBhcmcgVElNX0NIQU5ORUxfMTogVElNIENoYW5uZWwgMSBzZWxlY3RlZAotICAqICAgICAgICAgICAgQGFyZyBUSU1fQ0hBTk5FTF8yOiBUSU0gQ2hhbm5lbCAyIHNlbGVjdGVkCisgICogQHBhcmFtICBPdXRwdXRDaGFubmVsIFNlZSBub3RlIGFib3ZlCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNX09uZVB1bHNlX1N0YXJ0X0lUKFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCB1aW50MzJfdCBPdXRwdXRDaGFubmVsKQogeworICBIQUxfVElNX0NoYW5uZWxTdGF0ZVR5cGVEZWYgY2hhbm5lbF8xX3N0YXRlID0gVElNX0NIQU5ORUxfU1RBVEVfR0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEpOworICBIQUxfVElNX0NoYW5uZWxTdGF0ZVR5cGVEZWYgY2hhbm5lbF8yX3N0YXRlID0gVElNX0NIQU5ORUxfU1RBVEVfR0VUKGh0aW0sIFRJTV9DSEFOTkVMXzIpOworICBIQUxfVElNX0NoYW5uZWxTdGF0ZVR5cGVEZWYgY29tcGxlbWVudGFyeV9jaGFubmVsXzFfc3RhdGUgPSBUSU1fQ0hBTk5FTF9OX1NUQVRFX0dFVChodGltLCBUSU1fQ0hBTk5FTF8xKTsKKyAgSEFMX1RJTV9DaGFubmVsU3RhdGVUeXBlRGVmIGNvbXBsZW1lbnRhcnlfY2hhbm5lbF8yX3N0YXRlID0gVElNX0NIQU5ORUxfTl9TVEFURV9HRVQoaHRpbSwgVElNX0NIQU5ORUxfMik7CisKICAgLyogUHJldmVudCB1bnVzZWQgYXJndW1lbnQocykgY29tcGlsYXRpb24gd2FybmluZyAqLwogICBVTlVTRUQoT3V0cHV0Q2hhbm5lbCk7CiAKKyAgLyogQ2hlY2sgdGhlIFRJTSBjaGFubmVscyBzdGF0ZSAqLworICBpZiAoKGNoYW5uZWxfMV9zdGF0ZSAhPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpCisgICAgICB8fCAoY2hhbm5lbF8yX3N0YXRlICE9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkKKyAgICAgIHx8IChjb21wbGVtZW50YXJ5X2NoYW5uZWxfMV9zdGF0ZSAhPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpCisgICAgICB8fCAoY29tcGxlbWVudGFyeV9jaGFubmVsXzJfc3RhdGUgIT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKSkKKyAgeworICAgIHJldHVybiBIQUxfRVJST1I7CisgIH0KKworICAvKiBTZXQgdGhlIFRJTSBjaGFubmVscyBzdGF0ZSAqLworICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpOworICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMiwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpOworICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8xLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSk7CisgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzIsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKTsKKwogICAvKiBFbmFibGUgdGhlIENhcHR1cmUgY29tcGFyZSBhbmQgdGhlIElucHV0IENhcHR1cmUgY2hhbm5lbHMKICAgICAoaW4gdGhlIE9QTSBNb2RlIHRoZSB0d28gcG9zc2libGUgY2hhbm5lbHMgdGhhdCBjYW4gYmUgdXNlZCBhcmUgVElNX0NIQU5ORUxfMSBhbmQgVElNX0NIQU5ORUxfMikKICAgICBpZiBUSU1fQ0hBTk5FTF8xIGlzIHVzZWQgYXMgb3V0cHV0LCB0aGUgVElNX0NIQU5ORUxfMiB3aWxsIGJlIHVzZWQgYXMgaW5wdXQgYW5kCiAgICAgaWYgVElNX0NIQU5ORUxfMSBpcyB1c2VkIGFzIGlucHV0LCB0aGUgVElNX0NIQU5ORUxfMiB3aWxsIGJlIHVzZWQgYXMgb3V0cHV0Ci0gICAgaW4gYWxsIGNvbWJpbmF0aW9ucywgdGhlIFRJTV9DSEFOTkVMXzEgYW5kIFRJTV9DSEFOTkVMXzIgc2hvdWxkIGJlIGVuYWJsZWQgdG9nZXRoZXIKKyAgICB3aGF0ZXZlciB0aGUgY29tYmluYXRpb24sIHRoZSBUSU1fQ0hBTk5FTF8xIGFuZCBUSU1fQ0hBTk5FTF8yIHNob3VsZCBiZSBlbmFibGVkIHRvZ2V0aGVyCiAKICAgICBObyBuZWVkIHRvIGVuYWJsZSB0aGUgY291bnRlciwgaXQncyBlbmFibGVkIGF1dG9tYXRpY2FsbHkgYnkgaGFyZHdhcmUKICAgICAodGhlIGNvdW50ZXIgc3RhcnRzIGluIHJlc3BvbnNlIHRvIGEgc3RpbXVsdXMgYW5kIGdlbmVyYXRlIGEgcHVsc2UgKi8KQEAgLTI1MTYsMTEgKzI4NDIsMTIgQEAKIAogLyoqCiAgICogQGJyaWVmICBTdG9wcyB0aGUgVElNIE9uZSBQdWxzZSBzaWduYWwgZ2VuZXJhdGlvbiBpbiBpbnRlcnJ1cHQgbW9kZS4KKyAgKiBAbm90ZSBUaG91Z2ggT3V0cHV0Q2hhbm5lbCBwYXJhbWV0ZXIgaXMgZGVwcmVjYXRlZCBhbmQgaWdub3JlZCBieSB0aGUgZnVuY3Rpb24KKyAgKiAgICAgICAgaXQgaGFzIGJlZW4ga2VwdCB0byBhdm9pZCBIQUxfVElNIEFQSSBjb21wYXRpYmlsaXR5IGJyZWFrLgorICAqIEBub3RlIFRoZSBwdWxzZSBvdXRwdXQgY2hhbm5lbCBpcyBkZXRlcm1pbmVkIHdoZW4gY2FsbGluZyAKKyAgKiAgICAgICBAcmVmIEhBTF9USU1fT25lUHVsc2VfQ29uZmlnQ2hhbm5lbCgpLiAKICAgKiBAcGFyYW0gIGh0aW0gVElNIE9uZSBQdWxzZSBoYW5kbGUKLSAgKiBAcGFyYW0gIE91dHB1dENoYW5uZWwgVElNIENoYW5uZWxzIHRvIGJlIGVuYWJsZWQKLSAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgotICAqICAgICAgICAgICAgQGFyZyBUSU1fQ0hBTk5FTF8xOiBUSU0gQ2hhbm5lbCAxIHNlbGVjdGVkCi0gICogICAgICAgICAgICBAYXJnIFRJTV9DSEFOTkVMXzI6IFRJTSBDaGFubmVsIDIgc2VsZWN0ZWQKKyAgKiBAcGFyYW0gIE91dHB1dENoYW5uZWwgU2VlIG5vdGUgYWJvdmUKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1fT25lUHVsc2VfU3RvcF9JVChUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgdWludDMyX3QgT3V0cHV0Q2hhbm5lbCkKQEAgLTI1MzgsNyArMjg2NSw3IEBACiAgIChpbiB0aGUgT1BNIE1vZGUgdGhlIHR3byBwb3NzaWJsZSBjaGFubmVscyB0aGF0IGNhbiBiZSB1c2VkIGFyZSBUSU1fQ0hBTk5FTF8xIGFuZCBUSU1fQ0hBTk5FTF8yKQogICBpZiBUSU1fQ0hBTk5FTF8xIGlzIHVzZWQgYXMgb3V0cHV0LCB0aGUgVElNX0NIQU5ORUxfMiB3aWxsIGJlIHVzZWQgYXMgaW5wdXQgYW5kCiAgIGlmIFRJTV9DSEFOTkVMXzEgaXMgdXNlZCBhcyBpbnB1dCwgdGhlIFRJTV9DSEFOTkVMXzIgd2lsbCBiZSB1c2VkIGFzIG91dHB1dAotICBpbiBhbGwgY29tYmluYXRpb25zLCB0aGUgVElNX0NIQU5ORUxfMSBhbmQgVElNX0NIQU5ORUxfMiBzaG91bGQgYmUgZGlzYWJsZWQgdG9nZXRoZXIgKi8KKyAgd2hhdGV2ZXIgdGhlIGNvbWJpbmF0aW9uLCB0aGUgVElNX0NIQU5ORUxfMSBhbmQgVElNX0NIQU5ORUxfMiBzaG91bGQgYmUgZGlzYWJsZWQgdG9nZXRoZXIgKi8KICAgVElNX0NDeENoYW5uZWxDbWQoaHRpbS0+SW5zdGFuY2UsIFRJTV9DSEFOTkVMXzEsIFRJTV9DQ3hfRElTQUJMRSk7CiAgIFRJTV9DQ3hDaGFubmVsQ21kKGh0aW0tPkluc3RhbmNlLCBUSU1fQ0hBTk5FTF8yLCBUSU1fQ0N4X0RJU0FCTEUpOwogCkBAIC0yNTUxLDYgKzI4NzgsMTIgQEAKICAgLyogRGlzYWJsZSB0aGUgUGVyaXBoZXJhbCAqLwogICBfX0hBTF9USU1fRElTQUJMRShodGltKTsKIAorICAvKiBTZXQgdGhlIFRJTSBjaGFubmVscyBzdGF0ZSAqLworICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzIsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzIsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisKICAgLyogUmV0dXJuIGZ1bmN0aW9uIHN0YXR1cyAqLwogICByZXR1cm4gSEFMX09LOwogfQpAQCAtMjU4OSw2ICsyOTIyLDkgQEAKICAgKiBAbm90ZSAgIEVuY29kZXIgbW9kZSBhbmQgRXh0ZXJuYWwgY2xvY2sgbW9kZSAyIGFyZSBub3QgY29tcGF0aWJsZSBhbmQgbXVzdCBub3QgYmUgc2VsZWN0ZWQgdG9nZXRoZXIKICAgKiAgICAgICAgIEV4OiBBIGNhbGwgZm9yIEByZWYgSEFMX1RJTV9FbmNvZGVyX0luaXQgd2lsbCBlcmFzZSB0aGUgc2V0dGluZ3Mgb2YgQHJlZiBIQUxfVElNX0NvbmZpZ0Nsb2NrU291cmNlCiAgICogICAgICAgICB1c2luZyBUSU1fQ0xPQ0tTT1VSQ0VfRVRSTU9ERTIgYW5kIHZpY2UgdmVyc2EKKyAgKiBAbm90ZSAgIFdoZW4gdGhlIHRpbWVyIGluc3RhbmNlIGlzIGluaXRpYWxpemVkIGluIEVuY29kZXIgbW9kZSwgdGltZXIKKyAgKiAgICAgICAgIGNoYW5uZWxzIDEgYW5kIGNoYW5uZWwgMiBhcmUgcmVzZXJ2ZWQgYW5kIGNhbm5vdCBiZSB1c2VkIGZvciBvdGhlcgorICAqICAgICAgICAgcHVycG9zZS4KICAgKiBAcGFyYW0gIGh0aW0gVElNIEVuY29kZXIgSW50ZXJmYWNlIGhhbmRsZQogICAqIEBwYXJhbSAgc0NvbmZpZyBUSU0gRW5jb2RlciBJbnRlcmZhY2UgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKQEAgLTI2MDYsMTAgKzI5NDIsMTAgQEAKICAgfQogCiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCisgIGFzc2VydF9wYXJhbShJU19USU1fRU5DT0RFUl9JTlRFUkZBQ0VfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKTsKICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9DT1VOVEVSX01PREUoaHRpbS0+SW5pdC5Db3VudGVyTW9kZSkpOwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0NMT0NLRElWSVNJT05fRElWKGh0aW0tPkluaXQuQ2xvY2tEaXZpc2lvbikpOwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0FVVE9SRUxPQURfUFJFTE9BRChodGltLT5Jbml0LkF1dG9SZWxvYWRQcmVsb2FkKSk7Ci0gIGFzc2VydF9wYXJhbShJU19USU1fQ0MyX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSk7CiAgIGFzc2VydF9wYXJhbShJU19USU1fRU5DT0RFUl9NT0RFKHNDb25maWctPkVuY29kZXJNb2RlKSk7CiAgIGFzc2VydF9wYXJhbShJU19USU1fSUNfU0VMRUNUSU9OKHNDb25maWctPklDMVNlbGVjdGlvbikpOwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0lDX1NFTEVDVElPTihzQ29uZmlnLT5JQzJTZWxlY3Rpb24pKTsKQEAgLTI2ODYsNiArMzAyMiwxNSBAQAogICAvKiBXcml0ZSB0byBUSU14IENDRVIgKi8KICAgaHRpbS0+SW5zdGFuY2UtPkNDRVIgPSB0bXBjY2VyOwogCisgIC8qIEluaXRpYWxpemUgdGhlIERNQSBidXJzdCBvcGVyYXRpb24gc3RhdGUgKi8KKyAgaHRpbS0+RE1BQnVyc3RTdGF0ZSA9IEhBTF9ETUFfQlVSU1RfU1RBVEVfUkVBRFk7CisKKyAgLyogU2V0IHRoZSBUSU0gY2hhbm5lbHMgc3RhdGUgKi8KKyAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8yLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8xLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8yLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworCiAgIC8qIEluaXRpYWxpemUgdGhlIFRJTSBzdGF0ZSovCiAgIGh0aW0tPlN0YXRlID0gSEFMX1RJTV9TVEFURV9SRUFEWTsKIApAQCAtMjcyMCw2ICszMDY1LDE1IEBACiAgIEhBTF9USU1fRW5jb2Rlcl9Nc3BEZUluaXQoaHRpbSk7CiAjZW5kaWYgLyogVVNFX0hBTF9USU1fUkVHSVNURVJfQ0FMTEJBQ0tTICovCiAKKyAgLyogQ2hhbmdlIHRoZSBETUEgYnVyc3Qgb3BlcmF0aW9uIHN0YXRlICovCisgIGh0aW0tPkRNQUJ1cnN0U3RhdGUgPSBIQUxfRE1BX0JVUlNUX1NUQVRFX1JFU0VUOworCisgIC8qIFNldCB0aGUgVElNIGNoYW5uZWxzIHN0YXRlICovCisgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8xLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVTRVQpOworICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMiwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFU0VUKTsKKyAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFU0VUKTsKKyAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMiwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFU0VUKTsKKwogICAvKiBDaGFuZ2UgVElNIHN0YXRlICovCiAgIGh0aW0tPlN0YXRlID0gSEFMX1RJTV9TVEFURV9SRVNFVDsKIApAQCAtMjc3MSw4ICszMTI1LDU4IEBACiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNX0VuY29kZXJfU3RhcnQoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sIHVpbnQzMl90IENoYW5uZWwpCiB7CisgIEhBTF9USU1fQ2hhbm5lbFN0YXRlVHlwZURlZiBjaGFubmVsXzFfc3RhdGUgPSBUSU1fQ0hBTk5FTF9TVEFURV9HRVQoaHRpbSwgVElNX0NIQU5ORUxfMSk7CisgIEhBTF9USU1fQ2hhbm5lbFN0YXRlVHlwZURlZiBjaGFubmVsXzJfc3RhdGUgPSBUSU1fQ0hBTk5FTF9TVEFURV9HRVQoaHRpbSwgVElNX0NIQU5ORUxfMik7CisgIEhBTF9USU1fQ2hhbm5lbFN0YXRlVHlwZURlZiBjb21wbGVtZW50YXJ5X2NoYW5uZWxfMV9zdGF0ZSA9IFRJTV9DSEFOTkVMX05fU1RBVEVfR0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEpOworICBIQUxfVElNX0NoYW5uZWxTdGF0ZVR5cGVEZWYgY29tcGxlbWVudGFyeV9jaGFubmVsXzJfc3RhdGUgPSBUSU1fQ0hBTk5FTF9OX1NUQVRFX0dFVChodGltLCBUSU1fQ0hBTk5FTF8yKTsKKwogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwotICBhc3NlcnRfcGFyYW0oSVNfVElNX0NDMl9JTlNUQU5DRShodGltLT5JbnN0YW5jZSkpOworICBhc3NlcnRfcGFyYW0oSVNfVElNX0VOQ09ERVJfSU5URVJGQUNFX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSk7CisKKyAgLyogU2V0IHRoZSBUSU0gY2hhbm5lbChzKSBzdGF0ZSAqLworICBpZiAoQ2hhbm5lbCA9PSBUSU1fQ0hBTk5FTF8xKQorICB7CisgICAgaWYgKChjaGFubmVsXzFfc3RhdGUgIT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQorICAgICAgICB8fCAoY29tcGxlbWVudGFyeV9jaGFubmVsXzFfc3RhdGUgIT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKSkKKyAgICB7CisgICAgICByZXR1cm4gSEFMX0VSUk9SOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKTsKKyAgICAgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKTsKKyAgICB9CisgIH0KKyAgZWxzZSBpZiAoQ2hhbm5lbCA9PSBUSU1fQ0hBTk5FTF8yKQorICB7CisgICAgaWYgKChjaGFubmVsXzJfc3RhdGUgIT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQorICAgICAgICB8fCAoY29tcGxlbWVudGFyeV9jaGFubmVsXzJfc3RhdGUgIT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKSkKKyAgICB7CisgICAgICByZXR1cm4gSEFMX0VSUk9SOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzIsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKTsKKyAgICAgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzIsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKTsKKyAgICB9CisgIH0KKyAgZWxzZQorICB7CisgICAgaWYgKChjaGFubmVsXzFfc3RhdGUgIT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQorICAgICAgICB8fCAoY2hhbm5lbF8yX3N0YXRlICE9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkKKyAgICAgICAgfHwgKGNvbXBsZW1lbnRhcnlfY2hhbm5lbF8xX3N0YXRlICE9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkKKyAgICAgICAgfHwgKGNvbXBsZW1lbnRhcnlfY2hhbm5lbF8yX3N0YXRlICE9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkpCisgICAgeworICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8xLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSk7CisgICAgICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMiwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpOworICAgICAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpOworICAgICAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMiwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpOworICAgIH0KKyAgfQogCiAgIC8qIEVuYWJsZSB0aGUgZW5jb2RlciBpbnRlcmZhY2UgY2hhbm5lbHMgKi8KICAgc3dpdGNoIChDaGFubmVsKQpAQCAtMjgxNiw3ICszMjIwLDcgQEAKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1fRW5jb2Rlcl9TdG9wKFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCB1aW50MzJfdCBDaGFubmVsKQogewogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwotICBhc3NlcnRfcGFyYW0oSVNfVElNX0NDMl9JTlNUQU5DRShodGltLT5JbnN0YW5jZSkpOworICBhc3NlcnRfcGFyYW0oSVNfVElNX0VOQ09ERVJfSU5URVJGQUNFX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSk7CiAKICAgLyogRGlzYWJsZSB0aGUgSW5wdXQgQ2FwdHVyZSBjaGFubmVscyAxIGFuZCAyCiAgICAgKGluIHRoZSBFbmNvZGVySW50ZXJmYWNlIHRoZSB0d28gcG9zc2libGUgY2hhbm5lbHMgdGhhdCBjYW4gYmUgdXNlZCBhcmUgVElNX0NIQU5ORUxfMSBhbmQgVElNX0NIQU5ORUxfMikgKi8KQEAgLTI4NDUsNiArMzI0OSwyMCBAQAogICAvKiBEaXNhYmxlIHRoZSBQZXJpcGhlcmFsICovCiAgIF9fSEFMX1RJTV9ESVNBQkxFKGh0aW0pOwogCisgIC8qIFNldCB0aGUgVElNIGNoYW5uZWwocykgc3RhdGUgKi8KKyAgaWYgKChDaGFubmVsID09IFRJTV9DSEFOTkVMXzEpIHx8IChDaGFubmVsID09IFRJTV9DSEFOTkVMXzIpKQorICB7CisgICAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIENoYW5uZWwsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgICAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgQ2hhbm5lbCwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgfQorICBlbHNlCisgIHsKKyAgICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMiwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8xLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworICAgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzIsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgIH0KKwogICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCiAgIHJldHVybiBIQUxfT0s7CiB9CkBAIC0yODYxLDggKzMyNzksNTggQEAKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1fRW5jb2Rlcl9TdGFydF9JVChUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgdWludDMyX3QgQ2hhbm5lbCkKIHsKKyAgSEFMX1RJTV9DaGFubmVsU3RhdGVUeXBlRGVmIGNoYW5uZWxfMV9zdGF0ZSA9IFRJTV9DSEFOTkVMX1NUQVRFX0dFVChodGltLCBUSU1fQ0hBTk5FTF8xKTsKKyAgSEFMX1RJTV9DaGFubmVsU3RhdGVUeXBlRGVmIGNoYW5uZWxfMl9zdGF0ZSA9IFRJTV9DSEFOTkVMX1NUQVRFX0dFVChodGltLCBUSU1fQ0hBTk5FTF8yKTsKKyAgSEFMX1RJTV9DaGFubmVsU3RhdGVUeXBlRGVmIGNvbXBsZW1lbnRhcnlfY2hhbm5lbF8xX3N0YXRlID0gVElNX0NIQU5ORUxfTl9TVEFURV9HRVQoaHRpbSwgVElNX0NIQU5ORUxfMSk7CisgIEhBTF9USU1fQ2hhbm5lbFN0YXRlVHlwZURlZiBjb21wbGVtZW50YXJ5X2NoYW5uZWxfMl9zdGF0ZSA9IFRJTV9DSEFOTkVMX05fU1RBVEVfR0VUKGh0aW0sIFRJTV9DSEFOTkVMXzIpOworCiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCi0gIGFzc2VydF9wYXJhbShJU19USU1fQ0MyX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSk7CisgIGFzc2VydF9wYXJhbShJU19USU1fRU5DT0RFUl9JTlRFUkZBQ0VfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKTsKKworICAvKiBTZXQgdGhlIFRJTSBjaGFubmVsKHMpIHN0YXRlICovCisgIGlmIChDaGFubmVsID09IFRJTV9DSEFOTkVMXzEpCisgIHsKKyAgICBpZiAoKGNoYW5uZWxfMV9zdGF0ZSAhPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpCisgICAgICAgIHx8IChjb21wbGVtZW50YXJ5X2NoYW5uZWxfMV9zdGF0ZSAhPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpKQorICAgIHsKKyAgICAgIHJldHVybiBIQUxfRVJST1I7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpOworICAgICAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpOworICAgIH0KKyAgfQorICBlbHNlIGlmIChDaGFubmVsID09IFRJTV9DSEFOTkVMXzIpCisgIHsKKyAgICBpZiAoKGNoYW5uZWxfMl9zdGF0ZSAhPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpCisgICAgICAgIHx8IChjb21wbGVtZW50YXJ5X2NoYW5uZWxfMl9zdGF0ZSAhPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpKQorICAgIHsKKyAgICAgIHJldHVybiBIQUxfRVJST1I7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMiwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpOworICAgICAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMiwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpOworICAgIH0KKyAgfQorICBlbHNlCisgIHsKKyAgICBpZiAoKGNoYW5uZWxfMV9zdGF0ZSAhPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpCisgICAgICAgIHx8IChjaGFubmVsXzJfc3RhdGUgIT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQorICAgICAgICB8fCAoY29tcGxlbWVudGFyeV9jaGFubmVsXzFfc3RhdGUgIT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQorICAgICAgICB8fCAoY29tcGxlbWVudGFyeV9jaGFubmVsXzJfc3RhdGUgIT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKSkKKyAgICB7CisgICAgICByZXR1cm4gSEFMX0VSUk9SOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKTsKKyAgICAgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8yLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSk7CisgICAgICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8xLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSk7CisgICAgICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8yLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSk7CisgICAgfQorICB9CiAKICAgLyogRW5hYmxlIHRoZSBlbmNvZGVyIGludGVyZmFjZSBjaGFubmVscyAqLwogICAvKiBFbmFibGUgdGhlIGNhcHR1cmUgY29tcGFyZSBJbnRlcnJ1cHRzIDEgYW5kL29yIDIgKi8KQEAgLTI5MTIsNyArMzM4MCw3IEBACiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNX0VuY29kZXJfU3RvcF9JVChUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgdWludDMyX3QgQ2hhbm5lbCkKIHsKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KLSAgYXNzZXJ0X3BhcmFtKElTX1RJTV9DQzJfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKTsKKyAgYXNzZXJ0X3BhcmFtKElTX1RJTV9FTkNPREVSX0lOVEVSRkFDRV9JTlNUQU5DRShodGltLT5JbnN0YW5jZSkpOwogCiAgIC8qIERpc2FibGUgdGhlIElucHV0IENhcHR1cmUgY2hhbm5lbHMgMSBhbmQgMgogICAgIChpbiB0aGUgRW5jb2RlckludGVyZmFjZSB0aGUgdHdvIHBvc3NpYmxlIGNoYW5uZWxzIHRoYXQgY2FuIGJlIHVzZWQgYXJlIFRJTV9DSEFOTkVMXzEgYW5kIFRJTV9DSEFOTkVMXzIpICovCkBAIC0yOTQzLDggKzM0MTEsMTkgQEAKICAgLyogRGlzYWJsZSB0aGUgUGVyaXBoZXJhbCAqLwogICBfX0hBTF9USU1fRElTQUJMRShodGltKTsKIAotICAvKiBDaGFuZ2UgdGhlIGh0aW0gc3RhdGUgKi8KLSAgaHRpbS0+U3RhdGUgPSBIQUxfVElNX1NUQVRFX1JFQURZOworICAvKiBTZXQgdGhlIFRJTSBjaGFubmVsKHMpIHN0YXRlICovCisgIGlmICgoQ2hhbm5lbCA9PSBUSU1fQ0hBTk5FTF8xKSB8fCAoQ2hhbm5lbCA9PSBUSU1fQ0hBTk5FTF8yKSkKKyAgeworICAgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBDaGFubmVsLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworICAgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIENoYW5uZWwsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgIH0KKyAgZWxzZQorICB7CisgICAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgICAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzIsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgICAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8yLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworICB9CiAKICAgLyogUmV0dXJuIGZ1bmN0aW9uIHN0YXR1cyAqLwogICByZXR1cm4gSEFMX09LOwpAQCAtMjk2NiwyNyArMzQ0NSw5NSBAQAogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTV9FbmNvZGVyX1N0YXJ0X0RNQShUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgdWludDMyX3QgQ2hhbm5lbCwgdWludDMyX3QgKnBEYXRhMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgKnBEYXRhMiwgdWludDE2X3QgTGVuZ3RoKQogewotICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwotICBhc3NlcnRfcGFyYW0oSVNfVElNX0RNQV9DQ19JTlNUQU5DRShodGltLT5JbnN0YW5jZSkpOworICBIQUxfVElNX0NoYW5uZWxTdGF0ZVR5cGVEZWYgY2hhbm5lbF8xX3N0YXRlID0gVElNX0NIQU5ORUxfU1RBVEVfR0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEpOworICBIQUxfVElNX0NoYW5uZWxTdGF0ZVR5cGVEZWYgY2hhbm5lbF8yX3N0YXRlID0gVElNX0NIQU5ORUxfU1RBVEVfR0VUKGh0aW0sIFRJTV9DSEFOTkVMXzIpOworICBIQUxfVElNX0NoYW5uZWxTdGF0ZVR5cGVEZWYgY29tcGxlbWVudGFyeV9jaGFubmVsXzFfc3RhdGUgPSBUSU1fQ0hBTk5FTF9OX1NUQVRFX0dFVChodGltLCBUSU1fQ0hBTk5FTF8xKTsKKyAgSEFMX1RJTV9DaGFubmVsU3RhdGVUeXBlRGVmIGNvbXBsZW1lbnRhcnlfY2hhbm5lbF8yX3N0YXRlID0gVElNX0NIQU5ORUxfTl9TVEFURV9HRVQoaHRpbSwgVElNX0NIQU5ORUxfMik7CiAKLSAgaWYgKGh0aW0tPlN0YXRlID09IEhBTF9USU1fU1RBVEVfQlVTWSkKKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KKyAgYXNzZXJ0X3BhcmFtKElTX1RJTV9FTkNPREVSX0lOVEVSRkFDRV9JTlNUQU5DRShodGltLT5JbnN0YW5jZSkpOworCisgIC8qIFNldCB0aGUgVElNIGNoYW5uZWwocykgc3RhdGUgKi8KKyAgaWYgKENoYW5uZWwgPT0gVElNX0NIQU5ORUxfMSkKICAgewotICAgIHJldHVybiBIQUxfQlVTWTsKLSAgfQotICBlbHNlIGlmIChodGltLT5TdGF0ZSA9PSBIQUxfVElNX1NUQVRFX1JFQURZKQotICB7Ci0gICAgaWYgKCgoKHBEYXRhMSA9PSBOVUxMKSB8fCAocERhdGEyID09IE5VTEwpKSkgJiYgKExlbmd0aCA+IDBVKSkKKyAgICBpZiAoKGNoYW5uZWxfMV9zdGF0ZSA9PSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSkKKyAgICAgICAgfHwgKGNvbXBsZW1lbnRhcnlfY2hhbm5lbF8xX3N0YXRlID09IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKSkKICAgICB7Ci0gICAgICByZXR1cm4gSEFMX0VSUk9SOworICAgICAgcmV0dXJuIEhBTF9CVVNZOworICAgIH0KKyAgICBlbHNlIGlmICgoY2hhbm5lbF8xX3N0YXRlID09IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkKKyAgICAgICAgICAgICAmJiAoY29tcGxlbWVudGFyeV9jaGFubmVsXzFfc3RhdGUgPT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKSkKKyAgICB7CisgICAgICBpZiAoKHBEYXRhMSA9PSBOVUxMKSAmJiAoTGVuZ3RoID4gMFUpKQorICAgICAgeworICAgICAgICByZXR1cm4gSEFMX0VSUk9SOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpOworICAgICAgICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8xLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSk7CisgICAgICB9CiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICBodGltLT5TdGF0ZSA9IEhBTF9USU1fU1RBVEVfQlVTWTsKKyAgICAgIHJldHVybiBIQUxfRVJST1I7CisgICAgfQorICB9CisgIGVsc2UgaWYgKENoYW5uZWwgPT0gVElNX0NIQU5ORUxfMikKKyAgeworICAgIGlmICgoY2hhbm5lbF8yX3N0YXRlID09IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKQorICAgICAgICB8fCAoY29tcGxlbWVudGFyeV9jaGFubmVsXzJfc3RhdGUgPT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpKQorICAgIHsKKyAgICAgIHJldHVybiBIQUxfQlVTWTsKKyAgICB9CisgICAgZWxzZSBpZiAoKGNoYW5uZWxfMl9zdGF0ZSA9PSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpCisgICAgICAgICAgICAgJiYgKGNvbXBsZW1lbnRhcnlfY2hhbm5lbF8yX3N0YXRlID09IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkpCisgICAgeworICAgICAgaWYgKChwRGF0YTIgPT0gTlVMTCkgJiYgKExlbmd0aCA+IDBVKSkKKyAgICAgIHsKKyAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzIsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKTsKKyAgICAgICAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMiwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpOworICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICB9CiAgIH0KICAgZWxzZQogICB7Ci0gICAgLyogbm90aGluZyB0byBkbyAqLworICAgIGlmICgoY2hhbm5lbF8xX3N0YXRlID09IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKQorICAgICAgICB8fCAoY2hhbm5lbF8yX3N0YXRlID09IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKQorICAgICAgICB8fCAoY29tcGxlbWVudGFyeV9jaGFubmVsXzFfc3RhdGUgPT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpCisgICAgICAgIHx8IChjb21wbGVtZW50YXJ5X2NoYW5uZWxfMl9zdGF0ZSA9PSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSkpCisgICAgeworICAgICAgcmV0dXJuIEhBTF9CVVNZOworICAgIH0KKyAgICBlbHNlIGlmICgoY2hhbm5lbF8xX3N0YXRlID09IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkKKyAgICAgICAgICAgICAmJiAoY2hhbm5lbF8yX3N0YXRlID09IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkKKyAgICAgICAgICAgICAmJiAoY29tcGxlbWVudGFyeV9jaGFubmVsXzFfc3RhdGUgPT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQorICAgICAgICAgICAgICYmIChjb21wbGVtZW50YXJ5X2NoYW5uZWxfMl9zdGF0ZSA9PSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpKQorICAgIHsKKyAgICAgIGlmICgoKChwRGF0YTEgPT0gTlVMTCkgfHwgKHBEYXRhMiA9PSBOVUxMKSkpICYmIChMZW5ndGggPiAwVSkpCisgICAgICB7CisgICAgICAgIHJldHVybiBIQUxfRVJST1I7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8xLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSk7CisgICAgICAgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8yLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSk7CisgICAgICAgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKTsKKyAgICAgICAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMiwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpOworICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgICB9CiAgIH0KIAogICBzd2l0Y2ggKENoYW5uZWwpCkBAIC0zMDAzLDYgKzM1NTAsNyBAQAogICAgICAgLyogRW5hYmxlIHRoZSBETUEgc3RyZWFtICovCiAgICAgICBpZiAoSEFMX0RNQV9TdGFydF9JVChodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MxXSwgKHVpbnQzMl90KSZodGltLT5JbnN0YW5jZS0+Q0NSMSwgKHVpbnQzMl90KXBEYXRhMSwgTGVuZ3RoKSAhPSBIQUxfT0spCiAgICAgICB7CisgICAgICAgIC8qIFJldHVybiBlcnJvciBzdGF0dXMgKi8KICAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICAgIH0KICAgICAgIC8qIEVuYWJsZSB0aGUgVElNIElucHV0IENhcHR1cmUgRE1BIHJlcXVlc3QgKi8KQEAgLTMwMjcsNiArMzU3NSw3IEBACiAgICAgICAvKiBFbmFibGUgdGhlIERNQSBzdHJlYW0gKi8KICAgICAgIGlmIChIQUxfRE1BX1N0YXJ0X0lUKGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzJdLCAodWludDMyX3QpJmh0aW0tPkluc3RhbmNlLT5DQ1IyLCAodWludDMyX3QpcERhdGEyLCBMZW5ndGgpICE9IEhBTF9PSykKICAgICAgIHsKKyAgICAgICAgLyogUmV0dXJuIGVycm9yIHN0YXR1cyAqLwogICAgICAgICByZXR1cm4gSEFMX0VSUk9SOwogICAgICAgfQogICAgICAgLyogRW5hYmxlIHRoZSBUSU0gSW5wdXQgQ2FwdHVyZSAgRE1BIHJlcXVlc3QgKi8KQEAgLTMwNTIsNiArMzYwMSw3IEBACiAgICAgICAvKiBFbmFibGUgdGhlIERNQSBzdHJlYW0gKi8KICAgICAgIGlmIChIQUxfRE1BX1N0YXJ0X0lUKGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzFdLCAodWludDMyX3QpJmh0aW0tPkluc3RhbmNlLT5DQ1IxLCAodWludDMyX3QpcERhdGExLCBMZW5ndGgpICE9IEhBTF9PSykKICAgICAgIHsKKyAgICAgICAgLyogUmV0dXJuIGVycm9yIHN0YXR1cyAqLwogICAgICAgICByZXR1cm4gSEFMX0VSUk9SOwogICAgICAgfQogCkBAIC0zMDY1LDYgKzM2MTUsNyBAQAogICAgICAgLyogRW5hYmxlIHRoZSBETUEgc3RyZWFtICovCiAgICAgICBpZiAoSEFMX0RNQV9TdGFydF9JVChodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MyXSwgKHVpbnQzMl90KSZodGltLT5JbnN0YW5jZS0+Q0NSMiwgKHVpbnQzMl90KXBEYXRhMiwgTGVuZ3RoKSAhPSBIQUxfT0spCiAgICAgICB7CisgICAgICAgIC8qIFJldHVybiBlcnJvciBzdGF0dXMgKi8KICAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICAgIH0KICAgICAgIC8qIEVuYWJsZSB0aGUgUGVyaXBoZXJhbCAqLwpAQCAtMzA4NCw2ICszNjM1LDcgQEAKICAgICBkZWZhdWx0OgogICAgICAgYnJlYWs7CiAgIH0KKwogICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCiAgIHJldHVybiBIQUxfT0s7CiB9CkBAIC0zMTAxLDcgKzM2NTMsNyBAQAogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTV9FbmNvZGVyX1N0b3BfRE1BKFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCB1aW50MzJfdCBDaGFubmVsKQogewogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwotICBhc3NlcnRfcGFyYW0oSVNfVElNX0RNQV9DQ19JTlNUQU5DRShodGltLT5JbnN0YW5jZSkpOworICBhc3NlcnRfcGFyYW0oSVNfVElNX0VOQ09ERVJfSU5URVJGQUNFX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSk7CiAKICAgLyogRGlzYWJsZSB0aGUgSW5wdXQgQ2FwdHVyZSBjaGFubmVscyAxIGFuZCAyCiAgICAgKGluIHRoZSBFbmNvZGVySW50ZXJmYWNlIHRoZSB0d28gcG9zc2libGUgY2hhbm5lbHMgdGhhdCBjYW4gYmUgdXNlZCBhcmUgVElNX0NIQU5ORUxfMSBhbmQgVElNX0NIQU5ORUxfMikgKi8KQEAgLTMxMzYsOCArMzY4OCwxOSBAQAogICAvKiBEaXNhYmxlIHRoZSBQZXJpcGhlcmFsICovCiAgIF9fSEFMX1RJTV9ESVNBQkxFKGh0aW0pOwogCi0gIC8qIENoYW5nZSB0aGUgaHRpbSBzdGF0ZSAqLwotICBodGltLT5TdGF0ZSA9IEhBTF9USU1fU1RBVEVfUkVBRFk7CisgIC8qIFNldCB0aGUgVElNIGNoYW5uZWwocykgc3RhdGUgKi8KKyAgaWYgKChDaGFubmVsID09IFRJTV9DSEFOTkVMXzEpIHx8IChDaGFubmVsID09IFRJTV9DSEFOTkVMXzIpKQorICB7CisgICAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIENoYW5uZWwsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgICAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgQ2hhbm5lbCwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgfQorICBlbHNlCisgIHsKKyAgICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMiwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8xLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworICAgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzIsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgIH0KIAogICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCiAgIHJldHVybiBIQUxfT0s7CkBAIC0zMzkxLDggKzM5NTQsNiBAQAogICAvKiBQcm9jZXNzIExvY2tlZCAqLwogICBfX0hBTF9MT0NLKGh0aW0pOwogCi0gIGh0aW0tPlN0YXRlID0gSEFMX1RJTV9TVEFURV9CVVNZOwotCiAgIHN3aXRjaCAoQ2hhbm5lbCkKICAgewogICAgIGNhc2UgVElNX0NIQU5ORUxfMToKQEAgLTM0MzksOCArNDAwMCw2IEBACiAgICAgICBicmVhazsKICAgfQogCi0gIGh0aW0tPlN0YXRlID0gSEFMX1RJTV9TVEFURV9SRUFEWTsKLQogICBfX0hBTF9VTkxPQ0soaHRpbSk7CiAKICAgcmV0dXJuIEhBTF9PSzsKQEAgLTM0NzEsOCArNDAzMCw2IEBACiAgIC8qIFByb2Nlc3MgTG9ja2VkICovCiAgIF9fSEFMX0xPQ0soaHRpbSk7CiAKLSAgaHRpbS0+U3RhdGUgPSBIQUxfVElNX1NUQVRFX0JVU1k7Ci0KICAgaWYgKENoYW5uZWwgPT0gVElNX0NIQU5ORUxfMSkKICAgewogICAgIC8qIFRJMSBDb25maWd1cmF0aW9uICovCkBAIC0zNTM2LDggKzQwOTMsNiBAQAogICAgIGh0aW0tPkluc3RhbmNlLT5DQ01SMiB8PSAoc0NvbmZpZy0+SUNQcmVzY2FsZXIgPDwgOFUpOwogICB9CiAKLSAgaHRpbS0+U3RhdGUgPSBIQUxfVElNX1NUQVRFX1JFQURZOwotCiAgIF9fSEFMX1VOTE9DSyhodGltKTsKIAogICByZXR1cm4gSEFMX09LOwpAQCAtMzU2OSw4ICs0MTI0LDYgQEAKICAgLyogUHJvY2VzcyBMb2NrZWQgKi8KICAgX19IQUxfTE9DSyhodGltKTsKIAotICBodGltLT5TdGF0ZSA9IEhBTF9USU1fU1RBVEVfQlVTWTsKLQogICBzd2l0Y2ggKENoYW5uZWwpCiAgIHsKICAgICBjYXNlIFRJTV9DSEFOTkVMXzE6CkBAIC0zNjQ1LDggKzQxOTgsNiBAQAogICAgICAgYnJlYWs7CiAgIH0KIAotICBodGltLT5TdGF0ZSA9IEhBTF9USU1fU1RBVEVfUkVBRFk7Ci0KICAgX19IQUxfVU5MT0NLKGh0aW0pOwogCiAgIHJldHVybiBIQUxfT0s7CkBAIC0zODEwLDIwICs0MzYxLDY4IEBACiAgICogQG5vdGUgICBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSB1c2VkIG9ubHkgd2hlbiBCdXJzdExlbmd0aCBpcyBlcXVhbCB0byBETUEgZGF0YSB0cmFuc2ZlciBsZW5ndGguCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNX0RNQUJ1cnN0X1dyaXRlU3RhcnQoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sIHVpbnQzMl90IEJ1cnN0QmFzZUFkZHJlc3MsIHVpbnQzMl90IEJ1cnN0UmVxdWVzdFNyYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAqQnVyc3RCdWZmZXIsIHVpbnQzMl90ICBCdXJzdExlbmd0aCkKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1fRE1BQnVyc3RfV3JpdGVTdGFydChUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgdWludDMyX3QgQnVyc3RCYXNlQWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBCdXJzdFJlcXVlc3RTcmMsIHVpbnQzMl90ICpCdXJzdEJ1ZmZlciwgdWludDMyX3QgIEJ1cnN0TGVuZ3RoKQoreworICByZXR1cm4gSEFMX1RJTV9ETUFCdXJzdF9NdWx0aVdyaXRlU3RhcnQoaHRpbSwgQnVyc3RCYXNlQWRkcmVzcywgQnVyc3RSZXF1ZXN0U3JjLCBCdXJzdEJ1ZmZlciwgQnVyc3RMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEJ1cnN0TGVuZ3RoKSA+PiA4VSkgKyAxVSk7Cit9CisKKy8qKgorICAqIEBicmllZiAgQ29uZmlndXJlIHRoZSBETUEgQnVyc3QgdG8gdHJhbnNmZXIgbXVsdGlwbGUgRGF0YSBmcm9tIHRoZSBtZW1vcnkgdG8gdGhlIFRJTSBwZXJpcGhlcmFsCisgICogQHBhcmFtICBodGltIFRJTSBoYW5kbGUKKyAgKiBAcGFyYW0gIEJ1cnN0QmFzZUFkZHJlc3MgVElNIEJhc2UgYWRkcmVzcyBmcm9tIHdoZXJlIHRoZSBETUEgd2lsbCBzdGFydCB0aGUgRGF0YSB3cml0ZQorICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0RNQUJBU0VfQ1IxCisgICogICAgICAgICAgICBAYXJnIFRJTV9ETUFCQVNFX0NSMgorICAqICAgICAgICAgICAgQGFyZyBUSU1fRE1BQkFTRV9TTUNSCisgICogICAgICAgICAgICBAYXJnIFRJTV9ETUFCQVNFX0RJRVIKKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0RNQUJBU0VfU1IKKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0RNQUJBU0VfRUdSCisgICogICAgICAgICAgICBAYXJnIFRJTV9ETUFCQVNFX0NDTVIxCisgICogICAgICAgICAgICBAYXJnIFRJTV9ETUFCQVNFX0NDTVIyCisgICogICAgICAgICAgICBAYXJnIFRJTV9ETUFCQVNFX0NDRVIKKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0RNQUJBU0VfQ05UCisgICogICAgICAgICAgICBAYXJnIFRJTV9ETUFCQVNFX1BTQworICAqICAgICAgICAgICAgQGFyZyBUSU1fRE1BQkFTRV9BUlIKKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0RNQUJBU0VfUkNSCisgICogICAgICAgICAgICBAYXJnIFRJTV9ETUFCQVNFX0NDUjEKKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0RNQUJBU0VfQ0NSMgorICAqICAgICAgICAgICAgQGFyZyBUSU1fRE1BQkFTRV9DQ1IzCisgICogICAgICAgICAgICBAYXJnIFRJTV9ETUFCQVNFX0NDUjQKKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0RNQUJBU0VfQkRUUgorICAqIEBwYXJhbSAgQnVyc3RSZXF1ZXN0U3JjIFRJTSBETUEgUmVxdWVzdCBzb3VyY2VzCisgICogICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorICAqICAgICAgICAgICAgQGFyZyBUSU1fRE1BX1VQREFURTogVElNIHVwZGF0ZSBJbnRlcnJ1cHQgc291cmNlCisgICogICAgICAgICAgICBAYXJnIFRJTV9ETUFfQ0MxOiBUSU0gQ2FwdHVyZSBDb21wYXJlIDEgRE1BIHNvdXJjZQorICAqICAgICAgICAgICAgQGFyZyBUSU1fRE1BX0NDMjogVElNIENhcHR1cmUgQ29tcGFyZSAyIERNQSBzb3VyY2UKKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0RNQV9DQzM6IFRJTSBDYXB0dXJlIENvbXBhcmUgMyBETUEgc291cmNlCisgICogICAgICAgICAgICBAYXJnIFRJTV9ETUFfQ0M0OiBUSU0gQ2FwdHVyZSBDb21wYXJlIDQgRE1BIHNvdXJjZQorICAqICAgICAgICAgICAgQGFyZyBUSU1fRE1BX0NPTTogVElNIENvbW11dGF0aW9uIERNQSBzb3VyY2UKKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0RNQV9UUklHR0VSOiBUSU0gVHJpZ2dlciBETUEgc291cmNlCisgICogQHBhcmFtICBCdXJzdEJ1ZmZlciBUaGUgQnVmZmVyIGFkZHJlc3MuCisgICogQHBhcmFtICBCdXJzdExlbmd0aCBETUEgQnVyc3QgbGVuZ3RoLiBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIHZhbHVlCisgICogICAgICAgICBiZXR3ZWVuOiBUSU1fRE1BQlVSU1RMRU5HVEhfMVRSQU5TRkVSIGFuZCBUSU1fRE1BQlVSU1RMRU5HVEhfMThUUkFOU0ZFUlMuCisgICogQHBhcmFtICBEYXRhTGVuZ3RoIERhdGEgbGVuZ3RoLiBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIHZhbHVlCisgICogICAgICAgICBiZXR3ZWVuIDEgYW5kIDB4RkZGRi4KKyAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKKyAgKi8KK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1fRE1BQnVyc3RfTXVsdGlXcml0ZVN0YXJ0KFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCB1aW50MzJfdCBCdXJzdEJhc2VBZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgQnVyc3RSZXF1ZXN0U3JjLCB1aW50MzJfdCAqQnVyc3RCdWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAgQnVyc3RMZW5ndGgsICB1aW50MzJfdCAgRGF0YUxlbmd0aCkKIHsKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9ETUFCVVJTVF9JTlNUQU5DRShodGltLT5JbnN0YW5jZSkpOwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0RNQV9CQVNFKEJ1cnN0QmFzZUFkZHJlc3MpKTsKICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9ETUFfU09VUkNFKEJ1cnN0UmVxdWVzdFNyYykpOwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0RNQV9MRU5HVEgoQnVyc3RMZW5ndGgpKTsKKyAgYXNzZXJ0X3BhcmFtKElTX1RJTV9ETUFfREFUQV9MRU5HVEgoRGF0YUxlbmd0aCkpOwogCi0gIGlmIChodGltLT5TdGF0ZSA9PSBIQUxfVElNX1NUQVRFX0JVU1kpCisgIGlmIChodGltLT5ETUFCdXJzdFN0YXRlID09IEhBTF9ETUFfQlVSU1RfU1RBVEVfQlVTWSkKICAgewogICAgIHJldHVybiBIQUxfQlVTWTsKICAgfQotICBlbHNlIGlmIChodGltLT5TdGF0ZSA9PSBIQUxfVElNX1NUQVRFX1JFQURZKQorICBlbHNlIGlmIChodGltLT5ETUFCdXJzdFN0YXRlID09IEhBTF9ETUFfQlVSU1RfU1RBVEVfUkVBRFkpCiAgIHsKICAgICBpZiAoKEJ1cnN0QnVmZmVyID09IE5VTEwpICYmIChCdXJzdExlbmd0aCA+IDBVKSkKICAgICB7CkBAIC0zODMxLDcgKzQ0MzAsNyBAQAogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgaHRpbS0+U3RhdGUgPSBIQUxfVElNX1NUQVRFX0JVU1k7CisgICAgICBodGltLT5ETUFCdXJzdFN0YXRlID0gSEFMX0RNQV9CVVJTVF9TVEFURV9CVVNZOwogICAgIH0KICAgfQogICBlbHNlCkBAIC0zODUwLDggKzQ0NDksMTAgQEAKICAgICAgIGh0aW0tPmhkbWFbVElNX0RNQV9JRF9VUERBVEVdLT5YZmVyRXJyb3JDYWxsYmFjayA9IFRJTV9ETUFFcnJvciA7CiAKICAgICAgIC8qIEVuYWJsZSB0aGUgRE1BIHN0cmVhbSAqLwotICAgICAgaWYgKEhBTF9ETUFfU3RhcnRfSVQoaHRpbS0+aGRtYVtUSU1fRE1BX0lEX1VQREFURV0sICh1aW50MzJfdClCdXJzdEJ1ZmZlciwgKHVpbnQzMl90KSZodGltLT5JbnN0YW5jZS0+RE1BUiwgKChCdXJzdExlbmd0aCkgPj4gOFUpICsgMVUpICE9IEhBTF9PSykKKyAgICAgIGlmIChIQUxfRE1BX1N0YXJ0X0lUKGh0aW0tPmhkbWFbVElNX0RNQV9JRF9VUERBVEVdLCAodWludDMyX3QpQnVyc3RCdWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90KSZodGltLT5JbnN0YW5jZS0+RE1BUiwgRGF0YUxlbmd0aCkgIT0gSEFMX09LKQogICAgICAgeworICAgICAgICAvKiBSZXR1cm4gZXJyb3Igc3RhdHVzICovCiAgICAgICAgIHJldHVybiBIQUxfRVJST1I7CiAgICAgICB9CiAgICAgICBicmVhazsKQEAgLTM4NjcsOCArNDQ2OCw5IEBACiAKICAgICAgIC8qIEVuYWJsZSB0aGUgRE1BIHN0cmVhbSAqLwogICAgICAgaWYgKEhBTF9ETUFfU3RhcnRfSVQoaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDMV0sICh1aW50MzJfdClCdXJzdEJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50MzJfdCkmaHRpbS0+SW5zdGFuY2UtPkRNQVIsICgoQnVyc3RMZW5ndGgpID4+IDhVKSArIDFVKSAhPSBIQUxfT0spCisgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90KSZodGltLT5JbnN0YW5jZS0+RE1BUiwgRGF0YUxlbmd0aCkgIT0gSEFMX09LKQogICAgICAgeworICAgICAgICAvKiBSZXR1cm4gZXJyb3Igc3RhdHVzICovCiAgICAgICAgIHJldHVybiBIQUxfRVJST1I7CiAgICAgICB9CiAgICAgICBicmVhazsKQEAgLTM4ODQsOCArNDQ4Niw5IEBACiAKICAgICAgIC8qIEVuYWJsZSB0aGUgRE1BIHN0cmVhbSAqLwogICAgICAgaWYgKEhBTF9ETUFfU3RhcnRfSVQoaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDMl0sICh1aW50MzJfdClCdXJzdEJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50MzJfdCkmaHRpbS0+SW5zdGFuY2UtPkRNQVIsICgoQnVyc3RMZW5ndGgpID4+IDhVKSArIDFVKSAhPSBIQUxfT0spCisgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90KSZodGltLT5JbnN0YW5jZS0+RE1BUiwgRGF0YUxlbmd0aCkgIT0gSEFMX09LKQogICAgICAgeworICAgICAgICAvKiBSZXR1cm4gZXJyb3Igc3RhdHVzICovCiAgICAgICAgIHJldHVybiBIQUxfRVJST1I7CiAgICAgICB9CiAgICAgICBicmVhazsKQEAgLTM5MDEsOCArNDUwNCw5IEBACiAKICAgICAgIC8qIEVuYWJsZSB0aGUgRE1BIHN0cmVhbSAqLwogICAgICAgaWYgKEhBTF9ETUFfU3RhcnRfSVQoaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDM10sICh1aW50MzJfdClCdXJzdEJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50MzJfdCkmaHRpbS0+SW5zdGFuY2UtPkRNQVIsICgoQnVyc3RMZW5ndGgpID4+IDhVKSArIDFVKSAhPSBIQUxfT0spCisgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90KSZodGltLT5JbnN0YW5jZS0+RE1BUiwgRGF0YUxlbmd0aCkgIT0gSEFMX09LKQogICAgICAgeworICAgICAgICAvKiBSZXR1cm4gZXJyb3Igc3RhdHVzICovCiAgICAgICAgIHJldHVybiBIQUxfRVJST1I7CiAgICAgICB9CiAgICAgICBicmVhazsKQEAgLTM5MTgsOCArNDUyMiw5IEBACiAKICAgICAgIC8qIEVuYWJsZSB0aGUgRE1BIHN0cmVhbSAqLwogICAgICAgaWYgKEhBTF9ETUFfU3RhcnRfSVQoaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDNF0sICh1aW50MzJfdClCdXJzdEJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50MzJfdCkmaHRpbS0+SW5zdGFuY2UtPkRNQVIsICgoQnVyc3RMZW5ndGgpID4+IDhVKSArIDFVKSAhPSBIQUxfT0spCisgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90KSZodGltLT5JbnN0YW5jZS0+RE1BUiwgRGF0YUxlbmd0aCkgIT0gSEFMX09LKQogICAgICAgeworICAgICAgICAvKiBSZXR1cm4gZXJyb3Igc3RhdHVzICovCiAgICAgICAgIHJldHVybiBIQUxfRVJST1I7CiAgICAgICB9CiAgICAgICBicmVhazsKQEAgLTM5MzUsOCArNDU0MCw5IEBACiAKICAgICAgIC8qIEVuYWJsZSB0aGUgRE1BIHN0cmVhbSAqLwogICAgICAgaWYgKEhBTF9ETUFfU3RhcnRfSVQoaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NPTU1VVEFUSU9OXSwgKHVpbnQzMl90KUJ1cnN0QnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90KSZodGltLT5JbnN0YW5jZS0+RE1BUiwgKChCdXJzdExlbmd0aCkgPj4gOFUpICsgMVUpICE9IEhBTF9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgICAodWludDMyX3QpJmh0aW0tPkluc3RhbmNlLT5ETUFSLCBEYXRhTGVuZ3RoKSAhPSBIQUxfT0spCiAgICAgICB7CisgICAgICAgIC8qIFJldHVybiBlcnJvciBzdGF0dXMgKi8KICAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICAgIH0KICAgICAgIGJyZWFrOwpAQCAtMzk1Miw4ICs0NTU4LDkgQEAKIAogICAgICAgLyogRW5hYmxlIHRoZSBETUEgc3RyZWFtICovCiAgICAgICBpZiAoSEFMX0RNQV9TdGFydF9JVChodGltLT5oZG1hW1RJTV9ETUFfSURfVFJJR0dFUl0sICh1aW50MzJfdClCdXJzdEJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50MzJfdCkmaHRpbS0+SW5zdGFuY2UtPkRNQVIsICgoQnVyc3RMZW5ndGgpID4+IDhVKSArIDFVKSAhPSBIQUxfT0spCisgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90KSZodGltLT5JbnN0YW5jZS0+RE1BUiwgRGF0YUxlbmd0aCkgIT0gSEFMX09LKQogICAgICAgeworICAgICAgICAvKiBSZXR1cm4gZXJyb3Igc3RhdHVzICovCiAgICAgICAgIHJldHVybiBIQUxfRVJST1I7CiAgICAgICB9CiAgICAgICBicmVhazsKQEAgLTM5NjEsMTQgKzQ1NjgsMTIgQEAKICAgICBkZWZhdWx0OgogICAgICAgYnJlYWs7CiAgIH0KLSAgLyogY29uZmlndXJlIHRoZSBETUEgQnVyc3QgTW9kZSAqLwotICBodGltLT5JbnN0YW5jZS0+RENSID0gKEJ1cnN0QmFzZUFkZHJlc3MgfCBCdXJzdExlbmd0aCk7CiAKKyAgLyogQ29uZmlndXJlIHRoZSBETUEgQnVyc3QgTW9kZSAqLworICBodGltLT5JbnN0YW5jZS0+RENSID0gKEJ1cnN0QmFzZUFkZHJlc3MgfCBCdXJzdExlbmd0aCk7CiAgIC8qIEVuYWJsZSB0aGUgVElNIERNQSBSZXF1ZXN0ICovCiAgIF9fSEFMX1RJTV9FTkFCTEVfRE1BKGh0aW0sIEJ1cnN0UmVxdWVzdFNyYyk7CiAKLSAgaHRpbS0+U3RhdGUgPSBIQUxfVElNX1NUQVRFX1JFQURZOwotCiAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KICAgcmV0dXJuIEhBTF9PSzsKIH0KQEAgLTM5ODEsNyArNDU4Niw2IEBACiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNX0RNQUJ1cnN0X1dyaXRlU3RvcChUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgdWludDMyX3QgQnVyc3RSZXF1ZXN0U3JjKQogewotICBIQUxfU3RhdHVzVHlwZURlZiBzdGF0dXMgPSBIQUxfT0s7CiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19USU1fRE1BX1NPVVJDRShCdXJzdFJlcXVlc3RTcmMpKTsKIApAQCAtMzk5MCw1MSArNDU5NCw1MSBAQAogICB7CiAgICAgY2FzZSBUSU1fRE1BX1VQREFURToKICAgICB7Ci0gICAgICBzdGF0dXMgPSBIQUxfRE1BX0Fib3J0X0lUKGh0aW0tPmhkbWFbVElNX0RNQV9JRF9VUERBVEVdKTsKKyAgICAgICh2b2lkKUhBTF9ETUFfQWJvcnRfSVQoaHRpbS0+aGRtYVtUSU1fRE1BX0lEX1VQREFURV0pOwogICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgVElNX0RNQV9DQzE6CiAgICAgewotICAgICAgc3RhdHVzID0gSEFMX0RNQV9BYm9ydF9JVChodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MxXSk7CisgICAgICAodm9pZClIQUxfRE1BX0Fib3J0X0lUKGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzFdKTsKICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIFRJTV9ETUFfQ0MyOgogICAgIHsKLSAgICAgIHN0YXR1cyA9IEhBTF9ETUFfQWJvcnRfSVQoaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDMl0pOworICAgICAgKHZvaWQpSEFMX0RNQV9BYm9ydF9JVChodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MyXSk7CiAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBUSU1fRE1BX0NDMzoKICAgICB7Ci0gICAgICBzdGF0dXMgPSAgSEFMX0RNQV9BYm9ydF9JVChodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MzXSk7CisgICAgICAodm9pZClIQUxfRE1BX0Fib3J0X0lUKGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzNdKTsKICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIFRJTV9ETUFfQ0M0OgogICAgIHsKLSAgICAgIHN0YXR1cyA9IEhBTF9ETUFfQWJvcnRfSVQoaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDNF0pOworICAgICAgKHZvaWQpSEFMX0RNQV9BYm9ydF9JVChodGltLT5oZG1hW1RJTV9ETUFfSURfQ0M0XSk7CiAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBUSU1fRE1BX0NPTToKICAgICB7Ci0gICAgICBzdGF0dXMgPSBIQUxfRE1BX0Fib3J0X0lUKGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DT01NVVRBVElPTl0pOworICAgICAgKHZvaWQpSEFMX0RNQV9BYm9ydF9JVChodGltLT5oZG1hW1RJTV9ETUFfSURfQ09NTVVUQVRJT05dKTsKICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIFRJTV9ETUFfVFJJR0dFUjoKICAgICB7Ci0gICAgICBzdGF0dXMgPSBIQUxfRE1BX0Fib3J0X0lUKGh0aW0tPmhkbWFbVElNX0RNQV9JRF9UUklHR0VSXSk7CisgICAgICAodm9pZClIQUxfRE1BX0Fib3J0X0lUKGh0aW0tPmhkbWFbVElNX0RNQV9JRF9UUklHR0VSXSk7CiAgICAgICBicmVhazsKICAgICB9CiAgICAgZGVmYXVsdDoKICAgICAgIGJyZWFrOwogICB9CiAKLSAgaWYgKEhBTF9PSyA9PSBzdGF0dXMpCi0gIHsKLSAgICAvKiBEaXNhYmxlIHRoZSBUSU0gVXBkYXRlIERNQSByZXF1ZXN0ICovCi0gICAgX19IQUxfVElNX0RJU0FCTEVfRE1BKGh0aW0sIEJ1cnN0UmVxdWVzdFNyYyk7Ci0gIH0KKyAgLyogRGlzYWJsZSB0aGUgVElNIFVwZGF0ZSBETUEgcmVxdWVzdCAqLworICBfX0hBTF9USU1fRElTQUJMRV9ETUEoaHRpbSwgQnVyc3RSZXF1ZXN0U3JjKTsKKworICAvKiBDaGFuZ2UgdGhlIERNQSBidXJzdCBvcGVyYXRpb24gc3RhdGUgKi8KKyAgaHRpbS0+RE1BQnVyc3RTdGF0ZSA9IEhBTF9ETUFfQlVSU1RfU1RBVEVfUkVBRFk7CiAKICAgLyogUmV0dXJuIGZ1bmN0aW9uIHN0YXR1cyAqLwotICByZXR1cm4gc3RhdHVzOworICByZXR1cm4gSEFMX09LOwogfQogCiAvKioKQEAgLTQwNzgsMTcgKzQ2ODIsNjUgQEAKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1fRE1BQnVyc3RfUmVhZFN0YXJ0KFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCB1aW50MzJfdCBCdXJzdEJhc2VBZGRyZXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgQnVyc3RSZXF1ZXN0U3JjLCB1aW50MzJfdCAgKkJ1cnN0QnVmZmVyLCB1aW50MzJfdCAgQnVyc3RMZW5ndGgpCiB7CisgIHJldHVybiBIQUxfVElNX0RNQUJ1cnN0X011bHRpUmVhZFN0YXJ0KGh0aW0sIEJ1cnN0QmFzZUFkZHJlc3MsIEJ1cnN0UmVxdWVzdFNyYywgQnVyc3RCdWZmZXIsIEJ1cnN0TGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEJ1cnN0TGVuZ3RoKSA+PiA4VSkgKyAxVSk7Cit9CisKKy8qKgorICAqIEBicmllZiAgQ29uZmlndXJlIHRoZSBETUEgQnVyc3QgdG8gdHJhbnNmZXIgRGF0YSBmcm9tIHRoZSBUSU0gcGVyaXBoZXJhbCB0byB0aGUgbWVtb3J5CisgICogQHBhcmFtICBodGltIFRJTSBoYW5kbGUKKyAgKiBAcGFyYW0gIEJ1cnN0QmFzZUFkZHJlc3MgVElNIEJhc2UgYWRkcmVzcyBmcm9tIHdoZXJlIHRoZSBETUEgIHdpbGwgc3RhcnQgdGhlIERhdGEgcmVhZAorICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0RNQUJBU0VfQ1IxCisgICogICAgICAgICAgICBAYXJnIFRJTV9ETUFCQVNFX0NSMgorICAqICAgICAgICAgICAgQGFyZyBUSU1fRE1BQkFTRV9TTUNSCisgICogICAgICAgICAgICBAYXJnIFRJTV9ETUFCQVNFX0RJRVIKKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0RNQUJBU0VfU1IKKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0RNQUJBU0VfRUdSCisgICogICAgICAgICAgICBAYXJnIFRJTV9ETUFCQVNFX0NDTVIxCisgICogICAgICAgICAgICBAYXJnIFRJTV9ETUFCQVNFX0NDTVIyCisgICogICAgICAgICAgICBAYXJnIFRJTV9ETUFCQVNFX0NDRVIKKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0RNQUJBU0VfQ05UCisgICogICAgICAgICAgICBAYXJnIFRJTV9ETUFCQVNFX1BTQworICAqICAgICAgICAgICAgQGFyZyBUSU1fRE1BQkFTRV9BUlIKKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0RNQUJBU0VfUkNSCisgICogICAgICAgICAgICBAYXJnIFRJTV9ETUFCQVNFX0NDUjEKKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0RNQUJBU0VfQ0NSMgorICAqICAgICAgICAgICAgQGFyZyBUSU1fRE1BQkFTRV9DQ1IzCisgICogICAgICAgICAgICBAYXJnIFRJTV9ETUFCQVNFX0NDUjQKKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0RNQUJBU0VfQkRUUgorICAqIEBwYXJhbSAgQnVyc3RSZXF1ZXN0U3JjIFRJTSBETUEgUmVxdWVzdCBzb3VyY2VzCisgICogICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorICAqICAgICAgICAgICAgQGFyZyBUSU1fRE1BX1VQREFURTogVElNIHVwZGF0ZSBJbnRlcnJ1cHQgc291cmNlCisgICogICAgICAgICAgICBAYXJnIFRJTV9ETUFfQ0MxOiBUSU0gQ2FwdHVyZSBDb21wYXJlIDEgRE1BIHNvdXJjZQorICAqICAgICAgICAgICAgQGFyZyBUSU1fRE1BX0NDMjogVElNIENhcHR1cmUgQ29tcGFyZSAyIERNQSBzb3VyY2UKKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0RNQV9DQzM6IFRJTSBDYXB0dXJlIENvbXBhcmUgMyBETUEgc291cmNlCisgICogICAgICAgICAgICBAYXJnIFRJTV9ETUFfQ0M0OiBUSU0gQ2FwdHVyZSBDb21wYXJlIDQgRE1BIHNvdXJjZQorICAqICAgICAgICAgICAgQGFyZyBUSU1fRE1BX0NPTTogVElNIENvbW11dGF0aW9uIERNQSBzb3VyY2UKKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0RNQV9UUklHR0VSOiBUSU0gVHJpZ2dlciBETUEgc291cmNlCisgICogQHBhcmFtICBCdXJzdEJ1ZmZlciBUaGUgQnVmZmVyIGFkZHJlc3MuCisgICogQHBhcmFtICBCdXJzdExlbmd0aCBETUEgQnVyc3QgbGVuZ3RoLiBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIHZhbHVlCisgICogICAgICAgICBiZXR3ZWVuOiBUSU1fRE1BQlVSU1RMRU5HVEhfMVRSQU5TRkVSIGFuZCBUSU1fRE1BQlVSU1RMRU5HVEhfMThUUkFOU0ZFUlMuCisgICogQHBhcmFtICBEYXRhTGVuZ3RoIERhdGEgbGVuZ3RoLiBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIHZhbHVlCisgICogICAgICAgICBiZXR3ZWVuIDEgYW5kIDB4RkZGRi4KKyAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKKyAgKi8KK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1fRE1BQnVyc3RfTXVsdGlSZWFkU3RhcnQoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sIHVpbnQzMl90IEJ1cnN0QmFzZUFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IEJ1cnN0UmVxdWVzdFNyYywgdWludDMyX3QgICpCdXJzdEJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgIEJ1cnN0TGVuZ3RoLCB1aW50MzJfdCAgRGF0YUxlbmd0aCkKK3sKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9ETUFCVVJTVF9JTlNUQU5DRShodGltLT5JbnN0YW5jZSkpOwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0RNQV9CQVNFKEJ1cnN0QmFzZUFkZHJlc3MpKTsKICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9ETUFfU09VUkNFKEJ1cnN0UmVxdWVzdFNyYykpOwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0RNQV9MRU5HVEgoQnVyc3RMZW5ndGgpKTsKKyAgYXNzZXJ0X3BhcmFtKElTX1RJTV9ETUFfREFUQV9MRU5HVEgoRGF0YUxlbmd0aCkpOwogCi0gIGlmIChodGltLT5TdGF0ZSA9PSBIQUxfVElNX1NUQVRFX0JVU1kpCisgIGlmIChodGltLT5ETUFCdXJzdFN0YXRlID09IEhBTF9ETUFfQlVSU1RfU1RBVEVfQlVTWSkKICAgewogICAgIHJldHVybiBIQUxfQlVTWTsKICAgfQotICBlbHNlIGlmIChodGltLT5TdGF0ZSA9PSBIQUxfVElNX1NUQVRFX1JFQURZKQorICBlbHNlIGlmIChodGltLT5ETUFCdXJzdFN0YXRlID09IEhBTF9ETUFfQlVSU1RfU1RBVEVfUkVBRFkpCiAgIHsKICAgICBpZiAoKEJ1cnN0QnVmZmVyID09IE5VTEwpICYmIChCdXJzdExlbmd0aCA+IDBVKSkKICAgICB7CkBAIC00MDk2LDcgKzQ3NDgsNyBAQAogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgaHRpbS0+U3RhdGUgPSBIQUxfVElNX1NUQVRFX0JVU1k7CisgICAgICBodGltLT5ETUFCdXJzdFN0YXRlID0gSEFMX0RNQV9CVVJTVF9TVEFURV9CVVNZOwogICAgIH0KICAgfQogICBlbHNlCkBAIC00MTE1LDggKzQ3NjcsMTAgQEAKICAgICAgIGh0aW0tPmhkbWFbVElNX0RNQV9JRF9VUERBVEVdLT5YZmVyRXJyb3JDYWxsYmFjayA9IFRJTV9ETUFFcnJvciA7CiAKICAgICAgIC8qIEVuYWJsZSB0aGUgRE1BIHN0cmVhbSAqLwotICAgICAgaWYgKEhBTF9ETUFfU3RhcnRfSVQoaHRpbS0+aGRtYVtUSU1fRE1BX0lEX1VQREFURV0sICh1aW50MzJfdCkmaHRpbS0+SW5zdGFuY2UtPkRNQVIsICh1aW50MzJfdClCdXJzdEJ1ZmZlciwgKChCdXJzdExlbmd0aCkgPj4gOFUpICsgMVUpICE9IEhBTF9PSykKKyAgICAgIGlmIChIQUxfRE1BX1N0YXJ0X0lUKGh0aW0tPmhkbWFbVElNX0RNQV9JRF9VUERBVEVdLCAodWludDMyX3QpJmh0aW0tPkluc3RhbmNlLT5ETUFSLCAodWludDMyX3QpQnVyc3RCdWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YUxlbmd0aCkgIT0gSEFMX09LKQogICAgICAgeworICAgICAgICAvKiBSZXR1cm4gZXJyb3Igc3RhdHVzICovCiAgICAgICAgIHJldHVybiBIQUxfRVJST1I7CiAgICAgICB9CiAgICAgICBicmVhazsKQEAgLTQxMzEsMTUgKzQ3ODUsMTcgQEAKICAgICAgIGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzFdLT5YZmVyRXJyb3JDYWxsYmFjayA9IFRJTV9ETUFFcnJvciA7CiAKICAgICAgIC8qIEVuYWJsZSB0aGUgRE1BIHN0cmVhbSAqLwotICAgICAgaWYgKEhBTF9ETUFfU3RhcnRfSVQoaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDMV0sICh1aW50MzJfdCkmaHRpbS0+SW5zdGFuY2UtPkRNQVIsICh1aW50MzJfdClCdXJzdEJ1ZmZlciwgKChCdXJzdExlbmd0aCkgPj4gOFUpICsgMVUpICE9IEhBTF9PSykKKyAgICAgIGlmIChIQUxfRE1BX1N0YXJ0X0lUKGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzFdLCAodWludDMyX3QpJmh0aW0tPkluc3RhbmNlLT5ETUFSLCAodWludDMyX3QpQnVyc3RCdWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YUxlbmd0aCkgIT0gSEFMX09LKQogICAgICAgeworICAgICAgICAvKiBSZXR1cm4gZXJyb3Igc3RhdHVzICovCiAgICAgICAgIHJldHVybiBIQUxfRVJST1I7CiAgICAgICB9CiAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBUSU1fRE1BX0NDMjoKICAgICB7Ci0gICAgICAvKiBTZXQgdGhlIERNQSBjYXB0dXJlL2NvbXBhcmUgY2FsbGJhY2tzICovCisgICAgICAvKiBTZXQgdGhlIERNQSBjYXB0dXJlIGNhbGxiYWNrcyAqLwogICAgICAgaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDMl0tPlhmZXJDcGx0Q2FsbGJhY2sgPSBUSU1fRE1BQ2FwdHVyZUNwbHQ7CiAgICAgICBodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MyXS0+WGZlckhhbGZDcGx0Q2FsbGJhY2sgPSBUSU1fRE1BQ2FwdHVyZUhhbGZDcGx0OwogCkBAIC00MTQ3LDggKzQ4MDMsMTAgQEAKICAgICAgIGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzJdLT5YZmVyRXJyb3JDYWxsYmFjayA9IFRJTV9ETUFFcnJvciA7CiAKICAgICAgIC8qIEVuYWJsZSB0aGUgRE1BIHN0cmVhbSAqLwotICAgICAgaWYgKEhBTF9ETUFfU3RhcnRfSVQoaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDMl0sICh1aW50MzJfdCkmaHRpbS0+SW5zdGFuY2UtPkRNQVIsICh1aW50MzJfdClCdXJzdEJ1ZmZlciwgKChCdXJzdExlbmd0aCkgPj4gOFUpICsgMVUpICE9IEhBTF9PSykKKyAgICAgIGlmIChIQUxfRE1BX1N0YXJ0X0lUKGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzJdLCAodWludDMyX3QpJmh0aW0tPkluc3RhbmNlLT5ETUFSLCAodWludDMyX3QpQnVyc3RCdWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YUxlbmd0aCkgIT0gSEFMX09LKQogICAgICAgeworICAgICAgICAvKiBSZXR1cm4gZXJyb3Igc3RhdHVzICovCiAgICAgICAgIHJldHVybiBIQUxfRVJST1I7CiAgICAgICB9CiAgICAgICBicmVhazsKQEAgLTQxNjMsOCArNDgyMSwxMCBAQAogICAgICAgaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDM10tPlhmZXJFcnJvckNhbGxiYWNrID0gVElNX0RNQUVycm9yIDsKIAogICAgICAgLyogRW5hYmxlIHRoZSBETUEgc3RyZWFtICovCi0gICAgICBpZiAoSEFMX0RNQV9TdGFydF9JVChodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MzXSwgKHVpbnQzMl90KSZodGltLT5JbnN0YW5jZS0+RE1BUiwgKHVpbnQzMl90KUJ1cnN0QnVmZmVyLCAoKEJ1cnN0TGVuZ3RoKSA+PiA4VSkgKyAxVSkgIT0gSEFMX09LKQorICAgICAgaWYgKEhBTF9ETUFfU3RhcnRfSVQoaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDM10sICh1aW50MzJfdCkmaHRpbS0+SW5zdGFuY2UtPkRNQVIsICh1aW50MzJfdClCdXJzdEJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhTGVuZ3RoKSAhPSBIQUxfT0spCiAgICAgICB7CisgICAgICAgIC8qIFJldHVybiBlcnJvciBzdGF0dXMgKi8KICAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICAgIH0KICAgICAgIGJyZWFrOwpAQCAtNDE3OSw4ICs0ODM5LDEwIEBACiAgICAgICBodGltLT5oZG1hW1RJTV9ETUFfSURfQ0M0XS0+WGZlckVycm9yQ2FsbGJhY2sgPSBUSU1fRE1BRXJyb3IgOwogCiAgICAgICAvKiBFbmFibGUgdGhlIERNQSBzdHJlYW0gKi8KLSAgICAgIGlmIChIQUxfRE1BX1N0YXJ0X0lUKGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzRdLCAodWludDMyX3QpJmh0aW0tPkluc3RhbmNlLT5ETUFSLCAodWludDMyX3QpQnVyc3RCdWZmZXIsICgoQnVyc3RMZW5ndGgpID4+IDhVKSArIDFVKSAhPSBIQUxfT0spCisgICAgICBpZiAoSEFMX0RNQV9TdGFydF9JVChodGltLT5oZG1hW1RJTV9ETUFfSURfQ0M0XSwgKHVpbnQzMl90KSZodGltLT5JbnN0YW5jZS0+RE1BUiwgKHVpbnQzMl90KUJ1cnN0QnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgIERhdGFMZW5ndGgpICE9IEhBTF9PSykKICAgICAgIHsKKyAgICAgICAgLyogUmV0dXJuIGVycm9yIHN0YXR1cyAqLwogICAgICAgICByZXR1cm4gSEFMX0VSUk9SOwogICAgICAgfQogICAgICAgYnJlYWs7CkBAIC00MTk1LDggKzQ4NTcsMTAgQEAKICAgICAgIGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DT01NVVRBVElPTl0tPlhmZXJFcnJvckNhbGxiYWNrID0gVElNX0RNQUVycm9yIDsKIAogICAgICAgLyogRW5hYmxlIHRoZSBETUEgc3RyZWFtICovCi0gICAgICBpZiAoSEFMX0RNQV9TdGFydF9JVChodGltLT5oZG1hW1RJTV9ETUFfSURfQ09NTVVUQVRJT05dLCAodWludDMyX3QpJmh0aW0tPkluc3RhbmNlLT5ETUFSLCAodWludDMyX3QpQnVyc3RCdWZmZXIsICgoQnVyc3RMZW5ndGgpID4+IDhVKSArIDFVKSAhPSBIQUxfT0spCisgICAgICBpZiAoSEFMX0RNQV9TdGFydF9JVChodGltLT5oZG1hW1RJTV9ETUFfSURfQ09NTVVUQVRJT05dLCAodWludDMyX3QpJmh0aW0tPkluc3RhbmNlLT5ETUFSLCAodWludDMyX3QpQnVyc3RCdWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YUxlbmd0aCkgIT0gSEFMX09LKQogICAgICAgeworICAgICAgICAvKiBSZXR1cm4gZXJyb3Igc3RhdHVzICovCiAgICAgICAgIHJldHVybiBIQUxfRVJST1I7CiAgICAgICB9CiAgICAgICBicmVhazsKQEAgLTQyMTEsOCArNDg3NSwxMCBAQAogICAgICAgaHRpbS0+aGRtYVtUSU1fRE1BX0lEX1RSSUdHRVJdLT5YZmVyRXJyb3JDYWxsYmFjayA9IFRJTV9ETUFFcnJvciA7CiAKICAgICAgIC8qIEVuYWJsZSB0aGUgRE1BIHN0cmVhbSAqLwotICAgICAgaWYgKEhBTF9ETUFfU3RhcnRfSVQoaHRpbS0+aGRtYVtUSU1fRE1BX0lEX1RSSUdHRVJdLCAodWludDMyX3QpJmh0aW0tPkluc3RhbmNlLT5ETUFSLCAodWludDMyX3QpQnVyc3RCdWZmZXIsICgoQnVyc3RMZW5ndGgpID4+IDhVKSArIDFVKSAhPSBIQUxfT0spCisgICAgICBpZiAoSEFMX0RNQV9TdGFydF9JVChodGltLT5oZG1hW1RJTV9ETUFfSURfVFJJR0dFUl0sICh1aW50MzJfdCkmaHRpbS0+SW5zdGFuY2UtPkRNQVIsICh1aW50MzJfdClCdXJzdEJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhTGVuZ3RoKSAhPSBIQUxfT0spCiAgICAgICB7CisgICAgICAgIC8qIFJldHVybiBlcnJvciBzdGF0dXMgKi8KICAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICAgIH0KICAgICAgIGJyZWFrOwpAQCAtNDIyMSwxNCArNDg4NywxMiBAQAogICAgICAgYnJlYWs7CiAgIH0KIAotICAvKiBjb25maWd1cmUgdGhlIERNQSBCdXJzdCBNb2RlICovCisgIC8qIENvbmZpZ3VyZSB0aGUgRE1BIEJ1cnN0IE1vZGUgKi8KICAgaHRpbS0+SW5zdGFuY2UtPkRDUiA9IChCdXJzdEJhc2VBZGRyZXNzIHwgQnVyc3RMZW5ndGgpOwogCiAgIC8qIEVuYWJsZSB0aGUgVElNIERNQSBSZXF1ZXN0ICovCiAgIF9fSEFMX1RJTV9FTkFCTEVfRE1BKGh0aW0sIEJ1cnN0UmVxdWVzdFNyYyk7CiAKLSAgaHRpbS0+U3RhdGUgPSBIQUxfVElNX1NUQVRFX1JFQURZOwotCiAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KICAgcmV0dXJuIEhBTF9PSzsKIH0KQEAgLTQyNDEsNyArNDkwNSw2IEBACiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNX0RNQUJ1cnN0X1JlYWRTdG9wKFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCB1aW50MzJfdCBCdXJzdFJlcXVlc3RTcmMpCiB7Ci0gIEhBTF9TdGF0dXNUeXBlRGVmIHN0YXR1cyA9IEhBTF9PSzsKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9ETUFfU09VUkNFKEJ1cnN0UmVxdWVzdFNyYykpOwogCkBAIC00MjUwLDUxICs0OTEzLDUxIEBACiAgIHsKICAgICBjYXNlIFRJTV9ETUFfVVBEQVRFOgogICAgIHsKLSAgICAgIHN0YXR1cyA9IEhBTF9ETUFfQWJvcnRfSVQoaHRpbS0+aGRtYVtUSU1fRE1BX0lEX1VQREFURV0pOworICAgICAgKHZvaWQpSEFMX0RNQV9BYm9ydF9JVChodGltLT5oZG1hW1RJTV9ETUFfSURfVVBEQVRFXSk7CiAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBUSU1fRE1BX0NDMToKICAgICB7Ci0gICAgICBzdGF0dXMgPSBIQUxfRE1BX0Fib3J0X0lUKGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzFdKTsKKyAgICAgICh2b2lkKUhBTF9ETUFfQWJvcnRfSVQoaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDMV0pOwogICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgVElNX0RNQV9DQzI6CiAgICAgewotICAgICAgc3RhdHVzID0gSEFMX0RNQV9BYm9ydF9JVChodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MyXSk7CisgICAgICAodm9pZClIQUxfRE1BX0Fib3J0X0lUKGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzJdKTsKICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIFRJTV9ETUFfQ0MzOgogICAgIHsKLSAgICAgIHN0YXR1cyA9IEhBTF9ETUFfQWJvcnRfSVQoaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDM10pOworICAgICAgKHZvaWQpSEFMX0RNQV9BYm9ydF9JVChodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MzXSk7CiAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBUSU1fRE1BX0NDNDoKICAgICB7Ci0gICAgICBzdGF0dXMgPSBIQUxfRE1BX0Fib3J0X0lUKGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzRdKTsKKyAgICAgICh2b2lkKUhBTF9ETUFfQWJvcnRfSVQoaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDNF0pOwogICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgVElNX0RNQV9DT006CiAgICAgewotICAgICAgc3RhdHVzID0gSEFMX0RNQV9BYm9ydF9JVChodGltLT5oZG1hW1RJTV9ETUFfSURfQ09NTVVUQVRJT05dKTsKKyAgICAgICh2b2lkKUhBTF9ETUFfQWJvcnRfSVQoaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NPTU1VVEFUSU9OXSk7CiAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBUSU1fRE1BX1RSSUdHRVI6CiAgICAgewotICAgICAgc3RhdHVzID0gSEFMX0RNQV9BYm9ydF9JVChodGltLT5oZG1hW1RJTV9ETUFfSURfVFJJR0dFUl0pOworICAgICAgKHZvaWQpSEFMX0RNQV9BYm9ydF9JVChodGltLT5oZG1hW1RJTV9ETUFfSURfVFJJR0dFUl0pOwogICAgICAgYnJlYWs7CiAgICAgfQogICAgIGRlZmF1bHQ6CiAgICAgICBicmVhazsKICAgfQogCi0gIGlmIChIQUxfT0sgPT0gc3RhdHVzKQotICB7Ci0gICAgLyogRGlzYWJsZSB0aGUgVElNIFVwZGF0ZSBETUEgcmVxdWVzdCAqLwotICAgIF9fSEFMX1RJTV9ESVNBQkxFX0RNQShodGltLCBCdXJzdFJlcXVlc3RTcmMpOwotICB9CisgIC8qIERpc2FibGUgdGhlIFRJTSBVcGRhdGUgRE1BIHJlcXVlc3QgKi8KKyAgX19IQUxfVElNX0RJU0FCTEVfRE1BKGh0aW0sIEJ1cnN0UmVxdWVzdFNyYyk7CisKKyAgLyogQ2hhbmdlIHRoZSBETUEgYnVyc3Qgb3BlcmF0aW9uIHN0YXRlICovCisgIGh0aW0tPkRNQUJ1cnN0U3RhdGUgPSBIQUxfRE1BX0JVUlNUX1NUQVRFX1JFQURZOwogCiAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KLSAgcmV0dXJuIHN0YXR1czsKKyAgcmV0dXJuIEhBTF9PSzsKIH0KIAogLyoqCkBAIC00NjAwLDEzICs1MjYzLDEzIEBACiAgICAgY2FzZSBUSU1fQ0xPQ0tTT1VSQ0VfSVRSMToKICAgICBjYXNlIFRJTV9DTE9DS1NPVVJDRV9JVFIyOgogICAgIGNhc2UgVElNX0NMT0NLU09VUkNFX0lUUjM6Ci0gICAgewotICAgICAgLyogQ2hlY2sgd2hldGhlciBvciBub3QgdGhlIHRpbWVyIGluc3RhbmNlIHN1cHBvcnRzIGludGVybmFsIHRyaWdnZXIgaW5wdXQgKi8KLSAgICAgIGFzc2VydF9wYXJhbShJU19USU1fQ0xPQ0tTT1VSQ0VfSVRSWF9JTlNUQU5DRShodGltLT5JbnN0YW5jZSkpOworICAgICAgeworICAgICAgICAvKiBDaGVjayB3aGV0aGVyIG9yIG5vdCB0aGUgdGltZXIgaW5zdGFuY2Ugc3VwcG9ydHMgaW50ZXJuYWwgdHJpZ2dlciBpbnB1dCAqLworICAgICAgICBhc3NlcnRfcGFyYW0oSVNfVElNX0NMT0NLU09VUkNFX0lUUlhfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKTsKIAotICAgICAgVElNX0lUUnhfU2V0Q29uZmlnKGh0aW0tPkluc3RhbmNlLCBzQ2xvY2tTb3VyY2VDb25maWctPkNsb2NrU291cmNlKTsKLSAgICAgIGJyZWFrOwotICAgIH0KKyAgICAgICAgVElNX0lUUnhfU2V0Q29uZmlnKGh0aW0tPkluc3RhbmNlLCBzQ2xvY2tTb3VyY2VDb25maWctPkNsb2NrU291cmNlKTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CiAKICAgICBkZWZhdWx0OgogICAgICAgYnJlYWs7CkBAIC01NTM3LDYgKzYyMDAsNTQgQEAKIH0KIAogLyoqCisgICogQGJyaWVmICBSZXR1cm4gdGhlIFRJTSBFbmNvZGVyIE1vZGUgaGFuZGxlIHN0YXRlLgorICAqIEBwYXJhbSAgaHRpbSBUSU0gaGFuZGxlCisgICogQHJldHZhbCBBY3RpdmUgY2hhbm5lbAorICAqLworSEFMX1RJTV9BY3RpdmVDaGFubmVsIEhBTF9USU1fR2V0QWN0aXZlQ2hhbm5lbChUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSkKK3sKKyAgcmV0dXJuIGh0aW0tPkNoYW5uZWw7Cit9CisKKy8qKgorICAqIEBicmllZiAgUmV0dXJuIGFjdHVhbCBzdGF0ZSBvZiB0aGUgVElNIGNoYW5uZWwuCisgICogQHBhcmFtICBodGltIFRJTSBoYW5kbGUKKyAgKiBAcGFyYW0gIENoYW5uZWwgVElNIENoYW5uZWwKKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorICAqICAgICAgICAgICAgQGFyZyBUSU1fQ0hBTk5FTF8xOiBUSU0gQ2hhbm5lbCAxCisgICogICAgICAgICAgICBAYXJnIFRJTV9DSEFOTkVMXzI6IFRJTSBDaGFubmVsIDIKKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0NIQU5ORUxfMzogVElNIENoYW5uZWwgMworICAqICAgICAgICAgICAgQGFyZyBUSU1fQ0hBTk5FTF80OiBUSU0gQ2hhbm5lbCA0CisgICogICAgICAgICAgICBAYXJnIFRJTV9DSEFOTkVMXzU6IFRJTSBDaGFubmVsIDUKKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0NIQU5ORUxfNjogVElNIENoYW5uZWwgNgorICAqIEByZXR2YWwgVElNIENoYW5uZWwgc3RhdGUKKyAgKi8KK0hBTF9USU1fQ2hhbm5lbFN0YXRlVHlwZURlZiBIQUxfVElNX0dldENoYW5uZWxTdGF0ZShUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgIHVpbnQzMl90IENoYW5uZWwpCit7CisgIEhBTF9USU1fQ2hhbm5lbFN0YXRlVHlwZURlZiBjaGFubmVsX3N0YXRlOworCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCisgIGFzc2VydF9wYXJhbShJU19USU1fQ0NYX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlLCBDaGFubmVsKSk7CisKKyAgY2hhbm5lbF9zdGF0ZSA9IFRJTV9DSEFOTkVMX1NUQVRFX0dFVChodGltLCBDaGFubmVsKTsKKworICByZXR1cm4gY2hhbm5lbF9zdGF0ZTsKK30KKworLyoqCisgICogQGJyaWVmICBSZXR1cm4gYWN0dWFsIHN0YXRlIG9mIGEgRE1BIGJ1cnN0IG9wZXJhdGlvbi4KKyAgKiBAcGFyYW0gIGh0aW0gVElNIGhhbmRsZQorICAqIEByZXR2YWwgRE1BIGJ1cnN0IHN0YXRlCisgICovCitIQUxfVElNX0RNQUJ1cnN0U3RhdGVUeXBlRGVmIEhBTF9USU1fRE1BQnVyc3RTdGF0ZShUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSkKK3sKKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KKyAgYXNzZXJ0X3BhcmFtKElTX1RJTV9ETUFCVVJTVF9JTlNUQU5DRShodGltLT5JbnN0YW5jZSkpOworCisgIHJldHVybiBodGltLT5ETUFCdXJzdFN0YXRlOworfQorCisvKioKICAgKiBAfQogICAqLwogCkBAIC01NTU3LDEzICs2MjY4LDM4IEBACiB7CiAgIFRJTV9IYW5kbGVUeXBlRGVmICpodGltID0gKFRJTV9IYW5kbGVUeXBlRGVmICopKChETUFfSGFuZGxlVHlwZURlZiAqKWhkbWEpLT5QYXJlbnQ7CiAKLSAgaHRpbS0+U3RhdGUgPSBIQUxfVElNX1NUQVRFX1JFQURZOworICBpZiAoaGRtYSA9PSBodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MxXSkKKyAgeworICAgIGh0aW0tPkNoYW5uZWwgPSBIQUxfVElNX0FDVElWRV9DSEFOTkVMXzE7CisgICAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgIH0KKyAgZWxzZSBpZiAoaGRtYSA9PSBodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MyXSkKKyAgeworICAgIGh0aW0tPkNoYW5uZWwgPSBIQUxfVElNX0FDVElWRV9DSEFOTkVMXzI7CisgICAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzIsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgIH0KKyAgZWxzZSBpZiAoaGRtYSA9PSBodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MzXSkKKyAgeworICAgIGh0aW0tPkNoYW5uZWwgPSBIQUxfVElNX0FDVElWRV9DSEFOTkVMXzM7CisgICAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzMsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgIH0KKyAgZWxzZSBpZiAoaGRtYSA9PSBodGltLT5oZG1hW1RJTV9ETUFfSURfQ0M0XSkKKyAgeworICAgIGh0aW0tPkNoYW5uZWwgPSBIQUxfVElNX0FDVElWRV9DSEFOTkVMXzQ7CisgICAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzQsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgIH0KKyAgZWxzZQorICB7CisgICAgaHRpbS0+U3RhdGUgPSBIQUxfVElNX1NUQVRFX1JFQURZOworICB9CiAKICNpZiAoVVNFX0hBTF9USU1fUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCiAgIGh0aW0tPkVycm9yQ2FsbGJhY2soaHRpbSk7CiAjZWxzZQogICBIQUxfVElNX0Vycm9yQ2FsbGJhY2soaHRpbSk7CiAjZW5kaWYgLyogVVNFX0hBTF9USU1fUkVHSVNURVJfQ0FMTEJBQ0tTICovCisKKyAgaHRpbS0+Q2hhbm5lbCA9IEhBTF9USU1fQUNUSVZFX0NIQU5ORUxfQ0xFQVJFRDsKIH0KIAogLyoqCkBAIC01NTcxLDI3ICs2MzA3LDQ1IEBACiAgICogQHBhcmFtICBoZG1hIHBvaW50ZXIgdG8gRE1BIGhhbmRsZS4KICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KLXZvaWQgVElNX0RNQURlbGF5UHVsc2VDcGx0KERNQV9IYW5kbGVUeXBlRGVmICpoZG1hKQorc3RhdGljIHZvaWQgVElNX0RNQURlbGF5UHVsc2VDcGx0KERNQV9IYW5kbGVUeXBlRGVmICpoZG1hKQogewogICBUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSA9IChUSU1fSGFuZGxlVHlwZURlZiAqKSgoRE1BX0hhbmRsZVR5cGVEZWYgKiloZG1hKS0+UGFyZW50OwogCi0gIGh0aW0tPlN0YXRlID0gSEFMX1RJTV9TVEFURV9SRUFEWTsKLQogICBpZiAoaGRtYSA9PSBodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MxXSkKICAgewogICAgIGh0aW0tPkNoYW5uZWwgPSBIQUxfVElNX0FDVElWRV9DSEFOTkVMXzE7CisKKyAgICBpZiAoaGRtYS0+SW5pdC5Nb2RlID09IERNQV9OT1JNQUwpCisgICAgeworICAgICAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgICAgfQogICB9CiAgIGVsc2UgaWYgKGhkbWEgPT0gaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDMl0pCiAgIHsKICAgICBodGltLT5DaGFubmVsID0gSEFMX1RJTV9BQ1RJVkVfQ0hBTk5FTF8yOworCisgICAgaWYgKGhkbWEtPkluaXQuTW9kZSA9PSBETUFfTk9STUFMKQorICAgIHsKKyAgICAgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8yLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworICAgIH0KICAgfQogICBlbHNlIGlmIChoZG1hID09IGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzNdKQogICB7CiAgICAgaHRpbS0+Q2hhbm5lbCA9IEhBTF9USU1fQUNUSVZFX0NIQU5ORUxfMzsKKworICAgIGlmIChoZG1hLT5Jbml0Lk1vZGUgPT0gRE1BX05PUk1BTCkKKyAgICB7CisgICAgICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMywgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgICB9CiAgIH0KICAgZWxzZSBpZiAoaGRtYSA9PSBodGltLT5oZG1hW1RJTV9ETUFfSURfQ0M0XSkKICAgewogICAgIGh0aW0tPkNoYW5uZWwgPSBIQUxfVElNX0FDVElWRV9DSEFOTkVMXzQ7CisKKyAgICBpZiAoaGRtYS0+SW5pdC5Nb2RlID09IERNQV9OT1JNQUwpCisgICAgeworICAgICAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzQsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgICAgfQogICB9CiAgIGVsc2UKICAgewpAQCAtNTYxNiw4ICs2MzcwLDYgQEAKIHsKICAgVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0gPSAoVElNX0hhbmRsZVR5cGVEZWYgKikoKERNQV9IYW5kbGVUeXBlRGVmICopaGRtYSktPlBhcmVudDsKIAotICBodGltLT5TdGF0ZSA9IEhBTF9USU1fU1RBVEVfUkVBRFk7Ci0KICAgaWYgKGhkbWEgPT0gaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDMV0pCiAgIHsKICAgICBodGltLT5DaGFubmVsID0gSEFMX1RJTV9BQ1RJVkVfQ0hBTk5FTF8xOwpAQCAtNTY1NywyMyArNjQwOSw0NSBAQAogewogICBUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSA9IChUSU1fSGFuZGxlVHlwZURlZiAqKSgoRE1BX0hhbmRsZVR5cGVEZWYgKiloZG1hKS0+UGFyZW50OwogCi0gIGh0aW0tPlN0YXRlID0gSEFMX1RJTV9TVEFURV9SRUFEWTsKLQogICBpZiAoaGRtYSA9PSBodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MxXSkKICAgewogICAgIGh0aW0tPkNoYW5uZWwgPSBIQUxfVElNX0FDVElWRV9DSEFOTkVMXzE7CisKKyAgICBpZiAoaGRtYS0+SW5pdC5Nb2RlID09IERNQV9OT1JNQUwpCisgICAgeworICAgICAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgICAgICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8xLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworICAgIH0KICAgfQogICBlbHNlIGlmIChoZG1hID09IGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzJdKQogICB7CiAgICAgaHRpbS0+Q2hhbm5lbCA9IEhBTF9USU1fQUNUSVZFX0NIQU5ORUxfMjsKKworICAgIGlmIChoZG1hLT5Jbml0Lk1vZGUgPT0gRE1BX05PUk1BTCkKKyAgICB7CisgICAgICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMiwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgICAgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzIsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgICAgfQogICB9CiAgIGVsc2UgaWYgKGhkbWEgPT0gaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDM10pCiAgIHsKICAgICBodGltLT5DaGFubmVsID0gSEFMX1RJTV9BQ1RJVkVfQ0hBTk5FTF8zOworCisgICAgaWYgKGhkbWEtPkluaXQuTW9kZSA9PSBETUFfTk9STUFMKQorICAgIHsKKyAgICAgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8zLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworICAgICAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMywgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgICB9CiAgIH0KICAgZWxzZSBpZiAoaGRtYSA9PSBodGltLT5oZG1hW1RJTV9ETUFfSURfQ0M0XSkKICAgewogICAgIGh0aW0tPkNoYW5uZWwgPSBIQUxfVElNX0FDVElWRV9DSEFOTkVMXzQ7CisKKyAgICBpZiAoaGRtYS0+SW5pdC5Nb2RlID09IERNQV9OT1JNQUwpCisgICAgeworICAgICAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzQsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgICAgICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF80LCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworICAgIH0KICAgfQogICBlbHNlCiAgIHsKQEAgLTU2OTgsOCArNjQ3Miw2IEBACiB7CiAgIFRJTV9IYW5kbGVUeXBlRGVmICpodGltID0gKFRJTV9IYW5kbGVUeXBlRGVmICopKChETUFfSGFuZGxlVHlwZURlZiAqKWhkbWEpLT5QYXJlbnQ7CiAKLSAgaHRpbS0+U3RhdGUgPSBIQUxfVElNX1NUQVRFX1JFQURZOwotCiAgIGlmIChoZG1hID09IGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzFdKQogICB7CiAgICAgaHRpbS0+Q2hhbm5lbCA9IEhBTF9USU1fQUNUSVZFX0NIQU5ORUxfMTsKQEAgLTU3MzksNyArNjUxMSwxMCBAQAogewogICBUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSA9IChUSU1fSGFuZGxlVHlwZURlZiAqKSgoRE1BX0hhbmRsZVR5cGVEZWYgKiloZG1hKS0+UGFyZW50OwogCi0gIGh0aW0tPlN0YXRlID0gSEFMX1RJTV9TVEFURV9SRUFEWTsKKyAgaWYgKGh0aW0tPmhkbWFbVElNX0RNQV9JRF9VUERBVEVdLT5Jbml0Lk1vZGUgPT0gRE1BX05PUk1BTCkKKyAgeworICAgIGh0aW0tPlN0YXRlID0gSEFMX1RJTV9TVEFURV9SRUFEWTsKKyAgfQogCiAjaWYgKFVTRV9IQUxfVElNX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxKQogICBodGltLT5QZXJpb2RFbGFwc2VkQ2FsbGJhY2soaHRpbSk7CkBAIC01NzU3LDggKzY1MzIsNiBAQAogewogICBUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSA9IChUSU1fSGFuZGxlVHlwZURlZiAqKSgoRE1BX0hhbmRsZVR5cGVEZWYgKiloZG1hKS0+UGFyZW50OwogCi0gIGh0aW0tPlN0YXRlID0gSEFMX1RJTV9TVEFURV9SRUFEWTsKLQogI2lmIChVU0VfSEFMX1RJTV9SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkKICAgaHRpbS0+UGVyaW9kRWxhcHNlZEhhbGZDcGx0Q2FsbGJhY2soaHRpbSk7CiAjZWxzZQpAQCAtNTc3NSw3ICs2NTQ4LDEwIEBACiB7CiAgIFRJTV9IYW5kbGVUeXBlRGVmICpodGltID0gKFRJTV9IYW5kbGVUeXBlRGVmICopKChETUFfSGFuZGxlVHlwZURlZiAqKWhkbWEpLT5QYXJlbnQ7CiAKLSAgaHRpbS0+U3RhdGUgPSBIQUxfVElNX1NUQVRFX1JFQURZOworICBpZiAoaHRpbS0+aGRtYVtUSU1fRE1BX0lEX1RSSUdHRVJdLT5Jbml0Lk1vZGUgPT0gRE1BX05PUk1BTCkKKyAgeworICAgIGh0aW0tPlN0YXRlID0gSEFMX1RJTV9TVEFURV9SRUFEWTsKKyAgfQogCiAjaWYgKFVTRV9IQUxfVElNX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxKQogICBodGltLT5UcmlnZ2VyQ2FsbGJhY2soaHRpbSk7CkBAIC01NzkzLDggKzY1NjksNiBAQAogewogICBUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSA9IChUSU1fSGFuZGxlVHlwZURlZiAqKSgoRE1BX0hhbmRsZVR5cGVEZWYgKiloZG1hKS0+UGFyZW50OwogCi0gIGh0aW0tPlN0YXRlID0gSEFMX1RJTV9TVEFURV9SRUFEWTsKLQogI2lmIChVU0VfSEFMX1RJTV9SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkKICAgaHRpbS0+VHJpZ2dlckhhbGZDcGx0Q2FsbGJhY2soaHRpbSk7CiAjZWxzZQpAQCAtNTg1Myw3ICs2NjI3LDcgQEAKIC8qKgogICAqIEBicmllZiAgVGltZXIgT3V0cHV0IENvbXBhcmUgMSBjb25maWd1cmF0aW9uCiAgICogQHBhcmFtICBUSU14IHRvIHNlbGVjdCB0aGUgVElNIHBlcmlwaGVyYWwKLSAgKiBAcGFyYW0gIE9DX0NvbmZpZyBUaGUgb3VwdXQgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUKKyAgKiBAcGFyYW0gIE9DX0NvbmZpZyBUaGUgb3V0cHV0IGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlCiAgICogQHJldHZhbCBOb25lCiAgICovCiBzdGF0aWMgdm9pZCBUSU1fT0MxX1NldENvbmZpZyhUSU1fVHlwZURlZiAqVElNeCwgVElNX09DX0luaXRUeXBlRGVmICpPQ19Db25maWcpCkBAIC01OTI4LDcgKzY3MDIsNyBAQAogLyoqCiAgICogQGJyaWVmICBUaW1lciBPdXRwdXQgQ29tcGFyZSAyIGNvbmZpZ3VyYXRpb24KICAgKiBAcGFyYW0gIFRJTXggdG8gc2VsZWN0IHRoZSBUSU0gcGVyaXBoZXJhbAotICAqIEBwYXJhbSAgT0NfQ29uZmlnIFRoZSBvdXB1dCBjb25maWd1cmF0aW9uIHN0cnVjdHVyZQorICAqIEBwYXJhbSAgT0NfQ29uZmlnIFRoZSBvdXRwdXQgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUKICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KIHZvaWQgVElNX09DMl9TZXRDb25maWcoVElNX1R5cGVEZWYgKlRJTXgsIFRJTV9PQ19Jbml0VHlwZURlZiAqT0NfQ29uZmlnKQpAQCAtNjAwNCw3ICs2Nzc4LDcgQEAKIC8qKgogICAqIEBicmllZiAgVGltZXIgT3V0cHV0IENvbXBhcmUgMyBjb25maWd1cmF0aW9uCiAgICogQHBhcmFtICBUSU14IHRvIHNlbGVjdCB0aGUgVElNIHBlcmlwaGVyYWwKLSAgKiBAcGFyYW0gIE9DX0NvbmZpZyBUaGUgb3VwdXQgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUKKyAgKiBAcGFyYW0gIE9DX0NvbmZpZyBUaGUgb3V0cHV0IGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlCiAgICogQHJldHZhbCBOb25lCiAgICovCiBzdGF0aWMgdm9pZCBUSU1fT0MzX1NldENvbmZpZyhUSU1fVHlwZURlZiAqVElNeCwgVElNX09DX0luaXRUeXBlRGVmICpPQ19Db25maWcpCkBAIC02MDc4LDcgKzY4NTIsNyBAQAogLyoqCiAgICogQGJyaWVmICBUaW1lciBPdXRwdXQgQ29tcGFyZSA0IGNvbmZpZ3VyYXRpb24KICAgKiBAcGFyYW0gIFRJTXggdG8gc2VsZWN0IHRoZSBUSU0gcGVyaXBoZXJhbAotICAqIEBwYXJhbSAgT0NfQ29uZmlnIFRoZSBvdXB1dCBjb25maWd1cmF0aW9uIHN0cnVjdHVyZQorICAqIEBwYXJhbSAgT0NfQ29uZmlnIFRoZSBvdXRwdXQgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUKICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KIHN0YXRpYyB2b2lkIFRJTV9PQzRfU2V0Q29uZmlnKFRJTV9UeXBlRGVmICpUSU14LCBUSU1fT0NfSW5pdFR5cGVEZWYgKk9DX0NvbmZpZykKQEAgLTYxODgsNyArNjk2Miw3IEBACiAgICAgICBhc3NlcnRfcGFyYW0oSVNfVElNX0NDMV9JTlNUQU5DRShodGltLT5JbnN0YW5jZSkpOwogICAgICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9UUklHR0VSRklMVEVSKHNTbGF2ZUNvbmZpZy0+VHJpZ2dlckZpbHRlcikpOwogCi0gICAgICBpZihzU2xhdmVDb25maWctPlNsYXZlTW9kZSA9PSBUSU1fU0xBVkVNT0RFX0dBVEVEKQorICAgICAgaWYgKHNTbGF2ZUNvbmZpZy0+U2xhdmVNb2RlID09IFRJTV9TTEFWRU1PREVfR0FURUQpCiAgICAgICB7CiAgICAgICAgIHJldHVybiBIQUxfRVJST1I7CiAgICAgICB9CkBAIC02MjQwLDExICs3MDE0LDExIEBACiAgICAgY2FzZSBUSU1fVFNfSVRSMToKICAgICBjYXNlIFRJTV9UU19JVFIyOgogICAgIGNhc2UgVElNX1RTX0lUUjM6Ci0gICAgewotICAgICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlciAqLwotICAgICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9DQzJfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKTsKLSAgICAgIGJyZWFrOwotICAgIH0KKyAgICAgIHsKKyAgICAgICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlciAqLworICAgICAgICBhc3NlcnRfcGFyYW0oSVNfVElNX0NDMl9JTlNUQU5DRShodGltLT5JbnN0YW5jZSkpOworICAgICAgICBicmVhazsKKyAgICAgIH0KIAogICAgIGRlZmF1bHQ6CiAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmY0eHhfaGFsX3RpbV9leC5jIGIvU3JjL3N0bTMyZjR4eF9oYWxfdGltX2V4LmMKaW5kZXggOTlhMTNjMC4uNDM4ZGM0NCAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZjR4eF9oYWxfdGltX2V4LmMKKysrIGIvU3JjL3N0bTMyZjR4eF9oYWxfdGltX2V4LmMKQEAgLTU0LDcgKzU0LDcgQEAKICAgICAgICAgICAgICAgIHRoZSBjb21tdXRhdGlvbiBldmVudCkuCiAKICAgICAgKCMpIEFjdGl2YXRlIHRoZSBUSU0gcGVyaXBoZXJhbCB1c2luZyBvbmUgb2YgdGhlIHN0YXJ0IGZ1bmN0aW9uczoKLSAgICAgICAgICAgKCsrKSBDb21wbGVtZW50YXJ5IE91dHB1dCBDb21wYXJlIDogSEFMX1RJTUV4X09DTl9TdGFydCgpLCBIQUxfVElNRXhfT0NOX1N0YXJ0X0RNQSgpLCBIQUxfVElNRXhfT0NfU3RhcnRfSVQoKQorICAgICAgICAgICAoKyspIENvbXBsZW1lbnRhcnkgT3V0cHV0IENvbXBhcmUgOiBIQUxfVElNRXhfT0NOX1N0YXJ0KCksIEhBTF9USU1FeF9PQ05fU3RhcnRfRE1BKCksIEhBTF9USU1FeF9PQ05fU3RhcnRfSVQoKQogICAgICAgICAgICAoKyspIENvbXBsZW1lbnRhcnkgUFdNIGdlbmVyYXRpb24gOiBIQUxfVElNRXhfUFdNTl9TdGFydCgpLCBIQUxfVElNRXhfUFdNTl9TdGFydF9ETUEoKSwgSEFMX1RJTUV4X1BXTU5fU3RhcnRfSVQoKQogICAgICAgICAgICAoKyspIENvbXBsZW1lbnRhcnkgT25lLXB1bHNlIG1vZGUgb3V0cHV0IDogSEFMX1RJTUV4X09uZVB1bHNlTl9TdGFydCgpLCBIQUxfVElNRXhfT25lUHVsc2VOX1N0YXJ0X0lUKCkKICAgICAgICAgICAgKCsrKSBIYWxsIFNlbnNvciBvdXRwdXQgOiBIQUxfVElNRXhfSGFsbFNlbnNvcl9TdGFydCgpLCBIQUxfVElNRXhfSGFsbFNlbnNvcl9TdGFydF9ETUEoKSwgSEFMX1RJTUV4X0hhbGxTZW5zb3JfU3RhcnRfSVQoKS4KQEAgLTkwLDkgKzkwLDExIEBACiAKIC8qIFByaXZhdGUgdHlwZWRlZiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiBQcml2YXRlIGRlZmluZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyogUHJpdmF0ZSBtYWNybyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIFByaXZhdGUgbWFjcm9zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiBQcml2YXRlIHZhcmlhYmxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyogUHJpdmF0ZSBmdW5jdGlvbiBwcm90b3R5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyB2b2lkIFRJTV9ETUFEZWxheVB1bHNlTkNwbHQoRE1BX0hhbmRsZVR5cGVEZWYgKmhkbWEpOworc3RhdGljIHZvaWQgVElNX0RNQUVycm9yQ0N4TihETUFfSGFuZGxlVHlwZURlZiAqaGRtYSk7CiBzdGF0aWMgdm9pZCBUSU1fQ0N4TkNoYW5uZWxDbWQoVElNX1R5cGVEZWYgKlRJTXgsIHVpbnQzMl90IENoYW5uZWwsIHVpbnQzMl90IENoYW5uZWxOU3RhdGUpOwogCiAvKiBFeHBvcnRlZCBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtMTIzLDYgKzEyNSw5IEBACiAgICovCiAvKioKICAgKiBAYnJpZWYgIEluaXRpYWxpemVzIHRoZSBUSU0gSGFsbCBTZW5zb3IgSW50ZXJmYWNlIGFuZCBpbml0aWFsaXplIHRoZSBhc3NvY2lhdGVkIGhhbmRsZS4KKyAgKiBAbm90ZSAgIFdoZW4gdGhlIHRpbWVyIGluc3RhbmNlIGlzIGluaXRpYWxpemVkIGluIEhhbGwgU2Vuc29yIEludGVyZmFjZSBtb2RlLAorICAqICAgICAgICAgdGltZXIgY2hhbm5lbHMgMSBhbmQgY2hhbm5lbCAyIGFyZSByZXNlcnZlZCBhbmQgY2Fubm90IGJlIHVzZWQgZm9yCisgICogICAgICAgICBvdGhlciBwdXJwb3NlLgogICAqIEBwYXJhbSAgaHRpbSBUSU0gSGFsbCBTZW5zb3IgSW50ZXJmYWNlIGhhbmRsZQogICAqIEBwYXJhbSAgc0NvbmZpZyBUSU0gSGFsbCBTZW5zb3IgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKQEAgLTIwOCw2ICsyMTMsMTUgQEAKICAgaHRpbS0+SW5zdGFuY2UtPkNSMiAmPSB+VElNX0NSMl9NTVM7CiAgIGh0aW0tPkluc3RhbmNlLT5DUjIgfD0gVElNX1RSR09fT0MyUkVGOwogCisgIC8qIEluaXRpYWxpemUgdGhlIERNQSBidXJzdCBvcGVyYXRpb24gc3RhdGUgKi8KKyAgaHRpbS0+RE1BQnVyc3RTdGF0ZSA9IEhBTF9ETUFfQlVSU1RfU1RBVEVfUkVBRFk7CisKKyAgLyogSW5pdGlhbGl6ZSB0aGUgVElNIGNoYW5uZWxzIHN0YXRlICovCisgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8xLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMiwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMiwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKwogICAvKiBJbml0aWFsaXplIHRoZSBUSU0gc3RhdGUqLwogICBodGltLT5TdGF0ZSA9IEhBTF9USU1fU1RBVEVfUkVBRFk7CiAKQEAgLTI0MSw2ICsyNTUsMTUgQEAKICAgSEFMX1RJTUV4X0hhbGxTZW5zb3JfTXNwRGVJbml0KGh0aW0pOwogI2VuZGlmIC8qIFVTRV9IQUxfVElNX1JFR0lTVEVSX0NBTExCQUNLUyAqLwogCisgIC8qIENoYW5nZSB0aGUgRE1BIGJ1cnN0IG9wZXJhdGlvbiBzdGF0ZSAqLworICBodGltLT5ETUFCdXJzdFN0YXRlID0gSEFMX0RNQV9CVVJTVF9TVEFURV9SRVNFVDsKKworICAvKiBDaGFuZ2UgdGhlIFRJTSBjaGFubmVscyBzdGF0ZSAqLworICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFU0VUKTsKKyAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzIsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRVNFVCk7CisgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRVNFVCk7CisgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzIsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRVNFVCk7CisKICAgLyogQ2hhbmdlIFRJTSBzdGF0ZSAqLwogICBodGltLT5TdGF0ZSA9IEhBTF9USU1fU1RBVEVfUkVTRVQ7CiAKQEAgLTI4OCwxNyArMzExLDQzIEBACiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNRXhfSGFsbFNlbnNvcl9TdGFydChUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSkKIHsKICAgdWludDMyX3QgdG1wc21jcjsKKyAgSEFMX1RJTV9DaGFubmVsU3RhdGVUeXBlRGVmIGNoYW5uZWxfMV9zdGF0ZSA9IFRJTV9DSEFOTkVMX1NUQVRFX0dFVChodGltLCBUSU1fQ0hBTk5FTF8xKTsKKyAgSEFMX1RJTV9DaGFubmVsU3RhdGVUeXBlRGVmIGNoYW5uZWxfMl9zdGF0ZSA9IFRJTV9DSEFOTkVMX1NUQVRFX0dFVChodGltLCBUSU1fQ0hBTk5FTF8yKTsKKyAgSEFMX1RJTV9DaGFubmVsU3RhdGVUeXBlRGVmIGNvbXBsZW1lbnRhcnlfY2hhbm5lbF8xX3N0YXRlID0gVElNX0NIQU5ORUxfTl9TVEFURV9HRVQoaHRpbSwgVElNX0NIQU5ORUxfMSk7CisgIEhBTF9USU1fQ2hhbm5lbFN0YXRlVHlwZURlZiBjb21wbGVtZW50YXJ5X2NoYW5uZWxfMl9zdGF0ZSA9IFRJTV9DSEFOTkVMX05fU1RBVEVfR0VUKGh0aW0sIFRJTV9DSEFOTkVMXzIpOwogCiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19USU1fSEFMTF9TRU5TT1JfSU5URVJGQUNFX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSk7CiAKKyAgLyogQ2hlY2sgdGhlIFRJTSBjaGFubmVscyBzdGF0ZSAqLworICBpZiAoKGNoYW5uZWxfMV9zdGF0ZSAhPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpCisgICAgICB8fCAoY2hhbm5lbF8yX3N0YXRlICE9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkKKyAgICAgIHx8IChjb21wbGVtZW50YXJ5X2NoYW5uZWxfMV9zdGF0ZSAhPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpCisgICAgICB8fCAoY29tcGxlbWVudGFyeV9jaGFubmVsXzJfc3RhdGUgIT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKSkKKyAgeworICAgIHJldHVybiBIQUxfRVJST1I7CisgIH0KKworICAvKiBTZXQgdGhlIFRJTSBjaGFubmVscyBzdGF0ZSAqLworICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpOworICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMiwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpOworICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8xLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSk7CisgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzIsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKTsKKwogICAvKiBFbmFibGUgdGhlIElucHV0IENhcHR1cmUgY2hhbm5lbCAxCi0gICAgKGluIHRoZSBIYWxsIFNlbnNvciBJbnRlcmZhY2UgdGhlIHRocmVlIHBvc3NpYmxlIGNoYW5uZWxzIHRoYXQgY2FuIGJlIHVzZWQgYXJlIFRJTV9DSEFOTkVMXzEsIFRJTV9DSEFOTkVMXzIgYW5kIFRJTV9DSEFOTkVMXzMpICovCisgIChpbiB0aGUgSGFsbCBTZW5zb3IgSW50ZXJmYWNlIHRoZSB0aHJlZSBwb3NzaWJsZSBjaGFubmVscyB0aGF0IGNhbiBiZSB1c2VkIGFyZSBUSU1fQ0hBTk5FTF8xLCBUSU1fQ0hBTk5FTF8yIGFuZCBUSU1fQ0hBTk5FTF8zKSAqLwogICBUSU1fQ0N4Q2hhbm5lbENtZChodGltLT5JbnN0YW5jZSwgVElNX0NIQU5ORUxfMSwgVElNX0NDeF9FTkFCTEUpOwogCiAgIC8qIEVuYWJsZSB0aGUgUGVyaXBoZXJhbCwgZXhjZXB0IGluIHRyaWdnZXIgbW9kZSB3aGVyZSBlbmFibGUgaXMgYXV0b21hdGljYWxseSBkb25lIHdpdGggdHJpZ2dlciAqLwotICB0bXBzbWNyID0gaHRpbS0+SW5zdGFuY2UtPlNNQ1IgJiBUSU1fU01DUl9TTVM7Ci0gIGlmICghSVNfVElNX1NMQVZFTU9ERV9UUklHR0VSX0VOQUJMRUQodG1wc21jcikpCisgIGlmIChJU19USU1fU0xBVkVfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKQorICB7CisgICAgdG1wc21jciA9IGh0aW0tPkluc3RhbmNlLT5TTUNSICYgVElNX1NNQ1JfU01TOworICAgIGlmICghSVNfVElNX1NMQVZFTU9ERV9UUklHR0VSX0VOQUJMRUQodG1wc21jcikpCisgICAgeworICAgICAgX19IQUxfVElNX0VOQUJMRShodGltKTsKKyAgICB9CisgIH0KKyAgZWxzZQogICB7CiAgICAgX19IQUxfVElNX0VOQUJMRShodGltKTsKICAgfQpAQCAtMzI0LDYgKzM3MywxMiBAQAogICAvKiBEaXNhYmxlIHRoZSBQZXJpcGhlcmFsICovCiAgIF9fSEFMX1RJTV9ESVNBQkxFKGh0aW0pOwogCisgIC8qIFNldCB0aGUgVElNIGNoYW5uZWxzIHN0YXRlICovCisgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8xLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMiwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMiwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKwogICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCiAgIHJldHVybiBIQUxfT0s7CiB9CkBAIC0zMzYsMTAgKzM5MSwyOSBAQAogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTUV4X0hhbGxTZW5zb3JfU3RhcnRfSVQoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0pCiB7CiAgIHVpbnQzMl90IHRtcHNtY3I7CisgIEhBTF9USU1fQ2hhbm5lbFN0YXRlVHlwZURlZiBjaGFubmVsXzFfc3RhdGUgPSBUSU1fQ0hBTk5FTF9TVEFURV9HRVQoaHRpbSwgVElNX0NIQU5ORUxfMSk7CisgIEhBTF9USU1fQ2hhbm5lbFN0YXRlVHlwZURlZiBjaGFubmVsXzJfc3RhdGUgPSBUSU1fQ0hBTk5FTF9TVEFURV9HRVQoaHRpbSwgVElNX0NIQU5ORUxfMik7CisgIEhBTF9USU1fQ2hhbm5lbFN0YXRlVHlwZURlZiBjb21wbGVtZW50YXJ5X2NoYW5uZWxfMV9zdGF0ZSA9IFRJTV9DSEFOTkVMX05fU1RBVEVfR0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEpOworICBIQUxfVElNX0NoYW5uZWxTdGF0ZVR5cGVEZWYgY29tcGxlbWVudGFyeV9jaGFubmVsXzJfc3RhdGUgPSBUSU1fQ0hBTk5FTF9OX1NUQVRFX0dFVChodGltLCBUSU1fQ0hBTk5FTF8yKTsKIAogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0hBTExfU0VOU09SX0lOVEVSRkFDRV9JTlNUQU5DRShodGltLT5JbnN0YW5jZSkpOwogCisgIC8qIENoZWNrIHRoZSBUSU0gY2hhbm5lbHMgc3RhdGUgKi8KKyAgaWYgKChjaGFubmVsXzFfc3RhdGUgIT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQorICAgICAgfHwgKGNoYW5uZWxfMl9zdGF0ZSAhPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpCisgICAgICB8fCAoY29tcGxlbWVudGFyeV9jaGFubmVsXzFfc3RhdGUgIT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQorICAgICAgfHwgKGNvbXBsZW1lbnRhcnlfY2hhbm5lbF8yX3N0YXRlICE9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkpCisgIHsKKyAgICByZXR1cm4gSEFMX0VSUk9SOworICB9CisKKyAgLyogU2V0IHRoZSBUSU0gY2hhbm5lbHMgc3RhdGUgKi8KKyAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKTsKKyAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzIsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKTsKKyAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpOworICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8yLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSk7CisKICAgLyogRW5hYmxlIHRoZSBjYXB0dXJlIGNvbXBhcmUgSW50ZXJydXB0cyAxIGV2ZW50ICovCiAgIF9fSEFMX1RJTV9FTkFCTEVfSVQoaHRpbSwgVElNX0lUX0NDMSk7CiAKQEAgLTM0OCw4ICs0MjIsMTUgQEAKICAgVElNX0NDeENoYW5uZWxDbWQoaHRpbS0+SW5zdGFuY2UsIFRJTV9DSEFOTkVMXzEsIFRJTV9DQ3hfRU5BQkxFKTsKIAogICAvKiBFbmFibGUgdGhlIFBlcmlwaGVyYWwsIGV4Y2VwdCBpbiB0cmlnZ2VyIG1vZGUgd2hlcmUgZW5hYmxlIGlzIGF1dG9tYXRpY2FsbHkgZG9uZSB3aXRoIHRyaWdnZXIgKi8KLSAgdG1wc21jciA9IGh0aW0tPkluc3RhbmNlLT5TTUNSICYgVElNX1NNQ1JfU01TOwotICBpZiAoIUlTX1RJTV9TTEFWRU1PREVfVFJJR0dFUl9FTkFCTEVEKHRtcHNtY3IpKQorICBpZiAoSVNfVElNX1NMQVZFX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSkKKyAgeworICAgIHRtcHNtY3IgPSBodGltLT5JbnN0YW5jZS0+U01DUiAmIFRJTV9TTUNSX1NNUzsKKyAgICBpZiAoIUlTX1RJTV9TTEFWRU1PREVfVFJJR0dFUl9FTkFCTEVEKHRtcHNtY3IpKQorICAgIHsKKyAgICAgIF9fSEFMX1RJTV9FTkFCTEUoaHRpbSk7CisgICAgfQorICB9CisgIGVsc2UKICAgewogICAgIF9fSEFMX1RJTV9FTkFCTEUoaHRpbSk7CiAgIH0KQEAgLTM3OCw2ICs0NTksMTIgQEAKICAgLyogRGlzYWJsZSB0aGUgUGVyaXBoZXJhbCAqLwogICBfX0hBTF9USU1fRElTQUJMRShodGltKTsKIAorICAvKiBTZXQgdGhlIFRJTSBjaGFubmVscyBzdGF0ZSAqLworICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzIsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzIsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisKICAgLyogUmV0dXJuIGZ1bmN0aW9uIHN0YXR1cyAqLwogICByZXR1cm4gSEFMX09LOwogfQpAQCAtMzkyLDI5ICs0NzksMzYgQEAKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1FeF9IYWxsU2Vuc29yX1N0YXJ0X0RNQShUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgdWludDMyX3QgKnBEYXRhLCB1aW50MTZfdCBMZW5ndGgpCiB7CiAgIHVpbnQzMl90IHRtcHNtY3I7CisgIEhBTF9USU1fQ2hhbm5lbFN0YXRlVHlwZURlZiBjaGFubmVsXzFfc3RhdGUgPSBUSU1fQ0hBTk5FTF9TVEFURV9HRVQoaHRpbSwgVElNX0NIQU5ORUxfMSk7CisgIEhBTF9USU1fQ2hhbm5lbFN0YXRlVHlwZURlZiBjb21wbGVtZW50YXJ5X2NoYW5uZWxfMV9zdGF0ZSA9IFRJTV9DSEFOTkVMX05fU1RBVEVfR0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEpOwogCiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19USU1fSEFMTF9TRU5TT1JfSU5URVJGQUNFX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSk7CiAKLSAgaWYgKGh0aW0tPlN0YXRlID09IEhBTF9USU1fU1RBVEVfQlVTWSkKKyAgLyogU2V0IHRoZSBUSU0gY2hhbm5lbCBzdGF0ZSAqLworICBpZiAoKGNoYW5uZWxfMV9zdGF0ZSA9PSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSkKKyAgICAgIHx8IChjb21wbGVtZW50YXJ5X2NoYW5uZWxfMV9zdGF0ZSA9PSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSkpCiAgIHsKICAgICByZXR1cm4gSEFMX0JVU1k7CiAgIH0KLSAgZWxzZSBpZiAoaHRpbS0+U3RhdGUgPT0gSEFMX1RJTV9TVEFURV9SRUFEWSkKKyAgZWxzZSBpZiAoKGNoYW5uZWxfMV9zdGF0ZSA9PSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpCisgICAgICAgICAgICYmIChjb21wbGVtZW50YXJ5X2NoYW5uZWxfMV9zdGF0ZSA9PSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpKQogICB7Ci0gICAgaWYgKCgodWludDMyX3QpcERhdGEgPT0gMFUpICYmIChMZW5ndGggPiAwVSkpCisgICAgaWYgKChwRGF0YSA9PSBOVUxMKSAmJiAoTGVuZ3RoID4gMFUpKQogICAgIHsKICAgICAgIHJldHVybiBIQUxfRVJST1I7CiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICBodGltLT5TdGF0ZSA9IEhBTF9USU1fU1RBVEVfQlVTWTsKKyAgICAgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8xLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSk7CisgICAgICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8xLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSk7CiAgICAgfQogICB9CiAgIGVsc2UKICAgewotICAgIC8qIG5vdGhpbmcgdG8gZG8gKi8KKyAgICByZXR1cm4gSEFMX0VSUk9SOwogICB9CisKICAgLyogRW5hYmxlIHRoZSBJbnB1dCBDYXB0dXJlIGNoYW5uZWwgMQogICAgIChpbiB0aGUgSGFsbCBTZW5zb3IgSW50ZXJmYWNlIHRoZSB0aHJlZSBwb3NzaWJsZSBjaGFubmVscyB0aGF0IGNhbiBiZSB1c2VkIGFyZSBUSU1fQ0hBTk5FTF8xLCBUSU1fQ0hBTk5FTF8yIGFuZCBUSU1fQ0hBTk5FTF8zKSAqLwogICBUSU1fQ0N4Q2hhbm5lbENtZChodGltLT5JbnN0YW5jZSwgVElNX0NIQU5ORUxfMSwgVElNX0NDeF9FTkFCTEUpOwpAQCAtNDI4LDE0ICs1MjIsMjIgQEAKICAgLyogRW5hYmxlIHRoZSBETUEgc3RyZWFtIGZvciBDYXB0dXJlIDEqLwogICBpZiAoSEFMX0RNQV9TdGFydF9JVChodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MxXSwgKHVpbnQzMl90KSZodGltLT5JbnN0YW5jZS0+Q0NSMSwgKHVpbnQzMl90KXBEYXRhLCBMZW5ndGgpICE9IEhBTF9PSykKICAgeworICAgIC8qIFJldHVybiBlcnJvciBzdGF0dXMgKi8KICAgICByZXR1cm4gSEFMX0VSUk9SOwogICB9CiAgIC8qIEVuYWJsZSB0aGUgY2FwdHVyZSBjb21wYXJlIDEgSW50ZXJydXB0ICovCiAgIF9fSEFMX1RJTV9FTkFCTEVfRE1BKGh0aW0sIFRJTV9ETUFfQ0MxKTsKIAogICAvKiBFbmFibGUgdGhlIFBlcmlwaGVyYWwsIGV4Y2VwdCBpbiB0cmlnZ2VyIG1vZGUgd2hlcmUgZW5hYmxlIGlzIGF1dG9tYXRpY2FsbHkgZG9uZSB3aXRoIHRyaWdnZXIgKi8KLSAgdG1wc21jciA9IGh0aW0tPkluc3RhbmNlLT5TTUNSICYgVElNX1NNQ1JfU01TOwotICBpZiAoIUlTX1RJTV9TTEFWRU1PREVfVFJJR0dFUl9FTkFCTEVEKHRtcHNtY3IpKQorICBpZiAoSVNfVElNX1NMQVZFX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSkKKyAgeworICAgIHRtcHNtY3IgPSBodGltLT5JbnN0YW5jZS0+U01DUiAmIFRJTV9TTUNSX1NNUzsKKyAgICBpZiAoIUlTX1RJTV9TTEFWRU1PREVfVFJJR0dFUl9FTkFCTEVEKHRtcHNtY3IpKQorICAgIHsKKyAgICAgIF9fSEFMX1RJTV9FTkFCTEUoaHRpbSk7CisgICAgfQorICB9CisgIGVsc2UKICAgewogICAgIF9fSEFMX1RJTV9FTkFCTEUoaHRpbSk7CiAgIH0KQEAgLTQ2Myw5ICs1NjUsMTQgQEAKICAgX19IQUxfVElNX0RJU0FCTEVfRE1BKGh0aW0sIFRJTV9ETUFfQ0MxKTsKIAogICAodm9pZClIQUxfRE1BX0Fib3J0X0lUKGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzFdKTsKKwogICAvKiBEaXNhYmxlIHRoZSBQZXJpcGhlcmFsICovCiAgIF9fSEFMX1RJTV9ESVNBQkxFKGh0aW0pOwogCisgIC8qIFNldCB0aGUgVElNIGNoYW5uZWwgc3RhdGUgKi8KKyAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisKICAgLyogUmV0dXJuIGZ1bmN0aW9uIHN0YXR1cyAqLwogICByZXR1cm4gSEFMX09LOwogfQpAQCAtNTEyLDYgKzYxOSwxNSBAQAogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0NDWE5fSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UsIENoYW5uZWwpKTsKIAorICAvKiBDaGVjayB0aGUgVElNIGNvbXBsZW1lbnRhcnkgY2hhbm5lbCBzdGF0ZSAqLworICBpZiAoVElNX0NIQU5ORUxfTl9TVEFURV9HRVQoaHRpbSwgQ2hhbm5lbCkgIT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQorICB7CisgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgfQorCisgIC8qIFNldCB0aGUgVElNIGNvbXBsZW1lbnRhcnkgY2hhbm5lbCBzdGF0ZSAqLworICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBDaGFubmVsLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSk7CisKICAgLyogRW5hYmxlIHRoZSBDYXB0dXJlIGNvbXBhcmUgY2hhbm5lbCBOICovCiAgIFRJTV9DQ3hOQ2hhbm5lbENtZChodGltLT5JbnN0YW5jZSwgQ2hhbm5lbCwgVElNX0NDeE5fRU5BQkxFKTsKIApAQCAtNTE5LDggKzYzNSwxNSBAQAogICBfX0hBTF9USU1fTU9FX0VOQUJMRShodGltKTsKIAogICAvKiBFbmFibGUgdGhlIFBlcmlwaGVyYWwsIGV4Y2VwdCBpbiB0cmlnZ2VyIG1vZGUgd2hlcmUgZW5hYmxlIGlzIGF1dG9tYXRpY2FsbHkgZG9uZSB3aXRoIHRyaWdnZXIgKi8KLSAgdG1wc21jciA9IGh0aW0tPkluc3RhbmNlLT5TTUNSICYgVElNX1NNQ1JfU01TOwotICBpZiAoIUlTX1RJTV9TTEFWRU1PREVfVFJJR0dFUl9FTkFCTEVEKHRtcHNtY3IpKQorICBpZiAoSVNfVElNX1NMQVZFX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSkKKyAgeworICAgIHRtcHNtY3IgPSBodGltLT5JbnN0YW5jZS0+U01DUiAmIFRJTV9TTUNSX1NNUzsKKyAgICBpZiAoIUlTX1RJTV9TTEFWRU1PREVfVFJJR0dFUl9FTkFCTEVEKHRtcHNtY3IpKQorICAgIHsKKyAgICAgIF9fSEFMX1RJTV9FTkFCTEUoaHRpbSk7CisgICAgfQorICB9CisgIGVsc2UKICAgewogICAgIF9fSEFMX1RJTV9FTkFCTEUoaHRpbSk7CiAgIH0KQEAgLTU1NCw2ICs2NzcsOSBAQAogICAvKiBEaXNhYmxlIHRoZSBQZXJpcGhlcmFsICovCiAgIF9fSEFMX1RJTV9ESVNBQkxFKGh0aW0pOwogCisgIC8qIFNldCB0aGUgVElNIGNvbXBsZW1lbnRhcnkgY2hhbm5lbCBzdGF0ZSAqLworICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBDaGFubmVsLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworCiAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KICAgcmV0dXJuIEhBTF9PSzsKIH0KQEAgLTU3Niw2ICs3MDIsMTUgQEAKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9DQ1hOX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlLCBDaGFubmVsKSk7CiAKKyAgLyogQ2hlY2sgdGhlIFRJTSBjb21wbGVtZW50YXJ5IGNoYW5uZWwgc3RhdGUgKi8KKyAgaWYgKFRJTV9DSEFOTkVMX05fU1RBVEVfR0VUKGh0aW0sIENoYW5uZWwpICE9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkKKyAgeworICAgIHJldHVybiBIQUxfRVJST1I7CisgIH0KKworICAvKiBTZXQgdGhlIFRJTSBjb21wbGVtZW50YXJ5IGNoYW5uZWwgc3RhdGUgKi8KKyAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgQ2hhbm5lbCwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpOworCiAgIHN3aXRjaCAoQ2hhbm5lbCkKICAgewogICAgIGNhc2UgVElNX0NIQU5ORUxfMToKQEAgLTYxNCw4ICs3NDksMTUgQEAKICAgX19IQUxfVElNX01PRV9FTkFCTEUoaHRpbSk7CiAKICAgLyogRW5hYmxlIHRoZSBQZXJpcGhlcmFsLCBleGNlcHQgaW4gdHJpZ2dlciBtb2RlIHdoZXJlIGVuYWJsZSBpcyBhdXRvbWF0aWNhbGx5IGRvbmUgd2l0aCB0cmlnZ2VyICovCi0gIHRtcHNtY3IgPSBodGltLT5JbnN0YW5jZS0+U01DUiAmIFRJTV9TTUNSX1NNUzsKLSAgaWYgKCFJU19USU1fU0xBVkVNT0RFX1RSSUdHRVJfRU5BQkxFRCh0bXBzbWNyKSkKKyAgaWYgKElTX1RJTV9TTEFWRV9JTlNUQU5DRShodGltLT5JbnN0YW5jZSkpCisgIHsKKyAgICB0bXBzbWNyID0gaHRpbS0+SW5zdGFuY2UtPlNNQ1IgJiBUSU1fU01DUl9TTVM7CisgICAgaWYgKCFJU19USU1fU0xBVkVNT0RFX1RSSUdHRVJfRU5BQkxFRCh0bXBzbWNyKSkKKyAgICB7CisgICAgICBfX0hBTF9USU1fRU5BQkxFKGh0aW0pOworICAgIH0KKyAgfQorICBlbHNlCiAgIHsKICAgICBfX0hBTF9USU1fRU5BQkxFKGh0aW0pOwogICB9CkBAIC02ODQsNiArODI2LDkgQEAKICAgLyogRGlzYWJsZSB0aGUgUGVyaXBoZXJhbCAqLwogICBfX0hBTF9USU1fRElTQUJMRShodGltKTsKIAorICAvKiBTZXQgdGhlIFRJTSBjb21wbGVtZW50YXJ5IGNoYW5uZWwgc3RhdGUgKi8KKyAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgQ2hhbm5lbCwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKwogICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCiAgIHJldHVybiBIQUxfT0s7CiB9CkBAIC03MDgsMjQgKzg1MywyNSBAQAogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0NDWE5fSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UsIENoYW5uZWwpKTsKIAotICBpZiAoaHRpbS0+U3RhdGUgPT0gSEFMX1RJTV9TVEFURV9CVVNZKQorICAvKiBTZXQgdGhlIFRJTSBjb21wbGVtZW50YXJ5IGNoYW5uZWwgc3RhdGUgKi8KKyAgaWYgKFRJTV9DSEFOTkVMX05fU1RBVEVfR0VUKGh0aW0sIENoYW5uZWwpID09IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKQogICB7CiAgICAgcmV0dXJuIEhBTF9CVVNZOwogICB9Ci0gIGVsc2UgaWYgKGh0aW0tPlN0YXRlID09IEhBTF9USU1fU1RBVEVfUkVBRFkpCisgIGVsc2UgaWYgKFRJTV9DSEFOTkVMX05fU1RBVEVfR0VUKGh0aW0sIENoYW5uZWwpID09IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkKICAgewotICAgIGlmICgoKHVpbnQzMl90KXBEYXRhID09IDBVKSAmJiAoTGVuZ3RoID4gMFUpKQorICAgIGlmICgocERhdGEgPT0gTlVMTCkgJiYgKExlbmd0aCA+IDBVKSkKICAgICB7CiAgICAgICByZXR1cm4gSEFMX0VSUk9SOwogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgaHRpbS0+U3RhdGUgPSBIQUxfVElNX1NUQVRFX0JVU1k7CisgICAgICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBDaGFubmVsLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSk7CiAgICAgfQogICB9CiAgIGVsc2UKICAgewotICAgIC8qIG5vdGhpbmcgdG8gZG8gICovCisgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgfQogCiAgIHN3aXRjaCAoQ2hhbm5lbCkKQEAgLTczMywxNSArODc5LDE2IEBACiAgICAgY2FzZSBUSU1fQ0hBTk5FTF8xOgogICAgIHsKICAgICAgIC8qIFNldCB0aGUgRE1BIGNvbXBhcmUgY2FsbGJhY2tzICovCi0gICAgICBodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MxXS0+WGZlckNwbHRDYWxsYmFjayA9IFRJTV9ETUFEZWxheVB1bHNlQ3BsdDsKKyAgICAgIGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzFdLT5YZmVyQ3BsdENhbGxiYWNrID0gVElNX0RNQURlbGF5UHVsc2VOQ3BsdDsKICAgICAgIGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzFdLT5YZmVySGFsZkNwbHRDYWxsYmFjayA9IFRJTV9ETUFEZWxheVB1bHNlSGFsZkNwbHQ7CiAKICAgICAgIC8qIFNldCB0aGUgRE1BIGVycm9yIGNhbGxiYWNrICovCi0gICAgICBodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MxXS0+WGZlckVycm9yQ2FsbGJhY2sgPSBUSU1fRE1BRXJyb3IgOworICAgICAgaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDMV0tPlhmZXJFcnJvckNhbGxiYWNrID0gVElNX0RNQUVycm9yQ0N4TiA7CiAKICAgICAgIC8qIEVuYWJsZSB0aGUgRE1BIHN0cmVhbSAqLwogICAgICAgaWYgKEhBTF9ETUFfU3RhcnRfSVQoaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDMV0sICh1aW50MzJfdClwRGF0YSwgKHVpbnQzMl90KSZodGltLT5JbnN0YW5jZS0+Q0NSMSwgTGVuZ3RoKSAhPSBIQUxfT0spCiAgICAgICB7CisgICAgICAgIC8qIFJldHVybiBlcnJvciBzdGF0dXMgKi8KICAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICAgIH0KICAgICAgIC8qIEVuYWJsZSB0aGUgVElNIE91dHB1dCBDb21wYXJlIERNQSByZXF1ZXN0ICovCkBAIC03NTIsMTUgKzg5OSwxNiBAQAogICAgIGNhc2UgVElNX0NIQU5ORUxfMjoKICAgICB7CiAgICAgICAvKiBTZXQgdGhlIERNQSBjb21wYXJlIGNhbGxiYWNrcyAqLwotICAgICAgaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDMl0tPlhmZXJDcGx0Q2FsbGJhY2sgPSBUSU1fRE1BRGVsYXlQdWxzZUNwbHQ7CisgICAgICBodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MyXS0+WGZlckNwbHRDYWxsYmFjayA9IFRJTV9ETUFEZWxheVB1bHNlTkNwbHQ7CiAgICAgICBodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MyXS0+WGZlckhhbGZDcGx0Q2FsbGJhY2sgPSBUSU1fRE1BRGVsYXlQdWxzZUhhbGZDcGx0OwogCiAgICAgICAvKiBTZXQgdGhlIERNQSBlcnJvciBjYWxsYmFjayAqLwotICAgICAgaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDMl0tPlhmZXJFcnJvckNhbGxiYWNrID0gVElNX0RNQUVycm9yIDsKKyAgICAgIGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzJdLT5YZmVyRXJyb3JDYWxsYmFjayA9IFRJTV9ETUFFcnJvckNDeE4gOwogCiAgICAgICAvKiBFbmFibGUgdGhlIERNQSBzdHJlYW0gKi8KICAgICAgIGlmIChIQUxfRE1BX1N0YXJ0X0lUKGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzJdLCAodWludDMyX3QpcERhdGEsICh1aW50MzJfdCkmaHRpbS0+SW5zdGFuY2UtPkNDUjIsIExlbmd0aCkgIT0gSEFMX09LKQogICAgICAgeworICAgICAgICAvKiBSZXR1cm4gZXJyb3Igc3RhdHVzICovCiAgICAgICAgIHJldHVybiBIQUxfRVJST1I7CiAgICAgICB9CiAgICAgICAvKiBFbmFibGUgdGhlIFRJTSBPdXRwdXQgQ29tcGFyZSBETUEgcmVxdWVzdCAqLwpAQCAtNzcxLDE1ICs5MTksMTYgQEAKICAgICBjYXNlIFRJTV9DSEFOTkVMXzM6CiAgICAgewogICAgICAgLyogU2V0IHRoZSBETUEgY29tcGFyZSBjYWxsYmFja3MgKi8KLSAgICAgIGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzNdLT5YZmVyQ3BsdENhbGxiYWNrID0gVElNX0RNQURlbGF5UHVsc2VDcGx0OworICAgICAgaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDM10tPlhmZXJDcGx0Q2FsbGJhY2sgPSBUSU1fRE1BRGVsYXlQdWxzZU5DcGx0OwogICAgICAgaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDM10tPlhmZXJIYWxmQ3BsdENhbGxiYWNrID0gVElNX0RNQURlbGF5UHVsc2VIYWxmQ3BsdDsKIAogICAgICAgLyogU2V0IHRoZSBETUEgZXJyb3IgY2FsbGJhY2sgKi8KLSAgICAgIGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzNdLT5YZmVyRXJyb3JDYWxsYmFjayA9IFRJTV9ETUFFcnJvciA7CisgICAgICBodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MzXS0+WGZlckVycm9yQ2FsbGJhY2sgPSBUSU1fRE1BRXJyb3JDQ3hOIDsKIAogICAgICAgLyogRW5hYmxlIHRoZSBETUEgc3RyZWFtICovCiAgICAgICBpZiAoSEFMX0RNQV9TdGFydF9JVChodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MzXSwgKHVpbnQzMl90KXBEYXRhLCAodWludDMyX3QpJmh0aW0tPkluc3RhbmNlLT5DQ1IzLCBMZW5ndGgpICE9IEhBTF9PSykKICAgICAgIHsKKyAgICAgICAgLyogUmV0dXJuIGVycm9yIHN0YXR1cyAqLwogICAgICAgICByZXR1cm4gSEFMX0VSUk9SOwogICAgICAgfQogICAgICAgLyogRW5hYmxlIHRoZSBUSU0gT3V0cHV0IENvbXBhcmUgRE1BIHJlcXVlc3QgKi8KQEAgLTc5OCw4ICs5NDcsMTUgQEAKICAgX19IQUxfVElNX01PRV9FTkFCTEUoaHRpbSk7CiAKICAgLyogRW5hYmxlIHRoZSBQZXJpcGhlcmFsLCBleGNlcHQgaW4gdHJpZ2dlciBtb2RlIHdoZXJlIGVuYWJsZSBpcyBhdXRvbWF0aWNhbGx5IGRvbmUgd2l0aCB0cmlnZ2VyICovCi0gIHRtcHNtY3IgPSBodGltLT5JbnN0YW5jZS0+U01DUiAmIFRJTV9TTUNSX1NNUzsKLSAgaWYgKCFJU19USU1fU0xBVkVNT0RFX1RSSUdHRVJfRU5BQkxFRCh0bXBzbWNyKSkKKyAgaWYgKElTX1RJTV9TTEFWRV9JTlNUQU5DRShodGltLT5JbnN0YW5jZSkpCisgIHsKKyAgICB0bXBzbWNyID0gaHRpbS0+SW5zdGFuY2UtPlNNQ1IgJiBUSU1fU01DUl9TTVM7CisgICAgaWYgKCFJU19USU1fU0xBVkVNT0RFX1RSSUdHRVJfRU5BQkxFRCh0bXBzbWNyKSkKKyAgICB7CisgICAgICBfX0hBTF9USU1fRU5BQkxFKGh0aW0pOworICAgIH0KKyAgfQorICBlbHNlCiAgIHsKICAgICBfX0hBTF9USU1fRU5BQkxFKGh0aW0pOwogICB9CkBAIC04NjMsOCArMTAxOSw4IEBACiAgIC8qIERpc2FibGUgdGhlIFBlcmlwaGVyYWwgKi8KICAgX19IQUxfVElNX0RJU0FCTEUoaHRpbSk7CiAKLSAgLyogQ2hhbmdlIHRoZSBodGltIHN0YXRlICovCi0gIGh0aW0tPlN0YXRlID0gSEFMX1RJTV9TVEFURV9SRUFEWTsKKyAgLyogU2V0IHRoZSBUSU0gY29tcGxlbWVudGFyeSBjaGFubmVsIHN0YXRlICovCisgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIENoYW5uZWwsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CiAKICAgLyogUmV0dXJuIGZ1bmN0aW9uIHN0YXR1cyAqLwogICByZXR1cm4gSEFMX09LOwpAQCAtOTIxLDYgKzEwNzcsMTUgQEAKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9DQ1hOX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlLCBDaGFubmVsKSk7CiAKKyAgLyogQ2hlY2sgdGhlIFRJTSBjb21wbGVtZW50YXJ5IGNoYW5uZWwgc3RhdGUgKi8KKyAgaWYgKFRJTV9DSEFOTkVMX05fU1RBVEVfR0VUKGh0aW0sIENoYW5uZWwpICE9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkKKyAgeworICAgIHJldHVybiBIQUxfRVJST1I7CisgIH0KKworICAvKiBTZXQgdGhlIFRJTSBjb21wbGVtZW50YXJ5IGNoYW5uZWwgc3RhdGUgKi8KKyAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgQ2hhbm5lbCwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpOworCiAgIC8qIEVuYWJsZSB0aGUgY29tcGxlbWVudGFyeSBQV00gb3V0cHV0ICAqLwogICBUSU1fQ0N4TkNoYW5uZWxDbWQoaHRpbS0+SW5zdGFuY2UsIENoYW5uZWwsIFRJTV9DQ3hOX0VOQUJMRSk7CiAKQEAgLTkyOCw4ICsxMDkzLDE1IEBACiAgIF9fSEFMX1RJTV9NT0VfRU5BQkxFKGh0aW0pOwogCiAgIC8qIEVuYWJsZSB0aGUgUGVyaXBoZXJhbCwgZXhjZXB0IGluIHRyaWdnZXIgbW9kZSB3aGVyZSBlbmFibGUgaXMgYXV0b21hdGljYWxseSBkb25lIHdpdGggdHJpZ2dlciAqLwotICB0bXBzbWNyID0gaHRpbS0+SW5zdGFuY2UtPlNNQ1IgJiBUSU1fU01DUl9TTVM7Ci0gIGlmICghSVNfVElNX1NMQVZFTU9ERV9UUklHR0VSX0VOQUJMRUQodG1wc21jcikpCisgIGlmIChJU19USU1fU0xBVkVfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKQorICB7CisgICAgdG1wc21jciA9IGh0aW0tPkluc3RhbmNlLT5TTUNSICYgVElNX1NNQ1JfU01TOworICAgIGlmICghSVNfVElNX1NMQVZFTU9ERV9UUklHR0VSX0VOQUJMRUQodG1wc21jcikpCisgICAgeworICAgICAgX19IQUxfVElNX0VOQUJMRShodGltKTsKKyAgICB9CisgIH0KKyAgZWxzZQogICB7CiAgICAgX19IQUxfVElNX0VOQUJMRShodGltKTsKICAgfQpAQCAtOTYyLDYgKzExMzQsOSBAQAogICAvKiBEaXNhYmxlIHRoZSBQZXJpcGhlcmFsICovCiAgIF9fSEFMX1RJTV9ESVNBQkxFKGh0aW0pOwogCisgIC8qIFNldCB0aGUgVElNIGNvbXBsZW1lbnRhcnkgY2hhbm5lbCBzdGF0ZSAqLworICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBDaGFubmVsLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworCiAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KICAgcmV0dXJuIEhBTF9PSzsKIH0KQEAgLTk4NCw2ICsxMTU5LDE1IEBACiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19USU1fQ0NYTl9JTlNUQU5DRShodGltLT5JbnN0YW5jZSwgQ2hhbm5lbCkpOwogCisgIC8qIENoZWNrIHRoZSBUSU0gY29tcGxlbWVudGFyeSBjaGFubmVsIHN0YXRlICovCisgIGlmIChUSU1fQ0hBTk5FTF9OX1NUQVRFX0dFVChodGltLCBDaGFubmVsKSAhPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpCisgIHsKKyAgICByZXR1cm4gSEFMX0VSUk9SOworICB9CisKKyAgLyogU2V0IHRoZSBUSU0gY29tcGxlbWVudGFyeSBjaGFubmVsIHN0YXRlICovCisgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIENoYW5uZWwsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKTsKKwogICBzd2l0Y2ggKENoYW5uZWwpCiAgIHsKICAgICBjYXNlIFRJTV9DSEFOTkVMXzE6CkBAIC0xMDIxLDggKzEyMDUsMTUgQEAKICAgX19IQUxfVElNX01PRV9FTkFCTEUoaHRpbSk7CiAKICAgLyogRW5hYmxlIHRoZSBQZXJpcGhlcmFsLCBleGNlcHQgaW4gdHJpZ2dlciBtb2RlIHdoZXJlIGVuYWJsZSBpcyBhdXRvbWF0aWNhbGx5IGRvbmUgd2l0aCB0cmlnZ2VyICovCi0gIHRtcHNtY3IgPSBodGltLT5JbnN0YW5jZS0+U01DUiAmIFRJTV9TTUNSX1NNUzsKLSAgaWYgKCFJU19USU1fU0xBVkVNT0RFX1RSSUdHRVJfRU5BQkxFRCh0bXBzbWNyKSkKKyAgaWYgKElTX1RJTV9TTEFWRV9JTlNUQU5DRShodGltLT5JbnN0YW5jZSkpCisgIHsKKyAgICB0bXBzbWNyID0gaHRpbS0+SW5zdGFuY2UtPlNNQ1IgJiBUSU1fU01DUl9TTVM7CisgICAgaWYgKCFJU19USU1fU0xBVkVNT0RFX1RSSUdHRVJfRU5BQkxFRCh0bXBzbWNyKSkKKyAgICB7CisgICAgICBfX0hBTF9USU1fRU5BQkxFKGh0aW0pOworICAgIH0KKyAgfQorICBlbHNlCiAgIHsKICAgICBfX0hBTF9USU1fRU5BQkxFKGh0aW0pOwogICB9CkBAIC0xMDkyLDYgKzEyODMsOSBAQAogICAvKiBEaXNhYmxlIHRoZSBQZXJpcGhlcmFsICovCiAgIF9fSEFMX1RJTV9ESVNBQkxFKGh0aW0pOwogCisgIC8qIFNldCB0aGUgVElNIGNvbXBsZW1lbnRhcnkgY2hhbm5lbCBzdGF0ZSAqLworICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBDaGFubmVsLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworCiAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KICAgcmV0dXJuIEhBTF9PSzsKIH0KQEAgLTExMTYsMzkgKzEzMTAsNDIgQEAKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9DQ1hOX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlLCBDaGFubmVsKSk7CiAKLSAgaWYgKGh0aW0tPlN0YXRlID09IEhBTF9USU1fU1RBVEVfQlVTWSkKKyAgLyogU2V0IHRoZSBUSU0gY29tcGxlbWVudGFyeSBjaGFubmVsIHN0YXRlICovCisgIGlmIChUSU1fQ0hBTk5FTF9OX1NUQVRFX0dFVChodGltLCBDaGFubmVsKSA9PSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSkKICAgewogICAgIHJldHVybiBIQUxfQlVTWTsKICAgfQotICBlbHNlIGlmIChodGltLT5TdGF0ZSA9PSBIQUxfVElNX1NUQVRFX1JFQURZKQorICBlbHNlIGlmIChUSU1fQ0hBTk5FTF9OX1NUQVRFX0dFVChodGltLCBDaGFubmVsKSA9PSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpCiAgIHsKLSAgICBpZiAoKCh1aW50MzJfdClwRGF0YSA9PSAwVSkgJiYgKExlbmd0aCA+IDBVKSkKKyAgICBpZiAoKHBEYXRhID09IE5VTEwpICYmIChMZW5ndGggPiAwVSkpCiAgICAgewogICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAgIGh0aW0tPlN0YXRlID0gSEFMX1RJTV9TVEFURV9CVVNZOworICAgICAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgQ2hhbm5lbCwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpOwogICAgIH0KICAgfQogICBlbHNlCiAgIHsKLSAgICAvKiBub3RoaW5nIHRvIGRvICovCisgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgfQorCiAgIHN3aXRjaCAoQ2hhbm5lbCkKICAgewogICAgIGNhc2UgVElNX0NIQU5ORUxfMToKICAgICB7CiAgICAgICAvKiBTZXQgdGhlIERNQSBjb21wYXJlIGNhbGxiYWNrcyAqLwotICAgICAgaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDMV0tPlhmZXJDcGx0Q2FsbGJhY2sgPSBUSU1fRE1BRGVsYXlQdWxzZUNwbHQ7CisgICAgICBodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MxXS0+WGZlckNwbHRDYWxsYmFjayA9IFRJTV9ETUFEZWxheVB1bHNlTkNwbHQ7CiAgICAgICBodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MxXS0+WGZlckhhbGZDcGx0Q2FsbGJhY2sgPSBUSU1fRE1BRGVsYXlQdWxzZUhhbGZDcGx0OwogCiAgICAgICAvKiBTZXQgdGhlIERNQSBlcnJvciBjYWxsYmFjayAqLwotICAgICAgaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDMV0tPlhmZXJFcnJvckNhbGxiYWNrID0gVElNX0RNQUVycm9yIDsKKyAgICAgIGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzFdLT5YZmVyRXJyb3JDYWxsYmFjayA9IFRJTV9ETUFFcnJvckNDeE4gOwogCiAgICAgICAvKiBFbmFibGUgdGhlIERNQSBzdHJlYW0gKi8KICAgICAgIGlmIChIQUxfRE1BX1N0YXJ0X0lUKGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzFdLCAodWludDMyX3QpcERhdGEsICh1aW50MzJfdCkmaHRpbS0+SW5zdGFuY2UtPkNDUjEsIExlbmd0aCkgIT0gSEFMX09LKQogICAgICAgeworICAgICAgICAvKiBSZXR1cm4gZXJyb3Igc3RhdHVzICovCiAgICAgICAgIHJldHVybiBIQUxfRVJST1I7CiAgICAgICB9CiAgICAgICAvKiBFbmFibGUgdGhlIFRJTSBDYXB0dXJlL0NvbXBhcmUgMSBETUEgcmVxdWVzdCAqLwpAQCAtMTE1OSwxNSArMTM1NiwxNiBAQAogICAgIGNhc2UgVElNX0NIQU5ORUxfMjoKICAgICB7CiAgICAgICAvKiBTZXQgdGhlIERNQSBjb21wYXJlIGNhbGxiYWNrcyAqLwotICAgICAgaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDMl0tPlhmZXJDcGx0Q2FsbGJhY2sgPSBUSU1fRE1BRGVsYXlQdWxzZUNwbHQ7CisgICAgICBodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MyXS0+WGZlckNwbHRDYWxsYmFjayA9IFRJTV9ETUFEZWxheVB1bHNlTkNwbHQ7CiAgICAgICBodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MyXS0+WGZlckhhbGZDcGx0Q2FsbGJhY2sgPSBUSU1fRE1BRGVsYXlQdWxzZUhhbGZDcGx0OwogCiAgICAgICAvKiBTZXQgdGhlIERNQSBlcnJvciBjYWxsYmFjayAqLwotICAgICAgaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDMl0tPlhmZXJFcnJvckNhbGxiYWNrID0gVElNX0RNQUVycm9yIDsKKyAgICAgIGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzJdLT5YZmVyRXJyb3JDYWxsYmFjayA9IFRJTV9ETUFFcnJvckNDeE4gOwogCiAgICAgICAvKiBFbmFibGUgdGhlIERNQSBzdHJlYW0gKi8KICAgICAgIGlmIChIQUxfRE1BX1N0YXJ0X0lUKGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzJdLCAodWludDMyX3QpcERhdGEsICh1aW50MzJfdCkmaHRpbS0+SW5zdGFuY2UtPkNDUjIsIExlbmd0aCkgIT0gSEFMX09LKQogICAgICAgeworICAgICAgICAvKiBSZXR1cm4gZXJyb3Igc3RhdHVzICovCiAgICAgICAgIHJldHVybiBIQUxfRVJST1I7CiAgICAgICB9CiAgICAgICAvKiBFbmFibGUgdGhlIFRJTSBDYXB0dXJlL0NvbXBhcmUgMiBETUEgcmVxdWVzdCAqLwpAQCAtMTE3OCwxNSArMTM3NiwxNiBAQAogICAgIGNhc2UgVElNX0NIQU5ORUxfMzoKICAgICB7CiAgICAgICAvKiBTZXQgdGhlIERNQSBjb21wYXJlIGNhbGxiYWNrcyAqLwotICAgICAgaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDM10tPlhmZXJDcGx0Q2FsbGJhY2sgPSBUSU1fRE1BRGVsYXlQdWxzZUNwbHQ7CisgICAgICBodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MzXS0+WGZlckNwbHRDYWxsYmFjayA9IFRJTV9ETUFEZWxheVB1bHNlTkNwbHQ7CiAgICAgICBodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MzXS0+WGZlckhhbGZDcGx0Q2FsbGJhY2sgPSBUSU1fRE1BRGVsYXlQdWxzZUhhbGZDcGx0OwogCiAgICAgICAvKiBTZXQgdGhlIERNQSBlcnJvciBjYWxsYmFjayAqLwotICAgICAgaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDM10tPlhmZXJFcnJvckNhbGxiYWNrID0gVElNX0RNQUVycm9yIDsKKyAgICAgIGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzNdLT5YZmVyRXJyb3JDYWxsYmFjayA9IFRJTV9ETUFFcnJvckNDeE4gOwogCiAgICAgICAvKiBFbmFibGUgdGhlIERNQSBzdHJlYW0gKi8KICAgICAgIGlmIChIQUxfRE1BX1N0YXJ0X0lUKGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzNdLCAodWludDMyX3QpcERhdGEsICh1aW50MzJfdCkmaHRpbS0+SW5zdGFuY2UtPkNDUjMsIExlbmd0aCkgIT0gSEFMX09LKQogICAgICAgeworICAgICAgICAvKiBSZXR1cm4gZXJyb3Igc3RhdHVzICovCiAgICAgICAgIHJldHVybiBIQUxfRVJST1I7CiAgICAgICB9CiAgICAgICAvKiBFbmFibGUgdGhlIFRJTSBDYXB0dXJlL0NvbXBhcmUgMyBETUEgcmVxdWVzdCAqLwpAQCAtMTIwNSw4ICsxNDA0LDE1IEBACiAgIF9fSEFMX1RJTV9NT0VfRU5BQkxFKGh0aW0pOwogCiAgIC8qIEVuYWJsZSB0aGUgUGVyaXBoZXJhbCwgZXhjZXB0IGluIHRyaWdnZXIgbW9kZSB3aGVyZSBlbmFibGUgaXMgYXV0b21hdGljYWxseSBkb25lIHdpdGggdHJpZ2dlciAqLwotICB0bXBzbWNyID0gaHRpbS0+SW5zdGFuY2UtPlNNQ1IgJiBUSU1fU01DUl9TTVM7Ci0gIGlmICghSVNfVElNX1NMQVZFTU9ERV9UUklHR0VSX0VOQUJMRUQodG1wc21jcikpCisgIGlmIChJU19USU1fU0xBVkVfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKQorICB7CisgICAgdG1wc21jciA9IGh0aW0tPkluc3RhbmNlLT5TTUNSICYgVElNX1NNQ1JfU01TOworICAgIGlmICghSVNfVElNX1NMQVZFTU9ERV9UUklHR0VSX0VOQUJMRUQodG1wc21jcikpCisgICAgeworICAgICAgX19IQUxfVElNX0VOQUJMRShodGltKTsKKyAgICB9CisgIH0KKyAgZWxzZQogICB7CiAgICAgX19IQUxfVElNX0VOQUJMRShodGltKTsKICAgfQpAQCAtMTI3MCw4ICsxNDc2LDggQEAKICAgLyogRGlzYWJsZSB0aGUgUGVyaXBoZXJhbCAqLwogICBfX0hBTF9USU1fRElTQUJMRShodGltKTsKIAotICAvKiBDaGFuZ2UgdGhlIGh0aW0gc3RhdGUgKi8KLSAgaHRpbS0+U3RhdGUgPSBIQUxfVElNX1NUQVRFX1JFQURZOworICAvKiBTZXQgdGhlIFRJTSBjb21wbGVtZW50YXJ5IGNoYW5uZWwgc3RhdGUgKi8KKyAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgQ2hhbm5lbCwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKIAogICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCiAgIHJldHVybiBIQUxfT0s7CkBAIC0xMzAyLDggKzE1MDgsMTAgQEAKIC8qKgogICAqIEBicmllZiAgU3RhcnRzIHRoZSBUSU0gT25lIFB1bHNlIHNpZ25hbCBnZW5lcmF0aW9uIG9uIHRoZSBjb21wbGVtZW50YXJ5CiAgICogICAgICAgICBvdXRwdXQuCisgICogQG5vdGUgT3V0cHV0Q2hhbm5lbCBtdXN0IG1hdGNoIHRoZSBwdWxzZSBvdXRwdXQgY2hhbm5lbCBjaG9zZW4gd2hlbiBjYWxsaW5nIAorICAqICAgICAgIEByZWYgSEFMX1RJTV9PbmVQdWxzZV9Db25maWdDaGFubmVsKCkuIAogICAqIEBwYXJhbSAgaHRpbSBUSU0gT25lIFB1bHNlIGhhbmRsZQotICAqIEBwYXJhbSAgT3V0cHV0Q2hhbm5lbCBUSU0gQ2hhbm5lbCB0byBiZSBlbmFibGVkCisgICogQHBhcmFtICBPdXRwdXRDaGFubmVsIHB1bHNlIG91dHB1dCBjaGFubmVsIHRvIGVuYWJsZQogICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAgICogICAgICAgICAgICBAYXJnIFRJTV9DSEFOTkVMXzE6IFRJTSBDaGFubmVsIDEgc2VsZWN0ZWQKICAgKiAgICAgICAgICAgIEBhcmcgVElNX0NIQU5ORUxfMjogVElNIENoYW5uZWwgMiBzZWxlY3RlZApAQCAtMTMxMSwxMSArMTUxOSwzMyBAQAogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTUV4X09uZVB1bHNlTl9TdGFydChUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgdWludDMyX3QgT3V0cHV0Q2hhbm5lbCkKIHsKKyAgdWludDMyX3QgaW5wdXRfY2hhbm5lbCA9IChPdXRwdXRDaGFubmVsID09IFRJTV9DSEFOTkVMXzEpID8gVElNX0NIQU5ORUxfMiA6IFRJTV9DSEFOTkVMXzE7CisgIEhBTF9USU1fQ2hhbm5lbFN0YXRlVHlwZURlZiBjaGFubmVsXzFfc3RhdGUgPSBUSU1fQ0hBTk5FTF9TVEFURV9HRVQoaHRpbSwgVElNX0NIQU5ORUxfMSk7CisgIEhBTF9USU1fQ2hhbm5lbFN0YXRlVHlwZURlZiBjaGFubmVsXzJfc3RhdGUgPSBUSU1fQ0hBTk5FTF9TVEFURV9HRVQoaHRpbSwgVElNX0NIQU5ORUxfMik7CisgIEhBTF9USU1fQ2hhbm5lbFN0YXRlVHlwZURlZiBjb21wbGVtZW50YXJ5X2NoYW5uZWxfMV9zdGF0ZSA9IFRJTV9DSEFOTkVMX05fU1RBVEVfR0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEpOworICBIQUxfVElNX0NoYW5uZWxTdGF0ZVR5cGVEZWYgY29tcGxlbWVudGFyeV9jaGFubmVsXzJfc3RhdGUgPSBUSU1fQ0hBTk5FTF9OX1NUQVRFX0dFVChodGltLCBUSU1fQ0hBTk5FTF8yKTsKKwogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0NDWE5fSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UsIE91dHB1dENoYW5uZWwpKTsKIAotICAvKiBFbmFibGUgdGhlIGNvbXBsZW1lbnRhcnkgT25lIFB1bHNlIG91dHB1dCAqLworICAvKiBDaGVjayB0aGUgVElNIGNoYW5uZWxzIHN0YXRlICovCisgICBpZiAoKGNoYW5uZWxfMV9zdGF0ZSAhPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpCisgICAgICB8fCAoY2hhbm5lbF8yX3N0YXRlICE9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkKKyAgICAgIHx8IChjb21wbGVtZW50YXJ5X2NoYW5uZWxfMV9zdGF0ZSAhPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpCisgICAgICB8fCAoY29tcGxlbWVudGFyeV9jaGFubmVsXzJfc3RhdGUgIT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKSkKKyAgeworICAgIHJldHVybiBIQUxfRVJST1I7CisgIH0KKworICAvKiBTZXQgdGhlIFRJTSBjaGFubmVscyBzdGF0ZSAqLworICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpOworICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMiwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpOworICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8xLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSk7CisgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzIsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKTsKKworICAvKiBFbmFibGUgdGhlIGNvbXBsZW1lbnRhcnkgT25lIFB1bHNlIG91dHB1dCBjaGFubmVsIGFuZCB0aGUgSW5wdXQgQ2FwdHVyZSBjaGFubmVsICovCiAgIFRJTV9DQ3hOQ2hhbm5lbENtZChodGltLT5JbnN0YW5jZSwgT3V0cHV0Q2hhbm5lbCwgVElNX0NDeE5fRU5BQkxFKTsKKyAgVElNX0NDeENoYW5uZWxDbWQoaHRpbS0+SW5zdGFuY2UsIGlucHV0X2NoYW5uZWwsIFRJTV9DQ3hfRU5BQkxFKTsKIAogICAvKiBFbmFibGUgdGhlIE1haW4gT3V0cHV0ICovCiAgIF9fSEFMX1RJTV9NT0VfRU5BQkxFKGh0aW0pOwpAQCAtMTMyNyw4ICsxNTU3LDEwIEBACiAvKioKICAgKiBAYnJpZWYgIFN0b3BzIHRoZSBUSU0gT25lIFB1bHNlIHNpZ25hbCBnZW5lcmF0aW9uIG9uIHRoZSBjb21wbGVtZW50YXJ5CiAgICogICAgICAgICBvdXRwdXQuCisgICogQG5vdGUgT3V0cHV0Q2hhbm5lbCBtdXN0IG1hdGNoIHRoZSBwdWxzZSBvdXRwdXQgY2hhbm5lbCBjaG9zZW4gd2hlbiBjYWxsaW5nIAorICAqICAgICAgIEByZWYgSEFMX1RJTV9PbmVQdWxzZV9Db25maWdDaGFubmVsKCkuIAogICAqIEBwYXJhbSAgaHRpbSBUSU0gT25lIFB1bHNlIGhhbmRsZQotICAqIEBwYXJhbSAgT3V0cHV0Q2hhbm5lbCBUSU0gQ2hhbm5lbCB0byBiZSBkaXNhYmxlZAorICAqIEBwYXJhbSAgT3V0cHV0Q2hhbm5lbCBwdWxzZSBvdXRwdXQgY2hhbm5lbCB0byBkaXNhYmxlCiAgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAgKiAgICAgICAgICAgIEBhcmcgVElNX0NIQU5ORUxfMTogVElNIENoYW5uZWwgMSBzZWxlY3RlZAogICAqICAgICAgICAgICAgQGFyZyBUSU1fQ0hBTk5FTF8yOiBUSU0gQ2hhbm5lbCAyIHNlbGVjdGVkCkBAIC0xMzM2LDEyICsxNTY4LDE0IEBACiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNRXhfT25lUHVsc2VOX1N0b3AoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sIHVpbnQzMl90IE91dHB1dENoYW5uZWwpCiB7CisgIHVpbnQzMl90IGlucHV0X2NoYW5uZWwgPSAoT3V0cHV0Q2hhbm5lbCA9PSBUSU1fQ0hBTk5FTF8xKSA/IFRJTV9DSEFOTkVMXzIgOiBUSU1fQ0hBTk5FTF8xOwogCiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19USU1fQ0NYTl9JTlNUQU5DRShodGltLT5JbnN0YW5jZSwgT3V0cHV0Q2hhbm5lbCkpOwogCi0gIC8qIERpc2FibGUgdGhlIGNvbXBsZW1lbnRhcnkgT25lIFB1bHNlIG91dHB1dCAqLworICAvKiBEaXNhYmxlIHRoZSBjb21wbGVtZW50YXJ5IE9uZSBQdWxzZSBvdXRwdXQgY2hhbm5lbCBhbmQgdGhlIElucHV0IENhcHR1cmUgY2hhbm5lbCAqLwogICBUSU1fQ0N4TkNoYW5uZWxDbWQoaHRpbS0+SW5zdGFuY2UsIE91dHB1dENoYW5uZWwsIFRJTV9DQ3hOX0RJU0FCTEUpOworICBUSU1fQ0N4Q2hhbm5lbENtZChodGltLT5JbnN0YW5jZSwgaW5wdXRfY2hhbm5lbCwgVElNX0NDeF9ESVNBQkxFKTsKIAogICAvKiBEaXNhYmxlIHRoZSBNYWluIE91dHB1dCAqLwogICBfX0hBTF9USU1fTU9FX0RJU0FCTEUoaHRpbSk7CkBAIC0xMzQ5LDYgKzE1ODMsMTIgQEAKICAgLyogRGlzYWJsZSB0aGUgUGVyaXBoZXJhbCAqLwogICBfX0hBTF9USU1fRElTQUJMRShodGltKTsKIAorICAvKiBTZXQgdGhlIFRJTSAgY2hhbm5lbHMgc3RhdGUgKi8KKyAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8yLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8xLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8yLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworCiAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KICAgcmV0dXJuIEhBTF9PSzsKIH0KQEAgLTEzNTYsOCArMTU5NiwxMCBAQAogLyoqCiAgICogQGJyaWVmICBTdGFydHMgdGhlIFRJTSBPbmUgUHVsc2Ugc2lnbmFsIGdlbmVyYXRpb24gaW4gaW50ZXJydXB0IG1vZGUgb24gdGhlCiAgICogICAgICAgICBjb21wbGVtZW50YXJ5IGNoYW5uZWwuCisgICogQG5vdGUgT3V0cHV0Q2hhbm5lbCBtdXN0IG1hdGNoIHRoZSBwdWxzZSBvdXRwdXQgY2hhbm5lbCBjaG9zZW4gd2hlbiBjYWxsaW5nIAorICAqICAgICAgIEByZWYgSEFMX1RJTV9PbmVQdWxzZV9Db25maWdDaGFubmVsKCkuIAogICAqIEBwYXJhbSAgaHRpbSBUSU0gT25lIFB1bHNlIGhhbmRsZQotICAqIEBwYXJhbSAgT3V0cHV0Q2hhbm5lbCBUSU0gQ2hhbm5lbCB0byBiZSBlbmFibGVkCisgICogQHBhcmFtICBPdXRwdXRDaGFubmVsIHB1bHNlIG91dHB1dCBjaGFubmVsIHRvIGVuYWJsZQogICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAgICogICAgICAgICAgICBAYXJnIFRJTV9DSEFOTkVMXzE6IFRJTSBDaGFubmVsIDEgc2VsZWN0ZWQKICAgKiAgICAgICAgICAgIEBhcmcgVElNX0NIQU5ORUxfMjogVElNIENoYW5uZWwgMiBzZWxlY3RlZApAQCAtMTM2NSwxNyArMTYwNywzOSBAQAogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTUV4X09uZVB1bHNlTl9TdGFydF9JVChUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgdWludDMyX3QgT3V0cHV0Q2hhbm5lbCkKIHsKKyAgdWludDMyX3QgaW5wdXRfY2hhbm5lbCA9IChPdXRwdXRDaGFubmVsID09IFRJTV9DSEFOTkVMXzEpID8gVElNX0NIQU5ORUxfMiA6IFRJTV9DSEFOTkVMXzE7CisgIEhBTF9USU1fQ2hhbm5lbFN0YXRlVHlwZURlZiBjaGFubmVsXzFfc3RhdGUgPSBUSU1fQ0hBTk5FTF9TVEFURV9HRVQoaHRpbSwgVElNX0NIQU5ORUxfMSk7CisgIEhBTF9USU1fQ2hhbm5lbFN0YXRlVHlwZURlZiBjaGFubmVsXzJfc3RhdGUgPSBUSU1fQ0hBTk5FTF9TVEFURV9HRVQoaHRpbSwgVElNX0NIQU5ORUxfMik7CisgIEhBTF9USU1fQ2hhbm5lbFN0YXRlVHlwZURlZiBjb21wbGVtZW50YXJ5X2NoYW5uZWxfMV9zdGF0ZSA9IFRJTV9DSEFOTkVMX05fU1RBVEVfR0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEpOworICBIQUxfVElNX0NoYW5uZWxTdGF0ZVR5cGVEZWYgY29tcGxlbWVudGFyeV9jaGFubmVsXzJfc3RhdGUgPSBUSU1fQ0hBTk5FTF9OX1NUQVRFX0dFVChodGltLCBUSU1fQ0hBTk5FTF8yKTsKKwogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0NDWE5fSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UsIE91dHB1dENoYW5uZWwpKTsKIAorICAvKiBDaGVjayB0aGUgVElNIGNoYW5uZWxzIHN0YXRlICovCisgICBpZiAoKGNoYW5uZWxfMV9zdGF0ZSAhPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpCisgICAgICB8fCAoY2hhbm5lbF8yX3N0YXRlICE9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkKKyAgICAgIHx8IChjb21wbGVtZW50YXJ5X2NoYW5uZWxfMV9zdGF0ZSAhPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpCisgICAgICB8fCAoY29tcGxlbWVudGFyeV9jaGFubmVsXzJfc3RhdGUgIT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKSkKKyAgeworICAgIHJldHVybiBIQUxfRVJST1I7CisgIH0KKworICAvKiBTZXQgdGhlIFRJTSBjaGFubmVscyBzdGF0ZSAqLworICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpOworICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMiwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpOworICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8xLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSk7CisgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzIsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKTsKKwogICAvKiBFbmFibGUgdGhlIFRJTSBDYXB0dXJlL0NvbXBhcmUgMSBpbnRlcnJ1cHQgKi8KICAgX19IQUxfVElNX0VOQUJMRV9JVChodGltLCBUSU1fSVRfQ0MxKTsKIAogICAvKiBFbmFibGUgdGhlIFRJTSBDYXB0dXJlL0NvbXBhcmUgMiBpbnRlcnJ1cHQgKi8KICAgX19IQUxfVElNX0VOQUJMRV9JVChodGltLCBUSU1fSVRfQ0MyKTsKIAotICAvKiBFbmFibGUgdGhlIGNvbXBsZW1lbnRhcnkgT25lIFB1bHNlIG91dHB1dCAqLworICAvKiBFbmFibGUgdGhlIGNvbXBsZW1lbnRhcnkgT25lIFB1bHNlIG91dHB1dCBjaGFubmVsIGFuZCB0aGUgSW5wdXQgQ2FwdHVyZSBjaGFubmVsICovCiAgIFRJTV9DQ3hOQ2hhbm5lbENtZChodGltLT5JbnN0YW5jZSwgT3V0cHV0Q2hhbm5lbCwgVElNX0NDeE5fRU5BQkxFKTsKKyAgVElNX0NDeENoYW5uZWxDbWQoaHRpbS0+SW5zdGFuY2UsIGlucHV0X2NoYW5uZWwsIFRJTV9DQ3hfRU5BQkxFKTsKIAogICAvKiBFbmFibGUgdGhlIE1haW4gT3V0cHV0ICovCiAgIF9fSEFMX1RJTV9NT0VfRU5BQkxFKGh0aW0pOwpAQCAtMTM4Nyw4ICsxNjUxLDEwIEBACiAvKioKICAgKiBAYnJpZWYgIFN0b3BzIHRoZSBUSU0gT25lIFB1bHNlIHNpZ25hbCBnZW5lcmF0aW9uIGluIGludGVycnVwdCBtb2RlIG9uIHRoZQogICAqICAgICAgICAgY29tcGxlbWVudGFyeSBjaGFubmVsLgorICAqIEBub3RlIE91dHB1dENoYW5uZWwgbXVzdCBtYXRjaCB0aGUgcHVsc2Ugb3V0cHV0IGNoYW5uZWwgY2hvc2VuIHdoZW4gY2FsbGluZyAKKyAgKiAgICAgICBAcmVmIEhBTF9USU1fT25lUHVsc2VfQ29uZmlnQ2hhbm5lbCgpLiAKICAgKiBAcGFyYW0gIGh0aW0gVElNIE9uZSBQdWxzZSBoYW5kbGUKLSAgKiBAcGFyYW0gIE91dHB1dENoYW5uZWwgVElNIENoYW5uZWwgdG8gYmUgZGlzYWJsZWQKKyAgKiBAcGFyYW0gIE91dHB1dENoYW5uZWwgcHVsc2Ugb3V0cHV0IGNoYW5uZWwgdG8gZGlzYWJsZQogICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAgICogICAgICAgICAgICBAYXJnIFRJTV9DSEFOTkVMXzE6IFRJTSBDaGFubmVsIDEgc2VsZWN0ZWQKICAgKiAgICAgICAgICAgIEBhcmcgVElNX0NIQU5ORUxfMjogVElNIENoYW5uZWwgMiBzZWxlY3RlZApAQCAtMTM5Niw2ICsxNjYyLDggQEAKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1FeF9PbmVQdWxzZU5fU3RvcF9JVChUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgdWludDMyX3QgT3V0cHV0Q2hhbm5lbCkKIHsKKyAgdWludDMyX3QgaW5wdXRfY2hhbm5lbCA9IChPdXRwdXRDaGFubmVsID09IFRJTV9DSEFOTkVMXzEpID8gVElNX0NIQU5ORUxfMiA6IFRJTV9DSEFOTkVMXzE7CisKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9DQ1hOX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlLCBPdXRwdXRDaGFubmVsKSk7CiAKQEAgLTE0MDUsOCArMTY3Myw5IEBACiAgIC8qIERpc2FibGUgdGhlIFRJTSBDYXB0dXJlL0NvbXBhcmUgMiBpbnRlcnJ1cHQgKi8KICAgX19IQUxfVElNX0RJU0FCTEVfSVQoaHRpbSwgVElNX0lUX0NDMik7CiAKLSAgLyogRGlzYWJsZSB0aGUgY29tcGxlbWVudGFyeSBPbmUgUHVsc2Ugb3V0cHV0ICovCisgIC8qIERpc2FibGUgdGhlIGNvbXBsZW1lbnRhcnkgT25lIFB1bHNlIG91dHB1dCBjaGFubmVsIGFuZCB0aGUgSW5wdXQgQ2FwdHVyZSBjaGFubmVsICovCiAgIFRJTV9DQ3hOQ2hhbm5lbENtZChodGltLT5JbnN0YW5jZSwgT3V0cHV0Q2hhbm5lbCwgVElNX0NDeE5fRElTQUJMRSk7CisgIFRJTV9DQ3hDaGFubmVsQ21kKGh0aW0tPkluc3RhbmNlLCBpbnB1dF9jaGFubmVsLCBUSU1fQ0N4X0RJU0FCTEUpOwogCiAgIC8qIERpc2FibGUgdGhlIE1haW4gT3V0cHV0ICovCiAgIF9fSEFMX1RJTV9NT0VfRElTQUJMRShodGltKTsKQEAgLTE0MTQsNiArMTY4MywxMiBAQAogICAvKiBEaXNhYmxlIHRoZSBQZXJpcGhlcmFsICovCiAgIF9fSEFMX1RJTV9ESVNBQkxFKGh0aW0pOwogCisgIC8qIFNldCB0aGUgVElNICBjaGFubmVscyBzdGF0ZSAqLworICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzIsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzIsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisKICAgLyogUmV0dXJuIGZ1bmN0aW9uIHN0YXR1cyAqLwogICByZXR1cm4gSEFMX09LOwogfQpAQCAtMTc3MCw3ICsyMDQ1LDcgQEAKICAgLyogQ2hlY2sgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfVElNX1JFTUFQKGh0aW0tPkluc3RhbmNlLCBSZW1hcCkpOwogCi0jaWYgZGVmaW5lZChMUFRJTV9PUl9USU0xX0lUUjJfUk1QKSAmJiBkZWZpbmVkKExQVElNX09SX1RJTTVfSVRSMV9STVApICYmIGRlZmluZWQoTFBUSU1fT1JfVElNNV9JVFIxX1JNUCkKKyNpZiBkZWZpbmVkKExQVElNX09SX1RJTTFfSVRSMl9STVApICYmIGRlZmluZWQoTFBUSU1fT1JfVElNNV9JVFIxX1JNUCkgJiYgZGVmaW5lZChMUFRJTV9PUl9USU05X0lUUjFfUk1QKQogICBpZiAoKFJlbWFwICYgTFBUSU1fUkVNQVBfTUFTSykgPT0gTFBUSU1fUkVNQVBfTUFTSykKICAgewogICAgIC8qIENvbm5lY3QgVElNeCBpbnRlcm5hbCB0cmlnZ2VyIHRvIExQVElNMSBvdXRwdXQgKi8KQEAgLTE3ODcsNyArMjA2Miw3IEBACiAjZWxzZQogICAvKiBTZXQgdGhlIFRpbWVyIHJlbWFwcGluZyBjb25maWd1cmF0aW9uICovCiAgIFdSSVRFX1JFRyhodGltLT5JbnN0YW5jZS0+T1IsIFJlbWFwKTsKLSNlbmRpZiAvKiBMUFRJTV9PUl9USU0xX0lUUjJfUk1QICYmICBMUFRJTV9PUl9USU01X0lUUjFfUk1QICYmIExQVElNX09SX1RJTTVfSVRSMV9STVAgKi8KKyNlbmRpZiAvKiBMUFRJTV9PUl9USU0xX0lUUjJfUk1QICYmICBMUFRJTV9PUl9USU01X0lUUjFfUk1QICYmIExQVElNX09SX1RJTTlfSVRSMV9STVAgKi8KIAogICBfX0hBTF9VTkxPQ0soaHRpbSk7CiAKQEAgLTE4ODcsNiArMjE2MiwyNyBAQAogfQogCiAvKioKKyAgKiBAYnJpZWYgIFJldHVybiBhY3R1YWwgc3RhdGUgb2YgdGhlIFRJTSBjb21wbGVtZW50YXJ5IGNoYW5uZWwuCisgICogQHBhcmFtICBodGltIFRJTSBoYW5kbGUKKyAgKiBAcGFyYW0gIENoYW5uZWxOIFRJTSBDb21wbGVtZW50YXJ5IGNoYW5uZWwKKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorICAqICAgICAgICAgICAgQGFyZyBUSU1fQ0hBTk5FTF8xOiBUSU0gQ2hhbm5lbCAxCisgICogICAgICAgICAgICBAYXJnIFRJTV9DSEFOTkVMXzI6IFRJTSBDaGFubmVsIDIKKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0NIQU5ORUxfMzogVElNIENoYW5uZWwgMworICAqIEByZXR2YWwgVElNIENvbXBsZW1lbnRhcnkgY2hhbm5lbCBzdGF0ZQorICAqLworSEFMX1RJTV9DaGFubmVsU3RhdGVUeXBlRGVmIEhBTF9USU1FeF9HZXRDaGFubmVsTlN0YXRlKFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCAgdWludDMyX3QgQ2hhbm5lbE4pCit7CisgIEhBTF9USU1fQ2hhbm5lbFN0YXRlVHlwZURlZiBjaGFubmVsX3N0YXRlOworCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCisgIGFzc2VydF9wYXJhbShJU19USU1fQ0NYTl9JTlNUQU5DRShodGltLT5JbnN0YW5jZSwgQ2hhbm5lbE4pKTsKKworICBjaGFubmVsX3N0YXRlID0gVElNX0NIQU5ORUxfTl9TVEFURV9HRVQoaHRpbSwgQ2hhbm5lbE4pOworCisgIHJldHVybiBjaGFubmVsX3N0YXRlOworfQorLyoqCiAgICogQH0KICAgKi8KIApAQCAtMTkzOSw2ICsyMjM1LDEwMyBAQAogCiAKIC8qKgorICAqIEBicmllZiAgVElNIERNQSBEZWxheSBQdWxzZSBjb21wbGV0ZSBjYWxsYmFjayAoY29tcGxlbWVudGFyeSBjaGFubmVsKS4KKyAgKiBAcGFyYW0gIGhkbWEgcG9pbnRlciB0byBETUEgaGFuZGxlLgorICAqIEByZXR2YWwgTm9uZQorICAqLworc3RhdGljIHZvaWQgVElNX0RNQURlbGF5UHVsc2VOQ3BsdChETUFfSGFuZGxlVHlwZURlZiAqaGRtYSkKK3sKKyAgVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0gPSAoVElNX0hhbmRsZVR5cGVEZWYgKikoKERNQV9IYW5kbGVUeXBlRGVmICopaGRtYSktPlBhcmVudDsKKworICBpZiAoaGRtYSA9PSBodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MxXSkKKyAgeworICAgIGh0aW0tPkNoYW5uZWwgPSBIQUxfVElNX0FDVElWRV9DSEFOTkVMXzE7CisKKyAgICBpZiAoaGRtYS0+SW5pdC5Nb2RlID09IERNQV9OT1JNQUwpCisgICAgeworICAgICAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgICB9CisgIH0KKyAgZWxzZSBpZiAoaGRtYSA9PSBodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MyXSkKKyAgeworICAgIGh0aW0tPkNoYW5uZWwgPSBIQUxfVElNX0FDVElWRV9DSEFOTkVMXzI7CisKKyAgICBpZiAoaGRtYS0+SW5pdC5Nb2RlID09IERNQV9OT1JNQUwpCisgICAgeworICAgICAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMiwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgICB9CisgIH0KKyAgZWxzZSBpZiAoaGRtYSA9PSBodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MzXSkKKyAgeworICAgIGh0aW0tPkNoYW5uZWwgPSBIQUxfVElNX0FDVElWRV9DSEFOTkVMXzM7CisKKyAgICBpZiAoaGRtYS0+SW5pdC5Nb2RlID09IERNQV9OT1JNQUwpCisgICAgeworICAgICAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMywgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgICB9CisgIH0KKyAgZWxzZSBpZiAoaGRtYSA9PSBodGltLT5oZG1hW1RJTV9ETUFfSURfQ0M0XSkKKyAgeworICAgIGh0aW0tPkNoYW5uZWwgPSBIQUxfVElNX0FDVElWRV9DSEFOTkVMXzQ7CisKKyAgICBpZiAoaGRtYS0+SW5pdC5Nb2RlID09IERNQV9OT1JNQUwpCisgICAgeworICAgICAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfNCwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgICB9CisgIH0KKyAgZWxzZQorICB7CisgICAgLyogbm90aGluZyB0byBkbyAqLworICB9CisKKyNpZiAoVVNFX0hBTF9USU1fUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCisgIGh0aW0tPlBXTV9QdWxzZUZpbmlzaGVkQ2FsbGJhY2soaHRpbSk7CisjZWxzZQorICBIQUxfVElNX1BXTV9QdWxzZUZpbmlzaGVkQ2FsbGJhY2soaHRpbSk7CisjZW5kaWYgLyogVVNFX0hBTF9USU1fUkVHSVNURVJfQ0FMTEJBQ0tTICovCisKKyAgaHRpbS0+Q2hhbm5lbCA9IEhBTF9USU1fQUNUSVZFX0NIQU5ORUxfQ0xFQVJFRDsKK30KKworLyoqCisgICogQGJyaWVmICBUSU0gRE1BIGVycm9yIGNhbGxiYWNrIChjb21wbGVtZW50YXJ5IGNoYW5uZWwpCisgICogQHBhcmFtICBoZG1hIHBvaW50ZXIgdG8gRE1BIGhhbmRsZS4KKyAgKiBAcmV0dmFsIE5vbmUKKyAgKi8KK3N0YXRpYyB2b2lkIFRJTV9ETUFFcnJvckNDeE4oRE1BX0hhbmRsZVR5cGVEZWYgKmhkbWEpCit7CisgIFRJTV9IYW5kbGVUeXBlRGVmICpodGltID0gKFRJTV9IYW5kbGVUeXBlRGVmICopKChETUFfSGFuZGxlVHlwZURlZiAqKWhkbWEpLT5QYXJlbnQ7CisKKyAgaWYgKGhkbWEgPT0gaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDMV0pCisgIHsKKyAgICBodGltLT5DaGFubmVsID0gSEFMX1RJTV9BQ1RJVkVfQ0hBTk5FTF8xOworICAgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgIH0KKyAgZWxzZSBpZiAoaGRtYSA9PSBodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MyXSkKKyAgeworICAgIGh0aW0tPkNoYW5uZWwgPSBIQUxfVElNX0FDVElWRV9DSEFOTkVMXzI7CisgICAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMiwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgfQorICBlbHNlIGlmIChoZG1hID09IGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzNdKQorICB7CisgICAgaHRpbS0+Q2hhbm5lbCA9IEhBTF9USU1fQUNUSVZFX0NIQU5ORUxfMzsKKyAgICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8zLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworICB9CisgIGVsc2UKKyAgeworICAgIC8qIG5vdGhpbmcgdG8gZG8gKi8KKyAgfQorCisjaWYgKFVTRV9IQUxfVElNX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxKQorICBodGltLT5FcnJvckNhbGxiYWNrKGh0aW0pOworI2Vsc2UKKyAgSEFMX1RJTV9FcnJvckNhbGxiYWNrKGh0aW0pOworI2VuZGlmIC8qIFVTRV9IQUxfVElNX1JFR0lTVEVSX0NBTExCQUNLUyAqLworCisgIGh0aW0tPkNoYW5uZWwgPSBIQUxfVElNX0FDVElWRV9DSEFOTkVMX0NMRUFSRUQ7Cit9CisKKy8qKgogICAqIEBicmllZiAgRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgVElNIENhcHR1cmUgQ29tcGFyZSBDaGFubmVsIHhOLgogICAqIEBwYXJhbSAgVElNeCB0byBzZWxlY3QgdGhlIFRJTSBwZXJpcGhlcmFsCiAgICogQHBhcmFtICBDaGFubmVsIHNwZWNpZmllcyB0aGUgVElNIENoYW5uZWwKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmY0eHhfaGFsX3RpbWViYXNlX3J0Y19hbGFybV90ZW1wbGF0ZS5jIGIvU3JjL3N0bTMyZjR4eF9oYWxfdGltZWJhc2VfcnRjX2FsYXJtX3RlbXBsYXRlLmMKaW5kZXggOGUxOTdhMS4uZGRkNzhhNSAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZjR4eF9oYWxfdGltZWJhc2VfcnRjX2FsYXJtX3RlbXBsYXRlLmMKKysrIGIvU3JjL3N0bTMyZjR4eF9oYWxfdGltZWJhc2VfcnRjX2FsYXJtX3RlbXBsYXRlLmMKQEAgLTkyLDEyICs5MiwxMyBAQAogICAqIEBwYXJhbSAgVGlja1ByaW9yaXR5IFRpY2sgaW50ZXJydXB0IHByaW9yaXR5LgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0luaXRUaWNrICh1aW50MzJfdCBUaWNrUHJpb3JpdHkpCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfSW5pdFRpY2sodWludDMyX3QgVGlja1ByaW9yaXR5KQogewogICBfX0lPIHVpbnQzMl90IGNvdW50ZXIgPSAwVTsKIAogICBSQ0NfT3NjSW5pdFR5cGVEZWYgICAgICAgIFJDQ19Pc2NJbml0U3RydWN0OwogICBSQ0NfUGVyaXBoQ0xLSW5pdFR5cGVEZWYgIFBlcmlwaENsa0luaXRTdHJ1Y3Q7CisgIEhBTF9TdGF0dXNUeXBlRGVmICAgICBzdGF0dXM7CiAKICNpZmRlZiBSVENfQ0xPQ0tfU09VUkNFX0xTRQogICAvKiBDb25maWd1ZSBMU0UgYXMgUlRDIGNsb2NrIHNvdWNyZSAqLwpAQCAtMTIyLDkyICsxMjMsMTEyIEBACiAjZXJyb3IgUGxlYXNlIHNlbGVjdCB0aGUgUlRDIENsb2NrIHNvdXJjZQogI2VuZGlmIC8qIFJUQ19DTE9DS19TT1VSQ0VfTFNFICovCiAKLSAgaWYoSEFMX1JDQ19Pc2NDb25maWcoJlJDQ19Pc2NJbml0U3RydWN0KSA9PSBIQUxfT0spCisgIHN0YXR1cyA9IEhBTF9SQ0NfT3NjQ29uZmlnKCZSQ0NfT3NjSW5pdFN0cnVjdCk7CisgIGlmIChzdGF0dXMgPT0gSEFMX09LKQogICB7CiAgICAgUGVyaXBoQ2xrSW5pdFN0cnVjdC5QZXJpcGhDbG9ja1NlbGVjdGlvbiA9IFJDQ19QRVJJUEhDTEtfUlRDOwotICAgIGlmKEhBTF9SQ0NFeF9QZXJpcGhDTEtDb25maWcoJlBlcmlwaENsa0luaXRTdHJ1Y3QpID09IEhBTF9PSykKKyAgICBzdGF0dXMgPSBIQUxfUkNDRXhfUGVyaXBoQ0xLQ29uZmlnKCZQZXJpcGhDbGtJbml0U3RydWN0KTsKKyAgfQorICBpZiAoc3RhdHVzID09IEhBTF9PSykKKyAgeworICAgIC8qIEVuYWJsZSBSVEMgQ2xvY2sgKi8KKyAgICBfX0hBTF9SQ0NfUlRDX0VOQUJMRSgpOworICAgIC8qIFRoZSB0aW1lIGJhc2Ugc2hvdWxkIGJlIDFtcworICAgICAgIFRpbWUgYmFzZSA9ICgoUlRDX0FTWU5DSF9QUkVESVYgKyAxKSAqIChSVENfU1lOQ0hfUFJFRElWICsgMSkpIC8gUlRDX0NMT0NLCisgICAgICAgSFNFIGFzIFJUQyBjbG9jaworICAgICAgICAgVGltZSBiYXNlID0gKCg5OSArIDEpICogKDkgKyAxKSkgLyAxTUh6CisgICAgICAgICAgICAgICAgICAgPSAxbXMKKyAgICAgICBMU0UgYXMgUlRDIGNsb2NrCisgICAgICAgICBUaW1lIGJhc2UgPSAoKDMxICsgMSkgKiAoMCArIDEpKSAvIDMyLjc2OEtIegorICAgICAgICAgICAgICAgICAgID0gfjFtcworICAgICAgIExTSSBhcyBSVEMgY2xvY2sKKyAgICAgICAgIFRpbWUgYmFzZSA9ICgoMzEgKyAxKSAqICgwICsgMSkpIC8gMzJLSHoKKyAgICAgICAgICAgICAgICAgICA9IDFtcworICAgICovCisgICAgaFJUQ19IYW5kbGUuSW5zdGFuY2UgPSBSVEM7CisgICAgaFJUQ19IYW5kbGUuSW5pdC5Ib3VyRm9ybWF0ID0gUlRDX0hPVVJGT1JNQVRfMjQ7CisgICAgaFJUQ19IYW5kbGUuSW5pdC5Bc3luY2hQcmVkaXYgPSBSVENfQVNZTkNIX1BSRURJVjsKKyAgICBoUlRDX0hhbmRsZS5Jbml0LlN5bmNoUHJlZGl2ID0gUlRDX1NZTkNIX1BSRURJVjsKKyAgICBoUlRDX0hhbmRsZS5Jbml0Lk91dFB1dCA9IFJUQ19PVVRQVVRfRElTQUJMRTsKKyAgICBoUlRDX0hhbmRsZS5Jbml0Lk91dFB1dFBvbGFyaXR5ID0gUlRDX09VVFBVVF9QT0xBUklUWV9ISUdIOworICAgIGhSVENfSGFuZGxlLkluaXQuT3V0UHV0VHlwZSA9IFJUQ19PVVRQVVRfVFlQRV9PUEVORFJBSU47CisgICAgc3RhdHVzID0gSEFMX1JUQ19Jbml0KCZoUlRDX0hhbmRsZSk7CisgIH0KKyAgaWYgKHN0YXR1cyA9PSBIQUxfT0spCisgIHsKKyAgICAvKiBEaXNhYmxlIHRoZSB3cml0ZSBwcm90ZWN0aW9uIGZvciBSVEMgcmVnaXN0ZXJzICovCisgICAgX19IQUxfUlRDX1dSSVRFUFJPVEVDVElPTl9ESVNBQkxFKCZoUlRDX0hhbmRsZSk7CisKKyAgICAvKiBEaXNhYmxlIHRoZSBBbGFybSBBIGludGVycnVwdCAqLworICAgIF9fSEFMX1JUQ19BTEFSTUFfRElTQUJMRSgmaFJUQ19IYW5kbGUpOworCisgICAgLyogQ2xlYXIgZmxhZyBhbGFybSBBICovCisgICAgX19IQUxfUlRDX0FMQVJNX0NMRUFSX0ZMQUcoJmhSVENfSGFuZGxlLCBSVENfRkxBR19BTFJBRik7CisKKyAgICBjb3VudGVyID0gMFU7CisgICAgLyogV2FpdCB0aWxsIFJUQyBBTFJBV0YgZmxhZyBpcyBzZXQgYW5kIGlmIFRpbWUgb3V0IGlzIHJlYWNoZWQgZXhpdCAqLworICAgIHdoaWxlIChfX0hBTF9SVENfQUxBUk1fR0VUX0ZMQUcoJmhSVENfSGFuZGxlLCBSVENfRkxBR19BTFJBV0YpID09IFJFU0VUKQogICAgIHsKLSAgICAgIC8qIEVuYWJsZSBSVEMgQ2xvY2sgKi8KLSAgICAgIF9fSEFMX1JDQ19SVENfRU5BQkxFKCk7Ci0gICAgICAvKiBUaGUgdGltZSBiYXNlIHNob3VsZCBiZSAxbXMKLSAgICAgICAgIFRpbWUgYmFzZSA9ICgoUlRDX0FTWU5DSF9QUkVESVYgKyAxKSAqIChSVENfU1lOQ0hfUFJFRElWICsgMSkpIC8gUlRDX0NMT0NLIAotICAgICAgICAgSFNFIGFzIFJUQyBjbG9jayAKLSAgICAgICAgICAgVGltZSBiYXNlID0gKCg5OSArIDEpICogKDkgKyAxKSkgLyAxTUh6Ci0gICAgICAgICAgICAgICAgICAgICA9IDFtcwotICAgICAgICAgTFNFIGFzIFJUQyBjbG9jayAKLSAgICAgICAgICAgVGltZSBiYXNlID0gKCgzMSArIDEpICogKDAgKyAxKSkgLyAzMi43NjhLSHoKLSAgICAgICAgICAgICAgICAgICAgID0gfjFtcwotICAgICAgICAgTFNJIGFzIFJUQyBjbG9jayAKLSAgICAgICAgICAgVGltZSBiYXNlID0gKCgzMSArIDEpICogKDAgKyAxKSkgLyAzMktIegotICAgICAgICAgICAgICAgICAgICAgPSAxbXMKLSAgICAgICovCi0gICAgICBoUlRDX0hhbmRsZS5JbnN0YW5jZSA9IFJUQzsKLSAgICAgIGhSVENfSGFuZGxlLkluaXQuSG91ckZvcm1hdCA9IFJUQ19IT1VSRk9STUFUXzI0OwotICAgICAgaFJUQ19IYW5kbGUuSW5pdC5Bc3luY2hQcmVkaXYgPSBSVENfQVNZTkNIX1BSRURJVjsKLSAgICAgIGhSVENfSGFuZGxlLkluaXQuU3luY2hQcmVkaXYgPSBSVENfU1lOQ0hfUFJFRElWOwotICAgICAgaFJUQ19IYW5kbGUuSW5pdC5PdXRQdXQgPSBSVENfT1VUUFVUX0RJU0FCTEU7Ci0gICAgICBoUlRDX0hhbmRsZS5Jbml0Lk91dFB1dFBvbGFyaXR5ID0gUlRDX09VVFBVVF9QT0xBUklUWV9ISUdIOwotICAgICAgaFJUQ19IYW5kbGUuSW5pdC5PdXRQdXRUeXBlID0gUlRDX09VVFBVVF9UWVBFX09QRU5EUkFJTjsKLSAgICAgIEhBTF9SVENfSW5pdCgmaFJUQ19IYW5kbGUpOwotCi0gICAgICAvKiBEaXNhYmxlIHRoZSB3cml0ZSBwcm90ZWN0aW9uIGZvciBSVEMgcmVnaXN0ZXJzICovCi0gICAgICBfX0hBTF9SVENfV1JJVEVQUk9URUNUSU9OX0RJU0FCTEUoJmhSVENfSGFuZGxlKTsKLQotICAgICAgLyogRGlzYWJsZSB0aGUgQWxhcm0gQSBpbnRlcnJ1cHQgKi8KLSAgICAgIF9fSEFMX1JUQ19BTEFSTUFfRElTQUJMRSgmaFJUQ19IYW5kbGUpOwotCi0gICAgICAvKiBDbGVhciBmbGFnIGFsYXJtIEEgKi8KLSAgICAgIF9fSEFMX1JUQ19BTEFSTV9DTEVBUl9GTEFHKCZoUlRDX0hhbmRsZSwgUlRDX0ZMQUdfQUxSQUYpOwotCi0gICAgICBjb3VudGVyID0gMFU7Ci0gICAgICAvKiBXYWl0IHRpbGwgUlRDIEFMUkFXRiBmbGFnIGlzIHNldCBhbmQgaWYgVGltZSBvdXQgaXMgcmVhY2hlZCBleGl0ICovCi0gICAgICB3aGlsZShfX0hBTF9SVENfQUxBUk1fR0VUX0ZMQUcoJmhSVENfSGFuZGxlLCBSVENfRkxBR19BTFJBV0YpID09IFJFU0VUKQorICAgICAgaWYgKGNvdW50ZXIrKyA9PSAoU3lzdGVtQ29yZUNsb2NrIC8gNDhVKSkgLyogVGltZW91dCA9IH4gMXMgKi8KICAgICAgIHsKLSAgICAgICAgaWYoY291bnRlcisrID09IChTeXN0ZW1Db3JlQ2xvY2sgLzQ4VSkpIC8qIFRpbWVvdXQgPSB+IDFzICovCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gSEFMX0VSUk9SOwotICAgICAgICB9CisgICAgICAgIHN0YXR1cyA9ICBIQUxfRVJST1I7CiAgICAgICB9Ci0KLSAgICAgIGhSVENfSGFuZGxlLkluc3RhbmNlLT5BTFJNQVIgPSAodWludDMyX3QpMHgwMVU7Ci0KLSAgICAgIC8qIENvbmZpZ3VyZSB0aGUgQWxhcm0gc3RhdGU6IEVuYWJsZSBBbGFybSAqLwotICAgICAgX19IQUxfUlRDX0FMQVJNQV9FTkFCTEUoJmhSVENfSGFuZGxlKTsKLSAgICAgIC8qIENvbmZpZ3VyZSB0aGUgQWxhcm0gaW50ZXJydXB0ICovCi0gICAgICBfX0hBTF9SVENfQUxBUk1fRU5BQkxFX0lUKCZoUlRDX0hhbmRsZSwgUlRDX0lUX0FMUkEpOwotCi0gICAgICAvKiBSVEMgQWxhcm0gSW50ZXJydXB0IENvbmZpZ3VyYXRpb246IEVYVEkgY29uZmlndXJhdGlvbiAqLwotICAgICAgX19IQUxfUlRDX0FMQVJNX0VYVElfRU5BQkxFX0lUKCk7Ci0gICAgICBfX0hBTF9SVENfQUxBUk1fRVhUSV9FTkFCTEVfUklTSU5HX0VER0UoKTsKLQotICAgICAgLyogQ2hlY2sgaWYgdGhlIEluaXRpYWxpemF0aW9uIG1vZGUgaXMgc2V0ICovCi0gICAgICBpZigoaFJUQ19IYW5kbGUuSW5zdGFuY2UtPklTUiAmIFJUQ19JU1JfSU5JVEYpID09ICh1aW50MzJfdClSRVNFVCkKLSAgICAgIHsKLSAgICAgICAgLyogU2V0IHRoZSBJbml0aWFsaXphdGlvbiBtb2RlICovCi0gICAgICAgIGhSVENfSGFuZGxlLkluc3RhbmNlLT5JU1IgPSAodWludDMyX3QpUlRDX0lOSVRfTUFTSzsKLSAgICAgICAgY291bnRlciA9IDBVOwotICAgICAgICB3aGlsZSgoaFJUQ19IYW5kbGUuSW5zdGFuY2UtPklTUiAmIFJUQ19JU1JfSU5JVEYpID09ICh1aW50MzJfdClSRVNFVCkKLSAgICAgICAgewotICAgICAgICAgIGlmKGNvdW50ZXIrKyA9PSAoU3lzdGVtQ29yZUNsb2NrIC80OFUpKSAvKiBUaW1lb3V0ID0gfiAxcyAqLwotICAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBIQUxfRVJST1I7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBoUlRDX0hhbmRsZS5JbnN0YW5jZS0+RFIgPSAwVTsKLSAgICAgIGhSVENfSGFuZGxlLkluc3RhbmNlLT5UUiA9IDBVOwotCi0gICAgICBoUlRDX0hhbmRsZS5JbnN0YW5jZS0+SVNSICY9ICh1aW50MzJfdCl+UlRDX0lTUl9JTklUOwotCi0gICAgICAvKiBFbmFibGUgdGhlIHdyaXRlIHByb3RlY3Rpb24gZm9yIFJUQyByZWdpc3RlcnMgKi8KLSAgICAgIF9fSEFMX1JUQ19XUklURVBST1RFQ1RJT05fRU5BQkxFKCZoUlRDX0hhbmRsZSk7Ci0KLSAgICAgIEhBTF9OVklDX1NldFByaW9yaXR5KFJUQ19BbGFybV9JUlFuLCBUaWNrUHJpb3JpdHksIDBVKTsKLSAgICAgIEhBTF9OVklDX0VuYWJsZUlSUShSVENfQWxhcm1fSVJRbik7Ci0gICAgICByZXR1cm4gSEFMX09LOwogICAgIH0KICAgfQotICByZXR1cm4gSEFMX0VSUk9SOworICBpZiAoc3RhdHVzID09IEhBTF9PSykKKyAgeworICAgIGhSVENfSGFuZGxlLkluc3RhbmNlLT5BTFJNQVIgPSAodWludDMyX3QpMHgwMVU7CisKKyAgICAvKiBDb25maWd1cmUgdGhlIEFsYXJtIHN0YXRlOiBFbmFibGUgQWxhcm0gKi8KKyAgICBfX0hBTF9SVENfQUxBUk1BX0VOQUJMRSgmaFJUQ19IYW5kbGUpOworICAgIC8qIENvbmZpZ3VyZSB0aGUgQWxhcm0gaW50ZXJydXB0ICovCisgICAgX19IQUxfUlRDX0FMQVJNX0VOQUJMRV9JVCgmaFJUQ19IYW5kbGUsIFJUQ19JVF9BTFJBKTsKKworICAgIC8qIFJUQyBBbGFybSBJbnRlcnJ1cHQgQ29uZmlndXJhdGlvbjogRVhUSSBjb25maWd1cmF0aW9uICovCisgICAgX19IQUxfUlRDX0FMQVJNX0VYVElfRU5BQkxFX0lUKCk7CisgICAgX19IQUxfUlRDX0FMQVJNX0VYVElfRU5BQkxFX1JJU0lOR19FREdFKCk7CisKKyAgICAvKiBDaGVjayBpZiB0aGUgSW5pdGlhbGl6YXRpb24gbW9kZSBpcyBzZXQgKi8KKyAgICBpZiAoKGhSVENfSGFuZGxlLkluc3RhbmNlLT5JU1IgJiBSVENfSVNSX0lOSVRGKSA9PSAodWludDMyX3QpUkVTRVQpCisgICAgeworICAgICAgLyogU2V0IHRoZSBJbml0aWFsaXphdGlvbiBtb2RlICovCisgICAgICBoUlRDX0hhbmRsZS5JbnN0YW5jZS0+SVNSID0gKHVpbnQzMl90KVJUQ19JTklUX01BU0s7CisgICAgICBjb3VudGVyID0gMFU7CisgICAgICB3aGlsZSAoKGhSVENfSGFuZGxlLkluc3RhbmNlLT5JU1IgJiBSVENfSVNSX0lOSVRGKSA9PSAodWludDMyX3QpUkVTRVQpCisgICAgICB7CisgICAgICAgIGlmIChjb3VudGVyKysgPT0gKFN5c3RlbUNvcmVDbG9jayAvIDQ4VSkpIC8qIFRpbWVvdXQgPSB+IDFzICovCisgICAgICAgIHsKKyAgICAgICAgICBzdGF0dXMgPSBIQUxfRVJST1I7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KKyAgaWYgKHN0YXR1cyA9PSBIQUxfT0spCisgIHsKKyAgICBoUlRDX0hhbmRsZS5JbnN0YW5jZS0+RFIgPSAwVTsKKyAgICBoUlRDX0hhbmRsZS5JbnN0YW5jZS0+VFIgPSAwVTsKKworICAgIGhSVENfSGFuZGxlLkluc3RhbmNlLT5JU1IgJj0gKHVpbnQzMl90KX5SVENfSVNSX0lOSVQ7CisKKyAgICAvKiBFbmFibGUgdGhlIHdyaXRlIHByb3RlY3Rpb24gZm9yIFJUQyByZWdpc3RlcnMgKi8KKyAgICBfX0hBTF9SVENfV1JJVEVQUk9URUNUSU9OX0VOQUJMRSgmaFJUQ19IYW5kbGUpOworCisgICAgLyogRW5hYmxlIHRoZSBSVEMgQWxhcm0gSW50ZXJydXB0ICovCisgICAgSEFMX05WSUNfRW5hYmxlSVJRKFJUQ19BbGFybV9JUlFuKTsKKworICAgIC8qIENvbmZpZ3VyZSB0aGUgU3lzVGljayBJUlEgcHJpb3JpdHkgKi8KKyAgICBpZiAoVGlja1ByaW9yaXR5IDwgKDFVTCA8PCBfX05WSUNfUFJJT19CSVRTKSkKKyAgICB7CisgICAgICBIQUxfTlZJQ19TZXRQcmlvcml0eShSVENfQWxhcm1fSVJRbiwgVGlja1ByaW9yaXR5LCAwVSk7CisgICAgICB1d1RpY2tQcmlvID0gVGlja1ByaW9yaXR5OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgc3RhdHVzID0gSEFMX0VSUk9SOworICAgIH0KKworICB9CisgIHJldHVybiBzdGF0dXM7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjR4eF9oYWxfdGltZWJhc2VfcnRjX3dha2V1cF90ZW1wbGF0ZS5jIGIvU3JjL3N0bTMyZjR4eF9oYWxfdGltZWJhc2VfcnRjX3dha2V1cF90ZW1wbGF0ZS5jCmluZGV4IGEwNDdkZWYuLjAxNjYzZTcgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmY0eHhfaGFsX3RpbWViYXNlX3J0Y193YWtldXBfdGVtcGxhdGUuYworKysgYi9TcmMvc3RtMzJmNHh4X2hhbF90aW1lYmFzZV9ydGNfd2FrZXVwX3RlbXBsYXRlLmMKQEAgLTEwNSw2ICsxMDUsNyBAQAogCiAgIFJDQ19Pc2NJbml0VHlwZURlZiAgICAgICAgUkNDX09zY0luaXRTdHJ1Y3Q7CiAgIFJDQ19QZXJpcGhDTEtJbml0VHlwZURlZiAgUGVyaXBoQ2xrSW5pdFN0cnVjdDsKKyAgSEFMX1N0YXR1c1R5cGVEZWYgICAgIHN0YXR1czsKIAogI2lmZGVmIFJUQ19DTE9DS19TT1VSQ0VfTFNFCiAgIC8qIENvbmZpZ3VlIExTRSBhcyBSVEMgY2xvY2sgc291Y3JlICovCkBAIC0xMjksODcgKzEzMCwxMDMgQEAKICNlcnJvciBQbGVhc2Ugc2VsZWN0IHRoZSBSVEMgQ2xvY2sgc291cmNlCiAjZW5kaWYgLyogUlRDX0NMT0NLX1NPVVJDRV9MU0UgKi8KIAotICBpZihIQUxfUkNDX09zY0NvbmZpZygmUkNDX09zY0luaXRTdHJ1Y3QpID09IEhBTF9PSykKLSAgeyAKKyAgc3RhdHVzID0gSEFMX1JDQ19Pc2NDb25maWcoJlJDQ19Pc2NJbml0U3RydWN0KTsKKyAgaWYgKHN0YXR1cyA9PSBIQUxfT0spCisgIHsKICAgICBQZXJpcGhDbGtJbml0U3RydWN0LlBlcmlwaENsb2NrU2VsZWN0aW9uID0gUkNDX1BFUklQSENMS19SVEM7Ci0gICAgaWYoSEFMX1JDQ0V4X1BlcmlwaENMS0NvbmZpZygmUGVyaXBoQ2xrSW5pdFN0cnVjdCkgPT0gSEFMX09LKQorICAgIHN0YXR1cyA9IEhBTF9SQ0NFeF9QZXJpcGhDTEtDb25maWcoJlBlcmlwaENsa0luaXRTdHJ1Y3QpOworICB9CisgIGlmIChzdGF0dXMgPT0gSEFMX09LKQorICB7CisgICAgLyogRW5hYmxlIFJUQyBDbG9jayAqLworICAgIF9fSEFMX1JDQ19SVENfRU5BQkxFKCk7CisgICAgLyogVGhlIHRpbWUgYmFzZSBzaG91bGQgYmUgMW1zCisgICAgICAgVGltZSBiYXNlID0gKChSVENfQVNZTkNIX1BSRURJViArIDEpICogKFJUQ19TWU5DSF9QUkVESVYgKyAxKSkgLyBSVENfQ0xPQ0sKKyAgICAgICBIU0UgYXMgUlRDIGNsb2NrCisgICAgICAgICBUaW1lIGJhc2UgPSAoKDk5ICsgMSkgKiAoOSArIDEpKSAvIDFNaHoKKyAgICAgICAgICAgICAgICAgICA9IDFtcworICAgICAgIExTRSBhcyBSVEMgY2xvY2sKKyAgICAgICAgIFRpbWUgYmFzZSA9ICgoMzEgKyAxKSAqICgwICsgMSkpIC8gMzIuNzY4S2h6CisgICAgICAgICAgICAgICAgICAgPSB+MW1zCisgICAgICAgTFNJIGFzIFJUQyBjbG9jaworICAgICAgICAgVGltZSBiYXNlID0gKCgzMSArIDEpICogKDAgKyAxKSkgLyAzMktoegorICAgICAgICAgICAgICAgICAgID0gMW1zCisgICAgKi8KKyAgICBoUlRDX0hhbmRsZS5JbnN0YW5jZSA9IFJUQzsKKyAgICBoUlRDX0hhbmRsZS5Jbml0LkhvdXJGb3JtYXQgPSBSVENfSE9VUkZPUk1BVF8yNDsKKyAgICBoUlRDX0hhbmRsZS5Jbml0LkFzeW5jaFByZWRpdiA9IFJUQ19BU1lOQ0hfUFJFRElWOworICAgIGhSVENfSGFuZGxlLkluaXQuU3luY2hQcmVkaXYgPSBSVENfU1lOQ0hfUFJFRElWOworICAgIGhSVENfSGFuZGxlLkluaXQuT3V0UHV0ID0gUlRDX09VVFBVVF9ESVNBQkxFOworICAgIGhSVENfSGFuZGxlLkluaXQuT3V0UHV0UG9sYXJpdHkgPSBSVENfT1VUUFVUX1BPTEFSSVRZX0hJR0g7CisgICAgaFJUQ19IYW5kbGUuSW5pdC5PdXRQdXRUeXBlID0gUlRDX09VVFBVVF9UWVBFX09QRU5EUkFJTjsKKyAgICBzdGF0dXMgPSBIQUxfUlRDX0luaXQoJmhSVENfSGFuZGxlKTsKKyAgfQorICBpZiAoc3RhdHVzID09IEhBTF9PSykKKyAgeworICAgIC8qIERpc2FibGUgdGhlIHdyaXRlIHByb3RlY3Rpb24gZm9yIFJUQyByZWdpc3RlcnMgKi8KKyAgICBfX0hBTF9SVENfV1JJVEVQUk9URUNUSU9OX0RJU0FCTEUoJmhSVENfSGFuZGxlKTsKKworICAgIC8qIERpc2FibGUgdGhlIFdha2UtdXAgVGltZXIgKi8KKyAgICBfX0hBTF9SVENfV0FLRVVQVElNRVJfRElTQUJMRSgmaFJUQ19IYW5kbGUpOworCisgICAgLyogSW4gY2FzZSBvZiBpbnRlcnJ1cHQgbW9kZSBpcyB1c2VkLCB0aGUgaW50ZXJydXB0IHNvdXJjZSBtdXN0IGRpc2FibGVkICovIAorICAgIF9fSEFMX1JUQ19XQUtFVVBUSU1FUl9ESVNBQkxFX0lUKCZoUlRDX0hhbmRsZSwgUlRDX0lUX1dVVCk7CisKKyAgICAvKiBXYWl0IHRpbGwgUlRDIFdVVFdGIGZsYWcgaXMgc2V0ICAqLworICAgIHdoaWxlIChfX0hBTF9SVENfV0FLRVVQVElNRVJfR0VUX0ZMQUcoJmhSVENfSGFuZGxlLCBSVENfRkxBR19XVVRXRikgPT0gUkVTRVQpCiAgICAgewotICAgICAgLyogRW5hYmxlIFJUQyBDbG9jayAqLwotICAgICAgX19IQUxfUkNDX1JUQ19FTkFCTEUoKTsKLSAgICAgIC8qIFRoZSB0aW1lIGJhc2Ugc2hvdWxkIGJlIDFtcyAKLSAgICAgICAgIFRpbWUgYmFzZSA9ICgoUlRDX0FTWU5DSF9QUkVESVYgKyAxKSAqIChSVENfU1lOQ0hfUFJFRElWICsgMSkpIC8gUlRDX0NMT0NLIAotICAgICAgICAgSFNFIGFzIFJUQyBjbG9jayAKLSAgICAgICAgICAgVGltZSBiYXNlID0gKCg5OSArIDEpICogKDkgKyAxKSkgLyAxTWh6Ci0gICAgICAgICAgICAgICAgICAgICA9IDFtcwotICAgICAgICAgTFNFIGFzIFJUQyBjbG9jayAKLSAgICAgICAgICAgVGltZSBiYXNlID0gKCgzMSArIDEpICogKDAgKyAxKSkgLyAzMi43NjhLaHoKLSAgICAgICAgICAgICAgICAgICAgID0gfjFtcwotICAgICAgICAgTFNJIGFzIFJUQyBjbG9jayAKLSAgICAgICAgICAgVGltZSBiYXNlID0gKCgzMSArIDEpICogKDAgKyAxKSkgLyAzMktoegotICAgICAgICAgICAgICAgICAgICAgPSAxbXMKLSAgICAgICovCi0gICAgICBoUlRDX0hhbmRsZS5JbnN0YW5jZSA9IFJUQzsKLSAgICAgIGhSVENfSGFuZGxlLkluaXQuSG91ckZvcm1hdCA9IFJUQ19IT1VSRk9STUFUXzI0OwotICAgICAgaFJUQ19IYW5kbGUuSW5pdC5Bc3luY2hQcmVkaXYgPSBSVENfQVNZTkNIX1BSRURJVjsKLSAgICAgIGhSVENfSGFuZGxlLkluaXQuU3luY2hQcmVkaXYgPSBSVENfU1lOQ0hfUFJFRElWOwotICAgICAgaFJUQ19IYW5kbGUuSW5pdC5PdXRQdXQgPSBSVENfT1VUUFVUX0RJU0FCTEU7Ci0gICAgICBoUlRDX0hhbmRsZS5Jbml0Lk91dFB1dFBvbGFyaXR5ID0gUlRDX09VVFBVVF9QT0xBUklUWV9ISUdIOwotICAgICAgaFJUQ19IYW5kbGUuSW5pdC5PdXRQdXRUeXBlID0gUlRDX09VVFBVVF9UWVBFX09QRU5EUkFJTjsKLSAgICAgIEhBTF9SVENfSW5pdCgmaFJUQ19IYW5kbGUpOwotCi0gICAgICAvKiBEaXNhYmxlIHRoZSB3cml0ZSBwcm90ZWN0aW9uIGZvciBSVEMgcmVnaXN0ZXJzICovCi0gICAgICBfX0hBTF9SVENfV1JJVEVQUk9URUNUSU9OX0RJU0FCTEUoJmhSVENfSGFuZGxlKTsKLQotICAgICAgLyogRGlzYWJsZSB0aGUgV2FrZS11cCBUaW1lciAqLwotICAgICAgX19IQUxfUlRDX1dBS0VVUFRJTUVSX0RJU0FCTEUoJmhSVENfSGFuZGxlKTsKLQotICAgICAgLyogSW4gY2FzZSBvZiBpbnRlcnJ1cHQgbW9kZSBpcyB1c2VkLCB0aGUgaW50ZXJydXB0IHNvdXJjZSBtdXN0IGRpc2FibGVkICovIAotICAgICAgX19IQUxfUlRDX1dBS0VVUFRJTUVSX0RJU0FCTEVfSVQoJmhSVENfSGFuZGxlLFJUQ19JVF9XVVQpOwotCi0gICAgICAvKiBXYWl0IHRpbGwgUlRDIFdVVFdGIGZsYWcgaXMgc2V0ICAqLwotICAgICAgd2hpbGUoX19IQUxfUlRDX1dBS0VVUFRJTUVSX0dFVF9GTEFHKCZoUlRDX0hhbmRsZSwgUlRDX0ZMQUdfV1VUV0YpID09IFJFU0VUKQorICAgICAgaWYgKGNvdW50ZXIrKyA9PSAoU3lzdGVtQ29yZUNsb2NrIC8gNDhVKSkKICAgICAgIHsKLSAgICAgICAgaWYoY291bnRlcisrID09IChTeXN0ZW1Db3JlQ2xvY2sgLzQ4VSkpIAotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKLSAgICAgICAgfQorICAgICAgICBzdGF0dXMgPSBIQUxfRVJST1I7CiAgICAgICB9Ci0KLSAgICAgIC8qIENsZWFyIFBXUiB3YWtlIHVwIEZsYWcgKi8KLSAgICAgIF9fSEFMX1BXUl9DTEVBUl9GTEFHKFBXUl9GTEFHX1dVKTsKLQotICAgICAgLyogQ2xlYXIgUlRDIFdha2UgVXAgdGltZXIgRmxhZyAqLwotICAgICAgX19IQUxfUlRDX1dBS0VVUFRJTUVSX0NMRUFSX0ZMQUcoJmhSVENfSGFuZGxlLCBSVENfRkxBR19XVVRGKTsKLQotICAgICAgLyogQ29uZmlndXJlIHRoZSBXYWtlLXVwIFRpbWVyIGNvdW50ZXIgKi8KLSAgICAgIGhSVENfSGFuZGxlLkluc3RhbmNlLT5XVVRSID0gMFU7Ci0KLSAgICAgIC8qIENsZWFyIHRoZSBXYWtlLXVwIFRpbWVyIGNsb2NrIHNvdXJjZSBiaXRzIGluIENSIHJlZ2lzdGVyICovCi0gICAgICBoUlRDX0hhbmRsZS5JbnN0YW5jZS0+Q1IgJj0gKHVpbnQzMl90KX5SVENfQ1JfV1VDS1NFTDsKLQotICAgICAgLyogQ29uZmlndXJlIHRoZSBjbG9jayBzb3VyY2UgKi8KLSAgICAgIGhSVENfSGFuZGxlLkluc3RhbmNlLT5DUiB8PSAodWludDMyX3QpUlRDX1dBS0VVUENMT0NLX0NLX1NQUkVfMTZCSVRTOwotCi0gICAgICAvKiBSVEMgV2FrZVVwVGltZXIgSW50ZXJydXB0IENvbmZpZ3VyYXRpb246IEVYVEkgY29uZmlndXJhdGlvbiAqLwotICAgICAgX19IQUxfUlRDX1dBS0VVUFRJTUVSX0VYVElfRU5BQkxFX0lUKCk7Ci0KLSAgICAgIF9fSEFMX1JUQ19XQUtFVVBUSU1FUl9FWFRJX0VOQUJMRV9SSVNJTkdfRURHRSgpOwotCi0gICAgICAvKiBDb25maWd1cmUgdGhlIEludGVycnVwdCBpbiB0aGUgUlRDX0NSIHJlZ2lzdGVyICovCi0gICAgICBfX0hBTF9SVENfV0FLRVVQVElNRVJfRU5BQkxFX0lUKCZoUlRDX0hhbmRsZSxSVENfSVRfV1VUKTsKLQotICAgICAgLyogRW5hYmxlIHRoZSBXYWtlLXVwIFRpbWVyICovCi0gICAgICBfX0hBTF9SVENfV0FLRVVQVElNRVJfRU5BQkxFKCZoUlRDX0hhbmRsZSk7Ci0KLSAgICAgIC8qIEVuYWJsZSB0aGUgd3JpdGUgcHJvdGVjdGlvbiBmb3IgUlRDIHJlZ2lzdGVycyAqLwotICAgICAgX19IQUxfUlRDX1dSSVRFUFJPVEVDVElPTl9FTkFCTEUoJmhSVENfSGFuZGxlKTsKLQotICAgICAgSEFMX05WSUNfU2V0UHJpb3JpdHkoUlRDX1dLVVBfSVJRbiwgVGlja1ByaW9yaXR5LCAwVSk7Ci0gICAgICBIQUxfTlZJQ19FbmFibGVJUlEoUlRDX1dLVVBfSVJRbik7IAotICAgICAgcmV0dXJuIEhBTF9PSzsKICAgICB9CiAgIH0KLSAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgaWYgKHN0YXR1cyA9PSBIQUxfT0spCisgIHsKKyAgICAvKiBDbGVhciBQV1Igd2FrZSB1cCBGbGFnICovCisgICAgX19IQUxfUFdSX0NMRUFSX0ZMQUcoUFdSX0ZMQUdfV1UpOworCisgICAgLyogQ2xlYXIgUlRDIFdha2UgVXAgdGltZXIgRmxhZyAqLworICAgIF9fSEFMX1JUQ19XQUtFVVBUSU1FUl9DTEVBUl9GTEFHKCZoUlRDX0hhbmRsZSwgUlRDX0ZMQUdfV1VURik7CisKKyAgICAvKiBDb25maWd1cmUgdGhlIFdha2UtdXAgVGltZXIgY291bnRlciAqLworICAgIGhSVENfSGFuZGxlLkluc3RhbmNlLT5XVVRSID0gMFU7CisKKyAgICAvKiBDbGVhciB0aGUgV2FrZS11cCBUaW1lciBjbG9jayBzb3VyY2UgYml0cyBpbiBDUiByZWdpc3RlciAqLworICAgIGhSVENfSGFuZGxlLkluc3RhbmNlLT5DUiAmPSAodWludDMyX3QpflJUQ19DUl9XVUNLU0VMOworCisgICAgLyogQ29uZmlndXJlIHRoZSBjbG9jayBzb3VyY2UgKi8KKyAgICBoUlRDX0hhbmRsZS5JbnN0YW5jZS0+Q1IgfD0gKHVpbnQzMl90KVJUQ19XQUtFVVBDTE9DS19DS19TUFJFXzE2QklUUzsKKworICAgIC8qIFJUQyBXYWtlVXBUaW1lciBJbnRlcnJ1cHQgQ29uZmlndXJhdGlvbjogRVhUSSBjb25maWd1cmF0aW9uICovCisgICAgX19IQUxfUlRDX1dBS0VVUFRJTUVSX0VYVElfRU5BQkxFX0lUKCk7CisKKyAgICBfX0hBTF9SVENfV0FLRVVQVElNRVJfRVhUSV9FTkFCTEVfUklTSU5HX0VER0UoKTsKKworICAgIC8qIENvbmZpZ3VyZSB0aGUgSW50ZXJydXB0IGluIHRoZSBSVENfQ1IgcmVnaXN0ZXIgKi8KKyAgICBfX0hBTF9SVENfV0FLRVVQVElNRVJfRU5BQkxFX0lUKCZoUlRDX0hhbmRsZSxSVENfSVRfV1VUKTsKKworICAgIC8qIEVuYWJsZSB0aGUgV2FrZS11cCBUaW1lciAqLworICAgIF9fSEFMX1JUQ19XQUtFVVBUSU1FUl9FTkFCTEUoJmhSVENfSGFuZGxlKTsKKworICAgIC8qIEVuYWJsZSB0aGUgd3JpdGUgcHJvdGVjdGlvbiBmb3IgUlRDIHJlZ2lzdGVycyAqLworICAgIF9fSEFMX1JUQ19XUklURVBST1RFQ1RJT05fRU5BQkxFKCZoUlRDX0hhbmRsZSk7CisKKyAgICAvKiBFbmFibGUgdGhlIFJUQyBnbG9iYWwgSW50ZXJydXB0ICovCisgICAgSEFMX05WSUNfRW5hYmxlSVJRKFJUQ19XS1VQX0lSUW4pOworCisgICAgLyogQ29uZmlndXJlIHRoZSBTeXNUaWNrIElSUSBwcmlvcml0eSAqLworICAgIGlmIChUaWNrUHJpb3JpdHkgPCAoMVVMIDw8IF9fTlZJQ19QUklPX0JJVFMpKQorICAgIHsKKyAgICAgIEhBTF9OVklDX1NldFByaW9yaXR5KFJUQ19XS1VQX0lSUW4sIFRpY2tQcmlvcml0eSwgMFUpOworICAgICAgdXdUaWNrUHJpbyA9IFRpY2tQcmlvcml0eTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIHN0YXR1cyA9IEhBTF9FUlJPUjsKKyAgICB9CisgIH0KKyAgcmV0dXJuIHN0YXR1czsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmNHh4X2hhbF90aW1lYmFzZV90aW1fdGVtcGxhdGUuYyBiL1NyYy9zdG0zMmY0eHhfaGFsX3RpbWViYXNlX3RpbV90ZW1wbGF0ZS5jCmluZGV4IDY2Zjc1ZDUuLmRhNjFlOWMgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmY0eHhfaGFsX3RpbWViYXNlX3RpbV90ZW1wbGF0ZS5jCisrKyBiL1NyYy9zdG0zMmY0eHhfaGFsX3RpbWViYXNlX3RpbV90ZW1wbGF0ZS5jCkBAIC01OCwzOCArNTgsMzMgQEAKICAgdWludDMyX3QgICAgICAgICAgICAgIHV3VGltY2xvY2ssIHV3QVBCMVByZXNjYWxlciA9IDBVOwogICB1aW50MzJfdCAgICAgICAgICAgICAgdXdQcmVzY2FsZXJWYWx1ZSA9IDBVOwogICB1aW50MzJfdCAgICAgICAgICAgICAgcEZMYXRlbmN5OwotICAKLSAgICAvKkNvbmZpZ3VyZSB0aGUgVElNNiBJUlEgcHJpb3JpdHkgKi8KLSAgSEFMX05WSUNfU2V0UHJpb3JpdHkoVElNNl9EQUNfSVJRbiwgVGlja1ByaW9yaXR5ICwwVSk7Ci0gIAotICAvKiBFbmFibGUgdGhlIFRJTTYgZ2xvYmFsIEludGVycnVwdCAqLwotICBIQUxfTlZJQ19FbmFibGVJUlEoVElNNl9EQUNfSVJRbik7Ci0gIAorICBIQUxfU3RhdHVzVHlwZURlZiAgICAgc3RhdHVzOworCiAgIC8qIEVuYWJsZSBUSU02IGNsb2NrICovCiAgIF9fSEFMX1JDQ19USU02X0NMS19FTkFCTEUoKTsKLSAgCisKICAgLyogR2V0IGNsb2NrIGNvbmZpZ3VyYXRpb24gKi8KICAgSEFMX1JDQ19HZXRDbG9ja0NvbmZpZygmY2xrY29uZmlnLCAmcEZMYXRlbmN5KTsKLSAgCisKICAgLyogR2V0IEFQQjEgcHJlc2NhbGVyICovCiAgIHV3QVBCMVByZXNjYWxlciA9IGNsa2NvbmZpZy5BUEIxQ0xLRGl2aWRlcjsKLSAgCisKICAgLyogQ29tcHV0ZSBUSU02IGNsb2NrICovCi0gIGlmICh1d0FQQjFQcmVzY2FsZXIgPT0gUkNDX0hDTEtfRElWMSkgCisgIGlmICh1d0FQQjFQcmVzY2FsZXIgPT0gUkNDX0hDTEtfRElWMSkKICAgewogICAgIHV3VGltY2xvY2sgPSBIQUxfUkNDX0dldFBDTEsxRnJlcSgpOwogICB9CiAgIGVsc2UKICAgewotICAgIHV3VGltY2xvY2sgPSAyKkhBTF9SQ0NfR2V0UENMSzFGcmVxKCk7CisgICAgdXdUaW1jbG9jayA9IDIgKiBIQUxfUkNDX0dldFBDTEsxRnJlcSgpOwogICB9Ci0gIAorCiAgIC8qIENvbXB1dGUgdGhlIHByZXNjYWxlciB2YWx1ZSB0byBoYXZlIFRJTTYgY291bnRlciBjbG9jayBlcXVhbCB0byAxTUh6ICovCiAgIHV3UHJlc2NhbGVyVmFsdWUgPSAodWludDMyX3QpICgodXdUaW1jbG9jayAvIDEwMDAwMDBVKSAtIDFVKTsKLSAgCisKICAgLyogSW5pdGlhbGl6ZSBUSU02ICovCiAgIFRpbUhhbmRsZS5JbnN0YW5jZSA9IFRJTTY7Ci0gIAorCiAgIC8qIEluaXRpYWxpemUgVElNeCBwZXJpcGhlcmFsIGFzIGZvbGxvdzoKICAgKyBQZXJpb2QgPSBbKFRJTTZDTEsvMTAwMCkgLSAxXS4gdG8gaGF2ZSBhICgxLzEwMDApIHMgdGltZSBiYXNlLgogICArIFByZXNjYWxlciA9ICh1d1RpbWNsb2NrLzEwMDAwMDAgLSAxKSB0byBoYXZlIGEgMU1IeiBjb3VudGVyIGNsb2NrLgpAQCAtMTAxLDE0ICs5NiwzMSBAQAogICBUaW1IYW5kbGUuSW5pdC5DbG9ja0RpdmlzaW9uID0gMFU7CiAgIFRpbUhhbmRsZS5Jbml0LkNvdW50ZXJNb2RlID0gVElNX0NPVU5URVJNT0RFX1VQOwogICBUaW1IYW5kbGUuSW5pdC5BdXRvUmVsb2FkUHJlbG9hZCA9IFRJTV9BVVRPUkVMT0FEX1BSRUxPQURfRElTQUJMRTsKLSAgaWYoSEFMX1RJTV9CYXNlX0luaXQoJlRpbUhhbmRsZSkgPT0gSEFMX09LKQorICBzdGF0dXMgPSBIQUxfVElNX0Jhc2VfSW5pdCgmVGltSGFuZGxlKTsKKyAgaWYgKHN0YXR1cyA9PSBIQUxfT0spCiAgIHsKICAgICAvKiBTdGFydCB0aGUgVElNIHRpbWUgQmFzZSBnZW5lcmF0aW9uIGluIGludGVycnVwdCBtb2RlICovCi0gICAgcmV0dXJuIEhBTF9USU1fQmFzZV9TdGFydF9JVCgmVGltSGFuZGxlKTsKKyAgICBzdGF0dXMgPSBIQUxfVElNX0Jhc2VfU3RhcnRfSVQoJlRpbUhhbmRsZSk7CisgICAgaWYgKHN0YXR1cyA9PSBIQUxfT0spCisgICAgeworICAgICAgLyogRW5hYmxlIHRoZSBUSU02IGdsb2JhbCBJbnRlcnJ1cHQgKi8KKyAgICAgIEhBTF9OVklDX0VuYWJsZUlSUShUSU02X0RBQ19JUlFuKTsKKworICAgICAgaWYgKFRpY2tQcmlvcml0eSA8ICgxVUwgPDwgX19OVklDX1BSSU9fQklUUykpCisgICAgICB7CisgICAgICAgIC8qIEVuYWJsZSB0aGUgVElNNiBnbG9iYWwgSW50ZXJydXB0ICovCisgICAgICAgIEhBTF9OVklDX1NldFByaW9yaXR5KFRJTTZfREFDX0lSUW4sIFRpY2tQcmlvcml0eSwgMCk7CisgICAgICAgIHV3VGlja1ByaW8gPSBUaWNrUHJpb3JpdHk7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIHN0YXR1cyA9IEhBTF9FUlJPUjsKKyAgICAgIH0KKyAgICB9CiAgIH0KLSAgCisKICAgLyogUmV0dXJuIGZ1bmN0aW9uIHN0YXR1cyAqLwotICByZXR1cm4gSEFMX0VSUk9SOworICByZXR1cm4gc3RhdHVzOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmY0eHhfaGFsX3VhcnQuYyBiL1NyYy9zdG0zMmY0eHhfaGFsX3VhcnQuYwppbmRleCBlYWY0MTE0Li42NDBlZTEyIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmNHh4X2hhbF91YXJ0LmMKKysrIGIvU3JjL3N0bTMyZjR4eF9oYWxfdWFydC5jCkBAIC0xMDUsNiArMTA1LDEwIEBACiAgICAgKCspIE1zcERlSW5pdENhbGxiYWNrICAgICAgICAgOiBVQVJUIE1zcERlSW5pdC4KIAogICAgIFsuLl0KKyAgICBGb3Igc3BlY2lmaWMgY2FsbGJhY2sgUnhFdmVudENhbGxiYWNrLCB1c2UgZGVkaWNhdGVkIHJlZ2lzdHJhdGlvbi9yZXNldCBmdW5jdGlvbnM6CisgICAgcmVzcGVjdGl2ZWx5IEByZWYgSEFMX1VBUlRfUmVnaXN0ZXJSeEV2ZW50Q2FsbGJhY2soKSAsIEByZWYgSEFMX1VBUlRfVW5SZWdpc3RlclJ4RXZlbnRDYWxsYmFjaygpLgorCisgICAgWy4uXQogICAgIEJ5IGRlZmF1bHQsIGFmdGVyIHRoZSBAcmVmIEhBTF9VQVJUX0luaXQoKSBhbmQgd2hlbiB0aGUgc3RhdGUgaXMgSEFMX1VBUlRfU1RBVEVfUkVTRVQKICAgICBhbGwgY2FsbGJhY2tzIGFyZSBzZXQgdG8gdGhlIGNvcnJlc3BvbmRpbmcgd2VhayAoc3VyY2hhcmdlZCkgZnVuY3Rpb25zOgogICAgIGV4YW1wbGVzIEByZWYgSEFMX1VBUlRfVHhDcGx0Q2FsbGJhY2soKSwgQHJlZiBIQUxfVUFSVF9SeEhhbGZDcGx0Q2FsbGJhY2soKS4KQEAgLTE2OCw2ICsxNzIsNDAgQEAKICAgICAgICAoKykgUmVzdW1lIHRoZSBETUEgVHJhbnNmZXIgdXNpbmcgSEFMX1VBUlRfRE1BUmVzdW1lKCkKICAgICAgICAoKykgU3RvcCB0aGUgRE1BIFRyYW5zZmVyIHVzaW5nIEhBTF9VQVJUX0RNQVN0b3AoKQogCisKKyAgICBbLi5dIFRoaXMgc3Vic2VjdGlvbiBhbHNvIHByb3ZpZGVzIGEgc2V0IG9mIGFkZGl0aW9uYWwgZnVuY3Rpb25zIHByb3ZpZGluZyBlbmhhbmNlZCByZWNlcHRpb24KKyAgICBzZXJ2aWNlcyB0byB1c2VyLiAoRm9yIGV4YW1wbGUsIHRoZXNlIGZ1bmN0aW9ucyBhbGxvdyBhcHBsaWNhdGlvbiB0byBoYW5kbGUgdXNlIGNhc2VzCisgICAgd2hlcmUgbnVtYmVyIG9mIGRhdGEgdG8gYmUgcmVjZWl2ZWQgaXMgdW5rbm93bikuCisKKyAgICAoIykgQ29tcGFyZWQgdG8gc3RhbmRhcmQgcmVjZXB0aW9uIHNlcnZpY2VzIHdoaWNoIG9ubHkgY29uc2lkZXIgbnVtYmVyIG9mIHJlY2VpdmVkCisgICAgICAgIGRhdGEgZWxlbWVudHMgYXMgcmVjZXB0aW9uIGNvbXBsZXRpb24gY3JpdGVyaWEsIHRoZXNlIGZ1bmN0aW9ucyBhbHNvIGNvbnNpZGVyIGFkZGl0aW9uYWwgZXZlbnRzCisgICAgICAgIGFzIHRyaWdnZXJzIGZvciB1cGRhdGluZyByZWNlcHRpb24gc3RhdHVzIHRvIGNhbGxlciA6CisgICAgICAgKCspIERldGVjdGlvbiBvZiBpbmFjdGl2aXR5IHBlcmlvZCAoUlggbGluZSBoYXMgbm90IGJlZW4gYWN0aXZlIGZvciBhIGdpdmVuIHBlcmlvZCkuCisgICAgICAgICAgKCsrKSBSWCBpbmFjdGl2aXR5IGRldGVjdGVkIGJ5IElETEUgZXZlbnQsIGkuZS4gUlggbGluZSBoYXMgYmVlbiBpbiBpZGxlIHN0YXRlIChub3JtYWxseSBoaWdoIHN0YXRlKQorICAgICAgICAgICAgICAgZm9yIDEgZnJhbWUgdGltZSwgYWZ0ZXIgbGFzdCByZWNlaXZlZCBieXRlLgorCisgICAgKCMpIFRoZXJlIGFyZSB0d28gbW9kZSBvZiB0cmFuc2ZlcjoKKyAgICAgICAoKykgQmxvY2tpbmcgbW9kZTogVGhlIHJlY2VwdGlvbiBpcyBwZXJmb3JtZWQgaW4gcG9sbGluZyBtb2RlLCB1bnRpbCBlaXRoZXIgZXhwZWN0ZWQgbnVtYmVyIG9mIGRhdGEgaXMgcmVjZWl2ZWQsCisgICAgICAgICAgIG9yIHRpbGwgSURMRSBldmVudCBvY2N1cnMuIFJlY2VwdGlvbiBpcyBoYW5kbGVkIG9ubHkgZHVyaW5nIGZ1bmN0aW9uIGV4ZWN1dGlvbi4KKyAgICAgICAgICAgV2hlbiBmdW5jdGlvbiBleGl0cywgbm8gZGF0YSByZWNlcHRpb24gY291bGQgb2NjdXIuIEhBTCBzdGF0dXMgYW5kIG51bWJlciBvZiBhY3R1YWxseSByZWNlaXZlZCBkYXRhIGVsZW1lbnRzLAorICAgICAgICAgICBhcmUgcmV0dXJuZWQgYnkgZnVuY3Rpb24gYWZ0ZXIgZmluaXNoaW5nIHRyYW5zZmVyLgorICAgICAgICgrKSBOb24tQmxvY2tpbmcgbW9kZTogVGhlIHJlY2VwdGlvbiBpcyBwZXJmb3JtZWQgdXNpbmcgSW50ZXJydXB0cyBvciBETUEuCisgICAgICAgICAgIFRoZXNlIEFQSSdzIHJldHVybiB0aGUgSEFMIHN0YXR1cy4KKyAgICAgICAgICAgVGhlIGVuZCBvZiB0aGUgZGF0YSBwcm9jZXNzaW5nIHdpbGwgYmUgaW5kaWNhdGVkIHRocm91Z2ggdGhlCisgICAgICAgICAgIGRlZGljYXRlZCBVQVJUIElSUSB3aGVuIHVzaW5nIEludGVycnVwdCBtb2RlIG9yIHRoZSBETUEgSVJRIHdoZW4gdXNpbmcgRE1BIG1vZGUuCisgICAgICAgICAgIFRoZSBIQUxfVUFSVEV4X1J4RXZlbnRDYWxsYmFjaygpIHVzZXIgY2FsbGJhY2sgd2lsbCBiZSBleGVjdXRlZCBkdXJpbmcgUmVjZWl2ZSBwcm9jZXNzCisgICAgICAgICAgIFRoZSBIQUxfVUFSVF9FcnJvckNhbGxiYWNrKCl1c2VyIGNhbGxiYWNrIHdpbGwgYmUgZXhlY3V0ZWQgd2hlbiBhIHJlY2VwdGlvbiBlcnJvciBpcyBkZXRlY3RlZC4KKworICAgICgjKSBCbG9ja2luZyBtb2RlIEFQSToKKyAgICAgICAgKCspIEhBTF9VQVJURXhfUmVjZWl2ZVRvSWRsZSgpCisKKyAgICAoIykgTm9uLUJsb2NraW5nIG1vZGUgQVBJIHdpdGggSW50ZXJydXB0OgorICAgICAgICAoKykgSEFMX1VBUlRFeF9SZWNlaXZlVG9JZGxlX0lUKCkKKworICAgICgjKSBOb24tQmxvY2tpbmcgbW9kZSBBUEkgd2l0aCBETUE6CisgICAgICAgICgrKSBIQUxfVUFSVEV4X1JlY2VpdmVUb0lkbGVfRE1BKCkKKworCiAgICAgICoqKiBVQVJUIEhBTCBkcml2ZXIgbWFjcm9zIGxpc3QgKioqCiAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICBbLi5dCkBAIC0xODYsNyArMjI0LDcgQEAKIAogICBAZW5kdmVyYmF0aW0KICAgICAgWy4uXQotICAgICAgIChAKSBBZGRpdGlvbm5hbCByZW1hcms6IElmIHRoZSBwYXJpdHkgaXMgZW5hYmxlZCwgdGhlbiB0aGUgTVNCIGJpdCBvZiB0aGUgZGF0YSB3cml0dGVuCisgICAgICAgKEApIEFkZGl0aW9uYWwgcmVtYXJrOiBJZiB0aGUgcGFyaXR5IGlzIGVuYWJsZWQsIHRoZW4gdGhlIE1TQiBiaXQgb2YgdGhlIGRhdGEgd3JpdHRlbgogICAgICAgICAgICBpbiB0aGUgZGF0YSByZWdpc3RlciBpcyB0cmFuc21pdHRlZCBidXQgaXMgY2hhbmdlZCBieSB0aGUgcGFyaXR5IGJpdC4KICAgICAgICAgICAgRGVwZW5kaW5nIG9uIHRoZSBmcmFtZSBsZW5ndGggZGVmaW5lZCBieSB0aGUgTSBiaXQgKDgtYml0cyBvciA5LWJpdHMpLAogICAgICAgICAgICB0aGUgcG9zc2libGUgVUFSVCBmcmFtZSBmb3JtYXRzIGFyZSBhcyBsaXN0ZWQgaW4gdGhlIGZvbGxvd2luZyB0YWJsZToKQEAgLTY1Myw2ICs2OTEsNyBAQAogICBodWFydC0+RXJyb3JDb2RlID0gSEFMX1VBUlRfRVJST1JfTk9ORTsKICAgaHVhcnQtPmdTdGF0ZSA9IEhBTF9VQVJUX1NUQVRFX1JFU0VUOwogICBodWFydC0+UnhTdGF0ZSA9IEhBTF9VQVJUX1NUQVRFX1JFU0VUOworICBodWFydC0+UmVjZXB0aW9uVHlwZSA9IEhBTF9VQVJUX1JFQ0VQVElPTl9TVEFOREFSRDsKIAogICAvKiBQcm9jZXNzIFVubG9jayAqLwogICBfX0hBTF9VTkxPQ0soaHVhcnQpOwpAQCAtOTI2LDYgKzk2NSw3MyBAQAogCiAgIHJldHVybiBzdGF0dXM7CiB9CisKKy8qKgorICAqIEBicmllZiAgUmVnaXN0ZXIgYSBVc2VyIFVBUlQgUnggRXZlbnQgQ2FsbGJhY2sKKyAgKiAgICAgICAgIFRvIGJlIHVzZWQgaW5zdGVhZCBvZiB0aGUgd2VhayBwcmVkZWZpbmVkIGNhbGxiYWNrCisgICogQHBhcmFtICBodWFydCAgICAgVWFydCBoYW5kbGUKKyAgKiBAcGFyYW0gIHBDYWxsYmFjayBQb2ludGVyIHRvIHRoZSBSeCBFdmVudCBDYWxsYmFjayBmdW5jdGlvbgorICAqIEByZXR2YWwgSEFMIHN0YXR1cworICAqLworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1VBUlRfUmVnaXN0ZXJSeEV2ZW50Q2FsbGJhY2soVUFSVF9IYW5kbGVUeXBlRGVmICpodWFydCwgcFVBUlRfUnhFdmVudENhbGxiYWNrVHlwZURlZiBwQ2FsbGJhY2spCit7CisgIEhBTF9TdGF0dXNUeXBlRGVmIHN0YXR1cyA9IEhBTF9PSzsKKworICBpZiAocENhbGxiYWNrID09IE5VTEwpCisgIHsKKyAgICBodWFydC0+RXJyb3JDb2RlIHw9IEhBTF9VQVJUX0VSUk9SX0lOVkFMSURfQ0FMTEJBQ0s7CisKKyAgICByZXR1cm4gSEFMX0VSUk9SOworICB9CisKKyAgLyogUHJvY2VzcyBsb2NrZWQgKi8KKyAgX19IQUxfTE9DSyhodWFydCk7CisKKyAgaWYgKGh1YXJ0LT5nU3RhdGUgPT0gSEFMX1VBUlRfU1RBVEVfUkVBRFkpCisgIHsKKyAgICBodWFydC0+UnhFdmVudENhbGxiYWNrID0gcENhbGxiYWNrOworICB9CisgIGVsc2UKKyAgeworICAgIGh1YXJ0LT5FcnJvckNvZGUgfD0gSEFMX1VBUlRfRVJST1JfSU5WQUxJRF9DQUxMQkFDSzsKKworICAgIHN0YXR1cyA9ICBIQUxfRVJST1I7CisgIH0KKworICAvKiBSZWxlYXNlIExvY2sgKi8KKyAgX19IQUxfVU5MT0NLKGh1YXJ0KTsKKworICByZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAgKiBAYnJpZWYgIFVuUmVnaXN0ZXIgdGhlIFVBUlQgUnggRXZlbnQgQ2FsbGJhY2sKKyAgKiAgICAgICAgIFVBUlQgUnggRXZlbnQgQ2FsbGJhY2sgaXMgcmVkaXJlY3RlZCB0byB0aGUgd2VhayBIQUxfVUFSVEV4X1J4RXZlbnRDYWxsYmFjaygpIHByZWRlZmluZWQgY2FsbGJhY2sKKyAgKiBAcGFyYW0gIGh1YXJ0ICAgICBVYXJ0IGhhbmRsZQorICAqIEByZXR2YWwgSEFMIHN0YXR1cworICAqLworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1VBUlRfVW5SZWdpc3RlclJ4RXZlbnRDYWxsYmFjayhVQVJUX0hhbmRsZVR5cGVEZWYgKmh1YXJ0KQoreworICBIQUxfU3RhdHVzVHlwZURlZiBzdGF0dXMgPSBIQUxfT0s7CisKKyAgLyogUHJvY2VzcyBsb2NrZWQgKi8KKyAgX19IQUxfTE9DSyhodWFydCk7CisKKyAgaWYgKGh1YXJ0LT5nU3RhdGUgPT0gSEFMX1VBUlRfU1RBVEVfUkVBRFkpCisgIHsKKyAgICBodWFydC0+UnhFdmVudENhbGxiYWNrID0gSEFMX1VBUlRFeF9SeEV2ZW50Q2FsbGJhY2s7IC8qIExlZ2FjeSB3ZWFrIFVBUlQgUnggRXZlbnQgQ2FsbGJhY2sgICovCisgIH0KKyAgZWxzZQorICB7CisgICAgaHVhcnQtPkVycm9yQ29kZSB8PSBIQUxfVUFSVF9FUlJPUl9JTlZBTElEX0NBTExCQUNLOworCisgICAgc3RhdHVzID0gIEhBTF9FUlJPUjsKKyAgfQorCisgIC8qIFJlbGVhc2UgTG9jayAqLworICBfX0hBTF9VTkxPQ0soaHVhcnQpOworICByZXR1cm4gc3RhdHVzOworfQogI2VuZGlmIC8qIFVTRV9IQUxfVUFSVF9SRUdJU1RFUl9DQUxMQkFDS1MgKi8KIAogLyoqCkBAIC05OTEsNiArMTA5Nyw5IEBACiAgICAgICAgICgrKSBIQUxfVUFSVF9BYm9ydFRyYW5zbWl0Q3BsdENhbGxiYWNrKCkKICAgICAgICAgKCspIEhBTF9VQVJUX0Fib3J0UmVjZWl2ZUNwbHRDYWxsYmFjaygpCiAKKyAgICAoIykgQSBSeCBFdmVudCBSZWNlcHRpb24gQ2FsbGJhY2sgKFJ4IGV2ZW50IG5vdGlmaWNhdGlvbikgaXMgYXZhaWxhYmxlIGZvciBOb25fQmxvY2tpbmcgbW9kZXMgb2YgZW5oYW5jZWQgcmVjZXB0aW9uIHNlcnZpY2VzOgorICAgICAgICAoKykgSEFMX1VBUlRFeF9SeEV2ZW50Q2FsbGJhY2soKQorCiAgICAgKCMpIEluIE5vbi1CbG9ja2luZyBtb2RlIHRyYW5zZmVycywgcG9zc2libGUgZXJyb3JzIGFyZSBzcGxpdCBpbnRvIDIgY2F0ZWdvcmllcy4KICAgICAgICAgRXJyb3JzIGFyZSBoYW5kbGVkIGFzIGZvbGxvd3MgOgogICAgICAgICgrKSBFcnJvciBpcyBjb25zaWRlcmVkIGFzIFJlY292ZXJhYmxlIGFuZCBub24gYmxvY2tpbmcgOiBUcmFuc2ZlciBjb3VsZCBnbyB0aWxsIGVuZCwgYnV0IGVycm9yIHNldmVyaXR5IGlzCkBAIC0xMDIzLDcgKzExMzIsOCBAQAogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1VBUlRfVHJhbnNtaXQoVUFSVF9IYW5kbGVUeXBlRGVmICpodWFydCwgdWludDhfdCAqcERhdGEsIHVpbnQxNl90IFNpemUsIHVpbnQzMl90IFRpbWVvdXQpCiB7Ci0gIHVpbnQxNl90ICp0bXA7CisgIHVpbnQ4X3QgICpwZGF0YThiaXRzOworICB1aW50MTZfdCAqcGRhdGExNmJpdHM7CiAgIHVpbnQzMl90IHRpY2tzdGFydCA9IDBVOwogCiAgIC8qIENoZWNrIHRoYXQgYSBUeCBwcm9jZXNzIGlzIG5vdCBhbHJlYWR5IG9uZ29pbmcgKi8KQEAgLTEwNDAsNDMgKzExNTAsNDQgQEAKICAgICBodWFydC0+RXJyb3JDb2RlID0gSEFMX1VBUlRfRVJST1JfTk9ORTsKICAgICBodWFydC0+Z1N0YXRlID0gSEFMX1VBUlRfU1RBVEVfQlVTWV9UWDsKIAotICAgIC8qIEluaXQgdGlja3N0YXJ0IGZvciB0aW1lb3V0IG1hbmFnbWVudCAqLworICAgIC8qIEluaXQgdGlja3N0YXJ0IGZvciB0aW1lb3V0IG1hbmFnZW1lbnQgKi8KICAgICB0aWNrc3RhcnQgPSBIQUxfR2V0VGljaygpOwogCiAgICAgaHVhcnQtPlR4WGZlclNpemUgPSBTaXplOwogICAgIGh1YXJ0LT5UeFhmZXJDb3VudCA9IFNpemU7CiAKKyAgICAvKiBJbiBjYXNlIG9mIDliaXRzL05vIFBhcml0eSB0cmFuc2ZlciwgcERhdGEgbmVlZHMgdG8gYmUgaGFuZGxlZCBhcyBhIHVpbnQxNl90IHBvaW50ZXIgKi8KKyAgICBpZiAoKGh1YXJ0LT5Jbml0LldvcmRMZW5ndGggPT0gVUFSVF9XT1JETEVOR1RIXzlCKSAmJiAoaHVhcnQtPkluaXQuUGFyaXR5ID09IFVBUlRfUEFSSVRZX05PTkUpKQorICAgIHsKKyAgICAgIHBkYXRhOGJpdHMgID0gTlVMTDsKKyAgICAgIHBkYXRhMTZiaXRzID0gKHVpbnQxNl90ICopIHBEYXRhOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgcGRhdGE4Yml0cyAgPSBwRGF0YTsKKyAgICAgIHBkYXRhMTZiaXRzID0gTlVMTDsKKyAgICB9CisKICAgICAvKiBQcm9jZXNzIFVubG9ja2VkICovCiAgICAgX19IQUxfVU5MT0NLKGh1YXJ0KTsKIAogICAgIHdoaWxlIChodWFydC0+VHhYZmVyQ291bnQgPiAwVSkKICAgICB7Ci0gICAgICBodWFydC0+VHhYZmVyQ291bnQtLTsKLSAgICAgIGlmIChodWFydC0+SW5pdC5Xb3JkTGVuZ3RoID09IFVBUlRfV09SRExFTkdUSF85QikKKyAgICAgIGlmIChVQVJUX1dhaXRPbkZsYWdVbnRpbFRpbWVvdXQoaHVhcnQsIFVBUlRfRkxBR19UWEUsIFJFU0VULCB0aWNrc3RhcnQsIFRpbWVvdXQpICE9IEhBTF9PSykKICAgICAgIHsKLSAgICAgICAgaWYgKFVBUlRfV2FpdE9uRmxhZ1VudGlsVGltZW91dChodWFydCwgVUFSVF9GTEFHX1RYRSwgUkVTRVQsIHRpY2tzdGFydCwgVGltZW91dCkgIT0gSEFMX09LKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIEhBTF9USU1FT1VUOwotICAgICAgICB9Ci0gICAgICAgIHRtcCA9ICh1aW50MTZfdCAqKSBwRGF0YTsKLSAgICAgICAgaHVhcnQtPkluc3RhbmNlLT5EUiA9ICgqdG1wICYgKHVpbnQxNl90KTB4MDFGRik7Ci0gICAgICAgIGlmIChodWFydC0+SW5pdC5QYXJpdHkgPT0gVUFSVF9QQVJJVFlfTk9ORSkKLSAgICAgICAgewotICAgICAgICAgIHBEYXRhICs9IDJVOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIHBEYXRhICs9IDFVOwotICAgICAgICB9CisgICAgICAgIHJldHVybiBIQUxfVElNRU9VVDsKKyAgICAgIH0KKyAgICAgIGlmIChwZGF0YThiaXRzID09IE5VTEwpCisgICAgICB7CisgICAgICAgIGh1YXJ0LT5JbnN0YW5jZS0+RFIgPSAodWludDE2X3QpKCpwZGF0YTE2Yml0cyAmIDB4MDFGRlUpOworICAgICAgICBwZGF0YTE2Yml0cysrOwogICAgICAgfQogICAgICAgZWxzZQogICAgICAgewotICAgICAgICBpZiAoVUFSVF9XYWl0T25GbGFnVW50aWxUaW1lb3V0KGh1YXJ0LCBVQVJUX0ZMQUdfVFhFLCBSRVNFVCwgdGlja3N0YXJ0LCBUaW1lb3V0KSAhPSBIQUxfT0spCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gSEFMX1RJTUVPVVQ7Ci0gICAgICAgIH0KLSAgICAgICAgaHVhcnQtPkluc3RhbmNlLT5EUiA9ICgqcERhdGErKyAmICh1aW50OF90KTB4RkYpOworICAgICAgICBodWFydC0+SW5zdGFuY2UtPkRSID0gKHVpbnQ4X3QpKCpwZGF0YThiaXRzICYgMHhGRlUpOworICAgICAgICBwZGF0YThiaXRzKys7CiAgICAgICB9CisgICAgICBodWFydC0+VHhYZmVyQ291bnQtLTsKICAgICB9CiAKICAgICBpZiAoVUFSVF9XYWl0T25GbGFnVW50aWxUaW1lb3V0KGh1YXJ0LCBVQVJUX0ZMQUdfVEMsIFJFU0VULCB0aWNrc3RhcnQsIFRpbWVvdXQpICE9IEhBTF9PSykKQEAgLTExMDksNyArMTIyMCw4IEBACiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfVUFSVF9SZWNlaXZlKFVBUlRfSGFuZGxlVHlwZURlZiAqaHVhcnQsIHVpbnQ4X3QgKnBEYXRhLCB1aW50MTZfdCBTaXplLCB1aW50MzJfdCBUaW1lb3V0KQogewotICB1aW50MTZfdCAqdG1wOworICB1aW50OF90ICAqcGRhdGE4Yml0czsKKyAgdWludDE2X3QgKnBkYXRhMTZiaXRzOwogICB1aW50MzJfdCB0aWNrc3RhcnQgPSAwVTsKIAogICAvKiBDaGVjayB0aGF0IGEgUnggcHJvY2VzcyBpcyBub3QgYWxyZWFkeSBvbmdvaW5nICovCkBAIC0xMTI1LDU1ICsxMjM3LDU0IEBACiAKICAgICBodWFydC0+RXJyb3JDb2RlID0gSEFMX1VBUlRfRVJST1JfTk9ORTsKICAgICBodWFydC0+UnhTdGF0ZSA9IEhBTF9VQVJUX1NUQVRFX0JVU1lfUlg7CisgICAgaHVhcnQtPlJlY2VwdGlvblR5cGUgPSBIQUxfVUFSVF9SRUNFUFRJT05fU1RBTkRBUkQ7CiAKLSAgICAvKiBJbml0IHRpY2tzdGFydCBmb3IgdGltZW91dCBtYW5hZ21lbnQgKi8KKyAgICAvKiBJbml0IHRpY2tzdGFydCBmb3IgdGltZW91dCBtYW5hZ2VtZW50ICovCiAgICAgdGlja3N0YXJ0ID0gSEFMX0dldFRpY2soKTsKIAogICAgIGh1YXJ0LT5SeFhmZXJTaXplID0gU2l6ZTsKICAgICBodWFydC0+UnhYZmVyQ291bnQgPSBTaXplOwogCisgICAgLyogSW4gY2FzZSBvZiA5Yml0cy9ObyBQYXJpdHkgdHJhbnNmZXIsIHBSeERhdGEgbmVlZHMgdG8gYmUgaGFuZGxlZCBhcyBhIHVpbnQxNl90IHBvaW50ZXIgKi8KKyAgICBpZiAoKGh1YXJ0LT5Jbml0LldvcmRMZW5ndGggPT0gVUFSVF9XT1JETEVOR1RIXzlCKSAmJiAoaHVhcnQtPkluaXQuUGFyaXR5ID09IFVBUlRfUEFSSVRZX05PTkUpKQorICAgIHsKKyAgICAgIHBkYXRhOGJpdHMgID0gTlVMTDsKKyAgICAgIHBkYXRhMTZiaXRzID0gKHVpbnQxNl90ICopIHBEYXRhOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgcGRhdGE4Yml0cyAgPSBwRGF0YTsKKyAgICAgIHBkYXRhMTZiaXRzID0gTlVMTDsKKyAgICB9CisKICAgICAvKiBQcm9jZXNzIFVubG9ja2VkICovCiAgICAgX19IQUxfVU5MT0NLKGh1YXJ0KTsKIAogICAgIC8qIENoZWNrIHRoZSByZW1haW4gZGF0YSB0byBiZSByZWNlaXZlZCAqLwogICAgIHdoaWxlIChodWFydC0+UnhYZmVyQ291bnQgPiAwVSkKICAgICB7Ci0gICAgICBodWFydC0+UnhYZmVyQ291bnQtLTsKLSAgICAgIGlmIChodWFydC0+SW5pdC5Xb3JkTGVuZ3RoID09IFVBUlRfV09SRExFTkdUSF85QikKKyAgICAgIGlmIChVQVJUX1dhaXRPbkZsYWdVbnRpbFRpbWVvdXQoaHVhcnQsIFVBUlRfRkxBR19SWE5FLCBSRVNFVCwgdGlja3N0YXJ0LCBUaW1lb3V0KSAhPSBIQUxfT0spCiAgICAgICB7Ci0gICAgICAgIGlmIChVQVJUX1dhaXRPbkZsYWdVbnRpbFRpbWVvdXQoaHVhcnQsIFVBUlRfRkxBR19SWE5FLCBSRVNFVCwgdGlja3N0YXJ0LCBUaW1lb3V0KSAhPSBIQUxfT0spCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gSEFMX1RJTUVPVVQ7Ci0gICAgICAgIH0KLSAgICAgICAgdG1wID0gKHVpbnQxNl90ICopIHBEYXRhOwotICAgICAgICBpZiAoaHVhcnQtPkluaXQuUGFyaXR5ID09IFVBUlRfUEFSSVRZX05PTkUpCi0gICAgICAgIHsKLSAgICAgICAgICAqdG1wID0gKHVpbnQxNl90KShodWFydC0+SW5zdGFuY2UtPkRSICYgKHVpbnQxNl90KTB4MDFGRik7Ci0gICAgICAgICAgcERhdGEgKz0gMlU7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgKnRtcCA9ICh1aW50MTZfdCkoaHVhcnQtPkluc3RhbmNlLT5EUiAmICh1aW50MTZfdCkweDAwRkYpOwotICAgICAgICAgIHBEYXRhICs9IDFVOwotICAgICAgICB9Ci0KKyAgICAgICAgcmV0dXJuIEhBTF9USU1FT1VUOworICAgICAgfQorICAgICAgaWYgKHBkYXRhOGJpdHMgPT0gTlVMTCkKKyAgICAgIHsKKyAgICAgICAgKnBkYXRhMTZiaXRzID0gKHVpbnQxNl90KShodWFydC0+SW5zdGFuY2UtPkRSICYgMHgwMUZGKTsKKyAgICAgICAgcGRhdGExNmJpdHMrKzsKICAgICAgIH0KICAgICAgIGVsc2UKICAgICAgIHsKLSAgICAgICAgaWYgKFVBUlRfV2FpdE9uRmxhZ1VudGlsVGltZW91dChodWFydCwgVUFSVF9GTEFHX1JYTkUsIFJFU0VULCB0aWNrc3RhcnQsIFRpbWVvdXQpICE9IEhBTF9PSykKKyAgICAgICAgaWYgKChodWFydC0+SW5pdC5Xb3JkTGVuZ3RoID09IFVBUlRfV09SRExFTkdUSF85QikgfHwgKChodWFydC0+SW5pdC5Xb3JkTGVuZ3RoID09IFVBUlRfV09SRExFTkdUSF84QikgJiYgKGh1YXJ0LT5Jbml0LlBhcml0eSA9PSBVQVJUX1BBUklUWV9OT05FKSkpCiAgICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gSEFMX1RJTUVPVVQ7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGh1YXJ0LT5Jbml0LlBhcml0eSA9PSBVQVJUX1BBUklUWV9OT05FKQotICAgICAgICB7Ci0gICAgICAgICAgKnBEYXRhKysgPSAodWludDhfdCkoaHVhcnQtPkluc3RhbmNlLT5EUiAmICh1aW50OF90KTB4MDBGRik7CisgICAgICAgICAgKnBkYXRhOGJpdHMgPSAodWludDhfdCkoaHVhcnQtPkluc3RhbmNlLT5EUiAmICh1aW50OF90KTB4MDBGRik7CiAgICAgICAgIH0KICAgICAgICAgZWxzZQogICAgICAgICB7Ci0gICAgICAgICAgKnBEYXRhKysgPSAodWludDhfdCkoaHVhcnQtPkluc3RhbmNlLT5EUiAmICh1aW50OF90KTB4MDA3Rik7CisgICAgICAgICAgKnBkYXRhOGJpdHMgPSAodWludDhfdCkoaHVhcnQtPkluc3RhbmNlLT5EUiAmICh1aW50OF90KTB4MDA3Rik7CiAgICAgICAgIH0KLQorICAgICAgICBwZGF0YThiaXRzKys7CiAgICAgICB9CisgICAgICBodWFydC0+UnhYZmVyQ291bnQtLTsKICAgICB9CiAKICAgICAvKiBBdCBlbmQgb2YgUnggcHJvY2VzcywgcmVzdG9yZSBodWFydC0+UnhTdGF0ZSB0byBSZWFkeSAqLwpAQCAtMTI1NiwyNiArMTM2NywxMCBAQAogICAgIC8qIFByb2Nlc3MgTG9ja2VkICovCiAgICAgX19IQUxfTE9DSyhodWFydCk7CiAKLSAgICBodWFydC0+cFJ4QnVmZlB0ciA9IHBEYXRhOwotICAgIGh1YXJ0LT5SeFhmZXJTaXplID0gU2l6ZTsKLSAgICBodWFydC0+UnhYZmVyQ291bnQgPSBTaXplOworICAgIC8qIFNldCBSZWNlcHRpb24gdHlwZSB0byBTdGFuZGFyZCByZWNlcHRpb24gKi8KKyAgICBodWFydC0+UmVjZXB0aW9uVHlwZSA9IEhBTF9VQVJUX1JFQ0VQVElPTl9TVEFOREFSRDsKIAotICAgIGh1YXJ0LT5FcnJvckNvZGUgPSBIQUxfVUFSVF9FUlJPUl9OT05FOwotICAgIGh1YXJ0LT5SeFN0YXRlID0gSEFMX1VBUlRfU1RBVEVfQlVTWV9SWDsKLQotICAgIC8qIFByb2Nlc3MgVW5sb2NrZWQgKi8KLSAgICBfX0hBTF9VTkxPQ0soaHVhcnQpOwotCi0gICAgLyogRW5hYmxlIHRoZSBVQVJUIFBhcml0eSBFcnJvciBJbnRlcnJ1cHQgKi8KLSAgICBfX0hBTF9VQVJUX0VOQUJMRV9JVChodWFydCwgVUFSVF9JVF9QRSk7Ci0KLSAgICAvKiBFbmFibGUgdGhlIFVBUlQgRXJyb3IgSW50ZXJydXB0OiAoRnJhbWUgZXJyb3IsIG5vaXNlIGVycm9yLCBvdmVycnVuIGVycm9yKSAqLwotICAgIF9fSEFMX1VBUlRfRU5BQkxFX0lUKGh1YXJ0LCBVQVJUX0lUX0VSUik7Ci0KLSAgICAvKiBFbmFibGUgdGhlIFVBUlQgRGF0YSBSZWdpc3RlciBub3QgZW1wdHkgSW50ZXJydXB0ICovCi0gICAgX19IQUxfVUFSVF9FTkFCTEVfSVQoaHVhcnQsIFVBUlRfSVRfUlhORSk7Ci0KLSAgICByZXR1cm4gSEFMX09LOworICAgIHJldHVybihVQVJUX1N0YXJ0X1JlY2VpdmVfSVQoaHVhcnQsIHBEYXRhLCBTaXplKSk7CiAgIH0KICAgZWxzZQogICB7CkBAIC0xMzY0LDggKzE0NTksNiBAQAogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1VBUlRfUmVjZWl2ZV9ETUEoVUFSVF9IYW5kbGVUeXBlRGVmICpodWFydCwgdWludDhfdCAqcERhdGEsIHVpbnQxNl90IFNpemUpCiB7Ci0gIHVpbnQzMl90ICp0bXA7Ci0KICAgLyogQ2hlY2sgdGhhdCBhIFJ4IHByb2Nlc3MgaXMgbm90IGFscmVhZHkgb25nb2luZyAqLwogICBpZiAoaHVhcnQtPlJ4U3RhdGUgPT0gSEFMX1VBUlRfU1RBVEVfUkVBRFkpCiAgIHsKQEAgLTEzNzcsNDUgKzE0NzAsMTAgQEAKICAgICAvKiBQcm9jZXNzIExvY2tlZCAqLwogICAgIF9fSEFMX0xPQ0soaHVhcnQpOwogCi0gICAgaHVhcnQtPnBSeEJ1ZmZQdHIgPSBwRGF0YTsKLSAgICBodWFydC0+UnhYZmVyU2l6ZSA9IFNpemU7CisgICAgLyogU2V0IFJlY2VwdGlvbiB0eXBlIHRvIFN0YW5kYXJkIHJlY2VwdGlvbiAqLworICAgIGh1YXJ0LT5SZWNlcHRpb25UeXBlID0gSEFMX1VBUlRfUkVDRVBUSU9OX1NUQU5EQVJEOwogCi0gICAgaHVhcnQtPkVycm9yQ29kZSA9IEhBTF9VQVJUX0VSUk9SX05PTkU7Ci0gICAgaHVhcnQtPlJ4U3RhdGUgPSBIQUxfVUFSVF9TVEFURV9CVVNZX1JYOwotCi0gICAgLyogU2V0IHRoZSBVQVJUIERNQSB0cmFuc2ZlciBjb21wbGV0ZSBjYWxsYmFjayAqLwotICAgIGh1YXJ0LT5oZG1hcngtPlhmZXJDcGx0Q2FsbGJhY2sgPSBVQVJUX0RNQVJlY2VpdmVDcGx0OwotCi0gICAgLyogU2V0IHRoZSBVQVJUIERNQSBIYWxmIHRyYW5zZmVyIGNvbXBsZXRlIGNhbGxiYWNrICovCi0gICAgaHVhcnQtPmhkbWFyeC0+WGZlckhhbGZDcGx0Q2FsbGJhY2sgPSBVQVJUX0RNQVJ4SGFsZkNwbHQ7Ci0KLSAgICAvKiBTZXQgdGhlIERNQSBlcnJvciBjYWxsYmFjayAqLwotICAgIGh1YXJ0LT5oZG1hcngtPlhmZXJFcnJvckNhbGxiYWNrID0gVUFSVF9ETUFFcnJvcjsKLQotICAgIC8qIFNldCB0aGUgRE1BIGFib3J0IGNhbGxiYWNrICovCi0gICAgaHVhcnQtPmhkbWFyeC0+WGZlckFib3J0Q2FsbGJhY2sgPSBOVUxMOwotCi0gICAgLyogRW5hYmxlIHRoZSBETUEgc3RyZWFtICovCi0gICAgdG1wID0gKHVpbnQzMl90ICopJnBEYXRhOwotICAgIEhBTF9ETUFfU3RhcnRfSVQoaHVhcnQtPmhkbWFyeCwgKHVpbnQzMl90KSZodWFydC0+SW5zdGFuY2UtPkRSLCAqKHVpbnQzMl90ICopdG1wLCBTaXplKTsKLQotICAgIC8qIENsZWFyIHRoZSBPdmVycnVuIGZsYWcganVzdCBiZWZvcmUgZW5hYmxpbmcgdGhlIERNQSBSeCByZXF1ZXN0OiBjYW4gYmUgbWFuZGF0b3J5IGZvciB0aGUgc2Vjb25kIHRyYW5zZmVyICovCi0gICAgX19IQUxfVUFSVF9DTEVBUl9PUkVGTEFHKGh1YXJ0KTsKLQotICAgIC8qIFByb2Nlc3MgVW5sb2NrZWQgKi8KLSAgICBfX0hBTF9VTkxPQ0soaHVhcnQpOwotCi0gICAgLyogRW5hYmxlIHRoZSBVQVJUIFBhcml0eSBFcnJvciBJbnRlcnJ1cHQgKi8KLSAgICBTRVRfQklUKGh1YXJ0LT5JbnN0YW5jZS0+Q1IxLCBVU0FSVF9DUjFfUEVJRSk7Ci0KLSAgICAvKiBFbmFibGUgdGhlIFVBUlQgRXJyb3IgSW50ZXJydXB0OiAoRnJhbWUgZXJyb3IsIG5vaXNlIGVycm9yLCBvdmVycnVuIGVycm9yKSAqLwotICAgIFNFVF9CSVQoaHVhcnQtPkluc3RhbmNlLT5DUjMsIFVTQVJUX0NSM19FSUUpOwotCi0gICAgLyogRW5hYmxlIHRoZSBETUEgdHJhbnNmZXIgZm9yIHRoZSByZWNlaXZlciByZXF1ZXN0IGJ5IHNldHRpbmcgdGhlIERNQVIgYml0Ci0gICAgaW4gdGhlIFVBUlQgQ1IzIHJlZ2lzdGVyICovCi0gICAgU0VUX0JJVChodWFydC0+SW5zdGFuY2UtPkNSMywgVVNBUlRfQ1IzX0RNQVIpOwotCi0gICAgcmV0dXJuIEhBTF9PSzsKKyAgICByZXR1cm4oVUFSVF9TdGFydF9SZWNlaXZlX0RNQShodWFydCwgcERhdGEsIFNpemUpKTsKICAgfQogICBlbHNlCiAgIHsKQEAgLTE0ODIsNyArMTU0MCw3IEBACiAgICAgLyogQ2xlYXIgdGhlIE92ZXJydW4gZmxhZyBiZWZvcmUgcmVzdW1pbmcgdGhlIFJ4IHRyYW5zZmVyKi8KICAgICBfX0hBTF9VQVJUX0NMRUFSX09SRUZMQUcoaHVhcnQpOwogCi0gICAgLyogUmVlbmFibGUgUEUgYW5kIEVSUiAoRnJhbWUgZXJyb3IsIG5vaXNlIGVycm9yLCBvdmVycnVuIGVycm9yKSBpbnRlcnJ1cHRzICovCisgICAgLyogUmUtZW5hYmxlIFBFIGFuZCBFUlIgKEZyYW1lIGVycm9yLCBub2lzZSBlcnJvciwgb3ZlcnJ1biBlcnJvcikgaW50ZXJydXB0cyAqLwogICAgIFNFVF9CSVQoaHVhcnQtPkluc3RhbmNlLT5DUjEsIFVTQVJUX0NSMV9QRUlFKTsKICAgICBTRVRfQklUKGh1YXJ0LT5JbnN0YW5jZS0+Q1IzLCBVU0FSVF9DUjNfRUlFKTsKIApAQCAtMTU0Myw2ICsxNjAxLDI1MyBAQAogfQogCiAvKioKKyAgKiBAYnJpZWYgUmVjZWl2ZSBhbiBhbW91bnQgb2YgZGF0YSBpbiBibG9ja2luZyBtb2RlIHRpbGwgZWl0aGVyIHRoZSBleHBlY3RlZCBudW1iZXIgb2YgZGF0YSBpcyByZWNlaXZlZCBvciBhbiBJRExFIGV2ZW50IG9jY3Vycy4KKyAgKiBAbm90ZSAgIEhBTF9PSyBpcyByZXR1cm5lZCBpZiByZWNlcHRpb24gaXMgY29tcGxldGVkIChleHBlY3RlZCBudW1iZXIgb2YgZGF0YSBoYXMgYmVlbiByZWNlaXZlZCkKKyAgKiAgICAgICAgIG9yIGlmIHJlY2VwdGlvbiBpcyBzdG9wcGVkIGFmdGVyIElETEUgZXZlbnQgKGxlc3MgdGhhbiB0aGUgZXhwZWN0ZWQgbnVtYmVyIG9mIGRhdGEgaGFzIGJlZW4gcmVjZWl2ZWQpCisgICogICAgICAgICBJbiB0aGlzIGNhc2UsIFJ4TGVuIG91dHB1dCBwYXJhbWV0ZXIgaW5kaWNhdGVzIG51bWJlciBvZiBkYXRhIGF2YWlsYWJsZSBpbiByZWNlcHRpb24gYnVmZmVyLgorICAqIEBub3RlICAgV2hlbiBVQVJUIHBhcml0eSBpcyBub3QgZW5hYmxlZCAoUENFID0gMCksIGFuZCBXb3JkIExlbmd0aCBpcyBjb25maWd1cmVkIHRvIDkgYml0cyAoTSA9IDAxKSwKKyAgKiAgICAgICAgIHRoZSByZWNlaXZlZCBkYXRhIGlzIGhhbmRsZWQgYXMgYSBzZXQgb2YgdWludDE2X3QuIEluIHRoaXMgY2FzZSwgU2l6ZSBtdXN0IGluZGljYXRlIHRoZSBudW1iZXIKKyAgKiAgICAgICAgIG9mIHVpbnQxNl90IGF2YWlsYWJsZSB0aHJvdWdoIHBEYXRhLgorICAqIEBwYXJhbSBodWFydCAgIFVBUlQgaGFuZGxlLgorICAqIEBwYXJhbSBwRGF0YSAgIFBvaW50ZXIgdG8gZGF0YSBidWZmZXIgKHVpbnQ4X3Qgb3IgdWludDE2X3QgZGF0YSBlbGVtZW50cykuCisgICogQHBhcmFtIFNpemUgICAgQW1vdW50IG9mIGRhdGEgZWxlbWVudHMgKHVpbnQ4X3Qgb3IgdWludDE2X3QpIHRvIGJlIHJlY2VpdmVkLgorICAqIEBwYXJhbSBSeExlbiAgIE51bWJlciBvZiBkYXRhIGVsZW1lbnRzIGZpbmFsbHkgcmVjZWl2ZWQgKGNvdWxkIGJlIGxvd2VyIHRoYW4gU2l6ZSwgaW4gY2FzZSByZWNlcHRpb24gZW5kcyBvbiBJRExFIGV2ZW50KQorICAqIEBwYXJhbSBUaW1lb3V0IFRpbWVvdXQgZHVyYXRpb24gZXhwcmVzc2VkIGluIG1zIChjb3ZlcnMgdGhlIHdob2xlIHJlY2VwdGlvbiBzZXF1ZW5jZSkuCisgICogQHJldHZhbCBIQUwgc3RhdHVzCisgICovCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfVUFSVEV4X1JlY2VpdmVUb0lkbGUoVUFSVF9IYW5kbGVUeXBlRGVmICpodWFydCwgdWludDhfdCAqcERhdGEsIHVpbnQxNl90IFNpemUsIHVpbnQxNl90ICpSeExlbiwgdWludDMyX3QgVGltZW91dCkKK3sKKyAgdWludDhfdCAgKnBkYXRhOGJpdHM7CisgIHVpbnQxNl90ICpwZGF0YTE2Yml0czsKKyAgdWludDMyX3QgdGlja3N0YXJ0OworCisgIC8qIENoZWNrIHRoYXQgYSBSeCBwcm9jZXNzIGlzIG5vdCBhbHJlYWR5IG9uZ29pbmcgKi8KKyAgaWYgKGh1YXJ0LT5SeFN0YXRlID09IEhBTF9VQVJUX1NUQVRFX1JFQURZKQorICB7CisgICAgaWYgKChwRGF0YSA9PSBOVUxMKSB8fCAoU2l6ZSA9PSAwVSkpCisgICAgeworICAgICAgcmV0dXJuICBIQUxfRVJST1I7CisgICAgfQorCisgICAgX19IQUxfTE9DSyhodWFydCk7CisKKyAgICBodWFydC0+RXJyb3JDb2RlID0gSEFMX1VBUlRfRVJST1JfTk9ORTsKKyAgICBodWFydC0+UnhTdGF0ZSA9IEhBTF9VQVJUX1NUQVRFX0JVU1lfUlg7CisgICAgaHVhcnQtPlJlY2VwdGlvblR5cGUgPSBIQUxfVUFSVF9SRUNFUFRJT05fVE9JRExFOworCisgICAgLyogSW5pdCB0aWNrc3RhcnQgZm9yIHRpbWVvdXQgbWFuYWdlbWVudCAqLworICAgIHRpY2tzdGFydCA9IEhBTF9HZXRUaWNrKCk7CisKKyAgICBodWFydC0+UnhYZmVyU2l6ZSAgPSBTaXplOworICAgIGh1YXJ0LT5SeFhmZXJDb3VudCA9IFNpemU7CisKKyAgICAvKiBJbiBjYXNlIG9mIDliaXRzL05vIFBhcml0eSB0cmFuc2ZlciwgcFJ4RGF0YSBuZWVkcyB0byBiZSBoYW5kbGVkIGFzIGEgdWludDE2X3QgcG9pbnRlciAqLworICAgIGlmICgoaHVhcnQtPkluaXQuV29yZExlbmd0aCA9PSBVQVJUX1dPUkRMRU5HVEhfOUIpICYmIChodWFydC0+SW5pdC5QYXJpdHkgPT0gVUFSVF9QQVJJVFlfTk9ORSkpCisgICAgeworICAgICAgcGRhdGE4Yml0cyAgPSBOVUxMOworICAgICAgcGRhdGExNmJpdHMgPSAodWludDE2X3QgKikgcERhdGE7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICBwZGF0YThiaXRzICA9IHBEYXRhOworICAgICAgcGRhdGExNmJpdHMgPSBOVUxMOworICAgIH0KKworICAgIF9fSEFMX1VOTE9DSyhodWFydCk7CisKKyAgICAvKiBJbml0aWFsaXplIG91dHB1dCBudW1iZXIgb2YgcmVjZWl2ZWQgZWxlbWVudHMgKi8KKyAgICAqUnhMZW4gPSAwVTsKKworICAgIC8qIGFzIGxvbmcgYXMgZGF0YSBoYXZlIHRvIGJlIHJlY2VpdmVkICovCisgICAgd2hpbGUgKGh1YXJ0LT5SeFhmZXJDb3VudCA+IDBVKQorICAgIHsKKyAgICAgIC8qIENoZWNrIGlmIElETEUgZmxhZyBpcyBzZXQgKi8KKyAgICAgIGlmIChfX0hBTF9VQVJUX0dFVF9GTEFHKGh1YXJ0LCBVQVJUX0ZMQUdfSURMRSkpCisgICAgICB7CisgICAgICAgIC8qIENsZWFyIElETEUgZmxhZyBpbiBJU1IgKi8KKyAgICAgICAgX19IQUxfVUFSVF9DTEVBUl9JRExFRkxBRyhodWFydCk7CisKKyAgICAgICAgLyogSWYgU2V0LCBidXQgbm8gZGF0YSBldmVyIHJlY2VpdmVkLCBjbGVhciBmbGFnIHdpdGhvdXQgZXhpdGluZyBsb29wICovCisgICAgICAgIC8qIElmIFNldCwgYW5kIGRhdGEgaGFzIGFscmVhZHkgYmVlbiByZWNlaXZlZCwgdGhpcyBtZWFucyBJZGxlIEV2ZW50IGlzIHZhbGlkIDogRW5kIHJlY2VwdGlvbiAqLworICAgICAgICBpZiAoKlJ4TGVuID4gMFUpCisgICAgICAgIHsKKyAgICAgICAgICBodWFydC0+UnhTdGF0ZSA9IEhBTF9VQVJUX1NUQVRFX1JFQURZOworCisgICAgICAgICAgcmV0dXJuIEhBTF9PSzsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICAvKiBDaGVjayBpZiBSWE5FIGZsYWcgaXMgc2V0ICovCisgICAgICBpZiAoX19IQUxfVUFSVF9HRVRfRkxBRyhodWFydCwgVUFSVF9GTEFHX1JYTkUpKQorICAgICAgeworICAgICAgICBpZiAocGRhdGE4Yml0cyA9PSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgKnBkYXRhMTZiaXRzID0gKHVpbnQxNl90KShodWFydC0+SW5zdGFuY2UtPkRSICYgKHVpbnQxNl90KTB4MDFGRik7CisgICAgICAgICAgcGRhdGExNmJpdHMrKzsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgaWYgKChodWFydC0+SW5pdC5Xb3JkTGVuZ3RoID09IFVBUlRfV09SRExFTkdUSF85QikgfHwgKChodWFydC0+SW5pdC5Xb3JkTGVuZ3RoID09IFVBUlRfV09SRExFTkdUSF84QikgJiYgKGh1YXJ0LT5Jbml0LlBhcml0eSA9PSBVQVJUX1BBUklUWV9OT05FKSkpCisgICAgICAgICAgIHsKKyAgICAgICAgICAgICAqcGRhdGE4Yml0cyA9ICh1aW50OF90KShodWFydC0+SW5zdGFuY2UtPkRSICYgKHVpbnQ4X3QpMHgwMEZGKTsKKyAgICAgICAgICAgfQorICAgICAgICAgICBlbHNlCisgICAgICAgICAgIHsKKyAgICAgICAgICAgICAqcGRhdGE4Yml0cyA9ICh1aW50OF90KShodWFydC0+SW5zdGFuY2UtPkRSICYgKHVpbnQ4X3QpMHgwMDdGKTsKKyAgICAgICAgICAgfQorCisgICAgICAgICAgcGRhdGE4Yml0cysrOworICAgICAgICB9CisgICAgICAgIC8qIEluY3JlbWVudCBudW1iZXIgb2YgcmVjZWl2ZWQgZWxlbWVudHMgKi8KKyAgICAgICAgKlJ4TGVuICs9IDFVOworICAgICAgICBodWFydC0+UnhYZmVyQ291bnQtLTsKKyAgICAgIH0KKworICAgICAgLyogQ2hlY2sgZm9yIHRoZSBUaW1lb3V0ICovCisgICAgICBpZiAoVGltZW91dCAhPSBIQUxfTUFYX0RFTEFZKQorICAgICAgeworICAgICAgICBpZiAoKChIQUxfR2V0VGljaygpIC0gdGlja3N0YXJ0KSA+IFRpbWVvdXQpIHx8IChUaW1lb3V0ID09IDBVKSkKKyAgICAgICAgeworICAgICAgICAgIGh1YXJ0LT5SeFN0YXRlID0gSEFMX1VBUlRfU1RBVEVfUkVBRFk7CisKKyAgICAgICAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyAgICAvKiBTZXQgbnVtYmVyIG9mIHJlY2VpdmVkIGVsZW1lbnRzIGluIG91dHB1dCBwYXJhbWV0ZXIgOiBSeExlbiAqLworICAgICpSeExlbiA9IGh1YXJ0LT5SeFhmZXJTaXplIC0gaHVhcnQtPlJ4WGZlckNvdW50OworICAgIC8qIEF0IGVuZCBvZiBSeCBwcm9jZXNzLCByZXN0b3JlIGh1YXJ0LT5SeFN0YXRlIHRvIFJlYWR5ICovCisgICAgaHVhcnQtPlJ4U3RhdGUgPSBIQUxfVUFSVF9TVEFURV9SRUFEWTsKKworICAgIHJldHVybiBIQUxfT0s7CisgIH0KKyAgZWxzZQorICB7CisgICAgcmV0dXJuIEhBTF9CVVNZOworICB9Cit9CisKKy8qKgorICAqIEBicmllZiBSZWNlaXZlIGFuIGFtb3VudCBvZiBkYXRhIGluIGludGVycnVwdCBtb2RlIHRpbGwgZWl0aGVyIHRoZSBleHBlY3RlZCBudW1iZXIgb2YgZGF0YSBpcyByZWNlaXZlZCBvciBhbiBJRExFIGV2ZW50IG9jY3Vycy4KKyAgKiBAbm90ZSAgIFJlY2VwdGlvbiBpcyBpbml0aWF0ZWQgYnkgdGhpcyBmdW5jdGlvbiBjYWxsLiBGdXJ0aGVyIHByb2dyZXNzIG9mIHJlY2VwdGlvbiBpcyBhY2hpZXZlZCB0aGFua3MKKyAgKiAgICAgICAgIHRvIFVBUlQgaW50ZXJydXB0cyByYWlzZWQgYnkgUlhORSBhbmQgSURMRSBldmVudHMuIENhbGxiYWNrIGlzIGNhbGxlZCBhdCBlbmQgb2YgcmVjZXB0aW9uIGluZGljYXRpbmcKKyAgKiAgICAgICAgIG51bWJlciBvZiByZWNlaXZlZCBkYXRhIGVsZW1lbnRzLgorICAqIEBub3RlICAgV2hlbiBVQVJUIHBhcml0eSBpcyBub3QgZW5hYmxlZCAoUENFID0gMCksIGFuZCBXb3JkIExlbmd0aCBpcyBjb25maWd1cmVkIHRvIDkgYml0cyAoTSA9IDAxKSwKKyAgKiAgICAgICAgIHRoZSByZWNlaXZlZCBkYXRhIGlzIGhhbmRsZWQgYXMgYSBzZXQgb2YgdWludDE2X3QuIEluIHRoaXMgY2FzZSwgU2l6ZSBtdXN0IGluZGljYXRlIHRoZSBudW1iZXIKKyAgKiAgICAgICAgIG9mIHVpbnQxNl90IGF2YWlsYWJsZSB0aHJvdWdoIHBEYXRhLgorICAqIEBwYXJhbSBodWFydCBVQVJUIGhhbmRsZS4KKyAgKiBAcGFyYW0gcERhdGEgUG9pbnRlciB0byBkYXRhIGJ1ZmZlciAodWludDhfdCBvciB1aW50MTZfdCBkYXRhIGVsZW1lbnRzKS4KKyAgKiBAcGFyYW0gU2l6ZSAgQW1vdW50IG9mIGRhdGEgZWxlbWVudHMgKHVpbnQ4X3Qgb3IgdWludDE2X3QpIHRvIGJlIHJlY2VpdmVkLgorICAqIEByZXR2YWwgSEFMIHN0YXR1cworICAqLworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1VBUlRFeF9SZWNlaXZlVG9JZGxlX0lUKFVBUlRfSGFuZGxlVHlwZURlZiAqaHVhcnQsIHVpbnQ4X3QgKnBEYXRhLCB1aW50MTZfdCBTaXplKQoreworICBIQUxfU3RhdHVzVHlwZURlZiBzdGF0dXM7CisKKyAgLyogQ2hlY2sgdGhhdCBhIFJ4IHByb2Nlc3MgaXMgbm90IGFscmVhZHkgb25nb2luZyAqLworICBpZiAoaHVhcnQtPlJ4U3RhdGUgPT0gSEFMX1VBUlRfU1RBVEVfUkVBRFkpCisgIHsKKyAgICBpZiAoKHBEYXRhID09IE5VTEwpIHx8IChTaXplID09IDBVKSkKKyAgICB7CisgICAgICByZXR1cm4gSEFMX0VSUk9SOworICAgIH0KKworICAgIF9fSEFMX0xPQ0soaHVhcnQpOworCisgICAgLyogU2V0IFJlY2VwdGlvbiB0eXBlIHRvIHJlY2VwdGlvbiB0aWxsIElETEUgRXZlbnQqLworICAgIGh1YXJ0LT5SZWNlcHRpb25UeXBlID0gSEFMX1VBUlRfUkVDRVBUSU9OX1RPSURMRTsKKworICAgIHN0YXR1cyA9ICBVQVJUX1N0YXJ0X1JlY2VpdmVfSVQoaHVhcnQsIHBEYXRhLCBTaXplKTsKKworICAgIC8qIENoZWNrIFJ4IHByb2Nlc3MgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IHN0YXJ0ZWQgKi8KKyAgICBpZiAoc3RhdHVzID09IEhBTF9PSykKKyAgICB7CisgICAgICBpZiAoaHVhcnQtPlJlY2VwdGlvblR5cGUgPT0gSEFMX1VBUlRfUkVDRVBUSU9OX1RPSURMRSkKKyAgICAgIHsKKyAgICAgICAgX19IQUxfVUFSVF9DTEVBUl9JRExFRkxBRyhodWFydCk7CisgICAgICAgIFNFVF9CSVQoaHVhcnQtPkluc3RhbmNlLT5DUjEsIFVTQVJUX0NSMV9JRExFSUUpOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICAvKiBJbiBjYXNlIG9mIGVycm9ycyBhbHJlYWR5IHBlbmRpbmcgd2hlbiByZWNlcHRpb24gaXMgc3RhcnRlZCwKKyAgICAgICAgICAgSW50ZXJydXB0cyBtYXkgaGF2ZSBhbHJlYWR5IGJlZW4gcmFpc2VkIGFuZCBsZWFkIHRvIHJlY2VwdGlvbiBhYm9ydGlvbi4KKyAgICAgICAgICAgKE92ZXJydW4gZXJyb3IgZm9yIGluc3RhbmNlKS4KKyAgICAgICAgICAgSW4gc3VjaCBjYXNlIFJlY2VwdGlvbiBUeXBlIGhhcyBiZWVuIHJlc2V0IHRvIEhBTF9VQVJUX1JFQ0VQVElPTl9TVEFOREFSRC4gKi8KKyAgICAgICAgc3RhdHVzID0gSEFMX0VSUk9SOworICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7CisgIH0KKyAgZWxzZQorICB7CisgICAgcmV0dXJuIEhBTF9CVVNZOworICB9Cit9CisKKy8qKgorICAqIEBicmllZiBSZWNlaXZlIGFuIGFtb3VudCBvZiBkYXRhIGluIERNQSBtb2RlIHRpbGwgZWl0aGVyIHRoZSBleHBlY3RlZCBudW1iZXIgb2YgZGF0YSBpcyByZWNlaXZlZCBvciBhbiBJRExFIGV2ZW50IG9jY3Vycy4KKyAgKiBAbm90ZSAgIFJlY2VwdGlvbiBpcyBpbml0aWF0ZWQgYnkgdGhpcyBmdW5jdGlvbiBjYWxsLiBGdXJ0aGVyIHByb2dyZXNzIG9mIHJlY2VwdGlvbiBpcyBhY2hpZXZlZCB0aGFua3MKKyAgKiAgICAgICAgIHRvIERNQSBzZXJ2aWNlcywgdHJhbnNmZXJyaW5nIGF1dG9tYXRpY2FsbHkgcmVjZWl2ZWQgZGF0YSBlbGVtZW50cyBpbiB1c2VyIHJlY2VwdGlvbiBidWZmZXIgYW5kCisgICogICAgICAgICBjYWxsaW5nIHJlZ2lzdGVyZWQgY2FsbGJhY2tzIGF0IGhhbGYvZW5kIG9mIHJlY2VwdGlvbi4gVUFSVCBJRExFIGV2ZW50cyBhcmUgYWxzbyB1c2VkIHRvIGNvbnNpZGVyCisgICogICAgICAgICByZWNlcHRpb24gcGhhc2UgYXMgZW5kZWQuIEluIGFsbCBjYXNlcywgY2FsbGJhY2sgZXhlY3V0aW9uIHdpbGwgaW5kaWNhdGUgbnVtYmVyIG9mIHJlY2VpdmVkIGRhdGEgZWxlbWVudHMuCisgICogQG5vdGUgICBXaGVuIHRoZSBVQVJUIHBhcml0eSBpcyBlbmFibGVkIChQQ0UgPSAxKSwgdGhlIHJlY2VpdmVkIGRhdGEgY29udGFpbgorICAqICAgICAgICAgdGhlIHBhcml0eSBiaXQgKE1TQiBwb3NpdGlvbikuCisgICogQG5vdGUgICBXaGVuIFVBUlQgcGFyaXR5IGlzIG5vdCBlbmFibGVkIChQQ0UgPSAwKSwgYW5kIFdvcmQgTGVuZ3RoIGlzIGNvbmZpZ3VyZWQgdG8gOSBiaXRzIChNID0gMDEpLAorICAqICAgICAgICAgdGhlIHJlY2VpdmVkIGRhdGEgaXMgaGFuZGxlZCBhcyBhIHNldCBvZiB1aW50MTZfdC4gSW4gdGhpcyBjYXNlLCBTaXplIG11c3QgaW5kaWNhdGUgdGhlIG51bWJlcgorICAqICAgICAgICAgb2YgdWludDE2X3QgYXZhaWxhYmxlIHRocm91Z2ggcERhdGEuCisgICogQHBhcmFtIGh1YXJ0IFVBUlQgaGFuZGxlLgorICAqIEBwYXJhbSBwRGF0YSBQb2ludGVyIHRvIGRhdGEgYnVmZmVyICh1aW50OF90IG9yIHVpbnQxNl90IGRhdGEgZWxlbWVudHMpLgorICAqIEBwYXJhbSBTaXplICBBbW91bnQgb2YgZGF0YSBlbGVtZW50cyAodWludDhfdCBvciB1aW50MTZfdCkgdG8gYmUgcmVjZWl2ZWQuCisgICogQHJldHZhbCBIQUwgc3RhdHVzCisgICovCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfVUFSVEV4X1JlY2VpdmVUb0lkbGVfRE1BKFVBUlRfSGFuZGxlVHlwZURlZiAqaHVhcnQsIHVpbnQ4X3QgKnBEYXRhLCB1aW50MTZfdCBTaXplKQoreworICBIQUxfU3RhdHVzVHlwZURlZiBzdGF0dXM7CisKKyAgLyogQ2hlY2sgdGhhdCBhIFJ4IHByb2Nlc3MgaXMgbm90IGFscmVhZHkgb25nb2luZyAqLworICBpZiAoaHVhcnQtPlJ4U3RhdGUgPT0gSEFMX1VBUlRfU1RBVEVfUkVBRFkpCisgIHsKKyAgICBpZiAoKHBEYXRhID09IE5VTEwpIHx8IChTaXplID09IDBVKSkKKyAgICB7CisgICAgICByZXR1cm4gSEFMX0VSUk9SOworICAgIH0KKworICAgIF9fSEFMX0xPQ0soaHVhcnQpOworCisgICAgLyogU2V0IFJlY2VwdGlvbiB0eXBlIHRvIHJlY2VwdGlvbiB0aWxsIElETEUgRXZlbnQqLworICAgIGh1YXJ0LT5SZWNlcHRpb25UeXBlID0gSEFMX1VBUlRfUkVDRVBUSU9OX1RPSURMRTsKKworICAgIHN0YXR1cyA9ICBVQVJUX1N0YXJ0X1JlY2VpdmVfRE1BKGh1YXJ0LCBwRGF0YSwgU2l6ZSk7CisKKyAgICAvKiBDaGVjayBSeCBwcm9jZXNzIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBzdGFydGVkICovCisgICAgaWYgKHN0YXR1cyA9PSBIQUxfT0spCisgICAgeworICAgICAgaWYgKGh1YXJ0LT5SZWNlcHRpb25UeXBlID09IEhBTF9VQVJUX1JFQ0VQVElPTl9UT0lETEUpCisgICAgICB7CisgICAgICAgIF9fSEFMX1VBUlRfQ0xFQVJfSURMRUZMQUcoaHVhcnQpOworICAgICAgICBTRVRfQklUKGh1YXJ0LT5JbnN0YW5jZS0+Q1IxLCBVU0FSVF9DUjFfSURMRUlFKTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgLyogSW4gY2FzZSBvZiBlcnJvcnMgYWxyZWFkeSBwZW5kaW5nIHdoZW4gcmVjZXB0aW9uIGlzIHN0YXJ0ZWQsCisgICAgICAgICAgIEludGVycnVwdHMgbWF5IGhhdmUgYWxyZWFkeSBiZWVuIHJhaXNlZCBhbmQgbGVhZCB0byByZWNlcHRpb24gYWJvcnRpb24uCisgICAgICAgICAgIChPdmVycnVuIGVycm9yIGZvciBpbnN0YW5jZSkuCisgICAgICAgICAgIEluIHN1Y2ggY2FzZSBSZWNlcHRpb24gVHlwZSBoYXMgYmVlbiByZXNldCB0byBIQUxfVUFSVF9SRUNFUFRJT05fU1RBTkRBUkQuICovCisgICAgICAgIHN0YXR1cyA9IEhBTF9FUlJPUjsKKyAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gc3RhdHVzOworICB9CisgIGVsc2UKKyAgeworICAgIHJldHVybiBIQUxfQlVTWTsKKyAgfQorfQorCisvKioKICAgKiBAYnJpZWYgIEFib3J0IG9uZ29pbmcgdHJhbnNmZXJzIChibG9ja2luZyBtb2RlKS4KICAgKiBAcGFyYW0gIGh1YXJ0IFVBUlQgaGFuZGxlLgogICAqIEBub3RlICAgVGhpcyBwcm9jZWR1cmUgY291bGQgYmUgdXNlZCBmb3IgYWJvcnRpbmcgYW55IG9uZ29pbmcgdHJhbnNmZXIgc3RhcnRlZCBpbiBJbnRlcnJ1cHQgb3IgRE1BIG1vZGUuCkBAIC0xNTYwLDYgKzE4NjUsMTIgQEAKICAgQ0xFQVJfQklUKGh1YXJ0LT5JbnN0YW5jZS0+Q1IxLCAoVVNBUlRfQ1IxX1JYTkVJRSB8IFVTQVJUX0NSMV9QRUlFIHwgVVNBUlRfQ1IxX1RYRUlFIHwgVVNBUlRfQ1IxX1RDSUUpKTsKICAgQ0xFQVJfQklUKGh1YXJ0LT5JbnN0YW5jZS0+Q1IzLCBVU0FSVF9DUjNfRUlFKTsKIAorICAvKiBJZiBSZWNlcHRpb24gdGlsbCBJRExFIGV2ZW50IHdhcyBvbmdvaW5nLCBkaXNhYmxlIElETEVJRSBpbnRlcnJ1cHQgKi8KKyAgaWYgKGh1YXJ0LT5SZWNlcHRpb25UeXBlID09IEhBTF9VQVJUX1JFQ0VQVElPTl9UT0lETEUpCisgIHsKKyAgICBDTEVBUl9CSVQoaHVhcnQtPkluc3RhbmNlLT5DUjEsIChVU0FSVF9DUjFfSURMRUlFKSk7CisgIH0KKwogICAvKiBEaXNhYmxlIHRoZSBVQVJUIERNQSBUeCByZXF1ZXN0IGlmIGVuYWJsZWQgKi8KICAgaWYgKEhBTF9JU19CSVRfU0VUKGh1YXJ0LT5JbnN0YW5jZS0+Q1IzLCBVU0FSVF9DUjNfRE1BVCkpCiAgIHsKQEAgLTE2MjAsNiArMTkzMSw3IEBACiAgIC8qIFJlc3RvcmUgaHVhcnQtPlJ4U3RhdGUgYW5kIGh1YXJ0LT5nU3RhdGUgdG8gUmVhZHkgKi8KICAgaHVhcnQtPlJ4U3RhdGUgPSBIQUxfVUFSVF9TVEFURV9SRUFEWTsKICAgaHVhcnQtPmdTdGF0ZSA9IEhBTF9VQVJUX1NUQVRFX1JFQURZOworICBodWFydC0+UmVjZXB0aW9uVHlwZSA9IEhBTF9VQVJUX1JFQ0VQVElPTl9TVEFOREFSRDsKIAogICByZXR1cm4gSEFMX09LOwogfQpAQCAtMTY5Myw2ICsyMDA1LDEyIEBACiAgIENMRUFSX0JJVChodWFydC0+SW5zdGFuY2UtPkNSMSwgKFVTQVJUX0NSMV9SWE5FSUUgfCBVU0FSVF9DUjFfUEVJRSkpOwogICBDTEVBUl9CSVQoaHVhcnQtPkluc3RhbmNlLT5DUjMsIFVTQVJUX0NSM19FSUUpOwogCisgIC8qIElmIFJlY2VwdGlvbiB0aWxsIElETEUgZXZlbnQgd2FzIG9uZ29pbmcsIGRpc2FibGUgSURMRUlFIGludGVycnVwdCAqLworICBpZiAoaHVhcnQtPlJlY2VwdGlvblR5cGUgPT0gSEFMX1VBUlRfUkVDRVBUSU9OX1RPSURMRSkKKyAgeworICAgIENMRUFSX0JJVChodWFydC0+SW5zdGFuY2UtPkNSMSwgKFVTQVJUX0NSMV9JRExFSUUpKTsKKyAgfQorCiAgIC8qIERpc2FibGUgdGhlIFVBUlQgRE1BIFJ4IHJlcXVlc3QgaWYgZW5hYmxlZCAqLwogICBpZiAoSEFMX0lTX0JJVF9TRVQoaHVhcnQtPkluc3RhbmNlLT5DUjMsIFVTQVJUX0NSM19ETUFSKSkKICAgewpAQCAtMTcyMyw2ICsyMDQxLDcgQEAKIAogICAvKiBSZXN0b3JlIGh1YXJ0LT5SeFN0YXRlIHRvIFJlYWR5ICovCiAgIGh1YXJ0LT5SeFN0YXRlID0gSEFMX1VBUlRfU1RBVEVfUkVBRFk7CisgIGh1YXJ0LT5SZWNlcHRpb25UeXBlID0gSEFMX1VBUlRfUkVDRVBUSU9OX1NUQU5EQVJEOwogCiAgIHJldHVybiBIQUxfT0s7CiB9CkBAIC0xNzQ5LDYgKzIwNjgsMTIgQEAKICAgQ0xFQVJfQklUKGh1YXJ0LT5JbnN0YW5jZS0+Q1IxLCAoVVNBUlRfQ1IxX1JYTkVJRSB8IFVTQVJUX0NSMV9QRUlFIHwgVVNBUlRfQ1IxX1RYRUlFIHwgVVNBUlRfQ1IxX1RDSUUpKTsKICAgQ0xFQVJfQklUKGh1YXJ0LT5JbnN0YW5jZS0+Q1IzLCBVU0FSVF9DUjNfRUlFKTsKIAorICAvKiBJZiBSZWNlcHRpb24gdGlsbCBJRExFIGV2ZW50IHdhcyBvbmdvaW5nLCBkaXNhYmxlIElETEVJRSBpbnRlcnJ1cHQgKi8KKyAgaWYgKGh1YXJ0LT5SZWNlcHRpb25UeXBlID09IEhBTF9VQVJUX1JFQ0VQVElPTl9UT0lETEUpCisgIHsKKyAgICBDTEVBUl9CSVQoaHVhcnQtPkluc3RhbmNlLT5DUjEsIChVU0FSVF9DUjFfSURMRUlFKSk7CisgIH0KKwogICAvKiBJZiBETUEgVHggYW5kL29yIERNQSBSeCBIYW5kbGVzIGFyZSBhc3NvY2lhdGVkIHRvIFVBUlQgSGFuZGxlLCBETUEgQWJvcnQgY29tcGxldGUgY2FsbGJhY2tzIHNob3VsZCBiZSBpbml0aWFsaXNlZAogICAgICBiZWZvcmUgYW55IGNhbGwgdG8gRE1BIEFib3J0IGZ1bmN0aW9ucyAqLwogICAvKiBETUEgVHggSGFuZGxlIGlzIHZhbGlkICovCkBAIC0xODQxLDYgKzIxNjYsNyBAQAogICAgIC8qIFJlc3RvcmUgaHVhcnQtPmdTdGF0ZSBhbmQgaHVhcnQtPlJ4U3RhdGUgdG8gUmVhZHkgKi8KICAgICBodWFydC0+Z1N0YXRlICA9IEhBTF9VQVJUX1NUQVRFX1JFQURZOwogICAgIGh1YXJ0LT5SeFN0YXRlID0gSEFMX1VBUlRfU1RBVEVfUkVBRFk7CisgICAgaHVhcnQtPlJlY2VwdGlvblR5cGUgPSBIQUxfVUFSVF9SRUNFUFRJT05fU1RBTkRBUkQ7CiAKICAgICAvKiBBcyBubyBETUEgdG8gYmUgYWJvcnRlZCwgY2FsbCBkaXJlY3RseSB1c2VyIEFib3J0IGNvbXBsZXRlIGNhbGxiYWNrICovCiAjaWYgKFVTRV9IQUxfVUFSVF9SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkKQEAgLTE5NTIsNiArMjI3OCwxMiBAQAogICBDTEVBUl9CSVQoaHVhcnQtPkluc3RhbmNlLT5DUjEsIChVU0FSVF9DUjFfUlhORUlFIHwgVVNBUlRfQ1IxX1BFSUUpKTsKICAgQ0xFQVJfQklUKGh1YXJ0LT5JbnN0YW5jZS0+Q1IzLCBVU0FSVF9DUjNfRUlFKTsKIAorICAvKiBJZiBSZWNlcHRpb24gdGlsbCBJRExFIGV2ZW50IHdhcyBvbmdvaW5nLCBkaXNhYmxlIElETEVJRSBpbnRlcnJ1cHQgKi8KKyAgaWYgKGh1YXJ0LT5SZWNlcHRpb25UeXBlID09IEhBTF9VQVJUX1JFQ0VQVElPTl9UT0lETEUpCisgIHsKKyAgICBDTEVBUl9CSVQoaHVhcnQtPkluc3RhbmNlLT5DUjEsIChVU0FSVF9DUjFfSURMRUlFKSk7CisgIH0KKwogICAvKiBEaXNhYmxlIHRoZSBVQVJUIERNQSBSeCByZXF1ZXN0IGlmIGVuYWJsZWQgKi8KICAgaWYgKEhBTF9JU19CSVRfU0VUKGh1YXJ0LT5JbnN0YW5jZS0+Q1IzLCBVU0FSVF9DUjNfRE1BUikpCiAgIHsKQEAgLTE5NzgsNiArMjMxMCw3IEBACiAKICAgICAgIC8qIFJlc3RvcmUgaHVhcnQtPlJ4U3RhdGUgdG8gUmVhZHkgKi8KICAgICAgIGh1YXJ0LT5SeFN0YXRlID0gSEFMX1VBUlRfU1RBVEVfUkVBRFk7CisgICAgICBodWFydC0+UmVjZXB0aW9uVHlwZSA9IEhBTF9VQVJUX1JFQ0VQVElPTl9TVEFOREFSRDsKIAogICAgICAgLyogQXMgbm8gRE1BIHRvIGJlIGFib3J0ZWQsIGNhbGwgZGlyZWN0bHkgdXNlciBBYm9ydCBjb21wbGV0ZSBjYWxsYmFjayAqLwogI2lmIChVU0VfSEFMX1VBUlRfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCkBAIC0xOTk2LDYgKzIzMjksNyBAQAogCiAgICAgLyogUmVzdG9yZSBodWFydC0+UnhTdGF0ZSB0byBSZWFkeSAqLwogICAgIGh1YXJ0LT5SeFN0YXRlID0gSEFMX1VBUlRfU1RBVEVfUkVBRFk7CisgICAgaHVhcnQtPlJlY2VwdGlvblR5cGUgPSBIQUxfVUFSVF9SRUNFUFRJT05fU1RBTkRBUkQ7CiAKICAgICAvKiBBcyBubyBETUEgdG8gYmUgYWJvcnRlZCwgY2FsbCBkaXJlY3RseSB1c2VyIEFib3J0IGNvbXBsZXRlIGNhbGxiYWNrICovCiAjaWYgKFVTRV9IQUxfVUFSVF9SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkKQEAgLTIxNDEsNiArMjQ3NSw5MCBAQAogICAgIHJldHVybjsKICAgfSAvKiBFbmQgaWYgc29tZSBlcnJvciBvY2N1cnMgKi8KIAorICAvKiBDaGVjayBjdXJyZW50IHJlY2VwdGlvbiBNb2RlIDoKKyAgICAgSWYgUmVjZXB0aW9uIHRpbGwgSURMRSBldmVudCBoYXMgYmVlbiBzZWxlY3RlZCA6ICovCisgIGlmICggIChodWFydC0+UmVjZXB0aW9uVHlwZSA9PSBIQUxfVUFSVF9SRUNFUFRJT05fVE9JRExFKQorICAgICAgJiYoKGlzcmZsYWdzICYgVVNBUlRfU1JfSURMRSkgIT0gMFUpCisgICAgICAmJigoY3IxaXRzICYgVVNBUlRfU1JfSURMRSkgIT0gMFUpKQorICB7CisgICAgX19IQUxfVUFSVF9DTEVBUl9JRExFRkxBRyhodWFydCk7CisKKyAgICAvKiBDaGVjayBpZiBETUEgbW9kZSBpcyBlbmFibGVkIGluIFVBUlQgKi8KKyAgICBpZiAoSEFMX0lTX0JJVF9TRVQoaHVhcnQtPkluc3RhbmNlLT5DUjMsIFVTQVJUX0NSM19ETUFSKSkKKyAgICB7CisgICAgICAvKiBETUEgbW9kZSBlbmFibGVkICovCisgICAgICAvKiBDaGVjayByZWNlaXZlZCBsZW5ndGggOiBJZiBhbGwgZXhwZWN0ZWQgZGF0YSBhcmUgcmVjZWl2ZWQsIGRvIG5vdGhpbmcsCisgICAgICAgICAoRE1BIGNwbHQgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQpLgorICAgICAgICAgT3RoZXJ3aXNlLCBpZiBhdCBsZWFzdCBvbmUgZGF0YSBoYXMgYWxyZWFkeSBiZWVuIHJlY2VpdmVkLCBJRExFIGV2ZW50IGlzIHRvIGJlIG5vdGlmaWVkIHRvIHVzZXIgKi8KKyAgICAgIHVpbnQxNl90IG5iX3JlbWFpbmluZ19yeF9kYXRhID0gKHVpbnQxNl90KSBfX0hBTF9ETUFfR0VUX0NPVU5URVIoaHVhcnQtPmhkbWFyeCk7CisgICAgICBpZiAoICAobmJfcmVtYWluaW5nX3J4X2RhdGEgPiAwVSkKKyAgICAgICAgICAmJihuYl9yZW1haW5pbmdfcnhfZGF0YSA8IGh1YXJ0LT5SeFhmZXJTaXplKSkKKyAgICAgIHsKKyAgICAgICAgLyogUmVjZXB0aW9uIGlzIG5vdCBjb21wbGV0ZSAqLworICAgICAgICBodWFydC0+UnhYZmVyQ291bnQgPSBuYl9yZW1haW5pbmdfcnhfZGF0YTsKKworICAgICAgICAvKiBJbiBOb3JtYWwgbW9kZSwgZW5kIERNQSB4ZmVyIGFuZCBIQUwgVUFSVCBSeCBwcm9jZXNzKi8KKyAgICAgICAgaWYgKGh1YXJ0LT5oZG1hcngtPkluaXQuTW9kZSAhPSBETUFfQ0lSQ1VMQVIpCisgICAgICAgIHsKKyAgICAgICAgICAvKiBEaXNhYmxlIFBFIGFuZCBFUlIgKEZyYW1lIGVycm9yLCBub2lzZSBlcnJvciwgb3ZlcnJ1biBlcnJvcikgaW50ZXJydXB0cyAqLworICAgICAgICAgIENMRUFSX0JJVChodWFydC0+SW5zdGFuY2UtPkNSMSwgVVNBUlRfQ1IxX1BFSUUpOworICAgICAgICAgIENMRUFSX0JJVChodWFydC0+SW5zdGFuY2UtPkNSMywgVVNBUlRfQ1IzX0VJRSk7CisKKyAgICAgICAgICAvKiBEaXNhYmxlIHRoZSBETUEgdHJhbnNmZXIgZm9yIHRoZSByZWNlaXZlciByZXF1ZXN0IGJ5IHJlc2V0dGluZyB0aGUgRE1BUiBiaXQKKyAgICAgICAgICAgICBpbiB0aGUgVUFSVCBDUjMgcmVnaXN0ZXIgKi8KKyAgICAgICAgICBDTEVBUl9CSVQoaHVhcnQtPkluc3RhbmNlLT5DUjMsIFVTQVJUX0NSM19ETUFSKTsKKworICAgICAgICAgIC8qIEF0IGVuZCBvZiBSeCBwcm9jZXNzLCByZXN0b3JlIGh1YXJ0LT5SeFN0YXRlIHRvIFJlYWR5ICovCisgICAgICAgICAgaHVhcnQtPlJ4U3RhdGUgPSBIQUxfVUFSVF9TVEFURV9SRUFEWTsKKyAgICAgICAgICBodWFydC0+UmVjZXB0aW9uVHlwZSA9IEhBTF9VQVJUX1JFQ0VQVElPTl9TVEFOREFSRDsKKworICAgICAgICAgIENMRUFSX0JJVChodWFydC0+SW5zdGFuY2UtPkNSMSwgVVNBUlRfQ1IxX0lETEVJRSk7CisKKyAgICAgICAgICAvKiBMYXN0IGJ5dGVzIHJlY2VpdmVkLCBzbyBubyBuZWVkIGFzIHRoZSBhYm9ydCBpcyBpbW1lZGlhdGUgKi8KKyAgICAgICAgICAodm9pZClIQUxfRE1BX0Fib3J0KGh1YXJ0LT5oZG1hcngpOworICAgICAgICB9CisjaWYgKFVTRV9IQUxfVUFSVF9SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkKKyAgICAgICAgLypDYWxsIHJlZ2lzdGVyZWQgUnggRXZlbnQgY2FsbGJhY2sqLworICAgICAgICBodWFydC0+UnhFdmVudENhbGxiYWNrKGh1YXJ0LCAoaHVhcnQtPlJ4WGZlclNpemUgLSBodWFydC0+UnhYZmVyQ291bnQpKTsKKyNlbHNlCisgICAgICAgIC8qQ2FsbCBsZWdhY3kgd2VhayBSeCBFdmVudCBjYWxsYmFjayovCisgICAgICAgIEhBTF9VQVJURXhfUnhFdmVudENhbGxiYWNrKGh1YXJ0LCAoaHVhcnQtPlJ4WGZlclNpemUgLSBodWFydC0+UnhYZmVyQ291bnQpKTsKKyNlbmRpZgorICAgICAgfQorICAgICAgcmV0dXJuOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgLyogRE1BIG1vZGUgbm90IGVuYWJsZWQgKi8KKyAgICAgIC8qIENoZWNrIHJlY2VpdmVkIGxlbmd0aCA6IElmIGFsbCBleHBlY3RlZCBkYXRhIGFyZSByZWNlaXZlZCwgZG8gbm90aGluZy4KKyAgICAgICAgIE90aGVyd2lzZSwgaWYgYXQgbGVhc3Qgb25lIGRhdGEgaGFzIGFscmVhZHkgYmVlbiByZWNlaXZlZCwgSURMRSBldmVudCBpcyB0byBiZSBub3RpZmllZCB0byB1c2VyICovCisgICAgICB1aW50MTZfdCBuYl9yeF9kYXRhID0gaHVhcnQtPlJ4WGZlclNpemUgLSBodWFydC0+UnhYZmVyQ291bnQ7CisgICAgICBpZiAoICAoaHVhcnQtPlJ4WGZlckNvdW50ID4gMFUpCisgICAgICAgICAgJiYobmJfcnhfZGF0YSA+IDBVKSApCisgICAgICB7CisgICAgICAgIC8qIERpc2FibGUgdGhlIFVBUlQgUGFyaXR5IEVycm9yIEludGVycnVwdCBhbmQgUlhORSBpbnRlcnJ1cHRzICovCisgICAgICAgIENMRUFSX0JJVChodWFydC0+SW5zdGFuY2UtPkNSMSwgKFVTQVJUX0NSMV9SWE5FSUUgfCBVU0FSVF9DUjFfUEVJRSkpOworCisgICAgICAgIC8qIERpc2FibGUgdGhlIFVBUlQgRXJyb3IgSW50ZXJydXB0OiAoRnJhbWUgZXJyb3IsIG5vaXNlIGVycm9yLCBvdmVycnVuIGVycm9yKSAqLworICAgICAgICBDTEVBUl9CSVQoaHVhcnQtPkluc3RhbmNlLT5DUjMsIFVTQVJUX0NSM19FSUUpOworCisgICAgICAgIC8qIFJ4IHByb2Nlc3MgaXMgY29tcGxldGVkLCByZXN0b3JlIGh1YXJ0LT5SeFN0YXRlIHRvIFJlYWR5ICovCisgICAgICAgIGh1YXJ0LT5SeFN0YXRlID0gSEFMX1VBUlRfU1RBVEVfUkVBRFk7CisgICAgICAgIGh1YXJ0LT5SZWNlcHRpb25UeXBlID0gSEFMX1VBUlRfUkVDRVBUSU9OX1NUQU5EQVJEOworCisgICAgICAgIENMRUFSX0JJVChodWFydC0+SW5zdGFuY2UtPkNSMSwgVVNBUlRfQ1IxX0lETEVJRSk7CisjaWYgKFVTRV9IQUxfVUFSVF9SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkKKyAgICAgICAgLypDYWxsIHJlZ2lzdGVyZWQgUnggY29tcGxldGUgY2FsbGJhY2sqLworICAgICAgICBodWFydC0+UnhFdmVudENhbGxiYWNrKGh1YXJ0LCBuYl9yeF9kYXRhKTsKKyNlbHNlCisgICAgICAgIC8qQ2FsbCBsZWdhY3kgd2VhayBSeCBFdmVudCBjYWxsYmFjayovCisgICAgICAgIEhBTF9VQVJURXhfUnhFdmVudENhbGxiYWNrKGh1YXJ0LCBuYl9yeF9kYXRhKTsKKyNlbmRpZgorICAgICAgfQorICAgICAgcmV0dXJuOworICAgIH0KKyAgfQorCiAgIC8qIFVBUlQgaW4gbW9kZSBUcmFuc21pdHRlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogICBpZiAoKChpc3JmbGFncyAmIFVTQVJUX1NSX1RYRSkgIT0gUkVTRVQpICYmICgoY3IxaXRzICYgVVNBUlRfQ1IxX1RYRUlFKSAhPSBSRVNFVCkpCiAgIHsKQEAgLTIyNzcsNiArMjY5NSwyNCBAQAogfQogCiAvKioKKyAgKiBAYnJpZWYgIFJlY2VwdGlvbiBFdmVudCBDYWxsYmFjayAoUnggZXZlbnQgbm90aWZpY2F0aW9uIGNhbGxlZCBhZnRlciB1c2Ugb2YgYWR2YW5jZWQgcmVjZXB0aW9uIHNlcnZpY2UpLgorICAqIEBwYXJhbSAgaHVhcnQgVUFSVCBoYW5kbGUKKyAgKiBAcGFyYW0gIFNpemUgIE51bWJlciBvZiBkYXRhIGF2YWlsYWJsZSBpbiBhcHBsaWNhdGlvbiByZWNlcHRpb24gYnVmZmVyIChpbmRpY2F0ZXMgYSBwb3NpdGlvbiBpbgorICAqICAgICAgICAgICAgICAgcmVjZXB0aW9uIGJ1ZmZlciB1bnRpbCB3aGljaCwgZGF0YSBhcmUgYXZhaWxhYmxlKQorICAqIEByZXR2YWwgTm9uZQorICAqLworX193ZWFrIHZvaWQgSEFMX1VBUlRFeF9SeEV2ZW50Q2FsbGJhY2soVUFSVF9IYW5kbGVUeXBlRGVmICpodWFydCwgdWludDE2X3QgU2l6ZSkKK3sKKyAgLyogUHJldmVudCB1bnVzZWQgYXJndW1lbnQocykgY29tcGlsYXRpb24gd2FybmluZyAqLworICBVTlVTRUQoaHVhcnQpOworICBVTlVTRUQoU2l6ZSk7CisKKyAgLyogTk9URSA6IFRoaXMgZnVuY3Rpb24gc2hvdWxkIG5vdCBiZSBtb2RpZmllZCwgd2hlbiB0aGUgY2FsbGJhY2sgaXMgbmVlZGVkLAorICAgICAgICAgICAgdGhlIEhBTF9VQVJURXhfUnhFdmVudENhbGxiYWNrIGNhbiBiZSBpbXBsZW1lbnRlZCBpbiB0aGUgdXNlciBmaWxlLgorICAgKi8KK30KKworLyoqCiAgICogQH0KICAgKi8KIApAQCAtMjUyNyw2ICsyOTYzLDcgQEAKICAgaHVhcnQtPkFib3J0Q3BsdENhbGxiYWNrICAgICAgICAgPSBIQUxfVUFSVF9BYm9ydENwbHRDYWxsYmFjazsgICAgICAgICAvKiBMZWdhY3kgd2VhayBBYm9ydENwbHRDYWxsYmFjayAgICAgICAgICovCiAgIGh1YXJ0LT5BYm9ydFRyYW5zbWl0Q3BsdENhbGxiYWNrID0gSEFMX1VBUlRfQWJvcnRUcmFuc21pdENwbHRDYWxsYmFjazsgLyogTGVnYWN5IHdlYWsgQWJvcnRUcmFuc21pdENwbHRDYWxsYmFjayAqLwogICBodWFydC0+QWJvcnRSZWNlaXZlQ3BsdENhbGxiYWNrICA9IEhBTF9VQVJUX0Fib3J0UmVjZWl2ZUNwbHRDYWxsYmFjazsgIC8qIExlZ2FjeSB3ZWFrIEFib3J0UmVjZWl2ZUNwbHRDYWxsYmFjayAgKi8KKyAgaHVhcnQtPlJ4RXZlbnRDYWxsYmFjayAgICAgICAgICAgPSBIQUxfVUFSVEV4X1J4RXZlbnRDYWxsYmFjazsgICAgICAgICAvKiBMZWdhY3kgd2VhayBSeEV2ZW50Q2FsbGJhY2sgICAgICAgICAgICovCiAKIH0KICNlbmRpZiAvKiBVU0VfSEFMX1VBUlRfUkVHSVNURVJfQ0FMTEJBQ0tTICovCkBAIC0yNjA5LDE0ICszMDQ2LDM3IEBACiAKICAgICAvKiBBdCBlbmQgb2YgUnggcHJvY2VzcywgcmVzdG9yZSBodWFydC0+UnhTdGF0ZSB0byBSZWFkeSAqLwogICAgIGh1YXJ0LT5SeFN0YXRlID0gSEFMX1VBUlRfU1RBVEVfUkVBRFk7CisKKyAgICAvKiBJZiBSZWNlcHRpb24gdGlsbCBJRExFIGV2ZW50IGhhcyBiZWVuIHNlbGVjdGVkLCBEaXNhYmxlIElETEUgSW50ZXJydXB0ICovCisgICAgaWYgKGh1YXJ0LT5SZWNlcHRpb25UeXBlID09IEhBTF9VQVJUX1JFQ0VQVElPTl9UT0lETEUpCisgICAgeworICAgICAgQ0xFQVJfQklUKGh1YXJ0LT5JbnN0YW5jZS0+Q1IxLCBVU0FSVF9DUjFfSURMRUlFKTsKKyAgICB9CiAgIH0KKworICAvKiBDaGVjayBjdXJyZW50IHJlY2VwdGlvbiBNb2RlIDoKKyAgICAgSWYgUmVjZXB0aW9uIHRpbGwgSURMRSBldmVudCBoYXMgYmVlbiBzZWxlY3RlZCA6IHVzZSBSeCBFdmVudCBjYWxsYmFjayAqLworICBpZiAoaHVhcnQtPlJlY2VwdGlvblR5cGUgPT0gSEFMX1VBUlRfUkVDRVBUSU9OX1RPSURMRSkKKyAgeyAgCiAjaWYgKFVTRV9IQUxfVUFSVF9SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkKLSAgLypDYWxsIHJlZ2lzdGVyZWQgUnggY29tcGxldGUgY2FsbGJhY2sqLwotICBodWFydC0+UnhDcGx0Q2FsbGJhY2soaHVhcnQpOworICAgIC8qQ2FsbCByZWdpc3RlcmVkIFJ4IEV2ZW50IGNhbGxiYWNrKi8KKyAgICBodWFydC0+UnhFdmVudENhbGxiYWNrKGh1YXJ0LCBodWFydC0+UnhYZmVyU2l6ZSk7CiAjZWxzZQotICAvKkNhbGwgbGVnYWN5IHdlYWsgUnggY29tcGxldGUgY2FsbGJhY2sqLwotICBIQUxfVUFSVF9SeENwbHRDYWxsYmFjayhodWFydCk7CisgICAgLypDYWxsIGxlZ2FjeSB3ZWFrIFJ4IEV2ZW50IGNhbGxiYWNrKi8KKyAgICBIQUxfVUFSVEV4X1J4RXZlbnRDYWxsYmFjayhodWFydCwgaHVhcnQtPlJ4WGZlclNpemUpOwogI2VuZGlmIC8qIFVTRV9IQUxfVUFSVF9SRUdJU1RFUl9DQUxMQkFDS1MgKi8KKyAgfQorICBlbHNlCisgIHsKKyAgICAvKiBJbiBvdGhlciBjYXNlcyA6IHVzZSBSeCBDb21wbGV0ZSBjYWxsYmFjayAqLworI2lmIChVU0VfSEFMX1VBUlRfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCisgICAgLypDYWxsIHJlZ2lzdGVyZWQgUnggY29tcGxldGUgY2FsbGJhY2sqLworICAgIGh1YXJ0LT5SeENwbHRDYWxsYmFjayhodWFydCk7CisjZWxzZQorICAgIC8qQ2FsbCBsZWdhY3kgd2VhayBSeCBjb21wbGV0ZSBjYWxsYmFjayovCisgICAgSEFMX1VBUlRfUnhDcGx0Q2FsbGJhY2soaHVhcnQpOworI2VuZGlmIC8qIFVTRV9IQUxfVUFSVF9SRUdJU1RFUl9DQUxMQkFDS1MgKi8KKyAgfQogfQogCiAvKioKQEAgLTI2MjksMTMgKzMwODksMjkgQEAKIHsKICAgVUFSVF9IYW5kbGVUeXBlRGVmICpodWFydCA9IChVQVJUX0hhbmRsZVR5cGVEZWYgKikoKERNQV9IYW5kbGVUeXBlRGVmICopaGRtYSktPlBhcmVudDsKIAorICAvKiBDaGVjayBjdXJyZW50IHJlY2VwdGlvbiBNb2RlIDoKKyAgICAgSWYgUmVjZXB0aW9uIHRpbGwgSURMRSBldmVudCBoYXMgYmVlbiBzZWxlY3RlZCA6IHVzZSBSeCBFdmVudCBjYWxsYmFjayAqLworICBpZiAoaHVhcnQtPlJlY2VwdGlvblR5cGUgPT0gSEFMX1VBUlRfUkVDRVBUSU9OX1RPSURMRSkKKyAgewogI2lmIChVU0VfSEFMX1VBUlRfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCi0gIC8qQ2FsbCByZWdpc3RlcmVkIFJ4IEhhbGYgY29tcGxldGUgY2FsbGJhY2sqLwotICBodWFydC0+UnhIYWxmQ3BsdENhbGxiYWNrKGh1YXJ0KTsKKyAgICAvKkNhbGwgcmVnaXN0ZXJlZCBSeCBFdmVudCBjYWxsYmFjayovCisgICAgaHVhcnQtPlJ4RXZlbnRDYWxsYmFjayhodWFydCwgaHVhcnQtPlJ4WGZlclNpemUvMlUpOwogI2Vsc2UKLSAgLypDYWxsIGxlZ2FjeSB3ZWFrIFJ4IEhhbGYgY29tcGxldGUgY2FsbGJhY2sqLwotICBIQUxfVUFSVF9SeEhhbGZDcGx0Q2FsbGJhY2soaHVhcnQpOworICAgIC8qQ2FsbCBsZWdhY3kgd2VhayBSeCBFdmVudCBjYWxsYmFjayovCisgICAgSEFMX1VBUlRFeF9SeEV2ZW50Q2FsbGJhY2soaHVhcnQsIGh1YXJ0LT5SeFhmZXJTaXplLzJVKTsKICNlbmRpZiAvKiBVU0VfSEFMX1VBUlRfUkVHSVNURVJfQ0FMTEJBQ0tTICovCisgIH0KKyAgZWxzZQorICB7CisgICAgLyogSW4gb3RoZXIgY2FzZXMgOiB1c2UgUnggSGFsZiBDb21wbGV0ZSBjYWxsYmFjayAqLworI2lmIChVU0VfSEFMX1VBUlRfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCisgICAgLypDYWxsIHJlZ2lzdGVyZWQgUnggSGFsZiBjb21wbGV0ZSBjYWxsYmFjayovCisgICAgaHVhcnQtPlJ4SGFsZkNwbHRDYWxsYmFjayhodWFydCk7CisjZWxzZQorICAgIC8qQ2FsbCBsZWdhY3kgd2VhayBSeCBIYWxmIGNvbXBsZXRlIGNhbGxiYWNrKi8KKyAgICBIQUxfVUFSVF9SeEhhbGZDcGx0Q2FsbGJhY2soaHVhcnQpOworI2VuZGlmIC8qIFVTRV9IQUxfVUFSVF9SRUdJU1RFUl9DQUxMQkFDS1MgKi8KKyAgfQogfQogCiAvKioKQEAgLTI3MTMsNiArMzE4OSw5NyBAQAogfQogCiAvKioKKyAgKiBAYnJpZWYgIFN0YXJ0IFJlY2VpdmUgb3BlcmF0aW9uIGluIGludGVycnVwdCBtb2RlLgorICAqIEBub3RlICAgVGhpcyBmdW5jdGlvbiBjb3VsZCBiZSBjYWxsZWQgYnkgYWxsIEhBTCBVQVJUIEFQSSBwcm92aWRpbmcgcmVjZXB0aW9uIGluIEludGVycnVwdCBtb2RlLgorICAqIEBub3RlICAgV2hlbiBjYWxsaW5nIHRoaXMgZnVuY3Rpb24sIHBhcmFtZXRlcnMgdmFsaWRpdHkgaXMgY29uc2lkZXJlZCBhcyBhbHJlYWR5IGNoZWNrZWQsCisgICogICAgICAgICBpLmUuIFJ4IFN0YXRlLCBidWZmZXIgYWRkcmVzcywgLi4uCisgICogICAgICAgICBVQVJUIEhhbmRsZSBpcyBhc3N1bWVkIGFzIExvY2tlZC4KKyAgKiBAcGFyYW0gIGh1YXJ0IFVBUlQgaGFuZGxlLgorICAqIEBwYXJhbSAgcERhdGEgUG9pbnRlciB0byBkYXRhIGJ1ZmZlciAodTggb3IgdTE2IGRhdGEgZWxlbWVudHMpLgorICAqIEBwYXJhbSAgU2l6ZSAgQW1vdW50IG9mIGRhdGEgZWxlbWVudHMgKHU4IG9yIHUxNikgdG8gYmUgcmVjZWl2ZWQuCisgICogQHJldHZhbCBIQUwgc3RhdHVzCisgICovCitIQUxfU3RhdHVzVHlwZURlZiBVQVJUX1N0YXJ0X1JlY2VpdmVfSVQoVUFSVF9IYW5kbGVUeXBlRGVmICpodWFydCwgdWludDhfdCAqcERhdGEsIHVpbnQxNl90IFNpemUpCit7CisgIGh1YXJ0LT5wUnhCdWZmUHRyID0gcERhdGE7CisgIGh1YXJ0LT5SeFhmZXJTaXplID0gU2l6ZTsKKyAgaHVhcnQtPlJ4WGZlckNvdW50ID0gU2l6ZTsKKworICBodWFydC0+RXJyb3JDb2RlID0gSEFMX1VBUlRfRVJST1JfTk9ORTsKKyAgaHVhcnQtPlJ4U3RhdGUgPSBIQUxfVUFSVF9TVEFURV9CVVNZX1JYOworCisgIC8qIFByb2Nlc3MgVW5sb2NrZWQgKi8KKyAgX19IQUxfVU5MT0NLKGh1YXJ0KTsKKworICAvKiBFbmFibGUgdGhlIFVBUlQgUGFyaXR5IEVycm9yIEludGVycnVwdCAqLworICBfX0hBTF9VQVJUX0VOQUJMRV9JVChodWFydCwgVUFSVF9JVF9QRSk7CisKKyAgLyogRW5hYmxlIHRoZSBVQVJUIEVycm9yIEludGVycnVwdDogKEZyYW1lIGVycm9yLCBub2lzZSBlcnJvciwgb3ZlcnJ1biBlcnJvcikgKi8KKyAgX19IQUxfVUFSVF9FTkFCTEVfSVQoaHVhcnQsIFVBUlRfSVRfRVJSKTsKKworICAvKiBFbmFibGUgdGhlIFVBUlQgRGF0YSBSZWdpc3RlciBub3QgZW1wdHkgSW50ZXJydXB0ICovCisgIF9fSEFMX1VBUlRfRU5BQkxFX0lUKGh1YXJ0LCBVQVJUX0lUX1JYTkUpOworCisgIHJldHVybiBIQUxfT0s7Cit9CisKKy8qKgorICAqIEBicmllZiAgU3RhcnQgUmVjZWl2ZSBvcGVyYXRpb24gaW4gRE1BIG1vZGUuCisgICogQG5vdGUgICBUaGlzIGZ1bmN0aW9uIGNvdWxkIGJlIGNhbGxlZCBieSBhbGwgSEFMIFVBUlQgQVBJIHByb3ZpZGluZyByZWNlcHRpb24gaW4gRE1BIG1vZGUuCisgICogQG5vdGUgICBXaGVuIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiwgcGFyYW1ldGVycyB2YWxpZGl0eSBpcyBjb25zaWRlcmVkIGFzIGFscmVhZHkgY2hlY2tlZCwKKyAgKiAgICAgICAgIGkuZS4gUnggU3RhdGUsIGJ1ZmZlciBhZGRyZXNzLCAuLi4KKyAgKiAgICAgICAgIFVBUlQgSGFuZGxlIGlzIGFzc3VtZWQgYXMgTG9ja2VkLgorICAqIEBwYXJhbSAgaHVhcnQgVUFSVCBoYW5kbGUuCisgICogQHBhcmFtICBwRGF0YSBQb2ludGVyIHRvIGRhdGEgYnVmZmVyICh1OCBvciB1MTYgZGF0YSBlbGVtZW50cykuCisgICogQHBhcmFtICBTaXplICBBbW91bnQgb2YgZGF0YSBlbGVtZW50cyAodTggb3IgdTE2KSB0byBiZSByZWNlaXZlZC4KKyAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKKyAgKi8KK0hBTF9TdGF0dXNUeXBlRGVmIFVBUlRfU3RhcnRfUmVjZWl2ZV9ETUEoVUFSVF9IYW5kbGVUeXBlRGVmICpodWFydCwgdWludDhfdCAqcERhdGEsIHVpbnQxNl90IFNpemUpCit7CisgIHVpbnQzMl90ICp0bXA7CisKKyAgaHVhcnQtPnBSeEJ1ZmZQdHIgPSBwRGF0YTsKKyAgaHVhcnQtPlJ4WGZlclNpemUgPSBTaXplOworCisgIGh1YXJ0LT5FcnJvckNvZGUgPSBIQUxfVUFSVF9FUlJPUl9OT05FOworICBodWFydC0+UnhTdGF0ZSA9IEhBTF9VQVJUX1NUQVRFX0JVU1lfUlg7CisKKyAgLyogU2V0IHRoZSBVQVJUIERNQSB0cmFuc2ZlciBjb21wbGV0ZSBjYWxsYmFjayAqLworICBodWFydC0+aGRtYXJ4LT5YZmVyQ3BsdENhbGxiYWNrID0gVUFSVF9ETUFSZWNlaXZlQ3BsdDsKKworICAvKiBTZXQgdGhlIFVBUlQgRE1BIEhhbGYgdHJhbnNmZXIgY29tcGxldGUgY2FsbGJhY2sgKi8KKyAgaHVhcnQtPmhkbWFyeC0+WGZlckhhbGZDcGx0Q2FsbGJhY2sgPSBVQVJUX0RNQVJ4SGFsZkNwbHQ7CisKKyAgLyogU2V0IHRoZSBETUEgZXJyb3IgY2FsbGJhY2sgKi8KKyAgaHVhcnQtPmhkbWFyeC0+WGZlckVycm9yQ2FsbGJhY2sgPSBVQVJUX0RNQUVycm9yOworCisgIC8qIFNldCB0aGUgRE1BIGFib3J0IGNhbGxiYWNrICovCisgIGh1YXJ0LT5oZG1hcngtPlhmZXJBYm9ydENhbGxiYWNrID0gTlVMTDsKKworICAvKiBFbmFibGUgdGhlIERNQSBzdHJlYW0gKi8KKyAgdG1wID0gKHVpbnQzMl90ICopJnBEYXRhOworICBIQUxfRE1BX1N0YXJ0X0lUKGh1YXJ0LT5oZG1hcngsICh1aW50MzJfdCkmaHVhcnQtPkluc3RhbmNlLT5EUiwgKih1aW50MzJfdCAqKXRtcCwgU2l6ZSk7CisKKyAgLyogQ2xlYXIgdGhlIE92ZXJydW4gZmxhZyBqdXN0IGJlZm9yZSBlbmFibGluZyB0aGUgRE1BIFJ4IHJlcXVlc3Q6IGNhbiBiZSBtYW5kYXRvcnkgZm9yIHRoZSBzZWNvbmQgdHJhbnNmZXIgKi8KKyAgX19IQUxfVUFSVF9DTEVBUl9PUkVGTEFHKGh1YXJ0KTsKKworICAvKiBQcm9jZXNzIFVubG9ja2VkICovCisgIF9fSEFMX1VOTE9DSyhodWFydCk7CisKKyAgLyogRW5hYmxlIHRoZSBVQVJUIFBhcml0eSBFcnJvciBJbnRlcnJ1cHQgKi8KKyAgU0VUX0JJVChodWFydC0+SW5zdGFuY2UtPkNSMSwgVVNBUlRfQ1IxX1BFSUUpOworCisgIC8qIEVuYWJsZSB0aGUgVUFSVCBFcnJvciBJbnRlcnJ1cHQ6IChGcmFtZSBlcnJvciwgbm9pc2UgZXJyb3IsIG92ZXJydW4gZXJyb3IpICovCisgIFNFVF9CSVQoaHVhcnQtPkluc3RhbmNlLT5DUjMsIFVTQVJUX0NSM19FSUUpOworCisgIC8qIEVuYWJsZSB0aGUgRE1BIHRyYW5zZmVyIGZvciB0aGUgcmVjZWl2ZXIgcmVxdWVzdCBieSBzZXR0aW5nIHRoZSBETUFSIGJpdAorICBpbiB0aGUgVUFSVCBDUjMgcmVnaXN0ZXIgKi8KKyAgU0VUX0JJVChodWFydC0+SW5zdGFuY2UtPkNSMywgVVNBUlRfQ1IzX0RNQVIpOworCisgIHJldHVybiBIQUxfT0s7Cit9CisKKy8qKgogICAqIEBicmllZiAgRW5kIG9uZ29pbmcgVHggdHJhbnNmZXIgb24gVUFSVCBwZXJpcGhlcmFsIChmb2xsb3dpbmcgZXJyb3IgZGV0ZWN0aW9uIG9yIFRyYW5zbWl0IGNvbXBsZXRpb24pLgogICAqIEBwYXJhbSAgaHVhcnQgVUFSVCBoYW5kbGUuCiAgICogQHJldHZhbCBOb25lCkBAIC0yNzM3LDggKzMzMDQsMTUgQEAKICAgQ0xFQVJfQklUKGh1YXJ0LT5JbnN0YW5jZS0+Q1IxLCAoVVNBUlRfQ1IxX1JYTkVJRSB8IFVTQVJUX0NSMV9QRUlFKSk7CiAgIENMRUFSX0JJVChodWFydC0+SW5zdGFuY2UtPkNSMywgVVNBUlRfQ1IzX0VJRSk7CiAKKyAgLyogSW4gY2FzZSBvZiByZWNlcHRpb24gd2FpdGluZyBmb3IgSURMRSBldmVudCwgZGlzYWJsZSBhbHNvIHRoZSBJRExFIElFIGludGVycnVwdCBzb3VyY2UgKi8KKyAgaWYgKGh1YXJ0LT5SZWNlcHRpb25UeXBlID09IEhBTF9VQVJUX1JFQ0VQVElPTl9UT0lETEUpCisgIHsKKyAgICBDTEVBUl9CSVQoaHVhcnQtPkluc3RhbmNlLT5DUjEsIFVTQVJUX0NSMV9JRExFSUUpOworICB9CisKICAgLyogQXQgZW5kIG9mIFJ4IHByb2Nlc3MsIHJlc3RvcmUgaHVhcnQtPlJ4U3RhdGUgdG8gUmVhZHkgKi8KICAgaHVhcnQtPlJ4U3RhdGUgPSBIQUxfVUFSVF9TVEFURV9SRUFEWTsKKyAgaHVhcnQtPlJlY2VwdGlvblR5cGUgPSBIQUxfVUFSVF9SRUNFUFRJT05fU1RBTkRBUkQ7CiB9CiAKIC8qKgpAQCAtMjc5Nyw2ICszMzcxLDcgQEAKICAgLyogUmVzdG9yZSBodWFydC0+Z1N0YXRlIGFuZCBodWFydC0+UnhTdGF0ZSB0byBSZWFkeSAqLwogICBodWFydC0+Z1N0YXRlICA9IEhBTF9VQVJUX1NUQVRFX1JFQURZOwogICBodWFydC0+UnhTdGF0ZSA9IEhBTF9VQVJUX1NUQVRFX1JFQURZOworICBodWFydC0+UmVjZXB0aW9uVHlwZSA9IEhBTF9VQVJUX1JFQ0VQVElPTl9TVEFOREFSRDsKIAogICAvKiBDYWxsIHVzZXIgQWJvcnQgY29tcGxldGUgY2FsbGJhY2sgKi8KICNpZiAoVVNFX0hBTF9VQVJUX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxKQpAQCAtMjg0Miw2ICszNDE3LDcgQEAKICAgLyogUmVzdG9yZSBodWFydC0+Z1N0YXRlIGFuZCBodWFydC0+UnhTdGF0ZSB0byBSZWFkeSAqLwogICBodWFydC0+Z1N0YXRlICA9IEhBTF9VQVJUX1NUQVRFX1JFQURZOwogICBodWFydC0+UnhTdGF0ZSA9IEhBTF9VQVJUX1NUQVRFX1JFQURZOworICBodWFydC0+UmVjZXB0aW9uVHlwZSA9IEhBTF9VQVJUX1JFQ0VQVElPTl9TVEFOREFSRDsKIAogICAvKiBDYWxsIHVzZXIgQWJvcnQgY29tcGxldGUgY2FsbGJhY2sgKi8KICNpZiAoVVNFX0hBTF9VQVJUX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxKQpAQCAtMjg5OCw2ICszNDc0LDcgQEAKIAogICAvKiBSZXN0b3JlIGh1YXJ0LT5SeFN0YXRlIHRvIFJlYWR5ICovCiAgIGh1YXJ0LT5SeFN0YXRlID0gSEFMX1VBUlRfU1RBVEVfUkVBRFk7CisgIGh1YXJ0LT5SZWNlcHRpb25UeXBlID0gSEFMX1VBUlRfUkVDRVBUSU9OX1NUQU5EQVJEOwogCiAgIC8qIENhbGwgdXNlciBBYm9ydCBjb21wbGV0ZSBjYWxsYmFjayAqLwogI2lmIChVU0VfSEFMX1VBUlRfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCkBAIC0yOTIyLDE4ICszNDk5LDExIEBACiAgIC8qIENoZWNrIHRoYXQgYSBUeCBwcm9jZXNzIGlzIG9uZ29pbmcgKi8KICAgaWYgKGh1YXJ0LT5nU3RhdGUgPT0gSEFMX1VBUlRfU1RBVEVfQlVTWV9UWCkKICAgewotICAgIGlmIChodWFydC0+SW5pdC5Xb3JkTGVuZ3RoID09IFVBUlRfV09SRExFTkdUSF85QikKKyAgICBpZiAoKGh1YXJ0LT5Jbml0LldvcmRMZW5ndGggPT0gVUFSVF9XT1JETEVOR1RIXzlCKSAmJiAoaHVhcnQtPkluaXQuUGFyaXR5ID09IFVBUlRfUEFSSVRZX05PTkUpKQogICAgIHsKICAgICAgIHRtcCA9ICh1aW50MTZfdCAqKSBodWFydC0+cFR4QnVmZlB0cjsKICAgICAgIGh1YXJ0LT5JbnN0YW5jZS0+RFIgPSAodWludDE2X3QpKCp0bXAgJiAodWludDE2X3QpMHgwMUZGKTsKLSAgICAgIGlmIChodWFydC0+SW5pdC5QYXJpdHkgPT0gVUFSVF9QQVJJVFlfTk9ORSkKLSAgICAgIHsKLSAgICAgICAgaHVhcnQtPnBUeEJ1ZmZQdHIgKz0gMlU7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIGh1YXJ0LT5wVHhCdWZmUHRyICs9IDFVOwotICAgICAgfQorICAgICAgaHVhcnQtPnBUeEJ1ZmZQdHIgKz0gMlU7CiAgICAgfQogICAgIGVsc2UKICAgICB7CkBAIC0yOTg5LDM1ICszNTU5LDMzIEBACiAgICovCiBzdGF0aWMgSEFMX1N0YXR1c1R5cGVEZWYgVUFSVF9SZWNlaXZlX0lUKFVBUlRfSGFuZGxlVHlwZURlZiAqaHVhcnQpCiB7Ci0gIHVpbnQxNl90ICp0bXA7CisgIHVpbnQ4X3QgICpwZGF0YThiaXRzOworICB1aW50MTZfdCAqcGRhdGExNmJpdHM7CiAKICAgLyogQ2hlY2sgdGhhdCBhIFJ4IHByb2Nlc3MgaXMgb25nb2luZyAqLwogICBpZiAoaHVhcnQtPlJ4U3RhdGUgPT0gSEFMX1VBUlRfU1RBVEVfQlVTWV9SWCkKICAgewotICAgIGlmIChodWFydC0+SW5pdC5Xb3JkTGVuZ3RoID09IFVBUlRfV09SRExFTkdUSF85QikKKyAgICBpZiAoKGh1YXJ0LT5Jbml0LldvcmRMZW5ndGggPT0gVUFSVF9XT1JETEVOR1RIXzlCKSAmJiAoaHVhcnQtPkluaXQuUGFyaXR5ID09IFVBUlRfUEFSSVRZX05PTkUpKQogICAgIHsKLSAgICAgIHRtcCA9ICh1aW50MTZfdCAqKSBodWFydC0+cFJ4QnVmZlB0cjsKLSAgICAgIGlmIChodWFydC0+SW5pdC5QYXJpdHkgPT0gVUFSVF9QQVJJVFlfTk9ORSkKLSAgICAgIHsKLSAgICAgICAgKnRtcCA9ICh1aW50MTZfdCkoaHVhcnQtPkluc3RhbmNlLT5EUiAmICh1aW50MTZfdCkweDAxRkYpOwotICAgICAgICBodWFydC0+cFJ4QnVmZlB0ciArPSAyVTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgKnRtcCA9ICh1aW50MTZfdCkoaHVhcnQtPkluc3RhbmNlLT5EUiAmICh1aW50MTZfdCkweDAwRkYpOwotICAgICAgICBodWFydC0+cFJ4QnVmZlB0ciArPSAxVTsKLSAgICAgIH0KKyAgICAgIHBkYXRhOGJpdHMgID0gTlVMTDsKKyAgICAgIHBkYXRhMTZiaXRzID0gKHVpbnQxNl90ICopIGh1YXJ0LT5wUnhCdWZmUHRyOworICAgICAgKnBkYXRhMTZiaXRzID0gKHVpbnQxNl90KShodWFydC0+SW5zdGFuY2UtPkRSICYgKHVpbnQxNl90KTB4MDFGRik7CisgICAgICBodWFydC0+cFJ4QnVmZlB0ciArPSAyVTsKICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAgIGlmIChodWFydC0+SW5pdC5QYXJpdHkgPT0gVUFSVF9QQVJJVFlfTk9ORSkKKyAgICAgIHBkYXRhOGJpdHMgPSAodWludDhfdCAqKSBodWFydC0+cFJ4QnVmZlB0cjsKKyAgICAgIHBkYXRhMTZiaXRzICA9IE5VTEw7CisKKyAgICAgIGlmICgoaHVhcnQtPkluaXQuV29yZExlbmd0aCA9PSBVQVJUX1dPUkRMRU5HVEhfOUIpIHx8ICgoaHVhcnQtPkluaXQuV29yZExlbmd0aCA9PSBVQVJUX1dPUkRMRU5HVEhfOEIpICYmIChodWFydC0+SW5pdC5QYXJpdHkgPT0gVUFSVF9QQVJJVFlfTk9ORSkpKQogICAgICAgewotICAgICAgICAqaHVhcnQtPnBSeEJ1ZmZQdHIrKyA9ICh1aW50OF90KShodWFydC0+SW5zdGFuY2UtPkRSICYgKHVpbnQ4X3QpMHgwMEZGKTsKKyAgICAgICAgKnBkYXRhOGJpdHMgPSAodWludDhfdCkoaHVhcnQtPkluc3RhbmNlLT5EUiAmICh1aW50OF90KTB4MDBGRik7CiAgICAgICB9CiAgICAgICBlbHNlCiAgICAgICB7Ci0gICAgICAgICpodWFydC0+cFJ4QnVmZlB0cisrID0gKHVpbnQ4X3QpKGh1YXJ0LT5JbnN0YW5jZS0+RFIgJiAodWludDhfdCkweDAwN0YpOworICAgICAgICAqcGRhdGE4Yml0cyA9ICh1aW50OF90KShodWFydC0+SW5zdGFuY2UtPkRSICYgKHVpbnQ4X3QpMHgwMDdGKTsKICAgICAgIH0KKyAgICAgIGh1YXJ0LT5wUnhCdWZmUHRyICs9IDFVOwogICAgIH0KIAogICAgIGlmICgtLWh1YXJ0LT5SeFhmZXJDb3VudCA9PSAwVSkKQEAgLTMwMzQsMTQgKzM2MDIsMzMgQEAKICAgICAgIC8qIFJ4IHByb2Nlc3MgaXMgY29tcGxldGVkLCByZXN0b3JlIGh1YXJ0LT5SeFN0YXRlIHRvIFJlYWR5ICovCiAgICAgICBodWFydC0+UnhTdGF0ZSA9IEhBTF9VQVJUX1NUQVRFX1JFQURZOwogCi0jaWYgKFVTRV9IQUxfVUFSVF9SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkKLSAgICAgIC8qQ2FsbCByZWdpc3RlcmVkIFJ4IGNvbXBsZXRlIGNhbGxiYWNrKi8KLSAgICAgIGh1YXJ0LT5SeENwbHRDYWxsYmFjayhodWFydCk7Ci0jZWxzZQotICAgICAgLypDYWxsIGxlZ2FjeSB3ZWFrIFJ4IGNvbXBsZXRlIGNhbGxiYWNrKi8KLSAgICAgIEhBTF9VQVJUX1J4Q3BsdENhbGxiYWNrKGh1YXJ0KTsKLSNlbmRpZiAvKiBVU0VfSEFMX1VBUlRfUkVHSVNURVJfQ0FMTEJBQ0tTICovCisgICAgICAvKiBDaGVjayBjdXJyZW50IHJlY2VwdGlvbiBNb2RlIDoKKyAgICAgICAgIElmIFJlY2VwdGlvbiB0aWxsIElETEUgZXZlbnQgaGFzIGJlZW4gc2VsZWN0ZWQgOiAqLworICAgICAgaWYgKGh1YXJ0LT5SZWNlcHRpb25UeXBlID09IEhBTF9VQVJUX1JFQ0VQVElPTl9UT0lETEUpCisgICAgICB7CisgICAgICAgIC8qIERpc2FibGUgSURMRSBpbnRlcnJ1cHQgKi8KKyAgICAgICAgQ0xFQVJfQklUKGh1YXJ0LT5JbnN0YW5jZS0+Q1IxLCBVU0FSVF9DUjFfSURMRUlFKTsKIAorI2lmIChVU0VfSEFMX1VBUlRfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCisgICAgICAgIC8qQ2FsbCByZWdpc3RlcmVkIFJ4IEV2ZW50IGNhbGxiYWNrKi8KKyAgICAgICAgaHVhcnQtPlJ4RXZlbnRDYWxsYmFjayhodWFydCwgaHVhcnQtPlJ4WGZlclNpemUpOworI2Vsc2UKKyAgICAgICAgLypDYWxsIGxlZ2FjeSB3ZWFrIFJ4IEV2ZW50IGNhbGxiYWNrKi8KKyAgICAgICAgSEFMX1VBUlRFeF9SeEV2ZW50Q2FsbGJhY2soaHVhcnQsIGh1YXJ0LT5SeFhmZXJTaXplKTsKKyNlbmRpZgorICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgIC8qIFN0YW5kYXJkIHJlY2VwdGlvbiBBUEkgY2FsbGVkICovCisjaWYgKFVTRV9IQUxfVUFSVF9SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkJCSAgCisgICAgICAgLypDYWxsIHJlZ2lzdGVyZWQgUnggY29tcGxldGUgY2FsbGJhY2sqLworICAgICAgIGh1YXJ0LT5SeENwbHRDYWxsYmFjayhodWFydCk7CisjZWxzZQorICAgICAgIC8qQ2FsbCBsZWdhY3kgd2VhayBSeCBjb21wbGV0ZSBjYWxsYmFjayovCisgICAgICAgSEFMX1VBUlRfUnhDcGx0Q2FsbGJhY2soaHVhcnQpOworI2VuZGlmIC8qIFVTRV9IQUxfVUFSVF9SRUdJU1RFUl9DQUxMQkFDS1MgKi8KKyAgICAgIH0KKyAgICAgIGh1YXJ0LT5SZWNlcHRpb25UeXBlID0gSEFMX1VBUlRfUkVDRVBUSU9OX1NUQU5EQVJEOwogICAgICAgcmV0dXJuIEhBTF9PSzsKICAgICB9CiAgICAgcmV0dXJuIEhBTF9PSzsKQEAgLTMwOTAsNjIgKzM2NzcsMzUgQEAKICAgLyogQ29uZmlndXJlIHRoZSBVQVJUIEhGQzogU2V0IENUU0UgYW5kIFJUU0UgYml0cyBhY2NvcmRpbmcgdG8gaHVhcnQtPkluaXQuSHdGbG93Q3RsIHZhbHVlICovCiAgIE1PRElGWV9SRUcoaHVhcnQtPkluc3RhbmNlLT5DUjMsIChVU0FSVF9DUjNfUlRTRSB8IFVTQVJUX0NSM19DVFNFKSwgaHVhcnQtPkluaXQuSHdGbG93Q3RsKTsKIAotICAvKiBDaGVjayB0aGUgT3ZlciBTYW1wbGluZyAqLwotICBpZiAoaHVhcnQtPkluaXQuT3ZlclNhbXBsaW5nID09IFVBUlRfT1ZFUlNBTVBMSU5HXzgpCi0gIHsKLSAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFVTQVJUIEJSUiBDb25maWd1cmF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKICNpZiBkZWZpbmVkKFVTQVJUNikgJiYgZGVmaW5lZChVQVJUOSkgJiYgZGVmaW5lZChVQVJUMTApCiAgICAgaWYgKChodWFydC0+SW5zdGFuY2UgPT0gVVNBUlQxKSB8fCAoaHVhcnQtPkluc3RhbmNlID09IFVTQVJUNikgfHwgKGh1YXJ0LT5JbnN0YW5jZSA9PSBVQVJUOSkgfHwgKGh1YXJ0LT5JbnN0YW5jZSA9PSBVQVJUMTApKQogICAgIHsKICAgICAgIHBjbGsgPSBIQUxfUkNDX0dldFBDTEsyRnJlcSgpOwotICAgICAgaHVhcnQtPkluc3RhbmNlLT5CUlIgPSBVQVJUX0JSUl9TQU1QTElORzgocGNsaywgaHVhcnQtPkluaXQuQmF1ZFJhdGUpOwogICAgIH0KICNlbGlmIGRlZmluZWQoVVNBUlQ2KQogICAgIGlmICgoaHVhcnQtPkluc3RhbmNlID09IFVTQVJUMSkgfHwgKGh1YXJ0LT5JbnN0YW5jZSA9PSBVU0FSVDYpKQogICAgIHsKICAgICAgIHBjbGsgPSBIQUxfUkNDX0dldFBDTEsyRnJlcSgpOwotICAgICAgaHVhcnQtPkluc3RhbmNlLT5CUlIgPSBVQVJUX0JSUl9TQU1QTElORzgocGNsaywgaHVhcnQtPkluaXQuQmF1ZFJhdGUpOwogICAgIH0KICNlbHNlCiAgICAgaWYgKGh1YXJ0LT5JbnN0YW5jZSA9PSBVU0FSVDEpCiAgICAgewogICAgICAgcGNsayA9IEhBTF9SQ0NfR2V0UENMSzJGcmVxKCk7Ci0gICAgICBodWFydC0+SW5zdGFuY2UtPkJSUiA9IFVBUlRfQlJSX1NBTVBMSU5HOChwY2xrLCBodWFydC0+SW5pdC5CYXVkUmF0ZSk7CiAgICAgfQogI2VuZGlmIC8qIFVTQVJUNiAqLwogICAgIGVsc2UKICAgICB7CiAgICAgICBwY2xrID0gSEFMX1JDQ19HZXRQQ0xLMUZyZXEoKTsKLSAgICAgIGh1YXJ0LT5JbnN0YW5jZS0+QlJSID0gVUFSVF9CUlJfU0FNUExJTkc4KHBjbGssIGh1YXJ0LT5Jbml0LkJhdWRSYXRlKTsKICAgICB9CisgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVVNBUlQgQlJSIENvbmZpZ3VyYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyAgaWYgKGh1YXJ0LT5Jbml0Lk92ZXJTYW1wbGluZyA9PSBVQVJUX09WRVJTQU1QTElOR184KQorICB7CisgICAgaHVhcnQtPkluc3RhbmNlLT5CUlIgPSBVQVJUX0JSUl9TQU1QTElORzgocGNsaywgaHVhcnQtPkluaXQuQmF1ZFJhdGUpOwogICB9CiAgIGVsc2UKICAgewotICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVVNBUlQgQlJSIENvbmZpZ3VyYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSNpZiBkZWZpbmVkKFVTQVJUNikgJiYgZGVmaW5lZChVQVJUOSkgJiYgZGVmaW5lZChVQVJUMTApCi0gICAgaWYgKChodWFydC0+SW5zdGFuY2UgPT0gVVNBUlQxKSB8fCAoaHVhcnQtPkluc3RhbmNlID09IFVTQVJUNikgfHwgKGh1YXJ0LT5JbnN0YW5jZSA9PSBVQVJUOSkgfHwgKGh1YXJ0LT5JbnN0YW5jZSA9PSBVQVJUMTApKQotICAgIHsKLSAgICAgIHBjbGsgPSBIQUxfUkNDX0dldFBDTEsyRnJlcSgpOwotICAgICAgaHVhcnQtPkluc3RhbmNlLT5CUlIgPSBVQVJUX0JSUl9TQU1QTElORzE2KHBjbGssIGh1YXJ0LT5Jbml0LkJhdWRSYXRlKTsKLSAgICB9Ci0jZWxpZiBkZWZpbmVkKFVTQVJUNikKLSAgICBpZiAoKGh1YXJ0LT5JbnN0YW5jZSA9PSBVU0FSVDEpIHx8IChodWFydC0+SW5zdGFuY2UgPT0gVVNBUlQ2KSkKLSAgICB7Ci0gICAgICBwY2xrID0gSEFMX1JDQ19HZXRQQ0xLMkZyZXEoKTsKLSAgICAgIGh1YXJ0LT5JbnN0YW5jZS0+QlJSID0gVUFSVF9CUlJfU0FNUExJTkcxNihwY2xrLCBodWFydC0+SW5pdC5CYXVkUmF0ZSk7Ci0gICAgfQotI2Vsc2UKLSAgICBpZiAoaHVhcnQtPkluc3RhbmNlID09IFVTQVJUMSkKLSAgICB7Ci0gICAgICBwY2xrID0gSEFMX1JDQ19HZXRQQ0xLMkZyZXEoKTsKLSAgICAgIGh1YXJ0LT5JbnN0YW5jZS0+QlJSID0gVUFSVF9CUlJfU0FNUExJTkcxNihwY2xrLCBodWFydC0+SW5pdC5CYXVkUmF0ZSk7Ci0gICAgfQotI2VuZGlmIC8qIFVTQVJUNiAqLwotICAgIGVsc2UKLSAgICB7Ci0gICAgICBwY2xrID0gSEFMX1JDQ19HZXRQQ0xLMUZyZXEoKTsKLSAgICAgIGh1YXJ0LT5JbnN0YW5jZS0+QlJSID0gVUFSVF9CUlJfU0FNUExJTkcxNihwY2xrLCBodWFydC0+SW5pdC5CYXVkUmF0ZSk7Ci0gICAgfQorICAgIGh1YXJ0LT5JbnN0YW5jZS0+QlJSID0gVUFSVF9CUlJfU0FNUExJTkcxNihwY2xrLCBodWFydC0+SW5pdC5CYXVkUmF0ZSk7CiAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjR4eF9oYWxfdXNhcnQuYyBiL1NyYy9zdG0zMmY0eHhfaGFsX3VzYXJ0LmMKaW5kZXggYTY1ZWE3OS4uNjNhNjhjZSAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZjR4eF9oYWxfdXNhcnQuYworKysgYi9TcmMvc3RtMzJmNHh4X2hhbF91c2FydC5jCkBAIC0xNjYsNyArMTY2LDcgQEAKIAogICBAZW5kdmVyYmF0aW0KICAgICAgWy4uXQotICAgICAgIChAKSBBZGRpdGlvbm5hbCByZW1hcms6IElmIHRoZSBwYXJpdHkgaXMgZW5hYmxlZCwgdGhlbiB0aGUgTVNCIGJpdCBvZiB0aGUgZGF0YSB3cml0dGVuCisgICAgICAgKEApIEFkZGl0aW9uYWwgcmVtYXJrOiBJZiB0aGUgcGFyaXR5IGlzIGVuYWJsZWQsIHRoZW4gdGhlIE1TQiBiaXQgb2YgdGhlIGRhdGEgd3JpdHRlbgogICAgICAgICAgICBpbiB0aGUgZGF0YSByZWdpc3RlciBpcyB0cmFuc21pdHRlZCBidXQgaXMgY2hhbmdlZCBieSB0aGUgcGFyaXR5IGJpdC4KICAgICAgICAgICAgRGVwZW5kaW5nIG9uIHRoZSBmcmFtZSBsZW5ndGggZGVmaW5lZCBieSB0aGUgTSBiaXQgKDgtYml0cyBvciA5LWJpdHMpLAogICAgICAgICAgICB0aGUgcG9zc2libGUgVVNBUlQgZnJhbWUgZm9ybWF0cyBhcmUgYXMgbGlzdGVkIGluIHRoZSBmb2xsb3dpbmcgdGFibGU6CkBAIC01NDAsOSArNTQwLDkgQEAKIH0KIAogLyoqCi0gICogQGJyaWVmICBVbnJlZ2lzdGVyIGFuIFVBUlQgQ2FsbGJhY2sKLSAgKiAgICAgICAgIFVBUlQgY2FsbGFiYWNrIGlzIHJlZGlyZWN0ZWQgdG8gdGhlIHdlYWsgcHJlZGVmaW5lZCBjYWxsYmFjawotICAqIEBwYXJhbSAgaHVzYXJ0IHVhcnQgaGFuZGxlCisgICogQGJyaWVmICBVbnJlZ2lzdGVyIGFuIFVTQVJUIENhbGxiYWNrCisgICogICAgICAgICBVU0FSVCBjYWxsYWJhY2sgaXMgcmVkaXJlY3RlZCB0byB0aGUgd2VhayBwcmVkZWZpbmVkIGNhbGxiYWNrCisgICogQHBhcmFtICBodXNhcnQgdXNhcnQgaGFuZGxlCiAgICogQHBhcmFtICBDYWxsYmFja0lEIElEIG9mIHRoZSBjYWxsYmFjayB0byBiZSB1bnJlZ2lzdGVyZWQKICAgKiAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAgICogICAgICAgICAgIEBhcmcgQHJlZiBIQUxfVVNBUlRfVFhfSEFMRkNPTVBMRVRFX0NCX0lEIFR4IEhhbGYgQ29tcGxldGUgQ2FsbGJhY2sgSUQKQEAgLTczNCw3ICs3MzQsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIFNpbXBsZXggU2VuZCBhbiBhbW91bnQgb2YgZGF0YSBpbiBibG9ja2luZyBtb2RlLgotICAqIEBub3RlICAgV2hlbiBVQVJUIHBhcml0eSBpcyBub3QgZW5hYmxlZCAoUENFID0gMCksIGFuZCBXb3JkIExlbmd0aCBpcyBjb25maWd1cmVkIHRvIDkgYml0cyAoTTEtTTAgPSAwMSksCisgICogQG5vdGUgICBXaGVuIFVTQVJUIHBhcml0eSBpcyBub3QgZW5hYmxlZCAoUENFID0gMCksIGFuZCBXb3JkIExlbmd0aCBpcyBjb25maWd1cmVkIHRvIDkgYml0cyAoTTEtTTAgPSAwMSksCiAgICogICAgICAgICB0aGUgc2VudCBkYXRhIGlzIGhhbmRsZWQgYXMgYSBzZXQgb2YgdTE2LiBJbiB0aGlzIGNhc2UsIFNpemUgbXVzdCBpbmRpY2F0ZSB0aGUgbnVtYmVyCiAgICogICAgICAgICBvZiB1MTYgcHJvdmlkZWQgdGhyb3VnaCBwVHhEYXRhLgogICAqIEBwYXJhbSAgaHVzYXJ0ICBQb2ludGVyIHRvIGEgVVNBUlRfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucwpAQCAtNzQ2LDggKzc0Niw5IEBACiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfVVNBUlRfVHJhbnNtaXQoVVNBUlRfSGFuZGxlVHlwZURlZiAqaHVzYXJ0LCB1aW50OF90ICpwVHhEYXRhLCB1aW50MTZfdCBTaXplLCB1aW50MzJfdCBUaW1lb3V0KQogewotICB1aW50MTZfdCAqdG1wOwotICB1aW50MzJfdCB0aWNrc3RhcnQgPSAwVTsKKyAgdWludDhfdCAgKnB0eGRhdGE4Yml0czsKKyAgdWludDE2X3QgKnB0eGRhdGExNmJpdHM7CisgIHVpbnQzMl90IHRpY2tzdGFydDsKIAogICBpZiAoaHVzYXJ0LT5TdGF0ZSA9PSBIQUxfVVNBUlRfU1RBVEVfUkVBRFkpCiAgIHsKQEAgLTc2NywzNSArNzY4LDM4IEBACiAKICAgICBodXNhcnQtPlR4WGZlclNpemUgPSBTaXplOwogICAgIGh1c2FydC0+VHhYZmVyQ291bnQgPSBTaXplOworCisgICAgLyogSW4gY2FzZSBvZiA5Yml0cy9ObyBQYXJpdHkgdHJhbnNmZXIsIHBUeERhdGEgbmVlZHMgdG8gYmUgaGFuZGxlZCBhcyBhIHVpbnQxNl90IHBvaW50ZXIgKi8KKyAgICBpZiAoKGh1c2FydC0+SW5pdC5Xb3JkTGVuZ3RoID09IFVTQVJUX1dPUkRMRU5HVEhfOUIpICYmIChodXNhcnQtPkluaXQuUGFyaXR5ID09IFVTQVJUX1BBUklUWV9OT05FKSkKKyAgICB7CisgICAgICBwdHhkYXRhOGJpdHMgID0gTlVMTDsKKyAgICAgIHB0eGRhdGExNmJpdHMgPSAodWludDE2X3QgKikgcFR4RGF0YTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIHB0eGRhdGE4Yml0cyAgPSBwVHhEYXRhOworICAgICAgcHR4ZGF0YTE2Yml0cyA9IE5VTEw7CisgICAgfQorCiAgICAgd2hpbGUgKGh1c2FydC0+VHhYZmVyQ291bnQgPiAwVSkKICAgICB7Ci0gICAgICBodXNhcnQtPlR4WGZlckNvdW50LS07Ci0gICAgICBpZiAoaHVzYXJ0LT5Jbml0LldvcmRMZW5ndGggPT0gVVNBUlRfV09SRExFTkdUSF85QikKKyAgICAgIC8qIFdhaXQgZm9yIFRYRSBmbGFnIGluIG9yZGVyIHRvIHdyaXRlIGRhdGEgaW4gRFIgKi8KKyAgICAgIGlmIChVU0FSVF9XYWl0T25GbGFnVW50aWxUaW1lb3V0KGh1c2FydCwgVVNBUlRfRkxBR19UWEUsIFJFU0VULCB0aWNrc3RhcnQsIFRpbWVvdXQpICE9IEhBTF9PSykKICAgICAgIHsKLSAgICAgICAgLyogV2FpdCBmb3IgVEMgZmxhZyBpbiBvcmRlciB0byB3cml0ZSBkYXRhIGluIERSICovCi0gICAgICAgIGlmIChVU0FSVF9XYWl0T25GbGFnVW50aWxUaW1lb3V0KGh1c2FydCwgVVNBUlRfRkxBR19UWEUsIFJFU0VULCB0aWNrc3RhcnQsIFRpbWVvdXQpICE9IEhBTF9PSykKLSAgICAgICAgewotICAgICAgICAgIHJldHVybiBIQUxfVElNRU9VVDsKLSAgICAgICAgfQotICAgICAgICB0bXAgPSAodWludDE2X3QgKikgcFR4RGF0YTsKLSAgICAgICAgaHVzYXJ0LT5JbnN0YW5jZS0+RFIgPSAoKnRtcCAmICh1aW50MTZfdCkweDAxRkYpOwotICAgICAgICBpZiAoaHVzYXJ0LT5Jbml0LlBhcml0eSA9PSBVU0FSVF9QQVJJVFlfTk9ORSkKLSAgICAgICAgewotICAgICAgICAgIHBUeERhdGEgKz0gMlU7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgcFR4RGF0YSArPSAxVTsKLSAgICAgICAgfQorICAgICAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CisgICAgICB9CisgICAgICBpZiAocHR4ZGF0YThiaXRzID09IE5VTEwpCisgICAgICB7CisgICAgICAgIGh1c2FydC0+SW5zdGFuY2UtPkRSID0gKHVpbnQxNl90KSgqcHR4ZGF0YTE2Yml0cyAmICh1aW50MTZfdCkweDAxRkYpOworICAgICAgICBwdHhkYXRhMTZiaXRzKys7CiAgICAgICB9CiAgICAgICBlbHNlCiAgICAgICB7Ci0gICAgICAgIGlmIChVU0FSVF9XYWl0T25GbGFnVW50aWxUaW1lb3V0KGh1c2FydCwgVVNBUlRfRkxBR19UWEUsIFJFU0VULCB0aWNrc3RhcnQsIFRpbWVvdXQpICE9IEhBTF9PSykKLSAgICAgICAgewotICAgICAgICAgIHJldHVybiBIQUxfVElNRU9VVDsKLSAgICAgICAgfQotICAgICAgICBodXNhcnQtPkluc3RhbmNlLT5EUiA9ICgqcFR4RGF0YSsrICYgKHVpbnQ4X3QpMHhGRik7CisgICAgICAgIGh1c2FydC0+SW5zdGFuY2UtPkRSID0gKHVpbnQ4X3QpKCpwdHhkYXRhOGJpdHMgJiAodWludDhfdCkweEZGKTsKKyAgICAgICAgcHR4ZGF0YThiaXRzKys7CiAgICAgICB9CisKKyAgICAgIGh1c2FydC0+VHhYZmVyQ291bnQtLTsKICAgICB9CiAKICAgICBpZiAoVVNBUlRfV2FpdE9uRmxhZ1VudGlsVGltZW91dChodXNhcnQsIFVTQVJUX0ZMQUdfVEMsIFJFU0VULCB0aWNrc3RhcnQsIFRpbWVvdXQpICE9IEhBTF9PSykKQEAgLTgxOSw3ICs4MjMsNyBAQAogLyoqCiAgICogQGJyaWVmICBGdWxsLUR1cGxleCBSZWNlaXZlIGFuIGFtb3VudCBvZiBkYXRhIGluIGJsb2NraW5nIG1vZGUuCiAgICogQG5vdGUgICBUbyByZWNlaXZlIHN5bmNocm9ub3VzIGRhdGEsIGR1bW15IGRhdGEgYXJlIHNpbXVsdGFuZW91c2x5IHRyYW5zbWl0dGVkLgotICAqIEBub3RlICAgV2hlbiBVQVJUIHBhcml0eSBpcyBub3QgZW5hYmxlZCAoUENFID0gMCksIGFuZCBXb3JkIExlbmd0aCBpcyBjb25maWd1cmVkIHRvIDkgYml0cyAoTTEtTTAgPSAwMSksCisgICogQG5vdGUgICBXaGVuIFVTQVJUIHBhcml0eSBpcyBub3QgZW5hYmxlZCAoUENFID0gMCksIGFuZCBXb3JkIExlbmd0aCBpcyBjb25maWd1cmVkIHRvIDkgYml0cyAoTTEtTTAgPSAwMSksCiAgICogICAgICAgICB0aGUgcmVjZWl2ZWQgZGF0YSBpcyBoYW5kbGVkIGFzIGEgc2V0IG9mIHUxNi4gSW4gdGhpcyBjYXNlLCBTaXplIG11c3QgaW5kaWNhdGUgdGhlIG51bWJlcgogICAqICAgICAgICAgb2YgdTE2IGF2YWlsYWJsZSB0aHJvdWdoIHBSeERhdGEuCiAgICogQHBhcmFtICBodXNhcnQgIFBvaW50ZXIgdG8gYSBVU0FSVF9IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCkBAIC04MzEsOCArODM1LDkgQEAKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9VU0FSVF9SZWNlaXZlKFVTQVJUX0hhbmRsZVR5cGVEZWYgKmh1c2FydCwgdWludDhfdCAqcFJ4RGF0YSwgdWludDE2X3QgU2l6ZSwgdWludDMyX3QgVGltZW91dCkKIHsKLSAgdWludDE2X3QgKnRtcDsKLSAgdWludDMyX3QgdGlja3N0YXJ0ID0gMFU7CisgIHVpbnQ4X3QgICpwcnhkYXRhOGJpdHM7CisgIHVpbnQxNl90ICpwcnhkYXRhMTZiaXRzOworICB1aW50MzJfdCB0aWNrc3RhcnQ7CiAKICAgaWYgKGh1c2FydC0+U3RhdGUgPT0gSEFMX1VTQVJUX1NUQVRFX1JFQURZKQogICB7CkBAIC04NTEsNjUgKzg1Niw1NiBAQAogCiAgICAgaHVzYXJ0LT5SeFhmZXJTaXplID0gU2l6ZTsKICAgICBodXNhcnQtPlJ4WGZlckNvdW50ID0gU2l6ZTsKKworICAgIC8qIEluIGNhc2Ugb2YgOWJpdHMvTm8gUGFyaXR5IHRyYW5zZmVyLCBwUnhEYXRhIG5lZWRzIHRvIGJlIGhhbmRsZWQgYXMgYSB1aW50MTZfdCBwb2ludGVyICovCisgICAgaWYgKChodXNhcnQtPkluaXQuV29yZExlbmd0aCA9PSBVU0FSVF9XT1JETEVOR1RIXzlCKSAmJiAoaHVzYXJ0LT5Jbml0LlBhcml0eSA9PSBVU0FSVF9QQVJJVFlfTk9ORSkpCisgICAgeworICAgICAgcHJ4ZGF0YThiaXRzICA9IE5VTEw7CisgICAgICBwcnhkYXRhMTZiaXRzID0gKHVpbnQxNl90ICopIHBSeERhdGE7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICBwcnhkYXRhOGJpdHMgID0gcFJ4RGF0YTsKKyAgICAgIHByeGRhdGExNmJpdHMgPSBOVUxMOworICAgIH0KKwogICAgIC8qIENoZWNrIHRoZSByZW1haW4gZGF0YSB0byBiZSByZWNlaXZlZCAqLwogICAgIHdoaWxlIChodXNhcnQtPlJ4WGZlckNvdW50ID4gMFUpCiAgICAgewotICAgICAgaHVzYXJ0LT5SeFhmZXJDb3VudC0tOwotICAgICAgaWYgKGh1c2FydC0+SW5pdC5Xb3JkTGVuZ3RoID09IFVTQVJUX1dPUkRMRU5HVEhfOUIpCisgICAgICAvKiBXYWl0IHVudGlsIFRYRSBmbGFnIGlzIHNldCB0byBzZW5kIGR1bW15IGJ5dGUgaW4gb3JkZXIgdG8gZ2VuZXJhdGUgdGhlCisgICAgICAqIGNsb2NrIGZvciB0aGUgc2xhdmUgdG8gc2VuZCBkYXRhLgorICAgICAgKiBXaGF0ZXZlciB0aGUgZnJhbWUgbGVuZ3RoICg3LCA4IG9yIDktYml0IGxvbmcpLCB0aGUgc2FtZSBkdW1teSB2YWx1ZQorICAgICAgKiBjYW4gYmUgd3JpdHRlbiBmb3IgYWxsIHRoZSBjYXNlcy4gKi8KKyAgICAgIGlmIChVU0FSVF9XYWl0T25GbGFnVW50aWxUaW1lb3V0KGh1c2FydCwgVVNBUlRfRkxBR19UWEUsIFJFU0VULCB0aWNrc3RhcnQsIFRpbWVvdXQpICE9IEhBTF9PSykKICAgICAgIHsKLSAgICAgICAgLyogV2FpdCB1bnRpbCBUWEUgZmxhZyBpcyBzZXQgdG8gc2VuZCBkdW1teSBieXRlIGluIG9yZGVyIHRvIGdlbmVyYXRlIHRoZSBjbG9jayBmb3IgdGhlIHNsYXZlIHRvIHNlbmQgZGF0YSAqLwotICAgICAgICBpZiAoVVNBUlRfV2FpdE9uRmxhZ1VudGlsVGltZW91dChodXNhcnQsIFVTQVJUX0ZMQUdfVFhFLCBSRVNFVCwgdGlja3N0YXJ0LCBUaW1lb3V0KSAhPSBIQUxfT0spCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gSEFMX1RJTUVPVVQ7Ci0gICAgICAgIH0KLSAgICAgICAgLyogU2VuZCBkdW1teSBieXRlIGluIG9yZGVyIHRvIGdlbmVyYXRlIGNsb2NrICovCi0gICAgICAgIGh1c2FydC0+SW5zdGFuY2UtPkRSID0gKERVTU1ZX0RBVEEgJiAodWludDE2X3QpMHgwMUZGKTsKKyAgICAgICAgcmV0dXJuIEhBTF9USU1FT1VUOworICAgICAgfQorICAgICAgaHVzYXJ0LT5JbnN0YW5jZS0+RFIgPSAoRFVNTVlfREFUQSAmICh1aW50MTZfdCkweDBGRik7CiAKLSAgICAgICAgLyogV2FpdCBmb3IgUlhORSBGbGFnICovCi0gICAgICAgIGlmIChVU0FSVF9XYWl0T25GbGFnVW50aWxUaW1lb3V0KGh1c2FydCwgVVNBUlRfRkxBR19SWE5FLCBSRVNFVCwgdGlja3N0YXJ0LCBUaW1lb3V0KSAhPSBIQUxfT0spCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gSEFMX1RJTUVPVVQ7Ci0gICAgICAgIH0KLSAgICAgICAgdG1wID0gKHVpbnQxNl90ICopIHBSeERhdGEgOwotICAgICAgICBpZiAoaHVzYXJ0LT5Jbml0LlBhcml0eSA9PSBVU0FSVF9QQVJJVFlfTk9ORSkKLSAgICAgICAgewotICAgICAgICAgICp0bXAgPSAodWludDE2X3QpKGh1c2FydC0+SW5zdGFuY2UtPkRSICYgKHVpbnQxNl90KTB4MDFGRik7Ci0gICAgICAgICAgcFJ4RGF0YSArPSAyVTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAqdG1wID0gKHVpbnQxNl90KShodXNhcnQtPkluc3RhbmNlLT5EUiAmICh1aW50MTZfdCkweDAwRkYpOwotICAgICAgICAgIHBSeERhdGEgKz0gMVU7Ci0gICAgICAgIH0KKyAgICAgIC8qIFdhaXQgdW50aWwgUlhORSBmbGFnIGlzIHNldCB0byByZWNlaXZlIHRoZSBieXRlICovCisgICAgICBpZiAoVVNBUlRfV2FpdE9uRmxhZ1VudGlsVGltZW91dChodXNhcnQsIFVTQVJUX0ZMQUdfUlhORSwgUkVTRVQsIHRpY2tzdGFydCwgVGltZW91dCkgIT0gSEFMX09LKQorICAgICAgeworICAgICAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CisgICAgICB9CisKKyAgICAgIGlmIChwcnhkYXRhOGJpdHMgPT0gTlVMTCkKKyAgICAgIHsKKyAgICAgICAgKnByeGRhdGExNmJpdHMgPSAodWludDE2X3QpKGh1c2FydC0+SW5zdGFuY2UtPkRSICYgKHVpbnQxNl90KTB4MDFGRik7CisgICAgICAgIHByeGRhdGExNmJpdHMrKzsKICAgICAgIH0KICAgICAgIGVsc2UKICAgICAgIHsKLSAgICAgICAgLyogV2FpdCB1bnRpbCBUWEUgZmxhZyBpcyBzZXQgdG8gc2VuZCBkdW1teSBieXRlIGluIG9yZGVyIHRvIGdlbmVyYXRlIHRoZSBjbG9jayBmb3IgdGhlIHNsYXZlIHRvIHNlbmQgZGF0YSAqLwotICAgICAgICBpZiAoVVNBUlRfV2FpdE9uRmxhZ1VudGlsVGltZW91dChodXNhcnQsIFVTQVJUX0ZMQUdfVFhFLCBSRVNFVCwgdGlja3N0YXJ0LCBUaW1lb3V0KSAhPSBIQUxfT0spCisgICAgICAgIGlmICgoaHVzYXJ0LT5Jbml0LldvcmRMZW5ndGggPT0gVVNBUlRfV09SRExFTkdUSF85QikgfHwgKChodXNhcnQtPkluaXQuV29yZExlbmd0aCA9PSBVU0FSVF9XT1JETEVOR1RIXzhCKSAmJiAoaHVzYXJ0LT5Jbml0LlBhcml0eSA9PSBVU0FSVF9QQVJJVFlfTk9ORSkpKQogICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIEhBTF9USU1FT1VUOwotICAgICAgICB9Ci0KLSAgICAgICAgLyogU2VuZCBEdW1teSBCeXRlIGluIG9yZGVyIHRvIGdlbmVyYXRlIGNsb2NrICovCi0gICAgICAgIGh1c2FydC0+SW5zdGFuY2UtPkRSID0gKERVTU1ZX0RBVEEgJiAodWludDE2X3QpMHgwMEZGKTsKLQotICAgICAgICAvKiBXYWl0IHVudGlsIFJYTkUgZmxhZyBpcyBzZXQgdG8gcmVjZWl2ZSB0aGUgYnl0ZSAqLwotICAgICAgICBpZiAoVVNBUlRfV2FpdE9uRmxhZ1VudGlsVGltZW91dChodXNhcnQsIFVTQVJUX0ZMQUdfUlhORSwgUkVTRVQsIHRpY2tzdGFydCwgVGltZW91dCkgIT0gSEFMX09LKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIEhBTF9USU1FT1VUOwotICAgICAgICB9Ci0gICAgICAgIGlmIChodXNhcnQtPkluaXQuUGFyaXR5ID09IFVTQVJUX1BBUklUWV9OT05FKQotICAgICAgICB7Ci0gICAgICAgICAgLyogUmVjZWl2ZSBkYXRhICovCi0gICAgICAgICAgKnBSeERhdGErKyA9ICh1aW50OF90KShodXNhcnQtPkluc3RhbmNlLT5EUiAmICh1aW50OF90KTB4MDBGRik7CisgICAgICAgICAgKnByeGRhdGE4Yml0cyA9ICh1aW50OF90KShodXNhcnQtPkluc3RhbmNlLT5EUiAmICh1aW50OF90KTB4MEZGKTsKICAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAgIHsKLSAgICAgICAgICAvKiBSZWNlaXZlIGRhdGEgKi8KLSAgICAgICAgICAqcFJ4RGF0YSsrID0gKHVpbnQ4X3QpKGh1c2FydC0+SW5zdGFuY2UtPkRSICYgKHVpbnQ4X3QpMHgwMDdGKTsKKyAgICAgICAgICAqcHJ4ZGF0YThiaXRzID0gKHVpbnQ4X3QpKGh1c2FydC0+SW5zdGFuY2UtPkRSICYgKHVpbnQ4X3QpMHgwN0YpOwogICAgICAgICB9Ci0KKyAgICAgICAgcHJ4ZGF0YThiaXRzKys7CiAgICAgICB9CisgICAgICBodXNhcnQtPlJ4WGZlckNvdW50LS07CiAgICAgfQogCiAgICAgaHVzYXJ0LT5TdGF0ZSA9IEhBTF9VU0FSVF9TVEFURV9SRUFEWTsKQEAgLTkyNyw3ICs5MjMsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIEZ1bGwtRHVwbGV4IFNlbmQgYW5kIFJlY2VpdmUgYW4gYW1vdW50IG9mIGRhdGEgaW4gZnVsbC1kdXBsZXggbW9kZSAoYmxvY2tpbmcgbW9kZSkuCi0gICogQG5vdGUgICBXaGVuIFVBUlQgcGFyaXR5IGlzIG5vdCBlbmFibGVkIChQQ0UgPSAwKSwgYW5kIFdvcmQgTGVuZ3RoIGlzIGNvbmZpZ3VyZWQgdG8gOSBiaXRzIChNMS1NMCA9IDAxKSwKKyAgKiBAbm90ZSAgIFdoZW4gVVNBUlQgcGFyaXR5IGlzIG5vdCBlbmFibGVkIChQQ0UgPSAwKSwgYW5kIFdvcmQgTGVuZ3RoIGlzIGNvbmZpZ3VyZWQgdG8gOSBiaXRzIChNMS1NMCA9IDAxKSwKICAgKiAgICAgICAgIHRoZSBzZW50IGRhdGEgYW5kIHRoZSByZWNlaXZlZCBkYXRhIGFyZSBoYW5kbGVkIGFzIHNldHMgb2YgdTE2LiBJbiB0aGlzIGNhc2UsIFNpemUgbXVzdCBpbmRpY2F0ZSB0aGUgbnVtYmVyCiAgICogICAgICAgICBvZiB1MTYgYXZhaWxhYmxlIHRocm91Z2ggcFR4RGF0YSBhbmQgdGhyb3VnaCBwUnhEYXRhLgogICAqIEBwYXJhbSAgaHVzYXJ0ICBQb2ludGVyIHRvIGEgVVNBUlRfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucwpAQCAtOTQwLDggKzkzNiwxMiBAQAogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1VTQVJUX1RyYW5zbWl0UmVjZWl2ZShVU0FSVF9IYW5kbGVUeXBlRGVmICpodXNhcnQsIHVpbnQ4X3QgKnBUeERhdGEsIHVpbnQ4X3QgKnBSeERhdGEsIHVpbnQxNl90IFNpemUsIHVpbnQzMl90IFRpbWVvdXQpCiB7Ci0gIHVpbnQxNl90ICp0bXA7Ci0gIHVpbnQzMl90IHRpY2tzdGFydCA9IDBVOworICB1aW50OF90ICAqcHJ4ZGF0YThiaXRzOworICB1aW50MTZfdCAqcHJ4ZGF0YTE2Yml0czsKKyAgdWludDhfdCAgKnB0eGRhdGE4Yml0czsKKyAgdWludDE2X3QgKnB0eGRhdGExNmJpdHM7CisgIHVpbnQxNl90IHJ4ZGF0YWNvdW50OworICB1aW50MzJfdCB0aWNrc3RhcnQ7CiAKICAgaWYgKGh1c2FydC0+U3RhdGUgPT0gSEFMX1VTQVJUX1NUQVRFX1JFQURZKQogICB7CkBAIC05NDksNiArOTQ5LDE3IEBACiAgICAgewogICAgICAgcmV0dXJuICBIQUxfRVJST1I7CiAgICAgfQorCisgICAgLyogSW4gY2FzZSBvZiA5Yml0cy9ObyBQYXJpdHkgdHJhbnNmZXIsIHBUeERhdGEgYW5kIHBSeERhdGEgYnVmZmVycyBwcm92aWRlZCBhcyBpbnB1dCBwYXJhbWV0ZXIKKyAgICAgICBzaG91bGQgYmUgYWxpZ25lZCBvbiBhIHUxNiBmcm9udGllciwgYXMgZGF0YSB0byBiZSBmaWxsZWQgaW50byBURFIvcmV0cmlldmVkIGZyb20gUkRSIHdpbGwgYmUKKyAgICAgICBoYW5kbGVkIHRocm91Z2ggYSB1MTYgY2FzdC4gKi8KKyAgICBpZiAoKGh1c2FydC0+SW5pdC5Xb3JkTGVuZ3RoID09IFVTQVJUX1dPUkRMRU5HVEhfOUIpICYmIChodXNhcnQtPkluaXQuUGFyaXR5ID09IFVTQVJUX1BBUklUWV9OT05FKSkKKyAgICB7CisgICAgICBpZiAoKCgoKHVpbnQzMl90KXBUeERhdGEpICYgMVUpICE9IDBVKSB8fCAoKCgodWludDMyX3QpcFJ4RGF0YSkgJiAxVSkgIT0gMFUpKQorICAgICAgeworICAgICAgICByZXR1cm4gIEhBTF9FUlJPUjsKKyAgICAgIH0KKyAgICB9CiAgICAgLyogUHJvY2VzcyBMb2NrZWQgKi8KICAgICBfX0hBTF9MT0NLKGh1c2FydCk7CiAKQEAgLTk2Myw3MSArOTc0LDc4IEBACiAgICAgaHVzYXJ0LT5UeFhmZXJDb3VudCA9IFNpemU7CiAgICAgaHVzYXJ0LT5SeFhmZXJDb3VudCA9IFNpemU7CiAKLSAgICAvKiBDaGVjayB0aGUgcmVtYWluIGRhdGEgdG8gYmUgcmVjZWl2ZWQgKi8KLSAgICB3aGlsZSAoaHVzYXJ0LT5UeFhmZXJDb3VudCA+IDBVKQorICAgIC8qIEluIGNhc2Ugb2YgOWJpdHMvTm8gUGFyaXR5IHRyYW5zZmVyLCBwUnhEYXRhIG5lZWRzIHRvIGJlIGhhbmRsZWQgYXMgYSB1aW50MTZfdCBwb2ludGVyICovCisgICAgaWYgKChodXNhcnQtPkluaXQuV29yZExlbmd0aCA9PSBVU0FSVF9XT1JETEVOR1RIXzlCKSAmJiAoaHVzYXJ0LT5Jbml0LlBhcml0eSA9PSBVU0FSVF9QQVJJVFlfTk9ORSkpCiAgICAgewotICAgICAgaHVzYXJ0LT5UeFhmZXJDb3VudC0tOwotICAgICAgaHVzYXJ0LT5SeFhmZXJDb3VudC0tOwotICAgICAgaWYgKGh1c2FydC0+SW5pdC5Xb3JkTGVuZ3RoID09IFVTQVJUX1dPUkRMRU5HVEhfOUIpCisgICAgICBwcnhkYXRhOGJpdHMgID0gTlVMTDsKKyAgICAgIHB0eGRhdGE4Yml0cyAgPSBOVUxMOworICAgICAgcHR4ZGF0YTE2Yml0cyA9ICh1aW50MTZfdCAqKSBwVHhEYXRhOworICAgICAgcHJ4ZGF0YTE2Yml0cyA9ICh1aW50MTZfdCAqKSBwUnhEYXRhOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgcHJ4ZGF0YThiaXRzICA9IHBSeERhdGE7CisgICAgICBwdHhkYXRhOGJpdHMgID0gcFR4RGF0YTsKKyAgICAgIHB0eGRhdGExNmJpdHMgPSBOVUxMOworICAgICAgcHJ4ZGF0YTE2Yml0cyA9IE5VTEw7CisgICAgfQorCisgICAgLyogQ2hlY2sgdGhlIHJlbWFpbiBkYXRhIHRvIGJlIHJlY2VpdmVkICovCisgICAgLyogcnhkYXRhY291bnQgaXMgYSB0ZW1wb3JhcnkgdmFyaWFibGUgZm9yIE1JU1JBQzIwMTItUnVsZS0xMy41ICovCisgICAgcnhkYXRhY291bnQgPSBodXNhcnQtPlJ4WGZlckNvdW50OworICAgIHdoaWxlICgoaHVzYXJ0LT5UeFhmZXJDb3VudCA+IDBVKSB8fCAocnhkYXRhY291bnQgPiAwVSkpCisgICAgeworICAgICAgaWYgKGh1c2FydC0+VHhYZmVyQ291bnQgPiAwVSkKICAgICAgIHsKLSAgICAgICAgLyogV2FpdCBmb3IgVEMgZmxhZyBpbiBvcmRlciB0byB3cml0ZSBkYXRhIGluIERSICovCisgICAgICAgIC8qIFdhaXQgZm9yIFRYRSBmbGFnIGluIG9yZGVyIHRvIHdyaXRlIGRhdGEgaW4gRFIgKi8KICAgICAgICAgaWYgKFVTQVJUX1dhaXRPbkZsYWdVbnRpbFRpbWVvdXQoaHVzYXJ0LCBVU0FSVF9GTEFHX1RYRSwgUkVTRVQsIHRpY2tzdGFydCwgVGltZW91dCkgIT0gSEFMX09LKQogICAgICAgICB7CiAgICAgICAgICAgcmV0dXJuIEhBTF9USU1FT1VUOwogICAgICAgICB9Ci0gICAgICAgIHRtcCA9ICh1aW50MTZfdCAqKSBwVHhEYXRhOwotICAgICAgICBodXNhcnQtPkluc3RhbmNlLT5EUiA9ICgqdG1wICYgKHVpbnQxNl90KTB4MDFGRik7Ci0gICAgICAgIGlmIChodXNhcnQtPkluaXQuUGFyaXR5ID09IFVTQVJUX1BBUklUWV9OT05FKQorCisgICAgICAgIGlmIChwdHhkYXRhOGJpdHMgPT0gTlVMTCkKICAgICAgICAgewotICAgICAgICAgIHBUeERhdGEgKz0gMlU7CisgICAgICAgICAgaHVzYXJ0LT5JbnN0YW5jZS0+RFIgPSAodWludDE2X3QpKCpwdHhkYXRhMTZiaXRzICYgKHVpbnQxNl90KTB4MDFGRik7CisgICAgICAgICAgcHR4ZGF0YTE2Yml0cysrOwogICAgICAgICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgewotICAgICAgICAgIHBUeERhdGEgKz0gMVU7CisgICAgICAgICAgaHVzYXJ0LT5JbnN0YW5jZS0+RFIgPSAodWludDhfdCkoKnB0eGRhdGE4Yml0cyAmICh1aW50OF90KTB4RkYpOworICAgICAgICAgIHB0eGRhdGE4Yml0cysrOyAKICAgICAgICAgfQogCisgICAgICAgIGh1c2FydC0+VHhYZmVyQ291bnQtLTsKKyAgICAgIH0KKworICAgICAgaWYgKGh1c2FydC0+UnhYZmVyQ291bnQgPiAwVSkKKyAgICAgIHsgIAogICAgICAgICAvKiBXYWl0IGZvciBSWE5FIEZsYWcgKi8KICAgICAgICAgaWYgKFVTQVJUX1dhaXRPbkZsYWdVbnRpbFRpbWVvdXQoaHVzYXJ0LCBVU0FSVF9GTEFHX1JYTkUsIFJFU0VULCB0aWNrc3RhcnQsIFRpbWVvdXQpICE9IEhBTF9PSykKICAgICAgICAgewogICAgICAgICAgIHJldHVybiBIQUxfVElNRU9VVDsKICAgICAgICAgfQotICAgICAgICB0bXAgPSAodWludDE2X3QgKikgcFJ4RGF0YSA7Ci0gICAgICAgIGlmIChodXNhcnQtPkluaXQuUGFyaXR5ID09IFVTQVJUX1BBUklUWV9OT05FKQorICAgICAgICBpZiAocHJ4ZGF0YThiaXRzID09IE5VTEwpCiAgICAgICAgIHsKLSAgICAgICAgICAqdG1wID0gKHVpbnQxNl90KShodXNhcnQtPkluc3RhbmNlLT5EUiAmICh1aW50MTZfdCkweDAxRkYpOwotICAgICAgICAgIHBSeERhdGEgKz0gMlU7CisgICAgICAgICAgKnByeGRhdGExNmJpdHMgPSAodWludDE2X3QpKGh1c2FydC0+SW5zdGFuY2UtPkRSICYgKHVpbnQxNl90KTB4MDFGRik7CisgICAgICAgICAgcHJ4ZGF0YTE2Yml0cysrOwogICAgICAgICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgewotICAgICAgICAgICp0bXAgPSAodWludDE2X3QpKGh1c2FydC0+SW5zdGFuY2UtPkRSICYgKHVpbnQxNl90KTB4MDBGRik7Ci0gICAgICAgICAgcFJ4RGF0YSArPSAxVTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICAvKiBXYWl0IGZvciBUQyBmbGFnIGluIG9yZGVyIHRvIHdyaXRlIGRhdGEgaW4gRFIgKi8KLSAgICAgICAgaWYgKFVTQVJUX1dhaXRPbkZsYWdVbnRpbFRpbWVvdXQoaHVzYXJ0LCBVU0FSVF9GTEFHX1RYRSwgUkVTRVQsIHRpY2tzdGFydCwgVGltZW91dCkgIT0gSEFMX09LKQotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIEhBTF9USU1FT1VUOwotICAgICAgICB9Ci0gICAgICAgIGh1c2FydC0+SW5zdGFuY2UtPkRSID0gKCpwVHhEYXRhKysgJiAodWludDhfdCkweDAwRkYpOworICAgICAgICAgIGlmICgoaHVzYXJ0LT5Jbml0LldvcmRMZW5ndGggPT0gVVNBUlRfV09SRExFTkdUSF85QikgfHwgKChodXNhcnQtPkluaXQuV29yZExlbmd0aCA9PSBVU0FSVF9XT1JETEVOR1RIXzhCKSAmJiAoaHVzYXJ0LT5Jbml0LlBhcml0eSA9PSBVU0FSVF9QQVJJVFlfTk9ORSkpKQorICAgICAgICAgIHsKKyAgICAgICAgICAgICpwcnhkYXRhOGJpdHMgPSAodWludDhfdCkoaHVzYXJ0LT5JbnN0YW5jZS0+RFIgJiAodWludDhfdCkweDBGRik7CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICB7CisgICAgICAgICAgICAqcHJ4ZGF0YThiaXRzID0gKHVpbnQ4X3QpKGh1c2FydC0+SW5zdGFuY2UtPkRSICYgKHVpbnQ4X3QpMHgwN0YpOworICAgICAgICAgIH0KIAotICAgICAgICAvKiBXYWl0IGZvciBSWE5FIEZsYWcgKi8KLSAgICAgICAgaWYgKFVTQVJUX1dhaXRPbkZsYWdVbnRpbFRpbWVvdXQoaHVzYXJ0LCBVU0FSVF9GTEFHX1JYTkUsIFJFU0VULCB0aWNrc3RhcnQsIFRpbWVvdXQpICE9IEhBTF9PSykKLSAgICAgICAgewotICAgICAgICAgIHJldHVybiBIQUxfVElNRU9VVDsKKyAgICAgICAgICBwcnhkYXRhOGJpdHMrKzsKICAgICAgICAgfQotICAgICAgICBpZiAoaHVzYXJ0LT5Jbml0LlBhcml0eSA9PSBVU0FSVF9QQVJJVFlfTk9ORSkKLSAgICAgICAgewotICAgICAgICAgIC8qIFJlY2VpdmUgZGF0YSAqLwotICAgICAgICAgICpwUnhEYXRhKysgPSAodWludDhfdCkoaHVzYXJ0LT5JbnN0YW5jZS0+RFIgJiAodWludDhfdCkweDAwRkYpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIC8qIFJlY2VpdmUgZGF0YSAqLwotICAgICAgICAgICpwUnhEYXRhKysgPSAodWludDhfdCkoaHVzYXJ0LT5JbnN0YW5jZS0+RFIgJiAodWludDhfdCkweDAwN0YpOwotICAgICAgICB9CisKKyAgICAgICAgaHVzYXJ0LT5SeFhmZXJDb3VudC0tOwogICAgICAgfQorICAgICAgcnhkYXRhY291bnQgPSBodXNhcnQtPlJ4WGZlckNvdW50OwogICAgIH0KIAogICAgIGh1c2FydC0+U3RhdGUgPSBIQUxfVVNBUlRfU1RBVEVfUkVBRFk7CkBAIC0xMDQ1LDcgKzEwNjMsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIFNpbXBsZXggU2VuZCBhbiBhbW91bnQgb2YgZGF0YSBpbiBub24tYmxvY2tpbmcgbW9kZS4KLSAgKiBAbm90ZSAgIFdoZW4gVUFSVCBwYXJpdHkgaXMgbm90IGVuYWJsZWQgKFBDRSA9IDApLCBhbmQgV29yZCBMZW5ndGggaXMgY29uZmlndXJlZCB0byA5IGJpdHMgKE0xLU0wID0gMDEpLAorICAqIEBub3RlICAgV2hlbiBVU0FSVCBwYXJpdHkgaXMgbm90IGVuYWJsZWQgKFBDRSA9IDApLCBhbmQgV29yZCBMZW5ndGggaXMgY29uZmlndXJlZCB0byA5IGJpdHMgKE0xLU0wID0gMDEpLAogICAqICAgICAgICAgdGhlIHNlbnQgZGF0YSBpcyBoYW5kbGVkIGFzIGEgc2V0IG9mIHUxNi4gSW4gdGhpcyBjYXNlLCBTaXplIG11c3QgaW5kaWNhdGUgdGhlIG51bWJlcgogICAqICAgICAgICAgb2YgdTE2IHByb3ZpZGVkIHRocm91Z2ggcFR4RGF0YS4KICAgKiBAcGFyYW0gIGh1c2FydCAgUG9pbnRlciB0byBhIFVTQVJUX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKQEAgLTEwOTksNyArMTExNyw3IEBACiAvKioKICAgKiBAYnJpZWYgIFNpbXBsZXggUmVjZWl2ZSBhbiBhbW91bnQgb2YgZGF0YSBpbiBub24tYmxvY2tpbmcgbW9kZS4KICAgKiBAbm90ZSAgIFRvIHJlY2VpdmUgc3luY2hyb25vdXMgZGF0YSwgZHVtbXkgZGF0YSBhcmUgc2ltdWx0YW5lb3VzbHkgdHJhbnNtaXR0ZWQuCi0gICogQG5vdGUgICBXaGVuIFVBUlQgcGFyaXR5IGlzIG5vdCBlbmFibGVkIChQQ0UgPSAwKSwgYW5kIFdvcmQgTGVuZ3RoIGlzIGNvbmZpZ3VyZWQgdG8gOSBiaXRzIChNMS1NMCA9IDAxKSwKKyAgKiBAbm90ZSAgIFdoZW4gVVNBUlQgcGFyaXR5IGlzIG5vdCBlbmFibGVkIChQQ0UgPSAwKSwgYW5kIFdvcmQgTGVuZ3RoIGlzIGNvbmZpZ3VyZWQgdG8gOSBiaXRzIChNMS1NMCA9IDAxKSwKICAgKiAgICAgICAgIHRoZSByZWNlaXZlZCBkYXRhIGlzIGhhbmRsZWQgYXMgYSBzZXQgb2YgdTE2LiBJbiB0aGlzIGNhc2UsIFNpemUgbXVzdCBpbmRpY2F0ZSB0aGUgbnVtYmVyCiAgICogICAgICAgICBvZiB1MTYgYXZhaWxhYmxlIHRocm91Z2ggcFJ4RGF0YS4KICAgKiBAcGFyYW0gIGh1c2FydCAgUG9pbnRlciB0byBhIFVTQVJUX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKQEAgLTExNDgsNyArMTE2Niw3IEBACiAKIC8qKgogICAqIEBicmllZiAgRnVsbC1EdXBsZXggU2VuZCBhbmQgUmVjZWl2ZSBhbiBhbW91bnQgb2YgZGF0YSBpbiBmdWxsLWR1cGxleCBtb2RlIChub24tYmxvY2tpbmcpLgotICAqIEBub3RlICAgV2hlbiBVQVJUIHBhcml0eSBpcyBub3QgZW5hYmxlZCAoUENFID0gMCksIGFuZCBXb3JkIExlbmd0aCBpcyBjb25maWd1cmVkIHRvIDkgYml0cyAoTTEtTTAgPSAwMSksCisgICogQG5vdGUgICBXaGVuIFVTQVJUIHBhcml0eSBpcyBub3QgZW5hYmxlZCAoUENFID0gMCksIGFuZCBXb3JkIExlbmd0aCBpcyBjb25maWd1cmVkIHRvIDkgYml0cyAoTTEtTTAgPSAwMSksCiAgICogICAgICAgICB0aGUgc2VudCBkYXRhIGFuZCB0aGUgcmVjZWl2ZWQgZGF0YSBhcmUgaGFuZGxlZCBhcyBzZXRzIG9mIHUxNi4gSW4gdGhpcyBjYXNlLCBTaXplIG11c3QgaW5kaWNhdGUgdGhlIG51bWJlcgogICAqICAgICAgICAgb2YgdTE2IGF2YWlsYWJsZSB0aHJvdWdoIHBUeERhdGEgYW5kIHRocm91Z2ggcFJ4RGF0YS4KICAgKiBAcGFyYW0gIGh1c2FydCAgUG9pbnRlciB0byBhIFVTQVJUX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKQEAgLTEyMDQsNyArMTIyMiw3IEBACiAKIC8qKgogICAqIEBicmllZiAgU2ltcGxleCBTZW5kIGFuIGFtb3VudCBvZiBkYXRhIGluIERNQSBtb2RlLgotICAqIEBub3RlICAgV2hlbiBVQVJUIHBhcml0eSBpcyBub3QgZW5hYmxlZCAoUENFID0gMCksIGFuZCBXb3JkIExlbmd0aCBpcyBjb25maWd1cmVkIHRvIDkgYml0cyAoTTEtTTAgPSAwMSksCisgICogQG5vdGUgICBXaGVuIFVTQVJUIHBhcml0eSBpcyBub3QgZW5hYmxlZCAoUENFID0gMCksIGFuZCBXb3JkIExlbmd0aCBpcyBjb25maWd1cmVkIHRvIDkgYml0cyAoTTEtTTAgPSAwMSksCiAgICogICAgICAgICB0aGUgc2VudCBkYXRhIGlzIGhhbmRsZWQgYXMgYSBzZXQgb2YgdTE2LiBJbiB0aGlzIGNhc2UsIFNpemUgbXVzdCBpbmRpY2F0ZSB0aGUgbnVtYmVyCiAgICogICAgICAgICBvZiB1MTYgcHJvdmlkZWQgdGhyb3VnaCBwVHhEYXRhLgogICAqIEBwYXJhbSAgaHVzYXJ0ICBQb2ludGVyIHRvIGEgVVNBUlRfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucwpAQCAtMTI2OSw3ICsxMjg3LDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBGdWxsLUR1cGxleCBSZWNlaXZlIGFuIGFtb3VudCBvZiBkYXRhIGluIERNQSBtb2RlLgotICAqIEBub3RlICAgV2hlbiBVQVJUIHBhcml0eSBpcyBub3QgZW5hYmxlZCAoUENFID0gMCksIGFuZCBXb3JkIExlbmd0aCBpcyBjb25maWd1cmVkIHRvIDkgYml0cyAoTTEtTTAgPSAwMSksCisgICogQG5vdGUgICBXaGVuIFVTQVJUIHBhcml0eSBpcyBub3QgZW5hYmxlZCAoUENFID0gMCksIGFuZCBXb3JkIExlbmd0aCBpcyBjb25maWd1cmVkIHRvIDkgYml0cyAoTTEtTTAgPSAwMSksCiAgICogICAgICAgICB0aGUgcmVjZWl2ZWQgZGF0YSBpcyBoYW5kbGVkIGFzIGEgc2V0IG9mIHUxNi4gSW4gdGhpcyBjYXNlLCBTaXplIG11c3QgaW5kaWNhdGUgdGhlIG51bWJlcgogICAqICAgICAgICAgb2YgdTE2IGF2YWlsYWJsZSB0aHJvdWdoIHBSeERhdGEuCiAgICogQHBhcmFtICBodXNhcnQgIFBvaW50ZXIgdG8gYSBVU0FSVF9IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCkBAIC0xMzY0LDcgKzEzODIsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIEZ1bGwtRHVwbGV4IFRyYW5zbWl0IFJlY2VpdmUgYW4gYW1vdW50IG9mIGRhdGEgaW4gRE1BIG1vZGUuCi0gICogQG5vdGUgICBXaGVuIFVBUlQgcGFyaXR5IGlzIG5vdCBlbmFibGVkIChQQ0UgPSAwKSwgYW5kIFdvcmQgTGVuZ3RoIGlzIGNvbmZpZ3VyZWQgdG8gOSBiaXRzIChNMS1NMCA9IDAxKSwKKyAgKiBAbm90ZSAgIFdoZW4gVVNBUlQgcGFyaXR5IGlzIG5vdCBlbmFibGVkIChQQ0UgPSAwKSwgYW5kIFdvcmQgTGVuZ3RoIGlzIGNvbmZpZ3VyZWQgdG8gOSBiaXRzIChNMS1NMCA9IDAxKSwKICAgKiAgICAgICAgIHRoZSBzZW50IGRhdGEgYW5kIHRoZSByZWNlaXZlZCBkYXRhIGFyZSBoYW5kbGVkIGFzIHNldHMgb2YgdTE2LiBJbiB0aGlzIGNhc2UsIFNpemUgbXVzdCBpbmRpY2F0ZSB0aGUgbnVtYmVyCiAgICogICAgICAgICBvZiB1MTYgYXZhaWxhYmxlIHRocm91Z2ggcFR4RGF0YSBhbmQgdGhyb3VnaCBwUnhEYXRhLgogICAqIEBwYXJhbSAgaHVzYXJ0ICBQb2ludGVyIHRvIGEgVVNBUlRfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucwpAQCAtMjE1OCw4ICsyMTc2LDYgQEAKICAgICBDTEVBUl9CSVQoaHVzYXJ0LT5JbnN0YW5jZS0+Q1IzLCBVU0FSVF9DUjNfRE1BUik7CiAgICAgQ0xFQVJfQklUKGh1c2FydC0+SW5zdGFuY2UtPkNSMywgVVNBUlRfQ1IzX0RNQVQpOwogCi0gICAgaHVzYXJ0LT5TdGF0ZSA9IEhBTF9VU0FSVF9TVEFURV9SRUFEWTsKLQogICAgIC8qIFRoZSBVU0FSVCBzdGF0ZSBpcyBIQUxfVVNBUlRfU1RBVEVfQlVTWV9SWCAqLwogICAgIGlmIChodXNhcnQtPlN0YXRlID09IEhBTF9VU0FSVF9TVEFURV9CVVNZX1JYKQogICAgIHsKQEAgLTIxODIsNiArMjE5OCw3IEBACiAgICAgICBIQUxfVVNBUlRfVHhSeENwbHRDYWxsYmFjayhodXNhcnQpOwogI2VuZGlmIC8qIFVTRV9IQUxfVVNBUlRfUkVHSVNURVJfQ0FMTEJBQ0tTICovCiAgICAgfQorICAgIGh1c2FydC0+U3RhdGUgPSBIQUxfVVNBUlRfU1RBVEVfUkVBRFk7CiAgIH0KICAgLyogRE1BIGNpcmN1bGFyIG1vZGUgKi8KICAgZWxzZQpAQCAtMjQ2MSwxOCArMjQ3OCwxMSBAQAogCiAgIGlmIChodXNhcnQtPlN0YXRlID09IEhBTF9VU0FSVF9TVEFURV9CVVNZX1RYKQogICB7Ci0gICAgaWYgKGh1c2FydC0+SW5pdC5Xb3JkTGVuZ3RoID09IFVTQVJUX1dPUkRMRU5HVEhfOUIpCisgICAgaWYgKChodXNhcnQtPkluaXQuV29yZExlbmd0aCA9PSBVU0FSVF9XT1JETEVOR1RIXzlCKSAmJiAoaHVzYXJ0LT5Jbml0LlBhcml0eSA9PSBVU0FSVF9QQVJJVFlfTk9ORSkpCiAgICAgewogICAgICAgdG1wID0gKHVpbnQxNl90ICopIGh1c2FydC0+cFR4QnVmZlB0cjsKICAgICAgIGh1c2FydC0+SW5zdGFuY2UtPkRSID0gKHVpbnQxNl90KSgqdG1wICYgKHVpbnQxNl90KTB4MDFGRik7Ci0gICAgICBpZiAoaHVzYXJ0LT5Jbml0LlBhcml0eSA9PSBVU0FSVF9QQVJJVFlfTk9ORSkKLSAgICAgIHsKLSAgICAgICAgaHVzYXJ0LT5wVHhCdWZmUHRyICs9IDJVOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBodXNhcnQtPnBUeEJ1ZmZQdHIgKz0gMVU7Ci0gICAgICB9CisgICAgICBodXNhcnQtPnBUeEJ1ZmZQdHIgKz0gMlU7CiAgICAgfQogICAgIGVsc2UKICAgICB7CkBAIC0yNTMwLDQ2ICsyNTQwLDM3IEBACiAgICovCiBzdGF0aWMgSEFMX1N0YXR1c1R5cGVEZWYgVVNBUlRfUmVjZWl2ZV9JVChVU0FSVF9IYW5kbGVUeXBlRGVmICpodXNhcnQpCiB7Ci0gIHVpbnQxNl90ICp0bXA7CisgIHVpbnQ4X3QgICpwZGF0YThiaXRzOworICB1aW50MTZfdCAqcGRhdGExNmJpdHM7CisKICAgaWYgKGh1c2FydC0+U3RhdGUgPT0gSEFMX1VTQVJUX1NUQVRFX0JVU1lfUlgpCiAgIHsKLSAgICBpZiAoaHVzYXJ0LT5Jbml0LldvcmRMZW5ndGggPT0gVVNBUlRfV09SRExFTkdUSF85QikKKyAgICBpZiAoKGh1c2FydC0+SW5pdC5Xb3JkTGVuZ3RoID09IFVTQVJUX1dPUkRMRU5HVEhfOUIpICYmIChodXNhcnQtPkluaXQuUGFyaXR5ID09IFVTQVJUX1BBUklUWV9OT05FKSkKICAgICB7Ci0gICAgICB0bXAgPSAodWludDE2X3QgKikgaHVzYXJ0LT5wUnhCdWZmUHRyOwotICAgICAgaWYgKGh1c2FydC0+SW5pdC5QYXJpdHkgPT0gVVNBUlRfUEFSSVRZX05PTkUpCi0gICAgICB7Ci0gICAgICAgICp0bXAgPSAodWludDE2X3QpKGh1c2FydC0+SW5zdGFuY2UtPkRSICYgKHVpbnQxNl90KTB4MDFGRik7Ci0gICAgICAgIGh1c2FydC0+cFJ4QnVmZlB0ciArPSAyVTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgKnRtcCA9ICh1aW50MTZfdCkoaHVzYXJ0LT5JbnN0YW5jZS0+RFIgJiAodWludDE2X3QpMHgwMEZGKTsKLSAgICAgICAgaHVzYXJ0LT5wUnhCdWZmUHRyICs9IDFVOwotICAgICAgfQotICAgICAgaWYgKC0taHVzYXJ0LT5SeFhmZXJDb3VudCAhPSAweDAwVSkKLSAgICAgIHsKLSAgICAgICAgLyogU2VuZCBkdW1teSBieXRlIGluIG9yZGVyIHRvIGdlbmVyYXRlIHRoZSBjbG9jayBmb3IgdGhlIHNsYXZlIHRvIHNlbmQgdGhlIG5leHQgZGF0YSAqLwotICAgICAgICBodXNhcnQtPkluc3RhbmNlLT5EUiA9IChEVU1NWV9EQVRBICYgKHVpbnQxNl90KTB4MDFGRik7Ci0gICAgICB9CisgICAgICBwZGF0YThiaXRzICA9IE5VTEw7CisgICAgICBwZGF0YTE2Yml0cyA9ICh1aW50MTZfdCAqKSBodXNhcnQtPnBSeEJ1ZmZQdHI7CisgICAgICAqcGRhdGExNmJpdHMgPSAodWludDE2X3QpKGh1c2FydC0+SW5zdGFuY2UtPkRSICYgKHVpbnQxNl90KTB4MDFGRik7CisgICAgICBodXNhcnQtPnBSeEJ1ZmZQdHIgKz0gMlU7CiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICBpZiAoaHVzYXJ0LT5Jbml0LlBhcml0eSA9PSBVU0FSVF9QQVJJVFlfTk9ORSkKKyAgICAgIHBkYXRhOGJpdHMgPSAodWludDhfdCAqKSBodXNhcnQtPnBSeEJ1ZmZQdHI7CisgICAgICBwZGF0YTE2Yml0cyAgPSBOVUxMOworCisgICAgICBpZiAoKGh1c2FydC0+SW5pdC5Xb3JkTGVuZ3RoID09IFVBUlRfV09SRExFTkdUSF85QikgfHwgKChodXNhcnQtPkluaXQuV29yZExlbmd0aCA9PSBVQVJUX1dPUkRMRU5HVEhfOEIpICYmIChodXNhcnQtPkluaXQuUGFyaXR5ID09IFVBUlRfUEFSSVRZX05PTkUpKSkKICAgICAgIHsKLSAgICAgICAgKmh1c2FydC0+cFJ4QnVmZlB0cisrID0gKHVpbnQ4X3QpKGh1c2FydC0+SW5zdGFuY2UtPkRSICYgKHVpbnQ4X3QpMHgwMEZGKTsKKyAgICAgICAgKnBkYXRhOGJpdHMgPSAodWludDhfdCkoaHVzYXJ0LT5JbnN0YW5jZS0+RFIgJiAodWludDhfdCkweDAwRkYpOwogICAgICAgfQogICAgICAgZWxzZQogICAgICAgewotICAgICAgICAqaHVzYXJ0LT5wUnhCdWZmUHRyKysgPSAodWludDhfdCkoaHVzYXJ0LT5JbnN0YW5jZS0+RFIgJiAodWludDhfdCkweDAwN0YpOworICAgICAgICAqcGRhdGE4Yml0cyA9ICh1aW50OF90KShodXNhcnQtPkluc3RhbmNlLT5EUiAmICh1aW50OF90KTB4MDA3Rik7CiAgICAgICB9CiAKLSAgICAgIGlmICgtLWh1c2FydC0+UnhYZmVyQ291bnQgIT0gMHgwMFUpCi0gICAgICB7Ci0gICAgICAgIC8qIFNlbmQgZHVtbXkgYnl0ZSBpbiBvcmRlciB0byBnZW5lcmF0ZSB0aGUgY2xvY2sgZm9yIHRoZSBzbGF2ZSB0byBzZW5kIHRoZSBuZXh0IGRhdGEgKi8KLSAgICAgICAgaHVzYXJ0LT5JbnN0YW5jZS0+RFIgPSAoRFVNTVlfREFUQSAmICh1aW50MTZfdCkweDAwRkYpOwotICAgICAgfQorICAgICAgaHVzYXJ0LT5wUnhCdWZmUHRyICs9IDFVOwogICAgIH0KIAorICAgIGh1c2FydC0+UnhYZmVyQ291bnQtLTsKKwogICAgIGlmIChodXNhcnQtPlJ4WGZlckNvdW50ID09IDBVKQogICAgIHsKICAgICAgIC8qIERpc2FibGUgdGhlIFVTQVJUIFJYTkUgSW50ZXJydXB0ICovCkBAIC0yNTkyLDYgKzI1OTMsMTMgQEAKIAogICAgICAgcmV0dXJuIEhBTF9PSzsKICAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIC8qIFNlbmQgZHVtbXkgYnl0ZSBpbiBvcmRlciB0byBnZW5lcmF0ZSB0aGUgY2xvY2sgZm9yIHRoZSBzbGF2ZSB0byBzZW5kIHRoZSBuZXh0IGRhdGEuCisgICAgICAqIFdoYXRldmVyIHRoZSBmcmFtZSBsZW5ndGggKDcsIDggb3IgOS1iaXQgbG9uZyksIHRoZSBzYW1lIGR1bW15IHZhbHVlCisgICAgICAqIGNhbiBiZSB3cml0dGVuIGZvciBhbGwgdGhlIGNhc2VzLiAqLworICAgICAgaHVzYXJ0LT5JbnN0YW5jZS0+RFIgPSAoRFVNTVlfREFUQSAmICh1aW50MTZfdCkweDBGRik7CisgICAgfQogICAgIHJldHVybiBIQUxfT0s7CiAgIH0KICAgZWxzZQpAQCAtMjYwOCw3ICsyNjE2LDggQEAKICAgKi8KIHN0YXRpYyBIQUxfU3RhdHVzVHlwZURlZiBVU0FSVF9UcmFuc21pdFJlY2VpdmVfSVQoVVNBUlRfSGFuZGxlVHlwZURlZiAqaHVzYXJ0KQogewotICB1aW50MTZfdCAqdG1wOworICB1aW50OF90ICAqcGRhdGE4Yml0czsKKyAgdWludDE2X3QgKnBkYXRhMTZiaXRzOwogCiAgIGlmIChodXNhcnQtPlN0YXRlID09IEhBTF9VU0FSVF9TVEFURV9CVVNZX1RYX1JYKQogICB7CkBAIC0yNjE2LDIzICsyNjI1LDE4IEBACiAgICAgewogICAgICAgaWYgKF9fSEFMX1VTQVJUX0dFVF9GTEFHKGh1c2FydCwgVVNBUlRfRkxBR19UWEUpICE9IFJFU0VUKQogICAgICAgewotICAgICAgICBpZiAoaHVzYXJ0LT5Jbml0LldvcmRMZW5ndGggPT0gVVNBUlRfV09SRExFTkdUSF85QikKKyAgICAgICAgaWYgKChodXNhcnQtPkluaXQuV29yZExlbmd0aCA9PSBVU0FSVF9XT1JETEVOR1RIXzlCKSAmJiAoaHVzYXJ0LT5Jbml0LlBhcml0eSA9PSBVU0FSVF9QQVJJVFlfTk9ORSkpCiAgICAgICAgIHsKLSAgICAgICAgICB0bXAgPSAodWludDE2X3QgKikgaHVzYXJ0LT5wVHhCdWZmUHRyOwotICAgICAgICAgIGh1c2FydC0+SW5zdGFuY2UtPkRSID0gKHVpbnQxNl90KSgqdG1wICYgKHVpbnQxNl90KTB4MDFGRik7Ci0gICAgICAgICAgaWYgKGh1c2FydC0+SW5pdC5QYXJpdHkgPT0gVVNBUlRfUEFSSVRZX05PTkUpCi0gICAgICAgICAgewotICAgICAgICAgICAgaHVzYXJ0LT5wVHhCdWZmUHRyICs9IDJVOwotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgewotICAgICAgICAgICAgaHVzYXJ0LT5wVHhCdWZmUHRyICs9IDFVOwotICAgICAgICAgIH0KKyAgICAgICAgICBwZGF0YThiaXRzICA9IE5VTEw7CisgICAgICAgICAgcGRhdGExNmJpdHMgPSAodWludDE2X3QgKikgaHVzYXJ0LT5wVHhCdWZmUHRyOworICAgICAgICAgIGh1c2FydC0+SW5zdGFuY2UtPkRSID0gKHVpbnQxNl90KSgqcGRhdGExNmJpdHMgJiAodWludDE2X3QpMHgwMUZGKTsKKyAgICAgICAgICBodXNhcnQtPnBUeEJ1ZmZQdHIgKz0gMlU7CiAgICAgICAgIH0KICAgICAgICAgZWxzZQogICAgICAgICB7CiAgICAgICAgICAgaHVzYXJ0LT5JbnN0YW5jZS0+RFIgPSAodWludDhfdCkoKmh1c2FydC0+cFR4QnVmZlB0cisrICYgKHVpbnQ4X3QpMHgwMEZGKTsKICAgICAgICAgfQorCiAgICAgICAgIGh1c2FydC0+VHhYZmVyQ291bnQtLTsKIAogICAgICAgICAvKiBDaGVjayB0aGUgbGF0ZXN0IGRhdGEgdHJhbnNtaXR0ZWQgKi8KQEAgLTI2NDcsMzEgKzI2NTEsMjggQEAKICAgICB7CiAgICAgICBpZiAoX19IQUxfVVNBUlRfR0VUX0ZMQUcoaHVzYXJ0LCBVU0FSVF9GTEFHX1JYTkUpICE9IFJFU0VUKQogICAgICAgewotICAgICAgICBpZiAoaHVzYXJ0LT5Jbml0LldvcmRMZW5ndGggPT0gVVNBUlRfV09SRExFTkdUSF85QikKKyAgICAgICAgaWYgKChodXNhcnQtPkluaXQuV29yZExlbmd0aCA9PSBVU0FSVF9XT1JETEVOR1RIXzlCKSAmJiAoaHVzYXJ0LT5Jbml0LlBhcml0eSA9PSBVU0FSVF9QQVJJVFlfTk9ORSkpCiAgICAgICAgIHsKLSAgICAgICAgICB0bXAgPSAodWludDE2X3QgKikgaHVzYXJ0LT5wUnhCdWZmUHRyOwotICAgICAgICAgIGlmIChodXNhcnQtPkluaXQuUGFyaXR5ID09IFVTQVJUX1BBUklUWV9OT05FKQotICAgICAgICAgIHsKLSAgICAgICAgICAgICp0bXAgPSAodWludDE2X3QpKGh1c2FydC0+SW5zdGFuY2UtPkRSICYgKHVpbnQxNl90KTB4MDFGRik7Ci0gICAgICAgICAgICBodXNhcnQtPnBSeEJ1ZmZQdHIgKz0gMlU7Ci0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAqdG1wID0gKHVpbnQxNl90KShodXNhcnQtPkluc3RhbmNlLT5EUiAmICh1aW50MTZfdCkweDAwRkYpOwotICAgICAgICAgICAgaHVzYXJ0LT5wUnhCdWZmUHRyICs9IDFVOwotICAgICAgICAgIH0KKyAgICAgICAgICAgcGRhdGE4Yml0cyAgPSBOVUxMOworICAgICAgICAgICBwZGF0YTE2Yml0cyA9ICh1aW50MTZfdCAqKSBodXNhcnQtPnBSeEJ1ZmZQdHI7CisgICAgICAgICAgICpwZGF0YTE2Yml0cyA9ICh1aW50MTZfdCkoaHVzYXJ0LT5JbnN0YW5jZS0+RFIgJiAodWludDE2X3QpMHgwMUZGKTsKKyAgICAgICAgICAgaHVzYXJ0LT5wUnhCdWZmUHRyICs9IDJVOwogICAgICAgICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgewotICAgICAgICAgIGlmIChodXNhcnQtPkluaXQuUGFyaXR5ID09IFVTQVJUX1BBUklUWV9OT05FKQorICAgICAgICAgIHBkYXRhOGJpdHMgPSAodWludDhfdCAqKSBodXNhcnQtPnBSeEJ1ZmZQdHI7CisgICAgICAgICAgcGRhdGExNmJpdHMgID0gTlVMTDsKKyAgICAgICAgICBpZiAoKGh1c2FydC0+SW5pdC5Xb3JkTGVuZ3RoID09IFVBUlRfV09SRExFTkdUSF85QikgfHwgKChodXNhcnQtPkluaXQuV29yZExlbmd0aCA9PSBVQVJUX1dPUkRMRU5HVEhfOEIpICYmIChodXNhcnQtPkluaXQuUGFyaXR5ID09IFVBUlRfUEFSSVRZX05PTkUpKSkKICAgICAgICAgICB7Ci0gICAgICAgICAgICAqaHVzYXJ0LT5wUnhCdWZmUHRyKysgPSAodWludDhfdCkoaHVzYXJ0LT5JbnN0YW5jZS0+RFIgJiAodWludDhfdCkweDAwRkYpOworICAgICAgICAgICAgKnBkYXRhOGJpdHMgPSAodWludDhfdCkoaHVzYXJ0LT5JbnN0YW5jZS0+RFIgJiAodWludDhfdCkweDAwRkYpOwogICAgICAgICAgIH0KICAgICAgICAgICBlbHNlCiAgICAgICAgICAgewotICAgICAgICAgICAgKmh1c2FydC0+cFJ4QnVmZlB0cisrID0gKHVpbnQ4X3QpKGh1c2FydC0+SW5zdGFuY2UtPkRSICYgKHVpbnQ4X3QpMHgwMDdGKTsKKyAgICAgICAgICAgICpwZGF0YThiaXRzID0gKHVpbnQ4X3QpKGh1c2FydC0+SW5zdGFuY2UtPkRSICYgKHVpbnQ4X3QpMHgwMDdGKTsKICAgICAgICAgICB9CisgICAgICAgICAgaHVzYXJ0LT5wUnhCdWZmUHRyICs9IDFVOwogICAgICAgICB9CisKICAgICAgICAgaHVzYXJ0LT5SeFhmZXJDb3VudC0tOwogICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmY0eHhfaGFsX3d3ZGcuYyBiL1NyYy9zdG0zMmY0eHhfaGFsX3d3ZGcuYwppbmRleCA2MGQ0MWI5Li5kMWUyZmEwIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmNHh4X2hhbF93d2RnLmMKKysrIGIvU3JjL3N0bTMyZjR4eF9oYWxfd3dkZy5jCkBAIC0yMSw2ICsyMSwxMyBAQAogICAgICAgICBiZWZvcmUgdGhlIGNvdW50ZXIgaGFzIHJlYWNoZWQgdGhlIHJlZnJlc2ggd2luZG93IHZhbHVlLiBUaGlzCiAgICAgICAgIGltcGxpZXMgdGhhdCB0aGUgY291bnRlciBtdXN0IGJlIHJlZnJlc2hlZCBpbiBhIGxpbWl0ZWQgd2luZG93LgogICAgICgrKSBPbmNlIGVuYWJsZWQgdGhlIFdXREcgY2Fubm90IGJlIGRpc2FibGVkIGV4Y2VwdCBieSBhIHN5c3RlbSByZXNldC4KKyAgICAoKykgSWYgcmVxdWlyZWQgYnkgYXBwbGljYXRpb24sIGFuIEVhcmx5IFdha2V1cCBJbnRlcnJ1cHQgY2FuIGJlIHRyaWdnZXJlZAorICAgICAgICBpbiBvcmRlciB0byBiZSB3YXJuZWQgYmVmb3JlIFdXREcgZXhwaXJhdGlvbi4gVGhlIEVhcmx5IFdha2V1cCBJbnRlcnJ1cHQKKyAgICAgICAgKEVXSSkgY2FuIGJlIHVzZWQgaWYgc3BlY2lmaWMgc2FmZXR5IG9wZXJhdGlvbnMgb3IgZGF0YSBsb2dnaW5nIG11c3QKKyAgICAgICAgYmUgcGVyZm9ybWVkIGJlZm9yZSB0aGUgYWN0dWFsIHJlc2V0IGlzIGdlbmVyYXRlZC4gV2hlbiB0aGUgZG93bmNvdW50ZXIKKyAgICAgICAgcmVhY2hlcyAweDQwLCBpbnRlcnJ1cHQgb2NjdXJzLiBUaGlzIG1lY2hhbmlzbSByZXF1aXJlcyBXV0RHIGludGVycnVwdAorICAgICAgICBsaW5lIHRvIGJlIGVuYWJsZWQgaW4gTlZJQy4gT25jZSBlbmFibGVkLCBFV0kgaW50ZXJydXB0IGNhbm5vdCBiZQorICAgICAgICBkaXNhYmxlZCBleGNlcHQgYnkgYSBzeXN0ZW0gcmVzZXQuCiAgICAgKCspIFdXREdSU1QgZmxhZyBpbiBSQ0MgQ1NSIHJlZ2lzdGVyIGNhbiBiZSB1c2VkIHRvIGluZm9ybSB3aGVuIGEgV1dERwogICAgICAgICByZXNldCBvY2N1cnMuCiAgICAgKCspIFRoZSBXV0RHIGNvdW50ZXIgaW5wdXQgY2xvY2sgaXMgZGVyaXZlZCBmcm9tIHRoZSBBUEIgY2xvY2sgZGl2aWRlZApAQCAtMzIsMTIgKzM5LDEyIEBACiAgICAgICAgICgrKykgbWluIHRpbWUgKG1TKSA9IDEwMDAgKiAoQ291bnRlciAtIFdpbmRvdykgLyBXV0RHIGNsb2NrCiAgICAgICAgICgrKykgbWF4IHRpbWUgKG1TKSA9IDEwMDAgKiAoQ291bnRlciAtIDB4NDApIC8gV1dERyBjbG9jawogICAgICgrKSBUeXBpY2FsIHZhbHVlczoKLSAgICAgICAgKCsrKSBDb3VudGVyIG1pbiAoVFs1OzBdID0gMHgwMCkgQDQyTUh6IChQQ0xLMSkgd2l0aCB6ZXJvIHByZXNjYWxlcjoKKyAgICAgICAgKCsrKSBDb3VudGVyIG1pbiAoVFs1OzBdID0gMHgwMCkgYXQgNDJNSHogKFBDTEsxKSB3aXRoIHplcm8gcHJlc2NhbGVyOgogICAgICAgICAgICAgIG1heCB0aW1lb3V0IGJlZm9yZSByZXNldDogYXBwcm94aW1hdGVseSA5Ny41MrVzCi0gICAgICAgICgrKykgQ291bnRlciBtYXggKFRbNTswXSA9IDB4M0YpIEA0Mk1IeiAoUENMSzEpIHdpdGggcHJlc2NhbGVyIGRpdmlkaW5nIGJ5IDg6CisgICAgICAgICgrKykgQ291bnRlciBtYXggKFRbNTswXSA9IDB4M0YpIGF0IDQyTUh6IChQQ0xLMSkgd2l0aCBwcmVzY2FsZXIKKyAgICAgICAgICAgICBkaXZpZGluZyBieSA4OgogICAgICAgICAgICAgIG1heCB0aW1lb3V0IGJlZm9yZSByZXNldDogYXBwcm94aW1hdGVseSA0OS45M21zCiAKLSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgICAgICAgICAgICAgICAjIyMjIyBIb3cgdG8gdXNlIHRoaXMgZHJpdmVyICMjIyMjCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCkBAIC00NiwxNiArNTMsMTYgQEAKIAogICBbLi5dCiAgICAgKCspIEVuYWJsZSBXV0RHIEFQQjEgY2xvY2sgdXNpbmcgX19IQUxfUkNDX1dXREdfQ0xLX0VOQUJMRSgpLgotICAgICgrKSBTZXQgdGhlIFdXREcgcHJlc2NhbGVyLCByZWZyZXNoIHdpbmRvdyBhbmQgY291bnRlciB2YWx1ZQotICAgICAgICB1c2luZyBIQUxfV1dER19Jbml0KCkgZnVuY3Rpb24uCi0gICAgKCspIFN0YXJ0IHRoZSBXV0RHIHVzaW5nIEhBTF9XV0RHX1N0YXJ0KCkgZnVuY3Rpb24uCi0gICAgICAgIFdoZW4gdGhlIFdXREcgaXMgZW5hYmxlZCB0aGUgY291bnRlciB2YWx1ZSBzaG91bGQgYmUgY29uZmlndXJlZCB0bwotICAgICAgICBhIHZhbHVlIGdyZWF0ZXIgdGhhbiAweDQwIHRvIHByZXZlbnQgZ2VuZXJhdGluZyBhbiBpbW1lZGlhdGUgcmVzZXQuCi0gICAgKCspIE9wdGlvbmFsbHkgeW91IGNhbiBlbmFibGUgdGhlIEVhcmx5IFdha2V1cCBJbnRlcnJ1cHQgKEVXSSkgd2hpY2ggaXMKLSAgICAgICAgZ2VuZXJhdGVkIHdoZW4gdGhlIGNvdW50ZXIgcmVhY2hlcyAweDQwLCBhbmQgdGhlbiBzdGFydCB0aGUgV1dERyB1c2luZwotICAgICAgICBIQUxfV1dER19TdGFydF9JVCgpLiBBdCBFV0kgSEFMX1dXREdfV2FrZXVwQ2FsbGJhY2sgaXMgZXhlY3V0ZWQgYW5kIHVzZXIgY2FuCi0gICAgICAgIGFkZCBoaXMgb3duIGNvZGUgYnkgY3VzdG9taXphdGlvbiBvZiBjYWxsYmFjayBIQUxfV1dER19XYWtldXBDYWxsYmFjay4KLSAgICAgICAgT25jZSBlbmFibGVkLCBFV0kgaW50ZXJydXB0IGNhbm5vdCBiZSBkaXNhYmxlZCBleGNlcHQgYnkgYSBzeXN0ZW0gcmVzZXQuCisgICAgKCspIENvbmZpZ3VyZSB0aGUgV1dERyBwcmVzY2FsZXIsIHJlZnJlc2ggd2luZG93IHZhbHVlLCBjb3VudGVyIHZhbHVlIGFuZCBlYXJseQorICAgICAgICBpbnRlcnJ1cHQgc3RhdHVzIHVzaW5nIEhBTF9XV0RHX0luaXQoKSBmdW5jdGlvbi4gVGhpcyB3aWxsIGF1dG9tYXRpY2FsbHkKKyAgICAgICAgZW5hYmxlIFdXREcgYW5kIHN0YXJ0IGl0cyBkb3duY291bnRlci4gVGltZSByZWZlcmVuY2UgY2FuIGJlIHRha2VuIGZyb20gCisgICAgICAgIGZ1bmN0aW9uIGV4aXQuIENhcmUgbXVzdCBiZSB0YWtlbiB0byBwcm92aWRlIGEgY291bnRlciB2YWx1ZQorICAgICAgICBncmVhdGVyIHRoYW4gMHg0MCB0byBwcmV2ZW50IGdlbmVyYXRpb24gb2YgaW1tZWRpYXRlIHJlc2V0LgorICAgICgrKSBJZiB0aGUgRWFybHkgV2FrZXVwIEludGVycnVwdCAoRVdJKSBmZWF0dXJlIGlzIGVuYWJsZWQsIGFuIGludGVycnVwdCBpcworICAgICAgICBnZW5lcmF0ZWQgd2hlbiB0aGUgY291bnRlciByZWFjaGVzIDB4NDAuIFdoZW4gSEFMX1dXREdfSVJRSGFuZGxlciBpcworICAgICAgICB0cmlnZ2VyZWQgYnkgdGhlIGludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUsIGZsYWcgd2lsbCBiZSBhdXRvbWF0aWNhbGx5CisgICAgICAgIGNsZWFyZWQgYW5kIEhBTF9XV0RHX1dha2V1cENhbGxiYWNrIHVzZXIgY2FsbGJhY2sgd2lsbCBiZSBleGVjdXRlZC4gVXNlcgorICAgICAgICBjYW4gYWRkIGhpcyBvd24gY29kZSBieSBjdXN0b21pemF0aW9uIG9mIGNhbGxiYWNrIEhBTF9XV0RHX1dha2V1cENhbGxiYWNrLgogICAgICgrKSBUaGVuIHRoZSBhcHBsaWNhdGlvbiBwcm9ncmFtIG11c3QgcmVmcmVzaCB0aGUgV1dERyBjb3VudGVyIGF0IHJlZ3VsYXIKICAgICAgICAgaW50ZXJ2YWxzIGR1cmluZyBub3JtYWwgb3BlcmF0aW9uIHRvIHByZXZlbnQgYW4gTUNVIHJlc2V0LCB1c2luZwogICAgICAgICBIQUxfV1dER19SZWZyZXNoKCkgZnVuY3Rpb24uIFRoaXMgb3BlcmF0aW9uIG11c3Qgb2NjdXIgb25seSB3aGVuCkBAIC02NSwyOCArNzIsMjggQEAKICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCiAgIFsuLl0KLSAgICBUaGUgY29tcGlsYXRpb24gZGVmaW5lICBVU0VfSEFMX1dXREdfUkVHSVNURVJfQ0FMTEJBQ0tTIHdoZW4gc2V0IHRvIDEgYWxsb3dzCisgICAgVGhlIGNvbXBpbGF0aW9uIGRlZmluZSBVU0VfSEFMX1dXREdfUkVHSVNURVJfQ0FMTEJBQ0tTIHdoZW4gc2V0IHRvIDEgYWxsb3dzCiAgICAgdGhlIHVzZXIgdG8gY29uZmlndXJlIGR5bmFtaWNhbGx5IHRoZSBkcml2ZXIgY2FsbGJhY2tzLiBVc2UgRnVuY3Rpb25zCi0gICAgQHJlZiBIQUxfV1dER19SZWdpc3RlckNhbGxiYWNrKCkgdG8gcmVnaXN0ZXIgYSB1c2VyIGNhbGxiYWNrLgorICAgIEhBTF9XV0RHX1JlZ2lzdGVyQ2FsbGJhY2soKSB0byByZWdpc3RlciBhIHVzZXIgY2FsbGJhY2suCiAKLSAgICAoKykgRnVuY3Rpb24gQHJlZiBIQUxfV1dER19SZWdpc3RlckNhbGxiYWNrKCkgYWxsb3dzIHRvIHJlZ2lzdGVyIGZvbGxvd2luZworICAgICgrKSBGdW5jdGlvbiBIQUxfV1dER19SZWdpc3RlckNhbGxiYWNrKCkgYWxsb3dzIHRvIHJlZ2lzdGVyIGZvbGxvd2luZwogICAgICAgICBjYWxsYmFja3M6CiAgICAgICAgICgrKykgRXdpQ2FsbGJhY2sgOiBjYWxsYmFjayBmb3IgRWFybHkgV2FrZVVwIEludGVycnVwdC4KICAgICAgICAgKCsrKSBNc3BJbml0Q2FsbGJhY2sgOiBXV0RHIE1zcEluaXQuCiAgICAgVGhpcyBmdW5jdGlvbiB0YWtlcyBhcyBwYXJhbWV0ZXJzIHRoZSBIQUwgcGVyaXBoZXJhbCBoYW5kbGUsIHRoZSBDYWxsYmFjayBJRAogICAgIGFuZCBhIHBvaW50ZXIgdG8gdGhlIHVzZXIgY2FsbGJhY2sgZnVuY3Rpb24uCiAKLSAgICAoKykgVXNlIGZ1bmN0aW9uIEByZWYgSEFMX1dXREdfVW5SZWdpc3RlckNhbGxiYWNrKCkgdG8gcmVzZXQgYSBjYWxsYmFjayB0bwotICAgIHRoZSBkZWZhdWx0IHdlYWsgKHN1cmNoYXJnZWQpIGZ1bmN0aW9uLiBAcmVmIEhBTF9XV0RHX1VuUmVnaXN0ZXJDYWxsYmFjaygpCisgICAgKCspIFVzZSBmdW5jdGlvbiBIQUxfV1dER19VblJlZ2lzdGVyQ2FsbGJhY2soKSB0byByZXNldCBhIGNhbGxiYWNrIHRvCisgICAgdGhlIGRlZmF1bHQgd2VhayAoc3VyY2hhcmdlZCkgZnVuY3Rpb24uIEhBTF9XV0RHX1VuUmVnaXN0ZXJDYWxsYmFjaygpCiAgICAgdGFrZXMgYXMgcGFyYW1ldGVycyB0aGUgSEFMIHBlcmlwaGVyYWwgaGFuZGxlIGFuZCB0aGUgQ2FsbGJhY2sgSUQuCiAgICAgVGhpcyBmdW5jdGlvbiBhbGxvd3MgdG8gcmVzZXQgZm9sbG93aW5nIGNhbGxiYWNrczoKICAgICAgICAgKCsrKSBFd2lDYWxsYmFjayA6IGNhbGxiYWNrIGZvciAgRWFybHkgV2FrZVVwIEludGVycnVwdC4KICAgICAgICAgKCsrKSBNc3BJbml0Q2FsbGJhY2sgOiBXV0RHIE1zcEluaXQuCiAKICAgICBbLi5dCi0gICAgV2hlbiBjYWxsaW5nIEByZWYgSEFMX1dXREdfSW5pdCBmdW5jdGlvbiwgY2FsbGJhY2tzIGFyZSByZXNldCB0byB0aGUKKyAgICBXaGVuIGNhbGxpbmcgSEFMX1dXREdfSW5pdCBmdW5jdGlvbiwgY2FsbGJhY2tzIGFyZSByZXNldCB0byB0aGUKICAgICBjb3JyZXNwb25kaW5nIGxlZ2FjeSB3ZWFrIChzdXJjaGFyZ2VkKSBmdW5jdGlvbnM6Ci0gICAgQHJlZiBIQUxfV1dER19FYXJseVdha2V1cENhbGxiYWNrKCkgYW5kIEhBTF9XV0RHX01zcEluaXQoKSBvbmx5IGlmIHRoZXkgaGF2ZQorICAgIEhBTF9XV0RHX0Vhcmx5V2FrZXVwQ2FsbGJhY2soKSBhbmQgSEFMX1dXREdfTXNwSW5pdCgpIG9ubHkgaWYgdGhleSBoYXZlCiAgICAgbm90IGJlZW4gcmVnaXN0ZXJlZCBiZWZvcmUuCiAKICAgICBbLi5dCkBAIC05Nyw3ICsxMDQsNyBAQAogICAgICoqKiBXV0RHIEhBTCBkcml2ZXIgbWFjcm9zIGxpc3QgKioqCiAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICBbLi5dCi0gICAgICBCZWxvdyB0aGUgbGlzdCBvZiBtb3N0IHVzZWQgbWFjcm9zIGluIFdXREcgSEFMIGRyaXZlci4KKyAgICAgIEJlbG93IHRoZSBsaXN0IG9mIGF2YWlsYWJsZSBtYWNyb3MgaW4gV1dERyBIQUwgZHJpdmVyLgogICAgICAgKCspIF9fSEFMX1dXREdfRU5BQkxFOiBFbmFibGUgdGhlIFdXREcgcGVyaXBoZXJhbAogICAgICAgKCspIF9fSEFMX1dXREdfR0VUX0ZMQUc6IEdldCB0aGUgc2VsZWN0ZWQgV1dERydzIGZsYWcgc3RhdHVzCiAgICAgICAoKykgX19IQUxfV1dER19DTEVBUl9GTEFHOiBDbGVhciB0aGUgV1dERydzIHBlbmRpbmcgZmxhZ3MKQEAgLTE5OCw3ICsyMDUsNyBAQAogI2Vsc2UKICAgLyogSW5pdCB0aGUgbG93IGxldmVsIGhhcmR3YXJlICovCiAgIEhBTF9XV0RHX01zcEluaXQoaHd3ZGcpOwotI2VuZGlmCisjZW5kaWYgLyogVVNFX0hBTF9XV0RHX1JFR0lTVEVSX0NBTExCQUNLUyAqLwogCiAgIC8qIFNldCBXV0RHIENvdW50ZXIgKi8KICAgV1JJVEVfUkVHKGh3d2RnLT5JbnN0YW5jZS0+Q1IsIChXV0RHX0NSX1dER0EgfCBod3dkZy0+SW5pdC5Db3VudGVyKSk7CkBAIC0yNDMsNyArMjUwLDggQEAKICAgKiBAcGFyYW0gIHBDYWxsYmFjayBwb2ludGVyIHRvIHRoZSBDYWxsYmFjayBmdW5jdGlvbgogICAqIEByZXR2YWwgc3RhdHVzCiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfV1dER19SZWdpc3RlckNhbGxiYWNrKFdXREdfSGFuZGxlVHlwZURlZiAqaHd3ZGcsIEhBTF9XV0RHX0NhbGxiYWNrSURUeXBlRGVmIENhbGxiYWNrSUQsIHBXV0RHX0NhbGxiYWNrVHlwZURlZiBwQ2FsbGJhY2spCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfV1dER19SZWdpc3RlckNhbGxiYWNrKFdXREdfSGFuZGxlVHlwZURlZiAqaHd3ZGcsIEhBTF9XV0RHX0NhbGxiYWNrSURUeXBlRGVmIENhbGxiYWNrSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBXV0RHX0NhbGxiYWNrVHlwZURlZiBwQ2FsbGJhY2spCiB7CiAgIEhBTF9TdGF0dXNUeXBlRGVmIHN0YXR1cyA9IEhBTF9PSzsKIApAQCAtMzA0LDcgKzMxMiw3IEBACiAKICAgcmV0dXJuIHN0YXR1czsKIH0KLSNlbmRpZgorI2VuZGlmIC8qIFVTRV9IQUxfV1dER19SRUdJU1RFUl9DQUxMQkFDS1MgKi8KIAogLyoqCiAgICogQH0KQEAgLTM3Miw3ICszODAsNyBAQAogI2Vsc2UKICAgICAgIC8qIEVhcmx5IFdha2V1cCBjYWxsYmFjayAqLwogICAgICAgSEFMX1dXREdfRWFybHlXYWtldXBDYWxsYmFjayhod3dkZyk7Ci0jZW5kaWYKKyNlbmRpZiAvKiBVU0VfSEFMX1dXREdfUkVHSVNURVJfQ0FMTEJBQ0tTICovCiAgICAgfQogICB9CiB9CmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmNHh4X2xsX2FkYy5jIGIvU3JjL3N0bTMyZjR4eF9sbF9hZGMuYwppbmRleCA3OTkyNjk0Li5jNTNjMTQ3IDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmNHh4X2xsX2FkYy5jCisrKyBiL1NyYy9zdG0zMmY0eHhfbGxfYWRjLmMKQEAgLTMzNiwxMCArMzM2LDEwIEBACiAKICAgLyogTm90ZTogSGFyZHdhcmUgY29uc3RyYWludCAocmVmZXIgdG8gZGVzY3JpcHRpb24gb2YgZnVuY3Rpb25zICAgICAgICAgICAgICovCiAgIC8qICAgICAgICJMTF9BRENfU2V0Q29tbW9uWFhYKCkiIGFuZCAiTExfQURDX1NldE11bHRpWFhYKCkiKTogICAgICAgICAgICAgICAqLwotICAvKiAgICAgICBPbiB0aGlzIFNUTTMyIHNlcmllLCBzZXR0aW5nIG9mIHRoZXNlIGZlYXR1cmVzIGlzIGNvbmRpdGlvbmVkIHRvICAgKi8KKyAgLyogICAgICAgT24gdGhpcyBTVE0zMiBzZXJpZXMsIHNldHRpbmcgb2YgdGhlc2UgZmVhdHVyZXMgaXMgY29uZGl0aW9uZWQgdG8gICovCiAgIC8qICAgICAgIEFEQyBzdGF0ZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICBBbGwgQURDIGluc3RhbmNlcyBvZiB0aGUgQURDIGNvbW1vbiBncm91cCBtdXN0IGJlIGRpc2FibGVkLiAgICAgICAgKi8KLSAgaWYoX19MTF9BRENfSVNfRU5BQkxFRF9BTExfQ09NTU9OX0lOU1RBTkNFKEFEQ3h5X0NPTU1PTikgPT0gMFUpCisgIGlmKF9fTExfQURDX0lTX0VOQUJMRURfQUxMX0NPTU1PTl9JTlNUQU5DRShBREN4eV9DT01NT04pID09IDBVTCkKICAgewogICAgIC8qIENvbmZpZ3VyYXRpb24gb2YgQURDIGhpZXJhcmNoaWNhbCBzY29wZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAvKiAgLSBjb21tb24gdG8gc2V2ZXJhbCBBREMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC00MzIsNyArNDMyLDcgQEAKICAgYXNzZXJ0X3BhcmFtKElTX0FEQ19BTExfSU5TVEFOQ0UoQURDeCkpOwogICAKICAgLyogRGlzYWJsZSBBREMgaW5zdGFuY2UgaWYgbm90IGFscmVhZHkgZGlzYWJsZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIGlmKExMX0FEQ19Jc0VuYWJsZWQoQURDeCkgPT0gMVUpCisgIGlmKExMX0FEQ19Jc0VuYWJsZWQoQURDeCkgPT0gMVVMKQogICB7CiAgICAgLyogU2V0IEFEQyBncm91cCByZWd1bGFyIHRyaWdnZXIgc291cmNlIHRvIFNXIHN0YXJ0IHRvIGVuc3VyZSB0byBub3QgICAgICAqLwogICAgIC8qIGhhdmUgYW4gZXh0ZXJuYWwgdHJpZ2dlciBldmVudCBvY2N1cnJpbmcgZHVyaW5nIHRoZSBjb252ZXJzaW9uIHN0b3AgICAgKi8KQEAgLTQ1MCw3ICs0NTAsNyBAQAogICAKICAgLyogQ2hlY2sgd2hldGhlciBBREMgc3RhdGUgaXMgY29tcGxpYW50IHdpdGggZXhwZWN0ZWQgc3RhdGUgKi8KICAgLyogKGhhcmR3YXJlIHJlcXVpcmVtZW50cyBvZiBiaXRzIHN0YXRlIHRvIHJlc2V0IHJlZ2lzdGVycyBiZWxvdykgKi8KLSAgaWYoUkVBRF9CSVQoQURDeC0+Q1IyLCBBRENfQ1IyX0FET04pID09IDBVKQorICBpZihSRUFEX0JJVChBREN4LT5DUjIsIEFEQ19DUjJfQURPTikgPT0gMFVMKQogICB7CiAgICAgLyogPT09PT09PT09PSBSZXNldCBBREMgcmVnaXN0ZXJzID09PT09PT09PT0gKi8KICAgICAvKiBSZXNldCByZWdpc3RlciBTUiAqLwpAQCAtNTkxLDcgKzU5MSw3IEBACiAgIAogICAvKiBOb3RlOiBIYXJkd2FyZSBjb25zdHJhaW50IChyZWZlciB0byBkZXNjcmlwdGlvbiBvZiB0aGlzIGZ1bmN0aW9uKTogICAgICAgKi8KICAgLyogICAgICAgQURDIGluc3RhbmNlIG11c3QgYmUgZGlzYWJsZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIGlmKExMX0FEQ19Jc0VuYWJsZWQoQURDeCkgPT0gMFUpCisgIGlmKExMX0FEQ19Jc0VuYWJsZWQoQURDeCkgPT0gMFVMKQogICB7CiAgICAgLyogQ29uZmlndXJhdGlvbiBvZiBBREMgaGllcmFyY2hpY2FsIHNjb3BlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgIC8qICAtIEFEQyBpbnN0YW5jZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTY4OCw5ICs2ODgsMTQgQEAKICAgYXNzZXJ0X3BhcmFtKElTX0xMX0FEQ19SRUdfQ09OVElOVU9VU19NT0RFKEFEQ19SRUdfSW5pdFN0cnVjdC0+Q29udGludW91c01vZGUpKTsKICAgYXNzZXJ0X3BhcmFtKElTX0xMX0FEQ19SRUdfRE1BX1RSQU5TRkVSKEFEQ19SRUdfSW5pdFN0cnVjdC0+RE1BVHJhbnNmZXIpKTsKICAgCisgIC8qIEFEQyBncm91cCByZWd1bGFyIGNvbnRpbnVvdXMgbW9kZSBhbmQgZGlzY29udGludW91cyBtb2RlICAgICAgICAgICAgICAgICAqLworICAvKiBjYW4gbm90IGJlIGVuYWJsZWQgc2ltdWx0ZW5hZW91c2x5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgYXNzZXJ0X3BhcmFtKChBRENfUkVHX0luaXRTdHJ1Y3QtPkNvbnRpbnVvdXNNb2RlID09IExMX0FEQ19SRUdfQ09OVl9TSU5HTEUpCisgICAgICAgICAgICAgICB8fCAoQURDX1JFR19Jbml0U3RydWN0LT5TZXF1ZW5jZXJEaXNjb250ID09IExMX0FEQ19SRUdfU0VRX0RJU0NPTlRfRElTQUJMRSkpOworICAKICAgLyogTm90ZTogSGFyZHdhcmUgY29uc3RyYWludCAocmVmZXIgdG8gZGVzY3JpcHRpb24gb2YgdGhpcyBmdW5jdGlvbik6ICAgICAgICovCiAgIC8qICAgICAgIEFEQyBpbnN0YW5jZSBtdXN0IGJlIGRpc2FibGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICBpZihMTF9BRENfSXNFbmFibGVkKEFEQ3gpID09IDBVKQorICBpZihMTF9BRENfSXNFbmFibGVkKEFEQ3gpID09IDBVTCkKICAgewogICAgIC8qIENvbmZpZ3VyYXRpb24gb2YgQURDIGhpZXJhcmNoaWNhbCBzY29wZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAvKiAgLSBBREMgZ3JvdXAgcmVndWxhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC03MDAsNyArNzA1LDcgQEAKICAgICAvKiAgICAtIFNldCBBREMgZ3JvdXAgcmVndWxhciBjb250aW51b3VzIG1vZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgICAgLyogICAgLSBTZXQgQURDIGdyb3VwIHJlZ3VsYXIgY29udmVyc2lvbiBkYXRhIHRyYW5zZmVyOiBubyB0cmFuc2ZlciBvciAgICAqLwogICAgIC8qICAgICAgdHJhbnNmZXIgYnkgRE1BLCBhbmQgRE1BIHJlcXVlc3RzIG1vZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAvKiBOb3RlOiBPbiB0aGlzIFNUTTMyIHNlcmllLCBBREMgdHJpZ2dlciBlZGdlIGlzIHNldCB3aGVuIHN0YXJ0aW5nICAgICAgICovCisgICAgLyogTm90ZTogT24gdGhpcyBTVE0zMiBzZXJpZXMsIEFEQyB0cmlnZ2VyIGVkZ2UgaXMgc2V0IHdoZW4gc3RhcnRpbmcgICAgICAqLwogICAgIC8qICAgICAgIEFEQyBjb252ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAvKiAgICAgICBSZWZlciB0byBmdW5jdGlvbiBAcmVmIExMX0FEQ19SRUdfU3RhcnRDb252ZXJzaW9uRXh0VHJpZygpLiAgICAgICovCiAgICAgaWYoQURDX1JFR19Jbml0U3RydWN0LT5TZXF1ZW5jZXJMZW5ndGggIT0gTExfQURDX1JFR19TRVFfU0NBTl9ESVNBQkxFKQpAQCAtNzYxLDcgKzc2Niw3IEBACiB7CiAgIC8qIFNldCBBRENfUkVHX0luaXRTdHJ1Y3QgZmllbGRzIHRvIGRlZmF1bHQgdmFsdWVzICovCiAgIC8qIFNldCBmaWVsZHMgb2YgQURDIGdyb3VwIHJlZ3VsYXIgKi8KLSAgLyogTm90ZTogT24gdGhpcyBTVE0zMiBzZXJpZSwgQURDIHRyaWdnZXIgZWRnZSBpcyBzZXQgd2hlbiBzdGFydGluZyAgICAgICAgICovCisgIC8qIE5vdGU6IE9uIHRoaXMgU1RNMzIgc2VyaWVzLCBBREMgdHJpZ2dlciBlZGdlIGlzIHNldCB3aGVuIHN0YXJ0aW5nICAgICAgICAqLwogICAvKiAgICAgICBBREMgY29udmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgUmVmZXIgdG8gZnVuY3Rpb24gQHJlZiBMTF9BRENfUkVHX1N0YXJ0Q29udmVyc2lvbkV4dFRyaWcoKS4gICAgICAgICovCiAgIEFEQ19SRUdfSW5pdFN0cnVjdC0+VHJpZ2dlclNvdXJjZSAgICA9IExMX0FEQ19SRUdfVFJJR19TT0ZUV0FSRTsKQEAgLTgxOSw3ICs4MjQsNyBAQAogICAKICAgLyogTm90ZTogSGFyZHdhcmUgY29uc3RyYWludCAocmVmZXIgdG8gZGVzY3JpcHRpb24gb2YgdGhpcyBmdW5jdGlvbik6ICAgICAgICovCiAgIC8qICAgICAgIEFEQyBpbnN0YW5jZSBtdXN0IGJlIGRpc2FibGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICBpZihMTF9BRENfSXNFbmFibGVkKEFEQ3gpID09IDBVKQorICBpZihMTF9BRENfSXNFbmFibGVkKEFEQ3gpID09IDBVTCkKICAgewogICAgIC8qIENvbmZpZ3VyYXRpb24gb2YgQURDIGhpZXJhcmNoaWNhbCBzY29wZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAvKiAgLSBBREMgZ3JvdXAgaW5qZWN0ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC04MjgsNyArODMzLDcgQEAKICAgICAvKiAgICAtIFNldCBBREMgZ3JvdXAgaW5qZWN0ZWQgc2VxdWVuY2VyIGRpc2NvbnRpbnVvdXMgbW9kZSAgICAgICAgICAgICAgICovCiAgICAgLyogICAgLSBTZXQgQURDIGdyb3VwIGluamVjdGVkIGNvbnZlcnNpb24gdHJpZ2dlcjogaW5kZXBlbmRlbnQgb3IgICAgICAgICAqLwogICAgIC8qICAgICAgZnJvbSBBREMgZ3JvdXAgcmVndWxhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAvKiBOb3RlOiBPbiB0aGlzIFNUTTMyIHNlcmllLCBBREMgdHJpZ2dlciBlZGdlIGlzIHNldCB3aGVuIHN0YXJ0aW5nICAgICAgICovCisgICAgLyogTm90ZTogT24gdGhpcyBTVE0zMiBzZXJpZXMsIEFEQyB0cmlnZ2VyIGVkZ2UgaXMgc2V0IHdoZW4gc3RhcnRpbmcgICAgICAqLwogICAgIC8qICAgICAgIEFEQyBjb252ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAvKiAgICAgICBSZWZlciB0byBmdW5jdGlvbiBAcmVmIExMX0FEQ19JTkpfU3RhcnRDb252ZXJzaW9uRXh0VHJpZygpLiAgICAgICovCiAgICAgaWYoQURDX0lOSl9Jbml0U3RydWN0LT5TZXF1ZW5jZXJMZW5ndGggIT0gTExfQURDX1JFR19TRVFfU0NBTl9ESVNBQkxFKQpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjR4eF9sbF9kYWMuYyBiL1NyYy9zdG0zMmY0eHhfbGxfZGFjLmMKaW5kZXggYWQzN2YyNy4uMTMxNjUwNCAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZjR4eF9sbF9kYWMuYworKysgYi9TcmMvc3RtMzJmNHh4X2xsX2RhYy5jCkBAIC02LDcgKzYsNyBAQAogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKiBAYXR0ZW50aW9uCiAgICoKLSAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE3IFNUTWljcm9lbGVjdHJvbmljcy4KKyAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE2IFNUTWljcm9lbGVjdHJvbmljcy4KICAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLjwvY2VudGVyPjwvaDI+CiAgICoKICAgKiBUaGlzIHNvZnR3YXJlIGNvbXBvbmVudCBpcyBsaWNlbnNlZCBieSBTVCB1bmRlciBCU0QgMy1DbGF1c2UgbGljZW5zZSwKQEAgLTIzLDEwICsyMywxMCBAQAogI2luY2x1ZGUgInN0bTMyZjR4eF9sbF9idXMuaCIKIAogI2lmZGVmIFVTRV9GVUxMX0FTU0VSVAotICAjaW5jbHVkZSAic3RtMzJfYXNzZXJ0LmgiCisjaW5jbHVkZSAic3RtMzJfYXNzZXJ0LmgiCiAjZWxzZQotICAjZGVmaW5lIGFzc2VydF9wYXJhbShleHByKSAoKHZvaWQpMFUpCi0jZW5kaWYKKyNkZWZpbmUgYXNzZXJ0X3BhcmFtKGV4cHIpICgodm9pZCkwVSkKKyNlbmRpZiAvKiBVU0VfRlVMTF9BU1NFUlQgKi8KIAogLyoqIEBhZGR0b2dyb3VwIFNUTTMyRjR4eF9MTF9Ecml2ZXIKICAgKiBAewpAQCAtNDYsNyArNDYsNiBAQAogLyoqIEBhZGR0b2dyb3VwIERBQ19MTF9Qcml2YXRlX01hY3JvcwogICAqIEB7CiAgICovCi0KICNpZiBkZWZpbmVkKERBQ19DSEFOTkVMMl9TVVBQT1JUKQogI2RlZmluZSBJU19MTF9EQUNfQ0hBTk5FTChfX0RBQ1hfXywgX19EQUNfQ0hBTk5FTF9fKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC03MSw0MiArNzAsNDYgQEAKICAgIHx8ICgoX19UUklHR0VSX1NPVVJDRV9fKSA9PSBMTF9EQUNfVFJJR19FWFRfRVhUSV9MSU5FOSkgICAgICAgICAgICAgICAgICAgICBcCiAgICkKIAotI2RlZmluZSBJU19MTF9EQUNfV0FWRV9BVVRPX0dFTkVSX01PREUoX19XQVZFX0FVVE9fR0VORVJBVElPTl9NT0RFX18pICAgICAgICAgICBcCi0gICggICAoKF9fV0FWRV9BVVRPX0dFTkVSQVRJT05fTU9ERV9fKSA9PSBMTF9EQUNfV0FWRV9BVVRPX0dFTkVSQVRJT05fTk9ORSkgICAgIFwKLSAgIHx8ICgoX19XQVZFX0FVVE9fR0VORVJBVElPTl9NT0RFX18pID09IExMX0RBQ19XQVZFX0FVVE9fR0VORVJBVElPTl9OT0lTRSkgICAgXAotICAgfHwgKChfX1dBVkVfQVVUT19HRU5FUkFUSU9OX01PREVfXykgPT0gTExfREFDX1dBVkVfQVVUT19HRU5FUkFUSU9OX1RSSUFOR0xFKSBcCisjZGVmaW5lIElTX0xMX0RBQ19XQVZFX0FVVE9fR0VORVJfTU9ERShfX1dBVkVfQVVUT19HRU5FUkFUSU9OX01PREVfXykgICAgICAgICAgICAgIFwKKyAgKCAgICgoX19XQVZFX0FVVE9fR0VORVJBVElPTl9NT0RFX18pID09IExMX0RBQ19XQVZFX0FVVE9fR0VORVJBVElPTl9OT05FKSAgICAgICAgXAorICAgICAgfHwgKChfX1dBVkVfQVVUT19HRU5FUkFUSU9OX01PREVfXykgPT0gTExfREFDX1dBVkVfQVVUT19HRU5FUkFUSU9OX05PSVNFKSAgICBcCisgICAgICB8fCAoKF9fV0FWRV9BVVRPX0dFTkVSQVRJT05fTU9ERV9fKSA9PSBMTF9EQUNfV0FWRV9BVVRPX0dFTkVSQVRJT05fVFJJQU5HTEUpIFwKICAgKQogCi0jZGVmaW5lIElTX0xMX0RBQ19XQVZFX0FVVE9fR0VORVJfQ09ORklHKF9fV0FWRV9BVVRPX0dFTkVSQVRJT05fQ09ORklHX18pICAgICAgXAotICAoICAgKChfX1dBVkVfQVVUT19HRU5FUkFUSU9OX0NPTkZJR19fKSA9PSBMTF9EQUNfTk9JU0VfTEZTUl9VTk1BU0tfQklUMCkgICAgIFwKLSAgIHx8ICgoX19XQVZFX0FVVE9fR0VORVJBVElPTl9DT05GSUdfXykgPT0gTExfREFDX05PSVNFX0xGU1JfVU5NQVNLX0JJVFMxXzApICBcCi0gICB8fCAoKF9fV0FWRV9BVVRPX0dFTkVSQVRJT05fQ09ORklHX18pID09IExMX0RBQ19OT0lTRV9MRlNSX1VOTUFTS19CSVRTMl8wKSAgXAotICAgfHwgKChfX1dBVkVfQVVUT19HRU5FUkFUSU9OX0NPTkZJR19fKSA9PSBMTF9EQUNfTk9JU0VfTEZTUl9VTk1BU0tfQklUUzNfMCkgIFwKLSAgIHx8ICgoX19XQVZFX0FVVE9fR0VORVJBVElPTl9DT05GSUdfXykgPT0gTExfREFDX05PSVNFX0xGU1JfVU5NQVNLX0JJVFM0XzApICBcCi0gICB8fCAoKF9fV0FWRV9BVVRPX0dFTkVSQVRJT05fQ09ORklHX18pID09IExMX0RBQ19OT0lTRV9MRlNSX1VOTUFTS19CSVRTNV8wKSAgXAotICAgfHwgKChfX1dBVkVfQVVUT19HRU5FUkFUSU9OX0NPTkZJR19fKSA9PSBMTF9EQUNfTk9JU0VfTEZTUl9VTk1BU0tfQklUUzZfMCkgIFwKLSAgIHx8ICgoX19XQVZFX0FVVE9fR0VORVJBVElPTl9DT05GSUdfXykgPT0gTExfREFDX05PSVNFX0xGU1JfVU5NQVNLX0JJVFM3XzApICBcCi0gICB8fCAoKF9fV0FWRV9BVVRPX0dFTkVSQVRJT05fQ09ORklHX18pID09IExMX0RBQ19OT0lTRV9MRlNSX1VOTUFTS19CSVRTOF8wKSAgXAotICAgfHwgKChfX1dBVkVfQVVUT19HRU5FUkFUSU9OX0NPTkZJR19fKSA9PSBMTF9EQUNfTk9JU0VfTEZTUl9VTk1BU0tfQklUUzlfMCkgIFwKLSAgIHx8ICgoX19XQVZFX0FVVE9fR0VORVJBVElPTl9DT05GSUdfXykgPT0gTExfREFDX05PSVNFX0xGU1JfVU5NQVNLX0JJVFMxMF8wKSBcCi0gICB8fCAoKF9fV0FWRV9BVVRPX0dFTkVSQVRJT05fQ09ORklHX18pID09IExMX0RBQ19OT0lTRV9MRlNSX1VOTUFTS19CSVRTMTFfMCkgXAotICAgfHwgKChfX1dBVkVfQVVUT19HRU5FUkFUSU9OX0NPTkZJR19fKSA9PSBMTF9EQUNfVFJJQU5HTEVfQU1QTElUVURFXzEpICAgICAgIFwKLSAgIHx8ICgoX19XQVZFX0FVVE9fR0VORVJBVElPTl9DT05GSUdfXykgPT0gTExfREFDX1RSSUFOR0xFX0FNUExJVFVERV8zKSAgICAgICBcCi0gICB8fCAoKF9fV0FWRV9BVVRPX0dFTkVSQVRJT05fQ09ORklHX18pID09IExMX0RBQ19UUklBTkdMRV9BTVBMSVRVREVfNykgICAgICAgXAotICAgfHwgKChfX1dBVkVfQVVUT19HRU5FUkFUSU9OX0NPTkZJR19fKSA9PSBMTF9EQUNfVFJJQU5HTEVfQU1QTElUVURFXzE1KSAgICAgIFwKLSAgIHx8ICgoX19XQVZFX0FVVE9fR0VORVJBVElPTl9DT05GSUdfXykgPT0gTExfREFDX1RSSUFOR0xFX0FNUExJVFVERV8zMSkgICAgICBcCi0gICB8fCAoKF9fV0FWRV9BVVRPX0dFTkVSQVRJT05fQ09ORklHX18pID09IExMX0RBQ19UUklBTkdMRV9BTVBMSVRVREVfNjMpICAgICAgXAotICAgfHwgKChfX1dBVkVfQVVUT19HRU5FUkFUSU9OX0NPTkZJR19fKSA9PSBMTF9EQUNfVFJJQU5HTEVfQU1QTElUVURFXzEyNykgICAgIFwKLSAgIHx8ICgoX19XQVZFX0FVVE9fR0VORVJBVElPTl9DT05GSUdfXykgPT0gTExfREFDX1RSSUFOR0xFX0FNUExJVFVERV8yNTUpICAgICBcCi0gICB8fCAoKF9fV0FWRV9BVVRPX0dFTkVSQVRJT05fQ09ORklHX18pID09IExMX0RBQ19UUklBTkdMRV9BTVBMSVRVREVfNTExKSAgICAgXAotICAgfHwgKChfX1dBVkVfQVVUT19HRU5FUkFUSU9OX0NPTkZJR19fKSA9PSBMTF9EQUNfVFJJQU5HTEVfQU1QTElUVURFXzEwMjMpICAgIFwKLSAgIHx8ICgoX19XQVZFX0FVVE9fR0VORVJBVElPTl9DT05GSUdfXykgPT0gTExfREFDX1RSSUFOR0xFX0FNUExJVFVERV8yMDQ3KSAgICBcCi0gICB8fCAoKF9fV0FWRV9BVVRPX0dFTkVSQVRJT05fQ09ORklHX18pID09IExMX0RBQ19UUklBTkdMRV9BTVBMSVRVREVfNDA5NSkgICAgXAorI2RlZmluZSBJU19MTF9EQUNfV0FWRV9BVVRPX0dFTkVSX0NPTkZJRyhfX1dBVkVfQVVUT19HRU5FUkFUSU9OX01PREVfXywgX19XQVZFX0FVVE9fR0VORVJBVElPTl9DT05GSUdfXykgIFwKKyAgKCAoKChfX1dBVkVfQVVUT19HRU5FUkFUSU9OX01PREVfXykgPT0gTExfREFDX1dBVkVfQVVUT19HRU5FUkFUSU9OX05PSVNFKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICYmICggICgoX19XQVZFX0FVVE9fR0VORVJBVElPTl9DT05GSUdfXykgPT0gTExfREFDX05PSVNFX0xGU1JfVU5NQVNLX0JJVDApICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICB8fCAoKF9fV0FWRV9BVVRPX0dFTkVSQVRJT05fQ09ORklHX18pID09IExMX0RBQ19OT0lTRV9MRlNSX1VOTUFTS19CSVRTMV8wKSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgfHwgKChfX1dBVkVfQVVUT19HRU5FUkFUSU9OX0NPTkZJR19fKSA9PSBMTF9EQUNfTk9JU0VfTEZTUl9VTk1BU0tfQklUUzJfMCkgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgIHx8ICgoX19XQVZFX0FVVE9fR0VORVJBVElPTl9DT05GSUdfXykgPT0gTExfREFDX05PSVNFX0xGU1JfVU5NQVNLX0JJVFMzXzApICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICB8fCAoKF9fV0FWRV9BVVRPX0dFTkVSQVRJT05fQ09ORklHX18pID09IExMX0RBQ19OT0lTRV9MRlNSX1VOTUFTS19CSVRTNF8wKSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgfHwgKChfX1dBVkVfQVVUT19HRU5FUkFUSU9OX0NPTkZJR19fKSA9PSBMTF9EQUNfTk9JU0VfTEZTUl9VTk1BU0tfQklUUzVfMCkgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgIHx8ICgoX19XQVZFX0FVVE9fR0VORVJBVElPTl9DT05GSUdfXykgPT0gTExfREFDX05PSVNFX0xGU1JfVU5NQVNLX0JJVFM2XzApICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICB8fCAoKF9fV0FWRV9BVVRPX0dFTkVSQVRJT05fQ09ORklHX18pID09IExMX0RBQ19OT0lTRV9MRlNSX1VOTUFTS19CSVRTN18wKSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgfHwgKChfX1dBVkVfQVVUT19HRU5FUkFUSU9OX0NPTkZJR19fKSA9PSBMTF9EQUNfTk9JU0VfTEZTUl9VTk1BU0tfQklUUzhfMCkgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgIHx8ICgoX19XQVZFX0FVVE9fR0VORVJBVElPTl9DT05GSUdfXykgPT0gTExfREFDX05PSVNFX0xGU1JfVU5NQVNLX0JJVFM5XzApICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICB8fCAoKF9fV0FWRV9BVVRPX0dFTkVSQVRJT05fQ09ORklHX18pID09IExMX0RBQ19OT0lTRV9MRlNSX1VOTUFTS19CSVRTMTBfMCkgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgfHwgKChfX1dBVkVfQVVUT19HRU5FUkFUSU9OX0NPTkZJR19fKSA9PSBMTF9EQUNfTk9JU0VfTEZTUl9VTk1BU0tfQklUUzExXzApKSAgICAgICAgICAgICAgICAgICBcCisgICAgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHx8KCgoX19XQVZFX0FVVE9fR0VORVJBVElPTl9NT0RFX18pID09IExMX0RBQ19XQVZFX0FVVE9fR0VORVJBVElPTl9UUklBTkdMRSkgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAmJiAoICAoKF9fV0FWRV9BVVRPX0dFTkVSQVRJT05fQ09ORklHX18pID09IExMX0RBQ19UUklBTkdMRV9BTVBMSVRVREVfMSkgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgfHwgKChfX1dBVkVfQVVUT19HRU5FUkFUSU9OX0NPTkZJR19fKSA9PSBMTF9EQUNfVFJJQU5HTEVfQU1QTElUVURFXzMpICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgIHx8ICgoX19XQVZFX0FVVE9fR0VORVJBVElPTl9DT05GSUdfXykgPT0gTExfREFDX1RSSUFOR0xFX0FNUExJVFVERV83KSAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICB8fCAoKF9fV0FWRV9BVVRPX0dFTkVSQVRJT05fQ09ORklHX18pID09IExMX0RBQ19UUklBTkdMRV9BTVBMSVRVREVfMTUpICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgfHwgKChfX1dBVkVfQVVUT19HRU5FUkFUSU9OX0NPTkZJR19fKSA9PSBMTF9EQUNfVFJJQU5HTEVfQU1QTElUVURFXzMxKSAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgIHx8ICgoX19XQVZFX0FVVE9fR0VORVJBVElPTl9DT05GSUdfXykgPT0gTExfREFDX1RSSUFOR0xFX0FNUExJVFVERV82MykgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICB8fCAoKF9fV0FWRV9BVVRPX0dFTkVSQVRJT05fQ09ORklHX18pID09IExMX0RBQ19UUklBTkdMRV9BTVBMSVRVREVfMTI3KSAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgfHwgKChfX1dBVkVfQVVUT19HRU5FUkFUSU9OX0NPTkZJR19fKSA9PSBMTF9EQUNfVFJJQU5HTEVfQU1QTElUVURFXzI1NSkgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgIHx8ICgoX19XQVZFX0FVVE9fR0VORVJBVElPTl9DT05GSUdfXykgPT0gTExfREFDX1RSSUFOR0xFX0FNUExJVFVERV81MTEpICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICB8fCAoKF9fV0FWRV9BVVRPX0dFTkVSQVRJT05fQ09ORklHX18pID09IExMX0RBQ19UUklBTkdMRV9BTVBMSVRVREVfMTAyMykgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgfHwgKChfX1dBVkVfQVVUT19HRU5FUkFUSU9OX0NPTkZJR19fKSA9PSBMTF9EQUNfVFJJQU5HTEVfQU1QTElUVURFXzIwNDcpICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgIHx8ICgoX19XQVZFX0FVVE9fR0VORVJBVElPTl9DT05GSUdfXykgPT0gTExfREFDX1RSSUFOR0xFX0FNUExJVFVERV80MDk1KSkgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICkKIAogI2RlZmluZSBJU19MTF9EQUNfT1VUUFVUX0JVRkZFUihfX09VVFBVVF9CVUZGRVJfXykgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgKCAgICgoX19PVVRQVVRfQlVGRkVSX18pID09IExMX0RBQ19PVVRQVVRfQlVGRkVSX0VOQUJMRSkgICAgICAgICAgICAgICAgICAgICBcCi0gICB8fCAoKF9fT1VUUFVUX0JVRkZFUl9fKSA9PSBMTF9EQUNfT1VUUFVUX0JVRkZFUl9ESVNBQkxFKSAgICAgICAgICAgICAgICAgICAgXAorICAgICAgfHwgKChfX09VVFBVVF9CVUZGRVJfXykgPT0gTExfREFDX09VVFBVVF9CVUZGRVJfRElTQUJMRSkgICAgICAgICAgICAgICAgIFwKICAgKQogCiAvKioKQEAgLTEzNywyMCArMTQwLDMyIEBACiB7CiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19EQUNfQUxMX0lOU1RBTkNFKERBQ3gpKTsKLSAgCi0gIC8qIEZvcmNlIHJlc2V0IG9mIERBQzEgY2xvY2sgKi8KKworICAvKiBGb3JjZSByZXNldCBvZiBEQUMgY2xvY2sgKi8KICAgTExfQVBCMV9HUlAxX0ZvcmNlUmVzZXQoTExfQVBCMV9HUlAxX1BFUklQSF9EQUMxKTsKLSAgCi0gIC8qIFJlbGVhc2UgcmVzZXQgb2YgREFDMSBjbG9jayAqLworCisgIC8qIFJlbGVhc2UgcmVzZXQgb2YgREFDIGNsb2NrICovCiAgIExMX0FQQjFfR1JQMV9SZWxlYXNlUmVzZXQoTExfQVBCMV9HUlAxX1BFUklQSF9EQUMxKTsKKwogICByZXR1cm4gU1VDQ0VTUzsKIH0KIAogLyoqCi0gICogQGJyaWVmICBJbml0aWFsaXplIHNvbWUgZmVhdHVyZXMgb2YgREFDIGluc3RhbmNlLgorICAqIEBicmllZiAgSW5pdGlhbGl6ZSBzb21lIGZlYXR1cmVzIG9mIERBQyBjaGFubmVsLgorICAqIEBub3RlICAgQHJlZiBMTF9EQUNfSW5pdCgpIGFpbXMgdG8gZWFzZSBiYXNpYyBjb25maWd1cmF0aW9uIG9mIGEgREFDIGNoYW5uZWwuCisgICogICAgICAgICBMZWF2aW5nIGl0IHJlYWR5IHRvIGJlIGVuYWJsZWQgYW5kIG91dHB1dDoKKyAgKiAgICAgICAgIGEgbGV2ZWwgYnkgY2FsbGluZyBvbmUgb2YKKyAgKiAgICAgICAgICAgQHJlZiBMTF9EQUNfQ29udmVydERhdGExMlJpZ2h0QWxpZ25lZAorICAqICAgICAgICAgICBAcmVmIExMX0RBQ19Db252ZXJ0RGF0YTEyTGVmdEFsaWduZWQKKyAgKiAgICAgICAgICAgQHJlZiBMTF9EQUNfQ29udmVydERhdGE4UmlnaHRBbGlnbmVkCisgICogICAgICAgICBvciBvbmUgb2YgdGhlIHN1cHBvcnRlZCBhdXRvZ2VuZXJhdGVkIHdhdmUuCisgICogQG5vdGUgICBUaGlzIGZ1bmN0aW9uIGFsbG93cyBjb25maWd1cmF0aW9uIG9mOgorICAqICAgICAgICAgIC0gT3V0cHV0IG1vZGUKKyAgKiAgICAgICAgICAtIFRyaWdnZXIKKyAgKiAgICAgICAgICAtIFdhdmUgZ2VuZXJhdGlvbgogICAqIEBub3RlICAgVGhlIHNldHRpbmcgb2YgdGhlc2UgcGFyYW1ldGVycyBieSBmdW5jdGlvbiBAcmVmIExMX0RBQ19Jbml0KCkKICAgKiAgICAgICAgIGlzIGNvbmRpdGlvbmVkIHRvIERBQyBzdGF0ZToKLSAgKiAgICAgICAgIERBQyBpbnN0YW5jZSBtdXN0IGJlIGRpc2FibGVkLgorICAqICAgICAgICAgREFDIGNoYW5uZWwgbXVzdCBiZSBkaXNhYmxlZC4KICAgKiBAcGFyYW0gIERBQ3ggREFDIGluc3RhbmNlCiAgICogQHBhcmFtICBEQUNfQ2hhbm5lbCBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RBQ19DSEFOTkVMXzEKQEAgLTE2Niw3ICsxODEsNyBAQAogRXJyb3JTdGF0dXMgTExfREFDX0luaXQoREFDX1R5cGVEZWYgKkRBQ3gsIHVpbnQzMl90IERBQ19DaGFubmVsLCBMTF9EQUNfSW5pdFR5cGVEZWYgKkRBQ19Jbml0U3RydWN0KQogewogICBFcnJvclN0YXR1cyBzdGF0dXMgPSBTVUNDRVNTOwotICAKKwogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfREFDX0FMTF9JTlNUQU5DRShEQUN4KSk7CiAgIGFzc2VydF9wYXJhbShJU19MTF9EQUNfQ0hBTk5FTChEQUN4LCBEQUNfQ2hhbm5lbCkpOwpAQCAtMTc1LDI3ICsxOTAsMjkgQEAKICAgYXNzZXJ0X3BhcmFtKElTX0xMX0RBQ19XQVZFX0FVVE9fR0VORVJfTU9ERShEQUNfSW5pdFN0cnVjdC0+V2F2ZUF1dG9HZW5lcmF0aW9uKSk7CiAgIGlmIChEQUNfSW5pdFN0cnVjdC0+V2F2ZUF1dG9HZW5lcmF0aW9uICE9IExMX0RBQ19XQVZFX0FVVE9fR0VORVJBVElPTl9OT05FKQogICB7Ci0gICAgYXNzZXJ0X3BhcmFtKElTX0xMX0RBQ19XQVZFX0FVVE9fR0VORVJfQ09ORklHKERBQ19Jbml0U3RydWN0LT5XYXZlQXV0b0dlbmVyYXRpb25Db25maWcpKTsKKyAgICBhc3NlcnRfcGFyYW0oSVNfTExfREFDX1dBVkVfQVVUT19HRU5FUl9DT05GSUcoREFDX0luaXRTdHJ1Y3QtPldhdmVBdXRvR2VuZXJhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREFDX0luaXRTdHJ1Y3QtPldhdmVBdXRvR2VuZXJhdGlvbkNvbmZpZykpOwogICB9Ci0gIAorCiAgIC8qIE5vdGU6IEhhcmR3YXJlIGNvbnN0cmFpbnQgKHJlZmVyIHRvIGRlc2NyaXB0aW9uIG9mIHRoaXMgZnVuY3Rpb24pICAgICAgICAqLwogICAvKiAgICAgICBEQUMgaW5zdGFuY2UgbXVzdCBiZSBkaXNhYmxlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgaWYoTExfREFDX0lzRW5hYmxlZChEQUN4LCBEQUNfQ2hhbm5lbCkgPT0gMFUpCisgIGlmIChMTF9EQUNfSXNFbmFibGVkKERBQ3gsIERBQ19DaGFubmVsKSA9PSAwVUwpCiAgIHsKICAgICAvKiBDb25maWd1cmF0aW9uIG9mIERBQyBjaGFubmVsOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgICAgLyogIC0gVHJpZ2dlclNvdXJjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgIC8qICAtIFdhdmVBdXRvR2VuZXJhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAvKiAgLSBPdXRwdXRCdWZmZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgLyogIC0gT3V0cHV0TW9kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgIGlmIChEQUNfSW5pdFN0cnVjdC0+V2F2ZUF1dG9HZW5lcmF0aW9uICE9IExMX0RBQ19XQVZFX0FVVE9fR0VORVJBVElPTl9OT05FKQogICAgIHsKICAgICAgIE1PRElGWV9SRUcoREFDeC0+Q1IsCi0gICAgICAgICAgICAgICAgICggIERBQ19DUl9UU0VMMQorICAgICAgICAgICAgICAgICAoREFDX0NSX1RTRUwxCiAgICAgICAgICAgICAgICAgICB8IERBQ19DUl9XQVZFMQogICAgICAgICAgICAgICAgICAgfCBEQUNfQ1JfTUFNUDEKICAgICAgICAgICAgICAgICAgIHwgREFDX0NSX0JPRkYxCiAgICAgICAgICAgICAgICAgICkgPDwgKERBQ19DaGFubmVsICYgREFDX0NSX0NIWF9CSVRPRkZTRVRfTUFTSykKLSAgICAgICAgICAgICAgICAsCi0gICAgICAgICAgICAgICAgICggIERBQ19Jbml0U3RydWN0LT5UcmlnZ2VyU291cmNlCisgICAgICAgICAgICAgICAgICwKKyAgICAgICAgICAgICAgICAgKERBQ19Jbml0U3RydWN0LT5UcmlnZ2VyU291cmNlCiAgICAgICAgICAgICAgICAgICB8IERBQ19Jbml0U3RydWN0LT5XYXZlQXV0b0dlbmVyYXRpb24KICAgICAgICAgICAgICAgICAgIHwgREFDX0luaXRTdHJ1Y3QtPldhdmVBdXRvR2VuZXJhdGlvbkNvbmZpZwogICAgICAgICAgICAgICAgICAgfCBEQUNfSW5pdFN0cnVjdC0+T3V0cHV0QnVmZmVyCkBAIC0yMDUsMTIgKzIyMiwxMiBAQAogICAgIGVsc2UKICAgICB7CiAgICAgICBNT0RJRllfUkVHKERBQ3gtPkNSLAotICAgICAgICAgICAgICAgICAoICBEQUNfQ1JfVFNFTDEKKyAgICAgICAgICAgICAgICAgKERBQ19DUl9UU0VMMQogICAgICAgICAgICAgICAgICAgfCBEQUNfQ1JfV0FWRTEKICAgICAgICAgICAgICAgICAgIHwgREFDX0NSX0JPRkYxCiAgICAgICAgICAgICAgICAgICkgPDwgKERBQ19DaGFubmVsICYgREFDX0NSX0NIWF9CSVRPRkZTRVRfTUFTSykKLSAgICAgICAgICAgICAgICAsCi0gICAgICAgICAgICAgICAgICggIERBQ19Jbml0U3RydWN0LT5UcmlnZ2VyU291cmNlCisgICAgICAgICAgICAgICAgICwKKyAgICAgICAgICAgICAgICAgKERBQ19Jbml0U3RydWN0LT5UcmlnZ2VyU291cmNlCiAgICAgICAgICAgICAgICAgICB8IExMX0RBQ19XQVZFX0FVVE9fR0VORVJBVElPTl9OT05FCiAgICAgICAgICAgICAgICAgICB8IERBQ19Jbml0U3RydWN0LT5PdXRwdXRCdWZmZXIKICAgICAgICAgICAgICAgICAgKSA8PCAoREFDX0NoYW5uZWwgJiBEQUNfQ1JfQ0hYX0JJVE9GRlNFVF9NQVNLKQpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjR4eF9sbF9kbWEyZC5jIGIvU3JjL3N0bTMyZjR4eF9sbF9kbWEyZC5jCmluZGV4IDlkZjViNDkuLjkyOTQxYzQgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmY0eHhfbGxfZG1hMmQuYworKysgYi9TcmMvc3RtMzJmNHh4X2xsX2RtYTJkLmMKQEAgLTI1LDcgKzI1LDcgQEAKICNpbmNsdWRlICJzdG0zMl9hc3NlcnQuaCIKICNlbHNlCiAjZGVmaW5lIGFzc2VydF9wYXJhbShleHByKSAoKHZvaWQpMFUpCi0jZW5kaWYKKyNlbmRpZiAgLyogVVNFX0ZVTExfQVNTRVJUICovCiAKIC8qKiBAYWRkdG9ncm91cCBTVE0zMkY0eHhfTExfRHJpdmVyCiAgICogQHsKQEAgLTE2MCw5ICsxNjAsMTIgQEAKIEVycm9yU3RhdHVzIExMX0RNQTJEX0luaXQoRE1BMkRfVHlwZURlZiAqRE1BMkR4LCBMTF9ETUEyRF9Jbml0VHlwZURlZiAqRE1BMkRfSW5pdFN0cnVjdCkKIHsKICAgRXJyb3JTdGF0dXMgc3RhdHVzID0gRVJST1I7Ci0gIExMX0RNQTJEX0NvbG9yVHlwZURlZiBETUEyRF9Db2xvclN0cnVjdDsKLSAgdWludDMyX3QgdG1wLCB0bXAxLCB0bXAyOwotICB1aW50MzJfdCByZWdNYXNrLCByZWdWYWx1ZTsKKyAgTExfRE1BMkRfQ29sb3JUeXBlRGVmIGRtYTJkX2NvbG9yc3RydWN0OworICB1aW50MzJfdCB0bXA7CisgIHVpbnQzMl90IHRtcDE7CisgIHVpbnQzMl90IHRtcDI7CisgIHVpbnQzMl90IHJlZ01hc2s7CisgIHVpbnQzMl90IHJlZ1ZhbHVlOwogCiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19ETUEyRF9BTExfSU5TVEFOQ0UoRE1BMkR4KSk7CkBAIC0yMDQsMTIgKzIwNywxMiBAQAogICAgIExMX0RNQTJEX1NldE91dHB1dE1lbUFkZHIoRE1BMkR4LCBETUEyRF9Jbml0U3RydWN0LT5PdXRwdXRNZW1vcnlBZGRyZXNzKTsKIAogICAgIC8qIERNQTJEIE9DT0xSIHJlZ2lzdGVyIGNvbmZpZ3VyYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSAgICBETUEyRF9Db2xvclN0cnVjdC5Db2xvck1vZGUgICA9IERNQTJEX0luaXRTdHJ1Y3QtPkNvbG9yTW9kZTsKLSAgICBETUEyRF9Db2xvclN0cnVjdC5PdXRwdXRCbHVlICA9IERNQTJEX0luaXRTdHJ1Y3QtPk91dHB1dEJsdWU7Ci0gICAgRE1BMkRfQ29sb3JTdHJ1Y3QuT3V0cHV0R3JlZW4gPSBETUEyRF9Jbml0U3RydWN0LT5PdXRwdXRHcmVlbjsKLSAgICBETUEyRF9Db2xvclN0cnVjdC5PdXRwdXRSZWQgICA9IERNQTJEX0luaXRTdHJ1Y3QtPk91dHB1dFJlZDsKLSAgICBETUEyRF9Db2xvclN0cnVjdC5PdXRwdXRBbHBoYSA9IERNQTJEX0luaXRTdHJ1Y3QtPk91dHB1dEFscGhhOwotICAgIExMX0RNQTJEX0NvbmZpZ091dHB1dENvbG9yKERNQTJEeCwgJkRNQTJEX0NvbG9yU3RydWN0KTsKKyAgICBkbWEyZF9jb2xvcnN0cnVjdC5Db2xvck1vZGUgICA9IERNQTJEX0luaXRTdHJ1Y3QtPkNvbG9yTW9kZTsKKyAgICBkbWEyZF9jb2xvcnN0cnVjdC5PdXRwdXRCbHVlICA9IERNQTJEX0luaXRTdHJ1Y3QtPk91dHB1dEJsdWU7CisgICAgZG1hMmRfY29sb3JzdHJ1Y3QuT3V0cHV0R3JlZW4gPSBETUEyRF9Jbml0U3RydWN0LT5PdXRwdXRHcmVlbjsKKyAgICBkbWEyZF9jb2xvcnN0cnVjdC5PdXRwdXRSZWQgICA9IERNQTJEX0luaXRTdHJ1Y3QtPk91dHB1dFJlZDsKKyAgICBkbWEyZF9jb2xvcnN0cnVjdC5PdXRwdXRBbHBoYSA9IERNQTJEX0luaXRTdHJ1Y3QtPk91dHB1dEFscGhhOworICAgIExMX0RNQTJEX0NvbmZpZ091dHB1dENvbG9yKERNQTJEeCwgJmRtYTJkX2NvbG9yc3RydWN0KTsKIAogICAgIHN0YXR1cyA9IFNVQ0NFU1M7CiAgIH0KZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmY0eHhfbGxfbHB0aW0uYyBiL1NyYy9zdG0zMmY0eHhfbGxfbHB0aW0uYwppbmRleCBjYmMyMDM3Li5jZDQ0NjkyIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmNHh4X2xsX2xwdGltLmMKKysrIGIvU3JjL3N0bTMyZjR4eF9sbF9scHRpbS5jCkBAIC00OCwyMiArNDgsMjIgQEAKICAgKiBAewogICAqLwogI2RlZmluZSBJU19MTF9MUFRJTV9DTE9DS19TT1VSQ0UoX19WQUxVRV9fKSAoKChfX1ZBTFVFX18pID09IExMX0xQVElNX0NMS19TT1VSQ0VfSU5URVJOQUwpIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9MUFRJTV9DTEtfU09VUkNFX0VYVEVSTkFMKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9MUFRJTV9DTEtfU09VUkNFX0VYVEVSTkFMKSkKIAogI2RlZmluZSBJU19MTF9MUFRJTV9DTE9DS19QUkVTQ0FMRVIoX19WQUxVRV9fKSAoKChfX1ZBTFVFX18pID09IExMX0xQVElNX1BSRVNDQUxFUl9ESVYxKSAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9MUFRJTV9QUkVTQ0FMRVJfRElWMikgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfTFBUSU1fUFJFU0NBTEVSX0RJVjQpICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX0xQVElNX1BSRVNDQUxFUl9ESVY4KSAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9MUFRJTV9QUkVTQ0FMRVJfRElWMTYpICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfTFBUSU1fUFJFU0NBTEVSX0RJVjMyKSAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX0xQVElNX1BSRVNDQUxFUl9ESVY2NCkgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9MUFRJTV9QUkVTQ0FMRVJfRElWMTI4KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9MUFRJTV9QUkVTQ0FMRVJfRElWMikgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfTFBUSU1fUFJFU0NBTEVSX0RJVjQpICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX0xQVElNX1BSRVNDQUxFUl9ESVY4KSAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9MUFRJTV9QUkVTQ0FMRVJfRElWMTYpICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfTFBUSU1fUFJFU0NBTEVSX0RJVjMyKSAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX0xQVElNX1BSRVNDQUxFUl9ESVY2NCkgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9MUFRJTV9QUkVTQ0FMRVJfRElWMTI4KSkKIAogI2RlZmluZSBJU19MTF9MUFRJTV9XQVZFRk9STShfX1ZBTFVFX18pICgoKF9fVkFMVUVfXykgPT0gTExfTFBUSU1fT1VUUFVUX1dBVkVGT1JNX1BXTSkgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfTFBUSU1fT1VUUFVUX1dBVkVGT1JNX1NFVE9OQ0UpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfTFBUSU1fT1VUUFVUX1dBVkVGT1JNX1NFVE9OQ0UpKQogCiAjZGVmaW5lIElTX0xMX0xQVElNX09VVFBVVF9QT0xBUklUWShfX1ZBTFVFX18pICgoKF9fVkFMVUVfXykgPT0gTExfTFBUSU1fT1VUUFVUX1BPTEFSSVRZX1JFR1VMQVIpIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9MUFRJTV9PVVRQVVRfUE9MQVJJVFlfSU5WRVJTRSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfTFBUSU1fT1VUUFVUX1BPTEFSSVRZX0lOVkVSU0UpKQogLyoqCiAgICogQH0KICAgKi8KQEAgLTI0Miw4ICsyNDIsNyBAQAogICAgICAgZG8KICAgICAgIHsKICAgICAgICAgcmNjX2Nsb2NrLlNZU0NMS19GcmVxdWVuY3ktLTsgLyogVXNlZCBmb3IgdGltZW91dCAqLwotICAgICAgfQotICAgICAgd2hpbGUgKCgoTExfTFBUSU1fSXNBY3RpdmVGbGFnX0NNUE9LKExQVElNeCkgIT0gMVVMKSkgJiYgKChyY2NfY2xvY2suU1lTQ0xLX0ZyZXF1ZW5jeSkgPiAwVUwpKTsKKyAgICAgIH0gd2hpbGUgKCgoTExfTFBUSU1fSXNBY3RpdmVGbGFnX0NNUE9LKExQVElNeCkgIT0gMVVMKSkgJiYgKChyY2NfY2xvY2suU1lTQ0xLX0ZyZXF1ZW5jeSkgPiAwVUwpKTsKIAogICAgICAgTExfTFBUSU1fQ2xlYXJGbGFnX0NNUE9LKExQVElNeCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjR4eF9sbF9zZG1tYy5jIGIvU3JjL3N0bTMyZjR4eF9sbF9zZG1tYy5jCmluZGV4IDRmMjNhNDUuLmZmODk0MzUgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmY0eHhfbGxfc2RtbWMuYworKysgYi9TcmMvc3RtMzJmNHh4X2xsX3NkbW1jLmMKQEAgLTUxMSw3ICs1MTEsNyBAQAogICAqLwogCiAvKioKLSAgKiBAYnJpZWYgIFNlbmQgdGhlIERhdGEgQmxvY2sgTGVuZ2h0IGNvbW1hbmQgYW5kIGNoZWNrIHRoZSByZXNwb25zZQorICAqIEBicmllZiAgU2VuZCB0aGUgRGF0YSBCbG9jayBMZW5ndGggY29tbWFuZCBhbmQgY2hlY2sgdGhlIHJlc3BvbnNlCiAgICogQHBhcmFtICBTRElPeDogUG9pbnRlciB0byBTRElPIHJlZ2lzdGVyIGJhc2UgCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCkBAIC0xMDk5LDcgKzEwOTksNyBAQAogfQogCiAvKioKLSAgKiBAYnJpZWYgIENoZWNrcyBzd2l0Y2hhYmxlIGZ1bmN0aW9uIGFuZCBzd2l0Y2ggY2FyZCBmdW5jdGlvbi4gU0RNTUNfQ01EX0hTX1NXSVRDSCBjb21hbmQKKyAgKiBAYnJpZWYgIENoZWNrcyBzd2l0Y2hhYmxlIGZ1bmN0aW9uIGFuZCBzd2l0Y2ggY2FyZCBmdW5jdGlvbi4gU0RNTUNfQ01EX0hTX1NXSVRDSCBjb21tYW5kCiAgICogQHBhcmFtICBTRElPeDogUG9pbnRlciB0byBTRElPIHJlZ2lzdGVyIGJhc2UgCiAgICogQHBhcmFtZSBBcmd1bWVudDogQXJndW1lbnQgdXNlZCBmb3IgdGhlIGNvbW1hbmQKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKQEAgLTExNDIsNyArMTE0Miw3IEBACiB7CiAgIC8qIDggaXMgdGhlIG51bWJlciBvZiByZXF1aXJlZCBpbnN0cnVjdGlvbnMgY3ljbGVzIGZvciB0aGUgYmVsb3cgbG9vcCBzdGF0ZW1lbnQuCiAgIFRoZSBTRElPX0NNRFRJTUVPVVQgaXMgZXhwcmVzc2VkIGluIG1zICovCi0gIHJlZ2lzdGVyIHVpbnQzMl90IGNvdW50ID0gU0RJT19DTURUSU1FT1VUICogKFN5c3RlbUNvcmVDbG9jayAvIDhVIC8xMDAwVSk7CisgIHVpbnQzMl90IGNvdW50ID0gU0RJT19DTURUSU1FT1VUICogKFN5c3RlbUNvcmVDbG9jayAvIDhVIC8xMDAwVSk7CiAgIAogICBkbwogICB7CkBAIC0xMTcyLDcgKzExNzIsNyBAQAogICAKICAgLyogOCBpcyB0aGUgbnVtYmVyIG9mIHJlcXVpcmVkIGluc3RydWN0aW9ucyBjeWNsZXMgZm9yIHRoZSBiZWxvdyBsb29wIHN0YXRlbWVudC4KICAgVGhlIFRpbWVvdXQgaXMgZXhwcmVzc2VkIGluIG1zICovCi0gIHJlZ2lzdGVyIHVpbnQzMl90IGNvdW50ID0gVGltZW91dCAqIChTeXN0ZW1Db3JlQ2xvY2sgLyA4VSAvMTAwMFUpOworICB1aW50MzJfdCBjb3VudCA9IFRpbWVvdXQgKiAoU3lzdGVtQ29yZUNsb2NrIC8gOFUgLzEwMDBVKTsKICAgCiAgIGRvCiAgIHsKQEAgLTEzMDUsNyArMTMwNSw3IEBACiAgIHVpbnQzMl90IHN0YV9yZWc7CiAgIC8qIDggaXMgdGhlIG51bWJlciBvZiByZXF1aXJlZCBpbnN0cnVjdGlvbnMgY3ljbGVzIGZvciB0aGUgYmVsb3cgbG9vcCBzdGF0ZW1lbnQuCiAgIFRoZSBTRElPX0NNRFRJTUVPVVQgaXMgZXhwcmVzc2VkIGluIG1zICovCi0gIHJlZ2lzdGVyIHVpbnQzMl90IGNvdW50ID0gU0RJT19DTURUSU1FT1VUICogKFN5c3RlbUNvcmVDbG9jayAvIDhVIC8xMDAwVSk7CisgIHVpbnQzMl90IGNvdW50ID0gU0RJT19DTURUSU1FT1VUICogKFN5c3RlbUNvcmVDbG9jayAvIDhVIC8xMDAwVSk7CiAgIAogICBkbwogICB7CkBAIC0xMzQ5LDcgKzEzNDksNyBAQAogICB1aW50MzJfdCBzdGFfcmVnOwogICAvKiA4IGlzIHRoZSBudW1iZXIgb2YgcmVxdWlyZWQgaW5zdHJ1Y3Rpb25zIGN5Y2xlcyBmb3IgdGhlIGJlbG93IGxvb3Agc3RhdGVtZW50LgogICBUaGUgU0RJT19DTURUSU1FT1VUIGlzIGV4cHJlc3NlZCBpbiBtcyAqLwotICByZWdpc3RlciB1aW50MzJfdCBjb3VudCA9IFNESU9fQ01EVElNRU9VVCAqIChTeXN0ZW1Db3JlQ2xvY2sgLyA4VSAvMTAwMFUpOworICB1aW50MzJfdCBjb3VudCA9IFNESU9fQ01EVElNRU9VVCAqIChTeXN0ZW1Db3JlQ2xvY2sgLyA4VSAvMTAwMFUpOwogICAKICAgZG8KICAgewpAQCAtMTM5MSw3ICsxMzkxLDcgQEAKIAogICAvKiA4IGlzIHRoZSBudW1iZXIgb2YgcmVxdWlyZWQgaW5zdHJ1Y3Rpb25zIGN5Y2xlcyBmb3IgdGhlIGJlbG93IGxvb3Agc3RhdGVtZW50LgogICBUaGUgU0RJT19DTURUSU1FT1VUIGlzIGV4cHJlc3NlZCBpbiBtcyAqLwotICByZWdpc3RlciB1aW50MzJfdCBjb3VudCA9IFNESU9fQ01EVElNRU9VVCAqIChTeXN0ZW1Db3JlQ2xvY2sgLyA4VSAvMTAwMFUpOworICB1aW50MzJfdCBjb3VudCA9IFNESU9fQ01EVElNRU9VVCAqIChTeXN0ZW1Db3JlQ2xvY2sgLyA4VSAvMTAwMFUpOwogICAKICAgZG8KICAgewpAQCAtMTQ2Miw3ICsxNDYyLDcgQEAKICAgdWludDMyX3Qgc3RhX3JlZzsKICAgLyogOCBpcyB0aGUgbnVtYmVyIG9mIHJlcXVpcmVkIGluc3RydWN0aW9ucyBjeWNsZXMgZm9yIHRoZSBiZWxvdyBsb29wIHN0YXRlbWVudC4KICAgVGhlIFNESU9fQ01EVElNRU9VVCBpcyBleHByZXNzZWQgaW4gbXMgKi8KLSAgcmVnaXN0ZXIgdWludDMyX3QgY291bnQgPSBTRElPX0NNRFRJTUVPVVQgKiAoU3lzdGVtQ29yZUNsb2NrIC8gOFUgLzEwMDBVKTsKKyAgdWludDMyX3QgY291bnQgPSBTRElPX0NNRFRJTUVPVVQgKiAoU3lzdGVtQ29yZUNsb2NrIC8gOFUgLzEwMDBVKTsKICAgCiAgIGRvCiAgIHsKQEAgLTE1MDQsNiArMTUwNCwzMiBAQAogfQogCiAvKioKKyAgKiBAYnJpZWYgIFNlbmQgdGhlIFNlbmQgRVhUX0NTRCBjb21tYW5kIGFuZCBjaGVjayB0aGUgcmVzcG9uc2UuCisgICogQHBhcmFtICBTRElPeDogUG9pbnRlciB0byBTRE1NQyByZWdpc3RlciBiYXNlCisgICogQHBhcmFtICBBcmd1bWVudDogQ29tbWFuZCBBcmd1bWVudAorICAqIEByZXR2YWwgSEFMIHN0YXR1cworICAqLwordWludDMyX3QgU0RNTUNfQ21kU2VuZEVYVENTRChTRElPX1R5cGVEZWYgKlNESU94LCB1aW50MzJfdCBBcmd1bWVudCkKK3sKKyAgU0RJT19DbWRJbml0VHlwZURlZiAgc2RtbWNfY21kaW5pdDsKKyAgdWludDMyX3QgZXJyb3JzdGF0ZTsKKworICAvKiBTZW5kIENNRDkgU0VORF9DU0QgKi8KKyAgc2RtbWNfY21kaW5pdC5Bcmd1bWVudCAgICAgICAgID0gQXJndW1lbnQ7CisgIHNkbW1jX2NtZGluaXQuQ21kSW5kZXggICAgICAgICA9IFNETU1DX0NNRF9IU19TRU5EX0VYVF9DU0Q7CisgIHNkbW1jX2NtZGluaXQuUmVzcG9uc2UgICAgICAgICA9IFNESU9fUkVTUE9OU0VfU0hPUlQ7CisgIHNkbW1jX2NtZGluaXQuV2FpdEZvckludGVycnVwdCA9IFNESU9fV0FJVF9OTzsKKyAgc2RtbWNfY21kaW5pdC5DUFNNICAgICAgICAgICAgID0gU0RJT19DUFNNX0VOQUJMRTsKKyAgKHZvaWQpU0RJT19TZW5kQ29tbWFuZChTRElPeCwgJnNkbW1jX2NtZGluaXQpOworCisgIC8qIENoZWNrIGZvciBlcnJvciBjb25kaXRpb25zICovCisgIGVycm9yc3RhdGUgPSBTRE1NQ19HZXRDbWRSZXNwMShTRElPeCwgU0RNTUNfQ01EX0hTX1NFTkRfRVhUX0NTRCxTRElPX0NNRFRJTUVPVVQpOworCisgIHJldHVybiBlcnJvcnN0YXRlOworfQorCisKKy8qKgogICAqIEB9CiAgICovCiAKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmY0eHhfbGxfdGltLmMgYi9TcmMvc3RtMzJmNHh4X2xsX3RpbS5jCmluZGV4IGJlZTkxOWIuLmZiMWNmZTcgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmY0eHhfbGxfdGltLmMKKysrIGIvU3JjL3N0bTMyZjR4eF9sbF90aW0uYwpAQCAtMjkwLDcgKzI5MCw3IEBACiAgIFRJTV9Jbml0U3RydWN0LT5Db3VudGVyTW9kZSAgICAgICA9IExMX1RJTV9DT1VOVEVSTU9ERV9VUDsKICAgVElNX0luaXRTdHJ1Y3QtPkF1dG9yZWxvYWQgICAgICAgID0gMHhGRkZGRkZGRlU7CiAgIFRJTV9Jbml0U3RydWN0LT5DbG9ja0RpdmlzaW9uICAgICA9IExMX1RJTV9DTE9DS0RJVklTSU9OX0RJVjE7Ci0gIFRJTV9Jbml0U3RydWN0LT5SZXBldGl0aW9uQ291bnRlciA9ICh1aW50OF90KTB4MDA7CisgIFRJTV9Jbml0U3RydWN0LT5SZXBldGl0aW9uQ291bnRlciA9IDB4MDAwMDAwMDBVOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmY0eHhfbGxfdXNhcnQuYyBiL1NyYy9zdG0zMmY0eHhfbGxfdXNhcnQuYwppbmRleCAxYzNkZDBjLi5kNDdlOTljIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmNHh4X2xsX3VzYXJ0LmMKKysrIGIvU3JjL3N0bTMyZjR4eF9sbF91c2FydC5jCkBAIC02Myw5ICs2Myw2IEBACiAvKiBfX1ZBTFVFX18gSW4gY2FzZSBvZiBvdmVyc2FtcGxpbmcgYnkgMTYgYW5kIDgsIEJSUiBjb250ZW50IG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDE2ZC4gKi8KICNkZWZpbmUgSVNfTExfVVNBUlRfQlJSX01JTihfX1ZBTFVFX18pICgoX19WQUxVRV9fKSA+PSAxNlUpCiAKLS8qIF9fVkFMVUVfXyBCUlIgY29udGVudCBtdXN0IGJlIGxvd2VyIHRoYW4gb3IgZXF1YWwgdG8gMHhGRkZGLiAqLwotI2RlZmluZSBJU19MTF9VU0FSVF9CUlJfTUFYKF9fVkFMVUVfXykgKChfX1ZBTFVFX18pIDw9IDB4MDAwMEZGRkZVKQotCiAjZGVmaW5lIElTX0xMX1VTQVJUX0RJUkVDVElPTihfX1ZBTFVFX18pICgoKF9fVkFMVUVfXykgPT0gTExfVVNBUlRfRElSRUNUSU9OX05PTkUpIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9VU0FSVF9ESVJFQ1RJT05fUlgpIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9VU0FSVF9ESVJFQ1RJT05fVFgpIFwKQEAgLTM3NSw5ICszNzIsNiBAQAogCiAgICAgICAvKiBDaGVjayBCUlIgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDE2ZCAqLwogICAgICAgYXNzZXJ0X3BhcmFtKElTX0xMX1VTQVJUX0JSUl9NSU4oVVNBUlR4LT5CUlIpKTsKLQotICAgICAgLyogQ2hlY2sgQlJSIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAxNmQgKi8KLSAgICAgIGFzc2VydF9wYXJhbShJU19MTF9VU0FSVF9CUlJfTUFYKFVTQVJUeC0+QlJSKSk7CiAgICAgfQogICB9CiAgIC8qIEVuZGlmICg9PiBVU0FSVCBub3QgaW4gRGlzYWJsZWQgc3RhdGUgPT4gcmV0dXJuIEVSUk9SKSAqLwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjR4eF9sbF91c2IuYyBiL1NyYy9zdG0zMmY0eHhfbGxfdXNiLmMKaW5kZXggZGE4ZGE0YS4uNzhkZjM3YSAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZjR4eF9sbF91c2IuYworKysgYi9TcmMvc3RtMzJmNHh4X2xsX3VzYi5jCkBAIC01MTMsOCArNTEzLDggQEAKICAgKiBAcGFyYW0gIFVTQnggIFNlbGVjdGVkIGRldmljZQogICAqIEByZXR2YWwgc3BlZWQgIGRldmljZSBzcGVlZAogICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlc2UgdmFsdWVzOgotICAqICAgICAgICAgICAgQGFyZyBQQ0RfU1BFRURfSElHSDogSGlnaCBzcGVlZCBtb2RlCi0gICogICAgICAgICAgICBAYXJnIFBDRF9TUEVFRF9GVUxMOiBGdWxsIHNwZWVkIG1vZGUKKyAgKiAgICAgICAgICAgIEBhcmcgVVNCRF9IU19TUEVFRDogSGlnaCBzcGVlZCBtb2RlCisgICogICAgICAgICAgICBAYXJnIFVTQkRfRlNfU1BFRUQ6IEZ1bGwgc3BlZWQgbW9kZQogICAqLwogdWludDhfdCBVU0JfR2V0RGV2U3BlZWQoVVNCX09UR19HbG9iYWxUeXBlRGVmICpVU0J4KQogewpAQCAtMTU4Niw3ICsxNTg2LDcgQEAKICAgKiAgICAgICAgICAgIEBhcmcgRVBfVFlQRV9CVUxLOiBCdWxrIHR5cGUKICAgKiAgICAgICAgICAgIEBhcmcgRVBfVFlQRV9JTlRSOiBJbnRlcnJ1cHQgdHlwZQogICAqIEBwYXJhbSAgbXBzICBNYXggUGFja2V0IFNpemUKLSAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBmcm9tIDAgdG8zMksKKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBmcm9tIDAgdG8gMzJLCiAgICogQHJldHZhbCBIQUwgc3RhdGUKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIFVTQl9IQ19Jbml0KFVTQl9PVEdfR2xvYmFsVHlwZURlZiAqVVNCeCwgdWludDhfdCBjaF9udW0sCkBAIC0xNTk2LDYgKzE1OTYsNyBAQAogICBIQUxfU3RhdHVzVHlwZURlZiByZXQgPSBIQUxfT0s7CiAgIHVpbnQzMl90IFVTQnhfQkFTRSA9ICh1aW50MzJfdClVU0J4OwogICB1aW50MzJfdCBIQ2NoYXJFcERpciwgSENjaGFyTG93U3BlZWQ7CisgIHVpbnQzMl90IEhvc3RDb3JlU3BlZWQ7CiAKICAgLyogQ2xlYXIgb2xkIGludGVycnVwdCBjb25kaXRpb25zIGZvciB0aGlzIGhvc3QgY2hhbm5lbC4gKi8KICAgVVNCeF9IQygodWludDMyX3QpY2hfbnVtKS0+SENJTlQgPSAweEZGRkZGRkZGVTsKQEAgLTE2MjAsNyArMTYyMSw4IEBACiAgICAgICB7CiAgICAgICAgIGlmICgoVVNCeC0+Q0lEICYgKDB4MVUgPDwgOCkpICE9IDBVKQogICAgICAgICB7Ci0gICAgICAgICAgVVNCeF9IQygodWludDMyX3QpY2hfbnVtKS0+SENJTlRNU0sgfD0gKFVTQl9PVEdfSENJTlRNU0tfTllFVCB8IFVTQl9PVEdfSENJTlRNU0tfQUNLTSk7CisgICAgICAgICAgVVNCeF9IQygodWludDMyX3QpY2hfbnVtKS0+SENJTlRNU0sgfD0gVVNCX09UR19IQ0lOVE1TS19OWUVUIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVU0JfT1RHX0hDSU5UTVNLX0FDS007CiAgICAgICAgIH0KICAgICAgIH0KICAgICAgIGJyZWFrOwpAQCAtMTY3NCw3ICsxNjc2LDEwIEBACiAgICAgSENjaGFyRXBEaXIgPSAwVTsKICAgfQogCi0gIGlmIChzcGVlZCA9PSBIUFJUMF9QUlRTUERfTE9XX1NQRUVEKQorICBIb3N0Q29yZVNwZWVkID0gVVNCX0dldEhvc3RTcGVlZChVU0J4KTsKKworICAvKiBMUyBkZXZpY2UgcGx1Z2dlZCB0byBIVUIgKi8KKyAgaWYgKChzcGVlZCA9PSBIUFJUMF9QUlRTUERfTE9XX1NQRUVEKSAmJiAoSG9zdENvcmVTcGVlZCAhPSBIUFJUMF9QUlRTUERfTE9XX1NQRUVEKSkKICAgewogICAgIEhDY2hhckxvd1NwZWVkID0gKDB4MVUgPDwgMTcpICYgVVNCX09UR19IQ0NIQVJfTFNERVY7CiAgIH0KQEAgLTE3MTAsNyArMTcxNSw3IEBACiB7CiAgIHVpbnQzMl90IFVTQnhfQkFTRSA9ICh1aW50MzJfdClVU0J4OwogICB1aW50MzJfdCBjaF9udW0gPSAodWludDMyX3QpaGMtPmNoX251bTsKLSAgc3RhdGljIF9fSU8gdWludDMyX3QgdG1wcmVnID0gMFU7CisgIF9fSU8gdWludDMyX3QgdG1wcmVnOwogICB1aW50OF90ICBpc19vZGRmcmFtZTsKICAgdWludDE2X3QgbGVuX3dvcmRzOwogICB1aW50MTZfdCBudW1fcGFja2V0czsKQEAgLTE3MTgsMjAgKzE3MjMsMjAgQEAKIAogICBpZiAoKChVU0J4LT5DSUQgJiAoMHgxVSA8PCA4KSkgIT0gMFUpICYmIChoYy0+c3BlZWQgPT0gVVNCSF9IU19TUEVFRCkpCiAgIHsKKyAgICAvKiBpbiBETUEgbW9kZSBob3N0IENvcmUgYXV0b21hdGljYWxseSBpc3N1ZXMgcGluZyAgaW4gY2FzZSBvZiBOWUVUL05BSyAqLworICAgIGlmICgoZG1hID09IDFVKSAmJiAoKGhjLT5lcF90eXBlID09IEVQX1RZUEVfQ1RSTCkgfHwgKGhjLT5lcF90eXBlID09IEVQX1RZUEVfQlVMSykpKQorICAgIHsKKyAgICAgIFVTQnhfSEMoKHVpbnQzMl90KWNoX251bSktPkhDSU5UTVNLICY9IH4oVVNCX09UR19IQ0lOVE1TS19OWUVUIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVNCX09UR19IQ0lOVE1TS19BQ0tNIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVNCX09UR19IQ0lOVE1TS19OQUtNKTsKKyAgICB9CisKICAgICBpZiAoKGRtYSA9PSAwVSkgJiYgKGhjLT5kb19waW5nID09IDFVKSkKICAgICB7CiAgICAgICAodm9pZClVU0JfRG9QaW5nKFVTQngsIGhjLT5jaF9udW0pOwogICAgICAgcmV0dXJuIEhBTF9PSzsKICAgICB9Ci0gICAgZWxzZSBpZiAoZG1hID09IDFVKQotICAgIHsKLSAgICAgIFVTQnhfSEMoY2hfbnVtKS0+SENJTlRNU0sgJj0gfihVU0JfT1RHX0hDSU5UTVNLX05ZRVQgfCBVU0JfT1RHX0hDSU5UTVNLX0FDS00pOwotICAgICAgaGMtPmRvX3BpbmcgPSAwVTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIC8qIC4uLiAqLwotICAgIH0KKwogICB9CiAKICAgLyogQ29tcHV0ZSB0aGUgZXhwZWN0ZWQgbnVtYmVyIG9mIHBhY2tldHMgYXNzb2NpYXRlZCB0byB0aGUgdHJhbnNmZXIgKi8KQEAgLTE3NDIsMjAgKzE3NDcsMjkgQEAKICAgICBpZiAobnVtX3BhY2tldHMgPiBtYXhfaGNfcGt0X2NvdW50KQogICAgIHsKICAgICAgIG51bV9wYWNrZXRzID0gbWF4X2hjX3BrdF9jb3VudDsKLSAgICAgIGhjLT54ZmVyX2xlbiA9ICh1aW50MzJfdCludW1fcGFja2V0cyAqIGhjLT5tYXhfcGFja2V0OworICAgICAgaGMtPlhmZXJTaXplID0gKHVpbnQzMl90KW51bV9wYWNrZXRzICogaGMtPm1heF9wYWNrZXQ7CiAgICAgfQogICB9CiAgIGVsc2UKICAgewogICAgIG51bV9wYWNrZXRzID0gMVU7CiAgIH0KKworICAvKgorICAgKiBGb3IgSU4gY2hhbm5lbCBIQ1RTSVouWGZlclNpemUgaXMgZXhwZWN0ZWQgdG8gYmUgYW4gaW50ZWdlciBtdWx0aXBsZSBvZgorICAgKiBtYXhfcGFja2V0IHNpemUuCisgICAqLwogICBpZiAoaGMtPmVwX2lzX2luICE9IDBVKQogICB7Ci0gICAgaGMtPnhmZXJfbGVuID0gKHVpbnQzMl90KW51bV9wYWNrZXRzICogaGMtPm1heF9wYWNrZXQ7CisgICAgaGMtPlhmZXJTaXplID0gKHVpbnQzMl90KW51bV9wYWNrZXRzICogaGMtPm1heF9wYWNrZXQ7CisgIH0KKyAgZWxzZQorICB7CisgICAgaGMtPlhmZXJTaXplID0gaGMtPnhmZXJfbGVuOwogICB9CiAKICAgLyogSW5pdGlhbGl6ZSB0aGUgSENUU0labiByZWdpc3RlciAqLwotICBVU0J4X0hDKGNoX251bSktPkhDVFNJWiA9IChoYy0+eGZlcl9sZW4gJiBVU0JfT1RHX0hDVFNJWl9YRlJTSVopIHwKKyAgVVNCeF9IQyhjaF9udW0pLT5IQ1RTSVogPSAoaGMtPlhmZXJTaXplICYgVVNCX09UR19IQ1RTSVpfWEZSU0laKSB8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpbnVtX3BhY2tldHMgPDwgMTkpICYgVVNCX09UR19IQ1RTSVpfUEtUQ05UKSB8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpaGMtPmRhdGFfcGlkIDw8IDI5KSAmIFVTQl9PVEdfSENUU0laX0RQSUQpOwogCkBAIC0xODU2LDI4ICsxODcwLDM4IEBACiAgIHVpbnQzMl90IGhjbnVtID0gKHVpbnQzMl90KWhjX251bTsKICAgdWludDMyX3QgY291bnQgPSAwVTsKICAgdWludDMyX3QgSGNFcFR5cGUgPSAoVVNCeF9IQyhoY251bSktPkhDQ0hBUiAmIFVTQl9PVEdfSENDSEFSX0VQVFlQKSA+PiAxODsKKyAgdWludDMyX3QgQ2hhbm5lbEVuYSA9IChVU0J4X0hDKGhjbnVtKS0+SENDSEFSICYgVVNCX09UR19IQ0NIQVJfQ0hFTkEpID4+IDMxOworCisgIGlmICgoKFVTQngtPkdBSEJDRkcgJiBVU0JfT1RHX0dBSEJDRkdfRE1BRU4pID09IFVTQl9PVEdfR0FIQkNGR19ETUFFTikgJiYKKyAgICAgIChDaGFubmVsRW5hID09IDBVKSkKKyAgeworICAgIHJldHVybiBIQUxfT0s7CisgIH0KIAogICAvKiBDaGVjayBmb3Igc3BhY2UgaW4gdGhlIHJlcXVlc3QgcXVldWUgdG8gaXNzdWUgdGhlIGhhbHQuICovCiAgIGlmICgoSGNFcFR5cGUgPT0gSENDSEFSX0NUUkwpIHx8IChIY0VwVHlwZSA9PSBIQ0NIQVJfQlVMSykpCiAgIHsKICAgICBVU0J4X0hDKGhjbnVtKS0+SENDSEFSIHw9IFVTQl9PVEdfSENDSEFSX0NIRElTOwogCi0gICAgaWYgKChVU0J4LT5ITlBUWFNUUyAmICgweEZGVSA8PCAxNikpID09IDBVKQorICAgIGlmICgoVVNCeC0+R0FIQkNGRyAmIFVTQl9PVEdfR0FIQkNGR19ETUFFTikgPT0gMFUpCiAgICAgewotICAgICAgVVNCeF9IQyhoY251bSktPkhDQ0hBUiAmPSB+VVNCX09UR19IQ0NIQVJfQ0hFTkE7Ci0gICAgICBVU0J4X0hDKGhjbnVtKS0+SENDSEFSIHw9IFVTQl9PVEdfSENDSEFSX0NIRU5BOwotICAgICAgVVNCeF9IQyhoY251bSktPkhDQ0hBUiAmPSB+VVNCX09UR19IQ0NIQVJfRVBESVI7Ci0gICAgICBkbworICAgICAgaWYgKChVU0J4LT5ITlBUWFNUUyAmICgweEZGVSA8PCAxNikpID09IDBVKQogICAgICAgewotICAgICAgICBpZiAoKytjb3VudCA+IDEwMDBVKQorICAgICAgICBVU0J4X0hDKGhjbnVtKS0+SENDSEFSICY9IH5VU0JfT1RHX0hDQ0hBUl9DSEVOQTsKKyAgICAgICAgVVNCeF9IQyhoY251bSktPkhDQ0hBUiB8PSBVU0JfT1RHX0hDQ0hBUl9DSEVOQTsKKyAgICAgICAgVVNCeF9IQyhoY251bSktPkhDQ0hBUiAmPSB+VVNCX09UR19IQ0NIQVJfRVBESVI7CisgICAgICAgIGRvCiAgICAgICAgIHsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgfSB3aGlsZSAoKFVTQnhfSEMoaGNudW0pLT5IQ0NIQVIgJiBVU0JfT1RHX0hDQ0hBUl9DSEVOQSkgPT0gVVNCX09UR19IQ0NIQVJfQ0hFTkEpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgVVNCeF9IQyhoY251bSktPkhDQ0hBUiB8PSBVU0JfT1RHX0hDQ0hBUl9DSEVOQTsKKyAgICAgICAgICBpZiAoKytjb3VudCA+IDEwMDBVKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAgfSB3aGlsZSAoKFVTQnhfSEMoaGNudW0pLT5IQ0NIQVIgJiBVU0JfT1RHX0hDQ0hBUl9DSEVOQSkgPT0gVVNCX09UR19IQ0NIQVJfQ0hFTkEpOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICBVU0J4X0hDKGhjbnVtKS0+SENDSEFSIHw9IFVTQl9PVEdfSENDSEFSX0NIRU5BOworICAgICAgfQogICAgIH0KICAgfQogICBlbHNlCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmNHh4X2xsX3V0aWxzLmMgYi9TcmMvc3RtMzJmNHh4X2xsX3V0aWxzLmMKaW5kZXggZWYwNWNmZC4uOTZmNjUyNyAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZjR4eF9sbF91dGlscy5jCisrKyBiL1NyYy9zdG0zMmY0eHhfbGxfdXRpbHMuYwpAQCAtMjMyLDcgKzIzMiw2IEBACiAgICovCiBzdGF0aWMgdWludDMyX3QgICAgVVRJTFNfR2V0UExMT3V0cHV0RnJlcXVlbmN5KHVpbnQzMl90IFBMTF9JbnB1dEZyZXF1ZW5jeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTExfVVRJTFNfUExMSW5pdFR5cGVEZWYgKlVUSUxTX1BMTEluaXRTdHJ1Y3QpOwotc3RhdGljIEVycm9yU3RhdHVzIFVUSUxTX1NldEZsYXNoTGF0ZW5jeSh1aW50MzJfdCBIQ0xLX0ZyZXF1ZW5jeSk7CiBzdGF0aWMgRXJyb3JTdGF0dXMgVVRJTFNfRW5hYmxlUExMQW5kU3dpdGNoU3lzdGVtKHVpbnQzMl90IFNZU0NMS19GcmVxdWVuY3ksIExMX1VUSUxTX0Nsa0luaXRUeXBlRGVmICpVVElMU19DbGtJbml0U3RydWN0KTsKIHN0YXRpYyBFcnJvclN0YXR1cyBVVElMU19QTExfSXNCdXN5KHZvaWQpOwogLyoqCkBAIC0zMjksNiArMzI4LDE0NCBAQAogfQogCiAvKioKKyAgKiBAYnJpZWYgIFVwZGF0ZSBudW1iZXIgb2YgRmxhc2ggd2FpdCBzdGF0ZXMgaW4gbGluZSB3aXRoIG5ldyBmcmVxdWVuY3kgYW5kIGN1cnJlbnQKKyAgICAgICAgICAgIHZvbHRhZ2UgcmFuZ2UuCisgICogQG5vdGUgICBUaGlzIEZ1bmN0aW9uIHN1cHBvcnQgT05MWSBkZXZpY2VzIHdpdGggc3VwcGx5IHZvbHRhZ2UgKHZvbHRhZ2UgcmFuZ2UpIGJldHdlZW4gMi43ViBhbmQgMy42VgorICAqIEBwYXJhbSAgSENMS19GcmVxdWVuY3kgIEhDTEsgZnJlcXVlbmN5CisgICogQHJldHZhbCBBbiBFcnJvclN0YXR1cyBlbnVtZXJhdGlvbiB2YWx1ZToKKyAgKiAgICAgICAgICAtIFNVQ0NFU1M6IExhdGVuY3kgaGFzIGJlZW4gbW9kaWZpZWQKKyAgKiAgICAgICAgICAtIEVSUk9SOiBMYXRlbmN5IGNhbm5vdCBiZSBtb2RpZmllZAorICAqLworRXJyb3JTdGF0dXMgTExfU2V0Rmxhc2hMYXRlbmN5KHVpbnQzMl90IEhDTEtfRnJlcXVlbmN5KQoreworICB1aW50MzJfdCB0aW1lb3V0OworICB1aW50MzJfdCBnZXRsYXRlbmN5OworICB1aW50MzJfdCBsYXRlbmN5ID0gTExfRkxBU0hfTEFURU5DWV8wOyAgLyogZGVmYXVsdCB2YWx1ZSAwV1MgKi8KKyAgRXJyb3JTdGF0dXMgc3RhdHVzID0gU1VDQ0VTUzsKKworCisgIC8qIEZyZXF1ZW5jeSBjYW5ub3QgYmUgZXF1YWwgdG8gMCAqLworICBpZihIQ0xLX0ZyZXF1ZW5jeSA9PSAwVSkKKyAgeworICAgIHN0YXR1cyA9IEVSUk9SOworICB9CisgIGVsc2UKKyAgeworICAgIGlmKExMX1BXUl9HZXRSZWd1bFZvbHRhZ2VTY2FsaW5nKCkgPT0gTExfUFdSX1JFR1VfVk9MVEFHRV9TQ0FMRTEpCisgICAgeworI2lmIGRlZmluZWQgKFVUSUxTX1NDQUxFMV9MQVRFTkNZNV9GUkVRKQorICAgICAgaWYoKEhDTEtfRnJlcXVlbmN5ID4gVVRJTFNfU0NBTEUxX0xBVEVOQ1k1X0ZSRVEpJiYobGF0ZW5jeSA9PSBMTF9GTEFTSF9MQVRFTkNZXzApKQorICAgICAgeworICAgICAgICBsYXRlbmN5ID0gTExfRkxBU0hfTEFURU5DWV81OworICAgICAgfQorI2VuZGlmIC8qVVRJTFNfU0NBTEUxX0xBVEVOQ1k1X0ZSRVEgKi8KKyNpZiBkZWZpbmVkIChVVElMU19TQ0FMRTFfTEFURU5DWTRfRlJFUSkKKyAgICAgIGlmKChIQ0xLX0ZyZXF1ZW5jeSA+IFVUSUxTX1NDQUxFMV9MQVRFTkNZNF9GUkVRKSYmKGxhdGVuY3kgPT0gTExfRkxBU0hfTEFURU5DWV8wKSkKKyAgICAgIHsKKyAgICAgICAgbGF0ZW5jeSA9IExMX0ZMQVNIX0xBVEVOQ1lfNDsKKyAgICAgIH0KKyNlbmRpZiAvKiBVVElMU19TQ0FMRTFfTEFURU5DWTRfRlJFUSAqLworI2lmIGRlZmluZWQgKFVUSUxTX1NDQUxFMV9MQVRFTkNZM19GUkVRKQorICAgICAgaWYoKEhDTEtfRnJlcXVlbmN5ID4gVVRJTFNfU0NBTEUxX0xBVEVOQ1kzX0ZSRVEpJiYobGF0ZW5jeSA9PSBMTF9GTEFTSF9MQVRFTkNZXzApKQorICAgICAgeworICAgICAgICBsYXRlbmN5ID0gTExfRkxBU0hfTEFURU5DWV8zOworICAgICAgfQorI2VuZGlmIC8qIFVUSUxTX1NDQUxFMV9MQVRFTkNZM19GUkVRICovCisjaWYgZGVmaW5lZCAoVVRJTFNfU0NBTEUxX0xBVEVOQ1kyX0ZSRVEpIAorICAgICAgaWYoKEhDTEtfRnJlcXVlbmN5ID4gVVRJTFNfU0NBTEUxX0xBVEVOQ1kyX0ZSRVEpJiYobGF0ZW5jeSA9PSBMTF9GTEFTSF9MQVRFTkNZXzApKQorICAgICAgeworICAgICAgICBsYXRlbmN5ID0gTExfRkxBU0hfTEFURU5DWV8yOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICBpZigoSENMS19GcmVxdWVuY3kgPiBVVElMU19TQ0FMRTFfTEFURU5DWTFfRlJFUSkmJihsYXRlbmN5ID09IExMX0ZMQVNIX0xBVEVOQ1lfMCkpCisgICAgICAgIHsKKyAgICAgICAgICBsYXRlbmN5ID0gTExfRkxBU0hfTEFURU5DWV8xOworICAgICAgICB9CisgICAgICB9CisjZW5kaWYgLyogVVRJTFNfU0NBTEUxX0xBVEVOQ1kyX0ZSRVEgKi8KKyAgICB9CisgICAgaWYoTExfUFdSX0dldFJlZ3VsVm9sdGFnZVNjYWxpbmcoKSA9PSBMTF9QV1JfUkVHVV9WT0xUQUdFX1NDQUxFMikKKyAgICB7CisjaWYgZGVmaW5lZCAoVVRJTFNfU0NBTEUyX0xBVEVOQ1k1X0ZSRVEpCisgICAgICBpZigoSENMS19GcmVxdWVuY3kgPiBVVElMU19TQ0FMRTJfTEFURU5DWTVfRlJFUSkmJihsYXRlbmN5ID09IExMX0ZMQVNIX0xBVEVOQ1lfMCkpCisgICAgICB7CisgICAgICAgIGxhdGVuY3kgPSBMTF9GTEFTSF9MQVRFTkNZXzU7CisgICAgICB9CisjZW5kaWYgLypVVElMU19TQ0FMRTFfTEFURU5DWTVfRlJFUSAqLworI2lmIGRlZmluZWQgKFVUSUxTX1NDQUxFMl9MQVRFTkNZNF9GUkVRKQorICAgICAgaWYoKEhDTEtfRnJlcXVlbmN5ID4gVVRJTFNfU0NBTEUyX0xBVEVOQ1k0X0ZSRVEpJiYobGF0ZW5jeSA9PSBMTF9GTEFTSF9MQVRFTkNZXzApKQorICAgICAgeworICAgICAgICBsYXRlbmN5ID0gTExfRkxBU0hfTEFURU5DWV80OworICAgICAgfQorI2VuZGlmIC8qVVRJTFNfU0NBTEUxX0xBVEVOQ1k0X0ZSRVEgKi8KKyNpZiBkZWZpbmVkIChVVElMU19TQ0FMRTJfTEFURU5DWTNfRlJFUSkKKyAgICAgIGlmKChIQ0xLX0ZyZXF1ZW5jeSA+IFVUSUxTX1NDQUxFMl9MQVRFTkNZM19GUkVRKSYmKGxhdGVuY3kgPT0gTExfRkxBU0hfTEFURU5DWV8wKSkKKyAgICAgIHsKKyAgICAgICAgbGF0ZW5jeSA9IExMX0ZMQVNIX0xBVEVOQ1lfMzsKKyAgICAgIH0KKyNlbmRpZiAvKlVUSUxTX1NDQUxFMV9MQVRFTkNZM19GUkVRICovCisgICAgICBpZigoSENMS19GcmVxdWVuY3kgPiBVVElMU19TQ0FMRTJfTEFURU5DWTJfRlJFUSkmJihsYXRlbmN5ID09IExMX0ZMQVNIX0xBVEVOQ1lfMCkpCisgICAgICB7CisgICAgICAgIGxhdGVuY3kgPSBMTF9GTEFTSF9MQVRFTkNZXzI7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIGlmKChIQ0xLX0ZyZXF1ZW5jeSA+IFVUSUxTX1NDQUxFMl9MQVRFTkNZMV9GUkVRKSYmKGxhdGVuY3kgPT0gTExfRkxBU0hfTEFURU5DWV8wKSkKKyAgICAgICAgeworICAgICAgICAgIGxhdGVuY3kgPSBMTF9GTEFTSF9MQVRFTkNZXzE7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisjaWYgZGVmaW5lZCAoTExfUFdSX1JFR1VfVk9MVEFHRV9TQ0FMRTMpCisgICAgaWYoTExfUFdSX0dldFJlZ3VsVm9sdGFnZVNjYWxpbmcoKSA9PSBMTF9QV1JfUkVHVV9WT0xUQUdFX1NDQUxFMykKKyAgICB7CisjaWYgZGVmaW5lZCAoVVRJTFNfU0NBTEUzX0xBVEVOQ1kzX0ZSRVEpCisgICAgICBpZigoSENMS19GcmVxdWVuY3kgPiBVVElMU19TQ0FMRTNfTEFURU5DWTNfRlJFUSkmJihsYXRlbmN5ID09IExMX0ZMQVNIX0xBVEVOQ1lfMCkpCisgICAgICB7CisgICAgICAgIGxhdGVuY3kgPSBMTF9GTEFTSF9MQVRFTkNZXzM7CisgICAgICB9CisjZW5kaWYgLypVVElMU19TQ0FMRTFfTEFURU5DWTNfRlJFUSAqLworI2lmIGRlZmluZWQgKFVUSUxTX1NDQUxFM19MQVRFTkNZMl9GUkVRKQorICAgICAgaWYoKEhDTEtfRnJlcXVlbmN5ID4gVVRJTFNfU0NBTEUzX0xBVEVOQ1kyX0ZSRVEpJiYobGF0ZW5jeSA9PSBMTF9GTEFTSF9MQVRFTkNZXzApKQorICAgICAgeworICAgICAgICBsYXRlbmN5ID0gTExfRkxBU0hfTEFURU5DWV8yOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICBpZigoSENMS19GcmVxdWVuY3kgPiBVVElMU19TQ0FMRTNfTEFURU5DWTFfRlJFUSkmJihsYXRlbmN5ID09IExMX0ZMQVNIX0xBVEVOQ1lfMCkpCisgICAgICAgIHsKKyAgICAgICAgICBsYXRlbmN5ID0gTExfRkxBU0hfTEFURU5DWV8xOworICAgICAgICB9CisgICAgICB9CisgICAgfQorI2VuZGlmIC8qVVRJTFNfU0NBTEUxX0xBVEVOQ1kyX0ZSRVEgKi8KKyNlbmRpZiAvKiBMTF9QV1JfUkVHVV9WT0xUQUdFX1NDQUxFMyAqLworCisgICAgTExfRkxBU0hfU2V0TGF0ZW5jeShsYXRlbmN5KTsKKyAgICAvKiBDaGVjayB0aGF0IHRoZSBuZXcgbnVtYmVyIG9mIHdhaXQgc3RhdGVzIGlzIHRha2VuIGludG8gYWNjb3VudCB0byBhY2Nlc3MgdGhlIEZsYXNoCisgICAgICAgbWVtb3J5IGJ5IHJlYWRpbmcgdGhlIEZMQVNIX0FDUiByZWdpc3RlciAqLworICAgIHRpbWVvdXQgPSAyOworICAgIGRvCisgICAgeworICAgIC8qIFdhaXQgZm9yIEZsYXNoIGxhdGVuY3kgdG8gYmUgdXBkYXRlZCAqLworICAgIGdldGxhdGVuY3kgPSBMTF9GTEFTSF9HZXRMYXRlbmN5KCk7CisgICAgdGltZW91dC0tOworICAgIH0gd2hpbGUgKChnZXRsYXRlbmN5ICE9IGxhdGVuY3kpICYmICh0aW1lb3V0ID4gMCkpOworCisgICAgaWYoZ2V0bGF0ZW5jeSAhPSBsYXRlbmN5KQorICAgIHsKKyAgICAgIHN0YXR1cyA9IEVSUk9SOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgc3RhdHVzID0gU1VDQ0VTUzsKKyAgICB9CisgIH0KKyAgcmV0dXJuIHN0YXR1czsKK30KKworLyoqCiAgICogQGJyaWVmICBUaGlzIGZ1bmN0aW9uIGNvbmZpZ3VyZXMgc3lzdGVtIGNsb2NrIGF0IG1heGltdW0gZnJlcXVlbmN5IHdpdGggSFNJIGFzIGNsb2NrIHNvdXJjZSBvZiB0aGUgUExMCiAgICogQG5vdGUgICBUaGUgYXBwbGljYXRpb24gbmVlZCB0byBlbnN1cmUgdGhhdCBQTEwgaXMgZGlzYWJsZWQuCiAgICogQG5vdGUgICBGdW5jdGlvbiBpcyBiYXNlZCBvbiB0aGUgZm9sbG93aW5nIGZvcm11bGE6CkBAIC00NjYsMTMxICs2MDMsNiBAQAogICAqIEB7CiAgICovCiAvKioKLSAgKiBAYnJpZWYgIFVwZGF0ZSBudW1iZXIgb2YgRmxhc2ggd2FpdCBzdGF0ZXMgaW4gbGluZSB3aXRoIG5ldyBmcmVxdWVuY3kgYW5kIGN1cnJlbnQKLSAgICAgICAgICAgIHZvbHRhZ2UgcmFuZ2UuCi0gICogQG5vdGUgICBUaGlzIEZ1bmN0aW9uIHN1cHBvcnQgT05MWSBkZXZpY2VzIHdpdGggc3VwcGx5IHZvbHRhZ2UgKHZvbHRhZ2UgcmFuZ2UpIGJldHdlZW4gMi43ViBhbmQgMy42VgotICAqIEBwYXJhbSAgSENMS19GcmVxdWVuY3kgIEhDTEsgZnJlcXVlbmN5Ci0gICogQHJldHZhbCBBbiBFcnJvclN0YXR1cyBlbnVtZXJhdGlvbiB2YWx1ZToKLSAgKiAgICAgICAgICAtIFNVQ0NFU1M6IExhdGVuY3kgaGFzIGJlZW4gbW9kaWZpZWQKLSAgKiAgICAgICAgICAtIEVSUk9SOiBMYXRlbmN5IGNhbm5vdCBiZSBtb2RpZmllZAotICAqLwotc3RhdGljIEVycm9yU3RhdHVzIFVUSUxTX1NldEZsYXNoTGF0ZW5jeSh1aW50MzJfdCBIQ0xLX0ZyZXF1ZW5jeSkKLXsKLSAgRXJyb3JTdGF0dXMgc3RhdHVzID0gU1VDQ0VTUzsKLQotICB1aW50MzJfdCBsYXRlbmN5ID0gTExfRkxBU0hfTEFURU5DWV8wOyAgLyogZGVmYXVsdCB2YWx1ZSAwV1MgKi8KLQotICAvKiBGcmVxdWVuY3kgY2Fubm90IGJlIGVxdWFsIHRvIDAgKi8KLSAgaWYoSENMS19GcmVxdWVuY3kgPT0gMFUpCi0gIHsKLSAgICBzdGF0dXMgPSBFUlJPUjsKLSAgfQotICBlbHNlCi0gIHsKLSAgICBpZihMTF9QV1JfR2V0UmVndWxWb2x0YWdlU2NhbGluZygpID09IExMX1BXUl9SRUdVX1ZPTFRBR0VfU0NBTEUxKQotICAgIHsKLSNpZiBkZWZpbmVkIChVVElMU19TQ0FMRTFfTEFURU5DWTVfRlJFUSkKLSAgICAgIGlmKChIQ0xLX0ZyZXF1ZW5jeSA+IFVUSUxTX1NDQUxFMV9MQVRFTkNZNV9GUkVRKSYmKGxhdGVuY3kgPT0gTExfRkxBU0hfTEFURU5DWV8wKSkKLSAgICAgIHsKLSAgICAgICAgbGF0ZW5jeSA9IExMX0ZMQVNIX0xBVEVOQ1lfNTsKLSAgICAgIH0KLSNlbmRpZiAvKlVUSUxTX1NDQUxFMV9MQVRFTkNZNV9GUkVRICovCi0jaWYgZGVmaW5lZCAoVVRJTFNfU0NBTEUxX0xBVEVOQ1k0X0ZSRVEpCi0gICAgICBpZigoSENMS19GcmVxdWVuY3kgPiBVVElMU19TQ0FMRTFfTEFURU5DWTRfRlJFUSkmJihsYXRlbmN5ID09IExMX0ZMQVNIX0xBVEVOQ1lfMCkpCi0gICAgICB7Ci0gICAgICAgIGxhdGVuY3kgPSBMTF9GTEFTSF9MQVRFTkNZXzQ7Ci0gICAgICB9Ci0jZW5kaWYgLyogVVRJTFNfU0NBTEUxX0xBVEVOQ1k0X0ZSRVEgKi8KLSNpZiBkZWZpbmVkIChVVElMU19TQ0FMRTFfTEFURU5DWTNfRlJFUSkKLSAgICAgIGlmKChIQ0xLX0ZyZXF1ZW5jeSA+IFVUSUxTX1NDQUxFMV9MQVRFTkNZM19GUkVRKSYmKGxhdGVuY3kgPT0gTExfRkxBU0hfTEFURU5DWV8wKSkKLSAgICAgIHsKLSAgICAgICAgbGF0ZW5jeSA9IExMX0ZMQVNIX0xBVEVOQ1lfMzsKLSAgICAgIH0KLSNlbmRpZiAvKiBVVElMU19TQ0FMRTFfTEFURU5DWTNfRlJFUSAqLwotI2lmIGRlZmluZWQgKFVUSUxTX1NDQUxFMV9MQVRFTkNZMl9GUkVRKSAKLSAgICAgIGlmKChIQ0xLX0ZyZXF1ZW5jeSA+IFVUSUxTX1NDQUxFMV9MQVRFTkNZMl9GUkVRKSYmKGxhdGVuY3kgPT0gTExfRkxBU0hfTEFURU5DWV8wKSkKLSAgICAgIHsKLSAgICAgICAgbGF0ZW5jeSA9IExMX0ZMQVNIX0xBVEVOQ1lfMjsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgaWYoKEhDTEtfRnJlcXVlbmN5ID4gVVRJTFNfU0NBTEUxX0xBVEVOQ1kxX0ZSRVEpJiYobGF0ZW5jeSA9PSBMTF9GTEFTSF9MQVRFTkNZXzApKQotICAgICAgICB7Ci0gICAgICAgICAgbGF0ZW5jeSA9IExMX0ZMQVNIX0xBVEVOQ1lfMTsKLSAgICAgICAgfQotICAgICAgfQotI2VuZGlmIC8qIFVUSUxTX1NDQUxFMV9MQVRFTkNZMl9GUkVRICovCi0gICAgfQotICAgIGlmKExMX1BXUl9HZXRSZWd1bFZvbHRhZ2VTY2FsaW5nKCkgPT0gTExfUFdSX1JFR1VfVk9MVEFHRV9TQ0FMRTIpCi0gICAgewotI2lmIGRlZmluZWQgKFVUSUxTX1NDQUxFMl9MQVRFTkNZNV9GUkVRKQotICAgICAgaWYoKEhDTEtfRnJlcXVlbmN5ID4gVVRJTFNfU0NBTEUyX0xBVEVOQ1k1X0ZSRVEpJiYobGF0ZW5jeSA9PSBMTF9GTEFTSF9MQVRFTkNZXzApKQotICAgICAgewotICAgICAgICBsYXRlbmN5ID0gTExfRkxBU0hfTEFURU5DWV81OwotICAgICAgfQotI2VuZGlmIC8qVVRJTFNfU0NBTEUxX0xBVEVOQ1k1X0ZSRVEgKi8KLSNpZiBkZWZpbmVkIChVVElMU19TQ0FMRTJfTEFURU5DWTRfRlJFUSkKLSAgICAgIGlmKChIQ0xLX0ZyZXF1ZW5jeSA+IFVUSUxTX1NDQUxFMl9MQVRFTkNZNF9GUkVRKSYmKGxhdGVuY3kgPT0gTExfRkxBU0hfTEFURU5DWV8wKSkKLSAgICAgIHsKLSAgICAgICAgbGF0ZW5jeSA9IExMX0ZMQVNIX0xBVEVOQ1lfNDsKLSAgICAgIH0KLSNlbmRpZiAvKlVUSUxTX1NDQUxFMV9MQVRFTkNZNF9GUkVRICovCi0jaWYgZGVmaW5lZCAoVVRJTFNfU0NBTEUyX0xBVEVOQ1kzX0ZSRVEpCi0gICAgICBpZigoSENMS19GcmVxdWVuY3kgPiBVVElMU19TQ0FMRTJfTEFURU5DWTNfRlJFUSkmJihsYXRlbmN5ID09IExMX0ZMQVNIX0xBVEVOQ1lfMCkpCi0gICAgICB7Ci0gICAgICAgIGxhdGVuY3kgPSBMTF9GTEFTSF9MQVRFTkNZXzM7Ci0gICAgICB9Ci0jZW5kaWYgLypVVElMU19TQ0FMRTFfTEFURU5DWTNfRlJFUSAqLwotICAgICAgaWYoKEhDTEtfRnJlcXVlbmN5ID4gVVRJTFNfU0NBTEUyX0xBVEVOQ1kyX0ZSRVEpJiYobGF0ZW5jeSA9PSBMTF9GTEFTSF9MQVRFTkNZXzApKQotICAgICAgewotICAgICAgICBsYXRlbmN5ID0gTExfRkxBU0hfTEFURU5DWV8yOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBpZigoSENMS19GcmVxdWVuY3kgPiBVVElMU19TQ0FMRTJfTEFURU5DWTFfRlJFUSkmJihsYXRlbmN5ID09IExMX0ZMQVNIX0xBVEVOQ1lfMCkpCi0gICAgICAgIHsKLSAgICAgICAgICBsYXRlbmN5ID0gTExfRkxBU0hfTEFURU5DWV8xOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotI2lmIGRlZmluZWQgKExMX1BXUl9SRUdVX1ZPTFRBR0VfU0NBTEUzKQotICAgIGlmKExMX1BXUl9HZXRSZWd1bFZvbHRhZ2VTY2FsaW5nKCkgPT0gTExfUFdSX1JFR1VfVk9MVEFHRV9TQ0FMRTMpCi0gICAgewotI2lmIGRlZmluZWQgKFVUSUxTX1NDQUxFM19MQVRFTkNZM19GUkVRKQotICAgICAgaWYoKEhDTEtfRnJlcXVlbmN5ID4gVVRJTFNfU0NBTEUzX0xBVEVOQ1kzX0ZSRVEpJiYobGF0ZW5jeSA9PSBMTF9GTEFTSF9MQVRFTkNZXzApKQotICAgICAgewotICAgICAgICBsYXRlbmN5ID0gTExfRkxBU0hfTEFURU5DWV8zOwotICAgICAgfQotI2VuZGlmIC8qVVRJTFNfU0NBTEUxX0xBVEVOQ1kzX0ZSRVEgKi8KLSNpZiBkZWZpbmVkIChVVElMU19TQ0FMRTNfTEFURU5DWTJfRlJFUSkKLSAgICAgIGlmKChIQ0xLX0ZyZXF1ZW5jeSA+IFVUSUxTX1NDQUxFM19MQVRFTkNZMl9GUkVRKSYmKGxhdGVuY3kgPT0gTExfRkxBU0hfTEFURU5DWV8wKSkKLSAgICAgIHsKLSAgICAgICAgbGF0ZW5jeSA9IExMX0ZMQVNIX0xBVEVOQ1lfMjsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgaWYoKEhDTEtfRnJlcXVlbmN5ID4gVVRJTFNfU0NBTEUzX0xBVEVOQ1kxX0ZSRVEpJiYobGF0ZW5jeSA9PSBMTF9GTEFTSF9MQVRFTkNZXzApKQotICAgICAgICB7Ci0gICAgICAgICAgbGF0ZW5jeSA9IExMX0ZMQVNIX0xBVEVOQ1lfMTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSNlbmRpZiAvKlVUSUxTX1NDQUxFMV9MQVRFTkNZMl9GUkVRICovCi0jZW5kaWYgLyogTExfUFdSX1JFR1VfVk9MVEFHRV9TQ0FMRTMgKi8KLQotICAgIExMX0ZMQVNIX1NldExhdGVuY3kobGF0ZW5jeSk7Ci0KLSAgICAvKiBDaGVjayB0aGF0IHRoZSBuZXcgbnVtYmVyIG9mIHdhaXQgc3RhdGVzIGlzIHRha2VuIGludG8gYWNjb3VudCB0byBhY2Nlc3MgdGhlIEZsYXNoCi0gICAgICAgbWVtb3J5IGJ5IHJlYWRpbmcgdGhlIEZMQVNIX0FDUiByZWdpc3RlciAqLwotICAgIGlmKExMX0ZMQVNIX0dldExhdGVuY3koKSAhPSBsYXRlbmN5KQotICAgIHsKLSAgICAgIHN0YXR1cyA9IEVSUk9SOwotICAgIH0KLSAgfQotICByZXR1cm4gc3RhdHVzOwotfQotCi0vKioKICAgKiBAYnJpZWYgIEZ1bmN0aW9uIHRvIGNoZWNrIHRoYXQgUExMIGNhbiBiZSBtb2RpZmllZAogICAqIEBwYXJhbSAgUExMX0lucHV0RnJlcXVlbmN5ICBQTEwgaW5wdXQgZnJlcXVlbmN5IChpbiBIeikKICAgKiBAcGFyYW0gIFVUSUxTX1BMTEluaXRTdHJ1Y3QgcG9pbnRlciB0byBhIEByZWYgTExfVVRJTFNfUExMSW5pdFR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKQEAgLTY4Myw3ICs2OTUsNyBAQAogICBpZihTeXN0ZW1Db3JlQ2xvY2sgPCBoY2xrX2ZyZXF1ZW5jeSkKICAgewogICAgIC8qIFNldCBGTEFTSCBsYXRlbmN5IHRvIGhpZ2hlc3QgbGF0ZW5jeSAqLwotICAgIHN0YXR1cyA9IFVUSUxTX1NldEZsYXNoTGF0ZW5jeShoY2xrX2ZyZXF1ZW5jeSk7CisgICAgc3RhdHVzID0gTExfU2V0Rmxhc2hMYXRlbmN5KGhjbGtfZnJlcXVlbmN5KTsKICAgfQogCiAgIC8qIFVwZGF0ZSBzeXN0ZW0gY2xvY2sgY29uZmlndXJhdGlvbiAqLwpAQCAtNzEzLDcgKzcyNSw3IEBACiAgIGlmKFN5c3RlbUNvcmVDbG9jayA+IGhjbGtfZnJlcXVlbmN5KQogICB7CiAgICAgLyogU2V0IEZMQVNIIGxhdGVuY3kgdG8gbG93ZXN0IGxhdGVuY3kgKi8KLSAgICBzdGF0dXMgPSBVVElMU19TZXRGbGFzaExhdGVuY3koaGNsa19mcmVxdWVuY3kpOworICAgIHN0YXR1cyA9IExMX1NldEZsYXNoTGF0ZW5jeShoY2xrX2ZyZXF1ZW5jeSk7CiAgIH0KIAogICAvKiBVcGRhdGUgU3lzdGVtQ29yZUNsb2NrIHZhcmlhYmxlICovCg==