From mboxrd@z Thu Jan 1 00:00:00 1970 From: Roger Pau Monne Subject: [PATCH v4 09/31] libxc: introduce a xc_dom_arch for hvm-3.0-x86_32 guests Date: Fri, 7 Aug 2015 12:17:46 +0200 Message-ID: <1438942688-7610-10-git-send-email-roger.pau@citrix.com> References: <1438942688-7610-1-git-send-email-roger.pau@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta5.messagelabs.com ([195.245.231.135]) by lists.xen.org with esmtp (Exim 4.72) (envelope-from ) id 1ZNejI-0006Dj-SZ for xen-devel@lists.xenproject.org; Fri, 07 Aug 2015 10:18:25 +0000 In-Reply-To: <1438942688-7610-1-git-send-email-roger.pau@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: xen-devel@lists.xenproject.org Cc: Wei Liu , Stefano Stabellini , Ian Jackson , Ian Campbell , Roger Pau Monne List-Id: xen-devel@lists.xenproject.org VGhpcyB4Y19kb21fYXJjaCB3aWxsIGJlIHVzZWQgaW4gb3JkZXIgdG8gYnVpbGQgSFZNIGRvbWFp bnMuIFRoZSBjb2RlIGlzCmJhc2VkIG9uIHRoZSBleGlzdGluZyB4Y19odm1fcG9wdWxhdGVfbWVt b3J5IGFuZCB4Y19odm1fcG9wdWxhdGVfcGFyYW1zCmZ1bmN0aW9ucy4KClNpZ25lZC1vZmYtYnk6 IFJvZ2VyIFBhdSBNb25uw6kgPHJvZ2VyLnBhdUBjaXRyaXguY29tPgpDYzogSWFuIEphY2tzb24g PGlhbi5qYWNrc29uQGV1LmNpdHJpeC5jb20+CkNjOiBTdGVmYW5vIFN0YWJlbGxpbmkgPHN0ZWZh bm8uc3RhYmVsbGluaUBldS5jaXRyaXguY29tPgpDYzogSWFuIENhbXBiZWxsIDxpYW4uY2FtcGJl bGxAY2l0cml4LmNvbT4KQ2M6IFdlaSBMaXUgPHdlaS5saXUyQGNpdHJpeC5jb20+Ci0tLQpDaGFu Z2VzIHNpbmNlIHYzOgogLSBNYWtlIHN1cmUgYy9zIGI5ZGJlMzMgaXMgbm90IHJldmVydGVkIG9u IHRoaXMgcGF0Y2guCiAtIFNldCB0aGUgaW5pdGlhbCBCU1Agc3RhdGUgdXNpbmcge2dldC9zZXR9 aHZtY29udGV4dC4KLS0tCiB0b29scy9saWJ4Yy9pbmNsdWRlL3hjX2RvbS5oIHwgICA2ICsKIHRv b2xzL2xpYnhjL3hjX2RvbV94ODYuYyAgICAgfCA2MTkgKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrLQogMiBmaWxlcyBjaGFuZ2VkLCA2MTQgaW5zZXJ0aW9ucygrKSwg MTEgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvdG9vbHMvbGlieGMvaW5jbHVkZS94Y19kb20u aCBiL3Rvb2xzL2xpYnhjL2luY2x1ZGUveGNfZG9tLmgKaW5kZXggMDI0NWQyNC4uY2RhNDBkOSAx MDA2NDQKLS0tIGEvdG9vbHMvbGlieGMvaW5jbHVkZS94Y19kb20uaAorKysgYi90b29scy9saWJ4 Yy9pbmNsdWRlL3hjX2RvbS5oCkBAIC0xODgsNiArMTg4LDEyIEBAIHN0cnVjdCB4Y19kb21faW1h Z2UgewogICAgIH0gY29udGFpbmVyX3R5cGU7CiAKICAgICAvKiBIVk0gc3BlY2lmaWMgZmllbGRz LiAqLworICAgIHhlbl9wZm5fdCB0YXJnZXRfcGFnZXM7CisgICAgeGVuX3Bmbl90IG1taW9fc3Rh cnQ7CisgICAgeGVuX3Bmbl90IG1taW9fc2l6ZTsKKyAgICB4ZW5fcGZuX3QgbG93bWVtX2VuZDsK KyAgICB4ZW5fcGZuX3QgaGlnaG1lbV9lbmQ7CisKICAgICAvKiBFeHRyYSBBQ1BJIHRhYmxlcyBw YXNzZWQgdG8gSFZNTE9BREVSICovCiAgICAgc3RydWN0IHhjX2h2bV9maXJtd2FyZV9tb2R1bGUg YWNwaV9tb2R1bGU7CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnhjL3hjX2RvbV94ODYuYyBiL3Rv b2xzL2xpYnhjL3hjX2RvbV94ODYuYwppbmRleCBhZTgxODdmLi4xOGUzMzQwIDEwMDY0NAotLS0g YS90b29scy9saWJ4Yy94Y19kb21feDg2LmMKKysrIGIvdG9vbHMvbGlieGMveGNfZG9tX3g4Ni5j CkBAIC0zOSwxMCArMzksMzIgQEAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLSNkZWZpbmUg U1VQRVJQQUdFX1BGTl9TSElGVCAgOQotI2RlZmluZSBTVVBFUlBBR0VfTlJfUEZOUyAgICAoMVVM IDw8IFNVUEVSUEFHRV9QRk5fU0hJRlQpCiAjZGVmaW5lIFNVUEVSUEFHRV9CQVRDSF9TSVpFIDUx MgogCisjZGVmaW5lIFNVUEVSUEFHRV8yTUJfU0hJRlQgICA5CisjZGVmaW5lIFNVUEVSUEFHRV8y TUJfTlJfUEZOUyAoMVVMIDw8IFNVUEVSUEFHRV8yTUJfU0hJRlQpCisjZGVmaW5lIFNVUEVSUEFH RV8xR0JfU0hJRlQgICAxOAorI2RlZmluZSBTVVBFUlBBR0VfMUdCX05SX1BGTlMgKDFVTCA8PCBT VVBFUlBBR0VfMUdCX1NISUZUKQorCisjZGVmaW5lIFg4Nl9DUjBfUEUgMHgwMQorI2RlZmluZSBY ODZfQ1IwX0VUIDB4MTAKKworI2RlZmluZSBWR0FfSE9MRV9TSVpFICgweDIwKQorCisjZGVmaW5l IFNQRUNJQUxQQUdFX1BBR0lORyAgIDAKKyNkZWZpbmUgU1BFQ0lBTFBBR0VfQUNDRVNTICAgMQor I2RlZmluZSBTUEVDSUFMUEFHRV9TSEFSSU5HICAyCisjZGVmaW5lIFNQRUNJQUxQQUdFX0JVRklP UkVRIDMKKyNkZWZpbmUgU1BFQ0lBTFBBR0VfWEVOU1RPUkUgNAorI2RlZmluZSBTUEVDSUFMUEFH RV9JT1JFUSAgICA1CisjZGVmaW5lIFNQRUNJQUxQQUdFX0lERU5UX1BUIDYKKyNkZWZpbmUgU1BF Q0lBTFBBR0VfQ09OU09MRSAgNworI2RlZmluZSBOUl9TUEVDSUFMX1BBR0VTICAgICA4CisjZGVm aW5lIHNwZWNpYWxfcGZuKHgpICgweGZmMDAwdSAtIE5SX1NQRUNJQUxfUEFHRVMgKyAoeCkpCisK KyNkZWZpbmUgTlJfSU9SRVFfU0VSVkVSX1BBR0VTIDgKKyNkZWZpbmUgaW9yZXFfc2VydmVyX3Bm bih4KSAoc3BlY2lhbF9wZm4oMCkgLSBOUl9JT1JFUV9TRVJWRVJfUEFHRVMgKyAoeCkpCisKICNk ZWZpbmUgYml0c190b19tYXNrKGJpdHMpICAgICAgICgoKHhlbl92YWRkcl90KTEgPDwgKGJpdHMp KS0xKQogI2RlZmluZSByb3VuZF9kb3duKGFkZHIsIG1hc2spICAgKChhZGRyKSAmIH4obWFzaykp CiAjZGVmaW5lIHJvdW5kX3VwKGFkZHIsIG1hc2spICAgICAoKGFkZHIpIHwgKG1hc2spKQpAQCAt NDYxLDYgKzQ4MywxMzUgQEAgc3RhdGljIGludCBhbGxvY19tYWdpY19wYWdlcyhzdHJ1Y3QgeGNf ZG9tX2ltYWdlICpkb20pCiAgICAgcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIGJ1aWxkX2h2 bV9pbmZvKHZvaWQgKmh2bV9pbmZvX3BhZ2UsIHN0cnVjdCB4Y19kb21faW1hZ2UgKmRvbSkKK3sK KyAgICBzdHJ1Y3QgaHZtX2luZm9fdGFibGUgKmh2bV9pbmZvID0gKHN0cnVjdCBodm1faW5mb190 YWJsZSAqKQorICAgICAgICAoKCh1bnNpZ25lZCBjaGFyICopaHZtX2luZm9fcGFnZSkgKyBIVk1f SU5GT19PRkZTRVQpOworICAgIHVpbnQ4X3Qgc3VtOworICAgIGludCBpOworCisgICAgbWVtc2V0 KGh2bV9pbmZvX3BhZ2UsIDAsIFBBR0VfU0laRSk7CisKKyAgICAvKiBGaWxsIGluIHRoZSBoZWFk ZXIuICovCisgICAgbWVtY3B5KGh2bV9pbmZvLT5zaWduYXR1cmUsICJIVk0gSU5GTyIsIHNpemVv Zihodm1faW5mby0+c2lnbmF0dXJlKSk7CisgICAgaHZtX2luZm8tPmxlbmd0aCA9IHNpemVvZihz dHJ1Y3QgaHZtX2luZm9fdGFibGUpOworCisgICAgLyogU2Vuc2libGUgZGVmYXVsdHM6IHRoZXNl IGNhbiBiZSBvdmVycmlkZGVuIGJ5IHRoZSBjYWxsZXIuICovCisgICAgaHZtX2luZm8tPmFwaWNf bW9kZSA9IDE7CisgICAgaHZtX2luZm8tPm5yX3ZjcHVzID0gMTsKKyAgICBtZW1zZXQoaHZtX2lu Zm8tPnZjcHVfb25saW5lLCAweGZmLCBzaXplb2YoaHZtX2luZm8tPnZjcHVfb25saW5lKSk7CisK KyAgICAvKiBNZW1vcnkgcGFyYW1ldGVycy4gKi8KKyAgICBodm1faW5mby0+bG93X21lbV9wZ2Vu ZCA9IGRvbS0+bG93bWVtX2VuZCA+PiBQQUdFX1NISUZUOworICAgIGh2bV9pbmZvLT5oaWdoX21l bV9wZ2VuZCA9IGRvbS0+aGlnaG1lbV9lbmQgPj4gUEFHRV9TSElGVDsKKyAgICBodm1faW5mby0+ cmVzZXJ2ZWRfbWVtX3Bnc3RhcnQgPSBpb3JlcV9zZXJ2ZXJfcGZuKDApOworCisgICAgLyogRmlu aXNoIHdpdGggdGhlIGNoZWNrc3VtLiAqLworICAgIGZvciAoIGkgPSAwLCBzdW0gPSAwOyBpIDwg aHZtX2luZm8tPmxlbmd0aDsgaSsrICkKKyAgICAgICAgc3VtICs9ICgodWludDhfdCAqKWh2bV9p bmZvKVtpXTsKKyAgICBodm1faW5mby0+Y2hlY2tzdW0gPSAtc3VtOworfQorCitzdGF0aWMgaW50 IGFsbG9jX21hZ2ljX3BhZ2VzX2h2bShzdHJ1Y3QgeGNfZG9tX2ltYWdlICpkb20pCit7CisgICAg dW5zaWduZWQgbG9uZyBpOworICAgIHZvaWQgKmh2bV9pbmZvX3BhZ2U7CisgICAgdWludDMyX3Qg KmlkZW50X3B0LCBkb21pZCA9IGRvbS0+Z3Vlc3RfZG9taWQ7CisgICAgaW50IHJjOworICAgIHhl bl9wZm5fdCBzcGVjaWFsX2FycmF5W05SX1NQRUNJQUxfUEFHRVNdOworICAgIHhlbl9wZm5fdCBp b3JlcV9zZXJ2ZXJfYXJyYXlbTlJfSU9SRVFfU0VSVkVSX1BBR0VTXTsKKyAgICB4Y19pbnRlcmZh Y2UgKnhjaCA9IGRvbS0+eGNoOworCisgICAgaWYgKCAoaHZtX2luZm9fcGFnZSA9IHhjX21hcF9m b3JlaWduX3JhbmdlKAorICAgICAgICAgICAgICB4Y2gsIGRvbWlkLCBQQUdFX1NJWkUsIFBST1Rf UkVBRCB8IFBST1RfV1JJVEUsCisgICAgICAgICAgICAgIEhWTV9JTkZPX1BGTikpID09IE5VTEwg KQorICAgICAgICBnb3RvIGVycm9yX291dDsKKyAgICBidWlsZF9odm1faW5mbyhodm1faW5mb19w YWdlLCBkb20pOworICAgIG11bm1hcChodm1faW5mb19wYWdlLCBQQUdFX1NJWkUpOworCisgICAg LyogQWxsb2NhdGUgYW5kIGNsZWFyIHNwZWNpYWwgcGFnZXMuICovCisgICAgZm9yICggaSA9IDA7 IGkgPCBOUl9TUEVDSUFMX1BBR0VTOyBpKysgKQorICAgICAgICBzcGVjaWFsX2FycmF5W2ldID0g c3BlY2lhbF9wZm4oaSk7CisKKyAgICByYyA9IHhjX2RvbWFpbl9wb3B1bGF0ZV9waHlzbWFwX2V4 YWN0KHhjaCwgZG9taWQsIE5SX1NQRUNJQUxfUEFHRVMsIDAsIDAsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWFsX2FycmF5KTsKKyAgICBpZiAoIHJjICE9 IDAgKQorICAgIHsKKyAgICAgICAgRE9NUFJJTlRGKCJDb3VsZCBub3QgYWxsb2NhdGUgc3BlY2lh bCBwYWdlcy4iKTsKKyAgICAgICAgZ290byBlcnJvcl9vdXQ7CisgICAgfQorCisgICAgaWYgKCB4 Y19jbGVhcl9kb21haW5fcGFnZXMoeGNoLCBkb21pZCwgc3BlY2lhbF9wZm4oMCksIE5SX1NQRUNJ QUxfUEFHRVMpICkKKyAgICAgICAgICAgIGdvdG8gZXJyb3Jfb3V0OworCisgICAgeGNfaHZtX3Bh cmFtX3NldCh4Y2gsIGRvbWlkLCBIVk1fUEFSQU1fU1RPUkVfUEZOLAorICAgICAgICAgICAgICAg ICAgICAgc3BlY2lhbF9wZm4oU1BFQ0lBTFBBR0VfWEVOU1RPUkUpKTsKKyAgICB4Y19odm1fcGFy YW1fc2V0KHhjaCwgZG9taWQsIEhWTV9QQVJBTV9CVUZJT1JFUV9QRk4sCisgICAgICAgICAgICAg ICAgICAgICBzcGVjaWFsX3BmbihTUEVDSUFMUEFHRV9CVUZJT1JFUSkpOworICAgIHhjX2h2bV9w YXJhbV9zZXQoeGNoLCBkb21pZCwgSFZNX1BBUkFNX0lPUkVRX1BGTiwKKyAgICAgICAgICAgICAg ICAgICAgIHNwZWNpYWxfcGZuKFNQRUNJQUxQQUdFX0lPUkVRKSk7CisgICAgeGNfaHZtX3BhcmFt X3NldCh4Y2gsIGRvbWlkLCBIVk1fUEFSQU1fQ09OU09MRV9QRk4sCisgICAgICAgICAgICAgICAg ICAgICBzcGVjaWFsX3BmbihTUEVDSUFMUEFHRV9DT05TT0xFKSk7CisgICAgeGNfaHZtX3BhcmFt X3NldCh4Y2gsIGRvbWlkLCBIVk1fUEFSQU1fUEFHSU5HX1JJTkdfUEZOLAorICAgICAgICAgICAg ICAgICAgICAgc3BlY2lhbF9wZm4oU1BFQ0lBTFBBR0VfUEFHSU5HKSk7CisgICAgeGNfaHZtX3Bh cmFtX3NldCh4Y2gsIGRvbWlkLCBIVk1fUEFSQU1fTU9OSVRPUl9SSU5HX1BGTiwKKyAgICAgICAg ICAgICAgICAgICAgIHNwZWNpYWxfcGZuKFNQRUNJQUxQQUdFX0FDQ0VTUykpOworICAgIHhjX2h2 bV9wYXJhbV9zZXQoeGNoLCBkb21pZCwgSFZNX1BBUkFNX1NIQVJJTkdfUklOR19QRk4sCisgICAg ICAgICAgICAgICAgICAgICBzcGVjaWFsX3BmbihTUEVDSUFMUEFHRV9TSEFSSU5HKSk7CisKKyAg ICAvKgorICAgICAqIEFsbG9jYXRlIGFuZCBjbGVhciBhZGRpdGlvbmFsIGlvcmVxIHNlcnZlciBw YWdlcy4gVGhlIGRlZmF1bHQKKyAgICAgKiBzZXJ2ZXIgd2lsbCB1c2UgdGhlIElPUkVRIGFuZCBC VUZJT1JFUSBzcGVjaWFsIHBhZ2VzIGFib3ZlLgorICAgICAqLworICAgIGZvciAoIGkgPSAwOyBp IDwgTlJfSU9SRVFfU0VSVkVSX1BBR0VTOyBpKysgKQorICAgICAgICBpb3JlcV9zZXJ2ZXJfYXJy YXlbaV0gPSBpb3JlcV9zZXJ2ZXJfcGZuKGkpOworCisgICAgcmMgPSB4Y19kb21haW5fcG9wdWxh dGVfcGh5c21hcF9leGFjdCh4Y2gsIGRvbWlkLCBOUl9JT1JFUV9TRVJWRVJfUEFHRVMsIDAsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBpb3JlcV9zZXJ2ZXJf YXJyYXkpOworICAgIGlmICggcmMgIT0gMCApCisgICAgeworICAgICAgICBET01QUklOVEYoIkNv dWxkIG5vdCBhbGxvY2F0ZSBpb3JlcSBzZXJ2ZXIgcGFnZXMuIik7CisgICAgICAgIGdvdG8gZXJy b3Jfb3V0OworICAgIH0KKworICAgIGlmICggeGNfY2xlYXJfZG9tYWluX3BhZ2VzKHhjaCwgZG9t aWQsIGlvcmVxX3NlcnZlcl9wZm4oMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg TlJfSU9SRVFfU0VSVkVSX1BBR0VTKSApCisgICAgICAgICAgICBnb3RvIGVycm9yX291dDsKKwor ICAgIC8qIFRlbGwgdGhlIGRvbWFpbiB3aGVyZSB0aGUgcGFnZXMgYXJlIGFuZCBob3cgbWFueSB0 aGVyZSBhcmUgKi8KKyAgICB4Y19odm1fcGFyYW1fc2V0KHhjaCwgZG9taWQsIEhWTV9QQVJBTV9J T1JFUV9TRVJWRVJfUEZOLAorICAgICAgICAgICAgICAgICAgICAgaW9yZXFfc2VydmVyX3Bmbigw KSk7CisgICAgeGNfaHZtX3BhcmFtX3NldCh4Y2gsIGRvbWlkLCBIVk1fUEFSQU1fTlJfSU9SRVFf U0VSVkVSX1BBR0VTLAorICAgICAgICAgICAgICAgICAgICAgTlJfSU9SRVFfU0VSVkVSX1BBR0VT KTsKKworICAgIC8qCisgICAgICogSWRlbnRpdHktbWFwIHBhZ2UgdGFibGUgaXMgcmVxdWlyZWQg Zm9yIHJ1bm5pbmcgd2l0aCBDUjAuUEc9MCB3aGVuCisgICAgICogdXNpbmcgSW50ZWwgRVBULiBD cmVhdGUgYSAzMi1iaXQgbm9uLVBBRSBwYWdlIGRpcmVjdG9yeSBvZiBzdXBlcnBhZ2VzLgorICAg ICAqLworICAgIGlmICggKGlkZW50X3B0ID0geGNfbWFwX2ZvcmVpZ25fcmFuZ2UoCisgICAgICAg ICAgICAgIHhjaCwgZG9taWQsIFBBR0VfU0laRSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwKKyAg ICAgICAgICAgICAgc3BlY2lhbF9wZm4oU1BFQ0lBTFBBR0VfSURFTlRfUFQpKSkgPT0gTlVMTCAp CisgICAgICAgIGdvdG8gZXJyb3Jfb3V0OworICAgIGZvciAoIGkgPSAwOyBpIDwgUEFHRV9TSVpF IC8gc2l6ZW9mKCppZGVudF9wdCk7IGkrKyApCisgICAgICAgIGlkZW50X3B0W2ldID0gKChpIDw8 IDIyKSB8IF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9SVyB8IF9QQUdFX1VTRVIgfAorICAgICAgICAg ICAgICAgICAgICAgICBfUEFHRV9BQ0NFU1NFRCB8IF9QQUdFX0RJUlRZIHwgX1BBR0VfUFNFKTsK KyAgICBtdW5tYXAoaWRlbnRfcHQsIFBBR0VfU0laRSk7CisgICAgeGNfaHZtX3BhcmFtX3NldCh4 Y2gsIGRvbWlkLCBIVk1fUEFSQU1fSURFTlRfUFQsCisgICAgICAgICAgICAgICAgICAgICBzcGVj aWFsX3BmbihTUEVDSUFMUEFHRV9JREVOVF9QVCkgPDwgUEFHRV9TSElGVCk7CisKKyAgICBkb20t PmNvbnNvbGVfcGZuID0gc3BlY2lhbF9wZm4oU1BFQ0lBTFBBR0VfQ09OU09MRSk7CisgICAgZG9t LT54ZW5zdG9yZV9wZm4gPSBzcGVjaWFsX3BmbihTUEVDSUFMUEFHRV9YRU5TVE9SRSk7CisgICAg ZG9tLT5wYXJtcy52aXJ0X2h5cGVyY2FsbCA9IC0xOworCisgICAgcmMgPSAwOworICAgIGdvdG8g b3V0OworIGVycm9yX291dDoKKyAgICByYyA9IC0xOworIG91dDoKKworICAgIHJldHVybiByYzsK K30KKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIHN0YXRpYyBpbnQgc3RhcnRfaW5mb194ODZf MzIoc3RydWN0IHhjX2RvbV9pbWFnZSAqZG9tKQpAQCAtNjgyLDYgKzgzMywxMDMgQEAgc3RhdGlj IGludCB2Y3B1X3g4Nl82NChzdHJ1Y3QgeGNfZG9tX2ltYWdlICpkb20pCiAgICAgcmV0dXJuIHJj OwogfQogCitzdGF0aWMgaW50IHZjcHVfaHZtKHN0cnVjdCB4Y19kb21faW1hZ2UgKmRvbSkKK3sK KyAgICBzdHJ1Y3QgeworICAgICAgICBzdHJ1Y3QgaHZtX3NhdmVfZGVzY3JpcHRvciBoZWFkZXJf ZDsKKyAgICAgICAgSFZNX1NBVkVfVFlQRShIRUFERVIpIGhlYWRlcjsKKyAgICAgICAgc3RydWN0 IGh2bV9zYXZlX2Rlc2NyaXB0b3IgY3B1X2Q7CisgICAgICAgIEhWTV9TQVZFX1RZUEUoQ1BVKSBj cHU7CisgICAgICAgIHN0cnVjdCBodm1fc2F2ZV9kZXNjcmlwdG9yIGVuZF9kOworICAgICAgICBI Vk1fU0FWRV9UWVBFKEVORCkgZW5kOworICAgIH0gYnNwX2N0eDsKKyAgICB1aW50OF90ICpmdWxs X2N0eCA9IE5VTEw7CisgICAgaW50IHJjOworCisgICAgRE9NUFJJTlRGX0NBTExFRChkb20tPnhj aCk7CisKKyAgICAvKgorICAgICAqIEdldCB0aGUgZnVsbCBIVk0gY29udGV4dCBpbiBvcmRlciB0 byBoYXZlIHRoZSBoZWFkZXIsIGl0IGlzIG5vdAorICAgICAqIHBvc3NpYmxlIHRvIGdldCB0aGUg aGVhZGVyIHdpdGggZ2V0Y29udGV4dF9wYXJ0aWFsLCBhbmQgY3JhZnRpbmcgb25lCisgICAgICog ZnJvbSB1c2Vyc3BhY2UgaXMgYWxzbyBub3QgYW4gb3B0aW9uIHNpbmNlIGNwdWlkIGlzIHRyYXBw ZWQgYW5kCisgICAgICogbW9kaWZpZWQgYnkgWGVuLgorICAgICAqLworCisgICAgcmMgPSB4Y19k b21haW5faHZtX2dldGNvbnRleHQoZG9tLT54Y2gsIGRvbS0+Z3Vlc3RfZG9taWQsIE5VTEwsIDAp OworICAgIGlmICggcmMgPD0gMCApCisgICAgeworICAgICAgICB4Y19kb21fcGFuaWMoZG9tLT54 Y2gsIFhDX0lOVEVSTkFMX0VSUk9SLAorICAgICAgICAgICAgICAgICAgICAgIiVzOiB1bmFibGUg dG8gZmV0Y2ggSFZNIGNvbnRleHQgc2l6ZSAocmM9JWQpIiwKKyAgICAgICAgICAgICAgICAgICAg IF9fZnVuY19fLCByYyk7CisgICAgICAgIHJldHVybiByYzsKKyAgICB9CisgICAgZnVsbF9jdHgg PSBtYWxsb2MocmMpOworICAgIGlmICggZnVsbF9jdHggPT0gTlVMTCApCisgICAgeworICAgICAg ICB4Y19kb21fcGFuaWMoZG9tLT54Y2gsIFhDX0lOVEVSTkFMX0VSUk9SLAorICAgICAgICAgICAg ICAgICAgICAgIiVzOiB1bmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBIVk0gY29udGV4dCAo cmM9JWQpIiwKKyAgICAgICAgICAgICAgICAgICAgIF9fZnVuY19fLCByYyk7CisgICAgICAgIHJl dHVybiAtRU5PTUVNOworICAgIH0KKworICAgIG1lbXNldChmdWxsX2N0eCwgMCwgcmMpOworCisg ICAgcmMgPSB4Y19kb21haW5faHZtX2dldGNvbnRleHQoZG9tLT54Y2gsIGRvbS0+Z3Vlc3RfZG9t aWQsIGZ1bGxfY3R4LCByYyk7CisgICAgaWYgKCByYyA8PSAwICkKKyAgICB7CisgICAgICAgIHhj X2RvbV9wYW5pYyhkb20tPnhjaCwgWENfSU5URVJOQUxfRVJST1IsCisgICAgICAgICAgICAgICAg ICAgICAiJXM6IHVuYWJsZSB0byBmZXRjaCBIVk0gY29udGV4dCAocmM9JWQpIiwKKyAgICAgICAg ICAgICAgICAgICAgIF9fZnVuY19fLCByYyk7CisgICAgICAgIGdvdG8gb3V0OworICAgIH0KKwor ICAgIC8qIENvcHkgdGhlIGhlYWRlciB0byBvdXIgcGFydGlhbCBjb250ZXh0LiAqLworICAgIG1l bXNldCgmYnNwX2N0eCwgMCwgc2l6ZW9mKGJzcF9jdHgpKTsKKyAgICBtZW1jcHkoJmJzcF9jdHgs IGZ1bGxfY3R4LAorICAgICAgICAgICBzaXplb2Yoc3RydWN0IGh2bV9zYXZlX2Rlc2NyaXB0b3Ip ICsgSFZNX1NBVkVfTEVOR1RIKEhFQURFUikpOworCisgICAgLyogU2V0IHRoZSBDUFUgZGVzY3Jp cHRvci4gKi8KKyAgICBic3BfY3R4LmNwdV9kLnR5cGVjb2RlID0gSFZNX1NBVkVfQ09ERShDUFUp OworICAgIGJzcF9jdHguY3B1X2QuaW5zdGFuY2UgPSAwOworICAgIGJzcF9jdHguY3B1X2QubGVu Z3RoID0gSFZNX1NBVkVfTEVOR1RIKENQVSk7CisKKyAgICAvKiBTZXQgdGhlIGNhY2hlZCBwYXJ0 IG9mIHRoZSByZWxldmFudCBzZWdtZW50IHJlZ2lzdGVycy4gKi8KKyAgICBic3BfY3R4LmNwdS5j c19iYXNlID0gMDsKKyAgICBic3BfY3R4LmNwdS5kc19iYXNlID0gMDsKKyAgICBic3BfY3R4LmNw dS5zc19iYXNlID0gMDsKKyAgICBic3BfY3R4LmNwdS50cl9iYXNlID0gMDsKKyAgICBic3BfY3R4 LmNwdS5jc19saW1pdCA9IH4wdTsKKyAgICBic3BfY3R4LmNwdS5kc19saW1pdCA9IH4wdTsKKyAg ICBic3BfY3R4LmNwdS5zc19saW1pdCA9IH4wdTsKKyAgICBic3BfY3R4LmNwdS50cl9saW1pdCA9 IDB4ZmY7CisgICAgYnNwX2N0eC5jcHUuY3NfYXJieXRlcyA9IDB4YzliOworICAgIGJzcF9jdHgu Y3B1LmRzX2FyYnl0ZXMgPSAweGM5MzsKKyAgICBic3BfY3R4LmNwdS5zc19hcmJ5dGVzID0gMHhj OTM7CisgICAgYnNwX2N0eC5jcHUudHJfYXJieXRlcyA9IDB4OGI7CisKKyAgICAvKiBTZXQgdGhl IGNvbnRyb2wgcmVnaXN0ZXJzLiAqLworICAgIGJzcF9jdHguY3B1LmNyMCA9IFg4Nl9DUjBfUEUg fCBYODZfQ1IwX0VUOworCisgICAgLyogU2V0IHRoZSBJUC4gKi8KKyAgICBic3BfY3R4LmNwdS5y aXAgPSBkb20tPnBhcm1zLnBoeXNfZW50cnk7CisKKyAgICAvKiBTZXQgdGhlIGVuZCBkZXNjcmlw dG9yLiAqLworICAgIGJzcF9jdHguZW5kX2QudHlwZWNvZGUgPSBIVk1fU0FWRV9DT0RFKEVORCk7 CisgICAgYnNwX2N0eC5lbmRfZC5pbnN0YW5jZSA9IDA7CisgICAgYnNwX2N0eC5lbmRfZC5sZW5n dGggPSBIVk1fU0FWRV9MRU5HVEgoRU5EKTsKKworICAgIHJjID0geGNfZG9tYWluX2h2bV9zZXRj b250ZXh0KGRvbS0+eGNoLCBkb20tPmd1ZXN0X2RvbWlkLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICh1aW50OF90ICopJmJzcF9jdHgsIHNpemVvZihic3BfY3R4KSk7CisgICAg aWYgKCByYyAhPSAwICkKKyAgICAgICAgeGNfZG9tX3BhbmljKGRvbS0+eGNoLCBYQ19JTlRFUk5B TF9FUlJPUiwKKyAgICAgICAgICAgICAgICAgICAgICIlczogU0VUSFZNQ09OVEVYVCBmYWlsZWQg KHJjPSVkKSIsIF9fZnVuY19fLCByYyk7CisKKyBvdXQ6CisgICAgaWYgKCBmdWxsX2N0eCAhPSBO VUxMICkKKyAgICAgICAgZnJlZShmdWxsX2N0eCk7CisgICAgcmV0dXJuIHJjOworfQorCiAvKiAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0gKi8KIAogc3RhdGljIGludCB4ODZfY29tcGF0KHhjX2ludGVyZmFjZSAq eGNoLCBkb21pZF90IGRvbWlkLCBjaGFyICpndWVzdF90eXBlKQpAQCAtNzYyLDcgKzEwMTAsNyBA QCBzdGF0aWMgaW50IG1lbWluaXRfcHYoc3RydWN0IHhjX2RvbV9pbWFnZSAqZG9tKQogCiAgICAg aWYgKCBkb20tPnN1cGVycGFnZXMgKQogICAgIHsKLSAgICAgICAgaW50IGNvdW50ID0gZG9tLT50 b3RhbF9wYWdlcyA+PiBTVVBFUlBBR0VfUEZOX1NISUZUOworICAgICAgICBpbnQgY291bnQgPSBk b20tPnRvdGFsX3BhZ2VzID4+IFNVUEVSUEFHRV8yTUJfU0hJRlQ7CiAgICAgICAgIHhlbl9wZm5f dCBleHRlbnRzW2NvdW50XTsKIAogICAgICAgICBkb20tPnAybV9zaXplID0gZG9tLT50b3RhbF9w YWdlczsKQEAgLTc3Myw5ICsxMDIxLDkgQEAgc3RhdGljIGludCBtZW1pbml0X3B2KHN0cnVjdCB4 Y19kb21faW1hZ2UgKmRvbSkKIAogICAgICAgICBET01QUklOVEYoIlBvcHVsYXRpbmcgbWVtb3J5 IHdpdGggJWQgc3VwZXJwYWdlcyIsIGNvdW50KTsKICAgICAgICAgZm9yICggcGZuID0gMDsgcGZu IDwgY291bnQ7IHBmbisrICkKLSAgICAgICAgICAgIGV4dGVudHNbcGZuXSA9IHBmbiA8PCBTVVBF UlBBR0VfUEZOX1NISUZUOworICAgICAgICAgICAgZXh0ZW50c1twZm5dID0gcGZuIDw8IFNVUEVS UEFHRV8yTUJfU0hJRlQ7CiAgICAgICAgIHJjID0geGNfZG9tYWluX3BvcHVsYXRlX3BoeXNtYXBf ZXhhY3QoZG9tLT54Y2gsIGRvbS0+Z3Vlc3RfZG9taWQsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50LCBTVVBFUlBBR0VfUEZOX1NISUZULCAwLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCwgU1VQ RVJQQUdFXzJNQl9TSElGVCwgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZXh0ZW50cyk7CiAgICAgICAgIGlmICggcmMgKQogICAgICAgICAgICAgcmV0 dXJuIHJjOwpAQCAtNzg1LDcgKzEwMzMsNyBAQCBzdGF0aWMgaW50IG1lbWluaXRfcHYoc3RydWN0 IHhjX2RvbV9pbWFnZSAqZG9tKQogICAgICAgICBmb3IgKCBpID0gMDsgaSA8IGNvdW50OyBpKysg KQogICAgICAgICB7CiAgICAgICAgICAgICBtZm4gPSBleHRlbnRzW2ldOwotICAgICAgICAgICAg Zm9yICggaiA9IDA7IGogPCBTVVBFUlBBR0VfTlJfUEZOUzsgaisrLCBwZm4rKyApCisgICAgICAg ICAgICBmb3IgKCBqID0gMDsgaiA8IFNVUEVSUEFHRV8yTUJfTlJfUEZOUzsgaisrLCBwZm4rKyAp CiAgICAgICAgICAgICAgICAgZG9tLT5wMm1faG9zdFtwZm5dID0gbWZuICsgajsKICAgICAgICAg fQogICAgIH0KQEAgLTg3MCw3ICsxMTE4LDcgQEAgc3RhdGljIGludCBtZW1pbml0X3B2KHN0cnVj dCB4Y19kb21faW1hZ2UgKmRvbSkKIAogICAgICAgICAgICAgcGFnZXMgPSAodm1lbXJhbmdlc1tp XS5lbmQgLSB2bWVtcmFuZ2VzW2ldLnN0YXJ0KQogICAgICAgICAgICAgICAgID4+IFBBR0VfU0hJ RlQ7Ci0gICAgICAgICAgICBzdXBlcl9wYWdlcyA9IHBhZ2VzID4+IFNVUEVSUEFHRV9QRk5fU0hJ RlQ7CisgICAgICAgICAgICBzdXBlcl9wYWdlcyA9IHBhZ2VzID4+IFNVUEVSUEFHRV8yTUJfU0hJ RlQ7CiAgICAgICAgICAgICBwZm5fYmFzZSA9IHZtZW1yYW5nZXNbaV0uc3RhcnQgPj4gUEFHRV9T SElGVDsKIAogICAgICAgICAgICAgZm9yICggcGZuID0gcGZuX2Jhc2U7IHBmbiA8IHBmbl9iYXNl K3BhZ2VzOyBwZm4rKyApCkBAIC04ODMsMTEgKzExMzEsMTEgQEAgc3RhdGljIGludCBtZW1pbml0 X3B2KHN0cnVjdCB4Y19kb21faW1hZ2UgKmRvbSkKICAgICAgICAgICAgICAgICBzdXBlcl9wYWdl cyAtPSBjb3VudDsKIAogICAgICAgICAgICAgICAgIGZvciAoIHBmbiA9IHBmbl9iYXNlX2lkeCwg aiA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgcGZuIDwgcGZuX2Jhc2VfaWR4ICsgKGNvdW50 IDw8IFNVUEVSUEFHRV9QRk5fU0hJRlQpOwotICAgICAgICAgICAgICAgICAgICAgIHBmbiArPSBT VVBFUlBBR0VfTlJfUEZOUywgaisrICkKKyAgICAgICAgICAgICAgICAgICAgICBwZm4gPCBwZm5f YmFzZV9pZHggKyAoY291bnQgPDwgU1VQRVJQQUdFXzJNQl9TSElGVCk7CisgICAgICAgICAgICAg ICAgICAgICAgcGZuICs9IFNVUEVSUEFHRV8yTUJfTlJfUEZOUywgaisrICkKICAgICAgICAgICAg ICAgICAgICAgZXh0ZW50c1tqXSA9IGRvbS0+cDJtX2hvc3RbcGZuXTsKICAgICAgICAgICAgICAg ICByYyA9IHhjX2RvbWFpbl9wb3B1bGF0ZV9waHlzbWFwKGRvbS0+eGNoLCBkb20tPmd1ZXN0X2Rv bWlkLCBjb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFNVUEVSUEFHRV9QRk5fU0hJRlQsIG1lbWZsYWdzLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgU1VQRVJQQUdFXzJNQl9TSElGVCwgbWVtZmxhZ3Ms CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRlbnRz KTsKICAgICAgICAgICAgICAgICBpZiAoIHJjIDwgMCApCiAgICAgICAgICAgICAgICAgICAgIHJl dHVybiByYzsKQEAgLTg5Nyw3ICsxMTQ1LDcgQEAgc3RhdGljIGludCBtZW1pbml0X3B2KHN0cnVj dCB4Y19kb21faW1hZ2UgKmRvbSkKICAgICAgICAgICAgICAgICBmb3IgKCBqID0gMDsgaiA8IHJj OyBqKysgKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgbWZuID0gZXh0 ZW50c1tqXTsKLSAgICAgICAgICAgICAgICAgICAgZm9yICggayA9IDA7IGsgPCBTVVBFUlBBR0Vf TlJfUEZOUzsgaysrLCBwZm4rKyApCisgICAgICAgICAgICAgICAgICAgIGZvciAoIGsgPSAwOyBr IDwgU1VQRVJQQUdFXzJNQl9OUl9QRk5TOyBrKyssIHBmbisrICkKICAgICAgICAgICAgICAgICAg ICAgICAgIGRvbS0+cDJtX2hvc3RbcGZuXSA9IG1mbiArIGs7CiAgICAgICAgICAgICAgICAgfQog ICAgICAgICAgICAgICAgIHBmbl9iYXNlX2lkeCA9IHBmbjsKQEAgLTkzOCw2ICsxMTg2LDMzMiBA QCBzdGF0aWMgaW50IG1lbWluaXRfcHYoc3RydWN0IHhjX2RvbV9pbWFnZSAqZG9tKQogICAgIHJl dHVybiByYzsKIH0KIAorLyoKKyAqIENoZWNrIHdoZXRoZXIgdGhlcmUgZXhpc3RzIG1taW8gaG9s ZSBpbiB0aGUgc3BlY2lmaWVkIG1lbW9yeSByYW5nZS4KKyAqIFJldHVybnMgMSBpZiBleGlzdHMs IGVsc2UgcmV0dXJucyAwLgorICovCitzdGF0aWMgaW50IGNoZWNrX21taW9faG9sZSh1aW50NjRf dCBzdGFydCwgdWludDY0X3QgbWVtc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVp bnQ2NF90IG1taW9fc3RhcnQsIHVpbnQ2NF90IG1taW9fc2l6ZSkKK3sKKyAgICBpZiAoIHN0YXJ0 ICsgbWVtc2l6ZSA8PSBtbWlvX3N0YXJ0IHx8IHN0YXJ0ID49IG1taW9fc3RhcnQgKyBtbWlvX3Np emUgKQorICAgICAgICByZXR1cm4gMDsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiAxOworfQor CitzdGF0aWMgaW50IG1lbWluaXRfaHZtKHN0cnVjdCB4Y19kb21faW1hZ2UgKmRvbSkKK3sKKyAg ICB1bnNpZ25lZCBsb25nIGksIHZtZW1pZCwgbnJfcGFnZXMgPSBkb20tPnRvdGFsX3BhZ2VzOwor ICAgIHVuc2lnbmVkIGxvbmcgcDJtX3NpemU7CisgICAgdW5zaWduZWQgbG9uZyB0YXJnZXRfcGFn ZXMgPSBkb20tPnRhcmdldF9wYWdlczsKKyAgICB1bnNpZ25lZCBsb25nIGN1cl9wYWdlcywgY3Vy X3BmbjsKKyAgICBpbnQgcmM7CisgICAgeGVuX2NhcGFiaWxpdGllc19pbmZvX3QgY2FwczsKKyAg ICB1bnNpZ25lZCBsb25nIHN0YXRfbm9ybWFsX3BhZ2VzID0gMCwgc3RhdF8ybWJfcGFnZXMgPSAw LCAKKyAgICAgICAgc3RhdF8xZ2JfcGFnZXMgPSAwOworICAgIHVuc2lnbmVkIGludCBtZW1mbGFn cyA9IDA7CisgICAgaW50IGNsYWltX2VuYWJsZWQgPSBkb20tPmNsYWltX2VuYWJsZWQ7CisgICAg dWludDY0X3QgdG90YWxfcGFnZXM7CisgICAgeGVuX3ZtZW1yYW5nZV90IGR1bW15X3ZtZW1yYW5n ZVsyXTsKKyAgICB1bnNpZ25lZCBpbnQgZHVtbXlfdm5vZGVfdG9fcG5vZGVbMV07CisgICAgeGVu X3ZtZW1yYW5nZV90ICp2bWVtcmFuZ2VzOworICAgIHVuc2lnbmVkIGludCAqdm5vZGVfdG9fcG5v ZGU7CisgICAgdW5zaWduZWQgaW50IG5yX3ZtZW1yYW5nZXMsIG5yX3Zub2RlczsKKyAgICB4Y19p bnRlcmZhY2UgKnhjaCA9IGRvbS0+eGNoOworICAgIHVpbnQzMl90IGRvbWlkID0gZG9tLT5ndWVz dF9kb21pZDsKKworICAgIGlmICggbnJfcGFnZXMgPiB0YXJnZXRfcGFnZXMgKQorICAgICAgICBt ZW1mbGFncyB8PSBYRU5NRU1GX3BvcHVsYXRlX29uX2RlbWFuZDsKKworICAgIGlmICggZG9tLT5u cl92bWVtcmFuZ2VzID09IDAgKQorICAgIHsKKyAgICAgICAgLyogQnVpbGQgZHVtbXkgdm5vZGUg aW5mb3JtYXRpb24KKyAgICAgICAgICoKKyAgICAgICAgICogR3Vlc3QgcGh5c2ljYWwgYWRkcmVz cyBzcGFjZSBsYXlvdXQ6CisgICAgICAgICAqIFswLCBob2xlX3N0YXJ0KSBbaG9sZV9zdGFydCwg NEcpIFs0RywgaGlnaG1lbV9lbmQpCisgICAgICAgICAqCisgICAgICAgICAqIE9mIGNvdXJzZSBp ZiB0aGVyZSBpcyBubyBoaWdoIG1lbW9yeSwgdGhlIHNlY29uZCB2bWVtcmFuZ2UKKyAgICAgICAg ICogaGFzIG5vIGVmZmVjdCBvbiB0aGUgYWN0dWFsIHJlc3VsdC4KKyAgICAgICAgICovCisKKyAg ICAgICAgZHVtbXlfdm1lbXJhbmdlWzBdLnN0YXJ0ID0gMDsKKyAgICAgICAgZHVtbXlfdm1lbXJh bmdlWzBdLmVuZCAgID0gZG9tLT5sb3dtZW1fZW5kOworICAgICAgICBkdW1teV92bWVtcmFuZ2Vb MF0uZmxhZ3MgPSAwOworICAgICAgICBkdW1teV92bWVtcmFuZ2VbMF0ubmlkICAgPSAwOworICAg ICAgICBucl92bWVtcmFuZ2VzID0gMTsKKworICAgICAgICBpZiAoIGRvbS0+aGlnaG1lbV9lbmQg PiAoMVVMTCA8PCAzMikgKQorICAgICAgICB7CisgICAgICAgICAgICBkdW1teV92bWVtcmFuZ2Vb MV0uc3RhcnQgPSAxVUxMIDw8IDMyOworICAgICAgICAgICAgZHVtbXlfdm1lbXJhbmdlWzFdLmVu ZCAgID0gZG9tLT5oaWdobWVtX2VuZDsKKyAgICAgICAgICAgIGR1bW15X3ZtZW1yYW5nZVsxXS5m bGFncyA9IDA7CisgICAgICAgICAgICBkdW1teV92bWVtcmFuZ2VbMV0ubmlkICAgPSAwOworCisg ICAgICAgICAgICBucl92bWVtcmFuZ2VzKys7CisgICAgICAgIH0KKworICAgICAgICBkdW1teV92 bm9kZV90b19wbm9kZVswXSA9IFhDX05VTUFfTk9fTk9ERTsKKyAgICAgICAgbnJfdm5vZGVzID0g MTsKKyAgICAgICAgdm1lbXJhbmdlcyA9IGR1bW15X3ZtZW1yYW5nZTsKKyAgICAgICAgdm5vZGVf dG9fcG5vZGUgPSBkdW1teV92bm9kZV90b19wbm9kZTsKKyAgICB9CisgICAgZWxzZQorICAgIHsK KyAgICAgICAgaWYgKCBucl9wYWdlcyA+IHRhcmdldF9wYWdlcyApCisgICAgICAgIHsKKyAgICAg ICAgICAgIERPTVBSSU5URigiQ2Fubm90IGVuYWJsZSB2TlVNQSBhbmQgUG9EIGF0IHRoZSBzYW1l IHRpbWUiKTsKKyAgICAgICAgICAgIGdvdG8gZXJyb3Jfb3V0OworICAgICAgICB9CisKKyAgICAg ICAgbnJfdm1lbXJhbmdlcyA9IGRvbS0+bnJfdm1lbXJhbmdlczsKKyAgICAgICAgbnJfdm5vZGVz ID0gZG9tLT5ucl92bm9kZXM7CisgICAgICAgIHZtZW1yYW5nZXMgPSBkb20tPnZtZW1yYW5nZXM7 CisgICAgICAgIHZub2RlX3RvX3Bub2RlID0gZG9tLT52bm9kZV90b19wbm9kZTsKKyAgICB9CisK KyAgICB0b3RhbF9wYWdlcyA9IDA7CisgICAgcDJtX3NpemUgPSAwOworICAgIGZvciAoIGkgPSAw OyBpIDwgbnJfdm1lbXJhbmdlczsgaSsrICkKKyAgICB7CisgICAgICAgIHRvdGFsX3BhZ2VzICs9 ICgodm1lbXJhbmdlc1tpXS5lbmQgLSB2bWVtcmFuZ2VzW2ldLnN0YXJ0KQorICAgICAgICAgICAg ICAgICAgICAgICAgPj4gUEFHRV9TSElGVCk7CisgICAgICAgIHAybV9zaXplID0gcDJtX3NpemUg PiAodm1lbXJhbmdlc1tpXS5lbmQgPj4gUEFHRV9TSElGVCkgPworICAgICAgICAgICAgcDJtX3Np emUgOiAodm1lbXJhbmdlc1tpXS5lbmQgPj4gUEFHRV9TSElGVCk7CisgICAgfQorCisgICAgaWYg KCB0b3RhbF9wYWdlcyAhPSBucl9wYWdlcyApCisgICAgeworICAgICAgICBET01QUklOVEYoInZO VU1BIG1lbW9yeSBwYWdlcyBtaXNtYXRjaCAoMHglIlBSSXg2NCIgIT0gMHglIlBSSXg2NCIpIiwK KyAgICAgICAgICAgICAgIHRvdGFsX3BhZ2VzLCBucl9wYWdlcyk7CisgICAgICAgIGdvdG8gZXJy b3Jfb3V0OworICAgIH0KKworICAgIGlmICggeGNfdmVyc2lvbih4Y2gsIFhFTlZFUl9jYXBhYmls aXRpZXMsICZjYXBzKSAhPSAwICkKKyAgICB7CisgICAgICAgIERPTVBSSU5URigiQ291bGQgbm90 IGdldCBYZW4gY2FwYWJpbGl0aWVzIik7CisgICAgICAgIGdvdG8gZXJyb3Jfb3V0OworICAgIH0K KworICAgIGRvbS0+cDJtX3NpemUgPSBwMm1fc2l6ZTsKKyAgICBkb20tPnAybV9ob3N0ID0geGNf ZG9tX21hbGxvYyhkb20sIHNpemVvZih4ZW5fcGZuX3QpICoKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZG9tLT5wMm1fc2l6ZSk7CisgICAgaWYgKCBkb20tPnAybV9ob3N0 ID09IE5VTEwgKQorICAgIHsKKyAgICAgICAgRE9NUFJJTlRGKCJDb3VsZCBub3QgYWxsb2NhdGUg cDJtIik7CisgICAgICAgIGdvdG8gZXJyb3Jfb3V0OworICAgIH0KKworICAgIGZvciAoIGkgPSAw OyBpIDwgcDJtX3NpemU7IGkrKyApCisgICAgICAgIGRvbS0+cDJtX2hvc3RbaV0gPSAoKHhlbl9w Zm5fdCktMSk7CisgICAgZm9yICggdm1lbWlkID0gMDsgdm1lbWlkIDwgbnJfdm1lbXJhbmdlczsg dm1lbWlkKysgKQorICAgIHsKKyAgICAgICAgdWludDY0X3QgcGZuOworCisgICAgICAgIGZvciAo IHBmbiA9IHZtZW1yYW5nZXNbdm1lbWlkXS5zdGFydCA+PiBQQUdFX1NISUZUOworICAgICAgICAg ICAgICBwZm4gPCB2bWVtcmFuZ2VzW3ZtZW1pZF0uZW5kID4+IFBBR0VfU0hJRlQ7CisgICAgICAg ICAgICAgIHBmbisrICkKKyAgICAgICAgICAgIGRvbS0+cDJtX2hvc3RbcGZuXSA9IHBmbjsKKyAg ICB9CisKKyAgICAvKgorICAgICAqIFRyeSB0byBjbGFpbSBwYWdlcyBmb3IgZWFybHkgd2Fybmlu ZyBvZiBpbnN1ZmZpY2llbnQgbWVtb3J5IGF2YWlsYWJsZS4KKyAgICAgKiBUaGlzIHNob3VsZCBn byBiZWZvcmUgeGNfZG9tYWluX3NldF9wb2RfdGFyZ2V0LCBiZWN1YXNlIHRoYXQgZnVuY3Rpb24K KyAgICAgKiBhY3R1YWxseSBhbGxvY2F0ZXMgbWVtb3J5IGZvciB0aGUgZ3Vlc3QuIENsYWltaW5n IGFmdGVyIG1lbW9yeSBoYXMgYmVlbgorICAgICAqIGFsbG9jYXRlZCBpcyBwb2ludGxlc3MuCisg ICAgICovCisgICAgaWYgKCBjbGFpbV9lbmFibGVkICkgeworICAgICAgICByYyA9IHhjX2RvbWFp bl9jbGFpbV9wYWdlcyh4Y2gsIGRvbWlkLCB0YXJnZXRfcGFnZXMgLSBWR0FfSE9MRV9TSVpFKTsK KyAgICAgICAgaWYgKCByYyAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgRE9NUFJJTlRG KCJDb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciBIVk0gZ3Vlc3QgYXMgd2UgY2Fubm90IGNs YWltIG1lbW9yeSEiKTsKKyAgICAgICAgICAgIGdvdG8gZXJyb3Jfb3V0OworICAgICAgICB9Cisg ICAgfQorCisgICAgaWYgKCBtZW1mbGFncyAmIFhFTk1FTUZfcG9wdWxhdGVfb25fZGVtYW5kICkK KyAgICB7CisgICAgICAgIC8qCisgICAgICAgICAqIFN1YnRyYWN0IFZHQV9IT0xFX1NJWkUgZnJv bSB0YXJnZXRfcGFnZXMgZm9yIHRoZSBWR0EKKyAgICAgICAgICogImhvbGUiLiAgWGVuIHdpbGwg YWRqdXN0IHRoZSBQb0QgY2FjaGUgc2l6ZSBzbyB0aGF0IGRvbWFpbgorICAgICAgICAgKiB0b3Rf cGFnZXMgd2lsbCBiZSB0YXJnZXRfcGFnZXMgLSBWR0FfSE9MRV9TSVpFIGFmdGVyCisgICAgICAg ICAqIHRoaXMgY2FsbC4KKyAgICAgICAgICovCisgICAgICAgIHJjID0geGNfZG9tYWluX3NldF9w b2RfdGFyZ2V0KHhjaCwgZG9taWQsIHRhcmdldF9wYWdlcyAtIFZHQV9IT0xFX1NJWkUsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwsIE5VTEwpOworICAg ICAgICBpZiAoIHJjICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBET01QUklOVEYoIkNv dWxkIG5vdCBzZXQgUG9EIHRhcmdldCBmb3IgSFZNIGd1ZXN0LlxuIik7CisgICAgICAgICAgICBn b3RvIGVycm9yX291dDsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qCisgICAgICogQWxsb2Nh dGUgbWVtb3J5IGZvciBIVk0gZ3Vlc3QsIHNraXBwaW5nIFZHQSBob2xlIDB4QTAwMDAtMHhDMDAw MC4KKyAgICAgKgorICAgICAqIFdlIGF0dGVtcHQgdG8gYWxsb2NhdGUgMUdCIHBhZ2VzIGlmIHBv c3NpYmxlLiBJdCBmYWxscyBiYWNrIG9uIDJNQgorICAgICAqIHBhZ2VzIGlmIDFHQiBhbGxvY2F0 aW9uIGZhaWxzLiA0S0IgcGFnZXMgd2lsbCBiZSB1c2VkIGV2ZW50dWFsbHkgaWYKKyAgICAgKiBi b3RoIGZhaWwuCisgICAgICogCisgICAgICogVW5kZXIgMk1CIG1vZGUsIHdlIGFsbG9jYXRlIHBh Z2VzIGluIGJhdGNoZXMgb2Ygbm8gbW9yZSB0aGFuIDhNQiB0byAKKyAgICAgKiBlbnN1cmUgdGhh dCB3ZSBjYW4gYmUgcHJlZW1wdGVkIGFuZCBoZW5jZSBkb20wIHJlbWFpbnMgcmVzcG9uc2l2ZS4K KyAgICAgKi8KKyAgICByYyA9IHhjX2RvbWFpbl9wb3B1bGF0ZV9waHlzbWFwX2V4YWN0KAorICAg ICAgICB4Y2gsIGRvbWlkLCAweGEwLCAwLCBtZW1mbGFncywgJmRvbS0+cDJtX2hvc3RbMHgwMF0p OworCisgICAgc3RhdF9ub3JtYWxfcGFnZXMgPSAwOworICAgIGZvciAoIHZtZW1pZCA9IDA7IHZt ZW1pZCA8IG5yX3ZtZW1yYW5nZXM7IHZtZW1pZCsrICkKKyAgICB7CisgICAgICAgIHVuc2lnbmVk IGludCBuZXdfbWVtZmxhZ3MgPSBtZW1mbGFnczsKKyAgICAgICAgdWludDY0X3QgZW5kX3BhZ2Vz OworICAgICAgICB1bnNpZ25lZCBpbnQgdm5vZGUgPSB2bWVtcmFuZ2VzW3ZtZW1pZF0ubmlkOwor ICAgICAgICB1bnNpZ25lZCBpbnQgcG5vZGUgPSB2bm9kZV90b19wbm9kZVt2bm9kZV07CisKKyAg ICAgICAgaWYgKCBwbm9kZSAhPSBYQ19OVU1BX05PX05PREUgKQorICAgICAgICAgICAgbmV3X21l bWZsYWdzIHw9IFhFTk1FTUZfZXhhY3Rfbm9kZShwbm9kZSk7CisKKyAgICAgICAgZW5kX3BhZ2Vz ID0gdm1lbXJhbmdlc1t2bWVtaWRdLmVuZCA+PiBQQUdFX1NISUZUOworICAgICAgICAvKgorICAg ICAgICAgKiBDb25zaWRlciB2Z2EgaG9sZSBiZWxvbmdzIHRvIHRoZSB2bWVtcmFuZ2UgdGhhdCBj b3ZlcnMKKyAgICAgICAgICogMHhBMDAwMC0weEMwMDAwLiBOb3RlIHRoYXQgMHgwMDAwMC0weEEw MDAwIGlzIHBvcHVsYXRlZCBqdXN0CisgICAgICAgICAqIGJlZm9yZSB0aGlzIGxvb3AuCisgICAg ICAgICAqLworICAgICAgICBpZiAoIHZtZW1yYW5nZXNbdm1lbWlkXS5zdGFydCA9PSAwICkKKyAg ICAgICAgeworICAgICAgICAgICAgY3VyX3BhZ2VzID0gMHhjMDsKKyAgICAgICAgICAgIHN0YXRf bm9ybWFsX3BhZ2VzICs9IDB4YzA7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAg ICAgY3VyX3BhZ2VzID0gdm1lbXJhbmdlc1t2bWVtaWRdLnN0YXJ0ID4+IFBBR0VfU0hJRlQ7CisK KyAgICAgICAgd2hpbGUgKCAocmMgPT0gMCkgJiYgKGVuZF9wYWdlcyA+IGN1cl9wYWdlcykgKQor ICAgICAgICB7CisgICAgICAgICAgICAvKiBDbGlwIGNvdW50IHRvIG1heGltdW0gMUdCIGV4dGVu dC4gKi8KKyAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgY291bnQgPSBlbmRfcGFnZXMgLSBjdXJf cGFnZXM7CisgICAgICAgICAgICB1bnNpZ25lZCBsb25nIG1heF9wYWdlcyA9IFNVUEVSUEFHRV8x R0JfTlJfUEZOUzsKKworICAgICAgICAgICAgaWYgKCBjb3VudCA+IG1heF9wYWdlcyApCisgICAg ICAgICAgICAgICAgY291bnQgPSBtYXhfcGFnZXM7CisKKyAgICAgICAgICAgIGN1cl9wZm4gPSBk b20tPnAybV9ob3N0W2N1cl9wYWdlc107CisKKyAgICAgICAgICAgIC8qIFRha2UgY2FyZSB0aGUg Y29ybmVyIGNhc2VzIG9mIHN1cGVyIHBhZ2UgdGFpbHMgKi8KKyAgICAgICAgICAgIGlmICggKChj dXJfcGZuICYgKFNVUEVSUEFHRV8xR0JfTlJfUEZOUy0xKSkgIT0gMCkgJiYKKyAgICAgICAgICAg ICAgICAgKGNvdW50ID4gKC1jdXJfcGZuICYgKFNVUEVSUEFHRV8xR0JfTlJfUEZOUy0xKSkpICkK KyAgICAgICAgICAgICAgICBjb3VudCA9IC1jdXJfcGZuICYgKFNVUEVSUEFHRV8xR0JfTlJfUEZO Uy0xKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKCAoKGNvdW50ICYgKFNVUEVSUEFHRV8xR0JfTlJf UEZOUy0xKSkgIT0gMCkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAoY291bnQgPiBTVVBFUlBB R0VfMUdCX05SX1BGTlMpICkKKyAgICAgICAgICAgICAgICBjb3VudCAmPSB+KFNVUEVSUEFHRV8x R0JfTlJfUEZOUyAtIDEpOworCisgICAgICAgICAgICAvKiBBdHRlbXAgdG8gYWxsb2NhdGUgMUdC IHN1cGVyIHBhZ2UuIEJlY2F1c2UgaW4gZWFjaCBwYXNzCisgICAgICAgICAgICAgKiB3ZSBvbmx5 IGFsbG9jYXRlIGF0IG1vc3QgMUdCLCB3ZSBkb24ndCBoYXZlIHRvIGNsaXAKKyAgICAgICAgICAg ICAqIHN1cGVyIHBhZ2UgYm91bmRhcmllcy4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAg aWYgKCAoKGNvdW50IHwgY3VyX3BmbikgJiAoU1VQRVJQQUdFXzFHQl9OUl9QRk5TIC0gMSkpID09 IDAgJiYKKyAgICAgICAgICAgICAgICAgLyogQ2hlY2sgaWYgdGhlcmUgZXhpc3RzIE1NSU8gaG9s ZSBpbiB0aGUgMUdCIG1lbW9yeQorICAgICAgICAgICAgICAgICAgKiByYW5nZSAqLworICAgICAg ICAgICAgICAgICAhY2hlY2tfbW1pb19ob2xlKGN1cl9wZm4gPDwgUEFHRV9TSElGVCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVVBFUlBBR0VfMUdCX05SX1BGTlMgPDwgUEFH RV9TSElGVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb20tPm1taW9fc3Rh cnQsIGRvbS0+bW1pb19zaXplKSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbG9u ZyBkb25lOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbnJfZXh0ZW50cyA9IGNvdW50 ID4+IFNVUEVSUEFHRV8xR0JfU0hJRlQ7CisgICAgICAgICAgICAgICAgeGVuX3Bmbl90IHNwX2V4 dGVudHNbbnJfZXh0ZW50c107CisKKyAgICAgICAgICAgICAgICBmb3IgKCBpID0gMDsgaSA8IG5y X2V4dGVudHM7IGkrKyApCisgICAgICAgICAgICAgICAgICAgIHNwX2V4dGVudHNbaV0gPQorICAg ICAgICAgICAgICAgICAgICAgICAgZG9tLT5wMm1faG9zdFtjdXJfcGFnZXMrKGk8PFNVUEVSUEFH RV8xR0JfU0hJRlQpXTsKKworICAgICAgICAgICAgICAgIGRvbmUgPSB4Y19kb21haW5fcG9wdWxh dGVfcGh5c21hcCh4Y2gsIGRvbWlkLCBucl9leHRlbnRzLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVVBFUlBBR0VfMUdCX1NISUZULAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1mbGFncywgc3Bf ZXh0ZW50cyk7CisKKyAgICAgICAgICAgICAgICBpZiAoIGRvbmUgPiAwICkKKyAgICAgICAgICAg ICAgICB7CisgICAgICAgICAgICAgICAgICAgIHN0YXRfMWdiX3BhZ2VzICs9IGRvbmU7CisgICAg ICAgICAgICAgICAgICAgIGRvbmUgPDw9IFNVUEVSUEFHRV8xR0JfU0hJRlQ7CisgICAgICAgICAg ICAgICAgICAgIGN1cl9wYWdlcyArPSBkb25lOworICAgICAgICAgICAgICAgICAgICBjb3VudCAt PSBkb25lOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg aWYgKCBjb3VudCAhPSAwICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBDbGlw IGNvdW50IHRvIG1heGltdW0gOE1CIGV4dGVudC4gKi8KKyAgICAgICAgICAgICAgICBtYXhfcGFn ZXMgPSBTVVBFUlBBR0VfMk1CX05SX1BGTlMgKiA0OworICAgICAgICAgICAgICAgIGlmICggY291 bnQgPiBtYXhfcGFnZXMgKQorICAgICAgICAgICAgICAgICAgICBjb3VudCA9IG1heF9wYWdlczsK KworICAgICAgICAgICAgICAgIC8qIENsaXAgcGFydGlhbCBzdXBlcnBhZ2UgZXh0ZW50cyB0byBz dXBlcnBhZ2UKKyAgICAgICAgICAgICAgICAgKiBib3VuZGFyaWVzLiAqLworICAgICAgICAgICAg ICAgIGlmICggKChjdXJfcGZuICYgKFNVUEVSUEFHRV8yTUJfTlJfUEZOUy0xKSkgIT0gMCkgJiYK KyAgICAgICAgICAgICAgICAgICAgIChjb3VudCA+ICgtY3VyX3BmbiAmIChTVVBFUlBBR0VfMk1C X05SX1BGTlMtMSkpKSApCisgICAgICAgICAgICAgICAgICAgIGNvdW50ID0gLWN1cl9wZm4gJiAo U1VQRVJQQUdFXzJNQl9OUl9QRk5TLTEpOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKCAoKGNv dW50ICYgKFNVUEVSUEFHRV8yTUJfTlJfUEZOUy0xKSkgIT0gMCkgJiYKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgKGNvdW50ID4gU1VQRVJQQUdFXzJNQl9OUl9QRk5TKSApCisgICAgICAgICAg ICAgICAgICAgIGNvdW50ICY9IH4oU1VQRVJQQUdFXzJNQl9OUl9QRk5TIC0gMSk7IC8qIGNsaXAg bm9uLXMucC4gdGFpbCAqLworCisgICAgICAgICAgICAgICAgLyogQXR0ZW1wdCB0byBhbGxvY2F0 ZSBzdXBlcnBhZ2UgZXh0ZW50cy4gKi8KKyAgICAgICAgICAgICAgICBpZiAoICgoY291bnQgfCBj dXJfcGZuKSAmIChTVVBFUlBBR0VfMk1CX05SX1BGTlMgLSAxKSkgPT0gMCApCisgICAgICAgICAg ICAgICAgeworICAgICAgICAgICAgICAgICAgICBsb25nIGRvbmU7CisgICAgICAgICAgICAgICAg ICAgIHVuc2lnbmVkIGxvbmcgbnJfZXh0ZW50cyA9IGNvdW50ID4+IFNVUEVSUEFHRV8yTUJfU0hJ RlQ7CisgICAgICAgICAgICAgICAgICAgIHhlbl9wZm5fdCBzcF9leHRlbnRzW25yX2V4dGVudHNd OworCisgICAgICAgICAgICAgICAgICAgIGZvciAoIGkgPSAwOyBpIDwgbnJfZXh0ZW50czsgaSsr ICkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNwX2V4dGVudHNbaV0gPQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGRvbS0+cDJtX2hvc3RbY3VyX3BhZ2VzKyhpPDxTVVBFUlBBR0VfMk1C X1NISUZUKV07CisKKyAgICAgICAgICAgICAgICAgICAgZG9uZSA9IHhjX2RvbWFpbl9wb3B1bGF0 ZV9waHlzbWFwKHhjaCwgZG9taWQsIG5yX2V4dGVudHMsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVVBFUlBBR0VfMk1CX1NISUZULAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtZmxh Z3MsIHNwX2V4dGVudHMpOworCisgICAgICAgICAgICAgICAgICAgIGlmICggZG9uZSA+IDAgKQor ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0XzJtYl9w YWdlcyArPSBkb25lOworICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSA8PD0gU1VQRVJQQUdF XzJNQl9TSElGVDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cl9wYWdlcyArPSBkb25lOwor ICAgICAgICAgICAgICAgICAgICAgICAgY291bnQgLT0gZG9uZTsKKyAgICAgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyog RmFsbCBiYWNrIHRvIDRrQiBleHRlbnRzLiAqLworICAgICAgICAgICAgaWYgKCBjb3VudCAhPSAw ICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByYyA9IHhjX2RvbWFpbl9wb3B1bGF0 ZV9waHlzbWFwX2V4YWN0KAorICAgICAgICAgICAgICAgICAgICB4Y2gsIGRvbWlkLCBjb3VudCwg MCwgbmV3X21lbWZsYWdzLCAmZG9tLT5wMm1faG9zdFtjdXJfcGFnZXNdKTsKKyAgICAgICAgICAg ICAgICBjdXJfcGFnZXMgKz0gY291bnQ7CisgICAgICAgICAgICAgICAgc3RhdF9ub3JtYWxfcGFn ZXMgKz0gY291bnQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoIHJj ICE9IDAgKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKCByYyAhPSAwICkK KyAgICB7CisgICAgICAgIERPTVBSSU5URigiQ291bGQgbm90IGFsbG9jYXRlIG1lbW9yeSBmb3Ig SFZNIGd1ZXN0LiIpOworICAgICAgICBnb3RvIGVycm9yX291dDsKKyAgICB9CisKKyAgICBEUFJJ TlRGKCJQSFlTSUNBTCBNRU1PUlkgQUxMT0NBVElPTjpcbiIpOworICAgIERQUklOVEYoIiAgNEtC IFBBR0VTOiAweCUwMTZseFxuIiwgc3RhdF9ub3JtYWxfcGFnZXMpOworICAgIERQUklOVEYoIiAg Mk1CIFBBR0VTOiAweCUwMTZseFxuIiwgc3RhdF8ybWJfcGFnZXMpOworICAgIERQUklOVEYoIiAg MUdCIFBBR0VTOiAweCUwMTZseFxuIiwgc3RhdF8xZ2JfcGFnZXMpOworCisgICAgcmMgPSAwOwor ICAgIGdvdG8gb3V0OworIGVycm9yX291dDoKKyAgICByYyA9IC0xOworIG91dDoKKworICAgIC8q IGVuc3VyZSBubyB1bmNsYWltZWQgcGFnZXMgYXJlIGxlZnQgdW51c2VkICovCisgICAgeGNfZG9t YWluX2NsYWltX3BhZ2VzKHhjaCwgZG9taWQsIDAgLyogY2FuY2VscyB0aGUgY2xhaW0gKi8pOwor CisgICAgcmV0dXJuIHJjOworfQorCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogc3RhdGljIGlu dCBib290ZWFybHkoc3RydWN0IHhjX2RvbV9pbWFnZSAqZG9tKQpAQCAtMTA1Miw2ICsxNjI2LDEy IEBAIHN0YXRpYyBpbnQgYm9vdGxhdGVfcHYoc3RydWN0IHhjX2RvbV9pbWFnZSAqZG9tKQogICAg IHJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGJvb3RsYXRlX2h2bShzdHJ1Y3QgeGNfZG9tX2lt YWdlICpkb20pCit7CisgICAgRE9NUFJJTlRGKCIlczogZG9pbmcgbm90aGluZyIsIF9fZnVuY19f KTsKKyAgICByZXR1cm4gMDsKK30KKwogaW50IHhjX2RvbV9mZWF0dXJlX3RyYW5zbGF0ZWQoc3Ry dWN0IHhjX2RvbV9pbWFnZSAqZG9tKQogewogICAgIC8qIEd1ZXN0cyBydW5uaW5nIGluc2lkZSBI Vk0gY29udGFpbmVycyBhcmUgYWx3YXlzIGF1dG8tdHJhbnNsYXRlZC4gKi8KQEAgLTEwOTUsMTAg KzE2NzUsMjcgQEAgc3RhdGljIHN0cnVjdCB4Y19kb21fYXJjaCB4Y19kb21fNjQgPSB7CiAgICAg LmJvb3RsYXRlID0gYm9vdGxhdGVfcHYsCiB9OwogCitzdGF0aWMgc3RydWN0IHhjX2RvbV9hcmNo IHhjX2h2bV8zMiA9IHsKKyAgICAuZ3Vlc3RfdHlwZSA9ICJodm0tMy4wLXg4Nl8zMiIsCisgICAg Lm5hdGl2ZV9wcm90b2NvbCA9IFhFTl9JT19QUk9UT19BQklfWDg2XzMyLAorICAgIC5wYWdlX3No aWZ0ID0gUEFHRV9TSElGVF9YODYsCisgICAgLnNpemVvZl9wZm4gPSA0LAorICAgIC5hbGxvY19t YWdpY19wYWdlcyA9IGFsbG9jX21hZ2ljX3BhZ2VzX2h2bSwKKyAgICAuY291bnRfcGd0YWJsZXMg PSBOVUxMLAorICAgIC5zZXR1cF9wZ3RhYmxlcyA9IE5VTEwsCisgICAgLnN0YXJ0X2luZm8gPSBO VUxMLAorICAgIC5zaGFyZWRfaW5mbyA9IE5VTEwsCisgICAgLnZjcHUgPSB2Y3B1X2h2bSwKKyAg ICAubWVtaW5pdCA9IG1lbWluaXRfaHZtLAorICAgIC5ib290ZWFybHkgPSBib290ZWFybHksCisg ICAgLmJvb3RsYXRlID0gYm9vdGxhdGVfaHZtLAorfTsKKwogc3RhdGljIHZvaWQgX19pbml0IHJl Z2lzdGVyX2FyY2hfaG9va3Modm9pZCkKIHsKICAgICB4Y19kb21fcmVnaXN0ZXJfYXJjaF9ob29r cygmeGNfZG9tXzMyX3BhZSk7CiAgICAgeGNfZG9tX3JlZ2lzdGVyX2FyY2hfaG9va3MoJnhjX2Rv bV82NCk7CisgICAgeGNfZG9tX3JlZ2lzdGVyX2FyY2hfaG9va3MoJnhjX2h2bV8zMik7CiB9CiAK IC8qCi0tIAoxLjkuNSAoQXBwbGUgR2l0LTUwLjMpCgoKX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxA bGlzdHMueGVuLm9yZwpodHRwOi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK