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 1uekfm-00DvtV-Rp for pgsql-hackers@arkaria.postgresql.org; Thu, 24 Jul 2025 01:23:03 +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 1uekfl-005NO9-8E for pgsql-hackers@arkaria.postgresql.org; Thu, 24 Jul 2025 01:23:01 +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 1uekfk-005NO0-EJ for pgsql-hackers@lists.postgresql.org; Thu, 24 Jul 2025 01:23:01 +0000 Received: from mail-ua1-x936.google.com ([2607:f8b0:4864:20::936]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1uekfi-000TNL-1U for pgsql-hackers@lists.postgresql.org; Thu, 24 Jul 2025 01:22:59 +0000 Received: by mail-ua1-x936.google.com with SMTP id a1e0cc1a2514c-881114808e4so141642241.3 for ; Wed, 23 Jul 2025 18:22:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1753320176; x=1753924976; 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=3gu/qTrInjW7sA5QRd2Gnk7n3tAmDTU4gFgcSFaHyko=; b=hL/OvZuheWYpedoyP/Du3OMbPZ2W5ZLqmxtp7PfO4wlK8BbeQRYHvak47FnctJ8E7U Hl9xtr0rc5VRySnkVTdMA+hS/Xy8xgQT8CMX1NgyJvWhDphXKcEe/YB1NYZoIdeVrzyv 2JiXB/V61Ce4HwNLSE9HpNqPPtkPHmYNg385NrIsvQYTJNkoOdid5eWKhHVMkBcsTcmY JEgnOFY4o3I0FE1FPFwSAML3FitrUadtscMhXKE7X/+S89KaydHBf8gGoD11JKKw2G6Y T6dGkCsEOHTdlotqFL6UswgvjXqWM+BPxGr+S6k8JBIJT8OjWytV43y+tV0LqVkcG9tX RJRA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1753320176; x=1753924976; 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=3gu/qTrInjW7sA5QRd2Gnk7n3tAmDTU4gFgcSFaHyko=; b=gWq3X2csEejPGHrL4qUOdPRPt7CXnrnmVPTGNS3mu6gzjK5DQ884uU/vY1f9X7x4n2 RTSYmrjsg63TSXcljmBj1x9LMSk1O3KmkN94hobHWOdbQE12NBBGnGSunYoTLB+N48te BCVY7v0HtVuibpTQifgJSh0nZuY1rw0N3HjqyrB/Ry3E+9oPgRn1RrCuqLjjO3qt0zEQ cL0zS3gtYZH/IBQuWt+zUIedQ2w6pKTOfXtQO6V94iUujJ00978uuh3pRIwQq+hzdguW N5FHlL2bGEuM4bE6tE00BznlV1G7LhhdRDZ03+DfKDs7YuF9fQq96EK2o1gcfOITq5h/ IBpg== X-Forwarded-Encrypted: i=1; AJvYcCUDXMwE/dfDwD5iZGNmZBxa48vAIKIjdpBFgQUY56+bmlXXMCEBWgScrRnO0Rg1ItoEwHYtAKVMIHyCpxsK@lists.postgresql.org X-Gm-Message-State: AOJu0YxZzVx+8KbFbUAAGoC7GQF8IUsFoFf/hNiHAS7vuv7G4L2eirIJ HtxWIH3QAcfLt4EAPPxKWLOmaSmFOsIer6FlO0mOhVf5rxVQig+jVFY0jVD3UHzy91Y3VJ3Dnh2 IeKWeNLQhy9Rvy9Alrcd55Wf5//FoA8c= X-Gm-Gg: ASbGncsaPF2I0l5+IbOhSiIzu/HYBULAt3pAkglFtQncTxAzK7odIG3Yly1g2J5rjan 7zK1i0JKAcXLqU+iPafM7OAC25VhfQMnV4DUqRpJWHuPP9BUanbHcxlft+K1FYItABUjQ4KvdzP SFRRO7jI0AUE5o4FVs/q4ppy8ydI0ygi6SmMXWsB35G0/Dxx13uO52h+FSgQ4bt0o7re1nn+34a 64c+pZrHY7jX56+sevIo2pLKUD+Kx3yRrHkbRbYn7beWNyPrw== X-Google-Smtp-Source: AGHT+IE3XdKxNfw9jPK/IvDOrVrQ9+lbj28sUjiF/tHal5uKkg6xaL8PeBS4P9GAeDkBkMNGJ+0rgD4f9jBTtogY6qA= X-Received: by 2002:a05:6102:f9b:b0:4e6:edce:4b55 with SMTP id ada2fe7eead31-4fa14fcd157mr2382700137.4.1753320176275; Wed, 23 Jul 2025 18:22:56 -0700 (PDT) MIME-Version: 1.0 References: <04afcd1f-ed7d-4c0a-add1-50e3719ccbf9@postgresfriends.org> <762ae707-7fdc-43d8-a77a-3a10d12ce21d@postgresfriends.org> In-Reply-To: <762ae707-7fdc-43d8-a77a-3a10d12ce21d@postgresfriends.org> From: jian he Date: Thu, 24 Jul 2025 09:22:19 +0800 X-Gm-Features: Ac12FXywaa3YeDzyNzOGvVz498ytpaLQKHRcGoXzSwNw50_4-uGDLFmDeBsXLtU Message-ID: Subject: Re: CAST(... ON DEFAULT) - WIP build on top of Error-Safe User Functions To: Vik Fearing Cc: Corey Huinker , Isaac Morland , pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="00000000000048f56b063aa2aae8" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000048f56b063aa2aae8 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Tue, Jul 22, 2025 at 8:26=E2=80=AFPM Vik Fearing wrote: > > The actual syntax is: > > > ::=3D > CAST > AS > [ FORMAT ] > [ ON CONVERSION ERROR ] > > > > "CONVERSION" is probably a noise word, but it is there because A) Oracle > wanted it there, and B) it makes sense because if the behavior> fails, that is still a failure of the entire CAST. > > > The is: > > ::=3D > ERROR > | NULL > | DEFAULT > > > but I am planning on removing the NULL variant in favor of having the > be a . So it > would be either ERROR ON CONVERSION ERROR (postgres's current behavior), > or DEFAULT NULL ON CONVERSION ERROR. > > > An example of B) above would be: CAST('five' AS INTEGER DEFAULT 'six' ON > CONVERSION ERROR). 'six' is no more an integer than 'five' is, so that > would error out because the conversion error does not happen on the > operand but on the default clause. CAST('five' AS INTEGER DEFAULT 6 ON > CONVERSION ERROR) would work. > hi. > ::=3D > ERROR > | NULL > | DEFAULT for I disallow it from returning a set, or using aggregate or window functions. For example, the following three cases will fail: +SELECT CAST('a' as int DEFAULT sum(1) ON CONVERSION ERROR); --error +SELECT CAST('a' as int DEFAULT sum(1) over() ON CONVERSION ERROR); --error +SELECT CAST('a' as int DEFAULT ret_setint() ON CONVERSION ERROR) --error (ret_setint function is warped as (select 1 union all select 2)) for array coerce, which you already mentioned, i think the following is what we expected. +SELECT CAST('{234,def,567}'::text[] AS integer[] DEFAULT '{-1011}' ON CONVERSION ERROR); + int4 +--------- + {-1011} +(1 row) I didn't implement the [ FORMAT ] part for now. please check the attached regress test and tests expected result. --00000000000048f56b063aa2aae8 Content-Type: application/x-patch; name="v2-0001-make-ArrayCoerceExpr-error-safe.patch" Content-Disposition: attachment; filename="v2-0001-make-ArrayCoerceExpr-error-safe.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mdgpgv8b1 RnJvbSA0N2MxODFlZWU1OTM0NjhjM2Q3YjdjYjU3YWVjM2ExZWE4Y2IzYzFkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBqaWFuIGhlIDxqaWFuLnVuaXZlcnNhbGl0eUBnbWFpbC5jb20+ CkRhdGU6IEZyaSwgMTggSnVsIDIwMjUgMTM6MDA6MTkgKzA4MDAKU3ViamVjdDogW1BBVENIIHYy 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 --00000000000048f56b063aa2aae8 Content-Type: application/x-patch; name="v2-0002-CAST-expr-AS-newtype-DEFAULT-ON-ERROR.patch" Content-Disposition: attachment; filename="v2-0002-CAST-expr-AS-newtype-DEFAULT-ON-ERROR.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mdgpgv7s0 RnJvbSA3ZWM5MzYxYmE1ZDYyMjVkNmFkYmRhMjhhZTIxOGQ4MmI0YTc0YjdhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBqaWFuIGhlIDxqaWFuLnVuaXZlcnNhbGl0eUBnbWFpbC5jb20+ CkRhdGU6IFRodSwgMjQgSnVsIDIwMjUgMDk6MTA6MzUgKzA4MDAKU3ViamVjdDogW1BBVENIIHYy IDIvMl0gQ0FTVChleHByIEFTIG5ld3R5cGUgREVGQVVMVCBPTiBFUlJPUikKClR5cGUgY2FzdCBu b2RlcyBhcmUgZ2VuZXJhbGx5IG9uZSBvZjogRnVuY0V4cHIsIENvZXJjZVZpYUlPLCBvciBBcnJh eUNvZXJjZUV4cHI7CnNlZSBidWlsZF9jb2VyY2lvbl9leHByZXNzaW9uLiAgV2UndmUgYWxyZWFk eSBtYWRlIENvZXJjZVZpYUlPIGVycm9yIHNhZmVbMF07IHdlCmp1c3QgbmVlZCB0byB0ZWFjaCBp dCB0byBldmFsdWF0ZSBkZWZhdWx0IGV4cHJlc3Npb24gYWZ0ZXIgY29lcmNpb24gZmFpbHVyZXMu CkFycmF5Q29lcmNlRXhwciBpcyBhbHNvIGhhbmRsaW5nIGVycm9ycyBzYWZlbHkuCkhvd2V2ZXIs IEZ1bmNFeHByIGNhbid0IGJlIG1hZGUgZXJyb3Itc2FmZSBkaXJlY3RseSAoc2VlIGV4YW1wbGUg bGlrZSBpbnQ4NCksIHNvCmluc3RlYWQsIHdlIGNvbnN0cnVjdCBhIENvZXJjZVZpYUlPIG5vZGUg dXNpbmcgdGhlIHNvdXJjZSBleHByZXNzaW9uIGFzIGl0cwphcmd1bWVudC4KClswXTogaHR0cHM6 Ly9naXQucG9zdGdyZXNxbC5vcmcvY2dpdC9wb3N0Z3Jlc3FsLmdpdC9jb21taXQvP2lkPWFhYWY5 NDQ5ZWM2YmU2MmNiMGQzMGVkMzU4OGRjMzg0ZjU2Mjc0YmYKZGlzY3Vzc2lvbjogaHR0cHM6Ly9w b3N0Z3IuZXMvbS9DQURrTE09ZnYxSmZZNFVmYS1qY3d3TmJqUWl4TlZpc2tROGpadTNUel9wNjU2 aV80aFFAbWFpbC5nbWFpbC5jb20KCmRlbW86ClNFTEVDVCBDQVNUKCcxJyBBUyBkYXRlICBERUZB VUxUICcyMDExLTAxLTAxJyBPTiBFUlJPUiksCiAgICAgICBDQVNUKCd7MjM0LGRlZiw1Njd9Jzo6 dGV4dFtdIEFTIGludGVnZXJbXSBERUZBVUxUICd7LTEwMTF9JyBPTiBFUlJPUik7CgogICAgZGF0 ZSAgICB8ICBpbnQ0Ci0tLS0tLS0tLS0tLSstLS0tLS0tLS0KIDIwMTEtMDEtMDEgfCB7LTEwMTF9 Ci0tLQogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHIuYyAgICAgICB8ICA5OCArKysrKysr KysKIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNFeHBySW50ZXJwLmMgfCAgMzAgKysrCiBzcmMv YmFja2VuZC9ub2Rlcy9ub2RlRnVuY3MuYyAgICAgICAgIHwgIDU3ICsrKysrCiBzcmMvYmFja2Vu ZC9ub2Rlcy9xdWVyeWp1bWJsZWZ1bmNzLmMgIHwgIDE0ICsrCiBzcmMvYmFja2VuZC9vcHRpbWl6 ZXIvdXRpbC9jbGF1c2VzLmMgIHwgIDE5ICsrCiBzcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55ICAg ICAgICAgICAgIHwgIDMxICsrLQogc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX2V4cHIuYyAgICAg ICB8IDI5NiArKysrKysrKysrKysrKysrKysrKysrKysrLQogc3JjL2JhY2tlbmQvcGFyc2VyL3Bh cnNlX3RhcmdldC5jICAgICB8ICAxNCArKwogc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX3R5cGUu YyAgICAgICB8ICAxMyArKwogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2FycmF5ZnVuY3MuYyAgICB8 ICAgNiArCiBzcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMgICAgIHwgIDE1ICsrCiBz cmMvYmFja2VuZC91dGlscy9mbWdyL2ZtZ3IuYyAgICAgICAgIHwgIDEzICsrCiBzcmMvaW5jbHVk ZS9leGVjdXRvci9leGVjRXhwci5oICAgICAgIHwgICA4ICsKIHNyYy9pbmNsdWRlL2ZtZ3IuaCAg ICAgICAgICAgICAgICAgICAgfCAgIDMgKwogc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgg ICAgICAgICB8ICAxNyArKwogc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oICAgICAgICB8 ICAgNiArCiBzcmMvaW5jbHVkZS9ub2Rlcy9wcmltbm9kZXMuaCAgICAgICAgIHwgIDMzICsrKwog c3JjL2luY2x1ZGUvcGFyc2VyL3BhcnNlX3R5cGUuaCAgICAgICB8ICAgMiArCiBzcmMvdGVzdC9y ZWdyZXNzL2V4cGVjdGVkL21pc2Mub3V0ICAgIHwgMTUxICsrKysrKysrKysrKysKIHNyYy90ZXN0 L3JlZ3Jlc3Mvc3FsL21pc2Muc3FsICAgICAgICAgfCAgNjAgKysrKysrCiBzcmMvdG9vbHMvcGdp bmRlbnQvdHlwZWRlZnMubGlzdCAgICAgIHwgICAzICsKIDIxIGZpbGVzIGNoYW5nZWQsIDg4MSBp bnNlcnRpb25zKCspLCA4IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4 ZWN1dG9yL2V4ZWNFeHByLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjRXhwci5jCmluZGV4 IDFmM2Y4OTk4NzRmLi45NGYwNDI2NWJhNyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0 b3IvZXhlY0V4cHIuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjRXhwci5jCkBAIC05 OSw2ICs5OSw5IEBAIHN0YXRpYyB2b2lkIEV4ZWNCdWlsZEFnZ1RyYW5zQ2FsbChFeHByU3RhdGUg KnN0YXRlLCBBZ2dTdGF0ZSAqYWdnc3RhdGUsCiBzdGF0aWMgdm9pZCBFeGVjSW5pdEpzb25FeHBy KEpzb25FeHByICpqc2V4cHIsIEV4cHJTdGF0ZSAqc3RhdGUsCiAJCQkJCQkJIERhdHVtICpyZXN2 LCBib29sICpyZXNudWxsLAogCQkJCQkJCSBFeHByRXZhbFN0ZXAgKnNjcmF0Y2gpOworc3RhdGlj IHZvaWQgRXhlY0luaXRTYWZlVHlwZUNhc3RFeHByKFNhZmVUeXBlQ2FzdEV4cHIgKnN0Y2V4cHIs IEV4cHJTdGF0ZSAqc3RhdGUsCisJCQkJCQkJCQkgRGF0dW0gKnJlc3YsIGJvb2wgKnJlc251bGws CisJCQkJCQkJCQkgRXhwckV2YWxTdGVwICpzY3JhdGNoKTsKIHN0YXRpYyB2b2lkIEV4ZWNJbml0 SnNvbkNvZXJjaW9uKEV4cHJTdGF0ZSAqc3RhdGUsIEpzb25SZXR1cm5pbmcgKnJldHVybmluZywK IAkJCQkJCQkJIEVycm9yU2F2ZUNvbnRleHQgKmVzY29udGV4dCwgYm9vbCBvbWl0X3F1b3RlcywK IAkJCQkJCQkJIGJvb2wgZXhpc3RzX2NvZXJjZSwKQEAgLTIxODAsNiArMjE4MywxNCBAQCBFeGVj SW5pdEV4cHJSZWMoRXhwciAqbm9kZSwgRXhwclN0YXRlICpzdGF0ZSwKIAkJCQlicmVhazsKIAkJ CX0KIAorCQljYXNlIFRfU2FmZVR5cGVDYXN0RXhwcjoKKwkJCXsKKwkJCQlTYWZlVHlwZUNhc3RF eHByICAgKnN0Y2V4cHIgPSBjYXN0Tm9kZShTYWZlVHlwZUNhc3RFeHByLCBub2RlKTsKKworCQkJ CUV4ZWNJbml0U2FmZVR5cGVDYXN0RXhwcihzdGNleHByLCBzdGF0ZSwgcmVzdiwgcmVzbnVsbCwg JnNjcmF0Y2gpOworCQkJCWJyZWFrOworCQkJfQorCiAJCWNhc2UgVF9Db2FsZXNjZUV4cHI6CiAJ CQl7CiAJCQkJQ29hbGVzY2VFeHByICpjb2FsZXNjZSA9IChDb2FsZXNjZUV4cHIgKikgbm9kZTsK QEAgLTQ3NDQsNiArNDc1NSw5MyBAQCBFeGVjQnVpbGRQYXJhbVNldEVxdWFsKFR1cGxlRGVzYyBk ZXNjLAogCXJldHVybiBzdGF0ZTsKIH0KIAorLyoKKyAqIFB1c2ggc3RlcHMgdG8gZXZhbHVhdGUg YSBTYWZlVHlwZUNhc3RFeHByIGFuZCBpdHMgdmFyaW91cyBzdWJzaWRpYXJ5IGV4cHJlc3Npb25z LgorICogV2UgYWxyZWFkeSBoYW5kbGUgQ29lcmNlVmlhSU8sIENvZXJjZVRvRG9tYWluLCBhbmQg QXJyYXlDb2VyY2VFeHByIGVycm9yCisgKiBzb2Z0bHkuICBIb3dldmVyLCBGdW5jRXhwciAoZS5n LiwgaW50ODQpIGNhbm5vdCBiZSBtYWRlIGVycm9yLXNhZmUuCisgKiBJbiBzdWNoIGNhc2VzLCB3 ZSB3cmFwIHRoZSBzb3VyY2UgZXhwcmVzc2lvbiBhbmQgdGFyZ2V0IHR5cGUgaW5mb3JtYXRpb24g aW50bworICogYSBDb2VyY2VWaWFJTyBub2RlIGluc3RlYWQuCisgKi8KK3N0YXRpYyB2b2lkCitF eGVjSW5pdFNhZmVUeXBlQ2FzdEV4cHIoU2FmZVR5cGVDYXN0RXhwciAqc3RjZXhwciAsIEV4cHJT dGF0ZSAqc3RhdGUsCisJCQkJCQkgRGF0dW0gKnJlc3YsIGJvb2wgKnJlc251bGwsCisJCQkJCQkg RXhwckV2YWxTdGVwICpzY3JhdGNoKQoreworCS8qCisJICogSWYgY29lcmNpb24gdG8gdGhlIHRh cmdldCB0eXBlIGZhaWxzLCBmYWxsIGJhY2sgdG8gdGhlIGRlZmF1bHQgZXhwcmVzc2lvbgorCSAq IHNwZWNpZmllZCBpbiB0aGUgT04gRVJST1IgY2xhdXNlLgorCSovCisJaWYgKHN0Y2V4cHItPmNh c3RfZXhwciA9PSBOVUxMKQorCXsKKwkJRXhlY0luaXRFeHByUmVjKChFeHByICopIHN0Y2V4cHIt PmRlZmF1bHRfZXhwciwKKwkJCQkJCXN0YXRlLCByZXN2LCByZXNudWxsKTsKKwkJcmV0dXJuOwor CX0KKwllbHNlCisJeworCQlDb2VyY2VWaWFJTyAqbmV3ZXhwcjsKKwkJU2FmZVR5cGVDYXN0U3Rh dGUgKnN0Y3N0YXRlOworCQlFcnJvclNhdmVDb250ZXh0ICplc2NvbnRleHQ7CisJCUVycm9yU2F2 ZUNvbnRleHQgKnNhdmVkX2VzY29udGV4dDsKKwkJTGlzdAkgICAqanVtcHNfdG9fZW5kID0gTklM OworCisJCXN0Y3N0YXRlID0gcGFsbG9jMChzaXplb2YoU2FmZVR5cGVDYXN0U3RhdGUpKTsKKwkJ c3Rjc3RhdGUtPnN0Y2V4cHIgPSBzdGNleHByOworCQlzdGNzdGF0ZS0+ZXNjb250ZXh0LnR5cGUg PSBUX0Vycm9yU2F2ZUNvbnRleHQ7CisJCWVzY29udGV4dCA9ICZzdGNzdGF0ZS0+ZXNjb250ZXh0 OworCQlzdGF0ZS0+ZXNjb250ZXh0ID0gZXNjb250ZXh0OworCisJCUFzc2VydChzdGNleHByLT5j YXN0X2V4cHIpOworCQkvKiBldmFsdWF0ZSBhcmd1bWVudCBleHByZXNzaW9uIGludG8gc3RlcCdz IHJlc3VsdCBhcmVhICovCisJCWlmIChJc0Eoc3RjZXhwci0+Y2FzdF9leHByLCBDb2VyY2VWaWFJ TykgfHwKKwkJCUlzQShzdGNleHByLT5jYXN0X2V4cHIsIENvZXJjZVRvRG9tYWluKSB8fAorCQkJ SXNBKHN0Y2V4cHItPmNhc3RfZXhwciwgQXJyYXlDb2VyY2VFeHByKSB8fAorCQkJSXNBKHN0Y2V4 cHItPmNhc3RfZXhwciwgVmFyKSkKKwkJCUV4ZWNJbml0RXhwclJlYygoRXhwciAqKSBzdGNleHBy LT5jYXN0X2V4cHIsCisJCQkJCQkJc3RhdGUsIHJlc3YsIHJlc251bGwpOworCQllbHNlCisJCXsK KwkJCW5ld2V4cHIgPSBtYWtlTm9kZShDb2VyY2VWaWFJTyk7CisJCQluZXdleHByLT5hcmcgPSAo RXhwciAqKSBzdGNleHByLT5zb3VyY2VfZXhwcjsKKwkJCW5ld2V4cHItPnJlc3VsdHR5cGUgPSBz dGNleHByLT5yZXN1bHR0eXBlOworCQkJbmV3ZXhwci0+cmVzdWx0Y29sbGlkID0gZXhwckNvbGxh dGlvbihzdGNleHByLT5zb3VyY2VfZXhwcik7CisJCQluZXdleHByLT5jb2VyY2Vmb3JtYXQgPSBD T0VSQ0VfRVhQTElDSVRfQ0FTVDsKKwkJCW5ld2V4cHItPmxvY2F0aW9uID0gZXhwckxvY2F0aW9u KHN0Y2V4cHItPnNvdXJjZV9leHByKTsKKworCQkJRXhlY0luaXRFeHByUmVjKChFeHByICopIG5l d2V4cHIsCisJCQkJCQkJc3RhdGUsIHJlc3YsIHJlc251bGwpOworCQl9CisKKwkJc2NyYXRjaC0+ b3Bjb2RlID0gRUVPUF9TQUZFVFlQRV9DQVNUOworCQlzY3JhdGNoLT5kLnN0Y2V4cHIuc3Rjc3Rh dGUgPSBzdGNzdGF0ZTsKKwkJRXhwckV2YWxQdXNoU3RlcChzdGF0ZSwgc2NyYXRjaCk7CisKKwkJ c3Rjc3RhdGUtPmp1bXBfZXJyb3IgPSBzdGF0ZS0+c3RlcHNfbGVuOworCQkvKiBKVU1QIHRvIGVu ZCBpZiBmYWxzZSwgdGhhdCBpcywgc2tpcCB0aGUgT04gRVJST1IgZXhwcmVzc2lvbi4gKi8KKwkJ anVtcHNfdG9fZW5kID0gbGFwcGVuZF9pbnQoanVtcHNfdG9fZW5kLCBzdGF0ZS0+c3RlcHNfbGVu KTsKKwkJc2NyYXRjaC0+b3Bjb2RlID0gRUVPUF9KVU1QX0lGX05PVF9UUlVFOworCQlzY3JhdGNo LT5yZXN2YWx1ZSA9ICZzdGNzdGF0ZS0+ZXJyb3IudmFsdWU7CisJCXNjcmF0Y2gtPnJlc251bGwg PSAmc3Rjc3RhdGUtPmVycm9yLmlzbnVsbDsKKwkJc2NyYXRjaC0+ZC5qdW1wLmp1bXBkb25lID0g LTE7CS8qIHNldCBiZWxvdyAqLworCQlFeHByRXZhbFB1c2hTdGVwKHN0YXRlLCBzY3JhdGNoKTsK KworCQkvKiBTdGVwcyB0byBldmFsdWF0ZSB0aGUgT04gRVJST1IgZXhwcmVzc2lvbiAqLworCQlz YXZlZF9lc2NvbnRleHQgPSBzdGF0ZS0+ZXNjb250ZXh0OworCQlzdGF0ZS0+ZXNjb250ZXh0ID0g TlVMTDsKKwkJRXhlY0luaXRFeHByUmVjKChFeHByICopIHN0Y3N0YXRlLT5zdGNleHByLT5kZWZh dWx0X2V4cHIsCisJCQkJCQlzdGF0ZSwgcmVzdiwgcmVzbnVsbCk7CisJCXN0YXRlLT5lc2NvbnRl eHQgPSBzYXZlZF9lc2NvbnRleHQ7CisKKwkJZm9yZWFjaF9pbnQobGMsIGp1bXBzX3RvX2VuZCkK KwkJeworCQkJRXhwckV2YWxTdGVwICphcyA9ICZzdGF0ZS0+c3RlcHNbbGNdOworCisJCQlhcy0+ ZC5qdW1wLmp1bXBkb25lID0gc3RhdGUtPnN0ZXBzX2xlbjsKKwkJfQorCQlzdGNzdGF0ZS0+anVt cF9lbmQgPSBzdGF0ZS0+c3RlcHNfbGVuOworCX0KK30KKwogLyoKICAqIFB1c2ggc3RlcHMgdG8g ZXZhbHVhdGUgYSBKc29uRXhwciBhbmQgaXRzIHZhcmlvdXMgc3Vic2lkaWFyeSBleHByZXNzaW9u cy4KICAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHJJbnRlcnAu YyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNFeHBySW50ZXJwLmMKaW5kZXggODFlNDZjZmY3 MjUuLjk4ZThhOWJkZTYyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjRXhw ckludGVycC5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNFeHBySW50ZXJwLmMKQEAg LTU2OCw2ICs1NjgsNyBAQCBFeGVjSW50ZXJwRXhwcihFeHByU3RhdGUgKnN0YXRlLCBFeHByQ29u dGV4dCAqZWNvbnRleHQsIGJvb2wgKmlzbnVsbCkKIAkJJiZDQVNFX0VFT1BfWE1MRVhQUiwKIAkJ JiZDQVNFX0VFT1BfSlNPTl9DT05TVFJVQ1RPUiwKIAkJJiZDQVNFX0VFT1BfSVNfSlNPTiwKKwkJ JiZDQVNFX0VFT1BfU0FGRVRZUEVfQ0FTVCwKIAkJJiZDQVNFX0VFT1BfSlNPTkVYUFJfUEFUSCwK IAkJJiZDQVNFX0VFT1BfSlNPTkVYUFJfQ09FUkNJT04sCiAJCSYmQ0FTRV9FRU9QX0pTT05FWFBS X0NPRVJDSU9OX0ZJTklTSCwKQEAgLTE5MjYsNiArMTkyNywxMSBAQCBFeGVjSW50ZXJwRXhwcihF eHByU3RhdGUgKnN0YXRlLCBFeHByQ29udGV4dCAqZWNvbnRleHQsIGJvb2wgKmlzbnVsbCkKIAkJ CUVFT19ORVhUKCk7CiAJCX0KIAorCQlFRU9fQ0FTRShFRU9QX1NBRkVUWVBFX0NBU1QpCisJCXsK KwkJCUVFT19KVU1QKEV4ZWNFdmFsU2FmZVR5cGVDYXN0KHN0YXRlLCBvcCkpOworCQl9CisKIAkJ RUVPX0NBU0UoRUVPUF9KU09ORVhQUl9QQVRIKQogCQl7CiAJCQkvKiB0b28gY29tcGxleCBmb3Ig YW4gaW5saW5lIGltcGxlbWVudGF0aW9uICovCkBAIC01MTg3LDYgKzUxOTMsMzAgQEAgR2V0SnNv bkJlaGF2aW9yVmFsdWVTdHJpbmcoSnNvbkJlaGF2aW9yICpiZWhhdmlvcikKIAlyZXR1cm4gcHN0 cmR1cChiZWhhdmlvcl9uYW1lc1tiZWhhdmlvci0+YnR5cGVdKTsKIH0KIAoraW50CitFeGVjRXZh bFNhZmVUeXBlQ2FzdChFeHByU3RhdGUgKnN0YXRlLCBFeHByRXZhbFN0ZXAgKm9wKQoreworCVNh ZmVUeXBlQ2FzdFN0YXRlICpzdGNzdGF0ZSA9IG9wLT5kLnN0Y2V4cHIuc3Rjc3RhdGU7CisKKwlp ZiAoU09GVF9FUlJPUl9PQ0NVUlJFRCgmc3Rjc3RhdGUtPmVzY29udGV4dCkpCisJeworCQkqb3At PnJlc3ZhbHVlID0gKERhdHVtKSAwOworCQkqb3AtPnJlc251bGwgPSB0cnVlOworCisJCXN0Y3N0 YXRlLT5lcnJvci52YWx1ZSA9IEJvb2xHZXREYXR1bSh0cnVlKTsKKworCQkvKgorCQkgKiBSZXNl dCBmb3IgbmV4dCB1c2Ugc3VjaCBhcyBmb3IgY2F0Y2hpbmcgZXJyb3JzIHdoZW4gY29lcmNpbmcg YQorCQkgKiBzdGNleHByIGV4cHJlc3Npb24uCisJCSAqLworCQlzdGNzdGF0ZS0+ZXNjb250ZXh0 LmVycm9yX29jY3VycmVkID0gZmFsc2U7CisJCXN0Y3N0YXRlLT5lc2NvbnRleHQuZGV0YWlsc193 YW50ZWQgPSBmYWxzZTsKKworCQlyZXR1cm4gc3Rjc3RhdGUtPmp1bXBfZXJyb3I7CisJfQorCXJl dHVybiBzdGNzdGF0ZS0+anVtcF9lbmQ7Cit9CisKIC8qCiAgKiBDaGVja3MgaWYgYW4gZXJyb3Ig b2NjdXJyZWQgaW4gRXhlY0V2YWxKc29uQ29lcmNpb24oKS4gIElmIHNvLCB0aGlzIHNldHMKICAq IEpzb25FeHByU3RhdGUuZXJyb3IgdG8gdHJpZ2dlciB0aGUgT04gRVJST1IgaGFuZGxpbmcgc3Rl cHMsIHVubGVzcyB0aGUKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL25vZGVzL25vZGVGdW5jcy5j IGIvc3JjL2JhY2tlbmQvbm9kZXMvbm9kZUZ1bmNzLmMKaW5kZXggN2JjODIzNTA3ZjEuLjVkYTdi ZDVkODhmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9ub2Rlcy9ub2RlRnVuY3MuYworKysgYi9z cmMvYmFja2VuZC9ub2Rlcy9ub2RlRnVuY3MuYwpAQCAtMjA2LDYgKzIwNiw5IEBAIGV4cHJUeXBl KGNvbnN0IE5vZGUgKmV4cHIpCiAJCWNhc2UgVF9Sb3dDb21wYXJlRXhwcjoKIAkJCXR5cGUgPSBC T09MT0lEOwogCQkJYnJlYWs7CisJCWNhc2UgVF9TYWZlVHlwZUNhc3RFeHByOgorCQkJdHlwZSA9 ICgoY29uc3QgU2FmZVR5cGVDYXN0RXhwciAqKSBleHByKS0+cmVzdWx0dHlwZTsKKwkJCWJyZWFr OwogCQljYXNlIFRfQ29hbGVzY2VFeHByOgogCQkJdHlwZSA9ICgoY29uc3QgQ29hbGVzY2VFeHBy ICopIGV4cHIpLT5jb2FsZXNjZXR5cGU7CiAJCQlicmVhazsKQEAgLTQ1MCw2ICs0NTMsOCBAQCBl eHByVHlwbW9kKGNvbnN0IE5vZGUgKmV4cHIpCiAJCQkJcmV0dXJuIHR5cG1vZDsKIAkJCX0KIAkJ CWJyZWFrOworCQljYXNlIFRfU2FmZVR5cGVDYXN0RXhwcjoKKwkJCXJldHVybiAoKGNvbnN0IFNh ZmVUeXBlQ2FzdEV4cHIgKikgZXhwciktPnJlc3VsdHR5cG1vZDsKIAkJY2FzZSBUX0NvYWxlc2Nl RXhwcjoKIAkJCXsKIAkJCQkvKgpAQCAtOTY1LDYgKzk3MCw5IEBAIGV4cHJDb2xsYXRpb24oY29u c3QgTm9kZSAqZXhwcikKIAkJCS8qIFJvd0NvbXBhcmVFeHByJ3MgcmVzdWx0IGlzIGJvb2xlYW4g Li4uICovCiAJCQljb2xsID0gSW52YWxpZE9pZDsJLyogLi4uIHNvIGl0IGhhcyBubyBjb2xsYXRp b24gKi8KIAkJCWJyZWFrOworCQljYXNlIFRfU2FmZVR5cGVDYXN0RXhwcjoKKwkJCWNvbGwgPSAo KGNvbnN0IFNhZmVUeXBlQ2FzdEV4cHIgKikgZXhwciktPnJlc3VsdGNvbGxpZDsKKwkJCWJyZWFr OwogCQljYXNlIFRfQ29hbGVzY2VFeHByOgogCQkJY29sbCA9ICgoY29uc3QgQ29hbGVzY2VFeHBy ICopIGV4cHIpLT5jb2FsZXNjZWNvbGxpZDsKIAkJCWJyZWFrOwpAQCAtMTIzMiw2ICsxMjQwLDkg QEAgZXhwclNldENvbGxhdGlvbihOb2RlICpleHByLCBPaWQgY29sbGF0aW9uKQogCQkJLyogUm93 Q29tcGFyZUV4cHIncyByZXN1bHQgaXMgYm9vbGVhbiAuLi4gKi8KIAkJCUFzc2VydCghT2lkSXNW YWxpZChjb2xsYXRpb24pKTsgLyogLi4uIHNvIG5ldmVyIHNldCBhIGNvbGxhdGlvbiAqLwogCQkJ YnJlYWs7CisJCWNhc2UgVF9TYWZlVHlwZUNhc3RFeHByOgorCQkJKChTYWZlVHlwZUNhc3RFeHBy ICopIGV4cHIpLT5yZXN1bHRjb2xsaWQgPSBjb2xsYXRpb247CisJCQlicmVhazsKIAkJY2FzZSBU X0NvYWxlc2NlRXhwcjoKIAkJCSgoQ29hbGVzY2VFeHByICopIGV4cHIpLT5jb2FsZXNjZWNvbGxp ZCA9IGNvbGxhdGlvbjsKIAkJCWJyZWFrOwpAQCAtMTU1NCw2ICsxNTY1LDE1IEBAIGV4cHJMb2Nh dGlvbihjb25zdCBOb2RlICpleHByKQogCQkJLyoganVzdCB1c2UgbGVmdG1vc3QgYXJndW1lbnQn cyBsb2NhdGlvbiAqLwogCQkJbG9jID0gZXhwckxvY2F0aW9uKChOb2RlICopICgoY29uc3QgUm93 Q29tcGFyZUV4cHIgKikgZXhwciktPmxhcmdzKTsKIAkJCWJyZWFrOworCQljYXNlIFRfU2FmZVR5 cGVDYXN0RXhwcjoKKwkJCXsKKwkJCQljb25zdCBTYWZlVHlwZUNhc3RFeHByICpjYXN0X2V4cHIg PSAoY29uc3QgU2FmZVR5cGVDYXN0RXhwciAqKSBleHByOworCQkJCWlmIChjYXN0X2V4cHItPmNh c3RfZXhwcikKKwkJCQkJbG9jID0gZXhwckxvY2F0aW9uKGNhc3RfZXhwci0+Y2FzdF9leHByKTsK KwkJCQllbHNlCisJCQkJCWxvYyA9IGV4cHJMb2NhdGlvbihjYXN0X2V4cHItPmRlZmF1bHRfZXhw cik7CisJCQkJYnJlYWs7CisJCQl9CiAJCWNhc2UgVF9Db2FsZXNjZUV4cHI6CiAJCQkvKiBDT0FM RVNDRSBrZXl3b3JkIHNob3VsZCBhbHdheXMgYmUgdGhlIGZpcnN0IHRoaW5nICovCiAJCQlsb2Mg PSAoKGNvbnN0IENvYWxlc2NlRXhwciAqKSBleHByKS0+bG9jYXRpb247CkBAIC0yMzI1LDYgKzIz NDUsMTggQEAgZXhwcmVzc2lvbl90cmVlX3dhbGtlcl9pbXBsKE5vZGUgKm5vZGUsCiAJCQkJCXJl dHVybiB0cnVlOwogCQkJfQogCQkJYnJlYWs7CisJCWNhc2UgVF9TYWZlVHlwZUNhc3RFeHByOgor CQkJeworCQkJCVNhZmVUeXBlQ2FzdEV4cHIgICAqc2NleHByID0gKFNhZmVUeXBlQ2FzdEV4cHIg Kikgbm9kZTsKKworCQkJCWlmIChXQUxLKHNjZXhwci0+c291cmNlX2V4cHIpKQorCQkJCQlyZXR1 cm4gdHJ1ZTsKKwkJCQlpZiAoV0FMSyhzY2V4cHItPmNhc3RfZXhwcikpCisJCQkJCXJldHVybiB0 cnVlOworCQkJCWlmIChXQUxLKHNjZXhwci0+ZGVmYXVsdF9leHByKSkKKwkJCQkJcmV0dXJuIHRy dWU7CisJCQl9CisJCQlicmVhazsKIAkJY2FzZSBUX0NvYWxlc2NlRXhwcjoKIAkJCXJldHVybiBX QUxLKCgoQ29hbGVzY2VFeHByICopIG5vZGUpLT5hcmdzKTsKIAkJY2FzZSBUX01pbk1heEV4cHI6 CkBAIC0zMzM0LDYgKzMzNjYsMTkgQEAgZXhwcmVzc2lvbl90cmVlX211dGF0b3JfaW1wbChOb2Rl ICpub2RlLAogCQkJCXJldHVybiAoTm9kZSAqKSBuZXdub2RlOwogCQkJfQogCQkJYnJlYWs7CisJ CWNhc2UgVF9TYWZlVHlwZUNhc3RFeHByOgorCQkJeworCQkJCVNhZmVUeXBlQ2FzdEV4cHIgICAq c2NleHByID0gKFNhZmVUeXBlQ2FzdEV4cHIgKikgbm9kZTsKKwkJCQlTYWZlVHlwZUNhc3RFeHBy ICAgKm5ld25vZGU7CisKKwkJCQlGTEFUQ09QWShuZXdub2RlLCBzY2V4cHIsIFNhZmVUeXBlQ2Fz dEV4cHIpOworCQkJCU1VVEFURShuZXdub2RlLT5zb3VyY2VfZXhwciwgc2NleHByLT5zb3VyY2Vf ZXhwciwgTm9kZSAqKTsKKwkJCQlNVVRBVEUobmV3bm9kZS0+Y2FzdF9leHByLCBzY2V4cHItPmNh c3RfZXhwciwgTm9kZSAqKTsKKwkJCQlNVVRBVEUobmV3bm9kZS0+ZGVmYXVsdF9leHByLCBzY2V4 cHItPmRlZmF1bHRfZXhwciwgTm9kZSAqKTsKKworCQkJCXJldHVybiAoTm9kZSAqKSBuZXdub2Rl OworCQkJfQorCQkJYnJlYWs7CiAJCWNhc2UgVF9Db2FsZXNjZUV4cHI6CiAJCQl7CiAJCQkJQ29h bGVzY2VFeHByICpjb2FsZXNjZWV4cHIgPSAoQ29hbGVzY2VFeHByICopIG5vZGU7CkBAIC00NDY4 LDYgKzQ1MTMsMTggQEAgcmF3X2V4cHJlc3Npb25fdHJlZV93YWxrZXJfaW1wbChOb2RlICpub2Rl LAogCQkJCQlyZXR1cm4gdHJ1ZTsKIAkJCX0KIAkJCWJyZWFrOworCQljYXNlIFRfU2FmZVR5cGVD YXN0RXhwcjoKKwkJCXsKKwkJCQlTYWZlVHlwZUNhc3RFeHByICAgKnN0YyA9IChTYWZlVHlwZUNh c3RFeHByICopIG5vZGU7CisKKwkJCQlpZiAoV0FMSyhzdGMtPnNvdXJjZV9leHByKSkKKwkJCQkJ cmV0dXJuIHRydWU7CisJCQkJaWYgKFdBTEsoc3RjLT5jYXN0X2V4cHIpKQorCQkJCQlyZXR1cm4g dHJ1ZTsKKwkJCQlpZiAoV0FMSyhzdGMtPmRlZmF1bHRfZXhwcikpCisJCQkJCXJldHVybiB0cnVl OworCQkJfQorCQkJYnJlYWs7CiAJCWNhc2UgVF9Db2xsYXRlQ2xhdXNlOgogCQkJcmV0dXJuIFdB TEsoKChDb2xsYXRlQ2xhdXNlICopIG5vZGUpLT5hcmcpOwogCQljYXNlIFRfU29ydEJ5OgpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvbm9kZXMvcXVlcnlqdW1ibGVmdW5jcy5jIGIvc3JjL2JhY2tl bmQvbm9kZXMvcXVlcnlqdW1ibGVmdW5jcy5jCmluZGV4IDMxZjk3MTUxOTc3Li43NjQyNmM4OGU5 YSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvbm9kZXMvcXVlcnlqdW1ibGVmdW5jcy5jCisrKyBi L3NyYy9iYWNrZW5kL25vZGVzL3F1ZXJ5anVtYmxlZnVuY3MuYwpAQCAtNzQsNiArNzQsNyBAQCBz dGF0aWMgdm9pZCBfanVtYmxlRWxlbWVudHMoSnVtYmxlU3RhdGUgKmpzdGF0ZSwgTGlzdCAqZWxl bWVudHMsIE5vZGUgKm5vZGUpOwogc3RhdGljIHZvaWQgX2p1bWJsZVBhcmFtKEp1bWJsZVN0YXRl ICpqc3RhdGUsIE5vZGUgKm5vZGUpOwogc3RhdGljIHZvaWQgX2p1bWJsZUFfQ29uc3QoSnVtYmxl U3RhdGUgKmpzdGF0ZSwgTm9kZSAqbm9kZSk7CiBzdGF0aWMgdm9pZCBfanVtYmxlVmFyaWFibGVT ZXRTdG10KEp1bWJsZVN0YXRlICpqc3RhdGUsIE5vZGUgKm5vZGUpOworc3RhdGljIHZvaWQgX2p1 bWJsZVNhZmVUeXBlQ2FzdEV4cHIoSnVtYmxlU3RhdGUgKmpzdGF0ZSwgTm9kZSAqbm9kZSk7CiBz dGF0aWMgdm9pZCBfanVtYmxlUmFuZ2VUYmxFbnRyeV9lcmVmKEp1bWJsZVN0YXRlICpqc3RhdGUs CiAJCQkJCQkJCQkgIFJhbmdlVGJsRW50cnkgKnJ0ZSwKIAkJCQkJCQkJCSAgQWxpYXMgKmV4cHIp OwpAQCAtNzU4LDYgKzc1OSwxOSBAQCBfanVtYmxlVmFyaWFibGVTZXRTdG10KEp1bWJsZVN0YXRl ICpqc3RhdGUsIE5vZGUgKm5vZGUpCiAJSlVNQkxFX0xPQ0FUSU9OKGxvY2F0aW9uKTsKIH0KIAor c3RhdGljIHZvaWQKK19qdW1ibGVTYWZlVHlwZUNhc3RFeHByKEp1bWJsZVN0YXRlICpqc3RhdGUs IE5vZGUgKm5vZGUpCit7CisJU2FmZVR5cGVDYXN0RXhwciAqZXhwciA9IChTYWZlVHlwZUNhc3RF eHByICopIG5vZGU7CisKKwlpZiAoZXhwci0+Y2FzdF9leHByID09IE5VTEwpCisJCUpVTUJMRV9O T0RFKHNvdXJjZV9leHByKTsKKwllbHNlCisJCUpVTUJMRV9OT0RFKGNhc3RfZXhwcik7CisKKwlK VU1CTEVfTk9ERShkZWZhdWx0X2V4cHIpOworfQorCiAvKgogICogQ3VzdG9tIHF1ZXJ5IGp1bWJs ZSBmdW5jdGlvbiBmb3IgUmFuZ2VUYmxFbnRyeS5lcmVmLgogICovCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9jbGF1c2VzLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIv dXRpbC9jbGF1c2VzLmMKaW5kZXggZjQ1MTMxYzM0YzUuLmE3YjRlODA5NzE2IDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9jbGF1c2VzLmMKKysrIGIvc3JjL2JhY2tlbmQv b3B0aW1pemVyL3V0aWwvY2xhdXNlcy5jCkBAIC0yOTM4LDYgKzI5MzgsMjUgQEAgZXZhbF9jb25z dF9leHByZXNzaW9uc19tdXRhdG9yKE5vZGUgKm5vZGUsCiAJCQkJCQkJCQkJCQkgIGNvcHlPYmpl Y3QoanZlLT5mb3JtYXQpKTsKIAkJCX0KIAorCQljYXNlIFRfU2FmZVR5cGVDYXN0RXhwcjoKKwkJ CXsKKwkJCQlTYWZlVHlwZUNhc3RFeHByICpzdGMgPSAoU2FmZVR5cGVDYXN0RXhwciAqKSBub2Rl OworCQkJCVNhZmVUeXBlQ2FzdEV4cHIJICAgKm5ld2V4cHI7CisJCQkJTm9kZQkgICAqc291cmNl X2V4cHIgPSBzdGMtPnNvdXJjZV9leHByOworCQkJCU5vZGUJICAgKmRlZmF1bHRfZXhwciA9IHN0 Yy0+ZGVmYXVsdF9leHByOworCisJCQkJc291cmNlX2V4cHIgPSBldmFsX2NvbnN0X2V4cHJlc3Np b25zX211dGF0b3Ioc291cmNlX2V4cHIsIGNvbnRleHQpOworCQkJCWRlZmF1bHRfZXhwciA9IGV2 YWxfY29uc3RfZXhwcmVzc2lvbnNfbXV0YXRvcihkZWZhdWx0X2V4cHIsIGNvbnRleHQpOworCisJ CQkJbmV3ZXhwciA9IG1ha2VOb2RlKFNhZmVUeXBlQ2FzdEV4cHIpOworCQkJCW5ld2V4cHItPnNv dXJjZV9leHByID0gc291cmNlX2V4cHI7CisJCQkJbmV3ZXhwci0+Y2FzdF9leHByID0gc3RjLT5j YXN0X2V4cHI7CisJCQkJbmV3ZXhwci0+ZGVmYXVsdF9leHByID0gZGVmYXVsdF9leHByOworCQkJ CW5ld2V4cHItPnJlc3VsdHR5cGUgPSBzdGMtPnJlc3VsdHR5cGU7CisJCQkJbmV3ZXhwci0+cmVz dWx0dHlwbW9kID0gc3RjLT5yZXN1bHR0eXBtb2Q7CisJCQkJbmV3ZXhwci0+cmVzdWx0Y29sbGlk ID0gc3RjLT5yZXN1bHRjb2xsaWQ7CisJCQkJcmV0dXJuIChOb2RlICopIG5ld2V4cHI7CisJCQl9 CiAJCWNhc2UgVF9TdWJQbGFuOgogCQljYXNlIFRfQWx0ZXJuYXRpdmVTdWJQbGFuOgogCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55IGIvc3JjL2JhY2tlbmQvcGFyc2VyL2dy YW0ueQppbmRleCA3MzM0NWJiM2M3MC4uNjZmMDUxMTNhNWMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL3BhcnNlci9ncmFtLnkKKysrIGIvc3JjL2JhY2tlbmQvcGFyc2VyL2dyYW0ueQpAQCAtNjQy LDYgKzY0Miw4IEBAIHN0YXRpYyBOb2RlICptYWtlUmVjdXJzaXZlVmlld1NlbGVjdChjaGFyICpy ZWxuYW1lLCBMaXN0ICphbGlhc2VzLCBOb2RlICpxdWVyeSk7CiAldHlwZSA8cGFydGJvdW5kc3Bl Yz4gUGFydGl0aW9uQm91bmRTcGVjCiAldHlwZSA8bGlzdD4JCWhhc2hfcGFydGJvdW5kCiAldHlw ZSA8ZGVmZWx0PgkJaGFzaF9wYXJ0Ym91bmRfZWxlbQorJXR5cGUgPG5vZGU+CWNhc3Rfb25fZXJy b3JfY2xhdXNlCisldHlwZSA8bm9kZT4JY2FzdF9vbl9lcnJvcl9hY3Rpb24KIAogJXR5cGUgPG5v ZGU+CWpzb25fZm9ybWF0X2NsYXVzZQogCQkJCWpzb25fZm9ybWF0X2NsYXVzZV9vcHQKQEAgLTE1 OTQzLDggKzE1OTQ1LDI1IEBAIGZ1bmNfZXhwcl9jb21tb25fc3ViZXhwcjoKIAkJCQl7CiAJCQkJ CSQkID0gbWFrZVNRTFZhbHVlRnVuY3Rpb24oU1ZGT1BfQ1VSUkVOVF9TQ0hFTUEsIC0xLCBAMSk7 CiAJCQkJfQotCQkJfCBDQVNUICcoJyBhX2V4cHIgQVMgVHlwZW5hbWUgJyknCi0JCQkJeyAkJCA9 IG1ha2VUeXBlQ2FzdCgkMywgJDUsIEAxKTsgfQorCQkJfCBDQVNUICcoJyBhX2V4cHIgQVMgVHlw ZW5hbWUgY2FzdF9vbl9lcnJvcl9jbGF1c2UgJyknCisJCQkJeworCQkJCQlUeXBlQ2FzdCAqY2Fz dCA9IChUeXBlQ2FzdCAqKSBtYWtlVHlwZUNhc3QoJDMsICQ1LCBAMSk7CisJCQkJCWlmICgkNiA9 PSBOVUxMKQorCQkJCQkJJCQgPSAoTm9kZSAqKSBjYXN0OworCQkJCQllbHNlCisJCQkJCXsKKwkJ CQkJCVNhZmVUeXBlQ2FzdCAqc2FmZWNhc3QgPSBtYWtlTm9kZShTYWZlVHlwZUNhc3QpOworCisJ CQkJCQlzYWZlY2FzdC0+Y2FzdCA9IChOb2RlICopIGNhc3Q7CisJCQkJCQlzYWZlY2FzdC0+ZXhw ciA9ICQ2OworCisJCQkJCQkvKgorCQkJCQkJICogT24tZXJyb3IgYWN0aW9ucyBtdXN0IHRoZW1z ZWx2ZXMgYmUgdHlwZWNhc3QgdG8gdGhlCisJCQkJCQkgKiBzYW1lIHR5cGUgYXMgdGhlIG9yaWdp bmFsIGV4cHJlc3Npb24uCisJCQkJCQkgKi8KKwkJCQkJCSQkID0gKE5vZGUgKikgc2FmZWNhc3Q7 CisJCQkJCX0KKwkJCQl9CiAJCQl8IEVYVFJBQ1QgJygnIGV4dHJhY3RfbGlzdCAnKScKIAkJCQl7 CiAJCQkJCSQkID0gKE5vZGUgKikgbWFrZUZ1bmNDYWxsKFN5c3RlbUZ1bmNOYW1lKCJleHRyYWN0 IiksCkBAIC0xNjMzMCw2ICsxNjM0OSwxNCBAQCBmdW5jX2V4cHJfY29tbW9uX3N1YmV4cHI6CiAJ CQkJfQogCQkJOwogCitjYXN0X29uX2Vycm9yX2NsYXVzZTogY2FzdF9vbl9lcnJvcl9hY3Rpb24g T04gQ09OVkVSU0lPTl9QIEVSUk9SX1AgeyAkJCA9ICQxOyB9CisJCQl8IC8qIEVNUFRZICovIHsg JCQgPSBOVUxMOyB9CisJCTsKKworY2FzdF9vbl9lcnJvcl9hY3Rpb246IEVSUk9SX1AgeyAkJCA9 IE5VTEw7IH0KKwkJCXwgTlVMTF9QIHsgJCQgPSBtYWtlTnVsbEFDb25zdCgtMSk7IH0KKwkJCXwg REVGQVVMVCBhX2V4cHIgeyAkJCA9ICQyOyB9CisJCTsKIAogLyoKICAqIFNRTC9YTUwgc3VwcG9y dApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX2V4cHIuYyBiL3NyYy9iYWNr ZW5kL3BhcnNlci9wYXJzZV9leHByLmMKaW5kZXggZDY2Mjc2ODAxYzYuLjU3ZGZmNGI3NzYwIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfZXhwci5jCisrKyBiL3NyYy9iYWNr ZW5kL3BhcnNlci9wYXJzZV9leHByLmMKQEAgLTE2LDYgKzE2LDcgQEAKICNpbmNsdWRlICJwb3N0 Z3Jlcy5oIgogCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19hZ2dyZWdhdGUuaCIKKyNpbmNsdWRlICJj YXRhbG9nL3BnX3Byb2MuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3R5cGUuaCIKICNpbmNsdWRl ICJjb21tYW5kcy9kYmNvbW1hbmRzLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCkBAIC0zNyw2 ICszOCw3IEBACiAjaW5jbHVkZSAidXRpbHMvZGF0ZS5oIgogI2luY2x1ZGUgInV0aWxzL2ZtZ3Jv aWRzLmgiCiAjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCisjaW5jbHVkZSAidXRpbHMvc3lz Y2FjaGUuaCIKICNpbmNsdWRlICJ1dGlscy90aW1lc3RhbXAuaCIKICNpbmNsdWRlICJ1dGlscy94 bWwuaCIKIApAQCAtNjAsNyArNjIsMTAgQEAgc3RhdGljIE5vZGUgKnRyYW5zZm9ybU11bHRpQXNz aWduUmVmKFBhcnNlU3RhdGUgKnBzdGF0ZSwgTXVsdGlBc3NpZ25SZWYgKm1hcmVmKTsKIHN0YXRp YyBOb2RlICp0cmFuc2Zvcm1DYXNlRXhwcihQYXJzZVN0YXRlICpwc3RhdGUsIENhc2VFeHByICpj KTsKIHN0YXRpYyBOb2RlICp0cmFuc2Zvcm1TdWJMaW5rKFBhcnNlU3RhdGUgKnBzdGF0ZSwgU3Vi TGluayAqc3VibGluayk7CiBzdGF0aWMgTm9kZSAqdHJhbnNmb3JtQXJyYXlFeHByKFBhcnNlU3Rh dGUgKnBzdGF0ZSwgQV9BcnJheUV4cHIgKmEsCi0JCQkJCQkJCU9pZCBhcnJheV90eXBlLCBPaWQg ZWxlbWVudF90eXBlLCBpbnQzMiB0eXBtb2QpOworCQkJCQkJCQlPaWQgYXJyYXlfdHlwZSwgT2lk IGVsZW1lbnRfdHlwZSwgaW50MzIgdHlwbW9kLAorCQkJCQkJCQlib29sICpjYW5fY29lcmNlKTsK K3N0YXRpYyBOb2RlICp0cmFuc2Zvcm1BcnJheUV4cHJTYWZlKFBhcnNlU3RhdGUgKnBzdGF0ZSwg QV9BcnJheUV4cHIgKmEsCisJCQkJCQkJCQlPaWQgYXJyYXlfdHlwZSwgT2lkIGVsZW1lbnRfdHlw ZSwgaW50MzIgdHlwbW9kKTsKIHN0YXRpYyBOb2RlICp0cmFuc2Zvcm1Sb3dFeHByKFBhcnNlU3Rh dGUgKnBzdGF0ZSwgUm93RXhwciAqciwgYm9vbCBhbGxvd0RlZmF1bHQpOwogc3RhdGljIE5vZGUg KnRyYW5zZm9ybUNvYWxlc2NlRXhwcihQYXJzZVN0YXRlICpwc3RhdGUsIENvYWxlc2NlRXhwciAq Yyk7CiBzdGF0aWMgTm9kZSAqdHJhbnNmb3JtTWluTWF4RXhwcihQYXJzZVN0YXRlICpwc3RhdGUs IE1pbk1heEV4cHIgKm0pOwpAQCAtNzYsNiArODEsNyBAQCBzdGF0aWMgTm9kZSAqdHJhbnNmb3Jt V2hvbGVSb3dSZWYoUGFyc2VTdGF0ZSAqcHN0YXRlLAogCQkJCQkJCQkgIGludCBzdWJsZXZlbHNf dXAsIGludCBsb2NhdGlvbik7CiBzdGF0aWMgTm9kZSAqdHJhbnNmb3JtSW5kaXJlY3Rpb24oUGFy c2VTdGF0ZSAqcHN0YXRlLCBBX0luZGlyZWN0aW9uICppbmQpOwogc3RhdGljIE5vZGUgKnRyYW5z Zm9ybVR5cGVDYXN0KFBhcnNlU3RhdGUgKnBzdGF0ZSwgVHlwZUNhc3QgKnRjKTsKK3N0YXRpYyBO b2RlICp0cmFuc2Zvcm1UeXBlU2FmZUNhc3QoUGFyc2VTdGF0ZSAqcHN0YXRlLCBTYWZlVHlwZUNh c3QgKnRjKTsKIHN0YXRpYyBOb2RlICp0cmFuc2Zvcm1Db2xsYXRlQ2xhdXNlKFBhcnNlU3RhdGUg KnBzdGF0ZSwgQ29sbGF0ZUNsYXVzZSAqYyk7CiBzdGF0aWMgTm9kZSAqdHJhbnNmb3JtSnNvbk9i amVjdENvbnN0cnVjdG9yKFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAkJCQkJCQkJCQkJSnNvbk9iamVj dENvbnN0cnVjdG9yICpjdG9yKTsKQEAgLTEwNiw2ICsxMTIsOCBAQCBzdGF0aWMgRXhwciAqbWFr ZV9kaXN0aW5jdF9vcChQYXJzZVN0YXRlICpwc3RhdGUsIExpc3QgKm9wbmFtZSwKIAkJCQkJCQkg IE5vZGUgKmx0cmVlLCBOb2RlICpydHJlZSwgaW50IGxvY2F0aW9uKTsKIHN0YXRpYyBOb2RlICpt YWtlX251bGx0ZXN0X2Zyb21fZGlzdGluY3QoUGFyc2VTdGF0ZSAqcHN0YXRlLAogCQkJCQkJCQkJ CSBBX0V4cHIgKmRpc3RpbmN0YSwgTm9kZSAqYXJnKTsKK3N0YXRpYyBib29sIENvdmVydFVua25v d25Db25zdFNhZmUoUGFyc2VTdGF0ZSAqcHN0YXRlLCBOb2RlICpub2RlLAorCQkJCQkJCQkgICBP aWQgdGFyZ2V0VHlwZUlkLCBpbnQzMiB0YXJnZXRUeXBlTW9kKTsKIAogCiAvKgpAQCAtMTYzLDEz ICsxNzEsMTcgQEAgdHJhbnNmb3JtRXhwclJlY3Vyc2UoUGFyc2VTdGF0ZSAqcHN0YXRlLCBOb2Rl ICpleHByKQogCiAJCWNhc2UgVF9BX0FycmF5RXhwcjoKIAkJCXJlc3VsdCA9IHRyYW5zZm9ybUFy cmF5RXhwcihwc3RhdGUsIChBX0FycmF5RXhwciAqKSBleHByLAotCQkJCQkJCQkJCUludmFsaWRP aWQsIEludmFsaWRPaWQsIC0xKTsKKwkJCQkJCQkJCQlJbnZhbGlkT2lkLCBJbnZhbGlkT2lkLCAt MSwgTlVMTCk7CiAJCQlicmVhazsKIAogCQljYXNlIFRfVHlwZUNhc3Q6CiAJCQlyZXN1bHQgPSB0 cmFuc2Zvcm1UeXBlQ2FzdChwc3RhdGUsIChUeXBlQ2FzdCAqKSBleHByKTsKIAkJCWJyZWFrOwog CisJCWNhc2UgVF9TYWZlVHlwZUNhc3Q6CisJCQlyZXN1bHQgPSB0cmFuc2Zvcm1UeXBlU2FmZUNh c3QocHN0YXRlLCAoU2FmZVR5cGVDYXN0ICopIGV4cHIpOworCQkJYnJlYWs7CisKIAkJY2FzZSBU X0NvbGxhdGVDbGF1c2U6CiAJCQlyZXN1bHQgPSB0cmFuc2Zvcm1Db2xsYXRlQ2xhdXNlKHBzdGF0 ZSwgKENvbGxhdGVDbGF1c2UgKikgZXhwcik7CiAJCQlicmVhazsKQEAgLTIwMDQsNiArMjAxNiwx MDYgQEAgdHJhbnNmb3JtU3ViTGluayhQYXJzZVN0YXRlICpwc3RhdGUsIFN1YkxpbmsgKnN1Ymxp bmspCiAJcmV0dXJuIHJlc3VsdDsKIH0KIAorc3RhdGljIGJvb2wgQ292ZXJ0VW5rbm93bkNvbnN0 U2FmZShQYXJzZVN0YXRlICpwc3RhdGUsIE5vZGUgKm5vZGUsCisJCQkJCQkJCSAgIE9pZCB0YXJn ZXRUeXBlSWQsIGludDMyIHRhcmdldFR5cGVNb2QpCit7CisJT2lkCQkJYmFzZVR5cGVJZDsKKwlp bnQzMgkJYmFzZVR5cGVNb2Q7CisJaW50MzIJCWlucHV0VHlwZU1vZDsKKwlUeXBlCQliYXNlVHlw ZTsKKwljaGFyCQkqc3RyaW5nOworCURhdHVtCQlkYXR1bTsKKwlib29sCQljb252ZXJ0ZWQ7CisJ Q29uc3QJICAgKmNvbjsKKworCUFzc2VydChJc0Eobm9kZSwgQ29uc3QpKTsKKwlBc3NlcnQoZXhw clR5cGUobm9kZSkgPT0gVU5LTk9XTk9JRCk7CisKKwljb24gPSAoQ29uc3QgKikgbm9kZTsKKwli YXNlVHlwZU1vZCA9IHRhcmdldFR5cGVNb2Q7CisJYmFzZVR5cGVJZCA9IGdldEJhc2VUeXBlQW5k VHlwbW9kKHRhcmdldFR5cGVJZCwgJmJhc2VUeXBlTW9kKTsKKworCWlmIChiYXNlVHlwZUlkID09 IElOVEVSVkFMT0lEKQorCQlpbnB1dFR5cGVNb2QgPSBiYXNlVHlwZU1vZDsKKwllbHNlCisJCWlu cHV0VHlwZU1vZCA9IC0xOworCWJhc2VUeXBlID0gdHlwZWlkVHlwZShiYXNlVHlwZUlkKTsKKwor CS8qCisJICogV2UgYXNzdW1lIGhlcmUgdGhhdCBVTktOT1dOJ3MgaW50ZXJuYWwgcmVwcmVzZW50 YXRpb24gaXMgdGhlIHNhbWUgYXMKKwkgKiBDU1RSSU5HLgorCSovCisJaWYgKCFjb24tPmNvbnN0 aXNudWxsKQorCQlzdHJpbmcgPSBEYXR1bUdldENTdHJpbmcoY29uLT5jb25zdHZhbHVlKTsKKwll bHNlCisJCXN0cmluZyA9IE5VTEw7CisKKwljb252ZXJ0ZWQgPSBzdHJpbmdUeXBlRGF0dW1TYWZl KGJhc2VUeXBlLAorCQkJCQkJCQkJc3RyaW5nLAorCQkJCQkJCQkJaW5wdXRUeXBlTW9kLAorCQkJ CQkJCQkJJmRhdHVtKTsKKworCVJlbGVhc2VTeXNDYWNoZShiYXNlVHlwZSk7CisKKwlyZXR1cm4g Y29udmVydGVkOworfQorCisvKgorICogU2VlIHRyYW5zZm9ybUFycmF5RXhwci4KKyovCitzdGF0 aWMgTm9kZSAqCit0cmFuc2Zvcm1BcnJheUV4cHJTYWZlKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQV9B cnJheUV4cHIgKmEsCisJCQkJCSAgIE9pZCBhcnJheV90eXBlLCBPaWQgZWxlbWVudF90eXBlLCBp bnQzMiB0eXBtb2QpCit7CisJQXJyYXlFeHByICAqbmV3YSA9IG1ha2VOb2RlKEFycmF5RXhwcik7 CisJTGlzdAkgICAqbmV3ZWxlbXMgPSBOSUw7CisJTGlzdENlbGwgICAqZWxlbWVudDsKKworCW5l d2EtPm11bHRpZGltcyA9IGZhbHNlOworCWZvcmVhY2goZWxlbWVudCwgYS0+ZWxlbWVudHMpCisJ eworCQlOb2RlCSAgICplID0gKE5vZGUgKikgbGZpcnN0KGVsZW1lbnQpOworCQlOb2RlCSAgICpu ZXdlOworCisJCS8qCisJCSAqIElmIGFuIGVsZW1lbnQgaXMgaXRzZWxmIGFuIEFfQXJyYXlFeHBy LCByZWN1cnNlIGRpcmVjdGx5IHNvIHRoYXQgd2UKKwkJICogY2FuIHBhc3MgZG93biBhbnkgdGFy Z2V0IHR5cGUgd2Ugd2VyZSBnaXZlbi4KKwkJICovCisJCWlmIChJc0EoZSwgQV9BcnJheUV4cHIp KQorCQl7CisJCQluZXdlID0gdHJhbnNmb3JtQXJyYXlFeHByU2FmZShwc3RhdGUsKEFfQXJyYXlF eHByICopIGUsIGFycmF5X3R5cGUsIGVsZW1lbnRfdHlwZSwgdHlwbW9kKTsKKwkJCS8qIHdlIGNl cnRhaW5seSBoYXZlIGFuIGFycmF5IGhlcmUgKi8KKwkJCUFzc2VydChhcnJheV90eXBlID09IElu dmFsaWRPaWQgfHwgYXJyYXlfdHlwZSA9PSBleHByVHlwZShuZXdlKSk7CisJCQluZXdhLT5tdWx0 aWRpbXMgPSB0cnVlOworCQl9CisJCWVsc2UKKwkJeworCQkJbmV3ZSA9IHRyYW5zZm9ybUV4cHJS ZWN1cnNlKHBzdGF0ZSwgZSk7CisKKwkJCWlmICghbmV3YS0+bXVsdGlkaW1zKQorCQkJeworCQkJ CU9pZAkJCW5ld2V0eXBlID0gZXhwclR5cGUobmV3ZSk7CisKKwkJCQlpZiAobmV3ZXR5cGUgIT0g SU5UMlZFQ1RPUk9JRCAmJiBuZXdldHlwZSAhPSBPSURWRUNUT1JPSUQgJiYKKwkJCQkJdHlwZV9p c19hcnJheShuZXdldHlwZSkpCisJCQkJCW5ld2EtPm11bHRpZGltcyA9IHRydWU7CisJCQl9CisJ CX0KKworCQluZXdlbGVtcyA9IGxhcHBlbmQobmV3ZWxlbXMsIG5ld2UpOworCX0KKworCW5ld2Et PmFycmF5X3R5cGVpZCA9IGFycmF5X3R5cGU7CisJLyogYXJyYXlfY29sbGlkIHdpbGwgYmUgc2V0 IGJ5IHBhcnNlX2NvbGxhdGUuYyAqLworCW5ld2EtPmVsZW1lbnRfdHlwZWlkID0gZWxlbWVudF90 eXBlOworCW5ld2EtPmVsZW1lbnRzID0gbmV3ZWxlbXM7CisJbmV3YS0+bGlzdF9zdGFydCA9IGEt Pmxpc3Rfc3RhcnQ7CisJbmV3YS0+bGlzdF9lbmQgPSAtMTsKKwluZXdhLT5sb2NhdGlvbiA9IC0x OworCisJcmV0dXJuIChOb2RlICopIG5ld2E7Cit9CisKIC8qCiAgKiB0cmFuc2Zvcm1BcnJheUV4 cHIKICAqCkBAIC0yMDEzLDcgKzIxMjUsNyBAQCB0cmFuc2Zvcm1TdWJMaW5rKFBhcnNlU3RhdGUg KnBzdGF0ZSwgU3ViTGluayAqc3VibGluaykKICAqLwogc3RhdGljIE5vZGUgKgogdHJhbnNmb3Jt QXJyYXlFeHByKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQV9BcnJheUV4cHIgKmEsCi0JCQkJICAgT2lk IGFycmF5X3R5cGUsIE9pZCBlbGVtZW50X3R5cGUsIGludDMyIHR5cG1vZCkKKwkJCQkgICBPaWQg YXJyYXlfdHlwZSwgT2lkIGVsZW1lbnRfdHlwZSwgaW50MzIgdHlwbW9kLCBib29sICpjYW5fY29l cmNlKQogewogCUFycmF5RXhwciAgKm5ld2EgPSBtYWtlTm9kZShBcnJheUV4cHIpOwogCUxpc3QJ ICAgKm5ld2VsZW1zID0gTklMOwpAQCAtMjA0NCw5ICsyMTU2LDEwIEBAIHRyYW5zZm9ybUFycmF5 RXhwcihQYXJzZVN0YXRlICpwc3RhdGUsIEFfQXJyYXlFeHByICphLAogCQkJCQkJCQkJICAoQV9B cnJheUV4cHIgKikgZSwKIAkJCQkJCQkJCSAgYXJyYXlfdHlwZSwKIAkJCQkJCQkJCSAgZWxlbWVu dF90eXBlLAotCQkJCQkJCQkJICB0eXBtb2QpOworCQkJCQkJCQkJICB0eXBtb2QsCisJCQkJCQkJ CQkgIGNhbl9jb2VyY2UpOwogCQkJLyogd2UgY2VydGFpbmx5IGhhdmUgYW4gYXJyYXkgaGVyZSAq LwotCQkJQXNzZXJ0KGFycmF5X3R5cGUgPT0gSW52YWxpZE9pZCB8fCBhcnJheV90eXBlID09IGV4 cHJUeXBlKG5ld2UpKTsKKwkJCUFzc2VydChjYW5fY29lcmNlIHx8IGFycmF5X3R5cGUgPT0gSW52 YWxpZE9pZCB8fCBhcnJheV90eXBlID09IGV4cHJUeXBlKG5ld2UpKTsKIAkJCW5ld2EtPm11bHRp ZGltcyA9IHRydWU7CiAJCX0KIAkJZWxzZQpAQCAtMjA3Miw2ICsyMTg1LDkgQEAgdHJhbnNmb3Jt QXJyYXlFeHByKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQV9BcnJheUV4cHIgKmEsCiAJCW5ld2VsZW1z ID0gbGFwcGVuZChuZXdlbGVtcywgbmV3ZSk7CiAJfQogCisJaWYgKGNhbl9jb2VyY2UgJiYgISpj YW5fY29lcmNlKQorCQlyZXR1cm4gTlVMTDsKKwogCS8qCiAJICogU2VsZWN0IGEgdGFyZ2V0IHR5 cGUgZm9yIHRoZSBlbGVtZW50cy4KIAkgKgpAQCAtMjEzOSw2ICsyMjU1LDE3IEBAIHRyYW5zZm9y bUFycmF5RXhwcihQYXJzZVN0YXRlICpwc3RhdGUsIEFfQXJyYXlFeHByICphLAogCQlOb2RlCSAg ICplID0gKE5vZGUgKikgbGZpcnN0KGVsZW1lbnQpOwogCQlOb2RlCSAgICpuZXdlOwogCisJCWlm IChjYW5fY29lcmNlICYmICgqY2FuX2NvZXJjZSkgJiYgSXNBKGUsIENvbnN0KSAmJiBleHByVHlw ZShlKSA9PSBVTktOT1dOT0lEKQorCQl7CisJCQlpZiAoIUNvdmVydFVua25vd25Db25zdFNhZmUo cHN0YXRlLCBlLCBjb2VyY2VfdHlwZSwgdHlwbW9kKSkKKwkJCXsKKwkJCQkqY2FuX2NvZXJjZSA9 IGZhbHNlOworCQkJCWxpc3RfZnJlZShuZXdjb2VyY2VkZWxlbXMpOworCQkJCW5ld2NvZXJjZWRl bGVtcyA9IE5JTDsKKwkJCQlyZXR1cm4gTlVMTDsKKwkJCX0KKwkJfQorCiAJCWlmIChjb2VyY2Vf aGFyZCkKIAkJewogCQkJbmV3ZSA9IGNvZXJjZV90b190YXJnZXRfdHlwZShwc3RhdGUsIGUsCkBA IC0yNzQyLDcgKzI4NjksOCBAQCB0cmFuc2Zvcm1UeXBlQ2FzdChQYXJzZVN0YXRlICpwc3RhdGUs IFR5cGVDYXN0ICp0YykKIAkJCQkJCQkJCSAgKEFfQXJyYXlFeHByICopIGFyZywKIAkJCQkJCQkJ CSAgdGFyZ2V0QmFzZVR5cGUsCiAJCQkJCQkJCQkgIGVsZW1lbnRUeXBlLAotCQkJCQkJCQkJICB0 YXJnZXRCYXNlVHlwbW9kKTsKKwkJCQkJCQkJCSAgdGFyZ2V0QmFzZVR5cG1vZCwKKwkJCQkJCQkJ CSAgTlVMTCk7CiAJCX0KIAkJZWxzZQogCQkJZXhwciA9IHRyYW5zZm9ybUV4cHJSZWN1cnNlKHBz dGF0ZSwgYXJnKTsKQEAgLTI3NzksNiArMjkwNywxNjIgQEAgdHJhbnNmb3JtVHlwZUNhc3QoUGFy c2VTdGF0ZSAqcHN0YXRlLCBUeXBlQ2FzdCAqdGMpCiAJcmV0dXJuIHJlc3VsdDsKIH0KIAorCisv KgorICogSGFuZGxlIGFuIGV4cGxpY2l0IENBU1QgY29uc3RydWN0LgorICoKKyAqIFRyYW5zZm9y bSB0aGUgYXJndW1lbnQsIGxvb2sgdXAgdGhlIHR5cGUgbmFtZSwgYW5kIGFwcGx5IGFueSBuZWNl c3NhcnkKKyAqIGNvZXJjaW9uIGZ1bmN0aW9uKHMpLgorICogbXVzdCBkbyB2aWEgY29lcmNlIHZp YSBJTy4KKyAqIFNlZSB0cmFuc2Zvcm1Kc29uRnVuY0V4cHIsIEV4ZWNJbml0SnNvbkV4cHIKKyAq IG1heWJlIHdlIGFsc28gbmVlZCBhIEpzb25FeHByIE5vZGUgcmVwcmVzZW50CisgKi8KK3N0YXRp YyBOb2RlICoKK3RyYW5zZm9ybVR5cGVTYWZlQ2FzdChQYXJzZVN0YXRlICpwc3RhdGUsIFNhZmVU eXBlQ2FzdCAqdGMpCit7CisJU2FmZVR5cGVDYXN0RXhwciAgICpyZXN1bHQ7CisJTm9kZQkgICAq ZGVmX2V4cHI7CisJTm9kZQkgICAqY2FzdF9leHByID0gTlVMTDsKKwlOb2RlCSAgICpzb3VyY2Vf ZXhwciA9IE5VTEw7CisJTm9kZQkgICAqYXJyYXlfZXhwciA9IE5VTEw7CisJT2lkCQkJaW5wdXRU eXBlID0gSW52YWxpZE9pZDsKKwlPaWQJCQl0YXJnZXRUeXBlOworCWludDMyCQl0YXJnZXRUeXBt b2Q7CisJaW50CQkJbG9jYXRpb247CisJVHlwZUNhc3QgICAqdGNhc3QgPSAoVHlwZUNhc3QgKikg dGMtPmNhc3Q7CisJTm9kZQkgICAqdGNfYXJnID0gdGNhc3QtPmFyZzsKKwlib29sCQljYW5fY29l cmNlID0gdHJ1ZTsKKwlpbnQJCQlkZWZfZXhwcl9sb2MgPSAtMTsKKworCXJlc3VsdCA9IG1ha2VO b2RlKFNhZmVUeXBlQ2FzdEV4cHIpOworCisJLyogTG9vayB1cCB0aGUgdHlwZSBuYW1lIGZpcnN0 ICovCisJdHlwZW5hbWVUeXBlSWRBbmRNb2QocHN0YXRlLCB0Y2FzdC0+dHlwZU5hbWUsICZ0YXJn ZXRUeXBlLCAmdGFyZ2V0VHlwbW9kKTsKKworCXJlc3VsdC0+cmVzdWx0dHlwZSA9IHRhcmdldFR5 cGU7CisJcmVzdWx0LT5yZXN1bHR0eXBtb2QgPSB0YXJnZXRUeXBtb2Q7CisKKwkvKiBub3cgbG9v a2luZyBhdCBjYXN0IGZhaWwgZGVmYXVsdCBleHByZXNzaW9uICovCisJZGVmX2V4cHJfbG9jID0g ZXhwckxvY2F0aW9uKHRjLT5leHByKTsKKwlkZWZfZXhwciA9IHRyYW5zZm9ybUV4cHJSZWN1cnNl KHBzdGF0ZSwgdGMtPmV4cHIpOworCisJaWYgKGV4cHJlc3Npb25fcmV0dXJuc19zZXQoZGVmX2V4 cHIpKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCWVycmNvZGUoRVJSQ09ERV9EQVRBVFlQRV9NSVNN QVRDSCksCisJCQkJZXJybXNnKCJERUZBVUxUIGV4cHJlc3Npb24gbXVzdCBub3QgcmV0dXJuIGEg c2V0IiksCisJCQkJcGFyc2VyX2NvZXJjaW9uX2VycnBvc2l0aW9uKHBzdGF0ZSwgZGVmX2V4cHJf bG9jLCBkZWZfZXhwcikpOworCisJaWYgKElzQShkZWZfZXhwciwgQWdncmVmKSB8fCBJc0EoZGVm X2V4cHIsIFdpbmRvd0Z1bmMpKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCWVycmNvZGUoRVJSQ09E RV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAorCQkJCWVycm1zZygiREVGQVVMVCBleHByZXNzaW9u IGZ1bmN0aW9uIG11c3QgYmUgYSBub3JtYWwgZnVuY3Rpb24iKSwKKwkJCQlwYXJzZXJfY29lcmNp b25fZXJycG9zaXRpb24ocHN0YXRlLCBkZWZfZXhwcl9sb2MsIGRlZl9leHByKSk7CisKKwlpZiAo SXNBKGRlZl9leHByLCBGdW5jRXhwcikpCisJeworCQlpZiAoZ2V0X2Z1bmNfcHJva2luZCgoKEZ1 bmNFeHByICopIGRlZl9leHByKS0+ZnVuY2lkKSAhPSBQUk9LSU5EX0ZVTkNUSU9OKQorCQkJZXJl cG9ydChFUlJPUiwKKwkJCQkJZXJyY29kZShFUlJDT0RFX0lOVkFMSURfT0JKRUNUX0RFRklOSVRJ T04pLAorCQkJCQllcnJtc2coIkRFRkFVTFQgZXhwcmVzc2lvbiBmdW5jdGlvbiBtdXN0IGJlIGEg bm9ybWFsIGZ1bmN0aW9uIiksCisJCQkJCXBhcnNlcl9jb2VyY2lvbl9lcnJwb3NpdGlvbihwc3Rh dGUsIGRlZl9leHByX2xvYywgZGVmX2V4cHIpKTsKKwl9CisKKwlkZWZfZXhwciA9IGNvZXJjZV90 b190YXJnZXRfdHlwZShwc3RhdGUsIGRlZl9leHByLCBleHByVHlwZShkZWZfZXhwciksCisJCQkJ CQkJCQkgdGFyZ2V0VHlwZSwgdGFyZ2V0VHlwbW9kLAorCQkJCQkJCQkJIENPRVJDSU9OX0VYUExJ Q0lULAorCQkJCQkJCQkJIENPRVJDRV9FWFBMSUNJVF9DQVNULAorCQkJCQkJCQkJIGV4cHJMb2Nh dGlvbihkZWZfZXhwcikpOworCWlmIChkZWZfZXhwciA9PSBOVUxMKQorCQllcmVwb3J0KEVSUk9S LAorCQkJCWVycmNvZGUoRVJSQ09ERV9DQU5OT1RfQ09FUkNFKSwKKwkJCQllcnJtc2coImNhbm5v dCBjYXN0IG9uX2Vycm9yIGRlZmF1bHQgZXhwcmVzc2lvbiB0byB0eXBlICVzIiwKKwkJCQkJCWZv cm1hdF90eXBlX2JlKHRhcmdldFR5cGUpKSwKKwkJCQlwYXJzZXJfY29lcmNpb25fZXJycG9zaXRp b24ocHN0YXRlLCBkZWZfZXhwcl9sb2MsIGRlZl9leHByKSk7CisKKwkvKgorCSAqIElmIHRoZSBz dWJqZWN0IG9mIHRoZSB0eXBlY2FzdCBpcyBhbiBBUlJBWVtdIGNvbnN0cnVjdCBhbmQgdGhlIHRh cmdldAorCSAqIHR5cGUgaXMgYW4gYXJyYXkgdHlwZSwgd2UgaW52b2tlIHRyYW5zZm9ybUFycmF5 RXhwcigpIGRpcmVjdGx5IHNvIHRoYXQKKwkgKiB3ZSBjYW4gcGFzcyBkb3duIHRoZSB0eXBlIGlu Zm9ybWF0aW9uLiAgVGhpcyBhdm9pZHMgc29tZSBjYXNlcyB3aGVyZQorCSAqIHRyYW5zZm9ybUFy cmF5RXhwcigpIG1pZ2h0IG5vdCBpbmZlciB0aGUgY29ycmVjdCB0eXBlLiAgT3RoZXJ3aXNlLCBq dXN0CisJICogdHJhbnNmb3JtIHRoZSBhcmd1bWVudCBub3JtYWxseS4KKwkgKi8KKwlpZiAoSXNB KHRjX2FyZywgQV9BcnJheUV4cHIpKQorCXsKKwkJT2lkCQkJdGFyZ2V0QmFzZVR5cGU7CisJCWlu dDMyCQl0YXJnZXRCYXNlVHlwbW9kOworCQlPaWQJCQllbGVtZW50VHlwZTsKKworCQkvKgorCQkg KiBJZiB0YXJnZXQgaXMgYSBkb21haW4gb3ZlciBhcnJheSwgd29yayB3aXRoIHRoZSBiYXNlIGFy cmF5IHR5cGUKKwkJICogaGVyZS4gIEJlbG93LCB3ZSdsbCBjYXN0IHRoZSBhcnJheSB0eXBlIHRv IHRoZSBkb21haW4uICBJbiB0aGUKKwkJICogdXN1YWwgY2FzZSB0aGF0IHRoZSB0YXJnZXQgaXMg bm90IGEgZG9tYWluLCB0aGUgcmVtYWluaW5nIHN0ZXBzCisJCSAqIHdpbGwgYmUgYSBuby1vcC4K KwkJICovCisJCXRhcmdldEJhc2VUeXBtb2QgPSB0YXJnZXRUeXBtb2Q7CisJCXRhcmdldEJhc2VU eXBlID0gZ2V0QmFzZVR5cGVBbmRUeXBtb2QodGFyZ2V0VHlwZSwgJnRhcmdldEJhc2VUeXBtb2Qp OworCQllbGVtZW50VHlwZSA9IGdldF9lbGVtZW50X3R5cGUodGFyZ2V0QmFzZVR5cGUpOworCisJ CWlmIChPaWRJc1ZhbGlkKGVsZW1lbnRUeXBlKSkKKwkJeworCQkJYXJyYXlfZXhwciA9IGNvcHlP YmplY3QodGNfYXJnKTsKKworCQkJc291cmNlX2V4cHIgPSB0cmFuc2Zvcm1BcnJheUV4cHIocHN0 YXRlLAorCQkJCQkJCQkJCQkgKEFfQXJyYXlFeHByICopIHRjX2FyZywKKwkJCQkJCQkJCQkJIHRh cmdldEJhc2VUeXBlLAorCQkJCQkJCQkJCQkgZWxlbWVudFR5cGUsCisJCQkJCQkJCQkJCSB0YXJn ZXRCYXNlVHlwbW9kLAorCQkJCQkJCQkJCQkgJmNhbl9jb2VyY2UpOworCQkJaWYgKCFjYW5fY29l cmNlKQorCQkJCXNvdXJjZV9leHByID0gIHRyYW5zZm9ybUFycmF5RXhwclNhZmUocHN0YXRlLAor CQkJCQkJCQkJCQkJCSAgKEFfQXJyYXlFeHByICopIGFycmF5X2V4cHIsCisJCQkJCQkJCQkJCQkJ ICB0YXJnZXRCYXNlVHlwZSwKKwkJCQkJCQkJCQkJCQkgIGVsZW1lbnRUeXBlLAorCQkJCQkJCQkJ CQkJCSAgdGFyZ2V0QmFzZVR5cG1vZCk7CisJCX0KKwkJZWxzZQorCQkJc291cmNlX2V4cHIgPSB0 cmFuc2Zvcm1FeHByUmVjdXJzZShwc3RhdGUsIHRjX2FyZyk7CisJfQorCWVsc2UKKwkJc291cmNl X2V4cHIgPSB0cmFuc2Zvcm1FeHByUmVjdXJzZShwc3RhdGUsIHRjX2FyZyk7CisKKwlpbnB1dFR5 cGUgPSBleHByVHlwZShzb3VyY2VfZXhwcik7CisKKwlpZiAoaW5wdXRUeXBlID09IEludmFsaWRP aWQgJiYgY2FuX2NvZXJjZSkKKwkJcmV0dXJuIChOb2RlICopIHJlc3VsdDsJCQkvKiBkbyBub3Ro aW5nIGlmIE5VTEwgaW5wdXQgKi8KKworCWlmIChjYW5fY29lcmNlICYmIElzQShzb3VyY2VfZXhw ciwgQ29uc3QpICYmIGV4cHJUeXBlKHNvdXJjZV9leHByKSA9PSBVTktOT1dOT0lEKQorCXsKKwkJ Y2FuX2NvZXJjZSA9IENvdmVydFVua25vd25Db25zdFNhZmUocHN0YXRlLAorCQkJCQkJCQkJCQlz b3VyY2VfZXhwciwKKwkJCQkJCQkJCQkJdGFyZ2V0VHlwZSwKKwkJCQkJCQkJCQkJdGFyZ2V0VHlw bW9kKTsKKwl9CisKKwkvKgorCSAqIExvY2F0aW9uIG9mIHRoZSBjb2VyY2lvbiBpcyBwcmVmZXJl bnRpYWxseSB0aGUgbG9jYXRpb24gb2YgdGhlIDo6IG9yCisJICogQ0FTVCBzeW1ib2wsIGJ1dCBp ZiB0aGVyZSBpcyBub25lIHRoZW4gdXNlIHRoZSBsb2NhdGlvbiBvZiB0aGUgdHlwZQorCSAqIG5h bWUgKHRoaXMgY2FuIGhhcHBlbiBpbiBUeXBlTmFtZSAnc3RyaW5nJyBzeW50YXgsIGZvciBpbnN0 YW5jZSkuCisJICovCisJbG9jYXRpb24gPSB0Y2FzdC0+bG9jYXRpb247CisJaWYgKGxvY2F0aW9u IDwgMCkKKwkJbG9jYXRpb24gPSB0Y2FzdC0+dHlwZU5hbWUtPmxvY2F0aW9uOworCisJaWYgKGNh bl9jb2VyY2UpCisJeworCQljYXN0X2V4cHIgPSBjb2VyY2VfdG9fdGFyZ2V0X3R5cGUocHN0YXRl LCBzb3VyY2VfZXhwciwgaW5wdXRUeXBlLAorCQkJCQkJCQkJCSAgdGFyZ2V0VHlwZSwgdGFyZ2V0 VHlwbW9kLAorCQkJCQkJCQkJCSAgQ09FUkNJT05fRVhQTElDSVQsCisJCQkJCQkJCQkJICBDT0VS Q0VfRVhQTElDSVRfQ0FTVCwKKwkJCQkJCQkJCQkgIGxvY2F0aW9uKTsKKwl9CisKKwlyZXN1bHQt PnNvdXJjZV9leHByID0gc291cmNlX2V4cHI7CisJcmVzdWx0LT5jYXN0X2V4cHIgPSBjYXN0X2V4 cHI7CisJcmVzdWx0LT5kZWZhdWx0X2V4cHIgPSBkZWZfZXhwcjsKKworCXJldHVybiAoTm9kZSAq KSByZXN1bHQ7Cit9CisKIC8qCiAgKiBIYW5kbGUgYW4gZXhwbGljaXQgQ09MTEFURSBjbGF1c2Uu CiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX3RhcmdldC5jIGIvc3Jj L2JhY2tlbmQvcGFyc2VyL3BhcnNlX3RhcmdldC5jCmluZGV4IDRhYmEwZDlkNGQ1Li44MTJlZDE4 YzE2MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX3RhcmdldC5jCisrKyBi L3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV90YXJnZXQuYwpAQCAtMTgyMyw2ICsxODIzLDIwIEBA IEZpZ3VyZUNvbG5hbWVJbnRlcm5hbChOb2RlICpub2RlLCBjaGFyICoqbmFtZSkKIAkJCQl9CiAJ CQl9CiAJCQlicmVhazsKKwkJY2FzZSBUX1NhZmVUeXBlQ2FzdDoKKwkJCXN0cmVuZ3RoID0gRmln dXJlQ29sbmFtZUludGVybmFsKCgoU2FmZVR5cGVDYXN0ICopIG5vZGUpLT5jYXN0LAorCQkJCQkJ CQkJCQkgbmFtZSk7CisJCQlpZiAoc3RyZW5ndGggPD0gMSkKKwkJCXsKKwkJCQlUeXBlQ2FzdCAq bm9kZV9jYXN0OworCQkJCW5vZGVfY2FzdCA9IChUeXBlQ2FzdCAqKSgoU2FmZVR5cGVDYXN0ICop IG5vZGUpLT5jYXN0OworCQkJCWlmIChub2RlX2Nhc3QtPnR5cGVOYW1lICE9IE5VTEwpCisJCQkJ eworCQkJCQkqbmFtZSA9IHN0clZhbChsbGFzdChub2RlX2Nhc3QtPnR5cGVOYW1lLT5uYW1lcykp OworCQkJCQlyZXR1cm4gMTsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKIAkJY2FzZSBUX0NvbGxh dGVDbGF1c2U6CiAJCQlyZXR1cm4gRmlndXJlQ29sbmFtZUludGVybmFsKCgoQ29sbGF0ZUNsYXVz ZSAqKSBub2RlKS0+YXJnLCBuYW1lKTsKIAkJY2FzZSBUX0dyb3VwaW5nRnVuYzoKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV90eXBlLmMgYi9zcmMvYmFja2VuZC9wYXJzZXIv cGFyc2VfdHlwZS5jCmluZGV4IDc3MTNiZGM2YWYwLi4wMmU1ZjljOTJkNyAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX3R5cGUuYworKysgYi9zcmMvYmFja2VuZC9wYXJzZXIv cGFyc2VfdHlwZS5jCkBAIC0xOSw2ICsxOSw3IEBACiAjaW5jbHVkZSAiY2F0YWxvZy9wZ190eXBl LmgiCiAjaW5jbHVkZSAibGliL3N0cmluZ2luZm8uaCIKICNpbmNsdWRlICJub2Rlcy9tYWtlZnVu Y3MuaCIKKyNpbmNsdWRlICJub2Rlcy9taXNjbm9kZXMuaCIKICNpbmNsdWRlICJwYXJzZXIvcGFy c2VfdHlwZS5oIgogI2luY2x1ZGUgInBhcnNlci9wYXJzZXIuaCIKICNpbmNsdWRlICJ1dGlscy9h cnJheS5oIgpAQCAtNjYwLDYgKzY2MSwxOCBAQCBzdHJpbmdUeXBlRGF0dW0oVHlwZSB0cCwgY2hh ciAqc3RyaW5nLCBpbnQzMiBhdHR0eXBtb2QpCiAJcmV0dXJuIE9pZElucHV0RnVuY3Rpb25DYWxs KHR5cGlucHV0LCBzdHJpbmcsIHR5cGlvcGFyYW0sIGF0dHR5cG1vZCk7CiB9CiAKK2Jvb2wKK3N0 cmluZ1R5cGVEYXR1bVNhZmUoVHlwZSB0cCwgY2hhciAqc3RyaW5nLCBpbnQzMiBhdHR0eXBtb2Qs IERhdHVtICpyZXN1bHQpCit7CisJRm9ybV9wZ190eXBlIHR5cGZvcm0gPSAoRm9ybV9wZ190eXBl KSBHRVRTVFJVQ1QodHApOworCU9pZAkJCXR5cGlucHV0ID0gdHlwZm9ybS0+dHlwaW5wdXQ7CisJ T2lkCQkJdHlwaW9wYXJhbSA9IGdldFR5cGVJT1BhcmFtKHRwKTsKKwlFcnJvclNhdmVDb250ZXh0 IGVzY29udGV4dCA9IHtUX0Vycm9yU2F2ZUNvbnRleHR9OworCisJcmV0dXJuIE9pZElucHV0RnVu Y3Rpb25DYWxsU2FmZSh0eXBpbnB1dCwgc3RyaW5nLCB0eXBpb3BhcmFtLCBhdHR0eXBtb2QsCisJ CQkJCQkJCQkoZm1Ob2RlUHRyKSAmZXNjb250ZXh0LCByZXN1bHQpOworfQorCiAvKgogICogR2l2 ZW4gYSB0eXBlaWQsIHJldHVybiB0aGUgdHlwZSdzIHR5cHJlbGlkIChhc3NvY2lhdGVkIHJlbGF0 aW9uKSwgaWYgYW55LgogICogUmV0dXJucyBJbnZhbGlkT2lkIGlmIHR5cGUgaXMgbm90IGEgY29t cG9zaXRlIHR5cGUuCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvYXJyYXlmdW5j cy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2FycmF5ZnVuY3MuYwppbmRleCBiNWY5OGJmMjJm OS4uNmJkOGE5ODlkYmQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9hcnJheWZ1 bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2FycmF5ZnVuY3MuYwpAQCAtMzI5NSw2 ICszMjk1LDEyIEBAIGFycmF5X21hcChEYXR1bSBhcnJheWQsCiAJCQlyZXR1cm4gKERhdHVtKSAw OwogCQl9CiAKKwkJaWYgKFNPRlRfRVJST1JfT0NDVVJSRUQoZXhwcnN0YXRlLT5lc2NvbnRleHQp KQorCQl7CisJCQlwZnJlZSh2YWx1ZXMpOworCQkJcGZyZWUobnVsbHMpOworCQkJcmV0dXJuIChE YXR1bSkgMDsKKwkJfQogCQlpZiAobnVsbHNbaV0pCiAJCQloYXNudWxscyA9IHRydWU7CiAJCWVs c2UKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYyBiL3NyYy9i YWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYwppbmRleCAzZDZlNmJkYmZkMi4uZWU4NjhkZTJj NjQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYworKysgYi9z cmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMKQEAgLTEwNTM0LDYgKzEwNTM0LDIxIEBA IGdldF9ydWxlX2V4cHIoTm9kZSAqbm9kZSwgZGVwYXJzZV9jb250ZXh0ICpjb250ZXh0LAogCQkJ fQogCQkJYnJlYWs7CiAKKwkJY2FzZSBUX1NhZmVUeXBlQ2FzdEV4cHI6CisJCQl7CisJCQkJU2Fm ZVR5cGVDYXN0RXhwciAgICpzdGNleHByID0gY2FzdE5vZGUoU2FmZVR5cGVDYXN0RXhwciwgbm9k ZSk7CisKKwkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgIkNBU1QoIik7CisJCQkJZ2V0 X3J1bGVfZXhwcihzdGNleHByLT5zb3VyY2VfZXhwciwgY29udGV4dCwgc2hvd2ltcGxpY2l0KTsK KworCQkJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiIEFTICVzICIsCisJCQkJCQkJCSBmb3JtYXRf dHlwZV93aXRoX3R5cGVtb2Qoc3RjZXhwci0+cmVzdWx0dHlwZSwgc3RjZXhwci0+cmVzdWx0dHlw bW9kKSk7CisKKwkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgIkRFRkFVTFQgIik7CisJ CQkJZ2V0X3J1bGVfZXhwcihzdGNleHByLT5kZWZhdWx0X2V4cHIsIGNvbnRleHQsIHNob3dpbXBs aWNpdCk7CisJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsICIgT04gQ09OVkVSU0lPTiBF UlJPUikiKTsKKwkJCX0KKwkJCWJyZWFrOwogCQljYXNlIFRfSnNvbkV4cHI6CiAJCQl7CiAJCQkJ SnNvbkV4cHIgICAqamV4cHIgPSAoSnNvbkV4cHIgKikgbm9kZTsKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL3V0aWxzL2ZtZ3IvZm1nci5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvZm1nci9mbWdyLmMK aW5kZXggNzgyMjkxZDk5OTguLjlkZTg5NWU2ODJmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91 dGlscy9mbWdyL2ZtZ3IuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9mbWdyL2ZtZ3IuYwpAQCAt MTc1OSw2ICsxNzU5LDE5IEBAIE9pZElucHV0RnVuY3Rpb25DYWxsKE9pZCBmdW5jdGlvbklkLCBj aGFyICpzdHIsIE9pZCB0eXBpb3BhcmFtLCBpbnQzMiB0eXBtb2QpCiAJcmV0dXJuIElucHV0RnVu Y3Rpb25DYWxsKCZmbGluZm8sIHN0ciwgdHlwaW9wYXJhbSwgdHlwbW9kKTsKIH0KIAorYm9vbAor T2lkSW5wdXRGdW5jdGlvbkNhbGxTYWZlKE9pZCBmdW5jdGlvbklkLCBjaGFyICpzdHIsIE9pZCB0 eXBpb3BhcmFtLAorCQkJCQkJIGludDMyIHR5cG1vZCwgZm1Ob2RlUHRyIGVzY29udGV4dCwKKwkJ CQkJCSBEYXR1bSAqcmVzdWx0KQoreworCUZtZ3JJbmZvCQkJZmxpbmZvOworCisJZm1ncl9pbmZv KGZ1bmN0aW9uSWQsICZmbGluZm8pOworCisJcmV0dXJuIElucHV0RnVuY3Rpb25DYWxsU2FmZSgm ZmxpbmZvLCBzdHIsIHR5cGlvcGFyYW0sIHR5cG1vZCwKKwkJCQkJCQkJIGVzY29udGV4dCwgcmVz dWx0KTsKK30KKwogY2hhciAqCiBPaWRPdXRwdXRGdW5jdGlvbkNhbGwoT2lkIGZ1bmN0aW9uSWQs IERhdHVtIHZhbCkKIHsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNFeHBy LmggYi9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjRXhwci5oCmluZGV4IDc1MzY2MjAzNzA2Li4w YWZjZjA5YzA4NiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY0V4cHIuaAor KysgYi9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjRXhwci5oCkBAIC0yNjUsNiArMjY1LDcgQEAg dHlwZWRlZiBlbnVtIEV4cHJFdmFsT3AKIAlFRU9QX1hNTEVYUFIsCiAJRUVPUF9KU09OX0NPTlNU UlVDVE9SLAogCUVFT1BfSVNfSlNPTiwKKwlFRU9QX1NBRkVUWVBFX0NBU1QsCiAJRUVPUF9KU09O RVhQUl9QQVRILAogCUVFT1BfSlNPTkVYUFJfQ09FUkNJT04sCiAJRUVPUF9KU09ORVhQUl9DT0VS Q0lPTl9GSU5JU0gsCkBAIC03NTAsNiArNzUxLDEyIEBAIHR5cGVkZWYgc3RydWN0IEV4cHJFdmFs U3RlcAogCQkJSnNvbklzUHJlZGljYXRlICpwcmVkOwkvKiBvcmlnaW5hbCBleHByZXNzaW9uIG5v ZGUgKi8KIAkJfQkJCWlzX2pzb247CiAKKwkJLyogZm9yIEVFT1BfU0FGRUNBU1QgKi8KKwkJc3Ry dWN0CisJCXsKKwkJCXN0cnVjdCBTYWZlVHlwZUNhc3RTdGF0ZSAqc3Rjc3RhdGU7CS8qIG9yaWdp bmFsIGV4cHJlc3Npb24gbm9kZSAqLworCQl9CQkJc3RjZXhwcjsKKwogCQkvKiBmb3IgRUVPUF9K U09ORVhQUl9QQVRIICovCiAJCXN0cnVjdAogCQl7CkBAIC04OTIsNiArODk5LDcgQEAgZXh0ZXJu IGludAlFeGVjRXZhbEpzb25FeHByUGF0aChFeHByU3RhdGUgKnN0YXRlLCBFeHByRXZhbFN0ZXAg Km9wLAogCQkJCQkJCQkgRXhwckNvbnRleHQgKmVjb250ZXh0KTsKIGV4dGVybiB2b2lkIEV4ZWNF dmFsSnNvbkNvZXJjaW9uKEV4cHJTdGF0ZSAqc3RhdGUsIEV4cHJFdmFsU3RlcCAqb3AsCiAJCQkJ CQkJCSBFeHByQ29udGV4dCAqZWNvbnRleHQpOworaW50IEV4ZWNFdmFsU2FmZVR5cGVDYXN0KEV4 cHJTdGF0ZSAqc3RhdGUsIEV4cHJFdmFsU3RlcCAqb3ApOwogZXh0ZXJuIHZvaWQgRXhlY0V2YWxK c29uQ29lcmNpb25GaW5pc2goRXhwclN0YXRlICpzdGF0ZSwgRXhwckV2YWxTdGVwICpvcCk7CiBl eHRlcm4gdm9pZCBFeGVjRXZhbEdyb3VwaW5nRnVuYyhFeHByU3RhdGUgKnN0YXRlLCBFeHByRXZh bFN0ZXAgKm9wKTsKIGV4dGVybiB2b2lkIEV4ZWNFdmFsTWVyZ2VTdXBwb3J0RnVuYyhFeHByU3Rh dGUgKnN0YXRlLCBFeHByRXZhbFN0ZXAgKm9wLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvZm1n ci5oIGIvc3JjL2luY2x1ZGUvZm1nci5oCmluZGV4IDBmZTdiNGViYzc3Li4yOTlkNGVlZjRlZCAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvZm1nci5oCisrKyBiL3NyYy9pbmNsdWRlL2ZtZ3IuaApA QCAtNzUwLDYgKzc1MCw5IEBAIGV4dGVybiBib29sIERpcmVjdElucHV0RnVuY3Rpb25DYWxsU2Fm ZShQR0Z1bmN0aW9uIGZ1bmMsIGNoYXIgKnN0ciwKIAkJCQkJCQkJCQlEYXR1bSAqcmVzdWx0KTsK IGV4dGVybiBEYXR1bSBPaWRJbnB1dEZ1bmN0aW9uQ2FsbChPaWQgZnVuY3Rpb25JZCwgY2hhciAq c3RyLAogCQkJCQkJCQkgIE9pZCB0eXBpb3BhcmFtLCBpbnQzMiB0eXBtb2QpOworZXh0ZXJuIGJv b2wgT2lkSW5wdXRGdW5jdGlvbkNhbGxTYWZlKE9pZCBmdW5jdGlvbklkLCBjaGFyICpzdHIsIE9p ZCB0eXBpb3BhcmFtLAorCQkJCQkJCQkJIGludDMyIHR5cG1vZCwgZm1Ob2RlUHRyIGVzY29udGV4 dCwKKwkJCQkJCQkJCSBEYXR1bSAqcmVzdWx0KTsKIGV4dGVybiBjaGFyICpPdXRwdXRGdW5jdGlv bkNhbGwoRm1nckluZm8gKmZsaW5mbywgRGF0dW0gdmFsKTsKIGV4dGVybiBjaGFyICpPaWRPdXRw dXRGdW5jdGlvbkNhbGwoT2lkIGZ1bmN0aW9uSWQsIERhdHVtIHZhbCk7CiBleHRlcm4gRGF0dW0g UmVjZWl2ZUZ1bmN0aW9uQ2FsbChGbWdySW5mbyAqZmxpbmZvLCBmbVN0cmluZ0luZm8gYnVmLApk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmggYi9zcmMvaW5jbHVkZS9u b2Rlcy9leGVjbm9kZXMuaAppbmRleCBlMTA3ZDZlNWY4MS4uZmQyNmUxYzk4YjYgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVz L2V4ZWNub2Rlcy5oCkBAIC0xMDU4LDYgKzEwNTgsMjMgQEAgdHlwZWRlZiBzdHJ1Y3QgRG9tYWlu Q29uc3RyYWludFN0YXRlCiAJRXhwclN0YXRlICAqY2hlY2tfZXhwcnN0YXRlOwkvKiBjaGVja19l eHByJ3MgZXZhbCBzdGF0ZSwgb3IgTlVMTCAqLwogfSBEb21haW5Db25zdHJhaW50U3RhdGU7CiAK K3R5cGVkZWYgc3RydWN0IFNhZmVUeXBlQ2FzdFN0YXRlCit7CisJTm9kZVRhZwkJdHlwZTsKKwor CVNhZmVUeXBlQ2FzdEV4cHIgKnN0Y2V4cHI7CisKKwkvKiBTZXQgdG8gdHJ1ZSBpZiBzb3VyY2Vf ZXhwciBldmFsdWF0aW9uIGNhdXNlIGFuIGVycm9yLiAgKi8KKwlOdWxsYWJsZURhdHVtIGVycm9y OworCisJaW50IAkJanVtcF9lcnJvcjsKKworCWludCAJCWp1bXBfZW5kOworCisJRXJyb3JTYXZl Q29udGV4dCBlc2NvbnRleHQ7CisKK30gU2FmZVR5cGVDYXN0U3RhdGU7CisKIC8qCiAgKiBTdGF0 ZSBmb3IgSnNvbkV4cHIgZXZhbHVhdGlvbiwgdG9vIGJpZyB0byBpbmxpbmUuCiAgKgpkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMv cGFyc2Vub2Rlcy5oCmluZGV4IDg2YTIzNmJkNThiLi45NTE3NGUwZmVlZiAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL3Bh cnNlbm9kZXMuaApAQCAtMzk5LDYgKzM5OSwxMiBAQCB0eXBlZGVmIHN0cnVjdCBUeXBlQ2FzdAog CVBhcnNlTG9jCWxvY2F0aW9uOwkJLyogdG9rZW4gbG9jYXRpb24sIG9yIC0xIGlmIHVua25vd24g Ki8KIH0gVHlwZUNhc3Q7CiAKK3R5cGVkZWYgc3RydWN0IFNhZmVUeXBlQ2FzdAoreworCU5vZGVU YWcJCXR5cGU7CisJTm9kZQkJKmNhc3Q7CisJTm9kZQkgICAJKmV4cHI7CQkvKiBkZWZhdWx0IGV4 cHIgKi8KK30gU2FmZVR5cGVDYXN0OwogLyoKICAqIENvbGxhdGVDbGF1c2UgLSBhIENPTExBVEUg ZXhwcmVzc2lvbgogICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wcmltbm9kZXMu aCBiL3NyYy9pbmNsdWRlL25vZGVzL3ByaW1ub2Rlcy5oCmluZGV4IDZkZmNhM2NiMzViLi5jNjZj OWFhZjU1NiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcHJpbW5vZGVzLmgKKysrIGIv c3JjL2luY2x1ZGUvbm9kZXMvcHJpbW5vZGVzLmgKQEAgLTc1Niw2ICs3NTYsMzkgQEAgdHlwZWRl ZiBlbnVtIENvZXJjaW9uRm9ybQogCUNPRVJDRV9TUUxfU1lOVEFYLAkJCS8qIGRpc3BsYXkgd2l0 aCBTUUwtbWFuZGF0ZWQgc3BlY2lhbCBzeW50YXggKi8KIH0gQ29lcmNpb25Gb3JtOwogCisvKgor ICogU2FmZVR5cGVDYXN0RXhwciAtCisgKgkJVHJhbnNmb3JtZWQgcmVwcmVzZW50YXRpb24gb2YK KyAqIENBU1QoZXhwciBBUyB0eXBlbmFtZSBERUZBVUxUIGV4cHIyIE9OIEVSUk9SKQorICogQ0FT VChleHByIEFTIHR5cGVuYW1lIE5VTEwgT04gRVJST1IpCisgKi8KK3R5cGVkZWYgc3RydWN0IFNh ZmVUeXBlQ2FzdEV4cHIKK3sKKwlwZ19ub2RlX2F0dHIoY3VzdG9tX3F1ZXJ5X2p1bWJsZSkKKwor CUV4cHIJCXhwcjsKKworCS8qIHRyYW5zZm9ybWVkIGV4cHJlc3Npb24gYmVpbmcgY2FzdGVkICov CisJTm9kZQkgICAqc291cmNlX2V4cHI7CisKKwkvKiB0cmFuc2Zvcm1lZCBjYXN0IGV4cHJlc3Np b24sIGl0IG1heWJlIE5VTEwhICovCisJTm9kZQkgICAqY2FzdF9leHByOworCisJLyogaW4gY2Fz ZSBjYXN0IGV4cHJlc3Npb24gZXZhdWxhdGlvbiBmYWlsZWQsIGZhbGxiYWNrIGRlZmF1bHQgZXhw cmVzc2lvbiAqLworCU5vZGUJICAgKmRlZmF1bHRfZXhwcjsKKworCS8qIGNhc3QgcmVzdWx0IGRh dGEgdHlwZSAqLworCU9pZAkJCXJlc3VsdHR5cGUgcGdfbm9kZV9hdHRyKHF1ZXJ5X2p1bWJsZV9p Z25vcmUpOworCisJLyogY2FzdCByZXN1bHQgZGF0YSB0eXBlIHR5cG1vZCAodXN1YWxseSAtMSkg Ki8KKwlpbnQzMgkJcmVzdWx0dHlwbW9kIHBnX25vZGVfYXR0cihxdWVyeV9qdW1ibGVfaWdub3Jl KTsKKworCS8qIGNhc3QgcmVzdWx0IGRhdGEgdHlwZSBjb2xsYXRpb24gKHVzdWFsbHkgLTEpICov CisJT2lkCQkJcmVzdWx0Y29sbGlkIHBnX25vZGVfYXR0cihxdWVyeV9qdW1ibGVfaWdub3JlKTsK KworCit9IFNhZmVUeXBlQ2FzdEV4cHI7CisKIC8qCiAgKiBGdW5jRXhwciAtIGV4cHJlc3Npb24g bm9kZSBmb3IgYSBmdW5jdGlvbiBjYWxsCiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcGFy c2VyL3BhcnNlX3R5cGUuaCBiL3NyYy9pbmNsdWRlL3BhcnNlci9wYXJzZV90eXBlLmgKaW5kZXgg MGQ5MTlkOGJmYTIuLjEyMzgxYWVkNjRjIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9wYXJzZXIv cGFyc2VfdHlwZS5oCisrKyBiL3NyYy9pbmNsdWRlL3BhcnNlci9wYXJzZV90eXBlLmgKQEAgLTQ3 LDYgKzQ3LDggQEAgZXh0ZXJuIGNoYXIgKnR5cGVUeXBlTmFtZShUeXBlIHQpOwogZXh0ZXJuIE9p ZAl0eXBlVHlwZVJlbGlkKFR5cGUgdHlwKTsKIGV4dGVybiBPaWQJdHlwZVR5cGVDb2xsYXRpb24o VHlwZSB0eXApOwogZXh0ZXJuIERhdHVtIHN0cmluZ1R5cGVEYXR1bShUeXBlIHRwLCBjaGFyICpz dHJpbmcsIGludDMyIGF0dHR5cG1vZCk7CitleHRlcm4gYm9vbCBzdHJpbmdUeXBlRGF0dW1TYWZl KFR5cGUgdHAsIGNoYXIgKnN0cmluZywgaW50MzIgYXR0dHlwbW9kLAorCQkJCQkJCQlEYXR1bSAq cmVzdWx0KTsKIAogZXh0ZXJuIE9pZAl0eXBlaWRUeXBlUmVsaWQoT2lkIHR5cGVfaWQpOwogZXh0 ZXJuIE9pZAl0eXBlT3JEb21haW5UeXBlUmVsaWQoT2lkIHR5cGVfaWQpOwpkaWZmIC0tZ2l0IGEv c3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9taXNjLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvbWlzYy5vdXQKaW5kZXggNmU4MTZjNTdmMWYuLjUxNWU3NjFkZGNmIDEwMDY0NAotLS0g YS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL21pc2Mub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jl c3MvZXhwZWN0ZWQvbWlzYy5vdXQKQEAgLTM5NiwzICszOTYsMTU0IEBAIFNFTEVDVCAqLCAoZXF1 aXBtZW50KENBU1QoKGguKikgQVMgaG9iYmllc19yKSkpLm5hbWUgRlJPTSBob2JiaWVzX3IgaDsK IC0tCiAtLSByZXdyaXRlIHJ1bGVzCiAtLQorLS0gQ0FTVCBERUZBVUxUIE9OIENPTlZFUlNJT04g RVJST1IKK1ZBTFVFUyAoQ0FTVCgnZXJyb3InIEFTIGludGVnZXIgRVJST1IgT04gQ09OVkVSU0lP TiBFUlJPUikpOyAtLWVycm9yCitFUlJPUjogIGludmFsaWQgaW5wdXQgc3ludGF4IGZvciB0eXBl IGludGVnZXI6ICJlcnJvciIKK0xJTkUgMTogVkFMVUVTIChDQVNUKCdlcnJvcicgQVMgaW50ZWdl ciBFUlJPUiBPTiBDT05WRVJTSU9OIEVSUk9SKSk7CisgICAgICAgICAgICAgICAgICAgICBeCitW QUxVRVMgKENBU1QoJ2Vycm9yJyBBUyBpbnRlZ2VyIE5VTEwgT04gQ09OVkVSU0lPTiBFUlJPUikp OworIGNvbHVtbjEgCistLS0tLS0tLS0KKyAgICAgICAgCisoMSByb3cpCisKK1ZBTFVFUyAoQ0FT VCgnZXJyb3InIEFTIGludGVnZXIgREVGQVVMVCA0MiBPTiBDT05WRVJTSU9OIEVSUk9SKSk7Cisg Y29sdW1uMSAKKy0tLS0tLS0tLQorICAgICAgNDIKKygxIHJvdykKKworU0VMRUNUIENBU1QoMSBB UyBkYXRlIERFRkFVTFQgTlVMTCBPTiBDT05WRVJTSU9OIEVSUk9SKTsKKyBkYXRlIAorLS0tLS0t CisgCisoMSByb3cpCisKK0NSRUFURSBPUiBSRVBMQUNFIEZVTkNUSU9OIHJldF9pbnQ4KCkgUkVU VVJOUyBiaWdpbnQgQVMKKyQkCitCRUdJTiBSRVRVUk4gMjE0NzQ4MzY0ODsgRU5EOworJCQKK0xB TkdVQUdFIHBscGdzcWwgSU1NVVRBQkxFOworU0VMRUNUIENBU1QoJ2EnIGFzIGludCBERUZBVUxU IHJldF9pbnQ4KCkgT04gQ09OVkVSU0lPTiBFUlJPUik7IC0tZXJyb3IKK0VSUk9SOiAgaW50ZWdl ciBvdXQgb2YgcmFuZ2UKK1NFTEVDVCBDQVNUKCdhJyBhcyBkYXRlIERFRkFVTFQgcmV0X2ludDgo KSBPTiBDT05WRVJTSU9OIEVSUk9SKTsgLS1lcnJvcgorRVJST1I6ICBjYW5ub3QgY2FzdCBvbl9l cnJvciBkZWZhdWx0IGV4cHJlc3Npb24gdG8gdHlwZSBkYXRlCitMSU5FIDE6IFNFTEVDVCBDQVNU KCdhJyBhcyBkYXRlIERFRkFVTFQgcmV0X2ludDgoKSBPTiBDT05WRVJTSU9OIEVSUi4uLgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KKy0tIHRlc3QgdmFsaWQgREVG QVVMVCBleHByZXNzaW9uIGZvciBDQVNUID0gT04gQ09OVkVSU0lPTiBFUlJPUgorQ1JFQVRFIE9S IFJFUExBQ0UgRlVOQ1RJT04gcmV0X3NldGludCgpIFJFVFVSTlMgU0VUT0YgaW50ZWdlciBBUwor JCQKK0JFR0lOIFJFVFVSTiBRVUVSWSBFWEVDVVRFICdzZWxlY3QgMSB1bmlvbiBhbGwgc2VsZWN0 IDEnOyBFTkQ7CiskJAorTEFOR1VBR0UgcGxwZ3NxbCBJTU1VVEFCTEU7CitTRUxFQ1QgQ0FTVCgn YScgYXMgaW50IERFRkFVTFQgcmV0X3NldGludCgpIE9OIENPTlZFUlNJT04gRVJST1IpIEZST00g aG9iYmllc19yOyAtLWVycm9yCitFUlJPUjogIERFRkFVTFQgZXhwcmVzc2lvbiBtdXN0IG5vdCBy ZXR1cm4gYSBzZXQKK0xJTkUgMTogU0VMRUNUIENBU1QoJ2EnIGFzIGludCBERUZBVUxUIHJldF9z ZXRpbnQoKSBPTiBDT05WRVJTSU9OIEVSLi4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBeCitTRUxFQ1QgQ0FTVCgnYScgYXMgaW50IERFRkFVTFQgc3VtKDEpIE9OIENP TlZFUlNJT04gRVJST1IpOyAtLWVycm9yCitFUlJPUjogIERFRkFVTFQgZXhwcmVzc2lvbiBmdW5j dGlvbiBtdXN0IGJlIGEgbm9ybWFsIGZ1bmN0aW9uCitMSU5FIDE6IFNFTEVDVCBDQVNUKCdhJyBh cyBpbnQgREVGQVVMVCBzdW0oMSkgT04gQ09OVkVSU0lPTiBFUlJPUik7CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBeCitTRUxFQ1QgQ0FTVCgnYScgYXMgaW50IERFRkFV TFQgc3VtKDEpIG92ZXIoKSBPTiBDT05WRVJTSU9OIEVSUk9SKTsgLS1lcnJvcgorRVJST1I6ICBE RUZBVUxUIGV4cHJlc3Npb24gZnVuY3Rpb24gbXVzdCBiZSBhIG5vcm1hbCBmdW5jdGlvbgorTElO RSAxOiBTRUxFQ1QgQ0FTVCgnYScgYXMgaW50IERFRkFVTFQgc3VtKDEpIG92ZXIoKSBPTiBDT05W RVJTSU9OIEUuLi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KK1NF TEVDVCBDQVNUKCdhJyBhcyBpbnQgREVGQVVMVCAnYicgT04gQ09OVkVSU0lPTiBFUlJPUik7IC0t ZXJyb3IKK0VSUk9SOiAgaW52YWxpZCBpbnB1dCBzeW50YXggZm9yIHR5cGUgaW50ZWdlcjogImIi CitMSU5FIDE6IFNFTEVDVCBDQVNUKCdhJyBhcyBpbnQgREVGQVVMVCAnYicgT04gQ09OVkVSU0lP TiBFUlJPUik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCistLSB0 ZXN0IGFycmF5IGNvZXJjZQorU0VMRUNUIENBU1QoJ3sxMjMsYWJjLDQ1Nn0nIEFTIGludGVnZXJb XSBERUZBVUxUICd7LTc4OX0nIE9OIENPTlZFUlNJT04gRVJST1IpOworICBpbnQ0ICAKKy0tLS0t LS0tCisgey03ODl9CisoMSByb3cpCisKK1NFTEVDVCBDQVNUKCd7MjM0LGRlZiw1Njd9Jzo6dGV4 dFtdIEFTIGludGVnZXJbXSBERUZBVUxUICd7LTEwMTF9JyBPTiBDT05WRVJTSU9OIEVSUk9SKTsK KyAgaW50NCAgIAorLS0tLS0tLS0tCisgey0xMDExfQorKDEgcm93KQorCitTRUxFQ1QgQ0FTVChB UlJBWVtbJzEnXSwgWyd0aHJlZSddLFsnYSddXSBBUyBJTlRFR0VSW10gREVGQVVMVCAnezEsMn0n IE9OIENPTlZFUlNJT04gRVJST1IpOworIGFycmF5IAorLS0tLS0tLQorIHsxLDJ9CisoMSByb3cp CisKK1NFTEVDVCBDQVNUKEFSUkFZW1snMScsICcyJ10sIFsndGhyZWUnLCAnYSddXSBBUyB0ZXh0 W10gREVGQVVMVCAnezIxLDIyfScgT04gQ09OVkVSU0lPTiBFUlJPUik7CisgICAgICAgYXJyYXkg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tCisge3sxLDJ9LHt0aHJlZSxhfX0KKygxIHJvdykK KworQ1JFQVRFIFRBQkxFIHRjYXN0KGEgdGV4dFtdLCBiIGludCBHRU5FUkFURUQgQlkgREVGQVVM VCBBUyBJREVOVElUWSk7CitJTlNFUlQgSU5UTyB0Y2FzdCBWQUxVRVMgKCd7MTJ9JyksICgnezEs YSwgYn0nKSwgKCd7ezEsMn0sIHtjLGR9fScpLCAoJ3sxM30nKTsKK1NFTEVDVCBDQVNUKHQgQVMg dGV4dFtdIERFRkFVTFQgJ3syMSwyMiwgJyB8fCBiIHx8ICd9JyBPTiBDT05WRVJTSU9OIEVSUk9S KSBGUk9NIHRjYXN0IGFzIHQ7CisgICAgIHQgICAgIAorLS0tLS0tLS0tLS0KKyB7MjEsMjIsMX0K KyB7MjEsMjIsMn0KKyB7MjEsMjIsM30KKyB7MjEsMjIsNH0KKyg0IHJvd3MpCisKK1NFTEVDVCBD QVNUKHQuYSBBUyBpbnRbXSBERUZBVUxUICd7MjEsMjJ9Jzo6aW50W10gfHwgYiBPTiBDT05WRVJT SU9OIEVSUk9SKSBGUk9NIHRjYXN0IGFzIHQ7CisgICAgIGEgICAgIAorLS0tLS0tLS0tLS0KKyB7 MTJ9CisgezIxLDIyLDJ9CisgezIxLDIyLDN9CisgezEzfQorKDQgcm93cykKKworLS0gdGVzdCB3 aXRoIGRvbWFpbgorQ1JFQVRFIERPTUFJTiBkX2ludDQyIGFzIGludCBjaGVjayAodmFsdWUgPSA0 MikgTk9UIE5VTEw7CitDUkVBVEUgRE9NQUlOIGRfY2hhcjNfbm90X251bGwgYXMgY2hhcigzKSBO T1QgTlVMTDsKK0NSRUFURSBUWVBFIGNvbXBfZG9tYWluX3dpdGhfdHlwbW9kIEFTIChhIGRfY2hh cjNfbm90X251bGwsIGIgaW50KTsKK1NFTEVDVCBDQVNUKDExIEFTIGRfaW50NDIgREVGQVVMVCA0 MSBPTiBDT05WRVJTSU9OIEVSUk9SKTsgLS1lcnJvcgorRVJST1I6ICB2YWx1ZSBmb3IgZG9tYWlu IGRfaW50NDIgdmlvbGF0ZXMgY2hlY2sgY29uc3RyYWludCAiZF9pbnQ0Ml9jaGVjayIKK1NFTEVD VCBDQVNUKDExIEFTIGRfaW50NDIgREVGQVVMVCA0MiBPTiBDT05WRVJTSU9OIEVSUk9SKTsgLS1v aworIGRfaW50NDIgCistLS0tLS0tLS0KKyAgICAgIDQyCisoMSByb3cpCisKK1NFTEVDVCBDQVNU KE5VTEwgQVMgZF9pbnQ0MiBERUZBVUxUIE5VTEwgT04gQ09OVkVSU0lPTiBFUlJPUik7IC0tZXJy b3IKK0VSUk9SOiAgZG9tYWluIGRfaW50NDIgZG9lcyBub3QgYWxsb3cgbnVsbCB2YWx1ZXMKK1NF TEVDVCBDQVNUKE5VTEwgQVMgZF9pbnQ0MiBERUZBVUxUIDQyIE9OIENPTlZFUlNJT04gRVJST1Ip OyAtLW9rCisgZF9pbnQ0MiAKKy0tLS0tLS0tLQorICAgICAgNDIKKygxIHJvdykKKworU0VMRUNU IENBU1QoJygsNDIpJyBBUyBjb21wX2RvbWFpbl93aXRoX3R5cG1vZCBERUZBVUxUIE5VTEwgT04g Q09OVkVSU0lPTiBFUlJPUik7CisgY29tcF9kb21haW5fd2l0aF90eXBtb2QgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgCisoMSByb3cpCisKK1NFTEVDVCBDQVNUKCcoTlVMTCw0MiknIEFT IGNvbXBfZG9tYWluX3dpdGhfdHlwbW9kIERFRkFVTFQgJygxLDIpJyBPTiBDT05WRVJTSU9OIEVS Uk9SKTsKKyBjb21wX2RvbWFpbl93aXRoX3R5cG1vZCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyAoIjEgICIsMikKKygxIHJvdykKKworU0VMRUNUIENBU1QoJyhOVUxMLDQyKScgQVMgY29t cF9kb21haW5fd2l0aF90eXBtb2QgREVGQVVMVCAnKDEyMzQsMiknIE9OIENPTlZFUlNJT04gRVJS T1IpOyAtLWVycm9yCitFUlJPUjogIHZhbHVlIHRvbyBsb25nIGZvciB0eXBlIGNoYXJhY3Rlcigz KQorTElORSAxOiAuLi5TVCgnKE5VTEwsNDIpJyBBUyBjb21wX2RvbWFpbl93aXRoX3R5cG1vZCBE RUZBVUxUICcoMTIzNCwyKScuLi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBeCistLSB0ZXN0IGRlcGFyc2UKK0NSRUFURSBWSUVX IHNhZmVjYXN0dmlldyBBUworU0VMRUNUIENBU1QoJzEyMzQnIGFzIGNoYXIoMykgREVGQVVMVCAt MTExMSBPTiBDT05WRVJTSU9OIEVSUk9SKSwKKyAgICAgICBDQVNUKDEgYXMgZGF0ZSBERUZBVUxU ICgobm93KCk6OmRhdGUgKyByYW5kb20obWluPT4xLCBtYXg9PjE6OmludCkpKSBPTiBDT05WRVJT SU9OIEVSUk9SKSBhcyBzYWZlY2FzdCwKKyAgICAgICBDQVNUKEFSUkFZW1snMSddLCBbJ3RocmVl J10sWydhJ11dIEFTIElOVEVHRVJbXSBERUZBVUxUICd7MSwyfScgT04gQ09OVkVSU0lPTiBFUlJP UikgYXMgY2FzdDEsCisgICAgICAgQ0FTVChBUlJBWVtbJzEnLCAnMiddLCBbJ3RocmVlJywgJ2En XV0gQVMgdGV4dFtdIERFRkFVTFQgJ3syMSwyMn0nIE9OIENPTlZFUlNJT04gRVJST1IpIGFzIGNh c3QyOworXHN2IHNhZmVjYXN0dmlldworQ1JFQVRFIE9SIFJFUExBQ0UgVklFVyBwdWJsaWMuc2Fm ZWNhc3R2aWV3IEFTCisgU0VMRUNUIENBU1QoJzEyMzQnIEFTIGNoYXJhY3RlcigzKSBERUZBVUxU ICctMTExMSc6OmludGVnZXI6OmNoYXJhY3RlcigzKSBPTiBDT05WRVJTSU9OIEVSUk9SKSBBUyBi cGNoYXIsCisgICAgQ0FTVCgxIEFTIGRhdGUgREVGQVVMVCBub3coKTo6ZGF0ZSArIHJhbmRvbSht aW4gPT4gMSwgbWF4ID0+IDEpIE9OIENPTlZFUlNJT04gRVJST1IpIEFTIHNhZmVjYXN0LAorICAg IENBU1QoQVJSQVlbQVJSQVlbJzEnXSwgQVJSQVlbJ3RocmVlJ10sIEFSUkFZWydhJ11dIEFTIGlu dGVnZXJbXSBERUZBVUxUICd7MSwyfSc6OmludGVnZXJbXSBPTiBDT05WRVJTSU9OIEVSUk9SKSBB UyBjYXN0MSwKKyAgICBDQVNUKEFSUkFZW0FSUkFZWycxJzo6dGV4dCwgJzInOjp0ZXh0XSwgQVJS QVlbJ3RocmVlJzo6dGV4dCwgJ2EnOjp0ZXh0XV0gQVMgdGV4dFtdIERFRkFVTFQgJ3syMSwyMn0n Ojp0ZXh0W10gT04gQ09OVkVSU0lPTiBFUlJPUikgQVMgY2FzdDIKK0NSRUFURSBJTkRFWCBjYXN0 X2Vycm9yX2lkeCAgT04gaG9iYmllc19yKChjYXN0KG5hbWUgYXMgaW50IERFRkFVTFQgcmFuZG9t KG1pbj0+MSwgbWF4PT4xKSBPTiBDT05WRVJTSU9OIEVSUk9SKSkpOyAtLWVycm9yCitFUlJPUjog IGZ1bmN0aW9ucyBpbiBpbmRleCBleHByZXNzaW9uIG11c3QgYmUgbWFya2VkIElNTVVUQUJMRQpk aWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvbWlzYy5zcWwgYi9zcmMvdGVzdC9yZWdy ZXNzL3NxbC9taXNjLnNxbAppbmRleCAxNjVhMmUxNzVmYi4uM2QwYjU5MzEzY2UgMTAwNjQ0Ci0t LSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL21pc2Muc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mv c3FsL21pc2Muc3FsCkBAIC0yNzMsMyArMjczLDYzIEBAIFNFTEVDVCAqLCAoZXF1aXBtZW50KENB U1QoKGguKikgQVMgaG9iYmllc19yKSkpLm5hbWUgRlJPTSBob2JiaWVzX3IgaDsKIC0tCiAtLSBy ZXdyaXRlIHJ1bGVzCiAtLQorCistLSBDQVNUIERFRkFVTFQgT04gQ09OVkVSU0lPTiBFUlJPUgor VkFMVUVTIChDQVNUKCdlcnJvcicgQVMgaW50ZWdlciBFUlJPUiBPTiBDT05WRVJTSU9OIEVSUk9S KSk7IC0tZXJyb3IKK1ZBTFVFUyAoQ0FTVCgnZXJyb3InIEFTIGludGVnZXIgTlVMTCBPTiBDT05W RVJTSU9OIEVSUk9SKSk7CitWQUxVRVMgKENBU1QoJ2Vycm9yJyBBUyBpbnRlZ2VyIERFRkFVTFQg NDIgT04gQ09OVkVSU0lPTiBFUlJPUikpOworU0VMRUNUIENBU1QoMSBBUyBkYXRlIERFRkFVTFQg TlVMTCBPTiBDT05WRVJTSU9OIEVSUk9SKTsKKworQ1JFQVRFIE9SIFJFUExBQ0UgRlVOQ1RJT04g cmV0X2ludDgoKSBSRVRVUk5TIGJpZ2ludCBBUworJCQKK0JFR0lOIFJFVFVSTiAyMTQ3NDgzNjQ4 OyBFTkQ7CiskJAorTEFOR1VBR0UgcGxwZ3NxbCBJTU1VVEFCTEU7CisKK1NFTEVDVCBDQVNUKCdh JyBhcyBpbnQgREVGQVVMVCByZXRfaW50OCgpIE9OIENPTlZFUlNJT04gRVJST1IpOyAtLWVycm9y CitTRUxFQ1QgQ0FTVCgnYScgYXMgZGF0ZSBERUZBVUxUIHJldF9pbnQ4KCkgT04gQ09OVkVSU0lP TiBFUlJPUik7IC0tZXJyb3IKKworLS0gdGVzdCB2YWxpZCBERUZBVUxUIGV4cHJlc3Npb24gZm9y IENBU1QgPSBPTiBDT05WRVJTSU9OIEVSUk9SCitDUkVBVEUgT1IgUkVQTEFDRSBGVU5DVElPTiBy ZXRfc2V0aW50KCkgUkVUVVJOUyBTRVRPRiBpbnRlZ2VyIEFTCiskJAorQkVHSU4gUkVUVVJOIFFV RVJZIEVYRUNVVEUgJ3NlbGVjdCAxIHVuaW9uIGFsbCBzZWxlY3QgMSc7IEVORDsKKyQkCitMQU5H VUFHRSBwbHBnc3FsIElNTVVUQUJMRTsKKworU0VMRUNUIENBU1QoJ2EnIGFzIGludCBERUZBVUxU IHJldF9zZXRpbnQoKSBPTiBDT05WRVJTSU9OIEVSUk9SKSBGUk9NIGhvYmJpZXNfcjsgLS1lcnJv cgorU0VMRUNUIENBU1QoJ2EnIGFzIGludCBERUZBVUxUIHN1bSgxKSBPTiBDT05WRVJTSU9OIEVS Uk9SKTsgLS1lcnJvcgorU0VMRUNUIENBU1QoJ2EnIGFzIGludCBERUZBVUxUIHN1bSgxKSBvdmVy KCkgT04gQ09OVkVSU0lPTiBFUlJPUik7IC0tZXJyb3IKK1NFTEVDVCBDQVNUKCdhJyBhcyBpbnQg REVGQVVMVCAnYicgT04gQ09OVkVSU0lPTiBFUlJPUik7IC0tZXJyb3IKKworLS0gdGVzdCBhcnJh eSBjb2VyY2UKK1NFTEVDVCBDQVNUKCd7MTIzLGFiYyw0NTZ9JyBBUyBpbnRlZ2VyW10gREVGQVVM VCAney03ODl9JyBPTiBDT05WRVJTSU9OIEVSUk9SKTsKK1NFTEVDVCBDQVNUKCd7MjM0LGRlZiw1 Njd9Jzo6dGV4dFtdIEFTIGludGVnZXJbXSBERUZBVUxUICd7LTEwMTF9JyBPTiBDT05WRVJTSU9O IEVSUk9SKTsKK1NFTEVDVCBDQVNUKEFSUkFZW1snMSddLCBbJ3RocmVlJ10sWydhJ11dIEFTIElO VEVHRVJbXSBERUZBVUxUICd7MSwyfScgT04gQ09OVkVSU0lPTiBFUlJPUik7CitTRUxFQ1QgQ0FT VChBUlJBWVtbJzEnLCAnMiddLCBbJ3RocmVlJywgJ2EnXV0gQVMgdGV4dFtdIERFRkFVTFQgJ3sy MSwyMn0nIE9OIENPTlZFUlNJT04gRVJST1IpOworCitDUkVBVEUgVEFCTEUgdGNhc3QoYSB0ZXh0 W10sIGIgaW50IEdFTkVSQVRFRCBCWSBERUZBVUxUIEFTIElERU5USVRZKTsKK0lOU0VSVCBJTlRP IHRjYXN0IFZBTFVFUyAoJ3sxMn0nKSwgKCd7MSxhLCBifScpLCAoJ3t7MSwyfSwge2MsZH19Jyks ICgnezEzfScpOworU0VMRUNUIENBU1QodCBBUyB0ZXh0W10gREVGQVVMVCAnezIxLDIyLCAnIHx8 IGIgfHwgJ30nIE9OIENPTlZFUlNJT04gRVJST1IpIEZST00gdGNhc3QgYXMgdDsKK1NFTEVDVCBD QVNUKHQuYSBBUyBpbnRbXSBERUZBVUxUICd7MjEsMjJ9Jzo6aW50W10gfHwgYiBPTiBDT05WRVJT SU9OIEVSUk9SKSBGUk9NIHRjYXN0IGFzIHQ7CisKKy0tIHRlc3Qgd2l0aCBkb21haW4KK0NSRUFU RSBET01BSU4gZF9pbnQ0MiBhcyBpbnQgY2hlY2sgKHZhbHVlID0gNDIpIE5PVCBOVUxMOworQ1JF QVRFIERPTUFJTiBkX2NoYXIzX25vdF9udWxsIGFzIGNoYXIoMykgTk9UIE5VTEw7CitDUkVBVEUg VFlQRSBjb21wX2RvbWFpbl93aXRoX3R5cG1vZCBBUyAoYSBkX2NoYXIzX25vdF9udWxsLCBiIGlu dCk7CitTRUxFQ1QgQ0FTVCgxMSBBUyBkX2ludDQyIERFRkFVTFQgNDEgT04gQ09OVkVSU0lPTiBF UlJPUik7IC0tZXJyb3IKK1NFTEVDVCBDQVNUKDExIEFTIGRfaW50NDIgREVGQVVMVCA0MiBPTiBD T05WRVJTSU9OIEVSUk9SKTsgLS1vaworU0VMRUNUIENBU1QoTlVMTCBBUyBkX2ludDQyIERFRkFV TFQgTlVMTCBPTiBDT05WRVJTSU9OIEVSUk9SKTsgLS1lcnJvcgorU0VMRUNUIENBU1QoTlVMTCBB UyBkX2ludDQyIERFRkFVTFQgNDIgT04gQ09OVkVSU0lPTiBFUlJPUik7IC0tb2sKK1NFTEVDVCBD QVNUKCcoLDQyKScgQVMgY29tcF9kb21haW5fd2l0aF90eXBtb2QgREVGQVVMVCBOVUxMIE9OIENP TlZFUlNJT04gRVJST1IpOworU0VMRUNUIENBU1QoJyhOVUxMLDQyKScgQVMgY29tcF9kb21haW5f d2l0aF90eXBtb2QgREVGQVVMVCAnKDEsMiknIE9OIENPTlZFUlNJT04gRVJST1IpOworU0VMRUNU IENBU1QoJyhOVUxMLDQyKScgQVMgY29tcF9kb21haW5fd2l0aF90eXBtb2QgREVGQVVMVCAnKDEy MzQsMiknIE9OIENPTlZFUlNJT04gRVJST1IpOyAtLWVycm9yCisKKy0tIHRlc3QgZGVwYXJzZQor Q1JFQVRFIFZJRVcgc2FmZWNhc3R2aWV3IEFTCitTRUxFQ1QgQ0FTVCgnMTIzNCcgYXMgY2hhcigz KSBERUZBVUxUIC0xMTExIE9OIENPTlZFUlNJT04gRVJST1IpLAorICAgICAgIENBU1QoMSBhcyBk YXRlIERFRkFVTFQgKChub3coKTo6ZGF0ZSArIHJhbmRvbShtaW49PjEsIG1heD0+MTo6aW50KSkp IE9OIENPTlZFUlNJT04gRVJST1IpIGFzIHNhZmVjYXN0LAorICAgICAgIENBU1QoQVJSQVlbWycx J10sIFsndGhyZWUnXSxbJ2EnXV0gQVMgSU5URUdFUltdIERFRkFVTFQgJ3sxLDJ9JyBPTiBDT05W RVJTSU9OIEVSUk9SKSBhcyBjYXN0MSwKKyAgICAgICBDQVNUKEFSUkFZW1snMScsICcyJ10sIFsn dGhyZWUnLCAnYSddXSBBUyB0ZXh0W10gREVGQVVMVCAnezIxLDIyfScgT04gQ09OVkVSU0lPTiBF UlJPUikgYXMgY2FzdDI7Citcc3Ygc2FmZWNhc3R2aWV3CisKK0NSRUFURSBJTkRFWCBjYXN0X2Vy cm9yX2lkeCAgT04gaG9iYmllc19yKChjYXN0KG5hbWUgYXMgaW50IERFRkFVTFQgcmFuZG9tKG1p bj0+MSwgbWF4PT4xKSBPTiBDT05WRVJTSU9OIEVSUk9SKSkpOyAtLWVycm9yCmRpZmYgLS1naXQg YS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90 eXBlZGVmcy5saXN0CmluZGV4IGZmMDUwZTkzYTUwLi4yZTc5MDQ2ZDgzYiAxMDA2NDQKLS0tIGEv c3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50 L3R5cGVkZWZzLmxpc3QKQEAgLTI2NDgsNiArMjY0OCw5IEBAIFNUUkxFTgogU1YKIFNZTkNIUk9O SVpBVElPTl9CQVJSSUVSCiBTWVNURU1fSU5GTworU2FmZVR5cGVDYXN0CitTYWZlVHlwZUNhc3RF eHByCitTYWZlVHlwZUNhc3RTdGF0ZQogU2FtcGxlU2NhbgogU2FtcGxlU2NhbkdldFNhbXBsZVNp emVfZnVuY3Rpb24KIFNhbXBsZVNjYW5TdGF0ZQotLSAKMi4zNC4xCgo= --00000000000048f56b063aa2aae8--