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.96) (envelope-from ) id 1vSImi-00B4tf-2l for pgsql-hackers@arkaria.postgresql.org; Sun, 07 Dec 2025 17:43:01 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vSImg-00Difg-0r for pgsql-hackers@arkaria.postgresql.org; Sun, 07 Dec 2025 17:42:58 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vSImf-00DifY-0r for pgsql-hackers@lists.postgresql.org; Sun, 07 Dec 2025 17:42:58 +0000 Received: from mail-ed1-x535.google.com ([2a00:1450:4864:20::535]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vSImc-003ckh-09 for pgsql-hackers@lists.postgresql.org; Sun, 07 Dec 2025 17:42:56 +0000 Received: by mail-ed1-x535.google.com with SMTP id 4fb4d7f45d1cf-64175dfc338so6341318a12.0 for ; Sun, 07 Dec 2025 09:42:54 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1765129372; x=1765734172; 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=blAkPsEuw1sWoo/rUphw5F9i9zZE/qR0zn0osMBAAX8=; b=WROJLiyU1ASkyqxgai5Aj4DNdMFegek/HYkXbMxOxioXTk6NrYoZJ44NApOMKXdbSG rKIla6DWqc17dJ9/voWyoykDg7tns9ZW7CLGtj2ICKBk4+aIJKaiMZgrqEzwI9+rVS7A 1hNUaQeOM67qXlQcbgmxoZi3whgL4sw+ES+uWXWcB8gKVpVVs898kgWENzXVhzqfC9tM HXftnXR7iiBfD11ARGn1X0olDJaVuiTkOVEkvnmKDJoM3c1wNJsYXx0xIu0CAfKw1WxI sD8Fu7rrZSw1ZmnogpCgiWmnkV+tAzlzRDnoX3TUNqLIhxwt2P713dyUZHxzTBvTVG7H 9y0A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765129372; x=1765734172; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=blAkPsEuw1sWoo/rUphw5F9i9zZE/qR0zn0osMBAAX8=; b=xOJ//ZK/2an/uFlr3GMwq+T5XF0q6vwcn243qVX9aC6C9WpKq3OT58r/C6l480Vkat 15gQrzSbQ1uw/FrRqduhS/Jafu4BLVfltK01zjSVppEOwGRGXsIV51xnpjgjKQMwpN+x zwbfBP5Yr7g/m3rKgMWeWuP+K83c3D7lf5ikr2XnWXdyKFFLNCHe16I/yk5mbYqxym6z qVNPyNHlVzJwhiCmZOJ8S1cqrdEUJA32oLyImZJaFaN9v5U46lt6DQj8KVu8GeLFpNhH 9W4FATKG/RKzM0+RoFKXawCkXHgh+gF3xpvbTdEDVfDUqqdSq/xDajPa6JHbuOejFMqQ Ifzw== X-Forwarded-Encrypted: i=1; AJvYcCWI+5OICgwo+sFWfk0W7Uz6Fdss9MggFtV1PzsHOL9Jxhwc2ACReoC0Nx4HKU7sCAA9ipQCk6nf9aEDVDeO@lists.postgresql.org X-Gm-Message-State: AOJu0Yzi4P7kVNM467KbZ7tvN9+JZ1uNWI2JkywQY+CA2JG7SwVVpjlk MGuCGYuW6cVAASzL9lZREGqYJ639C3UDv2AgApseWBsD0U0JjO+EBQUwC+4dxf9iTdQE2g+lgvG FLdUO/KtkbYOKuujU7OHc+2GcSjrl4NE= X-Gm-Gg: ASbGncuXoheaMf4CSZ15jEl1zdXKxPwCQ6g1fh9xrG3MenG2O/jiE8DsHUBXjA/gyx8 EZVs3yjy0CoOA0Cw6Aq+tETXDPBU/L7tT0+DZEJFPqJnBkFofJ9NQYco8OLWDIhMk1iTnaS3+i8 wmB3tyPBlJvG46xynMfrCn7VBabFDxxUY5xBvwOXD9YzuU6Xcj0pD/ZWSXD3expC1pjz9TVpAxh JJ2cY4peWi8j39dRv4dbUN4erchshotjuOth3eJ+FiY0A0XTIKCli14840okQ446+M= X-Google-Smtp-Source: AGHT+IFJcyOo+W4UkUqnJDdrwttnZd+sE2osEixxT15rbN8xxDiAegCQR69CZFIujC7ALVGg5Be+fW8/jIWLdjMWZtw= X-Received: by 2002:a05:6402:2694:b0:63c:eb6:65e8 with SMTP id 4fb4d7f45d1cf-6491ade9325mr4924857a12.30.1765129371493; Sun, 07 Dec 2025 09:42:51 -0800 (PST) MIME-Version: 1.0 References: <4FEEC2B8-D9CF-4BD0-AA7E-44CE3E27ADD8@gmail.com> <5EC13E39-B41E-464A-B382-0ACEB18A15BB@gmail.com> In-Reply-To: From: Sami Imseih Date: Sun, 7 Dec 2025 11:42:38 -0600 X-Gm-Features: AQt7F2pPDB11WN8lvR_pgJpQwiN1CEE3VOdH2nDPpVidn527SI11qVpQ82BMsEs Message-ID: Subject: Re: [Proposal] Adding callback support for custom statistics kinds To: Michael Paquier Cc: Chao Li , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="0000000000002c5e29064560358c" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000002c5e29064560358c Content-Type: text/plain; charset="UTF-8" I took a look at the earlier comments. > + /* Read and verify the hash key */ > + if (!pgstat_read_chunk(fd, (void *) key, sizeof(PgStat_HashKey))) > + return; > [...] > + /* Write the hash key to identify this entry */ > + pgstat_write_chunk(fd, (void *) key, sizeof(PgStat_HashKey)); > I am puzzled by this part of 0002. Why are you overwriting the key > once after loading it from the main pgstats file? Yes, this is not necessary. I removed it. > I would have done it in a slightly different way, I guess, with the data > stored on disk in the main pgstats file including an offset to know > where to search in the secondary file. that's a much better approach and the pattern we would want to use going forward. Since this does not require we read the entires back in the same order as written, so it's much more flexible. I not did this in the test module. > Perhaps the callback in the module for end_extra_stats should use a > switch based on PgStat_StatsFileOp. Minor point. Agree. Done. >> * In the current path, pgstat performs its own write, then call >> * callbacks. What about if a callback fails? Will that leave pgstat >> * in a stale state? > For the write state, end_extra_stats() would take care of that. It > depends on what kind of errors you would need to deal with, but as > proposed the patch would offer the same level of protection for the > writes of the stats, where we'd check for an error on the fd saved by > an extension for an extra file. > I think that you have a fair point about the stats read path though, > shouldn't we make the callback from_serialized_extra_stats() return a > state to be able to trigger a full-scale cleanup, at least? In this case, even if the callback does not return a state, the cleanup will eventually occur at the end of the read, see ``` done: /* First, cleanup the main stats file, PGSTAT_STAT_PERMANENT_FILENAME */ FreeFile(fpin); elog(DEBUG2, "removing permanent stats file \"%s\"", statfile); unlink(statfile); /* Let each stats kind run its cleanup callback, if it provides one */ for (PgStat_Kind kind = PGSTAT_KIND_MIN; kind <= PGSTAT_KIND_MAX; kind++) { const PgStat_KindInfo *kind_info = pgstat_get_kind_info(kind); if (kind_info && kind_info->end_extra_stats) kind_info->end_extra_stats(STATS_READ); } ``` However, this could also mean some entries could be read back correctly, and others not, so maybe it's not such a good idea. So, I did what is suggested and allow the callback to return a bool which will raise an error and trigger the cleanup code. > + if (pgstat_is_kind_custom(key.kind) && kind_info->from_serialized_extra_stats) > + kind_info->from_serialized_extra_stats(&key, header, fpin); > [...] > + if (pgstat_is_kind_custom(ps->key.kind) && kind_info->to_serialized_extra_stats) > + kind_info->to_serialized_extra_stats(&ps->key, shstats, fpout); > These restrictions based on custom kinds do not seem mandatory. > Why not allowing built-in kinds the same set of operations? No good reason not to. In fact, maybe a follow-up will be to move the replslot to this infrastructure and remove reliance on PGSTAT_FILE_ENTRY_NAME. attached is the v4 patch set which includes: 0001 - which is just moving the tests out of injection points into a new test module. This is similar to v3 [0]. 0002 - Is the code changes to implement the callbacks and the necessary tests in the new test module. [0] https://www.postgresql.org/message-id/CAA5RZ0sG2RUKg%3DOLY%2B6-e4q%3DX9rsLfK3pKn03d%3DRZQppEDR%3DBg%40mail.gmail.com -- Sami Imseih Amazon Web Services (AWS) --0000000000002c5e29064560358c Content-Type: application/octet-stream; name="v4-0002-Allow-cumulative-statistics-to-serialize-auxiliar.patch" Content-Disposition: attachment; filename="v4-0002-Allow-cumulative-statistics-to-serialize-auxiliar.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_miw0euo60 RnJvbSA4N2QzNGYyYzYxODc5OGVmYjM3ZjdlMjI1YTc1M2QxZTNjNjliMTFjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTYW1pIEltc2VpaCA8c2ltc2VpaEBhbWF6b24uY29tPgpEYXRl OiBNb24sIDEwIE5vdiAyMDI1IDAwOjAzOjQxIC0wNjAwClN1YmplY3Q6IFtQQVRDSCB2NCAyLzJd IEFsbG93IGN1bXVsYXRpdmUgc3RhdGlzdGljcyB0byBzZXJpYWxpemUgYXV4aWxpYXJ5CiBkYXRh IHRvIGRpc2suCgpDdW11bGF0aXZlIFN0YXRpc3RpY3Mga2luZHMgY2FuIG5vdyB3cml0ZSBhZGRp dGlvbmFsIHBlci1lbnRyeSBkYXRhIHRvCnRoZSBzdGF0aXN0aWNzIGZpbGUgdGhhdCBkb2Vzbid0 IGZpdCBpbiBzaGFyZWQgbWVtb3J5LiBUaGlzIGlzIHVzZWZ1bApmb3Igc3RhdGlzdGljcyB3aXRo IHZhcmlhYmxlLWxlbmd0aCBhdXhpbGlhcnkgZGF0YS4KClRocmVlIG5ldyBvcHRpb25hbCBjYWxs YmFja3MgYXJlIGFkZGVkIHRvIFBnU3RhdF9LaW5kSW5mbzoKCiogdG9fc2VyaWFsaXplZF9leHRy YV9zdGF0czogd3JpdGVzIGF1eGlsaWFyeSBkYXRhIGZvciBhbiBlbnRyeQoqIGZyb21fc2VyaWFs aXplZF9leHRyYV9zdGF0czogcmVhZHMgYXV4aWxpYXJ5IGRhdGEgZm9yIGFuIGVudHJ5CiogZW5k X2V4dHJhX3N0YXRzOiBwZXJmb3JtcyBjbGVhbnVwIGFmdGVyIHJlYWQvd3JpdGUvZGlzY2FyZCBv cGVyYXRpb25zCgpBbGwgdGhyZWUgY2FsbGJhY2tzIG11c3QgYmUgcHJvdmlkZWQgdG9nZXRoZXIg dG8gZW5zdXJlIHRoZSByZWFkZXIKY29uc3VtZXMgZXhhY3RseSB3aGF0IHRoZSB3cml0ZXIgcHJv ZHVjZXMuIFRoZSBlbmRfZXh0cmFfc3RhdHMgY2FsbGJhY2sKaXMgaW52b2tlZCBhZnRlciBwcm9j ZXNzaW5nIGFsbCBlbnRyaWVzIG9mIGEga2luZCwgYWxsb3dpbmcgZXh0ZW5zaW9ucwp0byBjbG9z ZSBmaWxlIGhhbmRsZXMgYW5kIGNsZWFuIHVwIHJlc291cmNlcy4KClRlc3RzIGFyZSBhbHNvIGFk ZGVkIHRvIHRlc3RfY3VzdG9tX3N0YXRzLgoKRGlzY3Vzc2lvbjogaHR0cHM6Ly93d3cucG9zdGdy ZXNxbC5vcmcvbWVzc2FnZS1pZC9mbGF0L0NBQTVSWjBzOVNET3UrWjZ2ZW9KQ0hXaytrRGVUa3RB dEMtS1k5ZlE5WjZCSmREVWlyUUBtYWlsLmdtYWlsLmNvbQotLS0KIHNyYy9iYWNrZW5kL3V0aWxz L2FjdGl2aXR5L3Bnc3RhdC5jICAgICAgICAgICB8ICA4MSArKysrLQogc3JjL2luY2x1ZGUvdXRp bHMvcGdzdGF0X2ludGVybmFsLmggICAgICAgICAgIHwgIDM3ICsrCiAuLi4vdGVzdF9jdXN0b21f c3RhdHMvdC8wMDFfY3VzdG9tX3N0YXRzLnBsICAgfCAgMjAgKy0KIC4uLi90ZXN0X2N1c3RvbV92 YXJfc3RhdHMtLTEuMC5zcWwgICAgICAgICAgICB8ICAgNiArLQogLi4uL3Rlc3RfY3VzdG9tX3N0 YXRzL3Rlc3RfY3VzdG9tX3Zhcl9zdGF0cy5jIHwgMzI3ICsrKysrKysrKysrKysrKysrLQogNSBm aWxlcyBjaGFuZ2VkLCA0NDcgaW5zZXJ0aW9ucygrKSwgMjQgZGVsZXRpb25zKC0pCgpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvcGdzdGF0LmMgYi9zcmMvYmFja2VuZC91 dGlscy9hY3Rpdml0eS9wZ3N0YXQuYwppbmRleCA4NzEzYzdhMDQ4My4uODgwNGMxNjg4YzUgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3Bnc3RhdC5jCisrKyBiL3NyYy9i YWNrZW5kL3V0aWxzL2FjdGl2aXR5L3Bnc3RhdC5jCkBAIC0xOTQsNiArMTk0LDcgQEAgc3RhdGlj IHZvaWQgcGdzdGF0X2J1aWxkX3NuYXBzaG90KHZvaWQpOwogc3RhdGljIHZvaWQgcGdzdGF0X2J1 aWxkX3NuYXBzaG90X2ZpeGVkKFBnU3RhdF9LaW5kIGtpbmQpOwogCiBzdGF0aWMgaW5saW5lIGJv b2wgcGdzdGF0X2lzX2tpbmRfdmFsaWQoUGdTdGF0X0tpbmQga2luZCk7CitzdGF0aWMgaW5saW5l IHZvaWQgcGdzdGF0X2NoZWNrX2V4dHJhX2NhbGxiYWNrcyhjb25zdCBQZ1N0YXRfS2luZEluZm8g KmtpbmRfaW5mbywgaW50IGVsZXZlbCk7CiAKIAogLyogLS0tLS0tLS0tLQpAQCAtNTIzLDYgKzUy NCw3IEBAIHBnc3RhdF9kaXNjYXJkX3N0YXRzKHZvaWQpCiAKIAkvKiBOQjogdGhpcyBuZWVkcyB0 byBiZSBkb25lIGV2ZW4gaW4gc2luZ2xlIHVzZXIgbW9kZSAqLwogCisJLyogRmlyc3QsIGNsZWFu dXAgdGhlIG1haW4gc3RhdHMgZmlsZSwgUEdTVEFUX1NUQVRfUEVSTUFORU5UX0ZJTEVOQU1FICov CiAJcmV0ID0gdW5saW5rKFBHU1RBVF9TVEFUX1BFUk1BTkVOVF9GSUxFTkFNRSk7CiAJaWYgKHJl dCAhPSAwKQogCXsKQEAgLTU0NCw2ICs1NDYsMTUgQEAgcGdzdGF0X2Rpc2NhcmRfc3RhdHModm9p ZCkKIAkJCQkJCQkJIFBHU1RBVF9TVEFUX1BFUk1BTkVOVF9GSUxFTkFNRSkpKTsKIAl9CiAKKwkv KiBMZXQgZWFjaCBzdGF0cyBraW5kIHJ1biBpdHMgY2xlYW51cCBjYWxsYmFjaywgaWYgaXQgcHJv dmlkZXMgb25lICovCisJZm9yIChQZ1N0YXRfS2luZCBraW5kID0gUEdTVEFUX0tJTkRfTUlOOyBr aW5kIDw9IFBHU1RBVF9LSU5EX01BWDsga2luZCsrKQorCXsKKwkJY29uc3QgUGdTdGF0X0tpbmRJ bmZvICpraW5kX2luZm8gPSBwZ3N0YXRfZ2V0X2tpbmRfaW5mbyhraW5kKTsKKworCQlpZiAoa2lu ZF9pbmZvICYmIGtpbmRfaW5mby0+ZW5kX2V4dHJhX3N0YXRzKQorCQkJa2luZF9pbmZvLT5lbmRf ZXh0cmFfc3RhdHMoU1RBVFNfRElTQ0FSRCk7CisJfQorCiAJLyoKIAkgKiBSZXNldCBzdGF0cyBj b250ZW50cy4gVGhpcyB3aWxsIHNldCByZXNldCB0aW1lc3RhbXBzIG9mIGZpeGVkLW51bWJlcmVk CiAJICogc3RhdHMgdG8gdGhlIGN1cnJlbnQgdGltZSAobm8gdmFyaWFibGUgc3RhdHMgZXhpc3Qp LgpAQCAtNjQ1LDYgKzY1NiwxMCBAQCBwZ3N0YXRfaW5pdGlhbGl6ZSh2b2lkKQogCiAJcGdzdGF0 X2F0dGFjaF9zaG1lbSgpOwogCisJLyogQ2hlY2sgYSBraW5kJ3MgZXh0cmEtZGF0YSBjYWxsYmFj ayBzZXR1cCAqLworCWZvciAoUGdTdGF0X0tpbmQga2luZCA9IFBHU1RBVF9LSU5EX0JVSUxUSU5f TUlOOyBraW5kIDw9IFBHU1RBVF9LSU5EX0JVSUxUSU5fTUFYOyBraW5kKyspCisJCXBnc3RhdF9j aGVja19leHRyYV9jYWxsYmFja3MoJnBnc3RhdF9raW5kX2J1aWx0aW5faW5mb3Nba2luZF0sIFBB TklDKTsKKwogCXBnc3RhdF9pbml0X3NuYXBzaG90X2ZpeGVkKCk7CiAKIAkvKiBCYWNrZW5kIGlu aXRpYWxpemF0aW9uIGNhbGxiYWNrcyAqLwpAQCAtMTQzMiw2ICsxNDQ3LDMyIEBAIHBnc3RhdF9p c19raW5kX3ZhbGlkKFBnU3RhdF9LaW5kIGtpbmQpCiAJcmV0dXJuIHBnc3RhdF9pc19raW5kX2J1 aWx0aW4oa2luZCkgfHwgcGdzdGF0X2lzX2tpbmRfY3VzdG9tKGtpbmQpOwogfQogCisvKgorICog VmFsaWRhdGUgdGhhdCBleHRyYSBzdGF0cyBjYWxsYmFja3MgYXJlIGFsbCBwcm92aWRlZCB0b2dl dGhlciBvciBub3QgYXQgYWxsLgorICogUmVwb3J0cyBlcnJvciBhdCBzcGVjaWZpZWQgbGV2ZWwg aWYgdmFsaWRhdGlvbiBmYWlscy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkCitwZ3N0YXRfY2hl Y2tfZXh0cmFfY2FsbGJhY2tzKGNvbnN0IFBnU3RhdF9LaW5kSW5mbyAqa2luZF9pbmZvLCBpbnQg ZWxldmVsKQoreworCWJvb2wJCWhhc19leHRyYTsKKworCWhhc19leHRyYSA9CisJCWtpbmRfaW5m by0+dG9fc2VyaWFsaXplZF9leHRyYV9zdGF0cyB8fAorCQlraW5kX2luZm8tPmZyb21fc2VyaWFs aXplZF9leHRyYV9zdGF0cyB8fAorCQlraW5kX2luZm8tPmVuZF9leHRyYV9zdGF0czsKKworCWlm IChoYXNfZXh0cmEgJiYKKwkJKCFraW5kX2luZm8tPnRvX3NlcmlhbGl6ZWRfZXh0cmFfc3RhdHMg fHwKKwkJICFraW5kX2luZm8tPmZyb21fc2VyaWFsaXplZF9leHRyYV9zdGF0cyB8fAorCQkgIWtp bmRfaW5mby0+ZW5kX2V4dHJhX3N0YXRzKSkKKwl7CisJCWVyZXBvcnQoZWxldmVsLAorCQkJCShl cnJtc2coImluY29tcGxldGUgc2VyaWFsaXphdGlvbiBjYWxsYmFja3MgZm9yIHN0YXRpc3RpY3Mg a2luZCBcIiVzXCIiLAorCQkJCQkJa2luZF9pbmZvLT5uYW1lKSwKKwkJCQkgZXJyZGV0YWlsKCJj YWxsYmFja3MgdG9fc2VyaWFsaXplZF9leHRyYV9zdGF0cywgZnJvbV9zZXJpYWxpemVkX2V4dHJh X3N0YXRzLCBhbmQgZW5kX2V4dHJhX3N0YXRzIG11c3QgYmUgcHJvdmlkZWQgdG9nZXRoZXIuIikp KTsKKwl9Cit9CisKIGNvbnN0IFBnU3RhdF9LaW5kSW5mbyAqCiBwZ3N0YXRfZ2V0X2tpbmRfaW5m byhQZ1N0YXRfS2luZCBraW5kKQogewpAQCAtMTUyNSw2ICsxNTY2LDkgQEAgcGdzdGF0X3JlZ2lz dGVyX2tpbmQoUGdTdGF0X0tpbmQga2luZCwgY29uc3QgUGdTdGF0X0tpbmRJbmZvICpraW5kX2lu Zm8pCiAJCQkJCSBlcnJkZXRhaWwoIkV4aXN0aW5nIGN1bXVsYXRpdmUgc3RhdGlzdGljcyB3aXRo IElEICV1IGhhcyB0aGUgc2FtZSBuYW1lLiIsIGV4aXN0aW5nX2tpbmQpKSk7CiAJfQogCisJLyog Q2hlY2sgYSBraW5kJ3MgZXh0cmEtZGF0YSBjYWxsYmFjayBzZXR1cCAqLworCXBnc3RhdF9jaGVj a19leHRyYV9jYWxsYmFja3Moa2luZF9pbmZvLCBFUlJPUik7CisKIAkvKiBSZWdpc3RlciBpdCAq LwogCXBnc3RhdF9raW5kX2N1c3RvbV9pbmZvc1tpZHhdID0ga2luZF9pbmZvOwogCWVyZXBvcnQo TE9HLApAQCAtMTcwMiw2ICsxNzQ2LDkgQEAgcGdzdGF0X3dyaXRlX3N0YXRzZmlsZSh2b2lkKQog CQlwZ3N0YXRfd3JpdGVfY2h1bmsoZnBvdXQsCiAJCQkJCQkgICBwZ3N0YXRfZ2V0X2VudHJ5X2Rh dGEocHMtPmtleS5raW5kLCBzaHN0YXRzKSwKIAkJCQkJCSAgIHBnc3RhdF9nZXRfZW50cnlfbGVu KHBzLT5rZXkua2luZCkpOworCisJCWlmIChraW5kX2luZm8tPnRvX3NlcmlhbGl6ZWRfZXh0cmFf c3RhdHMpCisJCQlraW5kX2luZm8tPnRvX3NlcmlhbGl6ZWRfZXh0cmFfc3RhdHMoJnBzLT5rZXks IHNoc3RhdHMsIGZwb3V0KTsKIAl9CiAJZHNoYXNoX3NlcV90ZXJtKCZoc3RhdCk7CiAKQEAgLTE3 MzQsNiArMTc4MSwxNSBAQCBwZ3N0YXRfd3JpdGVfc3RhdHNmaWxlKHZvaWQpCiAJCS8qIGR1cmFi bGVfcmVuYW1lIGFscmVhZHkgZW1pdHRlZCBsb2cgbWVzc2FnZSAqLwogCQl1bmxpbmsodG1wZmls ZSk7CiAJfQorCisJLyogTm93LCBhbGxvdyBraW5kcyB0byBmaW5hbGl6ZSB0aGUgd3JpdGVzIGZv ciB0aGUgZXh0cmEgZmlsZXMgKi8KKwlmb3IgKFBnU3RhdF9LaW5kIGtpbmQgPSBQR1NUQVRfS0lO RF9NSU47IGtpbmQgPD0gUEdTVEFUX0tJTkRfTUFYOyBraW5kKyspCisJeworCQljb25zdCBQZ1N0 YXRfS2luZEluZm8gKmtpbmRfaW5mbyA9IHBnc3RhdF9nZXRfa2luZF9pbmZvKGtpbmQpOworCisJ CWlmIChraW5kX2luZm8gJiYga2luZF9pbmZvLT5lbmRfZXh0cmFfc3RhdHMpCisJCQlraW5kX2lu Zm8tPmVuZF9leHRyYV9zdGF0cyhTVEFUU19XUklURSk7CisJfQogfQogCiAvKiBoZWxwZXIgZm9y IHBnc3RhdF9yZWFkX3N0YXRzZmlsZSgpICovCkBAIC0xODcxLDYgKzE5MjcsNyBAQCBwZ3N0YXRf cmVhZF9zdGF0c2ZpbGUodm9pZCkKIAkJCQkJUGdTdGF0X0hhc2hLZXkga2V5OwogCQkJCQlQZ1N0 YXRTaGFyZWRfSGFzaEVudHJ5ICpwOwogCQkJCQlQZ1N0YXRTaGFyZWRfQ29tbW9uICpoZWFkZXI7 CisJCQkJCWNvbnN0IFBnU3RhdF9LaW5kSW5mbyAqa2luZF9pbmZvID0gTlVMTDsKIAogCQkJCQlD SEVDS19GT1JfSU5URVJSVVBUUygpOwogCkBAIC0xODkxLDcgKzE5NDgsOCBAQCBwZ3N0YXRfcmVh ZF9zdGF0c2ZpbGUodm9pZCkKIAkJCQkJCQlnb3RvIGVycm9yOwogCQkJCQkJfQogCi0JCQkJCQlp ZiAoIXBnc3RhdF9nZXRfa2luZF9pbmZvKGtleS5raW5kKSkKKwkJCQkJCWtpbmRfaW5mbyA9IHBn c3RhdF9nZXRfa2luZF9pbmZvKGtleS5raW5kKTsKKwkJCQkJCWlmICgha2luZF9pbmZvKQogCQkJ CQkJewogCQkJCQkJCWVsb2coV0FSTklORywgImNvdWxkIG5vdCBmaW5kIGluZm9ybWF0aW9uIG9m IGtpbmQgZm9yIGVudHJ5ICV1LyV1LyUiIFBSSXU2NCAiIG9mIHR5cGUgJWMiLAogCQkJCQkJCQkg a2V5LmtpbmQsIGtleS5kYm9pZCwKQEAgLTE5MDIsNyArMTk2MCw2IEBAIHBnc3RhdF9yZWFkX3N0 YXRzZmlsZSh2b2lkKQogCQkJCQllbHNlCiAJCQkJCXsKIAkJCQkJCS8qIHN0YXRzIGVudHJ5IGlk ZW50aWZpZWQgYnkgbmFtZSBvbiBkaXNrIChlLmcuIHNsb3RzKSAqLwotCQkJCQkJY29uc3QgUGdT dGF0X0tpbmRJbmZvICpraW5kX2luZm8gPSBOVUxMOwogCQkJCQkJUGdTdGF0X0tpbmQga2luZDsK IAkJCQkJCU5hbWVEYXRhCW5hbWU7CiAKQEAgLTE5OTYsNiArMjA1MywxNiBAQCBwZ3N0YXRfcmVh ZF9zdGF0c2ZpbGUodm9pZCkKIAkJCQkJCWdvdG8gZXJyb3I7CiAJCQkJCX0KIAorCQkJCQlpZiAo a2luZF9pbmZvLT5mcm9tX3NlcmlhbGl6ZWRfZXh0cmFfc3RhdHMpCisJCQkJCXsKKwkJCQkJCWlm ICgha2luZF9pbmZvLT5mcm9tX3NlcmlhbGl6ZWRfZXh0cmFfc3RhdHMoJmtleSwgaGVhZGVyLCBm cGluKSkKKwkJCQkJCXsKKwkJCQkJCQllbG9nKFdBUk5JTkcsICJjb3VsZCBub3QgcmVhZCBleHRy YSBzdGF0cyBmb3IgZW50cnkgJXUvJXUvJSIgUFJJdTY0LAorCQkJCQkJCQkga2V5LmtpbmQsIGtl eS5kYm9pZCwga2V5Lm9iamlkKTsKKwkJCQkJCQlnb3RvIGVycm9yOworCQkJCQkJfQorCQkJCQl9 CisKIAkJCQkJYnJlYWs7CiAJCQkJfQogCQkJY2FzZSBQR1NUQVRfRklMRV9FTlRSWV9FTkQ6CkBA IC0yMDE5LDExICsyMDg2LDIxIEBAIHBnc3RhdF9yZWFkX3N0YXRzZmlsZSh2b2lkKQogCX0KIAog ZG9uZToKKwkvKiBGaXJzdCwgY2xlYW51cCB0aGUgbWFpbiBzdGF0cyBmaWxlLCBQR1NUQVRfU1RB VF9QRVJNQU5FTlRfRklMRU5BTUUgKi8KIAlGcmVlRmlsZShmcGluKTsKIAogCWVsb2coREVCVUcy LCAicmVtb3ZpbmcgcGVybWFuZW50IHN0YXRzIGZpbGUgXCIlc1wiIiwgc3RhdGZpbGUpOwogCXVu bGluayhzdGF0ZmlsZSk7CiAKKwkvKiBMZXQgZWFjaCBzdGF0cyBraW5kIHJ1biBpdHMgY2xlYW51 cCBjYWxsYmFjaywgaWYgaXQgcHJvdmlkZXMgb25lICovCisJZm9yIChQZ1N0YXRfS2luZCBraW5k ID0gUEdTVEFUX0tJTkRfTUlOOyBraW5kIDw9IFBHU1RBVF9LSU5EX01BWDsga2luZCsrKQorCXsK KwkJY29uc3QgUGdTdGF0X0tpbmRJbmZvICpraW5kX2luZm8gPSBwZ3N0YXRfZ2V0X2tpbmRfaW5m byhraW5kKTsKKworCQlpZiAoa2luZF9pbmZvICYmIGtpbmRfaW5mby0+ZW5kX2V4dHJhX3N0YXRz KQorCQkJa2luZF9pbmZvLT5lbmRfZXh0cmFfc3RhdHMoU1RBVFNfUkVBRCk7CisJfQorCiAJcmV0 dXJuOwogCiBlcnJvcjoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL3Bnc3RhdF9pbnRl cm5hbC5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvcGdzdGF0X2ludGVybmFsLmgKaW5kZXggY2ExYmE2 NDIwY2EuLjQ4YjQwODE2NTcwIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9wZ3N0YXRf aW50ZXJuYWwuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9wZ3N0YXRfaW50ZXJuYWwuaApAQCAt NjMsNiArNjMsMjAgQEAgdHlwZWRlZiBzdHJ1Y3QgUGdTdGF0X0hhc2hLZXkKIAkJCQkJCQkJICog aWRlbnRpZmllci4gKi8KIH0gUGdTdGF0X0hhc2hLZXk7CiAKKy8qCisgKiBUcmFja3MgaWYgdGhl IHN0YXRzIGZpbGUgaXMgYmVpbmcgcmVhZCwgd3JpdHRlbiBvciBkaXNjYXJkZWQuCisgKgorICog VGhlc2Ugc3RhdGVzIGFsbG93IHBsdWdpbnMgdGhhdCBjcmVhdGUgZXh0cmEgc3RhdGlzdGljcyBm aWxlcworICogdG8gZGV0ZXJtaW5lIHRoZSBjdXJyZW50IG9wZXJhdGlvbiBhbmQgcGVyZm9ybSBh bnkgbmVjZXNzYXJ5CisgKiBmaWxlIGNsZWFudXAuCisgKi8KK3R5cGVkZWYgZW51bSBQZ1N0YXRf U3RhdHNGaWxlT3AKK3sKKwlTVEFUU19XUklURSwKKwlTVEFUU19SRUFELAorCVNUQVRTX0RJU0NB UkQsCit9CQkJUGdTdGF0X1N0YXRzRmlsZU9wOworCiAvKgogICogUGdTdGF0X0hhc2hLZXkgc2hv dWxkIG5vdCBoYXZlIGFueSBwYWRkaW5nLiAgQ2hlY2tpbmcgdGhhdCB0aGUgc3RydWN0dXJlCiAg KiBzaXplIG1hdGNoZXMgd2l0aCB0aGUgc3VtIG9mIGVhY2ggZmllbGQgaXMgYSBjaGVjayBzaW1w bGUgZW5vdWdoIHRvCkBAIC0zMDMsNiArMzE3LDI5IEBAIHR5cGVkZWYgc3RydWN0IFBnU3RhdF9L aW5kSW5mbwogCQkJCQkJCQkJICAgY29uc3QgUGdTdGF0U2hhcmVkX0NvbW1vbiAqaGVhZGVyLCBO YW1lRGF0YSAqbmFtZSk7CiAJYm9vbAkJKCpmcm9tX3NlcmlhbGl6ZWRfbmFtZSkgKGNvbnN0IE5h bWVEYXRhICpuYW1lLCBQZ1N0YXRfSGFzaEtleSAqa2V5KTsKIAorCS8qCisJICogT3B0aW9uYWwg Y2FsbGJhY2tzIGZvciBraW5kcyB0aGF0IHdyaXRlIGFkZGl0aW9uYWwgcGVyLWVudHJ5IGRhdGEg dG8KKwkgKiB0aGUgc3RhdHMgZmlsZS4gIElmIGFueSBvZiB0aGVzZSBjYWxsYmFja3MgYXJlIHBy b3ZpZGVkLCBhbGwgdGhyZWUgbXVzdAorCSAqIGJlIHByb3ZpZGVkIHRvIGVuc3VyZSB0aGF0IHRo ZSByZWFkZXIgY29uc3VtZXMgZXhhY3RseSB0aGUgZGF0YSB3cml0dGVuCisJICogYnkgdGhlIHdy aXRlci4KKwkgKgorCSAqIHRvX3NlcmlhbGl6ZWRfZXh0cmFfc3RhdHM6IHdyaXRlIGV4dHJhIGRh dGEgZm9yIGFuIGVudHJ5LgorCSAqCisJICogZnJvbV9zZXJpYWxpemVkX2V4dHJhX3N0YXRzOiBy ZWFkIHRoZSBleHRyYSBkYXRhIGZvciBhbiBlbnRyeS4gUmV0dXJucworCSAqIHRydWUgb24gc3Vj Y2VzcywgZmFsc2Ugb24gcmVhZCBlcnJvci4KKwkgKgorCSAqIGVuZF9leHRyYV9zdGF0czogaW52 b2tlZCBvbmNlIHBlciBvcGVyYXRpb24gKHJlYWQsIHdyaXRlLCBkaXNjYXJkKQorCSAqIGFmdGVy IGFsbCBlbnRyaWVzIG9mIHRoaXMga2luZCBoYXZlIGJlZW4gcHJvY2Vzc2VkLgorCSAqCisJICog Tm90ZTogc3RhdGZpbGUgaXMgYSBwb2ludGVyIHRvIHRoZSBtYWluIHN0YXRzIGZpbGUsCisJICog UEdTVEFUX1NUQVRfUEVSTUFORU5UX0ZJTEVOQU1FLgorCSAqLworCXZvaWQJCSgqdG9fc2VyaWFs aXplZF9leHRyYV9zdGF0cykgKGNvbnN0IFBnU3RhdF9IYXNoS2V5ICprZXksCisJCQkJCQkJCQkJ CSAgY29uc3QgUGdTdGF0U2hhcmVkX0NvbW1vbiAqaGVhZGVyLCBGSUxFICpzdGF0ZmlsZSk7CisJ Ym9vbAkJKCpmcm9tX3NlcmlhbGl6ZWRfZXh0cmFfc3RhdHMpIChjb25zdCBQZ1N0YXRfSGFzaEtl eSAqa2V5LAorCQkJCQkJCQkJCQkJY29uc3QgUGdTdGF0U2hhcmVkX0NvbW1vbiAqaGVhZGVyLCBG SUxFICpzdGF0ZmlsZSk7CisJdm9pZAkJKCplbmRfZXh0cmFfc3RhdHMpIChQZ1N0YXRfU3RhdHNG aWxlT3Agc3RhdHVzKTsKKwogCS8qCiAJICogRm9yIGZpeGVkLW51bWJlcmVkIHN0YXRpc3RpY3M6 IEluaXRpYWxpemUgc2hhcmVkIG1lbW9yeSBzdGF0ZS4KIAkgKgpkaWZmIC0tZ2l0IGEvc3JjL3Rl c3QvbW9kdWxlcy90ZXN0X2N1c3RvbV9zdGF0cy90LzAwMV9jdXN0b21fc3RhdHMucGwgYi9zcmMv dGVzdC9tb2R1bGVzL3Rlc3RfY3VzdG9tX3N0YXRzL3QvMDAxX2N1c3RvbV9zdGF0cy5wbAppbmRl eCBjNGZjZWI3ZDI2Ny4uNTVhODk1NmEwZDkgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMv dGVzdF9jdXN0b21fc3RhdHMvdC8wMDFfY3VzdG9tX3N0YXRzLnBsCisrKyBiL3NyYy90ZXN0L21v ZHVsZXMvdGVzdF9jdXN0b21fc3RhdHMvdC8wMDFfY3VzdG9tX3N0YXRzLnBsCkBAIC0yNiwxMCAr MjYsMTAgQEAgJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxKENSRUFURSBFWFRFTlNJT04g dGVzdF9jdXN0b21fdmFyX3N0YXRzKSk7CiAkbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHEo Q1JFQVRFIEVYVEVOU0lPTiB0ZXN0X2N1c3RvbV9maXhlZF9zdGF0cykpOwogCiAjIENyZWF0ZSB2 YXJpYWJsZSBzdGF0aXN0aWNzIGVudHJpZXMKLSRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg cShzZWxlY3QgcGdzdGF0X2NyZWF0ZV9jdXN0b21fdmFyX3N0YXRzKCdlbnRyeTEnKSkpOwotJG5v ZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxKHNlbGVjdCBwZ3N0YXRfY3JlYXRlX2N1c3RvbV92 YXJfc3RhdHMoJ2VudHJ5MicpKSk7Ci0kbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHEoc2Vs ZWN0IHBnc3RhdF9jcmVhdGVfY3VzdG9tX3Zhcl9zdGF0cygnZW50cnkzJykpKTsKLSRub2RlLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgcShzZWxlY3QgcGdzdGF0X2NyZWF0ZV9jdXN0b21fdmFyX3N0 YXRzKCdlbnRyeTQnKSkpOworJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxKHNlbGVjdCBw Z3N0YXRfY3JlYXRlX2N1c3RvbV92YXJfc3RhdHMoJ2VudHJ5MScsICdUZXN0IGVudHJ5IDEnKSkp OworJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxKHNlbGVjdCBwZ3N0YXRfY3JlYXRlX2N1 c3RvbV92YXJfc3RhdHMoJ2VudHJ5MicsICdUZXN0IGVudHJ5IDInKSkpOworJG5vZGUtPnNhZmVf cHNxbCgncG9zdGdyZXMnLCBxKHNlbGVjdCBwZ3N0YXRfY3JlYXRlX2N1c3RvbV92YXJfc3RhdHMo J2VudHJ5MycsICdUZXN0IGVudHJ5IDMnKSkpOworJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMn LCBxKHNlbGVjdCBwZ3N0YXRfY3JlYXRlX2N1c3RvbV92YXJfc3RhdHMoJ2VudHJ5NCcsICdUZXN0 IGVudHJ5IDQnKSkpOwogCiAjIFVwZGF0ZSBjb3VudGVyczogZW50cnkxPTIsIGVudHJ5Mj0zLCBl bnRyeTM9MiwgZW50cnk0PTMsIGZpeGVkPTMKICRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg cShzZWxlY3QgcGdzdGF0X3VwZGF0ZV9jdXN0b21fdmFyX3N0YXRzKCdlbnRyeTEnKSkpOwpAQCAt NDgsMTYgKzQ4LDE2IEBAICRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcShzZWxlY3QgcGdz dGF0X3VwZGF0ZV9jdXN0b21fZml4ZWRfc3RhdHMoKSkpOwogCiAjIFRlc3QgdmFyaWFibGUgc3Rh dGlzdGljcyByZXBvcnRpbmcKIG15ICRyZXN1bHQgPSAkbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsIHEoc2VsZWN0ICogZnJvbSBwZ3N0YXRfcmVwb3J0X2N1c3RvbV92YXJfc3RhdHMoJ2VudHJ5 MScpKSk7Ci1pcygkcmVzdWx0LCAiZW50cnkxfDIiLCAidmFyIHN0YXRzIGVudHJ5MSByZXBvcnRz IGNvcnJlY3QgY2FsbHMiKTsKK2lzKCRyZXN1bHQsICJlbnRyeTF8MnxUZXN0IGVudHJ5IDEiLCAi dmFyIHN0YXRzIGVudHJ5MSByZXBvcnRzIGNvcnJlY3QgY2FsbHMiKTsKIAogJHJlc3VsdCA9ICRu b2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcShzZWxlY3QgKiBmcm9tIHBnc3RhdF9yZXBvcnRf Y3VzdG9tX3Zhcl9zdGF0cygnZW50cnkyJykpKTsKLWlzKCRyZXN1bHQsICJlbnRyeTJ8MyIsICJ2 YXIgc3RhdHMgZW50cnkyIHJlcG9ydHMgY29ycmVjdCBjYWxscyIpOworaXMoJHJlc3VsdCwgImVu dHJ5MnwzfFRlc3QgZW50cnkgMiIsICJ2YXIgc3RhdHMgZW50cnkyIHJlcG9ydHMgY29ycmVjdCBj YWxscyIpOwogCiAkcmVzdWx0ID0gJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxKHNlbGVj dCAqIGZyb20gcGdzdGF0X3JlcG9ydF9jdXN0b21fdmFyX3N0YXRzKCdlbnRyeTMnKSkpOwotaXMo JHJlc3VsdCwgImVudHJ5M3wyIiwgInZhciBzdGF0cyBlbnRyeTMgcmVwb3J0cyBjb3JyZWN0IGNh bGxzIik7CitpcygkcmVzdWx0LCAiZW50cnkzfDJ8VGVzdCBlbnRyeSAzIiwgInZhciBzdGF0cyBl bnRyeTMgcmVwb3J0cyBjb3JyZWN0IGNhbGxzIik7CiAKICRyZXN1bHQgPSAkbm9kZS0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsIHEoc2VsZWN0ICogZnJvbSBwZ3N0YXRfcmVwb3J0X2N1c3RvbV92YXJf c3RhdHMoJ2VudHJ5NCcpKSk7Ci1pcygkcmVzdWx0LCAiZW50cnk0fDMiLCAidmFyIHN0YXRzIGVu dHJ5NCByZXBvcnRzIGNvcnJlY3QgY2FsbHMiKTsKK2lzKCRyZXN1bHQsICJlbnRyeTR8M3xUZXN0 IGVudHJ5IDQiLCAidmFyIHN0YXRzIGVudHJ5NCByZXBvcnRzIGNvcnJlY3QgY2FsbHMiKTsKIAog JHJlc3VsdCA9ICRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcShzZWxlY3QgKiBmcm9tIHBn c3RhdF9yZXBvcnRfY3VzdG9tX2ZpeGVkX3N0YXRzKCkpKTsKIGlzKCRyZXN1bHQsICIzfCIsICJm aXhlZCBzdGF0cyByZXBvcnRzIGNvcnJlY3QgY2FsbHMiKTsKQEAgLTc2LDEwICs3NiwxMCBAQCAk bm9kZS0+c3RvcCgpOwogJG5vZGUtPnN0YXJ0KCk7CiAKICRyZXN1bHQgPSAkbm9kZS0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsIHEoc2VsZWN0ICogZnJvbSBwZ3N0YXRfcmVwb3J0X2N1c3RvbV92YXJf c3RhdHMoJ2VudHJ5MScpKSk7Ci1pcygkcmVzdWx0LCAiZW50cnkxfDIiLCAidmFyIHN0YXRzIGVu dHJ5MSBwZXJzaXN0cyBhZnRlciBjbGVhbiByZXN0YXJ0Iik7CitpcygkcmVzdWx0LCAiZW50cnkx fDJ8VGVzdCBlbnRyeSAxIiwgInZhciBzdGF0cyBlbnRyeTEgcGVyc2lzdHMgYWZ0ZXIgY2xlYW4g cmVzdGFydCIpOwogCiAkcmVzdWx0ID0gJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxKHNl bGVjdCAqIGZyb20gcGdzdGF0X3JlcG9ydF9jdXN0b21fdmFyX3N0YXRzKCdlbnRyeTInKSkpOwot aXMoJHJlc3VsdCwgImVudHJ5MnwzIiwgInZhciBzdGF0cyBlbnRyeTIgcGVyc2lzdHMgYWZ0ZXIg Y2xlYW4gcmVzdGFydCIpOworaXMoJHJlc3VsdCwgImVudHJ5MnwzfFRlc3QgZW50cnkgMiIsICJ2 YXIgc3RhdHMgZW50cnkyIHBlcnNpc3RzIGFmdGVyIGNsZWFuIHJlc3RhcnQiKTsKIAogJHJlc3Vs dCA9ICRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcShzZWxlY3QgKiBmcm9tIHBnc3RhdF9y ZXBvcnRfY3VzdG9tX2ZpeGVkX3N0YXRzKCkpKTsKIGlzKCRyZXN1bHQsICIzfCIsICJmaXhlZCBz dGF0cyBwZXJzaXN0cyBhZnRlciBjbGVhbiByZXN0YXJ0Iik7CmRpZmYgLS1naXQgYS9zcmMvdGVz dC9tb2R1bGVzL3Rlc3RfY3VzdG9tX3N0YXRzL3Rlc3RfY3VzdG9tX3Zhcl9zdGF0cy0tMS4wLnNx bCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9jdXN0b21fc3RhdHMvdGVzdF9jdXN0b21fdmFyX3N0 YXRzLS0xLjAuc3FsCmluZGV4IDg0YWUyYmY1NjY2Li5jNTA5NTY3ZGU3ZCAxMDA2NDQKLS0tIGEv c3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2N1c3RvbV9zdGF0cy90ZXN0X2N1c3RvbV92YXJfc3RhdHMt LTEuMC5zcWwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2N1c3RvbV9zdGF0cy90ZXN0X2N1 c3RvbV92YXJfc3RhdHMtLTEuMC5zcWwKQEAgLTMsNyArMyw3IEBACiAtLSBjb21wbGFpbiBpZiBz Y3JpcHQgaXMgc291cmNlZCBpbiBwc3FsLCByYXRoZXIgdGhhbiB2aWEgQ1JFQVRFIEVYVEVOU0lP TgogXGVjaG8gVXNlICJDUkVBVEUgRVhURU5TSU9OIHRlc3RfY3VzdG9tX3Zhcl9zdGF0cyIgdG8g bG9hZCB0aGlzIGZpbGUuIFxxdWl0CiAKLUNSRUFURSBGVU5DVElPTiBwZ3N0YXRfY3JlYXRlX2N1 c3RvbV92YXJfc3RhdHMoSU4gbmFtZSBURVhUKQorQ1JFQVRFIEZVTkNUSU9OIHBnc3RhdF9jcmVh dGVfY3VzdG9tX3Zhcl9zdGF0cyhJTiBuYW1lIFRFWFQsIGluIGRlc2NyaXB0aW9uIFRFWFQpCiBS RVRVUk5TIHZvaWQKIEFTICdNT0RVTEVfUEFUSE5BTUUnLCAncGdzdGF0X2NyZWF0ZV9jdXN0b21f dmFyX3N0YXRzJwogTEFOR1VBR0UgQyBTVFJJQ1QgUEFSQUxMRUwgVU5TQUZFOwpAQCAtMTksNyAr MTksOSBAQCBBUyAnTU9EVUxFX1BBVEhOQU1FJywgJ3Bnc3RhdF9kcm9wX2N1c3RvbV92YXJfc3Rh dHMnCiBMQU5HVUFHRSBDIFNUUklDVCBQQVJBTExFTCBVTlNBRkU7CiAKIAotQ1JFQVRFIEZVTkNU SU9OIHBnc3RhdF9yZXBvcnRfY3VzdG9tX3Zhcl9zdGF0cyhJTk9VVCBuYW1lIFRFWFQsIE9VVCBj YWxscyBCSUdJTlQpCitDUkVBVEUgRlVOQ1RJT04gcGdzdGF0X3JlcG9ydF9jdXN0b21fdmFyX3N0 YXRzKElOT1VUIG5hbWUgVEVYVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgT1VUIGNhbGxzIEJJR0lOVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgT1VUIGRlc2NyaXB0aW9uIFRFWFQpCiBSRVRVUk5TIFNFVE9G IHJlY29yZAogQVMgJ01PRFVMRV9QQVRITkFNRScsICdwZ3N0YXRfcmVwb3J0X2N1c3RvbV92YXJf c3RhdHMnCiBMQU5HVUFHRSBDIFNUUklDVCBQQVJBTExFTCBVTlNBRkU7CmRpZmYgLS1naXQgYS9z cmMvdGVzdC9tb2R1bGVzL3Rlc3RfY3VzdG9tX3N0YXRzL3Rlc3RfY3VzdG9tX3Zhcl9zdGF0cy5j IGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2N1c3RvbV9zdGF0cy90ZXN0X2N1c3RvbV92YXJfc3Rh dHMuYwppbmRleCA2MzIwZWFmMmNhZS4uNmQ3NTU5MDRkZjUgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0 L21vZHVsZXMvdGVzdF9jdXN0b21fc3RhdHMvdGVzdF9jdXN0b21fdmFyX3N0YXRzLmMKKysrIGIv c3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2N1c3RvbV9zdGF0cy90ZXN0X2N1c3RvbV92YXJfc3RhdHMu YwpAQCAtMTQsNiArMTQsNyBAQAogCiAjaW5jbHVkZSAiY29tbW9uL2hhc2hmbi5oIgogI2luY2x1 ZGUgImZ1bmNhcGkuaCIKKyNpbmNsdWRlICJzdG9yYWdlL2RzbV9yZWdpc3RyeS5oIgogI2luY2x1 ZGUgInV0aWxzL2J1aWx0aW5zLmgiCiAjaW5jbHVkZSAidXRpbHMvcGdzdGF0X2ludGVybmFsLmgi CiAKQEAgLTMzLDYgKzM0LDkgQEAgUEdfTU9EVUxFX01BR0lDX0VYVCgKICAqLwogI2RlZmluZSBQ R1NUQVRfS0lORF9URVNUX0NVU1RPTV9WQVJfU1RBVFMgMjUKIAorLyogRmlsZSBwYXRocyBmb3Ig ZXh0cmEgc3RhdGlzdGljcyBkYXRhIHNlcmlhbGl6YXRpb24gKi8KKyNkZWZpbmUgUEdTVEFUX0NV U1RPTV9FWFRSQV9EQVRBX0RFU0MgInBnX3N0YXQvdGVzdF9jdXN0b21fdmFyX3N0YXRzX2Rlc2Mu c3RhdHMiCisKIC8qCiAgKiBIYXNoIHN0YXRpc3RpYyBuYW1lIHRvIGdlbmVyYXRlIGVudHJ5IGlu ZGV4IGZvciBwZ3N0YXQgbG9va3VwLgogICovCkBAIC01NCwxNSArNTgsNDEgQEAgdHlwZWRlZiBz dHJ1Y3QgUGdTdGF0U2hhcmVkX0N1c3RvbUVudHJ5CiB7CiAJUGdTdGF0U2hhcmVkX0NvbW1vbiBo ZWFkZXI7IC8qIHN0YW5kYXJkIHBnc3RhdCBlbnRyeSBoZWFkZXIgKi8KIAlQZ1N0YXRfU3RhdEN1 c3RvbUVudHJ5IHN0YXRzOwkvKiBjdXN0b20gc3RhdGlzdGljcyBkYXRhICovCisJZHNhX3BvaW50 ZXIgZGVzY3JpcHRpb247CS8qIGV4dHJhIHN0YXRpc3RpY3MgZGF0YSAqLwogfQkJCVBnU3RhdFNo YXJlZF9DdXN0b21FbnRyeTsKIAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogR2xvYmFsIFZhcmlh YmxlcworICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKy8qIEZpbGUgaGFuZGxlIGZvciBleHRy YSBzdGF0aXN0aWNzIGRhdGEgc2VyaWFsaXphdGlvbiAqLworc3RhdGljIEZJTEUgKmZkX2Rlc2Ny aXB0aW9uID0gTlVMTDsKKworLyogQ3VycmVudCB3cml0ZSBvZmZzZXQgaW4gZmRfZGVzY3JpcHRp b24gZmlsZSAqLworc3RhdGljIGxvbmcgZmRfZGVzY3JpcHRpb25fb2Zmc2V0ID0gMDsKKworLyog RFNBIGFyZWEgZm9yIHN0b3JpbmcgdmFyaWFibGUtbGVuZ3RoIGRlc2NyaXB0aW9uIHN0cmluZ3Mg Ki8KK2RzYV9hcmVhICAgKmN1c3RvbV9zdGF0c19kZXNjcmlwdGlvbl9kc2EgPSBOVUxMOworCiAv Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBGdW5jdGlvbiBwcm90b3R5cGVzCiAgKi0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCiAgKi8KIAogLyogRmx1c2ggY2FsbGJhY2s6IG1lcmdlIHBlbmRpbmcgc3RhdHMgaW50 byBzaGFyZWQgbWVtb3J5ICovCi1zdGF0aWMgYm9vbCBwZ3N0YXRfY3VzdG9tX2VudHJ5X2ZsdXNo X2NiKFBnU3RhdF9FbnRyeVJlZiAqZW50cnlfcmVmLCBib29sIG5vd2FpdCk7CitzdGF0aWMgYm9v bCBwZ3N0YXRfY3VzdG9tX3Zhcl9lbnRyeV9mbHVzaF9jYihQZ1N0YXRfRW50cnlSZWYgKmVudHJ5 X3JlZiwgYm9vbCBub3dhaXQpOworCisvKiBTZXJpYWxpemF0aW9uIGNhbGxiYWNrOiBzZXJpYWxp emUgZXh0cmEgc3RhdGlzdGljcyBkYXRhICovCitzdGF0aWMgdm9pZCBwZ3N0YXRfY3VzdG9tX3Zh cl9zdGF0c19zZXJpYWxpemUoY29uc3QgUGdTdGF0X0hhc2hLZXkgKmtleSwKKwkJCQkJCQkJCQkJ ICBjb25zdCBQZ1N0YXRTaGFyZWRfQ29tbW9uICpoZWFkZXIsIEZJTEUgKnN0YXRmaWxlKTsKKwor LyogRGVzZXJpYWxpemF0aW9uIGNhbGxiYWNrOiBkZXNlcmlhbGl6ZSBleHRyYSBzdGF0aXN0aWNz IGRhdGEgKi8KK3N0YXRpYyBib29sIHBnc3RhdF9jdXN0b21fdmFyX3N0YXRzX2Rlc2VyaWFsaXpl KGNvbnN0IFBnU3RhdF9IYXNoS2V5ICprZXksCisJCQkJCQkJCQkJCQljb25zdCBQZ1N0YXRTaGFy ZWRfQ29tbW9uICpoZWFkZXIsIEZJTEUgKnN0YXRmaWxlKTsKKworLyogQ2xlYW51cCBjYWxsYmFj azogZW5kIG9mIHN0YXRpc3RpY3MgZmlsZSBvcGVyYXRpb25zICovCitzdGF0aWMgdm9pZCBwZ3N0 YXRfY3VzdG9tX3Zhcl9zdGF0c19maWxlX2NsZWFudXAoUGdTdGF0X1N0YXRzRmlsZU9wIHN0YXR1 cyk7CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIEN1c3RvbSBraW5kIGNvbmZpZ3VyYXRpb24K QEAgLTc5LDcgKzEwOSwxMCBAQCBzdGF0aWMgY29uc3QgUGdTdGF0X0tpbmRJbmZvIGN1c3RvbV9z dGF0cyA9IHsKIAkuc2hhcmVkX2RhdGFfb2ZmID0gb2Zmc2V0b2YoUGdTdGF0U2hhcmVkX0N1c3Rv bUVudHJ5LCBzdGF0cyksCiAJLnNoYXJlZF9kYXRhX2xlbiA9IHNpemVvZigoKFBnU3RhdFNoYXJl ZF9DdXN0b21FbnRyeSAqKSAwKS0+c3RhdHMpLAogCS5wZW5kaW5nX3NpemUgPSBzaXplb2YoUGdT dGF0X1N0YXRDdXN0b21FbnRyeSksCi0JLmZsdXNoX3BlbmRpbmdfY2IgPSBwZ3N0YXRfY3VzdG9t X2VudHJ5X2ZsdXNoX2NiLAorCS5mbHVzaF9wZW5kaW5nX2NiID0gcGdzdGF0X2N1c3RvbV92YXJf ZW50cnlfZmx1c2hfY2IsCisJLnRvX3NlcmlhbGl6ZWRfZXh0cmFfc3RhdHMgPSBwZ3N0YXRfY3Vz dG9tX3Zhcl9zdGF0c19zZXJpYWxpemUsCisJLmZyb21fc2VyaWFsaXplZF9leHRyYV9zdGF0cyA9 IHBnc3RhdF9jdXN0b21fdmFyX3N0YXRzX2Rlc2VyaWFsaXplLAorCS5lbmRfZXh0cmFfc3RhdHMg PSBwZ3N0YXRfY3VzdG9tX3Zhcl9zdGF0c19maWxlX2NsZWFudXAsCiB9OwogCiAvKi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCkBAIC0xMTMsNyArMTQ2LDcgQEAgX1BHX2luaXQodm9pZCkKICAqIFJldHVybnMg ZmFsc2Ugb25seSBpZiBub3dhaXQ9dHJ1ZSBhbmQgbG9jayBhY3F1aXNpdGlvbiBmYWlscy4KICAq Lwogc3RhdGljIGJvb2wKLXBnc3RhdF9jdXN0b21fZW50cnlfZmx1c2hfY2IoUGdTdGF0X0VudHJ5 UmVmICplbnRyeV9yZWYsIGJvb2wgbm93YWl0KQorcGdzdGF0X2N1c3RvbV92YXJfZW50cnlfZmx1 c2hfY2IoUGdTdGF0X0VudHJ5UmVmICplbnRyeV9yZWYsIGJvb2wgbm93YWl0KQogewogCVBnU3Rh dF9TdGF0Q3VzdG9tRW50cnkgKnBlbmRpbmdfZW50cnk7CiAJUGdTdGF0U2hhcmVkX0N1c3RvbUVu dHJ5ICpzaGFyZWRfZW50cnk7CkBAIC0xMzIsNiArMTY1LDIzNCBAQCBwZ3N0YXRfY3VzdG9tX2Vu dHJ5X2ZsdXNoX2NiKFBnU3RhdF9FbnRyeVJlZiAqZW50cnlfcmVmLCBib29sIG5vd2FpdCkKIAly ZXR1cm4gdHJ1ZTsKIH0KIAorLyoKKyAqIHBnc3RhdF9jdXN0b21fdmFyX3N0YXRzX3NlcmlhbGl6 ZSgpIC0KKyAqCisgKiBTZXJpYWxpemUgZXh0cmEgZGF0YSAoZGVzY3JpcHRpb25zKSBmb3IgY3Vz dG9tIHN0YXRpc3RpY3MgZW50cmllcyB0bworICogdGhlIHN0YXRpc3RpY3MgZmlsZS4gQ2FsbGVk IGR1cmluZyBzdGF0aXN0aWNzIGZpbGUgd3JpdGluZyB0byBwcmVzZXJ2ZQorICogZGVzY3JpcHRp b24gc3RyaW5ncyBhY3Jvc3MgcmVzdGFydHMuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3N0YXRfY3Vz dG9tX3Zhcl9zdGF0c19zZXJpYWxpemUoY29uc3QgUGdTdGF0X0hhc2hLZXkgKmtleSwKKwkJCQkJ CQkJICBjb25zdCBQZ1N0YXRTaGFyZWRfQ29tbW9uICpoZWFkZXIsIEZJTEUgKnN0YXRmaWxlKQor eworCWNoYXIJICAgKmRlc2NyaXB0aW9uOworCXNpemVfdAkJbGVuOworCWxvbmcJCW9mZnNldDsK KwlQZ1N0YXRTaGFyZWRfQ3VzdG9tRW50cnkgKmVudHJ5ID0gKFBnU3RhdFNoYXJlZF9DdXN0b21F bnRyeSAqKSBoZWFkZXI7CisJYm9vbAkJZm91bmQ7CisKKwlpZiAoIWN1c3RvbV9zdGF0c19kZXNj cmlwdGlvbl9kc2EpCisJCWN1c3RvbV9zdGF0c19kZXNjcmlwdGlvbl9kc2EgPSBHZXROYW1lZERT QSgicGdzdGF0X2N1c3RvbV9zdGF0X2RzYSIsICZmb3VuZCk7CisKKwkvKiBPcGVuIHN0YXRpc3Rp Y3MgZmlsZSBmb3Igd3JpdGluZyBpZiBub3QgYWxyZWFkeSBvcGVuICovCisJaWYgKCFmZF9kZXNj cmlwdGlvbikKKwl7CisJCWZkX2Rlc2NyaXB0aW9uID0gQWxsb2NhdGVGaWxlKFBHU1RBVF9DVVNU T01fRVhUUkFfREFUQV9ERVNDLCBQR19CSU5BUllfVyk7CisJCWlmIChmZF9kZXNjcmlwdGlvbiA9 PSBOVUxMKQorCQl7CisJCQllcmVwb3J0KExPRywKKwkJCQkJKGVycmNvZGVfZm9yX2ZpbGVfYWNj ZXNzKCksCisJCQkJCSBlcnJtc2coImNvdWxkIG5vdCBvcGVuIHN0YXRpc3RpY3MgZmlsZSBcIiVz XCIgZm9yIHdyaXRpbmc6ICVtIiwKKwkJCQkJCQlQR1NUQVRfQ1VTVE9NX0VYVFJBX0RBVEFfREVT QykpKTsKKwkJCWxlbiA9IDA7CisJCQlvZmZzZXQgPSAwOworCQkJZndyaXRlKCZsZW4sIHNpemVv ZihsZW4pLCAxLCBzdGF0ZmlsZSk7CisJCQlmd3JpdGUoJm9mZnNldCwgc2l6ZW9mKG9mZnNldCks IDEsIHN0YXRmaWxlKTsKKwkJCXJldHVybjsKKwkJfQorCQlmZF9kZXNjcmlwdGlvbl9vZmZzZXQg PSAwOworCX0KKworCS8qIEhhbmRsZSBlbnRyaWVzIHdpdGhvdXQgZGVzY3JpcHRpb25zICovCisJ aWYgKCFEc2FQb2ludGVySXNWYWxpZChlbnRyeS0+ZGVzY3JpcHRpb24pIHx8ICFjdXN0b21fc3Rh dHNfZGVzY3JpcHRpb25fZHNhKQorCXsKKwkJbGVuID0gMDsKKwkJb2Zmc2V0ID0gMDsKKwkJZndy aXRlKCZsZW4sIHNpemVvZihsZW4pLCAxLCBzdGF0ZmlsZSk7CisJCWZ3cml0ZSgmb2Zmc2V0LCBz aXplb2Yob2Zmc2V0KSwgMSwgc3RhdGZpbGUpOworCQlyZXR1cm47CisJfQorCisJLyogR2V0IGN1 cnJlbnQgb2Zmc2V0IGluIGZkX2Rlc2NyaXB0aW9uICovCisJb2Zmc2V0ID0gZmRfZGVzY3JpcHRp b25fb2Zmc2V0OworCisJLyogUmV0cmlldmUgZGVzY3JpcHRpb24gZnJvbSBEU0EgYW5kIHdyaXRl IHRvIGZkX2Rlc2NyaXB0aW9uICovCisJZGVzY3JpcHRpb24gPSBkc2FfZ2V0X2FkZHJlc3MoY3Vz dG9tX3N0YXRzX2Rlc2NyaXB0aW9uX2RzYSwgZW50cnktPmRlc2NyaXB0aW9uKTsKKwlsZW4gPSBz dHJsZW4oZGVzY3JpcHRpb24pICsgMTsKKwlmd3JpdGUoZGVzY3JpcHRpb24sIDEsIGxlbiwgZmRf ZGVzY3JpcHRpb24pOworCWZkX2Rlc2NyaXB0aW9uX29mZnNldCArPSBsZW47CisKKwkvKiBXcml0 ZSBsZW5ndGggYW5kIG9mZnNldCB0byBzdGF0ZmlsZSAqLworCWZ3cml0ZSgmbGVuLCBzaXplb2Yo bGVuKSwgMSwgc3RhdGZpbGUpOworCWZ3cml0ZSgmb2Zmc2V0LCBzaXplb2Yob2Zmc2V0KSwgMSwg c3RhdGZpbGUpOworfQorCisvKgorICogcGdzdGF0X2N1c3RvbV92YXJfc3RhdHNfZGVzZXJpYWxp emUoKSAtCisgKgorICogRGVzZXJpYWxpemUgZXh0cmEgZGF0YSAoZGVzY3JpcHRpb25zKSBmb3Ig Y3VzdG9tIHN0YXRpc3RpY3MgZW50cmllcyBmcm9tCisgKiB0aGUgc3RhdGlzdGljcyBmaWxlLiBD YWxsZWQgZHVyaW5nIHN0YXRpc3RpY3MgZmlsZSByZWFkaW5nIHRvIHJlc3RvcmUKKyAqIGRlc2Ny aXB0aW9uIHN0cmluZ3MgYWZ0ZXIgYSByZXN0YXJ0LgorICovCitzdGF0aWMgYm9vbAorcGdzdGF0 X2N1c3RvbV92YXJfc3RhdHNfZGVzZXJpYWxpemUoY29uc3QgUGdTdGF0X0hhc2hLZXkgKmtleSwK KwkJCQkJCQkJCWNvbnN0IFBnU3RhdFNoYXJlZF9Db21tb24gKmhlYWRlciwgRklMRSAqc3RhdGZp bGUpCit7CisJUGdTdGF0U2hhcmVkX0N1c3RvbUVudHJ5ICplbnRyeTsKKwlkc2FfcG9pbnRlciBk cDsKKwlzaXplX3QJCWxlbjsKKwlsb25nCQlvZmZzZXQ7CisJY2hhcgkgICAqYnVmZmVyOworCWJv b2wJCWZvdW5kOworCisJLyogUmVhZCBsZW5ndGggYW5kIG9mZnNldCBmcm9tIHN0YXRmaWxlICov CisJaWYgKGZyZWFkKCZsZW4sIHNpemVvZihsZW4pLCAxLCBzdGF0ZmlsZSkgIT0gMSB8fAorCQlm cmVhZCgmb2Zmc2V0LCBzaXplb2Yob2Zmc2V0KSwgMSwgc3RhdGZpbGUpICE9IDEpCisJeworCQll bG9nKFdBUk5JTkcsICJmYWlsZWQgdG8gcmVhZCBkZXNjcmlwdGlvbiBtZXRhZGF0YSBmcm9tIHN0 YXRpc3RpY3MgZmlsZSIpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJZW50cnkgPSAoUGdTdGF0 U2hhcmVkX0N1c3RvbUVudHJ5ICopIGhlYWRlcjsKKworCS8qIEhhbmRsZSBlbXB0eSBkZXNjcmlw dGlvbnMgKi8KKwlpZiAobGVuID09IDApCisJeworCQllbnRyeS0+ZGVzY3JpcHRpb24gPSBJbnZh bGlkRHNhUG9pbnRlcjsKKwkJcmV0dXJuIHRydWU7CisJfQorCisJLyogSW5pdGlhbGl6ZSBEU0Eg aWYgbmVlZGVkICovCisJaWYgKCFjdXN0b21fc3RhdHNfZGVzY3JpcHRpb25fZHNhKQorCQljdXN0 b21fc3RhdHNfZGVzY3JpcHRpb25fZHNhID0gR2V0TmFtZWREU0EoInBnc3RhdF9jdXN0b21fc3Rh dF9kc2EiLCAmZm91bmQpOworCisJaWYgKCFjdXN0b21fc3RhdHNfZGVzY3JpcHRpb25fZHNhKQor CXsKKwkJZWxvZyhXQVJOSU5HLCAiY291bGQgbm90IGFjY2VzcyBEU0EgZm9yIGN1c3RvbSBzdGF0 aXN0aWNzIGRlc2NyaXB0aW9ucyIpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyogT3BlbiBz dGF0aXN0aWNzIGZpbGUgZm9yIHJlYWRpbmcgaWYgbm90IGFscmVhZHkgb3BlbiAqLworCWlmICgh ZmRfZGVzY3JpcHRpb24pCisJeworCQlmZF9kZXNjcmlwdGlvbiA9IEFsbG9jYXRlRmlsZShQR1NU QVRfQ1VTVE9NX0VYVFJBX0RBVEFfREVTQywgUEdfQklOQVJZX1IpOworCQlpZiAoZmRfZGVzY3Jp cHRpb24gPT0gTlVMTCkKKwkJeworCQkJaWYgKGVycm5vICE9IEVOT0VOVCkKKwkJCQllcmVwb3J0 KExPRywKKwkJCQkJCShlcnJjb2RlX2Zvcl9maWxlX2FjY2VzcygpLAorCQkJCQkJIGVycm1zZygi Y291bGQgbm90IG9wZW4gc3RhdGlzdGljcyBmaWxlIFwiJXNcIiBmb3IgcmVhZGluZzogJW0iLAor CQkJCQkJCQlQR1NUQVRfQ1VTVE9NX0VYVFJBX0RBVEFfREVTQykpKTsKKwkJCXBnc3RhdF9yZXNl dF9vZl9raW5kKFBHU1RBVF9LSU5EX1RFU1RfQ1VTVE9NX1ZBUl9TVEFUUyk7CisJCQlyZXR1cm4g ZmFsc2U7CisJCX0KKwl9CisKKwkvKiBTZWVrIHRvIHRoZSBvZmZzZXQgYW5kIHJlYWQgZGVzY3Jp cHRpb24gKi8KKwlpZiAoZnNlZWsoZmRfZGVzY3JpcHRpb24sIG9mZnNldCwgU0VFS19TRVQpICE9 IDApCisJeworCQllbG9nKFdBUk5JTkcsICJmYWlsZWQgdG8gc2VlayB0byBvZmZzZXQgJWxkIGlu IGRlc2NyaXB0aW9uIGZpbGUiLCBvZmZzZXQpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJYnVm ZmVyID0gcGFsbG9jKGxlbik7CisJaWYgKGZyZWFkKGJ1ZmZlciwgMSwgbGVuLCBmZF9kZXNjcmlw dGlvbikgIT0gbGVuKQorCXsKKwkJcGZyZWUoYnVmZmVyKTsKKwkJZWxvZyhXQVJOSU5HLCAiZmFp bGVkIHRvIHJlYWQgZGVzY3JpcHRpb24gZnJvbSBmaWxlIik7CisJCXJldHVybiBmYWxzZTsKKwl9 CisKKwkvKiBBbGxvY2F0ZSBzcGFjZSBpbiBEU0EgYW5kIGNvcHkgdGhlIGRlc2NyaXB0aW9uICov CisJZHAgPSBkc2FfYWxsb2NhdGUoY3VzdG9tX3N0YXRzX2Rlc2NyaXB0aW9uX2RzYSwgbGVuKTsK KwltZW1jcHkoZHNhX2dldF9hZGRyZXNzKGN1c3RvbV9zdGF0c19kZXNjcmlwdGlvbl9kc2EsIGRw KSwgYnVmZmVyLCBsZW4pOworCWVudHJ5LT5kZXNjcmlwdGlvbiA9IGRwOworCisJcGZyZWUoYnVm ZmVyKTsKKworCXJldHVybiB0cnVlOworfQorCisvKgorICogcGdzdGF0X2N1c3RvbV92YXJfc3Rh dHNfZmlsZV9jbGVhbnVwKCkgLQorICoKKyAqIENsZWFudXAgZnVuY3Rpb24gY2FsbGVkIGF0IHRo ZSBlbmQgb2Ygc3RhdGlzdGljcyBmaWxlIG9wZXJhdGlvbnMuCisgKiBIYW5kbGVzIGNsb3Npbmcg ZmlsZXMgYW5kIGNsZWFudXAgYmFzZWQgb24gdGhlIG9wZXJhdGlvbiB0eXBlLgorICovCitzdGF0 aWMgdm9pZAorcGdzdGF0X2N1c3RvbV92YXJfc3RhdHNfZmlsZV9jbGVhbnVwKFBnU3RhdF9TdGF0 c0ZpbGVPcCBzdGF0dXMpCit7CisJc3dpdGNoIChzdGF0dXMpCisJeworCQljYXNlIFNUQVRTX1dS SVRFOgorCQkJaWYgKCFmZF9kZXNjcmlwdGlvbikKKwkJCQlyZXR1cm47CisKKwkJCWZkX2Rlc2Ny aXB0aW9uX29mZnNldCA9IDA7CisKKwkJCS8qIENoZWNrIGZvciB3cml0ZSBlcnJvcnMgYW5kIGNs ZWFudXAgaWYgbmVjZXNzYXJ5ICovCisJCQlpZiAoZmVycm9yKGZkX2Rlc2NyaXB0aW9uKSkKKwkJ CXsKKwkJCQllcmVwb3J0KExPRywKKwkJCQkJCShlcnJjb2RlX2Zvcl9maWxlX2FjY2VzcygpLAor CQkJCQkJIGVycm1zZygiY291bGQgbm90IHdyaXRlIHN0YXRpc3RpY3MgZmlsZSBcIiVzXCI6ICVt IiwKKwkJCQkJCQkJUEdTVEFUX0NVU1RPTV9FWFRSQV9EQVRBX0RFU0MpKSk7CisJCQkJRnJlZUZp bGUoZmRfZGVzY3JpcHRpb24pOworCQkJCXVubGluayhQR1NUQVRfQ1VTVE9NX0VYVFJBX0RBVEFf REVTQyk7CisJCQl9CisJCQllbHNlIGlmIChGcmVlRmlsZShmZF9kZXNjcmlwdGlvbikgPCAwKQor CQkJeworCQkJCWVyZXBvcnQoTE9HLAorCQkJCQkJKGVycmNvZGVfZm9yX2ZpbGVfYWNjZXNzKCks CisJCQkJCQkgZXJybXNnKCJjb3VsZCBub3QgY2xvc2Ugc3RhdGlzdGljcyBmaWxlIFwiJXNcIjog JW0iLAorCQkJCQkJCQlQR1NUQVRfQ1VTVE9NX0VYVFJBX0RBVEFfREVTQykpKTsKKwkJCQl1bmxp bmsoUEdTVEFUX0NVU1RPTV9FWFRSQV9EQVRBX0RFU0MpOworCQkJfQorCQkJYnJlYWs7CisKKwkJ Y2FzZSBTVEFUU19SRUFEOgorCQkJaWYgKCFmZF9kZXNjcmlwdGlvbikKKwkJCQlyZXR1cm47CisK KwkJCUZyZWVGaWxlKGZkX2Rlc2NyaXB0aW9uKTsKKworCQkJLyogUmVtb3ZlIHRoZSB0ZW1wb3Jh cnkgc3RhdGlzdGljcyBmaWxlIGFmdGVyIHJlYWRpbmcgKi8KKwkJCWVsb2coREVCVUcyLCAicmVt b3Zpbmcgc3RhdGlzdGljcyBmaWxlIFwiJXNcIiIsIFBHU1RBVF9DVVNUT01fRVhUUkFfREFUQV9E RVNDKTsKKwkJCXVubGluayhQR1NUQVRfQ1VTVE9NX0VYVFJBX0RBVEFfREVTQyk7CisJCQlicmVh azsKKworCQljYXNlIFNUQVRTX0RJU0NBUkQ6CisJCQl7CisJCQkJaW50CQkJcmV0OworCisJCQkJ LyogQXR0ZW1wdCB0byByZW1vdmUgdGhlIHN0YXRpc3RpY3MgZmlsZSAqLworCQkJCXJldCA9IHVu bGluayhQR1NUQVRfQ1VTVE9NX0VYVFJBX0RBVEFfREVTQyk7CisJCQkJaWYgKHJldCAhPSAwKQor CQkJCXsKKwkJCQkJaWYgKGVycm5vID09IEVOT0VOVCkKKwkJCQkJCWVsb2coTE9HLAorCQkJCQkJ CSAiZGlkbid0IG5lZWQgdG8gdW5saW5rIHBlcm1hbmVudCBzdGF0cyBmaWxlIFwiJXNcIiAtIGRp ZG4ndCBleGlzdCIsCisJCQkJCQkJIFBHU1RBVF9DVVNUT01fRVhUUkFfREFUQV9ERVNDKTsKKwkJ CQkJZWxzZQorCQkJCQkJZXJlcG9ydChMT0csCisJCQkJCQkJCShlcnJjb2RlX2Zvcl9maWxlX2Fj Y2VzcygpLAorCQkJCQkJCQkgZXJybXNnKCJjb3VsZCBub3QgdW5saW5rIHBlcm1hbmVudCBzdGF0 aXN0aWNzIGZpbGUgXCIlc1wiOiAlbSIsCisJCQkJCQkJCQkJUEdTVEFUX0NVU1RPTV9FWFRSQV9E QVRBX0RFU0MpKSk7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCWVyZXBvcnQoTE9HLAor CQkJCQkJCShlcnJtc2dfaW50ZXJuYWwoInVubGlua2VkIHBlcm1hbmVudCBzdGF0aXN0aWNzIGZp bGUgXCIlc1wiIiwKKwkJCQkJCQkJCQkJIFBHU1RBVF9DVVNUT01fRVhUUkFfREFUQV9ERVNDKSkp OworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCX0KKworCWZkX2Rlc2NyaXB0aW9uID0gTlVMTDsK K30KKwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogSGVscGVyIGZ1bmN0aW9ucwogICotLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQpAQCAtMTYxLDggKzQyMiw3IEBAIHBnc3RhdF9mZXRjaF9jdXN0b21fZW50cnko Y29uc3QgY2hhciAqc3RhdF9uYW1lKQogICogcGdzdGF0X2NyZWF0ZV9jdXN0b21fdmFyX3N0YXRz CiAgKgkJQ3JlYXRlIG5ldyBjdXN0b20gc3RhdGlzdGljIGVudHJ5CiAgKgotICogSW5pdGlhbGl6 ZXMgYSB6ZXJvLXZhbHVlZCBzdGF0aXN0aWNzIGVudHJ5IGluIHNoYXJlZCBtZW1vcnkuCi0gKiBW YWxpZGF0ZXMgbmFtZSBsZW5ndGggYWdhaW5zdCBOQU1FREFUQUxFTiBsaW1pdC4KKyAqIEluaXRp YWxpemVzIGEgc3RhdGlzdGljcyBlbnRyeSB3aXRoIHRoZSBnaXZlbiBuYW1lIGFuZCBkZXNjcmlw dGlvbi4KICAqLwogUEdfRlVOQ1RJT05fSU5GT19WMShwZ3N0YXRfY3JlYXRlX2N1c3RvbV92YXJf c3RhdHMpOwogRGF0dW0KQEAgLTE3MSw2ICs0MzEsOSBAQCBwZ3N0YXRfY3JlYXRlX2N1c3RvbV92 YXJfc3RhdHMoUEdfRlVOQ1RJT05fQVJHUykKIAlQZ1N0YXRfRW50cnlSZWYgKmVudHJ5X3JlZjsK IAlQZ1N0YXRTaGFyZWRfQ3VzdG9tRW50cnkgKnNoYXJlZF9lbnRyeTsKIAljaGFyCSAgICpzdGF0 X25hbWUgPSB0ZXh0X3RvX2NzdHJpbmcoUEdfR0VUQVJHX1RFWFRfUFAoMCkpOworCWNoYXIJICAg KmRlc2NyaXB0aW9uID0gdGV4dF90b19jc3RyaW5nKFBHX0dFVEFSR19URVhUX1BQKDEpKTsKKwlk c2FfcG9pbnRlciBkcCA9IEludmFsaWREc2FQb2ludGVyOworCWJvb2wJCWZvdW5kOwogCiAJLyog VmFsaWRhdGUgbmFtZSBsZW5ndGggZmlyc3QgKi8KIAlpZiAoc3RybGVuKHN0YXRfbmFtZSkgPj0g TkFNRURBVEFMRU4pCkBAIC0xNzksNiArNDQyLDIwIEBAIHBnc3RhdF9jcmVhdGVfY3VzdG9tX3Zh cl9zdGF0cyhQR19GVU5DVElPTl9BUkdTKQogCQkJCSBlcnJtc2coImN1c3RvbSBzdGF0aXN0aWMg bmFtZSBcIiVzXCIgaXMgdG9vIGxvbmciLCBzdGF0X25hbWUpLAogCQkJCSBlcnJkZXRhaWwoIk5h bWUgbXVzdCBiZSBsZXNzIHRoYW4gJWQgY2hhcmFjdGVycy4iLCBOQU1FREFUQUxFTikpKTsKIAor CS8qIEluaXRpYWxpemUgRFNBIGFuZCBkZXNjcmlwdGlvbiBwcm92aWRlZCAqLworCWlmICghY3Vz dG9tX3N0YXRzX2Rlc2NyaXB0aW9uX2RzYSkKKwkJY3VzdG9tX3N0YXRzX2Rlc2NyaXB0aW9uX2Rz YSA9IEdldE5hbWVkRFNBKCJwZ3N0YXRfY3VzdG9tX3N0YXRfZHNhIiwgJmZvdW5kKTsKKworCWlm ICghY3VzdG9tX3N0YXRzX2Rlc2NyaXB0aW9uX2RzYSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQko ZXJybXNnKCJjb3VsZCBub3QgYWNjZXNzIERTQSBmb3IgY3VzdG9tIHN0YXRpc3RpY3MgZGVzY3Jp cHRpb25zIikpKTsKKworCS8qIEFsbG9jYXRlIHNwYWNlIGluIERTQSBhbmQgY29weSBkZXNjcmlw dGlvbiAqLworCWRwID0gZHNhX2FsbG9jYXRlKGN1c3RvbV9zdGF0c19kZXNjcmlwdGlvbl9kc2Es IHN0cmxlbihkZXNjcmlwdGlvbikgKyAxKTsKKwltZW1jcHkoZHNhX2dldF9hZGRyZXNzKGN1c3Rv bV9zdGF0c19kZXNjcmlwdGlvbl9kc2EsIGRwKSwKKwkJICAgZGVzY3JpcHRpb24sCisJCSAgIHN0 cmxlbihkZXNjcmlwdGlvbikgKyAxKTsKKwogCS8qIENyZWF0ZSBvciBnZXQgZXhpc3RpbmcgZW50 cnkgKi8KIAllbnRyeV9yZWYgPSBwZ3N0YXRfZ2V0X2VudHJ5X3JlZl9sb2NrZWQoUEdTVEFUX0tJ TkRfVEVTVF9DVVNUT01fVkFSX1NUQVRTLCBJbnZhbGlkT2lkLAogCQkJCQkJCQkJCQlQR1NUQVRf Q1VTVE9NX1ZBUl9TVEFUU19JRFgoc3RhdF9uYW1lKSwgdHJ1ZSk7CkBAIC0xOTEsNiArNDY4LDkg QEAgcGdzdGF0X2NyZWF0ZV9jdXN0b21fdmFyX3N0YXRzKFBHX0ZVTkNUSU9OX0FSR1MpCiAJLyog WmVyby1pbml0aWFsaXplIHN0YXRpc3RpY3MgKi8KIAltZW1zZXQoJnNoYXJlZF9lbnRyeS0+c3Rh dHMsIDAsIHNpemVvZihzaGFyZWRfZW50cnktPnN0YXRzKSk7CiAKKwkvKiBTdG9yZSBkZXNjcmlw dGlvbiBwb2ludGVyICovCisJc2hhcmVkX2VudHJ5LT5kZXNjcmlwdGlvbiA9IGRwOworCiAJcGdz dGF0X3VubG9ja19lbnRyeShlbnRyeV9yZWYpOwogCiAJUEdfUkVUVVJOX1ZPSUQoKTsKQEAgLTIy NSw4ICs1MDUsNyBAQCBwZ3N0YXRfdXBkYXRlX2N1c3RvbV92YXJfc3RhdHMoUEdfRlVOQ1RJT05f QVJHUykKICAqIHBnc3RhdF9kcm9wX2N1c3RvbV92YXJfc3RhdHMKICAqCQlSZW1vdmUgY3VzdG9t IHN0YXRpc3RpYyBlbnRyeQogICoKLSAqIERyb3BzIHRoZSBuYW1lZCBzdGF0aXN0aWMgZnJvbSBz aGFyZWQgbWVtb3J5IGFuZCByZXF1ZXN0cwotICogZ2FyYmFnZSBjb2xsZWN0aW9uIGlmIG5lZWRl ZC4KKyAqIERyb3BzIHRoZSBuYW1lZCBzdGF0aXN0aWMgZnJvbSBzaGFyZWQgbWVtb3J5LgogICov CiBQR19GVU5DVElPTl9JTkZPX1YxKHBnc3RhdF9kcm9wX2N1c3RvbV92YXJfc3RhdHMpOwogRGF0 dW0KQEAgLTI0Niw3ICs1MjUsNyBAQCBwZ3N0YXRfZHJvcF9jdXN0b21fdmFyX3N0YXRzKFBHX0ZV TkNUSU9OX0FSR1MpCiAgKiBwZ3N0YXRfcmVwb3J0X2N1c3RvbV92YXJfc3RhdHMKICAqCQlSZXRy aWV2ZSBjdXN0b20gc3RhdGlzdGljIHZhbHVlcwogICoKLSAqIFJldHVybnMgc2luZ2xlIHJvdyB3 aXRoIHN0YXRpc3RpYyBuYW1lIGFuZCBjYWxsIGNvdW50IGlmIHRoZQorICogUmV0dXJucyBzaW5n bGUgcm93IHdpdGggc3RhdGlzdGljIG5hbWUsIGNhbGwgY291bnQsIGFuZCBkZXNjcmlwdGlvbiBp ZiB0aGUKICAqIHN0YXRpc3RpYyBleGlzdHMsIG90aGVyd2lzZSByZXR1cm5zIG5vIHJvd3MuCiAg Ki8KIFBHX0ZVTkNUSU9OX0lORk9fVjEocGdzdGF0X3JlcG9ydF9jdXN0b21fdmFyX3N0YXRzKTsK QEAgLTI4MCw5ICs1NTksMTMgQEAgcGdzdGF0X3JlcG9ydF9jdXN0b21fdmFyX3N0YXRzKFBHX0ZV TkNUSU9OX0FSR1MpCiAKIAlpZiAoZnVuY2N0eC0+Y2FsbF9jbnRyIDwgZnVuY2N0eC0+bWF4X2Nh bGxzKQogCXsKLQkJRGF0dW0JCXZhbHVlc1syXTsKLQkJYm9vbAkJbnVsbHNbMl0gPSB7ZmFsc2Us IGZhbHNlfTsKKwkJRGF0dW0JCXZhbHVlc1szXTsKKwkJYm9vbAkJbnVsbHNbM10gPSB7ZmFsc2Us IGZhbHNlLCBmYWxzZX07CiAJCUhlYXBUdXBsZQl0dXBsZTsKKwkJUGdTdGF0X0VudHJ5UmVmICpl bnRyeV9yZWY7CisJCVBnU3RhdFNoYXJlZF9DdXN0b21FbnRyeSAqc2hhcmVkX2VudHJ5OworCQlj aGFyCSAgICpkZXNjcmlwdGlvbiA9IE5VTEw7CisJCWJvb2wJCWZvdW5kOwogCiAJCXN0YXRfbmFt ZSA9IHRleHRfdG9fY3N0cmluZyhQR19HRVRBUkdfVEVYVF9QUCgwKSk7CiAJCXN0YXRfZW50cnkg PSBwZ3N0YXRfZmV0Y2hfY3VzdG9tX2VudHJ5KHN0YXRfbmFtZSk7CkBAIC0yOTAsOSArNTczLDMz IEBAIHBnc3RhdF9yZXBvcnRfY3VzdG9tX3Zhcl9zdGF0cyhQR19GVU5DVElPTl9BUkdTKQogCQkv KiBSZXR1cm4gcm93IG9ubHkgaWYgZW50cnkgZXhpc3RzICovCiAJCWlmIChzdGF0X2VudHJ5KQog CQl7CisJCQkvKiBHZXQgZW50cnkgcmVmIHRvIGFjY2VzcyBzaGFyZWQgZW50cnkgKi8KKwkJCWVu dHJ5X3JlZiA9IHBnc3RhdF9nZXRfZW50cnlfcmVmKFBHU1RBVF9LSU5EX1RFU1RfQ1VTVE9NX1ZB Ul9TVEFUUywgSW52YWxpZE9pZCwKKwkJCQkJCQkJCQkJIFBHU1RBVF9DVVNUT01fVkFSX1NUQVRT X0lEWChzdGF0X25hbWUpLCBmYWxzZSwgTlVMTCk7CisKKwkJCWlmIChlbnRyeV9yZWYpCisJCQl7 CisJCQkJc2hhcmVkX2VudHJ5ID0gKFBnU3RhdFNoYXJlZF9DdXN0b21FbnRyeSAqKSBlbnRyeV9y ZWYtPnNoYXJlZF9zdGF0czsKKworCQkJCS8qIEdldCBkZXNjcmlwdGlvbiBmcm9tIERTQSBpZiBh dmFpbGFibGUgKi8KKwkJCQlpZiAoRHNhUG9pbnRlcklzVmFsaWQoc2hhcmVkX2VudHJ5LT5kZXNj cmlwdGlvbikpCisJCQkJeworCQkJCQlpZiAoIWN1c3RvbV9zdGF0c19kZXNjcmlwdGlvbl9kc2Ep CisJCQkJCQljdXN0b21fc3RhdHNfZGVzY3JpcHRpb25fZHNhID0gR2V0TmFtZWREU0EoInBnc3Rh dF9jdXN0b21fc3RhdF9kc2EiLCAmZm91bmQpOworCisJCQkJCWlmIChjdXN0b21fc3RhdHNfZGVz Y3JpcHRpb25fZHNhKQorCQkJCQkJZGVzY3JpcHRpb24gPSBkc2FfZ2V0X2FkZHJlc3MoY3VzdG9t X3N0YXRzX2Rlc2NyaXB0aW9uX2RzYSwgc2hhcmVkX2VudHJ5LT5kZXNjcmlwdGlvbik7CisJCQkJ fQorCQkJfQorCiAJCQl2YWx1ZXNbMF0gPSBQb2ludGVyR2V0RGF0dW0oY3N0cmluZ190b190ZXh0 KHN0YXRfbmFtZSkpOwogCQkJdmFsdWVzWzFdID0gSW50NjRHZXREYXR1bShzdGF0X2VudHJ5LT5u dW1jYWxscyk7CiAKKwkJCWlmIChkZXNjcmlwdGlvbikKKwkJCQl2YWx1ZXNbMl0gPSBQb2ludGVy R2V0RGF0dW0oY3N0cmluZ190b190ZXh0KGRlc2NyaXB0aW9uKSk7CisJCQllbHNlCisJCQkJbnVs bHNbMl0gPSB0cnVlOworCiAJCQl0dXBsZSA9IGhlYXBfZm9ybV90dXBsZShmdW5jY3R4LT50dXBs ZV9kZXNjLCB2YWx1ZXMsIG51bGxzKTsKIAkJCVNSRl9SRVRVUk5fTkVYVChmdW5jY3R4LCBIZWFw VHVwbGVHZXREYXR1bSh0dXBsZSkpOwogCQl9Ci0tIAoyLjQzLjAKCg== --0000000000002c5e29064560358c Content-Type: application/octet-stream; name="v4-0001-Move-custom-stats-tests-from-injection_points-to-.patch" Content-Disposition: attachment; filename="v4-0001-Move-custom-stats-tests-from-injection_points-to-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_miw0euop1 RnJvbSAyYmNkZTNhZTkzYzZmNDVhNzFkMzk5ZWJkZDgzMTM5ODM2MWE4MjFkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBVYnVudHUgPHVidW50dUBpcC0xNzItMzEtNDYtMjMwLmVjMi5p bnRlcm5hbD4KRGF0ZTogU2F0LCA2IERlYyAyMDI1IDAwOjU0OjA2ICswMDAwClN1YmplY3Q6IFtQ QVRDSCB2NCAxLzJdIE1vdmUgY3VzdG9tIHN0YXRzIHRlc3RzIGZyb20gaW5qZWN0aW9uX3BvaW50 cyB0bwogZGVkaWNhdGVkIG1vZHVsZQoKRXh0cmFjdCBjdXN0b20gc3RhdGlzdGljcyB0ZXN0aW5n IGNvZGUgZnJvbSBpbmplY3Rpb25fcG9pbnRzIG1vZHVsZQppbnRvIG5ldyB0ZXN0X2N1c3RvbV9z dGF0cyBtb2R1bGUgd2l0aCBzZXBhcmF0ZSB2YXJpYWJsZSBhbmQgZml4ZWQKc3RhdGlzdGljcyBj b21wb25lbnRzLiBUaGlzIGltcHJvdmVzIHRlc3Qgb3JnYW5pemF0aW9uIGFuZCByZW1vdmVzCnN0 YXRpc3RpY3MgZnVuY3Rpb25hbGl0eSB0aGF0IHdhcyBub3QgY29yZSB0byBpbmplY3Rpb24gcG9p bnRzLgoKRGlzY3Vzc2lvbjogaHR0cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvbWVzc2FnZS1pZC9D QUE1Ulowc0pnTzZHQXdnRnhtemc5TVZQJTNEck03VXM4S0tjV3B1cXhlLWY1cXhtcEUwZyU0MG1h aWwuZ21haWwuY29tCi0tLQogc3JjL3Rlc3QvbW9kdWxlcy9NYWtlZmlsZSAgICAgICAgICAgICAg ICAgICAgIHwgICAxICsKIHNyYy90ZXN0L21vZHVsZXMvaW5qZWN0aW9uX3BvaW50cy9NYWtlZmls ZSAgICB8ICAgNCAtCiAuLi4vaW5qZWN0aW9uX3BvaW50cy0tMS4wLnNxbCAgICAgICAgICAgICAg ICAgfCAgNDMgLS0tCiAuLi4vaW5qZWN0aW9uX3BvaW50cy9pbmplY3Rpb25fcG9pbnRzLmMgICAg ICAgfCAgNDggLS0tCiAuLi4vaW5qZWN0aW9uX3BvaW50cy9pbmplY3Rpb25fc3RhdHMuYyAgICAg ICAgfCAyMjggLS0tLS0tLS0tLS0tLQogLi4uL2luamVjdGlvbl9wb2ludHMvaW5qZWN0aW9uX3N0 YXRzLmggICAgICAgIHwgIDM1IC0tCiAuLi4vaW5qZWN0aW9uX3BvaW50cy9pbmplY3Rpb25fc3Rh dHNfZml4ZWQuYyAgfCAyMTQgLS0tLS0tLS0tLS0tLQogc3JjL3Rlc3QvbW9kdWxlcy9pbmplY3Rp b25fcG9pbnRzL21lc29uLmJ1aWxkIHwgIDEyIC0KIC4uLi9tb2R1bGVzL2luamVjdGlvbl9wb2lu dHMvdC8wMDFfc3RhdHMucGwgICB8IDEwMyAtLS0tLS0KIHNyYy90ZXN0L21vZHVsZXMvbWVzb24u YnVpbGQgICAgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfY3Vz dG9tX3N0YXRzLy5naXRpZ25vcmUgfCAgIDQgKwogc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2N1c3Rv bV9zdGF0cy9NYWtlZmlsZSAgIHwgIDI3ICsrCiAuLi4vbW9kdWxlcy90ZXN0X2N1c3RvbV9zdGF0 cy9tZXNvbi5idWlsZCAgICAgfCAgNTUgKysrKwogLi4uL3Rlc3RfY3VzdG9tX3N0YXRzL3QvMDAx X2N1c3RvbV9zdGF0cy5wbCAgIHwgMTE1ICsrKysrKysKIC4uLi90ZXN0X2N1c3RvbV9maXhlZF9z dGF0cy0tMS4wLnNxbCAgICAgICAgICB8ICAyMCArKwogLi4uL3Rlc3RfY3VzdG9tX2ZpeGVkX3N0 YXRzLmMgICAgICAgICAgICAgICAgIHwgMjI0ICsrKysrKysrKysrKysKIC4uLi90ZXN0X2N1c3Rv bV9maXhlZF9zdGF0cy5jb250cm9sICAgICAgICAgICB8ICAgNCArCiAuLi4vdGVzdF9jdXN0b21f dmFyX3N0YXRzLS0xLjAuc3FsICAgICAgICAgICAgfCAgMjUgKysKIC4uLi90ZXN0X2N1c3RvbV9z dGF0cy90ZXN0X2N1c3RvbV92YXJfc3RhdHMuYyB8IDMwMiArKysrKysrKysrKysrKysrKysKIC4u Li90ZXN0X2N1c3RvbV92YXJfc3RhdHMuY29udHJvbCAgICAgICAgICAgICB8ICAgNCArCiAyMCBm aWxlcyBjaGFuZ2VkLCA3ODIgaW5zZXJ0aW9ucygrKSwgNjg3IGRlbGV0aW9ucygtKQogZGVsZXRl IG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvaW5qZWN0aW9uX3BvaW50cy9pbmplY3Rpb25f c3RhdHMuYwogZGVsZXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvaW5qZWN0aW9uX3Bv aW50cy9pbmplY3Rpb25fc3RhdHMuaAogZGVsZXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVs ZXMvaW5qZWN0aW9uX3BvaW50cy9pbmplY3Rpb25fc3RhdHNfZml4ZWQuYwogZGVsZXRlIG1vZGUg MTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvaW5qZWN0aW9uX3BvaW50cy90LzAwMV9zdGF0cy5wbAog Y3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9jdXN0b21fc3RhdHMvLmdp dGlnbm9yZQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9jdXN0b21f c3RhdHMvTWFrZWZpbGUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3Rf Y3VzdG9tX3N0YXRzL21lc29uLmJ1aWxkCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9k dWxlcy90ZXN0X2N1c3RvbV9zdGF0cy90LzAwMV9jdXN0b21fc3RhdHMucGwKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfY3VzdG9tX3N0YXRzL3Rlc3RfY3VzdG9tX2Zp eGVkX3N0YXRzLS0xLjAuc3FsCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90 ZXN0X2N1c3RvbV9zdGF0cy90ZXN0X2N1c3RvbV9maXhlZF9zdGF0cy5jCiBjcmVhdGUgbW9kZSAx MDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2N1c3RvbV9zdGF0cy90ZXN0X2N1c3RvbV9maXhl ZF9zdGF0cy5jb250cm9sCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0 X2N1c3RvbV9zdGF0cy90ZXN0X2N1c3RvbV92YXJfc3RhdHMtLTEuMC5zcWwKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfY3VzdG9tX3N0YXRzL3Rlc3RfY3VzdG9tX3Zh cl9zdGF0cy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2N1c3Rv bV9zdGF0cy90ZXN0X2N1c3RvbV92YXJfc3RhdHMuY29udHJvbAoKZGlmZiAtLWdpdCBhL3NyYy90 ZXN0L21vZHVsZXMvTWFrZWZpbGUgYi9zcmMvdGVzdC9tb2R1bGVzL01ha2VmaWxlCmluZGV4IGQw NzliOTFiMWEyLi40YTEwOWNjYmY2YyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy9NYWtl ZmlsZQorKysgYi9zcmMvdGVzdC9tb2R1bGVzL01ha2VmaWxlCkBAIC0yMSw2ICsyMSw3IEBAIFNV QkRJUlMgPSBcCiAJCSAgdGVzdF9ibG9vbWZpbHRlciBcCiAJCSAgdGVzdF9jb3B5X2NhbGxiYWNr cyBcCiAJCSAgdGVzdF9jdXN0b21fcm1ncnMgXAorCQkgIHRlc3RfY3VzdG9tX3N0YXRzIFwKIAkJ ICB0ZXN0X2RkbF9kZXBhcnNlIFwKIAkJICB0ZXN0X2RzYSBcCiAJCSAgdGVzdF9kc21fcmVnaXN0 cnkgXApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9pbmplY3Rpb25fcG9pbnRzL01ha2Vm aWxlIGIvc3JjL3Rlc3QvbW9kdWxlcy9pbmplY3Rpb25fcG9pbnRzL01ha2VmaWxlCmluZGV4IGE2 MThlNmE5ODk5Li5jODUwMzRlYjhjYyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy9pbmpl Y3Rpb25fcG9pbnRzL01ha2VmaWxlCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvaW5qZWN0aW9uX3Bv aW50cy9NYWtlZmlsZQpAQCAtNCw4ICs0LDYgQEAgTU9EVUxFX2JpZyA9IGluamVjdGlvbl9wb2lu dHMKIE9CSlMgPSBcCiAJJChXSU4zMlJFUykgXAogCWluamVjdGlvbl9wb2ludHMubyBcCi0JaW5q ZWN0aW9uX3N0YXRzLm8gXAotCWluamVjdGlvbl9zdGF0c19maXhlZC5vIFwKIAlyZWdyZXNzX2lu amVjdGlvbi5vCiBFWFRFTlNJT04gPSBpbmplY3Rpb25fcG9pbnRzCiBEQVRBID0gaW5qZWN0aW9u X3BvaW50cy0tMS4wLnNxbApAQCAtMjMsOCArMjEsNiBAQCBJU09MQVRJT04gPSBiYXNpYyBcCiAJ ICAgIHJlaW5kZXgtY29uY3VycmVudGx5LXVwc2VydC1vbi1jb25zdHJhaW50IFwKIAkgICAgcmVp bmRleC1jb25jdXJyZW50bHktdXBzZXJ0LXBhcnRpdGlvbmVkCiAKLVRBUF9URVNUUyA9IDEKLQog IyBUaGUgaW5qZWN0aW9uIHBvaW50cyBhcmUgY2x1c3Rlci13aWRlLCBzbyBkaXNhYmxlIGluc3Rh bGxjaGVjawogTk9fSU5TVEFMTENIRUNLID0gMQogCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1 bGVzL2luamVjdGlvbl9wb2ludHMvaW5qZWN0aW9uX3BvaW50cy0tMS4wLnNxbCBiL3NyYy90ZXN0 L21vZHVsZXMvaW5qZWN0aW9uX3BvaW50cy9pbmplY3Rpb25fcG9pbnRzLS0xLjAuc3FsCmluZGV4 IGE1MWZmNTM4Njg0Li44NjFjNzM1NWQ0ZSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy9p bmplY3Rpb25fcG9pbnRzL2luamVjdGlvbl9wb2ludHMtLTEuMC5zcWwKKysrIGIvc3JjL3Rlc3Qv bW9kdWxlcy9pbmplY3Rpb25fcG9pbnRzL2luamVjdGlvbl9wb2ludHMtLTEuMC5zcWwKQEAgLTEw MSw0OSArMTAxLDYgQEAgUkVUVVJOUyBTRVRPRiByZWNvcmQKIEFTICdNT0RVTEVfUEFUSE5BTUUn LCAnaW5qZWN0aW9uX3BvaW50c19saXN0JwogTEFOR1VBR0UgQyBTVFJJQ1QgVk9MQVRJTEUgUEFS QUxMRUwgUkVTVFJJQ1RFRDsKIAotLS0KLS0tIGluamVjdGlvbl9wb2ludHNfc3RhdHNfbnVtY2Fs bHMoKQotLS0KLS0tIFJlcG9ydHMgc3RhdGlzdGljcywgaWYgYW55LCByZWxhdGVkIHRvIHRoZSBn aXZlbiBpbmplY3Rpb24gcG9pbnQuCi0tLQotQ1JFQVRFIEZVTkNUSU9OIGluamVjdGlvbl9wb2lu dHNfc3RhdHNfbnVtY2FsbHMoSU4gcG9pbnRfbmFtZSBURVhUKQotUkVUVVJOUyBiaWdpbnQKLUFT ICdNT0RVTEVfUEFUSE5BTUUnLCAnaW5qZWN0aW9uX3BvaW50c19zdGF0c19udW1jYWxscycKLUxB TkdVQUdFIEMgU1RSSUNUOwotCi0tLQotLS0gaW5qZWN0aW9uX3BvaW50c19zdGF0c19jb3VudCgp Ci0tLQotLS0gUmV0dXJuIHRoZSBudW1iZXIgb2YgZW50cmllcyBzdG9yZWQgaW4gdGhlIHBnc3Rh dHMgaGFzaCB0YWJsZS4KLS0tCi1DUkVBVEUgRlVOQ1RJT04gaW5qZWN0aW9uX3BvaW50c19zdGF0 c19jb3VudCgpCi1SRVRVUk5TIGJpZ2ludAotQVMgJ01PRFVMRV9QQVRITkFNRScsICdpbmplY3Rp b25fcG9pbnRzX3N0YXRzX2NvdW50JwotTEFOR1VBR0UgQyBTVFJJQ1Q7Ci0KLS0tCi0tLSBpbmpl Y3Rpb25fcG9pbnRzX3N0YXRzX2Ryb3AoKQotLS0KLS0tIERyb3AgYWxsIHN0YXRpc3RpY3Mgb2Yg aW5qZWN0aW9uIHBvaW50cy4KLS0tCi1DUkVBVEUgRlVOQ1RJT04gaW5qZWN0aW9uX3BvaW50c19z dGF0c19kcm9wKCkKLVJFVFVSTlMgdm9pZAotQVMgJ01PRFVMRV9QQVRITkFNRScsICdpbmplY3Rp b25fcG9pbnRzX3N0YXRzX2Ryb3AnCi1MQU5HVUFHRSBDIFNUUklDVDsKLQotLS0KLS0tIGluamVj dGlvbl9wb2ludHNfc3RhdHNfZml4ZWQoKQotLS0KLS0tIFJlcG9ydHMgZml4ZWQtbnVtYmVyZWQg c3RhdGlzdGljcyBmb3IgaW5qZWN0aW9uIHBvaW50cy4KLUNSRUFURSBGVU5DVElPTiBpbmplY3Rp b25fcG9pbnRzX3N0YXRzX2ZpeGVkKE9VVCBudW1hdHRhY2ggaW50OCwKLSAgIE9VVCBudW1kZXRh Y2ggaW50OCwKLSAgIE9VVCBudW1ydW4gaW50OCwKLSAgIE9VVCBudW1jYWNoZWQgaW50OCwKLSAg IE9VVCBudW1sb2FkZWQgaW50OCkKLVJFVFVSTlMgcmVjb3JkCi1BUyAnTU9EVUxFX1BBVEhOQU1F JywgJ2luamVjdGlvbl9wb2ludHNfc3RhdHNfZml4ZWQnCi1MQU5HVUFHRSBDIFNUUklDVDsKLQog LS0KIC0tIHJlZ3Jlc3NfaW5qZWN0aW9uLmMgZnVuY3Rpb25zCiAtLQpkaWZmIC0tZ2l0IGEvc3Jj L3Rlc3QvbW9kdWxlcy9pbmplY3Rpb25fcG9pbnRzL2luamVjdGlvbl9wb2ludHMuYyBiL3NyYy90 ZXN0L21vZHVsZXMvaW5qZWN0aW9uX3BvaW50cy9pbmplY3Rpb25fcG9pbnRzLmMKaW5kZXggYjdj MWM1OGVhNTYuLjQxN2I2MWYzMWM1IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL2luamVj dGlvbl9wb2ludHMvaW5qZWN0aW9uX3BvaW50cy5jCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvaW5q ZWN0aW9uX3BvaW50cy9pbmplY3Rpb25fcG9pbnRzLmMKQEAgLTE5LDcgKzE5LDYgQEAKIAogI2lu Y2x1ZGUgImZtZ3IuaCIKICNpbmNsdWRlICJmdW5jYXBpLmgiCi0jaW5jbHVkZSAiaW5qZWN0aW9u X3N0YXRzLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAibm9kZXMvcGdfbGlz dC5oIgogI2luY2x1ZGUgIm5vZGVzL3ZhbHVlLmgiCkBAIC0xMDcsMTUgKzEwNiw2IEBAIGV4dGVy biBQR0RMTEVYUE9SVCB2b2lkIGluamVjdGlvbl93YWl0KGNvbnN0IGNoYXIgKm5hbWUsCiAvKiB0 cmFjayBpZiBpbmplY3Rpb24gcG9pbnRzIGF0dGFjaGVkIGluIHRoaXMgcHJvY2VzcyBhcmUgbGlu a2VkIHRvIGl0ICovCiBzdGF0aWMgYm9vbCBpbmplY3Rpb25fcG9pbnRfbG9jYWwgPSBmYWxzZTsK IAotLyoKLSAqIEdVQyB2YXJpYWJsZQotICoKLSAqIFRoaXMgR1VDIGlzIHVzZWZ1bCB0byBjb250 cm9sIGlmIHN0YXRpc3RpY3Mgc2hvdWxkIGJlIGVuYWJsZWQgb3Igbm90Ci0gKiBkdXJpbmcgYSB0 ZXN0IHdpdGggaW5qZWN0aW9uIHBvaW50cywgbGlrZSBmb3IgZXhhbXBsZSBpZiBhIHRlc3QgcmVs aWVzCi0gKiBvbiBhIGNhbGxiYWNrIHJ1biBpbiBhIGNyaXRpY2FsIHNlY3Rpb24gd2hlcmUgbm8g YWxsb2NhdGlvbiBzaG91bGQgaGFwcGVuLgotICovCi1ib29sCQlpbmpfc3RhdHNfZW5hYmxlZCA9 IGZhbHNlOwotCiAvKiBTaGFyZWQgbWVtb3J5IGluaXQgY2FsbGJhY2tzICovCiBzdGF0aWMgc2ht ZW1fcmVxdWVzdF9ob29rX3R5cGUgcHJldl9zaG1lbV9yZXF1ZXN0X2hvb2sgPSBOVUxMOwogc3Rh dGljIHNobWVtX3N0YXJ0dXBfaG9va190eXBlIHByZXZfc2htZW1fc3RhcnR1cF9ob29rID0gTlVM TDsKQEAgLTIzNSw5ICsyMjUsNiBAQCBpbmplY3Rpb25fcG9pbnRzX2NsZWFudXAoaW50IGNvZGUs IERhdHVtIGFyZykKIAkJY2hhcgkgICAqbmFtZSA9IHN0clZhbChsZmlyc3QobGMpKTsKIAogCQko dm9pZCkgSW5qZWN0aW9uUG9pbnREZXRhY2gobmFtZSk7Ci0KLQkJLyogUmVtb3ZlIHN0YXRzIGVu dHJ5ICovCi0JCXBnc3RhdF9kcm9wX2luaihuYW1lKTsKIAl9CiB9CiAKQEAgLTI1MSw4ICsyMzgs NiBAQCBpbmplY3Rpb25fZXJyb3IoY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgdm9pZCAqcHJpdmF0 ZV9kYXRhLCB2b2lkICphcmcpCiAJaWYgKCFpbmplY3Rpb25fcG9pbnRfYWxsb3dlZChjb25kaXRp b24pKQogCQlyZXR1cm47CiAKLQlwZ3N0YXRfcmVwb3J0X2luaihuYW1lKTsKLQogCWlmIChhcmdz dHIpCiAJCWVsb2coRVJST1IsICJlcnJvciB0cmlnZ2VyZWQgZm9yIGluamVjdGlvbiBwb2ludCAl cyAoJXMpIiwKIAkJCSBuYW1lLCBhcmdzdHIpOwpAQCAtMjY5LDggKzI1NCw2IEBAIGluamVjdGlv bl9ub3RpY2UoY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgdm9pZCAqcHJpdmF0ZV9kYXRhLCB2b2lk ICphcmcpCiAJaWYgKCFpbmplY3Rpb25fcG9pbnRfYWxsb3dlZChjb25kaXRpb24pKQogCQlyZXR1 cm47CiAKLQlwZ3N0YXRfcmVwb3J0X2luaihuYW1lKTsKLQogCWlmIChhcmdzdHIpCiAJCWVsb2co Tk9USUNFLCAibm90aWNlIHRyaWdnZXJlZCBmb3IgaW5qZWN0aW9uIHBvaW50ICVzICglcykiLAog CQkJIG5hbWUsIGFyZ3N0cik7CkBAIC0yOTMsOCArMjc2LDYgQEAgaW5qZWN0aW9uX3dhaXQoY29u c3QgY2hhciAqbmFtZSwgY29uc3Qgdm9pZCAqcHJpdmF0ZV9kYXRhLCB2b2lkICphcmcpCiAJaWYg KCFpbmplY3Rpb25fcG9pbnRfYWxsb3dlZChjb25kaXRpb24pKQogCQlyZXR1cm47CiAKLQlwZ3N0 YXRfcmVwb3J0X2luaihuYW1lKTsKLQogCS8qCiAJICogVXNlIHRoZSBpbmplY3Rpb24gcG9pbnQg bmFtZSBmb3IgdGhpcyBjdXN0b20gd2FpdCBldmVudC4gIE5vdGUgdGhhdAogCSAqIHRoaXMgY3Vz dG9tIHdhaXQgZXZlbnQgbmFtZSBpcyBub3QgcmVsZWFzZWQsIGJ1dCB3ZSBkb24ndCBjYXJlIG11 Y2ggZm9yCkBAIC0zNzEsNyArMzUyLDYgQEAgaW5qZWN0aW9uX3BvaW50c19hdHRhY2goUEdfRlVO Q1RJT05fQVJHUykKIAkJY29uZGl0aW9uLnBpZCA9IE15UHJvY1BpZDsKIAl9CiAKLQlwZ3N0YXRf cmVwb3J0X2lual9maXhlZCgxLCAwLCAwLCAwLCAwKTsKIAlJbmplY3Rpb25Qb2ludEF0dGFjaChu YW1lLCAiaW5qZWN0aW9uX3BvaW50cyIsIGZ1bmN0aW9uLCAmY29uZGl0aW9uLAogCQkJCQkJIHNp emVvZihJbmplY3Rpb25Qb2ludENvbmRpdGlvbikpOwogCkBAIC0zODUsOSArMzY1LDYgQEAgaW5q ZWN0aW9uX3BvaW50c19hdHRhY2goUEdfRlVOQ1RJT05fQVJHUykKIAkJTWVtb3J5Q29udGV4dFN3 aXRjaFRvKG9sZGN0eCk7CiAJfQogCi0JLyogQWRkIGVudHJ5IGZvciBzdGF0cyAqLwotCXBnc3Rh dF9jcmVhdGVfaW5qKG5hbWUpOwotCiAJUEdfUkVUVVJOX1ZPSUQoKTsKIH0KIApAQCAtNDIyLDcg KzM5OSw2IEBAIGluamVjdGlvbl9wb2ludHNfYXR0YWNoX2Z1bmMoUEdfRlVOQ1RJT05fQVJHUykK IAkJcHJpdmF0ZV9kYXRhX3NpemUgPSBWQVJTSVpFX0FOWV9FWEhEUihwcml2YXRlX2RhdGEpOwog CX0KIAotCXBnc3RhdF9yZXBvcnRfaW5qX2ZpeGVkKDEsIDAsIDAsIDAsIDApOwogCWlmIChwcml2 YXRlX2RhdGEgIT0gTlVMTCkKIAkJSW5qZWN0aW9uUG9pbnRBdHRhY2gobmFtZSwgbGliX25hbWUs IGZ1bmN0aW9uLCBWQVJEQVRBX0FOWShwcml2YXRlX2RhdGEpLAogCQkJCQkJCSBwcml2YXRlX2Rh dGFfc2l6ZSk7CkBAIC00NDQsNyArNDIwLDYgQEAgaW5qZWN0aW9uX3BvaW50c19sb2FkKFBHX0ZV TkNUSU9OX0FSR1MpCiAJaWYgKGlual9zdGF0ZSA9PSBOVUxMKQogCQlpbmplY3Rpb25faW5pdF9z aG1lbSgpOwogCi0JcGdzdGF0X3JlcG9ydF9pbmpfZml4ZWQoMCwgMCwgMCwgMCwgMSk7CiAJSU5K RUNUSU9OX1BPSU5UX0xPQUQobmFtZSk7CiAKIAlQR19SRVRVUk5fVk9JRCgpOwpAQCAtNDY3LDcg KzQ0Miw2IEBAIGluamVjdGlvbl9wb2ludHNfcnVuKFBHX0ZVTkNUSU9OX0FSR1MpCiAJaWYgKCFQ R19BUkdJU05VTEwoMSkpCiAJCWFyZyA9IHRleHRfdG9fY3N0cmluZyhQR19HRVRBUkdfVEVYVF9Q UCgxKSk7CiAKLQlwZ3N0YXRfcmVwb3J0X2lual9maXhlZCgwLCAwLCAxLCAwLCAwKTsKIAlJTkpF Q1RJT05fUE9JTlQobmFtZSwgYXJnKTsKIAogCVBHX1JFVFVSTl9WT0lEKCk7CkBAIC00OTAsNyAr NDY0LDYgQEAgaW5qZWN0aW9uX3BvaW50c19jYWNoZWQoUEdfRlVOQ1RJT05fQVJHUykKIAlpZiAo IVBHX0FSR0lTTlVMTCgxKSkKIAkJYXJnID0gdGV4dF90b19jc3RyaW5nKFBHX0dFVEFSR19URVhU X1BQKDEpKTsKIAotCXBnc3RhdF9yZXBvcnRfaW5qX2ZpeGVkKDAsIDAsIDAsIDEsIDApOwogCUlO SkVDVElPTl9QT0lOVF9DQUNIRUQobmFtZSwgYXJnKTsKIAogCVBHX1JFVFVSTl9WT0lEKCk7CkBA IC01NjcsNyArNTQwLDYgQEAgaW5qZWN0aW9uX3BvaW50c19kZXRhY2goUEdfRlVOQ1RJT05fQVJH UykKIHsKIAljaGFyCSAgICpuYW1lID0gdGV4dF90b19jc3RyaW5nKFBHX0dFVEFSR19URVhUX1BQ KDApKTsKIAotCXBnc3RhdF9yZXBvcnRfaW5qX2ZpeGVkKDAsIDEsIDAsIDAsIDApOwogCWlmICgh SW5qZWN0aW9uUG9pbnREZXRhY2gobmFtZSkpCiAJCWVsb2coRVJST1IsICJjb3VsZCBub3QgZGV0 YWNoIGluamVjdGlvbiBwb2ludCBcIiVzXCIiLCBuYW1lKTsKIApAQCAtNTgxLDkgKzU1Myw2IEBA IGluamVjdGlvbl9wb2ludHNfZGV0YWNoKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCU1lbW9yeUNvbnRl eHRTd2l0Y2hUbyhvbGRjdHgpOwogCX0KIAotCS8qIFJlbW92ZSBzdGF0cyBlbnRyeSAqLwotCXBn c3RhdF9kcm9wX2luaihuYW1lKTsKLQogCVBHX1JFVFVSTl9WT0lEKCk7CiB9CiAKQEAgLTYyNSwz MiArNTk0LDE1IEBAIGluamVjdGlvbl9wb2ludHNfbGlzdChQR19GVU5DVElPTl9BUkdTKQogI3Vu ZGVmIE5VTV9JTkpFQ1RJT05fUE9JTlRTX0xJU1QKIH0KIAotCiB2b2lkCiBfUEdfaW5pdCh2b2lk KQogewogCWlmICghcHJvY2Vzc19zaGFyZWRfcHJlbG9hZF9saWJyYXJpZXNfaW5fcHJvZ3Jlc3Mp CiAJCXJldHVybjsKIAotCURlZmluZUN1c3RvbUJvb2xWYXJpYWJsZSgiaW5qZWN0aW9uX3BvaW50 cy5zdGF0cyIsCi0JCQkJCQkJICJFbmFibGVzIHN0YXRpc3RpY3MgZm9yIGluamVjdGlvbiBwb2lu dHMuIiwKLQkJCQkJCQkgTlVMTCwKLQkJCQkJCQkgJmlual9zdGF0c19lbmFibGVkLAotCQkJCQkJ CSBmYWxzZSwKLQkJCQkJCQkgUEdDX1BPU1RNQVNURVIsCi0JCQkJCQkJIDAsCi0JCQkJCQkJIE5V TEwsCi0JCQkJCQkJIE5VTEwsCi0JCQkJCQkJIE5VTEwpOwotCi0JTWFya0dVQ1ByZWZpeFJlc2Vy dmVkKCJpbmplY3Rpb25fcG9pbnRzIik7Ci0KIAkvKiBTaGFyZWQgbWVtb3J5IGluaXRpYWxpemF0 aW9uICovCiAJcHJldl9zaG1lbV9yZXF1ZXN0X2hvb2sgPSBzaG1lbV9yZXF1ZXN0X2hvb2s7CiAJ c2htZW1fcmVxdWVzdF9ob29rID0gaW5qZWN0aW9uX3NobWVtX3JlcXVlc3Q7CiAJcHJldl9zaG1l bV9zdGFydHVwX2hvb2sgPSBzaG1lbV9zdGFydHVwX2hvb2s7CiAJc2htZW1fc3RhcnR1cF9ob29r ID0gaW5qZWN0aW9uX3NobWVtX3N0YXJ0dXA7Ci0KLQlwZ3N0YXRfcmVnaXN0ZXJfaW5qKCk7Ci0J cGdzdGF0X3JlZ2lzdGVyX2lual9maXhlZCgpOwogfQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9k dWxlcy9pbmplY3Rpb25fcG9pbnRzL2luamVjdGlvbl9zdGF0cy5jIGIvc3JjL3Rlc3QvbW9kdWxl cy9pbmplY3Rpb25fcG9pbnRzL2luamVjdGlvbl9zdGF0cy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAxNThlMTYzMWFmOS4uMDAwMDAwMDAwMDAKLS0tIGEvc3JjL3Rlc3QvbW9kdWxl cy9pbmplY3Rpb25fcG9pbnRzL2luamVjdGlvbl9zdGF0cy5jCisrKyAvZGV2L251bGwKQEAgLTEs MjI4ICswLDAgQEAKLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqCi0gKiBpbmplY3Rpb25fc3RhdHMu YwotICoJCUNvZGUgZm9yIHN0YXRpc3RpY3Mgb2YgaW5qZWN0aW9uIHBvaW50cy4KLSAqCi0gKiBQ b3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxv cG1lbnQgR3JvdXAKLSAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0 aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCi0gKgotICogSURFTlRJRklDQVRJT04KLSAqCQlz cmMvdGVzdC9tb2R1bGVzL2luamVjdGlvbl9wb2ludHMvaW5qZWN0aW9uX3N0YXRzLmMKLSAqCi0g KiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCi0gKi8KLQotI2luY2x1ZGUgInBvc3RncmVzLmgiCi0KLSNpbmNs dWRlICJmbWdyLmgiCi0KLSNpbmNsdWRlICJjb21tb24vaGFzaGZuLmgiCi0jaW5jbHVkZSAiaW5q ZWN0aW9uX3N0YXRzLmgiCi0jaW5jbHVkZSAicGdzdGF0LmgiCi0jaW5jbHVkZSAidXRpbHMvYnVp bHRpbnMuaCIKLSNpbmNsdWRlICJ1dGlscy9wZ3N0YXRfaW50ZXJuYWwuaCIKLQotLyogU3RydWN0 dXJlcyBmb3Igc3RhdGlzdGljcyBvZiBpbmplY3Rpb24gcG9pbnRzICovCi10eXBlZGVmIHN0cnVj dCBQZ1N0YXRfU3RhdEluakVudHJ5Ci17Ci0JUGdTdGF0X0NvdW50ZXIgbnVtY2FsbHM7CS8qIG51 bWJlciBvZiB0aW1lcyBwb2ludCBoYXMgYmVlbiBydW4gKi8KLX0gUGdTdGF0X1N0YXRJbmpFbnRy eTsKLQotdHlwZWRlZiBzdHJ1Y3QgUGdTdGF0U2hhcmVkX0luamVjdGlvblBvaW50Ci17Ci0JUGdT dGF0U2hhcmVkX0NvbW1vbiBoZWFkZXI7Ci0JUGdTdGF0X1N0YXRJbmpFbnRyeSBzdGF0czsKLX0g UGdTdGF0U2hhcmVkX0luamVjdGlvblBvaW50OwotCi1zdGF0aWMgYm9vbCBpbmplY3Rpb25fc3Rh dHNfZmx1c2hfY2IoUGdTdGF0X0VudHJ5UmVmICplbnRyeV9yZWYsIGJvb2wgbm93YWl0KTsKLQot c3RhdGljIGNvbnN0IFBnU3RhdF9LaW5kSW5mbyBpbmplY3Rpb25fc3RhdHMgPSB7Ci0JLm5hbWUg PSAiaW5qZWN0aW9uX3BvaW50cyIsCi0JLmZpeGVkX2Ftb3VudCA9IGZhbHNlLAkJLyogQm91bmRl ZCBieSB0aGUgbnVtYmVyIG9mIHBvaW50cyAqLwotCS53cml0ZV90b19maWxlID0gdHJ1ZSwKLQku dHJhY2tfZW50cnlfY291bnQgPSB0cnVlLAotCi0JLyogSW5qZWN0aW9uIHBvaW50cyBhcmUgc3lz dGVtLXdpZGUgKi8KLQkuYWNjZXNzZWRfYWNyb3NzX2RhdGFiYXNlcyA9IHRydWUsCi0KLQkuc2hh cmVkX3NpemUgPSBzaXplb2YoUGdTdGF0U2hhcmVkX0luamVjdGlvblBvaW50KSwKLQkuc2hhcmVk X2RhdGFfb2ZmID0gb2Zmc2V0b2YoUGdTdGF0U2hhcmVkX0luamVjdGlvblBvaW50LCBzdGF0cyks Ci0JLnNoYXJlZF9kYXRhX2xlbiA9IHNpemVvZigoKFBnU3RhdFNoYXJlZF9JbmplY3Rpb25Qb2lu dCAqKSAwKS0+c3RhdHMpLAotCS5wZW5kaW5nX3NpemUgPSBzaXplb2YoUGdTdGF0X1N0YXRJbmpF bnRyeSksCi0JLmZsdXNoX3BlbmRpbmdfY2IgPSBpbmplY3Rpb25fc3RhdHNfZmx1c2hfY2IsCi19 OwotCi0vKgotICogQ29tcHV0ZSBzdGF0cyBlbnRyeSBpZHggZnJvbSBwb2ludCBuYW1lIHdpdGgg YW4gOC1ieXRlIGhhc2guCi0gKi8KLSNkZWZpbmUgUEdTVEFUX0lOSl9JRFgobmFtZSkgaGFzaF9i eXRlc19leHRlbmRlZCgoY29uc3QgdW5zaWduZWQgY2hhciAqKSBuYW1lLCBzdHJsZW4obmFtZSks IDApCi0KLS8qCi0gKiBLaW5kIElEIHJlc2VydmVkIGZvciBzdGF0aXN0aWNzIG9mIGluamVjdGlv biBwb2ludHMuCi0gKi8KLSNkZWZpbmUgUEdTVEFUX0tJTkRfSU5KRUNUSU9OCTI1Ci0KLS8qIFRy YWNrIGlmIHN0YXRzIGFyZSBsb2FkZWQgKi8KLXN0YXRpYyBib29sIGlual9zdGF0c19sb2FkZWQg PSBmYWxzZTsKLQotLyoKLSAqIENhbGxiYWNrIGZvciBzdGF0cyBoYW5kbGluZwotICovCi1zdGF0 aWMgYm9vbAotaW5qZWN0aW9uX3N0YXRzX2ZsdXNoX2NiKFBnU3RhdF9FbnRyeVJlZiAqZW50cnlf cmVmLCBib29sIG5vd2FpdCkKLXsKLQlQZ1N0YXRfU3RhdEluakVudHJ5ICpsb2NhbGVudDsKLQlQ Z1N0YXRTaGFyZWRfSW5qZWN0aW9uUG9pbnQgKnNoZnVuY2VudDsKLQotCWxvY2FsZW50ID0gKFBn U3RhdF9TdGF0SW5qRW50cnkgKikgZW50cnlfcmVmLT5wZW5kaW5nOwotCXNoZnVuY2VudCA9IChQ Z1N0YXRTaGFyZWRfSW5qZWN0aW9uUG9pbnQgKikgZW50cnlfcmVmLT5zaGFyZWRfc3RhdHM7Ci0K LQlpZiAoIXBnc3RhdF9sb2NrX2VudHJ5KGVudHJ5X3JlZiwgbm93YWl0KSkKLQkJcmV0dXJuIGZh bHNlOwotCi0Jc2hmdW5jZW50LT5zdGF0cy5udW1jYWxscyArPSBsb2NhbGVudC0+bnVtY2FsbHM7 Ci0KLQlwZ3N0YXRfdW5sb2NrX2VudHJ5KGVudHJ5X3JlZik7Ci0KLQlyZXR1cm4gdHJ1ZTsKLX0K LQotLyoKLSAqIFN1cHBvcnQgZnVuY3Rpb24gZm9yIHRoZSBTUUwtY2FsbGFibGUgcGdzdGF0KiBm dW5jdGlvbnMuICBSZXR1cm5zCi0gKiBhIHBvaW50ZXIgdG8gdGhlIGluamVjdGlvbiBwb2ludCBz dGF0aXN0aWNzIHN0cnVjdC4KLSAqLwotc3RhdGljIFBnU3RhdF9TdGF0SW5qRW50cnkgKgotcGdz dGF0X2ZldGNoX3N0YXRfaW5qZW50cnkoY29uc3QgY2hhciAqbmFtZSkKLXsKLQlQZ1N0YXRfU3Rh dEluakVudHJ5ICplbnRyeSA9IE5VTEw7Ci0KLQlpZiAoIWlual9zdGF0c19sb2FkZWQgfHwgIWlu al9zdGF0c19lbmFibGVkKQotCQlyZXR1cm4gTlVMTDsKLQotCS8qIENvbXBpbGUgdGhlIGxvb2t1 cCBrZXkgYXMgYSBoYXNoIG9mIHRoZSBwb2ludCBuYW1lICovCi0JZW50cnkgPSAoUGdTdGF0X1N0 YXRJbmpFbnRyeSAqKSBwZ3N0YXRfZmV0Y2hfZW50cnkoUEdTVEFUX0tJTkRfSU5KRUNUSU9OLAot CQkJCQkJCQkJCQkJCSAgIEludmFsaWRPaWQsCi0JCQkJCQkJCQkJCQkJICAgUEdTVEFUX0lOSl9J RFgobmFtZSkpOwotCXJldHVybiBlbnRyeTsKLX0KLQotLyoKLSAqIFdvcmtob3JzZSB0byBkbyB0 aGUgcmVnaXN0cmF0aW9uIHdvcmssIGNhbGxlZCBpbiBfUEdfaW5pdCgpLgotICovCi12b2lkCi1w Z3N0YXRfcmVnaXN0ZXJfaW5qKHZvaWQpCi17Ci0JcGdzdGF0X3JlZ2lzdGVyX2tpbmQoUEdTVEFU X0tJTkRfSU5KRUNUSU9OLCAmaW5qZWN0aW9uX3N0YXRzKTsKLQotCS8qIG1hcmsgc3RhdHMgYXMg bG9hZGVkICovCi0JaW5qX3N0YXRzX2xvYWRlZCA9IHRydWU7Ci19Ci0KLS8qCi0gKiBSZXBvcnQg aW5qZWN0aW9uIHBvaW50IGNyZWF0aW9uLgotICovCi12b2lkCi1wZ3N0YXRfY3JlYXRlX2luaihj b25zdCBjaGFyICpuYW1lKQotewotCVBnU3RhdF9FbnRyeVJlZiAqZW50cnlfcmVmOwotCVBnU3Rh dFNoYXJlZF9JbmplY3Rpb25Qb2ludCAqc2hzdGF0ZW50OwotCi0JLyogbGVhdmUgaWYgZGlzYWJs ZWQgKi8KLQlpZiAoIWlual9zdGF0c19sb2FkZWQgfHwgIWlual9zdGF0c19lbmFibGVkKQotCQly ZXR1cm47Ci0KLQllbnRyeV9yZWYgPSBwZ3N0YXRfcHJlcF9wZW5kaW5nX2VudHJ5KFBHU1RBVF9L SU5EX0lOSkVDVElPTiwgSW52YWxpZE9pZCwKLQkJCQkJCQkJCQkgIFBHU1RBVF9JTkpfSURYKG5h bWUpLCBOVUxMKTsKLQotCXNoc3RhdGVudCA9IChQZ1N0YXRTaGFyZWRfSW5qZWN0aW9uUG9pbnQg KikgZW50cnlfcmVmLT5zaGFyZWRfc3RhdHM7Ci0KLQkvKiBpbml0aWFsaXplIHNoYXJlZCBtZW1v cnkgZGF0YSAqLwotCW1lbXNldCgmc2hzdGF0ZW50LT5zdGF0cywgMCwgc2l6ZW9mKHNoc3RhdGVu dC0+c3RhdHMpKTsKLX0KLQotLyoKLSAqIFJlcG9ydCBpbmplY3Rpb24gcG9pbnQgZHJvcC4KLSAq Lwotdm9pZAotcGdzdGF0X2Ryb3BfaW5qKGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0JLyogbGVhdmUg aWYgZGlzYWJsZWQgKi8KLQlpZiAoIWlual9zdGF0c19sb2FkZWQgfHwgIWlual9zdGF0c19lbmFi bGVkKQotCQlyZXR1cm47Ci0KLQlpZiAoIXBnc3RhdF9kcm9wX2VudHJ5KFBHU1RBVF9LSU5EX0lO SkVDVElPTiwgSW52YWxpZE9pZCwKLQkJCQkJCSAgIFBHU1RBVF9JTkpfSURYKG5hbWUpKSkKLQkJ cGdzdGF0X3JlcXVlc3RfZW50cnlfcmVmc19nYygpOwotfQotCi0vKgotICogUmVwb3J0IHN0YXRp c3RpY3MgZm9yIGluamVjdGlvbiBwb2ludC4KLSAqCi0gKiBUaGlzIGlzIHNpbXBsZSBiZWNhdXNl IHRoZSBzZXQgb2Ygc3RhdHMgdG8gcmVwb3J0IGN1cnJlbnRseSBpcyBzaW1wbGU6Ci0gKiB0cmFj ayB0aGUgbnVtYmVyIG9mIHRpbWVzIGEgcG9pbnQgaGFzIGJlZW4gcnVuLgotICovCi12b2lkCi1w Z3N0YXRfcmVwb3J0X2luaihjb25zdCBjaGFyICpuYW1lKQotewotCVBnU3RhdF9FbnRyeVJlZiAq ZW50cnlfcmVmOwotCVBnU3RhdF9TdGF0SW5qRW50cnkgKnBlbmRpbmc7Ci0KLQkvKiBsZWF2ZSBp ZiBkaXNhYmxlZCAqLwotCWlmICghaW5qX3N0YXRzX2xvYWRlZCB8fCAhaW5qX3N0YXRzX2VuYWJs ZWQpCi0JCXJldHVybjsKLQotCWVudHJ5X3JlZiA9IHBnc3RhdF9wcmVwX3BlbmRpbmdfZW50cnko UEdTVEFUX0tJTkRfSU5KRUNUSU9OLCBJbnZhbGlkT2lkLAotCQkJCQkJCQkJCSAgUEdTVEFUX0lO Sl9JRFgobmFtZSksIE5VTEwpOwotCi0JcGVuZGluZyA9IChQZ1N0YXRfU3RhdEluakVudHJ5ICop IGVudHJ5X3JlZi0+cGVuZGluZzsKLQotCS8qIFVwZGF0ZSB0aGUgaW5qZWN0aW9uIHBvaW50IHBl bmRpbmcgc3RhdGlzdGljcyAqLwotCXBlbmRpbmctPm51bWNhbGxzKys7Ci19Ci0KLS8qCi0gKiBT UUwgZnVuY3Rpb24gcmV0dXJuaW5nIHRoZSBudW1iZXIgb2YgdGltZXMgYW4gaW5qZWN0aW9uIHBv aW50Ci0gKiBoYXMgYmVlbiBjYWxsZWQuCi0gKi8KLVBHX0ZVTkNUSU9OX0lORk9fVjEoaW5qZWN0 aW9uX3BvaW50c19zdGF0c19udW1jYWxscyk7Ci1EYXR1bQotaW5qZWN0aW9uX3BvaW50c19zdGF0 c19udW1jYWxscyhQR19GVU5DVElPTl9BUkdTKQotewotCWNoYXIJICAgKm5hbWUgPSB0ZXh0X3Rv X2NzdHJpbmcoUEdfR0VUQVJHX1RFWFRfUFAoMCkpOwotCVBnU3RhdF9TdGF0SW5qRW50cnkgKmVu dHJ5ID0gcGdzdGF0X2ZldGNoX3N0YXRfaW5qZW50cnkobmFtZSk7Ci0KLQlpZiAoZW50cnkgPT0g TlVMTCkKLQkJUEdfUkVUVVJOX05VTEwoKTsKLQotCVBHX1JFVFVSTl9JTlQ2NChlbnRyeS0+bnVt Y2FsbHMpOwotfQotCi0vKgotICogU1FMIGZ1bmN0aW9uIHJldHVybmluZyB0aGUgbnVtYmVyIG9m IGVudHJpZXMgYWxsb2NhdGVkIGZvciBpbmplY3Rpb24KLSAqIHBvaW50cyBpbiB0aGUgc2hhcmVk IGhhc2h0YWJsZSBvZiBwZ3N0YXRzLgotICovCi1QR19GVU5DVElPTl9JTkZPX1YxKGluamVjdGlv bl9wb2ludHNfc3RhdHNfY291bnQpOwotRGF0dW0KLWluamVjdGlvbl9wb2ludHNfc3RhdHNfY291 bnQoUEdfRlVOQ1RJT05fQVJHUykKLXsKLQlQR19SRVRVUk5fSU5UNjQocGdzdGF0X2dldF9lbnRy eV9jb3VudChQR1NUQVRfS0lORF9JTkpFQ1RJT04pKTsKLX0KLQotLyogT25seSB1c2VkIGJ5IGlu amVjdGlvbl9wb2ludHNfc3RhdHNfZHJvcCgpICovCi1zdGF0aWMgYm9vbAotbWF0Y2hfaW5qX2Vu dHJpZXMoUGdTdGF0U2hhcmVkX0hhc2hFbnRyeSAqZW50cnksIERhdHVtIG1hdGNoX2RhdGEpCi17 Ci0JcmV0dXJuIGVudHJ5LT5rZXkua2luZCA9PSBQR1NUQVRfS0lORF9JTkpFQ1RJT047Ci19Ci0K LS8qCi0gKiBTUUwgZnVuY3Rpb24gdGhhdCBkcm9wcyBhbGwgaW5qZWN0aW9uIHBvaW50IHN0YXRp c3RpY3MuCi0gKi8KLVBHX0ZVTkNUSU9OX0lORk9fVjEoaW5qZWN0aW9uX3BvaW50c19zdGF0c19k cm9wKTsKLURhdHVtCi1pbmplY3Rpb25fcG9pbnRzX3N0YXRzX2Ryb3AoUEdfRlVOQ1RJT05fQVJH UykKLXsKLQlwZ3N0YXRfZHJvcF9tYXRjaGluZ19lbnRyaWVzKG1hdGNoX2lual9lbnRyaWVzLCAw KTsKLQotCVBHX1JFVFVSTl9WT0lEKCk7Ci19CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVz L2luamVjdGlvbl9wb2ludHMvaW5qZWN0aW9uX3N0YXRzLmggYi9zcmMvdGVzdC9tb2R1bGVzL2lu amVjdGlvbl9wb2ludHMvaW5qZWN0aW9uX3N0YXRzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IGJhMzEwYzUyYzdmLi4wMDAwMDAwMDAwMAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL2lu amVjdGlvbl9wb2ludHMvaW5qZWN0aW9uX3N0YXRzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNSAr MCwwIEBACi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKgotICogaW5qZWN0aW9uX3N0YXRzLmgKLSAq CQlEZWZpbml0aW9ucyBmb3Igc3RhdGlzdGljcyBvZiBpbmplY3Rpb24gcG9pbnRzLgotICoKLSAq IFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZl bG9wbWVudCBHcm91cAotICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9m IHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKLSAqCi0gKiBJREVOVElGSUNBVElPTgotICoJ CXNyYy90ZXN0L21vZHVsZXMvaW5qZWN0aW9uX3BvaW50cy9pbmplY3Rpb25fc3RhdHMuaAotICoK LSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqLwotCi0jaWZuZGVmIElOSkVDVElPTl9TVEFUUwotI2Rl ZmluZSBJTkpFQ1RJT05fU1RBVFMKLQotLyogR1VDIHZhcmlhYmxlICovCi1leHRlcm4gYm9vbCBp bmpfc3RhdHNfZW5hYmxlZDsKLQotLyogaW5qZWN0aW9uX3N0YXRzLmMgKi8KLWV4dGVybiB2b2lk IHBnc3RhdF9yZWdpc3Rlcl9pbmoodm9pZCk7Ci1leHRlcm4gdm9pZCBwZ3N0YXRfY3JlYXRlX2lu aihjb25zdCBjaGFyICpuYW1lKTsKLWV4dGVybiB2b2lkIHBnc3RhdF9kcm9wX2luaihjb25zdCBj aGFyICpuYW1lKTsKLWV4dGVybiB2b2lkIHBnc3RhdF9yZXBvcnRfaW5qKGNvbnN0IGNoYXIgKm5h bWUpOwotCi0vKiBpbmplY3Rpb25fc3RhdHNfZml4ZWQuYyAqLwotZXh0ZXJuIHZvaWQgcGdzdGF0 X3JlZ2lzdGVyX2lual9maXhlZCh2b2lkKTsKLWV4dGVybiB2b2lkIHBnc3RhdF9yZXBvcnRfaW5q X2ZpeGVkKHVpbnQzMiBudW1hdHRhY2gsCi0JCQkJCQkJCQl1aW50MzIgbnVtZGV0YWNoLAotCQkJ CQkJCQkJdWludDMyIG51bXJ1biwKLQkJCQkJCQkJCXVpbnQzMiBudW1jYWNoZWQsCi0JCQkJCQkJ CQl1aW50MzIgbnVtbG9hZGVkKTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1 bGVzL2luamVjdGlvbl9wb2ludHMvaW5qZWN0aW9uX3N0YXRzX2ZpeGVkLmMgYi9zcmMvdGVzdC9t b2R1bGVzL2luamVjdGlvbl9wb2ludHMvaW5qZWN0aW9uX3N0YXRzX2ZpeGVkLmMKZGVsZXRlZCBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI0OTNlOGY3N2EzLi4wMDAwMDAwMDAwMAotLS0gYS9zcmMv dGVzdC9tb2R1bGVzL2luamVjdGlvbl9wb2ludHMvaW5qZWN0aW9uX3N0YXRzX2ZpeGVkLmMKKysr IC9kZXYvbnVsbApAQCAtMSwyMTQgKzAsMCBAQAotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICoKLSAq IGluamVjdGlvbl9zdGF0c19maXhlZC5jCi0gKgkJQ29kZSBmb3IgZml4ZWQtbnVtYmVyZWQgc3Rh dGlzdGljcyBvZiBpbmplY3Rpb24gcG9pbnRzLgotICoKLSAqIFBvcnRpb25zIENvcHlyaWdodCAo YykgMTk5Ni0yMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAotICogUG9y dGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENh bGlmb3JuaWEKLSAqCi0gKiBJREVOVElGSUNBVElPTgotICoJCXNyYy90ZXN0L21vZHVsZXMvaW5q ZWN0aW9uX3BvaW50cy9pbmplY3Rpb25fc3RhdHNfZml4ZWQuYwotICoKLSAqIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KLSAqLwotCi0jaW5jbHVkZSAicG9zdGdyZXMuaCIKLQotI2luY2x1ZGUgImZtZ3IuaCIK LQotI2luY2x1ZGUgImFjY2Vzcy9odHVwX2RldGFpbHMuaCIKLSNpbmNsdWRlICJjb21tb24vaGFz aGZuLmgiCi0jaW5jbHVkZSAiZnVuY2FwaS5oIgotI2luY2x1ZGUgImluamVjdGlvbl9zdGF0cy5o IgotI2luY2x1ZGUgInBnc3RhdC5oIgotI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCi0jaW5j bHVkZSAidXRpbHMvcGdzdGF0X2ludGVybmFsLmgiCi0KLS8qIFN0cnVjdHVyZXMgZm9yIHN0YXRp c3RpY3Mgb2YgaW5qZWN0aW9uIHBvaW50cywgZml4ZWQtc2l6ZSAqLwotdHlwZWRlZiBzdHJ1Y3Qg UGdTdGF0X1N0YXRJbmpGaXhlZEVudHJ5Ci17Ci0JUGdTdGF0X0NvdW50ZXIgbnVtYXR0YWNoOwkv KiBudW1iZXIgb2YgcG9pbnRzIGF0dGFjaGVkICovCi0JUGdTdGF0X0NvdW50ZXIgbnVtZGV0YWNo OwkvKiBudW1iZXIgb2YgcG9pbnRzIGRldGFjaGVkICovCi0JUGdTdGF0X0NvdW50ZXIgbnVtcnVu OwkJLyogbnVtYmVyIG9mIHBvaW50cyBydW4gKi8KLQlQZ1N0YXRfQ291bnRlciBudW1jYWNoZWQ7 CS8qIG51bWJlciBvZiBwb2ludHMgY2FjaGVkICovCi0JUGdTdGF0X0NvdW50ZXIgbnVtbG9hZGVk OwkvKiBudW1iZXIgb2YgcG9pbnRzIGxvYWRlZCAqLwotCVRpbWVzdGFtcFR6IHN0YXRfcmVzZXRf dGltZXN0YW1wOwotfSBQZ1N0YXRfU3RhdEluakZpeGVkRW50cnk7Ci0KLXR5cGVkZWYgc3RydWN0 IFBnU3RhdFNoYXJlZF9JbmplY3Rpb25Qb2ludEZpeGVkCi17Ci0JTFdMb2NrCQlsb2NrOwkJCS8q IHByb3RlY3RzIGFsbCB0aGUgY291bnRlcnMgKi8KLQl1aW50MzIJCWNoYW5nZWNvdW50OwotCVBn U3RhdF9TdGF0SW5qRml4ZWRFbnRyeSBzdGF0czsKLQlQZ1N0YXRfU3RhdEluakZpeGVkRW50cnkg cmVzZXRfb2Zmc2V0OwotfSBQZ1N0YXRTaGFyZWRfSW5qZWN0aW9uUG9pbnRGaXhlZDsKLQotLyog Q2FsbGJhY2tzIGZvciBmaXhlZC1udW1iZXJlZCBzdGF0cyAqLwotc3RhdGljIHZvaWQgaW5qZWN0 aW9uX3N0YXRzX2ZpeGVkX2luaXRfc2htZW1fY2Iodm9pZCAqc3RhdHMpOwotc3RhdGljIHZvaWQg aW5qZWN0aW9uX3N0YXRzX2ZpeGVkX3Jlc2V0X2FsbF9jYihUaW1lc3RhbXBUeiB0cyk7Ci1zdGF0 aWMgdm9pZCBpbmplY3Rpb25fc3RhdHNfZml4ZWRfc25hcHNob3RfY2Iodm9pZCk7Ci0KLXN0YXRp YyBjb25zdCBQZ1N0YXRfS2luZEluZm8gaW5qZWN0aW9uX3N0YXRzX2ZpeGVkID0gewotCS5uYW1l ID0gImluamVjdGlvbl9wb2ludHNfZml4ZWQiLAotCS5maXhlZF9hbW91bnQgPSB0cnVlLAotCS53 cml0ZV90b19maWxlID0gdHJ1ZSwKLQotCS5zaGFyZWRfc2l6ZSA9IHNpemVvZihQZ1N0YXRfU3Rh dEluakZpeGVkRW50cnkpLAotCS5zaGFyZWRfZGF0YV9vZmYgPSBvZmZzZXRvZihQZ1N0YXRTaGFy ZWRfSW5qZWN0aW9uUG9pbnRGaXhlZCwgc3RhdHMpLAotCS5zaGFyZWRfZGF0YV9sZW4gPSBzaXpl b2YoKChQZ1N0YXRTaGFyZWRfSW5qZWN0aW9uUG9pbnRGaXhlZCAqKSAwKS0+c3RhdHMpLAotCi0J LmluaXRfc2htZW1fY2IgPSBpbmplY3Rpb25fc3RhdHNfZml4ZWRfaW5pdF9zaG1lbV9jYiwKLQku cmVzZXRfYWxsX2NiID0gaW5qZWN0aW9uX3N0YXRzX2ZpeGVkX3Jlc2V0X2FsbF9jYiwKLQkuc25h cHNob3RfY2IgPSBpbmplY3Rpb25fc3RhdHNfZml4ZWRfc25hcHNob3RfY2IsCi19OwotCi0vKgot ICogS2luZCBJRCByZXNlcnZlZCBmb3Igc3RhdGlzdGljcyBvZiBpbmplY3Rpb24gcG9pbnRzLgot ICovCi0jZGVmaW5lIFBHU1RBVF9LSU5EX0lOSkVDVElPTl9GSVhFRAkyNgotCi0vKiBUcmFjayBp ZiBmaXhlZC1udW1iZXJlZCBzdGF0cyBhcmUgbG9hZGVkICovCi1zdGF0aWMgYm9vbCBpbmpfZml4 ZWRfbG9hZGVkID0gZmFsc2U7Ci0KLXN0YXRpYyB2b2lkCi1pbmplY3Rpb25fc3RhdHNfZml4ZWRf aW5pdF9zaG1lbV9jYih2b2lkICpzdGF0cykKLXsKLQlQZ1N0YXRTaGFyZWRfSW5qZWN0aW9uUG9p bnRGaXhlZCAqc3RhdHNfc2htZW0gPQotCQkoUGdTdGF0U2hhcmVkX0luamVjdGlvblBvaW50Rml4 ZWQgKikgc3RhdHM7Ci0KLQlMV0xvY2tJbml0aWFsaXplKCZzdGF0c19zaG1lbS0+bG9jaywgTFdU UkFOQ0hFX1BHU1RBVFNfREFUQSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1pbmplY3Rpb25fc3RhdHNf Zml4ZWRfcmVzZXRfYWxsX2NiKFRpbWVzdGFtcFR6IHRzKQotewotCVBnU3RhdFNoYXJlZF9Jbmpl Y3Rpb25Qb2ludEZpeGVkICpzdGF0c19zaG1lbSA9Ci0JCXBnc3RhdF9nZXRfY3VzdG9tX3NobWVt X2RhdGEoUEdTVEFUX0tJTkRfSU5KRUNUSU9OX0ZJWEVEKTsKLQotCUxXTG9ja0FjcXVpcmUoJnN0 YXRzX3NobWVtLT5sb2NrLCBMV19FWENMVVNJVkUpOwotCXBnc3RhdF9jb3B5X2NoYW5nZWNvdW50 ZWRfc3RhdHMoJnN0YXRzX3NobWVtLT5yZXNldF9vZmZzZXQsCi0JCQkJCQkJCQkmc3RhdHNfc2ht ZW0tPnN0YXRzLAotCQkJCQkJCQkJc2l6ZW9mKHN0YXRzX3NobWVtLT5zdGF0cyksCi0JCQkJCQkJ CQkmc3RhdHNfc2htZW0tPmNoYW5nZWNvdW50KTsKLQlzdGF0c19zaG1lbS0+c3RhdHMuc3RhdF9y ZXNldF90aW1lc3RhbXAgPSB0czsKLQlMV0xvY2tSZWxlYXNlKCZzdGF0c19zaG1lbS0+bG9jayk7 Ci19Ci0KLXN0YXRpYyB2b2lkCi1pbmplY3Rpb25fc3RhdHNfZml4ZWRfc25hcHNob3RfY2Iodm9p ZCkKLXsKLQlQZ1N0YXRTaGFyZWRfSW5qZWN0aW9uUG9pbnRGaXhlZCAqc3RhdHNfc2htZW0gPQot CQlwZ3N0YXRfZ2V0X2N1c3RvbV9zaG1lbV9kYXRhKFBHU1RBVF9LSU5EX0lOSkVDVElPTl9GSVhF RCk7Ci0JUGdTdGF0X1N0YXRJbmpGaXhlZEVudHJ5ICpzdGF0X3NuYXAgPQotCQlwZ3N0YXRfZ2V0 X2N1c3RvbV9zbmFwc2hvdF9kYXRhKFBHU1RBVF9LSU5EX0lOSkVDVElPTl9GSVhFRCk7Ci0JUGdT dGF0X1N0YXRJbmpGaXhlZEVudHJ5ICpyZXNldF9vZmZzZXQgPSAmc3RhdHNfc2htZW0tPnJlc2V0 X29mZnNldDsKLQlQZ1N0YXRfU3RhdEluakZpeGVkRW50cnkgcmVzZXQ7Ci0KLQlwZ3N0YXRfY29w eV9jaGFuZ2Vjb3VudGVkX3N0YXRzKHN0YXRfc25hcCwKLQkJCQkJCQkJCSZzdGF0c19zaG1lbS0+ c3RhdHMsCi0JCQkJCQkJCQlzaXplb2Yoc3RhdHNfc2htZW0tPnN0YXRzKSwKLQkJCQkJCQkJCSZz dGF0c19zaG1lbS0+Y2hhbmdlY291bnQpOwotCi0JTFdMb2NrQWNxdWlyZSgmc3RhdHNfc2htZW0t PmxvY2ssIExXX1NIQVJFRCk7Ci0JbWVtY3B5KCZyZXNldCwgcmVzZXRfb2Zmc2V0LCBzaXplb2Yo c3RhdHNfc2htZW0tPnN0YXRzKSk7Ci0JTFdMb2NrUmVsZWFzZSgmc3RhdHNfc2htZW0tPmxvY2sp OwotCi0JLyogY29tcGVuc2F0ZSBieSByZXNldCBvZmZzZXRzICovCi0jZGVmaW5lIEZJWEVEX0NP TVAoZmxkKSBzdGF0X3NuYXAtPmZsZCAtPSByZXNldC5mbGQ7Ci0JRklYRURfQ09NUChudW1hdHRh Y2gpOwotCUZJWEVEX0NPTVAobnVtZGV0YWNoKTsKLQlGSVhFRF9DT01QKG51bXJ1bik7Ci0JRklY RURfQ09NUChudW1jYWNoZWQpOwotCUZJWEVEX0NPTVAobnVtbG9hZGVkKTsKLSN1bmRlZiBGSVhF RF9DT01QCi19Ci0KLS8qCi0gKiBXb3JraG9yc2UgdG8gZG8gdGhlIHJlZ2lzdHJhdGlvbiB3b3Jr LCBjYWxsZWQgaW4gX1BHX2luaXQoKS4KLSAqLwotdm9pZAotcGdzdGF0X3JlZ2lzdGVyX2lual9m aXhlZCh2b2lkKQotewotCXBnc3RhdF9yZWdpc3Rlcl9raW5kKFBHU1RBVF9LSU5EX0lOSkVDVElP Tl9GSVhFRCwgJmluamVjdGlvbl9zdGF0c19maXhlZCk7Ci0KLQkvKiBtYXJrIHN0YXRzIGFzIGxv YWRlZCAqLwotCWlual9maXhlZF9sb2FkZWQgPSB0cnVlOwotfQotCi0vKgotICogUmVwb3J0IGZp eGVkIG51bWJlciBvZiBzdGF0aXN0aWNzIGZvciBhbiBpbmplY3Rpb24gcG9pbnQuCi0gKi8KLXZv aWQKLXBnc3RhdF9yZXBvcnRfaW5qX2ZpeGVkKHVpbnQzMiBudW1hdHRhY2gsCi0JCQkJCQl1aW50 MzIgbnVtZGV0YWNoLAotCQkJCQkJdWludDMyIG51bXJ1biwKLQkJCQkJCXVpbnQzMiBudW1jYWNo ZWQsCi0JCQkJCQl1aW50MzIgbnVtbG9hZGVkKQotewotCVBnU3RhdFNoYXJlZF9JbmplY3Rpb25Q b2ludEZpeGVkICpzdGF0c19zaG1lbTsKLQotCS8qIGxlYXZlIGlmIGRpc2FibGVkICovCi0JaWYg KCFpbmpfZml4ZWRfbG9hZGVkIHx8ICFpbmpfc3RhdHNfZW5hYmxlZCkKLQkJcmV0dXJuOwotCi0J c3RhdHNfc2htZW0gPSBwZ3N0YXRfZ2V0X2N1c3RvbV9zaG1lbV9kYXRhKFBHU1RBVF9LSU5EX0lO SkVDVElPTl9GSVhFRCk7Ci0KLQlMV0xvY2tBY3F1aXJlKCZzdGF0c19zaG1lbS0+bG9jaywgTFdf RVhDTFVTSVZFKTsKLQotCXBnc3RhdF9iZWdpbl9jaGFuZ2Vjb3VudF93cml0ZSgmc3RhdHNfc2ht ZW0tPmNoYW5nZWNvdW50KTsKLQlzdGF0c19zaG1lbS0+c3RhdHMubnVtYXR0YWNoICs9IG51bWF0 dGFjaDsKLQlzdGF0c19zaG1lbS0+c3RhdHMubnVtZGV0YWNoICs9IG51bWRldGFjaDsKLQlzdGF0 c19zaG1lbS0+c3RhdHMubnVtcnVuICs9IG51bXJ1bjsKLQlzdGF0c19zaG1lbS0+c3RhdHMubnVt Y2FjaGVkICs9IG51bWNhY2hlZDsKLQlzdGF0c19zaG1lbS0+c3RhdHMubnVtbG9hZGVkICs9IG51 bWxvYWRlZDsKLQlwZ3N0YXRfZW5kX2NoYW5nZWNvdW50X3dyaXRlKCZzdGF0c19zaG1lbS0+Y2hh bmdlY291bnQpOwotCi0JTFdMb2NrUmVsZWFzZSgmc3RhdHNfc2htZW0tPmxvY2spOwotfQotCi0v KgotICogU1FMIGZ1bmN0aW9uIHJldHVybmluZyBmaXhlZC1udW1iZXJlZCBzdGF0aXN0aWNzIGZv ciBpbmplY3Rpb24gcG9pbnRzLgotICovCi1QR19GVU5DVElPTl9JTkZPX1YxKGluamVjdGlvbl9w b2ludHNfc3RhdHNfZml4ZWQpOwotRGF0dW0KLWluamVjdGlvbl9wb2ludHNfc3RhdHNfZml4ZWQo UEdfRlVOQ1RJT05fQVJHUykKLXsKLQlUdXBsZURlc2MJdHVwZGVzYzsKLQlEYXR1bQkJdmFsdWVz WzVdID0gezB9OwotCWJvb2wJCW51bGxzWzVdID0gezB9OwotCVBnU3RhdF9TdGF0SW5qRml4ZWRF bnRyeSAqc3RhdHM7Ci0KLQlpZiAoIWlual9maXhlZF9sb2FkZWQgfHwgIWlual9zdGF0c19lbmFi bGVkKQotCQlQR19SRVRVUk5fTlVMTCgpOwotCi0JcGdzdGF0X3NuYXBzaG90X2ZpeGVkKFBHU1RB VF9LSU5EX0lOSkVDVElPTl9GSVhFRCk7Ci0Jc3RhdHMgPSBwZ3N0YXRfZ2V0X2N1c3RvbV9zbmFw c2hvdF9kYXRhKFBHU1RBVF9LSU5EX0lOSkVDVElPTl9GSVhFRCk7Ci0KLQkvKiBJbml0aWFsaXNl IGF0dHJpYnV0ZXMgaW5mb3JtYXRpb24gaW4gdGhlIHR1cGxlIGRlc2NyaXB0b3IgKi8KLQl0dXBk ZXNjID0gQ3JlYXRlVGVtcGxhdGVUdXBsZURlc2MoNSk7Ci0JVHVwbGVEZXNjSW5pdEVudHJ5KHR1 cGRlc2MsIChBdHRyTnVtYmVyKSAxLCAibnVtYXR0YWNoIiwKLQkJCQkJICAgSU5UOE9JRCwgLTEs IDApOwotCVR1cGxlRGVzY0luaXRFbnRyeSh0dXBkZXNjLCAoQXR0ck51bWJlcikgMiwgIm51bWRl dGFjaCIsCi0JCQkJCSAgIElOVDhPSUQsIC0xLCAwKTsKLQlUdXBsZURlc2NJbml0RW50cnkodHVw ZGVzYywgKEF0dHJOdW1iZXIpIDMsICJudW1ydW4iLAotCQkJCQkgICBJTlQ4T0lELCAtMSwgMCk7 Ci0JVHVwbGVEZXNjSW5pdEVudHJ5KHR1cGRlc2MsIChBdHRyTnVtYmVyKSA0LCAibnVtY2FjaGVk IiwKLQkJCQkJICAgSU5UOE9JRCwgLTEsIDApOwotCVR1cGxlRGVzY0luaXRFbnRyeSh0dXBkZXNj LCAoQXR0ck51bWJlcikgNSwgIm51bWxvYWRlZCIsCi0JCQkJCSAgIElOVDhPSUQsIC0xLCAwKTsK LQlCbGVzc1R1cGxlRGVzYyh0dXBkZXNjKTsKLQotCXZhbHVlc1swXSA9IEludDY0R2V0RGF0dW0o c3RhdHMtPm51bWF0dGFjaCk7Ci0JdmFsdWVzWzFdID0gSW50NjRHZXREYXR1bShzdGF0cy0+bnVt ZGV0YWNoKTsKLQl2YWx1ZXNbMl0gPSBJbnQ2NEdldERhdHVtKHN0YXRzLT5udW1ydW4pOwotCXZh bHVlc1szXSA9IEludDY0R2V0RGF0dW0oc3RhdHMtPm51bWNhY2hlZCk7Ci0JdmFsdWVzWzRdID0g SW50NjRHZXREYXR1bShzdGF0cy0+bnVtbG9hZGVkKTsKLQludWxsc1swXSA9IGZhbHNlOwotCW51 bGxzWzFdID0gZmFsc2U7Ci0JbnVsbHNbMl0gPSBmYWxzZTsKLQludWxsc1szXSA9IGZhbHNlOwot CW51bGxzWzRdID0gZmFsc2U7Ci0KLQkvKiBSZXR1cm5zIHRoZSByZWNvcmQgYXMgRGF0dW0gKi8K LQlQR19SRVRVUk5fREFUVU0oSGVhcFR1cGxlR2V0RGF0dW0oaGVhcF9mb3JtX3R1cGxlKHR1cGRl c2MsIHZhbHVlcywgbnVsbHMpKSk7Ci19CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL2lu amVjdGlvbl9wb2ludHMvbWVzb24uYnVpbGQgYi9zcmMvdGVzdC9tb2R1bGVzL2luamVjdGlvbl9w b2ludHMvbWVzb24uYnVpbGQKaW5kZXggMWEyYWY4YTI2YzQuLjhkNmY2NjIwNDBkIDEwMDY0NAot LS0gYS9zcmMvdGVzdC9tb2R1bGVzL2luamVjdGlvbl9wb2ludHMvbWVzb24uYnVpbGQKKysrIGIv c3JjL3Rlc3QvbW9kdWxlcy9pbmplY3Rpb25fcG9pbnRzL21lc29uLmJ1aWxkCkBAIC02LDggKzYs NiBAQCBlbmRpZgogCiBpbmplY3Rpb25fcG9pbnRzX3NvdXJjZXMgPSBmaWxlcygKICAgJ2luamVj dGlvbl9wb2ludHMuYycsCi0gICdpbmplY3Rpb25fc3RhdHMuYycsCi0gICdpbmplY3Rpb25fc3Rh dHNfZml4ZWQuYycsCiAgICdyZWdyZXNzX2luamVjdGlvbi5jJywKICkKIApAQCAtNTgsMTQgKzU2 LDQgQEAgdGVzdHMgKz0gewogICAgICMgU29tZSB0ZXN0cyB3YWl0IGZvciBhbGwgc25hcHNob3Rz LCBzbyBhdm9pZCBwYXJhbGxlbCBleGVjdXRpb24KICAgICAncnVubmluZ2NoZWNrLXBhcmFsbGVs JzogZmFsc2UsCiAgIH0sCi0gICd0YXAnOiB7Ci0gICAgJ2Vudic6IHsKLSAgICAgICdlbmFibGVf aW5qZWN0aW9uX3BvaW50cyc6IGdldF9vcHRpb24oJ2luamVjdGlvbl9wb2ludHMnKSA/ICd5ZXMn IDogJ25vJywKLSAgICB9LAotICAgICd0ZXN0cyc6IFsKLSAgICAgICd0LzAwMV9zdGF0cy5wbCcs Ci0gICAgXSwKLSAgICAjIFRoZSBpbmplY3Rpb24gcG9pbnRzIGFyZSBjbHVzdGVyLXdpZGUsIHNv IGRpc2FibGUgaW5zdGFsbGNoZWNrCi0gICAgJ3J1bm5pbmdjaGVjayc6IGZhbHNlLAotICB9LAog fQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9pbmplY3Rpb25fcG9pbnRzL3QvMDAxX3N0 YXRzLnBsIGIvc3JjL3Rlc3QvbW9kdWxlcy9pbmplY3Rpb25fcG9pbnRzL3QvMDAxX3N0YXRzLnBs CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0N2FiNThkMGU5Yi4uMDAwMDAwMDAwMDAK LS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy9pbmplY3Rpb25fcG9pbnRzL3QvMDAxX3N0YXRzLnBsCisr KyAvZGV2L251bGwKQEAgLTEsMTAzICswLDAgQEAKLQotIyBDb3B5cmlnaHQgKGMpIDIwMjQtMjAy NSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKLQotIyBUZXN0cyBmb3IgQ3Vz dG9tIEN1bXVsYXRpdmUgU3RhdGlzdGljcy4KLQotdXNlIHN0cmljdDsKLXVzZSB3YXJuaW5ncyBG QVRBTCA9PiAnYWxsJzsKLXVzZSBsb2NhbGU7Ci0KLXVzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVz dGVyOwotdXNlIFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOwotdXNlIFRlc3Q6Ok1vcmU7Ci0KLSMg VGVzdCBwZXJzaXN0ZW5jeSBvZiBzdGF0aXN0aWNzIGdlbmVyYXRlZCBmb3IgaW5qZWN0aW9uIHBv aW50cy4KLWlmICgkRU5We2VuYWJsZV9pbmplY3Rpb25fcG9pbnRzfSBuZSAneWVzJykKLXsKLQlw bGFuIHNraXBfYWxsID0+ICdJbmplY3Rpb24gcG9pbnRzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBi dWlsZCc7Ci19Ci0KLSMgTm9kZSBpbml0aWFsaXphdGlvbgotbXkgJG5vZGUgPSBQb3N0Z3JlU1FM OjpUZXN0OjpDbHVzdGVyLT5uZXcoJ21hc3RlcicpOwotJG5vZGUtPmluaXQ7Ci0kbm9kZS0+YXBw ZW5kX2NvbmYoCi0JJ3Bvc3RncmVzcWwuY29uZicsIHFxKAotc2hhcmVkX3ByZWxvYWRfbGlicmFy aWVzID0gJ2luamVjdGlvbl9wb2ludHMnCi1pbmplY3Rpb25fcG9pbnRzLnN0YXRzID0gdHJ1ZQot KSk7Ci0kbm9kZS0+c3RhcnQ7Ci0kbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICdDUkVBVEUg RVhURU5TSU9OIGluamVjdGlvbl9wb2ludHM7Jyk7Ci0KLSMgVGhpcyBzaG91bGQgY291bnQgZm9y IHR3byBjYWxscy4KLSRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiU0VMRUNUIGluamVj dGlvbl9wb2ludHNfYXR0YWNoKCdzdGF0cy1ub3RpY2UnLCAnbm90aWNlJyk7Iik7Ci0kbm9kZS0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgaW5qZWN0aW9uX3BvaW50c19ydW4oJ3N0YXRz LW5vdGljZScpOyIpOwotJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGluamVj dGlvbl9wb2ludHNfcnVuKCdzdGF0cy1ub3RpY2UnKTsiKTsKLW15ICRudW1jYWxscyA9ICRub2Rl LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiU0VMRUNUIGluamVjdGlvbl9wb2ludHNfc3RhdHNf bnVtY2FsbHMoJ3N0YXRzLW5vdGljZScpOyIpOwotaXMoJG51bWNhbGxzLCAnMicsICdudW1iZXIg b2Ygc3RhdHMgY2FsbHMnKTsKLW15ICRlbnRyeWNvdW50ID0KLSAgJG5vZGUtPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCAiU0VMRUNUIGluamVjdGlvbl9wb2ludHNfc3RhdHNfY291bnQoKTsiKTsKLWlz KCRlbnRyeWNvdW50LCAnMScsICdudW1iZXIgb2YgZW50cmllcycpOwotbXkgJGZpeGVkc3RhdHMg PSAkbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIlNFTEVDVCAqIEZST00gaW5qZWN0aW9u X3BvaW50c19zdGF0c19maXhlZCgpOyIpOwotaXMoJGZpeGVkc3RhdHMsICcxfDB8MnwwfDAnLCAn Zml4ZWQgc3RhdHMgYWZ0ZXIgc29tZSBjYWxscycpOwotCi0jIExvYWRpbmcgYW5kIGNhY2hpbmcu Ci0kbm9kZS0+c2FmZV9wc3FsKAotCSdwb3N0Z3JlcycsICIKLVNFTEVDVCBpbmplY3Rpb25fcG9p bnRzX2xvYWQoJ3N0YXRzLW5vdGljZScpOwotU0VMRUNUIGluamVjdGlvbl9wb2ludHNfY2FjaGVk KCdzdGF0cy1ub3RpY2UnKTsKLSIpOwotJGZpeGVkc3RhdHMgPSAkbm9kZS0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsCi0JIlNFTEVDVCAqIEZST00gaW5qZWN0aW9uX3BvaW50c19zdGF0c19maXhlZCgp OyIpOwotaXMoJGZpeGVkc3RhdHMsICcxfDB8MnwxfDEnLCAnZml4ZWQgc3RhdHMgYWZ0ZXIgbG9h ZGluZyBhbmQgY2FjaGluZycpOwotCi0jIFJlc3RhcnQgdGhlIG5vZGUgY2xlYW5seSwgc3RhdHMg c2hvdWxkIHN0aWxsIGJlIGFyb3VuZC4KLSRub2RlLT5yZXN0YXJ0OwotJG51bWNhbGxzID0gJG5v ZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJTRUxFQ1QgaW5qZWN0aW9uX3BvaW50c19zdGF0 c19udW1jYWxscygnc3RhdHMtbm90aWNlJyk7Iik7Ci1pcygkbnVtY2FsbHMsICczJywgJ251bWJl ciBvZiBzdGF0cyBhZnRlciBjbGVhbiByZXN0YXJ0Jyk7Ci0kZW50cnljb3VudCA9Ci0gICRub2Rl LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBpbmplY3Rpb25fcG9pbnRzX3N0YXRzX2Nv dW50KCk7Iik7Ci1pcygkZW50cnljb3VudCwgJzEnLCAnbnVtYmVyIG9mIGVudHJpZXMgYWZ0ZXIg Y2xlYW4gcmVzdGFydCcpOwotJGZpeGVkc3RhdHMgPSAkbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsCi0JIlNFTEVDVCAqIEZST00gaW5qZWN0aW9uX3BvaW50c19zdGF0c19maXhlZCgpOyIpOwot aXMoJGZpeGVkc3RhdHMsICcxfDB8MnwxfDEnLCAnZml4ZWQgc3RhdHMgYWZ0ZXIgY2xlYW4gcmVz dGFydCcpOwotCi0jIE9uIGNyYXNoIHRoZSBzdGF0cyBhcmUgZ29uZS4KLSRub2RlLT5zdG9wKCdp bW1lZGlhdGUnKTsKLSRub2RlLT5zdGFydDsKLSRudW1jYWxscyA9ICRub2RlLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywKLQkiU0VMRUNUIGluamVjdGlvbl9wb2ludHNfc3RhdHNfbnVtY2FsbHMoJ3N0 YXRzLW5vdGljZScpOyIpOwotaXMoJG51bWNhbGxzLCAnJywgJ251bWJlciBvZiBzdGF0cyBhZnRl ciBjcmFzaCcpOwotJGVudHJ5Y291bnQgPQotICAkbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJTRUxFQ1QgaW5qZWN0aW9uX3BvaW50c19zdGF0c19jb3VudCgpOyIpOwotaXMoJGVudHJ5Y291 bnQsICcwJywgJ251bWJlciBvZiBlbnRyaWVzIGFmdGVyIGNyYXNoJyk7Ci0kZml4ZWRzdGF0cyA9 ICRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiU0VMRUNUICogRlJPTSBpbmplY3Rpb25f cG9pbnRzX3N0YXRzX2ZpeGVkKCk7Iik7Ci1pcygkZml4ZWRzdGF0cywgJzB8MHwwfDB8MCcsICdm aXhlZCBzdGF0cyBhZnRlciBjcmFzaCcpOwotCi0jIE9uIGRyb3AgYWxsIHN0YXRzIGFyZSBnb25l Ci0kbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIlNFTEVDVCBpbmplY3Rpb25fcG9pbnRz X2F0dGFjaCgnc3RhdHMtbm90aWNlJywgJ25vdGljZScpOyIpOwotJG5vZGUtPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCAiU0VMRUNUIGluamVjdGlvbl9wb2ludHNfcnVuKCdzdGF0cy1ub3RpY2UnKTsi KTsKLSRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBpbmplY3Rpb25fcG9pbnRz X3J1bignc3RhdHMtbm90aWNlJyk7Iik7Ci0kbnVtY2FsbHMgPSAkbm9kZS0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsCi0JIlNFTEVDVCBpbmplY3Rpb25fcG9pbnRzX3N0YXRzX251bWNhbGxzKCdzdGF0 cy1ub3RpY2UnKTsiKTsKLWlzKCRudW1jYWxscywgJzInLCAnbnVtYmVyIG9mIHN0YXRzIGNhbGxz Jyk7Ci0kbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgaW5qZWN0aW9uX3BvaW50 c19zdGF0c19kcm9wKCk7Iik7Ci0kbnVtY2FsbHMgPSAkbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsCi0JIlNFTEVDVCBpbmplY3Rpb25fcG9pbnRzX3N0YXRzX251bWNhbGxzKCdzdGF0cy1ub3Rp Y2UnKTsiKTsKLWlzKCRudW1jYWxscywgJycsICdubyBzdGF0cyBhZnRlciBkcm9wIHZpYSBTUUwg ZnVuY3Rpb24nKTsKLSRlbnRyeWNvdW50ID0KLSAgJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiU0VMRUNUIGluamVjdGlvbl9wb2ludHNfc3RhdHNfY291bnQoKTsiKTsKLWlzKCRlbnRyeWNv dW50LCAnMCcsICdudW1iZXIgb2YgZW50cmllcyBhZnRlciBkcm9wIHZpYSBTUUwgZnVuY3Rpb24n KTsKLQotIyBTdG9wIHRoZSBzZXJ2ZXIsIGRpc2FibGUgdGhlIG1vZHVsZSwgdGhlbiByZXN0YXJ0 LiAgVGhlIHNlcnZlcgotIyBzaG91bGQgYmUgYWJsZSB0byBjb21lIHVwLgotJG5vZGUtPnN0b3A7 Ci0kbm9kZS0+YWRqdXN0X2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsICdzaGFyZWRfcHJlbG9hZF9s aWJyYXJpZXMnLCAiJyciKTsKLSRub2RlLT5zdGFydDsKLQotZG9uZV90ZXN0aW5nKCk7CmRpZmYg LS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL21lc29uLmJ1aWxkIGIvc3JjL3Rlc3QvbW9kdWxlcy9t ZXNvbi5idWlsZAppbmRleCBjYzU3NDYxZTU5YS4uMjgwNmRiNDg1ZDMgMTAwNjQ0Ci0tLSBhL3Ny Yy90ZXN0L21vZHVsZXMvbWVzb24uYnVpbGQKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9tZXNvbi5i dWlsZApAQCAtMjEsNiArMjEsNyBAQCBzdWJkaXIoJ3Rlc3RfYml0bWFwc2V0JykKIHN1YmRpcign dGVzdF9ibG9vbWZpbHRlcicpCiBzdWJkaXIoJ3Rlc3RfY29weV9jYWxsYmFja3MnKQogc3ViZGly KCd0ZXN0X2N1c3RvbV9ybWdycycpCitzdWJkaXIoJ3Rlc3RfY3VzdG9tX3N0YXRzJykKIHN1YmRp cigndGVzdF9kZGxfZGVwYXJzZScpCiBzdWJkaXIoJ3Rlc3RfZHNhJykKIHN1YmRpcigndGVzdF9k c21fcmVnaXN0cnknKQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2N1c3RvbV9z dGF0cy8uZ2l0aWdub3JlIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2N1c3RvbV9zdGF0cy8uZ2l0 aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi41ZGNiM2ZmOTcy MwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9jdXN0b21fc3RhdHMv LmdpdGlnbm9yZQpAQCAtMCwwICsxLDQgQEAKKyMgR2VuZXJhdGVkIHN1YmRpcmVjdG9yaWVzCisv bG9nLworL3Jlc3VsdHMvCisvdG1wX2NoZWNrLwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxl cy90ZXN0X2N1c3RvbV9zdGF0cy9NYWtlZmlsZSBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9jdXN0 b21fc3RhdHMvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu LjViMDY1YTFjZDQyCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2N1 c3RvbV9zdGF0cy9NYWtlZmlsZQpAQCAtMCwwICsxLDI3IEBACisjIHNyYy90ZXN0L21vZHVsZXMv dGVzdF9jdXN0b21fc3RhdHMvTWFrZWZpbGUKKworTU9EVUxFUyA9IHRlc3RfY3VzdG9tX3Zhcl9z dGF0cyB0ZXN0X2N1c3RvbV9maXhlZF9zdGF0cworCitFWFRFTlNJT04gPSB0ZXN0X2N1c3RvbV92 YXJfc3RhdHMgdGVzdF9jdXN0b21fZml4ZWRfc3RhdHMKKworT0JKUyA9IFwKKwkkKFdJTjMyUkVT KSBcCisJdGVzdF9jdXN0b21fdmFyX3N0YXRzLm8gXAorCXRlc3RfY3VzdG9tX2ZpeGVkX3N0YXRz Lm8KK1BHRklMRURFU0MgPSAidGVzdF9jdXN0b21fc3RhdHMgLSB0ZXN0IGNvZGUgZm9yIGN1c3Rv bSBzdGF0IGtpbmRzIgorCitEQVRBID0gdGVzdF9jdXN0b21fdmFyX3N0YXRzLS0xLjAuc3FsIFwK KyAgICAgICB0ZXN0X2N1c3RvbV9maXhlZF9zdGF0cy0tMS4wLnNxbAorCitUQVBfVEVTVFMgPSAx CisKK2lmZGVmIFVTRV9QR1hTCitQR19DT05GSUcgPSBwZ19jb25maWcKK1BHWFMgOj0gJChzaGVs bCAkKFBHX0NPTkZJRykgLS1wZ3hzKQoraW5jbHVkZSAkKFBHWFMpCitlbHNlCitzdWJkaXIgPSBz cmMvdGVzdC9tb2R1bGVzL3Rlc3RfY3VzdG9tX3N0YXRzCit0b3BfYnVpbGRkaXIgPSAuLi8uLi8u Li8uLgoraW5jbHVkZSAkKHRvcF9idWlsZGRpcikvc3JjL01ha2VmaWxlLmdsb2JhbAoraW5jbHVk ZSAkKHRvcF9zcmNkaXIpL2NvbnRyaWIvY29udHJpYi1nbG9iYWwubWsKK2VuZGlmCmRpZmYgLS1n aXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfY3VzdG9tX3N0YXRzL21lc29uLmJ1aWxkIGIvc3Jj L3Rlc3QvbW9kdWxlcy90ZXN0X2N1c3RvbV9zdGF0cy9tZXNvbi5idWlsZApuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYTczNDQ2N2UxNjkKLS0tIC9kZXYvbnVsbAorKysg Yi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfY3VzdG9tX3N0YXRzL21lc29uLmJ1aWxkCkBAIC0wLDAg KzEsNTUgQEAKKyMgQ29weXJpZ2h0IChjKSAyMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9w bWVudCBHcm91cAorCit0ZXN0X2N1c3RvbV92YXJfc3RhdHNfc291cmNlcyA9IGZpbGVzKAorICAn dGVzdF9jdXN0b21fdmFyX3N0YXRzLmMnLAorKQorCitpZiBob3N0X3N5c3RlbSA9PSAnd2luZG93 cycKKyAgdGVzdF9jdXN0b21fdmFyX3N0YXRzX3NvdXJjZXMgKz0gcmNfbGliX2dlbi5wcm9jZXNz KHdpbjMydmVyX3JjLCBleHRyYV9hcmdzOiBbCisgICAgJy0tTkFNRScsICd0ZXN0X2N1c3RvbV92 YXJfc3RhdHMnLAorICAgICctLUZJTEVERVNDJywgJ3Rlc3RfY3VzdG9tX3Zhcl9zdGF0cyAtIHRl c3QgY29kZSBmb3IgdmFyaWFibGUgY3VzdG9tIHN0YXQga2luZHMnLF0pCitlbmRpZgorCit0ZXN0 X2N1c3RvbV92YXJfc3RhdHMgPSBzaGFyZWRfbW9kdWxlKCd0ZXN0X2N1c3RvbV92YXJfc3RhdHMn LAorICB0ZXN0X2N1c3RvbV92YXJfc3RhdHNfc291cmNlcywKKyAga3dhcmdzOiBwZ190ZXN0X21v ZF9hcmdzLAorKQordGVzdF9pbnN0YWxsX2xpYnMgKz0gdGVzdF9jdXN0b21fdmFyX3N0YXRzCisK K3Rlc3RfaW5zdGFsbF9kYXRhICs9IGZpbGVzKAorICAndGVzdF9jdXN0b21fdmFyX3N0YXRzLmNv bnRyb2wnLAorICAndGVzdF9jdXN0b21fdmFyX3N0YXRzLS0xLjAuc3FsJywKKykKKwordGVzdF9j dXN0b21fZml4ZWRfc3RhdHNfc291cmNlcyA9IGZpbGVzKAorICAndGVzdF9jdXN0b21fZml4ZWRf c3RhdHMuYycsCispCisKK2lmIGhvc3Rfc3lzdGVtID09ICd3aW5kb3dzJworICB0ZXN0X2N1c3Rv bV9maXhlZF9zdGF0c19zb3VyY2VzICs9IHJjX2xpYl9nZW4ucHJvY2Vzcyh3aW4zMnZlcl9yYywg ZXh0cmFfYXJnczogWworICAgICctLU5BTUUnLCAndGVzdF9jdXN0b21fZml4ZWRfc3RhdHMnLAor ICAgICctLUZJTEVERVNDJywgJ3Rlc3RfY3VzdG9tX2ZpeGVkX3N0YXRzIC0gdGVzdCBjb2RlIGZv ciBmaXhlZCBjdXN0b20gc3RhdCBraW5kcycsXSkKK2VuZGlmCisKK3Rlc3RfY3VzdG9tX2ZpeGVk X3N0YXRzID0gc2hhcmVkX21vZHVsZSgndGVzdF9jdXN0b21fZml4ZWRfc3RhdHMnLAorICB0ZXN0 X2N1c3RvbV9maXhlZF9zdGF0c19zb3VyY2VzLAorICBrd2FyZ3M6IHBnX3Rlc3RfbW9kX2FyZ3Ms CispCit0ZXN0X2luc3RhbGxfbGlicyArPSB0ZXN0X2N1c3RvbV9maXhlZF9zdGF0cworCit0ZXN0 X2luc3RhbGxfZGF0YSArPSBmaWxlcygKKyAgJ3Rlc3RfY3VzdG9tX2ZpeGVkX3N0YXRzLmNvbnRy b2wnLAorICAndGVzdF9jdXN0b21fZml4ZWRfc3RhdHMtLTEuMC5zcWwnLAorKQorCit0ZXN0cyAr PSB7CisgICduYW1lJzogJ3Rlc3RfY3VzdG9tX3N0YXRzJywKKyAgJ3NkJzogbWVzb24uY3VycmVu dF9zb3VyY2VfZGlyKCksCisgICdiZCc6IG1lc29uLmN1cnJlbnRfYnVpbGRfZGlyKCksCisgICd0 YXAnOiB7CisgICAgJ3Rlc3RzJzogWworICAgICAgJ3QvMDAxX2N1c3RvbV9zdGF0cy5wbCcsCisg ICAgXSwKKyAgICAncnVubmluZ2NoZWNrJzogZmFsc2UsCisgIH0sCit9CmRpZmYgLS1naXQgYS9z cmMvdGVzdC9tb2R1bGVzL3Rlc3RfY3VzdG9tX3N0YXRzL3QvMDAxX2N1c3RvbV9zdGF0cy5wbCBi L3NyYy90ZXN0L21vZHVsZXMvdGVzdF9jdXN0b21fc3RhdHMvdC8wMDFfY3VzdG9tX3N0YXRzLnBs Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5jNGZjZWI3ZDI2NwotLS0g L2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9jdXN0b21fc3RhdHMvdC8wMDFf Y3VzdG9tX3N0YXRzLnBsCkBAIC0wLDAgKzEsMTE1IEBACisjIENvcHlyaWdodCAoYykgMjAyMS0y MDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorCisjIFRlc3QgY3VzdG9t IHN0YXRpc3RpY3MgZnVuY3Rpb25hbGl0eQorIworIyBUZXN0cyBib3RoIHZhcmlhYmxlLWFtb3Vu dCBhbmQgZml4ZWQtYW1vdW50IGN1c3RvbSBzdGF0aXN0aWNzOgorIyAtIENyZWF0aW9uLCB1cGRh dGVzLCBhbmQgcmVwb3J0aW5nCisjIC0gUGVyc2lzdGVuY2UgYWNyb3NzIGNsZWFuIHJlc3RhcnRz CisjIC0gTG9zcyBhZnRlciBjcmFzaCByZWNvdmVyeQorIyAtIFJlc2V0IGZ1bmN0aW9uYWxpdHkg Zm9yIGZpeGVkIHN0YXRzCisKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3MgRkFUQUwgPT4gJ2Fs bCc7CisKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwordXNlIFBvc3RncmVTUUw6OlRl c3Q6OlV0aWxzOwordXNlIFRlc3Q6Ok1vcmU7Cit1c2UgRmlsZTo6Q29weTsKKworbXkgJG5vZGUg PSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ21haW4nKTsKKyRub2RlLT5pbml0Owor JG5vZGUtPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLAorCSJzaGFyZWRfcHJlbG9hZF9s aWJyYXJpZXMgPSAndGVzdF9jdXN0b21fdmFyX3N0YXRzLCB0ZXN0X2N1c3RvbV9maXhlZF9zdGF0 cyciKTsKKyRub2RlLT5zdGFydDsKKworJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxKENS RUFURSBFWFRFTlNJT04gdGVzdF9jdXN0b21fdmFyX3N0YXRzKSk7Ciskbm9kZS0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsIHEoQ1JFQVRFIEVYVEVOU0lPTiB0ZXN0X2N1c3RvbV9maXhlZF9zdGF0cykp OworCisjIENyZWF0ZSB2YXJpYWJsZSBzdGF0aXN0aWNzIGVudHJpZXMKKyRub2RlLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgcShzZWxlY3QgcGdzdGF0X2NyZWF0ZV9jdXN0b21fdmFyX3N0YXRzKCdl bnRyeTEnKSkpOworJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxKHNlbGVjdCBwZ3N0YXRf Y3JlYXRlX2N1c3RvbV92YXJfc3RhdHMoJ2VudHJ5MicpKSk7Ciskbm9kZS0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsIHEoc2VsZWN0IHBnc3RhdF9jcmVhdGVfY3VzdG9tX3Zhcl9zdGF0cygnZW50cnkz JykpKTsKKyRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcShzZWxlY3QgcGdzdGF0X2NyZWF0 ZV9jdXN0b21fdmFyX3N0YXRzKCdlbnRyeTQnKSkpOworCisjIFVwZGF0ZSBjb3VudGVyczogZW50 cnkxPTIsIGVudHJ5Mj0zLCBlbnRyeTM9MiwgZW50cnk0PTMsIGZpeGVkPTMKKyRub2RlLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgcShzZWxlY3QgcGdzdGF0X3VwZGF0ZV9jdXN0b21fdmFyX3N0YXRz KCdlbnRyeTEnKSkpOworJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxKHNlbGVjdCBwZ3N0 YXRfdXBkYXRlX2N1c3RvbV92YXJfc3RhdHMoJ2VudHJ5MScpKSk7Ciskbm9kZS0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsIHEoc2VsZWN0IHBnc3RhdF91cGRhdGVfY3VzdG9tX3Zhcl9zdGF0cygnZW50 cnkyJykpKTsKKyRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcShzZWxlY3QgcGdzdGF0X3Vw ZGF0ZV9jdXN0b21fdmFyX3N0YXRzKCdlbnRyeTInKSkpOworJG5vZGUtPnNhZmVfcHNxbCgncG9z dGdyZXMnLCBxKHNlbGVjdCBwZ3N0YXRfdXBkYXRlX2N1c3RvbV92YXJfc3RhdHMoJ2VudHJ5Micp KSk7Ciskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHEoc2VsZWN0IHBnc3RhdF91cGRhdGVf Y3VzdG9tX3Zhcl9zdGF0cygnZW50cnkzJykpKTsKKyRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgcShzZWxlY3QgcGdzdGF0X3VwZGF0ZV9jdXN0b21fdmFyX3N0YXRzKCdlbnRyeTMnKSkpOwor JG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxKHNlbGVjdCBwZ3N0YXRfdXBkYXRlX2N1c3Rv bV92YXJfc3RhdHMoJ2VudHJ5NCcpKSk7Ciskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHEo c2VsZWN0IHBnc3RhdF91cGRhdGVfY3VzdG9tX3Zhcl9zdGF0cygnZW50cnk0JykpKTsKKyRub2Rl LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcShzZWxlY3QgcGdzdGF0X3VwZGF0ZV9jdXN0b21fdmFy X3N0YXRzKCdlbnRyeTQnKSkpOworJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxKHNlbGVj dCBwZ3N0YXRfdXBkYXRlX2N1c3RvbV9maXhlZF9zdGF0cygpKSk7Ciskbm9kZS0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsIHEoc2VsZWN0IHBnc3RhdF91cGRhdGVfY3VzdG9tX2ZpeGVkX3N0YXRzKCkp KTsKKyRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcShzZWxlY3QgcGdzdGF0X3VwZGF0ZV9j dXN0b21fZml4ZWRfc3RhdHMoKSkpOworCisjIFRlc3QgdmFyaWFibGUgc3RhdGlzdGljcyByZXBv cnRpbmcKK215ICRyZXN1bHQgPSAkbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHEoc2VsZWN0 ICogZnJvbSBwZ3N0YXRfcmVwb3J0X2N1c3RvbV92YXJfc3RhdHMoJ2VudHJ5MScpKSk7Citpcygk cmVzdWx0LCAiZW50cnkxfDIiLCAidmFyIHN0YXRzIGVudHJ5MSByZXBvcnRzIGNvcnJlY3QgY2Fs bHMiKTsKKworJHJlc3VsdCA9ICRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcShzZWxlY3Qg KiBmcm9tIHBnc3RhdF9yZXBvcnRfY3VzdG9tX3Zhcl9zdGF0cygnZW50cnkyJykpKTsKK2lzKCRy ZXN1bHQsICJlbnRyeTJ8MyIsICJ2YXIgc3RhdHMgZW50cnkyIHJlcG9ydHMgY29ycmVjdCBjYWxs cyIpOworCiskcmVzdWx0ID0gJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxKHNlbGVjdCAq IGZyb20gcGdzdGF0X3JlcG9ydF9jdXN0b21fdmFyX3N0YXRzKCdlbnRyeTMnKSkpOworaXMoJHJl c3VsdCwgImVudHJ5M3wyIiwgInZhciBzdGF0cyBlbnRyeTMgcmVwb3J0cyBjb3JyZWN0IGNhbGxz Iik7CisKKyRyZXN1bHQgPSAkbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHEoc2VsZWN0ICog ZnJvbSBwZ3N0YXRfcmVwb3J0X2N1c3RvbV92YXJfc3RhdHMoJ2VudHJ5NCcpKSk7CitpcygkcmVz dWx0LCAiZW50cnk0fDMiLCAidmFyIHN0YXRzIGVudHJ5NCByZXBvcnRzIGNvcnJlY3QgY2FsbHMi KTsKKworJHJlc3VsdCA9ICRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcShzZWxlY3QgKiBm cm9tIHBnc3RhdF9yZXBvcnRfY3VzdG9tX2ZpeGVkX3N0YXRzKCkpKTsKK2lzKCRyZXN1bHQsICIz fCIsICJmaXhlZCBzdGF0cyByZXBvcnRzIGNvcnJlY3QgY2FsbHMiKTsKKworIyBUZXN0IHZhcmlh YmxlIHN0YXRpc3RpY3MgZHJvcCBmdW5jdGlvbmFsaXR5CiskcmVzdWx0ID0gJG5vZGUtPnNhZmVf cHNxbCgncG9zdGdyZXMnLCBxKHNlbGVjdCAqIGZyb20gcGdzdGF0X2Ryb3BfY3VzdG9tX3Zhcl9z dGF0cygnZW50cnkzJykpKTsKKyRyZXN1bHQgPSAkbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs IHEoc2VsZWN0ICogZnJvbSBwZ3N0YXRfcmVwb3J0X2N1c3RvbV92YXJfc3RhdHMoJ2VudHJ5Mycp KSk7CitpcygkcmVzdWx0LCAiIiwgImVudHJ5MyBub3QgZm91bmQgYWZ0ZXIgZHJvcCIpOworCisk cmVzdWx0ID0gJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxKHNlbGVjdCAqIGZyb20gcGdz dGF0X2Ryb3BfY3VzdG9tX3Zhcl9zdGF0cygnZW50cnk0JykpKTsKKyRyZXN1bHQgPSAkbm9kZS0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHEoc2VsZWN0ICogZnJvbSBwZ3N0YXRfcmVwb3J0X2N1c3Rv bV92YXJfc3RhdHMoJ2VudHJ5NCcpKSk7CitpcygkcmVzdWx0LCAiIiwgImVudHJ5NCBub3QgZm91 bmQgYWZ0ZXIgZHJvcCIpOworCisjIFRlc3QgcGVyc2lzdGVuY2UgYWNyb3NzIGNsZWFuIHJlc3Rh cnQKKyRub2RlLT5zdG9wKCk7Ciskbm9kZS0+c3RhcnQoKTsKKworJHJlc3VsdCA9ICRub2RlLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgcShzZWxlY3QgKiBmcm9tIHBnc3RhdF9yZXBvcnRfY3VzdG9t X3Zhcl9zdGF0cygnZW50cnkxJykpKTsKK2lzKCRyZXN1bHQsICJlbnRyeTF8MiIsICJ2YXIgc3Rh dHMgZW50cnkxIHBlcnNpc3RzIGFmdGVyIGNsZWFuIHJlc3RhcnQiKTsKKworJHJlc3VsdCA9ICRu b2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcShzZWxlY3QgKiBmcm9tIHBnc3RhdF9yZXBvcnRf Y3VzdG9tX3Zhcl9zdGF0cygnZW50cnkyJykpKTsKK2lzKCRyZXN1bHQsICJlbnRyeTJ8MyIsICJ2 YXIgc3RhdHMgZW50cnkyIHBlcnNpc3RzIGFmdGVyIGNsZWFuIHJlc3RhcnQiKTsKKworJHJlc3Vs dCA9ICRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcShzZWxlY3QgKiBmcm9tIHBnc3RhdF9y ZXBvcnRfY3VzdG9tX2ZpeGVkX3N0YXRzKCkpKTsKK2lzKCRyZXN1bHQsICIzfCIsICJmaXhlZCBz dGF0cyBwZXJzaXN0cyBhZnRlciBjbGVhbiByZXN0YXJ0Iik7CisKKyMgVGVzdCBjcmFzaCByZWNv dmVyeSBiZWhhdmlvcgorJG5vZGUtPnN0b3AoJ2ltbWVkaWF0ZScpOworJG5vZGUtPnN0YXJ0Owor CiskcmVzdWx0ID0gJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxKHNlbGVjdCAqIGZyb20g cGdzdGF0X3JlcG9ydF9jdXN0b21fdmFyX3N0YXRzKCdlbnRyeTEnKSkpOworaXMoJHJlc3VsdCwg IiIsICJ2YXIgc3RhdHMgZW50cnkxIGxvc3QgYWZ0ZXIgY3Jhc2ggcmVjb3ZlcnkiKTsKKworJHJl c3VsdCA9ICRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcShzZWxlY3QgKiBmcm9tIHBnc3Rh dF9yZXBvcnRfY3VzdG9tX3Zhcl9zdGF0cygnZW50cnkyJykpKTsKK2lzKCRyZXN1bHQsICIiLCAi dmFyIHN0YXRzIGVudHJ5MiBsb3N0IGFmdGVyIGNyYXNoIHJlY292ZXJ5Iik7CisKKyMgY3Jhc2gg cmVjb3Zlcnkgc2V0cyB0aGUgcmVzZXQgdGltZXN0YW1wCiskcmVzdWx0ID0gJG5vZGUtPnNhZmVf cHNxbCgncG9zdGdyZXMnLCBxKHNlbGVjdCBudW1jYWxscyBmcm9tIHBnc3RhdF9yZXBvcnRfY3Vz dG9tX2ZpeGVkX3N0YXRzKCkgd2hlcmUgc3RhdHNfcmVzZXQgaXMgbm90IG51bGwpKTsKK2lzKCRy ZXN1bHQsICIwIiwgImZpeGVkIHN0YXRzIHJlc2V0IGFmdGVyIGNyYXNoIHJlY292ZXJ5Iik7CisK KyMgVGVzdCBmaXhlZCBzdGF0aXN0aWNzIHJlc2V0IGZ1bmN0aW9uYWxpdHkKKyRub2RlLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgcShzZWxlY3QgcGdzdGF0X3VwZGF0ZV9jdXN0b21fZml4ZWRfc3Rh dHMoKSkpOworJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxKHNlbGVjdCBwZ3N0YXRfdXBk YXRlX2N1c3RvbV9maXhlZF9zdGF0cygpKSk7Ciskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs IHEoc2VsZWN0IHBnc3RhdF91cGRhdGVfY3VzdG9tX2ZpeGVkX3N0YXRzKCkpKTsKKworJHJlc3Vs dCA9ICRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcShzZWxlY3QgbnVtY2FsbHMgZnJvbSBw Z3N0YXRfcmVwb3J0X2N1c3RvbV9maXhlZF9zdGF0cygpKSk7CitpcygkcmVzdWx0LCAiMyIsICJm aXhlZCBzdGF0cyBzaG93cyBjYWxscyBiZWZvcmUgbWFudWFsIHJlc2V0Iik7CisKKyRub2RlLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgcShzZWxlY3QgcGdzdGF0X3Jlc2V0X2N1c3RvbV9maXhlZF9z dGF0cygpKSk7CisKKyRyZXN1bHQgPSAkbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHEoc2Vs ZWN0IG51bWNhbGxzIGZyb20gcGdzdGF0X3JlcG9ydF9jdXN0b21fZml4ZWRfc3RhdHMoKSB3aGVy ZSBzdGF0c19yZXNldCBpcyBub3QgbnVsbCkpOworaXMoJHJlc3VsdCwgIjAiLCAiZml4ZWQgc3Rh dHMgcmVzZXQgYWZ0ZXIgbWFudWFsIHJlc2V0Iik7CisKKyMgVGVzdCBjb21wbGV0ZWQgc3VjY2Vz c2Z1bGx5Citkb25lX3Rlc3RpbmcoKTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYg LS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfY3VzdG9tX3N0YXRzL3Rlc3RfY3VzdG9tX2Zp eGVkX3N0YXRzLS0xLjAuc3FsIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2N1c3RvbV9zdGF0cy90 ZXN0X2N1c3RvbV9maXhlZF9zdGF0cy0tMS4wLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwMC4uZTRjMzk3NDkzOTgKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9t b2R1bGVzL3Rlc3RfY3VzdG9tX3N0YXRzL3Rlc3RfY3VzdG9tX2ZpeGVkX3N0YXRzLS0xLjAuc3Fs CkBAIC0wLDAgKzEsMjAgQEAKKy8qIHNyYy90ZXN0L21vZHVsZXMvdGVzdF9jdXN0b21fc3RhdHMv dGVzdF9jdXN0b21fZml4ZWRfc3RhdHMtLTEuMC5zcWwgKi8KKworLS0gY29tcGxhaW4gaWYgc2Ny aXB0IGlzIHNvdXJjZWQgaW4gcHNxbCwgcmF0aGVyIHRoYW4gdmlhIENSRUFURSBFWFRFTlNJT04K K1xlY2hvIFVzZSAiQ1JFQVRFIEVYVEVOU0lPTiB0ZXN0X2N1c3RvbV9maXhlZF9zdGF0cyIgdG8g bG9hZCB0aGlzIGZpbGUuIFxxdWl0CisKK0NSRUFURSBGVU5DVElPTiBwZ3N0YXRfdXBkYXRlX2N1 c3RvbV9maXhlZF9zdGF0cygpCitSRVRVUk5TIHZvaWQKK0FTICdNT0RVTEVfUEFUSE5BTUUnLCAn cGdzdGF0X3VwZGF0ZV9jdXN0b21fZml4ZWRfc3RhdHMnCitMQU5HVUFHRSBDIFNUUklDVCBQQVJB TExFTCBVTlNBRkU7CisKK0NSRUFURSBGVU5DVElPTiBwZ3N0YXRfcmVwb3J0X2N1c3RvbV9maXhl ZF9zdGF0cyhPVVQgbnVtY2FsbHMgYmlnaW50LAorICAgIE9VVCBzdGF0c19yZXNldCB0aW1lc3Rh bXB0eikKK1JFVFVSTlMgcmVjb3JkCitBUyAnTU9EVUxFX1BBVEhOQU1FJywgJ3Bnc3RhdF9yZXBv cnRfY3VzdG9tX2ZpeGVkX3N0YXRzJworTEFOR1VBR0UgQyBTVFJJQ1QgUEFSQUxMRUwgVU5TQUZF OworCitDUkVBVEUgRlVOQ1RJT04gcGdzdGF0X3Jlc2V0X2N1c3RvbV9maXhlZF9zdGF0cygpCitS RVRVUk5TIHZvaWQKK0FTICdNT0RVTEVfUEFUSE5BTUUnLCAncGdzdGF0X3Jlc2V0X2N1c3RvbV9m aXhlZF9zdGF0cycKK0xBTkdVQUdFIEMgU1RSSUNUIFBBUkFMTEVMIFVOU0FGRTsKXCBObyBuZXds aW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfY3Vz dG9tX3N0YXRzL3Rlc3RfY3VzdG9tX2ZpeGVkX3N0YXRzLmMgYi9zcmMvdGVzdC9tb2R1bGVzL3Rl c3RfY3VzdG9tX3N0YXRzL3Rlc3RfY3VzdG9tX2ZpeGVkX3N0YXRzLmMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmYwODIxYjQ4NDhhCi0tLSAvZGV2L251bGwKKysrIGIv c3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2N1c3RvbV9zdGF0cy90ZXN0X2N1c3RvbV9maXhlZF9zdGF0 cy5jCkBAIC0wLDAgKzEsMjI0IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogdGVzdF9j dXN0b21fZml4ZWRfc3RhdHMuYworICoJCVRlc3QgbW9kdWxlIGZvciBmaXhlZC1hbW91bnQgY3Vz dG9tIHN0YXRpc3RpY3MKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMjQtMjAyNSwgUG9zdGdyZVNR TCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKiBJREVOVElGSUNBVElPTgorICoJCXNy Yy90ZXN0L21vZHVsZXMvdGVzdF9jdXN0b21fc3RhdHMvdGVzdF9jdXN0b21fZml4ZWRfc3RhdHMu YworICoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisjaW5jbHVkZSAicG9zdGdyZXMuaCIK KworI2luY2x1ZGUgImFjY2Vzcy9odHVwX2RldGFpbHMuaCIKKyNpbmNsdWRlICJmdW5jYXBpLmgi CisjaW5jbHVkZSAicGdzdGF0LmgiCisjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKKyNpbmNs dWRlICJ1dGlscy9wZ3N0YXRfaW50ZXJuYWwuaCIKKworUEdfTU9EVUxFX01BR0lDX0VYVCgKKwkJ CQkJLm5hbWUgPSAidGVzdF9jdXN0b21fZml4ZWRfc3RhdHMiLAorCQkJCQkudmVyc2lvbiA9IFBH X1ZFUlNJT04KKyk7CisKKy8qIEZpeGVkLWFtb3VudCBjdXN0b20gc3RhdGlzdGljcyBlbnRyeSAq LwordHlwZWRlZiBzdHJ1Y3QgUGdTdGF0X1N0YXRDdXN0b21GaXhlZEVudHJ5Cit7CisJUGdTdGF0 X0NvdW50ZXIgbnVtY2FsbHM7CS8qICMgb2YgdGltZXMgdXBkYXRlIGZ1bmN0aW9uIGNhbGxlZCAq LworCVRpbWVzdGFtcFR6IHN0YXRfcmVzZXRfdGltZXN0YW1wOworfQkJCVBnU3RhdF9TdGF0Q3Vz dG9tRml4ZWRFbnRyeTsKKwordHlwZWRlZiBzdHJ1Y3QgUGdTdGF0U2hhcmVkX0N1c3RvbUZpeGVk RW50cnkKK3sKKwlMV0xvY2sJCWxvY2s7CQkJLyogcHJvdGVjdHMgY291bnRlcnMgKi8KKwl1aW50 MzIJCWNoYW5nZWNvdW50OwkvKiBmb3IgYXRvbWljIHJlYWRzICovCisJUGdTdGF0X1N0YXRDdXN0 b21GaXhlZEVudHJ5IHN0YXRzOwkvKiBjdXJyZW50IGNvdW50ZXJzICovCisJUGdTdGF0X1N0YXRD dXN0b21GaXhlZEVudHJ5IHJlc2V0X29mZnNldDsJLyogcmVzZXQgYmFzZWxpbmUgKi8KK30JCQlQ Z1N0YXRTaGFyZWRfQ3VzdG9tRml4ZWRFbnRyeTsKKworLyogQ2FsbGJhY2tzIGZvciBmaXhlZC1h bW91bnQgc3RhdGlzdGljcyAqLworc3RhdGljIHZvaWQgcGdzdGF0X2N1c3RvbV9maXhlZF9pbml0 X3NobWVtX2NiKHZvaWQgKnN0YXRzKTsKK3N0YXRpYyB2b2lkIHBnc3RhdF9jdXN0b21fZml4ZWRf cmVzZXRfYWxsX2NiKFRpbWVzdGFtcFR6IHRzKTsKK3N0YXRpYyB2b2lkIHBnc3RhdF9jdXN0b21f Zml4ZWRfc25hcHNob3RfY2Iodm9pZCk7CisKK3N0YXRpYyBjb25zdCBQZ1N0YXRfS2luZEluZm8g Y3VzdG9tX3N0YXRzID0geworCS5uYW1lID0gInRlc3RfY3VzdG9tX2ZpeGVkX3N0YXRzIiwKKwku Zml4ZWRfYW1vdW50ID0gdHJ1ZSwJCS8qIGV4YWN0bHkgb25lIGVudHJ5ICovCisJLndyaXRlX3Rv X2ZpbGUgPSB0cnVlLAkJLyogcGVyc2lzdCB0byBzdGF0cyBmaWxlICovCisKKwkuc2hhcmVkX3Np emUgPSBzaXplb2YoUGdTdGF0X1N0YXRDdXN0b21GaXhlZEVudHJ5KSwKKwkuc2hhcmVkX2RhdGFf b2ZmID0gb2Zmc2V0b2YoUGdTdGF0U2hhcmVkX0N1c3RvbUZpeGVkRW50cnksIHN0YXRzKSwKKwku c2hhcmVkX2RhdGFfbGVuID0gc2l6ZW9mKCgoUGdTdGF0U2hhcmVkX0N1c3RvbUZpeGVkRW50cnkg KikgMCktPnN0YXRzKSwKKworCS5pbml0X3NobWVtX2NiID0gcGdzdGF0X2N1c3RvbV9maXhlZF9p bml0X3NobWVtX2NiLAorCS5yZXNldF9hbGxfY2IgPSBwZ3N0YXRfY3VzdG9tX2ZpeGVkX3Jlc2V0 X2FsbF9jYiwKKwkuc25hcHNob3RfY2IgPSBwZ3N0YXRfY3VzdG9tX2ZpeGVkX3NuYXBzaG90X2Ni LAorfTsKKworLyoKKyAqIEtpbmQgSUQgZm9yIHRlc3RfY3VzdG9tX2ZpeGVkX3N0YXRzLgorICov CisjZGVmaW5lIFBHU1RBVF9LSU5EX1RFU1RfQ1VTVE9NX0ZJWEVEX1NUQVRTIDI2CisKKy8qLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyAqIE1vZHVsZSBpbml0aWFsaXphdGlvbgorICotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorICovCisKK3ZvaWQKK19QR19pbml0KHZvaWQpCit7CisJLyogTXVzdCBiZSBsb2FkZWQg dmlhIHNoYXJlZF9wcmVsb2FkX2xpYnJhcmllcyAqLworCWlmICghcHJvY2Vzc19zaGFyZWRfcHJl bG9hZF9saWJyYXJpZXNfaW5fcHJvZ3Jlc3MpCisJCXJldHVybjsKKworCS8qIFJlZ2lzdGVyIGN1 c3RvbSBzdGF0aXN0aWNzIGtpbmQgKi8KKwlwZ3N0YXRfcmVnaXN0ZXJfa2luZChQR1NUQVRfS0lO RF9URVNUX0NVU1RPTV9GSVhFRF9TVEFUUywgJmN1c3RvbV9zdGF0cyk7Cit9CisKKy8qCisgKiBw Z3N0YXRfY3VzdG9tX2ZpeGVkX2luaXRfc2htZW1fY2IKKyAqCQlJbml0aWFsaXplIHNoYXJlZCBt ZW1vcnkgc3RydWN0dXJlCisgKi8KK3N0YXRpYyB2b2lkCitwZ3N0YXRfY3VzdG9tX2ZpeGVkX2lu aXRfc2htZW1fY2Iodm9pZCAqc3RhdHMpCit7CisJUGdTdGF0U2hhcmVkX0N1c3RvbUZpeGVkRW50 cnkgKnN0YXRzX3NobWVtID0KKwkJKFBnU3RhdFNoYXJlZF9DdXN0b21GaXhlZEVudHJ5ICopIHN0 YXRzOworCisJTFdMb2NrSW5pdGlhbGl6ZSgmc3RhdHNfc2htZW0tPmxvY2ssIExXVFJBTkNIRV9Q R1NUQVRTX0RBVEEpOworfQorCisvKgorICogcGdzdGF0X2N1c3RvbV9maXhlZF9yZXNldF9hbGxf Y2IKKyAqCQlSZXNldCB0aGUgZml4ZWQgc3RhdHMKKyAqLworc3RhdGljIHZvaWQKK3Bnc3RhdF9j dXN0b21fZml4ZWRfcmVzZXRfYWxsX2NiKFRpbWVzdGFtcFR6IHRzKQoreworCVBnU3RhdFNoYXJl ZF9DdXN0b21GaXhlZEVudHJ5ICpzdGF0c19zaG1lbSA9CisJCXBnc3RhdF9nZXRfY3VzdG9tX3No bWVtX2RhdGEoUEdTVEFUX0tJTkRfVEVTVF9DVVNUT01fRklYRURfU1RBVFMpOworCisJLyogc2Vl IGV4cGxhbmF0aW9uIGFib3ZlIFBnU3RhdFNoYXJlZF9BcmNoaXZlciBmb3IgdGhlIHJlc2V0IHBy b3RvY29sICovCisJTFdMb2NrQWNxdWlyZSgmc3RhdHNfc2htZW0tPmxvY2ssIExXX0VYQ0xVU0lW RSk7CisJcGdzdGF0X2NvcHlfY2hhbmdlY291bnRlZF9zdGF0cygmc3RhdHNfc2htZW0tPnJlc2V0 X29mZnNldCwKKwkJCQkJCQkJCSZzdGF0c19zaG1lbS0+c3RhdHMsCisJCQkJCQkJCQlzaXplb2Yo c3RhdHNfc2htZW0tPnN0YXRzKSwKKwkJCQkJCQkJCSZzdGF0c19zaG1lbS0+Y2hhbmdlY291bnQp OworCXN0YXRzX3NobWVtLT5zdGF0cy5zdGF0X3Jlc2V0X3RpbWVzdGFtcCA9IHRzOworCUxXTG9j a1JlbGVhc2UoJnN0YXRzX3NobWVtLT5sb2NrKTsKK30KKworLyoKKyAqIHBnc3RhdF9jdXN0b21f Zml4ZWRfc25hcHNob3RfY2IKKyAqCQlDb3B5IGN1cnJlbnQgc3RhdHMgdG8gc25hcHNob3QgYXJl YQorICovCitzdGF0aWMgdm9pZAorcGdzdGF0X2N1c3RvbV9maXhlZF9zbmFwc2hvdF9jYih2b2lk KQoreworCVBnU3RhdFNoYXJlZF9DdXN0b21GaXhlZEVudHJ5ICpzdGF0c19zaG1lbSA9CisJCXBn c3RhdF9nZXRfY3VzdG9tX3NobWVtX2RhdGEoUEdTVEFUX0tJTkRfVEVTVF9DVVNUT01fRklYRURf U1RBVFMpOworCVBnU3RhdF9TdGF0Q3VzdG9tRml4ZWRFbnRyeSAqc3RhdF9zbmFwID0KKwkJcGdz dGF0X2dldF9jdXN0b21fc25hcHNob3RfZGF0YShQR1NUQVRfS0lORF9URVNUX0NVU1RPTV9GSVhF RF9TVEFUUyk7CisJUGdTdGF0X1N0YXRDdXN0b21GaXhlZEVudHJ5ICpyZXNldF9vZmZzZXQgPSAm c3RhdHNfc2htZW0tPnJlc2V0X29mZnNldDsKKwlQZ1N0YXRfU3RhdEN1c3RvbUZpeGVkRW50cnkg cmVzZXQ7CisKKwlwZ3N0YXRfY29weV9jaGFuZ2Vjb3VudGVkX3N0YXRzKHN0YXRfc25hcCwKKwkJ CQkJCQkJCSZzdGF0c19zaG1lbS0+c3RhdHMsCisJCQkJCQkJCQlzaXplb2Yoc3RhdHNfc2htZW0t PnN0YXRzKSwKKwkJCQkJCQkJCSZzdGF0c19zaG1lbS0+Y2hhbmdlY291bnQpOworCisJTFdMb2Nr QWNxdWlyZSgmc3RhdHNfc2htZW0tPmxvY2ssIExXX1NIQVJFRCk7CisJbWVtY3B5KCZyZXNldCwg cmVzZXRfb2Zmc2V0LCBzaXplb2Yoc3RhdHNfc2htZW0tPnN0YXRzKSk7CisJTFdMb2NrUmVsZWFz ZSgmc3RhdHNfc2htZW0tPmxvY2spOworCisJLyogQXBwbHkgcmVzZXQgb2Zmc2V0cyAqLworI2Rl ZmluZSBGSVhFRF9DT01QKGZsZCkgc3RhdF9zbmFwLT5mbGQgLT0gcmVzZXQuZmxkOworCUZJWEVE X0NPTVAobnVtY2FsbHMpOworI3VuZGVmIEZJWEVEX0NPTVAKK30KKworLyotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorICogU1FMLWNhbGxhYmxlIGZ1bmN0aW9ucworICotLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICov CisKKy8qCisgKiBwZ3N0YXRfdXBkYXRlX2N1c3RvbV9maXhlZF9zdGF0cworICoJCUluY3JlbWVu dCBjYWxsIGNvdW50ZXIKKyAqLworUEdfRlVOQ1RJT05fSU5GT19WMShwZ3N0YXRfdXBkYXRlX2N1 c3RvbV9maXhlZF9zdGF0cyk7CitEYXR1bQorcGdzdGF0X3VwZGF0ZV9jdXN0b21fZml4ZWRfc3Rh dHMoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlQZ1N0YXRTaGFyZWRfQ3VzdG9tRml4ZWRFbnRyeSAq c3RhdHNfc2htZW07CisKKwlzdGF0c19zaG1lbSA9IHBnc3RhdF9nZXRfY3VzdG9tX3NobWVtX2Rh dGEoUEdTVEFUX0tJTkRfVEVTVF9DVVNUT01fRklYRURfU1RBVFMpOworCisJTFdMb2NrQWNxdWly ZSgmc3RhdHNfc2htZW0tPmxvY2ssIExXX0VYQ0xVU0lWRSk7CisKKwlwZ3N0YXRfYmVnaW5fY2hh bmdlY291bnRfd3JpdGUoJnN0YXRzX3NobWVtLT5jaGFuZ2Vjb3VudCk7CisJc3RhdHNfc2htZW0t PnN0YXRzLm51bWNhbGxzKys7CisJcGdzdGF0X2VuZF9jaGFuZ2Vjb3VudF93cml0ZSgmc3RhdHNf c2htZW0tPmNoYW5nZWNvdW50KTsKKworCUxXTG9ja1JlbGVhc2UoJnN0YXRzX3NobWVtLT5sb2Nr KTsKKworCVBHX1JFVFVSTl9WT0lEKCk7Cit9CisKKy8qCisgKiBwZ3N0YXRfcmVzZXRfY3VzdG9t X2ZpeGVkX3N0YXRzCisgKgkJUmVzZXQgc3RhdGlzdGljcyBieSBjYWxsaW5nIHBnc3RhdCBzeXN0 ZW0KKyAqLworUEdfRlVOQ1RJT05fSU5GT19WMShwZ3N0YXRfcmVzZXRfY3VzdG9tX2ZpeGVkX3N0 YXRzKTsKK0RhdHVtCitwZ3N0YXRfcmVzZXRfY3VzdG9tX2ZpeGVkX3N0YXRzKFBHX0ZVTkNUSU9O X0FSR1MpCit7CisJcGdzdGF0X3Jlc2V0X29mX2tpbmQoUEdTVEFUX0tJTkRfVEVTVF9DVVNUT01f RklYRURfU1RBVFMpOworCisJUEdfUkVUVVJOX1ZPSUQoKTsKK30KKworLyoKKyAqIHBnc3RhdF9y ZXBvcnRfY3VzdG9tX2ZpeGVkX3N0YXRzCisgKgkJUmV0dXJuIGN1cnJlbnQgY291bnRlciB2YWx1 ZXMKKyAqLworUEdfRlVOQ1RJT05fSU5GT19WMShwZ3N0YXRfcmVwb3J0X2N1c3RvbV9maXhlZF9z dGF0cyk7CitEYXR1bQorcGdzdGF0X3JlcG9ydF9jdXN0b21fZml4ZWRfc3RhdHMoUEdfRlVOQ1RJ T05fQVJHUykKK3sKKwlUdXBsZURlc2MJdHVwZGVzYzsKKwlEYXR1bQkJdmFsdWVzWzJdID0gezB9 OworCWJvb2wJCW51bGxzWzJdID0ge2ZhbHNlfTsKKwlQZ1N0YXRfU3RhdEN1c3RvbUZpeGVkRW50 cnkgKnN0YXRzOworCisJLyogVGFrZSBzbmFwc2hvdCAoYXBwbGllcyByZXNldCBvZmZzZXRzKSAq LworCXBnc3RhdF9zbmFwc2hvdF9maXhlZChQR1NUQVRfS0lORF9URVNUX0NVU1RPTV9GSVhFRF9T VEFUUyk7CisJc3RhdHMgPSBwZ3N0YXRfZ2V0X2N1c3RvbV9zbmFwc2hvdF9kYXRhKFBHU1RBVF9L SU5EX1RFU1RfQ1VTVE9NX0ZJWEVEX1NUQVRTKTsKKworCS8qIEJ1aWxkIHJldHVybiB0dXBsZSAq LworCXR1cGRlc2MgPSBDcmVhdGVUZW1wbGF0ZVR1cGxlRGVzYygyKTsKKwlUdXBsZURlc2NJbml0 RW50cnkodHVwZGVzYywgKEF0dHJOdW1iZXIpIDEsICJudW1jYWxscyIsCisJCQkJCSAgIElOVDhP SUQsIC0xLCAwKTsKKwlUdXBsZURlc2NJbml0RW50cnkodHVwZGVzYywgKEF0dHJOdW1iZXIpIDIs ICJzdGF0c19yZXNldCIsCisJCQkJCSAgIFRJTUVTVEFNUFRaT0lELCAtMSwgMCk7CisJQmxlc3NU dXBsZURlc2ModHVwZGVzYyk7CisKKwl2YWx1ZXNbMF0gPSBJbnQ2NEdldERhdHVtKHN0YXRzLT5u dW1jYWxscyk7CisKKwkvKiBIYW5kbGUgdW5pbml0aWFsaXplZCB0aW1lc3RhbXAgKG5vIHJlc2V0 IHlldCkgKi8KKwlpZiAoc3RhdHMtPnN0YXRfcmVzZXRfdGltZXN0YW1wID09IDApCisJeworCQlu dWxsc1sxXSA9IHRydWU7CisJfQorCWVsc2UKKwl7CisJCXZhbHVlc1sxXSA9IFRpbWVzdGFtcFR6 R2V0RGF0dW0oc3RhdHMtPnN0YXRfcmVzZXRfdGltZXN0YW1wKTsKKwl9CisKKwkvKiBSZXR1cm4g YXMgdHVwbGUgKi8KKwlQR19SRVRVUk5fREFUVU0oSGVhcFR1cGxlR2V0RGF0dW0oaGVhcF9mb3Jt X3R1cGxlKHR1cGRlc2MsIHZhbHVlcywgbnVsbHMpKSk7Cit9CmRpZmYgLS1naXQgYS9zcmMvdGVz dC9tb2R1bGVzL3Rlc3RfY3VzdG9tX3N0YXRzL3Rlc3RfY3VzdG9tX2ZpeGVkX3N0YXRzLmNvbnRy b2wgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfY3VzdG9tX3N0YXRzL3Rlc3RfY3VzdG9tX2ZpeGVk X3N0YXRzLmNvbnRyb2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmI5 NmUyYWExOGZiCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2N1c3Rv bV9zdGF0cy90ZXN0X2N1c3RvbV9maXhlZF9zdGF0cy5jb250cm9sCkBAIC0wLDAgKzEsNCBAQAor Y29tbWVudCA9ICdUZXN0IGNvZGUgZm9yIGZpeGVkIGN1c3RvbSBzdGF0IGtpbmRzJworZGVmYXVs dF92ZXJzaW9uID0gJzEuMCcKK21vZHVsZV9wYXRobmFtZSA9ICckbGliZGlyL3Rlc3RfY3VzdG9t X2ZpeGVkX3N0YXRzJworcmVsb2NhdGFibGUgPSB0cnVlCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9t b2R1bGVzL3Rlc3RfY3VzdG9tX3N0YXRzL3Rlc3RfY3VzdG9tX3Zhcl9zdGF0cy0tMS4wLnNxbCBi L3NyYy90ZXN0L21vZHVsZXMvdGVzdF9jdXN0b21fc3RhdHMvdGVzdF9jdXN0b21fdmFyX3N0YXRz LS0xLjAuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi44NGFlMmJm NTY2NgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9jdXN0b21fc3Rh dHMvdGVzdF9jdXN0b21fdmFyX3N0YXRzLS0xLjAuc3FsCkBAIC0wLDAgKzEsMjUgQEAKKy8qIHNy Yy90ZXN0L21vZHVsZXMvdGVzdF9jdXN0b21fdmFyX3N0YXRzL3Rlc3RfY3VzdG9tX3Zhcl9zdGF0 cy0tMS4wLnNxbCAqLworCistLSBjb21wbGFpbiBpZiBzY3JpcHQgaXMgc291cmNlZCBpbiBwc3Fs LCByYXRoZXIgdGhhbiB2aWEgQ1JFQVRFIEVYVEVOU0lPTgorXGVjaG8gVXNlICJDUkVBVEUgRVhU RU5TSU9OIHRlc3RfY3VzdG9tX3Zhcl9zdGF0cyIgdG8gbG9hZCB0aGlzIGZpbGUuIFxxdWl0CisK K0NSRUFURSBGVU5DVElPTiBwZ3N0YXRfY3JlYXRlX2N1c3RvbV92YXJfc3RhdHMoSU4gbmFtZSBU RVhUKQorUkVUVVJOUyB2b2lkCitBUyAnTU9EVUxFX1BBVEhOQU1FJywgJ3Bnc3RhdF9jcmVhdGVf Y3VzdG9tX3Zhcl9zdGF0cycKK0xBTkdVQUdFIEMgU1RSSUNUIFBBUkFMTEVMIFVOU0FGRTsKKwor Q1JFQVRFIEZVTkNUSU9OIHBnc3RhdF91cGRhdGVfY3VzdG9tX3Zhcl9zdGF0cyhJTiBuYW1lIFRF WFQpCitSRVRVUk5TIHZvaWQKK0FTICdNT0RVTEVfUEFUSE5BTUUnLCAncGdzdGF0X3VwZGF0ZV9j dXN0b21fdmFyX3N0YXRzJworTEFOR1VBR0UgQyBTVFJJQ1QgUEFSQUxMRUwgVU5TQUZFOworCitD UkVBVEUgRlVOQ1RJT04gcGdzdGF0X2Ryb3BfY3VzdG9tX3Zhcl9zdGF0cyhJTiBuYW1lIFRFWFQp CitSRVRVUk5TIHZvaWQKK0FTICdNT0RVTEVfUEFUSE5BTUUnLCAncGdzdGF0X2Ryb3BfY3VzdG9t X3Zhcl9zdGF0cycKK0xBTkdVQUdFIEMgU1RSSUNUIFBBUkFMTEVMIFVOU0FGRTsKKworCitDUkVB VEUgRlVOQ1RJT04gcGdzdGF0X3JlcG9ydF9jdXN0b21fdmFyX3N0YXRzKElOT1VUIG5hbWUgVEVY VCwgT1VUIGNhbGxzIEJJR0lOVCkKK1JFVFVSTlMgU0VUT0YgcmVjb3JkCitBUyAnTU9EVUxFX1BB VEhOQU1FJywgJ3Bnc3RhdF9yZXBvcnRfY3VzdG9tX3Zhcl9zdGF0cycKK0xBTkdVQUdFIEMgU1RS SUNUIFBBUkFMTEVMIFVOU0FGRTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9j dXN0b21fc3RhdHMvdGVzdF9jdXN0b21fdmFyX3N0YXRzLmMgYi9zcmMvdGVzdC9tb2R1bGVzL3Rl c3RfY3VzdG9tX3N0YXRzL3Rlc3RfY3VzdG9tX3Zhcl9zdGF0cy5jCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi42MzIwZWFmMmNhZQotLS0gL2Rldi9udWxsCisrKyBiL3Ny Yy90ZXN0L21vZHVsZXMvdGVzdF9jdXN0b21fc3RhdHMvdGVzdF9jdXN0b21fdmFyX3N0YXRzLmMK QEAgLTAsMCArMSwzMDIgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICog dGVzdF9jdXN0b21fdmFyX3N0YXRzLmMKKyAqCQlUZXN0IG1vZHVsZSBmb3IgY3VzdG9tIFBvc3Rn cmVTUUwgdmFyaWFibGUtbnVtYmVyZWQgY3VzdG9tIHN0YXRpc3RpYyBraW5kcworICoKKyAqIENv cHlyaWdodCAoYykgMjAyNC0yMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91 cAorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkJc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2N1c3Rv bV92YXJfc3RhdHMvdGVzdF9jdXN0b21fdmFyX3N0YXRzLmMKKyAqCisgKiAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyAqLworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJj b21tb24vaGFzaGZuLmgiCisjaW5jbHVkZSAiZnVuY2FwaS5oIgorI2luY2x1ZGUgInV0aWxzL2J1 aWx0aW5zLmgiCisjaW5jbHVkZSAidXRpbHMvcGdzdGF0X2ludGVybmFsLmgiCisKK1BHX01PRFVM RV9NQUdJQ19FWFQoCisJCQkJCS5uYW1lID0gInRlc3RfY3VzdG9tX3Zhcl9zdGF0cyIsCisJCQkJ CS52ZXJzaW9uID0gUEdfVkVSU0lPTgorKTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogTWFj cm9zIGFuZCBjb25zdGFudHMKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisvKgorICogS2lu ZCBJRCBmb3IgdGVzdF9jdXN0b21fdmFyX3N0YXRzIHN0YXRpc3RpY3MuCisgKiBSZXVzZXMgdGhl IHNhbWUgSUQgYXMgaW5qZWN0aW9uIHBvaW50cyB0byBhdm9pZCByZXNlcnZpbmcgYSBuZXcga2lu ZCBJRC4KKyAqLworI2RlZmluZSBQR1NUQVRfS0lORF9URVNUX0NVU1RPTV9WQVJfU1RBVFMgMjUK KworLyoKKyAqIEhhc2ggc3RhdGlzdGljIG5hbWUgdG8gZ2VuZXJhdGUgZW50cnkgaW5kZXggZm9y IHBnc3RhdCBsb29rdXAuCisgKi8KKyNkZWZpbmUgUEdTVEFUX0NVU1RPTV9WQVJfU1RBVFNfSURY KG5hbWUpIGhhc2hfYnl0ZXNfZXh0ZW5kZWQoKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgbmFtZSwg c3RybGVuKG5hbWUpLCAwKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBUeXBlIGRlZmluaXRp b25zCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworLyogQmFja2VuZC1sb2NhbCBwZW5kaW5n IHN0YXRpc3RpY3MgYmVmb3JlIGZsdXNoIHRvIHNoYXJlZCBtZW1vcnkgKi8KK3R5cGVkZWYgc3Ry dWN0IFBnU3RhdF9TdGF0Q3VzdG9tRW50cnkKK3sKKwlQZ1N0YXRfQ291bnRlciBudW1jYWxsczsJ LyogdGltZXMgc3RhdGlzdGljIHdhcyBpbmNyZW1lbnRlZCAqLworfQkJCVBnU3RhdF9TdGF0Q3Vz dG9tRW50cnk7CisKKy8qIFNoYXJlZCBtZW1vcnkgc3RhdGlzdGljcyBlbnRyeSB2aXNpYmxlIHRv IGFsbCBiYWNrZW5kcyAqLwordHlwZWRlZiBzdHJ1Y3QgUGdTdGF0U2hhcmVkX0N1c3RvbUVudHJ5 Cit7CisJUGdTdGF0U2hhcmVkX0NvbW1vbiBoZWFkZXI7IC8qIHN0YW5kYXJkIHBnc3RhdCBlbnRy eSBoZWFkZXIgKi8KKwlQZ1N0YXRfU3RhdEN1c3RvbUVudHJ5IHN0YXRzOwkvKiBjdXN0b20gc3Rh dGlzdGljcyBkYXRhICovCit9CQkJUGdTdGF0U2hhcmVkX0N1c3RvbUVudHJ5OworCisvKi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgKiBGdW5jdGlvbiBwcm90b3R5cGVzCisgKi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgKi8KKworLyogRmx1c2ggY2FsbGJhY2s6IG1lcmdlIHBlbmRpbmcgc3RhdHMgaW50byBzaGFy ZWQgbWVtb3J5ICovCitzdGF0aWMgYm9vbCBwZ3N0YXRfY3VzdG9tX2VudHJ5X2ZsdXNoX2NiKFBn U3RhdF9FbnRyeVJlZiAqZW50cnlfcmVmLCBib29sIG5vd2FpdCk7CisKKy8qLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyAqIEN1c3RvbSBraW5kIGNvbmZpZ3VyYXRpb24KKyAqLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAqLworCitzdGF0aWMgY29uc3QgUGdTdGF0X0tpbmRJbmZvIGN1c3RvbV9zdGF0cyA9IHsKKwku bmFtZSA9ICJ0ZXN0X2N1c3RvbV92YXJfc3RhdHMiLAorCS5maXhlZF9hbW91bnQgPSBmYWxzZSwJ CS8qIHZhcmlhYmxlIG51bWJlciBvZiBlbnRyaWVzICovCisJLndyaXRlX3RvX2ZpbGUgPSB0cnVl LAkJLyogcGVyc2lzdCBhY3Jvc3MgcmVzdGFydHMgKi8KKwkudHJhY2tfZW50cnlfY291bnQgPSB0 cnVlLAkvKiBjb3VudCBhY3RpdmUgZW50cmllcyAqLworCS5hY2Nlc3NlZF9hY3Jvc3NfZGF0YWJh c2VzID0gdHJ1ZSwJLyogZ2xvYmFsIHN0YXRpc3RpY3MgKi8KKwkuc2hhcmVkX3NpemUgPSBzaXpl b2YoUGdTdGF0U2hhcmVkX0N1c3RvbUVudHJ5KSwKKwkuc2hhcmVkX2RhdGFfb2ZmID0gb2Zmc2V0 b2YoUGdTdGF0U2hhcmVkX0N1c3RvbUVudHJ5LCBzdGF0cyksCisJLnNoYXJlZF9kYXRhX2xlbiA9 IHNpemVvZigoKFBnU3RhdFNoYXJlZF9DdXN0b21FbnRyeSAqKSAwKS0+c3RhdHMpLAorCS5wZW5k aW5nX3NpemUgPSBzaXplb2YoUGdTdGF0X1N0YXRDdXN0b21FbnRyeSksCisJLmZsdXNoX3BlbmRp bmdfY2IgPSBwZ3N0YXRfY3VzdG9tX2VudHJ5X2ZsdXNoX2NiLAorfTsKKworLyotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorICogTW9kdWxlIGluaXRpYWxpemF0aW9uCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg Ki8KKwordm9pZAorX1BHX2luaXQodm9pZCkKK3sKKwkvKiBNdXN0IGJlIGxvYWRlZCB2aWEgc2hh cmVkX3ByZWxvYWRfbGlicmFyaWVzICovCisJaWYgKCFwcm9jZXNzX3NoYXJlZF9wcmVsb2FkX2xp YnJhcmllc19pbl9wcm9ncmVzcykKKwkJcmV0dXJuOworCisJLyogUmVnaXN0ZXIgY3VzdG9tIHN0 YXRpc3RpY3Mga2luZCAqLworCXBnc3RhdF9yZWdpc3Rlcl9raW5kKFBHU1RBVF9LSU5EX1RFU1Rf Q1VTVE9NX1ZBUl9TVEFUUywgJmN1c3RvbV9zdGF0cyk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyAqIFN0YXRpc3RpY3MgY2FsbGJhY2sgZnVuY3Rpb25zCisgKi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgKi8KKworLyoKKyAqIHBnc3RhdF9jdXN0b21fZW50cnlfZmx1c2hfY2IKKyAqCQlNZXJnZSBw ZW5kaW5nIGJhY2tlbmQgc3RhdGlzdGljcyBpbnRvIHNoYXJlZCBtZW1vcnkKKyAqCisgKiBDYWxs ZWQgYnkgcGdzdGF0IGNvbGxlY3RvciB0byBmbHVzaCBhY2N1bXVsYXRlZCBsb2NhbCBzdGF0aXN0 aWNzCisgKiB0byBzaGFyZWQgbWVtb3J5IHdoZXJlIG90aGVyIGJhY2tlbmRzIGNhbiByZWFkIHRo ZW0uCisgKgorICogUmV0dXJucyBmYWxzZSBvbmx5IGlmIG5vd2FpdD10cnVlIGFuZCBsb2NrIGFj cXVpc2l0aW9uIGZhaWxzLgorICovCitzdGF0aWMgYm9vbAorcGdzdGF0X2N1c3RvbV9lbnRyeV9m bHVzaF9jYihQZ1N0YXRfRW50cnlSZWYgKmVudHJ5X3JlZiwgYm9vbCBub3dhaXQpCit7CisJUGdT dGF0X1N0YXRDdXN0b21FbnRyeSAqcGVuZGluZ19lbnRyeTsKKwlQZ1N0YXRTaGFyZWRfQ3VzdG9t RW50cnkgKnNoYXJlZF9lbnRyeTsKKworCXBlbmRpbmdfZW50cnkgPSAoUGdTdGF0X1N0YXRDdXN0 b21FbnRyeSAqKSBlbnRyeV9yZWYtPnBlbmRpbmc7CisJc2hhcmVkX2VudHJ5ID0gKFBnU3RhdFNo YXJlZF9DdXN0b21FbnRyeSAqKSBlbnRyeV9yZWYtPnNoYXJlZF9zdGF0czsKKworCWlmICghcGdz dGF0X2xvY2tfZW50cnkoZW50cnlfcmVmLCBub3dhaXQpKQorCQlyZXR1cm4gZmFsc2U7CisKKwkv KiBBZGQgcGVuZGluZyBjb3VudHMgdG8gc2hhcmVkIHRvdGFscyAqLworCXNoYXJlZF9lbnRyeS0+ c3RhdHMubnVtY2FsbHMgKz0gcGVuZGluZ19lbnRyeS0+bnVtY2FsbHM7CisKKwlwZ3N0YXRfdW5s b2NrX2VudHJ5KGVudHJ5X3JlZik7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorICogSGVscGVyIGZ1bmN0aW9ucworICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisK Ky8qCisgKiBwZ3N0YXRfZmV0Y2hfY3VzdG9tX2VudHJ5CisgKgkJTG9vayB1cCBjdXN0b20gc3Rh dGlzdGljIGJ5IG5hbWUKKyAqCisgKiBSZXR1cm5zIHN0YXRpc3RpY3MgZW50cnkgZnJvbSBzaGFy ZWQgbWVtb3J5LCBvciBOVUxMIGlmIG5vdCBmb3VuZC4KKyAqLworc3RhdGljIFBnU3RhdF9TdGF0 Q3VzdG9tRW50cnkgKgorcGdzdGF0X2ZldGNoX2N1c3RvbV9lbnRyeShjb25zdCBjaGFyICpzdGF0 X25hbWUpCit7CisJLyogRmV0Y2ggZW50cnkgYnkgaGFzaGVkIG5hbWUgKi8KKwlyZXR1cm4gKFBn U3RhdF9TdGF0Q3VzdG9tRW50cnkgKikgcGdzdGF0X2ZldGNoX2VudHJ5KFBHU1RBVF9LSU5EX1RF U1RfQ1VTVE9NX1ZBUl9TVEFUUywKKwkJCQkJCQkJCQkJCQkJIEludmFsaWRPaWQsCisJCQkJCQkJ CQkJCQkJCSBQR1NUQVRfQ1VTVE9NX1ZBUl9TVEFUU19JRFgoc3RhdF9uYW1lKSk7Cit9CisKKy8q LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyAqIFNRTC1jYWxsYWJsZSBmdW5jdGlvbnMKKyAqLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyAqLworCisvKgorICogcGdzdGF0X2NyZWF0ZV9jdXN0b21fdmFyX3N0YXRzCisg KgkJQ3JlYXRlIG5ldyBjdXN0b20gc3RhdGlzdGljIGVudHJ5CisgKgorICogSW5pdGlhbGl6ZXMg YSB6ZXJvLXZhbHVlZCBzdGF0aXN0aWNzIGVudHJ5IGluIHNoYXJlZCBtZW1vcnkuCisgKiBWYWxp ZGF0ZXMgbmFtZSBsZW5ndGggYWdhaW5zdCBOQU1FREFUQUxFTiBsaW1pdC4KKyAqLworUEdfRlVO Q1RJT05fSU5GT19WMShwZ3N0YXRfY3JlYXRlX2N1c3RvbV92YXJfc3RhdHMpOworRGF0dW0KK3Bn c3RhdF9jcmVhdGVfY3VzdG9tX3Zhcl9zdGF0cyhQR19GVU5DVElPTl9BUkdTKQoreworCVBnU3Rh dF9FbnRyeVJlZiAqZW50cnlfcmVmOworCVBnU3RhdFNoYXJlZF9DdXN0b21FbnRyeSAqc2hhcmVk X2VudHJ5OworCWNoYXIJICAgKnN0YXRfbmFtZSA9IHRleHRfdG9fY3N0cmluZyhQR19HRVRBUkdf VEVYVF9QUCgwKSk7CisKKwkvKiBWYWxpZGF0ZSBuYW1lIGxlbmd0aCBmaXJzdCAqLworCWlmIChz dHJsZW4oc3RhdF9uYW1lKSA+PSBOQU1FREFUQUxFTikKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQko ZXJyY29kZShFUlJDT0RFX05BTUVfVE9PX0xPTkcpLAorCQkJCSBlcnJtc2coImN1c3RvbSBzdGF0 aXN0aWMgbmFtZSBcIiVzXCIgaXMgdG9vIGxvbmciLCBzdGF0X25hbWUpLAorCQkJCSBlcnJkZXRh aWwoIk5hbWUgbXVzdCBiZSBsZXNzIHRoYW4gJWQgY2hhcmFjdGVycy4iLCBOQU1FREFUQUxFTikp KTsKKworCS8qIENyZWF0ZSBvciBnZXQgZXhpc3RpbmcgZW50cnkgKi8KKwllbnRyeV9yZWYgPSBw Z3N0YXRfZ2V0X2VudHJ5X3JlZl9sb2NrZWQoUEdTVEFUX0tJTkRfVEVTVF9DVVNUT01fVkFSX1NU QVRTLCBJbnZhbGlkT2lkLAorCQkJCQkJCQkJCQlQR1NUQVRfQ1VTVE9NX1ZBUl9TVEFUU19JRFgo c3RhdF9uYW1lKSwgdHJ1ZSk7CisKKwlpZiAoIWVudHJ5X3JlZikKKwkJUEdfUkVUVVJOX1ZPSUQo KTsKKworCXNoYXJlZF9lbnRyeSA9IChQZ1N0YXRTaGFyZWRfQ3VzdG9tRW50cnkgKikgZW50cnlf cmVmLT5zaGFyZWRfc3RhdHM7CisKKwkvKiBaZXJvLWluaXRpYWxpemUgc3RhdGlzdGljcyAqLwor CW1lbXNldCgmc2hhcmVkX2VudHJ5LT5zdGF0cywgMCwgc2l6ZW9mKHNoYXJlZF9lbnRyeS0+c3Rh dHMpKTsKKworCXBnc3RhdF91bmxvY2tfZW50cnkoZW50cnlfcmVmKTsKKworCVBHX1JFVFVSTl9W T0lEKCk7Cit9CisKKy8qCisgKiBwZ3N0YXRfdXBkYXRlX2N1c3RvbV92YXJfc3RhdHMKKyAqCQlJ bmNyZW1lbnQgY3VzdG9tIHN0YXRpc3RpYyBjb3VudGVyCisgKgorICogSW5jcmVtZW50cyBjYWxs IGNvdW50IGluIGJhY2tlbmQtbG9jYWwgbWVtb3J5LiBDaGFuZ2VzIGFyZSBmbHVzaGVkCisgKiB0 byBzaGFyZWQgbWVtb3J5IGJ5IHRoZSBzdGF0aXN0aWNzIGNvbGxlY3Rvci4KKyAqLworUEdfRlVO Q1RJT05fSU5GT19WMShwZ3N0YXRfdXBkYXRlX2N1c3RvbV92YXJfc3RhdHMpOworRGF0dW0KK3Bn c3RhdF91cGRhdGVfY3VzdG9tX3Zhcl9zdGF0cyhQR19GVU5DVElPTl9BUkdTKQoreworCWNoYXIJ ICAgKnN0YXRfbmFtZSA9IHRleHRfdG9fY3N0cmluZyhQR19HRVRBUkdfVEVYVF9QUCgwKSk7CisJ UGdTdGF0X0VudHJ5UmVmICplbnRyeV9yZWY7CisJUGdTdGF0X1N0YXRDdXN0b21FbnRyeSAqcGVu ZGluZ19lbnRyeTsKKworCS8qIEdldCBwZW5kaW5nIGVudHJ5IGluIGxvY2FsIG1lbW9yeSAqLwor CWVudHJ5X3JlZiA9IHBnc3RhdF9wcmVwX3BlbmRpbmdfZW50cnkoUEdTVEFUX0tJTkRfVEVTVF9D VVNUT01fVkFSX1NUQVRTLCBJbnZhbGlkT2lkLAorCQkJCQkJCQkJCSAgUEdTVEFUX0NVU1RPTV9W QVJfU1RBVFNfSURYKHN0YXRfbmFtZSksIE5VTEwpOworCisJcGVuZGluZ19lbnRyeSA9IChQZ1N0 YXRfU3RhdEN1c3RvbUVudHJ5ICopIGVudHJ5X3JlZi0+cGVuZGluZzsKKwlwZW5kaW5nX2VudHJ5 LT5udW1jYWxscysrOworCisJUEdfUkVUVVJOX1ZPSUQoKTsKK30KKworLyoKKyAqIHBnc3RhdF9k cm9wX2N1c3RvbV92YXJfc3RhdHMKKyAqCQlSZW1vdmUgY3VzdG9tIHN0YXRpc3RpYyBlbnRyeQor ICoKKyAqIERyb3BzIHRoZSBuYW1lZCBzdGF0aXN0aWMgZnJvbSBzaGFyZWQgbWVtb3J5IGFuZCBy ZXF1ZXN0cworICogZ2FyYmFnZSBjb2xsZWN0aW9uIGlmIG5lZWRlZC4KKyAqLworUEdfRlVOQ1RJ T05fSU5GT19WMShwZ3N0YXRfZHJvcF9jdXN0b21fdmFyX3N0YXRzKTsKK0RhdHVtCitwZ3N0YXRf ZHJvcF9jdXN0b21fdmFyX3N0YXRzKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJY2hhcgkgICAqc3Rh dF9uYW1lID0gdGV4dF90b19jc3RyaW5nKFBHX0dFVEFSR19URVhUX1BQKDApKTsKKworCS8qIERy b3AgZW50cnkgYW5kIHJlcXVlc3QgR0MgaWYgdGhlIGVudHJ5IGNvdWxkIG5vdCBiZSBmcmVlZCAq LworCWlmICghcGdzdGF0X2Ryb3BfZW50cnkoUEdTVEFUX0tJTkRfVEVTVF9DVVNUT01fVkFSX1NU QVRTLCBJbnZhbGlkT2lkLAorCQkJCQkJICAgUEdTVEFUX0NVU1RPTV9WQVJfU1RBVFNfSURYKHN0 YXRfbmFtZSkpKQorCQlwZ3N0YXRfcmVxdWVzdF9lbnRyeV9yZWZzX2djKCk7CisKKwlQR19SRVRV Uk5fVk9JRCgpOworfQorCisvKgorICogcGdzdGF0X3JlcG9ydF9jdXN0b21fdmFyX3N0YXRzCisg KgkJUmV0cmlldmUgY3VzdG9tIHN0YXRpc3RpYyB2YWx1ZXMKKyAqCisgKiBSZXR1cm5zIHNpbmds ZSByb3cgd2l0aCBzdGF0aXN0aWMgbmFtZSBhbmQgY2FsbCBjb3VudCBpZiB0aGUKKyAqIHN0YXRp c3RpYyBleGlzdHMsIG90aGVyd2lzZSByZXR1cm5zIG5vIHJvd3MuCisgKi8KK1BHX0ZVTkNUSU9O X0lORk9fVjEocGdzdGF0X3JlcG9ydF9jdXN0b21fdmFyX3N0YXRzKTsKK0RhdHVtCitwZ3N0YXRf cmVwb3J0X2N1c3RvbV92YXJfc3RhdHMoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlGdW5jQ2FsbENv bnRleHQgKmZ1bmNjdHg7CisJY2hhcgkgICAqc3RhdF9uYW1lOworCVBnU3RhdF9TdGF0Q3VzdG9t RW50cnkgKnN0YXRfZW50cnk7CisKKwlpZiAoU1JGX0lTX0ZJUlNUQ0FMTCgpKQorCXsKKwkJVHVw bGVEZXNjCXR1cGRlc2M7CisJCU1lbW9yeUNvbnRleHQgb2xkY29udGV4dDsKKworCQkvKiBJbml0 aWFsaXplIFNSRiBjb250ZXh0ICovCisJCWZ1bmNjdHggPSBTUkZfRklSU1RDQUxMX0lOSVQoKTsK KwkJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhmdW5jY3R4LT5tdWx0aV9jYWxs X21lbW9yeV9jdHgpOworCisJCS8qIEdldCBjb21wb3NpdGUgcmV0dXJuIHR5cGUgKi8KKwkJaWYg KGdldF9jYWxsX3Jlc3VsdF90eXBlKGZjaW5mbywgTlVMTCwgJnR1cGRlc2MpICE9IFRZUEVGVU5D X0NPTVBPU0lURSkKKwkJCWVsb2coRVJST1IsICJwZ3N0YXRfcmVwb3J0X2N1c3RvbV92YXJfc3Rh dHM6IHJldHVybiB0eXBlIGlzIG5vdCBjb21wb3NpdGUiKTsKKworCQlmdW5jY3R4LT50dXBsZV9k ZXNjID0gQmxlc3NUdXBsZURlc2ModHVwZGVzYyk7CisJCWZ1bmNjdHgtPm1heF9jYWxscyA9IDE7 IC8qIHNpbmdsZSByb3cgcmVzdWx0ICovCisKKwkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNv bnRleHQpOworCX0KKworCWZ1bmNjdHggPSBTUkZfUEVSQ0FMTF9TRVRVUCgpOworCisJaWYgKGZ1 bmNjdHgtPmNhbGxfY250ciA8IGZ1bmNjdHgtPm1heF9jYWxscykKKwl7CisJCURhdHVtCQl2YWx1 ZXNbMl07CisJCWJvb2wJCW51bGxzWzJdID0ge2ZhbHNlLCBmYWxzZX07CisJCUhlYXBUdXBsZQl0 dXBsZTsKKworCQlzdGF0X25hbWUgPSB0ZXh0X3RvX2NzdHJpbmcoUEdfR0VUQVJHX1RFWFRfUFAo MCkpOworCQlzdGF0X2VudHJ5ID0gcGdzdGF0X2ZldGNoX2N1c3RvbV9lbnRyeShzdGF0X25hbWUp OworCisJCS8qIFJldHVybiByb3cgb25seSBpZiBlbnRyeSBleGlzdHMgKi8KKwkJaWYgKHN0YXRf ZW50cnkpCisJCXsKKwkJCXZhbHVlc1swXSA9IFBvaW50ZXJHZXREYXR1bShjc3RyaW5nX3RvX3Rl eHQoc3RhdF9uYW1lKSk7CisJCQl2YWx1ZXNbMV0gPSBJbnQ2NEdldERhdHVtKHN0YXRfZW50cnkt Pm51bWNhbGxzKTsKKworCQkJdHVwbGUgPSBoZWFwX2Zvcm1fdHVwbGUoZnVuY2N0eC0+dHVwbGVf ZGVzYywgdmFsdWVzLCBudWxscyk7CisJCQlTUkZfUkVUVVJOX05FWFQoZnVuY2N0eCwgSGVhcFR1 cGxlR2V0RGF0dW0odHVwbGUpKTsKKwkJfQorCX0KKworCVNSRl9SRVRVUk5fRE9ORShmdW5jY3R4 KTsKK30KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9jdXN0b21fc3RhdHMvdGVz dF9jdXN0b21fdmFyX3N0YXRzLmNvbnRyb2wgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfY3VzdG9t X3N0YXRzL3Rlc3RfY3VzdG9tX3Zhcl9zdGF0cy5jb250cm9sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAwLi40M2EyNzgzZjk2NQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90 ZXN0L21vZHVsZXMvdGVzdF9jdXN0b21fc3RhdHMvdGVzdF9jdXN0b21fdmFyX3N0YXRzLmNvbnRy b2wKQEAgLTAsMCArMSw0IEBACitjb21tZW50ID0gJ1Rlc3QgY29kZSBmb3IgdmFyaWFibGUgY3Vz dG9tIHN0YXQga2luZHMnCitkZWZhdWx0X3ZlcnNpb24gPSAnMS4wJworbW9kdWxlX3BhdGhuYW1l ID0gJyRsaWJkaXIvdGVzdF9jdXN0b21fdmFyX3N0YXRzJworcmVsb2NhdGFibGUgPSB0cnVlCi0t IAoyLjQzLjAKCg== --0000000000002c5e29064560358c--