From mboxrd@z Thu Jan 1 00:00:00 1970 From: Juergen Gross Subject: [PATCH v5 10/11] xen: modify page table construction Date: Thu, 25 Feb 2016 12:33:36 +0100 Message-ID: <1456400017-5789-11-git-send-email-jgross@suse.com> References: <1456400017-5789-1-git-send-email-jgross@suse.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1456400017-5789-1-git-send-email-jgross@suse.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: grub-devel@gnu.org Cc: Juergen Gross , phcoder@gmail.com, daniel.kiper@oracle.com, mchang@suse.com, xen-devel@lists.xen.org List-Id: xen-devel@lists.xenproject.org TW9kaWZ5IHRoZSBwYWdlIHRhYmxlIGNvbnN0cnVjdGlvbiB0byBhbGxvdyBtdWx0aXBsZSB2aXJ0 dWFsIHJlZ2lvbnMKdG8gYmUgbWFwcGVkLiBUaGlzIGlzIGRvbmUgYXMgcHJlcGFyYXRpb24gZm9y IHJlbW92aW5nIHRoZSBwMm0gbGlzdApmcm9tIHRoZSBpbml0aWFsIGtlcm5lbCBtYXBwaW5nIGlu IG9yZGVyIHRvIHN1cHBvcnQgaHVnZSBwdiBkb21haW5zLgoKVGhpcyBhbGxvd3MgYSBjbGVhbmVy IGFwcHJvYWNoIGZvciBtYXBwaW5nIHRoZSByZWxvY2F0b3IgcGFnZSBieQp1c2luZyB0aGlzIGNh cGFiaWxpdHkuCgpUaGUgaW50ZXJmYWNlIHRvIHRoZSBhc3NlbWJsZXIgbGV2ZWwgb2YgdGhlIHJl bG9jYXRvciBoYXMgdG8gYmUgY2hhbmdlZAppbiBvcmRlciB0byBiZSBhYmxlIHRvIHByb2Nlc3Mg bXVsdGlwbGUgcGFnZSB0YWJsZSBhcmVhcy4KClNpZ25lZC1vZmYtYnk6IEp1ZXJnZW4gR3Jvc3Mg PGpncm9zc0BzdXNlLmNvbT4KLS0tClY0OiBhbGlnbiB2YXJpYWJsZXMgaW4gYXNzZW1ibHkgc291 cmNlcwogICAgdXNlIHNlcGFyYXRlIHN0cnVjdHVyZSBkZWZpbmUgYXMgcmVxdWVzdGVkIGJ5IERh bmllbCBLaXBlcgoKVjM6IHVzZSBjb25zdGFudHMgaW5zdGVhZCBvZiBudW1iZXJzIGFzIHJlcXVl c3RlZCBieSBEYW5pZWwgS2lwZXIKICAgIGFkZCBsb3RzIG9mIGNvbW1lbnRzIHRvIGFzc2VtYmx5 IGNvZGUgYXMgcmVxdWVzdGVkIGJ5IERhbmllbCBLaXBlcgotLS0KIGdydWItY29yZS9saWIvaTM4 Ni94ZW4vcmVsb2NhdG9yLlMgICB8ICA4OCArKysrKystLS0tCiBncnViLWNvcmUvbGliL3g4Nl82 NC94ZW4vcmVsb2NhdG9yLlMgfCAxMzUgKysrKysrLS0tLS0tLS0KIGdydWItY29yZS9saWIveGVu L3JlbG9jYXRvci5jICAgICAgICB8ICAyOCArKy0KIGdydWItY29yZS9sb2FkZXIvaTM4Ni94ZW4u YyAgICAgICAgICB8IDMyOSArKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLQogaW5j bHVkZS9ncnViL2kzODYvbWVtb3J5LmggICAgICAgICAgIHwgICA3ICsKIGluY2x1ZGUvZ3J1Yi94 ZW4vcmVsb2NhdG9yLmggICAgICAgICB8ICAgNiArLQogNiBmaWxlcyBjaGFuZ2VkLCAzNjAgaW5z ZXJ0aW9ucygrKSwgMjMzIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2dydWItY29yZS9saWIv aTM4Ni94ZW4vcmVsb2NhdG9yLlMgYi9ncnViLWNvcmUvbGliL2kzODYveGVuL3JlbG9jYXRvci5T CmluZGV4IDY5NGE1NGMuLmY4ZDEzNWEgMTAwNjQ0Ci0tLSBhL2dydWItY29yZS9saWIvaTM4Ni94 ZW4vcmVsb2NhdG9yLlMKKysrIGIvZ3J1Yi1jb3JlL2xpYi9pMzg2L3hlbi9yZWxvY2F0b3IuUwpA QCAtMTYsNiArMTYsOCBAQAogICogIGFsb25nIHdpdGggR1JVQi4gIElmIG5vdCwgc2VlIDxodHRw Oi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KICAqLwogCisjaW5jbHVkZSA8Z3J1Yi9pMzg2L21l bW9yeS5oPgorI2luY2x1ZGUgPGdydWIvaTM4Ni90eXBlcy5oPgogI2luY2x1ZGUgPGdydWIvc3lt Ym9sLmg+CiAjaW5jbHVkZSA8Z3J1Yi94ZW4uaD4KIApAQCAtMjMsNzggKzI1LDg2IEBACiAKIFZB UklBQkxFKGdydWJfcmVsb2NhdG9yX3hlbl9yZW1hcF9zdGFydCkKIExPQ0FMKGJhc2UpOgotCS8q IG1vdiBpbW0zMiwgJWVieCAqLworCS8qIFJlbWFwIHRoZSByZW1hcHBlciB0byBpdCdzIG5ldyBh ZGRyZXNzLiAqLworCS8qIG1vdiBpbW0zMiwgJWVieCAtICVlYng6IG5ldyB2aXJ0dWFsIGFkZHJl c3Mgb2YgcmVtYXBwZXIgKi8KIAkuYnl0ZQkweGJiCiBWQVJJQUJMRShncnViX3JlbG9jYXRvcl94 ZW5fcmVtYXBwZXJfdmlydCkKIAkubG9uZwkwCiAKLQkvKiBtb3YgaW1tMzIsICVlY3ggKi8KKwkv KiBtb3YgaW1tMzIsICVlY3ggLSAlZWN4OiBsb3cgcGFydCBvZiBwYWdlIHRhYmxlIGVudHJ5ICov CiAJLmJ5dGUJMHhiOQogVkFSSUFCTEUoZ3J1Yl9yZWxvY2F0b3JfeGVuX3JlbWFwcGVyX21hcCkK IAkubG9uZwkwCiAKLQkvKiBtb3YgaW1tMzIsICVlZHggKi8KKwkvKiBtb3YgaW1tMzIsICVlZHgg IC0gJWVkeDogaGlnaCBwYXJ0IG9mIHBhZ2UgdGFibGUgZW50cnkgKi8KIAkuYnl0ZQkweGJhCiBW QVJJQUJMRShncnViX3JlbG9jYXRvcl94ZW5fcmVtYXBwZXJfbWFwX2hpZ2gpCiAJLmxvbmcJMAog Ci0JbW92bAklZWJ4LCAlZWJwCisJbW92bAklZWJ4LCAlZWJwCS8qICVlYnggaXMgY2xvYmJlcmVk IGJ5IGh5cGVyY2FsbCAqLwogCi0JbW92bCAgICAkMiwgJWVzaQorCW1vdmwgICAgJFVWTUZfSU5W TFBHLCAlZXNpCS8qIGVzaTogZmxhZ3MgKGludi4gc2luZ2xlIGVudHJ5KSAqLwogCW1vdmwgICAg JF9fSFlQRVJWSVNPUl91cGRhdGVfdmFfbWFwcGluZywgJWVheAogCWludCAgICAgJDB4ODIKIAog CW1vdmwJJWVicCwgJWVieAogCWFkZGwgICAkKExPQ0FMKGNvbnQpIC0gTE9DQUwoYmFzZSkpLCAl ZWJ4CiAKLQlqbXAgKiVlYngKKwlqbXAgKiVlYngJCS8qIENvbnRpbnVlIHdpdGggbmV3IHZpcnR1 YWwgYWRkcmVzcyAqLwogCiBMT0NBTChjb250KToKLQl4b3JsCSVlYXgsICVlYXgKLQltb3ZsCSVl YXgsICVlYnAKKwkvKiBNb2RpZnkgbWFwcGluZ3Mgb2YgbmV3IHBhZ2UgdGFibGVzIHRvIGJlIHJl YWQtb25seS4gKi8KKwkvKiBtb3YgaW1tMzIsICVlYXggKi8KKwkuYnl0ZQkweGI4CitWQVJJQUJM RShncnViX3JlbG9jYXRvcl94ZW5fcGFnaW5nX2FyZWFzX2FkZHIpCisJLmxvbmcJMAorCW1vdmwJ JWVheCwgJWVieAogMToKKwltb3ZsCTAoJWVieCksICVlYnAJLyogR2V0IHN0YXJ0IHBmbiBvZiB0 aGUgY3VycmVudCBhcmVhICovCisJbW92bAlHUlVCX1RBUkdFVF9TSVpFT0ZfTE9ORyglZWJ4KSwg JWVjeAkvKiBHZXQgIyBvZiBwZyB0YWJsZXMgKi8KKwl0ZXN0bAklZWN4LCAlZWN4CS8qIDAgLT4g bGFzdCBhcmVhIHJlYWNoZWQgKi8KKwlqegkzZgorCWFkZGwJJCgyICogR1JVQl9UQVJHRVRfU0la RU9GX0xPTkcpLCAlZWJ4CisJbW92bAklZWJ4LCAlZXNwCS8qIFNhdmUgY3VycmVudCBhcmVhIHBv aW50ZXIgKi8KIAorMjoKKwltb3ZsCSVlY3gsICVlZGkKIAkvKiBtb3YgaW1tMzIsICVlYXggKi8K IAkuYnl0ZQkweGI4CiBWQVJJQUJMRShncnViX3JlbG9jYXRvcl94ZW5fbWZuX2xpc3QpCiAJLmxv bmcJMAotCW1vdmwJJWVheCwgJWVkaQotCW1vdmwJJWVicCwgJWVheAotCW1vdmwgICAgMCglZWRp LCAlZWF4LCA0KSwgJWVjeAotCi0JLyogbW92IGltbTMyLCAlZWJ4ICovCi0JLmJ5dGUJMHhiYgot VkFSSUFCTEUoZ3J1Yl9yZWxvY2F0b3JfeGVuX3BhZ2luZ19zdGFydCkKLQkubG9uZwkwCi0Jc2hs bAkkMTIsICVlYXgKLQlhZGRsCSVlYXgsICVlYngKKwltb3ZsICAgIDAoJWVheCwgJWVicCwgNCks ICVlY3gJLyogbWZuICovCisJbW92bAklZWJwLCAlZWJ4CisJc2hsbAkkUEFHRV9TSElGVCwgJWVi eAkvKiB2aXJ0dWFsIGFkZHJlc3MgKDE6MSBtYXBwaW5nKSAqLwogCW1vdmwgICAgJWVjeCwgJWVk eAotCXNobGwgICAgJDEyLCAgJWVjeAotCXNocmwgICAgJDIwLCAgJWVkeAotCW9ybCAgICAgJDUs ICVlY3gKLQltb3ZsICAgICQyLCAlZXNpCisJc2hsbCAgICAkUEFHRV9TSElGVCwgICVlY3gJLyog cHJlcGFyZSBwdGUgbG93IHBhcnQgKi8KKwlzaHJsICAgICQoMzIgLSBQQUdFX1NISUZUKSwgICVl ZHgJLyogcHRlIGhpZ2ggcGFydCAqLworCW9ybCAgICAgJChHUlVCX1BBR0VfUFJFU0VOVCB8IEdS VUJfUEFHRV9VU0VSKSwgJWVjeAkvKiBwdGUgbG93ICovCisJbW92bCAgICAkVVZNRl9JTlZMUEcs ICVlc2kKIAltb3ZsICAgICRfX0hZUEVSVklTT1JfdXBkYXRlX3ZhX21hcHBpbmcsICVlYXgKLQlp bnQgICAgICQweDgyCisJaW50ICAgICAkMHg4MgkJLyogcGFyYW1ldGVyczogZWF4LCBlYngsIGVj eCwgZWR4LCBlc2kgKi8KIAotCWluY2wJJWVicAotCS8qIG1vdiBpbW0zMiwgJWVjeCAqLwotCS5i eXRlCTB4YjkKLVZBUklBQkxFKGdydWJfcmVsb2NhdG9yX3hlbl9wYWdpbmdfc2l6ZSkKLQkubG9u ZwkwCi0JY21wbAklZWJwLCAlZWN4CisJaW5jbAklZWJwCQkvKiBuZXh0IHBmbiAqLworCW1vdmwJ JWVkaSwgJWVjeAogCi0JamEJMWIKKwlsb29wCTJiCiAKKwltb3YJJWVzcCwgJWVieAkvKiByZXN0 b3JlIGFyZWEgcG9uaXRlciAqLworCWptcAkxYgorCiszOgorCS8qIFN3aXRjaCBwYWdlIHRhYmxl czogcGluIG5ldyBMMyBwdCwgbG9hZCBjcjMsIHVucGluIG9sZCBMMy4gKi8KIAkvKiBtb3YgaW1t MzIsICVlYnggKi8KIAkuYnl0ZQkweGJiCiBWQVJJQUJMRShncnViX3JlbG9jYXRvcl94ZW5fbW11 X29wX2FkZHIpCiAJLmxvbmcgIDAKLQltb3ZsICAgJDMsICVlY3gKLQltb3ZsICAgJDAsICVlZHgK LQltb3ZsICAgJDB4N0ZGMCwgJWVzaQorCW1vdmwgICAkMywgJWVjeAkJLyogMyBtbXUgb3BzICov CisJbW92bCAgICQwLCAlZWR4CQkvKiBwZG9uZSAobm90IHVzZWQpICovCisJbW92bCAgICRET01J RF9TRUxGLCAlZXNpCiAJbW92bCAgICRfX0hZUEVSVklTT1JfbW11ZXh0X29wLCAlZWF4CiAJaW50 ICAgICAkMHg4MgogCisJLyogQ29udGludWUgaW4gdmlydHVhbCBrZXJuZWwgbWFwcGluZy4gKi8K IAkvKiBtb3YgaW1tMzIsICVlYXggKi8KIAkuYnl0ZQkweGI4CiBWQVJJQUJMRShncnViX3JlbG9j YXRvcl94ZW5fcmVtYXBfY29udGludWUpCkBAIC0xMDIsNiArMTEyLDEwIEBAIFZBUklBQkxFKGdy dWJfcmVsb2NhdG9yX3hlbl9yZW1hcF9jb250aW51ZSkKIAogCWptcCAqJWVheAogCisJLnAyYWxp Z24gMgorVkFSSUFCTEUoZ3J1Yl9yZWxvY2F0b3JfeGVuX3BhZ2luZ19hcmVhcykKKwkubG9uZwkw LCAwLCAwLCAwLCAwLCAwLCAwLCAwCisKIFZBUklBQkxFKGdydWJfcmVsb2NhdG9yX3hlbl9tbXVf b3ApCiAJLnNwYWNlIDI1NgogCkBAIC0xMDksNiArMTIzLDcgQEAgVkFSSUFCTEUoZ3J1Yl9yZWxv Y2F0b3JfeGVuX3JlbWFwX2VuZCkKIAogCiBWQVJJQUJMRShncnViX3JlbG9jYXRvcl94ZW5fc3Rh cnQpCisJLyogVW5tYXAgb2xkIHJlbWFwcGVyIGFyZWEuICovCiAJLyogbW92IGltbTMyLCAlZWF4 ICovCiAJLmJ5dGUJMHhiOAogVkFSSUFCTEUoZ3J1Yl9yZWxvY2F0b3JfeGVuX3JlbWFwcGVyX3Zp cnQyKQpAQCAtMTE2LDE0ICsxMzEsMTQgQEAgVkFSSUFCTEUoZ3J1Yl9yZWxvY2F0b3JfeGVuX3Jl bWFwcGVyX3ZpcnQyKQogCiAJbW92bCAgICAlZWF4LCAlZWRpCiAKLQl4b3JsICAgICVlY3gsICVl Y3gKKwl4b3JsICAgICVlY3gsICVlY3gJLyogSW52YWxpZCBwdGUgKi8KIAl4b3JsICAgICVlZHgs ICVlZHgKIAotCW1vdmwgICAgJDIsICVlc2kKKwltb3ZsICAgICRVVk1GX0lOVkxQRywgJWVzaQog CW1vdmwgICAgJF9fSFlQRVJWSVNPUl91cGRhdGVfdmFfbWFwcGluZywgJWVheAogCWludCAgICAg JDB4ODIKIAotCisJLyogUHJlcGFyZSByZWdpc3RlcnMgZm9yIHN0YXJ0aW5nIGtlcm5lbC4gKi8K IAkvKiBtb3YgaW1tMzIsICVlYXggKi8KIAkuYnl0ZQkweGI4CiBWQVJJQUJMRShncnViX3JlbG9j YXRvcl94ZW5fc3RhY2spCkBAIC0xNDUsNiArMTYwLDcgQEAgVkFSSUFCTEUoZ3J1Yl9yZWxvY2F0 b3JfeGVuX3N0YXJ0X2luZm8pCiBWQVJJQUJMRShncnViX3JlbG9jYXRvcl94ZW5fZW50cnlfcG9p bnQpCiAJLmxvbmcJMAogCisJLyogTm93IHN0YXJ0IHRoZSBuZXcga2VybmVsLiAqLwogCWptcCAq JWVheAogCiBWQVJJQUJMRShncnViX3JlbG9jYXRvcl94ZW5fZW5kKQpkaWZmIC0tZ2l0IGEvZ3J1 Yi1jb3JlL2xpYi94ODZfNjQveGVuL3JlbG9jYXRvci5TIGIvZ3J1Yi1jb3JlL2xpYi94ODZfNjQv eGVuL3JlbG9jYXRvci5TCmluZGV4IDkyZTllNzIuLjM4YWUxNTcgMTAwNjQ0Ci0tLSBhL2dydWIt Y29yZS9saWIveDg2XzY0L3hlbi9yZWxvY2F0b3IuUworKysgYi9ncnViLWNvcmUvbGliL3g4Nl82 NC94ZW4vcmVsb2NhdG9yLlMKQEAgLTE2LDk1ICsxNiw4NiBAQAogICogIGFsb25nIHdpdGggR1JV Qi4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KICAqLwogCisj aW5jbHVkZSA8Z3J1Yi94ODZfNjQvbWVtb3J5Lmg+CisjaW5jbHVkZSA8Z3J1Yi94ODZfNjQvdHlw ZXMuaD4KICNpbmNsdWRlIDxncnViL3N5bWJvbC5oPgogI2luY2x1ZGUgPGdydWIveGVuLmg+CiAK Ky8qIE1hY3JvIHRvIGxvYWQgYW4gaW1tNjQgdmFsdWUgc3RvcmVkIGJ5IHRoZSBDLXBhcnQgaW50 byAlcmF4OiAqLworI2RlZmluZSBNT1ZfSU1NNjRfUkFYKHZhcikgLmJ5dGUgMHg0OCwgMHhiODsg VkFSSUFCTEUodmFyKTsgLnF1YWQgMAorCiAJLnAyYWxpZ24JNAkvKiBmb3JjZSAxNi1ieXRlIGFs aWdubWVudCAqLwogCiBWQVJJQUJMRShncnViX3JlbG9jYXRvcl94ZW5fcmVtYXBfc3RhcnQpCiBM T0NBTChiYXNlKToKLQkvKiBtb3YgaW1tNjQsICVyYXggKi8KLQkuYnl0ZSAJMHg0OAotCS5ieXRl CTB4YjgKLVZBUklBQkxFKGdydWJfcmVsb2NhdG9yX3hlbl9yZW1hcHBlcl92aXJ0KQotCS5xdWFk CTAKKwkvKiBSZW1hcCB0aGUgcmVtYXBwZXIgdG8gaXQncyBuZXcgYWRkcmVzcy4gKi8KKwlNT1Zf SU1NNjRfUkFYKGdydWJfcmVsb2NhdG9yX3hlbl9yZW1hcHBlcl92aXJ0KQogCi0JbW92cSAgICAl cmF4LCAlcmRpCi0JbW92cSAgICAlcmF4LCAlcmJ4CisJbW92cSAgICAlcmF4LCAlcmRpCS8qICVy ZGk6IG5ldyB2aXJ0dWFsIGFkZHJlc3Mgb2YgcmVtYXBwZXIgKi8KKwltb3ZxICAgICVyYXgsICVy YngJLyogUmVtZW1iZXIgbmV3IHZpcnR1YWwgYWRkcmVzcyAqLwogCi0JLyogbW92IGltbTY0LCAl cmF4ICovCi0JLmJ5dGUgCTB4NDgKLQkuYnl0ZQkweGI4Ci1WQVJJQUJMRShncnViX3JlbG9jYXRv cl94ZW5fcmVtYXBwZXJfbWFwKQotCS5xdWFkCTAKKwlNT1ZfSU1NNjRfUkFYKGdydWJfcmVsb2Nh dG9yX3hlbl9yZW1hcHBlcl9tYXApCiAKLQltb3ZxICAgICVyYXgsICVyc2kKKwltb3ZxICAgICVy YXgsICVyc2kJLyogJXJzaTogcGFnZSB0YWJsZSBlbnRyeSAqLwogCi0JbW92cSAgICAkMiwgJXJk eAorCW1vdnEgICAgJFVWTUZfSU5WTFBHLCAlcmR4CS8qICVyZHg6IGZsYWdzIChpbnYuIHNpbmds ZSBlbnRyeSkgKi8KIAltb3ZxICAgICRfX0hZUEVSVklTT1JfdXBkYXRlX3ZhX21hcHBpbmcsICVy YXgKLQlzeXNjYWxsCisJc3lzY2FsbAkJCS8qIERvIHRoZSByZW1hcCBvcGVyYXRpb24gKi8KIAog CWFkZHEgICAkKExPQ0FMKGNvbnQpIC0gTE9DQUwoYmFzZSkpLCAlcmJ4CiAKLQlqbXAgKiVyYngK KwlqbXAgKiVyYngJCS8qIENvbnRpbnVlIHdpdGggbmV3IHZpcnR1YWwgYWRkcmVzcyAqLwogCiBM T0NBTChjb250KToKLQkKLQkvKiBtb3YgaW1tNjQsICVyY3ggKi8KLQkuYnl0ZSAJMHg0OAotCS5i eXRlCTB4YjkKLVZBUklBQkxFKGdydWJfcmVsb2NhdG9yX3hlbl9wYWdpbmdfc2l6ZSkKLQkucXVh ZAkwCisJLyogTW9kaWZ5IG1hcHBpbmdzIG9mIG5ldyBwYWdlIHRhYmxlcyB0byBiZSByZWFkLW9u bHkuICovCisJTU9WX0lNTTY0X1JBWChncnViX3JlbG9jYXRvcl94ZW5fbWZuX2xpc3QpCiAKLQkv KiBtb3YgaW1tNjQsICVyYXggKi8KLQkuYnl0ZSAJMHg0OAotCS5ieXRlCTB4YjgKLVZBUklBQkxF KGdydWJfcmVsb2NhdG9yX3hlbl9wYWdpbmdfc3RhcnQpCi0JLnF1YWQJMAorCW1vdnEJJXJheCwg JXJieAkvKiAlcmJ4IGlzIHRoZSBiYXNlIG9mIHRoZSBwMm0gbGlzdCAqLworCWxlYXEJRVhUX0Mo Z3J1Yl9yZWxvY2F0b3JfeGVuX3BhZ2luZ19hcmVhcykgKCVyaXApLCAlcjgKIAotCW1vdnEJJXJh eCwgJXIxMgotCi0JLyogbW92IGltbTY0LCAlcmF4ICovCi0JLmJ5dGUgCTB4NDgKLQkuYnl0ZQkw eGI4Ci1WQVJJQUJMRShncnViX3JlbG9jYXRvcl94ZW5fbWZuX2xpc3QpCi0JLnF1YWQJMAotCi0J bW92cQklcmF4LCAlcnNpCiAxOgorCW1vdnEJMCglcjgpLCAlcjEyCS8qIEdldCBzdGFydCBwZm4g b2YgdGhlIGN1cnJlbnQgYXJlYSAqLworCW1vdnEJR1JVQl9UQVJHRVRfU0laRU9GX0xPTkcoJXI4 KSwgJXJjeAkvKiBHZXQgIyBvZiBwZyB0YWJsZXMgKi8KKwl0ZXN0cQklcmN4LCAlcmN4CS8qIDAg LT4gbGFzdCBhcmVhIHJlYWNoZWQgKi8KKwlqegkzZgorMjoKIAltb3ZxCSVyMTIsICVyZGkKLQlt b3ZxICAgICVyc2ksICVyYngKLQltb3ZxICAgIDAoJXJzaSksICVyc2kKLQlzaGxxICAgICQxMiwg ICVyc2kKLQlvcnEgICAgICQ1LCAlcnNpCi0JbW92cSAgICAkMiwgJXJkeAotCW1vdnEgICAgJXJj eCwgJXI5CisJc2hscQkkUEFHRV9TSElGVCwgJXJkaQkvKiB2aXJ0dWFsIGFkZHJlc3MgKDE6MSBt YXBwaW5nKSAqLworCW1vdnEgICAgKCVyYngsICVyMTIsIDgpLCAlcnNpCS8qIG1mbiAqLworCXNo bHEgICAgJFBBR0VfU0hJRlQsICAlcnNpCisJb3JxICAgICAkKEdSVUJfUEFHRV9QUkVTRU5UIHwg R1JVQl9QQUdFX1VTRVIpLCAlcnNpCS8qIEJ1aWxkIHB0ZSAqLworCW1vdnEgICAgJFVWTUZfSU5W TFBHLCAlcmR4CisJbW92cSAgICAlcmN4LCAlcjkJLyogJXJjeCBjbG9iYmVyZWQgYnkgaHlwZXJj YWxsICovCiAJbW92cSAgICAkX19IWVBFUlZJU09SX3VwZGF0ZV92YV9tYXBwaW5nLCAlcmF4CiAJ c3lzY2FsbAogCiAJbW92cSAgICAlcjksICVyY3gKLQlhZGRxICAgICQ4LCAlcmJ4Ci0JYWRkcSAg ICAkNDA5NiwgJXIxMgotCW1vdnEgICAgJXJieCwgJXJzaQorCWluY3EJJXIxMgkJLyogbmV4dCBw Zm4gKi8KIAotCWxvb3AgMWIKKwlsb29wIDJiCiAKLQlsZWFxICAgTE9DQUwobW11X29wKSAoJXJp cCksICVyZGkKLQltb3ZxICAgJDMsICVyc2kKLQltb3ZxICAgJDAsICVyZHgKLQltb3ZxICAgJDB4 N0ZGMCwgJXIxMAorCWFkZHEJJCgyICogR1JVQl9UQVJHRVRfU0laRU9GX0xPTkcpLCAlcjgJLyog bmV4dCBwZyB0YWJsZSBhcmVhICovCisJam1wCTFiCisKKzM6CisJLyogU3dpdGNoIHBhZ2UgdGFi bGVzOiBwaW4gbmV3IEw0IHB0LCBsb2FkIGNyMywgdW5waW4gb2xkIEw0LiAqLworCWxlYXEgICBF WFRfQyhncnViX3JlbG9jYXRvcl94ZW5fbW11X29wKSAoJXJpcCksICVyZGkKKwltb3ZxICAgJDMs ICVyc2kJCS8qIDMgbW11IG9wcyAqLworCW1vdnEgICAkMCwgJXJkeAkJLyogcGRvbmUgKG5vdCB1 c2VkKSAqLworCW1vdnEgICAkRE9NSURfU0VMRiwgJXIxMAogCW1vdnEgICAkX19IWVBFUlZJU09S X21tdWV4dF9vcCwgJXJheAogCXN5c2NhbGwKIAotCS8qIG1vdiBpbW02NCwgJXJheCAqLwotCS5i eXRlIAkweDQ4Ci0JLmJ5dGUJMHhiOAotVkFSSUFCTEUoZ3J1Yl9yZWxvY2F0b3JfeGVuX3JlbWFw X2NvbnRpbnVlKQotCS5xdWFkCTAKKwkvKiBDb250aW51ZSBpbiB2aXJ0dWFsIGtlcm5lbCBtYXBw aW5nLiAqLworCU1PVl9JTU02NF9SQVgoZ3J1Yl9yZWxvY2F0b3JfeGVuX3JlbWFwX2NvbnRpbnVl KQogCiAJam1wIColcmF4CiAKLUxPQ0FMKG1tdV9vcCk6CisJLnAyYWxpZ24gMworVkFSSUFCTEUo Z3J1Yl9yZWxvY2F0b3JfeGVuX3BhZ2luZ19hcmVhcykKKwkvKiBhcnJheSBvZiBzdGFydCwgc2l6 ZSBwYWlycywgc2l6ZSAwIGlzIGVuZCBtYXJrZXIgKi8KKwkucXVhZAkwLCAwLCAwLCAwLCAwLCAw LCAwLCAwCisKIFZBUklBQkxFKGdydWJfcmVsb2NhdG9yX3hlbl9tbXVfb3ApCiAJLnNwYWNlIDI1 NgogCkBAIC0xMTIsNDYgKzEwMywzMiBAQCBWQVJJQUJMRShncnViX3JlbG9jYXRvcl94ZW5fcmVt YXBfZW5kKQogCiAKIFZBUklBQkxFKGdydWJfcmVsb2NhdG9yX3hlbl9zdGFydCkKLQkvKiBtb3Yg aW1tNjQsICVyYXggKi8KLQkuYnl0ZSAJMHg0OAotCS5ieXRlCTB4YjgKLVZBUklBQkxFKGdydWJf cmVsb2NhdG9yX3hlbl9yZW1hcHBlcl92aXJ0MikKLQkucXVhZAkwCisJLyogVW5tYXAgb2xkIHJl bWFwcGVyIGFyZWEuICovCisJTU9WX0lNTTY0X1JBWChncnViX3JlbG9jYXRvcl94ZW5fcmVtYXBw ZXJfdmlydDIpCiAKIAltb3ZxICAgICVyYXgsICVyZGkKIAotCXhvcnEgICAgJXJheCwgJXJheAor CXhvcnEgICAgJXJheCwgJXJheAkvKiBJbnZhbGlkIHB0ZSAqLwogCW1vdnEgICAgJXJheCwgJXJz aQogCi0JbW92cSAgICAkMiwgJXJkeAorCW1vdnEgICAgJFVWTUZfSU5WTFBHLCAlcmR4CiAJbW92 cSAgICAkX19IWVBFUlZJU09SX3VwZGF0ZV92YV9tYXBwaW5nLCAlcmF4CiAJc3lzY2FsbAogCi0K LQkvKiBtb3YgaW1tNjQsICVyYXggKi8KLQkuYnl0ZSAJMHg0OAotCS5ieXRlCTB4YjgKLVZBUklB QkxFKGdydWJfcmVsb2NhdG9yX3hlbl9zdGFjaykKLQkucXVhZAkwCisJLyogUHJlcGFyZSByZWdp c3RlcnMgZm9yIHN0YXJ0aW5nIGtlcm5lbC4gKi8KKwlNT1ZfSU1NNjRfUkFYKGdydWJfcmVsb2Nh dG9yX3hlbl9zdGFjaykKIAogCW1vdnEJJXJheCwgJXJzcAogCi0JLyogbW92IGltbTY0LCAlcmF4 ICovCi0JLmJ5dGUgCTB4NDgKLQkuYnl0ZQkweGI4Ci1WQVJJQUJMRShncnViX3JlbG9jYXRvcl94 ZW5fc3RhcnRfaW5mbykKLQkucXVhZAkwCisJTU9WX0lNTTY0X1JBWChncnViX3JlbG9jYXRvcl94 ZW5fc3RhcnRfaW5mbykKIAogCW1vdnEJJXJheCwgJXJzaQogCiAJY2xkCiAKLQkvKiBtb3YgaW1t NjQsICVyYXggKi8KLQkuYnl0ZSAJMHg0OAotCS5ieXRlCTB4YjgKLVZBUklBQkxFKGdydWJfcmVs b2NhdG9yX3hlbl9lbnRyeV9wb2ludCkKLQkucXVhZAkwCisJTU9WX0lNTTY0X1JBWChncnViX3Jl bG9jYXRvcl94ZW5fZW50cnlfcG9pbnQpCiAKKwkvKiBOb3cgc3RhcnQgdGhlIG5ldyBrZXJuZWwu ICovCiAJam1wIColcmF4CiAKIFZBUklBQkxFKGdydWJfcmVsb2NhdG9yX3hlbl9lbmQpCmRpZmYg LS1naXQgYS9ncnViLWNvcmUvbGliL3hlbi9yZWxvY2F0b3IuYyBiL2dydWItY29yZS9saWIveGVu L3JlbG9jYXRvci5jCmluZGV4IDhmNDI3ZDMuLmEwNWIyNTMgMTAwNjQ0Ci0tLSBhL2dydWItY29y ZS9saWIveGVuL3JlbG9jYXRvci5jCisrKyBiL2dydWItY29yZS9saWIveGVuL3JlbG9jYXRvci5j CkBAIC0yOSw2ICsyOSwxMSBAQAogCiB0eXBlZGVmIGdydWJfYWRkcl90IGdydWJfeGVuX3JlZ190 OwogCitzdHJ1Y3QgZ3J1Yl9yZWxvY2F0b3JfeGVuX3BhZ2luZ19hcmVhIHsKKyAgZ3J1Yl94ZW5f cmVnX3Qgc3RhcnQ7CisgIGdydWJfeGVuX3JlZ190IHNpemU7Cit9OworCiBleHRlcm4gZ3J1Yl91 aW50OF90IGdydWJfcmVsb2NhdG9yX3hlbl9zdGFydDsKIGV4dGVybiBncnViX3VpbnQ4X3QgZ3J1 Yl9yZWxvY2F0b3JfeGVuX2VuZDsKIGV4dGVybiBncnViX3VpbnQ4X3QgZ3J1Yl9yZWxvY2F0b3Jf eGVuX3JlbWFwX3N0YXJ0OwpAQCAtMzYsMTUgKzQxLDE2IEBAIGV4dGVybiBncnViX3VpbnQ4X3Qg Z3J1Yl9yZWxvY2F0b3JfeGVuX3JlbWFwX2VuZDsKIGV4dGVybiBncnViX3hlbl9yZWdfdCBncnVi X3JlbG9jYXRvcl94ZW5fc3RhY2s7CiBleHRlcm4gZ3J1Yl94ZW5fcmVnX3QgZ3J1Yl9yZWxvY2F0 b3JfeGVuX3N0YXJ0X2luZm87CiBleHRlcm4gZ3J1Yl94ZW5fcmVnX3QgZ3J1Yl9yZWxvY2F0b3Jf eGVuX2VudHJ5X3BvaW50OwotZXh0ZXJuIGdydWJfeGVuX3JlZ190IGdydWJfcmVsb2NhdG9yX3hl bl9wYWdpbmdfc3RhcnQ7Ci1leHRlcm4gZ3J1Yl94ZW5fcmVnX3QgZ3J1Yl9yZWxvY2F0b3JfeGVu X3BhZ2luZ19zaXplOwogZXh0ZXJuIGdydWJfeGVuX3JlZ190IGdydWJfcmVsb2NhdG9yX3hlbl9y ZW1hcHBlcl92aXJ0OwogZXh0ZXJuIGdydWJfeGVuX3JlZ190IGdydWJfcmVsb2NhdG9yX3hlbl9y ZW1hcHBlcl92aXJ0MjsKIGV4dGVybiBncnViX3hlbl9yZWdfdCBncnViX3JlbG9jYXRvcl94ZW5f cmVtYXBwZXJfbWFwOwogZXh0ZXJuIGdydWJfeGVuX3JlZ190IGdydWJfcmVsb2NhdG9yX3hlbl9t Zm5fbGlzdDsKK2V4dGVybiBzdHJ1Y3QgZ3J1Yl9yZWxvY2F0b3JfeGVuX3BhZ2luZ19hcmVhCisg IGdydWJfcmVsb2NhdG9yX3hlbl9wYWdpbmdfYXJlYXNbWEVOX01BWF9NQVBQSU5HU107CiBleHRl cm4gZ3J1Yl94ZW5fcmVnX3QgZ3J1Yl9yZWxvY2F0b3JfeGVuX3JlbWFwX2NvbnRpbnVlOwogI2lm ZGVmIF9faTM4Nl9fCiBleHRlcm4gZ3J1Yl94ZW5fcmVnX3QgZ3J1Yl9yZWxvY2F0b3JfeGVuX21t dV9vcF9hZGRyOworZXh0ZXJuIGdydWJfeGVuX3JlZ190IGdydWJfcmVsb2NhdG9yX3hlbl9wYWdp bmdfYXJlYXNfYWRkcjsKIGV4dGVybiBncnViX3hlbl9yZWdfdCBncnViX3JlbG9jYXRvcl94ZW5f cmVtYXBwZXJfbWFwX2hpZ2g7CiAjZW5kaWYKIGV4dGVybiBtbXVleHRfb3BfdCBncnViX3JlbG9j YXRvcl94ZW5fbW11X29wWzNdOwpAQCAtNjEsNiArNjcsNyBAQCBncnViX3JlbG9jYXRvcl94ZW5f Ym9vdCAoc3RydWN0IGdydWJfcmVsb2NhdG9yICpyZWwsCiB7CiAgIGdydWJfZXJyX3QgZXJyOwog ICB2b2lkICpyZWxzdDsKKyAgaW50IGk7CiAgIGdydWJfcmVsb2NhdG9yX2NodW5rX3QgY2gsIGNo X3RyYW1wOwogICBncnViX3hlbl9tZm5fdCAqbWZuX2xpc3QgPQogICAgIChncnViX3hlbl9tZm5f dCAqKSBncnViX3hlbl9zdGFydF9wYWdlX2FkZHItPm1mbl9saXN0OwpAQCAtNzcsOCArODQsMTEg QEAgZ3J1Yl9yZWxvY2F0b3JfeGVuX2Jvb3QgKHN0cnVjdCBncnViX3JlbG9jYXRvciAqcmVsLAog ICBncnViX3JlbG9jYXRvcl94ZW5fc3RhY2sgPSBzdGF0ZS5zdGFjazsKICAgZ3J1Yl9yZWxvY2F0 b3JfeGVuX3N0YXJ0X2luZm8gPSBzdGF0ZS5zdGFydF9pbmZvOwogICBncnViX3JlbG9jYXRvcl94 ZW5fZW50cnlfcG9pbnQgPSBzdGF0ZS5lbnRyeV9wb2ludDsKLSAgZ3J1Yl9yZWxvY2F0b3JfeGVu X3BhZ2luZ19zdGFydCA9IHN0YXRlLnBhZ2luZ19zdGFydCA8PCAxMjsKLSAgZ3J1Yl9yZWxvY2F0 b3JfeGVuX3BhZ2luZ19zaXplID0gc3RhdGUucGFnaW5nX3NpemU7CisgIGZvciAoaSA9IDA7IGkg PCBYRU5fTUFYX01BUFBJTkdTOyBpKyspCisgICAgeworICAgICAgZ3J1Yl9yZWxvY2F0b3JfeGVu X3BhZ2luZ19hcmVhc1tpXS5zdGFydCA9IHN0YXRlLnBhZ2luZ19zdGFydFtpXTsKKyAgICAgIGdy dWJfcmVsb2NhdG9yX3hlbl9wYWdpbmdfYXJlYXNbaV0uc2l6ZSA9IHN0YXRlLnBhZ2luZ19zaXpl W2ldOworICAgIH0KICAgZ3J1Yl9yZWxvY2F0b3JfeGVuX3JlbWFwcGVyX3ZpcnQgPSByZW1hcHBl cl92aXJ0OwogICBncnViX3JlbG9jYXRvcl94ZW5fcmVtYXBwZXJfdmlydDIgPSByZW1hcHBlcl92 aXJ0OwogICBncnViX3JlbG9jYXRvcl94ZW5fcmVtYXBfY29udGludWUgPSB0cmFtcG9saW5lX3Zp cnQ7CkBAIC04OCwxMCArOTgsMTIgQEAgZ3J1Yl9yZWxvY2F0b3JfeGVuX2Jvb3QgKHN0cnVjdCBn cnViX3JlbG9jYXRvciAqcmVsLAogICBncnViX3JlbG9jYXRvcl94ZW5fcmVtYXBwZXJfbWFwX2hp Z2ggPSAobWZuX2xpc3RbcmVtYXBwZXJfcGZuXSA+PiAyMCk7CiAgIGdydWJfcmVsb2NhdG9yX3hl bl9tbXVfb3BfYWRkciA9IChjaGFyICopICZncnViX3JlbG9jYXRvcl94ZW5fbW11X29wCiAgICAg LSAoY2hhciAqKSAmZ3J1Yl9yZWxvY2F0b3JfeGVuX3JlbWFwX3N0YXJ0ICsgcmVtYXBwZXJfdmly dDsKKyAgZ3J1Yl9yZWxvY2F0b3JfeGVuX3BhZ2luZ19hcmVhc19hZGRyID0KKyAgICAoY2hhciAq KSAmZ3J1Yl9yZWxvY2F0b3JfeGVuX3BhZ2luZ19hcmVhcworICAgIC0gKGNoYXIgKikgJmdydWJf cmVsb2NhdG9yX3hlbl9yZW1hcF9zdGFydCArIHJlbWFwcGVyX3ZpcnQ7CiAjZW5kaWYKIAotICBn cnViX3JlbG9jYXRvcl94ZW5fbWZuX2xpc3QgPSBzdGF0ZS5tZm5fbGlzdAotICAgICsgc3RhdGUu cGFnaW5nX3N0YXJ0ICogc2l6ZW9mIChncnViX2FkZHJfdCk7CisgIGdydWJfcmVsb2NhdG9yX3hl bl9tZm5fbGlzdCA9IHN0YXRlLm1mbl9saXN0OwogCiAgIGdydWJfbWVtc2V0IChncnViX3JlbG9j YXRvcl94ZW5fbW11X29wLCAwLAogCSAgICAgICBzaXplb2YgKGdydWJfcmVsb2NhdG9yX3hlbl9t bXVfb3ApKTsKQEAgLTEwMCw5ICsxMTIsOSBAQCBncnViX3JlbG9jYXRvcl94ZW5fYm9vdCAoc3Ry dWN0IGdydWJfcmVsb2NhdG9yICpyZWwsCiAjZWxzZQogICBncnViX3JlbG9jYXRvcl94ZW5fbW11 X29wWzBdLmNtZCA9IE1NVUVYVF9QSU5fTDRfVEFCTEU7CiAjZW5kaWYKLSAgZ3J1Yl9yZWxvY2F0 b3JfeGVuX21tdV9vcFswXS5hcmcxLm1mbiA9IG1mbl9saXN0W3N0YXRlLnBhZ2luZ19zdGFydF07 CisgIGdydWJfcmVsb2NhdG9yX3hlbl9tbXVfb3BbMF0uYXJnMS5tZm4gPSBtZm5fbGlzdFtzdGF0 ZS5wYWdpbmdfc3RhcnRbMF1dOwogICBncnViX3JlbG9jYXRvcl94ZW5fbW11X29wWzFdLmNtZCA9 IE1NVUVYVF9ORVdfQkFTRVBUUjsKLSAgZ3J1Yl9yZWxvY2F0b3JfeGVuX21tdV9vcFsxXS5hcmcx Lm1mbiA9IG1mbl9saXN0W3N0YXRlLnBhZ2luZ19zdGFydF07CisgIGdydWJfcmVsb2NhdG9yX3hl bl9tbXVfb3BbMV0uYXJnMS5tZm4gPSBtZm5fbGlzdFtzdGF0ZS5wYWdpbmdfc3RhcnRbMF1dOwog ICBncnViX3JlbG9jYXRvcl94ZW5fbW11X29wWzJdLmNtZCA9IE1NVUVYVF9VTlBJTl9UQUJMRTsK ICAgZ3J1Yl9yZWxvY2F0b3JfeGVuX21tdV9vcFsyXS5hcmcxLm1mbiA9CiAgICAgbWZuX2xpc3Rb Z3J1Yl94ZW5fc3RhcnRfcGFnZV9hZGRyLT5wdF9iYXNlID4+IDEyXTsKZGlmZiAtLWdpdCBhL2dy dWItY29yZS9sb2FkZXIvaTM4Ni94ZW4uYyBiL2dydWItY29yZS9sb2FkZXIvaTM4Ni94ZW4uYwpp bmRleCA0NjZmMGMwLi41YmNmZGU4IDEwMDY0NAotLS0gYS9ncnViLWNvcmUvbG9hZGVyL2kzODYv eGVuLmMKKysrIGIvZ3J1Yi1jb3JlL2xvYWRlci9pMzg2L3hlbi5jCkBAIC0zOSw5ICszOSwzNCBA QAogI2luY2x1ZGUgPGdydWIveGVuLmg+CiAjaW5jbHVkZSA8Z3J1Yi94ZW5fZmlsZS5oPgogI2lu Y2x1ZGUgPGdydWIvbGludXguaD4KKyNpbmNsdWRlIDxncnViL2kzODYvbWVtb3J5Lmg+CiAKIEdS VUJfTU9EX0xJQ0VOU0UgKCJHUEx2MysiKTsKIAorI2lmZGVmIF9feDg2XzY0X18KKyNkZWZpbmUg TlVNQkVSX09GX0xFVkVMUwk0CisjZGVmaW5lIElOVEVSTUVESUFURV9PUgkJKEdSVUJfUEFHRV9Q UkVTRU5UIHwgR1JVQl9QQUdFX1JXIHwgR1JVQl9QQUdFX1VTRVIpCisjZGVmaW5lIFZJUlRfTUFT SwkJMHgwMDAwZmZmZmZmZmZmZmZmVUxMCisjZWxzZQorI2RlZmluZSBOVU1CRVJfT0ZfTEVWRUxT CTMKKyNkZWZpbmUgSU5URVJNRURJQVRFX09SCQkoR1JVQl9QQUdFX1BSRVNFTlQgfCBHUlVCX1BB R0VfUlcpCisjZGVmaW5lIFZJUlRfTUFTSwkJMHgwMDAwMDAwMGZmZmZmZmZmVUxMCisjZGVmaW5l IEhZUEVSVklTT1JfUFVEX0FERFJFU1MJMHhjMDAwMDAwMFVMTAorI2VuZGlmCisKK3N0cnVjdCBn cnViX3hlbl9tYXBwaW5nX2x2bCB7CisgIGdydWJfdWludDY0X3QgdmlydF9zdGFydDsKKyAgZ3J1 Yl91aW50NjRfdCB2aXJ0X2VuZDsKKyAgZ3J1Yl91aW50NjRfdCBwZm5fc3RhcnQ7CisgIGdydWJf dWludDY0X3Qgbl9wdF9wYWdlczsKK307CisKK3N0cnVjdCBncnViX3hlbl9tYXBwaW5nIHsKKyAg Z3J1Yl91aW50NjRfdCAqd2hlcmU7CisgIHN0cnVjdCBncnViX3hlbl9tYXBwaW5nX2x2bCBhcmVh OworICBzdHJ1Y3QgZ3J1Yl94ZW5fbWFwcGluZ19sdmwgbHZsc1tOVU1CRVJfT0ZfTEVWRUxTXTsK K307CisKIHN0cnVjdCB4ZW5fbG9hZGVyX3N0YXRlIHsKICAgc3RydWN0IGdydWJfcmVsb2NhdG9y ICpyZWxvY2F0b3I7CiAgIHN0cnVjdCBncnViX3JlbG9jYXRvcl94ZW5fc3RhdGUgc3RhdGU7CkBA IC01MSwxMiArNzYsMTMgQEAgc3RydWN0IHhlbl9sb2FkZXJfc3RhdGUgewogICBzdHJ1Y3Qgc3Rh cnRfaW5mbyAqdmlydF9zdGFydF9pbmZvOwogICBncnViX3hlbl9tZm5fdCBjb25zb2xlX3BmbjsK ICAgZ3J1Yl91aW50NjRfdCBtYXhfYWRkcjsKLSAgZ3J1Yl91aW50NjRfdCAqdmlydF9wZ3RhYmxl OwotICBncnViX3VpbnQ2NF90IHBndGJsX3N0YXJ0OwogICBncnViX3VpbnQ2NF90IHBndGJsX2Vu ZDsKICAgc3RydWN0IHhlbl9tdWx0aWJvb3RfbW9kX2xpc3QgKm1vZHVsZV9pbmZvX3BhZ2U7CiAg IGdydWJfdWludDY0X3QgbW9kdWxlc190YXJnZXRfc3RhcnQ7CiAgIGdydWJfc2l6ZV90IG5fbW9k dWxlczsKKyAgc3RydWN0IGdydWJfeGVuX21hcHBpbmcgKm1hcF9yZWxvYzsKKyAgc3RydWN0IGdy dWJfeGVuX21hcHBpbmcgbWFwcGluZ3NbWEVOX01BWF9NQVBQSU5HU107CisgIGludCBuX21hcHBp bmdzOwogICBpbnQgbG9hZGVkOwogfTsKIApAQCAtNjQsOSArOTAsOCBAQCBzdGF0aWMgc3RydWN0 IHhlbl9sb2FkZXJfc3RhdGUgeGVuX3N0YXRlOwogCiBzdGF0aWMgZ3J1Yl9kbF90IG15X21vZDsK IAotI2RlZmluZSBQQUdFX1NJWkUgNDA5NgorI2RlZmluZSBQQUdFX1NJWkUgKDFVTCA8PCBQQUdF X1NISUZUKQogI2RlZmluZSBNQVhfTU9EVUxFUyAoUEFHRV9TSVpFIC8gc2l6ZW9mIChzdHJ1Y3Qg eGVuX211bHRpYm9vdF9tb2RfbGlzdCkpCi0jZGVmaW5lIFBBR0VfU0hJRlQgMTIKICNkZWZpbmUg U1RBQ0tfU0laRSAxMDQ4NTc2CiAjZGVmaW5lIEFERElUSU9OQUxfU0laRSAoMSA8PCAxOSkKICNk ZWZpbmUgQUxJR05fU0laRSAoMSA8PCAyMikKQEAgLTc5LDEwMCArMTA0LDE2MyBAQCBwYWdlMm9m ZnNldCAoZ3J1Yl91aW50NjRfdCBwYWdlKQogICByZXR1cm4gcGFnZSA8PCBQQUdFX1NISUZUOwog fQogCi0jaWZkZWYgX194ODZfNjRfXwotI2RlZmluZSBOVU1CRVJfT0ZfTEVWRUxTIDQKLSNkZWZp bmUgSU5URVJNRURJQVRFX09SIDcKLSNlbHNlCi0jZGVmaW5lIE5VTUJFUl9PRl9MRVZFTFMgMwot I2RlZmluZSBJTlRFUk1FRElBVEVfT1IgMworc3RhdGljIGdydWJfZXJyX3QKK2dldF9wZ3RhYmxl X3NpemUgKGdydWJfdWludDY0X3QgZnJvbSwgZ3J1Yl91aW50NjRfdCB0bywgZ3J1Yl91aW50NjRf dCBwZm4pCit7CisgIHN0cnVjdCBncnViX3hlbl9tYXBwaW5nICptYXAsICptYXBfY21wOworICBn cnViX3VpbnQ2NF90IG1hc2ssIGJpdHM7CisgIGludCBpLCBtOworCisgIGlmICh4ZW5fc3RhdGUu bl9tYXBwaW5ncyA9PSBYRU5fTUFYX01BUFBJTkdTKQorICAgIHJldHVybiBncnViX2Vycm9yIChH UlVCX0VSUl9CVUcsICJ0b28gbWFueSBtYXBwZWQgYXJlYXMiKTsKKworICBncnViX2RwcmludGYg KCJ4ZW4iLCAiZ2V0X3BndGFibGVfc2l6ZSAlZCBmcm9tPSVsbHgsIHRvPSVsbHgsIHBmbj0lbGx4 XG4iLAorCQl4ZW5fc3RhdGUubl9tYXBwaW5ncywgKHVuc2lnbmVkIGxvbmcgbG9uZykgZnJvbSwK KwkJKHVuc2lnbmVkIGxvbmcgbG9uZykgdG8sICh1bnNpZ25lZCBsb25nIGxvbmcpIHBmbik7CisK KyAgbWFwID0geGVuX3N0YXRlLm1hcHBpbmdzICsgeGVuX3N0YXRlLm5fbWFwcGluZ3M7CisgIGdy dWJfbWVtc2V0IChtYXAsIDAsIHNpemVvZiAoKm1hcCkpOworCisgIG1hcC0+YXJlYS52aXJ0X3N0 YXJ0ID0gZnJvbSAmIFZJUlRfTUFTSzsKKyAgbWFwLT5hcmVhLnZpcnRfZW5kID0gKHRvIC0gMSkg JiBWSVJUX01BU0s7CisgIG1hcC0+YXJlYS5uX3B0X3BhZ2VzID0gMDsKKworICBmb3IgKGkgPSBO VU1CRVJfT0ZfTEVWRUxTIC0gMTsgaSA+PSAwOyBpLS0pCisgICAgeworICAgICAgbWFwLT5sdmxz W2ldLnBmbl9zdGFydCA9IHBmbiArIG1hcC0+YXJlYS5uX3B0X3BhZ2VzOworICAgICAgaWYgKGkg PT0gTlVNQkVSX09GX0xFVkVMUyAtIDEpCisJeworCSAgaWYgKHhlbl9zdGF0ZS5uX21hcHBpbmdz ID09IDApCisJICAgIHsKKwkgICAgICBtYXAtPmx2bHNbaV0udmlydF9zdGFydCA9IDA7CisJICAg ICAgbWFwLT5sdmxzW2ldLnZpcnRfZW5kID0gVklSVF9NQVNLOworCSAgICAgIG1hcC0+bHZsc1tp XS5uX3B0X3BhZ2VzID0gMTsKKwkgICAgICBtYXAtPmFyZWEubl9wdF9wYWdlcysrOworCSAgICB9 CisJICBjb250aW51ZTsKKwl9CisKKyAgICAgIGJpdHMgPSBQQUdFX1NISUZUICsgKGkgKyAxKSAq IExPR19QT0lOVEVSU19QRVJfUEFHRTsKKyAgICAgIG1hc2sgPSAoMVVMTCA8PCBiaXRzKSAtIDE7 CisgICAgICBtYXAtPmx2bHNbaV0udmlydF9zdGFydCA9IG1hcC0+YXJlYS52aXJ0X3N0YXJ0ICYg fm1hc2s7CisgICAgICBtYXAtPmx2bHNbaV0udmlydF9lbmQgPSBtYXAtPmFyZWEudmlydF9lbmQg fCBtYXNrOworI2lmZGVmIF9faTM4Nl9fCisgICAgICAvKiBQQUUgd2FudHMgbGFzdCByb290IGRp cmVjdG9yeSBwcmVzZW50LiAqLworICAgICAgaWYgKGkgPT0gMSAmJiB0byA8PSBIWVBFUlZJU09S X1BVRF9BRERSRVNTICYmIHhlbl9zdGF0ZS5uX21hcHBpbmdzID09IDApCisJbWFwLT5sdmxzW2ld LnZpcnRfZW5kID0gVklSVF9NQVNLOwogI2VuZGlmCisgICAgICBmb3IgKG0gPSAwOyBtIDwgeGVu X3N0YXRlLm5fbWFwcGluZ3M7IG0rKykKKwl7CisJICBtYXBfY21wID0geGVuX3N0YXRlLm1hcHBp bmdzICsgbTsKKwkgIGlmIChtYXBfY21wLT5sdmxzW2ldLnZpcnRfc3RhcnQgPT0gbWFwX2NtcC0+ bHZsc1tpXS52aXJ0X2VuZCkKKwkgICAgY29udGludWU7CisJICBpZiAobWFwLT5sdmxzW2ldLnZp cnRfc3RhcnQgPj0gbWFwX2NtcC0+bHZsc1tpXS52aXJ0X3N0YXJ0ICYmCisJICAgICAgbWFwLT5s dmxzW2ldLnZpcnRfZW5kIDw9IG1hcF9jbXAtPmx2bHNbaV0udmlydF9lbmQpCisJICAgeworCSAg ICAgbWFwLT5sdmxzW2ldLnZpcnRfc3RhcnQgPSAwOworCSAgICAgbWFwLT5sdmxzW2ldLnZpcnRf ZW5kID0gMDsKKwkgICAgIGJyZWFrOworCSAgIH0KKwkgICBpZiAobWFwLT5sdmxzW2ldLnZpcnRf c3RhcnQgPj0gbWFwX2NtcC0+bHZsc1tpXS52aXJ0X3N0YXJ0ICYmCisJICAgICAgIG1hcC0+bHZs c1tpXS52aXJ0X3N0YXJ0IDw9IG1hcF9jbXAtPmx2bHNbaV0udmlydF9lbmQpCisJICAgICBtYXAt Pmx2bHNbaV0udmlydF9zdGFydCA9IG1hcF9jbXAtPmx2bHNbaV0udmlydF9lbmQgKyAxOworCSAg IGlmIChtYXAtPmx2bHNbaV0udmlydF9lbmQgPj0gbWFwX2NtcC0+bHZsc1tpXS52aXJ0X3N0YXJ0 ICYmCisJICAgICAgIG1hcC0+bHZsc1tpXS52aXJ0X2VuZCA8PSBtYXBfY21wLT5sdmxzW2ldLnZp cnRfZW5kKQorCSAgICAgbWFwLT5sdmxzW2ldLnZpcnRfZW5kID0gbWFwX2NtcC0+bHZsc1tpXS52 aXJ0X3N0YXJ0IC0gMTsKKwl9CisgICAgICBpZiAobWFwLT5sdmxzW2ldLnZpcnRfc3RhcnQgPCBt YXAtPmx2bHNbaV0udmlydF9lbmQpCisJbWFwLT5sdmxzW2ldLm5fcHRfcGFnZXMgPQorCSAgKCht YXAtPmx2bHNbaV0udmlydF9lbmQgLSBtYXAtPmx2bHNbaV0udmlydF9zdGFydCkgPj4gYml0cykg KyAxOworICAgICAgbWFwLT5hcmVhLm5fcHRfcGFnZXMgKz0gbWFwLT5sdmxzW2ldLm5fcHRfcGFn ZXM7CisgICAgICBncnViX2RwcmludGYgKCJ4ZW4iLCAiZ2V0X3BndGFibGVfc2l6ZSBsZXZlbCAl ZDogdmlydCAlbGx4LSVsbHggJWQgcHRzXG4iLAorCQkgICAgaSwgKHVuc2lnbmVkIGxvbmcgbG9u ZykgIG1hcC0+bHZsc1tpXS52aXJ0X3N0YXJ0LAorCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykg IG1hcC0+bHZsc1tpXS52aXJ0X2VuZCwKKwkJICAgIChpbnQpIG1hcC0+bHZsc1tpXS5uX3B0X3Bh Z2VzKTsKKyAgICB9CisKKyAgZ3J1Yl9kcHJpbnRmICgieGVuIiwgImdldF9wZ3RhYmxlX3NpemUg cmV0dXJuOiAlZCBwYWdlIHRhYmxlc1xuIiwKKwkJKGludCkgbWFwLT5hcmVhLm5fcHRfcGFnZXMp OworCisgIHhlbl9zdGF0ZS5zdGF0ZS5wYWdpbmdfc3RhcnRbeGVuX3N0YXRlLm5fbWFwcGluZ3Nd ID0gcGZuOworICB4ZW5fc3RhdGUuc3RhdGUucGFnaW5nX3NpemVbeGVuX3N0YXRlLm5fbWFwcGlu Z3NdID0gbWFwLT5hcmVhLm5fcHRfcGFnZXM7CisKKyAgcmV0dXJuIEdSVUJfRVJSX05PTkU7Cit9 CisKK3N0YXRpYyBncnViX3VpbnQ2NF90ICoKK2dldF9wZ190YWJsZV92aXJ0IChpbnQgbWFwcGlu ZywgaW50IGxldmVsKQoreworICBncnViX3VpbnQ2NF90IHBmbjsKKyAgc3RydWN0IGdydWJfeGVu X21hcHBpbmcgKm1hcDsKKworICBtYXAgPSB4ZW5fc3RhdGUubWFwcGluZ3MgKyBtYXBwaW5nOwor ICBwZm4gPSBtYXAtPmx2bHNbbGV2ZWxdLnBmbl9zdGFydCAtIG1hcC0+bHZsc1tOVU1CRVJfT0Zf TEVWRUxTIC0gMV0ucGZuX3N0YXJ0OworICByZXR1cm4gbWFwLT53aGVyZSArIHBmbiAqIFBPSU5U RVJTX1BFUl9QQUdFOworfQogCiBzdGF0aWMgZ3J1Yl91aW50NjRfdAotZ2V0X3BndGFibGVfc2l6 ZSAoZ3J1Yl91aW50NjRfdCB0b3RhbF9wYWdlcywgZ3J1Yl91aW50NjRfdCB2aXJ0X2Jhc2UpCitn ZXRfcGdfdGFibGVfcHJvdCAoaW50IGxldmVsLCBncnViX3VpbnQ2NF90IHBmbikKIHsKLSAgaWYg KCF2aXJ0X2Jhc2UpCi0gICAgdG90YWxfcGFnZXMrKzsKLSAgZ3J1Yl91aW50NjRfdCByZXQgPSAw OwotICBncnViX3VpbnQ2NF90IGxsID0gdG90YWxfcGFnZXM7Ci0gIGludCBpOwotICBmb3IgKGkg PSAwOyBpIDwgTlVNQkVSX09GX0xFVkVMUzsgaSsrKQorICBpbnQgbTsKKyAgZ3J1Yl91aW50NjRf dCBwZm5fcywgcGZuX2U7CisKKyAgaWYgKGxldmVsID4gMCkKKyAgICByZXR1cm4gSU5URVJNRURJ QVRFX09SOworICBmb3IgKG0gPSAwOyBtIDwgeGVuX3N0YXRlLm5fbWFwcGluZ3M7IG0rKykKICAg ICB7Ci0gICAgICBsbCA9IChsbCArIFBPSU5URVJTX1BFUl9QQUdFIC0gMSkgPj4gTE9HX1BPSU5U RVJTX1BFUl9QQUdFOwotICAgICAgLyogUEFFIHdhbnRzIGFsbCA0IHJvb3QgZGlyZWN0b3JpZXMg cHJlc2VudC4gICovCi0jaWZkZWYgX19pMzg2X18KLSAgICAgIGlmIChpID09IDEpCi0JbGwgPSA0 OwotI2VuZGlmCi0gICAgICByZXQgKz0gbGw7CisgICAgICBwZm5fcyA9IHhlbl9zdGF0ZS5tYXBw aW5nc1ttXS5sdmxzW05VTUJFUl9PRl9MRVZFTFMgLSAxXS5wZm5fc3RhcnQ7CisgICAgICBwZm5f ZSA9IHhlbl9zdGF0ZS5tYXBwaW5nc1ttXS5hcmVhLm5fcHRfcGFnZXMgKyBwZm5fczsKKyAgICAg IGlmIChwZm4gPj0gcGZuX3MgJiYgcGZuIDwgcGZuX2UpCisJcmV0dXJuIEdSVUJfUEFHRV9QUkVT RU5UIHwgR1JVQl9QQUdFX1VTRVI7CiAgICAgfQotICBmb3IgKGkgPSAxOyBpIDwgTlVNQkVSX09G X0xFVkVMUzsgaSsrKQotICAgIGlmICh2aXJ0X2Jhc2UgPj4gKFBBR0VfU0hJRlQgKyBpICogTE9H X1BPSU5URVJTX1BFUl9QQUdFKSkKLSAgICAgIHJldCsrOwotICByZXR1cm4gcmV0OworICByZXR1 cm4gR1JVQl9QQUdFX1BSRVNFTlQgfCBHUlVCX1BBR0VfUlcgfCBHUlVCX1BBR0VfVVNFUjsKIH0K IAogc3RhdGljIHZvaWQKLWdlbmVyYXRlX3BhZ2VfdGFibGUgKGdydWJfdWludDY0X3QgKndoZXJl LCBncnViX3VpbnQ2NF90IHBhZ2luZ19zdGFydCwKLQkJICAgICBncnViX3VpbnQ2NF90IHBhZ2lu Z19lbmQsIGdydWJfdWludDY0X3QgdG90YWxfcGFnZXMsCi0JCSAgICAgZ3J1Yl91aW50NjRfdCB2 aXJ0X2Jhc2UsIGdydWJfeGVuX21mbl90ICptZm5fbGlzdCkKK2dlbmVyYXRlX3BhZ2VfdGFibGUg KGdydWJfeGVuX21mbl90ICptZm5fbGlzdCkKIHsKLSAgaWYgKCF2aXJ0X2Jhc2UpCi0gICAgcGFn aW5nX2VuZCsrOworICBpbnQgbCwgbTEsIG0yOworICBsb25nIHAsIHBfcywgcF9lOworICBncnVi X3VpbnQ2NF90IHN0YXJ0LCBlbmQsIHBmbjsKKyAgZ3J1Yl91aW50NjRfdCAqcGc7CisgIHN0cnVj dCBncnViX3hlbl9tYXBwaW5nX2x2bCAqbHZsOwogCi0gIGdydWJfdWludDY0X3QgbHhbTlVNQkVS X09GX0xFVkVMU10sIGx4c1tOVU1CRVJfT0ZfTEVWRUxTXTsKLSAgZ3J1Yl91aW50NjRfdCBubHgs IG5scywgc3ogPSAwOwotICBpbnQgbDsKKyAgZm9yIChtMSA9IDA7IG0xIDwgeGVuX3N0YXRlLm5f bWFwcGluZ3M7IG0xKyspCisgICAgZ3J1Yl9tZW1zZXQgKHhlbl9zdGF0ZS5tYXBwaW5nc1ttMV0u d2hlcmUsIDAsCisJCSB4ZW5fc3RhdGUubWFwcGluZ3NbbTFdLmFyZWEubl9wdF9wYWdlcyAqIFBB R0VfU0laRSk7CiAKLSAgbmx4ID0gcGFnaW5nX2VuZDsKLSAgbmxzID0gdmlydF9iYXNlID4+IFBB R0VfU0hJRlQ7Ci0gIGZvciAobCA9IDA7IGwgPCBOVU1CRVJfT0ZfTEVWRUxTOyBsKyspCisgIGZv ciAobCA9IE5VTUJFUl9PRl9MRVZFTFMgLSAxOyBsID49IDA7IGwtLSkKICAgICB7Ci0gICAgICBu bHggPSAobmx4ICsgUE9JTlRFUlNfUEVSX1BBR0UgLSAxKSA+PiBMT0dfUE9JTlRFUlNfUEVSX1BB R0U7Ci0gICAgICAvKiBQQUUgd2FudHMgYWxsIDQgcm9vdCBkaXJlY3RvcmllcyBwcmVzZW50LiAg Ki8KLSNpZmRlZiBfX2kzODZfXwotICAgICAgaWYgKGwgPT0gMSkKLQlubHggPSA0OwotI2VuZGlm Ci0gICAgICBseFtsXSA9IG5seDsKLSAgICAgIHN6ICs9IGx4W2xdOwotICAgICAgbHhzW2xdID0g bmxzICYgKFBPSU5URVJTX1BFUl9QQUdFIC0gMSk7Ci0gICAgICBpZiAobmxzICYmIGwgIT0gMCkK LQlzeisrOwotICAgICAgbmxzID4+PSBMT0dfUE9JTlRFUlNfUEVSX1BBR0U7Ci0gICAgfQotCi0g IGdydWJfdWludDY0X3QgbHA7Ci0gIGdydWJfdWludDY0X3QgajsKLSAgZ3J1Yl91aW50NjRfdCAq cGcgPSAoZ3J1Yl91aW50NjRfdCAqKSB3aGVyZTsKLSAgaW50IHByID0gMDsKLQotICBncnViX21l bXNldCAocGcsIDAsIHN6ICogUEFHRV9TSVpFKTsKLQotICBscCA9IHBhZ2luZ19zdGFydCArIGx4 W05VTUJFUl9PRl9MRVZFTFMgLSAxXTsKLSAgZm9yIChsID0gTlVNQkVSX09GX0xFVkVMUyAtIDE7 IGwgPj0gMTsgbC0tKQotICAgIHsKLSAgICAgIGlmIChseHNbbF0gfHwgcHIpCi0JcGdbMF0gPSBw YWdlMm9mZnNldCAobWZuX2xpc3RbbHArK10pIHwgSU5URVJNRURJQVRFX09SOwotICAgICAgaWYg KHByKQotCXBnICs9IFBPSU5URVJTX1BFUl9QQUdFOwotICAgICAgZm9yIChqID0gMDsgaiA8IGx4 W2wgLSAxXTsgaisrKQotCXBnW2ogKyBseHNbbF1dID0gcGFnZTJvZmZzZXQgKG1mbl9saXN0W2xw KytdKSB8IElOVEVSTUVESUFURV9PUjsKLSAgICAgIHBnICs9IGx4W2xdICogUE9JTlRFUlNfUEVS X1BBR0U7Ci0gICAgICBpZiAobHhzW2xdKQotCXByID0gMTsKLSAgICB9Ci0KLSAgaWYgKGx4c1sw XSB8fCBwcikKLSAgICBwZ1swXSA9IHBhZ2Uyb2Zmc2V0IChtZm5fbGlzdFt0b3RhbF9wYWdlc10p IHwgNTsKLSAgaWYgKHByKQotICAgIHBnICs9IFBPSU5URVJTX1BFUl9QQUdFOwotCi0gIGZvciAo aiA9IDA7IGogPCBwYWdpbmdfZW5kOyBqKyspCi0gICAgewotICAgICAgaWYgKGogPj0gcGFnaW5n X3N0YXJ0ICYmIGogPCBscCkKLQlwZ1tqICsgbHhzWzBdXSA9IHBhZ2Uyb2Zmc2V0IChtZm5fbGlz dFtqXSkgfCA1OwotICAgICAgZWxzZQotCXBnW2ogKyBseHNbMF1dID0gcGFnZTJvZmZzZXQgKG1m bl9saXN0W2pdKSB8IDc7CisgICAgICBmb3IgKG0xID0gMDsgbTEgPCB4ZW5fc3RhdGUubl9tYXBw aW5nczsgbTErKykKKwl7CisJICBzdGFydCA9IHhlbl9zdGF0ZS5tYXBwaW5nc1ttMV0ubHZsc1ts XS52aXJ0X3N0YXJ0OworCSAgZW5kID0geGVuX3N0YXRlLm1hcHBpbmdzW20xXS5sdmxzW2xdLnZp cnRfZW5kOworCSAgcGcgPSBnZXRfcGdfdGFibGVfdmlydChtMSwgbCk7CisJICBmb3IgKG0yID0g MDsgbTIgPCB4ZW5fc3RhdGUubl9tYXBwaW5nczsgbTIrKykKKwkgICAgeworCSAgICAgIGx2bCA9 IChsID4gMCkgPyB4ZW5fc3RhdGUubWFwcGluZ3NbbTJdLmx2bHMgKyBsIC0gMQorCQkJICAgIDog Jnhlbl9zdGF0ZS5tYXBwaW5nc1ttMl0uYXJlYTsKKwkgICAgICBpZiAobCA+IDAgJiYgbHZsLT5u X3B0X3BhZ2VzID09IDApCisJCWNvbnRpbnVlOworCSAgICAgIGlmIChsdmwtPnZpcnRfc3RhcnQg Pj0gZW5kIHx8IGx2bC0+dmlydF9lbmQgPD0gc3RhcnQpCisJCWNvbnRpbnVlOworCSAgICAgIHBf cyA9IChncnViX21heCAoc3RhcnQsIGx2bC0+dmlydF9zdGFydCkgLSBzdGFydCkgPj4KKwkJICAg IChQQUdFX1NISUZUICsgbCAqIExPR19QT0lOVEVSU19QRVJfUEFHRSk7CisJICAgICAgcF9lID0g KGdydWJfbWluIChlbmQsIGx2bC0+dmlydF9lbmQpIC0gc3RhcnQpID4+CisJCSAgICAoUEFHRV9T SElGVCArIGwgKiBMT0dfUE9JTlRFUlNfUEVSX1BBR0UpOworCSAgICAgIHBmbiA9ICgoZ3J1Yl9t YXggKHN0YXJ0LCBsdmwtPnZpcnRfc3RhcnQpIC0gbHZsLT52aXJ0X3N0YXJ0KSA+PgorCQkgICAg IChQQUdFX1NISUZUICsgbCAqIExPR19QT0lOVEVSU19QRVJfUEFHRSkpICsgbHZsLT5wZm5fc3Rh cnQ7CisJICAgICAgZ3J1Yl9kcHJpbnRmICgieGVuIiwgIndyaXRlIHBhZ2UgdGFibGUgZW50cmll cyBsZXZlbCAlZCBwZyAlcCAiCisJCQkgICAgIm1hcHBpbmcgJWQvJWQgaW5kZXggJWx4LSVseCBw Zm4gJWxseFxuIiwKKwkJCSAgICBsLCBwZywgbTEsIG0yLCBwX3MsIHBfZSwgKHVuc2lnbmVkIGxv bmcgbG9uZykgcGZuKTsKKwkgICAgICBmb3IgKHAgPSBwX3M7IHAgPD0gcF9lOyBwKyspCisJCXsK KwkJICBwZ1twXSA9IHBhZ2Uyb2Zmc2V0IChtZm5fbGlzdFtwZm5dKSB8CisJCQkgIGdldF9wZ190 YWJsZV9wcm90IChsLCBwZm4pOworCQkgIHBmbisrOworCQl9CisJICAgIH0KKwl9CiAgICAgfQog fQogCkBAIC0yODUsNDUgKzM3Myw3MSBAQCBncnViX3hlbl9wdF9hbGxvYyAodm9pZCkKICAgZ3J1 Yl9yZWxvY2F0b3JfY2h1bmtfdCBjaDsKICAgZ3J1Yl9lcnJfdCBlcnI7CiAgIGdydWJfdWludDY0 X3QgbnJfaW5mb19wYWdlczsKLSAgZ3J1Yl91aW50NjRfdCBucl9wYWdlcywgbnJfcHRfcGFnZXMs IG5yX25lZWRfcGFnZXM7CisgIGdydWJfdWludDY0X3QgbnJfbmVlZF9wYWdlczsKKyAgZ3J1Yl91 aW50NjRfdCB0cnlfdmlydF9lbmQ7CisgIHN0cnVjdCBncnViX3hlbl9tYXBwaW5nICptYXA7CiAK LSAgaWYgKHhlbl9zdGF0ZS52aXJ0X3BndGFibGUpCisgIGlmICh4ZW5fc3RhdGUucGd0YmxfZW5k KQogICAgIHJldHVybiBHUlVCX0VSUl9OT05FOwogCisgIG1hcCA9IHhlbl9zdGF0ZS5tYXBwaW5n cyArIHhlbl9zdGF0ZS5uX21hcHBpbmdzOworICB4ZW5fc3RhdGUubWFwX3JlbG9jID0gbWFwICsg MTsKKwogICB4ZW5fc3RhdGUubmV4dF9zdGFydC5wdF9iYXNlID0KICAgICB4ZW5fc3RhdGUubWF4 X2FkZHIgKyB4ZW5fc3RhdGUueGVuX2luZi52aXJ0X2Jhc2U7Ci0gIHhlbl9zdGF0ZS5zdGF0ZS5w YWdpbmdfc3RhcnQgPSB4ZW5fc3RhdGUubWF4X2FkZHIgPj4gUEFHRV9TSElGVDsKLQogICBucl9p bmZvX3BhZ2VzID0geGVuX3N0YXRlLm1heF9hZGRyID4+IFBBR0VfU0hJRlQ7Ci0gIG5yX3BhZ2Vz ID0gbnJfaW5mb19wYWdlczsKKyAgbnJfbmVlZF9wYWdlcyA9IG5yX2luZm9fcGFnZXM7CiAKICAg d2hpbGUgKDEpCiAgICAgewotICAgICAgbnJfcGFnZXMgPSBBTElHTl9VUCAobnJfcGFnZXMsIChB TElHTl9TSVpFID4+IFBBR0VfU0hJRlQpKTsKLSAgICAgIG5yX3B0X3BhZ2VzID0gZ2V0X3BndGFi bGVfc2l6ZSAobnJfcGFnZXMsIHhlbl9zdGF0ZS54ZW5faW5mLnZpcnRfYmFzZSk7Ci0gICAgICBu cl9uZWVkX3BhZ2VzID0KLQlucl9pbmZvX3BhZ2VzICsgbnJfcHRfcGFnZXMgKwotCSgoQURESVRJ T05BTF9TSVpFICsgU1RBQ0tfU0laRSkgPj4gUEFHRV9TSElGVCk7Ci0gICAgICBpZiAobnJfcGFn ZXMgPj0gbnJfbmVlZF9wYWdlcykKKyAgICAgIHRyeV92aXJ0X2VuZCA9IEFMSUdOX1VQICh4ZW5f c3RhdGUueGVuX2luZi52aXJ0X2Jhc2UgKworCQkJICAgICAgIHBhZ2Uyb2Zmc2V0IChucl9uZWVk X3BhZ2VzKSArCisJCQkgICAgICAgQURESVRJT05BTF9TSVpFICsgU1RBQ0tfU0laRSwgQUxJR05f U0laRSk7CisgICAgICBpZiAoIXhlbl9zdGF0ZS54ZW5faW5mLnZpcnRfYmFzZSkKKwl0cnlfdmly dF9lbmQgKz0gUEFHRV9TSVpFOworCisgICAgICBlcnIgPSBnZXRfcGd0YWJsZV9zaXplICh4ZW5f c3RhdGUueGVuX2luZi52aXJ0X2Jhc2UsIHRyeV92aXJ0X2VuZCwKKwkJCSAgICAgIG5yX2luZm9f cGFnZXMpOworICAgICAgaWYgKGVycikKKwlyZXR1cm4gZXJyOworICAgICAgeGVuX3N0YXRlLm5f bWFwcGluZ3MrKzsKKworICAgICAgLyogTWFwIHRoZSByZWxvY2F0b3IgcGFnZSBlaXRoZXIgYXQg dmlydHVhbCAwIG9yIGFmdGVyIGVuZCBvZiBhcmVhLiAqLworICAgICAgbnJfbmVlZF9wYWdlcyA9 IG5yX2luZm9fcGFnZXMgKyBtYXAtPmFyZWEubl9wdF9wYWdlczsKKyAgICAgIGlmICh4ZW5fc3Rh dGUueGVuX2luZi52aXJ0X2Jhc2UpCisJZXJyID0gZ2V0X3BndGFibGVfc2l6ZSAoMCwgUEFHRV9T SVpFLCBucl9uZWVkX3BhZ2VzKTsKKyAgICAgIGVsc2UKKwllcnIgPSBnZXRfcGd0YWJsZV9zaXpl ICh0cnlfdmlydF9lbmQgLSBQQUdFX1NJWkUsIHRyeV92aXJ0X2VuZCwKKwkJCQlucl9uZWVkX3Bh Z2VzKTsKKyAgICAgIGlmIChlcnIpCisJcmV0dXJuIGVycjsKKyAgICAgIG5yX25lZWRfcGFnZXMg Kz0geGVuX3N0YXRlLm1hcF9yZWxvYy0+YXJlYS5uX3B0X3BhZ2VzOworCisgICAgICBpZiAoeGVu X3N0YXRlLnhlbl9pbmYudmlydF9iYXNlICsgcGFnZTJvZmZzZXQgKG5yX25lZWRfcGFnZXMpIDw9 CisJICB0cnlfdmlydF9lbmQpCiAJYnJlYWs7Ci0gICAgICBucl9wYWdlcyA9IG5yX25lZWRfcGFn ZXM7CisKKyAgICAgIHhlbl9zdGF0ZS5uX21hcHBpbmdzLS07CiAgICAgfQogCisgIHhlbl9zdGF0 ZS5uX21hcHBpbmdzKys7CisgIG5yX25lZWRfcGFnZXMgPSBtYXAtPmFyZWEubl9wdF9wYWdlcyAr IHhlbl9zdGF0ZS5tYXBfcmVsb2MtPmFyZWEubl9wdF9wYWdlczsKICAgZXJyID0gZ3J1Yl9yZWxv Y2F0b3JfYWxsb2NfY2h1bmtfYWRkciAoeGVuX3N0YXRlLnJlbG9jYXRvciwgJmNoLAogCQkJCQkg eGVuX3N0YXRlLm1heF9hZGRyLAotCQkJCQkgcGFnZTJvZmZzZXQgKG5yX3B0X3BhZ2VzKSk7CisJ CQkJCSBwYWdlMm9mZnNldCAobnJfbmVlZF9wYWdlcykpOwogICBpZiAoZXJyKQogICAgIHJldHVy biBlcnI7CiAKLSAgeGVuX3N0YXRlLnZpcnRfcGd0YWJsZSA9IGdldF92aXJ0dWFsX2N1cnJlbnRf YWRkcmVzcyAoY2gpOwotICB4ZW5fc3RhdGUucGd0Ymxfc3RhcnQgPSB4ZW5fc3RhdGUubWF4X2Fk ZHIgPj4gUEFHRV9TSElGVDsKLSAgeGVuX3N0YXRlLm1heF9hZGRyICs9IHBhZ2Uyb2Zmc2V0IChu cl9wdF9wYWdlcyk7CisgIG1hcC0+d2hlcmUgPSBnZXRfdmlydHVhbF9jdXJyZW50X2FkZHJlc3Mg KGNoKTsKKyAgbWFwLT5hcmVhLnBmbl9zdGFydCA9IDA7CisgIHhlbl9zdGF0ZS5tYXhfYWRkciAr PSBwYWdlMm9mZnNldCAobnJfbmVlZF9wYWdlcyk7CiAgIHhlbl9zdGF0ZS5zdGF0ZS5zdGFjayA9 CiAgICAgeGVuX3N0YXRlLm1heF9hZGRyICsgU1RBQ0tfU0laRSArIHhlbl9zdGF0ZS54ZW5faW5m LnZpcnRfYmFzZTsKLSAgeGVuX3N0YXRlLnN0YXRlLnBhZ2luZ19zaXplID0gbnJfcHRfcGFnZXM7 Ci0gIHhlbl9zdGF0ZS5uZXh0X3N0YXJ0Lm5yX3B0X2ZyYW1lcyA9IG5yX3B0X3BhZ2VzOwotICB4 ZW5fc3RhdGUubWF4X2FkZHIgPSBwYWdlMm9mZnNldCAobnJfcGFnZXMpOwotICB4ZW5fc3RhdGUu cGd0YmxfZW5kID0gbnJfcGFnZXM7CisgIHhlbl9zdGF0ZS5uZXh0X3N0YXJ0Lm5yX3B0X2ZyYW1l cyA9IG5yX25lZWRfcGFnZXM7CisgIHhlbl9zdGF0ZS5tYXhfYWRkciA9IHRyeV92aXJ0X2VuZCAt IHhlbl9zdGF0ZS54ZW5faW5mLnZpcnRfYmFzZTsKKyAgeGVuX3N0YXRlLnBndGJsX2VuZCA9IHhl bl9zdGF0ZS5tYXhfYWRkciA+PiBQQUdFX1NISUZUOworICB4ZW5fc3RhdGUubWFwX3JlbG9jLT53 aGVyZSA9IChncnViX3VpbnQ2NF90ICopICgoY2hhciAqKSBtYXAtPndoZXJlICsKKwkJCQkJcGFn ZTJvZmZzZXQgKG1hcC0+YXJlYS5uX3B0X3BhZ2VzKSk7CiAKICAgcmV0dXJuIEdSVUJfRVJSX05P TkU7CiB9CkBAIC0zNzEsOSArNDg1LDggQEAgZ3J1Yl94ZW5fYm9vdCAodm9pZCkKIAkJKHVuc2ln bmVkIGxvbmcgbG9uZykgeGVuX3N0YXRlLnhlbl9pbmYudmlydF9iYXNlLAogCQkodW5zaWduZWQg bG9uZyBsb25nKSBwYWdlMm9mZnNldCAobnJfcGFnZXMpKTsKIAotICBnZW5lcmF0ZV9wYWdlX3Rh YmxlICh4ZW5fc3RhdGUudmlydF9wZ3RhYmxlLCB4ZW5fc3RhdGUucGd0Ymxfc3RhcnQsCi0JCSAg ICAgICB4ZW5fc3RhdGUucGd0YmxfZW5kLCBucl9wYWdlcywKLQkJICAgICAgIHhlbl9zdGF0ZS54 ZW5faW5mLnZpcnRfYmFzZSwgeGVuX3N0YXRlLnZpcnRfbWZuX2xpc3QpOworICB4ZW5fc3RhdGUu bWFwX3JlbG9jLT5hcmVhLnBmbl9zdGFydCA9IG5yX3BhZ2VzOworICBnZW5lcmF0ZV9wYWdlX3Rh YmxlICh4ZW5fc3RhdGUudmlydF9tZm5fbGlzdCk7CiAKICAgeGVuX3N0YXRlLnN0YXRlLmVudHJ5 X3BvaW50ID0geGVuX3N0YXRlLnhlbl9pbmYuZW50cnlfcG9pbnQ7CiAKZGlmZiAtLWdpdCBhL2lu Y2x1ZGUvZ3J1Yi9pMzg2L21lbW9yeS5oIGIvaW5jbHVkZS9ncnViL2kzODYvbWVtb3J5LmgKaW5k ZXggYzliMTMyOC4uOGJiNmUxYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9ncnViL2kzODYvbWVtb3J5 LmgKKysrIGIvaW5jbHVkZS9ncnViL2kzODYvbWVtb3J5LmgKQEAgLTIwLDYgKzIwLDggQEAKICNp Zm5kZWYgR1JVQl9NRU1PUllfQ1BVX0hFQURFUgogI2RlZmluZSBHUlVCX01FTU9SWV9DUFVfSEVB REVSCTEKIAorI2RlZmluZSBQQUdFX1NISUZUCQkxMgorCiAvKiBUaGUgZmxhZyBmb3IgcHJvdGVj dGVkIG1vZGUuICAqLwogI2RlZmluZSBHUlVCX01FTU9SWV9DUFVfQ1IwX1BFX09OCQkweDEKICNk ZWZpbmUgR1JVQl9NRU1PUllfQ1BVX0NSNF9QQUVfT04JCTB4MDAwMDAwMjAKQEAgLTMxLDYgKzMz LDExIEBACiAjZGVmaW5lIEdSVUJfTUVNT1JZX01BQ0hJTkVfVVBQRVJfU1RBUlQJCQkweDEwMDAw MAkvKiAxIE1pQiAqLwogI2RlZmluZSBHUlVCX01FTU9SWV9NQUNISU5FX0xPV0VSX1NJWkUJCQlH UlVCX01FTU9SWV9NQUNISU5FX1VQUEVSX1NUQVJUCiAKKy8qIFNvbWUgUFRFIGRlZmluaXRpb25z LiAqLworI2RlZmluZSBHUlVCX1BBR0VfUFJFU0VOVAkJCTB4MDAwMDAwMDEKKyNkZWZpbmUgR1JV Ql9QQUdFX1JXCQkJCTB4MDAwMDAwMDIKKyNkZWZpbmUgR1JVQl9QQUdFX1VTRVIJCQkJMHgwMDAw MDAwNAorCiAjaWZuZGVmIEFTTV9GSUxFCiAKICNkZWZpbmUgR1JVQl9NTUFQX01BTExPQ19MT1cg MQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9ncnViL3hlbi9yZWxvY2F0b3IuaCBiL2luY2x1ZGUvZ3J1 Yi94ZW4vcmVsb2NhdG9yLmgKaW5kZXggYWU0NWRjZS4uMzVhMGFkOSAxMDA2NDQKLS0tIGEvaW5j bHVkZS9ncnViL3hlbi9yZWxvY2F0b3IuaAorKysgYi9pbmNsdWRlL2dydWIveGVuL3JlbG9jYXRv ci5oCkBAIC0yMywxMSArMjMsMTMgQEAKICNpbmNsdWRlIDxncnViL2Vyci5oPgogI2luY2x1ZGUg PGdydWIvcmVsb2NhdG9yLmg+CiAKKyNkZWZpbmUgWEVOX01BWF9NQVBQSU5HUyAzCisKIHN0cnVj dCBncnViX3JlbG9jYXRvcl94ZW5fc3RhdGUKIHsKICAgZ3J1Yl9hZGRyX3Qgc3RhcnRfaW5mbzsK LSAgZ3J1Yl9hZGRyX3QgcGFnaW5nX3N0YXJ0OwotICBncnViX2FkZHJfdCBwYWdpbmdfc2l6ZTsK KyAgZ3J1Yl9hZGRyX3QgcGFnaW5nX3N0YXJ0W1hFTl9NQVhfTUFQUElOR1NdOworICBncnViX2Fk ZHJfdCBwYWdpbmdfc2l6ZVtYRU5fTUFYX01BUFBJTkdTXTsKICAgZ3J1Yl9hZGRyX3QgbWZuX2xp c3Q7CiAgIGdydWJfYWRkcl90IHN0YWNrOwogICBncnViX2FkZHJfdCBlbnRyeV9wb2ludDsKLS0g CjIuNi4yCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K WGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwOi8vbGlz dHMueGVuLm9yZy94ZW4tZGV2ZWwK