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 1uX1wh-004mZD-Em for pgsql-hackers@arkaria.postgresql.org; Wed, 02 Jul 2025 18:12:36 +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 1uX1wf-004yHG-FH for pgsql-hackers@arkaria.postgresql.org; Wed, 02 Jul 2025 18:12:34 +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 1uX1wd-004yGw-QG for pgsql-hackers@lists.postgresql.org; Wed, 02 Jul 2025 18:12:33 +0000 Received: from flow-a3-smtp.messagingengine.com ([103.168.172.138]) by makus.postgresql.org with smtp (Exim 4.96) (envelope-from ) id 1uX1wZ-005CSL-35 for pgsql-hackers@postgresql.org; Wed, 02 Jul 2025 18:12:31 +0000 Received: from phl-compute-02.internal (phl-compute-02.phl.internal [10.202.2.42]) by mailflow.phl.internal (Postfix) with ESMTP id D187A13801DB; Wed, 2 Jul 2025 14:12:26 -0400 (EDT) Received: from phl-imap-18 ([10.202.2.89]) by phl-compute-02.internal (MEProxy); Wed, 02 Jul 2025 14:12:26 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=burd.me; 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=1751479946; x=1751487146; bh=0l5QlzE4U6 qR4ClJEbLFnwYeNlpK5XaWR5FUwSR7b8k=; b=CSMJxFWlszjblDwerxfb3wNu+Z e/GBNKCtMmguSFJvVFI2/z8CGixmpyh1Pfe+IypV0z1+BSM359mtz5aj6Lzgnif1 DqPruzP5smIn5b9mEgLMeImAsRck2xK8KO/RTu6oKhOVYBzdseIbJ2MIH1ig+5Q8 uPsDdfG6e5/+sMAgooyXN4lQS5JhuiwtcXprl6HG3IwXIWpkEuGJmy30c//Thnrr +ve5VGRxxmiTw5IKvHRo2Sh4UzJr193VNWH8vuEGKtiylS14BDEqVl/tcA++/qjA puPBy3HVi4QT+EtAr8+QKoHvhAmRgMaNtnq9stVuWP+lf8s/7JTSjYmuY/iA== 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=fm2; t= 1751479946; x=1751487146; bh=0l5QlzE4U6qR4ClJEbLFnwYeNlpK5XaWR5F UwSR7b8k=; b=Pp6e0O/pDkPL2jie521/WtZ3g57rWwHSziDWzKAI76AM/+zlWGf 6Xv5W5hX/aE0kUDPeBnDwI+e5NroaE1l8bsPUeOc8phVle8oBw8YcmsRHPZ2N7BC FwV/aF+lkK/FeHTkGT1bz6fq+bK5me2xR/t9Ge/bQ5TnFdUds708RoZeoJE6rMG6 gIOsNElTFSEjFznP/r5+C6m6bQOulhGOmnJKJ1b7iIrgHsw22Z7SkYrukHvSk1qJ XOqdt/ybyuLn3RTojmDDWpu3x0LpQuiLH46uIh7KV84TrLm2jj9Xv/oUodR6TJ8i bhHKrnJ/IqG/0Lu7mLOyEaT7wX42aW9+ERg== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeeffedrtdefgddukedtlecutefuodetggdotefrod ftvfcurfhrohhfihhlvgemucfhrghsthforghilhdpuffrtefokffrpgfnqfghnecuuegr ihhlohhuthemuceftddtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmdenucfjug hrpefoggffhffvvefkjghfufgtsehmtderreertddtnecuhfhrohhmpedfifhrvghguceu uhhrugdfuceoghhrvghgsegsuhhrugdrmhgvqeenucggtffrrghtthgvrhhnpefhveelhe effeffudelvddutdfghfeileeikeeufefhhfelvdffuddvvdejleekleenucevlhhushht vghrufhiiigvpedtnecurfgrrhgrmhepmhgrihhlfhhrohhmpehgrhgvghessghurhgurd hmvgdpnhgspghrtghpthhtohepfedpmhhouggvpehsmhhtphhouhhtpdhrtghpthhtohep ghhrvghgsghurhgusegrmhgriihonhdrtghomhdprhgtphhtthhopegsohgvkhgvfihurh hmodhpohhsthhgrhgvshesghhmrghilhdrtghomhdprhgtphhtthhopehpghhsqhhlqdhh rggtkhgvrhhssehpohhsthhgrhgvshhqlhdrohhrgh X-ME-Proxy: Feedback-ID: i675e48f3:Fastmail Received: by mailuser.phl.internal (Postfix, from userid 501) id 848D415C008E; Wed, 2 Jul 2025 14:12:26 -0400 (EDT) X-Mailer: MessagingEngine.com Webmail Interface MIME-Version: 1.0 X-ThreadId: T0acf64b1c6d8c2cc Date: Wed, 02 Jul 2025 14:10:19 -0400 From: "Greg Burd" To: "Burd, Greg" , "Matthias van de Meent" Cc: "pgsql-hackers@postgresql.org" Message-Id: <97f0aa72-f172-4673-8b04-533f022c3149@app.fastmail.com> In-Reply-To: <6B9B0224-12C1-4706-AD9B-6B78A1337BE3@amazon.com> References: <78574B24-BE0A-42C5-8075-3FA9FA63B8FC@amazon.com> <238EEE41-B206-4590-8C20-DA52C25A2291@amazon.com> <51C77060-059F-4BB3-8EAF-83F08656F6D2@amazon.com> <52AFF055-07B2-495E-9312-A5395E5282E6@amazon.com> <6B9B0224-12C1-4706-AD9B-6B78A1337BE3@amazon.com> Subject: Re: Expanding HOT updates for expression and partial indexes Content-Type: multipart/mixed; boundary=c67019c1296f41d286d55805b41f1fc2 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --c67019c1296f41d286d55805b41f1fc2 Content-Type: text/plain Content-Transfer-Encoding: quoted-printable I'm working again on expanding the conditions under which HOT updates ar= e allowable, it is still a work-in-progress at this point. It has been = a while since my last update to this patch set so I'll refresh everyone'= s memories (including myself) with an overview. Apologies in advance fo= r a long email... The goal is to allow HOT updates under two new conditions: * when an indexed expression has not changed * when possible for a partial index Expression Indexes and HOT updates =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D Indexes on expressions such as: CREATE INDEX test1_lower_col1_idx ON test1 (lower(col1)); CREATE INDEX people_names ON people ((first_name || ' ' || last_name)); CREATE INDEX names ON people((docs->>'user')); These are not currently candidates for HOT updates because the attribute= s they reference are added to the hotblockingattrs bitmapset that is com= pared for overlap with the modified_attrs bitmap in heap_update() as cre= ated by HeapDetermineColumnsInfo(). Logically this exclusion makes sens= e because expressions used to form indexes can only contain references t= o functions that are IMMUTABLE. This then allows for a simple and effic= ient method for determining if the update is a candidate for the HOT pat= h, a quick check for overlap of two bitmapsets and you have an answer. But there is a common case that is overlooked. The third example above = is an expression index that references a JSONB attribute 'docs' field 'n= ame'. Imagine a simple bit of JSON stored in the 'docs' JSONB column ch= anged by an UPDATE from: { "user": "scott", "password": "tiger" } to: { "user": "scott", "password": "$ecret" } this will not use the HOT path in today's code because the attribute for= 'docs' will be referenced in the UPDATE statement and that attribute's = content did change so it will be in the modified_attrs which will overla= p with the hotblockingattrs set. The result is that it is not possible = to use the HOT update path in heap_update() if there is an indexed JSONB= column in that statement. This has a huge impact on performance and bl= oat. It's not hard to see that the index doesn't require an update, the= portion of the document used to form the index tuple isn't changing. This patch addressed this problem by evaluating the expression on the in= dex using the current and new tuple and then comparing them. If there i= s no change to the index tuple then the HOT path is still an option for = the update whereas before this was not the case. There is at least one major challenge to this approach left to solve, it= invokes UDFs while holding BUFFER_LOCK_EXCLUSIVE which we learn from he= ap_attr_equals() "we cannot safely invoke user-defined functions while h= olding exclusive buffer lock." So, for performance an safety reasons it makes sense to try to limit the= expressions that can be evaluated to those that can't self-deadlock try= ing to pin the same buffer and are roughly constant time and fast so we = don't hold that lock for very long. Additionally it would be nice to en= sure that we really have to do the evaluation in the first place. I looked for ways to limit the types of expressions to evaluate so as to= only take this approach when necessary, but I wasn't able to identify a= good way forward. The problem is that it is possible to author a UDF s= imilar to the json/jsonb getter functions json_extract_path() that extra= ct a portion of a datum that is then used when creating an index. There= is currently no demarcation on functions similar to "IMMUTABLE" (for ex= ample "EXTRACTOR") that would indicate that's what the UDF does nor does= it strictly fit within the category of volatility as I don't think of t= his as information for the optimizer to use. Ideally you'd only want to= evaluate the expression when any function in the expression is known to= extract a portion of the datum. Were that the case you could require f= or HOT updates in the presence of expression indexes that at least one f= unction in the expression be an "EXTRACTOR". I might still do this depe= nding on reaction to it here, I'm seeking ideas. Another idea was to change up the strategy a bit and not check expressio= ns at all, but rather find a method to keep the attribute out of the mod= ified_attrs set to begin with. This would mean that HeapDeterminColumns= Info() would have to change, any maybe that's a good idea to try out too= . It could even morph into something that can test equality using type-= specific equality tests supporting custom types and invoke index access = method-specific path extraction functions. In some ways this feels more= "correct" to me in that HeapDeterminColumnsInfo()'s goal is to reduce t= he set of attributes in play from the interesting set to the modified se= t and if what is interesting is an index on a field within a document th= at isn't modified then it shouldn't be in the set. This comes with chal= lenges related to that comment mentioned earlier in heap_attr_equals() a= nd the fact that index access methods don't have a way to supply their e= quality op or provide a way to call a path operator should one exist. B= ut the benefit would be that we expand HOT updates a bit further than my= initial goals. I'm not wedded to the use of a reloption to disable expression checks, n= or do I love the name I choose ("expression_checks"). I'm interested to= hear if I should simple remove this. Another benefit to changing HeapDeterminColumnsInfo() is that it is what= provides information to the PHOT patch during heap pruning to record wh= ich attributes were changed. As it stands now, this patch and the PHOT = patch when combined result in some undesirable index scan results. Partial Indexes and HOT updates =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D Partial indexes are a problem when it comes to HOT updates because they = are part of the modified_attrs set returned by HeapDeterminColumnsInfo()= even in cases where the value being set in the UPDATE does not satisfy = the partial index predicate. Take for example: CREATE TABLE example (a int, b int); CREATE INDEX idx_a ON example(a); CREATE INDEX idx_b ON example(b) WHERE b > 100; INSERT INTO example (a, b) VALUES (1, 50); UPDATE example SET b =3D 60 WHERE a =3D 1; What happened? Was the update HOT? No. Why? Because the predicate is= n't taken into account at the time the decision for HOT (or not) is made= , that happens later during ExecInsertIndexTuples(). Today this update = would trigger new index entries for both idx_a and idx_b when neither we= re required. This patch changes this behavior by evaluating the predicate for the par= tial index earlier during heap_update(). When both the existing and upd= ated tuples fall outside of the predicate the HOT update path is still a= n option. To limit scope creep I've not implemented the case when the e= xisting was within the index's predicate but now the updated falls outsi= de the predicate because that would require adding an optional delete fu= nction to the index access method (something that I think would be gener= ally useful at some point). When that happens this patch does not allow= a HOT update forcing the new tuple in the heap to not be redirected so = later on index scan the CTID from the index will be ignored. Summary =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D Attached find v17 of this patch rebased to this morning's (EDT) HEAD pas= sing make world and formatted. any and all feedback welcome. -greg --c67019c1296f41d286d55805b41f1fc2 Content-Disposition: attachment; filename*0="v17-0001-Expand-HOT-update-path-to-include-expression-and.pat"; filename*1="ch" Content-Type: text/x-patch; name="=?UTF-8?Q?v17-0001-Expand-HOT-update-path-to-include-expression-and.patc?= =?UTF-8?Q?h?=" Content-Transfer-Encoding: base64 RnJvbSA0MDU3YmZlNDYzNmRlNzk1YmIxNGFmYTIzMGQ3N2NiN2VhZDEzYjM0IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBHcmVnIEJ1cmQgPGdyZWdAYnVyZC5tZT4KRGF0ZTog TW9uLCAyNyBKYW4gMjAyNSAxMzoyODo1OSAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjE3XSBF eHBhbmQgSE9UIHVwZGF0ZSBwYXRoIHRvIGluY2x1ZGUgZXhwcmVzc2lvbiBhbmQgcGFydGlh bAogaW5kZXhlcy4KClRoaXMgcGF0Y2ggZXh0ZW5kcyB0aGUgY2FzZXMgd2hlcmUgSE9UIHVw ZGF0ZXMgYXJlIHBvc3NpYmxlIGluIHRoZQpoZWFwYW0uICBFeHByZXNzaW9uIGluZGV4ZXMg aGF2ZSBoaXN0b3JpY2FsbHkgYmVlbiBjb25zaWRlcmVkICJob3QKYmxvY2tpbmciIGJlY2F1 c2UgdGhlIGZ1bmN0aW9ucyB1c2VkIHdpdGhpbiBhbiBleHByZXNzaW9uIG11c3QgYmUgbWFy a2VkCklNTVVUQUJMRSBhbmQgc28gYW55IGNoYW5nZWQgYXR0cmlidXRlIHJlZmVyZW5jZWQg d2l0aGluIHRoZSBleHByZXNzaW9uCmxvZ2ljYWxseSByZXF1aXJlcyBhIG5ldyBpbmRleCB0 dXBsZS4gIEhvd2V2ZXIgdGhpcyBsb2dpYyBkb2Vzbid0IGhvbGQKdHJ1ZSBpbiBjYXNlcyB3 aGVyZSBvbmx5IGEgcG9ydGlvbiBvZiBhbiBhdHRyaWJ1dGUgaXMgdXNlZCB0byBmb3JtIHRo ZQppbmRleCB0dXBsZSBhcyBpcyBjb21tb25seSB0aGUgY2FzZSB3aXRoIEpTT05CIGNvbHVt bnMgb3Igb3RoZXIgaW5kZXgKYWNjZXNzIG1ldGhvZHMgdGhhdCBoYXZlIGN1c3RvbSBvcGVy YXRvcnMgd2hpY2ggZXh0cmFjdCBhIHN1YnNldCBvZiBhbgphdHRyaWJ1dGUgd2hlbiBmb3Jt aW5nIHRoZSBpbmRleCB0dXBsZS4gSW4gdGhlc2UgY2FzZXMgd2hpbGUgYW4KYXR0cmlidXRl IGluIGFuIFVQREFURSBzdGF0ZW1lbnQgbWF5IGhhdmUgY2hhbmdlZCBhcyBkZXRlcm1pbmVk IGJ5CkhlYXBEZXRlcm1pbmVDb2x1bW5zSW5mbygpIGFuZCBpcyBwYXJ0IG9mIHRoZSBtb2Rp ZmllZF9hdHRycyBzZXQgdGhlCnJlc3VsdCBvZiB0aGUgZXhwcmVzc2lvbiB1c2VkIHRvIGZv cm0gdGhlIGluZGV4IHR1cGxlIG1heSBiZSB1bmNoYW5nZWQKZnJvbSB0aGUgcHJldmlvdXMg dmVyc2lvbi4gIFRoaXMgb3ZlcnNpZ2h0IG1ha2VzIGl0IGltcG9zc2libGUgdG8gaGF2ZSBh CkhPVCB1cGRhdGUgd2hlbiBhbiB1cGRhdGUgaW5jbHVkZXMgYSBKU09OQiBjb2x1bW4uICBU aGlzIHBhdGNoIGNvcnJlY3RzCnRoYXQuIFRoZSBpbmRleCBleHByZXNzaW9uIGlzIGV2YWx1 YXRlZCB0byBmb3JtIHRoZSBiZWZvcmUgYW5kIGFmdGVyCmluZGV4IGRhdHVtcyBhbmQgY29t cGFyZXMgdGhlbSB0byBkZXRlcm1pbmUgaWYgdGhlIG11dGF0aW9uIHRvIHRoZQphdHRyaWJ1 dGUocykgcmVmZXJlbmNlZCBpbiB0aGUgZXhwcmVzc2lvbiBpcyBpbiBmYWN0IGEgY2hhbmdl IHRoYXQKcmVxdWlyZXMgaW5zZXJ0aW5nIGEgbmV3IGluZGV4IHR1cGxlIG9yIG5vdC4KClNl Y29uZGx5LCB1cGRhdGVzIHRvIGF0dHJpYnV0ZXMgcmVmZXJlbmNlZCBieSBwYXJ0aWFsIGlu ZGV4ZXMgYXJlCmVmZmVjdGl2ZWx5ICJIT1QgYmxvY2tpbmciIGV2ZW4gd2hlbiB0aGV5IGZh bGwgb3V0c2lkZSBvZiB0aGUgaW5kZXgncwpwcmVkaWNhdGUgZm9yY2luZyBhbGwgaW5kZXhl cyBvbiB0aGUgcmVsYXRpb24gdG8gYmUgdXBkYXRlZC4gIFRoaXMgcGF0Y2gKY2hhbmdlcyB0 aGF0IGJlaGF2aW9yIGFsbG93aW5nIEhPVCB1cGRhdGVzIG9ubHkgaW4gY2FzZXMgd2hlcmUg dGhlCnByZWRpY2F0ZSBvbiB0aGUgaW5kZXggaXMgbm90IHNhdGlzZmllZCBmb3IgZWl0aGVy IHRoZSBjdXJyZW50IG9yIHRoZQpuZXcgdHVwbGUuCgpJdCBpcyBpbXBvcnRhbnQgdG8gbm90 ZSB0aGF0IHRoaXMgcGF0Y2ggaXMgYW4gZXZvbHV0aW9uIG9mIGEgcHJldmlvdXMKcGF0Y2gK aHR0cHM6Ly9wb3N0Z3IuZXMvbS80ZDk5MjhlZS1hOWU2LTE1ZjktOWM4Mi01OTgxZjEzZmZj YTYlNDBwb3N0Z3Jlc3Byby5ydQphcHBsaWVkIGluIGMyMDNkNmNmODFiNGQ3ZTQzZWRiMmI3 NWVjMWI3NDFiYTQ4ZTA0ZTAgYW5kIGxhdGVyIHJldmVydGVkCmluIDA1Zjg0NjA1ZGJlYjlj ZjgyNzlhMTU3MjM0YjI0YmJiNzA2YzUyNTYuCgpTaWduZWQtb2ZmLWJ5OiBHcmVnIEJ1cmQg PGdyZWdAYnVyZC5tZT4KLS0tCiBkb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV90YWJsZS5zZ21s ICAgICAgICAgICAgfCAgIDE4ICsKIGRvYy9zcmMvc2dtbC9zdG9yYWdlLnNnbWwgICAgICAg ICAgICAgICAgICAgICB8ICAgMjkgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9jb21tb24vcmVs b3B0aW9ucy5jICAgICAgICB8ICAgMTIgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL1JF QURNRS5IT1QgICAgICAgICAgICB8ICAgNDUgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oZWFw L2hlYXBhbS5jICAgICAgICAgICAgICB8ICAgNjEgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9o ZWFwL2hlYXBhbV9oYW5kbGVyLmMgICAgICB8ICAgMTUgKy0KIHNyYy9iYWNrZW5kL2FjY2Vz cy90YWJsZS90YWJsZWFtLmMgICAgICAgICAgICB8ICAgIDUgKy0KIHNyYy9iYWNrZW5kL2Nh dGFsb2cvaW5kZXguYyAgICAgICAgICAgICAgICAgICB8ICAgNDggKwogc3JjL2JhY2tlbmQv Y2F0YWxvZy9pbmRleGluZy5jICAgICAgICAgICAgICAgIHwgICAxOCArLQogc3JjL2JhY2tl bmQvY29tbWFuZHMvY29weWZyb20uYyAgICAgICAgICAgICAgIHwgICAgMiArLQogc3JjL2Jh Y2tlbmQvZXhlY3V0b3IvZXhlY0luZGV4aW5nLmMgICAgICAgICAgIHwgIDIxMiArKystCiBz cmMvYmFja2VuZC9leGVjdXRvci9leGVjUGFydGl0aW9uLmMgICAgICAgICAgfCAgICAyICst CiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjUmVwbGljYXRpb24uYyAgICAgICAgfCAgIDEw ICstCiBzcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTW9kaWZ5VGFibGUuYyAgICAgICAgfCAg IDMxICstCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5jICAgICAg fCAgICA2ICstCiBzcmMvYmFja2VuZC91dGlscy9jYWNoZS9yZWxjYWNoZS5jICAgICAgICAg ICAgfCAgIDgxICstCiBzcmMvYmluL3BzcWwvdGFiLWNvbXBsZXRlLmluLmMgICAgICAgICAg ICAgICAgfCAgICAyICstCiBzcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmggICAgICAgICAg ICAgICAgICAgfCAgICA2ICstCiBzcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oICAgICAg ICAgICAgICAgICAgfCAgIDMzICstCiBzcmMvaW5jbHVkZS9jYXRhbG9nL2luZGV4LmggICAg ICAgICAgICAgICAgICAgfCAgICAxICsKIHNyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWN1dG9y LmggICAgICAgICAgICAgICB8ICAgIDggKy0KIHNyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rl cy5oICAgICAgICAgICAgICAgICB8ICAgMTMgKwogc3JjL2luY2x1ZGUvdXRpbHMvcmVsLmgg ICAgICAgICAgICAgICAgICAgICAgIHwgICAxMCArCiBzcmMvaW5jbHVkZS91dGlscy9yZWxj YWNoZS5oICAgICAgICAgICAgICAgICAgfCAgICAxICsKIC4uLi9yZWdyZXNzL2V4cGVjdGVk L2hlYXBfaG90X3VwZGF0ZXMub3V0ICAgICB8IDEwNDggKysrKysrKysrKysrKysrKysKIHNy Yy90ZXN0L3JlZ3Jlc3MvcGFyYWxsZWxfc2NoZWR1bGUgICAgICAgICAgICB8ICAgIDUgKwog c3JjL3Rlc3QvcmVncmVzcy9zcWwvaGVhcF9ob3RfdXBkYXRlcy5zcWwgICAgIHwgIDcxOCAr KysrKysrKysrKwogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgICAgICAgICAg ICAgIHwgICAgMiArLQogMjggZmlsZXMgY2hhbmdlZCwgMjMwMiBpbnNlcnRpb25zKCspLCAx NDAgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC9oZWFwX2hvdF91cGRhdGVzLm91dAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90 ZXN0L3JlZ3Jlc3Mvc3FsL2hlYXBfaG90X3VwZGF0ZXMuc3FsCgpkaWZmIC0tZ2l0IGEvZG9j L3NyYy9zZ21sL3JlZi9jcmVhdGVfdGFibGUuc2dtbCBiL2RvYy9zcmMvc2dtbC9yZWYvY3Jl YXRlX3RhYmxlLnNnbWwKaW5kZXggZGMwMDBlOTEzYzEuLmJlY2U5MGRjMTkyIDEwMDY0NAot LS0gYS9kb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV90YWJsZS5zZ21sCisrKyBiL2RvYy9zcmMv c2dtbC9yZWYvY3JlYXRlX3RhYmxlLnNnbWwKQEAgLTE5OTcsNiArMTk5NywyNCBAQCBXSVRI ICggTU9EVUxVUyA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+bnVtZXJpY19saXRl cmFsPC9yZXBsYWNlYWJsZT4sIFJFTQogICAgIDwvbGlzdGl0ZW0+CiAgICA8L3Zhcmxpc3Rl bnRyeT4KIAorICAgPHZhcmxpc3RlbnRyeSBpZD0icmVsb3B0aW9uLWV4cHJlc3Npb24tY2hl Y2tzIiB4cmVmbGFiZWw9ImV4cHJlc3Npb25fY2hlY2tzIj4KKyAgICA8dGVybT48bGl0ZXJh bD5leHByZXNzaW9uX2NoZWNrczwvbGl0ZXJhbD4gKDx0eXBlPmJvb2xlYW48L3R5cGU+KQor ICAgIDxpbmRleHRlcm0+CisgICAgIDxwcmltYXJ5Pjx2YXJuYW1lPmV4cHJlc3Npb25fY2hl Y2tzPC92YXJuYW1lPiBzdG9yYWdlIHBhcmFtZXRlcjwvcHJpbWFyeT4KKyAgICA8L2luZGV4 dGVybT4KKyAgICA8L3Rlcm0+CisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAg IEVuYWJsZXMgb3IgZGlzYWJsZXMgZXZhdWxhdGlvbiBvZiBwcmVkaWNhdGUgZXhwcmVzc2lv bnMgb24gcGFydGlhbAorICAgICAgaW5kZXhlcyBvciBleHByZXNzaW9ucyB1c2VkIHRvIGRl ZmluZSBpbmRleGVzIGR1cmluZyB1cGRhdGVzLgorICAgICAgSWYgPGxpdGVyYWw+dHJ1ZTwv bGl0ZXJhbD4sIHRoZW4gdGhlc2UgZXhwcmVzc2lvbnMgYXJlIGV2YWx1YXRlZCBkdXJpbmcK KyAgICAgIHVwZGF0ZXMgdG8gZGF0YSB3aXRoaW4gdGhlIGhlYXAgcmVsYXRpb24gYWdhaW5z dCB0aGUgb2xkIGFuZCBuZXcgdmFsdWVzCisgICAgICBhbmQgdGhlbiBjb21wYXJlZCB0byBk ZXRlcm1pbmUgaWYgPGFjcm9ueW0+SE9UPC9hY3JvbnltPiB1cGRhdGVzIGFyZQorICAgICAg YWxsb3dhYmxlIG9yIG5vdC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGxpdGVyYWw+dHJ1ZTwv bGl0ZXJhbD4uCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgPC92YXJsaXN0 ZW50cnk+CisKICAgIDwvdmFyaWFibGVsaXN0PgogCiAgIDwvcmVmc2VjdDI+CmRpZmYgLS1n aXQgYS9kb2Mvc3JjL3NnbWwvc3RvcmFnZS5zZ21sIGIvZG9jL3NyYy9zZ21sL3N0b3JhZ2Uu c2dtbAppbmRleCA2MTI1MDc5OWVjMC4uNmIzNDBlODg1ZjIgMTAwNjQ0Ci0tLSBhL2RvYy9z cmMvc2dtbC9zdG9yYWdlLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3N0b3JhZ2Uuc2dtbApA QCAtMTA5NywxMCArMTA5NywxMCBAQCBkYXRhLiBFbXB0eSBpbiBvcmRpbmFyeSB0YWJsZXMu PC9lbnRyeT4KICAgPGl0ZW1pemVkbGlzdD4KICAgIDxsaXN0aXRlbT4KICAgICA8cGFyYT4K LSAgICAgVGhlIHVwZGF0ZSBkb2VzIG5vdCBtb2RpZnkgYW55IGNvbHVtbnMgcmVmZXJlbmNl ZCBieSB0aGUgdGFibGUncyBpbmRleGVzLAotICAgICBub3QgaW5jbHVkaW5nIHN1bW1hcml6 aW5nIGluZGV4ZXMuICBUaGUgb25seSBzdW1tYXJpemluZyBpbmRleCBtZXRob2QgaW4KLSAg ICAgdGhlIGNvcmUgPHByb2R1Y3RuYW1lPlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1lPiBkaXN0 cmlidXRpb24gaXMgPGxpbmsKLSAgICAgbGlua2VuZD0iYnJpbiI+QlJJTjwvbGluaz4uCisg ICAgIFRoZSB1cGRhdGUgZG9lcyBub3QgbW9kaWZ5IGluZGV4IGtleXMsIG9yIHdoZW4gdXNp bmcgYSBzdW1tYXJpemVkCisgICAgIGluZGV4LiAgVGhlIG9ubHkgc3VtbWFyaXppbmcgaW5k ZXggbWV0aG9kIGluIHRoZSBjb3JlCisgICAgIDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9w cm9kdWN0bmFtZT4gZGlzdHJpYnV0aW9uIGlzCisgICAgIDxsaW5rIGxpbmtlbmQ9ImJyaW4i PkJSSU48L2xpbms+LgogICAgICA8L3BhcmE+CiAgICA8L2xpc3RpdGVtPgogICAgPGxpc3Rp dGVtPgpAQCAtMTEzOCw2ICsxMTM4LDI3IEBAIGRhdGEuIEVtcHR5IGluIG9yZGluYXJ5IHRh Ymxlcy48L2VudHJ5PgogICA8L2l0ZW1pemVkbGlzdD4KICA8L3BhcmE+CiAKKyA8cGFyYT4K KyAgPGFjcm9ueW0+SE9UPC9hY3JvbnltPiB1cGRhdGVzIGNhbiBvY2N1ciB3aGVuIHRoZSBl eHByZXNzaW9uIHVzZWQgdG8gZGVmaW5lCisgIGFuIGluZGV4IHNob3dzIG5vIGNoYW5nZXMg dG8gdGhlIGluZGV4ZWQgdmFsdWUuIFRvIGRldGVybWluZSB0aGlzIHJlcXVpcmVzCisgIHRo YXQgdGhlIGV4cHJlc3Npb24gYmUgZXZhdWxhdGVkIGZvciB0aGUgb2xkIGFuZCBuZXcgdmFs dWVzIHRvIGJlIHN0b3JlZCBpbgorICB0aGUgaW5kZXggYW5kIHRoZW4gY29tcGFyZWQuIFRo aXMgYWxsb3dzIGZvciA8YWNyb255bT5IT1Q8L2Fjcm9ueW0+IHVwZGF0ZXMKKyAgd2hlbiBk YXRhIGluZGV4ZWQgd2l0aGluIEpTT05CIGNvbHVtbnMgaXMgdW5jaGFuZ2VkLiBUbyBkaXNh YmxlIHRoaXMKKyAgYmVoYXZpb3IgYW5kIGF2b2lkIHRoZSBvdmVyaGVhZCBvZiBldmFsdWF0 aW5nIHRoZSBleHByZXNzaW9uIGR1cmluZyB1cGRhdGVzCisgIHNldCB0aGUgPGxpdGVyYWw+ ZXhwcmVzc2lvbl9jaGVja3M8L2xpdGVyYWw+IG9wdGlvbiB0byBmYWxzZSBmb3IgdGhlIHRh YmxlLgorIDwvcGFyYT4KKworIDxwYXJhPgorICA8YWNyb255bT5IT1Q8L2Fjcm9ueW0+IHVw ZGF0ZXMgY2FuIGFsc28gb2NjdXIgd2hlbiB1cGRhdGVkIHZhbHVlcyBhcmUgbm90CisgIHdp dGhpbiB0aGUgcHJlZGljYXRlIG9mIGEgcGFydGlhbCBpbmRleC4gSG93ZXZlciwgPGFjcm9u eW0+SE9UPC9hY3JvbnltPgorICB1cGRhdGVzIGFyZSBub3QgcG9zc2libGUgd2hlbiB0aGUg dXBkYXRlZCB2YWx1ZSBhbmQgdGhlIGN1cnJlbnQgdmFsdWUgZGlmZmVyCisgIHdpdGggcmVn YXJkcyB0byB0aGUgcHJlZGljYXRlLiBUbyBkZXRlcm1pbmUgdGhpcyByZXF1aXJlcyB0aGF0 IHRoZSBwcmVkaWNhdGUKKyAgZXhwcmVzc2lvbiBiZSBldmFsdWF0ZWQgZm9yIHRoZSBvbGQg YW5kIG5ldyB2YWx1ZXMgdG8gYmUgc3RvcmVkIGluIHRoZSBpbmRleAorICBhbmQgdGhlbiBj b21wYXJlZC4gVG8gZGlzYWJsZSB0aGlzIGJlaGF2aW9yIGFuZCBhdm9pZCB0aGUgb3Zlcmhl YWQgb2YKKyAgZXZhbHVhdGluZyB0aGUgZXhwcmVzc2lvbiBkdXJpbmcgdXBkYXRlcyBzZXQK KyAgdGhlIDxsaXRlcmFsPmV4cHJlc3Npb25fY2hlY2tzPC9saXRlcmFsPiBvcHRpb24gdG8g ZmFsc2UgZm9yIHRoZSB0YWJsZS4KKyA8L3BhcmE+CisKICA8cGFyYT4KICAgWW91IGNhbiBp bmNyZWFzZSB0aGUgbGlrZWxpaG9vZCBvZiBzdWZmaWNpZW50IHBhZ2Ugc3BhY2UgZm9yCiAg IDxhY3JvbnltPkhPVDwvYWNyb255bT4gdXBkYXRlcyBieSBkZWNyZWFzaW5nIGEgdGFibGUn cyA8bGluawpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2NvbW1vbi9yZWxvcHRp b25zLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvY29tbW9uL3JlbG9wdGlvbnMuYwppbmRleCA1 MDc0N2MxNjM5Ni4uNDA3ZDVkY2YwYzkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vz cy9jb21tb24vcmVsb3B0aW9ucy5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9jb21tb24v cmVsb3B0aW9ucy5jCkBAIC0xNjYsNiArMTY2LDE1IEBAIHN0YXRpYyByZWxvcHRfYm9vbCBi b29sUmVsT3B0c1tdID0KIAkJfSwKIAkJdHJ1ZQogCX0sCisJeworCQl7CisJCQkiZXhwcmVz c2lvbl9jaGVja3MiLAorCQkJIldoZW4gZGlzYWJsZWQgcHJldmVudHMgY2hlY2tpbmcgZXhw cmVzc2lvbnMgb24gaW5kZXhlcyBhbmQgcHJlZGljYXRlcyBvbiBwYXJ0aWFsIGluZGV4ZXMg Zm9yIGNoYW5nZXMgdGhhdCBtaWdodCBpbmZsdWVuY2UgaGVhcC1vbmx5IHR1cGxlIChIT1Qp IHVwZGF0ZXMuIiwKKwkJCVJFTE9QVF9LSU5EX0hFQVAsCisJCQlTaGFyZVVwZGF0ZUV4Y2x1 c2l2ZUxvY2sKKwkJfSwKKwkJdHJ1ZQorCX0sCiAJLyogbGlzdCB0ZXJtaW5hdG9yICovCiAJ e3tOVUxMfX0KIH07CkBAIC0xOTE1LDcgKzE5MjQsOCBAQCBkZWZhdWx0X3JlbG9wdGlvbnMo RGF0dW0gcmVsb3B0aW9ucywgYm9vbCB2YWxpZGF0ZSwgcmVsb3B0X2tpbmQga2luZCkKIAkJ eyJ2YWN1dW1fdHJ1bmNhdGUiLCBSRUxPUFRfVFlQRV9CT09MLAogCQlvZmZzZXRvZihTdGRS ZE9wdGlvbnMsIHZhY3V1bV90cnVuY2F0ZSksIG9mZnNldG9mKFN0ZFJkT3B0aW9ucywgdmFj dXVtX3RydW5jYXRlX3NldCl9LAogCQl7InZhY3V1bV9tYXhfZWFnZXJfZnJlZXplX2ZhaWx1 cmVfcmF0ZSIsIFJFTE9QVF9UWVBFX1JFQUwsCi0JCW9mZnNldG9mKFN0ZFJkT3B0aW9ucywg dmFjdXVtX21heF9lYWdlcl9mcmVlemVfZmFpbHVyZV9yYXRlKX0KKwkJb2Zmc2V0b2YoU3Rk UmRPcHRpb25zLCB2YWN1dW1fbWF4X2VhZ2VyX2ZyZWV6ZV9mYWlsdXJlX3JhdGUpfSwKKwkJ eyJleHByZXNzaW9uX2NoZWNrcyIsIFJFTE9QVF9UWVBFX0JPT0wsIG9mZnNldG9mKFN0ZFJk T3B0aW9ucywgZXhwcmVzc2lvbl9jaGVja3MpfQogCX07CiAKIAlyZXR1cm4gKGJ5dGVhICop IGJ1aWxkX3JlbG9wdGlvbnMocmVsb3B0aW9ucywgdmFsaWRhdGUsIGtpbmQsCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9SRUFETUUuSE9UIGIvc3JjL2JhY2tlbmQv YWNjZXNzL2hlYXAvUkVBRE1FLkhPVAppbmRleCA3NGU0MDdmMzc1YS4uMjM0MGQ4MjA1M2Yg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL1JFQURNRS5IT1QKKysrIGIv c3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvUkVBRE1FLkhPVApAQCAtMzYsNyArMzYsNyBAQCBI T1Qgc29sdmVzIHRoaXMgcHJvYmxlbSBmb3IgdHdvIHJlc3RyaWN0ZWQgYnV0IHVzZWZ1bCBz cGVjaWFsIGNhc2VzOgogRmlyc3QsIHdoZXJlIGEgdHVwbGUgaXMgcmVwZWF0ZWRseSB1cGRh dGVkIGluIHdheXMgdGhhdCBkbyBub3QgY2hhbmdlCiBpdHMgaW5kZXhlZCBjb2x1bW5zLiAg KEhlcmUsICJpbmRleGVkIGNvbHVtbiIgbWVhbnMgYW55IGNvbHVtbiByZWZlcmVuY2VkCiBh dCBhbGwgaW4gYW4gaW5kZXggZGVmaW5pdGlvbiwgaW5jbHVkaW5nIGZvciBleGFtcGxlIGNv bHVtbnMgdGhhdCBhcmUKLXRlc3RlZCBpbiBhIHBhcnRpYWwtaW5kZXggcHJlZGljYXRlIGJ1 dCBhcmUgbm90IHN0b3JlZCBpbiB0aGUgaW5kZXguKQordGVzdGVkIGluIGEgcGFydGlhbC1p bmRleCBwcmVkaWNhdGUsIHRoYXQgaGFzIG1hdGVyaWFsbHkgY2hhbmdlZC4pCiAKIFNlY29u ZCwgd2hlcmUgdGhlIG1vZGlmaWVkIGNvbHVtbnMgYXJlIG9ubHkgdXNlZCBpbiBpbmRleGVz IHRoYXQgZG8gbm90CiBjb250YWluIHR1cGxlIElEcywgYnV0IG1haW50YWluIHN1bW1hcmll cyBvZiB0aGUgaW5kZXhlZCBkYXRhIGJ5IGJsb2NrLgpAQCAtMTMzLDI4ICsxMzMsMzQgQEAg Tm90ZTogd2UgY2FuIHVzZSBhICJkZWFkIiBsaW5lIHBvaW50ZXIgZm9yIGFueSBERUxFVEVk IHR1cGxlLAogd2hldGhlciBpdCB3YXMgcGFydCBvZiBhIEhPVCBjaGFpbiBvciBub3QuICBU aGlzIGFsbG93cyBzcGFjZSByZWNsYW1hdGlvbgogaW4gYWR2YW5jZSBvZiBydW5uaW5nIFZB Q1VVTSBmb3IgcGxhaW4gREVMRVRFcyBhcyB3ZWxsIGFzIEhPVCB1cGRhdGVzLgogCi1UaGUg cmVxdWlyZW1lbnQgZm9yIGRvaW5nIGEgSE9UIHVwZGF0ZSBpcyB0aGF0IGluZGV4ZXMgd2hp Y2ggcG9pbnQgdG8KLXRoZSByb290IGxpbmUgcG9pbnRlciAoYW5kIHRodXMgbmVlZCB0byBi ZSBjbGVhbmVkIHVwIGJ5IFZBQ1VVTSB3aGVuIHRoZQotdHVwbGUgaXMgZGVhZCkgZG8gbm90 IHJlZmVyZW5jZSBjb2x1bW5zIHdoaWNoIGFyZSB1cGRhdGVkIGluIHRoYXQgSE9UCi1jaGFp bi4gIFN1bW1hcml6aW5nIGluZGV4ZXMgKHN1Y2ggYXMgQlJJTikgYXJlIGFzc3VtZWQgdG8g aGF2ZSBubwotcmVmZXJlbmNlcyB0byBpbmRpdmlkdWFsIHR1cGxlcyBhbmQgdGh1cyBhcmUg aWdub3JlZCB3aGVuIGNoZWNraW5nIEhPVAotYXBwbGljYWJpbGl0eS4gIFRoZSB1cGRhdGVk IGNvbHVtbnMgYXJlIGNoZWNrZWQgYXQgZXhlY3V0aW9uIHRpbWUgYnkKLWNvbXBhcmluZyB0 aGUgYmluYXJ5IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBvbGQgYW5kIG5ldyB2YWx1ZXMuICBX ZSBpbnNpc3QKLW9uIGJpdHdpc2UgZXF1YWxpdHkgcmF0aGVyIHRoYW4gdXNpbmcgZGF0YXR5 cGUtc3BlY2lmaWMgZXF1YWxpdHkgcm91dGluZXMuCi1UaGUgbWFpbiByZWFzb24gdG8gYXZv aWQgdGhlIGxhdHRlciBpcyB0aGF0IHRoZXJlIG1pZ2h0IGJlIG11bHRpcGxlCi1ub3Rpb25z IG9mIGVxdWFsaXR5IGZvciBhIGRhdGF0eXBlLCBhbmQgd2UgZG9uJ3Qga25vdyBleGFjdGx5 IHdoaWNoIG9uZQotaXMgcmVsZXZhbnQgZm9yIHRoZSBpbmRleGVzIGF0IGhhbmQuICBXZSBh c3N1bWUgdGhhdCBiaXR3aXNlIGVxdWFsaXR5Ci1ndWFyYW50ZWVzIGVxdWFsaXR5IGZvciBh bGwgcHVycG9zZXMuCitUaGUgcmVxdWlyZW1lbnQgZm9yIGRvaW5nIGEgSE9UIHVwZGF0ZSBp cyB0aGF0IGluZGV4ZXMgd2hpY2ggcG9pbnQgdG8gdGhlIHJvb3QKK2xpbmUgcG9pbnRlciAo YW5kIHRodXMgbmVlZCB0byBiZSBjbGVhbmVkIHVwIGJ5IFZBQ1VVTSB3aGVuIHRoZSB0dXBs ZSBpcyBkZWFkKQorZG8gbm90IHJlZmVyZW5jZSBjb2x1bW5zIHdoaWNoIGFyZSB1cGRhdGVk IGluIHRoYXQgSE9UIGNoYWluLgorCitTdW1tYXJpemluZyBpbmRleGVzIChzdWNoIGFzIEJS SU4pIGFyZSBhc3N1bWVkIHRvIGhhdmUgbm8gcmVmZXJlbmNlcyB0bworaW5kaXZpZHVhbCB0 dXBsZXMgYW5kIHRodXMgYXJlIGlnbm9yZWQgd2hlbiBjaGVja2luZyBIT1QgYXBwbGljYWJp bGl0eS4KKworRXhwcmVzc2lvbnMgb24gaW5kZXhlcyBhcmUgZXZhbHVhdGVkIGFuZCB0aGUg cmVzdWx0cyB1c2VkIHdoZW4gY2hlY2tpbmcgZm9yCitjaGFuZ2VzLiAgVGhpcyBhbGxvd3Mg Zm9yIHRoZSBKU09OQiBkYXRhdHlwZSB0byBoYXZlIEhPVCB1cGRhdGVzIHdoZW4gdGhlCitp bmRleGVkIHBvcnRpb24gb2YgdGhlIGRvY3VtZW50IGFyZSBub3QgbW9kaWZpZWQuCisKK1Bh cnRpYWwgaW5kZXggZXhwcmVzc2lvbnMgYXJlIGV2YWx1YXRlZCwgSE9UIHVwZGF0ZXMgYXJl IGFsbG93ZWQgd2hlbiB0aGUKK3VwZGF0ZWQgaW5kZXggdmFsdWVzIGRvIG5vdCBzYXRpc2Z5 IHRoZSBwcmVkaWNhdGUuCisKK1RoZSB1cGRhdGVkIGNvbHVtbnMgYXJlIGNoZWNrZWQgYXQg ZXhlY3V0aW9uIHRpbWUgYnkgY29tcGFyaW5nIHRoZSBiaW5hcnkKK3JlcHJlc2VudGF0aW9u IG9mIHRoZSBvbGQgYW5kIG5ldyB2YWx1ZXMuICBXZSBpbnNpc3Qgb24gYml0d2lzZSBlcXVh bGl0eSByYXRoZXIKK3RoYW4gdXNpbmcgZGF0YXR5cGUtc3BlY2lmaWMgZXF1YWxpdHkgcm91 dGluZXMuICBUaGUgbWFpbiByZWFzb24gdG8gYXZvaWQgdGhlCitsYXR0ZXIgaXMgdGhhdCB0 aGVyZSBtaWdodCBiZSBtdWx0aXBsZSBub3Rpb25zIG9mIGVxdWFsaXR5IGZvciBhIGRhdGF0 eXBlLCBhbmQKK3dlIGRvbid0IGtub3cgZXhhY3RseSB3aGljaCBvbmUgaXMgcmVsZXZhbnQg Zm9yIHRoZSBpbmRleGVzIGF0IGhhbmQuICBXZSBhc3N1bWUKK3RoYXQgYml0d2lzZSBlcXVh bGl0eSBndWFyYW50ZWVzIGVxdWFsaXR5IGZvciBhbGwgcHVycG9zZXMuCiAKIElmIGFueSBj b2x1bW5zIHRoYXQgYXJlIGluY2x1ZGVkIGJ5IG5vbi1zdW1tYXJpemluZyBpbmRleGVzIGFy ZSB1cGRhdGVkLAogdGhlIEhPVCBvcHRpbWl6YXRpb24gaXMgbm90IGFwcGxpZWQsIGFuZCB0 aGUgbmV3IHR1cGxlIGlzIGluc2VydGVkIGludG8KIGFsbCBpbmRleGVzIG9mIHRoZSB0YWJs ZS4gIElmIG5vbmUgb2YgdGhlIHVwZGF0ZWQgY29sdW1ucyBhcmUgaW5jbHVkZWQgaW4KIHRo ZSB0YWJsZSdzIGluZGV4ZXMsIHRoZSBIT1Qgb3B0aW1pemF0aW9uIGlzIGFwcGxpZWQgYW5k IG5vIGluZGV4ZXMgYXJlCiB1cGRhdGVkLiAgSWYgaW5zdGVhZCB0aGUgdXBkYXRlZCBjb2x1 bW5zIGFyZSBvbmx5IGluZGV4ZWQgYnkgc3VtbWFyaXppbmcKLWluZGV4ZXMsIHRoZSBIT1Qg b3B0aW1pemF0aW9uIGlzIGFwcGxpZWQsIGJ1dCB0aGUgdXBkYXRlIGlzIHByb3BhZ2F0ZWQg dG8KLWFsbCBzdW1tYXJpemluZyBpbmRleGVzLiAgKFJlYWxpc3RpY2FsbHksIHdlIG9ubHkg bmVlZCB0byBwcm9wYWdhdGUgdGhlCi11cGRhdGUgdG8gdGhlIGluZGV4ZXMgdGhhdCBjb250 YWluIHRoZSB1cGRhdGVkIHZhbHVlcywgYnV0IHRoYXQgaXMgeWV0IHRvCi1iZSBpbXBsZW1l bnRlZC4pCitpbmRleGVzLCB0aGUgSE9UIG9wdGltaXphdGlvbiBpcyBhcHBsaWVkIGFuZCB0 aGUgdXBkYXRlIGlzIHByb3BhZ2F0ZWQgdG8KK2FsbCBvZiB0aGUgc3VtbWFyaXppbmcgaW5k ZXhlcy4KIAogQWJvcnQgQ2FzZXMKIC0tLS0tLS0tLS0tCkBAIC00NzcsOCArNDgzLDkgQEAg SGVhcC1vbmx5IHR1cGxlCiBIT1Qtc2FmZQogCiAJQSBwcm9wb3NlZCB0dXBsZSB1cGRhdGUg aXMgc2FpZCB0byBiZSBIT1Qtc2FmZSBpZiBpdCBjaGFuZ2VzCi0Jbm9uZSBvZiB0aGUgdHVw bGUncyBpbmRleGVkIGNvbHVtbnMuICBJdCB3aWxsIG9ubHkgYmVjb21lIGFuCi0JYWN0dWFs IEhPVCB1cGRhdGUgaWYgd2UgY2FuIGZpbmQgcm9vbSBvbiB0aGUgc2FtZSBwYWdlIGZvcgor CW5vbmUgb2YgdGhlIHR1cGxlJ3MgaW5kZXhlZCBjb2x1bW5zIG9yIGlmIHRoZSBjaGFuZ2Vz IHJlbWFpbgorCW91dHNpZGUgb2YgYSBwYXJ0aWFsIGluZGV4J3MgcHJlZGljYXRlLiAgSXQg d2lsbCBvbmx5IGJlY29tZQorCWFuIGFjdHVhbCBIT1QgdXBkYXRlIGlmIHdlIGNhbiBmaW5k IHJvb20gb24gdGhlIHNhbWUgcGFnZSBmb3IKIAl0aGUgbmV3IHR1cGxlIHZlcnNpb24uCiAK IEhPVCB1cGRhdGUKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBh bS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtLmMKaW5kZXggMGRjZDZlZTgx N2UuLjllZGQxODgwOGY4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9o ZWFwYW0uYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW0uYwpAQCAtMzIz OCwxMyArMzIzOCwxNCBAQCBzaW1wbGVfaGVhcF9kZWxldGUoUmVsYXRpb24gcmVsYXRpb24s IEl0ZW1Qb2ludGVyIHRpZCkKIFRNX1Jlc3VsdAogaGVhcF91cGRhdGUoUmVsYXRpb24gcmVs YXRpb24sIEl0ZW1Qb2ludGVyIG90aWQsIEhlYXBUdXBsZSBuZXd0dXAsCiAJCQlDb21tYW5k SWQgY2lkLCBTbmFwc2hvdCBjcm9zc2NoZWNrLCBib29sIHdhaXQsCi0JCQlUTV9GYWlsdXJl RGF0YSAqdG1mZCwgTG9ja1R1cGxlTW9kZSAqbG9ja21vZGUsCi0JCQlUVV9VcGRhdGVJbmRl eGVzICp1cGRhdGVfaW5kZXhlcykKKwkJCVRNX0ZhaWx1cmVEYXRhICp0bWZkLCBVcGRhdGVD b250ZXh0ICp1cGRhdGVDeHQpCiB7CiAJVE1fUmVzdWx0CXJlc3VsdDsKIAlUcmFuc2FjdGlv bklkIHhpZCA9IEdldEN1cnJlbnRUcmFuc2FjdGlvbklkKCk7CisJTG9ja1R1cGxlTW9kZSAq bG9ja21vZGUgPSAmdXBkYXRlQ3h0LT5sb2NrbW9kZTsKIAlCaXRtYXBzZXQgICpob3RfYXR0 cnM7CiAJQml0bWFwc2V0ICAqc3VtX2F0dHJzOworCUJpdG1hcHNldCAgKmV4cF9hdHRyczsK IAlCaXRtYXBzZXQgICprZXlfYXR0cnM7CiAJQml0bWFwc2V0ICAqaWRfYXR0cnM7CiAJQml0 bWFwc2V0ICAqaW50ZXJlc3RpbmdfYXR0cnM7CkBAIC0zMzIzLDYgKzMzMjQsOCBAQCBoZWFw X3VwZGF0ZShSZWxhdGlvbiByZWxhdGlvbiwgSXRlbVBvaW50ZXIgb3RpZCwgSGVhcFR1cGxl IG5ld3R1cCwKIAkJCQkJCQkJCQkgICBJTkRFWF9BVFRSX0JJVE1BUF9IT1RfQkxPQ0tJTkcp OwogCXN1bV9hdHRycyA9IFJlbGF0aW9uR2V0SW5kZXhBdHRyQml0bWFwKHJlbGF0aW9uLAog CQkJCQkJCQkJCSAgIElOREVYX0FUVFJfQklUTUFQX1NVTU1BUklaRUQpOworCWV4cF9hdHRy cyA9IFJlbGF0aW9uR2V0SW5kZXhBdHRyQml0bWFwKHJlbGF0aW9uLAorCQkJCQkJCQkJCSAg IElOREVYX0FUVFJfQklUTUFQX0VYUFJFU1NJT04pOwogCWtleV9hdHRycyA9IFJlbGF0aW9u R2V0SW5kZXhBdHRyQml0bWFwKHJlbGF0aW9uLCBJTkRFWF9BVFRSX0JJVE1BUF9LRVkpOwog CWlkX2F0dHJzID0gUmVsYXRpb25HZXRJbmRleEF0dHJCaXRtYXAocmVsYXRpb24sCiAJCQkJ CQkJCQkJICBJTkRFWF9BVFRSX0JJVE1BUF9JREVOVElUWV9LRVkpOwpAQCAtMzM4NCwxMCAr MzM4NywxMSBAQCBoZWFwX3VwZGF0ZShSZWxhdGlvbiByZWxhdGlvbiwgSXRlbVBvaW50ZXIg b3RpZCwgSGVhcFR1cGxlIG5ld3R1cCwKIAkJdG1mZC0+Y3RpZCA9ICpvdGlkOwogCQl0bWZk LT54bWF4ID0gSW52YWxpZFRyYW5zYWN0aW9uSWQ7CiAJCXRtZmQtPmNtYXggPSBJbnZhbGlk Q29tbWFuZElkOwotCQkqdXBkYXRlX2luZGV4ZXMgPSBUVV9Ob25lOworCQl1cGRhdGVDeHQt PnVwZGF0ZUluZGV4ZXMgPSBUVV9Ob25lOwogCiAJCWJtc19mcmVlKGhvdF9hdHRycyk7CiAJ CWJtc19mcmVlKHN1bV9hdHRycyk7CisJCWJtc19mcmVlKGV4cF9hdHRycyk7CiAJCWJtc19m cmVlKGtleV9hdHRycyk7CiAJCWJtc19mcmVlKGlkX2F0dHJzKTsKIAkJLyogbW9kaWZpZWRf YXR0cnMgbm90IHlldCBpbml0aWFsaXplZCAqLwpAQCAtMzY4NSwxMCArMzY4OSwxMSBAQCBs MjoKIAkJCVVubG9ja1R1cGxlVHVwbG9jayhyZWxhdGlvbiwgJihvbGR0dXAudF9zZWxmKSwg KmxvY2ttb2RlKTsKIAkJaWYgKHZtYnVmZmVyICE9IEludmFsaWRCdWZmZXIpCiAJCQlSZWxl YXNlQnVmZmVyKHZtYnVmZmVyKTsKLQkJKnVwZGF0ZV9pbmRleGVzID0gVFVfTm9uZTsKKwkJ dXBkYXRlQ3h0LT51cGRhdGVJbmRleGVzID0gVFVfTm9uZTsKIAogCQlibXNfZnJlZShob3Rf YXR0cnMpOwogCQlibXNfZnJlZShzdW1fYXR0cnMpOworCQlibXNfZnJlZShleHBfYXR0cnMp OwogCQlibXNfZnJlZShrZXlfYXR0cnMpOwogCQlibXNfZnJlZShpZF9hdHRycyk7CiAJCWJt c19mcmVlKG1vZGlmaWVkX2F0dHJzKTsKQEAgLTQwMDUsMjMgKzQwMTAsMzkgQEAgbDI6CiAK IAlpZiAobmV3YnVmID09IGJ1ZmZlcikKIAl7CisJCVJlc3VsdFJlbEluZm8gKnJlc3VsdFJl bEluZm8gPSB1cGRhdGVDeHQtPnJyaTsKKwkJRVN0YXRlCSAgICplc3RhdGUgPSB1cGRhdGVD eHQtPmVzdGF0ZTsKKwogCQkvKgotCQkgKiBTaW5jZSB0aGUgbmV3IHR1cGxlIGlzIGdvaW5n IGludG8gdGhlIHNhbWUgcGFnZSwgd2UgbWlnaHQgYmUgYWJsZQotCQkgKiB0byBkbyBhIEhP VCB1cGRhdGUuICBDaGVjayBpZiBhbnkgb2YgdGhlIGluZGV4IGNvbHVtbnMgaGF2ZSBiZWVu Ci0JCSAqIGNoYW5nZWQuCisJCSAqIGhvdF9hdHRycyBpbmNsdWRlcyBpbmRleGVzIHdpdGgg ZXhwcmVzc2lvbnMgYW5kIGluZGV4ZXMgd2l0aAorCQkgKiBwcmVkaWNhdGVzIHRoYXQgbWF5 IG5vdCBiZSBpbXBhY3RlZCBieSB0aGlzIGNoYW5nZS4gIElmIHRoZQorCQkgKiBtb2RpZmll ZCBhdHRyaWJ1dGVzIGluIHRoaXMgdXBkYXRlIGRvbid0IG92ZXJsYXAgd2l0aCBhbnkKKwkJ ICogYXR0cmlidXRlcyByZWZlcmVuY2VkIGJ5IGluZGV4ZXMgb24gdGhlIHJlbGF0aW9uIHRo ZW4gd2UgY2FuIHVzZQorCQkgKiB0aGUgSE9UIHVwZGF0ZSBwYXRoLiAgSWYgdGhleSBkbyBv dmVybGFwLCB0aGVuIGNoZWNrIHRvIHNlZSBpZiB0aGUKKwkJICogb3ZlcmxhcCBpcyBleGNs dXNpdmVseSBkdWUgdG8gYXR0cmlidXRlcyB0aGF0IGFyZSBvbmx5IHJlZmVyZW5jZWQKKwkJ ICogd2l0aGluIGV4cHJlc3Npb25zLiAgSWYgdGhhdCBpcyB0aGUgY2FzZSwgdGhlIEhPVCB1 cGRhdGUgcGF0aCBtYXkKKwkJICogYmUgcG9zc2libGUgaWZmIHRoZSBleHByZXNzaW9uIGlu ZGV4ZXMgYXJlIHVuY2hhbmdlZCBieSB0aGlzIHVwZGF0ZQorCQkgKiBvciwgd2l0aCBwYXJ0 aWFsIGluZGV4ZXMsIGJvdGggdGhlIG5ldyBhbmQgdGhlIG9sZCBoZWFwIHR1cGxlcworCQkg KiBkb24ndCBzYXRpc2Z5IHRoZSBwYXJ0aWFsIGluZGV4IHByZWRpY2F0ZSBleHByZXNzaW9u IChtZWFuaW5nIHRoZXkKKwkJICogYXJlIGJvdGggb3V0c2lkZSBvZiB0aGUgc2NvcGUgb2Yg dGhlIGluZGV4KS4KIAkJICovCi0JCWlmICghYm1zX292ZXJsYXAobW9kaWZpZWRfYXR0cnMs IGhvdF9hdHRycykpCisJCWlmICghYm1zX292ZXJsYXAobW9kaWZpZWRfYXR0cnMsIGhvdF9h dHRycykgfHwKKwkJCShibXNfaXNfc3Vic2V0KG1vZGlmaWVkX2F0dHJzLCBleHBfYXR0cnMp ICYmCisJCQkgIUV4ZWNFeHBySW5kZXhlc1JlcXVpcmVVcGRhdGVzKHJlbGF0aW9uLAorCQkJ CQkJCQkJCQlyZXN1bHRSZWxJbmZvLAorCQkJCQkJCQkJCQltb2RpZmllZF9hdHRycywKKwkJ CQkJCQkJCQkJZXN0YXRlLAorCQkJCQkJCQkJCQlyZXN1bHRSZWxJbmZvLT5yaV9vbGRUdXBs ZVNsb3QsCisJCQkJCQkJCQkJCXJlc3VsdFJlbEluZm8tPnJpX25ld1R1cGxlU2xvdCkpKQog CQl7CiAJCQl1c2VfaG90X3VwZGF0ZSA9IHRydWU7CiAKIAkJCS8qCi0JCQkgKiBJZiBub25l IG9mIHRoZSBjb2x1bW5zIHRoYXQgYXJlIHVzZWQgaW4gaG90LWJsb2NraW5nIGluZGV4ZXMK LQkJCSAqIHdlcmUgdXBkYXRlZCwgd2UgY2FuIGFwcGx5IEhPVCwgYnV0IHdlIGRvIHN0aWxs IG5lZWQgdG8gY2hlY2sKLQkJCSAqIGlmIHdlIG5lZWQgdG8gdXBkYXRlIHRoZSBzdW1tYXJp emluZyBpbmRleGVzLCBhbmQgdXBkYXRlIHRob3NlCi0JCQkgKiBpbmRleGVzIGlmIHRoZSBj b2x1bW5zIHdlcmUgdXBkYXRlZCwgb3Igd2UgbWF5IGZhaWwgdG8gZGV0ZWN0Ci0JCQkgKiBl LmcuIHZhbHVlIGJvdW5kIGNoYW5nZXMgaW4gQlJJTiBtaW5tYXggaW5kZXhlcy4KKwkJCSAq IElmIGFsbCBtb2RpZmllZCBhdHRyaWJ1dGVzIHdlcmUgb25seSByZWZlcmVuY2VkIGJ5IHN1 bW1hcml6aW5nCisJCQkgKiBpbmRleGVzIHRoZW4gd2UgcmVtYWluIEhPVCwgYnV0IHdlIG5l ZWQgdG8gdXBkYXRlIHRob3NlIGluZGV4ZXMKKwkJCSAqIHRvIGVuc3VyZSB0aGF0IHRoZXkg YXJlIGNvbnNpc3RlbnQgd2l0aCB0aGUgbmV3IHR1cGxlLgogCQkJICovCi0JCQlpZiAoYm1z X292ZXJsYXAobW9kaWZpZWRfYXR0cnMsIHN1bV9hdHRycykpCisJCQlpZiAoYm1zX2lzX3N1 YnNldChtb2RpZmllZF9hdHRycywgc3VtX2F0dHJzKSkKIAkJCQlzdW1tYXJpemVkX3VwZGF0 ZSA9IHRydWU7CiAJCX0KIAl9CkBAIC00MTkyLDE4ICs0MjEzLDE5IEBAIGwyOgogCWlmICh1 c2VfaG90X3VwZGF0ZSkKIAl7CiAJCWlmIChzdW1tYXJpemVkX3VwZGF0ZSkKLQkJCSp1cGRh dGVfaW5kZXhlcyA9IFRVX1N1bW1hcml6aW5nOworCQkJdXBkYXRlQ3h0LT51cGRhdGVJbmRl eGVzID0gVFVfU3VtbWFyaXppbmc7CiAJCWVsc2UKLQkJCSp1cGRhdGVfaW5kZXhlcyA9IFRV X05vbmU7CisJCQl1cGRhdGVDeHQtPnVwZGF0ZUluZGV4ZXMgPSBUVV9Ob25lOwogCX0KIAll bHNlCi0JCSp1cGRhdGVfaW5kZXhlcyA9IFRVX0FsbDsKKwkJdXBkYXRlQ3h0LT51cGRhdGVJ bmRleGVzID0gVFVfQWxsOwogCiAJaWYgKG9sZF9rZXlfdHVwbGUgIT0gTlVMTCAmJiBvbGRf a2V5X2NvcGllZCkKIAkJaGVhcF9mcmVldHVwbGUob2xkX2tleV90dXBsZSk7CiAKIAlibXNf ZnJlZShob3RfYXR0cnMpOwogCWJtc19mcmVlKHN1bV9hdHRycyk7CisJYm1zX2ZyZWUoZXhw X2F0dHJzKTsKIAlibXNfZnJlZShrZXlfYXR0cnMpOwogCWJtc19mcmVlKGlkX2F0dHJzKTsK IAlibXNfZnJlZShtb2RpZmllZF9hdHRycyk7CkBAIC00NDgxLDE2ICs0NTAzLDE1IEBAIEhl YXBEZXRlcm1pbmVDb2x1bW5zSW5mbyhSZWxhdGlvbiByZWxhdGlvbiwKICAqLwogdm9pZAog c2ltcGxlX2hlYXBfdXBkYXRlKFJlbGF0aW9uIHJlbGF0aW9uLCBJdGVtUG9pbnRlciBvdGlk LCBIZWFwVHVwbGUgdHVwLAotCQkJCSAgIFRVX1VwZGF0ZUluZGV4ZXMgKnVwZGF0ZV9pbmRl eGVzKQorCQkJCSAgIFVwZGF0ZUNvbnRleHQgKnVwZGF0ZUN4dCkKIHsKIAlUTV9SZXN1bHQJ cmVzdWx0OwogCVRNX0ZhaWx1cmVEYXRhIHRtZmQ7Ci0JTG9ja1R1cGxlTW9kZSBsb2NrbW9k ZTsKIAogCXJlc3VsdCA9IGhlYXBfdXBkYXRlKHJlbGF0aW9uLCBvdGlkLCB0dXAsCiAJCQkJ CQkgR2V0Q3VycmVudENvbW1hbmRJZCh0cnVlKSwgSW52YWxpZFNuYXBzaG90LAogCQkJCQkJ IHRydWUgLyogd2FpdCBmb3IgY29tbWl0ICovICwKLQkJCQkJCSAmdG1mZCwgJmxvY2ttb2Rl LCB1cGRhdGVfaW5kZXhlcyk7CisJCQkJCQkgJnRtZmQsIHVwZGF0ZUN4dCk7CiAJc3dpdGNo IChyZXN1bHQpCiAJewogCQljYXNlIFRNX1NlbGZNb2RpZmllZDoKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMgYi9zcmMvYmFja2VuZC9h Y2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCmluZGV4IGNiNGJjMzVjOTNlLi5hZTAzZWQ1 ZTcxOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRs ZXIuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCkBA IC0zMTYsOCArMzE2LDcgQEAgaGVhcGFtX3R1cGxlX2RlbGV0ZShSZWxhdGlvbiByZWxhdGlv biwgSXRlbVBvaW50ZXIgdGlkLCBDb21tYW5kSWQgY2lkLAogc3RhdGljIFRNX1Jlc3VsdAog aGVhcGFtX3R1cGxlX3VwZGF0ZShSZWxhdGlvbiByZWxhdGlvbiwgSXRlbVBvaW50ZXIgb3Rp ZCwgVHVwbGVUYWJsZVNsb3QgKnNsb3QsCiAJCQkJCUNvbW1hbmRJZCBjaWQsIFNuYXBzaG90 IHNuYXBzaG90LCBTbmFwc2hvdCBjcm9zc2NoZWNrLAotCQkJCQlib29sIHdhaXQsIFRNX0Zh aWx1cmVEYXRhICp0bWZkLAotCQkJCQlMb2NrVHVwbGVNb2RlICpsb2NrbW9kZSwgVFVfVXBk YXRlSW5kZXhlcyAqdXBkYXRlX2luZGV4ZXMpCisJCQkJCWJvb2wgd2FpdCwgVE1fRmFpbHVy ZURhdGEgKnRtZmQsIFVwZGF0ZUNvbnRleHQgKnVwZGF0ZUN4dCkKIHsKIAlib29sCQlzaG91 bGRGcmVlID0gdHJ1ZTsKIAlIZWFwVHVwbGUJdHVwbGUgPSBFeGVjRmV0Y2hTbG90SGVhcFR1 cGxlKHNsb3QsIHRydWUsICZzaG91bGRGcmVlKTsKQEAgLTMyOCw3ICszMjcsNyBAQCBoZWFw YW1fdHVwbGVfdXBkYXRlKFJlbGF0aW9uIHJlbGF0aW9uLCBJdGVtUG9pbnRlciBvdGlkLCBU dXBsZVRhYmxlU2xvdCAqc2xvdCwKIAl0dXBsZS0+dF90YWJsZU9pZCA9IHNsb3QtPnR0c190 YWJsZU9pZDsKIAogCXJlc3VsdCA9IGhlYXBfdXBkYXRlKHJlbGF0aW9uLCBvdGlkLCB0dXBs ZSwgY2lkLCBjcm9zc2NoZWNrLCB3YWl0LAotCQkJCQkJIHRtZmQsIGxvY2ttb2RlLCB1cGRh dGVfaW5kZXhlcyk7CisJCQkJCQkgdG1mZCwgdXBkYXRlQ3h0KTsKIAlJdGVtUG9pbnRlckNv cHkoJnR1cGxlLT50X3NlbGYsICZzbG90LT50dHNfdGlkKTsKIAogCS8qCkBAIC0zNDMsMTQg KzM0MiwxNCBAQCBoZWFwYW1fdHVwbGVfdXBkYXRlKFJlbGF0aW9uIHJlbGF0aW9uLCBJdGVt UG9pbnRlciBvdGlkLCBUdXBsZVRhYmxlU2xvdCAqc2xvdCwKIAkgKi8KIAlpZiAocmVzdWx0 ICE9IFRNX09rKQogCXsKLQkJQXNzZXJ0KCp1cGRhdGVfaW5kZXhlcyA9PSBUVV9Ob25lKTsK LQkJKnVwZGF0ZV9pbmRleGVzID0gVFVfTm9uZTsKKwkJQXNzZXJ0KHVwZGF0ZUN4dC0+dXBk YXRlSW5kZXhlcyA9PSBUVV9Ob25lKTsKKwkJdXBkYXRlQ3h0LT51cGRhdGVJbmRleGVzID0g VFVfTm9uZTsKIAl9CiAJZWxzZSBpZiAoIUhlYXBUdXBsZUlzSGVhcE9ubHkodHVwbGUpKQot CQlBc3NlcnQoKnVwZGF0ZV9pbmRleGVzID09IFRVX0FsbCk7CisJCUFzc2VydCh1cGRhdGVD eHQtPnVwZGF0ZUluZGV4ZXMgPT0gVFVfQWxsKTsKIAllbHNlCi0JCUFzc2VydCgoKnVwZGF0 ZV9pbmRleGVzID09IFRVX1N1bW1hcml6aW5nKSB8fAotCQkJICAgKCp1cGRhdGVfaW5kZXhl cyA9PSBUVV9Ob25lKSk7CisJCUFzc2VydCgodXBkYXRlQ3h0LT51cGRhdGVJbmRleGVzID09 IFRVX1N1bW1hcml6aW5nKSB8fAorCQkJICAgKHVwZGF0ZUN4dC0+dXBkYXRlSW5kZXhlcyA9 PSBUVV9Ob25lKSk7CiAKIAlpZiAoc2hvdWxkRnJlZSkKIAkJcGZyZWUodHVwbGUpOwpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxlL3RhYmxlYW0uYyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy90YWJsZS90YWJsZWFtLmMKaW5kZXggYTU2YzVlY2ViMTQuLjFlZWVlYmFk YzA5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbS5jCisr KyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90YWJsZS90YWJsZWFtLmMKQEAgLTMzNiwxNyArMzM2 LDE2IEBAIHZvaWQKIHNpbXBsZV90YWJsZV90dXBsZV91cGRhdGUoUmVsYXRpb24gcmVsLCBJ dGVtUG9pbnRlciBvdGlkLAogCQkJCQkJICBUdXBsZVRhYmxlU2xvdCAqc2xvdCwKIAkJCQkJ CSAgU25hcHNob3Qgc25hcHNob3QsCi0JCQkJCQkgIFRVX1VwZGF0ZUluZGV4ZXMgKnVwZGF0 ZV9pbmRleGVzKQorCQkJCQkJICBVcGRhdGVDb250ZXh0ICp1cGRhdGVDeHQpCiB7CiAJVE1f UmVzdWx0CXJlc3VsdDsKIAlUTV9GYWlsdXJlRGF0YSB0bWZkOwotCUxvY2tUdXBsZU1vZGUg bG9ja21vZGU7CiAKIAlyZXN1bHQgPSB0YWJsZV90dXBsZV91cGRhdGUocmVsLCBvdGlkLCBz bG90LAogCQkJCQkJCQlHZXRDdXJyZW50Q29tbWFuZElkKHRydWUpLAogCQkJCQkJCQlzbmFw c2hvdCwgSW52YWxpZFNuYXBzaG90LAogCQkJCQkJCQl0cnVlIC8qIHdhaXQgZm9yIGNvbW1p dCAqLyAsCi0JCQkJCQkJCSZ0bWZkLCAmbG9ja21vZGUsIHVwZGF0ZV9pbmRleGVzKTsKKwkJ CQkJCQkJJnRtZmQsIHVwZGF0ZUN4dCk7CiAKIAlzd2l0Y2ggKHJlc3VsdCkKIAl7CmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4LmMgYi9zcmMvYmFja2VuZC9jYXRh bG9nL2luZGV4LmMKaW5kZXggYWEyMTY2ODNiNzQuLmNhY2U1MjEyMGFmIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4LmMKKysrIGIvc3JjL2JhY2tlbmQvY2F0YWxv Zy9pbmRleC5jCkBAIC0yNDY3LDYgKzI0NjcsOCBAQCBCdWlsZEluZGV4SW5mbyhSZWxhdGlv biBpbmRleCkKIAkJCQkJCQkJICZpaS0+aWlfRXhjbHVzaW9uU3RyYXRzKTsKIAl9CiAKKwlp aS0+aWlfSW5kZXhBdHRyQnlWYWwgPSBOVUxMOworCiAJcmV0dXJuIGlpOwogfQogCkBAIC0y NzA3LDYgKzI3MDksNTIgQEAgQnVpbGRTcGVjdWxhdGl2ZUluZGV4SW5mbyhSZWxhdGlvbiBp bmRleCwgSW5kZXhJbmZvICppaSkKIAl9CiB9CiAKKy8qIC0tLS0tLS0tLS0tLS0tLS0KKyAq CQlCdWlsZEV4cHJlc3Npb25JbmRleEluZm8KKyAqCQkJQWRkIGV4dHJhIHN0YXRlIHRvIElu ZGV4SW5mbyByZWNvcmQKKyAqCisgKiBGb3IgZXhwcmVzc2lvbiBpbmRleGVzIHVwZGF0ZXMg bWF5IG5vdCBjaGFuZ2UgdGhlIGluZGV4ZWQgdmFsdWUgYWxsb3dpbmcKKyAqIGZvciBhIEhP VCB1cGRhdGUuICBBZGQgaW5mb3JtYXRpb24gdG8gdGhlIEluZGV4SW5mbyB0byBhbGxvdyBm b3IgY2hlY2tpbmcKKyAqIGlmIHRoZSBpbmRleGVkIHZhbHVlIGhhcyBjaGFuZ2VkLgorICoK KyAqIERvIHRoaXMgcHJvY2Vzc2luZyBoZXJlIHJhdGhlciB0aGFuIGluIEJ1aWxkSW5kZXhJ bmZvKCkgdG8gbm90IGluY3VyIHRoZQorICogb3ZlcmhlYWQgaW4gdGhlIGNvbW1vbiBub24t ZXhwcmVzc2lvbiBjYXNlcy4KKyAqIC0tLS0tLS0tLS0tLS0tLS0KKyAqLwordm9pZAorQnVp bGRFeHByZXNzaW9uSW5kZXhJbmZvKFJlbGF0aW9uIGluZGV4LCBJbmRleEluZm8gKmlpKQor eworCWludAkJCWk7CisJaW50CQkJaW5kbmtleWF0dHM7CisKKwkvKgorCSAqIEV4cHJlc3Np b25zIGFyZSBub3QgYWxsb3dlZCBvbiBub24ta2V5IGF0dHJpYnV0ZXMsIHNvIHdlIGNhbiBz a2lwIHRoZW0KKwkgKiBhcyB0aGV5IHNob3VsZCBzaG93IHVwIGluIHRoZSBpbmRleCBIT1Qt YmxvY2tpbmcgYXR0cmlidXRlcy4KKwkgKi8KKwlpbmRua2V5YXR0cyA9IEluZGV4UmVsYXRp b25HZXROdW1iZXJPZktleUF0dHJpYnV0ZXMoaW5kZXgpOworCisJLyoKKwkgKiBDb2xsZWN0 IGF0dHJpYnV0ZXMgdXNlZCBieSB0aGUgaW5kZXgsIHRoZWlyIGxlbiBhbmQgaWYgdGhleSBh cmUgYnkKKwkgKiB2YWx1ZS4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgaW5kbmtleWF0dHM7 IGkrKykKKwl7CisJCUNvbXBhY3RBdHRyaWJ1dGUgKmF0dHIgPSBUdXBsZURlc2NDb21wYWN0 QXR0cihSZWxhdGlvbkdldERlc2NyKGluZGV4KSwgaSk7CisKKwkJaWktPmlpX0luZGV4QXR0 ckxlbltpXSA9IGF0dHItPmF0dGxlbjsKKwkJaWYgKGF0dHItPmF0dGJ5dmFsKQorCQkJaWkt PmlpX0luZGV4QXR0ckJ5VmFsID0gYm1zX2FkZF9tZW1iZXIoaWktPmlpX0luZGV4QXR0ckJ5 VmFsLCBpKTsKKwl9CisKKwkvKiBjb2xsZWN0IGF0dHJpYnV0ZXMgdXNlZCBpbiB0aGUgZXhw cmVzc2lvbiAqLworCWlmIChpaS0+aWlfRXhwcmVzc2lvbnMpCisJCXB1bGxfdmFyYXR0bm9z KChOb2RlICopIGlpLT5paV9FeHByZXNzaW9ucywgMSwgJmlpLT5paV9FeHByZXNzaW9uc0F0 dHJzKTsKKworCS8qIGNvbGxlY3QgYXR0cmlidXRlcyB1c2VkIGluIHRoZSBwcmVkaWNhdGUg Ki8KKwlpZiAoaWktPmlpX1ByZWRpY2F0ZSkKKwkJcHVsbF92YXJhdHRub3MoKE5vZGUgKikg aWktPmlpX1ByZWRpY2F0ZSwgMSwgJmlpLT5paV9QcmVkaWNhdGVBdHRycyk7Cit9CisKIC8q IC0tLS0tLS0tLS0tLS0tLS0KICAqCQlGb3JtSW5kZXhEYXR1bQogICoJCQlDb25zdHJ1Y3Qg dmFsdWVzW10gYW5kIGlzbnVsbFtdIGFycmF5cyBmb3IgYSBuZXcgaW5kZXggdHVwbGUuCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4aW5nLmMgYi9zcmMvYmFja2Vu ZC9jYXRhbG9nL2luZGV4aW5nLmMKaW5kZXggMjVjNGI2YmRjODcuLmM0MTNjMDk5ZGE4IDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4aW5nLmMKKysrIGIvc3JjL2Jh Y2tlbmQvY2F0YWxvZy9pbmRleGluZy5jCkBAIC00OSw3ICs0OSw3IEBAIENhdGFsb2dPcGVu SW5kZXhlcyhSZWxhdGlvbiBoZWFwUmVsKQogCXJlc3VsdFJlbEluZm8tPnJpX1JlbGF0aW9u RGVzYyA9IGhlYXBSZWw7CiAJcmVzdWx0UmVsSW5mby0+cmlfVHJpZ0Rlc2MgPSBOVUxMOwkv KiB3ZSBkb24ndCBmaXJlIHRyaWdnZXJzICovCiAKLQlFeGVjT3BlbkluZGljZXMocmVzdWx0 UmVsSW5mbywgZmFsc2UpOworCUV4ZWNPcGVuSW5kaWNlcyhyZXN1bHRSZWxJbmZvLCBmYWxz ZSwgZmFsc2UpOwogCiAJcmV0dXJuIHJlc3VsdFJlbEluZm87CiB9CkBAIC0zMTMsMTUgKzMx MywxNyBAQCB2b2lkCiBDYXRhbG9nVHVwbGVVcGRhdGUoUmVsYXRpb24gaGVhcFJlbCwgSXRl bVBvaW50ZXIgb3RpZCwgSGVhcFR1cGxlIHR1cCkKIHsKIAlDYXRhbG9nSW5kZXhTdGF0ZSBp bmRzdGF0ZTsKLQlUVV9VcGRhdGVJbmRleGVzIHVwZGF0ZUluZGV4ZXMgPSBUVV9BbGw7CisJ VXBkYXRlQ29udGV4dCB1cGRhdGVDeHQgPSB7MH07CisKKwl1cGRhdGVDeHQudXBkYXRlSW5k ZXhlcyA9IFRVX0FsbDsKIAogCUNhdGFsb2dUdXBsZUNoZWNrQ29uc3RyYWludHMoaGVhcFJl bCwgdHVwKTsKIAogCWluZHN0YXRlID0gQ2F0YWxvZ09wZW5JbmRleGVzKGhlYXBSZWwpOwog Ci0Jc2ltcGxlX2hlYXBfdXBkYXRlKGhlYXBSZWwsIG90aWQsIHR1cCwgJnVwZGF0ZUluZGV4 ZXMpOworCXNpbXBsZV9oZWFwX3VwZGF0ZShoZWFwUmVsLCBvdGlkLCB0dXAsICZ1cGRhdGVD eHQpOwogCi0JQ2F0YWxvZ0luZGV4SW5zZXJ0KGluZHN0YXRlLCB0dXAsIHVwZGF0ZUluZGV4 ZXMpOworCUNhdGFsb2dJbmRleEluc2VydChpbmRzdGF0ZSwgdHVwLCB1cGRhdGVDeHQudXBk YXRlSW5kZXhlcyk7CiAJQ2F0YWxvZ0Nsb3NlSW5kZXhlcyhpbmRzdGF0ZSk7CiB9CiAKQEAg LTMzNywxMyArMzM5LDE1IEBAIHZvaWQKIENhdGFsb2dUdXBsZVVwZGF0ZVdpdGhJbmZvKFJl bGF0aW9uIGhlYXBSZWwsIEl0ZW1Qb2ludGVyIG90aWQsIEhlYXBUdXBsZSB0dXAsCiAJCQkJ CQkgICBDYXRhbG9nSW5kZXhTdGF0ZSBpbmRzdGF0ZSkKIHsKLQlUVV9VcGRhdGVJbmRleGVz IHVwZGF0ZUluZGV4ZXMgPSBUVV9BbGw7CisJVXBkYXRlQ29udGV4dCB1cGRhdGVDeHQgPSB7 MH07CisKKwl1cGRhdGVDeHQudXBkYXRlSW5kZXhlcyA9IFRVX0FsbDsKIAogCUNhdGFsb2dU dXBsZUNoZWNrQ29uc3RyYWludHMoaGVhcFJlbCwgdHVwKTsKIAotCXNpbXBsZV9oZWFwX3Vw ZGF0ZShoZWFwUmVsLCBvdGlkLCB0dXAsICZ1cGRhdGVJbmRleGVzKTsKKwlzaW1wbGVfaGVh cF91cGRhdGUoaGVhcFJlbCwgb3RpZCwgdHVwLCAmdXBkYXRlQ3h0KTsKIAotCUNhdGFsb2dJ bmRleEluc2VydChpbmRzdGF0ZSwgdHVwLCB1cGRhdGVJbmRleGVzKTsKKwlDYXRhbG9nSW5k ZXhJbnNlcnQoaW5kc3RhdGUsIHR1cCwgdXBkYXRlQ3h0LnVwZGF0ZUluZGV4ZXMpOwogfQog CiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weWZyb20uYyBiL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL2NvcHlmcm9tLmMKaW5kZXggZmJiYmMwOWE5N2IuLmY4Mjcx YWE4ODY2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5ZnJvbS5jCisr KyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHlmcm9tLmMKQEAgLTkyMSw3ICs5MjEsNyBA QCBDb3B5RnJvbShDb3B5RnJvbVN0YXRlIGNzdGF0ZSkKIAkvKiBWZXJpZnkgdGhlIG5hbWVk IHJlbGF0aW9uIGlzIGEgdmFsaWQgdGFyZ2V0IGZvciBJTlNFUlQgKi8KIAlDaGVja1ZhbGlk UmVzdWx0UmVsKHJlc3VsdFJlbEluZm8sIENNRF9JTlNFUlQsIE5JTCk7CiAKLQlFeGVjT3Bl bkluZGljZXMocmVzdWx0UmVsSW5mbywgZmFsc2UpOworCUV4ZWNPcGVuSW5kaWNlcyhyZXN1 bHRSZWxJbmZvLCBmYWxzZSwgZmFsc2UpOwogCiAJLyoKIAkgKiBTZXQgdXAgYSBNb2RpZnlU YWJsZVN0YXRlIHNvIHdlIGNhbiBsZXQgRkRXKHMpIGluaXQgdGhlbXNlbHZlcyBmb3IKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNJbmRleGluZy5jIGIvc3JjL2Jh Y2tlbmQvZXhlY3V0b3IvZXhlY0luZGV4aW5nLmMKaW5kZXggY2EzM2E4NTQyNzguLjk0MDMx MWRjMGQ2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjSW5kZXhpbmcu YworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjSW5kZXhpbmcuYwpAQCAtMTEzLDEw ICsxMTMsMTMgQEAKICNpbmNsdWRlICJjYXRhbG9nL2luZGV4LmgiCiAjaW5jbHVkZSAiZXhl Y3V0b3IvZXhlY3V0b3IuaCIKICNpbmNsdWRlICJub2Rlcy9ub2RlRnVuY3MuaCIKKyNpbmNs dWRlICJvcHRpbWl6ZXIvb3B0aW1pemVyLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9sbWdyLmgi CiAjaW5jbHVkZSAidXRpbHMvbXVsdGlyYW5nZXR5cGVzLmgiCiAjaW5jbHVkZSAidXRpbHMv cmFuZ2V0eXBlcy5oIgogI2luY2x1ZGUgInV0aWxzL3NuYXBtZ3IuaCIKKyNpbmNsdWRlICJ1 dGlscy9kYXR1bS5oIgorI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgogCiAvKiB3YWl0 TW9kZSBhcmd1bWVudCB0byBjaGVja19leGNsdXNpb25fb3JfdW5pcXVlX2NvbnN0cmFpbnQo KSAqLwogdHlwZWRlZiBlbnVtCkBAIC0xNTcsNyArMTYwLDcgQEAgc3RhdGljIHZvaWQgRXhl Y1dpdGhvdXRPdmVybGFwc05vdEVtcHR5KFJlbGF0aW9uIHJlbCwgTmFtZURhdGEgYXR0bmFt ZSwgRGF0dW0gYXQKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwogdm9pZAotRXhlY09wZW5JbmRpY2Vz KFJlc3VsdFJlbEluZm8gKnJlc3VsdFJlbEluZm8sIGJvb2wgc3BlY3VsYXRpdmUpCitFeGVj T3BlbkluZGljZXMoUmVzdWx0UmVsSW5mbyAqcmVzdWx0UmVsSW5mbywgYm9vbCBzcGVjdWxh dGl2ZSwgYm9vbCB1cGRhdGUpCiB7CiAJUmVsYXRpb24JcmVzdWx0UmVsYXRpb24gPSByZXN1 bHRSZWxJbmZvLT5yaV9SZWxhdGlvbkRlc2M7CiAJTGlzdAkgICAqaW5kZXhvaWRsaXN0OwpA QCAtMjIwLDYgKzIyMywxMyBAQCBFeGVjT3BlbkluZGljZXMoUmVzdWx0UmVsSW5mbyAqcmVz dWx0UmVsSW5mbywgYm9vbCBzcGVjdWxhdGl2ZSkKIAkJaWYgKHNwZWN1bGF0aXZlICYmIGlp LT5paV9VbmlxdWUgJiYgIWluZGV4RGVzYy0+cmRfaW5kZXgtPmluZGlzZXhjbHVzaW9uKQog CQkJQnVpbGRTcGVjdWxhdGl2ZUluZGV4SW5mbyhpbmRleERlc2MsIGlpKTsKIAorCQkvKgor CQkgKiBJZiB0aGUgaW5kZXggdXNlcyBleHByZXNzaW9ucyB0aGVuIGxldCdzIHBvcHVsYXRl IHRoZSBhZGRpdGlvbmFsCisJCSAqIGluZm9ybWF0aW9uIG5lc3NhYXJ5IHRvIGV2YWx1YXRl IHRoZW0gZm9yIGNoYW5nZXMgZHVyaW5nIHVwZGF0ZXMuCisJCSAqLworCQlpZiAodXBkYXRl ICYmIChpaS0+aWlfRXhwcmVzc2lvbnMgfHwgaWktPmlpX1ByZWRpY2F0ZSkpCisJCQlCdWls ZEV4cHJlc3Npb25JbmRleEluZm8oaW5kZXhEZXNjLCBpaSk7CisKIAkJcmVsYXRpb25EZXNj c1tpXSA9IGluZGV4RGVzYzsKIAkJaW5kZXhJbmZvQXJyYXlbaV0gPSBpaTsKIAkJaSsrOwpA QCAtMzgyLDE5ICszOTIsMzMgQEAgRXhlY0luc2VydEluZGV4VHVwbGVzKFJlc3VsdFJlbElu Zm8gKnJlc3VsdFJlbEluZm8sCiAJCQlFeHByU3RhdGUgICpwcmVkaWNhdGU7CiAKIAkJCS8q Ci0JCQkgKiBJZiBwcmVkaWNhdGUgc3RhdGUgbm90IHNldCB1cCB5ZXQsIGNyZWF0ZSBpdCAo aW4gdGhlIGVzdGF0ZSdzCi0JCQkgKiBwZXItcXVlcnkgY29udGV4dCkKKwkJCSAqIEl0IGlz IHBvc3NpYmxlIHRoYXQgd2UndmUgYWxyZWFkeSBjaGVja2VkIHRoZSBwcmVkaWNhdGUsIGlm IHNvCisJCQkgKiB0aGVuIGF2b2lkIHRoZSBkdXBsaWNhdGUgd29yay4KIAkJCSAqLwotCQkJ cHJlZGljYXRlID0gaW5kZXhJbmZvLT5paV9QcmVkaWNhdGVTdGF0ZTsKLQkJCWlmIChwcmVk aWNhdGUgPT0gTlVMTCkKKwkJCWlmIChpbmRleEluZm8tPmlpX0NoZWNrZWRQcmVkaWNhdGUp CiAJCQl7Ci0JCQkJcHJlZGljYXRlID0gRXhlY1ByZXBhcmVRdWFsKGluZGV4SW5mby0+aWlf UHJlZGljYXRlLCBlc3RhdGUpOwotCQkJCWluZGV4SW5mby0+aWlfUHJlZGljYXRlU3RhdGUg PSBwcmVkaWNhdGU7CisJCQkJLyogU2tpcCB0aGlzIGluZGV4LXVwZGF0ZSBpZiB0aGUgcHJl ZGljYXRlIGlzbid0IHNhdGlzZmllZCAqLworCQkJCWlmICghaW5kZXhJbmZvLT5paV9QcmVk aWNhdGVTYXRpc2ZpZWQpCisJCQkJCWNvbnRpbnVlOwogCQkJfQorCQkJZWxzZQorCQkJewog Ci0JCQkvKiBTa2lwIHRoaXMgaW5kZXgtdXBkYXRlIGlmIHRoZSBwcmVkaWNhdGUgaXNuJ3Qg c2F0aXNmaWVkICovCi0JCQlpZiAoIUV4ZWNRdWFsKHByZWRpY2F0ZSwgZWNvbnRleHQpKQot CQkJCWNvbnRpbnVlOworCQkJCS8qCisJCQkJICogSWYgcHJlZGljYXRlIHN0YXRlIG5vdCBz ZXQgdXAgeWV0LCBjcmVhdGUgaXQgKGluIHRoZQorCQkJCSAqIGVzdGF0ZSdzIHBlci1xdWVy eSBjb250ZXh0KQorCQkJCSAqLworCQkJCXByZWRpY2F0ZSA9IGluZGV4SW5mby0+aWlfUHJl ZGljYXRlU3RhdGU7CisJCQkJaWYgKHByZWRpY2F0ZSA9PSBOVUxMKQorCQkJCXsKKwkJCQkJ cHJlZGljYXRlID0gRXhlY1ByZXBhcmVRdWFsKGluZGV4SW5mby0+aWlfUHJlZGljYXRlLCBl c3RhdGUpOworCQkJCQlpbmRleEluZm8tPmlpX1ByZWRpY2F0ZVN0YXRlID0gcHJlZGljYXRl OworCQkJCX0KKworCQkJCS8qIFNraXAgdGhpcyBpbmRleC11cGRhdGUgaWYgdGhlIHByZWRp Y2F0ZSBpc24ndCBzYXRpc2ZpZWQgKi8KKwkJCQlpZiAoIUV4ZWNRdWFsKHByZWRpY2F0ZSwg ZWNvbnRleHQpKQorCQkJCQljb250aW51ZTsKKwkJCX0KIAkJfQogCiAJCS8qCkBAIC0xMDk1 LDYgKzExMTksOSBAQCBpbmRleF91bmNoYW5nZWRfYnlfdXBkYXRlKFJlc3VsdFJlbEluZm8g KnJlc3VsdFJlbEluZm8sIEVTdGF0ZSAqZXN0YXRlLAogCiAJaWYgKGhhc2V4cHJlc3Npb24p CiAJeworCQlpZiAoaW5kZXhJbmZvLT5paV9JbmRleFVuY2hhbmdlZCkKKwkJCXJldHVybiB0 cnVlOworCiAJCWluZGV4SW5mby0+aWlfSW5kZXhVbmNoYW5nZWQgPSBmYWxzZTsKIAkJcmV0 dXJuIGZhbHNlOwogCX0KQEAgLTExNzIsMyArMTE5OSwxNjggQEAgRXhlY1dpdGhvdXRPdmVy bGFwc05vdEVtcHR5KFJlbGF0aW9uIHJlbCwgTmFtZURhdGEgYXR0bmFtZSwgRGF0dW0gYXR0 dmFsLCBjaGFyIHQKIAkJCQkgZXJybXNnKCJlbXB0eSBXSVRIT1VUIE9WRVJMQVBTIHZhbHVl IGZvdW5kIGluIGNvbHVtbiBcIiVzXCIgaW4gcmVsYXRpb24gXCIlc1wiIiwKIAkJCQkJCU5h bWVTdHIoYXR0bmFtZSksIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbCkpKSk7CiB9CisK Ky8qCisgKgorICogVGhpcyB3aWxsIGZpcnN0IGRldGVybWluZSBpZiB0aGUgaW5kZXggaGFz IGEgcHJlZGljYXRlIGFuZCBpZiBzbyBpZiB0aGUKKyAqIHVwZGF0ZSBzYXRpc2ZpZXMgdGhh dCBvciBub3QuICBUaGVuLCBpZiBuZWNlc3NhcnksIHdlIGNvbXBhcmUgb2xkIGFuZAorICog bmV3IHZhbHVlcyBvZiB0aGUgaW5kZXhlZCBleHByZXNzaW9uIGFuZCBoZWxwIGRldGVybWlu ZSBpZiBpdCBpcyBwb3NzaWJsZQorICogdG8gdXNlIGEgSE9UIHVwZGF0ZSBvciBub3QuCisg KgorICogJ3Jlc3VsdFJlbEluZm8nIGlzIHRoZSB0YWJsZSB3aXRoIHRoZSBpbmRleGVzIHdl IHNob3VsZCBleGFtaW5lLgorICogJ21vZGlmaWVkJyBpcyB0aGUgc2V0IG9mIGF0dHJpYnV0 ZXMgdGhhdCBhcmUgbW9kaWZpZWQgYnkgdGhlIHVwZGF0ZS4KKyAqICdlc3RhdGUnIGlzIHRo ZSBleGVjdXRvciBzdGF0ZSBmb3IgdGhlIHVwZGF0ZS4KKyAqICdvbGRfdHRzJyBpcyBhIHNs b3Qgd2l0aCB0aGUgb2xkIHR1cGxlLgorICogJ25ld190dHMnIGlzIGEgc2xvdCB3aXRoIHRo ZSBuZXcgdHVwbGUuCisgKgorICogUmV0dXJucyB0cnVlIGlmZiBub25lIG9mIHRoZSBpbmRl eGVzIG9uIHRoaXMgcmVsYXRpb24gcmVxdWlyZSB1cGRhdGluZy4KKyAqCisgKiBXaGVuIHRo ZSBjaGFuZ2VzIGluIG5ldyB0dXBsZSBpbXBhY3QgYSB2YWx1ZSBzdG9yZWQgaW4gYW4gaW5k ZXggd2UgbXVzdAorICogcmV0dXJuIHRydWUuIFdoZW4gYW4gaW5kZXggaGFzIGEgcHJlZGlj YXRlIHRoYXQgaXMgbm90IHNhdGlzZmllZCBieSBlaXRoZXIKKyAqIHRoZSBuZXcgb3Igb2xk IHR1cGxlcyB0aGVuIHRoYXQgaW5kZXggaXMgdW5jaGFuZ2VkLiBXaGVuIGFuIGluZGV4IGhh cyBhCisgKiBwcmVkaWNhdGUgdGhhdCBpcyBzYXRpc2ZpZWQgYnkgYm90aCB0aGUgb2xkIGFu ZCBuZXcgdHVwbGVzIHRoZW4gd2UgY2FuCisgKiBwcm9jZWVkIGFuZCBjaGVjayB0byBzZWUg aWYgdGhlIGluZGV4ZWQgdmFsdWVzIHdlcmUgY2hhbmdlZCBvciBub3QuCisgKi8KK2Jvb2wK K0V4ZWNFeHBySW5kZXhlc1JlcXVpcmVVcGRhdGVzKFJlbGF0aW9uIHJlbGF0aW9uLAorCQkJ CQkJCSAgUmVzdWx0UmVsSW5mbyAqcmVzdWx0UmVsSW5mbywKKwkJCQkJCQkgIEJpdG1hcHNl dCAqbW9kaWZpZWRBdHRycywKKwkJCQkJCQkgIEVTdGF0ZSAqZXN0YXRlLAorCQkJCQkJCSAg VHVwbGVUYWJsZVNsb3QgKm9sZF90dHMsCisJCQkJCQkJICBUdXBsZVRhYmxlU2xvdCAqbmV3 X3R0cykKK3sKKwlib29sCQlleHByZXNzaW9uX2NoZWNrcyA9IFJlbGF0aW9uR2V0RXhwcmVz c2lvbkNoZWNrcyhyZWxhdGlvbik7CisJYm9vbAkJcmVzdWx0ID0gZmFsc2U7CisJSW5kZXhJ bmZvICAqaW5kZXhJbmZvOworCVR1cGxlVGFibGVTbG90ICpzYXZlX3NjYW50dXBsZTsKKwlF eHByQ29udGV4dCAqZWNvbnRleHQgPSBOVUxMOworCisJaWYgKHJlc3VsdFJlbEluZm8gPT0g TlVMTCB8fCBlc3RhdGUgPT0gTlVMTCB8fAorCQlvbGRfdHRzID09IE5VTEwgfHwgbmV3X3R0 cyA9PSBOVUxMIHx8CisJCSFleHByZXNzaW9uX2NoZWNrcyB8fCBJc29sYXRpb25Jc1Nlcmlh bGl6YWJsZSgpKQorCQlyZXR1cm4gdHJ1ZTsKKworCWVjb250ZXh0ID0gR2V0UGVyVHVwbGVF eHByQ29udGV4dChlc3RhdGUpOworCisJLyoKKwkgKiBFeGFtaW5lIGVhY2ggaW5kZXggb24g dGhpcyByZWxhdGlvbiB0byBzZWUgaWYgaXQgaXMgYWZmZWN0ZWQgYnkgdGhlCisJICogY2hh bmdlcyBpbiBuZXd0dXAuICBJZiBhbnkgaW5kZXggaXMgY2hhbmdlZCwgd2UgbXVzdCBub3Qg dXNlIGEgSE9UCisJICogdXBkYXRlLgorCSAqLworCWZvciAoaW50IGkgPSAwOyBpIDwgcmVz dWx0UmVsSW5mby0+cmlfTnVtSW5kaWNlczsgaSsrKQorCXsKKwkJaW5kZXhJbmZvID0gcmVz dWx0UmVsSW5mby0+cmlfSW5kZXhSZWxhdGlvbkluZm9baV07CisKKwkJLyoKKwkJICogSWYg dGhpcyBpcyBhIHBhcnRpYWwgaW5kZXggaXQgaGFzIGEgcHJlZGljYXRlLCBldmFsdWF0ZSB0 aGUKKwkJICogZXhwcmVzc2lvbiB0byBkZXRlcm1pbmUgaWYgd2UgbmVlZCB0byBpbmNsdWRl IGl0IG9yIG5vdC4KKwkJICovCisJCWlmIChibXNfb3ZlcmxhcChpbmRleEluZm8tPmlpX1By ZWRpY2F0ZUF0dHJzLCBtb2RpZmllZEF0dHJzKSkKKwkJeworCQkJRXhwclN0YXRlICAqcHN0 YXRlOworCQkJYm9vbAkJb2xkX3R1cGxlX3F1YWxpZmllcywKKwkJCQkJCW5ld190dXBsZV9x dWFsaWZpZXM7CisKKwkJCXBzdGF0ZSA9IEV4ZWNQcmVwYXJlUXVhbChpbmRleEluZm8tPmlp X1ByZWRpY2F0ZSwgZXN0YXRlKTsKKworCQkJLyoKKwkJCSAqIEhlcmUgdGhlIHRlcm0gInF1 YWxpZmllcyIgbWVhbnMgInNhdGlzZmllcyB0aGUgcHJlZGljYXRlCisJCQkgKiBjb25kaXRp b24gb2YgdGhlIHBhcnRpYWwgaW5kZXgiLgorCQkJICovCisJCQlzYXZlX3NjYW50dXBsZSA9 IGVjb250ZXh0LT5lY3h0X3NjYW50dXBsZTsKKwkJCWVjb250ZXh0LT5lY3h0X3NjYW50dXBs ZSA9IG9sZF90dHM7CisJCQlvbGRfdHVwbGVfcXVhbGlmaWVzID0gRXhlY1F1YWwocHN0YXRl LCBlY29udGV4dCk7CisKKwkJCWVjb250ZXh0LT5lY3h0X3NjYW50dXBsZSA9IG5ld190dHM7 CisJCQluZXdfdHVwbGVfcXVhbGlmaWVzID0gRXhlY1F1YWwocHN0YXRlLCBlY29udGV4dCk7 CisJCQllY29udGV4dC0+ZWN4dF9zY2FudHVwbGUgPSBzYXZlX3NjYW50dXBsZTsKKworCQkJ aW5kZXhJbmZvLT5paV9DaGVja2VkUHJlZGljYXRlID0gdHJ1ZTsKKwkJCWluZGV4SW5mby0+ aWlfUHJlZGljYXRlU2F0aXNmaWVkID0gbmV3X3R1cGxlX3F1YWxpZmllczsKKworCQkJLyoK KwkJCSAqIElmIG5laXRoZXIgdGhlIG9sZCBub3IgdGhlIG5ldyB0dXBsZXMgc2F0aXNmeSB0 aGUgcHJlZGljYXRlIHdlCisJCQkgKiBjYW4gYmUgc3VyZSB0aGF0IHRoaXMgaW5kZXggZG9l c24ndCBuZWVkIHVwZGF0aW5nLCBjb250aW51ZSB0bworCQkJICogdGhlIG5leHQgaW5kZXgu CisJCQkgKi8KKwkJCWlmICgobmV3X3R1cGxlX3F1YWxpZmllcyA9PSBmYWxzZSkgJiYgKG9s ZF90dXBsZV9xdWFsaWZpZXMgPT0gZmFsc2UpKQorCQkJCWNvbnRpbnVlOworCisJCQkvKgor CQkJICogSWYgdGhlcmUgaXMgYSB0cmFuc2l0aW9uIGJldHdlZW4gaW5kZXhlZCBhbmQgbm90 IGluZGV4ZWQsCisJCQkgKiB0aGF0J3MgZW5vdWdoIHRvIHJlcXVpcmUgYW4gaW5kZXggdXBk YXRlLgorCQkJICovCisJCQlpZiAobmV3X3R1cGxlX3F1YWxpZmllcyAhPSBvbGRfdHVwbGVf cXVhbGlmaWVzKQorCQkJeworCQkJCXJlc3VsdCA9IHRydWU7CisJCQkJYnJlYWs7CisJCQl9 CisKKwkJCS8qCisJCQkgKiBPdGhlcndpc2UgdGhlIG9sZCBhbmQgbmV3IHZhbHVlcyBleGlz dCBpbiB0aGUgaW5kZXgsIGJ1dCBkaWQKKwkJCSAqIHRoZXkgZ2V0IHVwZGF0ZWQ/ICBXZSBk b24ndCB5ZXQga25vdywgc28gcHJvY2VlZCB3aXRoIHRoZSBuZXh0CisJCQkgKiBzdGF0ZW1l bnQgaW4gdGhlIGxvb3AgdG8gZmluZCBvdXQuCisJCQkgKi8KKwkJfQorCisJCS8qCisJCSAq IEluZGV4ZXMgd2l0aCBleHByZXNzaW9ucyBtYXkgb3IgbWF5IG5vdCBoYXZlIGNoYW5nZWQs IGl0IGlzCisJCSAqIGltcG9zc2libGUgdG8ga25vdyB3aXRob3V0IGV4ZXJjaXNpbmcgdGhl aXIgZXhwcmVzc2lvbiBhbmQKKwkJICogcmV2aWV3aW5nIGluZGV4IHR1cGxlIHN0YXRlIGZv ciBjaGFuZ2VzLiAgVGhpcyBpcyBhIGxvdCBvZiB3b3JrLAorCQkgKiBidXQgYmVjYXVzZSBh bGwgaW5kZXhlcyBvbiBKU09OQiBjb2x1bW5zIGZhbGwgaW50byB0aGlzIGNhdGVnb3J5IGl0 CisJCSAqIGNhbiBiZSB3b3J0aCBpdCB0byBhdm9pZCBpbmRleCB1cGRhdGVzIGFuZCByZW1h aW4gb24gdGhlIEhPVCB1cGRhdGUKKwkJICogcGF0aCB3aGVuIHBvc3NpYmxlLgorCQkgKi8K KwkJaWYgKGJtc19vdmVybGFwKGluZGV4SW5mby0+aWlfRXhwcmVzc2lvbnNBdHRycywgbW9k aWZpZWRBdHRycykpCisJCXsKKwkJCURhdHVtCQlvbGRfdmFsdWVzW0lOREVYX01BWF9LRVlT XTsKKwkJCWJvb2wJCW9sZF9pc251bGxbSU5ERVhfTUFYX0tFWVNdOworCQkJRGF0dW0JCW5l d192YWx1ZXNbSU5ERVhfTUFYX0tFWVNdOworCQkJYm9vbAkJbmV3X2lzbnVsbFtJTkRFWF9N QVhfS0VZU107CisKKwkJCXNhdmVfc2NhbnR1cGxlID0gZWNvbnRleHQtPmVjeHRfc2NhbnR1 cGxlOworCQkJZWNvbnRleHQtPmVjeHRfc2NhbnR1cGxlID0gb2xkX3R0czsKKwkJCUZvcm1J bmRleERhdHVtKGluZGV4SW5mbywKKwkJCQkJCSAgIG9sZF90dHMsCisJCQkJCQkgICBlc3Rh dGUsCisJCQkJCQkgICBvbGRfdmFsdWVzLAorCQkJCQkJICAgb2xkX2lzbnVsbCk7CisJCQll Y29udGV4dC0+ZWN4dF9zY2FudHVwbGUgPSBuZXdfdHRzOworCQkJRm9ybUluZGV4RGF0dW0o aW5kZXhJbmZvLAorCQkJCQkJICAgbmV3X3R0cywKKwkJCQkJCSAgIGVzdGF0ZSwKKwkJCQkJ CSAgIG5ld192YWx1ZXMsCisJCQkJCQkgICBuZXdfaXNudWxsKTsKKwkJCWVjb250ZXh0LT5l Y3h0X3NjYW50dXBsZSA9IHNhdmVfc2NhbnR1cGxlOworCisJCQlmb3IgKGludCBqID0gMDsg aiA8IGluZGV4SW5mby0+aWlfTnVtSW5kZXhLZXlBdHRyczsgaisrKQorCQkJeworCQkJCWlm IChvbGRfaXNudWxsW2pdICE9IG5ld19pc251bGxbal0pCisJCQkJeworCQkJCQlyZXN1bHQg PSB0cnVlOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJZWxzZSBpZiAoIW9sZF9pc251bGxb al0pCisJCQkJeworCQkJCQlpbnQxNgkJZWxtbGVuID0gaW5kZXhJbmZvLT5paV9JbmRleEF0 dHJMZW5bal07CisJCQkJCWJvb2wJCWVsbWJ5dmFsID0gYm1zX2lzX21lbWJlcihqLCBpbmRl eEluZm8tPmlpX0luZGV4QXR0ckJ5VmFsKTsKKworCQkJCQlpZiAoIWRhdHVtX2ltYWdlX2Vx KG9sZF92YWx1ZXNbal0sIG5ld192YWx1ZXNbal0sCisJCQkJCQkJCQkJZWxtYnl2YWwsIGVs bWxlbikpCisJCQkJCXsKKwkJCQkJCXJlc3VsdCA9IHRydWU7CisJCQkJCQlicmVhazsKKwkJ CQkJfQorCQkJCX0KKwkJCX0KKworCQkJaW5kZXhJbmZvLT5paV9DaGVja2VkVW5jaGFuZ2Vk ID0gdHJ1ZTsKKwkJCWluZGV4SW5mby0+aWlfSW5kZXhVbmNoYW5nZWQgPSAhcmVzdWx0Owor CisJCQlpZiAocmVzdWx0KQorCQkJCWJyZWFrOworCQl9CisJfQorCisJcmV0dXJuIHJlc3Vs dDsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQYXJ0aXRpb24u YyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQYXJ0aXRpb24uYwppbmRleCA1MTRlYWUx MDM3ZC4uMjg4NjcwNWVkMzkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4 ZWNQYXJ0aXRpb24uYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUGFydGl0aW9u LmMKQEAgLTUzOSw3ICs1MzksNyBAQCBFeGVjSW5pdFBhcnRpdGlvbkluZm8oTW9kaWZ5VGFi bGVTdGF0ZSAqbXRzdGF0ZSwgRVN0YXRlICplc3RhdGUsCiAJCWxlYWZfcGFydF9ycmktPnJp X0luZGV4UmVsYXRpb25EZXNjcyA9PSBOVUxMKQogCQlFeGVjT3BlbkluZGljZXMobGVhZl9w YXJ0X3JyaSwKIAkJCQkJCShub2RlICE9IE5VTEwgJiYKLQkJCQkJCSBub2RlLT5vbkNvbmZs aWN0QWN0aW9uICE9IE9OQ09ORkxJQ1RfTk9ORSkpOworCQkJCQkJIG5vZGUtPm9uQ29uZmxp Y3RBY3Rpb24gIT0gT05DT05GTElDVF9OT05FKSwgZmFsc2UpOwogCiAJLyoKIAkgKiBCdWls ZCBXSVRIIENIRUNLIE9QVElPTiBjb25zdHJhaW50cyBmb3IgdGhlIHBhcnRpdGlvbi4gIE5v dGUgdGhhdCB3ZQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1JlcGxp Y2F0aW9uLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUmVwbGljYXRpb24uYwppbmRl eCA1M2RkZDI1YzQyZC4uM2M5N2ZjZTAxMDAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4 ZWN1dG9yL2V4ZWNSZXBsaWNhdGlvbi5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4 ZWNSZXBsaWNhdGlvbi5jCkBAIC02NzcsNyArNjc3LDcgQEAgRXhlY1NpbXBsZVJlbGF0aW9u VXBkYXRlKFJlc3VsdFJlbEluZm8gKnJlc3VsdFJlbEluZm8sCiAJaWYgKCFza2lwX3R1cGxl KQogCXsKIAkJTGlzdAkgICAqcmVjaGVja0luZGV4ZXMgPSBOSUw7Ci0JCVRVX1VwZGF0ZUlu ZGV4ZXMgdXBkYXRlX2luZGV4ZXM7CisJCVVwZGF0ZUNvbnRleHQgdXBkYXRlQ3h0ID0gezB9 OwogCQlMaXN0CSAgICpjb25mbGljdGluZGV4ZXM7CiAJCWJvb2wJCWNvbmZsaWN0ID0gZmFs c2U7CiAKQEAgLTY5MywxNyArNjkzLDE5IEBAIEV4ZWNTaW1wbGVSZWxhdGlvblVwZGF0ZShS ZXN1bHRSZWxJbmZvICpyZXN1bHRSZWxJbmZvLAogCQlpZiAocmVsLT5yZF9yZWwtPnJlbGlz cGFydGl0aW9uKQogCQkJRXhlY1BhcnRpdGlvbkNoZWNrKHJlc3VsdFJlbEluZm8sIHNsb3Qs IGVzdGF0ZSwgdHJ1ZSk7CiAKKwkJdXBkYXRlQ3h0LmVzdGF0ZSA9IGVzdGF0ZTsKKwkJdXBk YXRlQ3h0LnJyaSA9IHJlc3VsdFJlbEluZm87CiAJCXNpbXBsZV90YWJsZV90dXBsZV91cGRh dGUocmVsLCB0aWQsIHNsb3QsIGVzdGF0ZS0+ZXNfc25hcHNob3QsCi0JCQkJCQkJCSAgJnVw ZGF0ZV9pbmRleGVzKTsKKwkJCQkJCQkJICAmdXBkYXRlQ3h0KTsKIAogCQljb25mbGljdGlu ZGV4ZXMgPSByZXN1bHRSZWxJbmZvLT5yaV9vbkNvbmZsaWN0QXJiaXRlckluZGV4ZXM7CiAK LQkJaWYgKHJlc3VsdFJlbEluZm8tPnJpX051bUluZGljZXMgPiAwICYmICh1cGRhdGVfaW5k ZXhlcyAhPSBUVV9Ob25lKSkKKwkJaWYgKHJlc3VsdFJlbEluZm8tPnJpX051bUluZGljZXMg PiAwICYmICh1cGRhdGVDeHQudXBkYXRlSW5kZXhlcyAhPSBUVV9Ob25lKSkKIAkJCXJlY2hl Y2tJbmRleGVzID0gRXhlY0luc2VydEluZGV4VHVwbGVzKHJlc3VsdFJlbEluZm8sCiAJCQkJ CQkJCQkJCQkgICBzbG90LCBlc3RhdGUsIHRydWUsCiAJCQkJCQkJCQkJCQkgICBjb25mbGlj dGluZGV4ZXMgPyB0cnVlIDogZmFsc2UsCiAJCQkJCQkJCQkJCQkgICAmY29uZmxpY3QsIGNv bmZsaWN0aW5kZXhlcywKLQkJCQkJCQkJCQkJCSAgICh1cGRhdGVfaW5kZXhlcyA9PSBUVV9T dW1tYXJpemluZykpOworCQkJCQkJCQkJCQkJICAgKHVwZGF0ZUN4dC51cGRhdGVJbmRleGVz ID09IFRVX1N1bW1hcml6aW5nKSk7CiAKIAkJLyoKIAkJICogUmVmZXIgdG8gdGhlIGNvbW1l bnRzIGFib3ZlIHRoZSBjYWxsIHRvIENoZWNrQW5kUmVwb3J0Q29uZmxpY3QoKSBpbgpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1vZGlmeVRhYmxlLmMgYi9zcmMv YmFja2VuZC9leGVjdXRvci9ub2RlTW9kaWZ5VGFibGUuYwppbmRleCA1NGRhOGU3OTk1Yi4u YjE1OWVjYjdiMTUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNb2Rp ZnlUYWJsZS5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNb2RpZnlUYWJsZS5j CkBAIC0xMTYsMjEgKzExNiw2IEBAIHR5cGVkZWYgc3RydWN0IE1vZGlmeVRhYmxlQ29udGV4 dAogCVR1cGxlVGFibGVTbG90ICpjcFVwZGF0ZVJldHVybmluZ1Nsb3Q7CiB9IE1vZGlmeVRh YmxlQ29udGV4dDsKIAotLyoKLSAqIENvbnRleHQgc3RydWN0IGNvbnRhaW5pbmcgb3V0cHV0 IGRhdGEgc3BlY2lmaWMgdG8gVVBEQVRFIG9wZXJhdGlvbnMuCi0gKi8KLXR5cGVkZWYgc3Ry dWN0IFVwZGF0ZUNvbnRleHQKLXsKLQlib29sCQljcm9zc1BhcnRVcGRhdGU7CS8qIHdhcyBp dCBhIGNyb3NzLXBhcnRpdGlvbiB1cGRhdGU/ICovCi0JVFVfVXBkYXRlSW5kZXhlcyB1cGRh dGVJbmRleGVzOyAvKiBXaGljaCBpbmRleCB1cGRhdGVzIGFyZSByZXF1aXJlZD8gKi8KLQot CS8qCi0JICogTG9jayBtb2RlIHRvIGFjcXVpcmUgb24gdGhlIGxhdGVzdCB0dXBsZSB2ZXJz aW9uIGJlZm9yZSBwZXJmb3JtaW5nCi0JICogRXZhbFBsYW5RdWFsIG9uIGl0Ci0JICovCi0J TG9ja1R1cGxlTW9kZSBsb2NrbW9kZTsKLX0gVXBkYXRlQ29udGV4dDsKLQogCiBzdGF0aWMg dm9pZCBFeGVjQmF0Y2hJbnNlcnQoTW9kaWZ5VGFibGVTdGF0ZSAqbXRzdGF0ZSwKIAkJCQkJ CQlSZXN1bHRSZWxJbmZvICpyZXN1bHRSZWxJbmZvLApAQCAtODkwLDcgKzg3NSw3IEBAIEV4 ZWNJbnNlcnQoTW9kaWZ5VGFibGVDb250ZXh0ICpjb250ZXh0LAogCSAqLwogCWlmIChyZXN1 bHRSZWxhdGlvbkRlc2MtPnJkX3JlbC0+cmVsaGFzaW5kZXggJiYKIAkJcmVzdWx0UmVsSW5m by0+cmlfSW5kZXhSZWxhdGlvbkRlc2NzID09IE5VTEwpCi0JCUV4ZWNPcGVuSW5kaWNlcyhy ZXN1bHRSZWxJbmZvLCBvbmNvbmZsaWN0ICE9IE9OQ09ORkxJQ1RfTk9ORSk7CisJCUV4ZWNP cGVuSW5kaWNlcyhyZXN1bHRSZWxJbmZvLCBvbmNvbmZsaWN0ICE9IE9OQ09ORkxJQ1RfTk9O RSwgZmFsc2UpOwogCiAJLyoKIAkgKiBCRUZPUkUgUk9XIElOU0VSVCBUcmlnZ2Vycy4KQEAg LTIxMDUsNyArMjA5MCw3IEBAIEV4ZWNVcGRhdGVQcm9sb2d1ZShNb2RpZnlUYWJsZUNvbnRl eHQgKmNvbnRleHQsIFJlc3VsdFJlbEluZm8gKnJlc3VsdFJlbEluZm8sCiAJICovCiAJaWYg KHJlc3VsdFJlbGF0aW9uRGVzYy0+cmRfcmVsLT5yZWxoYXNpbmRleCAmJgogCQlyZXN1bHRS ZWxJbmZvLT5yaV9JbmRleFJlbGF0aW9uRGVzY3MgPT0gTlVMTCkKLQkJRXhlY09wZW5JbmRp Y2VzKHJlc3VsdFJlbEluZm8sIGZhbHNlKTsKKwkJRXhlY09wZW5JbmRpY2VzKHJlc3VsdFJl bEluZm8sIGZhbHNlLCB0cnVlKTsKIAogCS8qIEJFRk9SRSBST1cgVVBEQVRFIHRyaWdnZXJz ICovCiAJaWYgKHJlc3VsdFJlbEluZm8tPnJpX1RyaWdEZXNjICYmCkBAIC0yMzAzLDggKzIy ODgsNyBAQCBscmVwbGFjZToKIAkJCQkJCQkJZXN0YXRlLT5lc19zbmFwc2hvdCwKIAkJCQkJ CQkJZXN0YXRlLT5lc19jcm9zc2NoZWNrX3NuYXBzaG90LAogCQkJCQkJCQl0cnVlIC8qIHdh aXQgZm9yIGNvbW1pdCAqLyAsCi0JCQkJCQkJCSZjb250ZXh0LT50bWZkLCAmdXBkYXRlQ3h0 LT5sb2NrbW9kZSwKLQkJCQkJCQkJJnVwZGF0ZUN4dC0+dXBkYXRlSW5kZXhlcyk7CisJCQkJ CQkJCSZjb250ZXh0LT50bWZkLCB1cGRhdGVDeHQpOwogCiAJcmV0dXJuIHJlc3VsdDsKIH0K QEAgLTIzMjIsNiArMjMwNiw3IEBAIEV4ZWNVcGRhdGVFcGlsb2d1ZShNb2RpZnlUYWJsZUNv bnRleHQgKmNvbnRleHQsIFVwZGF0ZUNvbnRleHQgKnVwZGF0ZUN4dCwKIHsKIAlNb2RpZnlU YWJsZVN0YXRlICptdHN0YXRlID0gY29udGV4dC0+bXRzdGF0ZTsKIAlMaXN0CSAgICpyZWNo ZWNrSW5kZXhlcyA9IE5JTDsKKwlib29sCQlvbmx5U3VtbWFyaXppbmcgPSB1cGRhdGVDeHQt PnVwZGF0ZUluZGV4ZXMgPT0gVFVfU3VtbWFyaXppbmc7CiAKIAkvKiBpbnNlcnQgaW5kZXgg ZW50cmllcyBmb3IgdHVwbGUgaWYgbmVjZXNzYXJ5ICovCiAJaWYgKHJlc3VsdFJlbEluZm8t PnJpX051bUluZGljZXMgPiAwICYmICh1cGRhdGVDeHQtPnVwZGF0ZUluZGV4ZXMgIT0gVFVf Tm9uZSkpCkBAIC0yMzI5LDcgKzIzMTQsNyBAQCBFeGVjVXBkYXRlRXBpbG9ndWUoTW9kaWZ5 VGFibGVDb250ZXh0ICpjb250ZXh0LCBVcGRhdGVDb250ZXh0ICp1cGRhdGVDeHQsCiAJCQkJ CQkJCQkJCSAgIHNsb3QsIGNvbnRleHQtPmVzdGF0ZSwKIAkJCQkJCQkJCQkJICAgdHJ1ZSwg ZmFsc2UsCiAJCQkJCQkJCQkJCSAgIE5VTEwsIE5JTCwKLQkJCQkJCQkJCQkJICAgKHVwZGF0 ZUN4dC0+dXBkYXRlSW5kZXhlcyA9PSBUVV9TdW1tYXJpemluZykpOworCQkJCQkJCQkJCQkg ICBvbmx5U3VtbWFyaXppbmcpOwogCiAJLyogQUZURVIgUk9XIFVQREFURSBUcmlnZ2VycyAq LwogCUV4ZWNBUlVwZGF0ZVRyaWdnZXJzKGNvbnRleHQtPmVzdGF0ZSwgcmVzdWx0UmVsSW5m bywKQEAgLTI0NjUsNiArMjQ1MCw5IEBAIEV4ZWNVcGRhdGUoTW9kaWZ5VGFibGVDb250ZXh0 ICpjb250ZXh0LCBSZXN1bHRSZWxJbmZvICpyZXN1bHRSZWxJbmZvLAogCVVwZGF0ZUNvbnRl eHQgdXBkYXRlQ3h0ID0gezB9OwogCVRNX1Jlc3VsdAlyZXN1bHQ7CiAKKwl1cGRhdGVDeHQu ZXN0YXRlID0gZXN0YXRlOworCXVwZGF0ZUN4dC5ycmkgPSByZXN1bHRSZWxJbmZvOworCiAJ LyoKIAkgKiBhYm9ydCB0aGUgb3BlcmF0aW9uIGlmIG5vdCBydW5uaW5nIHRyYW5zYWN0aW9u cwogCSAqLwpAQCAtMzE1Myw2ICszMTQxLDkgQEAgbG1lcmdlX21hdGNoZWQ6CiAJCVRNX1Jl c3VsdAlyZXN1bHQ7CiAJCVVwZGF0ZUNvbnRleHQgdXBkYXRlQ3h0ID0gezB9OwogCisJCXVw ZGF0ZUN4dC5ycmkgPSByZXN1bHRSZWxJbmZvOworCQl1cGRhdGVDeHQuZXN0YXRlID0gZXN0 YXRlOworCiAJCS8qCiAJCSAqIFRlc3QgY29uZGl0aW9uLCBpZiBhbnkuCiAJCSAqCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5jIGIvc3Jj L2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIuYwppbmRleCBmZDExODA1YTQ0 Yy4uNTEwNTQ2OTNmMjQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xv Z2ljYWwvd29ya2VyLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93 b3JrZXIuYwpAQCAtMjQ1Miw3ICsyNDUyLDcgQEAgYXBwbHlfaGFuZGxlX2luc2VydChTdHJp bmdJbmZvIHMpCiAJewogCQlSZXN1bHRSZWxJbmZvICpyZWxpbmZvID0gZWRhdGEtPnRhcmdl dFJlbEluZm87CiAKLQkJRXhlY09wZW5JbmRpY2VzKHJlbGluZm8sIGZhbHNlKTsKKwkJRXhl Y09wZW5JbmRpY2VzKHJlbGluZm8sIGZhbHNlLCBmYWxzZSk7CiAJCWFwcGx5X2hhbmRsZV9p bnNlcnRfaW50ZXJuYWwoZWRhdGEsIHJlbGluZm8sIHJlbW90ZXNsb3QpOwogCQlFeGVjQ2xv c2VJbmRpY2VzKHJlbGluZm8pOwogCX0KQEAgLTI2NzUsNyArMjY3NSw3IEBAIGFwcGx5X2hh bmRsZV91cGRhdGVfaW50ZXJuYWwoQXBwbHlFeGVjdXRpb25EYXRhICplZGF0YSwKIAlNZW1v cnlDb250ZXh0IG9sZGN0eDsKIAogCUV2YWxQbGFuUXVhbEluaXQoJmVwcXN0YXRlLCBlc3Rh dGUsIE5VTEwsIE5JTCwgLTEsIE5JTCk7Ci0JRXhlY09wZW5JbmRpY2VzKHJlbGluZm8sIGZh bHNlKTsKKwlFeGVjT3BlbkluZGljZXMocmVsaW5mbywgZmFsc2UsIHRydWUpOwogCiAJZm91 bmQgPSBGaW5kUmVwbFR1cGxlSW5Mb2NhbFJlbChlZGF0YSwgbG9jYWxyZWwsCiAJCQkJCQkJ CQkmcmVsbWFwZW50cnktPnJlbW90ZXJlbCwKQEAgLTI4MTksNyArMjgxOSw3IEBAIGFwcGx5 X2hhbmRsZV9kZWxldGUoU3RyaW5nSW5mbyBzKQogCXsKIAkJUmVzdWx0UmVsSW5mbyAqcmVs aW5mbyA9IGVkYXRhLT50YXJnZXRSZWxJbmZvOwogCi0JCUV4ZWNPcGVuSW5kaWNlcyhyZWxp bmZvLCBmYWxzZSk7CisJCUV4ZWNPcGVuSW5kaWNlcyhyZWxpbmZvLCBmYWxzZSwgZmFsc2Up OwogCQlhcHBseV9oYW5kbGVfZGVsZXRlX2ludGVybmFsKGVkYXRhLCByZWxpbmZvLAogCQkJ CQkJCQkJIHJlbW90ZXNsb3QsIHJlbC0+bG9jYWxpbmRleG9pZCk7CiAJCUV4ZWNDbG9zZUlu ZGljZXMocmVsaW5mbyk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9y ZWxjYWNoZS5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcmVsY2FjaGUuYwppbmRleCA1 NTliYTljZGIyYy4uYjdlNzhmYjNiZjEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxz L2NhY2hlL3JlbGNhY2hlLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcmVsY2Fj aGUuYwpAQCAtNjQsNiArNjQsNyBAQAogI2luY2x1ZGUgImNhdGFsb2cvcGdfdHlwZS5oIgog I2luY2x1ZGUgImNhdGFsb2cvc2NoZW1hcGcuaCIKICNpbmNsdWRlICJjYXRhbG9nL3N0b3Jh Z2UuaCIKKyNpbmNsdWRlICJjYXRhbG9nL2luZGV4LmgiCiAjaW5jbHVkZSAiY29tbWFuZHMv cG9saWN5LmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmgiCiAjaW5j bHVkZSAiY29tbWFuZHMvdHJpZ2dlci5oIgpAQCAtMjQ4Miw2ICsyNDgzLDcgQEAgUmVsYXRp b25EZXN0cm95UmVsYXRpb24oUmVsYXRpb24gcmVsYXRpb24sIGJvb2wgcmVtZW1iZXJfdHVw ZGVzYykKIAlibXNfZnJlZShyZWxhdGlvbi0+cmRfaWRhdHRyKTsKIAlibXNfZnJlZShyZWxh dGlvbi0+cmRfaG90YmxvY2tpbmdhdHRyKTsKIAlibXNfZnJlZShyZWxhdGlvbi0+cmRfc3Vt bWFyaXplZGF0dHIpOworCWJtc19mcmVlKHJlbGF0aW9uLT5yZF9leHByZXNzaW9uYXR0cik7 CiAJaWYgKHJlbGF0aW9uLT5yZF9wdWJkZXNjKQogCQlwZnJlZShyZWxhdGlvbi0+cmRfcHVi ZGVzYyk7CiAJaWYgKHJlbGF0aW9uLT5yZF9vcHRpb25zKQpAQCAtNTI4Myw2ICs1Mjg1LDcg QEAgUmVsYXRpb25HZXRJbmRleFByZWRpY2F0ZShSZWxhdGlvbiByZWxhdGlvbikKICAqCQkJ CQkJCQkJaW5kZXggKGVtcHR5IGlmIEZVTEwpCiAgKglJTkRFWF9BVFRSX0JJVE1BUF9IT1Rf QkxPQ0tJTkcJQ29sdW1ucyB0aGF0IGJsb2NrIHVwZGF0ZXMgZnJvbSBiZWluZyBIT1QKICAq CUlOREVYX0FUVFJfQklUTUFQX1NVTU1BUklaRUQJQ29sdW1ucyBpbmNsdWRlZCBpbiBzdW1t YXJpemluZyBpbmRleGVzCisgKglJTkRFWF9BVFRSX0JJVE1BUF9FWFBSRVNTSU9OCUNvbHVt bnMgaW5jbHVkZWQgaW4gZXhwcmVzaW9uIGluZGV4ZXMKICAqCiAgKiBBdHRyaWJ1dGUgbnVt YmVycyBhcmUgb2Zmc2V0IGJ5IEZpcnN0TG93SW52YWxpZEhlYXBBdHRyaWJ1dGVOdW1iZXIg c28gdGhhdAogICogd2UgY2FuIGluY2x1ZGUgc3lzdGVtIGF0dHJpYnV0ZXMgKGUuZy4sIE9J RCkgaW4gdGhlIGJpdG1hcCByZXByZXNlbnRhdGlvbi4KQEAgLTUzMDUsOCArNTMwOCw5IEBA IFJlbGF0aW9uR2V0SW5kZXhBdHRyQml0bWFwKFJlbGF0aW9uIHJlbGF0aW9uLCBJbmRleEF0 dHJCaXRtYXBLaW5kIGF0dHJLaW5kKQogCUJpdG1hcHNldCAgKnVpbmRleGF0dHJzOwkvKiBj b2x1bW5zIGluIHVuaXF1ZSBpbmRleGVzICovCiAJQml0bWFwc2V0ICAqcGtpbmRleGF0dHJz OwkvKiBjb2x1bW5zIGluIHRoZSBwcmltYXJ5IGluZGV4ICovCiAJQml0bWFwc2V0ICAqaWRp bmRleGF0dHJzOwkvKiBjb2x1bW5zIGluIHRoZSByZXBsaWNhIGlkZW50aXR5ICovCi0JQml0 bWFwc2V0ICAqaG90YmxvY2tpbmdhdHRyczsJLyogY29sdW1ucyB3aXRoIEhPVCBibG9ja2lu ZyBpbmRleGVzICovCi0JQml0bWFwc2V0ICAqc3VtbWFyaXplZGF0dHJzOwkvKiBjb2x1bW5z IHdpdGggc3VtbWFyaXppbmcgaW5kZXhlcyAqLworCUJpdG1hcHNldCAgKmlkeF9hdHRyczsJ CS8qIGNvbHVtbnMgcmVmZXJlbmNlZCBieSBpbmRleGVzICovCisJQml0bWFwc2V0ICAqZXhw cl9hdHRyczsJCS8qIGNvbHVtbnMgcmVmZXJlbmNlZCBieSBpbmRleCBleHByZXNzaW9ucyAq LworCUJpdG1hcHNldCAgKnN1bV9hdHRyczsJCS8qIGNvbHVtbnMgd2l0aCBzdW1tYXJpemlu ZyBpbmRleGVzICovCiAJTGlzdAkgICAqaW5kZXhvaWRsaXN0OwogCUxpc3QJICAgKm5ld2lu ZGV4b2lkbGlzdDsKIAlPaWQJCQlyZWxwa2luZGV4OwpAQCAtNTMyOSw2ICs1MzMzLDggQEAg UmVsYXRpb25HZXRJbmRleEF0dHJCaXRtYXAoUmVsYXRpb24gcmVsYXRpb24sIEluZGV4QXR0 ckJpdG1hcEtpbmQgYXR0cktpbmQpCiAJCQkJcmV0dXJuIGJtc19jb3B5KHJlbGF0aW9uLT5y ZF9ob3RibG9ja2luZ2F0dHIpOwogCQkJY2FzZSBJTkRFWF9BVFRSX0JJVE1BUF9TVU1NQVJJ WkVEOgogCQkJCXJldHVybiBibXNfY29weShyZWxhdGlvbi0+cmRfc3VtbWFyaXplZGF0dHIp OworCQkJY2FzZSBJTkRFWF9BVFRSX0JJVE1BUF9FWFBSRVNTSU9OOgorCQkJCXJldHVybiBi bXNfY29weShyZWxhdGlvbi0+cmRfZXhwcmVzc2lvbmF0dHIpOwogCQkJZGVmYXVsdDoKIAkJ CQllbG9nKEVSUk9SLCAidW5rbm93biBhdHRyS2luZCAldSIsIGF0dHJLaW5kKTsKIAkJfQpA QCAtNTM3MSw4ICs1Mzc3LDkgQEAgcmVzdGFydDoKIAl1aW5kZXhhdHRycyA9IE5VTEw7CiAJ cGtpbmRleGF0dHJzID0gTlVMTDsKIAlpZGluZGV4YXR0cnMgPSBOVUxMOwotCWhvdGJsb2Nr aW5nYXR0cnMgPSBOVUxMOwotCXN1bW1hcml6ZWRhdHRycyA9IE5VTEw7CisJaWR4X2F0dHJz ID0gTlVMTDsKKwlleHByX2F0dHJzID0gTlVMTDsKKwlzdW1fYXR0cnMgPSBOVUxMOwogCWZv cmVhY2gobCwgaW5kZXhvaWRsaXN0KQogCXsKIAkJT2lkCQkJaW5kZXhPaWQgPSBsZmlyc3Rf b2lkKGwpOwpAQCAtNTM4Niw2ICs1MzkzLDcgQEAgcmVzdGFydDoKIAkJYm9vbAkJaXNQSzsJ CS8qIHByaW1hcnkga2V5ICovCiAJCWJvb2wJCWlzSURLZXk7CS8qIHJlcGxpY2EgaWRlbnRp dHkgaW5kZXggKi8KIAkJQml0bWFwc2V0ICoqYXR0cnM7CisJCUJpdG1hcHNldCAqKmV4cHJh dHRyczsKIAogCQlpbmRleERlc2MgPSBpbmRleF9vcGVuKGluZGV4T2lkLCBBY2Nlc3NTaGFy ZUxvY2spOwogCkBAIC01NDI5LDIwICs1NDM3LDI2IEBAIHJlc3RhcnQ6CiAJCSAqIGRlY2lk ZSB3aGljaCBiaXRtYXAgd2UnbGwgdXBkYXRlIGluIHRoZSBmb2xsb3dpbmcgbG9vcC4KIAkJ ICovCiAJCWlmIChpbmRleERlc2MtPnJkX2luZGFtLT5hbXN1bW1hcml6aW5nKQotCQkJYXR0 cnMgPSAmc3VtbWFyaXplZGF0dHJzOworCQl7CisJCQlhdHRycyA9ICZzdW1fYXR0cnM7CisJ CQlleHByYXR0cnMgPSAmc3VtX2F0dHJzOworCQl9CiAJCWVsc2UKLQkJCWF0dHJzID0gJmhv dGJsb2NraW5nYXR0cnM7CisJCXsKKwkJCWF0dHJzID0gJmlkeF9hdHRyczsKKwkJCWV4cHJh dHRycyA9ICZleHByX2F0dHJzOworCQl9CiAKIAkJLyogQ29sbGVjdCBzaW1wbGUgYXR0cmli dXRlIHJlZmVyZW5jZXMgKi8KIAkJZm9yIChpID0gMDsgaSA8IGluZGV4RGVzYy0+cmRfaW5k ZXgtPmluZG5hdHRzOyBpKyspCiAJCXsKLQkJCWludAkJCWF0dHJudW0gPSBpbmRleERlc2Mt PnJkX2luZGV4LT5pbmRrZXkudmFsdWVzW2ldOworCQkJaW50CQkJYXR0cmlkeCA9IGluZGV4 RGVzYy0+cmRfaW5kZXgtPmluZGtleS52YWx1ZXNbaV07CiAKIAkJCS8qCiAJCQkgKiBTaW5j ZSB3ZSBoYXZlIGNvdmVyaW5nIGluZGV4ZXMgd2l0aCBub24ta2V5IGNvbHVtbnMsIHdlIG11 c3QKIAkJCSAqIGhhbmRsZSB0aGVtIGFjY3VyYXRlbHkgaGVyZS4gbm9uLWtleSBjb2x1bW5z IG11c3QgYmUgYWRkZWQgaW50bwotCQkJICogaG90YmxvY2tpbmdhdHRycyBvciBzdW1tYXJp emVkYXR0cnMsIHNpbmNlIHRoZXkgYXJlIGluIGluZGV4LAotCQkJICogYW5kIHVwZGF0ZSBz aG91bGRuJ3QgbWlzcyB0aGVtLgorCQkJICogaWR4X2F0dHJzIG9yIHN1bV9hdHRycywgc2lu Y2UgdGhleSBhcmUgaW4gaW5kZXgsIGFuZCB1cGRhdGUKKwkJCSAqIHNob3VsZG4ndCBtaXNz IHRoZW0uCiAJCQkgKgogCQkJICogU3VtbWFyaXppbmcgaW5kZXhlcyBkbyBub3QgYmxvY2sg SE9ULCBidXQgZG8gbmVlZCB0byBiZSB1cGRhdGVkCiAJCQkgKiB3aGVuIHRoZSBjb2x1bW4g dmFsdWUgY2hhbmdlcywgdGh1cyByZXF1aXJlIGEgc2VwYXJhdGUKQEAgLTU0NTIsMzAgKzU0 NjYsMjggQEAgcmVzdGFydDoKIAkJCSAqIGtleSBvciBpZGVudGl0eSBrZXkuIEhlbmNlIHdl IGRvIG5vdCBpbmNsdWRlIHRoZW0gaW50bwogCQkJICogdWluZGV4YXR0cnMsIHBraW5kZXhh dHRycyBhbmQgaWRpbmRleGF0dHJzIGJpdG1hcHMuCiAJCQkgKi8KLQkJCWlmIChhdHRybnVt ICE9IDApCisJCQlpZiAoYXR0cmlkeCAhPSAwKQogCQkJewotCQkJCSphdHRycyA9IGJtc19h ZGRfbWVtYmVyKCphdHRycywKLQkJCQkJCQkJCQlhdHRybnVtIC0gRmlyc3RMb3dJbnZhbGlk SGVhcEF0dHJpYnV0ZU51bWJlcik7CisJCQkJQXR0ck51bWJlcglhdHRybnVtID0gYXR0cmlk eCAtIEZpcnN0TG93SW52YWxpZEhlYXBBdHRyaWJ1dGVOdW1iZXI7CisKKwkJCQkqYXR0cnMg PSBibXNfYWRkX21lbWJlcigqYXR0cnMsIGF0dHJudW0pOwogCiAJCQkJaWYgKGlzS2V5ICYm IGkgPCBpbmRleERlc2MtPnJkX2luZGV4LT5pbmRua2V5YXR0cykKLQkJCQkJdWluZGV4YXR0 cnMgPSBibXNfYWRkX21lbWJlcih1aW5kZXhhdHRycywKLQkJCQkJCQkJCQkJCSBhdHRybnVt IC0gRmlyc3RMb3dJbnZhbGlkSGVhcEF0dHJpYnV0ZU51bWJlcik7CisJCQkJCXVpbmRleGF0 dHJzID0gYm1zX2FkZF9tZW1iZXIodWluZGV4YXR0cnMsIGF0dHJudW0pOwogCiAJCQkJaWYg KGlzUEsgJiYgaSA8IGluZGV4RGVzYy0+cmRfaW5kZXgtPmluZG5rZXlhdHRzKQotCQkJCQlw a2luZGV4YXR0cnMgPSBibXNfYWRkX21lbWJlcihwa2luZGV4YXR0cnMsCi0JCQkJCQkJCQkJ CQkgIGF0dHJudW0gLSBGaXJzdExvd0ludmFsaWRIZWFwQXR0cmlidXRlTnVtYmVyKTsKKwkJ CQkJcGtpbmRleGF0dHJzID0gYm1zX2FkZF9tZW1iZXIocGtpbmRleGF0dHJzLCBhdHRybnVt KTsKIAogCQkJCWlmIChpc0lES2V5ICYmIGkgPCBpbmRleERlc2MtPnJkX2luZGV4LT5pbmRu a2V5YXR0cykKLQkJCQkJaWRpbmRleGF0dHJzID0gYm1zX2FkZF9tZW1iZXIoaWRpbmRleGF0 dHJzLAotCQkJCQkJCQkJCQkJICBhdHRybnVtIC0gRmlyc3RMb3dJbnZhbGlkSGVhcEF0dHJp YnV0ZU51bWJlcik7CisJCQkJCWlkaW5kZXhhdHRycyA9IGJtc19hZGRfbWVtYmVyKGlkaW5k ZXhhdHRycywgYXR0cm51bSk7CiAJCQl9CiAJCX0KIAogCQkvKiBDb2xsZWN0IGFsbCBhdHRy aWJ1dGVzIHVzZWQgaW4gZXhwcmVzc2lvbnMsIHRvbyAqLwotCQlwdWxsX3ZhcmF0dG5vcyhp bmRleEV4cHJlc3Npb25zLCAxLCBhdHRycyk7CisJCXB1bGxfdmFyYXR0bm9zKGluZGV4RXhw cmVzc2lvbnMsIDEsIGV4cHJhdHRycyk7CiAKIAkJLyogQ29sbGVjdCBhbGwgYXR0cmlidXRl cyBpbiB0aGUgaW5kZXggcHJlZGljYXRlLCB0b28gKi8KLQkJcHVsbF92YXJhdHRub3MoaW5k ZXhQcmVkaWNhdGUsIDEsIGF0dHJzKTsKKwkJcHVsbF92YXJhdHRub3MoaW5kZXhQcmVkaWNh dGUsIDEsIGV4cHJhdHRycyk7CiAKIAkJaW5kZXhfY2xvc2UoaW5kZXhEZXNjLCBBY2Nlc3NT aGFyZUxvY2spOwogCX0KQEAgLTU1MDMsMTIgKzU1MTUsMjQgQEAgcmVzdGFydDoKIAkJYm1z X2ZyZWUodWluZGV4YXR0cnMpOwogCQlibXNfZnJlZShwa2luZGV4YXR0cnMpOwogCQlibXNf ZnJlZShpZGluZGV4YXR0cnMpOwotCQlibXNfZnJlZShob3RibG9ja2luZ2F0dHJzKTsKLQkJ Ym1zX2ZyZWUoc3VtbWFyaXplZGF0dHJzKTsKKwkJYm1zX2ZyZWUoaWR4X2F0dHJzKTsKKwkJ Ym1zX2ZyZWUoZXhwcl9hdHRycyk7CisJCWJtc19mcmVlKHN1bV9hdHRycyk7CiAKIAkJZ290 byByZXN0YXJ0OwogCX0KIAorCS8qCisJICogSE9ULWJsb2NraW5nIGF0dHJpYnV0ZXMgc2hv dWxkIGluY2x1ZGUgYWxsIGNvbHVtbnMgdGhhdCBhcmUgcGFydCBvZiB0aGUKKwkgKiBpbmRl eCBleGNlcHQgYXR0cmlidXRlcyBvbmx5IHJlZmVyZW5jZWQgaW4gZXhwcmVzc2lvbnMsIGlu Y2x1ZGluZworCSAqIGV4cHJlc3Npb25zIHVzZWQgdG8gZm9ybSBwYXJ0aWFsIGluZGV4ZXMu ICBTbywgd2UgbmVlZCB0byByZW1vdmUgdGhlCisJICogZXhwcmVzc2lvbi1vbmx5IGF0dHJp YnV0ZXMgZnJvbSB0aGUgSE9ULWJsb2NraW5nIGNvbHVtbnMgYml0bWFwIGFzCisJICogdGhv c2Ugd2lsbCBiZSBjaGVja2VkIHNlcGFyYXRlbHkuCisJICovCisJZXhwcl9hdHRycyA9IGJt c19kZWxfbWVtYmVycyhleHByX2F0dHJzLCBpZHhfYXR0cnMpOworCWlkeF9hdHRycyA9IGJt c19hZGRfbWVtYmVycyhpZHhfYXR0cnMsIGV4cHJfYXR0cnMpOworCWV4cHJfYXR0cnMgPSBi bXNfYWRkX21lbWJlcnMoZXhwcl9hdHRycywgc3VtX2F0dHJzKTsKKwogCS8qIERvbid0IGxl YWsgdGhlIG9sZCB2YWx1ZXMgb2YgdGhlc2UgYml0bWFwcywgaWYgYW55ICovCiAJcmVsYXRp b24tPnJkX2F0dHJzdmFsaWQgPSBmYWxzZTsKIAlibXNfZnJlZShyZWxhdGlvbi0+cmRfa2V5 YXR0cik7CkBAIC01NTIxLDYgKzU1NDUsOCBAQCByZXN0YXJ0OgogCXJlbGF0aW9uLT5yZF9o b3RibG9ja2luZ2F0dHIgPSBOVUxMOwogCWJtc19mcmVlKHJlbGF0aW9uLT5yZF9zdW1tYXJp emVkYXR0cik7CiAJcmVsYXRpb24tPnJkX3N1bW1hcml6ZWRhdHRyID0gTlVMTDsKKwlibXNf ZnJlZShyZWxhdGlvbi0+cmRfZXhwcmVzc2lvbmF0dHIpOworCXJlbGF0aW9uLT5yZF9leHBy ZXNzaW9uYXR0ciA9IE5VTEw7CiAKIAkvKgogCSAqIE5vdyBzYXZlIGNvcGllcyBvZiB0aGUg Yml0bWFwcyBpbiB0aGUgcmVsY2FjaGUgZW50cnkuICBXZSBpbnRlbnRpb25hbGx5CkBAIC01 NTMzLDggKzU1NTksOSBAQCByZXN0YXJ0OgogCXJlbGF0aW9uLT5yZF9rZXlhdHRyID0gYm1z X2NvcHkodWluZGV4YXR0cnMpOwogCXJlbGF0aW9uLT5yZF9wa2F0dHIgPSBibXNfY29weShw a2luZGV4YXR0cnMpOwogCXJlbGF0aW9uLT5yZF9pZGF0dHIgPSBibXNfY29weShpZGluZGV4 YXR0cnMpOwotCXJlbGF0aW9uLT5yZF9ob3RibG9ja2luZ2F0dHIgPSBibXNfY29weShob3Ri bG9ja2luZ2F0dHJzKTsKLQlyZWxhdGlvbi0+cmRfc3VtbWFyaXplZGF0dHIgPSBibXNfY29w eShzdW1tYXJpemVkYXR0cnMpOworCXJlbGF0aW9uLT5yZF9ob3RibG9ja2luZ2F0dHIgPSBi bXNfY29weShpZHhfYXR0cnMpOworCXJlbGF0aW9uLT5yZF9zdW1tYXJpemVkYXR0ciA9IGJt c19jb3B5KHN1bV9hdHRycyk7CisJcmVsYXRpb24tPnJkX2V4cHJlc3Npb25hdHRyID0gYm1z X2NvcHkoZXhwcl9hdHRycyk7CiAJcmVsYXRpb24tPnJkX2F0dHJzdmFsaWQgPSB0cnVlOwog CU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjeHQpOwogCkBAIC01NTQ4LDkgKzU1NzUsMTEg QEAgcmVzdGFydDoKIAkJY2FzZSBJTkRFWF9BVFRSX0JJVE1BUF9JREVOVElUWV9LRVk6CiAJ CQlyZXR1cm4gaWRpbmRleGF0dHJzOwogCQljYXNlIElOREVYX0FUVFJfQklUTUFQX0hPVF9C TE9DS0lORzoKLQkJCXJldHVybiBob3RibG9ja2luZ2F0dHJzOworCQkJcmV0dXJuIGlkeF9h dHRyczsKIAkJY2FzZSBJTkRFWF9BVFRSX0JJVE1BUF9TVU1NQVJJWkVEOgotCQkJcmV0dXJu IHN1bW1hcml6ZWRhdHRyczsKKwkJCXJldHVybiBzdW1fYXR0cnM7CisJCWNhc2UgSU5ERVhf QVRUUl9CSVRNQVBfRVhQUkVTU0lPTjoKKwkJCXJldHVybiBleHByX2F0dHJzOwogCQlkZWZh dWx0OgogCQkJZWxvZyhFUlJPUiwgInVua25vd24gYXR0cktpbmQgJXUiLCBhdHRyS2luZCk7 CiAJCQlyZXR1cm4gTlVMTDsKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcHNxbC90YWItY29tcGxl dGUuaW4uYyBiL3NyYy9iaW4vcHNxbC90YWItY29tcGxldGUuaW4uYwppbmRleCA4YzJlYTBi OTU4Ny4uMDdkMWNmZmRlZmEgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcHNxbC90YWItY29tcGxl dGUuaW4uYworKysgYi9zcmMvYmluL3BzcWwvdGFiLWNvbXBsZXRlLmluLmMKQEAgLTMwMDcs NyArMzAwNyw3IEBAIG1hdGNoX3ByZXZpb3VzX3dvcmRzKGludCBwYXR0ZXJuX2lkLAogCQlD T01QTEVURV9XSVRIKCIoIik7CiAJLyogQUxURVIgVEFCTEVTUEFDRSA8Zm9vPiBTRVR8UkVT RVQgKCAqLwogCWVsc2UgaWYgKE1hdGNoZXMoIkFMVEVSIiwgIlRBQkxFU1BBQ0UiLCBNYXRj aEFueSwgIlNFVHxSRVNFVCIsICIoIikpCi0JCUNPTVBMRVRFX1dJVEgoInNlcV9wYWdlX2Nv c3QiLCAicmFuZG9tX3BhZ2VfY29zdCIsCisJCUNPTVBMRVRFX1dJVEgoInNlcV9wYWdlX2Nv c3QiLCAicmFuZG9tX3BhZ2VfY29zdCIsICJleHByZXNzaW9uX2NoZWNrcyIsCiAJCQkJCSAg ImVmZmVjdGl2ZV9pb19jb25jdXJyZW5jeSIsICJtYWludGVuYW5jZV9pb19jb25jdXJyZW5j eSIpOwogCiAJLyogQUxURVIgVEVYVCBTRUFSQ0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL2FjY2Vzcy9oZWFwYW0uaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaAppbmRl eCBhMmJkNWE4OTdmOC4uNWRkMDkyMmY1MmYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2Fj Y2Vzcy9oZWFwYW0uaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgKQEAgLTIy LDYgKzIyLDcgQEAKICNpbmNsdWRlICJhY2Nlc3MvdGFibGUuaCIJCS8qIGZvciBiYWNrd2Fy ZCBjb21wYXRpYmlsaXR5ICovCiAjaW5jbHVkZSAiYWNjZXNzL3RhYmxlYW0uaCIKICNpbmNs dWRlICJjb21tYW5kcy92YWN1dW0uaCIKKyNpbmNsdWRlICJleGVjdXRvci9leGVjdXRvci5o IgogI2luY2x1ZGUgIm5vZGVzL2xvY2tvcHRpb25zLmgiCiAjaW5jbHVkZSAibm9kZXMvcHJp bW5vZGVzLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9idWZwYWdlLmgiCkBAIC0zMjksOCArMzMw LDcgQEAgZXh0ZXJuIHZvaWQgaGVhcF9hYm9ydF9zcGVjdWxhdGl2ZShSZWxhdGlvbiByZWxh dGlvbiwgSXRlbVBvaW50ZXIgdGlkKTsKIGV4dGVybiBUTV9SZXN1bHQgaGVhcF91cGRhdGUo UmVsYXRpb24gcmVsYXRpb24sIEl0ZW1Qb2ludGVyIG90aWQsCiAJCQkJCQkJIEhlYXBUdXBs ZSBuZXd0dXAsCiAJCQkJCQkJIENvbW1hbmRJZCBjaWQsIFNuYXBzaG90IGNyb3NzY2hlY2ss IGJvb2wgd2FpdCwKLQkJCQkJCQkgc3RydWN0IFRNX0ZhaWx1cmVEYXRhICp0bWZkLCBMb2Nr VHVwbGVNb2RlICpsb2NrbW9kZSwKLQkJCQkJCQkgVFVfVXBkYXRlSW5kZXhlcyAqdXBkYXRl X2luZGV4ZXMpOworCQkJCQkJCSBzdHJ1Y3QgVE1fRmFpbHVyZURhdGEgKnRtZmQsIFVwZGF0 ZUNvbnRleHQgKnVwZGF0ZUN4dCk7CiBleHRlcm4gVE1fUmVzdWx0IGhlYXBfbG9ja190dXBs ZShSZWxhdGlvbiByZWxhdGlvbiwgSGVhcFR1cGxlIHR1cGxlLAogCQkJCQkJCQkgQ29tbWFu ZElkIGNpZCwgTG9ja1R1cGxlTW9kZSBtb2RlLCBMb2NrV2FpdFBvbGljeSB3YWl0X3BvbGlj eSwKIAkJCQkJCQkJIGJvb2wgZm9sbG93X3VwZGF0ZXMsCkBAIC0zNjUsNyArMzY1LDcgQEAg ZXh0ZXJuIGJvb2wgaGVhcF90dXBsZV9uZWVkc19ldmVudHVhbF9mcmVlemUoSGVhcFR1cGxl SGVhZGVyIHR1cGxlKTsKIGV4dGVybiB2b2lkIHNpbXBsZV9oZWFwX2luc2VydChSZWxhdGlv biByZWxhdGlvbiwgSGVhcFR1cGxlIHR1cCk7CiBleHRlcm4gdm9pZCBzaW1wbGVfaGVhcF9k ZWxldGUoUmVsYXRpb24gcmVsYXRpb24sIEl0ZW1Qb2ludGVyIHRpZCk7CiBleHRlcm4gdm9p ZCBzaW1wbGVfaGVhcF91cGRhdGUoUmVsYXRpb24gcmVsYXRpb24sIEl0ZW1Qb2ludGVyIG90 aWQsCi0JCQkJCQkJICAgSGVhcFR1cGxlIHR1cCwgVFVfVXBkYXRlSW5kZXhlcyAqdXBkYXRl X2luZGV4ZXMpOworCQkJCQkJCSAgIEhlYXBUdXBsZSB0dXAsIFVwZGF0ZUNvbnRleHQgKnVw ZGF0ZUN4dCk7CiAKIGV4dGVybiBUcmFuc2FjdGlvbklkIGhlYXBfaW5kZXhfZGVsZXRlX3R1 cGxlcyhSZWxhdGlvbiByZWwsCiAJCQkJCQkJCQkJCSAgVE1fSW5kZXhEZWxldGVPcCAqZGVs c3RhdGUpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaCBiL3Ny Yy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmgKaW5kZXggMWM5ZTgwMmE2YjEuLjkzMmY4ZmY2 YzRjIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oCisrKyBiL3Ny Yy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmgKQEAgLTExOCw2ICsxMTgsMjggQEAgdHlwZWRl ZiBlbnVtIFRVX1VwZGF0ZUluZGV4ZXMKIAlUVV9TdW1tYXJpemluZywKIH0gVFVfVXBkYXRl SW5kZXhlczsKIAorLyoKKyAqIERhdGEgc3BlY2lmaWMgdG8gcHJvY2Vzc2luZyBVUERBVEUg b3BlcmF0aW9ucy4KKyAqCisgKiBXaGVuIHRhYmxlX3R1cGxlX3VwZGF0ZSBpcyBjYWxsZWQg c29tZSBzdG9yYWdlIG1hbmFnZXJzLCBub3RhYmx5IGhlYXBhbSwKKyAqIGNhbiBhdCB0aW1l cyBhdm9pZCBpbmRleCB1cGRhdGVzLiAgSW4gdGhlIGhlYXBhbSB0aGlzIGlzIGtub3duIGFz IGEgSE9UCisgKiB1cGRhdGUuICBUaGlzIHN0cnVjdCBpcyB1c2VkIHRvIHByb3ZpZGUgdGhl IHN0YXRlIHJlcXVpcmVkIHRvIHRlc3QgZm9yCisgKiBIT1QgdXBkYXRlcyBhbmQgdG8gY29t bXVuaWNhdGUgdGhhdCBkZWNpc2lvbiBvbiB0byB0aGUgaW5kZXggQU1zLgorICovCit0eXBl ZGVmIHN0cnVjdCBVcGRhdGVDb250ZXh0Cit7CisJVFVfVXBkYXRlSW5kZXhlcyB1cGRhdGVJ bmRleGVzOyAvKiBXaGljaCBpbmRleCB1cGRhdGVzIGFyZSByZXF1aXJlZD8gKi8KKwlzdHJ1 Y3QgUmVzdWx0UmVsSW5mbyAqcnJpOwkvKiBSZXN1bHRSZWxJbmZvIGZvciB0aGUgdXBkYXRl ZCB0YWJsZS4gKi8KKwlzdHJ1Y3QgRVN0YXRlICplc3RhdGU7CQkvKiBFU3RhdGUgdXNlZCB3 aXRoaW4gdGhlIHVwZGF0ZS4gKi8KKwlib29sCQljcm9zc1BhcnRVcGRhdGU7CS8qIFdhcyBp dCBhIGNyb3NzLXBhcnRpdGlvbiB1cGRhdGU/ICovCisKKwkvKgorCSAqIExvY2sgbW9kZSB0 byBhY3F1aXJlIG9uIHRoZSBsYXRlc3QgdHVwbGUgdmVyc2lvbiBiZWZvcmUgcGVyZm9ybWlu ZworCSAqIEV2YWxQbGFuUXVhbCBvbiBpdAorCSAqLworCUxvY2tUdXBsZU1vZGUgbG9ja21v ZGU7Cit9IFVwZGF0ZUNvbnRleHQ7CisKIC8qCiAgKiBXaGVuIHRhYmxlX3R1cGxlX3VwZGF0 ZSwgdGFibGVfdHVwbGVfZGVsZXRlLCBvciB0YWJsZV90dXBsZV9sb2NrIGZhaWwKICAqIGJl Y2F1c2UgdGhlIHRhcmdldCB0dXBsZSBpcyBhbHJlYWR5IG91dGRhdGVkLCB0aGV5IGZpbGwg aW4gdGhpcyBzdHJ1Y3QgdG8KQEAgLTU0Miw4ICs1NjQsNyBAQCB0eXBlZGVmIHN0cnVjdCBU YWJsZUFtUm91dGluZQogCQkJCQkJCQkgU25hcHNob3QgY3Jvc3NjaGVjaywKIAkJCQkJCQkJ IGJvb2wgd2FpdCwKIAkJCQkJCQkJIFRNX0ZhaWx1cmVEYXRhICp0bWZkLAotCQkJCQkJCQkg TG9ja1R1cGxlTW9kZSAqbG9ja21vZGUsCi0JCQkJCQkJCSBUVV9VcGRhdGVJbmRleGVzICp1 cGRhdGVfaW5kZXhlcyk7CisJCQkJCQkJCSBVcGRhdGVDb250ZXh0ICp1cGRhdGVDeHQpOwog CiAJLyogc2VlIHRhYmxlX3R1cGxlX2xvY2soKSBmb3IgcmVmZXJlbmNlIGFib3V0IHBhcmFt ZXRlcnMgKi8KIAlUTV9SZXN1bHQJKCp0dXBsZV9sb2NrKSAoUmVsYXRpb24gcmVsLApAQCAt MTQ5NCwxMyArMTUxNSwxMSBAQCB0YWJsZV90dXBsZV9kZWxldGUoUmVsYXRpb24gcmVsLCBJ dGVtUG9pbnRlciB0aWQsIENvbW1hbmRJZCBjaWQsCiBzdGF0aWMgaW5saW5lIFRNX1Jlc3Vs dAogdGFibGVfdHVwbGVfdXBkYXRlKFJlbGF0aW9uIHJlbCwgSXRlbVBvaW50ZXIgb3RpZCwg VHVwbGVUYWJsZVNsb3QgKnNsb3QsCiAJCQkJICAgQ29tbWFuZElkIGNpZCwgU25hcHNob3Qg c25hcHNob3QsIFNuYXBzaG90IGNyb3NzY2hlY2ssCi0JCQkJICAgYm9vbCB3YWl0LCBUTV9G YWlsdXJlRGF0YSAqdG1mZCwgTG9ja1R1cGxlTW9kZSAqbG9ja21vZGUsCi0JCQkJICAgVFVf VXBkYXRlSW5kZXhlcyAqdXBkYXRlX2luZGV4ZXMpCisJCQkJICAgYm9vbCB3YWl0LCBUTV9G YWlsdXJlRGF0YSAqdG1mZCwgVXBkYXRlQ29udGV4dCAqdXBkYXRlQ3h0KQogewogCXJldHVy biByZWwtPnJkX3RhYmxlYW0tPnR1cGxlX3VwZGF0ZShyZWwsIG90aWQsIHNsb3QsCiAJCQkJ CQkJCQkJIGNpZCwgc25hcHNob3QsIGNyb3NzY2hlY2ssCi0JCQkJCQkJCQkJIHdhaXQsIHRt ZmQsCi0JCQkJCQkJCQkJIGxvY2ttb2RlLCB1cGRhdGVfaW5kZXhlcyk7CisJCQkJCQkJCQkJ IHdhaXQsIHRtZmQsIHVwZGF0ZUN4dCk7CiB9CiAKIC8qCkBAIC0yMDAxLDcgKzIwMjAsNyBA QCBleHRlcm4gdm9pZCBzaW1wbGVfdGFibGVfdHVwbGVfZGVsZXRlKFJlbGF0aW9uIHJlbCwg SXRlbVBvaW50ZXIgdGlkLAogCQkJCQkJCQkJICBTbmFwc2hvdCBzbmFwc2hvdCk7CiBleHRl cm4gdm9pZCBzaW1wbGVfdGFibGVfdHVwbGVfdXBkYXRlKFJlbGF0aW9uIHJlbCwgSXRlbVBv aW50ZXIgb3RpZCwKIAkJCQkJCQkJCSAgVHVwbGVUYWJsZVNsb3QgKnNsb3QsIFNuYXBzaG90 IHNuYXBzaG90LAotCQkJCQkJCQkJICBUVV9VcGRhdGVJbmRleGVzICp1cGRhdGVfaW5kZXhl cyk7CisJCQkJCQkJCQkgIFVwZGF0ZUNvbnRleHQgKnVwZGF0ZUN4dCk7CiAKIAogLyogLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9p bmRleC5oIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9pbmRleC5oCmluZGV4IDRkYWE4YmVmNWVl Li5mZGJmNDdmNjA3YiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9pbmRleC5o CisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvaW5kZXguaApAQCAtMTMyLDYgKzEzMiw3IEBA IGV4dGVybiBib29sIENvbXBhcmVJbmRleEluZm8oY29uc3QgSW5kZXhJbmZvICppbmZvMSwg Y29uc3QgSW5kZXhJbmZvICppbmZvMiwKIAkJCQkJCQkgY29uc3QgQXR0ck1hcCAqYXR0bWFw KTsKIAogZXh0ZXJuIHZvaWQgQnVpbGRTcGVjdWxhdGl2ZUluZGV4SW5mbyhSZWxhdGlvbiBp bmRleCwgSW5kZXhJbmZvICppaSk7CitleHRlcm4gdm9pZCBCdWlsZEV4cHJlc3Npb25JbmRl eEluZm8oUmVsYXRpb24gaW5kZXgsIEluZGV4SW5mbyAqaW5kZXhJbmZvKTsKIAogZXh0ZXJu IHZvaWQgRm9ybUluZGV4RGF0dW0oSW5kZXhJbmZvICppbmRleEluZm8sCiAJCQkJCQkgICBU dXBsZVRhYmxlU2xvdCAqc2xvdCwKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9y L2V4ZWN1dG9yLmggYi9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjdXRvci5oCmluZGV4IDEw NGIwNTk1NDRkLi45Y2ZmZGFhODU2MSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvZXhlY3V0 b3IvZXhlY3V0b3IuaAorKysgYi9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjdXRvci5oCkBA IC03MzEsNyArNzMxLDcgQEAgZXh0ZXJuIEJpdG1hcHNldCAqRXhlY0dldEFsbFVwZGF0ZWRD b2xzKFJlc3VsdFJlbEluZm8gKnJlbGluZm8sIEVTdGF0ZSAqZXN0YXRlKTsKIC8qCiAgKiBw cm90b3R5cGVzIGZyb20gZnVuY3Rpb25zIGluIGV4ZWNJbmRleGluZy5jCiAgKi8KLWV4dGVy biB2b2lkIEV4ZWNPcGVuSW5kaWNlcyhSZXN1bHRSZWxJbmZvICpyZXN1bHRSZWxJbmZvLCBi b29sIHNwZWN1bGF0aXZlKTsKK2V4dGVybiB2b2lkIEV4ZWNPcGVuSW5kaWNlcyhSZXN1bHRS ZWxJbmZvICpyZXN1bHRSZWxJbmZvLCBib29sIHNwZWN1bGF0aXZlLCBib29sIHVwZGF0ZSk7 CiBleHRlcm4gdm9pZCBFeGVjQ2xvc2VJbmRpY2VzKFJlc3VsdFJlbEluZm8gKnJlc3VsdFJl bEluZm8pOwogZXh0ZXJuIExpc3QgKkV4ZWNJbnNlcnRJbmRleFR1cGxlcyhSZXN1bHRSZWxJ bmZvICpyZXN1bHRSZWxJbmZvLAogCQkJCQkJCQkgICBUdXBsZVRhYmxlU2xvdCAqc2xvdCwg RVN0YXRlICplc3RhdGUsCkBAIC03NDksNiArNzQ5LDEyIEBAIGV4dGVybiB2b2lkIGNoZWNr X2V4Y2x1c2lvbl9jb25zdHJhaW50KFJlbGF0aW9uIGhlYXAsIFJlbGF0aW9uIGluZGV4LAog CQkJCQkJCQkJICAgSXRlbVBvaW50ZXIgdHVwbGVpZCwKIAkJCQkJCQkJCSAgIGNvbnN0IERh dHVtICp2YWx1ZXMsIGNvbnN0IGJvb2wgKmlzbnVsbCwKIAkJCQkJCQkJCSAgIEVTdGF0ZSAq ZXN0YXRlLCBib29sIG5ld0luZGV4KTsKK2V4dGVybiBib29sIEV4ZWNFeHBySW5kZXhlc1Jl cXVpcmVVcGRhdGVzKFJlbGF0aW9uIHJlbGF0aW9uLAorCQkJCQkJCQkJCSAgUmVzdWx0UmVs SW5mbyAqcmVzdWx0UmVsSW5mbywKKwkJCQkJCQkJCQkgIEJpdG1hcHNldCAqbW9kaWZpZWRB dHRycywKKwkJCQkJCQkJCQkgIEVTdGF0ZSAqZXN0YXRlLAorCQkJCQkJCQkJCSAgVHVwbGVU YWJsZVNsb3QgKm9sZF90dHMsCisJCQkJCQkJCQkJICBUdXBsZVRhYmxlU2xvdCAqbmV3X3R0 cyk7CiAKIC8qCiAgKiBwcm90b3R5cGVzIGZyb20gZnVuY3Rpb25zIGluIGV4ZWNSZXBsaWNh dGlvbi5jCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaCBiL3Ny Yy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCmluZGV4IGUxMDdkNmU1ZjgxLi5iYzZkMTkx OTEwMyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKKysrIGIv c3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKQEAgLTE4MCwxMSArMTgwLDIwIEBAIHR5 cGVkZWYgc3RydWN0IEluZGV4SW5mbwogCUxpc3QJICAgKmlpX0V4cHJlc3Npb25zOyAvKiBs aXN0IG9mIEV4cHIgKi8KIAkvKiBleGVjIHN0YXRlIGZvciBleHByZXNzaW9ucywgb3IgTklM IGlmIG5vbmUgKi8KIAlMaXN0CSAgICppaV9FeHByZXNzaW9uc1N0YXRlOwkvKiBsaXN0IG9m IEV4cHJTdGF0ZSAqLworCS8qIGF0dHJpYnV0ZXMgcmVmZXJlbmNlZCBieSBleHByZXNzaW9u cywgb3IgTlVMTCBpZiBub25lICovCisJQml0bWFwc2V0ICAqaWlfRXhwcmVzc2lvbnNBdHRy czsKKworCS8qIGluZGV4IGF0dHJpYnV0ZSBsZW5ndGggKi8KKwl1aW50MTYJCWlpX0luZGV4 QXR0ckxlbltJTkRFWF9NQVhfS0VZU107CisJLyogaXMgdGhlIGluZGV4IGF0dHJpYnV0ZSBi eS12YWx1ZSAqLworCUJpdG1hcHNldCAgKmlpX0luZGV4QXR0ckJ5VmFsOwogCiAJLyogcGFy dGlhbC1pbmRleCBwcmVkaWNhdGUsIG9yIE5JTCBpZiBub25lICovCiAJTGlzdAkgICAqaWlf UHJlZGljYXRlOwkvKiBsaXN0IG9mIEV4cHIgKi8KIAkvKiBleGVjIHN0YXRlIGZvciBleHBy ZXNzaW9ucywgb3IgTklMIGlmIG5vbmUgKi8KIAlFeHByU3RhdGUgICppaV9QcmVkaWNhdGVT dGF0ZTsKKwkvKiBhdHRyaWJ1dGVzIHJlZmVyZW5jZWQgYnkgdGhlIHByZWRpY2F0ZSwgb3Ig TlVMTCBpZiBub25lICovCisJQml0bWFwc2V0ICAqaWlfUHJlZGljYXRlQXR0cnM7CiAKIAkv KiBQZXItY29sdW1uIGV4Y2x1c2lvbiBvcGVyYXRvcnMsIG9yIE5VTEwgaWYgbm9uZSAqLwog CU9pZAkJICAgKmlpX0V4Y2x1c2lvbk9wczsJLyogYXJyYXkgd2l0aCBvbmUgZW50cnkgcGVy IGNvbHVtbiAqLwpAQCAtMjA4LDYgKzIxNywxMCBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleElu Zm8KIAlib29sCQlpaV9DaGVja2VkVW5jaGFuZ2VkOwogCS8qIGFtaW5zZXJ0IGhpbnQsIGNh Y2hlZCBmb3IgcmV0YWlsIGluc2VydHMgKi8KIAlib29sCQlpaV9JbmRleFVuY2hhbmdlZDsK KwkvKiBwYXJ0aWFsIGluZGV4IHByZWRpY2F0ZSBkZXRlcm1pbmVkIHlldD8gKi8KKwlib29s CQlpaV9DaGVja2VkUHJlZGljYXRlOworCS8qIGFtdXBkYXRlIGhpbnQgdXNlZCB0byBhdm9p ZCByZWNoZWNraW5nIHByZWRpY2F0ZSAqLworCWJvb2wJCWlpX1ByZWRpY2F0ZVNhdGlzZmll ZDsKIAkvKiBhcmUgd2UgZG9pbmcgYSBjb25jdXJyZW50IGluZGV4IGJ1aWxkPyAqLwogCWJv b2wJCWlpX0NvbmN1cnJlbnQ7CiAJLyogZGlkIHdlIGRldGVjdCBhbnkgYnJva2VuIEhPVCBj aGFpbnM/ICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9yZWwuaCBiL3NyYy9p bmNsdWRlL3V0aWxzL3JlbC5oCmluZGV4IGI1NTIzNTk5MTVmLi4yN2VkOGRiOTAzZCAxMDA2 NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvcmVsLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRp bHMvcmVsLmgKQEAgLTE2NCw2ICsxNjQsNyBAQCB0eXBlZGVmIHN0cnVjdCBSZWxhdGlvbkRh dGEKIAlCaXRtYXBzZXQgICpyZF9pZGF0dHI7CQkvKiBpbmNsdWRlZCBpbiByZXBsaWNhIGlk ZW50aXR5IGluZGV4ICovCiAJQml0bWFwc2V0ICAqcmRfaG90YmxvY2tpbmdhdHRyOyAvKiBj b2xzIGJsb2NraW5nIEhPVCB1cGRhdGUgKi8KIAlCaXRtYXBzZXQgICpyZF9zdW1tYXJpemVk YXR0cjsJLyogY29scyBpbmRleGVkIGJ5IHN1bW1hcml6aW5nIGluZGV4ZXMgKi8KKwlCaXRt YXBzZXQgICpyZF9leHByZXNzaW9uYXR0cjsJLyogaW5kZXhlZCBjb2xzIHJlZmVyZW5jZWQg YnkgZXhwcmVzc2lvbnMgKi8KIAogCVB1YmxpY2F0aW9uRGVzYyAqcmRfcHViZGVzYzsJLyog cHVibGljYXRpb24gZGVzY3JpcHRvciwgb3IgTlVMTCAqLwogCkBAIC0zNDgsNiArMzQ5LDcg QEAgdHlwZWRlZiBzdHJ1Y3QgU3RkUmRPcHRpb25zCiAJU3RkUmRPcHRJbmRleENsZWFudXAg dmFjdXVtX2luZGV4X2NsZWFudXA7CS8qIGNvbnRyb2xzIGluZGV4IHZhY3V1bWluZyAqLwog CWJvb2wJCXZhY3V1bV90cnVuY2F0ZTsJLyogZW5hYmxlcyB2YWN1dW0gdG8gdHJ1bmNhdGUg YSByZWxhdGlvbiAqLwogCWJvb2wJCXZhY3V1bV90cnVuY2F0ZV9zZXQ7CS8qIHdoZXRoZXIg dmFjdXVtX3RydW5jYXRlIGlzIHNldCAqLworCWJvb2wJCWV4cHJlc3Npb25fY2hlY2tzOwkv KiB1c2UgZXhwcmVzc2lvbiB0byBjaGVja3MgZm9yIGNoYW5nZXMgKi8KIAogCS8qCiAJICog RnJhY3Rpb24gb2YgcGFnZXMgaW4gYSByZWxhdGlvbiB0aGF0IHZhY3V1bSBjYW4gZWFnZXJs eSBzY2FuIGFuZCBmYWlsCkBAIC00MDksNiArNDExLDE0IEBAIHR5cGVkZWYgc3RydWN0IFN0 ZFJkT3B0aW9ucwogCSgocmVsYXRpb24pLT5yZF9vcHRpb25zID8gXAogCSAoKFN0ZFJkT3B0 aW9ucyAqKSAocmVsYXRpb24pLT5yZF9vcHRpb25zKS0+cGFyYWxsZWxfd29ya2VycyA6IChk ZWZhdWx0cHcpKQogCisvKgorICogUmVsYXRpb25HZXRFeHByZXNzaW9uQ2hlY2tzCisgKgkJ UmV0dXJucyB0aGUgcmVsYXRpb24ncyBleHByZXNzaW9uX2NoZWNrcyByZWxvcHRpb24gc2V0 dGluZy4KKyAqLworI2RlZmluZSBSZWxhdGlvbkdldEV4cHJlc3Npb25DaGVja3MocmVsYXRp b24pIFwKKwkoKHJlbGF0aW9uKS0+cmRfb3B0aW9ucyA/IFwKKwkgKChTdGRSZE9wdGlvbnMg KikgKHJlbGF0aW9uKS0+cmRfb3B0aW9ucyktPmV4cHJlc3Npb25fY2hlY2tzIDogdHJ1ZSkK KwogLyogVmlld09wdGlvbnMtPmNoZWNrX29wdGlvbiB2YWx1ZXMgKi8KIHR5cGVkZWYgZW51 bSBWaWV3T3B0Q2hlY2tPcHRpb24KIHsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxz L3JlbGNhY2hlLmggYi9zcmMvaW5jbHVkZS91dGlscy9yZWxjYWNoZS5oCmluZGV4IDM1NjFj NmJlZjBiLi40YjMxMmJjOGQwNiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvcmVs Y2FjaGUuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9yZWxjYWNoZS5oCkBAIC03MSw2ICs3 MSw3IEBAIHR5cGVkZWYgZW51bSBJbmRleEF0dHJCaXRtYXBLaW5kCiAJSU5ERVhfQVRUUl9C SVRNQVBfSURFTlRJVFlfS0VZLAogCUlOREVYX0FUVFJfQklUTUFQX0hPVF9CTE9DS0lORywK IAlJTkRFWF9BVFRSX0JJVE1BUF9TVU1NQVJJWkVELAorCUlOREVYX0FUVFJfQklUTUFQX0VY UFJFU1NJT04sCiB9IEluZGV4QXR0ckJpdG1hcEtpbmQ7CiAKIGV4dGVybiBCaXRtYXBzZXQg KlJlbGF0aW9uR2V0SW5kZXhBdHRyQml0bWFwKFJlbGF0aW9uIHJlbGF0aW9uLApkaWZmIC0t Z2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9oZWFwX2hvdF91cGRhdGVzLm91dCBi L3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvaGVhcF9ob3RfdXBkYXRlcy5vdXQKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjdkMjJiZWZjMzRhCi0tLSAvZGV2 L251bGwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9oZWFwX2hvdF91cGRhdGVz Lm91dApAQCAtMCwwICsxLDEwNDggQEAKKy0tIENyZWF0ZSBhIGZ1bmN0aW9uIHRvIG1lYXN1 cmUgSE9UIHVwZGF0ZXMKK0NSRUFURSBPUiBSRVBMQUNFIEZVTkNUSU9OIGNoZWNrX2hvdF91 cGRhdGVzKAorICAgIGV4cGVjdGVkIElOVCwKKyAgICBwX3RhYmxlX25hbWUgVEVYVCBERUZB VUxUICd0JywKKyAgICBwX3NjaGVtYV9uYW1lIFRFWFQgREVGQVVMVCBjdXJyZW50X3NjaGVt YSgpCispCitSRVRVUk5TIFRBQkxFICgKKyAgICB0YWJsZV9uYW1lIFRFWFQsCisgICAgdG90 YWxfdXBkYXRlcyBCSUdJTlQsCisgICAgaG90X3VwZGF0ZXMgQklHSU5ULAorICAgIGhvdF91 cGRhdGVfcGVyY2VudGFnZSBOVU1FUklDLAorICAgIG1hdGNoZXNfZXhwZWN0ZWQgQk9PTEVB TiwKKyAgICBoYXNfaW5kZXhlcyBCT09MRUFOLAorICAgIGluZGV4X2NvdW50IElOVCwKKyAg ICBmaWxsZmFjdG9yIElOVAorKQorTEFOR1VBR0UgcGxwZ3NxbAorQVMgJCQKK0RFQ0xBUkUK KyAgICB2X3JlbGlkIG9pZDsKKyAgICB2X3F1YWxpZmllZF9uYW1lIFRFWFQ7CisgICAgdl9o b3RfdXBkYXRlcyBCSUdJTlQ7CisgICAgdl91cGRhdGVzIEJJR0lOVDsKKyAgICB2X3hhY3Rf aG90X3VwZGF0ZXMgQklHSU5UOworICAgIHZfeGFjdF91cGRhdGVzIEJJR0lOVDsKK0JFR0lO CisKKyAgICAtLSBXZSBuZWVkIHRvIHdhaXQgZm9yIHN0YXRpc3RpY3MgdG8gdXBkYXRlCisg ICAgUEVSRk9STSBwZ19zdGF0X2ZvcmNlX25leHRfZmx1c2goKTsKKworICAgIC0tIENvbnN0 cnVjdCBxdWFsaWZpZWQgbmFtZQorICAgIHZfcXVhbGlmaWVkX25hbWUgOj0gcXVvdGVfaWRl bnQocF9zY2hlbWFfbmFtZSkgfHwgJy4nIHx8IHF1b3RlX2lkZW50KHBfdGFibGVfbmFtZSk7 CisKKyAgICAtLSBHZXQgdGhlIE9JRCB1c2luZyByZWdjbGFzcworICAgIHZfcmVsaWQgOj0g dl9xdWFsaWZpZWRfbmFtZTo6cmVnY2xhc3M7CisKKyAgICBJRiB2X3JlbGlkIElTIE5VTEwg VEhFTgorICAgICAgICBSQUlTRSBFWENFUFRJT04gJ1RhYmxlICUuJSBub3QgZm91bmQnLCBw X3NjaGVtYV9uYW1lLCBwX3RhYmxlX25hbWU7CisgICAgRU5EIElGOworCisgICAgLS0gR2V0 IGN1bXVsYXRpdmUgc3RhdHMKKyAgICB2X2hvdF91cGRhdGVzIDo9IENPQUxFU0NFKHBnX3N0 YXRfZ2V0X3R1cGxlc19ob3RfdXBkYXRlZCh2X3JlbGlkKSwgMCk7CisgICAgdl91cGRhdGVz IDo9IENPQUxFU0NFKHBnX3N0YXRfZ2V0X3R1cGxlc191cGRhdGVkKHZfcmVsaWQpLCAwKTsK KworICAgIC0tIEdldCBjdXJyZW50IHRyYW5zYWN0aW9uIHN0YXRzCisgICAgdl94YWN0X2hv dF91cGRhdGVzIDo9IENPQUxFU0NFKHBnX3N0YXRfZ2V0X3hhY3RfdHVwbGVzX2hvdF91cGRh dGVkKHZfcmVsaWQpLCAwKTsKKyAgICB2X3hhY3RfdXBkYXRlcyA6PSBDT0FMRVNDRShwZ19z dGF0X2dldF94YWN0X3R1cGxlc191cGRhdGVkKHZfcmVsaWQpLCAwKTsKKworICAgIC0tIENv bWJpbmUgc3RhdHMKKyAgICB2X2hvdF91cGRhdGVzIDo9IHZfaG90X3VwZGF0ZXMgKyB2X3hh Y3RfaG90X3VwZGF0ZXM7CisgICAgdl91cGRhdGVzIDo9IHZfdXBkYXRlcyArIHZfeGFjdF91 cGRhdGVzOworCisgICAgUkVUVVJOIFFVRVJZCisgICAgU0VMRUNUCisgICAgICAgIHBfdGFi bGVfbmFtZTo6VEVYVCwKKyAgICAgICAgdl91cGRhdGVzOjpCSUdJTlQgYXMgdG90YWxfdXBk YXRlcywKKyAgICAgICAgdl9ob3RfdXBkYXRlczo6QklHSU5UIGFzIGhvdF91cGRhdGVzLAor ICAgICAgICBDQVNFCisgICAgICAgICAgICBXSEVOIHZfdXBkYXRlcyA+IDAgVEhFTgorICAg ICAgICAgICAgICAgIFJPVU5EKCh2X2hvdF91cGRhdGVzOjpudW1lcmljIC8gdl91cGRhdGVz OjpudW1lcmljICogMTAwKTo6bnVtZXJpYywgMikKKyAgICAgICAgICAgIEVMU0UgMAorICAg ICAgICBFTkQgYXMgaG90X3VwZGF0ZV9wZXJjZW50YWdlLAorICAgICAgICAodl9ob3RfdXBk YXRlcyA9IGV4cGVjdGVkKTo6Qk9PTEVBTiBhcyBtYXRjaGVzX2V4cGVjdGVkLAorICAgICAg ICAoRVhJU1RTICgKKyAgICAgICAgICAgIFNFTEVDVCAxIEZST00gcGdfaW5kZXggV0hFUkUg aW5kcmVsaWQgPSB2X3JlbGlkCisgICAgICAgICkpOjpCT09MRUFOIGFzIGhhc19pbmRleGVz LAorICAgICAgICAoCisgICAgICAgICAgICBTRUxFQ1QgQ09VTlQoKik6OklOVAorICAgICAg ICAgICAgRlJPTSBwZ19pbmRleAorICAgICAgICAgICAgV0hFUkUgaW5kcmVsaWQgPSB2X3Jl bGlkCisgICAgICAgICkgYXMgaW5kZXhfY291bnQsCisgICAgICAgIENPQUxFU0NFKAorICAg ICAgICAgICAgKAorICAgICAgICAgICAgICAgIFNFTEVDVCAocmVnZXhwX21hdGNoKGFycmF5 X3RvX3N0cmluZyhyZWxvcHRpb25zLCAnLCcpLCAnZmlsbGZhY3Rvcj0oXGQrKScpKVsxXTo6 aW50CisgICAgICAgICAgICAgICAgRlJPTSBwZ19jbGFzcworICAgICAgICAgICAgICAgIFdI RVJFIG9pZCA9IHZfcmVsaWQKKyAgICAgICAgICAgICksCisgICAgICAgICAgICAxMDAKKyAg ICAgICAgKSBhcyBmaWxsZmFjdG9yOworRU5EOworJCQ7CistLSAtLSAtLSAtLSAtLSAtLSAt LSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAt LSAtLQorLS0gVGhpcyB0YWJsZSB3aWxsIGhhdmUgdHdvIGNvbHVtbnMgYW5kIHR3byBpbmRl eGVzLCBvbmUgb24gdGhlIHByaW1hcnkga2V5CistLSBpZCBhbmQgb25lIG9uIHRoZSBleHBy ZXNzaW9uIChkb2NzLT4+J25hbWUnKS4gIFRoYXQgbWVhbnMgdGhhdCB0aGUgaW5kZXhlZAor LS0gYXR0cmlidXRlcyBhcmUgJ2lkJyBhbmQgJ2RvY3MnLgorQ1JFQVRFIFRBQkxFIHQoaWQg SU5UIFBSSU1BUlkgS0VZLCBkb2NzIEpTT05CKSBXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQg PSBvZmYsIGZpbGxmYWN0b3IgPSA3MCk7CitDUkVBVEUgSU5ERVggdF9kb2NzX2lkeCBPTiB0 KChkb2NzLT4+J25hbWUnKSk7CitJTlNFUlQgSU5UTyB0IFZBTFVFUyAoMSwgJ3sibmFtZSI6 ICJqb2huIiwgImRhdGEiOiAic29tZSBkYXRhIn0nKTsKKy0tIERpc2FibGUgZXhwcmVzc2lv biBjaGVja3MuCitBTFRFUiBUQUJMRSB0IFNFVCAoZXhwcmVzc2lvbl9jaGVja3MgPSBmYWxz ZSk7CitTRUxFQ1QgcmVsb3B0aW9ucyBGUk9NIHBnX2NsYXNzIFdIRVJFIHJlbG5hbWUgPSAn dCc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxvcHRpb25zICAgICAgICAgICAg ICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisge2F1dG92YWN1dW1fZW5hYmxlZD1vZmYs ZmlsbGZhY3Rvcj03MCxleHByZXNzaW9uX2NoZWNrcz1mYWxzZX0KKygxIHJvdykKKworLS0g V2hpbGUgdGhlIGluZGV4ZWQgYXR0cmlidXRlICJuYW1lIiBpcyB1bmNoYW5nZWQgd2UndmUg ZGlzYWJsZWQgZXhwcmVzc2lvbgorLS0gY2hlY2tzIHNvIHRoaXMgdXBkYXRlIHNob3VsZCBu b3QgZ28gSE9UIGFzIHRoZSBzeXN0ZW0gY2FuJ3QgZGV0ZXJtaW5lIGlmCistLSB0aGUgaW5k ZXhlZCBhdHRyaWJ1dGUgaGFzIGNoYW5nZWQgd2l0aG91dCBldmFsdWF0aW5nIHRoZSBleHBy ZXNzaW9uLgordXBkYXRlIHQgc2V0IGRvY3M9J3sibmFtZSI6ICJqb2huIiwgImRhdGEiOiAi c29tZXRoaW5nIGVsc2UifScgd2hlcmUgaWQ9MTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90 X3VwZGF0ZXMoMCk7CisgdGFibGVfbmFtZSB8IHRvdGFsX3VwZGF0ZXMgfCBob3RfdXBkYXRl cyB8IGhvdF91cGRhdGVfcGVyY2VudGFnZSB8IG1hdGNoZXNfZXhwZWN0ZWQgfCBoYXNfaW5k ZXhlcyB8IGluZGV4X2NvdW50IHwgZmlsbGZhY3RvciAKKy0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLQor IHQgICAgICAgICAgfCAgICAgICAgICAgICAxIHwgICAgICAgICAgIDAgfCAgICAgICAgICAg ICAgICAgIDAuMDAgfCB0ICAgICAgICAgICAgICAgIHwgdCAgICAgICAgICAgfCAgICAgICAg ICAgMiB8ICAgICAgICAgNzAKKygxIHJvdykKKworLS0gUmUtZW5hYmxlIGV4cHJlc3Npb24g Y2hlY2tzLgorQUxURVIgVEFCTEUgdCBTRVQgKGV4cHJlc3Npb25fY2hlY2tzID0gdHJ1ZSk7 CitTRUxFQ1QgcmVsb3B0aW9ucyBGUk9NIHBnX2NsYXNzIFdIRVJFIHJlbG5hbWUgPSAndCc7 CisgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbG9wdGlvbnMgICAgICAgICAgICAgICAg ICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIHthdXRvdmFjdXVtX2VuYWJsZWQ9b2ZmLGZpbGxm YWN0b3I9NzAsZXhwcmVzc2lvbl9jaGVja3M9dHJ1ZX0KKygxIHJvdykKKworLS0gVGhlIGlu ZGV4ZWQgYXR0cmlidXRlICJuYW1lIiB3aXRoIHZhbHVlICJqb2huIiBpcyB1bmNoYW5nZWQs IGV4cGVjdCBhIEhPVCB1cGRhdGUuCitVUERBVEUgdCBTRVQgZG9jcz0neyJuYW1lIjogImpv aG4iLCAiZGF0YSI6ICJzb21lIG90aGVyIGRhdGEifScgV0hFUkUgaWQ9MTsKK1NFTEVDVCAq IEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMSk7CisgdGFibGVfbmFtZSB8IHRvdGFsX3VwZGF0 ZXMgfCBob3RfdXBkYXRlcyB8IGhvdF91cGRhdGVfcGVyY2VudGFnZSB8IG1hdGNoZXNfZXhw ZWN0ZWQgfCBoYXNfaW5kZXhlcyB8IGluZGV4X2NvdW50IHwgZmlsbGZhY3RvciAKKy0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLQorIHQgICAgICAgICAgfCAgICAgICAgICAgICAyIHwgICAgICAgICAg IDEgfCAgICAgICAgICAgICAgICAgNTAuMDAgfCB0ICAgICAgICAgICAgICAgIHwgdCAgICAg ICAgICAgfCAgICAgICAgICAgMiB8ICAgICAgICAgNzAKKygxIHJvdykKKworLS0gVGhlIGZv bGxvd2luZyB1cGRhdGUgY2hhbmdlcyB0aGUgaW5kZXhlZCBhdHRyaWJ1dGUgIm5hbWUiLCB0 aGlzIHNob3VsZCBub3QgYmUgYSBIT1QgdXBkYXRlLgorVVBEQVRFIHQgU0VUIGRvY3M9J3si bmFtZSI6ICJzbWl0aCIsICJkYXRhIjogInNvbWUgb3RoZXIgZGF0YSJ9JyBXSEVSRSBpZD0x OworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygxKTsKKyB0YWJsZV9uYW1lIHwg dG90YWxfdXBkYXRlcyB8IGhvdF91cGRhdGVzIHwgaG90X3VwZGF0ZV9wZXJjZW50YWdlIHwg bWF0Y2hlc19leHBlY3RlZCB8IGhhc19pbmRleGVzIHwgaW5kZXhfY291bnQgfCBmaWxsZmFj dG9yIAorLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tCisgdCAgICAgICAgICB8ICAgICAgICAgICAgIDMg fCAgICAgICAgICAgMSB8ICAgICAgICAgICAgICAgICAzMy4zMyB8IHQgICAgICAgICAgICAg ICAgfCB0ICAgICAgICAgICB8ICAgICAgICAgICAyIHwgICAgICAgICA3MAorKDEgcm93KQor CistLSBOb3csIHRoaXMgdXBkYXRlIGRvZXMgbm90IGNoYW5nZSB0aGUgaW5kZXhlZCBhdHRy aWJ1dGUgIm5hbWUiIGZyb20gInNtaXRoIiwgdGhpcyBzaG91bGQgYmUgSE9ULgorVVBEQVRF IHQgU0VUIGRvY3M9J3sibmFtZSI6ICJzbWl0aCIsICJkYXRhIjogInNvbWUgbW9yZSBkYXRh In0nIFdIRVJFIGlkPTE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDIpOwor IHRhYmxlX25hbWUgfCB0b3RhbF91cGRhdGVzIHwgaG90X3VwZGF0ZXMgfCBob3RfdXBkYXRl X3BlcmNlbnRhZ2UgfCBtYXRjaGVzX2V4cGVjdGVkIHwgaGFzX2luZGV4ZXMgfCBpbmRleF9j b3VudCB8IGZpbGxmYWN0b3IgCistLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0KKyB0ICAgICAgICAgIHwg ICAgICAgICAgICAgNCB8ICAgICAgICAgICAyIHwgICAgICAgICAgICAgICAgIDUwLjAwIHwg dCAgICAgICAgICAgICAgICB8IHQgICAgICAgICAgIHwgICAgICAgICAgIDIgfCAgICAgICAg IDcwCisoMSByb3cpCisKK0RST1AgVEFCTEUgdDsKKy0tIC0tIC0tIC0tIC0tIC0tIC0tIC0t IC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0t CistLSBUaGlzIHRhYmxlIGlzIHRoZSBzYW1lIGFzIHRoZSBwcmV2aW91cyBvbmUgYnV0IGl0 IGhhcyBhIHRoaXJkIGluZGV4LiAgVGhlCistLSBpbmRleCAnY29saW5kZXgnIGlzbid0IGFu IGV4cHJlc3Npb24gaW5kZXgsIGl0IGluZGV4ZXMgdGhlIGVudGlyZSB2YWx1ZQorLS0gaW4g dGhlIGRvY3MgY29sdW1uLiAgVGhlcmUgYXJlIHN0aWxsIG9ubHkgdHdvIGluZGV4ZWQgYXR0 cmlidXRlcyBmb3IgdGhpcworLS0gcmVsYXRpb24sIHRoZSBzYW1lIHR3byBhcyBiZWZvcmUu ICBUaGUgcHJlc2VuY2Ugb2YgYW4gaW5kZXggb24gdGhlIGVudGlyZQorLS0gdmFsdWUgb2Yg dGhlIGRvY3MgY29sdW1uIHNob3VsZCBwcmV2ZW50IEhPVCB1cGRhdGVzIGZvciBhbnkgdXBk YXRlcyB0byBhbnkKKy0tIHBvcnRpb24gb2YgSlNPTkIgY29udGVudCBpbiB0aGF0IGNvbHVt bi4KK0NSRUFURSBUQUJMRSB0KGlkIElOVCBQUklNQVJZIEtFWSwgZG9jcyBKU09OQikgV0lU SCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gb2ZmLCBmaWxsZmFjdG9yID0gNzApOworQ1JFQVRF IElOREVYIHRfZG9jc19pZHggT04gdCgoZG9jcy0+PiduYW1lJykpOworQ1JFQVRFIElOREVY IHRfZG9jc19jb2xfaWR4IE9OIHQoZG9jcyk7CitJTlNFUlQgSU5UTyB0IFZBTFVFUyAoMSwg J3sibmFtZSI6ICJqb2huIiwgImRhdGEiOiAic29tZSBkYXRhIn0nKTsKKy0tIFRoaXMgdXBk YXRlIGRvZXNuJ3QgY2hhbmdlIHRoZSB2YWx1ZSBvZiB0aGUgZXhwcmVzc2lvbiBpbmRleCwg YnV0IGl0IGRvZXMKKy0tIGNoYW5nZSB0aGUgY29udGVudCBvZiB0aGUgZG9jcyBjb2x1bW4g YW5kIHNvIHNob3VsZCBub3QgYmUgSE9UIGJlY2F1c2UgdGhlCistLSBpbmRleGVkIHZhbHVl IGNoYW5nZWQgYXMgYSByZXN1bHQgb2YgdGhlIHVwZGF0ZS4KK1VQREFURSB0IFNFVCBkb2Nz PSd7Im5hbWUiOiAiam9obiIsICJkYXRhIjogInNvbWUgb3RoZXIgZGF0YSJ9JyBXSEVSRSBp ZD0xOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygwKTsKKyB0YWJsZV9uYW1l IHwgdG90YWxfdXBkYXRlcyB8IGhvdF91cGRhdGVzIHwgaG90X3VwZGF0ZV9wZXJjZW50YWdl IHwgbWF0Y2hlc19leHBlY3RlZCB8IGhhc19pbmRleGVzIHwgaW5kZXhfY291bnQgfCBmaWxs ZmFjdG9yIAorLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tCisgdCAgICAgICAgICB8ICAgICAgICAgICAg IDEgfCAgICAgICAgICAgMCB8ICAgICAgICAgICAgICAgICAgMC4wMCB8IHQgICAgICAgICAg ICAgICAgfCB0ICAgICAgICAgICB8ICAgICAgICAgICAzIHwgICAgICAgICA3MAorKDEgcm93 KQorCitEUk9QIFRBQkxFIHQ7CistLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAt LSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLQorLS0gVGhlIHRh YmxlIGhhcyBvbmUgY29sdW1uIGRvY3MgYW5kIHR3byBpbmRleGVzLiAgVGhleSBhcmUgYm90 aCBleHByZXNzaW9uCistLSBpbmRleGVzIHJlZmVyZW5jaW5nIHRoZSBzYW1lIGNvbHVtbiBh dHRyaWJ1dGUgKGRvY3MpIGJ1dCBvbmUgaXMgYSBwYXJ0aWFsCistLSBpbmRleC4KK0NSRUFU RSBUQUJMRSB0IChkb2NzIEpTT05CKSBXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBvZmYs IGZpbGxmYWN0b3IgPSA3MCk7CitJTlNFUlQgSU5UTyB0IChkb2NzKSBWQUxVRVMgKCd7ImEi OiAwLCAiYiI6IDB9Jyk7CitJTlNFUlQgSU5UTyB0IChkb2NzKSBTRUxFQ1QganNvbmJfYnVp bGRfb2JqZWN0KCdiJywgbikgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMTAwLCAxMDAwMCkgYXMg bjsKK0NSRUFURSBJTkRFWCB0X2lkeF9hIE9OIHQgKChkb2NzLT4+J2EnKSk7CitDUkVBVEUg SU5ERVggdF9pZHhfYiBPTiB0ICgoZG9jcy0+PidiJykpIFdIRVJFIChkb2NzLT4+J2InKTo6 bnVtZXJpYyA+IDk7CistLSBXZSdyZSB1c2luZyBCVFJFRSBpbmRleGVzIGFuZCBmb3IgdGhp cyB0ZXN0IHdlIHdhbnQgdG8gbWFrZSBzdXJlIHRoYXQgdGhleSByZW1haW4KKy0tIGluIHN5 bmMgd2l0aCBjaGFuZ2VzIHRvIG91ciByZWxhdGlvbi4gIEZvcmNlIHRoZSBjaG9pY2Ugb2Yg aW5kZXggc2NhbnMgYmVsb3cgc28KKy0tIHRoYXQgd2Uga25vdyB3ZSdyZSBjaGVja2luZyB0 aGUgaW5kZXgncyB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgdmFsdWVzIHNob3VsZCBiZQorLS0g aW4gdGhlIGluZGV4IG9yIG5vdC4KK1NFVCBTRVNTSU9OIGVuYWJsZV9zZXFzY2FuID0gT0ZG OworU0VUIFNFU1NJT04gZW5hYmxlX2JpdG1hcHNjYW4gPSBPRkY7CistLSBMZWF2ZSAnYScg dW5jaGFuZ2VkIGJ1dCBtb2RpZnkgJ2InIHRvIGEgdmFsdWUgb3V0c2lkZSBvZiB0aGUgaW5k ZXggcHJlZGljYXRlLgorLS0gVGhpcyBzaG91bGQgYmUgYSBIT1QgdXBkYXRlIGJlY2F1c2Ug bmVpdGhlciBpbmRleCBpcyBjaGFuZ2VkLgorVVBEQVRFIHQgU0VUIGRvY3MgPSBqc29uYl9i dWlsZF9vYmplY3QoJ2EnLCAwLCAnYicsIDEpIFdIRVJFIChkb2NzLT4+J2EnKTo6bnVtZXJp YyA9IDA7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDEpOworIHRhYmxlX25h bWUgfCB0b3RhbF91cGRhdGVzIHwgaG90X3VwZGF0ZXMgfCBob3RfdXBkYXRlX3BlcmNlbnRh Z2UgfCBtYXRjaGVzX2V4cGVjdGVkIHwgaGFzX2luZGV4ZXMgfCBpbmRleF9jb3VudCB8IGZp bGxmYWN0b3IgCistLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0KKyB0ICAgICAgICAgIHwgICAgICAgICAg ICAgMSB8ICAgICAgICAgICAxIHwgICAgICAgICAgICAgICAgMTAwLjAwIHwgdCAgICAgICAg ICAgICAgICB8IHQgICAgICAgICAgIHwgICAgICAgICAgIDIgfCAgICAgICAgIDcwCisoMSBy b3cpCisKKy0tIExldCdzIGNoZWNrIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBpbmRleCBkb2Vz IG5vdCBjb250YWluIGEgdmFsdWUgZm9yICdiJworRVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxF Q1QgKiBGUk9NIHQgV0hFUkUgKGRvY3MtPj4nYicpOjpudW1lcmljID4gOSBBTkQgKGRvY3Mt Pj4nYicpOjpudW1lcmljIDwgMTAwOworICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVS WSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2Nh biB1c2luZyB0X2lkeF9iIG9uIHQKKyAgIEZpbHRlcjogKCgoZG9jcyAtPj4gJ2InOjp0ZXh0 KSk6Om51bWVyaWMgPCAnMTAwJzo6bnVtZXJpYykKKygyIHJvd3MpCisKK1NFTEVDVCAqIEZS T00gdCBXSEVSRSAoZG9jcy0+PidiJyk6Om51bWVyaWMgPiA5IEFORCAoZG9jcy0+PidiJyk6 Om51bWVyaWMgPCAxMDA7CisgZG9jcyAKKy0tLS0tLQorKDAgcm93cykKKworLS0gTGVhdmUg J2EnIHVuY2hhbmdlZCBidXQgbW9kaWZ5ICdiJyB0byBhIHZhbHVlIHdpdGhpbiB0aGUgaW5k ZXggcHJlZGljYXRlLgorLS0gVGhpcyByZXByZXNlbnRzIGEgY2hhbmdlIGZvciBmaWVsZCAn YicgZnJvbSB1bmluZGV4ZWQgdG8gaW5kZXhlZCBhbmQgc28KKy0tIHRoaXMgc2hvdWxkIG5v dCB0YWtlIHRoZSBIT1QgcGF0aC4KK1VQREFURSB0IFNFVCBkb2NzID0ganNvbmJfYnVpbGRf b2JqZWN0KCdhJywgMCwgJ2InLCAxMCkgV0hFUkUgKGRvY3MtPj4nYScpOjpudW1lcmljID0g MDsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMSk7CisgdGFibGVfbmFtZSB8 IHRvdGFsX3VwZGF0ZXMgfCBob3RfdXBkYXRlcyB8IGhvdF91cGRhdGVfcGVyY2VudGFnZSB8 IG1hdGNoZXNfZXhwZWN0ZWQgfCBoYXNfaW5kZXhlcyB8IGluZGV4X2NvdW50IHwgZmlsbGZh Y3RvciAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLQorIHQgICAgICAgICAgfCAgICAgICAgICAgICAy IHwgICAgICAgICAgIDEgfCAgICAgICAgICAgICAgICAgNTAuMDAgfCB0ICAgICAgICAgICAg ICAgIHwgdCAgICAgICAgICAgfCAgICAgICAgICAgMiB8ICAgICAgICAgNzAKKygxIHJvdykK KworLS0gTGV0J3MgY2hlY2sgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGluZGV4IGNvbnRhaW5z IHRoZSBuZXcgdmFsdWUgb2YgJ2InCitFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCAqIEZS T00gdCBXSEVSRSAoZG9jcy0+PidiJyk6Om51bWVyaWMgPiA5IEFORCAoZG9jcy0+PidiJyk6 Om51bWVyaWMgPCAxMDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4g ICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBTY2FuIHVzaW5n IHRfaWR4X2Igb24gdAorICAgRmlsdGVyOiAoKChkb2NzIC0+PiAnYic6OnRleHQpKTo6bnVt ZXJpYyA8ICcxMDAnOjpudW1lcmljKQorKDIgcm93cykKKworU0VMRUNUICogRlJPTSB0IFdI RVJFIChkb2NzLT4+J2InKTo6bnVtZXJpYyA+IDkgQU5EIChkb2NzLT4+J2InKTo6bnVtZXJp YyA8IDEwMDsKKyAgICAgICBkb2NzICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKyB7 ImEiOiAwLCAiYiI6IDEwfQorKDEgcm93KQorCistLSBUaGlzIHVwZGF0ZSBtb2RpZmllcyB0 aGUgdmFsdWUgb2YgJ2EnLCBhbiBpbmRleGVkIGZpZWxkLCBzbyBpdCBhbHNvIGNhbm5vdAor LS0gYmUgYSBIT1QgdXBkYXRlLgorVVBEQVRFIHQgU0VUIGRvY3MgPSBqc29uYl9idWlsZF9v YmplY3QoJ2EnLCAxLCAnYicsIDEwKSBXSEVSRSAoZG9jcy0+PidiJyk6Om51bWVyaWMgPSAx MDsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMSk7CisgdGFibGVfbmFtZSB8 IHRvdGFsX3VwZGF0ZXMgfCBob3RfdXBkYXRlcyB8IGhvdF91cGRhdGVfcGVyY2VudGFnZSB8 IG1hdGNoZXNfZXhwZWN0ZWQgfCBoYXNfaW5kZXhlcyB8IGluZGV4X2NvdW50IHwgZmlsbGZh Y3RvciAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLQorIHQgICAgICAgICAgfCAgICAgICAgICAgICAz IHwgICAgICAgICAgIDEgfCAgICAgICAgICAgICAgICAgMzMuMzMgfCB0ICAgICAgICAgICAg ICAgIHwgdCAgICAgICAgICAgfCAgICAgICAgICAgMiB8ICAgICAgICAgNzAKKygxIHJvdykK KworLS0gVGhpcyB1cGRhdGUgY2hhbmdlcyBib3RoICdhJyBhbmQgJ2InIHRvIG5ldyB2YWx1 ZXMgdGhhdCByZXF1aXJlIGluZGV4IHVwZGF0ZXMsCistLSB0aGlzIGNhbm5vdCB1c2UgdGhl IEhPVCBwYXRoLgorVVBEQVRFIHQgU0VUIGRvY3MgPSBqc29uYl9idWlsZF9vYmplY3QoJ2En LCAyLCAnYicsIDEyKSBXSEVSRSAoZG9jcy0+PidiJyk6Om51bWVyaWMgPSAxMDsKK1NFTEVD VCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMSk7CisgdGFibGVfbmFtZSB8IHRvdGFsX3Vw ZGF0ZXMgfCBob3RfdXBkYXRlcyB8IGhvdF91cGRhdGVfcGVyY2VudGFnZSB8IG1hdGNoZXNf ZXhwZWN0ZWQgfCBoYXNfaW5kZXhlcyB8IGluZGV4X2NvdW50IHwgZmlsbGZhY3RvciAKKy0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLQorIHQgICAgICAgICAgfCAgICAgICAgICAgICA0IHwgICAgICAg ICAgIDEgfCAgICAgICAgICAgICAgICAgMjUuMDAgfCB0ICAgICAgICAgICAgICAgIHwgdCAg ICAgICAgICAgfCAgICAgICAgICAgMiB8ICAgICAgICAgNzAKKygxIHJvdykKKworLS0gTGV0 J3MgY2hlY2sgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGluZGV4IGNvbnRhaW5zIHRoZSBuZXcg dmFsdWUgb2YgJ2InCitFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCAqIEZST00gdCBXSEVS RSAoZG9jcy0+PidiJyk6Om51bWVyaWMgPiA5IEFORCAoZG9jcy0+PidiJyk6Om51bWVyaWMg PCAxMDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAg ICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBTY2FuIHVzaW5nIHRfaWR4X2Ig b24gdAorICAgRmlsdGVyOiAoKChkb2NzIC0+PiAnYic6OnRleHQpKTo6bnVtZXJpYyA8ICcx MDAnOjpudW1lcmljKQorKDIgcm93cykKKworU0VMRUNUICogRlJPTSB0IFdIRVJFIChkb2Nz LT4+J2InKTo6bnVtZXJpYyA+IDkgQU5EIChkb2NzLT4+J2InKTo6bnVtZXJpYyA8IDEwMDsK KyAgICAgICBkb2NzICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKyB7ImEiOiAyLCAi YiI6IDEyfQorKDEgcm93KQorCistLSBUaGlzIHVwZGF0ZSBjaGFuZ2VzICdiJyB0byBhIHZh bHVlIG91dHNpZGUgaXRzIHByZWRpY2F0ZSByZXF1aXJpbmcgdGhhdAorLS0gd2UgcmVtb3Zl IGl0IGZyb20gdGhlIGluZGV4LiAgVGhhdCdzIGEgdHJhbnNpdGlvbiB0aGF0IGNhbid0IGJl IGRvbmUKKy0tIGR1cmluZyBhIEhPVCB1cGRhdGUuCitVUERBVEUgdCBTRVQgZG9jcyA9IGpz b25iX2J1aWxkX29iamVjdCgnYScsIDIsICdiJywgMSkgV0hFUkUgKGRvY3MtPj4nYicpOjpu dW1lcmljID0gMTI7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDEpOworIHRh YmxlX25hbWUgfCB0b3RhbF91cGRhdGVzIHwgaG90X3VwZGF0ZXMgfCBob3RfdXBkYXRlX3Bl cmNlbnRhZ2UgfCBtYXRjaGVzX2V4cGVjdGVkIHwgaGFzX2luZGV4ZXMgfCBpbmRleF9jb3Vu dCB8IGZpbGxmYWN0b3IgCistLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0KKyB0ICAgICAgICAgIHwgICAg ICAgICAgICAgNSB8ICAgICAgICAgICAxIHwgICAgICAgICAgICAgICAgIDIwLjAwIHwgdCAg ICAgICAgICAgICAgICB8IHQgICAgICAgICAgIHwgICAgICAgICAgIDIgfCAgICAgICAgIDcw CisoMSByb3cpCisKKy0tIExldCdzIGNoZWNrIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBpbmRl eCBubyBsb25nZXIgY29udGFpbnMgdGhlIHZhbHVlIG9mICdiJworRVhQTEFJTiAoQ09TVFMg T0ZGKSBTRUxFQ1QgKiBGUk9NIHQgV0hFUkUgKGRvY3MtPj4nYicpOjpudW1lcmljID4gOSBB TkQgKGRvY3MtPj4nYicpOjpudW1lcmljIDwgMTAwOworICAgICAgICAgICAgICAgICAgICAg ICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg SW5kZXggU2NhbiB1c2luZyB0X2lkeF9iIG9uIHQKKyAgIEZpbHRlcjogKCgoZG9jcyAtPj4g J2InOjp0ZXh0KSk6Om51bWVyaWMgPCAnMTAwJzo6bnVtZXJpYykKKygyIHJvd3MpCisKK1NF TEVDVCAqIEZST00gdCBXSEVSRSAoZG9jcy0+PidiJyk6Om51bWVyaWMgPiA5IEFORCAoZG9j cy0+PidiJyk6Om51bWVyaWMgPCAxMDA7CisgZG9jcyAKKy0tLS0tLQorKDAgcm93cykKKwor RFJPUCBUQUJMRSB0OworU0VUIFNFU1NJT04gZW5hYmxlX3NlcXNjYW4gPSBPTjsKK1NFVCBT RVNTSU9OIGVuYWJsZV9iaXRtYXBzY2FuID0gT047CistLSAtLSAtLSAtLSAtLSAtLSAtLSAt LSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAt LQorLS0gVGVzdHMgdG8gZW5zdXJlIHRoYXQgSE9UIHVwZGF0ZXMgYXJlIG5vdCBwZXJmb3Jt ZWQgd2hlbiBtdWx0aXBsZSBpbmRleGVkCistLSBhdHRyaWJ1dGVzIGFyZSB1cGRhdGVkLgor Q1JFQVRFIFRBQkxFIHQoYSBJTlQsIGIgSU5UKSBXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQg PSBvZmYsIGZpbGxmYWN0b3IgPSA3MCk7CitDUkVBVEUgSU5ERVggdF9pZHhfYSBPTiB0KGEp OworQ1JFQVRFIElOREVYIHRfaWR4X2IgT04gdChhYnMoYikpOworSU5TRVJUIElOVE8gdCBW QUxVRVMgKDEsIC0xKTsKKy0tIEJvdGggYXJlIHVwZGF0ZWQsIHRoZSBzZWNvbmQgaXMgYW4g ZXhwcmVzc2lvbiBpbmRleCB3aXRoIGFuIHVuY2hhbmdlZAorLS0gaW5kZXggdmFsdWUuICBU aGUgY2hhbmdlIHRvIHRoZSBpbmRleCBvbiBhIHNob3VsZCBwcmV2ZW50IEhPVCB1cGRhdGVz LgorVVBEQVRFIHQgU0VUIGEgPSAyLCBiID0gMSBXSEVSRSBhID0gMTsKK1NFTEVDVCAqIEZS T00gY2hlY2tfaG90X3VwZGF0ZXMoMCk7CisgdGFibGVfbmFtZSB8IHRvdGFsX3VwZGF0ZXMg fCBob3RfdXBkYXRlcyB8IGhvdF91cGRhdGVfcGVyY2VudGFnZSB8IG1hdGNoZXNfZXhwZWN0 ZWQgfCBoYXNfaW5kZXhlcyB8IGluZGV4X2NvdW50IHwgZmlsbGZhY3RvciAKKy0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLQorIHQgICAgICAgICAgfCAgICAgICAgICAgICAxIHwgICAgICAgICAgIDAg fCAgICAgICAgICAgICAgICAgIDAuMDAgfCB0ICAgICAgICAgICAgICAgIHwgdCAgICAgICAg ICAgfCAgICAgICAgICAgMiB8ICAgICAgICAgNzAKKygxIHJvdykKKworRFJPUCBUQUJMRSB0 OworLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0g LS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0KKy0tIFRlc3RzIHRvIGNoZWNrIHRoZSBleHBy ZXNzaW9uX2NoZWNrcyByZWxvcHRpb24gYmVoYXZpb3IuCistLQorQ1JFQVRFIFRBQkxFIHQo YSBJTlQsIGIgSU5UKSBXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBvZmYsIGZpbGxmYWN0 b3IgPSA3MCk7CitDUkVBVEUgSU5ERVggdF9pZHhfYSBPTiB0KGFicyhhKSkgV0hFUkUgYWJz KGEpID4gMTA7CitDUkVBVEUgSU5ERVggdF9pZHhfYiBPTiB0KGFicyhiKSk7CitJTlNFUlQg SU5UTyB0IFZBTFVFUyAoLTEsIC0xKSwgKC0yLCAtMiksICgtMywgLTMpLCAoLTQsIC00KTsK K1NFVCBTRVNTSU9OIGVuYWJsZV9zZXFzY2FuID0gT0ZGOworU0VUIFNFU1NJT04gZW5hYmxl X2JpdG1hcHNjYW4gPSBPRkY7CistLSBEaXNhYmxlIGV4cHJlc3Npb24gY2hlY2tzIG9uIGlu ZGV4ZXMgYW5kIHBhcnRpYWwgaW5kZXggcHJlZGljYXRlcy4KK0FMVEVSIFRBQkxFIHQgU0VU IChleHByZXNzaW9uX2NoZWNrcyA9IGZhbHNlKTsKKy0tIEJlZm9yZSBhbmQgYWZ0ZXIgdmFs dWVzIG9mIGEgYXJlIG91dHNpZGUgdGhlIHByZWRpY2F0ZSBvZiB0aGUgaW5kZXggYW5kCist LSB0aGUgaW5kZXhlZCB2YWx1ZSBvZiBiIGhhc24ndCBjaGFuZ2VkIGhvd2V2ZXIgd2UndmUg ZGlzYWJsZWQgZXhwcmVzc2lvbgorLS0gY2hlY2tzIHNvIHRoaXMgc2hvdWxkIG5vdCBiZSBh IEhPVCB1cGRhdGUuCistLSAoLTEsIC0xKSAtPiAoLTUsIC0xKQorVVBEQVRFIHQgU0VUIGEg PSAtNSwgYiA9IC0xIFdIRVJFIGEgPSAtMTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3Vw ZGF0ZXMoMCk7CisgdGFibGVfbmFtZSB8IHRvdGFsX3VwZGF0ZXMgfCBob3RfdXBkYXRlcyB8 IGhvdF91cGRhdGVfcGVyY2VudGFnZSB8IG1hdGNoZXNfZXhwZWN0ZWQgfCBoYXNfaW5kZXhl cyB8IGluZGV4X2NvdW50IHwgZmlsbGZhY3RvciAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLQorIHQg ICAgICAgICAgfCAgICAgICAgICAgICAxIHwgICAgICAgICAgIDAgfCAgICAgICAgICAgICAg ICAgIDAuMDAgfCB0ICAgICAgICAgICAgICAgIHwgdCAgICAgICAgICAgfCAgICAgICAgICAg MiB8ICAgICAgICAgNzAKKygxIHJvdykKKworLS0gRW5hYmxlIGV4cHJlc3Npb24gY2hlY2tz IG9uIGluZGV4ZXMsIGJ1dCBub3Qgb24gcHJlZGljYXRlcyB5ZXQuCitBTFRFUiBUQUJMRSB0 IFNFVCAoZXhwcmVzc2lvbl9jaGVja3MgPSB0cnVlKTsKKy0tIFRoZSBpbmRleGVkIHZhbHVl IG9mIGIgaGFzbid0IGNoYW5nZWQsIHRoaXMgc2hvdWxkIGJlIGEgSE9UIHVwZGF0ZS4KKy0t ICgtNSwgLTEpIC0+ICgtNSwgMSkKK1VQREFURSB0IFNFVCBiID0gMSBXSEVSRSBhID0gLTU7 CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDEpOworIHRhYmxlX25hbWUgfCB0 b3RhbF91cGRhdGVzIHwgaG90X3VwZGF0ZXMgfCBob3RfdXBkYXRlX3BlcmNlbnRhZ2UgfCBt YXRjaGVzX2V4cGVjdGVkIHwgaGFzX2luZGV4ZXMgfCBpbmRleF9jb3VudCB8IGZpbGxmYWN0 b3IgCistLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0KKyB0ICAgICAgICAgIHwgICAgICAgICAgICAgMiB8 ICAgICAgICAgICAxIHwgICAgICAgICAgICAgICAgIDUwLjAwIHwgdCAgICAgICAgICAgICAg ICB8IHQgICAgICAgICAgIHwgICAgICAgICAgIDIgfCAgICAgICAgIDcwCisoMSByb3cpCisK Ky0tIE5vdyB0aGF0IHdlJ3JlIG5vdCBjaGVja2luZyB0aGUgcHJlZGljYXRlIG9mIHRoZSBw YXJ0aWFsIGluZGV4LCB0aGlzCistLSB1cGRhdGUgb2YgYSBmcm9tIC01IHRvIDUgc2hvdWxk IGJlIEhPVCBiZWNhdXNlIHdlIHNob3VsZCBpZ25vcmUgdGhlCistLSBwcmVkaWNhdGUgYW5k IGNoZWNrIHRoZSBleHByZXNzaW9uIGFuZCBmaW5kIGl0IHVuY2hhbmdlZC4KKy0tICgtNSwg MSkgLT4gKDUsIDEpCitVUERBVEUgdCBTRVQgYSA9IDUgV0hFUkUgYSA9IC01OworU0VMRUNU ICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygyKTsKKyB0YWJsZV9uYW1lIHwgdG90YWxfdXBk YXRlcyB8IGhvdF91cGRhdGVzIHwgaG90X3VwZGF0ZV9wZXJjZW50YWdlIHwgbWF0Y2hlc19l eHBlY3RlZCB8IGhhc19pbmRleGVzIHwgaW5kZXhfY291bnQgfCBmaWxsZmFjdG9yIAorLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tCisgdCAgICAgICAgICB8ICAgICAgICAgICAgIDMgfCAgICAgICAg ICAgMiB8ICAgICAgICAgICAgICAgICA2Ni42NyB8IHQgICAgICAgICAgICAgICAgfCB0ICAg ICAgICAgICB8ICAgICAgICAgICAyIHwgICAgICAgICA3MAorKDEgcm93KQorCistLSBUaGlz IHVwZGF0ZSBtZWV0cyB0aGUgY3JpdGVyYSBmb3IgdGhlIHBhcnRpYWwgaW5kZXggYW5kIHNo b3VsZCBub3QKKy0tIGJlIEhPVC4gIExldCdzIG1ha2Ugc3VyZSBvZiB0aGF0IGFuZCBjaGVj ayB0aGUgaW5kZXggYXMgd2VsbC4KKy0tICgtNCwgLTQpIC0+ICgtMTEsIC00KQorVVBEQVRF IHQgU0VUIGEgPSAtMTEgV0hFUkUgYSA9IC00OworU0VMRUNUICogRlJPTSBjaGVja19ob3Rf dXBkYXRlcygyKTsKKyB0YWJsZV9uYW1lIHwgdG90YWxfdXBkYXRlcyB8IGhvdF91cGRhdGVz IHwgaG90X3VwZGF0ZV9wZXJjZW50YWdlIHwgbWF0Y2hlc19leHBlY3RlZCB8IGhhc19pbmRl eGVzIHwgaW5kZXhfY291bnQgfCBmaWxsZmFjdG9yIAorLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tCisg dCAgICAgICAgICB8ICAgICAgICAgICAgIDQgfCAgICAgICAgICAgMiB8ICAgICAgICAgICAg ICAgICA1MC4wMCB8IHQgICAgICAgICAgICAgICAgfCB0ICAgICAgICAgICB8ICAgICAgICAg ICAyIHwgICAgICAgICA3MAorKDEgcm93KQorCitFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVD VCAqIEZST00gdCBXSEVSRSBhYnMoYSkgPiAxMDsKKyAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBTY2Fu IHVzaW5nIHRfaWR4X2Egb24gdAorKDEgcm93KQorCitTRUxFQ1QgKiBGUk9NIHQgV0hFUkUg YWJzKGEpID4gMTA7CisgIGEgIHwgYiAgCistLS0tLSstLS0tCisgLTExIHwgLTQKKygxIHJv dykKKworLS0gKC0xMSwgLTQpIC0+ICgxMSwgLTQpCitVUERBVEUgdCBTRVQgYSA9IDExIFdI RVJFIGEgPSAtMTE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDMpOworIHRh YmxlX25hbWUgfCB0b3RhbF91cGRhdGVzIHwgaG90X3VwZGF0ZXMgfCBob3RfdXBkYXRlX3Bl cmNlbnRhZ2UgfCBtYXRjaGVzX2V4cGVjdGVkIHwgaGFzX2luZGV4ZXMgfCBpbmRleF9jb3Vu dCB8IGZpbGxmYWN0b3IgCistLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0KKyB0ICAgICAgICAgIHwgICAg ICAgICAgICAgNSB8ICAgICAgICAgICAzIHwgICAgICAgICAgICAgICAgIDYwLjAwIHwgdCAg ICAgICAgICAgICAgICB8IHQgICAgICAgICAgIHwgICAgICAgICAgIDIgfCAgICAgICAgIDcw CisoMSByb3cpCisKK0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUICogRlJPTSB0IFdIRVJF IGFicyhhKSA+IDEwOworICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IFNjYW4gdXNpbmcgdF9pZHhfYSBv biB0CisoMSByb3cpCisKK1NFTEVDVCAqIEZST00gdCBXSEVSRSBhYnMoYSkgPiAxMDsKKyBh ICB8IGIgIAorLS0tLSstLS0tCisgMTEgfCAtNAorKDEgcm93KQorCistLSAoMTEsIC00KSAt PiAoLTQsIC00KQorVVBEQVRFIHQgU0VUIGEgPSAtNCBXSEVSRSBhID0gMTE7CitTRUxFQ1Qg KiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDMpOworIHRhYmxlX25hbWUgfCB0b3RhbF91cGRh dGVzIHwgaG90X3VwZGF0ZXMgfCBob3RfdXBkYXRlX3BlcmNlbnRhZ2UgfCBtYXRjaGVzX2V4 cGVjdGVkIHwgaGFzX2luZGV4ZXMgfCBpbmRleF9jb3VudCB8IGZpbGxmYWN0b3IgCistLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0KKyB0ICAgICAgICAgIHwgICAgICAgICAgICAgNiB8ICAgICAgICAg ICAzIHwgICAgICAgICAgICAgICAgIDUwLjAwIHwgdCAgICAgICAgICAgICAgICB8IHQgICAg ICAgICAgIHwgICAgICAgICAgIDIgfCAgICAgICAgIDcwCisoMSByb3cpCisKK0VYUExBSU4g KENPU1RTIE9GRikgU0VMRUNUICogRlJPTSB0IFdIRVJFIGFicyhhKSA+IDEwOworICAgICAg ICAgIFFVRVJZIFBMQU4gICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorIEluZGV4IFNjYW4gdXNpbmcgdF9pZHhfYSBvbiB0CisoMSByb3cpCisKK1NFTEVD VCAqIEZST00gdCBXSEVSRSBhYnMoYSkgPiAxMDsKKyBhIHwgYiAKKy0tLSstLS0KKygwIHJv d3MpCisKKy0tIFRoaXMgdXBkYXRlIG9mIGEgZnJvbSA1IHRvIC0xIGlzIEhPVCBkZXNwaXRl IHRoYXQgYXR0cmlidXRlCistLSBiZWluZyBpbmRleGVkIGJlY2F1c2UgdGhlIGJlZm9yZSBh bmQgYWZ0ZXIgdmFsdWVzIGZvciB0aGUKKy0tIHBhcnRpYWwgaW5kZXggcHJlZGljYXRlIGFy ZSBvdXRzaWRlIHRoZSBpbmRleCBkZWZpbml0aW9uLgorLS0gKDUsIDEpIC0+ICgtMSwgMSkK K1VQREFURSB0IFNFVCBhID0gLTEgV0hFUkUgYSA9IDU7CitTRUxFQ1QgKiBGUk9NIGNoZWNr X2hvdF91cGRhdGVzKDQpOworIHRhYmxlX25hbWUgfCB0b3RhbF91cGRhdGVzIHwgaG90X3Vw ZGF0ZXMgfCBob3RfdXBkYXRlX3BlcmNlbnRhZ2UgfCBtYXRjaGVzX2V4cGVjdGVkIHwgaGFz X2luZGV4ZXMgfCBpbmRleF9jb3VudCB8IGZpbGxmYWN0b3IgCistLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0KKyB0ICAgICAgICAgIHwgICAgICAgICAgICAgNyB8ICAgICAgICAgICA0IHwgICAgICAg ICAgICAgICAgIDU3LjE0IHwgdCAgICAgICAgICAgICAgICB8IHQgICAgICAgICAgIHwgICAg ICAgICAgIDIgfCAgICAgICAgIDcwCisoMSByb3cpCisKKy0tIFRoaXMgdXBkYXRlIG9mIGEg ZnJvbSAtMiB0byAtMSB3aXRoIHByZWRpY2F0ZSBjaGVja3MgZW5hYmxlZCBzaG91bGQgYmUK Ky0tIEhPVCBiZWNhdXNlIHRoZSBiZWZvcmUvYWZ0ZXIgdmFsdWVzIG9mIGEgYXJlIGJvdGgg b3V0c2lkZSB0aGUgcHJlZGljYXRlCistLSBvZiB0aGUgcGFydGlhbCBpbmRleC4KKy0tICgt MSwgMSkgLT4gKC0yLCAxKQorVVBEQVRFIHQgU0VUIGEgPSAtMiBXSEVSRSBhID0gLTE7CitT RUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDUpOworIHRhYmxlX25hbWUgfCB0b3Rh bF91cGRhdGVzIHwgaG90X3VwZGF0ZXMgfCBob3RfdXBkYXRlX3BlcmNlbnRhZ2UgfCBtYXRj aGVzX2V4cGVjdGVkIHwgaGFzX2luZGV4ZXMgfCBpbmRleF9jb3VudCB8IGZpbGxmYWN0b3Ig CistLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0KKyB0ICAgICAgICAgIHwgICAgICAgICAgICAgOCB8ICAg ICAgICAgICA1IHwgICAgICAgICAgICAgICAgIDYyLjUwIHwgdCAgICAgICAgICAgICAgICB8 IHQgICAgICAgICAgIHwgICAgICAgICAgIDIgfCAgICAgICAgIDcwCisoMSByb3cpCisKKy0t IFRoZSBpbmRleGVkIHZhbHVlIGZvciBiIGlzbid0IGNoYW5naW5nLCB0aGlzIHNob3VsZCBi ZSBIT1QuCistLSAoLTIsIC0yKSAtPiAoLTIsIDIpCitVUERBVEUgdCBTRVQgYiA9IDIgV0hF UkUgYiA9IC0yOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcyg2KTsKKyB0YWJs ZV9uYW1lIHwgdG90YWxfdXBkYXRlcyB8IGhvdF91cGRhdGVzIHwgaG90X3VwZGF0ZV9wZXJj ZW50YWdlIHwgbWF0Y2hlc19leHBlY3RlZCB8IGhhc19pbmRleGVzIHwgaW5kZXhfY291bnQg fCBmaWxsZmFjdG9yIAorLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tCisgdCAgICAgICAgICB8ICAgICAg ICAgICAgIDkgfCAgICAgICAgICAgNiB8ICAgICAgICAgICAgICAgICA2Ni42NyB8IHQgICAg ICAgICAgICAgICAgfCB0ICAgICAgICAgICB8ICAgICAgICAgICAyIHwgICAgICAgICA3MAor KDEgcm93KQorCitFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCBhYnMoYikgRlJPTSB0Owor ICAgIFFVRVJZIFBMQU4gICAgCistLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiB0 CisgICBEaXNhYmxlZDogdHJ1ZQorKDIgcm93cykKKworU0VMRUNUIGFicyhiKSBGUk9NIHQ7 CisgYWJzIAorLS0tLS0KKyAgIDMKKyAgIDQKKyAgIDEKKyAgIDIKKyg0IHJvd3MpCisKKy0t IEJlZm9yZSBhbmQgYWZ0ZXIgdmFsdWVzIGZvciBhIGFyZSBvdXRzaWRlIHRoZSBwcmVkaWNh dGUgb2YgdGhlIGluZGV4LAorLS0gYW5kIGJlY2F1c2Ugd2UncmUgY2hlY2tpbmcgdGhpcyBz aG91bGQgYmUgSE9ULgorLS0gKC0yLCAxKSAtPiAoNSwgMSkKKy0tICgtMiwgLTIpIC0+ICg1 LCAtMikKK1VQREFURSB0IFNFVCBhID0gNSBXSEVSRSBhID0gLTI7CitTRUxFQ1QgKiBGUk9N IGNoZWNrX2hvdF91cGRhdGVzKDgpOworIHRhYmxlX25hbWUgfCB0b3RhbF91cGRhdGVzIHwg aG90X3VwZGF0ZXMgfCBob3RfdXBkYXRlX3BlcmNlbnRhZ2UgfCBtYXRjaGVzX2V4cGVjdGVk IHwgaGFzX2luZGV4ZXMgfCBpbmRleF9jb3VudCB8IGZpbGxmYWN0b3IgCistLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0KKyB0ICAgICAgICAgIHwgICAgICAgICAgICAxMSB8ICAgICAgICAgICA4IHwg ICAgICAgICAgICAgICAgIDcyLjczIHwgdCAgICAgICAgICAgICAgICB8IHQgICAgICAgICAg IHwgICAgICAgICAgIDIgfCAgICAgICAgIDcwCisoMSByb3cpCisKK0VYUExBSU4gKENPU1RT IE9GRikgU0VMRUNUICogRlJPTSB0IFdIRVJFIGFicyhhKSA+IDEwOworICAgICAgICAgIFFV RVJZIFBMQU4gICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IEluZGV4IFNjYW4gdXNpbmcgdF9pZHhfYSBvbiB0CisoMSByb3cpCisKK1NFTEVDVCAqIEZS T00gdCBXSEVSRSBhYnMoYSkgPiAxMDsKKyBhIHwgYiAKKy0tLSstLS0KKygwIHJvd3MpCisK K1NFTEVDVCAqIEZST00gdDsKKyBhICB8IGIgIAorLS0tLSstLS0tCisgLTMgfCAtMworIC00 IHwgLTQKKyAgNSB8ICAxCisgIDUgfCAgMgorKDQgcm93cykKKworRFJPUCBUQUJMRSB0Owor U0VUIFNFU1NJT04gZW5hYmxlX3NlcXNjYW4gPSBPTjsKK1NFVCBTRVNTSU9OIGVuYWJsZV9i aXRtYXBzY2FuID0gT047CistLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAt LSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLQorLS0gVGhlIHRlc3Rz IGhlcmUgZXhhbWluZXMgdGhlIGJlaGF2aW9yIG9mIEhPVCB1cGRhdGVzIHdoZW4gdGhlIHJl bGF0aW9uCistLSBoYXMgYSBKU09OQiBjb2x1bW4gd2l0aCBhbiBpbmRleCBvbiB0aGUgZmll bGQgJ2EnIGFuZCB0aGUgcGFydGlhbCBpbmRleAorLS0gZXhwcmVzc2lvbiBvbiBhIGRpZmZl cmVudCBKU09OQiBmaWVsZCAnYicuCitDUkVBVEUgVEFCTEUgdChkb2NzIEpTT05CKSBXSVRI IChhdXRvdmFjdXVtX2VuYWJsZWQgPSBvZmYsIGZpbGxmYWN0b3IgPSA3MCk7CitDUkVBVEUg SU5ERVggdF9kb2NzX2lkeCBPTiB0KChkb2NzLT4nYScpKSBXSEVSRSAoZG9jcy0+J2InKTo6 aW50ZWdlciA9IDE7CitJTlNFUlQgSU5UTyB0IFZBTFVFUyAoJ3siYSI6IDEsICJiIjogMX0n KTsKK0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUICogRlJPTSB0OworICBRVUVSWSBQTEFO ICAgCistLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiB0CisoMSByb3cpCisKK1NFTEVD VCAqIEZST00gdDsKKyAgICAgICBkb2NzICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tCisg eyJhIjogMSwgImIiOiAxfQorKDEgcm93KQorCitTRVQgU0VTU0lPTiBlbmFibGVfc2Vxc2Nh biA9IE9GRjsKK1NFVCBTRVNTSU9OIGVuYWJsZV9iaXRtYXBzY2FuID0gT0ZGOworRVhQTEFJ TiAoQ09TVFMgT0ZGKSBTRUxFQ1QgKiBGUk9NIHQgV0hFUkUgKGRvY3MtPidiJyk6OmludGVn ZXIgPSAxOworICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IFNjYW4gdXNpbmcgdF9kb2NzX2lk eCBvbiB0CisoMSByb3cpCisKK1NFTEVDVCAqIEZST00gdCBXSEVSRSAoZG9jcy0+J2InKTo6 aW50ZWdlciA9IDE7CisgICAgICAgZG9jcyAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLQor IHsiYSI6IDEsICJiIjogMX0KKygxIHJvdykKKworU0VMRUNUICogRlJPTSBjaGVja19ob3Rf dXBkYXRlcygwKTsKKyB0YWJsZV9uYW1lIHwgdG90YWxfdXBkYXRlcyB8IGhvdF91cGRhdGVz IHwgaG90X3VwZGF0ZV9wZXJjZW50YWdlIHwgbWF0Y2hlc19leHBlY3RlZCB8IGhhc19pbmRl eGVzIHwgaW5kZXhfY291bnQgfCBmaWxsZmFjdG9yIAorLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tCisg dCAgICAgICAgICB8ICAgICAgICAgICAgIDAgfCAgICAgICAgICAgMCB8ICAgICAgICAgICAg ICAgICAgICAgMCB8IHQgICAgICAgICAgICAgICAgfCB0ICAgICAgICAgICB8ICAgICAgICAg ICAxIHwgICAgICAgICA3MAorKDEgcm93KQorCitVUERBVEUgdCBTRVQgZG9jcz0neyJhIjog MSwgImIiOiAwfSc7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDApOworIHRh YmxlX25hbWUgfCB0b3RhbF91cGRhdGVzIHwgaG90X3VwZGF0ZXMgfCBob3RfdXBkYXRlX3Bl cmNlbnRhZ2UgfCBtYXRjaGVzX2V4cGVjdGVkIHwgaGFzX2luZGV4ZXMgfCBpbmRleF9jb3Vu dCB8IGZpbGxmYWN0b3IgCistLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0KKyB0ICAgICAgICAgIHwgICAg ICAgICAgICAgMSB8ICAgICAgICAgICAwIHwgICAgICAgICAgICAgICAgICAwLjAwIHwgdCAg ICAgICAgICAgICAgICB8IHQgICAgICAgICAgIHwgICAgICAgICAgIDEgfCAgICAgICAgIDcw CisoMSByb3cpCisKK1NFTEVDVCAqIEZST00gdCBXSEVSRSAoZG9jcy0+J2InKTo6aW50ZWdl ciA9IDE7CisgZG9jcyAKKy0tLS0tLQorKDAgcm93cykKKworU0VUIFNFU1NJT04gZW5hYmxl X3NlcXNjYW4gPSBPTjsKK1NFVCBTRVNTSU9OIGVuYWJsZV9iaXRtYXBzY2FuID0gT047CitE Uk9QIFRBQkxFIHQ7CistLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAt LSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLQorLS0gVGVzdHMgZm9yIG11 bHRpLWNvbHVtbiBpbmRleGVzCistLQorQ1JFQVRFIFRBQkxFIHQoaWQgSU5ULCBkb2NzIEpT T05CKSBXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBvZmYsIGZpbGxmYWN0b3IgPSA3MCk7 CitDUkVBVEUgSU5ERVggdF9kb2NzX2lkeCBPTiB0KGlkLCAoZG9jcy0+J2EnKSk7CitJTlNF UlQgSU5UTyB0IFZBTFVFUyAoMSwgJ3siYSI6IDEsICJiIjogMX0nKTsKK1NFVCBTRVNTSU9O IGVuYWJsZV9zZXFzY2FuID0gT0ZGOworU0VUIFNFU1NJT04gZW5hYmxlX2JpdG1hcHNjYW4g PSBPRkY7CitFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCAqIEZST00gdCBXSEVSRSBpZCA+ IDAgQU5EIChkb2NzLT4nYScpOjppbnRlZ2VyID4gMDsKKyAgICAgICAgICAgICAgICAgICBR VUVSWSBQTEFOICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyB0X2RvY3NfaWR4 IG9uIHQKKyAgIEluZGV4IENvbmQ6IChpZCA+IDApCisgICBGaWx0ZXI6ICgoKGRvY3MgLT4g J2EnOjp0ZXh0KSk6OmludGVnZXIgPiAwKQorKDMgcm93cykKKworU0VMRUNUICogRlJPTSB0 IFdIRVJFIGlkID4gMCBBTkQgKGRvY3MtPidhJyk6OmludGVnZXIgPiAwOworIGlkIHwgICAg ICAgZG9jcyAgICAgICAKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tCisgIDEgfCB7ImEiOiAx LCAiYiI6IDF9CisoMSByb3cpCisKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMo MCk7CisgdGFibGVfbmFtZSB8IHRvdGFsX3VwZGF0ZXMgfCBob3RfdXBkYXRlcyB8IGhvdF91 cGRhdGVfcGVyY2VudGFnZSB8IG1hdGNoZXNfZXhwZWN0ZWQgfCBoYXNfaW5kZXhlcyB8IGlu ZGV4X2NvdW50IHwgZmlsbGZhY3RvciAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLQorIHQgICAgICAg ICAgfCAgICAgICAgICAgICAwIHwgICAgICAgICAgIDAgfCAgICAgICAgICAgICAgICAgICAg IDAgfCB0ICAgICAgICAgICAgICAgIHwgdCAgICAgICAgICAgfCAgICAgICAgICAgMSB8ICAg ICAgICAgNzAKKygxIHJvdykKKworLS0gQ2hhbmdpbmcgdGhlIGlkIGF0dHJpYnV0ZSB3aGlj aCBpcyBhbiBpbmRleGVkIGF0dHJpYnV0ZSBzaG91bGQKKy0tIHByZXZlbnQgSE9UIHVwZGF0 ZXMuCitVUERBVEUgdCBTRVQgaWQgPSAyOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBk YXRlcygwKTsKKyB0YWJsZV9uYW1lIHwgdG90YWxfdXBkYXRlcyB8IGhvdF91cGRhdGVzIHwg aG90X3VwZGF0ZV9wZXJjZW50YWdlIHwgbWF0Y2hlc19leHBlY3RlZCB8IGhhc19pbmRleGVz IHwgaW5kZXhfY291bnQgfCBmaWxsZmFjdG9yIAorLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tCisgdCAg ICAgICAgICB8ICAgICAgICAgICAgIDEgfCAgICAgICAgICAgMCB8ICAgICAgICAgICAgICAg ICAgMC4wMCB8IHQgICAgICAgICAgICAgICAgfCB0ICAgICAgICAgICB8ICAgICAgICAgICAx IHwgICAgICAgICA3MAorKDEgcm93KQorCitTRUxFQ1QgKiBGUk9NIHQgV0hFUkUgaWQgPiAw IEFORCAoZG9jcy0+J2EnKTo6aW50ZWdlciA+IDA7CisgaWQgfCAgICAgICBkb2NzICAgICAg IAorLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0KKyAgMiB8IHsiYSI6IDEsICJiIjogMX0KKygx IHJvdykKKworLS0gQ2hhbmdpbmcgdGhlIGRvY3MtPidhJyBmaWVsZCBpbiB0aGUgaW5kZXhl ZCBhdHRyaWJ1dGUgJ2RvY3MnCistLSBzaG91bGQgcHJldmVudCBIT1QgdXBkYXRlcy4KK1VQ REFURSB0IFNFVCBkb2NzPSd7ImEiOiAtMiwgImIiOiAxfSc7CitTRUxFQ1QgKiBGUk9NIGNo ZWNrX2hvdF91cGRhdGVzKDApOworIHRhYmxlX25hbWUgfCB0b3RhbF91cGRhdGVzIHwgaG90 X3VwZGF0ZXMgfCBob3RfdXBkYXRlX3BlcmNlbnRhZ2UgfCBtYXRjaGVzX2V4cGVjdGVkIHwg aGFzX2luZGV4ZXMgfCBpbmRleF9jb3VudCB8IGZpbGxmYWN0b3IgCistLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0KKyB0ICAgICAgICAgIHwgICAgICAgICAgICAgMiB8ICAgICAgICAgICAwIHwgICAg ICAgICAgICAgICAgICAwLjAwIHwgdCAgICAgICAgICAgICAgICB8IHQgICAgICAgICAgIHwg ICAgICAgICAgIDEgfCAgICAgICAgIDcwCisoMSByb3cpCisKK1NFTEVDVCAqIEZST00gdCBX SEVSRSBpZCA+IDAgQU5EIChkb2NzLT4nYScpOjppbnRlZ2VyIDwgMDsKKyBpZCB8ICAgICAg IGRvY3MgICAgICAgIAorLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tCisgIDIgfCB7ImEiOiAt MiwgImIiOiAxfQorKDEgcm93KQorCistLSBMZWF2aW5nIHRoZSBkb2NzLT4nYScgYXR0cmli dXRlIHVuY2hhbmdlZCBtZWFucyB0aGF0IHRoZSBleHByZXNzaW9uCistLSBpcyB1bmNoYW5n ZWQgYW5kIGJlY2F1c2UgdGhlICdpZCcgYXR0cmlidXRlIGlzbid0IGluIHRoZSBtb2RpZmll ZAorLS0gc2V0IHRoZSBpbmRleGVkIHR1cGxlIGlzIHVuY2hhbmdlZCwgdGhpcyBjYW4gZ28g SE9ULgorVVBEQVRFIHQgU0VUIGRvY3M9J3siYSI6IC0yLCAiYiI6IDJ9JzsKK1NFTEVDVCAq IEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMSk7CisgdGFibGVfbmFtZSB8IHRvdGFsX3VwZGF0 ZXMgfCBob3RfdXBkYXRlcyB8IGhvdF91cGRhdGVfcGVyY2VudGFnZSB8IG1hdGNoZXNfZXhw ZWN0ZWQgfCBoYXNfaW5kZXhlcyB8IGluZGV4X2NvdW50IHwgZmlsbGZhY3RvciAKKy0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLQorIHQgICAgICAgICAgfCAgICAgICAgICAgICAzIHwgICAgICAgICAg IDEgfCAgICAgICAgICAgICAgICAgMzMuMzMgfCB0ICAgICAgICAgICAgICAgIHwgdCAgICAg ICAgICAgfCAgICAgICAgICAgMSB8ICAgICAgICAgNzAKKygxIHJvdykKKworU0VMRUNUICog RlJPTSB0IFdIRVJFIGlkID4gMCBBTkQgKGRvY3MtPidhJyk6OmludGVnZXIgPCAwOworIGlk IHwgICAgICAgZG9jcyAgICAgICAgCistLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMiB8 IHsiYSI6IC0yLCAiYiI6IDJ9CisoMSByb3cpCisKKy0tIEhlcmUgd2UgY2hhbmdlIHRoZSAn aWQnIGF0dHJpYnV0ZSBhbmQgdGhlICdkb2NzJyBhdHRyaWJ1dGUgc2V0dGluZworLS0gdGhl IGV4cHJlc3Npb24gZG9jcy0+J2EnIHRvIGEgbmV3IHZhbHVlLCB0aGlzIGNhbm5vdCBiZSBh IEhPVCB1cGRhdGUuCitVUERBVEUgdCBTRVQgaWQgPSAzLCBkb2NzPSd7ImEiOiAzLCAiYiI6 IDN9JzsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMSk7CisgdGFibGVfbmFt ZSB8IHRvdGFsX3VwZGF0ZXMgfCBob3RfdXBkYXRlcyB8IGhvdF91cGRhdGVfcGVyY2VudGFn ZSB8IG1hdGNoZXNfZXhwZWN0ZWQgfCBoYXNfaW5kZXhlcyB8IGluZGV4X2NvdW50IHwgZmls bGZhY3RvciAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLQorIHQgICAgICAgICAgfCAgICAgICAgICAg ICA0IHwgICAgICAgICAgIDEgfCAgICAgICAgICAgICAgICAgMjUuMDAgfCB0ICAgICAgICAg ICAgICAgIHwgdCAgICAgICAgICAgfCAgICAgICAgICAgMSB8ICAgICAgICAgNzAKKygxIHJv dykKKworU0VMRUNUICogRlJPTSB0IFdIRVJFIGlkID4gMCBBTkQgKGRvY3MtPidhJyk6Omlu dGVnZXIgPiAwOworIGlkIHwgICAgICAgZG9jcyAgICAgICAKKy0tLS0rLS0tLS0tLS0tLS0t LS0tLS0tCisgIDMgfCB7ImEiOiAzLCAiYiI6IDN9CisoMSByb3cpCisKK1NFVCBTRVNTSU9O IGVuYWJsZV9zZXFzY2FuID0gT047CitTRVQgU0VTU0lPTiBlbmFibGVfYml0bWFwc2NhbiA9 IE9OOworRFJPUCBUQUJMRSB0OworLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0g LS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0KKy0tIFRoaXMg dGFibGUgaGFzIGEgc2luZ2xlIGNvbHVtbiAnZW1haWwnIGFuZCBhIHVuaXF1ZSBjb25zdHJh aW50IG9uIGl0IHRoYXQKKy0tIHNob3VsZCBwcmVjbHVkZSBIT1QgdXBkYXRlcy4KK0NSRUFU RSBUQUJMRSB1c2VycyAoCisgICAgdXNlcl9pZCBzZXJpYWwgcHJpbWFyeSBrZXksCisgICAg bmFtZSBWQVJDSEFSKDI1NSkgTk9UIE5VTEwsCisgICAgZW1haWwgVkFSQ0hBUigyNTUpIE5P VCBOVUxMLAorICAgIEVYQ0xVREUgVVNJTkcgYnRyZWUgKGxvd2VyKGVtYWlsKSBXSVRIID0p CispOworLS0gQWRkIHNvbWUgZGF0YSB0byB0aGUgdGFibGUgYW5kIHRoZW4gdXBkYXRlIGl0 IGluIHdheXMgdGhhdCBzaG91bGQgYW5kIHNob3VsZAorLS0gbm90IGJlIEhPVCB1cGRhdGVz LgorSU5TRVJUIElOVE8gdXNlcnMgKG5hbWUsIGVtYWlsKSBWQUxVRVMKKygndXNlcjEnLCAn dXNlcjFAZXhhbXBsZS5jb20nKSwKKygndXNlcjInLCAndXNlcjJAZXhhbXBsZS5jb20nKSwK KygndGFrZW4nLCAndGFrZW5ARVhBTVBMRS5jb20nKSwKKygneW91JywgJ3lvdUBkb21haW4u Y29tJyksCisoJ3Rha2VuJywgJ3Rha2VuQGRvbWFpbi5jb20nKTsKKy0tIFNob3VsZCBmYWls IGJlY2F1c2Ugb2YgdGhlIHVuaXF1ZSBjb25zdHJhaW50IG9uIHRoZSBlbWFpbCBjb2x1bW4u CitVUERBVEUgdXNlcnMgU0VUIGVtYWlsID0gJ3VzZXIxQGV4YW1wbGUuY29tJyBXSEVSRSBl bWFpbCA9ICd1c2VyMkBleGFtcGxlLmNvbSc7CitFUlJPUjogIGNvbmZsaWN0aW5nIGtleSB2 YWx1ZSB2aW9sYXRlcyBleGNsdXNpb24gY29uc3RyYWludCAidXNlcnNfbG93ZXJfZXhjbCIK K0RFVEFJTDogIEtleSAobG93ZXIoZW1haWw6OnRleHQpKT0odXNlcjFAZXhhbXBsZS5jb20p IGNvbmZsaWN0cyB3aXRoIGV4aXN0aW5nIGtleSAobG93ZXIoZW1haWw6OnRleHQpKT0odXNl cjFAZXhhbXBsZS5jb20pLgorU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygwLCAn dXNlcnMnKTsKKyB0YWJsZV9uYW1lIHwgdG90YWxfdXBkYXRlcyB8IGhvdF91cGRhdGVzIHwg aG90X3VwZGF0ZV9wZXJjZW50YWdlIHwgbWF0Y2hlc19leHBlY3RlZCB8IGhhc19pbmRleGVz IHwgaW5kZXhfY291bnQgfCBmaWxsZmFjdG9yIAorLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tCisgdXNl cnMgICAgICB8ICAgICAgICAgICAgIDEgfCAgICAgICAgICAgMCB8ICAgICAgICAgICAgICAg ICAgMC4wMCB8IHQgICAgICAgICAgICAgICAgfCB0ICAgICAgICAgICB8ICAgICAgICAgICAy IHwgICAgICAgIDEwMAorKDEgcm93KQorCistLSBTaG91bGQgc3VjY2VlZCBiZWNhdXNlIHRo ZSBlbWFpbCBjb2x1bW4gaXMgbm90IGJlaW5nIHVwZGF0ZWQgYW5kIHNob3VsZCBnbyBIT1Qu CitVUERBVEUgdXNlcnMgU0VUIG5hbWUgPSAnZm9vJyBXSEVSRSBlbWFpbCA9ICd1c2VyMUBl eGFtcGxlLmNvbSc7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDEsICd1c2Vy cycpOworIHRhYmxlX25hbWUgfCB0b3RhbF91cGRhdGVzIHwgaG90X3VwZGF0ZXMgfCBob3Rf dXBkYXRlX3BlcmNlbnRhZ2UgfCBtYXRjaGVzX2V4cGVjdGVkIHwgaGFzX2luZGV4ZXMgfCBp bmRleF9jb3VudCB8IGZpbGxmYWN0b3IgCistLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0KKyB1c2VycyAg ICAgIHwgICAgICAgICAgICAgMiB8ICAgICAgICAgICAxIHwgICAgICAgICAgICAgICAgIDUw LjAwIHwgdCAgICAgICAgICAgICAgICB8IHQgICAgICAgICAgIHwgICAgICAgICAgIDIgfCAg ICAgICAgMTAwCisoMSByb3cpCisKKy0tIENyZWF0ZSBhIHBhcnRpYWwgaW5kZXggb24gdGhl IGVtYWlsIGNvbHVtbiwgdXBkYXRlcworQ1JFQVRFIElOREVYIGlkeF91c2Vyc19lbWFpbF9u b19leGFtcGxlIE9OIHVzZXJzIChsb3dlcihlbWFpbCkpIFdIRVJFIGxvd2VyKGVtYWlsKSBM SUtFICclQGV4YW1wbGUuY29tJSc7CistLSBBbiB1cGRhdGUgdGhhdCBjaGFuZ2VzIHRoZSBl bWFpbCBjb2x1bW4gYnV0IG5vdCB0aGUgaW5kZXhlZCBwb3J0aW9uIG9mIGl0IGFuZCBmYWxs cyBvdXRzaWRlIHRoZSBjb25zdHJhaW50LgorLS0gU2hvdWxkbid0IGJlIGEgSE9UIHVwZGF0 ZSBiZWNhdXNlIG9mIHRoZSBleGNsdXNpb24gY29uc3RyYWludC4KK1VQREFURSB1c2VycyBT RVQgZW1haWwgPSAneW91KzJAZG9tYWluLmNvbScgV0hFUkUgbmFtZSA9ICd5b3UnOworU0VM RUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygxLCAndXNlcnMnKTsKKyB0YWJsZV9uYW1l IHwgdG90YWxfdXBkYXRlcyB8IGhvdF91cGRhdGVzIHwgaG90X3VwZGF0ZV9wZXJjZW50YWdl IHwgbWF0Y2hlc19leHBlY3RlZCB8IGhhc19pbmRleGVzIHwgaW5kZXhfY291bnQgfCBmaWxs ZmFjdG9yIAorLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tCisgdXNlcnMgICAgICB8ICAgICAgICAgICAg IDMgfCAgICAgICAgICAgMSB8ICAgICAgICAgICAgICAgICAzMy4zMyB8IHQgICAgICAgICAg ICAgICAgfCB0ICAgICAgICAgICB8ICAgICAgICAgICAzIHwgICAgICAgIDEwMAorKDEgcm93 KQorCistLSBBbiB1cGRhdGUgdGhhdCBjaGFuZ2VzIHRoZSBlbWFpbCBjb2x1bW4gYnV0IG5v dCB0aGUgaW5kZXhlZCBwb3J0aW9uIG9mIGl0IGFuZCBmYWxscyB3aXRoaW4gdGhlIGNvbnN0 cmFpbnQuCistLSBBZ2Fpbiwgc2hvdWxkIGZhaWwgY29uc3RyYWludCBhbmQgZmFpbCB0byBi ZSBhIEhPVCB1cGRhdGUuCitVUERBVEUgdXNlcnMgU0VUIGVtYWlsID0gJ3Rha2VuQGRvbWFp bi5jb20nIFdIRVJFIG5hbWUgPSAneW91JzsKK0VSUk9SOiAgY29uZmxpY3Rpbmcga2V5IHZh bHVlIHZpb2xhdGVzIGV4Y2x1c2lvbiBjb25zdHJhaW50ICJ1c2Vyc19sb3dlcl9leGNsIgor REVUQUlMOiAgS2V5IChsb3dlcihlbWFpbDo6dGV4dCkpPSh0YWtlbkBkb21haW4uY29tKSBj b25mbGljdHMgd2l0aCBleGlzdGluZyBrZXkgKGxvd2VyKGVtYWlsOjp0ZXh0KSk9KHRha2Vu QGRvbWFpbi5jb20pLgorU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygxLCAndXNl cnMnKTsKKyB0YWJsZV9uYW1lIHwgdG90YWxfdXBkYXRlcyB8IGhvdF91cGRhdGVzIHwgaG90 X3VwZGF0ZV9wZXJjZW50YWdlIHwgbWF0Y2hlc19leHBlY3RlZCB8IGhhc19pbmRleGVzIHwg aW5kZXhfY291bnQgfCBmaWxsZmFjdG9yIAorLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tCisgdXNlcnMg ICAgICB8ICAgICAgICAgICAgIDQgfCAgICAgICAgICAgMSB8ICAgICAgICAgICAgICAgICAy NS4wMCB8IHQgICAgICAgICAgICAgICAgfCB0ICAgICAgICAgICB8ICAgICAgICAgICAzIHwg ICAgICAgIDEwMAorKDEgcm93KQorCitEUk9QIFRBQkxFIHVzZXJzOworLS0gLS0gLS0gLS0g LS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0g LS0gLS0gLS0gLS0KKy0tIEFub3RoZXIgdGVzdCBvZiBjb25zdHJhaW50cyBzcG9pbGluZyBI T1QgdXBkYXRlcywgdGhpcyB0aW1lIHdpdGggYSByYW5nZS4KK0NSRUFURSBUQUJMRSBldmVu dHMgKAorICAgIGlkIHNlcmlhbCBwcmltYXJ5IGtleSwKKyAgICBuYW1lIFZBUkNIQVIoMjU1 KSBOT1QgTlVMTCwKKyAgICBldmVudF90aW1lIHRzdHpyYW5nZSwKKyAgICBjb25zdHJhaW50 IG5vX3NjcmVlbmluZ190aW1lX292ZXJsYXAgZXhjbHVkZSB1c2luZyBnaXN0ICgKKyAgICAg ICAgZXZlbnRfdGltZSBXSVRIICYmCisgICAgKQorKTsKKy0tIEFkZCB0d28gbm9uLW92ZXJs YXBwaW5nIGV2ZW50cy4KK0lOU0VSVCBJTlRPIGV2ZW50cyAoaWQsIGV2ZW50X3RpbWUsIG5h bWUpCitWQUxVRVMKKyAgICAoMSwgJ1siMjAyMy0wMS0wMSAxOTowMDowMCIsICIyMDIzLTAx LTAxIDIwOjQ1OjAwIl0nLCAnZXZlbnQxJyksCisgICAgKDIsICdbIjIwMjMtMDEtMDEgMjE6 MDA6MDAiLCAiMjAyMy0wMS0wMSAyMTo0NTowMCJdJywgJ2V2ZW50MicpOworLS0gVXBkYXRl IHRoZSBmaXJzdCBldmVudCB0byBvdmVybGFwIHdpdGggdGhlIHNlY29uZCwgc2hvdWxkIGZh aWwgdGhlIGNvbnN0cmFpbnQgYW5kIG5vdCBiZSBIT1QuCitVUERBVEUgZXZlbnRzIFNFVCBl dmVudF90aW1lID0gJ1siMjAyMy0wMS0wMSAyMDowMDowMCIsICIyMDIzLTAxLTAxIDIxOjQ1 OjAwIl0nIFdIRVJFIGlkID0gMTsKK0VSUk9SOiAgY29uZmxpY3Rpbmcga2V5IHZhbHVlIHZp b2xhdGVzIGV4Y2x1c2lvbiBjb25zdHJhaW50ICJub19zY3JlZW5pbmdfdGltZV9vdmVybGFw IgorREVUQUlMOiAgS2V5IChldmVudF90aW1lKT0oWyJTdW4gSmFuIDAxIDIwOjAwOjAwIDIw MjMgUFNUIiwiU3VuIEphbiAwMSAyMTo0NTowMCAyMDIzIFBTVCJdKSBjb25mbGljdHMgd2l0 aCBleGlzdGluZyBrZXkgKGV2ZW50X3RpbWUpPShbIlN1biBKYW4gMDEgMjE6MDA6MDAgMjAy MyBQU1QiLCJTdW4gSmFuIDAxIDIxOjQ1OjAwIDIwMjMgUFNUIl0pLgorU0VMRUNUICogRlJP TSBjaGVja19ob3RfdXBkYXRlcygwLCAnZXZlbnRzJyk7CisgdGFibGVfbmFtZSB8IHRvdGFs X3VwZGF0ZXMgfCBob3RfdXBkYXRlcyB8IGhvdF91cGRhdGVfcGVyY2VudGFnZSB8IG1hdGNo ZXNfZXhwZWN0ZWQgfCBoYXNfaW5kZXhlcyB8IGluZGV4X2NvdW50IHwgZmlsbGZhY3RvciAK Ky0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLQorIGV2ZW50cyAgICAgfCAgICAgICAgICAgICAxIHwgICAg ICAgICAgIDAgfCAgICAgICAgICAgICAgICAgIDAuMDAgfCB0ICAgICAgICAgICAgICAgIHwg dCAgICAgICAgICAgfCAgICAgICAgICAgMiB8ICAgICAgICAxMDAKKygxIHJvdykKKworLS0g VXBkYXRlIHRoZSBmaXJzdCBldmVudCB0byBub3Qgb3ZlcmxhcCB3aXRoIHRoZSBzZWNvbmQs IGFnYWluIG5vdCBIT1QgZHVlIHRvIHRoZSBjb25zdHJhaW50LgorVVBEQVRFIGV2ZW50cyBT RVQgZXZlbnRfdGltZSA9ICdbIjIwMjMtMDEtMDEgMjI6MDA6MDAiLCAiMjAyMy0wMS0wMSAy Mjo0NTowMCJdJyBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRh dGVzKDAsICdldmVudHMnKTsKKyB0YWJsZV9uYW1lIHwgdG90YWxfdXBkYXRlcyB8IGhvdF91 cGRhdGVzIHwgaG90X3VwZGF0ZV9wZXJjZW50YWdlIHwgbWF0Y2hlc19leHBlY3RlZCB8IGhh c19pbmRleGVzIHwgaW5kZXhfY291bnQgfCBmaWxsZmFjdG9yIAorLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tCisgZXZlbnRzICAgICB8ICAgICAgICAgICAgIDIgfCAgICAgICAgICAgMCB8ICAgICAg ICAgICAgICAgICAgMC4wMCB8IHQgICAgICAgICAgICAgICAgfCB0ICAgICAgICAgICB8ICAg ICAgICAgICAyIHwgICAgICAgIDEwMAorKDEgcm93KQorCistLSBVcGRhdGUgdGhlIGZpcnN0 IGV2ZW50IHRvIG5vdCBvdmVybGFwIHdpdGggdGhlIHNlY29uZCwgdGhpcyB0aW1lIHdlJ3Jl IEhPVCBiZWNhdXNlIHdlIGRvbid0IG92ZXJsYXAgd2l0aCB0aGUgY29uc3RyYWludC4KK1VQ REFURSBldmVudHMgU0VUIG5hbWUgPSAnbmV3IG5hbWUgaGVyZScgV0hFUkUgaWQgPSAxOwor U0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygxLCAnZXZlbnRzJyk7CisgdGFibGVf bmFtZSB8IHRvdGFsX3VwZGF0ZXMgfCBob3RfdXBkYXRlcyB8IGhvdF91cGRhdGVfcGVyY2Vu dGFnZSB8IG1hdGNoZXNfZXhwZWN0ZWQgfCBoYXNfaW5kZXhlcyB8IGluZGV4X2NvdW50IHwg ZmlsbGZhY3RvciAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLQorIGV2ZW50cyAgICAgfCAgICAgICAg ICAgICAzIHwgICAgICAgICAgIDEgfCAgICAgICAgICAgICAgICAgMzMuMzMgfCB0ICAgICAg ICAgICAgICAgIHwgdCAgICAgICAgICAgfCAgICAgICAgICAgMiB8ICAgICAgICAxMDAKKygx IHJvdykKKworRFJPUCBUQUJMRSBldmVudHM7CistLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAt LSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLQor LS0gQSB0ZXN0IHRvIGVuc3VyZSB0aGF0IG9ubHkgbW9kaWZpZWQgc3VtbWFyaXppbmcgaW5k ZXhlcyBhcmUgdXBkYXRlZCwgbm90CistLSBhbGwgb2YgdGhlbS4KK0NSRUFURSBUQUJMRSBl eCAoaWQgU0VSSUFMIHByaW1hcnkga2V5LCBhdHQxIEpTT05CLCBhdHQyIHRleHQsIGF0dDMg dGV4dCwgYXR0NCB0ZXh0KSBXSVRIIChmaWxsZmFjdG9yID0gNjApOworQ1JFQVRFIElOREVY IGV4X2V4cHIxX2lkeCBPTiBleCBVU0lORyBidHJlZSgoYXR0MS0+J2RhdGEnKSk7CitDUkVB VEUgSU5ERVggZXhfc3VtcjFfaWR4IE9OIGV4IFVTSU5HIEJSSU4oYXR0Mik7CitDUkVBVEUg SU5ERVggZXhfZXhwcjJfaWR4IE9OIGV4IFVTSU5HIGJ0cmVlKChhdHQxLT4nYScpKTsKK0NS RUFURSBJTkRFWCBleF9leHByM19pZHggT04gZXggVVNJTkcgYnRyZWUoKGF0dDEtPidiJykp OworQ1JFQVRFIElOREVYIGV4X2V4cHI0X2lkeCBPTiBleCBVU0lORyBidHJlZSgoYXR0MS0+ J2MnKSk7CitDUkVBVEUgSU5ERVggZXhfc3VtcjJfaWR4IE9OIGV4IFVTSU5HIEJSSU4oYXR0 Myk7CitDUkVBVEUgSU5ERVggZXhfc3VtcjNfaWR4IE9OIGV4IFVTSU5HIEJSSU4oYXR0NCk7 CitDUkVBVEUgSU5ERVggZXhfZXhwcjVfaWR4IE9OIGV4IFVTSU5HIGJ0cmVlKChhdHQxLT4n ZCcpKTsKK0lOU0VSVCBJTlRPIGV4IChhdHQxLCBhdHQyKSBWQUxVRVMgKCd7ImRhdGEiOiBb XX0nOjpqc29uLCAnbm90aGluZyBzcGVjaWFsJyk7CitTRUxFQ1QgKiBGUk9NIGV4OworIGlk IHwgICAgIGF0dDEgICAgIHwgICAgICBhdHQyICAgICAgIHwgYXR0MyB8IGF0dDQgCistLS0t Ky0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLSstLS0tLS0KKyAgMSB8 IHsiZGF0YSI6IFtdfSB8IG5vdGhpbmcgc3BlY2lhbCB8ICAgICAgfCAKKygxIHJvdykKKwor LS0gVXBkYXRlIGF0dDIgYW5kIGF0dDQgYm90aCBhcmUgQlJJTi9zdW1tYXJpemluZyBpbmRl eGVzLCB0aGlzIHNob3VsZCBiZSBhIEhPVCB1cGRhdGUgYW5kCistLSBvbmx5IHVwZGF0ZSB0 d28gb2YgdGhlIHRocmVlIHN1bW1hcml6aW5nIGluZGV4ZXMuCitVUERBVEUgZXggU0VUIGF0 dDIgPSAnc3BlY2lhbCBpbmRlZWQnLCBhdHQ0ID0gJ3doYXRldmVyJzsKK1NFTEVDVCAqIEZS T00gY2hlY2tfaG90X3VwZGF0ZXMoMSwgJ2V4Jyk7CisgdGFibGVfbmFtZSB8IHRvdGFsX3Vw ZGF0ZXMgfCBob3RfdXBkYXRlcyB8IGhvdF91cGRhdGVfcGVyY2VudGFnZSB8IG1hdGNoZXNf ZXhwZWN0ZWQgfCBoYXNfaW5kZXhlcyB8IGluZGV4X2NvdW50IHwgZmlsbGZhY3RvciAKKy0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLQorIGV4ICAgICAgICAgfCAgICAgICAgICAgICAxIHwgICAgICAg ICAgIDEgfCAgICAgICAgICAgICAgICAxMDAuMDAgfCB0ICAgICAgICAgICAgICAgIHwgdCAg ICAgICAgICAgfCAgICAgICAgICAgOSB8ICAgICAgICAgNjAKKygxIHJvdykKKworU0VMRUNU ICogRlJPTSBleDsKKyBpZCB8ICAgICBhdHQxICAgICB8ICAgICAgYXR0MiAgICAgIHwgYXR0 MyB8ICAgYXR0NCAgIAorLS0tLSstLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0t LS0tLSstLS0tLS0tLS0tCisgIDEgfCB7ImRhdGEiOiBbXX0gfCBzcGVjaWFsIGluZGVlZCB8 ICAgICAgfCB3aGF0ZXZlcgorKDEgcm93KQorCistLSBVcGRhdGUgYXR0MSBhbmQgYXR0Miwg b25seSBvbmUgaXMgQlJJTi9zdW1tYXJpemluZywgdGhpcyBzaG91bGQgTk9UIGJlIGEgSE9U IHVwZGF0ZS4KK1VQREFURSBleCBTRVQgYXR0MSA9IGF0dDEgfHwgJ3siZGF0YSI6ICJob3dk eSJ9JywgYXR0MiA9ICdzcGVjaWFsLCBzbyBzcGVjaWFsJzsKK1NFTEVDVCAqIEZST00gY2hl Y2tfaG90X3VwZGF0ZXMoMSwgJ2V4Jyk7CisgdGFibGVfbmFtZSB8IHRvdGFsX3VwZGF0ZXMg fCBob3RfdXBkYXRlcyB8IGhvdF91cGRhdGVfcGVyY2VudGFnZSB8IG1hdGNoZXNfZXhwZWN0 ZWQgfCBoYXNfaW5kZXhlcyB8IGluZGV4X2NvdW50IHwgZmlsbGZhY3RvciAKKy0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLQorIGV4ICAgICAgICAgfCAgICAgICAgICAgICAyIHwgICAgICAgICAgIDEg fCAgICAgICAgICAgICAgICAgNTAuMDAgfCB0ICAgICAgICAgICAgICAgIHwgdCAgICAgICAg ICAgfCAgICAgICAgICAgOSB8ICAgICAgICAgNjAKKygxIHJvdykKKworU0VMRUNUICogRlJP TSBleDsKKyBpZCB8ICAgICAgIGF0dDEgICAgICAgIHwgICAgICAgIGF0dDIgICAgICAgICB8 IGF0dDMgfCAgIGF0dDQgICAKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tKy0tLS0tLS0tLS0KKyAgMSB8IHsiZGF0YSI6ICJob3dkeSJ9 IHwgc3BlY2lhbCwgc28gc3BlY2lhbCB8ICAgICAgfCB3aGF0ZXZlcgorKDEgcm93KQorCist LSBVcGRhdGUgYXR0MiwgYXR0MywgYW5kIGF0dDQgYWxsIGFyZSBCUklOL3N1bW1hcml6aW5n IGluZGV4ZXMsIHRoaXMgc2hvdWxkIGJlIGEgSE9UIHVwZGF0ZQorLS0gYW5kIHlldCBzdGls bCB1cGRhdGUgYWxsIHRocmVlIHN1bW1hcml6aW5nIGluZGV4ZXMuCitVUERBVEUgZXggU0VU IGF0dDIgPSAnYScsIGF0dDMgPSAnYicsIGF0dDQgPSAnYyc7CitTRUxFQ1QgKiBGUk9NIGNo ZWNrX2hvdF91cGRhdGVzKDIsICdleCcpOworIHRhYmxlX25hbWUgfCB0b3RhbF91cGRhdGVz IHwgaG90X3VwZGF0ZXMgfCBob3RfdXBkYXRlX3BlcmNlbnRhZ2UgfCBtYXRjaGVzX2V4cGVj dGVkIHwgaGFzX2luZGV4ZXMgfCBpbmRleF9jb3VudCB8IGZpbGxmYWN0b3IgCistLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0KKyBleCAgICAgICAgIHwgICAgICAgICAgICAgMyB8ICAgICAgICAgICAy IHwgICAgICAgICAgICAgICAgIDY2LjY3IHwgdCAgICAgICAgICAgICAgICB8IHQgICAgICAg ICAgIHwgICAgICAgICAgIDkgfCAgICAgICAgIDYwCisoMSByb3cpCisKK1NFTEVDVCAqIEZS T00gZXg7CisgaWQgfCAgICAgICBhdHQxICAgICAgICB8IGF0dDIgfCBhdHQzIHwgYXR0NCAK Ky0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0rLS0tLS0tKy0tLS0tLQorICAxIHwg eyJkYXRhIjogImhvd2R5In0gfCBhICAgIHwgYiAgICB8IGMKKygxIHJvdykKKworLS0gVXBk YXRlIGF0dDEsIGF0dDIsIGFuZCBhdHQzIGFsbCBtb2RpZmllZCB2YWx1ZXMgYXJlIEJSSU4v c3VtbWFyaXppbmcgaW5kZXhlcywgdGhpcyBzaG91bGQgYmUgYSBIT1QgdXBkYXRlCistLSBh bmQgeWV0IHN0aWxsIHVwZGF0ZSBhbGwgdGhyZWUgc3VtbWFyaXppbmcgaW5kZXhlcy4KK1VQ REFURSBleCBTRVQgYXR0MSA9ICd7ImRhdGEiOiAiaG93ZHkifScsIGF0dDIgPSAnZCcsIGF0 dDMgPSAnZSc7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDMsICdleCcpOwor IHRhYmxlX25hbWUgfCB0b3RhbF91cGRhdGVzIHwgaG90X3VwZGF0ZXMgfCBob3RfdXBkYXRl X3BlcmNlbnRhZ2UgfCBtYXRjaGVzX2V4cGVjdGVkIHwgaGFzX2luZGV4ZXMgfCBpbmRleF9j b3VudCB8IGZpbGxmYWN0b3IgCistLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0KKyBleCAgICAgICAgIHwg ICAgICAgICAgICAgNCB8ICAgICAgICAgICAzIHwgICAgICAgICAgICAgICAgIDc1LjAwIHwg dCAgICAgICAgICAgICAgICB8IHQgICAgICAgICAgIHwgICAgICAgICAgIDkgfCAgICAgICAg IDYwCisoMSByb3cpCisKK1NFTEVDVCAqIEZST00gZXg7CisgaWQgfCAgICAgICBhdHQxICAg ICAgICB8IGF0dDIgfCBhdHQzIHwgYXR0NCAKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0rLS0tLS0tKy0tLS0tLQorICAxIHwgeyJkYXRhIjogImhvd2R5In0gfCBkICAgIHwg ZSAgICB8IGMKKygxIHJvdykKKworRFJPUCBUQUJMRSBleDsKKy0tIC0tIC0tIC0tIC0tIC0t IC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0t IC0tIC0tCistLSBBIHRlc3QgdG8gZW5zdXJlIHRoYXQgc3VtbWFyaXppbmcgaW5kZXhlcyBh cmUgbm90IHVwZGF0ZWQgd2hlbiB0aGV5IGRvbid0CistLSBjaGFuZ2UsIGJ1dCBhcmUgdXBk YXRlZCB3aGVuIHRoZXkgZG8gd2hpbGUgbm90IHByZWZlbnQgSE9UIHVwZGF0ZXMuCitDUkVB VEUgVEFCTEUgZXggKGF0dDEgSlNPTkIsIGF0dDIgdGV4dCkgV0lUSCAoZmlsbGZhY3RvciA9 IDYwKTsKK0NSRUFURSBJTkRFWCBleF9leHByMV9pZHggT04gZXggVVNJTkcgYnRyZWUoKGF0 dDEtPidkYXRhJykpOworQ1JFQVRFIElOREVYIGV4X3N1bXIxX2lkeCBPTiBleCBVU0lORyBC UklOKGF0dDIpOworSU5TRVJUIElOVE8gZXggVkFMVUVTICgneyJkYXRhIjogW119JywgJ25v dGhpbmcgc3BlY2lhbCcpOworLS0gVXBkYXRlIHRoZSB1bmluZGV4ZWQgdmFsdWUgb2YgYXR0 MSwgdGhpcyBzaG91bGQgYmUgYSBIT1QgdXBkYXRlIGFuZCBhbmQgc2hvdWxkCistLSB1cGRh dGUgdGhlIHN1bW1hcml6aW5nIGluZGV4LgorVVBEQVRFIGV4IFNFVCBhdHQxID0gYXR0MSB8 fCAneyJzdGF0dXMiOiAic3RhbGVtYXRlIn0nOworU0VMRUNUICogRlJPTSBjaGVja19ob3Rf dXBkYXRlcygxLCAnZXgnKTsKKyB0YWJsZV9uYW1lIHwgdG90YWxfdXBkYXRlcyB8IGhvdF91 cGRhdGVzIHwgaG90X3VwZGF0ZV9wZXJjZW50YWdlIHwgbWF0Y2hlc19leHBlY3RlZCB8IGhh c19pbmRleGVzIHwgaW5kZXhfY291bnQgfCBmaWxsZmFjdG9yIAorLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tCisgZXggICAgICAgICB8ICAgICAgICAgICAgIDEgfCAgICAgICAgICAgMSB8ICAgICAg ICAgICAgICAgIDEwMC4wMCB8IHQgICAgICAgICAgICAgICAgfCB0ICAgICAgICAgICB8ICAg ICAgICAgICAyIHwgICAgICAgICA2MAorKDEgcm93KQorCistLSBVcGRhdGUgdGhlIGluZGV4 ZWQgdmFsdWUgb2YgYXR0MiwgYSBzdW1tYXJpemVkIHZhbHVlLCB0aGlzIGlzIGEgc3VtbWFy aXplZAorLS0gb25seSB1cGRhdGUgYW5kIHNob3VsZCB1c2UgdGhlIEhPVCBwYXRoIHdoaWxl IHN0aWxsIHRyaWdnZXJpbmcgYW4gdXBkYXRlIHRvCistLSB0aGUgc3VtbWFyaXppbmcgQlJJ TiBpbmRleC4KK1VQREFURSBleCBTRVQgYXR0MiA9ICdzcGVjaWFsIGluZGVlZCc7CitTRUxF Q1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDIsICdleCcpOworIHRhYmxlX25hbWUgfCB0 b3RhbF91cGRhdGVzIHwgaG90X3VwZGF0ZXMgfCBob3RfdXBkYXRlX3BlcmNlbnRhZ2UgfCBt YXRjaGVzX2V4cGVjdGVkIHwgaGFzX2luZGV4ZXMgfCBpbmRleF9jb3VudCB8IGZpbGxmYWN0 b3IgCistLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0KKyBleCAgICAgICAgIHwgICAgICAgICAgICAgMiB8 ICAgICAgICAgICAyIHwgICAgICAgICAgICAgICAgMTAwLjAwIHwgdCAgICAgICAgICAgICAg ICB8IHQgICAgICAgICAgIHwgICAgICAgICAgIDIgfCAgICAgICAgIDYwCisoMSByb3cpCisK Ky0tIFVwZGF0ZSB0byBhdHQxIGRvZXNuJ3QgY2hhbmdlIHRoZSBpbmRleGVkIHZhbHVlIHdo aWxlIHRoZSB1cGRhdGUgdG8gYXR0MiBkb2VzLAorLS0gdGhpcyBhZ2FpbiBpcyBhIHN1bW1h cml6ZWQgb25seSB1cGRhdGUgYW5kIHNob3VsZCB1c2UgdGhlIEhPVCBwYXRoIGFzIHdlbGwg YXMKKy0tIHRyaWdnZXIgYW4gdXBkYXRlIHRvIHRoZSBCUklOIGluZGV4LgorVVBEQVRFIGV4 IFNFVCBhdHQxID0gYXR0MSB8fCAneyJzdGF0dXMiOiAiY2hlY2ttYXRlIn0nLCBhdHQyID0g J3NwZWNpYWwsIHNvIHNwZWNpYWwnOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRl cygzLCAnZXgnKTsKKyB0YWJsZV9uYW1lIHwgdG90YWxfdXBkYXRlcyB8IGhvdF91cGRhdGVz IHwgaG90X3VwZGF0ZV9wZXJjZW50YWdlIHwgbWF0Y2hlc19leHBlY3RlZCB8IGhhc19pbmRl eGVzIHwgaW5kZXhfY291bnQgfCBmaWxsZmFjdG9yIAorLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tCisg ZXggICAgICAgICB8ICAgICAgICAgICAgIDMgfCAgICAgICAgICAgMyB8ICAgICAgICAgICAg ICAgIDEwMC4wMCB8IHQgICAgICAgICAgICAgICAgfCB0ICAgICAgICAgICB8ICAgICAgICAg ICAyIHwgICAgICAgICA2MAorKDEgcm93KQorCistLSBUaGlzIHVwZGF0ZXMgYm90aCBpbmRl eGVzLCB0aGUgZXhwcmVzc2lvbiBpbmRleCBvbiBhdHQxIGFuZCB0aGUgc3VtbWFyaXppbmcK Ky0tIGluZGV4IG9uIGF0dDIuICBUaGlzIHNob3VsZCBub3QgYmUgYSBIT1QgdXBkYXRlIGJl Y2F1c2UgdGhlcmUgYXJlIG1vZGlmaWVkCistLSBpbmRleGVzIGFuZCBvbmx5IHNvbWUgYXJl IHN1bW1hcml6ZWQsIG5vdCBhbGwuICBUaGlzIHNob3VsZCBmb3JjZSBhbGwKKy0tIGluZGV4 ZXMgdG8gYmUgdXBkYXRlZC4KK1VQREFURSBleCBTRVQgYXR0MSA9IGF0dDEgfHwgJ3siZGF0 YSI6IFsxLDIsM119JywgYXR0MiA9ICdkbyB5b3Ugd2FudCB0byBwbGF5IGEgZ2FtZT8nOwor U0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcyg0LCAnZXgnKTsKKyB0YWJsZV9uYW1l IHwgdG90YWxfdXBkYXRlcyB8IGhvdF91cGRhdGVzIHwgaG90X3VwZGF0ZV9wZXJjZW50YWdl IHwgbWF0Y2hlc19leHBlY3RlZCB8IGhhc19pbmRleGVzIHwgaW5kZXhfY291bnQgfCBmaWxs ZmFjdG9yIAorLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tCisgZXggICAgICAgICB8ICAgICAgICAgICAg IDQgfCAgICAgICAgICAgMyB8ICAgICAgICAgICAgICAgICA3NS4wMCB8IGYgICAgICAgICAg ICAgICAgfCB0ICAgICAgICAgICB8ICAgICAgICAgICAyIHwgICAgICAgICA2MAorKDEgcm93 KQorCitEUk9QIFRBQkxFIGV4OworLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0g LS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0KKy0tIFRoaXMg dGVzdCBpcyBmb3IgYSB0YWJsZSB3aXRoIGEgY3VzdG9tIHR5cGUgYW5kIGEgY3VzdG9tIG9w ZXJhdG9ycyBvbgorLS0gdGhlIEJUUkVFIGluZGV4LiAgVGhlIHF1ZXN0aW9uIGlzLCB3aGVu IGNvbXBhcmluZyB2YWx1ZXMgZm9yIGVxdWFsaXR5CistLSB0byBkZXRlcm1pbmUgaWYgdGhl cmUgYXJlIGNoYW5nZXMgb24gdGhlIGluZGV4IG9yIG5vdC4uLiBzaG91bGRuJ3Qgd2UKKy0t IGJlIHVzaW5nIHRoZSBjdXN0b20gb3BlcmF0b3JzPworLS0gQ3JlYXRlIGEgdHlwZQorQ1JF QVRFIFRZUEUgbXlfY3VzdG9tX3R5cGUgQVMgKHZhbCBpbnQpOworLS0gQ29tcGFyaXNvbiBm dW5jdGlvbnMgKHJldHVybnMgYm9vbGVhbikKK0NSRUFURSBGVU5DVElPTiBteV9jdXN0b21f bHQoYSBteV9jdXN0b21fdHlwZSwgYiBteV9jdXN0b21fdHlwZSkgUkVUVVJOUyBib29sZWFu IEFTICQkCitCRUdJTgorICAgIFJFVFVSTiBhLnZhbCA8IGIudmFsOworRU5EOworJCQgTEFO R1VBR0UgcGxwZ3NxbCBJTU1VVEFCTEUgU1RSSUNUOworQ1JFQVRFIEZVTkNUSU9OIG15X2N1 c3RvbV9sZShhIG15X2N1c3RvbV90eXBlLCBiIG15X2N1c3RvbV90eXBlKSBSRVRVUk5TIGJv b2xlYW4gQVMgJCQKK0JFR0lOCisgICAgUkVUVVJOIGEudmFsIDw9IGIudmFsOworRU5EOwor JCQgTEFOR1VBR0UgcGxwZ3NxbCBJTU1VVEFCTEUgU1RSSUNUOworQ1JFQVRFIEZVTkNUSU9O IG15X2N1c3RvbV9lcShhIG15X2N1c3RvbV90eXBlLCBiIG15X2N1c3RvbV90eXBlKSBSRVRV Uk5TIGJvb2xlYW4gQVMgJCQKK0JFR0lOCisgICAgUkVUVVJOIGEudmFsID0gYi52YWw7CitF TkQ7CiskJCBMQU5HVUFHRSBwbHBnc3FsIElNTVVUQUJMRSBTVFJJQ1Q7CitDUkVBVEUgRlVO Q1RJT04gbXlfY3VzdG9tX2dlKGEgbXlfY3VzdG9tX3R5cGUsIGIgbXlfY3VzdG9tX3R5cGUp IFJFVFVSTlMgYm9vbGVhbiBBUyAkJAorQkVHSU4KKyAgICBSRVRVUk4gYS52YWwgPj0gYi52 YWw7CitFTkQ7CiskJCBMQU5HVUFHRSBwbHBnc3FsIElNTVVUQUJMRSBTVFJJQ1Q7CitDUkVB VEUgRlVOQ1RJT04gbXlfY3VzdG9tX2d0KGEgbXlfY3VzdG9tX3R5cGUsIGIgbXlfY3VzdG9t X3R5cGUpIFJFVFVSTlMgYm9vbGVhbiBBUyAkJAorQkVHSU4KKyAgICBSRVRVUk4gYS52YWwg PiBiLnZhbDsKK0VORDsKKyQkIExBTkdVQUdFIHBscGdzcWwgSU1NVVRBQkxFIFNUUklDVDsK K0NSRUFURSBGVU5DVElPTiBteV9jdXN0b21fbmUoYSBteV9jdXN0b21fdHlwZSwgYiBteV9j dXN0b21fdHlwZSkgUkVUVVJOUyBib29sZWFuIEFTICQkCitCRUdJTgorICAgIFJFVFVSTiBh LnZhbCAhPSBiLnZhbDsKK0VORDsKKyQkIExBTkdVQUdFIHBscGdzcWwgSU1NVVRBQkxFIFNU UklDVDsKKy0tIENvbXBhcmlzb24gZnVuY3Rpb24gKHJldHVybnMgLTEsIDAsIDEpCitDUkVB VEUgRlVOQ1RJT04gbXlfY3VzdG9tX2NtcChhIG15X2N1c3RvbV90eXBlLCBiIG15X2N1c3Rv bV90eXBlKSBSRVRVUk5TIGludCBBUyAkJAorQkVHSU4KKyAgICBJRiBhLnZhbCA8IGIudmFs IFRIRU4KKyAgICAgICAgUkVUVVJOIC0xOworICAgIEVMU0lGIGEudmFsID4gYi52YWwgVEhF TgorICAgICAgICBSRVRVUk4gMTsKKyAgICBFTFNFCisgICAgICAgIFJFVFVSTiAwOworICAg IEVORCBJRjsKK0VORDsKKyQkIExBTkdVQUdFIHBscGdzcWwgSU1NVVRBQkxFIFNUUklDVDsK Ky0tIENyZWF0ZSB0aGUgb3BlcmF0b3JzCitDUkVBVEUgT1BFUkFUT1IgPCAoCisgICAgTEVG VEFSRyA9IG15X2N1c3RvbV90eXBlLAorICAgIFJJR0hUQVJHID0gbXlfY3VzdG9tX3R5cGUs CisgICAgUFJPQ0VEVVJFID0gbXlfY3VzdG9tX2x0LAorICAgIENPTU1VVEFUT1IgPSA+LAor ICAgIE5FR0FUT1IgPSA+PQorKTsKK0NSRUFURSBPUEVSQVRPUiA8PSAoCisgICAgTEVGVEFS RyA9IG15X2N1c3RvbV90eXBlLAorICAgIFJJR0hUQVJHID0gbXlfY3VzdG9tX3R5cGUsCisg ICAgUFJPQ0VEVVJFID0gbXlfY3VzdG9tX2xlLAorICAgIENPTU1VVEFUT1IgPSA+PSwKKyAg ICBORUdBVE9SID0gPgorKTsKK0NSRUFURSBPUEVSQVRPUiA9ICgKKyAgICBMRUZUQVJHID0g bXlfY3VzdG9tX3R5cGUsCisgICAgUklHSFRBUkcgPSBteV9jdXN0b21fdHlwZSwKKyAgICBQ Uk9DRURVUkUgPSBteV9jdXN0b21fZXEsCisgICAgQ09NTVVUQVRPUiA9ID0sCisgICAgTkVH QVRPUiA9IDw+CispOworQ1JFQVRFIE9QRVJBVE9SID49ICgKKyAgICBMRUZUQVJHID0gbXlf Y3VzdG9tX3R5cGUsCisgICAgUklHSFRBUkcgPSBteV9jdXN0b21fdHlwZSwKKyAgICBQUk9D RURVUkUgPSBteV9jdXN0b21fZ2UsCisgICAgQ09NTVVUQVRPUiA9IDw9LAorICAgIE5FR0FU T1IgPSA8CispOworQ1JFQVRFIE9QRVJBVE9SID4gKAorICAgIExFRlRBUkcgPSBteV9jdXN0 b21fdHlwZSwKKyAgICBSSUdIVEFSRyA9IG15X2N1c3RvbV90eXBlLAorICAgIFBST0NFRFVS RSA9IG15X2N1c3RvbV9ndCwKKyAgICBDT01NVVRBVE9SID0gPCwKKyAgICBORUdBVE9SID0g PD0KKyk7CitDUkVBVEUgT1BFUkFUT1IgPD4gKAorICAgIExFRlRBUkcgPSBteV9jdXN0b21f dHlwZSwKKyAgICBSSUdIVEFSRyA9IG15X2N1c3RvbV90eXBlLAorICAgIFBST0NFRFVSRSA9 IG15X2N1c3RvbV9uZSwKKyAgICBDT01NVVRBVE9SID0gPD4sCisgICAgTkVHQVRPUiA9ID0K Kyk7CistLSBDcmVhdGUgdGhlIG9wZXJhdG9yIGNsYXNzIChpbmNsdWRpbmcgdGhlIHN1cHBv cnQgZnVuY3Rpb24pCitDUkVBVEUgT1BFUkFUT1IgQ0xBU1MgbXlfY3VzdG9tX29wcworICAg IERFRkFVTFQgRk9SIFRZUEUgbXlfY3VzdG9tX3R5cGUgVVNJTkcgYnRyZWUgQVMKKyAgICBP UEVSQVRPUiAxIDwsCisgICAgT1BFUkFUT1IgMiA8PSwKKyAgICBPUEVSQVRPUiAzID0sCisg ICAgT1BFUkFUT1IgNCA+PSwKKyAgICBPUEVSQVRPUiA1ID4sCisgICAgRlVOQ1RJT04gMSBt eV9jdXN0b21fY21wKG15X2N1c3RvbV90eXBlLCBteV9jdXN0b21fdHlwZSk7CistLSBDcmVh dGUgdGhlIHRhYmxlCitDUkVBVEUgVEFCTEUgbXlfdGFibGUgKAorICAgIGlkIGludCwKKyAg ICBjdXN0b21fdmFsIG15X2N1c3RvbV90eXBlCispOworLS0gSW5zZXJ0IHNvbWUgZGF0YQor SU5TRVJUIElOVE8gbXlfdGFibGUgKGlkLCBjdXN0b21fdmFsKSBWQUxVRVMKKygxLCBST1co Myk6Om15X2N1c3RvbV90eXBlKSwKKygyLCBST1coMSk6Om15X2N1c3RvbV90eXBlKSwKKygz LCBST1coNCk6Om15X2N1c3RvbV90eXBlKSwKKyg0LCBST1coMik6Om15X2N1c3RvbV90eXBl KTsKKy0tIENyZWF0ZSBhIGZ1bmN0aW9uIHRvIHVzZSB3aGVuIGluZGV4aW5nCitDUkVBVEUg T1IgUkVQTEFDRSBGVU5DVElPTiBhYnNfdmFsKHZhbCBteV9jdXN0b21fdHlwZSkgUkVUVVJO UyBpbnQgQVMgJCQKK0JFR0lOCisgIFJFVFVSTiBhYnModmFsLnZhbCk7CitFTkQ7CiskJCBM QU5HVUFHRSBwbHBnc3FsIElNTVVUQUJMRSBTVFJJQ1Q7CistLSBDcmVhdGUgdGhlIGluZGV4 CitDUkVBVEUgSU5ERVggaWR4X2N1c3RvbV92YWxfYWJzIE9OIG15X3RhYmxlIChhYnNfdmFs KGN1c3RvbV92YWwpKTsKKy0tIFVwZGF0ZSAxCitVUERBVEUgbXlfdGFibGUgU0VUIGN1c3Rv bV92YWwgPSBST1coNSk6Om15X2N1c3RvbV90eXBlIFdIRVJFIGlkID0gMTsKK1NFTEVDVCAq IEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMCwgJ215X3RhYmxlJyk7CisgdGFibGVfbmFtZSB8 IHRvdGFsX3VwZGF0ZXMgfCBob3RfdXBkYXRlcyB8IGhvdF91cGRhdGVfcGVyY2VudGFnZSB8 IG1hdGNoZXNfZXhwZWN0ZWQgfCBoYXNfaW5kZXhlcyB8IGluZGV4X2NvdW50IHwgZmlsbGZh Y3RvciAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLQorIG15X3RhYmxlICAgfCAgICAgICAgICAgICAx IHwgICAgICAgICAgIDAgfCAgICAgICAgICAgICAgICAgIDAuMDAgfCB0ICAgICAgICAgICAg ICAgIHwgdCAgICAgICAgICAgfCAgICAgICAgICAgMSB8ICAgICAgICAxMDAKKygxIHJvdykK KworLS0gVXBkYXRlIDIKK1VQREFURSBteV90YWJsZSBTRVQgY3VzdG9tX3ZhbCA9IFJPVygw KTo6bXlfY3VzdG9tX3R5cGUgV0hFUkUgY3VzdG9tX3ZhbCA8IFJPVygzKTo6bXlfY3VzdG9t X3R5cGU7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDAsICdteV90YWJsZScp OworIHRhYmxlX25hbWUgfCB0b3RhbF91cGRhdGVzIHwgaG90X3VwZGF0ZXMgfCBob3RfdXBk YXRlX3BlcmNlbnRhZ2UgfCBtYXRjaGVzX2V4cGVjdGVkIHwgaGFzX2luZGV4ZXMgfCBpbmRl eF9jb3VudCB8IGZpbGxmYWN0b3IgCistLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0KKyBteV90YWJsZSAg IHwgICAgICAgICAgICAgMyB8ICAgICAgICAgICAwIHwgICAgICAgICAgICAgICAgICAwLjAw IHwgdCAgICAgICAgICAgICAgICB8IHQgICAgICAgICAgIHwgICAgICAgICAgIDEgfCAgICAg ICAgMTAwCisoMSByb3cpCisKKy0tIFVwZGF0ZSAzCitVUERBVEUgbXlfdGFibGUgU0VUIGN1 c3RvbV92YWwgPSBST1coNik6Om15X2N1c3RvbV90eXBlIFdIRVJFIGlkID0gMzsKK1NFTEVD VCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMCwgJ215X3RhYmxlJyk7CisgdGFibGVfbmFt ZSB8IHRvdGFsX3VwZGF0ZXMgfCBob3RfdXBkYXRlcyB8IGhvdF91cGRhdGVfcGVyY2VudGFn ZSB8IG1hdGNoZXNfZXhwZWN0ZWQgfCBoYXNfaW5kZXhlcyB8IGluZGV4X2NvdW50IHwgZmls bGZhY3RvciAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLQorIG15X3RhYmxlICAgfCAgICAgICAgICAg ICA0IHwgICAgICAgICAgIDAgfCAgICAgICAgICAgICAgICAgIDAuMDAgfCB0ICAgICAgICAg ICAgICAgIHwgdCAgICAgICAgICAgfCAgICAgICAgICAgMSB8ICAgICAgICAxMDAKKygxIHJv dykKKworLS0gVXBkYXRlIDQKK1VQREFURSBteV90YWJsZSBTRVQgaWQgPSA1IFdIRVJFIGlk ID0gMTsKK1NFTEVDVCBwZ19zdGF0X2dldF94YWN0X3R1cGxlc19ob3RfdXBkYXRlZCgnbXlf dGFibGUnOjpyZWdjbGFzcyk7CisgcGdfc3RhdF9nZXRfeGFjdF90dXBsZXNfaG90X3VwZGF0 ZWQgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDEKKygxIHJvdykKKworU0VMRUNUICogRlJPTSBj aGVja19ob3RfdXBkYXRlcygwLCAnbXlfdGFibGUnKTsKKyB0YWJsZV9uYW1lIHwgdG90YWxf dXBkYXRlcyB8IGhvdF91cGRhdGVzIHwgaG90X3VwZGF0ZV9wZXJjZW50YWdlIHwgbWF0Y2hl c19leHBlY3RlZCB8IGhhc19pbmRleGVzIHwgaW5kZXhfY291bnQgfCBmaWxsZmFjdG9yIAor LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tCisgbXlfdGFibGUgICB8ICAgICAgICAgICAgIDUgfCAgICAg ICAgICAgMSB8ICAgICAgICAgICAgICAgICAyMC4wMCB8IGYgICAgICAgICAgICAgICAgfCB0 ICAgICAgICAgICB8ICAgICAgICAgICAxIHwgICAgICAgIDEwMAorKDEgcm93KQorCistLSBR dWVyeSB1c2luZyB0aGUgaW5kZXgKK0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUICogRlJP TSBteV90YWJsZSBXSEVSRSBhYnNfdmFsKGN1c3RvbV92YWwpID0gNjsKKyAgICAgICAgICAg ICBRVUVSWSBQTEFOICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBteV90YWJsZQorICAgRmlsdGVyOiAoYWJzX3Zh bChjdXN0b21fdmFsKSA9IDYpCisoMiByb3dzKQorCitTRUxFQ1QgKiBGUk9NIG15X3RhYmxl IFdIRVJFIGFic192YWwoY3VzdG9tX3ZhbCkgPSA2OworIGlkIHwgY3VzdG9tX3ZhbCAKKy0t LS0rLS0tLS0tLS0tLS0tCisgIDMgfCAoNikKKygxIHJvdykKKworLS0gQ2xlYW4gdXAKK0RS T1AgVEFCTEUgbXlfdGFibGUgQ0FTQ0FERTsKK0RST1AgT1BFUkFUT1IgQ0xBU1MgbXlfY3Vz dG9tX29wcyBVU0lORyBidHJlZSBDQVNDQURFOworRFJPUCBPUEVSQVRPUiA8IChteV9jdXN0 b21fdHlwZSwgbXlfY3VzdG9tX3R5cGUpOworRFJPUCBPUEVSQVRPUiA8PSAobXlfY3VzdG9t X3R5cGUsIG15X2N1c3RvbV90eXBlKTsKK0RST1AgT1BFUkFUT1IgPSAobXlfY3VzdG9tX3R5 cGUsIG15X2N1c3RvbV90eXBlKTsKK0RST1AgT1BFUkFUT1IgPj0gKG15X2N1c3RvbV90eXBl LCBteV9jdXN0b21fdHlwZSk7CitEUk9QIE9QRVJBVE9SID4gKG15X2N1c3RvbV90eXBlLCBt eV9jdXN0b21fdHlwZSk7CitEUk9QIE9QRVJBVE9SIDw+IChteV9jdXN0b21fdHlwZSwgbXlf Y3VzdG9tX3R5cGUpOworRFJPUCBGVU5DVElPTiBteV9jdXN0b21fbHQobXlfY3VzdG9tX3R5 cGUsIG15X2N1c3RvbV90eXBlKTsKK0RST1AgRlVOQ1RJT04gbXlfY3VzdG9tX2xlKG15X2N1 c3RvbV90eXBlLCBteV9jdXN0b21fdHlwZSk7CitEUk9QIEZVTkNUSU9OIG15X2N1c3RvbV9l cShteV9jdXN0b21fdHlwZSwgbXlfY3VzdG9tX3R5cGUpOworRFJPUCBGVU5DVElPTiBteV9j dXN0b21fZ2UobXlfY3VzdG9tX3R5cGUsIG15X2N1c3RvbV90eXBlKTsKK0RST1AgRlVOQ1RJ T04gbXlfY3VzdG9tX2d0KG15X2N1c3RvbV90eXBlLCBteV9jdXN0b21fdHlwZSk7CitEUk9Q IEZVTkNUSU9OIG15X2N1c3RvbV9uZShteV9jdXN0b21fdHlwZSwgbXlfY3VzdG9tX3R5cGUp OworRFJPUCBGVU5DVElPTiBteV9jdXN0b21fY21wKG15X2N1c3RvbV90eXBlLCBteV9jdXN0 b21fdHlwZSk7CitEUk9QIEZVTkNUSU9OIGFic192YWwobXlfY3VzdG9tX3R5cGUpOworRFJP UCBUWVBFIG15X2N1c3RvbV90eXBlIENBU0NBREU7CitEUk9QIEZVTkNUSU9OIGNoZWNrX2hv dF91cGRhdGVzKGludCwgdGV4dCwgdGV4dCk7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdy ZXNzL3BhcmFsbGVsX3NjaGVkdWxlIGIvc3JjL3Rlc3QvcmVncmVzcy9wYXJhbGxlbF9zY2hl ZHVsZQppbmRleCBhNDI0YmUyYTZiZi4uZjcxMmFjZDlhMjAgMTAwNjQ0Ci0tLSBhL3NyYy90 ZXN0L3JlZ3Jlc3MvcGFyYWxsZWxfc2NoZWR1bGUKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9w YXJhbGxlbF9zY2hlZHVsZQpAQCAtNjgsNiArNjgsMTEgQEAgdGVzdDogc2VsZWN0X2ludG8g c2VsZWN0X2Rpc3RpbmN0IHNlbGVjdF9kaXN0aW5jdF9vbiBzZWxlY3RfaW1wbGljaXQgc2Vs ZWN0X2hhdmkKICMgLS0tLS0tLS0tLQogdGVzdDogYnJpbiBnaW4gZ2lzdCBzcGdpc3QgcHJp dmlsZWdlcyBpbml0X3ByaXZzIHNlY3VyaXR5X2xhYmVsIGNvbGxhdGUgbWF0dmlldyBsb2Nr IHJlcGxpY2FfaWRlbnRpdHkgcm93c2VjdXJpdHkgb2JqZWN0X2FkZHJlc3MgdGFibGVzYW1w bGUgZ3JvdXBpbmdzZXRzIGRyb3Bfb3BlcmF0b3IgcGFzc3dvcmQgaWRlbnRpdHkgZ2VuZXJh dGVkX3N0b3JlZCBqb2luX2hhc2gKIAorIyAtLS0tLS0tLS0tCisjIEFub3RoZXIgZ3JvdXAg b2YgcGFyYWxsZWwgdGVzdHMKKyMgLS0tLS0tLS0tLQordGVzdDogaGVhcF9ob3RfdXBkYXRl cworCiAjIC0tLS0tLS0tLS0KICMgQWRkaXRpb25hbCBCUklOIHRlc3RzCiAjIC0tLS0tLS0t LS0KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2hlYXBfaG90X3VwZGF0ZXMu c3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvaGVhcF9ob3RfdXBkYXRlcy5zcWwKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjcwMTZlOWVhYmQwCi0tLSAvZGV2 L251bGwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvaGVhcF9ob3RfdXBkYXRlcy5zcWwK QEAgLTAsMCArMSw3MTggQEAKKy0tIENyZWF0ZSBhIGZ1bmN0aW9uIHRvIG1lYXN1cmUgSE9U IHVwZGF0ZXMKK0NSRUFURSBPUiBSRVBMQUNFIEZVTkNUSU9OIGNoZWNrX2hvdF91cGRhdGVz KAorICAgIGV4cGVjdGVkIElOVCwKKyAgICBwX3RhYmxlX25hbWUgVEVYVCBERUZBVUxUICd0 JywKKyAgICBwX3NjaGVtYV9uYW1lIFRFWFQgREVGQVVMVCBjdXJyZW50X3NjaGVtYSgpCisp CitSRVRVUk5TIFRBQkxFICgKKyAgICB0YWJsZV9uYW1lIFRFWFQsCisgICAgdG90YWxfdXBk YXRlcyBCSUdJTlQsCisgICAgaG90X3VwZGF0ZXMgQklHSU5ULAorICAgIGhvdF91cGRhdGVf cGVyY2VudGFnZSBOVU1FUklDLAorICAgIG1hdGNoZXNfZXhwZWN0ZWQgQk9PTEVBTiwKKyAg ICBoYXNfaW5kZXhlcyBCT09MRUFOLAorICAgIGluZGV4X2NvdW50IElOVCwKKyAgICBmaWxs ZmFjdG9yIElOVAorKQorTEFOR1VBR0UgcGxwZ3NxbAorQVMgJCQKK0RFQ0xBUkUKKyAgICB2 X3JlbGlkIG9pZDsKKyAgICB2X3F1YWxpZmllZF9uYW1lIFRFWFQ7CisgICAgdl9ob3RfdXBk YXRlcyBCSUdJTlQ7CisgICAgdl91cGRhdGVzIEJJR0lOVDsKKyAgICB2X3hhY3RfaG90X3Vw ZGF0ZXMgQklHSU5UOworICAgIHZfeGFjdF91cGRhdGVzIEJJR0lOVDsKK0JFR0lOCisKKyAg ICAtLSBXZSBuZWVkIHRvIHdhaXQgZm9yIHN0YXRpc3RpY3MgdG8gdXBkYXRlCisgICAgUEVS Rk9STSBwZ19zdGF0X2ZvcmNlX25leHRfZmx1c2goKTsKKworICAgIC0tIENvbnN0cnVjdCBx dWFsaWZpZWQgbmFtZQorICAgIHZfcXVhbGlmaWVkX25hbWUgOj0gcXVvdGVfaWRlbnQocF9z Y2hlbWFfbmFtZSkgfHwgJy4nIHx8IHF1b3RlX2lkZW50KHBfdGFibGVfbmFtZSk7CisKKyAg ICAtLSBHZXQgdGhlIE9JRCB1c2luZyByZWdjbGFzcworICAgIHZfcmVsaWQgOj0gdl9xdWFs aWZpZWRfbmFtZTo6cmVnY2xhc3M7CisKKyAgICBJRiB2X3JlbGlkIElTIE5VTEwgVEhFTgor ICAgICAgICBSQUlTRSBFWENFUFRJT04gJ1RhYmxlICUuJSBub3QgZm91bmQnLCBwX3NjaGVt YV9uYW1lLCBwX3RhYmxlX25hbWU7CisgICAgRU5EIElGOworCisgICAgLS0gR2V0IGN1bXVs YXRpdmUgc3RhdHMKKyAgICB2X2hvdF91cGRhdGVzIDo9IENPQUxFU0NFKHBnX3N0YXRfZ2V0 X3R1cGxlc19ob3RfdXBkYXRlZCh2X3JlbGlkKSwgMCk7CisgICAgdl91cGRhdGVzIDo9IENP QUxFU0NFKHBnX3N0YXRfZ2V0X3R1cGxlc191cGRhdGVkKHZfcmVsaWQpLCAwKTsKKworICAg IC0tIEdldCBjdXJyZW50IHRyYW5zYWN0aW9uIHN0YXRzCisgICAgdl94YWN0X2hvdF91cGRh dGVzIDo9IENPQUxFU0NFKHBnX3N0YXRfZ2V0X3hhY3RfdHVwbGVzX2hvdF91cGRhdGVkKHZf cmVsaWQpLCAwKTsKKyAgICB2X3hhY3RfdXBkYXRlcyA6PSBDT0FMRVNDRShwZ19zdGF0X2dl dF94YWN0X3R1cGxlc191cGRhdGVkKHZfcmVsaWQpLCAwKTsKKworICAgIC0tIENvbWJpbmUg c3RhdHMKKyAgICB2X2hvdF91cGRhdGVzIDo9IHZfaG90X3VwZGF0ZXMgKyB2X3hhY3RfaG90 X3VwZGF0ZXM7CisgICAgdl91cGRhdGVzIDo9IHZfdXBkYXRlcyArIHZfeGFjdF91cGRhdGVz OworCisgICAgUkVUVVJOIFFVRVJZCisgICAgU0VMRUNUCisgICAgICAgIHBfdGFibGVfbmFt ZTo6VEVYVCwKKyAgICAgICAgdl91cGRhdGVzOjpCSUdJTlQgYXMgdG90YWxfdXBkYXRlcywK KyAgICAgICAgdl9ob3RfdXBkYXRlczo6QklHSU5UIGFzIGhvdF91cGRhdGVzLAorICAgICAg ICBDQVNFCisgICAgICAgICAgICBXSEVOIHZfdXBkYXRlcyA+IDAgVEhFTgorICAgICAgICAg ICAgICAgIFJPVU5EKCh2X2hvdF91cGRhdGVzOjpudW1lcmljIC8gdl91cGRhdGVzOjpudW1l cmljICogMTAwKTo6bnVtZXJpYywgMikKKyAgICAgICAgICAgIEVMU0UgMAorICAgICAgICBF TkQgYXMgaG90X3VwZGF0ZV9wZXJjZW50YWdlLAorICAgICAgICAodl9ob3RfdXBkYXRlcyA9 IGV4cGVjdGVkKTo6Qk9PTEVBTiBhcyBtYXRjaGVzX2V4cGVjdGVkLAorICAgICAgICAoRVhJ U1RTICgKKyAgICAgICAgICAgIFNFTEVDVCAxIEZST00gcGdfaW5kZXggV0hFUkUgaW5kcmVs aWQgPSB2X3JlbGlkCisgICAgICAgICkpOjpCT09MRUFOIGFzIGhhc19pbmRleGVzLAorICAg ICAgICAoCisgICAgICAgICAgICBTRUxFQ1QgQ09VTlQoKik6OklOVAorICAgICAgICAgICAg RlJPTSBwZ19pbmRleAorICAgICAgICAgICAgV0hFUkUgaW5kcmVsaWQgPSB2X3JlbGlkCisg ICAgICAgICkgYXMgaW5kZXhfY291bnQsCisgICAgICAgIENPQUxFU0NFKAorICAgICAgICAg ICAgKAorICAgICAgICAgICAgICAgIFNFTEVDVCAocmVnZXhwX21hdGNoKGFycmF5X3RvX3N0 cmluZyhyZWxvcHRpb25zLCAnLCcpLCAnZmlsbGZhY3Rvcj0oXGQrKScpKVsxXTo6aW50Cisg ICAgICAgICAgICAgICAgRlJPTSBwZ19jbGFzcworICAgICAgICAgICAgICAgIFdIRVJFIG9p ZCA9IHZfcmVsaWQKKyAgICAgICAgICAgICksCisgICAgICAgICAgICAxMDAKKyAgICAgICAg KSBhcyBmaWxsZmFjdG9yOworRU5EOworJCQ7CisKKy0tIC0tIC0tIC0tIC0tIC0tIC0tIC0t IC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0t CistLSBUaGlzIHRhYmxlIHdpbGwgaGF2ZSB0d28gY29sdW1ucyBhbmQgdHdvIGluZGV4ZXMs IG9uZSBvbiB0aGUgcHJpbWFyeSBrZXkKKy0tIGlkIGFuZCBvbmUgb24gdGhlIGV4cHJlc3Np b24gKGRvY3MtPj4nbmFtZScpLiAgVGhhdCBtZWFucyB0aGF0IHRoZSBpbmRleGVkCistLSBh dHRyaWJ1dGVzIGFyZSAnaWQnIGFuZCAnZG9jcycuCitDUkVBVEUgVEFCTEUgdChpZCBJTlQg UFJJTUFSWSBLRVksIGRvY3MgSlNPTkIpIFdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IG9m ZiwgZmlsbGZhY3RvciA9IDcwKTsKK0NSRUFURSBJTkRFWCB0X2RvY3NfaWR4IE9OIHQoKGRv Y3MtPj4nbmFtZScpKTsKK0lOU0VSVCBJTlRPIHQgVkFMVUVTICgxLCAneyJuYW1lIjogImpv aG4iLCAiZGF0YSI6ICJzb21lIGRhdGEifScpOworCistLSBEaXNhYmxlIGV4cHJlc3Npb24g Y2hlY2tzLgorQUxURVIgVEFCTEUgdCBTRVQgKGV4cHJlc3Npb25fY2hlY2tzID0gZmFsc2Up OworU0VMRUNUIHJlbG9wdGlvbnMgRlJPTSBwZ19jbGFzcyBXSEVSRSByZWxuYW1lID0gJ3Qn OworCistLSBXaGlsZSB0aGUgaW5kZXhlZCBhdHRyaWJ1dGUgIm5hbWUiIGlzIHVuY2hhbmdl ZCB3ZSd2ZSBkaXNhYmxlZCBleHByZXNzaW9uCistLSBjaGVja3Mgc28gdGhpcyB1cGRhdGUg c2hvdWxkIG5vdCBnbyBIT1QgYXMgdGhlIHN5c3RlbSBjYW4ndCBkZXRlcm1pbmUgaWYKKy0t IHRoZSBpbmRleGVkIGF0dHJpYnV0ZSBoYXMgY2hhbmdlZCB3aXRob3V0IGV2YWx1YXRpbmcg dGhlIGV4cHJlc3Npb24uCit1cGRhdGUgdCBzZXQgZG9jcz0neyJuYW1lIjogImpvaG4iLCAi ZGF0YSI6ICJzb21ldGhpbmcgZWxzZSJ9JyB3aGVyZSBpZD0xOworU0VMRUNUICogRlJPTSBj aGVja19ob3RfdXBkYXRlcygwKTsKKworLS0gUmUtZW5hYmxlIGV4cHJlc3Npb24gY2hlY2tz LgorQUxURVIgVEFCTEUgdCBTRVQgKGV4cHJlc3Npb25fY2hlY2tzID0gdHJ1ZSk7CitTRUxF Q1QgcmVsb3B0aW9ucyBGUk9NIHBnX2NsYXNzIFdIRVJFIHJlbG5hbWUgPSAndCc7CisKKy0t IFRoZSBpbmRleGVkIGF0dHJpYnV0ZSAibmFtZSIgd2l0aCB2YWx1ZSAiam9obiIgaXMgdW5j aGFuZ2VkLCBleHBlY3QgYSBIT1QgdXBkYXRlLgorVVBEQVRFIHQgU0VUIGRvY3M9J3sibmFt ZSI6ICJqb2huIiwgImRhdGEiOiAic29tZSBvdGhlciBkYXRhIn0nIFdIRVJFIGlkPTE7CitT RUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDEpOworCistLSBUaGUgZm9sbG93aW5n IHVwZGF0ZSBjaGFuZ2VzIHRoZSBpbmRleGVkIGF0dHJpYnV0ZSAibmFtZSIsIHRoaXMgc2hv dWxkIG5vdCBiZSBhIEhPVCB1cGRhdGUuCitVUERBVEUgdCBTRVQgZG9jcz0neyJuYW1lIjog InNtaXRoIiwgImRhdGEiOiAic29tZSBvdGhlciBkYXRhIn0nIFdIRVJFIGlkPTE7CitTRUxF Q1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDEpOworCistLSBOb3csIHRoaXMgdXBkYXRl IGRvZXMgbm90IGNoYW5nZSB0aGUgaW5kZXhlZCBhdHRyaWJ1dGUgIm5hbWUiIGZyb20gInNt aXRoIiwgdGhpcyBzaG91bGQgYmUgSE9ULgorVVBEQVRFIHQgU0VUIGRvY3M9J3sibmFtZSI6 ICJzbWl0aCIsICJkYXRhIjogInNvbWUgbW9yZSBkYXRhIn0nIFdIRVJFIGlkPTE7CitTRUxF Q1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDIpOworCitEUk9QIFRBQkxFIHQ7CisKKwor LS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0g LS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0KKy0tIFRoaXMgdGFibGUgaXMgdGhlIHNhbWUgYXMg dGhlIHByZXZpb3VzIG9uZSBidXQgaXQgaGFzIGEgdGhpcmQgaW5kZXguICBUaGUKKy0tIGlu ZGV4ICdjb2xpbmRleCcgaXNuJ3QgYW4gZXhwcmVzc2lvbiBpbmRleCwgaXQgaW5kZXhlcyB0 aGUgZW50aXJlIHZhbHVlCistLSBpbiB0aGUgZG9jcyBjb2x1bW4uICBUaGVyZSBhcmUgc3Rp bGwgb25seSB0d28gaW5kZXhlZCBhdHRyaWJ1dGVzIGZvciB0aGlzCistLSByZWxhdGlvbiwg dGhlIHNhbWUgdHdvIGFzIGJlZm9yZS4gIFRoZSBwcmVzZW5jZSBvZiBhbiBpbmRleCBvbiB0 aGUgZW50aXJlCistLSB2YWx1ZSBvZiB0aGUgZG9jcyBjb2x1bW4gc2hvdWxkIHByZXZlbnQg SE9UIHVwZGF0ZXMgZm9yIGFueSB1cGRhdGVzIHRvIGFueQorLS0gcG9ydGlvbiBvZiBKU09O QiBjb250ZW50IGluIHRoYXQgY29sdW1uLgorQ1JFQVRFIFRBQkxFIHQoaWQgSU5UIFBSSU1B UlkgS0VZLCBkb2NzIEpTT05CKSBXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBvZmYsIGZp bGxmYWN0b3IgPSA3MCk7CitDUkVBVEUgSU5ERVggdF9kb2NzX2lkeCBPTiB0KChkb2NzLT4+ J25hbWUnKSk7CitDUkVBVEUgSU5ERVggdF9kb2NzX2NvbF9pZHggT04gdChkb2NzKTsKK0lO U0VSVCBJTlRPIHQgVkFMVUVTICgxLCAneyJuYW1lIjogImpvaG4iLCAiZGF0YSI6ICJzb21l IGRhdGEifScpOworCistLSBUaGlzIHVwZGF0ZSBkb2Vzbid0IGNoYW5nZSB0aGUgdmFsdWUg b2YgdGhlIGV4cHJlc3Npb24gaW5kZXgsIGJ1dCBpdCBkb2VzCistLSBjaGFuZ2UgdGhlIGNv bnRlbnQgb2YgdGhlIGRvY3MgY29sdW1uIGFuZCBzbyBzaG91bGQgbm90IGJlIEhPVCBiZWNh dXNlIHRoZQorLS0gaW5kZXhlZCB2YWx1ZSBjaGFuZ2VkIGFzIGEgcmVzdWx0IG9mIHRoZSB1 cGRhdGUuCitVUERBVEUgdCBTRVQgZG9jcz0neyJuYW1lIjogImpvaG4iLCAiZGF0YSI6ICJz b21lIG90aGVyIGRhdGEifScgV0hFUkUgaWQ9MTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90 X3VwZGF0ZXMoMCk7CitEUk9QIFRBQkxFIHQ7CisKKworLS0gLS0gLS0gLS0gLS0gLS0gLS0g LS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0g LS0KKy0tIFRoZSB0YWJsZSBoYXMgb25lIGNvbHVtbiBkb2NzIGFuZCB0d28gaW5kZXhlcy4g IFRoZXkgYXJlIGJvdGggZXhwcmVzc2lvbgorLS0gaW5kZXhlcyByZWZlcmVuY2luZyB0aGUg c2FtZSBjb2x1bW4gYXR0cmlidXRlIChkb2NzKSBidXQgb25lIGlzIGEgcGFydGlhbAorLS0g aW5kZXguCitDUkVBVEUgVEFCTEUgdCAoZG9jcyBKU09OQikgV0lUSCAoYXV0b3ZhY3V1bV9l bmFibGVkID0gb2ZmLCBmaWxsZmFjdG9yID0gNzApOworSU5TRVJUIElOVE8gdCAoZG9jcykg VkFMVUVTICgneyJhIjogMCwgImIiOiAwfScpOworSU5TRVJUIElOVE8gdCAoZG9jcykgU0VM RUNUIGpzb25iX2J1aWxkX29iamVjdCgnYicsIG4pIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEw MCwgMTAwMDApIGFzIG47CitDUkVBVEUgSU5ERVggdF9pZHhfYSBPTiB0ICgoZG9jcy0+Pidh JykpOworQ1JFQVRFIElOREVYIHRfaWR4X2IgT04gdCAoKGRvY3MtPj4nYicpKSBXSEVSRSAo ZG9jcy0+PidiJyk6Om51bWVyaWMgPiA5OworCistLSBXZSdyZSB1c2luZyBCVFJFRSBpbmRl eGVzIGFuZCBmb3IgdGhpcyB0ZXN0IHdlIHdhbnQgdG8gbWFrZSBzdXJlIHRoYXQgdGhleSBy ZW1haW4KKy0tIGluIHN5bmMgd2l0aCBjaGFuZ2VzIHRvIG91ciByZWxhdGlvbi4gIEZvcmNl IHRoZSBjaG9pY2Ugb2YgaW5kZXggc2NhbnMgYmVsb3cgc28KKy0tIHRoYXQgd2Uga25vdyB3 ZSdyZSBjaGVja2luZyB0aGUgaW5kZXgncyB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgdmFsdWVz IHNob3VsZCBiZQorLS0gaW4gdGhlIGluZGV4IG9yIG5vdC4KK1NFVCBTRVNTSU9OIGVuYWJs ZV9zZXFzY2FuID0gT0ZGOworU0VUIFNFU1NJT04gZW5hYmxlX2JpdG1hcHNjYW4gPSBPRkY7 CisKKy0tIExlYXZlICdhJyB1bmNoYW5nZWQgYnV0IG1vZGlmeSAnYicgdG8gYSB2YWx1ZSBv dXRzaWRlIG9mIHRoZSBpbmRleCBwcmVkaWNhdGUuCistLSBUaGlzIHNob3VsZCBiZSBhIEhP VCB1cGRhdGUgYmVjYXVzZSBuZWl0aGVyIGluZGV4IGlzIGNoYW5nZWQuCitVUERBVEUgdCBT RVQgZG9jcyA9IGpzb25iX2J1aWxkX29iamVjdCgnYScsIDAsICdiJywgMSkgV0hFUkUgKGRv Y3MtPj4nYScpOjpudW1lcmljID0gMDsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0 ZXMoMSk7CistLSBMZXQncyBjaGVjayB0byBtYWtlIHN1cmUgdGhhdCB0aGUgaW5kZXggZG9l cyBub3QgY29udGFpbiBhIHZhbHVlIGZvciAnYicKK0VYUExBSU4gKENPU1RTIE9GRikgU0VM RUNUICogRlJPTSB0IFdIRVJFIChkb2NzLT4+J2InKTo6bnVtZXJpYyA+IDkgQU5EIChkb2Nz LT4+J2InKTo6bnVtZXJpYyA8IDEwMDsKK1NFTEVDVCAqIEZST00gdCBXSEVSRSAoZG9jcy0+ PidiJyk6Om51bWVyaWMgPiA5IEFORCAoZG9jcy0+PidiJyk6Om51bWVyaWMgPCAxMDA7CisK Ky0tIExlYXZlICdhJyB1bmNoYW5nZWQgYnV0IG1vZGlmeSAnYicgdG8gYSB2YWx1ZSB3aXRo aW4gdGhlIGluZGV4IHByZWRpY2F0ZS4KKy0tIFRoaXMgcmVwcmVzZW50cyBhIGNoYW5nZSBm b3IgZmllbGQgJ2InIGZyb20gdW5pbmRleGVkIHRvIGluZGV4ZWQgYW5kIHNvCistLSB0aGlz IHNob3VsZCBub3QgdGFrZSB0aGUgSE9UIHBhdGguCitVUERBVEUgdCBTRVQgZG9jcyA9IGpz b25iX2J1aWxkX29iamVjdCgnYScsIDAsICdiJywgMTApIFdIRVJFIChkb2NzLT4+J2EnKTo6 bnVtZXJpYyA9IDA7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDEpOworLS0g TGV0J3MgY2hlY2sgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGluZGV4IGNvbnRhaW5zIHRoZSBu ZXcgdmFsdWUgb2YgJ2InCitFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCAqIEZST00gdCBX SEVSRSAoZG9jcy0+PidiJyk6Om51bWVyaWMgPiA5IEFORCAoZG9jcy0+PidiJyk6Om51bWVy aWMgPCAxMDA7CitTRUxFQ1QgKiBGUk9NIHQgV0hFUkUgKGRvY3MtPj4nYicpOjpudW1lcmlj ID4gOSBBTkQgKGRvY3MtPj4nYicpOjpudW1lcmljIDwgMTAwOworCistLSBUaGlzIHVwZGF0 ZSBtb2RpZmllcyB0aGUgdmFsdWUgb2YgJ2EnLCBhbiBpbmRleGVkIGZpZWxkLCBzbyBpdCBh bHNvIGNhbm5vdAorLS0gYmUgYSBIT1QgdXBkYXRlLgorVVBEQVRFIHQgU0VUIGRvY3MgPSBq c29uYl9idWlsZF9vYmplY3QoJ2EnLCAxLCAnYicsIDEwKSBXSEVSRSAoZG9jcy0+PidiJyk6 Om51bWVyaWMgPSAxMDsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMSk7CisK Ky0tIFRoaXMgdXBkYXRlIGNoYW5nZXMgYm90aCAnYScgYW5kICdiJyB0byBuZXcgdmFsdWVz IHRoYXQgcmVxdWlyZSBpbmRleCB1cGRhdGVzLAorLS0gdGhpcyBjYW5ub3QgdXNlIHRoZSBI T1QgcGF0aC4KK1VQREFURSB0IFNFVCBkb2NzID0ganNvbmJfYnVpbGRfb2JqZWN0KCdhJywg MiwgJ2InLCAxMikgV0hFUkUgKGRvY3MtPj4nYicpOjpudW1lcmljID0gMTA7CitTRUxFQ1Qg KiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDEpOworLS0gTGV0J3MgY2hlY2sgdG8gbWFrZSBz dXJlIHRoYXQgdGhlIGluZGV4IGNvbnRhaW5zIHRoZSBuZXcgdmFsdWUgb2YgJ2InCitFWFBM QUlOIChDT1NUUyBPRkYpIFNFTEVDVCAqIEZST00gdCBXSEVSRSAoZG9jcy0+PidiJyk6Om51 bWVyaWMgPiA5IEFORCAoZG9jcy0+PidiJyk6Om51bWVyaWMgPCAxMDA7CitTRUxFQ1QgKiBG Uk9NIHQgV0hFUkUgKGRvY3MtPj4nYicpOjpudW1lcmljID4gOSBBTkQgKGRvY3MtPj4nYicp OjpudW1lcmljIDwgMTAwOworCistLSBUaGlzIHVwZGF0ZSBjaGFuZ2VzICdiJyB0byBhIHZh bHVlIG91dHNpZGUgaXRzIHByZWRpY2F0ZSByZXF1aXJpbmcgdGhhdAorLS0gd2UgcmVtb3Zl IGl0IGZyb20gdGhlIGluZGV4LiAgVGhhdCdzIGEgdHJhbnNpdGlvbiB0aGF0IGNhbid0IGJl IGRvbmUKKy0tIGR1cmluZyBhIEhPVCB1cGRhdGUuCitVUERBVEUgdCBTRVQgZG9jcyA9IGpz b25iX2J1aWxkX29iamVjdCgnYScsIDIsICdiJywgMSkgV0hFUkUgKGRvY3MtPj4nYicpOjpu dW1lcmljID0gMTI7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDEpOworLS0g TGV0J3MgY2hlY2sgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGluZGV4IG5vIGxvbmdlciBjb250 YWlucyB0aGUgdmFsdWUgb2YgJ2InCitFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCAqIEZS T00gdCBXSEVSRSAoZG9jcy0+PidiJyk6Om51bWVyaWMgPiA5IEFORCAoZG9jcy0+PidiJyk6 Om51bWVyaWMgPCAxMDA7CitTRUxFQ1QgKiBGUk9NIHQgV0hFUkUgKGRvY3MtPj4nYicpOjpu dW1lcmljID4gOSBBTkQgKGRvY3MtPj4nYicpOjpudW1lcmljIDwgMTAwOworCitEUk9QIFRB QkxFIHQ7CitTRVQgU0VTU0lPTiBlbmFibGVfc2Vxc2NhbiA9IE9OOworU0VUIFNFU1NJT04g ZW5hYmxlX2JpdG1hcHNjYW4gPSBPTjsKKworLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0g LS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0KKy0t IFRlc3RzIHRvIGVuc3VyZSB0aGF0IEhPVCB1cGRhdGVzIGFyZSBub3QgcGVyZm9ybWVkIHdo ZW4gbXVsdGlwbGUgaW5kZXhlZAorLS0gYXR0cmlidXRlcyBhcmUgdXBkYXRlZC4KK0NSRUFU RSBUQUJMRSB0KGEgSU5ULCBiIElOVCkgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gb2Zm LCBmaWxsZmFjdG9yID0gNzApOworQ1JFQVRFIElOREVYIHRfaWR4X2EgT04gdChhKTsKK0NS RUFURSBJTkRFWCB0X2lkeF9iIE9OIHQoYWJzKGIpKTsKK0lOU0VSVCBJTlRPIHQgVkFMVUVT ICgxLCAtMSk7CisKKy0tIEJvdGggYXJlIHVwZGF0ZWQsIHRoZSBzZWNvbmQgaXMgYW4gZXhw cmVzc2lvbiBpbmRleCB3aXRoIGFuIHVuY2hhbmdlZAorLS0gaW5kZXggdmFsdWUuICBUaGUg Y2hhbmdlIHRvIHRoZSBpbmRleCBvbiBhIHNob3VsZCBwcmV2ZW50IEhPVCB1cGRhdGVzLgor VVBEQVRFIHQgU0VUIGEgPSAyLCBiID0gMSBXSEVSRSBhID0gMTsKK1NFTEVDVCAqIEZST00g Y2hlY2tfaG90X3VwZGF0ZXMoMCk7CisKK0RST1AgVEFCTEUgdDsKKworCistLSAtLSAtLSAt LSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAt LSAtLSAtLSAtLSAtLQorLS0gVGVzdHMgdG8gY2hlY2sgdGhlIGV4cHJlc3Npb25fY2hlY2tz IHJlbG9wdGlvbiBiZWhhdmlvci4KKy0tCitDUkVBVEUgVEFCTEUgdChhIElOVCwgYiBJTlQp IFdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IG9mZiwgZmlsbGZhY3RvciA9IDcwKTsKK0NS RUFURSBJTkRFWCB0X2lkeF9hIE9OIHQoYWJzKGEpKSBXSEVSRSBhYnMoYSkgPiAxMDsKK0NS RUFURSBJTkRFWCB0X2lkeF9iIE9OIHQoYWJzKGIpKTsKK0lOU0VSVCBJTlRPIHQgVkFMVUVT ICgtMSwgLTEpLCAoLTIsIC0yKSwgKC0zLCAtMyksICgtNCwgLTQpOworCitTRVQgU0VTU0lP TiBlbmFibGVfc2Vxc2NhbiA9IE9GRjsKK1NFVCBTRVNTSU9OIGVuYWJsZV9iaXRtYXBzY2Fu ID0gT0ZGOworCistLSBEaXNhYmxlIGV4cHJlc3Npb24gY2hlY2tzIG9uIGluZGV4ZXMgYW5k IHBhcnRpYWwgaW5kZXggcHJlZGljYXRlcy4KK0FMVEVSIFRBQkxFIHQgU0VUIChleHByZXNz aW9uX2NoZWNrcyA9IGZhbHNlKTsKKworLS0gQmVmb3JlIGFuZCBhZnRlciB2YWx1ZXMgb2Yg YSBhcmUgb3V0c2lkZSB0aGUgcHJlZGljYXRlIG9mIHRoZSBpbmRleCBhbmQKKy0tIHRoZSBp bmRleGVkIHZhbHVlIG9mIGIgaGFzbid0IGNoYW5nZWQgaG93ZXZlciB3ZSd2ZSBkaXNhYmxl ZCBleHByZXNzaW9uCistLSBjaGVja3Mgc28gdGhpcyBzaG91bGQgbm90IGJlIGEgSE9UIHVw ZGF0ZS4KKy0tICgtMSwgLTEpIC0+ICgtNSwgLTEpCitVUERBVEUgdCBTRVQgYSA9IC01LCBi ID0gLTEgV0hFUkUgYSA9IC0xOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygw KTsKKworLS0gRW5hYmxlIGV4cHJlc3Npb24gY2hlY2tzIG9uIGluZGV4ZXMsIGJ1dCBub3Qg b24gcHJlZGljYXRlcyB5ZXQuCitBTFRFUiBUQUJMRSB0IFNFVCAoZXhwcmVzc2lvbl9jaGVj a3MgPSB0cnVlKTsKKworLS0gVGhlIGluZGV4ZWQgdmFsdWUgb2YgYiBoYXNuJ3QgY2hhbmdl ZCwgdGhpcyBzaG91bGQgYmUgYSBIT1QgdXBkYXRlLgorLS0gKC01LCAtMSkgLT4gKC01LCAx KQorVVBEQVRFIHQgU0VUIGIgPSAxIFdIRVJFIGEgPSAtNTsKK1NFTEVDVCAqIEZST00gY2hl Y2tfaG90X3VwZGF0ZXMoMSk7CisKKy0tIE5vdyB0aGF0IHdlJ3JlIG5vdCBjaGVja2luZyB0 aGUgcHJlZGljYXRlIG9mIHRoZSBwYXJ0aWFsIGluZGV4LCB0aGlzCistLSB1cGRhdGUgb2Yg YSBmcm9tIC01IHRvIDUgc2hvdWxkIGJlIEhPVCBiZWNhdXNlIHdlIHNob3VsZCBpZ25vcmUg dGhlCistLSBwcmVkaWNhdGUgYW5kIGNoZWNrIHRoZSBleHByZXNzaW9uIGFuZCBmaW5kIGl0 IHVuY2hhbmdlZC4KKy0tICgtNSwgMSkgLT4gKDUsIDEpCitVUERBVEUgdCBTRVQgYSA9IDUg V0hFUkUgYSA9IC01OworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygyKTsKKwor LS0gVGhpcyB1cGRhdGUgbWVldHMgdGhlIGNyaXRlcmEgZm9yIHRoZSBwYXJ0aWFsIGluZGV4 IGFuZCBzaG91bGQgbm90CistLSBiZSBIT1QuICBMZXQncyBtYWtlIHN1cmUgb2YgdGhhdCBh bmQgY2hlY2sgdGhlIGluZGV4IGFzIHdlbGwuCistLSAoLTQsIC00KSAtPiAoLTExLCAtNCkK K1VQREFURSB0IFNFVCBhID0gLTExIFdIRVJFIGEgPSAtNDsKK1NFTEVDVCAqIEZST00gY2hl Y2tfaG90X3VwZGF0ZXMoMik7CitFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCAqIEZST00g dCBXSEVSRSBhYnMoYSkgPiAxMDsKK1NFTEVDVCAqIEZST00gdCBXSEVSRSBhYnMoYSkgPiAx MDsKKworLS0gKC0xMSwgLTQpIC0+ICgxMSwgLTQpCitVUERBVEUgdCBTRVQgYSA9IDExIFdI RVJFIGEgPSAtMTE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDMpOworRVhQ TEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1QgKiBGUk9NIHQgV0hFUkUgYWJzKGEpID4gMTA7CitT RUxFQ1QgKiBGUk9NIHQgV0hFUkUgYWJzKGEpID4gMTA7CisKKy0tICgxMSwgLTQpIC0+ICgt NCwgLTQpCitVUERBVEUgdCBTRVQgYSA9IC00IFdIRVJFIGEgPSAxMTsKK1NFTEVDVCAqIEZS T00gY2hlY2tfaG90X3VwZGF0ZXMoMyk7CitFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCAq IEZST00gdCBXSEVSRSBhYnMoYSkgPiAxMDsKK1NFTEVDVCAqIEZST00gdCBXSEVSRSBhYnMo YSkgPiAxMDsKKworLS0gVGhpcyB1cGRhdGUgb2YgYSBmcm9tIDUgdG8gLTEgaXMgSE9UIGRl c3BpdGUgdGhhdCBhdHRyaWJ1dGUKKy0tIGJlaW5nIGluZGV4ZWQgYmVjYXVzZSB0aGUgYmVm b3JlIGFuZCBhZnRlciB2YWx1ZXMgZm9yIHRoZQorLS0gcGFydGlhbCBpbmRleCBwcmVkaWNh dGUgYXJlIG91dHNpZGUgdGhlIGluZGV4IGRlZmluaXRpb24uCistLSAoNSwgMSkgLT4gKC0x LCAxKQorVVBEQVRFIHQgU0VUIGEgPSAtMSBXSEVSRSBhID0gNTsKK1NFTEVDVCAqIEZST00g Y2hlY2tfaG90X3VwZGF0ZXMoNCk7CisKKy0tIFRoaXMgdXBkYXRlIG9mIGEgZnJvbSAtMiB0 byAtMSB3aXRoIHByZWRpY2F0ZSBjaGVja3MgZW5hYmxlZCBzaG91bGQgYmUKKy0tIEhPVCBi ZWNhdXNlIHRoZSBiZWZvcmUvYWZ0ZXIgdmFsdWVzIG9mIGEgYXJlIGJvdGggb3V0c2lkZSB0 aGUgcHJlZGljYXRlCistLSBvZiB0aGUgcGFydGlhbCBpbmRleC4KKy0tICgtMSwgMSkgLT4g KC0yLCAxKQorVVBEQVRFIHQgU0VUIGEgPSAtMiBXSEVSRSBhID0gLTE7CitTRUxFQ1QgKiBG Uk9NIGNoZWNrX2hvdF91cGRhdGVzKDUpOworCistLSBUaGUgaW5kZXhlZCB2YWx1ZSBmb3Ig YiBpc24ndCBjaGFuZ2luZywgdGhpcyBzaG91bGQgYmUgSE9ULgorLS0gKC0yLCAtMikgLT4g KC0yLCAyKQorVVBEQVRFIHQgU0VUIGIgPSAyIFdIRVJFIGIgPSAtMjsKK1NFTEVDVCAqIEZS T00gY2hlY2tfaG90X3VwZGF0ZXMoNik7CitFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCBh YnMoYikgRlJPTSB0OworU0VMRUNUIGFicyhiKSBGUk9NIHQ7CisKKy0tIEJlZm9yZSBhbmQg YWZ0ZXIgdmFsdWVzIGZvciBhIGFyZSBvdXRzaWRlIHRoZSBwcmVkaWNhdGUgb2YgdGhlIGlu ZGV4LAorLS0gYW5kIGJlY2F1c2Ugd2UncmUgY2hlY2tpbmcgdGhpcyBzaG91bGQgYmUgSE9U LgorLS0gKC0yLCAxKSAtPiAoNSwgMSkKKy0tICgtMiwgLTIpIC0+ICg1LCAtMikKK1VQREFU RSB0IFNFVCBhID0gNSBXSEVSRSBhID0gLTI7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91 cGRhdGVzKDgpOworCitFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCAqIEZST00gdCBXSEVS RSBhYnMoYSkgPiAxMDsKK1NFTEVDVCAqIEZST00gdCBXSEVSRSBhYnMoYSkgPiAxMDsKKwor U0VMRUNUICogRlJPTSB0OworCitEUk9QIFRBQkxFIHQ7CitTRVQgU0VTU0lPTiBlbmFibGVf c2Vxc2NhbiA9IE9OOworU0VUIFNFU1NJT04gZW5hYmxlX2JpdG1hcHNjYW4gPSBPTjsKKwor CistLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAt LSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLQorLS0gVGhlIHRlc3RzIGhlcmUgZXhhbWluZXMg dGhlIGJlaGF2aW9yIG9mIEhPVCB1cGRhdGVzIHdoZW4gdGhlIHJlbGF0aW9uCistLSBoYXMg YSBKU09OQiBjb2x1bW4gd2l0aCBhbiBpbmRleCBvbiB0aGUgZmllbGQgJ2EnIGFuZCB0aGUg cGFydGlhbCBpbmRleAorLS0gZXhwcmVzc2lvbiBvbiBhIGRpZmZlcmVudCBKU09OQiBmaWVs ZCAnYicuCitDUkVBVEUgVEFCTEUgdChkb2NzIEpTT05CKSBXSVRIIChhdXRvdmFjdXVtX2Vu YWJsZWQgPSBvZmYsIGZpbGxmYWN0b3IgPSA3MCk7CitDUkVBVEUgSU5ERVggdF9kb2NzX2lk eCBPTiB0KChkb2NzLT4nYScpKSBXSEVSRSAoZG9jcy0+J2InKTo6aW50ZWdlciA9IDE7CitJ TlNFUlQgSU5UTyB0IFZBTFVFUyAoJ3siYSI6IDEsICJiIjogMX0nKTsKKworRVhQTEFJTiAo Q09TVFMgT0ZGKSBTRUxFQ1QgKiBGUk9NIHQ7CitTRUxFQ1QgKiBGUk9NIHQ7CisKK1NFVCBT RVNTSU9OIGVuYWJsZV9zZXFzY2FuID0gT0ZGOworU0VUIFNFU1NJT04gZW5hYmxlX2JpdG1h cHNjYW4gPSBPRkY7CisKK0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUICogRlJPTSB0IFdI RVJFIChkb2NzLT4nYicpOjppbnRlZ2VyID0gMTsKK1NFTEVDVCAqIEZST00gdCBXSEVSRSAo ZG9jcy0+J2InKTo6aW50ZWdlciA9IDE7CisKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3Vw ZGF0ZXMoMCk7CisKK1VQREFURSB0IFNFVCBkb2NzPSd7ImEiOiAxLCAiYiI6IDB9JzsKK1NF TEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMCk7CisKK1NFTEVDVCAqIEZST00gdCBX SEVSRSAoZG9jcy0+J2InKTo6aW50ZWdlciA9IDE7CisKK1NFVCBTRVNTSU9OIGVuYWJsZV9z ZXFzY2FuID0gT047CitTRVQgU0VTU0lPTiBlbmFibGVfYml0bWFwc2NhbiA9IE9OOworCitE Uk9QIFRBQkxFIHQ7CisKKworLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0g LS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0KKy0tIFRlc3RzIGZv ciBtdWx0aS1jb2x1bW4gaW5kZXhlcworLS0KK0NSRUFURSBUQUJMRSB0KGlkIElOVCwgZG9j cyBKU09OQikgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gb2ZmLCBmaWxsZmFjdG9yID0g NzApOworQ1JFQVRFIElOREVYIHRfZG9jc19pZHggT04gdChpZCwgKGRvY3MtPidhJykpOwor SU5TRVJUIElOVE8gdCBWQUxVRVMgKDEsICd7ImEiOiAxLCAiYiI6IDF9Jyk7CisKK1NFVCBT RVNTSU9OIGVuYWJsZV9zZXFzY2FuID0gT0ZGOworU0VUIFNFU1NJT04gZW5hYmxlX2JpdG1h cHNjYW4gPSBPRkY7CisKK0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUICogRlJPTSB0IFdI RVJFIGlkID4gMCBBTkQgKGRvY3MtPidhJyk6OmludGVnZXIgPiAwOworU0VMRUNUICogRlJP TSB0IFdIRVJFIGlkID4gMCBBTkQgKGRvY3MtPidhJyk6OmludGVnZXIgPiAwOworCitTRUxF Q1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDApOworCistLSBDaGFuZ2luZyB0aGUgaWQg YXR0cmlidXRlIHdoaWNoIGlzIGFuIGluZGV4ZWQgYXR0cmlidXRlIHNob3VsZAorLS0gcHJl dmVudCBIT1QgdXBkYXRlcy4KK1VQREFURSB0IFNFVCBpZCA9IDI7CitTRUxFQ1QgKiBGUk9N IGNoZWNrX2hvdF91cGRhdGVzKDApOworCitTRUxFQ1QgKiBGUk9NIHQgV0hFUkUgaWQgPiAw IEFORCAoZG9jcy0+J2EnKTo6aW50ZWdlciA+IDA7CisKKy0tIENoYW5naW5nIHRoZSBkb2Nz LT4nYScgZmllbGQgaW4gdGhlIGluZGV4ZWQgYXR0cmlidXRlICdkb2NzJworLS0gc2hvdWxk IHByZXZlbnQgSE9UIHVwZGF0ZXMuCitVUERBVEUgdCBTRVQgZG9jcz0neyJhIjogLTIsICJi IjogMX0nOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygwKTsKKworU0VMRUNU ICogRlJPTSB0IFdIRVJFIGlkID4gMCBBTkQgKGRvY3MtPidhJyk6OmludGVnZXIgPCAwOwor CistLSBMZWF2aW5nIHRoZSBkb2NzLT4nYScgYXR0cmlidXRlIHVuY2hhbmdlZCBtZWFucyB0 aGF0IHRoZSBleHByZXNzaW9uCistLSBpcyB1bmNoYW5nZWQgYW5kIGJlY2F1c2UgdGhlICdp ZCcgYXR0cmlidXRlIGlzbid0IGluIHRoZSBtb2RpZmllZAorLS0gc2V0IHRoZSBpbmRleGVk IHR1cGxlIGlzIHVuY2hhbmdlZCwgdGhpcyBjYW4gZ28gSE9ULgorVVBEQVRFIHQgU0VUIGRv Y3M9J3siYSI6IC0yLCAiYiI6IDJ9JzsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0 ZXMoMSk7CisKK1NFTEVDVCAqIEZST00gdCBXSEVSRSBpZCA+IDAgQU5EIChkb2NzLT4nYScp OjppbnRlZ2VyIDwgMDsKKworLS0gSGVyZSB3ZSBjaGFuZ2UgdGhlICdpZCcgYXR0cmlidXRl IGFuZCB0aGUgJ2RvY3MnIGF0dHJpYnV0ZSBzZXR0aW5nCistLSB0aGUgZXhwcmVzc2lvbiBk b2NzLT4nYScgdG8gYSBuZXcgdmFsdWUsIHRoaXMgY2Fubm90IGJlIGEgSE9UIHVwZGF0ZS4K K1VQREFURSB0IFNFVCBpZCA9IDMsIGRvY3M9J3siYSI6IDMsICJiIjogM30nOworU0VMRUNU ICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygxKTsKKworU0VMRUNUICogRlJPTSB0IFdIRVJF IGlkID4gMCBBTkQgKGRvY3MtPidhJyk6OmludGVnZXIgPiAwOworCitTRVQgU0VTU0lPTiBl bmFibGVfc2Vxc2NhbiA9IE9OOworU0VUIFNFU1NJT04gZW5hYmxlX2JpdG1hcHNjYW4gPSBP TjsKKworRFJPUCBUQUJMRSB0OworCistLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAt LSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLQorLS0gVGhp cyB0YWJsZSBoYXMgYSBzaW5nbGUgY29sdW1uICdlbWFpbCcgYW5kIGEgdW5pcXVlIGNvbnN0 cmFpbnQgb24gaXQgdGhhdAorLS0gc2hvdWxkIHByZWNsdWRlIEhPVCB1cGRhdGVzLgorQ1JF QVRFIFRBQkxFIHVzZXJzICgKKyAgICB1c2VyX2lkIHNlcmlhbCBwcmltYXJ5IGtleSwKKyAg ICBuYW1lIFZBUkNIQVIoMjU1KSBOT1QgTlVMTCwKKyAgICBlbWFpbCBWQVJDSEFSKDI1NSkg Tk9UIE5VTEwsCisgICAgRVhDTFVERSBVU0lORyBidHJlZSAobG93ZXIoZW1haWwpIFdJVEgg PSkKKyk7CisKKy0tIEFkZCBzb21lIGRhdGEgdG8gdGhlIHRhYmxlIGFuZCB0aGVuIHVwZGF0 ZSBpdCBpbiB3YXlzIHRoYXQgc2hvdWxkIGFuZCBzaG91bGQKKy0tIG5vdCBiZSBIT1QgdXBk YXRlcy4KK0lOU0VSVCBJTlRPIHVzZXJzIChuYW1lLCBlbWFpbCkgVkFMVUVTCisoJ3VzZXIx JywgJ3VzZXIxQGV4YW1wbGUuY29tJyksCisoJ3VzZXIyJywgJ3VzZXIyQGV4YW1wbGUuY29t JyksCisoJ3Rha2VuJywgJ3Rha2VuQEVYQU1QTEUuY29tJyksCisoJ3lvdScsICd5b3VAZG9t YWluLmNvbScpLAorKCd0YWtlbicsICd0YWtlbkBkb21haW4uY29tJyk7CisKKy0tIFNob3Vs ZCBmYWlsIGJlY2F1c2Ugb2YgdGhlIHVuaXF1ZSBjb25zdHJhaW50IG9uIHRoZSBlbWFpbCBj b2x1bW4uCitVUERBVEUgdXNlcnMgU0VUIGVtYWlsID0gJ3VzZXIxQGV4YW1wbGUuY29tJyBX SEVSRSBlbWFpbCA9ICd1c2VyMkBleGFtcGxlLmNvbSc7CitTRUxFQ1QgKiBGUk9NIGNoZWNr X2hvdF91cGRhdGVzKDAsICd1c2VycycpOworCistLSBTaG91bGQgc3VjY2VlZCBiZWNhdXNl IHRoZSBlbWFpbCBjb2x1bW4gaXMgbm90IGJlaW5nIHVwZGF0ZWQgYW5kIHNob3VsZCBnbyBI T1QuCitVUERBVEUgdXNlcnMgU0VUIG5hbWUgPSAnZm9vJyBXSEVSRSBlbWFpbCA9ICd1c2Vy MUBleGFtcGxlLmNvbSc7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDEsICd1 c2VycycpOworCistLSBDcmVhdGUgYSBwYXJ0aWFsIGluZGV4IG9uIHRoZSBlbWFpbCBjb2x1 bW4sIHVwZGF0ZXMKK0NSRUFURSBJTkRFWCBpZHhfdXNlcnNfZW1haWxfbm9fZXhhbXBsZSBP TiB1c2VycyAobG93ZXIoZW1haWwpKSBXSEVSRSBsb3dlcihlbWFpbCkgTElLRSAnJUBleGFt cGxlLmNvbSUnOworCistLSBBbiB1cGRhdGUgdGhhdCBjaGFuZ2VzIHRoZSBlbWFpbCBjb2x1 bW4gYnV0IG5vdCB0aGUgaW5kZXhlZCBwb3J0aW9uIG9mIGl0IGFuZCBmYWxscyBvdXRzaWRl IHRoZSBjb25zdHJhaW50LgorLS0gU2hvdWxkbid0IGJlIGEgSE9UIHVwZGF0ZSBiZWNhdXNl IG9mIHRoZSBleGNsdXNpb24gY29uc3RyYWludC4KK1VQREFURSB1c2VycyBTRVQgZW1haWwg PSAneW91KzJAZG9tYWluLmNvbScgV0hFUkUgbmFtZSA9ICd5b3UnOworU0VMRUNUICogRlJP TSBjaGVja19ob3RfdXBkYXRlcygxLCAndXNlcnMnKTsKKworLS0gQW4gdXBkYXRlIHRoYXQg Y2hhbmdlcyB0aGUgZW1haWwgY29sdW1uIGJ1dCBub3QgdGhlIGluZGV4ZWQgcG9ydGlvbiBv ZiBpdCBhbmQgZmFsbHMgd2l0aGluIHRoZSBjb25zdHJhaW50LgorLS0gQWdhaW4sIHNob3Vs ZCBmYWlsIGNvbnN0cmFpbnQgYW5kIGZhaWwgdG8gYmUgYSBIT1QgdXBkYXRlLgorVVBEQVRF IHVzZXJzIFNFVCBlbWFpbCA9ICd0YWtlbkBkb21haW4uY29tJyBXSEVSRSBuYW1lID0gJ3lv dSc7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDEsICd1c2VycycpOworCitE Uk9QIFRBQkxFIHVzZXJzOworCistLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAt LSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLQorLS0gQW5vdGhl ciB0ZXN0IG9mIGNvbnN0cmFpbnRzIHNwb2lsaW5nIEhPVCB1cGRhdGVzLCB0aGlzIHRpbWUg d2l0aCBhIHJhbmdlLgorQ1JFQVRFIFRBQkxFIGV2ZW50cyAoCisgICAgaWQgc2VyaWFsIHBy aW1hcnkga2V5LAorICAgIG5hbWUgVkFSQ0hBUigyNTUpIE5PVCBOVUxMLAorICAgIGV2ZW50 X3RpbWUgdHN0enJhbmdlLAorICAgIGNvbnN0cmFpbnQgbm9fc2NyZWVuaW5nX3RpbWVfb3Zl cmxhcCBleGNsdWRlIHVzaW5nIGdpc3QgKAorICAgICAgICBldmVudF90aW1lIFdJVEggJiYK KyAgICApCispOworCistLSBBZGQgdHdvIG5vbi1vdmVybGFwcGluZyBldmVudHMuCitJTlNF UlQgSU5UTyBldmVudHMgKGlkLCBldmVudF90aW1lLCBuYW1lKQorVkFMVUVTCisgICAgKDEs ICdbIjIwMjMtMDEtMDEgMTk6MDA6MDAiLCAiMjAyMy0wMS0wMSAyMDo0NTowMCJdJywgJ2V2 ZW50MScpLAorICAgICgyLCAnWyIyMDIzLTAxLTAxIDIxOjAwOjAwIiwgIjIwMjMtMDEtMDEg MjE6NDU6MDAiXScsICdldmVudDInKTsKKworLS0gVXBkYXRlIHRoZSBmaXJzdCBldmVudCB0 byBvdmVybGFwIHdpdGggdGhlIHNlY29uZCwgc2hvdWxkIGZhaWwgdGhlIGNvbnN0cmFpbnQg YW5kIG5vdCBiZSBIT1QuCitVUERBVEUgZXZlbnRzIFNFVCBldmVudF90aW1lID0gJ1siMjAy My0wMS0wMSAyMDowMDowMCIsICIyMDIzLTAxLTAxIDIxOjQ1OjAwIl0nIFdIRVJFIGlkID0g MTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMCwgJ2V2ZW50cycpOworCist LSBVcGRhdGUgdGhlIGZpcnN0IGV2ZW50IHRvIG5vdCBvdmVybGFwIHdpdGggdGhlIHNlY29u ZCwgYWdhaW4gbm90IEhPVCBkdWUgdG8gdGhlIGNvbnN0cmFpbnQuCitVUERBVEUgZXZlbnRz IFNFVCBldmVudF90aW1lID0gJ1siMjAyMy0wMS0wMSAyMjowMDowMCIsICIyMDIzLTAxLTAx IDIyOjQ1OjAwIl0nIFdIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3Vw ZGF0ZXMoMCwgJ2V2ZW50cycpOworCistLSBVcGRhdGUgdGhlIGZpcnN0IGV2ZW50IHRvIG5v dCBvdmVybGFwIHdpdGggdGhlIHNlY29uZCwgdGhpcyB0aW1lIHdlJ3JlIEhPVCBiZWNhdXNl IHdlIGRvbid0IG92ZXJsYXAgd2l0aCB0aGUgY29uc3RyYWludC4KK1VQREFURSBldmVudHMg U0VUIG5hbWUgPSAnbmV3IG5hbWUgaGVyZScgV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJP TSBjaGVja19ob3RfdXBkYXRlcygxLCAnZXZlbnRzJyk7CisKK0RST1AgVEFCTEUgZXZlbnRz OworCistLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAt LSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLQorLS0gQSB0ZXN0IHRvIGVuc3VyZSB0aGF0 IG9ubHkgbW9kaWZpZWQgc3VtbWFyaXppbmcgaW5kZXhlcyBhcmUgdXBkYXRlZCwgbm90Cist LSBhbGwgb2YgdGhlbS4KK0NSRUFURSBUQUJMRSBleCAoaWQgU0VSSUFMIHByaW1hcnkga2V5 LCBhdHQxIEpTT05CLCBhdHQyIHRleHQsIGF0dDMgdGV4dCwgYXR0NCB0ZXh0KSBXSVRIIChm aWxsZmFjdG9yID0gNjApOworQ1JFQVRFIElOREVYIGV4X2V4cHIxX2lkeCBPTiBleCBVU0lO RyBidHJlZSgoYXR0MS0+J2RhdGEnKSk7CitDUkVBVEUgSU5ERVggZXhfc3VtcjFfaWR4IE9O IGV4IFVTSU5HIEJSSU4oYXR0Mik7CitDUkVBVEUgSU5ERVggZXhfZXhwcjJfaWR4IE9OIGV4 IFVTSU5HIGJ0cmVlKChhdHQxLT4nYScpKTsKK0NSRUFURSBJTkRFWCBleF9leHByM19pZHgg T04gZXggVVNJTkcgYnRyZWUoKGF0dDEtPidiJykpOworQ1JFQVRFIElOREVYIGV4X2V4cHI0 X2lkeCBPTiBleCBVU0lORyBidHJlZSgoYXR0MS0+J2MnKSk7CitDUkVBVEUgSU5ERVggZXhf c3VtcjJfaWR4IE9OIGV4IFVTSU5HIEJSSU4oYXR0Myk7CitDUkVBVEUgSU5ERVggZXhfc3Vt cjNfaWR4IE9OIGV4IFVTSU5HIEJSSU4oYXR0NCk7CitDUkVBVEUgSU5ERVggZXhfZXhwcjVf aWR4IE9OIGV4IFVTSU5HIGJ0cmVlKChhdHQxLT4nZCcpKTsKK0lOU0VSVCBJTlRPIGV4IChh dHQxLCBhdHQyKSBWQUxVRVMgKCd7ImRhdGEiOiBbXX0nOjpqc29uLCAnbm90aGluZyBzcGVj aWFsJyk7CisKK1NFTEVDVCAqIEZST00gZXg7CisKKy0tIFVwZGF0ZSBhdHQyIGFuZCBhdHQ0 IGJvdGggYXJlIEJSSU4vc3VtbWFyaXppbmcgaW5kZXhlcywgdGhpcyBzaG91bGQgYmUgYSBI T1QgdXBkYXRlIGFuZAorLS0gb25seSB1cGRhdGUgdHdvIG9mIHRoZSB0aHJlZSBzdW1tYXJp emluZyBpbmRleGVzLgorVVBEQVRFIGV4IFNFVCBhdHQyID0gJ3NwZWNpYWwgaW5kZWVkJywg YXR0NCA9ICd3aGF0ZXZlcic7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDEs ICdleCcpOworU0VMRUNUICogRlJPTSBleDsKKworLS0gVXBkYXRlIGF0dDEgYW5kIGF0dDIs IG9ubHkgb25lIGlzIEJSSU4vc3VtbWFyaXppbmcsIHRoaXMgc2hvdWxkIE5PVCBiZSBhIEhP VCB1cGRhdGUuCitVUERBVEUgZXggU0VUIGF0dDEgPSBhdHQxIHx8ICd7ImRhdGEiOiAiaG93 ZHkifScsIGF0dDIgPSAnc3BlY2lhbCwgc28gc3BlY2lhbCc7CitTRUxFQ1QgKiBGUk9NIGNo ZWNrX2hvdF91cGRhdGVzKDEsICdleCcpOworU0VMRUNUICogRlJPTSBleDsKKworLS0gVXBk YXRlIGF0dDIsIGF0dDMsIGFuZCBhdHQ0IGFsbCBhcmUgQlJJTi9zdW1tYXJpemluZyBpbmRl eGVzLCB0aGlzIHNob3VsZCBiZSBhIEhPVCB1cGRhdGUKKy0tIGFuZCB5ZXQgc3RpbGwgdXBk YXRlIGFsbCB0aHJlZSBzdW1tYXJpemluZyBpbmRleGVzLgorVVBEQVRFIGV4IFNFVCBhdHQy ID0gJ2EnLCBhdHQzID0gJ2InLCBhdHQ0ID0gJ2MnOworU0VMRUNUICogRlJPTSBjaGVja19o b3RfdXBkYXRlcygyLCAnZXgnKTsKK1NFTEVDVCAqIEZST00gZXg7CisKKy0tIFVwZGF0ZSBh dHQxLCBhdHQyLCBhbmQgYXR0MyBhbGwgbW9kaWZpZWQgdmFsdWVzIGFyZSBCUklOL3N1bW1h cml6aW5nIGluZGV4ZXMsIHRoaXMgc2hvdWxkIGJlIGEgSE9UIHVwZGF0ZQorLS0gYW5kIHll dCBzdGlsbCB1cGRhdGUgYWxsIHRocmVlIHN1bW1hcml6aW5nIGluZGV4ZXMuCitVUERBVEUg ZXggU0VUIGF0dDEgPSAneyJkYXRhIjogImhvd2R5In0nLCBhdHQyID0gJ2QnLCBhdHQzID0g J2UnOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygzLCAnZXgnKTsKK1NFTEVD VCAqIEZST00gZXg7CisKK0RST1AgVEFCTEUgZXg7CisKKy0tIC0tIC0tIC0tIC0tIC0tIC0t IC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0t IC0tCistLSBBIHRlc3QgdG8gZW5zdXJlIHRoYXQgc3VtbWFyaXppbmcgaW5kZXhlcyBhcmUg bm90IHVwZGF0ZWQgd2hlbiB0aGV5IGRvbid0CistLSBjaGFuZ2UsIGJ1dCBhcmUgdXBkYXRl ZCB3aGVuIHRoZXkgZG8gd2hpbGUgbm90IHByZWZlbnQgSE9UIHVwZGF0ZXMuCitDUkVBVEUg VEFCTEUgZXggKGF0dDEgSlNPTkIsIGF0dDIgdGV4dCkgV0lUSCAoZmlsbGZhY3RvciA9IDYw KTsKK0NSRUFURSBJTkRFWCBleF9leHByMV9pZHggT04gZXggVVNJTkcgYnRyZWUoKGF0dDEt PidkYXRhJykpOworQ1JFQVRFIElOREVYIGV4X3N1bXIxX2lkeCBPTiBleCBVU0lORyBCUklO KGF0dDIpOworSU5TRVJUIElOVE8gZXggVkFMVUVTICgneyJkYXRhIjogW119JywgJ25vdGhp bmcgc3BlY2lhbCcpOworCistLSBVcGRhdGUgdGhlIHVuaW5kZXhlZCB2YWx1ZSBvZiBhdHQx LCB0aGlzIHNob3VsZCBiZSBhIEhPVCB1cGRhdGUgYW5kIGFuZCBzaG91bGQKKy0tIHVwZGF0 ZSB0aGUgc3VtbWFyaXppbmcgaW5kZXguCitVUERBVEUgZXggU0VUIGF0dDEgPSBhdHQxIHx8 ICd7InN0YXR1cyI6ICJzdGFsZW1hdGUifSc7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91 cGRhdGVzKDEsICdleCcpOworCistLSBVcGRhdGUgdGhlIGluZGV4ZWQgdmFsdWUgb2YgYXR0 MiwgYSBzdW1tYXJpemVkIHZhbHVlLCB0aGlzIGlzIGEgc3VtbWFyaXplZAorLS0gb25seSB1 cGRhdGUgYW5kIHNob3VsZCB1c2UgdGhlIEhPVCBwYXRoIHdoaWxlIHN0aWxsIHRyaWdnZXJp bmcgYW4gdXBkYXRlIHRvCistLSB0aGUgc3VtbWFyaXppbmcgQlJJTiBpbmRleC4KK1VQREFU RSBleCBTRVQgYXR0MiA9ICdzcGVjaWFsIGluZGVlZCc7CitTRUxFQ1QgKiBGUk9NIGNoZWNr X2hvdF91cGRhdGVzKDIsICdleCcpOworCistLSBVcGRhdGUgdG8gYXR0MSBkb2Vzbid0IGNo YW5nZSB0aGUgaW5kZXhlZCB2YWx1ZSB3aGlsZSB0aGUgdXBkYXRlIHRvIGF0dDIgZG9lcywK Ky0tIHRoaXMgYWdhaW4gaXMgYSBzdW1tYXJpemVkIG9ubHkgdXBkYXRlIGFuZCBzaG91bGQg dXNlIHRoZSBIT1QgcGF0aCBhcyB3ZWxsIGFzCistLSB0cmlnZ2VyIGFuIHVwZGF0ZSB0byB0 aGUgQlJJTiBpbmRleC4KK1VQREFURSBleCBTRVQgYXR0MSA9IGF0dDEgfHwgJ3sic3RhdHVz IjogImNoZWNrbWF0ZSJ9JywgYXR0MiA9ICdzcGVjaWFsLCBzbyBzcGVjaWFsJzsKK1NFTEVD VCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMywgJ2V4Jyk7CisKKy0tIFRoaXMgdXBkYXRl cyBib3RoIGluZGV4ZXMsIHRoZSBleHByZXNzaW9uIGluZGV4IG9uIGF0dDEgYW5kIHRoZSBz dW1tYXJpemluZworLS0gaW5kZXggb24gYXR0Mi4gIFRoaXMgc2hvdWxkIG5vdCBiZSBhIEhP VCB1cGRhdGUgYmVjYXVzZSB0aGVyZSBhcmUgbW9kaWZpZWQKKy0tIGluZGV4ZXMgYW5kIG9u bHkgc29tZSBhcmUgc3VtbWFyaXplZCwgbm90IGFsbC4gIFRoaXMgc2hvdWxkIGZvcmNlIGFs bAorLS0gaW5kZXhlcyB0byBiZSB1cGRhdGVkLgorVVBEQVRFIGV4IFNFVCBhdHQxID0gYXR0 MSB8fCAneyJkYXRhIjogWzEsMiwzXX0nLCBhdHQyID0gJ2RvIHlvdSB3YW50IHRvIHBsYXkg YSBnYW1lPyc7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDQsICdleCcpOwor CitEUk9QIFRBQkxFIGV4OworCistLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAt LSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLQorLS0gVGhpcyB0 ZXN0IGlzIGZvciBhIHRhYmxlIHdpdGggYSBjdXN0b20gdHlwZSBhbmQgYSBjdXN0b20gb3Bl cmF0b3JzIG9uCistLSB0aGUgQlRSRUUgaW5kZXguICBUaGUgcXVlc3Rpb24gaXMsIHdoZW4g Y29tcGFyaW5nIHZhbHVlcyBmb3IgZXF1YWxpdHkKKy0tIHRvIGRldGVybWluZSBpZiB0aGVy ZSBhcmUgY2hhbmdlcyBvbiB0aGUgaW5kZXggb3Igbm90Li4uIHNob3VsZG4ndCB3ZQorLS0g YmUgdXNpbmcgdGhlIGN1c3RvbSBvcGVyYXRvcnM/CisKKy0tIENyZWF0ZSBhIHR5cGUKK0NS RUFURSBUWVBFIG15X2N1c3RvbV90eXBlIEFTICh2YWwgaW50KTsKKworLS0gQ29tcGFyaXNv biBmdW5jdGlvbnMgKHJldHVybnMgYm9vbGVhbikKK0NSRUFURSBGVU5DVElPTiBteV9jdXN0 b21fbHQoYSBteV9jdXN0b21fdHlwZSwgYiBteV9jdXN0b21fdHlwZSkgUkVUVVJOUyBib29s ZWFuIEFTICQkCitCRUdJTgorICAgIFJFVFVSTiBhLnZhbCA8IGIudmFsOworRU5EOworJCQg TEFOR1VBR0UgcGxwZ3NxbCBJTU1VVEFCTEUgU1RSSUNUOworCitDUkVBVEUgRlVOQ1RJT04g bXlfY3VzdG9tX2xlKGEgbXlfY3VzdG9tX3R5cGUsIGIgbXlfY3VzdG9tX3R5cGUpIFJFVFVS TlMgYm9vbGVhbiBBUyAkJAorQkVHSU4KKyAgICBSRVRVUk4gYS52YWwgPD0gYi52YWw7CitF TkQ7CiskJCBMQU5HVUFHRSBwbHBnc3FsIElNTVVUQUJMRSBTVFJJQ1Q7CisKK0NSRUFURSBG VU5DVElPTiBteV9jdXN0b21fZXEoYSBteV9jdXN0b21fdHlwZSwgYiBteV9jdXN0b21fdHlw ZSkgUkVUVVJOUyBib29sZWFuIEFTICQkCitCRUdJTgorICAgIFJFVFVSTiBhLnZhbCA9IGIu dmFsOworRU5EOworJCQgTEFOR1VBR0UgcGxwZ3NxbCBJTU1VVEFCTEUgU1RSSUNUOworCitD UkVBVEUgRlVOQ1RJT04gbXlfY3VzdG9tX2dlKGEgbXlfY3VzdG9tX3R5cGUsIGIgbXlfY3Vz dG9tX3R5cGUpIFJFVFVSTlMgYm9vbGVhbiBBUyAkJAorQkVHSU4KKyAgICBSRVRVUk4gYS52 YWwgPj0gYi52YWw7CitFTkQ7CiskJCBMQU5HVUFHRSBwbHBnc3FsIElNTVVUQUJMRSBTVFJJ Q1Q7CisKK0NSRUFURSBGVU5DVElPTiBteV9jdXN0b21fZ3QoYSBteV9jdXN0b21fdHlwZSwg YiBteV9jdXN0b21fdHlwZSkgUkVUVVJOUyBib29sZWFuIEFTICQkCitCRUdJTgorICAgIFJF VFVSTiBhLnZhbCA+IGIudmFsOworRU5EOworJCQgTEFOR1VBR0UgcGxwZ3NxbCBJTU1VVEFC TEUgU1RSSUNUOworCitDUkVBVEUgRlVOQ1RJT04gbXlfY3VzdG9tX25lKGEgbXlfY3VzdG9t X3R5cGUsIGIgbXlfY3VzdG9tX3R5cGUpIFJFVFVSTlMgYm9vbGVhbiBBUyAkJAorQkVHSU4K KyAgICBSRVRVUk4gYS52YWwgIT0gYi52YWw7CitFTkQ7CiskJCBMQU5HVUFHRSBwbHBnc3Fs IElNTVVUQUJMRSBTVFJJQ1Q7CisKKy0tIENvbXBhcmlzb24gZnVuY3Rpb24gKHJldHVybnMg LTEsIDAsIDEpCitDUkVBVEUgRlVOQ1RJT04gbXlfY3VzdG9tX2NtcChhIG15X2N1c3RvbV90 eXBlLCBiIG15X2N1c3RvbV90eXBlKSBSRVRVUk5TIGludCBBUyAkJAorQkVHSU4KKyAgICBJ RiBhLnZhbCA8IGIudmFsIFRIRU4KKyAgICAgICAgUkVUVVJOIC0xOworICAgIEVMU0lGIGEu dmFsID4gYi52YWwgVEhFTgorICAgICAgICBSRVRVUk4gMTsKKyAgICBFTFNFCisgICAgICAg IFJFVFVSTiAwOworICAgIEVORCBJRjsKK0VORDsKKyQkIExBTkdVQUdFIHBscGdzcWwgSU1N VVRBQkxFIFNUUklDVDsKKworLS0gQ3JlYXRlIHRoZSBvcGVyYXRvcnMKK0NSRUFURSBPUEVS QVRPUiA8ICgKKyAgICBMRUZUQVJHID0gbXlfY3VzdG9tX3R5cGUsCisgICAgUklHSFRBUkcg PSBteV9jdXN0b21fdHlwZSwKKyAgICBQUk9DRURVUkUgPSBteV9jdXN0b21fbHQsCisgICAg Q09NTVVUQVRPUiA9ID4sCisgICAgTkVHQVRPUiA9ID49CispOworCitDUkVBVEUgT1BFUkFU T1IgPD0gKAorICAgIExFRlRBUkcgPSBteV9jdXN0b21fdHlwZSwKKyAgICBSSUdIVEFSRyA9 IG15X2N1c3RvbV90eXBlLAorICAgIFBST0NFRFVSRSA9IG15X2N1c3RvbV9sZSwKKyAgICBD T01NVVRBVE9SID0gPj0sCisgICAgTkVHQVRPUiA9ID4KKyk7CisKK0NSRUFURSBPUEVSQVRP UiA9ICgKKyAgICBMRUZUQVJHID0gbXlfY3VzdG9tX3R5cGUsCisgICAgUklHSFRBUkcgPSBt eV9jdXN0b21fdHlwZSwKKyAgICBQUk9DRURVUkUgPSBteV9jdXN0b21fZXEsCisgICAgQ09N TVVUQVRPUiA9ID0sCisgICAgTkVHQVRPUiA9IDw+CispOworCitDUkVBVEUgT1BFUkFUT1Ig Pj0gKAorICAgIExFRlRBUkcgPSBteV9jdXN0b21fdHlwZSwKKyAgICBSSUdIVEFSRyA9IG15 X2N1c3RvbV90eXBlLAorICAgIFBST0NFRFVSRSA9IG15X2N1c3RvbV9nZSwKKyAgICBDT01N VVRBVE9SID0gPD0sCisgICAgTkVHQVRPUiA9IDwKKyk7CisKK0NSRUFURSBPUEVSQVRPUiA+ ICgKKyAgICBMRUZUQVJHID0gbXlfY3VzdG9tX3R5cGUsCisgICAgUklHSFRBUkcgPSBteV9j dXN0b21fdHlwZSwKKyAgICBQUk9DRURVUkUgPSBteV9jdXN0b21fZ3QsCisgICAgQ09NTVVU QVRPUiA9IDwsCisgICAgTkVHQVRPUiA9IDw9CispOworCitDUkVBVEUgT1BFUkFUT1IgPD4g KAorICAgIExFRlRBUkcgPSBteV9jdXN0b21fdHlwZSwKKyAgICBSSUdIVEFSRyA9IG15X2N1 c3RvbV90eXBlLAorICAgIFBST0NFRFVSRSA9IG15X2N1c3RvbV9uZSwKKyAgICBDT01NVVRB VE9SID0gPD4sCisgICAgTkVHQVRPUiA9ID0KKyk7CisKKy0tIENyZWF0ZSB0aGUgb3BlcmF0 b3IgY2xhc3MgKGluY2x1ZGluZyB0aGUgc3VwcG9ydCBmdW5jdGlvbikKK0NSRUFURSBPUEVS QVRPUiBDTEFTUyBteV9jdXN0b21fb3BzCisgICAgREVGQVVMVCBGT1IgVFlQRSBteV9jdXN0 b21fdHlwZSBVU0lORyBidHJlZSBBUworICAgIE9QRVJBVE9SIDEgPCwKKyAgICBPUEVSQVRP UiAyIDw9LAorICAgIE9QRVJBVE9SIDMgPSwKKyAgICBPUEVSQVRPUiA0ID49LAorICAgIE9Q RVJBVE9SIDUgPiwKKyAgICBGVU5DVElPTiAxIG15X2N1c3RvbV9jbXAobXlfY3VzdG9tX3R5 cGUsIG15X2N1c3RvbV90eXBlKTsKKworLS0gQ3JlYXRlIHRoZSB0YWJsZQorQ1JFQVRFIFRB QkxFIG15X3RhYmxlICgKKyAgICBpZCBpbnQsCisgICAgY3VzdG9tX3ZhbCBteV9jdXN0b21f dHlwZQorKTsKKworLS0gSW5zZXJ0IHNvbWUgZGF0YQorSU5TRVJUIElOVE8gbXlfdGFibGUg KGlkLCBjdXN0b21fdmFsKSBWQUxVRVMKKygxLCBST1coMyk6Om15X2N1c3RvbV90eXBlKSwK KygyLCBST1coMSk6Om15X2N1c3RvbV90eXBlKSwKKygzLCBST1coNCk6Om15X2N1c3RvbV90 eXBlKSwKKyg0LCBST1coMik6Om15X2N1c3RvbV90eXBlKTsKKworLS0gQ3JlYXRlIGEgZnVu Y3Rpb24gdG8gdXNlIHdoZW4gaW5kZXhpbmcKK0NSRUFURSBPUiBSRVBMQUNFIEZVTkNUSU9O IGFic192YWwodmFsIG15X2N1c3RvbV90eXBlKSBSRVRVUk5TIGludCBBUyAkJAorQkVHSU4K KyAgUkVUVVJOIGFicyh2YWwudmFsKTsKK0VORDsKKyQkIExBTkdVQUdFIHBscGdzcWwgSU1N VVRBQkxFIFNUUklDVDsKKworLS0gQ3JlYXRlIHRoZSBpbmRleAorQ1JFQVRFIElOREVYIGlk eF9jdXN0b21fdmFsX2FicyBPTiBteV90YWJsZSAoYWJzX3ZhbChjdXN0b21fdmFsKSk7CisK Ky0tIFVwZGF0ZSAxCitVUERBVEUgbXlfdGFibGUgU0VUIGN1c3RvbV92YWwgPSBST1coNSk6 Om15X2N1c3RvbV90eXBlIFdIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90 X3VwZGF0ZXMoMCwgJ215X3RhYmxlJyk7CisKKy0tIFVwZGF0ZSAyCitVUERBVEUgbXlfdGFi bGUgU0VUIGN1c3RvbV92YWwgPSBST1coMCk6Om15X2N1c3RvbV90eXBlIFdIRVJFIGN1c3Rv bV92YWwgPCBST1coMyk6Om15X2N1c3RvbV90eXBlOworU0VMRUNUICogRlJPTSBjaGVja19o b3RfdXBkYXRlcygwLCAnbXlfdGFibGUnKTsKKworLS0gVXBkYXRlIDMKK1VQREFURSBteV90 YWJsZSBTRVQgY3VzdG9tX3ZhbCA9IFJPVyg2KTo6bXlfY3VzdG9tX3R5cGUgV0hFUkUgaWQg PSAzOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygwLCAnbXlfdGFibGUnKTsK KworLS0gVXBkYXRlIDQKK1VQREFURSBteV90YWJsZSBTRVQgaWQgPSA1IFdIRVJFIGlkID0g MTsKK1NFTEVDVCBwZ19zdGF0X2dldF94YWN0X3R1cGxlc19ob3RfdXBkYXRlZCgnbXlfdGFi bGUnOjpyZWdjbGFzcyk7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDAsICdt eV90YWJsZScpOworCistLSBRdWVyeSB1c2luZyB0aGUgaW5kZXgKK0VYUExBSU4gKENPU1RT IE9GRikgU0VMRUNUICogRlJPTSBteV90YWJsZSBXSEVSRSBhYnNfdmFsKGN1c3RvbV92YWwp ID0gNjsKK1NFTEVDVCAqIEZST00gbXlfdGFibGUgV0hFUkUgYWJzX3ZhbChjdXN0b21fdmFs KSA9IDY7CisKKy0tIENsZWFuIHVwCitEUk9QIFRBQkxFIG15X3RhYmxlIENBU0NBREU7CitE Uk9QIE9QRVJBVE9SIENMQVNTIG15X2N1c3RvbV9vcHMgVVNJTkcgYnRyZWUgQ0FTQ0FERTsK K0RST1AgT1BFUkFUT1IgPCAobXlfY3VzdG9tX3R5cGUsIG15X2N1c3RvbV90eXBlKTsKK0RS T1AgT1BFUkFUT1IgPD0gKG15X2N1c3RvbV90eXBlLCBteV9jdXN0b21fdHlwZSk7CitEUk9Q IE9QRVJBVE9SID0gKG15X2N1c3RvbV90eXBlLCBteV9jdXN0b21fdHlwZSk7CitEUk9QIE9Q RVJBVE9SID49IChteV9jdXN0b21fdHlwZSwgbXlfY3VzdG9tX3R5cGUpOworRFJPUCBPUEVS QVRPUiA+IChteV9jdXN0b21fdHlwZSwgbXlfY3VzdG9tX3R5cGUpOworRFJPUCBPUEVSQVRP UiA8PiAobXlfY3VzdG9tX3R5cGUsIG15X2N1c3RvbV90eXBlKTsKK0RST1AgRlVOQ1RJT04g bXlfY3VzdG9tX2x0KG15X2N1c3RvbV90eXBlLCBteV9jdXN0b21fdHlwZSk7CitEUk9QIEZV TkNUSU9OIG15X2N1c3RvbV9sZShteV9jdXN0b21fdHlwZSwgbXlfY3VzdG9tX3R5cGUpOwor RFJPUCBGVU5DVElPTiBteV9jdXN0b21fZXEobXlfY3VzdG9tX3R5cGUsIG15X2N1c3RvbV90 eXBlKTsKK0RST1AgRlVOQ1RJT04gbXlfY3VzdG9tX2dlKG15X2N1c3RvbV90eXBlLCBteV9j dXN0b21fdHlwZSk7CitEUk9QIEZVTkNUSU9OIG15X2N1c3RvbV9ndChteV9jdXN0b21fdHlw ZSwgbXlfY3VzdG9tX3R5cGUpOworRFJPUCBGVU5DVElPTiBteV9jdXN0b21fbmUobXlfY3Vz dG9tX3R5cGUsIG15X2N1c3RvbV90eXBlKTsKK0RST1AgRlVOQ1RJT04gbXlfY3VzdG9tX2Nt cChteV9jdXN0b21fdHlwZSwgbXlfY3VzdG9tX3R5cGUpOworRFJPUCBGVU5DVElPTiBhYnNf dmFsKG15X2N1c3RvbV90eXBlKTsKK0RST1AgVFlQRSBteV9jdXN0b21fdHlwZSBDQVNDQURF OworCitEUk9QIEZVTkNUSU9OIGNoZWNrX2hvdF91cGRhdGVzKGludCwgdGV4dCwgdGV4dCk7 CmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90 b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4IDIyMGU1YTRmNmIzLi5iNWNkZjJh Yzg5YSAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysr IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTI5NjcsNiArMjk2Nyw3 IEBAIFRTVmVjdG9yU3RhdAogVFN0YXRlCiBUU3RhdHVzCiBUU3RvcmVTdGF0ZQorVXBkYXRl Q29udGV4dAogVFVfVXBkYXRlSW5kZXhlcwogVFhORW50cnlGaWxlCiBUWVBDQVRFR09SWQpA QCAtMzE1NCw3ICszMTU1LDYgQEAgVW5pcXVlU3RhdGUKIFVubGlzdGVuU3RtdAogVW5yZXNv bHZlZFR1cAogVW5yZXNvbHZlZFR1cERhdGEKLVVwZGF0ZUNvbnRleHQKIFVwZGF0ZVN0bXQK IFVwZ3JhZGVUYXNrCiBVcGdyYWRlVGFza1Byb2Nlc3NDQgotLSAKMi40OS4wCgo= --c67019c1296f41d286d55805b41f1fc2--