From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dulloor Subject: [vNUMA v2][PATCH 4/8] allocation strategies Date: Sun, 1 Aug 2010 15:03:27 -0700 Message-ID: References: <1BEA8649F0C00540AB2811D7922ECB6C9338B4CE@orsmsx507.amr.corp.intel.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=0016367fb90cf05af0048cca404f Return-path: In-Reply-To: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: xen-devel@lists.xensource.com List-Id: xen-devel@lists.xenproject.org --0016367fb90cf05af0048cca404f Content-Type: text/plain; charset=ISO-8859-1 Implement the core routines for the selection of nodes for a given allocation strategy. -dulloor Signed-off-by : Dulloor --0016367fb90cf05af0048cca404f Content-Type: text/x-patch; charset=US-ASCII; name="xen-04-allocation-strategies.patch" Content-Disposition: attachment; filename="xen-04-allocation-strategies.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gcc0kpfb1 dk5VTUEgOiBJbXBsZW1lbnQgYWxsb2NhdGlvbiBzdHJhdGVnaWVzCgpkaWZmIC0tZ2l0IGEvdG9v bHMvbGlieGMvTWFrZWZpbGUgYi90b29scy9saWJ4Yy9NYWtlZmlsZQotLS0gYS90b29scy9saWJ4 Yy9NYWtlZmlsZQorKysgYi90b29scy9saWJ4Yy9NYWtlZmlsZQpAQCAtMjgsNiArMjgsNyBAQCBD VFJMX1NSQ1MteSAgICAgICArPSB4Y19tZW1fZXZlbnQuYwogQ1RSTF9TUkNTLXkgICAgICAgKz0g eGNfbWVtX3BhZ2luZy5jCiBDVFJMX1NSQ1MteSAgICAgICArPSB4Y19tZW1zaHIuYwogQ1RSTF9T UkNTLXkgICAgICAgKz0geGNfY3B1bWFwLmMKK0NUUkxfU1JDUy15ICAgICAgICs9IHhjX2RvbV9u dW1hLmMKIENUUkxfU1JDUy15ICAgICAgICs9IHh0bF9jb3JlLmMKIENUUkxfU1JDUy15ICAgICAg ICs9IHh0bF9sb2dnZXJfc3RkaW8uYwogQ1RSTF9TUkNTLSQoQ09ORklHX1g4NikgKz0geGNfcGFn ZXRhYi5jCmRpZmYgLS1naXQgYS90b29scy9saWJ4Yy94Y19kb21fbnVtYS5jIGIvdG9vbHMvbGli eGMveGNfZG9tX251bWEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCisrKyBi L3Rvb2xzL2xpYnhjL3hjX2RvbV9udW1hLmMKQEAgLTAsMCArMSw5MDEgQEAKKy8qIFhFTiBHdWVz dCBOVU1BIHN1cHBvcnQKKyAqIEF1dGhvciA6IER1bGxvb3IgKGR1bGxvb3JAZ2F0ZWNoLmVkdSkg Ki8KKworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUg InhnX3ByaXZhdGUuaCIKKyNpbmNsdWRlICJ4Y19kb21fbnVtYS5oIgorI2luY2x1ZGUgInhjX2Nw dW1hcC5oIgorCisjaWZkZWYgX19ET01fTlVNQV9ERUJVR19fCisjdW5kZWYgREJHUFJJTlRGCisj ZGVmaW5lIERCR1BSSU5URihfZiwgX2EuLi4pIHhjX3JlcG9ydCh4Y2gsIHhjaC0+ZXJyb3JfaGFu ZGxlciwgWFRMX0lORk8sMCwgX2YgLCAjIyBfYSkKKyNlbmRpZgorCisjZGVmaW5lIFhDX01BWF9O T0RFUyAxNgorc3RydWN0IHhjX25vZGVfZGF0YSB7CisgICAgdWludDMyX3Qgbm9kZV9pZDsKKyAg ICB1aW50NjRfdCBzaXplX3BhZ2VzOworICAgIHVpbnQ2NF90IGZyZWVfcGFnZXM7CisgICAgeGNf Y3B1bWFza190IGNwdV9tYXNrOyAvKiBub2RlX3RvX2NwdW1hc2sgKi8KK307Cit0eXBlZGVmIHN0 cnVjdCB4Y19ub2RlX2RhdGEgeGNfbm9kZV9kYXRhX3Q7CisKK3N0cnVjdCB4Y19tYWNoaW5lX251 bWFfbGF5b3V0IHsKKyAgICB1aW50NjRfdCBzaXplX3BhZ2VzOworICAgIHVpbnQ2NF90IGZyZWVf cGFnZXM7CisKKyAgICB1aW50MzJfdCBucl9ub2RlczsKKworICAgIC8qIE9ubHkgKG5yX25vZGVz Km5yX25vZGVzKSBlbnRyaWVzIGFyZSBmaWxsZWQgKi8KKyAgICB1aW50MzJfdCBub2RlX2Rpc3Rh bmNlW1hDX01BWF9OT0RFUypYQ19NQVhfTk9ERVNdOworICAgIC8qIE9ubHkgKG5yX25vZGVzKSBl bnRyaWVzIGFyZSBmaWxsZWQgKi8KKyAgICB4Y19ub2RlX2RhdGFfdCBub2RlX2RhdGFbWENfTUFY X05PREVTXTsKK307Cit0eXBlZGVmIHN0cnVjdCB4Y19tYWNoaW5lX251bWFfbGF5b3V0IHhjX21h Y2hpbmVfbnVtYV9sYXlvdXRfdDsKKworLyogWFhYOiBNb3ZlIGFsbCBzYW5pdHkgY2hlY2tzIHRv IHRoaXMgZnVudGlvbiAqLworI2RlZmluZSBYQ19ET01fTlVNQV9NSU5fU1RSSVBFICAyNTYKK3hj X2RvbWFpbl9udW1hX2xheW91dF90ICogeGNfZG9tX2FsbG9jX251bWFfbGF5b3V0KHhjX2ludGVy ZmFjZSAqeGNoLCAKKyAgICAgICAgdWludDMyX3QgZG9taWQsIHVpbnQ2NF90IG5yX3BhZ2VzLCB4 Y19kb21haW5fbnVtYV9jb25maWdfdCAqY29uZmlnKQoreworICAgIHhjX2RvbWFpbl9udW1hX2xh eW91dF90ICpkb21fbGF5b3V0OworCisgICAgaWYgKGNvbmZpZy0+c3RyYXRlZ3kgPT0gWENfRE9N X05VTUFfTk9ORSkKKyAgICB7CisgICAgICAgIElQUklOVEYoIiVzOiBOVU1BIG1lbW9yeSBhbGxv Y2F0aW9uIGRpc2FibGVkXG4iLCBfX0ZVTkNUSU9OX18pOworICAgICAgICByZXR1cm4gMDsKKyAg ICB9CisgICAgaWYgKCEoZG9tX2xheW91dCA9ICh4Y19kb21haW5fbnVtYV9sYXlvdXRfdCAqKW1h bGxvYyhzaXplb2YoKmRvbV9sYXlvdXQpKSkpCisgICAgeworICAgICAgICBFUlJPUigiJXM6IGRv bV9sYXlvdXQgYWxsb2NhdGlvbiBmYWlsZWRcbiIsIF9fRlVOQ1RJT05fXyk7CisgICAgICAgIHJl dHVybiBkb21fbGF5b3V0OworICAgIH0KKworICAgIERCR1BSSU5URigiJXM6IGRvbV9sYXlvdXQg YWxsb2NhdGVkXG4iLCBfX0ZVTkNUSU9OX18pOworICAgIG1lbXNldChkb21fbGF5b3V0LCAwLCBz aXplb2YoKmRvbV9sYXlvdXQpKTsKKworICAgIGRvbV9sYXlvdXQtPnZlcnNpb24gPSBYRU5fRE9N X05VTUFfSU5URVJGQUNFX1ZFUlNJT047CisgICAgZG9tX2xheW91dC0+bnJfcGFnZXMgPSBucl9w YWdlczsKKyAgICBkb21fbGF5b3V0LT5ucl92bm9kZXMgPSBjb25maWctPm5yX25vZGVzOworCisg ICAgLyogSW50ZXJuYWwgZGF0YSAqLworICAgIGRvbV9sYXlvdXQtPmRvbWlkID0gZG9taWQ7Cisg ICAgZG9tX2xheW91dC0+c3RyYXRlZ3kgPSBjb25maWctPnN0cmF0ZWd5OworICAgIGRvbV9sYXlv dXQtPnN0cmlwZV9zaXplID0gY29uZmlnLT5zdHJpcGVfc2l6ZTsKKyAgICBpZiAoZG9tX2xheW91 dC0+c3RyaXBlX3NpemUgJiYgCisgICAgICAgICAgICAgICAgICAgICAgICAoZG9tX2xheW91dC0+ c3RyaXBlX3NpemUgPCBYQ19ET01fTlVNQV9NSU5fU1RSSVBFKSkKKyAgICB7CisgICAgICAgIGRv bV9sYXlvdXQtPnN0cmlwZV9zaXplID0gWENfRE9NX05VTUFfTUlOX1NUUklQRTsKKyAgICAgICAg SVBSSU5URigiJXM6IE1pbiBTVFJJUEUgc2l6ZSBpcyAlZCBwYWdlc1xuIiwgCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19GVU5DVElPTl9fLCBkb21fbGF5b3V0LT5z dHJpcGVfc2l6ZSk7CisgICAgfQorICAgIHJldHVybiBkb21fbGF5b3V0OworfQorCit2b2lkCit4 Y19kb21fZnJlZV9udW1hX2xheW91dCh4Y19pbnRlcmZhY2UgKnhjaCwgeGNfZG9tYWluX251bWFf bGF5b3V0X3QgKmRvbV9sYXlvdXQpCit7CisgICAgREJHUFJJTlRGKCIlczogZG9tX2xheW91dCBm cmVlZFxuIiwgX19GVU5DVElPTl9fKTsKKyAgICBmcmVlKGRvbV9sYXlvdXQpOworfQorCisjZGVm aW5lIFhDX0RVTVBfU1RSX1NaICAoODE5MikKK3N0YXRpYyB2b2lkCit4Y19kdW1wX2RvbV9udW1h X2xheW91dCh4Y19pbnRlcmZhY2UgKnhjaCwgeGNfZG9tYWluX251bWFfbGF5b3V0X3QgKmxheW91 dCkKK3sKKyAgICB1bnNpZ25lZCBpbnQgaSwgajsKKyAgICBjaGFyICp4Y19kdW1wX3N0ciwgKmR1 bXBzdHI7CisgICAgaWYgKCEoeGNfZHVtcF9zdHIgPSBtYWxsb2MoWENfRFVNUF9TVFJfU1opKSkK KyAgICB7CisgICAgICAgIERCR1BSSU5URigiJXMgOiBkdW1wX3N0ciBhbGxvY2F0aW9uIGZhaWxl ZCIsIF9fRlVOQ1RJT05fXyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgZHVtcHN0ciA9 IHhjX2R1bXBfc3RyOworICAgIGR1bXBzdHIgKz0gc3ByaW50ZihkdW1wc3RyLCAKKyAgICAgICAg ICAgICAgICAgICAgICAgICJOVU1BLUxBWU9VVChEb20gJWQpIDogdmNwdXMoJXUpLCB2bm9kZXMo JXUpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGxheW91dC0+ZG9taWQsIGxheW91dC0+bnJf dmNwdXMsIGxheW91dC0+bnJfdm5vZGVzKTsKKyAgICBzd2l0Y2ggKGxheW91dC0+dHlwZSkKKyAg ICB7CisgICAgICAgIGNhc2UgWEVOX0RPTV9OVU1BX0NPTkZJTkU6CisgICAgICAgICAgICBkdW1w c3RyICs9IHNwcmludGYoZHVtcHN0ciwgIiwgdHlwZShDT05GSU5FKVxuIik7CisgICAgICAgICAg ICBicmVhazsKKyAgICAgICAgY2FzZSBYRU5fRE9NX05VTUFfU1BMSVQ6CisgICAgICAgICAgICBk dW1wc3RyICs9IHNwcmludGYoZHVtcHN0ciwgIiwgdHlwZShTUExJVClcbiIpOworICAgICAgICAg ICAgYnJlYWs7CisgICAgICAgIGNhc2UgWEVOX0RPTV9OVU1BX1NUUklQRToKKyAgICAgICAgICAg IGR1bXBzdHIgKz0gc3ByaW50ZihkdW1wc3RyLCAiLCB0eXBlKFNUUklQRSlcbiIpOworICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgWEVOX0RPTV9OVU1BX0RPTlRDQVJFOgorICAgICAg ICAgICAgZHVtcHN0ciArPSBzcHJpbnRmKGR1bXBzdHIsICIsIHR5cGUoRE9OVENBUkUpXG4iKTsK KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgZHVtcHN0 ciArPSBzcHJpbnRmKGR1bXBzdHIsICIsIHR5cGUoVU5ERUZJTkVEKVxuIik7CisgICAgfQorICAg IGZvciAoaSA9IDA7IGkgPCBsYXlvdXQtPm5yX3Zub2RlczsgaSsrKQorICAgIHsKKyAgICAgICAg eGNfdm5vZGVfZGF0YV90ICp2bm9kZV9kYXRhID0gJmxheW91dC0+dm5vZGVfZGF0YVtpXTsKKyAg ICAgICAgZHVtcHN0ciArPSBzcHJpbnRmKGR1bXBzdHIsICJ2bm9kZVsldV06bW5vZGUoJXUpLCBu b2RlX25yX3BhZ2VzKCV4KSIsIAorICAgICAgICAgICAgICAgIHZub2RlX2RhdGEtPnZub2RlX2lk LCB2bm9kZV9kYXRhLT5tbm9kZV9pZCwKKyAgICAgICAgICAgICAgICB2bm9kZV9kYXRhLT5ucl9w YWdlcyk7CisgICAgICAgIGlmIChsYXlvdXQtPnR5cGUgPT0gWEVOX0RPTV9OVU1BX1NQTElUKQor ICAgICAgICB7CisgICAgICAgICAgICBjaGFyIG1hcHN0clsxMjhdID0gIiI7CisgICAgICAgICAg ICBzdHJ1Y3QgeGVuY3RsX2NwdW1hcCBjcHVtYXA7CisgICAgICAgICAgICB4Y19jcHVtYXBfZnJv bV9jcHVtYXNrKCZjcHVtYXAsICZ2bm9kZV9kYXRhLT52Y3B1X21hc2spOworICAgICAgICAgICAg eGNfY3B1bWFwX3NucHJpbnRmKG1hcHN0ciwgc2l6ZW9mKG1hcHN0ciksIGNwdW1hcCk7CisgICAg ICAgICAgICBkdW1wc3RyICs9IHNwcmludGYoZHVtcHN0ciwgIiwgdmNwdV9tYXNrKCVzKSIsIG1h cHN0cik7CisgICAgICAgIH0KKyAgICAgICAgZHVtcHN0ciArPSBzcHJpbnRmKGR1bXBzdHIsICJc biIpOworICAgIH0KKworICAgIGlmIChsYXlvdXQtPnR5cGUgPT0gWEVOX0RPTV9OVU1BX0NPTkZJ TkUpCisgICAgICAgIGdvdG8gZG9uZTsKKyAgICBkdW1wc3RyICs9IHNwcmludGYoZHVtcHN0ciwg InZub2RlIGRpc3RhbmNlcyA6XG4iKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbGF5b3V0LT5ucl92 bm9kZXM7IGkrKykKKyAgICAgICAgZHVtcHN0ciArPSBzcHJpbnRmKGR1bXBzdHIsICJcdHZub2Rl WyV1XSIsIGkpOworICAgIGZvciAoaSA9IDA7IGkgPCBsYXlvdXQtPm5yX3Zub2RlczsgaSsrKQor ICAgIHsKKyAgICAgICAgZHVtcHN0ciArPSBzcHJpbnRmKGR1bXBzdHIsICJcbnZub2RlWyV1XSIs IGkpOworICAgICAgICBmb3IgKGogPSAwOyBqIDwgbGF5b3V0LT5ucl92bm9kZXM7IGorKykKKyAg ICAgICAgICAgIGR1bXBzdHIgKz0gc3ByaW50ZihkdW1wc3RyLCAiXHQldSIsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgbGF5b3V0LT52bm9kZV9kaXN0YW5jZVtpKmxheW91dC0+bnJfdm5v ZGVzICsgal0pOworICAgICAgICBkdW1wc3RyICs9IHNwcmludGYoZHVtcHN0ciwgIlxuIik7Cisg ICAgfQorZG9uZToKKyAgICBJUFJJTlRGKCIlcyIsIHhjX2R1bXBfc3RyKTsKKyAgICBmcmVlKHhj X2R1bXBfc3RyKTsKKyAgICByZXR1cm47Cit9CisKKworc3RhdGljIGludAoreGNfZ2V0X21hY2hp bmVfbnVtYV9sYXlvdXQoeGNfaW50ZXJmYWNlICp4Y2gsIHhjX21hY2hpbmVfbnVtYV9sYXlvdXRf dCAqbGF5b3V0KQoreworICAgIHVpbnQzMl90IGksIG5yX25vZGVzLCBucl9jcHVzOworICAgIHhj X251bWFpbmZvX3QgbmluZm8gPSB7IDAgfTsKKyAgICB1aW50NjRfdCBub2RlX21lbXNpemVbWENf TUFYX05PREVTXTsKKyAgICB1aW50NjRfdCBub2RlX21lbWZyZWVbWENfTUFYX05PREVTXTsKKyAg ICB4Y190b3BvbG9neWluZm9fdCB0aW5mbyA9IHsgMCB9OworICAgIHVpbnQzMl90IGNwdV90b19u b2RlW1hDX0NQVU1BU0tfTlJfQ1BVU107CisKKwltZW1zZXQobGF5b3V0LCAwLCBzaXplb2YoKmxh eW91dCkpOworCW1lbXNldChub2RlX21lbXNpemUsIDAsIHNpemVvZih1aW50NjRfdCkqWENfTUFY X05PREVTKTsKKwltZW1zZXQobm9kZV9tZW1mcmVlLCAwLCBzaXplb2YodWludDY0X3QpKlhDX01B WF9OT0RFUyk7CisKKyAgICBzZXRfeGVuX2d1ZXN0X2hhbmRsZShuaW5mby5ub2RlX3RvX21lbXNp emUsIG5vZGVfbWVtc2l6ZSk7CisgICAgc2V0X3hlbl9ndWVzdF9oYW5kbGUobmluZm8ubm9kZV90 b19tZW1mcmVlLCBub2RlX21lbWZyZWUpOworICAgIC8qIFJlYWQgZGlyZWN0bHkgaW50byBsYXlv dXQncyBzdHJ1Y3R1cmUgKi8KKyAgICBzZXRfeGVuX2d1ZXN0X2hhbmRsZShuaW5mby5ub2RlX3Rv X25vZGVfZGlzdGFuY2UsIGxheW91dC0+bm9kZV9kaXN0YW5jZSk7CisgICAgbmluZm8ubWF4X25v ZGVfaW5kZXggPSBYQ19NQVhfTk9ERVMtMTsKKyAgICBpZiAoeGNfbnVtYWluZm8oeGNoLCAmbmlu Zm8pKQorICAgIHsKKyAgICAgICAgRVJST1IoIiVzOiB4Y19udW1haW5mbyBmYWlsZWQiLCBfX0ZV TkNUSU9OX18pOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIC8qIE5vIG5lZWQgdG8g Y2hlY2sgaWYgYSBub2RlIGlzIGludmFsaWQsIGFzIGluIHRoYXQgY2FzZQorICAgICAqIHRoZSBz aXplIHdvdWxkIGJlIHplcm8gYW5kIGl0IHdvdWxkIG5ldmVyIGdldCBzZWxlY3RlZCovCisgICAg bnJfbm9kZXMgPSBuaW5mby5tYXhfbm9kZV9pbmRleCArIDE7CisgICAgaWYgKCBucl9ub2RlcyA+ IFhDX01BWF9OT0RFUyApCisgICAgICAgIG5yX25vZGVzID0gWENfTUFYX05PREVTOworCisKKyAg ICBzZXRfeGVuX2d1ZXN0X2hhbmRsZSh0aW5mby5jcHVfdG9fY29yZSwgTlVMTCk7CisgICAgc2V0 X3hlbl9ndWVzdF9oYW5kbGUodGluZm8uY3B1X3RvX3NvY2tldCwgTlVMTCk7CisgICAgc2V0X3hl bl9ndWVzdF9oYW5kbGUodGluZm8uY3B1X3RvX25vZGUsIGNwdV90b19ub2RlKTsKKyAgICB0aW5m by5tYXhfY3B1X2luZGV4ID0gWENfQ1BVTUFTS19OUl9DUFVTLTE7CisKKyAgICBpZiAoeGNfdG9w b2xvZ3lpbmZvKHhjaCwgJnRpbmZvKSkKKyAgICB7CisgICAgICAgIEVSUk9SKCIlczogeGNfdG9w b2xvZ3lpbmZvIGZhaWxlZCIsIF9fRlVOQ1RJT05fXyk7CisgICAgICAgIHJldHVybiAtMTsKKyAg ICB9CisKKyAgICBucl9jcHVzID0gdGluZm8ubWF4X2NwdV9pbmRleCsxOworICAgIGlmIChucl9j cHVzID4gWENfQ1BVTUFTS19OUl9DUFVTKQorICAgICAgICBucl9jcHVzID0gWENfQ1BVTUFTS19O Ul9DUFVTOworCisgICAgbGF5b3V0LT5ucl9ub2RlcyA9IG5yX25vZGVzOworICAgIGZvciAoaT0w OyBpPG5yX25vZGVzOyBpKyspCisgICAgeworICAgICAgICB1aW50NjRfdCBzaXplX3BhZ2VzLCBm cmVlX3BhZ2VzOworICAgICAgICBsYXlvdXQtPm5vZGVfZGF0YVtpXS5ub2RlX2lkID0gaTsKKyAg ICAgICAgc2l6ZV9wYWdlcyA9IChub2RlX21lbXNpemVbaV0gPj4gUEFHRV9TSElGVCk7CisgICAg ICAgIGZyZWVfcGFnZXMgPSAobm9kZV9tZW1mcmVlW2ldID4+IFBBR0VfU0hJRlQpOworICAgICAg ICBsYXlvdXQtPm5vZGVfZGF0YVtpXS5zaXplX3BhZ2VzID0gc2l6ZV9wYWdlczsKKyAgICAgICAg bGF5b3V0LT5ub2RlX2RhdGFbaV0uZnJlZV9wYWdlcyA9IGZyZWVfcGFnZXM7CisgICAgICAgIGxh eW91dC0+c2l6ZV9wYWdlcyArPSBzaXplX3BhZ2VzOworICAgICAgICBsYXlvdXQtPmZyZWVfcGFn ZXMgKz0gZnJlZV9wYWdlczsKKyAgICB9CisKKyAgICBmb3IgKGk9MDsgaTxucl9jcHVzOyBpKysp CisgICAgeworICAgICAgICBzdHJ1Y3QgeGVuY3RsX2NwdW1hcCBjcHVtYXA7CisgICAgICAgIHhj X2NwdW1hc2tfdCAqY3B1bWFzazsKKworICAgICAgICBpZiAoY3B1X3RvX25vZGVbaV0gPT0gSU5W QUxJRF9UT1BPTE9HWV9JRCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBjcHVtYXNr ID0gJihsYXlvdXQtPm5vZGVfZGF0YVsoY3B1X3RvX25vZGVbaV0pXS5jcHVfbWFzayk7CisgICAg ICAgIHhjX2NwdW1hcF9mcm9tX2NwdW1hc2soJmNwdW1hcCwgY3B1bWFzayk7CisgICAgICAgIHhj X2NwdW1hcF9zZXRfY3B1KGksIGNwdW1hcCk7CisgICAgfQorICAgIHJldHVybiAwOworfQorCitz dGF0aWMgaW50Cit4Y19nZXRfbWF4X3ZjcHVzKHhjX2ludGVyZmFjZSAqeGNoLCB1aW50MzJfdCBk b21pZCkKK3sKKyAgICBERUNMQVJFX0RPTUNUTDsKKyAgICBkb21jdGwuY21kID0gWEVOX0RPTUNU TF9nZXRkb21haW5pbmZvOworICAgIGRvbWN0bC5kb21haW4gPSAoZG9taWRfdClkb21pZDsKKyAg ICByZXR1cm4gKChkb19kb21jdGwoeGNoLCAmZG9tY3RsKSA8IDApCisgICAgICAgICAgICA/IDAg OiAoZG9tY3RsLnUuZ2V0ZG9tYWluaW5mby5tYXhfdmNwdV9pZCsxKSk7Cit9CisKKy8qIFRoZSBm dW5jdGlvbiBtYWtlcyBhIChncmVlZHkpIGJlc3QgZml0IHNlbGVjdGlvbiBvZiBudW1fdm5vZGVz IG9mCisgKiB2bm9kZV9zaXplIGVhY2guIFRoZSBudW1iZXIgb2YgcGFnZXMgc2VsZWN0ZWQgZnJv bSBlYWNoIG5vZGUgYXJlIHJldHVybmVkCisgKiBpbiB0aGUgbm9kZV9wYWdlc19zZWxlY3RlZCBh cnJheS4KKyAqIFRoZSBiZXN0X2ZpdCByYW5raW5nIGlzIGJhc2VkIG9uIHRoZSBmcmFjdGlvbih1 cCB0byAxMDI0IHBhcnRzKSBvZiBub2RlCisgKiBtZW1vcnkgb2NjdXBpZWQsIGlmIHRoZSBub2Rl IGlzIHNlbGVjdGVkLgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MgYW5kIDEgaWYgc2VsZWN0aW9u IGZhaWxzLiAqLworLyogWFhYOiBOb2RlIHNlbGVjdGlvbiBuZWVkcyBtb3JlIHJlc2VhcmNoL2V4 cGVyaWVuY2UuICovCitzdGF0aWMgaW50IHhjX3NlbGVjdF9iZXN0X2ZpdF9ub2RlcygKKyAgICAg ICAgeGNfaW50ZXJmYWNlICp4Y2gsIHhjX21hY2hpbmVfbnVtYV9sYXlvdXRfdCAqcGh5c19sYXlv dXQsCisgICAgICAgIHVpbnQzMl90IG51bV92bm9kZXMsIHVpbnQ2NF90IHZub2RlX3BhZ2VzLCB1 aW50NjRfdCAqbm9kZXNfcGFnZXMpCit7CisgICAgaW50IGksIG51bV9ub2Rlc19zZWxlY3RlZDsK KyAgICB1aW50NjRfdCBiZXN0X2ZpdF9yYW5rOworCisgICAgREJHUFJJTlRGKCIlczogY2FsbGVk XG4iLCBfX0ZVTkNUSU9OX18pOworI2RlZmluZSBJTlZBTElEX05PREUgKH4wKQorI2RlZmluZSBO T0RFX0ZJVF9SQU5LX1NISUZUICgxMCkKKyAgICBiZXN0X2ZpdF9yYW5rID0gMDsKKwludW1fbm9k ZXNfc2VsZWN0ZWQgPSAwOworCisgICAgZG8geworICAgICAgICBpbnQgc2VsZWN0ZWRfbm9kZSA9 IElOVkFMSURfTk9ERTsKKyAgICAgICAgZm9yIChpPTA7IGk8cGh5c19sYXlvdXQtPm5yX25vZGVz OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIHhjX25vZGVfZGF0YV90ICpub2RlX2RhdGE7 CisgICAgICAgICAgICB1aW50NjRfdCBub2RlX3NpemVwYWdlcywgbm9kZV9mcmVlcGFnZXM7Cisg ICAgICAgICAgICB1aW50NjRfdCBub2RlX2ZpdF9yYW5rOworCisgICAgICAgICAgICAvKiBOb2Rl IGlzIGFscmVhZHkgc2VsZWN0ZWQgKi8KKyAgICAgICAgICAgIGlmIChub2Rlc19wYWdlc1tpXSkK KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgbm9kZV9kYXRhID0gJnBo eXNfbGF5b3V0LT5ub2RlX2RhdGFbaV07CisgICAgICAgICAgICBub2RlX3NpemVwYWdlcyA9IG5v ZGVfZGF0YS0+c2l6ZV9wYWdlczsKKyAgICAgICAgICAgIG5vZGVfZnJlZXBhZ2VzID0gbm9kZV9k YXRhLT5mcmVlX3BhZ2VzOworCisgICAgICAgICAgICBpZiAobm9kZV9mcmVlcGFnZXMgPCB2bm9k ZV9wYWdlcykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgbm9kZV9m aXRfcmFuayA9ICgobm9kZV9zaXplcGFnZXMtbm9kZV9mcmVlcGFnZXMtdm5vZGVfcGFnZXMpCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCBOT0RFX0ZJVF9SQU5LX1NISUZU KSAvIG5vZGVfc2l6ZXBhZ2VzOworCisgICAgICAgICAgICBpZiAobm9kZV9maXRfcmFuayA+IGJl c3RfZml0X3JhbmspCisgICAgICAgICAgICAgICAgc2VsZWN0ZWRfbm9kZSA9IGk7CisgICAgICAg IH0KKworICAgICAgICAvKiBOb2RlcyBjb3VsZCBub3QgYmUgc2VsZWN0ZWQuIEJhaWwgb3V0ICEg Ki8KKyAgICAgICAgaWYgKHNlbGVjdGVkX25vZGUgPT0gSU5WQUxJRF9OT0RFKQorICAgICAgICAg ICAgcmV0dXJuIC0xOworCisgICAgICAgIG5vZGVzX3BhZ2VzW3NlbGVjdGVkX25vZGVdID0gdm5v ZGVfcGFnZXM7CisgICAgICAgIG51bV9ub2Rlc19zZWxlY3RlZCsrOworICAgIH0gd2hpbGUobnVt X25vZGVzX3NlbGVjdGVkIDwgbnVtX3Zub2Rlcyk7CisjdW5kZWYgTk9ERV9GSVRfUkFOS19TSElG VAorI3VuZGVmIElOVkFMSURfTk9ERQorICAgIHJldHVybiAwOworfQorCisvKiBTb3J0IHRoZSBw aHlzIG5vZGVzIGluIHRoZSBkZWNyZWFzaW5nIG9yZGVyIG9mIGZyZWUgbm9kZSBtZW1vcnkgKi8K K3N0YXRpYyB2b2lkIHhjX3NvcnRfbm9kZWxvYWQoeGNfbWFjaGluZV9udW1hX2xheW91dF90ICpw aHlzX2xheW91dCkKK3sKKyAgICBpbnQgaSwgajsKKyAgICB1aW50MzJfdCBucl9ub2RlczsKKwor ICAgIG5yX25vZGVzID0gcGh5c19sYXlvdXQtPm5yX25vZGVzOworCisgICAgZm9yIChpID0gMDsg aSA8IG5yX25vZGVzOyBpKyspCisgICAgeworICAgICAgICB1aW50NjRfdCBpX25vZGVfZnJlZSA9 IHBoeXNfbGF5b3V0LT5ub2RlX2RhdGFbaV0uZnJlZV9wYWdlczsgCisgICAgICAgIGZvciAoaiA9 IGkrMTsgaiA8IG5yX25vZGVzOyBqKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIHVpbnQ2NF90 IGpfbm9kZV9mcmVlID0gcGh5c19sYXlvdXQtPm5vZGVfZGF0YVtqXS5mcmVlX3BhZ2VzOyAKKyAg ICAgICAgICAgIGlmIChpX25vZGVfZnJlZSA+IGpfbm9kZV9mcmVlKQorICAgICAgICAgICAgewor ICAgICAgICAgICAgICAgIHhjX25vZGVfZGF0YV90IHRtcF9ub2RlX2RhdGE7CisgICAgICAgICAg ICAgICAgdG1wX25vZGVfZGF0YSA9IHBoeXNfbGF5b3V0LT5ub2RlX2RhdGFbaV07CisgICAgICAg ICAgICAgICAgcGh5c19sYXlvdXQtPm5vZGVfZGF0YVtpXSA9IHBoeXNfbGF5b3V0LT5ub2RlX2Rh dGFbal07CisgICAgICAgICAgICAgICAgcGh5c19sYXlvdXQtPm5vZGVfZGF0YVtqXSA9IHRtcF9u b2RlX2RhdGE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm47 Cit9CisKKy8qIFRoZSBmdW5jdGlvbiBzZWxlY3RzIHRoZSBub2RlcyBpbiB0aGUgaW5jcmVhc2lu ZyBvcmRlciBvZiBmcmVlIG5vZGUgbWVtb3J5LAorICogYW5kIGZpbGxzIHRoZW0uIFRoZSBwaHlz aWNhbCBtZW1vcnkgbWFwIGZvciBzdWNoIGEgZG9tYWluIGlzIHN0cmlwZWQgCisgKiBhY3Jvc3Mg YWxsIHRoZSBzZWxlY3RlZCBub2Rlcy4gCisgKiBUaGUgcGh5c19sYXlvdXQgbm9kZV9kYXRhIHN0 cnVjdHVyZXMgY291bGQgYmUgc29ydGVkIGlucGxhY2UuIFNvLCB3ZSAKKyAqIHNob3VsZCBhbHdh eXMgdXNlIG5vZGVfZGF0YS0+bm9kZV9pZCB3aGlsZSB1c2luZyB0aGUgbm9kZV9kaXN0YW5jZSBh cnJheS4gCisgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2Ygbm9kZXMgc2VsZWN0ZWQuICovCitzdGF0 aWMgaW50IHhjX3NlbGVjdF9tYXhfZml0X25vZGVzKAorICAgICAgICB4Y19pbnRlcmZhY2UgKnhj aCwgeGNfbWFjaGluZV9udW1hX2xheW91dF90ICpwaHlzX2xheW91dCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IGRvbV9wYWdlcywgdWludDY0X3QgKm5vZGVf cGFnZXMpCit7CisgICAgaW50IGk7CisgICAgdWludDY0X3QgZG9tX2FsbG9jX3BhZ2VzOworCisg ICAgREJHUFJJTlRGKCIlczogY2FsbGVkXG4iLCBfX0ZVTkNUSU9OX18pOworICAgIHhjX3NvcnRf bm9kZWxvYWQocGh5c19sYXlvdXQpOworCisgICAgZG9tX2FsbG9jX3BhZ2VzID0gMDsKKyAgICBm b3IgKGk9MDsgaTxwaHlzX2xheW91dC0+bnJfbm9kZXM7IGkrKykKKyAgICB7CisgICAgICAgIHhj X25vZGVfZGF0YV90ICpub2RlX2RhdGE7CisgICAgICAgIHVpbnQ2NF90IG5vZGVfZnJlZXBhZ2Vz OworCisgICAgICAgIG5vZGVfZGF0YSA9ICZwaHlzX2xheW91dC0+bm9kZV9kYXRhW2ldOworCisg ICAgICAgIC8qIEluIG1heC1maXQsIGlmIHdlIHRyeSB0byBwYWNrIHRoZSBub2RlcyB0b28gYWdn cmVzc2l2ZWx5CisgICAgICAgICAqIHdlIG1pZ2h0IGZhaWwgb24gYW55IHNtYWxsIGFsbG9jYXRp b24gKGZyb20geGVuIG5vZGUgaGVhcHMpLgorCQkgKiBUaGF0J3Mgd2h5LCB3aXRoIERFRkFVTFQs IHdlIGRvbid0IHVzZSBleGFjdF9ub2RlIGZsYWcuICovCisgICAgICAgIG5vZGVfZnJlZXBhZ2Vz ID0gbm9kZV9kYXRhLT5mcmVlX3BhZ2VzOworICAgICAgICBpZiAoIW5vZGVfZnJlZXBhZ2VzKQor ICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKG5vZGVfZnJlZXBhZ2VzID4gKGRv bV9wYWdlcy1kb21fYWxsb2NfcGFnZXMpKQorICAgICAgICAgICAgbm9kZV9mcmVlcGFnZXMgPSAo ZG9tX3BhZ2VzLWRvbV9hbGxvY19wYWdlcyk7CisKKyAgICAgICAgbm9kZV9wYWdlc1tpXSA9IG5v ZGVfZnJlZXBhZ2VzOworICAgICAgICBkb21fYWxsb2NfcGFnZXMgKz0gbm9kZV9mcmVlcGFnZXM7 CisgICAgfQorICAgIGlmIChkb21fYWxsb2NfcGFnZXMgIT0gZG9tX3BhZ2VzKQorICAgIHsKKyAg ICAgICAgRVJST1IoCisgICAgICAgICAgICAgICAgIiVzOiBGYWlsZWQgdG8gYWxsb2NhdGUgbWVt b3J5LiBNYXliZSBoYWQgdG8gYmFsbG9vbiBtb3JlXG4iLAorICAgICAgICAgICAgICAgIF9fRlVO Q1RJT05fXyk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgcmV0dXJuIChpKzEpOwor fQorCitzdGF0aWMgaW50IHhjX3NldHVwX3Zub2RlX3ZjcHVfbWFza3MoeGNfZG9tYWluX251bWFf bGF5b3V0X3QgKmRvbV9sYXlvdXQpCit7CisgICAgaW50IHZjcHU7CisgICAgZm9yICh2Y3B1PTA7 IHZjcHU8ZG9tX2xheW91dC0+bnJfdmNwdXM7IHZjcHUrKykKKyAgICB7CisgICAgICAgIHN0cnVj dCB4ZW5jdGxfY3B1bWFwIHZjcHVtYXA7CisgICAgICAgIHhjX2NwdW1hc2tfdCAqdmNwdW1hc2s7 CisgICAgICAgIGludCB2bm9kZSA9IHZjcHUvKGRvbV9sYXlvdXQtPm5yX3ZjcHVzL2RvbV9sYXlv dXQtPm5yX3Zub2Rlcyk7CisKKyAgICAgICAgdmNwdW1hc2sgPSAmZG9tX2xheW91dC0+dm5vZGVf ZGF0YVt2bm9kZV0udmNwdV9tYXNrOworICAgICAgICB4Y19jcHVtYXBfZnJvbV9jcHVtYXNrKCZ2 Y3B1bWFwLCB2Y3B1bWFzayk7CisgICAgICAgIHhjX2NwdW1hcF9zZXRfY3B1KHZjcHUsIHZjcHVt YXApOworICAgIH0gCisgICAgcmV0dXJuIDA7ICAgIAorfQorCitzdGF0aWMgaW50IHhjX3NldHVw X3Zub2RlX2Rpc3RhbmNlcyh4Y19tYWNoaW5lX251bWFfbGF5b3V0X3QgKnBoeXNfbGF5b3V0LCAK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4Y19kb21haW5fbnVtYV9s YXlvdXRfdCAqZG9tX2xheW91dCkKK3sKKyAgICBpbnQgdm4xLCB2bjI7CisgICAgZm9yICh2bjE9 MDsgdm4xPGRvbV9sYXlvdXQtPm5yX3Zub2Rlczsgdm4xKyspCisgICAgeworICAgICAgICBpbnQg bjEgPSBkb21fbGF5b3V0LT52bm9kZV9kYXRhW3ZuMV0ubW5vZGVfaWQ7CisgICAgICAgIGZvciAo dm4yPTA7IHZuMjxkb21fbGF5b3V0LT5ucl92bm9kZXM7IHZuMisrKQorICAgICAgICB7CisgICAg ICAgICAgICBpbnQgbjIgPSBkb21fbGF5b3V0LT52bm9kZV9kYXRhW3ZuMl0ubW5vZGVfaWQ7Cisg ICAgICAgICAgICBkb21fbGF5b3V0LT52bm9kZV9kaXN0YW5jZVsodm4xKmRvbV9sYXlvdXQtPm5y X3Zub2Rlcykrdm4yXSA9CisgICAgICAgICAgICAgICAgcGh5c19sYXlvdXQtPm5vZGVfZGlzdGFu Y2VbKG4xKnBoeXNfbGF5b3V0LT5ucl9ub2RlcykrbjJdOworICAgICAgICAKKyAgICAgICAgfQor ICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworLyogV2UgcmVxdWlyZSB0aGUgdm5vZGVzIHRvIGJl IGFsaWduZWQgdG8gMUdCIAorICogU0hJRlQgdmFsdWVzIGZvciA0SyBwYWdlcyAqLworI2RlZmlu ZSBYQ19WTk9ERV9NSU5fU0hJRlQgICAoWEVOX01JTl9WTk9ERV9TSElGVC1QQUdFX1NISUZUKQor I2RlZmluZSBYQ19WTk9ERV9NSU5fU0laRSAgICgxVUwgPDwgWENfVk5PREVfTUlOX1NISUZUKQor I2RlZmluZSBYQ19WTk9ERV9NSU5fTUFTSyB+KFhDX1ZOT0RFX01JTl9TSVpFLTEpCisvKiBCZWNh dXNlIHdlIGFyZSBzdHJpY3Qgd2l0aCB0aGUgYWxpZ25tZW50LCB3ZSBib29zdCB0aGUgc2l6ZSAK KyAqIHRvIGFjY291bnQgZm9yIHRoZSBwYWdlcyBub3Qgc2VlbiBpbiBwaHlzbWFwIChieSAxNk1C IGZvciBub3cpLiAqLworI2RlZmluZSBYQ19WTk9ERV9CT09TVF9TSVpFICg0MDk2KQorI2RlZmlu ZSBYQ19WQ1BVU19QRVJfVk5PREUgKDEpCisjZGVmaW5lIFhDX1BPV0VSX09GXzIoeCkgKCgoeCkg JiAoKHgpIC0gMSkpID09IDApCisKK3N0YXRpYyBpbnQgeGNfc2V0dXBfZG9tYWluX3Zub2Rlcyh4 Y19pbnRlcmZhY2UgKnhjaCwKKyAgICB4Y19tYWNoaW5lX251bWFfbGF5b3V0X3QgKnBoeXNfbGF5 b3V0LCB4Y19kb21haW5fbnVtYV9sYXlvdXRfdCAqZG9tX2xheW91dCwKKwl1aW50NjRfdCAqbm9k ZV9wYWdlc19zZWxlY3RlZCkKK3sKKwlpbnQgaTsKKyAgICB1aW50MzJfdCB2bm9kZV9pZDsKKwor ICAgIGZvciAoaT0wLCB2bm9kZV9pZD0wOyBpPHBoeXNfbGF5b3V0LT5ucl9ub2RlczsgaSsrKQor ICAgIHsKKyAgICAgICAgeGNfbm9kZV9kYXRhX3QgKm5vZGVfZGF0YTsKKyAgICAgICAgeGNfdm5v ZGVfZGF0YV90ICp2bm9kZV9kYXRhOworCisgICAgICAgIGlmICghbm9kZV9wYWdlc19zZWxlY3Rl ZFtpXSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIG5vZGVfZGF0YSA9ICZwaHlz X2xheW91dC0+bm9kZV9kYXRhW2ldOworICAgICAgICB2bm9kZV9kYXRhID0gJmRvbV9sYXlvdXQt PnZub2RlX2RhdGFbdm5vZGVfaWRdOworICAgICAgICB2bm9kZV9kYXRhLT52bm9kZV9pZCA9IHZu b2RlX2lkOworICAgICAgICB2bm9kZV9kYXRhLT5ucl9wYWdlcyA9IG5vZGVfcGFnZXNfc2VsZWN0 ZWRbaV07CisgICAgICAgIHZub2RlX2RhdGEtPm1ub2RlX2lkID0gbm9kZV9kYXRhLT5ub2RlX2lk OworICAgICAgICB2bm9kZV9pZCsrOworICAgIH0KKyAgICBpZiAodm5vZGVfaWQgIT0gZG9tX2xh eW91dC0+bnJfdm5vZGVzKQorICAgIHsKKyAgICAgICAgRVJST1IoIiVzOiBJbnRlcm5hbCBFcnJv cih2bm9kZSBjb3VudCBtaXNtYXRjaCkgKCVkLyVkKSAhXG4iLCAKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX19GVU5DVElPTl9fLCB2bm9kZV9pZCwgZG9tX2xheW91dC0+bnJfdm5v ZGVzKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICAvKiB2bm9kZXMgYXJlIGV4cG9z ZWQgdG8gdGhlIGd1ZXN0IG9ubHkgZm9yIFNQTElULiAqLworICAgIGlmICh4Y19zZXR1cF92bm9k ZV92Y3B1X21hc2tzKGRvbV9sYXlvdXQpIHx8IAorICAgICAgICAgICAgKHhjX3NldHVwX3Zub2Rl X2Rpc3RhbmNlcyhwaHlzX2xheW91dCwgZG9tX2xheW91dCkpKQorICAgIHsKKyAgICAgICAgRVJS T1IoIiVzOiB2bm9kZSBzZXR1cCBmYWlsZWQgIVxuIiwgX19GVU5DVElPTl9fKTsKKyAgICAgICAg cmV0dXJuIC0xOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IHhjX3Nl bGVjdF9kb21haW5fcHJlcCh4Y19pbnRlcmZhY2UgKnhjaCwKKyAgICB4Y19tYWNoaW5lX251bWFf bGF5b3V0X3QgKnBoeXNfbGF5b3V0LCB4Y19kb21haW5fbnVtYV9sYXlvdXRfdCAqZG9tX2xheW91 dCkKK3sKKyAgICBpZiAoIWRvbV9sYXlvdXQtPm5yX3Zub2RlcykKKyAgICB7CisgICAgICAgIEVS Uk9SKCIlczogVk0gbnJfdm5vZGVzIGNvbmZpZ3VyZWQgaW5jb3JyZWN0bHkgIVxuIiwgX19GVU5D VElPTl9fKTsKKyAgICAgICAgcmV0dXJuIC0xOyAKKyAgICB9CisKKyAgICBpZiAoZG9tX2xheW91 dC0+bnJfcGFnZXMgPiBwaHlzX2xheW91dC0+ZnJlZV9wYWdlcykKKyAgICB7CisgICAgICAgIEVS Uk9SKAorICAgICAgICAgICAgIiVzOiBOb3QgZW5vdWdoIG1lbW9yeSBmb3IgcHYgKHVubGlrZWx5 IGFmdGVyIGJhbGxvb24gY2hlY2tzKVxuIiwKKyAgICAgICAgICAgICAgICBfX0ZVTkNUSU9OX18p OworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKCEoZG9tX2xheW91dC0+bnJf dmNwdXMgPSB4Y19nZXRfbWF4X3ZjcHVzKHhjaCwgZG9tX2xheW91dC0+ZG9taWQpKSkKKyAgICB7 CisgICAgICAgIEVSUk9SKCIlczogeGNfZ2V0X21heF92Y3B1cyBmYWlsZWQgIVxuIiwgX19GVU5D VElPTl9fKTsKKyAgICAgICAgcmV0dXJuIC0xOyAKKyAgICB9CisKKyAgICBpZiAoZG9tX2xheW91 dC0+bnJfdmNwdXMgPiBYQ19DUFVNQVNLX05SX0NQVVMpCisgICAgeworICAgICAgICBFUlJPUigi JXM6IEZhaWxlZCAtIE1vcmUgdGhhbiAlZCB2Y3B1cyFcbiIsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9fRlVOQ1RJT05fXywgIFhDX0NQVU1BU0tfTlJfQ1BV Uyk7CisgICAgICAgIHJldHVybiAtMTsgCisgICAgfQorCisgICAgaWYgKGRvbV9sYXlvdXQtPm5y X3ZjcHVzIDwgZG9tX2xheW91dC0+bnJfdm5vZGVzICkKKyAgICB7CisgICAgICAgIEVSUk9SKCIl czogVk0gKCVkKSAtIG1vcmUgdmNwdXMoJWQpIHRoYW4gdm5vZGVzKCVkKSFcbiIsCisgICAgICAg ICAgICAgICAgX19GVU5DVElPTl9fLCBkb21fbGF5b3V0LT5kb21pZCwgZG9tX2xheW91dC0+bnJf dmNwdXMsCisgICAgICAgICAgICAgICAgZG9tX2xheW91dC0+bnJfdm5vZGVzKTsKKyAgICAgICAg cmV0dXJuIC0xOyAKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCB4Y19z ZWxlY3RfZG9tYWluX2NvbmZpbmUoeGNfaW50ZXJmYWNlICp4Y2gsCisgICAgeGNfbWFjaGluZV9u dW1hX2xheW91dF90ICpwaHlzX2xheW91dCwgeGNfZG9tYWluX251bWFfbGF5b3V0X3QgKmRvbV9s YXlvdXQpCit7CisgICAgdWludDY0X3QgKm5vZGVfcGFnZXNfc2VsZWN0ZWQgPSAwOworICAgIGlu dCByYzsKKworICAgIERCR1BSSU5URigiJXM6IENhbGxlZCBmb3IgVk0gJWRcbiIsIF9fRlVOQ1RJ T05fXywgZG9tX2xheW91dC0+ZG9taWQpOworICAgIGlmICgocmMgPSB4Y19zZWxlY3RfZG9tYWlu X3ByZXAoeGNoLCBwaHlzX2xheW91dCwgZG9tX2xheW91dCkpKQorICAgICAgICByZXR1cm4gLTE7 CisKKyAgICBpZiAoIShub2RlX3BhZ2VzX3NlbGVjdGVkID0gCisgICAgICAgICAgICAgICAgKHVp bnQ2NF90ICopY2FsbG9jKFhDX01BWF9OT0RFUywgc2l6ZW9mKHVpbnQ2NF90KSkpKQorICAgIHsK KyAgICAgICAgcmMgPSAtMTsKKyAgICAgICAgRVJST1IoIiVzOiBub2RlX3BhZ2VzIGFsbG9jYXRp b24gZmFpbGVkXG4iLCBfX0ZVTkNUSU9OX18pOworICAgIAlnb3RvIGZhaWxlZDsKKyAgICB9CisJ aWYgKChyYyA9IHhjX3NlbGVjdF9iZXN0X2ZpdF9ub2Rlcyh4Y2gsIHBoeXNfbGF5b3V0LCAxLCAK KyAgICAgICAgICAgICAgICAgICAgZG9tX2xheW91dC0+bnJfcGFnZXMsIG5vZGVfcGFnZXNfc2Vs ZWN0ZWQpKSkKKyAgICB7CisgICAgICAgIEVSUk9SKCIlczogTm90IGVub3VnaCBtZW1vcnkgZm9y IENPTkZJTkUgKEhhZCB0byBiYWxsb29uIG1vcmUgPylcbiIsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0ZVTkNUSU9OX18pOwor ICAgIAlnb3RvIGZhaWxlZDsKKyAgICB9CisKKyAgICBkb21fbGF5b3V0LT50eXBlID0gWEVOX0RP TV9OVU1BX0NPTkZJTkU7CisgICAgcmMgPSB4Y19zZXR1cF9kb21haW5fdm5vZGVzKHhjaCwgcGh5 c19sYXlvdXQsIGRvbV9sYXlvdXQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIG5vZGVfcGFnZXNfc2VsZWN0ZWQpOworICAgIGlmICghcmMpCisg ICAgICAgIERCR1BSSU5URigiJXM6IFNlbGVjdGVkIENPTkZJTkUgZm9yIFZNICVkXG4iLCAKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fRlVOQ1RJT05fXywgZG9tX2xheW91 dC0+ZG9taWQpOworZmFpbGVkOgorICAgIGlmIChub2RlX3BhZ2VzX3NlbGVjdGVkKQorICAgICAg ICBmcmVlKG5vZGVfcGFnZXNfc2VsZWN0ZWQpOworICAgIHJldHVybiByYzsKK30KKworLyogRm9y IHRoZSBudW1hIGd1ZXN0cywgd2UgY29uc3RydWN0IGEgc3ltbWV0cmljYWwgdG9wb2xvZ3kgKHdy dCB0aGUgCisgKiBkaXN0cmlidXRpb24gb2YgdmNwdXMgb3ZlciB2bm9kZXMpLgorICogV2UgcmVx dWlyZSB0aGUgbnVtYSBndWVzdHMgdG8gaGF2ZSAoMl5uKSB2Y3B1cyBhbmQgKDJeaykgdm5vZGVz LgorICogRWFjaCB2bm9kZSBpcyB0aGVuIGFzc2lnbmVkIDJeKG4taykgdmNwdXMsIHdoZXJlIChu Pj1rKS4KKyAqLworc3RhdGljIGludCB4Y19zZWxlY3RfZG9tYWluX3NwbGl0KHhjX2ludGVyZmFj ZSAqeGNoLAorICAgIHhjX21hY2hpbmVfbnVtYV9sYXlvdXRfdCAqcGh5c19sYXlvdXQsIHhjX2Rv bWFpbl9udW1hX2xheW91dF90ICpkb21fbGF5b3V0KQoreworICAgIHVpbnQ2NF90IHZub2RlX25y X3BhZ2VzLCAqbm9kZV9wYWdlc19zZWxlY3RlZCA9IDA7CisgICAgaW50IHJjOworCisgICAgREJH UFJJTlRGKCIlczogQ2FsbGVkIGZvciBWTSAlZFxuIiwgX19GVU5DVElPTl9fLCBkb21fbGF5b3V0 LT5kb21pZCk7CisgICAgaWYgKChyYyA9IHhjX3NlbGVjdF9kb21haW5fcHJlcCh4Y2gsIHBoeXNf bGF5b3V0LCBkb21fbGF5b3V0KSkpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIGlmICghWENf UE9XRVJfT0ZfMihkb21fbGF5b3V0LT5ucl92Y3B1cykpCisgICAgeworICAgICAgICBFUlJPUigi JXM6ICN2Y3B1cyAhPSAyXm4gKGRpc2FibGUgbnVtYSBzcGxpdClcbiIsIF9fRlVOQ1RJT05fXyk7 CisJCXJldHVybiAtMTsKKyAgICB9CisgICAgaWYgKCFYQ19QT1dFUl9PRl8yKGRvbV9sYXlvdXQt Pm5yX3Zub2RlcykpCisgICAgeworICAgICAgICBFUlJPUigiJXM6ICN2bm9kZXMgIT0gMl5uIChk aXNhYmxlIG51bWEgc3BsaXQpXG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gLTE7CisgICAg fQorCWlmIChkb21fbGF5b3V0LT5ucl92Y3B1cyA8IChkb21fbGF5b3V0LT5ucl92bm9kZXMqWENf VkNQVVNfUEVSX1ZOT0RFKSkKKwl7CisgICAgICAgIEVSUk9SKCIlczogRmFpbGVkIC0gTm90IGVu b3VnaCB2Y3B1cyAoJWQgb24gJWQpIVxuIiwKKwkJCQlfX0ZVTkNUSU9OX18sIGRvbV9sYXlvdXQt Pm5yX3ZjcHVzLCBkb21fbGF5b3V0LT5ucl92bm9kZXMpOworICAgICAgICByZXR1cm4gLTE7IAor CX0KKworCXZub2RlX25yX3BhZ2VzID0gCisgICAgICAgIChkb21fbGF5b3V0LT5ucl9wYWdlcytY Q19WTk9ERV9CT09TVF9TSVpFKS9kb21fbGF5b3V0LT5ucl92bm9kZXM7CisgICAgdm5vZGVfbnJf cGFnZXMgJj0gWENfVk5PREVfTUlOX01BU0s7CisJaWYgKHZub2RlX25yX3BhZ2VzIDwgWENfVk5P REVfTUlOX1NJWkUpCisJeworICAgICAgICBFUlJPUigiJXM6IHZub2RlX3NpemUoJWx4KTxtaW4o JWx4KSwgbnJfcGFnZXMoJWx4KSwgbnJfdm5vZGVzKCVkKSFcbiIsCisJCQkJX19GVU5DVElPTl9f LCB2bm9kZV9ucl9wYWdlcywgWENfVk5PREVfTUlOX1NJWkUsCisgICAgICAgICAgICAgICAgZG9t X2xheW91dC0+bnJfcGFnZXMsIGRvbV9sYXlvdXQtPm5yX3Zub2Rlcyk7CisgICAgICAgIHJldHVy biAtMTsgCisJfQorICAgIGRvbV9sYXlvdXQtPm5yX3BhZ2VzID0gdm5vZGVfbnJfcGFnZXMqZG9t X2xheW91dC0+bnJfdm5vZGVzOworCisgICAgaWYgKCEobm9kZV9wYWdlc19zZWxlY3RlZCA9IAor ICAgICAgICAgICAgICAgICh1aW50NjRfdCAqKWNhbGxvYyhYQ19NQVhfTk9ERVMsIHNpemVvZih1 aW50NjRfdCkpKSkKKyAgICB7CisgICAgICAgIHJjID0gLTE7CisgICAgICAgIEVSUk9SKCIlczog bm9kZV9wYWdlcyBhbGxvY2F0aW9uIGZhaWxlZFxuIiwgX19GVU5DVElPTl9fKTsKKyAgICAJZ290 byBmYWlsZWQ7CisgICAgfQorCWlmICgocmMgPSB4Y19zZWxlY3RfYmVzdF9maXRfbm9kZXMoeGNo LCBwaHlzX2xheW91dCwgZG9tX2xheW91dC0+bnJfdm5vZGVzLCAKKyAgICAgICAgICAgICAgICAg ICAgdm5vZGVfbnJfcGFnZXMsIG5vZGVfcGFnZXNfc2VsZWN0ZWQpKSAhPSAwKQorICAgIHsKKyAg ICAgICAgRVJST1IoIiVzOiBOb3QgZW5vdWdoIG1lbW9yeSBmb3IgU1BMSVQgKEhhZCB0byBiYWxs b29uIG1vcmUgPylcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfX0ZVTkNUSU9OX18pOworICAgIAlnb3RvIGZhaWxlZDsKKyAg ICB9CisKKyAgICBkb21fbGF5b3V0LT5ucl9wYWdlcyA9IGRvbV9sYXlvdXQtPm5yX3Zub2Rlcyp2 bm9kZV9ucl9wYWdlczsKKyAgICBkb21fbGF5b3V0LT50eXBlID0gWEVOX0RPTV9OVU1BX1NQTElU OworICAgIGlmICgocmMgPSB4Y19zZXR1cF9kb21haW5fdm5vZGVzKHhjaCwgcGh5c19sYXlvdXQs IGRvbV9sYXlvdXQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIG5vZGVfcGFnZXNfc2VsZWN0ZWQpKSkKKyAgICAgICAgZ290byBmYWlsZWQ7CisK KyAgICBpZiAoKHJjID0geGNfZG9tYWluX3NldG1heG1lbSh4Y2gsIGRvbV9sYXlvdXQtPmRvbWlk LCAKKyAgICAgICAgICAgIChkb21fbGF5b3V0LT5ucl9wYWdlcytYQ19WTk9ERV9CT09TVF9TSVpF KTw8KFBBR0VfU0hJRlQtMTApKSkpCisgICAgICAgIGdvdG8gZmFpbGVkOworCisgICAgREJHUFJJ TlRGKCIlczogU2VsZWN0ZWQgU1BMSVQgZm9yIFZNICVkXG4iLCAKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9fRlVOQ1RJT05fXywgZG9tX2xheW91dC0+ZG9taWQpOworZmFp bGVkOgorICAgIGlmIChub2RlX3BhZ2VzX3NlbGVjdGVkKQorICAgICAgICBmcmVlKG5vZGVfcGFn ZXNfc2VsZWN0ZWQpOworICAgIHJldHVybiByYzsKK30KKworc3RhdGljIGludCB4Y19zZWxlY3Rf ZG9tYWluX3N0cmlwZSh4Y19pbnRlcmZhY2UgKnhjaCwKKyAgICB4Y19tYWNoaW5lX251bWFfbGF5 b3V0X3QgKnBoeXNfbGF5b3V0LCB4Y19kb21haW5fbnVtYV9sYXlvdXRfdCAqZG9tX2xheW91dCkK K3sKKyAgICB1aW50NjRfdCB2bm9kZV9ucl9wYWdlcywgKm5vZGVfcGFnZXNfc2VsZWN0ZWQgPSAw OworICAgIGludCByYzsKKworICAgIERCR1BSSU5URigiJXM6IENhbGxlZCBmb3IgVk0gJWRcbiIs IF9fRlVOQ1RJT05fXywgZG9tX2xheW91dC0+ZG9taWQpOworICAgIGlmICgocmMgPSB4Y19zZWxl Y3RfZG9tYWluX3ByZXAoeGNoLCBwaHlzX2xheW91dCwgZG9tX2xheW91dCkpKQorICAgICAgICBy ZXR1cm4gLTE7CisKKwl2bm9kZV9ucl9wYWdlcyA9IGRvbV9sYXlvdXQtPm5yX3BhZ2VzL2RvbV9s YXlvdXQtPm5yX3Zub2RlczsKKworICAgIGlmICghKG5vZGVfcGFnZXNfc2VsZWN0ZWQgPSAKKyAg ICAgICAgICAgICAgICAodWludDY0X3QgKiljYWxsb2MoWENfTUFYX05PREVTLCBzaXplb2YodWlu dDY0X3QpKSkpCisgICAgeworICAgICAgICByYyA9IC0xOworICAgICAgICBFUlJPUigiJXM6IG5v ZGVfcGFnZXMgYWxsb2NhdGlvbiBmYWlsZWRcbiIsIF9fRlVOQ1RJT05fXyk7CisgICAgCWdvdG8g ZmFpbGVkOworICAgIH0KKwlpZiAoKHJjID0geGNfc2VsZWN0X2Jlc3RfZml0X25vZGVzKHhjaCwg cGh5c19sYXlvdXQsIGRvbV9sYXlvdXQtPm5yX3Zub2RlcywgCisgICAgICAgICAgICAgICAgICAg IHZub2RlX25yX3BhZ2VzLCBub2RlX3BhZ2VzX3NlbGVjdGVkKSkgIT0gMCkKKyAgICB7CisgICAg ICAgIEVSUk9SKCIlczogTm90IGVub3VnaCBtZW1vcnkgZm9yIFNUUklQRSAoSGFkIHRvIGJhbGxv b24gbW9yZSA/KVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9fRlVOQ1RJT05fXyk7CisgICAgCWdvdG8gZmFpbGVkOworICAg IH0KKworICAgIGRvbV9sYXlvdXQtPm5yX3BhZ2VzID0gZG9tX2xheW91dC0+bnJfdm5vZGVzKnZu b2RlX25yX3BhZ2VzOworICAgIGRvbV9sYXlvdXQtPnR5cGUgPSBYRU5fRE9NX05VTUFfU1RSSVBF OworICAgIHJjID0geGNfc2V0dXBfZG9tYWluX3Zub2Rlcyh4Y2gsIHBoeXNfbGF5b3V0LCBkb21f bGF5b3V0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBub2RlX3BhZ2VzX3NlbGVjdGVkKTsKKyAgICBpZiAoIXJjKQorICAgICAgICBEQkdQUklO VEYoIiVzOiBTZWxlY3RlZCBTVFJJUEUgZm9yIFZNICVkXG4iLCAKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9fRlVOQ1RJT05fXywgZG9tX2xheW91dC0+ZG9taWQpOworZmFp bGVkOgorICAgIGlmIChub2RlX3BhZ2VzX3NlbGVjdGVkKQorICAgICAgICBmcmVlKG5vZGVfcGFn ZXNfc2VsZWN0ZWQpOworICAgIHJldHVybiByYzsKK30KKworc3RhdGljIGludCB4Y19zZWxlY3Rf ZG9tYWluX2RvbnRjYXJlKHhjX2ludGVyZmFjZSAqeGNoLAorICAgIHhjX21hY2hpbmVfbnVtYV9s YXlvdXRfdCAqcGh5c19sYXlvdXQsIHhjX2RvbWFpbl9udW1hX2xheW91dF90ICpkb21fbGF5b3V0 KQoreworICAgIHVpbnQ2NF90ICpub2RlX3BhZ2VzX3NlbGVjdGVkID0gMDsKKyAgICBpbnQgcmM7 CisKKyAgICBEQkdQUklOVEYoIiVzOiBDYWxsZWQgZm9yIFZNICVkXG4iLCBfX0ZVTkNUSU9OX18s IGRvbV9sYXlvdXQtPmRvbWlkKTsKKyAgICBpZiAoKHJjID0geGNfc2VsZWN0X2RvbWFpbl9wcmVw KHhjaCwgcGh5c19sYXlvdXQsIGRvbV9sYXlvdXQpKSkKKyAgICAgICAgcmV0dXJuIC0xOworCisg ICAgaWYgKCEobm9kZV9wYWdlc19zZWxlY3RlZCA9IAorICAgICAgICAgICAgICAgICh1aW50NjRf dCAqKWNhbGxvYyhYQ19NQVhfTk9ERVMsIHNpemVvZih1aW50NjRfdCkpKSkKKyAgICB7CisgICAg ICAgIHJjID0gLTE7CisgICAgICAgIEVSUk9SKCIlczogbm9kZV9wYWdlcyBhbGxvY2F0aW9uIGZh aWxlZFxuIiwgX19GVU5DVElPTl9fKTsKKyAgICAJZ290byBmYWlsZWQ7CisgICAgfQorCWlmICgo cmMgPSB4Y19zZWxlY3RfbWF4X2ZpdF9ub2Rlcyh4Y2gsIHBoeXNfbGF5b3V0LCBkb21fbGF5b3V0 LT5ucl9wYWdlcywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlX3Bh Z2VzX3NlbGVjdGVkKSkgPCAwKQorICAgIHsKKyAgICAgICAgRVJST1IoIiVzOiBOb3QgZW5vdWdo IG1lbW9yeSBmb3IgQ09ORklORSAoSGFkIHRvIGJhbGxvb24gbW9yZSA/KVxuIiwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fRlVO Q1RJT05fXyk7CisgICAgCWdvdG8gZmFpbGVkOworICAgIH0KKworICAgIGRvbV9sYXlvdXQtPnR5 cGUgPSBYRU5fRE9NX05VTUFfRE9OVENBUkU7CisgICAgZG9tX2xheW91dC0+bnJfdm5vZGVzID0g cmM7CisgICAgcmMgPSB4Y19zZXR1cF9kb21haW5fdm5vZGVzKHhjaCwgcGh5c19sYXlvdXQsIGRv bV9sYXlvdXQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIG5vZGVfcGFnZXNfc2VsZWN0ZWQpOworICAgIGlmICghcmMpCisgICAgICAgIERCR1BS SU5URigiJXM6IFNlbGVjdGVkIERPTlRDQVJFIGZvciBWTSAlZFxuIiwgCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfX0ZVTkNUSU9OX18sIGRvbV9sYXlvdXQtPmRvbWlkKTsK K2ZhaWxlZDoKKyAgICBpZiAobm9kZV9wYWdlc19zZWxlY3RlZCkKKyAgICAgICAgZnJlZShub2Rl X3BhZ2VzX3NlbGVjdGVkKTsKKyAgICByZXR1cm4gcmM7Cit9CisKKyNkZWZpbmUgWENfRE9NX0lT X05VTUFfR1VFU1QobikgKDApCisKK3N0YXRpYyBpbnQgeGNfc2VsZWN0X2RvbWFpbl9hdXRvKHhj X2ludGVyZmFjZSAqeGNoLAorICAgIHhjX21hY2hpbmVfbnVtYV9sYXlvdXRfdCAqcGh5c19sYXlv dXQsIHhjX2RvbWFpbl9udW1hX2xheW91dF90ICpkb21fbGF5b3V0KQoreworCWludCBpOworCisg ICAgLyogQXR0ZW1wdCB0byBjb25maW5lIHRoZSBWTSAqLworICAgIERCR1BSSU5URigiJXM6IFNl bGVjdGluZyBhbGxvY2F0aW9uIHN0cmF0ZWd5IGZvciAoVk0gJWQpXG4iLCAKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9fRlVOQ1RJT05fXywgZG9tX2xheW91dC0+ZG9taWQp OworCisgICAgZG9tX2xheW91dC0+bnJfdm5vZGVzID0gMTsKKwlpZiAoIXhjX3NlbGVjdF9kb21h aW5fY29uZmluZSh4Y2gsIHBoeXNfbGF5b3V0LCBkb21fbGF5b3V0KSkKKwkJcmV0dXJuIDA7CisK KyAgICBpZiAoIVhDX0RPTV9JU19OVU1BX0dVRVNUKGRvbV9sYXlvdXQpKQorICAgICAgICBEQkdQ UklOVEYoIiVzOiBJbWFnZSBkb2Vzbid0IHN1cHBvcnQgbnVtYSAoVk0gJWQpXG4iLCAKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fRlVOQ1RJT05fXywgZG9tX2xheW91dC0+ ZG9taWQpOworICAgIGVsc2UKKwl7CisgICAgCS8qIEF0dGVtcHQgdG8gc3BsaXQgdGhlIFZNICov CisgICAgCWZvciAoaSA9IDI7IGkgPD0gcGh5c19sYXlvdXQtPm5yX25vZGVzOyBpPDw9MSkKKyAg ICAgICAgeworICAgICAgICAgICAgZG9tX2xheW91dC0+bnJfdm5vZGVzID0gaTsKKwkJCWlmICgh eGNfc2VsZWN0X2RvbWFpbl9zcGxpdCh4Y2gsIHBoeXNfbGF5b3V0LCBkb21fbGF5b3V0KSkKKwkJ CQlyZXR1cm4gMDsKKyAgICAgICAgfQorCX0KKworICAJLyogQXR0ZW1wdCB0byBzdHJpcGUgdGhl IFZNICovCisgICAJZm9yIChpID0gMjsgaSA8PSBwaHlzX2xheW91dC0+bnJfbm9kZXM7IGkrKykK KyAgICB7CisgICAgICAgIGRvbV9sYXlvdXQtPm5yX3Zub2RlcyA9IGk7CisJCWlmICgheGNfc2Vs ZWN0X2RvbWFpbl9zdHJpcGUoeGNoLCBwaHlzX2xheW91dCwgZG9tX2xheW91dCkpCisJCQlyZXR1 cm4gMDsKKyAgICB9CisKKwlpZiAoIXhjX3NlbGVjdF9kb21haW5fZG9udGNhcmUoeGNoLCBwaHlz X2xheW91dCwgZG9tX2xheW91dCkpCisJCXJldHVybiAwOworCisgICAgRVJST1IoIiVzOiBGYWls ZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgVk0gKEhhZCB0byBiYWxsb29uIG1vcmUgPylc biIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfX0ZVTkNUSU9OX18pOworICAgIHJldHVybiAtMTsKK30KKworaW50IHhjX3NldHVw X251bWFfZG9tYWluKHhjX2ludGVyZmFjZSAqeGNoLCB4Y19kb21haW5fbnVtYV9sYXlvdXRfdCAq ZG9tX2xheW91dCkKK3sKKyAgICBpbnQgcmM7CisgICAgeGNfbWFjaGluZV9udW1hX2xheW91dF90 ICpwaHlzX2xheW91dDsKKworICAgIERCR1BSSU5URigiJXM6IGNhbGxlZCAobWVtX3N0cmF0ZWd5 OiVkKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fRlVOQ1RJT05f XywgZG9tX2xheW91dC0+c3RyYXRlZ3kpOworCisgICAgaWYgKCEocGh5c19sYXlvdXQgPSBtYWxs b2Moc2l6ZW9mKCpwaHlzX2xheW91dCkpKSkKKyAgICB7CisgICAgICAgIEVSUk9SKCAiJXM6IHBo eXNfbGF5b3V0IGFsbG9jYXRpb24gZmFpbGVkXG4iLCBfX0ZVTkNUSU9OX18pOworICAgICAgICBy ZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKChyYyA9IHhjX2dldF9tYWNoaW5lX251bWFfbGF5 b3V0KHhjaCwgcGh5c19sYXlvdXQpKSkKKyAgICB7CisgICAgICAgIEVSUk9SKCAiJXM6IHhjX2dl dF9tYWNoaW5lX251bWFfbGF5b3V0IGZhaWxlZFxuIiwgX19GVU5DVElPTl9fKTsKKyAgICAgICAg Z290byBkb25lOworICAgIH0KKworCXN3aXRjaCAoZG9tX2xheW91dC0+c3RyYXRlZ3kpCisJewor CQljYXNlIFhDX0RPTV9OVU1BX0FVVE86CisJCQlyYyA9IHhjX3NlbGVjdF9kb21haW5fYXV0byh4 Y2gsIHBoeXNfbGF5b3V0LCBkb21fbGF5b3V0KTsKKwkJCWJyZWFrOworCQljYXNlIFhDX0RPTV9O VU1BX0NPTkZJTkU6CisgICAgICAgICAgICBkb21fbGF5b3V0LT5ucl92bm9kZXMgPSAxOyAvKiBJ biBjYXNlIGNvbmZpZ3VyZWQgYmFkICovCisJCQlyYyA9IHhjX3NlbGVjdF9kb21haW5fY29uZmlu ZSh4Y2gsIHBoeXNfbGF5b3V0LCBkb21fbGF5b3V0KTsKKwkJCWJyZWFrOworCQljYXNlIFhDX0RP TV9OVU1BX1NQTElUOgorCQkJcmMgPSB4Y19zZWxlY3RfZG9tYWluX3NwbGl0KHhjaCwgcGh5c19s YXlvdXQsIGRvbV9sYXlvdXQpOworCQkJYnJlYWs7CisJCWNhc2UgWENfRE9NX05VTUFfU1RSSVBF OgorCQkJcmMgPSB4Y19zZWxlY3RfZG9tYWluX3N0cmlwZSh4Y2gsIHBoeXNfbGF5b3V0LCBkb21f bGF5b3V0KTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmMgPSAtMTsKKyAgICAgICAgCUVS Uk9SKCIlczogVW5rbm93biBtZW1vcnkgYWxsb2NhdGlvbiBzdHJhdGVneSAoJWQpXG4iLAorCQkJ CQkJCQlfX0ZVTkNUSU9OX18sIGRvbV9sYXlvdXQtPnN0cmF0ZWd5KTsKKwl9CisKKwlpZiAocmMp CisgCXsKKyAgICAgICAJRVJST1IoIiVzOiB4Y19zZWxlY3RfZG9tYWluIGZhaWxlZCBmb3IgKCVk KVxuIiwgCisJCQkJX19GVU5DVElPTl9fLCBkb21fbGF5b3V0LT5zdHJhdGVneSk7CisgICAgICAg CWdvdG8gZG9uZTsKKyAgIAl9CisKKyAgICB4Y19kdW1wX2RvbV9udW1hX2xheW91dCh4Y2gsIGRv bV9sYXlvdXQpOworZG9uZToKKyAgICBmcmVlKHBoeXNfbGF5b3V0KTsKKyAgICByZXR1cm4gcmM7 Cit9CisKK3N0YXRpYyBpbnQKK3hjX2RvbWFpbl9udW1hX3ZjcHVfc2V0YWZmaW5pdHkoeGNfaW50 ZXJmYWNlICp4Y2gsIHVpbnQzMl90IGRvbWlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpbnQgdmNwdSwgc3RydWN0IHhlbmN0bF9jcHVtYXAgKmNwdW1hcCkKK3sKKyAgICBERUNM QVJFX0RPTUNUTDsKKyAgICBpbnQgcmV0ID0gLTE7CisKKyAgICBkb21jdGwuY21kID0gWEVOX0RP TUNUTF9zZXR2Y3B1YWZmaW5pdHk7CisgICAgZG9tY3RsLmRvbWFpbiA9IChkb21pZF90KWRvbWlk OworICAgIGRvbWN0bC51LnZjcHVhZmZpbml0eS52Y3B1ID0gdmNwdTsKKyAgICBkb21jdGwudS52 Y3B1YWZmaW5pdHkuY3B1bWFwID0gKmNwdW1hcDsKKworICAgIGlmICggeGNfY3B1bWFwX2xvY2tf cGFnZXMoY3B1bWFwKSAhPSAwICkKKyAgICB7CisgICAgICAgIFBFUlJPUigiQ291bGQgbm90IGxv Y2sgbWVtb3J5IGZvciBYZW4gaHlwZXJjYWxsIik7CisgICAgICAgIGdvdG8gb3V0OworICAgIH0K KworICAgIHJldCA9IGRvX2RvbWN0bCh4Y2gsICZkb21jdGwpOworICAgIHhjX2NwdW1hcF91bmxv Y2tfcGFnZXMoY3B1bWFwKTsKKyBvdXQ6CisgICAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlu dAoreGNfZG9tYWluX251bWFfcGludmNwdXNfc3BsaXQoeGNfaW50ZXJmYWNlICp4Y2gsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhjX2RvbWFpbl9udW1hX2xheW91dF90ICpkb21f bGF5b3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4Y19tYWNoaW5lX251bWFf bGF5b3V0X3QgKnBoeXNfbGF5b3V0KQoreworICAgIGludCB2bm9kZTsKKworICAgIGZvciAodm5v ZGUgPSAwOyB2bm9kZSA8IGRvbV9sYXlvdXQtPm5yX3Zub2Rlczsgdm5vZGUrKykKKyAgICB7Cisg ICAgICAgIGludCB2Y3B1OworICAgICAgICBpbnQgbW5vZGUgPSBkb21fbGF5b3V0LT52bm9kZV9k YXRhW3Zub2RlXS5tbm9kZV9pZDsKKyAgICAgICAgeGNfY3B1bWFza190ICpub2RlX2NwdW1hc2sg PQorICAgICAgICAgICAgICAgICAgICAmcGh5c19sYXlvdXQtPm5vZGVfZGF0YVttbm9kZV0uY3B1 X21hc2s7CisgICAgICAgIHhjX2NwdW1hc2tfdCAqdm5vZGVfdmNwdW1hc2sgPQorICAgICAgICAg ICAgICAgICAgICAmZG9tX2xheW91dC0+dm5vZGVfZGF0YVt2bm9kZV0udmNwdV9tYXNrOworICAg ICAgICBzdHJ1Y3QgeGVuY3RsX2NwdW1hcCBub2RlX2NwdW1hcCwgdm5vZGVfdmNwdW1hcDsKKwor ICAgICAgICB4Y19jcHVtYXBfZnJvbV9jcHVtYXNrKCZub2RlX2NwdW1hcCwgbm9kZV9jcHVtYXNr KTsKKyAgICAgICAgeGNfY3B1bWFwX2Zyb21fY3B1bWFzaygmdm5vZGVfdmNwdW1hcCwgdm5vZGVf dmNwdW1hc2spOworICAgICAgICB4Y19mb3JfZWFjaF9jcHUodmNwdSwgdm5vZGVfdmNwdW1hcCkK KyAgICAgICAgeworICAgICAgICAgICAgaWYgKHhjX2RvbWFpbl9udW1hX3ZjcHVfc2V0YWZmaW5p dHkoCisgICAgICAgICAgICAgICAgICAgICAgICB4Y2gsIGRvbV9sYXlvdXQtPmRvbWlkLCB2Y3B1 LCAmbm9kZV9jcHVtYXApKSAKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBFUlJPUigg IiVzOnhjX3ZjcHVfc2V0YWZmaW5pdHkgZmFpbGVkXG4iLCBfX0ZVTkNUSU9OX18pOworICAgICAg ICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAg ICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAoreGNfZG9tYWluX251bWFfcGludmNwdXNfc3Ry aXBlKHhjX2ludGVyZmFjZSAqeGNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4 Y19kb21haW5fbnVtYV9sYXlvdXRfdCAqZG9tX2xheW91dCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgeGNfbWFjaGluZV9udW1hX2xheW91dF90ICpwaHlzX2xheW91dCkKK3sKKyAg ICBpbnQgdm5vZGUsIHZjcHU7CisgICAgeGNfY3B1bWFza190IHN0cmlwZV9jcHVtYXNrOworICAg IHN0cnVjdCB4ZW5jdGxfY3B1bWFwIHN0cmlwZV9jcHVtYXA7CisKKyAgICB4Y19jcHVtYXBfZnJv bV9jcHVtYXNrKCZzdHJpcGVfY3B1bWFwLCAmc3RyaXBlX2NwdW1hc2spOworICAgIHhjX2NwdW1h cF9jbGVhcmFsbChzdHJpcGVfY3B1bWFwKTsKKworICAgIGZvciAodm5vZGUgPSAwOyB2bm9kZSA8 IGRvbV9sYXlvdXQtPm5yX3Zub2Rlczsgdm5vZGUrKykKKyAgICB7CisgICAgICAgIGludCBtbm9k ZSA9IGRvbV9sYXlvdXQtPnZub2RlX2RhdGFbdm5vZGVdLm1ub2RlX2lkOworICAgICAgICB4Y19j cHVtYXNrX3QgKm5vZGVfY3B1bWFzayA9CisgICAgICAgICAgICAgICAgICAgICZwaHlzX2xheW91 dC0+bm9kZV9kYXRhW21ub2RlXS5jcHVfbWFzazsKKyAgICAgICAgc3RydWN0IHhlbmN0bF9jcHVt YXAgbm9kZV9jcHVtYXA7CisKKyAgICAgICAgeGNfY3B1bWFwX2Zyb21fY3B1bWFzaygmbm9kZV9j cHVtYXAsIG5vZGVfY3B1bWFzayk7CisgICAgICAgIHhjX2NwdW1hcF9vcihzdHJpcGVfY3B1bWFw LCBzdHJpcGVfY3B1bWFwLCBub2RlX2NwdW1hcCk7CisgICAgfQorCisgICAgZm9yICh2Y3B1ID0g MDsgdmNwdSA8IGRvbV9sYXlvdXQtPm5yX3ZjcHVzOyB2Y3B1KyspCisgICAgeworICAgICAgICBp ZiAoeGNfZG9tYWluX251bWFfdmNwdV9zZXRhZmZpbml0eSgKKyAgICAgICAgICAgICAgICAgICAg eGNoLCBkb21fbGF5b3V0LT5kb21pZCwgdmNwdSwgJnN0cmlwZV9jcHVtYXApKSAKKyAgICAgICAg eworICAgICAgICAgICAgRVJST1IoICIlczp4Y19zY3B1X2dldGFmZmluaXR5IGZhaWxlZFxuIiwg X19GVU5DVElPTl9fKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgIH0K KyAgICByZXR1cm4gMDsKK30KKworaW50Cit4Y19kb21haW5fbnVtYV9waW52Y3B1cyh4Y19pbnRl cmZhY2UgKnhjaCwgeGNfZG9tYWluX251bWFfbGF5b3V0X3QgKmRvbV9sYXlvdXQpCit7CisgICAg aW50IHJjOworCisgICAgeGNfbWFjaGluZV9udW1hX2xheW91dF90ICpwaHlzX2xheW91dDsKKyAg ICBpZiAoIShwaHlzX2xheW91dCA9IG1hbGxvYyhzaXplb2YoKnBoeXNfbGF5b3V0KSkpKQorICAg IHsKKyAgICAgICAgRVJST1IoICIlczogbGF5b3V0IGFsbG9jYXRpb24gZmFpbGVkXG4iLCBfX0ZV TkNUSU9OX18pOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKChyYyA9IHhj X2dldF9tYWNoaW5lX251bWFfbGF5b3V0KHhjaCwgcGh5c19sYXlvdXQpKSkKKyAgICB7CisgICAg ICAgIEVSUk9SKCAiJXM6IHhjX2dldF9tYWNoaW5lX251bWFfbGF5b3V0IGZhaWxlZFxuIiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9fRlVOQ1RJT05fXyk7CisgICAgICAgIGdvdG8gZG9uZTsKKyAgICB9CisKKyAgICBpZiAoKGRv bV9sYXlvdXQtPnR5cGUgPT0gWEVOX0RPTV9OVU1BX1NUUklQRSkgfHwgCisJCQkJCQkoZG9tX2xh eW91dC0+dHlwZSA9PSBYRU5fRE9NX05VTUFfRE9OVENBUkUpKQorICAgICAgICByYyA9IHhjX2Rv bWFpbl9udW1hX3BpbnZjcHVzX3N0cmlwZSh4Y2gsIGRvbV9sYXlvdXQsIHBoeXNfbGF5b3V0KTsK KyAgICBlbHNlCisgICAgICAgIHJjID0geGNfZG9tYWluX251bWFfcGludmNwdXNfc3BsaXQoeGNo LCBkb21fbGF5b3V0LCBwaHlzX2xheW91dCk7Citkb25lOgorICAgIGZyZWUocGh5c19sYXlvdXQp OworICAgIHJldHVybiByYzsKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnhjL3hjX2RvbV9udW1h LmggYi90b29scy9saWJ4Yy94Y19kb21fbnVtYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAv ZGV2L251bGwKKysrIGIvdG9vbHMvbGlieGMveGNfZG9tX251bWEuaApAQCAtMCwwICsxLDczIEBA CisjaWZuZGVmIF9fWENfRE9NX05VTUFfSAorI2RlZmluZSBfX1hDX0RPTV9OVU1BX0gKKworI2lu Y2x1ZGUgInhlbmN0cmwuaCIKKyNpbmNsdWRlIDx4ZW4vZG9tX251bWEuaD4KKworI2RlZmluZSBY Q19DUFVNQVNLX05SX0NQVVMgWEVOX01BWF9WQ1BVUworI2RlZmluZSBYQ19NQVhfVk5PREVTIDgK KworI2RlZmluZSBYQ19DUFVNQVNLX0JJVFNfUEVSX0JZVEUgOAorI2RlZmluZSBYQ19DUFVNQVNL X0JJVFNfVE9fQllURVMoYml0cykgXAorICAgICgoKGJpdHMpK1hDX0NQVU1BU0tfQklUU19QRVJf QllURS0xKS9YQ19DUFVNQVNLX0JJVFNfUEVSX0JZVEUpCisjZGVmaW5lIFhDX0NQVU1BU0tfREVD TEFSRV9CSVRNQVAobmFtZSxiaXRzKSBcCisgICAgdWludDhfdCBuYW1lW1hDX0NQVU1BU0tfQklU U19UT19CWVRFUyhiaXRzKV0KKworc3RydWN0IHhjX2NwdW1hc2t7IFhDX0NQVU1BU0tfREVDTEFS RV9CSVRNQVAoYml0cywgWENfQ1BVTUFTS19OUl9DUFVTKTsgfTsKK3R5cGVkZWYgc3RydWN0IHhj X2NwdW1hc2sgeGNfY3B1bWFza190OworCisvKiBDb25zdHJ1Y3QgYSB4ZW5jdGxfY3B1bWFwIHN0 cnVjdHVyZSB1c2luZyBidWZmZXIgZnJvbSB0aGUgeGNfY3B1bWFzaworICogc3RydWN0dXJlICov CisjZGVmaW5lIHhjX2NwdW1hcF9mcm9tX2NwdW1hc2sobWFwLCBtYXNrKSAgICAgICAgICAgICAg IFwKK2RvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAorICAgIChtYXApLT5ucl9jcHVzID0gWENfQ1BVTUFTS19OUl9DUFVTOyAgICAgICAgICAg ICAgICAgICAgXAorICAgIHNldF94ZW5fZ3Vlc3RfaGFuZGxlKChtYXApLT5iaXRtYXAsIChtYXNr KS0+Yml0cyk7ICBcCit9d2hpbGUoMCkKKworCitzdHJ1Y3QgeGNfdm5vZGVfZGF0YSB7CisgICAg dWludDhfdCB2bm9kZV9pZDsKKyAgICB1aW50OF90IG1ub2RlX2lkOworICAgIHVpbnQzMl90IG5y X3BhZ2VzOworICAgIHhjX2NwdW1hc2tfdCB2Y3B1X21hc2s7IC8qIHZub2RlX3RvX3ZjcHVtYXNr ICovCit9OwordHlwZWRlZiBzdHJ1Y3QgeGNfdm5vZGVfZGF0YSB4Y192bm9kZV9kYXRhX3Q7CisK K3N0cnVjdCB4Y19kb21haW5fbnVtYV9sYXlvdXQgeworICAgIHVpbnQ4X3QgdmVyc2lvbjsKKyAg ICB1aW50OF90IHR5cGU7CisKKyAgICB1aW50OF90IG5yX3ZjcHVzOworICAgIHVpbnQ4X3QgbnJf dm5vZGVzOworCisgICAgdWludDMyX3QgbnJfcGFnZXM7CisgICAgLyogT25seSAobnJfdm5vZGVz KSBlbnRyaWVzIGFyZSBmaWxsZWQgKi8KKyAgICB4Y192bm9kZV9kYXRhX3Qgdm5vZGVfZGF0YVtY Q19NQVhfVk5PREVTXTsKKyAgICAvKiBPbmx5IChucl92bm9kZXMqbnJfdm5vZGVzKSBlbnRyaWVz IGFyZSBmaWxsZWQgKi8KKyAgICB1aW50OF90IHZub2RlX2Rpc3RhbmNlW1hDX01BWF9WTk9ERVMq WENfTUFYX1ZOT0RFU107CisKKyAgICAvKiBGb3IgSW50ZXJuYWwgVVNFIG9ubHkgKi8KKyAgICB1 aW50MzJfdCBkb21pZDsKKyAgICB1aW50MTZfdCBzdHJhdGVneTsKKyAgICB1aW50MTZfdCBzdHJp cGVfc2l6ZTsKK307Cit0eXBlZGVmIHN0cnVjdCB4Y19kb21haW5fbnVtYV9sYXlvdXQgeGNfZG9t YWluX251bWFfbGF5b3V0X3Q7CisKK2V4dGVybiB4Y19kb21haW5fbnVtYV9sYXlvdXRfdCAqIHhj X2RvbV9hbGxvY19udW1hX2xheW91dCh4Y19pbnRlcmZhY2UgKnhjaCwgCisgICAgICAgIHVpbnQz Ml90IGRvbWlkLCB1aW50NjRfdCBucl9wYWdlcywgeGNfZG9tYWluX251bWFfY29uZmlnX3QgKmNv bmZpZyk7CitleHRlcm4gdm9pZCB4Y19kb21fZnJlZV9udW1hX2xheW91dCh4Y19pbnRlcmZhY2Ug KnhjaCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGNfZG9tYWlu X251bWFfbGF5b3V0X3QgKmRvbV9sYXlvdXQpOworCitleHRlcm4gaW50IAoreGNfc2V0dXBfbnVt YV9kb21haW4oeGNfaW50ZXJmYWNlICp4Y2gsIHhjX2RvbWFpbl9udW1hX2xheW91dF90ICpkb21f bGF5b3V0KTsKK2V4dGVybiBpbnQKK3hjX2RvbWFpbl9udW1hX3BpbnZjcHVzKHhjX2ludGVyZmFj ZSAqeGNoLCB4Y19kb21haW5fbnVtYV9sYXlvdXRfdCAqZG9tX2xheW91dCk7CisKK3N0YXRpYyBp bmxpbmUgaW50IHhjX2RvbWFpbl9ucl92bm9kZXMoeGNfZG9tYWluX251bWFfbGF5b3V0X3QgKiBk b21fbGF5b3V0KQoreworICAgIGlmICghZG9tX2xheW91dCB8fCAoZG9tX2xheW91dC0+dHlwZSAh PSBYRU5fRE9NX05VTUFfU1BMSVQpKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gZG9t X2xheW91dC0+bnJfdm5vZGVzOworfQorCisjZW5kaWYK --0016367fb90cf05af0048cca404f Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel --0016367fb90cf05af0048cca404f--