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 1tobsJ-00D3ya-Jt for pgsql-hackers@arkaria.postgresql.org; Sun, 02 Mar 2025 05:28:28 +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 1tobsI-00EzS8-NE for pgsql-hackers@arkaria.postgresql.org; Sun, 02 Mar 2025 05:28:25 +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 1tobsI-00EzS0-6k for pgsql-hackers@lists.postgresql.org; Sun, 02 Mar 2025 05:28:24 +0000 Received: from mail-ej1-x62c.google.com ([2a00:1450:4864:20::62c]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1tobsC-000Te8-1i for pgsql-hackers@postgresql.org; Sun, 02 Mar 2025 05:28:24 +0000 Received: by mail-ej1-x62c.google.com with SMTP id a640c23a62f3a-aaee2c5ee6eso490476766b.1 for ; Sat, 01 Mar 2025 21:28:21 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1740893300; x=1741498100; darn=postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=9YThtqwCHc37rFzqg9Ms3LS18AmJBc8YbA4+EDWS4Ig=; b=HjVlswk91+7gvejysaKOgsSVhSoeahAHHjQSVN/42QxI0T/h66i0nrrazsYa6EAwZV 5zeVFZweHeCMUszJEHtjDDoidi98KRcWfkIziTEnqZEJ5+GuA0WqoTdzJJdSVwQKz2O8 Viuc0MJr7KOrJ0f5Yo7kPk2DOHFQ5oDRhKdLekr4qh5SyJL4Zsf925gMqFlTp8VbWGtU Rejd6WibP85ZWhzqYGx1zwcYJJd79VL5p7WMVrHnyf2UOWnXzamjn31y8Fn/udfGVA40 l0quaFTCqtBk2qXYW8iC8itqgVVsQT6owjL70R7apKtI5VKOSfgjki0IKQXAsqWE1dSw G7Ag== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740893300; x=1741498100; 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=9YThtqwCHc37rFzqg9Ms3LS18AmJBc8YbA4+EDWS4Ig=; b=NZL0GGUA/UjJuurMODdfzWKcPRgXIWG9MAKGott09sjEOA+189gbJZKbafAc6XPsHp EfFaLFcLe1DpVmO1dBdmPux+RlPvznG/OdlHrsgsWrbgF5LCg07G95GqsKoAWuXZf6DM lx424+W44LB3Xx1xTaN2Ip3mjT4ZKrncyCIEKDp3FD8mA9HhC0gUUnSdLX7QkWitcwlF Prd/t72V3SRlzgaNV+ii6BAWs0MHJCNNNhNVUplaCBpjqQpfQblugS5jPm0x+rlAKgya 5OrGq1tuK5WxESclXIcqmGvGEzuz0255Nco4+jYdbs05S72lyHEG04/u0orFky2Ue65T 2E1A== X-Forwarded-Encrypted: i=1; AJvYcCV3pCRjo9A0f5XPwauqfIY0Onz1KbBWgz7mzrq1OKjPgClDP89pMLwal/8nDQRXLCyvie/oZGLAzeift0Od@postgresql.org X-Gm-Message-State: AOJu0YxqELrY6hZDWuoeMZcAU/u94Gq27l161f9+Sm3kM4DV8Jfj0gB8 o8pN/Eh01asun/ZK7+vuLfSPmepPQ4Brc2//amjJtImS82+uCgxrl4ncN6wLsnylKUr2Y8Kd4+o hPLppFjzvje4v7p87hi95iOix/5A= X-Gm-Gg: ASbGncssZr6VgBPWx8V5ukIFI0zlDD91y0wbSdFQYNXInFiJEezW3zn3ZppOW3vmH9n nSR+aZEOfNkOJannqsKxSRX+ZkeHKJCfJeAryg9b2Ah8dPiqZzRzXlcoPBtrwIVeIF0U1YXqNMm ntce4RFKdNkVLe0K71DHNFsTvGJeU= X-Google-Smtp-Source: AGHT+IHx+/ZPUOigvoc5R7pB6TxZLZwfbcEdKq7gNrzv0+TcgkCG/mdMOtMiwQ8RGEGw0axM2lgVUTWvoyzsoWhkNXg= X-Received: by 2002:a17:906:7fd6:b0:abf:46cd:5e3f with SMTP id a640c23a62f3a-abf46cd7414mr647704966b.16.1740893299410; Sat, 01 Mar 2025 21:28:19 -0800 (PST) MIME-Version: 1.0 References: <8620df11-96e4-4ca3-8f3c-33a479260961@joeconway.com> <4162f7f7-6fd6-4720-98e2-89f80e3de2ed@joeconway.com> <153b71b8-b6fb-4930-aaff-a7334cb3f6d6@joeconway.com> <8ef5f5d6-38db-4624-8eef-2d96c9eba9d4@joeconway.com> In-Reply-To: From: Junwang Zhao Date: Sun, 2 Mar 2025 13:28:07 +0800 X-Gm-Features: AQ5f1JoUhY-X1BBXY7kFHSOwTbFkhGI6VnLNaiGgbCsQFs4Rw45LwMcPklmkgIM Message-ID: Subject: Re: Emitting JSON to file using COPY TO To: jian he Cc: Joe Conway , "Andrey M. Borodin" , Dean Rasheed , Daniel Verite , Andrew Dunstan , Davin Shearer , PostgreSQL-development Content-Type: multipart/mixed; boundary="000000000000b446c8062f554e40" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000b446c8062f554e40 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Mon, Jan 27, 2025 at 4:17=E2=80=AFPM jian he wrote: > > hi. > > There are two ways we can use to represent the new copy format: json. > 1. > typedef struct CopyFormatOptions > { > bool binary; /* binary format? */ > bool freeze; /* freeze rows on loading? */ > bool csv_mode; /* Comma Separated Value format? */ > bool json_mode; /* JSON format? */ > ... > } > > 2. > typedef struct CopyFormatOptions > { > CopyFormat format; /* format of the COPY operation */ > ..... > } > > typedef enum CopyFormat > { > COPY_FORMAT_TEXT =3D 0, > COPY_FORMAT_BINARY, > COPY_FORMAT_CSV, > COPY_FORMAT_JSON, > } CopyFormat; > > both the sizeof(cstate->opts) (CopyToStateData.CopyFormatOptions) is 184. > so the struct size will not influence the performance. > > I also did some benchmarks when using CopyFormat. > the following are the benchmarks info: > -------------------------------------------------------------------------= ------------------------------ > create unlogged table t as select g from generate_series(1, 1_000_000) g; > > build_type=3Drelease patch: > copy t to '/dev/null' json \watch i=3D0.1 c=3D10 > last execution Time: 108.741 ms > > copy t to '/dev/null' (format text) \watch i=3D0.1 c=3D10 > last execution Time: 42.600 ms > > build_type=3Drelease master: > copy t to '/dev/null' (format text) \watch i=3D0.1 c=3D10 > last execution Time Time: 42.948 ms > > --------------------------------------------------------- > so a new version is attached, using the struct CopyFormatOptions. > > changes mainly in CopyOneRowTo. > now it is: > """" > if(!cstate->rel) > { > memcpy(TupleDescAttr(slot->tts_tupleDescriptor, 0), > TupleDescAttr(cstate->queryDesc->tupDesc, 0), > cstate->queryDesc->tupDesc->natts * > sizeof(FormData_pg_attribute)); > for (int i =3D 0; i < cstate->queryDesc->tupDesc->natts; i++) > populate_compact_attribute(slot->tts_tupleDescriptor, i); > BlessTupleDesc(slot->tts_tupleDescriptor); > } > """" > reasoning for change: > for composite_to_json to construct json key, we only need > FormData_pg_attribute.attname > but code path > composite_to_json->fastgetattr->TupleDescCompactAttr->verify_compact_attr= ibute > means we also need to call populate_compact_attribute to populate > other attributes. > > v14-0001-Introduce-CopyFormat-and-replace-csv_mode-and-bi.patch, > author is by Joel Jacobson. > As I mentioned in above, > replacing 3 bool fields by an enum didn't change the struct CopyFormatOpt= ions. > but consolidated 3 bool fields into one enum to make code more lean. > I think the refactoring (v14-0001) is worth it. I've refactored the patch to adapt the newly introduced CopyToRoutine struc= t, see 2e4127b6d2. v15-0001 is the merged one of v14-0001 and v14-0002 There are some other ongoing *copy to/from* refactors[1] which we can benef= it to make the code cleaner, especially the checks done in ProcessCopyOptions. [1]: https://www.postgresql.org/message-id/20250301.115009.4248444077366475= 98.kou%40clear-code.com --=20 Regards Junwang Zhao --000000000000b446c8062f554e40 Content-Type: application/octet-stream; name="v15-0002-Add-option-force_array-for-COPY-JSON-FORMAT.patch" Content-Disposition: attachment; filename="v15-0002-Add-option-force_array-for-COPY-JSON-FORMAT.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m7r6ov1u0 RnJvbSBhZWUxZGVhMWEwYWI1ZDRkMDU4YTFjYzg3NjY2NjdjNzhmNzdkMTc1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKdW53YW5nIFpoYW8gPHpoandwa3VAZ21haWwuY29tPgpEYXRl OiBTdW4sIDIgTWFyIDIwMjUgMDQ6NDE6NDggKzAwMDAKU3ViamVjdDogW1BBVENIIHYxNSAyLzJd IEFkZCBvcHRpb24gZm9yY2VfYXJyYXkgZm9yIENPUFkgSlNPTiBGT1JNQVQKCmZvcmNlX2FycmF5 IG9wdGlvbiBjYW4gb25seSBiZSB1c2VkIGluIENPUFkgVE8gd2l0aCBKU09OIGZvcm1hdC4KaXQg bWFrZSB0aGUgb3V0cHV0IGpzb24gb3V0cHV0IGJlaGF2ZSBsaWtlIGpzb24gYXJyYXkgdHlwZS4K CnJlZmFjdG9yZWQgYnkgSnVud2FuZyBaaGFvIHRvIGFkYXB0IHRoZSBuZXdseSBpbnRyb2R1Y2Vk IENvcHlUb1JvdXRpbmUgc3RydWN0KDJlNDEyN2I2ZDIpLgoKQXV0aG9yOiBKb2UgQ29ud2F5IDxt YWlsQGpvZWNvbndheS5jb20+CmRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vQ0FMdmZV a0J4VFl5NXVXUEZWd3BrXzdpaTJ6Z1QwN3QzZC15Ul9jeTRzZnJyTFUlM0RrY2clNDBtYWlsLmdt YWlsLmNvbQpkaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tLzZhMDQ2MjhkLTBkNTMtNDFk OS05ZTM1LTVhOGRjMzAyYzM0Y0Bqb2Vjb253YXkuY29tCi0tLQogZG9jL3NyYy9zZ21sL3JlZi9j b3B5LnNnbWwgICAgICAgICB8IDE0ICsrKysrKysrKysrCiBzcmMvYmFja2VuZC9jb21tYW5kcy9j b3B5LmMgICAgICAgIHwgMTMgKysrKysrKysrKwogc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weXRv LmMgICAgICB8IDM4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLQogc3JjL2Jpbi9wc3Fs L3RhYi1jb21wbGV0ZS5pbi5jICAgICB8ICAyICstCiBzcmMvaW5jbHVkZS9jb21tYW5kcy9jb3B5 LmggICAgICAgIHwgIDEgKwogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jb3B5Lm91dCB8IDIz ICsrKysrKysrKysrKysrKysrKwogc3JjL3Rlc3QvcmVncmVzcy9zcWwvY29weS5zcWwgICAgICB8 ICA4ICsrKysrKysKIDcgZmlsZXMgY2hhbmdlZCwgOTUgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlv bnMoLSkKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVmL2NvcHkuc2dtbCBiL2RvYy9zcmMv c2dtbC9yZWYvY29weS5zZ21sCmluZGV4IDljNTE5ZDhhOWUyLi43YjNjOTEzZDRlZSAxMDA2NDQK LS0tIGEvZG9jL3NyYy9zZ21sL3JlZi9jb3B5LnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9j b3B5LnNnbWwKQEAgLTQzLDYgKzQzLDcgQEAgQ09QWSB7IDxyZXBsYWNlYWJsZSBjbGFzcz0icGFy YW1ldGVyIj50YWJsZV9uYW1lPC9yZXBsYWNlYWJsZT4gWyAoIDxyZXBsYWNlYWJsZQogICAgIEZP UkNFX1FVT1RFIHsgKCA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+Y29sdW1uX25hbWU8 L3JlcGxhY2VhYmxlPiBbLCAuLi5dICkgfCAqIH0KICAgICBGT1JDRV9OT1RfTlVMTCB7ICggPHJl cGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmNvbHVtbl9uYW1lPC9yZXBsYWNlYWJsZT4gWywg Li4uXSApIHwgKiB9CiAgICAgRk9SQ0VfTlVMTCB7ICggPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJh bWV0ZXIiPmNvbHVtbl9uYW1lPC9yZXBsYWNlYWJsZT4gWywgLi4uXSApIHwgKiB9CisgICAgRk9S Q0VfQVJSQVkgWyA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+Ym9vbGVhbjwvcmVwbGFj ZWFibGU+IF0KICAgICBPTl9FUlJPUiA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+ZXJy b3JfYWN0aW9uPC9yZXBsYWNlYWJsZT4KICAgICBSRUpFQ1RfTElNSVQgPHJlcGxhY2VhYmxlIGNs YXNzPSJwYXJhbWV0ZXIiPm1heGVycm9yPC9yZXBsYWNlYWJsZT4KICAgICBFTkNPRElORyAnPHJl cGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmVuY29kaW5nX25hbWU8L3JlcGxhY2VhYmxlPicK QEAgLTM5Miw2ICszOTMsMTkgQEAgQ09QWSB7IDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVy Ij50YWJsZV9uYW1lPC9yZXBsYWNlYWJsZT4gWyAoIDxyZXBsYWNlYWJsZQogICAgIDwvbGlzdGl0 ZW0+CiAgICA8L3Zhcmxpc3RlbnRyeT4KIAorICAgPHZhcmxpc3RlbnRyeT4KKyAgICA8dGVybT48 bGl0ZXJhbD5GT1JDRV9BUlJBWTwvbGl0ZXJhbD48L3Rlcm0+CisgICAgPGxpc3RpdGVtPgorICAg ICA8cGFyYT4KKyAgICAgIEZvcmNlIG91dHB1dCBvZiBzcXVhcmUgYnJhY2tldHMgYXMgYXJyYXkg ZGVjb3JhdGlvbnMgYXQgdGhlIGJlZ2lubmluZworICAgICAgYW5kIGVuZCBvZiBvdXRwdXQsIGFu ZCBjb21tYXMgYmV0d2VlbiB0aGUgcm93cy4gSXQgaXMgYWxsb3dlZCBvbmx5IGluCisgICAgICA8 Y29tbWFuZD5DT1BZIFRPPC9jb21tYW5kPiwgYW5kIG9ubHkgd2hlbiB1c2luZworICAgICAgPGxp dGVyYWw+SlNPTjwvbGl0ZXJhbD4gZm9ybWF0LiBUaGUgZGVmYXVsdCBpcworICAgICAgPGxpdGVy YWw+ZmFsc2U8L2xpdGVyYWw+LgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwv dmFybGlzdGVudHJ5PgorCiAgICA8dmFybGlzdGVudHJ5PgogICAgIDx0ZXJtPjxsaXRlcmFsPk9O X0VSUk9SPC9saXRlcmFsPjwvdGVybT4KICAgICA8bGlzdGl0ZW0+CmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9jb21tYW5kcy9jb3B5LmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5LmMKaW5k ZXggYjZmNzRjNzk4ZDAuLjdiNGM2NGVhOTdlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21t YW5kcy9jb3B5LmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weS5jCkBAIC01MDQsNiAr NTA0LDcgQEAgUHJvY2Vzc0NvcHlPcHRpb25zKFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAlib29sCQlv bl9lcnJvcl9zcGVjaWZpZWQgPSBmYWxzZTsKIAlib29sCQlsb2dfdmVyYm9zaXR5X3NwZWNpZmll ZCA9IGZhbHNlOwogCWJvb2wJCXJlamVjdF9saW1pdF9zcGVjaWZpZWQgPSBmYWxzZTsKKwlib29s CQlmb3JjZV9hcnJheV9zcGVjaWZpZWQgPSBmYWxzZTsKIAlMaXN0Q2VsbCAgICpvcHRpb247CiAK IAkvKiBTdXBwb3J0IGV4dGVybmFsIHVzZSBmb3Igb3B0aW9uIHNhbml0eSBjaGVja2luZyAqLwpA QCAtNjU4LDYgKzY1OSwxMyBAQCBQcm9jZXNzQ29weU9wdGlvbnMoUGFyc2VTdGF0ZSAqcHN0YXRl LAogCQkJCQkJCQlkZWZlbC0+ZGVmbmFtZSksCiAJCQkJCQkgcGFyc2VyX2VycnBvc2l0aW9uKHBz dGF0ZSwgZGVmZWwtPmxvY2F0aW9uKSkpOwogCQl9CisJCWVsc2UgaWYgKHN0cmNtcChkZWZlbC0+ ZGVmbmFtZSwgImZvcmNlX2FycmF5IikgPT0gMCkKKwkJeworCQkJaWYgKGZvcmNlX2FycmF5X3Nw ZWNpZmllZCkKKwkJCQllcnJvckNvbmZsaWN0aW5nRGVmRWxlbShkZWZlbCwgcHN0YXRlKTsKKwkJ CWZvcmNlX2FycmF5X3NwZWNpZmllZCA9IHRydWU7CisJCQlvcHRzX291dC0+Zm9yY2VfYXJyYXkg PSBkZWZHZXRCb29sZWFuKGRlZmVsKTsKKwkJfQogCQllbHNlIGlmIChzdHJjbXAoZGVmZWwtPmRl Zm5hbWUsICJvbl9lcnJvciIpID09IDApCiAJCXsKIAkJCWlmIChvbl9lcnJvcl9zcGVjaWZpZWQp CkBAIC05MDYsNiArOTE0LDExIEBAIFByb2Nlc3NDb3B5T3B0aW9ucyhQYXJzZVN0YXRlICpwc3Rh dGUsCiAJCQkJZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKIAkJCQll cnJtc2coIkNPUFkganNvbiBtb2RlIGNhbm5vdCBiZSB1c2VkIHdpdGggJXMiLCAiQ09QWSBGUk9N IikpOwogCisJaWYgKG9wdHNfb3V0LT5mb3JtYXQgIT0gQ09QWV9GT1JNQVRfSlNPTiAmJiBvcHRz X291dC0+Zm9yY2VfYXJyYXkpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJZXJyY29kZShFUlJDT0RF X0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQllcnJtc2coIkNPUFkgJXMgY2FuIG9ubHkg dXNlZCB3aXRoIEpTT04gbW9kZSIsICJGT1JDRV9BUlJBWSIpKTsKKwogCWlmIChvcHRzX291dC0+ ZGVmYXVsdF9wcmludCkKIAl7CiAJCWlmICghaXNfZnJvbSkKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL2NvcHl0by5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weXRvLmMKaW5k ZXggNjliN2ZkMTFlMDMuLjg2ODQyYjc2NGU4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21t YW5kcy9jb3B5dG8uYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5dG8uYwpAQCAtODQs NiArODQsNyBAQCB0eXBlZGVmIHN0cnVjdCBDb3B5VG9TdGF0ZURhdGEKIAlMaXN0CSAgICphdHRu dW1saXN0OwkJLyogaW50ZWdlciBsaXN0IG9mIGF0dG51bXMgdG8gY29weSAqLwogCWNoYXIJICAg KmZpbGVuYW1lOwkJLyogZmlsZW5hbWUsIG9yIE5VTEwgZm9yIFNURE9VVCAqLwogCWJvb2wJCWlz X3Byb2dyYW07CQkvKiBpcyAnZmlsZW5hbWUnIGEgcHJvZ3JhbSB0byBwb3Blbj8gKi8KKwlib29s CQlqc29uX3Jvd19kZWxpbV9uZWVkZWQ7CS8qIG5lZWQgZGVsaW1pdGVyIHRvIHN0YXJ0IG5leHQg anNvbiBhcnJheSBlbGVtZW50ICovCiAJY29weV9kYXRhX2Rlc3RfY2IgZGF0YV9kZXN0X2NiOyAv KiBmdW5jdGlvbiBmb3Igd3JpdGluZyBkYXRhICovCiAKIAlDb3B5Rm9ybWF0T3B0aW9ucyBvcHRz OwpAQCAtMTI4LDYgKzEyOSw3IEBAIHN0YXRpYyB2b2lkIENvcHlUb1RleHRMaWtlT25lUm93KENv cHlUb1N0YXRlIGNzdGF0ZSwgVHVwbGVUYWJsZVNsb3QgKnNsb3QsCiAJCQkJCQkJCSBib29sIGlz X2Nzdik7CiBzdGF0aWMgdm9pZCBDb3B5VG9UZXh0TGlrZUVuZChDb3B5VG9TdGF0ZSBjc3RhdGUp Owogc3RhdGljIHZvaWQgQ29weVRvSnNvbk9uZVJvdyhDb3B5VG9TdGF0ZSBjc3RhdGUsIFR1cGxl VGFibGVTbG90ICpzbG90KTsKK3N0YXRpYyB2b2lkIENvcHlUb0pzb25FbmQoQ29weVRvU3RhdGUg Y3N0YXRlKTsKIHN0YXRpYyB2b2lkIENvcHlUb0JpbmFyeVN0YXJ0KENvcHlUb1N0YXRlIGNzdGF0 ZSwgVHVwbGVEZXNjIHR1cERlc2MpOwogc3RhdGljIHZvaWQgQ29weVRvQmluYXJ5T3V0RnVuYyhD b3B5VG9TdGF0ZSBjc3RhdGUsIE9pZCBhdHR0eXBpZCwgRm1nckluZm8gKmZpbmZvKTsKIHN0YXRp YyB2b2lkIENvcHlUb0JpbmFyeU9uZVJvdyhDb3B5VG9TdGF0ZSBjc3RhdGUsIFR1cGxlVGFibGVT bG90ICpzbG90KTsKQEAgLTE3MSw3ICsxNzMsNyBAQCBzdGF0aWMgY29uc3QgQ29weVRvUm91dGlu ZSBDb3B5VG9Sb3V0aW5lSnNvbiA9IHsKIAkuQ29weVRvU3RhcnQgPSBDb3B5VG9UZXh0TGlrZVN0 YXJ0LAogCS5Db3B5VG9PdXRGdW5jID0gQ29weVRvVGV4dExpa2VPdXRGdW5jLAogCS5Db3B5VG9P bmVSb3cgPSBDb3B5VG9Kc29uT25lUm93LAotCS5Db3B5VG9FbmQgPSBDb3B5VG9UZXh0TGlrZUVu ZCwKKwkuQ29weVRvRW5kID0gQ29weVRvSnNvbkVuZCwKIH07CiAKIC8qIGJpbmFyeSBmb3JtYXQg Ki8KQEAgLTIzNSw2ICsyMzcsMTYgQEAgQ29weVRvVGV4dExpa2VTdGFydChDb3B5VG9TdGF0ZSBj c3RhdGUsIFR1cGxlRGVzYyB0dXBEZXNjKQogCiAJCUNvcHlTZW5kVGV4dExpa2VFbmRPZlJvdyhj c3RhdGUpOwogCX0KKworCS8qCisJICogSWYgSlNPTiBoYXMgYmVlbiByZXF1ZXN0ZWQsIGFuZCBG T1JDRV9BUlJBWSBoYXMgYmVlbiBzcGVjaWZpZWQgc2VuZAorCSAqIHRoZSBvcGVuaW5nIGJyYWNr ZXQuCisJICovCisJaWYgKGNzdGF0ZS0+b3B0cy5mb3JtYXQgPT0gQ09QWV9GT1JNQVRfSlNPTiAm JiBjc3RhdGUtPm9wdHMuZm9yY2VfYXJyYXkpCisJeworCQlDb3B5U2VuZENoYXIoY3N0YXRlLCAn WycpOworCQlDb3B5U2VuZFRleHRMaWtlRW5kT2ZSb3coY3N0YXRlKTsKKwl9CiB9CiAKIC8qCkBA IC0zNDUsMTEgKzM1NywzMSBAQCBDb3B5VG9Kc29uT25lUm93KENvcHlUb1N0YXRlIGNzdGF0ZSwg VHVwbGVUYWJsZVNsb3QgKnNsb3QpCiAJcmVzdWx0ID0gbWFrZVN0cmluZ0luZm8oKTsKIAljb21w b3NpdGVfdG9fanNvbihyb3dkYXRhLCByZXN1bHQsIGZhbHNlKTsKIAorCWlmIChjc3RhdGUtPmpz b25fcm93X2RlbGltX25lZWRlZCAmJiBjc3RhdGUtPm9wdHMuZm9yY2VfYXJyYXkpCisJCUNvcHlT ZW5kQ2hhcihjc3RhdGUsICcsJyk7CisJZWxzZSBpZiAoY3N0YXRlLT5vcHRzLmZvcmNlX2FycmF5 KQorCXsKKwkJLyogZmlyc3Qgcm93IG5lZWRzIG5vIGRlbGltaXRlciAqLworCQlDb3B5U2VuZENo YXIoY3N0YXRlLCAnICcpOworCQljc3RhdGUtPmpzb25fcm93X2RlbGltX25lZWRlZCA9IHRydWU7 CisJfQorCiAJQ29weVNlbmREYXRhKGNzdGF0ZSwgcmVzdWx0LT5kYXRhLCByZXN1bHQtPmxlbik7 CiAKIAlDb3B5U2VuZFRleHRMaWtlRW5kT2ZSb3coY3N0YXRlKTsKIH0KIAorLyogSW1wbGVtZW50 YXRpb24gb2YgdGhlIGVuZCBjYWxsYmFjayBmb3IganNvbiBmb3JtYXQgKi8KK3N0YXRpYyB2b2lk CitDb3B5VG9Kc29uRW5kKENvcHlUb1N0YXRlIGNzdGF0ZSkKK3sKKwlpZiAoY3N0YXRlLT5vcHRz LmZvcmNlX2FycmF5KQorCXsKKwkJQ29weVNlbmRDaGFyKGNzdGF0ZSwgJ10nKTsKKwkJQ29weVNl bmRUZXh0TGlrZUVuZE9mUm93KGNzdGF0ZSk7CisJfQorfQorCiAvKgogICogSW1wbGVtZW50YXRp b24gb2YgdGhlIHN0YXJ0IGNhbGxiYWNrIGZvciBiaW5hcnkgZm9ybWF0LiBTZW5kIGEgaGVhZGVy CiAgKiBmb3IgYSBiaW5hcnkgY29weS4KQEAgLTU1NCw4ICs1ODYsOCBAQCBDb3B5U2VuZEVuZE9m Um93KENvcHlUb1N0YXRlIGNzdGF0ZSkKIH0KIAogLyoKLSAqIFdyYXBwZXIgZnVuY3Rpb24gb2Yg Q29weVNlbmRFbmRPZlJvdyBmb3IgdGV4dCBhbmQgQ1NWIGZvcm1hdHMuIFNlbmRzIHRoZQotICog bGluZSB0ZXJtaW5hdGlvbiBhbmQgZG8gY29tbW9uIGFwcHJvcHJpYXRlIHRoaW5ncyBmb3IgdGhl IGVuZCBvZiByb3cuCisgKiBXcmFwcGVyIGZ1bmN0aW9uIG9mIENvcHlTZW5kRW5kT2ZSb3cgZm9y IHRleHQsIENTViBhbmQganNvbiBmb3JtYXRzLiBTZW5kcworICogdGhlIGxpbmUgdGVybWluYXRp b24gYW5kIGRvIGNvbW1vbiBhcHByb3ByaWF0ZSB0aGluZ3MgZm9yIHRoZSBlbmQgb2Ygcm93Lgog ICovCiBzdGF0aWMgaW5saW5lIHZvaWQKIENvcHlTZW5kVGV4dExpa2VFbmRPZlJvdyhDb3B5VG9T dGF0ZSBjc3RhdGUpCmRpZmYgLS1naXQgYS9zcmMvYmluL3BzcWwvdGFiLWNvbXBsZXRlLmluLmMg Yi9zcmMvYmluL3BzcWwvdGFiLWNvbXBsZXRlLmluLmMKaW5kZXggNjA2OWIxMTg4MzQuLmUwYzc0 MTJlYzBhIDEwMDY0NAotLS0gYS9zcmMvYmluL3BzcWwvdGFiLWNvbXBsZXRlLmluLmMKKysrIGIv c3JjL2Jpbi9wc3FsL3RhYi1jb21wbGV0ZS5pbi5jCkBAIC0zMjc4LDcgKzMyNzgsNyBAQCBtYXRj aF9wcmV2aW91c193b3JkcyhpbnQgcGF0dGVybl9pZCwKIAllbHNlIGlmIChNYXRjaGVzKCJDT1BZ fFxcY29weSIsIE1hdGNoQW55LCAiRlJPTXxUTyIsIE1hdGNoQW55LCAiV0lUSCIsICIoIikpCiAJ CUNPTVBMRVRFX1dJVEgoIkZPUk1BVCIsICJGUkVFWkUiLCAiREVMSU1JVEVSIiwgIk5VTEwiLAog CQkJCQkgICJIRUFERVIiLCAiUVVPVEUiLCAiRVNDQVBFIiwgIkZPUkNFX1FVT1RFIiwKLQkJCQkJ ICAiRk9SQ0VfTk9UX05VTEwiLCAiRk9SQ0VfTlVMTCIsICJFTkNPRElORyIsICJERUZBVUxUIiwK KwkJCQkJICAiRk9SQ0VfTk9UX05VTEwiLCAiRk9SQ0VfTlVMTCIsICJGT1JDRV9BUlJBWSIsICJF TkNPRElORyIsICJERUZBVUxUIiwKIAkJCQkJICAiT05fRVJST1IiLCAiTE9HX1ZFUkJPU0lUWSIp OwogCiAJLyogQ29tcGxldGUgQ09QWSA8c3RoPiBGUk9NfFRPIGZpbGVuYW1lIFdJVEggKEZPUk1B VCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvY29weS5oIGIvc3JjL2luY2x1 ZGUvY29tbWFuZHMvY29weS5oCmluZGV4IDA3ZmNjMmJjOWFjLi5mYThhOGFiN2UzMSAxMDA2NDQK LS0tIGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvY29weS5oCisrKyBiL3NyYy9pbmNsdWRlL2NvbW1h bmRzL2NvcHkuaApAQCAtODksNiArODksNyBAQCB0eXBlZGVmIHN0cnVjdCBDb3B5Rm9ybWF0T3B0 aW9ucwogCUxpc3QJICAgKmZvcmNlX25vdG51bGw7CS8qIGxpc3Qgb2YgY29sdW1uIG5hbWVzICov CiAJYm9vbAkJZm9yY2Vfbm90bnVsbF9hbGw7CS8qIEZPUkNFX05PVF9OVUxMICo/ICovCiAJYm9v bAkgICAqZm9yY2Vfbm90bnVsbF9mbGFnczsJLyogcGVyLWNvbHVtbiBDU1YgRk5OIGZsYWdzICov CisJYm9vbAkJZm9yY2VfYXJyYXk7CS8qIGFkZCBKU09OIGFycmF5IGRlY29yYXRpb25zICovCiAJ TGlzdAkgICAqZm9yY2VfbnVsbDsJCS8qIGxpc3Qgb2YgY29sdW1uIG5hbWVzICovCiAJYm9vbAkJ Zm9yY2VfbnVsbF9hbGw7IC8qIEZPUkNFX05VTEwgKj8gKi8KIAlib29sCSAgICpmb3JjZV9udWxs X2ZsYWdzOwkvKiBwZXItY29sdW1uIENTViBGTiBmbGFncyAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC9jb3B5Lm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv Y29weS5vdXQKaW5kZXggZDllMzA5MzdmZWIuLjdhYTAwMDVmZTdhIDEwMDY0NAotLS0gYS9zcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NvcHkub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvY29weS5vdXQKQEAgLTExMCw2ICsxMTAsMjkgQEAgTElORSAxOiBjb3B5IGNvcHl0ZXN0 IHRvIHN0ZG91dCAoZm9ybWF0IGpzb24sIG9uX2Vycm9yIGlnbm9yZSk7CiBjb3B5IGNvcHl0ZXN0 IGZyb20gc3RkaW4oZm9ybWF0IGpzb24pOwogRVJST1I6ICBDT1BZIGpzb24gbW9kZSBjYW5ub3Qg YmUgdXNlZCB3aXRoIENPUFkgRlJPTQogLS0gYWxsIG9mIHRoZSBhYm92ZSBzaG91bGQgeWllbGQg ZXJyb3IKKy0tRXJyb3IKK2NvcHkgY29weXRlc3QgdG8gc3Rkb3V0IChmb3JtYXQgY3N2LCBmb3Jj ZV9hcnJheSB0cnVlKTsKK0VSUk9SOiAgQ09QWSBGT1JDRV9BUlJBWSBjYW4gb25seSB1c2VkIHdp dGggSlNPTiBtb2RlCistLW9rCitjb3B5IGNvcHl0ZXN0IHRvIHN0ZG91dCAoZm9ybWF0IGpzb24s IGZvcmNlX2FycmF5KTsKK1sKKyB7InN0eWxlIjoiRE9TIiwidGVzdCI6ImFiY1xyXG5kZWYiLCJm aWxsZXIiOjF9CisseyJzdHlsZSI6IlVuaXgiLCJ0ZXN0IjoiYWJjXG5kZWYiLCJmaWxsZXIiOjJ9 CisseyJzdHlsZSI6Ik1hYyIsInRlc3QiOiJhYmNccmRlZiIsImZpbGxlciI6M30KKyx7InN0eWxl IjoiZXNjXFxhcGUiLCJ0ZXN0IjoiYVxcclxcXHJcXFxuXFxuYiIsImZpbGxlciI6NH0KK10KK2Nv cHkgY29weXRlc3QgdG8gc3Rkb3V0IChmb3JtYXQganNvbiwgZm9yY2VfYXJyYXkgdHJ1ZSk7Citb CisgeyJzdHlsZSI6IkRPUyIsInRlc3QiOiJhYmNcclxuZGVmIiwiZmlsbGVyIjoxfQorLHsic3R5 bGUiOiJVbml4IiwidGVzdCI6ImFiY1xuZGVmIiwiZmlsbGVyIjoyfQorLHsic3R5bGUiOiJNYWMi LCJ0ZXN0IjoiYWJjXHJkZWYiLCJmaWxsZXIiOjN9CisseyJzdHlsZSI6ImVzY1xcYXBlIiwidGVz dCI6ImFcXHJcXFxyXFxcblxcbmIiLCJmaWxsZXIiOjR9CitdCitjb3B5IGNvcHl0ZXN0IHRvIHN0 ZG91dCAoZm9ybWF0IGpzb24sIGZvcmNlX2FycmF5IGZhbHNlKTsKK3sic3R5bGUiOiJET1MiLCJ0 ZXN0IjoiYWJjXHJcbmRlZiIsImZpbGxlciI6MX0KK3sic3R5bGUiOiJVbml4IiwidGVzdCI6ImFi Y1xuZGVmIiwiZmlsbGVyIjoyfQoreyJzdHlsZSI6Ik1hYyIsInRlc3QiOiJhYmNccmRlZiIsImZp bGxlciI6M30KK3sic3R5bGUiOiJlc2NcXGFwZSIsInRlc3QiOiJhXFxyXFxcclxcXG5cXG5iIiwi ZmlsbGVyIjo0fQogLS0gZW1iZWRkZWQgZXNjYXBlZCBjaGFyYWN0ZXJzCiBjcmVhdGUgdGVtcCB0 YWJsZSBjb3B5anNvbnRlc3QgKAogICAgIGlkIGJpZ3NlcmlhbCwKZGlmZiAtLWdpdCBhL3NyYy90 ZXN0L3JlZ3Jlc3Mvc3FsL2NvcHkuc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvY29weS5zcWwK aW5kZXggNWU0ZDFmMDc4MWEuLjNlMDYyMjc1ZDg1IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdy ZXNzL3NxbC9jb3B5LnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9jb3B5LnNxbApAQCAt MTAxLDYgKzEwMSwxNCBAQCBjb3B5IGNvcHl0ZXN0IHRvIHN0ZG91dCAoZm9ybWF0IGpzb24sIG9u X2Vycm9yIGlnbm9yZSk7CiBjb3B5IGNvcHl0ZXN0IGZyb20gc3RkaW4oZm9ybWF0IGpzb24pOwog LS0gYWxsIG9mIHRoZSBhYm92ZSBzaG91bGQgeWllbGQgZXJyb3IKIAorLS1FcnJvcgorY29weSBj b3B5dGVzdCB0byBzdGRvdXQgKGZvcm1hdCBjc3YsIGZvcmNlX2FycmF5IHRydWUpOworCistLW9r Citjb3B5IGNvcHl0ZXN0IHRvIHN0ZG91dCAoZm9ybWF0IGpzb24sIGZvcmNlX2FycmF5KTsKK2Nv cHkgY29weXRlc3QgdG8gc3Rkb3V0IChmb3JtYXQganNvbiwgZm9yY2VfYXJyYXkgdHJ1ZSk7Citj b3B5IGNvcHl0ZXN0IHRvIHN0ZG91dCAoZm9ybWF0IGpzb24sIGZvcmNlX2FycmF5IGZhbHNlKTsK KwogLS0gZW1iZWRkZWQgZXNjYXBlZCBjaGFyYWN0ZXJzCiBjcmVhdGUgdGVtcCB0YWJsZSBjb3B5 anNvbnRlc3QgKAogICAgIGlkIGJpZ3NlcmlhbCwKLS0gCjIuMzkuNQoK --000000000000b446c8062f554e40 Content-Type: application/octet-stream; name="v15-0001-Introduce-json-format-for-COPY-TO.patch" Content-Disposition: attachment; filename="v15-0001-Introduce-json-format-for-COPY-TO.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m7r6ov271 RnJvbSA0NjJkZDAxYTI4NjVhM2MzYjlhNDE3Y2ExNWRiY2I3ZDY3MDYxODM4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKdW53YW5nIFpoYW8gPHpoandwa3VAZ21haWwuY29tPgpEYXRl OiBTdW4sIDIgTWFyIDIwMjUgMDQ6MDc6MjkgKzAwMDAKU3ViamVjdDogW1BBVENIIHYxNSAxLzJd IEludHJvZHVjZSBqc29uIGZvcm1hdCBmb3IgQ09QWSBUTwoKanNvbiBmb3JtYXQgaXMgb25seSBh bGxvd2VkIGluIENPUFkgVE8gb3BlcmF0aW9uLgphbHNvIGNhbm5vdCBiZSB1c2VkIHdpdGgge2hl YWRlciwgZGVmYXVsdCwgbnVsbCwgZGVsaW1pdGVyfSBvcHRpb25zIGFuZCBtYW55IG90aGVyIG9w dGlvbnMuCmZ1bGx5IHRlc3RlZCBvbiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9jb3B5LnNxbC4KCnJl ZmFjdG9yZWQgYnkgSmlhbiBIZSB0byBpbnRyb2R1Y2UgYSBDb3B5Rm9ybWF0IGVudW0gd2hpY2gg cmVwbGFjZXMgY3N2X21vZGUgYW5kIGJpbmFyeS4KcmVmYWN0b3JlZCBieSBKdW53YW5nIFpoYW8g dG8gYWRhcHQgdGhlIG5ld2x5IGludHJvZHVjZWQgQ29weVRvUm91dGluZSBzdHJ1Y3QoMmU0MTI3 YjZkMikuCgpBdXRob3I6IEpvZSBDb253YXkgPG1haWxAam9lY29ud2F5LmNvbT4KZGlzY3Vzc2lv bjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9DQUx2ZlVrQnhUWXk1dVdQRlZ3cGtfN2lpMnpnVDA3dDNk LXlSX2N5NHNmcnJMVSUzRGtjZyU0MG1haWwuZ21haWwuY29tCmRpc2N1c3Npb246IGh0dHBzOi8v cG9zdGdyLmVzL20vNmEwNDYyOGQtMGQ1My00MWQ5LTllMzUtNWE4ZGMzMDJjMzRjQGpvZWNvbndh eS5jb20KLS0tCiBkb2Mvc3JjL3NnbWwvcmVmL2NvcHkuc2dtbCAgICAgICAgICAgfCAxMyArKyst LQogc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weS5jICAgICAgICAgIHwgNzcgKysrKysrKysrKysr KysrKysrKy0tLS0tLS0tLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weWZyb20uYyAgICAgIHwg IDYgKy0tCiBzcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5ZnJvbXBhcnNlLmMgfCAgNiArLS0KIHNy Yy9iYWNrZW5kL2NvbW1hbmRzL2NvcHl0by5jICAgICAgICB8IDczICsrKysrKysrKysrKysrKysr KysrKystLS0tCiBzcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55ICAgICAgICAgICAgfCAgOCArKysK IHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29uLmMgICAgICAgICB8ICA1ICstCiBzcmMvYmluL3Bz cWwvdGFiLWNvbXBsZXRlLmluLmMgICAgICAgfCAgMiArLQogc3JjL2luY2x1ZGUvY29tbWFuZHMv Y29weS5oICAgICAgICAgIHwgMTQgKysrKy0KIHNyYy9pbmNsdWRlL3V0aWxzL2pzb24uaCAgICAg ICAgICAgICB8ICAyICsKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY29weS5vdXQgICB8IDc0 ICsrKysrKysrKysrKysrKysrKysrKysrKysrCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9jb3B5LnNx bCAgICAgICAgfCA0NyArKysrKysrKysrKysrKysrKwogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVk ZWZzLmxpc3QgICAgIHwgIDEgKwogMTMgZmlsZXMgY2hhbmdlZCwgMjc5IGluc2VydGlvbnMoKyks IDQ5IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvY29weS5zZ21s IGIvZG9jL3NyYy9zZ21sL3JlZi9jb3B5LnNnbWwKaW5kZXggZGYwOTNkYTk3YzUuLjljNTE5ZDhh OWUyIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL2NvcHkuc2dtbAorKysgYi9kb2Mvc3Jj L3NnbWwvcmVmL2NvcHkuc2dtbApAQCAtMjE5LDEwICsyMTksMTUgQEAgQ09QWSB7IDxyZXBsYWNl YWJsZSBjbGFzcz0icGFyYW1ldGVyIj50YWJsZV9uYW1lPC9yZXBsYWNlYWJsZT4gWyAoIDxyZXBs YWNlYWJsZQogICAgICAgU2VsZWN0cyB0aGUgZGF0YSBmb3JtYXQgdG8gYmUgcmVhZCBvciB3cml0 dGVuOgogICAgICAgPGxpdGVyYWw+dGV4dDwvbGl0ZXJhbD4sCiAgICAgICA8bGl0ZXJhbD5jc3Y8 L2xpdGVyYWw+IChDb21tYSBTZXBhcmF0ZWQgVmFsdWVzKSwKKyAgICAgIDxsaXRlcmFsPmpzb248 L2xpdGVyYWw+IChKYXZhU2NyaXB0IE9iamVjdCBOb3RhdGlvbiksCiAgICAgICBvciA8bGl0ZXJh bD5iaW5hcnk8L2xpdGVyYWw+LgogICAgICAgVGhlIGRlZmF1bHQgaXMgPGxpdGVyYWw+dGV4dDwv bGl0ZXJhbD4uCiAgICAgICBTZWUgPHhyZWYgbGlua2VuZD0ic3FsLWNvcHktZmlsZS1mb3JtYXRz Ii8+IGJlbG93IGZvciBkZXRhaWxzLgogICAgICA8L3BhcmE+CisgICAgIDxwYXJhPgorICAgICAg VGhlIDxsaXRlcmFsPmpzb248L2xpdGVyYWw+IG9wdGlvbiBpcyBhbGxvd2VkIG9ubHkgaW4KKyAg ICAgIDxjb21tYW5kPkNPUFkgVE88L2NvbW1hbmQ+LgorICAgICA8L3BhcmE+CiAgICAgPC9saXN0 aXRlbT4KICAgIDwvdmFybGlzdGVudHJ5PgogCkBAIC0yNTcsNyArMjYyLDcgQEAgQ09QWSB7IDxy ZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj50YWJsZV9uYW1lPC9yZXBsYWNlYWJsZT4gWyAo IDxyZXBsYWNlYWJsZQogICAgICAgKGxpbmUpIG9mIHRoZSBmaWxlLiAgVGhlIGRlZmF1bHQgaXMg YSB0YWIgY2hhcmFjdGVyIGluIHRleHQgZm9ybWF0LAogICAgICAgYSBjb21tYSBpbiA8bGl0ZXJh bD5DU1Y8L2xpdGVyYWw+IGZvcm1hdC4KICAgICAgIFRoaXMgbXVzdCBiZSBhIHNpbmdsZSBvbmUt Ynl0ZSBjaGFyYWN0ZXIuCi0gICAgICBUaGlzIG9wdGlvbiBpcyBub3QgYWxsb3dlZCB3aGVuIHVz aW5nIDxsaXRlcmFsPmJpbmFyeTwvbGl0ZXJhbD4gZm9ybWF0LgorICAgICAgVGhpcyBvcHRpb24g aXMgbm90IGFsbG93ZWQgd2hlbiB1c2luZyA8bGl0ZXJhbD5iaW5hcnk8L2xpdGVyYWw+IG9yIDxs aXRlcmFsPmpzb248L2xpdGVyYWw+IGZvcm1hdC4KICAgICAgPC9wYXJhPgogICAgIDwvbGlzdGl0 ZW0+CiAgICA8L3Zhcmxpc3RlbnRyeT4KQEAgLTI3MSw3ICsyNzYsNyBAQCBDT1BZIHsgPHJlcGxh Y2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnRhYmxlX25hbWU8L3JlcGxhY2VhYmxlPiBbICggPHJl cGxhY2VhYmxlCiAgICAgICBzdHJpbmcgaW4gPGxpdGVyYWw+Q1NWPC9saXRlcmFsPiBmb3JtYXQu IFlvdSBtaWdodCBwcmVmZXIgYW4KICAgICAgIGVtcHR5IHN0cmluZyBldmVuIGluIHRleHQgZm9y bWF0IGZvciBjYXNlcyB3aGVyZSB5b3UgZG9uJ3Qgd2FudCB0bwogICAgICAgZGlzdGluZ3Vpc2gg bnVsbHMgZnJvbSBlbXB0eSBzdHJpbmdzLgotICAgICAgVGhpcyBvcHRpb24gaXMgbm90IGFsbG93 ZWQgd2hlbiB1c2luZyA8bGl0ZXJhbD5iaW5hcnk8L2xpdGVyYWw+IGZvcm1hdC4KKyAgICAgIFRo aXMgb3B0aW9uIGlzIG5vdCBhbGxvd2VkIHdoZW4gdXNpbmcgPGxpdGVyYWw+YmluYXJ5PC9saXRl cmFsPiBvciA8bGl0ZXJhbD5qc29uPC9saXRlcmFsPiBmb3JtYXQuCiAgICAgIDwvcGFyYT4KIAog ICAgICA8bm90ZT4KQEAgLTI5NCw3ICsyOTksNyBAQCBDT1BZIHsgPHJlcGxhY2VhYmxlIGNsYXNz PSJwYXJhbWV0ZXIiPnRhYmxlX25hbWU8L3JlcGxhY2VhYmxlPiBbICggPHJlcGxhY2VhYmxlCiAg ICAgICBpcyBmb3VuZCBpbiB0aGUgaW5wdXQgZmlsZSwgdGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhl IGNvcnJlc3BvbmRpbmcgY29sdW1uCiAgICAgICB3aWxsIGJlIHVzZWQuCiAgICAgICBUaGlzIG9w dGlvbiBpcyBhbGxvd2VkIG9ubHkgaW4gPGNvbW1hbmQ+Q09QWSBGUk9NPC9jb21tYW5kPiwgYW5k IG9ubHkgd2hlbgotICAgICAgbm90IHVzaW5nIDxsaXRlcmFsPmJpbmFyeTwvbGl0ZXJhbD4gZm9y bWF0LgorICAgICAgbm90IHVzaW5nIDxsaXRlcmFsPmJpbmFyeTwvbGl0ZXJhbD4gb3IgPGxpdGVy YWw+anNvbjwvbGl0ZXJhbD4gZm9ybWF0LgogICAgICA8L3BhcmE+CiAgICAgPC9saXN0aXRlbT4K ICAgIDwvdmFybGlzdGVudHJ5PgpAQCAtMzEwLDcgKzMxNSw3IEBAIENPUFkgeyA8cmVwbGFjZWFi bGUgY2xhc3M9InBhcmFtZXRlciI+dGFibGVfbmFtZTwvcmVwbGFjZWFibGU+IFsgKCA8cmVwbGFj ZWFibGUKICAgICAgIElmIHRoaXMgb3B0aW9uIGlzIHNldCB0byA8bGl0ZXJhbD5NQVRDSDwvbGl0 ZXJhbD4sIHRoZSBudW1iZXIgYW5kIG5hbWVzCiAgICAgICBvZiB0aGUgY29sdW1ucyBpbiB0aGUg aGVhZGVyIGxpbmUgbXVzdCBtYXRjaCB0aGUgYWN0dWFsIGNvbHVtbiBuYW1lcyBvZgogICAgICAg dGhlIHRhYmxlLCBpbiBvcmRlcjsgIG90aGVyd2lzZSBhbiBlcnJvciBpcyByYWlzZWQuCi0gICAg ICBUaGlzIG9wdGlvbiBpcyBub3QgYWxsb3dlZCB3aGVuIHVzaW5nIDxsaXRlcmFsPmJpbmFyeTwv bGl0ZXJhbD4gZm9ybWF0LgorICAgICAgVGhpcyBvcHRpb24gaXMgbm90IGFsbG93ZWQgd2hlbiB1 c2luZyA8bGl0ZXJhbD5iaW5hcnk8L2xpdGVyYWw+IG9yIDxsaXRlcmFsPmpzb248L2xpdGVyYWw+ IGZvcm1hdC4KICAgICAgIFRoZSA8bGl0ZXJhbD5NQVRDSDwvbGl0ZXJhbD4gb3B0aW9uIGlzIG9u bHkgdmFsaWQgZm9yIDxjb21tYW5kPkNPUFkKICAgICAgIEZST008L2NvbW1hbmQ+IGNvbW1hbmRz LgogICAgICA8L3BhcmE+CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5LmMg Yi9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5LmMKaW5kZXggY2ZjYTlkOWRjMjkuLmI2Zjc0Yzc5 OGQwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5LmMKKysrIGIvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvY29weS5jCkBAIC01MjUsMTEgKzUyNSwxMyBAQCBQcm9jZXNzQ29weU9w dGlvbnMoUGFyc2VTdGF0ZSAqcHN0YXRlLAogCQkJCWVycm9yQ29uZmxpY3RpbmdEZWZFbGVtKGRl ZmVsLCBwc3RhdGUpOwogCQkJZm9ybWF0X3NwZWNpZmllZCA9IHRydWU7CiAJCQlpZiAoc3RyY21w KGZtdCwgInRleHQiKSA9PSAwKQotCQkJCSAvKiBkZWZhdWx0IGZvcm1hdCAqLyA7CisJCQkJb3B0 c19vdXQtPmZvcm1hdCA9IENPUFlfRk9STUFUX1RFWFQ7CiAJCQllbHNlIGlmIChzdHJjbXAoZm10 LCAiY3N2IikgPT0gMCkKLQkJCQlvcHRzX291dC0+Y3N2X21vZGUgPSB0cnVlOworCQkJCW9wdHNf b3V0LT5mb3JtYXQgPSBDT1BZX0ZPUk1BVF9DU1Y7CiAJCQllbHNlIGlmIChzdHJjbXAoZm10LCAi YmluYXJ5IikgPT0gMCkKLQkJCQlvcHRzX291dC0+YmluYXJ5ID0gdHJ1ZTsKKwkJCQlvcHRzX291 dC0+Zm9ybWF0ID0gQ09QWV9GT1JNQVRfQklOQVJZOworCQkJZWxzZSBpZiAoc3RyY21wKGZtdCwg Impzb24iKSA9PSAwKQorCQkJCW9wdHNfb3V0LT5mb3JtYXQgPSBDT1BZX0ZPUk1BVF9KU09OOwog CQkJZWxzZQogCQkJCWVyZXBvcnQoRVJST1IsCiAJCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFM SURfUEFSQU1FVEVSX1ZBTFVFKSwKQEAgLTY4OSwzMSArNjkxLDQ3IEBAIFByb2Nlc3NDb3B5T3B0 aW9ucyhQYXJzZVN0YXRlICpwc3RhdGUsCiAJICogQ2hlY2sgZm9yIGluY29tcGF0aWJsZSBvcHRp b25zIChtdXN0IGRvIHRoZXNlIHRocmVlIGJlZm9yZSBpbnNlcnRpbmcKIAkgKiBkZWZhdWx0cykK IAkgKi8KLQlpZiAob3B0c19vdXQtPmJpbmFyeSAmJiBvcHRzX291dC0+ZGVsaW0pCisJaWYgKG9w dHNfb3V0LT5mb3JtYXQgPT0gQ09QWV9GT1JNQVRfQklOQVJZICYmIG9wdHNfb3V0LT5kZWxpbSkK IAkJZXJlcG9ydChFUlJPUiwKIAkJCQkoZXJyY29kZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCiAJ CS8qLSB0cmFuc2xhdG9yOiAlcyBpcyB0aGUgbmFtZSBvZiBhIENPUFkgb3B0aW9uLCBlLmcuIE9O X0VSUk9SICovCiAJCQkJIGVycm1zZygiY2Fubm90IHNwZWNpZnkgJXMgaW4gQklOQVJZIG1vZGUi LCAiREVMSU1JVEVSIikpKTsKIAotCWlmIChvcHRzX291dC0+YmluYXJ5ICYmIG9wdHNfb3V0LT5u dWxsX3ByaW50KQorCWlmIChvcHRzX291dC0+Zm9ybWF0ID09IENPUFlfRk9STUFUX0pTT04gJiYg b3B0c19vdXQtPmRlbGltKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCWVycmNvZGUoRVJSQ09ERV9T WU5UQVhfRVJST1IpLAorCQkvKi0gdHJhbnNsYXRvcjogJXMgaXMgdGhlIG5hbWUgb2YgYSBDT1BZ IG9wdGlvbiwgZS5nLiBPTl9FUlJPUiAqLworCQkJCWVycm1zZygiY2Fubm90IHNwZWNpZnkgJXMg aW4gSlNPTiBtb2RlIiwgIkRFTElNSVRFUiIpKTsKKworCWlmIChvcHRzX291dC0+Zm9ybWF0ID09 IENPUFlfRk9STUFUX0JJTkFSWSAmJiBvcHRzX291dC0+bnVsbF9wcmludCkKIAkJZXJlcG9ydChF UlJPUiwKIAkJCQkoZXJyY29kZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCiAJCQkJIGVycm1zZygi Y2Fubm90IHNwZWNpZnkgJXMgaW4gQklOQVJZIG1vZGUiLCAiTlVMTCIpKSk7CiAKLQlpZiAob3B0 c19vdXQtPmJpbmFyeSAmJiBvcHRzX291dC0+ZGVmYXVsdF9wcmludCkKKwlpZiAob3B0c19vdXQt PmZvcm1hdCA9PSBDT1BZX0ZPUk1BVF9KU09OICYmIG9wdHNfb3V0LT5udWxsX3ByaW50KQorCQll cmVwb3J0KEVSUk9SLAorCQkJCWVycmNvZGUoRVJSQ09ERV9TWU5UQVhfRVJST1IpLAorCQkJCWVy cm1zZygiY2Fubm90IHNwZWNpZnkgJXMgaW4gSlNPTiBtb2RlIiwgIk5VTEwiKSk7CisKKwlpZiAo b3B0c19vdXQtPmZvcm1hdCA9PSBDT1BZX0ZPUk1BVF9CSU5BUlkgJiYgb3B0c19vdXQtPmRlZmF1 bHRfcHJpbnQpCiAJCWVyZXBvcnQoRVJST1IsCiAJCQkJKGVycmNvZGUoRVJSQ09ERV9TWU5UQVhf RVJST1IpLAogCQkJCSBlcnJtc2coImNhbm5vdCBzcGVjaWZ5ICVzIGluIEJJTkFSWSBtb2RlIiwg IkRFRkFVTFQiKSkpOwogCisJaWYgKG9wdHNfb3V0LT5mb3JtYXQgPT0gQ09QWV9GT1JNQVRfSlNP TiAmJiBvcHRzX291dC0+ZGVmYXVsdF9wcmludCkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQllcnJj b2RlKEVSUkNPREVfU1lOVEFYX0VSUk9SKSwKKwkJCQllcnJtc2coImNhbm5vdCBzcGVjaWZ5ICVz IGluIEpTT04gbW9kZSIsICJERUZBVUxUIikpOworCiAJLyogU2V0IGRlZmF1bHRzIGZvciBvbWl0 dGVkIG9wdGlvbnMgKi8KIAlpZiAoIW9wdHNfb3V0LT5kZWxpbSkKLQkJb3B0c19vdXQtPmRlbGlt ID0gb3B0c19vdXQtPmNzdl9tb2RlID8gIiwiIDogIlx0IjsKKwkJb3B0c19vdXQtPmRlbGltID0g b3B0c19vdXQtPmZvcm1hdCA9PSBDT1BZX0ZPUk1BVF9DU1YgPyAiLCIgOiAiXHQiOwogCiAJaWYg KCFvcHRzX291dC0+bnVsbF9wcmludCkKLQkJb3B0c19vdXQtPm51bGxfcHJpbnQgPSBvcHRzX291 dC0+Y3N2X21vZGUgPyAiIiA6ICJcXE4iOworCQlvcHRzX291dC0+bnVsbF9wcmludCA9IG9wdHNf b3V0LT5mb3JtYXQgPT0gQ09QWV9GT1JNQVRfQ1NWID8gIiIgOiAiXFxOIjsKIAlvcHRzX291dC0+ bnVsbF9wcmludF9sZW4gPSBzdHJsZW4ob3B0c19vdXQtPm51bGxfcHJpbnQpOwogCi0JaWYgKG9w dHNfb3V0LT5jc3ZfbW9kZSkKKwlpZiAob3B0c19vdXQtPmZvcm1hdCA9PSBDT1BZX0ZPUk1BVF9D U1YpCiAJewogCQlpZiAoIW9wdHNfb3V0LT5xdW90ZSkKIAkJCW9wdHNfb3V0LT5xdW90ZSA9ICJc IiI7CkBAIC03NjEsNyArNzc5LDcgQEAgUHJvY2Vzc0NvcHlPcHRpb25zKFBhcnNlU3RhdGUgKnBz dGF0ZSwKIAkgKiBmdXR1cmUtcHJvb2ZpbmcuICBMaWtld2lzZSB3ZSBkaXNhbGxvdyBhbGwgZGln aXRzIHRob3VnaCBvbmx5IG9jdGFsCiAJICogZGlnaXRzIGFyZSBhY3R1YWxseSBkYW5nZXJvdXMu CiAJICovCi0JaWYgKCFvcHRzX291dC0+Y3N2X21vZGUgJiYKKwlpZiAob3B0c19vdXQtPmZvcm1h dCAhPSBDT1BZX0ZPUk1BVF9DU1YgJiYKIAkJc3RyY2hyKCJcXC5hYmNkZWZnaGlqa2xtbm9wcXJz dHV2d3h5ejAxMjM0NTY3ODkiLAogCQkJICAgb3B0c19vdXQtPmRlbGltWzBdKSAhPSBOVUxMKQog CQllcmVwb3J0KEVSUk9SLApAQCAtNzY5LDQzICs3ODcsNDggQEAgUHJvY2Vzc0NvcHlPcHRpb25z KFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAkJCQkgZXJybXNnKCJDT1BZIGRlbGltaXRlciBjYW5ub3Qg YmUgXCIlc1wiIiwgb3B0c19vdXQtPmRlbGltKSkpOwogCiAJLyogQ2hlY2sgaGVhZGVyICovCi0J aWYgKG9wdHNfb3V0LT5iaW5hcnkgJiYgb3B0c19vdXQtPmhlYWRlcl9saW5lKQorCWlmIChvcHRz X291dC0+Zm9ybWF0ID09IENPUFlfRk9STUFUX0JJTkFSWSAmJiBvcHRzX291dC0+aGVhZGVyX2xp bmUpCiAJCWVyZXBvcnQoRVJST1IsCiAJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9T VVBQT1JURUQpLAogCQkvKi0gdHJhbnNsYXRvcjogJXMgaXMgdGhlIG5hbWUgb2YgYSBDT1BZIG9w dGlvbiwgZS5nLiBPTl9FUlJPUiAqLwogCQkJCSBlcnJtc2coImNhbm5vdCBzcGVjaWZ5ICVzIGlu IEJJTkFSWSBtb2RlIiwgIkhFQURFUiIpKSk7CiAKKwlpZiAob3B0c19vdXQtPmZvcm1hdCA9PSBD T1BZX0ZPUk1BVF9KU09OICYmIG9wdHNfb3V0LT5oZWFkZXJfbGluZSkKKwkJZXJlcG9ydChFUlJP UiwKKwkJCQllcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCWVy cm1zZygiY2Fubm90IHNwZWNpZnkgJXMgaW4gSlNPTiBtb2RlIiwgIkhFQURFUiIpKTsKKwogCS8q IENoZWNrIHF1b3RlICovCi0JaWYgKCFvcHRzX291dC0+Y3N2X21vZGUgJiYgb3B0c19vdXQtPnF1 b3RlICE9IE5VTEwpCisJaWYgKG9wdHNfb3V0LT5mb3JtYXQgIT0gQ09QWV9GT1JNQVRfQ1NWICYm IG9wdHNfb3V0LT5xdW90ZSAhPSBOVUxMKQogCQllcmVwb3J0KEVSUk9SLAogCQkJCShlcnJjb2Rl KEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKIAkJLyotIHRyYW5zbGF0b3I6ICVzIGlz IHRoZSBuYW1lIG9mIGEgQ09QWSBvcHRpb24sIGUuZy4gT05fRVJST1IgKi8KIAkJCQkgZXJybXNn KCJDT1BZICVzIHJlcXVpcmVzIENTViBtb2RlIiwgIlFVT1RFIikpKTsKIAotCWlmIChvcHRzX291 dC0+Y3N2X21vZGUgJiYgc3RybGVuKG9wdHNfb3V0LT5xdW90ZSkgIT0gMSkKKwlpZiAob3B0c19v dXQtPmZvcm1hdCA9PSBDT1BZX0ZPUk1BVF9DU1YgJiYgc3RybGVuKG9wdHNfb3V0LT5xdW90ZSkg IT0gMSkKIAkJZXJlcG9ydChFUlJPUiwKIAkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9U X1NVUFBPUlRFRCksCiAJCQkJIGVycm1zZygiQ09QWSBxdW90ZSBtdXN0IGJlIGEgc2luZ2xlIG9u ZS1ieXRlIGNoYXJhY3RlciIpKSk7CiAKLQlpZiAob3B0c19vdXQtPmNzdl9tb2RlICYmIG9wdHNf b3V0LT5kZWxpbVswXSA9PSBvcHRzX291dC0+cXVvdGVbMF0pCisJaWYgKG9wdHNfb3V0LT5mb3Jt YXQgPT0gQ09QWV9GT1JNQVRfQ1NWICYmIG9wdHNfb3V0LT5kZWxpbVswXSA9PSBvcHRzX291dC0+ cXVvdGVbMF0pCiAJCWVyZXBvcnQoRVJST1IsCiAJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElE X1BBUkFNRVRFUl9WQUxVRSksCiAJCQkJIGVycm1zZygiQ09QWSBkZWxpbWl0ZXIgYW5kIHF1b3Rl IG11c3QgYmUgZGlmZmVyZW50IikpKTsKIAogCS8qIENoZWNrIGVzY2FwZSAqLwotCWlmICghb3B0 c19vdXQtPmNzdl9tb2RlICYmIG9wdHNfb3V0LT5lc2NhcGUgIT0gTlVMTCkKKwlpZiAob3B0c19v dXQtPmZvcm1hdCAhPSBDT1BZX0ZPUk1BVF9DU1YgJiYgb3B0c19vdXQtPmVzY2FwZSAhPSBOVUxM KQogCQllcmVwb3J0KEVSUk9SLAogCQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQ UE9SVEVEKSwKIAkJLyotIHRyYW5zbGF0b3I6ICVzIGlzIHRoZSBuYW1lIG9mIGEgQ09QWSBvcHRp b24sIGUuZy4gT05fRVJST1IgKi8KIAkJCQkgZXJybXNnKCJDT1BZICVzIHJlcXVpcmVzIENTViBt b2RlIiwgIkVTQ0FQRSIpKSk7CiAKLQlpZiAob3B0c19vdXQtPmNzdl9tb2RlICYmIHN0cmxlbihv cHRzX291dC0+ZXNjYXBlKSAhPSAxKQorCWlmIChvcHRzX291dC0+Zm9ybWF0ID09IENPUFlfRk9S TUFUX0NTViAmJiBzdHJsZW4ob3B0c19vdXQtPmVzY2FwZSkgIT0gMSkKIAkJZXJlcG9ydChFUlJP UiwKIAkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCiAJCQkJIGVy cm1zZygiQ09QWSBlc2NhcGUgbXVzdCBiZSBhIHNpbmdsZSBvbmUtYnl0ZSBjaGFyYWN0ZXIiKSkp OwogCiAJLyogQ2hlY2sgZm9yY2VfcXVvdGUgKi8KLQlpZiAoIW9wdHNfb3V0LT5jc3ZfbW9kZSAm JiAob3B0c19vdXQtPmZvcmNlX3F1b3RlIHx8IG9wdHNfb3V0LT5mb3JjZV9xdW90ZV9hbGwpKQor CWlmIChvcHRzX291dC0+Zm9ybWF0ICE9IENPUFlfRk9STUFUX0NTViAmJiAob3B0c19vdXQtPmZv cmNlX3F1b3RlIHx8IG9wdHNfb3V0LT5mb3JjZV9xdW90ZV9hbGwpKQogCQllcmVwb3J0KEVSUk9S LAogCQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKIAkJLyotIHRy YW5zbGF0b3I6ICVzIGlzIHRoZSBuYW1lIG9mIGEgQ09QWSBvcHRpb24sIGUuZy4gT05fRVJST1Ig Ki8KQEAgLTgxOSw4ICs4NDIsOCBAQCBQcm9jZXNzQ29weU9wdGlvbnMoUGFyc2VTdGF0ZSAqcHN0 YXRlLAogCQkJCQkJIkNPUFkgRlJPTSIpKSk7CiAKIAkvKiBDaGVjayBmb3JjZV9ub3RudWxsICov Ci0JaWYgKCFvcHRzX291dC0+Y3N2X21vZGUgJiYgKG9wdHNfb3V0LT5mb3JjZV9ub3RudWxsICE9 IE5JTCB8fAotCQkJCQkJCQlvcHRzX291dC0+Zm9yY2Vfbm90bnVsbF9hbGwpKQorCWlmIChvcHRz X291dC0+Zm9ybWF0ICE9IENPUFlfRk9STUFUX0NTViAmJiAob3B0c19vdXQtPmZvcmNlX25vdG51 bGwgIT0gTklMIHx8CisJCQkJCQkJCQkJCQlvcHRzX291dC0+Zm9yY2Vfbm90bnVsbF9hbGwpKQog CQllcmVwb3J0KEVSUk9SLAogCQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9S VEVEKSwKIAkJLyotIHRyYW5zbGF0b3I6ICVzIGlzIHRoZSBuYW1lIG9mIGEgQ09QWSBvcHRpb24s IGUuZy4gT05fRVJST1IgKi8KQEAgLTgzNSw4ICs4NTgsOCBAQCBQcm9jZXNzQ29weU9wdGlvbnMo UGFyc2VTdGF0ZSAqcHN0YXRlLAogCQkJCQkJIkNPUFkgVE8iKSkpOwogCiAJLyogQ2hlY2sgZm9y Y2VfbnVsbCAqLwotCWlmICghb3B0c19vdXQtPmNzdl9tb2RlICYmIChvcHRzX291dC0+Zm9yY2Vf bnVsbCAhPSBOSUwgfHwKLQkJCQkJCQkJb3B0c19vdXQtPmZvcmNlX251bGxfYWxsKSkKKwlpZiAo b3B0c19vdXQtPmZvcm1hdCAhPSBDT1BZX0ZPUk1BVF9DU1YgJiYgKG9wdHNfb3V0LT5mb3JjZV9u dWxsICE9IE5JTCB8fAorCQkJCQkJCQkJCQkJb3B0c19vdXQtPmZvcmNlX251bGxfYWxsKSkKIAkJ ZXJlcG9ydChFUlJPUiwKIAkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRF RCksCiAJCS8qLSB0cmFuc2xhdG9yOiAlcyBpcyB0aGUgbmFtZSBvZiBhIENPUFkgb3B0aW9uLCBl LmcuIE9OX0VSUk9SICovCkBAIC04NjAsNyArODgzLDcgQEAgUHJvY2Vzc0NvcHlPcHRpb25zKFBh cnNlU3RhdGUgKnBzdGF0ZSwKIAkJCQkJCSJOVUxMIikpKTsKIAogCS8qIERvbid0IGFsbG93IHRo ZSBDU1YgcXVvdGUgY2hhciB0byBhcHBlYXIgaW4gdGhlIG51bGwgc3RyaW5nLiAqLwotCWlmIChv cHRzX291dC0+Y3N2X21vZGUgJiYKKwlpZiAob3B0c19vdXQtPmZvcm1hdCA9PSBDT1BZX0ZPUk1B VF9DU1YgJiYKIAkJc3RyY2hyKG9wdHNfb3V0LT5udWxsX3ByaW50LCBvcHRzX291dC0+cXVvdGVb MF0pICE9IE5VTEwpCiAJCWVyZXBvcnQoRVJST1IsCiAJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZB TElEX1BBUkFNRVRFUl9WQUxVRSksCkBAIC04NzcsNiArOTAwLDEyIEBAIFByb2Nlc3NDb3B5T3B0 aW9ucyhQYXJzZVN0YXRlICpwc3RhdGUsCiAJCQkJIGVycm1zZygiQ09QWSAlcyBjYW5ub3QgYmUg dXNlZCB3aXRoICVzIiwgIkZSRUVaRSIsCiAJCQkJCQkiQ09QWSBUTyIpKSk7CiAKKwkvKiBDaGVj ayBqc29uIGZvcm1hdCAgKi8KKwlpZiAob3B0c19vdXQtPmZvcm1hdCA9PSBDT1BZX0ZPUk1BVF9K U09OICYmIGlzX2Zyb20pCisJCWVyZXBvcnQoRVJST1IsCisJCQkJZXJyY29kZShFUlJDT0RFX0lO VkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQllcnJtc2coIkNPUFkganNvbiBtb2RlIGNhbm5v dCBiZSB1c2VkIHdpdGggJXMiLCAiQ09QWSBGUk9NIikpOworCiAJaWYgKG9wdHNfb3V0LT5kZWZh dWx0X3ByaW50KQogCXsKIAkJaWYgKCFpc19mcm9tKQpAQCAtODk2LDcgKzkyNSw3IEBAIFByb2Nl c3NDb3B5T3B0aW9ucyhQYXJzZVN0YXRlICpwc3RhdGUsCiAJCQkJCQkJIkRFRkFVTFQiKSkpOwog CiAJCS8qIERvbid0IGFsbG93IHRoZSBDU1YgcXVvdGUgY2hhciB0byBhcHBlYXIgaW4gdGhlIGRl ZmF1bHQgc3RyaW5nLiAqLwotCQlpZiAob3B0c19vdXQtPmNzdl9tb2RlICYmCisJCWlmIChvcHRz X291dC0+Zm9ybWF0ID09IENPUFlfRk9STUFUX0NTViAmJgogCQkJc3RyY2hyKG9wdHNfb3V0LT5k ZWZhdWx0X3ByaW50LCBvcHRzX291dC0+cXVvdGVbMF0pICE9IE5VTEwpCiAJCQllcmVwb3J0KEVS Uk9SLAogCQkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCkBAIC05 MTMsNyArOTQyLDcgQEAgUHJvY2Vzc0NvcHlPcHRpb25zKFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAkJ CQkJIGVycm1zZygiTlVMTCBzcGVjaWZpY2F0aW9uIGFuZCBERUZBVUxUIHNwZWNpZmljYXRpb24g Y2Fubm90IGJlIHRoZSBzYW1lIikpKTsKIAl9CiAJLyogQ2hlY2sgb25fZXJyb3IgKi8KLQlpZiAo b3B0c19vdXQtPmJpbmFyeSAmJiBvcHRzX291dC0+b25fZXJyb3IgIT0gQ09QWV9PTl9FUlJPUl9T VE9QKQorCWlmIChvcHRzX291dC0+Zm9ybWF0ID09IENPUFlfRk9STUFUX0JJTkFSWSAmJiBvcHRz X291dC0+b25fZXJyb3IgIT0gQ09QWV9PTl9FUlJPUl9TVE9QKQogCQllcmVwb3J0KEVSUk9SLAog CQkJCShlcnJjb2RlKEVSUkNPREVfU1lOVEFYX0VSUk9SKSwKIAkJCQkgZXJybXNnKCJvbmx5IE9O X0VSUk9SIFNUT1AgaXMgYWxsb3dlZCBpbiBCSU5BUlkgbW9kZSIpKSk7CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9jb21tYW5kcy9jb3B5ZnJvbS5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29w eWZyb20uYwppbmRleCAxOThjZWUyYmM0OC4uMWZhNmQ2MTMwZDkgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2NvbW1hbmRzL2NvcHlmcm9tLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29w eWZyb20uYwpAQCAtMTU1LDkgKzE1NSw5IEBAIHN0YXRpYyBjb25zdCBDb3B5RnJvbVJvdXRpbmUg Q29weUZyb21Sb3V0aW5lQmluYXJ5ID0gewogc3RhdGljIGNvbnN0IENvcHlGcm9tUm91dGluZSAq CiBDb3B5RnJvbUdldFJvdXRpbmUoQ29weUZvcm1hdE9wdGlvbnMgb3B0cykKIHsKLQlpZiAob3B0 cy5jc3ZfbW9kZSkKKwlpZiAob3B0cy5mb3JtYXQgPT0gQ09QWV9GT1JNQVRfQ1NWKQogCQlyZXR1 cm4gJkNvcHlGcm9tUm91dGluZUNTVjsKLQllbHNlIGlmIChvcHRzLmJpbmFyeSkKKwllbHNlIGlm IChvcHRzLmZvcm1hdCA9PSBDT1BZX0ZPUk1BVF9CSU5BUlkpCiAJCXJldHVybiAmQ29weUZyb21S b3V0aW5lQmluYXJ5OwogCiAJLyogZGVmYXVsdCBpcyB0ZXh0ICovCkBAIC0yNjEsNyArMjYxLDcg QEAgQ29weUZyb21FcnJvckNhbGxiYWNrKHZvaWQgKmFyZykKIAkJCQkgICBjc3RhdGUtPmN1cl9y ZWxuYW1lKTsKIAkJcmV0dXJuOwogCX0KLQlpZiAoY3N0YXRlLT5vcHRzLmJpbmFyeSkKKwlpZiAo Y3N0YXRlLT5vcHRzLmZvcm1hdCA9PSBDT1BZX0ZPUk1BVF9CSU5BUlkpCiAJewogCQkvKiBjYW4n dCB1c2VmdWxseSBkaXNwbGF5IHRoZSBkYXRhICovCiAJCWlmIChjc3RhdGUtPmN1cl9hdHRuYW1l KQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weWZyb21wYXJzZS5jIGIvc3Jj L2JhY2tlbmQvY29tbWFuZHMvY29weWZyb21wYXJzZS5jCmluZGV4IGU4MTI4Zjg1ZTZiLi4wMjI2 M2YxYjFmNSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weWZyb21wYXJzZS5j CisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHlmcm9tcGFyc2UuYwpAQCAtMTcxLDcgKzE3 MSw3IEBAIFJlY2VpdmVDb3B5QmVnaW4oQ29weUZyb21TdGF0ZSBjc3RhdGUpCiB7CiAJU3RyaW5n SW5mb0RhdGEgYnVmOwogCWludAkJCW5hdHRzID0gbGlzdF9sZW5ndGgoY3N0YXRlLT5hdHRudW1s aXN0KTsKLQlpbnQxNgkJZm9ybWF0ID0gKGNzdGF0ZS0+b3B0cy5iaW5hcnkgPyAxIDogMCk7CisJ aW50MTYJCWZvcm1hdCA9IChjc3RhdGUtPm9wdHMuZm9ybWF0ID09IENPUFlfRk9STUFUX0JJTkFS WSA/IDEgOiAwKTsKIAlpbnQJCQlpOwogCiAJcHFfYmVnaW5tZXNzYWdlKCZidWYsIFBxTXNnX0Nv cHlJblJlc3BvbnNlKTsKQEAgLTc0Nyw3ICs3NDcsNyBAQCBib29sCiBOZXh0Q29weUZyb21SYXdG aWVsZHMoQ29weUZyb21TdGF0ZSBjc3RhdGUsIGNoYXIgKioqZmllbGRzLCBpbnQgKm5maWVsZHMp CiB7CiAJcmV0dXJuIE5leHRDb3B5RnJvbVJhd0ZpZWxkc0ludGVybmFsKGNzdGF0ZSwgZmllbGRz LCBuZmllbGRzLAotCQkJCQkJCQkJCSBjc3RhdGUtPm9wdHMuY3N2X21vZGUpOworCQkJCQkJCQkJ CSBjc3RhdGUtPm9wdHMuZm9ybWF0ID09IENPUFlfRk9STUFUX0NTVik7CiB9CiAKIC8qCkBAIC03 NzQsNyArNzc0LDcgQEAgTmV4dENvcHlGcm9tUmF3RmllbGRzSW50ZXJuYWwoQ29weUZyb21TdGF0 ZSBjc3RhdGUsIGNoYXIgKioqZmllbGRzLCBpbnQgKm5maWVsZHMKIAlib29sCQlkb25lOwogCiAJ Lyogb25seSBhdmFpbGFibGUgZm9yIHRleHQgb3IgY3N2IGlucHV0ICovCi0JQXNzZXJ0KCFjc3Rh dGUtPm9wdHMuYmluYXJ5KTsKKwlBc3NlcnQoIShjc3RhdGUtPm9wdHMuZm9ybWF0ID09IENPUFlf Rk9STUFUX0JJTkFSWSkpOwogCiAJLyogb24gaW5wdXQgY2hlY2sgdGhhdCB0aGUgaGVhZGVyIGxp bmUgaXMgY29ycmVjdCBpZiBuZWVkZWQgKi8KIAlpZiAoY3N0YXRlLT5jdXJfbGluZW5vID09IDAg JiYgY3N0YXRlLT5vcHRzLmhlYWRlcl9saW5lKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29t bWFuZHMvY29weXRvLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5dG8uYwppbmRleCA3MjFk MjlmOGU1My4uNjliN2ZkMTFlMDMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2Nv cHl0by5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHl0by5jCkBAIC0yNCw2ICsyNCw3 IEBACiAjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY2Rlc2MuaCIKICNpbmNsdWRlICJleGVjdXRvci9l eGVjdXRvci5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL3R1cHRhYmxlLmgiCisjaW5jbHVkZSAiZnVu Y2FwaS5oIgogI2luY2x1ZGUgImxpYnBxL2xpYnBxLmgiCiAjaW5jbHVkZSAibGlicHEvcHFmb3Jt YXQuaCIKICNpbmNsdWRlICJtYi9wZ193Y2hhci5oIgpAQCAtMzEsNiArMzIsNyBAQAogI2luY2x1 ZGUgInBnc3RhdC5oIgogI2luY2x1ZGUgInN0b3JhZ2UvZmQuaCIKICNpbmNsdWRlICJ0Y29wL3Rj b3Bwcm90LmgiCisjaW5jbHVkZSAidXRpbHMvanNvbi5oIgogI2luY2x1ZGUgInV0aWxzL2xzeXNj YWNoZS5oIgogI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCiAjaW5jbHVkZSAidXRpbHMvcmVs LmgiCkBAIC0xMjUsNiArMTI3LDcgQEAgc3RhdGljIHZvaWQgQ29weVRvQ1NWT25lUm93KENvcHlU b1N0YXRlIGNzdGF0ZSwgVHVwbGVUYWJsZVNsb3QgKnNsb3QpOwogc3RhdGljIHZvaWQgQ29weVRv VGV4dExpa2VPbmVSb3coQ29weVRvU3RhdGUgY3N0YXRlLCBUdXBsZVRhYmxlU2xvdCAqc2xvdCwK IAkJCQkJCQkJIGJvb2wgaXNfY3N2KTsKIHN0YXRpYyB2b2lkIENvcHlUb1RleHRMaWtlRW5kKENv cHlUb1N0YXRlIGNzdGF0ZSk7CitzdGF0aWMgdm9pZCBDb3B5VG9Kc29uT25lUm93KENvcHlUb1N0 YXRlIGNzdGF0ZSwgVHVwbGVUYWJsZVNsb3QgKnNsb3QpOwogc3RhdGljIHZvaWQgQ29weVRvQmlu YXJ5U3RhcnQoQ29weVRvU3RhdGUgY3N0YXRlLCBUdXBsZURlc2MgdHVwRGVzYyk7CiBzdGF0aWMg dm9pZCBDb3B5VG9CaW5hcnlPdXRGdW5jKENvcHlUb1N0YXRlIGNzdGF0ZSwgT2lkIGF0dHR5cGlk LCBGbWdySW5mbyAqZmluZm8pOwogc3RhdGljIHZvaWQgQ29weVRvQmluYXJ5T25lUm93KENvcHlU b1N0YXRlIGNzdGF0ZSwgVHVwbGVUYWJsZVNsb3QgKnNsb3QpOwpAQCAtMTY0LDYgKzE2NywxMyBA QCBzdGF0aWMgY29uc3QgQ29weVRvUm91dGluZSBDb3B5VG9Sb3V0aW5lQ1NWID0gewogCS5Db3B5 VG9FbmQgPSBDb3B5VG9UZXh0TGlrZUVuZCwKIH07CiAKK3N0YXRpYyBjb25zdCBDb3B5VG9Sb3V0 aW5lIENvcHlUb1JvdXRpbmVKc29uID0geworCS5Db3B5VG9TdGFydCA9IENvcHlUb1RleHRMaWtl U3RhcnQsCisJLkNvcHlUb091dEZ1bmMgPSBDb3B5VG9UZXh0TGlrZU91dEZ1bmMsCisJLkNvcHlU b09uZVJvdyA9IENvcHlUb0pzb25PbmVSb3csCisJLkNvcHlUb0VuZCA9IENvcHlUb1RleHRMaWtl RW5kLAorfTsKKwogLyogYmluYXJ5IGZvcm1hdCAqLwogc3RhdGljIGNvbnN0IENvcHlUb1JvdXRp bmUgQ29weVRvUm91dGluZUJpbmFyeSA9IHsKIAkuQ29weVRvU3RhcnQgPSBDb3B5VG9CaW5hcnlT dGFydCwKQEAgLTE3NiwxNiArMTg2LDE4IEBAIHN0YXRpYyBjb25zdCBDb3B5VG9Sb3V0aW5lIENv cHlUb1JvdXRpbmVCaW5hcnkgPSB7CiBzdGF0aWMgY29uc3QgQ29weVRvUm91dGluZSAqCiBDb3B5 VG9HZXRSb3V0aW5lKENvcHlGb3JtYXRPcHRpb25zIG9wdHMpCiB7Ci0JaWYgKG9wdHMuY3N2X21v ZGUpCisJaWYgKG9wdHMuZm9ybWF0ID09IENPUFlfRk9STUFUX0NTVikKIAkJcmV0dXJuICZDb3B5 VG9Sb3V0aW5lQ1NWOwotCWVsc2UgaWYgKG9wdHMuYmluYXJ5KQorCWVsc2UgaWYgKG9wdHMuZm9y bWF0ID09IENPUFlfRk9STUFUX0JJTkFSWSkKIAkJcmV0dXJuICZDb3B5VG9Sb3V0aW5lQmluYXJ5 OworCWVsc2UgaWYgKG9wdHMuZm9ybWF0ID09IENPUFlfRk9STUFUX0pTT04pCisJCXJldHVybiAm Q29weVRvUm91dGluZUpzb247CiAKIAkvKiBkZWZhdWx0IGlzIHRleHQgKi8KIAlyZXR1cm4gJkNv cHlUb1JvdXRpbmVUZXh0OwogfQogCi0vKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgc3RhcnQgY2Fs bGJhY2sgZm9yIHRleHQgYW5kIENTViBmb3JtYXRzICovCisvKiBJbXBsZW1lbnRhdGlvbiBvZiB0 aGUgc3RhcnQgY2FsbGJhY2sgZm9yIHRleHQsIENTViBhbmQganNvbiBmb3JtYXRzICovCiBzdGF0 aWMgdm9pZAogQ29weVRvVGV4dExpa2VTdGFydChDb3B5VG9TdGF0ZSBjc3RhdGUsIFR1cGxlRGVz YyB0dXBEZXNjKQogewpAQCAtMjE1LDcgKzIyNyw3IEBAIENvcHlUb1RleHRMaWtlU3RhcnQoQ29w eVRvU3RhdGUgY3N0YXRlLCBUdXBsZURlc2MgdHVwRGVzYykKIAogCQkJY29sbmFtZSA9IE5hbWVT dHIoVHVwbGVEZXNjQXR0cih0dXBEZXNjLCBhdHRudW0gLSAxKS0+YXR0bmFtZSk7CiAKLQkJCWlm IChjc3RhdGUtPm9wdHMuY3N2X21vZGUpCisJCQlpZiAoY3N0YXRlLT5vcHRzLmZvcm1hdCA9PSBD T1BZX0ZPUk1BVF9DU1YpCiAJCQkJQ29weUF0dHJpYnV0ZU91dENTVihjc3RhdGUsIGNvbG5hbWUs IGZhbHNlKTsKIAkJCWVsc2UKIAkJCQlDb3B5QXR0cmlidXRlT3V0VGV4dChjc3RhdGUsIGNvbG5h bWUpOwpAQCAtMjI2LDcgKzIzOCw3IEBAIENvcHlUb1RleHRMaWtlU3RhcnQoQ29weVRvU3RhdGUg Y3N0YXRlLCBUdXBsZURlc2MgdHVwRGVzYykKIH0KIAogLyoKLSAqIEltcGxlbWVudGF0aW9uIG9m IHRoZSBvdXRmdW5jIGNhbGxiYWNrIGZvciB0ZXh0IGFuZCBDU1YgZm9ybWF0cy4gQXNzaWduCisg KiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgb3V0ZnVuYyBjYWxsYmFjayBmb3IgdGV4dCwgQ1NWLCBq c29uIGZvcm1hdHMuIEFzc2lnbgogICogdGhlIG91dHB1dCBmdW5jdGlvbiBkYXRhIHRvIHRoZSBn aXZlbiAqZmluZm8uCiAgKi8KIHN0YXRpYyB2b2lkCkBAIC0zMDYsNiArMzE4LDM4IEBAIENvcHlU b1RleHRMaWtlRW5kKENvcHlUb1N0YXRlIGNzdGF0ZSkKIAkvKiBOb3RoaW5nIHRvIGRvIGhlcmUg Ki8KIH0KIAorLyogSW1wbGVtZW50YXRpb24gb2YgcGVyLXJvdyBjYWxsYmFjayBmb3IganNvbiBm b3JtYXQgKi8KK3N0YXRpYyB2b2lkCitDb3B5VG9Kc29uT25lUm93KENvcHlUb1N0YXRlIGNzdGF0 ZSwgVHVwbGVUYWJsZVNsb3QgKnNsb3QpCit7CisJRGF0dW0JCXJvd2RhdGE7CisJU3RyaW5nSW5m bwlyZXN1bHQ7CisKKwkvKgorCSAqIGlmIENPUFkgVE8gc291cmNlIGRhdGEgaXMgZnJvbSBhIHF1 ZXJ5LCBub3QgYSBwbGFpbiB0YWJsZSwgdGhlbiB3ZSBuZWVkCisJICogY29weSBDb3B5VG9TdGF0 ZS0+VHVwbGVEZXNjIHRvIHNsb3QtPnR0c190dXBsZURlc2NyaXB0b3IuIGJlY2F1c2UgdGhlCisJ ICogc2xvdCdzIFR1cGxlRGVzYy0+YXR0cnMgbWF5IGNoYW5nZSBkdXJpbmcgcXVlcnkgZXhlY3V0 aW9uLgorCSAqLworCWlmICghY3N0YXRlLT5yZWwpCisJeworCQltZW1jcHkoVHVwbGVEZXNjQXR0 cihzbG90LT50dHNfdHVwbGVEZXNjcmlwdG9yLCAwKSwKKwkJCSAgIFR1cGxlRGVzY0F0dHIoY3N0 YXRlLT5xdWVyeURlc2MtPnR1cERlc2MsIDApLAorCQkJICAgY3N0YXRlLT5xdWVyeURlc2MtPnR1 cERlc2MtPm5hdHRzICogc2l6ZW9mKEZvcm1EYXRhX3BnX2F0dHJpYnV0ZSkpOworCisJCWZvciAo aW50IGkgPSAwOyBpIDwgY3N0YXRlLT5xdWVyeURlc2MtPnR1cERlc2MtPm5hdHRzOyBpKyspCisJ CQlwb3B1bGF0ZV9jb21wYWN0X2F0dHJpYnV0ZShzbG90LT50dHNfdHVwbGVEZXNjcmlwdG9yLCBp KTsKKworCQlCbGVzc1R1cGxlRGVzYyhzbG90LT50dHNfdHVwbGVEZXNjcmlwdG9yKTsKKwl9CisJ cm93ZGF0YSA9IEV4ZWNGZXRjaFNsb3RIZWFwVHVwbGVEYXR1bShzbG90KTsKKwlyZXN1bHQgPSBt YWtlU3RyaW5nSW5mbygpOworCWNvbXBvc2l0ZV90b19qc29uKHJvd2RhdGEsIHJlc3VsdCwgZmFs c2UpOworCisJQ29weVNlbmREYXRhKGNzdGF0ZSwgcmVzdWx0LT5kYXRhLCByZXN1bHQtPmxlbik7 CisKKwlDb3B5U2VuZFRleHRMaWtlRW5kT2ZSb3coY3N0YXRlKTsKK30KKwogLyoKICAqIEltcGxl bWVudGF0aW9uIG9mIHRoZSBzdGFydCBjYWxsYmFjayBmb3IgYmluYXJ5IGZvcm1hdC4gU2VuZCBh IGhlYWRlcgogICogZm9yIGEgYmluYXJ5IGNvcHkuCkBAIC0zOTIsMTQgKzQzNiwyNSBAQCBTZW5k Q29weUJlZ2luKENvcHlUb1N0YXRlIGNzdGF0ZSkKIHsKIAlTdHJpbmdJbmZvRGF0YSBidWY7CiAJ aW50CQkJbmF0dHMgPSBsaXN0X2xlbmd0aChjc3RhdGUtPmF0dG51bWxpc3QpOwotCWludDE2CQlm b3JtYXQgPSAoY3N0YXRlLT5vcHRzLmJpbmFyeSA/IDEgOiAwKTsKKwlpbnQxNgkJZm9ybWF0ID0g KGNzdGF0ZS0+b3B0cy5mb3JtYXQgPT0gQ09QWV9GT1JNQVRfQklOQVJZID8gMSA6IDApOwogCWlu dAkJCWk7CiAKIAlwcV9iZWdpbm1lc3NhZ2UoJmJ1ZiwgUHFNc2dfQ29weU91dFJlc3BvbnNlKTsK IAlwcV9zZW5kYnl0ZSgmYnVmLCBmb3JtYXQpOwkvKiBvdmVyYWxsIGZvcm1hdCAqLwotCXBxX3Nl bmRpbnQxNigmYnVmLCBuYXR0cyk7Ci0JZm9yIChpID0gMDsgaSA8IG5hdHRzOyBpKyspCi0JCXBx X3NlbmRpbnQxNigmYnVmLCBmb3JtYXQpOyAvKiBwZXItY29sdW1uIGZvcm1hdHMgKi8KKwlpZiAo Y3N0YXRlLT5vcHRzLmZvcm1hdCAhPSBDT1BZX0ZPUk1BVF9KU09OKQorCXsKKwkJcHFfc2VuZGlu dDE2KCZidWYsIG5hdHRzKTsKKwkJZm9yIChpID0gMDsgaSA8IG5hdHRzOyBpKyspCisJCQlwcV9z ZW5kaW50MTYoJmJ1ZiwgZm9ybWF0KTsgLyogcGVyLWNvbHVtbiBmb3JtYXRzICovCisJfQorCWVs c2UKKwl7CisJCS8qCisJCSAqIEpTT04gZm9ybWF0IGlzIGFsd2F5cyBvbmUgbm9uLWJpbmFyeSBj b2x1bW4KKwkJICovCisJCXBxX3NlbmRpbnQxNigmYnVmLCAxKTsKKwkJcHFfc2VuZGludDE2KCZi dWYsIDApOworCX0KIAlwcV9lbmRtZXNzYWdlKCZidWYpOwogCWNzdGF0ZS0+Y29weV9kZXN0ID0g Q09QWV9GUk9OVEVORDsKIH0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkg Yi9zcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55CmluZGV4IDdkOTljOTM1NWM2Li45ZmUxNTFiZGQ3 YyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcGFyc2VyL2dyYW0ueQorKysgYi9zcmMvYmFja2Vu ZC9wYXJzZXIvZ3JhbS55CkBAIC0zNDY1LDYgKzM0NjUsMTAgQEAgY29weV9vcHRfaXRlbToKIAkJ CQl7CiAJCQkJCSQkID0gbWFrZURlZkVsZW0oImZvcm1hdCIsIChOb2RlICopIG1ha2VTdHJpbmco ImNzdiIpLCBAMSk7CiAJCQkJfQorCQkJfCBKU09OCisJCQkJeworCQkJCQkkJCA9IG1ha2VEZWZF bGVtKCJmb3JtYXQiLCAoTm9kZSAqKSBtYWtlU3RyaW5nKCJqc29uIiksIEAxKTsKKwkJCQl9CiAJ CQl8IEhFQURFUl9QCiAJCQkJewogCQkJCQkkJCA9IG1ha2VEZWZFbGVtKCJoZWFkZXIiLCAoTm9k ZSAqKSBtYWtlQm9vbGVhbih0cnVlKSwgQDEpOwpAQCAtMzU0Nyw2ICszNTUxLDEwIEBAIGNvcHlf Z2VuZXJpY19vcHRfZWxlbToKIAkJCQl7CiAJCQkJCSQkID0gbWFrZURlZkVsZW0oJDEsICQyLCBA MSk7CiAJCQkJfQorCQkJfCBGT1JNQVRfTEEgY29weV9nZW5lcmljX29wdF9hcmcKKwkJCQl7CisJ CQkJCSQkID0gbWFrZURlZkVsZW0oImZvcm1hdCIsICQyLCBAMSk7CisJCQkJfQogCQk7CiAKIGNv cHlfZ2VuZXJpY19vcHRfYXJnOgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pz b24uYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29uLmMKaW5kZXggNTE0NTI3NTVmNTguLmJm NjkzNDdmYTk0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbi5jCisrKyBi L3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29uLmMKQEAgLTg1LDggKzg1LDYgQEAgdHlwZWRlZiBz dHJ1Y3QgSnNvbkFnZ1N0YXRlCiAJSnNvblVuaXF1ZUJ1aWxkZXJTdGF0ZSB1bmlxdWVfY2hlY2s7 CiB9IEpzb25BZ2dTdGF0ZTsKIAotc3RhdGljIHZvaWQgY29tcG9zaXRlX3RvX2pzb24oRGF0dW0g Y29tcG9zaXRlLCBTdHJpbmdJbmZvIHJlc3VsdCwKLQkJCQkJCQkgIGJvb2wgdXNlX2xpbmVfZmVl ZHMpOwogc3RhdGljIHZvaWQgYXJyYXlfZGltX3RvX2pzb24oU3RyaW5nSW5mbyByZXN1bHQsIGlu dCBkaW0sIGludCBuZGltcywgaW50ICpkaW1zLAogCQkJCQkJCSAgRGF0dW0gKnZhbHMsIGJvb2wg Km51bGxzLCBpbnQgKnZhbGNvdW50LAogCQkJCQkJCSAgSnNvblR5cGVDYXRlZ29yeSB0Y2F0ZWdv cnksIE9pZCBvdXRmdW5jb2lkLApAQCAtNTE2LDggKzUxNCw5IEBAIGFycmF5X3RvX2pzb25faW50 ZXJuYWwoRGF0dW0gYXJyYXksIFN0cmluZ0luZm8gcmVzdWx0LCBib29sIHVzZV9saW5lX2ZlZWRz KQogCiAvKgogICogVHVybiBhIGNvbXBvc2l0ZSAvIHJlY29yZCBpbnRvIEpTT04uCisgKiBFeHBv cnRlZCBzbyBDT1BZIFRPIGNhbiB1c2UgaXQuCiAgKi8KLXN0YXRpYyB2b2lkCit2b2lkCiBjb21w b3NpdGVfdG9fanNvbihEYXR1bSBjb21wb3NpdGUsIFN0cmluZ0luZm8gcmVzdWx0LCBib29sIHVz ZV9saW5lX2ZlZWRzKQogewogCUhlYXBUdXBsZUhlYWRlciB0ZDsKZGlmZiAtLWdpdCBhL3NyYy9i aW4vcHNxbC90YWItY29tcGxldGUuaW4uYyBiL3NyYy9iaW4vcHNxbC90YWItY29tcGxldGUuaW4u YwppbmRleCA4NDMyYmU2NDFhYy4uNjA2OWIxMTg4MzQgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcHNx bC90YWItY29tcGxldGUuaW4uYworKysgYi9zcmMvYmluL3BzcWwvdGFiLWNvbXBsZXRlLmluLmMK QEAgLTMyODMsNyArMzI4Myw3IEBAIG1hdGNoX3ByZXZpb3VzX3dvcmRzKGludCBwYXR0ZXJuX2lk LAogCiAJLyogQ29tcGxldGUgQ09QWSA8c3RoPiBGUk9NfFRPIGZpbGVuYW1lIFdJVEggKEZPUk1B VCAqLwogCWVsc2UgaWYgKE1hdGNoZXMoIkNPUFl8XFxjb3B5IiwgTWF0Y2hBbnksICJGUk9NfFRP IiwgTWF0Y2hBbnksICJXSVRIIiwgIigiLCAiRk9STUFUIikpCi0JCUNPTVBMRVRFX1dJVEgoImJp bmFyeSIsICJjc3YiLCAidGV4dCIpOworCQlDT01QTEVURV9XSVRIKCJiaW5hcnkiLCAiY3N2Iiwg InRleHQiLCAianNvbiIpOwogCiAJLyogQ29tcGxldGUgQ09QWSA8c3RoPiBGUk9NIGZpbGVuYW1l IFdJVEggKE9OX0VSUk9SICovCiAJZWxzZSBpZiAoTWF0Y2hlcygiQ09QWXxcXGNvcHkiLCBNYXRj aEFueSwgIkZST018VE8iLCBNYXRjaEFueSwgIldJVEgiLCAiKCIsICJPTl9FUlJPUiIpKQpkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvY29weS5oIGIvc3JjL2luY2x1ZGUvY29tbWFu ZHMvY29weS5oCmluZGV4IDA2ZGZkZmVmNzIxLi4wN2ZjYzJiYzlhYyAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvY29tbWFuZHMvY29weS5oCisrKyBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2NvcHku aApAQCAtNTEsNiArNTEsMTcgQEAgdHlwZWRlZiBlbnVtIENvcHlMb2dWZXJib3NpdHlDaG9pY2UK IAlDT1BZX0xPR19WRVJCT1NJVFlfVkVSQk9TRSwgLyogbG9ncyBhZGRpdGlvbmFsIG1lc3NhZ2Vz ICovCiB9IENvcHlMb2dWZXJib3NpdHlDaG9pY2U7CiAKKy8qCisgKiBSZXByZXNlbnRzIHRoZSBm b3JtYXQgb2YgdGhlIENPUFkgb3BlcmF0aW9uLgorICovCit0eXBlZGVmIGVudW0gQ29weUZvcm1h dAoreworCUNPUFlfRk9STUFUX1RFWFQgPSAwLAorCUNPUFlfRk9STUFUX0JJTkFSWSwKKwlDT1BZ X0ZPUk1BVF9DU1YsCisJQ09QWV9GT1JNQVRfSlNPTiwKK30gQ29weUZvcm1hdDsKKwogLyoKICAq IEEgc3RydWN0IHRvIGhvbGQgQ09QWSBvcHRpb25zLCBpbiBhIHBhcnNlZCBmb3JtLiBBbGwgb2Yg dGhlc2UgYXJlIHJlbGF0ZWQKICAqIHRvIGZvcm1hdHRpbmcsIGV4Y2VwdCBmb3IgJ2ZyZWV6ZScs IHdoaWNoIGRvZXNuJ3QgcmVhbGx5IGJlbG9uZyBoZXJlLCBidXQKQEAgLTYxLDkgKzcyLDggQEAg dHlwZWRlZiBzdHJ1Y3QgQ29weUZvcm1hdE9wdGlvbnMKIAkvKiBwYXJhbWV0ZXJzIGZyb20gdGhl IENPUFkgY29tbWFuZCAqLwogCWludAkJCWZpbGVfZW5jb2Rpbmc7CS8qIGZpbGUgb3IgcmVtb3Rl IHNpZGUncyBjaGFyYWN0ZXIgZW5jb2RpbmcsCiAJCQkJCQkJCSAqIC0xIGlmIG5vdCBzcGVjaWZp ZWQgKi8KLQlib29sCQliaW5hcnk7CQkJLyogYmluYXJ5IGZvcm1hdD8gKi8KKwlDb3B5Rm9ybWF0 CWZvcm1hdDsJCQkvKiBmb3JtYXQgb2YgdGhlIENPUFkgb3BlcmF0aW9uICovCiAJYm9vbAkJZnJl ZXplOwkJCS8qIGZyZWV6ZSByb3dzIG9uIGxvYWRpbmc/ICovCi0JYm9vbAkJY3N2X21vZGU7CQkv KiBDb21tYSBTZXBhcmF0ZWQgVmFsdWUgZm9ybWF0PyAqLwogCUNvcHlIZWFkZXJDaG9pY2UgaGVh ZGVyX2xpbmU7CS8qIGhlYWRlciBsaW5lPyAqLwogCWNoYXIJICAgKm51bGxfcHJpbnQ7CQkvKiBO VUxMIG1hcmtlciBzdHJpbmcgKHNlcnZlciBlbmNvZGluZyEpICovCiAJaW50CQkJbnVsbF9wcmlu dF9sZW47IC8qIGxlbmd0aCBvZiBzYW1lICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGls cy9qc29uLmggYi9zcmMvaW5jbHVkZS91dGlscy9qc29uLmgKaW5kZXggNDliYmRhN2FjMDYuLjFm YThlMmNlOGUyIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9qc29uLmgKKysrIGIvc3Jj L2luY2x1ZGUvdXRpbHMvanNvbi5oCkBAIC0xNyw2ICsxNyw4IEBACiAjaW5jbHVkZSAibGliL3N0 cmluZ2luZm8uaCIKIAogLyogZnVuY3Rpb25zIGluIGpzb24uYyAqLworZXh0ZXJuIHZvaWQgY29t cG9zaXRlX3RvX2pzb24oRGF0dW0gY29tcG9zaXRlLCBTdHJpbmdJbmZvIHJlc3VsdCwKKwkJCQkJ CQkgIGJvb2wgdXNlX2xpbmVfZmVlZHMpOwogZXh0ZXJuIHZvaWQgZXNjYXBlX2pzb24oU3RyaW5n SW5mbyBidWYsIGNvbnN0IGNoYXIgKnN0cik7CiBleHRlcm4gdm9pZCBlc2NhcGVfanNvbl93aXRo X2xlbihTdHJpbmdJbmZvIGJ1ZiwgY29uc3QgY2hhciAqc3RyLCBpbnQgbGVuKTsKIGV4dGVybiB2 b2lkIGVzY2FwZV9qc29uX3RleHQoU3RyaW5nSW5mbyBidWYsIGNvbnN0IHRleHQgKnR4dCk7CmRp ZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NvcHkub3V0IGIvc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC9jb3B5Lm91dAppbmRleCBlNjllMzRjNjliOC4uZDllMzA5MzdmZWIg MTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY29weS5vdXQKKysrIGIvc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jb3B5Lm91dApAQCAtNzMsNiArNzMsODAgQEAgY29weSBj b3B5dGVzdDMgdG8gc3Rkb3V0IGNzdiBoZWFkZXI7CiBjMSwiY29sIHdpdGggLCBjb21tYSIsImNv bCB3aXRoICIiIHF1b3RlIgogMSxhLDEKIDIsYiwyCistLS0gdGVzdCBjb3B5aW5nIGluIEpTT04g bW9kZSB3aXRoIHZhcmlvdXMgc3R5bGVzCitjb3B5IGNvcHl0ZXN0IHRvIHN0ZG91dCBqc29uOwor eyJzdHlsZSI6IkRPUyIsInRlc3QiOiJhYmNcclxuZGVmIiwiZmlsbGVyIjoxfQoreyJzdHlsZSI6 IlVuaXgiLCJ0ZXN0IjoiYWJjXG5kZWYiLCJmaWxsZXIiOjJ9Cit7InN0eWxlIjoiTWFjIiwidGVz dCI6ImFiY1xyZGVmIiwiZmlsbGVyIjozfQoreyJzdHlsZSI6ImVzY1xcYXBlIiwidGVzdCI6ImFc XHJcXFxyXFxcblxcbmIiLCJmaWxsZXIiOjR9Citjb3B5IGNvcHl0ZXN0IHRvIHN0ZG91dCAoZm9y bWF0IGpzb24pOworeyJzdHlsZSI6IkRPUyIsInRlc3QiOiJhYmNcclxuZGVmIiwiZmlsbGVyIjox fQoreyJzdHlsZSI6IlVuaXgiLCJ0ZXN0IjoiYWJjXG5kZWYiLCJmaWxsZXIiOjJ9Cit7InN0eWxl IjoiTWFjIiwidGVzdCI6ImFiY1xyZGVmIiwiZmlsbGVyIjozfQoreyJzdHlsZSI6ImVzY1xcYXBl IiwidGVzdCI6ImFcXHJcXFxyXFxcblxcbmIiLCJmaWxsZXIiOjR9CistLSBhbGwgb2YgdGhlIGZv bGxvd2luZyBzaG91bGQgeWllbGQgZXJyb3IKK2NvcHkgY29weXRlc3QgdG8gc3Rkb3V0IChmb3Jt YXQganNvbiwgZGVsaW1pdGVyICd8Jyk7CitFUlJPUjogIGNhbm5vdCBzcGVjaWZ5IERFTElNSVRF UiBpbiBKU09OIG1vZGUKK2NvcHkgY29weXRlc3QgdG8gc3Rkb3V0IChmb3JtYXQganNvbiwgbnVs bCAnXE4nKTsKK0VSUk9SOiAgY2Fubm90IHNwZWNpZnkgTlVMTCBpbiBKU09OIG1vZGUKK2NvcHkg Y29weXRlc3QgdG8gc3Rkb3V0IChmb3JtYXQganNvbiwgZGVmYXVsdCAnfCcpOworRVJST1I6ICBj YW5ub3Qgc3BlY2lmeSBERUZBVUxUIGluIEpTT04gbW9kZQorY29weSBjb3B5dGVzdCB0byBzdGRv dXQgKGZvcm1hdCBqc29uLCBoZWFkZXIpOworRVJST1I6ICBjYW5ub3Qgc3BlY2lmeSBIRUFERVIg aW4gSlNPTiBtb2RlCitjb3B5IGNvcHl0ZXN0IHRvIHN0ZG91dCAoZm9ybWF0IGpzb24sIHF1b3Rl ICciJyk7CitFUlJPUjogIENPUFkgUVVPVEUgcmVxdWlyZXMgQ1NWIG1vZGUKK2NvcHkgY29weXRl c3QgdG8gc3Rkb3V0IChmb3JtYXQganNvbiwgZXNjYXBlICciJyk7CitFUlJPUjogIENPUFkgRVND QVBFIHJlcXVpcmVzIENTViBtb2RlCitjb3B5IGNvcHl0ZXN0IHRvIHN0ZG91dCAoZm9ybWF0IGpz b24sIGZvcmNlX3F1b3RlICopOworRVJST1I6ICBDT1BZIEZPUkNFX1FVT1RFIHJlcXVpcmVzIENT ViBtb2RlCitjb3B5IGNvcHl0ZXN0IHRvIHN0ZG91dCAoZm9ybWF0IGpzb24sIGZvcmNlX25vdF9u dWxsICopOworRVJST1I6ICBDT1BZIEZPUkNFX05PVF9OVUxMIHJlcXVpcmVzIENTViBtb2RlCitj b3B5IGNvcHl0ZXN0IHRvIHN0ZG91dCAoZm9ybWF0IGpzb24sIGZvcmNlX251bGwgKik7CitFUlJP UjogIENPUFkgRk9SQ0VfTlVMTCByZXF1aXJlcyBDU1YgbW9kZQorY29weSBjb3B5dGVzdCB0byBz dGRvdXQgKGZvcm1hdCBqc29uLCBvbl9lcnJvciBpZ25vcmUpOworRVJST1I6ICBDT1BZIE9OX0VS Uk9SIGNhbm5vdCBiZSB1c2VkIHdpdGggQ09QWSBUTworTElORSAxOiBjb3B5IGNvcHl0ZXN0IHRv IHN0ZG91dCAoZm9ybWF0IGpzb24sIG9uX2Vycm9yIGlnbm9yZSk7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgorY29weSBjb3B5dGVzdCBmcm9tIHN0ZGlu KGZvcm1hdCBqc29uKTsKK0VSUk9SOiAgQ09QWSBqc29uIG1vZGUgY2Fubm90IGJlIHVzZWQgd2l0 aCBDT1BZIEZST00KKy0tIGFsbCBvZiB0aGUgYWJvdmUgc2hvdWxkIHlpZWxkIGVycm9yCistLSBl bWJlZGRlZCBlc2NhcGVkIGNoYXJhY3RlcnMKK2NyZWF0ZSB0ZW1wIHRhYmxlIGNvcHlqc29udGVz dCAoCisgICAgaWQgYmlnc2VyaWFsLAorICAgIGYxIHRleHQsCisgICAgZjIgdGltZXN0YW1wdHop OworaW5zZXJ0IGludG8gY29weWpzb250ZXN0CisgIHNlbGVjdCBnLmksCisgICAgICAgICBDQVNF IFdIRU4gZy5pICUgMiA9IDAgVEhFTgorICAgICAgICAgICAnbGluZSB3aXRoICcnIGluIGl0OiAn IHx8IGcuaTo6dGV4dAorICAgICAgICAgRUxTRQorICAgICAgICAgICAnbGluZSB3aXRoICIgaW4g aXQ6ICcgfHwgZy5pOjp0ZXh0CisgICAgICAgICBFTkQsCisgICAgICAgICAnTW9uIEZlYiAxMCAx NzozMjowMSAxOTk3IFBTVCcKKyAgZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMSw1KSBhcyBnKGkpOwor aW5zZXJ0IGludG8gY29weWpzb250ZXN0IChmMSkgdmFsdWVzCisoRSdhYWFcImJiYic6OnRleHQp LAorKEUnYWFhXFxiYmInOjp0ZXh0KSwKKyhFJ2FhYVwvYmJiJzo6dGV4dCksCisoRSdhYWFcYmJi Yic6OnRleHQpLAorKEUnYWFhXGZiYmInOjp0ZXh0KSwKKyhFJ2FhYVxuYmJiJzo6dGV4dCksCiso RSdhYWFccmJiYic6OnRleHQpLAorKEUnYWFhXHRiYmInOjp0ZXh0KTsKK2NvcHkgY29weWpzb250 ZXN0IHRvIHN0ZG91dCBqc29uOworeyJpZCI6MSwiZjEiOiJsaW5lIHdpdGggXCIgaW4gaXQ6IDEi LCJmMiI6IjE5OTctMDItMTBUMTc6MzI6MDEtMDg6MDAifQoreyJpZCI6MiwiZjEiOiJsaW5lIHdp dGggJyBpbiBpdDogMiIsImYyIjoiMTk5Ny0wMi0xMFQxNzozMjowMS0wODowMCJ9Cit7ImlkIjoz LCJmMSI6ImxpbmUgd2l0aCBcIiBpbiBpdDogMyIsImYyIjoiMTk5Ny0wMi0xMFQxNzozMjowMS0w ODowMCJ9Cit7ImlkIjo0LCJmMSI6ImxpbmUgd2l0aCAnIGluIGl0OiA0IiwiZjIiOiIxOTk3LTAy LTEwVDE3OjMyOjAxLTA4OjAwIn0KK3siaWQiOjUsImYxIjoibGluZSB3aXRoIFwiIGluIGl0OiA1 IiwiZjIiOiIxOTk3LTAyLTEwVDE3OjMyOjAxLTA4OjAwIn0KK3siaWQiOjEsImYxIjoiYWFhXCJi YmIiLCJmMiI6bnVsbH0KK3siaWQiOjIsImYxIjoiYWFhXFxiYmIiLCJmMiI6bnVsbH0KK3siaWQi OjMsImYxIjoiYWFhL2JiYiIsImYyIjpudWxsfQoreyJpZCI6NCwiZjEiOiJhYWFcYmJiYiIsImYy IjpudWxsfQoreyJpZCI6NSwiZjEiOiJhYWFcZmJiYiIsImYyIjpudWxsfQoreyJpZCI6NiwiZjEi OiJhYWFcbmJiYiIsImYyIjpudWxsfQoreyJpZCI6NywiZjEiOiJhYWFccmJiYiIsImYyIjpudWxs fQoreyJpZCI6OCwiZjEiOiJhYWFcdGJiYiIsImYyIjpudWxsfQogY3JlYXRlIHRlbXAgdGFibGUg Y29weXRlc3Q0ICgKIAljMSBpbnQsCiAJImNvbG5hbWUgd2l0aCB0YWI6IAkiIHRleHQpOwpkaWZm IC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvY29weS5zcWwgYi9zcmMvdGVzdC9yZWdyZXNz L3NxbC9jb3B5LnNxbAppbmRleCA4OTU0NzlkMmQwZi4uNWU0ZDFmMDc4MWEgMTAwNjQ0Ci0tLSBh L3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2NvcHkuc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3Fs L2NvcHkuc3FsCkBAIC04Miw2ICs4Miw1MyBAQCB0aGlzIGlzIGp1c3QgYSBsaW5lIGZ1bGwgb2Yg anVuayB0aGF0IHdvdWxkIGVycm9yIG91dCBpZiBwYXJzZWQKIAogY29weSBjb3B5dGVzdDMgdG8g c3Rkb3V0IGNzdiBoZWFkZXI7CiAKKy0tLSB0ZXN0IGNvcHlpbmcgaW4gSlNPTiBtb2RlIHdpdGgg dmFyaW91cyBzdHlsZXMKK2NvcHkgY29weXRlc3QgdG8gc3Rkb3V0IGpzb247CisKK2NvcHkgY29w eXRlc3QgdG8gc3Rkb3V0IChmb3JtYXQganNvbik7CisKKy0tIGFsbCBvZiB0aGUgZm9sbG93aW5n IHNob3VsZCB5aWVsZCBlcnJvcgorY29weSBjb3B5dGVzdCB0byBzdGRvdXQgKGZvcm1hdCBqc29u LCBkZWxpbWl0ZXIgJ3wnKTsKK2NvcHkgY29weXRlc3QgdG8gc3Rkb3V0IChmb3JtYXQganNvbiwg bnVsbCAnXE4nKTsKK2NvcHkgY29weXRlc3QgdG8gc3Rkb3V0IChmb3JtYXQganNvbiwgZGVmYXVs dCAnfCcpOworY29weSBjb3B5dGVzdCB0byBzdGRvdXQgKGZvcm1hdCBqc29uLCBoZWFkZXIpOwor Y29weSBjb3B5dGVzdCB0byBzdGRvdXQgKGZvcm1hdCBqc29uLCBxdW90ZSAnIicpOworY29weSBj b3B5dGVzdCB0byBzdGRvdXQgKGZvcm1hdCBqc29uLCBlc2NhcGUgJyInKTsKK2NvcHkgY29weXRl c3QgdG8gc3Rkb3V0IChmb3JtYXQganNvbiwgZm9yY2VfcXVvdGUgKik7Citjb3B5IGNvcHl0ZXN0 IHRvIHN0ZG91dCAoZm9ybWF0IGpzb24sIGZvcmNlX25vdF9udWxsICopOworY29weSBjb3B5dGVz dCB0byBzdGRvdXQgKGZvcm1hdCBqc29uLCBmb3JjZV9udWxsICopOworY29weSBjb3B5dGVzdCB0 byBzdGRvdXQgKGZvcm1hdCBqc29uLCBvbl9lcnJvciBpZ25vcmUpOworY29weSBjb3B5dGVzdCBm cm9tIHN0ZGluKGZvcm1hdCBqc29uKTsKKy0tIGFsbCBvZiB0aGUgYWJvdmUgc2hvdWxkIHlpZWxk IGVycm9yCisKKy0tIGVtYmVkZGVkIGVzY2FwZWQgY2hhcmFjdGVycworY3JlYXRlIHRlbXAgdGFi bGUgY29weWpzb250ZXN0ICgKKyAgICBpZCBiaWdzZXJpYWwsCisgICAgZjEgdGV4dCwKKyAgICBm MiB0aW1lc3RhbXB0eik7CisKK2luc2VydCBpbnRvIGNvcHlqc29udGVzdAorICBzZWxlY3QgZy5p LAorICAgICAgICAgQ0FTRSBXSEVOIGcuaSAlIDIgPSAwIFRIRU4KKyAgICAgICAgICAgJ2xpbmUg d2l0aCAnJyBpbiBpdDogJyB8fCBnLmk6OnRleHQKKyAgICAgICAgIEVMU0UKKyAgICAgICAgICAg J2xpbmUgd2l0aCAiIGluIGl0OiAnIHx8IGcuaTo6dGV4dAorICAgICAgICAgRU5ELAorICAgICAg ICAgJ01vbiBGZWIgMTAgMTc6MzI6MDEgMTk5NyBQU1QnCisgIGZyb20gZ2VuZXJhdGVfc2VyaWVz KDEsNSkgYXMgZyhpKTsKKworaW5zZXJ0IGludG8gY29weWpzb250ZXN0IChmMSkgdmFsdWVzCiso RSdhYWFcImJiYic6OnRleHQpLAorKEUnYWFhXFxiYmInOjp0ZXh0KSwKKyhFJ2FhYVwvYmJiJzo6 dGV4dCksCisoRSdhYWFcYmJiYic6OnRleHQpLAorKEUnYWFhXGZiYmInOjp0ZXh0KSwKKyhFJ2Fh YVxuYmJiJzo6dGV4dCksCisoRSdhYWFccmJiYic6OnRleHQpLAorKEUnYWFhXHRiYmInOjp0ZXh0 KTsKKworY29weSBjb3B5anNvbnRlc3QgdG8gc3Rkb3V0IGpzb247CisKIGNyZWF0ZSB0ZW1wIHRh YmxlIGNvcHl0ZXN0NCAoCiAJYzEgaW50LAogCSJjb2xuYW1lIHdpdGggdGFiOiAJIiB0ZXh0KTsK ZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xz L3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggNTY5ODlhYTBiODQuLjcxZjY0ZDI2ZjA5IDEw MDY0NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMvdG9v bHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApAQCAtNTAwLDYgKzUwMCw3IEBAIENvbnZlcnNpb25M b2NhdGlvbgogQ29udmVydFJvd3R5cGVFeHByCiBDb29rZWRDb25zdHJhaW50CiBDb3B5RGVzdAor Q29weUZvcm1hdAogQ29weUZvcm1hdE9wdGlvbnMKIENvcHlGcm9tUm91dGluZQogQ29weUZyb21T dGF0ZQotLSAKMi4zOS41Cgo= --000000000000b446c8062f554e40--