From mboxrd@z Thu Jan 1 00:00:00 1970 From: Wei Liu Subject: [PATCH for-next v2 10/10] x86/domain: move HVM specific code to hvm/domain.c Date: Tue, 25 Apr 2017 14:52:11 +0100 Message-ID: <20170425135211.4696-11-wei.liu2@citrix.com> References: <20170425135211.4696-1-wei.liu2@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta6.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1d31Oq-0003p0-Mu for xen-devel@lists.xenproject.org; Tue, 25 Apr 2017 14:25:04 +0000 In-Reply-To: <20170425135211.4696-1-wei.liu2@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Xen-devel Cc: Wei Liu List-Id: xen-devel@lists.xenproject.org VGhlcmUgaXMgb25seSBvbmUgZnVuY3Rpb24gYXJjaF9zZXRfaW5mb19odm1fZ3Vlc3QgaXMgbW92 ZWQuIFRoZQpjaGVja19zZWdtZW50IGZ1bmN0aW9uIGlzIGFsc28gbW92ZWQgc2luY2UgYXJjaF9z ZXRfaW5mb19odm1fZ3Vlc3QgaXMKdGhlIG9ubHkgdXNlci4KCk5vIGZ1bmN0aW9uYWwgY2hhbmdl LgoKU2lnbmVkLW9mZi1ieTogV2VpIExpdSA8d2VpLmxpdTJAY2l0cml4LmNvbT4KQWNrZWQtYnk6 IEphbiBCZXVsaWNoIDxqYmV1bGljaEBzdXNlLmNvbT4KLS0tCiB4ZW4vYXJjaC94ODYvZG9tYWlu LmMgICAgIHwgMjkxIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiB4 ZW4vYXJjaC94ODYvaHZtL01ha2VmaWxlIHwgICAxICsKIHhlbi9hcmNoL3g4Ni9odm0vZG9tYWlu LmMgfCAzMjYgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwog MyBmaWxlcyBjaGFuZ2VkLCAzMjcgaW5zZXJ0aW9ucygrKSwgMjkxIGRlbGV0aW9ucygtKQogY3Jl YXRlIG1vZGUgMTAwNjQ0IHhlbi9hcmNoL3g4Ni9odm0vZG9tYWluLmMKCmRpZmYgLS1naXQgYS94 ZW4vYXJjaC94ODYvZG9tYWluLmMgYi94ZW4vYXJjaC94ODYvZG9tYWluLmMKaW5kZXggN2M4M2Zl YzhmYy4uM2Q4NmU1NjQxZCAxMDA2NDQKLS0tIGEveGVuL2FyY2gveDg2L2RvbWFpbi5jCisrKyBi L3hlbi9hcmNoL3g4Ni9kb21haW4uYwpAQCAtMTEwNCwyOTcgKzExMDQsNiBAQCBpbnQgYXJjaF9z ZXRfaW5mb19ndWVzdCgKICN1bmRlZiBjCiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGNoZWNrX3Nl Z21lbnQoc3RydWN0IHNlZ21lbnRfcmVnaXN0ZXIgKnJlZywKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZW51bSB4ODZfc2VnbWVudCBzZWcpCi17Ci0KLSAgICBpZiAoIHJlZy0+YXR0 ci5maWVsZHMucGFkICE9IDAgKQotICAgIHsKLSAgICAgICAgZ3ByaW50ayhYRU5MT0dfRVJSLCAi U2VnbWVudCBhdHRyaWJ1dGUgYml0cyAxMi0xNSBhcmUgbm90IHplcm9cbiIpOwotICAgICAgICBy ZXR1cm4gLUVJTlZBTDsKLSAgICB9Ci0KLSAgICBpZiAoIHJlZy0+YXR0ci5ieXRlcyA9PSAwICkK LSAgICB7Ci0gICAgICAgIGlmICggc2VnICE9IHg4Nl9zZWdfZHMgJiYgc2VnICE9IHg4Nl9zZWdf ZXMgKQotICAgICAgICB7Ci0gICAgICAgICAgICBncHJpbnRrKFhFTkxPR19FUlIsICJOdWxsIHNl bGVjdG9yIHByb3ZpZGVkIGZvciBDUywgU1Mgb3IgVFJcbiIpOwotICAgICAgICAgICAgcmV0dXJu IC1FSU5WQUw7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgaWYg KCBzZWcgPT0geDg2X3NlZ190ciApCi0gICAgewotICAgICAgICBpZiAoIHJlZy0+YXR0ci5maWVs ZHMucyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGdwcmludGsoWEVOTE9HX0VSUiwgIkNvZGUg b3IgZGF0YSBzZWdtZW50IHByb3ZpZGVkIGZvciBUUlxuIik7Ci0gICAgICAgICAgICByZXR1cm4g LUVJTlZBTDsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICggcmVnLT5hdHRyLmZpZWxkcy50eXBl ICE9IFNZU19ERVNDX3Rzc19idXN5ICkKLSAgICAgICAgewotICAgICAgICAgICAgZ3ByaW50ayhY RU5MT0dfRVJSLCAiTm9uLTMyLWJpdC1UU1Mgc2VnbWVudCBwcm92aWRlZCBmb3IgVFJcbiIpOwot ICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBp ZiAoICFyZWctPmF0dHIuZmllbGRzLnMgKQotICAgIHsKLSAgICAgICAgZ3ByaW50ayhYRU5MT0df RVJSLAotICAgICAgICAgICAgICAgICJTeXN0ZW0gc2VnbWVudCBwcm92aWRlZCBmb3IgYSBjb2Rl IG9yIGRhdGEgc2VnbWVudFxuIik7Ci0gICAgICAgIHJldHVybiAtRUlOVkFMOwotICAgIH0KLQot ICAgIGlmICggIXJlZy0+YXR0ci5maWVsZHMucCApCi0gICAgewotICAgICAgICBncHJpbnRrKFhF TkxPR19FUlIsICJOb24tcHJlc2VudCBzZWdtZW50IHByb3ZpZGVkXG4iKTsKLSAgICAgICAgcmV0 dXJuIC1FSU5WQUw7Ci0gICAgfQotCi0gICAgaWYgKCBzZWcgPT0geDg2X3NlZ19jcyAmJiAhKHJl Zy0+YXR0ci5maWVsZHMudHlwZSAmIDB4OCkgKQotICAgIHsKLSAgICAgICAgZ3ByaW50ayhYRU5M T0dfRVJSLCAiTm9uLWNvZGUgc2VnbWVudCBwcm92aWRlZCBmb3IgQ1NcbiIpOwotICAgICAgICBy ZXR1cm4gLUVJTlZBTDsKLSAgICB9Ci0KLSAgICBpZiAoIHNlZyA9PSB4ODZfc2VnX3NzICYmCi0g ICAgICAgICAoKHJlZy0+YXR0ci5maWVsZHMudHlwZSAmIDB4OCkgfHwgIShyZWctPmF0dHIuZmll bGRzLnR5cGUgJiAweDIpKSApCi0gICAgewotICAgICAgICBncHJpbnRrKFhFTkxPR19FUlIsICJO b24td3JpdGVhYmxlIHNlZ21lbnQgcHJvdmlkZWQgZm9yIFNTXG4iKTsKLSAgICAgICAgcmV0dXJu IC1FSU5WQUw7Ci0gICAgfQotCi0gICAgaWYgKCByZWctPmF0dHIuZmllbGRzLnMgJiYgc2VnICE9 IHg4Nl9zZWdfc3MgJiYgc2VnICE9IHg4Nl9zZWdfY3MgJiYKLSAgICAgICAgIChyZWctPmF0dHIu ZmllbGRzLnR5cGUgJiAweDgpICYmICEocmVnLT5hdHRyLmZpZWxkcy50eXBlICYgMHgyKSApCi0g ICAgewotICAgICAgICBncHJpbnRrKFhFTkxPR19FUlIsICJOb24tcmVhZGFibGUgc2VnbWVudCBw cm92aWRlZCBmb3IgRFMgb3IgRVNcbiIpOwotICAgICAgICByZXR1cm4gLUVJTlZBTDsKLSAgICB9 Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotLyogQ2FsbGVkIGJ5IFZDUFVPUF9pbml0aWFsaXNlIGZv ciBIVk0gZ3Vlc3RzLiAqLwotaW50IGFyY2hfc2V0X2luZm9faHZtX2d1ZXN0KHN0cnVjdCB2Y3B1 ICp2LCBjb25zdCB2Y3B1X2h2bV9jb250ZXh0X3QgKmN0eCkKLXsKLSAgICBzdHJ1Y3QgY3B1X3Vz ZXJfcmVncyAqdXJlZ3MgPSAmdi0+YXJjaC51c2VyX3JlZ3M7Ci0gICAgc3RydWN0IHNlZ21lbnRf cmVnaXN0ZXIgY3MsIGRzLCBzcywgZXMsIHRyOwotICAgIGNvbnN0IGNoYXIgKmVycnN0cjsKLSAg ICBpbnQgcmM7Ci0KLSAgICBpZiAoIGN0eC0+cGFkICE9IDAgKQotICAgICAgICByZXR1cm4gLUVJ TlZBTDsKLQotICAgIHN3aXRjaCAoIGN0eC0+bW9kZSApCi0gICAgewotICAgIGRlZmF1bHQ6Ci0g ICAgICAgIHJldHVybiAtRUlOVkFMOwotCi0gICAgY2FzZSBWQ1BVX0hWTV9NT0RFXzMyQjoKLSAg ICB7Ci0gICAgICAgIGNvbnN0IHN0cnVjdCB2Y3B1X2h2bV94ODZfMzIgKnJlZ3MgPSAmY3R4LT5j cHVfcmVncy54ODZfMzI7Ci0gICAgICAgIHVpbnQzMl90IGxpbWl0OwotCi0gICAgICAgIGlmICgg Y3R4LT5jcHVfcmVncy54ODZfMzIucGFkMSAhPSAwIHx8Ci0gICAgICAgICAgICAgY3R4LT5jcHVf cmVncy54ODZfMzIucGFkMlswXSAhPSAwIHx8Ci0gICAgICAgICAgICAgY3R4LT5jcHVfcmVncy54 ODZfMzIucGFkMlsxXSAhPSAwIHx8Ci0gICAgICAgICAgICAgY3R4LT5jcHVfcmVncy54ODZfMzIu cGFkMlsyXSAhPSAwICkKLSAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwotCi0jZGVmaW5lIFNF RyhzLCByKSAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAotICAgIHMgPSAoc3RydWN0IHNlZ21lbnRfcmVnaXN0ZXIpeyAuYmFzZSA9IChy KS0+cyAjIyBfYmFzZSwgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLmxpbWl0ID0gKHIpLT5zICMjIF9saW1pdCwgICAgICAgICAgICAgICBcCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5hdHRyLmJ5dGVzID0gKHIpLT5zICMj IF9hciB9OyAgICAgICAgICAgXAotICAgIC8qIFNldCBhY2Nlc3NlZCAvIGJ1c3kgYml0IGZvciBw cmVzZW50IHNlZ21lbnRzLiAqLyAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoIHMuYXR0 ci5maWVsZHMucCApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCi0gICAgICAgIHMuYXR0ci5maWVsZHMudHlwZSB8PSAoeDg2X3NlZ18jI3MgIT0geDg2 X3NlZ190ciA/IDEgOiAyKTsgICAgICAgICAgXAotICAgIGNoZWNrX3NlZ21lbnQoJnMsIHg4Nl9z ZWdfICMjIHMpOyB9KQotCi0gICAgICAgIHJjID0gU0VHKGNzLCByZWdzKTsKLSAgICAgICAgcmMg fD0gU0VHKGRzLCByZWdzKTsKLSAgICAgICAgcmMgfD0gU0VHKHNzLCByZWdzKTsKLSAgICAgICAg cmMgfD0gU0VHKGVzLCByZWdzKTsKLSAgICAgICAgcmMgfD0gU0VHKHRyLCByZWdzKTsKLSN1bmRl ZiBTRUcKLQotICAgICAgICBpZiAoIHJjICE9IDAgKQotICAgICAgICAgICAgcmV0dXJuIHJjOwot Ci0gICAgICAgIC8qIEJhc2ljIHNhbml0eSBjaGVja3MuICovCi0gICAgICAgIGxpbWl0ID0gY3Mu bGltaXQ7Ci0gICAgICAgIGlmICggY3MuYXR0ci5maWVsZHMuZyApCi0gICAgICAgICAgICBsaW1p dCA9IChsaW1pdCA8PCAxMikgfCAweGZmZjsKLSAgICAgICAgaWYgKCByZWdzLT5laXAgPiBsaW1p dCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGdwcmludGsoWEVOTE9HX0VSUiwgIkVJUCAoJSMw OHgpIG91dHNpZGUgQ1MgbGltaXQgKCUjMDh4KVxuIiwKLSAgICAgICAgICAgICAgICAgICAgcmVn cy0+ZWlwLCBsaW1pdCk7Ci0gICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKLSAgICAgICAgfQot Ci0gICAgICAgIGlmICggc3MuYXR0ci5maWVsZHMuZHBsICE9IGNzLmF0dHIuZmllbGRzLmRwbCAp Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGdwcmludGsoWEVOTE9HX0VSUiwgIlNTLkRQTCAoJXUp IGlzIGRpZmZlcmVudCB0aGFuIENTLkRQTCAoJXUpXG4iLAotICAgICAgICAgICAgICAgICAgICBz cy5hdHRyLmZpZWxkcy5kcGwsIGNzLmF0dHIuZmllbGRzLmRwbCk7Ci0gICAgICAgICAgICByZXR1 cm4gLUVJTlZBTDsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICggZHMuYXR0ci5maWVsZHMucCAm JiBkcy5hdHRyLmZpZWxkcy5kcGwgPiBjcy5hdHRyLmZpZWxkcy5kcGwgKQotICAgICAgICB7Ci0g ICAgICAgICAgICBncHJpbnRrKFhFTkxPR19FUlIsICJEUy5EUEwgKCV1KSBpcyBncmVhdGVyIHRo YW4gQ1MuRFBMICgldSlcbiIsCi0gICAgICAgICAgICAgICAgICAgIGRzLmF0dHIuZmllbGRzLmRw bCwgY3MuYXR0ci5maWVsZHMuZHBsKTsKLSAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwotICAg ICAgICB9Ci0KLSAgICAgICAgaWYgKCBlcy5hdHRyLmZpZWxkcy5wICYmIGVzLmF0dHIuZmllbGRz LmRwbCA+IGNzLmF0dHIuZmllbGRzLmRwbCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGdwcmlu dGsoWEVOTE9HX0VSUiwgIkVTLkRQTCAoJXUpIGlzIGdyZWF0ZXIgdGhhbiBDUy5EUEwgKCV1KVxu IiwKLSAgICAgICAgICAgICAgICAgICAgZXMuYXR0ci5maWVsZHMuZHBsLCBjcy5hdHRyLmZpZWxk cy5kcGwpOwotICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0gICAgICAgIH0KLQotICAgICAg ICBpZiAoIChyZWdzLT5lZmVyICYgRUZFUl9MTUEpICYmICEocmVncy0+ZWZlciAmIEVGRVJfTE1F KSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGdwcmludGsoWEVOTE9HX0VSUiwgIkVGRVIuTE1B IHNldCB3aXRob3V0IEVGRVIuTE1FICglIzAxNmx4KVxuIiwKLSAgICAgICAgICAgICAgICAgICAg cmVncy0+ZWZlcik7Ci0gICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKLSAgICAgICAgfQotCi0g ICAgICAgIHVyZWdzLT5yYXggICAgPSByZWdzLT5lYXg7Ci0gICAgICAgIHVyZWdzLT5yY3ggICAg PSByZWdzLT5lY3g7Ci0gICAgICAgIHVyZWdzLT5yZHggICAgPSByZWdzLT5lZHg7Ci0gICAgICAg IHVyZWdzLT5yYnggICAgPSByZWdzLT5lYng7Ci0gICAgICAgIHVyZWdzLT5yc3AgICAgPSByZWdz LT5lc3A7Ci0gICAgICAgIHVyZWdzLT5yYnAgICAgPSByZWdzLT5lYnA7Ci0gICAgICAgIHVyZWdz LT5yc2kgICAgPSByZWdzLT5lc2k7Ci0gICAgICAgIHVyZWdzLT5yZGkgICAgPSByZWdzLT5lZGk7 Ci0gICAgICAgIHVyZWdzLT5yaXAgICAgPSByZWdzLT5laXA7Ci0gICAgICAgIHVyZWdzLT5yZmxh Z3MgPSByZWdzLT5lZmxhZ3M7Ci0KLSAgICAgICAgdi0+YXJjaC5odm1fdmNwdS5ndWVzdF9jclsw XSA9IHJlZ3MtPmNyMDsKLSAgICAgICAgdi0+YXJjaC5odm1fdmNwdS5ndWVzdF9jclszXSA9IHJl Z3MtPmNyMzsKLSAgICAgICAgdi0+YXJjaC5odm1fdmNwdS5ndWVzdF9jcls0XSA9IHJlZ3MtPmNy NDsKLSAgICAgICAgdi0+YXJjaC5odm1fdmNwdS5ndWVzdF9lZmVyICA9IHJlZ3MtPmVmZXI7Ci0g ICAgfQotICAgIGJyZWFrOwotCi0gICAgY2FzZSBWQ1BVX0hWTV9NT0RFXzY0QjoKLSAgICB7Ci0g ICAgICAgIGNvbnN0IHN0cnVjdCB2Y3B1X2h2bV94ODZfNjQgKnJlZ3MgPSAmY3R4LT5jcHVfcmVn cy54ODZfNjQ7Ci0KLSAgICAgICAgLyogQmFzaWMgc2FuaXR5IGNoZWNrcy4gKi8KLSAgICAgICAg aWYgKCAhaXNfY2Fub25pY2FsX2FkZHJlc3MocmVncy0+cmlwKSApCi0gICAgICAgIHsKLSAgICAg ICAgICAgIGdwcmludGsoWEVOTE9HX0VSUiwgIlJJUCBjb250YWlucyBhIG5vbi1jYW5vbmljYWwg YWRkcmVzcyAoJSNseClcbiIsCi0gICAgICAgICAgICAgICAgICAgIHJlZ3MtPnJpcCk7Ci0gICAg ICAgICAgICByZXR1cm4gLUVJTlZBTDsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICggIShyZWdz LT5jcjAgJiBYODZfQ1IwX1BHKSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGdwcmludGsoWEVO TE9HX0VSUiwgIkNSMCBkb2Vzbid0IGhhdmUgcGFnaW5nIGVuYWJsZWQgKCUjMDE2bHgpXG4iLAot ICAgICAgICAgICAgICAgICAgICByZWdzLT5jcjApOwotICAgICAgICAgICAgcmV0dXJuIC1FSU5W QUw7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoICEocmVncy0+Y3I0ICYgWDg2X0NSNF9QQUUp ICkKLSAgICAgICAgewotICAgICAgICAgICAgZ3ByaW50ayhYRU5MT0dfRVJSLCAiQ1I0IGRvZXNu J3QgaGF2ZSBQQUUgZW5hYmxlZCAoJSMwMTZseClcbiIsCi0gICAgICAgICAgICAgICAgICAgIHJl Z3MtPmNyNCk7Ci0gICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKLSAgICAgICAgfQotCi0gICAg ICAgIGlmICggIShyZWdzLT5lZmVyICYgRUZFUl9MTUUpICkKLSAgICAgICAgewotICAgICAgICAg ICAgZ3ByaW50ayhYRU5MT0dfRVJSLCAiRUZFUiBkb2Vzbid0IGhhdmUgTE1FIGVuYWJsZWQgKCUj MDE2bHgpXG4iLAotICAgICAgICAgICAgICAgICAgICByZWdzLT5lZmVyKTsKLSAgICAgICAgICAg IHJldHVybiAtRUlOVkFMOwotICAgICAgICB9Ci0KLSAgICAgICAgdXJlZ3MtPnJheCAgICA9IHJl Z3MtPnJheDsKLSAgICAgICAgdXJlZ3MtPnJjeCAgICA9IHJlZ3MtPnJjeDsKLSAgICAgICAgdXJl Z3MtPnJkeCAgICA9IHJlZ3MtPnJkeDsKLSAgICAgICAgdXJlZ3MtPnJieCAgICA9IHJlZ3MtPnJi eDsKLSAgICAgICAgdXJlZ3MtPnJzcCAgICA9IHJlZ3MtPnJzcDsKLSAgICAgICAgdXJlZ3MtPnJi cCAgICA9IHJlZ3MtPnJicDsKLSAgICAgICAgdXJlZ3MtPnJzaSAgICA9IHJlZ3MtPnJzaTsKLSAg ICAgICAgdXJlZ3MtPnJkaSAgICA9IHJlZ3MtPnJkaTsKLSAgICAgICAgdXJlZ3MtPnJpcCAgICA9 IHJlZ3MtPnJpcDsKLSAgICAgICAgdXJlZ3MtPnJmbGFncyA9IHJlZ3MtPnJmbGFnczsKLQotICAg ICAgICB2LT5hcmNoLmh2bV92Y3B1Lmd1ZXN0X2NyWzBdID0gcmVncy0+Y3IwOwotICAgICAgICB2 LT5hcmNoLmh2bV92Y3B1Lmd1ZXN0X2NyWzNdID0gcmVncy0+Y3IzOwotICAgICAgICB2LT5hcmNo Lmh2bV92Y3B1Lmd1ZXN0X2NyWzRdID0gcmVncy0+Y3I0OwotICAgICAgICB2LT5hcmNoLmh2bV92 Y3B1Lmd1ZXN0X2VmZXIgID0gcmVncy0+ZWZlcjsKLQotI2RlZmluZSBTRUcobCwgYSkgKHN0cnVj dCBzZWdtZW50X3JlZ2lzdGVyKXsgLmxpbWl0ID0gKGwpLCAuYXR0ci5ieXRlcyA9IChhKSB9Ci0g ICAgICAgIGNzID0gU0VHKH4wdSwgMHhhOWIpOyAvKiA2NGJpdCBjb2RlIHNlZ21lbnQuICovCi0g ICAgICAgIGRzID0gc3MgPSBlcyA9IFNFRyh+MHUsIDB4YzkzKTsKLSAgICAgICAgdHIgPSBTRUco MHg2NywgMHg4Yik7IC8qIDY0Yml0IFRTUyAoYnVzeSkuICovCi0jdW5kZWYgU0VHCi0gICAgfQot ICAgIGJyZWFrOwotCi0gICAgfQotCi0gICAgaWYgKCB2LT5hcmNoLmh2bV92Y3B1Lmd1ZXN0X2Vm ZXIgJiBFRkVSX0xNRSApCi0gICAgICAgIHYtPmFyY2guaHZtX3ZjcHUuZ3Vlc3RfZWZlciB8PSBF RkVSX0xNQTsKLQotICAgIGlmICggdi0+YXJjaC5odm1fdmNwdS5ndWVzdF9jcls0XSAmIH5odm1f Y3I0X2d1ZXN0X3ZhbGlkX2JpdHModiwgMCkgKQotICAgIHsKLSAgICAgICAgZ3ByaW50ayhYRU5M T0dfRVJSLCAiQmFkIENSNCB2YWx1ZTogJSMwMTZseFxuIiwKLSAgICAgICAgICAgICAgICB2LT5h cmNoLmh2bV92Y3B1Lmd1ZXN0X2NyWzRdKTsKLSAgICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0gICAg fQotCi0gICAgZXJyc3RyID0gaHZtX2VmZXJfdmFsaWQodiwgdi0+YXJjaC5odm1fdmNwdS5ndWVz dF9lZmVyLCAtMSk7Ci0gICAgaWYgKCBlcnJzdHIgKQotICAgIHsKLSAgICAgICAgZ3ByaW50ayhY RU5MT0dfRVJSLCAiQmFkIEVGRVIgdmFsdWUgKCUjMDE2bHgpOiAlc1xuIiwKLSAgICAgICAgICAg ICAgIHYtPmFyY2guaHZtX3ZjcHUuZ3Vlc3RfZWZlciwgZXJyc3RyKTsKLSAgICAgICAgcmV0dXJu IC1FSU5WQUw7Ci0gICAgfQotCi0gICAgaHZtX3VwZGF0ZV9ndWVzdF9jcih2LCAwKTsKLSAgICBo dm1fdXBkYXRlX2d1ZXN0X2NyKHYsIDMpOwotICAgIGh2bV91cGRhdGVfZ3Vlc3RfY3IodiwgNCk7 Ci0gICAgaHZtX3VwZGF0ZV9ndWVzdF9lZmVyKHYpOwotCi0gICAgaWYgKCBodm1fcGFnaW5nX2Vu YWJsZWQodikgJiYgIXBhZ2luZ19tb2RlX2hhcCh2LT5kb21haW4pICkKLSAgICB7Ci0gICAgICAg IC8qIFNoYWRvdy1tb2RlIENSMyBjaGFuZ2UuIENoZWNrIFBEQlIgYW5kIHVwZGF0ZSByZWZjb3Vu dHMuICovCi0gICAgICAgIHN0cnVjdCBwYWdlX2luZm8gKnBhZ2UgPSBnZXRfcGFnZV9mcm9tX2dm bih2LT5kb21haW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2LT5hcmNoLmh2 bV92Y3B1Lmd1ZXN0X2NyWzNdID4+IFBBR0VfU0hJRlQsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBOVUxMLCBQMk1fQUxMT0MpOwotICAgICAgICBpZiAoICFwYWdlICkKLSAgICAg ICAgewotICAgICAgICAgICAgZ3ByaW50ayhYRU5MT0dfRVJSLCAiSW52YWxpZCBDUjM6ICUjbHhc biIsCi0gICAgICAgICAgICAgICAgICAgIHYtPmFyY2guaHZtX3ZjcHUuZ3Vlc3RfY3JbM10pOwot ICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0gICAgICAgIH0KLQotICAgICAgICB2LT5hcmNo Lmd1ZXN0X3RhYmxlID0gcGFnZXRhYmxlX2Zyb21fcGFnZShwYWdlKTsKLSAgICB9Ci0KLSAgICBo dm1fc2V0X3NlZ21lbnRfcmVnaXN0ZXIodiwgeDg2X3NlZ19jcywgJmNzKTsKLSAgICBodm1fc2V0 X3NlZ21lbnRfcmVnaXN0ZXIodiwgeDg2X3NlZ19kcywgJmRzKTsKLSAgICBodm1fc2V0X3NlZ21l bnRfcmVnaXN0ZXIodiwgeDg2X3NlZ19zcywgJnNzKTsKLSAgICBodm1fc2V0X3NlZ21lbnRfcmVn aXN0ZXIodiwgeDg2X3NlZ19lcywgJmVzKTsKLSAgICBodm1fc2V0X3NlZ21lbnRfcmVnaXN0ZXIo diwgeDg2X3NlZ190ciwgJnRyKTsKLQotICAgIC8qIFN5bmMgQVAncyBUU0Mgd2l0aCBCU1Ancy4g Ki8KLSAgICB2LT5hcmNoLmh2bV92Y3B1LmNhY2hlX3RzY19vZmZzZXQgPQotICAgICAgICB2LT5k b21haW4tPnZjcHVbMF0tPmFyY2guaHZtX3ZjcHUuY2FjaGVfdHNjX29mZnNldDsKLSAgICBodm1f ZnVuY3Muc2V0X3RzY19vZmZzZXQodiwgdi0+YXJjaC5odm1fdmNwdS5jYWNoZV90c2Nfb2Zmc2V0 LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2LT5kb21haW4tPmFyY2guaHZtX2RvbWFp bi5zeW5jX3RzYyk7Ci0KLSAgICBwYWdpbmdfdXBkYXRlX3BhZ2luZ19tb2Rlcyh2KTsKLQotICAg IHYtPmlzX2luaXRpYWxpc2VkID0gMTsKLSAgICBzZXRfYml0KF9WUEZfZG93biwgJnYtPnBhdXNl X2ZsYWdzKTsKLQotICAgIHJldHVybiAwOwotfQotCiBpbnQgYXJjaF9pbml0aWFsaXNlX3ZjcHUo c3RydWN0IHZjcHUgKnYsIFhFTl9HVUVTVF9IQU5ETEVfUEFSQU0odm9pZCkgYXJnKQogewogICAg IGludCByYzsKZGlmZiAtLWdpdCBhL3hlbi9hcmNoL3g4Ni9odm0vTWFrZWZpbGUgYi94ZW4vYXJj aC94ODYvaHZtL01ha2VmaWxlCmluZGV4IDBhM2QwZjRmN2UuLjRkYzA3NzNhOTMgMTAwNjQ0Ci0t LSBhL3hlbi9hcmNoL3g4Ni9odm0vTWFrZWZpbGUKKysrIGIveGVuL2FyY2gveDg2L2h2bS9NYWtl ZmlsZQpAQCAtNCw2ICs0LDcgQEAgc3ViZGlyLXkgKz0gdm14CiBvYmoteSArPSBhc2lkLm8KIG9i ai15ICs9IGRtLm8KIG9iai1iaW4teSArPSBkb20wX2J1aWxkLmluaXQubworb2JqLXkgKz0gZG9t YWluLm8KIG9iai15ICs9IGVtdWxhdGUubwogb2JqLXkgKz0gaHBldC5vCiBvYmoteSArPSBodm0u bwpkaWZmIC0tZ2l0IGEveGVuL2FyY2gveDg2L2h2bS9kb21haW4uYyBiL3hlbi9hcmNoL3g4Ni9o dm0vZG9tYWluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uZGQwM2Nm ZmQwYgotLS0gL2Rldi9udWxsCisrKyBiL3hlbi9hcmNoL3g4Ni9odm0vZG9tYWluLmMKQEAgLTAs MCArMSwzMjYgQEAKKy8qCisgKiBIVk0gZG9tYWluIHNwZWNpZmljIGZ1bmN0aW9ucy4KKyAqCisg KiBDb3B5cmlnaHQgKEMpIDIwMTcgQ2l0cml4IFN5c3RlbXMgUiZECisgKgorICogVGhpcyBwcm9n cmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljCisgKiBMaWNlbnNlLCB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRl ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg R05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj CisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBJZiBub3QsIHNlZSA8aHR0cDov L3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2luY2x1ZGUgPHhlbi9kb21haW5fcGFn ZS5oPgorI2luY2x1ZGUgPHhlbi9lcnJuby5oPgorI2luY2x1ZGUgPHhlbi9saWIuaD4KKyNpbmNs dWRlIDx4ZW4vcGFnaW5nLmg+CisjaW5jbHVkZSA8eGVuL3NjaGVkLmg+CisKKyNpbmNsdWRlIDxw dWJsaWMvaHZtL2h2bV92Y3B1Lmg+CisKK3N0YXRpYyBpbmxpbmUgaW50IGNoZWNrX3NlZ21lbnQo c3RydWN0IHNlZ21lbnRfcmVnaXN0ZXIgKnJlZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZW51bSB4ODZfc2VnbWVudCBzZWcpCit7CisKKyAgICBpZiAoIHJlZy0+YXR0ci5maWVs ZHMucGFkICE9IDAgKQorICAgIHsKKyAgICAgICAgZ3ByaW50ayhYRU5MT0dfRVJSLCAiU2VnbWVu dCBhdHRyaWJ1dGUgYml0cyAxMi0xNSBhcmUgbm90IHplcm9cbiIpOworICAgICAgICByZXR1cm4g LUVJTlZBTDsKKyAgICB9CisKKyAgICBpZiAoIHJlZy0+YXR0ci5ieXRlcyA9PSAwICkKKyAgICB7 CisgICAgICAgIGlmICggc2VnICE9IHg4Nl9zZWdfZHMgJiYgc2VnICE9IHg4Nl9zZWdfZXMgKQor ICAgICAgICB7CisgICAgICAgICAgICBncHJpbnRrKFhFTkxPR19FUlIsICJOdWxsIHNlbGVjdG9y IHByb3ZpZGVkIGZvciBDUywgU1Mgb3IgVFJcbiIpOworICAgICAgICAgICAgcmV0dXJuIC1FSU5W QUw7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgaWYgKCBzZWcg PT0geDg2X3NlZ190ciApCisgICAgeworICAgICAgICBpZiAoIHJlZy0+YXR0ci5maWVsZHMucyAp CisgICAgICAgIHsKKyAgICAgICAgICAgIGdwcmludGsoWEVOTE9HX0VSUiwgIkNvZGUgb3IgZGF0 YSBzZWdtZW50IHByb3ZpZGVkIGZvciBUUlxuIik7CisgICAgICAgICAgICByZXR1cm4gLUVJTlZB TDsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggcmVnLT5hdHRyLmZpZWxkcy50eXBlICE9IFNZ U19ERVNDX3Rzc19idXN5ICkKKyAgICAgICAgeworICAgICAgICAgICAgZ3ByaW50ayhYRU5MT0df RVJSLCAiTm9uLTMyLWJpdC1UU1Mgc2VnbWVudCBwcm92aWRlZCBmb3IgVFJcbiIpOworICAgICAg ICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoICFy ZWctPmF0dHIuZmllbGRzLnMgKQorICAgIHsKKyAgICAgICAgZ3ByaW50ayhYRU5MT0dfRVJSLAor ICAgICAgICAgICAgICAgICJTeXN0ZW0gc2VnbWVudCBwcm92aWRlZCBmb3IgYSBjb2RlIG9yIGRh dGEgc2VnbWVudFxuIik7CisgICAgICAgIHJldHVybiAtRUlOVkFMOworICAgIH0KKworICAgIGlm ICggIXJlZy0+YXR0ci5maWVsZHMucCApCisgICAgeworICAgICAgICBncHJpbnRrKFhFTkxPR19F UlIsICJOb24tcHJlc2VudCBzZWdtZW50IHByb3ZpZGVkXG4iKTsKKyAgICAgICAgcmV0dXJuIC1F SU5WQUw7CisgICAgfQorCisgICAgaWYgKCBzZWcgPT0geDg2X3NlZ19jcyAmJiAhKHJlZy0+YXR0 ci5maWVsZHMudHlwZSAmIDB4OCkgKQorICAgIHsKKyAgICAgICAgZ3ByaW50ayhYRU5MT0dfRVJS LCAiTm9uLWNvZGUgc2VnbWVudCBwcm92aWRlZCBmb3IgQ1NcbiIpOworICAgICAgICByZXR1cm4g LUVJTlZBTDsKKyAgICB9CisKKyAgICBpZiAoIHNlZyA9PSB4ODZfc2VnX3NzICYmCisgICAgICAg ICAoKHJlZy0+YXR0ci5maWVsZHMudHlwZSAmIDB4OCkgfHwgIShyZWctPmF0dHIuZmllbGRzLnR5 cGUgJiAweDIpKSApCisgICAgeworICAgICAgICBncHJpbnRrKFhFTkxPR19FUlIsICJOb24td3Jp dGVhYmxlIHNlZ21lbnQgcHJvdmlkZWQgZm9yIFNTXG4iKTsKKyAgICAgICAgcmV0dXJuIC1FSU5W QUw7CisgICAgfQorCisgICAgaWYgKCByZWctPmF0dHIuZmllbGRzLnMgJiYgc2VnICE9IHg4Nl9z ZWdfc3MgJiYgc2VnICE9IHg4Nl9zZWdfY3MgJiYKKyAgICAgICAgIChyZWctPmF0dHIuZmllbGRz LnR5cGUgJiAweDgpICYmICEocmVnLT5hdHRyLmZpZWxkcy50eXBlICYgMHgyKSApCisgICAgewor ICAgICAgICBncHJpbnRrKFhFTkxPR19FUlIsICJOb24tcmVhZGFibGUgc2VnbWVudCBwcm92aWRl ZCBmb3IgRFMgb3IgRVNcbiIpOworICAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICB9CisKKyAg ICByZXR1cm4gMDsKK30KKworLyogQ2FsbGVkIGJ5IFZDUFVPUF9pbml0aWFsaXNlIGZvciBIVk0g Z3Vlc3RzLiAqLworaW50IGFyY2hfc2V0X2luZm9faHZtX2d1ZXN0KHN0cnVjdCB2Y3B1ICp2LCBj b25zdCB2Y3B1X2h2bV9jb250ZXh0X3QgKmN0eCkKK3sKKyAgICBzdHJ1Y3QgY3B1X3VzZXJfcmVn cyAqdXJlZ3MgPSAmdi0+YXJjaC51c2VyX3JlZ3M7CisgICAgc3RydWN0IHNlZ21lbnRfcmVnaXN0 ZXIgY3MsIGRzLCBzcywgZXMsIHRyOworICAgIGNvbnN0IGNoYXIgKmVycnN0cjsKKyAgICBpbnQg cmM7CisKKyAgICBpZiAoIGN0eC0+cGFkICE9IDAgKQorICAgICAgICByZXR1cm4gLUVJTlZBTDsK KworICAgIHN3aXRjaCAoIGN0eC0+bW9kZSApCisgICAgeworICAgIGRlZmF1bHQ6CisgICAgICAg IHJldHVybiAtRUlOVkFMOworCisgICAgY2FzZSBWQ1BVX0hWTV9NT0RFXzMyQjoKKyAgICB7Cisg ICAgICAgIGNvbnN0IHN0cnVjdCB2Y3B1X2h2bV94ODZfMzIgKnJlZ3MgPSAmY3R4LT5jcHVfcmVn cy54ODZfMzI7CisgICAgICAgIHVpbnQzMl90IGxpbWl0OworCisgICAgICAgIGlmICggY3R4LT5j cHVfcmVncy54ODZfMzIucGFkMSAhPSAwIHx8CisgICAgICAgICAgICAgY3R4LT5jcHVfcmVncy54 ODZfMzIucGFkMlswXSAhPSAwIHx8CisgICAgICAgICAgICAgY3R4LT5jcHVfcmVncy54ODZfMzIu cGFkMlsxXSAhPSAwIHx8CisgICAgICAgICAgICAgY3R4LT5jcHVfcmVncy54ODZfMzIucGFkMlsy XSAhPSAwICkKKyAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOworCisjZGVmaW5lIFNFRyhzLCBy KSAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAorICAgIHMgPSAoc3RydWN0IHNlZ21lbnRfcmVnaXN0ZXIpeyAuYmFzZSA9IChyKS0+cyAj IyBfYmFzZSwgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLmxpbWl0ID0gKHIpLT5zICMjIF9saW1pdCwgICAgICAgICAgICAgICBcCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5hdHRyLmJ5dGVzID0gKHIpLT5zICMjIF9hciB9 OyAgICAgICAgICAgXAorICAgIC8qIFNldCBhY2Nlc3NlZCAvIGJ1c3kgYml0IGZvciBwcmVzZW50 IHNlZ21lbnRzLiAqLyAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoIHMuYXR0ci5maWVs ZHMucCApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc CisgICAgICAgIHMuYXR0ci5maWVsZHMudHlwZSB8PSAoeDg2X3NlZ18jI3MgIT0geDg2X3NlZ190 ciA/IDEgOiAyKTsgICAgICAgICAgXAorICAgIGNoZWNrX3NlZ21lbnQoJnMsIHg4Nl9zZWdfICMj IHMpOyB9KQorCisgICAgICAgIHJjID0gU0VHKGNzLCByZWdzKTsKKyAgICAgICAgcmMgfD0gU0VH KGRzLCByZWdzKTsKKyAgICAgICAgcmMgfD0gU0VHKHNzLCByZWdzKTsKKyAgICAgICAgcmMgfD0g U0VHKGVzLCByZWdzKTsKKyAgICAgICAgcmMgfD0gU0VHKHRyLCByZWdzKTsKKyN1bmRlZiBTRUcK KworICAgICAgICBpZiAoIHJjICE9IDAgKQorICAgICAgICAgICAgcmV0dXJuIHJjOworCisgICAg ICAgIC8qIEJhc2ljIHNhbml0eSBjaGVja3MuICovCisgICAgICAgIGxpbWl0ID0gY3MubGltaXQ7 CisgICAgICAgIGlmICggY3MuYXR0ci5maWVsZHMuZyApCisgICAgICAgICAgICBsaW1pdCA9IChs aW1pdCA8PCAxMikgfCAweGZmZjsKKyAgICAgICAgaWYgKCByZWdzLT5laXAgPiBsaW1pdCApCisg ICAgICAgIHsKKyAgICAgICAgICAgIGdwcmludGsoWEVOTE9HX0VSUiwgIkVJUCAoJSMwOHgpIG91 dHNpZGUgQ1MgbGltaXQgKCUjMDh4KVxuIiwKKyAgICAgICAgICAgICAgICAgICAgcmVncy0+ZWlw LCBsaW1pdCk7CisgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICAgICAgfQorCisgICAg ICAgIGlmICggc3MuYXR0ci5maWVsZHMuZHBsICE9IGNzLmF0dHIuZmllbGRzLmRwbCApCisgICAg ICAgIHsKKyAgICAgICAgICAgIGdwcmludGsoWEVOTE9HX0VSUiwgIlNTLkRQTCAoJXUpIGlzIGRp ZmZlcmVudCB0aGFuIENTLkRQTCAoJXUpXG4iLAorICAgICAgICAgICAgICAgICAgICBzcy5hdHRy LmZpZWxkcy5kcGwsIGNzLmF0dHIuZmllbGRzLmRwbCk7CisgICAgICAgICAgICByZXR1cm4gLUVJ TlZBTDsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggZHMuYXR0ci5maWVsZHMucCAmJiBkcy5h dHRyLmZpZWxkcy5kcGwgPiBjcy5hdHRyLmZpZWxkcy5kcGwgKQorICAgICAgICB7CisgICAgICAg ICAgICBncHJpbnRrKFhFTkxPR19FUlIsICJEUy5EUEwgKCV1KSBpcyBncmVhdGVyIHRoYW4gQ1Mu RFBMICgldSlcbiIsCisgICAgICAgICAgICAgICAgICAgIGRzLmF0dHIuZmllbGRzLmRwbCwgY3Mu YXR0ci5maWVsZHMuZHBsKTsKKyAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOworICAgICAgICB9 CisKKyAgICAgICAgaWYgKCBlcy5hdHRyLmZpZWxkcy5wICYmIGVzLmF0dHIuZmllbGRzLmRwbCA+ IGNzLmF0dHIuZmllbGRzLmRwbCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGdwcmludGsoWEVO TE9HX0VSUiwgIkVTLkRQTCAoJXUpIGlzIGdyZWF0ZXIgdGhhbiBDUy5EUEwgKCV1KVxuIiwKKyAg ICAgICAgICAgICAgICAgICAgZXMuYXR0ci5maWVsZHMuZHBsLCBjcy5hdHRyLmZpZWxkcy5kcGwp OworICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAgICAgIH0KKworICAgICAgICBpZiAo IChyZWdzLT5lZmVyICYgRUZFUl9MTUEpICYmICEocmVncy0+ZWZlciAmIEVGRVJfTE1FKSApCisg ICAgICAgIHsKKyAgICAgICAgICAgIGdwcmludGsoWEVOTE9HX0VSUiwgIkVGRVIuTE1BIHNldCB3 aXRob3V0IEVGRVIuTE1FICglIzAxNmx4KVxuIiwKKyAgICAgICAgICAgICAgICAgICAgcmVncy0+ ZWZlcik7CisgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICAgICAgfQorCisgICAgICAg IHVyZWdzLT5yYXggICAgPSByZWdzLT5lYXg7CisgICAgICAgIHVyZWdzLT5yY3ggICAgPSByZWdz LT5lY3g7CisgICAgICAgIHVyZWdzLT5yZHggICAgPSByZWdzLT5lZHg7CisgICAgICAgIHVyZWdz LT5yYnggICAgPSByZWdzLT5lYng7CisgICAgICAgIHVyZWdzLT5yc3AgICAgPSByZWdzLT5lc3A7 CisgICAgICAgIHVyZWdzLT5yYnAgICAgPSByZWdzLT5lYnA7CisgICAgICAgIHVyZWdzLT5yc2kg ICAgPSByZWdzLT5lc2k7CisgICAgICAgIHVyZWdzLT5yZGkgICAgPSByZWdzLT5lZGk7CisgICAg ICAgIHVyZWdzLT5yaXAgICAgPSByZWdzLT5laXA7CisgICAgICAgIHVyZWdzLT5yZmxhZ3MgPSBy ZWdzLT5lZmxhZ3M7CisKKyAgICAgICAgdi0+YXJjaC5odm1fdmNwdS5ndWVzdF9jclswXSA9IHJl Z3MtPmNyMDsKKyAgICAgICAgdi0+YXJjaC5odm1fdmNwdS5ndWVzdF9jclszXSA9IHJlZ3MtPmNy MzsKKyAgICAgICAgdi0+YXJjaC5odm1fdmNwdS5ndWVzdF9jcls0XSA9IHJlZ3MtPmNyNDsKKyAg ICAgICAgdi0+YXJjaC5odm1fdmNwdS5ndWVzdF9lZmVyICA9IHJlZ3MtPmVmZXI7CisgICAgfQor ICAgIGJyZWFrOworCisgICAgY2FzZSBWQ1BVX0hWTV9NT0RFXzY0QjoKKyAgICB7CisgICAgICAg IGNvbnN0IHN0cnVjdCB2Y3B1X2h2bV94ODZfNjQgKnJlZ3MgPSAmY3R4LT5jcHVfcmVncy54ODZf NjQ7CisKKyAgICAgICAgLyogQmFzaWMgc2FuaXR5IGNoZWNrcy4gKi8KKyAgICAgICAgaWYgKCAh aXNfY2Fub25pY2FsX2FkZHJlc3MocmVncy0+cmlwKSApCisgICAgICAgIHsKKyAgICAgICAgICAg IGdwcmludGsoWEVOTE9HX0VSUiwgIlJJUCBjb250YWlucyBhIG5vbi1jYW5vbmljYWwgYWRkcmVz cyAoJSNseClcbiIsCisgICAgICAgICAgICAgICAgICAgIHJlZ3MtPnJpcCk7CisgICAgICAgICAg ICByZXR1cm4gLUVJTlZBTDsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggIShyZWdzLT5jcjAg JiBYODZfQ1IwX1BHKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIGdwcmludGsoWEVOTE9HX0VS UiwgIkNSMCBkb2Vzbid0IGhhdmUgcGFnaW5nIGVuYWJsZWQgKCUjMDE2bHgpXG4iLAorICAgICAg ICAgICAgICAgICAgICByZWdzLT5jcjApOworICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Cisg ICAgICAgIH0KKworICAgICAgICBpZiAoICEocmVncy0+Y3I0ICYgWDg2X0NSNF9QQUUpICkKKyAg ICAgICAgeworICAgICAgICAgICAgZ3ByaW50ayhYRU5MT0dfRVJSLCAiQ1I0IGRvZXNuJ3QgaGF2 ZSBQQUUgZW5hYmxlZCAoJSMwMTZseClcbiIsCisgICAgICAgICAgICAgICAgICAgIHJlZ3MtPmNy NCk7CisgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICAgICAgfQorCisgICAgICAgIGlm ICggIShyZWdzLT5lZmVyICYgRUZFUl9MTUUpICkKKyAgICAgICAgeworICAgICAgICAgICAgZ3By aW50ayhYRU5MT0dfRVJSLCAiRUZFUiBkb2Vzbid0IGhhdmUgTE1FIGVuYWJsZWQgKCUjMDE2bHgp XG4iLAorICAgICAgICAgICAgICAgICAgICByZWdzLT5lZmVyKTsKKyAgICAgICAgICAgIHJldHVy biAtRUlOVkFMOworICAgICAgICB9CisKKyAgICAgICAgdXJlZ3MtPnJheCAgICA9IHJlZ3MtPnJh eDsKKyAgICAgICAgdXJlZ3MtPnJjeCAgICA9IHJlZ3MtPnJjeDsKKyAgICAgICAgdXJlZ3MtPnJk eCAgICA9IHJlZ3MtPnJkeDsKKyAgICAgICAgdXJlZ3MtPnJieCAgICA9IHJlZ3MtPnJieDsKKyAg ICAgICAgdXJlZ3MtPnJzcCAgICA9IHJlZ3MtPnJzcDsKKyAgICAgICAgdXJlZ3MtPnJicCAgICA9 IHJlZ3MtPnJicDsKKyAgICAgICAgdXJlZ3MtPnJzaSAgICA9IHJlZ3MtPnJzaTsKKyAgICAgICAg dXJlZ3MtPnJkaSAgICA9IHJlZ3MtPnJkaTsKKyAgICAgICAgdXJlZ3MtPnJpcCAgICA9IHJlZ3Mt PnJpcDsKKyAgICAgICAgdXJlZ3MtPnJmbGFncyA9IHJlZ3MtPnJmbGFnczsKKworICAgICAgICB2 LT5hcmNoLmh2bV92Y3B1Lmd1ZXN0X2NyWzBdID0gcmVncy0+Y3IwOworICAgICAgICB2LT5hcmNo Lmh2bV92Y3B1Lmd1ZXN0X2NyWzNdID0gcmVncy0+Y3IzOworICAgICAgICB2LT5hcmNoLmh2bV92 Y3B1Lmd1ZXN0X2NyWzRdID0gcmVncy0+Y3I0OworICAgICAgICB2LT5hcmNoLmh2bV92Y3B1Lmd1 ZXN0X2VmZXIgID0gcmVncy0+ZWZlcjsKKworI2RlZmluZSBTRUcobCwgYSkgKHN0cnVjdCBzZWdt ZW50X3JlZ2lzdGVyKXsgLmxpbWl0ID0gKGwpLCAuYXR0ci5ieXRlcyA9IChhKSB9CisgICAgICAg IGNzID0gU0VHKH4wdSwgMHhhOWIpOyAvKiA2NGJpdCBjb2RlIHNlZ21lbnQuICovCisgICAgICAg IGRzID0gc3MgPSBlcyA9IFNFRyh+MHUsIDB4YzkzKTsKKyAgICAgICAgdHIgPSBTRUcoMHg2Nywg MHg4Yik7IC8qIDY0Yml0IFRTUyAoYnVzeSkuICovCisjdW5kZWYgU0VHCisgICAgfQorICAgIGJy ZWFrOworCisgICAgfQorCisgICAgaWYgKCB2LT5hcmNoLmh2bV92Y3B1Lmd1ZXN0X2VmZXIgJiBF RkVSX0xNRSApCisgICAgICAgIHYtPmFyY2guaHZtX3ZjcHUuZ3Vlc3RfZWZlciB8PSBFRkVSX0xN QTsKKworICAgIGlmICggdi0+YXJjaC5odm1fdmNwdS5ndWVzdF9jcls0XSAmIH5odm1fY3I0X2d1 ZXN0X3ZhbGlkX2JpdHModiwgMCkgKQorICAgIHsKKyAgICAgICAgZ3ByaW50ayhYRU5MT0dfRVJS LCAiQmFkIENSNCB2YWx1ZTogJSMwMTZseFxuIiwKKyAgICAgICAgICAgICAgICB2LT5hcmNoLmh2 bV92Y3B1Lmd1ZXN0X2NyWzRdKTsKKyAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAgfQorCisg ICAgZXJyc3RyID0gaHZtX2VmZXJfdmFsaWQodiwgdi0+YXJjaC5odm1fdmNwdS5ndWVzdF9lZmVy LCAtMSk7CisgICAgaWYgKCBlcnJzdHIgKQorICAgIHsKKyAgICAgICAgZ3ByaW50ayhYRU5MT0df RVJSLCAiQmFkIEVGRVIgdmFsdWUgKCUjMDE2bHgpOiAlc1xuIiwKKyAgICAgICAgICAgICAgIHYt PmFyY2guaHZtX3ZjcHUuZ3Vlc3RfZWZlciwgZXJyc3RyKTsKKyAgICAgICAgcmV0dXJuIC1FSU5W QUw7CisgICAgfQorCisgICAgaHZtX3VwZGF0ZV9ndWVzdF9jcih2LCAwKTsKKyAgICBodm1fdXBk YXRlX2d1ZXN0X2NyKHYsIDMpOworICAgIGh2bV91cGRhdGVfZ3Vlc3RfY3IodiwgNCk7CisgICAg aHZtX3VwZGF0ZV9ndWVzdF9lZmVyKHYpOworCisgICAgaWYgKCBodm1fcGFnaW5nX2VuYWJsZWQo dikgJiYgIXBhZ2luZ19tb2RlX2hhcCh2LT5kb21haW4pICkKKyAgICB7CisgICAgICAgIC8qIFNo YWRvdy1tb2RlIENSMyBjaGFuZ2UuIENoZWNrIFBEQlIgYW5kIHVwZGF0ZSByZWZjb3VudHMuICov CisgICAgICAgIHN0cnVjdCBwYWdlX2luZm8gKnBhZ2UgPSBnZXRfcGFnZV9mcm9tX2dmbih2LT5k b21haW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2LT5hcmNoLmh2bV92Y3B1 Lmd1ZXN0X2NyWzNdID4+IFBBR0VfU0hJRlQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBOVUxMLCBQMk1fQUxMT0MpOworICAgICAgICBpZiAoICFwYWdlICkKKyAgICAgICAgewor ICAgICAgICAgICAgZ3ByaW50ayhYRU5MT0dfRVJSLCAiSW52YWxpZCBDUjM6ICUjbHhcbiIsCisg ICAgICAgICAgICAgICAgICAgIHYtPmFyY2guaHZtX3ZjcHUuZ3Vlc3RfY3JbM10pOworICAgICAg ICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAgICAgIH0KKworICAgICAgICB2LT5hcmNoLmd1ZXN0 X3RhYmxlID0gcGFnZXRhYmxlX2Zyb21fcGFnZShwYWdlKTsKKyAgICB9CisKKyAgICBodm1fc2V0 X3NlZ21lbnRfcmVnaXN0ZXIodiwgeDg2X3NlZ19jcywgJmNzKTsKKyAgICBodm1fc2V0X3NlZ21l bnRfcmVnaXN0ZXIodiwgeDg2X3NlZ19kcywgJmRzKTsKKyAgICBodm1fc2V0X3NlZ21lbnRfcmVn aXN0ZXIodiwgeDg2X3NlZ19zcywgJnNzKTsKKyAgICBodm1fc2V0X3NlZ21lbnRfcmVnaXN0ZXIo diwgeDg2X3NlZ19lcywgJmVzKTsKKyAgICBodm1fc2V0X3NlZ21lbnRfcmVnaXN0ZXIodiwgeDg2 X3NlZ190ciwgJnRyKTsKKworICAgIC8qIFN5bmMgQVAncyBUU0Mgd2l0aCBCU1Ancy4gKi8KKyAg ICB2LT5hcmNoLmh2bV92Y3B1LmNhY2hlX3RzY19vZmZzZXQgPQorICAgICAgICB2LT5kb21haW4t PnZjcHVbMF0tPmFyY2guaHZtX3ZjcHUuY2FjaGVfdHNjX29mZnNldDsKKyAgICBodm1fZnVuY3Mu c2V0X3RzY19vZmZzZXQodiwgdi0+YXJjaC5odm1fdmNwdS5jYWNoZV90c2Nfb2Zmc2V0LAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB2LT5kb21haW4tPmFyY2guaHZtX2RvbWFpbi5zeW5j X3RzYyk7CisKKyAgICBwYWdpbmdfdXBkYXRlX3BhZ2luZ19tb2Rlcyh2KTsKKworICAgIHYtPmlz X2luaXRpYWxpc2VkID0gMTsKKyAgICBzZXRfYml0KF9WUEZfZG93biwgJnYtPnBhdXNlX2ZsYWdz KTsKKworICAgIHJldHVybiAwOworfQorCisvKgorICogTG9jYWwgdmFyaWFibGVzOgorICogbW9k ZTogQworICogYy1maWxlLXN0eWxlOiAiQlNEIgorICogYy1iYXNpYy1vZmZzZXQ6IDQKKyAqIHRh Yi13aWR0aDogNAorICogaW5kZW50LXRhYnMtbW9kZTogbmlsCisgKiBFbmQ6CisgKi8KLS0gCjIu MTEuMAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhl bi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKaHR0cHM6Ly9saXN0 cy54ZW4ub3JnL3hlbi1kZXZlbAo=