Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1vH2G6-00Bx5r-Hj for pgsql-hackers@arkaria.postgresql.org; Thu, 06 Nov 2025 15:50:46 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1vH2G3-008wMd-RZ for pgsql-hackers@arkaria.postgresql.org; Thu, 06 Nov 2025 15:50:42 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1vH2G3-008wMT-9H for pgsql-hackers@lists.postgresql.org; Thu, 06 Nov 2025 15:50:42 +0000 Received: from mail-qk1-x72b.google.com ([2607:f8b0:4864:20::72b]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vH2Fz-006KZm-26 for pgsql-hackers@lists.postgresql.org; Thu, 06 Nov 2025 15:50:42 +0000 Received: by mail-qk1-x72b.google.com with SMTP id af79cd13be357-88fbbec670aso15637285a.0 for ; Thu, 06 Nov 2025 07:50:38 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1762444237; x=1763049037; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=JjI5NO9L+indwGj8I/K4VMKAP+Qf9E8kYXaekdiZuow=; b=kNUlUrjNPm8SOcvvZ72evpys1yUmuXgFQxF+gMwaAp9gB6noMUavL8Jv1rXTbOLxFs REftCWXDGiaM4HPKQY3XbwMzKOvzOQ2eQ+LneY1I+Z5HkmDIL8GUJE9GKVIIXHRwiX0Q DChsnXq3pTgOpnCHNS+3c/3CQd2Px6LCSruAUA9opYcZiXA4lKYePMqslHoaCN8bi8OY Ck7JULNGPDJxF8Z6uNhWH29ogzL42+iDlmiPyCqhgGKZr158lVQ38j7capTpy87Vsdz8 CNOKTaeeoUwRnwanNns/0aQ5Pp4g7sz96awUWvG9oOFyNgshdZz0ddShk0Nv/D16eva2 UBeA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1762444237; x=1763049037; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=JjI5NO9L+indwGj8I/K4VMKAP+Qf9E8kYXaekdiZuow=; b=Vx0RzjY8QWj5dt2+niqONvf/9c8TkxUS+4D6mVKH09FvJ9XqrggciPx+MA4MU3sWHm fEgHWjoyvlFdik2md9qTUL1ijCp1eTLt0/L9j7lorB3QqzHakZOWFZhgMOP65zMlvYhh GLb2UZGmV9wPx/DHKR4n+Q96SjljFLeK3OEKGJuq/AvXAxEBFXAWb/+UHXQ17Ah2D73b YOkcr6+BnZxX1XaMY3TsuId6ZwG8OzwFw1H/9gjssu+Lv4a6bRN02ypCRZgeB/1rUhrh yiU18rll15KZbT06jr4DaskpsIiWVzIpG2NpfzYJ01cAOsXyqbjxfLMHYHUeoSYLlDR/ qI3Q== X-Forwarded-Encrypted: i=1; AJvYcCWZk8ear/QSH54blg7+ShQ+2goLazwp+q/uqxXFLsuqrl4+dY16ewbbqxs3aT7088WY6LgD6Zm7oJHBC/nS@lists.postgresql.org X-Gm-Message-State: AOJu0YwfSBIm4JPsgdqrE8E8U5IqOO3nfPlipUi+8CqwMVnKSydhWl0z caIywVT+wQUspW8N6He++DG4e15PTvJ2thNVJg5x25huEi7HIdktBIzLV5FRVQxYpaj3rGKLp0v VvgFoktcZnPjA5A4cOkTOFyc8Dr3Tvww= X-Gm-Gg: ASbGncurEtGi91VrzJ2fDV8S0N8IN1VZrmvtqQzWPlYotk9DICkMWPr6m7Tl2jk2Uux 1IdszToInEWzsj8ipCDBfHlfwl85BTV7XTcgiPxipCS7fYASvQMN5SPs+kQu5bcmwBO2NtuPXgg zbWzyrNIAyyVTYTiyr1UrgHZWVpkXM54i2iDDZvwg7PcgNWi28L0D88w/5v6CxM82oqPMAS5kaG OLTN5bT7P7gxjIGVVEs6tLRSTrDKCX3r4e7/bGSP/6ZmghRXlO15ekSFlyd X-Google-Smtp-Source: AGHT+IHQKRT0AgB1s7mASxoRlCAUgl3tPaJ4y5+Vxd+aeGD/WJ9TTLRPDLWucDfvwwfVNA51G15FsANJ15koTg5ezPQ= X-Received: by 2002:ac8:5a87:0:b0:4ed:154:1a70 with SMTP id d75a77b69052e-4ed725dedb6mr59102181cf.12.1762444236621; Thu, 06 Nov 2025 07:50:36 -0800 (PST) MIME-Version: 1.0 References: <0794857c-aaaf-4cd3-bd99-84c6155bb2f6@iki.fi> In-Reply-To: From: Maxim Orlov Date: Thu, 6 Nov 2025 18:50:23 +0300 X-Gm-Features: AWmQ_bkHAU_RKjYwy-KIc98zo8bnFAgesLkVoCn7tq5M61zsSyRtoPiX-_ZRcY4 Message-ID: Subject: Re: POC: make mxidoff 64 bits To: Heikki Linnakangas Cc: wenhui qiu , Alexander Korotkov , Ashutosh Bapat , Postgres hackers Content-Type: multipart/mixed; boundary="000000000000a9529e0642ef063c" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000a9529e0642ef063c Content-Type: multipart/alternative; boundary="000000000000a9529c0642ef063a" --000000000000a9529c0642ef063a Content-Type: text/plain; charset="UTF-8" On Wed, 5 Nov 2025 at 18:38, Heikki Linnakangas wrote: > > Remaining issues: > > - There's one more refactoring I'd like to do before merging this: Move > the definitions that are now duplicated between > src/bin/pg_upgrade/multixact_new.c and > src/backend/access/transam/multixact.c into a new header file, > multixact_internal.h. One complication with that is that it needs > SLRU_PAGES_PER_SEGMENT ... Done. Also put SLRU_PAGES_PER_SEGMENT in pg_config_manual.h In my opinion, this constant perfectly aligns the description in the file header. In any case, feel free to move it anywhere you like. - Have you done any performance testing of the pg_upgrade code? How long > does the conversion take if you have e.g. 1 billion multixids? > Unfortunately, not yet. I'd like to do this soon. Currently, the bulk of the testing time is spent generating multi-transactions. - Is the !oldestOffsetKnown case in the code still reachable? I left one > FIXME comment about that. Needs a comment update at least. > Yep, no longer needed. A separate commit has been added. - The new pg_upgrade test fails on my system with this error in the log: Unfortunately, I don't face this issue. I think this can be fixed by providing an explicit path to the utility. - The new pg_ugprade test is very slow. I would love to include that > test permanently in the test suite, but it's too slow for that currently. Yes, unfortunately. The majority of the time is spent on tests that produce multiple segments. These are cases numbered 4-th and higher. If we remove these, the testing should be relatively fast. I also add commit "Handle wraparound of next new multi in pg_upgrade". Per BUG #18863 and BUG #18865 The issue is that pg_upgrade neglects to handle the wraparound of mxact/mxoff. We'll obviously resolve the issue with mxoff wraparound by moving to 64-bits. And the mxact bug can be easily solved with two lines of code. Or five if you count indents and comments. Test also provided. This commit is totally optional. If you think it deserves to be treated as a different issue, feel free to discard it. -- Best regards, Maxim Orlov. --000000000000a9529c0642ef063a Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable

On Wed, 5 Nov 2025 = at 18:38, Heikki Linnakangas <hlinnak= a@iki.fi> wrote:

Remaining issues:

- There's one more refactoring I'd like to do before merging this: = Move
the definitions that are now duplicated between
src/bin/pg_upgrade/multixact_new.c and
src/backend/access/transam/multixact.c into a new header file,
multixact_internal.h. One complication with that is that it needs
SLRU_PAGES_PER_SEGMENT ...
Done. Also put=C2=A0SLRU_PAGES_= PER_SEGMENT in=C2=A0pg_config_manual.h
In my opinion, this consta= nt perfectly aligns the description in the
file header. In any ca= se, feel free to move it anywhere you like.
=C2=A0

=
- Have you done any performance testing of the pg_upgrade code? How long does the conversion take if you have e.g. 1 billion multixids?
Unfortunately, not yet. I'd like to do this soon. Currently, t= he
bulk of the testing time is spent generating multi-transactions.
=C2=A0

- Is the !oldestOffsetKnown case in the code still reachable? I left one FIXME comment about that. Needs a comment update at least.
=
Yep, no longer=C2=A0needed.=C2=A0A = separate commit has been added.


- The new pg_upgrade test fails on my system with this error in the log:
Unfortunately, I don't face this issue. I think this can= be fixed by
providing an explicit path to the utility.=C2=A0
= =C2=A0

--
Be= st regards,
Maxim Orlov.
--000000000000a9529c0642ef063a-- --000000000000a9529e0642ef063c Content-Type: text/plain; charset="US-ASCII"; name="v23-0006-TEST-bump-catversion.patch.txt" Content-Disposition: attachment; filename="v23-0006-TEST-bump-catversion.patch.txt" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mhnlrz7n5 RnJvbSA2OTk5N2NmZDI3N2NlMjM3N2QzNTk5ZDc0MjZmYjhjODNhNzhjZjQwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbSBPcmxvdiA8b3Jsb3ZtZ0BnbWFpbC5jb20+CkRhdGU6 IEZyaSwgMjQgT2N0IDIwMjUgMTE6NDc6NTAgKzAzMDAKU3ViamVjdDogW1BBVENIIHYyMyA2Lzdd IFRFU1Q6IGJ1bXAgY2F0dmVyc2lvbgoKVG8gYXZvaWQgY29uc3RhbnQgQ0YtYm90IGNvbXBsYWlu cywgbWFrZSBjYXR2ZXJzaW9uIGJ1bXAgaW4gYSBzZXBhcmF0ZQpjb21taXQuCgpOT1RFOiBrZWVw IGl0IGluIHN5bmMgd2l0aCBNVUxUSVhBQ1RPRkZTRVRfRk9STUFUQ0hBTkdFX0NBVF9WRVIKLS0t CiBzcmMvaW5jbHVkZS9jYXRhbG9nL2NhdHZlcnNpb24uaCB8IDIgKy0KIDEgZmlsZSBjaGFuZ2Vk LCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L2NhdGFsb2cvY2F0dmVyc2lvbi5oIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9jYXR2ZXJzaW9uLmgK aW5kZXggNTkzYWVkN2ZlMjEuLjZhMTNmYTNjZGIwIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9j YXRhbG9nL2NhdHZlcnNpb24uaAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL2NhdHZlcnNpb24u aApAQCAtNTcsNiArNTcsNiBAQAogICovCiAKIC8qCQkJCQkJCXl5eXltbWRkTiAqLwotI2RlZmlu ZSBDQVRBTE9HX1ZFUlNJT05fTk8JMjAyNTExMDUxCisjZGVmaW5lIENBVEFMT0dfVkVSU0lPTl9O Twk5OTk5OTk5OTkKIAogI2VuZGlmCi0tIAoyLjUxLjAKCg== --000000000000a9529e0642ef063c Content-Type: application/octet-stream; name="v23-0001-Use-64-bit-multixact-offsets.patch" Content-Disposition: attachment; filename="v23-0001-Use-64-bit-multixact-offsets.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mhnlrz6u0 RnJvbSAxMzJiZjEwMzcyOGMzZWIxNjA1YWMwNGI0ODhiNDFjMWVkYzkwODUyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbSBPcmxvdiA8b3Jsb3ZtZ0BnbWFpbC5jb20+CkRhdGU6 IFdlZCwgNyBBdWcgMjAyNCAxNjozNToyMiArMDMwMApTdWJqZWN0OiBbUEFUQ0ggdjIzIDEvN10g VXNlIDY0LWJpdCBtdWx0aXhhY3Qgb2Zmc2V0cwoKU3dpdGNoaW5nIHRvIDY0LWJpdCBtdWx0aXRy YW5zYWN0aW9uIG9mZnNldHMgcmVtb3ZlcyB3cmFwYXJvdW5kIGFuZCB0aGUKMl4zMiBsaW1pdCBv biB0aGVpciB0b3RhbCBudW1iZXIuCgpBdXRob3I6IE1heGltIE9ybG92IDxvcmxvdm1nQGdtYWls LmNvbT4KRGlzY3Vzc2lvbjogRklYTUUKLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2Mv bXhhY3RkZXNjLmMgICB8ICAgNCArLQogc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL3hsb2dk ZXNjLmMgICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL211bHRpeGFjdC5j ICAgIHwgNTAwICsrKy0tLS0tLS0tLS0tLS0tLS0tLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFu c2FtL3hsb2cuYyAgICAgICAgIHwgICAyICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94 bG9ncmVjb3ZlcnkuYyB8ICAgMiArLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvdmFjdXVtLmMgICAg ICAgICAgICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYXV0b3ZhY3V1bS5jICAg ICAgIHwgICA0ICstCiBzcmMvYmluL3BnX2NvbnRyb2xkYXRhL3BnX2NvbnRyb2xkYXRhLmMgICB8 ICAgMiArLQogc3JjL2Jpbi9wZ19yZXNldHdhbC9wZ19yZXNldHdhbC5jICAgICAgICAgfCAgIDYg Ky0KIHNyYy9iaW4vcGdfcmVzZXR3YWwvdC8wMDFfYmFzaWMucGwgICAgICAgIHwgICAyICstCiBz cmMvaW5jbHVkZS9hY2Nlc3MvbXVsdGl4YWN0LmggICAgICAgICAgICB8ICAgMyAtCiBzcmMvaW5j bHVkZS9hY2Nlc3MvbXVsdGl4YWN0X2ludGVybmFsLmggICB8IDEwOSArKysrKwogc3JjL2luY2x1 ZGUvYWNjZXNzL3NscnUuaCAgICAgICAgICAgICAgICAgfCAgMTUgLQogc3JjL2luY2x1ZGUvYy5o ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDIgKy0KIHNyYy9pbmNsdWRlL3BnX2NvbmZp Z19tYW51YWwuaCAgICAgICAgICAgIHwgIDE1ICsKIDE1IGZpbGVzIGNoYW5nZWQsIDE5NSBpbnNl cnRpb25zKCspLCA0NzUgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2luY2x1 ZGUvYWNjZXNzL211bHRpeGFjdF9pbnRlcm5hbC5oCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv YWNjZXNzL3JtZ3JkZXNjL214YWN0ZGVzYy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNj L214YWN0ZGVzYy5jCmluZGV4IDNjYTA1ODJkYjM2Li4wNTJkZDBhNGNlNSAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL214YWN0ZGVzYy5jCisrKyBiL3NyYy9iYWNrZW5k L2FjY2Vzcy9ybWdyZGVzYy9teGFjdGRlc2MuYwpAQCAtNjUsNyArNjUsNyBAQCBtdWx0aXhhY3Rf ZGVzYyhTdHJpbmdJbmZvIGJ1ZiwgWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpCiAJCXhsX211bHRp eGFjdF9jcmVhdGUgKnhscmVjID0gKHhsX211bHRpeGFjdF9jcmVhdGUgKikgcmVjOwogCQlpbnQJ CQlpOwogCi0JCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiJXUgb2Zmc2V0ICV1IG5tZW1iZXJzICVk OiAiLCB4bHJlYy0+bWlkLAorCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiV1IG9mZnNldCAlIiBQ Ukl1NjQgIiBubWVtYmVycyAlZDogIiwgeGxyZWMtPm1pZCwKIAkJCQkJCSB4bHJlYy0+bW9mZiwg eGxyZWMtPm5tZW1iZXJzKTsKIAkJZm9yIChpID0gMDsgaSA8IHhscmVjLT5ubWVtYmVyczsgaSsr KQogCQkJb3V0X21lbWJlcihidWYsICZ4bHJlYy0+bWVtYmVyc1tpXSk7CkBAIC03NCw3ICs3NCw3 IEBAIG11bHRpeGFjdF9kZXNjKFN0cmluZ0luZm8gYnVmLCBYTG9nUmVhZGVyU3RhdGUgKnJlY29y ZCkKIAl7CiAJCXhsX211bHRpeGFjdF90cnVuY2F0ZSAqeGxyZWMgPSAoeGxfbXVsdGl4YWN0X3Ry dW5jYXRlICopIHJlYzsKIAotCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIm9mZnNldHMgWyV1LCAl dSksIG1lbWJlcnMgWyV1LCAldSkiLAorCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIm9mZnNldHMg WyV1LCAldSksIG1lbWJlcnMgWyUiIFBSSXU2NCAiLCAlIiBQUkl1NjQgIikiLAogCQkJCQkJIHhs cmVjLT5zdGFydFRydW5jT2ZmLCB4bHJlYy0+ZW5kVHJ1bmNPZmYsCiAJCQkJCQkgeGxyZWMtPnN0 YXJ0VHJ1bmNNZW1iLCB4bHJlYy0+ZW5kVHJ1bmNNZW1iKTsKIAl9CmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MveGxvZ2Rlc2MuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9y bWdyZGVzYy94bG9nZGVzYy5jCmluZGV4IGNkNmMyYTJmNjUwLi40NDEwMzRmNTkyOSAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL3hsb2dkZXNjLmMKKysrIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL3JtZ3JkZXNjL3hsb2dkZXNjLmMKQEAgLTY2LDcgKzY2LDcgQEAgeGxvZ19k ZXNjKFN0cmluZ0luZm8gYnVmLCBYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCkKIAkJQ2hlY2tQb2lu dCAqY2hlY2twb2ludCA9IChDaGVja1BvaW50ICopIHJlYzsKIAogCQlhcHBlbmRTdHJpbmdJbmZv KGJ1ZiwgInJlZG8gJVgvJTA4WDsgIgotCQkJCQkJICJ0bGkgJXU7IHByZXYgdGxpICV1OyBmcHcg JXM7IHdhbF9sZXZlbCAlczsgeGlkICV1OiV1OyBvaWQgJXU7IG11bHRpICV1OyBvZmZzZXQgJXU7 ICIKKwkJCQkJCSAidGxpICV1OyBwcmV2IHRsaSAldTsgZnB3ICVzOyB3YWxfbGV2ZWwgJXM7IHhp ZCAldToldTsgb2lkICV1OyBtdWx0aSAldTsgb2Zmc2V0ICUiIFBSSXU2NCAiOyAiCiAJCQkJCQkg Im9sZGVzdCB4aWQgJXUgaW4gREIgJXU7IG9sZGVzdCBtdWx0aSAldSBpbiBEQiAldTsgIgogCQkJ CQkJICJvbGRlc3QvbmV3ZXN0IGNvbW1pdCB0aW1lc3RhbXAgeGlkOiAldS8ldTsgIgogCQkJCQkJ ICJvbGRlc3QgcnVubmluZyB4aWQgJXU7ICVzIiwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy90cmFuc2FtL211bHRpeGFjdC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vbXVs dGl4YWN0LmMKaW5kZXggOWQ1ZjEzMGFmN2UuLjczMmYwNDhkZjVlIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9tdWx0aXhhY3QuYworKysgYi9zcmMvYmFja2VuZC9hY2Nl c3MvdHJhbnNhbS9tdWx0aXhhY3QuYwpAQCAtNjksNiArNjksNyBAQAogI2luY2x1ZGUgInBvc3Rn cmVzLmgiCiAKICNpbmNsdWRlICJhY2Nlc3MvbXVsdGl4YWN0LmgiCisjaW5jbHVkZSAiYWNjZXNz L211bHRpeGFjdF9pbnRlcm5hbC5oIgogI2luY2x1ZGUgImFjY2Vzcy9zbHJ1LmgiCiAjaW5jbHVk ZSAiYWNjZXNzL3R3b3BoYXNlLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3R3b3BoYXNlX3JtZ3IuaCIK QEAgLTg4LDM1ICs4OSw2IEBACiAjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCiAjaW5jbHVk ZSAidXRpbHMvbWVtdXRpbHMuaCIKIAotCi0vKgotICogRGVmaW5lcyBmb3IgTXVsdGlYYWN0T2Zm c2V0IHBhZ2Ugc2l6ZXMuICBBIHBhZ2UgaXMgdGhlIHNhbWUgQkxDS1NaIGFzIGlzCi0gKiB1c2Vk IGV2ZXJ5d2hlcmUgZWxzZSBpbiBQb3N0Z3Jlcy4KLSAqCi0gKiBOb3RlOiBiZWNhdXNlIE11bHRp WGFjdE9mZnNldHMgYXJlIDMyIGJpdHMgYW5kIHdyYXAgYXJvdW5kIGF0IDB4RkZGRkZGRkYsCi0g KiBNdWx0aVhhY3QgcGFnZSBudW1iZXJpbmcgYWxzbyB3cmFwcyBhcm91bmQgYXQKLSAqIDB4RkZG RkZGRkYvTVVMVElYQUNUX09GRlNFVFNfUEVSX1BBR0UsIGFuZCBzZWdtZW50IG51bWJlcmluZyBh dAotICogMHhGRkZGRkZGRi9NVUxUSVhBQ1RfT0ZGU0VUU19QRVJfUEFHRS9TTFJVX1BBR0VTX1BF Ul9TRUdNRU5ULiAgV2UgbmVlZAotICogdGFrZSBubyBleHBsaWNpdCBub3RpY2Ugb2YgdGhhdCBm YWN0IGluIHRoaXMgbW9kdWxlLCBleGNlcHQgd2hlbiBjb21wYXJpbmcKLSAqIHNlZ21lbnQgYW5k IHBhZ2UgbnVtYmVycyBpbiBUcnVuY2F0ZU11bHRpWGFjdCAoc2VlCi0gKiBNdWx0aVhhY3RPZmZz ZXRQYWdlUHJlY2VkZXMpLgotICovCi0KLS8qIFdlIG5lZWQgZm91ciBieXRlcyBwZXIgb2Zmc2V0 ICovCi0jZGVmaW5lIE1VTFRJWEFDVF9PRkZTRVRTX1BFUl9QQUdFIChCTENLU1ogLyBzaXplb2Yo TXVsdGlYYWN0T2Zmc2V0KSkKLQotc3RhdGljIGlubGluZSBpbnQ2NAotTXVsdGlYYWN0SWRUb09m ZnNldFBhZ2UoTXVsdGlYYWN0SWQgbXVsdGkpCi17Ci0JcmV0dXJuIG11bHRpIC8gTVVMVElYQUNU X09GRlNFVFNfUEVSX1BBR0U7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50Ci1NdWx0aVhhY3RJZFRv T2Zmc2V0RW50cnkoTXVsdGlYYWN0SWQgbXVsdGkpCi17Ci0JcmV0dXJuIG11bHRpICUgTVVMVElY QUNUX09GRlNFVFNfUEVSX1BBR0U7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgaW50NjQKIE11bHRpWGFj dElkVG9PZmZzZXRTZWdtZW50KE11bHRpWGFjdElkIG11bHRpKQogewpAQCAtMTI0LDk0ICs5Niwx MyBAQCBNdWx0aVhhY3RJZFRvT2Zmc2V0U2VnbWVudChNdWx0aVhhY3RJZCBtdWx0aSkKIH0KIAog LyoKLSAqIFRoZSBzaXR1YXRpb24gZm9yIG1lbWJlcnMgaXMgYSBiaXQgbW9yZSBjb21wbGV4OiB3 ZSBzdG9yZSBvbmUgYnl0ZSBvZgotICogYWRkaXRpb25hbCBmbGFnIGJpdHMgZm9yIGVhY2ggVHJh bnNhY3Rpb25JZC4gIFRvIGRvIHRoaXMgd2l0aG91dCBnZXR0aW5nCi0gKiBpbnRvIGFsaWdubWVu dCBpc3N1ZXMsIHdlIHN0b3JlIGZvdXIgYnl0ZXMgb2YgZmxhZ3MsIGFuZCB0aGVuIHRoZQotICog Y29ycmVzcG9uZGluZyA0IFhpZHMuICBFYWNoIHN1Y2ggNS13b3JkICgyMC1ieXRlKSBzZXQgd2Ug Y2FsbCBhICJncm91cCIsIGFuZAotICogYXJlIHN0b3JlZCBhcyBhIHdob2xlIGluIHBhZ2VzLiAg VGh1cywgd2l0aCA4a0IgQkxDS1NaLCB3ZSBrZWVwIDQwOSBncm91cHMKLSAqIHBlciBwYWdlLiAg VGhpcyB3YXN0ZXMgMTIgYnl0ZXMgcGVyIHBhZ2UsIGJ1dCB0aGF0J3MgT0sgLS0gc2ltcGxpY2l0 eSAoYW5kCi0gKiBwZXJmb3JtYW5jZSkgdHJ1bXBzIHNwYWNlIGVmZmljaWVuY3kgaGVyZS4KLSAq Ci0gKiBOb3RlIHRoYXQgdGhlICJvZmZzZXQiIG1hY3JvcyB3b3JrIHdpdGggYnl0ZSBvZmZzZXQs IG5vdCBhcnJheSBpbmRleGVzLCBzbwotICogYXJpdGhtZXRpYyBtdXN0IGJlIGRvbmUgdXNpbmcg ImNoYXIgKiIgcG9pbnRlcnMuCi0gKi8KLS8qIFdlIG5lZWQgZWlnaHQgYml0cyBwZXIgeGFjdCwg c28gb25lIHhhY3QgZml0cyBpbiBhIGJ5dGUgKi8KLSNkZWZpbmUgTVhBQ1RfTUVNQkVSX0JJVFNf UEVSX1hBQ1QJCQk4Ci0jZGVmaW5lIE1YQUNUX01FTUJFUl9GTEFHU19QRVJfQllURQkJCTEKLSNk ZWZpbmUgTVhBQ1RfTUVNQkVSX1hBQ1RfQklUTUFTSwkoKDEgPDwgTVhBQ1RfTUVNQkVSX0JJVFNf UEVSX1hBQ1QpIC0gMSkKLQotLyogaG93IG1hbnkgZnVsbCBieXRlcyBvZiBmbGFncyBhcmUgdGhl cmUgaW4gYSBncm91cD8gKi8KLSNkZWZpbmUgTVVMVElYQUNUX0ZMQUdCWVRFU19QRVJfR1JPVVAJ CTQKLSNkZWZpbmUgTVVMVElYQUNUX01FTUJFUlNfUEVSX01FTUJFUkdST1VQCVwKLQkoTVVMVElY QUNUX0ZMQUdCWVRFU19QRVJfR1JPVVAgKiBNWEFDVF9NRU1CRVJfRkxBR1NfUEVSX0JZVEUpCi0v KiBzaXplIGluIGJ5dGVzIG9mIGEgY29tcGxldGUgZ3JvdXAgKi8KLSNkZWZpbmUgTVVMVElYQUNU X01FTUJFUkdST1VQX1NJWkUgXAotCShzaXplb2YoVHJhbnNhY3Rpb25JZCkgKiBNVUxUSVhBQ1Rf TUVNQkVSU19QRVJfTUVNQkVSR1JPVVAgKyBNVUxUSVhBQ1RfRkxBR0JZVEVTX1BFUl9HUk9VUCkK LSNkZWZpbmUgTVVMVElYQUNUX01FTUJFUkdST1VQU19QRVJfUEFHRSAoQkxDS1NaIC8gTVVMVElY QUNUX01FTUJFUkdST1VQX1NJWkUpCi0jZGVmaW5lIE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9QQUdF CVwKLQkoTVVMVElYQUNUX01FTUJFUkdST1VQU19QRVJfUEFHRSAqIE1VTFRJWEFDVF9NRU1CRVJT X1BFUl9NRU1CRVJHUk9VUCkKLQotLyoKLSAqIEJlY2F1c2UgdGhlIG51bWJlciBvZiBpdGVtcyBw ZXIgcGFnZSBpcyBub3QgYSBkaXZpc29yIG9mIHRoZSBsYXN0IGl0ZW0KLSAqIG51bWJlciAobWVt YmVyIDB4RkZGRkZGRkYpLCB0aGUgbGFzdCBzZWdtZW50IGRvZXMgbm90IHVzZSB0aGUgbWF4aW11 bSBudW1iZXIKLSAqIG9mIHBhZ2VzLCBhbmQgbW9yZW92ZXIgdGhlIGxhc3QgdXNlZCBwYWdlIHRo ZXJlaW4gZG9lcyBub3QgdXNlIHRoZSBzYW1lCi0gKiBudW1iZXIgb2YgaXRlbXMgYXMgcHJldmlv dXMgcGFnZXMuICAoQW5vdGhlciB3YXkgdG8gc2F5IGl0IGlzIHRoYXQgdGhlCi0gKiAweEZGRkZG RkZGIG1lbWJlciBpcyBzb21ld2hlcmUgaW4gdGhlIG1pZGRsZSBvZiB0aGUgbGFzdCBwYWdlLCBz byB0aGUgcGFnZQotICogaGFzIHNvbWUgZW1wdHkgc3BhY2UgYWZ0ZXIgdGhhdCBpdGVtLikKLSAq Ci0gKiBUaGlzIGNvbnN0YW50IGlzIHRoZSBudW1iZXIgb2YgbWVtYmVycyBpbiB0aGUgbGFzdCBw YWdlIG9mIHRoZSBsYXN0IHNlZ21lbnQuCisgKiBNdWx0aXhhY3QgbWVtYmVycyB3YXJuaW5nIHRo cmVzaG9sZC4KKyAqCisgKiBJZiB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIG5leHRPZmZzZXQgYW5k IG9sZGVzdE9mZnNldCBleGNlZWRzIHRoaXMgdmFsdWUsCisgKiB3ZSB0cmlnZ2VyIGF1dG92YWN1 dW0gaW4gb3JkZXIgdG8gcmVsZWFzZSBkaXNrIHNwYWNlIGNvbnN1bWVkIGJ5IHRoZQorICogbWVt YmVycyBTTFJVLgogICovCi0jZGVmaW5lIE1BWF9NRU1CRVJTX0lOX0xBU1RfTUVNQkVSU19QQUdF IFwKLQkJKCh1aW50MzIpICgoMHhGRkZGRkZGRiAlIE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9QQUdF KSArIDEpKQotCi0vKiBwYWdlIGluIHdoaWNoIGEgbWVtYmVyIGlzIHRvIGJlIGZvdW5kICovCi1z dGF0aWMgaW5saW5lIGludDY0Ci1NWE9mZnNldFRvTWVtYmVyUGFnZShNdWx0aVhhY3RPZmZzZXQg b2Zmc2V0KQotewotCXJldHVybiBvZmZzZXQgLyBNVUxUSVhBQ1RfTUVNQkVSU19QRVJfUEFHRTsK LX0KLQotc3RhdGljIGlubGluZSBpbnQ2NAotTVhPZmZzZXRUb01lbWJlclNlZ21lbnQoTXVsdGlY YWN0T2Zmc2V0IG9mZnNldCkKLXsKLQlyZXR1cm4gTVhPZmZzZXRUb01lbWJlclBhZ2Uob2Zmc2V0 KSAvIFNMUlVfUEFHRVNfUEVSX1NFR01FTlQ7Ci19Ci0KLS8qIExvY2F0aW9uIChieXRlIG9mZnNl dCB3aXRoaW4gcGFnZSkgb2YgZmxhZyB3b3JkIGZvciBhIGdpdmVuIG1lbWJlciAqLwotc3RhdGlj IGlubGluZSBpbnQKLU1YT2Zmc2V0VG9GbGFnc09mZnNldChNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0 KQotewotCU11bHRpWGFjdE9mZnNldCBncm91cCA9IG9mZnNldCAvIE1VTFRJWEFDVF9NRU1CRVJT X1BFUl9NRU1CRVJHUk9VUDsKLQlpbnQJCQlncm91cG9ucGcgPSBncm91cCAlIE1VTFRJWEFDVF9N RU1CRVJHUk9VUFNfUEVSX1BBR0U7Ci0JaW50CQkJYnl0ZW9mZiA9IGdyb3Vwb25wZyAqIE1VTFRJ WEFDVF9NRU1CRVJHUk9VUF9TSVpFOwotCi0JcmV0dXJuIGJ5dGVvZmY7Ci19Ci0KLXN0YXRpYyBp bmxpbmUgaW50Ci1NWE9mZnNldFRvRmxhZ3NCaXRTaGlmdChNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0 KQotewotCWludAkJCW1lbWJlcl9pbl9ncm91cCA9IG9mZnNldCAlIE1VTFRJWEFDVF9NRU1CRVJT X1BFUl9NRU1CRVJHUk9VUDsKLQlpbnQJCQlic2hpZnQgPSBtZW1iZXJfaW5fZ3JvdXAgKiBNWEFD VF9NRU1CRVJfQklUU19QRVJfWEFDVDsKLQotCXJldHVybiBic2hpZnQ7Ci19Ci0KLS8qIExvY2F0 aW9uIChieXRlIG9mZnNldCB3aXRoaW4gcGFnZSkgb2YgVHJhbnNhY3Rpb25JZCBvZiBnaXZlbiBt ZW1iZXIgKi8KLXN0YXRpYyBpbmxpbmUgaW50Ci1NWE9mZnNldFRvTWVtYmVyT2Zmc2V0KE11bHRp WGFjdE9mZnNldCBvZmZzZXQpCi17Ci0JaW50CQkJbWVtYmVyX2luX2dyb3VwID0gb2Zmc2V0ICUg TVVMVElYQUNUX01FTUJFUlNfUEVSX01FTUJFUkdST1VQOwotCi0JcmV0dXJuIE1YT2Zmc2V0VG9G bGFnc09mZnNldChvZmZzZXQpICsKLQkJTVVMVElYQUNUX0ZMQUdCWVRFU19QRVJfR1JPVVAgKwot CQltZW1iZXJfaW5fZ3JvdXAgKiBzaXplb2YoVHJhbnNhY3Rpb25JZCk7Ci19Ci0KLS8qIE11bHRp eGFjdCBtZW1iZXJzIHdyYXBhcm91bmQgdGhyZXNob2xkcy4gKi8KLSNkZWZpbmUgTVVMVElYQUNU X01FTUJFUl9TQUZFX1RIUkVTSE9MRAkJKE1heE11bHRpWGFjdE9mZnNldCAvIDIpCi0jZGVmaW5l IE1VTFRJWEFDVF9NRU1CRVJfREFOR0VSX1RIUkVTSE9MRAlcCi0JKE1heE11bHRpWGFjdE9mZnNl dCAtIE1heE11bHRpWGFjdE9mZnNldCAvIDQpCisjZGVmaW5lIE1VTFRJWEFDVF9NRU1CRVJfQVVU T1ZBQ19USFJFU0hPTEQJCVVJTlQ2NENPTlNUKDQwMDAwMDAwMDApCiAKIHN0YXRpYyBpbmxpbmUg TXVsdGlYYWN0SWQKIFByZXZpb3VzTXVsdGlYYWN0SWQoTXVsdGlYYWN0SWQgbXVsdGkpCkBAIC0y NjgsOSArMTU5LDYgQEAgdHlwZWRlZiBzdHJ1Y3QgTXVsdGlYYWN0U3RhdGVEYXRhCiAJTXVsdGlY YWN0SWQgbXVsdGlTdG9wTGltaXQ7CiAJTXVsdGlYYWN0SWQgbXVsdGlXcmFwTGltaXQ7CiAKLQkv KiBzdXBwb3J0IGZvciBtZW1iZXJzIGFudGktd3JhcGFyb3VuZCBtZWFzdXJlcyAqLwotCU11bHRp WGFjdE9mZnNldCBvZmZzZXRTdG9wTGltaXQ7CS8qIGtub3duIGlmIG9sZGVzdE9mZnNldEtub3du ICovCi0KIAkvKgogCSAqIFRoaXMgaXMgdXNlZCB0byBzbGVlcCB1bnRpbCBhIG11bHRpeGFjdCBv ZmZzZXQgaXMgd3JpdHRlbiB3aGVuIHdlIHdhbnQKIAkgKiB0byBjcmVhdGUgdGhlIG5leHQgb25l LgpAQCAtNDAxLDggKzI4OSw2IEBAIHN0YXRpYyBib29sIE11bHRpWGFjdE9mZnNldFByZWNlZGVz KE11bHRpWGFjdE9mZnNldCBvZmZzZXQxLAogCQkJCQkJCQkJTXVsdGlYYWN0T2Zmc2V0IG9mZnNl dDIpOwogc3RhdGljIHZvaWQgRXh0ZW5kTXVsdGlYYWN0T2Zmc2V0KE11bHRpWGFjdElkIG11bHRp KTsKIHN0YXRpYyB2b2lkIEV4dGVuZE11bHRpWGFjdE1lbWJlcihNdWx0aVhhY3RPZmZzZXQgb2Zm c2V0LCBpbnQgbm1lbWJlcnMpOwotc3RhdGljIGJvb2wgTXVsdGlYYWN0T2Zmc2V0V291bGRXcmFw KE11bHRpWGFjdE9mZnNldCBib3VuZGFyeSwKLQkJCQkJCQkJCSBNdWx0aVhhY3RPZmZzZXQgc3Rh cnQsIHVpbnQzMiBkaXN0YW5jZSk7CiBzdGF0aWMgYm9vbCBTZXRPZmZzZXRWYWN1dW1MaW1pdChi b29sIGlzX3N0YXJ0dXApOwogc3RhdGljIGJvb2wgZmluZF9tdWx0aXhhY3Rfc3RhcnQoTXVsdGlY YWN0SWQgbXVsdGksIE11bHRpWGFjdE9mZnNldCAqcmVzdWx0KTsKIHN0YXRpYyB2b2lkIFdyaXRl TVRydW5jYXRlWGxvZ1JlYyhPaWQgb2xkZXN0TXVsdGlEQiwKQEAgLTExNDIsOTAgKzEwMjgsMjIg QEAgR2V0TmV3TXVsdGlYYWN0SWQoaW50IG5tZW1iZXJzLCBNdWx0aVhhY3RPZmZzZXQgKm9mZnNl dCkKIAlFeHRlbmRNdWx0aVhhY3RPZmZzZXQocmVzdWx0KTsKIAogCS8qCi0JICogUmVzZXJ2ZSB0 aGUgbWVtYmVycyBzcGFjZSwgc2ltaWxhcmx5IHRvIGFib3ZlLiAgQWxzbywgYmUgY2FyZWZ1bCBu b3QgdG8KLQkgKiByZXR1cm4gemVybyBhcyB0aGUgc3RhcnRpbmcgb2Zmc2V0IGZvciBhbnkgbXVs dGl4YWN0LiBTZWUKLQkgKiBHZXRNdWx0aVhhY3RJZE1lbWJlcnMoKSBmb3IgbW90aXZhdGlvbi4K KwkgKiBSZXNlcnZlIHRoZSBtZW1iZXJzIHNwYWNlLCBzaW1pbGFybHkgdG8gYWJvdmUuCiAJICov CiAJbmV4dE9mZnNldCA9IE11bHRpWGFjdFN0YXRlLT5uZXh0T2Zmc2V0OwotCWlmIChuZXh0T2Zm c2V0ID09IDApCi0JewotCQkqb2Zmc2V0ID0gMTsKLQkJbm1lbWJlcnMrKzsJCQkJLyogYWxsb2Nh dGUgbWVtYmVyIHNsb3QgMCB0b28gKi8KLQl9Ci0JZWxzZQotCQkqb2Zmc2V0ID0gbmV4dE9mZnNl dDsKLQotCS8qLS0tLS0tLS0tLQotCSAqIFByb3RlY3QgYWdhaW5zdCBvdmVycnVuIG9mIHRoZSBt ZW1iZXJzIHNwYWNlIGFzIHdlbGwsIHdpdGggdGhlCi0JICogZm9sbG93aW5nIHJ1bGVzOgotCSAq Ci0JICogSWYgd2UncmUgcGFzdCBvZmZzZXRTdG9wTGltaXQsIHJlZnVzZSB0byBnZW5lcmF0ZSBt b3JlIG11bHRpcy4KLQkgKiBJZiB3ZSdyZSBjbG9zZSB0byBvZmZzZXRTdG9wTGltaXQsIGVtaXQg YSB3YXJuaW5nLgotCSAqCi0JICogQXJiaXRyYXJpbHksIHdlIHN0YXJ0IGVtaXR0aW5nIHdhcm5p bmdzIHdoZW4gd2UncmUgMjAgc2VnbWVudHMgb3IgbGVzcwotCSAqIGZyb20gb2Zmc2V0U3RvcExp bWl0LgotCSAqCi0JICogTm90ZSB3ZSBoYXZlbid0IHVwZGF0ZWQgdGhlIHNoYXJlZCBzdGF0ZSB5 ZXQsIHNvIGlmIHdlIGZhaWwgYXQgdGhpcwotCSAqIHBvaW50LCB0aGUgbXVsdGl4YWN0IElEIHdl IGdyYWJiZWQgY2FuIHN0aWxsIGJlIHVzZWQgYnkgdGhlIG5leHQgZ3V5LgotCSAqCi0JICogTm90 ZSB0aGF0IHRoZXJlIGlzIG5vIHBvaW50IGluIGZvcmNpbmcgYXV0b3ZhY3V1bSBydW5zIGhlcmU6 IHRoZQotCSAqIG11bHRpeGFjdCBmcmVlemUgc2V0dGluZ3Mgd291bGQgaGF2ZSB0byBiZSByZWR1 Y2VkIGZvciB0aGF0IHRvIGhhdmUgYW55Ci0JICogZWZmZWN0LgotCSAqLS0tLS0tLS0tLQotCSAq LwotI2RlZmluZSBPRkZTRVRfV0FSTl9TRUdNRU5UUwkyMAotCWlmIChNdWx0aVhhY3RTdGF0ZS0+ b2xkZXN0T2Zmc2V0S25vd24gJiYKLQkJTXVsdGlYYWN0T2Zmc2V0V291bGRXcmFwKE11bHRpWGFj dFN0YXRlLT5vZmZzZXRTdG9wTGltaXQsIG5leHRPZmZzZXQsCi0JCQkJCQkJCSBubWVtYmVycykp Ci0JewotCQkvKiBzZWUgY29tbWVudCBpbiB0aGUgY29ycmVzcG9uZGluZyBvZmZzZXRzIHdyYXBh cm91bmQgY2FzZSAqLwotCQlTZW5kUG9zdG1hc3RlclNpZ25hbChQTVNJR05BTF9TVEFSVF9BVVRP VkFDX0xBVU5DSEVSKTsKLQotCQllcmVwb3J0KEVSUk9SLAotCQkJCShlcnJjb2RlKEVSUkNPREVf UFJPR1JBTV9MSU1JVF9FWENFRURFRCksCi0JCQkJIGVycm1zZygibXVsdGl4YWN0IFwibWVtYmVy c1wiIGxpbWl0IGV4Y2VlZGVkIiksCi0JCQkJIGVycmRldGFpbF9wbHVyYWwoIlRoaXMgY29tbWFu ZCB3b3VsZCBjcmVhdGUgYSBtdWx0aXhhY3Qgd2l0aCAldSBtZW1iZXJzLCBidXQgdGhlIHJlbWFp bmluZyBzcGFjZSBpcyBvbmx5IGVub3VnaCBmb3IgJXUgbWVtYmVyLiIsCi0JCQkJCQkJCSAgIlRo aXMgY29tbWFuZCB3b3VsZCBjcmVhdGUgYSBtdWx0aXhhY3Qgd2l0aCAldSBtZW1iZXJzLCBidXQg dGhlIHJlbWFpbmluZyBzcGFjZSBpcyBvbmx5IGVub3VnaCBmb3IgJXUgbWVtYmVycy4iLAotCQkJ CQkJCQkgIE11bHRpWGFjdFN0YXRlLT5vZmZzZXRTdG9wTGltaXQgLSBuZXh0T2Zmc2V0IC0gMSwK LQkJCQkJCQkJICBubWVtYmVycywKLQkJCQkJCQkJICBNdWx0aVhhY3RTdGF0ZS0+b2Zmc2V0U3Rv cExpbWl0IC0gbmV4dE9mZnNldCAtIDEpLAotCQkJCSBlcnJoaW50KCJFeGVjdXRlIGEgZGF0YWJh c2Utd2lkZSBWQUNVVU0gaW4gZGF0YWJhc2Ugd2l0aCBPSUQgJXUgd2l0aCByZWR1Y2VkIFwidmFj dXVtX211bHRpeGFjdF9mcmVlemVfbWluX2FnZVwiIGFuZCBcInZhY3V1bV9tdWx0aXhhY3RfZnJl ZXplX3RhYmxlX2FnZVwiIHNldHRpbmdzLiIsCi0JCQkJCQkgTXVsdGlYYWN0U3RhdGUtPm9sZGVz dE11bHRpWGFjdERCKSkpOwotCX0KIAogCS8qCi0JICogQ2hlY2sgd2hldGhlciB3ZSBzaG91bGQg a2ljayBhdXRvdmFjdXVtIGludG8gYWN0aW9uLCB0byBwcmV2ZW50IG1lbWJlcnMKLQkgKiB3cmFw YXJvdW5kLiBOQiB3ZSB1c2UgYSBtdWNoIGxhcmdlciB3aW5kb3cgdG8gdHJpZ2dlciBhdXRvdmFj dXVtIHRoYW4KLQkgKiBqdXN0IHRoZSB3YXJuaW5nIGxpbWl0LiBUaGUgd2FybmluZyBpcyBqdXN0 IGEgbWVhc3VyZSBvZiBsYXN0IHJlc29ydCAtCi0JICogdGhpcyBpcyBpbiBsaW5lIHdpdGggR2V0 TmV3VHJhbnNhY3Rpb25JZCdzIGJlaGF2aW91ci4KKwkgKiBPZmZzZXRzIGFyZSA2NC1iaXQgaW50 ZWdlcnMgYW5kIHdpbGwgbmV2ZXIgd3JhcCBhcm91bmQuICBGaXJzdGx5LCBpdAorCSAqIHdvdWxk IHRha2UgYW4gdW5yZWFsaXN0aWMgYW1vdW50IG9mIHRpbWUgYW5kIHJlc291cmNlcyB0byBjb25z dW1lIDJeNjQKKwkgKiBvZmZzZXRzLiAgU2Vjb25kbHksIG11bHRpeGlkIGNyZWF0aW9uIGlzIFdB TC1sb2dnZWQsIHNvIHlvdSB3b3VsZCBydW4KKwkgKiBvdXQgb2YgTFNOcyBiZWZvcmUgcmVhY2hp bmcgb2Zmc2V0IHdyYXBhcm91bmQuICBOZXZlcnRoZWxlc3MsIGNoZWNrIGZvcgorCSAqIHdyYXBh cm91bmQgYXMgYSBzYW5pdHkgY2hlY2suCiAJICovCi0JaWYgKCFNdWx0aVhhY3RTdGF0ZS0+b2xk ZXN0T2Zmc2V0S25vd24gfHwKLQkJKE11bHRpWGFjdFN0YXRlLT5uZXh0T2Zmc2V0IC0gTXVsdGlY YWN0U3RhdGUtPm9sZGVzdE9mZnNldAotCQkgPiBNVUxUSVhBQ1RfTUVNQkVSX1NBRkVfVEhSRVNI T0xEKSkKLQl7Ci0JCS8qCi0JCSAqIFRvIGF2b2lkIHN3YW1waW5nIHRoZSBwb3N0bWFzdGVyIHdp dGggc2lnbmFscywgd2UgaXNzdWUgdGhlIGF1dG92YWMKLQkJICogcmVxdWVzdCBvbmx5IHdoZW4g Y3Jvc3NpbmcgYSBzZWdtZW50IGJvdW5kYXJ5LiBXaXRoIGRlZmF1bHQKLQkJICogY29tcGlsYXRp b24gc2V0dGluZ3MgdGhhdCdzIHJvdWdobHkgYWZ0ZXIgNTBrIG1lbWJlcnMuICBUaGlzIHN0aWxs Ci0JCSAqIGdpdmVzIHBsZW50eSBvZiBjaGFuY2VzIGJlZm9yZSB3ZSBnZXQgaW50byByZWFsIHRy b3VibGUuCi0JCSAqLwotCQlpZiAoKE1YT2Zmc2V0VG9NZW1iZXJQYWdlKG5leHRPZmZzZXQpIC8g U0xSVV9QQUdFU19QRVJfU0VHTUVOVCkgIT0KLQkJCShNWE9mZnNldFRvTWVtYmVyUGFnZShuZXh0 T2Zmc2V0ICsgbm1lbWJlcnMpIC8gU0xSVV9QQUdFU19QRVJfU0VHTUVOVCkpCi0JCQlTZW5kUG9z dG1hc3RlclNpZ25hbChQTVNJR05BTF9TVEFSVF9BVVRPVkFDX0xBVU5DSEVSKTsKLQl9Ci0KLQlp ZiAoTXVsdGlYYWN0U3RhdGUtPm9sZGVzdE9mZnNldEtub3duICYmCi0JCU11bHRpWGFjdE9mZnNl dFdvdWxkV3JhcChNdWx0aVhhY3RTdGF0ZS0+b2Zmc2V0U3RvcExpbWl0LAotCQkJCQkJCQkgbmV4 dE9mZnNldCwKLQkJCQkJCQkJIG5tZW1iZXJzICsgTVVMVElYQUNUX01FTUJFUlNfUEVSX1BBR0Ug KiBTTFJVX1BBR0VTX1BFUl9TRUdNRU5UICogT0ZGU0VUX1dBUk5fU0VHTUVOVFMpKQotCQllcmVw b3J0KFdBUk5JTkcsCisJaWYgKG5leHRPZmZzZXQgKyBubWVtYmVycyA8IG5leHRPZmZzZXQpCisJ CWVyZXBvcnQoRVJST1IsCiAJCQkJKGVycmNvZGUoRVJSQ09ERV9QUk9HUkFNX0xJTUlUX0VYQ0VF REVEKSwKLQkJCQkgZXJybXNnX3BsdXJhbCgiZGF0YWJhc2Ugd2l0aCBPSUQgJXUgbXVzdCBiZSB2 YWN1dW1lZCBiZWZvcmUgJWQgbW9yZSBtdWx0aXhhY3QgbWVtYmVyIGlzIHVzZWQiLAotCQkJCQkJ CSAgICJkYXRhYmFzZSB3aXRoIE9JRCAldSBtdXN0IGJlIHZhY3V1bWVkIGJlZm9yZSAlZCBtb3Jl IG11bHRpeGFjdCBtZW1iZXJzIGFyZSB1c2VkIiwKLQkJCQkJCQkgICBNdWx0aVhhY3RTdGF0ZS0+ b2Zmc2V0U3RvcExpbWl0IC0gbmV4dE9mZnNldCArIG5tZW1iZXJzLAotCQkJCQkJCSAgIE11bHRp WGFjdFN0YXRlLT5vbGRlc3RNdWx0aVhhY3REQiwKLQkJCQkJCQkgICBNdWx0aVhhY3RTdGF0ZS0+ b2Zmc2V0U3RvcExpbWl0IC0gbmV4dE9mZnNldCArIG5tZW1iZXJzKSwKLQkJCQkgZXJyaGludCgi RXhlY3V0ZSBhIGRhdGFiYXNlLXdpZGUgVkFDVVVNIGluIHRoYXQgZGF0YWJhc2Ugd2l0aCByZWR1 Y2VkIFwidmFjdXVtX211bHRpeGFjdF9mcmVlemVfbWluX2FnZVwiIGFuZCBcInZhY3V1bV9tdWx0 aXhhY3RfZnJlZXplX3RhYmxlX2FnZVwiIHNldHRpbmdzLiIpKSk7CisJCQkJICJNdWx0aVhhY3Qg bWVtYmVycyB3b3VsZCB3cmFwIGFyb3VuZCIpKTsKKwkqb2Zmc2V0ID0gbmV4dE9mZnNldDsKIAog CUV4dGVuZE11bHRpWGFjdE1lbWJlcihuZXh0T2Zmc2V0LCBubWVtYmVycyk7CiAKQEAgLTEyNDYs OCArMTA2NCw3IEBAIEdldE5ld011bHRpWGFjdElkKGludCBubWVtYmVycywgTXVsdGlYYWN0T2Zm c2V0ICpvZmZzZXQpCiAJICogdGhlIG5leHQgaXRlcmF0aW9uLiAgQnV0IG5vdGUgdGhhdCBuZXh0 TVhhY3QgbWF5IGJlIEludmFsaWRNdWx0aVhhY3RJZAogCSAqIG9yIHRoZSBmaXJzdCB2YWx1ZSBv biBhIHNlZ21lbnQtYmVnaW5uaW5nIHBhZ2UgYWZ0ZXIgdGhpcyByb3V0aW5lCiAJICogZXhpdHMs IHNvIGFueW9uZSBlbHNlIGxvb2tpbmcgYXQgdGhlIHZhcmlhYmxlIG11c3QgYmUgcHJlcGFyZWQg dG8gZGVhbAotCSAqIHdpdGggZWl0aGVyIGNhc2UuICBTaW1pbGFybHksIG5leHRPZmZzZXQgbWF5 IGJlIHplcm8sIGJ1dCB3ZSB3b24ndCB1c2UKLQkgKiB0aGF0IGFzIHRoZSBhY3R1YWwgc3RhcnQg b2Zmc2V0IG9mIHRoZSBuZXh0IG11bHRpeGFjdC4KKwkgKiB3aXRoIGVpdGhlciBjYXNlLgogCSAq LwogCShNdWx0aVhhY3RTdGF0ZS0+bmV4dE1YYWN0KSsrOwogCkBAIC0xMjU1LDcgKzEwNzIsOCBA QCBHZXROZXdNdWx0aVhhY3RJZChpbnQgbm1lbWJlcnMsIE11bHRpWGFjdE9mZnNldCAqb2Zmc2V0 KQogCiAJTFdMb2NrUmVsZWFzZShNdWx0aVhhY3RHZW5Mb2NrKTsKIAotCWRlYnVnX2Vsb2c0KERF QlVHMiwgIkdldE5ldzogcmV0dXJuaW5nICV1IG9mZnNldCAldSIsIHJlc3VsdCwgKm9mZnNldCk7 CisJZGVidWdfZWxvZzQoREVCVUcyLCAiR2V0TmV3OiByZXR1cm5pbmcgJXUgb2Zmc2V0ICUiIFBS SXU2NCwgcmVzdWx0LAorCQkJCSpvZmZzZXQpOwogCXJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTEy OTcsNyArMTExNSw2IEBAIEdldE11bHRpWGFjdElkTWVtYmVycyhNdWx0aVhhY3RJZCBtdWx0aSwg TXVsdGlYYWN0TWVtYmVyICoqbWVtYmVycywKIAlNdWx0aVhhY3RPZmZzZXQgKm9mZnB0cjsKIAlN dWx0aVhhY3RPZmZzZXQgb2Zmc2V0OwogCWludAkJCWxlbmd0aDsKLQlpbnQJCQl0cnVlbGVuZ3Ro OwogCU11bHRpWGFjdElkIG9sZGVzdE1YYWN0OwogCU11bHRpWGFjdElkIG5leHRNWGFjdDsKIAlN dWx0aVhhY3RJZCB0bXBNWGFjdDsKQEAgLTEzOTYsMTYgKzEyMTMsNyBAQCBHZXRNdWx0aVhhY3RJ ZE1lbWJlcnMoTXVsdGlYYWN0SWQgbXVsdGksIE11bHRpWGFjdE1lbWJlciAqKm1lbWJlcnMsCiAJ ICogd2UgaGF2ZSBqdXN0IGZvciB0aGlzOyB0aGUgcHJvY2VzcyBpbiBjaGFyZ2Ugd2lsbCBzaWdu YWwgdGhlIENWIGFzIHNvb24KIAkgKiBhcyBpdCBoYXMgZmluaXNoZWQgd3JpdGluZyB0aGUgbXVs dGl4YWN0IG9mZnNldC4KIAkgKgotCSAqIDMuIEJlY2F1c2UgR2V0TmV3TXVsdGlYYWN0SWQgaW5j cmVtZW50cyBvZmZzZXQgemVybyB0byBvZmZzZXQgb25lIHRvCi0JICogaGFuZGxlIGNhc2UgIzIs IHRoZXJlIGlzIGFuIGFtYmlndWl0eSBuZWFyIHRoZSBwb2ludCBvZiBvZmZzZXQKLQkgKiB3cmFw YXJvdW5kLiAgSWYgd2Ugc2VlIG5leHQgbXVsdGl4YWN0J3Mgb2Zmc2V0IGlzIG9uZSwgaXMgdGhh dCBvdXIKLQkgKiBtdWx0aXhhY3QncyBhY3R1YWwgZW5kcG9pbnQsIG9yIGRpZCBpdCBlbmQgYXQg emVybyB3aXRoIGEgc3Vic2VxdWVudAotCSAqIGluY3JlbWVudD8gIFdlIGhhbmRsZSB0aGlzIHVz aW5nIHRoZSBrbm93bGVkZ2UgdGhhdCBpZiB0aGUgemVybyd0aAotCSAqIG1lbWJlciBzbG90IHdh c24ndCBmaWxsZWQsIGl0J2xsIGNvbnRhaW4gemVybywgYW5kIHplcm8gaXNuJ3QgYSB2YWxpZAot CSAqIHRyYW5zYWN0aW9uIElEIHNvIGl0IGNhbid0IGJlIGEgbXVsdGl4YWN0IG1lbWJlci4gIFRo ZXJlZm9yZSwgaWYgd2UKLQkgKiByZWFkIGEgemVybyBmcm9tIHRoZSBtZW1iZXJzIGFycmF5LCBq dXN0IGlnbm9yZSBpdC4KLQkgKgotCSAqIFRoaXMgaXMgYWxsIHByZXR0eSBtZXNzeSwgYnV0IHRo ZSBtZXNzIG9jY3VycyBvbmx5IGluIGluZnJlcXVlbnQgY29ybmVyCisJICogVGhpcyBpcyBhIGxp dHRsZSBtZXNzeSwgYnV0IHRoZSBtZXNzIG9jY3VycyBvbmx5IGluIGluZnJlcXVlbnQgY29ybmVy CiAJICogY2FzZXMsIHNvIGl0IHNlZW1zIGJldHRlciB0aGFuIGhvbGRpbmcgdGhlIE11bHRpWGFj dEdlbkxvY2sgZm9yIGEgbG9uZwogCSAqIHRpbWUgb24gZXZlcnkgbXVsdGl4YWN0IGNyZWF0aW9u LgogCSAqLwpAQCAtMTQ5MSw2ICsxMjk5LDkgQEAgcmV0cnk6CiAJTFdMb2NrUmVsZWFzZShsb2Nr KTsKIAlsb2NrID0gTlVMTDsKIAorCS8qIEEgbXVsdGl4aWQgd2l0aCB6ZXJvIG1lbWJlcnMgc2hv dWxkIG5vdCBoYXBwZW4gKi8KKwlBc3NlcnQobGVuZ3RoID4gMCk7CisKIAkvKgogCSAqIElmIHdl IHNsZXB0IGFib3ZlLCBjbGVhbiB1cCBzdGF0ZTsgaXQncyBubyBsb25nZXIgbmVlZGVkLgogCSAq LwpAQCAtMTQ5OSw3ICsxMzEwLDYgQEAgcmV0cnk6CiAKIAlwdHIgPSAoTXVsdGlYYWN0TWVtYmVy ICopIHBhbGxvYyhsZW5ndGggKiBzaXplb2YoTXVsdGlYYWN0TWVtYmVyKSk7CiAKLQl0cnVlbGVu Z3RoID0gMDsKIAlwcmV2X3BhZ2VubyA9IC0xOwogCWZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3Ro OyBpKyssIG9mZnNldCsrKQogCXsKQEAgLTE1MzYsMzcgKzEzNDYsMjcgQEAgcmV0cnk6CiAKIAkJ eGFjdHB0ciA9IChUcmFuc2FjdGlvbklkICopCiAJCQkoTXVsdGlYYWN0TWVtYmVyQ3RsLT5zaGFy ZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub10gKyBtZW1iZXJvZmYpOwotCi0JCWlmICghVHJhbnNhY3Rp b25JZElzVmFsaWQoKnhhY3RwdHIpKQotCQl7Ci0JCQkvKiBDb3JuZXIgY2FzZSAzOiB3ZSBtdXN0 IGJlIGxvb2tpbmcgYXQgdW51c2VkIHNsb3QgemVybyAqLwotCQkJQXNzZXJ0KG9mZnNldCA9PSAw KTsKLQkJCWNvbnRpbnVlOwotCQl9CisJCUFzc2VydChUcmFuc2FjdGlvbklkSXNWYWxpZCgqeGFj dHB0cikpOwogCiAJCWZsYWdzb2ZmID0gTVhPZmZzZXRUb0ZsYWdzT2Zmc2V0KG9mZnNldCk7CiAJ CWJzaGlmdCA9IE1YT2Zmc2V0VG9GbGFnc0JpdFNoaWZ0KG9mZnNldCk7CiAJCWZsYWdzcHRyID0g KHVpbnQzMiAqKSAoTXVsdGlYYWN0TWVtYmVyQ3RsLT5zaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Ru b10gKyBmbGFnc29mZik7CiAKLQkJcHRyW3RydWVsZW5ndGhdLnhpZCA9ICp4YWN0cHRyOwotCQlw dHJbdHJ1ZWxlbmd0aF0uc3RhdHVzID0gKCpmbGFnc3B0ciA+PiBic2hpZnQpICYgTVhBQ1RfTUVN QkVSX1hBQ1RfQklUTUFTSzsKLQkJdHJ1ZWxlbmd0aCsrOworCQlwdHJbaV0ueGlkID0gKnhhY3Rw dHI7CisJCXB0cltpXS5zdGF0dXMgPSAoKmZsYWdzcHRyID4+IGJzaGlmdCkgJiBNWEFDVF9NRU1C RVJfWEFDVF9CSVRNQVNLOwogCX0KIAogCUxXTG9ja1JlbGVhc2UobG9jayk7CiAKLQkvKiBBIG11 bHRpeGlkIHdpdGggemVybyBtZW1iZXJzIHNob3VsZCBub3QgaGFwcGVuICovCi0JQXNzZXJ0KHRy dWVsZW5ndGggPiAwKTsKLQogCS8qCiAJICogQ29weSB0aGUgcmVzdWx0IGludG8gdGhlIGxvY2Fs IGNhY2hlLgogCSAqLwotCW1YYWN0Q2FjaGVQdXQobXVsdGksIHRydWVsZW5ndGgsIHB0cik7CisJ bVhhY3RDYWNoZVB1dChtdWx0aSwgbGVuZ3RoLCBwdHIpOwogCiAJZGVidWdfZWxvZzMoREVCVUcy LCAiR2V0TWVtYmVyczogbm8gY2FjaGUgZm9yICVzIiwKLQkJCQlteGlkX3RvX3N0cmluZyhtdWx0 aSwgdHJ1ZWxlbmd0aCwgcHRyKSk7CisJCQkJbXhpZF90b19zdHJpbmcobXVsdGksIGxlbmd0aCwg cHRyKSk7CiAJKm1lbWJlcnMgPSBwdHI7Ci0JcmV0dXJuIHRydWVsZW5ndGg7CisJcmV0dXJuIGxl bmd0aDsKIH0KIAogLyoKQEAgLTE5NzMsNyArMTc3Myw3IEBAIE11bHRpWGFjdFNobWVtSW5pdCh2 b2lkKQogCQkJCSAgInBnX211bHRpeGFjdC9tZW1iZXJzIiwgTFdUUkFOQ0hFX01VTFRJWEFDVE1F TUJFUl9CVUZGRVIsCiAJCQkJICBMV1RSQU5DSEVfTVVMVElYQUNUTUVNQkVSX1NMUlUsCiAJCQkJ ICBTWU5DX0hBTkRMRVJfTVVMVElYQUNUX01FTUJFUiwKLQkJCQkgIGZhbHNlKTsKKwkJCQkgIHRy dWUpOwogCS8qIGRvZXNuJ3QgY2FsbCBTaW1wbGVMcnVUcnVuY2F0ZSgpIG9yIG1lZXQgY3JpdGVy aWEgZm9yIHVuaXQgdGVzdHMgKi8KIAogCS8qIEluaXRpYWxpemUgb3VyIHNoYXJlZCBzdGF0ZSBz dHJ1Y3QgKi8KQEAgLTIxNTAsNyArMTk1MCw2IEBAIFRyaW1NdWx0aVhhY3Qodm9pZCkKIAkJc2xv dG5vID0gU2ltcGxlTHJ1UmVhZFBhZ2UoTXVsdGlYYWN0T2Zmc2V0Q3RsLCBwYWdlbm8sIHRydWUs IG5leHRNWGFjdCk7CiAJCW9mZnB0ciA9IChNdWx0aVhhY3RPZmZzZXQgKikgTXVsdGlYYWN0T2Zm c2V0Q3RsLT5zaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub107CiAJCW9mZnB0ciArPSBlbnRyeW5v OwotCiAJCU1lbVNldChvZmZwdHIsIDAsIEJMQ0tTWiAtIChlbnRyeW5vICogc2l6ZW9mKE11bHRp WGFjdE9mZnNldCkpKTsKIAogCQlNdWx0aVhhY3RPZmZzZXRDdGwtPnNoYXJlZC0+cGFnZV9kaXJ0 eVtzbG90bm9dID0gdHJ1ZTsKQEAgLTIyMjMsNyArMjAyMiw3IEBAIE11bHRpWGFjdEdldENoZWNr cHRNdWx0aShib29sIGlzX3NodXRkb3duLAogCUxXTG9ja1JlbGVhc2UoTXVsdGlYYWN0R2VuTG9j ayk7CiAKIAlkZWJ1Z19lbG9nNihERUJVRzIsCi0JCQkJIk11bHRpWGFjdDogY2hlY2twb2ludCBp cyBuZXh0TXVsdGkgJXUsIG5leHRPZmZzZXQgJXUsIG9sZGVzdE11bHRpICV1IGluIERCICV1IiwK KwkJCQkiTXVsdGlYYWN0OiBjaGVja3BvaW50IGlzIG5leHRNdWx0aSAldSwgbmV4dE9mZnNldCAl IiBQUkl1NjQgIiwgb2xkZXN0TXVsdGkgJXUgaW4gREIgJXUiLAogCQkJCSpuZXh0TXVsdGksICpu ZXh0TXVsdGlPZmZzZXQsICpvbGRlc3RNdWx0aSwgKm9sZGVzdE11bHRpREIpOwogfQogCkBAIC0y MjU4LDcgKzIwNTcsNyBAQCB2b2lkCiBNdWx0aVhhY3RTZXROZXh0TVhhY3QoTXVsdGlYYWN0SWQg bmV4dE11bHRpLAogCQkJCQkgIE11bHRpWGFjdE9mZnNldCBuZXh0TXVsdGlPZmZzZXQpCiB7Ci0J ZGVidWdfZWxvZzQoREVCVUcyLCAiTXVsdGlYYWN0OiBzZXR0aW5nIG5leHQgbXVsdGkgdG8gJXUg b2Zmc2V0ICV1IiwKKwlkZWJ1Z19lbG9nNChERUJVRzIsICJNdWx0aVhhY3Q6IHNldHRpbmcgbmV4 dCBtdWx0aSB0byAldSBvZmZzZXQgJSIgUFJJdTY0LAogCQkJCW5leHRNdWx0aSwgbmV4dE11bHRp T2Zmc2V0KTsKIAlMV0xvY2tBY3F1aXJlKE11bHRpWGFjdEdlbkxvY2ssIExXX0VYQ0xVU0lWRSk7 CiAJTXVsdGlYYWN0U3RhdGUtPm5leHRNWGFjdCA9IG5leHRNdWx0aTsKQEAgLTI0NDksNyArMjI0 OCw3IEBAIE11bHRpWGFjdEFkdmFuY2VOZXh0TVhhY3QoTXVsdGlYYWN0SWQgbWluTXVsdGksCiAJ fQogCWlmIChNdWx0aVhhY3RPZmZzZXRQcmVjZWRlcyhNdWx0aVhhY3RTdGF0ZS0+bmV4dE9mZnNl dCwgbWluTXVsdGlPZmZzZXQpKQogCXsKLQkJZGVidWdfZWxvZzMoREVCVUcyLCAiTXVsdGlYYWN0 OiBzZXR0aW5nIG5leHQgb2Zmc2V0IHRvICV1IiwKKwkJZGVidWdfZWxvZzMoREVCVUcyLCAiTXVs dGlYYWN0OiBzZXR0aW5nIG5leHQgb2Zmc2V0IHRvICUiIFBSSVU2NCwKIAkJCQkJbWluTXVsdGlP ZmZzZXQpOwogCQlNdWx0aVhhY3RTdGF0ZS0+bmV4dE9mZnNldCA9IG1pbk11bHRpT2Zmc2V0Owog CX0KQEAgLTI1NTEsMjMgKzIzNTAsOCBAQCBFeHRlbmRNdWx0aVhhY3RNZW1iZXIoTXVsdGlYYWN0 T2Zmc2V0IG9mZnNldCwgaW50IG5tZW1iZXJzKQogCQkJTFdMb2NrUmVsZWFzZShsb2NrKTsKIAkJ fQogCi0JCS8qCi0JCSAqIENvbXB1dGUgdGhlIG51bWJlciBvZiBpdGVtcyB0aWxsIGVuZCBvZiBj dXJyZW50IHBhZ2UuICBDYXJlZnVsOiBpZgotCQkgKiBhZGRpdGlvbiBvZiB1bnNpZ25lZCBpbnRz IHdyYXBzIGFyb3VuZCwgd2UncmUgYXQgdGhlIGxhc3QgcGFnZSBvZgotCQkgKiB0aGUgbGFzdCBz ZWdtZW50OyBzaW5jZSB0aGF0IHBhZ2UgaG9sZHMgYSBkaWZmZXJlbnQgbnVtYmVyIG9mIGl0ZW1z Ci0JCSAqIHRoYW4gb3RoZXIgcGFnZXMsIHdlIG5lZWQgdG8gZG8gaXQgZGlmZmVyZW50bHkuCi0J CSAqLwotCQlpZiAob2Zmc2V0ICsgTUFYX01FTUJFUlNfSU5fTEFTVF9NRU1CRVJTX1BBR0UgPCBv ZmZzZXQpCi0JCXsKLQkJCS8qCi0JCQkgKiBUaGlzIGlzIHRoZSBsYXN0IHBhZ2Ugb2YgdGhlIGxh c3Qgc2VnbWVudDsgd2UgY2FuIGNvbXB1dGUgdGhlCi0JCQkgKiBudW1iZXIgb2YgaXRlbXMgbGVm dCB0byBhbGxvY2F0ZSBpbiBpdCB3aXRob3V0IG1vZHVsbwotCQkJICogYXJpdGhtZXRpYy4KLQkJ CSAqLwotCQkJZGlmZmVyZW5jZSA9IE1heE11bHRpWGFjdE9mZnNldCAtIG9mZnNldCArIDE7Ci0J CX0KLQkJZWxzZQotCQkJZGlmZmVyZW5jZSA9IE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9QQUdFIC0g b2Zmc2V0ICUgTVVMVElYQUNUX01FTUJFUlNfUEVSX1BBR0U7CisJCS8qIENvbXB1dGUgdGhlIG51 bWJlciBvZiBpdGVtcyB0aWxsIGVuZCBvZiBjdXJyZW50IHBhZ2UuICovCisJCWRpZmZlcmVuY2Ug PSBNVUxUSVhBQ1RfTUVNQkVSU19QRVJfUEFHRSAtIG9mZnNldCAlIE1VTFRJWEFDVF9NRU1CRVJT X1BFUl9QQUdFOwogCiAJCS8qCiAJCSAqIEFkdmFuY2UgdG8gbmV4dCBwYWdlLCB0YWtpbmcgY2Fy ZSB0byBwcm9wZXJseSBoYW5kbGUgdGhlIHdyYXBhcm91bmQKQEAgLTI2MzMsMTUgKzI0MTcsMTQg QEAgR2V0T2xkZXN0TXVsdGlYYWN0SWQodm9pZCkKIH0KIAogLyoKLSAqIERldGVybWluZSBob3cg YWdncmVzc2l2ZWx5IHdlIG5lZWQgdG8gdmFjdXVtIGluIG9yZGVyIHRvIHByZXZlbnQgbWVtYmVy Ci0gKiB3cmFwYXJvdW5kLgorICogRGV0ZXJtaW5lIGlmIHdlIG5lZWQgdG8gdmFjdXVtIHRvIGtl ZXAgdGhlIHNpemUgb2YgdGhlIG1lbWJlcnMgU0xSVSBpbgorICogY2hlY2suCiAgKgogICogVG8g ZG8gc28gZGV0ZXJtaW5lIHdoYXQncyB0aGUgb2xkZXN0IG1lbWJlciBvZmZzZXQgYW5kIGluc3Rh bGwgdGhlIGxpbWl0CiAgKiBpbmZvIGluIE11bHRpWGFjdFN0YXRlLCB3aGVyZSBpdCBjYW4gYmUg dXNlZCB0byBwcmV2ZW50IG92ZXJydW4gb2Ygb2xkIGRhdGEKICAqIGluIHRoZSBtZW1iZXJzIFNM UlUgYXJlYS4KICAqCi0gKiBUaGUgcmV0dXJuIHZhbHVlIGlzIHRydWUgaWYgZW1lcmdlbmN5IGF1 dG92YWN1dW0gaXMgcmVxdWlyZWQgYW5kIGZhbHNlCi0gKiBvdGhlcndpc2UuCisgKiBUaGUgcmV0 dXJuIHZhbHVlIGlzIHRydWUgaWYgYXV0b3ZhY3V1bSBpcyByZXF1aXJlZCBhbmQgZmFsc2Ugb3Ro ZXJ3aXNlLgogICovCiBzdGF0aWMgYm9vbAogU2V0T2Zmc2V0VmFjdXVtTGltaXQoYm9vbCBpc19z dGFydHVwKQpAQCAtMjY1Myw4ICsyNDM2LDYgQEAgU2V0T2Zmc2V0VmFjdXVtTGltaXQoYm9vbCBp c19zdGFydHVwKQogCU11bHRpWGFjdE9mZnNldCBuZXh0T2Zmc2V0OwogCWJvb2wJCW9sZGVzdE9m ZnNldEtub3duID0gZmFsc2U7CiAJYm9vbAkJcHJldk9sZGVzdE9mZnNldEtub3duOwotCU11bHRp WGFjdE9mZnNldCBvZmZzZXRTdG9wTGltaXQgPSAwOwotCU11bHRpWGFjdE9mZnNldCBwcmV2T2Zm c2V0U3RvcExpbWl0OwogCiAJLyoKIAkgKiBOQjogSGF2ZSB0byBwcmV2ZW50IGNvbmN1cnJlbnQg dHJ1bmNhdGlvbiwgd2UgbWlnaHQgb3RoZXJ3aXNlIHRyeSB0bwpAQCAtMjY2OSw3ICsyNDUwLDYg QEAgU2V0T2Zmc2V0VmFjdXVtTGltaXQoYm9vbCBpc19zdGFydHVwKQogCW5leHRPZmZzZXQgPSBN dWx0aVhhY3RTdGF0ZS0+bmV4dE9mZnNldDsKIAlwcmV2T2xkZXN0T2Zmc2V0S25vd24gPSBNdWx0 aVhhY3RTdGF0ZS0+b2xkZXN0T2Zmc2V0S25vd247CiAJcHJldk9sZGVzdE9mZnNldCA9IE11bHRp WGFjdFN0YXRlLT5vbGRlc3RPZmZzZXQ7Ci0JcHJldk9mZnNldFN0b3BMaW1pdCA9IE11bHRpWGFj dFN0YXRlLT5vZmZzZXRTdG9wTGltaXQ7CiAJQXNzZXJ0KE11bHRpWGFjdFN0YXRlLT5maW5pc2hl ZFN0YXJ0dXApOwogCUxXTG9ja1JlbGVhc2UoTXVsdGlYYWN0R2VuTG9jayk7CiAKQEAgLTI3MDAs MTMgKzI0ODAsOSBAQCBTZXRPZmZzZXRWYWN1dW1MaW1pdChib29sIGlzX3N0YXJ0dXApCiAJCW9s ZGVzdE9mZnNldEtub3duID0KIAkJCWZpbmRfbXVsdGl4YWN0X3N0YXJ0KG9sZGVzdE11bHRpWGFj dElkLCAmb2xkZXN0T2Zmc2V0KTsKIAotCQlpZiAob2xkZXN0T2Zmc2V0S25vd24pCi0JCQllcmVw b3J0KERFQlVHMSwKLQkJCQkJKGVycm1zZ19pbnRlcm5hbCgib2xkZXN0IE11bHRpWGFjdElkIG1l bWJlciBpcyBhdCBvZmZzZXQgJXUiLAotCQkJCQkJCQkJIG9sZGVzdE9mZnNldCkpKTsKLQkJZWxz ZQorCQlpZiAoIW9sZGVzdE9mZnNldEtub3duKQogCQkJZXJlcG9ydChMT0csCi0JCQkJCShlcnJt c2coIk11bHRpWGFjdCBtZW1iZXIgd3JhcGFyb3VuZCBwcm90ZWN0aW9ucyBhcmUgZGlzYWJsZWQg YmVjYXVzZSBvbGRlc3QgY2hlY2twb2ludGVkIE11bHRpWGFjdCAldSBkb2VzIG5vdCBleGlzdCBv biBkaXNrIiwKKwkJCQkJKGVycm1zZygib2xkZXN0IGNoZWNrcG9pbnRlZCBNdWx0aVhhY3QgJXUg ZG9lcyBub3QgZXhpc3Qgb24gZGlzayIsCiAJCQkJCQkJb2xkZXN0TXVsdGlYYWN0SWQpKSk7CiAJ fQogCkBAIC0yNzE2LDk3ICsyNDkyLDMyIEBAIFNldE9mZnNldFZhY3V1bUxpbWl0KGJvb2wgaXNf c3RhcnR1cCkKIAkgKiBJZiB3ZSBjYW4sIGNvbXB1dGUgbGltaXRzIChhbmQgaW5zdGFsbCB0aGVt IE11bHRpWGFjdFN0YXRlKSB0byBwcmV2ZW50CiAJICogb3ZlcnJ1biBvZiBvbGQgZGF0YSBpbiB0 aGUgbWVtYmVycyBTTFJVIGFyZWEuIFdlIGNhbiBvbmx5IGRvIHNvIGlmIHRoZQogCSAqIG9sZGVz dCBvZmZzZXQgaXMga25vd24gdGhvdWdoLgorCSAqCisJICogRklYTUU6IElzICFvbGRlc3RPZmZz ZXRLbm93biBwb3NzaWJsZSBhbnltb3JlPyBBdCBsZWFzdCB1cGRhdGUgdGhlIGNvbW1lbnQ6CisJ ICogd2Ugd29uJ3Qgb3ZlcnJ1biBtZW1iZXJzIGFueW1vcmUuCiAJICovCi0JaWYgKG9sZGVzdE9m ZnNldEtub3duKQotCXsKLQkJLyogbW92ZSBiYWNrIHRvIHN0YXJ0IG9mIHRoZSBjb3JyZXNwb25k aW5nIHNlZ21lbnQgKi8KLQkJb2Zmc2V0U3RvcExpbWl0ID0gb2xkZXN0T2Zmc2V0IC0gKG9sZGVz dE9mZnNldCAlCi0JCQkJCQkJCQkJICAoTVVMVElYQUNUX01FTUJFUlNfUEVSX1BBR0UgKiBTTFJV X1BBR0VTX1BFUl9TRUdNRU5UKSk7Ci0KLQkJLyogYWx3YXlzIGxlYXZlIG9uZSBzZWdtZW50IGJl Zm9yZSB0aGUgd3JhcGFyb3VuZCBwb2ludCAqLwotCQlvZmZzZXRTdG9wTGltaXQgLT0gKE1VTFRJ WEFDVF9NRU1CRVJTX1BFUl9QQUdFICogU0xSVV9QQUdFU19QRVJfU0VHTUVOVCk7Ci0KLQkJaWYg KCFwcmV2T2xkZXN0T2Zmc2V0S25vd24gJiYgIWlzX3N0YXJ0dXApCi0JCQllcmVwb3J0KExPRywK LQkJCQkJKGVycm1zZygiTXVsdGlYYWN0IG1lbWJlciB3cmFwYXJvdW5kIHByb3RlY3Rpb25zIGFy ZSBub3cgZW5hYmxlZCIpKSk7Ci0KLQkJZXJlcG9ydChERUJVRzEsCi0JCQkJKGVycm1zZ19pbnRl cm5hbCgiTXVsdGlYYWN0IG1lbWJlciBzdG9wIGxpbWl0IGlzIG5vdyAldSBiYXNlZCBvbiBNdWx0 aVhhY3QgJXUiLAotCQkJCQkJCQkgb2Zmc2V0U3RvcExpbWl0LCBvbGRlc3RNdWx0aVhhY3RJZCkp KTsKLQl9Ci0JZWxzZSBpZiAocHJldk9sZGVzdE9mZnNldEtub3duKQorCWlmIChwcmV2T2xkZXN0 T2Zmc2V0S25vd24pCiAJewogCQkvKgogCQkgKiBJZiB3ZSBmYWlsZWQgdG8gZ2V0IHRoZSBvbGRl c3Qgb2Zmc2V0IHRoaXMgdGltZSwgYnV0IHdlIGhhdmUgYQogCQkgKiB2YWx1ZSBmcm9tIGEgcHJl dmlvdXMgcGFzcyB0aHJvdWdoIHRoaXMgZnVuY3Rpb24sIHVzZSB0aGUgb2xkCi0JCSAqIHZhbHVl cyByYXRoZXIgdGhhbiBhdXRvbWF0aWNhbGx5IGZvcmNpbmcgYW4gZW1lcmdlbmN5IGF1dG92YWN1 dW0KLQkJICogY3ljbGUgYWdhaW4uCisJCSAqIHZhbHVlcyByYXRoZXIgdGhhbiBhdXRvbWF0aWNh bGx5IGZvcmNpbmcgYW4gYXV0b3ZhY3V1bSBjeWNsZSBhZ2Fpbi4KIAkJICovCiAJCW9sZGVzdE9m ZnNldCA9IHByZXZPbGRlc3RPZmZzZXQ7CiAJCW9sZGVzdE9mZnNldEtub3duID0gdHJ1ZTsKLQkJ b2Zmc2V0U3RvcExpbWl0ID0gcHJldk9mZnNldFN0b3BMaW1pdDsKIAl9CiAKIAkvKiBJbnN0YWxs IHRoZSBjb21wdXRlZCB2YWx1ZXMgKi8KIAlMV0xvY2tBY3F1aXJlKE11bHRpWGFjdEdlbkxvY2ss IExXX0VYQ0xVU0lWRSk7CiAJTXVsdGlYYWN0U3RhdGUtPm9sZGVzdE9mZnNldCA9IG9sZGVzdE9m ZnNldDsKIAlNdWx0aVhhY3RTdGF0ZS0+b2xkZXN0T2Zmc2V0S25vd24gPSBvbGRlc3RPZmZzZXRL bm93bjsKLQlNdWx0aVhhY3RTdGF0ZS0+b2Zmc2V0U3RvcExpbWl0ID0gb2Zmc2V0U3RvcExpbWl0 OwogCUxXTG9ja1JlbGVhc2UoTXVsdGlYYWN0R2VuTG9jayk7CiAKIAkvKgotCSAqIERvIHdlIG5l ZWQgYW4gZW1lcmdlbmN5IGF1dG92YWN1dW0/CUlmIHdlJ3JlIG5vdCBzdXJlLCBhc3N1bWUgeWVz LgorCSAqIERvIHdlIG5lZWQgYXV0b3ZhY3V1bT8JSWYgd2UncmUgbm90IHN1cmUsIGFzc3VtZSB5 ZXMuCiAJICovCiAJcmV0dXJuICFvbGRlc3RPZmZzZXRLbm93biB8fAotCQkobmV4dE9mZnNldCAt IG9sZGVzdE9mZnNldCA+IE1VTFRJWEFDVF9NRU1CRVJfU0FGRV9USFJFU0hPTEQpOwotfQotCi0v KgotICogUmV0dXJuIHdoZXRoZXIgYWRkaW5nICJkaXN0YW5jZSIgdG8gInN0YXJ0IiB3b3VsZCBt b3ZlIHBhc3QgImJvdW5kYXJ5Ii4KLSAqCi0gKiBXZSB1c2UgdGhpcyB0byBkZXRlcm1pbmUgd2hl dGhlciB0aGUgYWRkaXRpb24gaXMgIndyYXBwaW5nIGFyb3VuZCIgdGhlCi0gKiBib3VuZGFyeSBw b2ludCwgaGVuY2UgdGhlIG5hbWUuICBUaGUgcmVhc29uIHdlIGRvbid0IHdhbnQgdG8gdXNlIHRo ZSByZWd1bGFyCi0gKiAyXjMxLW1vZHVsbyBhcml0aG1ldGljIGhlcmUgaXMgdGhhdCB3ZSB3YW50 IHRvIGJlIGFibGUgdG8gdXNlIHRoZSB3aG9sZSBvZgotICogdGhlIDJeMzItMSBzcGFjZSBoZXJl LCBhbGxvd2luZyBmb3IgbW9yZSBtdWx0aXhhY3RzIHRoYW4gd291bGQgZml0Ci0gKiBvdGhlcndp c2UuCi0gKi8KLXN0YXRpYyBib29sCi1NdWx0aVhhY3RPZmZzZXRXb3VsZFdyYXAoTXVsdGlYYWN0 T2Zmc2V0IGJvdW5kYXJ5LCBNdWx0aVhhY3RPZmZzZXQgc3RhcnQsCi0JCQkJCQkgdWludDMyIGRp c3RhbmNlKQotewotCU11bHRpWGFjdE9mZnNldCBmaW5pc2g7Ci0KLQkvKgotCSAqIE5vdGUgdGhh dCBvZmZzZXQgbnVtYmVyIDAgaXMgbm90IHVzZWQgKHNlZSBHZXRNdWx0aVhhY3RJZE1lbWJlcnMp LCBzbwotCSAqIGlmIHRoZSBhZGRpdGlvbiB3cmFwcyBhcm91bmQgdGhlIFVJTlRfTUFYIGJvdW5k YXJ5LCBza2lwIHRoYXQgdmFsdWUuCi0JICovCi0JZmluaXNoID0gc3RhcnQgKyBkaXN0YW5jZTsK LQlpZiAoZmluaXNoIDwgc3RhcnQpCi0JCWZpbmlzaCsrOwotCi0JLyotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot CSAqIFdoZW4gdGhlIGJvdW5kYXJ5IGlzIG51bWVyaWNhbGx5IGdyZWF0ZXIgdGhhbiB0aGUgc3Rh cnRpbmcgcG9pbnQsIGFueQotCSAqIHZhbHVlIG51bWVyaWNhbGx5IGJldHdlZW4gdGhlIHR3byBp cyBub3Qgd3JhcHBlZDoKLQkgKgotCSAqCTwtLS0tUy0tLS1CLS0tLT4KLQkgKglbLS0tKQkJCSA9 IEYgd3JhcHBlZCBwYXN0IEIgKGFuZCBVSU5UX01BWCkKLQkgKgkJIFstLS0pCQkgPSBGIG5vdCB3 cmFwcGVkCi0JICoJCQkgIFstLS0tXSA9IEYgd3JhcHBlZCBwYXN0IEIKLQkgKgotCSAqIFdoZW4g dGhlIGJvdW5kYXJ5IGlzIG51bWVyaWNhbGx5IGxlc3MgdGhhbiB0aGUgc3RhcnRpbmcgcG9pbnQg KGkuZS4gdGhlCi0JICogVUlOVF9NQVggd3JhcGFyb3VuZCBvY2N1cnMgc29tZXdoZXJlIGluIGJl dHdlZW4pIHRoZW4gYWxsIHZhbHVlcyBpbgotCSAqIGJldHdlZW4gYXJlIHdyYXBwZWQ6Ci0JICoK LQkgKgk8LS0tLUItLS0tUy0tLS0+Ci0JICoJWy0tLSkJCQkgPSBGIG5vdCB3cmFwcGVkIHBhc3Qg QiAoYnV0IHdyYXBwZWQgcGFzdCBVSU5UX01BWCkKLQkgKgkJIFstLS0pCQkgPSBGIHdyYXBwZWQg cGFzdCBCIChhbmQgVUlOVF9NQVgpCi0JICoJCQkgIFstLS0tXSA9IEYgbm90IHdyYXBwZWQKLQkg Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCi0JICovCi0JaWYgKHN0YXJ0IDwgYm91bmRhcnkpCi0JCXJldHVybiBm aW5pc2ggPj0gYm91bmRhcnkgfHwgZmluaXNoIDwgc3RhcnQ7Ci0JZWxzZQotCQlyZXR1cm4gZmlu aXNoID49IGJvdW5kYXJ5ICYmIGZpbmlzaCA8IHN0YXJ0OworCQkobmV4dE9mZnNldCAtIG9sZGVz dE9mZnNldCA+IE1VTFRJWEFDVF9NRU1CRVJfQVVUT1ZBQ19USFJFU0hPTEQpOwogfQogCiAvKgpA QCAtMjg0Niw2ICsyNTU3LDcgQEAgZmluZF9tdWx0aXhhY3Rfc3RhcnQoTXVsdGlYYWN0SWQgbXVs dGksIE11bHRpWGFjdE9mZnNldCAqcmVzdWx0KQogCW9mZnB0ciA9IChNdWx0aVhhY3RPZmZzZXQg KikgTXVsdGlYYWN0T2Zmc2V0Q3RsLT5zaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub107CiAJb2Zm cHRyICs9IGVudHJ5bm87CiAJb2Zmc2V0ID0gKm9mZnB0cjsKKwogCUxXTG9ja1JlbGVhc2UoU2lt cGxlTHJ1R2V0QmFua0xvY2soTXVsdGlYYWN0T2Zmc2V0Q3RsLCBwYWdlbm8pKTsKIAogCSpyZXN1 bHQgPSBvZmZzZXQ7CkBAIC0yODkzLDczICsyNjA1LDYgQEAgR2V0TXVsdGlYYWN0SW5mbyh1aW50 MzIgKm11bHRpeGFjdHMsIE11bHRpWGFjdE9mZnNldCAqbWVtYmVycywKIAlyZXR1cm4gdHJ1ZTsK IH0KIAotLyoKLSAqIE11bHRpeGFjdCBtZW1iZXJzIGNhbiBiZSByZW1vdmVkIG9uY2UgdGhlIG11 bHRpeGFjdHMgdGhhdCByZWZlciB0byB0aGVtCi0gKiBhcmUgb2xkZXIgdGhhbiBldmVyeSBkYXRt aW5teGlkLiAgYXV0b3ZhY3V1bV9tdWx0aXhhY3RfZnJlZXplX21heF9hZ2UgYW5kCi0gKiB2YWN1 dW1fbXVsdGl4YWN0X2ZyZWV6ZV90YWJsZV9hZ2Ugd29yayB0b2dldGhlciB0byBtYWtlIHN1cmUg d2UgbmV2ZXIgaGF2ZQotICogdG9vIG1hbnkgbXVsdGl4YWN0czsgd2UgaG9wZSB0aGF0LCBhdCBs ZWFzdCB1bmRlciBub3JtYWwgY2lyY3Vtc3RhbmNlcywKLSAqIHRoaXMgd2lsbCBhbHNvIGJlIHN1 ZmZpY2llbnQgdG8ga2VlcCB1cyBmcm9tIHVzaW5nIHRvbyBtYW55IG9mZnNldHMuCi0gKiBIb3dl dmVyLCBpZiB0aGUgYXZlcmFnZSBtdWx0aXhhY3QgaGFzIG1hbnkgbWVtYmVycywgd2UgbWlnaHQg ZXhoYXVzdCB0aGUKLSAqIG1lbWJlcnMgc3BhY2Ugd2hpbGUgc3RpbGwgdXNpbmcgZmV3IGVub3Vn aCBtZW1iZXJzIHRoYXQgdGhlc2UgbGltaXRzIGZhaWwKLSAqIHRvIHRyaWdnZXIgcmVsbWlubXhp ZCBhZHZhbmNlbWVudCBieSBWQUNVVU0uICBBdCB0aGF0IHBvaW50LCB3ZSdkIGhhdmUgbm8KLSAq IGNob2ljZSBidXQgdG8gc3RhcnQgZmFpbGluZyBtdWx0aXhhY3QtY3JlYXRpbmcgb3BlcmF0aW9u cyB3aXRoIGFuIGVycm9yLgotICoKLSAqIFRvIHByZXZlbnQgdGhhdCwgaWYgbW9yZSB0aGFuIGEg dGhyZXNob2xkIHBvcnRpb24gb2YgdGhlIG1lbWJlcnMgc3BhY2UgaXMKLSAqIHVzZWQsIHdlIGVm ZmVjdGl2ZWx5IHJlZHVjZSBhdXRvdmFjdXVtX211bHRpeGFjdF9mcmVlemVfbWF4X2FnZSBhbmQK LSAqIHRvIGEgdmFsdWUganVzdCBsZXNzIHRoYW4gdGhlIG51bWJlciBvZiBtdWx0aXhhY3RzIGlu IHVzZS4gIFdlIGhvcGUgdGhhdAotICogdGhpcyB3aWxsIHF1aWNrbHkgdHJpZ2dlciBhdXRvdmFj dXVtaW5nIG9uIHRoZSB0YWJsZSBvciB0YWJsZXMgd2l0aCB0aGUKLSAqIG9sZGVzdCByZWxtaW5t eGlkLCB0aHVzIGFsbG93aW5nIGRhdG1pbm14aWQgdmFsdWVzIHRvIGFkdmFuY2UgYW5kIHJlbW92 aW5nCi0gKiBzb21lIG1lbWJlcnMuCi0gKgotICogQXMgdGhlIGZyYWN0aW9uIG9mIHRoZSBtZW1i ZXIgc3BhY2UgY3VycmVudGx5IGluIHVzZSBncm93cywgd2UgYmVjb21lCi0gKiBtb3JlIGFnZ3Jl c3NpdmUgaW4gY2xhbXBpbmcgdGhpcyB2YWx1ZS4gIFRoYXQgbm90IG9ubHkgY2F1c2VzIGF1dG92 YWN1dW0KLSAqIHRvIHJhbXAgdXAsIGJ1dCBhbHNvIG1ha2VzIGFueSBtYW51YWwgdmFjdXVtcyB0 aGUgdXNlciBpc3N1ZXMgbW9yZQotICogYWdncmVzc2l2ZS4gIFRoaXMgaGFwcGVucyBiZWNhdXNl IHZhY3V1bV9nZXRfY3V0b2ZmcygpIHdpbGwgY2xhbXAgdGhlCi0gKiBmcmVlemUgdGFibGUgYW5k IHRoZSBtaW5pbXVtIGZyZWV6ZSBhZ2UgY3V0b2ZmcyBiYXNlZCBvbiB0aGUgZWZmZWN0aXZlCi0g KiBhdXRvdmFjdXVtX211bHRpeGFjdF9mcmVlemVfbWF4X2FnZSB0aGlzIGZ1bmN0aW9uIHJldHVy bnMuICBJbiB0aGUgd29yc3QKLSAqIGNhc2UsIHdlJ2xsIGNsYWltIHRoZSBmcmVlemVfbWF4X2Fn ZSB0byB6ZXJvLCBhbmQgZXZlcnkgdmFjdXVtIG9mIGFueQotICogdGFibGUgd2lsbCBmcmVlemUg ZXZlcnkgbXVsdGl4YWN0LgotICovCi1pbnQKLU11bHRpWGFjdE1lbWJlckZyZWV6ZVRocmVzaG9s ZCh2b2lkKQotewotCU11bHRpWGFjdE9mZnNldCBtZW1iZXJzOwotCXVpbnQzMgkJbXVsdGl4YWN0 czsKLQl1aW50MzIJCXZpY3RpbV9tdWx0aXhhY3RzOwotCWRvdWJsZQkJZnJhY3Rpb247Ci0JaW50 CQkJcmVzdWx0OwotCU11bHRpWGFjdElkIG9sZGVzdE11bHRpWGFjdElkOwotCU11bHRpWGFjdE9m ZnNldCBvbGRlc3RPZmZzZXQ7Ci0KLQkvKiBJZiB3ZSBjYW4ndCBkZXRlcm1pbmUgbWVtYmVyIHNw YWNlIHV0aWxpemF0aW9uLCBhc3N1bWUgdGhlIHdvcnN0LiAqLwotCWlmICghR2V0TXVsdGlYYWN0 SW5mbygmbXVsdGl4YWN0cywgJm1lbWJlcnMsICZvbGRlc3RNdWx0aVhhY3RJZCwgJm9sZGVzdE9m ZnNldCkpCi0JCXJldHVybiAwOwotCi0JLyogSWYgbWVtYmVyIHNwYWNlIHV0aWxpemF0aW9uIGlz IGxvdywgbm8gc3BlY2lhbCBhY3Rpb24gaXMgcmVxdWlyZWQuICovCi0JaWYgKG1lbWJlcnMgPD0g TVVMVElYQUNUX01FTUJFUl9TQUZFX1RIUkVTSE9MRCkKLQkJcmV0dXJuIGF1dG92YWN1dW1fbXVs dGl4YWN0X2ZyZWV6ZV9tYXhfYWdlOwotCi0JLyoKLQkgKiBDb21wdXRlIGEgdGFyZ2V0IGZvciBy ZWxtaW5teGlkIGFkdmFuY2VtZW50LiAgVGhlIG51bWJlciBvZiBtdWx0aXhhY3RzCi0JICogd2Ug dHJ5IHRvIGVsaW1pbmF0ZSBmcm9tIHRoZSBzeXN0ZW0gaXMgYmFzZWQgb24gaG93IGZhciB3ZSBh cmUgcGFzdAotCSAqIE1VTFRJWEFDVF9NRU1CRVJfU0FGRV9USFJFU0hPTEQuCi0JICovCi0JZnJh Y3Rpb24gPSAoZG91YmxlKSAobWVtYmVycyAtIE1VTFRJWEFDVF9NRU1CRVJfU0FGRV9USFJFU0hP TEQpIC8KLQkJKE1VTFRJWEFDVF9NRU1CRVJfREFOR0VSX1RIUkVTSE9MRCAtIE1VTFRJWEFDVF9N RU1CRVJfU0FGRV9USFJFU0hPTEQpOwotCXZpY3RpbV9tdWx0aXhhY3RzID0gbXVsdGl4YWN0cyAq IGZyYWN0aW9uOwotCi0JLyogZnJhY3Rpb24gY291bGQgYmUgPiAxLjAsIGJ1dCBsb3dlc3QgcG9z c2libGUgZnJlZXplIGFnZSBpcyB6ZXJvICovCi0JaWYgKHZpY3RpbV9tdWx0aXhhY3RzID4gbXVs dGl4YWN0cykKLQkJcmV0dXJuIDA7Ci0JcmVzdWx0ID0gbXVsdGl4YWN0cyAtIHZpY3RpbV9tdWx0 aXhhY3RzOwotCi0JLyoKLQkgKiBDbGFtcCB0byBhdXRvdmFjdXVtX211bHRpeGFjdF9mcmVlemVf bWF4X2FnZSwgc28gdGhhdCB3ZSBuZXZlciBtYWtlCi0JICogYXV0b3ZhY3V1bSBsZXNzIGFnZ3Jl c3NpdmUgdGhhbiBpdCB3b3VsZCBvdGhlcndpc2UgYmUuCi0JICovCi0JcmV0dXJuIE1pbihyZXN1 bHQsIGF1dG92YWN1dW1fbXVsdGl4YWN0X2ZyZWV6ZV9tYXhfYWdlKTsKLX0KLQogdHlwZWRlZiBz dHJ1Y3QgbXh0cnVuY2luZm8KIHsKIAlpbnQ2NAkJZWFybGllc3RFeGlzdGluZ1BhZ2U7CkBAIC0y OTg2LDM2ICsyNjMxLDEyIEBAIFNscnVTY2FuRGlyQ2JGaW5kRWFybGllc3QoU2xydUN0bCBjdGws IGNoYXIgKmZpbGVuYW1lLCBpbnQ2NCBzZWdwYWdlLCB2b2lkICpkYXRhCiAKIC8qCiAgKiBEZWxl dGUgbWVtYmVycyBzZWdtZW50cyBbb2xkZXN0LCBuZXdPbGRlc3QpCi0gKgotICogVGhlIG1lbWJl cnMgU0xSVSBjYW4sIGluIGNvbnRyYXN0IHRvIHRoZSBvZmZzZXRzIG9uZSwgYmUgZmlsbGVkIHRv IGFsbW9zdAotICogdGhlIGZ1bGwgcmFuZ2UgYXQgb25jZS4gVGhpcyBtZWFucyBTaW1wbGVMcnVU cnVuY2F0ZSgpIGNhbid0IHRyaXZpYWxseSBiZQotICogdXNlZCAtIGluc3RlYWQgdGhlIHRvLWJl LWRlbGV0ZWQgcmFuZ2UgaXMgY29tcHV0ZWQgdXNpbmcgdGhlIG9mZnNldHMKLSAqIFNMUlUuIEMu Zi4gVHJ1bmNhdGVNdWx0aVhhY3QoKS4KICAqLwogc3RhdGljIHZvaWQKIFBlcmZvcm1NZW1iZXJz VHJ1bmNhdGlvbihNdWx0aVhhY3RPZmZzZXQgb2xkZXN0T2Zmc2V0LCBNdWx0aVhhY3RPZmZzZXQg bmV3T2xkZXN0T2Zmc2V0KQogewotCWNvbnN0IGludDY0IG1heHNlZ21lbnQgPSBNWE9mZnNldFRv TWVtYmVyU2VnbWVudChNYXhNdWx0aVhhY3RPZmZzZXQpOwotCWludDY0CQlzdGFydHNlZ21lbnQg PSBNWE9mZnNldFRvTWVtYmVyU2VnbWVudChvbGRlc3RPZmZzZXQpOwotCWludDY0CQllbmRzZWdt ZW50ID0gTVhPZmZzZXRUb01lbWJlclNlZ21lbnQobmV3T2xkZXN0T2Zmc2V0KTsKLQlpbnQ2NAkJ c2VnbWVudCA9IHN0YXJ0c2VnbWVudDsKLQotCS8qCi0JICogRGVsZXRlIGFsbCB0aGUgc2VnbWVu dHMgYnV0IHRoZSBsYXN0IG9uZS4gVGhlIGxhc3Qgc2VnbWVudCBjYW4gc3RpbGwKLQkgKiBjb250 YWluLCBwb3NzaWJseSBwYXJ0aWFsbHksIHZhbGlkIGRhdGEuCi0JICovCi0Jd2hpbGUgKHNlZ21l bnQgIT0gZW5kc2VnbWVudCkKLQl7Ci0JCWVsb2coREVCVUcyLCAidHJ1bmNhdGluZyBtdWx0aXhh Y3QgbWVtYmVycyBzZWdtZW50ICUiIFBSSXg2NCwKLQkJCSBzZWdtZW50KTsKLQkJU2xydURlbGV0 ZVNlZ21lbnQoTXVsdGlYYWN0TWVtYmVyQ3RsLCBzZWdtZW50KTsKLQotCQkvKiBtb3ZlIHRvIG5l eHQgc2VnbWVudCwgaGFuZGxpbmcgd3JhcGFyb3VuZCBjb3JyZWN0bHkgKi8KLQkJaWYgKHNlZ21l bnQgPT0gbWF4c2VnbWVudCkKLQkJCXNlZ21lbnQgPSAwOwotCQllbHNlCi0JCQlzZWdtZW50ICs9 IDE7Ci0JfQorCVNpbXBsZUxydVRydW5jYXRlKE11bHRpWGFjdE1lbWJlckN0bCwKKwkJCQkJICBN WE9mZnNldFRvTWVtYmVyUGFnZShuZXdPbGRlc3RPZmZzZXQpKTsKIH0KIAogLyoKQEAgLTMxNTks NyArMjc4MCw3IEBAIFRydW5jYXRlTXVsdGlYYWN0KE11bHRpWGFjdElkIG5ld09sZGVzdE11bHRp LCBPaWQgbmV3T2xkZXN0TXVsdGlEQikKIAogCWVsb2coREVCVUcxLCAicGVyZm9ybWluZyBtdWx0 aXhhY3QgdHJ1bmNhdGlvbjogIgogCQkgIm9mZnNldHMgWyV1LCAldSksIG9mZnNldHMgc2VnbWVu dHMgWyUiIFBSSXg2NCAiLCAlIiBQUkl4NjQgIiksICIKLQkJICJtZW1iZXJzIFsldSwgJXUpLCBt ZW1iZXJzIHNlZ21lbnRzIFslIiBQUkl4NjQgIiwgJSIgUFJJeDY0ICIpIiwKKwkJICJtZW1iZXJz IFslIiBQUkl1NjQgIiwgJSIgUFJJdTY0ICIpLCBtZW1iZXJzIHNlZ21lbnRzIFslIiBQUkl4NjQg IiwgJSIgUFJJeDY0ICIpIiwKIAkJIG9sZGVzdE11bHRpLCBuZXdPbGRlc3RNdWx0aSwKIAkJIE11 bHRpWGFjdElkVG9PZmZzZXRTZWdtZW50KG9sZGVzdE11bHRpKSwKIAkJIE11bHRpWGFjdElkVG9P ZmZzZXRTZWdtZW50KG5ld09sZGVzdE11bHRpKSwKQEAgLTMyMzksMjAgKzI4NjAsMTMgQEAgTXVs dGlYYWN0T2Zmc2V0UGFnZVByZWNlZGVzKGludDY0IHBhZ2UxLCBpbnQ2NCBwYWdlMikKIAogLyoK ICAqIERlY2lkZSB3aGV0aGVyIGEgTXVsdGlYYWN0TWVtYmVyIHBhZ2UgbnVtYmVyIGlzICJvbGRl ciIgZm9yIHRydW5jYXRpb24KLSAqIHB1cnBvc2VzLiAgVGhlcmUgaXMgbm8gImludmFsaWQgb2Zm c2V0IG51bWJlciIgc28gdXNlIHRoZSBudW1iZXJzIHZlcmJhdGltLgorICogcHVycG9zZXMuICBU aGVyZSBpcyBubyAiaW52YWxpZCBvZmZzZXQgbnVtYmVyIiBhbmQgbWVtYmVycyBuZXZlciB3cmFw CisgKiBhcm91bmQsIHNvIHVzZSB0aGUgbnVtYmVycyB2ZXJiYXRpbS4KICAqLwogc3RhdGljIGJv b2wKIE11bHRpWGFjdE1lbWJlclBhZ2VQcmVjZWRlcyhpbnQ2NCBwYWdlMSwgaW50NjQgcGFnZTIp CiB7Ci0JTXVsdGlYYWN0T2Zmc2V0IG9mZnNldDE7Ci0JTXVsdGlYYWN0T2Zmc2V0IG9mZnNldDI7 Ci0KLQlvZmZzZXQxID0gKChNdWx0aVhhY3RPZmZzZXQpIHBhZ2UxKSAqIE1VTFRJWEFDVF9NRU1C RVJTX1BFUl9QQUdFOwotCW9mZnNldDIgPSAoKE11bHRpWGFjdE9mZnNldCkgcGFnZTIpICogTVVM VElYQUNUX01FTUJFUlNfUEVSX1BBR0U7Ci0KLQlyZXR1cm4gKE11bHRpWGFjdE9mZnNldFByZWNl ZGVzKG9mZnNldDEsIG9mZnNldDIpICYmCi0JCQlNdWx0aVhhY3RPZmZzZXRQcmVjZWRlcyhvZmZz ZXQxLAotCQkJCQkJCQkJb2Zmc2V0MiArIE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9QQUdFIC0gMSkp OworCXJldHVybiBwYWdlMSA8IHBhZ2UyOwogfQogCiAvKgpAQCAtMzI5MCw3ICsyOTA0LDcgQEAg TXVsdGlYYWN0SWRQcmVjZWRlc09yRXF1YWxzKE11bHRpWGFjdElkIG11bHRpMSwgTXVsdGlYYWN0 SWQgbXVsdGkyKQogc3RhdGljIGJvb2wKIE11bHRpWGFjdE9mZnNldFByZWNlZGVzKE11bHRpWGFj dE9mZnNldCBvZmZzZXQxLCBNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0MikKIHsKLQlpbnQzMgkJZGlm ZiA9IChpbnQzMikgKG9mZnNldDEgLSBvZmZzZXQyKTsKKwlpbnQ2NAkJZGlmZiA9IChpbnQ2NCkg KG9mZnNldDEgLSBvZmZzZXQyKTsKIAogCXJldHVybiAoZGlmZiA8IDApOwogfQpAQCAtMzM4Nyw3 ICszMDAxLDcgQEAgbXVsdGl4YWN0X3JlZG8oWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpCiAKIAkJ ZWxvZyhERUJVRzEsICJyZXBsYXlpbmcgbXVsdGl4YWN0IHRydW5jYXRpb246ICIKIAkJCSAib2Zm c2V0cyBbJXUsICV1KSwgb2Zmc2V0cyBzZWdtZW50cyBbJSIgUFJJeDY0ICIsICUiIFBSSXg2NCAi KSwgIgotCQkJICJtZW1iZXJzIFsldSwgJXUpLCBtZW1iZXJzIHNlZ21lbnRzIFslIiBQUkl4NjQg IiwgJSIgUFJJeDY0ICIpIiwKKwkJCSAibWVtYmVycyBbJSIgUFJJdTY0ICIsICUiIFBSSXU2NCAi KSwgbWVtYmVycyBzZWdtZW50cyBbJSIgUFJJeDY0ICIsICUiIFBSSXg2NCAiKSIsCiAJCQkgeGxy ZWMuc3RhcnRUcnVuY09mZiwgeGxyZWMuZW5kVHJ1bmNPZmYsCiAJCQkgTXVsdGlYYWN0SWRUb09m ZnNldFNlZ21lbnQoeGxyZWMuc3RhcnRUcnVuY09mZiksCiAJCQkgTXVsdGlYYWN0SWRUb09mZnNl dFNlZ21lbnQoeGxyZWMuZW5kVHJ1bmNPZmYpLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNj ZXNzL3RyYW5zYW0veGxvZy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jCmlu ZGV4IDdjOTU5MDUxZTExLi4yYWRlMGI0YTA0MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNj ZXNzL3RyYW5zYW0veGxvZy5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cu YwpAQCAtNTEyOCw3ICs1MTI4LDcgQEAgQm9vdFN0cmFwWExPRyh1aW50MzIgZGF0YV9jaGVja3N1 bV92ZXJzaW9uKQogCQlGdWxsVHJhbnNhY3Rpb25JZEZyb21FcG9jaEFuZFhpZCgwLCBGaXJzdE5v cm1hbFRyYW5zYWN0aW9uSWQpOwogCWNoZWNrUG9pbnQubmV4dE9pZCA9IEZpcnN0R2VuYmtpT2Jq ZWN0SWQ7CiAJY2hlY2tQb2ludC5uZXh0TXVsdGkgPSBGaXJzdE11bHRpWGFjdElkOwotCWNoZWNr UG9pbnQubmV4dE11bHRpT2Zmc2V0ID0gMDsKKwljaGVja1BvaW50Lm5leHRNdWx0aU9mZnNldCA9 IDE7CiAJY2hlY2tQb2ludC5vbGRlc3RYaWQgPSBGaXJzdE5vcm1hbFRyYW5zYWN0aW9uSWQ7CiAJ Y2hlY2tQb2ludC5vbGRlc3RYaWREQiA9IFRlbXBsYXRlMURiT2lkOwogCWNoZWNrUG9pbnQub2xk ZXN0TXVsdGkgPSBGaXJzdE11bHRpWGFjdElkOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNj ZXNzL3RyYW5zYW0veGxvZ3JlY292ZXJ5LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94 bG9ncmVjb3ZlcnkuYwppbmRleCA1NTBkZTZlNGE1OS4uNjZjMjM2NGFhOWIgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dyZWNvdmVyeS5jCisrKyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dyZWNvdmVyeS5jCkBAIC04ODYsNyArODg2LDcgQEAgSW5p dFdhbFJlY292ZXJ5KENvbnRyb2xGaWxlRGF0YSAqQ29udHJvbEZpbGUsIGJvb2wgKndhc1NodXRk b3duX3B0ciwKIAkJCQkJCQkgVTY0RnJvbUZ1bGxUcmFuc2FjdGlvbklkKGNoZWNrUG9pbnQubmV4 dFhpZCksCiAJCQkJCQkJIGNoZWNrUG9pbnQubmV4dE9pZCkpKTsKIAllcmVwb3J0KERFQlVHMSwK LQkJCShlcnJtc2dfaW50ZXJuYWwoIm5leHQgTXVsdGlYYWN0SWQ6ICV1OyBuZXh0IE11bHRpWGFj dE9mZnNldDogJXUiLAorCQkJKGVycm1zZ19pbnRlcm5hbCgibmV4dCBNdWx0aVhhY3RJZDogJXU7 IG5leHQgTXVsdGlYYWN0T2Zmc2V0OiAlIiBQUkl1NjQsCiAJCQkJCQkJIGNoZWNrUG9pbnQubmV4 dE11bHRpLCBjaGVja1BvaW50Lm5leHRNdWx0aU9mZnNldCkpKTsKIAllcmVwb3J0KERFQlVHMSwK IAkJCShlcnJtc2dfaW50ZXJuYWwoIm9sZGVzdCB1bmZyb3plbiB0cmFuc2FjdGlvbiBJRDogJXUs IGluIGRhdGFiYXNlICV1IiwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3ZhY3V1 bS5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdmFjdXVtLmMKaW5kZXggZWQwM2UzYmQ1MGQuLjI1 OWVmNjBiZDMxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy92YWN1dW0uYworKysg Yi9zcmMvYmFja2VuZC9jb21tYW5kcy92YWN1dW0uYwpAQCAtMTE0Nyw3ICsxMTQ3LDcgQEAgdmFj dXVtX2dldF9jdXRvZmZzKFJlbGF0aW9uIHJlbCwgY29uc3QgVmFjdXVtUGFyYW1zIHBhcmFtcywK IAkgKiBub3JtYWxseSBhdXRvdmFjdXVtX211bHRpeGFjdF9mcmVlemVfbWF4X2FnZSwgYnV0IG1h eSBiZSBsZXNzIGlmIHdlIGFyZQogCSAqIHNob3J0IG9mIG11bHRpeGFjdCBtZW1iZXIgc3BhY2Uu CiAJICovCi0JZWZmZWN0aXZlX211bHRpeGFjdF9mcmVlemVfbWF4X2FnZSA9IE11bHRpWGFjdE1l bWJlckZyZWV6ZVRocmVzaG9sZCgpOworCWVmZmVjdGl2ZV9tdWx0aXhhY3RfZnJlZXplX21heF9h Z2UgPSBhdXRvdmFjdXVtX211bHRpeGFjdF9mcmVlemVfbWF4X2FnZTsKIAogCS8qCiAJICogQWxt b3N0IHJlYWR5IHRvIHNldCBmcmVlemUgb3V0cHV0IHBhcmFtZXRlcnM7IGNoZWNrIGlmIE9sZGVz dFhtaW4gb3IKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYXV0b3ZhY3V1bS5j IGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9hdXRvdmFjdXVtLmMKaW5kZXggZWQxOWM3NGJiMTku LjM0OTA5ZWU1NGZmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2F1dG92YWN1 dW0uYworKysgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2F1dG92YWN1dW0uYwpAQCAtMTE1MSw3 ICsxMTUxLDcgQEAgZG9fc3RhcnRfd29ya2VyKHZvaWQpCiAKIAkvKiBBbHNvIGRldGVybWluZSB0 aGUgb2xkZXN0IGRhdG1pbm14aWQgd2Ugd2lsbCBjb25zaWRlci4gKi8KIAlyZWNlbnRNdWx0aSA9 IFJlYWROZXh0TXVsdGlYYWN0SWQoKTsKLQltdWx0aUZvcmNlTGltaXQgPSByZWNlbnRNdWx0aSAt IE11bHRpWGFjdE1lbWJlckZyZWV6ZVRocmVzaG9sZCgpOworCW11bHRpRm9yY2VMaW1pdCA9IHJl Y2VudE11bHRpIC0gYXV0b3ZhY3V1bV9tdWx0aXhhY3RfZnJlZXplX21heF9hZ2U7CiAJaWYgKG11 bHRpRm9yY2VMaW1pdCA8IEZpcnN0TXVsdGlYYWN0SWQpCiAJCW11bHRpRm9yY2VMaW1pdCAtPSBG aXJzdE11bHRpWGFjdElkOwogCkBAIC0xOTM5LDcgKzE5MzksNyBAQCBkb19hdXRvdmFjdXVtKHZv aWQpCiAJICogbm9ybWFsbHkgYXV0b3ZhY3V1bV9tdWx0aXhhY3RfZnJlZXplX21heF9hZ2UsIGJ1 dCBtYXkgYmUgbGVzcyBpZiB3ZSBhcmUKIAkgKiBzaG9ydCBvZiBtdWx0aXhhY3QgbWVtYmVyIHNw YWNlLgogCSAqLwotCWVmZmVjdGl2ZV9tdWx0aXhhY3RfZnJlZXplX21heF9hZ2UgPSBNdWx0aVhh Y3RNZW1iZXJGcmVlemVUaHJlc2hvbGQoKTsKKwllZmZlY3RpdmVfbXVsdGl4YWN0X2ZyZWV6ZV9t YXhfYWdlID0gYXV0b3ZhY3V1bV9tdWx0aXhhY3RfZnJlZXplX21heF9hZ2U7CiAKIAkvKgogCSAq IEZpbmQgdGhlIHBnX2RhdGFiYXNlIGVudHJ5IGFuZCBzZWxlY3QgdGhlIGRlZmF1bHQgZnJlZXpl IGFnZXMuIFdlIHVzZQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19jb250cm9sZGF0YS9wZ19jb250 cm9sZGF0YS5jIGIvc3JjL2Jpbi9wZ19jb250cm9sZGF0YS9wZ19jb250cm9sZGF0YS5jCmluZGV4 IDEwZGUwNThjZTkxLi41Mjk1MTA4YWRlMyAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19jb250cm9s ZGF0YS9wZ19jb250cm9sZGF0YS5jCisrKyBiL3NyYy9iaW4vcGdfY29udHJvbGRhdGEvcGdfY29u dHJvbGRhdGEuYwpAQCAtMjY0LDcgKzI2NCw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3Zb XSkKIAkJICAgQ29udHJvbEZpbGUtPmNoZWNrUG9pbnRDb3B5Lm5leHRPaWQpOwogCXByaW50Zihf KCJMYXRlc3QgY2hlY2twb2ludCdzIE5leHRNdWx0aVhhY3RJZDogICV1XG4iKSwKIAkJICAgQ29u dHJvbEZpbGUtPmNoZWNrUG9pbnRDb3B5Lm5leHRNdWx0aSk7Ci0JcHJpbnRmKF8oIkxhdGVzdCBj aGVja3BvaW50J3MgTmV4dE11bHRpT2Zmc2V0OiAgJXVcbiIpLAorCXByaW50ZihfKCJMYXRlc3Qg Y2hlY2twb2ludCdzIE5leHRNdWx0aU9mZnNldDogICUiIFBSSXU2NCAiXG4iKSwKIAkJICAgQ29u dHJvbEZpbGUtPmNoZWNrUG9pbnRDb3B5Lm5leHRNdWx0aU9mZnNldCk7CiAJcHJpbnRmKF8oIkxh dGVzdCBjaGVja3BvaW50J3Mgb2xkZXN0WElEOiAgICAgICAgJXVcbiIpLAogCQkgICBDb250cm9s RmlsZS0+Y2hlY2tQb2ludENvcHkub2xkZXN0WGlkKTsKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdf cmVzZXR3YWwvcGdfcmVzZXR3YWwuYyBiL3NyYy9iaW4vcGdfcmVzZXR3YWwvcGdfcmVzZXR3YWwu YwppbmRleCBhODlkNzJmYzVjZi4uNGU1ZWVjZWQ4OWQgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdf cmVzZXR3YWwvcGdfcmVzZXR3YWwuYworKysgYi9zcmMvYmluL3BnX3Jlc2V0d2FsL3BnX3Jlc2V0 d2FsLmMKQEAgLTI2Nyw3ICsyNjcsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAK IAkJCWNhc2UgJ08nOgogCQkJCWVycm5vID0gMDsKLQkJCQlzZXRfbXhvZmYgPSBzdHJ0b3VsKG9w dGFyZywgJmVuZHB0ciwgMCk7CisJCQkJc2V0X214b2ZmID0gc3RydG91NjQob3B0YXJnLCAmZW5k cHRyLCAwKTsKIAkJCQlpZiAoZW5kcHRyID09IG9wdGFyZyB8fCAqZW5kcHRyICE9ICdcMCcgfHwg ZXJybm8gIT0gMCkKIAkJCQl7CiAJCQkJCXBnX2xvZ19lcnJvcigiaW52YWxpZCBhcmd1bWVudCBm b3Igb3B0aW9uICVzIiwgIi1PIik7CkBAIC03NDMsNyArNzQzLDcgQEAgUHJpbnRDb250cm9sVmFs dWVzKGJvb2wgZ3Vlc3NlZCkKIAkJICAgQ29udHJvbEZpbGUuY2hlY2tQb2ludENvcHkubmV4dE9p ZCk7CiAJcHJpbnRmKF8oIkxhdGVzdCBjaGVja3BvaW50J3MgTmV4dE11bHRpWGFjdElkOiAgJXVc biIpLAogCQkgICBDb250cm9sRmlsZS5jaGVja1BvaW50Q29weS5uZXh0TXVsdGkpOwotCXByaW50 ZihfKCJMYXRlc3QgY2hlY2twb2ludCdzIE5leHRNdWx0aU9mZnNldDogICV1XG4iKSwKKwlwcmlu dGYoXygiTGF0ZXN0IGNoZWNrcG9pbnQncyBOZXh0TXVsdGlPZmZzZXQ6ICAlIiBQUkl1NjQgIlxu IiksCiAJCSAgIENvbnRyb2xGaWxlLmNoZWNrUG9pbnRDb3B5Lm5leHRNdWx0aU9mZnNldCk7CiAJ cHJpbnRmKF8oIkxhdGVzdCBjaGVja3BvaW50J3Mgb2xkZXN0WElEOiAgICAgICAgJXVcbiIpLAog CQkgICBDb250cm9sRmlsZS5jaGVja1BvaW50Q29weS5vbGRlc3RYaWQpOwpAQCAtODE3LDcgKzgx Nyw3IEBAIFByaW50TmV3Q29udHJvbFZhbHVlcyh2b2lkKQogCiAJaWYgKHNldF9teG9mZiAhPSAt MSkKIAl7Ci0JCXByaW50ZihfKCJOZXh0TXVsdGlPZmZzZXQ6ICAgICAgICAgICAgICAgICAgICAg ICV1XG4iKSwKKwkJcHJpbnRmKF8oIk5leHRNdWx0aU9mZnNldDogICAgICAgICAgICAgICAgICAg ICAgJSIgUFJJdTY0ICJcbiIpLAogCQkJICAgQ29udHJvbEZpbGUuY2hlY2tQb2ludENvcHkubmV4 dE11bHRpT2Zmc2V0KTsKIAl9CiAKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfcmVzZXR3YWwvdC8w MDFfYmFzaWMucGwgYi9zcmMvYmluL3BnX3Jlc2V0d2FsL3QvMDAxX2Jhc2ljLnBsCmluZGV4IGQ2 YmJiZDBjZWRhLi5jYzg5ZTA3NjRhZSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19yZXNldHdhbC90 LzAwMV9iYXNpYy5wbAorKysgYi9zcmMvYmluL3BnX3Jlc2V0d2FsL3QvMDAxX2Jhc2ljLnBsCkBA IC0yMTMsNyArMjEzLDcgQEAgcHVzaCBAY21kLAogICBzcHJpbnRmKCIlZCwlZCIsIGhleCgkZmls ZXNbMF0pID09IDAgPyAzIDogaGV4KCRmaWxlc1swXSksIGhleCgkZmlsZXNbLTFdKSk7CiAKIEBm aWxlcyA9IGdldF9zbHJ1X2ZpbGVzKCdwZ19tdWx0aXhhY3Qvb2Zmc2V0cycpOwotJG11bHQgPSAz MiAqICRibGNrc3ogLyA0OworJG11bHQgPSAzMiAqICRibGNrc3ogLyA4OwogIyAtLW11bHRpeGFj dC1pZHMgYXJndW1lbnQgaXMgIm5ldyxvbGQiCiBwdXNoIEBjbWQsCiAgICctLW11bHRpeGFjdC1p ZHMnID0+IHNwcmludGYoIiVkLCVkIiwKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9t dWx0aXhhY3QuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9tdWx0aXhhY3QuaAppbmRleCA4MmU0YmI5 MGRkNS4uN2Q5OGZlMGZlMzIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9tdWx0aXhh Y3QuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvbXVsdGl4YWN0LmgKQEAgLTI4LDggKzI4LDYg QEAKIAogI2RlZmluZSBNdWx0aVhhY3RJZElzVmFsaWQobXVsdGkpICgobXVsdGkpICE9IEludmFs aWRNdWx0aVhhY3RJZCkKIAotI2RlZmluZSBNYXhNdWx0aVhhY3RPZmZzZXQJKChNdWx0aVhhY3RP ZmZzZXQpIDB4RkZGRkZGRkYpCi0KIC8qCiAgKiBQb3NzaWJsZSBtdWx0aXhhY3QgbG9jayBtb2Rl cyAoInN0YXR1cyIpLiAgVGhlIGZpcnN0IGZvdXIgbW9kZXMgYXJlIGZvcgogICogdHVwbGUgbG9j a3MgKEZPUiBLRVkgU0hBUkUsIEZPUiBTSEFSRSwgRk9SIE5PIEtFWSBVUERBVEUsIEZPUiBVUERB VEUpOyB0aGUKQEAgLTE0Nyw3ICsxNDUsNiBAQCBleHRlcm4gdm9pZCBNdWx0aVhhY3RTZXROZXh0 TVhhY3QoTXVsdGlYYWN0SWQgbmV4dE11bHRpLAogZXh0ZXJuIHZvaWQgTXVsdGlYYWN0QWR2YW5j ZU5leHRNWGFjdChNdWx0aVhhY3RJZCBtaW5NdWx0aSwKIAkJCQkJCQkJCSAgTXVsdGlYYWN0T2Zm c2V0IG1pbk11bHRpT2Zmc2V0KTsKIGV4dGVybiB2b2lkIE11bHRpWGFjdEFkdmFuY2VPbGRlc3Qo TXVsdGlYYWN0SWQgb2xkZXN0TXVsdGksIE9pZCBvbGRlc3RNdWx0aURCKTsKLWV4dGVybiBpbnQJ TXVsdGlYYWN0TWVtYmVyRnJlZXplVGhyZXNob2xkKHZvaWQpOwogCiBleHRlcm4gdm9pZCBtdWx0 aXhhY3RfdHdvcGhhc2VfcmVjb3ZlcihGdWxsVHJhbnNhY3Rpb25JZCBmeGlkLCB1aW50MTYgaW5m bywKIAkJCQkJCQkJCSAgIHZvaWQgKnJlY2RhdGEsIHVpbnQzMiBsZW4pOwpkaWZmIC0tZ2l0IGEv c3JjL2luY2x1ZGUvYWNjZXNzL211bHRpeGFjdF9pbnRlcm5hbC5oIGIvc3JjL2luY2x1ZGUvYWNj ZXNzL211bHRpeGFjdF9pbnRlcm5hbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAwLi43M2ZiM2U5OThmYgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vz cy9tdWx0aXhhY3RfaW50ZXJuYWwuaApAQCAtMCwwICsxLDEwOSBAQAorLyoKKyAqIG11bHRpeGFj dF9pbnRlcm5hbC5oCisgKgorICogRGVmaW5lcyBhbmQgaGVscGVyIGZ1bmN0aW9ucyBmb3IgdGhl IFBvc3RncmVTUUwgbXVsdGktdHJhbnNhY3Rpb24tbG9nIG1hbmFnZXIKKyAqCisgKiBQb3J0aW9u cyBDb3B5cmlnaHQgKGMpIDIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3Vw CisgKgorICogc3JjL2luY2x1ZGUvYWNjZXNzL211bHRpeGFjdF9pbnRlcm5hbC5oCisgKi8KKyNp Zm5kZWYgTVVMVElYQUNUX0lOVEVSTkFMX0gKKyNkZWZpbmUgTVVMVElYQUNUX0lOVEVSTkFMX0gK KworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJhY2Nlc3MvbXVsdGl4YWN0Lmgi CisKKy8qCisgKiBEZWZpbmVzIGZvciBNdWx0aVhhY3RPZmZzZXQgcGFnZSBzaXplcy4gIEEgcGFn ZSBpcyB0aGUgc2FtZSBCTENLU1ogYXMgaXMKKyAqIHVzZWQgZXZlcnl3aGVyZSBlbHNlIGluIFBv c3RncmVzLgorICovCisKKy8qIFdlIG5lZWQgOCBieXRlcyBwZXIgb2Zmc2V0ICovCisjZGVmaW5l IE1VTFRJWEFDVF9PRkZTRVRTX1BFUl9QQUdFIChCTENLU1ogLyBzaXplb2YoTXVsdGlYYWN0T2Zm c2V0KSkKKworc3RhdGljIGlubGluZSBpbnQ2NAorTXVsdGlYYWN0SWRUb09mZnNldFBhZ2UoTXVs dGlYYWN0SWQgbXVsdGkpCit7CisJcmV0dXJuIG11bHRpIC8gTVVMVElYQUNUX09GRlNFVFNfUEVS X1BBR0U7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitNdWx0aVhhY3RJZFRvT2Zmc2V0RW50cnko TXVsdGlYYWN0SWQgbXVsdGkpCit7CisJcmV0dXJuIG11bHRpICUgTVVMVElYQUNUX09GRlNFVFNf UEVSX1BBR0U7Cit9CisKKy8qCisgKiBUaGUgc2l0dWF0aW9uIGZvciBtZW1iZXJzIGlzIGEgYml0 IG1vcmUgY29tcGxleDogd2Ugc3RvcmUgb25lIGJ5dGUgb2YKKyAqIGFkZGl0aW9uYWwgZmxhZyBi aXRzIGZvciBlYWNoIFRyYW5zYWN0aW9uSWQuICBUbyBkbyB0aGlzIHdpdGhvdXQgZ2V0dGluZwor ICogaW50byBhbGlnbm1lbnQgaXNzdWVzLCB3ZSBzdG9yZSBmb3VyIGJ5dGVzIG9mIGZsYWdzLCBh bmQgdGhlbiB0aGUKKyAqIGNvcnJlc3BvbmRpbmcgNCBYaWRzLiAgRWFjaCBzdWNoIDUtd29yZCAo MjAtYnl0ZSkgc2V0IHdlIGNhbGwgYSAiZ3JvdXAiLCBhbmQKKyAqIGFyZSBzdG9yZWQgYXMgYSB3 aG9sZSBpbiBwYWdlcy4gIFRodXMsIHdpdGggOGtCIEJMQ0tTWiwgd2Uga2VlcCA0MDkgZ3JvdXBz CisgKiBwZXIgcGFnZS4gIFRoaXMgd2FzdGVzIDEyIGJ5dGVzIHBlciBwYWdlLCBidXQgdGhhdCdz IE9LIC0tIHNpbXBsaWNpdHkgKGFuZAorICogcGVyZm9ybWFuY2UpIHRydW1wcyBzcGFjZSBlZmZp Y2llbmN5IGhlcmUuCisgKgorICogTm90ZSB0aGF0IHRoZSAib2Zmc2V0IiBtYWNyb3Mgd29yayB3 aXRoIGJ5dGUgb2Zmc2V0LCBub3QgYXJyYXkgaW5kZXhlcywgc28KKyAqIGFyaXRobWV0aWMgbXVz dCBiZSBkb25lIHVzaW5nICJjaGFyICoiIHBvaW50ZXJzLgorICovCisvKiBXZSBuZWVkIGVpZ2h0 IGJpdHMgcGVyIHhhY3QsIHNvIG9uZSB4YWN0IGZpdHMgaW4gYSBieXRlICovCisjZGVmaW5lIE1Y QUNUX01FTUJFUl9CSVRTX1BFUl9YQUNUCQkJOAorI2RlZmluZSBNWEFDVF9NRU1CRVJfRkxBR1Nf UEVSX0JZVEUJCQkxCisjZGVmaW5lIE1YQUNUX01FTUJFUl9YQUNUX0JJVE1BU0sJKCgxIDw8IE1Y QUNUX01FTUJFUl9CSVRTX1BFUl9YQUNUKSAtIDEpCisKKy8qIGhvdyBtYW55IGZ1bGwgYnl0ZXMg b2YgZmxhZ3MgYXJlIHRoZXJlIGluIGEgZ3JvdXA/ICovCisjZGVmaW5lIE1VTFRJWEFDVF9GTEFH QllURVNfUEVSX0dST1VQCQk0CisjZGVmaW5lIE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9NRU1CRVJH Uk9VUAlcCisJKE1VTFRJWEFDVF9GTEFHQllURVNfUEVSX0dST1VQICogTVhBQ1RfTUVNQkVSX0ZM QUdTX1BFUl9CWVRFKQorLyogc2l6ZSBpbiBieXRlcyBvZiBhIGNvbXBsZXRlIGdyb3VwICovCisj ZGVmaW5lIE1VTFRJWEFDVF9NRU1CRVJHUk9VUF9TSVpFIFwKKwkoc2l6ZW9mKFRyYW5zYWN0aW9u SWQpICogTVVMVElYQUNUX01FTUJFUlNfUEVSX01FTUJFUkdST1VQICsgTVVMVElYQUNUX0ZMQUdC WVRFU19QRVJfR1JPVVApCisjZGVmaW5lIE1VTFRJWEFDVF9NRU1CRVJHUk9VUFNfUEVSX1BBR0Ug KEJMQ0tTWiAvIE1VTFRJWEFDVF9NRU1CRVJHUk9VUF9TSVpFKQorI2RlZmluZSBNVUxUSVhBQ1Rf TUVNQkVSU19QRVJfUEFHRQlcCisJKE1VTFRJWEFDVF9NRU1CRVJHUk9VUFNfUEVSX1BBR0UgKiBN VUxUSVhBQ1RfTUVNQkVSU19QRVJfTUVNQkVSR1JPVVApCisKKy8qIHBhZ2UgaW4gd2hpY2ggYSBt ZW1iZXIgaXMgdG8gYmUgZm91bmQgKi8KK3N0YXRpYyBpbmxpbmUgaW50NjQKK01YT2Zmc2V0VG9N ZW1iZXJQYWdlKE11bHRpWGFjdE9mZnNldCBvZmZzZXQpCit7CisJcmV0dXJuIG9mZnNldCAvIE1V TFRJWEFDVF9NRU1CRVJTX1BFUl9QQUdFOworfQorCitzdGF0aWMgaW5saW5lIGludDY0CitNWE9m ZnNldFRvTWVtYmVyU2VnbWVudChNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0KQoreworCXJldHVybiBN WE9mZnNldFRvTWVtYmVyUGFnZShvZmZzZXQpIC8gU0xSVV9QQUdFU19QRVJfU0VHTUVOVDsKK30K KworLyogTG9jYXRpb24gKGJ5dGUgb2Zmc2V0IHdpdGhpbiBwYWdlKSBvZiBmbGFnIHdvcmQgZm9y IGEgZ2l2ZW4gbWVtYmVyICovCitzdGF0aWMgaW5saW5lIGludAorTVhPZmZzZXRUb0ZsYWdzT2Zm c2V0KE11bHRpWGFjdE9mZnNldCBvZmZzZXQpCit7CisJTXVsdGlYYWN0T2Zmc2V0IGdyb3VwID0g b2Zmc2V0IC8gTVVMVElYQUNUX01FTUJFUlNfUEVSX01FTUJFUkdST1VQOworCWludAkJCWdyb3Vw b25wZyA9IGdyb3VwICUgTVVMVElYQUNUX01FTUJFUkdST1VQU19QRVJfUEFHRTsKKwlpbnQJCQli eXRlb2ZmID0gZ3JvdXBvbnBnICogTVVMVElYQUNUX01FTUJFUkdST1VQX1NJWkU7CisKKwlyZXR1 cm4gYnl0ZW9mZjsKK30KKworc3RhdGljIGlubGluZSBpbnQKK01YT2Zmc2V0VG9GbGFnc0JpdFNo aWZ0KE11bHRpWGFjdE9mZnNldCBvZmZzZXQpCit7CisJaW50CQkJbWVtYmVyX2luX2dyb3VwID0g b2Zmc2V0ICUgTVVMVElYQUNUX01FTUJFUlNfUEVSX01FTUJFUkdST1VQOworCWludAkJCWJzaGlm dCA9IG1lbWJlcl9pbl9ncm91cCAqIE1YQUNUX01FTUJFUl9CSVRTX1BFUl9YQUNUOworCisJcmV0 dXJuIGJzaGlmdDsKK30KKworLyogTG9jYXRpb24gKGJ5dGUgb2Zmc2V0IHdpdGhpbiBwYWdlKSBv ZiBUcmFuc2FjdGlvbklkIG9mIGdpdmVuIG1lbWJlciAqLworc3RhdGljIGlubGluZSBpbnQKK01Y T2Zmc2V0VG9NZW1iZXJPZmZzZXQoTXVsdGlYYWN0T2Zmc2V0IG9mZnNldCkKK3sKKwlpbnQJCQlt ZW1iZXJfaW5fZ3JvdXAgPSBvZmZzZXQgJSBNVUxUSVhBQ1RfTUVNQkVSU19QRVJfTUVNQkVSR1JP VVA7CisKKwlyZXR1cm4gTVhPZmZzZXRUb0ZsYWdzT2Zmc2V0KG9mZnNldCkgKworCQlNVUxUSVhB Q1RfRkxBR0JZVEVTX1BFUl9HUk9VUCArCisJCW1lbWJlcl9pbl9ncm91cCAqIHNpemVvZihUcmFu c2FjdGlvbklkKTsKK30KKworI2VuZGlmCQkJCQkJCS8qIE1VTFRJWEFDVF9JTlRFUk5BTF9IICov CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3Mvc2xydS5oIGIvc3JjL2luY2x1ZGUvYWNj ZXNzL3NscnUuaAppbmRleCA4ZDU3NzUzZWQwMS4uODU3NjY0OWIxNWUgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbmNsdWRlL2FjY2Vzcy9zbHJ1LmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3NscnUuaApA QCAtMjMsMjEgKzIzLDYgQEAKICAqLwogI2RlZmluZSBTTFJVX01BWF9BTExPV0VEX0JVRkZFUlMg KCgxMDI0ICogMTAyNCAqIDEwMjQpIC8gQkxDS1NaKQogCi0vKgotICogRGVmaW5lIFNMUlUgc2Vn bWVudCBzaXplLiAgQSBwYWdlIGlzIHRoZSBzYW1lIEJMQ0tTWiBhcyBpcyB1c2VkIGV2ZXJ5d2hl cmUKLSAqIGVsc2UgaW4gUG9zdGdyZXMuICBUaGUgc2VnbWVudCBzaXplIGNhbiBiZSBjaG9zZW4g c29tZXdoYXQgYXJiaXRyYXJpbHk7Ci0gKiB3ZSBtYWtlIGl0IDMyIHBhZ2VzIGJ5IGRlZmF1bHQs IG9yIDI1NktiLCBpLmUuIDFNIHRyYW5zYWN0aW9ucyBmb3IgQ0xPRwotICogb3IgNjRLIHRyYW5z YWN0aW9ucyBmb3IgU1VCVFJBTlMuCi0gKgotICogTm90ZTogYmVjYXVzZSBUcmFuc2FjdGlvbklk cyBhcmUgMzIgYml0cyBhbmQgd3JhcCBhcm91bmQgYXQgMHhGRkZGRkZGRiwKLSAqIHBhZ2UgbnVt YmVyaW5nIGFsc28gd3JhcHMgYXJvdW5kIGF0IDB4RkZGRkZGRkYveHh4eF9YQUNUU19QRVJfUEFH RSAod2hlcmUKLSAqIHh4eHggaXMgQ0xPRyBvciBTVUJUUkFOUywgcmVzcGVjdGl2ZWx5KSwgYW5k IHNlZ21lbnQgbnVtYmVyaW5nIGF0Ci0gKiAweEZGRkZGRkZGL3h4eHhfWEFDVFNfUEVSX1BBR0Uv U0xSVV9QQUdFU19QRVJfU0VHTUVOVC4gIFdlIG5lZWQKLSAqIHRha2Ugbm8gZXhwbGljaXQgbm90 aWNlIG9mIHRoYXQgZmFjdCBpbiBzbHJ1LmMsIGV4Y2VwdCB3aGVuIGNvbXBhcmluZwotICogc2Vn bWVudCBhbmQgcGFnZSBudW1iZXJzIGluIFNpbXBsZUxydVRydW5jYXRlIChzZWUgUGFnZVByZWNl ZGVzKCkpLgotICovCi0jZGVmaW5lIFNMUlVfUEFHRVNfUEVSX1NFR01FTlQJMzIKLQogLyoKICAq IFBhZ2Ugc3RhdHVzIGNvZGVzLiAgTm90ZSB0aGF0IHRoZXNlIGRvIG5vdCBpbmNsdWRlIHRoZSAi ZGlydHkiIGJpdC4KICAqIHBhZ2VfZGlydHkgY2FuIGJlIHRydWUgb25seSBpbiB0aGUgVkFMSUQg b3IgV1JJVEVfSU5fUFJPR1JFU1Mgc3RhdGVzOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYy5o IGIvc3JjL2luY2x1ZGUvYy5oCmluZGV4IDc1N2RmZmY0NzgyLi5iYzkyYTZmNDU2NSAxMDA2NDQK LS0tIGEvc3JjL2luY2x1ZGUvYy5oCisrKyBiL3NyYy9pbmNsdWRlL2MuaApAQCAtNjcwLDcgKzY3 MCw3IEBAIHR5cGVkZWYgdWludDMyIFN1YlRyYW5zYWN0aW9uSWQ7CiAvKiBNdWx0aVhhY3RJZCBt dXN0IGJlIGVxdWl2YWxlbnQgdG8gVHJhbnNhY3Rpb25JZCwgdG8gZml0IGluIHRfeG1heCAqLwog dHlwZWRlZiBUcmFuc2FjdGlvbklkIE11bHRpWGFjdElkOwogCi10eXBlZGVmIHVpbnQzMiBNdWx0 aVhhY3RPZmZzZXQ7Cit0eXBlZGVmIHVpbnQ2NCBNdWx0aVhhY3RPZmZzZXQ7CiAKIHR5cGVkZWYg dWludDMyIENvbW1hbmRJZDsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcGdfY29uZmlnX21h bnVhbC5oIGIvc3JjL2luY2x1ZGUvcGdfY29uZmlnX21hbnVhbC5oCmluZGV4IDdlMWFhNDIyMzMy Li44NTU2Y2U0MGNiZiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcGdfY29uZmlnX21hbnVhbC5o CisrKyBiL3NyYy9pbmNsdWRlL3BnX2NvbmZpZ19tYW51YWwuaApAQCAtMzU2LDMgKzM1NiwxOCBA QAogICogRW5hYmxlIHRyYWNpbmcgb2Ygc3luY3NjYW4gb3BlcmF0aW9ucyAoc2VlIGFsc28gdGhl IHRyYWNlX3N5bmNzY2FuIEdVQyB2YXIpLgogICovCiAvKiAjZGVmaW5lIFRSQUNFX1NZTkNTQ0FO ICovCisKKy8qCisgKiBEZWZpbmUgU0xSVSBzZWdtZW50IHNpemUuICBBIHBhZ2UgaXMgdGhlIHNh bWUgQkxDS1NaIGFzIGlzIHVzZWQgZXZlcnl3aGVyZQorICogZWxzZSBpbiBQb3N0Z3Jlcy4gIFRo ZSBzZWdtZW50IHNpemUgY2FuIGJlIGNob3NlbiBzb21ld2hhdCBhcmJpdHJhcmlseTsKKyAqIHdl IG1ha2UgaXQgMzIgcGFnZXMgYnkgZGVmYXVsdCwgb3IgMjU2S2IsIGkuZS4gMU0gdHJhbnNhY3Rp b25zIGZvciBDTE9HCisgKiBvciA2NEsgdHJhbnNhY3Rpb25zIGZvciBTVUJUUkFOUy4KKyAqCisg KiBOb3RlOiBiZWNhdXNlIFRyYW5zYWN0aW9uSWRzIGFyZSAzMiBiaXRzIGFuZCB3cmFwIGFyb3Vu ZCBhdCAweEZGRkZGRkZGLAorICogcGFnZSBudW1iZXJpbmcgYWxzbyB3cmFwcyBhcm91bmQgYXQg MHhGRkZGRkZGRi94eHh4X1hBQ1RTX1BFUl9QQUdFICh3aGVyZQorICogeHh4eCBpcyBDTE9HIG9y IFNVQlRSQU5TLCByZXNwZWN0aXZlbHkpLCBhbmQgc2VnbWVudCBudW1iZXJpbmcgYXQKKyAqIDB4 RkZGRkZGRkYveHh4eF9YQUNUU19QRVJfUEFHRS9TTFJVX1BBR0VTX1BFUl9TRUdNRU5ULiAgV2Ug bmVlZAorICogdGFrZSBubyBleHBsaWNpdCBub3RpY2Ugb2YgdGhhdCBmYWN0IGluIHNscnUuYywg ZXhjZXB0IHdoZW4gY29tcGFyaW5nCisgKiBzZWdtZW50IGFuZCBwYWdlIG51bWJlcnMgaW4gU2lt cGxlTHJ1VHJ1bmNhdGUgKHNlZSBQYWdlUHJlY2VkZXMoKSkuCisgKi8KKyNkZWZpbmUgU0xSVV9Q QUdFU19QRVJfU0VHTUVOVAkzMgotLSAKMi41MS4wCgo= --000000000000a9529e0642ef063c Content-Type: application/octet-stream; name="v23-0005-Handle-wraparound-of-next-new-multi-in-pg_upgrad.patch" Content-Disposition: attachment; filename="v23-0005-Handle-wraparound-of-next-new-multi-in-pg_upgrad.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mhnlrz7h4 RnJvbSAwNmRkYTE2ZGJlMjMyZmEzMDRjOWNlNDE4ZDMyMmNmMTNiYWMxOTAxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbSBPcmxvdiA8b3Jsb3ZtZ0BnbWFpbC5jb20+CkRhdGU6 IFRodSwgNiBOb3YgMjAyNSAxNjo1NDozMyArMDMwMApTdWJqZWN0OiBbUEFUQ0ggdjIzIDUvN10g SGFuZGxlIHdyYXBhcm91bmQgb2YgbmV4dCBuZXcgbXVsdGkgaW4gcGdfdXBncmFkZQoKUGVyIEJV RyAjMTg4NjMgYW5kIEJVRyAjMTg4NjUKLS0tCiBzcmMvYmluL3BnX3VwZ3JhZGUvbWVzb24uYnVp bGQgICAgICAgICB8ICAgMSArCiBzcmMvYmluL3BnX3VwZ3JhZGUvcGdfdXBncmFkZS5jICAgICAg ICB8ICAgNSArCiBzcmMvYmluL3BnX3VwZ3JhZGUvdC8wMDdfbXVsdGlfd3JhcC5wbCB8IDE3NiAr KysrKysrKysrKysrKysrKysrKysrKysrCiAzIGZpbGVzIGNoYW5nZWQsIDE4MiBpbnNlcnRpb25z KCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2Jpbi9wZ191cGdyYWRlL3QvMDA3X211bHRpX3dy YXAucGwKCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX3VwZ3JhZGUvbWVzb24uYnVpbGQgYi9zcmMv YmluL3BnX3VwZ3JhZGUvbWVzb24uYnVpbGQKaW5kZXggM2U0NmM0NTEyY2YuLmNhODdhZTIyMWNl IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX3VwZ3JhZGUvbWVzb24uYnVpbGQKKysrIGIvc3JjL2Jp bi9wZ191cGdyYWRlL21lc29uLmJ1aWxkCkBAIC01MCw2ICs1MCw3IEBAIHRlc3RzICs9IHsKICAg ICAgICd0LzAwNF9zdWJzY3JpcHRpb24ucGwnLAogICAgICAgJ3QvMDA1X2NoYXJfc2lnbmVkbmVz cy5wbCcsCiAgICAgICAndC8wMDZfdHJhbnNmZXJfbW9kZXMucGwnLAorICAgICAgJ3QvMDA3X211 bHRpX3dyYXAucGwnLAogICAgIF0sCiAgICAgJ3Rlc3Rfa3dhcmdzJzogeydwcmlvcml0eSc6IDQw fSwgIyBwZ191cGdyYWRlIHRlc3RzIGFyZSBzbG93CiAgIH0sCmRpZmYgLS1naXQgYS9zcmMvYmlu L3BnX3VwZ3JhZGUvcGdfdXBncmFkZS5jIGIvc3JjL2Jpbi9wZ191cGdyYWRlL3BnX3VwZ3JhZGUu YwppbmRleCAwZmRkMDVjMTI3Yy4uZWI4NzA1MmM0YWQgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdf dXBncmFkZS9wZ191cGdyYWRlLmMKKysrIGIvc3JjL2Jpbi9wZ191cGdyYWRlL3BnX3VwZ3JhZGUu YwpAQCAtOTA4LDExICs5MDgsMTYgQEAgY29weV94YWN0X3hsb2dfeGlkKHZvaWQpCiAJCQlyZW1v dmVfbmV3X3N1YmRpcigicGdfbXVsdGl4YWN0L29mZnNldHMiLCBmYWxzZSk7CiAKIAkJCXByZXBf c3RhdHVzKCJDb252ZXJ0aW5nIHBnX211bHRpeGFjdC9vZmZzZXRzIHRvIDY0LWJpdCIpOworCQkJ LyogY29udmVydF9tdWx0aXhhY3RzIGhhbmRsZXMgbmV3X254dG11bHRpIHdyYXBhcm91bmQgKi8K IAkJCWNvbnZlcnRfbXVsdGl4YWN0cygmbmV3X254dG11bHRpLCAmbmV3X254dG14b2ZmKTsKIAkJ CWNoZWNrX29rKCk7CiAJCX0KIAkJZWxzZQogCQl7CisJCQkvKiBoYW5kbGUgd3JhcGFyb3VuZCAq LworCQkJaWYgKG5ld19ueHRtdWx0aSA8IEZpcnN0TXVsdGlYYWN0SWQpCisJCQkJbmV3X254dG11 bHRpID0gRmlyc3RNdWx0aVhhY3RJZDsKKwogCQkJY29weV9zdWJkaXJfZmlsZXMoInBnX211bHRp eGFjdC9vZmZzZXRzIiwgInBnX211bHRpeGFjdC9vZmZzZXRzIik7CiAJCQljb3B5X3N1YmRpcl9m aWxlcygicGdfbXVsdGl4YWN0L21lbWJlcnMiLCAicGdfbXVsdGl4YWN0L21lbWJlcnMiKTsKIAkJ fQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ191cGdyYWRlL3QvMDA3X211bHRpX3dyYXAucGwgYi9z cmMvYmluL3BnX3VwZ3JhZGUvdC8wMDdfbXVsdGlfd3JhcC5wbApuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMC4uMGFkOGZkNTk5MDYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMv YmluL3BnX3VwZ3JhZGUvdC8wMDdfbXVsdGlfd3JhcC5wbApAQCAtMCwwICsxLDE3NiBAQAorCisj IENvcHlyaWdodCAoYykgMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAK KwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5ncyBGQVRBTCA9PiAnYWxsJzsKKwordXNlIE1hdGg6 OkJpZ0ludDsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwordXNlIFBvc3RncmVTUUw6 OlRlc3Q6OlV0aWxzOwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OkFkanVzdER1bXA7Cit1c2UgUG9z dGdyZVNRTDo6VGVzdDo6QWRqdXN0VXBncmFkZTsKK3VzZSBUZXN0OjpNb3JlOworCisjIFRlbXAg ZGlyIGZvciBhIGR1bXBzLgorbXkgJHRlbXBkaXIgPSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczo6 dGVtcGRpcjsKKworIyBDYW4gYmUgY2hhbmdlZCB0byB0ZXN0IHRoZSBvdGhlciBtb2Rlcy4KK215 ICRtb2RlID0gJEVOVntQR19URVNUX1BHX1VQR1JBREVfTU9ERX0gfHwgJy0tY29weSc7CisKKyMg SGFuZHkgcGdfcmVzZXR3YWwgd3JhcHBlcgorc3ViIHJlc2V0X214b2ZmCit7CisJbXkgJWFyZ3Mg PSBAXzsKKworCW15ICRub2RlID0gJGFyZ3N7bm9kZX07CisJbXkgJG9mZnNldCA9ICRhcmdze29m ZnNldH07CisJbXkgJG11bHRpID0gJGFyZ3N7bXVsdGl9OworCW15ICRibGNrc3ogPSBzdWIgIyBH ZXQgYmxvY2sgc2l6ZQorCXsKKwkJbXkgJG91dCA9IChydW5fY29tbWFuZChbICdwZ19yZXNldHdh bCcsICctLWRyeS1ydW4nLAorCQkJCQkJCQkgJG5vZGUtPmRhdGFfZGlyIF0pKVswXTsKKwkJJG91 dCA9fiAvXkRhdGFiYXNlIGJsb2NrIHNpemU6ICooXGQrKSQvbSBvciBkaWU7CisJCXJldHVybiAk MTsKKwl9LT4oKTsKKworCW15IEBjbWQ7CisKKwkjIFJlc2V0IGNsdXN0ZXIKKwlAY21kID0gKCdw Z19yZXNldHdhbCcsICctLXBnZGF0YScgPT4gJG5vZGUtPmRhdGFfZGlyKTsKKwlpZiAoZGVmaW5l ZCgkb2Zmc2V0KSkKKwl7CisJCXB1c2ggQGNtZCwgJy0tbXVsdGl4YWN0LW9mZnNldCcgPT4gJG9m ZnNldDsKKwl9CisJaWYgKGRlZmluZWQoJG11bHRpKSkKKwl7CisJCXB1c2ggQGNtZCwgIi0tbXVs dGl4YWN0LWlkcz0kbXVsdGksJG11bHRpIjsKKwl9CisJY29tbWFuZF9vayhcQGNtZCwgJ3Jlc2V0 IG11bHRpL29mZnNldCcpOworCisJbXkgJG5faXRlbXM7CisJbXkgJHNlZ25hbWU7CisKKwkjIEZp bGwgZW1wdHkgcGdfbXVsdGl4YWN0IHNlZ21lbnRzCisJaWYgKGRlZmluZWQoJG9mZnNldCkpCisJ eworCQkkbl9pdGVtcyA9IDMyICogaW50KCRibGNrc3ogLyAyMCkgKiA0OworCQkkc2VnbmFtZSA9 IHNwcmludGYgIiUwMTVYIiwgKCRvZmZzZXQgLyAkbl9pdGVtcyk7CisJCSRzZWduYW1lID0gJG5v ZGUtPmRhdGFfZGlyIC4gIi9wZ19tdWx0aXhhY3QvbWVtYmVycy8iIC4gJHNlZ25hbWU7CisKKwkJ QGNtZCA9ICgnZGQnKTsKKwkJcHVzaCBAY21kLCAiaWY9L2Rldi96ZXJvIjsKKwkJcHVzaCBAY21k LCAib2Y9IiAuICRzZWduYW1lOworCQlwdXNoIEBjbWQsICJicz0kYmxja3N6IjsKKwkJcHVzaCBA Y21kLCAiY291bnQ9MzIiOworCQljb21tYW5kX29rKFxAY21kLCAnZmlsbCBlbXB0eSBtdWx0aXhh Y3QtbWVtYmVycycpOworCX0KKworCWlmIChkZWZpbmVkKCRtdWx0aSkpCisJeworCQkkbl9pdGVt cyA9IDMyICogaW50KCRibGNrc3ogLyA4KTsKKwkJJHNlZ25hbWUgPSBzcHJpbnRmICIlMDRYIiwg JG11bHRpIC8gJG5faXRlbXM7CisJCSRzZWduYW1lID0gJG5vZGUtPmRhdGFfZGlyIC4gIi9wZ19t dWx0aXhhY3Qvb2Zmc2V0cy8iIC4gJHNlZ25hbWU7CisKKwkJQGNtZCA9ICgnZGQnKTsKKwkJcHVz aCBAY21kLCAiaWY9L2Rldi96ZXJvIjsKKwkJcHVzaCBAY21kLCAib2Y9IiAuICRzZWduYW1lOwor CQlwdXNoIEBjbWQsICJicz0kYmxja3N6IjsKKwkJcHVzaCBAY21kLCAiY291bnQ9MzIiOworCQlj b21tYW5kX29rKFxAY21kLCAnZmlsbCBlbXB0eSBtdWx0aXhhY3Qtb2Zmc2V0cycpOworCX0KK30K Kworc3ViIGdldF9kdW1wX2Zvcl9jb21wYXJpc29uCit7CisJbXkgKCRub2RlLCAkZGIsICRmaWxl X3ByZWZpeCwgJGFkanVzdF9jaGlsZF9jb2x1bW5zKSA9IEBfOworCisJbXkgJGR1bXBmaWxlID0g JHRlbXBkaXIgLiAnLycgLiAkZmlsZV9wcmVmaXggLiAnLnNxbCc7CisJbXkgJGR1bXBfYWRqdXN0 ZWQgPSAiJHtkdW1wZmlsZX1fYWRqdXN0ZWQiOworCisJb3BlbihteSAkZGgsICc+JywgJGR1bXBf YWRqdXN0ZWQpCisJICB8fCBkaWUgImNvdWxkIG5vdCBvcGVuICRkdW1wX2FkanVzdGVkIGZvciB3 cml0aW5nICQhIjsKKworCSRub2RlLT5ydW5fbG9nKAorCQlbCisJCQkncGdfZHVtcCcsICctLW5v LXN5bmMnLAorCQkJJy0tcmVzdHJpY3Qta2V5JyA9PiAndGVzdCcsCisJCQknLWQnID0+ICRub2Rl LT5jb25uc3RyKCRkYiksCisJCQknLWYnID0+ICRkdW1wZmlsZQorCQldKTsKKworCXByaW50ICRk aCBhZGp1c3RfcmVncmVzc19kdW1wZmlsZShzbHVycF9maWxlKCRkdW1wZmlsZSksCisJCSRhZGp1 c3RfY2hpbGRfY29sdW1ucyk7CisJY2xvc2UoJGRoKTsKKworCXJldHVybiAkZHVtcF9hZGp1c3Rl ZDsKK30KKworIyBDcmVhdGUgb2xkIG5vZGUKK215ICRvbGQgPSBQb3N0Z3JlU1FMOjpUZXN0OjpD bHVzdGVyLT5uZXcoIm9sZCIpOworJG9sZC0+aW5pdDsKK3Jlc2V0X214b2ZmKG5vZGUgPT4gJG9s ZCwgbXVsdGkgPT4gNDI5NDk2NzI5NSwgb2Zmc2V0ID0+IDQyOTQ5NjcyOSk7CisKKyRvbGQtPnN0 YXJ0OworJG9sZC0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCitxcSgKKwlDUkVBVEUgVEFCTEUgdGVz dF90YWJsZSAoaWQgaW50ZWdlciBOT1QgTlVMTCBQUklNQVJZIEtFWSwgdmFsIHRleHQpOworCUlO U0VSVCBJTlRPIHRlc3RfdGFibGUgVkFMVUVTICgxLCAnYScpOworKSk7CisKK215ICRjb25uMSA9 ICRvbGQtPmJhY2tncm91bmRfcHNxbCgncG9zdGdyZXMnKTsKK215ICRjb25uMiA9ICRvbGQtPmJh Y2tncm91bmRfcHNxbCgncG9zdGdyZXMnKTsKKworJGNvbm4xLT5xdWVyeV9zYWZlKHFxKAorCUJF R0lOOworCVNFTEVDVCAqIEZST00gdGVzdF90YWJsZSBXSEVSRSBpZCA9IDEgRk9SIFNIQVJFOwor KSk7CiskY29ubjItPnF1ZXJ5X3NhZmUocXEoCisJQkVHSU47CisJU0VMRUNUICogRlJPTSB0ZXN0 X3RhYmxlIFdIRVJFIGlkID0gMSBGT1IgU0hBUkU7CispKTsKKworJGNvbm4xLT5xdWVyeV9zYWZl KHFxKENPTU1JVDspKTsKKyRjb25uMi0+cXVlcnlfc2FmZShxcShDT01NSVQ7KSk7CisKKyRjb25u MS0+cXVpdDsKKyRjb25uMi0+cXVpdDsKKworJG9sZC0+c3RvcDsKKworIyBDcmVhdGUgbmV3IG5v ZGUKK215ICRuZXcgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoIm5ldyIpOworJG5l dy0+aW5pdDsKKworIyBSdW4gcGdfdXBncmFkZQorY29tbWFuZF9vaygKKwlbCisJCSdwZ191cGdy YWRlJywgJy0tbm8tc3luYycsCisJCSctLW9sZC1kYXRhZGlyJyA9PiAkb2xkLT5kYXRhX2RpciwK KwkJJy0tbmV3LWRhdGFkaXInID0+ICRuZXctPmRhdGFfZGlyLAorCQknLS1vbGQtYmluZGlyJyA9 PiAkb2xkLT5jb25maWdfZGF0YSgnLS1iaW5kaXInKSwKKwkJJy0tbmV3LWJpbmRpcicgPT4gJG5l dy0+Y29uZmlnX2RhdGEoJy0tYmluZGlyJyksCisJCSctLXNvY2tldGRpcicgPT4gJG5ldy0+aG9z dCwKKwkJJy0tb2xkLXBvcnQnID0+ICRvbGQtPnBvcnQsCisJCSctLW5ldy1wb3J0JyA9PiAkbmV3 LT5wb3J0LAorCQkkbW9kZSwKKwldLAorCSdydW4gb2YgcGdfdXBncmFkZSBmb3IgbmV3IGluc3Rh bmNlJyk7CitvayggIS1kICRuZXctPmRhdGFfZGlyIC4gIi9wZ191cGdyYWRlX291dHB1dC5kIiwK KwkicGdfdXBncmFkZV9vdXRwdXQuZC8gcmVtb3ZlZCBhZnRlciBwZ191cGdyYWRlIHN1Y2Nlc3Mi KTsKKworJG9sZC0+c3RhcnQ7CitteSAkc3JjX2R1bXAgPQorCWdldF9kdW1wX2Zvcl9jb21wYXJp c29uKCRvbGQsICdwb3N0Z3JlcycsCisJCQkJCQkJIm9sZG5vZGVfMV9kdW1wIiwgMCk7Ciskb2xk LT5zdG9wOworCiskbmV3LT5zdGFydDsKK215ICRkc3RfZHVtcCA9CisJZ2V0X2R1bXBfZm9yX2Nv bXBhcmlzb24oJG5ldywgJ3Bvc3RncmVzJywKKwkJCQkJCQkibmV3bm9kZV8xX2R1bXAiLCAwKTsK KyRuZXctPnN0b3A7CisKK2NvbXBhcmVfZmlsZXMoJHNyY19kdW1wLCAkZHN0X2R1bXAsCisJJ2R1 bXAgb3V0cHV0cyBmcm9tIG9yaWdpbmFsIGFuZCByZXN0b3JlZCByZWdyZXNzaW9uIGRhdGFiYXNl cyBtYXRjaCcpOworCitkb25lX3Rlc3RpbmcoKTsKLS0gCjIuNTEuMAoK --000000000000a9529e0642ef063c Content-Type: application/octet-stream; name="v23-0002-Add-pg_upgarde-for-64-bit-multixact-offsets.patch" Content-Disposition: attachment; filename="v23-0002-Add-pg_upgarde-for-64-bit-multixact-offsets.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mhnlrz721 RnJvbSA5NmYzNDNkYjVlNzVhM2I4ZTc0MzY0ODE2ZmJmNDk2YmJiNDM1ODRmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbSBPcmxvdiA8b3Jsb3ZtZ0BnbWFpbC5jb20+CkRhdGU6 IEZyaSwgMjQgT2N0IDIwMjUgMTA6NTg6MzcgKzAzMDAKU3ViamVjdDogW1BBVENIIHYyMyAyLzdd IEFkZCBwZ191cGdhcmRlIGZvciA2NCBiaXQgbXVsdGl4YWN0IG9mZnNldHMKCkF1dGhvcjogTWF4 aW0gT3Jsb3YgPG9ybG92bWdAZ21haWwuY29tPgpBdXRob3I6IEhlaWtraSBMaW5uYWthbmdhcyA8 aGxpbm5ha2FAaWtpLmZpPgotLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL211bHRpeGFj dC5jIHwgIDU2IC0tLS0tCiBzcmMvYmluL3BnX3VwZ3JhZGUvTWFrZWZpbGUgICAgICAgICAgICB8 ICAgMyArCiBzcmMvYmluL3BnX3VwZ3JhZGUvbWVzb24uYnVpbGQgICAgICAgICB8ICAgMyArCiBz cmMvYmluL3BnX3VwZ3JhZGUvbXVsdGl4YWN0X25ldy5jICAgICB8IDEwMyArKysrKysrKysKIHNy Yy9iaW4vcGdfdXBncmFkZS9tdWx0aXhhY3RfbmV3LmggICAgIHwgIDIzICsrCiBzcmMvYmluL3Bn X3VwZ3JhZGUvbXVsdGl4YWN0X29sZC5jICAgICB8IDI5NyArKysrKysrKysrKysrKysrKysrKysr KysrCiBzcmMvYmluL3BnX3VwZ3JhZGUvbXVsdGl4YWN0X29sZC5oICAgICB8ICAyOSArKysKIHNy Yy9iaW4vcGdfdXBncmFkZS9wZ191cGdyYWRlLmMgICAgICAgIHwgMTA4ICsrKysrKysrLQogc3Jj L2Jpbi9wZ191cGdyYWRlL3BnX3VwZ3JhZGUuaCAgICAgICAgfCAgIDUgKwogc3JjL2Jpbi9wZ191 cGdyYWRlL3NscnVfaW8uYyAgICAgICAgICAgfCAyMzkgKysrKysrKysrKysrKysrKysrKysKIHNy Yy9iaW4vcGdfdXBncmFkZS9zbHJ1X2lvLmggICAgICAgICAgIHwgIDIzICsrCiBzcmMvdG9vbHMv cGdpbmRlbnQvdHlwZWRlZnMubGlzdCAgICAgICB8ICAgMyArCiAxMiBmaWxlcyBjaGFuZ2VkLCA4 MzAgaW5zZXJ0aW9ucygrKSwgNjIgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3Jj L2Jpbi9wZ191cGdyYWRlL211bHRpeGFjdF9uZXcuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9i aW4vcGdfdXBncmFkZS9tdWx0aXhhY3RfbmV3LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmlu L3BnX3VwZ3JhZGUvbXVsdGl4YWN0X29sZC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2Jpbi9w Z191cGdyYWRlL211bHRpeGFjdF9vbGQuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iaW4vcGdf dXBncmFkZS9zbHJ1X2lvLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmluL3BnX3VwZ3JhZGUv c2xydV9pby5oCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vbXVsdGl4 YWN0LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9tdWx0aXhhY3QuYwppbmRleCA3MzJm MDQ4ZGY1ZS4uOWMzNjU2ODkwODAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFu c2FtL211bHRpeGFjdC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL211bHRpeGFj dC5jCkBAIC0xODI5LDQ4ICsxODI5LDYgQEAgQm9vdFN0cmFwTXVsdGlYYWN0KHZvaWQpCiAJU2lt cGxlTHJ1WmVyb0FuZFdyaXRlUGFnZShNdWx0aVhhY3RNZW1iZXJDdGwsIDApOwogfQogCi0vKgot ICogTWF5YmVFeHRlbmRPZmZzZXRTbHJ1Ci0gKgkJRXh0ZW5kIHRoZSBvZmZzZXRzIFNMUlUgYXJl YSwgaWYgbmVjZXNzYXJ5Ci0gKgotICogQWZ0ZXIgYSBiaW5hcnkgdXBncmFkZSBmcm9tIDw9IDku MiwgdGhlIHBnX211bHRpeGFjdC9vZmZzZXRzIFNMUlUgYXJlYSBtaWdodAotICogY29udGFpbiBm aWxlcyB0aGF0IGFyZSBzaG9ydGVyIHRoYW4gbmVjZXNzYXJ5OyB0aGlzIHdvdWxkIG9jY3VyIGlm IHRoZSBvbGQKLSAqIGluc3RhbGxhdGlvbiBoYWQgdXNlZCBtdWx0aXhhY3RzIGJleW9uZCB0aGUg Zmlyc3QgcGFnZSAoZmlsZXMgY2Fubm90IGJlCi0gKiBjb3BpZWQsIGJlY2F1c2UgdGhlIG9uLWRp c2sgcmVwcmVzZW50YXRpb24gaXMgZGlmZmVyZW50KS4gIHBnX3VwZ3JhZGUgd291bGQKLSAqIHVw ZGF0ZSBwZ19jb250cm9sIHRvIHNldCB0aGUgbmV4dCBvZmZzZXQgdmFsdWUgdG8gYmUgYXQgdGhh dCBwb3NpdGlvbiwgc28KLSAqIHRoYXQgdHVwbGVzIG1hcmtlZCBhcyBsb2NrZWQgYnkgc3VjaCBN dWx0aVhhY3RzIHdvdWxkIGJlIHNlZW4gYXMgdmlzaWJsZQotICogd2l0aG91dCBoYXZpbmcgdG8g Y29uc3VsdCBtdWx0aXhhY3QuICBIb3dldmVyLCB0cnlpbmcgdG8gY3JlYXRlIGFuZCB1c2UgYQot ICogbmV3IE11bHRpWGFjdElkIHdvdWxkIHJlc3VsdCBpbiBhbiBlcnJvciBiZWNhdXNlIHRoZSBw YWdlIG9uIHdoaWNoIHRoZSBuZXcKLSAqIHZhbHVlIHdvdWxkIHJlc2lkZSBkb2VzIG5vdCBleGlz dC4gIFRoaXMgcm91dGluZSBpcyBpbiBjaGFyZ2Ugb2YgY3JlYXRpbmcKLSAqIHN1Y2ggcGFnZXMu Ci0gKi8KLXN0YXRpYyB2b2lkCi1NYXliZUV4dGVuZE9mZnNldFNscnUodm9pZCkKLXsKLQlpbnQ2 NAkJcGFnZW5vOwotCUxXTG9jawkgICAqbG9jazsKLQotCXBhZ2VubyA9IE11bHRpWGFjdElkVG9P ZmZzZXRQYWdlKE11bHRpWGFjdFN0YXRlLT5uZXh0TVhhY3QpOwotCWxvY2sgPSBTaW1wbGVMcnVH ZXRCYW5rTG9jayhNdWx0aVhhY3RPZmZzZXRDdGwsIHBhZ2Vubyk7Ci0KLQlMV0xvY2tBY3F1aXJl KGxvY2ssIExXX0VYQ0xVU0lWRSk7Ci0KLQlpZiAoIVNpbXBsZUxydURvZXNQaHlzaWNhbFBhZ2VF eGlzdChNdWx0aVhhY3RPZmZzZXRDdGwsIHBhZ2VubykpCi0JewotCQlpbnQJCQlzbG90bm87Ci0K LQkJLyoKLQkJICogRm9ydHVuYXRlbHkgZm9yIHVzLCBTaW1wbGVMcnVXcml0ZVBhZ2UgaXMgYWxy ZWFkeSBwcmVwYXJlZCB0byBkZWFsCi0JCSAqIHdpdGggY3JlYXRpbmcgYSBuZXcgc2VnbWVudCBm aWxlIGV2ZW4gaWYgdGhlIHBhZ2Ugd2UncmUgd3JpdGluZyBpcwotCQkgKiBub3QgdGhlIGZpcnN0 IGluIGl0LCBzbyB0aGlzIGlzIGVub3VnaC4KLQkJICovCi0JCXNsb3RubyA9IFNpbXBsZUxydVpl cm9QYWdlKE11bHRpWGFjdE9mZnNldEN0bCwgcGFnZW5vKTsKLQkJU2ltcGxlTHJ1V3JpdGVQYWdl KE11bHRpWGFjdE9mZnNldEN0bCwgc2xvdG5vKTsKLQl9Ci0KLQlMV0xvY2tSZWxlYXNlKGxvY2sp OwotfQotCiAvKgogICogVGhpcyBtdXN0IGJlIGNhbGxlZCBPTkNFIGR1cmluZyBwb3N0bWFzdGVy IG9yIHN0YW5kYWxvbmUtYmFja2VuZCBzdGFydHVwLgogICoKQEAgLTIwNjMsMjAgKzIwMjEsNiBA QCBNdWx0aVhhY3RTZXROZXh0TVhhY3QoTXVsdGlYYWN0SWQgbmV4dE11bHRpLAogCU11bHRpWGFj dFN0YXRlLT5uZXh0TVhhY3QgPSBuZXh0TXVsdGk7CiAJTXVsdGlYYWN0U3RhdGUtPm5leHRPZmZz ZXQgPSBuZXh0TXVsdGlPZmZzZXQ7CiAJTFdMb2NrUmVsZWFzZShNdWx0aVhhY3RHZW5Mb2NrKTsK LQotCS8qCi0JICogRHVyaW5nIGEgYmluYXJ5IHVwZ3JhZGUsIG1ha2Ugc3VyZSB0aGF0IHRoZSBv ZmZzZXRzIFNMUlUgaXMgbGFyZ2UKLQkgKiBlbm91Z2ggdG8gY29udGFpbiB0aGUgbmV4dCB2YWx1 ZSB0aGF0IHdvdWxkIGJlIGNyZWF0ZWQuCi0JICoKLQkgKiBXZSBuZWVkIHRvIGRvIHRoaXMgcHJl dHR5IGVhcmx5IGR1cmluZyB0aGUgZmlyc3Qgc3RhcnR1cCBpbiBiaW5hcnkKLQkgKiB1cGdyYWRl IG1vZGU6IGJlZm9yZSBTdGFydHVwTXVsdGlYYWN0KCkgaW4gZmFjdCwgYmVjYXVzZSB0aGlzIHJv dXRpbmUKLQkgKiBpcyBjYWxsZWQgZXZlbiBiZWZvcmUgdGhhdCBieSBTdGFydHVwWExPRygpLiAg QW5kIHdlIGNhbid0IGRvIGl0Ci0JICogZWFybGllciB0aGFuIGF0IHRoaXMgcG9pbnQsIGJlY2F1 c2UgZHVyaW5nIHRoYXQgZmlyc3QgY2FsbCBvZiB0aGlzCi0JICogcm91dGluZSB3ZSBkZXRlcm1p bmUgdGhlIE11bHRpWGFjdFN0YXRlLT5uZXh0TVhhY3QgdmFsdWUgdGhhdAotCSAqIE1heWJlRXh0 ZW5kT2Zmc2V0U2xydSBuZWVkcy4KLQkgKi8KLQlpZiAoSXNCaW5hcnlVcGdyYWRlKQotCQlNYXli ZUV4dGVuZE9mZnNldFNscnUoKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfdXBn cmFkZS9NYWtlZmlsZSBiL3NyYy9iaW4vcGdfdXBncmFkZS9NYWtlZmlsZQppbmRleCA2OWZjZjU5 M2NhZS4uNDI5OTVkNTNiMGIgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfdXBncmFkZS9NYWtlZmls ZQorKysgYi9zcmMvYmluL3BnX3VwZ3JhZGUvTWFrZWZpbGUKQEAgLTE4LDExICsxOCwxNCBAQCBP QkpTID0gXAogCWZpbGUubyBcCiAJZnVuY3Rpb24ubyBcCiAJaW5mby5vIFwKKwltdWx0aXhhY3Rf bmV3Lm8gXAorCW11bHRpeGFjdF9vbGQubyBcCiAJb3B0aW9uLm8gXAogCXBhcmFsbGVsLm8gXAog CXBnX3VwZ3JhZGUubyBcCiAJcmVsZmlsZW51bWJlci5vIFwKIAlzZXJ2ZXIubyBcCisJc2xydV9p by5vIFwKIAl0YWJsZXNwYWNlLm8gXAogCXRhc2subyBcCiAJdXRpbC5vIFwKZGlmZiAtLWdpdCBh L3NyYy9iaW4vcGdfdXBncmFkZS9tZXNvbi5idWlsZCBiL3NyYy9iaW4vcGdfdXBncmFkZS9tZXNv bi5idWlsZAppbmRleCBhYzk5MmYwZDE0Yi4uM2U0NmM0NTEyY2YgMTAwNjQ0Ci0tLSBhL3NyYy9i aW4vcGdfdXBncmFkZS9tZXNvbi5idWlsZAorKysgYi9zcmMvYmluL3BnX3VwZ3JhZGUvbWVzb24u YnVpbGQKQEAgLTgsMTEgKzgsMTQgQEAgcGdfdXBncmFkZV9zb3VyY2VzID0gZmlsZXMoCiAgICdm aWxlLmMnLAogICAnZnVuY3Rpb24uYycsCiAgICdpbmZvLmMnLAorICAnbXVsdGl4YWN0X25ldy5j JywKKyAgJ211bHRpeGFjdF9vbGQuYycsCiAgICdvcHRpb24uYycsCiAgICdwYXJhbGxlbC5jJywK ICAgJ3BnX3VwZ3JhZGUuYycsCiAgICdyZWxmaWxlbnVtYmVyLmMnLAogICAnc2VydmVyLmMnLAor ICAnc2xydV9pby5jJywKICAgJ3RhYmxlc3BhY2UuYycsCiAgICd0YXNrLmMnLAogICAndXRpbC5j JywKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfdXBncmFkZS9tdWx0aXhhY3RfbmV3LmMgYi9zcmMv YmluL3BnX3VwZ3JhZGUvbXVsdGl4YWN0X25ldy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAwLi5mNTY1YTM3ODI1NAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iaW4vcGdf dXBncmFkZS9tdWx0aXhhY3RfbmV3LmMKQEAgLTAsMCArMSwxMDMgQEAKKy8qCisgKiBtdWx0aXhh Y3RfbmV3LmMKKyAqCisgKiBGdW5jdGlvbnMgdG8gd3JpdGUgbXVsdGl4YWN0cyBpbiB0aGUgdjE5 IGZvcm1hdCB3aXRoIDY0LWJpdAorICogTXVsdGlYYWN0T2Zmc2V0cworICoKKyAqIENvcHlyaWdo dCAoYykgMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIHNyYy9i aW4vcGdfdXBncmFkZS9tdWx0aXhhY3RfbmV3LmMKKyAqLworCisjaW5jbHVkZSAicG9zdGdyZXNf ZmUuaCIKKworI2luY2x1ZGUgImFjY2Vzcy9tdWx0aXhhY3QuaCIKKyNpbmNsdWRlICJhY2Nlc3Mv bXVsdGl4YWN0X2ludGVybmFsLmgiCisKKyNpbmNsdWRlICJtdWx0aXhhY3RfbmV3LmgiCisKK011 bHRpWGFjdFdyaXRlciAqCitBbGxvY011bHRpWGFjdFdyaXRlKGNvbnN0IGNoYXIgKnBnZGF0YSwg TXVsdGlYYWN0SWQgZmlyc3RNdWx0aSwKKwkJCQkJTXVsdGlYYWN0T2Zmc2V0IGZpcnN0T2Zmc2V0 KQoreworCU11bHRpWGFjdFdyaXRlciAqc3RhdGUgPSBwZ19tYWxsb2Moc2l6ZW9mKCpzdGF0ZSkp OworCWNoYXIJCWRpcltNQVhQR1BBVEhdID0gezB9OworCisJcGdfc3ByaW50ZihkaXIsICIlcy9w Z19tdWx0aXhhY3Qvb2Zmc2V0cyIsIHBnZGF0YSk7CisJc3RhdGUtPm9mZnNldCA9IEFsbG9jU2xy dVdyaXRlKGRpciwgZmFsc2UpOworCVNscnVXcml0ZVN3aXRjaFBhZ2Uoc3RhdGUtPm9mZnNldCwg TXVsdGlYYWN0SWRUb09mZnNldFBhZ2UoZmlyc3RNdWx0aSkpOworCisJcGdfc3ByaW50ZihkaXIs ICIlcy9wZ19tdWx0aXhhY3QvbWVtYmVycyIsIHBnZGF0YSk7CisJc3RhdGUtPm1lbWJlcnMgPSBB bGxvY1NscnVXcml0ZShkaXIsIHRydWUgLyogdXNlIGxvbmcgc2VnbWVudCBuYW1lcyAqLyApOwor CVNscnVXcml0ZVN3aXRjaFBhZ2Uoc3RhdGUtPm1lbWJlcnMsIE1YT2Zmc2V0VG9NZW1iZXJQYWdl KGZpcnN0T2Zmc2V0KSk7CisKKwlyZXR1cm4gc3RhdGU7Cit9CisKKy8qCisgKiBXcml0ZSBhIG5l dyBtdWx0aXhhY3Qgd2l0aCBtZW1iZXJzLgorICoKKyAqIFNpbXBsaWZpZWQgdmVyc2lvbiBvZiB0 aGUgY29ycmVzcG9kaW5nIHNlcnZlciBmdW5jdGlvbiwgaGVuY2UgdGhlIG5hbWUuCisgKi8KK3Zv aWQKK1JlY29yZE5ld011bHRpWGFjdChNdWx0aVhhY3RXcml0ZXIgKnN0YXRlLCBNdWx0aVhhY3RP ZmZzZXQgb2Zmc2V0LAorCQkJCSAgIE11bHRpWGFjdElkIG11bHRpLCBpbnQgbm1lbWJlcnMsIE11 bHRpWGFjdE1lbWJlciAqbWVtYmVycykKK3sKKwlpbnQ2NAkJcGFnZW5vOworCWludDY0CQlwcmV2 X3BhZ2VubzsKKwlpbnQJCQllbnRyeW5vOworCWNoYXIJICAgKmJ1ZjsKKwlNdWx0aVhhY3RPZmZz ZXQgKm9mZnB0cjsKKworCXBhZ2VubyA9IE11bHRpWGFjdElkVG9PZmZzZXRQYWdlKG11bHRpKTsK KwllbnRyeW5vID0gTXVsdGlYYWN0SWRUb09mZnNldEVudHJ5KG11bHRpKTsKKworCS8qIFN0b3Jl IHRoZSBvZmZzZXQgKi8KKwlidWYgPSBTbHJ1V3JpdGVTd2l0Y2hQYWdlKHN0YXRlLT5vZmZzZXQs IHBhZ2Vubyk7CisJb2ZmcHRyID0gKE11bHRpWGFjdE9mZnNldCAqKSBidWY7CisJb2ZmcHRyW2Vu dHJ5bm9dID0gb2Zmc2V0OworCisJLyogU3RvcmUgdGhlIG1lbWJlcnMgKi8KKwlwcmV2X3BhZ2Vu byA9IC0xOworCWZvciAoaW50IGkgPSAwOyBpIDwgbm1lbWJlcnM7IGkrKywgb2Zmc2V0KyspCisJ eworCQlUcmFuc2FjdGlvbklkICptZW1iZXJwdHI7CisJCXVpbnQzMgkgICAqZmxhZ3NwdHI7CisJ CXVpbnQzMgkJZmxhZ3N2YWw7CisJCWludAkJCWJzaGlmdDsKKwkJaW50CQkJZmxhZ3NvZmY7CisJ CWludAkJCW1lbWJlcm9mZjsKKworCQlBc3NlcnQobWVtYmVyc1tpXS5zdGF0dXMgPD0gTXVsdGlY YWN0U3RhdHVzVXBkYXRlKTsKKworCQlwYWdlbm8gPSBNWE9mZnNldFRvTWVtYmVyUGFnZShvZmZz ZXQpOworCQltZW1iZXJvZmYgPSBNWE9mZnNldFRvTWVtYmVyT2Zmc2V0KG9mZnNldCk7CisJCWZs YWdzb2ZmID0gTVhPZmZzZXRUb0ZsYWdzT2Zmc2V0KG9mZnNldCk7CisJCWJzaGlmdCA9IE1YT2Zm c2V0VG9GbGFnc0JpdFNoaWZ0KG9mZnNldCk7CisKKwkJaWYgKHBhZ2VubyAhPSBwcmV2X3BhZ2Vu bykKKwkJeworCQkJYnVmID0gU2xydVdyaXRlU3dpdGNoUGFnZShzdGF0ZS0+bWVtYmVycywgcGFn ZW5vKTsKKwkJCXByZXZfcGFnZW5vID0gcGFnZW5vOworCQl9CisKKwkJbWVtYmVycHRyID0gKFRy YW5zYWN0aW9uSWQgKikgKGJ1ZiArIG1lbWJlcm9mZik7CisKKwkJKm1lbWJlcnB0ciA9IG1lbWJl cnNbaV0ueGlkOworCisJCWZsYWdzcHRyID0gKHVpbnQzMiAqKSAoYnVmICsgZmxhZ3NvZmYpOwor CisJCWZsYWdzdmFsID0gKmZsYWdzcHRyOworCQlmbGFnc3ZhbCAmPSB+KCgoMSA8PCBNWEFDVF9N RU1CRVJfQklUU19QRVJfWEFDVCkgLSAxKSA8PCBic2hpZnQpOworCQlmbGFnc3ZhbCB8PSAobWVt YmVyc1tpXS5zdGF0dXMgPDwgYnNoaWZ0KTsKKwkJKmZsYWdzcHRyID0gZmxhZ3N2YWw7CisJfQor fQorCit2b2lkCitGcmVlTXVsdGlYYWN0V3JpdGUoTXVsdGlYYWN0V3JpdGVyICpzdGF0ZSkKK3sK KwlGcmVlU2xydVdyaXRlKHN0YXRlLT5vZmZzZXQpOworCUZyZWVTbHJ1V3JpdGUoc3RhdGUtPm1l bWJlcnMpOworCisJcGZyZWUoc3RhdGUpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ191cGdy YWRlL211bHRpeGFjdF9uZXcuaCBiL3NyYy9iaW4vcGdfdXBncmFkZS9tdWx0aXhhY3RfbmV3LmgK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmY2NmU2YWY3ZTQ1Ci0tLSAv ZGV2L251bGwKKysrIGIvc3JjL2Jpbi9wZ191cGdyYWRlL211bHRpeGFjdF9uZXcuaApAQCAtMCww ICsxLDIzIEBACisvKgorICogbXVsdGl4YWN0X25ldy5oCisgKgorICogQ29weXJpZ2h0IChjKSAy MDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICogc3JjL2Jpbi9wZ191 cGdyYWRlL211bHRpeGFjdF9uZXcuaAorICovCisjaW5jbHVkZSAiYWNjZXNzL211bHRpeGFjdC5o IgorCisjaW5jbHVkZSAic2xydV9pby5oIgorCit0eXBlZGVmIHN0cnVjdCBNdWx0aVhhY3RXcml0 ZXIKK3sKKwlTbHJ1U2VnU3RhdGUgKm9mZnNldDsKKwlTbHJ1U2VnU3RhdGUgKm1lbWJlcnM7Cit9 IE11bHRpWGFjdFdyaXRlcjsKKworZXh0ZXJuIE11bHRpWGFjdFdyaXRlciAqQWxsb2NNdWx0aVhh Y3RXcml0ZShjb25zdCBjaGFyICpwZ2RhdGEsCisJCQkJCQkJCQkJCU11bHRpWGFjdElkIGZpcnN0 TXVsdGksCisJCQkJCQkJCQkJCU11bHRpWGFjdE9mZnNldCBmaXJzdE9mZnNldCk7CitleHRlcm4g dm9pZCBSZWNvcmROZXdNdWx0aVhhY3QoTXVsdGlYYWN0V3JpdGVyICpzdGF0ZSwgTXVsdGlYYWN0 T2Zmc2V0IG9mZnNldCwKKwkJCQkJCQkgICBNdWx0aVhhY3RJZCBtdWx0aSwgaW50IG5tZW1iZXJz LAorCQkJCQkJCSAgIE11bHRpWGFjdE1lbWJlciAqbWVtYmVycyk7CitleHRlcm4gdm9pZCBGcmVl TXVsdGlYYWN0V3JpdGUoTXVsdGlYYWN0V3JpdGVyICp3cml0ZXIpOwpkaWZmIC0tZ2l0IGEvc3Jj L2Jpbi9wZ191cGdyYWRlL211bHRpeGFjdF9vbGQuYyBiL3NyYy9iaW4vcGdfdXBncmFkZS9tdWx0 aXhhY3Rfb2xkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjcwYWU4 OGQ5N2Y0Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2Jpbi9wZ191cGdyYWRlL211bHRpeGFjdF9v bGQuYwpAQCAtMCwwICsxLDI5NyBAQAorLyoKKyAqIG11bHRpeGFjdF9vbGQuYworICoKKyAqIEZ1 bmN0aW9ucyB0byByZWFkIHByZS12MTkgbXVsdGl4YWN0cworICoKKyAqIENvcHlyaWdodCAoYykg MjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIHNyYy9iaW4vcGdf dXBncmFkZS9tdWx0aXhhY3Rfb2xkLmMKKyAqLworCisjaW5jbHVkZSAicG9zdGdyZXNfZmUuaCIK KworI2luY2x1ZGUgIm11bHRpeGFjdF9vbGQuaCIKKyNpbmNsdWRlICJwZ191cGdyYWRlLmgiCisK Ky8qCisgKiBOT1RFOiBiZWxvdyBhcmUgYSBidW5jaCBvZiBkZWZpbml0aW9ucyBhbmQgc2ltcGxl IHN0dGFpYyBpbmxpbmUgZnVuY3Rpb25zCisgKiB0aGF0IGFyZSBjb3B5LXBhc3RlZCBmcm9tIG11 bHRpeGFjdC5jIGZyb20gdmVyc2lvbiAxOC4gIFRoZSBvbmx5IGRpZmZlcmVuY2UKKyAqIGlzIHRo YXQgd2UgdXNlIHRoZSBPbGRNdWx0aVhhY3RPZmZzZXQgdHlwZSBlcXVhbCB0byB1aW50MzIgaW5z dGVhZCBvZgorICogTXVsdGlYYWN0T2Zmc2V0IHdoaWNoIGJlY2FtZSB1aW50NjQuCisgKi8KKwor LyogV2UgbmVlZCBmb3VyIGJ5dGVzIHBlciBvZmZzZXQgYW5kIDggYnl0ZXMgcGVyIGJhc2UgZm9y IGVhY2ggcGFnZS4gKi8KKyNkZWZpbmUgTVVMVElYQUNUX09GRlNFVFNfUEVSX1BBR0UgKEJMQ0tT WiAvIHNpemVvZihPbGRNdWx0aVhhY3RPZmZzZXQpKQorCitzdGF0aWMgaW5saW5lIGludDY0CitN dWx0aVhhY3RJZFRvT2Zmc2V0UGFnZShNdWx0aVhhY3RJZCBtdWx0aSkKK3sKKwlyZXR1cm4gbXVs dGkgLyBNVUxUSVhBQ1RfT0ZGU0VUU19QRVJfUEFHRTsKK30KKworc3RhdGljIGlubGluZSBpbnQK K011bHRpWGFjdElkVG9PZmZzZXRFbnRyeShNdWx0aVhhY3RJZCBtdWx0aSkKK3sKKwlyZXR1cm4g bXVsdGkgJSBNVUxUSVhBQ1RfT0ZGU0VUU19QRVJfUEFHRTsKK30KKworLyoKKyAqIFRoZSBzaXR1 YXRpb24gZm9yIG1lbWJlcnMgaXMgYSBiaXQgbW9yZSBjb21wbGV4OiB3ZSBzdG9yZSBvbmUgYnl0 ZSBvZgorICogYWRkaXRpb25hbCBmbGFnIGJpdHMgZm9yIGVhY2ggVHJhbnNhY3Rpb25JZC4gIFRv IGRvIHRoaXMgd2l0aG91dCBnZXR0aW5nCisgKiBpbnRvIGFsaWdubWVudCBpc3N1ZXMsIHdlIHN0 b3JlIGZvdXIgYnl0ZXMgb2YgZmxhZ3MsIGFuZCB0aGVuIHRoZQorICogY29ycmVzcG9uZGluZyA0 IFhpZHMuICBFYWNoIHN1Y2ggNS13b3JkICgyMC1ieXRlKSBzZXQgd2UgY2FsbCBhICJncm91cCIs IGFuZAorICogYXJlIHN0b3JlZCBhcyBhIHdob2xlIGluIHBhZ2VzLiAgVGh1cywgd2l0aCA4a0Ig QkxDS1NaLCB3ZSBrZWVwIDQwOSBncm91cHMKKyAqIHBlciBwYWdlLiAgVGhpcyB3YXN0ZXMgMTIg Ynl0ZXMgcGVyIHBhZ2UsIGJ1dCB0aGF0J3MgT0sgLS0gc2ltcGxpY2l0eSAoYW5kCisgKiBwZXJm b3JtYW5jZSkgdHJ1bXBzIHNwYWNlIGVmZmljaWVuY3kgaGVyZS4KKyAqCisgKiBOb3RlIHRoYXQg dGhlICJvZmZzZXQiIG1hY3JvcyB3b3JrIHdpdGggYnl0ZSBvZmZzZXQsIG5vdCBhcnJheSBpbmRl eGVzLCBzbworICogYXJpdGhtZXRpYyBtdXN0IGJlIGRvbmUgdXNpbmcgImNoYXIgKiIgcG9pbnRl cnMuCisgKi8KKy8qIFdlIG5lZWQgZWlnaHQgYml0cyBwZXIgeGFjdCwgc28gb25lIHhhY3QgZml0 cyBpbiBhIGJ5dGUgKi8KKyNkZWZpbmUgTVhBQ1RfTUVNQkVSX0JJVFNfUEVSX1hBQ1QJCQk4Cisj ZGVmaW5lIE1YQUNUX01FTUJFUl9GTEFHU19QRVJfQllURQkJCTEKKyNkZWZpbmUgTVhBQ1RfTUVN QkVSX1hBQ1RfQklUTUFTSwkoKDEgPDwgTVhBQ1RfTUVNQkVSX0JJVFNfUEVSX1hBQ1QpIC0gMSkK KworLyogaG93IG1hbnkgZnVsbCBieXRlcyBvZiBmbGFncyBhcmUgdGhlcmUgaW4gYSBncm91cD8g Ki8KKyNkZWZpbmUgTVVMVElYQUNUX0ZMQUdCWVRFU19QRVJfR1JPVVAJCTQKKyNkZWZpbmUgTVVM VElYQUNUX01FTUJFUlNfUEVSX01FTUJFUkdST1VQCVwKKwkoTVVMVElYQUNUX0ZMQUdCWVRFU19Q RVJfR1JPVVAgKiBNWEFDVF9NRU1CRVJfRkxBR1NfUEVSX0JZVEUpCisvKiBzaXplIGluIGJ5dGVz IG9mIGEgY29tcGxldGUgZ3JvdXAgKi8KKyNkZWZpbmUgTVVMVElYQUNUX01FTUJFUkdST1VQX1NJ WkUgXAorCShzaXplb2YoVHJhbnNhY3Rpb25JZCkgKiBNVUxUSVhBQ1RfTUVNQkVSU19QRVJfTUVN QkVSR1JPVVAgKyBNVUxUSVhBQ1RfRkxBR0JZVEVTX1BFUl9HUk9VUCkKKyNkZWZpbmUgTVVMVElY QUNUX01FTUJFUkdST1VQU19QRVJfUEFHRSAoQkxDS1NaIC8gTVVMVElYQUNUX01FTUJFUkdST1VQ X1NJWkUpCisjZGVmaW5lIE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9QQUdFCVwKKwkoTVVMVElYQUNU X01FTUJFUkdST1VQU19QRVJfUEFHRSAqIE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9NRU1CRVJHUk9V UCkKKworLyogcGFnZSBpbiB3aGljaCBhIG1lbWJlciBpcyB0byBiZSBmb3VuZCAqLworc3RhdGlj IGlubGluZSBpbnQ2NAorTVhPZmZzZXRUb01lbWJlclBhZ2UoT2xkTXVsdGlYYWN0T2Zmc2V0IG9m ZnNldCkKK3sKKwlyZXR1cm4gb2Zmc2V0IC8gTVVMVElYQUNUX01FTUJFUlNfUEVSX1BBR0U7Cit9 CisKKy8qIExvY2F0aW9uIChieXRlIG9mZnNldCB3aXRoaW4gcGFnZSkgb2YgZmxhZyB3b3JkIGZv ciBhIGdpdmVuIG1lbWJlciAqLworc3RhdGljIGlubGluZSBpbnQKK01YT2Zmc2V0VG9GbGFnc09m ZnNldChNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0KQoreworCU9sZE11bHRpWGFjdE9mZnNldCBncm91 cCA9IG9mZnNldCAvIE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9NRU1CRVJHUk9VUDsKKwlpbnQJCQln cm91cG9ucGcgPSBncm91cCAlIE1VTFRJWEFDVF9NRU1CRVJHUk9VUFNfUEVSX1BBR0U7CisJaW50 CQkJYnl0ZW9mZiA9IGdyb3Vwb25wZyAqIE1VTFRJWEFDVF9NRU1CRVJHUk9VUF9TSVpFOworCisJ cmV0dXJuIGJ5dGVvZmY7Cit9CisKKy8qIExvY2F0aW9uIChieXRlIG9mZnNldCB3aXRoaW4gcGFn ZSkgb2YgVHJhbnNhY3Rpb25JZCBvZiBnaXZlbiBtZW1iZXIgKi8KK3N0YXRpYyBpbmxpbmUgaW50 CitNWE9mZnNldFRvTWVtYmVyT2Zmc2V0KE9sZE11bHRpWGFjdE9mZnNldCBvZmZzZXQpCit7CisJ aW50CQkJbWVtYmVyX2luX2dyb3VwID0gb2Zmc2V0ICUgTVVMVElYQUNUX01FTUJFUlNfUEVSX01F TUJFUkdST1VQOworCisJcmV0dXJuIE1YT2Zmc2V0VG9GbGFnc09mZnNldChvZmZzZXQpICsKKwkJ TVVMVElYQUNUX0ZMQUdCWVRFU19QRVJfR1JPVVAgKworCQltZW1iZXJfaW5fZ3JvdXAgKiBzaXpl b2YoVHJhbnNhY3Rpb25JZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitNWE9mZnNldFRvRmxh Z3NCaXRTaGlmdChPbGRNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0KQoreworCWludAkJCW1lbWJlcl9p bl9ncm91cCA9IG9mZnNldCAlIE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9NRU1CRVJHUk9VUDsKKwlp bnQJCQlic2hpZnQgPSBtZW1iZXJfaW5fZ3JvdXAgKiBNWEFDVF9NRU1CRVJfQklUU19QRVJfWEFD VDsKKworCXJldHVybiBic2hpZnQ7Cit9CisKKy8qCisgKiBDb25zdHJ1Y3QgcmVhZGVyIG9mIG9s ZCBtdWx0aXhhY3RzLgorICoKKyAqIFJldHVybnMgdGhlIG1hbGxvY2VkIG1lbW9yeSB1c2VkIGJ5 IHRoZSBhbGwgb3RoZXIgY2FsbHMgaW4gdGhpcyBtb2R1bGUuCisgKi8KK09sZE11bHRpWGFjdFJl YWRlciAqCitBbGxvY09sZE11bHRpWGFjdFJlYWQoY2hhciAqcGdkYXRhLCBNdWx0aVhhY3RJZCBu ZXh0TXVsdGksCisJCQkJCSAgT2xkTXVsdGlYYWN0T2Zmc2V0IG5leHRPZmZzZXQpCit7CisJT2xk TXVsdGlYYWN0UmVhZGVyICpzdGF0ZSA9IHN0YXRlID0gcGdfbWFsbG9jKHNpemVvZigqc3RhdGUp KTsKKwljaGFyCQlkaXJbTUFYUEdQQVRIXSA9IHswfTsKKworCXN0YXRlLT5uZXh0TVhhY3QgPSBu ZXh0TXVsdGk7CisJc3RhdGUtPm5leHRPZmZzZXQgPSBuZXh0T2Zmc2V0OworCisJcGdfc3ByaW50 ZihkaXIsICIlcy9wZ19tdWx0aXhhY3Qvb2Zmc2V0cyIsIHBnZGF0YSk7CisJc3RhdGUtPm9mZnNl dCA9IEFsbG9jU2xydVJlYWQoZGlyKTsKKworCXBnX3NwcmludGYoZGlyLCAiJXMvcGdfbXVsdGl4 YWN0L21lbWJlcnMiLCBwZ2RhdGEpOworCXN0YXRlLT5tZW1iZXJzID0gQWxsb2NTbHJ1UmVhZChk aXIpOworCisJcmV0dXJuIHN0YXRlOworfQorCisvKgorICogVGhpcyBpcyBhIHNpbXBsaWZpZWQg dmVyc2lvbiBvZiB0aGUgR2V0TXVsdGlYYWN0SWRNZW1iZXJzKCkgc2VydmVyIGZ1bmN0aW9uLgor ICoKKyAqIC0gT25seSByZXR1cm4gdGhlIHVwZGF0aW5nIG1lbWJlciwgaWYgYW55LiBVcGdyYWRl IG9ubHkgY2FyZXMgYWJvdXQgdGhlCisgKiAgIHVwZGF0ZXJzLiBJZiB0aGVyZSBpcyBubyB1cGRh dGluZyBtZW1iZXIsIHJldHVybiB0aGUgZmlyc3QgbG9ja2luZy1vbmx5CisgKiAgIG1lbWJlci4g V2UgZG9uJ3QgaGF2ZSBhbnkgd2F5IHRvIHJlcHJlc2VudCAibm8gbWVtYmVycyIsIGJ1dCB3ZSBh bHNvIGRvbid0CisgKiAgIG5lZWQgdG8gcHJlc2VydmUgYWxsIHRoZSBsb2NraW5nIG1lbWJlcnMu CisgKgorICogLSBXZSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IGxvY2tpbmcgYW5kIHNvbWUg Y29ybmVyIGNhc2VzIGJlY2F1c2UgdGhlcmUncworICogICBubyBjb25jdXJyZW50IGFjdGl2aXR5 LgorICovCit2b2lkCitHZXRPbGRNdWx0aVhhY3RJZFNpbmdsZU1lbWJlcihPbGRNdWx0aVhhY3RS ZWFkZXIgKnN0YXRlLCBNdWx0aVhhY3RJZCBtdWx0aSwKKwkJCQkJCQkgIFRyYW5zYWN0aW9uSWQg KnJlc3VsdCwgTXVsdGlYYWN0U3RhdHVzICpzdGF0dXMpCit7CisJTXVsdGlYYWN0SWQgbmV4dE1Y YWN0LAorCQkJCW5leHRPZmZzZXQsCisJCQkJdG1wTVhhY3Q7CisJaW50NjQJCXBhZ2VubywKKwkJ CQlwcmV2X3BhZ2VubzsKKwlpbnQJCQllbnRyeW5vLAorCQkJCWxlbmd0aDsKKwljaGFyCSAgICpi dWY7CisJT2xkTXVsdGlYYWN0T2Zmc2V0ICpvZmZwdHIsCisJCQkJb2Zmc2V0OworCVRyYW5zYWN0 aW9uSWQgcmVzdWx0X3hpZCA9IEludmFsaWRUcmFuc2FjdGlvbklkOworCWJvb2wJCXJlc3VsdF9p c3VwZGF0ZSA9IGZhbHNlOworCisJbmV4dE1YYWN0ID0gc3RhdGUtPm5leHRNWGFjdDsKKwluZXh0 T2Zmc2V0ID0gc3RhdGUtPm5leHRPZmZzZXQ7CisKKwkvKgorCSAqIFNlZSBHZXRNdWx0aVhhY3RJ ZE1lbWJlcnMgaW4gbXVsdGl4YWN0LmMKKwkgKgorCSAqIEZpbmQgb3V0IHRoZSBvZmZzZXQgYXQg d2hpY2ggd2UgbmVlZCB0byBzdGFydCByZWFkaW5nIE11bHRpWGFjdE1lbWJlcnMKKwkgKiBhbmQg dGhlIG51bWJlciBvZiBtZW1iZXJzIGluIHRoZSBtdWx0aXhhY3QuICBXZSBkZXRlcm1pbmUgdGhl IGxhdHRlciBhcworCSAqIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhpcyBtdWx0aXhhY3QncyBz dGFydGluZyBvZmZzZXQgYW5kIHRoZSBuZXh0CisJICogb25lJ3MuICBIb3dldmVyLCB0aGVyZSBh cmUgc29tZSBjb3JuZXIgY2FzZXMgdG8gd29ycnkgYWJvdXQ6CisJICoKKwkgKiAxLiBUaGlzIG11 bHRpeGFjdCBtYXkgYmUgdGhlIGxhdGVzdCBvbmUgY3JlYXRlZCwgaW4gd2hpY2ggY2FzZSB0aGVy ZSBpcworCSAqIG5vIG5leHQgb25lIHRvIGxvb2sgYXQuICBJbiB0aGlzIGNhc2UgdGhlIG5leHRP ZmZzZXQgdmFsdWUgd2UganVzdAorCSAqIHNhdmVkIGlzIHRoZSBjb3JyZWN0IGVuZHBvaW50Lgor CSAqCisJICogMi4gVGhlIG5leHQgbXVsdGl4YWN0IG1heSBzdGlsbCBiZSBpbiBwcm9jZXNzIG9m IGJlaW5nIGZpbGxlZCBpbi4uLgorCSAqIFRoaXMgY2Fubm90IGhhcHBlbiBkdXJpbmcgdXBncmFk ZS4KKwkgKgorCSAqIDMuIEJlY2F1c2UgR2V0TmV3TXVsdGlYYWN0SWQgaW5jcmVtZW50cyBvZmZz ZXQgemVybyB0byBvZmZzZXQgb25lIHRvCisJICogaGFuZGxlIGNhc2UgIzIsIHRoZXJlIGlzIGFu IGFtYmlndWl0eSBuZWFyIHRoZSBwb2ludCBvZiBvZmZzZXQKKwkgKiB3cmFwYXJvdW5kLiAgSWYg d2Ugc2VlIG5leHQgbXVsdGl4YWN0J3Mgb2Zmc2V0IGlzIG9uZSwgaXMgdGhhdCBvdXIKKwkgKiBt dWx0aXhhY3QncyBhY3R1YWwgZW5kcG9pbnQsIG9yIGRpZCBpdCBlbmQgYXQgemVybyB3aXRoIGEg c3Vic2VxdWVudAorCSAqIGluY3JlbWVudD8gIFdlIGhhbmRsZSB0aGlzIHVzaW5nIHRoZSBrbm93 bGVkZ2UgdGhhdCBpZiB0aGUgemVybyd0aAorCSAqIG1lbWJlciBzbG90IHdhc24ndCBmaWxsZWQs IGl0J2xsIGNvbnRhaW4gemVybywgYW5kIHplcm8gaXNuJ3QgYSB2YWxpZAorCSAqIHRyYW5zYWN0 aW9uIElEIHNvIGl0IGNhbid0IGJlIGEgbXVsdGl4YWN0IG1lbWJlci4gIFRoZXJlZm9yZSwgaWYg d2UKKwkgKiByZWFkIGEgemVybyBmcm9tIHRoZSBtZW1iZXJzIGFycmF5LCBqdXN0IGlnbm9yZSBp dC4KKwkgKi8KKworCXBhZ2VubyA9IE11bHRpWGFjdElkVG9PZmZzZXRQYWdlKG11bHRpKTsKKwll bnRyeW5vID0gTXVsdGlYYWN0SWRUb09mZnNldEVudHJ5KG11bHRpKTsKKworCWJ1ZiA9IFNscnVS ZWFkU3dpdGNoUGFnZShzdGF0ZS0+b2Zmc2V0LCBwYWdlbm8pOworCW9mZnB0ciA9IChPbGRNdWx0 aVhhY3RPZmZzZXQgKikgYnVmOworCW9mZnB0ciArPSBlbnRyeW5vOworCW9mZnNldCA9ICpvZmZw dHI7CisKKwlBc3NlcnQob2Zmc2V0ICE9IDApOworCisJLyoKKwkgKiBVc2UgdGhlIHNhbWUgaW5j cmVtZW50IHJ1bGUgYXMgR2V0TmV3TXVsdGlYYWN0SWQoKSwgdGhhdCBpcywgZG9uJ3QKKwkgKiBo YW5kbGUgd3JhcGFyb3VuZCBleHBsaWNpdGx5IHVudGlsIG5lZWRlZC4KKwkgKi8KKwl0bXBNWGFj dCA9IG11bHRpICsgMTsKKworCWlmIChuZXh0TVhhY3QgPT0gdG1wTVhhY3QpCisJeworCQkvKiBD b3JuZXIgY2FzZSAxOiB0aGVyZSBpcyBubyBuZXh0IG11bHRpeGFjdCAqLworCQlsZW5ndGggPSBu ZXh0T2Zmc2V0IC0gb2Zmc2V0OworCX0KKwllbHNlCisJeworCQlPbGRNdWx0aVhhY3RPZmZzZXQg bmV4dE1YT2Zmc2V0OworCisJCS8qIGhhbmRsZSB3cmFwYXJvdW5kIGlmIG5lZWRlZCAqLworCQlp ZiAodG1wTVhhY3QgPCBGaXJzdE11bHRpWGFjdElkKQorCQkJdG1wTVhhY3QgPSBGaXJzdE11bHRp WGFjdElkOworCisJCXByZXZfcGFnZW5vID0gcGFnZW5vOworCisJCXBhZ2VubyA9IE11bHRpWGFj dElkVG9PZmZzZXRQYWdlKHRtcE1YYWN0KTsKKwkJZW50cnlubyA9IE11bHRpWGFjdElkVG9PZmZz ZXRFbnRyeSh0bXBNWGFjdCk7CisKKwkJaWYgKHBhZ2VubyAhPSBwcmV2X3BhZ2VubykKKwkJCWJ1 ZiA9IFNscnVSZWFkU3dpdGNoUGFnZShzdGF0ZS0+b2Zmc2V0LCBwYWdlbm8pOworCisJCW9mZnB0 ciA9IChPbGRNdWx0aVhhY3RPZmZzZXQgKikgYnVmOworCQlvZmZwdHIgKz0gZW50cnlubzsKKwkJ bmV4dE1YT2Zmc2V0ID0gKm9mZnB0cjsKKworCQkvKgorCQkgKiBDb3JuZXIgY2FzZSAyOiBuZXh0 IG11bHRpeGFjdCBpcyBzdGlsbCBiZWluZyBmaWxsZWQgaW4sIHRoaXMgbXVzdAorCQkgKiBub3Qg aGFwcGVuIGR1cmluZyB1cGdyYWRlLgorCQkgKi8KKwkJQXNzZXJ0KG5leHRNWE9mZnNldCAhPSAw KTsKKworCQlsZW5ndGggPSBuZXh0TVhPZmZzZXQgLSBvZmZzZXQ7CisJfQorCisJcHJldl9wYWdl bm8gPSAtMTsKKwlmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrLCBvZmZzZXQrKykKKwl7 CisJCVRyYW5zYWN0aW9uSWQgKnhhY3RwdHI7CisJCXVpbnQzMgkgICAqZmxhZ3NwdHI7CisJCWlu dAkJCWZsYWdzb2ZmOworCQlpbnQJCQlic2hpZnQ7CisJCWludAkJCW1lbWJlcm9mZjsKKwkJTXVs dGlYYWN0U3RhdHVzIHN0OworCisJCXBhZ2VubyA9IE1YT2Zmc2V0VG9NZW1iZXJQYWdlKG9mZnNl dCk7CisJCW1lbWJlcm9mZiA9IE1YT2Zmc2V0VG9NZW1iZXJPZmZzZXQob2Zmc2V0KTsKKworCQlp ZiAocGFnZW5vICE9IHByZXZfcGFnZW5vKQorCQl7CisJCQlidWYgPSBTbHJ1UmVhZFN3aXRjaFBh Z2Uoc3RhdGUtPm1lbWJlcnMsIHBhZ2Vubyk7CisJCQlwcmV2X3BhZ2VubyA9IHBhZ2VubzsKKwkJ fQorCisJCXhhY3RwdHIgPSAoVHJhbnNhY3Rpb25JZCAqKSAoYnVmICsgbWVtYmVyb2ZmKTsKKwkJ aWYgKCFUcmFuc2FjdGlvbklkSXNWYWxpZCgqeGFjdHB0cikpCisJCXsKKwkJCS8qIENvcm5lciBj YXNlIDM6IHdlIG11c3QgYmUgbG9va2luZyBhdCB1bnVzZWQgc2xvdCB6ZXJvICovCisJCQlBc3Nl cnQob2Zmc2V0ID09IDApOworCQkJY29udGludWU7CisJCX0KKworCQlmbGFnc29mZiA9IE1YT2Zm c2V0VG9GbGFnc09mZnNldChvZmZzZXQpOworCQlic2hpZnQgPSBNWE9mZnNldFRvRmxhZ3NCaXRT aGlmdChvZmZzZXQpOworCQlmbGFnc3B0ciA9ICh1aW50MzIgKikgKGJ1ZiArIGZsYWdzb2ZmKTsK KworCQlzdCA9ICgqZmxhZ3NwdHIgPj4gYnNoaWZ0KSAmIE1YQUNUX01FTUJFUl9YQUNUX0JJVE1B U0s7CisKKwkJLyogVmVyaWZ5IHRoYXQgdGhlcmUgaXMgYSBzaW5nbGUgdXBkYXRlIFhpZCBhbW9u ZyB0aGUgZ2l2ZW4gbWVtYmVycy4gKi8KKwkJaWYgKElTVVBEQVRFX2Zyb21fbXhzdGF0dXMoc3Qp KQorCQl7CisJCQlpZiAocmVzdWx0X2lzdXBkYXRlKQorCQkJCXBnX2ZhdGFsKCJtdWx0aXhhY3Qg JXUgaGFzIG1vcmUgdGhhbiBvbmUgdXBkYXRpbmcgbWVtYmVyIiwKKwkJCQkJCSBtdWx0aSk7CisJ CQlyZXN1bHRfeGlkID0gKnhhY3RwdHI7CisJCQlyZXN1bHRfaXN1cGRhdGUgPSB0cnVlOworCQl9 CisJCWVsc2UgaWYgKCFUcmFuc2FjdGlvbklkSXNWYWxpZChyZXN1bHRfeGlkKSkKKwkJCXJlc3Vs dF94aWQgPSAqeGFjdHB0cjsKKwl9CisKKwkvKiBBIG11bHRpeGlkIHdpdGggemVybyBtZW1iZXJz IHNob3VsZCBub3QgaGFwcGVuICovCisJQXNzZXJ0KFRyYW5zYWN0aW9uSWRJc1ZhbGlkKHJlc3Vs dF94aWQpKTsKKworCSpyZXN1bHQgPSByZXN1bHRfeGlkOworCSpzdGF0dXMgPSByZXN1bHRfaXN1 cGRhdGUgPyBNdWx0aVhhY3RTdGF0dXNVcGRhdGUgOgorCQlNdWx0aVhhY3RTdGF0dXNGb3JLZXlT aGFyZTsKK30KKworLyoKKyAqIEZyZWVzIHRoZSBtYWxsb2NlZCByZWFkZXIuCisgKi8KK3ZvaWQK K0ZyZWVPbGRNdWx0aVhhY3RSZWFkZXIoT2xkTXVsdGlYYWN0UmVhZGVyICpzdGF0ZSkKK3sKKwlG cmVlU2xydVJlYWQoc3RhdGUtPm9mZnNldCk7CisJRnJlZVNscnVSZWFkKHN0YXRlLT5tZW1iZXJz KTsKKworCXBmcmVlKHN0YXRlKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfdXBncmFkZS9t dWx0aXhhY3Rfb2xkLmggYi9zcmMvYmluL3BnX3VwZ3JhZGUvbXVsdGl4YWN0X29sZC5oCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi44ZWI1YWYyY2NhZgotLS0gL2Rldi9u dWxsCisrKyBiL3NyYy9iaW4vcGdfdXBncmFkZS9tdWx0aXhhY3Rfb2xkLmgKQEAgLTAsMCArMSwy OSBAQAorLyoKKyAqIG11bHRpeGFjdF9vbGQuaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAyNSwg UG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIHNyYy9iaW4vcGdfdXBncmFk ZS9tdWx0aXhhY3Rfb2xkLmgKKyAqLworCisjaW5jbHVkZSAiYWNjZXNzL211bHRpeGFjdC5oIgor I2luY2x1ZGUgInNscnVfaW8uaCIKKwordHlwZWRlZiB1aW50MzIgT2xkTXVsdGlYYWN0T2Zmc2V0 OworCit0eXBlZGVmIHN0cnVjdCBPbGRNdWx0aVhhY3RSZWFkZXIKK3sKKwlNdWx0aVhhY3RJZCBu ZXh0TVhhY3Q7CisJT2xkTXVsdGlYYWN0T2Zmc2V0IG5leHRPZmZzZXQ7CisKKwlTbHJ1U2VnU3Rh dGUgKm9mZnNldDsKKwlTbHJ1U2VnU3RhdGUgKm1lbWJlcnM7Cit9IE9sZE11bHRpWGFjdFJlYWRl cjsKKworZXh0ZXJuIE9sZE11bHRpWGFjdFJlYWRlciAqQWxsb2NPbGRNdWx0aVhhY3RSZWFkKGNo YXIgKnBnZGF0YSwKKwkJCQkJCQkJCQkJCSBNdWx0aVhhY3RJZCBuZXh0TXVsdGksCisJCQkJCQkJ CQkJCQkgT2xkTXVsdGlYYWN0T2Zmc2V0IG5leHRPZmZzZXQpOworZXh0ZXJuIHZvaWQgR2V0T2xk TXVsdGlYYWN0SWRTaW5nbGVNZW1iZXIoT2xkTXVsdGlYYWN0UmVhZGVyICpzdGF0ZSwKKwkJCQkJ CQkJCQkgIE11bHRpWGFjdElkIG11bHRpLAorCQkJCQkJCQkJCSAgVHJhbnNhY3Rpb25JZCAqcmVz dWx0LAorCQkJCQkJCQkJCSAgTXVsdGlYYWN0U3RhdHVzICpzdGF0dXMpOworZXh0ZXJuIHZvaWQg RnJlZU9sZE11bHRpWGFjdFJlYWRlcihPbGRNdWx0aVhhY3RSZWFkZXIgKnJlYWRlcik7CmRpZmYg LS1naXQgYS9zcmMvYmluL3BnX3VwZ3JhZGUvcGdfdXBncmFkZS5jIGIvc3JjL2Jpbi9wZ191cGdy YWRlL3BnX3VwZ3JhZGUuYwppbmRleCA0OTBlOThmYTI2Zi4uMGZkZDA1YzEyN2MgMTAwNjQ0Ci0t LSBhL3NyYy9iaW4vcGdfdXBncmFkZS9wZ191cGdyYWRlLmMKKysrIGIvc3JjL2Jpbi9wZ191cGdy YWRlL3BnX3VwZ3JhZGUuYwpAQCAtNDgsNiArNDgsOCBAQAogI2luY2x1ZGUgImNvbW1vbi9sb2dn aW5nLmgiCiAjaW5jbHVkZSAiY29tbW9uL3Jlc3RyaWN0ZWRfdG9rZW4uaCIKICNpbmNsdWRlICJm ZV91dGlscy9zdHJpbmdfdXRpbHMuaCIKKyNpbmNsdWRlICJtdWx0aXhhY3Rfb2xkLmgiCisjaW5j bHVkZSAibXVsdGl4YWN0X25ldy5oIgogI2luY2x1ZGUgInBnX3VwZ3JhZGUuaCIKIAogLyoKQEAg LTc2OSw2ICs3NzEsODEgQEAgY29weV9zdWJkaXJfZmlsZXMoY29uc3QgY2hhciAqb2xkX3N1YmRp ciwgY29uc3QgY2hhciAqbmV3X3N1YmRpcikKIAljaGVja19vaygpOwogfQogCisvKgorICogQ29u dmVydCBwZ19tdWx0aXhhY3Qvb2Zmc2V0IGFuZCAvbWVtYmVycyB0byBuZXcgZm9ybWF0IHdpdGgg NjQtYml0IG9mZnNldHMuCisgKi8KK3N0YXRpYyB2b2lkCitjb252ZXJ0X211bHRpeGFjdHMoTXVs dGlYYWN0SWQgKm5ld19ueHRtdWx0aSwgTXVsdGlYYWN0T2Zmc2V0ICpuZXdfbnh0bXhvZmYpCit7 CisJTXVsdGlYYWN0SWQgb2xkZXN0X211bHRpLAorCQkJCW5leHRfbXVsdGk7CisJT2xkTXVsdGlY YWN0UmVhZGVyICpvbGRfcmVhZGVyOworCU11bHRpWGFjdFdyaXRlciAqbmV3X3dyaXRlcjsKKwlN dWx0aVhhY3RPZmZzZXQgbmV4dF9vZmZzZXQ7CisKKwkvKgorCSAqIFRoZSByYW5nZSBvZiB2YWxp ZCBtdWx0aSBYSURzIGlzIHVuY2hhbmdlZCBieSB0aGUgY29udmVyc2lvbiAodGhleSBhcmUKKwkg KiByZWZlcmVuY2VkIGZyb20gdGhlIGhlYXAgdGFibGVzKSwgYnV0IHRoZSBtZW1iZXJzIFNMUlUg aXMgcmV3cml0dGVuIHRvCisJICogc3RhcnQgZnJvbSBvZmZzZXQgMS4KKwkgKi8KKwlvbGRlc3Rf bXVsdGkgPSBvbGRfY2x1c3Rlci5jb250cm9sZGF0YS5jaGtwbnRfb2xkc3RNdWx0aTsKKwluZXh0 X211bHRpID0gb2xkX2NsdXN0ZXIuY29udHJvbGRhdGEuY2hrcG50X254dG11bHRpOworCW5leHRf b2Zmc2V0ID0gMTsKKworCW9sZF9yZWFkZXIgPSBBbGxvY09sZE11bHRpWGFjdFJlYWQob2xkX2Ns dXN0ZXIucGdkYXRhLAorCQkJCQkJCQkJICAgb2xkX2NsdXN0ZXIuY29udHJvbGRhdGEuY2hrcG50 X254dG11bHRpLAorCQkJCQkJCQkJICAgb2xkX2NsdXN0ZXIuY29udHJvbGRhdGEuY2hrcG50X254 dG14b2ZmKTsKKwluZXdfd3JpdGVyID0gQWxsb2NNdWx0aVhhY3RXcml0ZShuZXdfY2x1c3Rlci5w Z2RhdGEsCisJCQkJCQkJCQkgb2xkZXN0X211bHRpLCBuZXh0X29mZnNldCk7CisKKwkvKiBoYW5k bGUgd3JhcGFyb3VuZCAqLworCWlmIChuZXh0X211bHRpIDwgRmlyc3RNdWx0aVhhY3RJZCkKKwkJ bmV4dF9tdWx0aSA9IEZpcnN0TXVsdGlYYWN0SWQ7CisKKwkvKgorCSAqIFJlYWQgbXVsdGl4aWRz IGZyb20gb2xkIGZpbGVzIG9uZSBieSBvbmUsIGFuZCB3cml0ZSB0aGVtIGJhY2sgaW4gdGhlCisJ ICogbmV3IGZvcm1hdC4KKwkgKi8KKwlmb3IgKE11bHRpWGFjdElkIG11bHRpID0gb2xkZXN0X211 bHRpOyBtdWx0aSAhPSBuZXh0X211bHRpOykKKwl7CisJCVRyYW5zYWN0aW9uSWQgeGlkOworCQlN dWx0aVhhY3RTdGF0dXMgc3RhdHVzOworCQlNdWx0aVhhY3RNZW1iZXIgbWVtYmVyOworCisJCS8q CisJCSAqIFJlYWQgdGhlIG9sZCBtdWx0aXhpZC4gIFRoZSBsb2NraW5nLW9ubHkgWElEcyB0aGF0 IG1heSBiZSBwYXJ0IG9mCisJCSAqIG11bHRpLXhpZHMgZG9uJ3QgbWF0dGVyIGFmdGVyIHVwZ3Jh ZGUsIGFzIHRoZXJlIGNhbiBiZSBubworCQkgKiB0cmFuc2FjdGlvbnMgcnVubmluZyBhY3Jvc3Mg dXBncmFkZS4gIFNvIGFzIGEgbGl0dGxlIG9wdGltaXphdGlvbiwKKwkJICogd2Ugb25seSByZWFk IG9uZSBtZW1iZXIgZnJvbSBlYWNoIG11bHRpeGlkOiB0aGUgb25lIHVwZGF0aW5nIG9uZSwKKwkJ ICogb3IgaWYgdGhlcmUgd2FzIG5vIHVwZGF0ZSwgYXJiaXRyYXJpbHkgdGhlIGZpcnN0IGxvY2tp bmcgeGlkLgorCQkgKi8KKwkJR2V0T2xkTXVsdGlYYWN0SWRTaW5nbGVNZW1iZXIob2xkX3JlYWRl ciwgbXVsdGksICZ4aWQsICZzdGF0dXMpOworCisJCS8qIFdyaXRlIGl0IG91dCBpbiBuZXcgZm9y bWF0ICovCisJCW1lbWJlci54aWQgPSB4aWQ7CisJCW1lbWJlci5zdGF0dXMgPSBzdGF0dXM7CisJ CVJlY29yZE5ld011bHRpWGFjdChuZXdfd3JpdGVyLCBuZXh0X29mZnNldCwgbXVsdGksIDEsICZt ZW1iZXIpOworCisJCW5leHRfb2Zmc2V0ICs9IDE7CisJCW11bHRpKys7CisJCS8qIGhhbmRsZSB3 cmFwYXJvdW5kICovCisJCWlmIChtdWx0aSA8IEZpcnN0TXVsdGlYYWN0SWQpCisJCQltdWx0aSA9 IEZpcnN0TXVsdGlYYWN0SWQ7CisJfQorCisJLyoKKwkgKiBVcGRhdGUgdGhlIG5leHRNWGFjdC9P ZmZzZXQgdmFsdWVzIGluIHRoZSBjb250cm9sIGZpbGUgdG8gbWF0Y2ggd2hhdCB3ZQorCSAqIHdy b3RlLiAgVGhlIG5leHRNWGFjdCBpcyB1bmNoYW5nZWQsIGJ1dCBuZXh0T2Zmc2V0IHdpbGwgYmUg ZGlmZmVyZW50LgorCSAqLworCUFzc2VydChuZXh0X211bHRpID09IG9sZF9jbHVzdGVyLmNvbnRy b2xkYXRhLmNoa3BudF9ueHRtdWx0aSk7CisJKm5ld19ueHRtdWx0aSA9IG5leHRfbXVsdGk7CisJ Km5ld19ueHRteG9mZiA9IG5leHRfb2Zmc2V0OworCisJLyogUmVsZWFzZSByZXNvdXJjZXMgKi8K KwlGcmVlTXVsdGlYYWN0V3JpdGUobmV3X3dyaXRlcik7CisJRnJlZU9sZE11bHRpWGFjdFJlYWRl cihvbGRfcmVhZGVyKTsKK30KKwogc3RhdGljIHZvaWQKIGNvcHlfeGFjdF94bG9nX3hpZCh2b2lk KQogewpAQCAtODE2LDggKzg5MywyOSBAQCBjb3B5X3hhY3RfeGxvZ194aWQodm9pZCkKIAlpZiAo b2xkX2NsdXN0ZXIuY29udHJvbGRhdGEuY2F0X3ZlciA+PSBNVUxUSVhBQ1RfRk9STUFUQ0hBTkdF X0NBVF9WRVIgJiYKIAkJbmV3X2NsdXN0ZXIuY29udHJvbGRhdGEuY2F0X3ZlciA+PSBNVUxUSVhB Q1RfRk9STUFUQ0hBTkdFX0NBVF9WRVIpCiAJewotCQljb3B5X3N1YmRpcl9maWxlcygicGdfbXVs dGl4YWN0L29mZnNldHMiLCAicGdfbXVsdGl4YWN0L29mZnNldHMiKTsKLQkJY29weV9zdWJkaXJf ZmlsZXMoInBnX211bHRpeGFjdC9tZW1iZXJzIiwgInBnX211bHRpeGFjdC9tZW1iZXJzIik7CisJ CU11bHRpWGFjdElkIG5ld19ueHRtdWx0aSA9IG9sZF9jbHVzdGVyLmNvbnRyb2xkYXRhLmNoa3Bu dF9ueHRtdWx0aTsKKwkJTXVsdGlYYWN0T2Zmc2V0IG5ld19ueHRteG9mZiA9IG9sZF9jbHVzdGVy LmNvbnRyb2xkYXRhLmNoa3BudF9ueHRteG9mZjsKKworCQkvKgorCQkgKiBJZiB0aGUgb2xkIHNl cnZlciBpcyBiZWZvcmUgdGhlCisJCSAqIE1VTFRJWEFDVE9GRlNFVF9GT1JNQVRDSEFOR0VfQ0FU X1ZFUiBpdCBtdXN0IGhhdmUgMzItYml0IG11bHRpeGlkCisJCSAqIG9mZnNldHMsIHRodXMgaXQg c2hvdWxkIGJlIGNvbnZlcnRlZC4KKwkJICovCisJCWlmIChvbGRfY2x1c3Rlci5jb250cm9sZGF0 YS5jYXRfdmVyIDwgTVVMVElYQUNUT0ZGU0VUX0ZPUk1BVENIQU5HRV9DQVRfVkVSICYmCisJCQlu ZXdfY2x1c3Rlci5jb250cm9sZGF0YS5jYXRfdmVyID49IE1VTFRJWEFDVE9GRlNFVF9GT1JNQVRD SEFOR0VfQ0FUX1ZFUikKKwkJeworCQkJcmVtb3ZlX25ld19zdWJkaXIoInBnX211bHRpeGFjdC9t ZW1iZXJzIiwgZmFsc2UpOworCQkJcmVtb3ZlX25ld19zdWJkaXIoInBnX211bHRpeGFjdC9vZmZz ZXRzIiwgZmFsc2UpOworCisJCQlwcmVwX3N0YXR1cygiQ29udmVydGluZyBwZ19tdWx0aXhhY3Qv b2Zmc2V0cyB0byA2NC1iaXQiKTsKKwkJCWNvbnZlcnRfbXVsdGl4YWN0cygmbmV3X254dG11bHRp LCAmbmV3X254dG14b2ZmKTsKKwkJCWNoZWNrX29rKCk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlj b3B5X3N1YmRpcl9maWxlcygicGdfbXVsdGl4YWN0L29mZnNldHMiLCAicGdfbXVsdGl4YWN0L29m ZnNldHMiKTsKKwkJCWNvcHlfc3ViZGlyX2ZpbGVzKCJwZ19tdWx0aXhhY3QvbWVtYmVycyIsICJw Z19tdWx0aXhhY3QvbWVtYmVycyIpOworCQl9CiAKIAkJcHJlcF9zdGF0dXMoIlNldHRpbmcgbmV4 dCBtdWx0aXhhY3QgSUQgYW5kIG9mZnNldCBmb3IgbmV3IGNsdXN0ZXIiKTsKIApAQCAtODI2LDEw ICs5MjQsOCBAQCBjb3B5X3hhY3RfeGxvZ194aWQodm9pZCkKIAkJICogY291bnRlcnMgaGVyZSBh bmQgdGhlIG9sZGVzdCBtdWx0aSBwcmVzZW50IG9uIHN5c3RlbS4KIAkJICovCiAJCWV4ZWNfcHJv ZyhVVElMSVRZX0xPR19GSUxFLCBOVUxMLCB0cnVlLCB0cnVlLAotCQkJCSAgIlwiJXMvcGdfcmVz ZXR3YWxcIiAtTyAldSAtbSAldSwldSBcIiVzXCIiLAotCQkJCSAgbmV3X2NsdXN0ZXIuYmluZGly LAotCQkJCSAgb2xkX2NsdXN0ZXIuY29udHJvbGRhdGEuY2hrcG50X254dG14b2ZmLAotCQkJCSAg b2xkX2NsdXN0ZXIuY29udHJvbGRhdGEuY2hrcG50X254dG11bHRpLAorCQkJCSAgIlwiJXMvcGdf cmVzZXR3YWxcIiAtTyAlIiBQUkl1NjQgIiAtbSAldSwldSBcIiVzXCIiLAorCQkJCSAgbmV3X2Ns dXN0ZXIuYmluZGlyLCBuZXdfbnh0bXhvZmYsIG5ld19ueHRtdWx0aSwKIAkJCQkgIG9sZF9jbHVz dGVyLmNvbnRyb2xkYXRhLmNoa3BudF9vbGRzdE11bHRpLAogCQkJCSAgbmV3X2NsdXN0ZXIucGdk YXRhKTsKIAkJY2hlY2tfb2soKTsKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfdXBncmFkZS9wZ191 cGdyYWRlLmggYi9zcmMvYmluL3BnX3VwZ3JhZGUvcGdfdXBncmFkZS5oCmluZGV4IGU4NjMzNmY0 YmU5Li4xMjdiMmNiMDBmYSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ191cGdyYWRlL3BnX3VwZ3Jh ZGUuaAorKysgYi9zcmMvYmluL3BnX3VwZ3JhZGUvcGdfdXBncmFkZS5oCkBAIC0xMTQsNiArMTE0 LDExIEBAIGV4dGVybiBjaGFyICpvdXRwdXRfZmlsZXNbXTsKICAqLwogI2RlZmluZSBNVUxUSVhB Q1RfRk9STUFUQ0hBTkdFX0NBVF9WRVIgMjAxMzAxMjMxCiAKKy8qCisgKiBTd2ljdGggZnJvbSAz Mi1iaXQgdG8gNjQtYml0IGZvciBtdWx0aXhpZCBvZmZzZXRzLgorICovCisjZGVmaW5lIE1VTFRJ WEFDVE9GRlNFVF9GT1JNQVRDSEFOR0VfQ0FUX1ZFUiA5OTk5OTk5OTkKKwogLyoKICAqIGxhcmdl IG9iamVjdCBjaHVuayBzaXplIGFkZGVkIHRvIHBnX2NvbnRyb2xkYXRhLAogICogY29tbWl0IDVm OTNjMzc4MDVlNzQ4NTQ4ODQ4MDkxNmI0NTg1ZTA5OGQzY2M4ODMKZGlmZiAtLWdpdCBhL3NyYy9i aW4vcGdfdXBncmFkZS9zbHJ1X2lvLmMgYi9zcmMvYmluL3BnX3VwZ3JhZGUvc2xydV9pby5jCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4yYTA2MjRlYThiOAotLS0gL2Rl di9udWxsCisrKyBiL3NyYy9iaW4vcGdfdXBncmFkZS9zbHJ1X2lvLmMKQEAgLTAsMCArMSwyMzkg QEAKKy8qCisgKiBzbHJ1X2lvLmMKKyAqCisgKiBSb3V0aW5lcyBmb3IgcmVhZGluZyBhbmQgd3Jp dGluZyBTTFJVIGZpbGVzIGR1cmluZyB1cGdyYWRlLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAy NSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIHNyYy9iaW4vcGdfdXBn cmFkZS9zbHJ1X2lvLmMKKyAqLworCisjaW5jbHVkZSAicG9zdGdyZXNfZmUuaCIKKworI2luY2x1 ZGUgPGZjbnRsLmg+CisKKyNpbmNsdWRlICJjb21tb24vZmVfbWVtdXRpbHMuaCIKKyNpbmNsdWRl ICJjb21tb24vZmlsZV9wZXJtLmgiCisjaW5jbHVkZSAiY29tbW9uL2ZpbGVfdXRpbHMuaCIKKyNp bmNsdWRlICJwb3J0L3BnX2lvdmVjLmgiCisjaW5jbHVkZSAicGdfdXBncmFkZS5oIgorI2luY2x1 ZGUgInNscnVfaW8uaCIKKworLyoKKyAqIFN0YXRlIGZvciByZWFkaW5nIG9yIHdyaXRpbmcgYW4g U0xSVSwgd2l0aCBhIG9uZSBwYWdlIGJ1ZmZlci4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgU2xydVNl Z1N0YXRlCit7CisJYm9vbAkJd3JpdGluZzsKKwlib29sCQlsb25nX3NlZ21lbnRfbmFtZXM7CisK KwljaGFyCSAgICpkaXI7CisJY2hhcgkgICAqZm47CisJaW50CQkJZmQ7CisJaW50NjQJCXNlZ25v OworCXVpbnQ2NAkJcGFnZW5vOworCisJUEdBbGlnbmVkQmxvY2sgYnVmOworfSBTbHJ1U2VnU3Rh dGU7CisKK3N0YXRpYyBpbmxpbmUgU2xydVNlZ1N0YXRlICoKK0FsbG9jU2xydVNlZ1N0YXRlKGNo YXIgKmRpcikKK3sKKwlTbHJ1U2VnU3RhdGUgKnN0YXRlID0gcGdfbWFsbG9jKHNpemVvZigqc3Rh dGUpKTsKKworCXN0YXRlLT5zZWdubyA9IC0xOworCXN0YXRlLT5wYWdlbm8gPSAwOworCXN0YXRl LT5kaXIgPSBwc3RyZHVwKGRpcik7CisJc3RhdGUtPmZkID0gLTE7CisJc3RhdGUtPmZuID0gTlVM TDsKKworCXJldHVybiBzdGF0ZTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitTbHJ1Rmx1c2go U2xydVNlZ1N0YXRlICpzdGF0ZSkKK3sKKwlzdHJ1Y3QgaW92ZWMgaW92ZWMgPSB7CisJCS5pb3Zf YmFzZSA9ICZzdGF0ZS0+YnVmLAorCQkuaW92X2xlbiA9IEJMQ0tTWiwKKwl9OworCW9mZl90CQlv ZmZzZXQ7CisKKwlpZiAoc3RhdGUtPnNlZ25vID09IC0xKQorCQlyZXR1cm47CisKKwlvZmZzZXQg PSAoc3RhdGUtPnBhZ2VubyAlIFNMUlVfUEFHRVNfUEVSX1NFR01FTlQpICogQkxDS1NaOworCisJ aWYgKHBnX3B3cml0ZXZfd2l0aF9yZXRyeShzdGF0ZS0+ZmQsICZpb3ZlYywgMSwgb2Zmc2V0KSA8 IDApCisJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgd3JpdGUgZmlsZSBcIiVzXCI6ICVtIiwgc3RhdGUt PmZuKTsKK30KKworLyoKKyAqIENyZWF0ZSBzbHJ1IHJlYWRlciBmb3IgZGlyLgorICoKKyAqIFJl dHVybnMgdGhlIG1hbGxvY2VkIG1lbW9yeSB1c2VkIGJ5IHRoZSBhbGwgb3RoZXIgcmVhZCBjYWxs cyBpbiB0aGlzIG1vZHVsZS4KKyAqLworU2xydVNlZ1N0YXRlICoKK0FsbG9jU2xydVJlYWQoY2hh ciAqZGlyKQoreworCVNscnVTZWdTdGF0ZSAqc3RhdGUgPSBBbGxvY1NscnVTZWdTdGF0ZShkaXIp OworCisJc3RhdGUtPndyaXRpbmcgPSBmYWxzZTsKKworCXJldHVybiBzdGF0ZTsKK30KKworLyoK KyAqIE9wZW4gZ2l2ZW4gcGFnZSBmb3IgcmVhZGluZy4KKyAqCisgKiBSZWFkaW5nIGNhbiBiZSBk b25lIGluIHJhbmRvbSBvcmRlci4KKyAqLworY2hhciAqCitTbHJ1UmVhZFN3aXRjaFBhZ2UoU2xy dVNlZ1N0YXRlICpzdGF0ZSwgdWludDY0IHBhZ2VubykKK3sKKwlpbnQ2NAkJc2Vnbm87CisKKwlB c3NlcnQoIXN0YXRlLT53cml0aW5nKTsJLyogcmVhZCBvbmx5IG1vZGUgKi8KKworCWlmIChzdGF0 ZS0+c2Vnbm8gIT0gLTEgJiYgcGFnZW5vID09IHN0YXRlLT5wYWdlbm8pCisJCXJldHVybiBzdGF0 ZS0+YnVmLmRhdGE7CisKKwlzZWdubyA9IHBhZ2VubyAvIFNMUlVfUEFHRVNfUEVSX1NFR01FTlQ7 CisJaWYgKHNlZ25vICE9IHN0YXRlLT5zZWdubykKKwl7CisJCWlmIChzdGF0ZS0+c2Vnbm8gIT0g LTEpCisJCXsKKwkJCWNsb3NlKHN0YXRlLT5mZCk7CisJCQlzdGF0ZS0+ZmQgPSAtMTsKKworCQkJ cGdfZnJlZShzdGF0ZS0+Zm4pOworCQkJc3RhdGUtPmZuID0gTlVMTDsKKwkJfQorCisJCS8qIE9w ZW4gbmV3IHNlZ21lbnQgKi8KKwkJc3RhdGUtPmZuID0gcHNwcmludGYoIiVzLyUwNFgiLCBzdGF0 ZS0+ZGlyLCAodW5zaWduZWQgaW50KSBzZWdubyk7CisJCWlmICgoc3RhdGUtPmZkID0gb3Blbihz dGF0ZS0+Zm4sIE9fUkRPTkxZIHwgUEdfQklOQVJZLCAwKSkgPCAwKQorCQkJcGdfZmF0YWwoImNv dWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiOiAlbSIsIHN0YXRlLT5mbik7CisJfQorCisJc3RhdGUt PnNlZ25vID0gc2Vnbm87CisKKwl7CisJCXN0cnVjdCBpb3ZlYyBpb3ZlYyA9IHsKKwkJCS5pb3Zf YmFzZSA9ICZzdGF0ZS0+YnVmLAorCQkJLmlvdl9sZW4gPSBCTENLU1osCisJCX07CisJCW9mZl90 CQlvZmZzZXQgPSAocGFnZW5vICUgU0xSVV9QQUdFU19QRVJfU0VHTUVOVCkgKiBCTENLU1o7CisK KwkJaWYgKHBnX3ByZWFkdihzdGF0ZS0+ZmQsICZpb3ZlYywgMSwgb2Zmc2V0KSA8IDApCisJCQlw Z19mYXRhbCgiY291bGQgbm90IHJlYWQgZmlsZSBcIiVzXCI6ICVtIiwgc3RhdGUtPmZuKTsKKwor CQlzdGF0ZS0+cGFnZW5vID0gcGFnZW5vOworCX0KKworCXJldHVybiBzdGF0ZS0+YnVmLmRhdGE7 Cit9CisKKy8qCisgKiBGcmVlcyB0aGUgbWFsbG9jZWQgcmVhZGVyLgorICovCit2b2lkCitGcmVl U2xydVJlYWQoU2xydVNlZ1N0YXRlICpzdGF0ZSkKK3sKKwlBc3NlcnQoIXN0YXRlLT53cml0aW5n KTsJLyogcmVhZCBvbmx5IG1vZGUgKi8KKworCWNsb3NlKHN0YXRlLT5mZCk7CisJcGdfZnJlZShz dGF0ZSk7Cit9CisKKy8qCisgKiBPcGVuIHRoZSBnaXZlbiBwYWdlIGZvciB3cml0aW5nLgorICoK KyAqIE5PVEU6IFRoaXMgdXNlcyBPX0VYQ0wgd2hlbiBzdGVwcGluZyB0byBhIG5ldyBzZWdtZW50 LCBzbyB0aGlzIGFzc3VtZXMgdGhhdAorICogZWFjaCBzZWdtZW50IGlzIHdyaXR0ZW4gaW4gZnVs bCBiZWZvcmUgbW92aW5nIG9uIHRvIG5leHQgb25lLiAgVGhpcworICogbGltaXRhdGlvbiB3b3Vs ZCBiZSBlYXN5IHRvIGxpZnQgaWYgbmVlZGVkLCBidXQgaXQgZml0cyB0aGUgdXNhZ2UgcGF0dGVy biBvZgorICogY3VycmVudCBjYWxsZXJzLgorICovCitjaGFyICoKK1NscnVXcml0ZVN3aXRjaFBh Z2UoU2xydVNlZ1N0YXRlICpzdGF0ZSwgdWludDY0IHBhZ2VubykKK3sKKwlpbnQ2NAkJc2Vnbm8g PSBwYWdlbm8gLyBTTFJVX1BBR0VTX1BFUl9TRUdNRU5UOworCW9mZl90CQlvZmZzZXQ7CisKKwlp ZiAoc3RhdGUtPnNlZ25vICE9IC0xICYmIHBhZ2VubyA9PSBzdGF0ZS0+cGFnZW5vKQorCQlyZXR1 cm4gc3RhdGUtPmJ1Zi5kYXRhOworCisJc2Vnbm8gPSBwYWdlbm8gLyBTTFJVX1BBR0VTX1BFUl9T RUdNRU5UOworCW9mZnNldCA9IChwYWdlbm8gJSBTTFJVX1BBR0VTX1BFUl9TRUdNRU5UKSAqIEJM Q0tTWjsKKworCVNscnVGbHVzaChzdGF0ZSk7CisJbWVtc2V0KHN0YXRlLT5idWYuZGF0YSwgMCwg QkxDS1NaKTsKKworCWlmIChzZWdubyAhPSBzdGF0ZS0+c2Vnbm8pCisJeworCQlpZiAoc3RhdGUt PnNlZ25vICE9IC0xKQorCQl7CisJCQljbG9zZShzdGF0ZS0+ZmQpOworCQkJc3RhdGUtPmZkID0g LTE7CisKKwkJCXBnX2ZyZWUoc3RhdGUtPmZuKTsKKwkJCXN0YXRlLT5mbiA9IE5VTEw7CisJCX0K KworCQkvKiBDcmVhdGUgdGhlIHNlZ21lbnQgKi8KKwkJaWYgKHN0YXRlLT5sb25nX3NlZ21lbnRf bmFtZXMpCisJCXsKKwkJCUFzc2VydChzZWdubyA+PSAwICYmIHNlZ25vIDw9IElOVDY0Q09OU1Qo MHhGRkZGRkZGRkZGRkZGRkYpKTsKKwkJCXN0YXRlLT5mbiA9IHBzcHJpbnRmKCIlcy8lMDE1IiBQ UklYNjQsIHN0YXRlLT5kaXIsIHNlZ25vKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCUFzc2VydChz ZWdubyA+PSAwICYmIHNlZ25vIDw9IElOVDY0Q09OU1QoMHhGRkZGRkYpKTsKKwkJCXN0YXRlLT5m biA9IHBzcHJpbnRmKCIlcy8lMDRYIiwgc3RhdGUtPmRpciwgKHVuc2lnbmVkIGludCkgc2Vnbm8p OworCQl9CisKKwkJaWYgKChzdGF0ZS0+ZmQgPSBvcGVuKHN0YXRlLT5mbiwgT19SRFdSIHwgT19D UkVBVCB8IE9fRVhDTCB8IFBHX0JJTkFSWSwKKwkJCQkJCQkgIHBnX2ZpbGVfY3JlYXRlX21vZGUp KSA8IDApCisJCXsKKwkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgY3JlYXRlIGZpbGUgXCIlc1wiOiAl bSIsIHN0YXRlLT5mbik7CisJCX0KKworCQlzdGF0ZS0+c2Vnbm8gPSBzZWdubzsKKworCQlpZiAo b2Zmc2V0ID4gMCAmJiBwZ19wd3JpdGVfemVyb3Moc3RhdGUtPmZkLCBvZmZzZXQsIDApIDwgMCkK KwkJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgd3JpdGUgZmlsZSBcIiVzXCI6ICVtIiwgc3RhdGUtPmZu KTsKKwl9CisKKwlzdGF0ZS0+cGFnZW5vID0gcGFnZW5vOworCisJcmV0dXJuIHN0YXRlLT5idWYu ZGF0YTsKK30KKworLyoKKyAqIENyZWF0ZSBzbHJ1IHdyaXRlciBmb3IgZGlyLgorICoKKyAqIFJl dHVybnMgdGhlIG1hbGxvY2VkIG1lbW9yeSB1c2VkIGJ5IHRoZSBhbGwgb3RoZXIgd3JpdGUgY2Fs bHMgaW4gdGhpcyBtb2R1bGUuCisgKi8KK1NscnVTZWdTdGF0ZSAqCitBbGxvY1NscnVXcml0ZShj aGFyICpkaXIsIGJvb2wgbG9uZ19zZWdtZW50X25hbWVzKQoreworCVNscnVTZWdTdGF0ZSAqc3Rh dGUgPSBBbGxvY1NscnVTZWdTdGF0ZShkaXIpOworCisJc3RhdGUtPndyaXRpbmcgPSB0cnVlOwor CXN0YXRlLT5sb25nX3NlZ21lbnRfbmFtZXMgPSBsb25nX3NlZ21lbnRfbmFtZXM7CisKKwlyZXR1 cm4gc3RhdGU7Cit9CisKKy8qCisgKiBGcmVlcyB0aGUgbWFsbG9jZWQgd3JpdGVyLgorICovCit2 b2lkCitGcmVlU2xydVdyaXRlKFNscnVTZWdTdGF0ZSAqc3RhdGUpCit7CisJQXNzZXJ0KHN0YXRl LT53cml0aW5nKTsKKworCVNscnVGbHVzaChzdGF0ZSk7CisKKwljbG9zZShzdGF0ZS0+ZmQpOwor CXBnX2ZyZWUoc3RhdGUpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ191cGdyYWRlL3NscnVf aW8uaCBiL3NyYy9iaW4vcGdfdXBncmFkZS9zbHJ1X2lvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMDAuLjI5NWZkMGJlYmM0Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2Jp bi9wZ191cGdyYWRlL3NscnVfaW8uaApAQCAtMCwwICsxLDIzIEBACisvKgorICogc2xydV9pby5o CisgKgorICogQ29weXJpZ2h0IChjKSAyMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVu dCBHcm91cAorICogc3JjL2Jpbi9wZ191cGdyYWRlL3NscnVfaW8uaAorICovCisKKy8qCisgKiBT ZWUgYWNjZXNzL3NscnUuaAorICoKKyAqIENvcHkgaGVyZSwgc2luY2Ugc2xydS5oIGNvdWxkIG5v dCBiZSBpbmNsdWRlZCBpbiBmZSBjb2RlLgorICovCisjZGVmaW5lIFNMUlVfUEFHRVNfUEVSX1NF R01FTlQgMzIKKwordHlwZWRlZiBzdHJ1Y3QgU2xydVNlZ1N0YXRlIFNscnVTZWdTdGF0ZTsKKwor ZXh0ZXJuIFNscnVTZWdTdGF0ZSAqQWxsb2NTbHJ1UmVhZChjaGFyICpkaXIpOworZXh0ZXJuIGNo YXIgKlNscnVSZWFkU3dpdGNoUGFnZShTbHJ1U2VnU3RhdGUgKnN0YXRlLCB1aW50NjQgcGFnZW5v KTsKK2V4dGVybiB2b2lkIEZyZWVTbHJ1UmVhZChTbHJ1U2VnU3RhdGUgKnN0YXRlKTsKKworZXh0 ZXJuIFNscnVTZWdTdGF0ZSAqQWxsb2NTbHJ1V3JpdGUoY2hhciAqZGlyLCBib29sIGxvbmdfc2Vn bWVudF9uYW1lcyk7CitleHRlcm4gY2hhciAqU2xydVdyaXRlU3dpdGNoUGFnZShTbHJ1U2VnU3Rh dGUgKnN0YXRlLCB1aW50NjQgcGFnZW5vKTsKK2V4dGVybiB2b2lkIEZyZWVTbHJ1V3JpdGUoU2xy dVNlZ1N0YXRlICpzdGF0ZSk7CmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRl ZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4IDQzMjUwOTI3 N2M5Li45MzkyYmI3MjliOSAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZz Lmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTE3MjUsNiAr MTcyNSw3IEBAIE11bHRpWGFjdE1lbWJlcgogTXVsdGlYYWN0T2Zmc2V0CiBNdWx0aVhhY3RTdGF0 ZURhdGEKIE11bHRpWGFjdFN0YXR1cworTXVsdGlYYWN0V3JpdGVyCiBNdWx0aXJhbmdlSU9EYXRh CiBNdWx0aXJhbmdlUGFyc2VTdGF0ZQogTXVsdGlyYW5nZVR5cGUKQEAgLTE4MDgsNiArMTgwOSw3 IEBAIE9mZnNldFZhck5vZGVzX2NvbnRleHQKIE9pZAogT2lkT3B0aW9ucwogT2tleXNTdGF0ZQor T2xkTXVsdGlYYWN0UmVhZGVyCiBPbGRUb05ld01hcHBpbmcKIE9sZFRvTmV3TWFwcGluZ0RhdGEK IE9uQ29tbWl0QWN0aW9uCkBAIC0yODA0LDYgKzI4MDYsNyBAQCBTbHJ1Q3RsRGF0YQogU2xydUVy cm9yQ2F1c2UKIFNscnVQYWdlU3RhdHVzCiBTbHJ1U2NhbkNhbGxiYWNrCitTbHJ1U2VnU3RhdGUK IFNscnVTaGFyZWQKIFNscnVTaGFyZWREYXRhCiBTbHJ1V3JpdGVBbGwKLS0gCjIuNTEuMAoK --000000000000a9529e0642ef063c Content-Type: application/octet-stream; name="v23-0003-Remove-oldestOffset-oldestOffsetKnown-from-multi.patch" Content-Disposition: attachment; filename="v23-0003-Remove-oldestOffset-oldestOffsetKnown-from-multi.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mhnlrz762 RnJvbSAzMjgxM2U2NTIyNWQ4ODMyNjczNDgxZGU4YTI4MGNlYTI0ZjBiZmNmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbSBPcmxvdiA8b3Jsb3ZtZ0BnbWFpbC5jb20+CkRhdGU6 IFRodSwgNiBOb3YgMjAyNSAxNjoyMDoxOCArMDMwMApTdWJqZWN0OiBbUEFUQ0ggdjIzIDMvN10g UmVtb3ZlIG9sZGVzdE9mZnNldC9vbGRlc3RPZmZzZXRLbm93biBmcm9tIG11bHRpeGFjdAoKU2lu Y2Ugd2UgcmV3cml0ZSBhbGwgbXVsdGl0cmFuc2FjdGlvbnMgZHVyaW5nIHBnX3VwZ3JhZGUsIHRo ZSBvbGRlc3QKb2Zmc2V0IGZvciBhIG5ldyBjbHVzdGVyIHdpbGwgbm8gbG9uZ2VyIGJlIG1pc3Np bmcgb24gZGlzYy4KLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9tdWx0aXhhY3QuYyB8 IDEwMSArKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBzcmMvaW5jbHVkZS9hY2Nlc3MvbXVsdGl4 YWN0LmggICAgICAgICB8ICAgMyAtCiAyIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwg OTkgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0v bXVsdGl4YWN0LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9tdWx0aXhhY3QuYwppbmRl eCA5YzM2NTY4OTA4MC4uMjZmOGExMGMzNzcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vz cy90cmFuc2FtL211bHRpeGFjdC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL211 bHRpeGFjdC5jCkBAIC0xNDUsMTQgKzE0NSw2IEBAIHR5cGVkZWYgc3RydWN0IE11bHRpWGFjdFN0 YXRlRGF0YQogCU11bHRpWGFjdElkIG9sZGVzdE11bHRpWGFjdElkOwogCU9pZAkJCW9sZGVzdE11 bHRpWGFjdERCOwogCi0JLyoKLQkgKiBPbGRlc3QgbXVsdGl4YWN0IG9mZnNldCB0aGF0IGlzIHBv dGVudGlhbGx5IHJlZmVyZW5jZWQgYnkgYSBtdWx0aXhhY3QKLQkgKiByZWZlcmVuY2VkIGJ5IGEg cmVsYXRpb24uICBXZSBkb24ndCBhbHdheXMga25vdyB0aGlzIHZhbHVlLCBzbyB0aGVyZSdzCi0J ICogYSBmbGFnIGhlcmUgdG8gaW5kaWNhdGUgd2hldGhlciBvciBub3Qgd2UgY3VycmVudGx5IGRv LgotCSAqLwotCU11bHRpWGFjdE9mZnNldCBvbGRlc3RPZmZzZXQ7Ci0JYm9vbAkJb2xkZXN0T2Zm c2V0S25vd247Ci0KIAkvKiBzdXBwb3J0IGZvciBhbnRpLXdyYXBhcm91bmQgbWVhc3VyZXMgKi8K IAlNdWx0aVhhY3RJZCBtdWx0aVZhY0xpbWl0OwogCU11bHRpWGFjdElkIG11bHRpV2FybkxpbWl0 OwpAQCAtMjM3NiwxMCArMjM2OCw3IEBAIFNldE9mZnNldFZhY3V1bUxpbWl0KGJvb2wgaXNfc3Rh cnR1cCkKIAlNdWx0aVhhY3RJZCBvbGRlc3RNdWx0aVhhY3RJZDsKIAlNdWx0aVhhY3RJZCBuZXh0 TVhhY3Q7CiAJTXVsdGlYYWN0T2Zmc2V0IG9sZGVzdE9mZnNldCA9IDA7CS8qIHBsYWNhdGUgY29t cGlsZXIgKi8KLQlNdWx0aVhhY3RPZmZzZXQgcHJldk9sZGVzdE9mZnNldDsKIAlNdWx0aVhhY3RP ZmZzZXQgbmV4dE9mZnNldDsKLQlib29sCQlvbGRlc3RPZmZzZXRLbm93biA9IGZhbHNlOwotCWJv b2wJCXByZXZPbGRlc3RPZmZzZXRLbm93bjsKIAogCS8qCiAJICogTkI6IEhhdmUgdG8gcHJldmVu dCBjb25jdXJyZW50IHRydW5jYXRpb24sIHdlIG1pZ2h0IG90aGVyd2lzZSB0cnkgdG8KQEAgLTIz OTIsOCArMjM4MSw2IEBAIFNldE9mZnNldFZhY3V1bUxpbWl0KGJvb2wgaXNfc3RhcnR1cCkKIAlv bGRlc3RNdWx0aVhhY3RJZCA9IE11bHRpWGFjdFN0YXRlLT5vbGRlc3RNdWx0aVhhY3RJZDsKIAlu ZXh0TVhhY3QgPSBNdWx0aVhhY3RTdGF0ZS0+bmV4dE1YYWN0OwogCW5leHRPZmZzZXQgPSBNdWx0 aVhhY3RTdGF0ZS0+bmV4dE9mZnNldDsKLQlwcmV2T2xkZXN0T2Zmc2V0S25vd24gPSBNdWx0aVhh Y3RTdGF0ZS0+b2xkZXN0T2Zmc2V0S25vd247Ci0JcHJldk9sZGVzdE9mZnNldCA9IE11bHRpWGFj dFN0YXRlLT5vbGRlc3RPZmZzZXQ7CiAJQXNzZXJ0KE11bHRpWGFjdFN0YXRlLT5maW5pc2hlZFN0 YXJ0dXApOwogCUxXTG9ja1JlbGVhc2UoTXVsdGlYYWN0R2VuTG9jayk7CiAKQEAgLTI0MTEsNTcg KzIzOTgsMjAgQEAgU2V0T2Zmc2V0VmFjdXVtTGltaXQoYm9vbCBpc19zdGFydHVwKQogCQkgKiBv ZmZzZXQuCiAJCSAqLwogCQlvbGRlc3RPZmZzZXQgPSBuZXh0T2Zmc2V0OwotCQlvbGRlc3RPZmZz ZXRLbm93biA9IHRydWU7CiAJfQotCWVsc2UKKwllbHNlIGlmICghZmluZF9tdWx0aXhhY3Rfc3Rh cnQob2xkZXN0TXVsdGlYYWN0SWQsICZvbGRlc3RPZmZzZXQpKQogCXsKLQkJLyoKLQkJICogRmln dXJlIG91dCB3aGVyZSB0aGUgb2xkZXN0IGV4aXN0aW5nIG11bHRpeGFjdCdzIG9mZnNldHMgYXJl Ci0JCSAqIHN0b3JlZC4gRHVlIHRvIGJ1Z3MgaW4gZWFybHkgcmVsZWFzZSBvZiBQb3N0Z3JlU1FM IDkuMy5YIGFuZCA5LjQuWCwKLQkJICogdGhlIHN1cHBvc2VkbHktZWFybGllc3QgbXVsdGl4YWN0 IG1pZ2h0IG5vdCByZWFsbHkgZXhpc3QuICBXZSBhcmUKLQkJICogY2FyZWZ1bCBub3QgdG8gZmFp bCBpbiB0aGF0IGNhc2UuCi0JCSAqLwotCQlvbGRlc3RPZmZzZXRLbm93biA9Ci0JCQlmaW5kX211 bHRpeGFjdF9zdGFydChvbGRlc3RNdWx0aVhhY3RJZCwgJm9sZGVzdE9mZnNldCk7Ci0KLQkJaWYg KCFvbGRlc3RPZmZzZXRLbm93bikKLQkJCWVyZXBvcnQoTE9HLAotCQkJCQkoZXJybXNnKCJvbGRl c3QgY2hlY2twb2ludGVkIE11bHRpWGFjdCAldSBkb2VzIG5vdCBleGlzdCBvbiBkaXNrIiwKLQkJ CQkJCQlvbGRlc3RNdWx0aVhhY3RJZCkpKTsKKwkJZXJlcG9ydChMT0csCisJCQkJKGVycm1zZygi b2xkZXN0IGNoZWNrcG9pbnRlZCBNdWx0aVhhY3QgJXUgZG9lcyBub3QgZXhpc3Qgb24gZGlzayIs CisJCQkJCQlvbGRlc3RNdWx0aVhhY3RJZCkpKTsKIAl9CiAKIAlMV0xvY2tSZWxlYXNlKE11bHRp WGFjdFRydW5jYXRpb25Mb2NrKTsKIAotCS8qCi0JICogSWYgd2UgY2FuLCBjb21wdXRlIGxpbWl0 cyAoYW5kIGluc3RhbGwgdGhlbSBNdWx0aVhhY3RTdGF0ZSkgdG8gcHJldmVudAotCSAqIG92ZXJy dW4gb2Ygb2xkIGRhdGEgaW4gdGhlIG1lbWJlcnMgU0xSVSBhcmVhLiBXZSBjYW4gb25seSBkbyBz byBpZiB0aGUKLQkgKiBvbGRlc3Qgb2Zmc2V0IGlzIGtub3duIHRob3VnaC4KLQkgKgotCSAqIEZJ WE1FOiBJcyAhb2xkZXN0T2Zmc2V0S25vd24gcG9zc2libGUgYW55bW9yZT8gQXQgbGVhc3QgdXBk YXRlIHRoZSBjb21tZW50OgotCSAqIHdlIHdvbid0IG92ZXJydW4gbWVtYmVycyBhbnltb3JlLgot CSAqLwotCWlmIChwcmV2T2xkZXN0T2Zmc2V0S25vd24pCi0JewotCQkvKgotCQkgKiBJZiB3ZSBm YWlsZWQgdG8gZ2V0IHRoZSBvbGRlc3Qgb2Zmc2V0IHRoaXMgdGltZSwgYnV0IHdlIGhhdmUgYQot CQkgKiB2YWx1ZSBmcm9tIGEgcHJldmlvdXMgcGFzcyB0aHJvdWdoIHRoaXMgZnVuY3Rpb24sIHVz ZSB0aGUgb2xkCi0JCSAqIHZhbHVlcyByYXRoZXIgdGhhbiBhdXRvbWF0aWNhbGx5IGZvcmNpbmcg YW4gYXV0b3ZhY3V1bSBjeWNsZSBhZ2Fpbi4KLQkJICovCi0JCW9sZGVzdE9mZnNldCA9IHByZXZP bGRlc3RPZmZzZXQ7Ci0JCW9sZGVzdE9mZnNldEtub3duID0gdHJ1ZTsKLQl9Ci0KLQkvKiBJbnN0 YWxsIHRoZSBjb21wdXRlZCB2YWx1ZXMgKi8KLQlMV0xvY2tBY3F1aXJlKE11bHRpWGFjdEdlbkxv Y2ssIExXX0VYQ0xVU0lWRSk7Ci0JTXVsdGlYYWN0U3RhdGUtPm9sZGVzdE9mZnNldCA9IG9sZGVz dE9mZnNldDsKLQlNdWx0aVhhY3RTdGF0ZS0+b2xkZXN0T2Zmc2V0S25vd24gPSBvbGRlc3RPZmZz ZXRLbm93bjsKLQlMV0xvY2tSZWxlYXNlKE11bHRpWGFjdEdlbkxvY2spOwotCiAJLyoKIAkgKiBE byB3ZSBuZWVkIGF1dG92YWN1dW0/CUlmIHdlJ3JlIG5vdCBzdXJlLCBhc3N1bWUgeWVzLgogCSAq LwotCXJldHVybiAhb2xkZXN0T2Zmc2V0S25vd24gfHwKLQkJKG5leHRPZmZzZXQgLSBvbGRlc3RP ZmZzZXQgPiBNVUxUSVhBQ1RfTUVNQkVSX0FVVE9WQUNfVEhSRVNIT0xEKTsKKwlyZXR1cm4gbmV4 dE9mZnNldCAtIG9sZGVzdE9mZnNldCA+IE1VTFRJWEFDVF9NRU1CRVJfQVVUT1ZBQ19USFJFU0hP TEQ7CiB9CiAKIC8qCkBAIC0yNTA4LDQ3ICsyNDU4LDYgQEAgZmluZF9tdWx0aXhhY3Rfc3RhcnQo TXVsdGlYYWN0SWQgbXVsdGksIE11bHRpWGFjdE9mZnNldCAqcmVzdWx0KQogCXJldHVybiB0cnVl OwogfQogCi0vKgotICogR2V0TXVsdGlYYWN0SW5mbwotICoKLSAqIFJldHVybnMgaW5mb3JtYXRp b24gYWJvdXQgdGhlIGN1cnJlbnQgTXVsdGlYYWN0IHN0YXRlLCBhcyBvZjoKLSAqIG11bHRpeGFj dHM6IE51bWJlciBvZiBNdWx0aVhhY3RzIChuZXh0TXVsdGlYYWN0SWQgLSBvbGRlc3RNdWx0aVhh Y3RJZCkKLSAqIG1lbWJlcnM6IE51bWJlciBvZiBtZW1iZXIgZW50cmllcyAobmV4dE9mZnNldCAt IG9sZGVzdE9mZnNldCkKLSAqIG9sZGVzdE11bHRpWGFjdElkOiBPbGRlc3QgTXVsdGlYYWN0IElE IHN0aWxsIGluIHVzZQotICogb2xkZXN0T2Zmc2V0OiBPbGRlc3Qgb2Zmc2V0IHN0aWxsIGluIHVz ZQotICoKLSAqIFJldHVybnMgZmFsc2UgaWYgdW5hYmxlIHRvIGRldGVybWluZSwgdGhlIG9sZGVz dCBvZmZzZXQgYmVpbmcgdW5rbm93bi4KLSAqLwotYm9vbAotR2V0TXVsdGlYYWN0SW5mbyh1aW50 MzIgKm11bHRpeGFjdHMsIE11bHRpWGFjdE9mZnNldCAqbWVtYmVycywKLQkJCQkgTXVsdGlYYWN0 SWQgKm9sZGVzdE11bHRpWGFjdElkLCBNdWx0aVhhY3RPZmZzZXQgKm9sZGVzdE9mZnNldCkKLXsK LQlNdWx0aVhhY3RPZmZzZXQgbmV4dE9mZnNldDsKLQlNdWx0aVhhY3RJZCBuZXh0TXVsdGlYYWN0 SWQ7Ci0JYm9vbAkJb2xkZXN0T2Zmc2V0S25vd247Ci0KLQlMV0xvY2tBY3F1aXJlKE11bHRpWGFj dEdlbkxvY2ssIExXX1NIQVJFRCk7Ci0JbmV4dE9mZnNldCA9IE11bHRpWGFjdFN0YXRlLT5uZXh0 T2Zmc2V0OwotCSpvbGRlc3RNdWx0aVhhY3RJZCA9IE11bHRpWGFjdFN0YXRlLT5vbGRlc3RNdWx0 aVhhY3RJZDsKLQluZXh0TXVsdGlYYWN0SWQgPSBNdWx0aVhhY3RTdGF0ZS0+bmV4dE1YYWN0Owot CSpvbGRlc3RPZmZzZXQgPSBNdWx0aVhhY3RTdGF0ZS0+b2xkZXN0T2Zmc2V0OwotCW9sZGVzdE9m ZnNldEtub3duID0gTXVsdGlYYWN0U3RhdGUtPm9sZGVzdE9mZnNldEtub3duOwotCUxXTG9ja1Jl bGVhc2UoTXVsdGlYYWN0R2VuTG9jayk7Ci0KLQlpZiAoIW9sZGVzdE9mZnNldEtub3duKQotCXsK LQkJKm1lbWJlcnMgPSAwOwotCQkqbXVsdGl4YWN0cyA9IDA7Ci0JCSpvbGRlc3RNdWx0aVhhY3RJ ZCA9IEludmFsaWRNdWx0aVhhY3RJZDsKLQkJKm9sZGVzdE9mZnNldCA9IDA7Ci0JCXJldHVybiBm YWxzZTsKLQl9Ci0KLQkqbWVtYmVycyA9IG5leHRPZmZzZXQgLSAqb2xkZXN0T2Zmc2V0OwotCSpt dWx0aXhhY3RzID0gbmV4dE11bHRpWGFjdElkIC0gKm9sZGVzdE11bHRpWGFjdElkOwotCXJldHVy biB0cnVlOwotfQotCiB0eXBlZGVmIHN0cnVjdCBteHRydW5jaW5mbwogewogCWludDY0CQllYXJs aWVzdEV4aXN0aW5nUGFnZTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9tdWx0aXhh Y3QuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9tdWx0aXhhY3QuaAppbmRleCA3ZDk4ZmUwZmUzMi4u ZDY4OGI1NDdjNTQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9tdWx0aXhhY3QuaAor KysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvbXVsdGl4YWN0LmgKQEAgLTEwOSw5ICsxMDksNiBAQCBl eHRlcm4gYm9vbCBNdWx0aVhhY3RJZElzUnVubmluZyhNdWx0aVhhY3RJZCBtdWx0aSwgYm9vbCBp c0xvY2tPbmx5KTsKIGV4dGVybiB2b2lkIE11bHRpWGFjdElkU2V0T2xkZXN0TWVtYmVyKHZvaWQp OwogZXh0ZXJuIGludAlHZXRNdWx0aVhhY3RJZE1lbWJlcnMoTXVsdGlYYWN0SWQgbXVsdGksIE11 bHRpWGFjdE1lbWJlciAqKm1lbWJlcnMsCiAJCQkJCQkJCSAgYm9vbCBmcm9tX3BndXBncmFkZSwg Ym9vbCBpc0xvY2tPbmx5KTsKLWV4dGVybiBib29sIEdldE11bHRpWGFjdEluZm8odWludDMyICpt dWx0aXhhY3RzLCBNdWx0aVhhY3RPZmZzZXQgKm1lbWJlcnMsCi0JCQkJCQkJIE11bHRpWGFjdElk ICpvbGRlc3RNdWx0aVhhY3RJZCwKLQkJCQkJCQkgTXVsdGlYYWN0T2Zmc2V0ICpvbGRlc3RPZmZz ZXQpOwogZXh0ZXJuIGJvb2wgTXVsdGlYYWN0SWRQcmVjZWRlcyhNdWx0aVhhY3RJZCBtdWx0aTEs IE11bHRpWGFjdElkIG11bHRpMik7CiBleHRlcm4gYm9vbCBNdWx0aVhhY3RJZFByZWNlZGVzT3JF cXVhbHMoTXVsdGlYYWN0SWQgbXVsdGkxLAogCQkJCQkJCQkJCU11bHRpWGFjdElkIG11bHRpMik7 Ci0tIAoyLjUxLjAKCg== --000000000000a9529e0642ef063c Content-Type: application/octet-stream; name="v23-0004-Add-test-for-64-bit-mxoff-in-pg_resetwal.patch" Content-Disposition: attachment; filename="v23-0004-Add-test-for-64-bit-mxoff-in-pg_resetwal.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mhnlrz7b3 RnJvbSA2NWFiNmFkOTQ4YjM0NzQwZDcxNDVjNTA2MzI0ZmJhNTM2ZmU2M2EyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbSBPcmxvdiA8b3Jsb3ZtZ0BnbWFpbC5jb20+CkRhdGU6 IFR1ZSwgMjggT2N0IDIwMjUgMTk6MDg6MjYgKzAzMDAKU3ViamVjdDogW1BBVENIIHYyMyA0Lzdd IEFkZCB0ZXN0IGZvciA2NC1iaXQgbXhvZmYgaW4gcGdfcmVzZXR3YWwKCi0tLQogc3JjL2Jpbi9w Z19yZXNldHdhbC9tZXNvbi5idWlsZCAgICB8ICAgMSArCiBzcmMvYmluL3BnX3Jlc2V0d2FsL3Qv MDAzX214b2ZmLnBsIHwgMTcwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiAyIGZpbGVz IGNoYW5nZWQsIDE3MSBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2Jpbi9w Z19yZXNldHdhbC90LzAwM19teG9mZi5wbAoKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfcmVzZXR3 YWwvbWVzb24uYnVpbGQgYi9zcmMvYmluL3BnX3Jlc2V0d2FsL21lc29uLmJ1aWxkCmluZGV4IDI5 MDgzMmIyMjk5Li4xZTJkZmIzOGE1YiAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19yZXNldHdhbC9t ZXNvbi5idWlsZAorKysgYi9zcmMvYmluL3BnX3Jlc2V0d2FsL21lc29uLmJ1aWxkCkBAIC0yNSw2 ICsyNSw3IEBAIHRlc3RzICs9IHsKICAgICAndGVzdHMnOiBbCiAgICAgICAndC8wMDFfYmFzaWMu cGwnLAogICAgICAgJ3QvMDAyX2NvcnJ1cHRlZC5wbCcsCisgICAgICAndC8wMDNfbXhvZmYucGwn LAogICAgIF0sCiAgIH0sCiB9CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX3Jlc2V0d2FsL3QvMDAz X214b2ZmLnBsIGIvc3JjL2Jpbi9wZ19yZXNldHdhbC90LzAwM19teG9mZi5wbApuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uM2MxYjdmYTFkMzMKLS0tIC9kZXYvbnVsbAor KysgYi9zcmMvYmluL3BnX3Jlc2V0d2FsL3QvMDAzX214b2ZmLnBsCkBAIC0wLDAgKzEsMTcwIEBA CisKKyMgQ29weXJpZ2h0IChjKSAyMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBH cm91cAorCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzIEZBVEFMID0+ICdhbGwnOworCit1c2Ug TWF0aDo6QmlnSW50OwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXI7Cit1c2UgUG9zdGdy ZVNRTDo6VGVzdDo6VXRpbHM7Cit1c2UgVGVzdDo6TW9yZTsKKworc3ViIG14YWN0X2VhdGVyCit7 CisJbXkgJG5vZGUgPSBzaGlmdDsKKwlteSAkdGJsID0gc2hpZnQ7CisKKwkkbm9kZS0+c3RhcnQ7 CisJJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiQ1JFQVRFIFRBQkxFICR7dGJsfSAo SSBJTlQgUFJJTUFSWSBLRVksIE5fVVBEQVRFRCBJTlQpICIgLgorCQkiICAgICAgIFdJVEggKEFV VE9WQUNVVU1fRU5BQkxFRD1GQUxTRSk7IiAuCisJCSJJTlNFUlQgSU5UTyAke3RibH0gU0VMRUNU IEcsIDAgRlJPTSBHRU5FUkFURV9TRVJJRVMoMSwgNTApIEc7Iik7CisKKwkjIGNvbnN1bWUgYXJv dW5kIDEwayBtdWx0aXhhY3Qtb2Zmc2V0ZnMKKwlteSAkbmNsaWVudHMgPSAxMDsKKwlteSAkdXBk YXRlX2V2ZXJ5ID0gNzU7CisJbXkgQGNvbm5lY3Rpb25zID0gKCk7CisKKwlmb3IgKDAuLiRuY2xp ZW50cykKKwl7CisJCW15ICRjb25uID0gJG5vZGUtPmJhY2tncm91bmRfcHNxbCgncG9zdGdyZXMn KTsKKwkJJGNvbm4tPnF1ZXJ5X3NhZmUoIkJFR0lOIik7CisKKwkJcHVzaChAY29ubmVjdGlvbnMs ICRjb25uKTsKKwl9CisKKwlmb3IgKG15ICRpID0gMDsgJGkgPCAxMDAwOyAkaSsrKQorCXsKKwkJ bXkgJGNvbm4gPSAkY29ubmVjdGlvbnNbJGkgJSAkbmNsaWVudHNdOworCisJCSRjb25uLT5xdWVy eV9zYWZlKCJDT01NSVQ7Iik7CisJCSRjb25uLT5xdWVyeV9zYWZlKCJCRUdJTiIpOworCisJCWlm ICgkaSAlICR1cGRhdGVfZXZlcnkgPT0gMCkKKwkJeworCQkJJGNvbm4tPnF1ZXJ5X3NhZmUoCisJ CQkJIlVQREFURSAke3RibH0gU0VUICIgLgorCQkJCSJOX1VQREFURUQgPSBOX1VQREFURUQgKyAx ICIgLgorCQkJCSJXSEVSRSBJID0gJHtpfSAlIDUwIik7CisJCX0KKwkJZWxzZQorCQl7CisJCQkk Y29ubi0+cXVlcnlfc2FmZSgKKwkJCQkiU0VMRUNUICogRlJPTSAke3RibH0gRk9SIEtFWSBTSEFS RSIpOworCQl9CisJfQorCisJZm9yIG15ICRjb25uIChAY29ubmVjdGlvbnMpCisJeworCQkkY29u bi0+cXVpdCgpOworCX0KKworCSRub2RlLT5zdG9wOworfQorCitzdWIgbmV4dF9teG9mZgorewor CW15ICRub2RlID0gc2hpZnQ7CisJbXkgKCRzdGRvdXQsICRzdGRlcnIpID0KKwkgIHJ1bl9jb21t YW5kKFsgJ3BnX2NvbnRyb2xkYXRhJywgJG5vZGUtPmRhdGFfZGlyIF0pOworCW15IEBjb250cm9s X2RhdGEgPSBzcGxpdCgiXG4iLCAkc3Rkb3V0KTsKKwlteSAkbmV4dF9teG9mZiA9IHVuZGVmOwor CisJZm9yZWFjaCAoQGNvbnRyb2xfZGF0YSkKKwl7CisJCWlmICgkXyA9fiAvXkxhdGVzdCBjaGVj a3BvaW50J3MgTmV4dE11bHRpT2Zmc2V0OlxzKiguKikkL21nKQorCQl7CisJCQkkbmV4dF9teG9m ZiA9ICQxOworCQkJbGFzdDsKKwkJfQorCX0KKwlkaWUgIk5leHRNdWx0aU9mZnNldCBub3QgZm91 bmQgaW4gY29udHJvbCBmaWxlXG4iCisJCXVubGVzcyBkZWZpbmVkKCRuZXh0X214b2ZmKTsKKwor CXJldHVybiAkbmV4dF9teG9mZjsKK30KKworc3ViIHJlc2V0X214b2ZmCit7CisJbXkgJG5vZGUg PSBzaGlmdDsKKwlteSAkb2Zmc2V0ID0gc2hpZnQ7CisJCSRvZmZzZXQgPSBNYXRoOjpCaWdJbnQt Pm5ldygkb2Zmc2V0KTsKKworCSMgR2V0IGJsb2NrIHNpemUKKwlteSAkb3V0ID0gKHJ1bl9jb21t YW5kKFsgJ3BnX3Jlc2V0d2FsJywgJy0tZHJ5LXJ1bicsICRub2RlLT5kYXRhX2RpciBdKSlbMF07 CisJCSRvdXQgPX4gL15EYXRhYmFzZSBibG9jayBzaXplOiAqKFxkKykkL20gb3IgZGllOworCW15 ICRibGNrc3ogPSAkMTsKKworCSMgUmVzZXQgdG8gbmV3IG9mZnNldAorCW15IEBjbWQgPSAoJ3Bn X3Jlc2V0d2FsJywgJy0tcGdkYXRhJyA9PiAkbm9kZS0+ZGF0YV9kaXIpOworCXB1c2ggQGNtZCwg Jy0tbXVsdGl4YWN0LW9mZnNldCcgPT4gJG9mZnNldC0+YXNfaGV4KCk7CisJY29tbWFuZF9vayhc QGNtZCwgJ3NldCBvbGRlc3QgbXVsdGl4YWN0LW9mZnNldCcpOworCisJIyBGaWxsIGVtcHR5IHBn X211bHRpeGFjdC9tZW1iZXJzIHNlZ21lbnQKKwlteSAkbXVsdCA9IDMyICogaW50KCRibGNrc3og LyAyMCkgKiA0OworCW15ICRzZWduYW1lID0gc3ByaW50ZiAiJTAxNVgiLCAkb2Zmc2V0IC8gJG11 bHQ7CisKKwlteSBAZGQgPSAoJ2RkJyk7CisJcHVzaCBAZGQsICJpZj0vZGV2L3plcm8iOworCXB1 c2ggQGRkLCAib2Y9IiAuICRub2RlLT5kYXRhX2RpciAuICIvcGdfbXVsdGl4YWN0L21lbWJlcnMv IiAuICRzZWduYW1lOworCXB1c2ggQGRkLCAiYnM9JGJsY2tzeiI7CisJcHVzaCBAZGQsICJjb3Vu dD0zMiI7CisJY29tbWFuZF9vayhcQGRkLCAnZmlsbCBlbXB0eSBtdWx0aXhhY3QtbWVtYmVycycp OworfQorCitteSAoJG9mZjEsICRvZmYyKTsKKworIyBzdGFydCBmcm9tIGRlZmF1bHRzCitteSAk bm9kZTEgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ25vZGUxJyk7Ciskbm9kZTEt PmluaXQ7Ciskb2ZmMSA9IG5leHRfbXhvZmYoJG5vZGUxKTsKK214YWN0X2VhdGVyKCRub2RlMSwg IkZPTyIpOworJG9mZjIgPSBuZXh0X214b2ZmKCRub2RlMSk7Citub3RlICI+IHN0YXJ0IGZyb20g JG9mZjEsIGZpbmlzaGVkIGF0ICRvZmYyXG4iOworCisjIHN0YXJ0IGZyb20gYmVmb3JlIDMyLWJp dCB3cmFwYXJvdW5kCitteSAkbm9kZTIgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXco J25vZGUyJyk7Ciskbm9kZTItPmluaXQ7CityZXNldF9teG9mZigkbm9kZTIsIDB4RkZGRjAwMDAp OworJG9mZjEgPSBuZXh0X214b2ZmKCRub2RlMik7CitteGFjdF9lYXRlcigkbm9kZTIsICJGT08i KTsKKyRvZmYyID0gbmV4dF9teG9mZigkbm9kZTIpOworbm90ZSAiPiBzdGFydCBmcm9tICRvZmYx LCBmaW5pc2hlZCBhdCAkb2ZmMlxuIjsKKworIyBzdGFydCBuZWFyIDMyLWJpdCB3cmFwYXJvdW5k CitteSAkbm9kZTMgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ25vZGUzJyk7Cisk bm9kZTMtPmluaXQ7CityZXNldF9teG9mZigkbm9kZTMsIDB4RkZGRkVDNzcpOworJG9mZjEgPSBu ZXh0X214b2ZmKCRub2RlMyk7CitteGFjdF9lYXRlcigkbm9kZTMsICJGT08iKTsKKyRvZmYyID0g bmV4dF9teG9mZigkbm9kZTMpOworbm90ZSAiPiBzdGFydCBmcm9tICRvZmYxLCBmaW5pc2hlZCBh dCAkb2ZmMlxuIjsKKworIyBzdGFydCBvdmVyIDMyLWJpdCB3cmFwYXJvdW5kCitteSAkbm9kZTQg PSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ25vZGU0Jyk7Ciskbm9kZTQtPmluaXQ7 CityZXNldF9teG9mZigkbm9kZTQsICcweEZGRkZGRkZGMDAwMCcpOworJG9mZjEgPSBuZXh0X214 b2ZmKCRub2RlNCk7CitteGFjdF9lYXRlcigkbm9kZTQsICJGT08iKTsKKyRvZmYyID0gbmV4dF9t eG9mZigkbm9kZTMpOworbm90ZSAiPiBzdGFydCBmcm9tICRvZmYxLCBmaW5pc2hlZCBhdCAkb2Zm MlxuIjsKKworIyBjaGVjayBpbnZhcmlhbnQKKyRub2RlMS0+c3RhcnQ7Ciskbm9kZTItPnN0YXJ0 OworJG5vZGUzLT5zdGFydDsKKyRub2RlNC0+c3RhcnQ7CisKK215ICR2YXIxID0gJG5vZGUxLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgJ1RBQkxFIEZPTycpOworbXkgJHZhcjIgPSAkbm9kZTItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAnVEFCTEUgRk9PJyk7CitteSAkdmFyMyA9ICRub2RlMy0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICdUQUJMRSBGT08nKTsKK215ICR2YXI0ID0gJG5vZGU0LT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgJ1RBQkxFIEZPTycpOworb2soJHZhcjEgZXEgJHZhcjIgZXEgJHZh cjMgZXEgJHZhcjQsCisJJ2NoZWNrIHRhYmxlIGludmFyaWFudCBpbiBhbGwgbm9kZXMnKTsKKwor JG5vZGU0LT5zdG9wOworJG5vZGUzLT5zdG9wOworJG5vZGUyLT5zdG9wOworJG5vZGUxLT5zdG9w OworCitkb25lX3Rlc3RpbmcoKTsKLS0gCjIuNTEuMAoK --000000000000a9529e0642ef063c Content-Type: text/plain; charset="US-ASCII"; name="v23-0007-TEST-Add-test-for-64-bit-mxoff-in-pg_upgrade.patch.txt" Content-Disposition: attachment; filename="v23-0007-TEST-Add-test-for-64-bit-mxoff-in-pg_upgrade.patch.txt" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mhnlrz7s6 RnJvbSAyNjcwZWVlN2ExYjRlZTc4MjY5NzZlYmE5YWRjNWQ3MzRmNjU1ZmY0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbSBPcmxvdiA8b3Jsb3ZtZ0BnbWFpbC5jb20+CkRhdGU6 IFdlZCwgMjkgT2N0IDIwMjUgMTQ6MTk6NTYgKzAzMDAKU3ViamVjdDogW1BBVENIIHYyMyA3Lzdd IFRFU1Q6IEFkZCB0ZXN0IGZvciA2NC1iaXQgbXhvZmYgaW4gcGdfdXBncmFkZQoKLS0tCiBzcmMv YmluL3BnX3VwZ3JhZGUvdC8wMDhfbXhvZmYucGwgfCA0NjMgKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrCiAxIGZpbGUgY2hhbmdlZCwgNDYzIGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBzcmMvYmluL3BnX3VwZ3JhZGUvdC8wMDhfbXhvZmYucGwKCmRpZmYgLS1naXQgYS9z cmMvYmluL3BnX3VwZ3JhZGUvdC8wMDhfbXhvZmYucGwgYi9zcmMvYmluL3BnX3VwZ3JhZGUvdC8w MDhfbXhvZmYucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjcyMDQz MjVmODczCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2Jpbi9wZ191cGdyYWRlL3QvMDA4X214b2Zm LnBsCkBAIC0wLDAgKzEsNDYzIEBACisKKyMgQ29weXJpZ2h0IChjKSAyMDI1LCBQb3N0Z3JlU1FM IEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzIEZB VEFMID0+ICdhbGwnOworCit1c2UgTWF0aDo6QmlnSW50OwordXNlIFBvc3RncmVTUUw6OlRlc3Q6 OkNsdXN0ZXI7Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM7Cit1c2UgUG9zdGdyZVNRTDo6 VGVzdDo6QWRqdXN0RHVtcDsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpBZGp1c3RVcGdyYWRlOwor dXNlIFRlc3Q6Ok1vcmU7CisKKyMgVGhpcyB0ZXN0IGludm9sdmVzIGRpZmZlcmVudCBtdWx0aXRy YW5zYWN0aW9uIHN0YXRlcywgc2ltaWxhcmx5IHRvIHRoYXQgb2YKKyMgMDAyX3BnX3VwZ3JhZGUu cGwuCisKK3VubGVzcyAoZGVmaW5lZCgkRU5We29sZGluc3RhbGx9KSkKK3sKKwlwbGFuIHNraXBf YWxsID0+CisJCSd0byBydW4gdGVzdCBzZXQgb2xkaW5zdGFsbCBlbnZpcm9ubWVudCB2YXJpYWJs ZSB0byB0aGUgcHJlIDY0LWJpdCBteG9mZiBjbHVzdGVyJzsKK30KKworIyBUZW1wIGRpciBmb3Ig YSBkdW1wcy4KK215ICR0ZW1wZGlyID0gUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM6OnRlbXBkaXI7 CisKKyMgQ2FuIGJlIGNoYW5nZWQgdG8gdGVzdCB0aGUgb3RoZXIgbW9kZXMuCitteSAkbW9kZSA9 ICRFTlZ7UEdfVEVTVF9QR19VUEdSQURFX01PREV9IHx8ICctLWNvcHknOworCitzdWIgdXRpbGl0 eV9wYXRoCit7CisJbXkgJG5vZGUgPSBzaGlmdDsKKwlteSAkbmFtZSA9IHNoaWZ0OworCisJbXkg JGJpbl9wYXRoID0gZGVmaW5lZCgkbm9kZS0+aW5zdGFsbF9wYXRoKSA/CisJCSRub2RlLT5pbnN0 YWxsX3BhdGggLiAiL2Jpbi8kbmFtZSIgOiAkbmFtZTsKKworCXJldHVybiAkYmluX3BhdGg7Cit9 CisKKyMgR2V0IE5leHRNdWx0aU9mZnNldC4KK3N1YiBuZXh0X214b2ZmCit7CisJbXkgJG5vZGUg PSBzaGlmdDsKKworCW15ICRwZ19jb250cm9sZGF0YV9wYXRoID0gdXRpbGl0eV9wYXRoKCRub2Rl LCAncGdfY29udHJvbGRhdGEnKTsKKwlteSAoJHN0ZG91dCwgJHN0ZGVycikgPSBydW5fY29tbWFu ZChbICRwZ19jb250cm9sZGF0YV9wYXRoLAorCQkJCQkJCQkJCQkkbm9kZS0+ZGF0YV9kaXIgXSk7 CisJbXkgQGNvbnRyb2xfZGF0YSA9IHNwbGl0KCJcbiIsICRzdGRvdXQpOworCW15ICRuZXh0X214 b2ZmID0gdW5kZWY7CisKKwlmb3JlYWNoIChAY29udHJvbF9kYXRhKQorCXsKKwkJaWYgKCRfID1+ IC9eTGF0ZXN0IGNoZWNrcG9pbnQncyBOZXh0TXVsdGlPZmZzZXQ6XHMqKC4qKSQvbWcpCisJCXsK KwkJCSRuZXh0X214b2ZmID0gJDE7CisJCQlsYXN0OworCQl9CisJfQorCWRpZSAiTmV4dE11bHRp T2Zmc2V0IG5vdCBmb3VuZCBpbiBjb250cm9sIGZpbGVcbiIKKwkJdW5sZXNzIGRlZmluZWQoJG5l eHRfbXhvZmYpOworCisJcmV0dXJuICRuZXh0X214b2ZmOworfQorCisjIENvbnN1bWUgYXJvdW5k IDEwayBvZiBteG9mZnNldHMuCitzdWIgbXhhY3RfZWF0ZXIKK3sKKwlteSAkbm9kZSA9IHNoaWZ0 OworCW15ICR0YmwgPSAnRk9PJzsKKworCW15ICgkbXhvZmYxLCAkbXhvZmYyKTsKKworCSRteG9m ZjEgPSBuZXh0X214b2ZmKCRub2RlKTsKKwkkbm9kZS0+c3RhcnQ7CisJJG5vZGUtPnNhZmVfcHNx bCgncG9zdGdyZXMnLAorCQkiQ1JFQVRFIFRBQkxFICR7dGJsfSAoSSBJTlQgUFJJTUFSWSBLRVks IE5fVVBEQVRFRCBJTlQpICIgLgorCQkiICAgICAgIFdJVEggKEFVVE9WQUNVVU1fRU5BQkxFRD1G QUxTRSk7IiAuCisJCSJJTlNFUlQgSU5UTyAke3RibH0gU0VMRUNUIEcsIDAgRlJPTSBHRU5FUkFU RV9TRVJJRVMoMSwgNTApIEc7Iik7CisKKwkjIGNvbnN1bWUgYXJvdW5kIDEwayBteG9mZgorCW15 ICRuY2xpZW50cyA9IDEwOworCW15ICR1cGRhdGVfZXZlcnkgPSA3NTsKKwlteSBAY29ubmVjdGlv bnMgPSAoKTsKKworCWZvciAoMC4uJG5jbGllbnRzKQorCXsKKwkJbXkgJGNvbm4gPSAkbm9kZS0+ YmFja2dyb3VuZF9wc3FsKCdwb3N0Z3JlcycpOworCQkkY29ubi0+cXVlcnlfc2FmZSgiQkVHSU4i KTsKKworCQlwdXNoKEBjb25uZWN0aW9ucywgJGNvbm4pOworCX0KKworCWZvciAobXkgJGkgPSAw OyAkaSA8IDEwMDA7ICRpKyspCisJeworCQlteSAkY29ubiA9ICRjb25uZWN0aW9uc1skaSAlICRu Y2xpZW50c107CisKKwkJJGNvbm4tPnF1ZXJ5X3NhZmUoIkNPTU1JVDsiKTsKKwkJJGNvbm4tPnF1 ZXJ5X3NhZmUoIkJFR0lOIik7CisKKwkJaWYgKCRpICUgJHVwZGF0ZV9ldmVyeSA9PSAwKQorCQl7 CisJCQkkY29ubi0+cXVlcnlfc2FmZSgKKwkJCQkiVVBEQVRFICR7dGJsfSBTRVQgIiAuCisJCQkJ Ik5fVVBEQVRFRCA9IE5fVVBEQVRFRCArIDEgIiAuCisJCQkJIldIRVJFIEkgPSAke2l9ICUgNTAi KTsKKwkJfQorCQllbHNlCisJCXsKKwkJCSRjb25uLT5xdWVyeV9zYWZlKAorCQkJCSJTRUxFQ1Qg KiBGUk9NICR7dGJsfSBGT1IgS0VZIFNIQVJFIik7CisJCX0KKwl9CisKKwlmb3IgbXkgJGNvbm4g KEBjb25uZWN0aW9ucykKKwl7CisJCSRjb25uLT5xdWl0KCk7CisJfQorCisJJG5vZGUtPnN0b3A7 CisJJG14b2ZmMiA9IG5leHRfbXhvZmYoJG5vZGUpOworCisJcmV0dXJuICRteG9mZjEsICRteG9m ZjI7Cit9CisKKyMgQ29uc3VtZSBhcm91bmQgMU0gb2YgbXhvZmZzZXRzLgorc3ViIG14YWN0X2h1 Z2VfZWF0ZXIKK3sKKwlteSAkbm9kZSA9IHNoaWZ0OworCW15ICR0YmwgPSAnRk9PJzsKKworCW15 ICgkbXhvZmYxLCAkbXhvZmYyKTsKKworCSRteG9mZjEgPSBuZXh0X214b2ZmKCRub2RlKTsKKwkk bm9kZS0+c3RhcnQ7CisJJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiQ1JFQVRFIFRB QkxFICR7dGJsfSAoSSBJTlQgUFJJTUFSWSBLRVksIE5fVVBEQVRFRCBJTlQpICIgLgorCQkiICAg ICAgIFdJVEggKEFVVE9WQUNVVU1fRU5BQkxFRD1GQUxTRSk7IiAuCisJCSJJTlNFUlQgSU5UTyAk e3RibH0gU0VMRUNUIEcsIDAgRlJPTSBHRU5FUkFURV9TRVJJRVMoMSwgNCkgRzsiKTsKKworCW15 ICRuY2xpZW50cyA9IDEwMDsKKwlteSBAY29ubmVjdGlvbnMgPSAoKTsKKwlteSAkdGltZW91dCA9 IDEwICogJFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOjp0aW1lb3V0X2RlZmF1bHQ7CisKKwlmb3Ig KDAuLiRuY2xpZW50cykKKwl7CisJCW15ICRjb25uID0gJG5vZGUtPmJhY2tncm91bmRfcHNxbCgn cG9zdGdyZXMnLAorCQkJCQkJCQkJCSAgdGltZW91dCA9PiAkdGltZW91dCk7CisJCSRjb25uLT5x dWVyeV9zYWZlKCJCRUdJTiIpOworCisJCXB1c2goQGNvbm5lY3Rpb25zLCAkY29ubik7CisJfQor CisJIyBJdCdzIGEgbG9uZyBwcm9jZXNzLCBiZXR0ZXIgdG8gdGVsbCBhYm91dCBwcm9ncmVzcy4K KwlteSAkbl9zdGVwcyA9IDEwMF8wMDA7CisJbXkgJHN0ZXAgPSBpbnQoJG5fc3RlcHMgLyAxMCk7 CisKKwlkaWFnICJcbnN0YXJ0IHRvIGNvbnN1bWUgbXhvZmZzZXRzIC4uLlxuIjsKKwlmb3IgKG15 ICRpID0gMDsgJGkgPCAkbl9zdGVwczsgJGkrKykKKwl7CisJCW15ICRjb25uID0gJGNvbm5lY3Rp b25zWyRpICUgJG5jbGllbnRzXTsKKworCQkkY29ubi0+cXVlcnlfc2FmZSgiQ09NTUlUOyIpOwor CQkkY29ubi0+cXVlcnlfc2FmZSgiQkVHSU4iKTsKKworCQl7CisJCQkkY29ubi0+cXVlcnlfc2Fm ZSgKKwkJCQkiU0VMRUNUICogRlJPTSAke3RibH0gIiAuCisJCQkJIkZPUiBLRVkgU0hBUkUiKTsK KwkJfQorCisJCWlmICgkaSAlICRzdGVwID09IDApCisJCXsKKwkJCW15ICRkb25lID0gaW50KCgk aSAvICRuX3N0ZXBzKSAqIDEwMCk7CisJCQlkaWFnICIkZG9uZSUgZG9uZS4uLiI7CisJCX0KKwl9 CisKKwlmb3IgbXkgJGNvbm4gKEBjb25uZWN0aW9ucykKKwl7CisJCSRjb25uLT5xdWl0KCk7CisJ fQorCisJJG5vZGUtPnN0b3A7CisJJG14b2ZmMiA9IG5leHRfbXhvZmYoJG5vZGUpOworCisJcmV0 dXJuICRteG9mZjEsICRteG9mZjI7Cit9CisKKyMgU2V0IG9sZGVzdCBtdWx0aXhhY3Qtb2Zmc2V0 CitzdWIgcmVzZXRfbXhvZmYKK3sKKwlteSAkbm9kZSA9IHNoaWZ0OworCW15ICRvZmZzZXQgPSBz aGlmdDsKKworCW15ICRwZ19yZXNldHdhbF9wYXRoID0gdXRpbGl0eV9wYXRoKCRub2RlLCAncGdf cmVzZXR3YWwnKTsKKwkjIEdldCBibG9jayBzaXplCisJbXkgJG91dCA9IChydW5fY29tbWFuZChb ICRwZ19yZXNldHdhbF9wYXRoLCAnLS1kcnktcnVuJywKKwkJCQkJCQkgJG5vZGUtPmRhdGFfZGly IF0pKVswXTsKKwkJJG91dCA9fiAvXkRhdGFiYXNlIGJsb2NrIHNpemU6ICooXGQrKSQvbSBvciBk aWU7CisJbXkgJGJsY2tzeiA9ICQxOworCisJIyBSZXNldCB0byBuZXcgb2Zmc2V0CisJbXkgQGNt ZCA9ICgkcGdfcmVzZXR3YWxfcGF0aCwgJy0tcGdkYXRhJyA9PiAkbm9kZS0+ZGF0YV9kaXIpOwor CXB1c2ggQGNtZCwgJy0tbXVsdGl4YWN0LW9mZnNldCcgPT4gJG9mZnNldDsKKwljb21tYW5kX29r KFxAY21kLCAnc2V0IG9sZGVzdCBtdWx0aXhhY3Qtb2Zmc2V0Jyk7CisKKwkjIEZpbGwgZW1wdHkg cGdfbXVsdGl4YWN0L21lbWJlcnMgc2VnbWVudAorCW15ICRtdWx0ID0gMzIgKiBpbnQoJGJsY2tz eiAvIDIwKSAqIDQ7CisJbXkgJHNlZ25hbWUgPSBzcHJpbnRmICIlMDRYIiwgJG9mZnNldCAvICRt dWx0OworCisJbXkgQGRkID0gKCdkZCcpOworCXB1c2ggQGRkLCAiaWY9L2Rldi96ZXJvIjsKKwlw dXNoIEBkZCwgIm9mPSIgLiAkbm9kZS0+ZGF0YV9kaXIgLiAiL3BnX211bHRpeGFjdC9tZW1iZXJz LyIgLiAkc2VnbmFtZTsKKwlwdXNoIEBkZCwgImJzPSRibGNrc3oiOworCXB1c2ggQGRkLCAiY291 bnQ9MzIiOworCWNvbW1hbmRfb2soXEBkZCwgJ2ZpbGwgZW1wdHkgbXVsdGl4YWN0LW1lbWJlcnMn KTsKK30KKworc3ViIGdldF9kdW1wX2Zvcl9jb21wYXJpc29uCit7CisJbXkgKCRub2RlLCAkZGIs ICRmaWxlX3ByZWZpeCwgJGFkanVzdF9jaGlsZF9jb2x1bW5zKSA9IEBfOworCisJbXkgJGR1bXBm aWxlID0gJHRlbXBkaXIgLiAnLycgLiAkZmlsZV9wcmVmaXggLiAnLnNxbCc7CisJbXkgJGR1bXBf YWRqdXN0ZWQgPSAiJHtkdW1wZmlsZX1fYWRqdXN0ZWQiOworCisJb3BlbihteSAkZGgsICc+Jywg JGR1bXBfYWRqdXN0ZWQpCisJICB8fCBkaWUgImNvdWxkIG5vdCBvcGVuICRkdW1wX2FkanVzdGVk IGZvciB3cml0aW5nICQhIjsKKworCW15ICRwZ19kdW1wX3BhdGggPSB1dGlsaXR5X3BhdGgoJG5v ZGUsICdwZ19kdW1wJyk7CisKKwkkbm9kZS0+cnVuX2xvZygKKwkJWworCQkJJHBnX2R1bXBfcGF0 aCwgJy0tbm8tc3luYycsCisJCQknLS1yZXN0cmljdC1rZXknID0+ICd0ZXN0JywKKwkJCSctZCcg PT4gJG5vZGUtPmNvbm5zdHIoJGRiKSwKKwkJCSctZicgPT4gJGR1bXBmaWxlCisJCV0pOworCisJ cHJpbnQgJGRoIGFkanVzdF9yZWdyZXNzX2R1bXBmaWxlKHNsdXJwX2ZpbGUoJGR1bXBmaWxlKSwK KwkJJGFkanVzdF9jaGlsZF9jb2x1bW5zKTsKKwljbG9zZSgkZGgpOworCisJcmV0dXJuICRkdW1w X2FkanVzdGVkOworfQorCisjIE1haW4gdGVzdCB3b3JraG9yc2Ugcm91dGluZS4KKyMgTWFrZSBw Z191cGdyYWRlLCBkdW1wIGRhdGEgYW5kIGNvbXBhcmUgaXQuCitzdWIgcnVuX3Rlc3QKK3sKKwlt eSAkdGFnID0gc2hpZnQ7CisJbXkgJG9sZG5vZGUgPSBzaGlmdDsKKwlteSAkbmV3bm9kZSA9IHNo aWZ0OworCisJbXkgJHBnX3VwZ3JhZGVfcGF0aCA9IHV0aWxpdHlfcGF0aCgkbmV3bm9kZSwgJ3Bn X3VwZ3JhZGUnKTsKKworCWNvbW1hbmRfb2soCisJCVsKKwkJCSRwZ191cGdyYWRlX3BhdGgsICct LW5vLXN5bmMnLAorCQkJJy0tb2xkLWRhdGFkaXInID0+ICRvbGRub2RlLT5kYXRhX2RpciwKKwkJ CSctLW5ldy1kYXRhZGlyJyA9PiAkbmV3bm9kZS0+ZGF0YV9kaXIsCisJCQknLS1vbGQtYmluZGly JyA9PiAkb2xkbm9kZS0+Y29uZmlnX2RhdGEoJy0tYmluZGlyJyksCisJCQknLS1uZXctYmluZGly JyA9PiAkbmV3bm9kZS0+Y29uZmlnX2RhdGEoJy0tYmluZGlyJyksCisJCQknLS1zb2NrZXRkaXIn ID0+ICRuZXdub2RlLT5ob3N0LAorCQkJJy0tb2xkLXBvcnQnID0+ICRvbGRub2RlLT5wb3J0LAor CQkJJy0tbmV3LXBvcnQnID0+ICRuZXdub2RlLT5wb3J0LAorCQkJJG1vZGUsCisJCV0sCisJCSdy dW4gb2YgcGdfdXBncmFkZSBmb3IgbmV3IGluc3RhbmNlJyk7CisJb2soICEtZCAkbmV3bm9kZS0+ ZGF0YV9kaXIgLiAiL3BnX3VwZ3JhZGVfb3V0cHV0LmQiLAorCQkicGdfdXBncmFkZV9vdXRwdXQu ZC8gcmVtb3ZlZCBhZnRlciBwZ191cGdyYWRlIHN1Y2Nlc3MiKTsKKworCSRvbGRub2RlLT5zdGFy dDsKKwlteSAkc3JjX2R1bXAgPQorCQlnZXRfZHVtcF9mb3JfY29tcGFyaXNvbigkb2xkbm9kZSwg J3Bvc3RncmVzJywKKwkJCQkJCQkJIm9sZG5vZGVfJHt0YWd9X2R1bXAiLCAwKTsKKwkkb2xkbm9k ZS0+c3RvcDsKKworCSRuZXdub2RlLT5zdGFydDsKKwlteSAkZHN0X2R1bXAgPQorCQlnZXRfZHVt cF9mb3JfY29tcGFyaXNvbigkbmV3bm9kZSwgJ3Bvc3RncmVzJywKKwkJCQkJCQkJIm5ld25vZGVf JHt0YWd9X2R1bXAiLCAwKTsKKwkkbmV3bm9kZS0+c3RvcDsKKworCWNvbXBhcmVfZmlsZXMoJHNy Y19kdW1wLCAkZHN0X2R1bXAsCisJCSdkdW1wIG91dHB1dHMgZnJvbSBvcmlnaW5hbCBhbmQgcmVz dG9yZWQgcmVncmVzc2lvbiBkYXRhYmFzZXMgbWF0Y2gnKTsKK30KKworc3ViIHRvX2hleAorewor CW15ICRhcmcgPSBzaGlmdDsKKworCSRhcmcgPSBNYXRoOjpCaWdJbnQtPm5ldygkYXJnKTsKKwkk YXJnID0gJGFyZy0+YXNfaGV4KCk7CisKKwlyZXR1cm4gJGFyZzsKK30KKworIyBjYXNlICMxOiBz dGFydCBvbGQgbm9kZSBmcm9tIGRlZmF1bHRzCit7CisJbXkgJHRhZyA9IDE7CisJbXkgJG9sZCA9 CisJCVBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygib2xkbm9kZSR7dGFnfSIsCisJCQkJ CQkJCQkgICBpbnN0YWxsX3BhdGggPT4gJEVOVntvbGRpbnN0YWxsfSk7CisJJG9sZC0+aW5pdChl eHRyYSA9PiBbJy1rJ10pOworCisJbXkgKCRzdGFydF9teG9mZiwgJGZpbmlzaF9teG9mZikgPSBt eGFjdF9lYXRlcigkb2xkKTsKKworCW15ICRuZXcgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVy LT5uZXcoIm5ld25vZGUke3RhZ30iKTsKKwkkbmV3LT5pbml0OworCisJcnVuX3Rlc3QoJHRhZywg JG9sZCwgJG5ldyk7CisKKwkkc3RhcnRfbXhvZmYgPSB0b19oZXgoJHN0YXJ0X214b2ZmKTsKKwkk ZmluaXNoX214b2ZmID0gdG9faGV4KCRmaW5pc2hfbXhvZmYpOworCisJbXkgJG5leHRfbXhvZmYg PSB0b19oZXgobmV4dF9teG9mZigkbmV3KSk7CisKKwlub3RlICI+Pj4gY2FzZSAjJHt0YWd9XG4i IC4KKwkJICIgb2xkbm9kZSBteG9mZiBmcm9tICR7c3RhcnRfbXhvZmZ9IHRvICR7ZmluaXNoX214 b2ZmfVxuIiAuCisJCSAiIG5ld25vZGUgbXhvZmYgJHtuZXh0X214b2ZmfVxuIjsKK30KKworIyBj YXNlICMyOiBzdGFydCBvbGQgbm9kZSBmcm9tIGJlZm9yZSAzMi1iaXQgd3JhcGFyb3VuZAorewor CW15ICR0YWcgPSAyOworCW15ICRvbGQgPQorCQlQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5u ZXcoIm9sZG5vZGUke3RhZ30iLAorCQkJCQkJCQkJICAgaW5zdGFsbF9wYXRoID0+ICRFTlZ7b2xk aW5zdGFsbH0pOworCisJJG9sZC0+aW5pdChleHRyYSA9PiBbJy1rJ10pOworCXJlc2V0X214b2Zm KCRvbGQsIDB4RkZGRjAwMDApOworCisJbXkgKCRzdGFydF9teG9mZiwgJGZpbmlzaF9teG9mZikg PSBteGFjdF9lYXRlcigkb2xkKTsKKworCW15ICRuZXcgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVz dGVyLT5uZXcoIm5ld25vZGUke3RhZ30iKTsKKwkkbmV3LT5pbml0OworCisJcnVuX3Rlc3QoJHRh ZywgJG9sZCwgJG5ldyk7CisKKwkkc3RhcnRfbXhvZmYgPSB0b19oZXgoJHN0YXJ0X214b2ZmKTsK KwkkZmluaXNoX214b2ZmID0gdG9faGV4KCRmaW5pc2hfbXhvZmYpOworCisJbXkgJG5leHRfbXhv ZmYgPSB0b19oZXgobmV4dF9teG9mZigkbmV3KSk7CisKKwlub3RlICI+Pj4gY2FzZSAjJHt0YWd9 XG4iIC4KKwkJICIgb2xkbm9kZSBteG9mZiBmcm9tICR7c3RhcnRfbXhvZmZ9IHRvICR7ZmluaXNo X214b2ZmfVxuIiAuCisJCSAiIG5ld25vZGUgbXhvZmYgJHtuZXh0X214b2ZmfVxuIjsKK30KKwor IyBjYXNlICMzOiBzdGFydCBvbGQgbm9kZSBuZWFyIDMyLWJpdCB3cmFwYXJvdW5kIGFuZCByZWFj aCB3cmFwYXJvdW5kIHN0YXRlLgoreworCW15ICR0YWcgPSAzOworCW15ICRvbGQgPQorCQlQb3N0 Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoIm9sZG5vZGUke3RhZ30iLAorCQkJCQkJCQkJICAg aW5zdGFsbF9wYXRoID0+ICRFTlZ7b2xkaW5zdGFsbH0pOworCisJJG9sZC0+aW5pdChleHRyYSA9 PiBbJy1rJ10pOworCisJcmVzZXRfbXhvZmYoJG9sZCwgMHhGRkZGRUM3Nyk7CisJbXkgKCRzdGFy dF9teG9mZiwgJGZpbmlzaF9teG9mZikgPSBteGFjdF9lYXRlcigkb2xkKTsKKworCW15ICRuZXcg PSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoIm5ld25vZGUke3RhZ30iKTsKKwkkbmV3 LT5pbml0OworCisJcnVuX3Rlc3QoJHRhZywgJG9sZCwgJG5ldyk7CisKKwkkc3RhcnRfbXhvZmYg PSB0b19oZXgoJHN0YXJ0X214b2ZmKTsKKwkkZmluaXNoX214b2ZmID0gdG9faGV4KCRmaW5pc2hf bXhvZmYpOworCisJbXkgJG5leHRfbXhvZmYgPSB0b19oZXgobmV4dF9teG9mZigkbmV3KSk7CisK Kwlub3RlICI+Pj4gY2FzZSAjJHt0YWd9XG4iIC4KKwkJICIgb2xkbm9kZSBteG9mZiBmcm9tICR7 c3RhcnRfbXhvZmZ9IHRvICR7ZmluaXNoX214b2ZmfVxuIiAuCisJCSAiIG5ld25vZGUgbXhvZmYg JHtuZXh0X214b2ZmfVxuIjsKK30KKworIyBjYXNlICM0OiBzdGFydCBvbGQgbm9kZSBmcm9tIGRl ZmF1bHRzCit7CisJbXkgJHRhZyA9IDQ7CisJbXkgJG9sZCA9CisJCVBvc3RncmVTUUw6OlRlc3Q6 OkNsdXN0ZXItPm5ldygib2xkbm9kZSR7dGFnfSIsCisJCQkJCQkJCQkgICBpbnN0YWxsX3BhdGgg PT4gJEVOVntvbGRpbnN0YWxsfSk7CisKKwkkb2xkLT5pbml0KGV4dHJhID0+IFsnLWsnXSk7CisJ JG9sZC0+YXBwZW5kX2NvbmYoInBvc3RncmVzcWwuY29uZiIsICJtYXhfY29ubmVjdGlvbnMgPSAx MjgiKTsKKworCWRpYWcgInRlc3QgIyR7dGFnfSBmb3IgbXVsdGlwbGUgbXhvZmYgc2VnbWVudHMi OworCW15ICgkc3RhcnRfbXhvZmYsICRmaW5pc2hfbXhvZmYpID0gbXhhY3RfaHVnZV9lYXRlcigk b2xkKTsKKworCW15ICRuZXcgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoIm5ld25v ZGUke3RhZ30iKTsKKwkkbmV3LT5pbml0OworCisJcnVuX3Rlc3QoJHRhZywgJG9sZCwgJG5ldyk7 CisKKwkkc3RhcnRfbXhvZmYgPSB0b19oZXgoJHN0YXJ0X214b2ZmKTsKKwkkZmluaXNoX214b2Zm ID0gdG9faGV4KCRmaW5pc2hfbXhvZmYpOworCisJbXkgJG5leHRfbXhvZmYgPSB0b19oZXgobmV4 dF9teG9mZigkbmV3KSk7CisKKwlub3RlICI+Pj4gY2FzZSAjJHt0YWd9XG4iIC4KKwkJICIgb2xk bm9kZSBteG9mZiBmcm9tICR7c3RhcnRfbXhvZmZ9IHRvICR7ZmluaXNoX214b2ZmfVxuIiAuCisJ CSAiIG5ld25vZGUgbXhvZmYgJHtuZXh0X214b2ZmfVxuIjsKK30KKworIyBjYXNlICM1OiBzdGFy dCBvbGQgbm9kZSBmcm9tIGJlZm9yZSAzMi1iaXQgd3JhcGFyb3VuZAoreworCW15ICR0YWcgPSA1 OworCW15ICRvbGQgPQorCQlQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoIm9sZG5vZGUk e3RhZ30iLAorCQkJCQkJCQkJICAgaW5zdGFsbF9wYXRoID0+ICRFTlZ7b2xkaW5zdGFsbH0pOwor CisJJG9sZC0+aW5pdChleHRyYSA9PiBbJy1rJ10pOworCSRvbGQtPmFwcGVuZF9jb25mKCJwb3N0 Z3Jlc3FsLmNvbmYiLCAibWF4X2Nvbm5lY3Rpb25zID0gMTI4Iik7CisJcmVzZXRfbXhvZmYoJG9s ZCwgMHhGRjAwMDAwMCk7CisKKwlkaWFnICJ0ZXN0ICMke3RhZ30gZm9yIG11bHRpcGxlIG14b2Zm IHNlZ21lbnRzIjsKKwlteSAoJHN0YXJ0X214b2ZmLCAkZmluaXNoX214b2ZmKSA9IG14YWN0X2h1 Z2VfZWF0ZXIoJG9sZCk7CisKKwlteSAkbmV3ID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+ bmV3KCJuZXdub2RlJHt0YWd9Iik7CisJJG5ldy0+aW5pdDsKKworCXJ1bl90ZXN0KCR0YWcsICRv bGQsICRuZXcpOworCisJJHN0YXJ0X214b2ZmID0gdG9faGV4KCRzdGFydF9teG9mZik7CisJJGZp bmlzaF9teG9mZiA9IHRvX2hleCgkZmluaXNoX214b2ZmKTsKKworCW15ICRuZXh0X214b2ZmID0g dG9faGV4KG5leHRfbXhvZmYoJG5ldykpOworCisJbm90ZSAiPj4+IGNhc2UgIyR7dGFnfVxuIiAu CisJCSAiIG9sZG5vZGUgbXhvZmYgZnJvbSAke3N0YXJ0X214b2ZmfSB0byAke2ZpbmlzaF9teG9m Zn1cbiIgLgorCQkgIiBuZXdub2RlIG14b2ZmICR7bmV4dF9teG9mZn1cbiI7Cit9CisKKyMgY2Fz ZSAjNjogc3RhcnQgb2xkIG5vZGUgbmVhciAzMi1iaXQgd3JhcGFyb3VuZCBhbmQgcmVhY2ggd3Jh cGFyb3VuZCBzdGF0ZS4KK3sKKwlteSAkdGFnID0gNjsKKwlteSAkb2xkID0KKwkJUG9zdGdyZVNR TDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCJvbGRub2RlJHt0YWd9IiwKKwkJCQkJCQkJCSAgIGluc3Rh bGxfcGF0aCA9PiAkRU5We29sZGluc3RhbGx9KTsKKworCSRvbGQtPmluaXQoZXh0cmEgPT4gWyct ayddKTsKKworCXJlc2V0X214b2ZmKCRvbGQsIDB4RkZGRkZGRkYgLSA1MDBfMDAwKTsKKwkkb2xk LT5hcHBlbmRfY29uZigicG9zdGdyZXNxbC5jb25mIiwgIm1heF9jb25uZWN0aW9ucyA9IDEyOCIp OworCW15ICgkc3RhcnRfbXhvZmYsICRmaW5pc2hfbXhvZmYpID0gbXhhY3RfaHVnZV9lYXRlcigk b2xkKTsKKworCWRpYWcgInRlc3QgIyR7dGFnfSBmb3IgbXVsdGlwbGUgbXhvZmYgc2VnbWVudHMi OworCW15ICRuZXcgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoIm5ld25vZGUke3Rh Z30iKTsKKwkkbmV3LT5pbml0OworCisJcnVuX3Rlc3QoJHRhZywgJG9sZCwgJG5ldyk7CisKKwkk c3RhcnRfbXhvZmYgPSB0b19oZXgoJHN0YXJ0X214b2ZmKTsKKwkkZmluaXNoX214b2ZmID0gdG9f aGV4KCRmaW5pc2hfbXhvZmYpOworCisJbXkgJG5leHRfbXhvZmYgPSB0b19oZXgobmV4dF9teG9m ZigkbmV3KSk7CisKKwlub3RlICI+Pj4gY2FzZSAjJHt0YWd9XG4iIC4KKwkJICIgb2xkbm9kZSBt eG9mZiBmcm9tICR7c3RhcnRfbXhvZmZ9IHRvICR7ZmluaXNoX214b2ZmfVxuIiAuCisJCSAiIG5l d25vZGUgbXhvZmYgJHtuZXh0X214b2ZmfVxuIjsKK30KKworZG9uZV90ZXN0aW5nKCk7Ci0tIAoy LjUxLjAKCg== --000000000000a9529e0642ef063c--