From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 15791 invoked by alias); 17 Mar 2009 01:56:04 -0000 Received: (qmail 15735 invoked by uid 22791); 17 Mar 2009 01:56:03 -0000 X-SWARE-Spam-Status: No, hits=3.2 required=5.0 tests=BAYES_40,J_CHICKENPOX_14,RDNS_DYNAMIC,ROUND_THE_WORLD_LOCAL X-Spam-Check-By: sourceware.org Received: from adsl-61-66-25-189.BC.sparqnet.net (HELO mswedge2.sunplus.com) (61.66.25.189) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Tue, 17 Mar 2009 01:55:58 +0000 Received: from sphsml08.sunplus.com.tw (msw.sunplus.com.tw [172.17.10.162] (may be forged)) by mswedge2.sunplus.com (8.14.1/8.14.1) with ESMTP id n2H1tWB3001403 for ; Tue, 17 Mar 2009 09:55:32 +0800 Received: from maillog.sunplus.com (unverified [172.17.10.158]) by sphsml08.sunplus.com.tw (Mail System 5.2) with ESMTP id for ; Tue, 17 Mar 2009 09:55:42 +0800 Received: from ctmail01.sunplusct.com ([172.23.3.54]) by maillog.sunplus.com (8.12.10/8.12.10) with ESMTP id n2H1tQcX024893 for ; Tue, 17 Mar 2009 09:55:26 +0800 To: gdb-patches@sourceware.org MIME-Version: 1.0 Subject: [PATCH] Support new target S+core 3, a variant of S+core Message-ID: From: don.lee@sunplusct.com Date: Tue, 17 Mar 2009 02:17:00 -0000 Content-Type: multipart/mixed; boundary="=_mixed 000A91444825757C_=" X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2009-03/txt/msg00291.txt.bz2 --=_mixed 000A91444825757C_= Content-Type: text/plain; charset="US-ASCII" Content-length: 995 Hello, The S+core team in our company have ported GDB to S+core 3, a variant of S+core, now we want to contribute some patch. So here it is (see attachment). Please review it, and any suggestions are most welcome. At now, I'm quite new to GDB, so if you fond something I did wrong, please point it out. Thanks for your time, Don ---- ChangLog 2009-03-04 Don Lee : Support new target S+core 3, which is a variant of S+core * gdb/score-tdep.c: support new target S+core 3 * gdb/score-tdep.c: Ditto. patch for gdb/MAINTAINER --- src/gdb/MAINTAINERS 2009-03-04 10:26:35.000000000 +0800 +++ src.mod/gdb/MAINTAINERS 2009-03-04 10:29:15.000000000 +0800 @@ -307,6 +307,7 @@ score --target=score-elf Qinwei qinwei@sunnorth.com.cn + Don Lee don.lee@sunplusct.com sh --target=sh-elf ,-Werror --target=sh64-elf ,-Werror --=_mixed 000A91444825757C_= Content-Type: application/octet-stream; name="gdb.patch" Content-Disposition: attachment; filename="gdb.patch" Content-Transfer-Encoding: base64 Content-length: 57454 SW5kZXg6IGdkYi9jb25maWd1cmUudGd0Cj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KUkNTIGZpbGU6IC9jdnMvc3JjL3NyYy9nZGIvY29uZmlndXJlLnRndCx2 CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yMTMKZGlmZiAtcjEuMjEzIGNvbmZp Z3VyZS50Z3QKMzc4YzM3OCwzODIKPCAJZ2RiX3RhcmdldF9vYnM9InNjb3Jl LXRkZXAubyIKLS0tCj4gCWdkYl90YXJnZXRfb2JzPSJzY29yZS10ZGVwLm8g Y29yZWxvdy5vIgo+IAlpZiB0ZXN0IC1mIC4uL3NpbS9zY29yZS9NYWtlZmls ZTsgdGhlbgo+IAkgIGdkYl9zaW09Li4vc2ltL3Njb3JlL2xpYnNpbS5hCj4g CWZpCj4gCWJ1aWxkX2dkYnNlcnZlcj15ZXMKSW5kZXg6IGdkYi9zY29yZS10 ZGVwLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9z cmMvc3JjL2dkYi9zY29yZS10ZGVwLmMsdgpyZXRyaWV2aW5nIHJldmlzaW9u IDEuMTgKZGlmZiAtcjEuMTggc2NvcmUtdGRlcC5jCjMyYTMzCj4gI2luY2x1 ZGUgInJlZ3NldC5oIgo0MCw0MWM0MQo8ICNkZWZpbmUgR19GTEQoX2ksX21z LF9scykgICAoKChfaSkgPDwgKDMxIC0gKF9tcykpKSA+PiAoMzEgLSAoX21z KSArIChfbHMpKSkKPCAjZGVmaW5lIFJNX1BCSVRTKF9yYXcpICAgICAgKChH X0ZMRChfcmF3LCAzMSwgMTYpIDw8IDE1KSB8IEdfRkxEKF9yYXcsIDE0LCAw KSkKLS0tCj4gI2RlZmluZSBHX0ZMRChfaSxfbXMsX2xzKSAgICgodW5zaWdu ZWQpKChfaSkgPDwgKDMxIC0gKF9tcykpKSA+PiAoMzEgLSAoX21zKSArIChf bHMpKSkKNDQsNDZjNDQsNDYKPCAgICAgdW5zaWduZWQgaW50IHY7CjwgICAg IHVuc2lnbmVkIGludCByYXc7CjwgICAgIGNoYXIgICAgICAgICBpczE1Owot LS0KPiAgICAgdW5zaWduZWQgbG9uZyBsb25nIHY7Cj4gICAgIHVuc2lnbmVk IGxvbmcgbG9uZyByYXc7Cj4gICAgIHVuc2lnbmVkIGludCBsZW47CjU2LDE4 NmM1Ngo8ICNpZiAwCjwgLyogSWYgUytjb3JlIEdDQyB3aWxsIGdlbmVyYXRl IHRoZXNlIGluc3RydWN0aW9ucyBpbiB0aGUgcHJvbG9ndWU6CjwgCjwgICAg bHcgICByeCwgaW1tMQo8ICAgIGFkZGkgcngsIC1pbW0yCjwgICAgbXYhICBy MiwgcngKPCAKPCAgICB0aGVuIC5wZHIgc2VjdGlvbiBpcyB1c2VkLiAgKi8K PCAKPCAjZGVmaW5lIFBfU0laRSAgICAgICAgICA4CjwgI2RlZmluZSBQSV9T WU0gICAgICAgICAgMAo8ICNkZWZpbmUgUElfUl9NU0sgICAgICAgIDEKPCAj ZGVmaW5lIFBJX1JfT0ZGICAgICAgICAyCjwgI2RlZmluZSBQSV9SX0xFRiAg ICAgICAgNAo8ICNkZWZpbmUgUElfRl9PRkYgICAgICAgIDUKPCAjZGVmaW5l IFBJX0ZfUkVHICAgICAgICA2CjwgI2RlZmluZSBQSV9SQVJFRyAgICAgICAg Nwo8IAo8IHR5cGVkZWYgc3RydWN0IGZyYW1lX2V4dHJhX2luZm8KPCB7Cjwg ICBDT1JFX0FERFIgcF9mcmFtZTsKPCAgIHVuc2lnbmVkIGludCBwZHJbUF9T SVpFXTsKPCB9IGV4dHJhX2luZm9fdDsKPCAKPCBzdHJ1Y3Qgb2JqX3ByaXYK PCB7CjwgICBiZmRfc2l6ZV90eXBlIHNpemU7CjwgICBjaGFyICpjb250ZW50 czsKPCB9Owo8IAo8IHN0YXRpYyBiZmQgKnRoZV9iZmQ7CjwgCjwgc3RhdGlj IGludAo8IHNjb3JlX2NvbXBhcmVfcGRyX2VudHJpZXMgKGNvbnN0IHZvaWQg KmEsIGNvbnN0IHZvaWQgKmIpCjwgewo8ICAgQ09SRV9BRERSIGxocyA9IGJm ZF9nZXRfMzIgKHRoZV9iZmQsIChiZmRfYnl0ZSAqKSBhKTsKPCAgIENPUkVf QUREUiByaHMgPSBiZmRfZ2V0XzMyICh0aGVfYmZkLCAoYmZkX2J5dGUgKikg Yik7CjwgICBpZiAobGhzIDwgcmhzKQo8ICAgICByZXR1cm4gLTE7CjwgICBl bHNlIGlmIChsaHMgPT0gcmhzKQo8ICAgICByZXR1cm4gMDsKPCAgIGVsc2UK PCAgICAgcmV0dXJuIDE7CjwgfQo8IAo8IHN0YXRpYyB2b2lkCjwgc2NvcmVf YW5hbHl6ZV9wZHJfc2VjdGlvbiAoQ09SRV9BRERSIHN0YXJ0YWRkciwgQ09S RV9BRERSIHBjLAo8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVj dCBmcmFtZV9pbmZvICp0aGlzX2ZyYW1lLAo8ICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHN0cnVjdCBzY29yZV9mcmFtZV9jYWNoZSAqdGhpc19jYWNo ZSkKPCB7CjwgICBzdHJ1Y3Qgc3ltYm9sICpzeW07CjwgICBzdHJ1Y3Qgb2Jq X3NlY3Rpb24gKnNlYzsKPCAgIGV4dHJhX2luZm9fdCAqZmNpX2V4dDsKPCAg IENPUkVfQUREUiBsZWFmX3JhX3N0YWNrX2FkZHIgPSAtMTsKPCAKPCAgIGdk Yl9hc3NlcnQgKHN0YXJ0YWRkciA8PSBwYyk7CjwgICBnZGJfYXNzZXJ0ICh0 aGlzX2NhY2hlICE9IE5VTEwpOwo8IAo8ICAgZmNpX2V4dCA9IGZyYW1lX29i c3RhY2tfemFsbG9jIChzaXplb2YgKGV4dHJhX2luZm9fdCkpOwo8ICAgaWYg KChzZWMgPSBmaW5kX3BjX3NlY3Rpb24gKHBjKSkgPT0gTlVMTCkKPCAgICAg ewo8ICAgICAgIGVycm9yICgiRXJyb3I6IENhbid0IGZpbmQgc2VjdGlvbiBp biBmaWxlOiVzLCBsaW5lOiVkISIsCjwgICAgICAgICAgICAgIF9fRklMRV9f LCBfX0xJTkVfXyk7CjwgICAgICAgcmV0dXJuOwo8ICAgICB9CjwgCjwgICAv KiBBbnlseXplIC5wZHIgc2VjdGlvbiBhbmQgZ2V0IGNvcmVzcG9uZGluZyBm aWVsZHMuICAqLwo8ICAgewo8ICAgICBzdGF0aWMgc3RydWN0IG9ial9wcml2 ICpwcml2ID0gTlVMTDsKPCAKPCAgICAgaWYgKHByaXYgPT0gTlVMTCkKPCAg ICAgICB7CjwgICAgICAgICBhc2VjdGlvbiAqYmZkc2VjOwo8ICAgICAgICAg cHJpdiA9IG9ic3RhY2tfYWxsb2MgKCZzZWMtPm9iamZpbGUtPm9iamZpbGVf b2JzdGFjaywKPCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl b2YgKHN0cnVjdCBvYmpfcHJpdikpOwo8ICAgICAgICAgaWYgKChiZmRzZWMg PSBiZmRfZ2V0X3NlY3Rpb25fYnlfbmFtZSAoc2VjLT5vYmpmaWxlLT5vYmZk LCAiLnBkciIpKSkKPCAgICAgICAgICAgewo8ICAgICAgICAgICAgIHByaXYt PnNpemUgPSBiZmRfc2VjdGlvbl9zaXplIChzZWMtPm9iamZpbGUtPm9iZmQs IGJmZHNlYyk7CjwgICAgICAgICAgICAgcHJpdi0+Y29udGVudHMgPSBvYnN0 YWNrX2FsbG9jICgmc2VjLT5vYmpmaWxlLT5vYmpmaWxlX29ic3RhY2ssCjwg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw cml2LT5zaXplKTsKPCAgICAgICAgICAgICBiZmRfZ2V0X3NlY3Rpb25fY29u dGVudHMgKHNlYy0+b2JqZmlsZS0+b2JmZCwgYmZkc2VjLAo8ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpdi0+Y29udGVudHMs IDAsIHByaXYtPnNpemUpOwo8ICAgICAgICAgICAgIHRoZV9iZmQgPSBzZWMt Pm9iamZpbGUtPm9iZmQ7CjwgICAgICAgICAgICAgcXNvcnQgKHByaXYtPmNv bnRlbnRzLCBwcml2LT5zaXplIC8gMzIsIDMyLAo8ICAgICAgICAgICAgICAg ICAgICBzY29yZV9jb21wYXJlX3Bkcl9lbnRyaWVzKTsKPCAgICAgICAgICAg ICB0aGVfYmZkID0gTlVMTDsKPCAgICAgICAgICAgfQo8ICAgICAgICAgZWxz ZQo8ICAgICAgICAgICBwcml2LT5zaXplID0gMDsKPCAgICAgICB9CjwgICAg IGlmIChwcml2LT5zaXplICE9IDApCjwgICAgICAgewo8ICAgICAgICAgaW50 IGxvdyA9IDAsIG1pZCwgaGlnaCA9IHByaXYtPnNpemUgLyAzMjsKPCAgICAg ICAgIGNoYXIgKnB0cjsKPCAgICAgICAgIGRvCjwgICAgICAgICAgIHsKPCAg ICAgICAgICAgICBDT1JFX0FERFIgcGRyX3BjOwo8ICAgICAgICAgICAgIG1p ZCA9IChsb3cgKyBoaWdoKSAvIDI7CjwgICAgICAgICAgICAgcHRyID0gcHJp di0+Y29udGVudHMgKyBtaWQgKiAzMjsKPCAgICAgICAgICAgICBwZHJfcGMg PSBiZmRfZ2V0X3NpZ25lZF8zMiAoc2VjLT5vYmpmaWxlLT5vYmZkLCBwdHIp Owo8ICAgICAgICAgICAgIHBkcl9wYyArPSBBTk9GRlNFVCAoc2VjLT5vYmpm aWxlLT5zZWN0aW9uX29mZnNldHMsCjwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBTRUNUX09GRl9URVhUIChzZWMtPm9iamZpbGUpKTsKPCAg ICAgICAgICAgICBpZiAocGRyX3BjID09IHN0YXJ0YWRkcikKPCAgICAgICAg ICAgICAgIGJyZWFrOwo8ICAgICAgICAgICAgIGlmIChwZHJfcGMgPiBzdGFy dGFkZHIpCjwgICAgICAgICAgICAgICBoaWdoID0gbWlkOwo8ICAgICAgICAg ICAgIGVsc2UKPCAgICAgICAgICAgICAgIGxvdyA9IG1pZCArIDE7CjwgICAg ICAgICAgIH0KPCAgICAgICAgIHdoaWxlIChsb3cgIT0gaGlnaCk7CjwgCjwg ICAgICAgICBpZiAobG93ICE9IGhpZ2gpCjwgICAgICAgICAgIHsKPCAgICAg ICAgICAgICBnZGJfYXNzZXJ0IChiZmRfZ2V0XzMyIChzZWMtPm9iamZpbGUt Pm9iZmQsIHB0cikgPT0gc3RhcnRhZGRyKTsKPCAjZGVmaW5lIEVYVF9QRFIo X3BpKSAgICBiZmRfZ2V0XzMyKHNlYy0+b2JqZmlsZS0+b2JmZCwgcHRyKygo X3BpKTw8MikpCjwgICAgICAgICAgICAgZmNpX2V4dC0+cGRyW1BJX1NZTV0g PSBFWFRfUERSIChQSV9TWU0pOwo8ICAgICAgICAgICAgIGZjaV9leHQtPnBk cltQSV9SX01TS10gPSBFWFRfUERSIChQSV9SX01TSyk7CjwgICAgICAgICAg ICAgZmNpX2V4dC0+cGRyW1BJX1JfT0ZGXSA9IEVYVF9QRFIgKFBJX1JfT0ZG KTsKPCAgICAgICAgICAgICBmY2lfZXh0LT5wZHJbUElfUl9MRUZdID0gRVhU X1BEUiAoUElfUl9MRUYpOwo8ICAgICAgICAgICAgIGZjaV9leHQtPnBkcltQ SV9GX09GRl0gPSBFWFRfUERSIChQSV9GX09GRik7CjwgICAgICAgICAgICAg ZmNpX2V4dC0+cGRyW1BJX0ZfUkVHXSA9IEVYVF9QRFIgKFBJX0ZfUkVHKTsK PCAgICAgICAgICAgICBmY2lfZXh0LT5wZHJbUElfUkFSRUddID0gRVhUX1BE UiAoUElfUkFSRUcpOwo8ICN1bmRlZiBFWFRfUERSCjwgICAgICAgICAgIH0K PCAgICAgICB9CjwgICB9CjwgfQo8ICNlbmRpZgo8IAo8ICNpZiAwCjwgLyog T3BlbiB0aGVzZSBmdW5jdGlvbnMgaWYgYnVpbGQgd2l0aCBzaW11bGF0b3Iu ICAqLwotLS0KPiBzdGF0aWMgaW50IHRhcmdldF9tYWNoID0gYmZkX21hY2hf c2NvcmU3OwoxOTBhNjEKPiAjaWYgV0lUSF9TSU0KMTk1YTY3Cj4gI2VuZGlm CjIwM2E3Ngo+ICNpZiBXSVRIX1NJTQoyMDhhODIKPiAjZW5kaWYKMjE2YTkx Cj4gI2lmIFdJVEhfU0lNCjIyMWE5Nwo+ICNlbmRpZgoyMjlhMTA2Cj4gI2lm IFdJVEhfU0lNCjIzNGExMTIKPiAjZW5kaWYKMjQyYTEyMQo+ICNpZiBXSVRI X1NJTQoyNDdhMTI3Cj4gI2VuZGlmCjI1NWExMzYKPiAjaWYgV0lUSF9TSU0K MjYwYTE0Mgo+ICNlbmRpZgoyNjVkMTQ2CjwgI2VuZGlmCjI3MGMxNTEsMTUy CjwgICBnZGJfYXNzZXJ0IChyZWdudW0gPj0gMCAmJiByZWdudW0gPCBTQ09S RV9OVU1fUkVHUyk7Ci0tLQo+ICAgZ2RiX2Fzc2VydCAocmVnbnVtID49IDAg Cj4gICAgICAgICAgICAgICAmJiByZWdudW0gPCAoKHRhcmdldF9tYWNoID09 IGJmZF9tYWNoX3Njb3JlNykgPyBTQ09SRTdfTlVNX1JFR1MgOiBTQ09SRTNf TlVNX1JFR1MpKTsKMjc0YTE1NywxNjIKPiBzY29yZV91bndpbmRfc3AgKHN0 cnVjdCBnZGJhcmNoICpnZGJhcmNoLCBzdHJ1Y3QgZnJhbWVfaW5mbyAqbmV4 dF9mcmFtZSkKPiB7Cj4gICByZXR1cm4gZnJhbWVfdW53aW5kX3JlZ2lzdGVy X3Vuc2lnbmVkIChuZXh0X2ZyYW1lLCBTQ09SRV9TUF9SRUdOVU0pOwo+IH0K PiAKPiBzdGF0aWMgQ09SRV9BRERSCjI4MCwyODFjMTY4LDE2OQo8IHN0YXRp YyBDT1JFX0FERFIKPCBzY29yZV91bndpbmRfc3AgKHN0cnVjdCBnZGJhcmNo ICpnZGJhcmNoLCBzdHJ1Y3QgZnJhbWVfaW5mbyAqbmV4dF9mcmFtZSkKLS0t Cj4gc3RhdGljIGNvbnN0IGNoYXIgKgo+IHNjb3JlN19yZWdpc3Rlcl9uYW1l IChzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCwgaW50IHJlZ251bSkKMjgzYzE3 MSwxODUKPCAgIHJldHVybiBmcmFtZV91bndpbmRfcmVnaXN0ZXJfdW5zaWdu ZWQgKG5leHRfZnJhbWUsIFNDT1JFX1NQX1JFR05VTSk7Ci0tLQo+ICAgY29u c3QgY2hhciAqc2NvcmVfcmVnaXN0ZXJfbmFtZXNbXSA9IHsKPiAgICAgInIw IiwgICJyMSIsICAicjIiLCAgInIzIiwgICJyNCIsICAicjUiLCAgInI2Iiwg ICJyNyIsCj4gICAgICJyOCIsICAicjkiLCAgInIxMCIsICJyMTEiLCAicjEy IiwgInIxMyIsICJyMTQiLCAicjE1IiwKPiAgICAgInIxNiIsICJyMTciLCAi cjE4IiwgInIxOSIsICJyMjAiLCAicjIxIiwgInIyMiIsICJyMjMiLAo+ICAg ICAicjI0IiwgInIyNSIsICJyMjYiLCAicjI3IiwgInIyOCIsICJyMjkiLCAi cjMwIiwgInIzMSIsCj4gCj4gICAgICJQU1IiLCAgICAgIkNPTkQiLCAgIkVD UiIsICAgICAiRVhDUFZFQyIsICJDQ1IiLAo+ICAgICAiRVBDIiwgICAgICJF TUEiLCAgICJUTEJMT0NLIiwgIlRMQlBUIiwgICAiUEVBRERSIiwKPiAgICAg IlRMQlJQVCIsICAiUEVWTiIsICAiUEVDVFgiLCAgICJMSU1QRk4iLCAgIkxE TVBGTiIsIAo+ICAgICAiUFJFViIsICAgICJEUkVHIiwgICJQQyIsICAgICAg IkRTQVZFIiwgICAiQ09VTlRFUiIsCj4gICAgICJMRENSIiwgICAgIlNUQ1Ii LCAgIkNFSCIsICAgICAiQ0VMIiwKPiAgIH07Cj4gCj4gICBnZGJfYXNzZXJ0 IChyZWdudW0gPj0gMCAmJiByZWdudW0gPCBTQ09SRTdfTlVNX1JFR1MpOwo+ ICAgcmV0dXJuIHNjb3JlX3JlZ2lzdGVyX25hbWVzW3JlZ251bV07CjI4N2Mx ODkKPCBzY29yZV9yZWdpc3Rlcl9uYW1lIChzdHJ1Y3QgZ2RiYXJjaCAqZ2Ri YXJjaCwgaW50IHJlZ251bSkKLS0tCj4gc2NvcmUzX3JlZ2lzdGVyX25hbWUg KHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoLCBpbnQgcmVnbnVtKQoyOTUsMzAw YzE5NywyMDAKPCAgICAgIlBTUiIsICAgIkNPTkQiLCAgICJFQ1IiLCAgICAi RVhDUFZFQyIsCjwgICAgICJDQ1IiLCAgICJFUEMiLCAgICAiRU1BIiwgICAg IlRMQkxPQ0siLAo8ICAgICAiVExCUFQiLCAiUEVBRERSIiwgIlRMQlJQVCIs ICJQRVZOIiwKPCAgICAgIlBFQ1RYIiwgIkxJTVBGTiIsICJMRE1QRk4iLCAi UFJFViIsCjwgICAgICJEUkVHIiwgICJQQyIsICAgICAiRFNBVkUiLCAgIkNP VU5URVIiLAo8ICAgICAiTERDUiIsICAiU1RDUiIsICAgIkNFSCIsICAgICJD RUwiLAotLS0KPiAgICAgIlBTUiIsICAgICAgIkNPTkQiLCAgICJFQ1IiLCAg ICJFWENQVkVDIiwgICJDQ1IiLAo+ICAgICAiRVBDIiwgICAgICAiRU1BIiwg ICAgIlBSRVYiLCAgIkRSRUciLCAgICAgIkRTQVZFIiwKPiAgICAgIkNPVU5U RVIiLCAgIkxEQ1IiLCAgICJTVENSIiwgICJDRUgiLCAgICAgICJDRUwiLAo+ ICAgICAiIiwgICAgICAgICAiIiwgICAgICAgIlBDIiwKMzAzYzIwMwo8ICAg Z2RiX2Fzc2VydCAocmVnbnVtID49IDAgJiYgcmVnbnVtIDwgU0NPUkVfTlVN X1JFR1MpOwotLS0KPiAgIGdkYl9hc3NlcnQgKHJlZ251bSA+PSAwICYmIHJl Z251bSA8IFNDT1JFM19OVU1fUkVHUyk7CjMwNmEyMDcKPiAjaWYgV0lUSF9T SU0KMzEwYzIxMSwyMTIKPCAgIGdkYl9hc3NlcnQgKHJlZ251bSA+PSAwICYm IHJlZ251bSA8IFNDT1JFX05VTV9SRUdTKTsKLS0tCj4gICBnZGJfYXNzZXJ0 IChyZWdudW0gPj0gMCAKPiAgICAgICAgICAgICAgICYmIHJlZ251bSA8ICgo dGFyZ2V0X21hY2ggPT0gYmZkX21hY2hfc2NvcmU3KSA/IFNDT1JFN19OVU1f UkVHUyA6IFNDT1JFM19OVU1fUkVHUykpOwozMTJhMjE1Cj4gI2VuZGlmCjMy MmEyMjYsMzg0Cj4gc3RhdGljIGluc3RfdCAqCj4gc2NvcmU3X2ZldGNoX2lu c3QgKHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoLCBDT1JFX0FERFIgYWRkciwg Y2hhciAqbWVtYmxvY2spCj4gewo+ICAgc3RhdGljIGluc3RfdCBpbnN0ID0g eyAwLCAwLCAwIH07Cj4gICBjaGFyIGJ1ZltTQ09SRV9JTlNUTEVOXSA9IHsg MCB9Owo+ICAgaW50IGJpZzsKPiAgIGludCByZXQ7Cj4gCj4gICBpZiAodGFy Z2V0X2hhc19leGVjdXRpb24gJiYgbWVtYmxvY2sgIT0gTlVMTCkKPiAgICAg ewo+ICAgICAgIC8qIEZldGNoIGluc3RydWN0aW9uIGZyb20gbG9jYWwgTUVN QkxPQ0suICAqLwo+ICAgICAgIG1lbWNweSAoYnVmLCBtZW1ibG9jaywgU0NP UkVfSU5TVExFTik7Cj4gICAgIH0KPiAgIGVsc2UKPiAgICAgewo+ICAgICAg IC8qIEZldGNoIGluc3RydWN0aW9uIGZyb20gdGFyZ2V0LiAgKi8KPiAgICAg ICByZXQgPSB0YXJnZXRfcmVhZF9tZW1vcnkgKGFkZHIgJiB+MHgzLCBidWYs IFNDT1JFX0lOU1RMRU4pOwo+ICAgICAgIGlmIChyZXQpCj4gICAgICAgICB7 Cj4gICAgICAgICAgIGVycm9yICgiRXJyb3I6IHRhcmdldF9yZWFkX21lbW9y eSBpbiBmaWxlOiVzLCBsaW5lOiVkISIsCj4gICAgICAgICAgICAgICAgICAg X19GSUxFX18sIF9fTElORV9fKTsKPiAgICAgICAgICAgcmV0dXJuIDA7Cj4g ICAgICAgICB9Cj4gICAgIH0KPiAKPiAgIGluc3QucmF3ID0gZXh0cmFjdF91 bnNpZ25lZF9pbnRlZ2VyIChidWYsIFNDT1JFX0lOU1RMRU4pOwo+ICAgaW5z dC5sZW4gPSAoaW5zdC5yYXcgJiAweDgwMDA4MDAwKSA/IDQgOiAyOwo+ICAg aW5zdC52ID0gKChpbnN0LnJhdyA+PiAxNiAmIDB4N0ZGRikgPDwgMTUpIHwg KGluc3QucmF3ICYgMHg3RkZGKTsgCj4gICBiaWcgPSAoZ2RiYXJjaF9ieXRl X29yZGVyKGdkYmFyY2gpID09IEJGRF9FTkRJQU5fQklHKTsKPiAgIGlmIChp bnN0LmxlbiA9PSAyKQo+ICAgICB7Cj4gICAgICAgaWYgKGJpZyBeICgoYWRk ciAmIDB4MikgPT0gMikpCj4gICAgICAgICBpbnN0LnYgPSBHX0ZMRCAoaW5z dC52LCAyOSwgMTUpOwo+ICAgICAgIGVsc2UKPiAgICAgICAgIGluc3QudiA9 IEdfRkxEIChpbnN0LnYsIDE0LCAwKTsKPiAgICAgfQo+ICAgcmV0dXJuICZp bnN0Owo+IH0KPiAKPiBzdGF0aWMgaW5zdF90ICoKPiBzY29yZTNfYWRqdXN0 X3BjX2FuZF9mZXRjaF9pbnN0IChDT1JFX0FERFIgKnBjcHRyLCBpbnQgKmxl bnB0cikKPiB7Cj4gICBzdGF0aWMgaW5zdF90IGluc3QgPSB7IDAsIDAsIDAg fTsKPiAKPiAgIHN0cnVjdCBicmVha3BsYWNlCj4gICB7Cj4gICAgIGludCBi cmVha19vZmZzZXQ7Cj4gICAgIGludCBpbnN0X2xlbjsKPiAgIH07Cj4gICAv KiAgICAgcmF3ICAgICAgICB0YWJsZSAxIChjb2x1bW4gMiwgMywgNCkKPiAg ICAgKiAgMCAgMSAgMCAgKiAgICMgMgo+ICAgICAqICAwICAxICAxICAwICAg IyAzCj4gICAgIDAgIDEgIDEgIDAgICogICAjIDYKPiAgICAgICAgICAgICAg ICAgICAgIHRhYmxlIDIgKGNvbHVtbiAxLCAyLCAzKQo+ICAgICAqICAwICAw ICAqICAqICAgIyAwLCA0Cj4gICAgIDAgIDEgIDAgICogICogICAjIDIKPiAg ICAgMSAgMSAgMCAgKiAgKiAgICMgNgo+ICAgICovCj4gCj4gICBzdGF0aWMg Y29uc3Qgc3RydWN0IGJyZWFrcGxhY2UgYmtfdGFibGVbMTZdID0KPiAgICAg ewo+ICAgICAgIC8qIHRhYmxlIDEgKi8KPiAgICAgICB7MCwgMH0sCj4gICAg ICAgezAsIDB9LAo+ICAgICAgIHswLCA0fSwKPiAgICAgICB7MCwgNn0sCj4g ICAgICAgezAsIDB9LAo+ICAgICAgIHswLCAwfSwKPiAgICAgICB7LTIsIDZ9 LAo+ICAgICAgIHswLCAwfSwKPiAgICAgICAvKiB0YWJsZSAyICovCj4gICAg ICAgezAsIDJ9LAo+ICAgICAgIHswLCAwfSwKPiAgICAgICB7LTIsIDR9LAo+ ICAgICAgIHswLCAwfSwKPiAgICAgICB7MCwgMn0sCj4gICAgICAgezAsIDB9 LAo+ICAgICAgIHstNCwgNn0sCj4gICAgICAgezAsIDB9Cj4gICAgIH07Cj4g Cj4gI2RlZmluZSBFWFRSQUNUX0xFTiAyCj4gICBDT1JFX0FERFIgYWRqdXN0 X3BjID0gKnBjcHRyICYgfjB4MTsKPiAgIGludCBpbnN0X2xlbjsKPiAgIGdk Yl9ieXRlIGJ1Zls1XVtFWFRSQUNUX0xFTl0gPSB7eydcMCcsICdcMCd9LCB7 J1wwJywgJ1wwJ30sIHsnXDAnLCAnXDAnfSwgeydcMCcsICdcMCd9LCB7J1ww JywgJ1wwJ319Owo+ICAgaW50IHJldDsKPiAgIHVuc2lnbmVkIGludCByYXc7 Cj4gICB1bnNpZ25lZCBpbnQgY2JpdHMgPSAwOwo+ICAgaW50IGJrX2luZGV4 Owo+ICAgaW50IGksIGNvdW50Owo+IAo+ICAgaW5zdC52ID0gMDsKPiAgIGlu c3QucmF3ID0gMDsKPiAgIGluc3QubGVuID0gMDsKPiAKPiAgIGFkanVzdF9w YyAtPSA0Owo+ICAgZm9yIChpID0gMDsgaSA8IDU7IGkrKykKPiAgICAgewo+ ICAgICAgIHJldCA9IHRhcmdldF9yZWFkX21lbW9yeSAoYWRqdXN0X3BjICsg MiAqIGksIGJ1ZltpXSwgRVhUUkFDVF9MRU4pOwo+ICAgICAgIGlmIChyZXQg IT0gMCkKPiAgICAgICAgIHsKPiAgICAgICAgICAgYnVmW2ldWzBdID0gJ1ww JzsKPiAgICAgICAgICAgYnVmW2ldWzFdID0gJ1wwJzsKPiAJICBpZiAoaSA9 PSAyKQo+ICAgICAgICAgICAgIGVycm9yICgiRXJyb3I6IHRhcmdldF9yZWFk X21lbW9yeSBpbiBmaWxlOiVzLCBsaW5lOiVkISIsIF9fRklMRV9fLCBfX0xJ TkVfXyk7Cj4gICAgICAgICB9Cj4gCj4gICAgICAgcmF3ID0gZXh0cmFjdF91 bnNpZ25lZF9pbnRlZ2VyIChidWZbaV0sIEVYVFJBQ1RfTEVOKTsKPiAgICAg ICBjYml0cyA9IChjYml0cyA8PCAxKSB8IChyYXcgPj4gMTUpOyAKPiAgICAg fQo+ICAgYWRqdXN0X3BjICs9IDQ7Cj4gCj4gICBpZiAoY2JpdHMgJiAweDQp Cj4gICAgIHsKPiAgICAgICAvKiB0YWJsZSAxICovCj4gICAgICAgY2JpdHMg PSAoY2JpdHMgPj4gMSkgJiAweDc7Cj4gICAgICAgYmtfaW5kZXggPSBjYml0 czsKPiAgICAgfQo+ICAgZWxzZQo+ICAgICB7Cj4gICAgICAgLyogdGFibGUg MiAqLwo+ICAgICAgIGNiaXRzID0gKGNiaXRzID4+IDIpICYgMHg3Owo+ICAg ICAgIGJrX2luZGV4ID0gY2JpdHMgKyA4OyAKPiAgICAgfQo+IAo+ICAgZ2Ri X2Fzc2VydCAoISgoYmtfdGFibGVbYmtfaW5kZXhdLmJyZWFrX29mZnNldCA9 PSAwKSAmJiAoYmtfdGFibGVbYmtfaW5kZXhdLmluc3RfbGVuID09IDApKSk7 Cj4gCj4gICBpbnN0LmxlbiA9IGJrX3RhYmxlW2JrX2luZGV4XS5pbnN0X2xl bjsKPiAKPiAgIGkgPSAoYmtfdGFibGVbYmtfaW5kZXhdLmJyZWFrX29mZnNl dCArIDQpIC8gMjsKPiAgIGNvdW50ID0gaW5zdC5sZW4gLyAyOwo+ICAgZm9y ICg7IGNvdW50ID4gMDsgaSsrLCBjb3VudC0tKQo+ICAgICB7Cj4gICAgICAg aW5zdC5yYXcgPSAoaW5zdC5yYXcgPDwgMTYpIHwgZXh0cmFjdF91bnNpZ25l ZF9pbnRlZ2VyIChidWZbaV0sIEVYVFJBQ1RfTEVOKTsKPiAgICAgfQo+IAo+ ICAgc3dpdGNoIChpbnN0LmxlbikKPiAgICAgewo+ICAgICBjYXNlIDI6Cj4g ICAgICAgaW5zdC52ID0gaW5zdC5yYXcgJiAweDdGRkY7Cj4gICAgICAgYnJl YWs7Cj4gICAgIGNhc2UgNDoKPiAgICAgICBpbnN0LnYgPSAoKGluc3QucmF3 ID4+IDE2ICYgMHg3RkZGKSA8PCAxNSkgfCAoaW5zdC5yYXcgJiAweDdGRkYp Owo+ICAgICAgIGJyZWFrOwo+ICAgICBjYXNlIDY6Cj4gICAgICAgaW5zdC52 ID0gKChpbnN0LnJhdyA+PiAzMiAmIDB4N0ZGRikgPDwgMzApIHwgKChpbnN0 LnJhdyA+PiAxNiAmIDB4N0ZGRikgPDwgMTUpIHwgKGluc3QucmF3ICYgMHg3 RkZGKTsKPiAgICAgICBicmVhazsKPiAgICAgfQo+IAo+ICAgaWYgKHBjcHRy KQo+ICAgICAqcGNwdHIgPSBhZGp1c3RfcGMgKyBia190YWJsZVtia19pbmRl eF0uYnJlYWtfb2Zmc2V0Owo+ICAgaWYgKGxlbnB0cikKPiAgICAgKmxlbnB0 ciA9IGJrX3RhYmxlW2JrX2luZGV4XS5pbnN0X2xlbjsKPiAKPiAjdW5kZWYg RVhUUkFDVF9MRU4KPiAKPiAgIHJldHVybiAmaW5zdDsKPiB9Cj4gCjMyNCwz MjVjMzg2Cjwgc2NvcmVfYnJlYWtwb2ludF9mcm9tX3BjIChzdHJ1Y3QgZ2Ri YXJjaCAqZ2RiYXJjaCwgQ09SRV9BRERSICpwY3B0ciwKPCAJCQkgIGludCAq bGVucHRyKQotLS0KPiBzY29yZTdfYnJlYWtwb2ludF9mcm9tX3BjIChzdHJ1 Y3QgZ2RiYXJjaCAqZ2RiYXJjaCwgQ09SRV9BRERSICpwY3B0ciwgaW50ICps ZW5wdHIpCjM3N2E0MzksNDgwCj4gc3RhdGljIGNvbnN0IGdkYl9ieXRlICoK PiBzY29yZTNfYnJlYWtwb2ludF9mcm9tX3BjIChzdHJ1Y3QgZ2RiYXJjaCAq Z2RiYXJjaCwgQ09SRV9BRERSICpwY3B0ciwgaW50ICpsZW5wdHIpCj4gewo+ ICAgQ09SRV9BRERSIGFkanVzdF9wYyA9ICpwY3B0cjsgCj4gICBpbnQgbGVu Owo+ICAgc3RhdGljIGdkYl9ieXRlIHNjb3JlX2JyZWFrX2luc25zWzZdWzZd ID0gewo+ICAgICAvKiBUaGUgZm9sbG93aW5nIHRocmVlIGluc3RydWN0aW9u cyBhcmUgYmlnIGVuZGlhbi4gICovCj4gICAgIHsgMHgwMCwgMHgyMCB9LAo+ ICAgICB7IDB4ODAsIDB4MDAsIDB4MDAsIDB4MDYgfSwKPiAgICAgeyAweDgw LCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDAwIH0sCj4gICAgIC8qIFRo ZSBmb2xsb3dpbmcgdGhyZWUgaW5zdHJ1Y3Rpb25zIGFyZSBsaXR0bGUgZW5k aWFuLiAgKi8KPiAgICAgeyAweDIwLCAweDAwIH0sCj4gICAgIHsgMHgwMCwg MHg4MCwgMHgwNiwgMHgwMCB9LAo+ICAgICB7IDB4MDAsIDB4ODAsIDB4MDAs IDB4ODAsIDB4MDAsIDB4MDAgfX07Cj4gCj4gICBnZGJfYnl0ZSAqcCA9IE5V TEw7Cj4gICBpbnQgaW5kZXggPSAwOwo+IAo+ICAgc2NvcmUzX2FkanVzdF9w Y19hbmRfZmV0Y2hfaW5zdCAoJmFkanVzdF9wYywgJmxlbik7Cj4gCj4gICBp bmRleCA9ICgoZ2RiYXJjaF9ieXRlX29yZGVyKGdkYmFyY2gpID09IEJGRF9F TkRJQU5fQklHKSA/IDAgOiAzKSArIChsZW4gLyAyIC0gMSk7Cj4gICBwID0g c2NvcmVfYnJlYWtfaW5zbnNbaW5kZXhdOwo+IAo+ICAgKnBjcHRyID0gYWRq dXN0X3BjOwo+ICAgKmxlbnB0ciA9IGxlbjsKPiAKPiAgIHJldHVybiBwOwo+ IH0KPiAKPiBzdGF0aWMgQ09SRV9BRERSCj4gc2NvcmVfYWRqdXN0X2JyZWFr cG9pbnRfYWRkcmVzcyAoc3RydWN0IGdkYmFyY2ggKmdkYmFyY2gsIENPUkVf QUREUiBicGFkZHIpCj4gewo+ICAgQ09SRV9BRERSIGFkanVzdF9wYyA9IGJw YWRkcjsgCj4gCj4gICBpZiAodGFyZ2V0X21hY2ggPT0gYmZkX21hY2hfc2Nv cmUzKQo+ICAgICBzY29yZTNfYWRqdXN0X3BjX2FuZF9mZXRjaF9pbnN0ICgm YWRqdXN0X3BjLCBOVUxMKTsKPiAgIGVsc2UKPiAgICAgYWRqdXN0X3BjID0g YWxpZ25fZG93biAoYWRqdXN0X3BjLCAyKTsKPiAgIAo+ICAgcmV0dXJuIGFk anVzdF9wYzsKPiB9Cj4gCjM5MGM0OTMsNDk0CjwgICBnZGJfYXNzZXJ0IChy ZWdudW0gPj0gMCAmJiByZWdudW0gPCBTQ09SRV9OVU1fUkVHUyk7Ci0tLQo+ ICAgZ2RiX2Fzc2VydCAocmVnbnVtID49IDAgCj4gICAgICAgICAgICAgICAm JiByZWdudW0gPCAoKHRhcmdldF9tYWNoID09IGJmZF9tYWNoX3Njb3JlNykg PyBTQ09SRTdfTlVNX1JFR1MgOiBTQ09SRTNfTlVNX1JFR1MpKTsKNDE4YzUy Mgo8IAkJICAgIHN0cnVjdCB0eXBlICp0eXBlLCBzdHJ1Y3QgcmVnY2FjaGUg KnJlZ2NhY2hlLAotLS0KPiAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0 eXBlICp0eXBlLCBzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLAo0MzYsNDM3 YzU0MAo8ICAgICAgICAgICBzY29yZV94ZmVyX3JlZ2lzdGVyIChyZWdjYWNo ZSwgcmVnbnVtLCB4ZmVyLAo8IAkJCSAgICAgICBnZGJhcmNoX2J5dGVfb3Jk ZXIgKGdkYmFyY2gpLAotLS0KPiAgICAgICAgICAgc2NvcmVfeGZlcl9yZWdp c3RlciAocmVnY2FjaGUsIHJlZ251bSwgeGZlciwgZ2RiYXJjaF9ieXRlX29y ZGVyKGdkYmFyY2gpLAo1NDZjNjQ5CjwgICAgICAgaWYgKGdkYmFyY2hfYnl0 ZV9vcmRlciAoZ2RiYXJjaCkgPT0gQkZEX0VORElBTl9CSUcKLS0tCj4gICAg ICAgaWYgKGdkYmFyY2hfYnl0ZV9vcmRlcihnZGJhcmNoKSA9PSBCRkRfRU5E SUFOX0JJRwo1NjBjNjYzCjwgICAgICAgICAgIGlmIChnZGJhcmNoX2J5dGVf b3JkZXIgKGdkYmFyY2gpID09IEJGRF9FTkRJQU5fQklHCi0tLQo+ICAgICAg ICAgICBpZiAoZ2RiYXJjaF9ieXRlX29yZGVyKGdkYmFyY2gpID09IEJGRF9F TkRJQU5fQklHCjU4OSw2ODBkNjkxCjwgc3RhdGljIGNoYXIgKgo8IHNjb3Jl X21hbGxvY19hbmRfZ2V0X21lbWJsb2NrIChDT1JFX0FERFIgYWRkciwgQ09S RV9BRERSIHNpemUpCjwgewo8ICAgaW50IHJldDsKPCAgIGNoYXIgKm1lbWJs b2NrID0gTlVMTDsKPCAKPCAgIGlmIChzaXplIDwgMCkKPCAgICAgewo8ICAg ICAgIGVycm9yICgiRXJyb3I6IG1hbGxvYyBzaXplIDwgMCBpbiBmaWxlOiVz LCBsaW5lOiVkISIsCjwgICAgICAgICAgICAgIF9fRklMRV9fLCBfX0xJTkVf Xyk7CjwgICAgICAgcmV0dXJuIE5VTEw7CjwgICAgIH0KPCAgIGVsc2UgaWYg KHNpemUgPT0gMCkKPCAgICAgcmV0dXJuIE5VTEw7CjwgCjwgICBtZW1ibG9j ayA9IChjaGFyICopIHhtYWxsb2MgKHNpemUpOwo8ICAgbWVtc2V0IChtZW1i bG9jaywgMCwgc2l6ZSk7CjwgICByZXQgPSB0YXJnZXRfcmVhZF9tZW1vcnkg KGFkZHIgJiB+MHgzLCBtZW1ibG9jaywgc2l6ZSk7CjwgICBpZiAocmV0KQo8 ICAgICB7CjwgICAgICAgZXJyb3IgKCJFcnJvcjogdGFyZ2V0X3JlYWRfbWVt b3J5IGluIGZpbGU6JXMsIGxpbmU6JWQhIiwKPCAgICAgICAgICAgICAgX19G SUxFX18sIF9fTElORV9fKTsKPCAgICAgICByZXR1cm4gTlVMTDsKPCAgICAg fQo8ICAgcmV0dXJuIG1lbWJsb2NrOwo8IH0KPCAKPCBzdGF0aWMgdm9pZAo8 IHNjb3JlX2ZyZWVfbWVtYmxvY2sgKGNoYXIgKm1lbWJsb2NrKQo8IHsKPCAg IHhmcmVlIChtZW1ibG9jayk7CjwgfQo8IAo8IHN0YXRpYyB2b2lkCjwgc2Nv cmVfYWRqdXN0X21lbWJsb2NrX3B0ciAoY2hhciAqKm1lbWJsb2NrLCBDT1JF X0FERFIgcHJldl9wYywKPCAgICAgICAgICAgICAgICAgICAgICAgICAgICBD T1JFX0FERFIgY3VyX3BjKQo8IHsKPCAgIGlmIChwcmV2X3BjID09IC0xKQo8 ICAgICB7CjwgICAgICAgLyogRmlyc3QgdGltZSBjYWxsIHRoaXMgZnVuY3Rp b24sIGRvIG5vdGhpbmcuICAqLwo8ICAgICB9CjwgICBlbHNlIGlmIChjdXJf cGMgLSBwcmV2X3BjID09IDIgJiYgKGN1cl9wYyAmIDB4MykgPT0gMCkKPCAg ICAgewo8ICAgICAgIC8qIEZpcnN0IDE2LWJpdCBpbnN0cnVjdGlvbiwgdGhl biAzMi1iaXQgaW5zdHJ1Y3Rpb24uICAqLwo8ICAgICAgICptZW1ibG9jayAr PSBTQ09SRV9JTlNUTEVOOwo8ICAgICB9CjwgICBlbHNlIGlmIChjdXJfcGMg LSBwcmV2X3BjID09IDQpCjwgICAgIHsKPCAgICAgICAvKiBJcyAzMi1iaXQg aW5zdHJ1Y3Rpb24sIGluY3JlYXNlIE1FTUJMT0NLIGJ5IDQuICAqLwo8ICAg ICAgICptZW1ibG9jayArPSBTQ09SRV9JTlNUTEVOOwo8ICAgICB9CjwgfQo8 IAo8IHN0YXRpYyBpbnN0X3QgKgo8IHNjb3JlX2ZldGNoX2luc3QgKHN0cnVj dCBnZGJhcmNoICpnZGJhcmNoLCBDT1JFX0FERFIgYWRkciwgY2hhciAqbWVt YmxvY2spCjwgewo8ICAgc3RhdGljIGluc3RfdCBpbnN0ID0geyAwLCAwIH07 CjwgICBjaGFyIGJ1ZltTQ09SRV9JTlNUTEVOXSA9IHsgMCB9Owo8ICAgaW50 IGJpZzsKPCAgIGludCByZXQ7CjwgCjwgICBpZiAodGFyZ2V0X2hhc19leGVj dXRpb24gJiYgbWVtYmxvY2sgIT0gTlVMTCkKPCAgICAgewo8ICAgICAgIC8q IEZldGNoIGluc3RydWN0aW9uIGZyb20gbG9jYWwgTUVNQkxPQ0suICAqLwo8 ICAgICAgIG1lbWNweSAoYnVmLCBtZW1ibG9jaywgU0NPUkVfSU5TVExFTik7 CjwgICAgIH0KPCAgIGVsc2UKPCAgICAgewo8ICAgICAgIC8qIEZldGNoIGlu c3RydWN0aW9uIGZyb20gdGFyZ2V0LiAgKi8KPCAgICAgICByZXQgPSB0YXJn ZXRfcmVhZF9tZW1vcnkgKGFkZHIgJiB+MHgzLCBidWYsIFNDT1JFX0lOU1RM RU4pOwo8ICAgICAgIGlmIChyZXQpCjwgICAgICAgICB7CjwgICAgICAgICAg IGVycm9yICgiRXJyb3I6IHRhcmdldF9yZWFkX21lbW9yeSBpbiBmaWxlOiVz LCBsaW5lOiVkISIsCjwgICAgICAgICAgICAgICAgICAgX19GSUxFX18sIF9f TElORV9fKTsKPCAgICAgICAgICAgcmV0dXJuIDA7CjwgICAgICAgICB9Cjwg ICAgIH0KPCAKPCAgIGluc3QucmF3ID0gZXh0cmFjdF91bnNpZ25lZF9pbnRl Z2VyIChidWYsIFNDT1JFX0lOU1RMRU4pOwo8ICAgaW5zdC5pczE1ID0gIShp bnN0LnJhdyAmIDB4ODAwMDgwMDApOwo8ICAgaW5zdC52ID0gUk1fUEJJVFMg KGluc3QucmF3KTsKPCAgIGJpZyA9IChnZGJhcmNoX2J5dGVfb3JkZXIgKGdk YmFyY2gpID09IEJGRF9FTkRJQU5fQklHKTsKPCAgIGlmIChpbnN0LmlzMTUp CjwgICAgIHsKPCAgICAgICBpZiAoYmlnIF4gKChhZGRyICYgMHgyKSA9PSAy KSkKPCAgICAgICAgIGluc3QudiA9IEdfRkxEIChpbnN0LnYsIDI5LCAxNSk7 CjwgICAgICAgZWxzZQo8ICAgICAgICAgaW5zdC52ID0gR19GTEQgKGluc3Qu diwgMTQsIDApOwo8ICAgICB9CjwgICByZXR1cm4gJmluc3Q7CjwgfQo8IAo2 ODJjNjkzCjwgc2NvcmVfc2tpcF9wcm9sb2d1ZSAoc3RydWN0IGdkYmFyY2gg KmdkYmFyY2gsIENPUkVfQUREUiBwYykKLS0tCj4gc2NvcmU3X3NraXBfcHJv bG9ndWUgKHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoLCBDT1JFX0FERFIgcGMp CjY4OGM2OTkKPCAgICAgICBpbnN0X3QgKmluc3QgPSBzY29yZV9mZXRjaF9p bnN0IChnZGJhcmNoLCBjcGMsIE5VTEwpOwotLS0KPiAgICAgICBpbnN0X3Qg Kmluc3QgPSBzY29yZTdfZmV0Y2hfaW5zdCAoZ2RiYXJjaCwgY3BjLCBOVUxM KTsKNjkxYzcwMgo8ICAgICAgIGlmICghaW5zdC0+aXMxNSAmJiAhc3RhY2tf c3ViCi0tLQo+ICAgICAgIGlmICgoaW5zdC0+bGVuID09IDQpICYmICFzdGFj a19zdWIKNjk2YzcwNyw3MDgKPCAgICAgICAgICAgcGMgPSBzdGFja19zdWIg PSBjcGMgKyBTQ09SRV9JTlNUTEVOOwotLS0KPiAgICAgICAgICAgc3RhY2tf c3ViID0gY3BjICsgU0NPUkVfSU5TVExFTjsKPiAgICAgICAgICAgcGMgPSBj cGMgKyBTQ09SRV9JTlNUTEVOOwo2OTgsNjk5YzcxMCw3MTUKPCAgICAgICBl bHNlIGlmICghaW5zdC0+aXMxNQo8ICAgICAgICAgICAgICAgICYmIGluc3Qt PnYgPT0gUk1fUEJJVFMgKDB4ODA0MGJjNTYpKQotLS0KPiAgICAgICBlbHNl IGlmICgoaW5zdC0+bGVuID09IDQpCj4gICAgICAgICAgICAgICAgJiYgKEdf RkxEIChpbnN0LT52LCAyOSwgMjUpID09IDB4MCkKPiAgICAgICAgICAgICAg ICAmJiAoR19GTEQgKGluc3QtPnYsIDI0LCAyMCkgPT0gMHgyKQo+ICAgICAg ICAgICAgICAgICYmIChHX0ZMRCAoaW5zdC0+diwgMTksIDE1KSA9PSAweDAp Cj4gICAgICAgICAgICAgICAgJiYgKEdfRkxEIChpbnN0LT52LCAxNCwgMTAp ID09IDB4RikKPiAgICAgICAgICAgICAgICAmJiAoR19GTEQgKGluc3QtPnYs IDksIDApID09IDB4NTYpKQo3MDUsNzA2YzcyMSw3MjUKPCAgICAgICBlbHNl IGlmIChpbnN0LT5pczE1CjwgICAgICAgICAgICAgICAgJiYgaW5zdC0+diA9 PSBSTV9QQklUUyAoMHgwMjAzKSkKLS0tCj4gICAgICAgZWxzZSBpZiAoKGlu c3QtPmxlbiA9PSAyKQo+ICAgICAgICAgICAgICAgICYmIChHX0ZMRCAoaW5z dC0+diwgMTQsIDEyKSA9PSAweDApCj4gICAgICAgICAgICAgICAgJiYgKEdf RkxEIChpbnN0LT52LCAxMSwgOCkgPT0gMHgyKQo+ICAgICAgICAgICAgICAg ICYmIChHX0ZMRCAoaW5zdC0+diwgNywgNCkgPT0gMHgwKQo+ICAgICAgICAg ICAgICAgICYmIChHX0ZMRCAoaW5zdC0+diwgMywgMCkgPT0gMHgzKSkKNzEy YzczMQo8ICAgICAgIGVsc2UgaWYgKGluc3QtPmlzMTUKLS0tCj4gICAgICAg ZWxzZSBpZiAoKGluc3QtPmxlbiA9PSAyKQo3MThjNzM3CjwgICAgICAgZWxz ZSBpZiAoIWluc3QtPmlzMTUKLS0tCj4gICAgICAgZWxzZSBpZiAoKGluc3Qt PmxlbiA9PSA0KQo3MjVjNzQ0LDc5OAo8ICAgICAgIGNwYyArPSBpbnN0LT5p czE1ID8gU0NPUkUxNl9JTlNUTEVOIDogU0NPUkVfSU5TVExFTjsKLS0tCj4g ICAgICAgY3BjICs9IChpbnN0LT5sZW4gPT0gMikgPyBTQ09SRTE2X0lOU1RM RU4gOiBTQ09SRV9JTlNUTEVOOwo+ICAgICB9Cj4gICByZXR1cm4gcGM7Cj4g fQo+IAo+IHN0YXRpYyBDT1JFX0FERFIKPiBzY29yZTNfc2tpcF9wcm9sb2d1 ZSAoc3RydWN0IGdkYmFyY2ggKmdkYmFyY2gsIENPUkVfQUREUiBwYykKPiB7 Cj4gICBDT1JFX0FERFIgY3BjID0gcGM7Cj4gICBpbnQgaXNjYW4gPSAzMiwg c3RhY2tfc3ViID0gMDsKPiAgIHdoaWxlIChpc2Nhbi0tID4gMCkKPiAgICAg ewo+ICAgICAgIGluc3RfdCAqaW5zdCA9IHNjb3JlM19hZGp1c3RfcGNfYW5k X2ZldGNoX2luc3QgKCZjcGMsIE5VTEwpOwo+ICAgICAgIGlmICghaW5zdCkK PiAgICAgICAgIGJyZWFrOwo+ICAgICAgIGlmIChpbnN0LT5sZW4gPT0gNCAm JiAhc3RhY2tfc3ViCj4gICAgICAgICAgICYmIChHX0ZMRCAoaW5zdC0+diwg MjksIDI1KSA9PSAweDEpCj4gICAgICAgICAgICYmIChHX0ZMRCAoaW5zdC0+ diwgMTksIDE3KSA9PSAweDApCj4gCSAgJiYgKEdfRkxEIChpbnN0LT52LCAy NCwgMjApID09IDB4MCkpCj4gICAgICAgICB7Cj4gICAgICAgICAgIC8qIGFk ZGkgcjAsIG9mZnNldCAqLwo+ICAgICAgICAgICBzdGFja19zdWIgPSBjcGMg KyBpbnN0LT5sZW47Cj4gICAgICAgICAgIHBjID0gY3BjICsgaW5zdC0+bGVu Owo+ICAgICAgICAgfQo+ICAgICAgIGVsc2UgaWYgKGluc3QtPmxlbiA9PSA0 Cj4gICAgICAgICAgICAgICAgJiYgKEdfRkxEIChpbnN0LT52LCAyOSwgMjUp ID09IDB4MCkKPiAJICAgICAgICYmIChHX0ZMRCAoaW5zdC0+diwgMjQsIDIw KSA9PSAweDIpCj4gCSAgICAgICAmJiAoR19GTEQgKGluc3QtPnYsIDE5LCAx NSkgPT0gMHgwKQo+IAkgICAgICAgJiYgKEdfRkxEIChpbnN0LT52LCAxNCwg MTApID09IDB4RikKPiAJICAgICAgICYmIChHX0ZMRCAoaW5zdC0+diwgOSwg MCkgPT0gMHg1NikpCj4gICAgICAgICB7Cj4gICAgICAgICAgIC8qIG12IHIy LCByMCAgKi8KPiAgICAgICAgICAgcGMgPSBjcGMgKyBpbnN0LT5sZW47Cj4g ICAgICAgICAgIGJyZWFrOwo+ICAgICAgICAgfQo+ICAgICAgIGVsc2UgaWYg KChpbnN0LT5sZW4gPT0gMikKPiAgICAgICAgICAgICAgICAmJiAoR19GTEQg KGluc3QtPnYsIDE0LCAxMCkgPT0gMHgxMCkKPiAgICAgICAgICAgICAgICAm JiAoR19GTEQgKGluc3QtPnYsIDksIDUpID09IDB4MikKPiAJICAgICAgICYm IChHX0ZMRCAoaW5zdC0+diwgNCwgMCkgPT0gMHgwKSkKPiAgICAgICAgIHsK PiAgICAgICAgICAgLyogbXYhIHIyLCByMCAqLwo+ICAgICAgICAgICBwYyA9 IGNwYyArIGluc3QtPmxlbjsKPiAgICAgICAgICAgYnJlYWs7Cj4gICAgICAg ICB9Cj4gICAgICAgZWxzZSBpZiAoaW5zdC0+bGVuID09IDIKPiAgICAgICAg ICAgICAgICAmJiAoKEdfRkxEIChpbnN0LT52LCAxNCwgMTIpID09IDMpIC8q IGIxNSBmb3JtICovCj4gICAgICAgICAgICAgICAgICAgIHx8IChHX0ZMRCAo aW5zdC0+diwgMTQsIDEyKSA9PSAweDAKPiAgICAgICAgICAgICAgICAgICAg ICAgICYmIEdfRkxEIChpbnN0LT52LCAxMSwgNSkgPT0gMHg0KSkpIC8qIGJy ISAqLwo+ICAgICAgICAgYnJlYWs7Cj4gICAgICAgZWxzZSBpZiAoaW5zdC0+ bGVuID09IDQKPiAgICAgICAgICAgICAgICAmJiAoKEdfRkxEIChpbnN0LT52 LCAyOSwgMjUpID09IDIpICAgIC8qIGozMiBmb3JtICovCj4gICAgICAgICAg ICAgICAgICAgIHx8IChHX0ZMRCAoaW5zdC0+diwgMjksIDI1KSA9PSA0KSkp IC8qIGIzMiBmb3JtICovCj4gICAgICAgICBicmVhazsKPiAKPiAgICAgICBj cGMgKz0gaW5zdC0+bGVuOwo3MzFjODA0Cjwgc2NvcmVfaW5fZnVuY3Rpb25f ZXBpbG9ndWVfcCAoc3RydWN0IGdkYmFyY2ggKmdkYmFyY2gsIENPUkVfQURE UiBjdXJfcGMpCi0tLQo+IHNjb3JlN19pbl9mdW5jdGlvbl9lcGlsb2d1ZV9w IChzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCwgQ09SRV9BRERSIGN1cl9wYykK NzMzYzgwNgo8ICAgaW5zdF90ICppbnN0ID0gc2NvcmVfZmV0Y2hfaW5zdCAo Z2RiYXJjaCwgY3VyX3BjLCBOVUxMKTsKLS0tCj4gICBpbnN0X3QgKmluc3Qg PSBzY29yZTdfZmV0Y2hfaW5zdCAoZ2RiYXJjaCwgY3VyX3BjLCBOVUxMKTsK NzUzYTgyNyw5MDIKPiBzdGF0aWMgaW50Cj4gc2NvcmUzX2luX2Z1bmN0aW9u X2VwaWxvZ3VlX3AgKHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoLCBDT1JFX0FE RFIgY3VyX3BjKQo+IHsKPiAgIENPUkVfQUREUiBwYyA9IGN1cl9wYzsKPiAg IGluc3RfdCAqaW5zdCA9IHNjb3JlM19hZGp1c3RfcGNfYW5kX2ZldGNoX2lu c3QgKCZwYywgTlVMTCk7Cj4gCj4gICBpZiAoaW5zdC0+bGVuID09IDIKPiAg ICAgICAmJiAoR19GTEQgKGluc3QtPnYsIDE0LCAxMCkgPT0gMHgxMCkKPiAg ICAgICAmJiAoR19GTEQgKGluc3QtPnYsIDksIDUpID09IDB4MCkKPiAgICAg ICAmJiAoR19GTEQgKGluc3QtPnYsIDQsIDApID09IDB4MikpCj4gICAgIHJl dHVybiAxOyAgIC8qIG12ISByMCwgcjIgKi8KPiAgIGVsc2UgaWYgKGluc3Qt PmxlbiA9PSA0Cj4gICAgICAgICAgICAmJiAoR19GTEQgKGluc3QtPnYsIDI5 LCAyNSkgPT0gMHgwKQo+ICAgICAgICAgICAgJiYgKEdfRkxEIChpbnN0LT52 LCAyNCwgMjApID09IDB4MikKPiAgICAgICAgICAgICYmIChHX0ZMRCAoaW5z dC0+diwgMTksIDE1KSA9PSAweDApCj4gCSAgICYmIChHX0ZMRCAoaW5zdC0+ diwgMTQsIDEwKSA9PSAweEYpCj4gCSAgICYmIChHX0ZMRCAoaW5zdC0+diwg OSwgMCkgPT0gMHg1NikpCj4gICAgIHJldHVybiAxOyAgIC8qIG12IHIwLCBy MiAqLwo+ICAgZWxzZSBpZiAoaW5zdC0+bGVuID09IDIKPiAgICAgICAgICAg ICYmIChHX0ZMRCAoaW5zdC0+diwgMTQsIDEyKSA9PSAweDApCj4gICAgICAg ICAgICAmJiAoR19GTEQgKGluc3QtPnYsIDExLCA1KSA9PSAweDIpKQo+ICAg ICByZXR1cm4gMTsgICAvKiBwb3AhICovCj4gICBlbHNlIGlmIChpbnN0LT5s ZW4gPT0gMgo+ICAgICAgICAgICAgJiYgKEdfRkxEIChpbnN0LT52LCAxNCwg MTIpID09IDB4MCkKPiAgICAgICAgICAgICYmIChHX0ZMRCAoaW5zdC0+diwg MTEsIDcpID09IDB4MCkKPiAgICAgICAgICAgICYmIChHX0ZMRCAoaW5zdC0+ diwgNiwgNSkgPT0gMHgyKSkKPiAgICAgcmV0dXJuIDE7ICAgLyogcnBvcCEg Ki8KPiAgIGVsc2UgaWYgKGluc3QtPmxlbiA9PSAyCj4gICAgICAgICAgICAm JiAoR19GTEQgKGluc3QtPnYsIDE0LCAxMikgPT0gMHgwKQo+ICAgICAgICAg ICAgJiYgKEdfRkxEIChpbnN0LT52LCAxMSwgNSkgPT0gMHg0KQo+ICAgICAg ICAgICAgJiYgKEdfRkxEIChpbnN0LT52LCA0LCAwKSA9PSAweDMpKQo+ICAg ICByZXR1cm4gMTsgICAvKiBiciEgcjMgKi8KPiAgIGVsc2UgaWYgKGluc3Qt PmxlbiA9PSA0Cj4gICAgICAgICAgICAmJiAoR19GTEQgKGluc3QtPnYsIDI5 LCAyNSkgPT0gMHgwKQo+ICAgICAgICAgICAgJiYgKEdfRkxEIChpbnN0LT52 LCAyNCwgMjApID09IDB4MCkKPiAgICAgICAgICAgICYmIChHX0ZMRCAoaW5z dC0+diwgMTksIDE1KSA9PSAweDMpCj4gICAgICAgICAgICAmJiAoR19GTEQg KGluc3QtPnYsIDE0LCAxMCkgPT0gMHhGKQo+ICAgICAgICAgICAgJiYgKEdf RkxEIChpbnN0LT52LCA5LCAwKSA9PSAweDgpKQo+ICAgICByZXR1cm4gMTsg ICAvKiBiciByMyAqLwo+ICAgZWxzZQo+ICAgICByZXR1cm4gMDsKPiB9Cj4g Cj4gc3RhdGljIGNoYXIgKgo+IHNjb3JlN19tYWxsb2NfYW5kX2dldF9tZW1i bG9jayAoQ09SRV9BRERSIGFkZHIsIENPUkVfQUREUiBzaXplKQo+IHsKPiAg IGludCByZXQ7Cj4gICBjaGFyICptZW1ibG9jayA9IE5VTEw7Cj4gCj4gICBp ZiAoc2l6ZSA8IDApCj4gICAgIHsKPiAgICAgICBlcnJvciAoIkVycm9yOiBt YWxsb2Mgc2l6ZSA8IDAgaW4gZmlsZTolcywgbGluZTolZCEiLAo+ICAgICAg ICAgICAgICBfX0ZJTEVfXywgX19MSU5FX18pOwo+ICAgICAgIHJldHVybiBO VUxMOwo+ICAgICB9Cj4gICBlbHNlIGlmIChzaXplID09IDApCj4gICAgIHJl dHVybiBOVUxMOwo+IAo+ICAgbWVtYmxvY2sgPSAoY2hhciAqKSB4bWFsbG9j IChzaXplKTsKPiAgIG1lbXNldCAobWVtYmxvY2ssIDAsIHNpemUpOwo+ICAg cmV0ID0gdGFyZ2V0X3JlYWRfbWVtb3J5IChhZGRyICYgfjB4MywgbWVtYmxv Y2ssIHNpemUpOwo+ICAgaWYgKHJldCkKPiAgICAgewo+ICAgICAgIGVycm9y ICgiRXJyb3I6IHRhcmdldF9yZWFkX21lbW9yeSBpbiBmaWxlOiVzLCBsaW5l OiVkISIsCj4gICAgICAgICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXyk7Cj4g ICAgICAgcmV0dXJuIE5VTEw7Cj4gICAgIH0KPiAgIHJldHVybiBtZW1ibG9j azsKPiB9Cj4gCj4gc3RhdGljIHZvaWQKPiBzY29yZTdfZnJlZV9tZW1ibG9j ayAoY2hhciAqbWVtYmxvY2spCj4gewo+ICAgeGZyZWUgKG1lbWJsb2NrKTsK PiB9Cj4gCjc1NWM5MDQsOTI0Cjwgc2NvcmVfYW5hbHl6ZV9wcm9sb2d1ZSAo Q09SRV9BRERSIHN0YXJ0YWRkciwgQ09SRV9BRERSIHBjLAotLS0KPiBzY29y ZTdfYWRqdXN0X21lbWJsb2NrX3B0ciAoY2hhciAqKm1lbWJsb2NrLCBDT1JF X0FERFIgcHJldl9wYywKPiAgICAgICAgICAgICAgICAgICAgICAgICAgICBD T1JFX0FERFIgY3VyX3BjKQo+IHsKPiAgIGlmIChwcmV2X3BjID09IC0xKQo+ ICAgICB7Cj4gICAgICAgLyogRmlyc3QgdGltZSBjYWxsIHRoaXMgZnVuY3Rp b24sIGRvIG5vdGhpbmcuICAqLwo+ICAgICB9Cj4gICBlbHNlIGlmIChjdXJf cGMgLSBwcmV2X3BjID09IDIgJiYgKGN1cl9wYyAmIDB4MykgPT0gMCkKPiAg ICAgewo+ICAgICAgIC8qIEZpcnN0IDE2LWJpdCBpbnN0cnVjdGlvbiwgdGhl biAzMi1iaXQgaW5zdHJ1Y3Rpb24uICAqLwo+ICAgICAgICptZW1ibG9jayAr PSBTQ09SRV9JTlNUTEVOOwo+ICAgICB9Cj4gICBlbHNlIGlmIChjdXJfcGMg LSBwcmV2X3BjID09IDQpCj4gICAgIHsKPiAgICAgICAvKiBJcyAzMi1iaXQg aW5zdHJ1Y3Rpb24sIGluY3JlYXNlIE1FTUJMT0NLIGJ5IDQuICAqLwo+ICAg ICAgICptZW1ibG9jayArPSBTQ09SRV9JTlNUTEVOOwo+ICAgICB9Cj4gfQo+ IAo+IHN0YXRpYyB2b2lkCj4gc2NvcmU3X2FuYWx5emVfcHJvbG9ndWUgKENP UkVfQUREUiBzdGFydGFkZHIsIENPUkVfQUREUiBwYywKNzc3Yzk0Ngo8ICAg ICBzY29yZV9tYWxsb2NfYW5kX2dldF9tZW1ibG9jayAoc3RhcnRhZGRyLCBw YyAtIHN0YXJ0YWRkcik7Ci0tLQo+ICAgICBzY29yZTdfbWFsbG9jX2FuZF9n ZXRfbWVtYmxvY2sgKHN0YXJ0YWRkciwgcGMgLSBzdGFydGFkZHIpOwo3ODks NzkwYzk1OCw5NTkKPCAgICAgICAgICAgc2NvcmVfYWRqdXN0X21lbWJsb2Nr X3B0ciAoJm1lbWJsb2NrLCBwcmV2X3BjLCBjdXJfcGMpOwo8ICAgICAgICAg ICBpbnN0ID0gc2NvcmVfZmV0Y2hfaW5zdCAoZ2RiYXJjaCwgY3VyX3BjLCBt ZW1ibG9jayk7Ci0tLQo+ICAgICAgICAgICBzY29yZTdfYWRqdXN0X21lbWJs b2NrX3B0ciAoJm1lbWJsb2NrLCBwcmV2X3BjLCBjdXJfcGMpOwo+ICAgICAg ICAgICBpbnN0ID0gc2NvcmU3X2ZldGNoX2luc3QgKGdkYmFyY2gsIGN1cl9w YywgbWVtYmxvY2spOwo3OTZjOTY1CjwgICAgICAgICAgIGluc3QgPSBzY29y ZV9mZXRjaF9pbnN0IChnZGJhcmNoLCBjdXJfcGMsIE5VTEwpOwotLS0KPiAg ICAgICAgICAgaW5zdCA9IHNjb3JlN19mZXRjaF9pbnN0IChnZGJhcmNoLCBj dXJfcGMsIE5VTEwpOwo3OTljOTY4LDk2OQo8ICAgICAgIGlmIChpbnN0LT5p czE1ID09IDEpCi0tLQo+ICAgICAgIC8qIEZJWE1FOiBtYWtlIGEgZnVsbC1w b3dlciBwcm9sb2d1ZSBhbmFseXplciAqLwo+ICAgICAgIGlmIChpbnN0LT5s ZW4gPT0gMikKODQ3LDg0OGMxMDE3LDEwMTkKPCAgICAgICAgICAgaWYgKEdf RkxEIChpbnN0LT52LCAyOSwgMTUpID09IDB4YzYwCjwgICAgICAgICAgICAg ICAmJiBHX0ZMRCAoaW5zdC0+diwgMiwgMCkgPT0gMHg0KQotLS0KPiAgICAg ICAgICAgaWYgKEdfRkxEKGluc3QtPnYsIDI5LCAyNSkgPT0gMHgzCj4gICAg ICAgICAgICAgICAmJiBHX0ZMRChpbnN0LT52LCAyLCAwKSA9PSAweDQKPiAg ICAgICAgICAgICAgICYmIEdfRkxEKGluc3QtPnYsIDE5LCAxNSkgPT0gMCkK ODUwLDg1NmMxMDIxLDEwNDEKPCAgICAgICAgICAgICAgIC8qIHN3IHIzLCBb cjAsIG9mZnNldF0rICovCjwgICAgICAgICAgICAgICBzcF9vZmZzZXQgKz0g U0NPUkVfSU5TVExFTjsKPCAgICAgICAgICAgICAgIGlmIChyYV9vZmZzZXRf cCA9PSAwKQo8ICAgICAgICAgICAgICAgICB7CjwgICAgICAgICAgICAgICAg ICAgcmFfb2Zmc2V0ID0gc3Bfb2Zmc2V0Owo8ICAgICAgICAgICAgICAgICAg IHJhX29mZnNldF9wID0gMTsKPCAgICAgICAgICAgICAgICAgfQotLS0KPiAg ICAgICAgICAgICAgICAgLyogc3cgckQsIFtyMCwgb2Zmc2V0XSsgKi8KPiAg ICAgICAgICAgICAgICAgc3Bfb2Zmc2V0ICs9IFNDT1JFX0lOU1RMRU47Cj4g Cj4gICAgICAgICAgICAgICAgIGlmIChHX0ZMRChpbnN0LT52LCAyNCwgMjAp ID09IDB4MykKPiAgICAgICAgICAgICAgICAgICB7Cj4gICAgICAgICAgICAg ICAgICAgICAgIC8qIHJEID0gcjMgKi8KPiAgICAgICAgICAgICAgICAgICAg ICAgaWYgKHJhX29mZnNldF9wID09IDApCj4gICAgICAgICAgICAgICAgICAg ICAgICAgewo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYV9vZmZz ZXQgPSBzcF9vZmZzZXQ7Cj4gICAgICAgICAgICAgICAgICAgICAgICAgICAg IHJhX29mZnNldF9wID0gMTsKPiAgICAgICAgICAgICAgICAgICAgICAgICB9 Cj4gICAgICAgICAgICAgICAgICAgfQo+ICAgICAgICAgICAgICAgICBlbHNl IGlmIChHX0ZMRChpbnN0LT52LCAyNCwgMjApID09IDB4MikKPiAgICAgICAg ICAgICAgICAgICB7Cj4gICAgICAgICAgICAgICAgICAgICAgIC8qIHJEID0g cjIgKi8KPiAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZwX29mZnNldF9w ID09IDApCj4gICAgICAgICAgICAgICAgICAgICAgICAgewo+ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBmcF9vZmZzZXQgPSBzcF9vZmZzZXQ7Cj4g ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZwX29mZnNldF9wID0gMTsK PiAgICAgICAgICAgICAgICAgICAgICAgICB9Cj4gICAgICAgICAgICAgICAg ICAgfQo4NTgsODU5YzEwNDMsMTA0NAo8ICAgICAgICAgICBpZiAoR19GTEQg KGluc3QtPnYsIDI5LCAxNSkgPT0gMHhjNDAKPCAgICAgICAgICAgICAgICYm IEdfRkxEIChpbnN0LT52LCAyLCAwKSA9PSAweDQpCi0tLQo+ICAgICAgICAg ICBlbHNlIGlmIChHX0ZMRChpbnN0LT52LCAyOSwgMjUpID09IDB4MTQKPiAg ICAgICAgICAgICAgICAgICAgJiYgR19GTEQoaW5zdC0+diwgMTksMTUpID09 IDApCjg2MSw4NjdjMTA0NiwxMDU4CjwgICAgICAgICAgICAgICAvKiBzdyBy MiwgW3IwLCBvZmZzZXRdKyAqLwo8ICAgICAgICAgICAgICAgc3Bfb2Zmc2V0 ICs9IFNDT1JFX0lOU1RMRU47CjwgICAgICAgICAgICAgICBpZiAoZnBfb2Zm c2V0X3AgPT0gMCkKPCAgICAgICAgICAgICAgICAgewo8ICAgICAgICAgICAg ICAgICAgIGZwX29mZnNldCA9IHNwX29mZnNldDsKPCAgICAgICAgICAgICAg ICAgICBmcF9vZmZzZXRfcCA9IDE7CjwgICAgICAgICAgICAgICAgIH0KLS0t Cj4gICAgICAgICAgICAgICAgIC8qIHN3IHJELCBbcjAsIG9mZnNldF0gKi8K PiAgICAgICAgICAgICAgICAgaWYgKEdfRkxEKGluc3QtPnYsIDI0LCAyMCkg PT0gMHgzKQo+ICAgICAgICAgICAgICAgICAgIHsKPiAgICAgICAgICAgICAg ICAgICAgICAgLyogckQgPSByMyAqLwo+ICAgICAgICAgICAgICAgICAgICAg ICByYV9vZmZzZXQgPSBzcF9vZmZzZXQgLSBHX0ZMRChpbnN0LT52LCAxNCwg MCk7Cj4gICAgICAgICAgICAgICAgICAgICAgIHJhX29mZnNldF9wID0gMTsK PiAgICAgICAgICAgICAgICAgICB9Cj4gICAgICAgICAgICAgICAgIGVsc2Ug aWYgKEdfRkxEKGluc3QtPnYsIDI0LCAyMCkgPT0gMHgyKQo+ICAgICAgICAg ICAgICAgICAgIHsKPiAgICAgICAgICAgICAgICAgICAgICAgLyogckQgPSBy MiAqLwo+ICAgICAgICAgICAgICAgICAgICAgICBmcF9vZmZzZXQgPSBzcF9v ZmZzZXQgLSBHX0ZMRChpbnN0LT52LCAxNCwgMCk7Cj4gICAgICAgICAgICAg ICAgICAgICAgIGZwX29mZnNldF9wID0gMTsKPiAgICAgICAgICAgICAgICAg ICB9Cjg5OGMxMDg5CjwgICAgICAgICAgICAgICAgICAgICBzY29yZV9mZXRj aF9pbnN0IChnZGJhcmNoLCBjdXJfcGMgKyBTQ09SRV9JTlNUTEVOLCBOVUxM KTsKLS0tCj4gICAgICAgICAgICAgICAgICAgICBzY29yZTdfZmV0Y2hfaW5z dCAoZ2RiYXJjaCwgY3VyX3BjICsgU0NPUkVfSU5TVExFTiwgTlVMTCk7Cjkz NmMxMTI3LDEzNjkKPCAgICAgc2NvcmVfZnJlZV9tZW1ibG9jayAobWVtYmxv Y2tfcHRyKTsKLS0tCj4gICAgIHNjb3JlN19mcmVlX21lbWJsb2NrIChtZW1i bG9ja19wdHIpOwo+IH0KPiAKPiBzdGF0aWMgdm9pZAo+IHNjb3JlM19hbmFs eXplX3Byb2xvZ3VlIChDT1JFX0FERFIgc3RhcnRhZGRyLCBDT1JFX0FERFIg cGMsCj4gICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGZyYW1lX2lu Zm8gKnRoaXNfZnJhbWUsCj4gICAgICAgICAgICAgICAgICAgICAgICAgc3Ry dWN0IHNjb3JlX2ZyYW1lX2NhY2hlICp0aGlzX2NhY2hlKQo+IHsKPiAgIENP UkVfQUREUiBzcDsKPiAgIENPUkVfQUREUiBmcDsKPiAgIENPUkVfQUREUiBj dXJfcGMgPSBzdGFydGFkZHI7Cj4gCj4gICBpbnQgc3Bfb2Zmc2V0ID0gMDsK PiAgIGludCByYV9vZmZzZXQgPSAwOwo+ICAgaW50IGZwX29mZnNldCA9IDA7 Cj4gICBpbnQgcmFfb2Zmc2V0X3AgPSAwOwo+ICAgaW50IGZwX29mZnNldF9w ID0gMDsKPiAgIGludCBpbnN0X2xlbiA9IDA7Cj4gCj4gICBDT1JFX0FERFIg cHJldl9wYyA9IC0xOwo+IAo+ICAgc3AgPSBnZXRfZnJhbWVfcmVnaXN0ZXJf dW5zaWduZWQgKHRoaXNfZnJhbWUsIFNDT1JFX1NQX1JFR05VTSk7Cj4gICBm cCA9IGdldF9mcmFtZV9yZWdpc3Rlcl91bnNpZ25lZCAodGhpc19mcmFtZSwg U0NPUkVfRlBfUkVHTlVNKTsKPiAKPiAgIGZvciAoOyBjdXJfcGMgPCBwYzsg cHJldl9wYyA9IGN1cl9wYywgY3VyX3BjICs9IGluc3RfbGVuKQo+ICAgICB7 Cj4gICAgICAgaW5zdF90ICppbnN0ID0gTlVMTDsKPiAKPiAgICAgICBpbnN0 ID0gc2NvcmUzX2FkanVzdF9wY19hbmRfZmV0Y2hfaW5zdCAoJmN1cl9wYywg Jmluc3RfbGVuKTsKPiAKPiAgICAgICAvKiBGSVhNRTogbWFrZSBhIGZ1bGwt cG93ZXIgcHJvbG9ndWUgYW5hbHl6ZXIgKi8KPiAgICAgICBpZiAoaW5zdC0+ bGVuID09IDIpCj4gICAgICAgICB7Cj4gICAgICAgICAgIGlmIChHX0ZMRCAo aW5zdC0+diwgMTQsIDEyKSA9PSAweDAKPiAgICAgICAgICAgICAgICYmIEdf RkxEIChpbnN0LT52LCAxMSwgNykgPT0gMHgwCj4gICAgICAgICAgICAgICAm JiBHX0ZMRCAoaW5zdC0+diwgNiwgNSkgPT0gMHgzKQo+ICAgICAgICAgICAg IHsKPiAgICAgICAgICAgICAgIC8qIHB1c2ghICovCj4gICAgICAgICAgICAg ICBzcF9vZmZzZXQgKz0gNDsKPiAKPiAgICAgICAgICAgICAgIGlmIChHX0ZM RCAoaW5zdC0+diwgNCwgMCkgPT0gMHgzCj4gICAgICAgICAgICAgICAgICAg JiYgcmFfb2Zmc2V0X3AgPT0gMCkKPiAgICAgICAgICAgICAgICAgewo+ICAg ICAgICAgICAgICAgICAgIC8qIHB1c2ghIHIzLCBbcjBdICovCj4gICAgICAg ICAgICAgICAgICAgcmFfb2Zmc2V0ID0gc3Bfb2Zmc2V0Owo+ICAgICAgICAg ICAgICAgICAgIHJhX29mZnNldF9wID0gMTsKPiAgICAgICAgICAgICAgICAg fQo+ICAgICAgICAgICAgICAgZWxzZSBpZiAoR19GTEQgKGluc3QtPnYsIDQs IDApID09IDB4Mgo+ICAgICAgICAgICAgICAgICAgICAgICAgJiYgZnBfb2Zm c2V0X3AgPT0gMCkKPiAgICAgICAgICAgICAgICAgewo+ICAgICAgICAgICAg ICAgICAgIC8qIHB1c2ghIHIyLCBbcjBdICovCj4gICAgICAgICAgICAgICAg ICAgZnBfb2Zmc2V0ID0gc3Bfb2Zmc2V0Owo+ICAgICAgICAgICAgICAgICAg IGZwX29mZnNldF9wID0gMTsKPiAgICAgICAgICAgICAgICAgfQo+ICAgICAg ICAgICAgIH0KPiAgICAgICAgICAgZWxzZSBpZiAoR19GTEQgKGluc3QtPnYs IDE0LCAxMikgPT0gMHg2Cj4gICAgICAgICAgICAgICAgICAgICYmIEdfRkxE IChpbnN0LT52LCAxMSwgMTApID09IDB4MykKPiAgICAgICAgICAgICB7Cj4g ICAgICAgICAgICAgICAvKiBycHVzaCEgKi8KPiAgICAgICAgICAgICAgIGlu dCBzdGFydF9yID0gR19GTEQgKGluc3QtPnYsIDksIDUpOwo+ICAgICAgICAg ICAgICAgaW50IGNudCA9IEdfRkxEIChpbnN0LT52LCA0LCAwKTsKPiAgICAg IAo+ICAgICAgICAgICAgICAgaWYgKChyYV9vZmZzZXRfcCA9PSAwKQo+IAkJ ICAmJiAoc3RhcnRfciA8PSBTQ09SRV9SQV9SRUdOVU0pCj4gICAgICAgICAg ICAgICAgICAgJiYgKFNDT1JFX1JBX1JFR05VTSA8IHN0YXJ0X3IgKyBjbnQp KQo+ICAgICAgICAgICAgICAgICB7Cj4gICAgICAgICAgICAgICAgICAgLyog cnB1c2ghIGNvbnRhaW5zIHIzICovCj4gICAgICAgICAgICAgICAgICAgcmFf b2Zmc2V0X3AgPSAxOwo+ICAgICAgICAgICAgICAgICAgIHJhX29mZnNldCA9 IHNwX29mZnNldCArIDQgKiAoU0NPUkVfUkFfUkVHTlVNIC0gc3RhcnRfcikg KyA0Owo+ICAgICAgICAgICAgICAgICB9Cj4gCj4gICAgICAgICAgICAgICBp ZiAoKGZwX29mZnNldF9wID09IDApCj4gCQkgICYmIChzdGFydF9yIDw9IFND T1JFX0ZQX1JFR05VTSkKPiAgICAgICAgICAgICAgICAgICAmJiAoU0NPUkVf RlBfUkVHTlVNIDwgc3RhcnRfciArIGNudCkpCj4gICAgICAgICAgICAgICAg IHsKPiAgICAgICAgICAgICAgICAgICAvKiBycHVzaCEgY29udGFpbnMgcjIg Ki8KPiAgICAgICAgICAgICAgICAgICBmcF9vZmZzZXRfcCA9IDE7Cj4gICAg ICAgICAgICAgICAgICAgZnBfb2Zmc2V0ID0gc3Bfb2Zmc2V0ICsgNCAqIChT Q09SRV9GUF9SRUdOVU0gLSBzdGFydF9yKSArIDQ7Cj4gICAgICAgICAgICAg ICAgIH0KPiAKPiAgICAgICAgICAgICAgIHNwX29mZnNldCArPSA0ICogY250 Owo+ICAgICAgICAgICAgIH0KPiAgICAgICAgICAgZWxzZSBpZiAoR19GTEQg KGluc3QtPnYsIDE0LCAxMikgPT0gMHgwCj4gICAgICAgICAgICAgICAgICAg ICYmIEdfRkxEIChpbnN0LT52LCAxMSwgNykgPT0gMHgwCj4gICAgICAgICAg ICAgICAgICAgICYmIEdfRkxEIChpbnN0LT52LCA2LCA1KSA9PSAweDIpCj4g ICAgICAgICAgICAgewo+ICAgICAgICAgICAgICAgLyogcG9wISAqLwo+ICAg ICAgICAgICAgICAgc3Bfb2Zmc2V0IC09IDQ7Cj4gICAgICAgICAgICAgfQo+ ICAgICAgICAgICBlbHNlIGlmIChHX0ZMRCAoaW5zdC0+diwgMTQsIDEyKSA9 PSAweDYKPiAgICAgICAgICAgICAgICAgICAgJiYgR19GTEQgKGluc3QtPnYs IDExLCAxMCkgPT0gMHgyKQo+ICAgICAgICAgICAgIHsKPiAgICAgICAgICAg ICAgIC8qIHJwb3AhICovCj4gICAgICAgICAgICAgICBzcF9vZmZzZXQgLT0g NCAqIEdfRkxEIChpbnN0LT52LCA0LCAwKTsKPiAgICAgICAgICAgICB9Cj4g ICAgICAgICAgIGVsc2UgaWYgKEdfRkxEIChpbnN0LT52LCAxNCwgMTIpID09 IDB4NQo+ICAgICAgICAgICAgICAgICAgICAmJiBHX0ZMRCAoaW5zdC0+diwg MTEsIDEwKSA9PSAweDMKPiAgICAgICAgICAgICAgICAgICAgJiYgR19GTEQg KGluc3QtPnYsIDksIDYpID09IDB4MCkKPiAgICAgICAgICAgICB7Cj4gICAg ICAgICAgICAgICAvKiBhZGRpISByMCwgLW9mZnNldCAqLwo+ICAgICAgICAg ICAgICAgaW50IGltbSA9IEdfRkxEIChpbnN0LT52LCA1LCAwKTsKPiAJICAg ICAgaWYgKGltbSA+PiA1KQo+IAkJaW1tID0gLSgweDNGIC0gaW1tICsgMSk7 Cj4gCSAgICAgIHNwX29mZnNldCAtPSBpbW07Cj4gICAgICAgICAgICAgfQo+ ICAgICAgICAgICBlbHNlIGlmIChHX0ZMRCAoaW5zdC0+diwgMTQsIDEyKSA9 PSAweDUKPiAgICAgICAgICAgICAgICAgICAgJiYgR19GTEQgKGluc3QtPnYs IDExLCAxMCkgPT0gMHgzCj4gICAgICAgICAgICAgICAgICAgICYmIEdfRkxE IChpbnN0LT52LCA5LCA2KSA9PSAweDIpCj4gICAgICAgICAgICAgewo+ICAg ICAgICAgICAgICAgLyogYWRkaSEgcjIsIG9mZnNldCAqLwo+ICAgICAgICAg ICAgICAgaWYgKHBjIC0gY3VyX3BjID49IDIpCj4gICAgICAgICAgICAgICAg IHsKPiAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2F2ZV92ID0g aW5zdC0+djsKPiAgICAgICAgICAgICAgICAgICBpbnN0X3QgKmluc3QyOwo+ IAo+IAkJICAgICAgICAgIGN1cl9wYyArPSBpbnN0LT5sZW47Cj4gICAgICAg ICAgICAgICAgICAgaW5zdDIgPSBzY29yZTNfYWRqdXN0X3BjX2FuZF9mZXRj aF9pbnN0ICgmY3VyX3BjLCBOVUxMKTsKPiAKPiAgICAgICAgICAgICAgICAg ICBpZiAoaW5zdDItPmxlbiA9PSAyCj4gICAgICAgICAgICAgICAgICAgICAg ICYmIEdfRkxEIChpbnN0Mi0+diwgMTQsIDEwKSA9PSAweDEwCj4gICAgICAg ICAgICAgICAgICAgICAgICYmIEdfRkxEIChpbnN0Mi0+diwgOSwgNSkgPT0g MHgwCj4gICAgICAgICAgICAgICAgICAgICAgICYmIEdfRkxEIChpbnN0Mi0+ diwgNCwgMCkgPT0gMHgyKQo+ICAgICAgICAgICAgICAgICAgICAgewo+ICAg ICAgICAgICAgICAgICAgICAgICAvKiBtdiEgcjAsIHIyICovCj4gICAgICAg ICAgICAgICAgICAgICAgIGludCBpbW0gPSBHX0ZMRCAoaW5zdC0+diwgNSwg MCk7Cj4gCSAgICAgICAgICAgICAgaWYgKGltbSA+PiA1KQo+IAkJICAgICAg ICBpbW0gPSAtKDB4M0YgLSBpbW0gKyAxKTsKPiAgICAgICAgICAgICAgICAg ICAgICAgc3Bfb2Zmc2V0IC09IGltbTsKPiAgICAgICAgICAgICAgICAgICAg IH0KPiAgICAgICAgICAgICAgICAgfQo+IAkgICAgfQo+ICAgICAgICAgfQo+ ICAgICAgIGVsc2UgaWYgKGluc3QtPmxlbiA9PSA0KQo+ICAgICAgICAgewo+ ICAgICAgICAgICBpZiAoR19GTEQgKGluc3QtPnYsIDI5LCAyNSkgPT0gMHgz Cj4gICAgICAgICAgICAgICAmJiBHX0ZMRCAoaW5zdC0+diwgMiwgMCkgPT0g MHg0Cj4gICAgICAgICAgICAgICAmJiBHX0ZMRCAoaW5zdC0+diwgMjQsIDIw KSA9PSAweDMKPiAgICAgICAgICAgICAgICYmIEdfRkxEIChpbnN0LT52LCAx OSwgMTUpID09IDB4MCkKPiAgICAgICAgICAgICB7Cj4gICAgICAgICAgICAg ICAvKiBzdyByMywgW3IwLCBvZmZzZXRdKyAqLwo+ICAgICAgICAgICAgICAg c3Bfb2Zmc2V0ICs9IGluc3QtPmxlbjsKPiAgICAgICAgICAgICAgIGlmIChy YV9vZmZzZXRfcCA9PSAwKQo+ICAgICAgICAgICAgICAgICB7Cj4gICAgICAg ICAgICAgICAgICAgcmFfb2Zmc2V0ID0gc3Bfb2Zmc2V0Owo+ICAgICAgICAg ICAgICAgICAgIHJhX29mZnNldF9wID0gMTsKPiAgICAgICAgICAgICAgICAg fQo+ICAgICAgICAgICAgIH0KPiAgICAgICAgICAgZWxzZSBpZiAoR19GTEQg KGluc3QtPnYsIDI5LCAyNSkgPT0gMHgzCj4gICAgICAgICAgICAgICAgICAg ICYmIEdfRkxEIChpbnN0LT52LCAyLCAwKSA9PSAweDQKPiAgICAgICAgICAg ICAgICAgICAgJiYgR19GTEQgKGluc3QtPnYsIDI0LCAyMCkgPT0gMHgyCj4g ICAgICAgICAgICAgICAgICAgICYmIEdfRkxEIChpbnN0LT52LCAxOSwgMTUp ID09IDB4MCkKPiAgICAgICAgICAgICB7Cj4gICAgICAgICAgICAgICAvKiBz dyByMiwgW3IwLCBvZmZzZXRdKyAqLwo+ICAgICAgICAgICAgICAgc3Bfb2Zm c2V0ICs9IGluc3QtPmxlbjsKPiAgICAgICAgICAgICAgIGlmIChmcF9vZmZz ZXRfcCA9PSAwKQo+ICAgICAgICAgICAgICAgICB7Cj4gICAgICAgICAgICAg ICAgICAgZnBfb2Zmc2V0ID0gc3Bfb2Zmc2V0Owo+ICAgICAgICAgICAgICAg ICAgIGZwX29mZnNldF9wID0gMTsKPiAgICAgICAgICAgICAgICAgfQo+ICAg ICAgICAgICAgIH0KPiAgICAgICAgICAgZWxzZSBpZiAoR19GTEQgKGluc3Qt PnYsIDI5LCAyNSkgPT0gMHg3Cj4gICAgICAgICAgICAgICAgICAgICYmIEdf RkxEIChpbnN0LT52LCAyLCAwKSA9PSAweDAKPiAgICAgICAgICAgICAgICAg ICAgJiYgR19GTEQgKGluc3QtPnYsIDI0LCAyMCkgPT0gMHgzCj4gICAgICAg ICAgICAgICAgICAgICYmIEdfRkxEIChpbnN0LT52LCAxOSwgMTUpID09IDB4 MCkKPiAgICAgICAgICAgICB7Cj4gICAgICAgICAgICAgICAvKiBsdyByMywg W3IwXSssIDQgKi8KPiAgICAgICAgICAgICAgIHNwX29mZnNldCAtPSBpbnN0 LT5sZW47Cj4gICAgICAgICAgICAgICByYV9vZmZzZXRfcCA9IDE7Cj4gICAg ICAgICAgICAgfQo+ICAgICAgICAgICBlbHNlIGlmIChHX0ZMRCAoaW5zdC0+ diwgMjksIDI1KSA9PSAweDcKPiAgICAgICAgICAgICAgICAgICAgJiYgR19G TEQgKGluc3QtPnYsIDIsIDApID09IDB4MAo+ICAgICAgICAgICAgICAgICAg ICAmJiBHX0ZMRCAoaW5zdC0+diwgMjQsIDIwKSA9PSAweDIKPiAgICAgICAg ICAgICAgICAgICAgJiYgR19GTEQgKGluc3QtPnYsIDE5LCAxNSkgPT0gMHgw KQo+ICAgICAgICAgICAgIHsKPiAgICAgICAgICAgICAgIC8qIGx3IHIyLCBb cjBdKywgNCAqLwo+ICAgICAgICAgICAgICAgc3Bfb2Zmc2V0IC09IGluc3Qt PmxlbjsKPiAgICAgICAgICAgICAgIGZwX29mZnNldF9wID0gMTsKPiAgICAg ICAgICAgICB9Cj4gICAgICAgICAgIGVsc2UgaWYgKEdfRkxEIChpbnN0LT52 LCAyOSwgMjUpID09IDB4MQo+ICAgICAgICAgICAgICAgICAgICAmJiBHX0ZM RCAoaW5zdC0+diwgMTksIDE3KSA9PSAweDAKPiAgICAgICAgICAgICAgICAg ICAgJiYgR19GTEQgKGluc3QtPnYsIDI0LCAyMCkgPT0gMHgwCj4gICAgICAg ICAgICAgICAgICAgICYmIEdfRkxEIChpbnN0LT52LCAwLCAwKSA9PSAweDAp Cj4gICAgICAgICAgICAgewo+ICAgICAgICAgICAgICAgLyogYWRkaSByMCwg LW9mZnNldCAqLwo+ICAgICAgICAgICAgICAgaW50IGltbSA9IEdfRkxEIChp bnN0LT52LCAxNiwgMSk7Cj4gCSAgICAgIGlmIChpbW0gPj4gMTUpCj4gCQlp bW0gPSAtKDB4RkZGRiAtIGltbSArIDEpOwo+ICAgICAgICAgICAgICAgc3Bf b2Zmc2V0IC09IGltbTsKPiAgICAgICAgICAgICB9Cj4gICAgICAgICAgIGVs c2UgaWYgKEdfRkxEIChpbnN0LT52LCAyOSwgMjUpID09IDB4MQo+ICAgICAg ICAgICAgICAgICAgICAmJiBHX0ZMRCAoaW5zdC0+diwgMTksIDE3KSA9PSAw eDAKPiAgICAgICAgICAgICAgICAgICAgJiYgR19GTEQgKGluc3QtPnYsIDI0 LCAyMCkgPT0gMHgyCj4gICAgICAgICAgICAgICAgICAgICYmIEdfRkxEIChp bnN0LT52LCAwLCAwKSA9PSAweDApCj4gICAgICAgICAgICAgewo+ICAgICAg ICAgICAgICAgLyogYWRkaSByMiwgb2Zmc2V0ICovCj4gICAgICAgICAgICAg ICBpZiAocGMgLSBjdXJfcGMgPj0gMikKPiAgICAgICAgICAgICAgICAgewo+ ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzYXZlX3YgPSBpbnN0 LT52Owo+ICAgICAgICAgICAgICAgICAgIGluc3RfdCAqaW5zdDI7Cj4gCj4g CQkgICAgICAgICAgY3VyX3BjICs9IGluc3QtPmxlbjsKPiAgICAgICAgICAg ICAgICAgICBpbnN0MiA9IHNjb3JlM19hZGp1c3RfcGNfYW5kX2ZldGNoX2lu c3QgKCZjdXJfcGMsIE5VTEwpOwo+IAo+ICAgICAgICAgICAgICAgICAgIGlm IChpbnN0Mi0+bGVuID09IDIKPiAgICAgICAgICAgICAgICAgICAgICAgJiYg R19GTEQgKGluc3QyLT52LCAxNCwgMTApID09IDB4MTAKPiAgICAgICAgICAg ICAgICAgICAgICAgJiYgR19GTEQgKGluc3QyLT52LCA5LCA1KSA9PSAweDAK PiAgICAgICAgICAgICAgICAgICAgICAgJiYgR19GTEQgKGluc3QyLT52LCA0 LCAwKSA9PSAweDIpCj4gICAgICAgICAgICAgICAgICAgICB7Cj4gICAgICAg ICAgICAgICAgICAgICAgIC8qIG12ISByMCwgcjIgKi8KPiAgICAgICAgICAg ICAgICAgICAgICAgaW50IGltbSA9IEdfRkxEIChpbnN0LT52LCAxNiwgMSk7 Cj4gCSAgICAgICAgICAgICAgaWYgKGltbSA+PiAxNSkKPiAJCSAgICAgICAg aW1tID0gLSgweEZGRkYgLSBpbW0gKyAxKTsKPiAgICAgICAgICAgICAgICAg ICAgICAgc3Bfb2Zmc2V0IC09IGltbTsKPiAgICAgICAgICAgICAgICAgICAg IH0KPiAgICAgICAgICAgICAgICAgfQo+ICAgICAgICAgICAgIH0KPiAgICAg ICAgIH0KPiAgICAgfQo+IAo+ICAgLyogU2F2ZSBSQS4gICovCj4gICBpZiAo cmFfb2Zmc2V0X3AgPT0gMSkKPiAgICAgewo+ICAgICAgIGlmICh0aGlzX2Nh Y2hlLT5zYXZlZF9yZWdzW1NDT1JFX1BDX1JFR05VTV0uYWRkciA9PSAtMSkK PiAgICAgICAgIHRoaXNfY2FjaGUtPnNhdmVkX3JlZ3NbU0NPUkVfUENfUkVH TlVNXS5hZGRyID0KPiAgICAgICAgICAgc3AgKyBzcF9vZmZzZXQgLSByYV9v ZmZzZXQ7Cj4gICAgIH0KPiAgIGVsc2UKPiAgICAgewo+ICAgICAgIHRoaXNf Y2FjaGUtPnNhdmVkX3JlZ3NbU0NPUkVfUENfUkVHTlVNXSA9Cj4gICAgICAg ICB0aGlzX2NhY2hlLT5zYXZlZF9yZWdzW1NDT1JFX1JBX1JFR05VTV07Cj4g ICAgIH0KPiAKPiAgIC8qIFNhdmUgRlAuICAqLwo+ICAgaWYgKGZwX29mZnNl dF9wID09IDEpCj4gICAgIHsKPiAgICAgICBpZiAodGhpc19jYWNoZS0+c2F2 ZWRfcmVnc1tTQ09SRV9GUF9SRUdOVU1dLmFkZHIgPT0gLTEpCj4gICAgICAg ICB0aGlzX2NhY2hlLT5zYXZlZF9yZWdzW1NDT1JFX0ZQX1JFR05VTV0uYWRk ciA9Cj4gICAgICAgICAgIHNwICsgc3Bfb2Zmc2V0IC0gZnBfb2Zmc2V0Owo+ ICAgICB9Cj4gCj4gICAvKiBTYXZlIFNQIGFuZCBGUC4gICovCj4gICB0aGlz X2NhY2hlLT5iYXNlID0gc3AgKyBzcF9vZmZzZXQ7Cj4gICB0aGlzX2NhY2hl LT5mcCA9IGZwOwo5NTljMTM5MiwxMzk2CjwgICAgIHNjb3JlX2FuYWx5emVf cHJvbG9ndWUgKHN0YXJ0X2FkZHIsIHBjLCB0aGlzX2ZyYW1lLCAqdGhpc19j YWNoZSk7Ci0tLQo+IAo+ICAgICBpZiAodGFyZ2V0X21hY2ggPT0gYmZkX21h Y2hfc2NvcmUzKQo+ICAgICAgIHNjb3JlM19hbmFseXplX3Byb2xvZ3VlIChz dGFydF9hZGRyLCBwYywgdGhpc19mcmFtZSwgKnRoaXNfY2FjaGUpOwo+ICAg ICBlbHNlCj4gICAgICAgc2NvcmU3X2FuYWx5emVfcHJvbG9ndWUgKHN0YXJ0 X2FkZHIsIHBjLCB0aGlzX2ZyYW1lLCAqdGhpc19jYWNoZSk7Cjk5MmMxNDI5 LDE0MzAKPCAgIGRlZmF1bHRfZnJhbWVfc25pZmZlcgotLS0KPiAgIGRlZmF1 bHRfZnJhbWVfc25pZmZlciwKPiAgIE5VTEwKMTAxN2ExNDU2LDE1MjcKPiAv KiBDb3JlIGZpbGUgc3VwcG9ydCAoZGlydHkgaGFjaykKPiAgIAo+ICAgIFRo ZSBjb3JlIGZpbGUgTVVTVCBiZSBnZW5lcmF0ZWQgYnkgR05VL0xpbnV4IG9u IFMrY29yZSAqLwo+IAo+IHN0YXRpYyB2b2lkCj4gc2NvcmU3X2xpbnV4X3N1 cHBseV9ncmVnc2V0KGNvbnN0IHN0cnVjdCByZWdzZXQgKnJlZ3NldCwKPiAg ICAgICAgICAgICAgICAgc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwKPiAg ICAgICAgICAgICAgICAgaW50IHJlZ251bSwgY29uc3Qgdm9pZCAqZ3JlZ3Nf YnVmLCBzaXplX3QgbGVuKQo+IHsKPiAgICAgaW50IHJlZ25vOwo+ICAgICBl bGZfZ3JlZ3NldF90ICpncmVnczsKPiAKPiAgICAgZ2RiX2Fzc2VydCAocmVn c2V0ICE9IE5VTEwpOwo+ICAgICBnZGJfYXNzZXJ0ICgocmVnY2FjaGUgIT0g TlVMTCkgJiYgKGdyZWdzX2J1ZiAhPSBOVUxMKSk7Cj4gCj4gICAgIGdyZWdz ID0gKGVsZl9ncmVnc2V0X3QgKikgZ3JlZ3NfYnVmOwo+IAo+ICAgICBmb3Ig KHJlZ25vID0gMDsgcmVnbm8gPCAzMjsgcmVnbm8rKykKPiAgICAgICAgIGlm IChyZWdudW0gPT0gLTEgfHwgcmVnbnVtID09IHJlZ25vKQo+ICAgICAgICAg ICAgIHJlZ2NhY2hlX3Jhd19zdXBwbHkgKHJlZ2NhY2hlLCByZWdubywgZ3Jl Z3MtPnJlZ3MgKyByZWdubyk7Cj4gCj4gICAgIHsKPiAgICAgICAgIHN0cnVj dCBzcmVnIHsKPiAgICAgICAgICAgICAgICAgaW50IHJlZ251bTsKPiAgICAg ICAgICAgICAgICAgdm9pZCAqYnVmOwo+ICAgICAgICAgfSBzcmVncyBbXSA9 IHsKPiAgICAgICAgICAgICAgICAgeyA1NSwgJihncmVncy0+Y2VsKSB9LCAg LyogQ0VMICovCj4gICAgICAgICAgICAgICAgIHsgNTQsICYoZ3JlZ3MtPmNl aCkgfSwgIC8qIENFSCAqLwo+ICAgICAgICAgICAgICAgICB7IDUzLCAmKGdy ZWdzLT5zcjApIH0sICAvKiBzcjAsIGkuZS4gY250IG9yIENPVU5URVIgKi8K PiAgICAgICAgICAgICAgICAgeyA1MiwgJihncmVncy0+c3IxKSB9LCAgLyog c3IxLCBpLmUuIGxjciBvciBMRENSICovCj4gICAgICAgICAgICAgICAgIHsg NTEsICYoZ3JlZ3MtPnNyMSkgfSwgIC8qIHNyMiwgaS5lLiBzY3Igb3IgU1RD UiAqLwo+IAo+ICAgICAgICAgICAgICAgICAvKiBFeGNlcHRpb24gb2NjdXJl ZCBhdCB0aGlzIGFkZHJlc3MsIGV4YWN0bHkgdGhlIFBDIHdlIHdhbnQgKi8K PiAgICAgICAgICAgICAgICAgeyA0OSwgJihncmVncy0+Y3AwX2VwYykgfSwg LyogUEMgKi8KPiAKPiAgICAgICAgICAgICAgICAgeyAzOCwgJihncmVncy0+ Y3AwX2VtYSkgfSwgLyogRU1BICovCj4gICAgICAgICAgICAgICAgIHsgMzcs ICYoZ3JlZ3MtPmNwMF9lcGMpIH0sIC8qIEVQQyAqLwo+ICAgICAgICAgICAg ICAgICB7IDM0LCAmKGdyZWdzLT5jcDBfZWNyKSB9LCAvKiBFQ1IgKi8KPiAg ICAgICAgICAgICAgICAgeyAzMywgJihncmVncy0+Y3AwX2NvbmRpdGlvbikg fSwgLyogQ09ORCAqLwo+ICAgICAgICAgICAgICAgICB7IDMyLCAmKGdyZWdz LT5jcDBfcHNyKSB9LCAvKiBQU1IgKi8KPiAgICAgICAgIH07Cj4gCj4gICAg ICAgICBmb3IgKHJlZ25vID0gMDsgcmVnbm8gPCBzaXplb2Yoc3JlZ3MpL3Np emVvZihzcmVnc1swXSk7IHJlZ25vKyspCj4gICAgICAgICAgICAgICAgIGlm IChyZWdudW0gPT0gLTEgfHwgcmVnbnVtID09IHNyZWdzW3JlZ25vXS5yZWdu dW0pCj4gICAgICAgICAgICAgICAgICAgICAgICAgcmVnY2FjaGVfcmF3X3N1 cHBseSAocmVnY2FjaGUsIHNyZWdzW3JlZ25vXS5yZWdudW0sIHNyZWdzW3Jl Z25vXS5idWYpOwo+ICAgICB9Cj4gfQo+IAo+IC8qIFJldHVybiB0aGUgYXBw cm9wcmlhdGUgcmVnaXN0ZXIgc2V0IGZyb20gdGhlIGNvcmUgc2VjdGlvbiBp ZGVudGlmaWVkCj4gICAgYnkgU0VDVF9OQU1FIGFuZCBTRUNUX1NJWkUuICov Cj4gCj4gc3RhdGljIGNvbnN0IHN0cnVjdCByZWdzZXQgKgo+IHNjb3JlN19s aW51eF9yZWdzZXRfZnJvbV9jb3JlX3NlY3Rpb24oc3RydWN0IGdkYmFyY2gg KmdkYmFyY2gsCj4gICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpz ZWN0X25hbWUsIHNpemVfdCBzZWN0X3NpemUpCj4gewo+ICAgICBzdHJ1Y3Qg Z2RiYXJjaF90ZGVwICp0ZGVwOwo+IAo+ICAgICBnZGJfYXNzZXJ0IChnZGJh cmNoICE9IE5VTEwpOwo+ICAgICBnZGJfYXNzZXJ0IChzZWN0X25hbWUgIT0g TlVMTCk7Cj4gCj4gICAgIHRkZXAgPSBnZGJhcmNoX3RkZXAgKGdkYmFyY2gp Owo+IAo+ICAgICBpZiAoc3RyY21wKHNlY3RfbmFtZSwgIi5yZWciKSA9PSAw ICYmIHNlY3Rfc2l6ZSA9PSBzaXplb2YoZWxmX2dyZWdzZXRfdCkpCj4gICAg IHsKPiAgICAgICAgIGlmICh0ZGVwLT5ncmVnc2V0ID09IE5VTEwpCj4gICAg ICAgICAgICAgdGRlcC0+Z3JlZ3NldCA9IHJlZ3NldF9hbGxvYyAoZ2RiYXJj aCwgc2NvcmU3X2xpbnV4X3N1cHBseV9ncmVnc2V0LCBOVUxMKTsKPiAgICAg ICAgIHJldHVybiB0ZGVwLT5ncmVnc2V0Owo+ICAgICB9Cj4gCj4gICAgIHJl dHVybiBOVUxMOwo+IH0KPiAKMTAyMWExNTMyLDE1MzMKPiAgIHN0cnVjdCBn ZGJhcmNoX3RkZXAgKnRkZXA7Cj4gICB0YXJnZXRfbWFjaCA9IGluZm8uYmZk X2FyY2hfaW5mby0+bWFjaDsKMTAyOGMxNTQwLDE1NDEKPCAgIGdkYmFyY2gg PSBnZGJhcmNoX2FsbG9jICgmaW5mbywgMCk7Ci0tLQo+ICAgdGRlcCA9IHhj YWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBnZGJhcmNoX3RkZXApKTsKPiAgIGdk YmFyY2ggPSBnZGJhcmNoX2FsbG9jICgmaW5mbywgdGRlcCk7CjEwMzRhMTU0 OAo+ICNpZiBXSVRIX1NJTQoxMDM1YTE1NTAKPiAjZW5kaWYKMTAzOCwxMDQw YzE1NTMKPCAgIHNldF9nZGJhcmNoX251bV9yZWdzIChnZGJhcmNoLCBTQ09S RV9OVU1fUkVHUyk7CjwgICBzZXRfZ2RiYXJjaF9yZWdpc3Rlcl9uYW1lIChn ZGJhcmNoLCBzY29yZV9yZWdpc3Rlcl9uYW1lKTsKPCAgIHNldF9nZGJhcmNo X2JyZWFrcG9pbnRfZnJvbV9wYyAoZ2RiYXJjaCwgc2NvcmVfYnJlYWtwb2lu dF9mcm9tX3BjKTsKLS0tCj4gICBzZXRfZ2RiYXJjaF9hZGp1c3RfYnJlYWtw b2ludF9hZGRyZXNzIChnZGJhcmNoLCBzY29yZV9hZGp1c3RfYnJlYWtwb2lu dF9hZGRyZXNzKTsKMTA0NGQxNTU2CjwgICBzZXRfZ2RiYXJjaF91bndpbmRf cGMgKGdkYmFyY2gsIHNjb3JlX3Vud2luZF9wYyk7CjEwNDVhMTU1OAo+ICAg c2V0X2dkYmFyY2hfdW53aW5kX3BjIChnZGJhcmNoLCBzY29yZV91bndpbmRf cGMpOwoxMDQ3LDEwNDhjMTU2MCwxNTgwCjwgICBzZXRfZ2RiYXJjaF9za2lw X3Byb2xvZ3VlIChnZGJhcmNoLCBzY29yZV9za2lwX3Byb2xvZ3VlKTsKPCAg IHNldF9nZGJhcmNoX2luX2Z1bmN0aW9uX2VwaWxvZ3VlX3AgKGdkYmFyY2gs IHNjb3JlX2luX2Z1bmN0aW9uX2VwaWxvZ3VlX3ApOwotLS0KPiAKPiAgIHN3 aXRjaCAodGFyZ2V0X21hY2gpCj4gICAgIHsKPiAgICAgY2FzZSBiZmRfbWFj aF9zY29yZTc6Cj4gICAgICAgc2V0X2dkYmFyY2hfYnJlYWtwb2ludF9mcm9t X3BjIChnZGJhcmNoLCBzY29yZTdfYnJlYWtwb2ludF9mcm9tX3BjKTsKPiAg ICAgICBzZXRfZ2RiYXJjaF9za2lwX3Byb2xvZ3VlIChnZGJhcmNoLCBzY29y ZTdfc2tpcF9wcm9sb2d1ZSk7Cj4gICAgICAgc2V0X2dkYmFyY2hfaW5fZnVu Y3Rpb25fZXBpbG9ndWVfcCAoZ2RiYXJjaCwgc2NvcmU3X2luX2Z1bmN0aW9u X2VwaWxvZ3VlX3ApOwo+ICAgICAgIHNldF9nZGJhcmNoX3JlZ2lzdGVyX25h bWUgKGdkYmFyY2gsIHNjb3JlN19yZWdpc3Rlcl9uYW1lKTsKPiAgICAgICBz ZXRfZ2RiYXJjaF9udW1fcmVncyAoZ2RiYXJjaCwgU0NPUkU3X05VTV9SRUdT KTsKPiAgICAgICAvKiBDb3JlIGZpbGUgc3VwcG9ydC4gKi8KPiAgICAgICBz ZXRfZ2RiYXJjaF9yZWdzZXRfZnJvbV9jb3JlX3NlY3Rpb24gKGdkYmFyY2gs IHNjb3JlN19saW51eF9yZWdzZXRfZnJvbV9jb3JlX3NlY3Rpb24pOwo+ICAg ICAgIGJyZWFrOwo+IAo+ICAgICBjYXNlIGJmZF9tYWNoX3Njb3JlMzoKPiAg ICAgICBzZXRfZ2RiYXJjaF9icmVha3BvaW50X2Zyb21fcGMgKGdkYmFyY2gs IHNjb3JlM19icmVha3BvaW50X2Zyb21fcGMpOwo+ICAgICAgIHNldF9nZGJh cmNoX3NraXBfcHJvbG9ndWUgKGdkYmFyY2gsIHNjb3JlM19za2lwX3Byb2xv Z3VlKTsKPiAgICAgICBzZXRfZ2RiYXJjaF9pbl9mdW5jdGlvbl9lcGlsb2d1 ZV9wIChnZGJhcmNoLCBzY29yZTNfaW5fZnVuY3Rpb25fZXBpbG9ndWVfcCk7 Cj4gICAgICAgc2V0X2dkYmFyY2hfcmVnaXN0ZXJfbmFtZSAoZ2RiYXJjaCwg c2NvcmUzX3JlZ2lzdGVyX25hbWUpOwo+ICAgICAgIHNldF9nZGJhcmNoX251 bV9yZWdzIChnZGJhcmNoLCBTQ09SRTNfTlVNX1JFR1MpOwo+ICAgICAgIGJy ZWFrOwo+ICAgICB9CkluZGV4OiBnZGIvc2NvcmUtdGRlcC5oCj09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvc3JjL3NyYy9nZGIvc2Nv cmUtdGRlcC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjUKZGlmZiAtcjEu NSBzY29yZS10ZGVwLmgKNDFjNDEsNDIKPCAjZGVmaW5lIFNDT1JFX05VTV9S RUdTICAgICAgICAgNTYKLS0tCj4gI2RlZmluZSBTQ09SRTdfTlVNX1JFR1Mg ICAgICAgICA1Ngo+ICNkZWZpbmUgU0NPUkUzX05VTV9SRUdTICAgICAgICAg NTAKNDdhNDksMTUxCj4gLyogRm9yd2FyZCBkZWNsYXJhdGlvbnMuICovCj4g c3RydWN0IHJlZ3NldDsKPiAKPiAvKiBUYXJnZXQtZGVwZW5kZW50IHN0cnVj dHVyZSBpbiBnZGJhcmNoICovCj4gc3RydWN0IGdkYmFyY2hfdGRlcAo+IHsK PiAgICAgLyogQ2FjaGVkIGNvcmUgZmlsZSBoZWxwZXJzLiAqLwo+ICAgICBz dHJ1Y3QgcmVnc2V0ICpncmVnc2V0Owo+IH07Cj4gCj4gLyogTGludXggQ29y ZSBmaWxlIHN1cHBvcnQgKGRpcnR5IGhhY2spCj4gICAKPiAgICBTK2NvcmUg TGludXggcmVnaXN0ZXIgc2V0IGRlZmluaXRpb24sIGNvcHkgZnJvbSBTK2Nv cmUgTGludXggKi8KPiBzdHJ1Y3QgcHRfcmVncyB7Cj4gICAgIC8qIFBhZCBi eXRlcyBmb3IgYXJndW1lbnQgc2F2ZSBzcGFjZSBvbiB0aGUgc3RhY2suICov Cj4gICAgIHVuc2lnbmVkIGxvbmcgcGFkMFs2XTsgLyogbWF5IGJlIDQsTUlQ UyBhY2NlcHQgNnZhcixTQ29yZSBhY2NlcHRzIDQgVmFyLS15dWNoZW4gKi8K PiAKPiAgICAgLyogU2F2ZWQgbWFpbiBwcm9jZXNzb3IgcmVnaXN0ZXJzLiAq Lwo+ICAgICB1bnNpZ25lZCBsb25nIG9yaWdfcjQ7Cj4gICAgIHVuc2lnbmVk IGxvbmcgcmVnc1szMl07Cj4gCj4gICAgIC8qIE90aGVyIHNhdmVkIHJlZ2lz dGVycy4gKi8KPiAgICAgdW5zaWduZWQgbG9uZyBjZWw7Cj4gICAgIHVuc2ln bmVkIGxvbmcgY2VoOwo+IAo+ICAgICB1bnNpZ25lZCBsb25nIHNyMDsgIC8q Y250Ki8KPiAgICAgdW5zaWduZWQgbG9uZyBzcjE7ICAvKmxjciovCj4gICAg IHVuc2lnbmVkIGxvbmcgc3IyOyAgLypzY3IqLwo+IAo+ICAgICAvKiBzYXZl ZCBjcDAgcmVnaXN0ZXJzICovCj4gICAgIHVuc2lnbmVkIGxvbmcgY3AwX2Vw YzsKPiAgICAgdW5zaWduZWQgbG9uZyBjcDBfZW1hOwo+ICAgICB1bnNpZ25l ZCBsb25nIGNwMF9wc3I7Cj4gICAgIHVuc2lnbmVkIGxvbmcgY3AwX2VjcjsK PiAgICAgdW5zaWduZWQgbG9uZyBjcDBfY29uZGl0aW9uOwo+IH07Cj4gCj4g dHlwZWRlZiBzdHJ1Y3QgcHRfcmVncyBlbGZfZ3JlZ3NldF90Owo+IAo+ICNp ZmRlZiBXSVRIX1NJTQo+IAo+ICNpbmNsdWRlIDxicmVha3BvaW50Lmg+Cj4g Cj4gaW50IHNvY19naF9jYW5fdXNlX3dhdGNoKGludCB0eXBlLCBpbnQgY250 KTsKPiBpbnQgc29jX2doX2FkZF93YXRjaCh1bnNpZ25lZCBpbnQgYWRkciwg aW50IGxlbiwgaW50IHR5cGUpOwo+IGludCBzb2NfZ2hfZGVsX3dhdGNoKHVu c2lnbmVkIGludCBhZGRyLCBpbnQgbGVuLCBpbnQgdHlwZSk7Cj4gaW50IHNv Y19naF9zdG9wcGVkX2J5X3dhdGNoKHZvaWQpOwo+IGludCBzb2NfZ2hfYWRk X2hhcmRicCh1bnNpZ25lZCBpbnQgYWRkcik7IAo+IGludCBzb2NfZ2hfZGVs X2hhcmRicCh1bnNpZ25lZCBpbnQgYWRkcik7IAo+IAo+IGludCBzY29yZV90 YXJnZXRfY2FuX3VzZV93YXRjaChpbnQgdHlwZSwgaW50IGNudCwgaW50IG90 KTsKPiBpbnQgc2NvcmVfc3RvcHBlZF9ieV93YXRjaCh2b2lkKTsKPiBpbnQg c2NvcmVfdGFyZ2V0X2luc2VydF93YXRjaHBvaW50IChDT1JFX0FERFIgYWRk ciwgaW50IGxlbiwgaW50IHR5cGUpOwo+IGludCBzY29yZV90YXJnZXRfcmVt b3ZlX3dhdGNocG9pbnQgKENPUkVfQUREUiBhZGRyLCBpbnQgbGVuLCBpbnQg dHlwZSk7Cj4gaW50IHNjb3JlX3RhcmdldF9pbnNlcnRfaHdfYnJlYWtwb2lu dCAoc3RydWN0IGJwX3RhcmdldF9pbmZvICogYnBfdGd0KTsKPiBpbnQgc2Nv cmVfdGFyZ2V0X3JlbW92ZV9od19icmVha3BvaW50IChzdHJ1Y3QgYnBfdGFy Z2V0X2luZm8gKiBicF90Z3QpOwo+IAo+ICNkZWZpbmUgVEFSR0VUX0hBU19I QVJEV0FSRV9XQVRDSFBPSU5UUwo+IAo+ICNpZmRlZiBUQVJHRVRfQ0FOX1VT RV9IQVJEV0FSRV9XQVRDSFBPSU5UCj4gI3VuZGVmIFRBUkdFVF9DQU5fVVNF X0hBUkRXQVJFX1dBVENIUE9JTlQKPiAKPiAjZGVmaW5lIFRBUkdFVF9DQU5f VVNFX0hBUkRXQVJFX1dBVENIUE9JTlQodHlwZSwgY250LCBvdCkgXAo+ICAg ICBzY29yZV90YXJnZXRfY2FuX3VzZV93YXRjaCh0eXBlLCBjbnQsIG90KQo+ ICNlbmRpZgo+IAo+ICNpZmRlZiBTVE9QUEVEX0JZX1dBVENIUE9JTlQKPiAj dW5kZWYgU1RPUFBFRF9CWV9XQVRDSFBPSU5UCj4gCj4gI2RlZmluZSBTVE9Q UEVEX0JZX1dBVENIUE9JTlQodykgXAo+ICAgICBzY29yZV9zdG9wcGVkX2J5 X3dhdGNoKCkKPiAjZW5kaWYKPiAKPiAjaWZkZWYgdGFyZ2V0X2luc2VydF93 YXRjaHBvaW50Cj4gI3VuZGVmIHRhcmdldF9pbnNlcnRfd2F0Y2hwb2ludAo+ IAo+ICNkZWZpbmUgdGFyZ2V0X2luc2VydF93YXRjaHBvaW50KGFkZHIsIGxl biwgdHlwZSkgXAo+ICAgICBzY29yZV90YXJnZXRfaW5zZXJ0X3dhdGNocG9p bnQgKGFkZHIsIGxlbiwgdHlwZSkKPiAjZW5kaWYKPiAKPiAjaWZkZWYgdGFy Z2V0X3JlbW92ZV93YXRjaHBvaW50Cj4gI3VuZGVmIHRhcmdldF9yZW1vdmVf d2F0Y2hwb2ludAo+IAo+ICNkZWZpbmUgdGFyZ2V0X3JlbW92ZV93YXRjaHBv aW50KGFkZHIsIGxlbiwgdHlwZSkgXAo+ICAgICBzY29yZV90YXJnZXRfcmVt b3ZlX3dhdGNocG9pbnQgKGFkZHIsIGxlbiwgdHlwZSkKPiAjZW5kaWYKPiAK PiAjaWZkZWYgdGFyZ2V0X2luc2VydF9od19icmVha3BvaW50Cj4gI3VuZGVm IHRhcmdldF9pbnNlcnRfaHdfYnJlYWtwb2ludAo+IAo+ICNkZWZpbmUgdGFy Z2V0X2luc2VydF9od19icmVha3BvaW50KGJwX3RndCkgXAo+ICAgICBzY29y ZV90YXJnZXRfaW5zZXJ0X2h3X2JyZWFrcG9pbnQgKGJwX3RndCkKPiAjZW5k aWYKPiAKPiAjaWZkZWYgdGFyZ2V0X3JlbW92ZV9od19icmVha3BvaW50Cj4g I3VuZGVmIHRhcmdldF9yZW1vdmVfaHdfYnJlYWtwb2ludAo+IAo+ICNkZWZp bmUgdGFyZ2V0X3JlbW92ZV9od19icmVha3BvaW50KGJwX3RndCkgXAo+ICAg ICBzY29yZV90YXJnZXRfcmVtb3ZlX2h3X2JyZWFrcG9pbnQgKGJwX3RndCkK PiAjZW5kaWYKPiAKPiAjZW5kaWYgLyogV0lUSF9TSU0gKi8KPiAK --=_mixed 000A91444825757C_=--