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 1vgMT2-00BNaK-2o for pgsql-hackers@arkaria.postgresql.org; Thu, 15 Jan 2026 12:28:49 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vgMT1-00GpUZ-2P for pgsql-hackers@arkaria.postgresql.org; Thu, 15 Jan 2026 12:28:47 +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.96) (envelope-from ) id 1vgMT1-00GpUN-12 for pgsql-hackers@lists.postgresql.org; Thu, 15 Jan 2026 12:28:47 +0000 Received: from mail-lf1-x12c.google.com ([2a00:1450:4864:20::12c]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vgMSy-000cCC-11 for pgsql-hackers@lists.postgresql.org; Thu, 15 Jan 2026 12:28:46 +0000 Received: by mail-lf1-x12c.google.com with SMTP id 2adb3069b0e04-59b6a987346so820900e87.3 for ; Thu, 15 Jan 2026 04:28:43 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb.com; s=google; t=1768480122; x=1769084922; 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=HqePZWP7VxVjmKn4sRKpHTvTg+xFLYymAwHst1Yi7NY=; b=kgGefSH3dAHiPN0ComYXfi+F4X6u4Invk0RASfwBhMiOXok3542R5NipFnxwXXRhKX CKYLWw1mKk3kSx0eihjbgFln9pKD4jClOSbL80k6Gi29EZHGCPO6G2UyKCZiYys3BSvf nl5b510oENSK4RGnnoFW5sdGHrj9RaTJJ4t5nnwgPFOJ1unSoo9pgV2Q0QErmtVGZ/LV FbLYwH1QgMeyXygXL2cFlWEpProb7L4zmVeBdOsD6cAK7XxAlkuejlybEAuWCEiW8SWf 80V0LefhAhZDmtrIaL7QFsXUyZbfzB1FL7sETJheuBBprJTHr9AXRsMyvJJ7LEpU9/1/ 7XyA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768480122; x=1769084922; 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=HqePZWP7VxVjmKn4sRKpHTvTg+xFLYymAwHst1Yi7NY=; b=PH058/3FBmhH4hbypW/ZegL+fo1/eAWVfPfMWrxQhZdUmgp9/1zZ7wIP1Mg/vlkPa8 AVleWrHdzG1ds68tEhIxmdHK1L4H4T+GEOJ6ZjJOWJ7CvqFSGKpm/NgDzUV+QErSBtKi UCLI6oMevLRbfiJlTFp1HqAlILa5rebT/wY74rhfWTZdMYdqUac7aFT1fa6IXxmcH+wf CBZnmxxKyzvJzOhepTXbGXOIvJuuI28IDt9bZxbttVAb3nYeatO8h0Xt/eHAkqY/+oXg MnRvuPuIYmbEIqEEaUAIz6VgcQZvqve/kJDd3V+jF+6oqer4BqBSKgzTuCeUVro8D1aS ZAFA== X-Forwarded-Encrypted: i=1; AJvYcCW7r8lZZk8DBOieZiXgxmgmVgqPkI//D+vgh02DsY9lxPO2Z4DZJHZPqe1NX0pa6G4/fzJ9H3oM7gVPBuK5@lists.postgresql.org X-Gm-Message-State: AOJu0Yz+vyBQHACK5Gr//IBjY+3v0rT/ZcurfNSQCJE5jvi6TuWBm3y1 0yB1aRdR81GnB4n14aXS/8tCM7muZzhKzohs9/LKlM4r5yqhMCxtkJiHhyM3otr0yRKACT5tVe4 6Kb8vMNqETNliU88G59mNy/fqTK6RKaX5XXbylU6j X-Gm-Gg: AY/fxX6d12vlSBtGKPWZ67+y4UrrnIMUDNLRlcbfuqja2aKwmxK3LfugALjeotp/e/g CXm14tQ0HyCIMnQidn5yTGZcKhrQZT8UclI4bZ5faFjmU/XNIzR8GuJ3RR8xumn536FuiDz3ZF6 /rN7QQHd6e/M5QfvRu+cUwWchjFL1UqC8wzqKGnUjwDT4waDX9P111Rr473S7uf+Es7jditNZ5O CKdOgU5V7BhRxRe/cgg5dJlIuLhwtBPWZZQl7zV803f4ol4r/e35VFO4AuXPPDMITaFvbhbDEs4 2UdeK+1DKl2yvmmPsnQgfdL5jJDmRLbq8n2nUcmBLrC568jULBozxzg= X-Received: by 2002:a05:6512:3d24:b0:59b:7bfa:9f with SMTP id 2adb3069b0e04-59ba0f8724bmr1930064e87.45.1768480122097; Thu, 15 Jan 2026 04:28:42 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: Jakub Wartak Date: Thu, 15 Jan 2026 13:28:30 +0100 X-Gm-Features: AZwV_Qg57iOfEIqSR3Bw1_gj4YCWLzidyWmdDJ51j5pKQXZXeddfhnCT35G9oTU Message-ID: Subject: Re: pg_plan_advice To: Robert Haas Cc: Lukas Fittl , Jacob Champion , Dian Fay , Matheus Alcantara , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000787c5806486c5d8f" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000787c5806486c5d8f Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Wed, Jan 14, 2026 at 11:11=E2=80=AFPM Robert Haas wrote: Hi Robert, > On Wed, Jan 14, 2026 at 6:02=E2=80=AFAM Jakub Wartak > wrote: > > a) q4.sql (please see attached file for repro). More or less: right > > after import I get a hard failure if the earlier recommended advice is > > enabled (smells like a bug to me: we shouldn't get any errors even if > > advice is bad). This can be solved by ANALYZE, but brought up back by > > truncating pg_statistics > > ERROR: unique semijoin found for relids (b 3) but not observed during = planning > > STATEMENT: explain (timing off, costs off, settings off, memory off) > > Hmm, so the plan tree walker thinks that we did a semijoin between > lineitem and orders by making lineitem unique on the join column and > then performing a regular join. That appears to be correct. But > pgpa_join_path_setup never created a pgpa_join_path_setup for that > possibility, or created one that doesn't actually match up properly to > what was found in the plan tree. Can you check whether a > pgpa_sj_unique_rel gets created in pgpa_join_path_setup, and with what > contents? OK, so today, on just barebone v9 (even without any fixes from this $subthr= ead), I couldn't get it to reproduce right out of the box right on the fresh cluster. It appears to another missing piece of the puzzle was to have max_parallel_workers_per_gather=3D0 (in addition to TRUNCATING pg_statisti= c), because otherwise it did not want to generate advice out of the box that wo= uld generate this specific ERROR. Maybe I'm big rookie here (OR just dumb), but it took me some time to reali= ze why we emit SEMIJOIN_UNIQUE() there, clearly the plan without parallelism has "Nested Loop", not like "Nested Loop Semi Join" (with max_parallel_workers_per_gather =3D 2). Yet it emits that and somehow later the query feature walker->query_features[PGPAQF_SEMIJOIN_UNIQUE] also is there, so that "unique semijoin found for.." error could be thrown. As per VERBOSE explain, one can spot this SemiJoin transformation is being applied (Nested Loop/Inner Unique: true), however sj_unique_rtis is empty (= ?!): [..] NOTICE: jointype=3Douter pps_NULL?=3D0 NOTICE: added SEMIJOIN_UNIQUE NOTICE: pgpa_plan_walker: walking over SEMIJOIN_UNIQUE features: 3, sj_unique_rtis=3D<> sj_unique_rels=3D<> ERROR: unique semijoin found for relids (b 3) but not observed during plan= ning Only *after* this, I've realized how hard all of that is reading comments n= earby `typedef struct pgpa_sj_unique_rel`. Anyway it appears that pgpa_plan_walker()/pgpa_planner_walker() is not having proper input information to begin with about SJs? It looks there is just one single place that sets pps->sj_unique_rels (lappend() in pgpa_join_path_setup()), but that's code path is only being launched when requesting explain is asking for advice: explain (costs off, plan_advice) SELECT [..] NOTICE: jointype=3Dinner pps_NULL?=3D0 NOTICE: found=3D0 NOTICE: not a duplicate, appending "(b 3)" to pps->sj_unique_rels NOTICE: jointype=3Douter pps_NULL?=3D0 NOTICE: found=3Dtrue! (ur->plan_name=3D(null) bms_ur_relids=3D3) NOTICE: found=3D1 NOTICE: jointype=3Dinner pps_NULL?=3D0 NOTICE: found=3Dtrue! (ur->plan_name=3D(null) bms_ur_relids=3D3) NOTICE: found=3D1 NOTICE: jointype=3Douter pps_NULL?=3D0 NOTICE: found=3Dtrue! (ur->plan_name=3D(null) bms_ur_relids=3D3) NOTICE: found=3D1 NOTICE: added SEMIJOIN_UNIQUE WARNING: could not dump unrecognized node type: 0 // ignore? NOTICE: pgpa_plan_walker: walking over SEMIJOIN_UNIQUE features: 3, sj_unique_rtis=3D((b 3)) sj_unique_rels=3D({}) (+ no error!) while with basic EXPLAIN (and advices planner/advises touching SJ transforms), I'm getting: dbt3=3D# explain (costs off) SELECT [..] NOTICE: jointype=3Dinner pps_NULL?=3D0 NOTICE: jointype=3Douter pps_NULL?=3D0 NOTICE: jointype=3Dinner pps_NULL?=3D0 NOTICE: jointype=3Douter pps_NULL?=3D0 NOTICE: added SEMIJOIN_UNIQUE NOTICE: pgpa_plan_walker: walking over SEMIJOIN_UNIQUE features: 3, sj_unique_rtis=3D<> sj_unique_rels=3D<> ERROR: unique semijoin found for relids (b 3) but not observed during plan= ning So we have started v9 with: if (pps->generate_advice_string) { -- but that's wrong due to potential crash in -02 builds + asan complaints we fixed that above bug with: if (pps !=3D NULL && pps->generate_advice_string) { -- but that's wrong due to not initializing SJ for normal explains so we end up doing simply this? if (pps !=3D NULL) { The last one seems to pass all my tests (with already provided fixup from yesterday), but I'm absolutely not sure if that's the proper way to address that). > > a) q8.sql (please see attached file for demo). It is even more > > bizarre, happens right after import , fixed by ANALYZE, but even > > TRUNCATING pg_statistic doesnt bring back the problem. Pinpointed that > > additional pg_clear_relation_stats() triggers the problem back. > > I found this one. I now think that > pgpa_planner_apply_join_path_advice() shouldn't added anything to > jo_permit_indexes when a join method hint implicitly permits a join > order. I simplified your test case to this: > > set pg_plan_advice.advice =3D 'JOIN_ORDER(n1 region customer) > NESTED_LOOP_PLAIN(region)'; > explain (costs off, plan_advice) > SELECT > n1.n_name AS nation > FROM > customer, > nation n1, > region > WHERE > c_nationkey =3D n1.n_nationkey > AND n1.n_regionkey =3D r_regionkey > AND r_name =3D 'AMERICA'; > > What was happening here is that when we considered a join between > {customer, nation} and region, pgpa_planner_apply_join_path_advice() > said, well, according to the JOIN_ORDER advice, this join order is not > allowed, which is correct. And, according to the NESTED_LOOP_PLAIN > advice, this join order is allowed, which is also correct, because > NESTED_LOOP_PLAIN(region) denies join orders where region is the > driving table, since those would make it impossible to respect the > advice, and this join order doesn't do that. Then, it concludes that > because one piece of advice says the join order is OK and the other > says it isn't, the advice conflicts. This is where I think it's going > off the rails: the NESTED_LOOP_PLAIN() advice should only be allowed > to act as a negative constraint, not a positive one. So what I did is: Yes! 3 three lines patches seems to help (and causes no other problems to best of my knowledge). The simplified test case results seem to be only changing like below, but it really fixes the Q8 NL->HJ. Supplied Plan Advice: - JOIN_ORDER(n1 region customer) /* matched, conflicting */ - NESTED_LOOP_PLAIN(region) /* matched, conflicting */ + JOIN_ORDER(n1 region customer) /* matched */ + NESTED_LOOP_PLAIN(region) /* matched */ BTW: I have found also that it fixes another (not yet here disclosed bug, because I've found it just today :): when running without stats, and with enable_nestloop=3DOFF (globally) Q5 was failing too due some sequence of HJ/Parallel HJ and slightly different Hash Cond) - nvm, wIth this patch it does NOT misbeh= ave. Maybe it would be good to include that into tests inside 0005, for that small tiny query above? > > 3b) XXX - marker:I was looking for a solution and apparently cfbot > > farm has those options, so they should be testing it anyway. And this > > brings me to a fact, that it maybe could be detected by cfbot, however > > the $thread is not registered so cfbot had no chance to see what's > > more there? (I'm mainly thinking about any cross-platform issues, if > > any). > > I mean, there is https://commitfest.postgresql.org/patch/6184/ Whoops, mea culpa, I was looking for PG-4 commitfest for some reason (so I should be looking on https://cfbot.cputube.org/next.html not just under "/" [main] one). -J. --000000000000787c5806486c5d8f Content-Type: text/plain; charset="US-ASCII"; name="q4_errors_hard_without_stats_and_no_parallel_v2.txt" Content-Disposition: attachment; filename="q4_errors_hard_without_stats_and_no_parallel_v2.txt" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mkff684z0 LS0KLS0gc3RlcCBieSBzdGVwLCBkZW1vIHRoYXQgaXQgZG9lc250IHdvcms6Ci0tCmRidDM9IyBz ZXQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0pPSU5fT1JERVIobGluZWl0ZW0gb3JkZXJzKSBO RVNURURfTE9PUF9QTEFJTihvcmRlcnMpIFNFUV9TQ0FOKGxpbmVpdGVtKSBJTkRFWF9TQ0FOKG9y ZGVycyBwdWJsaWMucGtfb3JkZXJzKSBHQVRIRVIobGluZWl0ZW0pIFNFTUlKT0lOX1VOSVFVRShs aW5laXRlbSkgTk9fR0FUSEVSKG9yZGVycyknOwpTRVQKZGJ0Mz0jIGV4cGxhaW4gKGNvc3RzIG9m ZikgU0VMRUNUCiAgICBvX29yZGVycHJpb3JpdHksCiAgICBjb3VudCgqKSBBUyBvcmRlcl9jb3Vu dApGUk9NCiAgICBvcmRlcnMKV0hFUkUKICAgIG9fb3JkZXJkYXRlID49IERBVEUgJzE5OTMtMDct MDEnCiAgICBBTkQgb19vcmRlcmRhdGUgPCBEQVRFICcxOTkzLTA3LTAxJyArIElOVEVSVkFMICcz JyBNT05USAogICAgQU5EIEVYSVNUUyAoCiAgICAgICAgU0VMRUNUCiAgICAgICAgICAgICoKICAg ICAgICBGUk9NCiAgICAgICAgICAgIGxpbmVpdGVtCiAgICAgICAgV0hFUkUKICAgICAgICAgICAg bF9vcmRlcmtleSA9IG9fb3JkZXJrZXkKICAgICAgICAgICAgQU5EIGxfY29tbWl0ZGF0ZSA8IGxf cmVjZWlwdGRhdGUKICAgICkKR1JPVVAgQlkKICAgIG9fb3JkZXJwcmlvcml0eQpPUkRFUiBCWQog ICAgb19vcmRlcnByaW9yaXR5OwpFUlJPUjogIHVuaXF1ZSBzZW1pam9pbiBmb3VuZCBmb3IgcmVs aWRzIChiIDMpIGJ1dCBub3Qgb2JzZXJ2ZWQgZHVyaW5nIHBsYW5uaW5nCmRidDM9IwoKCi0tIHNv IHdpdGggbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlcj0yIHdvcmtzICgtPiBOTyBFUlJP UikKc2V0IHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdKT0lOX09SREVSKG9yZGVycyBsaW5laXRl bSkKICAgTkVTVEVEX0xPT1BfUExBSU4obGluZWl0ZW0pCiAgIFNFUV9TQ0FOKG9yZGVycykKICAg SU5ERVhfT05MWV9TQ0FOKGxpbmVpdGVtIHB1YmxpYy5saW5laXRlbV9sX29yZGVya2V5X2xfc3Vw cGtleV9pZHgpCiAgIEdBVEhFUl9NRVJHRSgob3JkZXJzIGxpbmVpdGVtKSkKICAgU0VNSUpPSU5f Tk9OX1VOSVFVRShsaW5laXRlbSknOwoKLS0gd2hlbiBzZXQgdG8gMCwgdGhpcyBmYWlsczoKc2V0 IHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdKT0lOX09SREVSKGxpbmVpdGVtIG9yZGVycykKICAg TkVTVEVEX0xPT1BfUExBSU4ob3JkZXJzKQogICBTRVFfU0NBTihsaW5laXRlbSkKICAgSU5ERVhf U0NBTihvcmRlcnMgcHVibGljLnBrX29yZGVycykKICAgU0VNSUpPSU5fVU5JUVVFKGxpbmVpdGVt KQogICBOT19HQVRIRVIob3JkZXJzIGxpbmVpdGVtKSc7CgotLSBub3RlIHRoZSBTRU1JSk9JTl9V TklRVUUobGluZWl0ZW0pIHZzIFNFTUlKT0lOX05PTl9VTklRVUUobGluZWl0ZW0pLCBhcyBpdCBp cyBnb2luZyB0byBiZSBpbXBvcnRhbnQgbGF0ZXIKCi0tLQotLS0gRlJFU0gKLS0tCmRidDM9IyBl eHBsYWluIChjb3N0cyBvZmYscGxhbl9hZHZpY2UpIFNFTEVDVAogICAgb19vcmRlcnByaW9yaXR5 LAogICAgY291bnQoKikgQVMgb3JkZXJfY291bnQKRlJPTQogICAgb3JkZXJzCldIRVJFCiAgICBv X29yZGVyZGF0ZSA+PSBEQVRFICcxOTkzLTA3LTAxJwogICAgQU5EIG9fb3JkZXJkYXRlIDwgREFU RSAnMTk5My0wNy0wMScgKyBJTlRFUlZBTCAnMycgTU9OVEgKICAgIEFORCBFWElTVFMgKAogICAg ICAgIFNFTEVDVAogICAgICAgICAgICAqCiAgICAgICAgRlJPTQogICAgICAgICAgICBsaW5laXRl bQogICAgICAgIFdIRVJFCiAgICAgICAgICAgIGxfb3JkZXJrZXkgPSBvX29yZGVya2V5CiAgICAg ICAgICAgIEFORCBsX2NvbW1pdGRhdGUgPCBsX3JlY2VpcHRkYXRlCiAgICApCkdST1VQIEJZCiAg ICBvX29yZGVycHJpb3JpdHkKT1JERVIgQlkKICAgIG9fb3JkZXJwcmlvcml0eTsKTk9USUNFOiAg am9pbnR5cGU9aW5uZXIgcHBzX05VTEw/PTAKTk9USUNFOiAgZm91bmQ9MApOT1RJQ0U6ICBub3Qg YSBkdXBsbGljYXRlLCBhcHBlbmRpbmcgIihiIDMpIiB0byBwcHMtPnNqX3VuaXF1ZV9yZWxzCk5P VElDRTogIGpvaW50eXBlPW91dGVyIHBwc19OVUxMPz0wCk5PVElDRTogIGZvdW5kPXRydWUhICh1 ci0+cGxhbl9uYW1lPShudWxsKSBibXNfdXJfcmVsaWRzPTMpCk5PVElDRTogIGZvdW5kPTEKTk9U SUNFOiAgam9pbnR5cGU9aW5uZXIgcHBzX05VTEw/PTAKTk9USUNFOiAgZm91bmQ9dHJ1ZSEgKHVy LT5wbGFuX25hbWU9KG51bGwpIGJtc191cl9yZWxpZHM9MykKTk9USUNFOiAgZm91bmQ9MQpOT1RJ Q0U6ICBqb2ludHlwZT1vdXRlciBwcHNfTlVMTD89MApOT1RJQ0U6ICBmb3VuZD10cnVlISAodXIt PnBsYW5fbmFtZT0obnVsbCkgYm1zX3VyX3JlbGlkcz0zKQpOT1RJQ0U6ICBmb3VuZD0xCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBRVUVSWSBQTEFOCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogR3JvdXBBZ2dyZWdhdGUKICAg R3JvdXAgS2V5OiBvcmRlcnMub19vcmRlcnByaW9yaXR5CiAgIC0+ICBTb3J0CiAgICAgICAgIFNv cnQgS2V5OiBvcmRlcnMub19vcmRlcnByaW9yaXR5CiAgICAgICAgIC0+ICBOZXN0ZWQgTG9vcAog ICAgICAgICAgICAgICAtPiAgSGFzaEFnZ3JlZ2F0ZQogICAgICAgICAgICAgICAgICAgICBHcm91 cCBLZXk6IGxpbmVpdGVtLmxfb3JkZXJrZXkKICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBT Y2FuIG9uIGxpbmVpdGVtCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKGxfY29t bWl0ZGF0ZSA8IGxfcmVjZWlwdGRhdGUpCiAgICAgICAgICAgICAgIC0+ICBJbmRleCBTY2FuIHVz aW5nIHBrX29yZGVycyBvbiBvcmRlcnMKICAgICAgICAgICAgICAgICAgICAgSW5kZXggQ29uZDog KG9fb3JkZXJrZXkgPSBsaW5laXRlbS5sX29yZGVya2V5KQogICAgICAgICAgICAgICAgICAgICBG aWx0ZXI6ICgob19vcmRlcmRhdGUgPj0gJzE5OTMtMDctMDEnOjpkYXRlKSBBTkQgKG9fb3JkZXJk YXRlIDwgJzE5OTMtMTAtMDEgMDA6MDA6MDAnOjp0aW1lc3RhbXAgd2l0aG91dCB0aW1lIHpvbmUp KQogR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgogICBKT0lOX09SREVSKGxpbmVpdGVtIG9yZGVycykK ICAgTkVTVEVEX0xPT1BfUExBSU4ob3JkZXJzKQogICBTRVFfU0NBTihsaW5laXRlbSkKICAgSU5E RVhfU0NBTihvcmRlcnMgcHVibGljLnBrX29yZGVycykKICAgU0VNSUpPSU5fVU5JUVVFKGxpbmVp dGVtKQogICBOT19HQVRIRVIob3JkZXJzIGxpbmVpdGVtKQooMTkgcm93cykKCi0tCi0tIHF1aWNr IHNhbml0eSBjaGVjayBpZiB3ZSByZWFsbHkgc2VlIHRoZSBlcnJvciAoY29weS9wYXN0ZSBmcm9t IGFib3ZlKToKLS0KZGJ0Mz0jIHNldCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSk9JTl9PUkRF UihsaW5laXRlbSBvcmRlcnMpCiAgIE5FU1RFRF9MT09QX1BMQUlOKG9yZGVycykKICAgU0VRX1ND QU4obGluZWl0ZW0pCiAgIElOREVYX1NDQU4ob3JkZXJzIHB1YmxpYy5wa19vcmRlcnMpCiAgIFNF TUlKT0lOX1VOSVFVRShsaW5laXRlbSkKICAgTk9fR0FUSEVSKG9yZGVycyBsaW5laXRlbSknOwpT RVQKZGJ0Mz0jIGV4cGxhaW4gKGNvc3RzIG9mZikgU0VMRUNUCiAgICBvX29yZGVycHJpb3JpdHks CiAgICBjb3VudCgqKSBBUyBvcmRlcl9jb3VudApGUk9NCiAgICBvcmRlcnMKV0hFUkUKICAgIG9f b3JkZXJkYXRlID49IERBVEUgJzE5OTMtMDctMDEnCiAgICBBTkQgb19vcmRlcmRhdGUgPCBEQVRF ICcxOTkzLTA3LTAxJyArIElOVEVSVkFMICczJyBNT05USAogICAgQU5EIEVYSVNUUyAoCiAgICAg ICAgU0VMRUNUCiAgICAgICAgICAgICoKICAgICAgICBGUk9NCiAgICAgICAgICAgIGxpbmVpdGVt CiAgICAgICAgV0hFUkUKICAgICAgICAgICAgbF9vcmRlcmtleSA9IG9fb3JkZXJrZXkKICAgICAg ICAgICAgQU5EIGxfY29tbWl0ZGF0ZSA8IGxfcmVjZWlwdGRhdGUKICAgICkKR1JPVVAgQlkKICAg IG9fb3JkZXJwcmlvcml0eQpPUkRFUiBCWQogICAgb19vcmRlcnByaW9yaXR5OwpOT1RJQ0U6ICBq b2ludHlwZT1pbm5lciBwcHNfTlVMTD89MApOT1RJQ0U6ICBqb2ludHlwZT1vdXRlciBwcHNfTlVM TD89MApOT1RJQ0U6ICBqb2ludHlwZT1pbm5lciBwcHNfTlVMTD89MApOT1RJQ0U6ICBqb2ludHlw ZT1vdXRlciBwcHNfTlVMTD89MApFUlJPUjogIHVuaXF1ZSBzZW1pam9pbiBmb3VuZCBmb3IgcmVs aWRzIChiIDMpIGJ1dCBub3Qgb2JzZXJ2ZWQgZHVyaW5nIHBsYW5uaW5nCmRidDM9IwoKLS0geWVz ICwgd2UgZG8gc28gImIgMyIgc2VlbXMgdG8gYmUgSGFzaEFnZ3JlZ2F0ZS9Hcm91cCBLZXk6IGxp bmVpdGVtLmxfb3JkZXJrZXkKLS0gc28gaG93J3MgdGhhdCBOT1Qgb2JzZXJ2ZWQgZHVyaW5nIHBs YW5uaW5nIGlmIGl0IGlzIHRoZXJlPwoKZGJ0Mz0jIExPQUQgJ3BnX292ZXJleHBsYWluJzsKTE9B RApkYnQzPSMgZXhwbGFpbiAoY29zdHMgb2ZmLCBERUJVRykgU0VMRUNUCiAgICBvX29yZGVycHJp b3JpdHksCiAgICBjb3VudCgqKSBBUyBvcmRlcl9jb3VudApGUk9NCiAgICBvcmRlcnMKV0hFUkUK ICAgIG9fb3JkZXJkYXRlID49IERBVEUgJzE5OTMtMDctMDEnCiAgICBBTkQgb19vcmRlcmRhdGUg PCBEQVRFICcxOTkzLTA3LTAxJyArIElOVEVSVkFMICczJyBNT05USAogICAgQU5EIEVYSVNUUyAo CiAgICAgICAgU0VMRUNUCiAgICAgICAgICAgICoKICAgICAgICBGUk9NCiAgICAgICAgICAgIGxp bmVpdGVtCiAgICAgICAgV0hFUkUKICAgICAgICAgICAgbF9vcmRlcmtleSA9IG9fb3JkZXJrZXkK ICAgICAgICAgICAgQU5EIGxfY29tbWl0ZGF0ZSA8IGxfcmVjZWlwdGRhdGUKICAgICkKR1JPVVAg QlkKICAgIG9fb3JkZXJwcmlvcml0eQpPUkRFUiBCWQogICAgb19vcmRlcnByaW9yaXR5OwpOT1RJ Q0U6ICBqb2ludHlwZT1pbm5lciBwcHNfTlVMTD89MApOT1RJQ0U6ICBqb2ludHlwZT1vdXRlciBw cHNfTlVMTD89MApOT1RJQ0U6ICBqb2ludHlwZT1pbm5lciBwcHNfTlVMTD89MApOT1RJQ0U6ICBq b2ludHlwZT1vdXRlciBwcHNfTlVMTD89MAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTgotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KIEdyb3VwQWdncmVnYXRlCiAgIEdyb3VwIEtleTogb3JkZXJzLm9fb3JkZXJw cmlvcml0eQogICBEaXNhYmxlZCBOb2RlczogMAogICBQYXJhbGxlbCBTYWZlOiBmYWxzZQogICBQ bGFuIE5vZGUgSUQ6IDAKICAgLT4gIFNvcnQKICAgICAgICAgU29ydCBLZXk6IG9yZGVycy5vX29y ZGVycHJpb3JpdHkKICAgICAgICAgRGlzYWJsZWQgTm9kZXM6IDAKICAgICAgICAgUGFyYWxsZWwg U2FmZTogZmFsc2UKICAgICAgICAgUGxhbiBOb2RlIElEOiAxCiAgICAgICAgIC0+ICBOZXN0ZWQg TG9vcAogICAgICAgICAgICAgICBEaXNhYmxlZCBOb2RlczogMAogICAgICAgICAgICAgICBQYXJh bGxlbCBTYWZlOiBmYWxzZQogICAgICAgICAgICAgICBQbGFuIE5vZGUgSUQ6IDIKICAgICAgICAg ICAgICAgLT4gIEhhc2hBZ2dyZWdhdGUKICAgICAgICAgICAgICAgICAgICAgR3JvdXAgS2V5OiBs aW5laXRlbS5sX29yZGVya2V5CiAgICAgICAgICAgICAgICAgICAgIERpc2FibGVkIE5vZGVzOiAw CiAgICAgICAgICAgICAgICAgICAgIFBhcmFsbGVsIFNhZmU6IGZhbHNlCiAgICAgICAgICAgICAg ICAgICAgIFBsYW4gTm9kZSBJRDogMwogICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4g b24gbGluZWl0ZW0KICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAobF9jb21taXRk YXRlIDwgbF9yZWNlaXB0ZGF0ZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgRGlzYWJsZWQg Tm9kZXM6IDAKICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFyYWxsZWwgU2FmZTogZmFsc2UK ICAgICAgICAgICAgICAgICAgICAgICAgICAgUGxhbiBOb2RlIElEOiA0CiAgICAgICAgICAgICAg IC0+ICBJbmRleCBTY2FuIHVzaW5nIHBrX29yZGVycyBvbiBvcmRlcnMKICAgICAgICAgICAgICAg ICAgICAgSW5kZXggQ29uZDogKG9fb3JkZXJrZXkgPSBsaW5laXRlbS5sX29yZGVya2V5KQogICAg ICAgICAgICAgICAgICAgICBGaWx0ZXI6ICgob19vcmRlcmRhdGUgPj0gJzE5OTMtMDctMDEnOjpk YXRlKSBBTkQgKG9fb3JkZXJkYXRlIDwgJzE5OTMtMTAtMDEgMDA6MDA6MDAnOjp0aW1lc3RhbXAg d2l0aG91dCB0aW1lIHpvbmUpKQogICAgICAgICAgICAgICAgICAgICBEaXNhYmxlZCBOb2Rlczog MAogICAgICAgICAgICAgICAgICAgICBQYXJhbGxlbCBTYWZlOiBmYWxzZQogICAgICAgICAgICAg ICAgICAgICBQbGFuIE5vZGUgSUQ6IDUKICAgICAgICAgICAgICAgICAgICAgZXh0UGFyYW06IDAK ICAgICAgICAgICAgICAgICAgICAgYWxsUGFyYW06IDAKIFBsYW5uZWRTdG10OgogICBDb21tYW5k IFR5cGU6IHNlbGVjdAogICBGbGFnczogY2FuU2V0VGFnCiAgIFN1YnBsYW5zIE5lZWRpbmcgUmV3 aW5kOiBub25lCiAgIFJlbGF0aW9uIE9JRHM6IDE3MDg5IDE3MDYxCiAgIEV4ZWN1dG9yIFBhcmFt ZXRlciBUeXBlczogMjAKICAgUGFyc2UgTG9jYXRpb246IDAgdG8gZW5kCigzOSByb3dzKQoKZGJ0 Mz0jIGV4cGxhaW4gKGNvc3RzIG9mZiwgUkFOR0VfVEFCTEUpIFNFTEVDVAogICAgb19vcmRlcnBy aW9yaXR5LAogICAgY291bnQoKikgQVMgb3JkZXJfY291bnQKRlJPTQogICAgb3JkZXJzCldIRVJF CiAgICBvX29yZGVyZGF0ZSA+PSBEQVRFICcxOTkzLTA3LTAxJwogICAgQU5EIG9fb3JkZXJkYXRl IDwgREFURSAnMTk5My0wNy0wMScgKyBJTlRFUlZBTCAnMycgTU9OVEgKICAgIEFORCBFWElTVFMg KAogICAgICAgIFNFTEVDVAogICAgICAgICAgICAqCiAgICAgICAgRlJPTQogICAgICAgICAgICBs aW5laXRlbQogICAgICAgIFdIRVJFCiAgICAgICAgICAgIGxfb3JkZXJrZXkgPSBvX29yZGVya2V5 CiAgICAgICAgICAgIEFORCBsX2NvbW1pdGRhdGUgPCBsX3JlY2VpcHRkYXRlCiAgICApCkdST1VQ IEJZCiAgICBvX29yZGVycHJpb3JpdHkKT1JERVIgQlkKICAgIG9fb3JkZXJwcmlvcml0eTsKTk9U SUNFOiAgam9pbnR5cGU9aW5uZXIgcHBzX05VTEw/PTAKTk9USUNFOiAgam9pbnR5cGU9b3V0ZXIg cHBzX05VTEw/PTAKTk9USUNFOiAgam9pbnR5cGU9aW5uZXIgcHBzX05VTEw/PTAKTk9USUNFOiAg am9pbnR5cGU9b3V0ZXIgcHBzX05VTEw/PTAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogR3JvdXBBZ2dyZWdhdGUKICAgR3JvdXAgS2V5OiBv cmRlcnMub19vcmRlcnByaW9yaXR5CiAgIC0+ICBTb3J0CiAgICAgICAgIFNvcnQgS2V5OiBvcmRl cnMub19vcmRlcnByaW9yaXR5CiAgICAgICAgIC0+ICBOZXN0ZWQgTG9vcAogICAgICAgICAgICAg ICAtPiAgSGFzaEFnZ3JlZ2F0ZQogICAgICAgICAgICAgICAgICAgICBHcm91cCBLZXk6IGxpbmVp dGVtLmxfb3JkZXJrZXkKICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGxpbmVp dGVtCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKGxfY29tbWl0ZGF0ZSA8IGxf cmVjZWlwdGRhdGUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFNjYW4gUlRJOiAzCiAgICAg ICAgICAgICAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIHBrX29yZGVycyBvbiBvcmRlcnMKICAgICAg ICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKG9fb3JkZXJrZXkgPSBsaW5laXRlbS5sX29yZGVy a2V5KQogICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICgob19vcmRlcmRhdGUgPj0gJzE5OTMt MDctMDEnOjpkYXRlKSBBTkQgKG9fb3JkZXJkYXRlIDwgJzE5OTMtMTAtMDEgMDA6MDA6MDAnOjp0 aW1lc3RhbXAgd2l0aG91dCB0aW1lIHpvbmUpKQogICAgICAgICAgICAgICAgICAgICBTY2FuIFJU STogMQogUlRJIDEgKHJlbGF0aW9uLCBpbi1mcm9tLWNsYXVzZSk6CiAgIEVyZWY6IG9yZGVycyAo b19vcmRlcmtleSwgb19jdXN0a2V5LCBvX29yZGVyc3RhdHVzLCBvX3RvdGFscHJpY2UsIG9fb3Jk ZXJkYXRlLCBvX29yZGVycHJpb3JpdHksIG9fY2xlcmssIG9fc2hpcHByaW9yaXR5LCBvX2NvbW1l bnQpCiAgIFJlbGF0aW9uOiBvcmRlcnMKICAgUmVsYXRpb24gS2luZDogcmVsYXRpb24KICAgUmVs YXRpb24gTG9jayBNb2RlOiBBY2Nlc3NTaGFyZUxvY2sKICAgUGVybWlzc2lvbiBJbmZvIEluZGV4 OiAxCiBSVEkgMiAoZ3JvdXApOgogICBFcmVmOiAiKkdST1VQKiIgKG9fb3JkZXJwcmlvcml0eSkK IFJUSSAzIChyZWxhdGlvbiwgaW4tZnJvbS1jbGF1c2UpOgogICBFcmVmOiBsaW5laXRlbSAobF9v cmRlcmtleSwgbF9wYXJ0a2V5LCBsX3N1cHBrZXksIGxfbGluZW51bWJlciwgbF9xdWFudGl0eSwg bF9leHRlbmRlZHByaWNlLCBsX2Rpc2NvdW50LCBsX3RheCwgbF9yZXR1cm5mbGFnLCBsX2xpbmVz dGF0dXMsIGxfc2hpcGRhdGUsIGxfY29tbWl0ZGF0ZSwgbF9yZWNlaXB0ZGF0ZSwgbF9zaGlwaW5z dHJ1Y3QsIGxfc2hpcG1vZGUsIGxfY29tbWVudCkKICAgUmVsYXRpb246IGxpbmVpdGVtCiAgIFJl bGF0aW9uIEtpbmQ6IHJlbGF0aW9uCiAgIFJlbGF0aW9uIExvY2sgTW9kZTogQWNjZXNzU2hhcmVM b2NrCiAgIFBlcm1pc3Npb24gSW5mbyBJbmRleDogMgogVW5wcnVuYWJsZSBSVElzOiAxIDMKKDI5 IHJvd3MpCgpkYnQzPSMKCi0tCi0tIDN4IGNvbmZsaWN0cyAoc3RpbGwgd2l0aCB1c2luZyBTRU1J Sk9JTl9VTklRVUUpOgotLQpkYnQzPSMgZXhwbGFpbiAoY29zdHMgb2ZmLHBsYW5fYWR2aWNlKSBT RUxFQ1QKICAgIG9fb3JkZXJwcmlvcml0eSwKICAgIGNvdW50KCopIEFTIG9yZGVyX2NvdW50CkZS T00KICAgIG9yZGVycwpXSEVSRQogICAgb19vcmRlcmRhdGUgPj0gREFURSAnMTk5My0wNy0wMScK ICAgIEFORCBvX29yZGVyZGF0ZSA8IERBVEUgJzE5OTMtMDctMDEnICsgSU5URVJWQUwgJzMnIE1P TlRICiAgICBBTkQgRVhJU1RTICgKICAgICAgICBTRUxFQ1QKICAgICAgICAgICAgKgogICAgICAg IEZST00KICAgICAgICAgICAgbGluZWl0ZW0KICAgICAgICBXSEVSRQogICAgICAgICAgICBsX29y ZGVya2V5ID0gb19vcmRlcmtleQogICAgICAgICAgICBBTkQgbF9jb21taXRkYXRlIDwgbF9yZWNl aXB0ZGF0ZQogICAgKQpHUk9VUCBCWQogICAgb19vcmRlcnByaW9yaXR5Ck9SREVSIEJZCiAgICBv X29yZGVycHJpb3JpdHk7Ck5PVElDRTogIGpvaW50eXBlPWlubmVyIHBwc19OVUxMPz0wCk5PVElD RTogIGZvdW5kPTAKTk9USUNFOiAgbm90IGEgZHVwbGxpY2F0ZSwgYXBwZW5kaW5nICIoYiAzKSIg dG8gcHBzLT5zal91bmlxdWVfcmVscwpOT1RJQ0U6ICBqb2ludHlwZT1vdXRlciBwcHNfTlVMTD89 MApOT1RJQ0U6ICBmb3VuZD10cnVlISAodXItPnBsYW5fbmFtZT0obnVsbCkgYm1zX3VyX3JlbGlk cz0zKQpOT1RJQ0U6ICBmb3VuZD0xCk5PVElDRTogIGpvaW50eXBlPWlubmVyIHBwc19OVUxMPz0w Ck5PVElDRTogIGZvdW5kPXRydWUhICh1ci0+cGxhbl9uYW1lPShudWxsKSBibXNfdXJfcmVsaWRz PTMpCk5PVElDRTogIGZvdW5kPTEKTk9USUNFOiAgam9pbnR5cGU9b3V0ZXIgcHBzX05VTEw/PTAK Tk9USUNFOiAgZm91bmQ9dHJ1ZSEgKHVyLT5wbGFuX25hbWU9KG51bGwpIGJtc191cl9yZWxpZHM9 MykKTk9USUNFOiAgZm91bmQ9MQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTgotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KIEdyb3VwQWdncmVnYXRlCiAgIEdyb3VwIEtleTogb3JkZXJzLm9fb3JkZXJwcmlvcml0 eQogICAtPiAgU29ydAogICAgICAgICBTb3J0IEtleTogb3JkZXJzLm9fb3JkZXJwcmlvcml0eQog ICAgICAgICAtPiAgTmVzdGVkIExvb3AKICAgICAgICAgICAgICAgLT4gIEhhc2hBZ2dyZWdhdGUK ICAgICAgICAgICAgICAgICAgICAgR3JvdXAgS2V5OiBsaW5laXRlbS5sX29yZGVya2V5CiAgICAg ICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBsaW5laXRlbQogICAgICAgICAgICAgICAg ICAgICAgICAgICBGaWx0ZXI6IChsX2NvbW1pdGRhdGUgPCBsX3JlY2VpcHRkYXRlKQogICAgICAg ICAgICAgICAtPiAgSW5kZXggU2NhbiB1c2luZyBwa19vcmRlcnMgb24gb3JkZXJzCiAgICAgICAg ICAgICAgICAgICAgIEluZGV4IENvbmQ6IChvX29yZGVya2V5ID0gbGluZWl0ZW0ubF9vcmRlcmtl eSkKICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAoKG9fb3JkZXJkYXRlID49ICcxOTkzLTA3 LTAxJzo6ZGF0ZSkgQU5EIChvX29yZGVyZGF0ZSA8ICcxOTkzLTEwLTAxIDAwOjAwOjAwJzo6dGlt ZXN0YW1wIHdpdGhvdXQgdGltZSB6b25lKSkKIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgogICBTRVFf U0NBTihsaW5laXRlbSkgLyogbWF0Y2hlZCAqLwogICBJTkRFWF9TQ0FOKG9yZGVycyBwdWJsaWMu cGtfb3JkZXJzKSAvKiBtYXRjaGVkICovCiAgIEpPSU5fT1JERVIobGluZWl0ZW0gb3JkZXJzKSAv KiBtYXRjaGVkLCBjb25mbGljdGluZyAqLwogICBORVNURURfTE9PUF9QTEFJTihvcmRlcnMpIC8q IG1hdGNoZWQsIGNvbmZsaWN0aW5nICovCiAgIFNFTUlKT0lOX1VOSVFVRShsaW5laXRlbSkgLyog bWF0Y2hlZCwgY29uZmxpY3RpbmcgKi8KICAgTk9fR0FUSEVSKG9yZGVycykgLyogbWF0Y2hlZCAq LwogICBOT19HQVRIRVIobGluZWl0ZW0pIC8qIG1hdGNoZWQgKi8KIEdlbmVyYXRlZCBQbGFuIEFk dmljZToKICAgSk9JTl9PUkRFUihsaW5laXRlbSBvcmRlcnMpCiAgIE5FU1RFRF9MT09QX1BMQUlO KG9yZGVycykKICAgU0VRX1NDQU4obGluZWl0ZW0pCiAgIElOREVYX1NDQU4ob3JkZXJzIHB1Ymxp Yy5wa19vcmRlcnMpCiAgIFNFTUlKT0lOX1VOSVFVRShsaW5laXRlbSkKICAgTk9fR0FUSEVSKG9y ZGVycyBsaW5laXRlbSkKKDI3IHJvd3MpCgpkYnQzPSMgZXhwbGFpbiAoY29zdHMgb2ZmKSBTRUxF Q1QKICAgIG9fb3JkZXJwcmlvcml0eSwKICAgIGNvdW50KCopIEFTIG9yZGVyX2NvdW50CkZST00K ICAgIG9yZGVycwpXSEVSRQogICAgb19vcmRlcmRhdGUgPj0gREFURSAnMTk5My0wNy0wMScKICAg IEFORCBvX29yZGVyZGF0ZSA8IERBVEUgJzE5OTMtMDctMDEnICsgSU5URVJWQUwgJzMnIE1PTlRI CiAgICBBTkQgRVhJU1RTICgKICAgICAgICBTRUxFQ1QKICAgICAgICAgICAgKgogICAgICAgIEZS T00KICAgICAgICAgICAgbGluZWl0ZW0KICAgICAgICBXSEVSRQogICAgICAgICAgICBsX29yZGVy a2V5ID0gb19vcmRlcmtleQogICAgICAgICAgICBBTkQgbF9jb21taXRkYXRlIDwgbF9yZWNlaXB0 ZGF0ZQogICAgKQpHUk9VUCBCWQogICAgb19vcmRlcnByaW9yaXR5Ck9SREVSIEJZCiAgICBvX29y ZGVycHJpb3JpdHk7Ck5PVElDRTogIGpvaW50eXBlPWlubmVyIHBwc19OVUxMPz0wCk5PVElDRTog IGpvaW50eXBlPW91dGVyIHBwc19OVUxMPz0wCk5PVElDRTogIGpvaW50eXBlPWlubmVyIHBwc19O VUxMPz0wCk5PVElDRTogIGpvaW50eXBlPW91dGVyIHBwc19OVUxMPz0wCkVSUk9SOiAgdW5pcXVl IHNlbWlqb2luIGZvdW5kIGZvciByZWxpZHMgKGIgMykgYnV0IG5vdCBvYnNlcnZlZCBkdXJpbmcg cGxhbm5pbmcKZGJ0Mz0jCgoKLS0gc3RpbGwgaWYgSSByZW1vdmUgU0VNSUpPSU5fVU5JUVVFKGxp dGVpdGVtKSBpdCBjb21wbGFpbnM6CmRidDM9IyBzZXQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0g J0pPSU5fT1JERVIobGluZWl0ZW0gb3JkZXJzKQogICBORVNURURfTE9PUF9QTEFJTihvcmRlcnMp CiAgIFNFUV9TQ0FOKGxpbmVpdGVtKQogICBJTkRFWF9TQ0FOKG9yZGVycyBwdWJsaWMucGtfb3Jk ZXJzKQogICBOT19HQVRIRVIob3JkZXJzIGxpbmVpdGVtKSc7ClNFVApkYnQzPSMgZXhwbGFpbiAo Y29zdHMgb2ZmKSBTRUxFQ1QKICAgIG9fb3JkZXJwcmlvcml0eSwKICAgIGNvdW50KCopIEFTIG9y ZGVyX2NvdW50CkZST00KICAgIG9yZGVycwpXSEVSRQogICAgb19vcmRlcmRhdGUgPj0gREFURSAn MTk5My0wNy0wMScKICAgIEFORCBvX29yZGVyZGF0ZSA8IERBVEUgJzE5OTMtMDctMDEnICsgSU5U RVJWQUwgJzMnIE1PTlRICiAgICBBTkQgRVhJU1RTICgKICAgICAgICBTRUxFQ1QKICAgICAgICAg ICAgKgogICAgICAgIEZST00KICAgICAgICAgICAgbGluZWl0ZW0KICAgICAgICBXSEVSRQogICAg ICAgICAgICBsX29yZGVya2V5ID0gb19vcmRlcmtleQogICAgICAgICAgICBBTkQgbF9jb21taXRk YXRlIDwgbF9yZWNlaXB0ZGF0ZQogICAgKQpHUk9VUCBCWQogICAgb19vcmRlcnByaW9yaXR5Ck9S REVSIEJZCiAgICBvX29yZGVycHJpb3JpdHk7Ck5PVElDRTogIGpvaW50eXBlPWlubmVyIHBwc19O VUxMPz0wCk5PVElDRTogIGpvaW50eXBlPW91dGVyIHBwc19OVUxMPz0wCk5PVElDRTogIGpvaW50 eXBlPWlubmVyIHBwc19OVUxMPz0wCk5PVElDRTogIGpvaW50eXBlPW91dGVyIHBwc19OVUxMPz0w CkVSUk9SOiAgdW5pcXVlIHNlbWlqb2luIGZvdW5kIGZvciByZWxpZHMgKGIgMykgYnV0IG5vdCBv YnNlcnZlZCBkdXJpbmcgcGxhbm5pbmcKZGJ0Mz0jCgoKLS0gbm90IHNob3duIGhlcmUgYnV0IGFs c28gdXNpbmcgU0VNSUpPSU5fTk9OX1VOSVFVRSB3YXMgZmFpbGluZyAsIHdoaWNoIG1hZGUgbWUg c3RydWdnbGUKCgotLSBzbyBiYWNrIHRvIHBhcmFsbGVsIHBsYW46CgpkYnQzPSMgc2V0IHBnX3Bs YW5fYWR2aWNlLmFkdmljZSA9ICcnOwpTRVQKZGJ0Mz0jIHNldCBtYXhfcGFyYWxsZWxfd29ya2Vy c19wZXJfZ2F0aGVyIHRvIDI7ClNFVApkYnQzPSMgZXhwbGFpbiAoY29zdHMgb2ZmKSBTRUxFQ1QK ICAgIG9fb3JkZXJwcmlvcml0eSwKICAgIGNvdW50KCopIEFTIG9yZGVyX2NvdW50CkZST00KICAg IG9yZGVycwpXSEVSRQogICAgb19vcmRlcmRhdGUgPj0gREFURSAnMTk5My0wNy0wMScKICAgIEFO RCBvX29yZGVyZGF0ZSA8IERBVEUgJzE5OTMtMDctMDEnICsgSU5URVJWQUwgJzMnIE1PTlRICiAg ICBBTkQgRVhJU1RTICgKICAgICAgICBTRUxFQ1QKICAgICAgICAgICAgKgogICAgICAgIEZST00K ICAgICAgICAgICAgbGluZWl0ZW0KICAgICAgICBXSEVSRQogICAgICAgICAgICBsX29yZGVya2V5 ID0gb19vcmRlcmtleQogICAgICAgICAgICBBTkQgbF9jb21taXRkYXRlIDwgbF9yZWNlaXB0ZGF0 ZQogICAgKQpHUk9VUCBCWQogICAgb19vcmRlcnByaW9yaXR5Ck9SREVSIEJZCiAgICBvX29yZGVy cHJpb3JpdHk7Ck5PVElDRTogIGpvaW50eXBlPWlubmVyIHBwc19OVUxMPz0wCk5PVElDRTogIGpv aW50eXBlPW91dGVyIHBwc19OVUxMPz0wCk5PVElDRTogIGpvaW50eXBlPWlubmVyIHBwc19OVUxM Pz0wCk5PVElDRTogIGpvaW50eXBlPW91dGVyIHBwc19OVUxMPz0wCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVS WSBQTEFOCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogRmluYWxpemUgR3Jv dXBBZ2dyZWdhdGUKICAgR3JvdXAgS2V5OiBvcmRlcnMub19vcmRlcnByaW9yaXR5CiAgIC0+ICBH YXRoZXIgTWVyZ2UKICAgICAgICAgV29ya2VycyBQbGFubmVkOiAyCiAgICAgICAgIC0+ICBQYXJ0 aWFsIEdyb3VwQWdncmVnYXRlCiAgICAgICAgICAgICAgIEdyb3VwIEtleTogb3JkZXJzLm9fb3Jk ZXJwcmlvcml0eQogICAgICAgICAgICAgICAtPiAgU29ydAogICAgICAgICAgICAgICAgICAgICBT b3J0IEtleTogb3JkZXJzLm9fb3JkZXJwcmlvcml0eQogICAgICAgICAgICAgICAgICAgICAtPiAg TmVzdGVkIExvb3AgU2VtaSBKb2luCiAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBQYXJh bGxlbCBTZXEgU2NhbiBvbiBvcmRlcnMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg RmlsdGVyOiAoKG9fb3JkZXJkYXRlID49ICcxOTkzLTA3LTAxJzo6ZGF0ZSkgQU5EIChvX29yZGVy ZGF0ZSA8ICcxOTkzLTEwLTAxIDAwOjAwOjAwJzo6dGltZXN0YW1wIHdpdGhvdXQgdGltZSB6b25l KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIEluZGV4IE9ubHkgU2NhbiB1c2luZyBs aW5laXRlbV9sX29yZGVya2V5X2xfc3VwcGtleV9pZHggb24gbGluZWl0ZW0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGxfb3JkZXJrZXkgPSBvcmRlcnMub19v cmRlcmtleSkKKDEzIHJvd3MpCgpkYnQzPSMgZXhwbGFpbiAoY29zdHMgb2ZmLCBwbGFuX2Fkdmlj ZSkgU0VMRUNUCiAgICBvX29yZGVycHJpb3JpdHksCiAgICBjb3VudCgqKSBBUyBvcmRlcl9jb3Vu dApGUk9NCiAgICBvcmRlcnMKV0hFUkUKICAgIG9fb3JkZXJkYXRlID49IERBVEUgJzE5OTMtMDct MDEnCiAgICBBTkQgb19vcmRlcmRhdGUgPCBEQVRFICcxOTkzLTA3LTAxJyArIElOVEVSVkFMICcz JyBNT05USAogICAgQU5EIEVYSVNUUyAoCiAgICAgICAgU0VMRUNUCiAgICAgICAgICAgICoKICAg ICAgICBGUk9NCiAgICAgICAgICAgIGxpbmVpdGVtCiAgICAgICAgV0hFUkUKICAgICAgICAgICAg bF9vcmRlcmtleSA9IG9fb3JkZXJrZXkKICAgICAgICAgICAgQU5EIGxfY29tbWl0ZGF0ZSA8IGxf cmVjZWlwdGRhdGUKICAgICkKR1JPVVAgQlkKICAgIG9fb3JkZXJwcmlvcml0eQpPUkRFUiBCWQog ICAgb19vcmRlcnByaW9yaXR5OwpOT1RJQ0U6ICBqb2ludHlwZT1pbm5lciBwcHNfTlVMTD89MApO T1RJQ0U6ICBmb3VuZD0wCk5PVElDRTogIG5vdCBhIGR1cGxsaWNhdGUsIGFwcGVuZGluZyAiKGIg MykiIHRvIHBwcy0+c2pfdW5pcXVlX3JlbHMKTk9USUNFOiAgam9pbnR5cGU9b3V0ZXIgcHBzX05V TEw/PTAKTk9USUNFOiAgZm91bmQ9dHJ1ZSEgKHVyLT5wbGFuX25hbWU9KG51bGwpIGJtc191cl9y ZWxpZHM9MykKTk9USUNFOiAgZm91bmQ9MQpOT1RJQ0U6ICBqb2ludHlwZT1pbm5lciBwcHNfTlVM TD89MApOT1RJQ0U6ICBmb3VuZD10cnVlISAodXItPnBsYW5fbmFtZT0obnVsbCkgYm1zX3VyX3Jl bGlkcz0zKQpOT1RJQ0U6ICBmb3VuZD0xCk5PVElDRTogIGpvaW50eXBlPW91dGVyIHBwc19OVUxM Pz0wCk5PVElDRTogIGZvdW5kPXRydWUhICh1ci0+cGxhbl9uYW1lPShudWxsKSBibXNfdXJfcmVs aWRzPTMpCk5PVElDRTogIGZvdW5kPTEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4KLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBGaW5hbGl6ZSBHcm91cEFnZ3JlZ2F0ZQogICBH cm91cCBLZXk6IG9yZGVycy5vX29yZGVycHJpb3JpdHkKICAgLT4gIEdhdGhlciBNZXJnZQogICAg ICAgICBXb3JrZXJzIFBsYW5uZWQ6IDIKICAgICAgICAgLT4gIFBhcnRpYWwgR3JvdXBBZ2dyZWdh dGUKICAgICAgICAgICAgICAgR3JvdXAgS2V5OiBvcmRlcnMub19vcmRlcnByaW9yaXR5CiAgICAg ICAgICAgICAgIC0+ICBTb3J0CiAgICAgICAgICAgICAgICAgICAgIFNvcnQgS2V5OiBvcmRlcnMu b19vcmRlcnByaW9yaXR5CiAgICAgICAgICAgICAgICAgICAgIC0+ICBOZXN0ZWQgTG9vcCBTZW1p IEpvaW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9u IG9yZGVycwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICgob19vcmRl cmRhdGUgPj0gJzE5OTMtMDctMDEnOjpkYXRlKSBBTkQgKG9fb3JkZXJkYXRlIDwgJzE5OTMtMTAt MDEgMDA6MDA6MDAnOjp0aW1lc3RhbXAgd2l0aG91dCB0aW1lIHpvbmUpKQogICAgICAgICAgICAg ICAgICAgICAgICAgICAtPiAgSW5kZXggT25seSBTY2FuIHVzaW5nIGxpbmVpdGVtX2xfb3JkZXJr ZXlfbF9zdXBwa2V5X2lkeCBvbiBsaW5laXRlbQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBJbmRleCBDb25kOiAobF9vcmRlcmtleSA9IG9yZGVycy5vX29yZGVya2V5KQogR2VuZXJh dGVkIFBsYW4gQWR2aWNlOgogICBKT0lOX09SREVSKG9yZGVycyBsaW5laXRlbSkKICAgTkVTVEVE X0xPT1BfUExBSU4obGluZWl0ZW0pCiAgIFNFUV9TQ0FOKG9yZGVycykKICAgSU5ERVhfT05MWV9T Q0FOKGxpbmVpdGVtIHB1YmxpYy5saW5laXRlbV9sX29yZGVya2V5X2xfc3VwcGtleV9pZHgpCiAg IEdBVEhFUl9NRVJHRSgob3JkZXJzIGxpbmVpdGVtKSkKICAgU0VNSUpPSU5fTk9OX1VOSVFVRShs aW5laXRlbSkKCgoKLS0gYmFjayB0byBtYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyPTAg YW5kIGV4cGxhaW4gVkVSQk9TRQotLSB0aGlzIHNob3dzIHRoYXQgaW5kZWVkIHdlIGhhdmUgTmVz dGVkIExvb3AgLy8gSW5uZXIgVW5pcXVlOiB0cnVlCmRidDM9IyBleHBsYWluIChjb3N0cyBvZmYs IFZFUkJPU0UsIHBsYW5fYWR2aWNlKSBTRUxFQ1QKICAgIG9fb3JkZXJwcmlvcml0eSwKICAgIGNv dW50KCopIEFTIG9yZGVyX2NvdW50CkZST00KICAgIG9yZGVycwpXSEVSRQogICAgb19vcmRlcmRh dGUgPj0gREFURSAnMTk5My0wNy0wMScKICAgIEFORCBvX29yZGVyZGF0ZSA8IERBVEUgJzE5OTMt MDctMDEnICsgSU5URVJWQUwgJzMnIE1PTlRICiAgICBBTkQgRVhJU1RTICgKICAgICAgICBTRUxF Q1QKICAgICAgICAgICAgKgogICAgICAgIEZST00KICAgICAgICAgICAgbGluZWl0ZW0KICAgICAg ICBXSEVSRQogICAgICAgICAgICBsX29yZGVya2V5ID0gb19vcmRlcmtleQogICAgICAgICAgICBB TkQgbF9jb21taXRkYXRlIDwgbF9yZWNlaXB0ZGF0ZQogICAgKQpHUk9VUCBCWQogICAgb19vcmRl cnByaW9yaXR5Ck9SREVSIEJZCiAgICBvX29yZGVycHJpb3JpdHk7Ck5PVElDRTogIGpvaW50eXBl PWlubmVyIHBwc19OVUxMPz0wCk5PVElDRTogIGZvdW5kPTAKTk9USUNFOiAgbm90IGEgZHVwbGxp Y2F0ZSwgYXBwZW5kaW5nICIoYiAzKSIgdG8gcHBzLT5zal91bmlxdWVfcmVscwpOT1RJQ0U6ICBq b2ludHlwZT1vdXRlciBwcHNfTlVMTD89MApOT1RJQ0U6ICBmb3VuZD10cnVlISAodXItPnBsYW5f bmFtZT0obnVsbCkgYm1zX3VyX3JlbGlkcz0zKQpOT1RJQ0U6ICBmb3VuZD0xCk5PVElDRTogIGpv aW50eXBlPWlubmVyIHBwc19OVUxMPz0wCk5PVElDRTogIGZvdW5kPXRydWUhICh1ci0+cGxhbl9u YW1lPShudWxsKSBibXNfdXJfcmVsaWRzPTMpCk5PVElDRTogIGZvdW5kPTEKTk9USUNFOiAgam9p bnR5cGU9b3V0ZXIgcHBzX05VTEw/PTAKTk9USUNFOiAgZm91bmQ9dHJ1ZSEgKHVyLT5wbGFuX25h bWU9KG51bGwpIGJtc191cl9yZWxpZHM9MykKTk9USUNFOiAgZm91bmQ9MQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBRVUVSWSBQTEFOCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIEdy b3VwQWdncmVnYXRlCiAgIE91dHB1dDogb3JkZXJzLm9fb3JkZXJwcmlvcml0eSwgY291bnQoKikK ICAgR3JvdXAgS2V5OiBvcmRlcnMub19vcmRlcnByaW9yaXR5CiAgIC0+ICBTb3J0CiAgICAgICAg IE91dHB1dDogb3JkZXJzLm9fb3JkZXJwcmlvcml0eQogICAgICAgICBTb3J0IEtleTogb3JkZXJz Lm9fb3JkZXJwcmlvcml0eQogICAgICAgICAtPiAgTmVzdGVkIExvb3AKICAgICAgICAgICAgICAg T3V0cHV0OiBvcmRlcnMub19vcmRlcnByaW9yaXR5CiAgICAgICAgICAgICAgIElubmVyIFVuaXF1 ZTogdHJ1ZQogICAgICAgICAgICAgICAtPiAgSGFzaEFnZ3JlZ2F0ZQogICAgICAgICAgICAgICAg ICAgICBPdXRwdXQ6IGxpbmVpdGVtLmxfb3JkZXJrZXkKICAgICAgICAgICAgICAgICAgICAgR3Jv dXAgS2V5OiBsaW5laXRlbS5sX29yZGVya2V5CiAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEg U2NhbiBvbiBwdWJsaWMubGluZWl0ZW0KICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0 OiBsaW5laXRlbS5sX29yZGVya2V5LCBsaW5laXRlbS5sX3BhcnRrZXksIGxpbmVpdGVtLmxfc3Vw cGtleSwgbGluZWl0ZW0ubF9saW5lbnVtYmVyLCBsaW5laXRlbS5sX3F1YW50aXR5LCBsaW5laXRl bS5sX2V4dGVuZGVkcHJpY2UsIGxpbmVpdGVtLmxfZGlzY291bnQsIGxpbmVpdGVtLmxfdGF4LCBs aW5laXRlbS5sX3JldHVybmZsYWcsIGxpbmVpdGVtLmxfbGluZXN0YXR1cywgbGluZWl0ZW0ubF9z aGlwZGF0ZSwgbGluZWl0ZW0ubF9jb21taXRkYXRlLCBsaW5laXRlbS5sX3JlY2VpcHRkYXRlLCBs aW5laXRlbS5sX3NoaXBpbnN0cnVjdCwgbGluZWl0ZW0ubF9zaGlwbW9kZSwgbGluZWl0ZW0ubF9j b21tZW50CiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKGxpbmVpdGVtLmxfY29t bWl0ZGF0ZSA8IGxpbmVpdGVtLmxfcmVjZWlwdGRhdGUpCiAgICAgICAgICAgICAgIC0+ICBJbmRl eCBTY2FuIHVzaW5nIHBrX29yZGVycyBvbiBwdWJsaWMub3JkZXJzCiAgICAgICAgICAgICAgICAg ICAgIE91dHB1dDogb3JkZXJzLm9fb3JkZXJrZXksIG9yZGVycy5vX2N1c3RrZXksIG9yZGVycy5v X29yZGVyc3RhdHVzLCBvcmRlcnMub190b3RhbHByaWNlLCBvcmRlcnMub19vcmRlcmRhdGUsIG9y ZGVycy5vX29yZGVycHJpb3JpdHksIG9yZGVycy5vX2NsZXJrLCBvcmRlcnMub19zaGlwcHJpb3Jp dHksIG9yZGVycy5vX2NvbW1lbnQKICAgICAgICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKG9y ZGVycy5vX29yZGVya2V5ID0gbGluZWl0ZW0ubF9vcmRlcmtleSkKICAgICAgICAgICAgICAgICAg ICAgRmlsdGVyOiAoKG9yZGVycy5vX29yZGVyZGF0ZSA+PSAnMTk5My0wNy0wMSc6OmRhdGUpIEFO RCAob3JkZXJzLm9fb3JkZXJkYXRlIDwgJzE5OTMtMTAtMDEgMDA6MDA6MDAnOjp0aW1lc3RhbXAg d2l0aG91dCB0aW1lIHpvbmUpKQogR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgogICBKT0lOX09SREVS KGxpbmVpdGVtIG9yZGVycykKICAgTkVTVEVEX0xPT1BfUExBSU4ob3JkZXJzKQogICBTRVFfU0NB TihsaW5laXRlbSkKICAgSU5ERVhfU0NBTihvcmRlcnMgcHVibGljLnBrX29yZGVycykKICAgU0VN SUpPSU5fVU5JUVVFKGxpbmVpdGVtKQogICBOT19HQVRIRVIob3JkZXJzIGxpbmVpdGVtKQoKCi0t LS0tCi0tLS0tIGZpbmFsbHkgdG8gcmVhbGl6ZSB0aGF0IHNqX3VuaXF1ZV9ydGlzIGlzIE5VTEwg dGhlcmU/Ci0tLS0tCgpkYnQzPSMgc2V0IHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdKT0lOX09S REVSKGxpbmVpdGVtIG9yZGVycykKICAgTkVTVEVEX0xPT1BfUExBSU4ob3JkZXJzKQogICBTRVFf U0NBTihsaW5laXRlbSkKICAgSU5ERVhfU0NBTihvcmRlcnMgcHVibGljLnBrX29yZGVycykKICAg U0VNSUpPSU5fVU5JUVVFKGxpbmVpdGVtKQogICBOT19HQVRIRVIob3JkZXJzIGxpbmVpdGVtKSc7 ClNFVApkYnQzPSMgZXhwbGFpbiAoY29zdHMgb2ZmLCB2ZXJib3NlKSBTRUxFQ1QKICAgIG9fb3Jk ZXJwcmlvcml0eSwKICAgIGNvdW50KCopIEFTIG9yZGVyX2NvdW50CkZST00KICAgIG9yZGVycwpX SEVSRQogICAgb19vcmRlcmRhdGUgPj0gREFURSAnMTk5My0wNy0wMScKICAgIEFORCBvX29yZGVy ZGF0ZSA8IERBVEUgJzE5OTMtMDctMDEnICsgSU5URVJWQUwgJzMnIE1PTlRICiAgICBBTkQgRVhJ U1RTICgKICAgICAgICBTRUxFQ1QKICAgICAgICAgICAgKgogICAgICAgIEZST00KICAgICAgICAg ICAgbGluZWl0ZW0KICAgICAgICBXSEVSRQogICAgICAgICAgICBsX29yZGVya2V5ID0gb19vcmRl cmtleQogICAgICAgICAgICBBTkQgbF9jb21taXRkYXRlIDwgbF9yZWNlaXB0ZGF0ZQogICAgKQpH Uk9VUCBCWQogICAgb19vcmRlcnByaW9yaXR5Ck9SREVSIEJZCiAgICBvX29yZGVycHJpb3JpdHk7 Ck5PVElDRTogIGpvaW50eXBlPWlubmVyIHBwc19OVUxMPz0wCk5PVElDRTogIGpvaW50eXBlPW91 dGVyIHBwc19OVUxMPz0wCk5PVElDRTogIGpvaW50eXBlPWlubmVyIHBwc19OVUxMPz0wCk5PVElD RTogIGpvaW50eXBlPW91dGVyIHBwc19OVUxMPz0wCk5PVElDRTogIGFkZGVkIFNFTUlKT0lOX1VO SVFVRQpOT1RJQ0U6ICBwZ3BhX3BsYW5fd2Fsa2VyOiB3YWxraW5nIG92ZXIgU0VNSUpPSU5fVU5J UVVFIGZlYXR1cmVzOiAzLCBzal91bmlxdWVfcnRpcz08PgpFUlJPUjogIHVuaXF1ZSBzZW1pam9p biBmb3VuZCBmb3IgcmVsaWRzIChiIDMpIGJ1dCBub3Qgb2JzZXJ2ZWQgZHVyaW5nIHBsYW5uaW5n CgoKLS0tLS0tLS0tLQotLS0tLS0tLS0tCi0tLS0tLS0tLS0KZGJ0Mz0jIHNldCBwZ19wbGFuX2Fk dmljZS5hZHZpY2UgPSAnSk9JTl9PUkRFUihsaW5laXRlbSBvcmRlcnMpCiAgIE5FU1RFRF9MT09Q X1BMQUlOKG9yZGVycykKICAgU0VRX1NDQU4obGluZWl0ZW0pCiAgIElOREVYX1NDQU4ob3JkZXJz IHB1YmxpYy5wa19vcmRlcnMpCiAgIFNFTUlKT0lOX1VOSVFVRShsaW5laXRlbSkKICAgTk9fR0FU SEVSKG9yZGVycyBsaW5laXRlbSknOwpTRVQKZGJ0Mz0jCmRidDM9IwpkYnQzPSMgZXhwbGFpbiAo Y29zdHMgb2ZmKSBTRUxFQ1QKICAgIG9fb3JkZXJwcmlvcml0eSwKICAgIGNvdW50KCopIEFTIG9y ZGVyX2NvdW50CkZST00KICAgIG9yZGVycwpXSEVSRQogICAgb19vcmRlcmRhdGUgPj0gREFURSAn MTk5My0wNy0wMScKICAgIEFORCBvX29yZGVyZGF0ZSA8IERBVEUgJzE5OTMtMDctMDEnICsgSU5U RVJWQUwgJzMnIE1PTlRICiAgICBBTkQgRVhJU1RTICgKICAgICAgICBTRUxFQ1QKICAgICAgICAg ICAgKgogICAgICAgIEZST00KICAgICAgICAgICAgbGluZWl0ZW0KICAgICAgICBXSEVSRQogICAg ICAgICAgICBsX29yZGVya2V5ID0gb19vcmRlcmtleQogICAgICAgICAgICBBTkQgbF9jb21taXRk YXRlIDwgbF9yZWNlaXB0ZGF0ZQogICAgKQpHUk9VUCBCWQogICAgb19vcmRlcnByaW9yaXR5Ck9S REVSIEJZCiAgICBvX29yZGVycHJpb3JpdHk7Ck5PVElDRTogIGpvaW50eXBlPWlubmVyIHBwc19O VUxMPz0wCk5PVElDRTogIGpvaW50eXBlPW91dGVyIHBwc19OVUxMPz0wCk5PVElDRTogIGpvaW50 eXBlPWlubmVyIHBwc19OVUxMPz0wCk5PVElDRTogIGpvaW50eXBlPW91dGVyIHBwc19OVUxMPz0w Ck5PVElDRTogIGFkZGVkIFNFTUlKT0lOX1VOSVFVRQpOT1RJQ0U6ICBwZ3BhX3BsYW5fd2Fsa2Vy OiB3YWxraW5nIG92ZXIgU0VNSUpPSU5fVU5JUVVFIGZlYXR1cmVzOiAzLCBzal91bmlxdWVfcnRp cz08PiBzal91bmlxdWVfcmVscz08PgpFUlJPUjogIHVuaXF1ZSBzZW1pam9pbiBmb3VuZCBmb3Ig cmVsaWRzIChiIDMpIGJ1dCBub3Qgb2JzZXJ2ZWQgZHVyaW5nIHBsYW5uaW5nCmRidDM9IwpkYnQz PSMKZGJ0Mz0jIGV4cGxhaW4gKGNvc3RzIG9mZiwgcGxhbl9hZHZpY2UpIFNFTEVDVAogICAgb19v cmRlcnByaW9yaXR5LAogICAgY291bnQoKikgQVMgb3JkZXJfY291bnQKRlJPTQogICAgb3JkZXJz CldIRVJFCiAgICBvX29yZGVyZGF0ZSA+PSBEQVRFICcxOTkzLTA3LTAxJwogICAgQU5EIG9fb3Jk ZXJkYXRlIDwgREFURSAnMTk5My0wNy0wMScgKyBJTlRFUlZBTCAnMycgTU9OVEgKICAgIEFORCBF WElTVFMgKAogICAgICAgIFNFTEVDVAogICAgICAgICAgICAqCiAgICAgICAgRlJPTQogICAgICAg ICAgICBsaW5laXRlbQogICAgICAgIFdIRVJFCiAgICAgICAgICAgIGxfb3JkZXJrZXkgPSBvX29y ZGVya2V5CiAgICAgICAgICAgIEFORCBsX2NvbW1pdGRhdGUgPCBsX3JlY2VpcHRkYXRlCiAgICAp CkdST1VQIEJZCiAgICBvX29yZGVycHJpb3JpdHkKT1JERVIgQlkKICAgIG9fb3JkZXJwcmlvcml0 eTsKTk9USUNFOiAgam9pbnR5cGU9aW5uZXIgcHBzX05VTEw/PTAKTk9USUNFOiAgZm91bmQ9MApO T1RJQ0U6ICBub3QgYSBkdXBsbGljYXRlLCBhcHBlbmRpbmcgIihiIDMpIiB0byBwcHMtPnNqX3Vu aXF1ZV9yZWxzCk5PVElDRTogIGpvaW50eXBlPW91dGVyIHBwc19OVUxMPz0wCk5PVElDRTogIGZv dW5kPXRydWUhICh1ci0+cGxhbl9uYW1lPShudWxsKSBibXNfdXJfcmVsaWRzPTMpCk5PVElDRTog IGZvdW5kPTEKTk9USUNFOiAgam9pbnR5cGU9aW5uZXIgcHBzX05VTEw/PTAKTk9USUNFOiAgZm91 bmQ9dHJ1ZSEgKHVyLT5wbGFuX25hbWU9KG51bGwpIGJtc191cl9yZWxpZHM9MykKTk9USUNFOiAg Zm91bmQ9MQpOT1RJQ0U6ICBqb2ludHlwZT1vdXRlciBwcHNfTlVMTD89MApOT1RJQ0U6ICBmb3Vu ZD10cnVlISAodXItPnBsYW5fbmFtZT0obnVsbCkgYm1zX3VyX3JlbGlkcz0zKQpOT1RJQ0U6ICBm b3VuZD0xCk5PVElDRTogIGFkZGVkIFNFTUlKT0lOX1VOSVFVRQpXQVJOSU5HOiAgY291bGQgbm90 IGR1bXAgdW5yZWNvZ25pemVkIG5vZGUgdHlwZTogMApOT1RJQ0U6ICBwZ3BhX3BsYW5fd2Fsa2Vy OiB3YWxraW5nIG92ZXIgU0VNSUpPSU5fVU5JUVVFIGZlYXR1cmVzOiAzLCBzal91bmlxdWVfcnRp cz0oKGIgMykpIHNqX3VuaXF1ZV9yZWxzPSh7fSkKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4KLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCiBHcm91cEFnZ3JlZ2F0ZQogICBHcm91cCBLZXk6IG9yZGVycy5vX29y ZGVycHJpb3JpdHkKICAgLT4gIFNvcnQKICAgICAgICAgU29ydCBLZXk6IG9yZGVycy5vX29yZGVy cHJpb3JpdHkKICAgICAgICAgLT4gIE5lc3RlZCBMb29wCiAgICAgICAgICAgICAgIC0+ICBIYXNo QWdncmVnYXRlCiAgICAgICAgICAgICAgICAgICAgIEdyb3VwIEtleTogbGluZWl0ZW0ubF9vcmRl cmtleQogICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gbGluZWl0ZW0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAobF9jb21taXRkYXRlIDwgbF9yZWNlaXB0ZGF0 ZSkKICAgICAgICAgICAgICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgcGtfb3JkZXJzIG9uIG9yZGVy cwogICAgICAgICAgICAgICAgICAgICBJbmRleCBDb25kOiAob19vcmRlcmtleSA9IGxpbmVpdGVt Lmxfb3JkZXJrZXkpCiAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKChvX29yZGVyZGF0ZSA+ PSAnMTk5My0wNy0wMSc6OmRhdGUpIEFORCAob19vcmRlcmRhdGUgPCAnMTk5My0xMC0wMSAwMDow MDowMCc6OnRpbWVzdGFtcCB3aXRob3V0IHRpbWUgem9uZSkpCiBTdXBwbGllZCBQbGFuIEFkdmlj ZToKICAgU0VRX1NDQU4obGluZWl0ZW0pIC8qIG1hdGNoZWQgKi8KICAgSU5ERVhfU0NBTihvcmRl cnMgcHVibGljLnBrX29yZGVycykgLyogbWF0Y2hlZCAqLwogICBKT0lOX09SREVSKGxpbmVpdGVt IG9yZGVycykgLyogbWF0Y2hlZCwgY29uZmxpY3RpbmcgKi8KICAgTkVTVEVEX0xPT1BfUExBSU4o b3JkZXJzKSAvKiBtYXRjaGVkLCBjb25mbGljdGluZyAqLwogICBTRU1JSk9JTl9VTklRVUUobGlu ZWl0ZW0pIC8qIG1hdGNoZWQsIGNvbmZsaWN0aW5nICovCiAgIE5PX0dBVEhFUihvcmRlcnMpIC8q IG1hdGNoZWQgKi8KICAgTk9fR0FUSEVSKGxpbmVpdGVtKSAvKiBtYXRjaGVkICovCiBHZW5lcmF0 ZWQgUGxhbiBBZHZpY2U6CiAgIEpPSU5fT1JERVIobGluZWl0ZW0gb3JkZXJzKQogICBORVNURURf TE9PUF9QTEFJTihvcmRlcnMpCiAgIFNFUV9TQ0FOKGxpbmVpdGVtKQogICBJTkRFWF9TQ0FOKG9y ZGVycyBwdWJsaWMucGtfb3JkZXJzKQogICBTRU1JSk9JTl9VTklRVUUobGluZWl0ZW0pCiAgIE5P X0dBVEhFUihvcmRlcnMgbGluZWl0ZW0pCigyNyByb3dzKQoK --000000000000787c5806486c5d8f Content-Type: text/plain; charset="US-ASCII"; name="q4_debugging_patch_aid.txt" Content-Disposition: attachment; filename="q4_debugging_patch_aid.txt" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mkff9z331 ZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9wbGFubmVyLmMgYi9jb250 cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfcGxhbm5lci5jCmluZGV4IGZkYzUzZGE5NzQyLi5hNWI3 ODRmZDE1MSAxMDA2NDQKLS0tIGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3BsYW5uZXIu YworKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfcGxhbm5lci5jCkBAIC00NTcsNyAr NDU3LDExIEBAIHBncGFfam9pbl9wYXRoX3NldHVwKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJ bmZvICpqb2lucmVsLAogCiAJCXVuaXF1ZXJlbCA9IGpvaW50eXBlID09IEpPSU5fVU5JUVVFX09V VEVSID8gb3V0ZXJyZWwgOiBpbm5lcnJlbDsKIAkJcHBzID0gR2V0UGxhbm5lckdsb2JhbEV4dGVu c2lvblN0YXRlKHJvb3QtPmdsb2IsIHBsYW5uZXJfZXh0ZW5zaW9uX2lkKTsKLQkJaWYgKHBwcy0+ Z2VuZXJhdGVfYWR2aWNlX3N0cmluZykKKwkJZWxvZyhOT1RJQ0UsICJqb2ludHlwZT0lcyBwcHNf TlVMTD89JWQiLCBqb2ludHlwZSA9PSBKT0lOX1VOSVFVRV9PVVRFUiA/ICJvdXRlciIgOiAiaW5u ZXIiLCBwcHMgPT0gTlVMTCk7CisJCS8vIEpXOiBwcHMgTlVMTCBmaXgKKwkJLy9pZiAocHBzICE9 IE5VTEwgJiYgcHBzLT5nZW5lcmF0ZV9hZHZpY2Vfc3RyaW5nKQorCQkvLyBKVzogcHBzIE5VTEwg Zml4IHdpdGggZ2VuZXJhdGluZyBTSiBhbHNvIGZvciBub3JtYWwgRVhQTEFJTgorCQlpZiAocHBz ICE9IE5VTEwpCiAJCXsKIAkJCWJvb2wJCWZvdW5kID0gZmFsc2U7CiAKQEAgLTQ3MSwxOSArNDc1 LDI3IEBAIHBncGFfam9pbl9wYXRoX3NldHVwKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZv ICpqb2lucmVsLAogCQkJCWlmIChyb290LT5wbGFuX25hbWUgPT0gdXItPnBsYW5fbmFtZSAmJgog CQkJCQlibXNfZXF1YWwodW5pcXVlcmVsLT5yZWxpZHMsIHVyLT5yZWxpZHMpKQogCQkJCXsKKwkJ CQkJZWxvZyhOT1RJQ0UsICJmb3VuZD10cnVlISAodXItPnBsYW5fbmFtZT0lcyBibXNfdXJfcmVs aWRzPSVzKSIsIAorCQkJCQkJdXItPnBsYW5fbmFtZSwgcGdwYV9ibXNfdG9fY3N0cmluZyh1ci0+ cmVsaWRzKSk7CiAJCQkJCWZvdW5kID0gdHJ1ZTsKIAkJCQkJYnJlYWs7CiAJCQkJfQogCQkJfQor CQkJZWxvZyhOT1RJQ0UsICJmb3VuZD0lZCIsIGZvdW5kKTsKIAogCQkJLyogSWYgbm90IGEgZHVw bGljYXRlLCBhcHBlbmQgdG8gdGhlIGxpc3QuICovCiAJCQlpZiAoIWZvdW5kKQogCQkJeworCQkJ CVN0cmluZ0luZm9EYXRhIGJ1ZjsKKwogCQkJCXBncGFfc2pfdW5pcXVlX3JlbCAqdXIgPSBwYWxs b2Nfb2JqZWN0KHBncGFfc2pfdW5pcXVlX3JlbCk7CiAKIAkJCQl1ci0+cGxhbl9uYW1lID0gcm9v dC0+cGxhbl9uYW1lOwogCQkJCXVyLT5yZWxpZHMgPSB1bmlxdWVyZWwtPnJlbGlkczsKIAkJCQlw cHMtPnNqX3VuaXF1ZV9yZWxzID0gbGFwcGVuZChwcHMtPnNqX3VuaXF1ZV9yZWxzLCB1cik7CisJ CQkJaW5pdFN0cmluZ0luZm8oJmJ1Zik7CisJCQkJb3V0Qml0bWFwc2V0KCZidWYsIHVuaXF1ZXJl bC0+cmVsaWRzKTsKKwkJCQllbG9nKE5PVElDRSwgIm5vdCBhIGR1cGxsaWNhdGUsIGFwcGVuZGlu ZyBcIiVzXCIgdG8gcHBzLT5zal91bmlxdWVfcmVscyIsIGJ1Zi5kYXRhKTsKIAkJCX0KIAkJfQog CX0KQEAgLTk4Miw3ICs5OTQsOCBAQCBwZ3BhX3BsYW5uZXJfYXBwbHlfam9pbl9wYXRoX2Fkdmlj ZShKb2luVHlwZSBqb2ludHlwZSwgdWludDY0ICpwZ3NfbWFza19wLAogCQkJCWpvX2RlbnlfaW5k ZXhlcyA9IGJtc19hZGRfbWVtYmVyKGpvX2RlbnlfaW5kZXhlcywgaSk7CiAJCQllbHNlIGlmIChy ZXN0cmljdF9tZXRob2QpCiAJCQl7Ci0JCQkJam9fcGVybWl0X2luZGV4ZXMgPSBibXNfYWRkX21l bWJlcihqb19wZXJtaXRfaW5kZXhlcywgaSk7CisJCQkJLy9KVworCQkJCS8vam9fcGVybWl0X2lu ZGV4ZXMgPSBibXNfYWRkX21lbWJlcihqb19wZXJtaXRfaW5kZXhlcywgaSk7CiAJCQkJam1faW5k ZXhlcyA9IGJtc19hZGRfbWVtYmVyKGpvX3Blcm1pdF9pbmRleGVzLCBpKTsKIAkJCQlpZiAoam9p bl9tYXNrICE9IDAgJiYgam9pbl9tYXNrICE9IG15X2pvaW5fbWFzaykKIAkJCQkJam1fY29uZmxp Y3QgPSB0cnVlOwpAQCAtMTAzOCw4ICsxMDUxLDkgQEAgcGdwYV9wbGFubmVyX2FwcGx5X2pvaW5f cGF0aF9hZHZpY2UoSm9pblR5cGUgam9pbnR5cGUsIHVpbnQ2NCAqcGdzX21hc2tfcCwKIAkJCQl9 CiAJCQkJZWxzZSBpZiAoYWR2aWNlX3VuaXF1ZSAhPSBqdF91bmlxdWUpCiAJCQkJCWpvX2Rlbnlf aW5kZXhlcyA9IGJtc19hZGRfbWVtYmVyKGpvX2RlbnlfaW5kZXhlcywgaSk7Ci0JCQkJZWxzZQot CQkJCQlqb19wZXJtaXRfaW5kZXhlcyA9IGJtc19hZGRfbWVtYmVyKGpvX3Blcm1pdF9pbmRleGVz LCBpKTsKKwkJCQkvL0pXCisJCQkJLy9lbHNlCisJCQkJLy8Jam9fcGVybWl0X2luZGV4ZXMgPSBi bXNfYWRkX21lbWJlcihqb19wZXJtaXRfaW5kZXhlcywgaSk7CiAJCQl9CiAJCQljb250aW51ZTsK IAkJfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3dhbGtlci5jIGIv Y29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3dhbGtlci5jCmluZGV4IDI5OTczYzkzYjBiLi4w N2RiMjg2MzBhOCAxMDA2NDQKLS0tIGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3dhbGtl ci5jCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV93YWxrZXIuYwpAQCAtNTksNiAr NTksMzEgQEAgc3RhdGljIEluZGV4IHBncGFfd2Fsa2VyX2dldF9ydGkoSW5kZXggcnRhYmxlX2xl bmd0aCwKIAkJCQkJCQkJIHBncGFfaWRlbnRpZmllciAqcnRfaWRlbnRpZmllcnMsCiAJCQkJCQkJ CSBwZ3BhX2lkZW50aWZpZXIgKnJpZCk7CiAKKworLyoKKyAqIENvbnZlcnQgYSBiaXRtYXBzZXQg dG8gYSBDIHN0cmluZyBvZiBjb21tYS1zZXBhcmF0ZWQgaW50ZWdlcnMuCisgKi8KK3N0YXRpYyBj aGFyICoKK3BncGFfYm1zX3RvX2NzdHJpbmcoQml0bWFwc2V0ICpibXMpCit7CisJU3RyaW5nSW5m b0RhdGEgYnVmOworCWludAkJCXggPSAtMTsKKworCWlmIChibXNfaXNfZW1wdHkoYm1zKSkKKwkJ cmV0dXJuICJub25lIjsKKworCWluaXRTdHJpbmdJbmZvKCZidWYpOworCXdoaWxlICgoeCA9IGJt c19uZXh0X21lbWJlcihibXMsIHgpKSA+PSAwKQorCXsKKwkJaWYgKGJ1Zi5sZW4gPiAwKQorCQkJ YXBwZW5kU3RyaW5nSW5mbygmYnVmLCAiLCAlZCIsIHgpOworCQllbHNlCisJCQlhcHBlbmRTdHJp bmdJbmZvKCZidWYsICIlZCIsIHgpOworCX0KKworCXJldHVybiBidWYuZGF0YTsKK30KKwogLyoK ICAqIFRvcC1sZXZlbCBlbnRyeXBvaW50IGZvciB0aGUgcGxhbiB0cmVlIHdhbGsuCiAgKgpAQCAt MTM1LDYgKzE2MCw5IEBAIHBncGFfcGxhbl93YWxrZXIocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0 ICp3YWxrZXIsIFBsYW5uZWRTdG10ICpwc3RtdCwKIAlmb3JlYWNoX3B0cihwZ3BhX3F1ZXJ5X2Zl YXR1cmUsIHFmLAogCQkJCXdhbGtlci0+cXVlcnlfZmVhdHVyZXNbUEdQQVFGX1NFTUlKT0lOX05P Tl9VTklRVUVdKQogCXsKKwkJZWxvZyhOT1RJQ0UsICJwZ3BhX3BsYW5fd2Fsa2VyOiB3YWxraW5n IG92ZXIgU0VNSUpPSU5fTk9OX1VOSVFVRSBmZWF0dXJlczogJXMiLAorCQkJcGdwYV9ibXNfdG9f Y3N0cmluZyhxZi0+cmVsaWRzKSk7CisKIAkJaWYgKGxpc3RfbWVtYmVyKHNqX3VuaXF1ZV9ydGlz LCBxZi0+cmVsaWRzKSkKIAkJCXNqX25vbnVuaXF1ZV9xZnMgPSBsYXBwZW5kKHNqX25vbnVuaXF1 ZV9xZnMsIHFmKTsKIAl9CkBAIC0xNDgsNiArMTc2LDggQEAgcGdwYV9wbGFuX3dhbGtlcihwZ3Bh X3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwgUGxhbm5lZFN0bXQgKnBzdG10LAogCWZvcmVh Y2hfcHRyKHBncGFfcXVlcnlfZmVhdHVyZSwgcWYsCiAJCQkJd2Fsa2VyLT5xdWVyeV9mZWF0dXJl c1tQR1BBUUZfU0VNSUpPSU5fVU5JUVVFXSkKIAl7CisJCWVsb2coTk9USUNFLCAicGdwYV9wbGFu X3dhbGtlcjogd2Fsa2luZyBvdmVyIFNFTUlKT0lOX1VOSVFVRSBmZWF0dXJlczogJXMsIHNqX3Vu aXF1ZV9ydGlzPSVzIHNqX3VuaXF1ZV9yZWxzPSVzIiwKKwkJCXBncGFfYm1zX3RvX2NzdHJpbmco cWYtPnJlbGlkcyksIG5vZGVUb1N0cmluZyhzal91bmlxdWVfcnRpcyksIG5vZGVUb1N0cmluZyhz al91bmlxdWVfcmVscykpOwogCQlpZiAoIWxpc3RfbWVtYmVyKHNqX3VuaXF1ZV9ydGlzLCBxZi0+ cmVsaWRzKSkKIAkJewogCQkJU3RyaW5nSW5mb0RhdGEgYnVmOwpAQCAtNDc5LDYgKzUwOSwxMSBA QCBwZ3BhX2FkZF9mdXR1cmVfZmVhdHVyZShwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtl ciwKIAogCXdhbGtlci0+ZnV0dXJlX3F1ZXJ5X2ZlYXR1cmVzID0KIAkJbGFwcGVuZCh3YWxrZXIt PmZ1dHVyZV9xdWVyeV9mZWF0dXJlcywgcWYpOworCisJaWYodHlwZSA9PSBQR1BBUUZfU0VNSUpP SU5fTk9OX1VOSVFVRSkKKwkJZWxvZyhOT1RJQ0UsICJhZGRlZCBTRU1JSk9JTl9OT05fVU5JUVVF Iik7CisJZWxzZSBpZih0eXBlID09IFBHUEFRRl9TRU1JSk9JTl9VTklRVUUpCisJCWVsb2coTk9U SUNFLCAiYWRkZWQgU0VNSUpPSU5fVU5JUVVFIik7CiB9CiAKIC8qCg== --000000000000787c5806486c5d8f--