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 1tDOdP-000QU2-4q for pgsql-hackers@arkaria.postgresql.org; Tue, 19 Nov 2024 13:51:15 +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 1tDOdN-00DXSz-9H for pgsql-hackers@arkaria.postgresql.org; Tue, 19 Nov 2024 13:51:13 +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 1tDOdM-00DXSr-LM for pgsql-hackers@lists.postgresql.org; Tue, 19 Nov 2024 13:51:13 +0000 Received: from fout-a8-smtp.messagingengine.com ([103.168.172.151]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1tDOdI-002hSC-QW for pgsql-hackers@postgresql.org; Tue, 19 Nov 2024 13:51:12 +0000 Received: from phl-compute-04.internal (phl-compute-04.phl.internal [10.202.2.44]) by mailfout.phl.internal (Postfix) with ESMTP id 5093D1380479; Tue, 19 Nov 2024 08:51:07 -0500 (EST) Received: from phl-mailfrontend-01 ([10.202.2.162]) by phl-compute-04.internal (MEProxy); Tue, 19 Nov 2024 08:51:07 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=eisentraut.org; h=cc:cc:content-type:content-type:date:date:from:from :in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:subject:subject:to:to; s=fm2; t=1732024267; x= 1732110667; bh=U1Lez2FkfEYhGKDHJW3Byvaj8SFbQSnUlQ8l7laLvdU=; b=o pmmYLbBTerO5VYnO6fIjQ6lDIAoQNvMD3D5R/ojbsQx1Xbu9DuuLp2D8I/3bNO8z SMyr0bn/JIrdeghCZqNDgRhN25YDeaLrWEzPQ+XO07g3/0+019d+cSQTNwtnfEzA OCb9PyVNuXN3yJ3l4r6bYg5r117FQAoGmG/nbWGuXTHrxFXRwg28jF34so0P57qA NTjVG7xhGo+KnmF01HA44Fhw+y+yz+eoWsti8pyUwQcEUK224zVvMXAlQwjBSbHG 30zeZKblyL0IrPM9PCTbQFtSiGJ3pI4t+f64UQvz3Jx6mI5MkRPFopGHngHvwSxb FlkpNd2zYNNcSkyJRZFFw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-type:content-type:date:date :feedback-id:feedback-id:from:from:in-reply-to:in-reply-to :message-id:mime-version:references:reply-to:subject:subject:to :to:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm3; t= 1732024267; x=1732110667; bh=U1Lez2FkfEYhGKDHJW3Byvaj8SFbQSnUlQ8 l7laLvdU=; b=cVnL+DZ/XCP5JRYQEhxdTH7LrvvTZFBb0d34IgUmZIrsuO0xgGB x9gdxq2rUVirsmnQkeQdihLCuoPXbupP3rP8vysUI9DspbO9A7ul4ZSpbqjFAKQO DbXALjTnwD+x2J4UxtgoQC2kwu6vdvRhPv08CcQhMfHIoMT20EuKgcXcvLt/58+w sgaMCsaLS0B4/BZ4GojeHbX2wzHw/zIhKFbsjl+WgYx+3srRJ9RJ277A1RhG9SwZ 3aJZOVTKgrSgAFQNJA2+8inpA2Mqug3PvY2gXncISKtiT4Y+lRuZYemi9S/VtTGd TLUIiQ8+Ktd7sqOFG3WzxpHb2QgD1wTD+mA== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeefuddrfedvgdehiecutefuodetggdotefrodftvf curfhrohhfihhlvgemucfhrghsthforghilhdpggftfghnshhusghstghrihgsvgdpuffr tefokffrpgfnqfghnecuuegrihhlohhuthemuceftddtnecusecvtfgvtghiphhivghnth hsucdlqddutddtmdenucfjughrpegtkfffgggfuffvvehfhfgjsehmtderredtvdejnecu hfhrohhmpefrvghtvghrucfgihhsvghnthhrrghuthcuoehpvghtvghrsegvihhsvghnth hrrghuthdrohhrgheqnecuggftrfgrthhtvghrnhepkedtuedthfdvhfeviefgffetgedv jedvhffhveefvefgtdfgleegheeivefhgfeinecuvehluhhsthgvrhfuihiivgeptdenuc frrghrrghmpehmrghilhhfrhhomhepphgvthgvrhesvghishgvnhhtrhgruhhtrdhorhhg pdhnsggprhgtphhtthhopeeipdhmohguvgepshhmthhpohhuthdprhgtphhtthhopehjih grnhdruhhnihhvvghrshgrlhhithihsehgmhgrihhlrdgtohhmpdhrtghpthhtohephhhl ihhnnhgrkhgrsehikhhirdhfihdprhgtphhtthhopehjrggtohgsrdgthhgrmhhpihhonh esvghnthgvrhhprhhishgvuggsrdgtohhmpdhrtghpthhtohepphhgshhqlhdqhhgrtghk vghrshesphhoshhtghhrvghsqhhlrdhorhhgpdhrtghpthhtohepuggrnhhivghlsehmrg hnihhtohhuqdhmrghilhdrohhrghdprhgtphhtthhopehpjhesihhllhhumhhinhgrthgv uggtohhmphhuthhinhhgrdgtohhm X-ME-Proxy: Feedback-ID: ie0a040ee:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Tue, 19 Nov 2024 08:51:05 -0500 (EST) Content-Type: multipart/mixed; boundary="------------7nLBpcp6Ho0a7Zh1HpSj3Pzz" Message-ID: Date: Tue, 19 Nov 2024 14:51:03 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: Support LIKE with nondeterministic collations To: jian he Cc: Heikki Linnakangas , Jacob Champion , pgsql-hackers , Daniel Verite , Paul A Jungwirth References: <3104729e-1fbf-4368-ac21-1f670062de28@eisentraut.org> <0ca761b5-7b62-42a1-bffd-8bedefad48dd@eisentraut.org> <62156cde-b2c5-4375-b47a-9730aa8f7b5e@eisentraut.org> <07fdbb85-c530-48d0-adc0-7d43d7951e1b@eisentraut.org> Content-Language: en-US From: Peter Eisentraut In-Reply-To: List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------7nLBpcp6Ho0a7Zh1HpSj3Pzz Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 18.11.24 04:30, jian he wrote: > we can optimize when trailing (last character) is not wildcards. > > SELECT 'Ha12foo' LIKE '%foo' COLLATE ignore_accents; > within the for loop > for(;;) > { > int cmp; > CHECK_FOR_INTERRUPTS(); > .... > } > > pg_strncoll comparison will become > Ha12foo foo > a12foo foo > 12foo foo > 2foo foo > foo foo > > it's safe because in MatchText we have: > else if (*p == '%') > { > while (tlen > 0) > { > if (GETCHAR(*t, locale) == firstpat || (locale && !locale->deterministic)) > { > int matched = MatchText(t, tlen, p, plen, locale); > if (matched != LIKE_FALSE) > return matched; /* TRUE or ABORT */ > } > NextChar(t, tlen); > } > } > > please check attached. I see, good idea. I implemented it a bit differently. See "Shortcut: If this is the end of the pattern ..." in this patch. Please check if this is what you had in mind. --------------7nLBpcp6Ho0a7Zh1HpSj3Pzz Content-Type: text/plain; charset=UTF-8; name="v8-0001-Support-LIKE-with-nondeterministic-collations.patch" Content-Disposition: attachment; filename*0="v8-0001-Support-LIKE-with-nondeterministic-collations.patch" Content-Transfer-Encoding: base64 RnJvbSBlOTI1MmMxYzhlYzYwZTdjNDgxMzQ5MDkwOGQ2Y2ViNTc1ODQwNDIwIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBFaXNlbnRyYXV0IDxwZXRlckBlaXNlbnRy YXV0Lm9yZz4KRGF0ZTogVHVlLCAxOSBOb3YgMjAyNCAxNDo0NzozOSArMDEwMApTdWJqZWN0 OiBbUEFUQ0ggdjhdIFN1cHBvcnQgTElLRSB3aXRoIG5vbmRldGVybWluaXN0aWMgY29sbGF0 aW9ucwpNSU1FLVZlcnNpb246IDEuMApDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJz ZXQ9VVRGLTgKQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAoKVGhpcyBhbGxvd3Mg Zm9yIGV4YW1wbGUgdXNpbmcgTElLRSB3aXRoIGNhc2UtaW5zZW5zaXRpdmUgY29sbGF0aW9u cy4KVGhlcmUgd2FzIHByZXZpb3VzbHkgbm8gaW50ZXJuYWwgaW1wbGVtZW50YXRpb24gb2Yg dGhpcywgc28gaXQgd2FzIG1ldAp3aXRoIGEgbm90LXN1cHBvcnRlZCBlcnJvci4gIFRoaXMg YWRkcyB0aGUgaW50ZXJuYWwgaW1wbGVtZW50YXRpb24gYW5kCnJlbW92ZXMgdGhlIGVycm9y LiAgVGhlIGltcGxlbWVudGF0aW9uIGZvbGxvd3MgdGhlIHNwZWNpZmljYXRpb24gb2YKdGhl IFNRTCBzdGFuZGFyZCBmb3IgdGhpcy4KClVubGlrZSB3aXRoIGRldGVybWluaXN0aWMgY29s bGF0aW9ucywgdGhlIExJS0UgbWF0Y2hpbmcgY2Fubm90IGdvCmNoYXJhY3RlciBieSBjaGFy YWN0ZXIgYnV0IGhhcyB0byBnbyBzdWJzdHJpbmcgYnkgc3Vic3RyaW5nLiAgRm9yCmV4YW1w bGUsIGlmIHdlIGFyZSBtYXRjaGluZyBhZ2FpbnN0IExJS0UgJ2ZvbyViYXInLCB3ZSBjYW4n dCBzdGFydCBieQpsb29raW5nIGZvciBhbiAnZicsIHRoZW4gYW4gJ28nLCBidXQgaW5zdGVh ZCB3aXRoIGhhdmUgdG8gZmluZApzb21ldGhpbmcgdGhhdCBtYXRjaGVzICdmb28nLiAgVGhp cyBpcyBiZWNhdXNlIHRoZSBjb2xsYXRpb24gY291bGQKY29uc2lkZXIgc3Vic3RyaW5ncyBv ZiBkaWZmZXJlbnQgbGVuZ3RocyB0byBiZSBlcXVhbC4gIFRoaXMgaXMgYWxsCmludGVybmFs IHRvIE1hdGNoVGV4dCgpIGluIGxpa2VfbWF0Y2guYy4KClRoZSBjaGFuZ2VzIGluIEdlbmVy aWNNYXRjaFRleHQoKSBpbiBsaWtlLmMganVzdCBwYXNzIHRocm91Z2ggdGhlCmxvY2FsZSBp bmZvcm1hdGlvbiB0byBNYXRjaFRleHQoKSwgd2hpY2ggd2FzIHByZXZpb3VzbHkgbm90IG5l ZWRlZC4KVGhpcyBtYXRjaGVzIGV4YWN0bHkgR2VuZXJpY19UZXh0X0lDX2xpa2UoKSBiZWxv dy4KCklMSUtFIGlzIG5vdCBhZmZlY3RlZC4gIChJdCdzIHVuY2xlYXIgd2hldGhlciBJTElL RSBtYWtlcyBzZW5zZSB1bmRlcgpub25kZXRlcm1pbmlzdGljIGNvbGxhdGlvbnMuKQoKVGhp cyBhbHNvIHVwZGF0ZXMgbWF0Y2hfcGF0dGVybl9wcmVmaXgoKSBpbiBsaWtlX3N1cHBvcnQu YyB0byBzdXBwb3J0Cm9wdGltaXppbmcgdGhlIGNhc2Ugb2YgYW4gZXhhY3QgcGF0dGVybiB3 aXRoIG5vbmRldGVybWluaXN0aWMKY29sbGF0aW9ucy4gIFRoaXMgd2FzIGFscmVhZHkgYWxs dWRlZCB0byBpbiB0aGUgcHJldmlvdXMgY29kZS4KCihpbmNsdWRlcyBkb2N1bWVudGF0aW9u IGV4YW1wbGVzIGZyb20gRGFuaWVsIFbDqXJpdMOpIGFuZCB0ZXN0IGNhc2VzCmZyb20gUGF1 bCBBIEp1bmd3aXJ0aCkKClJldmlld2VkLWJ5OiBKaWFuIEhlIDxqaWFuLnVuaXZlcnNhbGl0 eUBnbWFpbC5jb20+CkRpc2N1c3Npb246IGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL21l c3NhZ2UtaWQvZmxhdC83MDBkMmU4Ni1iZjc1LTQ2MDctOWNmMi1mNWI3ODAyZjZlODhAZWlz ZW50cmF1dC5vcmcKLS0tCiBkb2Mvc3JjL3NnbWwvY2hhcnNldC5zZ21sICAgICAgICAgICAg ICAgICAgICAgfCAgIDIgKy0KIGRvYy9zcmMvc2dtbC9mdW5jLnNnbWwgICAgICAgICAgICAg ICAgICAgICAgICB8ICA1MiArKysrLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2xpa2UuYyAg ICAgICAgICAgICAgICAgIHwgIDI2ICsrLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2xpa2Vf bWF0Y2guYyAgICAgICAgICAgIHwgMTQ4ICsrKysrKysrKysrKystCiBzcmMvYmFja2VuZC91 dGlscy9hZHQvbGlrZV9zdXBwb3J0LmMgICAgICAgICAgfCAgMjkgKystCiAuLi4vcmVncmVz cy9leHBlY3RlZC9jb2xsYXRlLmljdS51dGY4Lm91dCAgICAgfCAxODkgKysrKysrKysrKysr KysrKystCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9jb2xsYXRlLmljdS51dGY4LnNxbCAgICAg fCAgNTUgKysrKy0KIDcgZmlsZXMgY2hhbmdlZCwgNDU3IGluc2VydGlvbnMoKyksIDQ0IGRl bGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9jaGFyc2V0LnNnbWwgYi9k b2Mvc3JjL3NnbWwvY2hhcnNldC5zZ21sCmluZGV4IGY1ZTExNWU4ZDZlLi4wMGUxOTg2ODQ5 YSAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2NoYXJzZXQuc2dtbAorKysgYi9kb2Mvc3Jj L3NnbWwvY2hhcnNldC5zZ21sCkBAIC0xMTk3LDcgKzExOTcsNyBAQCA8dGl0bGU+Tm9uZGV0 ZXJtaW5pc3RpYyBDb2xsYXRpb25zPC90aXRsZT4KICAgICAgdG8gYSBwZXJmb3JtYW5jZSBw ZW5hbHR5LiAgTm90ZSwgaW4gcGFydGljdWxhciwgdGhhdCBCLXRyZWUgY2Fubm90IHVzZQog ICAgICBkZWR1cGxpY2F0aW9uIHdpdGggaW5kZXhlcyB0aGF0IHVzZSBhIG5vbmRldGVybWlu aXN0aWMgY29sbGF0aW9uLiAgQWxzbywKICAgICAgY2VydGFpbiBvcGVyYXRpb25zIGFyZSBu b3QgcG9zc2libGUgd2l0aCBub25kZXRlcm1pbmlzdGljIGNvbGxhdGlvbnMsCi0gICAgIHN1 Y2ggYXMgcGF0dGVybiBtYXRjaGluZyBvcGVyYXRpb25zLiAgVGhlcmVmb3JlLCB0aGV5IHNo b3VsZCBiZSB1c2VkCisgICAgIHN1Y2ggYXMgc29tZSBwYXR0ZXJuIG1hdGNoaW5nIG9wZXJh dGlvbnMuICBUaGVyZWZvcmUsIHRoZXkgc2hvdWxkIGJlIHVzZWQKICAgICAgb25seSBpbiBj YXNlcyB3aGVyZSB0aGV5IGFyZSBzcGVjaWZpY2FsbHkgd2FudGVkLgogICAgIDwvcGFyYT4K IApkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2Z1bmMuc2dtbCBiL2RvYy9zcmMvc2dtbC9m dW5jLnNnbWwKaW5kZXggNzM5NzlmMjBmZmYuLjEwMzk5ODRjYjQ5IDEwMDY0NAotLS0gYS9k b2Mvc3JjL3NnbWwvZnVuYy5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9mdW5jLnNnbWwKQEAg LTU0MTQsOSArNTQxNCwxMCBAQCA8dGl0bGU+UGF0dGVybiBNYXRjaGluZzwvdGl0bGU+CiAg ICA8L2NhdXRpb24+CiAKICAgIDxwYXJhPgotICAgIFRoZSBwYXR0ZXJuIG1hdGNoaW5nIG9w ZXJhdG9ycyBvZiBhbGwgdGhyZWUga2luZHMgZG8gbm90IHN1cHBvcnQKLSAgICBub25kZXRl cm1pbmlzdGljIGNvbGxhdGlvbnMuICBJZiByZXF1aXJlZCwgYXBwbHkgYSBkaWZmZXJlbnQg Y29sbGF0aW9uIHRvCi0gICAgdGhlIGV4cHJlc3Npb24gdG8gd29yayBhcm91bmQgdGhpcyBs aW1pdGF0aW9uLgorICAgIDxmdW5jdGlvbj5TSU1JTEFSIFRPPC9mdW5jdGlvbj4gYW5kIDxh Y3JvbnltPlBPU0lYPC9hY3JvbnltPi1zdHlsZSByZWd1bGFyCisgICAgZXhwcmVzc2lvbnMg ZG8gbm90IHN1cHBvcnQgbm9uZGV0ZXJtaW5pc3RpYyBjb2xsYXRpb25zLiAgSWYgcmVxdWly ZWQsIHVzZQorICAgIDxmdW5jdGlvbj5MSUtFPC9mdW5jdGlvbj4gb3IgYXBwbHkgYSBkaWZm ZXJlbnQgY29sbGF0aW9uIHRvIHRoZSBleHByZXNzaW9uCisgICAgdG8gd29yayBhcm91bmQg dGhpcyBsaW1pdGF0aW9uLgogICAgPC9wYXJhPgogCiAgIDxzZWN0MiBpZD0iZnVuY3Rpb25z LWxpa2UiPgpAQCAtNTQ2Miw2ICs1NDYzLDQ2IEBAIDx0aXRsZT48ZnVuY3Rpb24+TElLRTwv ZnVuY3Rpb24+PC90aXRsZT4KIDwvcHJvZ3JhbWxpc3Rpbmc+CiAgICA8L3BhcmE+CiAKKyAg IDxwYXJhPgorICAgIDxmdW5jdGlvbj5MSUtFPC9mdW5jdGlvbj4gcGF0dGVybiBtYXRjaGlu ZyBzdXBwb3J0cyBub25kZXRlcm1pbmlzdGljCisgICAgY29sbGF0aW9ucyAoc2VlIDx4cmVm IGxpbmtlbmQ9ImNvbGxhdGlvbi1ub25kZXRlcm1pbmlzdGljIi8+KSwgc3VjaCBhcworICAg IGNhc2UtaW5zZW5zaXRpdmUgY29sbGF0aW9ucyBvciBjb2xsYXRpb25zIHRoYXQsIHNheSwg aWdub3JlIHB1bmN0dWF0aW9uLgorICAgIFNvIHdpdGggYSBjYXNlLWluc2Vuc2l0aXZlIGNv bGxhdGlvbiwgb25lIGNvdWxkIGhhdmU6Cis8cHJvZ3JhbWxpc3Rpbmc+CisnQWJDJyBMSUtF ICdhYmMnIENPTExBVEUgY2FzZV9pbnNlbnNpdGl2ZSAgICA8bGluZWFubm90YXRpb24+dHJ1 ZTwvbGluZWFubm90YXRpb24+CisnQWJDJyBMSUtFICdhJScgQ09MTEFURSBjYXNlX2luc2Vu c2l0aXZlICAgICA8bGluZWFubm90YXRpb24+dHJ1ZTwvbGluZWFubm90YXRpb24+Cis8L3By b2dyYW1saXN0aW5nPgorICAgIFdpdGggY29sbGF0aW9ucyB0aGF0IGlnbm9yZSBjZXJ0YWlu IGNoYXJhY3RlcnMgb3IgaW4gZ2VuZXJhbCB0aGF0IGNvbnNpZGVyCisgICAgc3RyaW5ncyBv ZiBkaWZmZXJlbnQgbGVuZ3RocyBlcXVhbCwgdGhlIHNlbWFudGljcyBjYW4gYmVjb21lIGEg Yml0IG1vcmUKKyAgICBjb21wbGljYXRlZC4gIENvbnNpZGVyIHRoZXNlIGV4YW1wbGVzOgor PHByb2dyYW1saXN0aW5nPgorJy5mb28uJyBMSUtFICdmb28nIENPTExBVEUgaWduX3B1bmN0 ICAgIDxsaW5lYW5ub3RhdGlvbj50cnVlPC9saW5lYW5ub3RhdGlvbj4KKycuZm9vLicgTElL RSAnZl9vJyBDT0xMQVRFIGlnbl9wdW5jdCAgICA8bGluZWFubm90YXRpb24+dHJ1ZTwvbGlu ZWFubm90YXRpb24+CisnLmZvby4nIExJS0UgJ19vbycgQ09MTEFURSBpZ25fcHVuY3QgICAg PGxpbmVhbm5vdGF0aW9uPmZhbHNlPC9saW5lYW5ub3RhdGlvbj4KKzwvcHJvZ3JhbWxpc3Rp bmc+CisgICAgVGhlIHdheSB0aGUgbWF0Y2hpbmcgd29ya3MgaXMgdGhhdCB0aGUgcGF0dGVy biBpcyBwYXJ0aXRpb25lZCBpbnRvCisgICAgc2VxdWVuY2VzIG9mIHdpbGRjYXJkcyBhbmQg bm9uLXdpbGRjYXJkIHN0cmluZ3MgKHdpbGRjYXJkcyBiZWluZworICAgIDxsaXRlcmFsPl88 L2xpdGVyYWw+IGFuZCA8bGl0ZXJhbD4lPC9saXRlcmFsPikuICBGb3IgZXhhbXBsZSwgdGhl IHBhdHRlcm4KKyAgICA8bGl0ZXJhbD5mX288L2xpdGVyYWw+IGlzIHBhcnRpdGlvbmVkIGlu dG8gPGxpdGVyYWw+ZiwgXywgbzwvbGl0ZXJhbD4sIHRoZQorICAgIHBhdHRlcm4gPGxpdGVy YWw+X29vPC9saXRlcmFsPiBpcyBwYXJ0aXRpb25lZCBpbnRvIDxsaXRlcmFsPl8sCisgICAg b288L2xpdGVyYWw+LiAgVGhlIGlucHV0IHN0cmluZyBtYXRjaGVzIHRoZSBwYXR0ZXJuIGlm IGl0IGNhbiBiZQorICAgIHBhcnRpdGlvbmVkIGluIHN1Y2ggYSB3YXkgdGhhdCB0aGUgd2ls ZGNhcmRzIG1hdGNoIG9uZSBjaGFyYWN0ZXIgb3IgYW55CisgICAgbnVtYmVyIG9mIGNoYXJh Y3RlcnMgcmVzcGVjdGl2ZWx5IGFuZCB0aGUgbm9uLXdpbGRjYXJkIHBhcnRpdGlvbnMgYXJl CisgICAgZXF1YWwgdW5kZXIgdGhlIGFwcGxpY2FibGUgY29sbGF0aW9uLiAgU28gZm9yIGV4 YW1wbGUsIDxsaXRlcmFsPicuZm9vLicKKyAgICBMSUtFICdmX28nIENPTExBVEUgaWduX3B1 bmN0PC9saXRlcmFsPiBpcyB0cnVlIGJlY2F1c2Ugb25lIGNhbiBwYXJ0aXRpb24KKyAgICA8 bGl0ZXJhbD4uZm9vLjwvbGl0ZXJhbD4gaW50byA8bGl0ZXJhbD4uZiwgbywgby48L2xpdGVy YWw+LCBhbmQgdGhlbgorICAgIDxsaXRlcmFsPicuZicgPSAnZicgQ09MTEFURSBpZ25fcHVu Y3Q8L2xpdGVyYWw+LCA8bGl0ZXJhbD4nbyc8L2xpdGVyYWw+CisgICAgbWF0Y2hlcyB0aGUg PGxpdGVyYWw+XzwvbGl0ZXJhbD4gd2lsZGNhcmQsIGFuZCA8bGl0ZXJhbD4nby4nID0gJ28n IENPTExBVEUKKyAgICBpZ25fcHVuY3Q8L2xpdGVyYWw+LiAgQnV0IDxsaXRlcmFsPicuZm9v LicgTElLRSAnX29vJyBDT0xMQVRFCisgICAgaWduX3B1bmN0PC9saXRlcmFsPiBpcyBmYWxz ZSBiZWNhdXNlIDxsaXRlcmFsPi5mb28uPC9saXRlcmFsPiBjYW5ub3QgYmUKKyAgICBwYXJ0 aXRpb25lZCBpbiBhIHdheSB0aGF0IHRoZSBmaXJzdCBjaGFyYWN0ZXIgaXMgYW55IGNoYXJh Y3RlciBhbmQgdGhlCisgICAgcmVzdCBvZiB0aGUgc3RyaW5nIGNvbXBhcmVzIGVxdWFsIHRv IDxsaXRlcmFsPm9vPC9saXRlcmFsPi4gIChOb3RlIHRoYXQKKyAgICB0aGUgc2luZ2xlLWNo YXJhY3RlciB3aWxkY2FyZCBhbHdheXMgbWF0Y2hlcyBleGFjdGx5IG9uZSBjaGFyYWN0ZXIs CisgICAgaW5kZXBlbmRlbnQgb2YgdGhlIGNvbGxhdGlvbi4gIFNvIGluIHRoaXMgZXhhbXBs ZSwgdGhlCisgICAgPGxpdGVyYWw+XzwvbGl0ZXJhbD4gd291bGQgbWF0Y2ggPGxpdGVyYWw+ LjwvbGl0ZXJhbD4sIGJ1dCB0aGVuIHRoZSByZXN0CisgICAgb2YgdGhlIGlucHV0IHN0cmlu ZyB3b24ndCBtYXRjaCB0aGUgcmVzdCBvZiB0aGUgcGF0dGVybi4pCisgICA8L3BhcmE+CisK ICAgIDxwYXJhPgogICAgIDxmdW5jdGlvbj5MSUtFPC9mdW5jdGlvbj4gcGF0dGVybiBtYXRj aGluZyBhbHdheXMgY292ZXJzIHRoZSBlbnRpcmUKICAgICBzdHJpbmcuICBUaGVyZWZvcmUs IGlmIGl0J3MgZGVzaXJlZCB0byBtYXRjaCBhIHNlcXVlbmNlIGFueXdoZXJlIHdpdGhpbgpA QCAtNTUwMyw4ICs1NTQ0LDkgQEAgPHRpdGxlPjxmdW5jdGlvbj5MSUtFPC9mdW5jdGlvbj48 L3RpdGxlPgogCiAgICA8cGFyYT4KICAgICBUaGUga2V5IHdvcmQgPHRva2VuPklMSUtFPC90 b2tlbj4gY2FuIGJlIHVzZWQgaW5zdGVhZCBvZgotICAgIDx0b2tlbj5MSUtFPC90b2tlbj4g dG8gbWFrZSB0aGUgbWF0Y2ggY2FzZS1pbnNlbnNpdGl2ZSBhY2NvcmRpbmcKLSAgICB0byB0 aGUgYWN0aXZlIGxvY2FsZS4gIFRoaXMgaXMgbm90IGluIHRoZSA8YWNyb255bT5TUUw8L2Fj cm9ueW0+IHN0YW5kYXJkIGJ1dCBpcyBhCisgICAgPHRva2VuPkxJS0U8L3Rva2VuPiB0byBt YWtlIHRoZSBtYXRjaCBjYXNlLWluc2Vuc2l0aXZlIGFjY29yZGluZyB0byB0aGUKKyAgICBh Y3RpdmUgbG9jYWxlLiAgKEJ1dCB0aGlzIGRvZXMgbm90IHN1cHBvcnQgbm9uZGV0ZXJtaW5p c3RpYyBjb2xsYXRpb25zLikKKyAgICBUaGlzIGlzIG5vdCBpbiB0aGUgPGFjcm9ueW0+U1FM PC9hY3JvbnltPiBzdGFuZGFyZCBidXQgaXMgYQogICAgIDxwcm9kdWN0bmFtZT5Qb3N0Z3Jl U1FMPC9wcm9kdWN0bmFtZT4gZXh0ZW5zaW9uLgogICAgPC9wYXJhPgogCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC91dGlscy9hZHQvbGlrZS5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0 L2xpa2UuYwppbmRleCAwMTUyNzIzYjJhNi4uN2IzZDFiNWJlNzEgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL3V0aWxzL2FkdC9saWtlLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0 L2xpa2UuYwpAQCAtMTQ3LDIyICsxNDcsMjggQEAgU0JfbG93ZXJfY2hhcih1bnNpZ25lZCBj aGFyIGMsIHBnX2xvY2FsZV90IGxvY2FsZSkKIHN0YXRpYyBpbmxpbmUgaW50CiBHZW5lcmlj TWF0Y2hUZXh0KGNvbnN0IGNoYXIgKnMsIGludCBzbGVuLCBjb25zdCBjaGFyICpwLCBpbnQg cGxlbiwgT2lkIGNvbGxhdGlvbikKIHsKLQlpZiAoY29sbGF0aW9uKQotCXsKLQkJcGdfbG9j YWxlX3QgbG9jYWxlID0gcGdfbmV3bG9jYWxlX2Zyb21fY29sbGF0aW9uKGNvbGxhdGlvbik7 CisJcGdfbG9jYWxlX3QgbG9jYWxlOwogCi0JCWlmICghbG9jYWxlLT5kZXRlcm1pbmlzdGlj KQotCQkJZXJlcG9ydChFUlJPUiwKLQkJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05P VF9TVVBQT1JURUQpLAotCQkJCQkgZXJybXNnKCJub25kZXRlcm1pbmlzdGljIGNvbGxhdGlv bnMgYXJlIG5vdCBzdXBwb3J0ZWQgZm9yIExJS0UiKSkpOworCWlmICghT2lkSXNWYWxpZChj b2xsYXRpb24pKQorCXsKKwkJLyoKKwkJICogVGhpcyB0eXBpY2FsbHkgbWVhbnMgdGhhdCB0 aGUgcGFyc2VyIGNvdWxkIG5vdCByZXNvbHZlIGEgY29uZmxpY3QKKwkJICogb2YgaW1wbGlj aXQgY29sbGF0aW9ucywgc28gcmVwb3J0IGl0IHRoYXQgd2F5LgorCQkgKi8KKwkJZXJlcG9y dChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0lOREVURVJNSU5BVEVfQ09MTEFUSU9O KSwKKwkJCQkgZXJybXNnKCJjb3VsZCBub3QgZGV0ZXJtaW5lIHdoaWNoIGNvbGxhdGlvbiB0 byB1c2UgZm9yIExJS0UiKSwKKwkJCQkgZXJyaGludCgiVXNlIHRoZSBDT0xMQVRFIGNsYXVz ZSB0byBzZXQgdGhlIGNvbGxhdGlvbiBleHBsaWNpdGx5LiIpKSk7CiAJfQogCisJbG9jYWxl ID0gcGdfbmV3bG9jYWxlX2Zyb21fY29sbGF0aW9uKGNvbGxhdGlvbik7CisKIAlpZiAocGdf ZGF0YWJhc2VfZW5jb2RpbmdfbWF4X2xlbmd0aCgpID09IDEpCi0JCXJldHVybiBTQl9NYXRj aFRleHQocywgc2xlbiwgcCwgcGxlbiwgMCk7CisJCXJldHVybiBTQl9NYXRjaFRleHQocywg c2xlbiwgcCwgcGxlbiwgbG9jYWxlKTsKIAllbHNlIGlmIChHZXREYXRhYmFzZUVuY29kaW5n KCkgPT0gUEdfVVRGOCkKLQkJcmV0dXJuIFVURjhfTWF0Y2hUZXh0KHMsIHNsZW4sIHAsIHBs ZW4sIDApOworCQlyZXR1cm4gVVRGOF9NYXRjaFRleHQocywgc2xlbiwgcCwgcGxlbiwgbG9j YWxlKTsKIAllbHNlCi0JCXJldHVybiBNQl9NYXRjaFRleHQocywgc2xlbiwgcCwgcGxlbiwg MCk7CisJCXJldHVybiBNQl9NYXRjaFRleHQocywgc2xlbiwgcCwgcGxlbiwgbG9jYWxlKTsK IH0KIAogc3RhdGljIGlubGluZSBpbnQKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxz L2FkdC9saWtlX21hdGNoLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvbGlrZV9tYXRjaC5j CmluZGV4IGY1NjFjYzE1ZTRjLi44NzAxMTQ1OWMzNCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvdXRpbHMvYWR0L2xpa2VfbWF0Y2guYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQv bGlrZV9tYXRjaC5jCkBAIC0xNTcsNyArMTU3LDkgQEAgTWF0Y2hUZXh0KGNvbnN0IGNoYXIg KnQsIGludCB0bGVuLCBjb25zdCBjaGFyICpwLCBpbnQgcGxlbiwgcGdfbG9jYWxlX3QgbG9j YWxlKQogCQkJICogdGhlIGZpcnN0IHBhdHRlcm4gYnl0ZSB0byBlYWNoIHRleHQgYnl0ZSB0 byBhdm9pZCByZWN1cnNpbmcKIAkJCSAqIG1vcmUgdGhhbiB3ZSBoYXZlIHRvLiAgVGhpcyBm YWN0IGFsc28gZ3VhcmFudGVlcyB0aGF0IHdlIGRvbid0CiAJCQkgKiBoYXZlIHRvIGNvbnNp ZGVyIGEgbWF0Y2ggdG8gdGhlIHplcm8tbGVuZ3RoIHN1YnN0cmluZyBhdCB0aGUKLQkJCSAq IGVuZCBvZiB0aGUgdGV4dC4KKwkJCSAqIGVuZCBvZiB0aGUgdGV4dC4gIFdpdGggYSBub25k ZXRlcm1pbmlzdGljIGNvbGxhdGlvbiwgd2UgY2FuJ3QKKwkJCSAqIHJlbHkgb24gdGhlIGZp cnN0IGJ5dGVzIGJlaW5nIGVxdWFsLCBzbyB3ZSBoYXZlIHRvIHJlY3Vyc2UgaW4KKwkJCSAq IGFueSBjYXNlLgogCQkJICovCiAJCQlpZiAoKnAgPT0gJ1xcJykKIAkJCXsKQEAgLTE3Miw3 ICsxNzQsNyBAQCBNYXRjaFRleHQoY29uc3QgY2hhciAqdCwgaW50IHRsZW4sIGNvbnN0IGNo YXIgKnAsIGludCBwbGVuLCBwZ19sb2NhbGVfdCBsb2NhbGUpCiAKIAkJCXdoaWxlICh0bGVu ID4gMCkKIAkJCXsKLQkJCQlpZiAoR0VUQ0hBUigqdCwgbG9jYWxlKSA9PSBmaXJzdHBhdCkK KwkJCQlpZiAoR0VUQ0hBUigqdCwgbG9jYWxlKSA9PSBmaXJzdHBhdCB8fCAobG9jYWxlICYm ICFsb2NhbGUtPmRldGVybWluaXN0aWMpKQogCQkJCXsKIAkJCQkJaW50CQkJbWF0Y2hlZCA9 IE1hdGNoVGV4dCh0LCB0bGVuLCBwLCBwbGVuLCBsb2NhbGUpOwogCkBAIC0xOTYsNiArMTk4 LDE0OCBAQCBNYXRjaFRleHQoY29uc3QgY2hhciAqdCwgaW50IHRsZW4sIGNvbnN0IGNoYXIg KnAsIGludCBwbGVuLCBwZ19sb2NhbGVfdCBsb2NhbGUpCiAJCQlOZXh0Qnl0ZShwLCBwbGVu KTsKIAkJCWNvbnRpbnVlOwogCQl9CisJCWVsc2UgaWYgKGxvY2FsZSAmJiAhbG9jYWxlLT5k ZXRlcm1pbmlzdGljKQorCQl7CisJCQkvKgorCQkJICogRm9yIG5vbmRldGVybWluaXN0aWMg bG9jYWxlcywgd2UgZmluZCB0aGUgbmV4dCBzdWJzdHJpbmcgb2YgdGhlCisJCQkgKiBwYXR0 ZXJuIHRoYXQgZG9lcyBub3QgY29udGFpbiB3aWxkY2FyZHMgYW5kIHRyeSB0byBmaW5kIGEK KwkJCSAqIG1hdGNoaW5nIHN1YnN0cmluZyBpbiB0aGUgdGV4dC4gIENydWNpYWxseSwgd2Ug Y2Fubm90IGRvIHRoaXMKKwkJCSAqIGNoYXJhY3RlciBieSBjaGFyYWN0ZXIsIGFzIGluIHRo ZSBub3JtYWwgY2FzZSwgYnV0IG11c3QgZG8gaXQKKwkJCSAqIHN1YnN0cmluZyBieSBzdWJz dHJpbmcsIHBhcnRpdGlvbmVkIGJ5IHRoZSB3aWxkY2FyZCBjaGFyYWN0ZXJzLgorCQkJICov CisJCQljb25zdCBjaGFyICpwMTsKKwkJCXNpemVfdAkJcDFsZW47CisJCQljb25zdCBjaGFy ICp0MTsKKwkJCXNpemVfdAkJdDFsZW47CisJCQlib29sCQlmb3VuZF9lc2NhcGU7CisJCQlj b25zdCBjaGFyICpzdWJwYXQ7CisJCQlzaXplX3QJCXN1YnBhdGxlbjsKKwkJCWNoYXIJICAg KmJ1ZiA9IE5VTEw7CisKKwkJCS8qCisJCQkgKiBEZXRlcm1pbmUgbmV4dCBzdWJzdHJpbmcg b2YgcGF0dGVybiB3aXRob3V0IHdpbGRjYXJkcy4gIHAgaXMKKwkJCSAqIHRoZSBzdGFydCBv ZiB0aGUgc3VicGF0dGVybiwgcDEgaXMgb25lIHBhc3QgdGhlIGxhc3QgYnl0ZS4gQWxzbwor CQkJICogdHJhY2sgaWYgd2UgZm91bmQgYW4gZXNjYXBlIGNoYXJhY3Rlci4KKwkJCSAqLwor CQkJcDEgPSBwOworCQkJcDFsZW4gPSBwbGVuOworCQkJZm91bmRfZXNjYXBlID0gZmFsc2U7 CisJCQl3aGlsZSAocDFsZW4gPiAwKQorCQkJeworCQkJCWlmICgqcDEgPT0gJ1xcJykKKwkJ CQl7CisJCQkJCWZvdW5kX2VzY2FwZSA9IHRydWU7CisJCQkJCU5leHRCeXRlKHAxLCBwMWxl bik7CisJCQkJCWlmIChwMWxlbiA9PSAwKQorCQkJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJ CQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX0VTQ0FQRV9TRVFVRU5DRSksCisJCQkJCQkJ CSBlcnJtc2coIkxJS0UgcGF0dGVybiBtdXN0IG5vdCBlbmQgd2l0aCBlc2NhcGUgY2hhcmFj dGVyIikpKTsKKwkJCQl9CisJCQkJZWxzZSBpZiAoKnAxID09ICdfJyB8fCAqcDEgPT0gJyUn KQorCQkJCQlicmVhazsKKwkJCQlOZXh0Qnl0ZShwMSwgcDFsZW4pOworCQkJfQorCisJCQkv KgorCQkJICogSWYgd2UgZm91bmQgYW4gZXNjYXBlIGNoYXJhY3RlciwgdGhlbiBtYWtlIGFu IHVuZXNjYXBlZCBjb3B5IG9mCisJCQkgKiB0aGUgc3VicGF0dGVybi4KKwkJCSAqLworCQkJ aWYgKGZvdW5kX2VzY2FwZSkKKwkJCXsKKwkJCQljaGFyCSAgICpiOworCisJCQkJYiA9IGJ1 ZiA9IHBhbGxvYyhwMSAtIHApOworCQkJCWZvciAoY29uc3QgY2hhciAqYyA9IHA7IGMgPCBw MTsgYysrKQorCQkJCXsKKwkJCQkJaWYgKCpjID09ICdcXCcpCisJCQkJCQk7CisJCQkJCWVs c2UKKwkJCQkJCSooYisrKSA9ICpjOworCQkJCX0KKworCQkJCXN1YnBhdCA9IGJ1ZjsKKwkJ CQlzdWJwYXRsZW4gPSBiIC0gYnVmOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCXN1YnBh dCA9IHA7CisJCQkJc3VicGF0bGVuID0gcDEgLSBwOworCQkJfQorCisJCQkvKgorCQkJICog U2hvcnRjdXQ6IElmIHRoaXMgaXMgdGhlIGVuZCBvZiB0aGUgcGF0dGVybiwgdGhlbiB0aGUg cmVzdCBvZgorCQkJICogdGhlIHRleHQgaGFzIHRvIG1hdGNoIHRoZSByZXN0IG9mIHRoZSBw YXR0ZXJuLgorCQkJICovCisJCQlpZiAocDFsZW4gPT0gMCkKKwkJCXsKKwkJCQlpbnQJCQlj bXA7CisKKwkJCQljbXAgPSBwZ19zdHJuY29sbChzdWJwYXQsIHN1YnBhdGxlbiwgdCwgdGxl biwgbG9jYWxlKTsKKworCQkJCWlmIChidWYpCisJCQkJCXBmcmVlKGJ1Zik7CisJCQkJaWYg KGNtcCA9PSAwKQorCQkJCQlyZXR1cm4gTElLRV9UUlVFOworCQkJCWVsc2UKKwkJCQkJcmV0 dXJuIExJS0VfRkFMU0U7CisJCQl9CisKKwkJCS8qCisJCQkgKiBOb3cgYnVpbGQgYSBzdWJz dHJpbmcgb2YgdGhlIHRleHQgYW5kIHRyeSB0byBtYXRjaCBpdCBhZ2FpbnN0CisJCQkgKiB0 aGUgc3VicGF0dGVybi4gIHQgaXMgdGhlIHN0YXJ0IG9mIHRoZSB0ZXh0LCB0MSBpcyBvbmUg cGFzdCB0aGUKKwkJCSAqIGxhc3QgYnl0ZS4gIFdlIHN0YXJ0IHdpdGggYSB6ZXJvLWxlbmd0 aCBzdHJpbmcuCisJCQkgKi8KKwkJCXQxID0gdDsKKwkJCXQxbGVuID0gdGxlbjsKKwkJCWZv ciAoOzspCisJCQl7CisJCQkJaW50CQkJY21wOworCisJCQkJQ0hFQ0tfRk9SX0lOVEVSUlVQ VFMoKTsKKworCQkJCWNtcCA9IHBnX3N0cm5jb2xsKHN1YnBhdCwgc3VicGF0bGVuLCB0LCAo dDEgLSB0KSwgbG9jYWxlKTsKKworCQkJCS8qCisJCQkJICogSWYgd2UgZm91bmQgYSBtYXRj aCwgd2UgaGF2ZSB0byB0ZXN0IGlmIHRoZSByZXN0IG9mIHBhdHRlcm4KKwkJCQkgKiBjYW4g bWF0Y2ggYWdhaW5zdCB0aGUgcmVzdCBvZiB0aGUgc3RyaW5nLiAgT3RoZXJ3aXNlIHdlCisJ CQkJICogaGF2ZSB0byBjb250aW51ZSBoZXJlIHRyeSBtYXRjaGluZyB3aXRoIGEgbG9uZ2Vy IHN1YnN0cmluZy4KKwkJCQkgKiAoVGhpcyBpcyBzaW1pbGFyIHRvIHRoZSByZWN1cnNpb24g Zm9yIHRoZSAnJScgd2lsZGNhcmQKKwkJCQkgKiBhYm92ZS4pCisJCQkJICoKKwkJCQkgKiBO b3RlIHRoYXQgd2UgY2FuJ3QganVzdCB3aW5kIGZvcndhcmQgcCBhbmQgdCBhbmQgY29udGlu dWUKKwkJCQkgKiB3aXRoIHRoZSBtYWluIGxvb3AuICBUaGlzIHdvdWxkIGZhaWwgZm9yIGV4 YW1wbGUgd2l0aAorCQkJCSAqCisJCQkJICogVSYnXDAwNjFcMDMwOGJjJyBMSUtFIFUmJ1ww MEU0X2MnIENPTExBVEUgaWdub3JlX2FjY2VudHMKKwkJCQkgKgorCQkJCSAqIFlvdSdkIGZp bmQgdGhhdCB0PVwwMDYxIG1hdGNoZXMgcD1cMDBFNCwgYnV0IHRoZW4gdGhlIHJlc3QKKwkJ CQkgKiB3b24ndCBtYXRjaDsgYnV0IHQ9XDAwNjFcMDMwOCBhbHNvIG1hdGNoZXMgcD1cMDBF NCwgYW5kCisJCQkJICogdGhlbiB0aGUgcmVzdCB3aWxsIG1hdGNoLgorCQkJCSAqLworCQkJ CWlmIChjbXAgPT0gMCkKKwkJCQl7CisJCQkJCWludAkJCW1hdGNoZWQgPSBNYXRjaFRleHQo dDEsIHQxbGVuLCBwMSwgcDFsZW4sIGxvY2FsZSk7CisKKwkJCQkJaWYgKG1hdGNoZWQgPT0g TElLRV9UUlVFKQorCQkJCQl7CisJCQkJCQlpZiAoYnVmKQorCQkJCQkJCXBmcmVlKGJ1Zik7 CisJCQkJCQlyZXR1cm4gbWF0Y2hlZDsKKwkJCQkJfQorCQkJCX0KKworCQkJCS8qCisJCQkJ ICogRGlkbid0IG1hdGNoLiAgSWYgd2UgdXNlZCB1cCB0aGUgd2hvbGUgdGV4dCwgdGhlbiB0 aGUgbWF0Y2gKKwkJCQkgKiBmYWlscy4gIE90aGVyd2lzZSwgdHJ5IGFnYWluIHdpdGggYSBs b25nZXIgc3Vic3RyaW5nLgorCQkJCSAqLworCQkJCWlmICh0MWxlbiA9PSAwKQorCQkJCQly ZXR1cm4gTElLRV9GQUxTRTsKKwkJCQllbHNlCisJCQkJCU5leHRDaGFyKHQxLCB0MWxlbik7 CisJCQl9CisJCQlpZiAoYnVmKQorCQkJCXBmcmVlKGJ1Zik7CisJCQljb250aW51ZTsKKwkJ fQogCQllbHNlIGlmIChHRVRDSEFSKCpwLCBsb2NhbGUpICE9IEdFVENIQVIoKnQsIGxvY2Fs ZSkpCiAJCXsKIAkJCS8qIG5vbi13aWxkY2FyZCBwYXR0ZXJuIGNoYXIgZmFpbHMgdG8gbWF0 Y2ggdGV4dCBjaGFyICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvbGlr ZV9zdXBwb3J0LmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvbGlrZV9zdXBwb3J0LmMKaW5k ZXggOGIxNTUwOWEzYmYuLmVlNzFjYTg5ZmZkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91 dGlscy9hZHQvbGlrZV9zdXBwb3J0LmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2xp a2Vfc3VwcG9ydC5jCkBAIC0yNzIsMjIgKzI3Miw2IEBAIG1hdGNoX3BhdHRlcm5fcHJlZml4 KE5vZGUgKmxlZnRvcCwKIAkJcmV0dXJuIE5JTDsKIAlwYXR0ID0gKENvbnN0ICopIHJpZ2h0 b3A7CiAKLQkvKgotCSAqIE5vdCBzdXBwb3J0ZWQgaWYgdGhlIGV4cHJlc3Npb24gY29sbGF0 aW9uIGlzIG5vbmRldGVybWluaXN0aWMuICBUaGUKLQkgKiBvcHRpbWl6ZWQgZXF1YWxpdHkg b3IgcHJlZml4IHRlc3RzIHVzZSBieXRld2lzZSBjb21wYXJpc29ucywgd2hpY2ggaXMKLQkg KiBub3QgY29uc2lzdGVudCB3aXRoIG5vbmRldGVybWluaXN0aWMgY29sbGF0aW9ucy4gIFRo ZSBhY3R1YWwKLQkgKiBwYXR0ZXJuLW1hdGNoaW5nIGltcGxlbWVudGF0aW9uIGZ1bmN0aW9u cyB3aWxsIGxhdGVyIGVycm9yIG91dCB0aGF0Ci0JICogcGF0dGVybi1tYXRjaGluZyBpcyBu b3Qgc3VwcG9ydGVkIHdpdGggbm9uZGV0ZXJtaW5pc3RpYyBjb2xsYXRpb25zLiAoV2UKLQkg KiBjb3VsZCBhbHNvIGVycm9yIG91dCBoZXJlLCBidXQgYnkgZG9pbmcgaXQgbGF0ZXIgd2Ug Z2V0IG1vcmUgcHJlY2lzZQotCSAqIGVycm9yIG1lc3NhZ2VzLikgIChJdCBzaG91bGQgYmUg cG9zc2libGUgdG8gc3VwcG9ydCBhdCBsZWFzdAotCSAqIFBhdHRlcm5fUHJlZml4X0V4YWN0 LCBidXQgbm8gcG9pbnQgYXMgbG9uZyBhcyB0aGUgYWN0dWFsCi0JICogcGF0dGVybi1tYXRj aGluZyBpbXBsZW1lbnRhdGlvbnMgZG9uJ3Qgc3VwcG9ydCBpdC4pCi0JICoKLQkgKiBleHBy X2NvbGwgaXMgbm90IHNldCBmb3IgYSBub24tY29sbGF0aW9uLWF3YXJlIGRhdGEgdHlwZSBz dWNoIGFzIGJ5dGVhLgotCSAqLwotCWlmIChleHByX2NvbGwgJiYgIWdldF9jb2xsYXRpb25f aXNkZXRlcm1pbmlzdGljKGV4cHJfY29sbCkpCi0JCXJldHVybiBOSUw7Ci0KIAkvKgogCSAq IFRyeSB0byBleHRyYWN0IGEgZml4ZWQgcHJlZml4IGZyb20gdGhlIHBhdHRlcm4uCiAJICov CkBAIC00MDQsNiArMzg4LDggQEAgbWF0Y2hfcGF0dGVybl9wcmVmaXgoTm9kZSAqbGVmdG9w LAogCXsKIAkJaWYgKCFvcF9pbl9vcGZhbWlseShlcW9wciwgb3BmYW1pbHkpKQogCQkJcmV0 dXJuIE5JTDsKKwkJaWYgKGluZGV4Y29sbGF0aW9uICE9IGV4cHJfY29sbCkKKwkJCXJldHVy biBOSUw7CiAJCWV4cHIgPSBtYWtlX29wY2xhdXNlKGVxb3ByLCBCT09MT0lELCBmYWxzZSwK IAkJCQkJCQkgKEV4cHIgKikgbGVmdG9wLCAoRXhwciAqKSBwcmVmaXgsCiAJCQkJCQkJIElu dmFsaWRPaWQsIGluZGV4Y29sbGF0aW9uKTsKQEAgLTQxMSw2ICszOTcsMTcgQEAgbWF0Y2hf cGF0dGVybl9wcmVmaXgoTm9kZSAqbGVmdG9wLAogCQlyZXR1cm4gcmVzdWx0OwogCX0KIAor CS8qCisJICogQW55dGhpbmcgb3RoZXIgdGhhbiBQYXR0ZXJuX1ByZWZpeF9FeGFjdCBpcyBu b3Qgc3VwcG9ydGVkIGlmIHRoZQorCSAqIGV4cHJlc3Npb24gY29sbGF0aW9uIGlzIG5vbmRl dGVybWluaXN0aWMuICBUaGUgb3B0aW1pemVkIGVxdWFsaXR5IG9yCisJICogcHJlZml4IHRl c3RzIHVzZSBieXRld2lzZSBjb21wYXJpc29ucywgd2hpY2ggaXMgbm90IGNvbnNpc3RlbnQg d2l0aAorCSAqIG5vbmRldGVybWluaXN0aWMgY29sbGF0aW9ucy4KKwkgKgorCSAqIGV4cHJf Y29sbCBpcyBub3Qgc2V0IGZvciBhIG5vbi1jb2xsYXRpb24tYXdhcmUgZGF0YSB0eXBlIHN1 Y2ggYXMgYnl0ZWEuCisJICovCisJaWYgKGV4cHJfY29sbCAmJiAhZ2V0X2NvbGxhdGlvbl9p c2RldGVybWluaXN0aWMoZXhwcl9jb2xsKSkKKwkJcmV0dXJuIE5JTDsKKwogCS8qCiAJICog T3RoZXJ3aXNlLCB3ZSBoYXZlIGEgbm9uZW1wdHkgcmVxdWlyZWQgcHJlZml4IG9mIHRoZSB2 YWx1ZXMuICBTb21lCiAJICogb3BjbGFzc2VzIHN1cHBvcnQgcHJlZml4IGNoZWNrcyBkaXJl Y3RseSwgb3RoZXJ3aXNlIHdlJ2xsIHRyeSB0bwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC9jb2xsYXRlLmljdS51dGY4Lm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvY29sbGF0ZS5pY3UudXRmOC5vdXQKaW5kZXggZGUxN2Y3ZGI2Y2UuLjc5ZTc2 ZDRiODUwIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NvbGxhdGUu aWN1LnV0Zjgub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY29sbGF0ZS5p Y3UudXRmOC5vdXQKQEAgLTEyNzQsNiArMTI3NCwzMCBAQCBDUkVBVEUgQ09MTEFUSU9OIGN0 ZXN0X2RldCAocHJvdmlkZXIgPSBpY3UsIGxvY2FsZSA9ICcnLCBkZXRlcm1pbmlzdGljID0g dHJ1ZSk7CiBOT1RJQ0U6ICB1c2luZyBzdGFuZGFyZCBmb3JtICJ1bmQiIGZvciBJQ1UgbG9j YWxlICIiCiBDUkVBVEUgQ09MTEFUSU9OIGN0ZXN0X25vbmRldCAocHJvdmlkZXIgPSBpY3Us IGxvY2FsZSA9ICcnLCBkZXRlcm1pbmlzdGljID0gZmFsc2UpOwogTk9USUNFOiAgdXNpbmcg c3RhbmRhcmQgZm9ybSAidW5kIiBmb3IgSUNVIGxvY2FsZSAiIgorU0VMRUNUICdhYmMnIExJ S0UgJ2FiYycgQ09MTEFURSBjdGVzdF9kZXQ7CisgP2NvbHVtbj8gCistLS0tLS0tLS0tCisg dAorKDEgcm93KQorCitTRUxFQ1QgJ2FiYycgTElLRSAnYVxiYycgQ09MTEFURSBjdGVzdF9k ZXQ7CisgP2NvbHVtbj8gCistLS0tLS0tLS0tCisgdAorKDEgcm93KQorCitTRUxFQ1QgJ2Fi YycgTElLRSAnYWJjJyBDT0xMQVRFIGN0ZXN0X25vbmRldDsKKyA/Y29sdW1uPyAKKy0tLS0t LS0tLS0KKyB0CisoMSByb3cpCisKK1NFTEVDVCAnYWJjJyBMSUtFICdhXGJjJyBDT0xMQVRF IGN0ZXN0X25vbmRldDsKKyA/Y29sdW1uPyAKKy0tLS0tLS0tLS0KKyB0CisoMSByb3cpCisK IENSRUFURSBUQUJMRSB0ZXN0NiAoYSBpbnQsIGIgdGV4dCk7CiAtLSBzYW1lIHN0cmluZyBp biBkaWZmZXJlbnQgbm9ybWFsIGZvcm1zCiBJTlNFUlQgSU5UTyB0ZXN0NiBWQUxVRVMgKDEs IFUmJ1wwMEU0YmMnKTsKQEAgLTEyOTgsNiArMTMyMiwxOSBAQCBTRUxFQ1QgKiBGUk9NIHRl c3Q2IFdIRVJFIGIgPSAnw6RiYycgQ09MTEFURSBjdGVzdF9ub25kZXQ7CiAgMiB8IGHMiGJj CiAoMiByb3dzKQogCitTRUxFQ1QgKiBGUk9NIHRlc3Q2IFdIRVJFIGIgTElLRSAnw6RiYycg Q09MTEFURSBjdGVzdF9kZXQ7CisgYSB8ICBiICAKKy0tLSstLS0tLQorIDEgfCDDpGJjCiso MSByb3cpCisKK1NFTEVDVCAqIEZST00gdGVzdDYgV0hFUkUgYiBMSUtFICfDpGJjJyBDT0xM QVRFIGN0ZXN0X25vbmRldDsKKyBhIHwgIGIgIAorLS0tKy0tLS0tCisgMSB8IMOkYmMKKyAy IHwgYcyIYmMKKygyIHJvd3MpCisKIC0tIHNhbWUgd2l0aCBhcnJheXMKIENSRUFURSBUQUJM RSB0ZXN0NmEgKGEgaW50LCBiIHRleHRbXSk7CiBJTlNFUlQgSU5UTyB0ZXN0NmEgVkFMVUVT ICgxLCBBUlJBWVtVJidcMDBFNGJjJ10pOwpAQCAtMTUxNCw3ICsxNTUxLDEyIEBAIFNFTEVD VCB4IEZST00gdGVzdDNjaSBXSEVSRSB4IDw+ICdhYmMnOwogKDIgcm93cykKIAogU0VMRUNU IHggRlJPTSB0ZXN0M2NpIFdIRVJFIHggTElLRSAnYSUnOwotRVJST1I6ICBub25kZXRlcm1p bmlzdGljIGNvbGxhdGlvbnMgYXJlIG5vdCBzdXBwb3J0ZWQgZm9yIExJS0UKKyAgeCAgCist LS0tLQorIGFiYworIEFCQworKDIgcm93cykKKwogU0VMRUNUIHggRlJPTSB0ZXN0M2NpIFdI RVJFIHggSUxJS0UgJ2ElJzsKIEVSUk9SOiAgbm9uZGV0ZXJtaW5pc3RpYyBjb2xsYXRpb25z IGFyZSBub3Qgc3VwcG9ydGVkIGZvciBJTElLRQogU0VMRUNUIHggRlJPTSB0ZXN0M2NpIFdI RVJFIHggU0lNSUxBUiBUTyAnYSUnOwpAQCAtMTYzMiw3ICsxNjc0LDEyIEBAIFNFTEVDVCB4 IEZST00gdGVzdDNicGNpIFdIRVJFIHggPD4gJ2FiYyc7CiAoMiByb3dzKQogCiBTRUxFQ1Qg eCBGUk9NIHRlc3QzYnBjaSBXSEVSRSB4IExJS0UgJ2ElJzsKLUVSUk9SOiAgbm9uZGV0ZXJt aW5pc3RpYyBjb2xsYXRpb25zIGFyZSBub3Qgc3VwcG9ydGVkIGZvciBMSUtFCisgIHggIAor LS0tLS0KKyBhYmMKKyBBQkMKKygyIHJvd3MpCisKIFNFTEVDVCB4IEZST00gdGVzdDNicGNp IFdIRVJFIHggSUxJS0UgJ2ElJzsKIEVSUk9SOiAgbm9uZGV0ZXJtaW5pc3RpYyBjb2xsYXRp b25zIGFyZSBub3Qgc3VwcG9ydGVkIGZvciBJTElLRQogU0VMRUNUIHggRlJPTSB0ZXN0M2Jw Y2kgV0hFUkUgeCBTSU1JTEFSIFRPICdhJSc7CkBAIC0xNzI5LDcgKzE3NzYsNyBAQCBTRUxF Q1Qgc3RyaW5nX3RvX2FycmF5KCdBQkNERUZHSEknOjpjaGFyKDkpIENPTExBVEUgY2FzZV9p bnNlbnNpdGl2ZSwgTlVMTCwgJ2InKQogLS0gVGhpcyB0ZXN0cyB0aGUgaXNzdWUgZGVzY3Jp YmVkIGluIG1hdGNoX3BhdHRlcm5fcHJlZml4KCkuICBJbiB0aGUKIC0tIGFic2VuY2Ugb2Yg dGhhdCBjaGVjaywgdGhlIGNhc2VfaW5zZW5zaXRpdmUgdGVzdHMgYmVsb3cgd291bGQKIC0t IHJldHVybiBubyByb3dzIHdoZXJlIHRoZXkgc2hvdWxkIGxvZ2ljYWxseSByZXR1cm4gb25l LgotQ1JFQVRFIFRBQkxFIHRlc3Q0YyAoeCB0ZXh0IENPTExBVEUgIkMiKTsKK0NSRUFURSBU QUJMRSB0ZXN0NGMgKHggdGV4dCBDT0xMQVRFIGNhc2VfaW5zZW5zaXRpdmUpOwogSU5TRVJU IElOVE8gdGVzdDRjIFZBTFVFUyAoJ2FiYycpOwogQ1JFQVRFIElOREVYIE9OIHRlc3Q0YyAo eCk7CiBTRVQgZW5hYmxlX3NlcXNjYW4gPSBvZmY7CkBAIC0xNzQzLDEwICsxNzkwLDE4IEBA IFNFTEVDVCB4IEZST00gdGVzdDRjIFdIRVJFIHggTElLRSAnQUJDJScgQ09MTEFURSBjYXNl X3NlbnNpdGl2ZTsgIC0tIG9rLCBubyByb3dzCiAtLS0KICgwIHJvd3MpCiAKLVNFTEVDVCB4 IEZST00gdGVzdDRjIFdIRVJFIHggTElLRSAnQUJDJyBDT0xMQVRFIGNhc2VfaW5zZW5zaXRp dmU7ICAtLSBlcnJvcgotRVJST1I6ICBub25kZXRlcm1pbmlzdGljIGNvbGxhdGlvbnMgYXJl IG5vdCBzdXBwb3J0ZWQgZm9yIExJS0UKLVNFTEVDVCB4IEZST00gdGVzdDRjIFdIRVJFIHgg TElLRSAnQUJDJScgQ09MTEFURSBjYXNlX2luc2Vuc2l0aXZlOyAgLS0gZXJyb3IKLUVSUk9S OiAgbm9uZGV0ZXJtaW5pc3RpYyBjb2xsYXRpb25zIGFyZSBub3Qgc3VwcG9ydGVkIGZvciBM SUtFCitTRUxFQ1QgeCBGUk9NIHRlc3Q0YyBXSEVSRSB4IExJS0UgJ0FCQycgQ09MTEFURSBj YXNlX2luc2Vuc2l0aXZlOyAgLS0gb2sKKyAgeCAgCistLS0tLQorIGFiYworKDEgcm93KQor CitTRUxFQ1QgeCBGUk9NIHRlc3Q0YyBXSEVSRSB4IExJS0UgJ0FCQyUnIENPTExBVEUgY2Fz ZV9pbnNlbnNpdGl2ZTsgIC0tIG9rCisgIHggIAorLS0tLS0KKyBhYmMKKygxIHJvdykKKwog UkVTRVQgZW5hYmxlX3NlcXNjYW47CiAtLSBVbmljb2RlIHNwZWNpYWwgY2FzZTogZGlmZmVy ZW50IHZhcmlhbnRzIG9mIEdyZWVrIGxvd2VyIGNhc2Ugc2lnbWEuCiAtLSBBIG5haXZlIGlt cGxlbWVudGF0aW9uIGxpa2UgY2l0ZXh0IHRoYXQganVzdCBkb2VzIGxvd2VyKHgpID0KQEAg LTE4NDAsNiArMTg5NSwxMjYgQEAgU0VMRUNUICogRlJPTSB0ZXN0NCBXSEVSRSBiID0gJ0Nv dGUnIENPTExBVEUgY2FzZV9pbnNlbnNpdGl2ZTsKICAxIHwgY290ZQogKDEgcm93KQogCist LSBUaGlzIGlzIGEgdHJpY2t5IG9uZS4gIEEgbmFpdmUgaW1wbGVtZW50YXRpb24gd291bGQg Zmlyc3QgdGVzdAorLS0gXDAwRTQgbWF0Y2hlcyBcMDA2MSwgd2hpY2ggaXMgdHJ1ZSB1bmRl ciBpZ25vcmVfYWNjZW50cywgYnV0IHRoZW4KKy0tIHRoZSByZXN0IG9mIHRoZSBzdHJpbmcg d29uJ3QgbWF0Y2ggYW55bW9yZS4gIFRoZXJlZm9yZSwgdGhlCistLSBhbGdvcml0aG0gaGFz IHRvIHRlc3Qgd2hldGhlciB0aGUgcmVzdCBvZiB0aGUgc3RyaW5nIG1hdGNoZXMsIGFuZAor LS0gaWYgbm90IHRyeSBtYXRjaGluZyBcMDBFNCBhZ2FpbnN0IGEgbG9uZ2VyIHN1YnN0cmlu ZyBsaWtlCistLSBcMDA2MVwwMzA4LCB3aGljaCB3aWxsIHRoZW4gd29yayBvdXQuCitTRUxF Q1QgVSYnXDAwNjFcMDMwOGJjJyBMSUtFIFUmJ1wwMEU0X2MnIENPTExBVEUgaWdub3JlX2Fj Y2VudHM7CisgP2NvbHVtbj8gCistLS0tLS0tLS0tCisgdAorKDEgcm93KQorCistLSBhbmQg aW4gcmV2ZXJzZToKK1NFTEVDVCBVJidcMDBFNGJjJyBMSUtFIFUmJ1wwMDYxXDAzMDhfYycg Q09MTEFURSBpZ25vcmVfYWNjZW50czsKKyA/Y29sdW1uPyAKKy0tLS0tLS0tLS0KKyB0Ciso MSByb3cpCisKKy0tIGlubmVyICUgbWF0Y2hlcyBiOgorU0VMRUNUIFUmJ1wwMDYxXDAzMDhi YycgTElLRSBVJidcMDBFNCVjJyBDT0xMQVRFIGlnbm9yZV9hY2NlbnRzOworID9jb2x1bW4/ IAorLS0tLS0tLS0tLQorIHQKKygxIHJvdykKKworLS0gaW5uZXIgJSUgbWF0Y2hlcyBiIHRo ZW4gemVybzoKK1NFTEVDVCBVJidcMDA2MVwwMzA4YmMnIExJS0UgVSYnXDAwRTQlJWMnIENP TExBVEUgaWdub3JlX2FjY2VudHM7CisgP2NvbHVtbj8gCistLS0tLS0tLS0tCisgdAorKDEg cm93KQorCistLSBpbm5lciAlJSBtYXRjaGVzIGIgdGhlbiB6ZXJvOgorU0VMRUNUIFUmJ2Ni XDAwNjFcMDMwOCcgTElLRSBVJidjJSVcMDBFNCcgQ09MTEFURSBpZ25vcmVfYWNjZW50czsK KyA/Y29sdW1uPyAKKy0tLS0tLS0tLS0KKyB0CisoMSByb3cpCisKKy0tIHRyYWlsaW5nIF8g bWF0Y2hlcyB0d28gY29kZXBvaW50cyB0aGF0IGZvcm0gb25lIGdyYXBoZW1lOgorU0VMRUNU IFUmJ2NiXDAwNjFcMDMwOCcgTElLRSBVJidjYl8nIENPTExBVEUgaWdub3JlX2FjY2VudHM7 CisgP2NvbHVtbj8gCistLS0tLS0tLS0tCisgZgorKDEgcm93KQorCistLSB0cmFpbGluZyBf XyBtYXRjaGVzIHR3byBjb2RlcG9pbnRzIHRoYXQgZm9ybSBvbmUgZ3JhcGhlbWU6CitTRUxF Q1QgVSYnY2JcMDA2MVwwMzA4JyBMSUtFIFUmJ2NiX18nIENPTExBVEUgaWdub3JlX2FjY2Vu dHM7CisgP2NvbHVtbj8gCistLS0tLS0tLS0tCisgdAorKDEgcm93KQorCistLSBsZWFkaW5n ICUgbWF0Y2hlcyB6ZXJvOgorU0VMRUNUIFUmJ1wwMDYxXDAzMDhiYycgTElLRSBVJiclXDAw RTRiYycgQ09MTEFURSBpZ25vcmVfYWNjZW50czsKKyA/Y29sdW1uPyAKKy0tLS0tLS0tLS0K KyB0CisoMSByb3cpCisKKy0tIGxlYWRpbmcgJSBtYXRjaGVzIHplcm8gKHdpdGggbGF0ZXIg JSk6CitTRUxFQ1QgVSYnXDAwNjFcMDMwOGJjJyBMSUtFIFUmJyVcMDBFNCVjJyBDT0xMQVRF IGlnbm9yZV9hY2NlbnRzOworID9jb2x1bW4/IAorLS0tLS0tLS0tLQorIHQKKygxIHJvdykK KworLS0gdHJhaWxpbmcgJSBtYXRjaGVzIHplcm86CitTRUxFQ1QgVSYnXDAwNjFcMDMwOGJj JyBMSUtFIFUmJ1wwMEU0YmMlJyBDT0xMQVRFIGlnbm9yZV9hY2NlbnRzOworID9jb2x1bW4/ IAorLS0tLS0tLS0tLQorIHQKKygxIHJvdykKKworLS0gdHJhaWxpbmcgJSBtYXRjaGVzIHpl cm8gKHdpdGggcHJldmlvdXMgJSk6CitTRUxFQ1QgVSYnXDAwNjFcMDMwOGJjJyBMSUtFIFUm J1wwMEU0JWMlJyBDT0xMQVRFIGlnbm9yZV9hY2NlbnRzOworID9jb2x1bW4/IAorLS0tLS0t LS0tLQorIHQKKygxIHJvdykKKworLS0gXyB2ZXJzdXMgdHdvIGNvZGVwb2ludHMgdGhhdCBm b3JtIG9uZSBncmFwaGVtZToKK1NFTEVDVCBVJidcMDA2MVwwMzA4YmMnIExJS0UgVSYnX2Jj JyBDT0xMQVRFIGlnbm9yZV9hY2NlbnRzOworID9jb2x1bW4/IAorLS0tLS0tLS0tLQorIHQK KygxIHJvdykKKworLS0gKGFjdHVhbGx5IHRoaXMgbWF0Y2hlcyBiZWNhdXNlKQorU0VMRUNU IFUmJ1wwMzA4YmMnID0gJ2JjJyBDT0xMQVRFIGlnbm9yZV9hY2NlbnRzOworID9jb2x1bW4/ IAorLS0tLS0tLS0tLQorIHQKKygxIHJvdykKKworLS0gX18gbWF0Y2hlcyB0d28gY29kZXBv aW50cyB0aGF0IGZvcm0gb25lIGdyYXBoZW1lOgorU0VMRUNUIFUmJ1wwMDYxXDAzMDhiYycg TElLRSBVJidfX2JjJyBDT0xMQVRFIGlnbm9yZV9hY2NlbnRzOworID9jb2x1bW4/IAorLS0t LS0tLS0tLQorIHQKKygxIHJvdykKKworLS0gXyBtYXRjaGVzIG9uZSBjb2RlcG9pbnQgdGhh dCBmb3JtcyBoYWxmIGEgZ3JhcGhlbWU6CitTRUxFQ1QgVSYnXDAwNjFcMDMwOGJjJyBMSUtF IFUmJ19cMDMwOGJjJyBDT0xMQVRFIGlnbm9yZV9hY2NlbnRzOworID9jb2x1bW4/IAorLS0t LS0tLS0tLQorIHQKKygxIHJvdykKKworLS0gZG9lc24ndCBtYXRjaCBiZWNhdXNlIFwwMGU0 IGRvZXNuJ3QgbWF0Y2ggb25seSBcMDMwOAorU0VMRUNUIFUmJ1wwMDYxXDAzMDhiYycgTElL RSBVJidfXDAwZTRiYycgQ09MTEFURSBpZ25vcmVfYWNjZW50czsKKyA/Y29sdW1uPyAKKy0t LS0tLS0tLS0KKyBmCisoMSByb3cpCisKKy0tIGVzY2FwZSBjaGFyYWN0ZXIgYXQgZW5kIG9m IHBhdHRlcm4KK1NFTEVDVCAnZm9veCcgTElLRSAnZm9vXCcgQ09MTEFURSBpZ25vcmVfYWNj ZW50czsKK0VSUk9SOiAgTElLRSBwYXR0ZXJuIG11c3Qgbm90IGVuZCB3aXRoIGVzY2FwZSBj aGFyYWN0ZXIKIC0tIGZvcmVpZ24ga2V5cyAobWl4aW5nIGRpZmZlcmVudCBub25kZXRlcm1p bmlzdGljIGNvbGxhdGlvbnMgbm90IGFsbG93ZWQpCiBDUkVBVEUgVEFCTEUgdGVzdDEwcGsg KHggdGV4dCBDT0xMQVRFIGNhc2Vfc2Vuc2l0aXZlIFBSSU1BUlkgS0VZKTsKIENSRUFURSBU QUJMRSB0ZXN0MTBmayAoeCB0ZXh0IENPTExBVEUgY2FzZV9pbnNlbnNpdGl2ZSBSRUZFUkVO Q0VTIHRlc3QxMHBrICh4KSBPTiBVUERBVEUgQ0FTQ0FERSBPTiBERUxFVEUgQ0FTQ0FERSk7 ICAtLSBlcnJvcgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvY29sbGF0ZS5p Y3UudXRmOC5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9jb2xsYXRlLmljdS51dGY4LnNx bAppbmRleCAwYzk0OTFjMjYwZS4uNzk3ZTkzYWM3MTQgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0 L3JlZ3Jlc3Mvc3FsL2NvbGxhdGUuaWN1LnV0Zjguc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jl c3Mvc3FsL2NvbGxhdGUuaWN1LnV0Zjguc3FsCkBAIC01MTQsNiArNTE0LDEyIEBAIENSRUFU RSBDT0xMQVRJT04gdGVzdGNvbGxfcnVsZXN4IChwcm92aWRlciA9IGljdSwgbG9jYWxlID0g JycsIHJ1bGVzID0gJyEhd3JvbmchCiBDUkVBVEUgQ09MTEFUSU9OIGN0ZXN0X2RldCAocHJv dmlkZXIgPSBpY3UsIGxvY2FsZSA9ICcnLCBkZXRlcm1pbmlzdGljID0gdHJ1ZSk7CiBDUkVB VEUgQ09MTEFUSU9OIGN0ZXN0X25vbmRldCAocHJvdmlkZXIgPSBpY3UsIGxvY2FsZSA9ICcn LCBkZXRlcm1pbmlzdGljID0gZmFsc2UpOwogCitTRUxFQ1QgJ2FiYycgTElLRSAnYWJjJyBD T0xMQVRFIGN0ZXN0X2RldDsKK1NFTEVDVCAnYWJjJyBMSUtFICdhXGJjJyBDT0xMQVRFIGN0 ZXN0X2RldDsKKworU0VMRUNUICdhYmMnIExJS0UgJ2FiYycgQ09MTEFURSBjdGVzdF9ub25k ZXQ7CitTRUxFQ1QgJ2FiYycgTElLRSAnYVxiYycgQ09MTEFURSBjdGVzdF9ub25kZXQ7CisK IENSRUFURSBUQUJMRSB0ZXN0NiAoYSBpbnQsIGIgdGV4dCk7CiAtLSBzYW1lIHN0cmluZyBp biBkaWZmZXJlbnQgbm9ybWFsIGZvcm1zCiBJTlNFUlQgSU5UTyB0ZXN0NiBWQUxVRVMgKDEs IFUmJ1wwMEU0YmMnKTsKQEAgLTUyMiw2ICs1MjgsOSBAQCBDUkVBVEUgVEFCTEUgdGVzdDYg KGEgaW50LCBiIHRleHQpOwogU0VMRUNUICogRlJPTSB0ZXN0NiBXSEVSRSBiID0gJ8OkYmMn IENPTExBVEUgY3Rlc3RfZGV0OwogU0VMRUNUICogRlJPTSB0ZXN0NiBXSEVSRSBiID0gJ8Ok YmMnIENPTExBVEUgY3Rlc3Rfbm9uZGV0OwogCitTRUxFQ1QgKiBGUk9NIHRlc3Q2IFdIRVJF IGIgTElLRSAnw6RiYycgQ09MTEFURSBjdGVzdF9kZXQ7CitTRUxFQ1QgKiBGUk9NIHRlc3Q2 IFdIRVJFIGIgTElLRSAnw6RiYycgQ09MTEFURSBjdGVzdF9ub25kZXQ7CisKIC0tIHNhbWUg d2l0aCBhcnJheXMKIENSRUFURSBUQUJMRSB0ZXN0NmEgKGEgaW50LCBiIHRleHRbXSk7CiBJ TlNFUlQgSU5UTyB0ZXN0NmEgVkFMVUVTICgxLCBBUlJBWVtVJidcMDBFNGJjJ10pOwpAQCAt NjM3LDE0ICs2NDYsMTQgQEAgQ1JFQVRFIFVOSVFVRSBJTkRFWCBPTiB0ZXN0M2JwY2kgKHgp OyAgLS0gZXJyb3IKIC0tIFRoaXMgdGVzdHMgdGhlIGlzc3VlIGRlc2NyaWJlZCBpbiBtYXRj aF9wYXR0ZXJuX3ByZWZpeCgpLiAgSW4gdGhlCiAtLSBhYnNlbmNlIG9mIHRoYXQgY2hlY2ss IHRoZSBjYXNlX2luc2Vuc2l0aXZlIHRlc3RzIGJlbG93IHdvdWxkCiAtLSByZXR1cm4gbm8g cm93cyB3aGVyZSB0aGV5IHNob3VsZCBsb2dpY2FsbHkgcmV0dXJuIG9uZS4KLUNSRUFURSBU QUJMRSB0ZXN0NGMgKHggdGV4dCBDT0xMQVRFICJDIik7CitDUkVBVEUgVEFCTEUgdGVzdDRj ICh4IHRleHQgQ09MTEFURSBjYXNlX2luc2Vuc2l0aXZlKTsKIElOU0VSVCBJTlRPIHRlc3Q0 YyBWQUxVRVMgKCdhYmMnKTsKIENSRUFURSBJTkRFWCBPTiB0ZXN0NGMgKHgpOwogU0VUIGVu YWJsZV9zZXFzY2FuID0gb2ZmOwogU0VMRUNUIHggRlJPTSB0ZXN0NGMgV0hFUkUgeCBMSUtF ICdBQkMnIENPTExBVEUgY2FzZV9zZW5zaXRpdmU7ICAtLSBvaywgbm8gcm93cwogU0VMRUNU IHggRlJPTSB0ZXN0NGMgV0hFUkUgeCBMSUtFICdBQkMlJyBDT0xMQVRFIGNhc2Vfc2Vuc2l0 aXZlOyAgLS0gb2ssIG5vIHJvd3MKLVNFTEVDVCB4IEZST00gdGVzdDRjIFdIRVJFIHggTElL RSAnQUJDJyBDT0xMQVRFIGNhc2VfaW5zZW5zaXRpdmU7ICAtLSBlcnJvcgotU0VMRUNUIHgg RlJPTSB0ZXN0NGMgV0hFUkUgeCBMSUtFICdBQkMlJyBDT0xMQVRFIGNhc2VfaW5zZW5zaXRp dmU7ICAtLSBlcnJvcgorU0VMRUNUIHggRlJPTSB0ZXN0NGMgV0hFUkUgeCBMSUtFICdBQkMn IENPTExBVEUgY2FzZV9pbnNlbnNpdGl2ZTsgIC0tIG9rCitTRUxFQ1QgeCBGUk9NIHRlc3Q0 YyBXSEVSRSB4IExJS0UgJ0FCQyUnIENPTExBVEUgY2FzZV9pbnNlbnNpdGl2ZTsgIC0tIG9r CiBSRVNFVCBlbmFibGVfc2Vxc2NhbjsKIAogLS0gVW5pY29kZSBzcGVjaWFsIGNhc2U6IGRp ZmZlcmVudCB2YXJpYW50cyBvZiBHcmVlayBsb3dlciBjYXNlIHNpZ21hLgpAQCAtNjg3LDYg KzY5Niw0NiBAQCBDUkVBVEUgVEFCTEUgdGVzdDQgKGEgaW50LCBiIHRleHQpOwogU0VMRUNU ICogRlJPTSB0ZXN0NCBXSEVSRSBiID0gJ0NvdGUnIENPTExBVEUgaWdub3JlX2FjY2VudHM7 ICAtLSBzdGlsbCBjYXNlLXNlbnNpdGl2ZQogU0VMRUNUICogRlJPTSB0ZXN0NCBXSEVSRSBi ID0gJ0NvdGUnIENPTExBVEUgY2FzZV9pbnNlbnNpdGl2ZTsKIAorLS0gVGhpcyBpcyBhIHRy aWNreSBvbmUuICBBIG5haXZlIGltcGxlbWVudGF0aW9uIHdvdWxkIGZpcnN0IHRlc3QKKy0t IFwwMEU0IG1hdGNoZXMgXDAwNjEsIHdoaWNoIGlzIHRydWUgdW5kZXIgaWdub3JlX2FjY2Vu dHMsIGJ1dCB0aGVuCistLSB0aGUgcmVzdCBvZiB0aGUgc3RyaW5nIHdvbid0IG1hdGNoIGFu eW1vcmUuICBUaGVyZWZvcmUsIHRoZQorLS0gYWxnb3JpdGhtIGhhcyB0byB0ZXN0IHdoZXRo ZXIgdGhlIHJlc3Qgb2YgdGhlIHN0cmluZyBtYXRjaGVzLCBhbmQKKy0tIGlmIG5vdCB0cnkg bWF0Y2hpbmcgXDAwRTQgYWdhaW5zdCBhIGxvbmdlciBzdWJzdHJpbmcgbGlrZQorLS0gXDAw NjFcMDMwOCwgd2hpY2ggd2lsbCB0aGVuIHdvcmsgb3V0LgorU0VMRUNUIFUmJ1wwMDYxXDAz MDhiYycgTElLRSBVJidcMDBFNF9jJyBDT0xMQVRFIGlnbm9yZV9hY2NlbnRzOworLS0gYW5k IGluIHJldmVyc2U6CitTRUxFQ1QgVSYnXDAwRTRiYycgTElLRSBVJidcMDA2MVwwMzA4X2Mn IENPTExBVEUgaWdub3JlX2FjY2VudHM7CistLSBpbm5lciAlIG1hdGNoZXMgYjoKK1NFTEVD VCBVJidcMDA2MVwwMzA4YmMnIExJS0UgVSYnXDAwRTQlYycgQ09MTEFURSBpZ25vcmVfYWNj ZW50czsKKy0tIGlubmVyICUlIG1hdGNoZXMgYiB0aGVuIHplcm86CitTRUxFQ1QgVSYnXDAw NjFcMDMwOGJjJyBMSUtFIFUmJ1wwMEU0JSVjJyBDT0xMQVRFIGlnbm9yZV9hY2NlbnRzOwor LS0gaW5uZXIgJSUgbWF0Y2hlcyBiIHRoZW4gemVybzoKK1NFTEVDVCBVJidjYlwwMDYxXDAz MDgnIExJS0UgVSYnYyUlXDAwRTQnIENPTExBVEUgaWdub3JlX2FjY2VudHM7CistLSB0cmFp bGluZyBfIG1hdGNoZXMgdHdvIGNvZGVwb2ludHMgdGhhdCBmb3JtIG9uZSBncmFwaGVtZToK K1NFTEVDVCBVJidjYlwwMDYxXDAzMDgnIExJS0UgVSYnY2JfJyBDT0xMQVRFIGlnbm9yZV9h Y2NlbnRzOworLS0gdHJhaWxpbmcgX18gbWF0Y2hlcyB0d28gY29kZXBvaW50cyB0aGF0IGZv cm0gb25lIGdyYXBoZW1lOgorU0VMRUNUIFUmJ2NiXDAwNjFcMDMwOCcgTElLRSBVJidjYl9f JyBDT0xMQVRFIGlnbm9yZV9hY2NlbnRzOworLS0gbGVhZGluZyAlIG1hdGNoZXMgemVybzoK K1NFTEVDVCBVJidcMDA2MVwwMzA4YmMnIExJS0UgVSYnJVwwMEU0YmMnIENPTExBVEUgaWdu b3JlX2FjY2VudHM7CistLSBsZWFkaW5nICUgbWF0Y2hlcyB6ZXJvICh3aXRoIGxhdGVyICUp OgorU0VMRUNUIFUmJ1wwMDYxXDAzMDhiYycgTElLRSBVJiclXDAwRTQlYycgQ09MTEFURSBp Z25vcmVfYWNjZW50czsKKy0tIHRyYWlsaW5nICUgbWF0Y2hlcyB6ZXJvOgorU0VMRUNUIFUm J1wwMDYxXDAzMDhiYycgTElLRSBVJidcMDBFNGJjJScgQ09MTEFURSBpZ25vcmVfYWNjZW50 czsKKy0tIHRyYWlsaW5nICUgbWF0Y2hlcyB6ZXJvICh3aXRoIHByZXZpb3VzICUpOgorU0VM RUNUIFUmJ1wwMDYxXDAzMDhiYycgTElLRSBVJidcMDBFNCVjJScgQ09MTEFURSBpZ25vcmVf YWNjZW50czsKKy0tIF8gdmVyc3VzIHR3byBjb2RlcG9pbnRzIHRoYXQgZm9ybSBvbmUgZ3Jh cGhlbWU6CitTRUxFQ1QgVSYnXDAwNjFcMDMwOGJjJyBMSUtFIFUmJ19iYycgQ09MTEFURSBp Z25vcmVfYWNjZW50czsKKy0tIChhY3R1YWxseSB0aGlzIG1hdGNoZXMgYmVjYXVzZSkKK1NF TEVDVCBVJidcMDMwOGJjJyA9ICdiYycgQ09MTEFURSBpZ25vcmVfYWNjZW50czsKKy0tIF9f IG1hdGNoZXMgdHdvIGNvZGVwb2ludHMgdGhhdCBmb3JtIG9uZSBncmFwaGVtZToKK1NFTEVD VCBVJidcMDA2MVwwMzA4YmMnIExJS0UgVSYnX19iYycgQ09MTEFURSBpZ25vcmVfYWNjZW50 czsKKy0tIF8gbWF0Y2hlcyBvbmUgY29kZXBvaW50IHRoYXQgZm9ybXMgaGFsZiBhIGdyYXBo ZW1lOgorU0VMRUNUIFUmJ1wwMDYxXDAzMDhiYycgTElLRSBVJidfXDAzMDhiYycgQ09MTEFU RSBpZ25vcmVfYWNjZW50czsKKy0tIGRvZXNuJ3QgbWF0Y2ggYmVjYXVzZSBcMDBlNCBkb2Vz bid0IG1hdGNoIG9ubHkgXDAzMDgKK1NFTEVDVCBVJidcMDA2MVwwMzA4YmMnIExJS0UgVSYn X1wwMGU0YmMnIENPTExBVEUgaWdub3JlX2FjY2VudHM7CistLSBlc2NhcGUgY2hhcmFjdGVy IGF0IGVuZCBvZiBwYXR0ZXJuCitTRUxFQ1QgJ2Zvb3gnIExJS0UgJ2Zvb1wnIENPTExBVEUg aWdub3JlX2FjY2VudHM7CisKIC0tIGZvcmVpZ24ga2V5cyAobWl4aW5nIGRpZmZlcmVudCBu b25kZXRlcm1pbmlzdGljIGNvbGxhdGlvbnMgbm90IGFsbG93ZWQpCiBDUkVBVEUgVEFCTEUg dGVzdDEwcGsgKHggdGV4dCBDT0xMQVRFIGNhc2Vfc2Vuc2l0aXZlIFBSSU1BUlkgS0VZKTsK IENSRUFURSBUQUJMRSB0ZXN0MTBmayAoeCB0ZXh0IENPTExBVEUgY2FzZV9pbnNlbnNpdGl2 ZSBSRUZFUkVOQ0VTIHRlc3QxMHBrICh4KSBPTiBVUERBVEUgQ0FTQ0FERSBPTiBERUxFVEUg Q0FTQ0FERSk7ICAtLSBlcnJvcgoKYmFzZS1jb21taXQ6IGMxYzA5MDA3ZTIxOWFlNjhkMWY4 NDI4YTU0YmFmNjhjY2MxZjg2ODMKLS0gCjIuNDcuMAoK --------------7nLBpcp6Ho0a7Zh1HpSj3Pzz--