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 1ue2IW-004G9M-Fb for pgsql-hackers@arkaria.postgresql.org; Tue, 22 Jul 2025 02:00:05 +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 1ue2IU-004GJG-8B for pgsql-hackers@arkaria.postgresql.org; Tue, 22 Jul 2025 02:00:02 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1ue2IT-004GIt-Ij for pgsql-hackers@lists.postgresql.org; Tue, 22 Jul 2025 02:00:02 +0000 Received: from mail-vk1-xa2d.google.com ([2607:f8b0:4864:20::a2d]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1ue2IO-0007a1-2T for pgsql-hackers@lists.postgresql.org; Tue, 22 Jul 2025 02:00:00 +0000 Received: by mail-vk1-xa2d.google.com with SMTP id 71dfb90a1353d-531426c7143so1143492e0c.0 for ; Mon, 21 Jul 2025 18:59:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1753149596; x=1753754396; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=Z+KUPYfX+ILUUK0A9+tlrW9fQ25uaYzpBwbB+rnXLuc=; b=kT9i7wJooJWJe8AG2MyVJhLPFFawzgVUysBMOwnjgRICndkxF/poL4O5ace/7QIsck PC/jGm5n+tbbcuU66vXDMvzherqR4S9wfzEbzG9lL24bFHX6EoXwkXX/r5nKrEYN+ilb Us6J/Zk2tRSXpMCBZ4peFS7RIXRW0BJvw+T9tGlgPMkQCDPSITeMUHA1aHMJpmNnfUw4 iZqoO6Rya9GR8EndTZKItwbz7J89zSn4ai/d3P+EdhIrF1kUUSF3p0cj9Gya0l5Cgfwg lC1nDNA/g9QX2+RUyRxalDhU9BX3CRhzz7yG2H0oaSyUPVCd5r8WMKeEVmsWVvyPutPf eqFw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1753149596; x=1753754396; 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=Z+KUPYfX+ILUUK0A9+tlrW9fQ25uaYzpBwbB+rnXLuc=; b=Ol8P5FbukJTGmFCdMqRk4kk3JprHiJwlqbBqZ5ynnwbEdK2VSyW0/5iyIz2wUtMODh c7PGp7K4QyslEXtEZJRAXH34aU87oe2OOJMyWnD8AB5k+mwKmalQ6M2CM6/roljsuZ09 4aeBZl8FJ6VXry8GMWGzk27wyDKod1zeA98S9ar3b6r05Lt0GdFFQn3XYD1e/23iKUYn 1VUIcgjkuNj93Ra751Ifs6Dp4miyyM/57IY372GEMRO75ESZvGZzU+Tw4rDssCVTn0/U WU1BdD3z7pN4Lni8OnfliOPDQ5rs9DuO+XaYMrA/I1Lz3LVMKuer9Jcn+jIQ8D/SuUcT /0Hg== X-Forwarded-Encrypted: i=1; AJvYcCWleAcLNqbe9CwWWfRSzGVdqCELQy6yF4z4WVRXn+gVCx5huS4hepvu1v6A6tAU9TE8s8hRdVp/IRAz+YAV@lists.postgresql.org X-Gm-Message-State: AOJu0YxboqYLP/vYkTeSjHsCE2PggNj+xjzpMUn8XKaOjC7QWfKrArHK mt6XqVpKMwt6AE405jivtMza3peATsXb2Y/Xe2vbwER5yNy7PyuVkMXUjO2WQSHpcQ6fTU8S9lT Ym2F/aJF5xUWZotkQ0YKGf4FpsywocY4= X-Gm-Gg: ASbGncuz0InpFmk/0KsgncDb3axpokYZRM+BiMb8zIygq7rbGwRmdoQkrbFRwnm1c3W v23AnRu+cexwcSbMH2CgTxB73lOMzbApj/iI/gef6EPgR9eABiPjpRVaJckN7XAy+pMipFxQgv4 OSkq4pbU/1RynO3J0uc4UQdWKpDLEAiToUgnZppkVmaz1gvV0jI2/JrLLRv5aE3u1vDzrvWUGPu Z8TqiOM7lS3FbHG88DYLKPmNBn97YDd1+5oDTM= X-Google-Smtp-Source: AGHT+IHqXNydwogJYyhGTDS4PBGuEoyVzViWDrTtXmp9RWq7oHJZ9tL5GckjQ8cXTD+B3LEk7C24a5nAVQ/SXiVDt8Q= X-Received: by 2002:a05:6122:513:b0:520:64ea:c479 with SMTP id 71dfb90a1353d-5373fd05702mr9279327e0c.10.1753149595740; Mon, 21 Jul 2025 18:59:55 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: jian he Date: Tue, 22 Jul 2025 09:59:19 +0800 X-Gm-Features: Ac12FXw4TwdP5D0oYS1dSdvvbJ833phRn2BSx-SiX0agBsXxrbioHNH71zpFS_0 Message-ID: Subject: Re: CAST(... ON DEFAULT) - WIP build on top of Error-Safe User Functions To: Corey Huinker Cc: Isaac Morland , pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="000000000000e48f29063a7af2eb" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000e48f29063a7af2eb Content-Type: text/plain; charset="UTF-8" hi. more preparation work has been committed. 1. SQL/JSON patch [1] added keyword ERROR 2. CoerceViaIo, CoerceToDomain can be evaluated error safe. see commit [2]. 3. ExprState added ErrorSaveContext point, so before calling ExecInitExprRec set valid ErrorSaveContext for ExprState->escontext we should evaluate expression error softly. see commit [2] also. I only found oracle implement, [3]. Based on my reading of [4], it seems CAST(EXPRESSION AS TYPE DEFAULT def_expr ON ERROR) is not included in SQL:2023. anyway, just share my POC based on the previous patch in this thread. it will work for domain over composite, composite over domain. example: CREATE DOMAIN d_char3_not_null as char(3) NOT NULL; CREATE TYPE comp_domain_with_typmod AS (a d_char3_not_null, b int); SELECT CAST('(,42)' AS comp_domain_with_typmod DEFAULT NULL ON ERROR); --return NULL [1]: https://git.postgresql.org/cgit/postgresql.git/diff/src/backend/parser/gram.y?id=6185c9737cf48c9540782d88f12bd2912d6ca1cc [2]: https://git.postgresql.org/cgit/postgresql.git/commit/?id=aaaf9449ec6be62cb0d30ed3588dc384f56274bf [3] https://docs.oracle.com/en/database/oracle/oracle-database/23/sqlrf/CAST.html [4] https://peter.eisentraut.org/blog/2023/04/04/sql-2023-is-finished-here-is-whats-new --000000000000e48f29063a7af2eb Content-Type: text/x-patch; charset="US-ASCII"; name="v1-0001-make-ArrayCoerceExpr-error-safe.patch" Content-Disposition: attachment; filename="v1-0001-make-ArrayCoerceExpr-error-safe.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mddvmuxr1 RnJvbSA0N2MxODFlZWU1OTM0NjhjM2Q3YjdjYjU3YWVjM2ExZWE4Y2IzYzFkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBqaWFuIGhlIDxqaWFuLnVuaXZlcnNhbGl0eUBnbWFpbC5jb20+ CkRhdGU6IEZyaSwgMTggSnVsIDIwMjUgMTM6MDA6MTkgKzA4MDAKU3ViamVjdDogW1BBVENIIHYx IDEvMl0gbWFrZSBBcnJheUNvZXJjZUV4cHIgZXJyb3Igc2FmZQoKc2ltaWxhciB0byBodHRwczov L2dpdC5wb3N0Z3Jlc3FsLm9yZy9jZ2l0L3Bvc3RncmVzcWwuZ2l0L2NvbW1pdC8/aWQ9YWFhZjk0 NDllYzZiZTYyY2IwZDMwZWQzNTg4ZGMzODRmNTYyNzRiZgotLS0KIHNyYy9iYWNrZW5kL2V4ZWN1 dG9yL2V4ZWNFeHByLmMgICAgICAgfCAzICsrKwogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4 cHJJbnRlcnAuYyB8IDQgKysrKwogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2FycmF5ZnVuY3MuYyAg ICB8IDcgKysrKysrKwogMyBmaWxlcyBjaGFuZ2VkLCAxNCBpbnNlcnRpb25zKCspCgpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHIuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1 dG9yL2V4ZWNFeHByLmMKaW5kZXggZjE1Njk4NzliNTIuLjFmM2Y4OTk4NzRmIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjRXhwci5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1 dG9yL2V4ZWNFeHByLmMKQEAgLTE3MDIsNiArMTcwMiw5IEBAIEV4ZWNJbml0RXhwclJlYyhFeHBy ICpub2RlLCBFeHByU3RhdGUgKnN0YXRlLAogCQkJCWVsZW1zdGF0ZS0+aW5uZXJtb3N0X2Nhc2V2 YWwgPSAoRGF0dW0gKikgcGFsbG9jKHNpemVvZihEYXR1bSkpOwogCQkJCWVsZW1zdGF0ZS0+aW5u ZXJtb3N0X2Nhc2VudWxsID0gKGJvb2wgKikgcGFsbG9jKHNpemVvZihib29sKSk7CiAKKwkJCQlp ZiAoc3RhdGUtPmVzY29udGV4dCAhPSBOVUxMKQorCQkJCQllbGVtc3RhdGUtPmVzY29udGV4dCA9 IHN0YXRlLT5lc2NvbnRleHQ7CisKIAkJCQlFeGVjSW5pdEV4cHJSZWMoYWNvZXJjZS0+ZWxlbWV4 cHIsIGVsZW1zdGF0ZSwKIAkJCQkJCQkJJmVsZW1zdGF0ZS0+cmVzdmFsdWUsICZlbGVtc3RhdGUt PnJlc251bGwpOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjRXhwcklu dGVycC5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHJJbnRlcnAuYwppbmRleCAxYTM3 NzM3ZDRhMi4uODFlNDZjZmY3MjUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4 ZWNFeHBySW50ZXJwLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHJJbnRlcnAu YwpAQCAtMzY0NCw2ICszNjQ0LDEwIEBAIEV4ZWNFdmFsQXJyYXlDb2VyY2UoRXhwclN0YXRlICpz dGF0ZSwgRXhwckV2YWxTdGVwICpvcCwgRXhwckNvbnRleHQgKmVjb250ZXh0KQogCQkJCQkJCSAg ZWNvbnRleHQsCiAJCQkJCQkJICBvcC0+ZC5hcnJheWNvZXJjZS5yZXN1bHRlbGVtdHlwZSwKIAkJ CQkJCQkgIG9wLT5kLmFycmF5Y29lcmNlLmFtc3RhdGUpOworCisJaWYgKFNPRlRfRVJST1JfT0ND VVJSRUQob3AtPmQuYXJyYXljb2VyY2UuZWxlbWV4cHJzdGF0ZS0+ZXNjb250ZXh0KQorCQkmJiAo Km9wLT5yZXN2YWx1ZSA9IChEYXR1bSkgMCkpCisJCSpvcC0+cmVzbnVsbCA9IHRydWU7CiB9CiAK IC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvYXJyYXlmdW5jcy5jIGIvc3Jj L2JhY2tlbmQvdXRpbHMvYWR0L2FycmF5ZnVuY3MuYwppbmRleCBjOGY1M2M2ZmJlNy4uYjVmOThi ZjIyZjkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9hcnJheWZ1bmNzLmMKKysr IGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2FycmF5ZnVuY3MuYwpAQCAtMzI4OCw2ICszMjg4LDEz IEBAIGFycmF5X21hcChEYXR1bSBhcnJheWQsCiAJCS8qIEFwcGx5IHRoZSBnaXZlbiBleHByZXNz aW9uIHRvIHNvdXJjZSBlbGVtZW50ICovCiAJCXZhbHVlc1tpXSA9IEV4ZWNFdmFsRXhwcihleHBy c3RhdGUsIGVjb250ZXh0LCAmbnVsbHNbaV0pOwogCisJCWlmIChTT0ZUX0VSUk9SX09DQ1VSUkVE KGV4cHJzdGF0ZS0+ZXNjb250ZXh0KSkKKwkJeworCQkJcGZyZWUodmFsdWVzKTsKKwkJCXBmcmVl KG51bGxzKTsKKwkJCXJldHVybiAoRGF0dW0pIDA7CisJCX0KKwogCQlpZiAobnVsbHNbaV0pCiAJ CQloYXNudWxscyA9IHRydWU7CiAJCWVsc2UKLS0gCjIuMzQuMQoK --000000000000e48f29063a7af2eb Content-Type: text/x-patch; charset="US-ASCII"; name="v1-0002-CAST-expr-AS-newtype-DEFAULT-ON-ERROR.patch" Content-Disposition: attachment; filename="v1-0002-CAST-expr-AS-newtype-DEFAULT-ON-ERROR.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mddvmuwx0 RnJvbSBiZTdlMmJiN2NlY2QxYTI0ZWJjY2U5MjY2NzU5YTM4NWRmZGY1NWExIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBqaWFuIGhlIDxqaWFuLnVuaXZlcnNhbGl0eUBnbWFpbC5jb20+ CkRhdGU6IFN1biwgMjAgSnVsIDIwMjUgMjI6MTE6NTkgKzA4MDAKU3ViamVjdDogW1BBVENIIHYx IDIvMl0gQ0FTVChleHByIEFTIG5ld3R5cGUgREVGQVVMVCBPTiBFUlJPUikKClR5cGUgY2FzdCBu b2RlcyBhcmUgZ2VuZXJhbGx5IG9uZSBvZjogRnVuY0V4cHIsIENvZXJjZVZpYUlPLCBvciBBcnJh eUNvZXJjZUV4cHI7CnNlZSBidWlsZF9jb2VyY2lvbl9leHByZXNzaW9uLiAgV2UndmUgYWxyZWFk eSBtYWRlIENvZXJjZVZpYUlPIGVycm9yIHNhZmVbMF07IHdlCmp1c3QgbmVlZCB0byB0ZWFjaCBp dCB0byBldmFsdWF0ZSBkZWZhdWx0IGV4cHJlc3Npb24gYWZ0ZXIgY29lcmNpb24gZmFpbHVyZXMu CkFycmF5Q29lcmNlRXhwciBpcyBhbHNvIGhhbmRsaW5nIGVycm9ycyBzYWZlbHkuCkhvd2V2ZXIs IEZ1bmNFeHByIGNhbid0IGJlIG1hZGUgZXJyb3Itc2FmZSBkaXJlY3RseSAoc2VlIGV4YW1wbGUg bGlrZSBpbnQ4NCksIHNvCmluc3RlYWQsIHdlIGNvbnN0cnVjdCBhIENvZXJjZVZpYUlPIG5vZGUg dXNpbmcgdGhlIHNvdXJjZSBleHByZXNzaW9uIGFzIGl0cwphcmd1bWVudC4KClswXTogaHR0cHM6 Ly9naXQucG9zdGdyZXNxbC5vcmcvY2dpdC9wb3N0Z3Jlc3FsLmdpdC9jb21taXQvP2lkPWFhYWY5 NDQ5ZWM2YmU2MmNiMGQzMGVkMzU4OGRjMzg0ZjU2Mjc0YmYKY29udGV4dDogaHR0cHM6Ly9wb3N0 Z3IuZXMvbS9DQURrTE09ZnYxSmZZNFVmYS1qY3d3TmJqUWl4TlZpc2tROGpadTNUel9wNjU2aV80 aFFAbWFpbC5nbWFpbC5jb20KZGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS8KCmRlbW86 ClNFTEVDVCBDQVNUKCcxJyBBUyBkYXRlICBERUZBVUxUICcyMDExLTAxLTAxJyBPTiBFUlJPUiks CiAgICAgICBDQVNUKCd7MjM0LGRlZiw1Njd9Jzo6dGV4dFtdIEFTIGludGVnZXJbXSBERUZBVUxU ICd7LTEwMTF9JyBPTiBFUlJPUik7CgogICAgZGF0ZSAgICB8ICBpbnQ0Ci0tLS0tLS0tLS0tLSst LS0tLS0tLS0KIDIwMTEtMDEtMDEgfCB7LTEwMTF9Ci0tLQogc3JjL2JhY2tlbmQvZXhlY3V0b3Iv ZXhlY0V4cHIuYyAgICAgICB8IDExMCArKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQvZXhlY3V0 b3IvZXhlY0V4cHJJbnRlcnAuYyB8ICAzMCArKysrCiBzcmMvYmFja2VuZC9ub2Rlcy9ub2RlRnVu Y3MuYyAgICAgICAgIHwgIDU3ICsrKysrKysKIHNyYy9iYWNrZW5kL29wdGltaXplci91dGlsL2Ns YXVzZXMuYyAgfCAgMjQgKysrCiBzcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55ICAgICAgICAgICAg IHwgIDMxICsrKy0KIHNyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9leHByLmMgICAgICAgfCAyMDUg KysrKysrKysrKysrKysrKysrKysrKysrKysKIHNyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV90YXJn ZXQuYyAgICAgfCAgMTQgKysKIHNyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV90eXBlLmMgICAgICAg fCAgMTMgKysKIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9hcnJheWZ1bmNzLmMgICAgfCAgIDYgKwog c3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jICAgICB8ICAxNSArKwogc3JjL2JhY2tl bmQvdXRpbHMvZm1nci9mbWdyLmMgICAgICAgICB8ICAxMyArKwogc3JjL2luY2x1ZGUvZXhlY3V0 b3IvZXhlY0V4cHIuaCAgICAgICB8ICAgOCArCiBzcmMvaW5jbHVkZS9mbWdyLmggICAgICAgICAg ICAgICAgICAgIHwgICAzICsKIHNyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oICAgICAgICAg fCAgMTcgKysrCiBzcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmggICAgICAgIHwgICA2ICsK IHNyYy9pbmNsdWRlL25vZGVzL3ByaW1ub2Rlcy5oICAgICAgICAgfCAgMzMgKysrKysKIHNyYy9p bmNsdWRlL3BhcnNlci9wYXJzZV90eXBlLmggICAgICAgfCAgIDIgKwogc3JjL3Rlc3QvcmVncmVz cy9leHBlY3RlZC9taXNjLm91dCAgICB8IDEyNyArKysrKysrKysrKysrKysrCiBzcmMvdGVzdC9y ZWdyZXNzL3NxbC9taXNjLnNxbCAgICAgICAgIHwgIDU0ICsrKysrKysKIHNyYy90b29scy9wZ2lu ZGVudC90eXBlZGVmcy5saXN0ICAgICAgfCAgIDMgKwogMjAgZmlsZXMgY2hhbmdlZCwgNzY5IGlu c2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhl Y3V0b3IvZXhlY0V4cHIuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNFeHByLmMKaW5kZXgg MWYzZjg5OTg3NGYuLjUwODU4MjFjMDE2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRv ci9leGVjRXhwci5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNFeHByLmMKQEAgLTk5 LDYgKzk5LDkgQEAgc3RhdGljIHZvaWQgRXhlY0J1aWxkQWdnVHJhbnNDYWxsKEV4cHJTdGF0ZSAq c3RhdGUsIEFnZ1N0YXRlICphZ2dzdGF0ZSwKIHN0YXRpYyB2b2lkIEV4ZWNJbml0SnNvbkV4cHIo SnNvbkV4cHIgKmpzZXhwciwgRXhwclN0YXRlICpzdGF0ZSwKIAkJCQkJCQkgRGF0dW0gKnJlc3Ys IGJvb2wgKnJlc251bGwsCiAJCQkJCQkJIEV4cHJFdmFsU3RlcCAqc2NyYXRjaCk7CitzdGF0aWMg dm9pZCBFeGVjSW5pdFNhZmVUeXBlQ2FzdEV4cHIoU2FmZVR5cGVDYXN0RXhwciAqc3RjZXhwciwg RXhwclN0YXRlICpzdGF0ZSwKKwkJCQkJCQkJCSBEYXR1bSAqcmVzdiwgYm9vbCAqcmVzbnVsbCwK KwkJCQkJCQkJCSBFeHByRXZhbFN0ZXAgKnNjcmF0Y2gpOwogc3RhdGljIHZvaWQgRXhlY0luaXRK c29uQ29lcmNpb24oRXhwclN0YXRlICpzdGF0ZSwgSnNvblJldHVybmluZyAqcmV0dXJuaW5nLAog CQkJCQkJCQkgRXJyb3JTYXZlQ29udGV4dCAqZXNjb250ZXh0LCBib29sIG9taXRfcXVvdGVzLAog CQkJCQkJCQkgYm9vbCBleGlzdHNfY29lcmNlLApAQCAtMTcwMiw2ICsxNzA1LDkgQEAgRXhlY0lu aXRFeHByUmVjKEV4cHIgKm5vZGUsIEV4cHJTdGF0ZSAqc3RhdGUsCiAJCQkJZWxlbXN0YXRlLT5p bm5lcm1vc3RfY2FzZXZhbCA9IChEYXR1bSAqKSBwYWxsb2Moc2l6ZW9mKERhdHVtKSk7CiAJCQkJ ZWxlbXN0YXRlLT5pbm5lcm1vc3RfY2FzZW51bGwgPSAoYm9vbCAqKSBwYWxsb2Moc2l6ZW9mKGJv b2wpKTsKIAorCQkJCWlmIChzdGF0ZS0+ZXNjb250ZXh0ICE9IE5VTEwpCisJCQkJCWVsZW1zdGF0 ZS0+ZXNjb250ZXh0ID0gc3RhdGUtPmVzY29udGV4dDsKKwogCQkJCWlmIChzdGF0ZS0+ZXNjb250 ZXh0ICE9IE5VTEwpCiAJCQkJCWVsZW1zdGF0ZS0+ZXNjb250ZXh0ID0gc3RhdGUtPmVzY29udGV4 dDsKIApAQCAtMjE4MCw2ICsyMTg2LDE0IEBAIEV4ZWNJbml0RXhwclJlYyhFeHByICpub2RlLCBF eHByU3RhdGUgKnN0YXRlLAogCQkJCWJyZWFrOwogCQkJfQogCisJCWNhc2UgVF9TYWZlVHlwZUNh c3RFeHByOgorCQkJeworCQkJCVNhZmVUeXBlQ2FzdEV4cHIgICAqc3RjZXhwciA9IGNhc3ROb2Rl KFNhZmVUeXBlQ2FzdEV4cHIsIG5vZGUpOworCisJCQkJRXhlY0luaXRTYWZlVHlwZUNhc3RFeHBy KHN0Y2V4cHIsIHN0YXRlLCByZXN2LCByZXNudWxsLCAmc2NyYXRjaCk7CisJCQkJYnJlYWs7CisJ CQl9CisKIAkJY2FzZSBUX0NvYWxlc2NlRXhwcjoKIAkJCXsKIAkJCQlDb2FsZXNjZUV4cHIgKmNv YWxlc2NlID0gKENvYWxlc2NlRXhwciAqKSBub2RlOwpAQCAtNDc0NCw2ICs0NzU4LDEwMiBAQCBF eGVjQnVpbGRQYXJhbVNldEVxdWFsKFR1cGxlRGVzYyBkZXNjLAogCXJldHVybiBzdGF0ZTsKIH0K IAorLyoKKyAqIFB1c2ggc3RlcHMgdG8gZXZhbHVhdGUgYSBTYWZlVHlwZUNhc3RFeHByIGFuZCBp dHMgdmFyaW91cyBzdWJzaWRpYXJ5IGV4cHJlc3Npb25zLgorICogV2UgYWxyZWFkeSBoYW5kbGUg Q29lcmNlVmlhSU8sIENvZXJjZVRvRG9tYWluLCBhbmQgQXJyYXlDb2VyY2VFeHByIGVycm9yCisg KiBzb2Z0bHkuICBIb3dldmVyLCBGdW5jRXhwciAoZS5nLiwgaW50ODQpIGNhbm5vdCBiZSBtYWRl IGVycm9yLXNhZmUuCisgKiBJbiBzdWNoIGNhc2VzLCB3ZSB3cmFwIHRoZSBzb3VyY2UgZXhwcmVz c2lvbiBhbmQgdGFyZ2V0IHR5cGUgaW5mb3JtYXRpb24gaW50bworICogYSBDb2VyY2VWaWFJTyBu b2RlIGluc3RlYWQuCisgKi8KK3N0YXRpYyB2b2lkCitFeGVjSW5pdFNhZmVUeXBlQ2FzdEV4cHIo U2FmZVR5cGVDYXN0RXhwciAqc3RjZXhwciAsIEV4cHJTdGF0ZSAqc3RhdGUsCisJCQkJCQkgRGF0 dW0gKnJlc3YsIGJvb2wgKnJlc251bGwsCisJCQkJCQkgRXhwckV2YWxTdGVwICpzY3JhdGNoKQor eworCS8qCisJICogSWYgY29lcmNpb24gdG8gdGhlIHRhcmdldCB0eXBlIGZhaWxzLCBmYWxsIGJh Y2sgdG8gdGhlIGRlZmF1bHQgZXhwcmVzc2lvbgorCSAqIHNwZWNpZmllZCBpbiB0aGUgT04gRVJS T1IgY2xhdXNlLgorCSovCisJaWYgKHN0Y2V4cHItPmNhc3RfZXhwciA9PSBOVUxMKQorCXsKKwkJ RXhlY0luaXRFeHByUmVjKChFeHByICopIHN0Y2V4cHItPmRlZmF1bHRfZXhwciwKKwkJCQkJCXN0 YXRlLCByZXN2LCByZXNudWxsKTsKKwkJcmV0dXJuOworCX0KKwllbHNlIGlmIChzdGNleHByLT5i aW5hcnljb2VyY2libGUpCisJeworCQkvKgorCQkgKiBzb3VyY2UgdHlwZSBiaW5hcnkgY29lcmNl YWJsZSB3aXRoIHRhcmdldCB0eXBlLCBqdXN0IGV2YXVsYXRlIHRoZQorCQkgKiBzb3VyY2UgZXhw cmVzc2lvbgorCQkgKi8KKwkJRXhlY0luaXRFeHByUmVjKChFeHByICopIHN0Y2V4cHItPnNvdXJj ZV9leHByLAorCQkJCQkJc3RhdGUsIHJlc3YsIHJlc251bGwpOworCQlyZXR1cm47CisJfQorCWVs c2UKKwl7CisJCUNvZXJjZVZpYUlPICpuZXdleHByOworCQlTYWZlVHlwZUNhc3RTdGF0ZSAqc3Rj c3RhdGU7CisJCUVycm9yU2F2ZUNvbnRleHQgKmVzY29udGV4dDsKKwkJRXJyb3JTYXZlQ29udGV4 dCAqc2F2ZWRfZXNjb250ZXh0OworCQlMaXN0CSAgICpqdW1wc190b19lbmQgPSBOSUw7CisKKwkJ c3Rjc3RhdGUgPSBwYWxsb2MwKHNpemVvZihTYWZlVHlwZUNhc3RTdGF0ZSkpOworCQlzdGNzdGF0 ZS0+c3RjZXhwciA9IHN0Y2V4cHI7CisJCXN0Y3N0YXRlLT5lc2NvbnRleHQudHlwZSA9IFRfRXJy b3JTYXZlQ29udGV4dDsKKwkJZXNjb250ZXh0ID0gJnN0Y3N0YXRlLT5lc2NvbnRleHQ7CisJCXN0 YXRlLT5lc2NvbnRleHQgPSBlc2NvbnRleHQ7CisKKwkJQXNzZXJ0KHN0Y2V4cHItPmNhc3RfZXhw cik7CisJCS8qIGV2YWx1YXRlIGFyZ3VtZW50IGV4cHJlc3Npb24gaW50byBzdGVwJ3MgcmVzdWx0 IGFyZWEgKi8KKwkJaWYgKElzQShzdGNleHByLT5jYXN0X2V4cHIsIENvZXJjZVZpYUlPKSB8fAor CQkJSXNBKHN0Y2V4cHItPmNhc3RfZXhwciwgQ29lcmNlVG9Eb21haW4pIHx8CisJCQlJc0Eoc3Rj ZXhwci0+Y2FzdF9leHByLCBBcnJheUNvZXJjZUV4cHIpKQorCQkJRXhlY0luaXRFeHByUmVjKChF eHByICopIHN0Y2V4cHItPmNhc3RfZXhwciwKKwkJCQkJCQlzdGF0ZSwgcmVzdiwgcmVzbnVsbCk7 CisJCWVsc2UKKwkJeworCQkJbmV3ZXhwciA9IG1ha2VOb2RlKENvZXJjZVZpYUlPKTsKKwkJCW5l d2V4cHItPmFyZyA9IChFeHByICopIHN0Y2V4cHItPnNvdXJjZV9leHByOworCQkJbmV3ZXhwci0+ cmVzdWx0dHlwZSA9IHN0Y2V4cHItPnJlc3VsdHR5cGU7CisJCQluZXdleHByLT5yZXN1bHRjb2xs aWQgPSBleHByQ29sbGF0aW9uKHN0Y2V4cHItPnNvdXJjZV9leHByKTsKKwkJCW5ld2V4cHItPmNv ZXJjZWZvcm1hdCA9IENPRVJDRV9FWFBMSUNJVF9DQVNUOworCQkJbmV3ZXhwci0+bG9jYXRpb24g PSBleHByTG9jYXRpb24oc3RjZXhwci0+c291cmNlX2V4cHIpOworCisJCQlFeGVjSW5pdEV4cHJS ZWMoKEV4cHIgKikgbmV3ZXhwciwKKwkJCQkJCQlzdGF0ZSwgcmVzdiwgcmVzbnVsbCk7CisJCX0K KworCQlzY3JhdGNoLT5vcGNvZGUgPSBFRU9QX1NBRkVUWVBFX0NBU1Q7CisJCXNjcmF0Y2gtPmQu c3RjZXhwci5zdGNzdGF0ZSA9IHN0Y3N0YXRlOworCQlFeHByRXZhbFB1c2hTdGVwKHN0YXRlLCBz Y3JhdGNoKTsKKworCQlzdGNzdGF0ZS0+anVtcF9lcnJvciA9IHN0YXRlLT5zdGVwc19sZW47CisJ CS8qIEpVTVAgdG8gZW5kIGlmIGZhbHNlLCB0aGF0IGlzLCBza2lwIHRoZSBPTiBFUlJPUiBleHBy ZXNzaW9uLiAqLworCQlqdW1wc190b19lbmQgPSBsYXBwZW5kX2ludChqdW1wc190b19lbmQsIHN0 YXRlLT5zdGVwc19sZW4pOworCQlzY3JhdGNoLT5vcGNvZGUgPSBFRU9QX0pVTVBfSUZfTk9UX1RS VUU7CisJCXNjcmF0Y2gtPnJlc3ZhbHVlID0gJnN0Y3N0YXRlLT5lcnJvci52YWx1ZTsKKwkJc2Ny YXRjaC0+cmVzbnVsbCA9ICZzdGNzdGF0ZS0+ZXJyb3IuaXNudWxsOworCQlzY3JhdGNoLT5kLmp1 bXAuanVtcGRvbmUgPSAtMTsJLyogc2V0IGJlbG93ICovCisJCUV4cHJFdmFsUHVzaFN0ZXAoc3Rh dGUsIHNjcmF0Y2gpOworCisJCS8qIFN0ZXBzIHRvIGV2YWx1YXRlIHRoZSBPTiBFUlJPUiBleHBy ZXNzaW9uICovCisJCXNhdmVkX2VzY29udGV4dCA9IHN0YXRlLT5lc2NvbnRleHQ7CisJCXN0YXRl LT5lc2NvbnRleHQgPSBOVUxMOworCQlFeGVjSW5pdEV4cHJSZWMoKEV4cHIgKikgc3Rjc3RhdGUt PnN0Y2V4cHItPmRlZmF1bHRfZXhwciwKKwkJCQkJCXN0YXRlLCByZXN2LCByZXNudWxsKTsKKwkJ c3RhdGUtPmVzY29udGV4dCA9IHNhdmVkX2VzY29udGV4dDsKKworCQlmb3JlYWNoX2ludChsYywg anVtcHNfdG9fZW5kKQorCQl7CisJCQlFeHByRXZhbFN0ZXAgKmFzID0gJnN0YXRlLT5zdGVwc1ts Y107CisKKwkJCWFzLT5kLmp1bXAuanVtcGRvbmUgPSBzdGF0ZS0+c3RlcHNfbGVuOworCQl9CisJ CXN0Y3N0YXRlLT5qdW1wX2VuZCA9IHN0YXRlLT5zdGVwc19sZW47CisJfQorfQorCiAvKgogICog UHVzaCBzdGVwcyB0byBldmFsdWF0ZSBhIEpzb25FeHByIGFuZCBpdHMgdmFyaW91cyBzdWJzaWRp YXJ5IGV4cHJlc3Npb25zLgogICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9l eGVjRXhwckludGVycC5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHJJbnRlcnAuYwpp bmRleCA4MWU0NmNmZjcyNS4uZjMxYjY3YTQ3ZTAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4 ZWN1dG9yL2V4ZWNFeHBySW50ZXJwLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4 cHJJbnRlcnAuYwpAQCAtNTY4LDYgKzU2OCw3IEBAIEV4ZWNJbnRlcnBFeHByKEV4cHJTdGF0ZSAq c3RhdGUsIEV4cHJDb250ZXh0ICplY29udGV4dCwgYm9vbCAqaXNudWxsKQogCQkmJkNBU0VfRUVP UF9YTUxFWFBSLAogCQkmJkNBU0VfRUVPUF9KU09OX0NPTlNUUlVDVE9SLAogCQkmJkNBU0VfRUVP UF9JU19KU09OLAorCQkmJkNBU0VfRUVPUF9TQUZFVFlQRV9DQVNULAogCQkmJkNBU0VfRUVPUF9K U09ORVhQUl9QQVRILAogCQkmJkNBU0VfRUVPUF9KU09ORVhQUl9DT0VSQ0lPTiwKIAkJJiZDQVNF X0VFT1BfSlNPTkVYUFJfQ09FUkNJT05fRklOSVNILApAQCAtMTkyNiw2ICsxOTI3LDExIEBAIEV4 ZWNJbnRlcnBFeHByKEV4cHJTdGF0ZSAqc3RhdGUsIEV4cHJDb250ZXh0ICplY29udGV4dCwgYm9v bCAqaXNudWxsKQogCQkJRUVPX05FWFQoKTsKIAkJfQogCisJCUVFT19DQVNFKEVFT1BfU0FGRVRZ UEVfQ0FTVCkKKwkJeworCQkJRUVPX0pVTVAoRXhlY0V2YWxTYWZlVHlwZUNhc3Qoc3RhdGUsIG9w KSk7CisJCX0KKwogCQlFRU9fQ0FTRShFRU9QX0pTT05FWFBSX1BBVEgpCiAJCXsKIAkJCS8qIHRv byBjb21wbGV4IGZvciBhbiBpbmxpbmUgaW1wbGVtZW50YXRpb24gKi8KQEAgLTUxODcsNiArNTE5 MywzMCBAQCBHZXRKc29uQmVoYXZpb3JWYWx1ZVN0cmluZyhKc29uQmVoYXZpb3IgKmJlaGF2aW9y KQogCXJldHVybiBwc3RyZHVwKGJlaGF2aW9yX25hbWVzW2JlaGF2aW9yLT5idHlwZV0pOwogfQog CitpbnQKK0V4ZWNFdmFsU2FmZVR5cGVDYXN0KEV4cHJTdGF0ZSAqc3RhdGUsIEV4cHJFdmFsU3Rl cCAqb3ApCit7CisJU2FmZVR5cGVDYXN0U3RhdGUgKnN0Y3N0YXRlID0gb3AtPmQuc3RjZXhwci5z dGNzdGF0ZTsKKworCWlmIChTT0ZUX0VSUk9SX09DQ1VSUkVEKCZzdGNzdGF0ZS0+ZXNjb250ZXh0 KSkKKwl7CisJCSpvcC0+cmVzdmFsdWUgPSAoRGF0dW0pIDA7CisJCSpvcC0+cmVzbnVsbCA9IHRy dWU7CisKKwkJc3Rjc3RhdGUtPmVycm9yLnZhbHVlID0gQm9vbEdldERhdHVtKHRydWUpOworCisJ CS8qCisJCSAqIFJlc2V0IGZvciBuZXh0IHVzZSBzdWNoIGFzIGZvciBjYXRjaGluZyBlcnJvcnMg d2hlbiBjb2VyY2luZyBhCisJCSAqIEpzb25CZWhhdmlvciBleHByZXNzaW9uLgorCQkgKi8KKwkJ c3Rjc3RhdGUtPmVzY29udGV4dC5lcnJvcl9vY2N1cnJlZCA9IGZhbHNlOworCQlzdGNzdGF0ZS0+ ZXNjb250ZXh0LmRldGFpbHNfd2FudGVkID0gZmFsc2U7CisKKwkJcmV0dXJuIHN0Y3N0YXRlLT5q dW1wX2Vycm9yOworCX0KKwlyZXR1cm4gc3Rjc3RhdGUtPmp1bXBfZW5kOworfQorCiAvKgogICog Q2hlY2tzIGlmIGFuIGVycm9yIG9jY3VycmVkIGluIEV4ZWNFdmFsSnNvbkNvZXJjaW9uKCkuICBJ ZiBzbywgdGhpcyBzZXRzCiAgKiBKc29uRXhwclN0YXRlLmVycm9yIHRvIHRyaWdnZXIgdGhlIE9O IEVSUk9SIGhhbmRsaW5nIHN0ZXBzLCB1bmxlc3MgdGhlCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9ub2Rlcy9ub2RlRnVuY3MuYyBiL3NyYy9iYWNrZW5kL25vZGVzL25vZGVGdW5jcy5jCmluZGV4 IDdiYzgyMzUwN2YxLi41ZGE3YmQ1ZDg4ZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvbm9kZXMv bm9kZUZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvbm9kZXMvbm9kZUZ1bmNzLmMKQEAgLTIwNiw2 ICsyMDYsOSBAQCBleHByVHlwZShjb25zdCBOb2RlICpleHByKQogCQljYXNlIFRfUm93Q29tcGFy ZUV4cHI6CiAJCQl0eXBlID0gQk9PTE9JRDsKIAkJCWJyZWFrOworCQljYXNlIFRfU2FmZVR5cGVD YXN0RXhwcjoKKwkJCXR5cGUgPSAoKGNvbnN0IFNhZmVUeXBlQ2FzdEV4cHIgKikgZXhwciktPnJl c3VsdHR5cGU7CisJCQlicmVhazsKIAkJY2FzZSBUX0NvYWxlc2NlRXhwcjoKIAkJCXR5cGUgPSAo KGNvbnN0IENvYWxlc2NlRXhwciAqKSBleHByKS0+Y29hbGVzY2V0eXBlOwogCQkJYnJlYWs7CkBA IC00NTAsNiArNDUzLDggQEAgZXhwclR5cG1vZChjb25zdCBOb2RlICpleHByKQogCQkJCXJldHVy biB0eXBtb2Q7CiAJCQl9CiAJCQlicmVhazsKKwkJY2FzZSBUX1NhZmVUeXBlQ2FzdEV4cHI6CisJ CQlyZXR1cm4gKChjb25zdCBTYWZlVHlwZUNhc3RFeHByICopIGV4cHIpLT5yZXN1bHR0eXBtb2Q7 CiAJCWNhc2UgVF9Db2FsZXNjZUV4cHI6CiAJCQl7CiAJCQkJLyoKQEAgLTk2NSw2ICs5NzAsOSBA QCBleHByQ29sbGF0aW9uKGNvbnN0IE5vZGUgKmV4cHIpCiAJCQkvKiBSb3dDb21wYXJlRXhwcidz IHJlc3VsdCBpcyBib29sZWFuIC4uLiAqLwogCQkJY29sbCA9IEludmFsaWRPaWQ7CS8qIC4uLiBz byBpdCBoYXMgbm8gY29sbGF0aW9uICovCiAJCQlicmVhazsKKwkJY2FzZSBUX1NhZmVUeXBlQ2Fz dEV4cHI6CisJCQljb2xsID0gKChjb25zdCBTYWZlVHlwZUNhc3RFeHByICopIGV4cHIpLT5yZXN1 bHRjb2xsaWQ7CisJCQlicmVhazsKIAkJY2FzZSBUX0NvYWxlc2NlRXhwcjoKIAkJCWNvbGwgPSAo KGNvbnN0IENvYWxlc2NlRXhwciAqKSBleHByKS0+Y29hbGVzY2Vjb2xsaWQ7CiAJCQlicmVhazsK QEAgLTEyMzIsNiArMTI0MCw5IEBAIGV4cHJTZXRDb2xsYXRpb24oTm9kZSAqZXhwciwgT2lkIGNv bGxhdGlvbikKIAkJCS8qIFJvd0NvbXBhcmVFeHByJ3MgcmVzdWx0IGlzIGJvb2xlYW4gLi4uICov CiAJCQlBc3NlcnQoIU9pZElzVmFsaWQoY29sbGF0aW9uKSk7IC8qIC4uLiBzbyBuZXZlciBzZXQg YSBjb2xsYXRpb24gKi8KIAkJCWJyZWFrOworCQljYXNlIFRfU2FmZVR5cGVDYXN0RXhwcjoKKwkJ CSgoU2FmZVR5cGVDYXN0RXhwciAqKSBleHByKS0+cmVzdWx0Y29sbGlkID0gY29sbGF0aW9uOwor CQkJYnJlYWs7CiAJCWNhc2UgVF9Db2FsZXNjZUV4cHI6CiAJCQkoKENvYWxlc2NlRXhwciAqKSBl eHByKS0+Y29hbGVzY2Vjb2xsaWQgPSBjb2xsYXRpb247CiAJCQlicmVhazsKQEAgLTE1NTQsNiAr MTU2NSwxNSBAQCBleHByTG9jYXRpb24oY29uc3QgTm9kZSAqZXhwcikKIAkJCS8qIGp1c3QgdXNl IGxlZnRtb3N0IGFyZ3VtZW50J3MgbG9jYXRpb24gKi8KIAkJCWxvYyA9IGV4cHJMb2NhdGlvbigo Tm9kZSAqKSAoKGNvbnN0IFJvd0NvbXBhcmVFeHByICopIGV4cHIpLT5sYXJncyk7CiAJCQlicmVh azsKKwkJY2FzZSBUX1NhZmVUeXBlQ2FzdEV4cHI6CisJCQl7CisJCQkJY29uc3QgU2FmZVR5cGVD YXN0RXhwciAqY2FzdF9leHByID0gKGNvbnN0IFNhZmVUeXBlQ2FzdEV4cHIgKikgZXhwcjsKKwkJ CQlpZiAoY2FzdF9leHByLT5jYXN0X2V4cHIpCisJCQkJCWxvYyA9IGV4cHJMb2NhdGlvbihjYXN0 X2V4cHItPmNhc3RfZXhwcik7CisJCQkJZWxzZQorCQkJCQlsb2MgPSBleHByTG9jYXRpb24oY2Fz dF9leHByLT5kZWZhdWx0X2V4cHIpOworCQkJCWJyZWFrOworCQkJfQogCQljYXNlIFRfQ29hbGVz Y2VFeHByOgogCQkJLyogQ09BTEVTQ0Uga2V5d29yZCBzaG91bGQgYWx3YXlzIGJlIHRoZSBmaXJz dCB0aGluZyAqLwogCQkJbG9jID0gKChjb25zdCBDb2FsZXNjZUV4cHIgKikgZXhwciktPmxvY2F0 aW9uOwpAQCAtMjMyNSw2ICsyMzQ1LDE4IEBAIGV4cHJlc3Npb25fdHJlZV93YWxrZXJfaW1wbChO b2RlICpub2RlLAogCQkJCQlyZXR1cm4gdHJ1ZTsKIAkJCX0KIAkJCWJyZWFrOworCQljYXNlIFRf U2FmZVR5cGVDYXN0RXhwcjoKKwkJCXsKKwkJCQlTYWZlVHlwZUNhc3RFeHByICAgKnNjZXhwciA9 IChTYWZlVHlwZUNhc3RFeHByICopIG5vZGU7CisKKwkJCQlpZiAoV0FMSyhzY2V4cHItPnNvdXJj ZV9leHByKSkKKwkJCQkJcmV0dXJuIHRydWU7CisJCQkJaWYgKFdBTEsoc2NleHByLT5jYXN0X2V4 cHIpKQorCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQlpZiAoV0FMSyhzY2V4cHItPmRlZmF1bHRfZXhw cikpCisJCQkJCXJldHVybiB0cnVlOworCQkJfQorCQkJYnJlYWs7CiAJCWNhc2UgVF9Db2FsZXNj ZUV4cHI6CiAJCQlyZXR1cm4gV0FMSygoKENvYWxlc2NlRXhwciAqKSBub2RlKS0+YXJncyk7CiAJ CWNhc2UgVF9NaW5NYXhFeHByOgpAQCAtMzMzNCw2ICszMzY2LDE5IEBAIGV4cHJlc3Npb25fdHJl ZV9tdXRhdG9yX2ltcGwoTm9kZSAqbm9kZSwKIAkJCQlyZXR1cm4gKE5vZGUgKikgbmV3bm9kZTsK IAkJCX0KIAkJCWJyZWFrOworCQljYXNlIFRfU2FmZVR5cGVDYXN0RXhwcjoKKwkJCXsKKwkJCQlT YWZlVHlwZUNhc3RFeHByICAgKnNjZXhwciA9IChTYWZlVHlwZUNhc3RFeHByICopIG5vZGU7CisJ CQkJU2FmZVR5cGVDYXN0RXhwciAgICpuZXdub2RlOworCisJCQkJRkxBVENPUFkobmV3bm9kZSwg c2NleHByLCBTYWZlVHlwZUNhc3RFeHByKTsKKwkJCQlNVVRBVEUobmV3bm9kZS0+c291cmNlX2V4 cHIsIHNjZXhwci0+c291cmNlX2V4cHIsIE5vZGUgKik7CisJCQkJTVVUQVRFKG5ld25vZGUtPmNh c3RfZXhwciwgc2NleHByLT5jYXN0X2V4cHIsIE5vZGUgKik7CisJCQkJTVVUQVRFKG5ld25vZGUt PmRlZmF1bHRfZXhwciwgc2NleHByLT5kZWZhdWx0X2V4cHIsIE5vZGUgKik7CisKKwkJCQlyZXR1 cm4gKE5vZGUgKikgbmV3bm9kZTsKKwkJCX0KKwkJCWJyZWFrOwogCQljYXNlIFRfQ29hbGVzY2VF eHByOgogCQkJewogCQkJCUNvYWxlc2NlRXhwciAqY29hbGVzY2VleHByID0gKENvYWxlc2NlRXhw ciAqKSBub2RlOwpAQCAtNDQ2OCw2ICs0NTEzLDE4IEBAIHJhd19leHByZXNzaW9uX3RyZWVfd2Fs a2VyX2ltcGwoTm9kZSAqbm9kZSwKIAkJCQkJcmV0dXJuIHRydWU7CiAJCQl9CiAJCQlicmVhazsK KwkJY2FzZSBUX1NhZmVUeXBlQ2FzdEV4cHI6CisJCQl7CisJCQkJU2FmZVR5cGVDYXN0RXhwciAg ICpzdGMgPSAoU2FmZVR5cGVDYXN0RXhwciAqKSBub2RlOworCisJCQkJaWYgKFdBTEsoc3RjLT5z b3VyY2VfZXhwcikpCisJCQkJCXJldHVybiB0cnVlOworCQkJCWlmIChXQUxLKHN0Yy0+Y2FzdF9l eHByKSkKKwkJCQkJcmV0dXJuIHRydWU7CisJCQkJaWYgKFdBTEsoc3RjLT5kZWZhdWx0X2V4cHIp KQorCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCX0KKwkJCWJyZWFrOwogCQljYXNlIFRfQ29sbGF0ZUNs YXVzZToKIAkJCXJldHVybiBXQUxLKCgoQ29sbGF0ZUNsYXVzZSAqKSBub2RlKS0+YXJnKTsKIAkJ Y2FzZSBUX1NvcnRCeToKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL2Ns YXVzZXMuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL2NsYXVzZXMuYwppbmRleCBmNDUx MzFjMzRjNS4uZGY3ODFjNDQ0ZmQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci91 dGlsL2NsYXVzZXMuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9jbGF1c2VzLmMK QEAgLTI5MzgsNiArMjkzOCwzMCBAQCBldmFsX2NvbnN0X2V4cHJlc3Npb25zX211dGF0b3IoTm9k ZSAqbm9kZSwKIAkJCQkJCQkJCQkJCSAgY29weU9iamVjdChqdmUtPmZvcm1hdCkpOwogCQkJfQog CisJCWNhc2UgVF9TYWZlVHlwZUNhc3RFeHByOgorCQkJeworCQkJCVNhZmVUeXBlQ2FzdEV4cHIg KnN0YyA9IChTYWZlVHlwZUNhc3RFeHByICopIG5vZGU7CisJCQkJU2FmZVR5cGVDYXN0RXhwcgkg ICAqbmV3ZXhwcjsKKwkJCQlOb2RlCSAgICpzb3VyY2VfZXhwciA9IHN0Yy0+c291cmNlX2V4cHI7 CisJCQkJTm9kZQkgICAqZGVmYXVsdF9leHByID0gc3RjLT5kZWZhdWx0X2V4cHI7CisKKwkJCQkv KgorCQkJCSAqIFdlIGNhbiBub3QgZm9sZCBjYXN0X2V4cHIgdG8gYSBjb25zdGFudCBub3csIGl0 IG1heSBlcnJvcgorCQkJCSAqIG91dC4gIEUuZy4gQ0FTVCgxIEFTIERBVEUgREVGQVVMVCBOVUxM IE9OIEVSUk9SKS4KKwkJCQkgKi8KKwkJCQlzb3VyY2VfZXhwciA9IGV2YWxfY29uc3RfZXhwcmVz c2lvbnNfbXV0YXRvcihzb3VyY2VfZXhwciwgY29udGV4dCk7CisJCQkJZGVmYXVsdF9leHByID0g ZXZhbF9jb25zdF9leHByZXNzaW9uc19tdXRhdG9yKGRlZmF1bHRfZXhwciwgY29udGV4dCk7CisK KwkJCQluZXdleHByID0gbWFrZU5vZGUoU2FmZVR5cGVDYXN0RXhwcik7CisJCQkJbmV3ZXhwci0+ c291cmNlX2V4cHIgPSBzb3VyY2VfZXhwcjsKKwkJCQluZXdleHByLT5jYXN0X2V4cHIgPSBzdGMt PmNhc3RfZXhwcjsKKwkJCQluZXdleHByLT5kZWZhdWx0X2V4cHIgPSBkZWZhdWx0X2V4cHI7CisJ CQkJbmV3ZXhwci0+YmluYXJ5Y29lcmNpYmxlID0gc3RjLT5iaW5hcnljb2VyY2libGU7CisJCQkJ bmV3ZXhwci0+cmVzdWx0dHlwZSA9IHN0Yy0+cmVzdWx0dHlwZTsKKwkJCQluZXdleHByLT5yZXN1 bHR0eXBtb2QgPSBzdGMtPnJlc3VsdHR5cG1vZDsKKwkJCQluZXdleHByLT5yZXN1bHRjb2xsaWQg PSBzdGMtPnJlc3VsdGNvbGxpZDsKKwkJCQlyZXR1cm4gKE5vZGUgKikgbmV3ZXhwcjsKKwkJCX0K IAkJY2FzZSBUX1N1YlBsYW46CiAJCWNhc2UgVF9BbHRlcm5hdGl2ZVN1YlBsYW46CiAKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkgYi9zcmMvYmFja2VuZC9wYXJzZXIvZ3Jh bS55CmluZGV4IDczMzQ1YmIzYzcwLi43ZTE2YjVmYzlmMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvcGFyc2VyL2dyYW0ueQorKysgYi9zcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55CkBAIC02NDIs NiArNjQyLDggQEAgc3RhdGljIE5vZGUgKm1ha2VSZWN1cnNpdmVWaWV3U2VsZWN0KGNoYXIgKnJl bG5hbWUsIExpc3QgKmFsaWFzZXMsIE5vZGUgKnF1ZXJ5KTsKICV0eXBlIDxwYXJ0Ym91bmRzcGVj PiBQYXJ0aXRpb25Cb3VuZFNwZWMKICV0eXBlIDxsaXN0PgkJaGFzaF9wYXJ0Ym91bmQKICV0eXBl IDxkZWZlbHQ+CQloYXNoX3BhcnRib3VuZF9lbGVtCisldHlwZSA8bm9kZT4JY2FzdF9vbl9lcnJv cl9jbGF1c2UKKyV0eXBlIDxub2RlPgljYXN0X29uX2Vycm9yX2FjdGlvbgogCiAldHlwZSA8bm9k ZT4JanNvbl9mb3JtYXRfY2xhdXNlCiAJCQkJanNvbl9mb3JtYXRfY2xhdXNlX29wdApAQCAtMTU5 NDMsOCArMTU5NDUsMjUgQEAgZnVuY19leHByX2NvbW1vbl9zdWJleHByOgogCQkJCXsKIAkJCQkJ JCQgPSBtYWtlU1FMVmFsdWVGdW5jdGlvbihTVkZPUF9DVVJSRU5UX1NDSEVNQSwgLTEsIEAxKTsK IAkJCQl9Ci0JCQl8IENBU1QgJygnIGFfZXhwciBBUyBUeXBlbmFtZSAnKScKLQkJCQl7ICQkID0g bWFrZVR5cGVDYXN0KCQzLCAkNSwgQDEpOyB9CisJCQl8IENBU1QgJygnIGFfZXhwciBBUyBUeXBl bmFtZSBjYXN0X29uX2Vycm9yX2NsYXVzZSAnKScKKwkJCQl7CisJCQkJCVR5cGVDYXN0ICpjYXN0 ID0gKFR5cGVDYXN0ICopIG1ha2VUeXBlQ2FzdCgkMywgJDUsIEAxKTsKKwkJCQkJaWYgKCQ2ID09 IE5VTEwpCisJCQkJCQkkJCA9IChOb2RlICopIGNhc3Q7CisJCQkJCWVsc2UKKwkJCQkJeworCQkJ CQkJU2FmZVR5cGVDYXN0ICpzYWZlY2FzdCA9IG1ha2VOb2RlKFNhZmVUeXBlQ2FzdCk7CisKKwkJ CQkJCXNhZmVjYXN0LT5jYXN0ID0gKE5vZGUgKikgY2FzdDsKKwkJCQkJCXNhZmVjYXN0LT5leHBy ID0gJDY7CisKKwkJCQkJCS8qCisJCQkJCQkgKiBPbi1lcnJvciBhY3Rpb25zIG11c3QgdGhlbXNl bHZlcyBiZSB0eXBlY2FzdCB0byB0aGUKKwkJCQkJCSAqIHNhbWUgdHlwZSBhcyB0aGUgb3JpZ2lu YWwgZXhwcmVzc2lvbi4KKwkJCQkJCSAqLworCQkJCQkJJCQgPSAoTm9kZSAqKSBzYWZlY2FzdDsK KwkJCQkJfQorCQkJCX0KIAkJCXwgRVhUUkFDVCAnKCcgZXh0cmFjdF9saXN0ICcpJwogCQkJCXsK IAkJCQkJJCQgPSAoTm9kZSAqKSBtYWtlRnVuY0NhbGwoU3lzdGVtRnVuY05hbWUoImV4dHJhY3Qi KSwKQEAgLTE2MzMwLDYgKzE2MzQ5LDE0IEBAIGZ1bmNfZXhwcl9jb21tb25fc3ViZXhwcjoKIAkJ CQl9CiAJCQk7CiAKK2Nhc3Rfb25fZXJyb3JfY2xhdXNlOiBjYXN0X29uX2Vycm9yX2FjdGlvbiBP TiBFUlJPUl9QIHsgJCQgPSAkMTsgfQorCQkJfCAvKiBFTVBUWSAqLyB7ICQkID0gTlVMTDsgfQor CQk7CisKK2Nhc3Rfb25fZXJyb3JfYWN0aW9uOiBFUlJPUl9QIHsgJCQgPSBOVUxMOyB9CisJCQl8 IE5VTExfUCB7ICQkID0gbWFrZU51bGxBQ29uc3QoLTEpOyB9CisJCQl8IERFRkFVTFQgYV9leHBy IHsgJCQgPSAkMjsgfQorCQk7CiAKIC8qCiAgKiBTUUwvWE1MIHN1cHBvcnQKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9leHByLmMgYi9zcmMvYmFja2VuZC9wYXJzZXIvcGFy c2VfZXhwci5jCmluZGV4IGQ2NjI3NjgwMWM2Li45Mjk5ODA4N2U2NyAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvcGFyc2VyL3BhcnNlX2V4cHIuYworKysgYi9zcmMvYmFja2VuZC9wYXJzZXIvcGFy c2VfZXhwci5jCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSAidXRpbHMvZGF0ZS5oIgogI2lu Y2x1ZGUgInV0aWxzL2ZtZ3JvaWRzLmgiCiAjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCisj aW5jbHVkZSAidXRpbHMvc3lzY2FjaGUuaCIKICNpbmNsdWRlICJ1dGlscy90aW1lc3RhbXAuaCIK ICNpbmNsdWRlICJ1dGlscy94bWwuaCIKIApAQCAtNzYsNiArNzcsNyBAQCBzdGF0aWMgTm9kZSAq dHJhbnNmb3JtV2hvbGVSb3dSZWYoUGFyc2VTdGF0ZSAqcHN0YXRlLAogCQkJCQkJCQkgIGludCBz dWJsZXZlbHNfdXAsIGludCBsb2NhdGlvbik7CiBzdGF0aWMgTm9kZSAqdHJhbnNmb3JtSW5kaXJl Y3Rpb24oUGFyc2VTdGF0ZSAqcHN0YXRlLCBBX0luZGlyZWN0aW9uICppbmQpOwogc3RhdGljIE5v ZGUgKnRyYW5zZm9ybVR5cGVDYXN0KFBhcnNlU3RhdGUgKnBzdGF0ZSwgVHlwZUNhc3QgKnRjKTsK K3N0YXRpYyBOb2RlICp0cmFuc2Zvcm1UeXBlU2FmZUNhc3QoUGFyc2VTdGF0ZSAqcHN0YXRlLCBT YWZlVHlwZUNhc3QgKnRjKTsKIHN0YXRpYyBOb2RlICp0cmFuc2Zvcm1Db2xsYXRlQ2xhdXNlKFBh cnNlU3RhdGUgKnBzdGF0ZSwgQ29sbGF0ZUNsYXVzZSAqYyk7CiBzdGF0aWMgTm9kZSAqdHJhbnNm b3JtSnNvbk9iamVjdENvbnN0cnVjdG9yKFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAkJCQkJCQkJCQkJ SnNvbk9iamVjdENvbnN0cnVjdG9yICpjdG9yKTsKQEAgLTE3MCw2ICsxNzIsMTAgQEAgdHJhbnNm b3JtRXhwclJlY3Vyc2UoUGFyc2VTdGF0ZSAqcHN0YXRlLCBOb2RlICpleHByKQogCQkJcmVzdWx0 ID0gdHJhbnNmb3JtVHlwZUNhc3QocHN0YXRlLCAoVHlwZUNhc3QgKikgZXhwcik7CiAJCQlicmVh azsKIAorCQljYXNlIFRfU2FmZVR5cGVDYXN0OgorCQkJcmVzdWx0ID0gdHJhbnNmb3JtVHlwZVNh ZmVDYXN0KHBzdGF0ZSwgKFNhZmVUeXBlQ2FzdCAqKSBleHByKTsKKwkJCWJyZWFrOworCiAJCWNh c2UgVF9Db2xsYXRlQ2xhdXNlOgogCQkJcmVzdWx0ID0gdHJhbnNmb3JtQ29sbGF0ZUNsYXVzZShw c3RhdGUsIChDb2xsYXRlQ2xhdXNlICopIGV4cHIpOwogCQkJYnJlYWs7CkBAIC0yNzc5LDYgKzI3 ODUsMjA1IEBAIHRyYW5zZm9ybVR5cGVDYXN0KFBhcnNlU3RhdGUgKnBzdGF0ZSwgVHlwZUNhc3Qg KnRjKQogCXJldHVybiByZXN1bHQ7CiB9CiAKKworLyoKKyAqIFJlY3Vyc2l2ZWx5IGNoZWNrcyBp ZiB0aGUgZ2l2ZW4gZXhwcmVzc2lvbiwgb3IgaXRzIHN1Yi1ub2RlIGluIHNvbWUgY2FzZXMsCisg KiBpcyB2YWxpZCBmb3IgdXNpbmcgYXMgYW4gT04gRVJST1IgLyBPTiBFTVBUWSBERUZBVUxUIGV4 cHJlc3Npb24uCisgKi8KK3N0YXRpYyBib29sCitWYWxpZENhc3REZWZhdWx0RXhwcihOb2RlICpl eHByLCB2b2lkICpjb250ZXh0KQoreworCWlmIChleHByID09IE5VTEwpCisJCXJldHVybiBmYWxz ZTsKKworCXN3aXRjaCAobm9kZVRhZyhleHByKSkKKwl7CisJCQkvKiBBY2NlcHRhYmxlIGV4cHJl c3Npb24gbm9kZXMgKi8KKwkJY2FzZSBUX0NvbnN0OgorCQljYXNlIFRfRnVuY0V4cHI6CisJCWNh c2UgVF9PcEV4cHI6CisJCQlyZXR1cm4gdHJ1ZTsKKworCQkJLyogQWNjZXB0YWJsZSBpZmYgYXJn IG9mIHRoZSBmb2xsb3dpbmcgbm9kZXMgaXMgb25lIG9mIHRoZSBhYm92ZSAqLworCQljYXNlIFRf Q29lcmNlVmlhSU86CisJCWNhc2UgVF9Db2VyY2VUb0RvbWFpbjoKKwkJY2FzZSBUX0FycmF5Q29l cmNlRXhwcjoKKwkJY2FzZSBUX0NvbnZlcnRSb3d0eXBlRXhwcjoKKwkJY2FzZSBUX1JlbGFiZWxU eXBlOgorCQkJcmV0dXJuIGV4cHJlc3Npb25fdHJlZV93YWxrZXIoZXhwciwgVmFsaWRDYXN0RGVm YXVsdEV4cHIsCisJCQkJCQkJCQkJICBjb250ZXh0KTsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOwor CX0KKworCXJldHVybiBmYWxzZTsKK30KKworCisvKgorICogSGFuZGxlIGFuIGV4cGxpY2l0IENB U1QgY29uc3RydWN0LgorICoKKyAqIFRyYW5zZm9ybSB0aGUgYXJndW1lbnQsIGxvb2sgdXAgdGhl IHR5cGUgbmFtZSwgYW5kIGFwcGx5IGFueSBuZWNlc3NhcnkKKyAqIGNvZXJjaW9uIGZ1bmN0aW9u KHMpLgorICogbXVzdCBkbyB2aWEgY29lcmNlIHZpYSBJTy4KKyAqIFNlZSB0cmFuc2Zvcm1Kc29u RnVuY0V4cHIsIEV4ZWNJbml0SnNvbkV4cHIKKyAqIG1heWJlIHdlIGFsc28gbmVlZCBhIEpzb25F eHByIE5vZGUgcmVwcmVzZW50CisgKi8KK3N0YXRpYyBOb2RlICoKK3RyYW5zZm9ybVR5cGVTYWZl Q2FzdChQYXJzZVN0YXRlICpwc3RhdGUsIFNhZmVUeXBlQ2FzdCAqdGMpCit7CisJU2FmZVR5cGVD YXN0RXhwciAgICpyZXN1bHQ7CisJTm9kZQkgICAqZGVmX2V4cHI7CisJTm9kZQkgICAqY2FzdF9l eHByID0gTlVMTDsKKwlPaWQJCQlpbnB1dFR5cGU7CisJT2lkCQkJdGFyZ2V0VHlwZTsKKwlpbnQz MgkJdGFyZ2V0VHlwbW9kOworCWludAkJCWxvY2F0aW9uOworCU5vZGUJICAgKnNvdXJjZV9leHBy ID0gTlVMTDsKKwlUeXBlQ2FzdCAgICp0Y2FzdCA9IChUeXBlQ2FzdCAqKSB0Yy0+Y2FzdDsKKwlO b2RlCSAgICp0Y19hcmcgPSB0Y2FzdC0+YXJnOworCWJvb2wJCWNhbl9jb2VyY2UgPSB0cnVlOwor CWludAkJCWRlZl9leHByX2xvYyA9IC0xOworCisJcmVzdWx0ID0gbWFrZU5vZGUoU2FmZVR5cGVD YXN0RXhwcik7CisKKwkvKiBMb29rIHVwIHRoZSB0eXBlIG5hbWUgZmlyc3QgKi8KKwl0eXBlbmFt ZVR5cGVJZEFuZE1vZChwc3RhdGUsIHRjYXN0LT50eXBlTmFtZSwgJnRhcmdldFR5cGUsICZ0YXJn ZXRUeXBtb2QpOworCisJcmVzdWx0LT5yZXN1bHR0eXBlID0gdGFyZ2V0VHlwZTsKKwlyZXN1bHQt PnJlc3VsdHR5cG1vZCA9IHRhcmdldFR5cG1vZDsKKworCS8qIG5vdyBsb29raW5nIGF0IGNhc3Qg ZmFpbCBkZWZhdWx0IGV4cHJlc3Npb24gKi8KKwlkZWZfZXhwcl9sb2MgPSBleHByTG9jYXRpb24o dGMtPmV4cHIpOworCWRlZl9leHByID0gdHJhbnNmb3JtRXhwclJlY3Vyc2UocHN0YXRlLCB0Yy0+ ZXhwcik7CisKKwlpZiAoSXNBKGRlZl9leHByLCBDb2xsYXRlRXhwcikpCisJCWVyZXBvcnQoRVJS T1IsCisJCQkJZXJyY29kZShFUlJDT0RFX0RBVEFUWVBFX01JU01BVENIKSwKKwkJCQllcnJtc2co IkRFRkFVTFQgZXhwcmVzc2lvbiBjYW4gbm90IGFzIENPTExBVEUgY2xhdXNlIiksCisJCQkJcGFy c2VyX2VycnBvc2l0aW9uKHBzdGF0ZSwgZGVmX2V4cHJfbG9jKSk7CisJaWYgKCFWYWxpZENhc3RE ZWZhdWx0RXhwcihkZWZfZXhwciwgTlVMTCkpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJZXJyY29k ZShFUlJDT0RFX0RBVEFUWVBFX01JU01BVENIKSwKKwkJCQllcnJtc2coImNhbiBvbmx5IHNwZWNp ZnkgYSBjb25zdGFudCwgbm9uLWFnZ3JlZ2F0ZSBmdW5jdGlvbiwgb3Igb3BlcmF0b3IgZXhwcmVz c2lvbiBmb3IgREVGQVVMVCIpLAorCQkJCXBhcnNlcl9lcnJwb3NpdGlvbihwc3RhdGUsIGRlZl9l eHByX2xvYykpOworCWlmIChjb250YWluX3Zhcl9jbGF1c2UoZGVmX2V4cHIpKQorCQllcmVwb3J0 KEVSUk9SLAorCQkJCWVycmNvZGUoRVJSQ09ERV9EQVRBVFlQRV9NSVNNQVRDSCksCisJCQkJZXJy bXNnKCJERUZBVUxUIGV4cHJlc3Npb24gbXVzdCBub3QgY29udGFpbiBjb2x1bW4gcmVmZXJlbmNl cyIpLAorCQkJCXBhcnNlcl9lcnJwb3NpdGlvbihwc3RhdGUsIGRlZl9leHByX2xvYykpOworCWlm IChleHByZXNzaW9uX3JldHVybnNfc2V0KGRlZl9leHByKSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJ CQllcnJjb2RlKEVSUkNPREVfREFUQVRZUEVfTUlTTUFUQ0gpLAorCQkJCWVycm1zZygiREVGQVVM VCBleHByZXNzaW9uIG11c3Qgbm90IHJldHVybiBhIHNldCIpLAorCQkJCXBhcnNlcl9lcnJwb3Np dGlvbihwc3RhdGUsIGRlZl9leHByX2xvYykpOworCisJZGVmX2V4cHIgPSBjb2VyY2VfdG9fdGFy Z2V0X3R5cGUocHN0YXRlLCBkZWZfZXhwciwgZXhwclR5cGUoZGVmX2V4cHIpLAorCQkJCQkJCQkJ IHRhcmdldFR5cGUsIHRhcmdldFR5cG1vZCwKKwkJCQkJCQkJCSBDT0VSQ0lPTl9FWFBMSUNJVCwK KwkJCQkJCQkJCSBDT0VSQ0VfRVhQTElDSVRfQ0FTVCwKKwkJCQkJCQkJCSBleHByTG9jYXRpb24o ZGVmX2V4cHIpKTsKKwlpZiAoZGVmX2V4cHIgPT0gTlVMTCkKKwkJZXJlcG9ydChFUlJPUiwKKwkJ CQllcnJjb2RlKEVSUkNPREVfQ0FOTk9UX0NPRVJDRSksCisJCQkJZXJybXNnKCJjYW5ub3QgY2Fz dCBvbl9lcnJvciBkZWZhdWx0IGV4cHJlc3Npb24gdG8gdHlwZSAlcyIsCisJCQkJCQlmb3JtYXRf dHlwZV9iZSh0YXJnZXRUeXBlKSksCisJCQkJcGFyc2VyX2NvZXJjaW9uX2VycnBvc2l0aW9uKHBz dGF0ZSwgZGVmX2V4cHJfbG9jLCBkZWZfZXhwcikpOworCisJLyoKKwkgKiBJZiB0aGUgc3ViamVj dCBvZiB0aGUgdHlwZWNhc3QgaXMgYW4gQVJSQVlbXSBjb25zdHJ1Y3QgYW5kIHRoZSB0YXJnZXQK KwkgKiB0eXBlIGlzIGFuIGFycmF5IHR5cGUsIHdlIGludm9rZSB0cmFuc2Zvcm1BcnJheUV4cHIo KSBkaXJlY3RseSBzbyB0aGF0CisJICogd2UgY2FuIHBhc3MgZG93biB0aGUgdHlwZSBpbmZvcm1h dGlvbi4gIFRoaXMgYXZvaWRzIHNvbWUgY2FzZXMgd2hlcmUKKwkgKiB0cmFuc2Zvcm1BcnJheUV4 cHIoKSBtaWdodCBub3QgaW5mZXIgdGhlIGNvcnJlY3QgdHlwZS4gIE90aGVyd2lzZSwganVzdAor CSAqIHRyYW5zZm9ybSB0aGUgYXJndW1lbnQgbm9ybWFsbHkuCisJICovCisJaWYgKElzQSh0Y19h cmcsIEFfQXJyYXlFeHByKSkKKwl7CisJCU9pZAkJCXRhcmdldEJhc2VUeXBlOworCQlpbnQzMgkJ dGFyZ2V0QmFzZVR5cG1vZDsKKwkJT2lkCQkJZWxlbWVudFR5cGU7CisKKwkJLyoKKwkJICogSWYg dGFyZ2V0IGlzIGEgZG9tYWluIG92ZXIgYXJyYXksIHdvcmsgd2l0aCB0aGUgYmFzZSBhcnJheSB0 eXBlCisJCSAqIGhlcmUuICBCZWxvdywgd2UnbGwgY2FzdCB0aGUgYXJyYXkgdHlwZSB0byB0aGUg ZG9tYWluLiAgSW4gdGhlCisJCSAqIHVzdWFsIGNhc2UgdGhhdCB0aGUgdGFyZ2V0IGlzIG5vdCBh IGRvbWFpbiwgdGhlIHJlbWFpbmluZyBzdGVwcworCQkgKiB3aWxsIGJlIGEgbm8tb3AuCisJCSAq LworCQl0YXJnZXRCYXNlVHlwbW9kID0gdGFyZ2V0VHlwbW9kOworCQl0YXJnZXRCYXNlVHlwZSA9 IGdldEJhc2VUeXBlQW5kVHlwbW9kKHRhcmdldFR5cGUsICZ0YXJnZXRCYXNlVHlwbW9kKTsKKwkJ ZWxlbWVudFR5cGUgPSBnZXRfZWxlbWVudF90eXBlKHRhcmdldEJhc2VUeXBlKTsKKwkJaWYgKE9p ZElzVmFsaWQoZWxlbWVudFR5cGUpKQorCQl7CisJCQlzb3VyY2VfZXhwciA9IHRyYW5zZm9ybUFy cmF5RXhwcihwc3RhdGUsCisJCQkJCQkJCQkJICAgKEFfQXJyYXlFeHByICopIHRjX2FyZywKKwkJ CQkJCQkJCQkgICB0YXJnZXRCYXNlVHlwZSwKKwkJCQkJCQkJCQkgICBlbGVtZW50VHlwZSwKKwkJ CQkJCQkJCQkgICB0YXJnZXRCYXNlVHlwbW9kKTsKKwkJfQorCQllbHNlCisJCQlzb3VyY2VfZXhw ciA9IHRyYW5zZm9ybUV4cHJSZWN1cnNlKHBzdGF0ZSwgdGNfYXJnKTsKKwl9CisJZWxzZQorCQlz b3VyY2VfZXhwciA9IHRyYW5zZm9ybUV4cHJSZWN1cnNlKHBzdGF0ZSwgdGNfYXJnKTsKKworCWlu cHV0VHlwZSA9IGV4cHJUeXBlKHNvdXJjZV9leHByKTsKKwlpZiAoaW5wdXRUeXBlID09IEludmFs aWRPaWQpCisJCXJldHVybiAoTm9kZSAqKSByZXN1bHQ7CQkJLyogZG8gbm90aGluZyBpZiBOVUxM IGlucHV0ICovCisKKwkvKgorCSAqIExvY2F0aW9uIG9mIHRoZSBjb2VyY2lvbiBpcyBwcmVmZXJl bnRpYWxseSB0aGUgbG9jYXRpb24gb2YgdGhlIDo6IG9yCisJICogQ0FTVCBzeW1ib2wsIGJ1dCBp ZiB0aGVyZSBpcyBub25lIHRoZW4gdXNlIHRoZSBsb2NhdGlvbiBvZiB0aGUgdHlwZQorCSAqIG5h bWUgKHRoaXMgY2FuIGhhcHBlbiBpbiBUeXBlTmFtZSAnc3RyaW5nJyBzeW50YXgsIGZvciBpbnN0 YW5jZSkuCisJICovCisJbG9jYXRpb24gPSB0Y2FzdC0+bG9jYXRpb247CisJaWYgKGxvY2F0aW9u IDwgMCkKKwkJbG9jYXRpb24gPSB0Y2FzdC0+dHlwZU5hbWUtPmxvY2F0aW9uOworCisJaWYgKGV4 cHJUeXBlKHNvdXJjZV9leHByKSA9PSBVTktOT1dOT0lEICYmIElzQShzb3VyY2VfZXhwciwgQ29u c3QpKQorCXsKKwkJQ29uc3QJICAgKmNvbiA9IChDb25zdCAqKSBzb3VyY2VfZXhwcjsKKwkJaW50 MzIJCWlucHV0VHlwZU1vZDsKKwkJYm9vbAkJY29udmVydGVkOworCQlEYXR1bQkJZGF0dW07CisJ CVR5cGUJCWJhc2VUeXBlOworCQliYXNlVHlwZSA9IHR5cGVpZFR5cGUodGFyZ2V0VHlwZSk7CisK KwkJaWYgKHRhcmdldFR5cGUgPT0gSU5URVJWQUxPSUQpCisJCQlpbnB1dFR5cGVNb2QgPSB0YXJn ZXRUeXBtb2Q7CisJCWVsc2UKKwkJCWlucHV0VHlwZU1vZCA9IC0xOworCisJCWlmICghY29uLT5j b25zdGlzbnVsbCkKKwkJCWNvbnZlcnRlZCA9IHN0cmluZ1R5cGVEYXR1bVNhZmUoYmFzZVR5cGUs CisJCQkJCQkJCQkJCURhdHVtR2V0Q1N0cmluZyhjb24tPmNvbnN0dmFsdWUpLAorCQkJCQkJCQkJ CQlpbnB1dFR5cGVNb2QsCisJCQkJCQkJCQkJCSZkYXR1bSk7CisJCWVsc2UKKwkJCWNvbnZlcnRl ZCA9IHN0cmluZ1R5cGVEYXR1bVNhZmUoYmFzZVR5cGUsCisJCQkJCQkJCQkJCU5VTEwsCisJCQkJ CQkJCQkJCWlucHV0VHlwZU1vZCwKKwkJCQkJCQkJCQkJJmRhdHVtKTsKKwkJaWYoIWNvbnZlcnRl ZCkKKwkJCWNhbl9jb2VyY2UgPSBmYWxzZTsKKworCQlSZWxlYXNlU3lzQ2FjaGUoYmFzZVR5cGUp OworCX0KKworCWlmIChjYW5fY29lcmNlKQorCQljYXN0X2V4cHIgPSBjb2VyY2VfdG9fdGFyZ2V0 X3R5cGUocHN0YXRlLCBzb3VyY2VfZXhwciwgaW5wdXRUeXBlLAorCQkJCQkJCQkJCSAgdGFyZ2V0 VHlwZSwgdGFyZ2V0VHlwbW9kLAorCQkJCQkJCQkJCSAgQ09FUkNJT05fRVhQTElDSVQsCisJCQkJ CQkJCQkJICBDT0VSQ0VfRVhQTElDSVRfQ0FTVCwKKwkJCQkJCQkJCQkgIGxvY2F0aW9uKTsKKwor CXJlc3VsdC0+c291cmNlX2V4cHIgPSBzb3VyY2VfZXhwcjsKKwlyZXN1bHQtPmNhc3RfZXhwciA9 IGNhc3RfZXhwcjsKKwlyZXN1bHQtPmRlZmF1bHRfZXhwciA9IGRlZl9leHByOworCXJlc3VsdC0+ YmluYXJ5Y29lcmNpYmxlID0gSXNCaW5hcnlDb2VyY2libGUoaW5wdXRUeXBlLCB0YXJnZXRUeXBl KTsKKworCXJldHVybiAoTm9kZSAqKSByZXN1bHQ7Cit9CisKIC8qCiAgKiBIYW5kbGUgYW4gZXhw bGljaXQgQ09MTEFURSBjbGF1c2UuCiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcGFyc2Vy L3BhcnNlX3RhcmdldC5jIGIvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX3RhcmdldC5jCmluZGV4 IDRhYmEwZDlkNGQ1Li44MTJlZDE4YzE2MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcGFyc2Vy L3BhcnNlX3RhcmdldC5jCisrKyBiL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV90YXJnZXQuYwpA QCAtMTgyMyw2ICsxODIzLDIwIEBAIEZpZ3VyZUNvbG5hbWVJbnRlcm5hbChOb2RlICpub2RlLCBj aGFyICoqbmFtZSkKIAkJCQl9CiAJCQl9CiAJCQlicmVhazsKKwkJY2FzZSBUX1NhZmVUeXBlQ2Fz dDoKKwkJCXN0cmVuZ3RoID0gRmlndXJlQ29sbmFtZUludGVybmFsKCgoU2FmZVR5cGVDYXN0ICop IG5vZGUpLT5jYXN0LAorCQkJCQkJCQkJCQkgbmFtZSk7CisJCQlpZiAoc3RyZW5ndGggPD0gMSkK KwkJCXsKKwkJCQlUeXBlQ2FzdCAqbm9kZV9jYXN0OworCQkJCW5vZGVfY2FzdCA9IChUeXBlQ2Fz dCAqKSgoU2FmZVR5cGVDYXN0ICopIG5vZGUpLT5jYXN0OworCQkJCWlmIChub2RlX2Nhc3QtPnR5 cGVOYW1lICE9IE5VTEwpCisJCQkJeworCQkJCQkqbmFtZSA9IHN0clZhbChsbGFzdChub2RlX2Nh c3QtPnR5cGVOYW1lLT5uYW1lcykpOworCQkJCQlyZXR1cm4gMTsKKwkJCQl9CisJCQl9CisJCQli cmVhazsKIAkJY2FzZSBUX0NvbGxhdGVDbGF1c2U6CiAJCQlyZXR1cm4gRmlndXJlQ29sbmFtZUlu dGVybmFsKCgoQ29sbGF0ZUNsYXVzZSAqKSBub2RlKS0+YXJnLCBuYW1lKTsKIAkJY2FzZSBUX0dy b3VwaW5nRnVuYzoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV90eXBlLmMg Yi9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfdHlwZS5jCmluZGV4IDc3MTNiZGM2YWYwLi4wMmU1 ZjljOTJkNyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX3R5cGUuYworKysg Yi9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfdHlwZS5jCkBAIC0xOSw2ICsxOSw3IEBACiAjaW5j bHVkZSAiY2F0YWxvZy9wZ190eXBlLmgiCiAjaW5jbHVkZSAibGliL3N0cmluZ2luZm8uaCIKICNp bmNsdWRlICJub2Rlcy9tYWtlZnVuY3MuaCIKKyNpbmNsdWRlICJub2Rlcy9taXNjbm9kZXMuaCIK ICNpbmNsdWRlICJwYXJzZXIvcGFyc2VfdHlwZS5oIgogI2luY2x1ZGUgInBhcnNlci9wYXJzZXIu aCIKICNpbmNsdWRlICJ1dGlscy9hcnJheS5oIgpAQCAtNjYwLDYgKzY2MSwxOCBAQCBzdHJpbmdU eXBlRGF0dW0oVHlwZSB0cCwgY2hhciAqc3RyaW5nLCBpbnQzMiBhdHR0eXBtb2QpCiAJcmV0dXJu IE9pZElucHV0RnVuY3Rpb25DYWxsKHR5cGlucHV0LCBzdHJpbmcsIHR5cGlvcGFyYW0sIGF0dHR5 cG1vZCk7CiB9CiAKK2Jvb2wKK3N0cmluZ1R5cGVEYXR1bVNhZmUoVHlwZSB0cCwgY2hhciAqc3Ry aW5nLCBpbnQzMiBhdHR0eXBtb2QsIERhdHVtICpyZXN1bHQpCit7CisJRm9ybV9wZ190eXBlIHR5 cGZvcm0gPSAoRm9ybV9wZ190eXBlKSBHRVRTVFJVQ1QodHApOworCU9pZAkJCXR5cGlucHV0ID0g dHlwZm9ybS0+dHlwaW5wdXQ7CisJT2lkCQkJdHlwaW9wYXJhbSA9IGdldFR5cGVJT1BhcmFtKHRw KTsKKwlFcnJvclNhdmVDb250ZXh0IGVzY29udGV4dCA9IHtUX0Vycm9yU2F2ZUNvbnRleHR9Owor CisJcmV0dXJuIE9pZElucHV0RnVuY3Rpb25DYWxsU2FmZSh0eXBpbnB1dCwgc3RyaW5nLCB0eXBp b3BhcmFtLCBhdHR0eXBtb2QsCisJCQkJCQkJCQkoZm1Ob2RlUHRyKSAmZXNjb250ZXh0LCByZXN1 bHQpOworfQorCiAvKgogICogR2l2ZW4gYSB0eXBlaWQsIHJldHVybiB0aGUgdHlwZSdzIHR5cHJl bGlkIChhc3NvY2lhdGVkIHJlbGF0aW9uKSwgaWYgYW55LgogICogUmV0dXJucyBJbnZhbGlkT2lk IGlmIHR5cGUgaXMgbm90IGEgY29tcG9zaXRlIHR5cGUuCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC91dGlscy9hZHQvYXJyYXlmdW5jcy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2FycmF5ZnVu Y3MuYwppbmRleCBiNWY5OGJmMjJmOS4uNmJkOGE5ODlkYmQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL3V0aWxzL2FkdC9hcnJheWZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2Fy cmF5ZnVuY3MuYwpAQCAtMzI5NSw2ICszMjk1LDEyIEBAIGFycmF5X21hcChEYXR1bSBhcnJheWQs CiAJCQlyZXR1cm4gKERhdHVtKSAwOwogCQl9CiAKKwkJaWYgKFNPRlRfRVJST1JfT0NDVVJSRUQo ZXhwcnN0YXRlLT5lc2NvbnRleHQpKQorCQl7CisJCQlwZnJlZSh2YWx1ZXMpOworCQkJcGZyZWUo bnVsbHMpOworCQkJcmV0dXJuIChEYXR1bSkgMDsKKwkJfQogCQlpZiAobnVsbHNbaV0pCiAJCQlo YXNudWxscyA9IHRydWU7CiAJCWVsc2UKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2Fk dC9ydWxldXRpbHMuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYwppbmRleCAz ZDZlNmJkYmZkMi4uZWI0N2JjMzM2YjIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2Fk dC9ydWxldXRpbHMuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMKQEAg LTEwNTM0LDYgKzEwNTM0LDIxIEBAIGdldF9ydWxlX2V4cHIoTm9kZSAqbm9kZSwgZGVwYXJzZV9j b250ZXh0ICpjb250ZXh0LAogCQkJfQogCQkJYnJlYWs7CiAKKwkJY2FzZSBUX1NhZmVUeXBlQ2Fz dEV4cHI6CisJCQl7CisJCQkJU2FmZVR5cGVDYXN0RXhwciAgICpzdGNleHByID0gY2FzdE5vZGUo U2FmZVR5cGVDYXN0RXhwciwgbm9kZSk7CisKKwkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1 ZiwgIkNBU1QoIik7CisJCQkJZ2V0X3J1bGVfZXhwcihzdGNleHByLT5zb3VyY2VfZXhwciwgY29u dGV4dCwgc2hvd2ltcGxpY2l0KTsKKworCQkJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiIEFTICVz ICIsCisJCQkJCQkJCSBmb3JtYXRfdHlwZV93aXRoX3R5cGVtb2Qoc3RjZXhwci0+cmVzdWx0dHlw ZSwgc3RjZXhwci0+cmVzdWx0dHlwbW9kKSk7CisKKwkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5n KGJ1ZiwgIkRFRkFVTFQgIik7CisJCQkJZ2V0X3J1bGVfZXhwcihzdGNleHByLT5kZWZhdWx0X2V4 cHIsIGNvbnRleHQsIHNob3dpbXBsaWNpdCk7CisJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhi dWYsICIgT04gRVJST1IpIik7CisJCQl9CisJCQlicmVhazsKIAkJY2FzZSBUX0pzb25FeHByOgog CQkJewogCQkJCUpzb25FeHByICAgKmpleHByID0gKEpzb25FeHByICopIG5vZGU7CmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC91dGlscy9mbWdyL2ZtZ3IuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2Zt Z3IvZm1nci5jCmluZGV4IDc4MjI5MWQ5OTk4Li45ZGU4OTVlNjgyZiAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvdXRpbHMvZm1nci9mbWdyLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvZm1nci9m bWdyLmMKQEAgLTE3NTksNiArMTc1OSwxOSBAQCBPaWRJbnB1dEZ1bmN0aW9uQ2FsbChPaWQgZnVu Y3Rpb25JZCwgY2hhciAqc3RyLCBPaWQgdHlwaW9wYXJhbSwgaW50MzIgdHlwbW9kKQogCXJldHVy biBJbnB1dEZ1bmN0aW9uQ2FsbCgmZmxpbmZvLCBzdHIsIHR5cGlvcGFyYW0sIHR5cG1vZCk7CiB9 CiAKK2Jvb2wKK09pZElucHV0RnVuY3Rpb25DYWxsU2FmZShPaWQgZnVuY3Rpb25JZCwgY2hhciAq c3RyLCBPaWQgdHlwaW9wYXJhbSwKKwkJCQkJCSBpbnQzMiB0eXBtb2QsIGZtTm9kZVB0ciBlc2Nv bnRleHQsCisJCQkJCQkgRGF0dW0gKnJlc3VsdCkKK3sKKwlGbWdySW5mbwkJCWZsaW5mbzsKKwor CWZtZ3JfaW5mbyhmdW5jdGlvbklkLCAmZmxpbmZvKTsKKworCXJldHVybiBJbnB1dEZ1bmN0aW9u Q2FsbFNhZmUoJmZsaW5mbywgc3RyLCB0eXBpb3BhcmFtLCB0eXBtb2QsCisJCQkJCQkJCSBlc2Nv bnRleHQsIHJlc3VsdCk7Cit9CisKIGNoYXIgKgogT2lkT3V0cHV0RnVuY3Rpb25DYWxsKE9pZCBm dW5jdGlvbklkLCBEYXR1bSB2YWwpCiB7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9leGVjdXRv ci9leGVjRXhwci5oIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY0V4cHIuaAppbmRleCA3NTM2 NjIwMzcwNi4uMGFmY2YwOWMwODYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4 ZWNFeHByLmgKKysrIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY0V4cHIuaApAQCAtMjY1LDYg KzI2NSw3IEBAIHR5cGVkZWYgZW51bSBFeHByRXZhbE9wCiAJRUVPUF9YTUxFWFBSLAogCUVFT1Bf SlNPTl9DT05TVFJVQ1RPUiwKIAlFRU9QX0lTX0pTT04sCisJRUVPUF9TQUZFVFlQRV9DQVNULAog CUVFT1BfSlNPTkVYUFJfUEFUSCwKIAlFRU9QX0pTT05FWFBSX0NPRVJDSU9OLAogCUVFT1BfSlNP TkVYUFJfQ09FUkNJT05fRklOSVNILApAQCAtNzUwLDYgKzc1MSwxMiBAQCB0eXBlZGVmIHN0cnVj dCBFeHByRXZhbFN0ZXAKIAkJCUpzb25Jc1ByZWRpY2F0ZSAqcHJlZDsJLyogb3JpZ2luYWwgZXhw cmVzc2lvbiBub2RlICovCiAJCX0JCQlpc19qc29uOwogCisJCS8qIGZvciBFRU9QX1NBRkVDQVNU ICovCisJCXN0cnVjdAorCQl7CisJCQlzdHJ1Y3QgU2FmZVR5cGVDYXN0U3RhdGUgKnN0Y3N0YXRl OwkvKiBvcmlnaW5hbCBleHByZXNzaW9uIG5vZGUgKi8KKwkJfQkJCXN0Y2V4cHI7CisKIAkJLyog Zm9yIEVFT1BfSlNPTkVYUFJfUEFUSCAqLwogCQlzdHJ1Y3QKIAkJewpAQCAtODkyLDYgKzg5OSw3 IEBAIGV4dGVybiBpbnQJRXhlY0V2YWxKc29uRXhwclBhdGgoRXhwclN0YXRlICpzdGF0ZSwgRXhw ckV2YWxTdGVwICpvcCwKIAkJCQkJCQkJIEV4cHJDb250ZXh0ICplY29udGV4dCk7CiBleHRlcm4g dm9pZCBFeGVjRXZhbEpzb25Db2VyY2lvbihFeHByU3RhdGUgKnN0YXRlLCBFeHByRXZhbFN0ZXAg Km9wLAogCQkJCQkJCQkgRXhwckNvbnRleHQgKmVjb250ZXh0KTsKK2ludCBFeGVjRXZhbFNhZmVU eXBlQ2FzdChFeHByU3RhdGUgKnN0YXRlLCBFeHByRXZhbFN0ZXAgKm9wKTsKIGV4dGVybiB2b2lk IEV4ZWNFdmFsSnNvbkNvZXJjaW9uRmluaXNoKEV4cHJTdGF0ZSAqc3RhdGUsIEV4cHJFdmFsU3Rl cCAqb3ApOwogZXh0ZXJuIHZvaWQgRXhlY0V2YWxHcm91cGluZ0Z1bmMoRXhwclN0YXRlICpzdGF0 ZSwgRXhwckV2YWxTdGVwICpvcCk7CiBleHRlcm4gdm9pZCBFeGVjRXZhbE1lcmdlU3VwcG9ydEZ1 bmMoRXhwclN0YXRlICpzdGF0ZSwgRXhwckV2YWxTdGVwICpvcCwKZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL2ZtZ3IuaCBiL3NyYy9pbmNsdWRlL2ZtZ3IuaAppbmRleCAwZmU3YjRlYmM3Ny4uMjk5 ZDRlZWY0ZWQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2ZtZ3IuaAorKysgYi9zcmMvaW5jbHVk ZS9mbWdyLmgKQEAgLTc1MCw2ICs3NTAsOSBAQCBleHRlcm4gYm9vbCBEaXJlY3RJbnB1dEZ1bmN0 aW9uQ2FsbFNhZmUoUEdGdW5jdGlvbiBmdW5jLCBjaGFyICpzdHIsCiAJCQkJCQkJCQkJRGF0dW0g KnJlc3VsdCk7CiBleHRlcm4gRGF0dW0gT2lkSW5wdXRGdW5jdGlvbkNhbGwoT2lkIGZ1bmN0aW9u SWQsIGNoYXIgKnN0ciwKIAkJCQkJCQkJICBPaWQgdHlwaW9wYXJhbSwgaW50MzIgdHlwbW9kKTsK K2V4dGVybiBib29sIE9pZElucHV0RnVuY3Rpb25DYWxsU2FmZShPaWQgZnVuY3Rpb25JZCwgY2hh ciAqc3RyLCBPaWQgdHlwaW9wYXJhbSwKKwkJCQkJCQkJCSBpbnQzMiB0eXBtb2QsIGZtTm9kZVB0 ciBlc2NvbnRleHQsCisJCQkJCQkJCQkgRGF0dW0gKnJlc3VsdCk7CiBleHRlcm4gY2hhciAqT3V0 cHV0RnVuY3Rpb25DYWxsKEZtZ3JJbmZvICpmbGluZm8sIERhdHVtIHZhbCk7CiBleHRlcm4gY2hh ciAqT2lkT3V0cHV0RnVuY3Rpb25DYWxsKE9pZCBmdW5jdGlvbklkLCBEYXR1bSB2YWwpOwogZXh0 ZXJuIERhdHVtIFJlY2VpdmVGdW5jdGlvbkNhbGwoRm1nckluZm8gKmZsaW5mbywgZm1TdHJpbmdJ bmZvIGJ1ZiwKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oIGIvc3Jj L2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKaW5kZXggZTEwN2Q2ZTVmODEuLmZkMjZlMWM5OGI2 IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaAorKysgYi9zcmMvaW5j bHVkZS9ub2Rlcy9leGVjbm9kZXMuaApAQCAtMTA1OCw2ICsxMDU4LDIzIEBAIHR5cGVkZWYgc3Ry dWN0IERvbWFpbkNvbnN0cmFpbnRTdGF0ZQogCUV4cHJTdGF0ZSAgKmNoZWNrX2V4cHJzdGF0ZTsJ LyogY2hlY2tfZXhwcidzIGV2YWwgc3RhdGUsIG9yIE5VTEwgKi8KIH0gRG9tYWluQ29uc3RyYWlu dFN0YXRlOwogCit0eXBlZGVmIHN0cnVjdCBTYWZlVHlwZUNhc3RTdGF0ZQoreworCU5vZGVUYWcJ CXR5cGU7CisKKwlTYWZlVHlwZUNhc3RFeHByICpzdGNleHByOworCisJLyogU2V0IHRvIHRydWUg aWYgc291cmNlX2V4cHIgZXZhbHVhdGlvbiBjYXVzZSBhbiBlcnJvci4gICovCisJTnVsbGFibGVE YXR1bSBlcnJvcjsKKworCWludCAJCWp1bXBfZXJyb3I7CisKKwlpbnQgCQlqdW1wX2VuZDsKKwor CUVycm9yU2F2ZUNvbnRleHQgZXNjb250ZXh0OworCit9IFNhZmVUeXBlQ2FzdFN0YXRlOworCiAv KgogICogU3RhdGUgZm9yIEpzb25FeHByIGV2YWx1YXRpb24sIHRvbyBiaWcgdG8gaW5saW5lLgog ICoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaCBiL3NyYy9pbmNs dWRlL25vZGVzL3BhcnNlbm9kZXMuaAppbmRleCA4NmEyMzZiZDU4Yi4uOTUxNzRlMGZlZWYgMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaAorKysgYi9zcmMvaW5jbHVk ZS9ub2Rlcy9wYXJzZW5vZGVzLmgKQEAgLTM5OSw2ICszOTksMTIgQEAgdHlwZWRlZiBzdHJ1Y3Qg VHlwZUNhc3QKIAlQYXJzZUxvYwlsb2NhdGlvbjsJCS8qIHRva2VuIGxvY2F0aW9uLCBvciAtMSBp ZiB1bmtub3duICovCiB9IFR5cGVDYXN0OwogCit0eXBlZGVmIHN0cnVjdCBTYWZlVHlwZUNhc3QK K3sKKwlOb2RlVGFnCQl0eXBlOworCU5vZGUJCSpjYXN0OworCU5vZGUJICAgCSpleHByOwkJLyog ZGVmYXVsdCBleHByICovCit9IFNhZmVUeXBlQ2FzdDsKIC8qCiAgKiBDb2xsYXRlQ2xhdXNlIC0g YSBDT0xMQVRFIGV4cHJlc3Npb24KICAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMv cHJpbW5vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9wcmltbm9kZXMuaAppbmRleCA2ZGZjYTNj YjM1Yi4uYTAyZWVmMjc4MDAgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3ByaW1ub2Rl cy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL3ByaW1ub2Rlcy5oCkBAIC03NTYsNiArNzU2LDM5 IEBAIHR5cGVkZWYgZW51bSBDb2VyY2lvbkZvcm0KIAlDT0VSQ0VfU1FMX1NZTlRBWCwJCQkvKiBk aXNwbGF5IHdpdGggU1FMLW1hbmRhdGVkIHNwZWNpYWwgc3ludGF4ICovCiB9IENvZXJjaW9uRm9y bTsKIAorLyoKKyAqIFNhZmVUeXBlQ2FzdEV4cHIgLQorICoJCVRyYW5zZm9ybWVkIHJlcHJlc2Vu dGF0aW9uIG9mCisgKiBDQVNUKGV4cHIgQVMgdHlwZW5hbWUgREVGQVVMVCBleHByMiBPTiBFUlJP UikKKyAqIENBU1QoZXhwciBBUyB0eXBlbmFtZSBOVUxMIE9OIEVSUk9SKQorICovCit0eXBlZGVm IHN0cnVjdCBTYWZlVHlwZUNhc3RFeHByCit7CisJRXhwcgkJeHByOworCisJLyogdHJhbnNmb3Jt ZWQgZXhwcmVzc2lvbiBiZWluZyBjYXN0ZWQgKi8KKwlOb2RlCSAgICpzb3VyY2VfZXhwcjsKKwor CS8qIHRyYW5zZm9ybWVkIGNhc3QgZXhwcmVzc2lvbiwgaXQgbWF5YmUgTlVMTCEgKi8KKwlOb2Rl CSAgICpjYXN0X2V4cHI7CisKKwkvKiBpbiBjYXNlIGNhc3QgZXhwcmVzc2lvbiBldmF1bGF0aW9u IGZhaWxlZCwgZmFsbGJhY2sgZGVmYXVsdCBleHByZXNzaW9uICovCisJTm9kZQkgICAqZGVmYXVs dF9leHByOworCisJLyogZG9lcyBzb3VyY2UgdHlwZSBiaW5hcnkgY29lcmNlYWJsZSB3aXRoIHRh cmdldCB0eXBlICovCisJYm9vbAkgICAJYmluYXJ5Y29lcmNpYmxlOworCisJLyogY2FzdCByZXN1 bHQgZGF0YSB0eXBlICovCisJT2lkCQkJcmVzdWx0dHlwZSBwZ19ub2RlX2F0dHIocXVlcnlfanVt YmxlX2lnbm9yZSk7CisKKwkvKiBjYXN0IHJlc3VsdCBkYXRhIHR5cGUgdHlwbW9kICh1c3VhbGx5 IC0xKSAqLworCWludDMyCQlyZXN1bHR0eXBtb2QgcGdfbm9kZV9hdHRyKHF1ZXJ5X2p1bWJsZV9p Z25vcmUpOworCisJLyogY2FzdCByZXN1bHQgZGF0YSB0eXBlIGNvbGxhdGlvbiAodXN1YWxseSAt MSkgKi8KKwlPaWQJCQlyZXN1bHRjb2xsaWQgcGdfbm9kZV9hdHRyKHF1ZXJ5X2p1bWJsZV9pZ25v cmUpOworCit9IFNhZmVUeXBlQ2FzdEV4cHI7CisKIC8qCiAgKiBGdW5jRXhwciAtIGV4cHJlc3Np b24gbm9kZSBmb3IgYSBmdW5jdGlvbiBjYWxsCiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv cGFyc2VyL3BhcnNlX3R5cGUuaCBiL3NyYy9pbmNsdWRlL3BhcnNlci9wYXJzZV90eXBlLmgKaW5k ZXggMGQ5MTlkOGJmYTIuLjEyMzgxYWVkNjRjIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9wYXJz ZXIvcGFyc2VfdHlwZS5oCisrKyBiL3NyYy9pbmNsdWRlL3BhcnNlci9wYXJzZV90eXBlLmgKQEAg LTQ3LDYgKzQ3LDggQEAgZXh0ZXJuIGNoYXIgKnR5cGVUeXBlTmFtZShUeXBlIHQpOwogZXh0ZXJu IE9pZAl0eXBlVHlwZVJlbGlkKFR5cGUgdHlwKTsKIGV4dGVybiBPaWQJdHlwZVR5cGVDb2xsYXRp b24oVHlwZSB0eXApOwogZXh0ZXJuIERhdHVtIHN0cmluZ1R5cGVEYXR1bShUeXBlIHRwLCBjaGFy ICpzdHJpbmcsIGludDMyIGF0dHR5cG1vZCk7CitleHRlcm4gYm9vbCBzdHJpbmdUeXBlRGF0dW1T YWZlKFR5cGUgdHAsIGNoYXIgKnN0cmluZywgaW50MzIgYXR0dHlwbW9kLAorCQkJCQkJCQlEYXR1 bSAqcmVzdWx0KTsKIAogZXh0ZXJuIE9pZAl0eXBlaWRUeXBlUmVsaWQoT2lkIHR5cGVfaWQpOwog ZXh0ZXJuIE9pZAl0eXBlT3JEb21haW5UeXBlUmVsaWQoT2lkIHR5cGVfaWQpOwpkaWZmIC0tZ2l0 IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9taXNjLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvbWlzYy5vdXQKaW5kZXggNmU4MTZjNTdmMWYuLmEyM2U4NDdmMjY4IDEwMDY0NAot LS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL21pc2Mub3V0CisrKyBiL3NyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvbWlzYy5vdXQKQEAgLTM5NiwzICszOTYsMTMwIEBAIFNFTEVDVCAqLCAo ZXF1aXBtZW50KENBU1QoKGguKikgQVMgaG9iYmllc19yKSkpLm5hbWUgRlJPTSBob2JiaWVzX3Ig aDsKIC0tCiAtLSByZXdyaXRlIHJ1bGVzCiAtLQorLS0gQ0FTVCBERUZBVUxUIE9OIEVSUk9SCitW QUxVRVMgKENBU1QoJ2Vycm9yJyBBUyBpbnRlZ2VyIEVSUk9SIE9OIEVSUk9SKSk7CitFUlJPUjog IGludmFsaWQgaW5wdXQgc3ludGF4IGZvciB0eXBlIGludGVnZXI6ICJlcnJvciIKK0xJTkUgMTog VkFMVUVTIChDQVNUKCdlcnJvcicgQVMgaW50ZWdlciBFUlJPUiBPTiBFUlJPUikpOworICAgICAg ICAgICAgICAgICAgICAgXgorVkFMVUVTIChDQVNUKCdlcnJvcicgQVMgaW50ZWdlciBOVUxMIE9O IEVSUk9SKSk7CisgY29sdW1uMSAKKy0tLS0tLS0tLQorICAgICAgICAKKygxIHJvdykKKworVkFM VUVTIChDQVNUKCdlcnJvcicgQVMgaW50ZWdlciBERUZBVUxUIDQyIE9OIEVSUk9SKSk7CisgY29s dW1uMSAKKy0tLS0tLS0tLQorICAgICAgNDIKKygxIHJvdykKKworU0VMRUNUIENBU1QoMSBBUyBp bnQ4IERFRkFVTFQgTlVMTCBPTiBFUlJPUik7CisgaW50OCAKKy0tLS0tLQorICAgIDEKKygxIHJv dykKKworQ1JFQVRFIE9SIFJFUExBQ0UgRlVOQ1RJT04gcmV0X2ludDgoKSBSRVRVUk5TIGJpZ2lu dCBBUworJCQKK0JFR0lOIFJFVFVSTiAyMTQ3NDgzNjQ4OyBFTkQ7CiskJAorTEFOR1VBR0UgcGxw Z3NxbCBJTU1VVEFCTEU7CitTRUxFQ1QgQ0FTVCgnYScgYXMgaW50IERFRkFVTFQgcmV0X2ludDgo KSBPTiBFUlJPUik7IC0tZXJyb3IKK0VSUk9SOiAgaW50ZWdlciBvdXQgb2YgcmFuZ2UKK1NFTEVD VCBDQVNUKCdhJyBhcyBkYXRlIERFRkFVTFQgcmV0X2ludDgoKSBPTiBFUlJPUik7IC0tZXJyb3IK K0VSUk9SOiAgY2Fubm90IGNhc3Qgb25fZXJyb3IgZGVmYXVsdCBleHByZXNzaW9uIHRvIHR5cGUg ZGF0ZQorTElORSAxOiBTRUxFQ1QgQ0FTVCgnYScgYXMgZGF0ZSBERUZBVUxUIHJldF9pbnQ4KCkg T04gRVJST1IpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KKy0t IHRlc3QgdmFsaWQgREVGQVVMVCBleHByZXNzaW9uIGZvciBDQVNUID0gT04gRVJST1IKK0NSRUFU RSBPUiBSRVBMQUNFIEZVTkNUSU9OIHJldF9zZXRpbnQoKSBSRVRVUk5TIFNFVE9GIGludGVnZXIg QVMKKyQkCitCRUdJTiBSRVRVUk4gUVVFUlkgRVhFQ1VURSAnc2VsZWN0IDEgdW5pb24gYWxsIHNl bGVjdCAxJzsgRU5EOworJCQKK0xBTkdVQUdFIHBscGdzcWwgSU1NVVRBQkxFOworU0VMRUNUIENB U1QoJ2EnIGFzIGludCBERUZBVUxUIHJldF9zZXRpbnQoKSBPTiBFUlJPUikgRlJPTSBob2JiaWVz X3I7IC0tZXJyb3IKK0VSUk9SOiAgREVGQVVMVCBleHByZXNzaW9uIG11c3Qgbm90IHJldHVybiBh IHNldAorTElORSAxOiBTRUxFQ1QgQ0FTVCgnYScgYXMgaW50IERFRkFVTFQgcmV0X3NldGludCgp IE9OIEVSUk9SKSBGUk9NIGguLi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF4KK1NFTEVDVCBDQVNUKCcxJyBhcyB0ZXh0IERFRkFVTFQgJzInIGNvbGxhdGUgIkMiIE9O IEVSUk9SKTsgLS1lcnJvcgorRVJST1I6ICBERUZBVUxUIGV4cHJlc3Npb24gY2FuIG5vdCBhcyBD T0xMQVRFIGNsYXVzZQorTElORSAxOiBTRUxFQ1QgQ0FTVCgnMScgYXMgdGV4dCBERUZBVUxUICcy JyBjb2xsYXRlICJDIiBPTiBFUlJPUik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXgorU0VMRUNUIENBU1QoJ2EnIGFzIGludCBERUZBVUxUIHN1bSgxKSBPTiBFUlJP Uik7IC0tZXJyb3IKK0VSUk9SOiAgY2FuIG9ubHkgc3BlY2lmeSBhIGNvbnN0YW50LCBub24tYWdn cmVnYXRlIGZ1bmN0aW9uLCBvciBvcGVyYXRvciBleHByZXNzaW9uIGZvciBERUZBVUxUCitMSU5F IDE6IFNFTEVDVCBDQVNUKCdhJyBhcyBpbnQgREVGQVVMVCBzdW0oMSkgT04gRVJST1IpOworICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgorU0VMRUNUIENBU1QoJ2EnIGFz IGludCBERUZBVUxUICdiJyBPTiBFUlJPUik7IC0tZXJyb3IKK0VSUk9SOiAgaW52YWxpZCBpbnB1 dCBzeW50YXggZm9yIHR5cGUgaW50ZWdlcjogImIiCitMSU5FIDE6IFNFTEVDVCBDQVNUKCdhJyBh cyBpbnQgREVGQVVMVCAnYicgT04gRVJST1IpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXgorU0VMRUNUIENBU1QoJ2EnIGFzIHRleHQgREVGQVVMVCBuYW1lIHx8ICdq JyBPTiBFUlJPUikgRlJPTSBob2JiaWVzX3I7IC0tZXJyb3IKK0VSUk9SOiAgREVGQVVMVCBleHBy ZXNzaW9uIG11c3Qgbm90IGNvbnRhaW4gY29sdW1uIHJlZmVyZW5jZXMKK0xJTkUgMTogU0VMRUNU IENBU1QoJ2EnIGFzIHRleHQgREVGQVVMVCBuYW1lIHx8ICdqJyBPTiBFUlJPUikgRlJPTSBoLi4u CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgorLS0gdGVzdCBhcnJh eSBjb2VyY2UKK1NFTEVDVCBDQVNUKCd7MTIzLGFiYyw0NTZ9JyBBUyBpbnRlZ2VyW10gREVGQVVM VCAney03ODl9JyBPTiBFUlJPUikgYXMgYXJyYXlfdGVzdDE7CisgYXJyYXlfdGVzdDEgCistLS0t LS0tLS0tLS0tCisgey03ODl9CisoMSByb3cpCisKK1NFTEVDVCBDQVNUKCd7MjM0LGRlZiw1Njd9 Jzo6dGV4dFtdIEFTIGludGVnZXJbXSBERUZBVUxUICd7LTEwMTF9JyBPTiBFUlJPUikgYXMgYXJy YXlfdGVzdDI7CisgYXJyYXlfdGVzdDIgCistLS0tLS0tLS0tLS0tCisgey0xMDExfQorKDEgcm93 KQorCitTRUxFQ1QgQ0FTVCh1LmFyZyBBUyBpbnRlZ2VyIERFRkFVTFQgLTEgT04gRVJST1IpIEFT IHVubmVzdF90ZXN0MSBGUk9NIHVubmVzdCgnezM0NSxnaGksNjc4fSc6OnRleHRbXSkgQVMgdShh cmcpOworIHVubmVzdF90ZXN0MSAKKy0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgMzQ1CisgICAg ICAgICAgIC0xCisgICAgICAgICAgNjc4CisoMyByb3dzKQorCistLSB0ZXN0IHdpdGggZG9tYWlu CitDUkVBVEUgRE9NQUlOIGRfaW50NDIgYXMgaW50IGNoZWNrICh2YWx1ZSA9IDQyKSBOT1QgTlVM TDsKK0NSRUFURSBET01BSU4gZF9jaGFyM19ub3RfbnVsbCBhcyBjaGFyKDMpIE5PVCBOVUxMOwor Q1JFQVRFIFRZUEUgY29tcF9kb21haW5fd2l0aF90eXBtb2QgQVMgKGEgZF9jaGFyM19ub3RfbnVs bCwgYiBpbnQpOworU0VMRUNUIENBU1QoMTEgQVMgZF9pbnQ0MiBERUZBVUxUIDQxIE9OIEVSUk9S KTsgLS1lcnJvcgorRVJST1I6ICB2YWx1ZSBmb3IgZG9tYWluIGRfaW50NDIgdmlvbGF0ZXMgY2hl Y2sgY29uc3RyYWludCAiZF9pbnQ0Ml9jaGVjayIKK1NFTEVDVCBDQVNUKDExIEFTIGRfaW50NDIg REVGQVVMVCA0MiBPTiBFUlJPUik7IC0tb2sKKyBkX2ludDQyIAorLS0tLS0tLS0tCisgICAgICA0 MgorKDEgcm93KQorCitTRUxFQ1QgQ0FTVChOVUxMIEFTIGRfaW50NDIgREVGQVVMVCBOVUxMIE9O IEVSUk9SKTsgLS1lcnJvcgorRVJST1I6ICBkb21haW4gZF9pbnQ0MiBkb2VzIG5vdCBhbGxvdyBu dWxsIHZhbHVlcworU0VMRUNUIENBU1QoTlVMTCBBUyBkX2ludDQyIERFRkFVTFQgNDIgT04gRVJS T1IpOyAtLW9rCisgZF9pbnQ0MiAKKy0tLS0tLS0tLQorICAgICAgNDIKKygxIHJvdykKKworU0VM RUNUIENBU1QoJygsNDIpJyBBUyBjb21wX2RvbWFpbl93aXRoX3R5cG1vZCBERUZBVUxUIE5VTEwg T04gRVJST1IpOworIGNvbXBfZG9tYWluX3dpdGhfdHlwbW9kIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIAorKDEgcm93KQorCitTRUxFQ1QgQ0FTVCgnKE5VTEwsNDIpJyBBUyBjb21wX2Rv bWFpbl93aXRoX3R5cG1vZCBERUZBVUxUICcoMSwyKScgT04gRVJST1IpOworIGNvbXBfZG9tYWlu X3dpdGhfdHlwbW9kIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICgiMSAgIiwyKQorKDEg cm93KQorCitTRUxFQ1QgQ0FTVCgnKE5VTEwsNDIpJyBBUyBjb21wX2RvbWFpbl93aXRoX3R5cG1v ZCBERUZBVUxUICcoMTIzNCwyKScgT04gRVJST1IpOyAtLWVycm9yCitFUlJPUjogIHZhbHVlIHRv byBsb25nIGZvciB0eXBlIGNoYXJhY3RlcigzKQorTElORSAxOiAuLi5TVCgnKE5VTEwsNDIpJyBB UyBjb21wX2RvbWFpbl93aXRoX3R5cG1vZCBERUZBVUxUICcoMTIzNCwyKScuLi4KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCist LSB0ZXN0IGRlcGFyc2UKK0NSRUFURSBWSUVXIHNhZmVjYXN0dmlldyBBUworU0VMRUNUIENBU1Qo JzEyMzQnIGFzIGNoYXIoMykgREVGQVVMVCAtMTExMSBPTiBFUlJPUiksCisgICAgICAgQ0FTVCgn YScgYXMgaW50IERFRkFVTFQgcmFuZG9tKG1pbj0+MSwgbWF4PT4xOjppbnQpIE9OIEVSUk9SKSBh cyBzYWZlY2FzdDsKK1xzdiBzYWZlY2FzdHZpZXcKK0NSRUFURSBPUiBSRVBMQUNFIFZJRVcgcHVi bGljLnNhZmVjYXN0dmlldyBBUworIFNFTEVDVCBDQVNUKCcxMjM0JyBBUyBjaGFyYWN0ZXIoMykg REVGQVVMVCAnLTExMTEnOjppbnRlZ2VyOjpjaGFyYWN0ZXIoMykgT04gRVJST1IpIEFTIGJwY2hh ciwKKyAgICBDQVNUKCdhJyBBUyBpbnRlZ2VyIERFRkFVTFQgcmFuZG9tKG1pbiA9PiAxLCBtYXgg PT4gMSkgT04gRVJST1IpIEFTIHNhZmVjYXN0CitDUkVBVEUgSU5kRVggY2FzdF9lcnJvcl9pZHgg IE9OIGhvYmJpZXNfcigoY2FzdChuYW1lIGFzIGludCBERUZBVUxUIHJhbmRvbShtaW49PjEsIG1h eD0+MSkgT04gRVJST1IpKSk7IC0tZXJyb3IKK0VSUk9SOiAgZnVuY3Rpb25zIGluIGluZGV4IGV4 cHJlc3Npb24gbXVzdCBiZSBtYXJrZWQgSU1NVVRBQkxFCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9y ZWdyZXNzL3NxbC9taXNjLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL21pc2Muc3FsCmluZGV4 IDE2NWEyZTE3NWZiLi5kOWIzMzY4YjA5OSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9z cWwvbWlzYy5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvbWlzYy5zcWwKQEAgLTI3Mywz ICsyNzMsNTcgQEAgU0VMRUNUICosIChlcXVpcG1lbnQoQ0FTVCgoaC4qKSBBUyBob2JiaWVzX3Ip KSkubmFtZSBGUk9NIGhvYmJpZXNfciBoOwogLS0KIC0tIHJld3JpdGUgcnVsZXMKIC0tCisKKy0t IENBU1QgREVGQVVMVCBPTiBFUlJPUgorVkFMVUVTIChDQVNUKCdlcnJvcicgQVMgaW50ZWdlciBF UlJPUiBPTiBFUlJPUikpOworVkFMVUVTIChDQVNUKCdlcnJvcicgQVMgaW50ZWdlciBOVUxMIE9O IEVSUk9SKSk7CitWQUxVRVMgKENBU1QoJ2Vycm9yJyBBUyBpbnRlZ2VyIERFRkFVTFQgNDIgT04g RVJST1IpKTsKK1NFTEVDVCBDQVNUKDEgQVMgaW50OCBERUZBVUxUIE5VTEwgT04gRVJST1IpOwor CitDUkVBVEUgT1IgUkVQTEFDRSBGVU5DVElPTiByZXRfaW50OCgpIFJFVFVSTlMgYmlnaW50IEFT CiskJAorQkVHSU4gUkVUVVJOIDIxNDc0ODM2NDg7IEVORDsKKyQkCitMQU5HVUFHRSBwbHBnc3Fs IElNTVVUQUJMRTsKKworU0VMRUNUIENBU1QoJ2EnIGFzIGludCBERUZBVUxUIHJldF9pbnQ4KCkg T04gRVJST1IpOyAtLWVycm9yCitTRUxFQ1QgQ0FTVCgnYScgYXMgZGF0ZSBERUZBVUxUIHJldF9p bnQ4KCkgT04gRVJST1IpOyAtLWVycm9yCisKKy0tIHRlc3QgdmFsaWQgREVGQVVMVCBleHByZXNz aW9uIGZvciBDQVNUID0gT04gRVJST1IKK0NSRUFURSBPUiBSRVBMQUNFIEZVTkNUSU9OIHJldF9z ZXRpbnQoKSBSRVRVUk5TIFNFVE9GIGludGVnZXIgQVMKKyQkCitCRUdJTiBSRVRVUk4gUVVFUlkg RVhFQ1VURSAnc2VsZWN0IDEgdW5pb24gYWxsIHNlbGVjdCAxJzsgRU5EOworJCQKK0xBTkdVQUdF IHBscGdzcWwgSU1NVVRBQkxFOworCitTRUxFQ1QgQ0FTVCgnYScgYXMgaW50IERFRkFVTFQgcmV0 X3NldGludCgpIE9OIEVSUk9SKSBGUk9NIGhvYmJpZXNfcjsgLS1lcnJvcgorCitTRUxFQ1QgQ0FT VCgnMScgYXMgdGV4dCBERUZBVUxUICcyJyBjb2xsYXRlICJDIiBPTiBFUlJPUik7IC0tZXJyb3IK K1NFTEVDVCBDQVNUKCdhJyBhcyBpbnQgREVGQVVMVCBzdW0oMSkgT04gRVJST1IpOyAtLWVycm9y CitTRUxFQ1QgQ0FTVCgnYScgYXMgaW50IERFRkFVTFQgJ2InIE9OIEVSUk9SKTsgLS1lcnJvcgor U0VMRUNUIENBU1QoJ2EnIGFzIHRleHQgREVGQVVMVCBuYW1lIHx8ICdqJyBPTiBFUlJPUikgRlJP TSBob2JiaWVzX3I7IC0tZXJyb3IKKworLS0gdGVzdCBhcnJheSBjb2VyY2UKK1NFTEVDVCBDQVNU KCd7MTIzLGFiYyw0NTZ9JyBBUyBpbnRlZ2VyW10gREVGQVVMVCAney03ODl9JyBPTiBFUlJPUikg YXMgYXJyYXlfdGVzdDE7CitTRUxFQ1QgQ0FTVCgnezIzNCxkZWYsNTY3fSc6OnRleHRbXSBBUyBp bnRlZ2VyW10gREVGQVVMVCAney0xMDExfScgT04gRVJST1IpIGFzIGFycmF5X3Rlc3QyOworU0VM RUNUIENBU1QodS5hcmcgQVMgaW50ZWdlciBERUZBVUxUIC0xIE9OIEVSUk9SKSBBUyB1bm5lc3Rf dGVzdDEgRlJPTSB1bm5lc3QoJ3szNDUsZ2hpLDY3OH0nOjp0ZXh0W10pIEFTIHUoYXJnKTsKKwor LS0gdGVzdCB3aXRoIGRvbWFpbgorQ1JFQVRFIERPTUFJTiBkX2ludDQyIGFzIGludCBjaGVjayAo dmFsdWUgPSA0MikgTk9UIE5VTEw7CitDUkVBVEUgRE9NQUlOIGRfY2hhcjNfbm90X251bGwgYXMg Y2hhcigzKSBOT1QgTlVMTDsKK0NSRUFURSBUWVBFIGNvbXBfZG9tYWluX3dpdGhfdHlwbW9kIEFT IChhIGRfY2hhcjNfbm90X251bGwsIGIgaW50KTsKK1NFTEVDVCBDQVNUKDExIEFTIGRfaW50NDIg REVGQVVMVCA0MSBPTiBFUlJPUik7IC0tZXJyb3IKK1NFTEVDVCBDQVNUKDExIEFTIGRfaW50NDIg REVGQVVMVCA0MiBPTiBFUlJPUik7IC0tb2sKK1NFTEVDVCBDQVNUKE5VTEwgQVMgZF9pbnQ0MiBE RUZBVUxUIE5VTEwgT04gRVJST1IpOyAtLWVycm9yCitTRUxFQ1QgQ0FTVChOVUxMIEFTIGRfaW50 NDIgREVGQVVMVCA0MiBPTiBFUlJPUik7IC0tb2sKK1NFTEVDVCBDQVNUKCcoLDQyKScgQVMgY29t cF9kb21haW5fd2l0aF90eXBtb2QgREVGQVVMVCBOVUxMIE9OIEVSUk9SKTsKK1NFTEVDVCBDQVNU KCcoTlVMTCw0MiknIEFTIGNvbXBfZG9tYWluX3dpdGhfdHlwbW9kIERFRkFVTFQgJygxLDIpJyBP TiBFUlJPUik7CitTRUxFQ1QgQ0FTVCgnKE5VTEwsNDIpJyBBUyBjb21wX2RvbWFpbl93aXRoX3R5 cG1vZCBERUZBVUxUICcoMTIzNCwyKScgT04gRVJST1IpOyAtLWVycm9yCisKKy0tIHRlc3QgZGVw YXJzZQorQ1JFQVRFIFZJRVcgc2FmZWNhc3R2aWV3IEFTCitTRUxFQ1QgQ0FTVCgnMTIzNCcgYXMg Y2hhcigzKSBERUZBVUxUIC0xMTExIE9OIEVSUk9SKSwKKyAgICAgICBDQVNUKCdhJyBhcyBpbnQg REVGQVVMVCByYW5kb20obWluPT4xLCBtYXg9PjE6OmludCkgT04gRVJST1IpIGFzIHNhZmVjYXN0 OworXHN2IHNhZmVjYXN0dmlldworCitDUkVBVEUgSU5kRVggY2FzdF9lcnJvcl9pZHggIE9OIGhv YmJpZXNfcigoY2FzdChuYW1lIGFzIGludCBERUZBVUxUIHJhbmRvbShtaW49PjEsIG1heD0+MSkg T04gRVJST1IpKSk7IC0tZXJyb3IKZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBl ZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggZmYwNTBl OTNhNTAuLjJlNzkwNDZkODNiIDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRl ZnMubGlzdAorKysgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApAQCAtMjY0OCw2 ICsyNjQ4LDkgQEAgU1RSTEVOCiBTVgogU1lOQ0hST05JWkFUSU9OX0JBUlJJRVIKIFNZU1RFTV9J TkZPCitTYWZlVHlwZUNhc3QKK1NhZmVUeXBlQ2FzdEV4cHIKK1NhZmVUeXBlQ2FzdFN0YXRlCiBT YW1wbGVTY2FuCiBTYW1wbGVTY2FuR2V0U2FtcGxlU2l6ZV9mdW5jdGlvbgogU2FtcGxlU2NhblN0 YXRlCi0tIAoyLjM0LjEKCg== --000000000000e48f29063a7af2eb--