Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1qVZiA-000c4J-Pi for pgsql-hackers@arkaria.postgresql.org; Mon, 14 Aug 2023 15:42:31 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1qVZi9-005mqX-Aq for pgsql-hackers@arkaria.postgresql.org; Mon, 14 Aug 2023 15:42:29 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1qVZi8-005mqP-QQ for pgsql-hackers@lists.postgresql.org; Mon, 14 Aug 2023 15:42:29 +0000 Received: from mail-oo1-xc33.google.com ([2607:f8b0:4864:20::c33]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1qVZi6-0007LR-IC for pgsql-hackers@postgresql.org; Mon, 14 Aug 2023 15:42:28 +0000 Received: by mail-oo1-xc33.google.com with SMTP id 006d021491bc7-56cc461f34fso2869398eaf.0 for ; Mon, 14 Aug 2023 08:42:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1692027744; x=1692632544; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=fgMIqfTA+kxkpMzIUkCS+M8U8pJzRHKSDoSNAmVvGiI=; b=JAbS56T0fQFuRfcJ5ZddhPQkAJ1GL1oXcB62Agh4d1/JLxuF0vXJTt8k5X2fe98j40 ExAyhI5m0fyvHnjh8d5kRvJm/DdUs81HygdoblcMJ4Ez5R/vSRnZJknK6kus/t7XSYzG LSkFRjA238mcSntpGM6ocWU0nOXoIYMUWdDzDd5d4/Qi1yoYsCpz7lHV+e/1iIJoJq9w aBq4TFqXd1TToUfJP0DWJ+eZEcH3TS6piqC/4ni8kC5noGuPH7UXR+SqgIBcJtnPc5oG 3QTJ/5wO7HfJ+lee9BbuJ2gMRmGTaosQ+a6A3IEb3iFql6L+KLp2fBMbcO0J1Xk6yRkp 4dBA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1692027744; x=1692632544; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=fgMIqfTA+kxkpMzIUkCS+M8U8pJzRHKSDoSNAmVvGiI=; b=QG0GClSWheLWmwUe06SjP0F7PnsHZP3/1bTDJz50iJLHVyW/sHO89dhThd+3yM+ZFI n9LcsFd/RKvt20jqj9Qn62tNA9gXSeKhmmKeRtYqAp8dDfT9f9Zyv7kWM/pI99DkaWy0 Dhhh2E2HN1yz06Kj+zbfKH0iIFO7O+NcXEZRTWvLbPYQpr70oYGS0hCv/t9O7XGGZouB 8yL0lM9PeZdxBPUnagKoOed550r4vvAHoT2Qn8cTnuMiIw3qACt7U8FhERMS2oZt0xmY aEIpR2hcA5wGThIG6dWo9v0RITAOe7pCGI/sbR4pxUWYz2IGC3SEIFwZGkFkdKQE2+XT rVJg== X-Gm-Message-State: AOJu0YyEpHHLZG5UXwwzMwyM3T0O+gJzcPK5yHg+0sdmnPNQ/ZxCn4Nv a4FhIWDWTkvYyq87whqIeYDaAb/bn1OYcK+3FOw= X-Google-Smtp-Source: AGHT+IE3mbEt7k7EKkwBcoWr3C1nknNIgfAVmkPwQKG840NkVjTXzFxo/mSk9B6auVxLlkwWXgRJaUVQigurXJTjWvM= X-Received: by 2002:a4a:dfc7:0:b0:56c:8dde:bccb with SMTP id p7-20020a4adfc7000000b0056c8ddebccbmr7267038ood.9.1692027744374; Mon, 14 Aug 2023 08:42:24 -0700 (PDT) MIME-Version: 1.0 References: <3507485.1691090027@sss.pgh.pa.us> <900892914fdc3f477b101d699efb40e0@anastigmatix.net> <903341.1692022214@sss.pgh.pa.us> In-Reply-To: <903341.1692022214@sss.pgh.pa.us> From: Andy Fan Date: Mon, 14 Aug 2023 23:42:12 +0800 Message-ID: Subject: Re: Extract numeric filed in JSONB more effectively To: Tom Lane Cc: Chapman Flack , Pavel Stehule , jian he , pgsql-hackers Content-Type: multipart/mixed; boundary="000000000000a775c50602e3e852" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000a775c50602e3e852 Content-Type: multipart/alternative; boundary="000000000000a775c30602e3e850" --000000000000a775c30602e3e850 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Mon, Aug 14, 2023 at 10:10=E2=80=AFPM Tom Lane wrote= : > Chapman Flack writes: > > Providing a function with return type declared internal but > > with no parameter of that type is not good, > > Not so much "not good" as "absolutely, positively WILL NOT HAPPEN". Chap is pretty nice to others:). > > > because then a > > user could, in principle, call it and obtain a value of > > 'internal' type, and so get around the typing rules that > > prevent calling other internal functions. > > Right --- it'd completely break the system's type-safety for > other internal-using functions. > > I do see something bad in opr_sanity.sql. Pavel suggested get_fn_expr_argtype which can resolve this issue pretty well, so I have changed jsonb_extract_xx_type(.., Oid taget_oid) -> anyelement. to jsonb_extract_xx_type(.., anyelement) -> anyelement. The only bad smell left is since I want to define jsonb_extract_xx_type as strict so I can't use jsonb_extract_xx_type(.., NULL::a-type) since it will be evaluated to NULL directly. So I hacked it with /* mock the type. */ Const *target =3D makeNullConst(fexpr->funcresulttype, -1, InvalidOid); /* hack the NULL attribute */ /* * Since all the above functions are strict, we can't input * a NULL value. */ target->constisnull =3D false; jsonb_extract_xx_type just cares about the argtype, but 'explain select xx' will still access the const->constvalue. const->constvalue is 0 which is set by makeNullConst currently, and it is ok for the current supported type. but I'm not sure about the future or if we still have a better solution. v6 is attached. any feedback is welcome! --=20 Best Regards Andy Fan --000000000000a775c30602e3e850 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: base64 PGRpdiBkaXI9Imx0ciI+PGRpdiBkaXI9Imx0ciI+PGJyPjwvZGl2Pjxicj48ZGl2IGNsYXNzPSJn bWFpbF9xdW90ZSI+PGRpdiBkaXI9Imx0ciIgY2xhc3M9ImdtYWlsX2F0dHIiPk9uIE1vbiwgQXVn IDE0LCAyMDIzIGF0IDEwOjEw4oCvUE0gVG9tIExhbmUgJmx0OzxhIGhyZWY9Im1haWx0bzp0Z2xA c3NzLnBnaC5wYS51cyI+dGdsQHNzcy5wZ2gucGEudXM8L2E+Jmd0OyB3cm90ZTo8YnI+PC9kaXY+ PGJsb2NrcXVvdGUgY2xhc3M9ImdtYWlsX3F1b3RlIiBzdHlsZT0ibWFyZ2luOjBweCAwcHggMHB4 IDAuOGV4O2JvcmRlci1sZWZ0OjFweCBzb2xpZCByZ2IoMjA0LDIwNCwyMDQpO3BhZGRpbmctbGVm dDoxZXgiPkNoYXBtYW4gRmxhY2sgJmx0OzxhIGhyZWY9Im1haWx0bzpjaGFwQGFuYXN0aWdtYXRp eC5uZXQiIHRhcmdldD0iX2JsYW5rIj5jaGFwQGFuYXN0aWdtYXRpeC5uZXQ8L2E+Jmd0OyB3cml0 ZXM6PGJyPg0KJmd0OyBQcm92aWRpbmcgYSBmdW5jdGlvbiB3aXRoIHJldHVybiB0eXBlIGRlY2xh cmVkIGludGVybmFsIGJ1dDxicj4NCiZndDsgd2l0aCBubyBwYXJhbWV0ZXIgb2YgdGhhdCB0eXBl IGlzIG5vdCBnb29kLDxicj4NCjxicj4NCk5vdCBzbyBtdWNoICZxdW90O25vdCBnb29kJnF1b3Q7 IGFzICZxdW90O2Fic29sdXRlbHksIHBvc2l0aXZlbHkgV0lMTCBOT1QgSEFQUEVOJnF1b3Q7Ljwv YmxvY2txdW90ZT48ZGl2Pjxicj48L2Rpdj48ZGl2PkNoYXAgaXMgcHJldHR5IG5pY2UgdG8gb3Ro ZXJzOikuwqDCoDwvZGl2PjxkaXY+wqA8L2Rpdj48YmxvY2txdW90ZSBjbGFzcz0iZ21haWxfcXVv dGUiIHN0eWxlPSJtYXJnaW46MHB4IDBweCAwcHggMC44ZXg7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlk IHJnYigyMDQsMjA0LDIwNCk7cGFkZGluZy1sZWZ0OjFleCI+wqA8YnI+PC9ibG9ja3F1b3RlPjxi bG9ja3F1b3RlIGNsYXNzPSJnbWFpbF9xdW90ZSIgc3R5bGU9Im1hcmdpbjowcHggMHB4IDBweCAw LjhleDtib3JkZXItbGVmdDoxcHggc29saWQgcmdiKDIwNCwyMDQsMjA0KTtwYWRkaW5nLWxlZnQ6 MWV4Ij4NCiZndDsgYmVjYXVzZSB0aGVuIGE8YnI+DQomZ3Q7IHVzZXIgY291bGQsIGluIHByaW5j aXBsZSwgY2FsbCBpdCBhbmQgb2J0YWluIGEgdmFsdWUgb2Y8YnI+DQomZ3Q7ICYjMzk7aW50ZXJu YWwmIzM5OyB0eXBlLCBhbmQgc28gZ2V0IGFyb3VuZCB0aGUgdHlwaW5nIHJ1bGVzIHRoYXQ8YnI+ DQomZ3Q7IHByZXZlbnQgY2FsbGluZyBvdGhlciBpbnRlcm5hbCBmdW5jdGlvbnMuPGJyPg0KPGJy Pg0KUmlnaHQgLS0tIGl0JiMzOTtkIGNvbXBsZXRlbHkgYnJlYWsgdGhlIHN5c3RlbSYjMzk7cyB0 eXBlLXNhZmV0eSBmb3I8YnI+DQpvdGhlciBpbnRlcm5hbC11c2luZyBmdW5jdGlvbnMuPGJyPjxi cj48L2Jsb2NrcXVvdGU+PGRpdj7CoDwvZGl2PjxkaXY+SSBkbyBzZWUgc29tZXRoaW5nIGJhZCBp bsKgb3ByX3Nhbml0eS5zcWwuwqAgUGF2ZWwgc3VnZ2VzdGVkwqA8L2Rpdj48ZGl2PmdldF9mbl9l eHByX2FyZ3R5cGUgd2hpY2ggY2FuIHJlc29sdmUgdGhpcyBpc3N1ZSBwcmV0dHkgd2VsbCwgc288 L2Rpdj48ZGl2PkkgaGF2ZSBjaGFuZ2VkwqA8L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2Pmpzb25i X2V4dHJhY3RfeHhfdHlwZSguLizCoCBPaWQgdGFnZXRfb2lkKSAtJmd0OyBhbnllbGVtZW50LsKg PC9kaXY+PGRpdj50bzwvZGl2PjxkaXY+PGRpdj5qc29uYl9leHRyYWN0X3h4X3R5cGUoLi4swqAg YW55ZWxlbWVudCkgLSZndDsgYW55ZWxlbWVudC7CoDwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+ VGhlIG9ubHkgYmFkIHNtZWxsIGxlZnQgaXMgc2luY2UgSSB3YW50IHRvIGRlZmluZSBqc29uYl9l eHRyYWN0X3h4X3R5cGU8L2Rpdj48ZGl2PmFzIHN0cmljdCBzbyBJIGNhbiYjMzk7dCB1c2XCoCDC oGpzb25iX2V4dHJhY3RfeHhfdHlwZSguLiwgTlVMTDo6YS10eXBlKTwvZGl2PjxkaXY+c2luY2Ug aXQgd2lsbCBiZSBldmFsdWF0ZWQgdG8gTlVMTCBkaXJlY3RseS7CoCBTbyBJIGhhY2tlZCBpdCB3 aXRoPC9kaXY+PGRpdj48YnI+PC9kaXY+PGRpdj4vKiBtb2NrIHRoZSB0eXBlLiAqLzwvZGl2PsKg IMKgIMKgIMKgIMKgIMKgIENvbnN0IMKgICp0YXJnZXQgPSDCoG1ha2VOdWxsQ29uc3QoZmV4cHIt Jmd0O2Z1bmNyZXN1bHR0eXBlLDxicj7CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoC0xLDxicj7CoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoEludmFs aWRPaWQpOzxicj48YnI+LyogaGFjayB0aGUgTlVMTCBhdHRyaWJ1dGUgKi88YnI+wqAgwqAgwqAg wqAgwqAgwqAgLyogwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqA8YnI+ wqAgwqAgwqAgwqAgwqAgwqAgwqAqIFNpbmNlIGFsbCB0aGUgYWJvdmUgZnVuY3Rpb25zIGFyZSBz dHJpY3QsIHdlIGNhbiYjMzk7dCBpbnB1dCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoDxicj7CoCDCoCDCoCDCoCDC oCDCoCDCoCogYSBOVUxMIHZhbHVlLiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoDxicj7CoCDCoCDCoCDC oCDCoCDCoCDCoCovPGJyPsKgIMKgIMKgIMKgIMKgIMKgIHRhcmdldC0mZ3Q7Y29uc3Rpc251bGwg PSBmYWxzZTs8ZGl2Pjxicj48L2Rpdj48ZGl2PsKganNvbmJfZXh0cmFjdF94eF90eXBlIGp1c3Qg Y2FyZXMgYWJvdXQgdGhlIGFyZ3R5cGUsIGJ1dMKgPC9kaXY+PGRpdj4mIzM5O2V4cGxhaW4gc2Vs ZWN0IHh4JiMzOTvCoCB3aWxsIHN0aWxsIGFjY2VzcyB0aGUgY29uc3QtJmd0O2NvbnN0dmFsdWUu PC9kaXY+PGRpdj5jb25zdC0mZ3Q7Y29uc3R2YWx1ZSBpcyAwIHdoaWNoIGlzIHNldCBieSBtYWtl TnVsbENvbnN0IGN1cnJlbnRseSzCoDwvZGl2PjxkaXY+YW5kIGl0IGlzIG9rIGZvciB0aGUgY3Vy cmVudCBzdXBwb3J0ZWQgdHlwZS4gYnV0IEkmIzM5O20gbm90IHN1cmXCoDwvZGl2PjxkaXY+YWJv dXQgdGhlIGZ1dHVyZSBvciBpZiB3ZSBzdGlsbCBoYXZlIGEgYmV0dGVyIHNvbHV0aW9uLsKgPC9k aXY+PGRpdj48YnI+PC9kaXY+PGRpdj52NiBpcyBhdHRhY2hlZC7CoCBhbnkgZmVlZGJhY2sgaXMg d2VsY29tZSE8L2Rpdj48L2Rpdj48L2Rpdj48ZGl2Pjxicj48L2Rpdj48c3BhbiBjbGFzcz0iZ21h aWxfc2lnbmF0dXJlX3ByZWZpeCI+LS0gPC9zcGFuPjxicj48ZGl2IGRpcj0ibHRyIiBjbGFzcz0i Z21haWxfc2lnbmF0dXJlIj48ZGl2IGRpcj0ibHRyIj5CZXN0IFJlZ2FyZHM8ZGl2PkFuZHkgRmFu PC9kaXY+PC9kaXY+PC9kaXY+PC9kaXY+DQo= --000000000000a775c30602e3e850-- --000000000000a775c50602e3e852 Content-Type: application/octet-stream; name="v6-0001-optimize-casting-jsonb-to-a-given-type.patch" Content-Disposition: attachment; filename="v6-0001-optimize-casting-jsonb-to-a-given-type.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_llb1j8qg0 RnJvbSAyMTkzMWE4OGEzYTEwYTQ5ZjIwZDk2OTA1OTBmNzQ4NTgxMTY5YmYzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmR5IEZhbiA8emhpaHVpLmZhbjEyMTNAZ21haWwuY29tPgpE YXRlOiBUaHUsIDEwIEF1ZyAyMDIzIDE1OjE1OjI1ICswODAwClN1YmplY3Q6IFtQQVRDSCB2Nl0g b3B0aW1pemUgY2FzdGluZyBqc29uYiB0byBhIGdpdmVuIHR5cGUuCgpQcmV2aW91c2x5IGFmdGVy IHdlIGdldCBhIEpzb25iVmFsdWUsIHdlIG5lZWQgdG8gY29udmVydCBpdCB0bwpKc29uYiBmaXJz dCB0aGVuIGNhc3QgdGhlIEpzb25iIHRvIHRoZSBnaXZlbiB0eXBlLiBJbiB0aGlzIHBhdGNoLAp3 ZSBjb3ZlcnQgdGhlIEpzb25iVmFsdWUgdG8gdGhlIGRlc2lyZWQgdHlwZSBkaXJlY3RseS4KLS0t CiBzcmMvYmFja2VuZC91dGlscy9hZHQvanNvbmIuYyAgICAgICB8IDE4MyArKysrKysrKysrKysr KysrKysrKysrKysrKysrCiBzcmMvYmFja2VuZC91dGlscy9hZHQvanNvbmZ1bmNzLmMgICB8IDEx NCArKysrKysrKysrKy0tLS0tLQogc3JjL2luY2x1ZGUvY2F0YWxvZy9jYXR2ZXJzaW9uLmggICAg fCAgIDIgKy0KIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQgICAgIHwgIDMyICsrKy0t CiBzcmMvaW5jbHVkZS91dGlscy9qc29uYi5oICAgICAgICAgICB8ICAgMSArCiBzcmMvdGVzdC9y ZWdyZXNzL2V4cGVjdGVkL2pzb25iLm91dCB8IDE2MCArKysrKysrKysrKysrKy0tLS0tLS0tLS0K IHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2pzb25iLnNxbCAgICAgIHwgIDQzICsrKystLS0KIDcgZmls ZXMgY2hhbmdlZCwgNDA0IGluc2VydGlvbnMoKyksIDEzMSBkZWxldGlvbnMoLSkKCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbmIuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2Fk dC9qc29uYi5jCmluZGV4IDk3ODE4NTJiMGNiLi5hYTJiODMwYjY0NiAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvdXRpbHMvYWR0L2pzb25iLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pz b25iLmMKQEAgLTE3LDExICsxNywxNCBAQAogI2luY2x1ZGUgImNhdGFsb2cvcGdfcHJvYy5oIgog I2luY2x1ZGUgImNhdGFsb2cvcGdfdHlwZS5oIgogI2luY2x1ZGUgImZ1bmNhcGkuaCIKKyNpbmNs dWRlICJub2Rlcy9tYWtlZnVuY3MuaCIKKyNpbmNsdWRlICJub2Rlcy9zdXBwb3J0bm9kZXMuaCIK ICNpbmNsdWRlICJsaWJwcS9wcWZvcm1hdC5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2lu Y2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCiAjaW5jbHVkZSAidXRpbHMvZGF0ZS5oIgogI2luY2x1 ZGUgInV0aWxzL2RhdGV0aW1lLmgiCisjaW5jbHVkZSAidXRpbHMvZm1ncm9pZHMuaCIKICNpbmNs dWRlICJ1dGlscy9qc29uLmgiCiAjaW5jbHVkZSAidXRpbHMvanNvbmIuaCIKICNpbmNsdWRlICJ1 dGlscy9qc29uZnVuY3MuaCIKQEAgLTIwMzgsNiArMjA0MSwxODYgQEAgY2Fubm90Q2FzdEpzb25i VmFsdWUoZW51bSBqYnZUeXBlIHR5cGUsIGNvbnN0IGNoYXIgKnNxbHR5cGUpCiAJZWxvZyhFUlJP UiwgInVua25vd24ganNvbmIgdHlwZTogJWQiLCAoaW50KSB0eXBlKTsKIH0KIAorc3RhdGljIGJv b2wKK2pzb25iX2Nhc3RfaXNfb3B0aW1pemVkKE9pZCB0YXJnZXRfdHlwZSkKK3sKKwlzd2l0Y2go dGFyZ2V0X3R5cGUpCisJeworCQljYXNlIE5VTUVSSUNPSUQ6CisJCWNhc2UgQk9PTE9JRDoKKwkJ Y2FzZSBJTlQyT0lEOgorCQljYXNlIElOVDRPSUQ6CisJCWNhc2UgSU5UOE9JRDoKKwkJY2FzZSBG TE9BVDRPSUQ6CisJCWNhc2UgRkxPQVQ4T0lEOgorCQkJcmV0dXJuIHRydWU7CisJCWRlZmF1bHQ6 CisJCQlyZXR1cm4gZmFsc2U7CisJfQorfQorCitEYXR1bQoranNvbmJfY2FzdF9zdXBwb3J0KFBH X0ZVTkNUSU9OX0FSR1MpCit7CisJTm9kZQkgICAqcmF3cmVxID0gKE5vZGUgKikgUEdfR0VUQVJH X1BPSU5URVIoMCk7CisKKwlpZiAoSXNBKHJhd3JlcSwgU3VwcG9ydFJlcXVlc3RTaW1wbGlmeSkp CisJeworCQlTdXBwb3J0UmVxdWVzdFNpbXBsaWZ5ICpyZXEgPSAoU3VwcG9ydFJlcXVlc3RTaW1w bGlmeSAqKSByYXdyZXE7CisJCUZ1bmNFeHByCSpmZXhwciA9IHBhbGxvYyhzaXplb2YoRnVuY0V4 cHIpKTsKKwkJT3BFeHByCQkqb3BleHByOworCQlPaWQJCQluZXdfZnVuY19pZCA9IEludmFsaWRP aWQ7CisKKwkJbWVtY3B5KGZleHByLCByZXEtPmZjYWxsLCBzaXplb2YoRnVuY0V4cHIpKTsKKwor CQlvcGV4cHIgPSAoT3BFeHByICopIGxpbml0aWFsKGZleHByLT5hcmdzKTsKKworCQlpZiAoIUlz QShvcGV4cHIsIE9wRXhwcikgfHwKKwkJCSFqc29uYl9jYXN0X2lzX29wdGltaXplZChmZXhwci0+ ZnVuY3Jlc3VsdHR5cGUpKQorCQl7CisJCQkvKiBub3QgdGhlIGRlc2lyZWQgcGF0dGVybi4gKi8K KwkJCVBHX1JFVFVSTl9QT0lOVEVSKGZleHByKTsKKwkJfQorCisJCWlmIChvcGV4cHItPm9wZnVu Y2lkICA9PSBGX0pTT05CX09CSkVDVF9GSUVMRCkKKwkJCW5ld19mdW5jX2lkID0gRl9KU09OQl9P QkpFQ1RfRklFTERfVFlQRTsKKwkJZWxzZSBpZiAob3BleHByLT5vcGZ1bmNpZCA9PSBGX0pTT05C X0FSUkFZX0VMRU1FTlQpCisJCQluZXdfZnVuY19pZCA9IEZfSlNPTkJfQVJSQVlfRUxFTUVOVF9U WVBFOworCQllbHNlIGlmIChvcGV4cHItPm9wZnVuY2lkID09IEZfSlNPTkJfRVhUUkFDVF9QQVRI KQorCQkJbmV3X2Z1bmNfaWQgPSBGX0pTT05CX0VYVFJBQ1RfUEFUSF9UWVBFOworCisJCWlmIChP aWRJc1ZhbGlkKG5ld19mdW5jX2lkKSkKKwkJeworCQkJQ29uc3QJKnRhcmdldCA9ICBtYWtlTnVs bENvbnN0KGZleHByLT5mdW5jcmVzdWx0dHlwZSwKKwkJCQkJCQkJCQkJIC0xLAorCQkJCQkJCQkJ CQkgSW52YWxpZE9pZCk7CisJCQkvKgorCQkJICogU2luY2UgYWxsIHRoZSBhYm92ZSBmdW5jdGlv bnMgYXJlIHN0cmljdCwgd2UgY2FuJ3QgaW5wdXQKKwkJCSAqIGEgTlVMTCB2YWx1ZS4KKwkJCSAq LworCQkJdGFyZ2V0LT5jb25zdGlzbnVsbCA9IGZhbHNlOworCQkJZmV4cHItPmZ1bmNpZCA9IG5l d19mdW5jX2lkOworCQkJZmV4cHItPmFyZ3MgPSBvcGV4cHItPmFyZ3M7CisJCQlmZXhwci0+YXJn cyA9IGxhcHBlbmQoZmV4cHItPmFyZ3MsIHRhcmdldCk7CisJCX0KKworCQlQR19SRVRVUk5fUE9J TlRFUihmZXhwcik7CisJfQorCisJUEdfUkVUVVJOX1BPSU5URVIoTlVMTCk7Cit9CisKK0RhdHVt CitjYXN0X2pzb25idmFsdWVfdG9fdHlwZShKc29uYlZhbHVlICp2LCBPaWQgdGFyZ2V0T2lkKQor eworCXN3aXRjaCh0YXJnZXRPaWQpCisJeworCQlEYXR1bQlyZXRWYWx1ZTsKKworCQljYXNlIEJP T0xPSUQ6CisJCQlpZiAodi0+dHlwZSAhPSBqYnZCb29sKQorCQkJCWNhbm5vdENhc3RKc29uYlZh bHVlKHYtPnR5cGUsICJib29sIik7CisJCQlQR19SRVRVUk5fQk9PTCh2LT52YWwuYm9vbGVhbik7 CisKKwkJY2FzZSBOVU1FUklDT0lEOgorCQkJaWYgKHYtPnR5cGUgIT0gamJ2TnVtZXJpYykKKwkJ CQljYW5ub3RDYXN0SnNvbmJWYWx1ZSh2LT50eXBlLCAibnVtZXJpYyIpOworCQkJUEdfUkVUVVJO X05VTUVSSUModi0+dmFsLm51bWVyaWMpOworCQljYXNlIElOVDJPSUQ6CisJCQlpZiAodi0+dHlw ZSAhPSBqYnZOdW1lcmljKQorCQkJCWNhbm5vdENhc3RKc29uYlZhbHVlKHYtPnR5cGUsICJzbWFs bGludCIpOworCQkJcmV0VmFsdWUgPSBEaXJlY3RGdW5jdGlvbkNhbGwxKG51bWVyaWNfaW50MiwK KwkJCQkJCQkJCQkgICBOdW1lcmljR2V0RGF0dW0odi0+dmFsLm51bWVyaWMpKTsKKwkJCVBHX1JF VFVSTl9EQVRVTShyZXRWYWx1ZSk7CisJCWNhc2UgSU5UNE9JRDoKKwkJCWlmICh2LT50eXBlICE9 IGpidk51bWVyaWMpCisJCQkJY2Fubm90Q2FzdEpzb25iVmFsdWUodi0+dHlwZSwgImludGVnZXIi KTsKKwkJCXJldFZhbHVlID0gRGlyZWN0RnVuY3Rpb25DYWxsMShudW1lcmljX2ludDQsCisJCQkJ CQkJCQkJICAgTnVtZXJpY0dldERhdHVtKHYtPnZhbC5udW1lcmljKSk7CisJCQlQR19SRVRVUk5f REFUVU0ocmV0VmFsdWUpOworCisJCWNhc2UgSU5UOE9JRDoKKwkJCWlmICh2LT50eXBlICE9IGpi dk51bWVyaWMpCisJCQkJY2Fubm90Q2FzdEpzb25iVmFsdWUodi0+dHlwZSwgImJpZ2ludCIpOwor CQkJcmV0VmFsdWUgPSBEaXJlY3RGdW5jdGlvbkNhbGwxKG51bWVyaWNfaW50OCwKKwkJCQkJCQkJ CQkgICBOdW1lcmljR2V0RGF0dW0odi0+dmFsLm51bWVyaWMpKTsKKwkJCVBHX1JFVFVSTl9EQVRV TShyZXRWYWx1ZSk7CisKKwkJY2FzZSBGTE9BVDRPSUQ6CisJCQlpZiAodi0+dHlwZSAhPSBqYnZO dW1lcmljKQorCQkJCWNhbm5vdENhc3RKc29uYlZhbHVlKHYtPnR5cGUsICJyZWFsIik7CisJCQly ZXRWYWx1ZSA9IERpcmVjdEZ1bmN0aW9uQ2FsbDEobnVtZXJpY19mbG9hdDQsCisJCQkJCQkJCQkJ ICAgTnVtZXJpY0dldERhdHVtKHYtPnZhbC5udW1lcmljKSk7CisJCQlQR19SRVRVUk5fREFUVU0o cmV0VmFsdWUpOworCisJCWNhc2UgRkxPQVQ4T0lEOgorCQkJaWYgKHYtPnR5cGUgIT0gamJ2TnVt ZXJpYykKKwkJCQljYW5ub3RDYXN0SnNvbmJWYWx1ZSh2LT50eXBlLCAiZG91YmxlIHByZWNpc2lv biIpOworCQkJcmV0VmFsdWUgPSBEaXJlY3RGdW5jdGlvbkNhbGwxKG51bWVyaWNfZmxvYXQ4LAor CQkJCQkJCQkJCSAgIE51bWVyaWNHZXREYXR1bSh2LT52YWwubnVtZXJpYykpOworCQkJUEdfUkVU VVJOX0RBVFVNKHJldFZhbHVlKTsKKworCQlkZWZhdWx0OgorCQkJQXNzZXJ0KGZhbHNlKTsKKwkJ CWJyZWFrOworCX0KKworCVBHX1JFVFVSTl9QT0lOVEVSKE5VTEwpOworfQorCitEYXR1bQoranNv bmJfb2JqZWN0X2ZpZWxkX3R5cGUoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlKc29uYgkgICAqamIg PSBQR19HRVRBUkdfSlNPTkJfUCgwKTsKKwl0ZXh0CSAgICprZXkgPSBQR19HRVRBUkdfVEVYVF9Q UCgxKTsKKwlPaWQJCQl0YXJnZXRPaWQgPSBnZXRfZm5fZXhwcl9hcmd0eXBlKGZjaW5mby0+Zmxp bmZvLCAyKTsKKworCUpzb25iVmFsdWUgKnY7CisJSnNvbmJWYWx1ZQl2YnVmOworCisJaWYgKCFK Ql9ST09UX0lTX09CSkVDVChqYikpCisJCVBHX1JFVFVSTl9OVUxMKCk7CisKKwl2ID0gZ2V0S2V5 SnNvblZhbHVlRnJvbUNvbnRhaW5lcigmamItPnJvb3QsCisJCQkJCQkJCQkgVkFSREFUQV9BTlko a2V5KSwKKwkJCQkJCQkJCSBWQVJTSVpFX0FOWV9FWEhEUihrZXkpLAorCQkJCQkJCQkJICZ2YnVm KTsKKworCWlmICh2ID09IE5VTEwpCisJCVBHX1JFVFVSTl9OVUxMKCk7CisKKwlyZXR1cm4gY2Fz dF9qc29uYnZhbHVlX3RvX3R5cGUodiwgdGFyZ2V0T2lkKTsKK30KKworRGF0dW0KK2pzb25iX2Fy cmF5X2VsZW1lbnRfdHlwZShQR19GVU5DVElPTl9BUkdTKQoreworCUpzb25iCSAgICpqYiA9IFBH X0dFVEFSR19KU09OQl9QKDApOworCWludAkJCWVsZW1lbnQgPSBQR19HRVRBUkdfSU5UMzIoMSk7 CisJT2lkCQkJdGFyZ2V0T2lkID0gZ2V0X2ZuX2V4cHJfYXJndHlwZShmY2luZm8tPmZsaW5mbywg Mik7CisJSnNvbmJWYWx1ZSAqdjsKKworCWlmICghSkJfUk9PVF9JU19BUlJBWShqYikpCisJCVBH X1JFVFVSTl9OVUxMKCk7CisKKwkvKiBIYW5kbGUgbmVnYXRpdmUgc3Vic2NyaXB0ICovCisJaWYg KGVsZW1lbnQgPCAwKQorCXsKKwkJdWludDMyCQluZWxlbWVudHMgPSBKQl9ST09UX0NPVU5UKGpi KTsKKworCQlpZiAoLWVsZW1lbnQgPiBuZWxlbWVudHMpCisJCQlQR19SRVRVUk5fTlVMTCgpOwor CQllbHNlCisJCQllbGVtZW50ICs9IG5lbGVtZW50czsKKwl9CisKKwl2ID0gZ2V0SXRoSnNvbmJW YWx1ZUZyb21Db250YWluZXIoJmpiLT5yb290LCBlbGVtZW50KTsKKwlpZiAodiA9PSBOVUxMKQor CQlQR19SRVRVUk5fTlVMTCgpOworCisJcmV0dXJuIGNhc3RfanNvbmJ2YWx1ZV90b190eXBlKHYs IHRhcmdldE9pZCk7Cit9CisKIERhdHVtCiBqc29uYl9ib29sKFBHX0ZVTkNUSU9OX0FSR1MpCiB7 CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbmZ1bmNzLmMgYi9zcmMvYmFj a2VuZC91dGlscy9hZHQvanNvbmZ1bmNzLmMKaW5kZXggYTRiZmE1ZTQwNDAuLjY4OTVmODFmYWMz IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbmZ1bmNzLmMKKysrIGIvc3Jj L2JhY2tlbmQvdXRpbHMvYWR0L2pzb25mdW5jcy5jCkBAIC00OTIsNiArNDkyLDcgQEAgc3RhdGlj IEpzb25QYXJzZUVycm9yVHlwZSB0cmFuc2Zvcm1fc3RyaW5nX3ZhbHVlc19vYmplY3RfZmllbGRf c3RhcnQodm9pZCAqc3RhdGUKIHN0YXRpYyBKc29uUGFyc2VFcnJvclR5cGUgdHJhbnNmb3JtX3N0 cmluZ192YWx1ZXNfYXJyYXlfZWxlbWVudF9zdGFydCh2b2lkICpzdGF0ZSwgYm9vbCBpc251bGwp Owogc3RhdGljIEpzb25QYXJzZUVycm9yVHlwZSB0cmFuc2Zvcm1fc3RyaW5nX3ZhbHVlc19zY2Fs YXIodm9pZCAqc3RhdGUsIGNoYXIgKnRva2VuLCBKc29uVG9rZW5UeXBlIHRva2VudHlwZSk7CiAK K3N0YXRpYyBKc29uYlZhbHVlICpqc29uYl9nZXRfanNvbmJ2YWx1ZShKc29uYiAqamIsIERhdHVt ICpwYXRoLCBpbnQgbnBhdGgsIGJvb2wgKmlzbnVsbCk7CiAKIC8qCiAgKiBwZ19wYXJzZV9qc29u X29yX2VycnNhdmUKQEAgLTE0NzMsNiArMTQ3NCwzOSBAQCBnZXRfc2NhbGFyKHZvaWQgKnN0YXRl LCBjaGFyICp0b2tlbiwgSnNvblRva2VuVHlwZSB0b2tlbnR5cGUpCiAJcmV0dXJuIEpTT05fU1VD Q0VTUzsKIH0KIAorRGF0dW0KK2pzb25iX2V4dHJhY3RfcGF0aF90eXBlKFBHX0ZVTkNUSU9OX0FS R1MpCit7CisJSnNvbmIJICAgKmpiID0gUEdfR0VUQVJHX0pTT05CX1AoMCk7CisJQXJyYXlUeXBl ICAqcGF0aCA9IFBHX0dFVEFSR19BUlJBWVRZUEVfUCgxKTsKKwlPaWQJCQl0YXJnZXRPaWQgPSBn ZXRfZm5fZXhwcl9hcmd0eXBlKGZjaW5mby0+ZmxpbmZvLCAyKTsKKwlKc29uYlZhbHVlICp2Owor CisJRGF0dW0JICAgKnBhdGh0ZXh0OworCWJvb2wJICAgKnBhdGhudWxsczsKKwlib29sCQlpc251 bGwgPSBmYWxzZTsKKwlpbnQJCQlucGF0aDsKKworCS8qCisJICogSWYgdGhlIGFycmF5IGNvbnRh aW5zIGFueSBudWxsIGVsZW1lbnRzLCByZXR1cm4gTlVMTCwgb24gdGhlIGdyb3VuZHMKKwkgKiB0 aGF0IHlvdSdkIGhhdmUgZ290dGVuIE5VTEwgaWYgYW55IFJIUyB2YWx1ZSB3ZXJlIE5VTEwgaW4g YSBuZXN0ZWQKKwkgKiBzZXJpZXMgb2YgYXBwbGljYXRpb25zIG9mIHRoZSAtPiBvcGVyYXRvci4g IChOb3RlOiBiZWNhdXNlIHdlIGFsc28KKwkgKiByZXR1cm4gTlVMTCBmb3IgZXJyb3IgY2FzZXMg c3VjaCBhcyBuby1zdWNoLWZpZWxkLCB0aGlzIGlzIHRydWUKKwkgKiByZWdhcmRsZXNzIG9mIHRo ZSBjb250ZW50cyBvZiB0aGUgcmVzdCBvZiB0aGUgYXJyYXkuKQorCSAqLworCWlmIChhcnJheV9j b250YWluc19udWxscyhwYXRoKSkKKwkJUEdfUkVUVVJOX05VTEwoKTsKKworCWRlY29uc3RydWN0 X2FycmF5X2J1aWx0aW4ocGF0aCwgVEVYVE9JRCwgJnBhdGh0ZXh0LCAmcGF0aG51bGxzLCAmbnBh dGgpOworCisJdiA9IGpzb25iX2dldF9qc29uYnZhbHVlKGpiLCBwYXRodGV4dCwgbnBhdGgsICZp c251bGwpOworCisJaWYgKGlzbnVsbCkKKwkJUEdfUkVUVVJOX1BPSU5URVIoTlVMTCk7CisKKwly ZXR1cm4gY2FzdF9qc29uYnZhbHVlX3RvX3R5cGUodiwgdGFyZ2V0T2lkKTsKK30KKwogRGF0dW0K IGpzb25iX2V4dHJhY3RfcGF0aChQR19GVU5DVElPTl9BUkdTKQogewpAQCAtMTUxNiw1MiArMTU1 MCwzNiBAQCBnZXRfanNvbmJfcGF0aF9hbGwoRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8sIGJvb2wg YXNfdGV4dCkKIAkJUEdfUkVUVVJOX0RBVFVNKHJlcyk7CiB9CiAKLURhdHVtCi1qc29uYl9nZXRf ZWxlbWVudChKc29uYiAqamIsIERhdHVtICpwYXRoLCBpbnQgbnBhdGgsIGJvb2wgKmlzbnVsbCwg Ym9vbCBhc190ZXh0KQorCitzdGF0aWMgSnNvbmJWYWx1ZSAqCitqc29uYl9nZXRfanNvbmJ2YWx1 ZShKc29uYiAqamIsIERhdHVtICpwYXRoLCBpbnQgbnBhdGgsIGJvb2wgKmlzbnVsbCkKIHsKKwli b29sIGhhdmVfb2JqZWN0ID0gZmFsc2UsIGhhdmVfYXJyYXkgPSBmYWxzZTsKIAlKc29uYkNvbnRh aW5lciAqY29udGFpbmVyID0gJmpiLT5yb290OworCWludCBpOwogCUpzb25iVmFsdWUgKmpidnAg PSBOVUxMOwotCWludAkJCWk7Ci0JYm9vbAkJaGF2ZV9vYmplY3QgPSBmYWxzZSwKLQkJCQloYXZl X2FycmF5ID0gZmFsc2U7CiAKLQkqaXNudWxsID0gZmFsc2U7CisJLyoKKwkgKiBJZiB0aGUgYXJy YXkgaXMgZW1wdHksIHJldHVybiB0aGUgZW50aXJlIExIUyBvYmplY3QsIG9uIHRoZSBncm91bmRz CisJICogdGhhdCB3ZSBzaG91bGQgZG8gemVybyBmaWVsZCBvciBlbGVtZW50IGV4dHJhY3Rpb25z LgorCSAqLworCWlmIChucGF0aCA8PSAwKQorCXsKKwkJSnNvbmJWYWx1ZSAqcmVzID0gTlVMTDsK KwkJaWYgKEpCX1JPT1RfSVNfQVJSQVkoamIpICYmIEpCX1JPT1RfSVNfU0NBTEFSKGpiKSkKKwkJ CXJldHVybiBnZXRJdGhKc29uYlZhbHVlRnJvbUNvbnRhaW5lcihjb250YWluZXIsIDApOworCisJ CS8qIE5COiByZXMgaXMgYSBqYnZCaW5hcnkgSnNvbmJWYWx1ZSAqLworCQlyZXMgPSBwYWxsb2Mw KHNpemVvZihKc29uYlZhbHVlKSk7CisJCUpzb25iVG9Kc29uYlZhbHVlKGpiLCByZXMpOworCQly ZXR1cm4gcmVzOworCX0KIAogCS8qIElkZW50aWZ5IHdoZXRoZXIgd2UgaGF2ZSBvYmplY3QsIGFy cmF5LCBvciBzY2FsYXIgYXQgdG9wLWxldmVsICovCiAJaWYgKEpCX1JPT1RfSVNfT0JKRUNUKGpi KSkKIAkJaGF2ZV9vYmplY3QgPSB0cnVlOwogCWVsc2UgaWYgKEpCX1JPT1RfSVNfQVJSQVkoamIp ICYmICFKQl9ST09UX0lTX1NDQUxBUihqYikpCiAJCWhhdmVfYXJyYXkgPSB0cnVlOwotCWVsc2UK LQl7Ci0JCUFzc2VydChKQl9ST09UX0lTX0FSUkFZKGpiKSAmJiBKQl9ST09UX0lTX1NDQUxBUihq YikpOwotCQkvKiBFeHRyYWN0IHRoZSBzY2FsYXIgdmFsdWUsIGlmIGl0IGlzIHdoYXQgd2UnbGwg cmV0dXJuICovCi0JCWlmIChucGF0aCA8PSAwKQotCQkJamJ2cCA9IGdldEl0aEpzb25iVmFsdWVG cm9tQ29udGFpbmVyKGNvbnRhaW5lciwgMCk7Ci0JfQotCi0JLyoKLQkgKiBJZiB0aGUgYXJyYXkg aXMgZW1wdHksIHJldHVybiB0aGUgZW50aXJlIExIUyBvYmplY3QsIG9uIHRoZSBncm91bmRzCi0J ICogdGhhdCB3ZSBzaG91bGQgZG8gemVybyBmaWVsZCBvciBlbGVtZW50IGV4dHJhY3Rpb25zLiAg Rm9yIHRoZQotCSAqIG5vbi1zY2FsYXIgY2FzZSB3ZSBjYW4ganVzdCBoYW5kIGJhY2sgdGhlIG9i amVjdCB3aXRob3V0IG11Y2ggd29yay4gRm9yCi0JICogdGhlIHNjYWxhciBjYXNlLCBmYWxsIHRo cm91Z2ggYW5kIGRlYWwgd2l0aCB0aGUgdmFsdWUgYmVsb3cgdGhlIGxvb3AuCi0JICogKFRoaXMg aW5jb25zaXN0ZW5jeSBhcmlzZXMgYmVjYXVzZSB0aGVyZSdzIG5vIGVhc3kgd2F5IHRvIGdlbmVy YXRlIGEKLQkgKiBKc29uYlZhbHVlIGRpcmVjdGx5IGZvciByb290LWxldmVsIGNvbnRhaW5lcnMu KQotCSAqLwotCWlmIChucGF0aCA8PSAwICYmIGpidnAgPT0gTlVMTCkKLQl7Ci0JCWlmIChhc190 ZXh0KQotCQl7Ci0JCQlyZXR1cm4gUG9pbnRlckdldERhdHVtKGNzdHJpbmdfdG9fdGV4dChKc29u YlRvQ1N0cmluZyhOVUxMLAotCQkJCQkJCQkJCQkJCQkJCSAgY29udGFpbmVyLAotCQkJCQkJCQkJ CQkJCQkJCSAgVkFSU0laRShqYikpKSk7Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQkvKiBub3QgdGV4 dCBtb2RlIC0ganVzdCBoYW5kIGJhY2sgdGhlIGpzb25iICovCi0JCQlQR19SRVRVUk5fSlNPTkJf UChqYik7Ci0JCX0KLQl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgbnBhdGg7IGkrKykKIAl7CkBAIC0x NTg2LDcgKzE2MDQsNyBAQCBqc29uYl9nZXRfZWxlbWVudChKc29uYiAqamIsIERhdHVtICpwYXRo LCBpbnQgbnBhdGgsIGJvb2wgKmlzbnVsbCwgYm9vbCBhc190ZXh0KQogCQkJaWYgKGVuZHB0ciA9 PSBpbmRleHRleHQgfHwgKmVuZHB0ciAhPSAnXDAnIHx8IGVycm5vICE9IDApCiAJCQl7CiAJCQkJ KmlzbnVsbCA9IHRydWU7Ci0JCQkJcmV0dXJuIFBvaW50ZXJHZXREYXR1bShOVUxMKTsKKwkJCQly ZXR1cm4gTlVMTDsKIAkJCX0KIAogCQkJaWYgKGxpbmRleCA+PSAwKQpAQCAtMTYwNyw3ICsxNjI1 LDcgQEAganNvbmJfZ2V0X2VsZW1lbnQoSnNvbmIgKmpiLCBEYXR1bSAqcGF0aCwgaW50IG5wYXRo LCBib29sICppc251bGwsIGJvb2wgYXNfdGV4dCkKIAkJCQlpZiAobGluZGV4ID09IElOVF9NSU4g fHwgLWxpbmRleCA+IG5lbGVtZW50cykKIAkJCQl7CiAJCQkJCSppc251bGwgPSB0cnVlOwotCQkJ CQlyZXR1cm4gUG9pbnRlckdldERhdHVtKE5VTEwpOworCQkJCQlyZXR1cm4gTlVMTDsKIAkJCQl9 CiAJCQkJZWxzZQogCQkJCQlpbmRleCA9IG5lbGVtZW50cyArIGxpbmRleDsKQEAgLTE2MTksMTMg KzE2MzcsMTMgQEAganNvbmJfZ2V0X2VsZW1lbnQoSnNvbmIgKmpiLCBEYXR1bSAqcGF0aCwgaW50 IG5wYXRoLCBib29sICppc251bGwsIGJvb2wgYXNfdGV4dCkKIAkJewogCQkJLyogc2NhbGFyLCBl eHRyYWN0aW9uIHlpZWxkcyBhIG51bGwgKi8KIAkJCSppc251bGwgPSB0cnVlOwotCQkJcmV0dXJu IFBvaW50ZXJHZXREYXR1bShOVUxMKTsKKwkJCXJldHVybiBOVUxMOwogCQl9CiAKIAkJaWYgKGpi dnAgPT0gTlVMTCkKIAkJewogCQkJKmlzbnVsbCA9IHRydWU7Ci0JCQlyZXR1cm4gUG9pbnRlckdl dERhdHVtKE5VTEwpOworCQkJcmV0dXJuIE5VTEw7CiAJCX0KIAkJZWxzZSBpZiAoaSA9PSBucGF0 aCAtIDEpCiAJCQlicmVhazsKQEAgLTE2NDQsNiArMTY2MiwyMiBAQCBqc29uYl9nZXRfZWxlbWVu dChKc29uYiAqamIsIERhdHVtICpwYXRoLCBpbnQgbnBhdGgsIGJvb2wgKmlzbnVsbCwgYm9vbCBh c190ZXh0KQogCQkJaGF2ZV9hcnJheSA9IGZhbHNlOwogCQl9CiAJfQorCXJldHVybiBqYnZwOwor fQorCisvKgorICogUmV0dXJuIGpzb25iIGRhdHVtIG9yIGpzb25iLWFzLXRleHQgZGF0dW0uCisg Ki8KK0RhdHVtCitqc29uYl9nZXRfZWxlbWVudChKc29uYiAqamIsIERhdHVtICpwYXRoLCBpbnQg bnBhdGgsIGJvb2wgKmlzbnVsbCwgYm9vbCBhc190ZXh0KQoreworCUpzb25iVmFsdWUgKmpidnAg PSBOVUxMOworCSppc251bGwgPSBmYWxzZTsKKworCWpidnAgPSBqc29uYl9nZXRfanNvbmJ2YWx1 ZShqYiwgcGF0aCwgbnBhdGgsIGlzbnVsbCk7CisKKwlpZiAoKmlzbnVsbCkKKwkJcmV0dXJuIFBv aW50ZXJHZXREYXR1bShOVUxMKTsKIAogCWlmIChhc190ZXh0KQogCXsKZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL2NhdGFsb2cvY2F0dmVyc2lvbi5oIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9jYXR2 ZXJzaW9uLmgKaW5kZXggZjUwN2I0OWJiMjguLjhlZDAzYTIwZWZhIDEwMDY0NAotLS0gYS9zcmMv aW5jbHVkZS9jYXRhbG9nL2NhdHZlcnNpb24uaAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL2Nh dHZlcnNpb24uaApAQCAtNTcsNiArNTcsNiBAQAogICovCiAKIC8qCQkJCQkJCXl5eXltbWRkTiAq LwotI2RlZmluZSBDQVRBTE9HX1ZFUlNJT05fTk8JMjAyMzA3MjYxCisjZGVmaW5lIENBVEFMT0df VkVSU0lPTl9OTwkyMDIzMDgxNDEKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9j YXRhbG9nL3BnX3Byb2MuZGF0IGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAppbmRl eCA2OTk2MDczOTg5YS4uYWY4OWRlYzdkYjggMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFs b2cvcGdfcHJvYy5kYXQKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdApAQCAt NDU3NSwyNSArNDU3NSwyNiBAQAogICBwcm9uYW1lID0+ICdwZ19sc24nLCBwcm9yZXR0eXBlID0+ ICdwZ19sc24nLCBwcm9hcmd0eXBlcyA9PiAnbnVtZXJpYycsCiAgIHByb3NyYyA9PiAnbnVtZXJp Y19wZ19sc24nIH0sCiAKLXsgb2lkID0+ICczNTU2JywgZGVzY3IgPT4gJ2NvbnZlcnQganNvbmIg dG8gYm9vbGVhbicsCit7IG9pZCA9PiAnMzU1NicsIGRlc2NyID0+ICdjb252ZXJ0IGpzb25iIHRv IGJvb2xlYW4nLCBwcm9zdXBwb3J0ID0+ICdqc29uYl9jYXN0X3N1cHBvcnQnLAogICBwcm9uYW1l ID0+ICdib29sJywgcHJvcmV0dHlwZSA9PiAnYm9vbCcsIHByb2FyZ3R5cGVzID0+ICdqc29uYics CiAgIHByb3NyYyA9PiAnanNvbmJfYm9vbCcgfSwKIHsgb2lkID0+ICczNDQ5JywgZGVzY3IgPT4g J2NvbnZlcnQganNvbmIgdG8gbnVtZXJpYycsCi0gIHByb25hbWUgPT4gJ251bWVyaWMnLCBwcm9y ZXR0eXBlID0+ICdudW1lcmljJywgcHJvYXJndHlwZXMgPT4gJ2pzb25iJywKKyAgcHJvbmFtZSA9 PiAnbnVtZXJpYycsIHByb3N1cHBvcnQgPT4gJ2pzb25iX2Nhc3Rfc3VwcG9ydCcsCisgIHByb3Jl dHR5cGUgPT4gJ251bWVyaWMnLCBwcm9hcmd0eXBlcyA9PiAnanNvbmInLAogICBwcm9zcmMgPT4g J2pzb25iX251bWVyaWMnIH0sCi17IG9pZCA9PiAnMzQ1MCcsIGRlc2NyID0+ICdjb252ZXJ0IGpz b25iIHRvIGludDInLAoreyBvaWQgPT4gJzM0NTAnLCBkZXNjciA9PiAnY29udmVydCBqc29uYiB0 byBpbnQyJywgcHJvc3VwcG9ydCA9PiAnanNvbmJfY2FzdF9zdXBwb3J0JywKICAgcHJvbmFtZSA9 PiAnaW50MicsIHByb3JldHR5cGUgPT4gJ2ludDInLCBwcm9hcmd0eXBlcyA9PiAnanNvbmInLAog ICBwcm9zcmMgPT4gJ2pzb25iX2ludDInIH0sCi17IG9pZCA9PiAnMzQ1MScsIGRlc2NyID0+ICdj b252ZXJ0IGpzb25iIHRvIGludDQnLAoreyBvaWQgPT4gJzM0NTEnLCBkZXNjciA9PiAnY29udmVy dCBqc29uYiB0byBpbnQ0JywgcHJvc3VwcG9ydCA9PiAnanNvbmJfY2FzdF9zdXBwb3J0JywKICAg cHJvbmFtZSA9PiAnaW50NCcsIHByb3JldHR5cGUgPT4gJ2ludDQnLCBwcm9hcmd0eXBlcyA9PiAn anNvbmInLAogICBwcm9zcmMgPT4gJ2pzb25iX2ludDQnIH0sCi17IG9pZCA9PiAnMzQ1MicsIGRl c2NyID0+ICdjb252ZXJ0IGpzb25iIHRvIGludDgnLAoreyBvaWQgPT4gJzM0NTInLCBkZXNjciA9 PiAnY29udmVydCBqc29uYiB0byBpbnQ4JywgcHJvc3VwcG9ydCA9PiAnanNvbmJfY2FzdF9zdXBw b3J0JywKICAgcHJvbmFtZSA9PiAnaW50OCcsIHByb3JldHR5cGUgPT4gJ2ludDgnLCBwcm9hcmd0 eXBlcyA9PiAnanNvbmInLAogICBwcm9zcmMgPT4gJ2pzb25iX2ludDgnIH0sCi17IG9pZCA9PiAn MzQ1MycsIGRlc2NyID0+ICdjb252ZXJ0IGpzb25iIHRvIGZsb2F0NCcsCit7IG9pZCA9PiAnMzQ1 MycsIGRlc2NyID0+ICdjb252ZXJ0IGpzb25iIHRvIGZsb2F0NCcsIHByb3N1cHBvcnQgPT4gJ2pz b25iX2Nhc3Rfc3VwcG9ydCcsCiAgIHByb25hbWUgPT4gJ2Zsb2F0NCcsIHByb3JldHR5cGUgPT4g J2Zsb2F0NCcsIHByb2FyZ3R5cGVzID0+ICdqc29uYicsCiAgIHByb3NyYyA9PiAnanNvbmJfZmxv YXQ0JyB9LAoteyBvaWQgPT4gJzI1ODAnLCBkZXNjciA9PiAnY29udmVydCBqc29uYiB0byBmbG9h dDgnLAoreyBvaWQgPT4gJzI1ODAnLCBkZXNjciA9PiAnY29udmVydCBqc29uYiB0byBmbG9hdDgn LCBwcm9zdXBwb3J0ID0+ICdqc29uYl9jYXN0X3N1cHBvcnQnLAogICBwcm9uYW1lID0+ICdmbG9h dDgnLCBwcm9yZXR0eXBlID0+ICdmbG9hdDgnLCBwcm9hcmd0eXBlcyA9PiAnanNvbmInLAogICBw cm9zcmMgPT4gJ2pzb25iX2Zsb2F0OCcgfSwKIApAQCAtOTkyOCw2ICs5OTI5LDEzIEBACiAgIHBy b25hbWUgPT4gJ2pzb25iX29iamVjdF9maWVsZF90ZXh0JywgcHJvcmV0dHlwZSA9PiAndGV4dCcs CiAgIHByb2FyZ3R5cGVzID0+ICdqc29uYiB0ZXh0JywgcHJvYXJnbmFtZXMgPT4gJ3tmcm9tX2pz b24sIGZpZWxkX25hbWV9JywKICAgcHJvc3JjID0+ICdqc29uYl9vYmplY3RfZmllbGRfdGV4dCcg fSwKK3sgb2lkID0+ICczODEzJywgZGVzY3IgPT4gJ3JldHVybiBhIGdpdmVuIHR5cGUgc3BlY2lm aWVkIGluIGRlc2lyZWRfdHlwZSBmcm9tIGpzb25iIGZpZWxkJywKKyAgcHJvbmFtZSA9PiAnanNv bmJfb2JqZWN0X2ZpZWxkX3R5cGUnLCBwcm9yZXR0eXBlID0+ICdhbnllbGVtZW50JywKKyAgcHJv YXJndHlwZXMgPT4gJ2pzb25iIHRleHQgYW55ZWxlbWVudCcsIHByb2FyZ25hbWVzID0+ICd7ZnJv bV9qc29uLCBmaWVsZF9uYW1lLCBkZXNpcmVkX3R5cGV9JywKKyAgcHJvc3JjID0+ICdqc29uYl9v YmplY3RfZmllbGRfdHlwZSd9LAoreyBvaWQgPT4gJzM4MTQnLCBkZXNjciA9PiAncGxhbm5lciBz dXBwb3J0IGZvciBudW1lcmljKGpzb25iKScsCisgIHByb25hbWUgPT4gJ2pzb25iX2Nhc3Rfc3Vw cG9ydCcsIHByb3JldHR5cGUgPT4gJ2ludGVybmFsJywKKyAgcHJvYXJndHlwZXMgPT4gJ2ludGVy bmFsJywgcHJvc3JjID0+ICdqc29uYl9jYXN0X3N1cHBvcnQnIH0sCiB7IG9pZCA9PiAnMzIxNScs CiAgIHByb25hbWUgPT4gJ2pzb25iX2FycmF5X2VsZW1lbnQnLCBwcm9yZXR0eXBlID0+ICdqc29u YicsCiAgIHByb2FyZ3R5cGVzID0+ICdqc29uYiBpbnQ0JywgcHJvYXJnbmFtZXMgPT4gJ3tmcm9t X2pzb24sIGVsZW1lbnRfaW5kZXh9JywKQEAgLTk5MzYsNiArOTk0NCwxMCBAQAogICBwcm9uYW1l ID0+ICdqc29uYl9hcnJheV9lbGVtZW50X3RleHQnLCBwcm9yZXR0eXBlID0+ICd0ZXh0JywKICAg cHJvYXJndHlwZXMgPT4gJ2pzb25iIGludDQnLCBwcm9hcmduYW1lcyA9PiAne2Zyb21fanNvbiwg ZWxlbWVudF9pbmRleH0nLAogICBwcm9zcmMgPT4gJ2pzb25iX2FycmF5X2VsZW1lbnRfdGV4dCcg fSwKK3sgb2lkID0+ICc0NTQ5JywgZGVzY3IgPT4gJ2Nhc3QgYW4gYXJyYXkgZWxlbWVudCB0byBn aXZlbiB0eXBlJywKKyAgcHJvbmFtZSA9PiAnanNvbmJfYXJyYXlfZWxlbWVudF90eXBlJywgcHJv cmV0dHlwZSA9PiAnYW55ZWxlbWVudCcsCisgIHByb2FyZ3R5cGVzID0+ICdqc29uYiBpbnQ0IGFu eWVsZW1lbnQnLCBwcm9hcmduYW1lcyA9PiAne2Zyb21fanNvbiwgZWxlbWVudF9pbmRleCwgZGVz aXJlZF90eXBlfScsCisgIHByb3NyYyA9PiAnanNvbmJfYXJyYXlfZWxlbWVudF90eXBlJyB9LAog eyBvaWQgPT4gJzMyMTcnLCBkZXNjciA9PiAnZ2V0IHZhbHVlIGZyb20ganNvbmIgd2l0aCBwYXRo IGVsZW1lbnRzJywKICAgcHJvbmFtZSA9PiAnanNvbmJfZXh0cmFjdF9wYXRoJywgcHJvdmFyaWFk aWMgPT4gJ3RleHQnLCBwcm9yZXR0eXBlID0+ICdqc29uYicsCiAgIHByb2FyZ3R5cGVzID0+ICdq c29uYiBfdGV4dCcsIHByb2FsbGFyZ3R5cGVzID0+ICd7anNvbmIsX3RleHR9JywKQEAgLTk5NDcs NiArOTk1OSwxMiBAQAogICBwcm9hbGxhcmd0eXBlcyA9PiAne2pzb25iLF90ZXh0fScsIHByb2Fy Z21vZGVzID0+ICd7aSx2fScsCiAgIHByb2FyZ25hbWVzID0+ICd7ZnJvbV9qc29uLHBhdGhfZWxl bXN9JywKICAgcHJvc3JjID0+ICdqc29uYl9leHRyYWN0X3BhdGhfdGV4dCcgfSwKK3sgb2lkID0+ ICc0NTUxJywgZGVzY3IgPT4gJ2Nhc3QgdmFsdWUgZnJvbSBqc29uYiBhcyB0ZXh0IHdpdGggcGF0 aCBlbGVtZW50cyB0byBnaXZlbiB0eXBlJywKKyAgcHJvbmFtZSA9PiAnanNvbmJfZXh0cmFjdF9w YXRoX3R5cGUnLCBwcm92YXJpYWRpYyA9PiAndGV4dCcsCisgIHByb3JldHR5cGUgPT4gJ2FueWVs ZW1lbnQnLCBwcm9hcmd0eXBlcyA9PiAnanNvbmIgX3RleHQgYW55ZWxlbWVudCcsCisgIHByb2Fs bGFyZ3R5cGVzID0+ICd7anNvbmIsX3RleHQsYW55ZWxlbWVudH0nLCBwcm9hcmdtb2RlcyA9PiAn e2ksdixpfScsCisgIHByb2FyZ25hbWVzID0+ICd7ZnJvbV9qc29uLHBhdGhfZWxlbXMsdGFyZ2V0 X29pZH0nLAorICBwcm9zcmMgPT4gJ2pzb25iX2V4dHJhY3RfcGF0aF90eXBlJyB9LAogeyBvaWQg PT4gJzMyMTknLCBkZXNjciA9PiAnZWxlbWVudHMgb2YgYSBqc29uYiBhcnJheScsCiAgIHByb25h bWUgPT4gJ2pzb25iX2FycmF5X2VsZW1lbnRzJywgcHJvcm93cyA9PiAnMTAwJywgcHJvcmV0c2V0 ID0+ICd0JywKICAgcHJvcmV0dHlwZSA9PiAnanNvbmInLCBwcm9hcmd0eXBlcyA9PiAnanNvbmIn LApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvanNvbmIuaCBiL3NyYy9pbmNsdWRlL3V0 aWxzL2pzb25iLmgKaW5kZXggNjQ5YTE2NDRmMjQuLjUzMjIyNTMxNGE5IDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS91dGlscy9qc29uYi5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL2pzb25iLmgK QEAgLTQzNSw1ICs0MzUsNiBAQCBleHRlcm4gRGF0dW0ganNvbmJfYnVpbGRfb2JqZWN0X3dvcmtl cihpbnQgbmFyZ3MsIERhdHVtICphcmdzLCBib29sICpudWxscywKIAkJCQkJCQkJCSAgIGJvb2wg dW5pcXVlX2tleXMpOwogZXh0ZXJuIERhdHVtIGpzb25iX2J1aWxkX2FycmF5X3dvcmtlcihpbnQg bmFyZ3MsIERhdHVtICphcmdzLCBib29sICpudWxscywKIAkJCQkJCQkJCSAgT2lkICp0eXBlcywg Ym9vbCBhYnNlbnRfb25fbnVsbCk7CitleHRlcm4gRGF0dW0gY2FzdF9qc29uYnZhbHVlX3RvX3R5 cGUoSnNvbmJWYWx1ZSAqdiwgT2lkIHRhcmdldF9vaWQpOwogCiAjZW5kaWYJCQkJCQkJLyogX19K U09OQl9IX18gKi8KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvanNvbmIu b3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9qc29uYi5vdXQKaW5kZXggNGExNmQwZGJh ZmIuLjljZWFlMDU5NTYwIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pz b25iLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pzb25iLm91dApAQCAtNDU3 LDYgKzQ1Nyw3IEBAIENSRUFURSBURU1QIFRBQkxFIHRlc3RfanNvbmIgKAogKTsKIElOU0VSVCBJ TlRPIHRlc3RfanNvbmIgVkFMVUVTCiAoJ3NjYWxhcicsJyJhIHNjYWxhciInKSwKKygnc2NhbGFy aW50JywnMicpLAogKCdhcnJheScsJ1siemVybyIsICJvbmUiLCJ0d28iLG51bGwsImZvdXIiLCJm aXZlIiwgWzEsMiwzXSx7ImYxIjo5fV0nKSwKICgnb2JqZWN0JywneyJmaWVsZDEiOiJ2YWwxIiwi ZmllbGQyIjoidmFsMiIsImZpZWxkMyI6bnVsbCwgImZpZWxkNCI6IDQsICJmaWVsZDUiOiBbMSwy LDNdLCAiZmllbGQ2IjogeyJmMSI6OX19Jyk7CiBTRUxFQ1QgdGVzdF9qc29uIC0+ICd4JyBGUk9N IHRlc3RfanNvbmIgV0hFUkUganNvbl90eXBlID0gJ3NjYWxhcic7CkBAIC01MDEsMTAgKzUwMiwy NSBAQCBTRUxFQ1QgdGVzdF9qc29uIC0+PiAnZmllbGQyJyBGUk9NIHRlc3RfanNvbmIgV0hFUkUg anNvbl90eXBlID0gJ29iamVjdCc7CiAgdmFsMgogKDEgcm93KQogCi1TRUxFQ1QgdGVzdF9qc29u IC0+IDIgRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlwZSA9ICdzY2FsYXInOworU0VMRUNU IHRlc3RfanNvbiAtPiAyLCB0ZXN0X2pzb24gLT4gMCBGUk9NIHRlc3RfanNvbmIgV0hFUkUganNv bl90eXBlID0gJ3NjYWxhcic7CisgP2NvbHVtbj8gfCAgP2NvbHVtbj8gIAorLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0KKyAgICAgICAgICB8ICJhIHNjYWxhciIKKygxIHJvdykKKworZXhwbGFpbiAo dmVyYm9zZSwgY29zdHMgb2ZmKQorU0VMRUNUICh0ZXN0X2pzb24gLT4gMCk6OmludDQsIHRlc3Rf anNvbiAtPiAwIEZST00gdGVzdF9qc29uYiBXSEVSRSBqc29uX3R5cGUgPSAnc2NhbGFyaW50JzsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHBnX3RlbXAudGVz dF9qc29uYgorICAgT3V0cHV0OiBqc29uYl9hcnJheV9lbGVtZW50X3R5cGUodGVzdF9qc29uLCAw LCAwKSwgKHRlc3RfanNvbiAtPiAwKQorICAgRmlsdGVyOiAodGVzdF9qc29uYi5qc29uX3R5cGUg PSAnc2NhbGFyaW50Jzo6dGV4dCkKKygzIHJvd3MpCisKK1NFTEVDVCB0ZXN0X2pzb24gLT4gMCBG Uk9NIHRlc3RfanNvbmIgV0hFUkUganNvbl90eXBlID0gJ3NjYWxhcmludCc7CiAgP2NvbHVtbj8g CiAtLS0tLS0tLS0tCi0gCisgMgogKDEgcm93KQogCiBTRUxFQ1QgdGVzdF9qc29uIC0+IDIgRlJP TSB0ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlwZSA9ICdhcnJheSc7CkBAIC0xNzg2LDYgKzE4MDIs MTIgQEAgc2VsZWN0ICd7ImEiOiB7ImIiOnsiYyI6ICJmb28ifX19Jzo6anNvbmIgIz4gJ3t9JzsK ICB7ImEiOiB7ImIiOiB7ImMiOiAiZm9vIn19fQogKDEgcm93KQogCitzZWxlY3QgKCcyJzo6anNv bmIgIz4gJ3t9Jyk6OmludDIsICgneyJhIjoyfSc6Ompzb25iICM+ICd7ImIifScpLCAoJ3siYSI6 Mn0nOjpqc29uYiAjPiAneyJiIn0nKTo6aW50MjsKKyBpbnQyIHwgP2NvbHVtbj8gfCBpbnQyIAor LS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgICAgMiB8ICAgICAgICAgIHwgICAgIAorKDEgcm93 KQorCiBzZWxlY3QgJ1sxLDIsM10nOjpqc29uYiAjPiAne30nOwogID9jb2x1bW4/ICAKIC0tLS0t LS0tLS0tCkBAIC01NDcxLDEwNyArNTQ5MywxMTMgQEAgc2VsZWN0IHRzX2hlYWRsaW5lKCdbXSc6 Ompzb25iLCB0c3F1ZXJ5KCdhYWEgJiBiYmInKSk7CiAoMSByb3cpCiAKIC0tIGNhc3RzCi1zZWxl Y3QgJ3RydWUnOjpqc29uYjo6Ym9vbDsKLSBib29sIAotLS0tLS0tCi0gdAorc2VsZWN0ICd0cnVl Jzo6anNvbmI6OmJvb2wsICgneyJhIjogdHJ1ZX0nOjpqc29uYi0+J2EnKTo6Ym9vbDsKKyBib29s IHwgYm9vbCAKKy0tLS0tLSstLS0tLS0KKyB0ICAgIHwgdAogKDEgcm93KQogCiBzZWxlY3QgJ1td Jzo6anNvbmI6OmJvb2w7CiBFUlJPUjogIGNhbm5vdCBjYXN0IGpzb25iIGFycmF5IHRvIHR5cGUg Ym9vbGVhbgotc2VsZWN0ICcxLjAnOjpqc29uYjo6ZmxvYXQ7Ci0gZmxvYXQ4IAotLS0tLS0tLS0K LSAgICAgIDEKK3NlbGVjdCAoJ3siYSI6IFtdfSc6Ompzb25iLT4nYScpOjpib29sOworRVJST1I6 ICBjYW5ub3QgY2FzdCBqc29uYiBhcnJheSB0byB0eXBlIGJvb2xlYW4KK3NlbGVjdCAnMS4wJzo6 anNvbmI6OmZsb2F0LCAoJ3siYSI6IDEuMH0nOjpqc29uYi0+J2EnKTo6ZmxvYXQ7CisgZmxvYXQ4 IHwgZmxvYXQ4IAorLS0tLS0tLS0rLS0tLS0tLS0KKyAgICAgIDEgfCAgICAgIDEKICgxIHJvdykK IAogc2VsZWN0ICdbMS4wXSc6Ompzb25iOjpmbG9hdDsKIEVSUk9SOiAgY2Fubm90IGNhc3QganNv bmIgYXJyYXkgdG8gdHlwZSBkb3VibGUgcHJlY2lzaW9uCi1zZWxlY3QgJzEyMzQ1Jzo6anNvbmI6 OmludDQ7Ci0gaW50NCAgCi0tLS0tLS0tCi0gMTIzNDUKK3NlbGVjdCAoJ3siYSI6IFsxLjBdfSc6 Ompzb25iLT4nYScpOjpmbG9hdDsKK0VSUk9SOiAgY2Fubm90IGNhc3QganNvbmIgYXJyYXkgdG8g dHlwZSBkb3VibGUgcHJlY2lzaW9uCitzZWxlY3QgJzEyMzQ1Jzo6anNvbmI6OmludDQsICAoJ3si YSI6IDEyMzQ1fSc6Ompzb25iLT4nYScpOjppbnQ0OworIGludDQgIHwgaW50NCAgCistLS0tLS0t Ky0tLS0tLS0KKyAxMjM0NSB8IDEyMzQ1CiAoMSByb3cpCiAKIHNlbGVjdCAnImhlbGxvIic6Ompz b25iOjppbnQ0OwogRVJST1I6ICBjYW5ub3QgY2FzdCBqc29uYiBzdHJpbmcgdG8gdHlwZSBpbnRl Z2VyCi1zZWxlY3QgJzEyMzQ1Jzo6anNvbmI6Om51bWVyaWM7Ci0gbnVtZXJpYyAKLS0tLS0tLS0t LQotICAgMTIzNDUKK3NlbGVjdCAoJ3siYSI6ICJoZWxsbyJ9Jzo6anNvbmItPidhJyk6OmludDQ7 CitFUlJPUjogIGNhbm5vdCBjYXN0IGpzb25iIHN0cmluZyB0byB0eXBlIGludGVnZXIKK3NlbGVj dCAnMTIzNDUnOjpqc29uYjo6bnVtZXJpYywgKCd7ImEiOiAxMjM0NX0nOjpqc29uYi0+J2EnKTo6 bnVtZXJpYzsKKyBudW1lcmljIHwgbnVtZXJpYyAKKy0tLS0tLS0tLSstLS0tLS0tLS0KKyAgIDEy MzQ1IHwgICAxMjM0NQogKDEgcm93KQogCiBzZWxlY3QgJ3t9Jzo6anNvbmI6Om51bWVyaWM7CiBF UlJPUjogIGNhbm5vdCBjYXN0IGpzb25iIG9iamVjdCB0byB0eXBlIG51bWVyaWMKLXNlbGVjdCAn MTIzNDUuMDUnOjpqc29uYjo6bnVtZXJpYzsKLSBudW1lcmljICAKLS0tLS0tLS0tLS0KLSAxMjM0 NS4wNQorc2VsZWN0ICcxMjM0NS4wNSc6Ompzb25iOjpudW1lcmljLCAoJ3siYSI6IDEyMzQ1LjA1 fSc6Ompzb25iLT4nYScpOjpudW1lcmljOworIG51bWVyaWMgIHwgbnVtZXJpYyAgCistLS0tLS0t LS0tKy0tLS0tLS0tLS0KKyAxMjM0NS4wNSB8IDEyMzQ1LjA1CiAoMSByb3cpCiAKLXNlbGVjdCAn MTIzNDUuMDUnOjpqc29uYjo6ZmxvYXQ0OwotICBmbG9hdDQgIAotLS0tLS0tLS0tLQotIDEyMzQ1 LjA1CitzZWxlY3QgJzEyMzQ1LjA1Jzo6anNvbmI6OmZsb2F0NCwgKCd7ImEiOiAxMjM0NS4wNX0n Ojpqc29uYi0+J2EnKTo6ZmxvYXQ0OworICBmbG9hdDQgIHwgIGZsb2F0NCAgCistLS0tLS0tLS0t Ky0tLS0tLS0tLS0KKyAxMjM0NS4wNSB8IDEyMzQ1LjA1CiAoMSByb3cpCiAKLXNlbGVjdCAnMTIz NDUuMDUnOjpqc29uYjo6ZmxvYXQ4OwotICBmbG9hdDggIAotLS0tLS0tLS0tLQotIDEyMzQ1LjA1 CitzZWxlY3QgJzEyMzQ1LjA1Jzo6anNvbmI6OmZsb2F0OCwgKCd7ImEiOiAxMjM0NS4wNX0nOjpq c29uYi0+J2EnKTo6ZmxvYXQ4OworICBmbG9hdDggIHwgIGZsb2F0OCAgCistLS0tLS0tLS0tKy0t LS0tLS0tLS0KKyAxMjM0NS4wNSB8IDEyMzQ1LjA1CiAoMSByb3cpCiAKLXNlbGVjdCAnMTIzNDUu MDUnOjpqc29uYjo6aW50MjsKLSBpbnQyICAKLS0tLS0tLS0KLSAxMjM0NQorc2VsZWN0ICcxMjM0 NS4wNSc6Ompzb25iOjppbnQyLCAoJ3siYSI6IDEyMzQ1LjA1fSc6Ompzb25iLT4nYScpOjppbnQy OworIGludDIgIHwgaW50MiAgCistLS0tLS0tKy0tLS0tLS0KKyAxMjM0NSB8IDEyMzQ1CiAoMSBy b3cpCiAKLXNlbGVjdCAnMTIzNDUuMDUnOjpqc29uYjo6aW50NDsKLSBpbnQ0ICAKLS0tLS0tLS0K LSAxMjM0NQorc2VsZWN0ICcxMjM0NS4wNSc6Ompzb25iOjppbnQ0LCAoJ3siYSI6IDEyMzQ1LjA1 fSc6Ompzb25iLT4nYScpOjppbnQ0OworIGludDQgIHwgaW50NCAgCistLS0tLS0tKy0tLS0tLS0K KyAxMjM0NSB8IDEyMzQ1CiAoMSByb3cpCiAKLXNlbGVjdCAnMTIzNDUuMDUnOjpqc29uYjo6aW50 ODsKLSBpbnQ4ICAKLS0tLS0tLS0KLSAxMjM0NQorc2VsZWN0ICcxMjM0NS4wNSc6Ompzb25iOjpp bnQ4LCAoJ3siYSI6IDEyMzQ1LjA1fSc6Ompzb25iLT4nYScpOjppbnQ4OworIGludDggIHwgaW50 OCAgCistLS0tLS0tKy0tLS0tLS0KKyAxMjM0NSB8IDEyMzQ1CiAoMSByb3cpCiAKLXNlbGVjdCAn MTIzNDUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNSc6Ompz b25iOjpudW1lcmljOwotICAgICAgICAgICAgICAgICAgICAgICBudW1lcmljICAgICAgICAgICAg ICAgICAgICAgICAgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KLSAxMjM0NS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDA1CitzZWxlY3QgJzEyMzQ1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDUnOjpqc29uYjo6bnVtZXJpYywgKCd7ImEiOiAxMjM0NS4wMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1fSc6Ompzb25iLT4nYScpOjpudW1l cmljOworICAgICAgICAgICAgICAgICAgICAgICBudW1lcmljICAgICAgICAgICAgICAgICAgICAg ICAgfCAgICAgICAgICAgICAgICAgICAgICAgbnVtZXJpYyAgICAgICAgICAgICAgICAgICAgICAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IDEyMzQ1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUgfCAx MjM0NS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1CiAoMSBy b3cpCiAKLXNlbGVjdCAnMTIzNDUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwNSc6Ompzb25iOjpmbG9hdDQ7Ci0gZmxvYXQ0IAotLS0tLS0tLS0KLSAgMTIzNDUK K3NlbGVjdCAnMTIzNDUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwNSc6Ompzb25iOjpmbG9hdDQsICAoJ3siYSI6IDEyMzQ1LjAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDV9Jzo6anNvbmItPidhJyk6OmZsb2F0NDsKKyBmbG9h dDQgfCBmbG9hdDQgCistLS0tLS0tLSstLS0tLS0tLQorICAxMjM0NSB8ICAxMjM0NQogKDEgcm93 KQogCi1zZWxlY3QgJzEyMzQ1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDUnOjpqc29uYjo6ZmxvYXQ4OwotIGZsb2F0OCAKLS0tLS0tLS0tCi0gIDEyMzQ1Citz ZWxlY3QgJzEyMzQ1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDUnOjpqc29uYjo6ZmxvYXQ4LCAoJ3siYSI6IDEyMzQ1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDV9Jzo6anNvbmItPidhJyk6OmZsb2F0ODsKKyBmbG9hdDgg fCBmbG9hdDggCistLS0tLS0tLSstLS0tLS0tLQorICAxMjM0NSB8ICAxMjM0NQogKDEgcm93KQog Ci1zZWxlY3QgJzEyMzQ1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDUnOjpqc29uYjo6aW50MjsKLSBpbnQyICAKLS0tLS0tLS0KLSAxMjM0NQorc2VsZWN0ICcx MjM0NS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1Jzo6anNv bmI6OmludDIsICgneyJhIjogMTIzNDUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwNX0nOjpqc29uYi0+J2EnKTo6aW50MjsKKyBpbnQyICB8IGludDIgIAorLS0t LS0tLSstLS0tLS0tCisgMTIzNDUgfCAxMjM0NQogKDEgcm93KQogCi1zZWxlY3QgJzEyMzQ1LjAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUnOjpqc29uYjo6aW50 NDsKLSBpbnQ0ICAKLS0tLS0tLS0KLSAxMjM0NQorc2VsZWN0ICcxMjM0NS4wMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1Jzo6anNvbmI6OmludDQsICgneyJhIjog MTIzNDUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNX0nOjpq c29uYi0+J2EnKTo6aW50NDsKKyBpbnQ0ICB8IGludDQgIAorLS0tLS0tLSstLS0tLS0tCisgMTIz NDUgfCAxMjM0NQogKDEgcm93KQogCi1zZWxlY3QgJzEyMzQ1LjAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUnOjpqc29uYjo6aW50ODsKLSBpbnQ4ICAKLS0tLS0t LS0KLSAxMjM0NQorc2VsZWN0ICcxMjM0NS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDA1Jzo6anNvbmI6OmludDgsICgneyJhIjogMTIzNDUuMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNX0nOjpqc29uYi0+J2EnKTo6aW50ODsK KyBpbnQ4ICB8IGludDggIAorLS0tLS0tLSstLS0tLS0tCisgMTIzNDUgfCAxMjM0NQogKDEgcm93 KQogCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9qc29uYi5zcWwgYi9zcmMvdGVz dC9yZWdyZXNzL3NxbC9qc29uYi5zcWwKaW5kZXggZTRiN2NkZjcwM2QuLjVmZWNlOTg3YmYwIDEw MDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9qc29uYi5zcWwKKysrIGIvc3JjL3Rlc3Qv cmVncmVzcy9zcWwvanNvbmIuc3FsCkBAIC0xNTQsNiArMTU0LDcgQEAgQ1JFQVRFIFRFTVAgVEFC TEUgdGVzdF9qc29uYiAoCiAKIElOU0VSVCBJTlRPIHRlc3RfanNvbmIgVkFMVUVTCiAoJ3NjYWxh cicsJyJhIHNjYWxhciInKSwKKygnc2NhbGFyaW50JywnMicpLAogKCdhcnJheScsJ1siemVybyIs ICJvbmUiLCJ0d28iLG51bGwsImZvdXIiLCJmaXZlIiwgWzEsMiwzXSx7ImYxIjo5fV0nKSwKICgn b2JqZWN0JywneyJmaWVsZDEiOiJ2YWwxIiwiZmllbGQyIjoidmFsMiIsImZpZWxkMyI6bnVsbCwg ImZpZWxkNCI6IDQsICJmaWVsZDUiOiBbMSwyLDNdLCAiZmllbGQ2IjogeyJmMSI6OX19Jyk7CiAK QEAgLTE2Niw3ICsxNjcsMTAgQEAgU0VMRUNUIHRlc3RfanNvbiAtPj4gJ2ZpZWxkMicgRlJPTSB0 ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlwZSA9ICdzY2FsYXInOwogU0VMRUNUIHRlc3RfanNvbiAt Pj4gJ2ZpZWxkMicgRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlwZSA9ICdhcnJheSc7CiBT RUxFQ1QgdGVzdF9qc29uIC0+PiAnZmllbGQyJyBGUk9NIHRlc3RfanNvbmIgV0hFUkUganNvbl90 eXBlID0gJ29iamVjdCc7CiAKLVNFTEVDVCB0ZXN0X2pzb24gLT4gMiBGUk9NIHRlc3RfanNvbmIg V0hFUkUganNvbl90eXBlID0gJ3NjYWxhcic7CitTRUxFQ1QgdGVzdF9qc29uIC0+IDIsIHRlc3Rf anNvbiAtPiAwIEZST00gdGVzdF9qc29uYiBXSEVSRSBqc29uX3R5cGUgPSAnc2NhbGFyJzsKK2V4 cGxhaW4gKHZlcmJvc2UsIGNvc3RzIG9mZikKK1NFTEVDVCAodGVzdF9qc29uIC0+IDApOjppbnQ0 LCB0ZXN0X2pzb24gLT4gMCBGUk9NIHRlc3RfanNvbmIgV0hFUkUganNvbl90eXBlID0gJ3NjYWxh cmludCc7CitTRUxFQ1QgdGVzdF9qc29uIC0+IDAgRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25f dHlwZSA9ICdzY2FsYXJpbnQnOwogU0VMRUNUIHRlc3RfanNvbiAtPiAyIEZST00gdGVzdF9qc29u YiBXSEVSRSBqc29uX3R5cGUgPSAnYXJyYXknOwogU0VMRUNUIHRlc3RfanNvbiAtPiA5IEZST00g dGVzdF9qc29uYiBXSEVSRSBqc29uX3R5cGUgPSAnYXJyYXknOwogU0VMRUNUIHRlc3RfanNvbiAt PiAyIEZST00gdGVzdF9qc29uYiBXSEVSRSBqc29uX3R5cGUgPSAnb2JqZWN0JzsKQEAgLTQ5MSw2 ICs0OTUsNyBAQCBTRUxFQ1QgJ3siZjIiOlsiZjMiLDFdLCJmNCI6eyJmNSI6OTksImY2Ijoic3Ry aW5neSJ9fSc6Ompzb25iIz4+YXJyYXlbJ2YyJywnMSddOwogCiAtLSBjb3JuZXIgY2FzZXMgZm9y IHNhbWUKIHNlbGVjdCAneyJhIjogeyJiIjp7ImMiOiAiZm9vIn19fSc6Ompzb25iICM+ICd7fSc7 CitzZWxlY3QgKCcyJzo6anNvbmIgIz4gJ3t9Jyk6OmludDIsICgneyJhIjoyfSc6Ompzb25iICM+ ICd7ImIifScpLCAoJ3siYSI6Mn0nOjpqc29uYiAjPiAneyJiIn0nKTo6aW50MjsKIHNlbGVjdCAn WzEsMiwzXSc6Ompzb25iICM+ICd7fSc7CiBzZWxlY3QgJyJmb28iJzo6anNvbmIgIz4gJ3t9JzsK IHNlbGVjdCAnNDInOjpqc29uYiAjPiAne30nOwpAQCAtMTQ5NiwyMyArMTUwMSwyNyBAQCBzZWxl Y3QgdHNfaGVhZGxpbmUoJ3t9Jzo6anNvbmIsIHRzcXVlcnkoJ2FhYSAmIGJiYicpKTsKIHNlbGVj dCB0c19oZWFkbGluZSgnW10nOjpqc29uYiwgdHNxdWVyeSgnYWFhICYgYmJiJykpOwogCiAtLSBj YXN0cwotc2VsZWN0ICd0cnVlJzo6anNvbmI6OmJvb2w7CitzZWxlY3QgJ3RydWUnOjpqc29uYjo6 Ym9vbCwgKCd7ImEiOiB0cnVlfSc6Ompzb25iLT4nYScpOjpib29sOwogc2VsZWN0ICdbXSc6Ompz b25iOjpib29sOwotc2VsZWN0ICcxLjAnOjpqc29uYjo6ZmxvYXQ7CitzZWxlY3QgKCd7ImEiOiBb XX0nOjpqc29uYi0+J2EnKTo6Ym9vbDsKK3NlbGVjdCAnMS4wJzo6anNvbmI6OmZsb2F0LCAoJ3si YSI6IDEuMH0nOjpqc29uYi0+J2EnKTo6ZmxvYXQ7CiBzZWxlY3QgJ1sxLjBdJzo6anNvbmI6OmZs b2F0Owotc2VsZWN0ICcxMjM0NSc6Ompzb25iOjppbnQ0Oworc2VsZWN0ICgneyJhIjogWzEuMF19 Jzo6anNvbmItPidhJyk6OmZsb2F0Oworc2VsZWN0ICcxMjM0NSc6Ompzb25iOjppbnQ0LCAgKCd7 ImEiOiAxMjM0NX0nOjpqc29uYi0+J2EnKTo6aW50NDsKIHNlbGVjdCAnImhlbGxvIic6Ompzb25i OjppbnQ0Owotc2VsZWN0ICcxMjM0NSc6Ompzb25iOjpudW1lcmljOworc2VsZWN0ICgneyJhIjog ImhlbGxvIn0nOjpqc29uYi0+J2EnKTo6aW50NDsKKworc2VsZWN0ICcxMjM0NSc6Ompzb25iOjpu dW1lcmljLCAoJ3siYSI6IDEyMzQ1fSc6Ompzb25iLT4nYScpOjpudW1lcmljOwogc2VsZWN0ICd7 fSc6Ompzb25iOjpudW1lcmljOwotc2VsZWN0ICcxMjM0NS4wNSc6Ompzb25iOjpudW1lcmljOwot c2VsZWN0ICcxMjM0NS4wNSc6Ompzb25iOjpmbG9hdDQ7Ci1zZWxlY3QgJzEyMzQ1LjA1Jzo6anNv bmI6OmZsb2F0ODsKLXNlbGVjdCAnMTIzNDUuMDUnOjpqc29uYjo6aW50MjsKLXNlbGVjdCAnMTIz NDUuMDUnOjpqc29uYjo6aW50NDsKLXNlbGVjdCAnMTIzNDUuMDUnOjpqc29uYjo6aW50ODsKLXNl bGVjdCAnMTIzNDUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw NSc6Ompzb25iOjpudW1lcmljOwotc2VsZWN0ICcxMjM0NS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1Jzo6anNvbmI6OmZsb2F0NDsKLXNlbGVjdCAnMTIzNDUu MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNSc6Ompzb25iOjpm bG9hdDg7Ci1zZWxlY3QgJzEyMzQ1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDUnOjpqc29uYjo6aW50MjsKLXNlbGVjdCAnMTIzNDUuMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNSc6Ompzb25iOjppbnQ0Owotc2VsZWN0ICcx MjM0NS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1Jzo6anNv bmI6OmludDg7CitzZWxlY3QgJzEyMzQ1LjA1Jzo6anNvbmI6Om51bWVyaWMsICgneyJhIjogMTIz NDUuMDV9Jzo6anNvbmItPidhJyk6Om51bWVyaWM7CitzZWxlY3QgJzEyMzQ1LjA1Jzo6anNvbmI6 OmZsb2F0NCwgKCd7ImEiOiAxMjM0NS4wNX0nOjpqc29uYi0+J2EnKTo6ZmxvYXQ0Oworc2VsZWN0 ICcxMjM0NS4wNSc6Ompzb25iOjpmbG9hdDgsICgneyJhIjogMTIzNDUuMDV9Jzo6anNvbmItPidh Jyk6OmZsb2F0ODsKK3NlbGVjdCAnMTIzNDUuMDUnOjpqc29uYjo6aW50MiwgKCd7ImEiOiAxMjM0 NS4wNX0nOjpqc29uYi0+J2EnKTo6aW50MjsKK3NlbGVjdCAnMTIzNDUuMDUnOjpqc29uYjo6aW50 NCwgKCd7ImEiOiAxMjM0NS4wNX0nOjpqc29uYi0+J2EnKTo6aW50NDsKK3NlbGVjdCAnMTIzNDUu MDUnOjpqc29uYjo6aW50OCwgKCd7ImEiOiAxMjM0NS4wNX0nOjpqc29uYi0+J2EnKTo6aW50ODsK K3NlbGVjdCAnMTIzNDUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwNSc6Ompzb25iOjpudW1lcmljLCAoJ3siYSI6IDEyMzQ1LjAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDV9Jzo6anNvbmItPidhJyk6Om51bWVyaWM7CitzZWxl Y3QgJzEyMzQ1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUn Ojpqc29uYjo6ZmxvYXQ0LCAgKCd7ImEiOiAxMjM0NS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDA1fSc6Ompzb25iLT4nYScpOjpmbG9hdDQ7CitzZWxlY3QgJzEy MzQ1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUnOjpqc29u Yjo6ZmxvYXQ4LCAoJ3siYSI6IDEyMzQ1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDV9Jzo6anNvbmItPidhJyk6OmZsb2F0ODsKK3NlbGVjdCAnMTIzNDUuMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNSc6Ompzb25iOjppbnQy LCAoJ3siYSI6IDEyMzQ1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDV9Jzo6anNvbmItPidhJyk6OmludDI7CitzZWxlY3QgJzEyMzQ1LjAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUnOjpqc29uYjo6aW50NCwgKCd7ImEiOiAx MjM0NS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1fSc6Ompz b25iLT4nYScpOjppbnQ0Oworc2VsZWN0ICcxMjM0NS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDA1Jzo6anNvbmI6OmludDgsICgneyJhIjogMTIzNDUuMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNX0nOjpqc29uYi0+J2EnKTo6 aW50ODsKLS0gCjIuMjEuMAoK --000000000000a775c50602e3e852--