From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-il1-x141.google.com (mail-il1-x141.google.com [IPv6:2607:f8b0:4864:20::141]) by sourceware.org (Postfix) with ESMTPS id A0EA53851C22 for ; Thu, 4 Jun 2020 21:39:58 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org A0EA53851C22 Received: by mail-il1-x141.google.com with SMTP id 18so7560805iln.9 for ; Thu, 04 Jun 2020 14:39:58 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=9EwRU6ZMXvnIO8QB8sAszmLr7qNGBxgbzS1eLaBkM7k=; b=U212kCb6FRZxY9rmDpjDfNthLrDEVC7G2mjND73tkXRCLUJ3iFFcVjdb9l9pnOLcz/ czy/WhQrWH+OWQ0/js8zf2J4erd2CzqBO6vi1L0Fih4A6cmaWmNMvyYzJXDxqM0RkZhX U639hnZwDO5JPZduLfYi/yJ7PuI2cnO7iE0szbIxaqM49BGNWCGPcMlmEObHSswjMMR5 VcqsdUpLmsjgQaUMgMZFamTCrAaU7Rlopg2LhtNwv7Y09eFmZG50S1bL0AQd2G60tDn9 stL8Jgo8wLS75usFW56JDPQpC8aDfBBPcnz5QY0B1KBKT+dXpQZ4tZeG5t4rSNNC3o76 borQ== X-Gm-Message-State: AOAM530lB91KtZkzFSdVBtYVvRxDv23KE42iung7UCX/OnppH7GE8sVn JWEFft6tND4BKWG1XuxU4lbkpJVGql45aYEM3b1pww== X-Google-Smtp-Source: ABdhPJy5AS+U+U1Sl+sycvACo/T0GHVF4941sWDvUa3Ms7g0ostlWB4JanIaeDdnzEOVdUbstYYqVCjO7rmQgpK7VAQ= X-Received: by 2002:a92:bad0:: with SMTP id t77mr6219645ill.82.1591306797878; Thu, 04 Jun 2020 14:39:57 -0700 (PDT) MIME-Version: 1.0 References: <87lfl634rs.fsf@tromey.com> <87h7vsqk5h.fsf@tromey.com> In-Reply-To: <87h7vsqk5h.fsf@tromey.com> From: Caroline Tice Date: Thu, 4 Jun 2020 14:39:46 -0700 Message-ID: Subject: Re: [PATCH] Fix issues with reading rnglists, especially from dwo files, for DWARF v5 To: Tom Tromey Cc: Caroline Tice via Gdb-patches , Eric Christopher Content-Type: multipart/mixed; boundary="0000000000006b6fbe05a748fc79" X-Spam-Status: No, score=-18.1 required=5.0 tests=BAYES_00, DKIMWL_WL_MED, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, ENV_AND_HDR_SPF_MATCH, KAM_NUMSUBJECT, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, URIBL_CSS, URIBL_CSS_A, USER_IN_DEF_DKIM_WL, USER_IN_DEF_SPF_WL autolearn=no autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 04 Jun 2020 21:40:00 -0000 --0000000000006b6fbe05a748fc79 Content-Type: text/plain; charset="UTF-8" I've been playing with running the testsuite with -gdwarf-5 -gsplit-dwarf and using the clang compiler. I did not find any tests that showed the issues I was running into (but I did discover a small bug in my patch, which my newer patch fixes). With my fixed patch, there are no testsuite differences. I have created a new testsuite test case, which does fail with current ToT and passes with my patch, but that only works if you compile it with clang -- if you compile it with GCC it passes in both cases (because GCC is not generating the DW_FORM_rmglistx that my patch is handling/fixing). I've updated the patch to include the requested format changes, remove the pieces that are only used in an upcoming patch, fix the small issue I found while testing, and I've added the test to the testsuite. To run the test and see the issue: $ make check RUNTESTFLAGS="CC_FOR_TARGET=${CLANG_CC} CXX_FOR_TARGET=${CLANG_CXX} dw5-rnglist-test.exp" gdb/ChangeLog (updated) 2020-06-04 Caroline Tice * dwarf2/read.c (struct dwop_section_names): Add rnglists_dwo. (dwop_section_names): Add .debug_rnglists.dwo, .zdebug_rnglists.dwo. (struct dwo_sections): Add rnglists field. (cu_debug_rnglist_section): New function (decl & definition). (dwarf2_locate_dwo_sections): Add code to read rnglists_dwo section. (dwarf2_rnglists_process): Add cases for DW_RLE_base_addressx, DW_RLE_startx_length, DW_RLE_startx_endx. Also, update to only add the base address to DW_RLE_offset_pairs (not to all ranges). (dwarf2_get_pc_bounds): Check for DW_FORM_rnglistx when setting need_ranges_base. (dwarf2_record_block_ranges): Check for DW_FORM_rnglistx when setting need_ranges_base. (read_full_die_1): Add code to read DW_AT_rnglists_base and assign to cu->ranges_base. (partial_die_info::read): Check for DW_FORM_rnglistx when setting need_ranges_base. (read_rnglist_index): New function. (read_attribute_reprocess): Add code for DW_FORM_rnglistx. (read_attribute_value): Mark DW_FORM_rnglistx with need_reprocess. gdb/testsuite/ChangeLog: 2020-06-04 Caroline Tice * gdb.dwarf2/dw5-rnglist-test.cc: New file. * gdb.dwarf2/dw5-rnglist-test.exp: New file. On Wed, Jun 3, 2020 at 7:49 AM Tom Tromey wrote: > > Caroline> $ clang++ -gdwarf-5 -O0 -gsplit-dwarf pre-order.cpp > Caroline> pre-order-common.cpp -o pre-order > > I wonder if the test suite can be run this way. > > Caroline> Oh. Those get used in my next upcoming patch (where I update GDB to > Caroline> handle DWARFv5 .dwp files). I can either leave them in this patch, or > Caroline> remove them from here and put them in the next one, whichever you > Caroline> prefer. > > I think it's better for patches to be reasonably self-contained when > possible. > > Also, there were other patches for DWARFv5 on the list in "recent" (this > year) times. I wonder if those are relevant / related. > > Tom --0000000000006b6fbe05a748fc79 Content-Type: application/octet-stream; name="gdb-dwo-rnglists.patch" Content-Disposition: attachment; filename="gdb-dwo-rnglists.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kb1axzat0 ZGlmZiAtLWdpdCBhL2dkYi9kd2FyZjIvcmVhZC5jIGIvZ2RiL2R3YXJmMi9yZWFkLmMKaW5kZXgg ZTY1NjZmOTY0OS4uMGY5MDRlNzNlMCAxMDA2NDQKLS0tIGEvZ2RiL2R3YXJmMi9yZWFkLmMKKysr IGIvZ2RiL2R3YXJmMi9yZWFkLmMKQEAgLTM0MCw2ICszNDAsNyBAQCBzdGF0aWMgY29uc3Qgc3Ry dWN0IGR3b3Bfc2VjdGlvbl9uYW1lcwogICBzdHJ1Y3QgZHdhcmYyX3NlY3Rpb25fbmFtZXMgbG9j bGlzdHNfZHdvOwogICBzdHJ1Y3QgZHdhcmYyX3NlY3Rpb25fbmFtZXMgbWFjaW5mb19kd287CiAg IHN0cnVjdCBkd2FyZjJfc2VjdGlvbl9uYW1lcyBtYWNyb19kd287CisgIHN0cnVjdCBkd2FyZjJf c2VjdGlvbl9uYW1lcyBybmdsaXN0c19kd287CiAgIHN0cnVjdCBkd2FyZjJfc2VjdGlvbl9uYW1l cyBzdHJfZHdvOwogICBzdHJ1Y3QgZHdhcmYyX3NlY3Rpb25fbmFtZXMgc3RyX29mZnNldHNfZHdv OwogICBzdHJ1Y3QgZHdhcmYyX3NlY3Rpb25fbmFtZXMgdHlwZXNfZHdvOwpAQCAtMzU1LDYgKzM1 Niw3IEBAIGR3b3Bfc2VjdGlvbl9uYW1lcyA9CiAgIHsgIi5kZWJ1Z19sb2NsaXN0cy5kd28iLCAi LnpkZWJ1Z19sb2NsaXN0cy5kd28iIH0sCiAgIHsgIi5kZWJ1Z19tYWNpbmZvLmR3byIsICIuemRl YnVnX21hY2luZm8uZHdvIiB9LAogICB7ICIuZGVidWdfbWFjcm8uZHdvIiwgIi56ZGVidWdfbWFj cm8uZHdvIiB9LAorICB7ICIuZGVidWdfcm5nbGlzdHMuZHdvIiwgIi56ZGVidWdfcm5nbGlzdHMu ZHdvIiB9LAogICB7ICIuZGVidWdfc3RyLmR3byIsICIuemRlYnVnX3N0ci5kd28iIH0sCiAgIHsg Ii5kZWJ1Z19zdHJfb2Zmc2V0cy5kd28iLCAiLnpkZWJ1Z19zdHJfb2Zmc2V0cy5kd28iIH0sCiAg IHsgIi5kZWJ1Z190eXBlcy5kd28iLCAiLnpkZWJ1Z190eXBlcy5kd28iIH0sCkBAIC02NTAsNiAr NjUyLDcgQEAgc3RydWN0IGR3b19zZWN0aW9ucwogICBzdHJ1Y3QgZHdhcmYyX3NlY3Rpb25faW5m byBsb2NsaXN0czsKICAgc3RydWN0IGR3YXJmMl9zZWN0aW9uX2luZm8gbWFjaW5mbzsKICAgc3Ry dWN0IGR3YXJmMl9zZWN0aW9uX2luZm8gbWFjcm87CisgIHN0cnVjdCBkd2FyZjJfc2VjdGlvbl9p bmZvIHJuZ2xpc3RzOwogICBzdHJ1Y3QgZHdhcmYyX3NlY3Rpb25faW5mbyBzdHI7CiAgIHN0cnVj dCBkd2FyZjJfc2VjdGlvbl9pbmZvIHN0cl9vZmZzZXRzOwogICAvKiBJbiB0aGUgY2FzZSBvZiBh IHZpcnR1YWwgRFdPIGZpbGUsIHRoZXNlIHR3byBhcmUgdW51c2VkLiAgKi8KQEAgLTEzODQsNiAr MTM4NywxMCBAQCBzdGF0aWMgaW50IGR3YXJmMl9yYW5nZXNfcmVhZCAodW5zaWduZWQsIENPUkVf QUREUiAqLCBDT1JFX0FERFIgKiwKIC8qIFJldHVybiB0aGUgLmRlYnVnX2xvY2xpc3RzIHNlY3Rp b24gdG8gdXNlIGZvciBjdS4gICovCiBzdGF0aWMgc3RydWN0IGR3YXJmMl9zZWN0aW9uX2luZm8g KmN1X2RlYnVnX2xvY19zZWN0aW9uIChzdHJ1Y3QgZHdhcmYyX2N1ICpjdSk7CiAKKy8qIFJldHVy biB0aGUgLmRlYnVnX3JuZ2xpc3RzIHNlY3Rpb24gdG8gdXNlIGZvciBjdS4gICovCitzdGF0aWMg c3RydWN0IGR3YXJmMl9zZWN0aW9uX2luZm8gKmN1X2RlYnVnX3JuZ2xpc3Rfc2VjdGlvbgorICAo c3RydWN0IGR3YXJmMl9jdSAqY3UpOworCiAvKiBIb3cgZHdhcmYyX2dldF9wY19ib3VuZHMgY29u c3RydWN0ZWQgaXRzICpMT1dQQyBhbmQgKkhJR0hQQyByZXR1cm4KICAgIHZhbHVlcy4gIEtlZXAg dGhlIGl0ZW1zIG9yZGVyZWQgd2l0aCBpbmNyZWFzaW5nIGNvbnN0cmFpbnRzIGNvbXBsaWFuY2Uu ICAqLwogZW51bSBwY19ib3VuZHNfa2luZApAQCAtMTIzOTcsNiArMTI0MDQsMTEgQEAgZHdhcmYy X2xvY2F0ZV9kd29fc2VjdGlvbnMgKGJmZCAqYWJmZCwgYXNlY3Rpb24gKnNlY3RwLCB2b2lkICpk d29fc2VjdGlvbnNfcHRyKQogICAgICAgZHdvX3NlY3Rpb25zLT5tYWNyby5zLnNlY3Rpb24gPSBz ZWN0cDsKICAgICAgIGR3b19zZWN0aW9ucy0+bWFjcm8uc2l6ZSA9IGJmZF9zZWN0aW9uX3NpemUg KHNlY3RwKTsKICAgICB9CisgIGVsc2UgaWYgKHNlY3Rpb25faXNfcCAoc2VjdHAtPm5hbWUsICZu YW1lcy0+cm5nbGlzdHNfZHdvKSkKKyAgICB7CisgICAgICBkd29fc2VjdGlvbnMtPnJuZ2xpc3Rz LnMuc2VjdGlvbiA9IHNlY3RwOworICAgICAgZHdvX3NlY3Rpb25zLT5ybmdsaXN0cy5zaXplID0g YmZkX3NlY3Rpb25fc2l6ZSAoc2VjdHApOworICAgIH0KICAgZWxzZSBpZiAoc2VjdGlvbl9pc19w IChzZWN0cC0+bmFtZSwgJm5hbWVzLT5zdHJfZHdvKSkKICAgICB7CiAgICAgICBkd29fc2VjdGlv bnMtPnN0ci5zLnNlY3Rpb24gPSBzZWN0cDsKQEAgLTEzNzUxLDYgKzEzNzYzLDcgQEAgZHdhcmYy X3JuZ2xpc3RzX3Byb2Nlc3MgKHVuc2lnbmVkIG9mZnNldCwgc3RydWN0IGR3YXJmMl9jdSAqY3Us CiAgIGNvbnN0IGdkYl9ieXRlICpidWZmZXI7CiAgIENPUkVfQUREUiBiYXNlYWRkcjsKICAgYm9v bCBvdmVyZmxvdyA9IGZhbHNlOworICBVTE9OR0VTVCBhZGRyX2luZGV4OwogCiAgIGJhc2UgPSBj dS0+YmFzZV9hZGRyZXNzOwogCkBAIC0xMzc5Miw2ICsxMzgwNSwxMSBAQCBkd2FyZjJfcm5nbGlz dHNfcHJvY2VzcyAodW5zaWduZWQgb2Zmc2V0LCBzdHJ1Y3QgZHdhcmYyX2N1ICpjdSwKIAkgIGJh c2UgPSBjdS0+aGVhZGVyLnJlYWRfYWRkcmVzcyAob2JmZCwgYnVmZmVyLCAmYnl0ZXNfcmVhZCk7 CiAJICBidWZmZXIgKz0gYnl0ZXNfcmVhZDsKIAkgIGJyZWFrOworICAgICAgICBjYXNlIERXX1JM RV9iYXNlX2FkZHJlc3N4OgorICAgICAgICAgIGFkZHJfaW5kZXggPSByZWFkX3Vuc2lnbmVkX2xl YjEyOCAob2JmZCwgYnVmZmVyLCAmYnl0ZXNfcmVhZCk7CisgICAgICAgICAgYnVmZmVyICs9IGJ5 dGVzX3JlYWQ7CisgICAgICAgICAgYmFzZSA9IHJlYWRfYWRkcl9pbmRleCAoY3UsIGFkZHJfaW5k ZXgpOworICAgICAgICAgIGJyZWFrOwogCWNhc2UgRFdfUkxFX3N0YXJ0X2xlbmd0aDoKIAkgIGlm IChidWZmZXIgKyBjdS0+aGVhZGVyLmFkZHJfc2l6ZSA+IGJ1Zl9lbmQpCiAJICAgIHsKQEAgLTEz ODEwLDYgKzEzODI4LDE5IEBAIGR3YXJmMl9ybmdsaXN0c19wcm9jZXNzICh1bnNpZ25lZCBvZmZz ZXQsIHN0cnVjdCBkd2FyZjJfY3UgKmN1LAogCSAgICAgIGJyZWFrOwogCSAgICB9CiAJICBicmVh azsKKwljYXNlIERXX1JMRV9zdGFydHhfbGVuZ3RoOgorICAgICAgICAgIGFkZHJfaW5kZXggPSBy ZWFkX3Vuc2lnbmVkX2xlYjEyOCAob2JmZCwgYnVmZmVyLCAmYnl0ZXNfcmVhZCk7CisgICAgICAg ICAgYnVmZmVyICs9IGJ5dGVzX3JlYWQ7CisgICAgICAgICAgcmFuZ2VfYmVnaW5uaW5nID0gcmVh ZF9hZGRyX2luZGV4IChjdSwgYWRkcl9pbmRleCk7CisgICAgICAgICAgaWYgKGJ1ZmZlciA+IGJ1 Zl9lbmQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIG92ZXJmbG93ID0gdHJ1ZTsKKyAg ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgcmFuZ2VfZW5kID0g KHJhbmdlX2JlZ2lubmluZworICAgICAgICAgICAgICAgICAgICAgICArIHJlYWRfdW5zaWduZWRf bGViMTI4IChvYmZkLCBidWZmZXIsICZieXRlc19yZWFkKSk7CisgICAgICAgICAgYnVmZmVyICs9 IGJ5dGVzX3JlYWQ7CisgICAgICAgICAgYnJlYWs7CiAJY2FzZSBEV19STEVfb2Zmc2V0X3BhaXI6 CiAJICByYW5nZV9iZWdpbm5pbmcgPSByZWFkX3Vuc2lnbmVkX2xlYjEyOCAob2JmZCwgYnVmZmVy LCAmYnl0ZXNfcmVhZCk7CiAJICBidWZmZXIgKz0gYnl0ZXNfcmVhZDsKQEAgLTEzODM4LDcgKzEz ODY5LDIwIEBAIGR3YXJmMl9ybmdsaXN0c19wcm9jZXNzICh1bnNpZ25lZCBvZmZzZXQsIHN0cnVj dCBkd2FyZjJfY3UgKmN1LAogCSAgcmFuZ2VfZW5kID0gY3UtPmhlYWRlci5yZWFkX2FkZHJlc3Mg KG9iZmQsIGJ1ZmZlciwgJmJ5dGVzX3JlYWQpOwogCSAgYnVmZmVyICs9IGJ5dGVzX3JlYWQ7CiAJ ICBicmVhazsKLQlkZWZhdWx0OgorCWNhc2UgRFdfUkxFX3N0YXJ0eF9lbmR4OgorICAgICAgICAg IGFkZHJfaW5kZXggPSByZWFkX3Vuc2lnbmVkX2xlYjEyOCAob2JmZCwgYnVmZmVyLCAmYnl0ZXNf cmVhZCk7CisgICAgICAgICAgYnVmZmVyICs9IGJ5dGVzX3JlYWQ7CisgICAgICAgICAgcmFuZ2Vf YmVnaW5uaW5nID0gcmVhZF9hZGRyX2luZGV4IChjdSwgYWRkcl9pbmRleCk7CisgICAgICAgICAg aWYgKGJ1ZmZlciA+IGJ1Zl9lbmQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIG92ZXJm bG93ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAg ICAgYWRkcl9pbmRleCA9IHJlYWRfdW5zaWduZWRfbGViMTI4IChvYmZkLCBidWZmZXIsICZieXRl c19yZWFkKTsKKyAgICAgICAgICBidWZmZXIgKz0gYnl0ZXNfcmVhZDsKKyAgICAgICAgICByYW5n ZV9lbmQgPSByZWFkX2FkZHJfaW5kZXggKGN1LCBhZGRyX2luZGV4KTsKKyAgICAgICAgICBicmVh azsKKyAJZGVmYXVsdDoKIAkgIGNvbXBsYWludCAoXygiSW52YWxpZCAuZGVidWdfcm5nbGlzdHMg ZGF0YSAobm8gYmFzZSBhZGRyZXNzKSIpKTsKIAkgIHJldHVybiBmYWxzZTsKIAl9CkBAIC0xMzg2 Niw4ICsxMzkxMCwxMiBAQCBkd2FyZjJfcm5nbGlzdHNfcHJvY2VzcyAodW5zaWduZWQgb2Zmc2V0 LCBzdHJ1Y3QgZHdhcmYyX2N1ICpjdSwKICAgICAgIGlmIChyYW5nZV9iZWdpbm5pbmcgPT0gcmFu Z2VfZW5kKQogCWNvbnRpbnVlOwogCi0gICAgICByYW5nZV9iZWdpbm5pbmcgKz0gKmJhc2U7Ci0g ICAgICByYW5nZV9lbmQgKz0gKmJhc2U7CisgICAgICAvKiBPbmx5IERXX1JMRV9vZmZzZXRfcGFp ciBuZWVkcyB0aGUgYmFzZSBhZGRyZXNzIGFkZGVkLiAgKi8KKyAgICAgIGlmIChybGV0ID09IERX X1JMRV9vZmZzZXRfcGFpcikKKwl7CisJICByYW5nZV9iZWdpbm5pbmcgKz0gKmJhc2U7CisJICBy YW5nZV9lbmQgKz0gKmJhc2U7CisJfQogCiAgICAgICAvKiBBIG5vdC11bmNvbW1vbiBjYXNlIG9m IGJhZCBkZWJ1ZyBpbmZvLgogCSBEb24ndCBwb2xsdXRlIHRoZSBhZGRybWFwIHdpdGggYmFkIGRh dGEuICAqLwpAQCAtMTQxMDUsNyArMTQxNTMsOCBAQCBkd2FyZjJfZ2V0X3BjX2JvdW5kcyAoc3Ry dWN0IGRpZV9pbmZvICpkaWUsIENPUkVfQUREUiAqbG93cGMsCiAJICAvKiBEV19BVF9ybmdsaXN0 c19iYXNlIGRvZXMgbm90IGFwcGx5IHRvIERJRXMgZnJvbSB0aGUgRFdPIHNrZWxldG9uLgogCSAg ICAgV2UgdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIGZhY3QgdGhhdCBEV19BVF9yYW5nZXMgZG9lcyBu b3QgYXBwZWFyCiAJICAgICBpbiBEV19UQUdfY29tcGlsZV91bml0IG9mIERXTyBmaWxlcy4gICov Ci0JICBpbnQgbmVlZF9yYW5nZXNfYmFzZSA9IGRpZS0+dGFnICE9IERXX1RBR19jb21waWxlX3Vu aXQ7CisJICBpbnQgbmVlZF9yYW5nZXNfYmFzZSA9IChkaWUtPnRhZyAhPSBEV19UQUdfY29tcGls ZV91bml0CisJCQkJICAmJiBhdHRyLT5mb3JtICE9IERXX0ZPUk1fcm5nbGlzdHgpOwogCSAgdW5z aWduZWQgaW50IHJhbmdlc19vZmZzZXQgPSAoRFdfVU5TTkQgKGF0dHIpCiAJCQkJCSsgKG5lZWRf cmFuZ2VzX2Jhc2UKIAkJCQkJICAgPyBjdS0+cmFuZ2VzX2Jhc2UKQEAgLTE0Mjc2LDcgKzE0MzI1 LDggQEAgZHdhcmYyX3JlY29yZF9ibG9ja19yYW5nZXMgKHN0cnVjdCBkaWVfaW5mbyAqZGllLCBz dHJ1Y3QgYmxvY2sgKmJsb2NrLAogICAgICAgLyogRFdfQVRfcm5nbGlzdHNfYmFzZSBkb2VzIG5v dCBhcHBseSB0byBESUVzIGZyb20gdGhlIERXTyBza2VsZXRvbi4KIAkgV2UgdGFrZSBhZHZhbnRh Z2Ugb2YgdGhlIGZhY3QgdGhhdCBEV19BVF9yYW5nZXMgZG9lcyBub3QgYXBwZWFyCiAJIGluIERX X1RBR19jb21waWxlX3VuaXQgb2YgRFdPIGZpbGVzLiAgKi8KLSAgICAgIGludCBuZWVkX3Jhbmdl c19iYXNlID0gZGllLT50YWcgIT0gRFdfVEFHX2NvbXBpbGVfdW5pdDsKKyAgICAgIGludCBuZWVk X3Jhbmdlc19iYXNlID0gKGRpZS0+dGFnICE9IERXX1RBR19jb21waWxlX3VuaXQKKwkJCSAgICAg ICYmIGF0dHItPmZvcm0gIT0gRFdfRk9STV9ybmdsaXN0eCk7CiAKICAgICAgIC8qIFRoZSB2YWx1 ZSBvZiB0aGUgRFdfQVRfcmFuZ2VzIGF0dHJpYnV0ZSBpcyB0aGUgb2Zmc2V0IG9mIHRoZQogICAg ICAgICAgYWRkcmVzcyByYW5nZSBsaXN0IGluIHRoZSAuZGVidWdfcmFuZ2VzIHNlY3Rpb24uICAq LwpAQCAtMTgxMTUsNiArMTgxNjUsMTEgQEAgcmVhZF9mdWxsX2RpZV8xIChjb25zdCBzdHJ1Y3Qg ZGllX3JlYWRlcl9zcGVjcyAqcmVhZGVyLAogICBhdXRvIG1heWJlX2FkZHJfYmFzZSA9IGRpZS0+ YWRkcl9iYXNlICgpOwogICBpZiAobWF5YmVfYWRkcl9iYXNlLmhhc192YWx1ZSAoKSkKICAgICBj dS0+YWRkcl9iYXNlID0gKm1heWJlX2FkZHJfYmFzZTsKKworICBhdHRyID0gZGllLT5hdHRyIChE V19BVF9ybmdsaXN0c19iYXNlKTsKKyAgaWYgKGF0dHIgIT0gbnVsbHB0cikKKyAgICBjdS0+cmFu Z2VzX2Jhc2UgPSBEV19VTlNORCAoYXR0cik7CisKICAgZm9yIChpbnQgaW5kZXggOiBpbmRleGVz X3RoYXRfbmVlZF9yZXByb2Nlc3MpCiAgICAgcmVhZF9hdHRyaWJ1dGVfcmVwcm9jZXNzIChyZWFk ZXIsICZkaWUtPmF0dHJzW2luZGV4XSk7CiAgICpkaWVwID0gZGllOwpAQCAtMTg2MzMsNyArMTg2 ODgsOCBAQCBwYXJ0aWFsX2RpZV9pbmZvOjpyZWFkIChjb25zdCBzdHJ1Y3QgZGllX3JlYWRlcl9z cGVjcyAqcmVhZGVyLAogCSAgICAvKiBJdCB3b3VsZCBiZSBuaWNlIHRvIHJldXNlIGR3YXJmMl9n ZXRfcGNfYm91bmRzIGhlcmUsCiAJICAgICAgIGJ1dCB0aGF0IHJlcXVpcmVzIGEgZnVsbCBESUUs IHNvIGluc3RlYWQgd2UganVzdAogCSAgICAgICByZWltcGxlbWVudCBpdC4gICovCi0JICAgIGlu dCBuZWVkX3Jhbmdlc19iYXNlID0gdGFnICE9IERXX1RBR19jb21waWxlX3VuaXQ7CisJICAgIGlu dCBuZWVkX3Jhbmdlc19iYXNlID0gKHRhZyAhPSBEV19UQUdfY29tcGlsZV91bml0CisJCQkJICAg ICYmIGF0dHIuZm9ybSAhPSBEV19GT1JNX3JuZ2xpc3R4KTsKIAkgICAgdW5zaWduZWQgaW50IHJh bmdlc19vZmZzZXQgPSAoRFdfVU5TTkQgKCZhdHRyKQogCQkJCQkgICsgKG5lZWRfcmFuZ2VzX2Jh c2UKIAkJCQkJICAgICA/IGN1LT5yYW5nZXNfYmFzZQpAQCAtMTkwNDMsNiArMTkwOTksNDkgQEAg cmVhZF9sb2NsaXN0X2luZGV4IChzdHJ1Y3QgZHdhcmYyX2N1ICpjdSwgVUxPTkdFU1QgbG9jbGlz dF9pbmRleCkKICAgICByZXR1cm4gYmZkX2dldF82NCAoYWJmZCwgaW5mb19wdHIpICsgbG9jbGlz dF9iYXNlOwogfQogCisvKiBHaXZlbiBhIERXX0ZPUk1fcm5nbGlzdHggdmFsdWUgcm5nbGlzdF9p bmRleCwgZmV0Y2ggdGhlIG9mZnNldCBmcm9tIHRoZQorICAgYXJyYXkgb2Ygb2Zmc2V0cyBpbiB0 aGUgLmRlYnVnX3JuZ2xpc3RzIHNlY3Rpb24uICAqLworc3RhdGljIENPUkVfQUREUgorcmVhZF9y bmdsaXN0X2luZGV4IChzdHJ1Y3QgZHdhcmYyX2N1ICpjdSwgVUxPTkdFU1Qgcm5nbGlzdF9pbmRl eCkKK3sKKyAgc3RydWN0IGR3YXJmMl9wZXJfb2JqZmlsZSAqZHdhcmYyX3Blcl9vYmpmaWxlID0g Y3UtPnBlcl9vYmpmaWxlOworICBzdHJ1Y3Qgb2JqZmlsZSAqb2JqZmlsZSA9IGR3YXJmMl9wZXJf b2JqZmlsZS0+b2JqZmlsZTsKKyAgYmZkICphYmZkID0gb2JqZmlsZS0+b2JmZDsKKyAgVUxPTkdF U1Qgcm5nbGlzdF9oZWFkZXJfc2l6ZSA9CisgICAgKGN1LT5oZWFkZXIuaW5pdGlhbF9sZW5ndGhf c2l6ZSA9PSA0ID8gTE9DTElTVF9IRUFERVJfU0laRTMyCisgICAgIDogTE9DTElTVF9IRUFERVJf U0laRTY0KTsKKyAgVUxPTkdFU1Qgcm5nbGlzdF9iYXNlID0KKyAgICAgIChjdS0+ZHdvX3VuaXQp ID8gcm5nbGlzdF9oZWFkZXJfc2l6ZSA6IGN1LT5yYW5nZXNfYmFzZTsKKworICBzdHJ1Y3QgZHdh cmYyX3NlY3Rpb25faW5mbyAqc2VjdGlvbiA9IGN1X2RlYnVnX3JuZ2xpc3Rfc2VjdGlvbiAoY3Up OworICBpZiAoc2VjdGlvbiA9PSBudWxscHRyKQorICAgIGVycm9yKF8oIkNhbm5vdCBmaW5kIC5k ZWJ1Z19ybmdsaXN0cyBzZWN0aW9uIFtpbiBtb2R1bGUgJXNdIiksCisJICBvYmpmaWxlX25hbWUo b2JqZmlsZSkpOworICBzZWN0aW9uLT5yZWFkIChvYmpmaWxlKTsKKyAgaWYgKHNlY3Rpb24tPmJ1 ZmZlciA9PSBOVUxMKQorICAgIGVycm9yKF8oIkRXX0ZPUk1fcm5nbGlzdHggdXNlZCB3aXRob3V0 IC5kZWJ1Z19ybmdsaXN0cyBzZWN0aW9uICIKKwkgICAgIltpbiBtb2R1bGUgJXNdIiksCisgICAg ICAgb2JqZmlsZV9uYW1lIChvYmpmaWxlKSk7CisgIHN0cnVjdCBsb2NsaXN0X2hlYWRlciBoZWFk ZXI7CisgIHJlYWRfbG9jbGlzdF9oZWFkZXIgKCZoZWFkZXIsIHNlY3Rpb24pOworICBpZiAocm5n bGlzdF9pbmRleCA+PSBoZWFkZXIub2Zmc2V0X2VudHJ5X2NvdW50KQorICAgIGVycm9yKF8oIkRX X0ZPUk1fcm5nbGlzdHggaW5kZXggcG9pbnRpbmcgb3V0c2lkZSBvZiAiCisJICAgICIuZGVidWdf cm5nbGlzdHMgb2Zmc2V0IGFycmF5IFtpbiBtb2R1bGUgJXNdIiksCisJICAgIG9iamZpbGVfbmFt ZShvYmpmaWxlKSk7CisgIGlmIChybmdsaXN0X2Jhc2UgKyBybmdsaXN0X2luZGV4ICogY3UtPmhl YWRlci5vZmZzZXRfc2l6ZQorICAgICAgICA+PSBzZWN0aW9uLT5zaXplKQorICAgIGVycm9yKF8o IkRXX0ZPUk1fcm5nbGlzdHggcG9pbnRpbmcgb3V0c2lkZSBvZiAiCisgICAgICAgICAgICAiLmRl YnVnX3JuZ2xpc3RzIHNlY3Rpb24gW2luIG1vZHVsZSAlc10iKSwKKyAgICAgICAgICBvYmpmaWxl X25hbWUob2JqZmlsZSkpOworICBjb25zdCBnZGJfYnl0ZSAqaW5mb19wdHIKKyAgICA9IHNlY3Rp b24tPmJ1ZmZlciArIHJuZ2xpc3RfYmFzZSArIHJuZ2xpc3RfaW5kZXggKiBjdS0+aGVhZGVyLm9m ZnNldF9zaXplOworCisgIGlmIChjdS0+aGVhZGVyLm9mZnNldF9zaXplID09IDQpCisgICAgcmV0 dXJuIHJlYWRfNF9ieXRlcyAoYWJmZCwgaW5mb19wdHIpICsgcm5nbGlzdF9iYXNlOworICBlbHNl CisgICAgcmV0dXJuIHJlYWRfOF9ieXRlcyAoYWJmZCwgaW5mb19wdHIpICsgcm5nbGlzdF9iYXNl OworfQorCiAvKiBQcm9jZXNzIHRoZSBhdHRyaWJ1dGVzIHRoYXQgaGFkIHRvIGJlIHNraXBwZWQg aW4gdGhlIGZpcnN0IHJvdW5kLiBUaGVzZQogICAgYXR0cmlidXRlcyBhcmUgdGhlIG9uZXMgdGhh dCBuZWVkIHN0cl9vZmZzZXRzX2Jhc2Ugb3IgYWRkcl9iYXNlIGF0dHJpYnV0ZXMuCiAgICBUaGV5 IGNvdWxkIG5vdCBoYXZlIGJlZW4gcHJvY2Vzc2VkIGluIHRoZSBmaXJzdCByb3VuZCwgYmVjYXVz ZSBhdCB0aGUgdGltZQpAQCAtMTkwNjEsNiArMTkxNjAsOSBAQCByZWFkX2F0dHJpYnV0ZV9yZXBy b2Nlc3MgKGNvbnN0IHN0cnVjdCBkaWVfcmVhZGVyX3NwZWNzICpyZWFkZXIsCiAgICAgICBjYXNl IERXX0ZPUk1fbG9jbGlzdHg6CiAJIERXX1VOU05EIChhdHRyKSA9IHJlYWRfbG9jbGlzdF9pbmRl eCAoY3UsIERXX1VOU05EIChhdHRyKSk7CiAJIGJyZWFrOworICAgICAgY2FzZSBEV19GT1JNX3Ju Z2xpc3R4OgorICAgICAgICBEV19VTlNORCAoYXR0cikgPSByZWFkX3JuZ2xpc3RfaW5kZXggKGN1 LCBEV19VTlNORCAoYXR0cikpOworICAgICAgICBicmVhazsKICAgICAgIGNhc2UgRFdfRk9STV9z dHJ4OgogICAgICAgY2FzZSBEV19GT1JNX3N0cngxOgogICAgICAgY2FzZSBEV19GT1JNX3N0cngy OgpAQCAtMTkyNDIsOCArMTkzNDQsMTAgQEAgcmVhZF9hdHRyaWJ1dGVfdmFsdWUgKGNvbnN0IHN0 cnVjdCBkaWVfcmVhZGVyX3NwZWNzICpyZWFkZXIsCiAgICAgICBEV19TTkQgKGF0dHIpID0gcmVh ZF9zaWduZWRfbGViMTI4IChhYmZkLCBpbmZvX3B0ciwgJmJ5dGVzX3JlYWQpOwogICAgICAgaW5m b19wdHIgKz0gYnl0ZXNfcmVhZDsKICAgICAgIGJyZWFrOwotICAgIGNhc2UgRFdfRk9STV91ZGF0 YToKICAgICBjYXNlIERXX0ZPUk1fcm5nbGlzdHg6CisgICAgICAqbmVlZF9yZXByb2Nlc3MgPSB0 cnVlOworICAgICAgLyogRkFMTFRIUk9VR0ggKi8KKyAgICBjYXNlIERXX0ZPUk1fdWRhdGE6CiAg ICAgICBEV19VTlNORCAoYXR0cikgPSByZWFkX3Vuc2lnbmVkX2xlYjEyOCAoYWJmZCwgaW5mb19w dHIsICZieXRlc19yZWFkKTsKICAgICAgIGluZm9fcHRyICs9IGJ5dGVzX3JlYWQ7CiAgICAgICBi cmVhazsKQEAgLTIzMzMyLDYgKzIzNDM2LDI1IEBAIGN1X2RlYnVnX2xvY19zZWN0aW9uIChzdHJ1 Y3QgZHdhcmYyX2N1ICpjdSkKIAkJCQkgIDogJnBlcl9vYmpmaWxlLT5wZXJfYmZkLT5sb2MpOwog fQogCisvKiBSZXR1cm4gdGhlIC5kZWJ1Z19ybmdsaXN0cyBzZWN0aW9uIHRvIHVzZSBmb3IgQ1Uu ICAqLworc3RhdGljIHN0cnVjdCBkd2FyZjJfc2VjdGlvbl9pbmZvICoKK2N1X2RlYnVnX3JuZ2xp c3Rfc2VjdGlvbiAoc3RydWN0IGR3YXJmMl9jdSAqY3UpCit7CisgIGlmIChjdS0+aGVhZGVyLnZl cnNpb24gPCA1KQorICAgIGVycm9yIChfKCIuZGVidWdfcm5nbGlzdHMgc2VjdGlvbiBjYW5ub3Qg YmUgdXNlZCBpbiBEV0FSRiAlZCIpLAorCSAgIGN1LT5oZWFkZXIudmVyc2lvbik7CisgIHN0cnVj dCBkd2FyZjJfcGVyX29iamZpbGUgKmR3YXJmMl9wZXJfb2JqZmlsZSA9IGN1LT5wZXJfb2JqZmls ZTsKKworICBpZiAoY3UtPmR3b191bml0KQorICAgIHsKKyAgICAgIHN0cnVjdCBkd29fc2VjdGlv bnMgKnNlY3Rpb25zID0gJmN1LT5kd29fdW5pdC0+ZHdvX2ZpbGUtPnNlY3Rpb25zOworCisgICAg ICBpZiAoc2VjdGlvbnMtPnJuZ2xpc3RzLnNpemUgPiAwKQorCXJldHVybiAmc2VjdGlvbnMtPnJu Z2xpc3RzOworICAgIH0KKyAgcmV0dXJuICZkd2FyZjJfcGVyX29iamZpbGUtPnBlcl9iZmQtPnJu Z2xpc3RzOworfQorCiAvKiBBIGhlbHBlciBmdW5jdGlvbiB0aGF0IGZpbGxzIGluIGEgZHdhcmYy X2xvY2xpc3RfYmF0b24uICAqLwogCiBzdGF0aWMgdm9pZApkaWZmIC0tZ2l0IGEvdGVzdHN1aXRl L2dkYi5kd2FyZjIvZHc1LXJuZ2xpc3QtdGVzdC5jYyBiL3Rlc3RzdWl0ZS9nZGIuZHdhcmYyL2R3 NS1ybmdsaXN0LXRlc3QuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQ2 NTBlMTI3OQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzdWl0ZS9nZGIuZHdhcmYyL2R3NS1ybmds aXN0LXRlc3QuY2MKQEAgLTAsMCArMSw3MSBAQAorI2luY2x1ZGUgPGlvc3RyZWFtPgorI2luY2x1 ZGUgPHZlY3Rvcj4KKworc3RydWN0IG5vZGUgeworICBpbnQgaWQ7CisgIG5vZGUgKmxlZnQ7Cisg IG5vZGUgKnJpZ2h0OworICBib29sIHZpc2l0ZWQ7Cit9OworCitub2RlICBub2RlX2FycmF5WzUw XTsKK3Vuc2lnbmVkIGludCBDVVJfSURYID0gMDsKKworbm9kZSAqIG1ha2Vfbm9kZSAoaW50IHZh bCkKK3sKKyAgbm9kZSAqbmV3X25vZGUgPSAmKG5vZGVfYXJyYXlbQ1VSX0lEWCsrXSk7CisgIG5l d19ub2RlLT5sZWZ0ID0gTlVMTDsKKyAgbmV3X25vZGUtPnJpZ2h0ID0gTlVMTDsKKyAgbmV3X25v ZGUtPmlkID0gdmFsOworICBuZXdfbm9kZS0+dmlzaXRlZCA9IGZhbHNlOworCisgIHJldHVybiBu ZXdfbm9kZTsKK30KKwordm9pZCB0cmVlX2luc2VydCAobm9kZSAqcm9vdCwgaW50IHZhbCkKK3sK KyAgaWYgKHZhbCA8IHJvb3QtPmlkKQorICAgIHsKKyAgICAgIGlmIChyb290LT5sZWZ0KQorICAg ICAgICB0cmVlX2luc2VydCAocm9vdC0+bGVmdCwgdmFsKTsKKyAgICAgIGVsc2UKKyAgICAgICAg cm9vdC0+bGVmdCA9IG1ha2Vfbm9kZSh2YWwpOworICAgIH0KKyAgZWxzZSBpZiAodmFsID4gcm9v dC0+aWQpCisgICAgeworICAgICAgaWYgKHJvb3QtPnJpZ2h0KQorICAgICAgICB0cmVlX2luc2Vy dCAocm9vdC0+cmlnaHQsIHZhbCk7CisgICAgICBlbHNlCisgICAgICAgIHJvb3QtPnJpZ2h0ID0g bWFrZV9ub2RlKHZhbCk7CisgICAgfQorfQorCit2b2lkIGlub3JkZXIobm9kZSAqcm9vdCkgewor ICBzdGQ6OnZlY3Rvcjxub2RlICo+IHRvZG87CisgIHRvZG8ucHVzaF9iYWNrKHJvb3QpOworICB3 aGlsZSAoIXRvZG8uZW1wdHkoKSl7CisgICAgbm9kZSAqY3VyciA9IHRvZG8uYmFjaygpOworICAg IHRvZG8ucG9wX2JhY2soKTsgLyogYnJlYWstaGVyZSAqLworICAgIGlmIChjdXJyLT52aXNpdGVk KSB7CisgICAgICBzdGQ6OmNvdXQgPDwgY3Vyci0+aWQgPDwgIiAiOworICAgIH0gZWxzZSB7Cisg ICAgICBjdXJyLT52aXNpdGVkID0gdHJ1ZTsKKyAgICAgIGlmIChjdXJyLT5yaWdodCkgeyB0b2Rv LnB1c2hfYmFjayhjdXJyLT5yaWdodCk7IH0KKyAgICAgIHRvZG8ucHVzaF9iYWNrKGN1cnIpOwor ICAgICAgaWYgKGN1cnItPmxlZnQpIHsgdG9kby5wdXNoX2JhY2soY3Vyci0+bGVmdCk7IH0KKyAg ICB9CisgIH0KK30KKworaW50IG1haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgbm9k ZSAqcm9vdCA9IG1ha2Vfbm9kZSAoMzUpOworCisgIHRyZWVfaW5zZXJ0IChyb290LCAyOCk7Cisg IHRyZWVfaW5zZXJ0IChyb290LCAyMCk7CisgIHRyZWVfaW5zZXJ0IChyb290LCA2MCk7CisKKyAg aW5vcmRlciAocm9vdCk7CisKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS90ZXN0c3VpdGUv Z2RiLmR3YXJmMi9kdzUtcm5nbGlzdC10ZXN0LmV4cCBiL3Rlc3RzdWl0ZS9nZGIuZHdhcmYyL2R3 NS1ybmdsaXN0LXRlc3QuZXhwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1 YzZjM2JmZTMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0c3VpdGUvZ2RiLmR3YXJmMi9kdzUtcm5n bGlzdC10ZXN0LmV4cApAQCAtMCwwICsxLDQwIEBACisjIENvcHlyaWdodCAyMDExLTIwMjAgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29m dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIg dGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQg YnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0 aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMK KyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi ZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp bXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug Zm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dy YW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyMgQ2hl Y2sgdGhhdCBHREIgY2FuIGZpbmQgdGhlIHZhcmlhYmxlcyBpbiBhIGxleGljYWwgYmxvY2sgd2l0 aCBhCisjIERXX0ZPUk1fcm5nbGlzdHggRFdfQVRfcmFuZ2VzIGZpZWxkLiAgVGhpcyB0ZXN0IGlz IGludGVuZGVkIGZvciBEV0FSRi01LAorIyBjb21waWxlZCB3aXRoIGNsYW5nKysuCisKK3N0YW5k YXJkX3Rlc3RmaWxlIC5jYworCisjIFRoaXMgdGVzdCBpcyBpbnRlbmRlZCBmb3IgdGFyZ2V0cyB3 aGljaCBzdXBwb3J0IERXQVJGLTUuCisjIFNpbmNlIHdlIHBhc3MgYW4gZXhwbGljaXQgLWdkd2Fy Zi01IHRvIHRoZSBjb21waWxlciwKKyMgd2UgbGV0IHRoYXQgYmUgdGhlIHRlc3Qgb2Ygd2hldGhl ciB0aGUgdGFyZ2V0IHN1cHBvcnRzIGl0LgorCitpZiB7IFtwcmVwYXJlX2Zvcl90ZXN0aW5nICJm YWlsZWQgdG8gcHJlcGFyZSIgIiR7dGVzdGZpbGV9IiBcCisgICAgICAgICAgJHNyY2ZpbGUge2Rl YnVnIGMrKyBhZGRpdGlvbmFsX2ZsYWdzPS1nZHdhcmYtNSBcCisgICAgICAgICAgICAgICAgICAg ICAgICBhZGRpdGlvbmFsX2ZsYWdzPS1PMH1dIH0geworICAgIHJldHVybiAtMQorfQorCitpZiAh W3J1bnRvX21haW5dIHsKKyAgICByZXR1cm4gLTEKK30KKworZ2RiX2JyZWFrcG9pbnQgW2dkYl9n ZXRfbGluZV9udW1iZXIgImJyZWFrLWhlcmUiXQorZ2RiX2NvbnRpbnVlX3RvX2JyZWFrcG9pbnQg ImJyZWFrLWhlcmUiICIuKiBicmVhay1oZXJlIC4qIgorCitnZGJfdGVzdCAicHJpbnQgY3VyciIg IlxcXChub2RlIFxcXCpcXFwpICRoZXggPG5vZGVfYXJyYXk+IgorZ2RiX3Rlc3QgInByaW50ICpj dXJyIiAiPSB7aWQgPSAzNSwgbGVmdCA9ICRoZXggPG5vZGVfYXJyYXlcXCskZGVjaW1hbD4sIHJp Z2h0ID0gJGhleCA8bm9kZV9hcnJheVxcKyRkZWNpbWFsPiwgdmlzaXRlZCA9IGZhbHNlfSIK --0000000000006b6fbe05a748fc79--