From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-qk1-x730.google.com (mail-qk1-x730.google.com [IPv6:2607:f8b0:4864:20::730]) by sourceware.org (Postfix) with ESMTPS id 68C093858D35 for ; Sat, 15 Jan 2022 16:39:48 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 68C093858D35 Received: by mail-qk1-x730.google.com with SMTP id h16so14268148qkp.3 for ; Sat, 15 Jan 2022 08:39:48 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=Dt8M/LhVNWue2NVJuHKHtgAT+wGrQrZzLFI+hX11uvk=; b=Fa92+InS5SNrhzU1yS0j0JrMUN38PcqxPRAlhAg3GzNFn9XYJNZ7YA43dxhMRv13Se TLzQUgDha6IN5e3AHeo6majLpzjFnhpxkUu0VBffnIfDJNoRSWhBVsA6lVKY2i1+Hbdm kF18EpjVAWzyjUTSRDVVpxvIGiMhk5CaMbztkBaukF+wqx3hVJCwve+0lJF9PxwmCsKq SF1xIaW1qF6MBtGzrsi0bsj6ATkPoP5yAw0OF5zLFQayc49FKRkhHMJu+0Ac1bjNat+L ScJm08QgnpIXpUzv9EcEvO1otyCvSQCVNxDvjTlno5uhNXvmJEtZcMoIvssyRlU8Gt52 0V3Q== X-Gm-Message-State: AOAM532LvbnwZhcq+/k6LQ0eCg3v2NGy2gfbQzfkZ5Zv09sJBhQ6ae2/ XXk+d9IVNRo+D1lgDCEQ3BxnOfZ7jK7k0iy0yhc= X-Google-Smtp-Source: ABdhPJyTkFNdwzFIrTLWx8Gv9aBRS526Ow5fMDvlVX2FBt8HRcqNp3rM5t8z56OBRNEgZ72gqXdefzH/nJ9gwBW0ra0= X-Received: by 2002:a05:620a:240f:: with SMTP id d15mr9698893qkn.370.1642264787917; Sat, 15 Jan 2022 08:39:47 -0800 (PST) MIME-Version: 1.0 References: <20220113072839.8405-1-hongyu.wang@intel.com> In-Reply-To: From: Hongyu Wang Date: Sun, 16 Jan 2022 00:39:37 +0800 Message-ID: Subject: Re: [PATCH] [i386] GLC tuning: Break false dependency for dest register. To: Uros Bizjak Cc: Hongyu Wang , Hongtao Liu , "gcc-patches@gcc.gnu.org" Content-Type: multipart/mixed; boundary="0000000000004fd08105d5a191fc" X-Spam-Status: No, score=-1.4 required=5.0 tests=BAYES_00, BODY_8BITS, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 15 Jan 2022 16:39:49 -0000 --0000000000004fd08105d5a191fc Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Thanks for the suggestion, here is the updated patch that survived bootstrap/regtest. > Please note reg_mentioned_p in the above condition. This function > returns nonzero if register op0 appears somewhere within op1 and is > critical for the correct operation of your patch. I added reg_mentioned_p for all insns except fp16 complex mult, since they have constraint & to the dest so it must be allocated different register from src. Uros Bizjak =E4=BA=8E2022=E5=B9=B41=E6=9C=8814=E6=97=A5= =E5=91=A8=E4=BA=94 23:49=E5=86=99=E9=81=93=EF=BC=9A > > On Fri, Jan 14, 2022 at 2:44 PM Hongyu Wang wrot= e: > > > > > Are there any technical obstacles to introduce subst to > > > define_{,insn_and_}split? > > > > gccint says: define_subst can be used only in define_insn and > > define_expand, it cannot be used in other expressions (e.g. in > > define_insn_and_split). > > Hm, hm ... annoying ... > > > I have no idea how to implement it in current infrastructure. > > > > > In the proposed patch, if the output register is also mentioned in th= e > > > input, then clearing before insn will clear the value in the input > > > register. The solution in the i386.md also takes care of this issue. > > > > > > > For this, I think we can add REGNO checks for operands in condition > > (which means there is true dependency). > > Let's go in your direction, considering the limitations of current > infrastructure. > +{ > + if (TARGET_DEST_FALSE_DEPENDENCY > + && get_attr_dest_false_dep (insn) =3D=3D > + DEST_FALSE_DEP_TRUE) > + output_asm_insn ("vxorps\t{%x0, %x0, %x0}", operands); > + return "vgetmant\t{%2, %1, > %0|%0, %1, %2}"; > +} > > There is no need to pass the information via attributes. IMO, you > shoud use subst attribute directly in the condition: > > { > if (TARGET_DEST_FALSE_DEPENDENCY > && > && !reg_mentioned_p (operands[0], operands[1])) > output_asm_insn ("vxorps\t{%x0, %x0, %x0}", operands); > return "....."; > } > > Assume the above works, so please: > > - rename TARGET_DEST_FALSE_DEPENDENCY to something less generic, maybe > following existing BMI example with TARGET_AVOID_FALSE_DEP_FOR_AVX512F > - rename "mask3_dest_false_dep_attr" to "mask3_false_dep_for_avx512f_cond= " > > Please note reg_mentioned_p in the above condition. This function > returns nonzero if register op0 appears somewhere within op1 and is > critical for the correct operation of your patch. > > Uros. --0000000000004fd08105d5a191fc Content-Type: application/x-patch; name="0001-i386-GLC-tuning-Break-false-dependency-for-dest-regi.patch" Content-Disposition: attachment; filename="0001-i386-GLC-tuning-Break-false-dependency-for-dest-regi.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kyg1qmjv0 RnJvbSBhYzQ3MjUyN2I2NTMwMzBjODljMDYwMjFmMzgyNjg0NDFlNjRhNTAyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiB3d3doaGh5eXkgPGhvbmd5dS53YW5nQGludGVsLmNvbT4KRGF0 ZTogTW9uLCAzMCBBdWcgMjAyMSAxNjo0MTo0MSArMDgwMApTdWJqZWN0OiBbUEFUQ0hdIFtpMzg2 XSBHTEMgdHVuaW5nOiBCcmVhayBmYWxzZSBkZXBlbmRlbmN5IGZvciBkZXN0IHJlZ2lzdGVyLgoK Rm9yIEdvbGRlbkNvdmUgbWljcm8tYXJjaGl0ZWN0dXJlLCBmb3JjZSBpbnNlcnQgemVyby1pZGlv bSBpbiBhc20KdGVtcGxhdGUgdG8gYnJlYWsgZmFsc2UgZGVwZW5kZW5jeSBvZiBkZXN0IHJlZ2lz dGVyIGZvciBzZXZlcmFsIGluc25zLgoKVGhlIHJlbGF0ZWQgaW5zbnMgYXJlOgoKVlBFUk0vRC9R L1BTL1BEClZSQU5HRVBEL1BTL1NEL1NTClZHRVRNQU5UU1MvU0QvU0gKVkdFVE1BTkRQUy9QRCAt IG1lbSB2ZXJzaW9uIG9ubHkKVlBNVUxMUQpWRk1VTENTSC9QSApWRkNNVUxDU0gvUEgKCmdjYy9D aGFuZ2VMb2c6CgoJKiBjb25maWcvaTM4Ni9pMzg2LmggKFRBUkdFVF9ERVNUX0ZBTFNFX0RFUF9G T1JfR0xDKTogTmV3IG1hY3JvLgoJKiBjb25maWcvaTM4Ni9zc2UubWQgKDxhdng1MTI+Xzxjb21w bGV4b3BuYW1lPl88bW9kZT48bWFza2NfbmFtZT48cm91bmRfbmFtZT4pOgoJSW5zZXJ0IHplcm8t aWRpb20gaW4gb3V0cHV0IHRlbXBsYXRlIHdoZW4gYXR0ciBlbmFibGVkLCBzZXQgbmV3IGF0dHJp YnV0ZSB0bwoJdHJ1ZSBmb3Igbm9uLW1hc2svbWFza3ogaW5zbi4KCShhdng1MTJmcDE2Xzxjb21w bGV4b3BuYW1lPnNoX3Y4aGY8bWFza19zY2FsYXJjX25hbWU+PHJvdW5kX3NjYWxhcmN6X25hbWU+ KToKCUxpa2V3aXNlLgoJKGF2eDUxMmRxX211bDxtb2RlPjM8bWFza19uYW1lPik6IExpa2V3aXNl LgoJKDxhdngyX2F2eDUxMj5fcGVybXZhcjxtb2RlPjxtYXNrX25hbWU+KTogTGlrZXdpc2UuCgko YXZ4Ml9wZXJtPG1vZGU+XzE8bWFza19uYW1lPik6IExpa2V3aXNlLgoJKGF2eDUxMmZfcGVybTxt b2RlPl8xPG1hc2tfbmFtZT4pOiBMaWtld2lzZS4KCShhdng1MTJkcV9yYW5nZXA8bW9kZT48bWFz a19uYW1lPjxyb3VuZF9zYWVvbmx5X25hbWU+KTogTGlrZXdpc2UuCgkoYXZ4NTEyZHFfcmFuZ2Vz PG1vZGU+PG1hc2tfc2NhbGFyX25hbWU+PHJvdW5kX3NhZW9ubHlfc2NhbGFyX25hbWU+KToKCUxp a2V3aXNlLgoJKDxhdng1MTI+X2dldG1hbnQ8bW9kZT48bWFza19uYW1lPjxyb3VuZF9zYWVvbmx5 X25hbWU+KTogTGlrZXdpc2UuCgkoYXZ4NTEyZl92Z2V0bWFudDxtb2RlPjxtYXNrX3NjYWxhcl9u YW1lPjxyb3VuZF9zYWVvbmx5X3NjYWxhcl9uYW1lPik6CglMaWtld2lzZS4KCSogY29uZmlnL2kz ODYvc3Vic3QubWQgKG1hc2szX2Rlc3RfZmFsc2VfZGVwX2Zvcl9nbGNfY29uZCk6IE5ldwoJc3Vi c3RfYXR0ci4KCShtYXNrNF9kZXN0X2ZhbHNlX2RlcF9mb3JfZ2xjX2NvbmQpOiBMaWtld2lzZS4K CShtYXNrNl9kZXN0X2ZhbHNlX2RlcF9mb3JfZ2xjX2NvbmQpOiBMaWtld2lzZS4KCShtYXNrMTBf ZGVzdF9mYWxzZV9kZXBfZm9yX2dsY19jb25kKTogTGlrZXdpc2UuCgkobWFza2NfZGVzdF9mYWxz ZV9kZXBfZm9yX2dsY19jb25kKTogTGlrZXdpc2UuCgkobWFza19zY2FsYXI0X2Rlc3RfZmFsc2Vf ZGVwX2Zvcl9nbGNfY29uZCk6IExpa2V3aXNlLgoJKG1hc2tfc2NhbGFyY19kZXN0X2ZhbHNlX2Rl cF9mb3JfZ2xjX2NvbmQpOiBMaWtld2lzZS4KCSogY29uZmlnL2kzODYveDg2LXR1bmUuZGVmIChY ODZfVFVORV9ERVNUX0ZBTFNFX0RFUF9GT1JfR0xDKTogTmV3CglERUZfVFVORSBlbmFibGVkIGZv ciBtX1NBUFBISVJFUkFQSURTIGFuZCBtX0FMREVSTEFLRQoKZ2NjL3Rlc3RzdWl0ZS9DaGFuZ2VM b2c6CgoJKiBnY2MudGFyZ2V0L2kzODYvYXZ4Mi1kZXN0LWZhbHNlLWRlcC1mb3ItZ2xjLmM6IE5l dyB0ZXN0LgoJKiBnY2MudGFyZ2V0L2kzODYvYXZ4NTEyZHEtZGVzdC1mYWxzZS1kZXAtZm9yLWds Yy5jOiBEaXR0by4KCSogZ2NjLnRhcmdldC9pMzg2L2F2eDUxMmYtZGVzdC1mYWxzZS1kZXAtZm9y LWdsYy5jOiBEaXR0by4KCSogZ2NjLnRhcmdldC9pMzg2L2F2eDUxMmZwMTYtZGVzdC1mYWxzZS1k ZXAtZm9yLWdsYy5jOiBEaXR0by4KCSogZ2NjLnRhcmdldC9pMzg2L2F2eDUxMmZwMTZ2bC1kZXN0 LWZhbHNlLWRlcC1mb3ItZ2xjLmM6IERpdHRvLgoJKiBnY2MudGFyZ2V0L2kzODYvYXZ4NTEydmwt ZGVzdC1mYWxzZS1kZXAtZm9yLWdsYy5jOiBEaXR0by4KLS0tCiBnY2MvY29uZmlnL2kzODYvaTM4 Ni5oICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDIgKwogZ2NjL2NvbmZpZy9pMzg2L3NzZS5t ZCAgICAgICAgICAgICAgICAgICAgICAgIHwgIDc1ICsrKysrKysrKysrLS0KIGdjYy9jb25maWcv aTM4Ni9zdWJzdC5tZCAgICAgICAgICAgICAgICAgICAgICB8ICAgNyArKwogZ2NjL2NvbmZpZy9p Mzg2L3g4Ni10dW5lLmRlZiAgICAgICAgICAgICAgICAgIHwgICA2ICsKIC4uLi9pMzg2L2F2eDIt ZGVzdC1mYWxzZS1kZXAtZm9yLWdsYy5jICAgICAgICB8ICAyNCArKysrCiAuLi4vaTM4Ni9hdng1 MTJkcS1kZXN0LWZhbHNlLWRlcC1mb3ItZ2xjLmMgICAgfCAgNzMgKysrKysrKysrKysrKwogLi4u L2kzODYvYXZ4NTEyZi1kZXN0LWZhbHNlLWRlcC1mb3ItZ2xjLmMgICAgIHwgMTAzICsrKysrKysr KysrKysrKysrKwogLi4uL2kzODYvYXZ4NTEyZnAxNi1kZXN0LWZhbHNlLWRlcC1mb3ItZ2xjLmMg IHwgIDQ1ICsrKysrKysrCiAuLi4vYXZ4NTEyZnAxNnZsLWRlc3QtZmFsc2UtZGVwLWZvci1nbGMu YyAgICAgfCAgMjQgKysrKwogLi4uL2kzODYvYXZ4NTEydmwtZGVzdC1mYWxzZS1kZXAtZm9yLWds Yy5jICAgIHwgIDc2ICsrKysrKysrKysrKysKIDEwIGZpbGVzIGNoYW5nZWQsIDQyNyBpbnNlcnRp b25zKCspLCA4IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUv Z2NjLnRhcmdldC9pMzg2L2F2eDItZGVzdC1mYWxzZS1kZXAtZm9yLWdsYy5jCiBjcmVhdGUgbW9k ZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvYXZ4NTEyZHEtZGVzdC1mYWxz ZS1kZXAtZm9yLWdsYy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nY2MudGFy Z2V0L2kzODYvYXZ4NTEyZi1kZXN0LWZhbHNlLWRlcC1mb3ItZ2xjLmMKIGNyZWF0ZSBtb2RlIDEw MDY0NCBnY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9hdng1MTJmcDE2LWRlc3QtZmFsc2Ut ZGVwLWZvci1nbGMuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvZ2NjLnRhcmdl dC9pMzg2L2F2eDUxMmZwMTZ2bC1kZXN0LWZhbHNlLWRlcC1mb3ItZ2xjLmMKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBnY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9hdng1MTJ2bC1kZXN0LWZhbHNl LWRlcC1mb3ItZ2xjLmMKCmRpZmYgLS1naXQgYS9nY2MvY29uZmlnL2kzODYvaTM4Ni5oIGIvZ2Nj L2NvbmZpZy9pMzg2L2kzODYuaAppbmRleCAzYWMwZjY5OGFlMi4uZjFiYjhhODY4ZjEgMTAwNjQ0 Ci0tLSBhL2djYy9jb25maWcvaTM4Ni9pMzg2LmgKKysrIGIvZ2NjL2NvbmZpZy9pMzg2L2kzODYu aApAQCAtNDI5LDYgKzQyOSw4IEBAIGV4dGVybiB1bnNpZ25lZCBjaGFyIGl4ODZfdHVuZV9mZWF0 dXJlc1tYODZfVFVORV9MQVNUXTsKIAlpeDg2X3R1bmVfZmVhdHVyZXNbWDg2X1RVTkVfRVhQQU5E X0FCU10KICNkZWZpbmUgVEFSR0VUX1YyREZfUkVEVUNUSU9OX1BSRUZFUl9IQUREUEQgXAogCWl4 ODZfdHVuZV9mZWF0dXJlc1tYODZfVFVORV9WMkRGX1JFRFVDVElPTl9QUkVGRVJfSEFERFBEXQor I2RlZmluZSBUQVJHRVRfREVTVF9GQUxTRV9ERVBfRk9SX0dMQyBcCisJaXg4Nl90dW5lX2ZlYXR1 cmVzW1g4Nl9UVU5FX0RFU1RfRkFMU0VfREVQX0ZPUl9HTENdCiAKIC8qIEZlYXR1cmUgdGVzdHMg YWdhaW5zdCB0aGUgdmFyaW91cyBhcmNoaXRlY3R1cmUgdmFyaWF0aW9ucy4gICovCiBlbnVtIGl4 ODZfYXJjaF9pbmRpY2VzIHsKZGlmZiAtLWdpdCBhL2djYy9jb25maWcvaTM4Ni9zc2UubWQgYi9n Y2MvY29uZmlnL2kzODYvc3NlLm1kCmluZGV4IDA4NjQ3NDg4NzVlLi5kNDc1NmNkZTNjNiAxMDA2 NDQKLS0tIGEvZ2NjL2NvbmZpZy9pMzg2L3NzZS5tZAorKysgYi9nY2MvY29uZmlnL2kzODYvc3Nl Lm1kCkBAIC02NTM2LDcgKzY1MzYsMTIgQEAgKGRlZmluZV9pbnNuICI8YXZ4NTEyPl88Y29tcGxl eG9wbmFtZT5fPG1vZGU+PG1hc2tjX25hbWU+PHJvdW5kX25hbWU+IgogCSAgICAgKG1hdGNoX29w ZXJhbmQ6VkZfQVZYNTEyRlAxNlZMIDIgIm5vbmltbWVkaWF0ZV9vcGVyYW5kIiAiPHJvdW5kX2Nv bnN0cmFpbnQ+IildCiAJICAgICBVTlNQRUNfQ09NUExFWF9GX0NfTVVMKSldCiAgICJUQVJHRVRf QVZYNTEyRlAxNiAmJiA8cm91bmRfbW9kZTUxMmJpdF9jb25kaXRpb24+IgotICAidjxjb21wbGV4 b3BuYW1lPjxzc2Vtb2Rlc3VmZml4Plx0ezxyb3VuZF9tYXNrY19vcDM+JTIsICUxLCAlMDxtYXNr Y19vcGVyYW5kMz58JTA8bWFza2Nfb3BlcmFuZDM+LCAlMSwgJTI8cm91bmRfbWFza2Nfb3AzPn0i Cit7CisgIGlmIChUQVJHRVRfREVTVF9GQUxTRV9ERVBfRk9SX0dMQworICAgICAgJiYgPG1hc2tj X2Rlc3RfZmFsc2VfZGVwX2Zvcl9nbGNfY29uZD4pCisgICAgb3V0cHV0X2FzbV9pbnNuICgidnhv cnBzXHR7JXgwLCAleDAsICV4MH0iLCBvcGVyYW5kcyk7CisgIHJldHVybiAidjxjb21wbGV4b3Bu YW1lPjxzc2Vtb2Rlc3VmZml4Plx0ezxyb3VuZF9tYXNrY19vcDM+JTIsICUxLCAlMDxtYXNrY19v cGVyYW5kMz58JTA8bWFza2Nfb3BlcmFuZDM+LCAlMSwgJTI8cm91bmRfbWFza2Nfb3AzPn0iOwor fQogICBbKHNldF9hdHRyICJ0eXBlIiAic3NlbXVsIikKICAgIChzZXRfYXR0ciAibW9kZSIgIjxN T0RFPiIpXSkKIApAQCAtNjc0Miw3ICs2NzQ3LDEyIEBAIChkZWZpbmVfaW5zbiAiYXZ4NTEyZnAx Nl88Y29tcGxleG9wbmFtZT5zaF92OGhmPG1hc2tfc2NhbGFyY19uYW1lPjxyb3VuZF9zY2FsYXJj CiAJICAgIChtYXRjaF9kdXAgMSkKIAkgICAgKGNvbnN0X2ludCAzKSkpXQogICAiVEFSR0VUX0FW WDUxMkZQMTYiCi0gICJ2PGNvbXBsZXhvcG5hbWU+c2hcdHs8cm91bmRfc2NhbGFyY19tYXNrX29w Mz4lMiwgJTEsICUwPG1hc2tfc2NhbGFyY19vcGVyYW5kMz58JTA8bWFza19zY2FsYXJjX29wZXJh bmQzPiwgJTEsICUyPHJvdW5kX3NjYWxhcmNfbWFza19vcDM+fSIKK3sKKyAgaWYgKFRBUkdFVF9E RVNUX0ZBTFNFX0RFUF9GT1JfR0xDCisgICAgICAmJiA8bWFza19zY2FsYXJjX2Rlc3RfZmFsc2Vf ZGVwX2Zvcl9nbGNfY29uZD4pCisgICAgb3V0cHV0X2FzbV9pbnNuICgidnhvcnBzXHR7JXgwLCAl eDAsICV4MH0iLCBvcGVyYW5kcyk7CisgIHJldHVybiAidjxjb21wbGV4b3BuYW1lPnNoXHR7PHJv dW5kX3NjYWxhcmNfbWFza19vcDM+JTIsICUxLCAlMDxtYXNrX3NjYWxhcmNfb3BlcmFuZDM+fCUw PG1hc2tfc2NhbGFyY19vcGVyYW5kMz4sICUxLCAlMjxyb3VuZF9zY2FsYXJjX21hc2tfb3AzPn0i OworfQogICBbKHNldF9hdHRyICJ0eXBlIiAic3NlbXVsIikKICAgIChzZXRfYXR0ciAibW9kZSIg IlY4SEYiKV0pCiAKQEAgLTE1MjA3LDcgKzE1MjE3LDE0IEBAIChkZWZpbmVfaW5zbiAiYXZ4NTEy ZHFfbXVsPG1vZGU+MzxtYXNrX25hbWU+IgogCSAgKG1hdGNoX29wZXJhbmQ6Vkk4X0FWWDUxMlZM IDIgImJjc3RfdmVjdG9yX29wZXJhbmQiICJ2bUJyIikpKV0KICAgIlRBUkdFVF9BVlg1MTJEUSAm JiA8bWFza19tb2RlNTEyYml0X2NvbmRpdGlvbj4KICAgJiYgaXg4Nl9iaW5hcnlfb3BlcmF0b3Jf b2sgKE1VTFQsIDxNT0RFPm1vZGUsIG9wZXJhbmRzKSIKLSAgInZwbXVsbHFcdHslMiwgJTEsICUw PG1hc2tfb3BlcmFuZDM+fCUwPG1hc2tfb3BlcmFuZDM+LCAlMSwgJTJ9IgoreworICBpZiAoVEFS R0VUX0RFU1RfRkFMU0VfREVQX0ZPUl9HTEMKKyAgICAgICYmIDxtYXNrM19kZXN0X2ZhbHNlX2Rl cF9mb3JfZ2xjX2NvbmQ+CisgICAgICAmJiAhcmVnX21lbnRpb25lZF9wIChvcGVyYW5kc1swXSwg b3BlcmFuZHNbMV0pCisgICAgICAmJiAhcmVnX21lbnRpb25lZF9wIChvcGVyYW5kc1swXSwgb3Bl cmFuZHNbMl0pKQorICAgIG91dHB1dF9hc21faW5zbiAoInZ4b3Jwc1x0eyV4MCwgJXgwLCAleDB9 Iiwgb3BlcmFuZHMpOworICByZXR1cm4gInZwbXVsbHFcdHslMiwgJTEsICUwPG1hc2tfb3BlcmFu ZDM+fCUwPG1hc2tfb3BlcmFuZDM+LCAlMSwgJTJ9IjsKK30KICAgWyhzZXRfYXR0ciAidHlwZSIg InNzZWltdWwiKQogICAgKHNldF9hdHRyICJwcmVmaXgiICJldmV4IikKICAgIChzZXRfYXR0ciAi bW9kZSIgIjxzc2VpbnNubW9kZT4iKV0pCkBAIC0yNDYzNiw3ICsyNDY1MywxNCBAQCAoZGVmaW5l X2luc24gIjxhdngyX2F2eDUxMj5fcGVybXZhcjxtb2RlPjxtYXNrX25hbWU+IgogCSAgIChtYXRj aF9vcGVyYW5kOjxzc2VpbnR2ZWNtb2RlPiAyICJyZWdpc3Rlcl9vcGVyYW5kIiAidiIpXQogCSAg VU5TUEVDX1ZQRVJNVkFSKSldCiAgICJUQVJHRVRfQVZYMiAmJiA8bWFza19tb2RlNTEyYml0X2Nv bmRpdGlvbj4iCi0gICJ2cGVybTxzc2Vtb2Rlc3VmZml4Plx0eyUxLCAlMiwgJTA8bWFza19vcGVy YW5kMz58JTA8bWFza19vcGVyYW5kMz4sICUyLCAlMX0iCit7CisgIGlmIChUQVJHRVRfREVTVF9G QUxTRV9ERVBfRk9SX0dMQworICAgICAgJiYgPG1hc2szX2Rlc3RfZmFsc2VfZGVwX2Zvcl9nbGNf Y29uZD4KKyAgICAgICYmICFyZWdfbWVudGlvbmVkX3AgKG9wZXJhbmRzWzBdLCBvcGVyYW5kc1sx XSkKKyAgICAgICYmICFyZWdfbWVudGlvbmVkX3AgKG9wZXJhbmRzWzBdLCBvcGVyYW5kc1syXSkp CisgICAgb3V0cHV0X2FzbV9pbnNuICgidnhvcnBzXHR7JXgwLCAleDAsICV4MH0iLCBvcGVyYW5k cyk7CisgIHJldHVybiAidnBlcm08c3NlbW9kZXN1ZmZpeD5cdHslMSwgJTIsICUwPG1hc2tfb3Bl cmFuZDM+fCUwPG1hc2tfb3BlcmFuZDM+LCAlMiwgJTF9IjsKK30KICAgWyhzZXRfYXR0ciAidHlw ZSIgInNzZWxvZyIpCiAgICAoc2V0X2F0dHIgInByZWZpeCIgIjxtYXNrX3ByZWZpeDI+IikKICAg IChzZXRfYXR0ciAibW9kZSIgIjxzc2VpbnNubW9kZT4iKV0pCkBAIC0yNDg3Myw2ICsyNDg5Nywx MCBAQCAoZGVmaW5lX2luc24gImF2eDJfcGVybTxtb2RlPl8xPG1hc2tfbmFtZT4iCiAgIG1hc2sg fD0gSU5UVkFMIChvcGVyYW5kc1s0XSkgPDwgNDsKICAgbWFzayB8PSBJTlRWQUwgKG9wZXJhbmRz WzVdKSA8PCA2OwogICBvcGVyYW5kc1syXSA9IEdFTl9JTlQgKG1hc2spOworICBpZiAoVEFSR0VU X0RFU1RfRkFMU0VfREVQX0ZPUl9HTEMKKyAgICAgICYmIDxtYXNrNl9kZXN0X2ZhbHNlX2RlcF9m b3JfZ2xjX2NvbmQ+CisgICAgICAmJiAhcmVnX21lbnRpb25lZF9wIChvcGVyYW5kc1swXSwgb3Bl cmFuZHNbMV0pKQorICAgIG91dHB1dF9hc21faW5zbiAoInZ4b3Jwc1x0eyV4MCwgJXgwLCAleDB9 Iiwgb3BlcmFuZHMpOwogICByZXR1cm4gInZwZXJtPHNzZW1vZGVzdWZmaXg+XHR7JTIsICUxLCAl MDxtYXNrX29wZXJhbmQ2PnwlMDxtYXNrX29wZXJhbmQ2PiwgJTEsICUyfSI7CiB9CiAgIFsoc2V0 X2F0dHIgInR5cGUiICJzc2Vsb2ciKQpAQCAtMjQ5NDQsNiArMjQ5NzIsMTAgQEAgKGRlZmluZV9p bnNuICJhdng1MTJmX3Blcm08bW9kZT5fMTxtYXNrX25hbWU+IgogICBtYXNrIHw9IElOVFZBTCAo b3BlcmFuZHNbNF0pIDw8IDQ7CiAgIG1hc2sgfD0gSU5UVkFMIChvcGVyYW5kc1s1XSkgPDwgNjsK ICAgb3BlcmFuZHNbMl0gPSBHRU5fSU5UIChtYXNrKTsKKyAgaWYgKFRBUkdFVF9ERVNUX0ZBTFNF X0RFUF9GT1JfR0xDCisgICAgICAmJiA8bWFzazEwX2Rlc3RfZmFsc2VfZGVwX2Zvcl9nbGNfY29u ZD4KKyAgICAgICYmICFyZWdfbWVudGlvbmVkX3AgKG9wZXJhbmRzWzBdLCBvcGVyYW5kc1sxXSkp CisgICAgb3V0cHV0X2FzbV9pbnNuICgidnhvcnBzXHR7JXgwLCAleDAsICV4MH0iLCBvcGVyYW5k cyk7CiAgIHJldHVybiAidnBlcm08c3NlbW9kZXN1ZmZpeD5cdHslMiwgJTEsICUwPG1hc2tfb3Bl cmFuZDEwPnwlMDxtYXNrX29wZXJhbmQxMD4sICUxLCAlMn0iOwogfQogICBbKHNldF9hdHRyICJ0 eXBlIiAic3NlbG9nIikKQEAgLTI2ODQzLDcgKzI2ODc1LDE0IEBAIChkZWZpbmVfaW5zbiAiYXZ4 NTEyZHFfcmFuZ2VwPG1vZGU+PG1hc2tfbmFtZT48cm91bmRfc2Flb25seV9uYW1lPiIKIAkgICAo bWF0Y2hfb3BlcmFuZDpTSSAzICJjb25zdF8wX3RvXzE1X29wZXJhbmQiKV0KIAkgIFVOU1BFQ19S QU5HRSkpXQogICAiVEFSR0VUX0FWWDUxMkRRICYmIDxyb3VuZF9zYWVvbmx5X21vZGU1MTJiaXRf Y29uZGl0aW9uPiIKLSAgInZyYW5nZTxzc2Vtb2Rlc3VmZml4Plx0eyUzLCA8cm91bmRfc2Flb25s eV9tYXNrX29wND4lMiwgJTEsICUwPG1hc2tfb3BlcmFuZDQ+fCUwPG1hc2tfb3BlcmFuZDQ+LCAl MSwgJTI8cm91bmRfc2Flb25seV9tYXNrX29wND4sICUzfSIKK3sKKyAgaWYgKFRBUkdFVF9ERVNU X0ZBTFNFX0RFUF9GT1JfR0xDCisgICAgICAmJiA8bWFzazRfZGVzdF9mYWxzZV9kZXBfZm9yX2ds Y19jb25kPgorICAgICAgJiYgIXJlZ19tZW50aW9uZWRfcCAob3BlcmFuZHNbMF0sIG9wZXJhbmRz WzFdKQorICAgICAgJiYgIXJlZ19tZW50aW9uZWRfcCAob3BlcmFuZHNbMF0sIG9wZXJhbmRzWzJd KSkKKyAgICBvdXRwdXRfYXNtX2luc24gKCJ2eG9ycHNcdHsleDAsICV4MCwgJXgwfSIsIG9wZXJh bmRzKTsKKyAgcmV0dXJuICJ2cmFuZ2U8c3NlbW9kZXN1ZmZpeD5cdHslMywgPHJvdW5kX3NhZW9u bHlfbWFza19vcDQ+JTIsICUxLCAlMDxtYXNrX29wZXJhbmQ0PnwlMDxtYXNrX29wZXJhbmQ0Piwg JTEsICUyPHJvdW5kX3NhZW9ubHlfbWFza19vcDQ+LCAlM30iOworfQogICBbKHNldF9hdHRyICJ0 eXBlIiAic3NlIikKICAgIChzZXRfYXR0ciAicHJlZml4IiAiZXZleCIpCiAgICAoc2V0X2F0dHIg Im1vZGUiICI8TU9ERT4iKV0pCkBAIC0yNjg1OSw3ICsyNjg5OCwxNCBAQCAoZGVmaW5lX2luc24g ImF2eDUxMmRxX3Jhbmdlczxtb2RlPjxtYXNrX3NjYWxhcl9uYW1lPjxyb3VuZF9zYWVvbmx5X3Nj YWxhcl9uYW1lPgogCSAgKG1hdGNoX2R1cCAxKQogCSAgKGNvbnN0X2ludCAxKSkpXQogICAiVEFS R0VUX0FWWDUxMkRRIgotICAidnJhbmdlPHNzZXNjYWxhcm1vZGVzdWZmaXg+XHR7JTMsIDxyb3Vu ZF9zYWVvbmx5X3NjYWxhcl9tYXNrX29wND4lMiwgJTEsICUwPG1hc2tfc2NhbGFyX29wZXJhbmQ0 PnwlMDxtYXNrX3NjYWxhcl9vcGVyYW5kND4sICUxLCAlPGlwdHI+Mjxyb3VuZF9zYWVvbmx5X3Nj YWxhcl9tYXNrX29wND4sICUzfSIKK3sKKyAgaWYgKFRBUkdFVF9ERVNUX0ZBTFNFX0RFUF9GT1Jf R0xDCisgICAgICAmJiA8bWFza19zY2FsYXI0X2Rlc3RfZmFsc2VfZGVwX2Zvcl9nbGNfY29uZD4K KyAgICAgICYmICFyZWdfbWVudGlvbmVkX3AgKG9wZXJhbmRzWzBdLCBvcGVyYW5kc1sxXSkKKyAg ICAgICYmICFyZWdfbWVudGlvbmVkX3AgKG9wZXJhbmRzWzBdLCBvcGVyYW5kc1syXSkpCisgICAg b3V0cHV0X2FzbV9pbnNuICgidnhvcnBzXHR7JXgwLCAleDAsICV4MH0iLCBvcGVyYW5kcyk7Cisg IHJldHVybiAidnJhbmdlPHNzZXNjYWxhcm1vZGVzdWZmaXg+XHR7JTMsIDxyb3VuZF9zYWVvbmx5 X3NjYWxhcl9tYXNrX29wND4lMiwgJTEsICUwPG1hc2tfc2NhbGFyX29wZXJhbmQ0PnwlMDxtYXNr X3NjYWxhcl9vcGVyYW5kND4sICUxLCAlPGlwdHI+Mjxyb3VuZF9zYWVvbmx5X3NjYWxhcl9tYXNr X29wND4sICUzfSI7Cit9CiAgIFsoc2V0X2F0dHIgInR5cGUiICJzc2UiKQogICAgKHNldF9hdHRy ICJwcmVmaXgiICJldmV4IikKICAgIChzZXRfYXR0ciAibW9kZSIgIjxNT0RFPiIpXSkKQEAgLTI2 ODk5LDcgKzI2OTQ1LDEzIEBAIChkZWZpbmVfaW5zbiAiPGF2eDUxMj5fZ2V0bWFudDxtb2RlPjxt YXNrX25hbWU+PHJvdW5kX3NhZW9ubHlfbmFtZT4iCiAJICAgKG1hdGNoX29wZXJhbmQ6U0kgMiAi Y29uc3RfMF90b18xNV9vcGVyYW5kIildCiAJICBVTlNQRUNfR0VUTUFOVCkpXQogICAiVEFSR0VU X0FWWDUxMkYiCi0gICJ2Z2V0bWFudDxzc2Vtb2Rlc3VmZml4Plx0eyUyLCA8cm91bmRfc2Flb25s eV9tYXNrX29wMz4lMSwgJTA8bWFza19vcGVyYW5kMz58JTA8bWFza19vcGVyYW5kMz4sICUxPHJv dW5kX3NhZW9ubHlfbWFza19vcDM+LCAlMn0iOworeworICBpZiAoVEFSR0VUX0RFU1RfRkFMU0Vf REVQX0ZPUl9HTEMKKyAgICAgICYmIDxtYXNrM19kZXN0X2ZhbHNlX2RlcF9mb3JfZ2xjX2NvbmQ+ CisgICAgICAmJiBNRU1fUCAob3BlcmFuZHNbMV0pKQorICAgIG91dHB1dF9hc21faW5zbiAoInZ4 b3Jwc1x0eyV4MCwgJXgwLCAleDB9Iiwgb3BlcmFuZHMpOworICByZXR1cm4gInZnZXRtYW50PHNz ZW1vZGVzdWZmaXg+XHR7JTIsIDxyb3VuZF9zYWVvbmx5X21hc2tfb3AzPiUxLCAlMDxtYXNrX29w ZXJhbmQzPnwlMDxtYXNrX29wZXJhbmQzPiwgJTE8cm91bmRfc2Flb25seV9tYXNrX29wMz4sICUy fSI7Cit9CiAgIFsoc2V0X2F0dHIgInByZWZpeCIgImV2ZXgiKQogICAgKHNldF9hdHRyICJtb2Rl IiAiPE1PREU+IildKQogCkBAIC0yNjkxNCw3ICsyNjk2NiwxNCBAQCAoZGVmaW5lX2luc24gImF2 eDUxMmZfdmdldG1hbnQ8bW9kZT48bWFza19zY2FsYXJfbmFtZT48cm91bmRfc2Flb25seV9zY2Fs YXJfbmFtZQogCSAgKG1hdGNoX2R1cCAxKQogCSAgKGNvbnN0X2ludCAxKSkpXQogICAgIlRBUkdF VF9BVlg1MTJGIgotICAgInZnZXRtYW50PHNzZXNjYWxhcm1vZGVzdWZmaXg+XHR7JTMsIDxyb3Vu ZF9zYWVvbmx5X3NjYWxhcl9tYXNrX29wND4lMiwgJTEsICUwPG1hc2tfc2NhbGFyX29wZXJhbmQ0 PnwlMDxtYXNrX3NjYWxhcl9vcGVyYW5kND4sICUxLCAlPGlwdHI+Mjxyb3VuZF9zYWVvbmx5X3Nj YWxhcl9tYXNrX29wND4sICUzfSI7Cit7CisgIGlmIChUQVJHRVRfREVTVF9GQUxTRV9ERVBfRk9S X0dMQworICAgICAgJiYgPG1hc2tfc2NhbGFyNF9kZXN0X2ZhbHNlX2RlcF9mb3JfZ2xjX2NvbmQ+ CisgICAgICAmJiAhcmVnX21lbnRpb25lZF9wIChvcGVyYW5kc1swXSwgb3BlcmFuZHNbMV0pCisg ICAgICAmJiAhcmVnX21lbnRpb25lZF9wIChvcGVyYW5kc1swXSwgb3BlcmFuZHNbMl0pKQorICAg IG91dHB1dF9hc21faW5zbiAoInZ4b3Jwc1x0eyV4MCwgJXgwLCAleDB9Iiwgb3BlcmFuZHMpOwor ICByZXR1cm4gInZnZXRtYW50PHNzZXNjYWxhcm1vZGVzdWZmaXg+XHR7JTMsIDxyb3VuZF9zYWVv bmx5X3NjYWxhcl9tYXNrX29wND4lMiwgJTEsICUwPG1hc2tfc2NhbGFyX29wZXJhbmQ0PnwlMDxt YXNrX3NjYWxhcl9vcGVyYW5kND4sICUxLCAlPGlwdHI+Mjxyb3VuZF9zYWVvbmx5X3NjYWxhcl9t YXNrX29wND4sICUzfSI7Cit9CiAgICBbKHNldF9hdHRyICJwcmVmaXgiICJldmV4IikKICAgIChz ZXRfYXR0ciAibW9kZSIgIjxzc2VzY2FsYXJtb2RlPiIpXSkKIApkaWZmIC0tZ2l0IGEvZ2NjL2Nv bmZpZy9pMzg2L3N1YnN0Lm1kIGIvZ2NjL2NvbmZpZy9pMzg2L3N1YnN0Lm1kCmluZGV4IDIxZDQ0 NWNjNDZjLi5iYjg2ZjgyOTA1ZiAxMDA2NDQKLS0tIGEvZ2NjL2NvbmZpZy9pMzg2L3N1YnN0Lm1k CisrKyBiL2djYy9jb25maWcvaTM4Ni9zdWJzdC5tZApAQCAtNzEsNiArNzEsMTEgQEAgKGRlZmlu ZV9zdWJzdF9hdHRyICJiY3N0X21hc2tfcHJlZml4MyIgIm1hc2siICJvcmlnLG1heWJlX2V2ZXgi ICJldmV4LGV2ZXgiKQogKGRlZmluZV9zdWJzdF9hdHRyICJtYXNrX3ByZWZpeDQiICJtYXNrIiAi b3JpZyxvcmlnLHZleCIgImV2ZXgsZXZleCxldmV4IikKIChkZWZpbmVfc3Vic3RfYXR0ciAiYmNz dF9tYXNrX3ByZWZpeDQiICJtYXNrIiAib3JpZyxvcmlnLG1heWJlX2V2ZXgiICJldmV4LGV2ZXgs ZXZleCIpCiAoZGVmaW5lX3N1YnN0X2F0dHIgIm1hc2tfZXhwYW5kX29wMyIgIm1hc2siICIzIiAi NSIpCisoZGVmaW5lX3N1YnN0X2F0dHIgIm1hc2szX2Rlc3RfZmFsc2VfZGVwX2Zvcl9nbGNfY29u ZCIgIm1hc2siICIxIiAib3BlcmFuZHNbM10gPT0gQ09OU1QwX1JUWCg8TU9ERT5tb2RlKSIpCiso ZGVmaW5lX3N1YnN0X2F0dHIgIm1hc2s0X2Rlc3RfZmFsc2VfZGVwX2Zvcl9nbGNfY29uZCIgIm1h c2siICIxIiAib3BlcmFuZHNbNF0gPT0gQ09OU1QwX1JUWCg8TU9ERT5tb2RlKSIpCisoZGVmaW5l X3N1YnN0X2F0dHIgIm1hc2s2X2Rlc3RfZmFsc2VfZGVwX2Zvcl9nbGNfY29uZCIgIm1hc2siICIx IiAib3BlcmFuZHNbNl0gPT0gQ09OU1QwX1JUWCg8TU9ERT5tb2RlKSIpCisoZGVmaW5lX3N1YnN0 X2F0dHIgIm1hc2sxMF9kZXN0X2ZhbHNlX2RlcF9mb3JfZ2xjX2NvbmQiICJtYXNrIiAiMSIgIm9w ZXJhbmRzWzEwXSA9PSBDT05TVDBfUlRYKDxNT0RFPm1vZGUpIikKKyhkZWZpbmVfc3Vic3RfYXR0 ciAibWFza2NfZGVzdF9mYWxzZV9kZXBfZm9yX2dsY19jb25kIiAibWFza2MiICIxIiAib3BlcmFu ZHNbM10gPT0gQ09OU1QwX1JUWCg8TU9ERT5tb2RlKSIpCiAKIChkZWZpbmVfc3Vic3QgIm1hc2si CiAgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNVQlNUX1YgMCkKQEAgLTMzNyw2ICszNDIsOCBAQCAo ZGVmaW5lX3N1YnN0X2F0dHIgIm1hc2tfc2NhbGFyY19vcGVyYW5kMyIgIm1hc2tfc2NhbGFyYyIg IiIgIiV7JTQlfSVOMyIpCiAoZGVmaW5lX3N1YnN0X2F0dHIgIm1hc2tfc2NhbGFyX29wZXJhbmQz IiAibWFza19zY2FsYXIiICIiICIleyU0JX0lTjMiKQogKGRlZmluZV9zdWJzdF9hdHRyICJtYXNr X3NjYWxhcl9vcGVyYW5kNCIgIm1hc2tfc2NhbGFyIiAiIiAiJXslNSV9JU40IikKIChkZWZpbmVf c3Vic3RfYXR0ciAibWFza19zY2FsYXJjel9vcGVyYW5kNCIgIm1hc2tfc2NhbGFyY3oiICIiICIl eyU1JX0lTjQiKQorKGRlZmluZV9zdWJzdF9hdHRyICJtYXNrX3NjYWxhcjRfZGVzdF9mYWxzZV9k ZXBfZm9yX2dsY19jb25kIiAibWFza19zY2FsYXIiICIxIiAib3BlcmFuZHNbNF0gPT0gQ09OU1Qw X1JUWCg8TU9ERT5tb2RlKSIpCisoZGVmaW5lX3N1YnN0X2F0dHIgIm1hc2tfc2NhbGFyY19kZXN0 X2ZhbHNlX2RlcF9mb3JfZ2xjX2NvbmQiICJtYXNrX3NjYWxhcmMiICIxIiAib3BlcmFuZHNbM10g PT0gQ09OU1QwX1JUWChWOEhGbW9kZSkiKQogCiAoZGVmaW5lX3N1YnN0ICJtYXNrX3NjYWxhciIK ICAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U1VCU1RfViAwKQpkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZp Zy9pMzg2L3g4Ni10dW5lLmRlZiBiL2djYy9jb25maWcvaTM4Ni94ODYtdHVuZS5kZWYKaW5kZXgg MGQzZmQwNzgwNjguLmY5ZWIzYzIyN2MxIDEwMDY0NAotLS0gYS9nY2MvY29uZmlnL2kzODYveDg2 LXR1bmUuZGVmCisrKyBiL2djYy9jb25maWcvaTM4Ni94ODYtdHVuZS5kZWYKQEAgLTc5LDYgKzc5 LDEyIEBAIERFRl9UVU5FIChYODZfVFVORV9TU0VfUEFSVElBTF9SRUdfQ09OVkVSVFNfREVQRU5E RU5DWSwKIAkgIG1fUFBSTyB8IG1fUDRfTk9DT05BIHwgbV9DT1JFX0FMTCB8IG1fQk9OTkVMTCB8 IG1fQU1ERkFNMTAKIAkgIHwgbV9CRFZFUiB8IG1fWk5WRVIgfCBtX0FMREVSTEFLRSB8IG1fR0VO RVJJQykKIAorLyogWDg2X1RVTkVfREVTVF9GQUxTRV9ERVBfRk9SX0dMQzogVGhpcyBrbm9iIGlu c2VydHMgemVyby1pZGlvbSBiZWZvcmUKKyAgIHNldmVyYWwgaW5zbnMgdG8gYnJlYWsgZmFsc2Ug ZGVwZW5kZW5jeSBvbiB0aGUgZGVzdCByZWdpc3RlciBmb3IgR0xDCisgICBtaWNyby1hcmNoaXRl Y3R1cmUuICAqLworREVGX1RVTkUgKFg4Nl9UVU5FX0RFU1RfRkFMU0VfREVQX0ZPUl9HTEMsCisJ ICAiZGVzdF9mYWxzZV9kZXBfZm9yX2dsYyIsIG1fU0FQUEhJUkVSQVBJRFMgfCBtX0FMREVSTEFL RSkKKwogLyogWDg2X1RVTkVfU1NFX1NQTElUX1JFR1M6IFNldCBmb3IgbWFjaGluZXMgd2hlcmUg dGhlIHR5cGUgYW5kIGRlcGVuZGVuY2llcwogICAgYXJlIHJlc29sdmVkIG9uIFNTRSByZWdpc3Rl ciBwYXJ0cyBpbnN0ZWFkIG9mIHdob2xlIHJlZ2lzdGVycywgc28gd2UgbWF5CiAgICBtYWludGFp biBqdXN0IGxvd2VyIHBhcnQgb2Ygc2NhbGFyIHZhbHVlcyBpbiBwcm9wZXIgZm9ybWF0IGxlYXZp bmcgdGhlCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9hdngyLWRl c3QtZmFsc2UtZGVwLWZvci1nbGMuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2F2 eDItZGVzdC1mYWxzZS1kZXAtZm9yLWdsYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwMDAwLi5lODUxYjJjYjQ0OQotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUv Z2NjLnRhcmdldC9pMzg2L2F2eDItZGVzdC1mYWxzZS1kZXAtZm9yLWdsYy5jCkBAIC0wLDAgKzEs MjQgQEAKKy8qIHsgZGctZG8gY29tcGlsZSB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1tYXZ4MiAt bXR1bmUtY3RybD1kZXN0X2ZhbHNlX2RlcF9mb3JfZ2xjIC1PMiIgfSAqLworCisKKyNpbmNsdWRl IDxpbW1pbnRyaW4uaD4KKworZXh0ZXJuIF9fbTI1NmkgaTEsIGkyLCBpMywgaTQ7CitleHRlcm4g X19tMjU2ZCBkMSwgZDI7CitleHRlcm4gX19tMjU2IGYxLCBmMjsKKwordm9pZCB2cGVybV90ZXN0 ICh2b2lkKQoreworICBpMyA9IF9tbTI1Nl9wZXJtdXRldmFyOHgzMl9lcGkzMiAoaTEsIGkyKTsK KyAgaTQgPSBfbW0yNTZfcGVybXV0ZTR4NjRfZXBpNjQgKGkxLCAxMik7CisgIGQyID0gX21tMjU2 X3Blcm11dGU0eDY0X3BkIChkMSwgMTIpOworICBmMiA9IF9tbTI1Nl9wZXJtdXRldmFyOHgzMl9w cyAoZjEsIGkyKTsKK30KKworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzICJ2 eG9ycHMiIDQgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMgInZw ZXJtZCIgMSB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyAidnBl cm1xIiAxIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzICJ2cGVy bXBkIiAxIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzICJ2cGVy bXBzIiAxIH0gfSAqLworCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4 Ni9hdng1MTJkcS1kZXN0LWZhbHNlLWRlcC1mb3ItZ2xjLmMgYi9nY2MvdGVzdHN1aXRlL2djYy50 YXJnZXQvaTM4Ni9hdng1MTJkcS1kZXN0LWZhbHNlLWRlcC1mb3ItZ2xjLmMKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjVjZjI2NjI5NTViCi0tLSAvZGV2L251bGwKKysr IGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvYXZ4NTEyZHEtZGVzdC1mYWxzZS1kZXAt Zm9yLWdsYy5jCkBAIC0wLDAgKzEsNzMgQEAKKy8qIHsgZGctZG8gY29tcGlsZSB9ICovCisvKiB7 IGRnLW9wdGlvbnMgIi1tYXZ4NTEyZHEgLW1hdng1MTJ2bCAtbXR1bmUtY3RybD1kZXN0X2ZhbHNl X2RlcF9mb3JfZ2xjIC1PMiIgfSAqLworCisjaW5jbHVkZSA8aW1taW50cmluLmg+CisKK2V4dGVy biBfX201MTJpIGkxOworZXh0ZXJuIF9fbTI1NmkgaTI7CitleHRlcm4gX19tMTI4aSBpMzsKK2V4 dGVybiBfX201MTJkIGQxLCBkMTE7CitleHRlcm4gX19tMjU2ZCBkMjsKK2V4dGVybiBfX20xMjhk IGQzLCBkMzM7CitleHRlcm4gX19tNTEyIGYxLCBmMTE7CitleHRlcm4gX19tMjU2IGYyOworZXh0 ZXJuIF9fbTEyOCBmMywgZjMzOworCitfX21tYXNrMzIgbTMyOworX19tbWFzazE2IG0xNjsKK19f bW1hc2s4IG04OworCit2b2lkIG11bGxvX3Rlc3QgKHZvaWQpCit7CisgIGkxID0gX21tNTEyX211 bGxvX2VwaTY0IChpMSwgaTEpOworICBpMSA9IF9tbTUxMl9tYXNrX211bGxvX2VwaTY0IChpMSwg bTgsIGkxLCBpMSk7CisgIGkxID0gX21tNTEyX21hc2t6X211bGxvX2VwaTY0IChtOCwgaTEsIGkx KTsKKyAgaTIgPSBfbW0yNTZfbXVsbG9fZXBpNjQgKGkyLCBpMik7CisgIGkyID0gX21tMjU2X21h c2tfbXVsbG9fZXBpNjQgKGkyLCBtOCwgaTIsIGkyKTsKKyAgaTIgPSBfbW0yNTZfbWFza3pfbXVs bG9fZXBpNjQgKG04LCBpMiwgaTIpOworICBpMyA9IF9tbV9tdWxsb19lcGk2NCAoaTMsIGkzKTsK KyAgaTMgPSBfbW1fbWFza19tdWxsb19lcGk2NCAoaTMsIG04LCBpMywgaTMpOworICBpMyA9IF9t bV9tYXNrel9tdWxsb19lcGk2NCAobTgsIGkzLCBpMyk7Cit9CisKK3ZvaWQgcmFuZ2VfdGVzdCAo dm9pZCkKK3sKKyAgZDEgPSBfbW01MTJfcmFuZ2VfcGQgKGQxLCBkMTEsIDE1KTsKKyAgZDExID0g X21tNTEyX3JhbmdlX3JvdW5kX3BkIChkMTEsIGQxLCAxNSwgOCk7CisgIGQxID0gX21tNTEyX21h c2tfcmFuZ2VfcGQgKGQxLCBtOCwgZDExLCBkMTEsIDE1KTsKKyAgZDExID0gX21tNTEyX21hc2tf cmFuZ2Vfcm91bmRfcGQgKGQxMSwgbTgsIGQxLCBkMSwgMTUsIDgpOworICBkMSA9IF9tbTUxMl9t YXNrel9yYW5nZV9wZCAobTgsIGQxMSwgZDExLCAxNSk7CisgIGQxMSA9IF9tbTUxMl9tYXNrel9y YW5nZV9yb3VuZF9wZCAobTgsIGQxLCBkMSwgMTUsIDgpOworICBkMiA9IF9tbTI1Nl9yYW5nZV9w ZCAoZDIsIGQyLCAxNSk7CisgIGQyID0gX21tMjU2X21hc2tfcmFuZ2VfcGQgKGQyLCBtOCwgZDIs IGQyLCAxNSk7CisgIGQyID0gX21tMjU2X21hc2t6X3JhbmdlX3BkIChtOCwgZDIsIGQyLCAxNSk7 CisgIGQzID0gX21tX3JhbmdlX3BkIChkMywgZDMsIDE1KTsKKyAgZDMgPSBfbW1fbWFza19yYW5n ZV9wZCAoZDMsIG04LCBkMywgZDMsIDE1KTsKKyAgZDMgPSBfbW1fbWFza3pfcmFuZ2VfcGQgKG04 LCBkMywgZDMsIDE1KTsKKyAgZDMzID0gX21tX3JhbmdlX3NkIChkMzMsIGQzMywgMTUpOworICBk MzMgPSBfbW1fbWFza19yYW5nZV9zZCAoZDMzLCBtOCwgZDMzLCBkMzMsIDE1KTsKKyAgZDMzID0g X21tX21hc2t6X3JhbmdlX3NkIChtOCwgZDMzLCBkMzMsIDE1KTsKKworICBmMSA9IF9tbTUxMl9y YW5nZV9wcyAoZjEsIGYxMSwgMTUpOworICBmMTEgPSBfbW01MTJfcmFuZ2Vfcm91bmRfcHMgKGYx MSwgZjEsIDE1LCA4KTsKKyAgZjEgPSBfbW01MTJfbWFza19yYW5nZV9wcyAoZjEsIG0xNiwgZjEx LCBmMTEsIDE1KTsKKyAgZjExID0gX21tNTEyX21hc2tfcmFuZ2Vfcm91bmRfcHMgKGYxMSwgbTE2 LCBmMSwgZjEsIDE1LCA4KTsKKyAgZjEgPSBfbW01MTJfbWFza3pfcmFuZ2VfcHMgKG0xNiwgZjEx LCBmMTEsIDE1KTsKKyAgZjExID0gX21tNTEyX21hc2t6X3JhbmdlX3JvdW5kX3BzIChtMTYsIGYx LCBmMSwgMTUsIDgpOworICBmMiA9IF9tbTI1Nl9yYW5nZV9wcyAoZjIsIGYyLCAxNSk7CisgIGYy ID0gX21tMjU2X21hc2tfcmFuZ2VfcHMgKGYyLCBtOCwgZjIsIGYyLCAxNSk7CisgIGYyID0gX21t MjU2X21hc2t6X3JhbmdlX3BzIChtOCwgZjIsIGYyLCAxNSk7CisgIGYzID0gX21tX3JhbmdlX3Bz IChmMywgZjMsIDE1KTsKKyAgZjMgPSBfbW1fbWFza19yYW5nZV9wcyAoZjMsIG04LCBmMywgZjMs IDE1KTsKKyAgZjMgPSBfbW1fbWFza3pfcmFuZ2VfcHMgKG04LCBmMywgZjMsIDE1KTsKKyAgZjMz ID0gX21tX3JhbmdlX3NzIChmMzMsIGYzMywgMTUpOworICBmMzMgPSBfbW1fbWFza19yYW5nZV9z cyAoZjMzLCBtOCwgZjMzLCBmMzMsIDE1KTsKKyAgZjMzID0gX21tX21hc2t6X3JhbmdlX3NzICht OCwgZjMzLCBmMzMsIDE1KTsKK30KKworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRp bWVzICJ2eG9ycHMiIDI2IH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRp bWVzICJ2cG11bGxxIiA5IH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRp bWVzICJ2cmFuZ2VwZCIgMTIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIt dGltZXMgInZyYW5nZXNkIiAzIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVy LXRpbWVzICJ2cmFuZ2VwcyIgMTIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJs ZXItdGltZXMgInZyYW5nZXNzIiAzIH0gfSAqLwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9n Y2MudGFyZ2V0L2kzODYvYXZ4NTEyZi1kZXN0LWZhbHNlLWRlcC1mb3ItZ2xjLmMgYi9nY2MvdGVz dHN1aXRlL2djYy50YXJnZXQvaTM4Ni9hdng1MTJmLWRlc3QtZmFsc2UtZGVwLWZvci1nbGMuYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMTJiYWM0OGUzNzUKLS0tIC9k ZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9hdng1MTJmLWRlc3Qt ZmFsc2UtZGVwLWZvci1nbGMuYwpAQCAtMCwwICsxLDEwMyBAQAorLyogeyBkZy1kbyBjb21waWxl IH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLW1hdng1MTJmIC1tdHVuZS1jdHJsPWRlc3RfZmFsc2Vf ZGVwX2Zvcl9nbGMgLU8yIiB9ICovCisKKyNpbmNsdWRlIDxpbW1pbnRyaW4uaD4KKworZXh0ZXJu IF9fbTUxMmkgaTEsIGkyLCBpMzsKK2V4dGVybiBfX201MTJkIGQxLCBkMTEsICpwZDE7CitleHRl cm4gX19tMTI4ZCBkMjsKK2V4dGVybiBfX201MTIgZjEsICpwZjE7CitleHRlcm4gX19tMTI4IGYy Owordm9sYXRpbGUgX19tNTEyZCAqcGQxMTsKKworX19tbWFzazE2IG0xNjsKK19fbW1hc2s4IG04 OworCit2b2lkIHZwZXJtX3Rlc3QgKHZvaWQpCit7CisgIGQxID0gX21tNTEyX3Blcm11dGV4X3Bk IChkMSwgMTIpOworICBkMSA9IF9tbTUxMl9tYXNrX3Blcm11dGV4X3BkIChkMSwgbTgsIGQxLCAx Myk7CisgIGQxID0gX21tNTEyX21hc2t6X3Blcm11dGV4X3BkIChtOCwgZDEsIDE0KTsKKyAgZDEx ID0gX21tNTEyX3Blcm11dGV4dmFyX3BkIChpMSwgZDExKTsKKyAgZDExID0gX21tNTEyX21hc2tf cGVybXV0ZXh2YXJfcGQgKGQxMSwgbTgsIGkyLCBkMTEpOworICBkMTEgPSBfbW01MTJfbWFza3pf cGVybXV0ZXh2YXJfcGQgKG04LCBpMywgZDExKTsKKworICBmMSA9IF9tbTUxMl9wZXJtdXRleHZh cl9wcyAoaTEsIGYxKTsKKyAgZjEgPSBfbW01MTJfbWFza19wZXJtdXRleHZhcl9wcyAoZjEsIG0x NiwgaTEsIGYxKTsKKyAgZjEgPSBfbW01MTJfbWFza3pfcGVybXV0ZXh2YXJfcHMgKG0xNiwgaTEs IGYxKTsKKworICBpMyA9IF9tbTUxMl9wZXJtdXRleHZhcl9lcGk2NCAoaTMsIGkzKTsKKyAgaTMg PSBfbW01MTJfbWFza19wZXJtdXRleHZhcl9lcGk2NCAoaTMsIG04LCBpMSwgaTEpOworICBpMyA9 IF9tbTUxMl9tYXNrel9wZXJtdXRleHZhcl9lcGk2NCAobTgsIGkzLCBpMSk7CisgIGkxID0gX21t NTEyX3Blcm11dGV4X2VwaTY0IChpMywgMTIpOworICBpMSA9IF9tbTUxMl9tYXNrX3Blcm11dGV4 X2VwaTY0IChpMSwgbTgsIGkxLCAxMik7CisgIGkxID0gX21tNTEyX21hc2t6X3Blcm11dGV4X2Vw aTY0IChtOCwgaTEsIDEyKTsKKworICBpMiA9IF9tbTUxMl9wZXJtdXRleHZhcl9lcGkzMiAoaTIs IGkyKTsKKyAgaTIgPSBfbW01MTJfbWFza19wZXJtdXRleHZhcl9lcGkzMiAoaTIsIG0xNiwgaTIs IGkyKTsKKyAgaTMgPSBfbW01MTJfbWFza3pfcGVybXV0ZXh2YXJfZXBpMzIgKG0xNiwgaTMsIGkz KTsKK30gCisKK3ZvaWQgZ2V0bWFudF90ZXN0ICh2b2lkKQoreworICBkMSA9IF9tbTUxMl9nZXRt YW50X3BkICgqcGQxLCBfTU1fTUFOVF9OT1JNX3A3NV8xcDUsCisJCQkgIF9NTV9NQU5UX1NJR05f c3JjKTsKKyAgZDEgPSBfbW01MTJfZ2V0bWFudF9yb3VuZF9wZCAoKnBkMTEsIF9NTV9NQU5UX05P Uk1fcDc1XzFwNSwKKwkJCQlfTU1fTUFOVF9TSUdOX3NyYywgOCk7CisgIGQxID0gX21tNTEyX21h c2tfZ2V0bWFudF9wZCAoZDEsIG04LCAqcGQxLCBfTU1fTUFOVF9OT1JNX3A3NV8xcDUsCisJCQkg ICAgICAgX01NX01BTlRfU0lHTl9zcmMpOworICBkMSA9IF9tbTUxMl9tYXNrX2dldG1hbnRfcm91 bmRfcGQgKGQxLCBtOCwgKnBkMSwgX01NX01BTlRfTk9STV9wNzVfMXA1LAorCQkJCSAgICAgX01N X01BTlRfU0lHTl9zcmMsIDgpOworICBkMSA9IF9tbTUxMl9tYXNrel9nZXRtYW50X3BkIChtOCwg KnBkMSwgX01NX01BTlRfTk9STV9wNzVfMXA1LAorCQkJCV9NTV9NQU5UX1NJR05fc3JjKTsKKyAg ZDEgPSBfbW01MTJfbWFza3pfZ2V0bWFudF9yb3VuZF9wZCAobTgsICpwZDEsIF9NTV9NQU5UX05P Uk1fcDc1XzFwNSwKKwkJCQkgICAgICBfTU1fTUFOVF9TSUdOX3NyYywgOCk7CisgIGYxID0gX21t NTEyX2dldG1hbnRfcHMgKCpwZjEsIF9NTV9NQU5UX05PUk1fcDc1XzFwNSwKKwkJCSAgX01NX01B TlRfU0lHTl9zcmMpOworICBmMSA9IF9tbTUxMl9nZXRtYW50X3JvdW5kX3BzICgqcGYxLCBfTU1f TUFOVF9OT1JNX3A3NV8xcDUsCisJCQkJX01NX01BTlRfU0lHTl9zcmMsIDgpOworICBmMSA9IF9t bTUxMl9tYXNrX2dldG1hbnRfcHMgKGYxLCBtMTYsICpwZjEsIF9NTV9NQU5UX05PUk1fcDc1XzFw NSwKKwkJCSAgICAgICBfTU1fTUFOVF9TSUdOX3NyYyk7CisgIGYxID0gX21tNTEyX21hc2tfZ2V0 bWFudF9yb3VuZF9wcyAoZjEsIG0xNiwgKnBmMSwgX01NX01BTlRfTk9STV9wNzVfMXA1LAorCQkJ CSAgICAgX01NX01BTlRfU0lHTl9zcmMsIDgpOworICBmMSA9IF9tbTUxMl9tYXNrel9nZXRtYW50 X3BzIChtMTYsICpwZjEsIF9NTV9NQU5UX05PUk1fcDc1XzFwNSwKKwkJCQlfTU1fTUFOVF9TSUdO X3NyYyk7CisgIGYxID0gX21tNTEyX21hc2t6X2dldG1hbnRfcm91bmRfcHMgKG0xNiwgKnBmMSwg X01NX01BTlRfTk9STV9wNzVfMXA1LAorCQkJCSAgICAgIF9NTV9NQU5UX1NJR05fc3JjLCA4KTsK KworICBkMiA9IF9tbV9nZXRtYW50X3NkIChkMiwgZDIsIF9NTV9NQU5UX05PUk1fcDc1XzFwNSwK KwkJICAgICAgIF9NTV9NQU5UX1NJR05fc3JjKTsKKyAgZDIgPSBfbW1fZ2V0bWFudF9yb3VuZF9z ZCAoZDIsIGQyLCBfTU1fTUFOVF9OT1JNX3A3NV8xcDUsCisJCQkgICAgIF9NTV9NQU5UX1NJR05f c3JjLCA4KTsKKyAgZDIgPSBfbW1fbWFza19nZXRtYW50X3NkIChkMiwgbTgsIGQyLCBkMiwgX01N X01BTlRfTk9STV9wNzVfMXA1LAorCQkJICAgIF9NTV9NQU5UX1NJR05fc3JjKTsKKyAgZDIgPSBf bW1fbWFza19nZXRtYW50X3JvdW5kX3NkIChkMiwgbTgsIGQyLCBkMiwgX01NX01BTlRfTk9STV9w NzVfMXA1LAorCQkJCSAgX01NX01BTlRfU0lHTl9zcmMsIDgpOworICBkMiA9IF9tbV9tYXNrel9n ZXRtYW50X3NkIChtOCwgZDIsIGQyLCBfTU1fTUFOVF9OT1JNX3A3NV8xcDUsCisJCQkgICAgIF9N TV9NQU5UX1NJR05fc3JjKTsKKyAgZDIgPSBfbW1fbWFza3pfZ2V0bWFudF9yb3VuZF9zZCAobTgs IGQyLCBkMiwgX01NX01BTlRfTk9STV9wNzVfMXA1LAorCQkJCSAgIF9NTV9NQU5UX1NJR05fc3Jj LCA4KTsKKyAgZjIgPSBfbW1fZ2V0bWFudF9zcyAoZjIsIGYyLCBfTU1fTUFOVF9OT1JNX3A3NV8x cDUsCisJCSAgICAgICBfTU1fTUFOVF9TSUdOX3NyYyk7CisgIGYyID0gX21tX2dldG1hbnRfcm91 bmRfc3MgKGYyLCBmMiwgX01NX01BTlRfTk9STV9wNzVfMXA1LAorCQkJICAgICBfTU1fTUFOVF9T SUdOX3NyYywgOCk7CisgIGYyID0gX21tX21hc2tfZ2V0bWFudF9zcyAoZjIsIG04LCBmMiwgZjIs IF9NTV9NQU5UX05PUk1fcDc1XzFwNSwKKwkJCSAgICBfTU1fTUFOVF9TSUdOX3NyYyk7CisgIGYy ID0gX21tX21hc2tfZ2V0bWFudF9yb3VuZF9zcyAoZjIsIG04LCBmMiwgZjIsIF9NTV9NQU5UX05P Uk1fcDc1XzFwNSwKKwkJCQkgIF9NTV9NQU5UX1NJR05fc3JjLCA4KTsKKyAgZjIgPSBfbW1fbWFz a3pfZ2V0bWFudF9zcyAobTgsIGYyLCBmMiwgX01NX01BTlRfTk9STV9wNzVfMXA1LAorCQkJICAg ICBfTU1fTUFOVF9TSUdOX3NyYyk7CisgIGYyID0gX21tX21hc2t6X2dldG1hbnRfcm91bmRfc3Mg KG04LCBmMiwgZjIsIF9NTV9NQU5UX05PUk1fcDc1XzFwNSwKKwkJCQkgICBfTU1fTUFOVF9TSUdO X3NyYywgOCk7CisKK30KKworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzICJ2 eG9ycHMiIDIyIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzICJ2 cGVybWQiIDMgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMgInZw ZXJtcSIgNiB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyAidnBl cm1wcyIgMyB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyAidnBl cm1wZCIgNiB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyAidmdl dG1hbnRwZCIgNiB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyAi dmdldG1hbnRwcyIgNiB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1l cyAidmdldG1hbnRzZCIgNiB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10 aW1lcyAidmdldG1hbnRzcyIgNiB9IH0gKi8KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2Nj LnRhcmdldC9pMzg2L2F2eDUxMmZwMTYtZGVzdC1mYWxzZS1kZXAtZm9yLWdsYy5jIGIvZ2NjL3Rl c3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvYXZ4NTEyZnAxNi1kZXN0LWZhbHNlLWRlcC1mb3ItZ2xj LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmY5ZWM0ZmU2ZWZlCi0t LSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvYXZ4NTEyZnAx Ni1kZXN0LWZhbHNlLWRlcC1mb3ItZ2xjLmMKQEAgLTAsMCArMSw0NSBAQAorLyogeyBkZy1kbyBj b21waWxlIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLW1hdng1MTJmcDE2IC1tYXZ4NTEydmwgLW10 dW5lLWN0cmw9ZGVzdF9mYWxzZV9kZXBfZm9yX2dsYyAtTzIiIH0gKi8KKworI2luY2x1ZGUgPGlt bWludHJpbi5oPgorCitleHRlcm4gX19tNTEyaCBoMTsKK2V4dGVybiBfX20yNTZoIGgyOworZXh0 ZXJuIF9fbTEyOGggaDM7CisKK19fbW1hc2szMiBtMzI7CitfX21tYXNrMTYgbTE2OworX19tbWFz azggbTg7CisKK3ZvaWQgY29tcGxleF9tdWxfdGVzdCAodm9pZCkKK3sKKyAgaDEgPSBfbW01MTJf Zm11bF9wY2ggKGgxLCBoMSk7CisgIGgxID0gX21tNTEyX2ZtdWxfcm91bmRfcGNoIChoMSwgaDEs IDgpOworICBoMSA9IF9tbTUxMl9tYXNrX2ZtdWxfcGNoIChoMSwgbTMyLCBoMSwgaDEpOworICBo MSA9IF9tbTUxMl9tYXNrX2ZtdWxfcm91bmRfcGNoIChoMSwgbTMyLCBoMSwgaDEsIDgpOworICBo MSA9IF9tbTUxMl9tYXNrel9mbXVsX3BjaCAobTMyLCBoMSwgaDEpOworICBoMSA9IF9tbTUxMl9t YXNrel9mbXVsX3JvdW5kX3BjaCAobTMyLCBoMSwgaDEsIDExKTsKKworICBoMyA9IF9tbV9mbXVs X3NjaCAoaDMsIGgzKTsKKyAgaDMgPSBfbW1fZm11bF9yb3VuZF9zY2ggKGgzLCBoMywgOCk7Cisg IGgzID0gX21tX21hc2tfZm11bF9zY2ggKGgzLCBtOCwgaDMsIGgzKTsKKyAgaDMgPSBfbW1fbWFz a19mbXVsX3JvdW5kX3NjaCAoaDMsIG04LCBoMywgaDMsIDgpOworICBoMyA9IF9tbV9tYXNrel9m bXVsX3NjaCAobTgsIGgzLCBoMyk7CisgIGgzID0gX21tX21hc2t6X2ZtdWxfcm91bmRfc2NoICht OCwgaDMsIGgzLCAxMSk7Cit9CisKK3ZvaWQgdmdldG1hbnRfdGVzdCAodm9pZCkKK3sKKyAgaDMg PSBfbW1fZ2V0bWFudF9zaCAoaDMsIGgzLCBfTU1fTUFOVF9OT1JNX3A3NV8xcDUsCisJCSAgICAg ICBfTU1fTUFOVF9TSUdOX3NyYyk7CisgIGgzID0gX21tX21hc2tfZ2V0bWFudF9zaCAoaDMsIG04 LCBoMywgaDMsIF9NTV9NQU5UX05PUk1fcDc1XzFwNSwKKwkJCSAgICBfTU1fTUFOVF9TSUdOX3Ny Yyk7CisgIGgzID0gX21tX21hc2t6X2dldG1hbnRfc2ggKG04LCBoMywgaDMsIF9NTV9NQU5UX05P Uk1fcDc1XzFwNSwKKwkJCSAgICAgX01NX01BTlRfU0lHTl9zcmMpOworfSAgICAKKworLyogeyBk Zy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzICJ2eG9ycHMiIDEwIH0gfSAqLworLyogeyBk Zy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzICJ2Zm11bGNwaCIgNiB9IH0gKi8KKy8qIHsg ZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyAidmZtdWxjc2giIDYgfSB9ICovCisvKiB7 IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMgInZnZXRtYW50c2giIDMgfSB9ICovCisK ZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2F2eDUxMmZwMTZ2bC1k ZXN0LWZhbHNlLWRlcC1mb3ItZ2xjLmMgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9h dng1MTJmcDE2dmwtZGVzdC1mYWxzZS1kZXAtZm9yLWdsYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAwLi43NzVkODhhYmUwNAotLS0gL2Rldi9udWxsCisrKyBiL2djYy90 ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2F2eDUxMmZwMTZ2bC1kZXN0LWZhbHNlLWRlcC1mb3It Z2xjLmMKQEAgLTAsMCArMSwyNCBAQAorLyogeyBkZy1kbyBjb21waWxlIH0gKi8KKy8qIHsgZGct b3B0aW9ucyAiLW1hdng1MTJmcDE2IC1tYXZ4NTEydmwgLW10dW5lLWN0cmw9ZGVzdF9mYWxzZV9k ZXBfZm9yX2dsYyAtTzIiIH0gKi8KKworI2luY2x1ZGUgPGltbWludHJpbi5oPgorCitleHRlcm4g X19tMjU2aCBoMTsKK2V4dGVybiBfX20xMjhoIGgyOworCitfX21tYXNrMTYgbTE2OworX19tbWFz azggbTg7CisKK3ZvaWQgY29tcGxleF9tdWxfdGVzdCAodm9pZCkKK3sKKyAgaDEgPSBfbW0yNTZf Zm11bF9wY2ggKGgxLCBoMSk7CisgIGgxID0gX21tMjU2X21hc2tfZm11bF9wY2ggKGgxLCBtMTYs IGgxLCBoMSk7CisgIGgxID0gX21tMjU2X21hc2t6X2ZtdWxfcGNoIChtMTYsIGgxLCBoMSk7Cisg IGgyID0gX21tX2ZtdWxfcGNoIChoMiwgaDIpOworICBoMiA9IF9tbV9tYXNrX2ZtdWxfcGNoICho MiwgbTE2LCBoMiwgaDIpOworICBoMiA9IF9tbV9tYXNrel9mbXVsX3BjaCAobTE2LCBoMiwgaDIp OworfQorCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMgInZ4b3JwcyIgNCB9 IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyAidmZtdWxjcGgiIDYg fSB9ICovCisKZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2F2eDUx MnZsLWRlc3QtZmFsc2UtZGVwLWZvci1nbGMuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9p Mzg2L2F2eDUxMnZsLWRlc3QtZmFsc2UtZGVwLWZvci1nbGMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMC4uMzkxYTRkYzVhZjgKLS0tIC9kZXYvbnVsbAorKysgYi9nY2Mv dGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9hdng1MTJ2bC1kZXN0LWZhbHNlLWRlcC1mb3ItZ2xj LmMKQEAgLTAsMCArMSw3NiBAQAorLyogeyBkZy1kbyBjb21waWxlIH0gKi8KKy8qIHsgZGctb3B0 aW9ucyAiLW1hdng1MTJmIC1tYXZ4NTEydmwgLW10dW5lLWN0cmw9ZGVzdF9mYWxzZV9kZXBfZm9y X2dsYyAtTzIiIH0gKi8KKworCisjaW5jbHVkZSA8aW1taW50cmluLmg+CisKK2V4dGVybiBfX20y NTZpIGkxLCBpMiwgaTM7CitleHRlcm4gX19tMjU2ZCBkMSwgZDExLCAqcGQxOworZXh0ZXJuIF9f bTEyOGQgZDIsICpwZDI7CitleHRlcm4gX19tMjU2IGYxLCAqcGYxOworZXh0ZXJuIF9fbTEyOCBm MiwgKnBmMjsKKworX19tbWFzazE2IG0xNjsKK19fbW1hc2s4IG04OworCit2b2lkIHZwZXJtX3Rl c3QgKHZvaWQpCit7CisgIGQxID0gX21tMjU2X3Blcm11dGV4X3BkIChkMSwgMTIpOworICBkMSA9 IF9tbTI1Nl9tYXNrX3Blcm11dGV4X3BkIChkMSwgbTgsIGQxLCAxMik7CisgIGQxID0gX21tMjU2 X21hc2t6X3Blcm11dGV4X3BkIChtOCwgZDEsIDEyKTsKKyAgZDExID0gX21tMjU2X3Blcm11dGV4 dmFyX3BkIChpMSwgZDExKTsKKyAgZDExID0gX21tMjU2X21hc2tfcGVybXV0ZXh2YXJfcGQgKGQx MSwgbTgsIGkxLCBkMTEpOworICBkMTEgPSBfbW0yNTZfbWFza3pfcGVybXV0ZXh2YXJfcGQgKG04 LCBpMSwgZDExKTsKKworICBmMSA9IF9tbTI1Nl9wZXJtdXRleHZhcl9wcyAoaTEsIGYxKTsKKyAg ZjEgPSBfbW0yNTZfbWFza19wZXJtdXRleHZhcl9wcyAoZjEsIG04LCBpMSwgZjEpOworICBmMSA9 IF9tbTI1Nl9tYXNrel9wZXJtdXRleHZhcl9wcyAobTgsIGkxLCBmMSk7CisKKyAgaTEgPSBfbW0y NTZfcGVybXV0ZXh2YXJfZXBpNjQgKGkxLCBpMSk7CisgIGkxID0gX21tMjU2X21hc2tfcGVybXV0 ZXh2YXJfZXBpNjQgKGkxLCBtOCwgaTEsIGkxKTsKKyAgaTEgPSBfbW0yNTZfbWFza3pfcGVybXV0 ZXh2YXJfZXBpNjQgKG04LCBpMSwgaTEpOworICBpMSA9IF9tbTI1Nl9wZXJtdXRleF9lcGk2NCAo aTEsIDEyKTsKKyAgaTEgPSBfbW0yNTZfbWFza19wZXJtdXRleF9lcGk2NCAoaTEsIG04LCBpMSwg MTIpOworICBpMSA9IF9tbTI1Nl9tYXNrel9wZXJtdXRleF9lcGk2NCAobTgsIGkxLCAxMik7CisK KyAgaTIgPSBfbW0yNTZfcGVybXV0ZXh2YXJfZXBpMzIgKGkyLCBpMik7CisgIGkyID0gX21tMjU2 X21hc2tfcGVybXV0ZXh2YXJfZXBpMzIgKGkyLCBtOCwgaTIsIGkyKTsKKyAgaTMgPSBfbW0yNTZf bWFza3pfcGVybXV0ZXh2YXJfZXBpMzIgKG04LCBpMywgaTMpOworfSAKKwordm9pZCBnZXRtYW50 X3Rlc3QgKHZvaWQpCit7CisgIGQxID0gX21tMjU2X2dldG1hbnRfcGQgKCpwZDEsIF9NTV9NQU5U X05PUk1fcDc1XzFwNSwKKwkJCSAgX01NX01BTlRfU0lHTl9zcmMpOworICBkMSA9IF9tbTI1Nl9t YXNrX2dldG1hbnRfcGQgKGQxLCBtOCwgKnBkMSwgX01NX01BTlRfTk9STV9wNzVfMXA1LAorCQkJ ICAgICAgIF9NTV9NQU5UX1NJR05fc3JjKTsKKyAgZDEgPSBfbW0yNTZfbWFza3pfZ2V0bWFudF9w ZCAobTgsICpwZDEsIF9NTV9NQU5UX05PUk1fcDc1XzFwNSwKKwkJCQlfTU1fTUFOVF9TSUdOX3Ny Yyk7CisgIGQyID0gX21tX2dldG1hbnRfcGQgKCpwZDIsIF9NTV9NQU5UX05PUk1fcDc1XzFwNSwK KwkJICAgICAgIF9NTV9NQU5UX1NJR05fc3JjKTsKKyAgZDIgPSBfbW1fbWFza19nZXRtYW50X3Bk IChkMiwgbTgsICpwZDIsIF9NTV9NQU5UX05PUk1fcDc1XzFwNSwKKwkJCSAgICBfTU1fTUFOVF9T SUdOX3NyYyk7CisgIGQyID0gX21tX21hc2t6X2dldG1hbnRfcGQgKG04LCAqcGQyLCBfTU1fTUFO VF9OT1JNX3A3NV8xcDUsCisJCQkgICAgIF9NTV9NQU5UX1NJR05fc3JjKTsKKyAgZjEgPSBfbW0y NTZfZ2V0bWFudF9wcyAoKnBmMSwgX01NX01BTlRfTk9STV9wNzVfMXA1LAorCQkJICBfTU1fTUFO VF9TSUdOX3NyYyk7CisgIGYxID0gX21tMjU2X21hc2tfZ2V0bWFudF9wcyAoZjEsIG04LCAqcGYx LCBfTU1fTUFOVF9OT1JNX3A3NV8xcDUsCisJCQkgICAgICAgX01NX01BTlRfU0lHTl9zcmMpOwor ICBmMSA9IF9tbTI1Nl9tYXNrel9nZXRtYW50X3BzIChtOCwgKnBmMSwgX01NX01BTlRfTk9STV9w NzVfMXA1LAorCQkJCV9NTV9NQU5UX1NJR05fc3JjKTsKKyAgZjIgPSBfbW1fZ2V0bWFudF9wcyAo KnBmMiwgX01NX01BTlRfTk9STV9wNzVfMXA1LAorCQkgICAgICAgX01NX01BTlRfU0lHTl9zcmMp OworICBmMiA9IF9tbV9tYXNrX2dldG1hbnRfcHMgKGYyLCBtOCwgKnBmMiwgX01NX01BTlRfTk9S TV9wNzVfMXA1LAorCQkJICAgIF9NTV9NQU5UX1NJR05fc3JjKTsKKyAgZjIgPSBfbW1fbWFza3pf Z2V0bWFudF9wcyAobTgsICpwZjIsIF9NTV9NQU5UX05PUk1fcDc1XzFwNSwKKwkJCSAgICAgX01N X01BTlRfU0lHTl9zcmMpOworfQorCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGlt ZXMgInZ4b3JwcyIgMTkgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGlt ZXMgInZwZXJtcGQiIDYgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGlt ZXMgInZwZXJtcHMiIDMgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGlt ZXMgInZwZXJtcSIgNiB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1l cyAidnBlcm1kIiAzIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVz ICJ2Z2V0bWFudHBkIiA2IH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRp bWVzICJ2Z2V0bWFudHBzIiA2IH0gfSAqLworCi0tIAoyLjE4LjEKCg== --0000000000004fd08105d5a191fc--