ZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL3ZpdmFudGVfZHJtLmggYi9pbmNsdWRlL2RybS92aXZhbnRlX2RybS5oCmluZGV4IDI5YzdmMjcuLmI0NTczNzIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL3ZpdmFudGVfZHJtLmgKKysrIGIvaW5jbHVkZS9kcm0vdml2YW50ZV9kcm0uaApAQCAtMSwxOCArMSwzMCBAQAotLyoKLSAqIENvcHlyaWdodCCpIDIwMTcgVklWQU5URSBDb3Jwb3JhdGlvbgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCi0gKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKLSAqIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCi0gKiB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCi0gKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqICAgIENvcHlyaWdodCAyMDEyIC0gMjAxNyBWaXZhbnRlIENvcnBvcmF0aW9uLCBTYW50YSBDbGFyYSwgQ2FsaWZvcm5pYS4KKyogICAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyoKKyogICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisqICAgIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorKiAgICAnU29mdHdhcmUnKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisqICAgIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyogICAgZGlzdHJpYnV0ZSwgc3ViIGxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworKiAgICBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QKKyogICAgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorKgorKiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZQorKiAgICBuZXh0IHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbAorKiAgICBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisqCisqICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAnQVMgSVMnLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorKiAgICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyogICAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4KKyogICAgSU4gTk8gRVZFTlQgU0hBTEwgVklWQU5URSBBTkQvT1IgSVRTIFNVUFBMSUVSUyBCRSBMSUFCTEUgRk9SIEFOWQorKiAgICBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULAorKiAgICBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRQorKiAgICBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCiAKICNpZm5kZWYgX19WSVZOQVRFX0RSTV9IX18KICNkZWZpbmUgX19WSVZOQVRFX0RSTV9IX18KQEAgLTIzLDIzICszNSwzMyBAQAogZXh0ZXJuICJDIiB7CiAjZW5kaWYKIAorLyogY3JlYXRpb24gZmxhZyBiaXRzLiAqLworI2RlZmluZSBEUk1fVklWX0dFTV9DT05USUdVT1VTICAgICAgMHgwMQorI2RlZmluZSBEUk1fVklWX0dFTV9DQUNIRUQgICAgICAgICAgMHgwMgorI2RlZmluZSBEUk1fVklWX0dFTV9TRUNVUkUgICAgICAgICAgMHgwNAorCiBzdHJ1Y3QgZHJtX3Zpdl9nZW1fY3JlYXRlIHsKLSAgICBfX3U2NCBzaXplOyAgICAgICAgIC8qIGluICovCi0gICAgX191MzIgZmxhZ3M7ICAgICAgICAvKiBpbiAqLwotICAgIF9fdTMyIGhhbmRsZTsgICAgICAgLyogb3V0ICovCisgICAgX191NjQgc2l6ZTsKKyAgICBfX3UzMiBmbGFnczsKKyAgICBfX3UzMiBoYW5kbGU7CiB9OwogCiBzdHJ1Y3QgZHJtX3Zpdl9nZW1fbG9jayB7CiAgICAgX191MzIgaGFuZGxlOwogICAgIF9fdTMyIGNhY2hlYWJsZTsKLSAgICBfX3UzMiBncHVfdmE7Ci0gICAgX191NjQgY3B1X3ZhOworICAgIF9fdTY0IGxvZ2ljYWw7CiB9OwogCiBzdHJ1Y3QgZHJtX3Zpdl9nZW1fdW5sb2NrIHsKICAgICBfX3UzMiBoYW5kbGU7CiB9OwogCisKKyNkZWZpbmUgRFJNX1ZJVl9HRU1fQ0xFQU5fQ0FDSEUgICAgICAgICAweDAxCisjZGVmaW5lIERSTV9WSVZfR0VNX0lOVkFMSURBVEVfQ0FDSEUgICAgMHgwMgorI2RlZmluZSBEUk1fVklWX0dFTV9GTFVTSF9DQUNIRSAgICAgICAgIDB4MDMKKyNkZWZpbmUgRFJNX1ZJVl9HRU1fTUVNT1JZX0JBUlJJRVIgICAgICAweDA0CisKIHN0cnVjdCBkcm1fdml2X2dlbV9jYWNoZSB7CiAgICAgX191MzIgaGFuZGxlOwogICAgIF9fdTMyIG9wOwpAQCAtNDcsMjQgKzY5LDk4IEBACiAgICAgX191NjQgYnl0ZXM7CiB9OwogCi1zdHJ1Y3QgZHJtX3Zpdl9nZW1fZ2V0aW5mbyB7CisKKyNkZWZpbmUgRFJNX1ZJVl9HRU1fUEFSQU1fUE9PTCAgICAgIDB4MDAKKyNkZWZpbmUgRFJNX1ZJVl9HRU1fUEFSQU1fU0laRSAgICAgIDB4MDEKKworc3RydWN0IGRybV92aXZfZ2VtX3F1ZXJ5IHsKICAgICBfX3UzMiBoYW5kbGU7CiAgICAgX191MzIgcGFyYW07CiAgICAgX191NjQgdmFsdWU7CiB9OwogCisKK3N0cnVjdCBkcm1fdml2X2dlbV90aW1lc3RhbXAgeworICAgIF9fdTMyIGhhbmRsZTsKKyAgICAvKiBpbmMgY291bnQsIDAgZm9yIHF1ZXJ5IGN1cnJlbnQuICovCisgICAgX191MzIgaW5jOworICAgIC8qIG91dHB1dCBpbmMnZWQgdGltZXN0YW1wLiAqLworICAgIF9fdTY0IHRpbWVzdGFtcDsKK307CisKKworLyogYmFzaWMgdGlsaW5nIG1vZGUuICovCisjZGVmaW5lIERSTV9WSVZfR0VNX1RJTElOR19MSU5FQVIgICAgICAgMHgwMQorI2RlZmluZSBEUk1fVklWX0dFTV9USUxJTkdfVElMRUQgICAgICAgIDB4MDIKKyNkZWZpbmUgRFJNX1ZJVl9HRU1fVElMSU5HX1NVUEVSVElMRUQgICAweDA0CisjZGVmaW5lIERSTV9WSVZfR0VNX1RJTElOR19NSU5PUlRJTEVEICAgMHgwOAorCisvKiB0aWxpbmcgbW9kZSBtb2RpZmllcnMuICovCisjZGVmaW5lIERSTV9WSVZfR0VNX1RJTElOR19TUExJVCAgICAweDEwCisjZGVmaW5lIERSTV9WSVZfR0VNX1RJTElOR19YX01BSk9SICAweDIwCisjZGVmaW5lIERSTV9WSVZfR0VNX1RJTElOR19ZX01BSk9SICAweDQwCisjZGVmaW5lIERSTV9WSVZfR0VNX1RJTElOR19TV0FQICAgICAweDgwCisKKy8qIHRzIG1vZGUuICovCisjZGVmaW5lIERSTV9WSVZfR0VNX1RTX05PTkUgICAgICAgICAweDAwCisjZGVmaW5lIERSTV9WSVZfR0VNX1RTX0RJU0FCTEVEICAgICAweDAxCisjZGVmaW5lIERSTV9WSVZfR0VNX1RTX05PUk1BTCAgICAgICAweDAyCisjZGVmaW5lIERSTV9WSVZfR0VNX1RTX0NPTVBSRVNTRUQgICAweDAzCisKK3N0cnVjdCBkcm1fdml2X2dlbV9zZXRfdGlsaW5nIHsKKyAgICBfX3UzMiBoYW5kbGU7CisgICAgX191MzIgdGlsaW5nX21vZGU7CisKKyAgICBfX3UzMiB0c19tb2RlOworICAgIF9fdTY0IGNsZWFyX3ZhbHVlOworfTsKKworc3RydWN0IGRybV92aXZfZ2VtX2dldF90aWxpbmcgeworICAgIF9fdTMyIGhhbmRsZTsKKyAgICBfX3UzMiB0aWxpbmdfbW9kZTsKKworICAgIF9fdTMyIHRzX21vZGU7CisgICAgX191NjQgY2xlYXJfdmFsdWU7Cit9OworCisKK3N0cnVjdCBkcm1fdml2X2dlbV9hdHRhY2hfYXV4IHsKKyAgICBfX3UzMiBoYW5kbGU7CisgICAgX191MzIgdHNfaGFuZGxlOworfTsKKworCitzdHJ1Y3QgZHJtX3Zpdl9nZW1fcmVmX25vZGUgeworICAgIF9fdTMyIGhhbmRsZTsKKworICAgIC8qIG91dHB1dC4gKi8KKyAgICBfX3UzMiBub2RlOworICAgIF9fdTMyIHRzX25vZGU7Cit9OworCisKICNkZWZpbmUgRFJNX1ZJVl9HRU1fQ1JFQVRFICAgICAgICAgIDB4MDAKICNkZWZpbmUgRFJNX1ZJVl9HRU1fTE9DSyAgICAgICAgICAgIDB4MDEKICNkZWZpbmUgRFJNX1ZJVl9HRU1fVU5MT0NLICAgICAgICAgIDB4MDIKICNkZWZpbmUgRFJNX1ZJVl9HRU1fQ0FDSEUgICAgICAgICAgIDB4MDMKLSNkZWZpbmUgRFJNX1ZJVl9HRU1fR0VUSU5GTyAgICAgICAgIDB4MDQKLSNkZWZpbmUgRFJNX1ZJVl9OVU1fSU9DVExTICAgICAgICAgIDB4MDUKKyNkZWZpbmUgRFJNX1ZJVl9HRU1fUVVFUlkgICAgICAgICAgIDB4MDQKKyNkZWZpbmUgRFJNX1ZJVl9HRU1fVElNRVNUQU1QICAgICAgIDB4MDUKKyNkZWZpbmUgRFJNX1ZJVl9HRU1fU0VUX1RJTElORyAgICAgIDB4MDYKKyNkZWZpbmUgRFJNX1ZJVl9HRU1fR0VUX1RJTElORyAgICAgIDB4MDcKKyNkZWZpbmUgRFJNX1ZJVl9HRU1fQVRUQUNIX0FVWCAgICAgIDB4MDgKKyNkZWZpbmUgRFJNX1ZJVl9HRU1fUkVGX05PREUgICAgICAgIDB4MDkKKyNkZWZpbmUgRFJNX1ZJVl9OVU1fSU9DVExTICAgICAgICAgIDB4MEEKIAotI2RlZmluZSBEUk1fSU9DVExfVklWX0dFTV9DUkVBVEUgICAgRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9WSVZfR0VNX0NSRUFURSwgICAgIHN0cnVjdCBkcm1fdml2X2dlbV9jcmVhdGUpCi0jZGVmaW5lIERSTV9JT0NUTF9WSVZfR0VNX0xPQ0sgICAgICBEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX1ZJVl9HRU1fTE9DSywgICAgICAgc3RydWN0IGRybV92aXZfZ2VtX2xvY2spCi0jZGVmaW5lIERSTV9JT0NUTF9WSVZfR0VNX1VOTE9DSyAgICBEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX1ZJVl9HRU1fVU5MT0NLLCAgICAgc3RydWN0IGRybV92aXZfZ2VtX3VubG9jaykKLSNkZWZpbmUgRFJNX0lPQ1RMX1ZJVl9HRU1fQ0FDSEUgICAgIERSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fVklWX0dFTV9DQUNIRSwgICAgICBzdHJ1Y3QgZHJtX3Zpdl9nZW1fY2FjaGUpCi0jZGVmaW5lIERSTV9JT0NUTF9WSVZfR0VNX0dFVElORk8gICBEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX1ZJVl9HRU1fR0VUSU5GTywgICAgc3RydWN0IGRybV92aXZfZ2VtX2dldGluZm8pCisjZGVmaW5lIERSTV9JT0NUTF9WSVZfR0VNX0NSRUFURSAgICAgICAgRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9WSVZfR0VNX0NSRUFURSwgICAgIHN0cnVjdCBkcm1fdml2X2dlbV9jcmVhdGUpCisjZGVmaW5lIERSTV9JT0NUTF9WSVZfR0VNX0xPQ0sgICAgICAgICAgRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9WSVZfR0VNX0xPQ0ssICAgICAgIHN0cnVjdCBkcm1fdml2X2dlbV9sb2NrKQorI2RlZmluZSBEUk1fSU9DVExfVklWX0dFTV9VTkxPQ0sgICAgICAgIERSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fVklWX0dFTV9VTkxPQ0ssICAgICBzdHJ1Y3QgZHJtX3Zpdl9nZW1fdW5sb2NrKQorI2RlZmluZSBEUk1fSU9DVExfVklWX0dFTV9DQUNIRSAgICAgICAgIERSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fVklWX0dFTV9DQUNIRSwgICAgICBzdHJ1Y3QgZHJtX3Zpdl9nZW1fY2FjaGUpCisjZGVmaW5lIERSTV9JT0NUTF9WSVZfR0VNX1FVRVJZICAgICAgICAgRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9WSVZfR0VNX1FVRVJZLCAgICAgIHN0cnVjdCBkcm1fdml2X2dlbV9xdWVyeSkKKyNkZWZpbmUgRFJNX0lPQ1RMX1ZJVl9HRU1fVElNRVNUQU1QICAgICBEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX1ZJVl9HRU1fVElNRVNUQU1QLCAgc3RydWN0IGRybV92aXZfZ2VtX3RpbWVzdGFtcCkKKyNkZWZpbmUgRFJNX0lPQ1RMX1ZJVl9HRU1fU0VUX1RJTElORyAgICBEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX1ZJVl9HRU1fU0VUX1RJTElORywgc3RydWN0IGRybV92aXZfZ2VtX3NldF90aWxpbmcpCisjZGVmaW5lIERSTV9JT0NUTF9WSVZfR0VNX0dFVF9USUxJTkcgICAgRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9WSVZfR0VNX0dFVF9USUxJTkcsIHN0cnVjdCBkcm1fdml2X2dlbV9nZXRfdGlsaW5nKQorI2RlZmluZSBEUk1fSU9DVExfVklWX0dFTV9BVFRBQ0hfQVVYICAgIERSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fVklWX0dFTV9BVFRBQ0hfQVVYLCBzdHJ1Y3QgZHJtX3Zpdl9nZW1fYXR0YWNoX2F1eCkKKyNkZWZpbmUgRFJNX0lPQ1RMX1ZJVl9HRU1fUkVGX05PREUgICAgICBEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX1ZJVl9HRU1fUkVGX05PREUsICAgc3RydWN0IGRybV92aXZfZ2VtX3JlZl9ub2RlKQogCiAjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKIH0KZGlmZiAtLWdpdCBhL3Rlc3RzL3ZpdmFudGUvTWFrZWZpbGUuYW0gYi90ZXN0cy92aXZhbnRlL01ha2VmaWxlLmFtCmluZGV4IDhhMGRlZGIuLjY5M2E5MjIgMTAwNjQ0Ci0tLSBhL3Rlc3RzL3ZpdmFudGUvTWFrZWZpbGUuYW0KKysrIGIvdGVzdHMvdml2YW50ZS9NYWtlZmlsZS5hbQpAQCAtMSwzICsxLDI5IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgICAgQ29weXJpZ2h0IDIwMTIgLSAyMDE3IFZpdmFudGUgQ29ycG9yYXRpb24sIFNhbnRhIENsYXJhLCBDYWxpZm9ybmlhLgorIyAgICBBbGwgUmlnaHRzIFJlc2VydmVkLgorIworIyAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKyMgICAgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisjICAgICdTb2Z0d2FyZScpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyMgICAgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorIyAgICBkaXN0cmlidXRlLCBzdWIgbGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisjICAgIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdAorIyAgICB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisjCisjICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlCisjICAgIG5leHQgcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsCisjICAgIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyMKKyMgICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICdBUyBJUycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisjICAgIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorIyAgICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT04tSU5GUklOR0VNRU5ULgorIyAgICBJTiBOTyBFVkVOVCBTSEFMTCBWSVZBTlRFIEFORC9PUiBJVFMgU1VQUExJRVJTIEJFIExJQUJMRSBGT1IgQU5ZCisjICAgIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsCisjICAgIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFCisjICAgIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiBBTV9DRkxBR1MgPSBcCiAJLXB0aHJlYWQgXAogCSQoV0FSTl9DRkxBR1MpIFwKZGlmZiAtLWdpdCBhL3Rlc3RzL3ZpdmFudGUvdml2X2JvX3Rlc3QuYyBiL3Rlc3RzL3ZpdmFudGUvdml2X2JvX3Rlc3QuYwppbmRleCBhYTIxYWYzLi40ZTliMDY2IDEwMDY0NAotLS0gYS90ZXN0cy92aXZhbnRlL3Zpdl9ib190ZXN0LmMKKysrIGIvdGVzdHMvdml2YW50ZS92aXZfYm9fdGVzdC5jCkBAIC0xLDMgKzEsMzEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqICAgIENvcHlyaWdodCAyMDEyIC0gMjAxNyBWaXZhbnRlIENvcnBvcmF0aW9uLCBTYW50YSBDbGFyYSwgQ2FsaWZvcm5pYS4KKyogICAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyoKKyogICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisqICAgIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorKiAgICAnU29mdHdhcmUnKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisqICAgIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyogICAgZGlzdHJpYnV0ZSwgc3ViIGxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworKiAgICBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QKKyogICAgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorKgorKiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZQorKiAgICBuZXh0IHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbAorKiAgICBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisqCisqICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAnQVMgSVMnLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorKiAgICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyogICAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4KKyogICAgSU4gTk8gRVZFTlQgU0hBTEwgVklWQU5URSBBTkQvT1IgSVRTIFNVUFBMSUVSUyBCRSBMSUFCTEUgRk9SIEFOWQorKiAgICBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULAorKiAgICBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRQorKiAgICBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKIC8qCiAgKiBDb3B5cmlnaHQgwqkgMjAxNSBDYW5vbmljYWwgTHRkLiAoTWFhcnRlbiBMYW5raG9yc3QpCiAgKgpAQCAtMzMsODkgKzYxLDk3IEBACiAjaW5jbHVkZSA8cHRocmVhZC5oPgogCiAjaW5jbHVkZSAieGY4NmRybS5oIgotI2luY2x1ZGUgInZpdmFudGUuaCIKKyNpbmNsdWRlICJ2aXZhbnRlX2JvLmgiCiAKLXN0YXRpYyBpbnQgaW1wb3J0X2ZkOworc3RhdGljIGludCBpbXBvcnRfZmQgPSAtMTsKIAogc3RhdGljIHZvaWQgKgogb3BlbmNsb3NlKHZvaWQgKmRldikKIHsKLQlpbnQgZmQgPSAoaW50cHRyX3QpZGV2OwotCXVpbnQzMl90IGJvX2hhbmRsZTsKLQlpbnQgaTsKKyAgICBzdHJ1Y3QgZHJtX3ZpdmFudGUgKmRybSA9IGRldjsKKyAgICBzdHJ1Y3QgZHJtX3ZpdmFudGVfYm8gKmJvOworICAgIGludCBpOwogCi0JZm9yIChpID0gMDsgaSA8IDEwMDAwMDsgKytpKSB7Ci0JCWlmICghZHJtUHJpbWVGRFRvSGFuZGxlKGZkLCBpbXBvcnRfZmQsICZib19oYW5kbGUpKQotCQkJZHJtX3ZpdmFudGVfYm9fZGVzdHJveShmZCwgYm9faGFuZGxlKTsKLQl9Ci0JcmV0dXJuIE5VTEw7CisgICAgZm9yIChpID0gMDsgaSA8IDEwMDAwMDsgKytpKSB7CisgICAgICAgIGlmICghZHJtX3ZpdmFudGVfYm9faW1wb3J0X2Zyb21fZmQoZHJtLCBpbXBvcnRfZmQsICZibykpCisgICAgICAgICAgICBkcm1fdml2YW50ZV9ib19kZXN0cm95KGJvKTsKKyAgICB9CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiB7Ci0JZHJtVmVyc2lvblB0ciB2ZXJzaW9uOwotCWNvbnN0IGNoYXIgKmRldmljZSA9IE5VTEw7Ci0JaW50IGVyciwgZmQxLCBmZDI7Ci0JdWludDMyX3QgYm9faGFuZGxlOwotCXB0aHJlYWRfdCB0MSwgdDI7CisgICAgZHJtVmVyc2lvblB0ciB2ZXJzaW9uOworICAgIGNvbnN0IGNoYXIgKmRldmljZSA9IE5VTEw7CisgICAgaW50IGVyciwgZmQxLCBmZDI7CisgICAgc3RydWN0IGRybV92aXZhbnRlICpkcm0xLCAqZHJtMjsKKyAgICBzdHJ1Y3QgZHJtX3ZpdmFudGVfYm8gKmJvOworICAgIHB0aHJlYWRfdCB0MSwgdDI7CiAKLQlpZiAoYXJnYyA8IDIpIHsKLQkJZmQxID0gZHJtT3BlbldpdGhUeXBlKCJ2aXZhbnRlIiwgTlVMTCwgRFJNX05PREVfUkVOREVSKTsKLQkJaWYgKGZkMSA+PSAwKQotCQkJZmQyID0gZHJtT3BlbldpdGhUeXBlKCJ2aXZhbnRlIiwgTlVMTCwgRFJNX05PREVfUkVOREVSKTsKLQl9IGVsc2UgewotCQlkZXZpY2UgPSBhcmd2WzFdOworICAgIGlmIChhcmdjIDwgMikgeworICAgICAgICBmZDEgPSBkcm1PcGVuV2l0aFR5cGUoInZpdmFudGUiLCBOVUxMLCBEUk1fTk9ERV9SRU5ERVIpOworICAgICAgICBpZiAoZmQxID49IDApCisgICAgICAgICAgICBmZDIgPSBkcm1PcGVuV2l0aFR5cGUoInZpdmFudGUiLCBOVUxMLCBEUk1fTk9ERV9SRU5ERVIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGRldmljZSA9IGFyZ3ZbMV07CiAKLQkJZmQxID0gb3BlbihkZXZpY2UsIE9fUkRXUik7Ci0JCWlmIChmZDEgPj0gMCkKLQkJCWZkMiA9IG9wZW4oZGV2aWNlLCBPX1JEV1IpOwotCQllbHNlCi0JCQlmZDIgPSBmZDEgPSAtZXJybm87Ci0JfQorICAgICAgICBmZDEgPSBvcGVuKGRldmljZSwgT19SRFdSKTsKKyAgICAgICAgaWYgKGZkMSA+PSAwKQorICAgICAgICAgICAgZmQyID0gb3BlbihkZXZpY2UsIE9fUkRXUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGZkMiA9IGZkMSA9IC1lcnJubzsKKyAgICB9CiAKLQlpZiAoZmQxIDwgMCkgewotCQlmcHJpbnRmKHN0ZGVyciwgIk9wZW5pbmcgMXN0IHZpdmFudGUgcmVuZGVyIG5vZGUgZmFpbGVkIHdpdGggJWlcbiIsIGZkMSk7Ci0JCXJldHVybiBkZXZpY2UgPyAtZmQxIDogNzc7Ci0JfQorICAgIGlmIChmZDEgPCAwKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiT3BlbmluZyAxc3Qgdml2YW50ZSByZW5kZXIgbm9kZSBmYWlsZWQgd2l0aCAlaVxuIiwgZmQxKTsKKyAgICAgICAgcmV0dXJuIGRldmljZSA/IC1mZDEgOiA3NzsKKyAgICB9CiAKLQlpZiAoZmQyIDwgMCkgewotCQlmcHJpbnRmKHN0ZGVyciwgIk9wZW5pbmcgMm5kIHZpdmFudGUgcmVuZGVyIG5vZGUgZmFpbGVkIHdpdGggJWlcbiIsIC1lcnJubyk7Ci0JCXJldHVybiBlcnJubzsKLQl9CisgICAgaWYgKGZkMiA8IDApIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJPcGVuaW5nIDJuZCB2aXZhbnRlIHJlbmRlciBub2RlIGZhaWxlZCB3aXRoICVpXG4iLCAtZXJybm8pOworICAgICAgICByZXR1cm4gZXJybm87CisgICAgfQogCi0JdmVyc2lvbiA9IGRybUdldFZlcnNpb24oZmQxKTsKLQlpZiAodmVyc2lvbikgewotCQlwcmludGYoIlZlcnNpb246ICVkLiVkLiVkXG4iLCB2ZXJzaW9uLT52ZXJzaW9uX21ham9yLAotCQkgICAgICAgdmVyc2lvbi0+dmVyc2lvbl9taW5vciwgdmVyc2lvbi0+dmVyc2lvbl9wYXRjaGxldmVsKTsKLQkJcHJpbnRmKCIgIE5hbWU6ICVzXG4iLCB2ZXJzaW9uLT5uYW1lKTsKLQkJcHJpbnRmKCIgIERhdGU6ICVzXG4iLCB2ZXJzaW9uLT5kYXRlKTsKLQkJcHJpbnRmKCIgIERlc2NyaXB0aW9uOiAlc1xuIiwgdmVyc2lvbi0+ZGVzYyk7CisgICAgdmVyc2lvbiA9IGRybUdldFZlcnNpb24oZmQxKTsKKyAgICBpZiAodmVyc2lvbikgeworICAgICAgICBwcmludGYoIlZlcnNpb246ICVkLiVkLiVkXG4iLCB2ZXJzaW9uLT52ZXJzaW9uX21ham9yLAorICAgICAgICAgICAgICAgdmVyc2lvbi0+dmVyc2lvbl9taW5vciwgdmVyc2lvbi0+dmVyc2lvbl9wYXRjaGxldmVsKTsKKyAgICAgICAgcHJpbnRmKCIgIE5hbWU6ICVzXG4iLCB2ZXJzaW9uLT5uYW1lKTsKKyAgICAgICAgcHJpbnRmKCIgIERhdGU6ICVzXG4iLCB2ZXJzaW9uLT5kYXRlKTsKKyAgICAgICAgcHJpbnRmKCIgIERlc2NyaXB0aW9uOiAlc1xuIiwgdmVyc2lvbi0+ZGVzYyk7CiAKLQkJZHJtRnJlZVZlcnNpb24odmVyc2lvbik7Ci0JfQorICAgICAgICBkcm1GcmVlVmVyc2lvbih2ZXJzaW9uKTsKKyAgICB9CiAKLQllcnIgPSBkcm1fdml2YW50ZV9ib19jcmVhdGUoZmQyLCAwLCA0MDk2LCAmYm9faGFuZGxlKTsKLQlpZiAoIWVycikKLSAgICAgICAgZXJyID0gZHJtUHJpbWVIYW5kbGVUb0ZEKGZkMiwgYm9faGFuZGxlLCBEUk1fQ0xPRVhFQywgJmltcG9ydF9mZCk7CisgICAgZXJyID0gZHJtX3ZpdmFudGVfY3JlYXRlKGZkMSwgJmRybTEpOworICAgIGlmICghZXJyKQorICAgICAgICBlcnIgPSBkcm1fdml2YW50ZV9jcmVhdGUoZmQyLCAmZHJtMik7CisgICAgaWYgKGVyciA8IDApCisgICAgICAgIHJldHVybiAxOwogCi0JaWYgKCFlcnIpIHsKLQkJcHRocmVhZF9jcmVhdGUoJnQxLCBOVUxMLCBvcGVuY2xvc2UsICh2b2lkKikoaW50cHRyX3QpZmQxKTsKLQkJcHRocmVhZF9jcmVhdGUoJnQyLCBOVUxMLCBvcGVuY2xvc2UsICh2b2lkKikoaW50cHRyX3QpZmQxKTsKLQl9CisgICAgZXJyID0gZHJtX3ZpdmFudGVfYm9fY3JlYXRlKGRybTIsIDAsIDE5MjAqMTA4MCo0LCAmYm8pOworICAgIGlmICghZXJyKQorICAgICAgICBlcnIgPSBkcm1fdml2YW50ZV9ib19leHBvcnRfdG9fZmQoYm8sICZpbXBvcnRfZmQpOwogCi0JcHRocmVhZF9qb2luKHQxLCBOVUxMKTsKLQlwdGhyZWFkX2pvaW4odDIsIE5VTEwpOworICAgIGlmICghZXJyKSB7CisgICAgICAgIHB0aHJlYWRfY3JlYXRlKCZ0MSwgTlVMTCwgb3BlbmNsb3NlLCAodm9pZCopZHJtMSk7CisgICAgICAgIHB0aHJlYWRfY3JlYXRlKCZ0MiwgTlVMTCwgb3BlbmNsb3NlLCAodm9pZCopZHJtMSk7CisgICAgfQogCi0JY2xvc2UoaW1wb3J0X2ZkKTsKLQlkcm1fdml2YW50ZV9ib19kZXN0cm95KGZkMiwgYm9faGFuZGxlKTsKKyAgICBwdGhyZWFkX2pvaW4odDEsIE5VTEwpOworICAgIHB0aHJlYWRfam9pbih0MiwgTlVMTCk7CiAKLQlpZiAoZGV2aWNlKSB7Ci0JCWNsb3NlKGZkMik7Ci0JCWNsb3NlKGZkMSk7Ci0JfSBlbHNlIHsKLQkJZHJtQ2xvc2UoZmQyKTsKLQkJZHJtQ2xvc2UoZmQxKTsKLQl9CisgICAgZHJtX3ZpdmFudGVfYm9fZGVzdHJveShibyk7CiAKLQlyZXR1cm4gMDsKKyAgICBkcm1fdml2YW50ZV9jbG9zZShkcm0yKTsKKyAgICBkcm1fdml2YW50ZV9jbG9zZShkcm0xKTsKKyAgICBpZiAoZGV2aWNlKSB7CisgICAgICAgIGNsb3NlKGZkMik7CisgICAgICAgIGNsb3NlKGZkMSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZHJtQ2xvc2UoZmQyKTsKKyAgICAgICAgZHJtQ2xvc2UoZmQxKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3ZpdmFudGUvQW5kcm9pZC5tayBiL3ZpdmFudGUvQW5kcm9pZC5tawppbmRleCAyMzQwMjhhLi5jY2I5YTAyIDEwMDY0NAotLS0gYS92aXZhbnRlL0FuZHJvaWQubWsKKysrIGIvdml2YW50ZS9BbmRyb2lkLm1rCkBAIC0xLDExICsxLDM5IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgICAgQ29weXJpZ2h0IDIwMTIgLSAyMDE3IFZpdmFudGUgQ29ycG9yYXRpb24sIFNhbnRhIENsYXJhLCBDYWxpZm9ybmlhLgorIyAgICBBbGwgUmlnaHRzIFJlc2VydmVkLgorIworIyAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKyMgICAgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisjICAgICdTb2Z0d2FyZScpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyMgICAgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorIyAgICBkaXN0cmlidXRlLCBzdWIgbGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisjICAgIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdAorIyAgICB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisjCisjICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlCisjICAgIG5leHQgcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsCisjICAgIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyMKKyMgICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICdBUyBJUycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisjICAgIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorIyAgICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT04tSU5GUklOR0VNRU5ULgorIyAgICBJTiBOTyBFVkVOVCBTSEFMTCBWSVZBTlRFIEFORC9PUiBJVFMgU1VQUExJRVJTIEJFIExJQUJMRSBGT1IgQU5ZCisjICAgIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsCisjICAgIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFCisjICAgIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwogTE9DQUxfUEFUSCA6PSAkKGNhbGwgbXktZGlyKQogaW5jbHVkZSAkKENMRUFSX1ZBUlMpCiAKLUxPQ0FMX01PRFVMRSA6PSBsaWJkcm1fdml2YW50ZQorTE9DQUxfU1JDX0ZJTEVTIDo9IHZpdmFudGVfYm8uYworCitMT0NBTF9DRkxBR1MgOj0gLVduby11bnVzZWQtcGFyYW1ldGVyCiAKIExPQ0FMX1NIQVJFRF9MSUJSQVJJRVMgOj0gbGliZHJtCiAKLUxPQ0FMX1NSQ19GSUxFUyA6PSB2aXZhbnRlLmMKLQotaW5jbHVkZSAkKExJQkRSTV9DT01NT05fTUspCitMT0NBTF9NT0RVTEUgOj0gbGliZHJtX3ZpdmFudGUKIGluY2x1ZGUgJChCVUlMRF9TSEFSRURfTElCUkFSWSkKZGlmZiAtLWdpdCBhL3ZpdmFudGUvTWFrZWZpbGUuYW0gYi92aXZhbnRlL01ha2VmaWxlLmFtCmluZGV4IDg5NjNiZjAuLmNkNGM3M2UgMTAwNjQ0Ci0tLSBhL3ZpdmFudGUvTWFrZWZpbGUuYW0KKysrIGIvdml2YW50ZS9NYWtlZmlsZS5hbQpAQCAtMSwzICsxLDMxIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgICAgQ29weXJpZ2h0IDIwMTIgLSAyMDE3IFZpdmFudGUgQ29ycG9yYXRpb24sIFNhbnRhIENsYXJhLCBDYWxpZm9ybmlhLgorIyAgICBBbGwgUmlnaHRzIFJlc2VydmVkLgorIworIyAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKyMgICAgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisjICAgICdTb2Z0d2FyZScpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyMgICAgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorIyAgICBkaXN0cmlidXRlLCBzdWIgbGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisjICAgIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdAorIyAgICB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisjCisjICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlCisjICAgIG5leHQgcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsCisjICAgIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyMKKyMgICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICdBUyBJUycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisjICAgIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorIyAgICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT04tSU5GUklOR0VNRU5ULgorIyAgICBJTiBOTyBFVkVOVCBTSEFMTCBWSVZBTlRFIEFORC9PUiBJVFMgU1VQUExJRVJTIEJFIExJQUJMRSBGT1IgQU5ZCisjICAgIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsCisjICAgIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFCisjICAgIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwogQU1fQ1BQRkxBR1MgPSBcCiAJLUkkKHRvcF9zcmNkaXIpIFwKIAktSSQodG9wX3NyY2RpcikvaW5jbHVkZS9kcm0KQEAgLTEyLDEwICs0MCwxMCBAQAogbGliZHJtX3ZpdmFudGVfbGFfTElCQUREID0gLi4vbGliZHJtLmxhIEBQVEhSRUFEU1RVQlNfTElCU0AKIAogbGliZHJtX3ZpdmFudGVfbGFfU09VUkNFUyA9IFwKLQl2aXZhbnRlLmMKKwl2aXZhbnRlX2JvLmMKIAogbGliZHJtX3ZpdmFudGVpbmNsdWRlZGlyID0gJHtpbmNsdWRlZGlyfS9saWJkcm0KLWxpYmRybV92aXZhbnRlaW5jbHVkZV9IRUFERVJTID0gdml2YW50ZS5oCitsaWJkcm1fdml2YW50ZWluY2x1ZGVfSEVBREVSUyA9IHZpdmFudGVfYm8uaAogCiBwa2djb25maWdkaXIgPSBAcGtnY29uZmlnZGlyQAogcGtnY29uZmlnX0RBVEEgPSBsaWJkcm1fdml2YW50ZS5wYwpkaWZmIC0tZ2l0IGEvdml2YW50ZS9saWJkcm1fdml2YW50ZS5wYyBiL3ZpdmFudGUvbGliZHJtX3ZpdmFudGUucGMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDc0YTMzYwotLS0gL2Rldi9udWxsCisrKyBiL3ZpdmFudGUvbGliZHJtX3ZpdmFudGUucGMKQEAgLTAsMCArMSwxMSBAQAorcHJlZml4PS91c3IKK2V4ZWNfcHJlZml4PSR7cHJlZml4fQorbGliZGlyPSR7ZXhlY19wcmVmaXh9L2xpYgoraW5jbHVkZWRpcj0ke3ByZWZpeH0vaW5jbHVkZQorCitOYW1lOiBsaWJkcm1fdml2YW50ZQorRGVzY3JpcHRpb246IFVzZXJzcGFjZSBpbnRlcmZhY2UgdG8gVml2YW50ZSBrZXJuZWwgRFJNIHNlcnZpY2VzCitWZXJzaW9uOiAyLjQuODQKK0xpYnM6IC1MJHtsaWJkaXJ9IC1sZHJtX3ZpdmFudGUKK0NmbGFnczogLUkke2luY2x1ZGVkaXJ9IC1JJHtpbmNsdWRlZGlyfS9saWJkcm0KK1JlcXVpcmVzLnByaXZhdGU6IGxpYmRybQpkaWZmIC0tZ2l0IGEvdml2YW50ZS92aXZhbnRlLXN5bWJvbC1jaGVjayBiL3ZpdmFudGUvdml2YW50ZS1zeW1ib2wtY2hlY2sKaW5kZXggMjljMTJhMC4uMTc3YmJhOSAxMDA2NDQKLS0tIGEvdml2YW50ZS92aXZhbnRlLXN5bWJvbC1jaGVjaworKysgYi92aXZhbnRlL3ZpdmFudGUtc3ltYm9sLWNoZWNrCkBAIC0xLDYgKzEsNiBAQAogIyEvYmluL2Jhc2gKIAotIyBUaGUgZm9sbG93aW5nIHN5bWJvbHMgKHBhc3QgdGhlIGZpcnN0IG5pbmUpIGFyZSB0YWtlbiBmcm9tIHZpdmFudGUuaC4KKyMgVGhlIGZvbGxvd2luZyBzeW1ib2xzIChwYXN0IHRoZSBmaXJzdCBuaW5lKSBhcmUgdGFrZW4gZnJvbSB2aXZhbnRlX2JvLmguCiAKIEZVTkNTPSQobm0gLUQgLS1mb3JtYXQ9YnNkIC0tZGVmaW5lZC1vbmx5ICR7MS0ubGlicy9saWJkcm1fdml2YW50ZS5zb30gfCBhd2sgJ3twcmludCAkM30nfCB3aGlsZSByZWFkIGZ1bmM7IGRvCiAoIGdyZXAgLXEgIl4kZnVuYyQiIHx8IGVjaG8gJGZ1bmMgKSAgPDxFT0YKQEAgLTE0LDEwICsxNCwxOCBAQAogX2ZpbmkKIF9pbml0CiBkcm1fdml2YW50ZV9ib19jcmVhdGUKK2RybV92aXZhbnRlX2JvX2NyZWF0ZV93aXRoX3RzCitkcm1fdml2YW50ZV9ib19leHBvcnRfdG9fZmQKK2RybV92aXZhbnRlX2JvX2ltcG9ydF9mcm9tX2ZkCiBkcm1fdml2YW50ZV9ib19kZXN0cm95Ci1kcm1fdml2YW50ZV9ib19sb2NrCi1kcm1fdml2YW50ZV9ib191bmxvY2sKLWRybV92aXZhbnRlX2JvX2NhY2hlCi1kcm1fdml2YW50ZV9ib19nZXRpbmZvCitkcm1fdml2YW50ZV9ib19nZXRfaGFuZGxlCitkcm1fdml2YW50ZV9ib19tbWFwCitkcm1fdml2YW50ZV9ib19tdW5tYXAKK2RybV92aXZhbnRlX2JvX3F1ZXJ5Citkcm1fdml2YW50ZV9ib19zZXRfdGlsaW5nCitkcm1fdml2YW50ZV9ib19nZXRfdGlsaW5nCitkcm1fdml2YW50ZV9ib19pbmNfdGltZXN0YW1wCitkcm1fdml2YW50ZV9ib19nZXRfdGltZXN0YW1wCitkcm1fdml2YW50ZV9ib19yZWZfbm9kZQogRU9GCiBkb25lKQpkaWZmIC0tZ2l0IGEvdml2YW50ZS92aXZhbnRlLmMgYi92aXZhbnRlL3ZpdmFudGUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjgyMTM4Yy4uMDAwMDAwMAotLS0gYS92aXZhbnRlL3ZpdmFudGUuYworKysgL2Rldi9udWxsCkBAIC0xLDE0NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IMKpIDIwMTIsIDIwMTMgVGhpZXJyeSBSZWRpbmcKLSAqIENvcHlyaWdodCDCqSAyMDEzIEVyaWsgRmF5ZS1MdW5kCi0gKiBDb3B5cmlnaHQgwqkgMjAxNCBOVklESUEgQ29ycG9yYXRpb24KLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQotICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKLSAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KLSAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAotICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCi0gKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotICoKLSAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCi0gKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgotICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKLSAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgotICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCi0gKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKLSAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotIyAgaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8ZmNudGwuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLQotI2luY2x1ZGUgPHN5cy9tbWFuLmg+Ci0KLSNpbmNsdWRlIDx4Zjg2ZHJtLmg+Ci0KLSNpbmNsdWRlIDx2aXZhbnRlX2RybS5oPgotCi0jaW5jbHVkZSAidml2YW50ZS5oIgotCi1pbnQgZHJtX3ZpdmFudGVfYm9fY3JlYXRlKGludCBmZCwgdWludDMyX3QgZmxhZ3MsIHVpbnQzMl90IHNpemUsIHVpbnQzMl90ICpoYW5kbGUpCi17Ci0gICAgc3RydWN0IGRybV92aXZfZ2VtX2NyZWF0ZSBhcmdzOwotICAgIGludCBlcnIgPSAwOwotCi0gICAgaWYgKHNpemUgPT0gMCB8fCAhaGFuZGxlKQotICAgICAgICByZXR1cm4gLUVJTlZBTDsKLQotICAgIG1lbXNldCgmYXJncywgMCwgc2l6ZW9mKGFyZ3MpKTsKLSAgICBhcmdzLmZsYWdzID0gZmxhZ3M7Ci0gICAgYXJncy5zaXplID0gc2l6ZTsKLQotICAgIGlmIChkcm1Jb2N0bChmZCwgRFJNX0lPQ1RMX1ZJVl9HRU1fQ1JFQVRFLCAmYXJncykpCi0gICAgICAgIHJldHVybiAtZXJybm87Ci0KLSAgICAqaGFuZGxlID0gYXJncy5oYW5kbGU7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotaW50IGRybV92aXZhbnRlX2JvX2Rlc3Ryb3koaW50IGZkLCB1aW50MzJfdCBoYW5kbGUpCi17Ci0gICAgc3RydWN0IGRybV9nZW1fY2xvc2UgYXJnczsKLQotICAgIGlmICghaGFuZGxlKQotICAgICAgICByZXR1cm4gLUVJTlZBTDsKLQotICAgIGFyZ3MuaGFuZGxlID0gaGFuZGxlOwotICAgIGlmIChkcm1Jb2N0bChmZCwgRFJNX0lPQ1RMX0dFTV9DTE9TRSwgJmFyZ3MpKQotICAgICAgICByZXR1cm4gLWVycm5vOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQqIGRybV92aXZhbnRlX2JvX2xvY2soaW50IGZkLCB1aW50MzJfdCBoYW5kbGUsIHVpbnQzMl90ICpncHVfdmEpCi17Ci0gICAgc3RydWN0IGRybV92aXZfZ2VtX2xvY2sgYXJnczsKLQotICAgIGlmICghaGFuZGxlKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIGFyZ3MuaGFuZGxlID0gaGFuZGxlOwotICAgIGFyZ3MuY2FjaGVhYmxlID0gMDsKLSAgICBpZiAoZHJtSW9jdGwoZmQsIERSTV9JT0NUTF9WSVZfR0VNX0xPQ0ssICZhcmdzKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBpZiAoZ3B1X3ZhKQotICAgIHsKLSAgICAgICAgKmdwdV92YSA9IGFyZ3MuZ3B1X3ZhOwotICAgIH0KLQotICAgIHJldHVybiAodm9pZCopKGludHB0cl90KWFyZ3MuY3B1X3ZhOwotfQotCi1pbnQgZHJtX3ZpdmFudGVfYm9fdW5sb2NrKGludCBmZCwgdWludDMyX3QgaGFuZGxlKQotewotICAgIHN0cnVjdCBkcm1fdml2X2dlbV91bmxvY2sgYXJnczsKLQotICAgIGlmICghaGFuZGxlKQotICAgICAgICByZXR1cm4gLUVJTlZBTDsKLQotICAgIGFyZ3MuaGFuZGxlID0gaGFuZGxlOwotICAgIGlmIChkcm1Jb2N0bChmZCwgRFJNX0lPQ1RMX1ZJVl9HRU1fVU5MT0NLLCAmYXJncykpCi0gICAgICAgIHJldHVybiAtZXJybm87Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotaW50IGRybV92aXZhbnRlX2JvX2NhY2hlKGludCBmZCwgdWludDMyX3QgaGFuZGxlLCB1aW50MzJfdCBvcCwgdm9pZCogbG9naWNhbCwgdWludDMyX3QgYnl0ZXMpCi17Ci0gICAgc3RydWN0IGRybV92aXZfZ2VtX2NhY2hlIGFyZ3M7Ci0KLSAgICBpZiAoIWhhbmRsZSkKLSAgICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0KLSAgICBhcmdzLmhhbmRsZSA9IGhhbmRsZTsKLSAgICBhcmdzLm9wID0gaGFuZGxlOwotICAgIGFyZ3MubG9naWNhbCA9ICh1aW50cHRyX3QpbG9naWNhbDsKLSAgICBhcmdzLmJ5dGVzID0gYnl0ZXM7Ci0gICAgaWYgKGRybUlvY3RsKGZkLCBEUk1fSU9DVExfVklWX0dFTV9DQUNIRSwgJmFyZ3MpKQotICAgICAgICByZXR1cm4gLWVycm5vOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLWludCBkcm1fdml2YW50ZV9ib19nZXRpbmZvKGludCBmZCwgdWludDMyX3QgaGFuZGxlLCB1aW50MzJfdCBwYXJhbSwgdWludDY0X3QgKnZhbHVlKQotewotICAgIHN0cnVjdCBkcm1fdml2X2dlbV9nZXRpbmZvIGFyZ3M7Ci0KLSAgICBpZiAoIWhhbmRsZSkKLSAgICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0KLSAgICBhcmdzLmhhbmRsZSA9IGhhbmRsZTsKLSAgICBhcmdzLnBhcmFtICA9IHBhcmFtOwotICAgIGlmIChkcm1Jb2N0bChmZCwgRFJNX0lPQ1RMX1ZJVl9HRU1fR0VUSU5GTywgJmFyZ3MpKQotICAgICAgICByZXR1cm4gLWVycm5vOwotCi0gICAgKnZhbHVlID0gYXJncy52YWx1ZTsKLQotICAgIHJldHVybiAwOwotfQotCi0KLQpkaWZmIC0tZ2l0IGEvdml2YW50ZS92aXZhbnRlLmggYi92aXZhbnRlL3ZpdmFudGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjQ5MmU1YS4uMDAwMDAwMAotLS0gYS92aXZhbnRlL3ZpdmFudGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgwqkgMjAxNyBWSVZBTlRFIENvcnBvcmF0aW9uCi0gKgotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKLSAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCi0gKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCi0gKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKLSAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQotICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSAqCi0gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0Ci0gKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCi0gKiBTb2Z0d2FyZS4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgotICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKLSAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgotICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCi0gKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKLSAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KLSAqLwotCi0jaWZuZGVmIF9fRFJNX1ZJVkFOVEVfSF9fCi0jZGVmaW5lIF9fRFJNX1ZJVkFOVEVfSF9fIDEKLQotI2luY2x1ZGUgPHN0ZGludC5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotCi1lbnVtIFZJVl9DQUNIRV9PUCB7Ci0gICAgVklWX0NBQ0hFX0NMRUFOICAgICAgPSAweDAxLAotICAgIFZJVl9DQUNIRV9JTlZBTElEQVRFID0gMHgwMiwKLSAgICBWSVZfQ0FDSEVfRkxVU0ggICAgICA9IFZJVl9DQUNIRV9DTEVBTiAgfCBWSVZfQ0FDSEVfSU5WQUxJREFURSwKLSAgICBWSVZfQ0FDSEVfQkFSUklFUiAgICA9IDB4MDQKLX07Ci0KLWVudW0gVklWX0dFTV9QQVJBTSB7Ci0gICAgVklWX0dFTV9QQVJBTV9OT0RFID0gMCwKLSAgICBWSVZfR0VNX1BBUkFNX1BPT0wsCi0gICAgVklWX0dFTV9QQVJBTV9TSVpFLAotfTsKLQotaW50IGRybV92aXZhbnRlX2JvX2NyZWF0ZShpbnQgZmQsIHVpbnQzMl90IGZsYWdzLCB1aW50MzJfdCBzaXplLCB1aW50MzJfdCAqaGFuZGxlKTsKLWludCBkcm1fdml2YW50ZV9ib19kZXN0cm95KGludCBmZCwgdWludDMyX3QgaGFuZGxlKTsKLXZvaWQqIGRybV92aXZhbnRlX2JvX2xvY2soaW50IGZkLCB1aW50MzJfdCBoYW5kbGUsIHVpbnQzMl90ICpncHVfdmEpOwotaW50IGRybV92aXZhbnRlX2JvX3VubG9jayhpbnQgZmQsIHVpbnQzMl90IGhhbmRsZSk7Ci1pbnQgZHJtX3ZpdmFudGVfYm9fY2FjaGUoaW50IGZkLCB1aW50MzJfdCBoYW5kbGUsIHVpbnQzMl90IG9wLCB2b2lkKiBsb2dpY2FsLCB1aW50MzJfdCBieXRlcyk7Ci1pbnQgZHJtX3ZpdmFudGVfYm9fZ2V0aW5mbyhpbnQgZmQsIHVpbnQzMl90IGhhbmRsZSwgdWludDMyX3QgcGFyYW0sIHVpbnQ2NF90ICp2YWx1ZSk7Ci0KLSNlbmRpZiAvKiBfX0RSTV9WSVZBTlRFX0hfXyAqLwpkaWZmIC0tZ2l0IGEvdml2YW50ZS92aXZhbnRlX2JvLmMgYi92aXZhbnRlL3ZpdmFudGVfYm8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTc0Mzg0Ci0tLSAvZGV2L251bGwKKysrIGIvdml2YW50ZS92aXZhbnRlX2JvLmMKQEAgLTAsMCArMSw0NzQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqICAgIENvcHlyaWdodCAyMDEyIC0gMjAxNyBWaXZhbnRlIENvcnBvcmF0aW9uLCBTYW50YSBDbGFyYSwgQ2FsaWZvcm5pYS4KKyogICAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyoKKyogICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisqICAgIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorKiAgICAnU29mdHdhcmUnKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisqICAgIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyogICAgZGlzdHJpYnV0ZSwgc3ViIGxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworKiAgICBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QKKyogICAgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorKgorKiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZQorKiAgICBuZXh0IHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbAorKiAgICBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisqCisqICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAnQVMgSVMnLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorKiAgICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyogICAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4KKyogICAgSU4gTk8gRVZFTlQgU0hBTEwgVklWQU5URSBBTkQvT1IgSVRTIFNVUFBMSUVSUyBCRSBMSUFCTEUgRk9SIEFOWQorKiAgICBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULAorKiAgICBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRQorKiAgICBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjICBpbmNsdWRlICJjb25maWcuaCIKKyNlbmRpZgorCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisjaW5jbHVkZSA8c3lzL21tYW4uaD4KKworI2luY2x1ZGUgPHhmODZkcm0uaD4KKworI2luY2x1ZGUgPHZpdmFudGVfZHJtLmg+CisKKyNpbmNsdWRlICJ2aXZhbnRlX2JvLmgiCisKK3N0cnVjdCBkcm1fdml2YW50ZQoreworICAgIC8qIGRyaXZlciBmZC4gKi8KKyAgICBpbnQgZmQ7Cit9OworCitzdHJ1Y3QgZHJtX3ZpdmFudGVfYm8KK3sKKyAgICBzdHJ1Y3QgZHJtX3ZpdmFudGUgKmRybTsKKworICAgIHVpbnQzMl90IGhhbmRsZTsKKworICAgIC8qIGV4cG9ydCBwcmltZSBmZCBpZiBhbnkgKi8KKyAgICBpbnQgZmQ7CisKKyAgICB1aW50MzJfdCBmbGFnczsKKyAgICB1aW50MzJfdCBzaXplOworCisgICAgdm9pZCAqdmFkZHI7Cit9OworCitpbnQgZHJtX3ZpdmFudGVfY3JlYXRlKGludCBmZCwgc3RydWN0IGRybV92aXZhbnRlICoqZHJtcCkKK3sKKyAgICBpbnQgc3VwcG9ydGVkID0gMDsKKyAgICBkcm1WZXJzaW9uUHRyIHZlcnNpb247CisgICAgc3RydWN0IGRybV92aXZhbnRlICpkcm07CisKKyAgICB2ZXJzaW9uID0gZHJtR2V0VmVyc2lvbihmZCk7CisgICAgaWYgKCF2ZXJzaW9uKQorICAgICAgICByZXR1cm4gLUVOT01FTTsKKworICAgIGlmICghc3RybmNtcCh2ZXJzaW9uLT5uYW1lLCAidml2YW50ZSIsIHZlcnNpb24tPm5hbWVfbGVuKSkKKyAgICAgICAgc3VwcG9ydGVkID0gMTsKKworICAgIGRybUZyZWVWZXJzaW9uKHZlcnNpb24pOworCisgICAgaWYgKCFzdXBwb3J0ZWQpCisgICAgICAgIHJldHVybiAtRU5PVFNVUDsKKworICAgIGRybSA9IGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IGRybV92aXZhbnRlKSk7CisgICAgaWYgKCFkcm0pCisgICAgICAgIHJldHVybiAtRU5PTUVNOworCisgICAgZHJtLT5mZCA9IGZkOworICAgICpkcm1wID0gZHJtOworCisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgZHJtX3ZpdmFudGVfY2xvc2Uoc3RydWN0IGRybV92aXZhbnRlICpkcm0pCit7CisgICAgZnJlZShkcm0pOworfQorCitzdGF0aWMgaW50IGRybV92aXZhbnRlX2JvX2luaXQoc3RydWN0IGRybV92aXZhbnRlICpkcm0sCisgICAgICAgICAgICAgICAgc3RydWN0IGRybV92aXZhbnRlX2JvICoqYm9wKQoreworICAgIHN0cnVjdCBkcm1fdml2YW50ZV9ibyAqYm87CisKKyAgICBibyA9IGNhbGxvYygxLCBzaXplb2YoKmJvKSk7CisgICAgaWYgKCFibykKKyAgICAgICAgcmV0dXJuIC1FTk9NRU07CisKKyAgICBiby0+ZHJtID0gZHJtOworICAgIGJvLT5mZCA9IC0xOworICAgIGJvLT52YWRkciA9IE5VTEw7CisKKyAgICAqYm9wID0gYm87CisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBkcm1fdml2YW50ZV9ib19jcmVhdGUoc3RydWN0IGRybV92aXZhbnRlICpkcm0sCisgICAgICAgICAgICB1aW50MzJfdCBmbGFncywgdWludDMyX3Qgc2l6ZSwgc3RydWN0IGRybV92aXZhbnRlX2JvICoqYm9wKQoreworICAgIGludCBlcnIgPSAwOworICAgIHN0cnVjdCBkcm1fdml2YW50ZV9ibyAqYm87CisgICAgc3RydWN0IGRybV92aXZfZ2VtX2NyZWF0ZSBhcmdzID0geworICAgICAgICAuZmxhZ3MgPSBmbGFncywKKyAgICAgICAgLnNpemUgID0gc2l6ZQorICAgIH07CisKKyAgICBpZiAoc2l6ZSA9PSAwKQorICAgICAgICByZXR1cm4gLUVJTlZBTDsKKworICAgIGlmICghZHJtIHx8ICFib3ApCisgICAgICAgIHJldHVybiAtRUlOVkFMOworCisgICAgZXJyID0gZHJtX3ZpdmFudGVfYm9faW5pdChkcm0sICZibyk7CisgICAgaWYgKGVycikgeworICAgICAgICByZXR1cm4gZXJyOworICAgIH0KKworICAgIGlmIChkcm1Jb2N0bChkcm0tPmZkLCBEUk1fSU9DVExfVklWX0dFTV9DUkVBVEUsICZhcmdzKSkgeworICAgICAgICBmcmVlKGJvKTsKKyAgICAgICAgcmV0dXJuIC1lcnJubzsKKyAgICB9CisgICAgYm8tPmhhbmRsZSA9IGFyZ3MuaGFuZGxlOworICAgIGJvLT5mbGFncyA9IGZsYWdzOworICAgIGJvLT5zaXplID0gc2l6ZTsKKworICAgICpib3AgPSBibzsKKyAgICByZXR1cm4gMDsKK30KKworaW50IGRybV92aXZhbnRlX2JvX2NyZWF0ZV93aXRoX3RzKHN0cnVjdCBkcm1fdml2YW50ZSAqZHJtLAorICAgICAgICAgICAgdWludDMyX3QgZmxhZ3MsIHVpbnQzMl90IHNpemUsIHN0cnVjdCBkcm1fdml2YW50ZV9ibyAqKmJvcCkKK3sKKyAgICBpbnQgZXJyID0gMDsKKyAgICB1aW50MzJfdCB0c19oYW5kbGUgPSAwOworICAgIHN0cnVjdCBkcm1fdml2YW50ZV9ibyAqYm87CisgICAgc3RydWN0IGRybV92aXZfZ2VtX2NyZWF0ZSBhcmdzID0geworICAgICAgICAuZmxhZ3MgPSBmbGFncywKKyAgICAgICAgLnNpemUgID0gc2l6ZQorICAgIH07CisgICAgc3RydWN0IGRybV9nZW1fY2xvc2UgY2xvc2VfYXJnczsKKyAgICBzdHJ1Y3QgZHJtX3Zpdl9nZW1fYXR0YWNoX2F1eCBhdXhfYXJnczsKKyAgICBjb25zdCB1aW50MzJfdCB2YWxpZF90c19mbGFncyA9IERSTV9WSVZfR0VNX0NPTlRJR1VPVVMgfCBEUk1fVklWX0dFTV9TRUNVUkU7CisKKyAgICBpZiAoc2l6ZSA9PSAwKQorICAgICAgICByZXR1cm4gLUVJTlZBTDsKKworICAgIGlmICghZHJtIHx8ICFib3ApCisgICAgICAgIHJldHVybiAtRUlOVkFMOworCisgICAgZXJyID0gZHJtX3ZpdmFudGVfYm9faW5pdChkcm0sICZibyk7CisgICAgaWYgKGVycikKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIGlmIChkcm1Jb2N0bChkcm0tPmZkLCBEUk1fSU9DVExfVklWX0dFTV9DUkVBVEUsICZhcmdzKSkgeworICAgICAgICBlcnIgPSAtZXJybm87CisgICAgICAgIGdvdG8gZXJyX2Nsb3NlOworICAgIH0KKyAgICBiby0+aGFuZGxlID0gYXJncy5oYW5kbGU7CisKKyAgICAvKiBhbGxvYyB0cyBoYW5kbGUsIHNpemUgaXMgbWFzdGVyIGJ1ZmZlciBzaXplIC8gMjU2LCBhbGlnbiB1cCB0byA2NEIuICovCisgICAgYXJncy5mbGFncyA9IGZsYWdzICYgdmFsaWRfdHNfZmxhZ3M7CisgICAgYXJncy5zaXplICA9ICgoc2l6ZSA+PiA4KSArIDB4M2YpICYgfjB4M2Y7CisgICAgaWYgKGRybUlvY3RsKGRybS0+ZmQsIERSTV9JT0NUTF9WSVZfR0VNX0NSRUFURSwgJmFyZ3MpKSB7CisgICAgICAgIGVyciA9IC1lcnJubzsKKyAgICAgICAgZ290byBlcnJfY2xvc2U7CisgICAgfQorICAgIHRzX2hhbmRsZSA9IGFyZ3MuaGFuZGxlOworCisgICAgLyogcmVmIHRzX2hhbmRsZSBpbiBtYXN0ZXIgaGFuZGxlLiAqLworICAgIGF1eF9hcmdzLmhhbmRsZSA9IGJvLT5oYW5kbGU7CisgICAgYXV4X2FyZ3MudHNfaGFuZGxlID0gdHNfaGFuZGxlOworICAgIGlmIChkcm1Jb2N0bChkcm0tPmZkLCBEUk1fSU9DVExfVklWX0dFTV9BVFRBQ0hfQVVYLCAmYXV4X2FyZ3MpKSB7CisgICAgICAgIGVyciA9IC1lcnJubzsKKyAgICAgICAgZ290byBlcnJfY2xvc2U7CisgICAgfQorCisgICAgLyogTm93IHRzIHdhcyBhdHRhY2hlZCB0byBtYXN0ZXIsIGRlc3Ryb3kgaXQgbm93LiAqLworICAgIGNsb3NlX2FyZ3MuaGFuZGxlID0gdHNfaGFuZGxlOworICAgIGlmIChkcm1Jb2N0bChkcm0tPmZkLCBEUk1fSU9DVExfR0VNX0NMT1NFLCAmY2xvc2VfYXJncykpIHsKKyAgICAgICAgZXJyID0gLWVycm5vOworICAgICAgICBnb3RvIGVycl9jbG9zZTsKKyAgICB9CisgICAgdHNfaGFuZGxlID0gMDsKKworICAgIGJvLT5mbGFncyA9IGZsYWdzOworICAgIGJvLT5zaXplID0gc2l6ZTsKKworICAgICpib3AgPSBibzsKKyAgICByZXR1cm4gMDsKKworZXJyX2Nsb3NlOgorICAgIGlmIChiby0+aGFuZGxlKSB7CisKKyAgICAgICAgaWYgKHRzX2hhbmRsZSkgeworICAgICAgICAgICAgY2xvc2VfYXJncy5oYW5kbGUgPSB0c19oYW5kbGU7CisgICAgICAgICAgICBkcm1Jb2N0bChkcm0tPmZkLCBEUk1fSU9DVExfR0VNX0NMT1NFLCAmY2xvc2VfYXJncyk7CisgICAgICAgIH0KKworICAgICAgICBjbG9zZV9hcmdzLmhhbmRsZSA9IGJvLT5oYW5kbGU7CisgICAgICAgIGRybUlvY3RsKGRybS0+ZmQsIERSTV9JT0NUTF9HRU1fQ0xPU0UsICZjbG9zZV9hcmdzKTsKKyAgICB9CisKKyAgICBmcmVlKGJvKTsKKyAgICByZXR1cm4gZXJyOworfQorCitpbnQgZHJtX3ZpdmFudGVfYm9fZXhwb3J0X3RvX2ZkKHN0cnVjdCBkcm1fdml2YW50ZV9ibyAqYm8sIGludCAqcGZkKQoreworICAgIGlmICghYm8gfHwgIXBmZCkKKyAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisKKyAgICBpZiAoYm8tPmZkIDwgMCkgeworICAgICAgICBpbnQgZmQ7CisgICAgICAgIGlmIChkcm1QcmltZUhhbmRsZVRvRkQoYm8tPmRybS0+ZmQsIGJvLT5oYW5kbGUsIE9fUkRXUiwgJmZkKSkKKyAgICAgICAgICAgIHJldHVybiAtZXJybm87CisgICAgICAgIGJvLT5mZCA9IGZkOworICAgIH0KKworICAgICpwZmQgPSBiby0+ZmQ7CisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBkcm1fdml2YW50ZV9ib19pbXBvcnRfZnJvbV9mZChzdHJ1Y3QgZHJtX3ZpdmFudGUgKmRybSwgaW50IGZkLAorICAgICAgICAgICAgc3RydWN0IGRybV92aXZhbnRlX2JvICoqYm9wKQoreworICAgIGludCBlcnI7CisgICAgdWludDY0X3Qgc2l6ZTsKKyAgICB1aW50MzJfdCBoYW5kbGUgPSAwOworICAgIHN0cnVjdCBkcm1fdml2YW50ZV9ibyAqYm8gPSBOVUxMOworCisgICAgaWYgKCFkcm0gfHwgIWJvcCB8fCBmZCA8IDApCisgICAgICAgIHJldHVybiAtRUlOVkFMOworCisgICAgZXJyID0gZHJtX3ZpdmFudGVfYm9faW5pdChkcm0sICZibyk7CisgICAgaWYgKGVycikKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIGlmIChkcm1QcmltZUZEVG9IYW5kbGUoZHJtLT5mZCwgZmQsICZoYW5kbGUpKSB7CisgICAgICAgIGVyciA9IC1lcnJubzsKKyAgICAgICAgZ290byBlcnJfY2xvc2U7CisgICAgfQorICAgIGJvLT5oYW5kbGUgPSBoYW5kbGU7CisKKyAgICBlcnIgPSBkcm1fdml2YW50ZV9ib19xdWVyeShibywgRFJNX1ZJVl9HRU1fUEFSQU1fU0laRSwgJnNpemUpOworICAgIGlmIChlcnIpCisgICAgICAgIGdvdG8gZXJyX2Nsb3NlOworICAgIGJvLT5zaXplID0gKHVpbnQzMl90KXNpemU7CisKKyAgICAqYm9wID0gYm87CisgICAgcmV0dXJuIDA7CisKK2Vycl9jbG9zZToKKyAgICBpZiAoaGFuZGxlID4gMCkgeworICAgICAgICBzdHJ1Y3QgZHJtX2dlbV9jbG9zZSBjbG9zZV9hcmdzID0geworICAgICAgICAgICAgLmhhbmRsZSA9IGhhbmRsZSwKKyAgICAgICAgfTsKKyAgICAgICAgZHJtSW9jdGwoZHJtLT5mZCwgRFJNX0lPQ1RMX0dFTV9DTE9TRSwgJmNsb3NlX2FyZ3MpOworICAgIH0KKyAgICBmcmVlKGJvKTsKKworICAgIHJldHVybiBlcnI7Cit9CisKK3ZvaWQgZHJtX3ZpdmFudGVfYm9fZGVzdHJveShzdHJ1Y3QgZHJtX3ZpdmFudGVfYm8gKmJvKQoreworICAgIHN0cnVjdCBkcm1fZ2VtX2Nsb3NlIGNsb3NlX2FyZ3M7CisKKyAgICBpZiAoIWJvKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoYm8tPnZhZGRyKSB7CisgICAgICAgIGRybV92aXZhbnRlX2JvX211bm1hcChibyk7CisgICAgfQorCisgICAgY2xvc2VfYXJncy5oYW5kbGUgPSBiby0+aGFuZGxlOworICAgIGRybUlvY3RsKGJvLT5kcm0tPmZkLCBEUk1fSU9DVExfR0VNX0NMT1NFLCAmY2xvc2VfYXJncyk7CisKKyAgICBmcmVlKGJvKTsKK30KKworaW50IGRybV92aXZhbnRlX2JvX2dldF9oYW5kbGUoc3RydWN0IGRybV92aXZhbnRlX2JvICpibywgdWludDMyX3QgKmhhbmRsZSkKK3sKKyAgICBpZiAoIWJvIHx8ICFoYW5kbGUpCisgICAgICAgIHJldHVybiAtRUlOVkFMOworCisgICAgKmhhbmRsZSA9IGJvLT5oYW5kbGU7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2xlYW5fYm9fY2FjaGUoc3RydWN0IGRybV92aXZhbnRlX2JvICpibykKK3sKKyAgICBzdHJ1Y3QgZHJtX3Zpdl9nZW1fY2FjaGUgYXJncyA9IHsKKyAgICAgICAgLm9wID0gRFJNX1ZJVl9HRU1fQ0xFQU5fQ0FDSEUsCisgICAgICAgIC5oYW5kbGUgPSBiby0+aGFuZGxlLAorICAgICAgICAubG9naWNhbCA9ICh1aW50NjRfdCkodWludHB0cl90KWJvLT52YWRkciwKKyAgICAgICAgLmJ5dGVzID0gYm8tPnNpemUKKyAgICB9OworCisgICAgaWYgKGRybUlvY3RsKGJvLT5kcm0tPmZkLCBEUk1fSU9DVExfVklWX0dFTV9DQUNIRSwgJmFyZ3MpKQorICAgICAgICByZXR1cm4gLWVycm5vOworCisgICAgcmV0dXJuIDA7Cit9CisKKworaW50IGRybV92aXZhbnRlX2JvX21tYXAoc3RydWN0IGRybV92aXZhbnRlX2JvICpibywgdm9pZCAqKnZhZGRyKQoreworICAgIHN0cnVjdCBkcm1fdml2X2dlbV9sb2NrIGFyZ3M7CisKKyAgICBpZiAoIWJvIHx8ICF2YWRkcikKKyAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisKKyAgICAvKiBhbHJlYWR5IGxvY2tlZCAqLworICAgIGlmIChiby0+dmFkZHIpCisgICAgICAgIHJldHVybiAtRVBFUk07CisgICAgICAgIAorICAgIGFyZ3MuaGFuZGxlID0gYm8tPmhhbmRsZTsKKyAgICBhcmdzLmNhY2hlYWJsZSA9IChiby0+ZmxhZ3MgJiBEUk1fVklWX0dFTV9DQUNIRUQpID8gMSA6IDA7CisgICAgaWYgKGRybUlvY3RsKGJvLT5kcm0tPmZkLCBEUk1fSU9DVExfVklWX0dFTV9MT0NLLCAmYXJncykpCisgICAgICAgIHJldHVybiAtZXJybm87CisKKyAgICBiby0+dmFkZHIgPSAodm9pZCAqKSh1aW50cHRyX3QpYXJncy5sb2dpY2FsOworCisgICAgKnZhZGRyID0gYm8tPnZhZGRyOworICAgIHJldHVybiAwOworfQorCitpbnQgZHJtX3ZpdmFudGVfYm9fbXVubWFwKHN0cnVjdCBkcm1fdml2YW50ZV9ibyAqYm8pCit7CisgICAgc3RydWN0IGRybV92aXZfZ2VtX3VubG9jayBhcmdzOworCisgICAgaWYgKCFibyB8fCAhYm8tPnZhZGRyKQorICAgICAgICByZXR1cm4gLUVJTlZBTDsKKworICAgIGFyZ3MuaGFuZGxlID0gYm8tPmhhbmRsZTsKKyAgICBpZiAoYm8tPmZsYWdzICYgRFJNX1ZJVl9HRU1fQ0FDSEVEKSB7CisgICAgICAgIGludCBlcnIgPSBjbGVhbl9ib19jYWNoZShibyk7CisgICAgICAgIGlmIChlcnIpCisgICAgICAgICAgICByZXR1cm4gZXJyOworICAgIH0KKworICAgIGlmIChkcm1Jb2N0bChiby0+ZHJtLT5mZCwgRFJNX0lPQ1RMX1ZJVl9HRU1fVU5MT0NLLCAmYXJncykpCisgICAgICAgIHJldHVybiAtZXJybm87CisKKyAgICBiby0+dmFkZHIgPSBOVUxMOworICAgIHJldHVybiAwOworfQorCitpbnQgZHJtX3ZpdmFudGVfYm9fcXVlcnkoc3RydWN0IGRybV92aXZhbnRlX2JvICpibywKKyAgICAgICAgICAgIHVpbnQzMl90IHBhcmFtLCB1aW50NjRfdCAqdmFsdWUpCit7CisgICAgc3RydWN0IGRybV92aXZfZ2VtX3F1ZXJ5IGFyZ3MgPSB7CisgICAgICAgIC5wYXJhbSA9IHBhcmFtLAorICAgIH07CisKKyAgICBpZiAoIWJvIHx8ICF2YWx1ZSkKKyAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisKKyAgICBhcmdzLmhhbmRsZSA9IGJvLT5oYW5kbGU7CisgICAgaWYgKGRybUlvY3RsKGJvLT5kcm0tPmZkLCBEUk1fSU9DVExfVklWX0dFTV9RVUVSWSwgJmFyZ3MpKQorICAgICAgICByZXR1cm4gLWVycm5vOworCisgICAgKnZhbHVlID0gYXJncy52YWx1ZTsKKyAgICByZXR1cm4gMDsKK30KKworaW50IGRybV92aXZhbnRlX2JvX3NldF90aWxpbmcoc3RydWN0IGRybV92aXZhbnRlX2JvICpibywKKyAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBkcm1fdml2YW50ZV9ib190aWxpbmcgKnRpbGluZykKK3sKKyAgICBzdHJ1Y3QgZHJtX3Zpdl9nZW1fc2V0X3RpbGluZyBhcmdzOworCisgICAgaWYgKCFibyB8fCAhdGlsaW5nKQorICAgICAgICByZXR1cm4gLUVJTlZBTDsKKworICAgIGFyZ3MgPSAoc3RydWN0IGRybV92aXZfZ2VtX3NldF90aWxpbmcpIHsKKyAgICAgICAgLmhhbmRsZSA9IGJvLT5oYW5kbGUsCisgICAgICAgIC50aWxpbmdfbW9kZSA9IHRpbGluZy0+dGlsaW5nX21vZGUsCisgICAgICAgIC50c19tb2RlID0gdGlsaW5nLT50c19tb2RlLAorICAgICAgICAuY2xlYXJfdmFsdWUgPSB0aWxpbmctPmNsZWFyX3ZhbHVlLAorICAgIH07CisKKyAgICBpZiAoZHJtSW9jdGwoYm8tPmRybS0+ZmQsIERSTV9JT0NUTF9WSVZfR0VNX1NFVF9USUxJTkcsICZhcmdzKSkKKyAgICAgICAgcmV0dXJuIC1lcnJubzsKKworICAgIHJldHVybiAwOworfQorCitpbnQgZHJtX3ZpdmFudGVfYm9fZ2V0X3RpbGluZyhzdHJ1Y3QgZHJtX3ZpdmFudGVfYm8gKmJvLAorICAgICAgICAgICAgc3RydWN0IGRybV92aXZhbnRlX2JvX3RpbGluZyAqdGlsaW5nKQoreworICAgIHN0cnVjdCBkcm1fdml2X2dlbV9nZXRfdGlsaW5nIGFyZ3M7CisKKyAgICBpZiAoIWJvIHx8ICF0aWxpbmcpCisgICAgICAgIHJldHVybiAtRUlOVkFMOworCisgICAgYXJncy5oYW5kbGUgPSBiby0+aGFuZGxlOworICAgIGlmIChkcm1Jb2N0bChiby0+ZHJtLT5mZCwgRFJNX0lPQ1RMX1ZJVl9HRU1fR0VUX1RJTElORywgJmFyZ3MpKQorICAgICAgICByZXR1cm4gLWVycm5vOworCisgICAgdGlsaW5nLT50aWxpbmdfbW9kZSA9IGFyZ3MudGlsaW5nX21vZGU7CisgICAgdGlsaW5nLT50c19tb2RlID0gYXJncy50c19tb2RlOworICAgIHRpbGluZy0+Y2xlYXJfdmFsdWUgPSBhcmdzLmNsZWFyX3ZhbHVlOworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGluY19ib190aW1lc3RhbXAoc3RydWN0IGRybV92aXZhbnRlX2JvICpibywKKyAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGluYywgdWludDY0X3QgKnRpbWVzdGFtcCkKK3sKKyAgICBzdHJ1Y3QgZHJtX3Zpdl9nZW1fdGltZXN0YW1wIGFyZ3MgPSB7CisgICAgICAgIC5oYW5kbGUgPSBiby0+aGFuZGxlLAorICAgICAgICAuaW5jID0gaW5jLAorICAgIH07CisgICAgaWYgKGRybUlvY3RsKGJvLT5kcm0tPmZkLCBEUk1fSU9DVExfVklWX0dFTV9USU1FU1RBTVAsICZhcmdzKSkKKyAgICAgICAgcmV0dXJuIC1lcnJubzsKKworICAgIGlmICh0aW1lc3RhbXApCisgICAgICAgICp0aW1lc3RhbXAgPSBhcmdzLnRpbWVzdGFtcDsKKyAgICByZXR1cm4gMDsKK30KKworaW50IGRybV92aXZhbnRlX2JvX2luY190aW1lc3RhbXAoc3RydWN0IGRybV92aXZhbnRlX2JvICpibywKKyAgICAgICAgICAgIHVpbnQ2NF90ICp0aW1lc3RhbXApCit7CisgICAgaWYgKCFibykKKyAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAgcmV0dXJuIGluY19ib190aW1lc3RhbXAoYm8sIDEsIHRpbWVzdGFtcCk7Cit9CisKK2ludCBkcm1fdml2YW50ZV9ib19nZXRfdGltZXN0YW1wKHN0cnVjdCBkcm1fdml2YW50ZV9ibyAqYm8sCisgICAgICAgICAgICB1aW50NjRfdCAqdGltZXN0YW1wKQoreworICAgIGlmICghYm8gfHwgIXRpbWVzdGFtcCkKKyAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAgcmV0dXJuIGluY19ib190aW1lc3RhbXAoYm8sIDAsIHRpbWVzdGFtcCk7Cit9CisKK2ludCBkcm1fdml2YW50ZV9ib19yZWZfbm9kZShzdHJ1Y3QgZHJtX3ZpdmFudGVfYm8gKmJvLAorICAgICAgICAgICAgdWludDMyX3QgKm5vZGUsIHVpbnQzMl90ICp0c19ub2RlKQoreworICAgIHN0cnVjdCBkcm1fdml2X2dlbV9yZWZfbm9kZSBhcmdzOworCisgICAgaWYgKCFibyB8fCAhbm9kZSB8fCAhdHNfbm9kZSkKKyAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisKKyAgICBhcmdzLmhhbmRsZSA9IGJvLT5oYW5kbGU7CisgICAgaWYgKGRybUlvY3RsKGJvLT5kcm0tPmZkLCBEUk1fSU9DVExfVklWX0dFTV9SRUZfTk9ERSwgJmFyZ3MpKQorICAgICAgICByZXR1cm4gLWVycm5vOworCisgICAgKm5vZGUgPSBhcmdzLm5vZGU7CisgICAgKnRzX25vZGUgPSBhcmdzLnRzX25vZGU7CisgICAgcmV0dXJuIDA7Cit9CisKZGlmZiAtLWdpdCBhL3ZpdmFudGUvdml2YW50ZV9iby5oIGIvdml2YW50ZS92aXZhbnRlX2JvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTEyZjJhMwotLS0gL2Rldi9udWxsCisrKyBiL3ZpdmFudGUvdml2YW50ZV9iby5oCkBAIC0wLDAgKzEsODcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqICAgIENvcHlyaWdodCAyMDEyIC0gMjAxNyBWaXZhbnRlIENvcnBvcmF0aW9uLCBTYW50YSBDbGFyYSwgQ2FsaWZvcm5pYS4KKyogICAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyoKKyogICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisqICAgIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorKiAgICAnU29mdHdhcmUnKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisqICAgIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyogICAgZGlzdHJpYnV0ZSwgc3ViIGxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworKiAgICBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QKKyogICAgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorKgorKiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZQorKiAgICBuZXh0IHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbAorKiAgICBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisqCisqICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAnQVMgSVMnLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorKiAgICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyogICAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4KKyogICAgSU4gTk8gRVZFTlQgU0hBTEwgVklWQU5URSBBTkQvT1IgSVRTIFNVUFBMSUVSUyBCRSBMSUFCTEUgRk9SIEFOWQorKiAgICBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULAorKiAgICBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRQorKiAgICBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgX19EUk1fVklWQU5URV9IX18KKyNkZWZpbmUgX19EUk1fVklWQU5URV9IX18KKworI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHZpdmFudGVfZHJtLmg+CisKK3N0cnVjdCBkcm1fdml2YW50ZV9ibzsKK3N0cnVjdCBkcm1fdml2YW50ZTsKKworc3RydWN0IGRybV92aXZhbnRlX2JvX3RpbGluZyB7CisgICAgdWludDMyX3QgdGlsaW5nX21vZGU7CisgICAgdWludDMyX3QgdHNfbW9kZTsKKyAgICB1aW50NjRfdCBjbGVhcl92YWx1ZTsKK307CisKKy8qIGNhbGxlciBvd25zIHRoZSBkcml2ZXIgZmQuICovCitpbnQgZHJtX3ZpdmFudGVfY3JlYXRlKGludCBmZCwgc3RydWN0IGRybV92aXZhbnRlICoqZHJtcCk7Cit2b2lkIGRybV92aXZhbnRlX2Nsb3NlKHN0cnVjdCBkcm1fdml2YW50ZSAqZHJtKTsKKworaW50IGRybV92aXZhbnRlX2JvX2NyZWF0ZShzdHJ1Y3QgZHJtX3ZpdmFudGUgKmRybSwKKyAgICAgICAgICAgIHVpbnQzMl90IGZsYWdzLCB1aW50MzJfdCBzaXplLCBzdHJ1Y3QgZHJtX3ZpdmFudGVfYm8gKipib3ApOworCisvKiBjcmVhdGUgYm8gd2l0aCBhdXhpbGxhcnkgdGlsZS1zdGF0dXMgYm8uICovCitpbnQgZHJtX3ZpdmFudGVfYm9fY3JlYXRlX3dpdGhfdHMoc3RydWN0IGRybV92aXZhbnRlICpkcm0sCisgICAgICAgICAgICB1aW50MzJfdCBmbGFncywgdWludDMyX3Qgc2l6ZSwgc3RydWN0IGRybV92aXZhbnRlX2JvICoqYm9wKTsKKworLyogY2FsbGVyIG93bnMgdGhlIGZkLiAqLworaW50IGRybV92aXZhbnRlX2JvX2V4cG9ydF90b19mZChzdHJ1Y3QgZHJtX3ZpdmFudGVfYm8gKmJvLCBpbnQgKnBmZCk7CisvKiBjYWxsZXIgc3RpbGwgb3ducyB0aGUgZmQgdXBvbiByZXR1cm4uICovCitpbnQgZHJtX3ZpdmFudGVfYm9faW1wb3J0X2Zyb21fZmQoc3RydWN0IGRybV92aXZhbnRlICpkcm0sIGludCBmZCwKKyAgICAgICAgc3RydWN0IGRybV92aXZhbnRlX2JvICoqYm9wKTsKKwordm9pZCBkcm1fdml2YW50ZV9ib19kZXN0cm95KHN0cnVjdCBkcm1fdml2YW50ZV9ibyAqYm8pOworCisvKiBkbyBub3QgY2xvc2UgdGhlIGhhbmRsZSBkaXJlY3RseS4gKi8KK2ludCBkcm1fdml2YW50ZV9ib19nZXRfaGFuZGxlKHN0cnVjdCBkcm1fdml2YW50ZV9ibyAqYm8sIHVpbnQzMl90ICpoYW5kbGUpOworCitpbnQgZHJtX3ZpdmFudGVfYm9fbW1hcChzdHJ1Y3QgZHJtX3ZpdmFudGVfYm8gKmJvLCB2b2lkICoqdmFkZHIpOworaW50IGRybV92aXZhbnRlX2JvX211bm1hcChzdHJ1Y3QgZHJtX3ZpdmFudGVfYm8gKmJvKTsKKworaW50IGRybV92aXZhbnRlX2JvX3F1ZXJ5KHN0cnVjdCBkcm1fdml2YW50ZV9ibyAqYm8sCisgICAgICAgICAgICB1aW50MzJfdCBwYXJhbSwgdWludDY0X3QgKnZhbHVlKTsKKworaW50IGRybV92aXZhbnRlX2JvX3NldF90aWxpbmcoc3RydWN0IGRybV92aXZhbnRlX2JvICpibywKKyAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBkcm1fdml2YW50ZV9ib190aWxpbmcgKnRpbGluZyk7CitpbnQgZHJtX3ZpdmFudGVfYm9fZ2V0X3RpbGluZyhzdHJ1Y3QgZHJtX3ZpdmFudGVfYm8gKmJvLAorICAgICAgICAgICAgc3RydWN0IGRybV92aXZhbnRlX2JvX3RpbGluZyAqdGlsaW5nKTsKKworLyogb3V0cHV0IGluYydlZCB0aW1lc3RhbXAsIG9wdGlvbmFsLiAqLworaW50IGRybV92aXZhbnRlX2JvX2luY190aW1lc3RhbXAoc3RydWN0IGRybV92aXZhbnRlX2JvICpibywKKyAgICAgICAgICAgIHVpbnQ2NF90ICp0aW1lc3RhbXApOworaW50IGRybV92aXZhbnRlX2JvX2dldF90aW1lc3RhbXAoc3RydWN0IGRybV92aXZhbnRlX2JvICpibywKKyAgICAgICAgICAgIHVpbnQ2NF90ICp0aW1lc3RhbXApOworCitpbnQgZHJtX3ZpdmFudGVfYm9fcmVmX25vZGUoc3RydWN0IGRybV92aXZhbnRlX2JvICpibywKKyAgICAgICAgICAgIHVpbnQzMl90ICpub2RlLCB1aW50MzJfdCAqdHNfbm9kZSk7CisKKyNlbmRpZiAvKiBfX0RSTV9WSVZBTlRFX0hfXyAqLwo=