Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1v1V5G-009Ik5-8g for pgsql-hackers@arkaria.postgresql.org; Wed, 24 Sep 2025 19:23:22 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1v1V5D-00FAoq-IO for pgsql-hackers@arkaria.postgresql.org; Wed, 24 Sep 2025 19:23:19 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1v1V5D-00FAoi-42 for pgsql-hackers@lists.postgresql.org; Wed, 24 Sep 2025 19:23:19 +0000 Received: from mail-pf1-x42e.google.com ([2607:f8b0:4864:20::42e]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1v1V58-002gH3-0o for pgsql-hackers@postgresql.org; Wed, 24 Sep 2025 19:23:18 +0000 Received: by mail-pf1-x42e.google.com with SMTP id d2e1a72fcca58-77f2e621ef8so267287b3a.0 for ; Wed, 24 Sep 2025 12:23:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1758741793; x=1759346593; darn=postgresql.org; h=in-reply-to:references:from:subject:cc:to:message-id:date :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=JPXY6VCEsbWhtZ4Pr76WcrsVqSmW6+x0D6Yp6jkV8Zw=; b=fazGWN+mr/qlUXZqpBXuaHTo2AuvKSOp0Nh/uG1XWoesISfuzY2E36Z5ooT98NFWgs u+2WqTLvPB3ndK5KD309vx0JVyeNcO/OT/vr0Yyls1aiu9XXQOGabhZWxXvpecGbbXkh fWI123eF++MRjAqutRQ8axXNNhj4OG+0k0nxmd8AMtgORyI9ZsSV94KSVvp6E8FnIVV7 UxdRCcKqdNi462uojUuyBQ7g8SB++qZI6Y5KmXETbwqRYYGS71vHy8FzrzSpqJNHORfw xC/rAleFCYMjLvGrr/IV4jmoIJWkRcaWl2Uwhv7hpQpPxIyTnAMxRaxwKEEcPdBfD3k6 wZxg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758741793; x=1759346593; h=in-reply-to:references:from:subject:cc:to:message-id:date :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=JPXY6VCEsbWhtZ4Pr76WcrsVqSmW6+x0D6Yp6jkV8Zw=; b=dKViuI3vv1zhP9LZOTkOKKaReV/uUi82v3zIec4qeCgCSufJZQ+zeGwBc9G8t3ixe4 mFYAqFllw8ripPzbaL+rgxAf7LgKT0hI95r36+EkLJGxwpqLjYoNXk7F9zCpkLEJw5VQ VSf6uvMEMsleps8Hw+xfZeVsjXuXQOIv1Kf3q5DmQA9rATAZDWrUf71HX0uVfv2OeI7h rMR4QoBMNba4j5PmChPOB9bAl+SWAG6n83qvYqv8n0+FLXe0NimC4WCRJOuWAfbZuT66 ji3wlbhkUouGfQgjjGt8+rKlAtpz/9WYcMoo/gjmbDhyRhlb46rkI0JoWgDuJtkGqloW xJ8w== X-Forwarded-Encrypted: i=1; AJvYcCXrw608KrH0xEkwFEq/m/wpSbPXLJn66CFHRsku56ZVQcpDy4i13mm5kOd9NJmErk7Vd1vfAxLK5G0msZcg@postgresql.org X-Gm-Message-State: AOJu0YzrJHX7BDkP1DfhzJ+pfOZ+Yj3tLMOu+0AkUa7TYGtsP+oMsNUw sTnREyN3pUKJh7Pi5trTU1iYNDa91IJIWc51GMMOTwU4l0SqWh9Vh8eu X-Gm-Gg: ASbGncsj2FHqh6Or47rKB0B47cUDs2n78ubbZEl8nbVkvIcoA1lkY1aobn+cO2GzFAc YmfHjRcCuzpny6E1o1macz6pqUu7oL/w/eaAwDMWkwYCGa01/OyUJoZ4ZGuuLyj6bVzrAJbV9oB anlLDLlEM3eaf2OyXTmTc9C5mKY1BauaQu4pzGD8gufDi8nCUENkaAJQuQg/1D1Di1D2WRCfU4Z LkXOVFmcrVdIAJ2VGQGEKQesQFodxgeO4uk2UbbiiUJWsn2KBfcKz5pdxBtESsDZQBq72NuPrXr Lux6MvAGnyxaXtJpqLtPjLhipNGe0m0PehLSiCjSMCmQyRxNErRtljGqCZlBAMzfoGrvLJ1PkYi czXw7XxUHjsh4PZaITa1IF0XiXpSj+KoEcmt739qmG8DU7A== X-Google-Smtp-Source: AGHT+IFWh5Nkd/ULkKrDaZ1e+aokF9VAmdRyqu86hxydPmHQxUR+jcZhHYI5w9X8iXT34hQVe3sO5Q== X-Received: by 2002:a05:6a00:130e:b0:780:7eaa:938 with SMTP id d2e1a72fcca58-780fce1f388mr1030159b3a.12.1758741793212; Wed, 24 Sep 2025 12:23:13 -0700 (PDT) Received: from localhost ([2804:14d:328a:a59c:d887:c9bc:4225:588e]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-77f2f02c15bsm10797580b3a.95.2025.09.24.12.23.09 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 24 Sep 2025 12:23:12 -0700 (PDT) Content-Type: multipart/mixed; boundary=72e7ba35b0f553cf000aebd1a51acecabd589583beff3d66767e62ffb0da Mime-Version: 1.0 Date: Wed, 24 Sep 2025 16:23:08 -0300 Message-Id: To: "Arseniy Mukhin" Cc: "Masahiko Sawada" , "Rishu Bagga" , "Yura Sokolov" , "Daniil Davydov" <3danissimo@gmail.com>, =?utf-8?q?=C3=81lvaro_Herrera?= , "Alexandra Wang" , "PostgreSQL Hackers" , "Tom Lane" , "Joel Jacobson" Subject: Re: LISTEN/NOTIFY bug: VACUUM sets frozenxid past a xid in async queue From: "Matheus Alcantara" X-Mailer: aerc 0.20.1 References: <202508061044.ptcyt7aqsaaa@alvherre.pgsql> In-Reply-To: List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --72e7ba35b0f553cf000aebd1a51acecabd589583beff3d66767e62ffb0da Content-Type: multipart/alternative; boundary=ad1c96c3d7b4d8a3e24e2e940213ece3e50dc1f3dff3a56823feac15bab0 --ad1c96c3d7b4d8a3e24e2e940213ece3e50dc1f3dff3a56823feac15bab0 Content-Transfer-Encoding: quoted-printable Content-Disposition: inline Content-Type: text/plain; charset=UTF-8 On Wed Sep 24, 2025 at 10:59 AM -03, Arseniy Mukhin wrote: > Thank you! Speaking of the scenario, my understanding is that it's > impossible as we hold the global lock, so QueuePosition head should > always be equal to QUEUE_HEAD when we get into At_AbortNotify(), but > maybe I'm wrong. > Let's see if anyone else has any thoughts about this. > Patch looks great. Some minor points: > > I have a warning when using git am with the patch: > warning: 1 line adds whitespace errors. > I don't think that this is a problem? And I don't know how to remove this warning, I've just created the patch with git format-patch @~1 > There is a comment in the head of the async.c file about some > listen/notify internals. Maybe it's worth adding a comment about how > aborted transactions do clean up. > Added > What do you think about a Assert in asyncQueueRollbackNotifications() > that other backends still see us as 'in progress'? So we can be sure > that they can't process our notifications before we mark notifications > as 'committed=3Dfalse'. Not sure how to do it correctly, maybe > > Assert(TransactionIdIsValid(MyProc->xid)); > > will work? The TAP test that I tried to write also should test it. > Sounds resanable to me. I think that we could use the following assert when iterating over the entries, what do you think? Assert(TransactionIdIsInProgress(qe->xid)); > There are several comments where the word "crash" is used. What do you > think about using "abort" instead? "Crash" sounds more like PANIC > situation where we don't care about notifications because they don't > survive restart. > Good point, fixed > Thank you! > Thanks for reviewing this! -- Matheus Alcantara --ad1c96c3d7b4d8a3e24e2e940213ece3e50dc1f3dff3a56823feac15bab0-- --72e7ba35b0f553cf000aebd1a51acecabd589583beff3d66767e62ffb0da Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v4-0001-Make-AsyncQueueEntry-s-self-contained.patch Content-Type: text/plain; charset=utf-8; name=v4-0001-Make-AsyncQueueEntry-s-self-contained.patch RnJvbSBlNzQ4OGFmNWQ4MDhkYWMxNjYxMzE2Y2RlYWFjZTYzYWIzZmJkN2RmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXRoZXVzIEFsY2FudGFyYSA8bXRocy5kZXZAcG0ubWU+CkRh dGU6IFNhdCwgNiBTZXAgMjAyNSAxMToyOTowMiAtMDMwMApTdWJqZWN0OiBbUEFUQ0ggdjRdIE1h a2UgQXN5bmNRdWV1ZUVudHJ5J3Mgc2VsZiBjb250YWluZWQKClByZXZpb3VzbHkgdGhlIGFzeW5j UXVldWVQcm9jZXNzUGFnZUVudHJpZXMoKSB1c2UgdGhlClRyYW5zYWN0aW9uSWREaWRDb21taXQo KSB0byBjaGVjayBpZiB0aGUgdHJhbnNhY3Rpb24gdGhhdCBhIG5vdGlmaWNhdGlvbgpiZWxvbmdz IGlzIGNvbW1pdHRlZCBvciBub3QuIEFsdGhvdWdoIHRoaXMgd29yayBmb3IgYWxtb3N0IGFsbCBz Y2VuYXJpb3MKd2UgbWF5IGhhdmUgc29tZSBjYXNlcyB3aGVyZSBpZiBhIG5vdGlmaWNhdGlvbiBp cyBrZWVwIGZvciB0byBsb25nIG9uCnRoZSBxdWV1ZSBhbmQgdGhlIFZBQ1VVTSBGUkVFWkUgaXMg ZXhlY3V0ZWQgZHVyaW5nIHRoaXMgdGltZSBpdCBtYXkKcmVtb3ZlIGNsb2cgZmlsZXMgdGhhdCBp cyBuZWVkZWQgdG8gY2hlY2sgdGhlIHRyYW5zYWN0aW9uIHN0YXR1cyBvZgp0aGVzZSBub3RpZmlj YXRpb25zIHdoaWNoIHdpbGwgY2F1c2UgZXJyb3JzIHRvIGxpc3RlbmVyIGJhY2tlbmRzIHdoZW4K cmVhZGluZyB0aGUgYXN5bmMgcXVldWUuCgpUaGlzIGNvbW1pdCBmaXggdGhpcyBpc3N1ZSBieSBt YWtpbmcgdGhlIEFzeW5jUXVldWVFbnRyeSBzZWxmIGNvbnRhaW5lZApieSBhZGRpbmcgdGhlICJj b21taXR0ZWQiIGJvb2xlYW4gZmllbGQgc28gYXN5bmNRdWV1ZVByb2Nlc3NQYWdlRW50cmllcygp CmNhbiB1c2UgdGhpcyB0byBjaGVjayBpZiB0aGUgdHJhbnNhY3Rpb24gb2YgdGhlIG5vdGlmaWNh dGlvbiBpcwpjb21taXR0ZWQgb3Igbm90LgoKV2Ugc2V0IGNvbW1pdHRlZCBhcyB0cnVlIHdoZW4g YWRkaW5nIHRoZSBlbnRyeSBvbiB0aGUgU0xSVSBwYWdlIGJ1ZmZlcgpjYWNoZSB3aGVuIFByZUNv bW1pdF9Ob3RpZnkoKSBpcyBjYWxsZWQgYW5kIGlmIGFuIGVycm9yIG9jY3VyIGJlZm9yZQpBdENv bW1pdF9Ob3RpZnkoKSB0aGUgQXRBYm9ydF9Ob3RpZnkoKSB3aWxsIGJlIGNhbGxlZCB3aGljaCB3 aWxsIG1hcmsKdGhlIGNvbW1pdHRlZCBmaWVsZCBhcyBmYWxzZS4gV2UgZG8gdGhpcyBieSByZW1l bWJlcmluZyB0aGUgUVVFVUVfSEVBRApwb3NpdGlvbiBiZWZvcmUgdGhlIFByZUNvbW1pdF9Ob3Rp ZnkoKSBzdGFydCBhZGRpbmcgZW50cmllcyBvbiB0aGUKc2hhcmVkIHF1ZXVlLCBhbmQgaWYgdGhl IHRyYW5zYWN0aW9uIGNyYXNoIHdlIGl0ZXJhdGUgZnJvbSB0aGlzIHNhdmVkCnBvc2l0aW9uIHVu dGlsIHRoZSBuZXcgUVVFVUVfSEVBRCBwb3NpdGlvbiBtYXJraW5nIHRoZSBlbnRyaWVzIGFzIG5v dApjb21taXR0ZWQuCgpBbHNvIHRoaXMgY29tbWl0IGluY2x1ZGUgVEFQIHRlc3RzIHRvIGV4ZXJj aXNlIHRoZSBWQUNVVU0gRlJFRVpFIGlzc3VlCmFuZCBhbHNvIHRoZSBzY2VuYXJpbyBvZiBhbiBl cnJvciBiZWluZyBvY2N1ciBiZXR3ZWVuIHRoZQpQcmVDb21taXRfTm90aWZ5KCkgYW5kIEF0Q29t bWl0X05vdGlmeSgpIGNhbGxzLgoKQ28tYXV0aG9yZWQtYnk6IEFyc2VuaXkgTXVraGluIDxhcnNl bml5Lm11a2hpbi5kZXZAZ21haWwuY29tPgotLS0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2FzeW5j LmMgICAgICAgICAgICAgICAgICB8IDE4NSArKysrKysrKysrKysrKysrKy0KIHNyYy9iYWNrZW5k L3N0b3JhZ2UvbG1nci9sbWdyLmMgICAgICAgICAgICAgICB8ICAxOSArKwogc3JjL2luY2x1ZGUv c3RvcmFnZS9sbWdyLmggICAgICAgICAgICAgICAgICAgIHwgICAzICsKIHNyYy90ZXN0L21vZHVs ZXMvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvdGVzdC9tb2R1bGVz L21lc29uLmJ1aWxkICAgICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL3Rlc3QvbW9kdWxlcy90 ZXN0X2xpc3Rlbl9ub3RpZnkvTWFrZWZpbGUgIHwgIDE3ICsrCiAuLi4vbW9kdWxlcy90ZXN0X2xp c3Rlbl9ub3RpZnkvbWVzb24uYnVpbGQgICAgfCAgMTQgKysKIC4uLi90ZXN0X2xpc3Rlbl9ub3Rp ZnkvdC8wMDFfeGlkX2ZyZWV6ZS5wbCAgICB8ICA2NiArKysrKysrCiAuLi4vdC8wMDJfYWJvcnRl ZF90eF9ub3RpZmllcy5wbCAgICAgICAgICAgICAgfCAgNjYgKysrKysrKwogc3JjL3Rvb2xzL3Bn aW5kZW50L3R5cGVkZWZzLmxpc3QgICAgICAgICAgICAgIHwgICAxICsKIDEwIGZpbGVzIGNoYW5n ZWQsIDM3MiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQg c3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2xpc3Rlbl9ub3RpZnkvTWFrZWZpbGUKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfbGlzdGVuX25vdGlmeS9tZXNvbi5idWlsZAog Y3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9saXN0ZW5fbm90aWZ5L3Qv MDAxX3hpZF9mcmVlemUucGwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rl c3RfbGlzdGVuX25vdGlmeS90LzAwMl9hYm9ydGVkX3R4X25vdGlmaWVzLnBsCgpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvYXN5bmMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2Fz eW5jLmMKaW5kZXggNGJkMzdkNWJlYjUuLjRlN2MwZTE2ZDU3IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9jb21tYW5kcy9hc3luYy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2FzeW5jLmMK QEAgLTc5LDYgKzc5LDE5IEBACiAgKgkgIGFyZSB3YXkgYmVoaW5kIGFuZCBzaG91bGQgYmUga2lj a2VkIHRvIG1ha2UgdGhlbSBhZHZhbmNlIHRoZWlyCiAgKgkgIHBvaW50ZXJzKS4KICAqCisgKiAg ICBUaGUgbm90aWZpY2F0aW9uIGVudHJpZXMgYWRkZWQgdG8gdGhlIHF1ZXVlIGFyZSBzZWxmLWNv bnRhaW5lZCBhbmQKKyAqICAgIGluY2x1ZGUgYSAiY29tbWl0dGVkIiBmaWVsZCB0byBpbmZvcm0g bGlzdGVuZXIgYmFja2VuZHMgaWYgdGhlIGFzc29jaWF0ZWQKKyAqICAgIHRyYW5zYWN0aW9uIGhh cyBjb21taXR0ZWQuIFdlIGNvdWxkIHVzZSB0aGUgVHJhbnNhY3Rpb25JZERpZENvbW1pdCgpIGJ1 dAorICogICAgaWYgYSBub3RpZmljYXRpb24gcmVtYWluIGluIHRoZSBxdWV1ZSBsb25nIGVub3Vn aCBmb3IgVkFDVVVNIEZSRUVaRSB0bworICogICAgcmVtb3ZlIHRoZSBuZWNlc3NhcnkgcGdfeGFj dC8gZmlsZSwgdGhlIGxpc3RlbmVyIGJhY2tlbmQgd2lsbCBmYWNlIGVycm9ycworICogICAgdG8g Z2V0IHRoZSB0cmFuc2FjdGlvbiBzdGF0dXMuIFRvIHByZXZlbnQgdGhpcywgdGhlICJjb21taXR0 ZWQiIGZpZWxkIGlzCisgKiAgICBzZXQgdG8gdHJ1ZSBkdXJpbmcgUHJlQ29tbWl0X05vdGlmeSgp IGFuZCBpZiB0aGUgdHJhbnNhY3Rpb24gYWJvcnRzIGJldHdlZW4KKyAqICAgIHRoZSBQcmVDb21t aXRfTm90aWZ5KCkgYW5kIEF0Q29tbWl0X05vdGlmeSgpLCB0aGUgQXRBYm9ydF9Ob3RpZnkoKSBp cworICogICAgY2FsbGVkIHRvIG1hcmsgdGhlc2UgZW50cmllcyBhcyB1bmNvbW1pdHRlZC4gVG8g ZW5hYmxlIHRoaXMsIHdlIHNhdmUgdGhlCisgKiAgICBxdWV1ZSdzIGhlYWQgcG9zaXRpb24gYmVm b3JlIGFkZGluZyBuZXcgZW50cmllcyBmcm9tIHRoZSBpbi1wcm9ncmVzcyB0bworICogICAgY29t bWl0IHRyYW5zYWN0aW9uLiBJZiBhbiBhYm9ydCBvY2N1cnMsIEF0QWJvcnRfTm90aWZ5KCkgdXNl cyB0aGlzIHNhdmVkCisgKiAgICBwb3NpdGlvbiB0byBmaW5kIGFuZCBtYXJrIHRoZSBlbnRyaWVz IGFzIHVuY29tbWl0dGVkLgorICoKICAqCSAgRmluYWxseSwgYWZ0ZXIgd2UgYXJlIG91dCBvZiB0 aGUgdHJhbnNhY3Rpb24gYWx0b2dldGhlciBhbmQgYWJvdXQgdG8gZ28KICAqCSAgaWRsZSwgd2Ug c2NhbiB0aGUgcXVldWUgZm9yIG1lc3NhZ2VzIHRoYXQgbmVlZCB0byBiZSBzZW50IHRvIG91cgog ICoJICBmcm9udGVuZCAod2hpY2ggbWlnaHQgYmUgbm90aWZpZXMgZnJvbSBvdGhlciBiYWNrZW5k cywgb3Igc2VsZi1ub3RpZmllcwpAQCAtMTQyLDYgKzE1NSw3IEBACiAjaW5jbHVkZSAibWlzY2Fk bWluLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9pcGMuaCIKICNpbmNsdWRlICJzdG9yYWdlL2xtZ3Iu aCIKKyNpbmNsdWRlICJzdG9yYWdlL3Byb2NhcnJheS5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcHJv Y3NpZ25hbC5oIgogI2luY2x1ZGUgInRjb3AvdGNvcHByb3QuaCIKICNpbmNsdWRlICJ1dGlscy9i dWlsdGlucy5oIgpAQCAtMTgwLDYgKzE5NCw4IEBAIHR5cGVkZWYgc3RydWN0IEFzeW5jUXVldWVF bnRyeQogCU9pZAkJCWRib2lkOwkJCS8qIHNlbmRlcidzIGRhdGFiYXNlIE9JRCAqLwogCVRyYW5z YWN0aW9uSWQgeGlkOwkJCS8qIHNlbmRlcidzIFhJRCAqLwogCWludDMyCQlzcmNQaWQ7CQkJLyog c2VuZGVyJ3MgUElEICovCisJYm9vbAkJY29tbWl0dGVkOwkJLyogSXMgdHJhbnNhY3Rpb24gdGhh dCB0aGUgZW50cnkgYmVsb25ncworCQkJCQkJCQkgKiBjb21taXR0ZWQ/ICovCiAJY2hhcgkJZGF0 YVtOQU1FREFUQUxFTiArIE5PVElGWV9QQVlMT0FEX01BWF9MRU5HVEhdOwogfSBBc3luY1F1ZXVl RW50cnk7CiAKQEAgLTQwMSw4ICs0MTcsMjcgQEAgc3RydWN0IE5vdGlmaWNhdGlvbkhhc2gKIAlO b3RpZmljYXRpb24gKmV2ZW50OwkJLyogPT4gdGhlIGFjdHVhbCBOb3RpZmljYXRpb24gc3RydWN0 ICovCiB9OwogCisvKiAgSW5mb3JtYXRpb24gbmVlZGVkIGJ5IEF0X0Fib3J0Tm90aWZ5KCkgdG8g cmVtb3ZlIGVudHJpZXMgZnJvbSB0aGUgcXVldWUgZm9yIGFib3J0ZWQgdHJhbnNhY3Rpb25zLiAq LwordHlwZWRlZiBzdHJ1Y3QgQXRBYm9ydE5vdGlmeUluZm8KK3sKKwkvKgorCSAqIGhlYWQgcG9z aXRpb24gYmVmb3JlIHRoZSB0cmFuc2FjdGlvbiBzdGFydCBhZGRpbmcgZW50cmllcyBvbiB0aGUg c2hhcmVkCisJICogcXVldWUKKwkgKi8KKwlRdWV1ZVBvc2l0aW9uIHByZXZpb3VzSGVhZDsKKwor CS8qCisJICogaGVhZCBwb3NpdGlvbiBhZnRlciB0aGUgZW50cmllcyBmcm9tIHRoZSBpbi1wcm9n cmVzcyB0byBjb21taXQKKwkgKiB0cmFuc2FjdGlvbiB3ZXJlIGFkZGVkLgorCSAqLworCVF1ZXVl UG9zaXRpb24gaGVhZDsKKworfSBBdEFib3J0Tm90aWZ5SW5mbzsKKwogc3RhdGljIE5vdGlmaWNh dGlvbkxpc3QgKnBlbmRpbmdOb3RpZmllcyA9IE5VTEw7CiAKK3N0YXRpYyBBdEFib3J0Tm90aWZ5 SW5mbyAqYXRBYm9ydEluZm8gPSBOVUxMOworCiAvKgogICogSW5ib3VuZCBub3RpZmljYXRpb25z IGFyZSBpbml0aWFsbHkgcHJvY2Vzc2VkIGJ5IEhhbmRsZU5vdGlmeUludGVycnVwdCgpLAogICog Y2FsbGVkIGZyb20gaW5zaWRlIGEgc2lnbmFsIGhhbmRsZXIuIFRoYXQganVzdCBzZXRzIHRoZQpA QCAtNDU3LDYgKzQ5Miw3IEBAIHN0YXRpYyB2b2lkIEFkZEV2ZW50VG9QZW5kaW5nTm90aWZpZXMo Tm90aWZpY2F0aW9uICpuKTsKIHN0YXRpYyB1aW50MzIgbm90aWZpY2F0aW9uX2hhc2goY29uc3Qg dm9pZCAqa2V5LCBTaXplIGtleXNpemUpOwogc3RhdGljIGludAlub3RpZmljYXRpb25fbWF0Y2go Y29uc3Qgdm9pZCAqa2V5MSwgY29uc3Qgdm9pZCAqa2V5MiwgU2l6ZSBrZXlzaXplKTsKIHN0YXRp YyB2b2lkIENsZWFyUGVuZGluZ0FjdGlvbnNBbmROb3RpZmllcyh2b2lkKTsKK3N0YXRpYyB2b2lk IGFzeW5jUXVldWVSb2xsYmFja05vdGlmaWNhdGlvbnModm9pZCk7CiAKIC8qCiAgKiBDb21wdXRl IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdHdvIHF1ZXVlIHBhZ2UgbnVtYmVycy4KQEAgLTkyMiw2 ICs5NTgsMTggQEAgUHJlQ29tbWl0X05vdGlmeSh2b2lkKQogCQlMb2NrU2hhcmVkT2JqZWN0KERh dGFiYXNlUmVsYXRpb25JZCwgSW52YWxpZE9pZCwgMCwKIAkJCQkJCSBBY2Nlc3NFeGNsdXNpdmVM b2NrKTsKIAorCQkvKgorCQkgKiBCZWZvcmUgc3RhcnQgYWRkaW5nIGVudHJpZXMgb24gdGhlIHNo YXJlZCBxdWV1ZSwgc2F2ZSB0aGUgY3VycmVudAorCQkgKiBRVUVVRV9IRUFEIHNvIGlmIHRoZSBj dXJyZW50IGluLXByb2dyZXNzIHRvIGNvbW1pdCB0cmFuc2FjdGlvbgorCQkgKiBhYm9ydCB3ZSBj YW4gbWFyayB0aGUgbm90aWZpY2F0aW9ucyBhZGRlZCBieSB0aGlzIGFib3J0ZWQKKwkJICogdHJh bnNhY3Rpb24gYXMgbm90IGNvbW1pdHRlZC4gU2VlIEF0QWJvcnR0X05vdGlmeSgpIGZvciBtb3Jl IGluZm8uCisJCSAqLworCQlBc3NlcnQoYXRBYm9ydEluZm8gPT0gTlVMTCk7CisJCWF0QWJvcnRJ bmZvID0gcGFsbG9jKHNpemVvZihBdEFib3J0Tm90aWZ5SW5mbykpOworCQlMV0xvY2tBY3F1aXJl KE5vdGlmeVF1ZXVlTG9jaywgTFdfU0hBUkVEKTsKKwkJYXRBYm9ydEluZm8tPnByZXZpb3VzSGVh ZCA9IFFVRVVFX0hFQUQ7CisJCUxXTG9ja1JlbGVhc2UoTm90aWZ5UXVldWVMb2NrKTsKKwogCQkv KiBOb3cgcHVzaCB0aGUgbm90aWZpY2F0aW9ucyBpbnRvIHRoZSBxdWV1ZSAqLwogCQluZXh0Tm90 aWZ5ID0gbGlzdF9oZWFkKHBlbmRpbmdOb3RpZmllcy0+ZXZlbnRzKTsKIAkJd2hpbGUgKG5leHRO b3RpZnkgIT0gTlVMTCkKQEAgLTk0OCw2ICs5OTYsMTcgQEAgUHJlQ29tbWl0X05vdGlmeSh2b2lk KQogCQkJTFdMb2NrUmVsZWFzZShOb3RpZnlRdWV1ZUxvY2spOwogCQl9CiAKKwkJLyoKKwkJICog U2F2ZSB0aGUgbmV3IFFVRVVFX0hFQUQgcG9zaXRpb24gc28gaWYgYW5vdGhlciBwdWJsaXNoZXIg YWRkCisJCSAqIGVudHJpZXMgb24gdGhlIHNoYXJlZCBxdWV1ZSBhbmQgc3VjY2Vzc2Z1bGx5IGNv bW1pdCB0aGUgdHJhbnNhY3Rpb24KKwkJICogd2UgZG9uJ3QgY2hhbmdlIHRoZSBjb21taXR0ZWQg c3RhdHVzIG9mIHRoZXNlIG5vdGlmaWNhdGlvbnMgd2hpbGUKKwkJICogbWFya2luZyB0aGUgbm90 aWZpY2F0aW9uIGZyb20gYSBhYm9ydGVkIHRyYW5zYWN0aW9uIGFzIG5vdAorCQkgKiBjb21taXR0 ZWQuCisJCSAqLworCQlMV0xvY2tBY3F1aXJlKE5vdGlmeVF1ZXVlTG9jaywgTFdfU0hBUkVEKTsK KwkJYXRBYm9ydEluZm8tPmhlYWQgPSBRVUVVRV9IRUFEOworCQlMV0xvY2tSZWxlYXNlKE5vdGlm eVF1ZXVlTG9jayk7CisKIAkJLyogTm90ZSB0aGF0IHdlIGRvbid0IGNsZWFyIHBlbmRpbmdOb3Rp ZmllczsgQXRDb21taXRfTm90aWZ5IHdpbGwuICovCiAJfQogfQpAQCAtMTQwMiw2ICsxNDYxLDEz IEBAIGFzeW5jUXVldWVBZGRFbnRyaWVzKExpc3RDZWxsICpuZXh0Tm90aWZ5KQogCQkvKiBDb25z dHJ1Y3QgYSB2YWxpZCBxdWV1ZSBlbnRyeSBpbiBsb2NhbCB2YXJpYWJsZSBxZSAqLwogCQlhc3lu Y1F1ZXVlTm90aWZpY2F0aW9uVG9FbnRyeShuLCAmcWUpOwogCisJCS8qCisJCSAqIE1hcmsgdGhl IGVudHJ5IGFzIGNvbW1pdHRlZC4gSWYgdGhlIHRyYW5zYWN0aW9uIHRoYXQgdGhpcworCQkgKiBu b3RpZmljYXRpb24gYmVsb25ncyBmYWlscyB0byBjb21taXQgdGhlIEF0QWJvcnRfTm90aWZ5KCkg d2lsbCBtYXJrCisJCSAqIHRoaXMgZW50cnkgYXMgbm90IGNvbW1pdHRlZC4KKwkJICovCisJCXFl LmNvbW1pdHRlZCA9IHRydWU7CisKIAkJb2Zmc2V0ID0gUVVFVUVfUE9TX09GRlNFVChxdWV1ZV9o ZWFkKTsKIAogCQkvKiBDaGVjayB3aGV0aGVyIHRoZSBlbnRyeSByZWFsbHkgZml0cyBvbiB0aGUg Y3VycmVudCBwYWdlICovCkBAIC0xNjc4LDYgKzE3NDQsMTYgQEAgQXRBYm9ydF9Ob3RpZnkodm9p ZCkKIAlpZiAoYW1SZWdpc3RlcmVkTGlzdGVuZXIgJiYgbGlzdGVuQ2hhbm5lbHMgPT0gTklMKQog CQlhc3luY1F1ZXVlVW5yZWdpc3RlcigpOwogCisJLyoKKwkgKiBBdEFib3J0X05vdGlmeSBpbmZv cm1hdGlvbiBpcyBzZXQgd2hlbiB3ZSBhcmUgYWRkaW5nIGVudHJpZXMgb24gdGhlCisJICogZ2xv YmFsIHNoYXJlZCBxdWV1ZSBhdCBQcmVDb21taXRfTm90aWZ5KCksIHNvIGluIGNhc2Ugb2YgYW4g YWJvcnQgb24KKwkgKiB0aGUgdHJhbnNhY3Rpb24gYmV0d2VlbiB0aGUgUHJlQ29tbWl0X05vdGlm eSgpIGFuZCBBdENvbW1pdF9Ob3RpZnkoKSB3ZQorCSAqIHVzZSB0aGlzIGluZm9ybWF0aW9uIHRv IG1hcmsgdGhlIGVudHJpZXMgZnJvbSB0aGUgYWJvcnRlZCB0cmFuc2FjdGlvbgorCSAqIGFzIG5v dCBjb21taXR0ZWQuCisJICovCisJaWYgKGF0QWJvcnRJbmZvICE9IE5VTEwpCisJCWFzeW5jUXVl dWVSb2xsYmFja05vdGlmaWNhdGlvbnMoKTsKKwogCS8qIEFuZCBjbGVhbiB1cCAqLwogCUNsZWFy UGVuZGluZ0FjdGlvbnNBbmROb3RpZmllcygpOwogfQpAQCAtMjA2Niw3ICsyMTQyLDcgQEAgYXN5 bmNRdWV1ZVByb2Nlc3NQYWdlRW50cmllcyh2b2xhdGlsZSBRdWV1ZVBvc2l0aW9uICpjdXJyZW50 LAogCQkJCXJlYWNoZWRTdG9wID0gdHJ1ZTsKIAkJCQlicmVhazsKIAkJCX0KLQkJCWVsc2UgaWYg KFRyYW5zYWN0aW9uSWREaWRDb21taXQocWUtPnhpZCkpCisJCQllbHNlIGlmIChxZS0+Y29tbWl0 dGVkKQogCQkJewogCQkJCS8qIHFlLT5kYXRhIGlzIHRoZSBudWxsLXRlcm1pbmF0ZWQgY2hhbm5l bCBuYW1lICovCiAJCQkJY2hhcgkgICAqY2hhbm5lbCA9IHFlLT5kYXRhOwpAQCAtMjM4NSw2ICsy NDYxLDcgQEAgQ2xlYXJQZW5kaW5nQWN0aW9uc0FuZE5vdGlmaWVzKHZvaWQpCiAJICovCiAJcGVu ZGluZ0FjdGlvbnMgPSBOVUxMOwogCXBlbmRpbmdOb3RpZmllcyA9IE5VTEw7CisJYXRBYm9ydElu Zm8gPSBOVUxMOwogfQogCiAvKgpAQCAtMjM5NSwzICsyNDcyLDEwOSBAQCBjaGVja19ub3RpZnlf YnVmZmVycyhpbnQgKm5ld3ZhbCwgdm9pZCAqKmV4dHJhLCBHdWNTb3VyY2Ugc291cmNlKQogewog CXJldHVybiBjaGVja19zbHJ1X2J1ZmZlcnMoIm5vdGlmeV9idWZmZXJzIiwgbmV3dmFsKTsKIH0K KworCisvKgorICogIE1hcmsgbm90aWZpY2F0aW9ucyBhZGRlZCBvbiBhbiBpbi1wcm9ncmVzcyB0 byBjb21taXQgdHJhbnNhY3Rpb24gYXMgbm90IGNvbW1pdHRlZC4KKyAqCisgKiBOb3RpZmljYXRp b25zIGFkZGVkIG9uIHRoZSBzaGFyZWQgZ2xvYmFsIHF1ZXVlIGFyZSBhZGRlZCB3aXRoIGNvbW1p dHRlZCA9CisgKiB0cnVlIGR1cmluZyBQcmVDb21taXRfTm90aWZ5KCkgY2FsbC4gSWYgYW4gZXJy b3Igb2NjdXIgYmV0d2VlbiB0aGUKKyAqIFByZUNvbW1pdF9Ob3RpZnkoKSBhbmQgQXRDb21taXRf Tm90aWZ5KCkgdGhlIEF0QWJvcnRfTm90aWZ5KCkgd2lsbCBiZSBjYWxsZWQKKyAqIGFuZCB3ZSBu ZWVkIHRvIG1hcmsgdGhlc2Ugbm90aWZpY2F0aW9ucyBhZGRlZCBvbiB0aGUgc2hhcmVkIHF1ZXVl IGJ5IHRoZQorICogYWJvcnRlZCB0cmFuc2FjdGlvbiBhcyBub3QgY29tbWl0dGVkIHNvIHRoYXQg bGlzdGVuZXIgYmFja2VuZHMgY2FuIHNraXAKKyAqIHRoZXNlIG5vdGlmaWNhdGlvbnMgd2hlbiBy ZWFkaW5nIHRoZSBxdWV1ZS4KKyAqCisgKiBXZSBwcmV2aW91c2x5IHJlbHkgb24gVHJhbnNhY3Rp b25EaWRDb21taXQoKSB0byBjaGVjayB0aGlzIGJ1dCBpZiBhCisgKiBub3RpZmljYXRpb24gaXMg a2VlcCBmb3IgdG9vIGxvbmcgb24gdGhlIHF1ZXVlIGFuZCB0aGUgVkFDVVVNIEZSRUVaRSBpcwor ICogZXhlY3V0ZWQgZHVyaW5nIHRoaXMgcGVyaW9kIGl0IGNhbiByZW1vdmUgY2xvZyBmaWxlcyB0 aGF0IGlzIG5lZWRlZCB0byBjaGVjaworICogdGhlIHRyYW5zYWN0aW9uIHN0YXR1cyBvZiB0aGlz IG5vdGlmaWNhdGlvbiwgc28gd2UgbWFrZSB0aGUgbm90aWZpY2F0aW9uCisgKiBlbnRyaWVzIHNl bGYgY29udGFpbmVkIHRvIHNraXAgdGhpcyBwcm9ibGVtLgorICoKKyAqLworc3RhdGljIHZvaWQK K2FzeW5jUXVldWVSb2xsYmFja05vdGlmaWNhdGlvbnModm9pZCkKK3sKKwlRdWV1ZVBvc2l0aW9u IGN1cnJlbnQgPSBhdEFib3J0SW5mby0+cHJldmlvdXNIZWFkOworCVF1ZXVlUG9zaXRpb24gaGVh ZCA9IGF0QWJvcnRJbmZvLT5oZWFkOworCisJLyoKKwkgKiBJdGVyYXRlcyBmcm9tIHRoZSBwb3Np dGlvbiBzYXZlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSB0cmFuc2FjdGlvbgorCSAqIChwcmV2 aW91c0hlYWQpIHRvIHRoZSBjdXJyZW50IGhlYWQgb2YgdGhlIHF1ZXVlLiBXZSBkbyB0aGlzIHRv IG1hcmsgYWxsCisJICogZW50cmllcyB3aXRoaW4gdGhpcyByYW5nZSBhcyB1bmNvbW1pdHRlZCBp biBjYXNlIG9mIGEgdHJhbnNhY3Rpb24KKwkgKiBjcmFzaC4KKwkgKi8KKwlmb3IgKDs7KQorCXsK KwkJaW50NjQJCWN1cnBhZ2UgPSBRVUVVRV9QT1NfUEFHRShjdXJyZW50KTsKKwkJaW50CQkJY3Vy b2Zmc2V0ID0gUVVFVUVfUE9TX09GRlNFVChjdXJyZW50KTsKKwkJTFdMb2NrCSAgICpsb2NrID0g U2ltcGxlTHJ1R2V0QmFua0xvY2soTm90aWZ5Q3RsLCBjdXJwYWdlKTsKKwkJaW50CQkJc2xvdG5v OworCisJCS8qCisJCSAqIElmIHdlIGhhdmUgcmVhY2hlZCB0aGUgaGVhZCwgYWxsIGVudHJpZXMg ZnJvbSB0aGlzIHRyYW5zYWN0aW9uIGhhdmUKKwkJICogYmVlbiBtYXJrZWQgYXMgbm90IGNvbW1p dHRlZCBzbyBicmVhayB0aGUgbG9vcC4KKwkJICovCisJCWlmIChRVUVVRV9QT1NfRVFVQUwoY3Vy cmVudCwgaGVhZCkpCisJCQlicmVhazsKKworCQkvKgorCQkgKiBBY3F1aXJlIGFuIGV4Y2x1c2l2 ZSBsb2NrIG9uIHRoZSBjdXJyZW50IFNMUlUgcGFnZSB0byBlbnN1cmUgbm8KKwkJICogb3RoZXIg cHJvY2VzcyBjYW4gcmVhZCBvciB3cml0ZSB0byBpdCB3aGlsZSB3ZSBhcmUgbWFya2luZyB0aGUK KwkJICogZW50cmllcy4KKwkJICovCisJCUxXTG9ja0FjcXVpcmUobG9jaywgTFdfRVhDTFVTSVZF KTsKKworCQkvKiBGZXRjaCB0aGUgcGFnZSBmcm9tIFNMUlUgdG8gbWFyayBlbnRyaWVzIGFzIG5v dCBjb21taXR0ZWQuICovCisJCXNsb3RubyA9IFNpbXBsZUxydVJlYWRQYWdlKE5vdGlmeUN0bCwg Y3VycGFnZSwgdHJ1ZSwgSW52YWxpZFRyYW5zYWN0aW9uSWQpOworCisJCS8qCisJCSAqIExvb3Ag dGhyb3VnaCBhbGwgZW50cmllcyBvbiB0aGUgY3VycmVudCBwYWdlLiBUaGUgbG9vcCB3aWxsCisJ CSAqIGNvbnRpbnVlIHVudGlsIHdlIHJlYWNoIHRoZSBlbmQgb2YgdGhlIHBhZ2Ugb3IgdGhlIGN1 cnJlbnQgaGVhZC4KKwkJICovCisJCWZvciAoOzspCisJCXsKKwkJCUFzeW5jUXVldWVFbnRyeSAq cWU7CisJCQlib29sCQlyZWFjaGVkRW5kT2ZQYWdlOworCisJCQkvKgorCQkJICogQ2hlY2sgYWdh aW4gdG8gc3RvcCBwcm9jZXNzaW5nIHRoZSBlbnRyaWVzIG9uIHRoZSBjdXJyZW50IHBhZ2UuCisJ CQkgKi8KKwkJCWlmIChRVUVVRV9QT1NfRVFVQUwoY3VycmVudCwgaGVhZCkpCisJCQkJYnJlYWs7 CisKKwkJCS8qCisJCQkgKiBHZXQgYSBwb2ludGVyIHRvIHRoZSBjdXJyZW50IGVudHJ5IHdpdGhp biB0aGUgc2hhcmVkIHBhZ2UKKwkJCSAqIGJ1ZmZlci4KKwkJCSAqLworCQkJcWUgPSAoQXN5bmNR dWV1ZUVudHJ5ICopIChOb3RpZnlDdGwtPnNoYXJlZC0+cGFnZV9idWZmZXJbc2xvdG5vXSArIGN1 cm9mZnNldCk7CisKKwkJCS8qCisJCQkgKiBKdXN0IGZvciBzYW5pdHksIGFsbCBlbnRyaWVzIG9u IHRoZSBzaGFyZWQgcXVldWUgc2hvdWxkIGJlCisJCQkgKiBtYXJrZWQgYXMgbm90IGNvbW1pdHRl ZC4KKwkJCSAqLworCQkJQXNzZXJ0KHFlLT5jb21taXR0ZWQpOworCisJCQkvKiBFbnN1cmUgdGhh dCBsaXN0ZW5lciBiYWNrZW5kcyBjYW4gbm90IHNlZSB0aGVzZSBlbnRyaWVzICovCisJCQlBc3Nl cnQoVHJhbnNhY3Rpb25JZElzSW5Qcm9ncmVzcyhxZS0+eGlkKSk7CisKKwkJCS8qCisJCQkgKiBN YXJrIHRoZSBlbnRyeSBhcyB1bmNvbW1pdHRlZCBzbyBsaXN0ZW5lciBiYWNrZW5kcyBjYW4gc2tp cAorCQkJICogdGhpcyBub3RpZmljYXRpb24uCisJCQkgKi8KKwkJCXFlLT5jb21taXR0ZWQgPSBm YWxzZTsKKworCQkJLyogQWR2YW5jZSBvdXIgcG9zaXRpb24uICovCisJCQlyZWFjaGVkRW5kT2ZQ YWdlID0gYXN5bmNRdWV1ZUFkdmFuY2UoJmN1cnJlbnQsIHFlLT5sZW5ndGgpOworCQkJaWYgKHJl YWNoZWRFbmRPZlBhZ2UpCisJCQkJYnJlYWs7CisKKwkJCS8qCisJCQkgKiBVcGRhdGUgdGhlIG9m ZnNldCBmb3IgdGhlIG5leHQgaXRlcmF0aW9uIHdpdGhpbiB0aGUgc2FtZSBwYWdlLgorCQkJICov CisJCQljdXJvZmZzZXQgPSBRVUVVRV9QT1NfT0ZGU0VUKGN1cnJlbnQpOworCQl9CisKKwkJLyog UmVsZWFzZSB0aGUgZXhjbHVzaXZlIGxvY2sgb24gdGhlIHBhZ2UuICovCisJCUxXTG9ja1JlbGVh c2UobG9jayk7CisJfQorfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL2xt Z3IuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9sbWdyLmMKaW5kZXggNDc5OGViNzkwMDMu LjEyYTIxYzUxNDUyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvbG1nci5j CisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9sbWdyLmMKQEAgLTM1Nyw2ICszNTcsMjUg QEAgQ2hlY2tSZWxhdGlvbk9pZExvY2tlZEJ5TWUoT2lkIHJlbGlkLCBMT0NLTU9ERSBsb2NrbW9k ZSwgYm9vbCBvcnN0cm9uZ2VyKQogCXJldHVybiBMb2NrSGVsZEJ5TWUoJnRhZywgbG9ja21vZGUs IG9yc3Ryb25nZXIpOwogfQogCisvKgorICogIENoZWNrU2hhcmVkT2JqZWN0TG9ja2VkQnlNZQor ICoKKyAqICBMaWtlIENoZWNrUmVsYXRpb25Mb2NrZWRCeU1lLCBidXQgaXQgY2hlY2tzIGZvciBz aGFyZWQgb2JqZWN0cy4KKyAqLworYm9vbAorQ2hlY2tTaGFyZWRPYmplY3RMb2NrZWRCeU1lKE9p ZCBjbGFzc2lkLCBMT0NLTU9ERSBsb2NrbW9kZSwgYm9vbCBvcnN0cm9uZ2VyKQoreworCUxPQ0tU QUcJCXRhZzsKKworCVNFVF9MT0NLVEFHX09CSkVDVCh0YWcsCisJCQkJCSAgIEludmFsaWRPaWQs CisJCQkJCSAgIGNsYXNzaWQsCisJCQkJCSAgIEludmFsaWRPaWQsCisJCQkJCSAgIDApOworCisJ cmV0dXJuIExvY2tIZWxkQnlNZSgmdGFnLCBsb2NrbW9kZSwgb3JzdHJvbmdlcik7Cit9CisKIC8q CiAgKgkJTG9ja0hhc1dhaXRlcnNSZWxhdGlvbgogICoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L3N0b3JhZ2UvbG1nci5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9sbWdyLmgKaW5kZXggYjdhYmQx ODM5N2QuLmMxMTljOGY0ZGVkIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2xtZ3Iu aAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2xtZ3IuaApAQCAtNTAsNiArNTAsOSBAQCBleHRl cm4gYm9vbCBDaGVja1JlbGF0aW9uTG9ja2VkQnlNZShSZWxhdGlvbiByZWxhdGlvbiwgTE9DS01P REUgbG9ja21vZGUsCiAJCQkJCQkJCQlib29sIG9yc3Ryb25nZXIpOwogZXh0ZXJuIGJvb2wgQ2hl Y2tSZWxhdGlvbk9pZExvY2tlZEJ5TWUoT2lkIHJlbGlkLCBMT0NLTU9ERSBsb2NrbW9kZSwKIAkJ CQkJCQkJCSAgIGJvb2wgb3JzdHJvbmdlcik7CitleHRlcm4gYm9vbCBDaGVja1NoYXJlZE9iamVj dExvY2tlZEJ5TWUoT2lkIGNsYXNzaWQsIExPQ0tNT0RFIGxvY2ttb2RlLAorCQkJCQkJCQkJICAg Ym9vbCBvcnN0cm9uZ2VyKTsKKwogZXh0ZXJuIGJvb2wgTG9ja0hhc1dhaXRlcnNSZWxhdGlvbihS ZWxhdGlvbiByZWxhdGlvbiwgTE9DS01PREUgbG9ja21vZGUpOwogCiBleHRlcm4gdm9pZCBMb2Nr UmVsYXRpb25JZEZvclNlc3Npb24oTG9ja1JlbElkICpyZWxpZCwgTE9DS01PREUgbG9ja21vZGUp OwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9NYWtlZmlsZSBiL3NyYy90ZXN0L21vZHVs ZXMvTWFrZWZpbGUKaW5kZXggOTAyYTc5NTQxMDEuLmEwMTVjOTYxZDM1IDEwMDY0NAotLS0gYS9z cmMvdGVzdC9tb2R1bGVzL01ha2VmaWxlCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvTWFrZWZpbGUK QEAgLTI5LDYgKzI5LDcgQEAgU1VCRElSUyA9IFwKIAkJICB0ZXN0X2ludDEyOCBcCiAJCSAgdGVz dF9pbnRlZ2Vyc2V0IFwKIAkJICB0ZXN0X2pzb25fcGFyc2VyIFwKKwkJICB0ZXN0X2xpc3Rlbl9u b3RpZnkgXAogCQkgIHRlc3RfbGZpbmQgXAogCQkgIHRlc3RfbHdsb2NrX3RyYW5jaGVzIFwKIAkJ ICB0ZXN0X21pc2MgXApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9tZXNvbi5idWlsZCBi L3NyYy90ZXN0L21vZHVsZXMvbWVzb24uYnVpbGQKaW5kZXggMTRmYzc2MWM0Y2YuLjZhZjMzNDQ4 ZDdiIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL21lc29uLmJ1aWxkCisrKyBiL3NyYy90 ZXN0L21vZHVsZXMvbWVzb24uYnVpbGQKQEAgLTI4LDYgKzI4LDcgQEAgc3ViZGlyKCd0ZXN0X2dp bnBvc3RpbmdsaXN0JykKIHN1YmRpcigndGVzdF9pbnQxMjgnKQogc3ViZGlyKCd0ZXN0X2ludGVn ZXJzZXQnKQogc3ViZGlyKCd0ZXN0X2pzb25fcGFyc2VyJykKK3N1YmRpcigndGVzdF9saXN0ZW5f bm90aWZ5JykKIHN1YmRpcigndGVzdF9sZmluZCcpCiBzdWJkaXIoJ3Rlc3RfbHdsb2NrX3RyYW5j aGVzJykKIHN1YmRpcigndGVzdF9taXNjJykKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMv dGVzdF9saXN0ZW5fbm90aWZ5L01ha2VmaWxlIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2xpc3Rl bl9ub3RpZnkvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu LmRhMWJmNWJiMWI3Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2xp c3Rlbl9ub3RpZnkvTWFrZWZpbGUKQEAgLTAsMCArMSwxNyBAQAorIyBzcmMvdGVzdC9tb2R1bGVz L3Rlc3RfbGlzdGVuX25vdGlmeS9NYWtlZmlsZQorCitNT0RVTEUgPSB0ZXN0X2xpc3Rlbl9ub3Rp ZnkKK1BHRklMRURFU0MgPSAidGVzdF9saXN0ZW5fbm90aWZ5IC0gcmVncmVzc2lvbiB0ZXN0aW5n IGZvciBMSVNURU4vTk9USUZZIHN1cHBvcnQiCisKK1RBUF9URVNUUyA9IDEKKworaWZkZWYgVVNF X1BHWFMKK1BHX0NPTkZJRyA9IHBnX2NvbmZpZworUEdYUyA6PSAkKHNoZWxsICQoUEdfQ09ORklH KSAtLXBneHMpCitpbmNsdWRlICQoUEdYUykKK2Vsc2UKK3N1YmRpciA9IHNyYy90ZXN0L21vZHVs ZXMvdGVzdF9saXN0ZW5fbm90aWZ5Cit0b3BfYnVpbGRkaXIgPSAuLi8uLi8uLi8uLgoraW5jbHVk ZSAkKHRvcF9idWlsZGRpcikvc3JjL01ha2VmaWxlLmdsb2JhbAoraW5jbHVkZSAkKHRvcF9zcmNk aXIpL2NvbnRyaWIvY29udHJpYi1nbG9iYWwubWsKK2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvdGVz dC9tb2R1bGVzL3Rlc3RfbGlzdGVuX25vdGlmeS9tZXNvbi5idWlsZCBiL3NyYy90ZXN0L21vZHVs ZXMvdGVzdF9saXN0ZW5fbm90aWZ5L21lc29uLmJ1aWxkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAwLi5hNjgwNTJjZDM1MwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0 L21vZHVsZXMvdGVzdF9saXN0ZW5fbm90aWZ5L21lc29uLmJ1aWxkCkBAIC0wLDAgKzEsMTQgQEAK KyMgQ29weXJpZ2h0IChjKSAyMDIyLTIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50 IEdyb3VwCisKK3Rlc3RzICs9IHsKKyAgJ25hbWUnOiAndGVzdF9saXN0ZW5fbm90aWZ5JywKKyAg J3NkJzogbWVzb24uY3VycmVudF9zb3VyY2VfZGlyKCksCisgICdiZCc6IG1lc29uLmN1cnJlbnRf YnVpbGRfZGlyKCksCisgICd0YXAnOiB7CisgICAgJ3Rlc3RzJzogWworICAgICAgJ3QvMDAxX3hp ZF9mcmVlemUucGwnLAorICAgICAgJ3QvMDAyX2Fib3J0ZWRfdHhfbm90aWZpZXMucGwnCisgICAg XSwKKyAgfSwKK30KKwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2xpc3Rlbl9u b3RpZnkvdC8wMDFfeGlkX2ZyZWV6ZS5wbCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9saXN0ZW5f bm90aWZ5L3QvMDAxX3hpZF9mcmVlemUucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMDAuLjBhNTEzMGEwNDJlCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxl cy90ZXN0X2xpc3Rlbl9ub3RpZnkvdC8wMDFfeGlkX2ZyZWV6ZS5wbApAQCAtMCwwICsxLDY2IEBA CisjIENvcHlyaWdodCAoYykgMjAyNC0yMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVu dCBHcm91cAorCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzIEZBVEFMID0+ICdhbGwnOwordXNl IEZpbGU6OlBhdGggcXcobWtwYXRoKTsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwor dXNlIFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOwordXNlIFRlc3Q6Ok1vcmU7CisKK215ICRub2Rl ID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdub2RlJyk7Ciskbm9kZS0+aW5pdDsK KyRub2RlLT5zdGFydDsKKworIyBTZXR1cAorJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAn Q1JFQVRFIEVYVEVOU0lPTiB4aWRfd3JhcGFyb3VuZCcpOworJG5vZGUtPnNhZmVfcHNxbCgncG9z dGdyZXMnLAorCSdDUkVBVEUgVEFCTEUgdCBBUyBTRUxFQ1QgZyBBUyBhLCBnKzIgQVMgYiBmcm9t IGdlbmVyYXRlX3NlcmllcygxLDEwMDAwMCkgZzsnCispOworJG5vZGUtPnNhZmVfcHNxbCgncG9z dGdyZXMnLAorCSdBTFRFUiBEQVRBQkFTRSB0ZW1wbGF0ZTAgV0lUSCBBTExPV19DT05ORUNUSU9O UyB0cnVlJyk7CisKKyMgLS0tIFN0YXJ0IFNlc3Npb24gMSBhbmQgbGVhdmUgaXQgaWRsZSBpbiB0 cmFuc2FjdGlvbgorbXkgJHBzcWxfc2Vzc2lvbjEgPSAkbm9kZS0+YmFja2dyb3VuZF9wc3FsKCdw b3N0Z3JlcycpOworJHBzcWxfc2Vzc2lvbjEtPnF1ZXJ5X3NhZmUoJ2xpc3RlbiBzOycsICJTZXNz aW9uIDEgbGlzdGVucyB0byAncyciKTsKKyRwc3FsX3Nlc3Npb24xLT5xdWVyeV9zYWZlKCdiZWdp bjsnLCAiU2Vzc2lvbiAxIHN0YXJ0cyBhIHRyYW5zYWN0aW9uIik7CisKKyMgLS0tIFNlc3Npb24g MiwgbXVsdGlwbGUgbm90aWZ5J3MsIGFuZCBjb21taXQgLS0tCitmb3IgbXkgJGkgKDEgLi4gMTAp Cit7CisJJG5vZGUtPnNhZmVfcHNxbCgKKwkJJ3Bvc3RncmVzJywgIgorCQlCRUdJTjsKKwkJTk9U SUZZIHMsICckaSc7CisJCUNPTU1JVDsiKTsKK30KKworIyBDb25zdW1lIGVub3VnaCBYSURzIHRv IHRyaWdnZXIgdHJ1bmNhdGlvbgorJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAnc2VsZWN0 IGNvbnN1bWVfeGlkcygxMDAwMDAwMCk7Jyk7CisKKyMgRXhlY3V0ZSB1cGRhdGUgc28gdGhlIGZy b3plbiB4aWQgb2YgInQiIHRhYmxlIGlzIHVwZGF0ZWQgdG8gYSB4aWQgZ3JlYXRlcgorIyB0aGFu IGNvbnN1bWVfeGlkcygpIHJlc3VsdAorJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAnVVBE QVRFIHQgU0VUIGEgPSBhK2I7Jyk7CisKKyMgUmVtZW1iZXIgY3VycmVudCBkYXRmcm96ZW54aWQg YmVmb3JlIHZhY3V1bSBmcmVlemUgdG8gZW5zdXJlIHRoYXQgaXQgaXMgYWR2YW5jZWQuCitteSAk ZGF0YWZyb256ZW54aWQgPSAkbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJzZWxlY3QgZGF0 ZnJvemVueGlkIGZyb20gcGdfZGF0YWJhc2Ugd2hlcmUgZGF0bmFtZSA9ICdwb3N0Z3JlcyciKTsK KworIyBFeGVjdXRlIHZhY3V1bSBmcmVlemUgb24gYWxsIGRhdGFiYXNlcworJG5vZGUtPmNvbW1h bmRfb2soWyAndmFjdXVtZGInLCAnLS1hbGwnLCAnLS1mcmVlemUnLCAnLS1wb3J0JywgJG5vZGUt PnBvcnQgXSwKKwkidmFjdXVtZGIgLS1hbGwgLS1mcmVlemUiKTsKKworIyBHZXQgdGhlIG5ldyBk YXRmcm96ZW54aWQgYWZ0ZXIgdmFjdXVtIGZyZWV6ZSB0byBlbnN1cmUgdGhhdCBpcyBhZHZhbmNl ZCBidXQKKyMgd2UgY2FuIHN0aWxsIGdldCB0aGUgbm90aWZpY2F0aW9uIHN0YXR1cyBvZiB0aGUg bm90aWZpY2F0aW9uCitteSAkZGF0YWZyb256ZW54aWRfZnJlZXplID0gJG5vZGUtPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAic2VsZWN0IGRhdGZyb3plbnhpZCBmcm9tIHBnX2RhdGFiYXNlIHdoZXJl IGRhdG5hbWUgPSAncG9zdGdyZXMnIik7CitvaygkZGF0YWZyb256ZW54aWRfZnJlZXplID4gJGRh dGFmcm9uemVueGlkLCAnZGF0ZnJvemVueGlkIGlzIGFkdmFuY2VkJyk7CisKKyMgT24gU2Vzc2lv biAxLCBjb21taXQgYW5kIGVuc3VyZSB0aGF0IHRoZSBhbGwgbm90aWZpY2F0aW9ucyBpcyByZWNl aXZlZAorbXkgJHJlcyA9ICRwc3FsX3Nlc3Npb24xLT5xdWVyeV9zYWZlKCdjb21taXQ7JywgImNv bW1pdCBsaXN0ZW4gczsiKTsKK215ICRub3RpZmljYXRpb25zX2NvdW50ID0gMDsKK2ZvcmVhY2gg bXkgJGkgKHNwbGl0KCdcbicsICRyZXMpKQoreworCSRub3RpZmljYXRpb25zX2NvdW50Kys7CisJ bGlrZSgkaSwgcXIvQXN5bmNocm9ub3VzIG5vdGlmaWNhdGlvbiAicyIgd2l0aCBwYXlsb2FkICIk bm90aWZpY2F0aW9uc19jb3VudCIgcmVjZWl2ZWQvKTsKK30KK2lzKCRub3RpZmljYXRpb25zX2Nv dW50LCAxMCwgJ3JlY2VpdmVkIGFsbCBjb21taXR0ZWQgbm90aWZpY2F0aW9ucycpOworCitkb25l X3Rlc3RpbmcoKTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9saXN0ZW5fbm90 aWZ5L3QvMDAyX2Fib3J0ZWRfdHhfbm90aWZpZXMucGwgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3Rf bGlzdGVuX25vdGlmeS90LzAwMl9hYm9ydGVkX3R4X25vdGlmaWVzLnBsCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4xN2ZjYjRiNzg2ZQotLS0gL2Rldi9udWxsCisrKyBi L3NyYy90ZXN0L21vZHVsZXMvdGVzdF9saXN0ZW5fbm90aWZ5L3QvMDAyX2Fib3J0ZWRfdHhfbm90 aWZpZXMucGwKQEAgLTAsMCArMSw2NiBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMjQtMjAyNSwgUG9z dGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKwordXNlIHN0cmljdDsKK3VzZSB3YXJu aW5ncyBGQVRBTCA9PiAnYWxsJzsKK3VzZSBGaWxlOjpQYXRoIHF3KG1rcGF0aCk7Cit1c2UgUG9z dGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczsKK3Vz ZSBUZXN0OjpNb3JlOworCitteSAkbm9kZSA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5l dygnbm9kZScpOworJG5vZGUtPmluaXQ7Ciskbm9kZS0+c3RhcnQ7CisKKyMgVGVzdCBjaGVja3Mg dGhhdCBsaXN0ZW5lcnMgZG8gbm90IHJlY2VpdmUgbm90aWZpY2F0aW9ucyBmcm9tIGFib3J0ZWQK KyMgdHJhbnNhY3Rpb24gZXZlbiBpZiBub3RpZmljYXRpb25zIGhhdmUgYmVlbiBhZGRlZCB0byB0 aGUgbGlzdGVuL25vdGlmeQorIyBxdWV1ZS4gVG8gcmVwcm9kdWNlIGl0IHdlIHVzZSB0aGUgZmFj dCB0aGF0IHNlcmlhbGl6YWJsZSBjb25mbGljdHMKKyMgYXJlIGNoZWNrZWQgYWZ0ZXIgdHggYWRk cyBub3RpZmljYXRpb25zIHRvIHRoZSBxdWV1ZS4KKworIyBTZXR1cAorJG5vZGUtPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAnQ1JFQVRFIFRBQkxFIHQxIChhIGJpZ3NlcmlhbCk7Jyk7CisKKyMgTGlz dGVuZXIKK215ICRwc3FsX2xpc3RlbmVyID0gJG5vZGUtPmJhY2tncm91bmRfcHNxbCgncG9zdGdy ZXMnKTsKKyRwc3FsX2xpc3RlbmVyLT5xdWVyeV9zYWZlKCdMSVNURU4gY2g7Jyk7CisKKyMgU2Vz c2lvbjEuIFN0YXJ0IFNFUklBTElaQUJMRSB0eCBhbmQgYWRkIGEgbm90aWZpY2F0aW9uLgorbXkg JHBzcWxfc2Vzc2lvbjEgPSAkbm9kZS0+YmFja2dyb3VuZF9wc3FsKCdwb3N0Z3JlcycpOworJHBz cWxfc2Vzc2lvbjEtPnF1ZXJ5X3NhZmUoIgorCUJFR0lOIElTT0xBVElPTiBMRVZFTCBTRVJJQUxJ WkFCTEU7CisJU0VMRUNUICogRlJPTSB0MTsKKwlJTlNFUlQgSU5UTyB0MSBERUZBVUxUIFZBTFVF UzsKKwlOT1RJRlkgY2gsJ2NvbW1pdHRlZCc7CisiKTsKKworIyBTZXNzaW9uMi4gU3RhcnQgU0VS SUFMSVpBQkxFIHR4LCBhZGQgYSBub3RpZmljYXRpb24gYW5kIGludHJvZHVjZSBhIGNvbmZsaWN0 CisjIHdpdGggc2Vzc2lvbjEuCitteSAkcHNxbF9zZXNzaW9uMiA9ICRub2RlLT5iYWNrZ3JvdW5k X3BzcWwoJ3Bvc3RncmVzJywgb25fZXJyb3Jfc3RvcCA9PiAwKTsKKyRwc3FsX3Nlc3Npb24yLT5x dWVyeV9zYWZlKCIKKwlCRUdJTiBJU09MQVRJT04gTEVWRUwgU0VSSUFMSVpBQkxFOworCVNFTEVD VCAqIEZST00gdDE7CisJSU5TRVJUIElOVE8gdDEgREVGQVVMVCBWQUxVRVM7CisJTk9USUZZIGNo LCdhYm9ydGVkJzsKKyIpOworCisjIFNlc3Npb24xIHNob3VsZCBiZSBjb21taXR0ZWQgc3VjY2Vz c2Z1bGx5LiBMaXN0ZW5lcnMgbXVzdCByZWNlaXZlIHNlc3Npb24xCisjIG5vdGlmaWNhdGlvbnMu CiskcHNxbF9zZXNzaW9uMS0+cXVlcnlfc2FmZSgiQ09NTUlUOyIpOworCisjIFNlc3Npb24yIHNo b3VsZCBiZSBhYm9ydGVkIGR1ZSB0byB0aGUgY29uZmxpY3Qgd2l0aCBzZXNzaW9uMS4gVHJhbnNh Y3Rpb24KKyMgaXMgYWJvcnRlZCBhZnRlciBhZGRpbmcgbm90aWZpY2F0aW9ucyB0byB0aGUgbGlz dGVuL25vdGlmeSBxdWV1ZSwgYnV0CisjIGxpc3RlbmVycyBzaG91bGQgbm90IHJlY2VpdmUgc2Vz c2lvbjIgbm90aWZpY2F0aW9ucy4KKyRwc3FsX3Nlc3Npb24yLT5xdWVyeSgiQ09NTUlUOyIpOwor CisjIHNlbmQgYW5vdGhlciBub3RpZmljYXRpb24gYWZ0ZXIgYWJvcnRlZAorJG5vZGUtPnNhZmVf cHNxbCgncG9zdGdyZXMnLCAiTk9USUZZIGNoLCAnbmV4dF9jb21taXR0ZWQnOyIpOworCisjIGZl dGNoIG5vdGlmaWNhdGlvbnMKK215ICRyZXMgPSAkcHNxbF9saXN0ZW5lci0+cXVlcnlfc2FmZSgn YmVnaW47IGNvbW1pdDsnKTsKKworIyBjaGVjayByZWNlaXZlZCBub3RpZmljYXRpb25zCitteSBA bGluZXMgPSBzcGxpdCgnXG4nLCAkcmVzKTsKK2lzKEBsaW5lcywgMiwgJ3JlY2VpdmVkIGFsbCBj b21taXR0ZWQgbm90aWZpY2F0aW9ucycpOworbGlrZSgkbGluZXNbMF0sIHFyL0FzeW5jaHJvbm91 cyBub3RpZmljYXRpb24gImNoIiB3aXRoIHBheWxvYWQgImNvbW1pdHRlZCIgcmVjZWl2ZWQvKTsK K2xpa2UoJGxpbmVzWzFdLCBxci9Bc3luY2hyb25vdXMgbm90aWZpY2F0aW9uICJjaCIgd2l0aCBw YXlsb2FkICJuZXh0X2NvbW1pdHRlZCIgcmVjZWl2ZWQvKTsKKworZG9uZV90ZXN0aW5nKCk7CmRp ZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9w Z2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4IDNjODBkNDliNjdlLi45NjdjOWNkZjcwNCAxMDA2 NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xz L3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTE1OSw2ICsxNTksNyBAQCBBcnJheVR5cGUKIEFz eW5jUXVldWVDb250cm9sCiBBc3luY1F1ZXVlRW50cnkKIEFzeW5jUmVxdWVzdAorQXRBYm9ydE5v dGlmeUluZm8KIEF0dEluTWV0YWRhdGEKIEF0dFN0YXRzU2xvdAogQXR0b3B0Q2FjaGVFbnRyeQot LSAKMi4zOS41IChBcHBsZSBHaXQtMTU0KQoK --72e7ba35b0f553cf000aebd1a51acecabd589583beff3d66767e62ffb0da--