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.96) (envelope-from ) id 1vzyUu-001UhZ-0H for pgsql-hackers@arkaria.postgresql.org; Tue, 10 Mar 2026 14:55:49 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vzyUs-0043Jf-1e for pgsql-hackers@arkaria.postgresql.org; Tue, 10 Mar 2026 14:55:47 +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.96) (envelope-from ) id 1vzyUr-0043JA-0l for pgsql-hackers@lists.postgresql.org; Tue, 10 Mar 2026 14:55:46 +0000 Received: from mail-ej1-x62e.google.com ([2a00:1450:4864:20::62e]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1vzyUn-00000001SqW-3TS6 for pgsql-hackers@lists.postgresql.org; Tue, 10 Mar 2026 14:55:44 +0000 Received: by mail-ej1-x62e.google.com with SMTP id a640c23a62f3a-b8f97c626aaso2181118966b.2 for ; Tue, 10 Mar 2026 07:55:41 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1773154540; cv=none; d=google.com; s=arc-20240605; b=YbsLKzKTKxJPTPCzd1Aqoyff3WnyAGW/Xdnx0ZRiWTKiC8D4C05djvjO+n5au0oXzG sWR7fhuXwYccL5aBijb9GyNzoD9yXfpj+6Rgaog2j6+hKLcPwpWliuGM0Zg08LePNNZb MFch/8LAR0D3qtuBuCoKGdcFtntTxL1v+djEqMv4UiU3Ir1i91yfvbKmbtjl8zbidNtI kphZeP3+Qm+oAZctTJ3v+f+XJN8OqFZ89dcjhTqNL5J/BzaMYs/RAPSZZybXiW4Fd3mD 7BuZdfdd676toznHqyOWV8mFmLysiI0ARMQYWt2wKCQOMxvoZhW1dBEf5P2cPL1d1GKd s2kw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=bjcVmZU47ZcS13M3tVL20SSawk9P4kVqgAok9lSy/u0=; fh=SJLwFGdPtZLY7VbitLxurgfR/KErAEzsrNKdfS6uTcE=; b=EQlqUN+rTqDysSuTHeYl8+9lp8J/IxL8zffjszBf6jf0Q6LAl7SjAEW6NpvzK2hgUj FQb6ZMAHTDIHZ3p5oadZtB8XM47UsadcgrfYh8BPO7BlDvbB3srZmYk8anYjVSL+ZqXJ KfBQXfV7WvEnQMYgohhcatS3WXCNLrO8EwDocw5rBO5ljExTCURPRnEf2BxLGnR9b8t0 qEBRwW0+plv1icPyg6SYl6NDSs7MdD+1mQQAUw5YUE6r8oe5GVDv6NHNutJy2olpoJHR nrfNSKJXcG60XXK1cM4aEOUAXgzr9DJy1AQp4r+XVIoht5UuVCGpcwEAuMd7Rt+y/ucl X+wg==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1773154540; x=1773759340; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=bjcVmZU47ZcS13M3tVL20SSawk9P4kVqgAok9lSy/u0=; b=N8nAlsLv0WOQD+au9REUV9ptJ4gJPZLZ2NLgwqf05A2BpIlItcqYNQ/ciRrmhaSTg7 1S2vMj+QHzu2TclQmqivHBoi3cA2KPZmBwMS2JCkLU6Hj5Oz7lPlsi16Q4p9cvWdIVw1 ASzfiDIcPnz/XmQNJtShVyKXCvGN1ZhZSOF+IffKVY8PiQL8pOdjHSPJPHGIhGpTukrw NpDKcrH2haHzPLAP9XlkFEARLlOobcUWl3dxjyCvYN6Sx+D781mB/m/fkYIlCfjRubDu JrquvDcQmalaHs0RvoBjpnwZ/NJKw/JthLlRss5iqqzdlKdCMlHjkYBN8Kho1nxGtj0J 3viQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773154540; x=1773759340; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=bjcVmZU47ZcS13M3tVL20SSawk9P4kVqgAok9lSy/u0=; b=wjV5BgNewy+UOogDdNsXMk86Hy0ul3mZNcHTL+6tgp9jaAZnuvS8eGvgUhAGZ0OnAC GXKtH6SxaY3/2Nx34gkMFk07pLLUh944sswN2jvsZpH/Xa4hoVEGdTtNdZOTP4VJniWD cTOF61XH/UNuErYZpRoplG+28WBvnf5uf0PCZEAIMqaNAkIKbDgK12lkpQjTO3xFuwPl Qo29R6+uSrZP8hSQY+6OyKQoeXvxxPzDGvZdFUJqXuMYvsQLg4qPmyXg9y1CLgRIZTzv TBzJ/WPgCpxaKE41aw/Or/78Qg6ELMzGHab2jmPrfPqJIq68NnNCu6ha7/Gm6xsJEhd2 qZ1w== X-Gm-Message-State: AOJu0YzK6WfL98LWnXNAIOL1hQYHuqHfm8Ckei65jldWHXXw8fflLo2k QGhaog0HCm7ds3WIvUpG1bTjMgUDRcHzPw2RTFhPV5pF1FPX+w0BtYPoaAc87Pc68r5/DdLqoef l20fELZjyiA9vFHZmjuF4yEHeWq8BB0w= X-Gm-Gg: ATEYQzwTkFgr6R0cszNHSNt8Dt7lKlx3yACtpF1EKRhHPCazebsKrb8+4ulrdaF8Ly9 r9v+gEwXmX29a0k6mWMoplB0zST5fR9aURfHozEGG7Awnic67SjB/meIEpecBLlcZ+duDDRN/kO o24gIIgamlnCSHCp7fwEM4m078ZUxjBbXQUhnjShnZT2wnT3fQasF0evNbNemVhq4voK3I1CbcZ v69OrA/4XVSNsQwE9DrMwXJdvt3topzkWMOU8aY57+slIQQZG1AERxXNSbvelK4ZB8fBV+2lFYE 9r6Oro6tCbxKha47vG9wrywrwl/C1X1dzjBRXSQ= X-Received: by 2002:a17:907:72d3:b0:b93:5520:44f0 with SMTP id a640c23a62f3a-b942dfb4fcamr834411366b.36.1773154539898; Tue, 10 Mar 2026 07:55:39 -0700 (PDT) MIME-Version: 1.0 References: <1136161.1769654478@sss.pgh.pa.us> In-Reply-To: From: Robert Haas Date: Tue, 10 Mar 2026 10:55:26 -0400 X-Gm-Features: AaiRm531nI51fCiA5v5WC1CRzPdL82dtMW_I09WbYj_fDIMed7rDtx2WxFto8pY Message-ID: Subject: Re: pg_plan_advice To: "David G. Johnston" Cc: PostgreSQL Hackers Content-Type: multipart/mixed; boundary="0000000000007beb40064cacb69d" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000007beb40064cacb69d Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Fri, Mar 6, 2026 at 9:47=E2=80=AFAM David G. Johnston wrote: > Thank you for putting in the time to respond. That was quite helpful. I= 've tweaked my tooling to help me remember to do this going forward. Thanks. Here's v19. I've incorporated a bunch of your changes, some that were fixes for clear errors and a few of the more stylistic cases where I decided that I agreed with you, and I've also fixed some similar things upon which you did not remark. Separately, I've also committed the patches that were previously 0001, 0002, and 0005, so all the preparatory stuff is done now, and this version just contains the substantive commits, for which I am still in need of review, especially for 0004. I have also made a minor code adjustment: pg_plan_advice.trace_mask now prints the subplan name except for the toplevel "subplan". Here are a few comments on some of the changes you made that I did not adop= t: - In the README, "we" are the PostgreSQL developers and "the user" is the person using the module. In the documentation, "you" is the user. If there are deviations from this idea, we should fix them, but it seems OK that the two documents have different rules, inasmuch as they address different audiences. - For the same reason, I chose not to copy the note about enable_partitionwise_join=3Doff into the README, as that is not a core concept for developers but a likely error for users. We also don't really want to start duplicating content too much; arguably, we have too much of that already. - I don't really think we need to document the exact rules for argument to, e.g., the pg_stash_advice functions. I think that makes the documentation ponderous without adding any real utility. At most, I would mention in some centralized place what the rules for stash names are. Separately, there is the question of whether the current naming rules are the right ones. - In a lot of places, especially in the README, I just disagreed with your choice of what to emphasize. For instance, I thought my longer explanation of how we must not infer guidance from the absence of advice was better than your shorter one, because it's such a critical point for future developers touching this code to understand. On the other hand, saying that advice should be stable in the face of statistics changes was redundant: if it doesn't even do that much, then what would even be the point? - I chose to retain the use of the term "core planner" in the SGML documentation rather than your suggestion of deleting the word "core". I do not love the wording I've chosen here, but I don't love your change, either. It seems to me that there is a risk of people being confused about the distinction between the planning-related logic in src/backend/optimizer and the planning-related object in pg_plan_advice itself. I included the word in core for emphasis. Whether this is the right idea is debatable, of course. Thanks, --=20 Robert Haas EDB: http://www.enterprisedb.com --0000000000007beb40064cacb69d Content-Type: application/octet-stream; name="v19-0004-Add-pg_stash_advice-contrib-module.patch" Content-Disposition: attachment; filename="v19-0004-Add-pg_stash_advice-contrib-module.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmkqdl363 RnJvbSA3ZTFkNjYyMjhmYzVmZjUwZDYwODNmYWViNGNiZjc3NzkwMzM5NGFlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IEZyaSwgMjcgRmViIDIwMjYgMTY6NTg6MTQgLTA1MDAKU3ViamVjdDogW1BBVENIIHYxOSA0 LzRdIEFkZCBwZ19zdGFzaF9hZHZpY2UgY29udHJpYiBtb2R1bGUuCgpUaGlzIG1vZHVsZSBhbGxv d3MgcGxhbiBhZHZpY2Ugc3RyaW5ncyB0byBiZSBwcm92aWRlZCBhdXRvbWF0aWNhbGx5CmZyb20g YW4gaW4tbWVtb3J5IGFkdmljZSBzdGFzaC4gQWR2aWNlIHN0YXNoZXMgYXJlIHN0b3JlZCBpbiBk eW5hbWljCnNoYXJlZCBtZW1vcnkgYW5kIG11c3QgYmUgcmVjcmVhdGVkIGFuZCByZXBvcHVsYXRl ZCBhZnRlciBhIHNlcnZlcgpyZXN0YXJ0LiBJZiBwZ19zdGFzaC5hZHZpY2Vfc3Rhc2ggaXMgc2V0 IHRvIHRoZSBuYW1lIG9mIGFuIGFkdmljZQpzdGFzaCwgYW5kIGlmIHF1ZXJ5IGlkZW50aWZpZXJz IGFyZSBlbmFibGVkLCB0aGUgcXVlcnkgaWRlbnRpZmllcgpmb3IgZWFjaCBxdWVyeSB3aWxsIGJl IGxvb2tlZCB1cCBpbiB0aGUgYWR2aWNlIHN0YXNoIGFuZCB0aGUKYXNzb2NpYXRlZCBhZHZpY2Ug c3RyaW5nLCBpZiBhbnksIHdpbGwgYmUgdXNlZCBlYWNoIHRpbWUgdGhhdCBxdWVyeQppcyBwbGFu bmVkLgotLS0KIGNvbnRyaWIvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8 ICAgMSArCiBjb250cmliL21lc29uLmJ1aWxkICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg IDEgKwogY29udHJpYi9wZ19zdGFzaF9hZHZpY2UvTWFrZWZpbGUgICAgICAgICAgICAgIHwgIDI2 ICsKIC4uLi9leHBlY3RlZC9wZ19zdGFzaF9hZHZpY2Uub3V0ICAgICAgICAgICAgICB8IDMwNSAr KysrKysKIGNvbnRyaWIvcGdfc3Rhc2hfYWR2aWNlL21lc29uLmJ1aWxkICAgICAgICAgICB8ICAz NSArCiAuLi4vcGdfc3Rhc2hfYWR2aWNlL3BnX3N0YXNoX2FkdmljZS0tMS4wLnNxbCAgfCAgNDMg KwogY29udHJpYi9wZ19zdGFzaF9hZHZpY2UvcGdfc3Rhc2hfYWR2aWNlLmMgICAgIHwgODc4ICsr KysrKysrKysrKysrKysrKwogLi4uL3BnX3N0YXNoX2FkdmljZS9wZ19zdGFzaF9hZHZpY2UuY29u dHJvbCAgIHwgICA1ICsKIC4uLi9wZ19zdGFzaF9hZHZpY2Uvc3FsL3BnX3N0YXNoX2FkdmljZS5z cWwgICB8IDEzMCArKysKIGRvYy9zcmMvc2dtbC9jb250cmliLnNnbWwgICAgICAgICAgICAgICAg ICAgICB8ICAgMSArCiBkb2Mvc3JjL3NnbWwvZmlsZWxpc3Quc2dtbCAgICAgICAgICAgICAgICAg ICAgfCAgIDEgKwogZG9jL3NyYy9zZ21sL3Bnc3Rhc2hhZHZpY2Uuc2dtbCAgICAgICAgICAgICAg IHwgMjE4ICsrKysrCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCAgICAgICAgICAg ICAgfCAgIDYgKwogMTMgZmlsZXMgY2hhbmdlZCwgMTY1MCBpbnNlcnRpb25zKCspCiBjcmVhdGUg bW9kZSAxMDA2NDQgY29udHJpYi9wZ19zdGFzaF9hZHZpY2UvTWFrZWZpbGUKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBjb250cmliL3BnX3N0YXNoX2FkdmljZS9leHBlY3RlZC9wZ19zdGFzaF9hZHZpY2Uu b3V0CiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19zdGFzaF9hZHZpY2UvbWVzb24uYnVp bGQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3N0YXNoX2FkdmljZS9wZ19zdGFzaF9h ZHZpY2UtLTEuMC5zcWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3N0YXNoX2Fkdmlj ZS9wZ19zdGFzaF9hZHZpY2UuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfc3Rhc2hf YWR2aWNlL3BnX3N0YXNoX2FkdmljZS5jb250cm9sCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJp Yi9wZ19zdGFzaF9hZHZpY2Uvc3FsL3BnX3N0YXNoX2FkdmljZS5zcWwKIGNyZWF0ZSBtb2RlIDEw MDY0NCBkb2Mvc3JjL3NnbWwvcGdzdGFzaGFkdmljZS5zZ21sCgpkaWZmIC0tZ2l0IGEvY29udHJp Yi9NYWtlZmlsZSBiL2NvbnRyaWIvTWFrZWZpbGUKaW5kZXggMjIwNzEwMzRlNTEuLjE0ZTEyZDRm ZTJlIDEwMDY0NAotLS0gYS9jb250cmliL01ha2VmaWxlCisrKyBiL2NvbnRyaWIvTWFrZWZpbGUK QEAgLTMwLDYgKzMwLDcgQEAgU1VCRElSUyA9IFwKIAkJb2lkMm5hbWUJXAogCQlwYWdlaW5zcGVj dAlcCiAJCXBhc3N3b3JkY2hlY2sJXAorCQlwZ19zdGFzaF9hZHZpY2UJXAogCQlwZ19idWZmZXJj YWNoZQlcCiAJCXBnX2NvbGxlY3RfYWR2aWNlIFwKIAkJcGdfZnJlZXNwYWNlbWFwIFwKZGlmZiAt LWdpdCBhL2NvbnRyaWIvbWVzb24uYnVpbGQgYi9jb250cmliL21lc29uLmJ1aWxkCmluZGV4IGZm NDIyZDliN2ZjLi40ODYyYmE5N2VkMSAxMDA2NDQKLS0tIGEvY29udHJpYi9tZXNvbi5idWlsZAor KysgYi9jb250cmliL21lc29uLmJ1aWxkCkBAIC01Miw2ICs1Miw3IEBAIHN1YmRpcigncGdfb3Zl cmV4cGxhaW4nKQogc3ViZGlyKCdwZ19wbGFuX2FkdmljZScpCiBzdWJkaXIoJ3BnX3ByZXdhcm0n KQogc3ViZGlyKCdwZ3Jvd2xvY2tzJykKK3N1YmRpcigncGdfc3Rhc2hfYWR2aWNlJykKIHN1YmRp cigncGdfc3RhdF9zdGF0ZW1lbnRzJykKIHN1YmRpcigncGdzdGF0dHVwbGUnKQogc3ViZGlyKCdw Z19zdXJnZXJ5JykKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfc3Rhc2hfYWR2aWNlL01ha2VmaWxl IGIvY29udHJpYi9wZ19zdGFzaF9hZHZpY2UvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMDAuLmNkOWI3ZjMwMTE1Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJp Yi9wZ19zdGFzaF9hZHZpY2UvTWFrZWZpbGUKQEAgLTAsMCArMSwyNiBAQAorIyBjb250cmliL3Bn X3N0YXNoX2FkdmljZS9NYWtlZmlsZQorCitNT0RVTEVfYmlnID0gcGdfc3Rhc2hfYWR2aWNlCitP QkpTID0gXAorCSQoV0lOMzJSRVMpIFwKKwlwZ19zdGFzaF9hZHZpY2UubworCitFWFRFTlNJT04g PSBwZ19zdGFzaF9hZHZpY2UKK0RBVEEgPSBwZ19zdGFzaF9hZHZpY2UtLTEuMC5zcWwKK1BHRklM RURFU0MgPSAicGdfc3Rhc2hfYWR2aWNlIC0gc3RvcmUgYW5kIGF1dG9tYXRpY2FsbHkgYXBwbHkg cGxhbiBhZHZpY2UiCisKK1JFR1JFU1MgPSBwZ19zdGFzaF9hZHZpY2UKK0VYVFJBX0lOU1RBTEwg PSBjb250cmliL3BnX3BsYW5fYWR2aWNlCisKK2lmZGVmIFVTRV9QR1hTCitQR19DUFBGTEFHUyA9 IC1JJChpbmNsdWRlZGlyX3NlcnZlcikvZXh0ZW5zaW9uCitQR19DT05GSUcgPSBwZ19jb25maWcK K1BHWFMgOj0gJChzaGVsbCAkKFBHX0NPTkZJRykgLS1wZ3hzKQoraW5jbHVkZSAkKFBHWFMpCitl bHNlCitQR19DUFBGTEFHUyA9IC1JJCh0b3Bfc3JjZGlyKS9jb250cmliL3BnX3BsYW5fYWR2aWNl CitzdWJkaXIgPSBjb250cmliL3BnX3N0YXNoX2FkdmljZQordG9wX2J1aWxkZGlyID0gLi4vLi4K K2luY2x1ZGUgJCh0b3BfYnVpbGRkaXIpL3NyYy9NYWtlZmlsZS5nbG9iYWwKK2luY2x1ZGUgJCh0 b3Bfc3JjZGlyKS9jb250cmliL2NvbnRyaWItZ2xvYmFsLm1rCitlbmRpZgpkaWZmIC0tZ2l0IGEv Y29udHJpYi9wZ19zdGFzaF9hZHZpY2UvZXhwZWN0ZWQvcGdfc3Rhc2hfYWR2aWNlLm91dCBiL2Nv bnRyaWIvcGdfc3Rhc2hfYWR2aWNlL2V4cGVjdGVkL3BnX3N0YXNoX2FkdmljZS5vdXQKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjBkZTZjMTBjZGQxCi0tLSAvZGV2L251 bGwKKysrIGIvY29udHJpYi9wZ19zdGFzaF9hZHZpY2UvZXhwZWN0ZWQvcGdfc3Rhc2hfYWR2aWNl Lm91dApAQCAtMCwwICsxLDMwNSBAQAorQ1JFQVRFIEVYVEVOU0lPTiBwZ19zdGFzaF9hZHZpY2U7 CitTRVQgY29tcHV0ZV9xdWVyeV9pZCA9IG9uOworU0VUIG1heF9wYXJhbGxlbF93b3JrZXJzX3Bl cl9nYXRoZXIgPSAwOworLS0gSGVscGVyOiBleHRyYWN0IHF1ZXJ5IGlkZW50aWZpZXIgZnJvbSBF WFBMQUlOIFZFUkJPU0Ugb3V0cHV0LgorQ1JFQVRFIE9SIFJFUExBQ0UgRlVOQ1RJT04gZ2V0X3F1 ZXJ5X2lkKHF1ZXJ5X3RleHQgdGV4dCkgUkVUVVJOUyBiaWdpbnQKK0xBTkdVQUdFIHBscGdzcWwg QVMgJCQKK0RFQ0xBUkUKKyAgICBsaW5lIHRleHQ7CisgICAgcWlkIGJpZ2ludDsKK0JFR0lOCisg ICAgRk9SIGxpbmUgSU4gRVhFQ1VURSAnRVhQTEFJTiAoVkVSQk9TRSwgRk9STUFUIFRFWFQpICcg fHwgcXVlcnlfdGV4dAorICAgIExPT1AKKyAgICAgICAgSUYgbGluZSB+ICdRdWVyeSBJZGVudGlm aWVyOicgVEhFTgorICAgICAgICAgICAgcWlkIDo9IHJlZ2V4cF9yZXBsYWNlKGxpbmUsICcuKlF1 ZXJ5IElkZW50aWZpZXI6XHMqKC0/XGQrKS4qJywgJ1wxJyk6OmJpZ2ludDsKKyAgICAgICAgICAg IFJFVFVSTiBxaWQ7CisgICAgICAgIEVORCBJRjsKKyAgICBFTkQgTE9PUDsKKyAgICBSQUlTRSBF WENFUFRJT04gJ1F1ZXJ5IElkZW50aWZpZXIgbm90IGZvdW5kIGluIEVYUExBSU4gb3V0cHV0JzsK K0VORDsKKyQkOworQ1JFQVRFIFRBQkxFIGFhX2RpbTEgKGlkIGludGVnZXIgcHJpbWFyeSBrZXks IGRpbTEgdGV4dCwgdmFsMSBpbnQpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2Up OworSU5TRVJUIElOVE8gYWFfZGltMSAoaWQsIGRpbTEsIHZhbDEpCisJU0VMRUNUIGcsICdzb21l IGZpbGxlciB0ZXh0ICcgfHwgZywgKGcgJSAzKSArIDEKKwkgIEZST00gZ2VuZXJhdGVfc2VyaWVz KDEsMTAwKSBnOworVkFDVVVNIEFOQUxZWkUgYWFfZGltMTsKK0NSRUFURSBUQUJMRSBhYV9kaW0y IChpZCBpbnRlZ2VyIHByaW1hcnkga2V5LCBkaW0yIHRleHQsIHZhbDIgaW50KQorCVdJVEggKGF1 dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJTlRPIGFhX2RpbTIgKGlkLCBkaW0y LCB2YWwyKQorCVNFTEVDVCBnLCAnc29tZSBmaWxsZXIgdGV4dCAnIHx8IGcsIChnICUgNykgKyAx CisJICBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDApIGc7CitWQUNVVU0gQU5BTFlaRSBhYV9k aW0yOworQ1JFQVRFIFRBQkxFIGFhX2ZhY3QgKAorCWlkIGludCBwcmltYXJ5IGtleSwKKwlkaW0x X2lkIGludGVnZXIgbm90IG51bGwgcmVmZXJlbmNlcyBhYV9kaW0xIChpZCksCisJZGltMl9pZCBp bnRlZ2VyIG5vdCBudWxsIHJlZmVyZW5jZXMgYWFfZGltMiAoaWQpCispIFdJVEggKGF1dG92YWN1 dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJTlRPIGFhX2ZhY3QKKwlTRUxFQ1QgZywgKGcl MTAwKSsxLCAoZyUxMDApKzEgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwMDApIGc7CitWQUNV VU0gQU5BTFlaRSBhYV9mYWN0OworLS0gR2V0IHRoZSBxdWVyeSBpZGVudGlmaWVyLgorU0VMRUNU IGdldF9xdWVyeV9pZCgkJAorU0VMRUNUICogRlJPTSBhYV9mYWN0IGYgTEVGVCBKT0lOIGFhX2Rp bTEgZDEgT04gZi5kaW0xX2lkID0gZDEuaWQKKwlMRUZUIEpPSU4gYWFfZGltMiBkMiBPTiBmLmRp bTJfaWQgPSBkMi5pZAorCVdIRVJFIHZhbDEgPSAxIEFORCB2YWwyID0gMTsKKyQkKSBBUyBxaWQg XGdzZXQKKy0tIENyZWF0ZSBhbiBhZHZpY2Ugc3Rhc2ggYW5kIHBvaW50IHBnX3N0YXNoX2Fkdmlj ZSBhdCBpdC4KK1NFTEVDVCBwZ19jcmVhdGVfYWR2aWNlX3N0YXNoKCdyZWdyZXNzX3N0YXNoJyk7 CisgcGdfY3JlYXRlX2FkdmljZV9zdGFzaCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIAor KDEgcm93KQorCitTRVQgcGdfc3Rhc2hfYWR2aWNlLnN0YXNoX25hbWUgPSAncmVncmVzc19zdGFz aCc7CistLSBSdW4gb3VyIHRlc3QgcXVlcnkgZm9yIHRoZSBmaXJzdCB0aW1lIHdpdGggbm8gc3Rh c2hlZCBhZHZpY2UuCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIGFhX2ZhY3Qg ZiBMRUZUIEpPSU4gYWFfZGltMSBkMSBPTiBmLmRpbTFfaWQgPSBkMS5pZAorCUxFRlQgSk9JTiBh YV9kaW0yIGQyIE9OIGYuZGltMl9pZCA9IGQyLmlkCisJV0hFUkUgdmFsMSA9IDEgQU5EIHZhbDIg PSAxOworICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoIEpvaW4KKyAgIEhhc2gg Q29uZDogKGYuZGltMV9pZCA9IGQxLmlkKQorICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgSGFz aCBDb25kOiAoZi5kaW0yX2lkID0gZDIuaWQpCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gYWFf ZmFjdCBmCisgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9u IGFhX2RpbTIgZDIKKyAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDIgPSAxKQorICAg LT4gIEhhc2gKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBhYV9kaW0xIGQxCisgICAgICAgICAg ICAgICBGaWx0ZXI6ICh2YWwxID0gMSkKKygxMSByb3dzKQorCistLSBGb3JjZSBhbiBpbmRleCBz Y2FuIG9uIGRpbTEKK1NFTEVDVCBwZ19zZXRfc3Rhc2hlZF9hZHZpY2UoJ3JlZ3Jlc3Nfc3Rhc2gn LCA6J3FpZCcsCisJJ0lOREVYX1NDQU4oZDEgYWFfZGltMV9wa2V5KScpOworIHBnX3NldF9zdGFz aGVkX2FkdmljZSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgCisoMSByb3cpCisKK0VYUExB SU4gKENPU1RTIE9GRikgU0VMRUNUICogRlJPTSBhYV9mYWN0IGYKKwlMRUZUIEpPSU4gYWFfZGlt MSBkMSBPTiBmLmRpbTFfaWQgPSBkMS5pZAorCUxFRlQgSk9JTiBhYV9kaW0yIGQyIE9OIGYuZGlt Ml9pZCA9IGQyLmlkCisJV0hFUkUgdmFsMSA9IDEgQU5EIHZhbDIgPSAxOworICAgICAgICAgICAg ICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoIEpv aW4KKyAgIEhhc2ggQ29uZDogKGYuZGltMV9pZCA9IGQxLmlkKQorICAgLT4gIEhhc2ggSm9pbgor ICAgICAgICAgSGFzaCBDb25kOiAoZi5kaW0yX2lkID0gZDIuaWQpCisgICAgICAgICAtPiAgU2Vx IFNjYW4gb24gYWFfZmFjdCBmCisgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgLT4g IFNlcSBTY2FuIG9uIGFhX2RpbTIgZDIKKyAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZh bDIgPSAxKQorICAgLT4gIEhhc2gKKyAgICAgICAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIGFhX2Rp bTFfcGtleSBvbiBhYV9kaW0xIGQxCisgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwxID0gMSkK KyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4oZDEgYWFfZGltMV9wa2V5KSAv KiBtYXRjaGVkICovCisoMTMgcm93cykKKworLS0gRm9yY2UgYW4gYWx0ZXJuYXRpdmUgam9pbiBv cmRlcgorU0VMRUNUIHBnX3NldF9zdGFzaGVkX2FkdmljZSgncmVncmVzc19zdGFzaCcsIDoncWlk JywKKwknam9pbl9vcmRlcihmIGQxIGQyKScpOworIHBnX3NldF9zdGFzaGVkX2FkdmljZSAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgCisoMSByb3cpCisKK0VYUExBSU4gKENPU1RTIE9GRikg U0VMRUNUICogRlJPTSBhYV9mYWN0IGYKKwlMRUZUIEpPSU4gYWFfZGltMSBkMSBPTiBmLmRpbTFf aWQgPSBkMS5pZAorCUxFRlQgSk9JTiBhYV9kaW0yIGQyIE9OIGYuZGltMl9pZCA9IGQyLmlkCisJ V0hFUkUgdmFsMSA9IDEgQU5EIHZhbDIgPSAxOworICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4g ICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyBIYXNoIEpvaW4KKyAgIEhhc2ggQ29uZDogKGYuZGltMl9pZCA9IGQyLmlkKQorICAgLT4g IEhhc2ggSm9pbgorICAgICAgICAgSGFzaCBDb25kOiAoZi5kaW0xX2lkID0gZDEuaWQpCisgICAg ICAgICAtPiAgU2VxIFNjYW4gb24gYWFfZmFjdCBmCisgICAgICAgICAtPiAgSGFzaAorICAgICAg ICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGFhX2RpbTEgZDEKKyAgICAgICAgICAgICAgICAgICAg IEZpbHRlcjogKHZhbDEgPSAxKQorICAgLT4gIEhhc2gKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBv biBhYV9kaW0yIGQyCisgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyBTdXBwbGll ZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBkMSBkMikgLyogbWF0Y2hlZCAqLworKDEz IHJvd3MpCisKKy0tIEZvcmNlIGFuIGFsdGVybmF0aXZlIGpvaW4gc3RyYXRlZ3kKK1NFTEVDVCBw Z19zZXRfc3Rhc2hlZF9hZHZpY2UoJ3JlZ3Jlc3Nfc3Rhc2gnLCA6J3FpZCcsCisJJ05FU1RFRF9M T09QX1BMQUlOKGQxKScpOworIHBnX3NldF9zdGFzaGVkX2FkdmljZSAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgCisoMSByb3cpCisKK0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUICogRlJP TSBhYV9mYWN0IGYKKwlMRUZUIEpPSU4gYWFfZGltMSBkMSBPTiBmLmRpbTFfaWQgPSBkMS5pZAor CUxFRlQgSk9JTiBhYV9kaW0yIGQyIE9OIGYuZGltMl9pZCA9IGQyLmlkCisJV0hFUkUgdmFsMSA9 IDEgQU5EIHZhbDIgPSAxOworICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgSGFzaCBD b25kOiAoZi5kaW0yX2lkID0gZDIuaWQpCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gYWFfZmFj dCBmCisgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGFh X2RpbTIgZDIKKyAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDIgPSAxKQorICAgLT4g IEluZGV4IFNjYW4gdXNpbmcgYWFfZGltMV9wa2V5IG9uIGFhX2RpbTEgZDEKKyAgICAgICAgIElu ZGV4IENvbmQ6IChpZCA9IGYuZGltMV9pZCkKKyAgICAgICAgIEZpbHRlcjogKHZhbDEgPSAxKQor IFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgTkVTVEVEX0xPT1BfUExBSU4oZDEpIC8qIG1hdGNo ZWQgKi8KKygxMiByb3dzKQorCistLSBBZGQgYSB1c2VsZXNzIGV4dHJhIGVudHJ5IHRvIG91ciB0 ZXN0IHN0YXNoLiBTaG91bGRuJ3QgY2hhbmdlIHRoZSByZXN1bHQKKy0tIGZyb20gdGhlIHByZXZp b3VzIHRlc3QuCistLSAoSWYgd2UncmUgdW5sdWNreSBlbm91Z2ggdGhhdCB0aGlzIGV2ZXIgZmFp bHMgZHVlIHRvIHF1ZXJ5IElEIGFjdHVhbGx5CistLSBiZWluZyAxLCB0aGVuIGp1c3QgcHV0IHNv bWUgb3RoZXIgY29uc3RhbnQgaGVyZS4gU2VlbXMgdW5saWtlbHkuKQorU0VMRUNUIHBnX3NldF9z dGFzaGVkX2FkdmljZSgncmVncmVzc19zdGFzaCcsIDEsICdTRVFfU0NBTihkMSknKTsKKyBwZ19z ZXRfc3Rhc2hlZF9hZHZpY2UgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIAorKDEgcm93KQor CitFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCAqIEZST00gYWFfZmFjdCBmCisJTEVGVCBKT0lO IGFhX2RpbTEgZDEgT04gZi5kaW0xX2lkID0gZDEuaWQKKwlMRUZUIEpPSU4gYWFfZGltMiBkMiBP TiBmLmRpbTJfaWQgPSBkMi5pZAorCVdIRVJFIHZhbDEgPSAxIEFORCB2YWwyID0gMTsKKyAgICAg ICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AK KyAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgIEhhc2ggQ29uZDogKGYuZGltMl9pZCA9IGQyLmlk KQorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGFhX2ZhY3QgZgorICAgICAgICAgLT4gIEhhc2gK KyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBhYV9kaW0yIGQyCisgICAgICAgICAgICAg ICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIGFhX2Rp bTFfcGtleSBvbiBhYV9kaW0xIGQxCisgICAgICAgICBJbmRleCBDb25kOiAoaWQgPSBmLmRpbTFf aWQpCisgICAgICAgICBGaWx0ZXI6ICh2YWwxID0gMSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToK KyAgIE5FU1RFRF9MT09QX1BMQUlOKGQxKSAvKiBtYXRjaGVkICovCisoMTIgcm93cykKKworLS0g VHJ5IGFuIGVtcHR5IHN0YXNoIHRvIGJlIHN1cmUgaXQgZG9lcyBub3RoaW5nCitTRUxFQ1QgcGdf Y3JlYXRlX2FkdmljZV9zdGFzaCgncmVncmVzc19lbXB0eV9zdGFzaCcpOworIHBnX2NyZWF0ZV9h ZHZpY2Vfc3Rhc2ggCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAKKygxIHJvdykKKworU0VU IHBnX3N0YXNoX2FkdmljZS5zdGFzaF9uYW1lID0gJ3JlZ3Jlc3NfZW1wdHlfc3Rhc2gnOworRVhQ TEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1QgKiBGUk9NIGFhX2ZhY3QgZgorCUxFRlQgSk9JTiBhYV9k aW0xIGQxIE9OIGYuZGltMV9pZCA9IGQxLmlkCisJTEVGVCBKT0lOIGFhX2RpbTIgZDIgT04gZi5k aW0yX2lkID0gZDIuaWQKKwlXSEVSRSB2YWwxID0gMSBBTkQgdmFsMiA9IDE7CisgICAgICAgICAg ICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggSm9pbgorICAgSGFzaCBDb25kOiAoZi5kaW0xX2lk ID0gZDEuaWQpCisgICAtPiAgSGFzaCBKb2luCisgICAgICAgICBIYXNoIENvbmQ6IChmLmRpbTJf aWQgPSBkMi5pZCkKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBhYV9mYWN0IGYKKyAgICAgICAg IC0+ICBIYXNoCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gYWFfZGltMiBkMgorICAg ICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMiA9IDEpCisgICAtPiAgSGFzaAorICAgICAg ICAgLT4gIFNlcSBTY2FuIG9uIGFhX2RpbTEgZDEKKyAgICAgICAgICAgICAgIEZpbHRlcjogKHZh bDEgPSAxKQorKDExIHJvd3MpCisKKy0tIFRlc3QgdGhhdCB3ZSBjYW4gbGlzdCBlYWNoIHN0YXNo IGluZGl2aWR1YWxseSBhbmQgYWxsIG9mIHRoZW0gdG9nZXRoZXIsCistLSBidXQgbm90IGEgbm9u ZXhpc3RlbnQgc3Rhc2guCitTRUxFQ1QgKiBGUk9NIHBnX2dldF9hZHZpY2Vfc3Rhc2hlcygpIE9S REVSIEJZIHN0YXNoX25hbWU7CisgICAgIHN0YXNoX25hbWUgICAgICB8IG51bV9lbnRyaWVzIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0KKyByZWdyZXNzX2VtcHR5X3N0YXNo IHwgICAgICAgICAgIDAKKyByZWdyZXNzX3N0YXNoICAgICAgIHwgICAgICAgICAgIDIKKygyIHJv d3MpCisKK1NFTEVDVCBzdGFzaF9uYW1lLCBhZHZpY2Vfc3RyaW5nCisJRlJPTSBwZ19nZXRfYWR2 aWNlX3N0YXNoX2NvbnRlbnRzKCdyZWdyZXNzX3N0YXNoJykgT1JERVIgQlkgcXVlcnlfaWQ7Cisg IHN0YXNoX25hbWUgICB8ICAgICBhZHZpY2Vfc3RyaW5nICAgICAKKy0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIHJlZ3Jlc3Nfc3Rhc2ggfCBTRVFfU0NBTihkMSkKKyBy ZWdyZXNzX3N0YXNoIHwgTkVTVEVEX0xPT1BfUExBSU4oZDEpCisoMiByb3dzKQorCitTRUxFQ1Qg c3Rhc2hfbmFtZSwgYWR2aWNlX3N0cmluZworCSBGUk9NIHBnX2dldF9hZHZpY2Vfc3Rhc2hfY29u dGVudHMoJ3JlZ3Jlc3NfZW1wdHlfc3Rhc2gnKSBPUkRFUiBCWSBxdWVyeV9pZDsKKyBzdGFzaF9u YW1lIHwgYWR2aWNlX3N0cmluZyAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0KKygwIHJv d3MpCisKK1NFTEVDVCBzdGFzaF9uYW1lLCBhZHZpY2Vfc3RyaW5nCisJIEZST00gcGdfZ2V0X2Fk dmljZV9zdGFzaF9jb250ZW50cyhOVUxMKSBPUkRFUiBCWSBxdWVyeV9pZDsKKyAgc3Rhc2hfbmFt ZSAgIHwgICAgIGFkdmljZV9zdHJpbmcgICAgIAorLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgcmVncmVzc19zdGFzaCB8IFNFUV9TQ0FOKGQxKQorIHJlZ3Jlc3Nfc3Rh c2ggfCBORVNURURfTE9PUF9QTEFJTihkMSkKKygyIHJvd3MpCisKK1NFTEVDVCBzdGFzaF9uYW1l LCBhZHZpY2Vfc3RyaW5nCisJIEZST00gcGdfZ2V0X2FkdmljZV9zdGFzaF9jb250ZW50cygnbm9f c3VjaF9zdGFzaCcpIE9SREVSIEJZIHF1ZXJ5X2lkOworRVJST1I6ICBhZHZpY2Ugc3Rhc2ggIm5v X3N1Y2hfc3Rhc2giIGRvZXMgbm90IGV4aXN0CistLSBUZXN0IHRoYXQgd2UgY2FuIHJlbW92ZSBh ZHZpY2UuCitTRUxFQ1QgcGdfc2V0X3N0YXNoZWRfYWR2aWNlKCdyZWdyZXNzX3N0YXNoJywgOidx aWQnLCBudWxsKTsKKyBwZ19zZXRfc3Rhc2hlZF9hZHZpY2UgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorIAorKDEgcm93KQorCitTRVQgcGdfc3Rhc2hfYWR2aWNlLnN0YXNoX25hbWUgPSAncmVn cmVzc19zdGFzaCc7CitFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCAqIEZST00gYWFfZmFjdCBm CisJTEVGVCBKT0lOIGFhX2RpbTEgZDEgT04gZi5kaW0xX2lkID0gZDEuaWQKKwlMRUZUIEpPSU4g YWFfZGltMiBkMiBPTiBmLmRpbTJfaWQgPSBkMi5pZAorCVdIRVJFIHZhbDEgPSAxIEFORCB2YWwy ID0gMTsKKyAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSGFzaCBKb2luCisgICBIYXNo IENvbmQ6IChmLmRpbTFfaWQgPSBkMS5pZCkKKyAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgIEhh c2ggQ29uZDogKGYuZGltMl9pZCA9IGQyLmlkKQorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGFh X2ZhY3QgZgorICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBv biBhYV9kaW0yIGQyCisgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyAg IC0+ICBIYXNoCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gYWFfZGltMSBkMQorICAgICAgICAg ICAgICAgRmlsdGVyOiAodmFsMSA9IDEpCisoMTEgcm93cykKKworU0VMRUNUICogRlJPTSBwZ19n ZXRfYWR2aWNlX3N0YXNoZXMoKSBPUkRFUiBCWSBzdGFzaF9uYW1lOworICAgICBzdGFzaF9uYW1l ICAgICAgfCBudW1fZW50cmllcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t CisgcmVncmVzc19lbXB0eV9zdGFzaCB8ICAgICAgICAgICAwCisgcmVncmVzc19zdGFzaCAgICAg ICB8ICAgICAgICAgICAxCisoMiByb3dzKQorCitTRUxFQ1Qgc3Rhc2hfbmFtZSwgYWR2aWNlX3N0 cmluZworCUZST00gcGdfZ2V0X2FkdmljZV9zdGFzaF9jb250ZW50cygncmVncmVzc19zdGFzaCcp IE9SREVSIEJZIHF1ZXJ5X2lkOworICBzdGFzaF9uYW1lICAgfCBhZHZpY2Vfc3RyaW5nIAorLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLQorIHJlZ3Jlc3Nfc3Rhc2ggfCBTRVFfU0NBTihk MSkKKygxIHJvdykKKworLS0gQ2xlYW4gdXAgc3RhdGUgaW4gZHluYW1pYyBzaGFyZWQgbWVtb3J5 LgorU0VMRUNUIHBnX2Ryb3BfYWR2aWNlX3N0YXNoKCdyZWdyZXNzX3N0YXNoJyk7CisgcGdfZHJv cF9hZHZpY2Vfc3Rhc2ggCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgCisoMSByb3cpCisKK1NF TEVDVCBwZ19kcm9wX2FkdmljZV9zdGFzaCgncmVncmVzc19lbXB0eV9zdGFzaCcpOworIHBnX2Ry b3BfYWR2aWNlX3N0YXNoIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIAorKDEgcm93KQorCmRp ZmYgLS1naXQgYS9jb250cmliL3BnX3N0YXNoX2FkdmljZS9tZXNvbi5idWlsZCBiL2NvbnRyaWIv cGdfc3Rhc2hfYWR2aWNlL21lc29uLmJ1aWxkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwMDAwLi5iNjY2YmNkMGYxYgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfc3Rh c2hfYWR2aWNlL21lc29uLmJ1aWxkCkBAIC0wLDAgKzEsMzUgQEAKKyMgQ29weXJpZ2h0IChjKSAy MDIyLTIwMjYsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisKK3BnX3N0YXNo X2FkdmljZV9zb3VyY2VzID0gZmlsZXMoCisgICdwZ19zdGFzaF9hZHZpY2UuYycKKykKKworaWYg aG9zdF9zeXN0ZW0gPT0gJ3dpbmRvd3MnCisgIHBnX3N0YXNoX2FkdmljZV9zb3VyY2VzICs9IHJj X2xpYl9nZW4ucHJvY2Vzcyh3aW4zMnZlcl9yYywgZXh0cmFfYXJnczogWworICAgICctLU5BTUUn LCAncGdfc3Rhc2hfYWR2aWNlJywKKyAgICAnLS1GSUxFREVTQycsICdwZ19zdGFzaF9hZHZpY2Ug LSBzdG9yZSBhbmQgYXV0b21hdGljYWxseSBhcHBseSBwbGFuIGFkdmljZScsXSkKK2VuZGlmCisK K3BnX3N0YXNoX2FkdmljZSA9IHNoYXJlZF9tb2R1bGUoJ3BnX3N0YXNoX2FkdmljZScsCisgIHBn X3N0YXNoX2FkdmljZV9zb3VyY2VzLAorICBpbmNsdWRlX2RpcmVjdG9yaWVzOiBbcGdfcGxhbl9h ZHZpY2VfaW5jLCBpbmNsdWRlX2RpcmVjdG9yaWVzKCcuJyldLAorICBrd2FyZ3M6IGNvbnRyaWJf bW9kX2FyZ3MsCispCitjb250cmliX3RhcmdldHMgKz0gcGdfc3Rhc2hfYWR2aWNlCisKK2luc3Rh bGxfZGF0YSgKKyAgJ3BnX3N0YXNoX2FkdmljZS0tMS4wLnNxbCcsCisgICdwZ19zdGFzaF9hZHZp Y2UuY29udHJvbCcsCisgIGt3YXJnczogY29udHJpYl9kYXRhX2FyZ3MsCispCisKK3Rlc3RzICs9 IHsKKyAgJ25hbWUnOiAncGdfc3Rhc2hfYWR2aWNlJywKKyAgJ3NkJzogbWVzb24uY3VycmVudF9z b3VyY2VfZGlyKCksCisgICdiZCc6IG1lc29uLmN1cnJlbnRfYnVpbGRfZGlyKCksCisgICdyZWdy ZXNzJzogeworICAgICdzcWwnOiBbCisgICAgICAncGdfc3Rhc2hfYWR2aWNlJywKKyAgICBdLAor ICB9LAorfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19zdGFzaF9hZHZpY2UvcGdfc3Rhc2hfYWR2 aWNlLS0xLjAuc3FsIGIvY29udHJpYi9wZ19zdGFzaF9hZHZpY2UvcGdfc3Rhc2hfYWR2aWNlLS0x LjAuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi44OGRlZGQ4ZWYx YgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfc3Rhc2hfYWR2aWNlL3BnX3N0YXNoX2Fk dmljZS0tMS4wLnNxbApAQCAtMCwwICsxLDQzIEBACisvKiBjb250cmliL3BnX3N0YXNoX2Fkdmlj ZS9wZ19zdGFzaF9hZHZpY2UtLTEuMC5zcWwgKi8KKworLS0gY29tcGxhaW4gaWYgc2NyaXB0IGlz IHNvdXJjZWQgaW4gcHNxbCwgcmF0aGVyIHRoYW4gdmlhIENSRUFURSBFWFRFTlNJT04KK1xlY2hv IFVzZSAiQ1JFQVRFIEVYVEVOU0lPTiBwZ19zdGFzaF9hZHZpY2UiIHRvIGxvYWQgdGhpcyBmaWxl LiBccXVpdAorCitDUkVBVEUgRlVOQ1RJT04gcGdfY3JlYXRlX2FkdmljZV9zdGFzaChzdGFzaF9u YW1lIHRleHQpCitSRVRVUk5TIHZvaWQKK0FTICdNT0RVTEVfUEFUSE5BTUUnLCAncGdfY3JlYXRl X2FkdmljZV9zdGFzaCcKK0xBTkdVQUdFIEMgU1RSSUNUOworCitDUkVBVEUgRlVOQ1RJT04gcGdf ZHJvcF9hZHZpY2Vfc3Rhc2goc3Rhc2hfbmFtZSB0ZXh0KQorUkVUVVJOUyB2b2lkCitBUyAnTU9E VUxFX1BBVEhOQU1FJywgJ3BnX2Ryb3BfYWR2aWNlX3N0YXNoJworTEFOR1VBR0UgQyBTVFJJQ1Q7 CisKK0NSRUFURSBGVU5DVElPTiBwZ19zZXRfc3Rhc2hlZF9hZHZpY2Uoc3Rhc2hfbmFtZSB0ZXh0 LCBxdWVyeV9pZCBiaWdpbnQsCisJCQkJCQkJCQkgIGFkdmljZV9zdHJpbmcgdGV4dCkKK1JFVFVS TlMgdm9pZAorQVMgJ01PRFVMRV9QQVRITkFNRScsICdwZ19zZXRfc3Rhc2hlZF9hZHZpY2UnCitM QU5HVUFHRSBDOworCitDUkVBVEUgRlVOQ1RJT04gcGdfZ2V0X2FkdmljZV9zdGFzaGVzKAorCU9V VCBzdGFzaF9uYW1lIHRleHQsCisJT1VUIG51bV9lbnRyaWVzIGJpZ2ludAorKQorUkVUVVJOUyBT RVRPRiByZWNvcmQKK0FTICdNT0RVTEVfUEFUSE5BTUUnLCAncGdfZ2V0X2FkdmljZV9zdGFzaGVz JworTEFOR1VBR0UgQyBTVFJJQ1Q7CisKK0NSRUFURSBGVU5DVElPTiBwZ19nZXRfYWR2aWNlX3N0 YXNoX2NvbnRlbnRzKAorCUlOT1VUIHN0YXNoX25hbWUgdGV4dCwKKwlPVVQgcXVlcnlfaWQgYmln aW50LAorCU9VVCBhZHZpY2Vfc3RyaW5nIHRleHQKKykKK1JFVFVSTlMgU0VUT0YgcmVjb3JkCitB UyAnTU9EVUxFX1BBVEhOQU1FJywgJ3BnX2dldF9hZHZpY2Vfc3Rhc2hfY29udGVudHMnCitMQU5H VUFHRSBDOworCitSRVZPS0UgQUxMIE9OIEZVTkNUSU9OIHBnX2NyZWF0ZV9hZHZpY2Vfc3Rhc2go dGV4dCkgRlJPTSBQVUJMSUM7CitSRVZPS0UgQUxMIE9OIEZVTkNUSU9OIHBnX2Ryb3BfYWR2aWNl X3N0YXNoKHRleHQpIEZST00gUFVCTElDOworUkVWT0tFIEFMTCBPTiBGVU5DVElPTiBwZ19nZXRf YWR2aWNlX3N0YXNoX2NvbnRlbnRzKHRleHQpIEZST00gUFVCTElDOworUkVWT0tFIEFMTCBPTiBG VU5DVElPTiBwZ19nZXRfYWR2aWNlX3N0YXNoZXMoKSBGUk9NIFBVQkxJQzsKK1JFVk9LRSBBTEwg T04gRlVOQ1RJT04gcGdfc2V0X3N0YXNoZWRfYWR2aWNlKHRleHQsIGJpZ2ludCwgdGV4dCkgRlJP TSBQVUJMSUM7CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3N0YXNoX2FkdmljZS9wZ19zdGFzaF9h ZHZpY2UuYyBiL2NvbnRyaWIvcGdfc3Rhc2hfYWR2aWNlL3BnX3N0YXNoX2FkdmljZS5jCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5hYmVhOWIwZTE2MQotLS0gL2Rldi9u dWxsCisrKyBiL2NvbnRyaWIvcGdfc3Rhc2hfYWR2aWNlL3BnX3N0YXNoX2FkdmljZS5jCkBAIC0w LDAgKzEsODc4IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBwZ19zdGFzaF9hZHZpY2Uu YworICoJICBBcHBseSBwbGFuIGFkdmljZSBhdXRvbWF0aWNhbGx5LCB3aXRob3V0IFNRTCBtb2Rp ZmljYXRpb25zLgorICoKKyAqIFRoaXMgbW9kdWxlIGFsbG93cyBwbGFuIGFkdmljZSBzdHJpbmdz IChhcyB1c2VkIGFuZCBnZW5lcmF0ZWQgYnkKKyAqIHBnX3BsYW5fYWR2aWNlKSB0byBiZSAic3Rh c2hlZCIgaW4gZHluYW1pYyBzaGFyZWQgbWVtb3J5IGFuZCwgZnJvbQorICogdGhlcmUsIGF1dG9t YXRpY2FsbHkgYmUgYXBwbGllZCB0byBxdWVyaWVzIGFzIHRoZXkgYXJlIHBsYW5uZWQuCisgKiBZ b3UgY2FuIGNyZWF0ZSBhbnkgbnVtYmVyIG9mIGFkdmljZSBzdGFzaGVzLCBlYWNoIG9mIHdoaWNo IGlzCisgKiBpZGVudGlmaWVkIGJ5IGEgaHVtYW4tcmVhZGFibGUsIEFTQ0lJIG5hbWUsIGFuZCBl YWNoIG9mIHRoZW0gaXMKKyAqIGVzc2VudGlhbGx5IGEgcXVlcnkgSUQgLT4gYWR2aWNlX3N0cmlu ZyBtYXBwaW5nLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNi0yMDI2LCBQb3N0Z3JlU1FMIEds b2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqCSAgY29udHJpYi9wZ19zdGFzaF9hZHZpY2Uv cGdfc3Rhc2hfYWR2aWNlLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2luY2x1ZGUg InBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJjb21tb24vaGFzaGZuLmgiCisjaW5jbHVkZSAiY29t bW9uL3N0cmluZy5oIgorI2luY2x1ZGUgImZtZ3IuaCIKKyNpbmNsdWRlICJmdW5jYXBpLmgiCisj aW5jbHVkZSAibGliL2RzaGFzaC5oIgorI2luY2x1ZGUgIm5vZGVzL3F1ZXJ5anVtYmxlLmgiCisj aW5jbHVkZSAicGdfcGxhbl9hZHZpY2UuaCIKKyNpbmNsdWRlICJzdG9yYWdlL2RzbV9yZWdpc3Ry eS5oIgorI2luY2x1ZGUgInN0b3JhZ2UvbHdsb2NrLmgiCisjaW5jbHVkZSAidXRpbHMvYnVpbHRp bnMuaCIKKyNpbmNsdWRlICJ1dGlscy9ndWMuaCIKKyNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5o IgorCitQR19NT0RVTEVfTUFHSUM7CisKK1BHX0ZVTkNUSU9OX0lORk9fVjEocGdfY3JlYXRlX2Fk dmljZV9zdGFzaCk7CitQR19GVU5DVElPTl9JTkZPX1YxKHBnX2Ryb3BfYWR2aWNlX3N0YXNoKTsK K1BHX0ZVTkNUSU9OX0lORk9fVjEocGdfZ2V0X2FkdmljZV9zdGFzaF9jb250ZW50cyk7CitQR19G VU5DVElPTl9JTkZPX1YxKHBnX2dldF9hZHZpY2Vfc3Rhc2hlcyk7CitQR19GVU5DVElPTl9JTkZP X1YxKHBnX3NldF9zdGFzaGVkX2FkdmljZSk7CisKK3R5cGVkZWYgc3RydWN0IHBnc2Ffc2hhcmVk X3N0YXRlCit7CisJTFdMb2NrCQlsb2NrOworCWludAkJCWRzYV90cmFuY2hlOworCWludAkJCXN0 YXNoX3RyYW5jaGU7CisJaW50CQkJZW50cnlfdHJhbmNoZTsKKwlpbnQJCQluZXh0X3N0YXNoX2lk OworCWRzYV9oYW5kbGUJYXJlYTsKKwlkc2hhc2hfdGFibGVfaGFuZGxlIHN0YXNoX2hhc2g7CisJ ZHNoYXNoX3RhYmxlX2hhbmRsZSBlbnRyeV9oYXNoOworfSBwZ3NhX3NoYXJlZF9zdGF0ZTsKKwor dHlwZWRlZiBzdHJ1Y3QgcGdzYV9zdGFzaAoreworCWNoYXIJCW5hbWVbTkFNRURBVEFMRU5dOwor CWludAkJCXBnc2Ffc3Rhc2hfaWQ7Cit9IHBnc2Ffc3Rhc2g7CisKK3R5cGVkZWYgc3RydWN0IHBn c2FfZW50cnlfa2V5Cit7CisJaW50CQkJcGdzYV9zdGFzaF9pZDsKKwlpbnQ2NAkJcXVlcnlJZDsK K30gcGdzYV9lbnRyeV9rZXk7CisKK3R5cGVkZWYgc3RydWN0IHBnc2FfZW50cnkKK3sKKwlwZ3Nh X2VudHJ5X2tleSBrZXk7CisJZHNhX3BvaW50ZXIgYWR2aWNlX3N0cmluZzsKK30gcGdzYV9lbnRy eTsKKwordHlwZWRlZiBzdHJ1Y3QgcGdzYV9zdGFzaF9jb3VudAoreworCXVpbnQzMgkJc3RhdHVz OworCWludAkJCXBnc2Ffc3Rhc2hfaWQ7CisJaW50NjQJCW51bV9lbnRyaWVzOworfSBwZ3NhX3N0 YXNoX2NvdW50OworCisjZGVmaW5lIFNIX1BSRUZJWCBwZ3NhX3N0YXNoX2NvdW50X3RhYmxlCisj ZGVmaW5lIFNIX0VMRU1FTlRfVFlQRSBwZ3NhX3N0YXNoX2NvdW50CisjZGVmaW5lIFNIX0tFWV9U WVBFIGludAorI2RlZmluZSBTSF9LRVkgcGdzYV9zdGFzaF9pZAorI2RlZmluZSBTSF9IQVNIX0tF WSh0Yiwga2V5KSBtdXJtdXJoYXNoMzIoKHVpbnQzMikga2V5KQorI2RlZmluZSBTSF9FUVVBTCh0 YiwgYSwgYikgKGEgPT0gYikKKyNkZWZpbmUgU0hfU0NPUEUgc3RhdGljIGlubGluZQorI2RlZmlu ZSBTSF9ERUZJTkUKKyNkZWZpbmUgU0hfREVDTEFSRQorI2luY2x1ZGUgImxpYi9zaW1wbGVoYXNo LmgiCisKK3R5cGVkZWYgc3RydWN0IHBnc2Ffc3Rhc2hfbmFtZQoreworCXVpbnQzMgkJc3RhdHVz OworCWludAkJCXBnc2Ffc3Rhc2hfaWQ7CisJY2hhcgkgICAqbmFtZTsKK30gcGdzYV9zdGFzaF9u YW1lOworCisjZGVmaW5lIFNIX1BSRUZJWCBwZ3NhX3N0YXNoX25hbWVfdGFibGUKKyNkZWZpbmUg U0hfRUxFTUVOVF9UWVBFIHBnc2Ffc3Rhc2hfbmFtZQorI2RlZmluZSBTSF9LRVlfVFlQRSBpbnQK KyNkZWZpbmUgU0hfS0VZIHBnc2Ffc3Rhc2hfaWQKKyNkZWZpbmUgU0hfSEFTSF9LRVkodGIsIGtl eSkgbXVybXVyaGFzaDMyKCh1aW50MzIpIGtleSkKKyNkZWZpbmUgU0hfRVFVQUwodGIsIGEsIGIp IChhID09IGIpCisjZGVmaW5lIFNIX1NDT1BFIHN0YXRpYyBpbmxpbmUKKyNkZWZpbmUgU0hfREVG SU5FCisjZGVmaW5lIFNIX0RFQ0xBUkUKKyNpbmNsdWRlICJsaWIvc2ltcGxlaGFzaC5oIgorCisv KiBTaGFyZWQgbWVtb3J5IHBvaW50ZXJzICovCitzdGF0aWMgcGdzYV9zaGFyZWRfc3RhdGUgKnBn c2Ffc3RhdGU7CitzdGF0aWMgZHNhX2FyZWEgKnBnc2FfZHNhX2FyZWE7CitzdGF0aWMgZHNoYXNo X3RhYmxlICpwZ3NhX3N0YXNoX2RzaGFzaDsKK3N0YXRpYyBkc2hhc2hfdGFibGUgKnBnc2FfZW50 cnlfZHNoYXNoOworCisvKiBTaGFyZWQgbWVtb3J5IGhhc2ggdGFibGUgcGFyYW1ldGVycyAqLwor c3RhdGljIGRzaGFzaF9wYXJhbWV0ZXJzIHBnc2Ffc3Rhc2hfZHNoYXNoX3BhcmFtZXRlcnMgPSB7 CisJTkFNRURBVEFMRU4sCisJc2l6ZW9mKHBnc2Ffc3Rhc2gpLAorCWRzaGFzaF9zdHJjbXAsCisJ ZHNoYXNoX3N0cmhhc2gsCisJZHNoYXNoX3N0cmNweSwKKwlMV1RSQU5DSEVfSU5WQUxJRAkJCS8q IGdldHMgc2V0IGF0IHJ1bnRpbWUgKi8KK307CisKK3N0YXRpYyBkc2hhc2hfcGFyYW1ldGVycyBw Z3NhX2VudHJ5X2RzaGFzaF9wYXJhbWV0ZXJzID0geworCXNpemVvZihwZ3NhX2VudHJ5X2tleSks CisJc2l6ZW9mKHBnc2FfZW50cnkpLAorCWRzaGFzaF9tZW1jbXAsCisJZHNoYXNoX21lbWhhc2gs CisJZHNoYXNoX21lbWNweSwKKwlMV1RSQU5DSEVfSU5WQUxJRAkJCS8qIGdldHMgc2V0IGF0IHJ1 bnRpbWUgKi8KK307CisKKy8qIEdVQyB2YXJpYWJsZSAqLworc3RhdGljIGNoYXIgKnBnX3N0YXNo X2FkdmljZV9zdGFzaF9uYW1lID0gIiI7CisKKy8qIE90aGVyIGdsb2JhbCB2YXJpYWJsZXMgKi8K K3N0YXRpYyBNZW1vcnlDb250ZXh0IHBnX3N0YXNoX2FkdmljZV9tY3h0OworCisvKiBGdW5jdGlv biBwcm90b3R5cGVzICovCitzdGF0aWMgY2hhciAqcGdzYV9hZHZpc29yKFBsYW5uZXJHbG9iYWwg Kmdsb2IsCisJCQkJCQkgIFF1ZXJ5ICpwYXJzZSwKKwkJCQkJCSAgY29uc3QgY2hhciAqcXVlcnlf c3RyaW5nLAorCQkJCQkJICBpbnQgY3Vyc29yT3B0aW9ucywKKwkJCQkJCSAgRXhwbGFpblN0YXRl ICplcyk7CitzdGF0aWMgdm9pZCBwZ3NhX2F0dGFjaCh2b2lkKTsKK3N0YXRpYyB2b2lkIHBnc2Ff Y2hlY2tfc3Rhc2hfbmFtZShjaGFyICpzdGFzaF9uYW1lKTsKK3N0YXRpYyBib29sIHBnc2FfY2hl Y2tfc3Rhc2hfbmFtZV9ndWMoY2hhciAqKm5ld3ZhbCwgdm9pZCAqKmV4dHJhLAorCQkJCQkJCQkJ ICBHdWNTb3VyY2Ugc291cmNlKTsKK3N0YXRpYyB2b2lkIHBnc2FfY2xlYXJfYWR2aWNlX3N0cmlu ZyhjaGFyICpzdGFzaF9uYW1lLCBpbnQ2NCBxdWVyeUlkKTsKK3N0YXRpYyB2b2lkIHBnc2FfY3Jl YXRlX3N0YXNoKGNoYXIgKnN0YXNoX25hbWUpOworc3RhdGljIHZvaWQgcGdzYV9kcm9wX3N0YXNo KGNoYXIgKnN0YXNoX25hbWUpOworc3RhdGljIHZvaWQgcGdzYV9pbml0X3NoYXJlZF9zdGF0ZSh2 b2lkICpwdHIsIHZvaWQgKmFyZyk7CitzdGF0aWMgaW50CXBnc2FfbG9va3VwX3N0YXNoX2lkKGNo YXIgKnN0YXNoX25hbWUpOworc3RhdGljIHZvaWQgcGdzYV9zZXRfYWR2aWNlX3N0cmluZyhjaGFy ICpzdGFzaF9uYW1lLCBpbnQ2NCBxdWVyeUlkLAorCQkJCQkJCQkgICBjaGFyICphZHZpY2Vfc3Ry aW5nKTsKKworLyoKKyAqIEluaXRpYWxpemUgdGhpcyBtb2R1bGUuCisgKi8KK3ZvaWQKK19QR19p bml0KHZvaWQpCit7CisJdm9pZAkJKCphZGRfYWR2aXNvcl9mbikgKHBnX3BsYW5fYWR2aWNlX2Fk dmlzb3JfaG9vayBob29rKTsKKworCS8qIElmIGNvbXB1dGVfcXVlcnlfaWQgPSAnYXV0bycsIHdl IHdvdWxkIGxpa2UgcXVlcnkgSURzLiAqLworCUVuYWJsZVF1ZXJ5SWQoKTsKKworCS8qIERlZmlu ZSBvdXIgR1VDcy4gKi8KKwlEZWZpbmVDdXN0b21TdHJpbmdWYXJpYWJsZSgicGdfc3Rhc2hfYWR2 aWNlLnN0YXNoX25hbWUiLAorCQkJCQkJCSAgICJOYW1lIG9mIHRoZSBhZHZpY2Ugc3Rhc2ggdG8g YmUgdXNlZCBpbiB0aGlzIHNlc3Npb24uIiwKKwkJCQkJCQkgICBOVUxMLAorCQkJCQkJCSAgICZw Z19zdGFzaF9hZHZpY2Vfc3Rhc2hfbmFtZSwKKwkJCQkJCQkgICAiIiwKKwkJCQkJCQkgICBQR0Nf VVNFUlNFVCwKKwkJCQkJCQkgICAwLAorCQkJCQkJCSAgIHBnc2FfY2hlY2tfc3Rhc2hfbmFtZV9n dWMsCisJCQkJCQkJICAgTlVMTCwKKwkJCQkJCQkgICBOVUxMKTsKKworCU1hcmtHVUNQcmVmaXhS ZXNlcnZlZCgicGdfc3Rhc2hfYWR2aWNlIik7CisKKwkvKiBUZWxsIHBnX3BsYW5fYWR2aWNlIHRo YXQgd2Ugd2FudCB0byBwcm92aWRlIGFkdmljZSBzdHJpbmdzLiAqLworCWFkZF9hZHZpc29yX2Zu ID0KKwkJbG9hZF9leHRlcm5hbF9mdW5jdGlvbigicGdfcGxhbl9hZHZpY2UiLCAicGdfcGxhbl9h ZHZpY2VfYWRkX2Fkdmlzb3IiLAorCQkJCQkJCSAgIHRydWUsIE5VTEwpOworCSgqYWRkX2Fkdmlz b3JfZm4pIChwZ3NhX2Fkdmlzb3IpOworfQorCisvKgorICogU1FMLWNhbGxhYmxlIGZ1bmN0aW9u IHRvIGNyZWF0ZSBhbiBhZHZpY2Ugc3Rhc2gKKyAqLworRGF0dW0KK3BnX2NyZWF0ZV9hZHZpY2Vf c3Rhc2goUEdfRlVOQ1RJT05fQVJHUykKK3sKKwljaGFyCSAgICpzdGFzaF9uYW1lID0gdGV4dF90 b19jc3RyaW5nKFBHX0dFVEFSR19URVhUX1BQKDApKTsKKworCXBnc2FfY2hlY2tfc3Rhc2hfbmFt ZShzdGFzaF9uYW1lKTsKKwlpZiAodW5saWtlbHkocGdzYV9lbnRyeV9kc2hhc2ggPT0gTlVMTCkp CisJCXBnc2FfYXR0YWNoKCk7CisJTFdMb2NrQWNxdWlyZSgmcGdzYV9zdGF0ZS0+bG9jaywgTFdf RVhDTFVTSVZFKTsKKwlwZ3NhX2NyZWF0ZV9zdGFzaChzdGFzaF9uYW1lKTsKKwlMV0xvY2tSZWxl YXNlKCZwZ3NhX3N0YXRlLT5sb2NrKTsKKwlQR19SRVRVUk5fVk9JRCgpOworfQorCisvKgorICog U1FMLWNhbGxhYmxlIGZ1bmN0aW9uIHRvIGRyb3AgYW4gYWR2aWNlIHN0YXNoCisgKi8KK0RhdHVt CitwZ19kcm9wX2FkdmljZV9zdGFzaChQR19GVU5DVElPTl9BUkdTKQoreworCWNoYXIJICAgKnN0 YXNoX25hbWUgPSB0ZXh0X3RvX2NzdHJpbmcoUEdfR0VUQVJHX1RFWFRfUFAoMCkpOworCisJcGdz YV9jaGVja19zdGFzaF9uYW1lKHN0YXNoX25hbWUpOworCWlmICh1bmxpa2VseShwZ3NhX2VudHJ5 X2RzaGFzaCA9PSBOVUxMKSkKKwkJcGdzYV9hdHRhY2goKTsKKwlMV0xvY2tBY3F1aXJlKCZwZ3Nh X3N0YXRlLT5sb2NrLCBMV19FWENMVVNJVkUpOworCXBnc2FfZHJvcF9zdGFzaChzdGFzaF9uYW1l KTsKKwlMV0xvY2tSZWxlYXNlKCZwZ3NhX3N0YXRlLT5sb2NrKTsKKwlQR19SRVRVUk5fVk9JRCgp OworfQorCisvKgorICogU1FMLWNhbGxhYmxlIGZ1bmN0aW9uIHRvIHByb3ZpZGUgYSBsaXN0IG9m IGFkdmljZSBzdGFzaGVzCisgKi8KK0RhdHVtCitwZ19nZXRfYWR2aWNlX3N0YXNoZXMoUEdfRlVO Q1RJT05fQVJHUykKK3sKKwlSZXR1cm5TZXRJbmZvICpyc2luZm8gPSAoUmV0dXJuU2V0SW5mbyAq KSBmY2luZm8tPnJlc3VsdGluZm87CisJZHNoYXNoX3NlcV9zdGF0dXMgaXRlcmF0b3I7CisJcGdz YV9lbnRyeSAqZW50cnk7CisJcGdzYV9zdGFzaCAqc3Rhc2g7CisJcGdzYV9zdGFzaF9jb3VudF90 YWJsZV9oYXNoICpjaGFzaDsKKworCUluaXRNYXRlcmlhbGl6ZWRTUkYoZmNpbmZvLCAwKTsKKwor CS8qIEF0dGFjaCB0byBkeW5hbWljIHNoYXJlZCBtZW1vcnkgaWYgbm90IGFscmVhZHkgZG9uZS4g Ki8KKwlpZiAodW5saWtlbHkocGdzYV9lbnRyeV9kc2hhc2ggPT0gTlVMTCkpCisJCXBnc2FfYXR0 YWNoKCk7CisKKwkvKiBUYWxseSB1cCB0aGUgbnVtYmVyIG9mIGVudHJpZXMgcGVyIHN0YXNoLiAq LworCWNoYXNoID0gcGdzYV9zdGFzaF9jb3VudF90YWJsZV9jcmVhdGUoQ3VycmVudE1lbW9yeUNv bnRleHQsIDY0LCBOVUxMKTsKKwlkc2hhc2hfc2VxX2luaXQoJml0ZXJhdG9yLCBwZ3NhX2VudHJ5 X2RzaGFzaCwgdHJ1ZSk7CisJd2hpbGUgKChlbnRyeSA9IGRzaGFzaF9zZXFfbmV4dCgmaXRlcmF0 b3IpKSAhPSBOVUxMKQorCXsKKwkJcGdzYV9zdGFzaF9jb3VudCAqYzsKKwkJYm9vbAkJZm91bmQ7 CisKKwkJYyA9IHBnc2Ffc3Rhc2hfY291bnRfdGFibGVfaW5zZXJ0KGNoYXNoLAorCQkJCQkJCQkJ CSAgZW50cnktPmtleS5wZ3NhX3N0YXNoX2lkLAorCQkJCQkJCQkJCSAgJmZvdW5kKTsKKwkJaWYg KCFmb3VuZCkKKwkJCWMtPm51bV9lbnRyaWVzID0gMTsKKwkJZWxzZQorCQkJYy0+bnVtX2VudHJp ZXMrKzsKKwl9CisJZHNoYXNoX3NlcV90ZXJtKCZpdGVyYXRvcik7CisKKwkvKiBFbWl0IHJlc3Vs dHMuICovCisJZHNoYXNoX3NlcV9pbml0KCZpdGVyYXRvciwgcGdzYV9zdGFzaF9kc2hhc2gsIHRy dWUpOworCXdoaWxlICgoc3Rhc2ggPSBkc2hhc2hfc2VxX25leHQoJml0ZXJhdG9yKSkgIT0gTlVM TCkKKwl7CisJCURhdHVtCQl2YWx1ZXNbMl07CisJCWJvb2wJCW51bGxzWzJdOworCQlwZ3NhX3N0 YXNoX2NvdW50ICpjOworCisJCXZhbHVlc1swXSA9IENTdHJpbmdHZXRUZXh0RGF0dW0oc3Rhc2gt Pm5hbWUpOworCQludWxsc1swXSA9IGZhbHNlOworCisJCWMgPSBwZ3NhX3N0YXNoX2NvdW50X3Rh YmxlX2xvb2t1cChjaGFzaCwgc3Rhc2gtPnBnc2Ffc3Rhc2hfaWQpOworCQl2YWx1ZXNbMV0gPSBJ bnQ2NEdldERhdHVtKGMgPT0gTlVMTCA/IDAgOiBjLT5udW1fZW50cmllcyk7CisJCW51bGxzWzFd ID0gZmFsc2U7CisKKwkJdHVwbGVzdG9yZV9wdXR2YWx1ZXMocnNpbmZvLT5zZXRSZXN1bHQsIHJz aW5mby0+c2V0RGVzYywgdmFsdWVzLAorCQkJCQkJCSBudWxscyk7CisJfQorCWRzaGFzaF9zZXFf dGVybSgmaXRlcmF0b3IpOworCisJcmV0dXJuIChEYXR1bSkgMDsKK30KKworLyoKKyAqIFNRTC1j YWxsYWJsZSBmdW5jdGlvbiB0byBwcm92aWRlIGFkdmljZSBzdGFzaCBjb250ZW50cworICovCitE YXR1bQorcGdfZ2V0X2FkdmljZV9zdGFzaF9jb250ZW50cyhQR19GVU5DVElPTl9BUkdTKQorewor CVJldHVyblNldEluZm8gKnJzaW5mbyA9IChSZXR1cm5TZXRJbmZvICopIGZjaW5mby0+cmVzdWx0 aW5mbzsKKwlkc2hhc2hfc2VxX3N0YXR1cyBpdGVyYXRvcjsKKwljaGFyCSAgICpzdGFzaF9uYW1l ID0gTlVMTDsKKwlwZ3NhX3N0YXNoX25hbWVfdGFibGVfaGFzaCAqbmhhc2ggPSBOVUxMOworCWlu dAkJCXN0YXNoX2lkID0gMDsKKwlwZ3NhX2VudHJ5ICplbnRyeTsKKworCUluaXRNYXRlcmlhbGl6 ZWRTUkYoZmNpbmZvLCAwKTsKKworCS8qIEF0dGFjaCB0byBkeW5hbWljIHNoYXJlZCBtZW1vcnkg aWYgbm90IGFscmVhZHkgZG9uZS4gKi8KKwlpZiAodW5saWtlbHkocGdzYV9lbnRyeV9kc2hhc2gg PT0gTlVMTCkpCisJCXBnc2FfYXR0YWNoKCk7CisKKwkvKiBVc2VyIGNhbiBwYXNzIE5VTEwgZm9y IGFsbCBzdGFzaGVzLCBvciB0aGUgbmFtZSBvZiBhIHNwZWNpZmljIHN0YXNoLiAqLworCWlmICgh UEdfQVJHSVNOVUxMKDApKQorCXsKKwkJc3Rhc2hfbmFtZSA9IHRleHRfdG9fY3N0cmluZyhQR19H RVRBUkdfVEVYVF9QUCgwKSk7CisJCXBnc2FfY2hlY2tfc3Rhc2hfbmFtZShzdGFzaF9uYW1lKTsK KwkJc3Rhc2hfaWQgPSBwZ3NhX2xvb2t1cF9zdGFzaF9pZChzdGFzaF9uYW1lKTsKKworCQkvKiBJ ZiB0aGUgdXNlciBzcGVjaWZpZWQgYSBzdGFzaCBuYW1lLCBpdCBzaG91bGQgZXhpc3QuICovCisJ CWlmIChzdGFzaF9pZCA9PSAwKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJZXJyY29kZShFUlJD T0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJZXJybXNnKCJhZHZpY2Ugc3Rhc2gg XCIlc1wiIGRvZXMgbm90IGV4aXN0Iiwgc3Rhc2hfbmFtZSkpOworCX0KKwllbHNlCisJeworCQlw Z3NhX3N0YXNoICpzdGFzaDsKKworCQkvKgorCQkgKiBJZiB3ZSdyZSBkdW1waW5nIGRhdGEgYWJv dXQgYWxsIHN0YXNoZXMsIHdlIG5lZWQgYW4gSUQtPm5hbWUgbG9va3VwCisJCSAqIHRhYmxlLgor CQkgKi8KKwkJbmhhc2ggPSBwZ3NhX3N0YXNoX25hbWVfdGFibGVfY3JlYXRlKEN1cnJlbnRNZW1v cnlDb250ZXh0LCA2NCwgTlVMTCk7CisJCWRzaGFzaF9zZXFfaW5pdCgmaXRlcmF0b3IsIHBnc2Ff c3Rhc2hfZHNoYXNoLCB0cnVlKTsKKwkJd2hpbGUgKChzdGFzaCA9IGRzaGFzaF9zZXFfbmV4dCgm aXRlcmF0b3IpKSAhPSBOVUxMKQorCQl7CisJCQlwZ3NhX3N0YXNoX25hbWUgKm47CisJCQlib29s CQlmb3VuZDsKKworCQkJbiA9IHBnc2Ffc3Rhc2hfbmFtZV90YWJsZV9pbnNlcnQobmhhc2gsCisJ CQkJCQkJCQkJCSBzdGFzaC0+cGdzYV9zdGFzaF9pZCwKKwkJCQkJCQkJCQkJICZmb3VuZCk7CisJ CQlBc3NlcnQoIWZvdW5kKTsKKwkJCW4tPm5hbWUgPSBwc3RyZHVwKHN0YXNoLT5uYW1lKTsKKwkJ fQorCQlkc2hhc2hfc2VxX3Rlcm0oJml0ZXJhdG9yKTsKKwl9CisKKwkvKiBOb3cgaXRlcmF0ZSBv dmVyIGFsbCB0aGUgZW50cmllcy4gKi8KKwlkc2hhc2hfc2VxX2luaXQoJml0ZXJhdG9yLCBwZ3Nh X2VudHJ5X2RzaGFzaCwgZmFsc2UpOworCXdoaWxlICgoZW50cnkgPSBkc2hhc2hfc2VxX25leHQo Jml0ZXJhdG9yKSkgIT0gTlVMTCkKKwl7CisJCURhdHVtCQl2YWx1ZXNbM107CisJCWJvb2wJCW51 bGxzWzNdOworCQljaGFyCSAgICp0aGlzX3N0YXNoX25hbWU7CisJCWNoYXIJICAgKmFkdmljZV9z dHJpbmc7CisKKwkJLyogU2tpcCBpbmNvbXBsZXRlIGVudHJpZXMgd2hlcmUgdGhlIGFkdmljZSBz dHJpbmcgd2FzIG5ldmVyIHNldC4gKi8KKwkJaWYgKGVudHJ5LT5hZHZpY2Vfc3RyaW5nID09IElu dmFsaWREc2FQb2ludGVyKQorCQkJY29udGludWU7CisKKwkJaWYgKHN0YXNoX2lkICE9IDApCisJ CXsKKwkJCS8qCisJCQkgKiBXZSdyZSBvbmx5IGR1bXBpbmcgZGF0YSBmb3Igb25lIHBhcnRpY3Vs YXIgc3Rhc2gsIHNvIHNraXAKKwkJCSAqIGVudHJpZXMgZm9yIGFueSBvdGhlciBzdGFzaCBhbmQg dXNlIHRoZSBzdGFzaCBuYW1lIHNwZWNpZmllZCBieQorCQkJICogdGhlIHVzZXIuCisJCQkgKi8K KwkJCWlmIChzdGFzaF9pZCAhPSBlbnRyeS0+a2V5LnBnc2Ffc3Rhc2hfaWQpCisJCQkJY29udGlu dWU7CisJCQl0aGlzX3N0YXNoX25hbWUgPSBzdGFzaF9uYW1lOworCQl9CisJCWVsc2UKKwkJewor CQkJcGdzYV9zdGFzaF9uYW1lICpuOworCisJCQkvKgorCQkJICogV2UncmUgZHVtcGluZyBkYXRh IGZvciBhbGwgc3Rhc2hlcywgc28gbG9vayB1cCB0aGUgY29ycmVjdCBuYW1lCisJCQkgKiB0byB1 c2UgaW4gdGhlIGhhc2ggdGFibGUuIElmIG5vdGhpbmcgaXMgZm91bmQsIHdoaWNoIGlzCisJCQkg KiBwb3NzaWJsZSBkdWUgdG8gcmFjZSBjb25kaXRpb25zLCBtYWtlIHVwIGEgc3RyaW5nIHRvIHVz ZS4KKwkJCSAqLworCQkJbiA9IHBnc2Ffc3Rhc2hfbmFtZV90YWJsZV9sb29rdXAobmhhc2gsIGVu dHJ5LT5rZXkucGdzYV9zdGFzaF9pZCk7CisJCQlpZiAobiAhPSBOVUxMKQorCQkJCXRoaXNfc3Rh c2hfbmFtZSA9IG4tPm5hbWU7CisJCQllbHNlCisJCQkJdGhpc19zdGFzaF9uYW1lID0gcHNwcmlu dGYoIjxzdGFzaCAlZD4iLAorCQkJCQkJCQkJCSAgIGVudHJ5LT5rZXkucGdzYV9zdGFzaF9pZCk7 CisJCX0KKworCQkvKiBXb3JrIG91dCB0dXBsZSB2YWx1ZXMuICovCisJCXZhbHVlc1swXSA9IENT dHJpbmdHZXRUZXh0RGF0dW0odGhpc19zdGFzaF9uYW1lKTsKKwkJbnVsbHNbMF0gPSBmYWxzZTsK KwkJdmFsdWVzWzFdID0gSW50NjRHZXREYXR1bShlbnRyeS0+a2V5LnF1ZXJ5SWQpOworCQludWxs c1sxXSA9IGZhbHNlOworCQlhZHZpY2Vfc3RyaW5nID0gZHNhX2dldF9hZGRyZXNzKHBnc2FfZHNh X2FyZWEsIGVudHJ5LT5hZHZpY2Vfc3RyaW5nKTsKKwkJdmFsdWVzWzJdID0gQ1N0cmluZ0dldFRl eHREYXR1bShhZHZpY2Vfc3RyaW5nKTsKKwkJbnVsbHNbMl0gPSBmYWxzZTsKKworCQkvKiBFbWl0 IHRoZSB0dXBsZS4gKi8KKwkJdHVwbGVzdG9yZV9wdXR2YWx1ZXMocnNpbmZvLT5zZXRSZXN1bHQs IHJzaW5mby0+c2V0RGVzYywgdmFsdWVzLAorCQkJCQkJCSBudWxscyk7CisJfQorCWRzaGFzaF9z ZXFfdGVybSgmaXRlcmF0b3IpOworCisJcmV0dXJuIChEYXR1bSkgMDsKK30KKworLyoKKyAqIFNR TC1jYWxsYWJsZSBmdW5jdGlvbiB0byB1cGRhdGUgYW4gYWR2aWNlIHN0YXNoIGVudHJ5IGZvciBh IHBhcnRpY3VsYXIKKyAqIHF1ZXJ5IElECisgKgorICogSWYgdGhlIHNlY29uZCBhcmd1bWVudCBp cyBOVUxMLCB3ZSBkZWxldGUgYW55IGV4aXN0aW5nIGFkdmljZSBzdGFzaAorICogZW50cnk7IG90 aGVyd2lzZSwgd2UgZWl0aGVyIGNyZWF0ZSBhbiBlbnRyeSBvciB1cGRhdGUgaXQgd2l0aCB0aGUg bmV3CisgKiBhZHZpY2Ugc3RyaW5nLgorICovCitEYXR1bQorcGdfc2V0X3N0YXNoZWRfYWR2aWNl KFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJY2hhcgkgICAqc3Rhc2hfbmFtZTsKKwlpbnQ2NAkJcXVl cnlJZDsKKworCWlmIChQR19BUkdJU05VTEwoMCkgfHwgUEdfQVJHSVNOVUxMKDEpKQorCQlQR19S RVRVUk5fTlVMTCgpOworCisJLyogR2V0IGFuZCBjaGVjayBhZHZpY2Ugc3Rhc2ggbmFtZS4gKi8K KwlzdGFzaF9uYW1lID0gdGV4dF90b19jc3RyaW5nKFBHX0dFVEFSR19URVhUX1BQKDApKTsKKwlw Z3NhX2NoZWNrX3N0YXNoX25hbWUoc3Rhc2hfbmFtZSk7CisKKwkvKgorCSAqIEdldCBhbmQgY2hl Y2sgcXVlcnkgSUQuCisJICoKKwkgKiBxdWVyeUlEIDAgbWVhbnMgbm8gcXVlcnkgSUQgd2FzIGNv bXB1dGVkLCBzbyByZWplY3QgdGhhdC4KKwkgKi8KKwlxdWVyeUlkID0gUEdfR0VUQVJHX0lOVDY0 KDEpOworCWlmIChxdWVyeUlkID09IDApCisJCWVyZXBvcnQoRVJST1IsCisJCQkJZXJyY29kZShF UlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQllcnJtc2coImNhbm5vdCBzZXQg YWR2aWNlIHN0cmluZyBmb3IgcXVlcnkgSUQgMCIpKTsKKworCS8qIEF0dGFjaCB0byBkeW5hbWlj IHNoYXJlZCBtZW1vcnkgaWYgbm90IGFscmVhZHkgZG9uZS4gKi8KKwlpZiAodW5saWtlbHkocGdz YV9lbnRyeV9kc2hhc2ggPT0gTlVMTCkpCisJCXBnc2FfYXR0YWNoKCk7CisKKwkvKiBOb3cgY2Fs bCB0aGUgYXBwcm9wcmlhdGUgZnVuY3Rpb24gdG8gZG8gdGhlIHJlYWwgd29yay4gKi8KKwlpZiAo UEdfQVJHSVNOVUxMKDIpKQorCQlwZ3NhX2NsZWFyX2FkdmljZV9zdHJpbmcoc3Rhc2hfbmFtZSwg cXVlcnlJZCk7CisJZWxzZQorCXsKKwkJY2hhcgkgICAqYWR2aWNlX3N0cmluZyA9IHRleHRfdG9f Y3N0cmluZyhQR19HRVRBUkdfVEVYVF9QUCgyKSk7CisKKwkJcGdzYV9zZXRfYWR2aWNlX3N0cmlu ZyhzdGFzaF9uYW1lLCBxdWVyeUlkLCBhZHZpY2Vfc3RyaW5nKTsKKwl9CisKKwlQR19SRVRVUk5f Vk9JRCgpOworfQorCisvKgorICogR2V0IHRoZSBhZHZpY2Ugc3RyaW5nIHRoYXQgaGFzIGJlZW4g Y29uZmlndXJlZCBmb3IgdGhpcyBxdWVyeSwgaWYgYW55LAorICogYW5kIHJldHVybiBpdC4gT3Ro ZXJ3aXNlLCByZXR1cm4gTlVMTC4KKyAqLworc3RhdGljIGNoYXIgKgorcGdzYV9hZHZpc29yKFBs YW5uZXJHbG9iYWwgKmdsb2IsIFF1ZXJ5ICpwYXJzZSwKKwkJCSBjb25zdCBjaGFyICpxdWVyeV9z dHJpbmcsIGludCBjdXJzb3JPcHRpb25zLAorCQkJIEV4cGxhaW5TdGF0ZSAqZXMpCit7CisJcGdz YV9lbnRyeV9rZXkga2V5OworCXBnc2FfZW50cnkgKmVudHJ5OworCWNoYXIJICAgKmFkdmljZV9z dHJpbmc7CisJaW50CQkJc3Rhc2hfaWQ7CisKKwkvKgorCSAqIEV4aXQgcXVpY2tseSBpZiB0aGUg c3Rhc2ggbmFtZSBpcyBlbXB0eSBvciB0aGVyZSdzIG5vIHF1ZXJ5IElELgorCSAqLworCWlmIChw Z19zdGFzaF9hZHZpY2Vfc3Rhc2hfbmFtZVswXSA9PSAnXDAnIHx8IHBhcnNlLT5xdWVyeUlkID09 IDApCisJCXJldHVybiBOVUxMOworCisJLyogQXR0YWNoIHRvIGR5bmFtaWMgc2hhcmVkIG1lbW9y eSBpZiBub3QgYWxyZWFkeSBkb25lLiAqLworCWlmICh1bmxpa2VseShwZ3NhX2VudHJ5X2RzaGFz aCA9PSBOVUxMKSkKKwkJcGdzYV9hdHRhY2goKTsKKworCS8qCisJICogVHJhbnNsYXRlIHBnX3N0 YXNoX2FkdmljZS5zdGFzaF9uYW1lIHRvIGFuIGludGVnZXIgSUQuCisJICoKKwkgKiBwZ3NhX2No ZWNrX3N0YXNoX25hbWVfZ3VjKCkgaGFzIGFscmVhZHkgdmFsaWRhdGVkIHRoZSBhZHZpY2Ugc3Rh c2gKKwkgKiBuYW1lLCBzbyB3ZSBkb24ndCBuZWVkIHRvIGNhbGwgcGdzYV9jaGVja19zdGFzaF9u YW1lKCkgaGVyZS4KKwkgKi8KKwlzdGFzaF9pZCA9IHBnc2FfbG9va3VwX3N0YXNoX2lkKHBnX3N0 YXNoX2FkdmljZV9zdGFzaF9uYW1lKTsKKwlpZiAoc3Rhc2hfaWQgPT0gMCkKKwkJcmV0dXJuIE5V TEw7CisKKwkvKgorCSAqIExvb2sgdXAgdGhlIGFkdmljZSBzdHJpbmcgZm9yIHRoZSBnaXZlbiBz dGFzaCBJRCArIHF1ZXJ5IElELgorCSAqCisJICogSWYgd2UgZmluZCBhbiBhZHZpY2Ugc3RyaW5n LCB3ZSBjb3B5IGl0IGludG8gdGhlIGN1cnJlbnQgbWVtb3J5CisJICogY29udGV4dCwgcHJlc3Vt YWJseSBzaG9ydC1saXZlZCwgc28gdGhhdCB3ZSBjYW4gcmVsZWFzZSB0aGUgbG9jayBvbiB0aGUK KwkgKiBkc2hhc2ggZW50cnkuIHBnX3BsYW5fYWR2aWNlIG9ubHkgbmVlZHMgdGhlIHZhbHVlIHRv IHJlbWFpbiBhbGxvY2F0ZWQKKwkgKiBsb25nIGVub3VnaCBmb3IgaXQgdG8gYmUgcGFyc2VkLCBz byB0aGlzIHNob3VsZCBiZSBnb29kIGVub3VnaC4KKwkgKi8KKwltZW1zZXQoJmtleSwgMCwgc2l6 ZW9mKHBnc2FfZW50cnlfa2V5KSk7CisJa2V5LnBnc2Ffc3Rhc2hfaWQgPSBzdGFzaF9pZDsKKwlr ZXkucXVlcnlJZCA9IHBhcnNlLT5xdWVyeUlkOworCWVudHJ5ID0gZHNoYXNoX2ZpbmQocGdzYV9l bnRyeV9kc2hhc2gsICZrZXksIHRydWUpOworCWlmIChlbnRyeSA9PSBOVUxMKQorCQlyZXR1cm4g TlVMTDsKKwlpZiAoZW50cnktPmFkdmljZV9zdHJpbmcgPT0gSW52YWxpZERzYVBvaW50ZXIpCisJ CWFkdmljZV9zdHJpbmcgPSBOVUxMOworCWVsc2UKKwkJYWR2aWNlX3N0cmluZyA9IHBzdHJkdXAo ZHNhX2dldF9hZGRyZXNzKHBnc2FfZHNhX2FyZWEsCisJCQkJCQkJCQkJCQllbnRyeS0+YWR2aWNl X3N0cmluZykpOworCWRzaGFzaF9yZWxlYXNlX2xvY2socGdzYV9lbnRyeV9kc2hhc2gsIGVudHJ5 KTsKKworCS8qIElmIHdlIGZvdW5kIGFuIGFkdmljZSBzdHJpbmcsIGVtaXQgYSBkZWJ1ZyBtZXNz YWdlLiAqLworCWlmIChhZHZpY2Vfc3RyaW5nICE9IE5VTEwpCisJCWVsb2coREVCVUcyLCAic3Vw cGx5aW5nIGF1dG9tYXRpYyBhZHZpY2UgZm9yIHN0YXNoIFwiJXNcIiwgcXVlcnkgSUQgJSIgUFJJ ZDY0ICI6ICVzIiwKKwkJCSBwZ19zdGFzaF9hZHZpY2Vfc3Rhc2hfbmFtZSwga2V5LnF1ZXJ5SWQs IGFkdmljZV9zdHJpbmcpOworCisJcmV0dXJuIGFkdmljZV9zdHJpbmc7Cit9CisKKy8qCisgKiBB dHRhY2ggdG8gdmFyaW91cyBzdHJ1Y3R1cmVzIGluIGR5bmFtaWMgc2hhcmVkIG1lbW9yeS4KKyAq CisgKiBUaGlzIGZ1bmN0aW9uIGlzIGRlc2lnbmVkIHRvIGJlIHJlc2lsaWVudCBhZ2FpbnN0IGVy cm9ycy4gVGhhdCBpcywgaWYgaXQKKyAqIGZhaWxzIHBhcnR3YXkgdGhyb3VnaCwgaXQgc2hvdWxk IGJlIHBvc3NpYmxlIHRvIGNhbGwgaXQgYWdhaW4sIHJlcGVhdCBubworICogd29yayBhbHJlYWR5 IGNvbXBsZXRlZCwgYW5kIHBvdGVudGlhbGx5IHN1Y2NlZWQgb3IgYXQgbGVhc3QgZ2V0IGZ1cnRo ZXIgaWYKKyAqIHdoYXRldmVyIGNhdXNlZCB0aGUgcHJldmlvdXMgZmFpbHVyZSBoYXMgYmVlbiBj b3JyZWN0ZWQuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3NhX2F0dGFjaCh2b2lkKQoreworCWJvb2wJ CWZvdW5kOworCU1lbW9yeUNvbnRleHQgb2xkY29udGV4dDsKKworCS8qCisJICogQ3JlYXRlIGEg bWVtb3J5IGNvbnRleHQgdG8gbWFrZSBzdXJlIHRoYXQgYW55IGNvbnRyb2wgc3RydWN0dXJlcwor CSAqIGFsbG9jYXRlZCBpbiBsb2NhbCBtZW1vcnkgYXJlIHN1ZmZpY2llbnRseSBwZXJzaXN0ZW50 LgorCSAqLworCWlmIChwZ19zdGFzaF9hZHZpY2VfbWN4dCA9PSBOVUxMKQorCQlwZ19zdGFzaF9h ZHZpY2VfbWN4dCA9IEFsbG9jU2V0Q29udGV4dENyZWF0ZShUb3BNZW1vcnlDb250ZXh0LAorCQkJ CQkJCQkJCQkJCSAicGdfc3Rhc2hfYWR2aWNlIiwKKwkJCQkJCQkJCQkJCQkgQUxMT0NTRVRfREVG QVVMVF9TSVpFUyk7CisJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhwZ19zdGFz aF9hZHZpY2VfbWN4dCk7CisKKwkvKiBBdHRhY2ggdG8gdGhlIGZpeGVkLXNpemUgc3RhdGUgb2Jq ZWN0IGlmIG5vdCBhbHJlYWR5IGRvbmUuICovCisJaWYgKHBnc2Ffc3RhdGUgPT0gTlVMTCkKKwkJ cGdzYV9zdGF0ZSA9IEdldE5hbWVkRFNNU2VnbWVudCgicGdfc3Rhc2hfYWR2aWNlIiwKKwkJCQkJ CQkJCQlzaXplb2YocGdzYV9zaGFyZWRfc3RhdGUpLAorCQkJCQkJCQkJCXBnc2FfaW5pdF9zaGFy ZWRfc3RhdGUsCisJCQkJCQkJCQkJJmZvdW5kLCBOVUxMKTsKKworCS8qIEF0dGFjaCB0byB0aGUg RFNBIGFyZWEgaWYgbm90IGFscmVhZHkgZG9uZS4gKi8KKwlpZiAocGdzYV9kc2FfYXJlYSA9PSBO VUxMKQorCXsKKwkJZHNhX2hhbmRsZQlhcmVhX2hhbmRsZTsKKworCQlMV0xvY2tBY3F1aXJlKCZw Z3NhX3N0YXRlLT5sb2NrLCBMV19FWENMVVNJVkUpOworCQlhcmVhX2hhbmRsZSA9IHBnc2Ffc3Rh dGUtPmFyZWE7CisJCWlmIChhcmVhX2hhbmRsZSA9PSBEU0FfSEFORExFX0lOVkFMSUQpCisJCXsK KwkJCXBnc2FfZHNhX2FyZWEgPSBkc2FfY3JlYXRlKHBnc2Ffc3RhdGUtPmRzYV90cmFuY2hlKTsK KwkJCWRzYV9waW4ocGdzYV9kc2FfYXJlYSk7CisJCQlwZ3NhX3N0YXRlLT5hcmVhID0gZHNhX2dl dF9oYW5kbGUocGdzYV9kc2FfYXJlYSk7CisJCQlMV0xvY2tSZWxlYXNlKCZwZ3NhX3N0YXRlLT5s b2NrKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCUxXTG9ja1JlbGVhc2UoJnBnc2Ffc3RhdGUtPmxv Y2spOworCQkJcGdzYV9kc2FfYXJlYSA9IGRzYV9hdHRhY2goYXJlYV9oYW5kbGUpOworCQl9CisJ CWRzYV9waW5fbWFwcGluZyhwZ3NhX2RzYV9hcmVhKTsKKwl9CisKKwkvKiBBdHRhY2ggdG8gdGhl IHN0YXNoX25hbWUtPnN0YXNoX2lkIGhhc2ggdGFibGUgaWYgbm90IGFscmVhZHkgZG9uZS4gKi8K KwlpZiAocGdzYV9zdGFzaF9kc2hhc2ggPT0gTlVMTCkKKwl7CisJCWRzaGFzaF90YWJsZV9oYW5k bGUgc3Rhc2hfaGFuZGxlOworCisJCUxXTG9ja0FjcXVpcmUoJnBnc2Ffc3RhdGUtPmxvY2ssIExX X0VYQ0xVU0lWRSk7CisJCXBnc2Ffc3Rhc2hfZHNoYXNoX3BhcmFtZXRlcnMudHJhbmNoZV9pZCA9 IHBnc2Ffc3RhdGUtPnN0YXNoX3RyYW5jaGU7CisJCXN0YXNoX2hhbmRsZSA9IHBnc2Ffc3RhdGUt PnN0YXNoX2hhc2g7CisJCWlmIChzdGFzaF9oYW5kbGUgPT0gRFNIQVNIX0hBTkRMRV9JTlZBTElE KQorCQl7CisJCQlwZ3NhX3N0YXNoX2RzaGFzaCA9IGRzaGFzaF9jcmVhdGUocGdzYV9kc2FfYXJl YSwKKwkJCQkJCQkJCQkJICAmcGdzYV9zdGFzaF9kc2hhc2hfcGFyYW1ldGVycywKKwkJCQkJCQkJ CQkJICBOVUxMKTsKKwkJCXBnc2Ffc3RhdGUtPnN0YXNoX2hhc2ggPQorCQkJCWRzaGFzaF9nZXRf aGFzaF90YWJsZV9oYW5kbGUocGdzYV9zdGFzaF9kc2hhc2gpOworCQkJTFdMb2NrUmVsZWFzZSgm cGdzYV9zdGF0ZS0+bG9jayk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlMV0xvY2tSZWxlYXNlKCZw Z3NhX3N0YXRlLT5sb2NrKTsKKwkJCXBnc2Ffc3Rhc2hfZHNoYXNoID0gZHNoYXNoX2F0dGFjaChw Z3NhX2RzYV9hcmVhLAorCQkJCQkJCQkJCQkgICZwZ3NhX3N0YXNoX2RzaGFzaF9wYXJhbWV0ZXJz LAorCQkJCQkJCQkJCQkgIHN0YXNoX2hhbmRsZSwgTlVMTCk7CisJCX0KKwl9CisKKwkvKiBBdHRh Y2ggdG8gdGhlIGVudHJ5IGhhc2ggdGFibGUgaWYgbm90IGFscmVhZHkgZG9uZS4gKi8KKwlpZiAo cGdzYV9lbnRyeV9kc2hhc2ggPT0gTlVMTCkKKwl7CisJCWRzaGFzaF90YWJsZV9oYW5kbGUgZW50 cnlfaGFuZGxlOworCisJCUxXTG9ja0FjcXVpcmUoJnBnc2Ffc3RhdGUtPmxvY2ssIExXX0VYQ0xV U0lWRSk7CisJCXBnc2FfZW50cnlfZHNoYXNoX3BhcmFtZXRlcnMudHJhbmNoZV9pZCA9IHBnc2Ff c3RhdGUtPmVudHJ5X3RyYW5jaGU7CisJCWVudHJ5X2hhbmRsZSA9IHBnc2Ffc3RhdGUtPmVudHJ5 X2hhc2g7CisJCWlmIChlbnRyeV9oYW5kbGUgPT0gRFNIQVNIX0hBTkRMRV9JTlZBTElEKQorCQl7 CisJCQlwZ3NhX2VudHJ5X2RzaGFzaCA9IGRzaGFzaF9jcmVhdGUocGdzYV9kc2FfYXJlYSwKKwkJ CQkJCQkJCQkJICAmcGdzYV9lbnRyeV9kc2hhc2hfcGFyYW1ldGVycywKKwkJCQkJCQkJCQkJICBO VUxMKTsKKwkJCXBnc2Ffc3RhdGUtPmVudHJ5X2hhc2ggPQorCQkJCWRzaGFzaF9nZXRfaGFzaF90 YWJsZV9oYW5kbGUocGdzYV9lbnRyeV9kc2hhc2gpOworCQkJTFdMb2NrUmVsZWFzZSgmcGdzYV9z dGF0ZS0+bG9jayk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlMV0xvY2tSZWxlYXNlKCZwZ3NhX3N0 YXRlLT5sb2NrKTsKKwkJCXBnc2FfZW50cnlfZHNoYXNoID0gZHNoYXNoX2F0dGFjaChwZ3NhX2Rz YV9hcmVhLAorCQkJCQkJCQkJCQkgICZwZ3NhX2VudHJ5X2RzaGFzaF9wYXJhbWV0ZXJzLAorCQkJ CQkJCQkJCQkgIGVudHJ5X2hhbmRsZSwgTlVMTCk7CisJCX0KKwl9CisKKwkvKiBSZXN0b3JlIHBy ZXZpb3VzIG1lbW9yeSBjb250ZXh0LiAqLworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250 ZXh0KTsKK30KKworLyoKKyAqIENoZWNrIHdoZXRoZXIgYW4gYWR2aWNlIHN0YXNoIG5hbWUgaXMg bGVnYWwsIGFuZCBzaWduYWwgYW4gZXJyb3IgaWYgbm90LgorICoKKyAqIEtlZXAgdGhpcyBpbiBz eW5jIHdpdGggcGdzYV9jaGVja19zdGFzaF9uYW1lX2d1YywgYmVsb3cuCisgKi8KK3N0YXRpYyB2 b2lkCitwZ3NhX2NoZWNrX3N0YXNoX25hbWUoY2hhciAqc3Rhc2hfbmFtZSkKK3sKKwkvKiBSZWpl Y3QgZW1wdHkgYWR2aWNlIHN0YXNoIG5hbWUuICovCisJaWYgKHN0YXNoX25hbWVbMF0gPT0gJ1ww JykKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQllcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVU RVJfVkFMVUUpLAorCQkJCWVycm1zZygiYWR2aWNlIHN0YXNoIG5hbWUgbWF5IG5vdCBiZSB6ZXJv IGxlbmd0aCIpKTsKKworCS8qIFJlamVjdCBvdmVybG9uZyBhZHZpY2Ugc3Rhc2ggbmFtZXMuICov CisJaWYgKHN0cmxlbihzdGFzaF9uYW1lKSArIDEgPiBOQU1FREFUQUxFTikKKwkJZXJlcG9ydChF UlJPUiwKKwkJCQllcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJ CWVycm1zZygiYWR2aWNlIHN0YXNoIG5hbWVzIG1heSBub3QgYmUgbG9uZ2VyIHRoYW4gJWQgYnl0 ZXMiLAorCQkJCQkgICBOQU1FREFUQUxFTiAtIDEpKTsKKworCS8qCisJICogUmVqZWN0IG5vbi1B U0NJSSBhZHZpY2Ugc3Rhc2ggbmFtZXMsIHNpbmNlIGFkdmljZSBzdGFzaGVzIGFyZSB2aXNpYmxl CisJICogYWNyb3NzIGFsbCBkYXRhYmFzZXMgYW5kIHRoZSBlbmNvZGluZ3Mgb2YgdGhvc2UgZGF0 YWJhc2VzIG1pZ2h0IGRpZmZlci4KKwkgKi8KKwlpZiAoIXBnX2lzX2FzY2lpKHN0YXNoX25hbWUp KQorCQllcmVwb3J0KEVSUk9SLAorCQkJCWVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRF Ul9WQUxVRSksCisJCQkJZXJybXNnKCJhZHZpY2Ugc3Rhc2ggbmFtZSBtdXN0IG5vdCBjb250YWlu IG5vbi1BU0NJSSBjaGFyYWN0ZXJzIikpOworfQorCisvKgorICogQXMgYWJvdmUsIGJ1dCBmb3Ig dGhlIEdVQyBjaGVja19ob29rLiBXZSBhbGxvdyB0aGUgZW1wdHkgc3RyaW5nIGhlcmUsCisgKiB0 aG91Z2gsIGFzIGVxdWl2YWxlbnQgdG8gZGlzYWJsaW5nIHRoZSBmZWF0dXJlLgorICovCitzdGF0 aWMgYm9vbAorcGdzYV9jaGVja19zdGFzaF9uYW1lX2d1YyhjaGFyICoqbmV3dmFsLCB2b2lkICoq ZXh0cmEsIEd1Y1NvdXJjZSBzb3VyY2UpCit7CisJY2hhcgkgICAqc3Rhc2hfbmFtZSA9ICpuZXd2 YWw7CisKKwkvKiBSZWplY3Qgb3ZlcmxvbmcgYWR2aWNlIHN0YXNoIG5hbWVzLiAqLworCWlmIChz dHJsZW4oc3Rhc2hfbmFtZSkgKyAxID4gTkFNRURBVEFMRU4pCisJeworCQlHVUNfY2hlY2tfZXJy Y29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKTsKKwkJR1VDX2NoZWNrX2VycmRl dGFpbCgiYWR2aWNlIHN0YXNoIG5hbWVzIG1heSBub3QgYmUgbG9uZ2VyIHRoYW4gJWQgYnl0ZXMi LAorCQkJCQkJCU5BTUVEQVRBTEVOIC0gMSk7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwkvKgor CSAqIFJlamVjdCBub24tQVNDSUkgYWR2aWNlIHN0YXNoIG5hbWVzLCBzaW5jZSBhZHZpY2Ugc3Rh c2hlcyBhcmUgdmlzaWJsZQorCSAqIGFjcm9zcyBhbGwgZGF0YWJhc2VzIGFuZCB0aGUgZW5jb2Rp bmdzIG9mIHRob3NlIGRhdGFiYXNlcyBtaWdodCBkaWZmZXIuCisJICovCisJaWYgKCFwZ19pc19h c2NpaShzdGFzaF9uYW1lKSkKKwl7CisJCUdVQ19jaGVja19lcnJjb2RlKEVSUkNPREVfSU5WQUxJ RF9QQVJBTUVURVJfVkFMVUUpOworCQlHVUNfY2hlY2tfZXJyZGV0YWlsKCJhZHZpY2Ugc3Rhc2gg bmFtZSBtdXN0IG5vdCBjb250YWluIG5vbi1BU0NJSSBjaGFyYWN0ZXJzIik7CisJCXJldHVybiBm YWxzZTsKKwl9CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoKKyAqIENyZWF0ZSBhbiBhZHZpY2Ug c3Rhc2guCisgKi8KK3N0YXRpYyB2b2lkCitwZ3NhX2NyZWF0ZV9zdGFzaChjaGFyICpzdGFzaF9u YW1lKQoreworCXBnc2Ffc3Rhc2ggKnN0YXNoOworCWJvb2wJCWZvdW5kOworCisJQXNzZXJ0KExX TG9ja0hlbGRCeU1lSW5Nb2RlKCZwZ3NhX3N0YXRlLT5sb2NrLCBMV19FWENMVVNJVkUpKTsKKwor CS8qIENyZWF0ZSBhIHN0YXNoIHdpdGggdGhpcyBuYW1lLCB1bmxlc3Mgb25lIGFscmVhZHkgZXhp c3RzLiAqLworCXN0YXNoID0gZHNoYXNoX2ZpbmRfb3JfaW5zZXJ0KHBnc2Ffc3Rhc2hfZHNoYXNo LCBzdGFzaF9uYW1lLCAmZm91bmQpOworCWlmIChmb3VuZCkKKwkJZXJlcG9ydChFUlJPUiwKKwkJ CQllcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCWVycm1zZygi YWR2aWNlIHN0YXNoIFwiJXNcIiBhbHJlYWR5IGV4aXN0cyIsIHN0YXNoX25hbWUpKTsKKwlzdGFz aC0+cGdzYV9zdGFzaF9pZCA9IHBnc2Ffc3RhdGUtPm5leHRfc3Rhc2hfaWQrKzsKKwlkc2hhc2hf cmVsZWFzZV9sb2NrKHBnc2Ffc3Rhc2hfZHNoYXNoLCBzdGFzaCk7Cit9CisKKy8qCisgKiBSZW1v dmUgYW55IHN0b3JlZCBhZHZpY2Ugc3RyaW5nIGZvciB0aGUgZ2l2ZW4gYWR2aWNlIHN0YXNoIGFu ZCBxdWVyeSBJRC4KKyAqLworc3RhdGljIHZvaWQKK3Bnc2FfY2xlYXJfYWR2aWNlX3N0cmluZyhj aGFyICpzdGFzaF9uYW1lLCBpbnQ2NCBxdWVyeUlkKQoreworCXBnc2FfZW50cnkgKmVudHJ5Owor CXBnc2FfZW50cnlfa2V5IGtleTsKKwlpbnQJCQlzdGFzaF9pZDsKKwlkc2FfcG9pbnRlciBvbGRf ZHA7CisKKwkvKiBUcmFuc2xhdGUgdGhlIHN0YXNoIG5hbWUgdG8gYW4gaW50ZWdlciBJRC4gKi8K KwlpZiAoKHN0YXNoX2lkID0gcGdzYV9sb29rdXBfc3Rhc2hfaWQoc3Rhc2hfbmFtZSkpID09IDAp CisJCWVyZXBvcnQoRVJST1IsCisJCQkJZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVS X1ZBTFVFKSwKKwkJCQllcnJtc2coImFkdmljZSBzdGFzaCBcIiVzXCIgZG9lcyBub3QgZXhpc3Qi LCBzdGFzaF9uYW1lKSk7CisKKwkvKgorCSAqIExvb2sgZm9yIGFuIGV4aXN0aW5nIGVudHJ5LCBh bmQgZnJlZSBpdC4gQnV0LCBiZSBzdXJlIHRvIHNhdmUgdGhlCisJICogcG9pbnRlciB0byB0aGUg YXNzb2NpYXRlZCBhZHZpY2Ugc3RyaW5nLCBpZiBhbnkuCisJICovCisJbWVtc2V0KCZrZXksIDAs IHNpemVvZihwZ3NhX2VudHJ5X2tleSkpOworCWtleS5wZ3NhX3N0YXNoX2lkID0gc3Rhc2hfaWQ7 CisJa2V5LnF1ZXJ5SWQgPSBxdWVyeUlkOworCWVudHJ5ID0gZHNoYXNoX2ZpbmQocGdzYV9lbnRy eV9kc2hhc2gsICZrZXksIHRydWUpOworCWlmIChlbnRyeSA9PSBOVUxMKQorCQlvbGRfZHAgPSBJ bnZhbGlkRHNhUG9pbnRlcjsKKwllbHNlCisJeworCQlvbGRfZHAgPSBlbnRyeS0+YWR2aWNlX3N0 cmluZzsKKwkJZHNoYXNoX2RlbGV0ZV9lbnRyeShwZ3NhX2VudHJ5X2RzaGFzaCwgZW50cnkpOwor CX0KKworCS8qIE5vdyB3ZSBmcmVlIHRoZSBhZHZpY2Ugc3RyaW5nIGFzIHdlbGwsIGlmIHRoZXJl IHdhcyBvbmUuICovCisJaWYgKG9sZF9kcCAhPSBJbnZhbGlkRHNhUG9pbnRlcikKKwkJZHNhX2Zy ZWUocGdzYV9kc2FfYXJlYSwgb2xkX2RwKTsKK30KKworLyoKKyAqIERyb3AgYW4gYWR2aWNlIHN0 YXNoLgorICovCitzdGF0aWMgdm9pZAorcGdzYV9kcm9wX3N0YXNoKGNoYXIgKnN0YXNoX25hbWUp Cit7CisJcGdzYV9lbnRyeSAqZW50cnk7CisJcGdzYV9zdGFzaCAqc3Rhc2g7CisJZHNoYXNoX3Nl cV9zdGF0dXMgaXRlcmF0b3I7CisJaW50CQkJc3Rhc2hfaWQ7CisKKwlBc3NlcnQoTFdMb2NrSGVs ZEJ5TWVJbk1vZGUoJnBnc2Ffc3RhdGUtPmxvY2ssIExXX0VYQ0xVU0lWRSkpOworCisJLyogUmVt b3ZlIHRoZSBlbnRyeSBmb3IgdGhpcyBhZHZpY2Ugc3Rhc2guICovCisJc3Rhc2ggPSBkc2hhc2hf ZmluZChwZ3NhX3N0YXNoX2RzaGFzaCwgc3Rhc2hfbmFtZSwgdHJ1ZSk7CisJaWYgKHN0YXNoID09 IE5VTEwpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFS QU1FVEVSX1ZBTFVFKSwKKwkJCQllcnJtc2coImFkdmljZSBzdGFzaCBcIiVzXCIgZG9lcyBub3Qg ZXhpc3QiLCBzdGFzaF9uYW1lKSk7CisJc3Rhc2hfaWQgPSBzdGFzaC0+cGdzYV9zdGFzaF9pZDsK Kwlkc2hhc2hfZGVsZXRlX2VudHJ5KHBnc2Ffc3Rhc2hfZHNoYXNoLCBzdGFzaCk7CisKKwkvKgor CSAqIEl0IHNob3VsZCBub3cgYmUgaW1wb3NzaWJsZSBmb3IgYW55IG5ldyBlbnRyaWVzIHRvIGJl IGFkZGVkIGZvciB0aGUKKwkgKiBhZHZpY2Ugc3Rhc2ggd2UganVzdCBkZWxldGVkLiBHbyB0aHJv dWdoIGFuZCBjbGVhbiBvdXQgYWxsIHRoZSBleGlzdGluZworCSAqIG9uZXMuCisJICovCisJZHNo YXNoX3NlcV9pbml0KCZpdGVyYXRvciwgcGdzYV9lbnRyeV9kc2hhc2gsIHRydWUpOworCXdoaWxl ICgoZW50cnkgPSBkc2hhc2hfc2VxX25leHQoJml0ZXJhdG9yKSkgIT0gTlVMTCkKKwl7CisJCWlm IChzdGFzaF9pZCA9PSBlbnRyeS0+a2V5LnBnc2Ffc3Rhc2hfaWQpCisJCXsKKwkJCWlmIChlbnRy eS0+YWR2aWNlX3N0cmluZyAhPSBJbnZhbGlkRHNhUG9pbnRlcikKKwkJCQlkc2FfZnJlZShwZ3Nh X2RzYV9hcmVhLCBlbnRyeS0+YWR2aWNlX3N0cmluZyk7CisJCQlkc2hhc2hfZGVsZXRlX2N1cnJl bnQoJml0ZXJhdG9yKTsKKwkJfQorCX0KKwlkc2hhc2hfc2VxX3Rlcm0oJml0ZXJhdG9yKTsKK30K KworLyoKKyAqIEluaXRpYWxpemUgc2hhcmVkIHN0YXRlIHdoZW4gZmlyc3QgY3JlYXRlZC4KKyAq Lworc3RhdGljIHZvaWQKK3Bnc2FfaW5pdF9zaGFyZWRfc3RhdGUodm9pZCAqcHRyLCB2b2lkICph cmcpCit7CisJcGdzYV9zaGFyZWRfc3RhdGUgKnN0YXRlID0gKHBnc2Ffc2hhcmVkX3N0YXRlICop IHB0cjsKKworCUxXTG9ja0luaXRpYWxpemUoJnN0YXRlLT5sb2NrLAorCQkJCQkgTFdMb2NrTmV3 VHJhbmNoZUlkKCJwZ19zdGFzaF9hZHZpY2VfbG9jayIpKTsKKwlzdGF0ZS0+ZHNhX3RyYW5jaGUg PSBMV0xvY2tOZXdUcmFuY2hlSWQoInBnX3N0YXNoX2FkdmljZV9kc2EiKTsKKwlzdGF0ZS0+c3Rh c2hfdHJhbmNoZSA9IExXTG9ja05ld1RyYW5jaGVJZCgicGdfc3Rhc2hfYWR2aWNlX3N0YXNoIik7 CisJc3RhdGUtPmVudHJ5X3RyYW5jaGUgPSBMV0xvY2tOZXdUcmFuY2hlSWQoInBnX3N0YXNoX2Fk dmljZV9lbnRyeSIpOworCXN0YXRlLT5uZXh0X3N0YXNoX2lkID0gMTsKKwlzdGF0ZS0+YXJlYSA9 IERTQV9IQU5ETEVfSU5WQUxJRDsKKwlzdGF0ZS0+c3Rhc2hfaGFzaCA9IERTSEFTSF9IQU5ETEVf SU5WQUxJRDsKKwlzdGF0ZS0+ZW50cnlfaGFzaCA9IERTSEFTSF9IQU5ETEVfSU5WQUxJRDsKK30K KworLyoKKyAqIExvb2sgdXAgdGhlIGludGVnZXIgSUQgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUg Z2l2ZW4gc3Rhc2ggbmFtZS4KKyAqCisgKiBSZXR1cm5zIDAgaWYgbm8gc3VjaCBzdGFzaCBleGlz dHMuCisgKi8KK3N0YXRpYyBpbnQKK3Bnc2FfbG9va3VwX3N0YXNoX2lkKGNoYXIgKnN0YXNoX25h bWUpCit7CisJcGdzYV9zdGFzaCAqc3Rhc2g7CisJaW50CQkJc3Rhc2hfaWQ7CisKKwkvKiBTZWFy Y2ggdGhlIHNoYXJlZCBoYXNoIHRhYmxlLiAqLworCXN0YXNoID0gZHNoYXNoX2ZpbmQocGdzYV9z dGFzaF9kc2hhc2gsIHN0YXNoX25hbWUsIGZhbHNlKTsKKwlpZiAoc3Rhc2ggPT0gTlVMTCkKKwkJ cmV0dXJuIDA7CisJc3Rhc2hfaWQgPSBzdGFzaC0+cGdzYV9zdGFzaF9pZDsKKwlkc2hhc2hfcmVs ZWFzZV9sb2NrKHBnc2Ffc3Rhc2hfZHNoYXNoLCBzdGFzaCk7CisKKwlyZXR1cm4gc3Rhc2hfaWQ7 Cit9CisKKy8qCisgKiBTdG9yZSBhIG5ldyBvciB1cGRhdGVkIGFkdmljZSBzdHJpbmcgZm9yIHRo ZSBnaXZlbiBhZHZpY2Ugc3Rhc2ggYW5kIHF1ZXJ5IElELgorICovCitzdGF0aWMgdm9pZAorcGdz YV9zZXRfYWR2aWNlX3N0cmluZyhjaGFyICpzdGFzaF9uYW1lLCBpbnQ2NCBxdWVyeUlkLCBjaGFy ICphZHZpY2Vfc3RyaW5nKQoreworCXBnc2FfZW50cnkgKmVudHJ5OworCWJvb2wJCWZvdW5kOwor CXBnc2FfZW50cnlfa2V5IGtleTsKKwlpbnQJCQlzdGFzaF9pZDsKKwlkc2FfcG9pbnRlciBuZXdf ZHA7CisJZHNhX3BvaW50ZXIgb2xkX2RwOworCisJLyogVHJhbnNsYXRlIHRoZSBzdGFzaCBuYW1l IHRvIGFuIGludGVnZXIgSUQuICovCityZXN0YXJ0OgorCWlmICgoc3Rhc2hfaWQgPSBwZ3NhX2xv b2t1cF9zdGFzaF9pZChzdGFzaF9uYW1lKSkgPT0gMCkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQll cnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCWVycm1zZygiYWR2 aWNlIHN0YXNoIFwiJXNcIiBkb2VzIG5vdCBleGlzdCIsIHN0YXNoX25hbWUpKTsKKworCS8qIE1h a2Ugc3VyZSB0aGF0IGFuIGVudHJ5IGV4aXN0cy4gKi8KKwltZW1zZXQoJmtleSwgMCwgc2l6ZW9m KHBnc2FfZW50cnlfa2V5KSk7CisJa2V5LnBnc2Ffc3Rhc2hfaWQgPSBzdGFzaF9pZDsKKwlrZXku cXVlcnlJZCA9IHF1ZXJ5SWQ7CisJZW50cnkgPSBkc2hhc2hfZmluZF9vcl9pbnNlcnQocGdzYV9l bnRyeV9kc2hhc2gsICZrZXksICZmb3VuZCk7CisJaWYgKCFmb3VuZCkKKwkJZW50cnktPmFkdmlj ZV9zdHJpbmcgPSBJbnZhbGlkRHNhUG9pbnRlcjsKKwlkc2hhc2hfcmVsZWFzZV9sb2NrKHBnc2Ff ZW50cnlfZHNoYXNoLCBlbnRyeSk7CisKKwkvKgorCSAqIENvcHkgdGhlIGFkdmljZSBzdHJpbmcg aW50byBkeW5hbWljIHNoYXJlZCBtZW1vcnkuCisJICoKKwkgKiBJZiB3ZSBmYWlsIGFmdGVyIHRo aXMgcG9pbnQsIHdlJ2xsIGhhdmUgYSBzZXJ2ZXItbGlmZXNwYW4gbWVtb3J5IGxlYWsuCisJICog V2UgYXNzdW1lIHRoYXQsIGhhdmluZyBjcmVhdGVkIHRoZSBlbnRyeSBhYm92ZSwgd2UnbGwgYmUg YWJsZSB0byBmaW5kCisJICogaXQgYWdhaW4gd2l0aG91dCBhbiBlcnJvci4KKwkgKi8KKwluZXdf ZHAgPSBkc2FfYWxsb2NhdGUocGdzYV9kc2FfYXJlYSwgc3RybGVuKGFkdmljZV9zdHJpbmcpICsg MSk7CisJc3RyY3B5KGRzYV9nZXRfYWRkcmVzcyhwZ3NhX2RzYV9hcmVhLCBuZXdfZHApLCBhZHZp Y2Vfc3RyaW5nKTsKKworCS8qCisJICogUmVmaW5kIHRoZSBlbnRyeSBhbmQgc3dhcCB0aGUgbmV3 IHBvaW50ZXIgaW50byBwbGFjZS4KKwkgKgorCSAqIElmIHRoZSBlbnRyeSBoYXMgYmVlbiBkZWxl dGVkIHNpbmNlIHdlIGZvdW5kIG9yIGNyZWF0ZWQgaXQgYWJvdmUsIGZyZWUKKwkgKiBtZW1vcnkg YW5kIHJldHJ5IGZyb20gdGhlIHRvcC4KKwkgKi8KKwllbnRyeSA9IGRzaGFzaF9maW5kKHBnc2Ff ZW50cnlfZHNoYXNoLCAma2V5LCB0cnVlKTsKKwlpZiAoZW50cnkgPT0gTlVMTCkKKwl7CisJCWRz YV9mcmVlKHBnc2FfZHNhX2FyZWEsIG5ld19kcCk7CisJCWdvdG8gcmVzdGFydDsKKwl9CisJb2xk X2RwID0gZW50cnktPmFkdmljZV9zdHJpbmc7CisJZW50cnktPmFkdmljZV9zdHJpbmcgPSBuZXdf ZHA7CisJZHNoYXNoX3JlbGVhc2VfbG9jayhwZ3NhX2VudHJ5X2RzaGFzaCwgZW50cnkpOworCisJ LyogSWYgd2UgcmVwbGFjZWQgYW4gb2xkIGFkdmljZSBzdHJpbmcsIGZyZWUgaXQuICovCisJaWYg KG9sZF9kcCAhPSBJbnZhbGlkRHNhUG9pbnRlcikKKwkJZHNhX2ZyZWUocGdzYV9kc2FfYXJlYSwg b2xkX2RwKTsKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfc3Rhc2hfYWR2aWNlL3BnX3N0YXNo X2FkdmljZS5jb250cm9sIGIvY29udHJpYi9wZ19zdGFzaF9hZHZpY2UvcGdfc3Rhc2hfYWR2aWNl LmNvbnRyb2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjRhMGZmZjVj ODY2Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19zdGFzaF9hZHZpY2UvcGdfc3Rhc2hf YWR2aWNlLmNvbnRyb2wKQEAgLTAsMCArMSw1IEBACisjIHBnX3N0YXNoX2FkdmljZSBleHRlbnNp b24KK2NvbW1lbnQgPSAnc3RvcmUgYW5kIGF1dG9tYXRpY2FsbHkgYXBwbHkgcGxhbiBhZHZpY2Un CitkZWZhdWx0X3ZlcnNpb24gPSAnMS4wJworbW9kdWxlX3BhdGhuYW1lID0gJyRsaWJkaXIvcGdf c3Rhc2hfYWR2aWNlJworcmVsb2NhdGFibGUgPSB0cnVlCmRpZmYgLS1naXQgYS9jb250cmliL3Bn X3N0YXNoX2FkdmljZS9zcWwvcGdfc3Rhc2hfYWR2aWNlLnNxbCBiL2NvbnRyaWIvcGdfc3Rhc2hf YWR2aWNlL3NxbC9wZ19zdGFzaF9hZHZpY2Uuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAwLi5hZWQyZDJhNWE5YQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdf c3Rhc2hfYWR2aWNlL3NxbC9wZ19zdGFzaF9hZHZpY2Uuc3FsCkBAIC0wLDAgKzEsMTMwIEBACitD UkVBVEUgRVhURU5TSU9OIHBnX3N0YXNoX2FkdmljZTsKK1NFVCBjb21wdXRlX3F1ZXJ5X2lkID0g b247CitTRVQgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9IDA7CisKKy0tIEhlbHBl cjogZXh0cmFjdCBxdWVyeSBpZGVudGlmaWVyIGZyb20gRVhQTEFJTiBWRVJCT1NFIG91dHB1dC4K K0NSRUFURSBPUiBSRVBMQUNFIEZVTkNUSU9OIGdldF9xdWVyeV9pZChxdWVyeV90ZXh0IHRleHQp IFJFVFVSTlMgYmlnaW50CitMQU5HVUFHRSBwbHBnc3FsIEFTICQkCitERUNMQVJFCisgICAgbGlu ZSB0ZXh0OworICAgIHFpZCBiaWdpbnQ7CitCRUdJTgorICAgIEZPUiBsaW5lIElOIEVYRUNVVEUg J0VYUExBSU4gKFZFUkJPU0UsIEZPUk1BVCBURVhUKSAnIHx8IHF1ZXJ5X3RleHQKKyAgICBMT09Q CisgICAgICAgIElGIGxpbmUgfiAnUXVlcnkgSWRlbnRpZmllcjonIFRIRU4KKyAgICAgICAgICAg IHFpZCA6PSByZWdleHBfcmVwbGFjZShsaW5lLCAnLipRdWVyeSBJZGVudGlmaWVyOlxzKigtP1xk KykuKicsICdcMScpOjpiaWdpbnQ7CisgICAgICAgICAgICBSRVRVUk4gcWlkOworICAgICAgICBF TkQgSUY7CisgICAgRU5EIExPT1A7CisgICAgUkFJU0UgRVhDRVBUSU9OICdRdWVyeSBJZGVudGlm aWVyIG5vdCBmb3VuZCBpbiBFWFBMQUlOIG91dHB1dCc7CitFTkQ7CiskJDsKKworQ1JFQVRFIFRB QkxFIGFhX2RpbTEgKGlkIGludGVnZXIgcHJpbWFyeSBrZXksIGRpbTEgdGV4dCwgdmFsMSBpbnQp CisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gYWFfZGlt MSAoaWQsIGRpbTEsIHZhbDEpCisJU0VMRUNUIGcsICdzb21lIGZpbGxlciB0ZXh0ICcgfHwgZywg KGcgJSAzKSArIDEKKwkgIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwKSBnOworVkFDVVVNIEFO QUxZWkUgYWFfZGltMTsKKworQ1JFQVRFIFRBQkxFIGFhX2RpbTIgKGlkIGludGVnZXIgcHJpbWFy eSBrZXksIGRpbTIgdGV4dCwgdmFsMiBpbnQpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0g ZmFsc2UpOworSU5TRVJUIElOVE8gYWFfZGltMiAoaWQsIGRpbTIsIHZhbDIpCisJU0VMRUNUIGcs ICdzb21lIGZpbGxlciB0ZXh0ICcgfHwgZywgKGcgJSA3KSArIDEKKwkgIEZST00gZ2VuZXJhdGVf c2VyaWVzKDEsMTAwMCkgZzsKK1ZBQ1VVTSBBTkFMWVpFIGFhX2RpbTI7CisKK0NSRUFURSBUQUJM RSBhYV9mYWN0ICgKKwlpZCBpbnQgcHJpbWFyeSBrZXksCisJZGltMV9pZCBpbnRlZ2VyIG5vdCBu dWxsIHJlZmVyZW5jZXMgYWFfZGltMSAoaWQpLAorCWRpbTJfaWQgaW50ZWdlciBub3QgbnVsbCBy ZWZlcmVuY2VzIGFhX2RpbTIgKGlkKQorKSBXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxz ZSk7CitJTlNFUlQgSU5UTyBhYV9mYWN0CisJU0VMRUNUIGcsIChnJTEwMCkrMSwgKGclMTAwKSsx IEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMDAwKSBnOworVkFDVVVNIEFOQUxZWkUgYWFfZmFj dDsKKworLS0gR2V0IHRoZSBxdWVyeSBpZGVudGlmaWVyLgorU0VMRUNUIGdldF9xdWVyeV9pZCgk JAorU0VMRUNUICogRlJPTSBhYV9mYWN0IGYgTEVGVCBKT0lOIGFhX2RpbTEgZDEgT04gZi5kaW0x X2lkID0gZDEuaWQKKwlMRUZUIEpPSU4gYWFfZGltMiBkMiBPTiBmLmRpbTJfaWQgPSBkMi5pZAor CVdIRVJFIHZhbDEgPSAxIEFORCB2YWwyID0gMTsKKyQkKSBBUyBxaWQgXGdzZXQKKworLS0gQ3Jl YXRlIGFuIGFkdmljZSBzdGFzaCBhbmQgcG9pbnQgcGdfc3Rhc2hfYWR2aWNlIGF0IGl0LgorU0VM RUNUIHBnX2NyZWF0ZV9hZHZpY2Vfc3Rhc2goJ3JlZ3Jlc3Nfc3Rhc2gnKTsKK1NFVCBwZ19zdGFz aF9hZHZpY2Uuc3Rhc2hfbmFtZSA9ICdyZWdyZXNzX3N0YXNoJzsKKworLS0gUnVuIG91ciB0ZXN0 IHF1ZXJ5IGZvciB0aGUgZmlyc3QgdGltZSB3aXRoIG5vIHN0YXNoZWQgYWR2aWNlLgorRVhQTEFJ TiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBhYV9mYWN0IGYgTEVGVCBKT0lOIGFhX2RpbTEg ZDEgT04gZi5kaW0xX2lkID0gZDEuaWQKKwlMRUZUIEpPSU4gYWFfZGltMiBkMiBPTiBmLmRpbTJf aWQgPSBkMi5pZAorCVdIRVJFIHZhbDEgPSAxIEFORCB2YWwyID0gMTsKKworLS0gRm9yY2UgYW4g aW5kZXggc2NhbiBvbiBkaW0xCitTRUxFQ1QgcGdfc2V0X3N0YXNoZWRfYWR2aWNlKCdyZWdyZXNz X3N0YXNoJywgOidxaWQnLAorCSdJTkRFWF9TQ0FOKGQxIGFhX2RpbTFfcGtleSknKTsKK0VYUExB SU4gKENPU1RTIE9GRikgU0VMRUNUICogRlJPTSBhYV9mYWN0IGYKKwlMRUZUIEpPSU4gYWFfZGlt MSBkMSBPTiBmLmRpbTFfaWQgPSBkMS5pZAorCUxFRlQgSk9JTiBhYV9kaW0yIGQyIE9OIGYuZGlt Ml9pZCA9IGQyLmlkCisJV0hFUkUgdmFsMSA9IDEgQU5EIHZhbDIgPSAxOworCistLSBGb3JjZSBh biBhbHRlcm5hdGl2ZSBqb2luIG9yZGVyCitTRUxFQ1QgcGdfc2V0X3N0YXNoZWRfYWR2aWNlKCdy ZWdyZXNzX3N0YXNoJywgOidxaWQnLAorCSdqb2luX29yZGVyKGYgZDEgZDIpJyk7CitFWFBMQUlO IChDT1NUUyBPRkYpIFNFTEVDVCAqIEZST00gYWFfZmFjdCBmCisJTEVGVCBKT0lOIGFhX2RpbTEg ZDEgT04gZi5kaW0xX2lkID0gZDEuaWQKKwlMRUZUIEpPSU4gYWFfZGltMiBkMiBPTiBmLmRpbTJf aWQgPSBkMi5pZAorCVdIRVJFIHZhbDEgPSAxIEFORCB2YWwyID0gMTsKKworLS0gRm9yY2UgYW4g YWx0ZXJuYXRpdmUgam9pbiBzdHJhdGVneQorU0VMRUNUIHBnX3NldF9zdGFzaGVkX2FkdmljZSgn cmVncmVzc19zdGFzaCcsIDoncWlkJywKKwknTkVTVEVEX0xPT1BfUExBSU4oZDEpJyk7CitFWFBM QUlOIChDT1NUUyBPRkYpIFNFTEVDVCAqIEZST00gYWFfZmFjdCBmCisJTEVGVCBKT0lOIGFhX2Rp bTEgZDEgT04gZi5kaW0xX2lkID0gZDEuaWQKKwlMRUZUIEpPSU4gYWFfZGltMiBkMiBPTiBmLmRp bTJfaWQgPSBkMi5pZAorCVdIRVJFIHZhbDEgPSAxIEFORCB2YWwyID0gMTsKKworLS0gQWRkIGEg dXNlbGVzcyBleHRyYSBlbnRyeSB0byBvdXIgdGVzdCBzdGFzaC4gU2hvdWxkbid0IGNoYW5nZSB0 aGUgcmVzdWx0CistLSBmcm9tIHRoZSBwcmV2aW91cyB0ZXN0LgorLS0gKElmIHdlJ3JlIHVubHVj a3kgZW5vdWdoIHRoYXQgdGhpcyBldmVyIGZhaWxzIGR1ZSB0byBxdWVyeSBJRCBhY3R1YWxseQor LS0gYmVpbmcgMSwgdGhlbiBqdXN0IHB1dCBzb21lIG90aGVyIGNvbnN0YW50IGhlcmUuIFNlZW1z IHVubGlrZWx5LikKK1NFTEVDVCBwZ19zZXRfc3Rhc2hlZF9hZHZpY2UoJ3JlZ3Jlc3Nfc3Rhc2gn LCAxLCAnU0VRX1NDQU4oZDEpJyk7CitFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCAqIEZST00g YWFfZmFjdCBmCisJTEVGVCBKT0lOIGFhX2RpbTEgZDEgT04gZi5kaW0xX2lkID0gZDEuaWQKKwlM RUZUIEpPSU4gYWFfZGltMiBkMiBPTiBmLmRpbTJfaWQgPSBkMi5pZAorCVdIRVJFIHZhbDEgPSAx IEFORCB2YWwyID0gMTsKKworLS0gVHJ5IGFuIGVtcHR5IHN0YXNoIHRvIGJlIHN1cmUgaXQgZG9l cyBub3RoaW5nCitTRUxFQ1QgcGdfY3JlYXRlX2FkdmljZV9zdGFzaCgncmVncmVzc19lbXB0eV9z dGFzaCcpOworU0VUIHBnX3N0YXNoX2FkdmljZS5zdGFzaF9uYW1lID0gJ3JlZ3Jlc3NfZW1wdHlf c3Rhc2gnOworRVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1QgKiBGUk9NIGFhX2ZhY3QgZgorCUxF RlQgSk9JTiBhYV9kaW0xIGQxIE9OIGYuZGltMV9pZCA9IGQxLmlkCisJTEVGVCBKT0lOIGFhX2Rp bTIgZDIgT04gZi5kaW0yX2lkID0gZDIuaWQKKwlXSEVSRSB2YWwxID0gMSBBTkQgdmFsMiA9IDE7 CisKKy0tIFRlc3QgdGhhdCB3ZSBjYW4gbGlzdCBlYWNoIHN0YXNoIGluZGl2aWR1YWxseSBhbmQg YWxsIG9mIHRoZW0gdG9nZXRoZXIsCistLSBidXQgbm90IGEgbm9uZXhpc3RlbnQgc3Rhc2guCitT RUxFQ1QgKiBGUk9NIHBnX2dldF9hZHZpY2Vfc3Rhc2hlcygpIE9SREVSIEJZIHN0YXNoX25hbWU7 CitTRUxFQ1Qgc3Rhc2hfbmFtZSwgYWR2aWNlX3N0cmluZworCUZST00gcGdfZ2V0X2FkdmljZV9z dGFzaF9jb250ZW50cygncmVncmVzc19zdGFzaCcpIE9SREVSIEJZIHF1ZXJ5X2lkOworU0VMRUNU IHN0YXNoX25hbWUsIGFkdmljZV9zdHJpbmcKKwkgRlJPTSBwZ19nZXRfYWR2aWNlX3N0YXNoX2Nv bnRlbnRzKCdyZWdyZXNzX2VtcHR5X3N0YXNoJykgT1JERVIgQlkgcXVlcnlfaWQ7CitTRUxFQ1Qg c3Rhc2hfbmFtZSwgYWR2aWNlX3N0cmluZworCSBGUk9NIHBnX2dldF9hZHZpY2Vfc3Rhc2hfY29u dGVudHMoTlVMTCkgT1JERVIgQlkgcXVlcnlfaWQ7CitTRUxFQ1Qgc3Rhc2hfbmFtZSwgYWR2aWNl X3N0cmluZworCSBGUk9NIHBnX2dldF9hZHZpY2Vfc3Rhc2hfY29udGVudHMoJ25vX3N1Y2hfc3Rh c2gnKSBPUkRFUiBCWSBxdWVyeV9pZDsKKworLS0gVGVzdCB0aGF0IHdlIGNhbiByZW1vdmUgYWR2 aWNlLgorU0VMRUNUIHBnX3NldF9zdGFzaGVkX2FkdmljZSgncmVncmVzc19zdGFzaCcsIDoncWlk JywgbnVsbCk7CitTRVQgcGdfc3Rhc2hfYWR2aWNlLnN0YXNoX25hbWUgPSAncmVncmVzc19zdGFz aCc7CitFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCAqIEZST00gYWFfZmFjdCBmCisJTEVGVCBK T0lOIGFhX2RpbTEgZDEgT04gZi5kaW0xX2lkID0gZDEuaWQKKwlMRUZUIEpPSU4gYWFfZGltMiBk MiBPTiBmLmRpbTJfaWQgPSBkMi5pZAorCVdIRVJFIHZhbDEgPSAxIEFORCB2YWwyID0gMTsKK1NF TEVDVCAqIEZST00gcGdfZ2V0X2FkdmljZV9zdGFzaGVzKCkgT1JERVIgQlkgc3Rhc2hfbmFtZTsK K1NFTEVDVCBzdGFzaF9uYW1lLCBhZHZpY2Vfc3RyaW5nCisJRlJPTSBwZ19nZXRfYWR2aWNlX3N0 YXNoX2NvbnRlbnRzKCdyZWdyZXNzX3N0YXNoJykgT1JERVIgQlkgcXVlcnlfaWQ7CisKKy0tIENs ZWFuIHVwIHN0YXRlIGluIGR5bmFtaWMgc2hhcmVkIG1lbW9yeS4KK1NFTEVDVCBwZ19kcm9wX2Fk dmljZV9zdGFzaCgncmVncmVzc19zdGFzaCcpOworU0VMRUNUIHBnX2Ryb3BfYWR2aWNlX3N0YXNo KCdyZWdyZXNzX2VtcHR5X3N0YXNoJyk7CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvY29udHJp Yi5zZ21sIGIvZG9jL3NyYy9zZ21sL2NvbnRyaWIuc2dtbAppbmRleCAyYWI2ZmFmYmFiMS4uOGYw OWQ3Mjg2OTggMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9jb250cmliLnNnbWwKKysrIGIvZG9j L3NyYy9zZ21sL2NvbnRyaWIuc2dtbApAQCAtMTYwLDYgKzE2MCw3IEBAIENSRUFURSBFWFRFTlNJ T04gPHJlcGxhY2VhYmxlPmV4dGVuc2lvbl9uYW1lPC9yZXBsYWNlYWJsZT47CiAgJnBncGxhbmFk dmljZTsKICAmcGdwcmV3YXJtOwogICZwZ3Jvd2xvY2tzOworICZwZ3N0YXNoYWR2aWNlOwogICZw Z3N0YXRzdGF0ZW1lbnRzOwogICZwZ3N0YXR0dXBsZTsKICAmcGdzdXJnZXJ5OwpkaWZmIC0tZ2l0 IGEvZG9jL3NyYy9zZ21sL2ZpbGVsaXN0LnNnbWwgYi9kb2Mvc3JjL3NnbWwvZmlsZWxpc3Quc2dt bAppbmRleCA0MDdmZjNhYmZmZS4uOGMxNGJhYjg0ZTkgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dt bC9maWxlbGlzdC5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9maWxlbGlzdC5zZ21sCkBAIC0xNDQs NiArMTQ0LDcgQEAKIDwhRU5USVRZIG9pZDJuYW1lICAgICAgICBTWVNURU0gIm9pZDJuYW1lLnNn bWwiPgogPCFFTlRJVFkgcGFnZWluc3BlY3QgICAgIFNZU1RFTSAicGFnZWluc3BlY3Quc2dtbCI+ CiA8IUVOVElUWSBwYXNzd29yZGNoZWNrICAgU1lTVEVNICJwYXNzd29yZGNoZWNrLnNnbWwiPgor PCFFTlRJVFkgcGdzdGFzaGFkdmljZSAgIFNZU1RFTSAicGdzdGFzaGFkdmljZS5zZ21sIj4KIDwh RU5USVRZIHBnYnVmZmVyY2FjaGUgICBTWVNURU0gInBnYnVmZmVyY2FjaGUuc2dtbCI+CiA8IUVO VElUWSBwZ2NvbGxlY3RhZHZpY2UgU1lTVEVNICJwZ2NvbGxlY3RhZHZpY2Uuc2dtbCI+CiA8IUVO VElUWSBwZ2NyeXB0byAgICAgICAgU1lTVEVNICJwZ2NyeXB0by5zZ21sIj4KZGlmZiAtLWdpdCBh L2RvYy9zcmMvc2dtbC9wZ3N0YXNoYWR2aWNlLnNnbWwgYi9kb2Mvc3JjL3NnbWwvcGdzdGFzaGFk dmljZS5zZ21sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4wODlmYzY2 NDQ2ZgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9zcmMvc2dtbC9wZ3N0YXNoYWR2aWNlLnNnbWwK QEAgLTAsMCArMSwyMTggQEAKKzwhLS0gZG9jL3NyYy9zZ21sL3Bnc3Rhc2hhZHZpY2Uuc2dtbCAt LT4KKworPHNlY3QxIGlkPSJwZ3N0YXNoYWR2aWNlIiB4cmVmbGFiZWw9InBnX3N0YXNoX2Fkdmlj ZSI+CisgPHRpdGxlPnBnX3N0YXNoX2FkdmljZSAmbWRhc2g7IHN0b3JlIGFuZCBhdXRvbWF0aWNh bGx5IGFwcGx5IHBsYW4gYWR2aWNlPC90aXRsZT4KKworIDxpbmRleHRlcm0gem9uZT0icGdzdGFz aGFkdmljZSI+CisgIDxwcmltYXJ5PnBnX3N0YXNoX2FkdmljZTwvcHJpbWFyeT4KKyA8L2luZGV4 dGVybT4KKworIDxwYXJhPgorICBUaGUgPGZpbGVuYW1lPnBnX3N0YXNoX2FkdmljZTwvZmlsZW5h bWU+IGV4dGVuc2lvbiBhbGxvd3MgeW91IHRvIHN0YXNoCisgIDxsaW5rIGxpbmtlbmQ9InBncGxh bmFkdmljZSI+cGxhbiBhZHZpY2U8L2xpbms+IHN0cmluZ3MgaW4gZHluYW1pYworICBzaGFyZWQg bWVtb3J5IHdoZXJlIHRoZXkgY2FuIGJlIGF1dG9tYXRpY2FsbHkgYXBwbGllZC4gQW4KKyAgPGxp dGVyYWw+YWR2aWNlIHN0YXNoPC9saXRlcmFsPiBpcyBhIG1hcHBpbmcgZnJvbQorICA8bGluayBs aW5rZW5kPSJndWMtY29tcHV0ZS1xdWVyeS1pZCI+cXVlcnkgaWRlbnRpZmllcnM8L2xpbms+IHRv IHBsYW4gYWR2aWNlCisgIHN0cmluZ3MuIFdoZW5ldmVyIGEgc2Vzc2lvbiBpcyBhc2tlZCB0byBw bGFuIGEgcXVlcnkgd2hvc2UgcXVlcnkgSUQgYXBwZWFycworICBpbiB0aGUgcmVsZXZhbnQgYWR2 aWNlIHN0YXNoLCB0aGUgcGxhbiBhZHZpY2Ugc3RyaW5nIGlzIGF1dG9tYXRpY2FsbHkgYXBwbGll ZAorICB0byBndWlkZSBwbGFubmluZy4gTm90ZSB0aGF0IGFkdmljZSBzdGFzaGVzIGV4aXN0IHB1 cmVseSBpbiBtZW1vcnkuIFRoaXMKKyAgbWVhbnMgYm90aCB0aGF0IGl0IGlzIGltcG9ydGFudCB0 byBiZSBtaW5kZnVsIG9mIG1lbW9yeSBjb25zdW1wdGlvbiB3aGVuCisgIGRlY2lkaW5nIGhvdyBt dWNoIHBsYW4gYWR2aWNlIHRvIHN0YXNoLCBhbmQgYWxzbyB0aGF0IGFkdmljZSBzdGFzaGVzIG11 c3QKKyAgYmUgcmVjcmVhdGVkIGFuZCByZXBvcHVsYXRlZCB3aGVuZXZlciB0aGUgc2VydmVyIGlz IHJlc3RhcnRlZC4KKyA8L3BhcmE+CisKKyA8cGFyYT4KKyAgSW4gb3JkZXIgdG8gdXNlIHRoaXMg bW9kdWxlLCB5b3Ugd2lsbCBuZWVkIHRvIGV4ZWN1dGUKKyAgPGxpdGVyYWw+Q1JFQVRFIEVYVEVO U0lPTiBwZ19zdGFzaF9hZHZpY2U8L2xpdGVyYWw+IGluIGF0IGxlYXN0CisgIG9uZSBkYXRhYmFz ZSwgc28gdGhhdCB5b3UgaGF2ZSBhY2Nlc3MgdG8gdGhlIFNRTCBmdW5jdGlvbnMgdG8gbWFuYWdl CisgIGFkdmljZSBzdGFzaGVzLiBZb3Ugd2lsbCBhbHNvIG5lZWQgdGhlIDxsaXRlcmFsPnBnX3N0 YXNoX2FkdmljZTwvbGl0ZXJhbD4KKyAgbW9kdWxlIHRvIGJlIGxvYWRlZCBpbiBhbGwgc2Vzc2lv bnMgd2hlcmUgeW91IHdhbnQgdGhpcyBtb2R1bGUgdG8KKyAgYXV0b21hdGljYWxseSBhcHBseSBh ZHZpY2UuIEl0IHdpbGwgdXN1YWxseSBiZSBiZXN0IHRvIGRvIHRoaXMgYnkgYWRkaW5nCisgIDxs aXRlcmFsPnBnX3N0YXNoX2FkdmljZTwvbGl0ZXJhbD4gdG8KKyAgPHhyZWYgbGlua2VuZD0iZ3Vj LXNoYXJlZC1wcmVsb2FkLWxpYnJhcmllcyIvPiBhbmQgcmVzdGFydGluZyB0aGUgc2VydmVyLgor IDwvcGFyYT4KKworIDxwYXJhPgorICBPbmNlIHlvdSBoYXZlIG1ldCB0aGUgYWJvdmUgY3JpdGVy aWEsIHlvdSBjYW4gY3JlYXRlIGFkdmljZSBzdGFzaGVzCisgIHVzaW5nIHRoZSA8bGl0ZXJhbD5w Z19jcmVhdGVfYWR2aWNlX3N0YXNoPC9saXRlcmFsPiBmdW5jdGlvbiBkZXNjcmliZWQKKyAgYmVs b3cgYW5kIHNldCB0aGUgcGxhbiBhZHZpY2UgZm9yIGEgZ2l2ZW4gcXVlcnkgSUQgaW4gYSBnaXZl biBzdGFzaCB1c2luZworICB0aGUgPGxpdGVyYWw+cGdfc2V0X3N0YXNoZWRfYWR2aWNlPC9saXRl cmFsPiBmdW5jdGlvbi4gVGhlbiwgeW91IG5lZWQKKyAgb25seSBjb25maWd1cmUgPGxpdGVyYWw+ cGdfc3Rhc2hfYWR2aWNlLnN0YXNoX25hbWU8L2xpdGVyYWw+IHRvIHBvaW50CisgIHRvIHRoZSBj aG9zZW4gYWR2aWNlIHN0YXNoIG5hbWUuIEZvciBzb21lIHVzZSBjYXNlcywgcmF0aGVyIHRoYW4g c2V0dGluZworICB0aGlzIG9uIGEgc3lzdGVtLXdpZGUgYmFzaXMsIHlvdSBtYXkgZmluZCBpdCBo ZWxwZnVsIHRvIHVzZQorICA8bGl0ZXJhbD5BTFRFUiBEQVRBQkFTRSAuLi4gU0VUPC9saXRlcmFs PiBvcgorICA8bGl0ZXJhbD5BTFRFUiBST0xFIC4uLiBTRVQ8L2xpdGVyYWw+IHRvIGNvbmZpZ3Vy ZSB2YWx1ZXMgdGhhdCB3aWxsIGFwcGx5CisgIG9ubHkgdG8gYSBkYXRhYmFzZSBvciBvbmx5IHRv IGEgY2VydGFpbiByb2xlLiBMaWtld2lzZSwgaXQgbWF5IHNvbWV0aW1lcworICBiZSBiZXR0ZXIg dG8gc2V0IHRoZSBzdGFzaCBuYW1lIGluIGEgcGFydGljdWxhciBzZXNzaW9uIHVzaW5nCisgIDxs aXRlcmFsPlNFVDwvbGl0ZXJhbD4uCisgPC9wYXJhPgorCisgPHBhcmE+CisgIEJlY2F1c2UgPGxp dGVyYWw+cGdfc3Rhc2hfYWR2aWNlPC9saXRlcmFsPiB3b3JrcyBvbiB0aGUgYmFzaXMgb2YgcXVl cnkKKyAgaWRlbnRpZmllcnMsIHlvdSB3aWxsIG5lZWQgdG8gZGV0ZXJtaW5lIHRoZSBxdWVyeSBp ZGVudGlmaWVyIGZvciBlYWNoIHF1ZXJ5CisgIHdob3NlIHBsYW4geW91IHdpc2ggdG8gY29udHJv bC4gWW91IHdpbGwgYWxzbyBuZWVkIHRvIGRldGVybWluZSB0aGUgYWR2aWNlCisgIHN0cmluZyB0 aGF0IHlvdSB3aXNoIHRvIHN0b3JlIGZvciBlYWNoIHF1ZXJ5LiBPbmUgd2F5IHRvIGRvIHRoaXMg aXMgdG8gdXNlCisgIDxsaXRlcmFsPkVYUExBSU48L2xpdGVyYWw+OiB0aGUgPGxpdGVyYWw+VkVS Qk9TRTwvbGl0ZXJhbD4gb3B0aW9uIHdpbGwKKyAgc2hvdyB0aGUgcXVlcnkgSUQsIGFuZCB0aGUg PGxpdGVyYWw+UExBTl9BRFZJQ0U8L2xpdGVyYWw+IG9wdGlvbiB3aWxsCisgIHNob3cgcGxhbiBh ZHZpY2UuIDx4cmVmIGxpbmtlbmQ9InBnY29sbGVjdGFkdmljZSIgLz4gY2FuIGJlIHVzZWQgdG8K KyAgb2J0YWluIHRoaXMgaW5mb3JtYXRpb24gZm9yIGFuIGVudGlyZSB3b3JrbG9hZCwgYWx0aG91 Z2ggY2FyZSBtdXN0IGJlCisgIHRha2VuIHNpbmNlIGl0IGNhbiB1c2UgdXAgYSBsb3Qgb2YgbWVt b3J5IHZlcnkgcXVpY2tseS4gUXVlcnkgaWRlbnRpZmllcnMgY2FuCisgIGFsc28gYmUgb2J0YWlu ZWQgdGhyb3VnaCB0b29scyBzdWNoIGFzIDx4cmVmIGxpbmtlbmQ9InBnc3RhdHN0YXRlbWVudHMi IC8+CisgIG9yIDx4cmVmIGxpbmtlbmQ9Im1vbml0b3JpbmctcGctc3RhdC1hY3Rpdml0eS12aWV3 IiAvPiwgYnV0IHRoZXNlIHRvb2xzCisgIHdpbGwgbm90IHByb3ZpZGUgcGxhbiBhZHZpY2Ugc3Ry aW5ncy4gTm90ZSB0aGF0CisgIDx4cmVmIGxpbmtlbmQ9Imd1Yy1jb21wdXRlLXF1ZXJ5LWlkIiAv PiBtdXN0IGJlIGVuYWJsZWQgZm9yIHF1ZXJ5CisgIGlkZW50aWZpZXJzIHRvIGJlIGNvbXB1dGVk OyBpZiBzZXQgdG8gPGxpdGVyYWw+YXV0bzwvbGl0ZXJhbD4sIGxvYWRpbmcKKyAgPGxpdGVyYWw+ cGdfc3Rhc2hfYWR2aWNlPC9saXRlcmFsPiB3aWxsIGVuYWJsZSBpdCBhdXRvbWF0aWNhbGx5Lgor IDwvcGFyYT4KKworIDxwYXJhPgorICBHZW5lcmFsbHksIHRoZSBmYWN0IHRoYXQgdGhlIHBsYW5u ZXIgaXMgYWJsZSB0byBjaGFuZ2UgcXVlcnkgcGxhbnMgYXMKKyAgdGhlIHVuZGVybHlpbmcgZGlz dHJpYnV0aW9uIG9mIGRhdGEgY2hhbmdlcyBpcyBhIGZlYXR1cmUsIG5vdCBhIGJ1Zy4KKyAgTW9y ZW92ZXIsIGFwcGx5aW5nIHBsYW4gYWR2aWNlIGNhbiBoYXZlIGEgbm90aWNlYWJsZSBwZXJmb3Jt YW5jZSBjb3N0IGV2ZW4KKyAgd2hlbiBpdCBkb2VzIG5vdCByZXN1bHQgaW4gYSBjaGFuZ2UgdG8g dGhlIHF1ZXJ5IHBsYW4uIFRoZXJlZm9yZSwgaXQgaXMKKyAgYSBnb29kIGlkZWEgdG8gdXNlIHRo aXMgZmVhdHVyZSBvbmx5IHdoZW4gYW5kIHRvIHRoZSBleHRlbnQgbmVlZGVkLgorICBQbGFuIGFk dmljZSBzdHJpbmdzIGNhbiBiZSB0cmltbWVkIGRvd24gdG8gbWVudGlvbiBvbmx5IHRob3NlIGFz cGVjdHMKKyAgb2YgdGhlIHBsYW4gdGhhdCBuZWVkIHRvIGJlIGNvbnRyb2xsZWQsIGFuZCB1c2Vk IG9ubHkgZm9yIHF1ZXJpZXMgd2hlcmUKKyAgdGhlcmUgaXMgYmVsaWV2ZWQgdG8gYmUgYSBzaWdu aWZpY2FudCByaXNrIG9mIHBsYW5uZXIgZXJyb3IuCisgPC9wYXJhPgorCisgPHBhcmE+CisgIE5v dGUgdGhhdCA8bGl0ZXJhbD5wZ19zdGFzaF9hZHZpY2U8L2xpdGVyYWw+IGN1cnJlbnRseSBsYWNr cyBhIHNvcGhpc3RpY2F0ZWQKKyAgc2VjdXJpdHkgbW9kZWwuIE9ubHkgdGhlIHN1cGVydXNlciwg b3IgYSB1c2VyIHRvIHdob20gdGhlIHN1cGVydXNlciBoYXMKKyAgZ3JhbnRlZCA8bGl0ZXJhbD5F WEVDVVRFPC9saXRlcmFsPiBwZXJtaXNzaW9uIG9uIHRoZSByZWxldmFudCBmdW5jdGlvbnMsCisg IG1heSBjcmVhdGUgYWR2aWNlIHN0YXNoZXMgb3IgYWx0ZXIgdGhlaXIgY29udGVudHMsIGJ1dCBh bnkgdXNlciBtYXkgc2V0CisgIDxsaXRlcmFsPnBnX3N0YXNoX2FkdmljZS5zdGFzaF9uYW1lPC9s aXRlcmFsPiBmb3IgdGhlaXIgc2Vzc2lvbiwgYW5kIHRoaXMKKyAgbWF5IHJldmVhbCB0aGUgY29u dGVudHMgb2YgYW55IGFkdmljZSBzdGFzaCB3aXRoIHRoYXQgbmFtZS4gVXNlcnMgc2hvdWxkCisg IGFzc3VtZSB0aGF0IGluZm9ybWF0aW9uIGVtYmVkZGVkIGluIHN0YXNoZWQgYWR2aWNlIHN0cmlu Z3MgbWF5IGJlY29tZSB2aXNpYmxlCisgIHRvIG5vbnByaXZpbGVnZWQgdXNlcnMuCisgPC9wYXJh PgorCisgPHNlY3QyIGlkPSJwZ3N0YXNoYWR2aWNlLWZ1bmN0aW9ucyI+CisgIDx0aXRsZT5GdW5j dGlvbnM8L3RpdGxlPgorCisgIDx2YXJpYWJsZWxpc3Q+CisKKyAgIDx2YXJsaXN0ZW50cnk+Cisg ICAgPHRlcm0+CisgICAgIDxmdW5jdGlvbj5wZ19jcmVhdGVfYWR2aWNlX3N0YXNoKHN0YXNoX25h bWUgdGV4dCkgcmV0dXJucyB2b2lkPC9mdW5jdGlvbj4KKyAgICAgPGluZGV4dGVybT4KKyAgICAg IDxwcmltYXJ5PnBnX2NyZWF0ZV9hZHZpY2Vfc3Rhc2g8L3ByaW1hcnk+CisgICAgIDwvaW5kZXh0 ZXJtPgorICAgIDwvdGVybT4KKworICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBD cmVhdGVzIGEgbmV3LCBlbXB0eSBhZHZpY2Ugc3Rhc2ggd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKyAg ICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgPHZh cmxpc3RlbnRyeT4KKyAgICA8dGVybT4KKyAgICAgPGZ1bmN0aW9uPnBnX2Ryb3BfYWR2aWNlX3N0 YXNoKHN0YXNoX25hbWUgdGV4dCkgcmV0dXJucyB2b2lkPC9mdW5jdGlvbj4KKyAgICAgPGluZGV4 dGVybT4KKyAgICAgIDxwcmltYXJ5PnBnX2Ryb3BfYWR2aWNlX3N0YXNoPC9wcmltYXJ5PgorICAg ICA8L2luZGV4dGVybT4KKyAgICA8L3Rlcm0+CisKKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJh PgorICAgICAgRHJvcHMgdGhlIG5hbWVkIGFkdmljZSBzdGFzaCBhbmQgYWxsIG9mIGl0cyBlbnRy aWVzLgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5Pgor CisgICA8dmFybGlzdGVudHJ5PgorICAgIDx0ZXJtPgorICAgICA8ZnVuY3Rpb24+cGdfc2V0X3N0 YXNoZWRfYWR2aWNlKHN0YXNoX25hbWUgdGV4dCwgcXVlcnlfaWQgYmlnaW50LAorICAgICAgIGFk dmljZV9zdHJpbmcgdGV4dCkgcmV0dXJucyB2b2lkPC9mdW5jdGlvbj4KKyAgICAgPGluZGV4dGVy bT4KKyAgICAgIDxwcmltYXJ5PnBnX3NldF9zdGFzaGVkX2FkdmljZTwvcHJpbWFyeT4KKyAgICAg PC9pbmRleHRlcm0+CisgICAgPC90ZXJtPgorCisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4K KyAgICAgIFN0b3JlcyBhbiBhZHZpY2Ugc3RyaW5nIGluIHRoZSBuYW1lZCBhZHZpY2Ugc3Rhc2gs IGFzc29jaWF0ZWQgd2l0aAorICAgICAgdGhlIGdpdmVuIHF1ZXJ5IGlkZW50aWZpZXIuIElmIGFu IGVudHJ5IGZvciB0aGF0IHF1ZXJ5IGlkZW50aWZpZXIKKyAgICAgIGFscmVhZHkgZXhpc3RzIGlu IHRoZSBzdGFzaCwgaXQgaXMgcmVwbGFjZWQuIElmCisgICAgICA8cGFyYW1ldGVyPmFkdmljZV9z dHJpbmc8L3BhcmFtZXRlcj4gaXMgPGxpdGVyYWw+TlVMTDwvbGl0ZXJhbD4sCisgICAgICBhbnkg ZXhpc3RpbmcgZW50cnkgZm9yIHRoYXQgcXVlcnkgaWRlbnRpZmllciBpcyByZW1vdmVkLgorICAg ICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCisgICA8dmFy bGlzdGVudHJ5PgorICAgIDx0ZXJtPgorICAgICA8ZnVuY3Rpb24+cGdfZ2V0X2FkdmljZV9zdGFz aGVzKCkgcmV0dXJucyBzZXRvZiAoc3Rhc2hfbmFtZSB0ZXh0LAorICAgICAgIG51bV9lbnRyaWVz IGJpZ2ludCk8L2Z1bmN0aW9uPgorICAgICA8aW5kZXh0ZXJtPgorICAgICAgPHByaW1hcnk+cGdf Z2V0X2FkdmljZV9zdGFzaGVzPC9wcmltYXJ5PgorICAgICA8L2luZGV4dGVybT4KKyAgICA8L3Rl cm0+CisKKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgUmV0dXJucyBvbmUgcm93 IGZvciBlYWNoIGFkdmljZSBzdGFzaCwgc2hvd2luZyB0aGUgc3Rhc2ggbmFtZSBhbmQKKyAgICAg IHRoZSBudW1iZXIgb2YgZW50cmllcyBpdCBjb250YWlucy4KKyAgICAgPC9wYXJhPgorICAgIDwv bGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgPHZhcmxpc3RlbnRyeT4KKyAgICA8 dGVybT4KKyAgICAgPGZ1bmN0aW9uPnBnX2dldF9hZHZpY2Vfc3Rhc2hfY29udGVudHMoc3Rhc2hf bmFtZSB0ZXh0KSByZXR1cm5zIHNldG9mCisgICAgICAgKHN0YXNoX25hbWUgdGV4dCwgcXVlcnlf aWQgYmlnaW50LCBhZHZpY2Vfc3RyaW5nIHRleHQpPC9mdW5jdGlvbj4KKyAgICAgPGluZGV4dGVy bT4KKyAgICAgIDxwcmltYXJ5PnBnX2dldF9hZHZpY2Vfc3Rhc2hfY29udGVudHM8L3ByaW1hcnk+ CisgICAgIDwvaW5kZXh0ZXJtPgorICAgIDwvdGVybT4KKworICAgIDxsaXN0aXRlbT4KKyAgICAg PHBhcmE+CisgICAgICBSZXR1cm5zIG9uZSByb3cgZm9yIGVhY2ggZW50cnkgaW4gdGhlIG5hbWVk IGFkdmljZSBzdGFzaC4gSWYKKyAgICAgIDxwYXJhbWV0ZXI+c3Rhc2hfbmFtZTwvcGFyYW1ldGVy PiBpcyA8bGl0ZXJhbD5OVUxMPC9saXRlcmFsPiwgcmV0dXJucworICAgICAgZW50cmllcyBmcm9t IGFsbCBzdGFzaGVzLgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlz dGVudHJ5PgorCisgIDwvdmFyaWFibGVsaXN0PgorCisgPC9zZWN0Mj4KKworIDxzZWN0MiBpZD0i cGdzdGFzaGFkdmljZS1jb25maWctcGFyYW1zIj4KKyAgPHRpdGxlPkNvbmZpZ3VyYXRpb24gUGFy YW1ldGVyczwvdGl0bGU+CisKKyAgPHZhcmlhYmxlbGlzdD4KKworICAgPHZhcmxpc3RlbnRyeT4K KyAgICA8dGVybT4KKyAgICAgPHZhcm5hbWU+cGdfc3Rhc2hfYWR2aWNlLnN0YXNoX25hbWU8L3Zh cm5hbWU+ICg8dHlwZT5zdHJpbmc8L3R5cGU+KQorICAgICA8aW5kZXh0ZXJtPgorICAgICAgPHBy aW1hcnk+PHZhcm5hbWU+cGdfc3Rhc2hfYWR2aWNlLnN0YXNoX25hbWU8L3Zhcm5hbWU+IGNvbmZp Z3VyYXRpb24gcGFyYW1ldGVyPC9wcmltYXJ5PgorICAgICA8L2luZGV4dGVybT4KKyAgICA8L3Rl cm0+CisKKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgU3BlY2lmaWVzIHRoZSBu YW1lIG9mIHRoZSBhZHZpY2Ugc3Rhc2ggdG8gY29uc3VsdCBkdXJpbmcgcXVlcnkKKyAgICAgIHBs YW5uaW5nLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyB0aGUgZW1wdHkgc3RyaW5nLCB3aGljaCBkaXNh YmxlcworICAgICAgdGhpcyBtb2R1bGUuCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgor ICAgPC92YXJsaXN0ZW50cnk+CisKKyAgPC92YXJpYWJsZWxpc3Q+CisKKyA8L3NlY3QyPgorCisg PHNlY3QyIGlkPSJwZ3N0YXNoYWR2aWNlLWF1dGhvciI+CisgIDx0aXRsZT5BdXRob3I8L3RpdGxl PgorCisgIDxwYXJhPgorICAgUm9iZXJ0IEhhYXMgPGVtYWlsPnJoYWFzQHBvc3RncmVzcWwub3Jn PC9lbWFpbD4KKyAgPC9wYXJhPgorIDwvc2VjdDI+CisKKzwvc2VjdDE+CmRpZmYgLS1naXQgYS9z cmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90eXBl ZGVmcy5saXN0CmluZGV4IGIyNjBmOTc5ZTY0Li40NGNhYzViNGNiNiAxMDA2NDQKLS0tIGEvc3Jj L3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5 cGVkZWZzLmxpc3QKQEAgLTQwMjMsNiArNDAyMywxMiBAQCBwZ3BhX3Ryb3ZlX2xvb2t1cF90eXBl CiBwZ3BhX3Ryb3ZlX3Jlc3VsdAogcGdwYV90cm92ZV9zbGljZQogcGdwYV91bnJvbGxlZF9qb2lu CitwZ3NhX2VudHJ5CitwZ3NhX2VudHJ5X2tleQorcGdzYV9zaGFyZWRfc3RhdGUKK3Bnc2Ffc3Rh c2gKK3Bnc2Ffc3Rhc2hfY291bnQKK3Bnc2Ffc3Rhc2hfbmFtZQogcGdzb2NrZXQKIHBnc3FsX3Ro aW5nX3QKIHBnc3NFbnRyeQotLSAKMi41MS4wCgo= --0000000000007beb40064cacb69d Content-Type: application/octet-stream; name="v19-0003-Test-pg_plan_advice-using-a-new-test_plan_advice.patch" Content-Disposition: attachment; filename="v19-0003-Test-pg_plan_advice-using-a-new-test_plan_advice.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmkqdl322 RnJvbSBlOTdkNzFiZTM2ODEzYjhmYTM0YzI1ZDdiMjVhNTRjN2MxYWZlY2IwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IFNhdCwgNyBGZWIgMjAyNiAwOTozNjowOCAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjE5IDMv NF0gVGVzdCBwZ19wbGFuX2FkdmljZSB1c2luZyBhIG5ldyB0ZXN0X3BsYW5fYWR2aWNlCiBtb2R1 bGUuCgpUaGUgVEFQIHRlc3QgaW5jbHVkZWQgaW4gdGhpcyBuZXcgbW9kdWxlIHJ1bnMgdGhlIHJl Z3Jlc3Npb24gdGVzdHMKd2l0aCBwZ19wbGFuX2FkdmljZSBsb2FkZWQuIEl0IGFycmFuZ2VzIGZv ciBlYWNoIHF1ZXJ5IHRvIGJlIHBsYW5uZWQKdHdpY2UuICBUaGUgZmlyc3QgdGltZSwgd2UgZ2Vu ZXJhdGUgcGxhbiBhZHZpY2UuIFRoZSBzZWNvbmQgdGltZSwgd2UKcmVwbGFuIHRoZSBxdWVyeSB1 c2luZyB0aGUgcmVzdWx0aW5nIGFkdmljZSBzdHJpbmcuIElmIHRoZSB0ZXN0cwpmYWlsLCB0aGF0 IG1lYW5zIHRoYXQgdXNpbmcgcGdfcGxhbl9hZHZpY2UgdG8gdGVsbCB0aGUgcGxhbm5lciB0bwpk byB3aGF0IGl0IHdhcyBnb2luZyB0byBkbyBhbnl3YXkgYnJlYWtzIHNvbWV0aGluZywgd2hpY2gg aW5kaWNhdGVzCmEgcHJvYmxlbSBlaXRoZXIgd2l0aCBwZ19wbGFuX2FkdmljZSBvciB3aXRoIHRo ZSBwbGFubmVyLgoKVGhlIHRlc3QgYWxzbyBlbmFibGVzIHBnX3BsYW5fYWR2aWNlLmZlZWRiYWNr X3dhcm5pbmdzLCBzbyB0aGF0IGlmIHRoZQpwbGFuIGFkdmljZSBmYWlscyB0byBhcHBseSBjbGVh bmx5IHdoZW4gdGhlIHF1ZXJ5IGlzIHJlcGxhbm5lZCwgYQpmYWlsdXJlIHdpbGwgb2NjdXIuCi0t LQogc3JjL3Rlc3QvbW9kdWxlcy9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgIHwgICAxICsK IHNyYy90ZXN0L21vZHVsZXMvbWVzb24uYnVpbGQgICAgICAgICAgICAgICAgICB8ICAgMSArCiBz cmMvdGVzdC9tb2R1bGVzL3Rlc3RfcGxhbl9hZHZpY2UvTWFrZWZpbGUgICAgfCAgMjggKysrKwog c3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3BsYW5fYWR2aWNlL21lc29uLmJ1aWxkIHwgIDI5ICsrKysK IC4uLi90ZXN0X3BsYW5fYWR2aWNlL3QvMDAxX3JlcGxhbl9yZWdyZXNzLnBsICB8ICA2NSArKysr KysrKwogLi4uL3Rlc3RfcGxhbl9hZHZpY2UvdGVzdF9wbGFuX2FkdmljZS5jICAgICAgIHwgMTQz ICsrKysrKysrKysrKysrKysrKwogNiBmaWxlcyBjaGFuZ2VkLCAyNjcgaW5zZXJ0aW9ucygrKQog Y3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9wbGFuX2FkdmljZS9NYWtl ZmlsZQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9wbGFuX2Fkdmlj ZS9tZXNvbi5idWlsZAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9w bGFuX2FkdmljZS90LzAwMV9yZXBsYW5fcmVncmVzcy5wbAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNy Yy90ZXN0L21vZHVsZXMvdGVzdF9wbGFuX2FkdmljZS90ZXN0X3BsYW5fYWR2aWNlLmMKCmRpZmYg LS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL01ha2VmaWxlIGIvc3JjL3Rlc3QvbW9kdWxlcy9NYWtl ZmlsZQppbmRleCA0YWM1Yzg0ZGI0My4uYTE1NDAyNjljZjUgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0 L21vZHVsZXMvTWFrZWZpbGUKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9NYWtlZmlsZQpAQCAtMzks NiArMzksNyBAQCBTVUJESVJTID0gXAogCQkgIHRlc3Rfb2F0X2hvb2tzIFwKIAkJICB0ZXN0X3Bh cnNlciBcCiAJCSAgdGVzdF9wZ19kdW1wIFwKKwkJICB0ZXN0X3BsYW5fYWR2aWNlIFwKIAkJICB0 ZXN0X3ByZWR0ZXN0IFwKIAkJICB0ZXN0X3JhZGl4dHJlZSBcCiAJCSAgdGVzdF9yYnRyZWUgXApk aWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9tZXNvbi5idWlsZCBiL3NyYy90ZXN0L21vZHVs ZXMvbWVzb24uYnVpbGQKaW5kZXggZTJiM2VlZjQxMzYuLjdjMDUyODAzYzk4IDEwMDY0NAotLS0g YS9zcmMvdGVzdC9tb2R1bGVzL21lc29uLmJ1aWxkCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvbWVz b24uYnVpbGQKQEAgLTQwLDYgKzQwLDcgQEAgc3ViZGlyKCd0ZXN0X21pc2MnKQogc3ViZGlyKCd0 ZXN0X29hdF9ob29rcycpCiBzdWJkaXIoJ3Rlc3RfcGFyc2VyJykKIHN1YmRpcigndGVzdF9wZ19k dW1wJykKK3N1YmRpcigndGVzdF9wbGFuX2FkdmljZScpCiBzdWJkaXIoJ3Rlc3RfcHJlZHRlc3Qn KQogc3ViZGlyKCd0ZXN0X3JhZGl4dHJlZScpCiBzdWJkaXIoJ3Rlc3RfcmJ0cmVlJykKZGlmZiAt LWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9wbGFuX2FkdmljZS9NYWtlZmlsZSBiL3NyYy90 ZXN0L21vZHVsZXMvdGVzdF9wbGFuX2FkdmljZS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMC4uYmUwMjZjZTM0YmYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMv dGVzdC9tb2R1bGVzL3Rlc3RfcGxhbl9hZHZpY2UvTWFrZWZpbGUKQEAgLTAsMCArMSwyOCBAQAor IyBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfcGxhbl9hZHZpY2UvTWFrZWZpbGUKKworUEdGSUxFREVT QyA9ICJ0ZXN0X3BsYW5fYWR2aWNlIC0gdGVzdCB3aGV0aGVyIGdlbmVyYXRlZCBwbGFuIGFkdmlj ZSB3b3JrcyIKKworTU9EVUxFX2JpZyA9IHRlc3RfcGxhbl9hZHZpY2UKK09CSlMgPSBcCisJJChX SU4zMlJFUykgXAorCXRlc3RfcGxhbl9hZHZpY2UubworCitFWFRSQV9JTlNUQUxMID0gY29udHJp Yi9wZ19wbGFuX2FkdmljZQorCitUQVBfVEVTVFMgPSAxCisKK2lmZGVmIFVTRV9QR1hTCitQR19D T05GSUcgPSBwZ19jb25maWcKK1BHWFMgOj0gJChzaGVsbCAkKFBHX0NPTkZJRykgLS1wZ3hzKQor aW5jbHVkZSAkKFBHWFMpCitlbHNlCitzdWJkaXIgPSBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfcGxh bl9hZHZpY2UKK3RvcF9idWlsZGRpciA9IC4uLy4uLy4uLy4uCitpbmNsdWRlICQodG9wX2J1aWxk ZGlyKS9zcmMvTWFrZWZpbGUuZ2xvYmFsCitpbmNsdWRlICQodG9wX3NyY2RpcikvY29udHJpYi9j b250cmliLWdsb2JhbC5taworZW5kaWYKKworb3ZlcnJpZGUgQ1BQRkxBR1MgKz0gLUkkKHRvcF9z cmNkaXIpL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UKKworUkVHUkVTU19TSExJQj0kKGFic190b3Bf YnVpbGRkaXIpL3NyYy90ZXN0L3JlZ3Jlc3MvcmVncmVzcyQoRExTVUZGSVgpCitleHBvcnQgUkVH UkVTU19TSExJQgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3BsYW5fYWR2aWNl L21lc29uLmJ1aWxkIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3BsYW5fYWR2aWNlL21lc29uLmJ1 aWxkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5hZmRlNDIwYmFlZAot LS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9wbGFuX2FkdmljZS9tZXNv bi5idWlsZApAQCAtMCwwICsxLDI5IEBACisjIENvcHlyaWdodCAoYykgMjAyMi0yMDI2LCBQb3N0 Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorCit0ZXN0X3BsYW5fYWR2aWNlX3NvdXJj ZXMgPSBmaWxlcygKKyAgJ3Rlc3RfcGxhbl9hZHZpY2UuYycsCispCisKK2lmIGhvc3Rfc3lzdGVt ID09ICd3aW5kb3dzJworICB0ZXN0X3BsYW5fYWR2aWNlX3NvdXJjZXMgKz0gcmNfbGliX2dlbi5w cm9jZXNzKHdpbjMydmVyX3JjLCBleHRyYV9hcmdzOiBbCisgICAgJy0tTkFNRScsICd0ZXN0X3Bs YW5fYWR2aWNlJywKKyAgICAnLS1GSUxFREVTQycsICd0ZXN0X3BsYW5fYWR2aWNlIC0gdGVzdCB3 aGV0aGVyIGdlbmVyYXRlZCBwbGFuIGFkdmljZSB3b3JrcycsXSkKK2VuZGlmCisKK3Rlc3RfcGxh bl9hZHZpY2UgPSBzaGFyZWRfbW9kdWxlKCd0ZXN0X3BsYW5fYWR2aWNlJywKKyAgdGVzdF9wbGFu X2FkdmljZV9zb3VyY2VzLAorICBpbmNsdWRlX2RpcmVjdG9yaWVzOiBwZ19wbGFuX2FkdmljZV9p bmMsCisgIGt3YXJnczogcGdfdGVzdF9tb2RfYXJncywKKykKK3Rlc3RfaW5zdGFsbF9saWJzICs9 IHRlc3RfcGxhbl9hZHZpY2UKKwordGVzdHMgKz0geworICAnbmFtZSc6ICd0ZXN0X3BsYW5fYWR2 aWNlJywKKyAgJ3NkJzogbWVzb24uY3VycmVudF9zb3VyY2VfZGlyKCksCisgICdiZCc6IG1lc29u LmN1cnJlbnRfYnVpbGRfZGlyKCksCisgICd0YXAnOiB7CisgICAgJ3Rlc3RzJzogWworICAgICAg J3QvMDAxX3JlcGxhbl9yZWdyZXNzLnBsJywKKyAgICBdLAorICB9LAorfQpkaWZmIC0tZ2l0IGEv c3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3BsYW5fYWR2aWNlL3QvMDAxX3JlcGxhbl9yZWdyZXNzLnBs IGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3BsYW5fYWR2aWNlL3QvMDAxX3JlcGxhbl9yZWdyZXNz LnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4zOGZmYTRkMTFhZQot LS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9wbGFuX2FkdmljZS90LzAw MV9yZXBsYW5fcmVncmVzcy5wbApAQCAtMCwwICsxLDY1IEBACisjIENvcHlyaWdodCAoYykgMjAy MS0yMDI2LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorCisjIFJ1biB0aGUg Y29yZSByZWdyZXNzaW9uIHRlc3RzIHVuZGVyIHBnX3BsYW5fYWR2aWNlIHRvIGNoZWNrIGZvciBw cm9ibGVtcy4KK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3MgRkFUQUwgPT4gJ2FsbCc7CisKK3Vz ZSBDd2QgICAgICAgICAgICBxdyhhYnNfcGF0aCk7Cit1c2UgRmlsZTo6QmFzZW5hbWUgcXcoZGly bmFtZSk7CisKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwordXNlIFBvc3RncmVTUUw6 OlRlc3Q6OlV0aWxzOwordXNlIFRlc3Q6Ok1vcmU7CisKKyMgSW5pdGlhbGl6ZSB0aGUgcHJpbWFy eSBub2RlCitteSAkbm9kZSA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygnbWFpbicp OworJG5vZGUtPmluaXQoKTsKKworIyBTZXQgdXAgb3VyIGRlc2lyZWQgY29uZmlndXJhdGlvbi4K KyRub2RlLT5hcHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25mJywgPDxFT00pOworc2hhcmVkX3By ZWxvYWRfbGlicmFyaWVzPSd0ZXN0X3BsYW5fYWR2aWNlJworcGdfcGxhbl9hZHZpY2UuYWx3YXlz X2V4cGxhaW5fc3VwcGxpZWRfYWR2aWNlPWZhbHNlCitwZ19wbGFuX2FkdmljZS5mZWVkYmFja193 YXJuaW5ncz10cnVlCitFT00KKyRub2RlLT5zdGFydDsKKworbXkgJHNyY2RpciA9IGFic19wYXRo KCIuLi8uLi8uLi8uLiIpOworCisjIC0tZGxwYXRoIGlzIG5lZWRlZCB0byBiZSBhYmxlIHRvIGZp bmQgdGhlIGxvY2F0aW9uIG9mIHJlZ3Jlc3Muc28KKyMgYW5kIGFueSBsaWJyYXJpZXMgdGhlIHJl Z3Jlc3Npb24gdGVzdHMgcmVxdWlyZS4KK215ICRkbHBhdGggPSBkaXJuYW1lKCRFTlZ7UkVHUkVT U19TSExJQn0pOworCisjIC0tb3V0cHV0ZGlyIHBvaW50cyB0byB0aGUgcGF0aCB3aGVyZSB0byBw bGFjZSB0aGUgb3V0cHV0IGZpbGVzLgorbXkgJG91dHB1dGRpciA9ICRQb3N0Z3JlU1FMOjpUZXN0 OjpVdGlsczo6dG1wX2NoZWNrOworCisjIC0taW5wdXRkaXIgcG9pbnRzIHRvIHRoZSBwYXRoIG9m IHRoZSBpbnB1dCBmaWxlcy4KK215ICRpbnB1dGRpciA9ICIkc3JjZGlyL3NyYy90ZXN0L3JlZ3Jl c3MiOworCisjIFJ1biB0aGUgdGVzdHMuCitteSAkcmMgPQorICBzeXN0ZW0oJEVOVntQR19SRUdS RVNTfSAuICIgIgorCSAgLiAiLS1iaW5kaXI9ICIKKwkgIC4gIi0tZGxwYXRoPVwiJGRscGF0aFwi ICIKKwkgIC4gIi0taG9zdD0iIC4gJG5vZGUtPmhvc3QgLiAiICIKKwkgIC4gIi0tcG9ydD0iIC4g JG5vZGUtPnBvcnQgLiAiICIKKwkgIC4gIi0tc2NoZWR1bGU9JHNyY2Rpci9zcmMvdGVzdC9yZWdy ZXNzL3BhcmFsbGVsX3NjaGVkdWxlICIKKwkgIC4gIi0tbWF4LWNvbmN1cnJlbnQtdGVzdHM9MjAg IgorCSAgLiAiLS1pbnB1dGRpcj1cIiRpbnB1dGRpclwiICIKKwkgIC4gIi0tb3V0cHV0ZGlyPVwi JG91dHB1dGRpclwiIik7CisKKyMgRHVtcCBvdXQgdGhlIHJlZ3Jlc3Npb24gZGlmZnMgZmlsZSwg aWYgdGhlcmUgaXMgb25lCitpZiAoJHJjICE9IDApCit7CisJbXkgJGRpZmZzID0gIiRvdXRwdXRk aXIvcmVncmVzc2lvbi5kaWZmcyI7CisJaWYgKC1lICRkaWZmcykKKwl7CisJCXByaW50ICI9PT0g ZHVtcGluZyAkZGlmZnMgPT09XG4iOworCQlwcmludCBzbHVycF9maWxlKCRkaWZmcyk7CisJCXBy aW50ICI9PT0gRU9GID09PVxuIjsKKwl9Cit9CisKKyMgUmVwb3J0IHJlc3VsdHMKK2lzKCRyYywg MCwgJ3JlZ3Jlc3Npb24gdGVzdHMgcGFzcycpOworCitkb25lX3Rlc3RpbmcoKTsKZGlmZiAtLWdp dCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9wbGFuX2FkdmljZS90ZXN0X3BsYW5fYWR2aWNlLmMg Yi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfcGxhbl9hZHZpY2UvdGVzdF9wbGFuX2FkdmljZS5jCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5jZmY1MDM5YjVjOAotLS0gL2Rl di9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9wbGFuX2FkdmljZS90ZXN0X3BsYW5f YWR2aWNlLmMKQEAgLTAsMCArMSwxNDMgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHRl c3RfcGxhbl9hZHZpY2UuYworICoJICBUZXN0IHBnX3BsYW5fYWR2aWNlIGJ5IHBsYW5uaW5nIGV2 ZXJ5IHF1ZXJ5IHdpdGggZ2VuZXJhdGVkIGFkdmljZS4KKyAqCisgKiBXaXRoIHRoaXMgbW9kdWxl IGxvYWRlZCwgZXZlcnkgdGltZSBhIHF1ZXJ5IGlzIGV4ZWN1dGVkLCB3ZSBlbmQgdXAKKyAqIHBs YW5uaW5nIGl0IHR3aWNlLiBUaGUgZmlyc3QgdGltZSB3ZSBwbGFuIGl0LCB3ZSBnZW5lcmF0ZSBw bGFuIGFkdmljZSwKKyAqIHdoaWNoIHdlIHRoZW4gZmVlZCBiYWNrIHRvIHBnX3BsYW5fYWR2aWNl IGFzIHRoZSBzdXBwbGllZCBwbGFuIGFkdmljZS4KKyAqIEl0IGlzIHRoZW4gcGxhbm5lZCBhIHNl Y29uZCB0aW1lIHVzaW5nIHRoYXQgYWR2aWNlLiBUaGlzIGhvcGVmdWxseQorICogYWxsb3dzIHVz IHRvIGRldGVjdCBjYXNlcyB3aGVyZSB0aGUgYWR2aWNlIGlzIGluY29ycmVjdCBvciBjYXVzZXMK KyAqIGZhaWx1cmVzIG9yIHBsYW4gY2hhbmdlcyBmb3Igc29tZSByZWFzb24uCisgKgorICogQ29w eXJpZ2h0IChjKSAyMDE2LTIwMjYsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3Vw CisgKgorICoJICBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfcGxhbl9hZHZpY2UvdGVzdF9wbGFuX2Fk dmljZS5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpbmNsdWRlICJwb3N0Z3Jlcy5o IgorCisjaW5jbHVkZSAiYWNjZXNzL3hhY3QuaCIKKyNpbmNsdWRlICJmbWdyLmgiCisjaW5jbHVk ZSAib3B0aW1pemVyL29wdGltaXplci5oIgorI2luY2x1ZGUgInBnX3BsYW5fYWR2aWNlLmgiCisj aW5jbHVkZSAidXRpbHMvZ3VjLmgiCisKK1BHX01PRFVMRV9NQUdJQzsKKworc3RhdGljIGJvb2wg aW5fcmVjdXJzaW9uID0gZmFsc2U7CisKK3N0YXRpYyBjaGFyICp0ZXN0X3BsYW5fYWR2aWNlX2Fk dmlzb3IoUGxhbm5lckdsb2JhbCAqZ2xvYiwKKwkJCQkJCQkJCSAgUXVlcnkgKnBhcnNlLAorCQkJ CQkJCQkJICBjb25zdCBjaGFyICpxdWVyeV9zdHJpbmcsCisJCQkJCQkJCQkgIGludCBjdXJzb3JP cHRpb25zLAorCQkJCQkJCQkJICBFeHBsYWluU3RhdGUgKmVzKTsKK3N0YXRpYyBEZWZFbGVtICpm aW5kX2RlZmVsZW1fYnlfZGVmbmFtZShMaXN0ICpkZWZsaXN0LCBjaGFyICpkZWZuYW1lKTsKKwor LyoKKyAqIEluaXRpYWxpemUgdGhpcyBtb2R1bGUuCisgKi8KK3ZvaWQKK19QR19pbml0KHZvaWQp Cit7CisJdm9pZAkJKCphZGRfYWR2aXNvcl9mbikgKHBnX3BsYW5fYWR2aWNlX2Fkdmlzb3JfaG9v ayBob29rKTsKKworCS8qCisJICogQXNrIHBnX3BsYW5fYWR2aWNlIHRvIGdldCBhZHZpY2Ugc3Ry aW5ncyBmcm9tIHRlc3RfcGxhbl9hZHZpY2VfYWR2aXNvcgorCSAqLworCWFkZF9hZHZpc29yX2Zu ID0KKwkJbG9hZF9leHRlcm5hbF9mdW5jdGlvbigicGdfcGxhbl9hZHZpY2UiLCAicGdfcGxhbl9h ZHZpY2VfYWRkX2Fkdmlzb3IiLAorCQkJCQkJCSAgIHRydWUsIE5VTEwpOworCisJKCphZGRfYWR2 aXNvcl9mbikgKHRlc3RfcGxhbl9hZHZpY2VfYWR2aXNvcik7Cit9CisKKy8qCisgKiBSZS1wbGFu IHRoZSBnaXZlbiBxdWVyeSBhbmQgcmV0dXJuIHRoZSBnZW5lcmF0ZWQgYWR2aWNlIHN0cmluZyBh cyB0aGUKKyAqIHN1cHBsaWVkIGFkdmljZS4KKyAqLworc3RhdGljIGNoYXIgKgordGVzdF9wbGFu X2FkdmljZV9hZHZpc29yKFBsYW5uZXJHbG9iYWwgKmdsb2IsIFF1ZXJ5ICpwYXJzZSwKKwkJCQkJ CSBjb25zdCBjaGFyICpxdWVyeV9zdHJpbmcsIGludCBjdXJzb3JPcHRpb25zLAorCQkJCQkJIEV4 cGxhaW5TdGF0ZSAqZXMpCit7CisJUGxhbm5lZFN0bXQgKnBzdG10OworCWludAkJCXNhdmVfbmVz dGxldmVsID0gMDsKKwlEZWZFbGVtICAgICpwZ3BhX2l0ZW07CisJRGVmRWxlbSAgICAqYWR2aWNl X3N0cmluZ19pdGVtOworCisJLyoKKwkgKiBTaW5jZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBm cm9tIHRoZSBwbGFubmVyIGFuZCB0cmlnZ2VycyBwbGFubmluZywKKwkgKiB3ZSBuZWVkIGEgcmVj dXJzaW9uIGd1YXJkLgorCSAqLworCWlmIChpbl9yZWN1cnNpb24pCisJCXJldHVybiBOVUxMOwor CisJUEdfVFJZKCk7CisJeworCQlpbl9yZWN1cnNpb24gPSB0cnVlOworCisJCS8qCisJCSAqIFBs YW5uaW5nIGNhbiB0cmlnZ2VyIGV4cHJlc3Npb24gZXZhbHVhdGlvbiwgd2hpY2ggY2FuIHJlc3Vs dCBpbgorCQkgKiBzZW5kaW5nIE5PVElDRSBtZXNzYWdlcyBvciBvdGhlciBvdXRwdXQgdG8gdGhl IGNsaWVudC4gVG8gYXZvaWQKKwkJICogdGhhdCwgd2Ugc2V0IGNsaWVudF9taW5fbWVzc2FnZXMg PSBFUlJPUiBpbiB0aGUgaG9wZXMgb2YgZ2V0dGluZworCQkgKiB0aGUgc2FtZSBvdXRwdXQgd2l0 aCBhbmQgd2l0aG91dCB0aGlzIG1vZHVsZS4KKwkJICoKKwkJICogV2UgYWxzbyBuZWVkIHRvIHNl dCBwZ19wbGFuX2FkdmljZS5hbHdheXNfc3RvcmVfYWR2aWNlX2RldGFpbHMgc28KKwkJICogdGhh dCBwZ19wbGFuX2FkdmljZSB3aWxsIGdlbmVyYXRlIGFuIGFkdmljZSBzdHJpbmcsIHNpbmNlIHRo ZSB3aG9sZQorCQkgKiBwb2ludCBvZiB0aGlzIGZ1bmN0aW9uIGlzIHRvIGdldCBhY2Nlc3MgdG8g dGhhdC4KKwkJICovCisJCXNhdmVfbmVzdGxldmVsID0gTmV3R1VDTmVzdExldmVsKCk7CisJCXNl dF9jb25maWdfb3B0aW9uKCJjbGllbnRfbWluX21lc3NhZ2VzIiwgImVycm9yIiwKKwkJCQkJCSAg UEdDX1NVU0VULCBQR0NfU19TRVNTSU9OLAorCQkJCQkJICBHVUNfQUNUSU9OX1NBVkUsIHRydWUs IDAsIGZhbHNlKTsKKwkJc2V0X2NvbmZpZ19vcHRpb24oInBnX3BsYW5fYWR2aWNlLmFsd2F5c19z dG9yZV9hZHZpY2VfZGV0YWlscyIsICJ0cnVlIiwKKwkJCQkJCSAgUEdDX1NVU0VULCBQR0NfU19T RVNTSU9OLAorCQkJCQkJICBHVUNfQUNUSU9OX1NBVkUsIHRydWUsIDAsIGZhbHNlKTsKKworCQkv KgorCQkgKiBSZXBsYW4uIFdlIG11c3QgY29weSB0aGUgUXVlcnksIGJlY2F1c2UgdGhlIHBsYW5u ZXIgbW9kaWZpZXMgaXQuCisJCSAqIChBcyBub3RlZCBlbHNld2hlcmUsIHRoYXQncyB1bmZvcnR1 bmF0ZTsgcGVyaGFwcyBpdCB3aWxsIGJlIGZpeGVkCisJCSAqIHNvbWUgZGF5LikKKwkJICovCisJ CXBzdG10ID0gcGxhbm5lcihjb3B5T2JqZWN0KHBhcnNlKSwgcXVlcnlfc3RyaW5nLCBjdXJzb3JP cHRpb25zLAorCQkJCQkJZ2xvYi0+Ym91bmRQYXJhbXMsIGVzKTsKKwl9CisJUEdfRklOQUxMWSgp OworCXsKKwkJaW5fcmVjdXJzaW9uID0gZmFsc2U7CisJfQorCVBHX0VORF9UUlkoKTsKKworCS8q IFJvbGwgYmFjayBhbnkgR1VDIGNoYW5nZXMgKi8KKwlpZiAoc2F2ZV9uZXN0bGV2ZWwgPiAwKQor CQlBdEVPWGFjdF9HVUMoZmFsc2UsIHNhdmVfbmVzdGxldmVsKTsKKworCS8qIEV4dHJhY3QgYW5k IHJldHVybiB0aGUgYWR2aWNlIHN0cmluZyAqLworCXBncGFfaXRlbSA9IGZpbmRfZGVmZWxlbV9i eV9kZWZuYW1lKHBzdG10LT5leHRlbnNpb25fc3RhdGUsCisJCQkJCQkJCQkJInBnX3BsYW5fYWR2 aWNlIik7CisJaWYgKHBncGFfaXRlbSA9PSBOVUxMKQorCQllbG9nKEVSUk9SLCAiZXh0ZW5zaW9u IHN0YXRlIGZvciBwZ19wbGFuX2FkdmljZSBub3QgZm91bmQiKTsKKwlhZHZpY2Vfc3RyaW5nX2l0 ZW0gPSBmaW5kX2RlZmVsZW1fYnlfZGVmbmFtZSgoTGlzdCAqKSBwZ3BhX2l0ZW0tPmFyZywKKwkJ CQkJCQkJCQkJCSAiYWR2aWNlX3N0cmluZyIpOworCWlmIChhZHZpY2Vfc3RyaW5nX2l0ZW0gPT0g TlVMTCkKKwkJZWxvZyhFUlJPUiwKKwkJCSAiYWR2aWNlIHN0cmluZyBmb3IgcGdfcGxhbl9hZHZp Y2Ugbm90IGZvdW5kIGluIGV4dGVuc2lvbiBzdGF0ZSIpOworCXJldHVybiBzdHJWYWwoYWR2aWNl X3N0cmluZ19pdGVtLT5hcmcpOworfQorCisvKgorICogU2VhcmNoIGEgbGlzdCBvZiBEZWZFbGVt IG9iamVjdHMgZm9yIGEgZ2l2ZW4gZGVmbmFtZS4KKyAqLworc3RhdGljIERlZkVsZW0gKgorZmlu ZF9kZWZlbGVtX2J5X2RlZm5hbWUoTGlzdCAqZGVmbGlzdCwgY2hhciAqZGVmbmFtZSkKK3sKKwlm b3JlYWNoX25vZGUoRGVmRWxlbSwgaXRlbSwgZGVmbGlzdCkKKwl7CisJCWlmIChzdHJjbXAoaXRl bS0+ZGVmbmFtZSwgZGVmbmFtZSkgPT0gMCkKKwkJCXJldHVybiBpdGVtOworCX0KKworCXJldHVy biBOVUxMOworfQotLSAKMi41MS4wCgo= --0000000000007beb40064cacb69d Content-Type: application/octet-stream; name="v19-0002-Add-pg_collect_advice-contrib-module.patch" Content-Disposition: attachment; filename="v19-0002-Add-pg_collect_advice-contrib-module.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmkqdl2z1 RnJvbSA3ZjA4OWVjMWQ1Njk2MGU2ODY0Njk2MDM3NTQ3NWU3OGRiNjI0ODU2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IFRodSwgMjYgRmViIDIwMjYgMTY6NTE6MTYgLTA1MDAKU3ViamVjdDogW1BBVENIIHYxOSAy LzRdIEFkZCBwZ19jb2xsZWN0X2FkdmljZSBjb250cmliIG1vZHVsZS4KClRoaXMgbW9kdWxlIGFs bG93cyBhdXRvbWF0ZWQsIGxhcmdlLXNjYWxlIGNvbGxlY3Rpb24gb2YgcXVlcmllcyBhbmQKdGhl IGFzc29jaWF0ZWQgcGxhbiBhZHZpY2Ugc3RyaW5ncyB1c2luZyBlaXRoZXIgYmFja2VuZC1sb2Nh bCBtZW1vcnkKb3IgZHluYW1pYyBzaGFyZWQgbWVtb3J5LiBJbiBlaXRoZXIgY2FzZSwgbWVtb3J5 IHVzYWdlIGNhbiBiZSBsaW1pdGVkCmJ5IHJlc3RyaWN0aW9uIHRoZSBtYXhpbXVtIG51bWJlciBv ZiBxdWVyaWVzIGFuZCBhZHZpY2Ugc3RyaW5ncwpzdG9yZWQuIENhcmUgc2hvdWxkIGJlIHRha2Vu IHdpdGggdGhlc2UgdmFsdWVzLCBhbmQgd2l0aCB0aGUgdXNlIG9mCnRoaXMgbW9kdWxlIGluIGdl bmVyYWwsIGJlY2F1c2UgaXQncyBlYXN5IHRvIGNoZXcgdXAgYW4gdW5yZWFzb25hYmx5Cmxhcmdl IGFtb3VudCBvZiBtZW1vcnkuIFVubGlrZSBwZ19zdGF0X3N0YXRlbWVudHMsIHRoaXMgbW9kdWxl IGRvZXMKbm90IHByb3ZpZGUgZm9yIHF1ZXJ5IG5vcm1hbGl6YXRpb24gb3IgZXZlbiBkZWR1cGxp Y2F0aW9uOyBpdCBzaW1wbHkKbWFrZXMgYSByZWNvcmQgZm9yIGV2ZXJ5IHF1ZXJ5IHBsYW5uZWQu CgpJdCBjYW4gYmUgdXNlZnVsIHRvIGVuYWJsZSBxdWVyeSBJRCBjb21wdXRhdG9uIGJlZm9yZSB1 c2luZyB0aGUKbW9kdWxlLCBidXQgaXQncyBub3QgcmVxdWlyZWQuIElmIG5vdCBkb25lLCBhbGwg cXVlcmllcyB3aWxsIHNpbXBseQpzaG93IGEgcXVlcnkgSUQgb2YgemVyby4KClJldmlld2VkLWJ5 OiBBbGV4YW5kcmEgV2FuZyA8YWxleGFuZHJhLndhbmcub3NzQGdtYWlsLmNvbT4gKGVhcmxpZXIg dmVyc2lvbikKLS0tCiBjb250cmliL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgfCAgIDEgKwogY29udHJpYi9tZXNvbi5idWlsZCAgICAgICAgICAgICAgICAgICAgICAgICAg IHwgICAxICsKIGNvbnRyaWIvcGdfY29sbGVjdF9hZHZpY2UvTWFrZWZpbGUgICAgICAgICAgICB8 ICAyOSArCiBjb250cmliL3BnX2NvbGxlY3RfYWR2aWNlL2NvbGxlY3Rvci5jICAgICAgICAgfCA2 NDEgKysrKysrKysrKysrKysrKysrCiAuLi4vZXhwZWN0ZWQvbG9jYWxfY29sbGVjdG9yLm91dCAg ICAgICAgICAgICAgfCAgNjkgKysKIGNvbnRyaWIvcGdfY29sbGVjdF9hZHZpY2UvaW50ZXJmYWNl LmMgICAgICAgICB8IDMwMyArKysrKysrKysKIGNvbnRyaWIvcGdfY29sbGVjdF9hZHZpY2UvbWVz b24uYnVpbGQgICAgICAgICB8ICA0MSArKwogLi4uL3BnX2NvbGxlY3RfYWR2aWNlLS0xLjAuc3Fs ICAgICAgICAgICAgICAgIHwgIDQzICsrCiAuLi4vcGdfY29sbGVjdF9hZHZpY2UuY29udHJvbCAg ICAgICAgICAgICAgICAgfCAgIDUgKwogY29udHJpYi9wZ19jb2xsZWN0X2FkdmljZS9wZ19jb2xs ZWN0X2FkdmljZS5oIHwgIDM5ICsrCiAuLi4vcGdfY29sbGVjdF9hZHZpY2Uvc3FsL2xvY2FsX2Nv bGxlY3Rvci5zcWwgfCAgNDYgKysKIGNvbnRyaWIvcGdfY29sbGVjdF9hZHZpY2UvdC8wMDFfcmVn cmVzcy5wbCAgICB8IDE1MSArKysrKwogZG9jL3NyYy9zZ21sL2NvbnRyaWIuc2dtbCAgICAgICAg ICAgICAgICAgICAgIHwgICAxICsKIGRvYy9zcmMvc2dtbC9maWxlbGlzdC5zZ21sICAgICAgICAg ICAgICAgICAgICB8ICAgMSArCiBkb2Mvc3JjL3NnbWwvcGdjb2xsZWN0YWR2aWNlLnNnbWwgICAg ICAgICAgICAgfCAyNDQgKysrKysrKwogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3Qg ICAgICAgICAgICAgIHwgICA2ICsKIDE2IGZpbGVzIGNoYW5nZWQsIDE2MjEgaW5zZXJ0aW9ucygr KQogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfY29sbGVjdF9hZHZpY2UvTWFrZWZpbGUK IGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX2NvbGxlY3RfYWR2aWNlL2NvbGxlY3Rvci5j CiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19jb2xsZWN0X2FkdmljZS9leHBlY3RlZC9s b2NhbF9jb2xsZWN0b3Iub3V0CiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19jb2xsZWN0 X2FkdmljZS9pbnRlcmZhY2UuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfY29sbGVj dF9hZHZpY2UvbWVzb24uYnVpbGQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX2NvbGxl Y3RfYWR2aWNlL3BnX2NvbGxlY3RfYWR2aWNlLS0xLjAuc3FsCiBjcmVhdGUgbW9kZSAxMDA2NDQg Y29udHJpYi9wZ19jb2xsZWN0X2FkdmljZS9wZ19jb2xsZWN0X2FkdmljZS5jb250cm9sCiBjcmVh dGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19jb2xsZWN0X2FkdmljZS9wZ19jb2xsZWN0X2Fkdmlj ZS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19jb2xsZWN0X2FkdmljZS9zcWwvbG9j YWxfY29sbGVjdG9yLnNxbAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfY29sbGVjdF9h ZHZpY2UvdC8wMDFfcmVncmVzcy5wbAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRvYy9zcmMvc2dtbC9w Z2NvbGxlY3RhZHZpY2Uuc2dtbAoKZGlmZiAtLWdpdCBhL2NvbnRyaWIvTWFrZWZpbGUgYi9jb250 cmliL01ha2VmaWxlCmluZGV4IGRkMDRjMjBhY2QyLi4yMjA3MTAzNGU1MSAxMDA2NDQKLS0tIGEv Y29udHJpYi9NYWtlZmlsZQorKysgYi9jb250cmliL01ha2VmaWxlCkBAIC0zMSw2ICszMSw3IEBA IFNVQkRJUlMgPSBcCiAJCXBhZ2VpbnNwZWN0CVwKIAkJcGFzc3dvcmRjaGVjawlcCiAJCXBnX2J1 ZmZlcmNhY2hlCVwKKwkJcGdfY29sbGVjdF9hZHZpY2UgXAogCQlwZ19mcmVlc3BhY2VtYXAgXAog CQlwZ19sb2dpY2FsaW5zcGVjdCBcCiAJCXBnX292ZXJleHBsYWluIFwKZGlmZiAtLWdpdCBhL2Nv bnRyaWIvbWVzb24uYnVpbGQgYi9jb250cmliL21lc29uLmJ1aWxkCmluZGV4IDVhNzUyZWFjMzQ3 Li5mZjQyMmQ5YjdmYyAxMDA2NDQKLS0tIGEvY29udHJpYi9tZXNvbi5idWlsZAorKysgYi9jb250 cmliL21lc29uLmJ1aWxkCkBAIC00NSw2ICs0NSw3IEBAIHN1YmRpcigncGFnZWluc3BlY3QnKQog c3ViZGlyKCdwYXNzd29yZGNoZWNrJykKIHN1YmRpcigncGdfYnVmZmVyY2FjaGUnKQogc3ViZGly KCdwZ2NyeXB0bycpCitzdWJkaXIoJ3BnX2NvbGxlY3RfYWR2aWNlJykKIHN1YmRpcigncGdfZnJl ZXNwYWNlbWFwJykKIHN1YmRpcigncGdfbG9naWNhbGluc3BlY3QnKQogc3ViZGlyKCdwZ19vdmVy ZXhwbGFpbicpCmRpZmYgLS1naXQgYS9jb250cmliL3BnX2NvbGxlY3RfYWR2aWNlL01ha2VmaWxl IGIvY29udHJpYi9wZ19jb2xsZWN0X2FkdmljZS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMC4uMzNmNzE1NjA2ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9jb250 cmliL3BnX2NvbGxlY3RfYWR2aWNlL01ha2VmaWxlCkBAIC0wLDAgKzEsMjkgQEAKKyMgY29udHJp Yi9wZ19jb2xsZWN0X2FkdmljZS9NYWtlZmlsZQorCitNT0RVTEVfYmlnID0gcGdfY29sbGVjdF9h ZHZpY2UKK09CSlMgPSBcCisJJChXSU4zMlJFUykgXAorCWNvbGxlY3Rvci5vIFwKKwlpbnRlcmZh Y2UubworCitFWFRFTlNJT04gPSBwZ19jb2xsZWN0X2FkdmljZQorREFUQSA9IHBnX2NvbGxlY3Rf YWR2aWNlLS0xLjAuc3FsCitQR0ZJTEVERVNDID0gInBnX2NvbGxlY3RfYWR2aWNlIC0gY29sbGVj dCBxdWVyaWVzIGFuZCB0aGVpciBwbGFuIGFkdmljZSBzdHJpbmdzIgorCitSRUdSRVNTID0gbG9j YWxfY29sbGVjdG9yCitUQVBfVEVTVFMgPSAxCisKKyMgcmVxdWlyZWQgZm9yIDAwMV9yZWdyZXNz LnBsCitSRUdSRVNTX1NITElCPSQoYWJzX3RvcF9idWlsZGRpcikvc3JjL3Rlc3QvcmVncmVzcy9y ZWdyZXNzJChETFNVRkZJWCkKK2V4cG9ydCBSRUdSRVNTX1NITElCCisKK2lmZGVmIFVTRV9QR1hT CitQR19DT05GSUcgPSBwZ19jb25maWcKK1BHWFMgOj0gJChzaGVsbCAkKFBHX0NPTkZJRykgLS1w Z3hzKQoraW5jbHVkZSAkKFBHWFMpCitlbHNlCitzdWJkaXIgPSBjb250cmliL3BnX2NvbGxlY3Rf YWR2aWNlCit0b3BfYnVpbGRkaXIgPSAuLi8uLgoraW5jbHVkZSAkKHRvcF9idWlsZGRpcikvc3Jj L01ha2VmaWxlLmdsb2JhbAoraW5jbHVkZSAkKHRvcF9zcmNkaXIpL2NvbnRyaWIvY29udHJpYi1n bG9iYWwubWsKK2VuZGlmCmRpZmYgLS1naXQgYS9jb250cmliL3BnX2NvbGxlY3RfYWR2aWNlL2Nv bGxlY3Rvci5jIGIvY29udHJpYi9wZ19jb2xsZWN0X2FkdmljZS9jb2xsZWN0b3IuYwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMDUzYTIyMjQ1YjIKLS0tIC9kZXYvbnVs bAorKysgYi9jb250cmliL3BnX2NvbGxlY3RfYWR2aWNlL2NvbGxlY3Rvci5jCkBAIC0wLDAgKzEs NjQxIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBjb2xsZWN0b3IuYworICoJICB3b3Jr aG9yc2UgZm9yIHNhdmluZyBwbGFuIGFkdmljZSBpbiBiYWNrZW5kLWxvY2FsIG9yIHNoYXJlZCBt ZW1vcnkKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyNiwgUG9zdGdyZVNRTCBHbG9iYWwg RGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKgkgIGNvbnRyaWIvcGdfY29sbGVjdF9hZHZpY2UvY29s bGVjdG9yLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisjaW5jbHVkZSAicG9zdGdy ZXMuaCIKKworI2luY2x1ZGUgInBnX2NvbGxlY3RfYWR2aWNlLmgiCisKKyNpbmNsdWRlICJkYXRh dHlwZS90aW1lc3RhbXAuaCIKKyNpbmNsdWRlICJmdW5jYXBpLmgiCisjaW5jbHVkZSAibWlzY2Fk bWluLmgiCisjaW5jbHVkZSAibm9kZXMvcGdfbGlzdC5oIgorI2luY2x1ZGUgInV0aWxzL2FjbC5o IgorI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCisjaW5jbHVkZSAidXRpbHMvdGltZXN0YW1w LmgiCisKK1BHX0ZVTkNUSU9OX0lORk9fVjEocGdfY2xlYXJfY29sbGVjdGVkX2xvY2FsX2Fkdmlj ZSk7CitQR19GVU5DVElPTl9JTkZPX1YxKHBnX2NsZWFyX2NvbGxlY3RlZF9zaGFyZWRfYWR2aWNl KTsKK1BHX0ZVTkNUSU9OX0lORk9fVjEocGdfZ2V0X2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UpOwor UEdfRlVOQ1RJT05fSU5GT19WMShwZ19nZXRfY29sbGVjdGVkX3NoYXJlZF9hZHZpY2UpOworCisj ZGVmaW5lIEFEVklDRV9DSFVOS19TSVpFCQkxMDI0CisjZGVmaW5lIEFEVklDRV9DSFVOS19BUlJB WV9TSVpFCTY0CisKKyNkZWZpbmUJUEdfR0VUX0FEVklDRV9DT0xVTU5TCTcKKworLyoKKyAqIEFk dmljZSBleHRyYWN0ZWQgZnJvbSBvbmUgcXVlcnkgcGxhbiwgdG9nZXRoZXIgd2l0aCB0aGUgcXVl cnkgc3RyaW5nCisgKiBhbmQgdmFyaW91cyBvdGhlciBpZGVudGlmeWluZyBkZXRhaWxzLgorICov Cit0eXBlZGVmIHN0cnVjdCBwZ2NhX2NvbGxlY3RlZF9hZHZpY2UKK3sKKwlPaWQJCQl1c2VyaWQ7 CQkJLyogdXNlciBPSUQgKi8KKwlPaWQJCQlkYmlkOwkJCS8qIGRhdGFiYXNlIE9JRCAqLworCXVp bnQ2NAkJcXVlcnlpZDsJCS8qIHF1ZXJ5IGlkZW50aWZpZXIgKi8KKwlUaW1lc3RhbXBUeiB0aW1l c3RhbXA7CQkvKiBxdWVyeSB0aW1lc3RhbXAgKi8KKwlpbnQJCQlhZHZpY2Vfb2Zmc2V0OwkvKiBz dGFydCBvZiBhZHZpY2UgaW4gdGV4dHVhbCBkYXRhICovCisJY2hhcgkJdGV4dHVhbF9kYXRhW0ZM RVhJQkxFX0FSUkFZX01FTUJFUl07Cit9IHBnY2FfY29sbGVjdGVkX2FkdmljZTsKKworLyoKKyAq IEEgYnVuY2ggb2YgcG9pbnRlcnMgdG8gcGdjYV9jb2xsZWN0ZWRfYWR2aWNlIG9iamVjdHMsIHN0 b3JlZCBpbgorICogYmFja2VuZC1sb2NhbCBtZW1vcnkuCisgKi8KK3R5cGVkZWYgc3RydWN0IHBn Y2FfbG9jYWxfYWR2aWNlX2NodW5rCit7CisJcGdjYV9jb2xsZWN0ZWRfYWR2aWNlICplbnRyaWVz W0FEVklDRV9DSFVOS19TSVpFXTsKK30gcGdjYV9sb2NhbF9hZHZpY2VfY2h1bms7CisKKy8qCisg KiBJbmZvcm1hdGlvbiBhYm91dCBhbGwgb2YgdGhlIHBnY2FfY29sbGVjdGVkX2FkdmljZSBvYmpl Y3RzIHRoYXQgd2UncmUKKyAqIHN0b3JpbmcgaW4gbG9jYWwgbWVtb3J5LgorICoKKyAqIFdlIGFz c2lnbiBjb25zZWN1dGl2ZSBJRHMsIHN0YXJ0aW5nIGZyb20gMCwgdG8gZWFjaCBwZ2NhX2NvbGxl Y3RlZF9hZHZpY2UKKyAqIG9iamVjdCB0aGF0IHdlIHN0b3JlLiBUaGUgYWN0dWFsIHN0b3JhZ2Ug aXMgYW4gYXJyYXkgb2YgY2h1bmtzLCB3aGljaAorICogaGVscHMga2VlcCBtZW1jcHkoKSBvdmVy aGVhZCBsb3cgd2hlbiB3ZSBzdGFydCBkaXNjYXJkaW5nIG9sZGVyIGRhdGEuCisgKi8KK3R5cGVk ZWYgc3RydWN0IHBnY2FfbG9jYWxfYWR2aWNlCit7CisJdWludDY0CQluZXh0X2lkOworCXVpbnQ2 NAkJb2xkZXN0X2lkOworCXVpbnQ2NAkJYmFzZV9pZDsKKwlpbnQJCQljaHVua19hcnJheV9hbGxv Y2F0ZWRfc2l6ZTsKKwlwZ2NhX2xvY2FsX2FkdmljZV9jaHVuayAqKmNodW5rczsKK30gcGdjYV9s b2NhbF9hZHZpY2U7CisKKy8qCisgKiBKdXN0IGxpa2UgcGdjYV9sb2NhbF9hZHZpY2VfY2h1bmss IGJ1dCBzdG9yZWQgaW4gYSBkeW5hbWljIHNoYXJlZCBhcmVhLAorICogc28gd2UgbXVzdCB1c2Ug ZHNhX3BvaW50ZXIgaW5zdGVhZCBvZiBuYXRpdmUgcG9pbnRlcnMuCisgKi8KK3R5cGVkZWYgc3Ry dWN0IHBnY2Ffc2hhcmVkX2FkdmljZV9jaHVuaworeworCWRzYV9wb2ludGVyIGVudHJpZXNbQURW SUNFX0NIVU5LX1NJWkVdOworfSBwZ2NhX3NoYXJlZF9hZHZpY2VfY2h1bms7CisKKy8qCisgKiBK dXN0IGxpa2UgcGdjYV9sb2NhbF9hZHZpY2UsIGJ1dCBzdG9yZWQgaW4gYSBkeW5hbWljIHNoYXJl ZCBhcmVhLCBzbworICogd2UgbXVzdCB1c2UgZHNhX3BvaW50ZXIgaW5zdGVhZCBvZiBuYXRpdmUg cG9pbnRlcnMuCisgKi8KK3R5cGVkZWYgc3RydWN0IHBnY2Ffc2hhcmVkX2FkdmljZQoreworCXVp bnQ2NAkJbmV4dF9pZDsKKwl1aW50NjQJCW9sZGVzdF9pZDsKKwl1aW50NjQJCWJhc2VfaWQ7CisJ aW50CQkJY2h1bmtfYXJyYXlfYWxsb2NhdGVkX3NpemU7CisJZHNhX3BvaW50ZXIgY2h1bmtzOwor fSBwZ2NhX3NoYXJlZF9hZHZpY2U7CisKKy8qIFBvaW50ZXJzIHRvIGxvY2FsIGFuZCBzaGFyZWQg Y29sbGVjdG9ycyAqLworc3RhdGljIHBnY2FfbG9jYWxfYWR2aWNlICpsb2NhbF9jb2xsZWN0b3Ig PSBOVUxMOworc3RhdGljIHBnY2Ffc2hhcmVkX2FkdmljZSAqc2hhcmVkX2NvbGxlY3RvciA9IE5V TEw7CisKKy8qIFN0YXRpYyBmdW5jdGlvbnMgKi8KK3N0YXRpYyBwZ2NhX2NvbGxlY3RlZF9hZHZp Y2UgKm1ha2VfY29sbGVjdGVkX2FkdmljZShPaWQgdXNlcmlkLAorCQkJCQkJCQkJCQkJCU9pZCBk YmlkLAorCQkJCQkJCQkJCQkJCXVpbnQ2NCBxdWVyeUlkLAorCQkJCQkJCQkJCQkJCVRpbWVzdGFt cFR6IHRpbWVzdGFtcCwKKwkJCQkJCQkJCQkJCQljb25zdCBjaGFyICpxdWVyeV9zdHJpbmcsCisJ CQkJCQkJCQkJCQkJY29uc3QgY2hhciAqYWR2aWNlX3N0cmluZywKKwkJCQkJCQkJCQkJCQlkc2Ff YXJlYSAqYXJlYSwKKwkJCQkJCQkJCQkJCQlkc2FfcG9pbnRlciAqcmVzdWx0KTsKK3N0YXRpYyB2 b2lkIHN0b3JlX2xvY2FsX2FkdmljZShwZ2NhX2NvbGxlY3RlZF9hZHZpY2UgKmNhKTsKK3N0YXRp YyB2b2lkIHRyaW1fbG9jYWxfYWR2aWNlKGludCBsaW1pdCk7CitzdGF0aWMgdm9pZCBzdG9yZV9z aGFyZWRfYWR2aWNlKGRzYV9wb2ludGVyIGNhX3BvaW50ZXIpOworc3RhdGljIHZvaWQgdHJpbV9z aGFyZWRfYWR2aWNlKGRzYV9hcmVhICphcmVhLCBpbnQgbGltaXQpOworCisvKiBIZWxwZXIgZnVu Y3Rpb24gdG8gZXh0cmFjdCB0aGUgcXVlcnkgc3RyaW5nIGZyb20gcGdjYV9jb2xsZWN0ZWRfYWR2 aWNlICovCitzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKgorcXVlcnlfc3RyaW5nKHBnY2FfY29s bGVjdGVkX2FkdmljZSAqY2EpCit7CisJcmV0dXJuIGNhLT50ZXh0dWFsX2RhdGE7Cit9CisKKy8q IEhlbHBlciBmdW5jdGlvbiB0byBleHRyYWN0IHRoZSBhZHZpY2Ugc3RyaW5nIGZyb20gcGdjYV9j b2xsZWN0ZWRfYWR2aWNlICovCitzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKgorYWR2aWNlX3N0 cmluZyhwZ2NhX2NvbGxlY3RlZF9hZHZpY2UgKmNhKQoreworCXJldHVybiBjYS0+dGV4dHVhbF9k YXRhICsgY2EtPmFkdmljZV9vZmZzZXQ7Cit9CisKKy8qCisgKiBTdG9yZSBjb2xsZWN0ZWQgcXVl cnkgYWR2aWNlIGludG8gdGhlIGxvY2FsIG9yIHNoYXJlZCBhZHZpY2UgY29sbGVjdG9yLAorICog YXMgYXBwcm9wcmlhdGUuCisgKi8KK3ZvaWQKK3BnX2NvbGxlY3RfYWR2aWNlX3NhdmUodWludDY0 IHF1ZXJ5SWQsIGNvbnN0IGNoYXIgKnF1ZXJ5X3N0cmluZywKKwkJCQkJICAgY29uc3QgY2hhciAq YWR2aWNlX3N0cmluZykKK3sKKwlPaWQJCQl1c2VyaWQgPSBHZXRVc2VySWQoKTsKKwlPaWQJCQlk YmlkID0gTXlEYXRhYmFzZUlkOworCVRpbWVzdGFtcFR6IG5vdyA9IEdldEN1cnJlbnRUaW1lc3Rh bXAoKTsKKworCWlmIChwZ19jb2xsZWN0X2FkdmljZV9sb2NhbF9jb2xsZWN0b3IgJiYKKwkJcGdf Y29sbGVjdF9hZHZpY2VfbG9jYWxfY29sbGVjdGlvbl9saW1pdCA+IDApCisJeworCQlwZ2NhX2Nv bGxlY3RlZF9hZHZpY2UgKmNhOworCQlNZW1vcnlDb250ZXh0IG9sZGNvbnRleHQ7CisKKwkJb2xk Y29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhwZ19jb2xsZWN0X2FkdmljZV9nZXRfbWN4 dCgpKTsKKwkJY2EgPSBtYWtlX2NvbGxlY3RlZF9hZHZpY2UodXNlcmlkLCBkYmlkLCBxdWVyeUlk LCBub3csCisJCQkJCQkJCSAgIHF1ZXJ5X3N0cmluZywgYWR2aWNlX3N0cmluZywKKwkJCQkJCQkJ ICAgTlVMTCwgTlVMTCk7CisJCXN0b3JlX2xvY2FsX2FkdmljZShjYSk7CisJCU1lbW9yeUNvbnRl eHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKKwl9CisKKwlpZiAocGdfY29sbGVjdF9hZHZpY2Vfc2hh cmVkX2NvbGxlY3RvciAmJgorCQlwZ19jb2xsZWN0X2FkdmljZV9zaGFyZWRfY29sbGVjdGlvbl9s aW1pdCA+IDApCisJeworCQlkc2FfYXJlYSAgICphcmVhID0gcGdfY29sbGVjdF9hZHZpY2VfZHNh X2FyZWEoKTsKKwkJZHNhX3BvaW50ZXIgY2FfcG9pbnRlciA9IEludmFsaWREc2FQb2ludGVyOyAv KiBwbGFjYXRlIGNvbXBpbGVyICovCisKKwkJbWFrZV9jb2xsZWN0ZWRfYWR2aWNlKHVzZXJpZCwg ZGJpZCwgcXVlcnlJZCwgbm93LAorCQkJCQkJCSAgcXVlcnlfc3RyaW5nLCBhZHZpY2Vfc3RyaW5n LCBhcmVhLAorCQkJCQkJCSAgJmNhX3BvaW50ZXIpOworCQlzdG9yZV9zaGFyZWRfYWR2aWNlKGNh X3BvaW50ZXIpOworCX0KK30KKworLyoKKyAqIEFsbG9jYXRlIGFuZCBmaWxsIGEgbmV3IHBnY2Ff Y29sbGVjdGVkX2FkdmljZSBvYmplY3QuCisgKgorICogSWYgYXJlYSAhPSBOVUxMLCBpdCBpcyB1 c2VkIHRvIGFsbG9jYXRlIHRoZSBuZXcgb2JqZWN0LCBhbmQgdGhlIHJlc3VsdGluZworICogZHNh X3BvaW50ZXIgaXMgcmV0dXJuZWQgdmlhICpyZXN1bHQuCisgKgorICogSWYgYXJlYSA9PSBOVUxM LCB0aGUgbmV3IG9iamVjdCBpcyBhbGxvY2F0ZWQgaW4gdGhlIGN1cnJlbnQgbWVtb3J5IGNvbnRl eHQsCisgKiBhbmQgcmVzdWx0IGlzIG5vdCBleGFtaW5lZCBvciBtb2RpZmllZC4KKyAqLworc3Rh dGljIHBnY2FfY29sbGVjdGVkX2FkdmljZSAqCittYWtlX2NvbGxlY3RlZF9hZHZpY2UoT2lkIHVz ZXJpZCwgT2lkIGRiaWQsIHVpbnQ2NCBxdWVyeUlkLAorCQkJCQkgIFRpbWVzdGFtcFR6IHRpbWVz dGFtcCwKKwkJCQkJICBjb25zdCBjaGFyICpxdWVyeV9zdHJpbmcsCisJCQkJCSAgY29uc3QgY2hh ciAqYWR2aWNlX3N0cmluZywKKwkJCQkJICBkc2FfYXJlYSAqYXJlYSwgZHNhX3BvaW50ZXIgKnJl c3VsdCkKK3sKKwlzaXplX3QJCXF1ZXJ5X3N0cmluZ19sZW5ndGggPSBzdHJsZW4ocXVlcnlfc3Ry aW5nKSArIDE7CisJc2l6ZV90CQlhZHZpY2Vfc3RyaW5nX2xlbmd0aCA9IHN0cmxlbihhZHZpY2Vf c3RyaW5nKSArIDE7CisJc2l6ZV90CQl0b3RhbF9sZW5ndGg7CisJcGdjYV9jb2xsZWN0ZWRfYWR2 aWNlICpjYTsKKworCXRvdGFsX2xlbmd0aCA9IG9mZnNldG9mKHBnY2FfY29sbGVjdGVkX2Fkdmlj ZSwgdGV4dHVhbF9kYXRhKQorCQkrIHF1ZXJ5X3N0cmluZ19sZW5ndGggKyBhZHZpY2Vfc3RyaW5n X2xlbmd0aDsKKworCWlmIChhcmVhID09IE5VTEwpCisJCWNhID0gcGFsbG9jKHRvdGFsX2xlbmd0 aCk7CisJZWxzZQorCXsKKwkJKnJlc3VsdCA9IGRzYV9hbGxvY2F0ZShhcmVhLCB0b3RhbF9sZW5n dGgpOworCQljYSA9IGRzYV9nZXRfYWRkcmVzcyhhcmVhLCAqcmVzdWx0KTsKKwl9CisKKwljYS0+ dXNlcmlkID0gdXNlcmlkOworCWNhLT5kYmlkID0gZGJpZDsKKwljYS0+cXVlcnlpZCA9IHF1ZXJ5 SWQ7CisJY2EtPnRpbWVzdGFtcCA9IHRpbWVzdGFtcDsKKwljYS0+YWR2aWNlX29mZnNldCA9IHF1 ZXJ5X3N0cmluZ19sZW5ndGg7CisKKwltZW1jcHkoY2EtPnRleHR1YWxfZGF0YSwgcXVlcnlfc3Ry aW5nLCBxdWVyeV9zdHJpbmdfbGVuZ3RoKTsKKwltZW1jcHkoJmNhLT50ZXh0dWFsX2RhdGFbY2Et PmFkdmljZV9vZmZzZXRdLAorCQkgICBhZHZpY2Vfc3RyaW5nLCBhZHZpY2Vfc3RyaW5nX2xlbmd0 aCk7CisKKwlyZXR1cm4gY2E7Cit9CisKKy8qCisgKiBBZGQgYSBwZ2NhX2NvbGxlY3RlZF9hZHZp Y2Ugb2JqZWN0IHRvIG91ciBiYWNrZW5kLWxvY2FsIGFkdmljZSBjb2xsZWN0aW9uLgorICoKKyAq IENhbGxlciBpcyByZXNwb25zaWJsZSBmb3Igc3dpdGNoaW5nIHRvIHRoZSBhcHByb3ByaWF0ZSBt ZW1vcnkgY29udGV4dDsKKyAqIHRoZSBwcm92aWRlZCBvYmplY3Qgc2hvdWxkIGhhdmUgYmVlbiBh bGxvY2F0ZWQgaW4gdGhhdCBzYW1lIGNvbnRleHQuCisgKi8KK3N0YXRpYyB2b2lkCitzdG9yZV9s b2NhbF9hZHZpY2UocGdjYV9jb2xsZWN0ZWRfYWR2aWNlICpjYSkKK3sKKwl1aW50NjQJCWNodW5r X251bWJlcjsKKwl1aW50NjQJCWNodW5rX29mZnNldDsKKwlwZ2NhX2xvY2FsX2FkdmljZSAqbGEg PSBsb2NhbF9jb2xsZWN0b3I7CisKKwkvKiBJZiB0aGUgbG9jYWwgYWR2aWNlIGNvbGxlY3RvciBp c24ndCBpbml0aWFsaXplZCB5ZXQsIGRvIHRoYXQgbm93LiAqLworCWlmIChsYSA9PSBOVUxMKQor CXsKKwkJbGEgPSBwYWxsb2MwKHNpemVvZihwZ2NhX2xvY2FsX2FkdmljZSkpOworCQlsYS0+Y2h1 bmtfYXJyYXlfYWxsb2NhdGVkX3NpemUgPSBBRFZJQ0VfQ0hVTktfQVJSQVlfU0laRTsKKwkJbGEt PmNodW5rcyA9IHBhbGxvYzBfYXJyYXkocGdjYV9sb2NhbF9hZHZpY2VfY2h1bmsgKiwKKwkJCQkJ CQkJICAgbGEtPmNodW5rX2FycmF5X2FsbG9jYXRlZF9zaXplKTsKKwkJbG9jYWxfY29sbGVjdG9y ID0gbGE7CisJfQorCisJLyogQ29tcHV0ZSBjaHVuayBhbmQgb2Zmc2V0IGF0IHdoaWNoIHRvIHN0 b3JlIHRoaXMgYWR2aWNlLiAqLworCWNodW5rX251bWJlciA9IChsYS0+bmV4dF9pZCAtIGxhLT5i YXNlX2lkKSAvIEFEVklDRV9DSFVOS19TSVpFOworCWNodW5rX29mZnNldCA9IChsYS0+bmV4dF9p ZCAtIGxhLT5iYXNlX2lkKSAlIEFEVklDRV9DSFVOS19TSVpFOworCisJLyogRXh0ZW5kIGNodW5r IGFycmF5LCBpZiBuZWVkZWQuICovCisJaWYgKGNodW5rX251bWJlciA+PSBsYS0+Y2h1bmtfYXJy YXlfYWxsb2NhdGVkX3NpemUpCisJeworCQlpbnQJCQluZXdfc2l6ZTsKKworCQluZXdfc2l6ZSA9 IGxhLT5jaHVua19hcnJheV9hbGxvY2F0ZWRfc2l6ZSArIEFEVklDRV9DSFVOS19BUlJBWV9TSVpF OworCQlsYS0+Y2h1bmtzID0gcmVwYWxsb2MwX2FycmF5KGxhLT5jaHVua3MsCisJCQkJCQkJCQkg cGdjYV9sb2NhbF9hZHZpY2VfY2h1bmsgKiwKKwkJCQkJCQkJCSBsYS0+Y2h1bmtfYXJyYXlfYWxs b2NhdGVkX3NpemUsCisJCQkJCQkJCQkgbmV3X3NpemUpOworCQlsYS0+Y2h1bmtfYXJyYXlfYWxs b2NhdGVkX3NpemUgPSBuZXdfc2l6ZTsKKwl9CisKKwkvKiBBbGxvY2F0ZSBuZXcgY2h1bmssIGlm IG5lZWRlZC4gKi8KKwlpZiAobGEtPmNodW5rc1tjaHVua19udW1iZXJdID09IE5VTEwpCisJCWxh LT5jaHVua3NbY2h1bmtfbnVtYmVyXSA9IHBhbGxvYzBfb2JqZWN0KHBnY2FfbG9jYWxfYWR2aWNl X2NodW5rKTsKKworCS8qIFNhdmUgcG9pbnRlciBhbmQgYnVtcCBuZXh0LWlkIGNvdW50ZXIuICov CisJQXNzZXJ0KGxhLT5jaHVua3NbY2h1bmtfbnVtYmVyXS0+ZW50cmllc1tjaHVua19vZmZzZXRd ID09IE5VTEwpOworCWxhLT5jaHVua3NbY2h1bmtfbnVtYmVyXS0+ZW50cmllc1tjaHVua19vZmZz ZXRdID0gY2E7CisJKytsYS0+bmV4dF9pZDsKKworCS8qIElmIHdlJ3ZlIGV4Y2VlZGVkIHRoZSBz dG9yYWdlIGxpbWl0LCBkaXNjYXJkIG9sZCBkYXRhLiAqLworCXRyaW1fbG9jYWxfYWR2aWNlKHBn X2NvbGxlY3RfYWR2aWNlX2xvY2FsX2NvbGxlY3Rpb25fbGltaXQpOworfQorCisvKgorICogQWRk IGEgcGdjYV9jb2xsZWN0ZWRfYWR2aWNlIG9iamVjdCB0byB0aGUgc2hhcmVkIGFkdmljZSBjb2xs ZWN0aW9uLgorICoKKyAqICdjYV9wb2ludGVyJyBzaG91bGQgaGF2ZSBiZWVuIGFsbG9jYXRlZCBm cm9tIHRoZSBwZ19jb2xsZWN0X2FkdmljZSBEU0EgYXJlYQorICogYW5kIHNob3VsZCBwb2ludCB0 byBhbiBvYmplY3Qgb2YgdHlwZSBwZ2NhX2NvbGxlY3RlZF9hZHZpY2UuCisgKi8KK3N0YXRpYyB2 b2lkCitzdG9yZV9zaGFyZWRfYWR2aWNlKGRzYV9wb2ludGVyIGNhX3BvaW50ZXIpCit7CisJdWlu dDY0CQljaHVua19udW1iZXI7CisJdWludDY0CQljaHVua19vZmZzZXQ7CisJcGdjYV9zaGFyZWRf c3RhdGUgKnN0YXRlID0gcGdfY29sbGVjdF9hZHZpY2VfYXR0YWNoKCk7CisJZHNhX2FyZWEgICAq YXJlYSA9IHBnX2NvbGxlY3RfYWR2aWNlX2RzYV9hcmVhKCk7CisJcGdjYV9zaGFyZWRfYWR2aWNl ICpzYSA9IHNoYXJlZF9jb2xsZWN0b3I7CisJZHNhX3BvaW50ZXIgKmNodW5rX2FycmF5OworCXBn Y2Ffc2hhcmVkX2FkdmljZV9jaHVuayAqY2h1bms7CisKKwkvKiBMb2NrIHRoZSBzaGFyZWQgc3Rh dGUuICovCisJTFdMb2NrQWNxdWlyZSgmc3RhdGUtPmxvY2ssIExXX0VYQ0xVU0lWRSk7CisKKwkv KgorCSAqIElmIHdlJ3JlIG5vdCBhdHRhY2hlZCB0byB0aGUgc2hhcmVkIGFkdmljZSBjb2xsZWN0 b3IgeWV0LCBmaXggdGhhdCBub3cuCisJICogSWYgd2UncmUgdGhlIGZpcnN0IG9uZXMgdG8gYXR0 YWNoLCB3ZSBtYXkgbmVlZCB0byBjcmVhdGUgdGhlIG9iamVjdC4KKwkgKi8KKwlpZiAoc2EgPT0g TlVMTCkKKwl7CisJCWlmIChzdGF0ZS0+c2hhcmVkX2NvbGxlY3RvciA9PSBJbnZhbGlkRHNhUG9p bnRlcikKKwkJCXN0YXRlLT5zaGFyZWRfY29sbGVjdG9yID0KKwkJCQlkc2FfYWxsb2NhdGUwKGFy ZWEsIHNpemVvZihwZ2NhX3NoYXJlZF9hZHZpY2UpKTsKKwkJc2hhcmVkX2NvbGxlY3RvciA9IHNh ID0gZHNhX2dldF9hZGRyZXNzKGFyZWEsIHN0YXRlLT5zaGFyZWRfY29sbGVjdG9yKTsKKwl9CisK KwkvKgorCSAqIEl0J3MgcG9zc2libGUgdGhhdCBzb21lIG90aGVyIGJhY2tlbmQgbWF5IGhhdmUg c3VjY2VlZGVkIGluIGNyZWF0aW5nCisJICogdGhlIG1haW4gY29sbGVjdG9yIG9iamVjdCBidXQg ZmFpbGVkIHRvIGFsbG9jYXRlIGFuIGluaXRpYWwgY2h1bmsKKwkgKiBhcnJheSwgc28gd2UgbXVz dCBiZSBwcmVwYXJlZCB0byBhbGxvY2F0ZSB0aGUgY2h1bmsgYXJyYXkgaGVyZSB3aGV0aGVyCisJ ICogb3Igbm90IHdlIGNyZWF0ZWQgdGhlIGNvbGxlY3RvciBvYmplY3QuCisJICovCisJaWYgKHNo YXJlZF9jb2xsZWN0b3ItPmNodW5rX2FycmF5X2FsbG9jYXRlZF9zaXplID09IDApCisJeworCQlz YS0+Y2h1bmtzID0KKwkJCWRzYV9hbGxvY2F0ZTAoYXJlYSwKKwkJCQkJCSAgc2l6ZW9mKGRzYV9w b2ludGVyKSAqIEFEVklDRV9DSFVOS19BUlJBWV9TSVpFKTsKKwkJc2EtPmNodW5rX2FycmF5X2Fs bG9jYXRlZF9zaXplID0gQURWSUNFX0NIVU5LX0FSUkFZX1NJWkU7CisJfQorCisJLyogQ29tcHV0 ZSBjaHVuayBhbmQgb2Zmc2V0IGF0IHdoaWNoIHRvIHN0b3JlIHRoaXMgYWR2aWNlLiAqLworCWNo dW5rX251bWJlciA9IChzYS0+bmV4dF9pZCAtIHNhLT5iYXNlX2lkKSAvIEFEVklDRV9DSFVOS19T SVpFOworCWNodW5rX29mZnNldCA9IChzYS0+bmV4dF9pZCAtIHNhLT5iYXNlX2lkKSAlIEFEVklD RV9DSFVOS19TSVpFOworCisJLyogR2V0IHRoZSBhZGRyZXNzIG9mIHRoZSBjaHVuayBhcnJheSBh bmQsIGlmIG5lZWRlZCwgZXh0ZW5kIGl0LiAqLworCWlmIChjaHVua19udW1iZXIgPj0gc2EtPmNo dW5rX2FycmF5X2FsbG9jYXRlZF9zaXplKQorCXsKKwkJaW50CQkJbmV3X3NpemU7CisJCWRzYV9w b2ludGVyIG5ld19jaHVua3M7CisKKwkJLyoKKwkJICogRFNBIGNhbid0IGVubGFyZ2UgYW4gZXhp c3RpbmcgYWxsb2NhdGlvbiwgc28gd2UgbXVzdCBtYWtlIGEgbmV3CisJCSAqIGFsbG9jYXRpb24g YW5kIGNvcHkgZGF0YSBvdmVyLgorCQkgKi8KKwkJbmV3X3NpemUgPSBzYS0+Y2h1bmtfYXJyYXlf YWxsb2NhdGVkX3NpemUgKyBBRFZJQ0VfQ0hVTktfQVJSQVlfU0laRTsKKwkJbmV3X2NodW5rcyA9 IGRzYV9hbGxvY2F0ZTAoYXJlYSwgc2l6ZW9mKGRzYV9wb2ludGVyKSAqIG5ld19zaXplKTsKKwkJ Y2h1bmtfYXJyYXkgPSBkc2FfZ2V0X2FkZHJlc3MoYXJlYSwgbmV3X2NodW5rcyk7CisJCW1lbWNw eShjaHVua19hcnJheSwgZHNhX2dldF9hZGRyZXNzKGFyZWEsIHNhLT5jaHVua3MpLAorCQkJICAg c2l6ZW9mKGRzYV9wb2ludGVyKSAqIHNhLT5jaHVua19hcnJheV9hbGxvY2F0ZWRfc2l6ZSk7CisJ CWRzYV9mcmVlKGFyZWEsIHNhLT5jaHVua3MpOworCQlzYS0+Y2h1bmtzID0gbmV3X2NodW5rczsK KwkJc2EtPmNodW5rX2FycmF5X2FsbG9jYXRlZF9zaXplID0gbmV3X3NpemU7CisJfQorCWVsc2UK KwkJY2h1bmtfYXJyYXkgPSBkc2FfZ2V0X2FkZHJlc3MoYXJlYSwgc2EtPmNodW5rcyk7CisKKwkv KiBHZXQgdGhlIGFkZHJlc3Mgb2YgdGhlIGRlc2lyZWQgY2h1bmssIGFsbG9jYXRpbmcgaXQgaWYg bmVlZGVkLiAqLworCWlmIChjaHVua19hcnJheVtjaHVua19udW1iZXJdID09IEludmFsaWREc2FQ b2ludGVyKQorCQljaHVua19hcnJheVtjaHVua19udW1iZXJdID0KKwkJCWRzYV9hbGxvY2F0ZTAo YXJlYSwgc2l6ZW9mKHBnY2Ffc2hhcmVkX2FkdmljZV9jaHVuaykpOworCWNodW5rID0gZHNhX2dl dF9hZGRyZXNzKGFyZWEsIGNodW5rX2FycmF5W2NodW5rX251bWJlcl0pOworCisJLyogU2F2ZSBw b2ludGVyIGFuZCBidW1wIG5leHQtaWQgY291bnRlci4gKi8KKwlBc3NlcnQoY2h1bmstPmVudHJp ZXNbY2h1bmtfb2Zmc2V0XSA9PSBJbnZhbGlkRHNhUG9pbnRlcik7CisJY2h1bmstPmVudHJpZXNb Y2h1bmtfb2Zmc2V0XSA9IGNhX3BvaW50ZXI7CisJKytzYS0+bmV4dF9pZDsKKworCS8qIElmIHdl J3ZlIGV4Y2VlZGVkIHRoZSBzdG9yYWdlIGxpbWl0LCBkaXNjYXJkIG9sZCBkYXRhLiAqLworCXRy aW1fc2hhcmVkX2FkdmljZShhcmVhLCBwZ19jb2xsZWN0X2FkdmljZV9zaGFyZWRfY29sbGVjdGlv bl9saW1pdCk7CisKKwkvKiBSZWxlYXNlIGxvY2sgb24gc2hhcmVkIHN0YXRlLiAqLworCUxXTG9j a1JlbGVhc2UoJnN0YXRlLT5sb2NrKTsKK30KKworLyoKKyAqIERpc2NhcmQgY29sbGVjdGVkIGFk dmljZSBzdG9yZWQgaW4gYmFja2VuZC1sb2NhbCBtZW1vcnkgaW4gZXhjZXNzIG9mIHRoZQorICog c3BlY2lmaWVkIGxpbWl0LgorICovCitzdGF0aWMgdm9pZAordHJpbV9sb2NhbF9hZHZpY2UoaW50 IGxpbWl0KQoreworCXBnY2FfbG9jYWxfYWR2aWNlICpsYSA9IGxvY2FsX2NvbGxlY3RvcjsKKwl1 aW50NjQJCWN1cnJlbnRfY291bnQ7CisJdWludDY0CQl0cmltX2NvdW50OworCXVpbnQ2NAkJdG90 YWxfY2h1bmtfY291bnQ7CisJdWludDY0CQl0cmltX2NodW5rX2NvdW50OworCXVpbnQ2NAkJcmVt YWluaW5nX2NodW5rX2NvdW50OworCisJLyogSWYgd2UgaGF2ZW4ndCB5ZXQgcmVhY2hlZCB0aGUg bGltaXQsIHRoZXJlJ3Mgbm90aGluZyB0byBkby4gKi8KKwljdXJyZW50X2NvdW50ID0gbGEtPm5l eHRfaWQgLSBsYS0+b2xkZXN0X2lkOworCWlmIChjdXJyZW50X2NvdW50IDw9IGxpbWl0KQorCQly ZXR1cm47CisKKwkvKiBGcmVlIGVub3VnaCBlbnRyaWVzIHRvIGdldCB1cyBiYWNrIGRvd24gdG8g dGhlIGxpbWl0LiAqLworCXRyaW1fY291bnQgPSBjdXJyZW50X2NvdW50IC0gbGltaXQ7CisJd2hp bGUgKHRyaW1fY291bnQgPiAwKQorCXsKKwkJdWludDY0CQljaHVua19udW1iZXI7CisJCXVpbnQ2 NAkJY2h1bmtfb2Zmc2V0OworCisJCWNodW5rX251bWJlciA9IChsYS0+b2xkZXN0X2lkIC0gbGEt PmJhc2VfaWQpIC8gQURWSUNFX0NIVU5LX1NJWkU7CisJCWNodW5rX29mZnNldCA9IChsYS0+b2xk ZXN0X2lkIC0gbGEtPmJhc2VfaWQpICUgQURWSUNFX0NIVU5LX1NJWkU7CisKKwkJQXNzZXJ0KGxh LT5jaHVua3NbY2h1bmtfbnVtYmVyXS0+ZW50cmllc1tjaHVua19vZmZzZXRdICE9IE5VTEwpOwor CQlwZnJlZShsYS0+Y2h1bmtzW2NodW5rX251bWJlcl0tPmVudHJpZXNbY2h1bmtfb2Zmc2V0XSk7 CisJCWxhLT5jaHVua3NbY2h1bmtfbnVtYmVyXS0+ZW50cmllc1tjaHVua19vZmZzZXRdID0gTlVM TDsKKwkJKytsYS0+b2xkZXN0X2lkOworCQktLXRyaW1fY291bnQ7CisJfQorCisJLyogRnJlZSBh bnkgY2h1bmtzIHRoYXQgYXJlIG5vdyBlbnRpcmVseSB1bnVzZWQuICovCisJdHJpbV9jaHVua19j b3VudCA9IChsYS0+b2xkZXN0X2lkIC0gbGEtPmJhc2VfaWQpIC8gQURWSUNFX0NIVU5LX1NJWkU7 CisJZm9yICh1aW50NjQgbiA9IDA7IG4gPCB0cmltX2NodW5rX2NvdW50OyArK24pCisJCXBmcmVl KGxhLT5jaHVua3Nbbl0pOworCisJLyogU2xpZGUgcmVtYWluaW5nIGNodW5rIHBvaW50ZXJzIGJh Y2sgdG93YXJkIHRoZSBiYXNlIG9mIHRoZSBhcnJheS4gKi8KKwl0b3RhbF9jaHVua19jb3VudCA9 IChsYS0+bmV4dF9pZCAtIGxhLT5iYXNlX2lkICsKKwkJCQkJCSBBRFZJQ0VfQ0hVTktfU0laRSAt IDEpIC8gQURWSUNFX0NIVU5LX1NJWkU7CisJcmVtYWluaW5nX2NodW5rX2NvdW50ID0gdG90YWxf Y2h1bmtfY291bnQgLSB0cmltX2NodW5rX2NvdW50OworCWlmIChyZW1haW5pbmdfY2h1bmtfY291 bnQgPiAwKQorCQltZW1tb3ZlKCZsYS0+Y2h1bmtzWzBdLCAmbGEtPmNodW5rc1t0cmltX2NodW5r X2NvdW50XSwKKwkJCQlzaXplb2YocGdjYV9sb2NhbF9hZHZpY2VfY2h1bmsgKikgKiByZW1haW5p bmdfY2h1bmtfY291bnQpOworCisJLyogRG9uJ3QgbGVhdmUgc3RhbGUgcG9pbnRlcnMgYXJvdW5k LiAqLworCW1lbXNldCgmbGEtPmNodW5rc1tyZW1haW5pbmdfY2h1bmtfY291bnRdLCAwLAorCQkg ICBzaXplb2YocGdjYV9sb2NhbF9hZHZpY2VfY2h1bmsgKikKKwkJICAgKiAodG90YWxfY2h1bmtf Y291bnQgLSByZW1haW5pbmdfY2h1bmtfY291bnQpKTsKKworCS8qIEFkanVzdCBiYXNlIElEIHZh bHVlIGFjY29yZGluZ2x5LiAqLworCWxhLT5iYXNlX2lkICs9IHRyaW1fY2h1bmtfY291bnQgKiBB RFZJQ0VfQ0hVTktfU0laRTsKK30KKworLyoKKyAqIERpc2NhcmQgY29sbGVjdGVkIGFkdmljZSBz dG9yZWQgaW4gc2hhcmVkIG1lbW9yeSBpbiBleGNlc3Mgb2YgdGhlCisgKiBzcGVjaWZpZWQgbGlt aXQuCisgKi8KK3N0YXRpYyB2b2lkCit0cmltX3NoYXJlZF9hZHZpY2UoZHNhX2FyZWEgKmFyZWEs IGludCBsaW1pdCkKK3sKKwlwZ2NhX3NoYXJlZF9hZHZpY2UgKnNhID0gc2hhcmVkX2NvbGxlY3Rv cjsKKwl1aW50NjQJCWN1cnJlbnRfY291bnQ7CisJdWludDY0CQl0cmltX2NvdW50OworCXVpbnQ2 NAkJdG90YWxfY2h1bmtfY291bnQ7CisJdWludDY0CQl0cmltX2NodW5rX2NvdW50OworCXVpbnQ2 NAkJcmVtYWluaW5nX2NodW5rX2NvdW50OworCWRzYV9wb2ludGVyICpjaHVua19hcnJheTsKKwor CS8qIElmIHdlIGhhdmVuJ3QgeWV0IHJlYWNoZWQgdGhlIGxpbWl0LCB0aGVyZSdzIG5vdGhpbmcg dG8gZG8uICovCisJY3VycmVudF9jb3VudCA9IHNhLT5uZXh0X2lkIC0gc2EtPm9sZGVzdF9pZDsK KwlpZiAoY3VycmVudF9jb3VudCA8PSBsaW1pdCkKKwkJcmV0dXJuOworCisJLyogR2V0IGEgcG9p bnRlciB0byB0aGUgY2h1bmsgYXJyYXkuICovCisJY2h1bmtfYXJyYXkgPSBkc2FfZ2V0X2FkZHJl c3MoYXJlYSwgc2EtPmNodW5rcyk7CisKKwkvKiBGcmVlIGVub3VnaCBlbnRyaWVzIHRvIGdldCB1 cyBiYWNrIGRvd24gdG8gdGhlIGxpbWl0LiAqLworCXRyaW1fY291bnQgPSBjdXJyZW50X2NvdW50 IC0gbGltaXQ7CisJd2hpbGUgKHRyaW1fY291bnQgPiAwKQorCXsKKwkJdWludDY0CQljaHVua19u dW1iZXI7CisJCXVpbnQ2NAkJY2h1bmtfb2Zmc2V0OworCQlwZ2NhX3NoYXJlZF9hZHZpY2VfY2h1 bmsgKmNodW5rOworCisJCWNodW5rX251bWJlciA9IChzYS0+b2xkZXN0X2lkIC0gc2EtPmJhc2Vf aWQpIC8gQURWSUNFX0NIVU5LX1NJWkU7CisJCWNodW5rX29mZnNldCA9IChzYS0+b2xkZXN0X2lk IC0gc2EtPmJhc2VfaWQpICUgQURWSUNFX0NIVU5LX1NJWkU7CisKKwkJY2h1bmsgPSBkc2FfZ2V0 X2FkZHJlc3MoYXJlYSwgY2h1bmtfYXJyYXlbY2h1bmtfbnVtYmVyXSk7CisJCUFzc2VydChjaHVu ay0+ZW50cmllc1tjaHVua19vZmZzZXRdICE9IEludmFsaWREc2FQb2ludGVyKTsKKwkJZHNhX2Zy ZWUoYXJlYSwgY2h1bmstPmVudHJpZXNbY2h1bmtfb2Zmc2V0XSk7CisJCWNodW5rLT5lbnRyaWVz W2NodW5rX29mZnNldF0gPSBJbnZhbGlkRHNhUG9pbnRlcjsKKwkJKytzYS0+b2xkZXN0X2lkOwor CQktLXRyaW1fY291bnQ7CisJfQorCisJLyogRnJlZSBhbnkgY2h1bmtzIHRoYXQgYXJlIG5vdyBl bnRpcmVseSB1bnVzZWQuICovCisJdHJpbV9jaHVua19jb3VudCA9IChzYS0+b2xkZXN0X2lkIC0g c2EtPmJhc2VfaWQpIC8gQURWSUNFX0NIVU5LX1NJWkU7CisJZm9yICh1aW50NjQgbiA9IDA7IG4g PCB0cmltX2NodW5rX2NvdW50OyArK24pCisJCWRzYV9mcmVlKGFyZWEsIGNodW5rX2FycmF5W25d KTsKKworCS8qIFNsaWRlIHJlbWFpbmluZyBjaHVuayBwb2ludGVycyBiYWNrIHRvd2FyZCB0aGUg YmFzZSBvZiB0aGUgYXJyYXkuICovCisJdG90YWxfY2h1bmtfY291bnQgPSAoc2EtPm5leHRfaWQg LSBzYS0+YmFzZV9pZCArCisJCQkJCQkgQURWSUNFX0NIVU5LX1NJWkUgLSAxKSAvIEFEVklDRV9D SFVOS19TSVpFOworCXJlbWFpbmluZ19jaHVua19jb3VudCA9IHRvdGFsX2NodW5rX2NvdW50IC0g dHJpbV9jaHVua19jb3VudDsKKwlpZiAocmVtYWluaW5nX2NodW5rX2NvdW50ID4gMCkKKwkJbWVt bW92ZSgmY2h1bmtfYXJyYXlbMF0sICZjaHVua19hcnJheVt0cmltX2NodW5rX2NvdW50XSwKKwkJ CQlzaXplb2YoZHNhX3BvaW50ZXIpICogcmVtYWluaW5nX2NodW5rX2NvdW50KTsKKworCS8qIERv bid0IGxlYXZlIHN0YWxlIHBvaW50ZXJzIGFyb3VuZC4gKi8KKwltZW1zZXQoJmNodW5rX2FycmF5 W3JlbWFpbmluZ19jaHVua19jb3VudF0sIDAsCisJCSAgIHNpemVvZihkc2FfcG9pbnRlcikgKiAo dG90YWxfY2h1bmtfY291bnQgLSByZW1haW5pbmdfY2h1bmtfY291bnQpKTsKKworCS8qIEFkanVz dCBiYXNlIElEIHZhbHVlIGFjY29yZGluZ2x5LiAqLworCXNhLT5iYXNlX2lkICs9IHRyaW1fY2h1 bmtfY291bnQgKiBBRFZJQ0VfQ0hVTktfU0laRTsKK30KKworLyoKKyAqIFNRTC1jYWxsYWJsZSBm dW5jdGlvbiB0byBkaXNjYXJkIGFkdmljZSBjb2xsZWN0ZWQgaW4gYmFja2VuZC1sb2NhbCBtZW1v cnkKKyAqLworRGF0dW0KK3BnX2NsZWFyX2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UoUEdfRlVOQ1RJ T05fQVJHUykKK3sKKwlpZiAobG9jYWxfY29sbGVjdG9yICE9IE5VTEwpCisJCXRyaW1fbG9jYWxf YWR2aWNlKDApOworCisJUEdfUkVUVVJOX1ZPSUQoKTsKK30KKworLyoKKyAqIFNRTC1jYWxsYWJs ZSBmdW5jdGlvbiB0byBkaXNjYXJkIGFkdmljZSBjb2xsZWN0ZWQgaW4gc2hhcmVkIG1lbW9yeQor ICovCitEYXR1bQorcGdfY2xlYXJfY29sbGVjdGVkX3NoYXJlZF9hZHZpY2UoUEdfRlVOQ1RJT05f QVJHUykKK3sKKwlwZ2NhX3NoYXJlZF9zdGF0ZSAqc3RhdGUgPSBwZ19jb2xsZWN0X2FkdmljZV9h dHRhY2goKTsKKwlkc2FfYXJlYSAgICphcmVhID0gcGdfY29sbGVjdF9hZHZpY2VfZHNhX2FyZWEo KTsKKworCUxXTG9ja0FjcXVpcmUoJnN0YXRlLT5sb2NrLCBMV19FWENMVVNJVkUpOworCisJLyoK KwkgKiBJZiB3ZSdyZSBub3QgYXR0YWNoZWQgdG8gdGhlIHNoYXJlZCBhZHZpY2UgY29sbGVjdG9y IHlldCwgZml4IHRoYXQgbm93OworCSAqIGJ1dCBpZiB0aGUgY29sbGVjdG9yIGRvZXNuJ3QgZXZl biBleGlzdCwgd2UgY2FuIHJldHVybiB3aXRob3V0IGRvaW5nCisJICogYW55dGhpbmcgZWxzZS4K KwkgKi8KKwlpZiAoc2hhcmVkX2NvbGxlY3RvciA9PSBOVUxMKQorCXsKKwkJaWYgKHN0YXRlLT5z aGFyZWRfY29sbGVjdG9yID09IEludmFsaWREc2FQb2ludGVyKQorCQl7CisJCQlMV0xvY2tSZWxl YXNlKCZzdGF0ZS0+bG9jayk7CisJCQlyZXR1cm4gKERhdHVtKSAwOworCQl9CisJCXNoYXJlZF9j b2xsZWN0b3IgPSBkc2FfZ2V0X2FkZHJlc3MoYXJlYSwgc3RhdGUtPnNoYXJlZF9jb2xsZWN0b3Ip OworCX0KKworCS8qIERvIHRoZSByZWFsIHdvcmsgKi8KKwl0cmltX3NoYXJlZF9hZHZpY2UoYXJl YSwgMCk7CisKKwlMV0xvY2tSZWxlYXNlKCZzdGF0ZS0+bG9jayk7CisKKwlQR19SRVRVUk5fVk9J RCgpOworfQorCisvKgorICogU1FMLWNhbGxhYmxlIFNSRiB0byByZXR1cm4gYWR2aWNlIGNvbGxl Y3RlZCBpbiBiYWNrZW5kLWxvY2FsIG1lbW9yeQorICovCitEYXR1bQorcGdfZ2V0X2NvbGxlY3Rl ZF9sb2NhbF9hZHZpY2UoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlSZXR1cm5TZXRJbmZvICpyc2lu Zm8gPSAoUmV0dXJuU2V0SW5mbyAqKSBmY2luZm8tPnJlc3VsdGluZm87CisJcGdjYV9sb2NhbF9h ZHZpY2UgKmxhID0gbG9jYWxfY29sbGVjdG9yOworCU9pZAkJCXVzZXJpZCA9IEdldFVzZXJJZCgp OworCisJSW5pdE1hdGVyaWFsaXplZFNSRihmY2luZm8sIDApOworCisJaWYgKGxhID09IE5VTEwp CisJCXJldHVybiAoRGF0dW0pIDA7CisKKwkvKiBMb29wIG92ZXIgYWxsIGVudHJpZXMuICovCisJ Zm9yICh1aW50NjQgaWQgPSBsYS0+b2xkZXN0X2lkOyBpZCA8IGxhLT5uZXh0X2lkOyArK2lkKQor CXsKKwkJdWludDY0CQljaHVua19udW1iZXI7CisJCXVpbnQ2NAkJY2h1bmtfb2Zmc2V0OworCQlw Z2NhX2NvbGxlY3RlZF9hZHZpY2UgKmNhOworCQlEYXR1bQkJdmFsdWVzW1BHX0dFVF9BRFZJQ0Vf Q09MVU1OU107CisJCWJvb2wJCW51bGxzW1BHX0dFVF9BRFZJQ0VfQ09MVU1OU10gPSB7MH07CisK KwkJY2h1bmtfbnVtYmVyID0gKGlkIC0gbGEtPmJhc2VfaWQpIC8gQURWSUNFX0NIVU5LX1NJWkU7 CisJCWNodW5rX29mZnNldCA9IChpZCAtIGxhLT5iYXNlX2lkKSAlIEFEVklDRV9DSFVOS19TSVpF OworCisJCWNhID0gbGEtPmNodW5rc1tjaHVua19udW1iZXJdLT5lbnRyaWVzW2NodW5rX29mZnNl dF07CisKKwkJaWYgKCFtZW1iZXJfY2FuX3NldF9yb2xlKHVzZXJpZCwgY2EtPnVzZXJpZCkpCisJ CQljb250aW51ZTsKKworCQl2YWx1ZXNbMF0gPSBVSW50NjRHZXREYXR1bShpZCk7CisJCXZhbHVl c1sxXSA9IE9iamVjdElkR2V0RGF0dW0oY2EtPnVzZXJpZCk7CisJCXZhbHVlc1syXSA9IE9iamVj dElkR2V0RGF0dW0oY2EtPmRiaWQpOworCQl2YWx1ZXNbM10gPSBVSW50NjRHZXREYXR1bShjYS0+ cXVlcnlpZCk7CisJCXZhbHVlc1s0XSA9IFRpbWVzdGFtcFR6R2V0RGF0dW0oY2EtPnRpbWVzdGFt cCk7CisJCXZhbHVlc1s1XSA9IENTdHJpbmdHZXRUZXh0RGF0dW0ocXVlcnlfc3RyaW5nKGNhKSk7 CisJCXZhbHVlc1s2XSA9IENTdHJpbmdHZXRUZXh0RGF0dW0oYWR2aWNlX3N0cmluZyhjYSkpOwor CisJCXR1cGxlc3RvcmVfcHV0dmFsdWVzKHJzaW5mby0+c2V0UmVzdWx0LCByc2luZm8tPnNldERl c2MsCisJCQkJCQkJIHZhbHVlcywgbnVsbHMpOworCX0KKworCXJldHVybiAoRGF0dW0pIDA7Cit9 CisKKy8qCisgKiBTUUwtY2FsbGFibGUgU1JGIHRvIHJldHVybiBhZHZpY2UgY29sbGVjdGVkIGlu IHNoYXJlZCBtZW1vcnkKKyAqLworRGF0dW0KK3BnX2dldF9jb2xsZWN0ZWRfc2hhcmVkX2Fkdmlj ZShQR19GVU5DVElPTl9BUkdTKQoreworCVJldHVyblNldEluZm8gKnJzaW5mbyA9IChSZXR1cm5T ZXRJbmZvICopIGZjaW5mby0+cmVzdWx0aW5mbzsKKwlwZ2NhX3NoYXJlZF9zdGF0ZSAqc3RhdGUg PSBwZ19jb2xsZWN0X2FkdmljZV9hdHRhY2goKTsKKwlkc2FfYXJlYSAgICphcmVhID0gcGdfY29s bGVjdF9hZHZpY2VfZHNhX2FyZWEoKTsKKwlkc2FfcG9pbnRlciAqY2h1bmtfYXJyYXk7CisJcGdj YV9zaGFyZWRfYWR2aWNlICpzYSA9IHNoYXJlZF9jb2xsZWN0b3I7CisJT2lkCQkJdXNlcmlkID0g R2V0VXNlcklkKCk7CisKKwlJbml0TWF0ZXJpYWxpemVkU1JGKGZjaW5mbywgMCk7CisKKwkvKiBM b2NrIHRoZSBzaGFyZWQgc3RhdGUuICovCisJTFdMb2NrQWNxdWlyZSgmc3RhdGUtPmxvY2ssIExX X1NIQVJFRCk7CisKKwkvKgorCSAqIElmIHdlJ3JlIG5vdCBhdHRhY2hlZCB0byB0aGUgc2hhcmVk IGFkdmljZSBjb2xsZWN0b3IgeWV0LCBmaXggdGhhdCBub3c7CisJICogYnV0IGlmIHRoZSBjb2xs ZWN0b3IgZG9lc24ndCBldmVuIGV4aXN0LCB3ZSBjYW4gcmV0dXJuIHdpdGhvdXQgZG9pbmcKKwkg KiBhbnl0aGluZyBlbHNlLgorCSAqLworCWlmIChzYSA9PSBOVUxMKQorCXsKKwkJaWYgKHN0YXRl LT5zaGFyZWRfY29sbGVjdG9yID09IEludmFsaWREc2FQb2ludGVyKQorCQl7CisJCQlMV0xvY2tS ZWxlYXNlKCZzdGF0ZS0+bG9jayk7CisJCQlyZXR1cm4gKERhdHVtKSAwOworCQl9CisJCXNoYXJl ZF9jb2xsZWN0b3IgPSBzYSA9IGRzYV9nZXRfYWRkcmVzcyhhcmVhLCBzdGF0ZS0+c2hhcmVkX2Nv bGxlY3Rvcik7CisJfQorCisJLyogR2V0IGEgcG9pbnRlciB0byB0aGUgY2h1bmsgYXJyYXkuICov CisJY2h1bmtfYXJyYXkgPSBkc2FfZ2V0X2FkZHJlc3MoYXJlYSwgc2EtPmNodW5rcyk7CisKKwkv KiBMb29wIG92ZXIgYWxsIGVudHJpZXMuICovCisJZm9yICh1aW50NjQgaWQgPSBzYS0+b2xkZXN0 X2lkOyBpZCA8IHNhLT5uZXh0X2lkOyArK2lkKQorCXsKKwkJdWludDY0CQljaHVua19udW1iZXI7 CisJCXVpbnQ2NAkJY2h1bmtfb2Zmc2V0OworCQlwZ2NhX3NoYXJlZF9hZHZpY2VfY2h1bmsgKmNo dW5rOworCQlwZ2NhX2NvbGxlY3RlZF9hZHZpY2UgKmNhOworCQlEYXR1bQkJdmFsdWVzW1BHX0dF VF9BRFZJQ0VfQ09MVU1OU107CisJCWJvb2wJCW51bGxzW1BHX0dFVF9BRFZJQ0VfQ09MVU1OU10g PSB7MH07CisKKwkJY2h1bmtfbnVtYmVyID0gKGlkIC0gc2EtPmJhc2VfaWQpIC8gQURWSUNFX0NI VU5LX1NJWkU7CisJCWNodW5rX29mZnNldCA9IChpZCAtIHNhLT5iYXNlX2lkKSAlIEFEVklDRV9D SFVOS19TSVpFOworCisJCWNodW5rID0gZHNhX2dldF9hZGRyZXNzKGFyZWEsIGNodW5rX2FycmF5 W2NodW5rX251bWJlcl0pOworCQljYSA9IGRzYV9nZXRfYWRkcmVzcyhhcmVhLCBjaHVuay0+ZW50 cmllc1tjaHVua19vZmZzZXRdKTsKKworCQlpZiAoIW1lbWJlcl9jYW5fc2V0X3JvbGUodXNlcmlk LCBjYS0+dXNlcmlkKSkKKwkJCWNvbnRpbnVlOworCisJCXZhbHVlc1swXSA9IFVJbnQ2NEdldERh dHVtKGlkKTsKKwkJdmFsdWVzWzFdID0gT2JqZWN0SWRHZXREYXR1bShjYS0+dXNlcmlkKTsKKwkJ dmFsdWVzWzJdID0gT2JqZWN0SWRHZXREYXR1bShjYS0+ZGJpZCk7CisJCXZhbHVlc1szXSA9IFVJ bnQ2NEdldERhdHVtKGNhLT5xdWVyeWlkKTsKKwkJdmFsdWVzWzRdID0gVGltZXN0YW1wVHpHZXRE YXR1bShjYS0+dGltZXN0YW1wKTsKKwkJdmFsdWVzWzVdID0gQ1N0cmluZ0dldFRleHREYXR1bShx dWVyeV9zdHJpbmcoY2EpKTsKKwkJdmFsdWVzWzZdID0gQ1N0cmluZ0dldFRleHREYXR1bShhZHZp Y2Vfc3RyaW5nKGNhKSk7CisKKwkJdHVwbGVzdG9yZV9wdXR2YWx1ZXMocnNpbmZvLT5zZXRSZXN1 bHQsIHJzaW5mby0+c2V0RGVzYywKKwkJCQkJCQkgdmFsdWVzLCBudWxscyk7CisJfQorCisJLyog UmVsZWFzZSBsb2NrIG9uIHNoYXJlZCBzdGF0ZS4gKi8KKwlMV0xvY2tSZWxlYXNlKCZzdGF0ZS0+ bG9jayk7CisKKwlyZXR1cm4gKERhdHVtKSAwOworfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19j b2xsZWN0X2FkdmljZS9leHBlY3RlZC9sb2NhbF9jb2xsZWN0b3Iub3V0IGIvY29udHJpYi9wZ19j b2xsZWN0X2FkdmljZS9leHBlY3RlZC9sb2NhbF9jb2xsZWN0b3Iub3V0Cm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5mNTdiOTZlZTgzNQotLS0gL2Rldi9udWxsCisrKyBi L2NvbnRyaWIvcGdfY29sbGVjdF9hZHZpY2UvZXhwZWN0ZWQvbG9jYWxfY29sbGVjdG9yLm91dApA QCAtMCwwICsxLDY5IEBACitDUkVBVEUgRVhURU5TSU9OIHBnX2NvbGxlY3RfYWR2aWNlOworU0VU IGRlYnVnX3BhcmFsbGVsX3F1ZXJ5ID0gb2ZmOworLS0gVHJ5IGNsZWFyaW5nIGFkdmljZSBiZWZv cmUgd2UndmUgY29sbGVjdGVkIGFueS4KK1NFTEVDVCBwZ19jbGVhcl9jb2xsZWN0ZWRfbG9jYWxf YWR2aWNlKCk7CisgcGdfY2xlYXJfY29sbGVjdGVkX2xvY2FsX2FkdmljZSAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIAorKDEgcm93KQorCistLSBTZXQgYSBzbWFsbCBhZHZp Y2UgY29sbGVjdGlvbiBsaW1pdCBzbyB0aGF0IHdlJ2xsIGV4Y2VlZCBpdC4KK1NFVCBwZ19jb2xs ZWN0X2FkdmljZS5sb2NhbF9jb2xsZWN0aW9uX2xpbWl0ID0gMjsKKy0tIEVuYWJsZSB0aGUgY29s bGVjdG9yLgorU0VUIHBnX2NvbGxlY3RfYWR2aWNlLmxvY2FsX2NvbGxlY3RvciA9IG9uOworLS0g U2V0IHVwIGEgZHVtbXkgdGFibGUuCitDUkVBVEUgVEFCTEUgZHVtbXlfdGFibGUgKGEgaW50IHBy aW1hcnkga2V5LCBiIHRleHQpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UsIHBh cmFsbGVsX3dvcmtlcnMgPSAwKTsKKy0tIFRlc3QgcXVlcmllcy4KK1NFTEVDVCAqIEZST00gZHVt bXlfdGFibGUgYSwgZHVtbXlfdGFibGUgYjsKKyBhIHwgYiB8IGEgfCBiIAorLS0tKy0tLSstLS0r LS0tCisoMCByb3dzKQorCitTRUxFQ1QgKiBGUk9NIGR1bW15X3RhYmxlOworIGEgfCBiIAorLS0t Ky0tLQorKDAgcm93cykKKworLS0gU2hvdWxkIHJldHVybiB0aGUgYWR2aWNlIGZyb20gdGhlIHNl Y29uZCB0ZXN0IHF1ZXJ5LgorU0VUIHBnX2NvbGxlY3RfYWR2aWNlLmxvY2FsX2NvbGxlY3RvciA9 IG9mZjsKK1NFTEVDVCBhZHZpY2UgRlJPTSBwZ19nZXRfY29sbGVjdGVkX2xvY2FsX2FkdmljZSgp IE9SREVSIEJZIGlkIERFU0MgTElNSVQgMTsKKyAgICAgICAgIGFkdmljZSAgICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU0VRX1NDQU4oZHVtbXlfdGFibGUpICsKKyBOT19HQVRI RVIoZHVtbXlfdGFibGUpCisoMSByb3cpCisKKy0tIE5vdyB0cnkgY2xlYXJpbmcgYWR2aWNlIGFn YWluLgorU0VMRUNUIHBnX2NsZWFyX2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UoKTsKKyBwZ19jbGVh cl9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgCisoMSByb3cpCisKKy0tIFJhaXNlIHRoZSBjb2xsZWN0aW9uIGxpbWl0IHNvIHRoYXQg dGhlIGNvbGxlY3RvciB1c2VzIG11bHRpcGxlIGNodW5rcy4KK1NFVCBwZ19jb2xsZWN0X2Fkdmlj ZS5sb2NhbF9jb2xsZWN0aW9uX2xpbWl0ID0gMjAwMDsKK1NFVCBwZ19jb2xsZWN0X2FkdmljZS5s b2NhbF9jb2xsZWN0b3IgPSBvbjsKKy0tIFB1c2ggYSBidW5jaCBvZiBxdWVyaWVzIHRocm91Z2gg dGhlIGNvbGxlY3Rvci4KK0RPICQkCitCRUdJTgorCUZPUiB4IElOIDEuLjIwMDAgTE9PUAorCQlF WEVDVVRFICdTRUxFQ1QgKiBGUk9NIGR1bW15X3RhYmxlJzsKKwlFTkQgTE9PUDsKK0VORAorJCQ7 CistLSBDaGVjayB0aGF0IHRoZSBjb2xsZWN0b3Igd29ya2VkLgorU0VMRUNUIENPVU5UKCopIEZS T00gcGdfZ2V0X2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UoKTsKKyBjb3VudCAKKy0tLS0tLS0KKyAg MjAwMAorKDEgcm93KQorCistLSBBbmQgY2xlYXIgb25lIG1vcmUgdGltZSwgdG8gdmVyaWZ5IHRo YXQgdGhpcyBkb2Vzbid0IGNhdXNlIGEgcHJvYmxlbQorLS0gZXZlbiB3aXRoIGEgbGFyZ2VyIG51 bWJlciBvZiBlbnRyaWVzLgorU0VMRUNUIHBnX2NsZWFyX2NvbGxlY3RlZF9sb2NhbF9hZHZpY2Uo KTsKKyBwZ19jbGVhcl9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgCisoMSByb3cpCisKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfY29s bGVjdF9hZHZpY2UvaW50ZXJmYWNlLmMgYi9jb250cmliL3BnX2NvbGxlY3RfYWR2aWNlL2ludGVy ZmFjZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5mZWIxMTk3NDE1 MgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfY29sbGVjdF9hZHZpY2UvaW50ZXJmYWNl LmMKQEAgLTAsMCArMSwzMDMgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGludGVyZmFj ZS5jCisgKgkgIGludGVyZmFjZSByb3V0aW5lcyBmb3IgdGhlIHBsYW4gYWR2aWNlIGNvbGxlY3Rv cgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNi0yMDI2LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZl bG9wbWVudCBHcm91cAorICoKKyAqCSAgY29udHJpYi9wZ19jb2xsZWN0X2FkdmljZS9pbnRlcmZh Y2UuYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaW5jbHVkZSAicG9zdGdyZXMuaCIK KworI2luY2x1ZGUgInBnX2NvbGxlY3RfYWR2aWNlLmgiCisKKyNpbmNsdWRlICJmdW5jYXBpLmgi CisjaW5jbHVkZSAib3B0aW1pemVyL3BsYW5uZXIuaCIKKyNpbmNsdWRlICJzdG9yYWdlL2RzbV9y ZWdpc3RyeS5oIgorI2luY2x1ZGUgInV0aWxzL2d1Yy5oIgorCitQR19NT0RVTEVfTUFHSUM7CisK Ky8qIFNoYXJlZCBtZW1vcnkgcG9pbnRlcnMgKi8KK3N0YXRpYyBwZ2NhX3NoYXJlZF9zdGF0ZSAq cGdjYV9zdGF0ZSA9IE5VTEw7CitzdGF0aWMgZHNhX2FyZWEgKnBnY2FfZHNhX2FyZWEgPSBOVUxM OworCisvKiBHVUMgdmFyaWFibGVzICovCitib29sCQlwZ19jb2xsZWN0X2FkdmljZV9sb2NhbF9j b2xsZWN0b3IgPSBmYWxzZTsKK2ludAkJCXBnX2NvbGxlY3RfYWR2aWNlX2xvY2FsX2NvbGxlY3Rp b25fbGltaXQgPSAwOworYm9vbAkJcGdfY29sbGVjdF9hZHZpY2Vfc2hhcmVkX2NvbGxlY3RvciA9 IGZhbHNlOworaW50CQkJcGdfY29sbGVjdF9hZHZpY2Vfc2hhcmVkX2NvbGxlY3Rpb25fbGltaXQg PSAwOworCisvKiBTaGFkb3cgdmFyaWFibGVzIGZvciBHVUMgYXNzaWduIGhvb2tzICovCitzdGF0 aWMgYm9vbCBwZ19jb2xsZWN0X2FkdmljZV9sb2NhbF9jb2xsZWN0b3JfYXNfYXNzaWduZWQgPSBm YWxzZTsKK3N0YXRpYyBib29sIHBnX2NvbGxlY3RfYWR2aWNlX3NoYXJlZF9jb2xsZWN0b3JfYXNf YXNzaWduZWQgPSBmYWxzZTsKKworLyogT3RoZXIgZmlsZS1sZXZlbCBnbG9iYWxzICovCitzdGF0 aWMgdm9pZCAoKnJlcXVlc3RfYWR2aWNlX2dlbmVyYXRpb25fZm4pIChib29sIGFjdGl2YXRlKSA9 IE5VTEw7CitzdGF0aWMgcGxhbm5lcl9zaHV0ZG93bl9ob29rX3R5cGUgcHJldl9wbGFubmVyX3No dXRkb3duID0gTlVMTDsKK3N0YXRpYyBNZW1vcnlDb250ZXh0IHBnY2FfbWVtb3J5X2NvbnRleHQg PSBOVUxMOworCisvKiBGdW5jdGlvbiBwcm90b3R5cGVzICovCitzdGF0aWMgdm9pZCBwZ2NhX2lu aXRfc2hhcmVkX3N0YXRlKHZvaWQgKnB0ciwgdm9pZCAqYXJnKTsKK3N0YXRpYyB2b2lkIHBnY2Ff cGxhbm5lcl9zaHV0ZG93bihQbGFubmVyR2xvYmFsICpnbG9iLCBRdWVyeSAqcGFyc2UsCisJCQkJ CQkJCSAgY29uc3QgY2hhciAqcXVlcnlfc3RyaW5nLAorCQkJCQkJCQkgIFBsYW5uZWRTdG10ICpw c3RtdCk7CitzdGF0aWMgdm9pZCBwZ19jb2xsZWN0X2FkdmljZV9sb2NhbF9jb2xsZWN0b3JfYXNz aWduX2hvb2soYm9vbCBuZXd2YWwsCisJCQkJCQkJCQkJCQkJCSAgdm9pZCAqZXh0cmEpOworc3Rh dGljIHZvaWQgcGdfY29sbGVjdF9hZHZpY2Vfc2hhcmVkX2NvbGxlY3Rvcl9hc3NpZ25faG9vayhi b29sIG5ld3ZhbCwKKwkJCQkJCQkJCQkJCQkJICAgdm9pZCAqZXh0cmEpOworc3RhdGljIERlZkVs ZW0gKmZpbmRfZGVmZWxlbV9ieV9kZWZuYW1lKExpc3QgKmRlZmxpc3QsIGNoYXIgKmRlZm5hbWUp OworCisvKgorICogSW5pdGlhbGl6ZSB0aGlzIG1vZHVsZS4KKyAqLwordm9pZAorX1BHX2luaXQo dm9pZCkKK3sKKwkvKgorCSAqIEdldCBhIHBvaW50ZXIgc28gd2UgY2FuIGNhbGwgcGdfcGxhbl9h ZHZpY2VfcmVxdWVzdF9hZHZpY2VfZ2VuZXJhdGlvbi4KKwkgKgorCSAqIFdlIG5lZWQgdG8gZG8g dGhpcyBiZWZvcmUgZGVmaW5pbmcgY3VzdG9tIEdVQ3M7IG90aGVyd2lzZSwgb3VyIGFzc2lnbgor CSAqIGhvb2sgd2lsbCB0cnkgdG8gdXNlIHRoaXMgZnVuY3Rpb24gcG9pbnRlciBiZWZvcmUgaXQn cyBpbml0aWFsaXplZC4KKwkgKgorCSAqIFdlIGFsc28gbmVlZCB0byBkbyB0aGlzIGJlZm9yZSBp bnN0YWxsaW5nIG91ciBvd24gaG9va3MsIHNvIHRoYXQgaWYKKwkgKiBwZ19wbGFuX2FkdmljZSBp cyBub3QgeWV0IGxvYWRlZCwgaXQgd2lsbCBpbnN0YWxsIGl0cyBob29rcyBiZWZvcmUgd2UKKwkg KiBpbnN0YWxsIG91cnMuIChTZWUgY29tbWVudHMgaW4gcGdjYV9wbGFubmVyX3NodXRkb3duLikK KwkgKi8KKwlyZXF1ZXN0X2FkdmljZV9nZW5lcmF0aW9uX2ZuID0KKwkJbG9hZF9leHRlcm5hbF9m dW5jdGlvbigicGdfcGxhbl9hZHZpY2UiLAorCQkJCQkJCSAgICJwZ19wbGFuX2FkdmljZV9yZXF1 ZXN0X2FkdmljZV9nZW5lcmF0aW9uIiwKKwkJCQkJCQkgICB0cnVlLCBOVUxMKTsKKworCS8qIERl ZmluZSBvdXIgR1VDcy4gKi8KKwlEZWZpbmVDdXN0b21Cb29sVmFyaWFibGUoInBnX2NvbGxlY3Rf YWR2aWNlLmxvY2FsX2NvbGxlY3RvciIsCisJCQkJCQkJICJFbmFibGUgdGhlIGxvY2FsIGFkdmlj ZSBjb2xsZWN0b3IuIiwKKwkJCQkJCQkgTlVMTCwKKwkJCQkJCQkgJnBnX2NvbGxlY3RfYWR2aWNl X2xvY2FsX2NvbGxlY3RvciwKKwkJCQkJCQkgZmFsc2UsCisJCQkJCQkJIFBHQ19VU0VSU0VULAor CQkJCQkJCSAwLAorCQkJCQkJCSBOVUxMLAorCQkJCQkJCSBwZ19jb2xsZWN0X2FkdmljZV9sb2Nh bF9jb2xsZWN0b3JfYXNzaWduX2hvb2ssCisJCQkJCQkJIE5VTEwpOworCisJRGVmaW5lQ3VzdG9t SW50VmFyaWFibGUoInBnX2NvbGxlY3RfYWR2aWNlLmxvY2FsX2NvbGxlY3Rpb25fbGltaXQiLAor CQkJCQkJCSIjIG9mIGFkdmljZSBlbnRyaWVzIHRvIHJldGFpbiBpbiBwZXItYmFja2VuZCBtZW1v cnkiLAorCQkJCQkJCU5VTEwsCisJCQkJCQkJJnBnX2NvbGxlY3RfYWR2aWNlX2xvY2FsX2NvbGxl Y3Rpb25fbGltaXQsCisJCQkJCQkJMCwKKwkJCQkJCQkwLCBJTlRfTUFYLAorCQkJCQkJCVBHQ19V U0VSU0VULAorCQkJCQkJCTAsCisJCQkJCQkJTlVMTCwKKwkJCQkJCQlOVUxMLAorCQkJCQkJCU5V TEwpOworCisJRGVmaW5lQ3VzdG9tQm9vbFZhcmlhYmxlKCJwZ19jb2xsZWN0X2FkdmljZS5zaGFy ZWRfY29sbGVjdG9yIiwKKwkJCQkJCQkgIkVuYWJsZSB0aGUgc2hhcmVkIGFkdmljZSBjb2xsZWN0 b3IuIiwKKwkJCQkJCQkgTlVMTCwKKwkJCQkJCQkgJnBnX2NvbGxlY3RfYWR2aWNlX3NoYXJlZF9j b2xsZWN0b3IsCisJCQkJCQkJIGZhbHNlLAorCQkJCQkJCSBQR0NfU1VTRVQsCisJCQkJCQkJIDAs CisJCQkJCQkJIE5VTEwsCisJCQkJCQkJIHBnX2NvbGxlY3RfYWR2aWNlX3NoYXJlZF9jb2xsZWN0 b3JfYXNzaWduX2hvb2ssCisJCQkJCQkJIE5VTEwpOworCisJRGVmaW5lQ3VzdG9tSW50VmFyaWFi bGUoInBnX2NvbGxlY3RfYWR2aWNlLnNoYXJlZF9jb2xsZWN0aW9uX2xpbWl0IiwKKwkJCQkJCQki IyBvZiBhZHZpY2UgZW50cmllcyB0byByZXRhaW4gaW4gc2hhcmVkIG1lbW9yeSIsCisJCQkJCQkJ TlVMTCwKKwkJCQkJCQkmcGdfY29sbGVjdF9hZHZpY2Vfc2hhcmVkX2NvbGxlY3Rpb25fbGltaXQs CisJCQkJCQkJMCwKKwkJCQkJCQkwLCBJTlRfTUFYLAorCQkJCQkJCVBHQ19TVVNFVCwKKwkJCQkJ CQkwLAorCQkJCQkJCU5VTEwsCisJCQkJCQkJTlVMTCwKKwkJCQkJCQlOVUxMKTsKKworCU1hcmtH VUNQcmVmaXhSZXNlcnZlZCgicGdfY29sbGVjdF9hZHZpY2UiKTsKKworCS8qIEluc3RhbGwgaG9v a3MgKi8KKwlwcmV2X3BsYW5uZXJfc2h1dGRvd24gPSBwbGFubmVyX3NodXRkb3duX2hvb2s7CisJ cGxhbm5lcl9zaHV0ZG93bl9ob29rID0gcGdjYV9wbGFubmVyX3NodXRkb3duOworfQorCisvKgor ICogSW5pdGlhbGl6ZSBzaGFyZWQgc3RhdGUgd2hlbiBmaXJzdCBjcmVhdGVkLgorICovCitzdGF0 aWMgdm9pZAorcGdjYV9pbml0X3NoYXJlZF9zdGF0ZSh2b2lkICpwdHIsIHZvaWQgKmFyZykKK3sK KwlwZ2NhX3NoYXJlZF9zdGF0ZSAqc3RhdGUgPSAocGdjYV9zaGFyZWRfc3RhdGUgKikgcHRyOwor CisJTFdMb2NrSW5pdGlhbGl6ZSgmc3RhdGUtPmxvY2ssCisJCQkJCSBMV0xvY2tOZXdUcmFuY2hl SWQoInBnX2NvbGxlY3RfYWR2aWNlX2xvY2siKSk7CisJc3RhdGUtPmRzYV90cmFuY2hlID0gTFdM b2NrTmV3VHJhbmNoZUlkKCJwZ19jb2xsZWN0X2FkdmljZV9kc2EiKTsKKwlzdGF0ZS0+YXJlYSA9 IERTQV9IQU5ETEVfSU5WQUxJRDsKKwlzdGF0ZS0+c2hhcmVkX2NvbGxlY3RvciA9IEludmFsaWRE c2FQb2ludGVyOworfQorCisvKgorICogUmV0dXJuIGEgcG9pbnRlciB0byBhIG1lbW9yeSBjb250 ZXh0IHdoZXJlIGxvbmctbGl2ZWQgZGF0YSBtYW5hZ2VkIGJ5IHRoaXMKKyAqIG1vZHVsZSBjYW4g YmUgc3RvcmVkLgorICovCitNZW1vcnlDb250ZXh0CitwZ19jb2xsZWN0X2FkdmljZV9nZXRfbWN4 dCh2b2lkKQoreworCWlmIChwZ2NhX21lbW9yeV9jb250ZXh0ID09IE5VTEwpCisJCXBnY2FfbWVt b3J5X2NvbnRleHQgPSBBbGxvY1NldENvbnRleHRDcmVhdGUoVG9wTWVtb3J5Q29udGV4dCwKKwkJ CQkJCQkJCQkJCQkicGdfY29sbGVjdF9hZHZpY2UiLAorCQkJCQkJCQkJCQkJCUFMTE9DU0VUX0RF RkFVTFRfU0laRVMpOworCisJcmV0dXJuIHBnY2FfbWVtb3J5X2NvbnRleHQ7Cit9CisKKy8qCisg KiBHZXQgYSBwb2ludGVyIHRvIG91ciBzaGFyZWQgc3RhdGUuCisgKgorICogSWYgbm8gc2hhcmVk IHN0YXRlIGV4aXN0cywgY3JlYXRlIGFuZCBpbml0aWFsaXplIGl0LiBJZiBpdCBkb2VzIGV4aXN0 IGJ1dAorICogdGhpcyBiYWNrZW5kIGhhcyBub3QgeWV0IGFjY2Vzc2VkIGl0LCBhdHRhY2ggdG8g aXQuIE90aGVyd2lzZSwganVzdCByZXR1cm4KKyAqIG91ciBjYWNoZWQgcG9pbnRlci4KKyAqLwor cGdjYV9zaGFyZWRfc3RhdGUgKgorcGdfY29sbGVjdF9hZHZpY2VfYXR0YWNoKHZvaWQpCit7CisJ aWYgKHBnY2Ffc3RhdGUgPT0gTlVMTCkKKwl7CisJCWJvb2wJCWZvdW5kOworCisJCXBnY2Ffc3Rh dGUgPQorCQkJR2V0TmFtZWREU01TZWdtZW50KCJwZ19jb2xsZWN0X2FkdmljZSIsIHNpemVvZihw Z2NhX3NoYXJlZF9zdGF0ZSksCisJCQkJCQkJICAgcGdjYV9pbml0X3NoYXJlZF9zdGF0ZSwgJmZv dW5kLCBOVUxMKTsKKwl9CisKKwlyZXR1cm4gcGdjYV9zdGF0ZTsKK30KKworLyoKKyAqIFJldHVy biBhIHBvaW50ZXIgdG8gcGdfY29sbGVjdF9hZHZpY2UncyBEU0EgYXJlYSwgY3JlYXRpbmcgaXQg aWYgbmVlZGVkLgorICovCitkc2FfYXJlYSAqCitwZ19jb2xsZWN0X2FkdmljZV9kc2FfYXJlYSh2 b2lkKQoreworCWlmIChwZ2NhX2RzYV9hcmVhID09IE5VTEwpCisJeworCQlwZ2NhX3NoYXJlZF9z dGF0ZSAqc3RhdGUgPSBwZ19jb2xsZWN0X2FkdmljZV9hdHRhY2goKTsKKwkJZHNhX2hhbmRsZQlh cmVhX2hhbmRsZTsKKwkJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OworCisJCW9sZGNvbnRleHQg PSBNZW1vcnlDb250ZXh0U3dpdGNoVG8ocGdfY29sbGVjdF9hZHZpY2VfZ2V0X21jeHQoKSk7CisK KwkJTFdMb2NrQWNxdWlyZSgmc3RhdGUtPmxvY2ssIExXX0VYQ0xVU0lWRSk7CisJCWFyZWFfaGFu ZGxlID0gc3RhdGUtPmFyZWE7CisJCWlmIChhcmVhX2hhbmRsZSA9PSBEU0FfSEFORExFX0lOVkFM SUQpCisJCXsKKwkJCXBnY2FfZHNhX2FyZWEgPSBkc2FfY3JlYXRlKHN0YXRlLT5kc2FfdHJhbmNo ZSk7CisJCQlkc2FfcGluKHBnY2FfZHNhX2FyZWEpOworCQkJc3RhdGUtPmFyZWEgPSBkc2FfZ2V0 X2hhbmRsZShwZ2NhX2RzYV9hcmVhKTsKKwkJCUxXTG9ja1JlbGVhc2UoJnN0YXRlLT5sb2NrKTsK KwkJfQorCQllbHNlCisJCXsKKwkJCUxXTG9ja1JlbGVhc2UoJnN0YXRlLT5sb2NrKTsKKwkJCXBn Y2FfZHNhX2FyZWEgPSBkc2FfYXR0YWNoKGFyZWFfaGFuZGxlKTsKKwkJfQorCisJCWRzYV9waW5f bWFwcGluZyhwZ2NhX2RzYV9hcmVhKTsKKworCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29u dGV4dCk7CisJfQorCisJcmV0dXJuIHBnY2FfZHNhX2FyZWE7Cit9CisKKy8qCisgKiBBZnRlciBw bGFubmluZyBpcyBjb21wbGV0ZSwgcmV0cmlldmUgdGhlIGFkdmljZSBzdHJpbmcsIGlmIHByZXNl bnQsIGFuZAorICogcGFzcyBpdCB0aHJvdWdoIHRvIHRoZSBjb2xsZWN0b3IuCisgKi8KK3N0YXRp YyB2b2lkCitwZ2NhX3BsYW5uZXJfc2h1dGRvd24oUGxhbm5lckdsb2JhbCAqZ2xvYiwgUXVlcnkg KnBhcnNlLAorCQkJCQkgIGNvbnN0IGNoYXIgKnF1ZXJ5X3N0cmluZywgUGxhbm5lZFN0bXQgKnBz dG10KQoreworCURlZkVsZW0gICAgKnBncGFfaXRlbTsKKwlEZWZFbGVtICAgICphZHZpY2Vfc3Ry aW5nX2l0ZW07CisJY2hhcgkgICAqYWR2aWNlX3N0cmluZzsKKworCS8qCisJICogUGFzcyBjYWxs IHRvIHByZXZpb3VzIGhvb2suCisJICoKKwkgKiBXZSB3YW50IHRvIGJlIGNhbGxlZCBhZnRlciBw Z19wbGFuX2FkdmljZSdzIHNodXRkb3duIGhvb2sgaGFzIGFscmVhZHkKKwkgKiBleGVjdXRlZC4g T3VyIF9QR19pbml0KCkgbWFrZXMgc3VyZSB0aGF0IHBnX3BsYW5fYWR2aWNlJ3MgaG9va3MgYXJl CisJICogYWx3YXlzIGxvYWRlZCBiZWZvcmUgb3VycywgYW5kIGhlcmUgd2UgcGFzcyB0aGUgaG9v ayBjYWxsIGRvd24gZmlyc3QsCisJICogYmVmb3JlIGRvaW5nIG91ciBvd24gd29yay4gVGhlIGNv bWJpbmF0aW9uIG9mIHRob3NlIHR3byB0aGluZ3Mgc2hvdWxkCisJICogYmUgZ29vZCBlbm91Z2gg dG8gZW5zdXJlIHRoYXQgdGhlIGFkdmljZSBzdHJpbmcgaXMgYWxyZWFkeSBwcmVzZW50IHdoZW4K KwkgKiB3ZSBnbyBsb29raW5nIGZvciBpdC4KKwkgKi8KKwlpZiAocHJldl9wbGFubmVyX3NodXRk b3duKQorCQkoKnByZXZfcGxhbm5lcl9zaHV0ZG93bikgKGdsb2IsIHBhcnNlLCBxdWVyeV9zdHJp bmcsIHBzdG10KTsKKworCS8qIEZpc2ggb3V0IHRoZSBhZHZpY2Ugc3RyaW5nLiBJZiBub3QgZm91 bmQsIGRvIG5vdGhpbmcuICovCisJcGdwYV9pdGVtID0gZmluZF9kZWZlbGVtX2J5X2RlZm5hbWUo cHN0bXQtPmV4dGVuc2lvbl9zdGF0ZSwKKwkJCQkJCQkJCQkicGdfcGxhbl9hZHZpY2UiKTsKKwlp ZiAocGdwYV9pdGVtID09IE5VTEwpCisJCXJldHVybjsKKwlhZHZpY2Vfc3RyaW5nX2l0ZW0gPSBm aW5kX2RlZmVsZW1fYnlfZGVmbmFtZSgoTGlzdCAqKSBwZ3BhX2l0ZW0tPmFyZywKKwkJCQkJCQkJ CQkJCSAiYWR2aWNlX3N0cmluZyIpOworCWlmIChhZHZpY2Vfc3RyaW5nX2l0ZW0gPT0gTlVMTCkK KwkJcmV0dXJuOworCWFkdmljZV9zdHJpbmcgPSBzdHJWYWwoYWR2aWNlX3N0cmluZ19pdGVtLT5h cmcpOworCisJLyoKKwkgKiBQYXNzIGl0IHRocm91Z2ggdG8gdGhlIGFjdHVhbCBjb2xsZWN0b3Iu IEJ1dCwgaWYgaXQncyB0aGUgZW1wdHkgc3RyaW5nLAorCSAqIHdlIGFzc3VtZSB0aGF0IGNvbGxl Y3RpbmcgaXQgaXMgdW5pbnRlcmVzdGluZy4KKwkgKi8KKwlpZiAoYWR2aWNlX3N0cmluZ1swXSAh PSAnXDAnKQorCQlwZ19jb2xsZWN0X2FkdmljZV9zYXZlKHBzdG10LT5xdWVyeUlkLCBxdWVyeV9z dHJpbmcsIGFkdmljZV9zdHJpbmcpOworfQorCisvKgorICogcGdjYV9wbGFubmVyX3NodXRkb3du IHdvbid0IGZpbmQgYW55IGFkdmljZSB0byBjb2xsZWN0IHVubGVzcyB3ZSd2ZQorICogcmVxdWVz dGVkIHRoYXQgaXQgYmUgZ2VuZXJhdGVkLiBTbywgd2hlbmV2ZXIgdGhlIGVmZmVjdGl2ZSB2YWx1 ZSBvZgorICogcGdfY29sbGVjdF9hZHZpY2UubG9jYWxfY29sbGVjdG9yIGNoYW5nZXMsIGVpdGhl ciBtYWtlIG9yCisgKiByZXZva2UgYSByZXF1ZXN0IGZvciBhZHZpY2UgZ2VuZXJhdGlvbi4KKyAq Lworc3RhdGljIHZvaWQKK3BnX2NvbGxlY3RfYWR2aWNlX2xvY2FsX2NvbGxlY3Rvcl9hc3NpZ25f aG9vayhib29sIG5ld3ZhbCwgdm9pZCAqZXh0cmEpCit7CisJaWYgKHBnX2NvbGxlY3RfYWR2aWNl X2xvY2FsX2NvbGxlY3Rvcl9hc19hc3NpZ25lZCAmJiAhbmV3dmFsKQorCQkoKnJlcXVlc3RfYWR2 aWNlX2dlbmVyYXRpb25fZm4pIChmYWxzZSk7CisJaWYgKCFwZ19jb2xsZWN0X2FkdmljZV9sb2Nh bF9jb2xsZWN0b3JfYXNfYXNzaWduZWQgJiYgbmV3dmFsKQorCQkoKnJlcXVlc3RfYWR2aWNlX2dl bmVyYXRpb25fZm4pICh0cnVlKTsKKwlwZ19jb2xsZWN0X2FkdmljZV9sb2NhbF9jb2xsZWN0b3Jf YXNfYXNzaWduZWQgPSBuZXd2YWw7Cit9CisKKy8qCisgKiBTYW1lIGFzIGFib3ZlLCBidXQgZm9y IHBnX2NvbGxlY3RfYWR2aWNlLnNoYXJlZF9jb2xsZWN0b3IKKyAqLworc3RhdGljIHZvaWQKK3Bn X2NvbGxlY3RfYWR2aWNlX3NoYXJlZF9jb2xsZWN0b3JfYXNzaWduX2hvb2soYm9vbCBuZXd2YWws IHZvaWQgKmV4dHJhKQoreworCWlmIChwZ19jb2xsZWN0X2FkdmljZV9zaGFyZWRfY29sbGVjdG9y X2FzX2Fzc2lnbmVkICYmICFuZXd2YWwpCisJCSgqcmVxdWVzdF9hZHZpY2VfZ2VuZXJhdGlvbl9m bikgKGZhbHNlKTsKKwlpZiAoIXBnX2NvbGxlY3RfYWR2aWNlX3NoYXJlZF9jb2xsZWN0b3JfYXNf YXNzaWduZWQgJiYgbmV3dmFsKQorCQkoKnJlcXVlc3RfYWR2aWNlX2dlbmVyYXRpb25fZm4pICh0 cnVlKTsKKwlwZ19jb2xsZWN0X2FkdmljZV9zaGFyZWRfY29sbGVjdG9yX2FzX2Fzc2lnbmVkID0g bmV3dmFsOworfQorCisvKgorICogU2VhcmNoIGEgbGlzdCBvZiBEZWZFbGVtIG9iamVjdHMgZm9y IGEgZ2l2ZW4gZGVmbmFtZS4KKyAqLworc3RhdGljIERlZkVsZW0gKgorZmluZF9kZWZlbGVtX2J5 X2RlZm5hbWUoTGlzdCAqZGVmbGlzdCwgY2hhciAqZGVmbmFtZSkKK3sKKwlmb3JlYWNoX25vZGUo RGVmRWxlbSwgaXRlbSwgZGVmbGlzdCkKKwl7CisJCWlmIChzdHJjbXAoaXRlbS0+ZGVmbmFtZSwg ZGVmbmFtZSkgPT0gMCkKKwkJCXJldHVybiBpdGVtOworCX0KKworCXJldHVybiBOVUxMOworfQpk aWZmIC0tZ2l0IGEvY29udHJpYi9wZ19jb2xsZWN0X2FkdmljZS9tZXNvbi5idWlsZCBiL2NvbnRy aWIvcGdfY29sbGVjdF9hZHZpY2UvbWVzb24uYnVpbGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMDAuLmNhN2Q1ZWNmZjFhCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9w Z19jb2xsZWN0X2FkdmljZS9tZXNvbi5idWlsZApAQCAtMCwwICsxLDQxIEBACisjIENvcHlyaWdo dCAoYykgMjAyMi0yMDI2LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorCitw Z19jb2xsZWN0X2FkdmljZV9zb3VyY2VzID0gZmlsZXMoCisgICdjb2xsZWN0b3IuYycsCisgICdp bnRlcmZhY2UuYycsCispCisKK2lmIGhvc3Rfc3lzdGVtID09ICd3aW5kb3dzJworICBwZ19jb2xs ZWN0X2FkdmljZV9zb3VyY2VzICs9IHJjX2xpYl9nZW4ucHJvY2Vzcyh3aW4zMnZlcl9yYywgZXh0 cmFfYXJnczogWworICAgICctLU5BTUUnLCAncGdfY29sbGVjdF9hZHZpY2UnLAorICAgICctLUZJ TEVERVNDJywgJ3BnX2NvbGxlY3RfYWR2aWNlIC0gY29sbGVjdCBxdWVyaWVzIGFuZCB0aGVpciBw bGFuIGFkdmljZSBzdHJpbmdzJyxdKQorZW5kaWYKKworcGdfY29sbGVjdF9hZHZpY2UgPSBzaGFy ZWRfbW9kdWxlKCdwZ19jb2xsZWN0X2FkdmljZScsCisgIHBnX2NvbGxlY3RfYWR2aWNlX3NvdXJj ZXMsCisgIGluY2x1ZGVfZGlyZWN0b3JpZXM6IGluY2x1ZGVfZGlyZWN0b3JpZXMoJy4nKSwKKyAg a3dhcmdzOiBjb250cmliX21vZF9hcmdzLAorKQorY29udHJpYl90YXJnZXRzICs9IHBnX2NvbGxl Y3RfYWR2aWNlCisKK2luc3RhbGxfZGF0YSgKKyAgJ3BnX2NvbGxlY3RfYWR2aWNlLS0xLjAuc3Fs JywKKyAgJ3BnX2NvbGxlY3RfYWR2aWNlLmNvbnRyb2wnLAorICBrd2FyZ3M6IGNvbnRyaWJfZGF0 YV9hcmdzLAorKQorCit0ZXN0cyArPSB7CisgICduYW1lJzogJ3BnX2NvbGxlY3RfYWR2aWNlJywK KyAgJ3NkJzogbWVzb24uY3VycmVudF9zb3VyY2VfZGlyKCksCisgICdiZCc6IG1lc29uLmN1cnJl bnRfYnVpbGRfZGlyKCksCisgICdyZWdyZXNzJzogeworICAgICdzcWwnOiBbCisgICAgICAnbG9j YWxfY29sbGVjdG9yJywKKyAgICBdLAorICB9LAorICAndGFwJzogeworICAgICd0ZXN0cyc6IFsK KyAgICAgICd0LzAwMV9yZWdyZXNzLnBsJywKKyAgICBdLAorICB9LAorfQpkaWZmIC0tZ2l0IGEv Y29udHJpYi9wZ19jb2xsZWN0X2FkdmljZS9wZ19jb2xsZWN0X2FkdmljZS0tMS4wLnNxbCBiL2Nv bnRyaWIvcGdfY29sbGVjdF9hZHZpY2UvcGdfY29sbGVjdF9hZHZpY2UtLTEuMC5zcWwKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjBiZTg2YzU0ZmMxCi0tLSAvZGV2L251 bGwKKysrIGIvY29udHJpYi9wZ19jb2xsZWN0X2FkdmljZS9wZ19jb2xsZWN0X2FkdmljZS0tMS4w LnNxbApAQCAtMCwwICsxLDQzIEBACisvKiBjb250cmliL3BnX2NvbGxlY3RfYWR2aWNlL3BnX2Nv bGxlY3RfYWR2aWNlLS0xLjAuc3FsICovCisKKy0tIGNvbXBsYWluIGlmIHNjcmlwdCBpcyBzb3Vy Y2VkIGluIHBzcWwsIHJhdGhlciB0aGFuIHZpYSBDUkVBVEUgRVhURU5TSU9OCitcZWNobyBVc2Ug IkNSRUFURSBFWFRFTlNJT04gcGdfY29sbGVjdF9hZHZpY2UiIHRvIGxvYWQgdGhpcyBmaWxlLiBc cXVpdAorCitDUkVBVEUgRlVOQ1RJT04gcGdfY2xlYXJfY29sbGVjdGVkX2xvY2FsX2FkdmljZSgp CitSRVRVUk5TIHZvaWQKK0FTICdNT0RVTEVfUEFUSE5BTUUnLCAncGdfY2xlYXJfY29sbGVjdGVk X2xvY2FsX2FkdmljZScKK0xBTkdVQUdFIEMgU1RSSUNUOworCitDUkVBVEUgRlVOQ1RJT04gcGdf Y2xlYXJfY29sbGVjdGVkX3NoYXJlZF9hZHZpY2UoKQorUkVUVVJOUyB2b2lkCitBUyAnTU9EVUxF X1BBVEhOQU1FJywgJ3BnX2NsZWFyX2NvbGxlY3RlZF9zaGFyZWRfYWR2aWNlJworTEFOR1VBR0Ug QyBTVFJJQ1Q7CisKK0NSRUFURSBGVU5DVElPTiBwZ19nZXRfY29sbGVjdGVkX2xvY2FsX2Fkdmlj ZSgKKwlPVVQgaWQgYmlnaW50LAorCU9VVCB1c2VyaWQgb2lkLAorCU9VVCBkYmlkIG9pZCwKKwlP VVQgcXVlcnlpZCBiaWdpbnQsCisJT1VUIGNvbGxlY3Rpb25fdGltZSB0aW1lc3RhbXB0eiwKKwlP VVQgcXVlcnkgdGV4dCwKKwlPVVQgYWR2aWNlIHRleHQKKykKK1JFVFVSTlMgU0VUT0YgcmVjb3Jk CitBUyAnTU9EVUxFX1BBVEhOQU1FJywgJ3BnX2dldF9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlJwor TEFOR1VBR0UgQyBTVFJJQ1Q7CisKK0NSRUFURSBGVU5DVElPTiBwZ19nZXRfY29sbGVjdGVkX3No YXJlZF9hZHZpY2UoCisJT1VUIGlkIGJpZ2ludCwKKwlPVVQgdXNlcmlkIG9pZCwKKwlPVVQgZGJp ZCBvaWQsCisJT1VUIHF1ZXJ5aWQgYmlnaW50LAorCU9VVCBjb2xsZWN0aW9uX3RpbWUgdGltZXN0 YW1wdHosCisJT1VUIHF1ZXJ5IHRleHQsCisJT1VUIGFkdmljZSB0ZXh0CispCitSRVRVUk5TIFNF VE9GIHJlY29yZAorQVMgJ01PRFVMRV9QQVRITkFNRScsICdwZ19nZXRfY29sbGVjdGVkX3NoYXJl ZF9hZHZpY2UnCitMQU5HVUFHRSBDIFNUUklDVDsKKworUkVWT0tFIEFMTCBPTiBGVU5DVElPTiBw Z19jbGVhcl9jb2xsZWN0ZWRfc2hhcmVkX2FkdmljZSgpIEZST00gUFVCTElDOworUkVWT0tFIEFM TCBPTiBGVU5DVElPTiBwZ19nZXRfY29sbGVjdGVkX3NoYXJlZF9hZHZpY2UoKSBGUk9NIFBVQkxJ QzsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfY29sbGVjdF9hZHZpY2UvcGdfY29sbGVjdF9hZHZp Y2UuY29udHJvbCBiL2NvbnRyaWIvcGdfY29sbGVjdF9hZHZpY2UvcGdfY29sbGVjdF9hZHZpY2Uu Y29udHJvbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNjAxZTVlMjRl YTEKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX2NvbGxlY3RfYWR2aWNlL3BnX2NvbGxl Y3RfYWR2aWNlLmNvbnRyb2wKQEAgLTAsMCArMSw1IEBACisjIHBnX2NvbGxlY3RfYWR2aWNlIGV4 dGVuc2lvbgorY29tbWVudCA9ICdjb2xsZWN0IHF1ZXJpZXMgYW5kIHRoZSBhc3NvY2lhdGVkIHBs YW4gYWR2aWNlJworZGVmYXVsdF92ZXJzaW9uID0gJzEuMCcKK21vZHVsZV9wYXRobmFtZSA9ICck bGliZGlyL3BnX2NvbGxlY3RfYWR2aWNlJworcmVsb2NhdGFibGUgPSB0cnVlCmRpZmYgLS1naXQg YS9jb250cmliL3BnX2NvbGxlY3RfYWR2aWNlL3BnX2NvbGxlY3RfYWR2aWNlLmggYi9jb250cmli L3BnX2NvbGxlY3RfYWR2aWNlL3BnX2NvbGxlY3RfYWR2aWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAuLjQ4MGMyYzYzM2M0Ci0tLSAvZGV2L251bGwKKysrIGIvY29u dHJpYi9wZ19jb2xsZWN0X2FkdmljZS9wZ19jb2xsZWN0X2FkdmljZS5oCkBAIC0wLDAgKzEsMzkg QEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHBnX2NvbGxlY3RfYWR2aWNlLmgKKyAqCSAg ZGVmaW5pdGlvbnMgYW5kIGRlY2xhcmF0aW9ucyBmb3IgcGdfY29sbGVjdF9hZHZpY2UgbW9kdWxl CisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjYsIFBvc3RncmVTUUwgR2xvYmFsIERldmVs b3BtZW50IEdyb3VwCisgKgorICoJICBjb250cmliL3BnX2NvbGxlY3RfYWR2aWNlL3BnX2NvbGxl Y3RfYWR2aWNlLmgKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lmbmRlZiBQR19DT0xM RUNUX0FEVklDRV9ICisjZGVmaW5lIFBHX0NPTExFQ1RfQURWSUNFX0gKKworI2luY2x1ZGUgInN0 b3JhZ2UvbHdsb2NrLmgiCisjaW5jbHVkZSAidXRpbHMvZHNhLmgiCisKK3R5cGVkZWYgc3RydWN0 IHBnY2Ffc2hhcmVkX3N0YXRlCit7CisJTFdMb2NrCQlsb2NrOworCWludAkJCWRzYV90cmFuY2hl OworCWRzYV9oYW5kbGUJYXJlYTsKKwlkc2FfcG9pbnRlciBzaGFyZWRfY29sbGVjdG9yOworfSBw Z2NhX3NoYXJlZF9zdGF0ZTsKKworLyogR1VDIHZhcmlhYmxlcyAqLworZXh0ZXJuIGJvb2wgcGdf Y29sbGVjdF9hZHZpY2VfbG9jYWxfY29sbGVjdG9yOworZXh0ZXJuIGludAlwZ19jb2xsZWN0X2Fk dmljZV9sb2NhbF9jb2xsZWN0aW9uX2xpbWl0OworZXh0ZXJuIGJvb2wgcGdfY29sbGVjdF9hZHZp Y2Vfc2hhcmVkX2NvbGxlY3RvcjsKK2V4dGVybiBpbnQJcGdfY29sbGVjdF9hZHZpY2Vfc2hhcmVk X2NvbGxlY3Rpb25fbGltaXQ7CisKKy8qIEZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KK2V4dGVybiBN ZW1vcnlDb250ZXh0IHBnX2NvbGxlY3RfYWR2aWNlX2dldF9tY3h0KHZvaWQpOworZXh0ZXJuIHBn Y2Ffc2hhcmVkX3N0YXRlICpwZ19jb2xsZWN0X2FkdmljZV9hdHRhY2godm9pZCk7CitleHRlcm4g ZHNhX2FyZWEgKnBnX2NvbGxlY3RfYWR2aWNlX2RzYV9hcmVhKHZvaWQpOworZXh0ZXJuIHZvaWQg cGdfY29sbGVjdF9hZHZpY2Vfc2F2ZSh1aW50NjQgcXVlcnlJZCwgY29uc3QgY2hhciAqcXVlcnlf c3RyaW5nLAorCQkJCQkJCQkgICBjb25zdCBjaGFyICphZHZpY2Vfc3RyaW5nKTsKKworI2VuZGlm CmRpZmYgLS1naXQgYS9jb250cmliL3BnX2NvbGxlY3RfYWR2aWNlL3NxbC9sb2NhbF9jb2xsZWN0 b3Iuc3FsIGIvY29udHJpYi9wZ19jb2xsZWN0X2FkdmljZS9zcWwvbG9jYWxfY29sbGVjdG9yLnNx bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNDFiMTg3YzUzNzUKLS0t IC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX2NvbGxlY3RfYWR2aWNlL3NxbC9sb2NhbF9jb2xs ZWN0b3Iuc3FsCkBAIC0wLDAgKzEsNDYgQEAKK0NSRUFURSBFWFRFTlNJT04gcGdfY29sbGVjdF9h ZHZpY2U7CitTRVQgZGVidWdfcGFyYWxsZWxfcXVlcnkgPSBvZmY7CisKKy0tIFRyeSBjbGVhcmlu ZyBhZHZpY2UgYmVmb3JlIHdlJ3ZlIGNvbGxlY3RlZCBhbnkuCitTRUxFQ1QgcGdfY2xlYXJfY29s bGVjdGVkX2xvY2FsX2FkdmljZSgpOworCistLSBTZXQgYSBzbWFsbCBhZHZpY2UgY29sbGVjdGlv biBsaW1pdCBzbyB0aGF0IHdlJ2xsIGV4Y2VlZCBpdC4KK1NFVCBwZ19jb2xsZWN0X2FkdmljZS5s b2NhbF9jb2xsZWN0aW9uX2xpbWl0ID0gMjsKKworLS0gRW5hYmxlIHRoZSBjb2xsZWN0b3IuCitT RVQgcGdfY29sbGVjdF9hZHZpY2UubG9jYWxfY29sbGVjdG9yID0gb247CisKKy0tIFNldCB1cCBh IGR1bW15IHRhYmxlLgorQ1JFQVRFIFRBQkxFIGR1bW15X3RhYmxlIChhIGludCBwcmltYXJ5IGtl eSwgYiB0ZXh0KQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlLCBwYXJhbGxlbF93 b3JrZXJzID0gMCk7CisKKy0tIFRlc3QgcXVlcmllcy4KK1NFTEVDVCAqIEZST00gZHVtbXlfdGFi bGUgYSwgZHVtbXlfdGFibGUgYjsKK1NFTEVDVCAqIEZST00gZHVtbXlfdGFibGU7CisKKy0tIFNo b3VsZCByZXR1cm4gdGhlIGFkdmljZSBmcm9tIHRoZSBzZWNvbmQgdGVzdCBxdWVyeS4KK1NFVCBw Z19jb2xsZWN0X2FkdmljZS5sb2NhbF9jb2xsZWN0b3IgPSBvZmY7CitTRUxFQ1QgYWR2aWNlIEZS T00gcGdfZ2V0X2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UoKSBPUkRFUiBCWSBpZCBERVNDIExJTUlU IDE7CisKKy0tIE5vdyB0cnkgY2xlYXJpbmcgYWR2aWNlIGFnYWluLgorU0VMRUNUIHBnX2NsZWFy X2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UoKTsKKworLS0gUmFpc2UgdGhlIGNvbGxlY3Rpb24gbGlt aXQgc28gdGhhdCB0aGUgY29sbGVjdG9yIHVzZXMgbXVsdGlwbGUgY2h1bmtzLgorU0VUIHBnX2Nv bGxlY3RfYWR2aWNlLmxvY2FsX2NvbGxlY3Rpb25fbGltaXQgPSAyMDAwOworU0VUIHBnX2NvbGxl Y3RfYWR2aWNlLmxvY2FsX2NvbGxlY3RvciA9IG9uOworCistLSBQdXNoIGEgYnVuY2ggb2YgcXVl cmllcyB0aHJvdWdoIHRoZSBjb2xsZWN0b3IuCitETyAkJAorQkVHSU4KKwlGT1IgeCBJTiAxLi4y MDAwIExPT1AKKwkJRVhFQ1VURSAnU0VMRUNUICogRlJPTSBkdW1teV90YWJsZSc7CisJRU5EIExP T1A7CitFTkQKKyQkOworCistLSBDaGVjayB0aGF0IHRoZSBjb2xsZWN0b3Igd29ya2VkLgorU0VM RUNUIENPVU5UKCopIEZST00gcGdfZ2V0X2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UoKTsKKworLS0g QW5kIGNsZWFyIG9uZSBtb3JlIHRpbWUsIHRvIHZlcmlmeSB0aGF0IHRoaXMgZG9lc24ndCBjYXVz ZSBhIHByb2JsZW0KKy0tIGV2ZW4gd2l0aCBhIGxhcmdlciBudW1iZXIgb2YgZW50cmllcy4KK1NF TEVDVCBwZ19jbGVhcl9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlKCk7CmRpZmYgLS1naXQgYS9jb250 cmliL3BnX2NvbGxlY3RfYWR2aWNlL3QvMDAxX3JlZ3Jlc3MucGwgYi9jb250cmliL3BnX2NvbGxl Y3RfYWR2aWNlL3QvMDAxX3JlZ3Jlc3MucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMDAuLmVkOTM0ZDBjODU5Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19jb2xs ZWN0X2FkdmljZS90LzAwMV9yZWdyZXNzLnBsCkBAIC0wLDAgKzEsMTUxIEBACisjIENvcHlyaWdo dCAoYykgMjAyMS0yMDI2LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorCisj IFJ1biB0aGUgY29yZSByZWdyZXNzaW9uIHRlc3RzIHVuZGVyIHBnX2NvbGxlY3RfYWR2aWNlIGFu ZCBwZ19wbGFuX2FkdmljZQorIyB0byBjaGVjayBmb3IgcHJvYmxlbXMuCit1c2Ugc3RyaWN0Owor dXNlIHdhcm5pbmdzIEZBVEFMID0+ICdhbGwnOworCit1c2UgQ3dkICAgICAgICAgICAgcXcoYWJz X3BhdGgpOwordXNlIEZpbGU6OkJhc2VuYW1lIHF3KGRpcm5hbWUpOworCit1c2UgUG9zdGdyZVNR TDo6VGVzdDo6Q2x1c3RlcjsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczsKK3VzZSBUZXN0 OjpNb3JlOworCisjIEluaXRpYWxpemUgdGhlIHByaW1hcnkgbm9kZQorbXkgJG5vZGUgPSBQb3N0 Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ21haW4nKTsKKyRub2RlLT5pbml0KCk7CisKKyMg U2V0IHVwIG91ciBkZXNpcmVkIGNvbmZpZ3VyYXRpb24uCisjCisjIFdlIHJ1biB3aXRoIHBnX2Nv bGxlY3RfYWR2aWNlLnNoYXJlZF9jb2xsZWN0aW9uX2xpbWl0IHNldCB0byBlbnN1cmUgdGhhdCB0 aGUKKyMgcGxhbiB0cmVlIHdhbGtlciBjb2RlIHJ1bnMgYWdhaW5zdCBldmVyeSBxdWVyeSBpbiB0 aGUgcmVncmVzc2lvbiB0ZXN0cy4gSWYKKyMgd2UncmUgdW5hYmxlIHRvIHByb3Blcmx5IGFuYWx5 emUgYW55IG9mIHRob3NlIHBsYW4gdHJlZXMsIHRoaXMgdGVzdCBzaG91bGQKKyMgaG9wZWZ1bGx5 IGZhaWwuCisjCisjIFdlIHNldCBwZ19jb2xsZWN0X2FkdmljZS5hZHZpY2UgdG8gYW4gYWR2aWNl IHN0cmluZyB0aGF0IHdpbGwgY2F1c2UgdGhlIGFkdmljZQorIyB0cm92ZSB0byBiZSBwb3B1bGF0 ZWQgd2l0aCBhIGZldyBlbnRyaWVzIG9mIHZhcmlvdXMgc29ydHMsIGJ1dCB3aGljaCB3ZSBkbwor IyBub3QgZXhwZWN0IHRvIG1hdGNoIGFueXRoaW5nIGluIHRoZSByZWdyZXNzaW9uIHRlc3QgcXVl cmllcy4gVGhpcyB3YXksIHRoZQorIyBwbGFubmVyIGhvb2tzIHdpbGwgYmUgY2FsbGVkLCBpbXBy b3ZpbmcgY29kZSBjb3ZlcmFnZSwgYnV0IG5vIHBsYW5zIHNob3VsZAorIyBhY3R1YWxseSBjaGFu Z2UuCisjCisjIHBnX3BsYW5fYWR2aWNlLmFsd2F5c19leHBsYWluX3N1cHBsaWVkX2FkdmljZT1m YWxzZSBpcyBuZWVkZWQgdG8gYXZvaWQKKyMgYnJlYWtpbmcgcmVncmVzc2lvbiB0ZXN0IHF1ZXJp ZXMgdGhhdCB1c2UgRVhQTEFJTi4gSW4gdGhlIHJlYWwgd29ybGQsIGl0CisjIHNlZW1zIGxpa2Ug dXNlcnMgd2lsbCB3YW50IEVYUExBSU4gb3V0cHV0IHRvIHNob3cgc3VwcGxpZWQgYWR2aWNlIHNv IHRoYXQKKyMgaXQncyBjbGVhciB3aGV0aGVyIG5vcm1hbCBwbGFubmVyIGJlaGF2aW9yIGhhcyBi ZWVuIGFsdGVyZWQsIGJ1dCBoZXJlIHRoYXQncworIyB1bmRlc2lyYWJsZS4KKyRub2RlLT5hcHBl bmRfY29uZigncG9zdGdyZXNxbC5jb25mJywgPDxFT00pOworc2hhcmVkX3ByZWxvYWRfbGlicmFy aWVzPXBnX2NvbGxlY3RfYWR2aWNlCitwZ19jb2xsZWN0X2FkdmljZS5zaGFyZWRfY29sbGVjdGlv bl9saW1pdD0xMDAwMDAwCitwZ19jb2xsZWN0X2FkdmljZS5zaGFyZWRfY29sbGVjdG9yPXRydWUK K3BnX3BsYW5fYWR2aWNlLmFkdmljZT0nU0VRX1NDQU4oZW50aXJlbHlfZmljdGl0aW91cykgSEFT SF9KT0lOKHRvdGFsX2ZhYnJpY2F0aW9uKSBHQVRIRVIoY29tcGxldGVseV9pbWFnaW5hcnkpJwor cGdfcGxhbl9hZHZpY2UuYWx3YXlzX2V4cGxhaW5fc3VwcGxpZWRfYWR2aWNlPWZhbHNlCitFT00K KyRub2RlLT5zdGFydDsKKworbXkgJHNyY2RpciA9IGFic19wYXRoKCIuLi8uLiIpOworCisjIC0t ZGxwYXRoIGlzIG5lZWRlZCB0byBiZSBhYmxlIHRvIGZpbmQgdGhlIGxvY2F0aW9uIG9mIHJlZ3Jl c3Muc28KKyMgYW5kIGFueSBsaWJyYXJpZXMgdGhlIHJlZ3Jlc3Npb24gdGVzdHMgcmVxdWlyZS4K K215ICRkbHBhdGggPSBkaXJuYW1lKCRFTlZ7UkVHUkVTU19TSExJQn0pOworCisjIC0tb3V0cHV0 ZGlyIHBvaW50cyB0byB0aGUgcGF0aCB3aGVyZSB0byBwbGFjZSB0aGUgb3V0cHV0IGZpbGVzLgor bXkgJG91dHB1dGRpciA9ICRQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczo6dG1wX2NoZWNrOworCisj IC0taW5wdXRkaXIgcG9pbnRzIHRvIHRoZSBwYXRoIG9mIHRoZSBpbnB1dCBmaWxlcy4KK215ICRp bnB1dGRpciA9ICIkc3JjZGlyL3NyYy90ZXN0L3JlZ3Jlc3MiOworCisjIFJ1biB0aGUgdGVzdHMu CitteSAkcmMgPQorICBzeXN0ZW0oJEVOVntQR19SRUdSRVNTfSAuICIgIgorCSAgLiAiLS1iaW5k aXI9ICIKKwkgIC4gIi0tZGxwYXRoPVwiJGRscGF0aFwiICIKKwkgIC4gIi0taG9zdD0iIC4gJG5v ZGUtPmhvc3QgLiAiICIKKwkgIC4gIi0tcG9ydD0iIC4gJG5vZGUtPnBvcnQgLiAiICIKKwkgIC4g Ii0tc2NoZWR1bGU9JHNyY2Rpci9zcmMvdGVzdC9yZWdyZXNzL3BhcmFsbGVsX3NjaGVkdWxlICIK KwkgIC4gIi0tbWF4LWNvbmN1cnJlbnQtdGVzdHM9MjAgIgorCSAgLiAiLS1pbnB1dGRpcj1cIiRp bnB1dGRpclwiICIKKwkgIC4gIi0tb3V0cHV0ZGlyPVwiJG91dHB1dGRpclwiIik7CisKKyMgRHVt cCBvdXQgdGhlIHJlZ3Jlc3Npb24gZGlmZnMgZmlsZSwgaWYgdGhlcmUgaXMgb25lCitpZiAoJHJj ICE9IDApCit7CisJbXkgJGRpZmZzID0gIiRvdXRwdXRkaXIvcmVncmVzc2lvbi5kaWZmcyI7CisJ aWYgKC1lICRkaWZmcykKKwl7CisJCXByaW50ICI9PT0gZHVtcGluZyAkZGlmZnMgPT09XG4iOwor CQlwcmludCBzbHVycF9maWxlKCRkaWZmcyk7CisJCXByaW50ICI9PT0gRU9GID09PVxuIjsKKwl9 Cit9CisKKyMgUmVwb3J0IHJlc3VsdHMKK2lzKCRyYywgMCwgJ3JlZ3Jlc3Npb24gdGVzdHMgcGFz cycpOworCisjIENyZWF0ZSB0aGUgZXh0ZW5zaW9uIHNvIHdlIGNhbiBhY2Nlc3MgdGhlIGNvbGxl Y3RvcgorJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAnQ1JFQVRFIEVYVEVOU0lPTiBwZ19j b2xsZWN0X2FkdmljZScpOworCisjIFZlcmlmeSB0aGF0IGEgbGFyZ2UgYW1vdW50IG9mIGFkdmlj ZSB3YXMgY29sbGVjdGVkCitteSAkYWxsX3F1ZXJ5X2NvdW50ID0gJG5vZGUtPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCA8PEVPTSk7CitTRUxFQ1QgQ09VTlQoKikgRlJPTSBwZ19nZXRfY29sbGVjdGVk X3NoYXJlZF9hZHZpY2UoKTsKK0VPTQorY21wX29rKCRhbGxfcXVlcnlfY291bnQsICc+JywgMjAw MDAsICJjb3Bpb3VzIGFkdmljZSBjb2xsZWN0ZWQiKTsKKworIyBWZXJpZnkgdGhhdCBsb3RzIG9m IGRpZmZlcmVudCBhZHZpY2Ugc3RyaW5ncyB3ZXJlIGNvbGxlY3RlZAorbXkgJGRpc3RpbmN0X3F1 ZXJ5X2NvdW50ID0gJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCA8PEVPTSk7CitTRUxFQ1Qg Q09VTlQoKikgRlJPTQorCShTRUxFQ1QgRElTVElOQ1QgYWR2aWNlIEZST00gcGdfZ2V0X2NvbGxl Y3RlZF9zaGFyZWRfYWR2aWNlKCkpOworRU9NCitjbXBfb2soJGRpc3RpbmN0X3F1ZXJ5X2NvdW50 LCAnPicsIDMwMDAsICJkaXZlcnNlIGFkdmljZSBjb2xsZWN0ZWQiKTsKKworIyBXZSB3YW50IHRv IHRlc3QgZm9yIHRoZSBwcmVzZW5jZSBvZiBvdXIga25vd24gdGFncyBpbiB0aGUgY29sbGVjdGVk IGFkdmljZS4KKyMgUHV0IGFsbCB0YWdzIGludG8gdGhlIGhhc2ggdGhhdCBmb2xsb3dzOyBtYXAg YW55IHRhZ3MgdGhhdCBhcmVuJ3QgdGVzdGVkCisjIGJ5IHRoZSBjb3JlIHJlZ3Jlc3Npb24gdGVz dHMgdG8gMCwgYW5kIG90aGVycyB0byAxLgorbXkgJXRhZ19tYXAgPSAoCisJQklUTUFQX0hFQVBf U0NBTiA9PiAxLAorCUZPUkVJR05fSk9JTiA9PiAwLAorCUdBVEhFUiA9PiAxLAorCUdBVEhFUl9N RVJHRSA9PiAxLAorCUhBU0hfSk9JTiA9PiAxLAorCUlOREVYX09OTFlfU0NBTiA9PiAxLAorCUlO REVYX1NDQU4gPT4gMSwKKwlKT0lOX09SREVSID0+IDEsCisJTUVSR0VfSk9JTl9NQVRFUklBTEla RSA9PiAxLAorCU1FUkdFX0pPSU5fUExBSU4gPT4gMSwKKwlORVNURURfTE9PUF9NQVRFUklBTEla RSA9PiAxLAorCU5FU1RFRF9MT09QX01FTU9JWkUgPT4gMSwKKwlORVNURURfTE9PUF9QTEFJTiA9 PiAxLAorCU5PX0dBVEhFUiA9PiAxLAorCVBBUlRJVElPTldJU0UgPT4gMSwKKwlTRU1JSk9JTl9O T05fVU5JUVVFID0+IDEsCisJU0VNSUpPSU5fVU5JUVVFID0+IDEsCisJU0VRX1NDQU4gPT4gMSwK KwlUSURfU0NBTiA9PiAxLAorKTsKK2ZvciBteSAkdGFnIChzb3J0IGtleXMgJXRhZ19tYXApCit7 CisJbXkgJGNoZWNraXQgPSAkdGFnX21hcHskdGFnfTsKKworCSMgU2VhcmNoIGZvciB0aGUgZ2l2 ZW4gdGFnLiBUaGlzIGlzIG5vdCBlbnRpcmVseSByb2J1c3Q6IGl0IGNvdWxkIGdldCB0aHJvd24K KwkjIG9mZiBieSBhIHRhYmxlIGFsaWFzIHN1Y2ggYXMgIkZPUkVJR05fSk9JTigiLCBidXQgdGhh dCBwcm9iYWJseSB3b24ndAorCSMgaGFwcGVuIGluIHRoZSBjb3JlIHJlZ3Jlc3Npb24gdGVzdHMu CisJbXkgJHRhZ19jb3VudCA9ICRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgPDxFT00pOwor U0VMRUNUIENPVU5UKCopIEZST00gcGdfZ2V0X2NvbGxlY3RlZF9zaGFyZWRfYWR2aWNlKCkKKwlX SEVSRSBhZHZpY2UgTElLRSAnJSR0YWcoJScKK0VPTQorCisJIyBDaGVjayB0aGF0IHRoZSB0YWcg Z290IGEgbm9uLXRyaXZpYWwgYW1vdW50IG9mIHVzZSwgdW5sZXNzIHRvbGQgb3RoZXJ3aXNlLgor CWNtcF9vaygkdGFnX2NvdW50LCAnPicsIDEwLCAibXVsdGlwbGUgdXNlcyBvZiAkdGFnIikgaWYg JGNoZWNraXQ7CisKKwkjIFJlZ2FyZGxlc3MsIG5vdGUgdGhlIGV4YWN0IGNvdW50IGluIHRoZSBs b2csIGZvciBodW1hbiBjb25zdW1wdGlvbi4KKwlub3RlKCJmb3VuZCAkdGFnX2NvdW50IGFkdmlj ZSBzdHJpbmdzIGNvbnRhaW5pbmcgJHRhZyIpOworfQorCisjIFRyaWdnZXIgYSBwYXJ0aWFsIGNs ZWFudXAgb2YgdGhlIHNoYXJlZCBhZHZpY2UgY29sbGVjdG9yLCBhbmQgdGhlbiBhIGZ1bGwKKyMg Y2xlYW51cC4KKyRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgPDxFT00pOworU0VUIHBnX2Nv bGxlY3RfYWR2aWNlLnNoYXJlZF9jb2xsZWN0aW9uX2xpbWl0PTUwMDsKK1NFTEVDVCAqIEZST00g cGdfY2xlYXJfY29sbGVjdGVkX3NoYXJlZF9hZHZpY2UoKTsKK0VPTQorCitkb25lX3Rlc3Rpbmco KTsKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9jb250cmliLnNnbWwgYi9kb2Mvc3JjL3NnbWwv Y29udHJpYi5zZ21sCmluZGV4IGJkZDQ4NjVmNTNmLi4yYWI2ZmFmYmFiMSAxMDA2NDQKLS0tIGEv ZG9jL3NyYy9zZ21sL2NvbnRyaWIuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvY29udHJpYi5zZ21s CkBAIC0xNTIsNiArMTUyLDcgQEAgQ1JFQVRFIEVYVEVOU0lPTiA8cmVwbGFjZWFibGU+ZXh0ZW5z aW9uX25hbWU8L3JlcGxhY2VhYmxlPjsKICAmcGFnZWluc3BlY3Q7CiAgJnBhc3N3b3JkY2hlY2s7 CiAgJnBnYnVmZmVyY2FjaGU7CisgJnBnY29sbGVjdGFkdmljZTsKICAmcGdjcnlwdG87CiAgJnBn ZnJlZXNwYWNlbWFwOwogICZwZ2xvZ2ljYWxpbnNwZWN0OwpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9z Z21sL2ZpbGVsaXN0LnNnbWwgYi9kb2Mvc3JjL3NnbWwvZmlsZWxpc3Quc2dtbAppbmRleCBkOTBi NDMzOGQyYS4uNDA3ZmYzYWJmZmUgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9maWxlbGlzdC5z Z21sCisrKyBiL2RvYy9zcmMvc2dtbC9maWxlbGlzdC5zZ21sCkBAIC0xNDUsNiArMTQ1LDcgQEAK IDwhRU5USVRZIHBhZ2VpbnNwZWN0ICAgICBTWVNURU0gInBhZ2VpbnNwZWN0LnNnbWwiPgogPCFF TlRJVFkgcGFzc3dvcmRjaGVjayAgIFNZU1RFTSAicGFzc3dvcmRjaGVjay5zZ21sIj4KIDwhRU5U SVRZIHBnYnVmZmVyY2FjaGUgICBTWVNURU0gInBnYnVmZmVyY2FjaGUuc2dtbCI+Cis8IUVOVElU WSBwZ2NvbGxlY3RhZHZpY2UgU1lTVEVNICJwZ2NvbGxlY3RhZHZpY2Uuc2dtbCI+CiA8IUVOVElU WSBwZ2NyeXB0byAgICAgICAgU1lTVEVNICJwZ2NyeXB0by5zZ21sIj4KIDwhRU5USVRZIHBnZnJl ZXNwYWNlbWFwICBTWVNURU0gInBnZnJlZXNwYWNlbWFwLnNnbWwiPgogPCFFTlRJVFkgcGdsb2dp Y2FsaW5zcGVjdCAgU1lTVEVNICJwZ2xvZ2ljYWxpbnNwZWN0LnNnbWwiPgpkaWZmIC0tZ2l0IGEv ZG9jL3NyYy9zZ21sL3BnY29sbGVjdGFkdmljZS5zZ21sIGIvZG9jL3NyYy9zZ21sL3BnY29sbGVj dGFkdmljZS5zZ21sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4yMjBh YWJlNzhjNgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9zcmMvc2dtbC9wZ2NvbGxlY3RhZHZpY2Uu c2dtbApAQCAtMCwwICsxLDI0NCBAQAorPCEtLSBkb2Mvc3JjL3NnbWwvcGdjb2xsZWN0YWR2aWNl LnNnbWwgLS0+CisKKzxzZWN0MSBpZD0icGdjb2xsZWN0YWR2aWNlIiB4cmVmbGFiZWw9InBnX2Nv bGxlY3RfYWR2aWNlIj4KKyA8dGl0bGU+cGdfY29sbGVjdF9hZHZpY2UgJm1kYXNoOyBjb2xsZWN0 IHF1ZXJpZXMgYW5kIHRoZWlyIHBsYW4gYWR2aWNlIHN0cmluZ3M8L3RpdGxlPgorCisgPGluZGV4 dGVybSB6b25lPSJwZ2NvbGxlY3RhZHZpY2UiPgorICA8cHJpbWFyeT5wZ19jb2xsZWN0X2Fkdmlj ZTwvcHJpbWFyeT4KKyA8L2luZGV4dGVybT4KKworIDxwYXJhPgorICBUaGUgPGZpbGVuYW1lPnBn X2NvbGxlY3RfYWR2aWNlPC9maWxlbmFtZT4gZXh0ZW5zaW9uIGFsbG93cyB5b3UgdG8KKyAgYXV0 b21hdGljYWxseSBnZW5lcmF0ZSBwbGFuIGFkdmljZSBlYWNoIHRpbWUgYSBxdWVyeSBpcyBwbGFu bmVkIGFuZCBzdG9yZQorICB0aGUgcXVlcnkgYW5kIHRoZSBnZW5lcmF0ZWQgYWR2aWNlIHN0cmlu ZyBlaXRoZXIgaW4gbG9jYWwgb3Igc2hhcmVkIG1lbW9yeS4KKyAgTm90ZSB0aGF0IHRoaXMgZXh0 ZW5zaW9uIHJlcXVpcmVzIHRoZSA8eHJlZiBsaW5rZW5kPSJwZ3BsYW5hZHZpY2UiIC8+IG1vZHVs ZSwKKyAgd2hpY2ggcGVyZm9ybXMgdGhlIGFjdHVhbCBwbGFuIGFkdmljZSBnZW5lcmF0aW9uOyB0 aGlzIG1vZHVsZSBvbmx5IGtub3dzCisgIGhvdyB0byBzdG9yZSB0aGUgZ2VuZXJhdGVkIGFkdmlj ZSBmb3IgbGF0ZXIgZXhhbWluYXRpb24uIFdoZW5ldmVyCisgIDxsaXRlcmFsPnBnX2NvbGxlY3Rf YWR2aWNlPC9saXRlcmFsPiBpcyBsb2FkZWQsIGl0IHdpbGwgYXV0b21hdGljYWxseSBsb2FkCisg IDxsaXRlcmFsPnBnX3BsYW5fYWR2aWNlPC9saXRlcmFsPi4KKyA8L3BhcmE+CisKKyA8cGFyYT4K KyAgSW4gb3JkZXIgdG8gdXNlIHRoaXMgbW9kdWxlLCB5b3Ugd2lsbCBuZWVkIHRvIGV4ZWN1dGUK KyAgPGxpdGVyYWw+Q1JFQVRFIEVYVEVOU0lPTiBwZ19jb2xsZWN0X2FkdmljZTwvbGl0ZXJhbD4g aW4gYXQgbGVhc3QKKyAgb25lIGRhdGFiYXNlLCBzbyB0aGF0IHlvdSBoYXZlIGEgd2F5IHRvIGV4 YW1pbmUgdGhlIGNvbGxlY3RlZCBhZHZpY2UuCisgIFlvdSB3aWxsIGFsc28gbmVlZCB0aGUgPGxp dGVyYWw+cGdfY29sbGVjdF9hZHZpY2U8L2xpdGVyYWw+IG1vZHVsZQorICB0byBiZSBsb2FkZWQg aW4gYWxsIHNlc3Npb25zIHdoZXJlIGFkdmljZSBpcyB0byBiZSBjb2xsZWN0ZWQuIEl0IHdpbGwK KyAgdXN1YWxseSBiZSBiZXN0IHRvIGRvIHRoaXMgYnkgYWRkaW5nIDxsaXRlcmFsPnBnX2NvbGxl Y3RfYWR2aWNlPC9saXRlcmFsPgorICB0byA8eHJlZiBsaW5rZW5kPSJndWMtc2hhcmVkLXByZWxv YWQtbGlicmFyaWVzIi8+IGFuZCByZXN0YXJ0aW5nIHRoZQorICBzZXJ2ZXIuCisgPC9wYXJhPgor CisgPHBhcmE+CisgIDxsaXRlcmFsPnBnX2NvbGxlY3RfYWR2aWNlPC9saXRlcmFsPiBpbmNsdWRl cyBib3RoIGEgc2hhcmVkIGFkdmljZQorICBjb2xsZWN0b3IgYW5kIGEgbG9jYWwgYWR2aWNlIGNv bGxlY3Rvci4gVGhlIGxvY2FsIGFkdmljZSBjb2xsZWN0b3IgbWFrZXMKKyAgcXVlcmllcyBhbmQg dGhlaXIgYWR2aWNlIHN0cmluZ3MgdmlzaWJsZSBvbmx5IHRvIHRoZSBzZXNzaW9uIHdoZXJlIHRo b3NlCisgIHF1ZXJpZXMgd2VyZSBwbGFubmVkLCB3aGlsZSB0aGUgc2hhcmVkIGFkdmljZSBjb2xs ZWN0b3IgY29sbGVjdHMgZGF0YQorICBvbiBhIHN5c3RlbS13aWRlIGJhc2lzLCBhbmQgYXV0aG9y aXplZCB1c2VycyBjYW4gZXhhbWluZSBkYXRhIGZyb20gYWxsCisgIHNlc3Npb25zLgorIDwvcGFy YT4KKworIDxwYXJhPgorICBUbyBlbmFibGUgYSBjb2xsZWN0b3IsIHlvdSBtdXN0IGZpcnN0IHNl dCBhIGNvbGxlY3Rpb24gbGltaXQuIFdoZW4gdGhlCisgIG51bWJlciBvZiBxdWVyaWVzIGZvciB3 aGljaCBhZHZpY2UgaGFzIGJlZW4gc3RvcmVkIGV4Y2VlZHMgdGhlIGNvbGxlY3Rpb24KKyAgbGlt aXQsIHRoZSBvbGRlc3QgcXVlcmllcyBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgYWR2aWNlIHdpbGwg YmUgZGlzY2FyZGVkLgorICBUaGVuLCB5b3UgbXVzdCBhZGp1c3QgYSBzZXBhcmF0ZSBzZXR0aW5n IHRvIGFjdHVhbGx5IGVuYWJsZSBhZHZpY2UKKyAgY29sbGVjdGlvbi4gRm9yIHRoZSBsb2NhbCBj b2xsZWN0b3IsIHNldCB0aGUgY29sbGVjdGlvbiBsaW1pdCBieSBjb25maWd1cmluZworICA8bGl0 ZXJhbD5wZ19jb2xsZWN0X2FkdmljZS5sb2NhbF9jb2xsZWN0aW9uX2xpbWl0PC9saXRlcmFsPiB0 byBhIHZhbHVlCisgIGdyZWF0ZXIgdGhhbiB6ZXJvLCBhbmQgdGhlbiBlbmFibGUgYWR2aWNlIGNv bGxlY3Rpb24gYnkgc2V0dGluZworICA8bGl0ZXJhbD5wZ19jb2xsZWN0X2FkdmljZS5sb2NhbF9j b2xsZWN0b3IgPSB0cnVlPC9saXRlcmFsPi4gRm9yIHRoZSBzaGFyZWQKKyAgY29sbGVjdG9yLCB0 aGUgcHJvY2VkdXJlIGlzIHRoZSBzYW1lLCBleGNlcHQgdGhhdCB0aGUgbmFtZXMgb2YgdGhlIHNl dHRpbmdzCisgIGFyZSA8bGl0ZXJhbD5wZ19jb2xsZWN0X2FkdmljZS5zaGFyZWRfY29sbGVjdGlv bl9saW1pdDwvbGl0ZXJhbD4gYW5kCisgIDxsaXRlcmFsPnBnX2NvbGxlY3RfYWR2aWNlLnNoYXJl ZF9jb2xsZWN0b3I8L2xpdGVyYWw+LiBOb3RlIHRoYXQgaW4gYm90aAorICBjYXNlcywgcXVlcnkg dGV4dHMgYW5kIGFkdmljZSBzdHJpbmdzIGFyZSBzdG9yZWQgaW4gbWVtb3J5LCBzbworICBjb25m aWd1cmluZyBsYXJnZSBsaW1pdHMgbWF5IHJlc3VsdCBpbiBjb25zaWRlcmFibGUgbWVtb3J5IGNv bnN1bXB0aW9uLgorIDwvcGFyYT4KKworIDxwYXJhPgorICBPbmNlIHRoZSBjb2xsZWN0b3IgaXMg ZW5hYmxlZCwgeW91IGNhbiBydW4gYW55IHF1ZXJpZXMgZm9yIHdoaWNoIHlvdSB3aXNoCisgIHRv IHNlZSB0aGUgZ2VuZXJhdGVkIHBsYW4gYWR2aWNlLiBUaGVuLCB5b3UgY2FuIGV4YW1pbmUgd2hh dCBoYXMgYmVlbgorICBjb2xsZWN0ZWQgdXNpbmcgd2hpY2hldmVyIG9mCisgIDxsaXRlcmFsPlNF TEVDVCAqIEZST00gcGdfZ2V0X2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UoKTwvbGl0ZXJhbD4gb3IK KyAgPGxpdGVyYWw+U0VMRUNUICogRlJPTSBwZ19nZXRfY29sbGVjdGVkX3NoYXJlZF9hZHZpY2Uo KTwvbGl0ZXJhbD4KKyAgY29ycmVzcG9uZHMgdG8gdGhlIGNvbGxlY3RvciB5b3UgZW5hYmxlZC4g VG8gZGlzY2FyZCB0aGUgY29sbGVjdGVkIGFkdmljZQorICBhbmQgcmVsZWFzZSBtZW1vcnksIHlv dSBjYW4gY2FsbAorICA8bGl0ZXJhbD5wZ19jbGVhcl9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlKCk8 L2xpdGVyYWw+CisgIG9yIDxsaXRlcmFsPnBnX2NsZWFyX2NvbGxlY3RlZF9zaGFyZWRfYWR2aWNl KCk8L2xpdGVyYWw+LgorIDwvcGFyYT4KKworIDxwYXJhPgorICBJbiBhZGRpdGlvbiB0byB0aGUg cXVlcnkgdGV4dHMgYW5kIGFkdmljZSBzdHJpbmdzLCB0aGUgYWR2aWNlIGNvbGxlY3RvcnMKKyAg d2lsbCBhbHNvIHN0b3JlIHRoZSBPSUQgb2YgdGhlIHJvbGUgdGhhdCBjYXVzZWQgdGhlIHF1ZXJ5 IHRvIGJlIHBsYW5uZWQsCisgIHRoZSBPSUQgb2YgdGhlIGRhdGFiYXNlIGluIHdoaWNoIHRoZSBx dWVyeSB3YXMgcGxhbm5lZCwgdGhlIHF1ZXJ5IElELAorICBhbmQgdGhlIHRpbWUgYXQgd2hpY2gg dGhlIGNvbGxlY3Rpb24gb2NjdXJyZWQuIFRoaXMgbW9kdWxlIGRvZXMgbm90CisgIGF1dG9tYXRp Y2FsbHkgZW5hYmxlIHF1ZXJ5IElEIGNvbXB1dGF0aW9uOyB0aGVyZWZvcmUsIGlmIHlvdSB3YW50 IHRoZQorICBxdWVyeSBJRCB2YWx1ZSB0byBiZSBwb3B1bGF0ZWQgaW4gY29sbGVjdGVkIGFkdmlj ZSwgYmUgc3VyZSB0byBjb25maWd1cmUKKyAgPGxpdGVyYWw+Y29tcHV0ZV9xdWVyeV9pZCA9IG9u PC9saXRlcmFsPi4gT3RoZXJ3aXNlLCB0aGUgcXVlcnkgSUQgbWF5CisgIGFsd2F5cyBzaG93IGFz IDxsaXRlcmFsPjA8L2xpdGVyYWw+LgorIDwvcGFyYT4KKworIDxzZWN0MiBpZD0icGdjb2xsZWN0 YWR2aWNlLWZ1bmN0aW9ucyI+CisgIDx0aXRsZT5GdW5jdGlvbnM8L3RpdGxlPgorCisgIDx2YXJp YWJsZWxpc3Q+CisKKyAgIDx2YXJsaXN0ZW50cnk+CisgICAgPHRlcm0+CisgICAgIDxmdW5jdGlv bj5wZ19jbGVhcl9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlKCkgcmV0dXJucyB2b2lkPC9mdW5jdGlv bj4KKyAgICAgPGluZGV4dGVybT4KKyAgICAgIDxwcmltYXJ5PnBnX2NsZWFyX2NvbGxlY3RlZF9s b2NhbF9hZHZpY2U8L3ByaW1hcnk+CisgICAgIDwvaW5kZXh0ZXJtPgorICAgIDwvdGVybT4KKwor ICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBSZW1vdmVzIGFsbCBjb2xsZWN0ZWQg cXVlcnkgdGV4dHMgYW5kIGFkdmljZSBzdHJpbmdzIGZyb20gYmFja2VuZC1sb2NhbAorICAgICAg bWVtb3J5LgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5 PgorCisgICA8dmFybGlzdGVudHJ5PgorICAgIDx0ZXJtPgorICAgICA8ZnVuY3Rpb24+cGdfZ2V0 X2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UoKSByZXR1cm5zIHNldG9mIChpZCBiaWdpbnQsCisgICAg ICAgIHVzZXJpZCBvaWQsIGRiaWQgb2lkLCBxdWVyeWlkIGJpZ2ludCwgY29sbGVjdGlvbl90aW1l IHRpbWVzdGFtcHR6LAorICAgICAgICBxdWVyeSB0ZXh0LCBhZHZpY2UgdGV4dCk8L2Z1bmN0aW9u PgorICAgICA8aW5kZXh0ZXJtPgorICAgICAgPHByaW1hcnk+cGdfZ2V0X2NvbGxlY3RlZF9sb2Nh bF9hZHZpY2U8L3ByaW1hcnk+CisgICAgIDwvaW5kZXh0ZXJtPgorICAgIDwvdGVybT4KKworICAg IDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBSZXR1cm5zIGFsbCBxdWVyeSB0ZXh0cyBh bmQgYWR2aWNlIHN0cmluZ3Mgc3RvcmVkIGluIHRoZSBsb2NhbAorICAgICAgYWR2aWNlIGNvbGxl Y3Rvci4KKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRyeT4K KworICAgPHZhcmxpc3RlbnRyeT4KKyAgICA8dGVybT4KKyAgICAgPGZ1bmN0aW9uPnBnX2NsZWFy X2NvbGxlY3RlZF9zaGFyZWRfYWR2aWNlKCkgcmV0dXJucyB2b2lkPC9mdW5jdGlvbj4KKyAgICAg PGluZGV4dGVybT4KKyAgICAgIDxwcmltYXJ5PnBnX2NsZWFyX2NvbGxlY3RlZF9zaGFyZWRfYWR2 aWNlPC9wcmltYXJ5PgorICAgICA8L2luZGV4dGVybT4KKyAgICA8L3Rlcm0+CisKKyAgICA8bGlz dGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgUmVtb3ZlcyBhbGwgY29sbGVjdGVkIHF1ZXJ5IHRl eHRzIGFuZCBhZHZpY2Ugc3RyaW5ncyBmcm9tIHNoYXJlZAorICAgICAgbWVtb3J5LgorICAgICA8 L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCisgICA8dmFybGlz dGVudHJ5PgorICAgIDx0ZXJtPgorICAgICA8ZnVuY3Rpb24+cGdfZ2V0X2NvbGxlY3RlZF9zaGFy ZWRfYWR2aWNlKCkgcmV0dXJucyBzZXRvZiAoaWQgYmlnaW50LAorICAgICAgICB1c2VyaWQgb2lk LCBkYmlkIG9pZCwgcXVlcnlpZCBiaWdpbnQsIGNvbGxlY3Rpb25fdGltZSB0aW1lc3RhbXB0eiwK KyAgICAgICAgcXVlcnkgdGV4dCwgYWR2aWNlIHRleHQpPC9mdW5jdGlvbj4KKyAgICAgPGluZGV4 dGVybT4KKyAgICAgIDxwcmltYXJ5PnBnX2dldF9jb2xsZWN0ZWRfc2hhcmVkX2FkdmljZTwvcHJp bWFyeT4KKyAgICAgPC9pbmRleHRlcm0+CisgICAgPC90ZXJtPgorCisgICAgPGxpc3RpdGVtPgor ICAgICA8cGFyYT4KKyAgICAgIFJldHVybnMgYWxsIHF1ZXJ5IHRleHRzIGFuZCBhZHZpY2Ugc3Ry aW5ncyBzdG9yZWQgaW4gdGhlIHNoYXJlZAorICAgICAgYWR2aWNlIGNvbGxlY3Rvci4KKyAgICAg PC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRyeT4KKworICA8L3Zhcmlh YmxlbGlzdD4KKworIDwvc2VjdDI+CisKKyA8c2VjdDIgaWQ9InBnY29sbGVjdGFkdmljZS1jb25m aWctcGFyYW1zIj4KKyAgPHRpdGxlPkNvbmZpZ3VyYXRpb24gUGFyYW1ldGVyczwvdGl0bGU+CisK KyAgPHZhcmlhYmxlbGlzdD4KKworICAgPHZhcmxpc3RlbnRyeT4KKyAgICA8dGVybT4KKyAgICAg PHZhcm5hbWU+cGdfY29sbGVjdF9hZHZpY2UubG9jYWxfY29sbGVjdG9yPC92YXJuYW1lPiAoPHR5 cGU+Ym9vbGVhbjwvdHlwZT4pCisgICAgIDxpbmRleHRlcm0+CisgICAgICA8cHJpbWFyeT48dmFy bmFtZT5wZ19jb2xsZWN0X2FkdmljZS5sb2NhbF9jb2xsZWN0b3I8L3Zhcm5hbWU+IGNvbmZpZ3Vy YXRpb24gcGFyYW1ldGVyPC9wcmltYXJ5PgorICAgICA8L2luZGV4dGVybT4KKyAgICA8L3Rlcm0+ CisKKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgPHZhcm5hbWU+cGdfY29sbGVj dF9hZHZpY2UubG9jYWxfY29sbGVjdG9yPC92YXJuYW1lPiBlbmFibGVzIHRoZQorICAgICAgbG9j YWwgYWR2aWNlIGNvbGxlY3Rvci4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGxpdGVyYWw+ZmFsc2U8 L2xpdGVyYWw+LgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVu dHJ5PgorCisgICA8dmFybGlzdGVudHJ5PgorICAgIDx0ZXJtPgorICAgICA8dmFybmFtZT5wZ19j b2xsZWN0X2FkdmljZS5sb2NhbF9jb2xsZWN0aW9uX2xpbWl0PC92YXJuYW1lPiAoPHR5cGU+aW50 ZWdlcjwvdHlwZT4pCisgICAgIDxpbmRleHRlcm0+CisgICAgICA8cHJpbWFyeT48dmFybmFtZT5w Z19jb2xsZWN0X2FkdmljZS5sb2NhbF9jb2xsZWN0aW9uX2xpbWl0PC92YXJuYW1lPiBjb25maWd1 cmF0aW9uIHBhcmFtZXRlcjwvcHJpbWFyeT4KKyAgICAgPC9pbmRleHRlcm0+CisgICAgPC90ZXJt PgorCisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIDx2YXJuYW1lPnBnX2NvbGxl Y3RfYWR2aWNlLmxvY2FsX2NvbGxlY3Rpb25fbGltaXQ8L3Zhcm5hbWU+IHNldHMgdGhlCisgICAg ICBtYXhpbXVtIG51bWJlciBvZiBxdWVyeSB0ZXh0cyBhbmQgYWR2aWNlIHN0cmluZ3MgcmV0YWlu ZWQgYnkgdGhlCisgICAgICBsb2NhbCBhZHZpY2UgY29sbGVjdG9yLiBUaGUgZGVmYXVsdCB2YWx1 ZSBpcyA8bGl0ZXJhbD4wPC9saXRlcmFsPi4KKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+ CisgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgPHZhcmxpc3RlbnRyeT4KKyAgICA8dGVybT4KKyAg ICAgPHZhcm5hbWU+cGdfY29sbGVjdF9hZHZpY2Uuc2hhcmVkX2NvbGxlY3RvcjwvdmFybmFtZT4g KDx0eXBlPmJvb2xlYW48L3R5cGU+KQorICAgICA8aW5kZXh0ZXJtPgorICAgICAgPHByaW1hcnk+ PHZhcm5hbWU+cGdfY29sbGVjdF9hZHZpY2Uuc2hhcmVkX2NvbGxlY3RvcjwvdmFybmFtZT4gY29u ZmlndXJhdGlvbiBwYXJhbWV0ZXI8L3ByaW1hcnk+CisgICAgIDwvaW5kZXh0ZXJtPgorICAgIDwv dGVybT4KKworICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICA8dmFybmFtZT5wZ19j b2xsZWN0X2FkdmljZS5zaGFyZWRfY29sbGVjdG9yPC92YXJuYW1lPiBlbmFibGVzIHRoZQorICAg ICAgc2hhcmVkIGFkdmljZSBjb2xsZWN0b3IuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxsaXRlcmFs PmZhbHNlPC9saXRlcmFsPi4KKyAgICAgIE9ubHkgc3VwZXJ1c2VycyBhbmQgdXNlcnMgd2l0aCB0 aGUgYXBwcm9wcmlhdGUgPGxpdGVyYWw+U0VUPC9saXRlcmFsPgorICAgICAgcHJpdmlsZWdlIGNh biBjaGFuZ2UgdGhpcyBzZXR0aW5nLgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAg IDwvdmFybGlzdGVudHJ5PgorCisgICA8dmFybGlzdGVudHJ5PgorICAgIDx0ZXJtPgorICAgICA8 dmFybmFtZT5wZ19jb2xsZWN0X2FkdmljZS5zaGFyZWRfY29sbGVjdGlvbl9saW1pdDwvdmFybmFt ZT4gKDx0eXBlPmludGVnZXI8L3R5cGU+KQorICAgICA8aW5kZXh0ZXJtPgorICAgICAgPHByaW1h cnk+PHZhcm5hbWU+cGdfY29sbGVjdF9hZHZpY2Uuc2hhcmVkX2NvbGxlY3Rpb25fbGltaXQ8L3Zh cm5hbWU+IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyPC9wcmltYXJ5PgorICAgICA8L2luZGV4dGVy bT4KKyAgICA8L3Rlcm0+CisKKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgPHZh cm5hbWU+cGdfY29sbGVjdF9hZHZpY2Uuc2hhcmVkX2NvbGxlY3Rpb25fbGltaXQ8L3Zhcm5hbWU+ IHNldHMgdGhlCisgICAgICBtYXhpbXVtIG51bWJlciBvZiBxdWVyeSB0ZXh0cyBhbmQgYWR2aWNl IHN0cmluZ3MgcmV0YWluZWQgYnkgdGhlCisgICAgICBzaGFyZWQgYWR2aWNlIGNvbGxlY3Rvci4g VGhlIGRlZmF1bHQgdmFsdWUgaXMgPGxpdGVyYWw+MDwvbGl0ZXJhbD4uCisgICAgICBPbmx5IHN1 cGVydXNlcnMgYW5kIHVzZXJzIHdpdGggdGhlIGFwcHJvcHJpYXRlIDxsaXRlcmFsPlNFVDwvbGl0 ZXJhbD4KKyAgICAgIHByaXZpbGVnZSBjYW4gY2hhbmdlIHRoaXMgc2V0dGluZy4KKyAgICAgPC9w YXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRyeT4KKworICA8L3ZhcmlhYmxl bGlzdD4KKworIDwvc2VjdDI+CisKKyA8c2VjdDIgaWQ9InBnY29sbGVjdGFkdmljZS1hdXRob3Ii PgorICA8dGl0bGU+QXV0aG9yPC90aXRsZT4KKworICA8cGFyYT4KKyAgIFJvYmVydCBIYWFzIDxl bWFpbD5yaGFhc0Bwb3N0Z3Jlc3FsLm9yZzwvZW1haWw+CisgIDwvcGFyYT4KKyA8L3NlY3QyPgor Cis8L3NlY3QxPgpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3Qg Yi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCBlNGJhMDE0NmZmYi4uYjI2 MGY5NzllNjQgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0Cisr KyBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBAIC0zOTg0LDYgKzM5ODQsMTIg QEAgcGdfdXVpZF90CiBwZ193Y2hhcgogcGdfd2NoYXJfdGJsCiBwZ3BfYXJtb3JfaGVhZGVyc19z dGF0ZQorcGdjYV9jb2xsZWN0ZWRfYWR2aWNlCitwZ2NhX2xvY2FsX2FkdmljZQorcGdjYV9sb2Nh bF9hZHZpY2VfY2h1bmsKK3BnY2Ffc2hhcmVkX2FkdmljZQorcGdjYV9zaGFyZWRfYWR2aWNlX2No dW5rCitwZ2NhX3NoYXJlZF9zdGF0ZQogcGdwYV9hZHZpY2VfaXRlbQogcGdwYV9hZHZpY2VfdGFn X3R5cGUKIHBncGFfYWR2aWNlX3RhcmdldAotLSAKMi41MS4wCgo= --0000000000007beb40064cacb69d Content-Type: application/octet-stream; name="v19-0001-Add-pg_plan_advice-contrib-module.patch" Content-Disposition: attachment; filename="v19-0001-Add-pg_plan_advice-contrib-module.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmkqdl240 RnJvbSAxMmIyMTZmN2M5Nzc2OTdhN2UyYmU2MDQ3YzU1NzZkZjY3NTZiMjk3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IE1vbiwgMjYgSmFuIDIwMjYgMDk6NTY6MzYgLTA1MDAKU3ViamVjdDogW1BBVENIIHYxOSAx LzRdIEFkZCBwZ19wbGFuX2FkdmljZSBjb250cmliIG1vZHVsZS4KClByb3ZpZGUgYSBmYWNpbGl0 eSB0aGF0ICgxKSBjYW4gYmUgdXNlZCB0byBzdGFiaWxpemUgY2VydGFpbiBwbGFuIGNob2ljZXMK c28gdGhhdCB0aGUgcGxhbm5lciBjYW5ub3QgcmV2ZXJzZSBjb3Vyc2Ugd2l0aG91dCBhdXRob3Jp emF0aW9uIGFuZAooMikgY2FuIGJlIHVzZWQgYnkga25vd2xlZGdlYWJsZSB1c2VycyB0byBpbnNp c3Qgb24gcGxhbiBjaG9pY2VzIGNvbnRyYXJ5CnRvIHdoYXQgdGhlIHBsYW5uZXIgYmVsaWV2ZXMg YmVzdC4gSW4gYm90aCBjYXNlcywgdGVycmlibGUgb3V0Y29tZXMgYXJlCnBvc3NpYmxlOiB1c2Vy cyBzaG91bGQgdGhpbmsgdHdpY2UgYW5kIHBlcmhhcHMgdGhyZWUgdGltZXMgYmVmb3JlCmNvbnN0 cmFpbmluZyB0aGUgcGxhbm5lcidzIGFiaWxpdHkgdG8gZG8gYXMgaXQgdGhpbmtzIGJlc3Q7IG5l dmVydGhlbGVzcywKdGhlcmUgYXJlIHByb2JsZW1zIHRoYXQgYXJlIG11Y2ggbW9yZSBlYXNpbHkg c29sdmVkIHdpdGggdGhlc2UgZmFjaWxpdGllcwp0aGFuIHdpdGhvdXQgdGhlbS4KClRoaXMgcGF0 Y2ggdGFrZXMgdGhlIGFwcHJvYWNoIG9mIGFuYWx5emluZyBhIGZpbmlzaGVkIHBsYW4gdG8gcHJv ZHVjZQp0ZXh0dWFsIG91dHB1dCwgd2hpY2ggd2UgY2FsbCAicGxhbiBhZHZpY2UiLCB0aGF0IGRl c2NyaWJlcyBrZXkKZGVjaXNpb25zIG1hZGUgZHVyaW5nIHBsYW47IGlmIHRoYXQgcGxhbiBhZHZp Y2UgaXMgcHJvdmlkZWQgZHVyaW5nCmZ1dHVyZSBwbGFubmluZyBjeWNsZXMsIGl0IHdpbGwgZm9y Y2UgdGhvc2Uga2V5IGRlY2lzaW9ucyB0byBiZSBtYWRlIGluCnRoZSBzYW1lIHdheS4gIE5vdCBh bGwgcGxhbm5lciBkZWNpc2lvbnMgY2FuIGJlIGNvbnRyb2xsZWQgdXNpbmcgYWR2aWNlOwpmb3Ig ZXhhbXBsZSwgZGVjaXNpb25zIGFib3V0IGhvdyB0byBwZXJmb3JtIGFnZ3JlZ2F0aW9uIGFyZSBj dXJyZW50bHkKb3V0IG9mIHNjb3BlLCBhcyBpcyBjaG9pY2Ugb2Ygc29ydCBvcmRlci4gUGxhbiBh ZHZpY2UgY2FuIGFsc28gYmUgZWRpdGVkCmJ5IHRoZSB1c2VyLCBvciBldmVuIHdyaXR0ZW4gZnJv bSBzY3JhdGNoIGluIHNpbXBsZSBjYXNlcywgbWFraW5nIGl0CnBvc3NpYmxlIHRvIGdlbmVyYXRl IG91dGNvbWVzIHRoYXQgdGhlIHBsYW5uZXIgd291bGQgbm90IGhhdmUgcHJvZHVjZWQuClBhcnRp YWwgYWR2aWNlIGNhbiBiZSBwcm92aWRlZCB0byBjb250cm9sIHNvbWUgcGxhbm5lciBvdXRjb21l cyBidXQgbm90Cm90aGVycy4KCkN1cnJlbnRseSwgcGxhbiBhZHZpY2UgaXMgZm9jdXNlZCBvbmx5 IG9uIHNwZWNpZmljIG91dGNvbWVzLCBzdWNoIGFzCnRoZSBjaG9pY2UgdG8gdXNlIGEgc2VxdWVu dGlhbCBzY2FuIGZvciBhIHBhcnRpY3VsYXIgcmVsYXRpb24sIGFuZCBub3QKb24gZXN0aW1hdGVz IHRoYXQgbWlnaHQgY29udHJpYnV0ZSB0byB0aG9zZSBvdXRjb21lcywgc3VjaCBhcyBhCnBvc3Np Ymx5LWluY29ycmVjdCBzZWxlY3Rpdml0eSBlc3RpbWF0ZS4gV2hpbGUgaXQgd291bGQgYmUgdXNl ZnVsIHRvCnVzZXJzIHRvIGJlIGFibGUgdG8gcHJvdmlkZSBwbGFuIGFkdmljZSB0aGF0IGFmZmVj dHMgc2VsZWN0aXZpdHkKZXN0aW1hdGVzIG9yIG90aGVyIGFzcGVjdHMgb2YgY29zdGluZywgdGhh dCBpcyBvdXQgb2Ygc2NvcGUgZm9yIHRoaXMKY29tbWl0LgoKUmV2aWV3ZWQtYnk6IEx1a2FzIEZp dHRsIDxsdWthc0BmaXR0bC5jb20+ClJldmlld2VkLWJ5OiBKYWt1YiBXYXJ0YWsgPGpha3ViLndh cnRha0BlbnRlcnByaXNlZGIuY29tPgpSZXZpZXdlZC1ieTogR3JlZyBCdXJkIDxncmVnQGJ1cmQu bWU+ClJldmlld2VkLWJ5OiBKYWNvYiBDaGFtcGlvbiA8amFjb2IuY2hhbXBpb25AZW50ZXJwcmlz ZWRiLmNvbT4KUmV2aWV3ZWQtYnk6IEhhaWJvIFlhbiA8dHJpc3Rhbi55aW1AZ21haWwuY29tPgpS ZXZpZXdlZC1ieTogRGlhbiBGYXkgPGRpQG5tZmF5LmNvbT4KUmV2aWV3ZWQtYnk6IEFqYXkgUGFs IDxhamF5LnBhbC5rQGdtYWlsLmNvbT4KUmV2aWV3ZWQtYnk6IEpvaG4gTmF5bG9yIDxqb2huY25h eWxvcmxzQGdtYWlsLmNvbT4KUmV2aWV3ZWQtYnk6IEFsZXhhbmRyYSBXYW5nIDxhbGV4YW5kcmEu d2FuZy5vc3NAZ21haWwuY29tPgpEaXNjdXNzaW9uOiBodHRwOi8vcG9zdGdyLmVzL20vQ0ErVGdt b1otSmgxVDZReVdvQ09ETVZRZGhUVVBZa2Faald6dHpQMUVuND1aSG9LUHp3QG1haWwuZ21haWwu Y29tCi0tLQogY29udHJpYi9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg ICAgMSArCiBjb250cmliL21lc29uLmJ1aWxkICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg ICAxICsKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvLmdpdGlnbm9yZSAgICAgICAgICAgICB8ICAg IDMgKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9NYWtlZmlsZSAgICAgICAgICAgICAgIHwgICA0 MyArCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL1JFQURNRSAgICAgICAgICAgICAgICAgfCAgMjYw ICsrCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL2dhdGhlci5vdXQgICAgfCAgMzcx ICsrKwogLi4uL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL2pvaW5fb3JkZXIub3V0ICAgIHwgIDUw MCArKysrCiAuLi4vcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvam9pbl9zdHJhdGVneS5vdXQgfCAg MzM5ICsrKwogLi4uL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL3BhcnRpdGlvbndpc2Uub3V0IHwg IDQyNiArKysrCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL3ByZXBhcmVkLm91dCAg fCAgIDY3ICsKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvc2Nhbi5vdXQgICAgICB8 ICA3NTcgKysrKysrCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL3NlbWlqb2luLm91 dCAgfCAgMzc3ICsrKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9zeW50YXgub3V0 ICAgIHwgIDE5MiArKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9tZXNvbi5idWlsZCAgICAgICAg ICAgIHwgICA2NiArCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BnX3BsYW5fYWR2aWNlLmMgICAg ICAgfCAgNDU2ICsrKysKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UuaCAg ICAgICB8ICAgNDUgKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2FzdC5jICAgICAgICAg ICAgIHwgIDM1MSArKysKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9hc3QuaCAgICAgICAg ICAgICB8ICAxODUgKysKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9pZGVudGlmaWVyLmMg ICAgICB8ICA0ODEgKysrKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2lkZW50aWZpZXIu aCAgICAgIHwgICA1MiArCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfam9pbi5jICAgICAg ICAgICAgfCAgNjM4ICsrKysrCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfam9pbi5oICAg ICAgICAgICAgfCAgMTA1ICsKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9vdXRwdXQuYyAg ICAgICAgICB8ICA1NzEgKysrKysKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9vdXRwdXQu aCAgICAgICAgICB8ICAgMjIgKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3BhcnNlci55 ICAgICAgICAgIHwgIDMwMSArKysKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9wbGFubmVy LmMgICAgICAgICB8IDIxOTggKysrKysrKysrKysrKysrKysKIGNvbnRyaWIvcGdfcGxhbl9hZHZp Y2UvcGdwYV9wbGFubmVyLmggICAgICAgICB8ICAgMTkgKwogY29udHJpYi9wZ19wbGFuX2Fkdmlj ZS9wZ3BhX3NjYW4uYyAgICAgICAgICAgIHwgIDI3MSArKwogY29udHJpYi9wZ19wbGFuX2Fkdmlj ZS9wZ3BhX3NjYW4uaCAgICAgICAgICAgIHwgICA4NSArCiBjb250cmliL3BnX3BsYW5fYWR2aWNl L3BncGFfc2Nhbm5lci5sICAgICAgICAgfCAgMjk3ICsrKwogY29udHJpYi9wZ19wbGFuX2Fkdmlj ZS9wZ3BhX3Ryb3ZlLmMgICAgICAgICAgIHwgIDUxNiArKysrCiBjb250cmliL3BnX3BsYW5fYWR2 aWNlL3BncGFfdHJvdmUuaCAgICAgICAgICAgfCAgMTE0ICsKIGNvbnRyaWIvcGdfcGxhbl9hZHZp Y2UvcGdwYV93YWxrZXIuYyAgICAgICAgICB8IDEwMjkgKysrKysrKysKIGNvbnRyaWIvcGdfcGxh bl9hZHZpY2UvcGdwYV93YWxrZXIuaCAgICAgICAgICB8ICAxNDEgKysKIGNvbnRyaWIvcGdfcGxh bl9hZHZpY2Uvc3FsL2dhdGhlci5zcWwgICAgICAgICB8ICAgODYgKwogY29udHJpYi9wZ19wbGFu X2FkdmljZS9zcWwvam9pbl9vcmRlci5zcWwgICAgIHwgIDE0NSArKwogY29udHJpYi9wZ19wbGFu X2FkdmljZS9zcWwvam9pbl9zdHJhdGVneS5zcWwgIHwgICA4NCArCiBjb250cmliL3BnX3BsYW5f YWR2aWNlL3NxbC9wYXJ0aXRpb253aXNlLnNxbCAgfCAgIDk5ICsKIGNvbnRyaWIvcGdfcGxhbl9h ZHZpY2Uvc3FsL3ByZXBhcmVkLnNxbCAgICAgICB8ICAgMzcgKwogY29udHJpYi9wZ19wbGFuX2Fk dmljZS9zcWwvc2Nhbi5zcWwgICAgICAgICAgIHwgIDE5NSArKwogY29udHJpYi9wZ19wbGFuX2Fk dmljZS9zcWwvc2VtaWpvaW4uc3FsICAgICAgIHwgIDExOCArCiBjb250cmliL3BnX3BsYW5fYWR2 aWNlL3NxbC9zeW50YXguc3FsICAgICAgICAgfCAgIDY4ICsKIGRvYy9zcmMvc2dtbC9jb250cmli LnNnbWwgICAgICAgICAgICAgICAgICAgICB8ICAgIDEgKwogZG9jL3NyYy9zZ21sL2ZpbGVsaXN0 LnNnbWwgICAgICAgICAgICAgICAgICAgIHwgICAgMSArCiBkb2Mvc3JjL3NnbWwvcGdwbGFuYWR2 aWNlLnNnbWwgICAgICAgICAgICAgICAgfCAgODEzICsrKysrKwogc3JjL3Rvb2xzL3BnaW5kZW50 L3R5cGVkZWZzLmxpc3QgICAgICAgICAgICAgIHwgICAzMyArCiA0NiBmaWxlcyBjaGFuZ2VkLCAx Mjk2MCBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2Fk dmljZS8uZ2l0aWdub3JlCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2Fkdmlj ZS9NYWtlZmlsZQogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvUkVB RE1FCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9n YXRoZXIub3V0CiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBl Y3RlZC9qb2luX29yZGVyLm91dAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9h ZHZpY2UvZXhwZWN0ZWQvam9pbl9zdHJhdGVneS5vdXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250 cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL3BhcnRpdGlvbndpc2Uub3V0CiBjcmVhdGUgbW9k ZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9wcmVwYXJlZC5vdXQKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL3NjYW4ub3V0 CiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9zZW1p am9pbi5vdXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVj dGVkL3N5bnRheC5vdXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNl L21lc29uLmJ1aWxkCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9w Z19wbGFuX2FkdmljZS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2Fkdmlj ZS9wZ19wbGFuX2FkdmljZS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2Fk dmljZS9wZ3BhX2FzdC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2Fkdmlj ZS9wZ3BhX2FzdC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9w Z3BhX2lkZW50aWZpZXIuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZp Y2UvcGdwYV9pZGVudGlmaWVyLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5f YWR2aWNlL3BncGFfam9pbi5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2Fk dmljZS9wZ3BhX2pvaW4uaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZp Y2UvcGdwYV9vdXRwdXQuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZp Y2UvcGdwYV9vdXRwdXQuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZp Y2UvcGdwYV9wYXJzZXIueQogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZp Y2UvcGdwYV9wbGFubmVyLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2 aWNlL3BncGFfcGxhbm5lci5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2Fk dmljZS9wZ3BhX3NjYW4uYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZp Y2UvcGdwYV9zY2FuLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNl L3BncGFfc2Nhbm5lci5sCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2Fkdmlj ZS9wZ3BhX3Ryb3ZlLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNl L3BncGFfdHJvdmUuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2Uv cGdwYV93YWxrZXIuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2Uv cGdwYV93YWxrZXIuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2Uv c3FsL2dhdGhlci5zcWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNl L3NxbC9qb2luX29yZGVyLnNxbAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9h ZHZpY2Uvc3FsL2pvaW5fc3RyYXRlZ3kuc3FsCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9w Z19wbGFuX2FkdmljZS9zcWwvcGFydGl0aW9ud2lzZS5zcWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBj b250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9wcmVwYXJlZC5zcWwKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9zY2FuLnNxbAogY3JlYXRlIG1vZGUgMTAwNjQ0 IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL3NlbWlqb2luLnNxbAogY3JlYXRlIG1vZGUgMTAw NjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL3N5bnRheC5zcWwKIGNyZWF0ZSBtb2RlIDEw MDY0NCBkb2Mvc3JjL3NnbWwvcGdwbGFuYWR2aWNlLnNnbWwKCmRpZmYgLS1naXQgYS9jb250cmli L01ha2VmaWxlIGIvY29udHJpYi9NYWtlZmlsZQppbmRleCAyZjBhODhkM2Y3Ny4uZGQwNGMyMGFj ZDIgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvTWFrZWZpbGUKKysrIGIvY29udHJpYi9NYWtlZmlsZQpA QCAtMzQsNiArMzQsNyBAQCBTVUJESVJTID0gXAogCQlwZ19mcmVlc3BhY2VtYXAgXAogCQlwZ19s b2dpY2FsaW5zcGVjdCBcCiAJCXBnX292ZXJleHBsYWluIFwKKwkJcGdfcGxhbl9hZHZpY2UgXAog CQlwZ19wcmV3YXJtCVwKIAkJcGdfc3RhdF9zdGF0ZW1lbnRzIFwKIAkJcGdfc3VyZ2VyeQlcCmRp ZmYgLS1naXQgYS9jb250cmliL21lc29uLmJ1aWxkIGIvY29udHJpYi9tZXNvbi5idWlsZAppbmRl eCBkZWYxMzI1N2NiZS4uNWE3NTJlYWMzNDcgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvbWVzb24uYnVp bGQKKysrIGIvY29udHJpYi9tZXNvbi5idWlsZApAQCAtNDgsNiArNDgsNyBAQCBzdWJkaXIoJ3Bn Y3J5cHRvJykKIHN1YmRpcigncGdfZnJlZXNwYWNlbWFwJykKIHN1YmRpcigncGdfbG9naWNhbGlu c3BlY3QnKQogc3ViZGlyKCdwZ19vdmVyZXhwbGFpbicpCitzdWJkaXIoJ3BnX3BsYW5fYWR2aWNl JykKIHN1YmRpcigncGdfcHJld2FybScpCiBzdWJkaXIoJ3Bncm93bG9ja3MnKQogc3ViZGlyKCdw Z19zdGF0X3N0YXRlbWVudHMnKQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS8u Z2l0aWdub3JlIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS8uZ2l0aWdub3JlCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4xOWExNDI1MzAxOQotLS0gL2Rldi9udWxsCisr KyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDMgQEAKKy9w Z3BhX3BhcnNlci5oCisvcGdwYV9wYXJzZXIuYworL3BncGFfc2Nhbm5lci5jCmRpZmYgLS1naXQg YS9jb250cmliL3BnX3BsYW5fYWR2aWNlL01ha2VmaWxlIGIvY29udHJpYi9wZ19wbGFuX2Fkdmlj ZS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZDJhODIz M2YzODcKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL01ha2VmaWxl CkBAIC0wLDAgKzEsNDMgQEAKKyMgY29udHJpYi9wZ19wbGFuX2FkdmljZS9NYWtlZmlsZQorCitN T0RVTEVfYmlnID0gcGdfcGxhbl9hZHZpY2UKK09CSlMgPSBcCisJJChXSU4zMlJFUykgXAorCXBn X3BsYW5fYWR2aWNlLm8gXAorCXBncGFfYXN0Lm8gXAorCXBncGFfaWRlbnRpZmllci5vIFwKKwlw Z3BhX2pvaW4ubyBcCisJcGdwYV9vdXRwdXQubyBcCisJcGdwYV9wYXJzZXIubyBcCisJcGdwYV9w bGFubmVyLm8gXAorCXBncGFfc2Nhbi5vIFwKKwlwZ3BhX3NjYW5uZXIubyBcCisJcGdwYV90cm92 ZS5vIFwKKwlwZ3BhX3dhbGtlci5vCisKK1BHRklMRURFU0MgPSAicGdfcGxhbl9hZHZpY2UgLSBo ZWxwIHRoZSBwbGFubmVyIGdldCB0aGUgcmlnaHQgcGxhbiIKKworUkVHUkVTUyA9IGdhdGhlciBq b2luX29yZGVyIGpvaW5fc3RyYXRlZ3kgcGFydGl0aW9ud2lzZSBwcmVwYXJlZCBcCisJc2NhbiBz ZW1pam9pbiBzeW50YXgKKworRVhUUkFfQ0xFQU4gPSBwZ3BhX3BhcnNlci5oIHBncGFfcGFyc2Vy LmMgcGdwYV9zY2FubmVyLmMKKworaWZkZWYgVVNFX1BHWFMKK1BHX0NPTkZJRyA9IHBnX2NvbmZp ZworUEdYUyA6PSAkKHNoZWxsICQoUEdfQ09ORklHKSAtLXBneHMpCitpbmNsdWRlICQoUEdYUykK K2Vsc2UKK3N1YmRpciA9IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UKK3RvcF9idWlsZGRpciA9IC4u Ly4uCitpbmNsdWRlICQodG9wX2J1aWxkZGlyKS9zcmMvTWFrZWZpbGUuZ2xvYmFsCitpbmNsdWRl ICQodG9wX3NyY2RpcikvY29udHJpYi9jb250cmliLWdsb2JhbC5taworZW5kaWYKKworIyBTZWUg bm90ZXMgaW4gc3JjL2JhY2tlbmQvcGFyc2VyL01ha2VmaWxlIGFib3V0IHRoZSBmb2xsb3dpbmcg dHdvIHJ1bGVzCitwZ3BhX3BhcnNlci5oOiBwZ3BhX3BhcnNlci5jCisJdG91Y2ggJEAKKworcGdw YV9wYXJzZXIuYzogQklTT05GTEFHUyArPSAtZAorCisjIEZvcmNlIHRoZXNlIGRlcGVuZGVuY2ll cyB0byBiZSBrbm93biBldmVuIHdpdGhvdXQgZGVwZW5kZW5jeSBpbmZvIGJ1aWx0OgorcGdwYV9w YXJzZXIubyBwZ3BhX3NjYW5uZXIubzogcGdwYV9wYXJzZXIuaApkaWZmIC0tZ2l0IGEvY29udHJp Yi9wZ19wbGFuX2FkdmljZS9SRUFETUUgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL1JFQURNRQpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYjBlNGZkMWQ2ZTEKLS0tIC9k ZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL1JFQURNRQpAQCAtMCwwICsxLDI2 MCBAQAorY29udHJpYi9wZ19wbGFuX2FkdmljZS9SRUFETUUKKworUGxhbiBBZHZpY2UKKz09PT09 PT09PT09CisKK1RoaXMgbW9kdWxlIGltcGxlbWVudHMgYSBtaW5pLWxhbmd1YWdlIGZvciAicGxh biBhZHZpY2UiIHRoYXQgYWxsb3dzIGZvcgorY29udHJvbCBvZiBjZXJ0YWluIGtleSBwbGFubmVy IGRlY2lzaW9ucy4gR29hbHMgaW5jbHVkZSAoMSkgZW5mb3JjaW5nIHBsYW4KK3N0YWJpbGl0eSAo bXkgcHJldmlvdXMgcGxhbiB3YXMgZ29vZCBhbmQgSSB3b3VsZCBsaWtlIHRvIGtlZXAgZ2V0dGlu ZyBhCitzaW1pbGFyIG9uZSkgYW5kICgyKSBhbGxvd2luZyB1c2VycyB0byBleHBlcmltZW50IHdp dGggcGxhbnMgb3RoZXIgdGhhbgordGhlIG9uZSBwcmVmZXJyZWQgYnkgdGhlIG9wdGltaXplci4g Tm9uLWdvYWxzIGluY2x1ZGUgKDEpIGNvbnRyb2xsaW5nCitldmVyeSBwb3NzaWJsZSBwbGFubmVy IGRlY2lzaW9uIGFuZCAoMikgZm9yY2luZyBjb25zaWRlcmF0aW9uIG9mIHBsYW5zCit0aGF0IHRo ZSBvcHRpbWl6ZXIgcmVqZWN0cyBmb3IgcmVhc29ucyBvdGhlciB0aGFuIGNvc3QuIChUaGVyZSBp cyBzb21lCityb29tIGZvciBiaWtlc2hlZGRpbmcgYWJvdXQgd2hhdCBleGFjdGx5IHRoaXMgbm9u LWdvYWwgbWVhbnM6IHdoYXQgaWYKK3dlIHNraXAgcGF0aCBnZW5lcmF0aW9uIGVudGlyZWx5IGZv ciBhIGNlcnRhaW4gY2FzZSBvbiB0aGUgdGhlb3J5IHRoYXQKK3dlIGtub3cgaXQgY2Fubm90IHdp biBvbiBjb3N0PyBEb2VzIHRoYXQgY291bnQgYXMgYSBjb3N0LWJhc2VkIHJlamVjdGlvbgorZXZl biB0aG91Z2ggbm8gY29zdCB3YXMgZXZlciBjb21wdXRlZD8pCisKK0dlbmVyYWxseSwgcGxhbiBh ZHZpY2UgaXMgYSBzZXJpZXMgb2Ygd2hpdGVzcGFjZS1zZXBhcmF0ZWQgYWR2aWNlIGl0ZW1zLAor ZWFjaCBvZiB3aGljaCBhcHBsaWVzIGFuIGFkdmljZSB0YWcgdG8gYSBsaXN0IG9mIGFkdmljZSB0 YXJnZXRzLiBGb3IKK2V4YW1wbGUsICJTRVFfU0NBTihmb28pIEhBU0hfSk9JTihiYXJAc3MpIiBj b250YWlucyB0d28gaXRlbXMgb2YgYWR2aWNlLAordGhlIGZpcnN0IG9mIHdoaWNoIGFwcGxpZXMg dGhlIFNFUV9TQ0FOIHRhZyB0byAiZm9vIiBhbmQgdGhlIHNlY29uZCBvZgord2hpY2ggYXBwbGll cyB0aGUgSEFTSF9KT0lOIHRhZyB0byAiYmFyQHNzIi4gSW4gdGhpcyBzaW1wbGUgZXhhbXBsZSwg ZWFjaAordGFyZ2V0IGlkZW50aWZpZXMgYSBzaW5nbGUgcmVsYXRpb247IHNlZSAiUmVsYXRpb24g SWRlbnRpZmllcnMiLCBiZWxvdy4KK0FkdmljZSB0YWdzIGNhbiBhbHNvIGJlIGFwcGxpZWQgdG8g Z3JvdXBzIG9mIHJlbGF0aW9uczsgZm9yIGV4YW1wbGUsCisiSEFTSF9KT0lOKGJheiAoYmxldGNo IHF1dXgpKSIgYXBwbGllcyB0aGUgSEFTSF9KT0lOIHRhZyB0byB0aGUgc2luZ2xlCityZWxhdGlv biBpZGVudGlmaWVyICJiYXoiIGFzIHdlbGwgYXMgdG8gdGhlIDItaXRlbSBsaXN0IGNvbnRhaW5p bmcKKyJibGV0Y2giIGFuZCAicXV1eCIuCisKK0NyaXRpY2FsbHksIHRoaXMgbW9kdWxlIGtub3dz IGJvdGggaG93IHRvIGdlbmVyYXRlIHBsYW4gYWR2aWNlIGZyb20gYW4KK2FscmVhZHktZXhpc3Rp bmcgcGxhbiwgYW5kIGFsc28gaG93IHRvIGVuZm9yY2UgaXQgZHVyaW5nIGZ1dHVyZSBwbGFubmlu ZworY3ljbGVzLiBFdmVyeXRoaW5nIGl0IGRvZXMgaXMgaW50ZW5kZWQgdG8gYmUgInJvdW5kLXRy aXAgc2FmZSI6IGlmIHlvdQorZ2VuZXJhdGUgYWR2aWNlIGZyb20gYSBwbGFuIGFuZCB0aGVuIGZl ZWQgdGhhdCBiYWNrIGludG8gYSBmdXR1cmUgcGxhbm5pbmcKK2N5Y2xlLCBlYWNoIHBpZWNlIG9m IGFkdmljZSBzaG91bGQgYmUgZ3VhcmFudGVlZCB0byBhcHBseSB0byBleGFjdGx5IHRoZQorc2Ft ZSBwYXJ0IG9mIHRoZSBxdWVyeSBmcm9tIHdoaWNoIGl0IHdhcyBnZW5lcmF0ZWQgd2l0aG91dCBh bWJpZ3VpdHkgb3IKK2d1ZXNzd29yaywgYW5kIGl0IHNob3VsZCBzdWNjZXNzZnVsbHkgZW5mb3Jj ZSB0aGUgc2FtZSBwbGFubmluZyBkZWNpc2lvbiB0aGF0CitsZWQgdG8gaXQgYmVpbmcgZ2VuZXJh dGVkIGluIHRoZSBmaXJzdCBwbGFjZS4gTm90ZSB0aGF0IHRoZXJlIGlzIG5vCitpbnRlbnRpb24g dGhhdCB0aGVzZSBndWFyYW50ZWVzIGhvbGQgaW4gdGhlIHByZXNlbmNlIG9mIGludGVydmVuaW5n IERETDsKK2UuZy4gaWYgeW91IGNoYW5nZSB0aGUgcHJvcGVydGllcyBvZiBhIGZ1bmN0aW9uIHNv IHRoYXQgYSBzdWJxdWVyeSBpcyBubworbG9uZ2VyIGlubGluZWQsIG9yIGlmIHlvdSBkcm9wIGFu IGluZGV4IG5hbWVkIGluIHRoZSBwbGFuIGFkdmljZSwgdGhlIGFkdmljZQoraXNuJ3QgZ29pbmcg dG8gd29yayBhbnkgbW9yZS4gVGhhdCdzIGV4cGVjdGVkLgorCitUaGlzIG1vZHVsZSBhaW1zIHRv IGZvcmNlIHRoZSBwbGFubmVyIHRvIGZvbGxvdyBhbnkgcHJvdmlkZWQgYWR2aWNlIHdpdGhvdXQK K3JlZ2FyZCB0byB3aGV0aGVyIGl0IGFwcGVhcnMgdG8gYmUgZ29vZCBhZHZpY2Ugb3IgYmFkIGFk dmljZS4gSWYgdGhlCit1c2VyIHByb3ZpZGVzIGJhZCBhZHZpY2UsIHdoZXRoZXIgZGVyaXZlZCBm cm9tIGEgcHJldmlvdXNseS1nZW5lcmF0ZWQgcGxhbgorb3IgbWFudWFsbHkgd3JpdHRlbiwgdGhl eSBtYXkgZ2V0IGEgYmFkIHBsYW4uIFdlIHJlZ2FyZCB0aGlzIGFzIHVzZXIgZXJyb3IsCitub3Qg YSBkZWZlY3QgaW4gdGhpcyBtb2R1bGUuIEl0IHNlZW1zIGxpa2VseSB0aGF0IGFwcGx5aW5nIGFk dmljZQoranVkaWNpb3VzbHkgYW5kIG9ubHkgd2hlbiB0cnVseSByZXF1aXJlZCB0byBhdm9pZCBw cm9ibGVtcyB3aWxsIGJlIGEgbW9yZQorc3VjY2Vzc2Z1bCBzdHJhdGVneSB0aGFuIGFwcGx5aW5n IGl0IHdpdGggYSBicm9hZCBicnVzaCwgYnV0IHVzZXJzIGFyZSBmcmVlCit0byBleHBlcmltZW50 IHdpdGggd2hhdGV2ZXIgc3RyYXRlZ2llcyB0aGV5IHRoaW5rIGJlc3QuCisKK1JlbGF0aW9uIElk ZW50aWZpZXJzCis9PT09PT09PT09PT09PT09PT09PQorCitVbmlxdWVseSBpZGVudGlmeWluZyB0 aGUgcGFydCBvZiBhIHF1ZXJ5IHRvIHdoaWNoIGEgY2VydGFpbiBwaWVjZSBvZgorYWR2aWNlIGFw cGxpZXMgaXMgaGFyZGVyIHRoYW4gaXQgc291bmRzLiBPdXIgYmFzaWMgYXBwcm9hY2ggaXMgdG8g dXNlCityZWxhdGlvbiBhbGlhc2VzIGFzIGEgc3RhcnRpbmcgcG9pbnQsIGFuZCB0aGVuIGRpc2Ft YmlndWF0ZS4gVGhlcmUgYXJlCit0aHJlZSB3YXlzIHRoYXQgdGhlIHNhbWUgcmVsYXRpb24gYWxp YXMgY2FuIG9jY3VyIG11bHRpcGxlIHRpbWVzOgorCisxLiBJdCBjYW4gYXBwZWFyIGluIG1vcmUg dGhhbiBvbmUgc3VicXVlcnkuCisKKzIuIEl0IGNhbiBhcHBlYXIgbW9yZSB0aGFuIG9uY2UgaW4g dGhlIHNhbWUgc3VicXVlcnksCisgICBlLmcuIChmb28gSk9JTiBiYXIpIHggSk9JTiBmb28uCisK KzMuIFRoZSB0YWJsZSBjYW4gYmUgcGFydGl0aW9uZWQuCisKK0FueSBjb21iaW5hdGlvbiBvZiB0 aGVzZSB0aGluZ3MgY2FuIG9jY3VyIHNpbXVsdGFuZW91c2x5LiBUaGVyZWZvcmUsIG91cgorZ2Vu ZXJhbCBzeW50YXggZm9yIGEgcmVsYXRpb24gaWRlbnRpZmllciBpczoKKworYWxpYXNfbmFtZSNv Y2N1cnJlbmNlX251bWJlci9wYXJ0aXRpb25fc2NoZW1hLnBhcnRpdGlvbl9uYW1lQHBsYW5fbmFt ZQorCitBbGwgY29tcG9uZW50cyBleGNlcHQgZm9yIHRoZSBhbGlhc19uYW1lIGFyZSBvcHRpb25h bCBhbmQgaW5jbHVkZWQgb25seQord2hlbiByZXF1aXJlZC4gV2hlbiBhIGNvbXBvbmVudCBpcyBv bWl0dGVkLCB0aGUgYXNzb2NpYXRlZCBwdW5jdHVhdGlvbgorbXVzdCBhbHNvIGJlIG9taXR0ZWQu IE9jY3VycmVuY2UgbnVtYmVycyBhcmUgY291bnRlZCBpZ25vcmluZyBjaGlsZHJlbiBvZgorcGFy dGl0aW9uZWQgdGFibGVzLiBXaGVuIHRoZSBnZW5lcmF0ZWQgb2NjdXJyZW5jZSBudW1iZXIgaXMg MSwgd2Ugb21pdAordGhlIG9jY3VycmVuY2UgbnVtYmVyLiBUaGUgcGFydGl0aW9uIHNjaGVtYSBh bmQgcGFydGl0aW9uIG5hbWUgYXJlIGluY2x1ZGVkCitvbmx5IGZvciBjaGlsZHJlbiBvZiBwYXJ0 aXRpb25lZCB0YWJsZXMuIEluIGdlbmVyYXRlZCBhZHZpY2UsIHRoZQorcGFydGl0aW9uX3NjaGVt YSBpcyBhbHdheXMgaW5jbHVkZWQgd2hlbmV2ZXIgdGhlcmUgaXMgYSBwYXJ0aXRpb25fbmFtZSwK K2J1dCB1c2VyLXdyaXR0ZW4gYWR2aWNlIG1heSBtZW50aW9uIHRoZSBuYW1lIGFuZCBvbWl0IHRo ZSBzY2hlbWEuIFRoZQorcGxhbl9uYW1lIGlzIG9taXR0ZWQgZm9yIHRoZSB0b3AtbGV2ZWwgUGxh bm5lckluZm8uCisKK1NjYW4gQWR2aWNlCis9PT09PT09PT09PQorCitGb3IgbWFueSB0eXBlcyBv ZiBzY2FuLCBubyBhZHZpY2UgaXMgZ2VuZXJhdGVkIG9yIHBvc3NpYmxlOyBmb3IgaW5zdGFuY2Us CithIHN1YnF1ZXJ5IGlzIGFsd2F5cyBzY2FubmVkIHVzaW5nIGEgc3VicXVlcnkgc2Nhbi4gV2hp bGUgdGhhdCBzY2FuIG1heSBiZQorZWxpZGVkIHZpYSBzZXRyZWZzIHByb2Nlc3NpbmcsIHRoaXMg ZG9lc24ndCBjaGFuZ2UgdGhlIGZhY3QgdGhhdCBvbmx5IG9uZQorYmFzaWMgYXBwcm9hY2ggZXhp c3RzLiBIZW5jZSwgc2NhbiBhZHZpY2UgYXBwbGllcyBtb3N0bHkgdG8gcmVsYXRpb25zLCB3aGlj aAorY2FuIGJlIHNjYW5uZWQgaW4gbXVsdGlwbGUgd2F5cy4KKworV2UgdGVuZCB0byB0aGluayBv ZiBhIHNjYW4gYXMgdGFyZ2V0aW5nIGEgc2luZ2xlIHJlbGF0aW9uLCBhbmQgdGhhdCdzCitub3Jt YWxseSB0aGUgY2FzZSwgYnV0IGl0IGRvZXNuJ3QgaGF2ZSB0byBiZS4gRm9yIGluc3RhbmNlLCBp ZiBhIGpvaW4gaXMKK3Byb3ZlbiBlbXB0eSwgdGhlIHdob2xlIHRoaW5nIG1heSBiZSByZXBsYWNl ZCB3aXRoIGEgc2luZ2xlIFJlc3VsdCBub2RlCit3aGljaCwgaW4gZWZmZWN0LCBpcyBhIGRlZ2Vu ZXJhdGUgc2NhbiBvZiBldmVyeSByZWxhdGlvbiBpbiB0aGUgY29sbGFwc2VkCitwb3J0aW9uIG9m IHRoZSBqb2luIHRyZWUuIFNpbWlsYXJseSwgaXQncyBwb3NzaWJsZSB0byBpbmplY3QgYSBjdXN0 b20gc2NhbgoraW4gc3VjaCBhIHdheSB0aGF0IGl0IHJlcGxhY2VzIGFuIGVudGlyZSBqb2luLiBJ ZiB3ZSBldmVyIGVtaXQgYWR2aWNlCitmb3IgdGhlc2UgY2FzZXMsIGl0IHdvdWxkIHRhcmdldCBz ZXRzIG9mIHJlbGF0aW9uIGlkZW50aWZpZXJzIHN1cnJvdW5kZWQKK2J5IHBhcmVudGhlc2VzLCBl LmcuLCBTT01FX1NPUlRfT0ZfU0NBTihmb28gKGJhciBiYXopKSB3b3VsZCBtZWFuIHRoYXQKK3Ro ZSBnaXZlbiBzY2FuIHR5cGUgd291bGQgYmUgdXNlZCBmb3IgZm9vIGFzIGEgc2luZ2xlIHJlbGF0 aW9uIGFuZCBhbHNvIHRoZQorY29tYmluYXRpb24gb2YgYmFyIGFuZCBiYXogYXMgYSBqb2luIHBy b2R1Y3QuIFdlIGhhdmUgbm8gc3VjaCBjYXNlcyBhdAorcHJlc2VudC4KKworRm9yIGluZGV4IGFu ZCBpbmRleC1vbmx5IHNjYW5zLCBib3RoIHRoZSByZWxhdGlvbiBiZWluZyBzY2FubmVkIGFuZCB0 aGUKK2luZGV4IG9yIGluZGV4ZXMgYmVpbmcgdXNlZCBtdXN0IGJlIHNwZWNpZmllZC4gRm9yIGV4 YW1wbGUsIElOREVYX1NDQU4oZm9vCitmb29fYV9pZHggYmFyIGJhcl9iX2lkeCkgaW5kaWNhdGVz IHRoYXQgYW4gaW5kZXggc2NhbiAobm90IGFuIGluZGV4LW9ubHkKK3NjYW4pIHNob3VsZCBiZSB1 c2VkIG9uIGZvb19hX2lkeCB3aGVuIHNjYW5uaW5nIGZvbywgYW5kIHRoYXQgYW4gaW5kZXggc2Nh bgorc2hvdWxkIGJlIHVzZWQgb24gYmFyX2JfaWR4IHdoZW4gc2Nhbm5pbmcgYmFyLgorCitCaXRt YXAgaGVhcCBzY2FucyBjdXJyZW50bHkgZG8gbm90IGFsbG93IGZvciBhbiBpbmRleCBzcGVjaWZp Y2F0aW9uOgorQklUTUFQX0hFQVBfU0NBTihmb28gYmFyKSBzaW1wbHkgbWVhbnMgdGhhdCBlYWNo IG9mIGZvbyBhbmQgYmFyIHNob3VsZCB1c2UKK3NvbWUgc29ydCBvZiBiaXRtYXAgaGVhcCBzY2Fu LgorCitKb2luIE9yZGVyIEFkdmljZQorPT09PT09PT09PT09PT09PT0KKworVGhlIEpPSU5fT1JE RVIgdGFnIHNwZWNpZmllcyB0aGUgb3JkZXIgaW4gd2hpY2ggc2V2ZXJhbCB0YWJsZXMgdGhhdCBh cmUKK3BhcnQgb2YgdGhlIHNhbWUgam9pbiBwcm9ibGVtIHNob3VsZCBiZSBqb2luZWQuIEVhY2gg c3VicXVlcnkgKGV4Y2VwdCBmb3IKK3Rob3NlIHRoYXQgYXJlIGlubGluZWQpIGlzIGEgc2VwYXJh dGUgam9pbiBwcm9ibGVtLiBXaXRoaW4gYSBzdWJxdWVyeSwKK3BhcnRpdGlvbndpc2Ugam9pbnMg Y2FuIGNyZWF0ZSBhZGRpdGlvbmFsLCBzZXBhcmF0ZSBqb2luIHByb2JsZW1zLiBIZW5jZSwKK3F1 ZXJpZXMgaW52b2x2aW5nIHBhcnRpdGlvbndpc2Ugam9pbnMgbWF5IHVzZSBKT0lOX09SREVSKCkg bWFueSB0aW1lcy4KKworV2UgdGFrZSB0aGUgY2Fub25pY2FsIGpvaW4gc3RydWN0dXJlIHRvIGJl IGFuIG91dGVyLWRlZXAgdHJlZSwgc28KK0pPSU5fT1JERVIodDEgdDIgdDMpIHNheXMgdGhhdCB0 MSBpcyB0aGUgZHJpdmluZyB0YWJsZSBhbmQgc2hvdWxkIGJlIGpvaW5lZAorZmlyc3QgdG8gdDIg YW5kIHRoZW4gdG8gdDMuIElmIHRoZSBqb2luIHByb2JsZW0gaW52b2x2ZXMgYWRkaXRpb25hbCB0 YWJsZXMsCit0aGV5IGNhbiBiZSBqb2luZWQgaW4gYW55IG9yZGVyIGFmdGVyIHRoZSBqb2luIGJl dHdlZW4gdDEsIHQyLCBhbmQgdDMgaGFzCitiZWVuIGNvbnN0cnVjdGVkLiBHZW5lcmF0ZWQgam9p biBhZHZpY2UgYWx3YXlzIG1lbnRpb25zIGFsbCB0YWJsZXMKK2luIHRoZSBqb2luIHByb2JsZW0s IGJ1dCBtYW51YWxseSB3cml0dGVuIGpvaW4gYWR2aWNlIG5lZWQgbm90IGRvIHNvLgorCitGb3Ig dHJlZXMgd2hpY2ggYXJlIG5vdCBvdXRlci1kZWVwLCBwYXJlbnRoZXNlcyBjYW4gYmUgdXNlZC4g Rm9yIGV4YW1wbGUsCitKT0lOX09SREVSKHQxICh0MiB0MykpIHNheXMgdGhhdCB0aGUgdG9wLWxl dmVsIGpvaW4gc2hvdWxkIGhhdmUgdDEgb24gdGhlCitvdXRlciBzaWRlIGFuZCBhIGpvaW4gYmV0 d2VlbiB0MiBhbmQgdDMgb24gdGhlIGlubmVyIHNpZGUuIFRoYXQgam9pbiBzaG91bGQKK2JlIGNv bnN0cnVjdGVkIHNvIHRoYXQgdDIgaXMgb24gdGhlIG91dGVyIHNpZGUgYW5kIHQzIGlzIG9uIHRo ZSBpbm5lciBzaWRlLgorCitJbiBzb21lIGNhc2VzLCBpdCdzIG5vdCBwb3NzaWJsZSB0byBmdWxs eSBzcGVjaWZ5IHRoZSBqb2luIG9yZGVyIGluIHRoaXMgd2F5LgorRm9yIGV4YW1wbGUsIGlmIHQy IGFuZCB0MyBhcmUgYmVpbmcgc2Nhbm5lZCBieSBhIHNpbmdsZSBjdXN0b20gc2NhbiBvciBmb3Jl aWduCitzY2FuLCBvciBpZiBhIHBhcnRpdGlvbndpc2Ugam9pbiBpcyBiZWluZyBwZXJmb3JtZWQg YmV0d2VlbiB0aG9zZSB0YWJsZXMsIHRoZW4KK2l0J3MgaW1wb3NzaWJsZSB0byBzYXkgdGhhdCB0 MiBpcyB0aGUgb3V0ZXIgdGFibGUgYW5kIHQzIGlzIHRoZSBpbm5lciB0YWJsZSwKK29yIHRoZSBv dGhlciB3YXkgYXJvdW5kOyBpdCdzIGp1c3QgdW5kZWZpbmVkLiBJbiBzdWNoIGNhc2VzLCB3ZSBn ZW5lcmF0ZQoram9pbiBhZHZpY2UgdGhhdCB1c2VzIGN1cmx5IGJyYWNlcywgaW50ZW5kaW5nIHRv IGluZGljYXRlIGEgbGFjayBvZiBvcmRlcmluZzoKK0pPSU5fT1JERVIodDEge3QyIHQzfSkgc2F5 cyB0aGF0IHRoZSB1cHBlcm1vc3Qgam9pbiBzaG91bGQgaGF2ZSB0MSBvbiB0aGUgb3V0ZXIKK3Np ZGUgYW5kIHNvbWUga2luZCBvZiBqb2luIGJldHdlZW4gdDIgYW5kIHQzIG9uIHRoZSBpbm5lciBz aWRlLCBidXQgd2l0aG91dAorc2F5aW5nIGhvdyB0aGF0IGpvaW4gbXVzdCBiZSBwZXJmb3JtZWQg b3IgYW55dGhpbmcgYWJvdXQgd2hpY2ggcmVsYXRpb24gc2hvdWxkCithcHBlYXIgb24gd2hpY2gg c2lkZSBvZiB0aGUgam9pbiwgb3IgZXZlbiB3aGV0aGVyIHRoaXMga2luZCBvZiBqb2luIGhhcyBz aWRlcy4KKworSm9pbiBNZXRob2QgQWR2aWNlCis9PT09PT09PT09PT09PT09PT0KKworVGFncyBz dWNoIGFzIE5FU1RFRF9MT09QX1BMQUlOIHNwZWNpZnkgdGhlIG1ldGhvZCB0aGF0IHNob3VsZCBi ZSB1c2VkIHRvCitwZXJmb3JtIGEgY2VydGFpbiBqb2luLiBNb3JlIHNwZWNpZmljYWxseSwgTkVT VEVEX0xPT1BfUExBSU4oeCAoeSB6KSkgc2F5cwordGhhdCB0aGUgcGxhbiBzaG91bGQgcHV0IHRo ZSByZWxhdGlvbiB3aG9zZSBpZGVudGlmaWVyIGlzICJ4IiBvbiB0aGUgaW5uZXIKK3NpZGUgb2Yg YSBwbGFpbiBuZXN0ZWQgbG9vcCAob25lIHdpdGhvdXQgbWF0ZXJpYWxpemF0aW9uIG9yIG1lbW9p emF0aW9uKQorYW5kIHRoYXQgaXQgc2hvdWxkIGFsc28gcHV0IGEgam9pbiBiZXR3ZWVuIHRoZSBy ZWxhdGlvbiB3aG9zZSBpZGVudGlmaWVyIGlzCisieSIgYW5kIHRoZSByZWxhdGlvbiB3aG9zZSBp ZGVudGlmaWVyIGlzICJ6IiBvbiB0aGUgaW5uZXIgc2lkZSBvZiBhIG5lc3RlZAorbG9vcC4gSGVu Y2UsIGZvciBhbiBOLXRhYmxlIGpvaW4gcHJvYmxlbSwgdGhlcmUgd2lsbCBiZSBOLTEgcGllY2Vz IG9mIGpvaW4KK21ldGhvZCBhZHZpY2U7IG5vIGpvaW4gbWV0aG9kIGFkdmljZSBpcyByZXF1aXJl ZCBmb3IgdGhlIG91dGVybW9zdAordGFibGUgaW4gdGhlIGpvaW4gcHJvYmxlbS4KKworQ29uc2lk ZXJpbmcgdGhhdCB3ZSBoYXZlIGJvdGggam9pbiBvcmRlciBhZHZpY2UgYW5kIGpvaW4gbWV0aG9k IGFkdmljZSwKK2l0IG1pZ2h0IHNlZW0gbmF0dXJhbCB0byBzYXkgdGhhdCBORVNURURfTE9PUF9Q TEFJTih4KSBzaG91bGQgYmUgcmVkZWZpbmVkCit0byBtZWFuIHRoYXQgeCBzaG91bGQgYXBwZWFy IGJ5IGl0c2VsZiBvbiBvbmUgc2lkZSBvciB0aGUgb3RoZXIgb2YgYSBuZXN0ZWQKK2xvb3AsIHJh dGhlciB0aGFuIHNwZWNpZmljYWxseSBvbiB0aGUgaW5uZXIgc2lkZSwgYnV0IHRoaXMgZGVmaW5p dGlvbiBhcHBlYXJzCit1c2VsZXNzIGluIHByYWN0aWNlLiBJdCBnaXZlcyB0aGUgcGxhbm5lciB0 b28gbXVjaCBmcmVlZG9tIHRvIGRvIHRoaW5ncyB0aGF0CitiZWFyIGxpdHRsZSByZXNlbWJsYW5j ZSB0byB3aGF0IHRoZSB1c2VyIHByb2JhYmx5IGhhZCBpbiBtaW5kLiBUaGlzIG1ha2VzCitvbmx5 IGEgbGltaXRlZCBhbW91bnQgb2YgcHJhY3RpY2FsIGRpZmZlcmVuY2UgaW4gdGhlIGNhc2Ugb2Yg YSBtZXJnZSBqb2luIG9yCit1bnBhcmFtZXRlcml6ZWQgbmVzdGVkIGxvb3AsIGJ1dCBmb3IgYSBw YXJhbWV0ZXJpemVkIG5lc3RlZCBsb29wIG9yIGEgaGFzaAoram9pbiwgdGhlIHR3byBzaWRlcyBh cmUgdHJlYXRlZCB2ZXJ5IGRpZmZlcmVudGx5LCBhbmQgc2F5aW5nIHRoYXQgYSBjZXJ0YWluCity ZWxhdGlvbiBzaG91bGQgYmUgaW52b2x2ZWQgaW4gb25lIG9mIHRob3NlIG9wZXJhdGlvbnMgd2l0 aG91dCBzYXlpbmcgd2hpY2gKK3JvbGUgaXQgc2hvdWxkIHRha2UgaXNuJ3Qgc2F5aW5nIG11Y2gu CisKK1RoaXMgY2hvaWNlIG9mIGRlZmluaXRpb24gaW1wbGllcyB0aGF0IGpvaW4gbWV0aG9kIGFk dmljZSBhbHNvIGltcG9zZXMgc29tZQoram9pbiBvcmRlciBjb25zdHJhaW50cy4gRm9yIGV4YW1w bGUsIGdpdmVuIGEgam9pbiBiZXR3ZWVuIGZvbyBhbmQgYmFyLAorSEFTSF9KT0lOKGJhcikgaW1w bGllcyB0aGF0IGZvbyBpcyB0aGUgZHJpdmluZyB0YWJsZS4gT3RoZXJ3aXNlLCBpdCB3b3VsZAor YmUgaW1wb3NzaWJsZSB0byBwdXQgYmFyIGJlbmVhdGggdGhlIGlubmVyIHNpZGUgb2YgYSBIYXNo IEpvaW4uCisKK05vdGUgdGhhdCwgZ2l2ZW4gdGhpcyBkZWZpbml0aW9uLCBpdCdzIHJlYXNvbmFi bGUgdG8gY29uc2lkZXIgZGVsZXRpbmcgdGhlCitqb2luIG9yZGVyIGFkdmljZSBidXQgYXBwbHlp bmcgdGhlIGpvaW4gbWV0aG9kIGFkdmljZS4gRm9yIGV4YW1wbGUsCitjb25zaWRlciBhIHN0YXIg c2NoZW1hIHdpdGggdGFibGVzIGZhY3QsIGRpbTEsIGRpbTIsIGRpbTMsIGRpbTQsIGFuZCBkaW01 LgorVGhlIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGFkdmljZSBtaWdodCBzcGVjaWZ5IEpPSU5f T1JERVIoZmFjdCBkaW0xIGRpbTMKK2RpbTQgZGltMiBkaW01KSBIQVNIX0pPSU4oZGltMiBkaW00 KSBORVNURURfTE9PUF9QTEFJTihkaW0xIGRpbTMgZGltNSkuCitEZWxldGluZyB0aGUgSk9JTl9P UkRFUiBhZHZpY2UgYWxsb3dzIHRoZSBwbGFubmVyIHRvIHJlb3JkZXIgdGhlIGpvaW5zCitob3dl dmVyIGl0IGxpa2VzIHdoaWxlIHN0aWxsIGZvcmNpbmcgdGhlIHNhbWUgY2hvaWNlIG9mIGpvaW4g bWV0aG9kLiBUaGlzCitzZWVtcyBwb3RlbnRpYWxseSB1c2VmdWwsIGFuZCBpcyBvbmUgcmVhc29u IHdoeSBhIHVuaWZpZWQgc3ludGF4IHRoYXQgY29udHJvbHMKK2JvdGggam9pbiBvcmRlciBhbmQg am9pbiBtZXRob2QgaW4gYSBzaW5nbGUgbG9jdXRpb24gd2FzIG5vdCBjaG9zZW4uCisKK0Fkdmlj ZSBDb21wbGV0ZW5lc3MKKz09PT09PT09PT09PT09PT09PT0KKworQW4gZXNzZW50aWFsIGd1aWRp bmcgcHJpbmNpcGxlIGlzIHRoYXQgbm8gaW5mZXJlbmNlIG1heSBiZSBtYWRlIG9uIHRoZSBiYXNp cworb2YgdGhlIGFic2VuY2Ugb2YgYWR2aWNlLiBUaGUgdXNlciBpcyBlbnRpdGxlZCB0byByZW1v dmUgYW55IHBvcnRpb24gb2YgdGhlCitnZW5lcmF0ZWQgYWR2aWNlIHdoaWNoIHRoZXkgZGVlbSB1 bnN1aXRhYmxlIG9yIGNvdW50ZXJwcm9kdWN0aXZlIGFuZCB0aGUKK3Jlc3VsdCBzaG91bGQgb25s eSBiZSB0byBpbmNyZWFzZSB0aGUgZmxleGliaWxpdHkgYWZmb3JkZWQgdG8gdGhlIHBsYW5uZXIu CitUaGlzIG1lYW5zIHRoYXQgaWYgYWR2aWNlIGNhbiBzYXkgdGhhdCBhIGNlcnRhaW4gb3B0aW1p emF0aW9uIG9yIHRlY2huaXF1ZQorc2hvdWxkIGJlIHVzZWQsIGl0IHNob3VsZCBhbHNvIGJlIGFi bGUgdG8gc2F5IHRoYXQgdGhlIG9wdGltaXphdGlvbiBvcgordGVjaG5pcXVlIHNob3VsZCBub3Qg YmUgdXNlZC4gV2Ugc2hvdWxkIG5ldmVyIGFzc3VtZSB0aGF0IHRoZSBhYnNlbmNlIG9mIGFuCitp bnN0cnVjdGlvbiB0byBkbyBhIGNlcnRhaW4gdGhpbmcgbWVhbnMgdGhhdCBpdCBzaG91bGQgbm90 IGJlIGRvbmU7IGFsbAoraW5zdHJ1Y3Rpb25zIG11c3QgYmUgZXhwbGljaXQuCisKK1NlbWlqb2lu IFVuaXF1ZW5lc3MKKz09PT09PT09PT09PT09PT09PT0KKworRmFjZWQgd2l0aCBhIHNlbWlqb2lu LCB0aGUgcGxhbm5lciBjb25zaWRlcnMgYm90aCBhIGRpcmVjdCBpbXBsZW1lbnRhdGlvbgorYW5k IGEgcGxhbiB3aGVyZSB0aGUgb25lIHNpZGUgaXMgbWFkZSB1bmlxdWUgYW5kIHRoZW4gYW4gaW5u ZXIgam9pbiBpcworcGVyZm9ybWVkLiBXZSBlbWl0IFNFTUlKT0lOX1VOSVFVRSgpIGFkdmljZSB3 aGVuIHRoaXMgdHJhbnNmb3JtYXRpb24gb2NjdXJzCithbmQgU0VNSUpPSU5fTk9OX1VOSVFVRSgp IGFkdmljZSB3aGVuIGl0IGRvZXNuJ3QuIFRoZXNlIGl0ZW1zIHdvcmsgbGlrZQoram9pbiBtZXRo b2QgYWR2aWNlOiB0aGUgaW5uZXIgc2lkZSBvZiB0aGUgcmVsZXZhbnQgam9pbiBpcyBuYW1lZCwg YW5kIHRoZQorY2hvc2VuIGpvaW4gb3JkZXIgbXVzdCBiZSBjb21wYXRpYmxlIHdpdGggdGhlIGFk dmljZSBoYXZpbmcgc29tZSBlZmZlY3QuCisKK1BhcnRpdGlvbndpc2UKKz09PT09PT09PT09PT0K KworUEFSVElUSU9OV0lTRSgpIGFkdmljZSBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGJvdGggdGhv c2UgcGFydGl0aW9ud2lzZSBqb2lucword2hpY2ggc2hvdWxkIGJlIHBlcmZvcm1lZCBhbmQgdGhv c2Ugd2hpY2ggc2hvdWxkIG5vdCBiZSBwZXJmb3JtZWQ7IHRoZSBpZGVhCitpcyB0aGF0IGVhY2gg YXJndW1lbnQgdG8gUEFSVElUSU9OV0lTRSBzcGVjaWZpZXMgYSBzZXQgb2YgcmVsYXRpb25zIHRo YXQKK3Nob3VsZCBiZSBzY2FubmVkIHBhcnRpdGlvbndpc2UgYWZ0ZXIgYmVpbmcgam9pbmVkIHRv IGVhY2ggb3RoZXIgYW5kIG5vdGhpbmcKK2Vsc2UuIEhlbmNlLCBmb3IgZXhhbXBsZSwgUEFSVElU SU9OV0lTRSgodDEgdDIpIHQzKSBzcGVjaWZpZXMgdGhhdCB0aGUKK3F1ZXJ5IHNob3VsZCBjb250 YWluIGEgcGFydGl0aW9ud2lzZSBqb2luIGJldHdlZW4gdDEgYW5kIHQyIGFuZCB0aGF0IHQzCitz aG91bGQgbm90IGJlIHBhcnQgb2YgYW55IHBhcnRpdGlvbndpc2Ugam9pbi4gSWYgdGhlcmUgYXJl IG5vIG90aGVyIHJlbHMKK2luIHRoZSBxdWVyeSwgc3BlY2lmeWluZyBqdXN0IFBBUlRJVElPTldJ U0UoKHQxIHQyKSkgd291bGQgaGF2ZSB0aGUgc2FtZQorZWZmZWN0LCBzaW5jZSB0aGVyZSB3b3Vs ZCBiZSBubyBvdGhlciByZWxzIHRvIHdoaWNoIHQzIGNvdWxkIGJlIGpvaW5lZCBpbgorYSBwYXJ0 aXRpb253aXNlIGZhc2hpb24uCisKK1BhcmFsbGVsIFF1ZXJ5IChHYXRoZXIsIGV0Yy4pCis9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQorCitFYWNoIGFyZ3VtZW50IHRvIEdBVEhFUigpIG9y IEdBVEhFUl9NRVJHRSgpIGlzIGEgc2luZ2xlIHJlbGF0aW9uIG9yIGFuCitleGFjdCBzZXQgb2Yg cmVsYXRpb25zIG9uIHRvcCBvZiB3aGljaCBhIEdhdGhlciBvciBHYXRoZXIgTWVyZ2Ugbm9kZSwK K3Jlc3BlY3RpdmVseSwgc2hvdWxkIGJlIHBsYWNlZC4gRWFjaCBhcmd1bWVudCB0byBOT19HQVRI RVIoKSBpcyBhIHNpbmdsZQorcmVsYXRpb24gdGhhdCBzaG91bGQgbm90IGFwcGVhciBiZW5lYXRo IGFueSBHYXRoZXIgb3IgR2F0aGVyIE1lcmdlIG5vZGU7Cit0aGF0IGlzLCBwYXJhbGxlbGlzbSBz aG91bGQgbm90IGJlIHVzZWQuCisKK0ltcGxpY2l0IEpvaW4gT3JkZXIgQ29uc3RyYWludHMKKz09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworV2hlbiBKT0lOX09SREVSKCkgYWR2aWNl IGlzIG5vdCBwcm92aWRlZCBmb3IgYSBwYXJ0aWN1bGFyIGpvaW4gcHJvYmxlbSwKK290aGVyIHBp ZWNlcyBvZiBhZHZpY2UgbWF5IHN0aWxsIGluY2lkZW50YWxseSBjb25zdHJhaW4gdGhlIGpvaW4g b3JkZXIuCitGb3IgZXhhbXBsZSwgYSB1c2VyIHdobyBzcGVjaWZpZXMgSEFTSF9KT0lOKChmb28g YmFyKSkgaXMgZXhwbGljaXRseSBzYXlpbmcKK3RoYXQgdGhlcmUgc2hvdWxkIGJlIGEgaGFzaCBq b2luIHdpdGggZXhhY3RseSBmb28gYW5kIGJhciBvbiB0aGUgaW5uZXIKK3NpZGUgb2YgaXQsIGJ1 dCB0aGF0IGFsc28gaW1wbGllcyB0aGF0IGZvbyBhbmQgYmFyIG11c3QgYmUgam9pbmVkIHRvCitl YWNoIG90aGVyIGJlZm9yZSBlaXRoZXIgb2YgdGhlbSBpcyBqb2luZWQgdG8gYW55dGhpbmcgZWxz ZS4gT3RoZXJ3aXNlLAordGhlIGpvaW4gdGhlIHVzZXIgaXMgYXR0ZW1wdGluZyB0byBjb25zdHJh aW4gd29uJ3QgYWN0dWFsbHkgb2NjdXIgaW4gdGhlCitxdWVyeSwgd2hpY2ggZW5kcyB1cCBsb29r aW5nIGxpa2UgdGhlIHN5c3RlbSBoYXMganVzdCBkZWNpZGVkIHRvIGlnbm9yZQordGhlIGFkdmlj ZSBhbHRvZ2V0aGVyLgorCitGdXR1cmUgV29yaworPT09PT09PT09PT0KKworV2UgZG9uJ3QgaGFu ZGxlIGNob2ljZSBvZiBhZ2dyZWdhdGlvbjogaXQgd291bGQgYmUgbmljZSB0byBiZSBhYmxlIHRv IGZvcmNlCitzb3J0ZWQgb3IgZ3JvdXBlZCBhZ2dyZWdhdGlvbi4gSSdtIGd1ZXNzaW5nIHRoaXMg Y2FuIGJlIGxlZnQgdG8gZnV0dXJlIHdvcmsuCisKK01vcmUgc2VyaW91c2x5LCB3ZSBkb24ndCBr bm93IGFueXRoaW5nIGFib3V0IGVhZ2VyIGFnZ3JlZ2F0aW9uLCB3aGljaCBjb3VsZAoraGF2ZSBh IGxhcmdlIGltcGFjdCBvbiB0aGUgc2hhcGUgb2YgdGhlIHBsYW4gdHJlZS4gWFhYOiBUaGlzIG5l ZWRzIHNvbWUgc3R1ZHkKK3RvIGRldGVybWluZSBob3cgbGFyZ2UgYSBwcm9ibGVtIGl0IGlzLCBh bmQgbWlnaHQgbmVlZCB0byBiZSBmaXhlZCBzb29uZXIKK3JhdGhlciB0aGFuIGxhdGVyLgorCitX ZSBkb24ndCBvZmZlciBhbnkgY29udHJvbCBvdmVyIGVzdGltYXRlcywgb25seSBvdXRjb21lcy4g SXQgc2VlbXMgbGlrZSBhCitnb29kIGlkZWEgdG8gaW5jb3Jwb3JhdGUgdGhhdCBhYmlsaXR5IGF0 IHNvbWUgZnV0dXJlIHBvaW50LCBhcyBwZ19oaW50X3BsYW4KK2RvZXMuIEhvd2V2ZXIsIHNpbmNl IHRoZSBwcmltYXJ5IGdvYWwgb2YgdGhlIGluaXRpYWwgZGV2ZWxvcG1lbnQgd29yayBpcyB0byBi ZQorYWJsZSB0byBpbmR1Y2UgdGhlIHBsYW5uZXIgdG8gcmVjcmVhdGUgYSBkZXNpcmVkIHBsYW4g dGhhdCB3b3JrZWQgd2VsbCBpbgordGhlIHBhc3QsIHRoaXMgaGFzIG5vdCBiZWVuIGluY2x1ZGVk IGluIHRoZSBpbml0aWFsIGRldmVsb3BtZW50IGVmZm9ydC4KKworWFhYIE5lZWQgdG8gaW52ZXN0 aWdhdGUgd2hldGhlciBhbmQgaG93IHdlbGwgc3VwcGx5aW5nIGFkdmljZSB3b3JrcyB3aXRoIEdF UU8KZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvZ2F0aGVyLm91 dCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvZ2F0aGVyLm91dApuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMGNjMGRlZGY4NTkKLS0tIC9kZXYvbnVsbAor KysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL2dhdGhlci5vdXQKQEAgLTAsMCAr MSwzNzEgQEAKK0xPQUQgJ3BnX3BsYW5fYWR2aWNlJzsKK1NFVCBtYXhfcGFyYWxsZWxfd29ya2Vy c19wZXJfZ2F0aGVyID0gMTsKK1NFVCBwYXJhbGxlbF9zZXR1cF9jb3N0ID0gMDsKK1NFVCBwYXJh bGxlbF90dXBsZV9jb3N0ID0gMDsKK1NFVCBtaW5fcGFyYWxsZWxfdGFibGVfc2Nhbl9zaXplID0g MDsKK1NFVCBkZWJ1Z19wYXJhbGxlbF9xdWVyeSA9IG9mZjsKK0NSRUFURSBUQUJMRSBndF9kaW0g KGlkIHNlcmlhbCBwcmltYXJ5IGtleSwgZGltIHRleHQpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFi bGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gZ3RfZGltIChkaW0pIFNFTEVDVCByYW5kb20oKTo6 dGV4dCBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMCkgZzsKK1ZBQ1VVTSBBTkFMWVpFIGd0X2Rp bTsKK0NSRUFURSBUQUJMRSBndF9mYWN0ICgKKwlpZCBpbnQgbm90IG51bGwsCisJZGltX2lkIGlu dGVnZXIgbm90IG51bGwgcmVmZXJlbmNlcyBndF9kaW0gKGlkKQorKSBXSVRIIChhdXRvdmFjdXVt X2VuYWJsZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5UTyBndF9mYWN0CisJU0VMRUNUIGcsIChnJTMp KzEgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwMDApIGc7CitWQUNVVU0gQU5BTFlaRSBndF9m YWN0OworLS0gQnkgZGVmYXVsdCwgd2UgZXhwZWN0IEdhdGhlciBNZXJnZSB3aXRoIGEgcGFyYWxs ZWwgaGFzaCBqb2luLgorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1Qg KiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZCBPUkRFUiBC WSBkLmlkOworICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIEdhdGhlciBNZXJnZQorICAgV29ya2VycyBQbGFubmVkOiAxCisgICAtPiAgU29y dAorICAgICAgICAgU29ydCBLZXk6IGYuZGltX2lkCisgICAgICAgICAtPiAgUGFyYWxsZWwgSGFz aCBKb2luCisgICAgICAgICAgICAgICBIYXNoIENvbmQ6IChmLmRpbV9pZCA9IGQuaWQpCisgICAg ICAgICAgICAgICAtPiAgUGFyYWxsZWwgU2VxIFNjYW4gb24gZ3RfZmFjdCBmCisgICAgICAgICAg ICAgICAtPiAgUGFyYWxsZWwgSGFzaAorICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVs IFNlcSBTY2FuIG9uIGd0X2RpbSBkCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9P UkRFUihmIGQpCisgICBIQVNIX0pPSU4oZCkKKyAgIFNFUV9TQ0FOKGYgZCkKKyAgIEdBVEhFUl9N RVJHRSgoZiBkKSkKKygxNCByb3dzKQorCistLSBGb3JjZSBHYXRoZXIgb3IgR2F0aGVyIE1lcmdl IG9mIGJvdGggcmVsYXRpb25zIHRvZ2V0aGVyLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9h ZHZpY2UuYWR2aWNlID0gJ2dhdGhlcl9tZXJnZSgoZiBkKSknOworRVhQTEFJTiAoQ09TVFMgT0ZG LCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2RpbSBkIE9O IGYuZGltX2lkID0gZC5pZCBPUkRFUiBCWSBkLmlkOworICAgICAgICAgICAgICAgICAgICAgIFFV RVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEdhdGhlciBNZXJnZQorICAgV29ya2Vy cyBQbGFubmVkOiAxCisgICAtPiAgU29ydAorICAgICAgICAgU29ydCBLZXk6IGYuZGltX2lkCisg ICAgICAgICAtPiAgUGFyYWxsZWwgSGFzaCBKb2luCisgICAgICAgICAgICAgICBIYXNoIENvbmQ6 IChmLmRpbV9pZCA9IGQuaWQpCisgICAgICAgICAgICAgICAtPiAgUGFyYWxsZWwgU2VxIFNjYW4g b24gZ3RfZmFjdCBmCisgICAgICAgICAgICAgICAtPiAgUGFyYWxsZWwgSGFzaAorICAgICAgICAg ICAgICAgICAgICAgLT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9uIGd0X2RpbSBkCisgU3VwcGxpZWQg UGxhbiBBZHZpY2U6CisgICBHQVRIRVJfTUVSR0UoKGYgZCkpIC8qIG1hdGNoZWQgKi8KKyBHZW5l cmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGYgZCkKKyAgIEhBU0hfSk9JTihkKQor ICAgU0VRX1NDQU4oZiBkKQorICAgR0FUSEVSX01FUkdFKChmIGQpKQorKDE2IHJvd3MpCisKK1NF VCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnZ2F0aGVyKChmIGQpKSc7CitFWFBMQUlO IChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4g Z3RfZGltIGQgT04gZi5kaW1faWQgPSBkLmlkIE9SREVSIEJZIGQuaWQ7CisgICAgICAgICAgICAg ICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU29ydAorICAgU29y dCBLZXk6IGYuZGltX2lkCisgICAtPiAgR2F0aGVyCisgICAgICAgICBXb3JrZXJzIFBsYW5uZWQ6 IDEKKyAgICAgICAgIC0+ICBQYXJhbGxlbCBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgIEhhc2gg Q29uZDogKGYuZGltX2lkID0gZC5pZCkKKyAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBTZXEg U2NhbiBvbiBndF9mYWN0IGYKKyAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBIYXNoCisgICAg ICAgICAgICAgICAgICAgICAtPiAgUGFyYWxsZWwgU2VxIFNjYW4gb24gZ3RfZGltIGQKKyBTdXBw bGllZCBQbGFuIEFkdmljZToKKyAgIEdBVEhFUigoZiBkKSkgLyogbWF0Y2hlZCAqLworIEdlbmVy YXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBkKQorICAgSEFTSF9KT0lOKGQpCisg ICBTRVFfU0NBTihmIGQpCisgICBHQVRIRVIoKGYgZCkpCisoMTYgcm93cykKKworQ09NTUlUOwor LS0gRm9yY2UgYSBzZXBhcmF0ZSBHYXRoZXIgb3IgR2F0aGVyIE1lcmdlIG9wZXJhdGlvbiBmb3Ig ZWFjaCByZWxhdGlvbi4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9 ICdnYXRoZXJfbWVyZ2UoZiBkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQor CVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5kaW1faWQgPSBkLmlk IE9SREVSIEJZIGQuaWQ7CisgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAg ICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyBNZXJnZSBKb2luCisgICBNZXJnZSBDb25kOiAoZi5kaW1faWQgPSBkLmlkKQorICAg LT4gIEdhdGhlciBNZXJnZQorICAgICAgICAgV29ya2VycyBQbGFubmVkOiAxCisgICAgICAgICAt PiAgU29ydAorICAgICAgICAgICAgICAgU29ydCBLZXk6IGYuZGltX2lkCisgICAgICAgICAgICAg ICAtPiAgUGFyYWxsZWwgU2VxIFNjYW4gb24gZ3RfZmFjdCBmCisgICAtPiAgR2F0aGVyIE1lcmdl CisgICAgICAgICBXb3JrZXJzIFBsYW5uZWQ6IDEKKyAgICAgICAgIC0+ICBTb3J0CisgICAgICAg ICAgICAgICBTb3J0IEtleTogZC5pZAorICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIFNlcSBT Y2FuIG9uIGd0X2RpbSBkCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBHQVRIRVJfTUVSR0Uo ZikgLyogbWF0Y2hlZCAqLworICAgR0FUSEVSX01FUkdFKGQpIC8qIG1hdGNoZWQgKi8KKyBHZW5l cmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGYgZCkKKyAgIE1FUkdFX0pPSU5fUExB SU4oZCkKKyAgIFNFUV9TQ0FOKGYgZCkKKyAgIEdBVEhFUl9NRVJHRShmIGQpCisoMjAgcm93cykK KworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdnYXRoZXIoZiBkKSc7CitFWFBM QUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpP SU4gZ3RfZGltIGQgT04gZi5kaW1faWQgPSBkLmlkIE9SREVSIEJZIGQuaWQ7CisgICAgICAgICAg ICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBNZXJnZSBKb2luCisgICBNZXJn ZSBDb25kOiAoZi5kaW1faWQgPSBkLmlkKQorICAgLT4gIFNvcnQKKyAgICAgICAgIFNvcnQgS2V5 OiBmLmRpbV9pZAorICAgICAgICAgLT4gIEdhdGhlcgorICAgICAgICAgICAgICAgV29ya2VycyBQ bGFubmVkOiAxCisgICAgICAgICAgICAgICAtPiAgUGFyYWxsZWwgU2VxIFNjYW4gb24gZ3RfZmFj dCBmCisgICAtPiAgU29ydAorICAgICAgICAgU29ydCBLZXk6IGQuaWQKKyAgICAgICAgIC0+ICBH YXRoZXIKKyAgICAgICAgICAgICAgIFdvcmtlcnMgUGxhbm5lZDogMQorICAgICAgICAgICAgICAg LT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9uIGd0X2RpbSBkCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6 CisgICBHQVRIRVIoZikgLyogbWF0Y2hlZCAqLworICAgR0FUSEVSKGQpIC8qIG1hdGNoZWQgKi8K KyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGYgZCkKKyAgIE1FUkdFX0pP SU5fUExBSU4oZCkKKyAgIFNFUV9TQ0FOKGYgZCkKKyAgIEdBVEhFUihmIGQpCisoMjAgcm93cykK KworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdnYXRoZXIoKGQgZC9kLmQpKSc7 CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gZ3RfZmFj dCBmIEpPSU4gZ3RfZGltIGQgT04gZi5kaW1faWQgPSBkLmlkIE9SREVSIEJZIGQuaWQ7CisgICAg ICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBNZXJnZSBKb2luCisg ICBNZXJnZSBDb25kOiAoZi5kaW1faWQgPSBkLmlkKQorICAgLT4gIEdhdGhlciBNZXJnZQorICAg ICAgICAgV29ya2VycyBQbGFubmVkOiAxCisgICAgICAgICAtPiAgU29ydAorICAgICAgICAgICAg ICAgU29ydCBLZXk6IGYuZGltX2lkCisgICAgICAgICAgICAgICAtPiAgUGFyYWxsZWwgU2VxIFNj YW4gb24gZ3RfZmFjdCBmCisgICAtPiAgSW5kZXggU2NhbiB1c2luZyBndF9kaW1fcGtleSBvbiBn dF9kaW0gZAorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgR0FUSEVSKChkIGQvZC5kKSkgLyog cGFydGlhbGx5IG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09S REVSKGYgZCkKKyAgIE1FUkdFX0pPSU5fUExBSU4oZCkKKyAgIFNFUV9TQ0FOKGYpCisgICBJTkRF WF9TQ0FOKGQgcHVibGljLmd0X2RpbV9wa2V5KQorICAgR0FUSEVSX01FUkdFKGYpCisgICBOT19H QVRIRVIoZCkKKygxNyByb3dzKQorCitDT01NSVQ7CistLSBGb3JjZSBhIEdhdGhlciBvciBHYXRo ZXIgTWVyZ2Ugb24gb25lIHJlbGF0aW9uIGJ1dCBubyBwYXJhbGxlbGlzbSBvbiBvdGhlci4KK0JF R0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdnYXRoZXJfbWVyZ2UoZikg bm9fZ2F0aGVyKGQpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNU ICogRlJPTSBndF9mYWN0IGYgSk9JTiBndF9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQgT1JERVIg QlkgZC5pZDsKKyAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IE1lcmdlIEpvaW4KKyAgIE1lcmdlIENvbmQ6IChmLmRpbV9pZCA9IGQuaWQpCisgICAtPiAgR2F0 aGVyIE1lcmdlCisgICAgICAgICBXb3JrZXJzIFBsYW5uZWQ6IDEKKyAgICAgICAgIC0+ICBTb3J0 CisgICAgICAgICAgICAgICBTb3J0IEtleTogZi5kaW1faWQKKyAgICAgICAgICAgICAgIC0+ICBQ YXJhbGxlbCBTZXEgU2NhbiBvbiBndF9mYWN0IGYKKyAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIGd0 X2RpbV9wa2V5IG9uIGd0X2RpbSBkCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBHQVRIRVJf TUVSR0UoZikgLyogbWF0Y2hlZCAqLworICAgTk9fR0FUSEVSKGQpIC8qIG1hdGNoZWQgKi8KKyBH ZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGYgZCkKKyAgIE1FUkdFX0pPSU5f UExBSU4oZCkKKyAgIFNFUV9TQ0FOKGYpCisgICBJTkRFWF9TQ0FOKGQgcHVibGljLmd0X2RpbV9w a2V5KQorICAgR0FUSEVSX01FUkdFKGYpCisgICBOT19HQVRIRVIoZCkKKygxOCByb3dzKQorCitT RVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2dhdGhlcl9tZXJnZShkKSBub19nYXRo ZXIoZiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9N IGd0X2ZhY3QgZiBKT0lOIGd0X2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZCBPUkRFUiBCWSBkLmlk OworICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE1lcmdlIEpv aW4KKyAgIE1lcmdlIENvbmQ6IChmLmRpbV9pZCA9IGQuaWQpCisgICAtPiAgU29ydAorICAgICAg ICAgU29ydCBLZXk6IGYuZGltX2lkCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gZ3RfZmFjdCBm CisgICAtPiAgR2F0aGVyIE1lcmdlCisgICAgICAgICBXb3JrZXJzIFBsYW5uZWQ6IDEKKyAgICAg ICAgIC0+ICBTb3J0CisgICAgICAgICAgICAgICBTb3J0IEtleTogZC5pZAorICAgICAgICAgICAg ICAgLT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9uIGd0X2RpbSBkCisgU3VwcGxpZWQgUGxhbiBBZHZp Y2U6CisgICBHQVRIRVJfTUVSR0UoZCkgLyogbWF0Y2hlZCAqLworICAgTk9fR0FUSEVSKGYpIC8q IG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGYgZCkK KyAgIE1FUkdFX0pPSU5fUExBSU4oZCkKKyAgIFNFUV9TQ0FOKGYgZCkKKyAgIEdBVEhFUl9NRVJH RShkKQorICAgTk9fR0FUSEVSKGYpCisoMTkgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2 aWNlLmFkdmljZSA9ICdnYXRoZXIoZikgbm9fZ2F0aGVyKGQpJzsKK0VYUExBSU4gKENPU1RTIE9G RiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBndF9mYWN0IGYgSk9JTiBndF9kaW0gZCBP TiBmLmRpbV9pZCA9IGQuaWQgT1JERVIgQlkgZC5pZDsKKyAgICAgICAgICAgICAgICAgICAgUVVF UlkgUExBTiAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE1lcmdlIEpvaW4KKyAgIE1lcmdlIENvbmQ6IChkLmlk ID0gZi5kaW1faWQpCisgICAtPiAgSW5kZXggU2NhbiB1c2luZyBndF9kaW1fcGtleSBvbiBndF9k aW0gZAorICAgLT4gIFNvcnQKKyAgICAgICAgIFNvcnQgS2V5OiBmLmRpbV9pZAorICAgICAgICAg LT4gIEdhdGhlcgorICAgICAgICAgICAgICAgV29ya2VycyBQbGFubmVkOiAxCisgICAgICAgICAg ICAgICAtPiAgUGFyYWxsZWwgU2VxIFNjYW4gb24gZ3RfZmFjdCBmCisgU3VwcGxpZWQgUGxhbiBB ZHZpY2U6CisgICBHQVRIRVIoZikgLyogbWF0Y2hlZCAqLworICAgTk9fR0FUSEVSKGQpIC8qIG1h dGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGQgZikKKyAg IE1FUkdFX0pPSU5fUExBSU4oZikKKyAgIFNFUV9TQ0FOKGYpCisgICBJTkRFWF9TQ0FOKGQgcHVi bGljLmd0X2RpbV9wa2V5KQorICAgR0FUSEVSKGYpCisgICBOT19HQVRIRVIoZCkKKygxOCByb3dz KQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2dhdGhlcihkKSBub19nYXRo ZXIoZiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9N IGd0X2ZhY3QgZiBKT0lOIGd0X2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZCBPUkRFUiBCWSBkLmlk OworICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE1lcmdlIEpv aW4KKyAgIE1lcmdlIENvbmQ6IChmLmRpbV9pZCA9IGQuaWQpCisgICAtPiAgU29ydAorICAgICAg ICAgU29ydCBLZXk6IGYuZGltX2lkCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gZ3RfZmFjdCBm CisgICAtPiAgU29ydAorICAgICAgICAgU29ydCBLZXk6IGQuaWQKKyAgICAgICAgIC0+ICBHYXRo ZXIKKyAgICAgICAgICAgICAgIFdvcmtlcnMgUGxhbm5lZDogMQorICAgICAgICAgICAgICAgLT4g IFBhcmFsbGVsIFNlcSBTY2FuIG9uIGd0X2RpbSBkCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6Cisg ICBHQVRIRVIoZCkgLyogbWF0Y2hlZCAqLworICAgTk9fR0FUSEVSKGYpIC8qIG1hdGNoZWQgKi8K KyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGYgZCkKKyAgIE1FUkdFX0pP SU5fUExBSU4oZCkKKyAgIFNFUV9TQ0FOKGYgZCkKKyAgIEdBVEhFUihkKQorICAgTk9fR0FUSEVS KGYpCisoMTkgcm93cykKKworQ09NTUlUOworLS0gRm9yY2Ugbm8gR2F0aGVyIG9yIEdhdGhlciBN ZXJnZSB1c2UgYXQgYWxsLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNl ID0gJ25vX2dhdGhlcihmIGQpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJ U0VMRUNUICogRlJPTSBndF9mYWN0IGYgSk9JTiBndF9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQg T1JERVIgQlkgZC5pZDsKKyAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgTWVyZ2UgSm9pbgorICAgTWVyZ2UgQ29uZDogKGQuaWQgPSBmLmRpbV9pZCkKKyAgIC0+ICBJ bmRleCBTY2FuIHVzaW5nIGd0X2RpbV9wa2V5IG9uIGd0X2RpbSBkCisgICAtPiAgU29ydAorICAg ICAgICAgU29ydCBLZXk6IGYuZGltX2lkCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gZ3RfZmFj dCBmCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBOT19HQVRIRVIoZikgLyogbWF0Y2hlZCAq LworICAgTk9fR0FUSEVSKGQpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6 CisgICBKT0lOX09SREVSKGQgZikKKyAgIE1FUkdFX0pPSU5fUExBSU4oZikKKyAgIFNFUV9TQ0FO KGYpCisgICBJTkRFWF9TQ0FOKGQgcHVibGljLmd0X2RpbV9wa2V5KQorICAgTk9fR0FUSEVSKGYg ZCkKKygxNSByb3dzKQorCitDT01NSVQ7CistLSBDYW4ndCBmb3JjZSBHYXRoZXIgTWVyZ2Ugd2l0 aG91dCB0aGUgT1JERVIgQlkgY2xhdXNlLCBidXQganVzdCBHYXRoZXIgaXMgT0suCitCRUdJTjsK K1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnZ2F0aGVyX21lcmdlKChmIGQpKSc7 CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gZ3RfZmFj dCBmIEpPSU4gZ3RfZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworICAgICAgICAgICAgICAgICAg IFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEdhdGhlcgorICAgRGlzYWJsZWQ6IHRydWUKKyAg IFdvcmtlcnMgUGxhbm5lZDogMQorICAgLT4gIFBhcmFsbGVsIEhhc2ggSm9pbgorICAgICAgICAg SGFzaCBDb25kOiAoZi5kaW1faWQgPSBkLmlkKQorICAgICAgICAgLT4gIFBhcmFsbGVsIFNlcSBT Y2FuIG9uIGd0X2ZhY3QgZgorICAgICAgICAgLT4gIFBhcmFsbGVsIEhhc2gKKyAgICAgICAgICAg ICAgIC0+ICBQYXJhbGxlbCBTZXEgU2NhbiBvbiBndF9kaW0gZAorIFN1cHBsaWVkIFBsYW4gQWR2 aWNlOgorICAgR0FUSEVSX01FUkdFKChmIGQpKSAvKiBtYXRjaGVkLCBmYWlsZWQgKi8KKyBHZW5l cmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGYgZCkKKyAgIEhBU0hfSk9JTihkKQor ICAgU0VRX1NDQU4oZiBkKQorICAgR0FUSEVSKChmIGQpKQorKDE1IHJvd3MpCisKK1NFVCBMT0NB TCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnZ2F0aGVyKChmIGQpKSc7CitFWFBMQUlOIChDT1NU UyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGlt IGQgT04gZi5kaW1faWQgPSBkLmlkOworICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAg ICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIEdhdGhlcgorICAgV29ya2VycyBQbGFubmVkOiAxCisgICAtPiAgUGFyYWxs ZWwgSGFzaCBKb2luCisgICAgICAgICBIYXNoIENvbmQ6IChmLmRpbV9pZCA9IGQuaWQpCisgICAg ICAgICAtPiAgUGFyYWxsZWwgU2VxIFNjYW4gb24gZ3RfZmFjdCBmCisgICAgICAgICAtPiAgUGFy YWxsZWwgSGFzaAorICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9uIGd0X2Rp bSBkCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBHQVRIRVIoKGYgZCkpIC8qIG1hdGNoZWQg Ki8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGYgZCkKKyAgIEhBU0hf Sk9JTihkKQorICAgU0VRX1NDQU4oZiBkKQorICAgR0FUSEVSKChmIGQpKQorKDE0IHJvd3MpCisK K0NPTU1JVDsKKy0tIFRlc3QgY29uZmxpY3RpbmcgYWR2aWNlLgorQkVHSU47CitTRVQgTE9DQUwg cGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2dhdGhlcigoZiBkKSkgbm9fZ2F0aGVyKGYpJzsKK0VY UExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBndF9mYWN0IGYg Sk9JTiBndF9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQgT1JERVIgQlkgZC5pZDsKKyAgICAgICAg ICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBHYXRoZXIg TWVyZ2UKKyAgIFdvcmtlcnMgUGxhbm5lZDogMQorICAgLT4gIFNvcnQKKyAgICAgICAgIFNvcnQg S2V5OiBmLmRpbV9pZAorICAgICAgICAgLT4gIFBhcmFsbGVsIEhhc2ggSm9pbgorICAgICAgICAg ICAgICAgSGFzaCBDb25kOiAoZi5kaW1faWQgPSBkLmlkKQorICAgICAgICAgICAgICAgLT4gIFBh cmFsbGVsIFNlcSBTY2FuIG9uIGd0X2ZhY3QgZgorICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVs IEhhc2gKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBTZXEgU2NhbiBvbiBndF9k aW0gZAorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgR0FUSEVSKChmIGQpKSAvKiBtYXRjaGVk LCBjb25mbGljdGluZywgZmFpbGVkICovCisgICBOT19HQVRIRVIoZikgLyogbWF0Y2hlZCwgY29u ZmxpY3RpbmcsIGZhaWxlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JE RVIoZiBkKQorICAgSEFTSF9KT0lOKGQpCisgICBTRVFfU0NBTihmIGQpCisgICBHQVRIRVJfTUVS R0UoKGYgZCkpCisoMTcgcm93cykKKworQ09NTUlUOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19w bGFuX2FkdmljZS9leHBlY3RlZC9qb2luX29yZGVyLm91dCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZp Y2UvZXhwZWN0ZWQvam9pbl9vcmRlci5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMDAuLmE1YTk3MjhlM2ZkCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFu X2FkdmljZS9leHBlY3RlZC9qb2luX29yZGVyLm91dApAQCAtMCwwICsxLDUwMCBAQAorTE9BRCAn cGdfcGxhbl9hZHZpY2UnOworU0VUIG1heF9wYXJhbGxlbF93b3JrZXJzX3Blcl9nYXRoZXIgPSAw OworQ1JFQVRFIFRBQkxFIGpvX2RpbTEgKGlkIGludGVnZXIgcHJpbWFyeSBrZXksIGRpbTEgdGV4 dCwgdmFsMSBpbnQpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJU IElOVE8gam9fZGltMSAoaWQsIGRpbTEsIHZhbDEpCisJU0VMRUNUIGcsICdzb21lIGZpbGxlciB0 ZXh0ICcgfHwgZywgKGcgJSAzKSArIDEKKwkgIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwKSBn OworVkFDVVVNIEFOQUxZWkUgam9fZGltMTsKK0NSRUFURSBUQUJMRSBqb19kaW0yIChpZCBpbnRl Z2VyIHByaW1hcnkga2V5LCBkaW0yIHRleHQsIHZhbDIgaW50KQorCVdJVEggKGF1dG92YWN1dW1f ZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJTlRPIGpvX2RpbTIgKGlkLCBkaW0yLCB2YWwyKQor CVNFTEVDVCBnLCAnc29tZSBmaWxsZXIgdGV4dCAnIHx8IGcsIChnICUgNTMpICsgMQorCSAgRlJP TSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwKSBnOworVkFDVVVNIEFOQUxZWkUgam9fZGltMjsKK0NS RUFURSBUQUJMRSBqb19mYWN0ICgKKwlpZCBpbnQgcHJpbWFyeSBrZXksCisJZGltMV9pZCBpbnRl Z2VyIG5vdCBudWxsIHJlZmVyZW5jZXMgam9fZGltMSAoaWQpLAorCWRpbTJfaWQgaW50ZWdlciBu b3QgbnVsbCByZWZlcmVuY2VzIGpvX2RpbTIgKGlkKQorKSBXSVRIIChhdXRvdmFjdXVtX2VuYWJs ZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5UTyBqb19mYWN0CisJU0VMRUNUIGcsIChnJTEwMCkrMSwg KGclMTAwKSsxIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMDAwKSBnOworVkFDVVVNIEFOQUxZ WkUgam9fZmFjdDsKKy0tIFdlIGV4cGVjdCB0byBqb2luIHRvIGQyIGZpcnN0IGFuZCB0aGVuIGQx LCBzaW5jZSB0aGUgY29uZGl0aW9uIG9uIGQyCistLSBpcyBtb3JlIHNlbGVjdGl2ZS4KK0VYUExB SU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGpvX2ZhY3QgZgorCUxF RlQgSk9JTiBqb19kaW0xIGQxIE9OIGYuZGltMV9pZCA9IGQxLmlkCisJTEVGVCBKT0lOIGpvX2Rp bTIgZDIgT04gZi5kaW0yX2lkID0gZDIuaWQKKwlXSEVSRSB2YWwxID0gMSBBTkQgdmFsMiA9IDE7 CisgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggSm9pbgorICAgSGFzaCBDb25k OiAoZi5kaW0xX2lkID0gZDEuaWQpCisgICAtPiAgSGFzaCBKb2luCisgICAgICAgICBIYXNoIENv bmQ6IChmLmRpbTJfaWQgPSBkMi5pZCkKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19mYWN0 IGYKKyAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9f ZGltMiBkMgorICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMiA9IDEpCisgICAtPiAg SGFzaAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2RpbTEgZDEKKyAgICAgICAgICAgICAg IEZpbHRlcjogKHZhbDEgPSAxKQorIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JE RVIoZiBkMiBkMSkKKyAgIEhBU0hfSk9JTihkMiBkMSkKKyAgIFNFUV9TQ0FOKGYgZDIgZDEpCisg ICBOT19HQVRIRVIoZiBkMSBkMikKKygxNiByb3dzKQorCistLSBGb3JjZSBhIGZldyBkaWZmZXJl bnQgam9pbiBvcmRlcnMuIFNvbWUgb2YgdGhlc2UgYXJlIHZlcnkgaW5lZmZpY2llbnQsCistLSBi dXQgdGhlIHBsYW5uZXIgY29uc2lkZXJzIHRoZW0gYWxsIHZpYWJsZS4KK0JFR0lOOworU0VUIExP Q0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdqb2luX29yZGVyKGYgZDEgZDIpJzsKK0VYUExB SU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGpvX2ZhY3QgZgorCUxF RlQgSk9JTiBqb19kaW0xIGQxIE9OIGYuZGltMV9pZCA9IGQxLmlkCisJTEVGVCBKT0lOIGpvX2Rp bTIgZDIgT04gZi5kaW0yX2lkID0gZDIuaWQKKwlXSEVSRSB2YWwxID0gMSBBTkQgdmFsMiA9IDE7 CisgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggSm9pbgorICAgSGFzaCBDb25k OiAoZi5kaW0yX2lkID0gZDIuaWQpCisgICAtPiAgSGFzaCBKb2luCisgICAgICAgICBIYXNoIENv bmQ6IChmLmRpbTFfaWQgPSBkMS5pZCkKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19mYWN0 IGYKKyAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9f ZGltMSBkMQorICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMSA9IDEpCisgICAtPiAg SGFzaAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2RpbTIgZDIKKyAgICAgICAgICAgICAg IEZpbHRlcjogKHZhbDIgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRF UihmIGQxIGQyKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9J Tl9PUkRFUihmIGQxIGQyKQorICAgSEFTSF9KT0lOKGQxIGQyKQorICAgU0VRX1NDQU4oZiBkMSBk MikKKyAgIE5PX0dBVEhFUihmIGQxIGQyKQorKDE4IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFu X2FkdmljZS5hZHZpY2UgPSAnam9pbl9vcmRlcihmIGQyIGQxKSc7CitFWFBMQUlOIChDT1NUUyBP RkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBqb19mYWN0IGYKKwlMRUZUIEpPSU4gam9f ZGltMSBkMSBPTiBmLmRpbTFfaWQgPSBkMS5pZAorCUxFRlQgSk9JTiBqb19kaW0yIGQyIE9OIGYu ZGltMl9pZCA9IGQyLmlkCisJV0hFUkUgdmFsMSA9IDEgQU5EIHZhbDIgPSAxOworICAgICAgICAg ICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoIEpvaW4KKyAgIEhhc2ggQ29uZDogKGYuZGltMV9p ZCA9IGQxLmlkKQorICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgSGFzaCBDb25kOiAoZi5kaW0y X2lkID0gZDIuaWQpCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZmFjdCBmCisgICAgICAg ICAtPiAgSGFzaAorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2RpbTIgZDIKKyAg ICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDIgPSAxKQorICAgLT4gIEhhc2gKKyAgICAg ICAgIC0+ICBTZXEgU2NhbiBvbiBqb19kaW0xIGQxCisgICAgICAgICAgICAgICBGaWx0ZXI6ICh2 YWwxID0gMSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBkMiBkMSkg LyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBk MiBkMSkKKyAgIEhBU0hfSk9JTihkMiBkMSkKKyAgIFNFUV9TQ0FOKGYgZDIgZDEpCisgICBOT19H QVRIRVIoZiBkMSBkMikKKygxOCByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2 aWNlID0gJ2pvaW5fb3JkZXIoZDEgZiBkMiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FE VklDRSkKK1NFTEVDVCAqIEZST00gam9fZmFjdCBmCisJTEVGVCBKT0lOIGpvX2RpbTEgZDEgT04g Zi5kaW0xX2lkID0gZDEuaWQKKwlMRUZUIEpPSU4gam9fZGltMiBkMiBPTiBmLmRpbTJfaWQgPSBk Mi5pZAorCVdIRVJFIHZhbDEgPSAxIEFORCB2YWwyID0gMTsKKyAgICAgICAgICAgICAgIFFVRVJZ IFBMQU4gICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIEhhc2ggSm9pbgorICAgSGFzaCBDb25kOiAoZi5kaW0yX2lkID0gZDIuaWQpCisg ICAtPiAgSGFzaCBKb2luCisgICAgICAgICBIYXNoIENvbmQ6IChkMS5pZCA9IGYuZGltMV9pZCkK KyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19kaW0xIGQxCisgICAgICAgICAgICAgICBGaWx0 ZXI6ICh2YWwxID0gMSkKKyAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAtPiAgU2Vx IFNjYW4gb24gam9fZmFjdCBmCisgICAtPiAgSGFzaAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9u IGpvX2RpbTIgZDIKKyAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDIgPSAxKQorIFN1cHBsaWVk IFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihkMSBmIGQyKSAvKiBtYXRjaGVkICovCisgR2Vu ZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihkMSBmIGQyKQorICAgSEFTSF9KT0lO KGYgZDIpCisgICBTRVFfU0NBTihkMSBmIGQyKQorICAgTk9fR0FUSEVSKGYgZDEgZDIpCisoMTgg cm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdqb2luX29yZGVyKGYg KGQxIGQyKSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZS T00gam9fZmFjdCBmCisJTEVGVCBKT0lOIGpvX2RpbTEgZDEgT04gZi5kaW0xX2lkID0gZDEuaWQK KwlMRUZUIEpPSU4gam9fZGltMiBkMiBPTiBmLmRpbTJfaWQgPSBkMi5pZAorCVdIRVJFIHZhbDEg PSAxIEFORCB2YWwyID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSGFzaCBKb2luCisgICBIYXNoIENvbmQ6ICgo Zi5kaW0xX2lkID0gZDEuaWQpIEFORCAoZi5kaW0yX2lkID0gZDIuaWQpKQorICAgLT4gIFNlcSBT Y2FuIG9uIGpvX2ZhY3QgZgorICAgLT4gIEhhc2gKKyAgICAgICAgIC0+ICBOZXN0ZWQgTG9vcAor ICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2RpbTEgZDEKKyAgICAgICAgICAgICAg ICAgICAgIEZpbHRlcjogKHZhbDEgPSAxKQorICAgICAgICAgICAgICAgLT4gIE1hdGVyaWFsaXpl CisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZGltMiBkMgorICAgICAg ICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMiA9IDEpCisgU3VwcGxpZWQgUGxhbiBB ZHZpY2U6CisgICBKT0lOX09SREVSKGYgKGQxIGQyKSkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRl ZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiAoZDEgZDIpKQorICAgTkVTVEVEX0xPT1Bf TUFURVJJQUxJWkUoZDIpCisgICBIQVNIX0pPSU4oKGQxIGQyKSkKKyAgIFNFUV9TQ0FOKGYgZDEg ZDIpCisgICBOT19HQVRIRVIoZiBkMSBkMikKKygxOCByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxh bl9hZHZpY2UuYWR2aWNlID0gJ2pvaW5fb3JkZXIoZiB7ZDEgZDJ9KSc7CitFWFBMQUlOIChDT1NU UyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBqb19mYWN0IGYKKwlMRUZUIEpPSU4g am9fZGltMSBkMSBPTiBmLmRpbTFfaWQgPSBkMS5pZAorCUxFRlQgSk9JTiBqb19kaW0yIGQyIE9O IGYuZGltMl9pZCA9IGQyLmlkCisJV0hFUkUgdmFsMSA9IDEgQU5EIHZhbDIgPSAxOworICAgICAg ICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyBIYXNoIEpvaW4KKyAgIEhhc2ggQ29uZDogKChmLmRpbTFfaWQgPSBkMS5pZCkgQU5EIChm LmRpbTJfaWQgPSBkMi5pZCkpCisgICAtPiAgU2VxIFNjYW4gb24gam9fZmFjdCBmCisgICAtPiAg SGFzaAorICAgICAgICAgLT4gIE5lc3RlZCBMb29wCisgICAgICAgICAgICAgICAtPiAgU2VxIFNj YW4gb24gam9fZGltMSBkMQorICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMSA9IDEp CisgICAgICAgICAgICAgICAtPiAgTWF0ZXJpYWxpemUKKyAgICAgICAgICAgICAgICAgICAgIC0+ ICBTZXEgU2NhbiBvbiBqb19kaW0yIGQyCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0 ZXI6ICh2YWwyID0gMSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiB7 ZDEgZDJ9KSAvKiBtYXRjaGVkLCBmYWlsZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6Cisg ICBKT0lOX09SREVSKGYgKGQxIGQyKSkKKyAgIE5FU1RFRF9MT09QX01BVEVSSUFMSVpFKGQyKQor ICAgSEFTSF9KT0lOKChkMSBkMikpCisgICBTRVFfU0NBTihmIGQxIGQyKQorICAgTk9fR0FUSEVS KGYgZDEgZDIpCisoMTggcm93cykKKworQ09NTUlUOworLS0gRm9yY2UgYSBqb2luIG9yZGVyIGJ5 IG1lbnRpb25pbmcganVzdCBhIHByZWZpeCBvZiB0aGUgam9pbiBsaXN0LgorQkVHSU47CitTRVQg TE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2pvaW5fb3JkZXIoZDIpJzsKK0VYUExBSU4g KENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGpvX2ZhY3QgZgorCUxFRlQg Sk9JTiBqb19kaW0xIGQxIE9OIGYuZGltMV9pZCA9IGQxLmlkCisJTEVGVCBKT0lOIGpvX2RpbTIg ZDIgT04gZi5kaW0yX2lkID0gZDIuaWQKKwlXSEVSRSB2YWwxID0gMSBBTkQgdmFsMiA9IDE7Cisg ICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggSm9pbgorICAg SGFzaCBDb25kOiAoZDIuaWQgPSBmLmRpbTJfaWQpCisgICAtPiAgU2VxIFNjYW4gb24gam9fZGlt MiBkMgorICAgICAgICAgRmlsdGVyOiAodmFsMiA9IDEpCisgICAtPiAgSGFzaAorICAgICAgICAg LT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgSGFzaCBDb25kOiAoZi5kaW0xX2lkID0gZDEu aWQpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZmFjdCBmCisgICAgICAgICAg ICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2Rp bTEgZDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDEgPSAxKQorIFN1 cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihkMikgLyogbWF0Y2hlZCAqLworIEdl bmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZDIgKGYgZDEpKQorICAgSEFTSF9K T0lOKGQxIChmIGQxKSkKKyAgIFNFUV9TQ0FOKGQyIGYgZDEpCisgICBOT19HQVRIRVIoZiBkMSBk MikKKygxOCByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2pvaW5f b3JkZXIoZDIgZDEpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1Qg KiBGUk9NIGpvX2ZhY3QgZgorCUxFRlQgSk9JTiBqb19kaW0xIGQxIE9OIGYuZGltMV9pZCA9IGQx LmlkCisJTEVGVCBKT0lOIGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkID0gZDIuaWQKKwlXSEVSRSB2 YWwxID0gMSBBTkQgdmFsMiA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExB TiAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggSm9pbgorICAgSGFzaCBDb25k OiAoKGQxLmlkID0gZi5kaW0xX2lkKSBBTkQgKGQyLmlkID0gZi5kaW0yX2lkKSkKKyAgIC0+ICBO ZXN0ZWQgTG9vcAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2RpbTIgZDIKKyAgICAgICAg ICAgICAgIEZpbHRlcjogKHZhbDIgPSAxKQorICAgICAgICAgLT4gIE1hdGVyaWFsaXplCisgICAg ICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZGltMSBkMQorICAgICAgICAgICAgICAgICAg ICAgRmlsdGVyOiAodmFsMSA9IDEpCisgICAtPiAgSGFzaAorICAgICAgICAgLT4gIFNlcSBTY2Fu IG9uIGpvX2ZhY3QgZgorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihkMiBk MSkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIo ZDIgZDEgZikKKyAgIE5FU1RFRF9MT09QX01BVEVSSUFMSVpFKGQxKQorICAgSEFTSF9KT0lOKGYp CisgICBTRVFfU0NBTihkMiBkMSBmKQorICAgTk9fR0FUSEVSKGYgZDEgZDIpCisoMTggcm93cykK KworQ09NTUlUOworLS0gam9fZmFjdCBpcyBub3QgcGFydGl0aW9uZWQsIGJ1dCBsZXQncyB0cnkg cHJldGVuZGluZyB0aGF0IGl0IGlzIGFuZAorLS0gdmVyaWZ5aW5nIHRoYXQgdGhlIGFkdmljZSBk b2VzIG5vdCBhcHBseS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9 ICdqb2luX29yZGVyKGYvZDEgZDEgZDIpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJ Q0UpCitTRUxFQ1QgKiBGUk9NIGpvX2ZhY3QgZgorCUxFRlQgSk9JTiBqb19kaW0xIGQxIE9OIGYu ZGltMV9pZCA9IGQxLmlkCisJTEVGVCBKT0lOIGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkID0gZDIu aWQKKwlXSEVSRSB2YWwxID0gMSBBTkQgdmFsMiA9IDE7CisgICAgICAgICAgICAgICAgICAgICAg ICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExv b3AKKyAgIERpc2FibGVkOiB0cnVlCisgICAtPiAgTmVzdGVkIExvb3AKKyAgICAgICAgIERpc2Fi bGVkOiB0cnVlCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZmFjdCBmCisgICAgICAgICAt PiAgSW5kZXggU2NhbiB1c2luZyBqb19kaW0xX3BrZXkgb24gam9fZGltMSBkMQorICAgICAgICAg ICAgICAgSW5kZXggQ29uZDogKGlkID0gZi5kaW0xX2lkKQorICAgICAgICAgICAgICAgRmlsdGVy OiAodmFsMSA9IDEpCisgICAtPiAgSW5kZXggU2NhbiB1c2luZyBqb19kaW0yX3BrZXkgb24gam9f ZGltMiBkMgorICAgICAgICAgSW5kZXggQ29uZDogKGlkID0gZi5kaW0yX2lkKQorICAgICAgICAg RmlsdGVyOiAodmFsMiA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVS KGYvZDEgZDEgZDIpIC8qIHBhcnRpYWxseSBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2 aWNlOgorICAgSk9JTl9PUkRFUihmIGQxIGQyKQorICAgTkVTVEVEX0xPT1BfUExBSU4oZDEgZDIp CisgICBTRVFfU0NBTihmKQorICAgSU5ERVhfU0NBTihkMSBwdWJsaWMuam9fZGltMV9wa2V5IGQy IHB1YmxpYy5qb19kaW0yX3BrZXkpCisgICBOT19HQVRIRVIoZiBkMSBkMikKKygxOSByb3dzKQor CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2pvaW5fb3JkZXIoZi9kMSAoZDEg ZDIpKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBq b19mYWN0IGYKKwlMRUZUIEpPSU4gam9fZGltMSBkMSBPTiBmLmRpbTFfaWQgPSBkMS5pZAorCUxF RlQgSk9JTiBqb19kaW0yIGQyIE9OIGYuZGltMl9pZCA9IGQyLmlkCisJV0hFUkUgdmFsMSA9IDEg QU5EIHZhbDIgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAg ICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIERpc2FibGVkOiB0 cnVlCisgICBKb2luIEZpbHRlcjogKChkMS5pZCA9IGYuZGltMV9pZCkgQU5EIChkMi5pZCA9IGYu ZGltMl9pZCkpCisgICAtPiAgTmVzdGVkIExvb3AKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBq b19kaW0xIGQxCisgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwxID0gMSkKKyAgICAgICAgIC0+ ICBNYXRlcmlhbGl6ZQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2RpbTIgZDIK KyAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDIgPSAxKQorICAgLT4gIFNlcSBTY2Fu IG9uIGpvX2ZhY3QgZgorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmL2Qx IChkMSBkMikpIC8qIHBhcnRpYWxseSBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNl OgorICAgSk9JTl9PUkRFUihkMSBkMiBmKQorICAgTkVTVEVEX0xPT1BfUExBSU4oZikKKyAgIE5F U1RFRF9MT09QX01BVEVSSUFMSVpFKGQyKQorICAgU0VRX1NDQU4oZDEgZDIgZikKKyAgIE5PX0dB VEhFUihmIGQxIGQyKQorKDE4IHJvd3MpCisKK0NPTU1JVDsKKy0tIFRoZSB1bnVzdWFsIGZvcm11 bGF0aW9uIG9mIHRoaXMgcXVlcnkgaXMgaW50ZW5kZWQgdG8gcHJldmVudCB0aGUgcXVlcnkKKy0t IHBsYW5uZXIgZnJvbSByZWR1Y2luZyB0aGUgRlVMTCBKT0lOIHRvIHNvbWUgb3RoZXIgam9pbiB0 eXBlLCBzbyB0aGF0IHdlCistLSBjYW4gdGVzdCB3aGF0IGhhcHBlbnMgd2l0aCBhIGpvaW4gdHlw ZSB0aGF0IGNhbm5vdCBiZSByZW9yZGVyZWQuCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURW SUNFKQorU0VMRUNUICogRlJPTSBqb19kaW0xIGQxCisJSU5ORVIgSk9JTiAoam9fZmFjdCBmIEZV TEwgSk9JTiBqb19kaW0yIGQyIE9OIGYuZGltMl9pZCArIDAgPSBkMi5pZCArIDApCisJT04gZDEu aWQgPSBmLmRpbTFfaWQgT1IgZi5kaW0xX2lkIElTIE5VTEw7CisgICAgICAgICAgICAgICAgICAg ICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVk IExvb3AKKyAgIEpvaW4gRmlsdGVyOiAoKGQxLmlkID0gZi5kaW0xX2lkKSBPUiAoZi5kaW0xX2lk IElTIE5VTEwpKQorICAgLT4gIE1lcmdlIEZ1bGwgSm9pbgorICAgICAgICAgTWVyZ2UgQ29uZDog KCgoZDIuaWQgKyAwKSkgPSAoKGYuZGltMl9pZCArIDApKSkKKyAgICAgICAgIC0+ICBTb3J0Cisg ICAgICAgICAgICAgICBTb3J0IEtleTogKChkMi5pZCArIDApKQorICAgICAgICAgICAgICAgLT4g IFNlcSBTY2FuIG9uIGpvX2RpbTIgZDIKKyAgICAgICAgIC0+ICBTb3J0CisgICAgICAgICAgICAg ICBTb3J0IEtleTogKChmLmRpbTJfaWQgKyAwKSkKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2Nh biBvbiBqb19mYWN0IGYKKyAgIC0+ICBNYXRlcmlhbGl6ZQorICAgICAgICAgLT4gIFNlcSBTY2Fu IG9uIGpvX2RpbTEgZDEKKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGQy IGYgZDEpCisgICBNRVJHRV9KT0lOX1BMQUlOKGYpCisgICBORVNURURfTE9PUF9NQVRFUklBTEla RShkMSkKKyAgIFNFUV9TQ0FOKGQyIGYgZDEpCisgICBOT19HQVRIRVIoZDEgZiBkMikKKygxOCBy b3dzKQorCistLSBXZSBzaG91bGQgbm90IGJlIGFibGUgdG8gZm9yY2UgdGhlIHBsYW5uZXIgdG8g am9pbiBmIHRvIGQxIGZpcnN0LCBiZWNhdXNlCistLSB0aGF0IGlzIG5vdCBhIHZhbGlkIGpvaW4g b3JkZXIsIGJ1dCB3ZSBzaG91bGQgYmUgYWJsZSB0byBmb3JjZSB0aGUgcGxhbm5lcgorLS0gdG8g bWFrZSBlaXRoZXIgZDIgb3IgZiB0aGUgZHJpdmluZyB0YWJsZS4KK0JFR0lOOworU0VUIExPQ0FM IHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdqb2luX29yZGVyKGYgZDEgZDIpJzsKK0VYUExBSU4g KENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGpvX2RpbTEgZDEKKwlJTk5F UiBKT0lOIChqb19mYWN0IGYgRlVMTCBKT0lOIGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkICsgMCA9 IGQyLmlkICsgMCkKKwlPTiBkMS5pZCA9IGYuZGltMV9pZCBPUiBmLmRpbTFfaWQgSVMgTlVMTDsK KyAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgRGlzYWJsZWQ6IHRydWUKKyAgIEpvaW4gRmls dGVyOiAoKGQxLmlkID0gZi5kaW0xX2lkKSBPUiAoZi5kaW0xX2lkIElTIE5VTEwpKQorICAgLT4g IE1lcmdlIEZ1bGwgSm9pbgorICAgICAgICAgRGlzYWJsZWQ6IHRydWUKKyAgICAgICAgIE1lcmdl IENvbmQ6ICgoKGQyLmlkICsgMCkpID0gKChmLmRpbTJfaWQgKyAwKSkpCisgICAgICAgICAtPiAg U29ydAorICAgICAgICAgICAgICAgU29ydCBLZXk6ICgoZDIuaWQgKyAwKSkKKyAgICAgICAgICAg ICAgIC0+ICBTZXEgU2NhbiBvbiBqb19kaW0yIGQyCisgICAgICAgICAtPiAgU29ydAorICAgICAg ICAgICAgICAgU29ydCBLZXk6ICgoZi5kaW0yX2lkICsgMCkpCisgICAgICAgICAgICAgICAtPiAg U2VxIFNjYW4gb24gam9fZmFjdCBmCisgICAtPiAgU2VxIFNjYW4gb24gam9fZGltMSBkMQorIFN1 cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQxIGQyKSAvKiBwYXJ0aWFsbHkg bWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZDIgZiBk MSkKKyAgIE1FUkdFX0pPSU5fUExBSU4oZikKKyAgIE5FU1RFRF9MT09QX1BMQUlOKGQxKQorICAg U0VRX1NDQU4oZDIgZiBkMSkKKyAgIE5PX0dBVEhFUihkMSBmIGQyKQorKDIxIHJvd3MpCisKK1NF VCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnam9pbl9vcmRlcihmIGQyIGQxKSc7CitF WFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBqb19kaW0xIGQx CisJSU5ORVIgSk9JTiAoam9fZmFjdCBmIEZVTEwgSk9JTiBqb19kaW0yIGQyIE9OIGYuZGltMl9p ZCArIDAgPSBkMi5pZCArIDApCisJT04gZDEuaWQgPSBmLmRpbTFfaWQgT1IgZi5kaW0xX2lkIElT IE5VTEw7CisgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIEpvaW4gRmlsdGVyOiAoKGQxLmlk ID0gZi5kaW0xX2lkKSBPUiAoZi5kaW0xX2lkIElTIE5VTEwpKQorICAgLT4gIE1lcmdlIEZ1bGwg Sm9pbgorICAgICAgICAgTWVyZ2UgQ29uZDogKCgoZi5kaW0yX2lkICsgMCkpID0gKChkMi5pZCAr IDApKSkKKyAgICAgICAgIC0+ICBTb3J0CisgICAgICAgICAgICAgICBTb3J0IEtleTogKChmLmRp bTJfaWQgKyAwKSkKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19mYWN0IGYKKyAg ICAgICAgIC0+ICBTb3J0CisgICAgICAgICAgICAgICBTb3J0IEtleTogKChkMi5pZCArIDApKQor ICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2RpbTIgZDIKKyAgIC0+ICBNYXRlcmlh bGl6ZQorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2RpbTEgZDEKKyBTdXBwbGllZCBQbGFu IEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBkMiBkMSkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRl ZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBkMiBkMSkKKyAgIE1FUkdFX0pPSU5fUExB SU4oZDIpCisgICBORVNURURfTE9PUF9NQVRFUklBTElaRShkMSkKKyAgIFNFUV9TQ0FOKGYgZDIg ZDEpCisgICBOT19HQVRIRVIoZDEgZiBkMikKKygyMCByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxh bl9hZHZpY2UuYWR2aWNlID0gJ2pvaW5fb3JkZXIoZDIgZiBkMSknOworRVhQTEFJTiAoQ09TVFMg T0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gam9fZGltMSBkMQorCUlOTkVSIEpPSU4g KGpvX2ZhY3QgZiBGVUxMIEpPSU4gam9fZGltMiBkMiBPTiBmLmRpbTJfaWQgKyAwID0gZDIuaWQg KyAwKQorCU9OIGQxLmlkID0gZi5kaW0xX2lkIE9SIGYuZGltMV9pZCBJUyBOVUxMOworICAgICAg ICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorIE5lc3RlZCBMb29wCisgICBKb2luIEZpbHRlcjogKChkMS5pZCA9IGYuZGltMV9pZCkg T1IgKGYuZGltMV9pZCBJUyBOVUxMKSkKKyAgIC0+ICBNZXJnZSBGdWxsIEpvaW4KKyAgICAgICAg IE1lcmdlIENvbmQ6ICgoKGQyLmlkICsgMCkpID0gKChmLmRpbTJfaWQgKyAwKSkpCisgICAgICAg ICAtPiAgU29ydAorICAgICAgICAgICAgICAgU29ydCBLZXk6ICgoZDIuaWQgKyAwKSkKKyAgICAg ICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19kaW0yIGQyCisgICAgICAgICAtPiAgU29ydAor ICAgICAgICAgICAgICAgU29ydCBLZXk6ICgoZi5kaW0yX2lkICsgMCkpCisgICAgICAgICAgICAg ICAtPiAgU2VxIFNjYW4gb24gam9fZmFjdCBmCisgICAtPiAgTWF0ZXJpYWxpemUKKyAgICAgICAg IC0+ICBTZXEgU2NhbiBvbiBqb19kaW0xIGQxCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBK T0lOX09SREVSKGQyIGYgZDEpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6 CisgICBKT0lOX09SREVSKGQyIGYgZDEpCisgICBNRVJHRV9KT0lOX1BMQUlOKGYpCisgICBORVNU RURfTE9PUF9NQVRFUklBTElaRShkMSkKKyAgIFNFUV9TQ0FOKGQyIGYgZDEpCisgICBOT19HQVRI RVIoZDEgZiBkMikKKygyMCByb3dzKQorCitDT01NSVQ7CistLSBUd28gaW5jb21wYXRpYmxlIGpv aW4gb3JkZXJzIHNob3VsZCBjb25mbGljdC4gSW4gdGhlIHNlY29uZCBjYXNlLAorLS0gdGhlIGNv bmZsaWN0IGlzIGltcGxpY2l0OiBpZiBkMSBpcyBvbiB0aGUgaW5uZXIgc2lkZSBvZiBhIGpvaW4g b2YgYW55CistLSB0eXBlLCBpdCBjYW5ub3QgYWxzbyBiZSB0aGUgZHJpdmluZyB0YWJsZS4KK0JF R0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdqb2luX29yZGVyKGYpIGpv aW5fb3JkZXIoZDEpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1Qg KiBGUk9NIGpvX2RpbTEgZDEKKwlJTk5FUiBKT0lOIChqb19mYWN0IGYgRlVMTCBKT0lOIGpvX2Rp bTIgZDIgT04gZi5kaW0yX2lkICsgMCA9IGQyLmlkICsgMCkKKwlPTiBkMS5pZCA9IGYuZGltMV9p ZCBPUiBmLmRpbTFfaWQgSVMgTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQ TEFOICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgSm9p biBGaWx0ZXI6ICgoZDEuaWQgPSBmLmRpbTFfaWQpIE9SIChmLmRpbTFfaWQgSVMgTlVMTCkpCisg ICAtPiAgTWVyZ2UgRnVsbCBKb2luCisgICAgICAgICBNZXJnZSBDb25kOiAoKChmLmRpbTJfaWQg KyAwKSkgPSAoKGQyLmlkICsgMCkpKQorICAgICAgICAgLT4gIFNvcnQKKyAgICAgICAgICAgICAg IFNvcnQgS2V5OiAoKGYuZGltMl9pZCArIDApKQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2Fu IG9uIGpvX2ZhY3QgZgorICAgICAgICAgLT4gIFNvcnQKKyAgICAgICAgICAgICAgIFNvcnQgS2V5 OiAoKGQyLmlkICsgMCkpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZGltMiBk MgorICAgLT4gIE1hdGVyaWFsaXplCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZGltMSBk MQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmKSAvKiBtYXRjaGVkLCBj b25mbGljdGluZyAqLworICAgSk9JTl9PUkRFUihkMSkgLyogbWF0Y2hlZCwgY29uZmxpY3Rpbmcs IGZhaWxlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBkMiBk MSkKKyAgIE1FUkdFX0pPSU5fUExBSU4oZDIpCisgICBORVNURURfTE9PUF9NQVRFUklBTElaRShk MSkKKyAgIFNFUV9TQ0FOKGYgZDIgZDEpCisgICBOT19HQVRIRVIoZDEgZiBkMikKKygyMSByb3dz KQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2pvaW5fb3JkZXIoZDEpIGhh c2hfam9pbihkMSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAq IEZST00gam9fZGltMSBkMQorCUlOTkVSIEpPSU4gKGpvX2ZhY3QgZiBGVUxMIEpPSU4gam9fZGlt MiBkMiBPTiBmLmRpbTJfaWQgKyAwID0gZDIuaWQgKyAwKQorCU9OIGQxLmlkID0gZi5kaW0xX2lk IE9SIGYuZGltMV9pZCBJUyBOVUxMOworICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQ TEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAg Sm9pbiBGaWx0ZXI6ICgoZDEuaWQgPSBmLmRpbTFfaWQpIE9SIChmLmRpbTFfaWQgSVMgTlVMTCkp CisgICAtPiAgU2VxIFNjYW4gb24gam9fZGltMSBkMQorICAgLT4gIE1hdGVyaWFsaXplCisgICAg ICAgICAtPiAgTWVyZ2UgRnVsbCBKb2luCisgICAgICAgICAgICAgICBNZXJnZSBDb25kOiAoKChk Mi5pZCArIDApKSA9ICgoZi5kaW0yX2lkICsgMCkpKQorICAgICAgICAgICAgICAgLT4gIFNvcnQK KyAgICAgICAgICAgICAgICAgICAgIFNvcnQgS2V5OiAoKGQyLmlkICsgMCkpCisgICAgICAgICAg ICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZGltMiBkMgorICAgICAgICAgICAgICAgLT4g IFNvcnQKKyAgICAgICAgICAgICAgICAgICAgIFNvcnQgS2V5OiAoKGYuZGltMl9pZCArIDApKQor ICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2ZhY3QgZgorIFN1cHBsaWVk IFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihkMSkgLyogbWF0Y2hlZCwgY29uZmxpY3Rpbmcg Ki8KKyAgIEhBU0hfSk9JTihkMSkgLyogbWF0Y2hlZCwgY29uZmxpY3RpbmcsIGZhaWxlZCAqLwor IEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZDEgKGQyIGYpKQorICAgTUVS R0VfSk9JTl9QTEFJTihmKQorICAgTkVTVEVEX0xPT1BfTUFURVJJQUxJWkUoKGYgZDIpKQorICAg U0VRX1NDQU4oZDEgZDIgZikKKyAgIE5PX0dBVEhFUihkMSBmIGQyKQorKDIxIHJvd3MpCisKK0NP TU1JVDsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvam9pbl9z dHJhdGVneS5vdXQgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL2pvaW5fc3RyYXRl Z3kub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4wZjlkYjY5MjE5 MAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvam9p bl9zdHJhdGVneS5vdXQKQEAgLTAsMCArMSwzMzkgQEAKK0xPQUQgJ3BnX3BsYW5fYWR2aWNlJzsK K1NFVCBtYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyID0gMDsKK0NSRUFURSBUQUJMRSBq b2luX2RpbSAoaWQgc2VyaWFsIHByaW1hcnkga2V5LCBkaW0gdGV4dCkKKwlXSVRIIChhdXRvdmFj dXVtX2VuYWJsZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5UTyBqb2luX2RpbSAoZGltKSBTRUxFQ1Qg cmFuZG9tKCk6OnRleHQgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDApIGc7CitWQUNVVU0gQU5B TFlaRSBqb2luX2RpbTsKK0NSRUFURSBUQUJMRSBqb2luX2ZhY3QgKAorCWlkIGludCBwcmltYXJ5 IGtleSwKKwlkaW1faWQgaW50ZWdlciBub3QgbnVsbCByZWZlcmVuY2VzIGpvaW5fZGltIChpZCkK KykgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gam9pbl9m YWN0CisJU0VMRUNUIGcsIChnJTMpKzEgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwMDApIGc7 CitDUkVBVEUgSU5ERVggam9pbl9mYWN0X2RpbV9pZCBPTiBqb2luX2ZhY3QgKGRpbV9pZCk7CitW QUNVVU0gQU5BTFlaRSBqb2luX2ZhY3Q7CistLSBXZSBleHBlY3QgYSBoYXNoIGpvaW4gYnkgZGVm YXVsdC4KK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBq b2luX2ZhY3QgZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworICAgICAgICAg ICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBIYXNoIEpvaW4KKyAgIEhhc2ggQ29uZDogKGYuZGltX2lkID0gZC5pZCkKKyAg IC0+ICBTZXEgU2NhbiBvbiBqb2luX2ZhY3QgZgorICAgLT4gIEhhc2gKKyAgICAgICAgIC0+ICBT ZXEgU2NhbiBvbiBqb2luX2RpbSBkCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9P UkRFUihmIGQpCisgICBIQVNIX0pPSU4oZCkKKyAgIFNFUV9TQ0FOKGYgZCkKKyAgIE5PX0dBVEhF UihmIGQpCisoMTAgcm93cykKKworLS0gVHJ5IGZvcmNpbmcgZWFjaCBqb2luIG1ldGhvZCBpbiB0 dXJuIHdpdGggam9pbl9kaW0gYXMgdGhlIGlubmVyIHRhYmxlLgorLS0gQWxsIG9mIHRoZXNlIHNo b3VsZCB3b3JrIGV4Y2VwdCBmb3IgTUVSR0VfSk9JTl9NQVRFUklBTElaRTsgdGhhdCB3aWxsCist LSBmYWlsLCBiZWNhdXNlIHRoZSBwbGFubmVyIGtub3dzIHRoYXQgam9pbl9kaW0gKGlkKSBpcyB1 bmlxdWUsIGFuZCB3aWxsCistLSByZWZ1c2UgdG8gYWRkIG1hcmsvcmVzdG9yZSBvdmVyaGVhZC4K K0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdIQVNIX0pPSU4oZCkn OworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGpvaW5f ZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CisgICAgICAgICAgICAg UVVFUlkgUExBTiAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorIEhhc2ggSm9pbgorICAgSGFzaCBDb25kOiAoZi5kaW1faWQgPSBkLmlkKQorICAgLT4g IFNlcSBTY2FuIG9uIGpvaW5fZmFjdCBmCisgICAtPiAgSGFzaAorICAgICAgICAgLT4gIFNlcSBT Y2FuIG9uIGpvaW5fZGltIGQKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIEhBU0hfSk9JTihk KSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihm IGQpCisgICBIQVNIX0pPSU4oZCkKKyAgIFNFUV9TQ0FOKGYgZCkKKyAgIE5PX0dBVEhFUihmIGQp CisoMTIgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdNRVJHRV9K T0lOX01BVEVSSUFMSVpFKGQpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJ U0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBk LmlkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAg ICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE1lcmdlIEpvaW4KKyAgIERpc2FibGVkOiB0cnVlCisg ICBNZXJnZSBDb25kOiAoZi5kaW1faWQgPSBkLmlkKQorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcg am9pbl9mYWN0X2RpbV9pZCBvbiBqb2luX2ZhY3QgZgorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcg am9pbl9kaW1fcGtleSBvbiBqb2luX2RpbSBkCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBN RVJHRV9KT0lOX01BVEVSSUFMSVpFKGQpIC8qIG1hdGNoZWQsIGZhaWxlZCAqLworIEdlbmVyYXRl ZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBkKQorICAgTUVSR0VfSk9JTl9QTEFJTihk KQorICAgSU5ERVhfU0NBTihmIHB1YmxpYy5qb2luX2ZhY3RfZGltX2lkIGQgcHVibGljLmpvaW5f ZGltX3BrZXkpCisgICBOT19HQVRIRVIoZiBkKQorKDEyIHJvd3MpCisKK1NFVCBMT0NBTCBwZ19w bGFuX2FkdmljZS5hZHZpY2UgPSAnTUVSR0VfSk9JTl9QTEFJTihkKSc7CitFWFBMQUlOIChDT1NU UyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2lu X2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFFV RVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBNZXJnZSBKb2lu CisgICBNZXJnZSBDb25kOiAoZi5kaW1faWQgPSBkLmlkKQorICAgLT4gIEluZGV4IFNjYW4gdXNp bmcgam9pbl9mYWN0X2RpbV9pZCBvbiBqb2luX2ZhY3QgZgorICAgLT4gIEluZGV4IFNjYW4gdXNp bmcgam9pbl9kaW1fcGtleSBvbiBqb2luX2RpbSBkCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6Cisg ICBNRVJHRV9KT0lOX1BMQUlOKGQpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZp Y2U6CisgICBKT0lOX09SREVSKGYgZCkKKyAgIE1FUkdFX0pPSU5fUExBSU4oZCkKKyAgIElOREVY X1NDQU4oZiBwdWJsaWMuam9pbl9mYWN0X2RpbV9pZCBkIHB1YmxpYy5qb2luX2RpbV9wa2V5KQor ICAgTk9fR0FUSEVSKGYgZCkKKygxMSByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2Uu YWR2aWNlID0gJ05FU1RFRF9MT09QX01BVEVSSUFMSVpFKGQpJzsKK0VYUExBSU4gKENPU1RTIE9G RiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5fZGlt IGQgT04gZi5kaW1faWQgPSBkLmlkOworICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAg ICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgTmVzdGVkIExvb3AKKyAgIEpvaW4gRmlsdGVyOiAoZi5kaW1faWQgPSBkLmlkKQorICAgLT4g IFNlcSBTY2FuIG9uIGpvaW5fZmFjdCBmCisgICAtPiAgTWF0ZXJpYWxpemUKKyAgICAgICAgIC0+ ICBTZXEgU2NhbiBvbiBqb2luX2RpbSBkCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBORVNU RURfTE9PUF9NQVRFUklBTElaRShkKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2 aWNlOgorICAgSk9JTl9PUkRFUihmIGQpCisgICBORVNURURfTE9PUF9NQVRFUklBTElaRShkKQor ICAgU0VRX1NDQU4oZiBkKQorICAgTk9fR0FUSEVSKGYgZCkKKygxMiByb3dzKQorCitTRVQgTE9D QUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ05FU1RFRF9MT09QX01FTU9JWkUoZCknOworRVhQ TEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGpvaW5fZmFjdCBm IEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CisgICAgICAgICAgICAgICAgICAg ICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AK KyAgIC0+ICBTZXEgU2NhbiBvbiBqb2luX2ZhY3QgZgorICAgLT4gIE1lbW9pemUKKyAgICAgICAg IENhY2hlIEtleTogZi5kaW1faWQKKyAgICAgICAgIENhY2hlIE1vZGU6IGxvZ2ljYWwKKyAgICAg ICAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIGpvaW5fZGltX3BrZXkgb24gam9pbl9kaW0gZAorICAg ICAgICAgICAgICAgSW5kZXggQ29uZDogKGlkID0gZi5kaW1faWQpCisgU3VwcGxpZWQgUGxhbiBB ZHZpY2U6CisgICBORVNURURfTE9PUF9NRU1PSVpFKGQpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0 ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGYgZCkKKyAgIE5FU1RFRF9MT09QX01FTU9J WkUoZCkKKyAgIFNFUV9TQ0FOKGYpCisgICBJTkRFWF9TQ0FOKGQgcHVibGljLmpvaW5fZGltX3Br ZXkpCisgICBOT19HQVRIRVIoZiBkKQorKDE1IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2Fk dmljZS5hZHZpY2UgPSAnTkVTVEVEX0xPT1BfUExBSU4oZCknOworRVhQTEFJTiAoQ09TVFMgT0ZG LCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0g ZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CisgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIC0+ICBTZXEgU2NhbiBvbiBqb2luX2Zh Y3QgZgorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgam9pbl9kaW1fcGtleSBvbiBqb2luX2RpbSBk CisgICAgICAgICBJbmRleCBDb25kOiAoaWQgPSBmLmRpbV9pZCkKKyBTdXBwbGllZCBQbGFuIEFk dmljZToKKyAgIE5FU1RFRF9MT09QX1BMQUlOKGQpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQg UGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGYgZCkKKyAgIE5FU1RFRF9MT09QX1BMQUlOKGQp CisgICBTRVFfU0NBTihmKQorICAgSU5ERVhfU0NBTihkIHB1YmxpYy5qb2luX2RpbV9wa2V5KQor ICAgTk9fR0FUSEVSKGYgZCkKKygxMiByb3dzKQorCitDT01NSVQ7CistLSBOb3cgdHJ5IGZvcmNp bmcgZWFjaCBqb2luIG1ldGhvZCBpbiB0dXJuIHdpdGggam9pbl9mYWN0IGFzIHRoZSBpbm5lcgor LS0gdGFibGUuIEFsbCBvZiB0aGVzZSBzaG91bGQgd29yay4KK0JFR0lOOworU0VUIExPQ0FMIHBn X3BsYW5fYWR2aWNlLmFkdmljZSA9ICdIQVNIX0pPSU4oZiknOworRVhQTEFJTiAoQ09TVFMgT0ZG LCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0g ZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CisgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSGFzaCBKb2luCisg ICBIYXNoIENvbmQ6IChkLmlkID0gZi5kaW1faWQpCisgICAtPiAgU2VxIFNjYW4gb24gam9pbl9k aW0gZAorICAgLT4gIEhhc2gKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb2luX2ZhY3QgZgor IFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSEFTSF9KT0lOKGYpIC8qIG1hdGNoZWQgKi8KKyBH ZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGQgZikKKyAgIEhBU0hfSk9JTihm KQorICAgU0VRX1NDQU4oZCBmKQorICAgTk9fR0FUSEVSKGYgZCkKKygxMiByb3dzKQorCitTRVQg TE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ01FUkdFX0pPSU5fTUFURVJJQUxJWkUoZikn OworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGpvaW5f ZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CisgICAgICAgICAgICAg ICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgTWVyZ2UgSm9pbgorICAgTWVyZ2UgQ29uZDogKGQuaWQgPSBmLmRpbV9pZCkKKyAgIC0+ ICBJbmRleCBTY2FuIHVzaW5nIGpvaW5fZGltX3BrZXkgb24gam9pbl9kaW0gZAorICAgLT4gIE1h dGVyaWFsaXplCisgICAgICAgICAtPiAgSW5kZXggU2NhbiB1c2luZyBqb2luX2ZhY3RfZGltX2lk IG9uIGpvaW5fZmFjdCBmCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBNRVJHRV9KT0lOX01B VEVSSUFMSVpFKGYpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBK T0lOX09SREVSKGQgZikKKyAgIE1FUkdFX0pPSU5fTUFURVJJQUxJWkUoZikKKyAgIElOREVYX1ND QU4oZCBwdWJsaWMuam9pbl9kaW1fcGtleSBmIHB1YmxpYy5qb2luX2ZhY3RfZGltX2lkKQorICAg Tk9fR0FUSEVSKGYgZCkKKygxMiByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2 aWNlID0gJ01FUkdFX0pPSU5fUExBSU4oZiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FE VklDRSkKKwlTRUxFQ1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRp bV9pZCA9IGQuaWQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAg ICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTWVyZ2UgSm9pbgorICAgTWVyZ2UgQ29u ZDogKGQuaWQgPSBmLmRpbV9pZCkKKyAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIGpvaW5fZGltX3Br ZXkgb24gam9pbl9kaW0gZAorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgam9pbl9mYWN0X2RpbV9p ZCBvbiBqb2luX2ZhY3QgZgorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgTUVSR0VfSk9JTl9Q TEFJTihmKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9P UkRFUihkIGYpCisgICBNRVJHRV9KT0lOX1BMQUlOKGYpCisgICBJTkRFWF9TQ0FOKGQgcHVibGlj LmpvaW5fZGltX3BrZXkgZiBwdWJsaWMuam9pbl9mYWN0X2RpbV9pZCkKKyAgIE5PX0dBVEhFUihm IGQpCisoMTEgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdORVNU RURfTE9PUF9NQVRFUklBTElaRShmKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNF KQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lk ID0gZC5pZDsKKyAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29w CisgICBKb2luIEZpbHRlcjogKGYuZGltX2lkID0gZC5pZCkKKyAgIC0+ICBTZXEgU2NhbiBvbiBq b2luX2RpbSBkCisgICAtPiAgTWF0ZXJpYWxpemUKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBq b2luX2ZhY3QgZgorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgTkVTVEVEX0xPT1BfTUFURVJJ QUxJWkUoZikgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5f T1JERVIoZCBmKQorICAgTkVTVEVEX0xPT1BfTUFURVJJQUxJWkUoZikKKyAgIFNFUV9TQ0FOKGQg ZikKKyAgIE5PX0dBVEhFUihmIGQpCisoMTIgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2 aWNlLmFkdmljZSA9ICdORVNURURfTE9PUF9NRU1PSVpFKGYpJzsKK0VYUExBSU4gKENPU1RTIE9G RiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5fZGlt IGQgT04gZi5kaW1faWQgPSBkLmlkOworICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQ TEFOICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIC0+ ICBTZXEgU2NhbiBvbiBqb2luX2RpbSBkCisgICAtPiAgTWVtb2l6ZQorICAgICAgICAgQ2FjaGUg S2V5OiBkLmlkCisgICAgICAgICBDYWNoZSBNb2RlOiBsb2dpY2FsCisgICAgICAgICAtPiAgSW5k ZXggU2NhbiB1c2luZyBqb2luX2ZhY3RfZGltX2lkIG9uIGpvaW5fZmFjdCBmCisgICAgICAgICAg ICAgICBJbmRleCBDb25kOiAoZGltX2lkID0gZC5pZCkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToK KyAgIE5FU1RFRF9MT09QX01FTU9JWkUoZikgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFu IEFkdmljZToKKyAgIEpPSU5fT1JERVIoZCBmKQorICAgTkVTVEVEX0xPT1BfTUVNT0laRShmKQor ICAgU0VRX1NDQU4oZCkKKyAgIElOREVYX1NDQU4oZiBwdWJsaWMuam9pbl9mYWN0X2RpbV9pZCkK KyAgIE5PX0dBVEhFUihmIGQpCisoMTUgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNl LmFkdmljZSA9ICdORVNURURfTE9PUF9QTEFJTihmKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBM QU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9O IGYuZGltX2lkID0gZC5pZDsKKyAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAg ICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wCisgICAtPiAgU2VxIFNjYW4gb24gam9p bl9kaW0gZAorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgam9pbl9mYWN0X2RpbV9pZCBvbiBqb2lu X2ZhY3QgZgorICAgICAgICAgSW5kZXggQ29uZDogKGRpbV9pZCA9IGQuaWQpCisgU3VwcGxpZWQg UGxhbiBBZHZpY2U6CisgICBORVNURURfTE9PUF9QTEFJTihmKSAvKiBtYXRjaGVkICovCisgR2Vu ZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihkIGYpCisgICBORVNURURfTE9PUF9Q TEFJTihmKQorICAgU0VRX1NDQU4oZCkKKyAgIElOREVYX1NDQU4oZiBwdWJsaWMuam9pbl9mYWN0 X2RpbV9pZCkKKyAgIE5PX0dBVEhFUihmIGQpCisoMTIgcm93cykKKworQ09NTUlUOworLS0gTm9u LXdvcmtpbmcgY2FzZXMuIFdlIGNhbid0IGZvcmNlIGEgZm9yZWlnbiBqb2luIGJldHdlZW4gdGhl c2UgdGFibGVzLAorLS0gYmVjYXVzZSB0aGV5IGFyZW4ndCBmb3JlaWduIHRhYmxlcy4gV2UgYWxz byBjYW4ndCB1c2UgdHdvIGRpZmZlcmVudAorLS0gc3RyYXRlZ2llcyBvbiB0aGUgc2FtZSB0YWJs ZSwgbm9yIGNhbiB3ZSBwdXQgYm90aCB0YWJsZXMgb24gdGhlIGlubmVyCistLSBzaWRlIG9mIHRo ZSBzYW1lIGpvaW4uCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAn Rk9SRUlHTl9KT0lOKChmIGQpKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQor CVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0g ZC5pZDsKKyAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyBOZXN0ZWQgTG9vcAorICAgRGlzYWJsZWQ6IHRydWUKKyAgIC0+ICBTZXEgU2NhbiBvbiBqb2lu X2ZhY3QgZgorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgam9pbl9kaW1fcGtleSBvbiBqb2luX2Rp bSBkCisgICAgICAgICBJbmRleCBDb25kOiAoaWQgPSBmLmRpbV9pZCkKKyBTdXBwbGllZCBQbGFu IEFkdmljZToKKyAgIEZPUkVJR05fSk9JTigoZiBkKSkgLyogbWF0Y2hlZCwgZmFpbGVkICovCisg R2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQpCisgICBORVNURURfTE9P UF9QTEFJTihkKQorICAgU0VRX1NDQU4oZikKKyAgIElOREVYX1NDQU4oZCBwdWJsaWMuam9pbl9k aW1fcGtleSkKKyAgIE5PX0dBVEhFUihmIGQpCisoMTMgcm93cykKKworU0VUIExPQ0FMIHBnX3Bs YW5fYWR2aWNlLmFkdmljZSA9ICdORVNURURfTE9PUF9QTEFJTihmKSBORVNURURfTE9PUF9NQVRF UklBTElaRShmKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAq IEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIE1lcmdlIEpvaW4KKyAgIE1lcmdlIENvbmQ6IChkLmlkID0gZi5k aW1faWQpCisgICAtPiAgSW5kZXggU2NhbiB1c2luZyBqb2luX2RpbV9wa2V5IG9uIGpvaW5fZGlt IGQKKyAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIGpvaW5fZmFjdF9kaW1faWQgb24gam9pbl9mYWN0 IGYKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIE5FU1RFRF9MT09QX1BMQUlOKGYpIC8qIG1h dGNoZWQsIGNvbmZsaWN0aW5nLCBmYWlsZWQgKi8KKyAgIE5FU1RFRF9MT09QX01BVEVSSUFMSVpF KGYpIC8qIG1hdGNoZWQsIGNvbmZsaWN0aW5nLCBmYWlsZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBB ZHZpY2U6CisgICBKT0lOX09SREVSKGQgZikKKyAgIE1FUkdFX0pPSU5fUExBSU4oZikKKyAgIElO REVYX1NDQU4oZCBwdWJsaWMuam9pbl9kaW1fcGtleSBmIHB1YmxpYy5qb2luX2ZhY3RfZGltX2lk KQorICAgTk9fR0FUSEVSKGYgZCkKKygxMiByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZp Y2UuYWR2aWNlID0gJ05FU1RFRF9MT09QX1BMQUlOKGYgZCknOworRVhQTEFJTiAoQ09TVFMgT0ZG LCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0g ZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CisgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIERpc2FibGVkOiB0cnVlCisgICAtPiAg U2VxIFNjYW4gb24gam9pbl9mYWN0IGYKKyAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIGpvaW5fZGlt X3BrZXkgb24gam9pbl9kaW0gZAorICAgICAgICAgSW5kZXggQ29uZDogKGlkID0gZi5kaW1faWQp CisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBORVNURURfTE9PUF9QTEFJTihmKSAvKiBtYXRj aGVkLCBmYWlsZWQgKi8KKyAgIE5FU1RFRF9MT09QX1BMQUlOKGQpIC8qIG1hdGNoZWQgKi8KKyBH ZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGYgZCkKKyAgIE5FU1RFRF9MT09Q X1BMQUlOKGQpCisgICBTRVFfU0NBTihmKQorICAgSU5ERVhfU0NBTihkIHB1YmxpYy5qb2luX2Rp bV9wa2V5KQorICAgTk9fR0FUSEVSKGYgZCkKKygxNCByb3dzKQorCitDT01NSVQ7CmRpZmYgLS1n aXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL3BhcnRpdGlvbndpc2Uub3V0IGIv Y29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9wYXJ0aXRpb253aXNlLm91dApuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMmIzZDBhODI0NDMKLS0tIC9kZXYvbnVs bAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL3BhcnRpdGlvbndpc2Uub3V0 CkBAIC0wLDAgKzEsNDI2IEBACitMT0FEICdwZ19wbGFuX2FkdmljZSc7CitTRVQgbWF4X3BhcmFs bGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9IDA7CitTRVQgZW5hYmxlX3BhcnRpdGlvbndpc2Vfam9p biA9IHRydWU7CitDUkVBVEUgVEFCTEUgcHQxIChpZCBpbnRlZ2VyIHByaW1hcnkga2V5LCBkaW0x IHRleHQsIHZhbDEgaW50KQorCVBBUlRJVElPTiBCWSBSQU5HRSAoaWQpOworQ1JFQVRFIFRBQkxF IHB0MWEgUEFSVElUSU9OIE9GIHB0MSBGT1IgVkFMVUVTIEZST00gKDEpIHRvICgxMDAxKQorCVdJ VEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0NSRUFURSBUQUJMRSBwdDFiIFBBUlRJ VElPTiBPRiBwdDEgRk9SIFZBTFVFUyBGUk9NICgxMDAxKSB0byAoMjAwMSkKKwlXSVRIIChhdXRv dmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitDUkVBVEUgVEFCTEUgcHQxYyBQQVJUSVRJT04gT0Yg cHQxIEZPUiBWQUxVRVMgRlJPTSAoMjAwMSkgdG8gKDMwMDEpCisJV0lUSCAoYXV0b3ZhY3V1bV9l bmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gcHQxIChpZCwgZGltMSwgdmFsMSkKKwlTRUxF Q1QgZywgJ3NvbWUgZmlsbGVyIHRleHQgJyB8fCBnLCAoZyAlIDMpICsgMQorCSAgRlJPTSBnZW5l cmF0ZV9zZXJpZXMoMSwzMDAwKSBnOworVkFDVVVNIEFOQUxZWkUgcHQxOworQ1JFQVRFIFRBQkxF IHB0MiAoaWQgaW50ZWdlciBwcmltYXJ5IGtleSwgZGltMiB0ZXh0LCB2YWwyIGludCkKKwlQQVJU SVRJT04gQlkgUkFOR0UgKGlkKTsKK0NSRUFURSBUQUJMRSBwdDJhIFBBUlRJVElPTiBPRiBwdDIg Rk9SIFZBTFVFUyBGUk9NICgxKSB0byAoMTAwMSkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQg PSBmYWxzZSk7CitDUkVBVEUgVEFCTEUgcHQyYiBQQVJUSVRJT04gT0YgcHQyIEZPUiBWQUxVRVMg RlJPTSAoMTAwMSkgdG8gKDIwMDEpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2Up OworQ1JFQVRFIFRBQkxFIHB0MmMgUEFSVElUSU9OIE9GIHB0MiBGT1IgVkFMVUVTIEZST00gKDIw MDEpIHRvICgzMDAxKQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VS VCBJTlRPIHB0MiAoaWQsIGRpbTIsIHZhbDIpCisJU0VMRUNUIGcsICdzb21lIG90aGVyIHRleHQg JyB8fCBnLCAoZyAlIDUpICsgMQorCSAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwzMDAwLDIpIGc7 CitWQUNVVU0gQU5BTFlaRSBwdDI7CitDUkVBVEUgVEFCTEUgcHQzIChpZCBpbnRlZ2VyIHByaW1h cnkga2V5LCBkaW0zIHRleHQsIHZhbDMgaW50KQorCVBBUlRJVElPTiBCWSBSQU5HRSAoaWQpOwor Q1JFQVRFIFRBQkxFIHB0M2EgUEFSVElUSU9OIE9GIHB0MyBGT1IgVkFMVUVTIEZST00gKDEpIHRv ICgxMDAxKQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0NSRUFURSBUQUJM RSBwdDNiIFBBUlRJVElPTiBPRiBwdDMgRk9SIFZBTFVFUyBGUk9NICgxMDAxKSB0byAoMjAwMSkK KwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitDUkVBVEUgVEFCTEUgcHQzYyBQ QVJUSVRJT04gT0YgcHQzIEZPUiBWQUxVRVMgRlJPTSAoMjAwMSkgdG8gKDMwMDEpCisJV0lUSCAo YXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gcHQzIChpZCwgZGltMywg dmFsMykKKwlTRUxFQ1QgZywgJ2EgdGhpcmQgcmFuZG9tIHRleHQgJyB8fCBnLCAoZyAlIDcpICsg MQorCSAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwzMDAwLDMpIGc7CitWQUNVVU0gQU5BTFlaRSBw dDM7CitDUkVBVEUgVEFCTEUgcHRtaXNtYXRjaCAoaWQgaW50ZWdlciBwcmltYXJ5IGtleSwgZGlt bSB0ZXh0LCB2YWxtIGludCkKKwlQQVJUSVRJT04gQlkgUkFOR0UgKGlkKTsKK0NSRUFURSBUQUJM RSBwdG1pc21hdGNoYSBQQVJUSVRJT04gT0YgcHRtaXNtYXRjaAorICAgIEZPUiBWQUxVRVMgRlJP TSAoMSkgdG8gKDE1MDEpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworQ1JF QVRFIFRBQkxFIHB0bWlzbWF0Y2hiIFBBUlRJVElPTiBPRiBwdG1pc21hdGNoCisgICAgRk9SIFZB TFVFUyBGUk9NICgxNTAxKSB0byAoMzAwMSkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBm YWxzZSk7CitJTlNFUlQgSU5UTyBwdG1pc21hdGNoIChpZCwgZGltbSwgdmFsbSkKKwlTRUxFQ1Qg ZywgJ3lldCBhbm90aGVyIHRleHQgJyB8fCBnLCAoZyAlIDIpICsgMQorCSAgRlJPTSBnZW5lcmF0 ZV9zZXJpZXMoMSwzMDAwKSBnOworVkFDVVVNIEFOQUxZWkUgcHRtaXNtYXRjaDsKK0VYUExBSU4g KFBMQU5fQURWSUNFLCBDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIHB0MSwgcHQyLCBwdDMgV0hF UkUgcHQxLmlkID0gcHQyLmlkIEFORCBwdDIuaWQgPSBwdDMuaWQKKyAgIEFORCB2YWwxID0gMSBB TkQgdmFsMiA9IDEgQU5EIHZhbDMgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEFwcGVuZAorICAgLT4gIE5lc3RlZCBMb29w CisgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICBIYXNoIENvbmQ6IChwdDJf MS5pZCA9IHB0M18xLmlkKQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0MmEgcHQy XzEKKyAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDIgPSAxKQorICAgICAgICAgICAg ICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDNhIHB0 M18xCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwzID0gMSkKKyAgICAg ICAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIHB0MWFfcGtleSBvbiBwdDFhIHB0MV8xCisgICAgICAg ICAgICAgICBJbmRleCBDb25kOiAoaWQgPSBwdDJfMS5pZCkKKyAgICAgICAgICAgICAgIEZpbHRl cjogKHZhbDEgPSAxKQorICAgLT4gIE5lc3RlZCBMb29wCisgICAgICAgICAtPiAgSGFzaCBKb2lu CisgICAgICAgICAgICAgICBIYXNoIENvbmQ6IChwdDJfMi5pZCA9IHB0M18yLmlkKQorICAgICAg ICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0MmIgcHQyXzIKKyAgICAgICAgICAgICAgICAgICAg IEZpbHRlcjogKHZhbDIgPSAxKQorICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAg ICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDNiIHB0M18yCisgICAgICAgICAgICAgICAgICAg ICAgICAgICBGaWx0ZXI6ICh2YWwzID0gMSkKKyAgICAgICAgIC0+ICBJbmRleCBTY2FuIHVzaW5n IHB0MWJfcGtleSBvbiBwdDFiIHB0MV8yCisgICAgICAgICAgICAgICBJbmRleCBDb25kOiAoaWQg PSBwdDJfMi5pZCkKKyAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDEgPSAxKQorICAgLT4gIE5l c3RlZCBMb29wCisgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICBIYXNoIENv bmQ6IChwdDJfMy5pZCA9IHB0M18zLmlkKQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9u IHB0MmMgcHQyXzMKKyAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDIgPSAxKQorICAg ICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBv biBwdDNjIHB0M18zCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwzID0g MSkKKyAgICAgICAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIHB0MWNfcGtleSBvbiBwdDFjIHB0MV8z CisgICAgICAgICAgICAgICBJbmRleCBDb25kOiAoaWQgPSBwdDJfMy5pZCkKKyAgICAgICAgICAg ICAgIEZpbHRlcjogKHZhbDEgPSAxKQorIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5f T1JERVIocHQyL3B1YmxpYy5wdDJhIHB0My9wdWJsaWMucHQzYSBwdDEvcHVibGljLnB0MWEpCisg ICBKT0lOX09SREVSKHB0Mi9wdWJsaWMucHQyYiBwdDMvcHVibGljLnB0M2IgcHQxL3B1YmxpYy5w dDFiKQorICAgSk9JTl9PUkRFUihwdDIvcHVibGljLnB0MmMgcHQzL3B1YmxpYy5wdDNjIHB0MS9w dWJsaWMucHQxYykKKyAgIE5FU1RFRF9MT09QX1BMQUlOKHB0MS9wdWJsaWMucHQxYSBwdDEvcHVi bGljLnB0MWIgcHQxL3B1YmxpYy5wdDFjKQorICAgSEFTSF9KT0lOKHB0My9wdWJsaWMucHQzYSBw dDMvcHVibGljLnB0M2IgcHQzL3B1YmxpYy5wdDNjKQorICAgU0VRX1NDQU4ocHQyL3B1YmxpYy5w dDJhIHB0My9wdWJsaWMucHQzYSBwdDIvcHVibGljLnB0MmIgcHQzL3B1YmxpYy5wdDNiCisgICAg cHQyL3B1YmxpYy5wdDJjIHB0My9wdWJsaWMucHQzYykKKyAgIElOREVYX1NDQU4ocHQxL3B1Ymxp Yy5wdDFhIHB1YmxpYy5wdDFhX3BrZXkgcHQxL3B1YmxpYy5wdDFiIHB1YmxpYy5wdDFiX3BrZXkK KyAgICBwdDEvcHVibGljLnB0MWMgcHVibGljLnB0MWNfcGtleSkKKyAgIFBBUlRJVElPTldJU0Uo KHB0MSBwdDIgcHQzKSkKKyAgIE5PX0dBVEhFUihwdDEvcHVibGljLnB0MWEgcHQxL3B1YmxpYy5w dDFiIHB0MS9wdWJsaWMucHQxYyBwdDIvcHVibGljLnB0MmEKKyAgICBwdDIvcHVibGljLnB0MmIg cHQyL3B1YmxpYy5wdDJjIHB0My9wdWJsaWMucHQzYSBwdDMvcHVibGljLnB0M2IgcHQzL3B1Ymxp Yy5wdDNjKQorKDQ3IHJvd3MpCisKKy0tIFN1cHByZXNzIHBhcnRpdGlvbndpc2Ugam9pbiwgb3Ig ZG8gaXQganVzdCBwYXJ0aWFsbHkuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5h ZHZpY2UgPSAnUEFSVElUSU9OV0lTRShwdDEgcHQyIHB0MyknOworRVhQTEFJTiAoUExBTl9BRFZJ Q0UsIENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gcHQxLCBwdDIsIHB0MyBXSEVSRSBwdDEuaWQg PSBwdDIuaWQgQU5EIHB0Mi5pZCA9IHB0My5pZAorICAgQU5EIHZhbDEgPSAxIEFORCB2YWwyID0g MSBBTkQgdmFsMyA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVF UlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIC0+ICBIYXNoIEpvaW4KKyAgICAg ICAgIEhhc2ggQ29uZDogKHB0Mi5pZCA9IHB0My5pZCkKKyAgICAgICAgIC0+ICBBcHBlbmQKKyAg ICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDJhIHB0Ml8xCisgICAgICAgICAgICAgICAg ICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBw dDJiIHB0Ml8yCisgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyAgICAg ICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDJjIHB0Ml8zCisgICAgICAgICAgICAgICAgICAg ICBGaWx0ZXI6ICh2YWwyID0gMSkKKyAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAt PiAgQXBwZW5kCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQzYSBwdDNf MQorICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMyA9IDEpCisgICAgICAg ICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQzYiBwdDNfMgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgRmlsdGVyOiAodmFsMyA9IDEpCisgICAgICAgICAgICAgICAgICAgICAtPiAg U2VxIFNjYW4gb24gcHQzYyBwdDNfMworICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsdGVy OiAodmFsMyA9IDEpCisgICAtPiAgQXBwZW5kCisgICAgICAgICAtPiAgSW5kZXggU2NhbiB1c2lu ZyBwdDFhX3BrZXkgb24gcHQxYSBwdDFfMQorICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGlk ID0gcHQyLmlkKQorICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMSA9IDEpCisgICAgICAgICAt PiAgSW5kZXggU2NhbiB1c2luZyBwdDFiX3BrZXkgb24gcHQxYiBwdDFfMgorICAgICAgICAgICAg ICAgSW5kZXggQ29uZDogKGlkID0gcHQyLmlkKQorICAgICAgICAgICAgICAgRmlsdGVyOiAodmFs MSA9IDEpCisgICAgICAgICAtPiAgSW5kZXggU2NhbiB1c2luZyBwdDFjX3BrZXkgb24gcHQxYyBw dDFfMworICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGlkID0gcHQyLmlkKQorICAgICAgICAg ICAgICAgRmlsdGVyOiAodmFsMSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBQQVJU SVRJT05XSVNFKHB0MSkgLyogbWF0Y2hlZCAqLworICAgUEFSVElUSU9OV0lTRShwdDIpIC8qIG1h dGNoZWQgKi8KKyAgIFBBUlRJVElPTldJU0UocHQzKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVk IFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihwdDIgcHQzIHB0MSkKKyAgIE5FU1RFRF9MT09Q X1BMQUlOKHB0MSkKKyAgIEhBU0hfSk9JTihwdDMpCisgICBTRVFfU0NBTihwdDIvcHVibGljLnB0 MmEgcHQyL3B1YmxpYy5wdDJiIHB0Mi9wdWJsaWMucHQyYyBwdDMvcHVibGljLnB0M2EKKyAgICBw dDMvcHVibGljLnB0M2IgcHQzL3B1YmxpYy5wdDNjKQorICAgSU5ERVhfU0NBTihwdDEvcHVibGlj LnB0MWEgcHVibGljLnB0MWFfcGtleSBwdDEvcHVibGljLnB0MWIgcHVibGljLnB0MWJfcGtleQor ICAgIHB0MS9wdWJsaWMucHQxYyBwdWJsaWMucHQxY19wa2V5KQorICAgUEFSVElUSU9OV0lTRShw dDIgcHQzIHB0MSkKKyAgIE5PX0dBVEhFUihwdDEvcHVibGljLnB0MWEgcHQxL3B1YmxpYy5wdDFi IHB0MS9wdWJsaWMucHQxYyBwdDIvcHVibGljLnB0MmEKKyAgICBwdDIvcHVibGljLnB0MmIgcHQy L3B1YmxpYy5wdDJjIHB0My9wdWJsaWMucHQzYSBwdDMvcHVibGljLnB0M2IgcHQzL3B1YmxpYy5w dDNjKQorKDQzIHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnUEFS VElUSU9OV0lTRSgocHQxIHB0MikgcHQzKSc7CitFWFBMQUlOIChQTEFOX0FEVklDRSwgQ09TVFMg T0ZGKQorU0VMRUNUICogRlJPTSBwdDEsIHB0MiwgcHQzIFdIRVJFIHB0MS5pZCA9IHB0Mi5pZCBB TkQgcHQyLmlkID0gcHQzLmlkCisgICBBTkQgdmFsMSA9IDEgQU5EIHZhbDIgPSAxIEFORCB2YWwz ID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBIYXNoIEpvaW4KKyAgIEhhc2ggQ29uZDogKHB0MS5pZCA9IHB0My5pZCkKKyAg IC0+ICBBcHBlbmQKKyAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgIEhhc2gg Q29uZDogKHB0MV8xLmlkID0gcHQyXzEuaWQpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4g b24gcHQxYSBwdDFfMQorICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMSA9IDEpCisg ICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2Fu IG9uIHB0MmEgcHQyXzEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDIg PSAxKQorICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgSGFzaCBDb25kOiAo cHQxXzIuaWQgPSBwdDJfMi5pZCkKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDFi IHB0MV8yCisgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwxID0gMSkKKyAgICAgICAg ICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQy YiBwdDJfMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMiA9IDEpCisg ICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICBIYXNoIENvbmQ6IChwdDFfMy5p ZCA9IHB0Ml8zLmlkKQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0MWMgcHQxXzMK KyAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDEgPSAxKQorICAgICAgICAgICAgICAg LT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDJjIHB0Ml8z CisgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyAgIC0+ICBI YXNoCisgICAgICAgICAtPiAgQXBwZW5kCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24g cHQzYSBwdDNfMQorICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMyA9IDEpCisgICAg ICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQzYiBwdDNfMgorICAgICAgICAgICAgICAgICAg ICAgRmlsdGVyOiAodmFsMyA9IDEpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQz YyBwdDNfMworICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMyA9IDEpCisgU3VwcGxp ZWQgUGxhbiBBZHZpY2U6CisgICBQQVJUSVRJT05XSVNFKChwdDEgcHQyKSkgLyogbWF0Y2hlZCAq LworICAgUEFSVElUSU9OV0lTRShwdDMpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBB ZHZpY2U6CisgICBKT0lOX09SREVSKHB0MS9wdWJsaWMucHQxYSBwdDIvcHVibGljLnB0MmEpCisg ICBKT0lOX09SREVSKHB0MS9wdWJsaWMucHQxYiBwdDIvcHVibGljLnB0MmIpCisgICBKT0lOX09S REVSKHB0MS9wdWJsaWMucHQxYyBwdDIvcHVibGljLnB0MmMpCisgICBKT0lOX09SREVSKHtwdDEg cHQyfSBwdDMpCisgICBIQVNIX0pPSU4ocHQyL3B1YmxpYy5wdDJhIHB0Mi9wdWJsaWMucHQyYiBw dDIvcHVibGljLnB0MmMgcHQzKQorICAgU0VRX1NDQU4ocHQxL3B1YmxpYy5wdDFhIHB0Mi9wdWJs aWMucHQyYSBwdDEvcHVibGljLnB0MWIgcHQyL3B1YmxpYy5wdDJiCisgICAgcHQxL3B1YmxpYy5w dDFjIHB0Mi9wdWJsaWMucHQyYyBwdDMvcHVibGljLnB0M2EgcHQzL3B1YmxpYy5wdDNiCisgICAg cHQzL3B1YmxpYy5wdDNjKQorICAgUEFSVElUSU9OV0lTRSgocHQxIHB0MikgcHQzKQorICAgTk9f R0FUSEVSKHB0MS9wdWJsaWMucHQxYSBwdDEvcHVibGljLnB0MWIgcHQxL3B1YmxpYy5wdDFjIHB0 Mi9wdWJsaWMucHQyYQorICAgIHB0Mi9wdWJsaWMucHQyYiBwdDIvcHVibGljLnB0MmMgcHQzL3B1 YmxpYy5wdDNhIHB0My9wdWJsaWMucHQzYiBwdDMvcHVibGljLnB0M2MpCisoNDcgcm93cykKKwor Q09NTUlUOworLS0gVGVzdCBjb25mbGljdGluZyBhZHZpY2UuCitCRUdJTjsKK1NFVCBMT0NBTCBw Z19wbGFuX2FkdmljZS5hZHZpY2UgPSAnUEFSVElUSU9OV0lTRSgocHQxIHB0MikgKHB0MSBwdDMp KSc7CitFWFBMQUlOIChQTEFOX0FEVklDRSwgQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBwdDEs IHB0MiwgcHQzIFdIRVJFIHB0MS5pZCA9IHB0Mi5pZCBBTkQgcHQyLmlkID0gcHQzLmlkCisgICBB TkQgdmFsMSA9IDEgQU5EIHZhbDIgPSAxIEFORCB2YWwzID0gMTsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBBcHBlbmQKKyAgIERp c2FibGVkOiB0cnVlCisgICAtPiAgTmVzdGVkIExvb3AKKyAgICAgICAgIC0+ICBIYXNoIEpvaW4K KyAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHB0Ml8xLmlkID0gcHQzXzEuaWQpCisgICAgICAg ICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQyYSBwdDJfMQorICAgICAgICAgICAgICAgICAgICAg RmlsdGVyOiAodmFsMiA9IDEpCisgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAg ICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0M2EgcHQzXzEKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIEZpbHRlcjogKHZhbDMgPSAxKQorICAgICAgICAgLT4gIEluZGV4IFNjYW4gdXNpbmcg cHQxYV9wa2V5IG9uIHB0MWEgcHQxXzEKKyAgICAgICAgICAgICAgIEluZGV4IENvbmQ6IChpZCA9 IHB0Ml8xLmlkKQorICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMSA9IDEpCisgICAtPiAgTmVz dGVkIExvb3AKKyAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgIEhhc2ggQ29u ZDogKHB0Ml8yLmlkID0gcHQzXzIuaWQpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24g cHQyYiBwdDJfMgorICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMiA9IDEpCisgICAg ICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9u IHB0M2IgcHQzXzIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDMgPSAx KQorICAgICAgICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgcHQxYl9wa2V5IG9uIHB0MWIgcHQxXzIK KyAgICAgICAgICAgICAgIEluZGV4IENvbmQ6IChpZCA9IHB0Ml8yLmlkKQorICAgICAgICAgICAg ICAgRmlsdGVyOiAodmFsMSA9IDEpCisgICAtPiAgTmVzdGVkIExvb3AKKyAgICAgICAgIC0+ICBI YXNoIEpvaW4KKyAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHB0Ml8zLmlkID0gcHQzXzMuaWQp CisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQyYyBwdDJfMworICAgICAgICAgICAg ICAgICAgICAgRmlsdGVyOiAodmFsMiA9IDEpCisgICAgICAgICAgICAgICAtPiAgSGFzaAorICAg ICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0M2MgcHQzXzMKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDMgPSAxKQorICAgICAgICAgLT4gIEluZGV4IFNj YW4gdXNpbmcgcHQxY19wa2V5IG9uIHB0MWMgcHQxXzMKKyAgICAgICAgICAgICAgIEluZGV4IENv bmQ6IChpZCA9IHB0Ml8zLmlkKQorICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMSA9IDEpCisg U3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBQQVJUSVRJT05XSVNFKChwdDEgcHQyKSkgLyogbWF0 Y2hlZCwgY29uZmxpY3RpbmcsIGZhaWxlZCAqLworICAgUEFSVElUSU9OV0lTRSgocHQxIHB0Mykp IC8qIG1hdGNoZWQsIGNvbmZsaWN0aW5nLCBmYWlsZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZp Y2U6CisgICBKT0lOX09SREVSKHB0Mi9wdWJsaWMucHQyYSBwdDMvcHVibGljLnB0M2EgcHQxL3B1 YmxpYy5wdDFhKQorICAgSk9JTl9PUkRFUihwdDIvcHVibGljLnB0MmIgcHQzL3B1YmxpYy5wdDNi IHB0MS9wdWJsaWMucHQxYikKKyAgIEpPSU5fT1JERVIocHQyL3B1YmxpYy5wdDJjIHB0My9wdWJs aWMucHQzYyBwdDEvcHVibGljLnB0MWMpCisgICBORVNURURfTE9PUF9QTEFJTihwdDEvcHVibGlj LnB0MWEgcHQxL3B1YmxpYy5wdDFiIHB0MS9wdWJsaWMucHQxYykKKyAgIEhBU0hfSk9JTihwdDMv cHVibGljLnB0M2EgcHQzL3B1YmxpYy5wdDNiIHB0My9wdWJsaWMucHQzYykKKyAgIFNFUV9TQ0FO KHB0Mi9wdWJsaWMucHQyYSBwdDMvcHVibGljLnB0M2EgcHQyL3B1YmxpYy5wdDJiIHB0My9wdWJs aWMucHQzYgorICAgIHB0Mi9wdWJsaWMucHQyYyBwdDMvcHVibGljLnB0M2MpCisgICBJTkRFWF9T Q0FOKHB0MS9wdWJsaWMucHQxYSBwdWJsaWMucHQxYV9wa2V5IHB0MS9wdWJsaWMucHQxYiBwdWJs aWMucHQxYl9wa2V5CisgICAgcHQxL3B1YmxpYy5wdDFjIHB1YmxpYy5wdDFjX3BrZXkpCisgICBQ QVJUSVRJT05XSVNFKChwdDEgcHQyIHB0MykpCisgICBOT19HQVRIRVIocHQxL3B1YmxpYy5wdDFh IHB0MS9wdWJsaWMucHQxYiBwdDEvcHVibGljLnB0MWMgcHQyL3B1YmxpYy5wdDJhCisgICAgcHQy L3B1YmxpYy5wdDJiIHB0Mi9wdWJsaWMucHQyYyBwdDMvcHVibGljLnB0M2EgcHQzL3B1YmxpYy5w dDNiIHB0My9wdWJsaWMucHQzYykKKyg1MSByb3dzKQorCitDT01NSVQ7CistLSBDYW4ndCBmb3Jj ZSBhIHBhcnRpdGlvbndpc2Ugam9pbiB3aXRoIGEgbWlzbWF0Y2hlZCB0YWJsZS4KK0JFR0lOOwor U0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdQQVJUSVRJT05XSVNFKChwdDEgcHRt aXNtYXRjaCkpJzsKK0VYUExBSU4gKFBMQU5fQURWSUNFLCBDT1NUUyBPRkYpCitTRUxFQ1QgKiBG Uk9NIHB0MSwgcHRtaXNtYXRjaCBXSEVSRSBwdDEuaWQgPSBwdG1pc21hdGNoLmlkOworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgRGlzYWJs ZWQ6IHRydWUKKyAgIC0+ICBBcHBlbmQKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDFhIHB0 MV8xCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQxYiBwdDFfMgorICAgICAgICAgLT4gIFNl cSBTY2FuIG9uIHB0MWMgcHQxXzMKKyAgIC0+ICBBcHBlbmQKKyAgICAgICAgIC0+ICBJbmRleCBT Y2FuIHVzaW5nIHB0bWlzbWF0Y2hhX3BrZXkgb24gcHRtaXNtYXRjaGEgcHRtaXNtYXRjaF8xCisg ICAgICAgICAgICAgICBJbmRleCBDb25kOiAoaWQgPSBwdDEuaWQpCisgICAgICAgICAtPiAgSW5k ZXggU2NhbiB1c2luZyBwdG1pc21hdGNoYl9wa2V5IG9uIHB0bWlzbWF0Y2hiIHB0bWlzbWF0Y2hf MgorICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGlkID0gcHQxLmlkKQorIFN1cHBsaWVkIFBs YW4gQWR2aWNlOgorICAgUEFSVElUSU9OV0lTRSgocHQxIHB0bWlzbWF0Y2gpKSAvKiBtYXRjaGVk LCBmYWlsZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKHB0MSBw dG1pc21hdGNoKQorICAgTkVTVEVEX0xPT1BfUExBSU4ocHRtaXNtYXRjaCkKKyAgIFNFUV9TQ0FO KHB0MS9wdWJsaWMucHQxYSBwdDEvcHVibGljLnB0MWIgcHQxL3B1YmxpYy5wdDFjKQorICAgSU5E RVhfU0NBTihwdG1pc21hdGNoL3B1YmxpYy5wdG1pc21hdGNoYSBwdWJsaWMucHRtaXNtYXRjaGFf cGtleQorICAgIHB0bWlzbWF0Y2gvcHVibGljLnB0bWlzbWF0Y2hiIHB1YmxpYy5wdG1pc21hdGNo Yl9wa2V5KQorICAgUEFSVElUSU9OV0lTRShwdDEgcHRtaXNtYXRjaCkKKyAgIE5PX0dBVEhFUihw dDEvcHVibGljLnB0MWEgcHQxL3B1YmxpYy5wdDFiIHB0MS9wdWJsaWMucHQxYworICAgIHB0bWlz bWF0Y2gvcHVibGljLnB0bWlzbWF0Y2hhIHB0bWlzbWF0Y2gvcHVibGljLnB0bWlzbWF0Y2hiKQor KDIyIHJvd3MpCisKK0NPTU1JVDsKKy0tIEZvcmNlIGpvaW4gb3JkZXIgZm9yIGEgcGFydGljdWxh ciBicmFuY2ggb2YgdGhlIHBhcnRpdGlvbndpc2Ugam9pbiB3aXRoCistLSBhbmQgd2l0aG91dCBt ZW50aW9uaW5nIHRoZSBzY2hlbWEgbmFtZS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2 aWNlLmFkdmljZSA9ICdKT0lOX09SREVSKHB0My9wdWJsaWMucHQzYSBwdDIvcHVibGljLnB0MmEg cHQxL3B1YmxpYy5wdDFhKSc7CitFWFBMQUlOIChQTEFOX0FEVklDRSwgQ09TVFMgT0ZGKQorU0VM RUNUICogRlJPTSBwdDEsIHB0MiwgcHQzIFdIRVJFIHB0MS5pZCA9IHB0Mi5pZCBBTkQgcHQyLmlk ID0gcHQzLmlkCisgICBBTkQgdmFsMSA9IDEgQU5EIHZhbDIgPSAxIEFORCB2YWwzID0gMTsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyBBcHBlbmQKKyAgIC0+ICBOZXN0ZWQgTG9vcAorICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAg ICAgICAgICAgICAgSGFzaCBDb25kOiAocHQzXzEuaWQgPSBwdDJfMS5pZCkKKyAgICAgICAgICAg ICAgIC0+ICBTZXEgU2NhbiBvbiBwdDNhIHB0M18xCisgICAgICAgICAgICAgICAgICAgICBGaWx0 ZXI6ICh2YWwzID0gMSkKKyAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAg ICAgICAtPiAgU2VxIFNjYW4gb24gcHQyYSBwdDJfMQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgRmlsdGVyOiAodmFsMiA9IDEpCisgICAgICAgICAtPiAgSW5kZXggU2NhbiB1c2luZyBwdDFh X3BrZXkgb24gcHQxYSBwdDFfMQorICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGlkID0gcHQy XzEuaWQpCisgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwxID0gMSkKKyAgIC0+ICBOZXN0ZWQg TG9vcAorICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgSGFzaCBDb25kOiAo cHQyXzIuaWQgPSBwdDNfMi5pZCkKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDJi IHB0Ml8yCisgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyAgICAgICAg ICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQz YiBwdDNfMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMyA9IDEpCisg ICAgICAgICAtPiAgSW5kZXggU2NhbiB1c2luZyBwdDFiX3BrZXkgb24gcHQxYiBwdDFfMgorICAg ICAgICAgICAgICAgSW5kZXggQ29uZDogKGlkID0gcHQyXzIuaWQpCisgICAgICAgICAgICAgICBG aWx0ZXI6ICh2YWwxID0gMSkKKyAgIC0+ICBOZXN0ZWQgTG9vcAorICAgICAgICAgLT4gIEhhc2gg Sm9pbgorICAgICAgICAgICAgICAgSGFzaCBDb25kOiAocHQyXzMuaWQgPSBwdDNfMy5pZCkKKyAg ICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDJjIHB0Ml8zCisgICAgICAgICAgICAgICAg ICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAg ICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQzYyBwdDNfMworICAgICAgICAgICAgICAg ICAgICAgICAgICAgRmlsdGVyOiAodmFsMyA9IDEpCisgICAgICAgICAtPiAgSW5kZXggU2NhbiB1 c2luZyBwdDFjX3BrZXkgb24gcHQxYyBwdDFfMworICAgICAgICAgICAgICAgSW5kZXggQ29uZDog KGlkID0gcHQyXzMuaWQpCisgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwxID0gMSkKKyBTdXBw bGllZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIocHQzL3B1YmxpYy5wdDNhIHB0Mi9wdWJs aWMucHQyYSBwdDEvcHVibGljLnB0MWEpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBB ZHZpY2U6CisgICBKT0lOX09SREVSKHB0My9wdWJsaWMucHQzYSBwdDIvcHVibGljLnB0MmEgcHQx L3B1YmxpYy5wdDFhKQorICAgSk9JTl9PUkRFUihwdDIvcHVibGljLnB0MmIgcHQzL3B1YmxpYy5w dDNiIHB0MS9wdWJsaWMucHQxYikKKyAgIEpPSU5fT1JERVIocHQyL3B1YmxpYy5wdDJjIHB0My9w dWJsaWMucHQzYyBwdDEvcHVibGljLnB0MWMpCisgICBORVNURURfTE9PUF9QTEFJTihwdDEvcHVi bGljLnB0MWEgcHQxL3B1YmxpYy5wdDFiIHB0MS9wdWJsaWMucHQxYykKKyAgIEhBU0hfSk9JTihw dDIvcHVibGljLnB0MmEgcHQzL3B1YmxpYy5wdDNiIHB0My9wdWJsaWMucHQzYykKKyAgIFNFUV9T Q0FOKHB0My9wdWJsaWMucHQzYSBwdDIvcHVibGljLnB0MmEgcHQyL3B1YmxpYy5wdDJiIHB0My9w dWJsaWMucHQzYgorICAgIHB0Mi9wdWJsaWMucHQyYyBwdDMvcHVibGljLnB0M2MpCisgICBJTkRF WF9TQ0FOKHB0MS9wdWJsaWMucHQxYSBwdWJsaWMucHQxYV9wa2V5IHB0MS9wdWJsaWMucHQxYiBw dWJsaWMucHQxYl9wa2V5CisgICAgcHQxL3B1YmxpYy5wdDFjIHB1YmxpYy5wdDFjX3BrZXkpCisg ICBQQVJUSVRJT05XSVNFKChwdDEgcHQyIHB0MykpCisgICBOT19HQVRIRVIocHQxL3B1YmxpYy5w dDFhIHB0MS9wdWJsaWMucHQxYiBwdDEvcHVibGljLnB0MWMgcHQyL3B1YmxpYy5wdDJhCisgICAg cHQyL3B1YmxpYy5wdDJiIHB0Mi9wdWJsaWMucHQyYyBwdDMvcHVibGljLnB0M2EgcHQzL3B1Ymxp Yy5wdDNiIHB0My9wdWJsaWMucHQzYykKKyg0OSByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9h ZHZpY2UuYWR2aWNlID0gJ0pPSU5fT1JERVIocHQzL3B0M2EgcHQyL3B0MmEgcHQxL3B0MWEpJzsK K0VYUExBSU4gKFBMQU5fQURWSUNFLCBDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIHB0MSwgcHQy LCBwdDMgV0hFUkUgcHQxLmlkID0gcHQyLmlkIEFORCBwdDIuaWQgPSBwdDMuaWQKKyAgIEFORCB2 YWwxID0gMSBBTkQgdmFsMiA9IDEgQU5EIHZhbDMgPSAxOworICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEFwcGVuZAorICAgLT4gIE5l c3RlZCBMb29wCisgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICBIYXNoIENv bmQ6IChwdDNfMS5pZCA9IHB0Ml8xLmlkKQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9u IHB0M2EgcHQzXzEKKyAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDMgPSAxKQorICAg ICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBv biBwdDJhIHB0Ml8xCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwyID0g MSkKKyAgICAgICAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIHB0MWFfcGtleSBvbiBwdDFhIHB0MV8x CisgICAgICAgICAgICAgICBJbmRleCBDb25kOiAoaWQgPSBwdDJfMS5pZCkKKyAgICAgICAgICAg ICAgIEZpbHRlcjogKHZhbDEgPSAxKQorICAgLT4gIE5lc3RlZCBMb29wCisgICAgICAgICAtPiAg SGFzaCBKb2luCisgICAgICAgICAgICAgICBIYXNoIENvbmQ6IChwdDJfMi5pZCA9IHB0M18yLmlk KQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0MmIgcHQyXzIKKyAgICAgICAgICAg ICAgICAgICAgIEZpbHRlcjogKHZhbDIgPSAxKQorICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAg ICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDNiIHB0M18yCisgICAgICAgICAg ICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwzID0gMSkKKyAgICAgICAgIC0+ICBJbmRleCBT Y2FuIHVzaW5nIHB0MWJfcGtleSBvbiBwdDFiIHB0MV8yCisgICAgICAgICAgICAgICBJbmRleCBD b25kOiAoaWQgPSBwdDJfMi5pZCkKKyAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDEgPSAxKQor ICAgLT4gIE5lc3RlZCBMb29wCisgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAg ICBIYXNoIENvbmQ6IChwdDJfMy5pZCA9IHB0M18zLmlkKQorICAgICAgICAgICAgICAgLT4gIFNl cSBTY2FuIG9uIHB0MmMgcHQyXzMKKyAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDIg PSAxKQorICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBT ZXEgU2NhbiBvbiBwdDNjIHB0M18zCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6 ICh2YWwzID0gMSkKKyAgICAgICAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIHB0MWNfcGtleSBvbiBw dDFjIHB0MV8zCisgICAgICAgICAgICAgICBJbmRleCBDb25kOiAoaWQgPSBwdDJfMy5pZCkKKyAg ICAgICAgICAgICAgIEZpbHRlcjogKHZhbDEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgor ICAgSk9JTl9PUkRFUihwdDMvcHQzYSBwdDIvcHQyYSBwdDEvcHQxYSkgLyogbWF0Y2hlZCAqLwor IEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIocHQzL3B1YmxpYy5wdDNhIHB0 Mi9wdWJsaWMucHQyYSBwdDEvcHVibGljLnB0MWEpCisgICBKT0lOX09SREVSKHB0Mi9wdWJsaWMu cHQyYiBwdDMvcHVibGljLnB0M2IgcHQxL3B1YmxpYy5wdDFiKQorICAgSk9JTl9PUkRFUihwdDIv cHVibGljLnB0MmMgcHQzL3B1YmxpYy5wdDNjIHB0MS9wdWJsaWMucHQxYykKKyAgIE5FU1RFRF9M T09QX1BMQUlOKHB0MS9wdWJsaWMucHQxYSBwdDEvcHVibGljLnB0MWIgcHQxL3B1YmxpYy5wdDFj KQorICAgSEFTSF9KT0lOKHB0Mi9wdWJsaWMucHQyYSBwdDMvcHVibGljLnB0M2IgcHQzL3B1Ymxp Yy5wdDNjKQorICAgU0VRX1NDQU4ocHQzL3B1YmxpYy5wdDNhIHB0Mi9wdWJsaWMucHQyYSBwdDIv cHVibGljLnB0MmIgcHQzL3B1YmxpYy5wdDNiCisgICAgcHQyL3B1YmxpYy5wdDJjIHB0My9wdWJs aWMucHQzYykKKyAgIElOREVYX1NDQU4ocHQxL3B1YmxpYy5wdDFhIHB1YmxpYy5wdDFhX3BrZXkg cHQxL3B1YmxpYy5wdDFiIHB1YmxpYy5wdDFiX3BrZXkKKyAgICBwdDEvcHVibGljLnB0MWMgcHVi bGljLnB0MWNfcGtleSkKKyAgIFBBUlRJVElPTldJU0UoKHB0MSBwdDIgcHQzKSkKKyAgIE5PX0dB VEhFUihwdDEvcHVibGljLnB0MWEgcHQxL3B1YmxpYy5wdDFiIHB0MS9wdWJsaWMucHQxYyBwdDIv cHVibGljLnB0MmEKKyAgICBwdDIvcHVibGljLnB0MmIgcHQyL3B1YmxpYy5wdDJjIHB0My9wdWJs aWMucHQzYSBwdDMvcHVibGljLnB0M2IgcHQzL3B1YmxpYy5wdDNjKQorKDQ5IHJvd3MpCisKK0NP TU1JVDsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvcHJlcGFy ZWQub3V0IGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9wcmVwYXJlZC5vdXQKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjA3YTdjNjIzNjU5Ci0tLSAvZGV2 L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9wcmVwYXJlZC5vdXQK QEAgLTAsMCArMSw2NyBAQAorTE9BRCAncGdfcGxhbl9hZHZpY2UnOworU0VUIG1heF9wYXJhbGxl bF93b3JrZXJzX3Blcl9nYXRoZXIgPSAwOworQ1JFQVRFIFRBQkxFIHB0YWIgKGlkIGludGVnZXIs IHZhbCB0ZXh0KSBXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitTRVQgcGdfcGxh bl9hZHZpY2UuYWx3YXlzX3N0b3JlX2FkdmljZV9kZXRhaWxzID0gZmFsc2U7CistLSBOb3QgcHJl cGFyZWQsIHNvIGFkdmljZSBzaG91bGQgYmUgZ2VuZXJhdGVkLgorRVhQTEFJTiAoQ09TVFMgT0ZG LCBQTEFOX0FEVklDRSkgCitTRUxFQ1QgKiBGUk9NIHB0YWI7CisgICAgICAgUVVFUlkgUExBTiAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHB0YWIKKyBHZW5l cmF0ZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihwdGFiKQorICAgTk9fR0FUSEVSKHB0YWIp CisoNCByb3dzKQorCistLSBQcmVwYXJlZCwgc28gYWR2aWNlIHNob3VsZCBub3QgYmUgZ2VuZXJh dGVkLgorUFJFUEFSRSBwdDEgQVMgU0VMRUNUICogRlJPTSBwdGFiOworRVhQTEFJTiAoQ09TVFMg T0ZGLCBQTEFOX0FEVklDRSkgRVhFQ1VURSBwdDE7CisgICAgUVVFUlkgUExBTiAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHB0YWIKKygxIHJvdykKKworU0VUIHBnX3BsYW5f YWR2aWNlLmFsd2F5c19zdG9yZV9hZHZpY2VfZGV0YWlscyA9IHRydWU7CistLSBQcmVwYXJlZCwg YnV0IGFsd2F5c19zdG9yZV9hZHZpY2VfZGV0YWlscyA9IHRydWUsIHNvIHNob3VsZCBzaG93IGFk dmljZS4KK1BSRVBBUkUgcHQyIEFTIFNFTEVDVCAqIEZST00gcHRhYjsKK0VYUExBSU4gKENPU1RT IE9GRiwgUExBTl9BRFZJQ0UpIEVYRUNVVEUgcHQyOworICAgICAgIFFVRVJZIFBMQU4gICAgICAg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBwdGFiCisgR2VuZXJhdGVk IFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4ocHRhYikKKyAgIE5PX0dBVEhFUihwdGFiKQorKDQg cm93cykKKworLS0gTm90IHByZXBhcmVkLCBzbyBmZWVkYmFjayBzaG91bGQgYmUgZ2VuZXJhdGVk LgorU0VUIHBnX3BsYW5fYWR2aWNlLmFsd2F5c19zdG9yZV9hZHZpY2VfZGV0YWlscyA9IGZhbHNl OworU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTihwdGFiKSc7CitFWFBMQUlO IChDT1NUUyBPRkYpIAorU0VMRUNUICogRlJPTSBwdGFiOworICAgICAgICAgICBRVUVSWSBQTEFO ICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4g b24gcHRhYgorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4ocHRhYikgLyogbWF0 Y2hlZCAqLworKDMgcm93cykKKworLS0gUHJlcGFyZWQsIHNvIGFkdmljZSBzaG91bGQgbm90IGJl IGdlbmVyYXRlZC4KK1BSRVBBUkUgcHQzIEFTIFNFTEVDVCAqIEZST00gcHRhYjsKK0VYUExBSU4g KENPU1RTIE9GRikgRVhFQ1VURSBwdDE7CisgICAgUVVFUlkgUExBTiAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLQorIFNlcSBTY2FuIG9uIHB0YWIKKygxIHJvdykKKworU0VUIHBnX3BsYW5fYWR2aWNl LmFsd2F5c19zdG9yZV9hZHZpY2VfZGV0YWlscyA9IHRydWU7CistLSBQcmVwYXJlZCwgYnV0IGFs d2F5c19zdG9yZV9hZHZpY2VfZGV0YWlscyA9IHRydWUsIHNvIHNob3VsZCBzaG93IGZlZWRiYWNr LgorUFJFUEFSRSBwdDQgQVMgU0VMRUNUICogRlJPTSBwdGFiOworRVhQTEFJTiAoQ09TVFMgT0ZG LCBQTEFOX0FEVklDRSkgRVhFQ1VURSBwdDI7CisgICAgICAgUVVFUlkgUExBTiAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHB0YWIKKyBHZW5lcmF0ZWQgUGxh biBBZHZpY2U6CisgICBTRVFfU0NBTihwdGFiKQorICAgTk9fR0FUSEVSKHB0YWIpCisoNCByb3dz KQorCmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL3NjYW4ub3V0 IGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9zY2FuLm91dApuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uM2Y5ZTEzYjZkNDEKLS0tIC9kZXYvbnVsbAorKysg Yi9jb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL3NjYW4ub3V0CkBAIC0wLDAgKzEsNzU3 IEBACitMT0FEICdwZ19wbGFuX2FkdmljZSc7CitTRVQgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVy X2dhdGhlciA9IDA7CitTRVQgc2VxX3BhZ2VfY29zdCA9IDAuMTsKK1NFVCByYW5kb21fcGFnZV9j b3N0ID0gMC4xOworU0VUIGNwdV90dXBsZV9jb3N0ID0gMDsKK1NFVCBjcHVfaW5kZXhfdHVwbGVf Y29zdCA9IDA7CitDUkVBVEUgVEFCTEUgc2Nhbl90YWJsZSAoYSBpbnQgcHJpbWFyeSBrZXksIGIg dGV4dCkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5UTyBz Y2FuX3RhYmxlCisJU0VMRUNUIGcsICdzb21lIHRleHQgJyB8fCBnIEZST00gZ2VuZXJhdGVfc2Vy aWVzKDEsIDEwMDAwMCkgZzsKK0NSRUFURSBJTkRFWCBzY2FuX3RhYmxlX2IgT04gc2Nhbl90YWJs ZSBVU0lORyBicmluIChiKTsKK1ZBQ1VVTSBBTkFMWVpFIHNjYW5fdGFibGU7CistLSBTZXF1ZW50 aWFsIHNjYW4KK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00g c2Nhbl90YWJsZTsKKyAgICAgICBRVUVSWSBQTEFOICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBzY2FuX3RhYmxlCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNl OgorICAgU0VRX1NDQU4oc2Nhbl90YWJsZSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDQg cm93cykKKworLS0gSW5kZXggc2NhbgorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkg U0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworICAgICAgICAgICAgICAgICAg IFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IFNjYW4gdXNpbmcgc2Nhbl90YWJsZV9w a2V5IG9uIHNjYW5fdGFibGUKKyAgIEluZGV4IENvbmQ6IChhID0gMSkKKyBHZW5lcmF0ZWQgUGxh biBBZHZpY2U6CisgICBJTkRFWF9TQ0FOKHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtl eSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDUgcm93cykKKworLS0gSW5kZXgtb25seSBz Y2FuCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgYSBGUk9NIHNjYW5f dGFibGUgV0hFUkUgYSA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAg ICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IE9ubHkgU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkg b24gc2Nhbl90YWJsZQorICAgSW5kZXggQ29uZDogKGEgPSAxKQorIEdlbmVyYXRlZCBQbGFuIEFk dmljZToKKyAgIElOREVYX09OTFlfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxlX3Br ZXkpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg1IHJvd3MpCisKKy0tIEJpdG1hcCBoZWFw IHNjYW4KK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nh bl90YWJsZQorCVdIRVJFIGIgPiAnc29tZSB0ZXh0IDgnOworICAgICAgICAgICAgICAgICAgUVVF UlkgUExBTiAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgQml0bWFwIEhlYXAgU2NhbiBvbiBzY2FuX3RhYmxlCisgICBS ZWNoZWNrIENvbmQ6IChiID4gJ3NvbWUgdGV4dCA4Jzo6dGV4dCkKKyAgIC0+ICBCaXRtYXAgSW5k ZXggU2NhbiBvbiBzY2FuX3RhYmxlX2IKKyAgICAgICAgIEluZGV4IENvbmQ6IChiID4gJ3NvbWUg dGV4dCA4Jzo6dGV4dCkKKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBCSVRNQVBfSEVBUF9T Q0FOKHNjYW5fdGFibGUpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg3IHJvd3MpCisKKy0t IFRJRCBzY2FuCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9N IHNjYW5fdGFibGUgV0hFUkUgY3RpZCA9ICcoMCwxKSc7CisgICAgICAgICAgICBRVUVSWSBQTEFO ICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBUaWQg U2NhbiBvbiBzY2FuX3RhYmxlCisgICBUSUQgQ29uZDogKGN0aWQgPSAnKDAsMSknOjp0aWQpCisg R2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgVElEX1NDQU4oc2Nhbl90YWJsZSkKKyAgIE5PX0dB VEhFUihzY2FuX3RhYmxlKQorKDUgcm93cykKKworLS0gVElEIHJhbmdlIHNjYW4KK0VYUExBSU4g KENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZQorCVdIRVJF IGN0aWQgPiAnKDEsMSknIEFORCBjdGlkIDwgJygyLDEpJzsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgVGlk IFJhbmdlIFNjYW4gb24gc2Nhbl90YWJsZQorICAgVElEIENvbmQ6ICgoY3RpZCA+ICcoMSwxKSc6 OnRpZCkgQU5EIChjdGlkIDwgJygyLDEpJzo6dGlkKSkKKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6 CisgICBUSURfU0NBTihzY2FuX3RhYmxlKQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoNSBy b3dzKQorCistLSBUcnkgZm9yY2luZyBlYWNoIG9mIG91ciB0ZXN0IHF1ZXJpZXMgdG8gdXNlIHRo ZSBzY2FuIHR5cGUgdGhleQorLS0gd2FudGVkIHRvIHVzZSBhbnl3YXkuIFRoaXMgc2hvdWxkIHN1 Y2NlZWQuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1ND QU4oc2Nhbl90YWJsZSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNU ICogRlJPTSBzY2FuX3RhYmxlOworICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24g c2Nhbl90YWJsZQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4oc2Nhbl90YWJs ZSkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FOKHNj YW5fdGFibGUpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg2IHJvd3MpCisKK1NFVCBMT0NB TCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFi bGVfcGtleSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJP TSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQ TEFOICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyBzY2FuX3RhYmxl X3BrZXkgb24gc2Nhbl90YWJsZQorICAgSW5kZXggQ29uZDogKGEgPSAxKQorIFN1cHBsaWVkIFBs YW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSkgLyog bWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4oc2Nhbl90 YWJsZSBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5KQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCiso NyByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX09OTFlf U0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQ TEFOX0FEVklDRSkgU0VMRUNUIGEgRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworICAgICAg ICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorIEluZGV4IE9ubHkgU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJs ZQorICAgSW5kZXggQ29uZDogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSU5E RVhfT05MWV9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSAvKiBtYXRjaGVkICovCisg R2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfT05MWV9TQ0FOKHNjYW5fdGFibGUgcHVi bGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDcgcm93cykK KworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdCSVRNQVBfSEVBUF9TQ0FOKHNj YW5fdGFibGUpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZS T00gc2Nhbl90YWJsZQorCVdIRVJFIGIgPiAnc29tZSB0ZXh0IDgnOworICAgICAgICAgICAgICAg ICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQml0bWFwIEhlYXAgU2NhbiBvbiBzY2FuX3RhYmxl CisgICBSZWNoZWNrIENvbmQ6IChiID4gJ3NvbWUgdGV4dCA4Jzo6dGV4dCkKKyAgIC0+ICBCaXRt YXAgSW5kZXggU2NhbiBvbiBzY2FuX3RhYmxlX2IKKyAgICAgICAgIEluZGV4IENvbmQ6IChiID4g J3NvbWUgdGV4dCA4Jzo6dGV4dCkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIEJJVE1BUF9I RUFQX1NDQU4oc2Nhbl90YWJsZSkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmlj ZToKKyAgIEJJVE1BUF9IRUFQX1NDQU4oc2Nhbl90YWJsZSkKKyAgIE5PX0dBVEhFUihzY2FuX3Rh YmxlKQorKDkgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdUSURf U0NBTihzY2FuX3RhYmxlKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxF Q1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgY3RpZCA9ICcoMCwxKSc7CisgICAgICAgICAgICAg IFFVRVJZIFBMQU4gICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBUaWQgU2NhbiBvbiBzY2FuX3RhYmxlCisgICBUSUQgQ29uZDogKGN0aWQgPSAn KDAsMSknOjp0aWQpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBUSURfU0NBTihzY2FuX3Rh YmxlKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgVElEX1NDQU4o c2Nhbl90YWJsZSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDcgcm93cykKKworRVhQTEFJ TiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlCisJV0hF UkUgY3RpZCA+ICcoMSwxKScgQU5EIGN0aWQgPCAnKDIsMSknOworICAgICAgICAgICAgICAgICAg ICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBU aWQgUmFuZ2UgU2NhbiBvbiBzY2FuX3RhYmxlCisgICBUSUQgQ29uZDogKChjdGlkID4gJygxLDEp Jzo6dGlkKSBBTkQgKGN0aWQgPCAnKDIsMSknOjp0aWQpKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNl OgorICAgVElEX1NDQU4oc2Nhbl90YWJsZSkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFu IEFkdmljZToKKyAgIFRJRF9TQ0FOKHNjYW5fdGFibGUpCisgICBOT19HQVRIRVIoc2Nhbl90YWJs ZSkKKyg3IHJvd3MpCisKK0NPTU1JVDsKKy0tIFRyeSB0byBmb3JjZSBhIGZ1bGwgc2NhbiBvZiB0 aGUgdGFibGUgdG8gdXNlIHNvbWUgb3RoZXIgc2NhbiB0eXBlLiBBbGwKKy0tIG9mIHRoZXNlIHdp bGwgZmFpbC4gQW4gaW5kZXggc2NhbiBvciBiaXRtYXAgaGVhcCBzY2FuIGNvdWxkIHBvdGVudGlh bGx5CistLSBnZW5lcmF0ZSB0aGUgY29ycmVjdCBhbnN3ZXIsIGJ1dCB0aGUgcGxhbm5lciBkb2Vz IG5vdCBldmVuIGNvbnNpZGVyIHRoZXNlCistLSBwb3NzaWJpbGl0aWVzIGR1ZSB0byB0aGUgbGFj ayBvZiBhIFdIRVJFIGNsYXVzZS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFk dmljZSA9ICdJTkRFWF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSc7CitFWFBMQUlO IChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGU7CisgICAg ICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gc2Nhbl90YWJsZQorICAgRGlzYWJsZWQ6IHRydWUK KyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3Rh YmxlX3BrZXkpIC8qIG1hdGNoZWQsIGZhaWxlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToK KyAgIFNFUV9TQ0FOKHNjYW5fdGFibGUpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg3IHJv d3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfT05MWV9TQ0FO KHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5f QURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGU7CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorIFNlcSBTY2FuIG9uIHNjYW5fdGFibGUKKyAgIERpc2FibGVkOiB0cnVlCisgU3VwcGxp ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9PTkxZX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxl X3BrZXkpIC8qIG1hdGNoZWQsIGZhaWxlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAg IFNFUV9TQ0FOKHNjYW5fdGFibGUpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg3IHJvd3Mp CisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnQklUTUFQX0hFQVBfU0NBTihz Y2FuX3RhYmxlKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBG Uk9NIHNjYW5fdGFibGU7CisgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAg ICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHNjYW5fdGFibGUKKyAgIERpc2FibGVkOiB0cnVl CisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBCSVRNQVBfSEVBUF9TQ0FOKHNjYW5fdGFibGUp IC8qIG1hdGNoZWQsIGZhaWxlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIFNFUV9T Q0FOKHNjYW5fdGFibGUpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg3IHJvd3MpCisKK1NF VCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnVElEX1NDQU4oc2Nhbl90YWJsZSknOwor RVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxl OworICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHNj YW5fdGFibGUKKyAgIERpc2FibGVkOiB0cnVlCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBU SURfU0NBTihzY2FuX3RhYmxlKSAvKiBtYXRjaGVkLCBmYWlsZWQgKi8KKyBHZW5lcmF0ZWQgUGxh biBBZHZpY2U6CisgICBTRVFfU0NBTihzY2FuX3RhYmxlKQorICAgTk9fR0FUSEVSKHNjYW5fdGFi bGUpCisoNyByb3dzKQorCitDT01NSVQ7CistLSBUcnkgYWdhaW4gdG8gZm9yY2UgaW5kZXggdXNl LiBUaGlzIHNob3VsZCBub3cgc3VjY2VlZCBmb3IgdGhlIElOREVYX1NDQU4KKy0tIGFuZCBCSVRN QVBfSEVBUF9TQ0FOLCBidXQgdGhlIElOREVYX09OTFlfU0NBTiBjYW4ndCBiZSBmb3JjZWQgYmVj YXVzZSB0aGUKKy0tIHF1ZXJ5IGZldGNoZXMgY29sdW1ucyBub3QgaW5jbHVkZWQgaW4gdGhlIGlu ZGV4LgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX1ND QU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExB Tl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID4gMDsKKyAgICAgICAg ICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4 IFNjYW4gdXNpbmcgc2Nhbl90YWJsZV9wa2V5IG9uIHNjYW5fdGFibGUKKyAgIEluZGV4IENvbmQ6 IChhID4gMCkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4oc2Nhbl90YWJs ZSBzY2FuX3RhYmxlX3BrZXkpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6 CisgICBJTkRFWF9TQ0FOKHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5P X0dBVEhFUihzY2FuX3RhYmxlKQorKDcgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNl LmFkdmljZSA9ICdJTkRFWF9PTkxZX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpJzsK K0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJs ZSBXSEVSRSBhID4gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24g c2Nhbl90YWJsZQorICAgRGlzYWJsZWQ6IHRydWUKKyAgIEZpbHRlcjogKGEgPiAwKQorIFN1cHBs aWVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfT05MWV9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJs ZV9wa2V5KSAvKiBtYXRjaGVkLCBmYWlsZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6Cisg ICBTRVFfU0NBTihzY2FuX3RhYmxlKQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoOCByb3dz KQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0JJVE1BUF9IRUFQX1NDQU4o c2Nhbl90YWJsZSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICog RlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPiAwOworICAgICAgICAgICAgICAgICAgUVVFUlkgUExB TiAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIEJpdG1hcCBIZWFwIFNjYW4gb24gc2Nhbl90YWJsZQorICAgUmVjaGVjayBD b25kOiAoYSA+IDApCisgICAtPiAgQml0bWFwIEluZGV4IFNjYW4gb24gc2Nhbl90YWJsZV9wa2V5 CisgICAgICAgICBJbmRleCBDb25kOiAoYSA+IDApCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6Cisg ICBCSVRNQVBfSEVBUF9TQ0FOKHNjYW5fdGFibGUpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQg UGxhbiBBZHZpY2U6CisgICBCSVRNQVBfSEVBUF9TQ0FOKHNjYW5fdGFibGUpCisgICBOT19HQVRI RVIoc2Nhbl90YWJsZSkKKyg5IHJvd3MpCisKK0NPTU1JVDsKKy0tIFdlIGNhbiBmb3JjZSBhIHBy aW1hcnkga2V5IGxvb2t1cCB0byB1c2UgYSBzZXF1ZW50aWFsIHNjYW4sIGJ1dCB3ZQorLS0gY2Fu J3QgZm9yY2UgaXQgdG8gdXNlIGFuIGluZGV4LW9ubHkgc2NhbiAoZHVlIHRvIHRoZSBjb2x1bW4g bGlzdCkKKy0tIG9yIGEgVElEIHNjYW4gKGR1ZSB0byB0aGUgYWJzZW5jZSBvZiBhIFRJRCBxdWFs KS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTihz Y2FuX3RhYmxlKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBG Uk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CisgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAg ICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEg U2NhbiBvbiBzY2FuX3RhYmxlCisgICBGaWx0ZXI6IChhID0gMSkKKyBTdXBwbGllZCBQbGFuIEFk dmljZToKKyAgIFNFUV9TQ0FOKHNjYW5fdGFibGUpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQg UGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzY2FuX3RhYmxlKQorICAgTk9fR0FUSEVSKHNjYW5f dGFibGUpCisoNyByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lO REVYX09OTFlfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSknOworRVhQTEFJTiAoQ09T VFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAx OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBTY2FuIHVzaW5nIHNjYW5fdGFi bGVfcGtleSBvbiBzY2FuX3RhYmxlCisgICBEaXNhYmxlZDogdHJ1ZQorICAgSW5kZXggQ29uZDog KGEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfT05MWV9TQ0FOKHNjYW5f dGFibGUgc2Nhbl90YWJsZV9wa2V5KSAvKiBtYXRjaGVkLCBmYWlsZWQgKi8KKyBHZW5lcmF0ZWQg UGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FOKHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVf cGtleSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDggcm93cykKKworU0VUIExPQ0FMIHBn X3BsYW5fYWR2aWNlLmFkdmljZSA9ICdUSURfU0NBTihzY2FuX3RhYmxlKSc7CitFWFBMQUlOIChD T1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9 IDE7CisgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXgg U2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZQorICAgRGlzYWJsZWQ6IHRy dWUKKyAgIEluZGV4IENvbmQ6IChhID0gMSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIFRJ RF9TQ0FOKHNjYW5fdGFibGUpIC8qIG1hdGNoZWQsIGZhaWxlZCAqLworIEdlbmVyYXRlZCBQbGFu IEFkdmljZToKKyAgIElOREVYX1NDQU4oc2Nhbl90YWJsZSBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5 KQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoOCByb3dzKQorCitDT01NSVQ7CistLSBXZSBj YW4gZm9yY2libHkgZG93bmdyYWRlIGFuIGluZGV4LW9ubHkgc2NhbiB0byBhbiBpbmRleCBzY2Fu LCBidXQgd2UgY2FuJ3QKKy0tIGZvcmNlIHRoZSB1c2Ugb2YgYW4gaW5kZXggdGhhdCB0aGUgcGxh bm5lciB0aGlua3MgaXMgaW5hcHBsaWNhYmxlLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9h ZHZpY2UuYWR2aWNlID0gJ0lOREVYX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpJzsK K0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJs ZSBXSEVSRSBhID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAg ICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IFNjYW4gdXNpbmcgc2Nhbl90YWJsZV9wa2V5IG9uIHNj YW5fdGFibGUKKyAgIEluZGV4IENvbmQ6IChhID0gMSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToK KyAgIElOREVYX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpIC8qIG1hdGNoZWQgKi8K KyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FOKHNjYW5fdGFibGUgcHVibGlj LnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDcgcm93cykKKwor U0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9TQ0FOKHNjYW5fdGFibGUg cHVibGljLnNjYW5fdGFibGVfcGtleSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklD RSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworICAgICAgICAgICAgICAg ICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyBJbmRleCBTY2FuIHVzaW5nIHNjYW5fdGFibGVfcGtleSBvbiBzY2FuX3RhYmxlCisgICBJbmRl eCBDb25kOiAoYSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FOKHNj YW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRl ZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4oc2Nhbl90YWJsZSBwdWJsaWMuc2Nhbl90YWJs ZV9wa2V5KQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoNyByb3dzKQorCitTRVQgTE9DQUwg cGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxl X2IpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nh bl90YWJsZSBXSEVSRSBhID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFO ICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBTY2FuIHVzaW5nIHNjYW5f dGFibGVfcGtleSBvbiBzY2FuX3RhYmxlCisgICBEaXNhYmxlZDogdHJ1ZQorICAgSW5kZXggQ29u ZDogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3Rh YmxlIHNjYW5fdGFibGVfYikgLyogbWF0Y2hlZCwgZmFpbGVkICovCisgR2VuZXJhdGVkIFBsYW4g QWR2aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkp CisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg4IHJvd3MpCisKK0NPTU1JVDsKKy0tIFdlIGNh biBmb3JjZSB0aGUgdXNlIG9mIGEgc2VxdWVudGlhbCBzY2FuIGluIHBsYWNlIG9mIGEgYml0bWFw IGhlYXAgc2NhbiwKKy0tIGJ1dCBhIHBsYWluIGluZGV4IHNjYW4gb24gYSBCUklOIGluZGV4IGlz IG5vdCBwb3NzaWJsZS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9 ICdTRVFfU0NBTihzY2FuX3RhYmxlKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNF KSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUKKwlXSEVSRSBiID4gJ3NvbWUgdGV4dCA4JzsKKyAg ICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHNjYW5fdGFibGUKKyAgIEZpbHRlcjog KGIgPiAnc29tZSB0ZXh0IDgnOjp0ZXh0KQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgU0VR X1NDQU4oc2Nhbl90YWJsZSkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToK KyAgIFNFUV9TQ0FOKHNjYW5fdGFibGUpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg3IHJv d3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihzY2Fu X3RhYmxlIHNjYW5fdGFibGVfYiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkg U0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworICAgICAgICAgICAgICAgICAg ICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4 IFNjYW4gdXNpbmcgc2Nhbl90YWJsZV9wa2V5IG9uIHNjYW5fdGFibGUKKyAgIERpc2FibGVkOiB0 cnVlCisgICBJbmRleCBDb25kOiAoYSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBJ TkRFWF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9iKSAvKiBtYXRjaGVkLCBmYWlsZWQgKi8K KyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FOKHNjYW5fdGFibGUgcHVibGlj LnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDggcm93cykKKwor Q09NTUlUOworLS0gV2UgY2FuIGZvcmNlIHRoZSB1c2Ugb2YgYSBzZXF1ZW50aWFsIHNjYW4gcmF0 aGVyIHRoYW4gYSBUSUQgc2NhbiBvcgorLS0gVElEIHJhbmdlIHNjYW4uCitCRUdJTjsKK1NFVCBM T0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oc2Nhbl90YWJsZSknOworRVhQ TEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdI RVJFIGN0aWQgPSAnKDAsMSknOworICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24g c2Nhbl90YWJsZQorICAgRmlsdGVyOiAoY3RpZCA9ICcoMCwxKSc6OnRpZCkKKyBTdXBwbGllZCBQ bGFuIEFkdmljZToKKyAgIFNFUV9TQ0FOKHNjYW5fdGFibGUpIC8qIG1hdGNoZWQgKi8KKyBHZW5l cmF0ZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzY2FuX3RhYmxlKQorICAgTk9fR0FUSEVS KHNjYW5fdGFibGUpCisoNyByb3dzKQorCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNF KSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUKKwlXSEVSRSBjdGlkID4gJygxLDEpJyBBTkQgY3Rp ZCA8ICcoMiwxKSc7CisgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAg ICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gc2Nhbl90YWJsZQorICAgRmls dGVyOiAoKGN0aWQgPiAnKDEsMSknOjp0aWQpIEFORCAoY3RpZCA8ICcoMiwxKSc6OnRpZCkpCisg U3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzY2FuX3RhYmxlKSAvKiBtYXRjaGVk ICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4oc2Nhbl90YWJsZSkKKyAg IE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDcgcm93cykKKworQ09NTUlUOworLS0gVGVzdCBtb3Jl IGNvbXBsZXggc2NlbmFyaW9zIHdpdGggaW5kZXggc2NhbnMuCitCRUdJTjsKKy0tIFNob3VsZCBz dGlsbCB3b3JrIGlmIHdlIG1lbnRpb24gdGhlIHNjaGVtYS4KK1NFVCBMT0NBTCBwZ19wbGFuX2Fk dmljZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxlX3Br ZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nh bl90YWJsZSBXSEVSRSBhID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExB TiAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyBz Y2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZQorICAgSW5kZXggQ29uZDogKGEgPSAxKQorIFN1 cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2Fu X3RhYmxlX3BrZXkpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBJ TkRFWF9TQ0FOKHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhF UihzY2FuX3RhYmxlKQorKDcgcm93cykKKworLS0gQnV0IG5vdCBpZiB3ZSBtZW50aW9uIHRoZSB3 cm9uZyBzY2hlbWEuCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX1ND QU4oc2Nhbl90YWJsZSBjaWxidXAuc2Nhbl90YWJsZV9wa2V5KSc7CitFWFBMQUlOIChDT1NUUyBP RkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgSW5kZXggU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZQorICAgSW5k ZXggQ29uZDogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihz Y2FuX3RhYmxlIGNpbGJ1cC5zY2FuX3RhYmxlX3BrZXkpIC8qIG1hdGNoZWQsIGluYXBwbGljYWJs ZSwgZmFpbGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzY2Fu X3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkK Kyg3IHJvd3MpCisKKy0tIEl0J3MgT0sgdG8gcmVwZWF0IHRoZSBzYW1lIGFkdmljZS4KK1NFVCBM T0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5f dGFibGVfcGtleSBzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSknOworRVhQTEFJTiAoQ09TVFMg T0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOwor ICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgSW5kZXggU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZQorICAgSW5k ZXggQ29uZDogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihz Y2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSkgLyogbWF0Y2hlZCAqLworICAgSU5ERVhfU0NBTihz Y2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFu IEFkdmljZToKKyAgIElOREVYX1NDQU4oc2Nhbl90YWJsZSBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5 KQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoOCByb3dzKQorCistLSBCdXQgaXQgZG9lc24n dCB3b3JrIGlmIHRoZSBpbmRleCB0YXJnZXQgaXMgZXZlbiBub3Rpb25hbGx5IGRpZmZlcmVudC4K K1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihzY2FuX3RhYmxl IHNjYW5fdGFibGVfcGtleSBzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpJzsKK0VY UExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBX SEVSRSBhID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJ bmRleCBTY2FuIHVzaW5nIHNjYW5fdGFibGVfcGtleSBvbiBzY2FuX3RhYmxlCisgICBJbmRleCBD b25kOiAoYSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FOKHNjYW5f dGFibGUgc2Nhbl90YWJsZV9wa2V5KSAvKiBtYXRjaGVkLCBjb25mbGljdGluZyAqLworICAgSU5E RVhfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpIC8qIG1hdGNoZWQsIGNv bmZsaWN0aW5nICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzY2Fu X3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkK Kyg4IHJvd3MpCisKK0NPTU1JVDsKKy0tIFRlc3QgYXNzb3J0ZWQgaW5jb3JyZWN0IGFkdmljZS4K K0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTihub3Ro aW5nKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgYSBGUk9NIHNj YW5fdGFibGUgV0hFUkUgYSA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAg ICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IE9ubHkgU2NhbiB1c2luZyBzY2FuX3RhYmxlX3Br ZXkgb24gc2Nhbl90YWJsZQorICAgSW5kZXggQ29uZDogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4g QWR2aWNlOgorICAgU0VRX1NDQU4obm90aGluZykgLyogbm90IG1hdGNoZWQgKi8KKyBHZW5lcmF0 ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9PTkxZX1NDQU4oc2Nhbl90YWJsZSBwdWJsaWMuc2Nh bl90YWJsZV9wa2V5KQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoNyByb3dzKQorCitTRVQg TE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX1NDQU4obm90aGluZyB3aGF0c29l dmVyKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgYSBGUk9NIHNj YW5fdGFibGUgV0hFUkUgYSA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAg ICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IE9ubHkgU2NhbiB1c2luZyBzY2FuX3RhYmxlX3Br ZXkgb24gc2Nhbl90YWJsZQorICAgSW5kZXggQ29uZDogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4g QWR2aWNlOgorICAgSU5ERVhfU0NBTihub3RoaW5nIHdoYXRzb2V2ZXIpIC8qIG5vdCBtYXRjaGVk ICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfT05MWV9TQ0FOKHNjYW5fdGFi bGUgcHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDcg cm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9TQ0FOKHNj YW5fdGFibGUgYm9ndXMpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVD VCBhIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIEluZGV4IE9ubHkgU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZQor ICAgSW5kZXggQ29uZDogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhf U0NBTihzY2FuX3RhYmxlIGJvZ3VzKSAvKiBtYXRjaGVkLCBpbmFwcGxpY2FibGUsIGZhaWxlZCAq LworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIElOREVYX09OTFlfU0NBTihzY2FuX3RhYmxl IHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg3IHJv d3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfT05MWV9TQ0FO KG5vdGhpbmcgd2hhdHNvZXZlciknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkg U0VMRUNUIGEgRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworICAgICAgICAgICAgICAgICAg ICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBPbmx5IFNj YW4gdXNpbmcgc2Nhbl90YWJsZV9wa2V5IG9uIHNjYW5fdGFibGUKKyAgIEluZGV4IENvbmQ6IChh ID0gMSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIElOREVYX09OTFlfU0NBTihub3RoaW5n IHdoYXRzb2V2ZXIpIC8qIG5vdCBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgor ICAgSU5ERVhfT05MWV9TQ0FOKHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAg IE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDcgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2 aWNlLmFkdmljZSA9ICdJTkRFWF9PTkxZX1NDQU4oc2Nhbl90YWJsZSBib2d1cyknOworRVhQTEFJ TiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUIGEgRlJPTSBzY2FuX3RhYmxlIFdIRVJF IGEgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IE9ubHkg U2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZQorICAgSW5kZXggQ29uZDog KGEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfT05MWV9TQ0FOKHNjYW5f dGFibGUgYm9ndXMpIC8qIG1hdGNoZWQsIGluYXBwbGljYWJsZSwgZmFpbGVkICovCisgR2VuZXJh dGVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfT05MWV9TQ0FOKHNjYW5fdGFibGUgcHVibGljLnNj YW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDcgcm93cykKKworQ09N TUlUOworLS0gVGVzdCBvdXIgYWJpbGl0eSB0byByZWZlciB0byBtdWx0aXBsZSBpbnN0YW5jZXMg b2YgdGhlIHNhbWUgYWxpYXMuCitCRUdJTjsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJ Q0UpCitTRUxFQ1QgKiBGUk9NIChnZW5lcmF0ZV9zZXJpZXMoMSwxMCkgZyBMRUZUIEpPSU4gc2Nh bl90YWJsZSBzIE9OIGcgPSBzLmEpIHgKKyAgICBMRUZUIEpPSU4gc2Nhbl90YWJsZSBzIE9OIGcg PSBzLmE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AgTGVmdCBKb2luCisg ICAtPiAgTmVzdGVkIExvb3AgTGVmdCBKb2luCisgICAgICAgICAtPiAgRnVuY3Rpb24gU2NhbiBv biBnZW5lcmF0ZV9zZXJpZXMgZworICAgICAgICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgc2Nhbl90 YWJsZV9wa2V5IG9uIHNjYW5fdGFibGUgcworICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGEg PSBnLmcpCisgICAtPiAgSW5kZXggU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90 YWJsZSBzXzEKKyAgICAgICAgIEluZGV4IENvbmQ6IChhID0gZy5nKQorIEdlbmVyYXRlZCBQbGFu IEFkdmljZToKKyAgIEpPSU5fT1JERVIoZyBzIHMjMikKKyAgIE5FU1RFRF9MT09QX1BMQUlOKHMg cyMyKQorICAgSU5ERVhfU0NBTihzIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkgcyMyIHB1YmxpYy5z Y2FuX3RhYmxlX3BrZXkpCisgICBOT19HQVRIRVIoZyBzIHMjMikKKygxMiByb3dzKQorCitTRVQg TE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKHMpJzsKK0VYUExBSU4gKENP U1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIChnZW5lcmF0ZV9zZXJpZXMoMSwx MCkgZyBMRUZUIEpPSU4gc2Nhbl90YWJsZSBzIE9OIGcgPSBzLmEpIHgKKyAgICBMRUZUIEpPSU4g c2Nhbl90YWJsZSBzIE9OIGcgPSBzLmE7CisgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQ TEFOICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AgTGVmdCBKb2luCisg ICAtPiAgSGFzaCBMZWZ0IEpvaW4KKyAgICAgICAgIEhhc2ggQ29uZDogKGcuZyA9IHMuYSkKKyAg ICAgICAgIC0+ICBGdW5jdGlvbiBTY2FuIG9uIGdlbmVyYXRlX3NlcmllcyBnCisgICAgICAgICAt PiAgSGFzaAorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHNjYW5fdGFibGUgcworICAg LT4gIEluZGV4IFNjYW4gdXNpbmcgc2Nhbl90YWJsZV9wa2V5IG9uIHNjYW5fdGFibGUgc18xCisg ICAgICAgICBJbmRleCBDb25kOiAoYSA9IGcuZykKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAg IFNFUV9TQ0FOKHMpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBK T0lOX09SREVSKGcgcyBzIzIpCisgICBORVNURURfTE9PUF9QTEFJTihzIzIpCisgICBIQVNIX0pP SU4ocykKKyAgIFNFUV9TQ0FOKHMpCisgICBJTkRFWF9TQ0FOKHMjMiBwdWJsaWMuc2Nhbl90YWJs ZV9wa2V5KQorICAgTk9fR0FUSEVSKGcgcyBzIzIpCisoMTcgcm93cykKKworU0VUIExPQ0FMIHBn X3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTihzIzIpJzsKK0VYUExBSU4gKENPU1RTIE9G RiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIChnZW5lcmF0ZV9zZXJpZXMoMSwxMCkgZyBM RUZUIEpPSU4gc2Nhbl90YWJsZSBzIE9OIGcgPSBzLmEpIHgKKyAgICBMRUZUIEpPSU4gc2Nhbl90 YWJsZSBzIE9OIGcgPSBzLmE7CisgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4g ICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoIExlZnQgSm9pbgorICAgSGFz aCBDb25kOiAoZy5nID0gc18xLmEpCisgICAtPiAgTmVzdGVkIExvb3AgTGVmdCBKb2luCisgICAg ICAgICAtPiAgRnVuY3Rpb24gU2NhbiBvbiBnZW5lcmF0ZV9zZXJpZXMgZworICAgICAgICAgLT4g IEluZGV4IFNjYW4gdXNpbmcgc2Nhbl90YWJsZV9wa2V5IG9uIHNjYW5fdGFibGUgcworICAgICAg ICAgICAgICAgSW5kZXggQ29uZDogKGEgPSBnLmcpCisgICAtPiAgSGFzaAorICAgICAgICAgLT4g IFNlcSBTY2FuIG9uIHNjYW5fdGFibGUgc18xCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBT RVFfU0NBTihzIzIpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBK T0lOX09SREVSKGcgcyBzIzIpCisgICBORVNURURfTE9PUF9QTEFJTihzKQorICAgSEFTSF9KT0lO KHMjMikKKyAgIFNFUV9TQ0FOKHMjMikKKyAgIElOREVYX1NDQU4ocyBwdWJsaWMuc2Nhbl90YWJs ZV9wa2V5KQorICAgTk9fR0FUSEVSKGcgcyBzIzIpCisoMTcgcm93cykKKworU0VUIExPQ0FMIHBn X3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTihzKSBTRVFfU0NBTihzIzIpJzsKK0VYUExB SU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIChnZW5lcmF0ZV9zZXJp ZXMoMSwxMCkgZyBMRUZUIEpPSU4gc2Nhbl90YWJsZSBzIE9OIGcgPSBzLmEpIHgKKyAgICBMRUZU IEpPSU4gc2Nhbl90YWJsZSBzIE9OIGcgPSBzLmE7CisgICAgICAgICAgICAgICAgICAgUVVFUlkg UExBTiAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggTGVmdCBKb2luCisgICBIYXNoIENvbmQ6IChnLmcgPSBz XzEuYSkKKyAgIC0+ICBIYXNoIExlZnQgSm9pbgorICAgICAgICAgSGFzaCBDb25kOiAoZy5nID0g cy5hKQorICAgICAgICAgLT4gIEZ1bmN0aW9uIFNjYW4gb24gZ2VuZXJhdGVfc2VyaWVzIGcKKyAg ICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gc2Nhbl90YWJs ZSBzCisgICAtPiAgSGFzaAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHNjYW5fdGFibGUgc18x CisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzKSAvKiBtYXRjaGVkICovCisg ICBTRVFfU0NBTihzIzIpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6Cisg ICBKT0lOX09SREVSKGcgcyBzIzIpCisgICBIQVNIX0pPSU4ocyBzIzIpCisgICBTRVFfU0NBTihz IHMjMikKKyAgIE5PX0dBVEhFUihnIHMgcyMyKQorKDE3IHJvd3MpCisKK0NPTU1JVDsKKy0tIFRl c3Qgb3VyIGFiaWxpdHkgdG8gcmVmZXIgdG8gc2NhbnMgd2l0aGluIGEgc3VicXVlcnkuCitFWFBM QUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSAoU0VMRUNUICogRlJP TSBzY2FuX3RhYmxlIHMgV0hFUkUgYSA9IDEgT0ZGU0VUIDApIHg7CisgICAgICAgICAgICAgICAg ICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBTY2FuIHVzaW5nIHNjYW5fdGFi bGVfcGtleSBvbiBzY2FuX3RhYmxlIHMKKyAgIEluZGV4IENvbmQ6IChhID0gMSkKKyBHZW5lcmF0 ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FOKHNAeCBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5 KQorICAgTk9fR0FUSEVSKHggc0B4KQorKDUgcm93cykKKworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQ TEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gKFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBzIFdI RVJFIGEgPSAxIE9GRlNFVCAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAg ICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyBzY2FuX3RhYmxlX3Br ZXkgb24gc2Nhbl90YWJsZSBzCisgICBJbmRleCBDb25kOiAoYSA9IDEpCisgR2VuZXJhdGVkIFBs YW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzQHVubmFtZWRfc3VicXVlcnkgcHVibGljLnNjYW5f dGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUih1bm5hbWVkX3N1YnF1ZXJ5IHNAdW5uYW1lZF9zdWJx dWVyeSkKKyg1IHJvd3MpCisKK0JFR0lOOworLS0gU2hvdWxkIG5vdCBtYXRjaC4KK1NFVCBMT0NB TCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4ocyknOworRVhQTEFJTiAoQ09TVFMg T0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gKFNFTEVDVCAqIEZST00gc2Nhbl90YWJs ZSBzIFdIRVJFIGEgPSAxIE9GRlNFVCAwKSB4OworICAgICAgICAgICAgICAgICAgICBRVUVSWSBQ TEFOICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24g c2Nhbl90YWJsZSBzCisgICBJbmRleCBDb25kOiAoYSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZp Y2U6CisgICBTRVFfU0NBTihzKSAvKiBub3QgbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFk dmljZToKKyAgIElOREVYX1NDQU4oc0B4IHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpCisgICBOT19H QVRIRVIoeCBzQHgpCisoNyByb3dzKQorCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNF KQorU0VMRUNUICogRlJPTSAoU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIHMgV0hFUkUgYSA9IDEg T0ZGU0VUIDApOworICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBJbmRleCBTY2FuIHVzaW5nIHNjYW5fdGFibGVfcGtleSBvbiBzY2Fu X3RhYmxlIHMKKyAgIEluZGV4IENvbmQ6IChhID0gMSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToK KyAgIFNFUV9TQ0FOKHMpIC8qIG5vdCBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNl OgorICAgSU5ERVhfU0NBTihzQHVubmFtZWRfc3VicXVlcnkgcHVibGljLnNjYW5fdGFibGVfcGtl eSkKKyAgIE5PX0dBVEhFUih1bm5hbWVkX3N1YnF1ZXJ5IHNAdW5uYW1lZF9zdWJxdWVyeSkKKyg3 IHJvd3MpCisKKy0tIFNob3VsZCBtYXRjaCBmaXJzdCBxdWVyeSBvbmx5LgorU0VUIExPQ0FMIHBn X3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTihzQHgpJzsKK0VYUExBSU4gKENPU1RTIE9G RiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIChTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUg cyBXSEVSRSBhID0gMSBPRkZTRVQgMCkgeDsKKyAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBzY2FuX3Rh YmxlIHMKKyAgIEZpbHRlcjogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgU0VR X1NDQU4oc0B4KSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgU0VR X1NDQU4oc0B4KQorICAgTk9fR0FUSEVSKHggc0B4KQorKDcgcm93cykKKworRVhQTEFJTiAoQ09T VFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gKFNFTEVDVCAqIEZST00gc2Nhbl90 YWJsZSBzIFdIRVJFIGEgPSAxIE9GRlNFVCAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgUVVF UlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyBzY2Fu X3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZSBzCisgICBJbmRleCBDb25kOiAoYSA9IDEpCisgU3Vw cGxpZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzQHgpIC8qIG5vdCBtYXRjaGVkICovCisg R2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzQHVubmFtZWRfc3VicXVlcnkg cHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUih1bm5hbWVkX3N1YnF1ZXJ5IHNA dW5uYW1lZF9zdWJxdWVyeSkKKyg3IHJvd3MpCisKKy0tIFNob3VsZCBtYXRjaCBzZWNvbmQgcXVl cnkgb25seS4KK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oc0B1 bm5hbWVkX3N1YnF1ZXJ5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VM RUNUICogRlJPTSAoU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIHMgV0hFUkUgYSA9IDEgT0ZGU0VU IDApIHg7CisgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJ bmRleCBTY2FuIHVzaW5nIHNjYW5fdGFibGVfcGtleSBvbiBzY2FuX3RhYmxlIHMKKyAgIEluZGV4 IENvbmQ6IChhID0gMSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FOKHNAdW5u YW1lZF9zdWJxdWVyeSkgLyogbm90IG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6 CisgICBJTkRFWF9TQ0FOKHNAeCBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5KQorICAgTk9fR0FUSEVS KHggc0B4KQorKDcgcm93cykKKworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NF TEVDVCAqIEZST00gKFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBzIFdIRVJFIGEgPSAxIE9GRlNF VCAwKTsKKyAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNl cSBTY2FuIG9uIHNjYW5fdGFibGUgcworICAgRmlsdGVyOiAoYSA9IDEpCisgU3VwcGxpZWQgUGxh biBBZHZpY2U6CisgICBTRVFfU0NBTihzQHVubmFtZWRfc3VicXVlcnkpIC8qIG1hdGNoZWQgKi8K KyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzQHVubmFtZWRfc3VicXVlcnkp CisgICBOT19HQVRIRVIodW5uYW1lZF9zdWJxdWVyeSBzQHVubmFtZWRfc3VicXVlcnkpCisoNyBy b3dzKQorCitDT01NSVQ7CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVj dGVkL3NlbWlqb2luLm91dCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvc2VtaWpv aW4ub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi41NTUxYzAyOGEx ZgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvc2Vt aWpvaW4ub3V0CkBAIC0wLDAgKzEsMzc3IEBACitMT0FEICdwZ19wbGFuX2FkdmljZSc7CitTRVQg bWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9IDA7CitDUkVBVEUgVEFCTEUgc2pfd2lk ZSAoCisJaWQgaW50ZWdlciBwcmltYXJ5IGtleSwKKwl2YWwxIGludGVnZXIsCisJcGFkZGluZyB0 ZXh0IHN0b3JhZ2UgcGxhaW4KKykgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOwor SU5TRVJUIElOVE8gc2pfd2lkZQorCVNFTEVDVCBnLCBnJTEwKzEsIHJlcGVhdCgnICcsIDMwMCkg RlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAwMCkgZzsKK0NSRUFURSBJTkRFWCBPTiBzal93aWRl ICh2YWwxKTsKK1ZBQ1VVTSBBTkFMWVpFIHNqX3dpZGU7CitDUkVBVEUgVEFCTEUgc2pfbmFycm93 ICgKKwlpZCBpbnRlZ2VyIHByaW1hcnkga2V5LAorCXZhbDEgaW50ZWdlcgorKSBXSVRIIChhdXRv dmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5UTyBzal9uYXJyb3cKKwlTRUxFQ1Qg ZywgZyUxMCsxIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMDApIGc7CitDUkVBVEUgSU5ERVgg T04gc2pfbmFycm93ICh2YWwxKTsKK1ZBQ1VVTSBBTkFMWVpFIHNqX25hcnJvdzsKKy0tIFdlIGV4 cGVjdCB0aGlzIHRvIG1ha2UgdGhlIFZBTFVFUyBsaXN0IHVuaXF1ZSBhbmQgdXNlIGluZGV4IGxv b2t1cHMgdG8KKy0tIGZpbmQgdGhlIHJvd3MgaW4gc2pfd2lkZSwgc28gYXMgdG8gYXZvaWQgYSBm dWxsIHNjYW4gb2Ygc2pfd2lkZS4KK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitT RUxFQ1QgKiBGUk9NIHNqX3dpZGUKKwlXSEVSRSAoaWQsIHZhbDEpIElOIChWQUxVRVMgKDEsIDEp LCAoMiwgMiksICgzLCAzKSwgKDQsIDQpLCAoNSwgNSkpOworICAgICAgICAgICAgICAgICAgICAg ICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AK KyAgIC0+ICBIYXNoQWdncmVnYXRlCisgICAgICAgICBHcm91cCBLZXk6ICIqVkFMVUVTKiIuY29s dW1uMSwgIipWQUxVRVMqIi5jb2x1bW4yCisgICAgICAgICAtPiAgVmFsdWVzIFNjYW4gb24gIipW QUxVRVMqIgorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgc2pfd2lkZV9wa2V5IG9uIHNqX3dpZGUK KyAgICAgICAgIEluZGV4IENvbmQ6IChpZCA9ICIqVkFMVUVTKiIuY29sdW1uMSkKKyAgICAgICAg IEZpbHRlcjogKHZhbDEgPSAiKlZBTFVFUyoiLmNvbHVtbjIpCisgR2VuZXJhdGVkIFBsYW4gQWR2 aWNlOgorICAgSk9JTl9PUkRFUigiKlZBTFVFUyoiIHNqX3dpZGUpCisgICBORVNURURfTE9PUF9Q TEFJTihzal93aWRlKQorICAgSU5ERVhfU0NBTihzal93aWRlIHB1YmxpYy5zal93aWRlX3BrZXkp CisgICBTRU1JSk9JTl9VTklRVUUoIipWQUxVRVMqIikKKyAgIE5PX0dBVEhFUihzal93aWRlICIq VkFMVUVTKiIpCisoMTMgcm93cykKKworLS0gSWYgd2UgYXNrIGZvciBhIHVuaXF1ZSBzZW1pam9p biwgd2Ugc2hvdWxkIGdldCB0aGUgc2FtZSBwbGFuIGFzIHdpdGgKKy0tIG5vIGFkdmljZS4gSWYg d2UgYXNrIGZvciBhIG5vbi11bmlxdWUgc2VtaWpvaW4sIHdlIHNob3VsZCBzZWUgYSBTZW1pCist LSBKb2luIG9wZXJhdGlvbiBpbiB0aGUgcGxhbiB0cmVlLgorQkVHSU47CitTRVQgTE9DQUwgcGdf cGxhbl9hZHZpY2UuYWR2aWNlID0gJ3NlbWlqb2luX3VuaXF1ZSgiKlZBTFVFUyoiKSc7CitFWFBM QUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBzal93aWRlCisJV0hF UkUgKGlkLCB2YWwxKSBJTiAoVkFMVUVTICgxLCAxKSwgKDIsIDIpLCAoMywgMyksICg0LCA0KSwg KDUsIDUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wCisgICAtPiAgSGFzaEFnZ3JlZ2F0ZQorICAg ICAgICAgR3JvdXAgS2V5OiAiKlZBTFVFUyoiLmNvbHVtbjEsICIqVkFMVUVTKiIuY29sdW1uMgor ICAgICAgICAgLT4gIFZhbHVlcyBTY2FuIG9uICIqVkFMVUVTKiIKKyAgIC0+ICBJbmRleCBTY2Fu IHVzaW5nIHNqX3dpZGVfcGtleSBvbiBzal93aWRlCisgICAgICAgICBJbmRleCBDb25kOiAoaWQg PSAiKlZBTFVFUyoiLmNvbHVtbjEpCisgICAgICAgICBGaWx0ZXI6ICh2YWwxID0gIipWQUxVRVMq Ii5jb2x1bW4yKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgU0VNSUpPSU5fVU5JUVVFKCIq VkFMVUVTKiIpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lO X09SREVSKCIqVkFMVUVTKiIgc2pfd2lkZSkKKyAgIE5FU1RFRF9MT09QX1BMQUlOKHNqX3dpZGUp CisgICBJTkRFWF9TQ0FOKHNqX3dpZGUgcHVibGljLnNqX3dpZGVfcGtleSkKKyAgIFNFTUlKT0lO X1VOSVFVRSgiKlZBTFVFUyoiKQorICAgTk9fR0FUSEVSKHNqX3dpZGUgIipWQUxVRVMqIikKKygx NSByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ3NlbWlqb2luX25v bl91bmlxdWUoIipWQUxVRVMqIiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkK K1NFTEVDVCAqIEZST00gc2pfd2lkZQorCVdIRVJFIChpZCwgdmFsMSkgSU4gKFZBTFVFUyAoMSwg MSksICgyLCAyKSwgKDMsIDMpLCAoNCwgNCksICg1LCA1KSk7CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2gg U2VtaSBKb2luCisgICBIYXNoIENvbmQ6ICgoc2pfd2lkZS5pZCA9ICIqVkFMVUVTKiIuY29sdW1u MSkgQU5EIChzal93aWRlLnZhbDEgPSAiKlZBTFVFUyoiLmNvbHVtbjIpKQorICAgLT4gIFNlcSBT Y2FuIG9uIHNqX3dpZGUKKyAgIC0+ICBIYXNoCisgICAgICAgICAtPiAgVmFsdWVzIFNjYW4gb24g IipWQUxVRVMqIgorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgU0VNSUpPSU5fTk9OX1VOSVFV RSgiKlZBTFVFUyoiKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAg Sk9JTl9PUkRFUihzal93aWRlICIqVkFMVUVTKiIpCisgICBIQVNIX0pPSU4oIipWQUxVRVMqIikK KyAgIFNFUV9TQ0FOKHNqX3dpZGUpCisgICBTRU1JSk9JTl9OT05fVU5JUVVFKCIqVkFMVUVTKiIp CisgICBOT19HQVRIRVIoc2pfd2lkZSAiKlZBTFVFUyoiKQorKDEzIHJvd3MpCisKK0NPTU1JVDsK Ky0tIEJlY2F1c2UgdGhpcyB0YWJsZSBpcyBuYXJyb3dlciB0aGFuIHRoZSBwcmV2aW91cyBvbmUs IGEgc2VxdWVudGlhbCBzY2FuCistLSBpcyBsZXNzIGV4cGVuc2l2ZSwgYW5kIHdlIGNob29zZSBh IHN0cmFpZ2h0Zm9yd2FyZCBTZW1pIEpvaW4gcGxhbiBieQorLS0gZGVmYXVsdC4gKE5vdGUgdGhh dCB0aGlzIGlzIGFsc28gdmVyeSBzZW5zaXRpdmUgdG8gdGhlIGxlbmd0aCBvZiB0aGUgSU4KKy0t IGxpc3QsIHdoaWNoIGFmZmVjdHMgaG93IG1hbnkgaW5kZXggbG9va3VwcyB0aGUgYWx0ZXJuYXRp dmUgcGxhbiB3aWxsIG5lZWQuKQorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NF TEVDVCAqIEZST00gc2pfbmFycm93CisJV0hFUkUgKGlkLCB2YWwxKSBJTiAoVkFMVUVTICgxLCAx KSwgKDIsIDIpLCAoMywgMyksICg0LCA0KSwgKDUsIDUpKTsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyBIYXNoIFNlbWkgSm9pbgorICAgSGFzaCBDb25kOiAoKHNqX25hcnJvdy5pZCA9ICIqVkFMVUVT KiIuY29sdW1uMSkgQU5EIChzal9uYXJyb3cudmFsMSA9ICIqVkFMVUVTKiIuY29sdW1uMikpCisg ICAtPiAgU2VxIFNjYW4gb24gc2pfbmFycm93CisgICAtPiAgSGFzaAorICAgICAgICAgLT4gIFZh bHVlcyBTY2FuIG9uICIqVkFMVUVTKiIKKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lO X09SREVSKHNqX25hcnJvdyAiKlZBTFVFUyoiKQorICAgSEFTSF9KT0lOKCIqVkFMVUVTKiIpCisg ICBTRVFfU0NBTihzal9uYXJyb3cpCisgICBTRU1JSk9JTl9OT05fVU5JUVVFKCIqVkFMVUVTKiIp CisgICBOT19HQVRIRVIoc2pfbmFycm93ICIqVkFMVUVTKiIpCisoMTEgcm93cykKKworLS0gSGVy ZSwgd2UgZXhwZWN0IGFkdmlzaW5nIGEgdW5pcXVlIHNlbWlqb2luIHRvIHN3aXRoIHRvIHRoZSBz YW1lIHBsYW4gdGhhdAorLS0gd2UgZ290IHdpdGggc2pfd2lkZSwgYW5kIGFkdmlzaW5nIGEgbm9u LXVuaXF1ZSBzZW1pam9pbiBzaG91bGQgbm90IGNoYW5nZQorLS0gdGhlIHBsYW4uCitCRUdJTjsK K1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnc2VtaWpvaW5fdW5pcXVlKCIqVkFM VUVTKiIpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9N IHNqX25hcnJvdworCVdIRVJFIChpZCwgdmFsMSkgSU4gKFZBTFVFUyAoMSwgMSksICgyLCAyKSwg KDMsIDMpLCAoNCwgNCksICg1LCA1KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSGFzaCBKb2lu CisgICBIYXNoIENvbmQ6ICgoc2pfbmFycm93LmlkID0gIipWQUxVRVMqIi5jb2x1bW4xKSBBTkQg KHNqX25hcnJvdy52YWwxID0gIipWQUxVRVMqIi5jb2x1bW4yKSkKKyAgIC0+ICBTZXEgU2NhbiBv biBzal9uYXJyb3cKKyAgIC0+ICBIYXNoCisgICAgICAgICAtPiAgSGFzaEFnZ3JlZ2F0ZQorICAg ICAgICAgICAgICAgR3JvdXAgS2V5OiAiKlZBTFVFUyoiLmNvbHVtbjEsICIqVkFMVUVTKiIuY29s dW1uMgorICAgICAgICAgICAgICAgLT4gIFZhbHVlcyBTY2FuIG9uICIqVkFMVUVTKiIKKyBTdXBw bGllZCBQbGFuIEFkdmljZToKKyAgIFNFTUlKT0lOX1VOSVFVRSgiKlZBTFVFUyoiKSAvKiBtYXRj aGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihzal9uYXJyb3cg IipWQUxVRVMqIikKKyAgIEhBU0hfSk9JTigiKlZBTFVFUyoiKQorICAgU0VRX1NDQU4oc2pfbmFy cm93KQorICAgU0VNSUpPSU5fVU5JUVVFKCIqVkFMVUVTKiIpCisgICBOT19HQVRIRVIoc2pfbmFy cm93ICIqVkFMVUVTKiIpCisoMTUgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFk dmljZSA9ICdzZW1pam9pbl9ub25fdW5pcXVlKCIqVkFMVUVTKiIpJzsKK0VYUExBSU4gKENPU1RT IE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIHNqX25hcnJvdworCVdIRVJFIChpZCwg dmFsMSkgSU4gKFZBTFVFUyAoMSwgMSksICgyLCAyKSwgKDMsIDMpLCAoNCwgNCksICg1LCA1KSk7 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSGFzaCBTZW1pIEpvaW4KKyAgIEhhc2ggQ29uZDogKChz al9uYXJyb3cuaWQgPSAiKlZBTFVFUyoiLmNvbHVtbjEpIEFORCAoc2pfbmFycm93LnZhbDEgPSAi KlZBTFVFUyoiLmNvbHVtbjIpKQorICAgLT4gIFNlcSBTY2FuIG9uIHNqX25hcnJvdworICAgLT4g IEhhc2gKKyAgICAgICAgIC0+ICBWYWx1ZXMgU2NhbiBvbiAiKlZBTFVFUyoiCisgU3VwcGxpZWQg UGxhbiBBZHZpY2U6CisgICBTRU1JSk9JTl9OT05fVU5JUVVFKCIqVkFMVUVTKiIpIC8qIG1hdGNo ZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKHNqX25hcnJvdyAi KlZBTFVFUyoiKQorICAgSEFTSF9KT0lOKCIqVkFMVUVTKiIpCisgICBTRVFfU0NBTihzal9uYXJy b3cpCisgICBTRU1JSk9JTl9OT05fVU5JUVVFKCIqVkFMVUVTKiIpCisgICBOT19HQVRIRVIoc2pf bmFycm93ICIqVkFMVUVTKiIpCisoMTMgcm93cykKKworQ09NTUlUOworLS0gSW4gdGhlIGFib3Zl IGV4YW1wbGUsIHdlIG1hZGUgdGhlIG91dGVyIHNpZGUgb2YgdGhlIGpvaW4gdW5pcXVlLCBidXQg aGVyZSwKKy0tIHdlIHNob3VsZCBtYWtlIHRoZSBpbm5lciBzaWRlIHVuaXF1ZS4KK0VYUExBSU4g KENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGdlbmVyYXRlX3Nlcmllcygx LDEwMDApIGcKKyAgICBXSEVSRSBnIGluIChzZWxlY3QgdmFsMSBmcm9tIHNqX25hcnJvdyk7Cisg ICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggSm9pbgorICAgSGFzaCBDb25kOiAo Zy5nID0gc2pfbmFycm93LnZhbDEpCisgICAtPiAgRnVuY3Rpb24gU2NhbiBvbiBnZW5lcmF0ZV9z ZXJpZXMgZworICAgLT4gIEhhc2gKKyAgICAgICAgIC0+ICBIYXNoQWdncmVnYXRlCisgICAgICAg ICAgICAgICBHcm91cCBLZXk6IHNqX25hcnJvdy52YWwxCisgICAgICAgICAgICAgICAtPiAgU2Vx IFNjYW4gb24gc2pfbmFycm93CisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRF UihnIHNqX25hcnJvdykKKyAgIEhBU0hfSk9JTihzal9uYXJyb3cpCisgICBTRVFfU0NBTihzal9u YXJyb3cpCisgICBTRU1JSk9JTl9VTklRVUUoc2pfbmFycm93KQorICAgTk9fR0FUSEVSKGcgc2pf bmFycm93KQorKDEzIHJvd3MpCisKKy0tIFdlIHNob3VsZCBiZSBhYmxlIHRvIGZvcmNlIGEgcGxh biB3aXRoIG9yIHdpdGhvdXQgdGhlIG1ha2UtdW5pcXVlIHN0cmF0ZWd5LAorLS0gd2l0aCBlaXRo ZXIgc2lkZSBhcyB0aGUgZHJpdmluZyB0YWJsZS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5f YWR2aWNlLmFkdmljZSA9ICdzZW1pam9pbl91bmlxdWUoc2pfbmFycm93KSc7CitFWFBMQUlOIChD T1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwx MDAwKSBnCisgICAgV0hFUkUgZyBpbiAoc2VsZWN0IHZhbDEgZnJvbSBzal9uYXJyb3cpOworICAg ICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSGFzaCBKb2luCisgICBIYXNoIENvbmQ6 IChnLmcgPSBzal9uYXJyb3cudmFsMSkKKyAgIC0+ICBGdW5jdGlvbiBTY2FuIG9uIGdlbmVyYXRl X3NlcmllcyBnCisgICAtPiAgSGFzaAorICAgICAgICAgLT4gIEhhc2hBZ2dyZWdhdGUKKyAgICAg ICAgICAgICAgIEdyb3VwIEtleTogc2pfbmFycm93LnZhbDEKKyAgICAgICAgICAgICAgIC0+ICBT ZXEgU2NhbiBvbiBzal9uYXJyb3cKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIFNFTUlKT0lO X1VOSVFVRShzal9uYXJyb3cpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6 CisgICBKT0lOX09SREVSKGcgc2pfbmFycm93KQorICAgSEFTSF9KT0lOKHNqX25hcnJvdykKKyAg IFNFUV9TQ0FOKHNqX25hcnJvdykKKyAgIFNFTUlKT0lOX1VOSVFVRShzal9uYXJyb3cpCisgICBO T19HQVRIRVIoZyBzal9uYXJyb3cpCisoMTUgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2 aWNlLmFkdmljZSA9ICdzZW1pam9pbl9ub25fdW5pcXVlKHNqX25hcnJvdyknOworRVhQTEFJTiAo Q09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEs MTAwMCkgZworICAgIFdIRVJFIGcgaW4gKHNlbGVjdCB2YWwxIGZyb20gc2pfbmFycm93KTsKKyAg ICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSGFzaCBTZW1pIEpvaW4K KyAgIEhhc2ggQ29uZDogKGcuZyA9IHNqX25hcnJvdy52YWwxKQorICAgLT4gIEZ1bmN0aW9uIFNj YW4gb24gZ2VuZXJhdGVfc2VyaWVzIGcKKyAgIC0+ICBIYXNoCisgICAgICAgICAtPiAgU2VxIFNj YW4gb24gc2pfbmFycm93CisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBTRU1JSk9JTl9OT05f VU5JUVVFKHNqX25hcnJvdykgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToK KyAgIEpPSU5fT1JERVIoZyBzal9uYXJyb3cpCisgICBIQVNIX0pPSU4oc2pfbmFycm93KQorICAg U0VRX1NDQU4oc2pfbmFycm93KQorICAgU0VNSUpPSU5fTk9OX1VOSVFVRShzal9uYXJyb3cpCisg ICBOT19HQVRIRVIoZyBzal9uYXJyb3cpCisoMTMgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5f YWR2aWNlLmFkdmljZSA9ICdzZW1pam9pbl91bmlxdWUoc2pfbmFycm93KSBqb2luX29yZGVyKHNq X25hcnJvdyknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZS T00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMCkgZworICAgIFdIRVJFIGcgaW4gKHNlbGVjdCB2YWwx IGZyb20gc2pfbmFycm93KTsKKyAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAg ICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgSGFzaCBKb2luCisgICBIYXNoIENvbmQ6IChzal9uYXJyb3cudmFsMSA9IGcuZykKKyAg IC0+ICBIYXNoQWdncmVnYXRlCisgICAgICAgICBHcm91cCBLZXk6IHNqX25hcnJvdy52YWwxCisg ICAgICAgICAtPiAgU2VxIFNjYW4gb24gc2pfbmFycm93CisgICAtPiAgSGFzaAorICAgICAgICAg LT4gIEZ1bmN0aW9uIFNjYW4gb24gZ2VuZXJhdGVfc2VyaWVzIGcKKyBTdXBwbGllZCBQbGFuIEFk dmljZToKKyAgIFNFTUlKT0lOX1VOSVFVRShzal9uYXJyb3cpIC8qIG1hdGNoZWQgKi8KKyAgIEpP SU5fT1JERVIoc2pfbmFycm93KSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNl OgorICAgSk9JTl9PUkRFUihzal9uYXJyb3cgZykKKyAgIEhBU0hfSk9JTihnKQorICAgU0VRX1ND QU4oc2pfbmFycm93KQorICAgU0VNSUpPSU5fVU5JUVVFKHNqX25hcnJvdykKKyAgIE5PX0dBVEhF UihnIHNqX25hcnJvdykKKygxNiByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2 aWNlID0gJ3NlbWlqb2luX25vbl91bmlxdWUoc2pfbmFycm93KSBqb2luX29yZGVyKHNqX25hcnJv dyknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gZ2Vu ZXJhdGVfc2VyaWVzKDEsMTAwMCkgZworICAgIFdIRVJFIGcgaW4gKHNlbGVjdCB2YWwxIGZyb20g c2pfbmFycm93KTsKKyAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg SGFzaCBSaWdodCBTZW1pIEpvaW4KKyAgIEhhc2ggQ29uZDogKHNqX25hcnJvdy52YWwxID0gZy5n KQorICAgLT4gIFNlcSBTY2FuIG9uIHNqX25hcnJvdworICAgLT4gIEhhc2gKKyAgICAgICAgIC0+ ICBGdW5jdGlvbiBTY2FuIG9uIGdlbmVyYXRlX3NlcmllcyBnCisgU3VwcGxpZWQgUGxhbiBBZHZp Y2U6CisgICBTRU1JSk9JTl9OT05fVU5JUVVFKHNqX25hcnJvdykgLyogbWF0Y2hlZCAqLworICAg Sk9JTl9PUkRFUihzal9uYXJyb3cpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZp Y2U6CisgICBKT0lOX09SREVSKHNqX25hcnJvdyBnKQorICAgSEFTSF9KT0lOKGcpCisgICBTRVFf U0NBTihzal9uYXJyb3cpCisgICBTRU1JSk9JTl9OT05fVU5JUVVFKHNqX25hcnJvdykKKyAgIE5P X0dBVEhFUihnIHNqX25hcnJvdykKKygxNCByb3dzKQorCitDT01NSVQ7CistLSBIb3dldmVyLCBt ZW50aW9uaW5nIHRoZSB3cm9uZyBzaWRlIG9mIHRoZSBqb2luIHNob3VsZCByZXN1bHQgaW4gYW4g YWR2aWNlCistLSBmYWlsdXJlLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2 aWNlID0gJ3NlbWlqb2luX3VuaXF1ZShnKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURW SUNFKQorU0VMRUNUICogRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwKSBnCisgICAgV0hFUkUg ZyBpbiAoc2VsZWN0IHZhbDEgZnJvbSBzal9uYXJyb3cpOworICAgICAgICAgICAgICAgICBRVUVS WSBQTEFOICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIERpc2FibGVkOiB0cnVlCisgICBKb2luIEZp bHRlcjogKGcuZyA9IHNqX25hcnJvdy52YWwxKQorICAgLT4gIEhhc2hBZ2dyZWdhdGUKKyAgICAg ICAgIEdyb3VwIEtleTogc2pfbmFycm93LnZhbDEKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBz al9uYXJyb3cKKyAgIC0+ICBGdW5jdGlvbiBTY2FuIG9uIGdlbmVyYXRlX3NlcmllcyBnCisgU3Vw cGxpZWQgUGxhbiBBZHZpY2U6CisgICBTRU1JSk9JTl9VTklRVUUoZykgLyogbWF0Y2hlZCwgZmFp bGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihzal9uYXJyb3cg ZykKKyAgIE5FU1RFRF9MT09QX1BMQUlOKGcpCisgICBTRVFfU0NBTihzal9uYXJyb3cpCisgICBT RU1JSk9JTl9VTklRVUUoc2pfbmFycm93KQorICAgTk9fR0FUSEVSKGcgc2pfbmFycm93KQorKDE1 IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnc2VtaWpvaW5fbm9u X3VuaXF1ZShnKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICog RlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwKSBnCisgICAgV0hFUkUgZyBpbiAoc2VsZWN0IHZh bDEgZnJvbSBzal9uYXJyb3cpOworICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgRGlzYWJsZWQ6IHRydWUKKyAgIEpvaW4gRmlsdGVyOiAo Zy5nID0gc2pfbmFycm93LnZhbDEpCisgICAtPiAgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgR3Jv dXAgS2V5OiBzal9uYXJyb3cudmFsMQorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHNqX25hcnJv dworICAgLT4gIEZ1bmN0aW9uIFNjYW4gb24gZ2VuZXJhdGVfc2VyaWVzIGcKKyBTdXBwbGllZCBQ bGFuIEFkdmljZToKKyAgIFNFTUlKT0lOX05PTl9VTklRVUUoZykgLyogbWF0Y2hlZCwgZmFpbGVk ICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihzal9uYXJyb3cgZykK KyAgIE5FU1RFRF9MT09QX1BMQUlOKGcpCisgICBTRVFfU0NBTihzal9uYXJyb3cpCisgICBTRU1J Sk9JTl9VTklRVUUoc2pfbmFycm93KQorICAgTk9fR0FUSEVSKGcgc2pfbmFycm93KQorKDE1IHJv d3MpCisKK0NPTU1JVDsKKy0tIFRlc3QgY29uZmxpY3RpbmcgYWR2aWNlLgorQkVHSU47CitTRVQg TE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ3NlbWlqb2luX3VuaXF1ZShzal9uYXJyb3cp IHNlbWlqb2luX25vbl91bmlxdWUoc2pfbmFycm93KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBM QU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwKSBnCisgICAg V0hFUkUgZyBpbiAoc2VsZWN0IHZhbDEgZnJvbSBzal9uYXJyb3cpOworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyBIYXNoIEpvaW4KKyAgIEhhc2ggQ29uZDogKGcuZyA9IHNqX25hcnJvdy52 YWwxKQorICAgLT4gIEZ1bmN0aW9uIFNjYW4gb24gZ2VuZXJhdGVfc2VyaWVzIGcKKyAgIC0+ICBI YXNoCisgICAgICAgICAtPiAgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgR3JvdXAgS2V5 OiBzal9uYXJyb3cudmFsMQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHNqX25hcnJv dworIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgU0VNSUpPSU5fVU5JUVVFKHNqX25hcnJvdykg LyogbWF0Y2hlZCwgY29uZmxpY3RpbmcgKi8KKyAgIFNFTUlKT0lOX05PTl9VTklRVUUoc2pfbmFy cm93KSAvKiBtYXRjaGVkLCBjb25mbGljdGluZywgZmFpbGVkICovCisgR2VuZXJhdGVkIFBsYW4g QWR2aWNlOgorICAgSk9JTl9PUkRFUihnIHNqX25hcnJvdykKKyAgIEhBU0hfSk9JTihzal9uYXJy b3cpCisgICBTRVFfU0NBTihzal9uYXJyb3cpCisgICBTRU1JSk9JTl9VTklRVUUoc2pfbmFycm93 KQorICAgTk9fR0FUSEVSKGcgc2pfbmFycm93KQorKDE2IHJvd3MpCisKK0NPTU1JVDsKKy0tIFRy eSBhcHBseWluZyBTRU1JSk9JTl9VTklRVUUoKSB0byBhIG5vbi1zZW1pam9pbi4KK0JFR0lOOwor U0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdzZW1pam9pbl91bmlxdWUoZyknOwor RVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gZ2VuZXJhdGVf c2VyaWVzKDEsMTAwMCkgZywgc2pfbmFycm93IHMgV0hFUkUgZyA9IHMudmFsMTsKKyAgICAgICAg ICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBN ZXJnZSBKb2luCisgICBNZXJnZSBDb25kOiAocy52YWwxID0gZy5nKQorICAgLT4gIEluZGV4IFNj YW4gdXNpbmcgc2pfbmFycm93X3ZhbDFfaWR4IG9uIHNqX25hcnJvdyBzCisgICAtPiAgU29ydAor ICAgICAgICAgU29ydCBLZXk6IGcuZworICAgICAgICAgLT4gIEZ1bmN0aW9uIFNjYW4gb24gZ2Vu ZXJhdGVfc2VyaWVzIGcKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIFNFTUlKT0lOX1VOSVFV RShnKSAvKiBtYXRjaGVkLCBpbmFwcGxpY2FibGUsIGZhaWxlZCAqLworIEdlbmVyYXRlZCBQbGFu IEFkdmljZToKKyAgIEpPSU5fT1JERVIocyBnKQorICAgTUVSR0VfSk9JTl9QTEFJTihnKQorICAg SU5ERVhfU0NBTihzIHB1YmxpYy5zal9uYXJyb3dfdmFsMV9pZHgpCisgICBOT19HQVRIRVIoZyBz KQorKDEzIHJvd3MpCisKK0NPTU1JVDsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZp Y2UvZXhwZWN0ZWQvc3ludGF4Lm91dCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQv c3ludGF4Lm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYmU2MTQw MmI1NjkKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVk L3N5bnRheC5vdXQKQEAgLTAsMCArMSwxOTIgQEAKK0xPQUQgJ3BnX3BsYW5fYWR2aWNlJzsKKy0t IEFuIGVtcHR5IHN0cmluZyBpcyBhbGxvd2VkLiBFbXB0eSB0YXJnZXQgbGlzdHMgYXJlIGFsbG93 ZWQgZm9yIG1vc3QgYWR2aWNlCistLSB0YWdzLCBidXQgbm90IGZvciBKT0lOX09SREVSLiAiU3Vw cGxpZWQgUGxhbiBBZHZpY2UiIHNob3VsZCBiZSBvbWl0dGVkIGluCistLSB0ZXh0IGZvcm1hdCB3 aGVuIHRoZXJlIGlzIG5vIGFjdHVhbCBhZHZpY2UsIGJ1dCBub3QgaW4gbm9uLXRleHQgZm9ybWF0 LgorU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICcnOworRVhQTEFJTiAoQ09TVFMgT0ZGKSBT RUxFQ1QgMTsKKyBRVUVSWSBQTEFOIAorLS0tLS0tLS0tLS0tCisgUmVzdWx0CisoMSByb3cpCisK K1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oKSc7CitFWFBMQUlOIChDT1NU UyBPRkYpIFNFTEVDVCAxOworIFFVRVJZIFBMQU4gCistLS0tLS0tLS0tLS0KKyBSZXN1bHQKKygx IHJvdykKKworU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdORVNURURfTE9PUF9QTEFJTigp JzsKK0VYUExBSU4gKENPU1RTIE9GRiwgRk9STUFUIEpTT04pIFNFTEVDVCAxOworICAgICAgICAg ICBRVUVSWSBQTEFOICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgWyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKworICAgeyAgICAgICAgICAgICAgICAg ICAgICAgICAgICsKKyAgICAgIlBsYW4iOiB7ICAgICAgICAgICAgICAgICArCisgICAgICAgIk5v ZGUgVHlwZSI6ICJSZXN1bHQiLCAgKworICAgICAgICJQYXJhbGxlbCBBd2FyZSI6IGZhbHNlLCsK KyAgICAgICAiQXN5bmMgQ2FwYWJsZSI6IGZhbHNlLCArCisgICAgICAgIkRpc2FibGVkIjogZmFs c2UgICAgICAgKworICAgICB9LCAgICAgICAgICAgICAgICAgICAgICAgICsKKyAgICAgIlN1cHBs aWVkIFBsYW4gQWR2aWNlIjogIiIrCisgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgKwor IF0KKygxIHJvdykKKworU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdKT0lOX09SREVSKCkn OworRVJST1I6ICBpbnZhbGlkIHZhbHVlIGZvciBwYXJhbWV0ZXIgInBnX3BsYW5fYWR2aWNlLmFk dmljZSI6ICJKT0lOX09SREVSKCkiCitERVRBSUw6ICBDb3VsZCBub3QgcGFyc2UgYWR2aWNlOiBK T0lOX09SREVSIG11c3QgaGF2ZSBhdCBsZWFzdCBvbmUgdGFyZ2V0IGF0IG9yIG5lYXIgIikiCist LSBUZXN0IGFzc29ydGVkIHZhcmlhdGlvbnMgaW4gY2FwaXRhbGl6YXRpb24sIHdoaXRlc3BhY2Us IGFuZCB3aGljaCBwYXJ0cyBvZgorLS0gdGhlIHJlbGF0aW9uIGlkZW50aWZpZXIgYXJlIGluY2x1 ZGVkLiBUaGVzZSBzaG91bGQgYWxsIHdvcmsuCitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0g J1NFUV9TQ0FOKHgpJzsKK0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUIDE7CisgICAgICAgICAg IFFVRVJZIFBMQU4gICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIFJlc3VsdAorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4oeCkgLyogbm90 IG1hdGNoZWQgKi8KKygzIHJvd3MpCisKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnc2Vx X3NjYW4oeEB5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCAxOworICAgICAgICAgICAg UVVFUlkgUExBTiAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgUmVzdWx0CisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTih4QHkpIC8q IG5vdCBtYXRjaGVkICovCisoMyByb3dzKQorCitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0g J1NFUV9zY2FuKHgjMiknOworRVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1QgMTsKKyAgICAgICAg ICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIFJlc3VsdAorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4oeCMy KSAvKiBub3QgbWF0Y2hlZCAqLworKDMgcm93cykKKworU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmlj ZSA9ICdTRVFfU0NBTiAoeC95KSc7CitFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCAxOworICAg ICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgUmVzdWx0CisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NB Tih4L3kpIC8qIG5vdCBtYXRjaGVkICovCisoMyByb3dzKQorCitTRVQgcGdfcGxhbl9hZHZpY2Uu YWR2aWNlID0gJyAgU0VRX1NDQU4gKCB4IC8geSAuIHogKSAgJzsKK0VYUExBSU4gKENPU1RTIE9G RikgU0VMRUNUIDE7CisgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgUmVzdWx0CisgU3VwcGxpZWQgUGxh biBBZHZpY2U6CisgICBTRVFfU0NBTih4L3kueikgLyogbm90IG1hdGNoZWQgKi8KKygzIHJvd3Mp CisKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oIngiIzIvInkiLiJ6IkAi dCIpJzsKK0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUIDE7CisgICAgICAgICAgICAgICBRVUVS WSBQTEFOICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBSZXN1bHQKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FOKHgj Mi95LnpAdCkgLyogbm90IG1hdGNoZWQgKi8KKygzIHJvd3MpCisKKy0tIFN5bnRheCBlcnJvcnMu CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUVVFTlRJQUxfU0NBTih4KSc7CitFUlJP UjogIGludmFsaWQgdmFsdWUgZm9yIHBhcmFtZXRlciAicGdfcGxhbl9hZHZpY2UuYWR2aWNlIjog IlNFUVVFTlRJQUxfU0NBTih4KSIKK0RFVEFJTDogIENvdWxkIG5vdCBwYXJzZSBhZHZpY2U6IHN5 bnRheCBlcnJvciBhdCBvciBuZWFyICJTRVFVRU5USUFMX1NDQU4iCitTRVQgcGdfcGxhbl9hZHZp Y2UuYWR2aWNlID0gJ1NFUV9TQ0FOJzsKK0VSUk9SOiAgaW52YWxpZCB2YWx1ZSBmb3IgcGFyYW1l dGVyICJwZ19wbGFuX2FkdmljZS5hZHZpY2UiOiAiU0VRX1NDQU4iCitERVRBSUw6ICBDb3VsZCBu b3QgcGFyc2UgYWR2aWNlOiBzeW50YXggZXJyb3IgYXQgZW5kIG9mIGlucHV0CitTRVQgcGdfcGxh bl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKCc7CitFUlJPUjogIGludmFsaWQgdmFsdWUgZm9y IHBhcmFtZXRlciAicGdfcGxhbl9hZHZpY2UuYWR2aWNlIjogIlNFUV9TQ0FOKCIKK0RFVEFJTDog IENvdWxkIG5vdCBwYXJzZSBhZHZpY2U6IHN5bnRheCBlcnJvciBhdCBlbmQgb2YgaW5wdXQKK1NF VCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oIic7CitFUlJPUjogIGludmFsaWQg dmFsdWUgZm9yIHBhcmFtZXRlciAicGdfcGxhbl9hZHZpY2UuYWR2aWNlIjogIlNFUV9TQ0FOKCIi CitERVRBSUw6ICBDb3VsZCBub3QgcGFyc2UgYWR2aWNlOiB1bnRlcm1pbmF0ZWQgcXVvdGVkIGlk ZW50aWZpZXIgYXQgZW5kIG9mIGlucHV0CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NF UV9TQ0FOKCIiKSc7CitFUlJPUjogIGludmFsaWQgdmFsdWUgZm9yIHBhcmFtZXRlciAicGdfcGxh bl9hZHZpY2UuYWR2aWNlIjogIlNFUV9TQ0FOKCIiKSIKK0RFVEFJTDogIENvdWxkIG5vdCBwYXJz ZSBhZHZpY2U6IHplcm8tbGVuZ3RoIGRlbGltaXRlZCBpZGVudGlmaWVyIGF0IG9yIG5lYXIgIiIi CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKCJhIic7CitFUlJPUjogIGlu dmFsaWQgdmFsdWUgZm9yIHBhcmFtZXRlciAicGdfcGxhbl9hZHZpY2UuYWR2aWNlIjogIlNFUV9T Q0FOKCJhIiIKK0RFVEFJTDogIENvdWxkIG5vdCBwYXJzZSBhZHZpY2U6IHN5bnRheCBlcnJvciBh dCBlbmQgb2YgaW5wdXQKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oIyc7 CitFUlJPUjogIGludmFsaWQgdmFsdWUgZm9yIHBhcmFtZXRlciAicGdfcGxhbl9hZHZpY2UuYWR2 aWNlIjogIlNFUV9TQ0FOKCMiCitERVRBSUw6ICBDb3VsZCBub3QgcGFyc2UgYWR2aWNlOiBzeW50 YXggZXJyb3IgYXQgb3IgbmVhciAiIyIKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnKCkn OworRVJST1I6ICBpbnZhbGlkIHZhbHVlIGZvciBwYXJhbWV0ZXIgInBnX3BsYW5fYWR2aWNlLmFk dmljZSI6ICIoKSIKK0RFVEFJTDogIENvdWxkIG5vdCBwYXJzZSBhZHZpY2U6IHN5bnRheCBlcnJv ciBhdCBvciBuZWFyICIoIgorU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICcxMjMnOworRVJS T1I6ICBpbnZhbGlkIHZhbHVlIGZvciBwYXJhbWV0ZXIgInBnX3BsYW5fYWR2aWNlLmFkdmljZSI6 ICIxMjMiCitERVRBSUw6ICBDb3VsZCBub3QgcGFyc2UgYWR2aWNlOiBzeW50YXggZXJyb3IgYXQg b3IgbmVhciAiMTIzIgorLS0gVGFncyBsaWtlIFNFUV9TQ0FOIGFuZCBOT19HQVRIRVIgZG9uJ3Qg YWxsb3cgc3VibGlzdHMgYXQgYWxsOyBvdGhlciB0YWdzLAorLS0gZXhjZXB0IGZvciBKT0lOX09S REVSLCBhbGxvdyBhdCBtb3N0IG9uZSBsZXZlbCBvZiBzdWJsaXN0LiBIZW5jZSwgdGhlc2UKKy0t IGV4YW1wbGVzIHNob3VsZCBlcnJvciBvdXQuCitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0g J1NFUV9TQ0FOKCh4KSknOworRVJST1I6ICBpbnZhbGlkIHZhbHVlIGZvciBwYXJhbWV0ZXIgInBn X3BsYW5fYWR2aWNlLmFkdmljZSI6ICJTRVFfU0NBTigoeCkpIgorREVUQUlMOiAgQ291bGQgbm90 IHBhcnNlIGFkdmljZTogc3ludGF4IGVycm9yIGF0IG9yIG5lYXIgIigiCitTRVQgcGdfcGxhbl9h ZHZpY2UuYWR2aWNlID0gJ0dBVEhFUigoKHgpKSknOworRVJST1I6ICBpbnZhbGlkIHZhbHVlIGZv ciBwYXJhbWV0ZXIgInBnX3BsYW5fYWR2aWNlLmFkdmljZSI6ICJHQVRIRVIoKCh4KSkpIgorREVU QUlMOiAgQ291bGQgbm90IHBhcnNlIGFkdmljZTogc3ludGF4IGVycm9yIGF0IG9yIG5lYXIgIigi CistLSBMZWdhbCBjb21tZW50cy4KK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnLyoqLyc7 CitFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCAxOworIFFVRVJZIFBMQU4gCistLS0tLS0tLS0t LS0KKyBSZXN1bHQKKygxIHJvdykKKworU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdIQVNI X0pPSU4oXykvKioqLyc7CitFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCAxOworICAgICAgICAg ICAgUVVFUlkgUExBTiAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorIFJlc3VsdAorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSEFTSF9KT0lOKF8pIC8q IG5vdCBtYXRjaGVkICovCisoMyByb3dzKQorCitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0g Jy8qIGNvbW1lbnQgKi8gSEFTSF9KT0lOKC8qeCoveSknOworRVhQTEFJTiAoQ09TVFMgT0ZGKSBT RUxFQ1QgMTsKKyAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBSZXN1bHQKKyBTdXBwbGllZCBQbGFuIEFkdmljZToK KyAgIEhBU0hfSk9JTih5KSAvKiBub3QgbWF0Y2hlZCAqLworKDMgcm93cykKKworU0VUIHBnX3Bs YW5fYWR2aWNlLmFkdmljZSA9ICcvKiBjb21tZW50ICovIEhBU0hfSk9JTih5Ly8qeCoveiknOwor RVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1QgMTsKKyAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgUmVzdWx0 CisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBIQVNIX0pPSU4oeS96KSAvKiBub3QgbWF0Y2hl ZCAqLworKDMgcm93cykKKworLS0gVW50ZXJtaW5hdGVkIGNvbW1lbnRzLgorU0VUIHBnX3BsYW5f YWR2aWNlLmFkdmljZSA9ICcvKic7CitFUlJPUjogIGludmFsaWQgdmFsdWUgZm9yIHBhcmFtZXRl ciAicGdfcGxhbl9hZHZpY2UuYWR2aWNlIjogIi8qIgorREVUQUlMOiAgQ291bGQgbm90IHBhcnNl IGFkdmljZTogdW50ZXJtaW5hdGVkIGNvbW1lbnQgYXQgZW5kIG9mIGlucHV0CitTRVQgcGdfcGxh bl9hZHZpY2UuYWR2aWNlID0gJ0pPSU5fT1JERVIoImZPTyIpIC8qIG9vcHMnOworRVJST1I6ICBp bnZhbGlkIHZhbHVlIGZvciBwYXJhbWV0ZXIgInBnX3BsYW5fYWR2aWNlLmFkdmljZSI6ICJKT0lO X09SREVSKCJmT08iKSAvKiBvb3BzIgorREVUQUlMOiAgQ291bGQgbm90IHBhcnNlIGFkdmljZTog dW50ZXJtaW5hdGVkIGNvbW1lbnQgYXQgZW5kIG9mIGlucHV0CistLSBOZXN0ZWQgY29tbWVudHMg YXJlIG5vdCBzdXBwb3J0ZWQsIHNvIHRoZSBmaXJzdCBvZiB0aGVzZSBpcyBsZWdhbCBhbmQKKy0t IHRoZSBzZWNvbmQgaXMgbm90LgorU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICcvKi8qLyc7 CitFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCAxOworIFFVRVJZIFBMQU4gCistLS0tLS0tLS0t LS0KKyBSZXN1bHQKKygxIHJvdykKKworU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICcvKi8q IHN0dWZmICovKi8nOworRVJST1I6ICBpbnZhbGlkIHZhbHVlIGZvciBwYXJhbWV0ZXIgInBnX3Bs YW5fYWR2aWNlLmFkdmljZSI6ICIvKi8qIHN0dWZmICovKi8iCitERVRBSUw6ICBDb3VsZCBub3Qg cGFyc2UgYWR2aWNlOiBzeW50YXggZXJyb3IgYXQgb3IgbmVhciAiKiIKKy0tIEZvcmVpZ24gam9p biByZXF1aXJlcyBtdWx0aXBsZSByZWxhdGlvbiBpZGVudGlmaWVycy4KK1NFVCBwZ19wbGFuX2Fk dmljZS5hZHZpY2UgPSAnRk9SRUlHTl9KT0lOKGEpJzsKK0VSUk9SOiAgaW52YWxpZCB2YWx1ZSBm b3IgcGFyYW1ldGVyICJwZ19wbGFuX2FkdmljZS5hZHZpY2UiOiAiRk9SRUlHTl9KT0lOKGEpIgor REVUQUlMOiAgQ291bGQgbm90IHBhcnNlIGFkdmljZTogRk9SRUlHTl9KT0lOIHRhcmdldHMgbXVz dCBjb250YWluIG1vcmUgdGhhbiBvbmUgcmVsYXRpb24gaWRlbnRpZmllciBhdCBvciBuZWFyICIp IgorU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdGT1JFSUdOX0pPSU4oKGEpKSc7CitFUlJP UjogIGludmFsaWQgdmFsdWUgZm9yIHBhcmFtZXRlciAicGdfcGxhbl9hZHZpY2UuYWR2aWNlIjog IkZPUkVJR05fSk9JTigoYSkpIgorREVUQUlMOiAgQ291bGQgbm90IHBhcnNlIGFkdmljZTogRk9S RUlHTl9KT0lOIHRhcmdldHMgbXVzdCBjb250YWluIG1vcmUgdGhhbiBvbmUgcmVsYXRpb24gaWRl bnRpZmllciBhdCBvciBuZWFyICIpIgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2Fkdmlj ZS9tZXNvbi5idWlsZCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvbWVzb24uYnVpbGQKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmNmOTQ4ZmZhYTEzCi0tLSAvZGV2L251 bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9tZXNvbi5idWlsZApAQCAtMCwwICsxLDY2 IEBACisjIENvcHlyaWdodCAoYykgMjAyMi0yMDI2LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9w bWVudCBHcm91cAorCitwZ19wbGFuX2FkdmljZV9zb3VyY2VzID0gZmlsZXMoCisgICdwZ19wbGFu X2FkdmljZS5jJywKKyAgJ3BncGFfYXN0LmMnLAorICAncGdwYV9pZGVudGlmaWVyLmMnLAorICAn cGdwYV9qb2luLmMnLAorICAncGdwYV9vdXRwdXQuYycsCisgICdwZ3BhX3BsYW5uZXIuYycsCisg ICdwZ3BhX3NjYW4uYycsCisgICdwZ3BhX3Ryb3ZlLmMnLAorICAncGdwYV93YWxrZXIuYycsCisp CisKK3BncGFfc2Nhbm5lciA9IGN1c3RvbV90YXJnZXQoJ3BncGFfc2Nhbm5lcicsCisgIGlucHV0 OiAncGdwYV9zY2FubmVyLmwnLAorICBvdXRwdXQ6ICdwZ3BhX3NjYW5uZXIuYycsCisgIGNvbW1h bmQ6IGZsZXhfY21kLAorKQorZ2VuZXJhdGVkX3NvdXJjZXMgKz0gcGdwYV9zY2FubmVyCitwZ19w bGFuX2FkdmljZV9zb3VyY2VzICs9IHBncGFfc2Nhbm5lcgorCitwZ3BhX3BhcnNlciA9IGN1c3Rv bV90YXJnZXQoJ3BncGFfcGFyc2VyJywKKyAgaW5wdXQ6ICdwZ3BhX3BhcnNlci55JywKKyAga3dh cmdzOiBiaXNvbl9rdywKKykKK2dlbmVyYXRlZF9zb3VyY2VzICs9IHBncGFfcGFyc2VyLnRvX2xp c3QoKQorcGdfcGxhbl9hZHZpY2Vfc291cmNlcyArPSBwZ3BhX3BhcnNlcgorCitpZiBob3N0X3N5 c3RlbSA9PSAnd2luZG93cycKKyAgcGdfcGxhbl9hZHZpY2Vfc291cmNlcyArPSByY19saWJfZ2Vu LnByb2Nlc3Mod2luMzJ2ZXJfcmMsIGV4dHJhX2FyZ3M6IFsKKyAgICAnLS1OQU1FJywgJ3BnX3Bs YW5fYWR2aWNlJywKKyAgICAnLS1GSUxFREVTQycsICdwZ19wbGFuX2FkdmljZSAtIGhlbHAgdGhl IHBsYW5uZXIgZ2V0IHRoZSByaWdodCBwbGFuJyxdKQorZW5kaWYKKworcGdfcGxhbl9hZHZpY2Vf aW5jID0gaW5jbHVkZV9kaXJlY3RvcmllcygnLicpCisKK3BnX3BsYW5fYWR2aWNlID0gc2hhcmVk X21vZHVsZSgncGdfcGxhbl9hZHZpY2UnLAorICBwZ19wbGFuX2FkdmljZV9zb3VyY2VzLAorICBp bmNsdWRlX2RpcmVjdG9yaWVzOiBwZ19wbGFuX2FkdmljZV9pbmMsCisgIGt3YXJnczogY29udHJp Yl9tb2RfYXJncywKKykKK2NvbnRyaWJfdGFyZ2V0cyArPSBwZ19wbGFuX2FkdmljZQorCitpbnN0 YWxsX2hlYWRlcnMoCisgICdwZ19wbGFuX2FkdmljZS5oJywKKyAgaW5zdGFsbF9kaXI6IGRpcl9p bmNsdWRlX2V4dGVuc2lvbiAvICdwZ19wbGFuX2FkdmljZScsCispCisKK3Rlc3RzICs9IHsKKyAg J25hbWUnOiAncGdfcGxhbl9hZHZpY2UnLAorICAnc2QnOiBtZXNvbi5jdXJyZW50X3NvdXJjZV9k aXIoKSwKKyAgJ2JkJzogbWVzb24uY3VycmVudF9idWlsZF9kaXIoKSwKKyAgJ3JlZ3Jlc3MnOiB7 CisgICAgJ3NxbCc6IFsKKyAgICAgICdnYXRoZXInLAorICAgICAgJ2pvaW5fb3JkZXInLAorICAg ICAgJ2pvaW5fc3RyYXRlZ3knLAorICAgICAgJ3BhcnRpdGlvbndpc2UnLAorICAgICAgJ3ByZXBh cmVkJywKKyAgICAgICdzY2FuJywKKyAgICAgICdzZW1pam9pbicsCisgICAgICAnc3ludGF4JywK KyAgICBdLAorICB9LAorfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ19w bGFuX2FkdmljZS5jIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ19wbGFuX2FkdmljZS5jCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4yZTBjYWEyODQ2NgotLS0gL2Rl di9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UuYwpAQCAt MCwwICsxLDQ1NiBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogcGdfcGxhbl9hZHZpY2Uu YworICoJICBtYWluIGVudHJ5cG9pbnRzIGZvciBnZW5lcmF0aW5nIGFuZCBhcHBseWluZyBwbGFu bmVyIGFkdmljZQorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNi0yMDI2LCBQb3N0Z3JlU1FMIEds b2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqCSAgY29udHJpYi9wZ19wbGFuX2FkdmljZS9w Z19wbGFuX2FkdmljZS5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpbmNsdWRlICJw b3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAicGdfcGxhbl9hZHZpY2UuaCIKKyNpbmNsdWRlICJwZ3Bh X2FzdC5oIgorI2luY2x1ZGUgInBncGFfaWRlbnRpZmllci5oIgorI2luY2x1ZGUgInBncGFfb3V0 cHV0LmgiCisjaW5jbHVkZSAicGdwYV9wbGFubmVyLmgiCisjaW5jbHVkZSAicGdwYV90cm92ZS5o IgorI2luY2x1ZGUgInBncGFfd2Fsa2VyLmgiCisKKyNpbmNsdWRlICJjb21tYW5kcy9kZWZyZW0u aCIKKyNpbmNsdWRlICJjb21tYW5kcy9leHBsYWluLmgiCisjaW5jbHVkZSAiY29tbWFuZHMvZXhw bGFpbl9mb3JtYXQuaCIKKyNpbmNsdWRlICJjb21tYW5kcy9leHBsYWluX3N0YXRlLmgiCisjaW5j bHVkZSAiZnVuY2FwaS5oIgorI2luY2x1ZGUgIm9wdGltaXplci9wbGFubmVyLmgiCisjaW5jbHVk ZSAic3RvcmFnZS9kc21fcmVnaXN0cnkuaCIKKyNpbmNsdWRlICJ1dGlscy9ndWMuaCIKKworUEdf TU9EVUxFX01BR0lDOworCisvKiBHVUMgdmFyaWFibGVzICovCitjaGFyCSAgICpwZ19wbGFuX2Fk dmljZV9hZHZpY2UgPSBOVUxMOworYm9vbAkJcGdfcGxhbl9hZHZpY2VfYWx3YXlzX3N0b3JlX2Fk dmljZV9kZXRhaWxzID0gZmFsc2U7CitzdGF0aWMgYm9vbCBwZ19wbGFuX2FkdmljZV9hbHdheXNf ZXhwbGFpbl9zdXBwbGllZF9hZHZpY2UgPSB0cnVlOworYm9vbAkJcGdfcGxhbl9hZHZpY2VfZmVl ZGJhY2tfd2FybmluZ3MgPSBmYWxzZTsKK2Jvb2wJCXBnX3BsYW5fYWR2aWNlX3RyYWNlX21hc2sg PSBmYWxzZTsKKworLyogU2F2ZWQgaG9vayB2YWx1ZSAqLworc3RhdGljIGV4cGxhaW5fcGVyX3Bs YW5faG9va190eXBlIHByZXZfZXhwbGFpbl9wZXJfcGxhbiA9IE5VTEw7CisKKy8qIE90aGVyIGZp bGUtbGV2ZWwgZ2xvYmFscyAqLworc3RhdGljIGludAllc19leHRlbnNpb25faWQ7CitzdGF0aWMg TWVtb3J5Q29udGV4dCBwZ3BhX21lbW9yeV9jb250ZXh0ID0gTlVMTDsKK3N0YXRpYyBMaXN0ICph ZHZpc29yX2hvb2tfbGlzdCA9IE5JTDsKKworc3RhdGljIHZvaWQgcGdfcGxhbl9hZHZpY2VfZXhw bGFpbl9vcHRpb25faGFuZGxlcihFeHBsYWluU3RhdGUgKmVzLAorCQkJCQkJCQkJCQkJICBEZWZF bGVtICpvcHQsCisJCQkJCQkJCQkJCQkgIFBhcnNlU3RhdGUgKnBzdGF0ZSk7CitzdGF0aWMgdm9p ZCBwZ19wbGFuX2FkdmljZV9leHBsYWluX3Blcl9wbGFuX2hvb2soUGxhbm5lZFN0bXQgKnBsYW5u ZWRzdG10LAorCQkJCQkJCQkJCQkJIEludG9DbGF1c2UgKmludG8sCisJCQkJCQkJCQkJCQkgRXhw bGFpblN0YXRlICplcywKKwkJCQkJCQkJCQkJCSBjb25zdCBjaGFyICpxdWVyeVN0cmluZywKKwkJ CQkJCQkJCQkJCSBQYXJhbUxpc3RJbmZvIHBhcmFtcywKKwkJCQkJCQkJCQkJCSBRdWVyeUVudmly b25tZW50ICpxdWVyeUVudik7CitzdGF0aWMgYm9vbCBwZ19wbGFuX2FkdmljZV9hZHZpY2VfY2hl Y2tfaG9vayhjaGFyICoqbmV3dmFsLCB2b2lkICoqZXh0cmEsCisJCQkJCQkJCQkJCSBHdWNTb3Vy Y2Ugc291cmNlKTsKK3N0YXRpYyBEZWZFbGVtICpmaW5kX2RlZmVsZW1fYnlfZGVmbmFtZShMaXN0 ICpkZWZsaXN0LCBjaGFyICpkZWZuYW1lKTsKKworLyoKKyAqIEluaXRpYWxpemUgdGhpcyBtb2R1 bGUuCisgKi8KK3ZvaWQKK19QR19pbml0KHZvaWQpCit7CisJRGVmaW5lQ3VzdG9tU3RyaW5nVmFy aWFibGUoInBnX3BsYW5fYWR2aWNlLmFkdmljZSIsCisJCQkJCQkJICAgImFkdmljZSB0byBhcHBs eSBkdXJpbmcgcXVlcnkgcGxhbm5pbmciLAorCQkJCQkJCSAgIE5VTEwsCisJCQkJCQkJICAgJnBn X3BsYW5fYWR2aWNlX2FkdmljZSwKKwkJCQkJCQkgICBOVUxMLAorCQkJCQkJCSAgIFBHQ19VU0VS U0VULAorCQkJCQkJCSAgIDAsCisJCQkJCQkJICAgcGdfcGxhbl9hZHZpY2VfYWR2aWNlX2NoZWNr X2hvb2ssCisJCQkJCQkJICAgTlVMTCwKKwkJCQkJCQkgICBOVUxMKTsKKworCURlZmluZUN1c3Rv bUJvb2xWYXJpYWJsZSgicGdfcGxhbl9hZHZpY2UuYWx3YXlzX2V4cGxhaW5fc3VwcGxpZWRfYWR2 aWNlIiwKKwkJCQkJCQkgIkVYUExBSU4gb3V0cHV0IGluY2x1ZGVzIHN1cHBsaWVkIGFkdmljZSBl dmVuIHdpdGhvdXQgRVhQTEFJTiAoUExBTl9BRFZJQ0UpIiwKKwkJCQkJCQkgTlVMTCwKKwkJCQkJ CQkgJnBnX3BsYW5fYWR2aWNlX2Fsd2F5c19leHBsYWluX3N1cHBsaWVkX2FkdmljZSwKKwkJCQkJ CQkgdHJ1ZSwKKwkJCQkJCQkgUEdDX1VTRVJTRVQsCisJCQkJCQkJIDAsCisJCQkJCQkJIE5VTEws CisJCQkJCQkJIE5VTEwsCisJCQkJCQkJIE5VTEwpOworCisJRGVmaW5lQ3VzdG9tQm9vbFZhcmlh YmxlKCJwZ19wbGFuX2FkdmljZS5hbHdheXNfc3RvcmVfYWR2aWNlX2RldGFpbHMiLAorCQkJCQkJ CSAiR2VuZXJhdGUgYWR2aWNlIHN0cmluZ3MgZXZlbiB3aGVuIHNlZW1pbmdseSBub3QgcmVxdWly ZWQiLAorCQkJCQkJCSAiVXNlIHRoaXMgb3B0aW9uIHRvIHNlZSBnZW5lcmF0ZWQgYWR2aWNlIGZv ciBwcmVwYXJlZCBxdWVyaWVzLiIsCisJCQkJCQkJICZwZ19wbGFuX2FkdmljZV9hbHdheXNfc3Rv cmVfYWR2aWNlX2RldGFpbHMsCisJCQkJCQkJIGZhbHNlLAorCQkJCQkJCSBQR0NfVVNFUlNFVCwK KwkJCQkJCQkgMCwKKwkJCQkJCQkgTlVMTCwKKwkJCQkJCQkgTlVMTCwKKwkJCQkJCQkgTlVMTCk7 CisKKwlEZWZpbmVDdXN0b21Cb29sVmFyaWFibGUoInBnX3BsYW5fYWR2aWNlLmZlZWRiYWNrX3dh cm5pbmdzIiwKKwkJCQkJCQkgIldhcm4gd2hlbiBzdXBwbGllZCBhZHZpY2UgZG9lcyBub3QgYXBw bHkgY2xlYW5seSIsCisJCQkJCQkJIE5VTEwsCisJCQkJCQkJICZwZ19wbGFuX2FkdmljZV9mZWVk YmFja193YXJuaW5ncywKKwkJCQkJCQkgZmFsc2UsCisJCQkJCQkJIFBHQ19VU0VSU0VULAorCQkJ CQkJCSAwLAorCQkJCQkJCSBOVUxMLAorCQkJCQkJCSBOVUxMLAorCQkJCQkJCSBOVUxMKTsKKwor CURlZmluZUN1c3RvbUJvb2xWYXJpYWJsZSgicGdfcGxhbl9hZHZpY2UudHJhY2VfbWFzayIsCisJ CQkJCQkJICJFbWl0IGRlYnVnZ2luZyBtZXNzYWdlcyBzaG93aW5nIHRoZSBjb21wdXRlZCBzdHJh dGVneSBtYXNrIGZvciBlYWNoIHJlbGF0aW9uIiwKKwkJCQkJCQkgTlVMTCwKKwkJCQkJCQkgJnBn X3BsYW5fYWR2aWNlX3RyYWNlX21hc2ssCisJCQkJCQkJIGZhbHNlLAorCQkJCQkJCSBQR0NfVVNF UlNFVCwKKwkJCQkJCQkgMCwKKwkJCQkJCQkgTlVMTCwKKwkJCQkJCQkgTlVMTCwKKwkJCQkJCQkg TlVMTCk7CisKKwlNYXJrR1VDUHJlZml4UmVzZXJ2ZWQoInBnX3BsYW5fYWR2aWNlIik7CisKKwkv KiBHZXQgYW4gSUQgdGhhdCB3ZSBjYW4gdXNlIHRvIGNhY2hlIGRhdGEgaW4gYW4gRXhwbGFpblN0 YXRlLiAqLworCWVzX2V4dGVuc2lvbl9pZCA9IEdldEV4cGxhaW5FeHRlbnNpb25JZCgicGdfcGxh bl9hZHZpY2UiKTsKKworCS8qIFJlZ2lzdGVyIHRoZSBuZXcgRVhQTEFJTiBvcHRpb25zIGltcGxl bWVudGVkIGJ5IHRoaXMgbW9kdWxlLiAqLworCVJlZ2lzdGVyRXh0ZW5zaW9uRXhwbGFpbk9wdGlv bigicGxhbl9hZHZpY2UiLAorCQkJCQkJCQkgICBwZ19wbGFuX2FkdmljZV9leHBsYWluX29wdGlv bl9oYW5kbGVyKTsKKworCS8qIEluc3RhbGwgaG9va3MgKi8KKwlwZ3BhX3BsYW5uZXJfaW5zdGFs bF9ob29rcygpOworCXByZXZfZXhwbGFpbl9wZXJfcGxhbiA9IGV4cGxhaW5fcGVyX3BsYW5faG9v azsKKwlleHBsYWluX3Blcl9wbGFuX2hvb2sgPSBwZ19wbGFuX2FkdmljZV9leHBsYWluX3Blcl9w bGFuX2hvb2s7Cit9CisKKy8qCisgKiBSZXR1cm4gYSBwb2ludGVyIHRvIGEgbWVtb3J5IGNvbnRl eHQgd2hlcmUgbG9uZy1saXZlZCBkYXRhIG1hbmFnZWQgYnkgdGhpcworICogbW9kdWxlIGNhbiBi ZSBzdG9yZWQuCisgKi8KK01lbW9yeUNvbnRleHQKK3BnX3BsYW5fYWR2aWNlX2dldF9tY3h0KHZv aWQpCit7CisJaWYgKHBncGFfbWVtb3J5X2NvbnRleHQgPT0gTlVMTCkKKwkJcGdwYV9tZW1vcnlf Y29udGV4dCA9IEFsbG9jU2V0Q29udGV4dENyZWF0ZShUb3BNZW1vcnlDb250ZXh0LAorCQkJCQkJ CQkJCQkJCSJwZ19wbGFuX2FkdmljZSIsCisJCQkJCQkJCQkJCQkJQUxMT0NTRVRfREVGQVVMVF9T SVpFUyk7CisKKwlyZXR1cm4gcGdwYV9tZW1vcnlfY29udGV4dDsKK30KKworLyoKKyAqIFdhcyB0 aGUgUExBTl9BRFZJQ0Ugb3B0aW9uIHNwZWNpZmllZCBhbmQgbm90IHNldCB0byBmYWxzZT8KKyAq LworYm9vbAorcGdfcGxhbl9hZHZpY2Vfc2hvdWxkX2V4cGxhaW4oRXhwbGFpblN0YXRlICplcykK K3sKKwlib29sCSAgICpwbGFuX2FkdmljZSA9IE5VTEw7CisKKwlpZiAoZXMgIT0gTlVMTCkKKwkJ cGxhbl9hZHZpY2UgPSBHZXRFeHBsYWluRXh0ZW5zaW9uU3RhdGUoZXMsIGVzX2V4dGVuc2lvbl9p ZCk7CisJcmV0dXJuIHBsYW5fYWR2aWNlICE9IE5VTEwgJiYgKnBsYW5fYWR2aWNlOworfQorCisv KgorICogR2V0IHRoZSBhZHZpY2UgdGhhdCBzaG91bGQgYmUgdXNlZCB3aGlsZSBwbGFubmluZyBh IHBhcnRpY3VsYXIgcXVlcnkuCisgKi8KK2NoYXIgKgorcGdfcGxhbl9hZHZpY2VfZ2V0X3N1cHBs aWVkX3F1ZXJ5X2FkdmljZShQbGFubmVyR2xvYmFsICpnbG9iLAorCQkJCQkJCQkJCSBRdWVyeSAq cGFyc2UsCisJCQkJCQkJCQkJIGNvbnN0IGNoYXIgKnF1ZXJ5X3N0cmluZywKKwkJCQkJCQkJCQkg aW50IGN1cnNvck9wdGlvbnMsCisJCQkJCQkJCQkJIEV4cGxhaW5TdGF0ZSAqZXMpCit7CisJTGlz dENlbGwgICAqbGM7CisKKwkvKgorCSAqIElmIGFueSBhZHZpc29ycyBhcmUgbG9hZGVkLCBjb25z dWx0IHRoZW0uIFRoZSBmaXJzdCBvbmUgdGhhdCBwcm9kdWNlcyBhCisJICogbm9uLU5VTEwgc3Ry aW5nIHdpbnMuCisJICovCisJZm9yZWFjaChsYywgYWR2aXNvcl9ob29rX2xpc3QpCisJeworCQlw Z19wbGFuX2FkdmljZV9hZHZpc29yX2hvb2sgaG9vayA9IGxmaXJzdChsYyk7CisJCWNoYXIJICAg KmFkdmljZV9zdHJpbmc7CisKKwkJYWR2aWNlX3N0cmluZyA9ICgqaG9vaykgKGdsb2IsIHBhcnNl LCBxdWVyeV9zdHJpbmcsIGN1cnNvck9wdGlvbnMsIGVzKTsKKwkJaWYgKGFkdmljZV9zdHJpbmcg IT0gTlVMTCkKKwkJCXJldHVybiBhZHZpY2Vfc3RyaW5nOworCX0KKworCS8qIE90aGVyd2lzZSwg anVzdCB1c2UgdGhlIHZhbHVlIG9mIHRoZSBHVUMuICovCisJcmV0dXJuIHBnX3BsYW5fYWR2aWNl X2FkdmljZTsKK30KKworLyoKKyAqIEFkZCBhbiBhZHZpc29yLCB3aGljaCBjYW4gc3VwcGx5IGFk dmljZSBzdHJpbmdzIHRvIGJlIHVzZWQgZHVyaW5nIGZ1dHVyZQorICogcXVlcnkgcGxhbm5pbmcg b3BlcmF0aW9ucy4KKyAqCisgKiBUaGUgYWR2aXNvciBzaG91bGQgcmV0dXJuIE5VTEwgaWYgaXQg aGFzIG5vIGFkdmljZSBzdHJpbmcgdG8gb2ZmZXIgZm9yIGEKKyAqIGdpdmVuIHF1ZXJ5LiBJZiBt dWx0aXBsZSBhZHZpc29ycyBhcmUgYWRkZWQsIHRoZXkgd2lsbCBiZSBjb25zdWx0ZWQgaW4gdGhl CisgKiBvcmRlciBhZGRlZCB1bnRpbCBvbmUgb2YgdGhlbSByZXR1cm5zIGEgbm9uLU5VTEwgdmFs dWUuCisgKi8KK3ZvaWQKK3BnX3BsYW5fYWR2aWNlX2FkZF9hZHZpc29yKHBnX3BsYW5fYWR2aWNl X2Fkdmlzb3JfaG9vayBob29rKQoreworCU1lbW9yeUNvbnRleHQgb2xkY29udGV4dDsKKworCW9s ZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8ocGdfcGxhbl9hZHZpY2VfZ2V0X21jeHQo KSk7CisJYWR2aXNvcl9ob29rX2xpc3QgPSBsYXBwZW5kKGFkdmlzb3JfaG9va19saXN0LCBob29r KTsKKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7Cit9CisKKy8qCisgKiBSZW1v dmUgYW4gYWR2aXNvci4KKyAqLwordm9pZAorcGdfcGxhbl9hZHZpY2VfcmVtb3ZlX2Fkdmlzb3Io cGdfcGxhbl9hZHZpY2VfYWR2aXNvcl9ob29rIGhvb2spCit7CisJTWVtb3J5Q29udGV4dCBvbGRj b250ZXh0OworCisJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhwZ19wbGFuX2Fk dmljZV9nZXRfbWN4dCgpKTsKKwlhZHZpc29yX2hvb2tfbGlzdCA9IGxpc3RfZGVsZXRlX3B0cihh ZHZpc29yX2hvb2tfbGlzdCwgaG9vayk7CisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRl eHQpOworfQorCisvKgorICogT3RoZXIgbG9hZGFibGUgbW9kdWxlcyBjYW4gdXNlIHRoaXMgZnVu Y3Rpb24gdG8gdHJpZ2dlciBhZHZpY2UgZ2VuZXJhdGlvbi4KKyAqCisgKiBDYWxsaW5nIHRoaXMg ZnVuY3Rpb24gd2l0aCBhY3RpdmF0ZSA9IHRydWUgcmVxdWVzdHMgdGhhdCBhbnkgcXVlcmllcwor ICogcGxhbm5lZCBhZnRlcndhcmRzIHNob3VsZCBnZW5lcmF0ZSBwbGFuIGFkdmljZSwgd2hpY2gg d2lsbCBiZSBzdG9yZWQgaW4gdGhlCisgKiBQbGFubmVkU3RtdC4gQ2FsbGluZyB0aGlzIGZ1bmN0 aW9uIHdpdGggYWN0aXZhdGUgPSBmYWxzZSByZXZva2VzIHRoYXQKKyAqIHJlcXVlc3QuIE11bHRp cGxlIGxvYWRhYmxlIG1vZHVsZXMgY291bGQgYmUgdXNpbmcgdGhpcyBzaW11bHRhbmVvdXNseSwg c28KKyAqIG1ha2Ugc3VyZSB0byBvbmx5IHJldm9rZSB5b3VyIG93biByZXF1ZXN0cy4KKyAqCisg KiBOb3RlIHRoYXQgeW91IGNhbid0IHVzZSB0aGlzIGZ1bmN0aW9uIHRvICpzdXBwcmVzcyogYWR2 aWNlIGdlbmVyYXRpb24sCisgKiB3aGljaCBjYW4gb2NjdXIgZm9yIG90aGVyIHJlYXNvbnMsIHN1 Y2ggYXMgdGhlIHVzZSBvZiBFWFBMQUlOIChQTEFOX0FEVklDRSksCisgKiByZWdhcmRsZXNzLiBJ dCdzIGEgd2F5IG9mIHR1cm5pbmcgYWR2aWNlIGdlbmVyYXRpb24gb24sIG5vdCBhIHdheSBvZiB0 dXJuaW5nCisgKiBpdCBvZmYuCisgKi8KK3ZvaWQKK3BnX3BsYW5fYWR2aWNlX3JlcXVlc3RfYWR2 aWNlX2dlbmVyYXRpb24oYm9vbCBhY3RpdmF0ZSkKK3sKKwlpZiAoYWN0aXZhdGUpCisJCXBncGFf cGxhbm5lcl9nZW5lcmF0ZV9hZHZpY2UrKzsKKwllbHNlCisJeworCQlBc3NlcnQocGdwYV9wbGFu bmVyX2dlbmVyYXRlX2FkdmljZSA+IDApOworCQlwZ3BhX3BsYW5uZXJfZ2VuZXJhdGVfYWR2aWNl LS07CisJfQorfQorCisvKgorICogSGFuZGxlciBmb3IgRVhQTEFJTiAoUExBTl9BRFZJQ0UpLgor ICovCitzdGF0aWMgdm9pZAorcGdfcGxhbl9hZHZpY2VfZXhwbGFpbl9vcHRpb25faGFuZGxlcihF eHBsYWluU3RhdGUgKmVzLCBEZWZFbGVtICpvcHQsCisJCQkJCQkJCQkgIFBhcnNlU3RhdGUgKnBz dGF0ZSkKK3sKKwlib29sCSAgICpwbGFuX2FkdmljZTsKKworCXBsYW5fYWR2aWNlID0gR2V0RXhw bGFpbkV4dGVuc2lvblN0YXRlKGVzLCBlc19leHRlbnNpb25faWQpOworCisJaWYgKHBsYW5fYWR2 aWNlID09IE5VTEwpCisJeworCQlwbGFuX2FkdmljZSA9IHBhbGxvYzBfb2JqZWN0KGJvb2wpOwor CQlTZXRFeHBsYWluRXh0ZW5zaW9uU3RhdGUoZXMsIGVzX2V4dGVuc2lvbl9pZCwgcGxhbl9hZHZp Y2UpOworCX0KKworCSpwbGFuX2FkdmljZSA9IGRlZkdldEJvb2xlYW4ob3B0KTsKK30KKworLyoK KyAqIERpc3BsYXkgYSBzdHJpbmcgdGhhdCBpcyBsaWtlbHkgdG8gY29uc2lzdCBvZiBtdWx0aXBs ZSBsaW5lcyBpbiBFWFBMQUlOCisgKiBvdXRwdXQuCisgKi8KK3N0YXRpYyB2b2lkCitwZ19wbGFu X2FkdmljZV9leHBsYWluX3RleHRfbXVsdGlsaW5lKEV4cGxhaW5TdGF0ZSAqZXMsIGNoYXIgKnFs YWJlbCwKKwkJCQkJCQkJCSAgY2hhciAqdmFsdWUpCit7CisJY2hhcgkgICAqczsKKworCS8qIEZv ciBub24tdGV4dCBmb3JtYXRzLCBpdCdzIGJlc3Qgbm90IHRvIGFkZCBhbnkgc3BlY2lhbCBoYW5k bGluZy4gKi8KKwlpZiAoZXMtPmZvcm1hdCAhPSBFWFBMQUlOX0ZPUk1BVF9URVhUKQorCXsKKwkJ RXhwbGFpblByb3BlcnR5VGV4dChxbGFiZWwsIHZhbHVlLCBlcyk7CisJCXJldHVybjsKKwl9CisK KwkvKiBJbiB0ZXh0IGZvcm1hdCwgaWYgdGhlcmUgaXMgbm8gZGF0YSwgZGlzcGxheSBub3RoaW5n LiAqLworCWlmICgqdmFsdWUgPT0gJ1wwJykKKwkJcmV0dXJuOworCisJLyoKKwkgKiBJdCBsb29r cyBuaWNlc3QgdG8gaW5kZW50IGVhY2ggbGluZSBvZiB0aGUgYWR2aWNlIHNlcGFyYXRlbHksIGJl Z2lubmluZworCSAqIG9uIHRoZSBsaW5lIGJlbG93IHRoZSBsYWJlbC4KKwkgKi8KKwlFeHBsYWlu SW5kZW50VGV4dChlcyk7CisJYXBwZW5kU3RyaW5nSW5mbyhlcy0+c3RyLCAiJXM6XG4iLCBxbGFi ZWwpOworCWVzLT5pbmRlbnQrKzsKKwl3aGlsZSAoKHMgPSBzdHJjaHIodmFsdWUsICdcbicpKSAh PSBOVUxMKQorCXsKKwkJRXhwbGFpbkluZGVudFRleHQoZXMpOworCQlhcHBlbmRCaW5hcnlTdHJp bmdJbmZvKGVzLT5zdHIsIHZhbHVlLCAocyAtIHZhbHVlKSArIDEpOworCQl2YWx1ZSA9IHMgKyAx OworCX0KKworCS8qIERvbid0IGludGVycHJldCBhIHRlcm1pbmFsIG5ld2xpbmUgYXMgYSByZXF1 ZXN0IGZvciBhbiBlbXB0eSBsaW5lLiAqLworCWlmICgqdmFsdWUgIT0gJ1wwJykKKwl7CisJCUV4 cGxhaW5JbmRlbnRUZXh0KGVzKTsKKwkJYXBwZW5kU3RyaW5nSW5mbyhlcy0+c3RyLCAiJXNcbiIs IHZhbHVlKTsKKwl9CisKKwllcy0+aW5kZW50LS07Cit9CisKKy8qCisgKiBBZGQgYWR2aWNlIGZl ZWRiYWNrIHRvIHRoZSBFWFBMQUlOIG91dHB1dC4KKyAqLworc3RhdGljIHZvaWQKK3BnX3BsYW5f YWR2aWNlX2V4cGxhaW5fZmVlZGJhY2soRXhwbGFpblN0YXRlICplcywgTGlzdCAqZmVlZGJhY2sp Cit7CisJU3RyaW5nSW5mb0RhdGEgYnVmOworCisJaW5pdFN0cmluZ0luZm8oJmJ1Zik7CisJZm9y ZWFjaF9ub2RlKERlZkVsZW0sIGl0ZW0sIGZlZWRiYWNrKQorCXsKKwkJaW50CQkJZmxhZ3MgPSBk ZWZHZXRJbnQzMihpdGVtKTsKKworCQlhcHBlbmRTdHJpbmdJbmZvKCZidWYsICIlcyAvKiAiLCBp dGVtLT5kZWZuYW1lKTsKKwkJcGdwYV90cm92ZV9hcHBlbmRfZmxhZ3MoJmJ1ZiwgZmxhZ3MpOwor CQlhcHBlbmRTdHJpbmdJbmZvKCZidWYsICIgKi9cbiIpOworCX0KKworCXBnX3BsYW5fYWR2aWNl X2V4cGxhaW5fdGV4dF9tdWx0aWxpbmUoZXMsICJTdXBwbGllZCBQbGFuIEFkdmljZSIsCisJCQkJ CQkJCQkJICBidWYuZGF0YSk7Cit9CisKKy8qCisgKiBBZGQgcmVsZXZhbnQgZGV0YWlscywgaWYg YW55LCB0byB0aGUgRVhQTEFJTiBvdXRwdXQgZm9yIGEgc2luZ2xlIHBsYW4uCisgKi8KK3N0YXRp YyB2b2lkCitwZ19wbGFuX2FkdmljZV9leHBsYWluX3Blcl9wbGFuX2hvb2soUGxhbm5lZFN0bXQg KnBsYW5uZWRzdG10LAorCQkJCQkJCQkJIEludG9DbGF1c2UgKmludG8sCisJCQkJCQkJCQkgRXhw bGFpblN0YXRlICplcywKKwkJCQkJCQkJCSBjb25zdCBjaGFyICpxdWVyeVN0cmluZywKKwkJCQkJ CQkJCSBQYXJhbUxpc3RJbmZvIHBhcmFtcywKKwkJCQkJCQkJCSBRdWVyeUVudmlyb25tZW50ICpx dWVyeUVudikKK3sKKwlib29sCQlzaG91bGRfZXhwbGFpbjsKKwlEZWZFbGVtICAgICpwZ3BhX2l0 ZW07CisJTGlzdAkgICAqcGdwYV9saXN0OworCisJaWYgKHByZXZfZXhwbGFpbl9wZXJfcGxhbikK KwkJcHJldl9leHBsYWluX3Blcl9wbGFuKHBsYW5uZWRzdG10LCBpbnRvLCBlcywgcXVlcnlTdHJp bmcsIHBhcmFtcywKKwkJCQkJCQkgIHF1ZXJ5RW52KTsKKworCS8qIFNob3VsZCBhbiBhZHZpY2Ug c3RyaW5nIGJlIHBhcnQgb2YgdGhlIEVYUExBSU4gb3V0cHV0PyAqLworCXNob3VsZF9leHBsYWlu ID0gcGdfcGxhbl9hZHZpY2Vfc2hvdWxkX2V4cGxhaW4oZXMpOworCisJLyogRmluZCBhbnkgZGF0 YSBwZ3BhX3BsYW5uZXJfc2h1dGRvd24gc3Rhc2hlZCBpbiB0aGUgUGxhbm5lZFN0bXQuICovCisJ cGdwYV9pdGVtID0gZmluZF9kZWZlbGVtX2J5X2RlZm5hbWUocGxhbm5lZHN0bXQtPmV4dGVuc2lv bl9zdGF0ZSwKKwkJCQkJCQkJCQkicGdfcGxhbl9hZHZpY2UiKTsKKwlwZ3BhX2xpc3QgPSBwZ3Bh X2l0ZW0gPT0gTlVMTCA/IE5VTEwgOiAoTGlzdCAqKSBwZ3BhX2l0ZW0tPmFyZzsKKworCS8qCisJ ICogQnkgZGVmYXVsdCwgaWYgdGhlcmUgaXMgYSByZWNvcmQgb2YgYXR0ZW1wdGluZyB0byBhcHBs eSBhZHZpY2UgZHVyaW5nCisJICogcXVlcnkgcGxhbm5pbmcsIHdlIGFsd2F5cyBvdXRwdXQgdGhh dCBpbmZvcm1hdGlvbiwgYnV0IHRoZSB1c2VyIGNhbiBzZXQKKwkgKiBwZ19wbGFuX2FkdmljZS5h bHdheXNfZXhwbGFpbl9zdXBwbGllZF9hZHZpY2UgPSBmYWxzZSB0byBzdXBwcmVzcyB0aGF0CisJ ICogYmVoYXZpb3IuIElmIHRoZXkgZG8sIHdlJ2xsIG9ubHkgZGlzcGxheSBpdCB3aGVuIHRoZSBQ TEFOX0FEVklDRSBvcHRpb24KKwkgKiB3YXMgc3BlY2lmaWVkIGFuZCBub3Qgc2V0IHRvIGZhbHNl LgorCSAqCisJICogTkI6IElmIHdlJ3JlIGV4cGxhaW5pbmcgYSBxdWVyeSBwbGFubmVkIGJlZm9y ZWhhbmQgLS0gaS5lLiBhIHByZXBhcmVkCisJICogc3RhdGVtZW50IC0tIHRoZSBhcHBsaWNhdGlv biBvZiBxdWVyeSBhZHZpY2UgbWF5IG5vdCBoYXZlIGJlZW4KKwkgKiByZWNvcmRlZCwgYW5kIHRo ZXJlZm9yZSB0aGlzIHdvbid0IGJlIGFibGUgdG8gc2hvdyBhbnl0aGluZy4gVXNlCisJICogcGdf cGxhbl9hZHZpY2UuYWx3YXlzX3N0b3JlX2FkdmljZV9kZXRhaWxzID0gdHJ1ZSB0byB3b3JrIGFy b3VuZCB0aGlzLgorCSAqLworCWlmIChwZ3BhX2xpc3QgIT0gTlVMTCAmJiAocGdfcGxhbl9hZHZp Y2VfYWx3YXlzX2V4cGxhaW5fc3VwcGxpZWRfYWR2aWNlIHx8CisJCQkJCQkJICBzaG91bGRfZXhw bGFpbikpCisJeworCQlEZWZFbGVtICAgICpmZWVkYmFjazsKKworCQlmZWVkYmFjayA9IGZpbmRf ZGVmZWxlbV9ieV9kZWZuYW1lKHBncGFfbGlzdCwgImZlZWRiYWNrIik7CisJCWlmIChmZWVkYmFj ayAhPSBOVUxMKQorCQkJcGdfcGxhbl9hZHZpY2VfZXhwbGFpbl9mZWVkYmFjayhlcywgKExpc3Qg KikgZmVlZGJhY2stPmFyZyk7CisJfQorCisJLyoKKwkgKiBJZiB0aGUgUExBTl9BRFZJQ0Ugb3B0 aW9uIHdhcyBzcGVjaWZpZWQgLS0gYW5kIG5vdCBzZXQgdG8gRkFMU0UgLS0KKwkgKiBzaG93IGdl bmVyYXRlZCBhZHZpY2UuCisJICovCisJaWYgKHNob3VsZF9leHBsYWluKQorCXsKKwkJRGVmRWxl bSAgICAqYWR2aWNlX3N0cmluZ19pdGVtOworCQljaGFyCSAgICphZHZpY2Vfc3RyaW5nID0gTlVM TDsKKworCQlhZHZpY2Vfc3RyaW5nX2l0ZW0gPQorCQkJZmluZF9kZWZlbGVtX2J5X2RlZm5hbWUo cGdwYV9saXN0LCAiYWR2aWNlX3N0cmluZyIpOworCQlpZiAoYWR2aWNlX3N0cmluZ19pdGVtICE9 IE5VTEwpCisJCXsKKwkJCWFkdmljZV9zdHJpbmcgPSBzdHJWYWwoYWR2aWNlX3N0cmluZ19pdGVt LT5hcmcpOworCQkJcGdfcGxhbl9hZHZpY2VfZXhwbGFpbl90ZXh0X211bHRpbGluZShlcywgIkdl bmVyYXRlZCBQbGFuIEFkdmljZSIsCisJCQkJCQkJCQkJCQkgIGFkdmljZV9zdHJpbmcpOworCQl9 CisJfQorfQorCisvKgorICogQ2hlY2sgaG9vayBmb3IgcGdfcGxhbl9hZHZpY2UuYWR2aWNlCisg Ki8KK3N0YXRpYyBib29sCitwZ19wbGFuX2FkdmljZV9hZHZpY2VfY2hlY2tfaG9vayhjaGFyICoq bmV3dmFsLCB2b2lkICoqZXh0cmEsIEd1Y1NvdXJjZSBzb3VyY2UpCit7CisJTWVtb3J5Q29udGV4 dCBvbGRjb250ZXh0OworCU1lbW9yeUNvbnRleHQgdG1wY29udGV4dDsKKwljaGFyCSAgICplcnJv cjsKKworCWlmICgqbmV3dmFsID09IE5VTEwpCisJCXJldHVybiB0cnVlOworCisJdG1wY29udGV4 dCA9IEFsbG9jU2V0Q29udGV4dENyZWF0ZShDdXJyZW50TWVtb3J5Q29udGV4dCwKKwkJCQkJCQkJ CSAgICJwZ19wbGFuX2FkdmljZS5hZHZpY2UiLAorCQkJCQkJCQkJICAgQUxMT0NTRVRfREVGQVVM VF9TSVpFUyk7CisJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyh0bXBjb250ZXh0 KTsKKworCS8qCisJICogSXQgd291bGQgYmUgbmljZSB0byBzYXZlIHRoZSBwYXJzZSB0cmVlIHRo YXQgd2UgY29uc3RydWN0IGhlcmUgZm9yCisJICogZXZlbnR1YWwgdXNlIHdoZW4gcGxhbm5pbmcg d2l0aCB0aGlzIGFkdmljZSwgYnV0ICpleHRyYSBjYW4gb25seSBwb2ludAorCSAqIHRvIGEgc2lu Z2xlIGd1Y19tYWxsb2MnZCBjaHVuaywgYW5kIG91ciBwYXJzZSB0cmVlIGludm9sdmVzIGFuCisJ ICogYXJiaXRyYXJ5IG51bWJlciBvZiBtZW1vcnkgYWxsb2NhdGlvbnMuCisJICovCisJKHZvaWQp IHBncGFfcGFyc2UoKm5ld3ZhbCwgJmVycm9yKTsKKworCWlmIChlcnJvciAhPSBOVUxMKQorCQlH VUNfY2hlY2tfZXJyZGV0YWlsKCJDb3VsZCBub3QgcGFyc2UgYWR2aWNlOiAlcyIsIGVycm9yKTsK KworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKKwlNZW1vcnlDb250ZXh0RGVs ZXRlKHRtcGNvbnRleHQpOworCisJcmV0dXJuIChlcnJvciA9PSBOVUxMKTsKK30KKworLyoKKyAq IFNlYXJjaCBhIGxpc3Qgb2YgRGVmRWxlbSBvYmplY3RzIGZvciBhIGdpdmVuIGRlZm5hbWUuCisg Ki8KK3N0YXRpYyBEZWZFbGVtICoKK2ZpbmRfZGVmZWxlbV9ieV9kZWZuYW1lKExpc3QgKmRlZmxp c3QsIGNoYXIgKmRlZm5hbWUpCit7CisJZm9yZWFjaF9ub2RlKERlZkVsZW0sIGl0ZW0sIGRlZmxp c3QpCisJeworCQlpZiAoc3RyY21wKGl0ZW0tPmRlZm5hbWUsIGRlZm5hbWUpID09IDApCisJCQly ZXR1cm4gaXRlbTsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIv cGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UuaCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uv cGdfcGxhbl9hZHZpY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u NzQ5MzMxYjZiOGEKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3Bn X3BsYW5fYWR2aWNlLmgKQEAgLTAsMCArMSw0NSBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgor ICogcGdfcGxhbl9hZHZpY2UuaAorICoJICBtYWluIGhlYWRlciBmaWxlIGZvciBwZ19wbGFuX2Fk dmljZSBjb250cmliIG1vZHVsZQorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNi0yMDI2LCBQb3N0 Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqCSAgY29udHJpYi9wZ19wbGFu X2FkdmljZS9wZ19wbGFuX2FkdmljZS5oCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNp Zm5kZWYgUEdfUExBTl9BRFZJQ0VfSAorI2RlZmluZSBQR19QTEFOX0FEVklDRV9ICisKKyNpbmNs dWRlICJjb21tYW5kcy9leHBsYWluX3N0YXRlLmgiCisjaW5jbHVkZSAibm9kZXMvcGF0aG5vZGVz LmgiCisKKy8qIEhvb2sgZm9yIG90aGVyIHBsdWdpbnMgdG8gc3VwcGx5IGFkdmljZSBzdHJpbmdz ICovCit0eXBlZGVmIGNoYXIgKigqcGdfcGxhbl9hZHZpY2VfYWR2aXNvcl9ob29rKSAoUGxhbm5l ckdsb2JhbCAqZ2xvYiwKKwkJCQkJCQkJCQkJICBRdWVyeSAqcGFyc2UsCisJCQkJCQkJCQkJCSAg Y29uc3QgY2hhciAqcXVlcnlfc3RyaW5nLAorCQkJCQkJCQkJCQkgIGludCBjdXJzb3JPcHRpb25z LAorCQkJCQkJCQkJCQkgIEV4cGxhaW5TdGF0ZSAqZXMpOworCisvKiBHVUMgdmFyaWFibGVzICov CitleHRlcm4gY2hhciAqcGdfcGxhbl9hZHZpY2VfYWR2aWNlOworZXh0ZXJuIGJvb2wgcGdfcGxh bl9hZHZpY2VfYWx3YXlzX3N0b3JlX2FkdmljZV9kZXRhaWxzOworZXh0ZXJuIGJvb2wgcGdfcGxh bl9hZHZpY2VfZmVlZGJhY2tfd2FybmluZ3M7CitleHRlcm4gYm9vbCBwZ19wbGFuX2FkdmljZV90 cmFjZV9tYXNrOworCisvKiBGdW5jdGlvbiBwcm90b3R5cGVzIChmb3IgdXNlIGJ5IHBnX3BsYW5f YWR2aWNlIGl0c2VsZikgKi8KK2V4dGVybiBNZW1vcnlDb250ZXh0IHBnX3BsYW5fYWR2aWNlX2dl dF9tY3h0KHZvaWQpOworZXh0ZXJuIGJvb2wgcGdfcGxhbl9hZHZpY2Vfc2hvdWxkX2V4cGxhaW4o RXhwbGFpblN0YXRlICplcyk7CitleHRlcm4gY2hhciAqcGdfcGxhbl9hZHZpY2VfZ2V0X3N1cHBs aWVkX3F1ZXJ5X2FkdmljZShQbGFubmVyR2xvYmFsICpnbG9iLAorCQkJCQkJCQkJCQkJCSAgUXVl cnkgKnBhcnNlLAorCQkJCQkJCQkJCQkJCSAgY29uc3QgY2hhciAqcXVlcnlfc3RyaW5nLAorCQkJ CQkJCQkJCQkJCSAgaW50IGN1cnNvck9wdGlvbnMsCisJCQkJCQkJCQkJCQkJICBFeHBsYWluU3Rh dGUgKmVzKTsKKworLyogRnVuY3Rpb24gcHJvdG90eXBlcyAoZm9yIHVzZSBieSBvdGhlciBwbHVn aW5zKSAqLworZXh0ZXJuIFBHRExMRVhQT1JUIHZvaWQgcGdfcGxhbl9hZHZpY2VfYWRkX2Fkdmlz b3IocGdfcGxhbl9hZHZpY2VfYWR2aXNvcl9ob29rIGhvb2spOworZXh0ZXJuIFBHRExMRVhQT1JU IHZvaWQgcGdfcGxhbl9hZHZpY2VfcmVtb3ZlX2Fkdmlzb3IocGdfcGxhbl9hZHZpY2VfYWR2aXNv cl9ob29rIGhvb2spOworZXh0ZXJuIFBHRExMRVhQT1JUIHZvaWQgcGdfcGxhbl9hZHZpY2VfcmVx dWVzdF9hZHZpY2VfZ2VuZXJhdGlvbihib29sIGFjdGl2YXRlKTsKKworI2VuZGlmCmRpZmYgLS1n aXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfYXN0LmMgYi9jb250cmliL3BnX3BsYW5f YWR2aWNlL3BncGFfYXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu LmY0ZmE2YTYyNmQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9w Z3BhX2FzdC5jCkBAIC0wLDAgKzEsMzUxIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBw Z3BhX2FzdC5jCisgKgkgIGFkZGl0aW9uYWwgc3VwcG9ydGluZyBjb2RlIHJlbGF0ZWQgdG8gcGxh biBhZHZpY2UgcGFyc2luZworICoKKyAqIENvcHlyaWdodCAoYykgMjAxNi0yMDI2LCBQb3N0Z3Jl U1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqCSAgY29udHJpYi9wZ19wbGFuX2Fk dmljZS9wZ3BhX2FzdC5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworI2luY2x1ZGUg InBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJwZ3BhX2FzdC5oIgorCisjaW5jbHVkZSAiZnVuY2Fw aS5oIgorI2luY2x1ZGUgInV0aWxzL2FycmF5LmgiCisjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMu aCIKKworc3RhdGljIGJvb2wgcGdwYV9pZGVudGlmaWVyc19jb3Zlcl90YXJnZXQoaW50IG5yaWRz LCBwZ3BhX2lkZW50aWZpZXIgKnJpZHMsCisJCQkJCQkJCQkJICBwZ3BhX2FkdmljZV90YXJnZXQg KnRhcmdldCwKKwkJCQkJCQkJCQkgIGJvb2wgKnJpZHNfdXNlZCk7CisKKy8qCisgKiBHZXQgYSBD IHN0cmluZyB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBzcGVjaWZpZWQgYWR2aWNlIHRhZy4KKyAq LworY2hhciAqCitwZ3BhX2NzdHJpbmdfYWR2aWNlX3RhZyhwZ3BhX2FkdmljZV90YWdfdHlwZSBh ZHZpY2VfdGFnKQoreworCXN3aXRjaCAoYWR2aWNlX3RhZykKKwl7CisJCWNhc2UgUEdQQV9UQUdf QklUTUFQX0hFQVBfU0NBTjoKKwkJCXJldHVybiAiQklUTUFQX0hFQVBfU0NBTiI7CisJCWNhc2Ug UEdQQV9UQUdfRk9SRUlHTl9KT0lOOgorCQkJcmV0dXJuICJGT1JFSUdOX0pPSU4iOworCQljYXNl IFBHUEFfVEFHX0dBVEhFUjoKKwkJCXJldHVybiAiR0FUSEVSIjsKKwkJY2FzZSBQR1BBX1RBR19H QVRIRVJfTUVSR0U6CisJCQlyZXR1cm4gIkdBVEhFUl9NRVJHRSI7CisJCWNhc2UgUEdQQV9UQUdf SEFTSF9KT0lOOgorCQkJcmV0dXJuICJIQVNIX0pPSU4iOworCQljYXNlIFBHUEFfVEFHX0lOREVY X09OTFlfU0NBTjoKKwkJCXJldHVybiAiSU5ERVhfT05MWV9TQ0FOIjsKKwkJY2FzZSBQR1BBX1RB R19JTkRFWF9TQ0FOOgorCQkJcmV0dXJuICJJTkRFWF9TQ0FOIjsKKwkJY2FzZSBQR1BBX1RBR19K T0lOX09SREVSOgorCQkJcmV0dXJuICJKT0lOX09SREVSIjsKKwkJY2FzZSBQR1BBX1RBR19NRVJH RV9KT0lOX01BVEVSSUFMSVpFOgorCQkJcmV0dXJuICJNRVJHRV9KT0lOX01BVEVSSUFMSVpFIjsK KwkJY2FzZSBQR1BBX1RBR19NRVJHRV9KT0lOX1BMQUlOOgorCQkJcmV0dXJuICJNRVJHRV9KT0lO X1BMQUlOIjsKKwkJY2FzZSBQR1BBX1RBR19ORVNURURfTE9PUF9NQVRFUklBTElaRToKKwkJCXJl dHVybiAiTkVTVEVEX0xPT1BfTUFURVJJQUxJWkUiOworCQljYXNlIFBHUEFfVEFHX05FU1RFRF9M T09QX01FTU9JWkU6CisJCQlyZXR1cm4gIk5FU1RFRF9MT09QX01FTU9JWkUiOworCQljYXNlIFBH UEFfVEFHX05FU1RFRF9MT09QX1BMQUlOOgorCQkJcmV0dXJuICJORVNURURfTE9PUF9QTEFJTiI7 CisJCWNhc2UgUEdQQV9UQUdfTk9fR0FUSEVSOgorCQkJcmV0dXJuICJOT19HQVRIRVIiOworCQlj YXNlIFBHUEFfVEFHX1BBUlRJVElPTldJU0U6CisJCQlyZXR1cm4gIlBBUlRJVElPTldJU0UiOwor CQljYXNlIFBHUEFfVEFHX1NFTUlKT0lOX05PTl9VTklRVUU6CisJCQlyZXR1cm4gIlNFTUlKT0lO X05PTl9VTklRVUUiOworCQljYXNlIFBHUEFfVEFHX1NFTUlKT0lOX1VOSVFVRToKKwkJCXJldHVy biAiU0VNSUpPSU5fVU5JUVVFIjsKKwkJY2FzZSBQR1BBX1RBR19TRVFfU0NBTjoKKwkJCXJldHVy biAiU0VRX1NDQU4iOworCQljYXNlIFBHUEFfVEFHX1RJRF9TQ0FOOgorCQkJcmV0dXJuICJUSURf U0NBTiI7CisJfQorCisJcGdfdW5yZWFjaGFibGUoKTsKKwlyZXR1cm4gTlVMTDsKK30KKworLyoK KyAqIENvbnZlcnQgYW4gYWR2aWNlIHRhZywgZm9ybWF0dGVkIGFzIGEgc3RyaW5nIHRoYXQgaGFz IGFscmVhZHkgYmVlbgorICogZG93bmNhc2VkIGFzIGFwcHJvcHJpYXRlLCB0byBhIHBncGFfYWR2 aWNlX3RhZ190eXBlLgorICoKKyAqIElmIHdlIHN1Y2NlZWQsIHNldCAqZmFpbCA9IGZhbHNlIGFu ZCByZXR1cm4gdGhlIHJlc3VsdDsgaWYgd2UgZmFpbCwKKyAqIHNldCAqZmFpbCA9IHRydWUgYW5k IHJldHVybiBhbiBhcmJpdHJhcnkgdmFsdWUuCisgKi8KK3BncGFfYWR2aWNlX3RhZ190eXBlCitw Z3BhX3BhcnNlX2FkdmljZV90YWcoY29uc3QgY2hhciAqdGFnLCBib29sICpmYWlsKQoreworCSpm YWlsID0gZmFsc2U7CisKKwlzd2l0Y2ggKHRhZ1swXSkKKwl7CisJCWNhc2UgJ2InOgorCQkJaWYg KHN0cmNtcCh0YWcsICJiaXRtYXBfaGVhcF9zY2FuIikgPT0gMCkKKwkJCQlyZXR1cm4gUEdQQV9U QUdfQklUTUFQX0hFQVBfU0NBTjsKKwkJCWJyZWFrOworCQljYXNlICdmJzoKKwkJCWlmIChzdHJj bXAodGFnLCAiZm9yZWlnbl9qb2luIikgPT0gMCkKKwkJCQlyZXR1cm4gUEdQQV9UQUdfRk9SRUlH Tl9KT0lOOworCQkJYnJlYWs7CisJCWNhc2UgJ2cnOgorCQkJaWYgKHN0cmNtcCh0YWcsICJnYXRo ZXIiKSA9PSAwKQorCQkJCXJldHVybiBQR1BBX1RBR19HQVRIRVI7CisJCQlpZiAoc3RyY21wKHRh ZywgImdhdGhlcl9tZXJnZSIpID09IDApCisJCQkJcmV0dXJuIFBHUEFfVEFHX0dBVEhFUl9NRVJH RTsKKwkJCWJyZWFrOworCQljYXNlICdoJzoKKwkJCWlmIChzdHJjbXAodGFnLCAiaGFzaF9qb2lu IikgPT0gMCkKKwkJCQlyZXR1cm4gUEdQQV9UQUdfSEFTSF9KT0lOOworCQkJYnJlYWs7CisJCWNh c2UgJ2knOgorCQkJaWYgKHN0cmNtcCh0YWcsICJpbmRleF9zY2FuIikgPT0gMCkKKwkJCQlyZXR1 cm4gUEdQQV9UQUdfSU5ERVhfU0NBTjsKKwkJCWlmIChzdHJjbXAodGFnLCAiaW5kZXhfb25seV9z Y2FuIikgPT0gMCkKKwkJCQlyZXR1cm4gUEdQQV9UQUdfSU5ERVhfT05MWV9TQ0FOOworCQkJYnJl YWs7CisJCWNhc2UgJ2onOgorCQkJaWYgKHN0cmNtcCh0YWcsICJqb2luX29yZGVyIikgPT0gMCkK KwkJCQlyZXR1cm4gUEdQQV9UQUdfSk9JTl9PUkRFUjsKKwkJCWJyZWFrOworCQljYXNlICdtJzoK KwkJCWlmIChzdHJjbXAodGFnLCAibWVyZ2Vfam9pbl9tYXRlcmlhbGl6ZSIpID09IDApCisJCQkJ cmV0dXJuIFBHUEFfVEFHX01FUkdFX0pPSU5fTUFURVJJQUxJWkU7CisJCQlpZiAoc3RyY21wKHRh ZywgIm1lcmdlX2pvaW5fcGxhaW4iKSA9PSAwKQorCQkJCXJldHVybiBQR1BBX1RBR19NRVJHRV9K T0lOX1BMQUlOOworCQkJYnJlYWs7CisJCWNhc2UgJ24nOgorCQkJaWYgKHN0cmNtcCh0YWcsICJu ZXN0ZWRfbG9vcF9tYXRlcmlhbGl6ZSIpID09IDApCisJCQkJcmV0dXJuIFBHUEFfVEFHX05FU1RF RF9MT09QX01BVEVSSUFMSVpFOworCQkJaWYgKHN0cmNtcCh0YWcsICJuZXN0ZWRfbG9vcF9tZW1v aXplIikgPT0gMCkKKwkJCQlyZXR1cm4gUEdQQV9UQUdfTkVTVEVEX0xPT1BfTUVNT0laRTsKKwkJ CWlmIChzdHJjbXAodGFnLCAibmVzdGVkX2xvb3BfcGxhaW4iKSA9PSAwKQorCQkJCXJldHVybiBQ R1BBX1RBR19ORVNURURfTE9PUF9QTEFJTjsKKwkJCWlmIChzdHJjbXAodGFnLCAibm9fZ2F0aGVy IikgPT0gMCkKKwkJCQlyZXR1cm4gUEdQQV9UQUdfTk9fR0FUSEVSOworCQkJYnJlYWs7CisJCWNh c2UgJ3AnOgorCQkJaWYgKHN0cmNtcCh0YWcsICJwYXJ0aXRpb253aXNlIikgPT0gMCkKKwkJCQly ZXR1cm4gUEdQQV9UQUdfUEFSVElUSU9OV0lTRTsKKwkJCWJyZWFrOworCQljYXNlICdzJzoKKwkJ CWlmIChzdHJjbXAodGFnLCAic2VtaWpvaW5fbm9uX3VuaXF1ZSIpID09IDApCisJCQkJcmV0dXJu IFBHUEFfVEFHX1NFTUlKT0lOX05PTl9VTklRVUU7CisJCQlpZiAoc3RyY21wKHRhZywgInNlbWlq b2luX3VuaXF1ZSIpID09IDApCisJCQkJcmV0dXJuIFBHUEFfVEFHX1NFTUlKT0lOX1VOSVFVRTsK KwkJCWlmIChzdHJjbXAodGFnLCAic2VxX3NjYW4iKSA9PSAwKQorCQkJCXJldHVybiBQR1BBX1RB R19TRVFfU0NBTjsKKwkJCWJyZWFrOworCQljYXNlICd0JzoKKwkJCWlmIChzdHJjbXAodGFnLCAi dGlkX3NjYW4iKSA9PSAwKQorCQkJCXJldHVybiBQR1BBX1RBR19USURfU0NBTjsKKwkJCWJyZWFr OworCX0KKworCS8qIGRpZG4ndCB3b3JrIG91dCAqLworCSpmYWlsID0gdHJ1ZTsKKworCS8qIHJl dHVybiBhbiBhcmJpdHJhcnkgdmFsdWUgdG8gdW53aW5kIHRoZSBjYWxsIHN0YWNrICovCisJcmV0 dXJuIFBHUEFfVEFHX1NFUV9TQ0FOOworfQorCisvKgorICogRm9ybWF0IGEgcGdwYV9hZHZpY2Vf dGFyZ2V0IGFzIGEgc3RyaW5nIGFuZCBhcHBlbmQgcmVzdWx0IHRvIGEgU3RyaW5nSW5mby4KKyAq Lwordm9pZAorcGdwYV9mb3JtYXRfYWR2aWNlX3RhcmdldChTdHJpbmdJbmZvIHN0ciwgcGdwYV9h ZHZpY2VfdGFyZ2V0ICp0YXJnZXQpCit7CisJaWYgKHRhcmdldC0+dHR5cGUgIT0gUEdQQV9UQVJH RVRfSURFTlRJRklFUikKKwl7CisJCWJvb2wJCWZpcnN0ID0gdHJ1ZTsKKwkJY2hhcgkgICAqZGVs aW1zOworCisJCWlmICh0YXJnZXQtPnR0eXBlID09IFBHUEFfVEFSR0VUX1VOT1JERVJFRF9MSVNU KQorCQkJZGVsaW1zID0gInt9IjsKKwkJZWxzZQorCQkJZGVsaW1zID0gIigpIjsKKworCQlhcHBl bmRTdHJpbmdJbmZvQ2hhcihzdHIsIGRlbGltc1swXSk7CisJCWZvcmVhY2hfcHRyKHBncGFfYWR2 aWNlX3RhcmdldCwgY2hpbGRfdGFyZ2V0LCB0YXJnZXQtPmNoaWxkcmVuKQorCQl7CisJCQlpZiAo Zmlyc3QpCisJCQkJZmlyc3QgPSBmYWxzZTsKKwkJCWVsc2UKKwkJCQlhcHBlbmRTdHJpbmdJbmZv Q2hhcihzdHIsICcgJyk7CisJCQlwZ3BhX2Zvcm1hdF9hZHZpY2VfdGFyZ2V0KHN0ciwgY2hpbGRf dGFyZ2V0KTsKKwkJfQorCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihzdHIsIGRlbGltc1sxXSk7CisJ fQorCWVsc2UKKwl7CisJCWNvbnN0IGNoYXIgKnJ0X2lkZW50aWZpZXI7CisKKwkJcnRfaWRlbnRp ZmllciA9IHBncGFfaWRlbnRpZmllcl9zdHJpbmcoJnRhcmdldC0+cmlkKTsKKwkJYXBwZW5kU3Ry aW5nSW5mb1N0cmluZyhzdHIsIHJ0X2lkZW50aWZpZXIpOworCX0KK30KKworLyoKKyAqIEZvcm1h dCBhIHBncGFfaW5kZXhfdGFyZ2V0IGFzIGEgc3RyaW5nIGFuZCBhcHBlbmQgcmVzdWx0IHRvIGEg U3RyaW5nSW5mby4KKyAqLwordm9pZAorcGdwYV9mb3JtYXRfaW5kZXhfdGFyZ2V0KFN0cmluZ0lu Zm8gc3RyLCBwZ3BhX2luZGV4X3RhcmdldCAqaXRhcmdldCkKK3sKKwlpZiAoaXRhcmdldC0+aW5k bmFtZXNwYWNlICE9IE5VTEwpCisJCWFwcGVuZFN0cmluZ0luZm8oc3RyLCAiJXMuIiwKKwkJCQkJ CSBxdW90ZV9pZGVudGlmaWVyKGl0YXJnZXQtPmluZG5hbWVzcGFjZSkpOworCWFwcGVuZFN0cmlu Z0luZm9TdHJpbmcoc3RyLCBxdW90ZV9pZGVudGlmaWVyKGl0YXJnZXQtPmluZG5hbWUpKTsKK30K KworLyoKKyAqIERldGVybWluZSB3aGV0aGVyIHR3byBwZ3BhX2luZGV4X3RhcmdldCBvYmplY3Rz IGFyZSBleGFjdGx5IGlkZW50aWNhbC4KKyAqLworYm9vbAorcGdwYV9pbmRleF90YXJnZXRzX2Vx dWFsKHBncGFfaW5kZXhfdGFyZ2V0ICppMSwgcGdwYV9pbmRleF90YXJnZXQgKmkyKQoreworCS8q IGluZG5hbWVzcGFjZSBjYW4gYmUgTlVMTCwgYW5kIHR3byBOVUxMIHZhbHVlcyBhcmUgZXF1YWwg Ki8KKwlpZiAoKGkxLT5pbmRuYW1lc3BhY2UgIT0gTlVMTCB8fCBpMi0+aW5kbmFtZXNwYWNlICE9 IE5VTEwpICYmCisJCShpMS0+aW5kbmFtZXNwYWNlID09IE5VTEwgfHwgaTItPmluZG5hbWVzcGFj ZSA9PSBOVUxMIHx8CisJCSBzdHJjbXAoaTEtPmluZG5hbWVzcGFjZSwgaTItPmluZG5hbWVzcGFj ZSkgIT0gMCkpCisJCXJldHVybiBmYWxzZTsKKwlpZiAoc3RyY21wKGkxLT5pbmRuYW1lLCBpMi0+ aW5kbmFtZSkgIT0gMCkKKwkJcmV0dXJuIGZhbHNlOworCisJcmV0dXJuIHRydWU7Cit9CisKKy8q CisgKiBDaGVjayB3aGV0aGVyIGFuIGlkZW50aWZpZXIgbWF0Y2hlcyBhbiBhbnkgcGFydCBvZiBh biBhZHZpY2UgdGFyZ2V0LgorICovCitib29sCitwZ3BhX2lkZW50aWZpZXJfbWF0Y2hlc190YXJn ZXQocGdwYV9pZGVudGlmaWVyICpyaWQsIHBncGFfYWR2aWNlX3RhcmdldCAqdGFyZ2V0KQorewor CS8qIEZvciBub24taWRlbnRpZmllcnMsIGNoZWNrIGFsbCBkZXNjZW5kYW50cy4gKi8KKwlpZiAo dGFyZ2V0LT50dHlwZSAhPSBQR1BBX1RBUkdFVF9JREVOVElGSUVSKQorCXsKKwkJZm9yZWFjaF9w dHIocGdwYV9hZHZpY2VfdGFyZ2V0LCBjaGlsZF90YXJnZXQsIHRhcmdldC0+Y2hpbGRyZW4pCisJ CXsKKwkJCWlmIChwZ3BhX2lkZW50aWZpZXJfbWF0Y2hlc190YXJnZXQocmlkLCBjaGlsZF90YXJn ZXQpKQorCQkJCXJldHVybiB0cnVlOworCQl9CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwkvKiBT dHJhaWdodGZvcndhcmQgY29tcGFyaXNvbnMgb2YgYWxpYXMgbmFtZSBhbmQgb2NjdXJyZW5jZSBu dW1iZXIuICovCisJaWYgKHN0cmNtcChyaWQtPmFsaWFzX25hbWUsIHRhcmdldC0+cmlkLmFsaWFz X25hbWUpICE9IDApCisJCXJldHVybiBmYWxzZTsKKwlpZiAocmlkLT5vY2N1cnJlbmNlICE9IHRh cmdldC0+cmlkLm9jY3VycmVuY2UpCisJCXJldHVybiBmYWxzZTsKKworCS8qCisJICogSWYgYSBy ZWxhdGlvbiBpZGVudGlmaWVyIG1lbnRpb25zIGEgcGFydGl0aW9uIG5hbWUsIGl0IHNob3VsZCBh bHNvCisJICogc3BlY2lmeSBhIHBhcnRpdGlvbiBzY2hlbWEuIEJ1dCB0aGUgdGFyZ2V0IG1heSBs ZWF2ZSB0aGUgc2NoZW1hIE5VTEwgdG8KKwkgKiBtYXRjaCBhbnl0aGluZy4KKwkgKi8KKwlBc3Nl cnQocmlkLT5wYXJ0bnNwICE9IE5VTEwgfHwgcmlkLT5wYXJ0cmVsID09IE5VTEwpOworCWlmIChy aWQtPnBhcnRuc3AgIT0gTlVMTCAmJiB0YXJnZXQtPnJpZC5wYXJ0bnNwICE9IE5VTEwgJiYKKwkJ c3RyY21wKHJpZC0+cGFydG5zcCwgdGFyZ2V0LT5yaWQucGFydG5zcCkgIT0gMCkKKwkJcmV0dXJu IGZhbHNlOworCisJLyoKKwkgKiBUaGVzZSBmaWVsZHMgY2FuIGJlIE5VTEwgb24gZWl0aGVyIHNp ZGUsIGJ1dCBOVUxMIG9ubHkgbWF0Y2hlcyBhbm90aGVyCisJICogTlVMTC4KKwkgKi8KKwlpZiAo IXN0cmluZ3NfZXF1YWxfb3JfYm90aF9udWxsKHJpZC0+cGFydHJlbCwgdGFyZ2V0LT5yaWQucGFy dHJlbCkpCisJCXJldHVybiBmYWxzZTsKKwlpZiAoIXN0cmluZ3NfZXF1YWxfb3JfYm90aF9udWxs KHJpZC0+cGxhbl9uYW1lLCB0YXJnZXQtPnJpZC5wbGFuX25hbWUpKQorCQlyZXR1cm4gZmFsc2U7 CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoKKyAqIE1hdGNoIGlkZW50aWZpZXJzIHRvIGFkdmlj ZSB0YXJnZXRzIGFuZCByZXR1cm4gYW4gZW51bSB2YWx1ZSBpbmRpY2F0aW5nCisgKiB0aGUgcmVs YXRpb25zaGlwIGJldHdlZW4gdGhlIHNldCBvZiBrZXlzIGFuZCB0aGUgc2V0IG9mIHRhcmdldHMu CisgKgorICogU2VlIHRoZSBjb21tZW50cyBmb3IgcGdwYV9pdG1fdHlwZS4KKyAqLworcGdwYV9p dG1fdHlwZQorcGdwYV9pZGVudGlmaWVyc19tYXRjaF90YXJnZXQoaW50IG5yaWRzLCBwZ3BhX2lk ZW50aWZpZXIgKnJpZHMsCisJCQkJCQkJICBwZ3BhX2FkdmljZV90YXJnZXQgKnRhcmdldCkKK3sK Kwlib29sCQlhbGxfcmlkc191c2VkID0gdHJ1ZTsKKwlib29sCQlhbnlfcmlkc191c2VkID0gZmFs c2U7CisJYm9vbAkJYWxsX3RhcmdldHNfdXNlZDsKKwlib29sCSAgICpyaWRzX3VzZWQgPSBwYWxs b2MwX2FycmF5KGJvb2wsIG5yaWRzKTsKKworCWFsbF90YXJnZXRzX3VzZWQgPQorCQlwZ3BhX2lk ZW50aWZpZXJzX2NvdmVyX3RhcmdldChucmlkcywgcmlkcywgdGFyZ2V0LCByaWRzX3VzZWQpOwor CisJZm9yIChpbnQgaSA9IDA7IGkgPCBucmlkczsgKytpKQorCXsKKwkJaWYgKHJpZHNfdXNlZFtp XSkKKwkJCWFueV9yaWRzX3VzZWQgPSB0cnVlOworCQllbHNlCisJCQlhbGxfcmlkc191c2VkID0g ZmFsc2U7CisJfQorCisJaWYgKGFsbF9yaWRzX3VzZWQpCisJeworCQlpZiAoYWxsX3RhcmdldHNf dXNlZCkKKwkJCXJldHVybiBQR1BBX0lUTV9FUVVBTDsKKwkJZWxzZQorCQkJcmV0dXJuIFBHUEFf SVRNX0tFWVNfQVJFX1NVQlNFVDsKKwl9CisJZWxzZQorCXsKKwkJaWYgKGFsbF90YXJnZXRzX3Vz ZWQpCisJCQlyZXR1cm4gUEdQQV9JVE1fVEFSR0VUU19BUkVfU1VCU0VUOworCQllbHNlIGlmIChh bnlfcmlkc191c2VkKQorCQkJcmV0dXJuIFBHUEFfSVRNX0lOVEVSU0VDVElORzsKKwkJZWxzZQor CQkJcmV0dXJuIFBHUEFfSVRNX0RJU0pPSU5UOworCX0KK30KKworLyoKKyAqIFJldHVybnMgdHJ1 ZSBpZiBldmVyeSB0YXJnZXQgb3Igc3ViLXRhcmdldCBpcyBtYXRjaGVkIGJ5IGF0IGxlYXN0IG9u ZQorICogaWRlbnRpZmllciwgYW5kIG90aGVyd2lzZSBmYWxzZS4KKyAqCisgKiBBbHNvIHNldHMg cmlkc191c2VkW2ldID0gdHJ1ZSBmb3IgZWFjaCBpZGVuaWZpZXIgdGhhdCBtYXRjaGVzIGF0IGxl YXN0IG9uZQorICogdGFyZ2V0LgorICovCitzdGF0aWMgYm9vbAorcGdwYV9pZGVudGlmaWVyc19j b3Zlcl90YXJnZXQoaW50IG5yaWRzLCBwZ3BhX2lkZW50aWZpZXIgKnJpZHMsCisJCQkJCQkJICBw Z3BhX2FkdmljZV90YXJnZXQgKnRhcmdldCwgYm9vbCAqcmlkc191c2VkKQoreworCWJvb2wJCXJl c3VsdCA9IGZhbHNlOworCisJaWYgKHRhcmdldC0+dHR5cGUgIT0gUEdQQV9UQVJHRVRfSURFTlRJ RklFUikKKwl7CisJCXJlc3VsdCA9IHRydWU7CisKKwkJZm9yZWFjaF9wdHIocGdwYV9hZHZpY2Vf dGFyZ2V0LCBjaGlsZF90YXJnZXQsIHRhcmdldC0+Y2hpbGRyZW4pCisJCXsKKwkJCWlmICghcGdw YV9pZGVudGlmaWVyc19jb3Zlcl90YXJnZXQobnJpZHMsIHJpZHMsIGNoaWxkX3RhcmdldCwKKwkJ CQkJCQkJCQkJICAgcmlkc191c2VkKSkKKwkJCQlyZXN1bHQgPSBmYWxzZTsKKwkJfQorCX0KKwll bHNlCisJeworCQlmb3IgKGludCBpID0gMDsgaSA8IG5yaWRzOyArK2kpCisJCXsKKwkJCWlmIChw Z3BhX2lkZW50aWZpZXJfbWF0Y2hlc190YXJnZXQoJnJpZHNbaV0sIHRhcmdldCkpCisJCQl7CisJ CQkJcmlkc191c2VkW2ldID0gdHJ1ZTsKKwkJCQlyZXN1bHQgPSB0cnVlOworCQkJfQorCQl9CisJ fQorCisJcmV0dXJuIHJlc3VsdDsKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZp Y2UvcGdwYV9hc3QuaCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9hc3QuaApuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uM2MzZGI4MDE5MjYKLS0tIC9kZXYvbnVs bAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfYXN0LmgKQEAgLTAsMCArMSwxODUg QEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHBncGFfYXN0LmgKKyAqCSAgYWJzdHJhY3Qg c3ludGF4IHRyZWVzIGZvciBwbGFuIGFkdmljZSwgcGx1cyBwYXJzZXIvc2Nhbm5lciBzdXBwb3J0 CisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjYsIFBvc3RncmVTUUwgR2xvYmFsIERldmVs b3BtZW50IEdyb3VwCisgKgorICoJICBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfYXN0LmgK KyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lmbmRlZiBQR1BBX0FTVF9ICisjZGVmaW5l IFBHUEFfQVNUX0gKKworI2luY2x1ZGUgInBncGFfaWRlbnRpZmllci5oIgorCisjaW5jbHVkZSAi bm9kZXMvcGdfbGlzdC5oIgorCisvKgorICogQWR2aWNlIGl0ZW1zIGdlbmVyYWxseSB0YWtlIHRo ZSBmb3JtIFNPTUVfVEFHKGl0ZW0gWy4uLl0pLCB3aGVyZSBhbiBpdGVtCisgKiBjYW4gdGFrZSB2 YXJpb3VzIGZvcm1zLiBUaGUgc2ltcGxlc3QgY2FzZSBpcyBhIHJlbGF0aW9uIGlkZW50aWZpZXIs IGJ1dAorICogc29tZSB0YWdzIGFsbG93IHN1Ymxpc3RzLCBhbmQgSk9JTl9PUkRFUigpIGFsbG93 cyBib3RoIG9yZGVyZWQgYW5kIHVub3JkZXJlZAorICogc3VibGlzdHMuCisgKi8KK3R5cGVkZWYg ZW51bQoreworCVBHUEFfVEFSR0VUX0lERU5USUZJRVIsCQkvKiByZWxhdGlvbiBpZGVudGlmaWVy ICovCisJUEdQQV9UQVJHRVRfT1JERVJFRF9MSVNULAkvKiAoaXRlbSAuLi4pICovCisJUEdQQV9U QVJHRVRfVU5PUkRFUkVEX0xJU1QJLyoge2l0ZW0gLi4ufSAqLworfSBwZ3BhX3RhcmdldF90eXBl OworCisvKgorICogQW4gaW5kZXggc3BlY2lmaWNhdGlvbi4KKyAqLwordHlwZWRlZiBzdHJ1Y3Qg cGdwYV9pbmRleF90YXJnZXQKK3sKKwkvKiBJbmRleCBzY2hlbWEgYW5kIG5hbWUgKi8KKwljaGFy CSAgICppbmRuYW1lc3BhY2U7CisJY2hhcgkgICAqaW5kbmFtZTsKK30gcGdwYV9pbmRleF90YXJn ZXQ7CisKKy8qCisgKiBBIHNpbmdsZSBpdGVtIGFib3V0IHdoaWNoIGFkdmljZSBpcyBiZWluZyBn aXZlbiwgd2hpY2ggY291bGQgYmUgZWl0aGVyCisgKiBhIHJlbGF0aW9uIGlkZW50aWZpZXIgdGhh dCB3ZSB3YW50IHRvIGJyZWFrIG91dCBpbnRvIGl0cyBjb25zdGl0dWVudCBmaWVsZHMsCisgKiBv ciBhIHN1Ymxpc3Qgb2Ygc29tZSBraW5kLgorICovCit0eXBlZGVmIHN0cnVjdCBwZ3BhX2Fkdmlj ZV90YXJnZXQKK3sKKwlwZ3BhX3RhcmdldF90eXBlIHR0eXBlOworCisJLyoKKwkgKiBUaGlzIGZp ZWxkIGlzIG1lYW5pbmdmdWwgd2hlbiB0dHlwZSBpcyBQR1BBX1RBUkdFVF9JREVOVElGSUVSLgor CSAqCisJICogQWxsIGlkZW50aWZpZXJzIG11c3QgaGF2ZSBhbiBhbGlhcyBuYW1lIGFuZCBhbiBv Y2N1cnJlbmNlIG51bWJlcjsgdGhlCisJICogcmVtYWluaW5nIGZpZWxkcyBjYW4gYmUgTlVMTC4g Tm90ZSB0aGF0IGl0J3MgcG9zc2libGUgdG8gc3BlY2lmeSBhCisJICogcGFydGl0aW9uIG5hbWUg d2l0aG91dCBhIHBhcnRpdGlvbiBzY2hlbWEsIGJ1dCBub3QgdGhlIHJldmVyc2UuCisJICovCisJ cGdwYV9pZGVudGlmaWVyIHJpZDsKKworCS8qCisJICogVGhpcyBmaWVsZCBpcyBzZXQgd2hlbiB0 dHlwZSBpcyBQR1BBX1RBUkdFVF9JREVOVElGSUVSIGFuZCB0aGUgYWR2aWNlCisJICogdGFnIGlz IFBHUEFfVEFHX0lOREVYX1NDQU4gb3IgUEdQQV9UQUdfSU5ERVhfT05MWV9TQ0FOLgorCSAqLwor CXBncGFfaW5kZXhfdGFyZ2V0ICppdGFyZ2V0OworCisJLyoKKwkgKiBXaGVuIHRoZSB0dHlwZSBp cyBQR1BBX1RBUkdFVF88YW55dGhpbmc+X0xJU1QsIHRoaXMgZmllbGQgY29udGFpbnMgYQorCSAq IGxpc3Qgb2YgYWRkaXRpb25hbCBwZ3BhX2FkdmljZV90YXJnZXQgb2JqZWN0cy4gT3RoZXJ3aXNl LCBpdCBpcyB1bnVzZWQuCisJICovCisJTGlzdAkgICAqY2hpbGRyZW47Cit9IHBncGFfYWR2aWNl X3RhcmdldDsKKworLyoKKyAqIFRoZXNlIGFyZSBhbGwgdGhlIGtpbmRzIG9mIGFkdmljZSB0aGF0 IHdlIGtub3cgaG93IHRvIHBhcnNlLiBJZiBhIGtleXdvcmQKKyAqIGlzIGZvdW5kIGF0IHRoZSB0 b3AgbGV2ZWwsIGl0IG11c3QgYmUgaW4gdGhpcyBsaXN0LgorICoKKyAqIElmIHlvdSBjaGFuZ2Ug YW55dGhpbmcgaGVyZSwgYWxzbyB1cGRhdGUgcGdwYV9wYXJzZV9hZHZpY2VfdGFnIGFuZAorICog cGdwYV9jc3RyaW5nX2FkdmljZV90YWcuCisgKi8KK3R5cGVkZWYgZW51bSBwZ3BhX2FkdmljZV90 YWdfdHlwZQoreworCVBHUEFfVEFHX0JJVE1BUF9IRUFQX1NDQU4sCisJUEdQQV9UQUdfRk9SRUlH Tl9KT0lOLAorCVBHUEFfVEFHX0dBVEhFUiwKKwlQR1BBX1RBR19HQVRIRVJfTUVSR0UsCisJUEdQ QV9UQUdfSEFTSF9KT0lOLAorCVBHUEFfVEFHX0lOREVYX09OTFlfU0NBTiwKKwlQR1BBX1RBR19J TkRFWF9TQ0FOLAorCVBHUEFfVEFHX0pPSU5fT1JERVIsCisJUEdQQV9UQUdfTUVSR0VfSk9JTl9N QVRFUklBTElaRSwKKwlQR1BBX1RBR19NRVJHRV9KT0lOX1BMQUlOLAorCVBHUEFfVEFHX05FU1RF RF9MT09QX01BVEVSSUFMSVpFLAorCVBHUEFfVEFHX05FU1RFRF9MT09QX01FTU9JWkUsCisJUEdQ QV9UQUdfTkVTVEVEX0xPT1BfUExBSU4sCisJUEdQQV9UQUdfTk9fR0FUSEVSLAorCVBHUEFfVEFH X1BBUlRJVElPTldJU0UsCisJUEdQQV9UQUdfU0VNSUpPSU5fTk9OX1VOSVFVRSwKKwlQR1BBX1RB R19TRU1JSk9JTl9VTklRVUUsCisJUEdQQV9UQUdfU0VRX1NDQU4sCisJUEdQQV9UQUdfVElEX1ND QU4KK30gcGdwYV9hZHZpY2VfdGFnX3R5cGU7CisKKy8qCisgKiBBbiBpdGVtIG9mIGFkdmljZSwg bWVhbmluZyBhIHRhZyBhbmQgdGhlIGxpc3Qgb2YgYWxsIHRhcmdldHMgdG8gd2hpY2gKKyAqIGl0 IGlzIGJlaW5nIGFwcGxpZWQuCisgKgorICogInRhcmdldHMiIGlzIGEgbGlzdCBvZiBwZ3BhX2Fk dmljZV90YXJnZXQgb2JqZWN0cy4KKyAqCisgKiBUaGUgTGlzdCByZXR1cm5lZCBmcm9tIHBncGFf eXlwYXJzZSBpcyBsaXN0IG9mIHBncGFfYWR2aWNlX2l0ZW0gb2JqZWN0cy4KKyAqLwordHlwZWRl ZiBzdHJ1Y3QgcGdwYV9hZHZpY2VfaXRlbQoreworCXBncGFfYWR2aWNlX3RhZ190eXBlIHRhZzsK KwlMaXN0CSAgICp0YXJnZXRzOworfSBwZ3BhX2FkdmljZV9pdGVtOworCisvKgorICogUmVzdWx0 IG9mIGNvbXBhcmluZyBhbiBhcnJheSBvZiBwZ3BhX3JlbGF0aW9uX2lkZW50aWZpZXIgb2JqZWN0 cyB0byBhCisgKiBwZ3BhX2FkdmljZV90YXJnZXQuCisgKgorICogUEdQQV9JVE1fRVFVQUwgbWVh bnMgYWxsIHRhcmdldHMgYXJlIG1hdGNoZWQgYnkgc29tZSBpZGVudGlmaWVyLCBhbmQKKyAqIGFs bCBpZGVudGlmaWVycyB3ZXJlIG1hdGNoZWQgdG8gYSB0YXJnZXQuCisgKgorICogUEdQQV9JVE1f S0VZU19BUkVfU1VCU0VUIG1lYW5zIHRoYXQgYWxsIGlkZW50aWZpZXJzIG1hdGNoZWQgdG8gYSB0 YXJnZXQsCisgKiBidXQgdGhlcmUgd2VyZSBsZWZ0b3ZlciB0YXJnZXRzLiBHZW5lcmFsbHksIHRo aXMgbWVhbnMgdGhhdCB0aGUgYWR2aWNlIGlzCisgKiBsb29raW5nIHRvIGFwcGx5IHRvIGFsbCBv ZiB0aGUgcmVscyB3ZSBoYXZlIHBsdXMgc29tZSBhZGRpdGlvbmFsIG9uZXMgdGhhdAorICogd2Ug ZG9uJ3QgaGF2ZS4KKyAqCisgKiBQR1BBX0lUTV9UQVJHRVRTX0FSRV9TVUJTRVQgbWVhbnMgdGhh dCBhbGwgdGFyZ2V0cyBhcmUgbWF0Y2hlZCBieQorICogaWRlbnRpZmllcnMsIGJ1dCB0aGVyZSB3 ZXJlIGxlZnRvdmVyIGlkZW50aWZpZXJzLiBHZW5lcmFsbHksIHRoaXMgbWVhbnMKKyAqIHRoYXQg dGhlIGFkdmljZSBpcyBsb29raW5nIHRvIGFwcGx5IHRvIHNvbWUgYnV0IG5vdCBhbGwgb2YgdGhl IHJlbHMgd2UgaGF2ZS4KKyAqCisgKiBQR1BBX0lUTV9JTlRFUlNFQ1RJTkcgbWVhbnMgdGhhdCBz b21lIGlkZW50aWZpZXJzIGFuZCB0YXJnZXRzIHdlcmUgbWF0Y2hlZCwKKyAqIGJ1dCBuZWl0aGVy IGFsbCBpZGVudGlmaWVycyBub3IgYWxsIHRhcmdldHMgY291bGQgYmUgbWF0Y2hlZCB0byBpdGVt cyBpbgorICogdGhlIG90aGVyIHNldC4KKyAqCisgKiBQR1BBX0lUTV9ESVNKT0lOVCBtZWFucyB0 aGF0IG5vIG1hdGNoZXMgYmV0d2VlbiBpZGVudGlmaWVycyBhbmQgdGFyZ2V0cyB3ZXJlCisgKiBm b3VuZC4KKyAqLwordHlwZWRlZiBlbnVtCit7CisJUEdQQV9JVE1fRVFVQUwsCisJUEdQQV9JVE1f S0VZU19BUkVfU1VCU0VULAorCVBHUEFfSVRNX1RBUkdFVFNfQVJFX1NVQlNFVCwKKwlQR1BBX0lU TV9JTlRFUlNFQ1RJTkcsCisJUEdQQV9JVE1fRElTSk9JTlQKK30gcGdwYV9pdG1fdHlwZTsKKwor LyogZm9yIHBncGFfc2Nhbm5lci5sIGFuZCBwZ3BhX3BhcnNlci55ICovCit1bmlvbiBZWVNUWVBF OworI2lmbmRlZiBZWV9UWVBFREVGX1lZX1NDQU5ORVJfVAorI2RlZmluZSBZWV9UWVBFREVGX1lZ X1NDQU5ORVJfVAordHlwZWRlZiB2b2lkICp5eXNjYW5fdDsKKyNlbmRpZgorCisvKiBpbiBwZ3Bh X3NjYW5uZXIubCAqLworZXh0ZXJuIGludAlwZ3BhX3l5bGV4KHVuaW9uIFlZU1RZUEUgKnl5bHZh bF9wYXJhbSwgTGlzdCAqKnJlc3VsdCwKKwkJCQkJICAgY2hhciAqKnBhcnNlX2Vycm9yX21zZ19w LCB5eXNjYW5fdCB5eXNjYW5uZXIpOworZXh0ZXJuIHZvaWQgcGdwYV95eWVycm9yKExpc3QgKipy ZXN1bHQsIGNoYXIgKipwYXJzZV9lcnJvcl9tc2dfcCwKKwkJCQkJCSB5eXNjYW5fdCB5eXNjYW5u ZXIsCisJCQkJCQkgY29uc3QgY2hhciAqbWVzc2FnZSk7CitleHRlcm4gdm9pZCBwZ3BhX3NjYW5u ZXJfaW5pdChjb25zdCBjaGFyICpzdHIsIHl5c2Nhbl90ICp5eXNjYW5uZXJwKTsKK2V4dGVybiB2 b2lkIHBncGFfc2Nhbm5lcl9maW5pc2goeXlzY2FuX3QgeXlzY2FubmVyKTsKKworLyogaW4gcGdw YV9wYXJzZXIueSAqLworZXh0ZXJuIGludAlwZ3BhX3l5cGFyc2UoTGlzdCAqKnJlc3VsdCwgY2hh ciAqKnBhcnNlX2Vycm9yX21zZ19wLAorCQkJCQkJIHl5c2Nhbl90IHl5c2Nhbm5lcik7CitleHRl cm4gTGlzdCAqcGdwYV9wYXJzZShjb25zdCBjaGFyICphZHZpY2Vfc3RyaW5nLCBjaGFyICoqZXJy b3JfcCk7CisKKy8qIGluIHBncGFfYXN0LmMgKi8KK2V4dGVybiBjaGFyICpwZ3BhX2NzdHJpbmdf YWR2aWNlX3RhZyhwZ3BhX2FkdmljZV90YWdfdHlwZSBhZHZpY2VfdGFnKTsKK2V4dGVybiBib29s IHBncGFfaWRlbnRpZmllcl9tYXRjaGVzX3RhcmdldChwZ3BhX2lkZW50aWZpZXIgKnJpZCwKKwkJ CQkJCQkJCQkgICBwZ3BhX2FkdmljZV90YXJnZXQgKnRhcmdldCk7CitleHRlcm4gcGdwYV9pdG1f dHlwZSBwZ3BhX2lkZW50aWZpZXJzX21hdGNoX3RhcmdldChpbnQgbnJpZHMsCisJCQkJCQkJCQkJ CQkgICBwZ3BhX2lkZW50aWZpZXIgKnJpZHMsCisJCQkJCQkJCQkJCQkgICBwZ3BhX2FkdmljZV90 YXJnZXQgKnRhcmdldCk7CitleHRlcm4gYm9vbCBwZ3BhX2luZGV4X3RhcmdldHNfZXF1YWwocGdw YV9pbmRleF90YXJnZXQgKmkxLAorCQkJCQkJCQkJIHBncGFfaW5kZXhfdGFyZ2V0ICppMik7Citl eHRlcm4gcGdwYV9hZHZpY2VfdGFnX3R5cGUgcGdwYV9wYXJzZV9hZHZpY2VfdGFnKGNvbnN0IGNo YXIgKnRhZywgYm9vbCAqZmFpbCk7CitleHRlcm4gdm9pZCBwZ3BhX2Zvcm1hdF9hZHZpY2VfdGFy Z2V0KFN0cmluZ0luZm8gc3RyLAorCQkJCQkJCQkJICBwZ3BhX2FkdmljZV90YXJnZXQgKnRhcmdl dCk7CitleHRlcm4gdm9pZCBwZ3BhX2Zvcm1hdF9pbmRleF90YXJnZXQoU3RyaW5nSW5mbyBzdHIs CisJCQkJCQkJCQkgcGdwYV9pbmRleF90YXJnZXQgKml0YXJnZXQpOworCisjZW5kaWYKZGlmZiAt LWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9pZGVudGlmaWVyLmMgYi9jb250cmli L3BnX3BsYW5fYWR2aWNlL3BncGFfaWRlbnRpZmllci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAwLi4wY2ZjNGFhNGY3ZQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIv cGdfcGxhbl9hZHZpY2UvcGdwYV9pZGVudGlmaWVyLmMKQEAgLTAsMCArMSw0ODEgQEAKKy8qLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorICoKKyAqIHBncGFfaWRlbnRpZmllci5jCisgKgkgIGNyZWF0ZSBhcHBy b3ByaWF0ZSBpZGVudGlmaWVycyBmb3IgcmFuZ2UgdGFibGUgZW50cmllcworICoKKyAqIFRoZSBn b2FsIG9mIHRoaXMgbW9kdWxlIGlzIHRvIGJlIGFibGUgdG8gcHJvZHVjZSBpZGVudGlmaWVycyBm b3IgcmFuZ2UKKyAqIHRhYmxlIGVudHJpZXMgdGhhdCBhcmUgdW5pcXVlLCB1bmRlcnN0YW5kYWJs ZSB0byBodW1hbiBiZWluZ3MsIGFuZAorICogYWJsZSB0byBiZSByZWNvbnN0cnVjdGVkIGR1cmlu ZyBmdXR1cmUgcGxhbm5pbmcgY3ljbGVzLiBBcyBhbgorICogZXhjZXB0aW9uLCB3ZSBkbyBub3Qg Y2FyZSBhYm91dCwgb3Igd2FudCB0byBwcm9kdWNlLCBpZGVudGlmaWVycyBmb3IKKyAqIFJURV9K T0lOIGVudHJpZXMuIFRoaXMgaXMgYmVjYXVzZSAoMSkgd2Ugd291bGQgZW5kIHVwIHdpdGggYSB0 b24gb2YKKyAqIFJURXMgd2l0aCB1bmhlbHBmdWwgbmFtZXMgbGlrZSB1bm5hbWVkX2pvaW5fMTc7 ICgyKSBub3QgYWxsIGpvaW5zIGhhdmUKKyAqIFJURXM7IGFuZCAoMykgd2UgaW50ZW5kIHRvIHJl ZmVyIHRvIGpvaW5zIGJ5IHRoZWlyIGNvbnN0aXR1ZW50IG1lbWJlcnMKKyAqIHJhdGhlciB0aGFu IGJ5IHJlZmVyZW5jZSB0byB0aGUgam9pbiBSVEUuCisgKgorICogSW4gZ2VuZXJhbCwgd2UgY29u c3RydWN0IGlkZW50aWZpZXJzIG9mIHRoZSBmb2xsb3dpbmcgZm9ybToKKyAqCisgKiBhbGlhc19u YW1lI29jY3VycmVuY2VfbnVtYmVyL2NoaWxkX3RhYmxlX25hbWVAc3VicXVlcnlfbmFtZQorICoK KyAqIEhvd2V2ZXIsIG9jY3VycmVuY2VfbnVtYmVyIGlzIG9taXR0ZWQgd2hlbiBpdCBpcyB0aGUg Zmlyc3Qgb2NjdXJyZW5jZQorICogd2l0aGluIHRoZSBzYW1lIHN1YnF1ZXJ5LCBjaGlsZF90YWJs ZV9uYW1lIGlzIG9taXR0ZWQgZm9yIHJlbGF0aW9ucyB0aGF0CisgKiBhcmUgbm90IGNoaWxkIHRh YmxlcywgYW5kIHN1YnF1ZXJ5X25hbWUgaXMgb21pdHRlZCBmb3IgdGhlIHRvcG1vc3QKKyAqIHF1 ZXJ5IGxldmVsLiBXaGVuZXZlciBhbiBpdGVtIGlzIG9taXR0ZWQsIHRoZSBwcmVjZWRpbmcgcHVu Y3R1YXRpb24gbWFyaworICogaXMgYWxzbyBvbWl0dGVkLiAgSWRlbnRpZmllci1zdHlsZSBlc2Nh cGluZyBpcyBhcHBsaWVkIHRvIGFsaWFzX25hbWUgYW5kCisgKiBzdWJxdWVyeV9uYW1lLiAgSW4g Z2VuZXJhdGVkIGFkdmljZSwgY2hpbGQgdGFibGUgbmFtZXMgYXJlIGFsd2F5cworICogc2NoZW1h LXF1YWxpZmllZCwgYnV0IHVzZXJzIGNhbiBzdXBwbHkgYWR2aWNlIHdoZXJlIHRoZSBzY2hlbWEg bmFtZSBpcworICogbm90IG1lbnRpb25lZC4gSWRlbnRpZmllci1zdHlsZSBlc2NhcGluZyBpcyBh cHBsaWVkIHRvIHRoZSBzY2hlbWEgYW5kIHRvCisgKiB0aGUgcmVsYXRpb24gbmFtZSBzZXBhcmF0 ZWx5LgorICoKKyAqIFRoZSB1cHNob3Qgb2YgYWxsIG9mIHRoZXNlIHJ1bGVzIGlzIHRoYXQgaW4g c2ltcGxlIGNhc2VzLCB0aGUgcmVsYXRpb24KKyAqIGlkZW50aWZpZXIgaXMgdGV4dHVhbGx5IGlk ZW50aWNhbCB0byB0aGUgYWxpYXMgbmFtZSwgbWFraW5nIGxpZmUgZWFzaWVyCisgKiBmb3IgdXNl cnMuIEhvd2V2ZXIsIGV2ZW4gaW4gY29tcGxleCBjYXNlcywgZXZlcnkgcmVsYXRpb24gaWRlbnRp ZmllcgorICogZm9yIGEgZ2l2ZW4gcXVlcnkgd2lsbCBiZSB1bmlxdWUgKG9yIGF0IGxlYXN0IHdl IGhvcGUgc286IGlmIG5vdCwgdGhpcworICogY29kZSBpcyBidWdneSBhbmQgdGhlIGlkZW50aWZp ZXIgZm9ybWF0IG1pZ2h0IG5lZWQgdG8gYmUgcmV0aG91Z2h0KS4KKyAqCisgKiBBIGtleSBnb2Fs IG9mIHRoaXMgc3lzdGVtIGlzIHRoYXQgd2Ugd2FudCB0byBiZSBhYmxlIHRvIHJlY29uc3RydWN0 IHRoZQorICogc2FtZSBpZGVudGlmaWVycyBkdXJpbmcgYSBmdXR1cmUgcGxhbm5pbmcgY3ljbGUg Zm9yIHRoZSBzYW1lIHF1ZXJ5LCBzbworICogdGhhdCBpZiBhIGNlcnRhaW4gYmVoYXZpb3IgaXMg c3BlY2lmaWVkIGZvciBhIGNlcnRhaW4gaWRlbnRpZmllciwgd2UgY2FuCisgKiBwcm9wZXJseSBp ZGVudGlmeSB0aGUgUlRJIGZvciB3aGljaCB0aGF0IGJlaGF2aW9yIGlzIG1hbmRhdGVkLiBJbiBv cmRlcgorICogZm9yIHRoaXMgdG8gd29yaywgc3VicXVlcnkgbmFtZXMgbXVzdCBiZSB1bmlxdWUg YW5kIGtub3duIGJlZm9yZSB0aGUKKyAqIHN1YnF1ZXJ5IGlzIHBsYW5uZWQsIGFuZCB0aGUgcmVt YWluZGVyIG9mIHRoZSBpZGVudGlmaWVyIG11c3Qgbm90IGRlcGVuZAorICogb24gYW55IHBhcnQg b2YgdGhlIHF1ZXJ5IG91dHNpZGUgb2YgdGhlIGN1cnJlbnQgc3VicXVlcnkgbGV2ZWwuIEluCisg KiBwYXJ0aWN1bGFyLCBvY2N1cnJlbmNlX251bWJlciBtdXN0IGJlIGNhbGN1bGF0ZWQgcmVsYXRp dmUgdG8gdGhlIHJhbmdlCisgKiB0YWJsZSBmb3IgdGhlIHJlbGV2YW50IHN1YnF1ZXJ5LCBub3Qg dGhlIGZpbmFsIGZsYXR0ZW5lZCByYW5nZSB0YWJsZS4KKyAqCisgKiBOQjogQWxsIG9mIHRoaXMg Y29kZSBtdXN0IHVzZSBydF9mZXRjaCgpLCBub3QgcGxhbm5lcl9ydF9mZXRjaCgpIQorICogSm9p biByZW1vdmFsIGFuZCBzZWxmLWpvaW4gZWxpbWluYXRpb24gcmVtb3ZlIHJlbHMgZnJvbSB0aGUg YXJyYXlzCisgKiB0aGF0IHBsYW5uZXJfcnRfZmV0Y2goKSB1c2VzOyB1c2luZyBydF9mZXRjaCgp IGlzIG5lY2Vzc2FyeSB0byBnZXQKKyAqIHN0YWJsZSByZXN1bHRzLgorICoKKyAqIENvcHlyaWdo dCAoYykgMjAxNi0yMDI2LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoK KyAqCSAgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2lkZW50aWZpZXIuYworICoKKyAqLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorICovCisKKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAi cGdwYV9pZGVudGlmaWVyLmgiCisKKyNpbmNsdWRlICJwYXJzZXIvcGFyc2V0cmVlLmgiCisjaW5j bHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKKyNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKKwor c3RhdGljIEluZGV4ICpwZ3BhX2NyZWF0ZV90b3BfcnRpX21hcChJbmRleCBydGFibGVfbGVuZ3Ro LCBMaXN0ICpydGFibGUsCisJCQkJCQkJCQkgIExpc3QgKmFwcGluZm9zKTsKK3N0YXRpYyBpbnQJ cGdwYV9vY2N1cnJlbmNlX251bWJlcihMaXN0ICpydGFibGUsIEluZGV4ICp0b3BfcnRpX21hcCwK KwkJCQkJCQkJICAgU3ViUGxhblJUSW5mbyAqcnRpbmZvLCBJbmRleCBydGkpOworCisvKgorICog Q3JlYXRlIGEgcmFuZ2UgdGFibGUgaWRlbnRpZmllciBmcm9tIHNjcmF0Y2guCisgKgorICogVGhp cyBmdW5jdGlvbiBsZWF2ZXMgdGhlIGNhbGxlciB0byBkbyBhbGwgdGhlIGhlYXZ5IGxpZnRpbmcs IHNvIGl0J3MKKyAqIGdlbmVyYWxseSBiZXR0ZXIgdG8gdXNlIG9uZSBvZiB0aGUgZnVuY3Rpb25z IGJlbG93IGluc3RlYWQuCisgKgorICogU2VlIHRoZSBmaWxlIGhlYWRlciBjb21tZW50cyBmb3Ig bW9yZSBkZXRhaWxzIG9uIHRoZSBmb3JtYXQgb2YgYW4KKyAqIGlkZW50aWZpZXIuCisgKi8KK2Nv bnN0IGNoYXIgKgorcGdwYV9pZGVudGlmaWVyX3N0cmluZyhjb25zdCBwZ3BhX2lkZW50aWZpZXIg KnJpZCkKK3sKKwljb25zdCBjaGFyICpyZXN1bHQ7CisKKwlBc3NlcnQocmlkLT5hbGlhc19uYW1l ICE9IE5VTEwpOworCXJlc3VsdCA9IHF1b3RlX2lkZW50aWZpZXIocmlkLT5hbGlhc19uYW1lKTsK KworCUFzc2VydChyaWQtPm9jY3VycmVuY2UgPj0gMCk7CisJaWYgKHJpZC0+b2NjdXJyZW5jZSA+ IDEpCisJCXJlc3VsdCA9IHBzcHJpbnRmKCIlcyMlZCIsIHJlc3VsdCwgcmlkLT5vY2N1cnJlbmNl KTsKKworCWlmIChyaWQtPnBhcnRyZWwgIT0gTlVMTCkKKwl7CisJCWlmIChyaWQtPnBhcnRuc3Ag PT0gTlVMTCkKKwkJCXJlc3VsdCA9IHBzcHJpbnRmKCIlcy8lcyIsIHJlc3VsdCwKKwkJCQkJCQkg IHF1b3RlX2lkZW50aWZpZXIocmlkLT5wYXJ0cmVsKSk7CisJCWVsc2UKKwkJCXJlc3VsdCA9IHBz cHJpbnRmKCIlcy8lcy4lcyIsIHJlc3VsdCwKKwkJCQkJCQkgIHF1b3RlX2lkZW50aWZpZXIocmlk LT5wYXJ0bnNwKSwKKwkJCQkJCQkgIHF1b3RlX2lkZW50aWZpZXIocmlkLT5wYXJ0cmVsKSk7CisJ fQorCisJaWYgKHJpZC0+cGxhbl9uYW1lICE9IE5VTEwpCisJCXJlc3VsdCA9IHBzcHJpbnRmKCIl c0AlcyIsIHJlc3VsdCwgcXVvdGVfaWRlbnRpZmllcihyaWQtPnBsYW5fbmFtZSkpOworCisJcmV0 dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIENvbXB1dGUgYSByZWxhdGlvbiBpZGVudGlmaWVyIGZv ciBhIHBhcnRpY3VsYXIgUlRJLgorICoKKyAqIFRoZSBjYWxsZXIgcHJvdmlkZXMgcm9vdCBhbmQg cnRpLCBhbmQgZ2V0cyB0aGUgbmVjZXNzYXJ5IGRldGFpbHMgYmFjayB2aWEKKyAqIHRoZSByZW1h aW5pbmcgcGFyYW1ldGVycy4KKyAqLwordm9pZAorcGdwYV9jb21wdXRlX2lkZW50aWZpZXJfYnlf cnRpKFBsYW5uZXJJbmZvICpyb290LCBJbmRleCBydGksCisJCQkJCQkJICAgcGdwYV9pZGVudGlm aWVyICpyaWQpCit7CisJSW5kZXgJCXRvcF9ydGkgPSBydGk7CisJaW50CQkJb2NjdXJyZW5jZSA9 IDE7CisJUmFuZ2VUYmxFbnRyeSAqcnRlOworCVJhbmdlVGJsRW50cnkgKnRvcF9ydGU7CisJY2hh cgkgICAqcGFydG5zcCA9IE5VTEw7CisJY2hhcgkgICAqcGFydHJlbCA9IE5VTEw7CisKKwkvKgor CSAqIElmIHRoaXMgaXMgYSBjaGlsZCBSVEUsIGZpbmQgdGhlIHRvcG1vc3QgcGFyZW50IHRoYXQg aXMgc3RpbGwgb2YgdHlwZQorCSAqIFJURV9SRUxBVElPTi4gV2UgZG8gdGhpcyBiZWNhdXNlIHdl IGlkZW50aWZ5IGNoaWxkcmVuIG9mIHBhcnRpdGlvbmVkCisJICogdGFibGVzIGJ5IHRoZSBuYW1l IG9mIHRoZSBjaGlsZCB0YWJsZSwgYnV0IHN1YnF1ZXJpZXMgY2FuIGFsc28gaGF2ZQorCSAqIGNo aWxkIHJlbHMgYW5kIHdlIGRvbid0IGNhcmUgYWJvdXQgdGhvc2UgaGVyZS4KKwkgKi8KKwlmb3Ig KDs7KQorCXsKKwkJQXBwZW5kUmVsSW5mbyAqYXBwaW5mbzsKKwkJUmFuZ2VUYmxFbnRyeSAqcGFy ZW50X3J0ZTsKKworCQkvKiBhcHBlbmRfcmVsX2FycmF5IGNhbiBiZSBOVUxMIGlmIHRoZXJlIGFy ZSBubyBjaGlsZHJlbiAqLworCQlpZiAocm9vdC0+YXBwZW5kX3JlbF9hcnJheSA9PSBOVUxMIHx8 CisJCQkoYXBwaW5mbyA9IHJvb3QtPmFwcGVuZF9yZWxfYXJyYXlbdG9wX3J0aV0pID09IE5VTEwp CisJCQlicmVhazsKKworCQlwYXJlbnRfcnRlID0gcnRfZmV0Y2goYXBwaW5mby0+cGFyZW50X3Jl bGlkLCByb290LT5wYXJzZS0+cnRhYmxlKTsKKwkJaWYgKHBhcmVudF9ydGUtPnJ0ZWtpbmQgIT0g UlRFX1JFTEFUSU9OKQorCQkJYnJlYWs7CisKKwkJdG9wX3J0aSA9IGFwcGluZm8tPnBhcmVudF9y ZWxpZDsKKwl9CisKKwkvKiBHZXQgdGhlIHJhbmdlIHRhYmxlIGVudHJpZXMgZm9yIHRoZSBSVEkg YW5kIHRvcCBSVEkuICovCisJcnRlID0gcnRfZmV0Y2gocnRpLCByb290LT5wYXJzZS0+cnRhYmxl KTsKKwl0b3BfcnRlID0gcnRfZmV0Y2godG9wX3J0aSwgcm9vdC0+cGFyc2UtPnJ0YWJsZSk7CisJ QXNzZXJ0KHJ0ZS0+cnRla2luZCAhPSBSVEVfSk9JTik7CisJQXNzZXJ0KHRvcF9ydGUtPnJ0ZWtp bmQgIT0gUlRFX0pPSU4pOworCisJLyogV29yayBvdXQgdGhlIGNvcnJlY3Qgb2NjdXJyZW5jZSBu dW1iZXIuICovCisJZm9yIChJbmRleCBwcmlvcl9ydGkgPSAxOyBwcmlvcl9ydGkgPCB0b3BfcnRp OyArK3ByaW9yX3J0aSkKKwl7CisJCVJhbmdlVGJsRW50cnkgKnByaW9yX3J0ZTsKKwkJQXBwZW5k UmVsSW5mbyAqYXBwaW5mbzsKKworCQkvKgorCQkgKiBJZiB0aGlzIGlzIGEgY2hpbGQgcmVsIG9m IGEgcGFyZW50IHRoYXQgaXMgYSByZWxhdGlvbiwgc2tpcCBpdC4KKwkJICoKKwkJICogU3VjaCBy YW5nZSB0YWJsZSBlbnRyaWVzIGFyZSBkaXNhbWJpZ3VhdGVkIGJ5IG1lbnRpb25pbmcgdGhlIHNj aGVtYQorCQkgKiBhbmQgbmFtZSBvZiB0aGUgdGFibGUsIG5vdCBieSBjb3VudGluZyB0aGVtIGFz IHNlcGFyYXRlIG9jY3VycmVuY2VzCisJCSAqIG9mIHRoZSBzYW1lIHRhYmxlLgorCQkgKgorCQkg KiBOQjogYXBwZW5kX3JlbF9hcnJheSBjYW4gYmUgTlVMTCBpZiB0aGVyZSBhcmUgbm8gY2hpbGRy ZW4KKwkJICovCisJCWlmIChyb290LT5hcHBlbmRfcmVsX2FycmF5ICE9IE5VTEwgJiYKKwkJCShh cHBpbmZvID0gcm9vdC0+YXBwZW5kX3JlbF9hcnJheVtwcmlvcl9ydGldKSAhPSBOVUxMKQorCQl7 CisJCQlSYW5nZVRibEVudHJ5ICpwYXJlbnRfcnRlOworCisJCQlwYXJlbnRfcnRlID0gcnRfZmV0 Y2goYXBwaW5mby0+cGFyZW50X3JlbGlkLCByb290LT5wYXJzZS0+cnRhYmxlKTsKKwkJCWlmIChw YXJlbnRfcnRlLT5ydGVraW5kID09IFJURV9SRUxBVElPTikKKwkJCQljb250aW51ZTsKKwkJfQor CisJCS8qIFNraXAgTlVMTCBlbnRyaWVzIGFuZCBqb2lucy4gKi8KKwkJcHJpb3JfcnRlID0gcnRf ZmV0Y2gocHJpb3JfcnRpLCByb290LT5wYXJzZS0+cnRhYmxlKTsKKwkJaWYgKHByaW9yX3J0ZSA9 PSBOVUxMIHx8IHByaW9yX3J0ZS0+cnRla2luZCA9PSBSVEVfSk9JTikKKwkJCWNvbnRpbnVlOwor CisJCS8qIFNraXAgaWYgdGhlIGFsaWFzIG5hbWUgZGlmZmVycy4gKi8KKwkJaWYgKHN0cmNtcChw cmlvcl9ydGUtPmVyZWYtPmFsaWFzbmFtZSwgcnRlLT5lcmVmLT5hbGlhc25hbWUpICE9IDApCisJ CQljb250aW51ZTsKKworCQkvKiBMb29rcyBsaWtlIGEgdHJ1ZSBkdXBsaWNhdGUuICovCisJCSsr b2NjdXJyZW5jZTsKKwl9CisKKwkvKiBJZiB0aGlzIGlzIGEgY2hpbGQgdGFibGUsIGdldCB0aGUg c2NoZW1hIGFuZCByZWxhdGlvbiBuYW1lcy4gKi8KKwlpZiAocnRpICE9IHRvcF9ydGkpCisJewor CQlwYXJ0bnNwID0gZ2V0X25hbWVzcGFjZV9uYW1lX29yX3RlbXAoZ2V0X3JlbF9uYW1lc3BhY2Uo cnRlLT5yZWxpZCkpOworCQlwYXJ0cmVsID0gZ2V0X3JlbF9uYW1lKHJ0ZS0+cmVsaWQpOworCX0K KworCS8qIE9LLCB3ZSBoYXZlIGFsbCB0aGUgYW5zd2VycyB3ZSBuZWVkLiBSZXR1cm4gdGhlbSB0 byB0aGUgY2FsbGVyLiAqLworCXJpZC0+YWxpYXNfbmFtZSA9IHRvcF9ydGUtPmVyZWYtPmFsaWFz bmFtZTsKKwlyaWQtPm9jY3VycmVuY2UgPSBvY2N1cnJlbmNlOworCXJpZC0+cGFydG5zcCA9IHBh cnRuc3A7CisJcmlkLT5wYXJ0cmVsID0gcGFydHJlbDsKKwlyaWQtPnBsYW5fbmFtZSA9IHJvb3Qt PnBsYW5fbmFtZTsKK30KKworLyoKKyAqIENvbXB1dGUgYSByZWxhdGlvbiBpZGVudGlmaWVyIGZv ciBhIHNldCBvZiBSVElzLCBleGNlcHQgZm9yIGFueSBSVEVfSk9JTgorICogUlRJcyB0aGF0IG1h eSBiZSBwcmVzZW50LgorICoKKyAqIFJURV9KT0lOIGVudHJpZXMgYXJlIGV4Y2x1ZGVkIGJlY2F1 c2UgdGhleSBjYW5ub3QgYmUgbWVudGlvbmVkIGJ5IHBsYW4KKyAqIGFkdmljZS4KKyAqCisgKiBU aGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBtYWtpbmcgc3VyZSB0aGF0IHRoZSB0a2V5cyBh cnJheSBpcyBsYXJnZQorICogZW5vdWdoIHRvIHN0b3JlIHRoZSByZXN1bHRzLgorICoKKyAqIFRo ZSByZXR1cm4gdmFsdWUgaXMgdGhlIG51bWJlciBvZiBpZGVudGlmaWVycyBjb21wdXRlZC4KKyAq LworaW50CitwZ3BhX2NvbXB1dGVfaWRlbnRpZmllcnNfYnlfcmVsaWRzKFBsYW5uZXJJbmZvICpy b290LCBCaXRtYXBzZXQgKnJlbGlkcywKKwkJCQkJCQkJICAgcGdwYV9pZGVudGlmaWVyICpyaWRz KQoreworCWludAkJCWNvdW50ID0gMDsKKwlpbnQJCQlydGkgPSAtMTsKKworCXdoaWxlICgocnRp ID0gYm1zX25leHRfbWVtYmVyKHJlbGlkcywgcnRpKSkgPj0gMCkKKwl7CisJCVJhbmdlVGJsRW50 cnkgKnJ0ZSA9IHJ0X2ZldGNoKHJ0aSwgcm9vdC0+cGFyc2UtPnJ0YWJsZSk7CisKKwkJaWYgKHJ0 ZS0+cnRla2luZCA9PSBSVEVfSk9JTikKKwkJCWNvbnRpbnVlOworCQlwZ3BhX2NvbXB1dGVfaWRl bnRpZmllcl9ieV9ydGkocm9vdCwgcnRpLCAmcmlkc1tjb3VudCsrXSk7CisJfQorCisJQXNzZXJ0 KGNvdW50ID4gMCk7CisJcmV0dXJuIGNvdW50OworfQorCisvKgorICogQ3JlYXRlIGFuIGFycmF5 IG9mIHJhbmdlIHRhYmxlIGlkZW50aWZpZXJzIGZvciBhbGwgdGhlIG5vbi1OVUxMLAorICogbm9u LVJURV9KT0lOIGVudHJpZXMgaW4gdGhlIFBsYW5uZWRTdG10J3MgcmFuZ2UgdGFibGUuCisgKi8K K3BncGFfaWRlbnRpZmllciAqCitwZ3BhX2NyZWF0ZV9pZGVudGlmaWVyc19mb3JfcGxhbm5lZF9z dG10KFBsYW5uZWRTdG10ICpwc3RtdCkKK3sKKwlJbmRleAkJcnRhYmxlX2xlbmd0aCA9IGxpc3Rf bGVuZ3RoKHBzdG10LT5ydGFibGUpOworCXBncGFfaWRlbnRpZmllciAqcmVzdWx0ID0gcGFsbG9j MF9hcnJheShwZ3BhX2lkZW50aWZpZXIsIHJ0YWJsZV9sZW5ndGgpOworCUluZGV4CSAgICp0b3Bf cnRpX21hcDsKKwlpbnQJCQlydGluZm9pbmRleCA9IDA7CisJU3ViUGxhblJUSW5mbyAqcnRpbmZv ID0gTlVMTDsKKwlTdWJQbGFuUlRJbmZvICpuZXh0cnRpbmZvID0gTlVMTDsKKworCS8qCisJICog QWNjb3VudCBmb3IgcmVsYXRpb25zIGFkZGVkIGJ5IGluaGVyaXRhbmNlIGV4cGFuc2lvbiBvZiBw YXJ0aXRpb25lZAorCSAqIHRhYmxlcy4KKwkgKi8KKwl0b3BfcnRpX21hcCA9IHBncGFfY3JlYXRl X3RvcF9ydGlfbWFwKHJ0YWJsZV9sZW5ndGgsIHBzdG10LT5ydGFibGUsCisJCQkJCQkJCQkJICBw c3RtdC0+YXBwZW5kUmVsYXRpb25zKTsKKworCS8qCisJICogV2hlbiB3ZSBiZWdpbiBpdGVyYXRp bmcsIHdlJ3JlIHByb2Nlc3NpbmcgdGhlIHBvcnRpb24gb2YgdGhlIHJhbmdlCisJICogdGFibGUg dGhhdCBvcmlnaW5hdGVkIGZyb20gdGhlIHRvcC1sZXZlbCBQbGFubmVySW5mbywgc28gc3VicnRp bmZvIGlzCisJICogTlVMTC4gTGF0ZXIsIHN1YnJ0aW5mbyB3aWxsIGJlIHRoZSBTdWJQbGFuUlRJ bmZvIGZvciB0aGUgc3VicXVlcnkgd2hvc2UKKwkgKiBwb3J0aW9uIG9mIHRoZSByYW5nZSB0YWJs ZSB3ZSBhcmUgcHJvY2Vzc2luZy4gbmV4dHJ0aW5mbyBpcyBhbHdheXMgdGhlCisJICogU3ViUGxh blJUSW5mbyB0aGF0IGZvbGxvd3MgdGhlIGN1cnJlbnQgb25lLCBpZiBhbnksIHNvIHdoZW4gd2Un cmUKKwkgKiBwcm9jZXNzaW5nIHRoZSB0b3AtbGV2ZWwgcXVlcnkncyBwb3J0aW9uIG9mIHRoZSBy YW5nZSB0YWJsZSwgdGhlIG5leHQKKwkgKiBTdWJQbGFuUlRJbmZvIGlzIHRoZSB2ZXJ5IGZpcnN0 IG9uZS4KKwkgKi8KKwlpZiAocHN0bXQtPnN1YnJ0aW5mb3MgIT0gTlVMTCkKKwkJbmV4dHJ0aW5m byA9IGxpbml0aWFsKHBzdG10LT5zdWJydGluZm9zKTsKKworCS8qIE1haW4gbG9vcCBvdmVyIHRo ZSByYW5nZSB0YWJsZS4gKi8KKwlmb3IgKEluZGV4IHJ0aSA9IDE7IHJ0aSA8PSBydGFibGVfbGVu Z3RoOyBydGkrKykKKwl7CisJCWNvbnN0IGNoYXIgKnBsYW5fbmFtZTsKKwkJSW5kZXgJCXRvcF9y dGk7CisJCVJhbmdlVGJsRW50cnkgKnJ0ZTsKKwkJUmFuZ2VUYmxFbnRyeSAqdG9wX3J0ZTsKKwkJ Y2hhcgkgICAqcGFydG5zcCA9IE5VTEw7CisJCWNoYXIJICAgKnBhcnRyZWwgPSBOVUxMOworCQlp bnQJCQlvY2N1cnJlbmNlOworCQlwZ3BhX2lkZW50aWZpZXIgKnJpZDsKKworCQkvKgorCQkgKiBB ZHZhbmNlIHRvIHRoZSBuZXh0IFN1YlBsYW5SVEluZm8sIGlmIGl0J3MgdGltZSB0byBkbyB0aGF0 LgorCQkgKgorCQkgKiBUaGlzIGxvb3AgcHJvYmFibHkgc2hvdWxkbid0IGV2ZXIgaXRlcmF0ZSBt b3JlIHRoYW4gb25jZSwgYmVjYXVzZQorCQkgKiB0aGF0IHdvdWxkIGltcGx5IHRoYXQgYSBzdWJx dWVyeSB3YXMgcGxhbm5lZCBidXQgYWRkZWQgbm90aGluZyB0bworCQkgKiB0aGUgcmFuZ2UgdGFi bGU7IGJ1dCBsZXQncyBiZSBkZWZlbnNpdmUgYW5kIGFzc3VtZSBpdCBjYW4gaGFwcGVuLgorCQkg Ki8KKwkJd2hpbGUgKG5leHRydGluZm8gIT0gTlVMTCAmJiBydGkgPiBuZXh0cnRpbmZvLT5ydG9m ZnNldCkKKwkJeworCQkJcnRpbmZvID0gbmV4dHJ0aW5mbzsKKwkJCWlmICgrK3J0aW5mb2luZGV4 ID49IGxpc3RfbGVuZ3RoKHBzdG10LT5zdWJydGluZm9zKSkKKwkJCQluZXh0cnRpbmZvID0gTlVM TDsKKwkJCWVsc2UKKwkJCQluZXh0cnRpbmZvID0gbGlzdF9udGgocHN0bXQtPnN1YnJ0aW5mb3Ms IHJ0aW5mb2luZGV4KTsKKwkJfQorCisJCS8qIEZldGNoIHRoZSByYW5nZSB0YWJsZSBlbnRyeSwg aWYgYW55LiAqLworCQlydGUgPSBydF9mZXRjaChydGksIHBzdG10LT5ydGFibGUpOworCisJCS8q CisJCSAqIFdlIGNhbid0IGFuZCBkb24ndCBuZWVkIHRvIGlkZW50aWZ5IG51bGwgZW50cmllcywg YW5kIHdlIGRvbid0IHdhbnQKKwkJICogdG8gaWRlbnRpZnkgam9pbiBlbnRyaWVzLgorCQkgKi8K KwkJaWYgKHJ0ZSA9PSBOVUxMIHx8IHJ0ZS0+cnRla2luZCA9PSBSVEVfSk9JTikKKwkJCWNvbnRp bnVlOworCisJCS8qCisJCSAqIElmIHRoaXMgaXMgbm90IGEgcmVsYXRpb24gYWRkZWQgYnkgcGFy dGl0aW9uZWQgdGFibGUgZXhwYW5zaW9uLAorCQkgKiB0aGVuIHRoZSB0b3AgUlRJL1JURSBhcmUg anVzdCB0aGUgc2FtZSBhcyB0aGlzIFJUSS9SVEUuIE90aGVyd2lzZSwKKwkJICogd2UgbmVlZCB0 aGUgaW5mb3JtYXRpb24gZm9yIHRoZSB0b3AgUlRJL1JURSwgYW5kIG11c3QgYWxzbyBmZXRjaAor CQkgKiB0aGUgcGFydGl0aW9uIHNjaGVtYSBhbmQgbmFtZS4KKwkJICovCisJCXRvcF9ydGkgPSB0 b3BfcnRpX21hcFtydGkgLSAxXTsKKwkJaWYgKHJ0aSA9PSB0b3BfcnRpKQorCQkJdG9wX3J0ZSA9 IHJ0ZTsKKwkJZWxzZQorCQl7CisJCQl0b3BfcnRlID0gcnRfZmV0Y2godG9wX3J0aSwgcHN0bXQt PnJ0YWJsZSk7CisJCQlwYXJ0bnNwID0KKwkJCQlnZXRfbmFtZXNwYWNlX25hbWVfb3JfdGVtcChn ZXRfcmVsX25hbWVzcGFjZShydGUtPnJlbGlkKSk7CisJCQlwYXJ0cmVsID0gZ2V0X3JlbF9uYW1l KHJ0ZS0+cmVsaWQpOworCQl9CisKKwkJLyogQ29tcHV0ZSB0aGUgY29ycmVjdCBvY2N1cnJlbmNl IG51bWJlci4gKi8KKwkJb2NjdXJyZW5jZSA9IHBncGFfb2NjdXJyZW5jZV9udW1iZXIocHN0bXQt PnJ0YWJsZSwgdG9wX3J0aV9tYXAsCisJCQkJCQkJCQkJCXJ0aW5mbywgdG9wX3J0aSk7CisKKwkJ LyogR2V0IHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IHBsYW4gKE5VTEwgZm9yIHRvcGxldmVsIHF1 ZXJ5KS4gKi8KKwkJcGxhbl9uYW1lID0gcnRpbmZvID09IE5VTEwgPyBOVUxMIDogcnRpbmZvLT5w bGFuX25hbWU7CisKKwkJLyogU2F2ZSBhbGwgdGhlIGRldGFpbHMgd2UndmUgZGVyaXZlZC4gKi8K KwkJcmlkID0gJnJlc3VsdFtydGkgLSAxXTsKKwkJcmlkLT5hbGlhc19uYW1lID0gdG9wX3J0ZS0+ ZXJlZi0+YWxpYXNuYW1lOworCQlyaWQtPm9jY3VycmVuY2UgPSBvY2N1cnJlbmNlOworCQlyaWQt PnBhcnRuc3AgPSBwYXJ0bnNwOworCQlyaWQtPnBhcnRyZWwgPSBwYXJ0cmVsOworCQlyaWQtPnBs YW5fbmFtZSA9IHBsYW5fbmFtZTsKKwl9CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICog U2VhcmNoIGZvciBhIHBncGFfaWRlbnRpZmllciBpbiB0aGUgYXJyYXkgb2YgaWRlbnRpZmllcnMg Y29tcHV0ZWQgZm9yIHRoZQorICogcmFuZ2UgdGFibGUuIElmIGV4YWN0bHkgb25lIG1hdGNoIGlz IGZvdW5kLCByZXR1cm4gdGhlIG1hdGNoaW5nIFJUSTsgZWxzZQorICogcmV0dXJuIDAuCisgKi8K K0luZGV4CitwZ3BhX2NvbXB1dGVfcnRpX2Zyb21faWRlbnRpZmllcihpbnQgcnRhYmxlX2xlbmd0 aCwKKwkJCQkJCQkJIHBncGFfaWRlbnRpZmllciAqcnRfaWRlbnRpZmllcnMsCisJCQkJCQkJCSBw Z3BhX2lkZW50aWZpZXIgKnJpZCkKK3sKKwlJbmRleAkJcmVzdWx0ID0gMDsKKworCWZvciAoSW5k ZXggcnRpID0gMTsgcnRpIDw9IHJ0YWJsZV9sZW5ndGg7ICsrcnRpKQorCXsKKwkJcGdwYV9pZGVu dGlmaWVyICpydGlfcmlkID0gJnJ0X2lkZW50aWZpZXJzW3J0aSAtIDFdOworCisJCS8qIElmIHRo ZXJlJ3Mgbm8gaWRlbnRpZmllciBmb3IgdGhpcyBSVEksIHNraXAgaXQuICovCisJCWlmIChydGlf cmlkLT5hbGlhc19uYW1lID09IE5VTEwpCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBJZiBp dCBtYXRjaGVzLCByZXR1cm4gdGhpcyBSVEkuIEFzIHVzdWFsLCBhbiBvbWl0dGVkIHBhcnRpdGlv bgorCQkgKiBzY2hlbWEgbWF0Y2hlcyBhbnl0aGluZywgYnV0IHBhcnRpdGlvbiBhbmQgcGxhbiBu YW1lcyBtdXN0IGVpdGhlcgorCQkgKiBtYXRjaCBleGFjdGx5IG9yIGJlIG9taXR0ZWQgb24gYm90 aCBzaWRlcy4KKwkJICovCisJCWlmIChzdHJjbXAocmlkLT5hbGlhc19uYW1lLCBydGlfcmlkLT5h bGlhc19uYW1lKSA9PSAwICYmCisJCQlyaWQtPm9jY3VycmVuY2UgPT0gcnRpX3JpZC0+b2NjdXJy ZW5jZSAmJgorCQkJKHJpZC0+cGFydG5zcCA9PSBOVUxMIHx8IHJ0aV9yaWQtPnBhcnRuc3AgPT0g TlVMTCB8fAorCQkJIHN0cmNtcChyaWQtPnBhcnRuc3AsIHJ0aV9yaWQtPnBhcnRuc3ApID09IDAp ICYmCisJCQlzdHJpbmdzX2VxdWFsX29yX2JvdGhfbnVsbChyaWQtPnBhcnRyZWwsIHJ0aV9yaWQt PnBhcnRyZWwpICYmCisJCQlzdHJpbmdzX2VxdWFsX29yX2JvdGhfbnVsbChyaWQtPnBsYW5fbmFt ZSwgcnRpX3JpZC0+cGxhbl9uYW1lKSkKKwkJeworCQkJaWYgKHJlc3VsdCAhPSAwKQorCQkJewor CQkJCS8qIE11bHRpcGxlIG1hdGNoZXMgd2VyZSBmb3VuZC4gKi8KKwkJCQlyZXR1cm4gMDsKKwkJ CX0KKwkJCXJlc3VsdCA9IHJ0aTsKKwkJfQorCX0KKworCXJldHVybiByZXN1bHQ7Cit9CisKKy8q CisgKiBCdWlsZCBhIG1hcHBpbmcgZnJvbSBlYWNoIFJUSSB0byB0aGUgUlRJIHdob3NlIGFsaWFz X25hbWUgd2lsbCBiZSB1c2VkIHRvCisgKiBjb25zdHJ1Y3QgdGhlIHJhbmdlIHRhYmxlIGlkZW50 aWZpZXIuCisgKgorICogRm9yIGNoaWxkIHJlbGF0aW9ucywgdGhpcyBpcyB0aGUgdG9wbW9zdCBw YXJlbnQgdGhhdCBpcyBzdGlsbCBvZiB0eXBlCisgKiBSVEVfUkVMQVRJT04uIEZvciBvdGhlciBy ZWxhdGlvbnMsIGl0J3MganVzdCB0aGUgb3JpZ2luYWwgUlRJLgorICoKKyAqIFNpbmNlIHdlJ3Jl IGV2ZW50dWFsbHkgZ29pbmcgdG8gbmVlZCB0aGlzIGluZm9ybWF0aW9uIGZvciBldmVyeSBSVEkg aW4KKyAqIHRoZSByYW5nZSB0YWJsZSwgaXQncyBiZXN0IHRvIGNvbXB1dGUgYWxsIHRoZSBhbnN3 ZXJzIGluIGEgc2luZ2xlIHBhc3Mgb3ZlcgorICogdGhlIEFwcGVuZFJlbEluZm8gbGlzdC4gT3Ro ZXJ3aXNlLCB3ZSBtaWdodCBlbmQgdXAgc2VhcmNoaW5nIHRocm91Z2ggdGhhdAorICogbGlzdCBy ZXBlYXRlZGx5IGZvciBlbnRyaWVzIG9mIGludGVyZXN0LgorICoKKyAqIE5vdGUgdGhhdCB0aGUg cmV0dXJuZWQgYXJyYXkgaXMgdXNlcyB6ZXJvLWJhc2VkIGluZGV4aW5nLCB3aGlsZSBSVElzIHVz ZQorICogMS1iYXNlZCBpbmRleGluZywgc28gc3VidHJhY3QgMSBmcm9tIHRoZSBSVEkgYmVmb3Jl IGxvb2tpbmcgaXQgdXAgaW4gdGhlCisgKiBhcnJheS4KKyAqLworc3RhdGljIEluZGV4ICoKK3Bn cGFfY3JlYXRlX3RvcF9ydGlfbWFwKEluZGV4IHJ0YWJsZV9sZW5ndGgsIExpc3QgKnJ0YWJsZSwg TGlzdCAqYXBwaW5mb3MpCit7CisJSW5kZXgJICAgKnRvcF9ydGlfbWFwID0gcGFsbG9jMF9hcnJh eShJbmRleCwgcnRhYmxlX2xlbmd0aCk7CisKKwkvKiBJbml0aWFsbHksIG1ha2UgZXZlcnkgUlRJ IHBvaW50IHRvIGl0c2VsZi4gKi8KKwlmb3IgKEluZGV4IHJ0aSA9IDE7IHJ0aSA8PSBydGFibGVf bGVuZ3RoOyArK3J0aSkKKwkJdG9wX3J0aV9tYXBbcnRpIC0gMV0gPSBydGk7CisKKwkvKiBVcGRh dGUgdGhlIG1hcCBmb3IgZWFjaCBBcHBlbmRSZWxJbmZvIG9iamVjdC4gKi8KKwlmb3JlYWNoX25v ZGUoQXBwZW5kUmVsSW5mbywgYXBwaW5mbywgYXBwaW5mb3MpCisJeworCQlJbmRleAkJcGFyZW50 X3J0aSA9IGFwcGluZm8tPnBhcmVudF9yZWxpZDsKKwkJUmFuZ2VUYmxFbnRyeSAqcGFyZW50X3J0 ZSA9IHJ0X2ZldGNoKHBhcmVudF9ydGksIHJ0YWJsZSk7CisKKwkJLyogSWYgdGhlIHBhcmVudCBp cyBub3QgUlRFX1JFTEFUSU9OLCBpZ25vcmUgdGhpcyBlbnRyeS4gKi8KKwkJaWYgKHBhcmVudF9y dGUtPnJ0ZWtpbmQgIT0gUlRFX1JFTEFUSU9OKQorCQkJY29udGludWU7CisKKwkJLyoKKwkJICog TWFwIHRoZSBjaGlsZCB0byB3aGVyZXZlciB3ZSBtYXBwZWQgdGhlIHBhcmVudC4gUGFyZW50cyBh bHdheXMKKwkJICogcHJlY2VkZSB0aGVpciBjaGlsZHJlbiBpbiB0aGUgQXBwZW5kUmVsSW5mbyBs aXN0LCBzbyB0aGlzIHNob3VsZAorCQkgKiB3b3JrIG91dC4KKwkJICovCisJCXRvcF9ydGlfbWFw W2FwcGluZm8tPmNoaWxkX3JlbGlkIC0gMV0gPSB0b3BfcnRpX21hcFtwYXJlbnRfcnRpIC0gMV07 CisJfQorCisJcmV0dXJuIHRvcF9ydGlfbWFwOworfQorCisvKgorICogRmluZCB0aGUgb2NjdXJy ZW5jZSBudW1iZXIgb2YgYSBjZXJ0YWluIHJlbGF0aW9uIHdpdGhpbiBhIGNlcnRhaW4gc3VicXVl cnkuCisgKgorICogVGhlIHNhbWUgYWxpYXMgbmFtZSBjYW4gb2NjdXIgbXVsdGlwbGUgdGltZXMg d2l0aGluIGEgc3VicXVlcnksIGJ1dCB3ZSB3YW50CisgKiB0byBkaXNhbWJpZ3VhdGUgYnkgZ2l2 aW5nIGRpZmZlcmVudCBvY2N1cnJlbmNlcyBkaWZmZXJlbnQgaW50ZWdlciBpbmRleGVzLgorICog SG93ZXZlciwgY2hpbGQgdGFibGVzIGFyZSBkaXNhbWJpZ3VhdGVkIGJ5IGluY2x1ZGluZyB0aGUg dGFibGUgbmFtZSByYXRoZXIKKyAqIHRoYW4gYnkgaW5jcmVtZW50aW5nIHRoZSBvY2N1cnJlbmNl IG51bWJlcjsgYW5kIGpvaW5zIGFyZSBub3QgbmFtZWQgYW5kIHNvCisgKiBzaG91bGRuJ3QgaW5j cmVtZW50IHRoZSBvY2N1cnJlbmNlIG51bWJlciBlaXRoZXIuCisgKi8KK3N0YXRpYyBpbnQKK3Bn cGFfb2NjdXJyZW5jZV9udW1iZXIoTGlzdCAqcnRhYmxlLCBJbmRleCAqdG9wX3J0aV9tYXAsCisJ CQkJCSAgIFN1YlBsYW5SVEluZm8gKnJ0aW5mbywgSW5kZXggcnRpKQoreworCUluZGV4CQlydG9m ZnNldCA9IChydGluZm8gPT0gTlVMTCkgPyAwIDogcnRpbmZvLT5ydG9mZnNldDsKKwlpbnQJCQlv Y2N1cnJlbmNlID0gMTsKKwlSYW5nZVRibEVudHJ5ICpydGUgPSBydF9mZXRjaChydGksIHJ0YWJs ZSk7CisKKwlmb3IgKEluZGV4IHByaW9yX3J0aSA9IHJ0b2Zmc2V0ICsgMTsgcHJpb3JfcnRpIDwg cnRpOyArK3ByaW9yX3J0aSkKKwl7CisJCVJhbmdlVGJsRW50cnkgKnByaW9yX3J0ZTsKKworCQkv KgorCQkgKiBJZiB0aGlzIGlzIGEgY2hpbGQgcmVsIG9mIGEgcGFyZW50IHRoYXQgaXMgYSByZWxh dGlvbiwgc2tpcCBpdC4KKwkJICoKKwkJICogU3VjaCByYW5nZSB0YWJsZSBlbnRyaWVzIGFyZSBk aXNhbWJpZ3VhdGVkIGJ5IG1lbnRpb25pbmcgdGhlIHNjaGVtYQorCQkgKiBhbmQgbmFtZSBvZiB0 aGUgdGFibGUsIG5vdCBieSBjb3VudGluZyB0aGVtIGFzIHNlcGFyYXRlIG9jY3VycmVuY2VzCisJ CSAqIG9mIHRoZSBzYW1lIHRhYmxlLgorCQkgKi8KKwkJaWYgKHRvcF9ydGlfbWFwW3ByaW9yX3J0 aSAtIDFdICE9IHByaW9yX3J0aSkKKwkJCWNvbnRpbnVlOworCisJCS8qIFNraXAgam9pbnMuICov CisJCXByaW9yX3J0ZSA9IHJ0X2ZldGNoKHByaW9yX3J0aSwgcnRhYmxlKTsKKwkJaWYgKHByaW9y X3J0ZS0+cnRla2luZCA9PSBSVEVfSk9JTikKKwkJCWNvbnRpbnVlOworCisJCS8qIFNraXAgaWYg dGhlIGFsaWFzIG5hbWUgZGlmZmVycy4gKi8KKwkJaWYgKHN0cmNtcChwcmlvcl9ydGUtPmVyZWYt PmFsaWFzbmFtZSwgcnRlLT5lcmVmLT5hbGlhc25hbWUpICE9IDApCisJCQljb250aW51ZTsKKwor CQkvKiBMb29rcyBsaWtlIGEgdHJ1ZSBkdXBsaWNhdGUuICovCisJCSsrb2NjdXJyZW5jZTsKKwl9 CisKKwlyZXR1cm4gb2NjdXJyZW5jZTsKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9h ZHZpY2UvcGdwYV9pZGVudGlmaWVyLmggYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfaWRl bnRpZmllci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4zOTNhODNk Yzc4YwotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9pZGVu dGlmaWVyLmgKQEAgLTAsMCArMSw1MiBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogcGdw YV9pZGVudGlmaWVyLmgKKyAqCSAgY3JlYXRlIGFwcHJvcHJpYXRlIGlkZW50aWZpZXJzIGZvciBy YW5nZSB0YWJsZSBlbnRyaWVzCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjYsIFBvc3Rn cmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICoJICBjb250cmliL3BnX3BsYW5f YWR2aWNlL3BncGFfaWRlbnRpZmllci5oCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKwor I2lmbmRlZiBQR1BBX0lERU5USUZJRVJfSAorI2RlZmluZSBQR1BBX0lERU5USUZJRVJfSAorCisj aW5jbHVkZSAibm9kZXMvcGF0aG5vZGVzLmgiCisjaW5jbHVkZSAibm9kZXMvcGxhbm5vZGVzLmgi CisKK3R5cGVkZWYgc3RydWN0IHBncGFfaWRlbnRpZmllcgoreworCWNvbnN0IGNoYXIgKmFsaWFz X25hbWU7CisJaW50CQkJb2NjdXJyZW5jZTsKKwljb25zdCBjaGFyICpwYXJ0bnNwOworCWNvbnN0 IGNoYXIgKnBhcnRyZWw7CisJY29uc3QgY2hhciAqcGxhbl9uYW1lOworfSBwZ3BhX2lkZW50aWZp ZXI7CisKKy8qIENvbnZlbmllbmNlIGZ1bmN0aW9uIGZvciBjb21wYXJpbmcgcG9zc2libHktTlVM TCBzdHJpbmdzLiAqLworc3RhdGljIGlubGluZSBib29sCitzdHJpbmdzX2VxdWFsX29yX2JvdGhf bnVsbChjb25zdCBjaGFyICphLCBjb25zdCBjaGFyICpiKQoreworCWlmIChhID09IGIpCisJCXJl dHVybiB0cnVlOworCWVsc2UgaWYgKGEgPT0gTlVMTCB8fCBiID09IE5VTEwpCisJCXJldHVybiBm YWxzZTsKKwllbHNlCisJCXJldHVybiBzdHJjbXAoYSwgYikgPT0gMDsKK30KKworZXh0ZXJuIGNv bnN0IGNoYXIgKnBncGFfaWRlbnRpZmllcl9zdHJpbmcoY29uc3QgcGdwYV9pZGVudGlmaWVyICpy aWQpOworZXh0ZXJuIHZvaWQgcGdwYV9jb21wdXRlX2lkZW50aWZpZXJfYnlfcnRpKFBsYW5uZXJJ bmZvICpyb290LCBJbmRleCBydGksCisJCQkJCQkJCQkJICAgcGdwYV9pZGVudGlmaWVyICpyaWQp OworZXh0ZXJuIGludAlwZ3BhX2NvbXB1dGVfaWRlbnRpZmllcnNfYnlfcmVsaWRzKFBsYW5uZXJJ bmZvICpyb290LAorCQkJCQkJCQkJCQkgICBCaXRtYXBzZXQgKnJlbGlkcywKKwkJCQkJCQkJCQkJ ICAgcGdwYV9pZGVudGlmaWVyICpyaWRzKTsKK2V4dGVybiBwZ3BhX2lkZW50aWZpZXIgKnBncGFf Y3JlYXRlX2lkZW50aWZpZXJzX2Zvcl9wbGFubmVkX3N0bXQoUGxhbm5lZFN0bXQgKnBzdG10KTsK KworZXh0ZXJuIEluZGV4IHBncGFfY29tcHV0ZV9ydGlfZnJvbV9pZGVudGlmaWVyKGludCBydGFi bGVfbGVuZ3RoLAorCQkJCQkJCQkJCQkgIHBncGFfaWRlbnRpZmllciAqcnRfaWRlbnRpZmllcnMs CisJCQkJCQkJCQkJCSAgcGdwYV9pZGVudGlmaWVyICpyaWQpOworCisjZW5kaWYKZGlmZiAtLWdp dCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9qb2luLmMgYi9jb250cmliL3BnX3BsYW5f YWR2aWNlL3BncGFfam9pbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw Li40NjEwZDAyMzU2ZgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uv cGdwYV9qb2luLmMKQEAgLTAsMCArMSw2MzggQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAq IHBncGFfam9pbi5jCisgKgkgIGFuYWx5c2lzIG9mIGpvaW5zIGluIFBsYW4gdHJlZXMKKyAqCisg KiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyNiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQg R3JvdXAKKyAqCisgKgkgIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9qb2luLmMKKyAqCisg Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1 ZGUgInBncGFfam9pbi5oIgorI2luY2x1ZGUgInBncGFfc2Nhbi5oIgorI2luY2x1ZGUgInBncGFf d2Fsa2VyLmgiCisKKyNpbmNsdWRlICJub2Rlcy9wYXRobm9kZXMuaCIKKyNpbmNsdWRlICJub2Rl cy9wcmludC5oIgorI2luY2x1ZGUgInBhcnNlci9wYXJzZXRyZWUuaCIKKworLyoKKyAqIFRlbXBv cmFyeSBvYmplY3QgdXNlZCB3aGVuIHVucm9sbGluZyBhIGpvaW4gdHJlZS4KKyAqLworc3RydWN0 IHBncGFfam9pbl91bnJvbGxlcgoreworCXVuc2lnbmVkCW5hbGxvY2F0ZWQ7CisJdW5zaWduZWQJ bnVzZWQ7CisJUGxhbgkgICAqb3V0ZXJfc3VicGxhbjsKKwlFbGlkZWROb2RlICpvdXRlcl9lbGlk ZWRfbm9kZTsKKwlib29sCQlvdXRlcl9iZW5lYXRoX2FueV9nYXRoZXI7CisJcGdwYV9qb2luX3N0 cmF0ZWd5ICpzdHJhdGVneTsKKwlQbGFuCSAgKippbm5lcl9zdWJwbGFuczsKKwlFbGlkZWROb2Rl ICoqaW5uZXJfZWxpZGVkX25vZGVzOworCXBncGFfam9pbl91bnJvbGxlciAqKmlubmVyX3Vucm9s bGVyczsKKwlib29sCSAgICppbm5lcl9iZW5lYXRoX2FueV9nYXRoZXI7Cit9OworCitzdGF0aWMg cGdwYV9qb2luX3N0cmF0ZWd5IHBncGFfZGVjb21wb3NlX2pvaW4ocGdwYV9wbGFuX3dhbGtlcl9j b250ZXh0ICp3YWxrZXIsCisJCQkJCQkJCQkJCSAgUGxhbiAqcGxhbiwKKwkJCQkJCQkJCQkJICBQ bGFuICoqcmVhbG91dGVyLAorCQkJCQkJCQkJCQkgIFBsYW4gKipyZWFsaW5uZXIsCisJCQkJCQkJ CQkJCSAgRWxpZGVkTm9kZSAqKmVsaWRlZHJlYWxvdXRlciwKKwkJCQkJCQkJCQkJICBFbGlkZWRO b2RlICoqZWxpZGVkcmVhbGlubmVyLAorCQkJCQkJCQkJCQkgIGJvb2wgKmZvdW5kX2FueV9vdXRl cl9nYXRoZXIsCisJCQkJCQkJCQkJCSAgYm9vbCAqZm91bmRfYW55X2lubmVyX2dhdGhlcik7Citz dGF0aWMgRWxpZGVkTm9kZSAqcGdwYV9kZXNjZW5kX25vZGUoUGxhbm5lZFN0bXQgKnBzdG10LCBQ bGFuICoqcGxhbik7CitzdGF0aWMgRWxpZGVkTm9kZSAqcGdwYV9kZXNjZW5kX2FueV9nYXRoZXIo UGxhbm5lZFN0bXQgKnBzdG10LCBQbGFuICoqcGxhbiwKKwkJCQkJCQkJCQkgICBib29sICpmb3Vu ZF9hbnlfZ2F0aGVyKTsKK3N0YXRpYyBib29sIHBncGFfZGVzY2VuZF9hbnlfdW5pcXVlKFBsYW5u ZWRTdG10ICpwc3RtdCwgUGxhbiAqKnBsYW4sCisJCQkJCQkJCQlFbGlkZWROb2RlICoqZWxpZGVk X25vZGUpOworCitzdGF0aWMgYm9vbCBpc19yZXN1bHRfbm9kZV93aXRoX2NoaWxkKFBsYW4gKnBs YW4pOworc3RhdGljIGJvb2wgaXNfc29ydGluZ19wbGFuKFBsYW4gKnBsYW4pOworCisvKgorICog Q3JlYXRlIGFuIGluaXRpYWxseS1lbXB0eSBvYmplY3QgZm9yIHVucm9sbGluZyBqb2lucy4KKyAq CisgKiBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgYSBoZWxwZXIgb2JqZWN0IHRoYXQgY2FuIGxhdGVy IGJlIHVzZWQgdG8gY3JlYXRlIGEKKyAqIHBncGFfdW5yb2xsZWRfam9pbiwgYWZ0ZXIgZmlyc3Qg Y2FsbGluZyBwZ3BhX3Vucm9sbF9qb2luIG9uZSBvciBtb3JlIHRpbWVzLgorICovCitwZ3BhX2pv aW5fdW5yb2xsZXIgKgorcGdwYV9jcmVhdGVfam9pbl91bnJvbGxlcih2b2lkKQoreworCXBncGFf am9pbl91bnJvbGxlciAqam9pbl91bnJvbGxlcjsKKworCWpvaW5fdW5yb2xsZXIgPSBwYWxsb2Mw X29iamVjdChwZ3BhX2pvaW5fdW5yb2xsZXIpOworCWpvaW5fdW5yb2xsZXItPm5hbGxvY2F0ZWQg PSA0OworCWpvaW5fdW5yb2xsZXItPnN0cmF0ZWd5ID0KKwkJcGFsbG9jX2FycmF5KHBncGFfam9p bl9zdHJhdGVneSwgam9pbl91bnJvbGxlci0+bmFsbG9jYXRlZCk7CisJam9pbl91bnJvbGxlci0+ aW5uZXJfc3VicGxhbnMgPQorCQlwYWxsb2NfYXJyYXkoUGxhbiAqLCBqb2luX3Vucm9sbGVyLT5u YWxsb2NhdGVkKTsKKwlqb2luX3Vucm9sbGVyLT5pbm5lcl9lbGlkZWRfbm9kZXMgPQorCQlwYWxs b2NfYXJyYXkoRWxpZGVkTm9kZSAqLCBqb2luX3Vucm9sbGVyLT5uYWxsb2NhdGVkKTsKKwlqb2lu X3Vucm9sbGVyLT5pbm5lcl91bnJvbGxlcnMgPQorCQlwYWxsb2NfYXJyYXkocGdwYV9qb2luX3Vu cm9sbGVyICosIGpvaW5fdW5yb2xsZXItPm5hbGxvY2F0ZWQpOworCWpvaW5fdW5yb2xsZXItPmlu bmVyX2JlbmVhdGhfYW55X2dhdGhlciA9CisJCXBhbGxvY19hcnJheShib29sLCBqb2luX3Vucm9s bGVyLT5uYWxsb2NhdGVkKTsKKworCXJldHVybiBqb2luX3Vucm9sbGVyOworfQorCisvKgorICog VW5yb2xsIG9uZSBsZXZlbCBvZiBhbiB1bnJvbGxhYmxlIGpvaW4gdHJlZS4KKyAqCisgKiBPdXIg YmFzaWMgZ29hbCBoZXJlIGlzIHRvIHVucm9sbCBqb2luIHRyZWVzIGFzIHRoZXkgb2NjdXIgaW4g dGhlIFBsYW4KKyAqIHRyZWUgaW50byBhIHNpbXBsZXIgYW5kIG1vcmUgcmVndWxhciBzdHJ1Y3R1 cmUgdGhhdCB3ZSBjYW4gbW9yZSBlYXNpbHkKKyAqIHVzZSBmb3IgZnVydGhlciBwcm9jZXNzaW5n LiBVbnJvbGxpbmcgaXMgb3V0ZXItZGVlcCwgc28gaWYgdGhlIHBsYW4gdHJlZQorICogaGFzIEpv aW4xKEpvaW4yKEEsQiksSm9pbjMoQyxEKSksIHRoZSBzYW1lIGpvaW4gdW5yb2xsZXIgb2JqZWN0 IHNob3VsZCBiZQorICogdXNlZCBmb3IgSm9pbjEgYW5kIEpvaW4yLCBidXQgYSBkaWZmZXJlbnQg b25lIHdpbGwgYmUgbmVlZGVkIGZvciBKb2luMywKKyAqIHNpbmNlIHRoYXQgaW52b2x2ZXMgYSBq b2luIHdpdGhpbiB0aGUgKmlubmVyKiBzaWRlIG9mIGFub3RoZXIgam9pbi4KKyAqCisgKiBwZ3Bh X3BsYW5fd2Fsa2VyIGNyZWF0ZXMgYSAidG9wIGxldmVsIiBqb2luIHVucm9sbGVyIG9iamVjdCB3 aGVuIGl0CisgKiBlbmNvdW50ZXJzIGEgam9pbiBpbiBhIHBvcnRpb24gb2YgdGhlIHBsYW4gdHJl ZSBpbiB3aGljaCBubyBqb2luIHVucm9sbGVyCisgKiBpcyBhbHJlYWR5IGFjdGl2ZS4gRnJvbSB0 aGVyZSwgdGhpcyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5nCisgKiB0byB3 aGF0IHBvcnRpb24gb2YgdGhlIHBsYW4gdHJlZSB0aGF0IGpvaW4gdW5yb2xsZXIgYXBwbGllcywg YW5kIGZvcgorICogY3JlYXRpbmcgYW55IHN1Ym9yZGluYXRlIGpvaW4gdW5yb2xsZXIgb2JqZWN0 cyB0aGF0IGFyZSBuZWVkZWQgYXMgYSByZXN1bHQKKyAqIG9mIG5vbi1vdXRlci1kZWVwIGpvaW4g dHJlZXMuIFdlIGRvIHRoaXMgYnkgcmV0dXJuaW5nIHRoZSBqb2luIHVucm9sbGVyCisgKiBvYmpl Y3RzIHRoYXQgc2hvdWxkIGJlIHVzZWQgZm9yIGZ1cnRoZXIgdHJhdmVyc2FsIG9mIHRoZSBvdXRl ciBhbmQgaW5uZXIKKyAqIHN1YnRyZWVzIG9mIHRoZSBjdXJyZW50IHBsYW4gbm9kZSB2aWEgKm91 dGVyX2pvaW5fdW5yb2xsZXIgYW5kCisgKiAqaW5uZXJfam9pbl91bnJvbGxlciwgcmVzcGVjdGl2 ZWx5LgorICovCit2b2lkCitwZ3BhX3Vucm9sbF9qb2luKHBncGFfcGxhbl93YWxrZXJfY29udGV4 dCAqd2Fsa2VyLCBQbGFuICpwbGFuLAorCQkJCSBib29sIGJlbmVhdGhfYW55X2dhdGhlciwKKwkJ CQkgcGdwYV9qb2luX3Vucm9sbGVyICpqb2luX3Vucm9sbGVyLAorCQkJCSBwZ3BhX2pvaW5fdW5y b2xsZXIgKipvdXRlcl9qb2luX3Vucm9sbGVyLAorCQkJCSBwZ3BhX2pvaW5fdW5yb2xsZXIgKipp bm5lcl9qb2luX3Vucm9sbGVyKQoreworCXBncGFfam9pbl9zdHJhdGVneSBzdHJhdGVneTsKKwlQ bGFuCSAgICpyZWFsaW5uZXIsCisJCQkgICAqcmVhbG91dGVyOworCUVsaWRlZE5vZGUgKmVsaWRl ZGlubmVyLAorCQkJICAgKmVsaWRlZG91dGVyOworCWludAkJCW47CisJYm9vbAkJZm91bmRfYW55 X291dGVyX2dhdGhlciA9IGZhbHNlOworCWJvb2wJCWZvdW5kX2FueV9pbm5lcl9nYXRoZXIgPSBm YWxzZTsKKworCUFzc2VydChqb2luX3Vucm9sbGVyICE9IE5VTEwpOworCisJLyoKKwkgKiBXZSBu ZWVkIHRvIHBhc3MgdGhlIGpvaW5fdW5yb2xsZXIgb2JqZWN0IGRvd24gdGhyb3VnaCBjZXJ0YWlu IHR5cGVzIG9mCisJICogcGxhbiBub2RlcyAtLSBhbnl0aGluZyB0aGF0J3MgY29uc2lkZXJlZCBw YXJ0IG9mIHRoZSBqb2luIHN0cmF0ZWd5LCBhbmQKKwkgKiBhbnkgb3RoZXIgbm9kZXMgdGhhdCBj YW4gb2NjdXIgaW4gYSBqb2luIHRyZWUgZGVzcGl0ZSBub3QgYmVpbmcgc2NhbnMKKwkgKiBvciBq b2lucy4KKwkgKgorCSAqIFRoaXMgaW5jbHVkZXM6CisJICoKKwkgKiAoMSkgTWF0ZXJpYWxpemUs IE1lbW9pemUsIGFuZCBIYXNoIG5vZGVzLCB3aGljaCBhcmUgcGFydCBvZiB0aGUgam9pbgorCSAq IHN0cmF0ZWd5LAorCSAqCisJICogKDIpIEdhdGhlciBhbmQgR2F0aGVyIE1lcmdlIG5vZGVzLCB3 aGljaCBjYW4gb2NjdXIgYXQgYW55IHBvaW50IGluIHRoZQorCSAqIGpvaW4gdHJlZSB3aGVyZSB0 aGUgcGxhbm5lciBkZWNpZGVkIHRvIGluaXRpYXRlIHBhcmFsbGVsaXNtLAorCSAqCisJICogKDMp IFNvcnQgYW5kIEluY3JlbWVudGFsU29ydCBub2Rlcywgd2hpY2ggY2FuIG9jY3VyIGJlbmVhdGgg TWVyZ2VKb2luCisJICogb3IgR2F0aGVyTWVyZ2UsCisJICoKKwkgKiAoNCkgQWdnIGFuZCBVbmlx dWUgbm9kZXMsIHdoaWNoIGNhbiBvY2N1ciB3aGVuIHdlIGRlY2lkZSB0byBtYWtlIHRoZQorCSAq IG51bGxhYmxlIHNpZGUgb2YgYSBzZW1pam9pbiB1bmlxdWUgYW5kIHRoZW4gam9pbiB0aGUgcmVz dWx0LCBhbmQKKwkgKgorCSAqICg1KSBSZXN1bHQgbm9kZXMgd2l0aCBjaGlsZHJlbiwgd2hpY2gg Y2FuIGJlIGFkZGVkIGVpdGhlciB0byBwcm9qZWN0IHRvCisJICogZW5mb3JjZSBhIG9uZS10aW1l IGZpbHRlciAoYnV0IFJlc3VsdCBub2RlcyB3aXRob3V0IGNoaWxkcmVuIGFyZQorCSAqIGRlZ2Vu ZXJhdGUgc2NhbnMgb3Igam9pbnMpLgorCSAqLworCWlmIChJc0EocGxhbiwgTWF0ZXJpYWwpIHx8 IElzQShwbGFuLCBNZW1vaXplKSB8fCBJc0EocGxhbiwgSGFzaCkKKwkJfHwgSXNBKHBsYW4sIEdh dGhlcikgfHwgSXNBKHBsYW4sIEdhdGhlck1lcmdlKQorCQl8fCBpc19zb3J0aW5nX3BsYW4ocGxh bikgfHwgSXNBKHBsYW4sIEFnZykgfHwgSXNBKHBsYW4sIFVuaXF1ZSkKKwkJfHwgaXNfcmVzdWx0 X25vZGVfd2l0aF9jaGlsZChwbGFuKSkKKwl7CisJCSpvdXRlcl9qb2luX3Vucm9sbGVyID0gam9p bl91bnJvbGxlcjsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogU2luY2Ugd2UndmUgYWxyZWFk eSBoYW5kbGVkIG5vZGVzIHRoYXQgcmVxdWlyZSBwYXNzLXRocm91Z2ggdHJlYXRtZW50LAorCSAq IHRoaXMgc2hvdWxkIGJlIGFuIHVucm9sbGFibGUgam9pbi4KKwkgKi8KKwlzdHJhdGVneSA9IHBn cGFfZGVjb21wb3NlX2pvaW4od2Fsa2VyLCBwbGFuLAorCQkJCQkJCQkgICAmcmVhbG91dGVyLCAm cmVhbGlubmVyLAorCQkJCQkJCQkgICAmZWxpZGVkb3V0ZXIsICZlbGlkZWRpbm5lciwKKwkJCQkJ CQkJICAgJmZvdW5kX2FueV9vdXRlcl9nYXRoZXIsCisJCQkJCQkJCSAgICZmb3VuZF9hbnlfaW5u ZXJfZ2F0aGVyKTsKKworCS8qIElmIG91ciB3b3Jrc3BhY2UgaXMgZnVsbCwgZXhwYW5kIGl0LiAq LworCWlmIChqb2luX3Vucm9sbGVyLT5udXNlZCA+PSBqb2luX3Vucm9sbGVyLT5uYWxsb2NhdGVk KQorCXsKKwkJam9pbl91bnJvbGxlci0+bmFsbG9jYXRlZCAqPSAyOworCQlqb2luX3Vucm9sbGVy LT5zdHJhdGVneSA9CisJCQlyZXBhbGxvY19hcnJheShqb2luX3Vucm9sbGVyLT5zdHJhdGVneSwK KwkJCQkJCSAgIHBncGFfam9pbl9zdHJhdGVneSwKKwkJCQkJCSAgIGpvaW5fdW5yb2xsZXItPm5h bGxvY2F0ZWQpOworCQlqb2luX3Vucm9sbGVyLT5pbm5lcl9zdWJwbGFucyA9CisJCQlyZXBhbGxv Y19hcnJheShqb2luX3Vucm9sbGVyLT5pbm5lcl9zdWJwbGFucywKKwkJCQkJCSAgIFBsYW4gKiwK KwkJCQkJCSAgIGpvaW5fdW5yb2xsZXItPm5hbGxvY2F0ZWQpOworCQlqb2luX3Vucm9sbGVyLT5p bm5lcl9lbGlkZWRfbm9kZXMgPQorCQkJcmVwYWxsb2NfYXJyYXkoam9pbl91bnJvbGxlci0+aW5u ZXJfZWxpZGVkX25vZGVzLAorCQkJCQkJICAgRWxpZGVkTm9kZSAqLAorCQkJCQkJICAgam9pbl91 bnJvbGxlci0+bmFsbG9jYXRlZCk7CisJCWpvaW5fdW5yb2xsZXItPmlubmVyX2JlbmVhdGhfYW55 X2dhdGhlciA9CisJCQlyZXBhbGxvY19hcnJheShqb2luX3Vucm9sbGVyLT5pbm5lcl9iZW5lYXRo X2FueV9nYXRoZXIsCisJCQkJCQkgICBib29sLAorCQkJCQkJICAgam9pbl91bnJvbGxlci0+bmFs bG9jYXRlZCk7CisJCWpvaW5fdW5yb2xsZXItPmlubmVyX3Vucm9sbGVycyA9CisJCQlyZXBhbGxv Y19hcnJheShqb2luX3Vucm9sbGVyLT5pbm5lcl91bnJvbGxlcnMsCisJCQkJCQkgICBwZ3BhX2pv aW5fdW5yb2xsZXIgKiwKKwkJCQkJCSAgIGpvaW5fdW5yb2xsZXItPm5hbGxvY2F0ZWQpOworCX0K KworCS8qCisJICogU2luY2Ugd2UncmUgZmxhdHRlbmluZyBvdXRlci1kZWVwIGpvaW4gdHJlZXMs IGl0IGZvbGxvd3MgdGhhdCBpZiB0aGUKKwkgKiBvdXRlciBzaWRlIGlzIHN0aWxsIGFuIHVucm9s bGFibGUgam9pbiwgaXQgc2hvdWxkIGJlIHVucm9sbGVkIGludG8gdGhpcworCSAqIHNhbWUgb2Jq ZWN0LiBPdGhlcndpc2UsIHdlJ3ZlIHJlYWNoZWQgdGhlIGxpbWl0IG9mIHdoYXQgd2UgY2FuIHVu cm9sbAorCSAqIGludG8gdGhpcyBvYmplY3QgYW5kIG11c3QgcmVtZW1iZXIgdGhlIG91dGVyIHNp ZGUgYXMgdGhlIGZpbmFsIG91dGVyCisJICogc3VicGxhbi4KKwkgKi8KKwlpZiAoZWxpZGVkb3V0 ZXIgPT0gTlVMTCAmJiBwZ3BhX2lzX2pvaW4ocmVhbG91dGVyKSkKKwkJKm91dGVyX2pvaW5fdW5y b2xsZXIgPSBqb2luX3Vucm9sbGVyOworCWVsc2UKKwl7CisJCWpvaW5fdW5yb2xsZXItPm91dGVy X3N1YnBsYW4gPSByZWFsb3V0ZXI7CisJCWpvaW5fdW5yb2xsZXItPm91dGVyX2VsaWRlZF9ub2Rl ID0gZWxpZGVkb3V0ZXI7CisJCWpvaW5fdW5yb2xsZXItPm91dGVyX2JlbmVhdGhfYW55X2dhdGhl ciA9CisJCQliZW5lYXRoX2FueV9nYXRoZXIgfHwgZm91bmRfYW55X291dGVyX2dhdGhlcjsKKwl9 CisKKwkvKgorCSAqIFN0b3JlIHRoZSBpbm5lciBzdWJwbGFuLiBJZiBpdCdzIGFuIHVucm9sbGFi bGUgam9pbiwgaXQgbmVlZHMgdG8gYmUKKwkgKiBmbGF0dGVuZWQgaW4gdHVybiwgYnV0IGludG8g YSBuZXcgdW5yb2xsZXIgb2JqZWN0LCBub3QgdGhpcyBvbmUuCisJICovCisJbiA9IGpvaW5fdW5y b2xsZXItPm51c2VkKys7CisJam9pbl91bnJvbGxlci0+c3RyYXRlZ3lbbl0gPSBzdHJhdGVneTsK Kwlqb2luX3Vucm9sbGVyLT5pbm5lcl9zdWJwbGFuc1tuXSA9IHJlYWxpbm5lcjsKKwlqb2luX3Vu cm9sbGVyLT5pbm5lcl9lbGlkZWRfbm9kZXNbbl0gPSBlbGlkZWRpbm5lcjsKKwlqb2luX3Vucm9s bGVyLT5pbm5lcl9iZW5lYXRoX2FueV9nYXRoZXJbbl0gPQorCQliZW5lYXRoX2FueV9nYXRoZXIg fHwgZm91bmRfYW55X2lubmVyX2dhdGhlcjsKKwlpZiAoZWxpZGVkaW5uZXIgPT0gTlVMTCAmJiBw Z3BhX2lzX2pvaW4ocmVhbGlubmVyKSkKKwkJKmlubmVyX2pvaW5fdW5yb2xsZXIgPSBwZ3BhX2Ny ZWF0ZV9qb2luX3Vucm9sbGVyKCk7CisJZWxzZQorCQkqaW5uZXJfam9pbl91bnJvbGxlciA9IE5V TEw7CisJam9pbl91bnJvbGxlci0+aW5uZXJfdW5yb2xsZXJzW25dID0gKmlubmVyX2pvaW5fdW5y b2xsZXI7Cit9CisKKy8qCisgKiBVc2UgdGhlIGRhdGEgd2UndmUgYWNjdW11bGF0ZWQgaW4gYSBw Z3BhX2pvaW5fdW5yb2xsZXIgb2JqZWN0IHRvIGNvbnN0cnVjdAorICogYSBwZ3BhX3Vucm9sbGVk X2pvaW4uCisgKi8KK3BncGFfdW5yb2xsZWRfam9pbiAqCitwZ3BhX2J1aWxkX3Vucm9sbGVkX2pv aW4ocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsCisJCQkJCQkgcGdwYV9qb2luX3Vu cm9sbGVyICpqb2luX3Vucm9sbGVyKQoreworCXBncGFfdW5yb2xsZWRfam9pbiAqdWpvaW47CisJ aW50CQkJaTsKKworCS8qCisJICogV2Ugc2hvdWxkbid0IGhhdmUgZ29uZSBldmVuIHNvIGZhciBh cyB0byBjcmVhdGUgYSBqb2luIHVucm9sbGVyIHVubGVzcworCSAqIHdlIGZvdW5kIGF0IGxlYXN0 IG9uZSB1bnJvbGxhYmxlIGpvaW4uCisJICovCisJQXNzZXJ0KGpvaW5fdW5yb2xsZXItPm51c2Vk ID4gMCk7CisKKwkvKiBBbGxvY2F0ZSByZXN1bHQgc3RydWN0dXJlcy4gKi8KKwl1am9pbiA9IHBh bGxvYzBfb2JqZWN0KHBncGFfdW5yb2xsZWRfam9pbik7CisJdWpvaW4tPm5pbm5lciA9IGpvaW5f dW5yb2xsZXItPm51c2VkOworCXVqb2luLT5zdHJhdGVneSA9IHBhbGxvYzBfYXJyYXkocGdwYV9q b2luX3N0cmF0ZWd5LCBqb2luX3Vucm9sbGVyLT5udXNlZCk7CisJdWpvaW4tPmlubmVyID0gcGFs bG9jMF9hcnJheShwZ3BhX2pvaW5fbWVtYmVyLCBqb2luX3Vucm9sbGVyLT5udXNlZCk7CisKKwkv KiBIYW5kbGUgdGhlIG91dGVybW9zdCBqb2luLiAqLworCXVqb2luLT5vdXRlci5wbGFuID0gam9p bl91bnJvbGxlci0+b3V0ZXJfc3VicGxhbjsKKwl1am9pbi0+b3V0ZXIuZWxpZGVkX25vZGUgPSBq b2luX3Vucm9sbGVyLT5vdXRlcl9lbGlkZWRfbm9kZTsKKwl1am9pbi0+b3V0ZXIuc2NhbiA9CisJ CXBncGFfYnVpbGRfc2Nhbih3YWxrZXIsIHVqb2luLT5vdXRlci5wbGFuLAorCQkJCQkJdWpvaW4t Pm91dGVyLmVsaWRlZF9ub2RlLAorCQkJCQkJam9pbl91bnJvbGxlci0+b3V0ZXJfYmVuZWF0aF9h bnlfZ2F0aGVyLAorCQkJCQkJdHJ1ZSk7CisKKwkvKgorCSAqIFdlIHdhbnQgdGhlIGpvaW5zIGZy b20gdGhlIGRlZXBlc3QgcGFydCBvZiB0aGUgcGxhbiB0cmVlIHRvIGFwcGVhcgorCSAqIGZpcnN0 IGluIHRoZSByZXN1bHQgb2JqZWN0LCBidXQgdGhlIGpvaW4gdW5yb2xsZXIgYWRkcyB0aGVtIGlu IGV4YWN0bHkKKwkgKiB0aGUgcmV2ZXJzZSBvZiB0aGF0IG9yZGVyLCBzbyB3ZSBuZWVkIHRvIGZs aXAgdGhlIG9yZGVyIG9mIHRoZSBhcnJheXMKKwkgKiB3aGVuIGNvbnN0cnVjdGluZyB0aGUgZmlu YWwgcmVzdWx0LgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBqb2luX3Vucm9sbGVyLT5udXNlZDsg KytpKQorCXsKKwkJaW50CQkJayA9IGpvaW5fdW5yb2xsZXItPm51c2VkIC0gaSAtIDE7CisKKwkJ LyogQ29weSBzdHJhdGVneSwgUGxhbiwgYW5kIEVsaWRlZE5vZGUuICovCisJCXVqb2luLT5zdHJh dGVneVtpXSA9IGpvaW5fdW5yb2xsZXItPnN0cmF0ZWd5W2tdOworCQl1am9pbi0+aW5uZXJbaV0u cGxhbiA9IGpvaW5fdW5yb2xsZXItPmlubmVyX3N1YnBsYW5zW2tdOworCQl1am9pbi0+aW5uZXJb aV0uZWxpZGVkX25vZGUgPSBqb2luX3Vucm9sbGVyLT5pbm5lcl9lbGlkZWRfbm9kZXNba107CisK KwkJLyoKKwkJICogRmlsbCBpbiByZW1haW5pbmcgZGV0YWlscywgdXNpbmcgZWl0aGVyIHRoZSBu ZXN0ZWQgam9pbiB1bnJvbGxlciwKKwkJICogb3IgYnkgZGVyaXZpbmcgdGhlbSBmcm9tIHRoZSBw bGFuIGFuZCBlbGlkZWQgbm9kZXMuCisJCSAqLworCQlpZiAoam9pbl91bnJvbGxlci0+aW5uZXJf dW5yb2xsZXJzW2tdICE9IE5VTEwpCisJCQl1am9pbi0+aW5uZXJbaV0udW5yb2xsZWRfam9pbiA9 CisJCQkJcGdwYV9idWlsZF91bnJvbGxlZF9qb2luKHdhbGtlciwKKwkJCQkJCQkJCQkgam9pbl91 bnJvbGxlci0+aW5uZXJfdW5yb2xsZXJzW2tdKTsKKwkJZWxzZQorCQkJdWpvaW4tPmlubmVyW2ld LnNjYW4gPQorCQkJCXBncGFfYnVpbGRfc2Nhbih3YWxrZXIsIHVqb2luLT5pbm5lcltpXS5wbGFu LAorCQkJCQkJCQl1am9pbi0+aW5uZXJbaV0uZWxpZGVkX25vZGUsCisJCQkJCQkJCWpvaW5fdW5y b2xsZXItPmlubmVyX2JlbmVhdGhfYW55X2dhdGhlcltrXSwKKwkJCQkJCQkJdHJ1ZSk7CisJfQor CisJcmV0dXJuIHVqb2luOworfQorCisvKgorICogRnJlZSBtZW1vcnkgYWxsb2NhdGVkIGZvciBw Z3BhX2pvaW5fdW5yb2xsZXIuCisgKi8KK3ZvaWQKK3BncGFfZGVzdHJveV9qb2luX3Vucm9sbGVy KHBncGFfam9pbl91bnJvbGxlciAqam9pbl91bnJvbGxlcikKK3sKKwlwZnJlZShqb2luX3Vucm9s bGVyLT5zdHJhdGVneSk7CisJcGZyZWUoam9pbl91bnJvbGxlci0+aW5uZXJfc3VicGxhbnMpOwor CXBmcmVlKGpvaW5fdW5yb2xsZXItPmlubmVyX2VsaWRlZF9ub2Rlcyk7CisJcGZyZWUoam9pbl91 bnJvbGxlci0+aW5uZXJfdW5yb2xsZXJzKTsKKwlwZnJlZShqb2luX3Vucm9sbGVyLT5pbm5lcl9i ZW5lYXRoX2FueV9nYXRoZXIpOworCXBmcmVlKGpvaW5fdW5yb2xsZXIpOworfQorCisvKgorICog SWRlbnRpZnkgdGhlIGpvaW4gc3RyYXRlZ3kgdXNlZCBieSBhIGpvaW4gYW5kIHRoZSAicmVhbCIg aW5uZXIgYW5kIG91dGVyCisgKiBwbGFucy4KKyAqCisgKiBGb3IgZXhhbXBsZSwgYSBIYXNoIEpv aW4gYWx3YXlzIGhhcyBhIEhhc2ggbm9kZSBvbiB0aGUgaW5uZXIgc2lkZSwgYnV0CisgKiBmb3Ig YWxsIGludGVudHMgYW5kIHB1cnBvc2VzIHRoZSByZWFsIGlubmVyIGlucHV0IGlzIHRoZSBIYXNo IG5vZGUncyBjaGlsZCwKKyAqIG5vdCB0aGUgSGFzaCBub2RlIGl0c2VsZi4KKyAqCisgKiBMaWtl d2lzZSwgYSBNZXJnZSBKb2luIG1heSBoYXZlIFNvcnQgbm9kZSBvbiB0aGUgaW5uZXIgb3Igb3V0 ZXIgc2lkZTsgaWYKKyAqIGl0IGRvZXMsIHRoZSByZWFsIGlucHV0IHRvIHRoZSBqb2luIGlzIHRo ZSBTb3J0IG5vZGUncyBjaGlsZCwgbm90IHRoZQorICogU29ydCBub2RlIGl0c2VsZi4KKyAqCisg KiBJbiBhZGRpdGlvbiwgd2l0aCBhIE1lcmdlIEpvaW4gb3IgYSBOZXN0ZWQgTG9vcCwgdGhlIGpv aW4gcGxhbm5pbmcgY29kZQorICogbWF5IGFkZCBhZGRpdGlvbmFsIG5vZGVzIHN1Y2ggYXMgTWF0 ZXJpYWxpemUgb3IgTWVtb2l6ZS4gV2UgcmVnYXJkIHRoZXNlCisgKiBhcyBhbiBhc3BlY3Qgb2Yg dGhlIGpvaW4gc3RyYXRlZ3kuIEFzIGluIHRoZSBwcmV2aW91cyBjYXNlcywgdGhlIHRydWUgaW5w dXQKKyAqIHRvIHRoZSBqb2luIGlzIHRoZSB1bmRlcmx5aW5nIG5vZGUuCisgKgorICogSG93ZXZl ciwgaWYgYW55IGludm9sdmVkIGNoaWxkIG5vZGUgcHJldmlvdXNseSBoYWQgYSBub3ctZWxpZGVk IG5vZGUgc3RhY2tlZAorICogb24gdG9wLCB0aGVuIHdlIGNhbid0ICJsb29rIHRocm91Z2giIHRo YXQgbm9kZSAtLSBpbmRlZWQsIHdoYXQncyBnb2luZyB0byBiZQorICogcmVsZXZhbnQgZm9yIG91 ciBwdXJwb3NlcyBpcyB0aGUgRWxpZGVkTm9kZSBvbiB0b3Agb2YgdGhhdCBwbGFuIG5vZGUsIHJh dGhlcgorICogdGhhbiB0aGUgcGxhbiBub2RlIGl0c2VsZi4KKyAqCisgKiBJZiB0aGVyZSBhcmUg bXVsdGlwbGUgZWxpZGVkIG5vZGVzLCB3ZSB3YW50IHRoYXQgb25lIHRoYXQgd291bGQgaGF2ZSBi ZWVuCisgKiB1cHBlcm1vc3QgaW4gdGhlIHBsYW4gdHJlZSBwcmlvciB0byBzZXRyZWZzIHByb2Nl c3Npbmc7IHdlIGV4cGVjdCB0byBmaW5kCisgKiB0aGF0IG9uZSBsYXN0IGluIHRoZSBsaXN0IG9m IGVsaWRlZCBub2Rlcy4KKyAqCisgKiBPbiByZXR1cm4gKnJlYWxvdXRlciBhbmQgKnJlYWxpbm5l ciB3aWxsIGhhdmUgYmVlbiBzZXQgdG8gdGhlIHJlYWwgaW5uZXIKKyAqIGFuZCByZWFsIG91dGVy IHBsYW5zIHRoYXQgd2UgaWRlbnRpZmllZCwgYW5kICplbGlkZWRyZWFsb3V0ZXIgYW5kCisgKiAq ZWxpZGVkcmVhbGlubmVyIHRvIHRoZSBsYXN0IG9mIGFueSBjb3JyZXNwb25kaW5nIGVsaWRlZCBu b2Rlcy4KKyAqIEFkZGl0aW9uYWxseSwgKmZvdW5kX2FueV9vdXRlcl9nYXRoZXIgYW5kICpmb3Vu ZF9hbnlfaW5uZXJfZ2F0aGVyIHdpbGwKKyAqIGJlIHNldCB0byB0cnVlIGlmIHdlIGxvb2tlZCB0 aHJvdWdoIGEgR2F0aGVyIG9yIEdhdGhlciBNZXJnZSBub2RlIG9uCisgKiB0aGF0IHNpZGUgb2Yg dGhlIGpvaW4sIGFuZCBmYWxzZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBwZ3BhX2pvaW5fc3Ry YXRlZ3kKK3BncGFfZGVjb21wb3NlX2pvaW4ocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxr ZXIsIFBsYW4gKnBsYW4sCisJCQkJCVBsYW4gKipyZWFsb3V0ZXIsIFBsYW4gKipyZWFsaW5uZXIs CisJCQkJCUVsaWRlZE5vZGUgKiplbGlkZWRyZWFsb3V0ZXIsIEVsaWRlZE5vZGUgKiplbGlkZWRy ZWFsaW5uZXIsCisJCQkJCWJvb2wgKmZvdW5kX2FueV9vdXRlcl9nYXRoZXIsIGJvb2wgKmZvdW5k X2FueV9pbm5lcl9nYXRoZXIpCit7CisJUGxhbm5lZFN0bXQgKnBzdG10ID0gd2Fsa2VyLT5wc3Rt dDsKKwlKb2luVHlwZQlqb2ludHlwZSA9ICgoSm9pbiAqKSBwbGFuKS0+am9pbnR5cGU7CisJUGxh bgkgICAqb3V0ZXJwbGFuID0gcGxhbi0+bGVmdHRyZWU7CisJUGxhbgkgICAqaW5uZXJwbGFuID0g cGxhbi0+cmlnaHR0cmVlOworCUVsaWRlZE5vZGUgKmVsaWRlZG91dGVyOworCUVsaWRlZE5vZGUg KmVsaWRlZGlubmVyOworCXBncGFfam9pbl9zdHJhdGVneSBzdHJhdGVneTsKKwlib29sCQl1bmlx dWVvdXRlcjsKKwlib29sCQl1bmlxdWVpbm5lcjsKKworCWVsaWRlZG91dGVyID0gcGdwYV9sYXN0 X2VsaWRlZF9ub2RlKHBzdG10LCBvdXRlcnBsYW4pOworCWVsaWRlZGlubmVyID0gcGdwYV9sYXN0 X2VsaWRlZF9ub2RlKHBzdG10LCBpbm5lcnBsYW4pOworCSpmb3VuZF9hbnlfb3V0ZXJfZ2F0aGVy ID0gZmFsc2U7CisJKmZvdW5kX2FueV9pbm5lcl9nYXRoZXIgPSBmYWxzZTsKKworCXN3aXRjaCAo bm9kZVRhZyhwbGFuKSkKKwl7CisJCWNhc2UgVF9NZXJnZUpvaW46CisKKwkJCS8qCisJCQkgKiBU aGUgcGxhbm5lciBtYXkgaGF2ZSBjaG9zZW4gdG8gcGxhY2UgYSBNYXRlcmlhbCBub2RlIG9uIHRo ZQorCQkJICogaW5uZXIgc2lkZSBvZiB0aGUgTWVyZ2VKb2luOyBpZiB0aGlzIGlzIHByZXNlbnQs IHdlIHJlY29yZCBpdAorCQkJICogYXMgcGFydCBvZiB0aGUgam9pbiBzdHJhdGVneS4KKwkJCSAq LworCQkJaWYgKGVsaWRlZGlubmVyID09IE5VTEwgJiYgSXNBKGlubmVycGxhbiwgTWF0ZXJpYWwp KQorCQkJeworCQkJCWVsaWRlZGlubmVyID0gcGdwYV9kZXNjZW5kX25vZGUocHN0bXQsICZpbm5l cnBsYW4pOworCQkJCXN0cmF0ZWd5ID0gSlNUUkFUX01FUkdFX0pPSU5fTUFURVJJQUxJWkU7CisJ CQl9CisJCQllbHNlCisJCQkJc3RyYXRlZ3kgPSBKU1RSQVRfTUVSR0VfSk9JTl9QTEFJTjsKKwor CQkJLyoKKwkJCSAqIEZvciBhIE1lcmdlSm9pbiwgZWl0aGVyIHRoZSBvdXRlciBvciB0aGUgaW5u ZXIgc3VicGxhbiwgb3IKKwkJCSAqIGJvdGgsIG1heSBoYXZlIG5lZWRlZCB0byBiZSBzb3J0ZWQ7 IHdlIG11c3QgZGlzcmVnYXJkIGFueSBTb3J0CisJCQkgKiBvciBJbmNyZW1lbnRhbFNvcnQgbm9k ZSB0byBmaW5kIHRoZSByZWFsIGlubmVyIG9yIG91dGVyCisJCQkgKiBzdWJwbGFuLgorCQkJICov CisJCQlpZiAoZWxpZGVkb3V0ZXIgPT0gTlVMTCAmJiBpc19zb3J0aW5nX3BsYW4ob3V0ZXJwbGFu KSkKKwkJCQllbGlkZWRvdXRlciA9IHBncGFfZGVzY2VuZF9ub2RlKHBzdG10LCAmb3V0ZXJwbGFu KTsKKwkJCWlmIChlbGlkZWRpbm5lciA9PSBOVUxMICYmIGlzX3NvcnRpbmdfcGxhbihpbm5lcnBs YW4pKQorCQkJCWVsaWRlZGlubmVyID0gcGdwYV9kZXNjZW5kX25vZGUocHN0bXQsICZpbm5lcnBs YW4pOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX05lc3RMb29wOgorCisJCQkvKgorCQkJICogVGhl IHBsYW5uZXIgbWF5IGhhdmUgY2hvc2VuIHRvIHBsYWNlIGEgTWF0ZXJpYWwgb3IgTWVtb2l6ZSBu b2RlCisJCQkgKiBvbiB0aGUgaW5uZXIgc2lkZSBvZiB0aGUgTmVzdExvb3A7IGlmIHRoaXMgaXMg cHJlc2VudCwgd2UKKwkJCSAqIHJlY29yZCBpdCBhcyBwYXJ0IG9mIHRoZSBqb2luIHN0cmF0ZWd5 LgorCQkJICovCisJCQlpZiAoZWxpZGVkaW5uZXIgPT0gTlVMTCAmJiBJc0EoaW5uZXJwbGFuLCBN YXRlcmlhbCkpCisJCQl7CisJCQkJZWxpZGVkaW5uZXIgPSBwZ3BhX2Rlc2NlbmRfbm9kZShwc3Rt dCwgJmlubmVycGxhbik7CisJCQkJc3RyYXRlZ3kgPSBKU1RSQVRfTkVTVEVEX0xPT1BfTUFURVJJ QUxJWkU7CisJCQl9CisJCQllbHNlIGlmIChlbGlkZWRpbm5lciA9PSBOVUxMICYmIElzQShpbm5l cnBsYW4sIE1lbW9pemUpKQorCQkJeworCQkJCWVsaWRlZGlubmVyID0gcGdwYV9kZXNjZW5kX25v ZGUocHN0bXQsICZpbm5lcnBsYW4pOworCQkJCXN0cmF0ZWd5ID0gSlNUUkFUX05FU1RFRF9MT09Q X01FTU9JWkU7CisJCQl9CisJCQllbHNlCisJCQkJc3RyYXRlZ3kgPSBKU1RSQVRfTkVTVEVEX0xP T1BfUExBSU47CisJCQlicmVhazsKKworCQljYXNlIFRfSGFzaEpvaW46CisKKwkJCS8qCisJCQkg KiBUaGUgaW5uZXIgc3VicGxhbiBvZiBhIEhhc2hKb2luIGlzIGFsd2F5cyBhIEhhc2ggbm9kZTsg dGhlIHJlYWwKKwkJCSAqIGlubmVyIHN1YnBsYW4gaXMgdGhlIEhhc2ggbm9kZSdzIGNoaWxkLgor CQkJICovCisJCQlBc3NlcnQoSXNBKGlubmVycGxhbiwgSGFzaCkpOworCQkJQXNzZXJ0KGVsaWRl ZGlubmVyID09IE5VTEwpOworCQkJZWxpZGVkaW5uZXIgPSBwZ3BhX2Rlc2NlbmRfbm9kZShwc3Rt dCwgJmlubmVycGxhbik7CisJCQlzdHJhdGVneSA9IEpTVFJBVF9IQVNIX0pPSU47CisJCQlicmVh azsKKworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCBub2RlIHR5cGU6 ICVkIiwgKGludCkgbm9kZVRhZyhwbGFuKSk7CisJfQorCisJLyoKKwkgKiBUaGUgcGxhbm5lciBt YXkgaGF2ZSBkZWNpZGVkIHRvIGltcGxlbWVudCBhIHNlbWlqb2luIGJ5IGZpcnN0IG1ha2luZwor CSAqIHRoZSBudWxsYWJsZSBzaWRlIG9mIHRoZSBwbGFuIHVuaXF1ZSwgYW5kIHRoZW4gcGVyZm9y bWluZyBhIG5vcm1hbCBqb2luCisJICogYWdhaW5zdCB0aGUgcmVzdWx0LiBUaGVyZWZvcmUsIHdl IG1pZ2h0IG5lZWQgdG8gZGVzY2VuZCB0aHJvdWdoIGEKKwkgKiB1bmlxdWUgbm9kZSBvbiBlaXRo ZXIgc2lkZSBvZiB0aGUgcGxhbi4KKwkgKi8KKwl1bmlxdWVvdXRlciA9IHBncGFfZGVzY2VuZF9h bnlfdW5pcXVlKHBzdG10LCAmb3V0ZXJwbGFuLCAmZWxpZGVkb3V0ZXIpOworCXVuaXF1ZWlubmVy ID0gcGdwYV9kZXNjZW5kX2FueV91bmlxdWUocHN0bXQsICZpbm5lcnBsYW4sICZlbGlkZWRpbm5l cik7CisKKwkvKgorCSAqIENhbiB3ZSBzZWUgYSBSZXN1bHQgbm9kZSBoZXJlLCB0byBwcm9qZWN0 IGFib3ZlIGEgR2F0aGVyPyBTbyBmYXIgSSd2ZQorCSAqIGZvdW5kIG5vIGV4YW1wbGUgdGhhdCBi ZWhhdmVzIHRoYXQgd2F5OyByYXRoZXIsIHRoZSBHYXRoZXIgb3IgR2F0aGVyCisJICogTWVyZ2Ug aXMgbWFkZSB0byBwcm9qZWN0LiBIZW5jZSwgZG9uJ3QgdGVzdCBpc19yZXN1bHRfbm9kZV93aXRo X2NoaWxkKCkKKwkgKiBhdCB0aGlzIHBvaW50LgorCSAqLworCisJLyoKKwkgKiBUaGUgcGxhbm5l ciBtYXkgaGF2ZSBkZWNpZGVkIHRvIHBhcmFsbGVsaXplIHBhcnQgb2YgdGhlIGpvaW4gdHJlZSwg c28KKwkgKiB3ZSBjb3VsZCBmaW5kIGEgR2F0aGVyIG9yIEdhdGhlciBNZXJnZSBub2RlIGhlcmUu IE5vdGUgdGhhdCwgaWYKKwkgKiBwcmVzZW50LCB0aGlzIHdpbGwgYXBwZWFyIGJlbG93IG5vZGVz IHdlIGNvbnNpZGVyZWQgYXMgcGFydCBvZiB0aGUgam9pbgorCSAqIHN0cmF0ZWd5LCBidXQgd2Ug Y291bGQgZmluZCBhbm90aGVyIHVuaXF1ZW5lc3MtZW5mb3JjaW5nIG5vZGUgYmVsb3cgdGhlCisJ ICogR2F0aGVyIG9yIEdhdGhlciBNZXJnZSwgaWYgcHJlc2VudC4KKwkgKi8KKwlpZiAoZWxpZGVk b3V0ZXIgPT0gTlVMTCkKKwl7CisJCWVsaWRlZG91dGVyID0gcGdwYV9kZXNjZW5kX2FueV9nYXRo ZXIocHN0bXQsICZvdXRlcnBsYW4sCisJCQkJCQkJCQkJCSAgZm91bmRfYW55X291dGVyX2dhdGhl cik7CisJCWlmICgqZm91bmRfYW55X291dGVyX2dhdGhlciAmJgorCQkJcGdwYV9kZXNjZW5kX2Fu eV91bmlxdWUocHN0bXQsICZvdXRlcnBsYW4sICZlbGlkZWRvdXRlcikpCisJCQl1bmlxdWVvdXRl ciA9IHRydWU7CisJfQorCWlmIChlbGlkZWRpbm5lciA9PSBOVUxMKQorCXsKKwkJZWxpZGVkaW5u ZXIgPSBwZ3BhX2Rlc2NlbmRfYW55X2dhdGhlcihwc3RtdCwgJmlubmVycGxhbiwKKwkJCQkJCQkJ CQkJICBmb3VuZF9hbnlfaW5uZXJfZ2F0aGVyKTsKKwkJaWYgKCpmb3VuZF9hbnlfaW5uZXJfZ2F0 aGVyICYmCisJCQlwZ3BhX2Rlc2NlbmRfYW55X3VuaXF1ZShwc3RtdCwgJmlubmVycGxhbiwgJmVs aWRlZGlubmVyKSkKKwkJCXVuaXF1ZWlubmVyID0gdHJ1ZTsKKwl9CisKKwkvKgorCSAqIEl0J3Mg cG9zc2libGUgdGhhdCBhIFJlc3VsdCBub2RlIGhhcyBiZWVuIGluc2VydGVkIGVpdGhlciB0byBw cm9qZWN0IGEKKwkgKiB0YXJnZXQgbGlzdCBvciB0byBpbXBsZW1lbnQgYSBvbmUtdGltZSBmaWx0 ZXIuIElmIHNvLCB3ZSBjYW4gZGVzY2VuZAorCSAqIHRocm91Z2ggaXQuIE5vdGUgdGhhdCBhIFJl c3VsdCBub2RlIHdpdGhvdXQgYSBjaGlsZCB3b3VsZCBiZSBhCisJICogZGVnZW5lcmF0ZSBzY2Fu IG9yIGpvaW4sIGFuZCBub3Qgc29tZXRoaW5nIHdlIGNvdWxkIGRlc2NlbmQgdGhyb3VnaC4KKwkg Ki8KKwlpZiAoZWxpZGVkb3V0ZXIgPT0gTlVMTCAmJiBpc19yZXN1bHRfbm9kZV93aXRoX2NoaWxk KG91dGVycGxhbikpCisJCWVsaWRlZG91dGVyID0gcGdwYV9kZXNjZW5kX25vZGUocHN0bXQsICZv dXRlcnBsYW4pOworCWlmIChlbGlkZWRpbm5lciA9PSBOVUxMICYmIGlzX3Jlc3VsdF9ub2RlX3dp dGhfY2hpbGQoaW5uZXJwbGFuKSkKKwkJZWxpZGVkaW5uZXIgPSBwZ3BhX2Rlc2NlbmRfbm9kZShw c3RtdCwgJmlubmVycGxhbik7CisKKwkvKgorCSAqIElmIHRoaXMgaXMgYSBzZW1pam9pbiB0aGF0 IHdhcyBjb252ZXJ0ZWQgdG8gYW4gaW5uZXIgam9pbiBieSBtYWtpbmcgb25lCisJICogc2lkZSBv ciB0aGUgb3RoZXIgdW5pcXVlLCBtYWtlIGEgbm90ZSB0aGF0IHRoZSBpbm5lciBvciBvdXRlciBz dWJwbGFuLAorCSAqIGFzIGFwcHJvcHJpYXRlLCBzaG91bGQgYmUgdHJlYXRlZCBhcyBhIHF1ZXJ5 IHBsYW4gZmVhdHVyZSB3aGVuIHRoZSBtYWluCisJICogdHJlZSB0cmF2ZXJzYWwgcmVhY2hlcyBp dC4KKwkgKgorCSAqIENvbnZlcnNlbHksIGlmIHRoZSBwbGFubmVyIGNvdWxkIGhhdmUgbWFkZSBv bmUgc2lkZSBvZiB0aGUgam9pbiB1bmlxdWUKKwkgKiBhbmQgdGhlcmVieSBjb252ZXJ0ZWQgaXQg dG8gYW4gaW5uZXIgam9pbiwgYW5kIGNob3NlIG5vdCB0byBkbyBzbywgdGhhdAorCSAqIGlzIGFs c28gd29ydGggbm90aW5nLgorCSAqCisJICogTkI6IFRoaXMgY29kZSBjb3VsZCBhcHBlYXIgc2xp Z2h0bHkgaGlnaGVyIHVwIGluIHRoaXMgZnVuY3Rpb24sIGJ1dAorCSAqIG5vbmUgb2YgdGhlIG5v ZGVzIHRocm91Z2ggd2hpY2ggd2UganVzdCBkZXNjZW5kZWQgc2hvdWxkIGhhdmUKKwkgKiBhc3Nv Y2lhdGVkIFJUSXMuCisJICoKKwkgKiBOQjogVGhpcyBzZWVtcyBsaWtlIGEgc29tZXdoYXQgaGFj a3kgd2F5IG9mIHBhc3NpbmcgaW5mb3JtYXRpb24gdXAgdG8KKwkgKiB0aGUgbWFpbiB0cmVlIHdh bGssIGJ1dCBJIGRvbid0IGN1cnJlbnRseSBoYXZlIGEgYmV0dGVyIGlkZWEuCisJICovCisJaWYg KHVuaXF1ZW91dGVyKQorCQlwZ3BhX2FkZF9mdXR1cmVfZmVhdHVyZSh3YWxrZXIsIFBHUEFRRl9T RU1JSk9JTl9VTklRVUUsIG91dGVycGxhbik7CisJZWxzZSBpZiAoam9pbnR5cGUgPT0gSk9JTl9S SUdIVF9TRU1JKQorCQlwZ3BhX2FkZF9mdXR1cmVfZmVhdHVyZSh3YWxrZXIsIFBHUEFRRl9TRU1J Sk9JTl9OT05fVU5JUVVFLCBvdXRlcnBsYW4pOworCWlmICh1bmlxdWVpbm5lcikKKwkJcGdwYV9h ZGRfZnV0dXJlX2ZlYXR1cmUod2Fsa2VyLCBQR1BBUUZfU0VNSUpPSU5fVU5JUVVFLCBpbm5lcnBs YW4pOworCWVsc2UgaWYgKGpvaW50eXBlID09IEpPSU5fU0VNSSkKKwkJcGdwYV9hZGRfZnV0dXJl X2ZlYXR1cmUod2Fsa2VyLCBQR1BBUUZfU0VNSUpPSU5fTk9OX1VOSVFVRSwgaW5uZXJwbGFuKTsK KworCS8qIFNldCBvdXRwdXQgcGFyYW1ldGVycy4gKi8KKwkqcmVhbG91dGVyID0gb3V0ZXJwbGFu OworCSpyZWFsaW5uZXIgPSBpbm5lcnBsYW47CisJKmVsaWRlZHJlYWxvdXRlciA9IGVsaWRlZG91 dGVyOworCSplbGlkZWRyZWFsaW5uZXIgPSBlbGlkZWRpbm5lcjsKKwlyZXR1cm4gc3RyYXRlZ3k7 Cit9CisKKy8qCisgKiBEZXNjZW5kIHRocm91Z2ggYSBQbGFuIG5vZGUgaW4gYSBqb2luIHRyZWUg dGhhdCB0aGUgY2FsbGVyIGhhcyBkZXRlcm1pbmVkCisgKiB0byBiZSBpcnJlbGV2YW50LgorICoK KyAqIFVwZGF0ZXMgKnBsYW4sIGFuZCByZXR1cm5zIHRoZSBsYXN0IG9mIGFueSBlbGlkZWQgbm9k ZXMgcGVydGFpbmluZyB0byB0aGUKKyAqIG5ldyBwbGFuIG5vZGUuCisgKi8KK3N0YXRpYyBFbGlk ZWROb2RlICoKK3BncGFfZGVzY2VuZF9ub2RlKFBsYW5uZWRTdG10ICpwc3RtdCwgUGxhbiAqKnBs YW4pCit7CisJKnBsYW4gPSAoKnBsYW4pLT5sZWZ0dHJlZTsKKwlyZXR1cm4gcGdwYV9sYXN0X2Vs aWRlZF9ub2RlKHBzdG10LCAqcGxhbik7Cit9CisKKy8qCisgKiBEZXNjZW5kIHRocm91Z2ggYSBH YXRoZXIgb3IgR2F0aGVyIE1lcmdlIG5vZGUsIGlmIHByZXNlbnQsIGFuZCBhbnkgU29ydAorICog b3IgSW5jcmVtZW50YWxTb3J0IG5vZGUgb2NjdXJyaW5nIHVuZGVyIGEgR2F0aGVyIE1lcmdlLgor ICoKKyAqIENhbGxlciBzaG91bGQgaGF2ZSB2ZXJpZmllZCB0aGF0IHRoZXJlIGlzIG5vIEVsaWRl ZE5vZGUgcGVydGFpbmluZyB0bworICogdGhlIGluaXRpYWwgdmFsdWUgb2YgKnBsYW4uCisgKgor ICogVXBkYXRlcyAqcGxhbiwgYW5kIHJldHVybnMgdGhlIGxhc3Qgb2YgYW55IGVsaWRlZCBub2Rl cyBwZXJ0YWluaW5nIHRvIHRoZQorICogbmV3IHBsYW4gbm9kZS4gU2V0cyAqZm91bmRfYW55X2dh dGhlciA9IHRydWUgaWYgZWl0aGVyIEdhdGhlciBvcgorICogR2F0aGVyIE1lcmdlIHdhcyBmb3Vu ZCwgYW5kIG90aGVyd2lzZSBsZWF2ZXMgaXQgdW5jaGFuZ2VkLgorICovCitzdGF0aWMgRWxpZGVk Tm9kZSAqCitwZ3BhX2Rlc2NlbmRfYW55X2dhdGhlcihQbGFubmVkU3RtdCAqcHN0bXQsIFBsYW4g KipwbGFuLAorCQkJCQkJYm9vbCAqZm91bmRfYW55X2dhdGhlcikKK3sKKwlpZiAoSXNBKCpwbGFu LCBHYXRoZXIpKQorCXsKKwkJKmZvdW5kX2FueV9nYXRoZXIgPSB0cnVlOworCQlyZXR1cm4gcGdw YV9kZXNjZW5kX25vZGUocHN0bXQsIHBsYW4pOworCX0KKworCWlmIChJc0EoKnBsYW4sIEdhdGhl ck1lcmdlKSkKKwl7CisJCUVsaWRlZE5vZGUgKmVsaWRlZCA9IHBncGFfZGVzY2VuZF9ub2RlKHBz dG10LCBwbGFuKTsKKworCQlpZiAoZWxpZGVkID09IE5VTEwgJiYgaXNfc29ydGluZ19wbGFuKCpw bGFuKSkKKwkJCWVsaWRlZCA9IHBncGFfZGVzY2VuZF9ub2RlKHBzdG10LCBwbGFuKTsKKworCQkq Zm91bmRfYW55X2dhdGhlciA9IHRydWU7CisJCXJldHVybiBlbGlkZWQ7CisJfQorCisJcmV0dXJu IE5VTEw7Cit9CisKKy8qCisgKiBJZiAqcGxhbiBpcyBhbiBBZ2cgb3IgVW5pcXVlIG5vZGUsIHdl IHdhbnQgdG8gZGVzY2VuZCB0aHJvdWdoIGl0LCB1bmxlc3MKKyAqIGl0IGhhcyBhIGNvcnJlc3Bv bmRpbmcgZWxpZGVkIG5vZGUuIElmIGl0cyBpbW1lZGlhdGUgY2hpbGQgaXMgYSBTb3J0IG9yCisg KiBJbmNyZW1lbnRhbFNvcnQsIHdlIGFsc28gd2FudCB0byBkZXNjZW5kIHRocm91Z2ggdGhhdCwg dW5sZXNzIGl0IGhhcyBhCisgKiBjb3JyZXNwb25kaW5nIGVsaWRlZCBub2RlLgorICoKKyAqIE9u IGVudHJ5LCAqZWxpZGVkX25vZGUgbXVzdCBiZSB0aGUgbGFzdCBvZiBhbnkgZWxpZGVkIG5vZGVz IGNvcnJlc3BvbmRpbmcKKyAqIHRvICpwbGFuOyBvbiBleGl0LCB0aGlzIHdpbGwgc3RpbGwgYmUg dHJ1ZSwgYnV0ICpwbGFuIG1heSBoYXZlIGJlZW4gdXBkYXRlZC4KKyAqCisgKiBUaGUgcmVhc29u IHdlIGRvbid0IHdhbnQgdG8gZGVzY2VuZCB0aHJvdWdoIGVsaWRlZCBub2RlcyBpcyB0aGF0IGEg c2luZ2xlCisgKiBqb2luIHRyZWUgY2FuJ3QgY3Jvc3MgdGhyb3VnaCBhbnkgc29ydCBvZiBlbGlk ZWQgbm9kZTogc3VicXVlcmllcyBhcmUKKyAqIHBsYW5uZWQgc2VwYXJhdGVseSwgYW5kIHBsYW5u aW5nIGluc2lkZSBhbiBBcHBlbmQgb3IgTWVyZ2VBcHBlbmQgaXMKKyAqIHNlcGFyYXRlIGZyb20g cGxhbm5pbmcgb3V0c2lkZSBvZiBpdC4KKyAqCisgKiBUaGUgcmV0dXJuIHZhbHVlIGlzIHRydWUg aWYgd2UgZGVzY2VuZCB0aHJvdWdoIGEgbm9kZSB0aGF0IHdlIGJlbGlldmUgaXMKKyAqIG1ha2lu ZyBvbmUgc2lkZSBvZiBhIHNlbWlqb2luIHVuaXF1ZSwgYW5kIG90aGVyd2lzZSBmYWxzZS4KKyAq Lworc3RhdGljIGJvb2wKK3BncGFfZGVzY2VuZF9hbnlfdW5pcXVlKFBsYW5uZWRTdG10ICpwc3Rt dCwgUGxhbiAqKnBsYW4sCisJCQkJCQlFbGlkZWROb2RlICoqZWxpZGVkX25vZGUpCit7CisJYm9v bAkJZGVzY2VuZCA9IGZhbHNlOworCWJvb2wJCXNqdW5pcXVlID0gZmFsc2U7CisKKwlpZiAoKmVs aWRlZF9ub2RlICE9IE5VTEwpCisJCXJldHVybiBzanVuaXF1ZTsKKworCWlmIChJc0EoKnBsYW4s IFVuaXF1ZSkpCisJeworCQlkZXNjZW5kID0gdHJ1ZTsKKwkJc2p1bmlxdWUgPSB0cnVlOworCX0K KwllbHNlIGlmIChJc0EoKnBsYW4sIEFnZykpCisJeworCQkvKgorCQkgKiBJZiB0aGlzIGlzIGEg c2ltcGxlIEFnZyBub2RlLCB0aGVuIGFzc3VtZSBpdCdzIGhlcmUgdG8gaW1wbGVtZW50CisJCSAq IHNlbWlqb2luIHVuaXF1ZW5lc3MuIE90aGVyd2lzZSwgYXNzdW1lIGl0J3MgY29tcGxldGluZyBh biBlYWdlcgorCQkgKiBhZ2dyZWdhdGlvbiBvciBwYXJ0aXRpb253aXNlIGFnZ3JlZ2F0aW9uIG9w ZXJhdGlvbiB0aGF0IGJlZ2FuIGF0IGEKKwkJICogaGlnaGVyIGxldmVsIG9mIHRoZSBwbGFuIHRy ZWUuCisJCSAqCisJCSAqIChOb3RlIHRoYXQgd2hlbiB3ZSdyZSB1c2luZyBhbiBBZ2cgbm9kZSBm b3IgdW5pcXVlbmVzcywgdGhlcmUncyBubworCQkgKiBuZWVkIGZvciBhbnkgY2FzZSBvdGhlciB0 aGFuIEFHR1NQTElUX1NJTVBMRSwgYmVjYXVzZSB0aGVyZSdzIG5vCisJCSAqIGFnZ3JlZ2F0ZWQg Y29sdW1uIGJlaW5nIGNvbXB1dGVkLiBIb3dldmVyLCB0aGUgZmFjdCB0aGF0CisJCSAqIEFHR1NQ TElUX1NJTVBMRSBpcyBpbiB1c2UgZG9lc24ndCBwcm92ZSB0aGF0IHRoaXMgQWdnIGlzIGhlcmUg Zm9yCisJCSAqIHRoZSBzZW1pam9pbiB1bmlxdWVuZXNzLiBNYXliZSB3ZSBzaG91bGQgYWRqdXN0 IGFuIEFnZyBub2RlIHRvCisJCSAqIGNhcnJ5IGEgInB1cnBvc2UiIGZpZWxkIHNvIHRoYXQgY29k ZSBsaWtlIHRoaXMgY2FuIGJlIG1vcmUgY2VydGFpbgorCQkgKiBvZiBpdHMgYW5hbHlzaXMuKQor CQkgKi8KKwkJZGVzY2VuZCA9IHRydWU7CisJCXNqdW5pcXVlID0gKCgoQWdnICopICpwbGFuKS0+ YWdnc3BsaXQgPT0gQUdHU1BMSVRfU0lNUExFKTsKKwl9CisKKwlpZiAoZGVzY2VuZCkKKwl7CisJ CSplbGlkZWRfbm9kZSA9IHBncGFfZGVzY2VuZF9ub2RlKHBzdG10LCBwbGFuKTsKKworCQlpZiAo KmVsaWRlZF9ub2RlID09IE5VTEwgJiYgaXNfc29ydGluZ19wbGFuKCpwbGFuKSkKKwkJCSplbGlk ZWRfbm9kZSA9IHBncGFfZGVzY2VuZF9ub2RlKHBzdG10LCBwbGFuKTsKKwl9CisKKwlyZXR1cm4g c2p1bmlxdWU7Cit9CisKKy8qCisgKiBJcyB0aGlzIGEgUmVzdWx0IG5vZGUgdGhhdCBoYXMgYSBj aGlsZD8KKyAqLworc3RhdGljIGJvb2wKK2lzX3Jlc3VsdF9ub2RlX3dpdGhfY2hpbGQoUGxhbiAq cGxhbikKK3sKKwlyZXR1cm4gSXNBKHBsYW4sIFJlc3VsdCkgJiYgcGxhbi0+bGVmdHRyZWUgIT0g TlVMTDsKK30KKworLyoKKyAqIElzIHRoaXMgYSBQbGFuIG5vZGUgd2hvc2UgcHVycG9zZSBpcyB0 byBwdXQgdGhlIGRhdGEgaW4gYSBjZXJ0YWluIG9yZGVyPworICovCitzdGF0aWMgYm9vbAoraXNf c29ydGluZ19wbGFuKFBsYW4gKnBsYW4pCit7CisJcmV0dXJuIElzQShwbGFuLCBTb3J0KSB8fCBJ c0EocGxhbiwgSW5jcmVtZW50YWxTb3J0KTsKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxh bl9hZHZpY2UvcGdwYV9qb2luLmggYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfam9pbi5o Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5kYjg1MDljMDdjYwotLS0g L2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9qb2luLmgKQEAgLTAs MCArMSwxMDUgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHBncGFfam9pbi5oCisgKgkg IGFuYWx5c2lzIG9mIGpvaW5zIGluIFBsYW4gdHJlZXMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIw MTYtMjAyNiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKgkgIGNv bnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9qb2luLmgKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAqLworI2lmbmRlZiBQR1BBX0pPSU5fSAorI2RlZmluZSBQR1BBX0pPSU5fSAorCisjaW5jbHVk ZSAibm9kZXMvcGxhbm5vZGVzLmgiCisKK3R5cGVkZWYgc3RydWN0IHBncGFfcGxhbl93YWxrZXJf Y29udGV4dCBwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQ7Cit0eXBlZGVmIHN0cnVjdCBwZ3BhX2pv aW5fdW5yb2xsZXIgcGdwYV9qb2luX3Vucm9sbGVyOwordHlwZWRlZiBzdHJ1Y3QgcGdwYV91bnJv bGxlZF9qb2luIHBncGFfdW5yb2xsZWRfam9pbjsKKworLyoKKyAqIEFsdGhvdWdoIHRoZXJlIGFy ZSB0aHJlZSBtYWluIGpvaW4gc3RyYXRlZ2llcywgd2UgdHJ5IHRvIGNsYXNzaWZ5IHRoaW5ncwor ICogbW9yZSBwcmVjaXNlbHkgaGVyZTogbWVyZ2Ugam9pbnMgaGF2ZSB0aGUgb3B0aW9uIG9mIHVz aW5nIG1hdGVyaWFsaXphdGlvbgorICogb24gdGhlIGlubmVyIHNpZGUsIGFuZCBuZXN0ZWQgbG9v cHMgY2FuIHVzZSBlaXRoZXIgbWF0ZXJpYWxpemF0aW9uIG9yCisgKiBtZW1vaXphdGlvbi4KKyAq LwordHlwZWRlZiBlbnVtCit7CisJSlNUUkFUX01FUkdFX0pPSU5fUExBSU4gPSAwLAorCUpTVFJB VF9NRVJHRV9KT0lOX01BVEVSSUFMSVpFLAorCUpTVFJBVF9ORVNURURfTE9PUF9QTEFJTiwKKwlK U1RSQVRfTkVTVEVEX0xPT1BfTUFURVJJQUxJWkUsCisJSlNUUkFUX05FU1RFRF9MT09QX01FTU9J WkUsCisJSlNUUkFUX0hBU0hfSk9JTgorCS8qIHVwZGF0ZSBOVU1fUEdQQV9KT0lOX1NUUkFURUdZ IGlmIHlvdSBhZGQgYW55dGhpbmcgaGVyZSAqLworfSBwZ3BhX2pvaW5fc3RyYXRlZ3k7CisKKyNk ZWZpbmUgTlVNX1BHUEFfSk9JTl9TVFJBVEVHWQkJKChpbnQpIEpTVFJBVF9IQVNIX0pPSU4gKyAx KQorCisvKgorICogSW4gYW4gb3V0ZXItZGVlcCBqb2luIHRyZWUsIGV2ZXJ5IG1lbWJlciBvZiBh biB1bnJvbGxlZCBqb2luIHdpbGwgYmUgYSBzY2FuLAorICogYnV0IGpvaW4gdHJlZXMgd2l0aCBv dGhlciBzaGFwZXMgY2FuIGNvbnRhaW4gdW5yb2xsZWQgam9pbnMuCisgKgorICogVGhlIHBsYW4g bm9kZSB3ZSBzdG9yZSBoZXJlIHdpbGwgYmUgdGhlIGlubmVyIG9yIG91dGVyIGNoaWxkIG9mIHRo ZSBqb2luCisgKiBub2RlLCBhcyBhcHByb3ByaWF0ZSwgZXhjZXB0IHRoYXQgd2UgbG9vayB0aHJv dWdoIHN1Ym5vZGVzIHRoYXQgd2UgcmVnYXJkIGFzCisgKiBwYXJ0IG9mIHRoZSBqb2luIG1ldGhv ZCBpdHNlbGYuIEZvciBpbnN0YW5jZSwgZm9yIGEgTmVzdGVkIExvb3AgdGhhdAorICogbWF0ZXJp YWxpemVzIHRoZSBpbm5lciBpbnB1dCwgd2UnbGwgc3RvcmUgdGhlIGNoaWxkIG9mIHRoZSBNYXRl cmlhbGl6ZSBub2RlLAorICogbm90IHRoZSBNYXRlcmlhbGl6ZSBub2RlIGl0c2VsZi4KKyAqCisg KiBJZiBzZXRyZWZzIHByb2Nlc3NpbmcgZWxpZGVkIG9uZSBvciBtb3JlIG5vZGVzIGZyb20gdGhl IHBsYW4gdHJlZSwgdGhlbgorICogd2UnbGwgc3RvcmUgZGV0YWlscyBhYm91dCB0aGUgdG9wbW9z dCBvZiB0aG9zZSBpbiBlbGlkZWRfbm9kZTsgb3RoZXJ3aXNlLAorICogaXQgd2lsbCBiZSBOVUxM LgorICoKKyAqIEV4YWN0bHkgb25lIG9mIHNjYW4gYW5kIHVucm9sbGVkX2pvaW4gd2lsbCBiZSBu b24tTlVMTC4KKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlQbGFuCSAgICpwbGFuOworCUVsaWRl ZE5vZGUgKmVsaWRlZF9ub2RlOworCXN0cnVjdCBwZ3BhX3NjYW4gKnNjYW47CisJcGdwYV91bnJv bGxlZF9qb2luICp1bnJvbGxlZF9qb2luOworfSBwZ3BhX2pvaW5fbWVtYmVyOworCisvKgorICog V2UgY29udmVydCBvdXRlci1kZWVwIGpvaW4gdHJlZXMgdG8gYSBmbGF0IHN0cnVjdHVyZTsgdGhh dCBpcywgKChBIEpPSU4gQikKKyAqIEpPSU4gQykgSk9JTiBEIGdldHMgY29udmVydGVkIHRvIG91 dGVyID0gQSwgaW5uZXIgPSA8QiBDIEQ+LiAgV2hlbiBqb2lucworICogYXJlbid0IG91dGVyLWRl ZXAsIHN1YnN0cnVjdHVyZSBpcyByZXF1aXJlZCwgZS5nLiAoQSBKT0lOIEIpIEpPSU4gKEMgSk9J TiBEKQorICogaXMgcmVwcmVzZW50ZWQgYXMgb3V0ZXIgPSBBLCBpbm5lciA9IDxCIFg+LCB3aGVy ZSBYIGlzIGEgcGdwYV91bnJvbGxlZF9qb2luCisgKiBjb3ZlcmluZyBDLUQuCisgKi8KK3N0cnVj dCBwZ3BhX3Vucm9sbGVkX2pvaW4KK3sKKwkvKiBPdXRlcm1vc3QgbWVtYmVyOyBtdXN0IG5vdCBp dHNlbGYgYmUgYW4gdW5yb2xsZWQgam9pbi4gKi8KKwlwZ3BhX2pvaW5fbWVtYmVyIG91dGVyOwor CisJLyogTnVtYmVyIG9mIGlubmVyIG1lbWJlcnMuIExlbmd0aCBvZiB0aGUgc3RyYXRlZ3kgYW5k IGlubmVyIGFycmF5cy4gKi8KKwl1bnNpZ25lZAluaW5uZXI7CisKKwkvKiBBcnJheSBvZiBzdHJh dGVnaWVzLCBvbmUgcGVyIG5vbi1vdXRlcm1vc3QgbWVtYmVyLiAqLworCXBncGFfam9pbl9zdHJh dGVneSAqc3RyYXRlZ3k7CisKKwkvKiBBcnJheSBvZiBtZW1iZXJzLCBleGNsdWRpbmcgdGhlIG91 dGVybW9zdC4gRGVlcGVzdCBmaXJzdC4gKi8KKwlwZ3BhX2pvaW5fbWVtYmVyICppbm5lcjsKK307 CisKKy8qCisgKiBEb2VzIHRoaXMgcGxhbiBub2RlIGluaGVyaXQgZnJvbSBKb2luPworICovCitz dGF0aWMgaW5saW5lIGJvb2wKK3BncGFfaXNfam9pbihQbGFuICpwbGFuKQoreworCXJldHVybiBJ c0EocGxhbiwgTmVzdExvb3ApIHx8IElzQShwbGFuLCBNZXJnZUpvaW4pIHx8IElzQShwbGFuLCBI YXNoSm9pbik7Cit9CisKK2V4dGVybiBwZ3BhX2pvaW5fdW5yb2xsZXIgKnBncGFfY3JlYXRlX2pv aW5fdW5yb2xsZXIodm9pZCk7CitleHRlcm4gdm9pZCBwZ3BhX3Vucm9sbF9qb2luKHBncGFfcGxh bl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJCQkJCSBQbGFuICpwbGFuLCBib29sIGJlbmVh dGhfYW55X2dhdGhlciwKKwkJCQkJCQkgcGdwYV9qb2luX3Vucm9sbGVyICpqb2luX3Vucm9sbGVy LAorCQkJCQkJCSBwZ3BhX2pvaW5fdW5yb2xsZXIgKipvdXRlcl9qb2luX3Vucm9sbGVyLAorCQkJ CQkJCSBwZ3BhX2pvaW5fdW5yb2xsZXIgKippbm5lcl9qb2luX3Vucm9sbGVyKTsKK2V4dGVybiBw Z3BhX3Vucm9sbGVkX2pvaW4gKnBncGFfYnVpbGRfdW5yb2xsZWRfam9pbihwZ3BhX3BsYW5fd2Fs a2VyX2NvbnRleHQgKndhbGtlciwKKwkJCQkJCQkJCQkJCQlwZ3BhX2pvaW5fdW5yb2xsZXIgKmpv aW5fdW5yb2xsZXIpOworZXh0ZXJuIHZvaWQgcGdwYV9kZXN0cm95X2pvaW5fdW5yb2xsZXIocGdw YV9qb2luX3Vucm9sbGVyICpqb2luX3Vucm9sbGVyKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9j b250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfb3V0cHV0LmMgYi9jb250cmliL3BnX3BsYW5fYWR2 aWNlL3BncGFfb3V0cHV0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu LjI4ZDI4MzljZTFhCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9w Z3BhX291dHB1dC5jCkBAIC0wLDAgKzEsNTcxIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisg KiBwZ3BhX291dHB1dC5jCisgKgkgIHByb2R1Y2UgdGV4dHVhbCBvdXRwdXQgZnJvbSB0aGUgcmVz dWx0cyBvZiBhIHBsYW4gdHJlZSB3YWxrCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjYs IFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICoJICBjb250cmliL3Bn X3BsYW5fYWR2aWNlL3BncGFfb3V0cHV0LmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLwor CisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgInBncGFfb3V0cHV0LmgiCisjaW5j bHVkZSAicGdwYV9zY2FuLmgiCisKKyNpbmNsdWRlICJub2Rlcy9wYXJzZW5vZGVzLmgiCisjaW5j bHVkZSAicGFyc2VyL3BhcnNldHJlZS5oIgorI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCisj aW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCisKKy8qCisgKiBDb250ZXh0IG9iamVjdCBmb3Ig dGV4dHVhbCBhZHZpY2UgZ2VuZXJhdGlvbi4KKyAqCisgKiBydF9pZGVudGlmaWVycyBpcyB0aGUg Y2FsbGVyLXByb3ZpZGVkIGFycmF5IG9mIHJhbmdlIHRhYmxlIGlkZW50aWZpZXJzLgorICogU2Vl IHRoZSBjb21tZW50cyBhdCB0aGUgdG9wIG9mIHBncGFfaWRlbnRpZmllci5jIGZvciBtb3JlIGRl dGFpbHMuCisgKgorICogYnVmIGlzIHRoZSBjYWxsZXItcHJvdmlkZWQgb3V0cHV0IGJ1ZmZlci4K KyAqCisgKiB3cmFwX2NvbHVtbiBpcyB0aGUgd3JhcCBjb2x1bW4sIHNvIHRoYXQgd2UgZG9uJ3Qg Y3JlYXRlIG91dHB1dCB0aGF0IGlzCisgKiB0b28gd2lkZS4gU2VlIHBncGFfbWF5YmVfbGluZWJy ZWFrKCkgYW5kIGNvbW1lbnRzIGluIHBncGFfb3V0cHV0X2FkdmljZS4KKyAqLwordHlwZWRlZiBz dHJ1Y3QgcGdwYV9vdXRwdXRfY29udGV4dAoreworCWNvbnN0IGNoYXIgKipyaWRfc3RyaW5nczsK KwlTdHJpbmdJbmZvCWJ1ZjsKKwlpbnQJCQl3cmFwX2NvbHVtbjsKK30gcGdwYV9vdXRwdXRfY29u dGV4dDsKKworc3RhdGljIHZvaWQgcGdwYV9vdXRwdXRfdW5yb2xsZWRfam9pbihwZ3BhX291dHB1 dF9jb250ZXh0ICpjb250ZXh0LAorCQkJCQkJCQkJICBwZ3BhX3Vucm9sbGVkX2pvaW4gKmpvaW4p Oworc3RhdGljIHZvaWQgcGdwYV9vdXRwdXRfam9pbl9tZW1iZXIocGdwYV9vdXRwdXRfY29udGV4 dCAqY29udGV4dCwKKwkJCQkJCQkJCXBncGFfam9pbl9tZW1iZXIgKm1lbWJlcik7CitzdGF0aWMg dm9pZCBwZ3BhX291dHB1dF9zY2FuX3N0cmF0ZWd5KHBncGFfb3V0cHV0X2NvbnRleHQgKmNvbnRl eHQsCisJCQkJCQkJCQkgIHBncGFfc2Nhbl9zdHJhdGVneSBzdHJhdGVneSwKKwkJCQkJCQkJCSAg TGlzdCAqc2NhbnMpOworc3RhdGljIHZvaWQgcGdwYV9vdXRwdXRfcmVsYXRpb25fbmFtZShwZ3Bh X291dHB1dF9jb250ZXh0ICpjb250ZXh0LCBPaWQgcmVsaWQpOworc3RhdGljIHZvaWQgcGdwYV9v dXRwdXRfcXVlcnlfZmVhdHVyZShwZ3BhX291dHB1dF9jb250ZXh0ICpjb250ZXh0LAorCQkJCQkJ CQkJICBwZ3BhX3FmX3R5cGUgdHlwZSwKKwkJCQkJCQkJCSAgTGlzdCAqcXVlcnlfZmVhdHVyZXMp Oworc3RhdGljIHZvaWQgcGdwYV9vdXRwdXRfc2ltcGxlX3N0cmF0ZWd5KHBncGFfb3V0cHV0X2Nv bnRleHQgKmNvbnRleHQsCisJCQkJCQkJCQkJY2hhciAqc3RyYXRlZ3ksCisJCQkJCQkJCQkJTGlz dCAqcmVsaWRfc2V0cyk7CitzdGF0aWMgdm9pZCBwZ3BhX291dHB1dF9ub19nYXRoZXIocGdwYV9v dXRwdXRfY29udGV4dCAqY29udGV4dCwKKwkJCQkJCQkJICBCaXRtYXBzZXQgKnJlbGlkcyk7Citz dGF0aWMgdm9pZCBwZ3BhX291dHB1dF9yZWxhdGlvbnMocGdwYV9vdXRwdXRfY29udGV4dCAqY29u dGV4dCwgU3RyaW5nSW5mbyBidWYsCisJCQkJCQkJCSAgQml0bWFwc2V0ICpyZWxpZHMpOworCitz dGF0aWMgY2hhciAqcGdwYV9jc3RyaW5nX2pvaW5fc3RyYXRlZ3kocGdwYV9qb2luX3N0cmF0ZWd5 IHN0cmF0ZWd5KTsKK3N0YXRpYyBjaGFyICpwZ3BhX2NzdHJpbmdfc2Nhbl9zdHJhdGVneShwZ3Bh X3NjYW5fc3RyYXRlZ3kgc3RyYXRlZ3kpOworc3RhdGljIGNoYXIgKnBncGFfY3N0cmluZ19xdWVy eV9mZWF0dXJlX3R5cGUocGdwYV9xZl90eXBlIHR5cGUpOworCitzdGF0aWMgdm9pZCBwZ3BhX21h eWJlX2xpbmVicmVhayhTdHJpbmdJbmZvIGJ1ZiwgaW50IHdyYXBfY29sdW1uKTsKKworLyoKKyAq IEFwcGVuZCBxdWVyeSBhZHZpY2UgdG8gdGhlIHByb3ZpZGVkIGJ1ZmZlci4KKyAqCisgKiBCZWZv cmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLCAnd2Fsa2VyJyBtdXN0IGJlIHVzZWQgdG8gaXRlcmF0 ZSBvdmVyIHRoZQorICogbWFpbiBwbGFuIHRyZWUgYW5kIGFsbCBzdWJwbGFucyBmcm9tIHRoZSBQ bGFubmVkU3RtdC4KKyAqCisgKiAncnRfaWRlbnRpZmllcnMnIGlzIGEgdGFibGUgb2YgdW5pcXVl IGlkZW50aWZpZXJzLCBvbmUgZm9yIGVhY2ggUlRJLgorICogU2VlIHBncGFfY3JlYXRlX2lkZW50 aWZpZXJzX2Zvcl9wbGFubmVkX3N0bXQoKS4KKyAqCisgKiBSZXN1bHRzIHdpbGwgYmUgYXBwZW5k ZWQgdG8gJ2J1ZicuCisgKi8KK3ZvaWQKK3BncGFfb3V0cHV0X2FkdmljZShTdHJpbmdJbmZvIGJ1 ZiwgcGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsCisJCQkJICAgcGdwYV9pZGVudGlm aWVyICpydF9pZGVudGlmaWVycykKK3sKKwlJbmRleAkJcnRhYmxlX2xlbmd0aCA9IGxpc3RfbGVu Z3RoKHdhbGtlci0+cHN0bXQtPnJ0YWJsZSk7CisJTGlzdENlbGwgICAqbGM7CisJcGdwYV9vdXRw dXRfY29udGV4dCBjb250ZXh0OworCisJLyogQmFzaWMgaW5pdGlhbGl6YXRpb24uICovCisJbWVt c2V0KCZjb250ZXh0LCAwLCBzaXplb2YocGdwYV9vdXRwdXRfY29udGV4dCkpOworCWNvbnRleHQu YnVmID0gYnVmOworCisJLyoKKwkgKiBDb252ZXJ0IGlkZW50aWZpZXJzIHRvIHN0cmluZyBmb3Jt LiBOb3RlIHRoYXQgdGhlIGxvb3AgdmFyaWFibGUgaGVyZSBpcworCSAqIG5vdCBhbiBSVEksIGJl Y2F1c2UgUlRJcyBhcmUgMS1iYXNlZC4gU29tZSBSVElzIHdpbGwgaGF2ZSBubworCSAqIGlkZW50 aWZpZXIsIGVpdGhlciBiZWNhdXNlIHRoZSByZWxvcHRraW5kIGlzIFJURV9KT0lOIG9yIGJlY2F1 c2UgdGhhdAorCSAqIHBvcnRpb24gb2YgdGhlIHF1ZXJ5IGRpZG4ndCBtYWtlIGl0IGludG8gdGhl IGZpbmFsIHBsYW4uCisJICovCisJY29udGV4dC5yaWRfc3RyaW5ncyA9IHBhbGxvYzBfYXJyYXko Y29uc3QgY2hhciAqLCBydGFibGVfbGVuZ3RoKTsKKwlmb3IgKGludCBpID0gMDsgaSA8IHJ0YWJs ZV9sZW5ndGg7ICsraSkKKwkJaWYgKHJ0X2lkZW50aWZpZXJzW2ldLmFsaWFzX25hbWUgIT0gTlVM TCkKKwkJCWNvbnRleHQucmlkX3N0cmluZ3NbaV0gPSBwZ3BhX2lkZW50aWZpZXJfc3RyaW5nKCZy dF9pZGVudGlmaWVyc1tpXSk7CisKKwkvKgorCSAqIElmIHRoZSB1c2VyIGNob29zZXMgdG8gdXNl IEVYUExBSU4gKFBMQU5fQURWSUNFKSBpbiBhbiA4MC1jb2x1bW4gd2luZG93CisJICogZnJvbSBh IHBzcWwgY2xpZW50IHdpdGggZGVmYXVsdCBzZXR0aW5ncywgcHNxbCB3aWxsIGFkZCBvbmUgc3Bh Y2UgdG8KKwkgKiB0aGUgbGVmdCBvZiB0aGUgb3V0cHV0IGFuZCBFWFBMQUlOIHdpbGwgYWRkIHR3 byBtb3JlIHRvIHRoZSBsZWZ0IG9mIHRoZQorCSAqIGFkdmljZS4gVGh1cywgbGluZXMgb2YgbW9y ZSB0aGFuIDc3IGNoYXJhY3RlcnMgd2lsbCB3cmFwLiBXZSBzZXQgdGhlCisJICogd3JhcCBsaW1p dCB0byA3NiBoZXJlIHNvIHRoYXQgdGhlIG91dHB1dCB3b24ndCByZWFjaCBhbGwgdGhlIHdheSB0 byB0aGUKKwkgKiB2ZXJ5IGxhc3QgY29sdW1uIG9mIHRoZSB0ZXJtaW5hbC4KKwkgKgorCSAqIE9m IGNvdXJzZSwgdGhpcyBpcyBmYWlybHkgYXJiaXRyYXJ5IHNldCBvZiBhc3N1bXB0aW9ucywgYW5k IG9uZSBjb3VsZAorCSAqIHdlbGwgbWFrZSBhbiBhcmd1bWVudCBmb3IgYSBkaWZmZXJlbnQgd3Jh cCBsaW1pdCwgb3IgZm9yIGEgY29uZmlndXJhYmxlCisJICogb25lLgorCSAqLworCWNvbnRleHQu d3JhcF9jb2x1bW4gPSA3NjsKKworCS8qCisJICogRWFjaCBwaWVjZSBvZiBKT0lOX09SREVSKCkg YWR2aWNlIGZ1bGx5IGRlc2NyaWJlcyB0aGUgam9pbiBvcmRlciBmb3IgYQorCSAqIGEgc2luZ2xl IHVucm9sbGVkIGpvaW4uIE1lcmdpbmcgaXMgbm90IHBlcm1pdHRlZCwgYmVjYXVzZSB0aGF0IHdv dWxkCisJICogY2hhbmdlIHRoZSBtZWFuaW5nLCBlLmcuIFNFUV9TQ0FOKGEgYiBjIGQpIG1lYW5z IHNpbXBseSB0aGF0IHNlcXVlbnRpYWwKKwkgKiBzY2FucyBzaG91bGQgYmUgdXNlZCBmb3IgYWxs IG9mIHRob3NlIHJlbGF0aW9ucywgYW5kIGlzIHRodXMgZXF1aXZhbGVudAorCSAqIHRvIFNFUV9T Q0FOKGEgYikgU0VRX1NDQU4oYyBkKSwgYnV0IEpPSU5fT1JERVIoYSBiIGMgZCkgbWVhbnMgdGhh dCAiYSIKKwkgKiBpcyB0aGUgZHJpdmluZyB0YWJsZSB3aGljaCBpcyB0aGVuIGpvaW5lZCB0byAi YiIgdGhlbiAiYyIgdGhlbiAiZCIsCisJICogd2hpY2ggaXMgdG90YWxseSBkaWZmZXJlbnQgZnJv bSBKT0lOX09SREVSKGEgYikgYW5kIEpPSU5fT1JERVIoYyBkKS4KKwkgKi8KKwlmb3JlYWNoKGxj LCB3YWxrZXItPnRvcGxldmVsX3Vucm9sbGVkX2pvaW5zKQorCXsKKwkJcGdwYV91bnJvbGxlZF9q b2luICp1am9pbiA9IGxmaXJzdChsYyk7CisKKwkJaWYgKGJ1Zi0+bGVuID4gMCkKKwkJCWFwcGVu ZFN0cmluZ0luZm9DaGFyKGJ1ZiwgJ1xuJyk7CisJCWFwcGVuZFN0cmluZ0luZm8oY29udGV4dC5i dWYsICJKT0lOX09SREVSKCIpOworCQlwZ3BhX291dHB1dF91bnJvbGxlZF9qb2luKCZjb250ZXh0 LCB1am9pbik7CisJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQuYnVmLCAnKScpOworCQlw Z3BhX21heWJlX2xpbmVicmVhayhjb250ZXh0LmJ1ZiwgY29udGV4dC53cmFwX2NvbHVtbik7CisJ fQorCisJLyogRW1pdCBqb2luIHN0cmF0ZWd5IGFkdmljZS4gKi8KKwlmb3IgKGludCBzID0gMDsg cyA8IE5VTV9QR1BBX0pPSU5fU1RSQVRFR1k7ICsrcykKKwl7CisJCWNoYXIJICAgKnN0cmF0ZWd5 ID0gcGdwYV9jc3RyaW5nX2pvaW5fc3RyYXRlZ3kocyk7CisKKwkJcGdwYV9vdXRwdXRfc2ltcGxl X3N0cmF0ZWd5KCZjb250ZXh0LAorCQkJCQkJCQkJc3RyYXRlZ3ksCisJCQkJCQkJCQl3YWxrZXIt PmpvaW5fc3RyYXRlZ2llc1tzXSk7CisJfQorCisJLyoKKwkgKiBFbWl0IHNjYW4gc3RyYXRlZ3kg YWR2aWNlIChidXQgbm90IGZvciBvcmRpbmFyeSBzY2Fucywgd2hpY2ggYXJlCisJICogZGVmaW5p dGlvbmFsbHkgdW5pbnRlcmVzdGluZykuCisJICovCisJZm9yIChpbnQgYyA9IDA7IGMgPCBOVU1f UEdQQV9TQ0FOX1NUUkFURUdZOyArK2MpCisJCWlmIChjICE9IFBHUEFfU0NBTl9PUkRJTkFSWSkK KwkJCXBncGFfb3V0cHV0X3NjYW5fc3RyYXRlZ3koJmNvbnRleHQsIGMsIHdhbGtlci0+c2NhbnNb Y10pOworCisJLyogRW1pdCBxdWVyeSBmZWF0dXJlIGFkdmljZS4gKi8KKwlmb3IgKGludCB0ID0g MDsgdCA8IE5VTV9QR1BBX1FGX1RZUEVTOyArK3QpCisJCXBncGFfb3V0cHV0X3F1ZXJ5X2ZlYXR1 cmUoJmNvbnRleHQsIHQsIHdhbGtlci0+cXVlcnlfZmVhdHVyZXNbdF0pOworCisJLyogRW1pdCBO T19HQVRIRVIgYWR2aWNlLiAqLworCXBncGFfb3V0cHV0X25vX2dhdGhlcigmY29udGV4dCwgd2Fs a2VyLT5ub19nYXRoZXJfc2NhbnMpOworfQorCisvKgorICogT3V0cHV0IHRoZSBtZW1iZXJzIG9m IGFuIHVucm9sbGVkIGpvaW4sIGZpcnN0IHRoZSBvdXRlcm1vc3QgbWVtYmVyLCBhbmQKKyAqIHRo ZW4gdGhlIGlubmVyIG1lbWJlcnMgb25lIGJ5IG9uZSwgYXMgcGFydCBvZiBKT0lOX09SREVSKCkg YWR2aWNlLgorICovCitzdGF0aWMgdm9pZAorcGdwYV9vdXRwdXRfdW5yb2xsZWRfam9pbihwZ3Bh X291dHB1dF9jb250ZXh0ICpjb250ZXh0LAorCQkJCQkJICBwZ3BhX3Vucm9sbGVkX2pvaW4gKmpv aW4pCit7CisJcGdwYV9vdXRwdXRfam9pbl9tZW1iZXIoY29udGV4dCwgJmpvaW4tPm91dGVyKTsK KworCWZvciAoaW50IGsgPSAwOyBrIDwgam9pbi0+bmlubmVyOyArK2spCisJeworCQlwZ3BhX2pv aW5fbWVtYmVyICptZW1iZXIgPSAmam9pbi0+aW5uZXJba107CisKKwkJcGdwYV9tYXliZV9saW5l YnJlYWsoY29udGV4dC0+YnVmLCBjb250ZXh0LT53cmFwX2NvbHVtbik7CisJCWFwcGVuZFN0cmlu Z0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJyAnKTsKKwkJcGdwYV9vdXRwdXRfam9pbl9tZW1iZXIo Y29udGV4dCwgbWVtYmVyKTsKKwl9Cit9CisKKy8qCisgKiBPdXRwdXQgYSBzaW5nbGUgbWVtYmVy IG9mIGFuIHVucm9sbGVkIGpvaW4gYXMgcGFydCBvZiBKT0lOX09SREVSKCkgYWR2aWNlLgorICov CitzdGF0aWMgdm9pZAorcGdwYV9vdXRwdXRfam9pbl9tZW1iZXIocGdwYV9vdXRwdXRfY29udGV4 dCAqY29udGV4dCwKKwkJCQkJCXBncGFfam9pbl9tZW1iZXIgKm1lbWJlcikKK3sKKwlpZiAobWVt YmVyLT51bnJvbGxlZF9qb2luICE9IE5VTEwpCisJeworCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihj b250ZXh0LT5idWYsICcoJyk7CisJCXBncGFfb3V0cHV0X3Vucm9sbGVkX2pvaW4oY29udGV4dCwg bWVtYmVyLT51bnJvbGxlZF9qb2luKTsKKwkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC0+ YnVmLCAnKScpOworCX0KKwllbHNlCisJeworCQlwZ3BhX3NjYW4gICpzY2FuID0gbWVtYmVyLT5z Y2FuOworCisJCUFzc2VydChzY2FuICE9IE5VTEwpOworCQlpZiAoYm1zX21lbWJlcnNoaXAoc2Nh bi0+cmVsaWRzKSA9PSBCTVNfU0lOR0xFVE9OKQorCQkJcGdwYV9vdXRwdXRfcmVsYXRpb25zKGNv bnRleHQsIGNvbnRleHQtPmJ1Ziwgc2Nhbi0+cmVsaWRzKTsKKwkJZWxzZQorCQl7CisJCQlhcHBl bmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICd7Jyk7CisJCQlwZ3BhX291dHB1dF9yZWxh dGlvbnMoY29udGV4dCwgY29udGV4dC0+YnVmLCBzY2FuLT5yZWxpZHMpOworCQkJYXBwZW5kU3Ry aW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAnfScpOworCQl9CisJfQorfQorCisvKgorICogT3V0 cHV0IGFkdmljZSBmb3IgYSBMaXN0IG9mIHBncGFfc2NhbiBvYmplY3RzLgorICoKKyAqIEFsbCB0 aGUgc2NhbnMgbXVzdCB1c2UgdGhlIHN0cmF0ZWd5IHNwZWNpZmllZCBieSB0aGUgInN0cmF0ZWd5 IiBhcmd1bWVudC4KKyAqLworc3RhdGljIHZvaWQKK3BncGFfb3V0cHV0X3NjYW5fc3RyYXRlZ3ko cGdwYV9vdXRwdXRfY29udGV4dCAqY29udGV4dCwKKwkJCQkJCSAgcGdwYV9zY2FuX3N0cmF0ZWd5 IHN0cmF0ZWd5LAorCQkJCQkJICBMaXN0ICpzY2FucykKK3sKKwlib29sCQlmaXJzdCA9IHRydWU7 CisKKwlpZiAoc2NhbnMgPT0gTklMKQorCQlyZXR1cm47CisKKwlpZiAoY29udGV4dC0+YnVmLT5s ZW4gPiAwKQorCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICdcbicpOworCWFw cGVuZFN0cmluZ0luZm8oY29udGV4dC0+YnVmLCAiJXMoIiwKKwkJCQkJIHBncGFfY3N0cmluZ19z Y2FuX3N0cmF0ZWd5KHN0cmF0ZWd5KSk7CisKKwlmb3JlYWNoX3B0cihwZ3BhX3NjYW4sIHNjYW4s IHNjYW5zKQorCXsKKwkJUGxhbgkgICAqcGxhbiA9IHNjYW4tPnBsYW47CisKKwkJaWYgKGZpcnN0 KQorCQkJZmlyc3QgPSBmYWxzZTsKKwkJZWxzZQorCQl7CisJCQlwZ3BhX21heWJlX2xpbmVicmVh ayhjb250ZXh0LT5idWYsIGNvbnRleHQtPndyYXBfY29sdW1uKTsKKwkJCWFwcGVuZFN0cmluZ0lu Zm9DaGFyKGNvbnRleHQtPmJ1ZiwgJyAnKTsKKwkJfQorCisJCS8qIE91dHB1dCB0aGUgcmVsYXRp b24gaWRlbnRpZmllcnMuICovCisJCWlmIChibXNfbWVtYmVyc2hpcChzY2FuLT5yZWxpZHMpID09 IEJNU19TSU5HTEVUT04pCisJCQlwZ3BhX291dHB1dF9yZWxhdGlvbnMoY29udGV4dCwgY29udGV4 dC0+YnVmLCBzY2FuLT5yZWxpZHMpOworCQllbHNlCisJCXsKKwkJCWFwcGVuZFN0cmluZ0luZm9D aGFyKGNvbnRleHQtPmJ1ZiwgJygnKTsKKwkJCXBncGFfb3V0cHV0X3JlbGF0aW9ucyhjb250ZXh0 LCBjb250ZXh0LT5idWYsIHNjYW4tPnJlbGlkcyk7CisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihj b250ZXh0LT5idWYsICcpJyk7CisJCX0KKworCQkvKiBGb3IgaW5kZXggb3IgaW5kZXgtb25seSBz Y2Fucywgb3V0cHV0IGluZGV4IGluZm9ybWF0aW9uLiAqLworCQlpZiAoc3RyYXRlZ3kgPT0gUEdQ QV9TQ0FOX0lOREVYKQorCQl7CisJCQlBc3NlcnQoSXNBKHBsYW4sIEluZGV4U2NhbikpOworCQkJ cGdwYV9tYXliZV9saW5lYnJlYWsoY29udGV4dC0+YnVmLCBjb250ZXh0LT53cmFwX2NvbHVtbik7 CisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICcgJyk7CisJCQlwZ3BhX291 dHB1dF9yZWxhdGlvbl9uYW1lKGNvbnRleHQsICgoSW5kZXhTY2FuICopIHBsYW4pLT5pbmRleGlk KTsKKwkJfQorCQllbHNlIGlmIChzdHJhdGVneSA9PSBQR1BBX1NDQU5fSU5ERVhfT05MWSkKKwkJ eworCQkJQXNzZXJ0KElzQShwbGFuLCBJbmRleE9ubHlTY2FuKSk7CisJCQlwZ3BhX21heWJlX2xp bmVicmVhayhjb250ZXh0LT5idWYsIGNvbnRleHQtPndyYXBfY29sdW1uKTsKKwkJCWFwcGVuZFN0 cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJyAnKTsKKwkJCXBncGFfb3V0cHV0X3JlbGF0aW9u X25hbWUoY29udGV4dCwKKwkJCQkJCQkJCSAgKChJbmRleE9ubHlTY2FuICopIHBsYW4pLT5pbmRl eGlkKTsKKwkJfQorCX0KKworCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJykn KTsKKwlwZ3BhX21heWJlX2xpbmVicmVhayhjb250ZXh0LT5idWYsIGNvbnRleHQtPndyYXBfY29s dW1uKTsKK30KKworLyoKKyAqIE91dHB1dCBhIHNjaGVtYS1xdWFsaWZpZWQgcmVsYXRpb24gbmFt ZS4KKyAqLworc3RhdGljIHZvaWQKK3BncGFfb3V0cHV0X3JlbGF0aW9uX25hbWUocGdwYV9vdXRw dXRfY29udGV4dCAqY29udGV4dCwgT2lkIHJlbGlkKQoreworCU9pZAkJCW5zcG9pZCA9IGdldF9y ZWxfbmFtZXNwYWNlKHJlbGlkKTsKKwljaGFyCSAgICpyZWxuYW1lc3BhY2UgPSBnZXRfbmFtZXNw YWNlX25hbWVfb3JfdGVtcChuc3BvaWQpOworCWNoYXIJICAgKnJlbG5hbWUgPSBnZXRfcmVsX25h bWUocmVsaWQpOworCisJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhjb250ZXh0LT5idWYsIHF1b3Rl X2lkZW50aWZpZXIocmVsbmFtZXNwYWNlKSk7CisJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4 dC0+YnVmLCAnLicpOworCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoY29udGV4dC0+YnVmLCBxdW90 ZV9pZGVudGlmaWVyKHJlbG5hbWUpKTsKK30KKworLyoKKyAqIE91dHB1dCBhZHZpY2UgZm9yIGEg TGlzdCBvZiBwZ3BhX3F1ZXJ5X2ZlYXR1cmUgb2JqZWN0cy4KKyAqCisgKiBBbGwgZmVhdHVyZXMg bXVzdCBiZSBvZiB0aGUgdHlwZSBzcGVjaWZpZWQgYnkgdGhlICJ0eXBlIiBhcmd1bWVudC4KKyAq Lworc3RhdGljIHZvaWQKK3BncGFfb3V0cHV0X3F1ZXJ5X2ZlYXR1cmUocGdwYV9vdXRwdXRfY29u dGV4dCAqY29udGV4dCwgcGdwYV9xZl90eXBlIHR5cGUsCisJCQkJCQkgIExpc3QgKnF1ZXJ5X2Zl YXR1cmVzKQoreworCWJvb2wJCWZpcnN0ID0gdHJ1ZTsKKworCWlmIChxdWVyeV9mZWF0dXJlcyA9 PSBOSUwpCisJCXJldHVybjsKKworCWlmIChjb250ZXh0LT5idWYtPmxlbiA+IDApCisJCWFwcGVu ZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJ1xuJyk7CisJYXBwZW5kU3RyaW5nSW5mbyhj b250ZXh0LT5idWYsICIlcygiLAorCQkJCQkgcGdwYV9jc3RyaW5nX3F1ZXJ5X2ZlYXR1cmVfdHlw ZSh0eXBlKSk7CisKKwlmb3JlYWNoX3B0cihwZ3BhX3F1ZXJ5X2ZlYXR1cmUsIHFmLCBxdWVyeV9m ZWF0dXJlcykKKwl7CisJCWlmIChmaXJzdCkKKwkJCWZpcnN0ID0gZmFsc2U7CisJCWVsc2UKKwkJ eworCQkJcGdwYV9tYXliZV9saW5lYnJlYWsoY29udGV4dC0+YnVmLCBjb250ZXh0LT53cmFwX2Nv bHVtbik7CisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICcgJyk7CisJCX0K KworCQlpZiAoYm1zX21lbWJlcnNoaXAocWYtPnJlbGlkcykgPT0gQk1TX1NJTkdMRVRPTikKKwkJ CXBncGFfb3V0cHV0X3JlbGF0aW9ucyhjb250ZXh0LCBjb250ZXh0LT5idWYsIHFmLT5yZWxpZHMp OworCQllbHNlCisJCXsKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJygn KTsKKwkJCXBncGFfb3V0cHV0X3JlbGF0aW9ucyhjb250ZXh0LCBjb250ZXh0LT5idWYsIHFmLT5y ZWxpZHMpOworCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAnKScpOworCQl9 CisJfQorCisJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAnKScpOworCXBncGFf bWF5YmVfbGluZWJyZWFrKGNvbnRleHQtPmJ1ZiwgY29udGV4dC0+d3JhcF9jb2x1bW4pOworfQor CisvKgorICogT3V0cHV0ICJzaW1wbGUiIGFkdmljZSBmb3IgYSBMaXN0IG9mIEJpdG1hcHNldCBv YmplY3RzIGVhY2ggb2Ygd2hpY2gKKyAqIGNvbnRhaW5zIG9uZSBvciBtb3JlIFJUSXMuCisgKgor ICogQnkgc2ltcGxlLCB3ZSBqdXN0IG1lYW4gdGhhdCB0aGUgYWR2aWNlIGVtaXR0ZWQgZm9sbG93 cyB0aGUgbW9zdAorICogc3RyYWlnaHRmb3J3YXJkIHBhdHRlcm46IHRoZSBzdHJhdGVneSBuYW1l LCBmb2xsb3dlZCBieSBhIGxpc3Qgb2YgaXRlbXMKKyAqIHNlcGFyYXRlZCBieSBzcGFjZXMgYW5k IHN1cnJvdW5kZWQgYnkgcGFyZW50aGVzZXMuIEluZGl2aWR1YWwgaXRlbXMgaW4KKyAqIHRoZSBs aXN0IGFyZSBhIHNpbmdsZSByZWxhdGlvbiBpZGVudGlmaWVyIGZvciBhIEJpdG1hcHNldCB0aGF0 IGNvbnRhaW5zCisgKiBqdXN0IG9uZSBtZW1iZXIsIG9yIGEgc3ViLWxpc3QgYWdhaW4gc2VwYXJh dGVkIGJ5IHNwYWNlcyBhbmQgc3Vycm91bmRlZAorICogYnkgcGFyZW50aGVzZXMgZm9yIGEgQml0 bWFwc2V0IHdpdGggbXVsdGlwbGUgbWVtYmVycy4gQml0bWFwc2V0cyB3aXRoCisgKiBubyBtZW1i ZXJzIHByb2JhYmx5IHNob3VsZG4ndCBvY2N1ciBoZXJlLCBidXQgaWYgdGhleSBkbyB0aGV5J2xs IGJlCisgKiByZW5kZXJlZCBhcyBhbiBlbXB0eSBzdWItbGlzdC4KKyAqLworc3RhdGljIHZvaWQK K3BncGFfb3V0cHV0X3NpbXBsZV9zdHJhdGVneShwZ3BhX291dHB1dF9jb250ZXh0ICpjb250ZXh0 LCBjaGFyICpzdHJhdGVneSwKKwkJCQkJCQlMaXN0ICpyZWxpZF9zZXRzKQoreworCWJvb2wJCWZp cnN0ID0gdHJ1ZTsKKworCWlmIChyZWxpZF9zZXRzID09IE5JTCkKKwkJcmV0dXJuOworCisJaWYg KGNvbnRleHQtPmJ1Zi0+bGVuID4gMCkKKwkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC0+ YnVmLCAnXG4nKTsKKwlhcHBlbmRTdHJpbmdJbmZvKGNvbnRleHQtPmJ1ZiwgIiVzKCIsIHN0cmF0 ZWd5KTsKKworCWZvcmVhY2hfbm9kZShCaXRtYXBzZXQsIHJlbGlkcywgcmVsaWRfc2V0cykKKwl7 CisJCWlmIChmaXJzdCkKKwkJCWZpcnN0ID0gZmFsc2U7CisJCWVsc2UKKwkJeworCQkJcGdwYV9t YXliZV9saW5lYnJlYWsoY29udGV4dC0+YnVmLCBjb250ZXh0LT53cmFwX2NvbHVtbik7CisJCQlh cHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICcgJyk7CisJCX0KKworCQlpZiAoYm1z X21lbWJlcnNoaXAocmVsaWRzKSA9PSBCTVNfU0lOR0xFVE9OKQorCQkJcGdwYV9vdXRwdXRfcmVs YXRpb25zKGNvbnRleHQsIGNvbnRleHQtPmJ1ZiwgcmVsaWRzKTsKKwkJZWxzZQorCQl7CisJCQlh cHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICcoJyk7CisJCQlwZ3BhX291dHB1dF9y ZWxhdGlvbnMoY29udGV4dCwgY29udGV4dC0+YnVmLCByZWxpZHMpOworCQkJYXBwZW5kU3RyaW5n SW5mb0NoYXIoY29udGV4dC0+YnVmLCAnKScpOworCQl9CisJfQorCisJYXBwZW5kU3RyaW5nSW5m b0NoYXIoY29udGV4dC0+YnVmLCAnKScpOworCXBncGFfbWF5YmVfbGluZWJyZWFrKGNvbnRleHQt PmJ1ZiwgY29udGV4dC0+d3JhcF9jb2x1bW4pOworfQorCisvKgorICogT3V0cHV0IE5PX0dBVEhF UiBhZHZpY2UgZm9yIGFsbCByZWxhdGlvbnMgbm90IGFwcGVhcmluZyBiZW5lYXRoIGFueQorICog R2F0aGVyIG9yIEdhdGhlciBNZXJnZSBub2RlLgorICovCitzdGF0aWMgdm9pZAorcGdwYV9vdXRw dXRfbm9fZ2F0aGVyKHBncGFfb3V0cHV0X2NvbnRleHQgKmNvbnRleHQsIEJpdG1hcHNldCAqcmVs aWRzKQoreworCWlmIChyZWxpZHMgPT0gTlVMTCkKKwkJcmV0dXJuOworCWlmIChjb250ZXh0LT5i dWYtPmxlbiA+IDApCisJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJ1xuJyk7 CisJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhjb250ZXh0LT5idWYsICJOT19HQVRIRVIoIik7CisJ cGdwYV9vdXRwdXRfcmVsYXRpb25zKGNvbnRleHQsIGNvbnRleHQtPmJ1ZiwgcmVsaWRzKTsKKwlh cHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICcpJyk7Cit9CisKKy8qCisgKiBPdXRw dXQgdGhlIGlkZW50aWZpZXJzIGZvciBlYWNoIFJUSSBpbiB0aGUgcHJvdmlkZWQgc2V0LgorICoK KyAqIElkZW50aWZpZXJzIGFyZSBzZXBhcmF0ZWQgYnkgc3BhY2VzLCBhbmQgYSBsaW5lIGJyZWFr IGlzIHBvc3NpYmxlIGFmdGVyCisgKiBlYWNoIG9uZS4KKyAqLworc3RhdGljIHZvaWQKK3BncGFf b3V0cHV0X3JlbGF0aW9ucyhwZ3BhX291dHB1dF9jb250ZXh0ICpjb250ZXh0LCBTdHJpbmdJbmZv IGJ1ZiwKKwkJCQkJICBCaXRtYXBzZXQgKnJlbGlkcykKK3sKKwlpbnQJCQlydGkgPSAtMTsKKwli b29sCQlmaXJzdCA9IHRydWU7CisKKwl3aGlsZSAoKHJ0aSA9IGJtc19uZXh0X21lbWJlcihyZWxp ZHMsIHJ0aSkpID49IDApCisJeworCQljb25zdCBjaGFyICpyaWRfc3RyaW5nID0gY29udGV4dC0+ cmlkX3N0cmluZ3NbcnRpIC0gMV07CisKKwkJaWYgKHJpZF9zdHJpbmcgPT0gTlVMTCkKKwkJCWVs b2coRVJST1IsICJubyBpZGVudGlmaWVyIGZvciBSVEkgJWQiLCBydGkpOworCisJCWlmIChmaXJz dCkKKwkJeworCQkJZmlyc3QgPSBmYWxzZTsKKwkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVm LCByaWRfc3RyaW5nKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCXBncGFfbWF5YmVfbGluZWJyZWFr KGJ1ZiwgY29udGV4dC0+d3JhcF9jb2x1bW4pOworCQkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIg JXMiLCByaWRfc3RyaW5nKTsKKwkJfQorCX0KK30KKworLyoKKyAqIEdldCBhIEMgc3RyaW5nIHRo YXQgY29ycmVzcG9uZHMgdG8gdGhlIHNwZWNpZmllZCBqb2luIHN0cmF0ZWd5LgorICovCitzdGF0 aWMgY2hhciAqCitwZ3BhX2NzdHJpbmdfam9pbl9zdHJhdGVneShwZ3BhX2pvaW5fc3RyYXRlZ3kg c3RyYXRlZ3kpCit7CisJc3dpdGNoIChzdHJhdGVneSkKKwl7CisJCWNhc2UgSlNUUkFUX01FUkdF X0pPSU5fUExBSU46CisJCQlyZXR1cm4gIk1FUkdFX0pPSU5fUExBSU4iOworCQljYXNlIEpTVFJB VF9NRVJHRV9KT0lOX01BVEVSSUFMSVpFOgorCQkJcmV0dXJuICJNRVJHRV9KT0lOX01BVEVSSUFM SVpFIjsKKwkJY2FzZSBKU1RSQVRfTkVTVEVEX0xPT1BfUExBSU46CisJCQlyZXR1cm4gIk5FU1RF RF9MT09QX1BMQUlOIjsKKwkJY2FzZSBKU1RSQVRfTkVTVEVEX0xPT1BfTUFURVJJQUxJWkU6CisJ CQlyZXR1cm4gIk5FU1RFRF9MT09QX01BVEVSSUFMSVpFIjsKKwkJY2FzZSBKU1RSQVRfTkVTVEVE X0xPT1BfTUVNT0laRToKKwkJCXJldHVybiAiTkVTVEVEX0xPT1BfTUVNT0laRSI7CisJCWNhc2Ug SlNUUkFUX0hBU0hfSk9JTjoKKwkJCXJldHVybiAiSEFTSF9KT0lOIjsKKwl9CisKKwlwZ191bnJl YWNoYWJsZSgpOworCXJldHVybiBOVUxMOworfQorCisvKgorICogR2V0IGEgQyBzdHJpbmcgdGhh dCBjb3JyZXNwb25kcyB0byB0aGUgc3BlY2lmaWVkIHNjYW4gc3RyYXRlZ3kuCisgKi8KK3N0YXRp YyBjaGFyICoKK3BncGFfY3N0cmluZ19zY2FuX3N0cmF0ZWd5KHBncGFfc2Nhbl9zdHJhdGVneSBz dHJhdGVneSkKK3sKKwlzd2l0Y2ggKHN0cmF0ZWd5KQorCXsKKwkJY2FzZSBQR1BBX1NDQU5fT1JE SU5BUlk6CisJCQlyZXR1cm4gIk9SRElOQVJZX1NDQU4iOworCQljYXNlIFBHUEFfU0NBTl9TRVE6 CisJCQlyZXR1cm4gIlNFUV9TQ0FOIjsKKwkJY2FzZSBQR1BBX1NDQU5fQklUTUFQX0hFQVA6CisJ CQlyZXR1cm4gIkJJVE1BUF9IRUFQX1NDQU4iOworCQljYXNlIFBHUEFfU0NBTl9GT1JFSUdOOgor CQkJcmV0dXJuICJGT1JFSUdOX0pPSU4iOworCQljYXNlIFBHUEFfU0NBTl9JTkRFWDoKKwkJCXJl dHVybiAiSU5ERVhfU0NBTiI7CisJCWNhc2UgUEdQQV9TQ0FOX0lOREVYX09OTFk6CisJCQlyZXR1 cm4gIklOREVYX09OTFlfU0NBTiI7CisJCWNhc2UgUEdQQV9TQ0FOX1BBUlRJVElPTldJU0U6CisJ CQlyZXR1cm4gIlBBUlRJVElPTldJU0UiOworCQljYXNlIFBHUEFfU0NBTl9USUQ6CisJCQlyZXR1 cm4gIlRJRF9TQ0FOIjsKKwl9CisKKwlwZ191bnJlYWNoYWJsZSgpOworCXJldHVybiBOVUxMOwor fQorCisvKgorICogR2V0IGEgQyBzdHJpbmcgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgcXVlcnkg ZmVhdHVyZSB0eXBlLgorICovCitzdGF0aWMgY2hhciAqCitwZ3BhX2NzdHJpbmdfcXVlcnlfZmVh dHVyZV90eXBlKHBncGFfcWZfdHlwZSB0eXBlKQoreworCXN3aXRjaCAodHlwZSkKKwl7CisJCWNh c2UgUEdQQVFGX0dBVEhFUjoKKwkJCXJldHVybiAiR0FUSEVSIjsKKwkJY2FzZSBQR1BBUUZfR0FU SEVSX01FUkdFOgorCQkJcmV0dXJuICJHQVRIRVJfTUVSR0UiOworCQljYXNlIFBHUEFRRl9TRU1J Sk9JTl9OT05fVU5JUVVFOgorCQkJcmV0dXJuICJTRU1JSk9JTl9OT05fVU5JUVVFIjsKKwkJY2Fz ZSBQR1BBUUZfU0VNSUpPSU5fVU5JUVVFOgorCQkJcmV0dXJuICJTRU1JSk9JTl9VTklRVUUiOwor CX0KKworCisJcGdfdW5yZWFjaGFibGUoKTsKKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIElu c2VydCBhIGxpbmUgYnJlYWsgaW50byB0aGUgU3RyaW5nSW5mb0RhdGEsIGlmIG5lZWRlZC4KKyAq CisgKiBJZiB3cmFwX2NvbHVtbiBpcyB6ZXJvIG9yIG5lZ2F0aXZlLCB0aGlzIGRvZXMgbm90aGlu Zy4gT3RoZXJ3aXNlLCB3ZQorICogY29uc2lkZXIgaW5zZXJ0aW5nIGEgbmV3bGluZS4gV2Ugb25s eSBpbnNlcnQgYSBuZXdsaW5lIGlmIHRoZSBsZW5ndGggb2YKKyAqIHRoZSBsYXN0IGxpbmUgaW4g dGhlIGJ1ZmZlciBleGNlZWRzIHdyYXBfY29sdW1uLCBhbmQgbm90IGlmIHdlJ2QgYmUKKyAqIGlu c2VydGluZyBhIG5ld2xpbmUgYXQgb3IgYmVmb3JlIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGN1cnJl bnQgbGluZS4KKyAqCisgKiBUaGUgcG9zaXRpb24gYXQgd2hpY2ggdGhlIG5ld2xpbmUgaXMgaW5z ZXJ0ZWQgaXMgc2ltcGx5IHdoZXJldmVyIHRoZQorICogYnVmZmVyIGVuZGVkIHRoZSBsYXN0IHRp bWUgdGhpcyBmdW5jdGlvbiB3YXMgY2FsbGVkLiBJbiBvdGhlciB3b3JkcywKKyAqIHRoZSBjYWxs ZXIgaXMgZXhwZWN0ZWQgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIGV2ZXJ5IHRpbWUgd2UgcmVhY2gg YSBnb29kCisgKiBwbGFjZSBmb3IgYSBsaW5lIGJyZWFrLgorICovCitzdGF0aWMgdm9pZAorcGdw YV9tYXliZV9saW5lYnJlYWsoU3RyaW5nSW5mbyBidWYsIGludCB3cmFwX2NvbHVtbikKK3sKKwlj aGFyCSAgICp0cmFpbGluZ19ubDsKKwlpbnQJCQlsaW5lX3N0YXJ0OworCWludAkJCXNhdmVfY3Vy c29yOworCisJLyogSWYgbGluZSB3cmFwcGluZyBpcyBkaXNhYmxlZCwgZXhpdCBxdWlja2x5LiAq LworCWlmICh3cmFwX2NvbHVtbiA8PSAwKQorCQlyZXR1cm47CisKKwkvKgorCSAqIFNldCBsaW5l X3N0YXJ0IHRvIHRoZSBieXRlIG9mZnNldCB3aXRoaW4gYnVmLT5kYXRhIG9mIHRoZSBmaXJzdAor CSAqIGNoYXJhY3RlciBvZiB0aGUgY3VycmVudCBsaW5lLCB3aGVyZSB0aGUgY3VycmVudCBsaW5l IG1lYW5zIHRoZSBsYXN0CisJICogb25lIGluIHRoZSBidWZmZXIuIE5vdGUgdGhhdCBsaW5lX3N0 YXJ0IGNvdWxkIGJlIHRoZSBvZmZzZXQgb2YgdGhlCisJICogdHJhaWxpbmcgJ1wwJyBpZiB0aGUg bGFzdCBjaGFyYWN0ZXIgaW4gdGhlIGJ1ZmZlciBpcyBhIGxpbmUgYnJlYWsuCisJICovCisJdHJh aWxpbmdfbmwgPSBzdHJyY2hyKGJ1Zi0+ZGF0YSwgJ1xuJyk7CisJaWYgKHRyYWlsaW5nX25sID09 IE5VTEwpCisJCWxpbmVfc3RhcnQgPSAwOworCWVsc2UKKwkJbGluZV9zdGFydCA9ICh0cmFpbGlu Z19ubCAtIGJ1Zi0+ZGF0YSkgKyAxOworCisJLyoKKwkgKiBSZW1lbWJlciB0aGF0IHRoZSBjdXJy ZW50IGVuZCBvZiB0aGUgYnVmZmVyIGlzIGEgcG90ZW50aWFsIGxvY2F0aW9uIHRvCisJICogaW5z ZXJ0IGEgbGluZSBicmVhayBvbiBhIGZ1dHVyZSBjYWxsIHRvIHRoaXMgZnVuY3Rpb24uCisJICov CisJc2F2ZV9jdXJzb3IgPSBidWYtPmN1cnNvcjsKKwlidWYtPmN1cnNvciA9IGJ1Zi0+bGVuOwor CisJLyogSWYgd2UgaGF2ZW4ndCBwYXNzZWQgdGhlIHdyYXAgY29sdW1uLCB3ZSBkb24ndCBuZWVk IGEgbmV3bGluZS4gKi8KKwlpZiAoYnVmLT5sZW4gLSBsaW5lX3N0YXJ0IDw9IHdyYXBfY29sdW1u KQorCQlyZXR1cm47CisKKwkvKgorCSAqIEl0IG9ubHkgbWFrZXMgc2Vuc2UgdG8gaW5zZXJ0IGEg bmV3bGluZSBhdCBhIHBvc2l0aW9uIGxhdGVyIHRoYW4gdGhlCisJICogYmVnaW5uaW5nIG9mIHRo ZSBjdXJyZW50IGxpbmUuCisJICovCisJaWYgKHNhdmVfY3Vyc29yIDw9IGxpbmVfc3RhcnQpCisJ CXJldHVybjsKKworCS8qIEluc2VydCBhIG5ld2xpbmUgYXQgdGhlIHByZXZpb3VzIGN1cnNvciBs b2NhdGlvbi4gKi8KKwllbmxhcmdlU3RyaW5nSW5mbyhidWYsIDEpOworCW1lbW1vdmUoJmJ1Zi0+ ZGF0YVtzYXZlX2N1cnNvcl0gKyAxLCAmYnVmLT5kYXRhW3NhdmVfY3Vyc29yXSwKKwkJCWJ1Zi0+ bGVuIC0gc2F2ZV9jdXJzb3IpOworCSsrYnVmLT5jdXJzb3I7CisJYnVmLT5kYXRhWysrYnVmLT5s ZW5dID0gJ1wwJzsKKwlidWYtPmRhdGFbc2F2ZV9jdXJzb3JdID0gJ1xuJzsKK30KZGlmZiAtLWdp dCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9vdXRwdXQuaCBiL2NvbnRyaWIvcGdfcGxh bl9hZHZpY2UvcGdwYV9vdXRwdXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwMC4uZmQzNTEwM2JmYmQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2 aWNlL3BncGFfb3V0cHV0LmgKQEAgLTAsMCArMSwyMiBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg KgorICogcGdwYV9vdXRwdXQuaAorICoJICBwcm9kdWNlIHRleHR1YWwgb3V0cHV0IGZyb20gdGhl IHJlc3VsdHMgb2YgYSBwbGFuIHRyZWUgd2FsaworICoKKyAqIENvcHlyaWdodCAoYykgMjAxNi0y MDI2LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqCSAgY29udHJp Yi9wZ19wbGFuX2FkdmljZS9wZ3BhX291dHB1dC5oCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg Ki8KKyNpZm5kZWYgUEdQQV9PVVRQVVRfSAorI2RlZmluZSBQR1BBX09VVFBVVF9ICisKKyNpbmNs dWRlICJwZ3BhX2lkZW50aWZpZXIuaCIKKyNpbmNsdWRlICJwZ3BhX3dhbGtlci5oIgorCitleHRl cm4gdm9pZCBwZ3BhX291dHB1dF9hZHZpY2UoU3RyaW5nSW5mbyBidWYsCisJCQkJCQkJICAgcGdw YV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsCisJCQkJCQkJICAgcGdwYV9pZGVudGlmaWVy ICpydF9pZGVudGlmaWVycyk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFu X2FkdmljZS9wZ3BhX3BhcnNlci55IGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3BhcnNl ci55Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi44YmZkNzY2NmQwNwot LS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9wYXJzZXIueQpA QCAtMCwwICsxLDMwMSBAQAorJXsKKy8qCisgKiBQYXJzZXIgZm9yIHBsYW4gYWR2aWNlCisgKgor ICogQ29weXJpZ2h0IChjKSAyMDAwLTIwMjYsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50 IEdyb3VwCisgKgorICogY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3BhcnNlci55CisgKi8K KworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlIDxmbG9hdC5oPgorI2luY2x1ZGUg PG1hdGguaD4KKworI2luY2x1ZGUgImZtZ3IuaCIKKyNpbmNsdWRlICJub2Rlcy9taXNjbm9kZXMu aCIKKyNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgorI2luY2x1ZGUgInV0aWxzL2Zsb2F0Lmgi CisKKyNpbmNsdWRlICJwZ3BhX2FzdC5oIgorI2luY2x1ZGUgInBncGFfcGFyc2VyLmgiCisKKy8q CisgKiBCaXNvbiBkb2Vzbid0IGFsbG9jYXRlIGFueXRoaW5nIHRoYXQgbmVlZHMgdG8gbGl2ZSBh Y3Jvc3MgcGFyc2VyIGNhbGxzLAorICogc28gd2UgY2FuIGVhc2lseSBoYXZlIGl0IHVzZSBwYWxs b2MgaW5zdGVhZCBvZiBtYWxsb2MuICBUaGlzIHByZXZlbnRzCisgKiBtZW1vcnkgbGVha3MgaWYg d2UgZXJyb3Igb3V0IGR1cmluZyBwYXJzaW5nLgorICovCisjZGVmaW5lIFlZTUFMTE9DIHBhbGxv YworI2RlZmluZSBZWUZSRUUgICBwZnJlZQorJX0KKworLyogQklTT04gRGVjbGFyYXRpb25zICov CislcGFyc2UtcGFyYW0ge0xpc3QgKipyZXN1bHR9CislcGFyc2UtcGFyYW0ge2NoYXIgKipwYXJz ZV9lcnJvcl9tc2dfcH0KKyVwYXJzZS1wYXJhbSB7eXlzY2FuX3QgeXlzY2FubmVyfQorJWxleC1w YXJhbSB7TGlzdCAqKnJlc3VsdH0KKyVsZXgtcGFyYW0ge2NoYXIgKipwYXJzZV9lcnJvcl9tc2df cH0KKyVsZXgtcGFyYW0ge3l5c2Nhbl90IHl5c2Nhbm5lcn0KKyVwdXJlLXBhcnNlcgorJWV4cGVj dCAwCislbmFtZS1wcmVmaXg9InBncGFfeXkiCisKKyV1bmlvbgoreworCWNoYXIJICAgKnN0cjsK KwlpbnQJCQlpbnRlZ2VyOworCUxpc3QJICAgKmxpc3Q7CisJcGdwYV9hZHZpY2VfaXRlbSAqaXRl bTsKKwlwZ3BhX2FkdmljZV90YXJnZXQgKnRhcmdldDsKKwlwZ3BhX2luZGV4X3RhcmdldCAqaXRh cmdldDsKK30KKyV0b2tlbiA8c3RyPiBUT0tfSURFTlQgVE9LX1RBR19KT0lOX09SREVSIFRPS19U QUdfSU5ERVgKKyV0b2tlbiA8c3RyPiBUT0tfVEFHX1NJTVBMRSBUT0tfVEFHX0dFTkVSSUMKKyV0 b2tlbiA8aW50ZWdlcj4gVE9LX0lOVEVHRVIKKworJXR5cGUgPGludGVnZXI+IG9wdF9yaV9vY2N1 cnJlbmNlCisldHlwZSA8aXRlbT4gYWR2aWNlX2l0ZW0KKyV0eXBlIDxsaXN0PiBhZHZpY2VfaXRl bV9saXN0IGdlbmVyaWNfdGFyZ2V0X2xpc3QKKyV0eXBlIDxsaXN0PiBpbmRleF90YXJnZXRfbGlz dCBqb2luX29yZGVyX3RhcmdldF9saXN0CisldHlwZSA8bGlzdD4gb3B0X3BhcnRpdGlvbiBzaW1w bGVfdGFyZ2V0X2xpc3QKKyV0eXBlIDxzdHI+IGlkZW50aWZpZXIgb3B0X3BsYW5fbmFtZQorJXR5 cGUgPHRhcmdldD4gZ2VuZXJpY19zdWJsaXN0IGpvaW5fb3JkZXJfc3VibGlzdAorJXR5cGUgPHRh cmdldD4gcmVsYXRpb25faWRlbnRpZmllcgorJXR5cGUgPGl0YXJnZXQ+IGluZGV4X25hbWUKKwor JXN0YXJ0IHBhcnNlX3RvcGxldmVsCisKKy8qIEdyYW1tYXIgZm9sbG93cyAqLworJSUKKworcGFy c2VfdG9wbGV2ZWw6IGFkdmljZV9pdGVtX2xpc3QKKwkJeworCQkJKHZvaWQpIHl5bmVycnM7CQkJ CS8qIHN1cHByZXNzIGNvbXBpbGVyIHdhcm5pbmcgKi8KKwkJCSpyZXN1bHQgPSAkMTsKKwkJfQor CTsKKworYWR2aWNlX2l0ZW1fbGlzdDogYWR2aWNlX2l0ZW1fbGlzdCBhZHZpY2VfaXRlbQorCQl7 ICQkID0gbGFwcGVuZCgkMSwgJDIpOyB9CisJfAorCQl7ICQkID0gTklMOyB9CisJOworCithZHZp Y2VfaXRlbTogVE9LX1RBR19KT0lOX09SREVSICcoJyBqb2luX29yZGVyX3RhcmdldF9saXN0ICcp JworCQl7CisJCQkkJCA9IHBhbGxvYzBfb2JqZWN0KHBncGFfYWR2aWNlX2l0ZW0pOworCQkJJCQt PnRhZyA9IFBHUEFfVEFHX0pPSU5fT1JERVI7CisJCQkkJC0+dGFyZ2V0cyA9ICQzOworCQkJaWYg KCQzID09IE5JTCkKKwkJCQlwZ3BhX3l5ZXJyb3IocmVzdWx0LCBwYXJzZV9lcnJvcl9tc2dfcCwg eXlzY2FubmVyLAorCQkJCQkJCSAiSk9JTl9PUkRFUiBtdXN0IGhhdmUgYXQgbGVhc3Qgb25lIHRh cmdldCIpOworCQl9CisJfCBUT0tfVEFHX0lOREVYICcoJyBpbmRleF90YXJnZXRfbGlzdCAnKScK KwkJeworCQkJJCQgPSBwYWxsb2MwX29iamVjdChwZ3BhX2FkdmljZV9pdGVtKTsKKwkJCWlmIChz dHJjbXAoJDEsICJpbmRleF9vbmx5X3NjYW4iKSA9PSAwKQorCQkJCSQkLT50YWcgPSBQR1BBX1RB R19JTkRFWF9PTkxZX1NDQU47CisJCQllbHNlIGlmIChzdHJjbXAoJDEsICJpbmRleF9zY2FuIikg PT0gMCkKKwkJCQkkJC0+dGFnID0gUEdQQV9UQUdfSU5ERVhfU0NBTjsKKwkJCWVsc2UKKwkJCQll bG9nKEVSUk9SLCAidGFnIHBhcnNpbmcgZmFpbGVkOiAlcyIsICQxKTsKKwkJCSQkLT50YXJnZXRz ID0gJDM7CisJCX0KKwl8IFRPS19UQUdfU0lNUExFICcoJyBzaW1wbGVfdGFyZ2V0X2xpc3QgJykn CisJCXsKKwkJCSQkID0gcGFsbG9jMF9vYmplY3QocGdwYV9hZHZpY2VfaXRlbSk7CisJCQlpZiAo c3RyY21wKCQxLCAiYml0bWFwX2hlYXBfc2NhbiIpID09IDApCisJCQkJJCQtPnRhZyA9IFBHUEFf VEFHX0JJVE1BUF9IRUFQX1NDQU47CisJCQllbHNlIGlmIChzdHJjbXAoJDEsICJub19nYXRoZXIi KSA9PSAwKQorCQkJCSQkLT50YWcgPSBQR1BBX1RBR19OT19HQVRIRVI7CisJCQllbHNlIGlmIChz dHJjbXAoJDEsICJzZXFfc2NhbiIpID09IDApCisJCQkJJCQtPnRhZyA9IFBHUEFfVEFHX1NFUV9T Q0FOOworCQkJZWxzZSBpZiAoc3RyY21wKCQxLCAidGlkX3NjYW4iKSA9PSAwKQorCQkJCSQkLT50 YWcgPSBQR1BBX1RBR19USURfU0NBTjsKKwkJCWVsc2UKKwkJCQllbG9nKEVSUk9SLCAidGFnIHBh cnNpbmcgZmFpbGVkOiAlcyIsICQxKTsKKwkJCSQkLT50YXJnZXRzID0gJDM7CisJCX0KKwl8IFRP S19UQUdfR0VORVJJQyAnKCcgZ2VuZXJpY190YXJnZXRfbGlzdCAnKScKKwkJeworCQkJYm9vbAlm YWlsOworCisJCQkkJCA9IHBhbGxvYzBfb2JqZWN0KHBncGFfYWR2aWNlX2l0ZW0pOworCQkJJCQt PnRhZyA9IHBncGFfcGFyc2VfYWR2aWNlX3RhZygkMSwgJmZhaWwpOworCQkJaWYgKGZhaWwpCisJ CQl7CisJCQkJcGdwYV95eWVycm9yKHJlc3VsdCwgcGFyc2VfZXJyb3JfbXNnX3AsIHl5c2Nhbm5l ciwKKwkJCQkJCQkgInVucmVjb2duaXplZCBhZHZpY2UgdGFnIik7CisJCQl9CisKKwkJCWlmICgk JC0+dGFnID09IFBHUEFfVEFHX0ZPUkVJR05fSk9JTikKKwkJCXsKKwkJCQlmb3JlYWNoX3B0cihw Z3BhX2FkdmljZV90YXJnZXQsIHRhcmdldCwgJDMpCisJCQkJeworCQkJCQlpZiAodGFyZ2V0LT50 dHlwZSA9PSBQR1BBX1RBUkdFVF9JREVOVElGSUVSIHx8CisJCQkJCQlsaXN0X2xlbmd0aCh0YXJn ZXQtPmNoaWxkcmVuKSA9PSAxKQorCQkJCQkJCXBncGFfeXllcnJvcihyZXN1bHQsIHBhcnNlX2Vy cm9yX21zZ19wLCB5eXNjYW5uZXIsCisJCQkJCQkJCQkJICJGT1JFSUdOX0pPSU4gdGFyZ2V0cyBt dXN0IGNvbnRhaW4gbW9yZSB0aGFuIG9uZSByZWxhdGlvbiBpZGVudGlmaWVyIik7CisJCQkJfQor CQkJfQorCisJCQkkJC0+dGFyZ2V0cyA9ICQzOworCQl9CisJOworCityZWxhdGlvbl9pZGVudGlm aWVyOiBpZGVudGlmaWVyIG9wdF9yaV9vY2N1cnJlbmNlIG9wdF9wYXJ0aXRpb24gb3B0X3BsYW5f bmFtZQorCQl7CisJCQkkJCA9IHBhbGxvYzBfb2JqZWN0KHBncGFfYWR2aWNlX3RhcmdldCk7CisJ CQkkJC0+dHR5cGUgPSBQR1BBX1RBUkdFVF9JREVOVElGSUVSOworCQkJJCQtPnJpZC5hbGlhc19u YW1lID0gJDE7CisJCQkkJC0+cmlkLm9jY3VycmVuY2UgPSAkMjsKKwkJCWlmIChsaXN0X2xlbmd0 aCgkMykgPT0gMikKKwkJCXsKKwkJCQkkJC0+cmlkLnBhcnRuc3AgPSBsaW5pdGlhbCgkMyk7CisJ CQkJJCQtPnJpZC5wYXJ0cmVsID0gbHNlY29uZCgkMyk7CisJCQl9CisJCQllbHNlIGlmICgkMyAh PSBOSUwpCisJCQkJJCQtPnJpZC5wYXJ0cmVsID0gbGluaXRpYWwoJDMpOworCQkJJCQtPnJpZC5w bGFuX25hbWUgPSAkNDsKKwkJfQorCTsKKworaW5kZXhfbmFtZTogaWRlbnRpZmllcgorCQl7CisJ CQkkJCA9IHBhbGxvYzBfb2JqZWN0KHBncGFfaW5kZXhfdGFyZ2V0KTsKKwkJCSQkLT5pbmRuYW1l ID0gJDE7CisJCX0KKwl8IGlkZW50aWZpZXIgJy4nIGlkZW50aWZpZXIKKwkJeworCQkJJCQgPSBw YWxsb2MwX29iamVjdChwZ3BhX2luZGV4X3RhcmdldCk7CisJCQkkJC0+aW5kbmFtZXNwYWNlID0g JDE7CisJCQkkJC0+aW5kbmFtZSA9ICQzOworCQl9CisJOworCitvcHRfcmlfb2NjdXJyZW5jZToK KwknIycgVE9LX0lOVEVHRVIKKwkJeworCQkJaWYgKCQyIDw9IDApCisJCQkJcGdwYV95eWVycm9y KHJlc3VsdCwgcGFyc2VfZXJyb3JfbXNnX3AsIHl5c2Nhbm5lciwKKwkJCQkJCQkgIm9ubHkgcG9z aXRpdmUgb2NjdXJyZW5jZSBudW1iZXJzIGFyZSBwZXJtaXR0ZWQiKTsKKwkJCSQkID0gJDI7CisJ CX0KKwl8CisJCXsKKwkJCS8qIFRoZSBkZWZhdWx0IG9jY3VycmVuY2UgbnVtYmVyIGlzIDEuICov CisJCQkkJCA9IDE7CisJCX0KKwk7CisKK2lkZW50aWZpZXI6IFRPS19JREVOVAorCXwgVE9LX1RB R19KT0lOX09SREVSCisJfCBUT0tfVEFHX0lOREVYCisJfCBUT0tfVEFHX1NJTVBMRQorCXwgVE9L X1RBR19HRU5FUklDCisJOworCisvKgorICogV2hlbiBnZW5lcmF0aW5nIGFkdmljZSwgd2UgYWx3 YXlzIHNjaGVtYS1xdWFsaWZ5IHRoZSBwYXJ0aXRpb24gbmFtZSwgYnV0CisgKiB3aGVuIHBhcnNp bmcgYWR2aWNlLCB3ZSBhY2NlcHQgYSBzcGVjaWZpY2F0aW9uIHRoYXQgbGFja3Mgb25lLgorICov CitvcHRfcGFydGl0aW9uOgorCScvJyBUT0tfSURFTlQgJy4nIFRPS19JREVOVAorCQl7ICQkID0g bGlzdF9tYWtlMigkMiwgJDQpOyB9CisJfCAnLycgVE9LX0lERU5UCisJCXsgJCQgPSBsaXN0X21h a2UxKCQyKTsgfQorCXwKKwkJeyAkJCA9IE5JTDsgfQorCTsKKworb3B0X3BsYW5fbmFtZToKKwkn QCcgVE9LX0lERU5UCisJCXsgJCQgPSAkMjsgfQorCXwKKwkJeyAkJCA9IE5VTEw7IH0KKwk7CisK K2dlbmVyaWNfdGFyZ2V0X2xpc3Q6IGdlbmVyaWNfdGFyZ2V0X2xpc3QgcmVsYXRpb25faWRlbnRp ZmllcgorCQl7ICQkID0gbGFwcGVuZCgkMSwgJDIpOyB9CisJfCBnZW5lcmljX3RhcmdldF9saXN0 IGdlbmVyaWNfc3VibGlzdAorCQl7ICQkID0gbGFwcGVuZCgkMSwgJDIpOyB9CisJfAorCQl7ICQk ID0gTklMOyB9CisJOworCitnZW5lcmljX3N1Ymxpc3Q6ICcoJyBzaW1wbGVfdGFyZ2V0X2xpc3Qg JyknCisJCXsKKwkJCSQkID0gcGFsbG9jMF9vYmplY3QocGdwYV9hZHZpY2VfdGFyZ2V0KTsKKwkJ CSQkLT50dHlwZSA9IFBHUEFfVEFSR0VUX09SREVSRURfTElTVDsKKwkJCSQkLT5jaGlsZHJlbiA9 ICQyOworCQl9CisJOworCitpbmRleF90YXJnZXRfbGlzdDoKKwkgIGluZGV4X3RhcmdldF9saXN0 IHJlbGF0aW9uX2lkZW50aWZpZXIgaW5kZXhfbmFtZQorCQl7CisJCQkkMi0+aXRhcmdldCA9ICQz OworCQkJJCQgPSBsYXBwZW5kKCQxLCAkMik7CisJCX0KKwl8CisJCXsgJCQgPSBOSUw7IH0KKwk7 CisKK2pvaW5fb3JkZXJfdGFyZ2V0X2xpc3Q6IGpvaW5fb3JkZXJfdGFyZ2V0X2xpc3QgcmVsYXRp b25faWRlbnRpZmllcgorCQl7ICQkID0gbGFwcGVuZCgkMSwgJDIpOyB9CisJfCBqb2luX29yZGVy X3RhcmdldF9saXN0IGpvaW5fb3JkZXJfc3VibGlzdAorCQl7ICQkID0gbGFwcGVuZCgkMSwgJDIp OyB9CisJfAorCQl7ICQkID0gTklMOyB9CisJOworCitqb2luX29yZGVyX3N1Ymxpc3Q6CisJJygn IGpvaW5fb3JkZXJfdGFyZ2V0X2xpc3QgJyknCisJCXsKKwkJCSQkID0gcGFsbG9jMF9vYmplY3Qo cGdwYV9hZHZpY2VfdGFyZ2V0KTsKKwkJCSQkLT50dHlwZSA9IFBHUEFfVEFSR0VUX09SREVSRURf TElTVDsKKwkJCSQkLT5jaGlsZHJlbiA9ICQyOworCQl9CisJfCAneycgc2ltcGxlX3RhcmdldF9s aXN0ICd9JworCQl7CisJCQkkJCA9IHBhbGxvYzBfb2JqZWN0KHBncGFfYWR2aWNlX3RhcmdldCk7 CisJCQkkJC0+dHR5cGUgPSBQR1BBX1RBUkdFVF9VTk9SREVSRURfTElTVDsKKwkJCSQkLT5jaGls ZHJlbiA9ICQyOworCQl9CisJOworCitzaW1wbGVfdGFyZ2V0X2xpc3Q6IHNpbXBsZV90YXJnZXRf bGlzdCByZWxhdGlvbl9pZGVudGlmaWVyCisJCXsgJCQgPSBsYXBwZW5kKCQxLCAkMik7IH0KKwl8 CisJCXsgJCQgPSBOSUw7IH0KKwk7CisKKyUlCisKKy8qCisgKiBQYXJzZSBhbiBhZHZpY2Vfc3Ry aW5nIGFuZCByZXR1cm4gdGhlIHJlc3VsdGluZyBsaXN0IG9mIHBncGFfYWR2aWNlX2l0ZW0KKyAq IG9iamVjdHMuIElmIGEgcGFyc2UgZXJyb3Igb2NjdXJzLCBpbnN0ZWFkIHJldHVybiBOVUxMLgor ICoKKyAqIElmIHRoZSByZXR1cm4gdmFsdWUgaXMgTlVMTCwgKmVycm9yX3Agd2lsbCBiZSBzZXQg dG8gdGhlIGVycm9yIG1lc3NhZ2U7CisgKiBvdGhlcndpc2UsICplcnJvcl9wIHdpbGwgYmUgc2V0 IHRvIE5VTEwuCisgKi8KK0xpc3QgKgorcGdwYV9wYXJzZShjb25zdCBjaGFyICphZHZpY2Vfc3Ry aW5nLCBjaGFyICoqZXJyb3JfcCkKK3sKKwl5eXNjYW5fdAlzY2FubmVyOworCUxpc3QJICAgKnJl c3VsdDsKKwljaGFyCSAgICplcnJvciA9IE5VTEw7CisKKwlwZ3BhX3NjYW5uZXJfaW5pdChhZHZp Y2Vfc3RyaW5nLCAmc2Nhbm5lcik7CisJcGdwYV95eXBhcnNlKCZyZXN1bHQsICZlcnJvciwgc2Nh bm5lcik7CisJcGdwYV9zY2FubmVyX2ZpbmlzaChzY2FubmVyKTsKKworCWlmIChlcnJvciAhPSBO VUxMKQorCXsKKwkJKmVycm9yX3AgPSBlcnJvcjsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJKmVy cm9yX3AgPSBOVUxMOworCXJldHVybiByZXN1bHQ7Cit9CmRpZmYgLS1naXQgYS9jb250cmliL3Bn X3BsYW5fYWR2aWNlL3BncGFfcGxhbm5lci5jIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3Bh X3BsYW5uZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNTUwOGI4 YWY3MDcKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfcGxh bm5lci5jCkBAIC0wLDAgKzEsMjE5OCBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogcGdw YV9wbGFubmVyLmMKKyAqCSAgVXNlIHBsYW5uZXIgaG9va3MgdG8gb2JzZXJ2ZSBhbmQgbW9kaWZ5 IHBsYW5uZXIgYmVoYXZpb3IKKyAqCisgKiBBbGwgaW50ZXJhY3Rpb24gd2l0aCB0aGUgY29yZSBw bGFubmVyIGhhcHBlbnMgaGVyZS4gTXVjaCBvZiBpdCBoYXMgdG8KKyAqIGRvIHdpdGggZW5mb3Jj aW5nIHN1cHBsaWVkIGFkdmljZSwgYnV0IHdlIGFsc28gbmVlZCB0aGVzZSBob29rcyB0bworICog Z2VuZXJhdGUgYWR2aWNlIHN0cmluZ3MgKHRob3VnaCB0aGUgaGVhdnkgbGlmdGluZyBpbiB0aGF0 IGNhc2UgaXMKKyAqIG1vc3RseSBkb25lIGJ5IHBncGFfd2Fsa2VyLmMpLgorICoKKyAqIENvcHly aWdodCAoYykgMjAxNi0yMDI2LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAor ICoKKyAqCSAgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3BsYW5uZXIuYworICoKKyAqLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorICovCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgInBn X3BsYW5fYWR2aWNlLmgiCisjaW5jbHVkZSAicGdwYV9pZGVudGlmaWVyLmgiCisjaW5jbHVkZSAi cGdwYV9vdXRwdXQuaCIKKyNpbmNsdWRlICJwZ3BhX3BsYW5uZXIuaCIKKyNpbmNsdWRlICJwZ3Bh X3Ryb3ZlLmgiCisjaW5jbHVkZSAicGdwYV93YWxrZXIuaCIKKworI2luY2x1ZGUgImNvbW1hbmRz L2RlZnJlbS5oIgorI2luY2x1ZGUgImNvbW1vbi9oYXNoZm5fdW5zdGFibGUuaCIKKyNpbmNsdWRl ICJub2Rlcy9tYWtlZnVuY3MuaCIKKyNpbmNsdWRlICJvcHRpbWl6ZXIvZXh0ZW5kcGxhbi5oIgor I2luY2x1ZGUgIm9wdGltaXplci9wYXRobm9kZS5oIgorI2luY2x1ZGUgIm9wdGltaXplci9wYXRo cy5oIgorI2luY2x1ZGUgIm9wdGltaXplci9wbGFuY2F0LmgiCisjaW5jbHVkZSAib3B0aW1pemVy L3BsYW5uZXIuaCIKKyNpbmNsdWRlICJwYXJzZXIvcGFyc2V0cmVlLmgiCisjaW5jbHVkZSAidXRp bHMvbHN5c2NhY2hlLmgiCisKKyNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5HCisKKy8qCisgKiBX aGVuIGFzc2VydGlvbnMgYXJlIGVuYWJsZWQsIHdlIHRyeSBnZW5lcmF0aW5nIHJlbGF0aW9uIGlk ZW50aWZpZXJzIGR1cmluZworICogcGxhbm5pbmcsIHNhdmluZyB0aGVtIGluIGEgaGFzaCB0YWJs ZSwgYW5kIHRoZW4gY3Jvc3MtY2hlY2tpbmcgdGhlbSBhZ2FpbnN0CisgKiB0aGUgb25lcyBnZW5l cmF0ZWQgYWZ0ZXIgcGxhbm5pbmcgaXMgY29tcGxldGUuCisgKi8KK3R5cGVkZWYgc3RydWN0IHBn cGFfcmlfY2hlY2tlcl9rZXkKK3sKKwljaGFyCSAgICpwbGFuX25hbWU7CisJSW5kZXgJCXJ0aTsK K30gcGdwYV9yaV9jaGVja2VyX2tleTsKKwordHlwZWRlZiBzdHJ1Y3QgcGdwYV9yaV9jaGVja2Vy Cit7CisJcGdwYV9yaV9jaGVja2VyX2tleSBrZXk7CisJdWludDMyCQlzdGF0dXM7CisJY29uc3Qg Y2hhciAqcmlkX3N0cmluZzsKK30gcGdwYV9yaV9jaGVja2VyOworCitzdGF0aWMgdWludDMyIHBn cGFfcmlfY2hlY2tlcl9oYXNoX2tleShwZ3BhX3JpX2NoZWNrZXJfa2V5IGtleSk7CisKK3N0YXRp YyBpbmxpbmUgYm9vbAorcGdwYV9yaV9jaGVja2VyX2NvbXBhcmVfa2V5KHBncGFfcmlfY2hlY2tl cl9rZXkgYSwgcGdwYV9yaV9jaGVja2VyX2tleSBiKQoreworCWlmIChhLnJ0aSAhPSBiLnJ0aSkK KwkJcmV0dXJuIGZhbHNlOworCWlmIChhLnBsYW5fbmFtZSA9PSBOVUxMKQorCQlyZXR1cm4gKGIu cGxhbl9uYW1lID09IE5VTEwpOworCWlmIChiLnBsYW5fbmFtZSA9PSBOVUxMKQorCQlyZXR1cm4g ZmFsc2U7CisJcmV0dXJuIHN0cmNtcChhLnBsYW5fbmFtZSwgYi5wbGFuX25hbWUpID09IDA7Cit9 CisKKyNkZWZpbmUgU0hfUFJFRklYCQkJcGdwYV9yaV9jaGVjaworI2RlZmluZSBTSF9FTEVNRU5U X1RZUEUJCXBncGFfcmlfY2hlY2tlcgorI2RlZmluZSBTSF9LRVlfVFlQRQkJCXBncGFfcmlfY2hl Y2tlcl9rZXkKKyNkZWZpbmUgU0hfS0VZCQkJCWtleQorI2RlZmluZSBTSF9IQVNIX0tFWSh0Yiwg a2V5KQlwZ3BhX3JpX2NoZWNrZXJfaGFzaF9rZXkoa2V5KQorI2RlZmluZQlTSF9FUVVBTCh0Yiwg YSwgYikJcGdwYV9yaV9jaGVja2VyX2NvbXBhcmVfa2V5KGEsIGIpCisjZGVmaW5lIFNIX1NDT1BF CQkJc3RhdGljIGlubGluZQorI2RlZmluZSBTSF9ERUNMQVJFCisjZGVmaW5lIFNIX0RFRklORQor I2luY2x1ZGUgImxpYi9zaW1wbGVoYXNoLmgiCisKKyNlbmRpZgorCit0eXBlZGVmIGVudW0gcGdw YV9qb19vdXRjb21lCit7CisJUEdQQV9KT19QRVJNSVRURUQsCQkJLyogcGVybWl0IHRoaXMgam9p biBvcmRlciAqLworCVBHUEFfSk9fREVOSUVELAkJCQkvKiBkZW55IHRoaXMgam9pbiBvcmRlciAq LworCVBHUEFfSk9fSU5ESUZGRVJFTlQJCQkvKiBkbyBuZWl0aGVyICovCit9IHBncGFfam9fb3V0 Y29tZTsKKwordHlwZWRlZiBzdHJ1Y3QgcGdwYV9wbGFubmVyX3N0YXRlCit7CisJYm9vbAkJZ2Vu ZXJhdGVfYWR2aWNlX2ZlZWRiYWNrOworCWJvb2wJCWdlbmVyYXRlX2FkdmljZV9zdHJpbmc7CisJ cGdwYV90cm92ZSAqdHJvdmU7CisJTGlzdAkgICAqc2pfdW5pcXVlX3JlbHM7CisKKyNpZmRlZiBV U0VfQVNTRVJUX0NIRUNLSU5HCisJcGdwYV9yaV9jaGVja19oYXNoICpyaV9jaGVja19oYXNoOwor I2VuZGlmCit9IHBncGFfcGxhbm5lcl9zdGF0ZTsKKwordHlwZWRlZiBzdHJ1Y3QgcGdwYV9qb2lu X3N0YXRlCit7CisJLyogTW9zdC1yZWNlbnRseS1jb25zaWRlcmVkIG91dGVyIHJlbC4gKi8KKwlS ZWxPcHRJbmZvICpvdXRlcnJlbDsKKworCS8qIE1vc3QtcmVjZW50bHktY29uc2lkZXJlZCBpbm5l ciByZWwuICovCisJUmVsT3B0SW5mbyAqaW5uZXJyZWw7CisKKwkvKgorCSAqIEFycmF5IG9mIHJl bGF0aW9uIGlkZW50aWZpZXJzIGZvciBhbGwgbWVtYmVycyBvZiB0aGlzIGpvaW5yZWwsIHdpdGgK KwkgKiBvdXRlcnJlbCBpZGVudGlmaWVycyBiZWZvcmUgaW5uZXJyZWwgaWRlbnRpZmllcnMuCisJ ICovCisJcGdwYV9pZGVudGlmaWVyICpyaWRzOworCisJLyogTnVtYmVyIG9mIG91dGVyIHJlbCBp ZGVudGlmaWVycy4gKi8KKwlpbnQJCQlvdXRlcl9jb3VudDsKKworCS8qIE51bWJlciBvZiBpbm5l ciByZWwgaWRlbnRpZmllcnMuICovCisJaW50CQkJaW5uZXJfY291bnQ7CisKKwkvKgorCSAqIFRy b3ZlIGxvb2t1cCByZXN1bHRzLgorCSAqCisJICogam9pbl9lbnRyaWVzIGFuZCByZWxfZW50cmll cyBhcmUgYXJyYXlzIG9mIGVudHJpZXMsIGFuZCBqb2luX2luZGV4ZXMKKwkgKiBhbmQgcmVsX2lu ZGV4ZXMgYXJlIHRoZSBpbnRlZ2VyIG9mZnNldHMgd2l0aGluIHRob3NlIGFycmF5cyBvZiBlbnRy aWVzCisJICogcG90ZW50aWFsbHkgcmVsZXZhbnQgdG8gdXMuIFRoZSAiam9pbiIgZmllbGRzIGNv cnJlc3BvbmQgdG8gYSBsb29rdXAKKwkgKiB1c2luZyBQR1BBX1RST1ZFX0xPT0tVUF9KT0lOIGFu ZCB0aGUgInJlbCIgZmllbGRzIHRvIGEgbG9va3VwIHVzaW5nCisJICogUEdQQV9UUk9WRV9MT09L VVBfUkVMLgorCSAqLworCXBncGFfdHJvdmVfZW50cnkgKmpvaW5fZW50cmllczsKKwlCaXRtYXBz ZXQgICpqb2luX2luZGV4ZXM7CisJcGdwYV90cm92ZV9lbnRyeSAqcmVsX2VudHJpZXM7CisJQml0 bWFwc2V0ICAqcmVsX2luZGV4ZXM7Cit9IHBncGFfam9pbl9zdGF0ZTsKKworLyogU2F2ZWQgaG9v ayB2YWx1ZXMgKi8KK3N0YXRpYyBidWlsZF9zaW1wbGVfcmVsX2hvb2tfdHlwZSBwcmV2X2J1aWxk X3NpbXBsZV9yZWwgPSBOVUxMOworc3RhdGljIGpvaW5fcGF0aF9zZXR1cF9ob29rX3R5cGUgcHJl dl9qb2luX3BhdGhfc2V0dXAgPSBOVUxMOworc3RhdGljIGpvaW5yZWxfc2V0dXBfaG9va190eXBl IHByZXZfam9pbnJlbF9zZXR1cCA9IE5VTEw7CitzdGF0aWMgcGxhbm5lcl9zZXR1cF9ob29rX3R5 cGUgcHJldl9wbGFubmVyX3NldHVwID0gTlVMTDsKK3N0YXRpYyBwbGFubmVyX3NodXRkb3duX2hv b2tfdHlwZSBwcmV2X3BsYW5uZXJfc2h1dGRvd24gPSBOVUxMOworCisvKiBPdGhlciBnbG9iYWwg dmFyaWFibGVzICovCitpbnQJCQlwZ3BhX3BsYW5uZXJfZ2VuZXJhdGVfYWR2aWNlID0gMDsKK3N0 YXRpYyBpbnQJcGxhbm5lcl9leHRlbnNpb25faWQgPSAtMTsKKworLyogRnVuY3Rpb24gcHJvdG90 eXBlcy4gKi8KK3N0YXRpYyB2b2lkIHBncGFfcGxhbm5lcl9zZXR1cChQbGFubmVyR2xvYmFsICpn bG9iLCBRdWVyeSAqcGFyc2UsCisJCQkJCQkJICAgY29uc3QgY2hhciAqcXVlcnlfc3RyaW5nLAor CQkJCQkJCSAgIGludCBjdXJzb3JPcHRpb25zLAorCQkJCQkJCSAgIGRvdWJsZSAqdHVwbGVfZnJh Y3Rpb24sCisJCQkJCQkJICAgRXhwbGFpblN0YXRlICplcyk7CitzdGF0aWMgdm9pZCBwZ3BhX3Bs YW5uZXJfc2h1dGRvd24oUGxhbm5lckdsb2JhbCAqZ2xvYiwgUXVlcnkgKnBhcnNlLAorCQkJCQkJ CQkgIGNvbnN0IGNoYXIgKnF1ZXJ5X3N0cmluZywgUGxhbm5lZFN0bXQgKnBzdG10KTsKK3N0YXRp YyB2b2lkIHBncGFfYnVpbGRfc2ltcGxlX3JlbChQbGFubmVySW5mbyAqcm9vdCwKKwkJCQkJCQkJ ICBSZWxPcHRJbmZvICpyZWwsCisJCQkJCQkJCSAgUmFuZ2VUYmxFbnRyeSAqcnRlKTsKK3N0YXRp YyB2b2lkIHBncGFfam9pbnJlbF9zZXR1cChQbGFubmVySW5mbyAqcm9vdCwKKwkJCQkJCQkgICBS ZWxPcHRJbmZvICpqb2lucmVsLAorCQkJCQkJCSAgIFJlbE9wdEluZm8gKm91dGVycmVsLAorCQkJ CQkJCSAgIFJlbE9wdEluZm8gKmlubmVycmVsLAorCQkJCQkJCSAgIFNwZWNpYWxKb2luSW5mbyAq c2ppbmZvLAorCQkJCQkJCSAgIExpc3QgKnJlc3RyaWN0bGlzdCk7CitzdGF0aWMgdm9pZCBwZ3Bh X2pvaW5fcGF0aF9zZXR1cChQbGFubmVySW5mbyAqcm9vdCwKKwkJCQkJCQkJIFJlbE9wdEluZm8g KmpvaW5yZWwsCisJCQkJCQkJCSBSZWxPcHRJbmZvICpvdXRlcnJlbCwKKwkJCQkJCQkJIFJlbE9w dEluZm8gKmlubmVycmVsLAorCQkJCQkJCQkgSm9pblR5cGUgam9pbnR5cGUsCisJCQkJCQkJCSBK b2luUGF0aEV4dHJhRGF0YSAqZXh0cmEpOworc3RhdGljIHBncGFfam9pbl9zdGF0ZSAqcGdwYV9n ZXRfam9pbl9zdGF0ZShQbGFubmVySW5mbyAqcm9vdCwKKwkJCQkJCQkJCQkJUmVsT3B0SW5mbyAq am9pbnJlbCwKKwkJCQkJCQkJCQkJUmVsT3B0SW5mbyAqb3V0ZXJyZWwsCisJCQkJCQkJCQkJCVJl bE9wdEluZm8gKmlubmVycmVsKTsKK3N0YXRpYyB2b2lkIHBncGFfcGxhbm5lcl9hcHBseV9qb2lu cmVsX2FkdmljZSh1aW50NjQgKnBnc19tYXNrX3AsCisJCQkJCQkJCQkJCSAgY2hhciAqcGxhbl9u YW1lLAorCQkJCQkJCQkJCQkgIHBncGFfam9pbl9zdGF0ZSAqcGpzKTsKK3N0YXRpYyB2b2lkIHBn cGFfcGxhbm5lcl9hcHBseV9qb2luX3BhdGhfYWR2aWNlKEpvaW5UeXBlIGpvaW50eXBlLAorCQkJ CQkJCQkJCQkJdWludDY0ICpwZ3NfbWFza19wLAorCQkJCQkJCQkJCQkJY2hhciAqcGxhbl9uYW1l LAorCQkJCQkJCQkJCQkJcGdwYV9qb2luX3N0YXRlICpwanMpOworc3RhdGljIHZvaWQgcGdwYV9w bGFubmVyX2FwcGx5X3NjYW5fYWR2aWNlKFJlbE9wdEluZm8gKnJlbCwKKwkJCQkJCQkJCQkgICBw Z3BhX3Ryb3ZlX2VudHJ5ICpzY2FuX2VudHJpZXMsCisJCQkJCQkJCQkJICAgQml0bWFwc2V0ICpz Y2FuX2luZGV4ZXMsCisJCQkJCQkJCQkJICAgcGdwYV90cm92ZV9lbnRyeSAqcmVsX2VudHJpZXMs CisJCQkJCQkJCQkJICAgQml0bWFwc2V0ICpyZWxfaW5kZXhlcyk7CitzdGF0aWMgdWludDY0IHBn cGFfam9pbl9zdHJhdGVneV9tYXNrX2Zyb21fYWR2aWNlX3RhZyhwZ3BhX2FkdmljZV90YWdfdHlw ZSB0YWcpOworc3RhdGljIHBncGFfam9fb3V0Y29tZSBwZ3BhX2pvaW5fb3JkZXJfcGVybWl0c19q b2luKGludCBvdXRlcl9jb3VudCwKKwkJCQkJCQkJCQkJCQlpbnQgaW5uZXJfY291bnQsCisJCQkJ CQkJCQkJCQkJcGdwYV9pZGVudGlmaWVyICpyaWRzLAorCQkJCQkJCQkJCQkJCXBncGFfdHJvdmVf ZW50cnkgKmVudHJ5KTsKK3N0YXRpYyBib29sIHBncGFfam9pbl9tZXRob2RfcGVybWl0c19qb2lu KGludCBvdXRlcl9jb3VudCwgaW50IGlubmVyX2NvdW50LAorCQkJCQkJCQkJCSAgcGdwYV9pZGVu dGlmaWVyICpyaWRzLAorCQkJCQkJCQkJCSAgcGdwYV90cm92ZV9lbnRyeSAqZW50cnksCisJCQkJ CQkJCQkJICBib29sICpyZXN0cmljdF9tZXRob2QpOworc3RhdGljIGJvb2wgcGdwYV9vcGFxdWVf am9pbl9wZXJtaXRzX2pvaW4oaW50IG91dGVyX2NvdW50LCBpbnQgaW5uZXJfY291bnQsCisJCQkJ CQkJCQkJICBwZ3BhX2lkZW50aWZpZXIgKnJpZHMsCisJCQkJCQkJCQkJICBwZ3BhX3Ryb3ZlX2Vu dHJ5ICplbnRyeSwKKwkJCQkJCQkJCQkgIGJvb2wgKnJlc3RyaWN0X21ldGhvZCk7CitzdGF0aWMg Ym9vbCBwZ3BhX3NlbWlqb2luX3Blcm1pdHNfam9pbihpbnQgb3V0ZXJfY291bnQsIGludCBpbm5l cl9jb3VudCwKKwkJCQkJCQkJCSAgIHBncGFfaWRlbnRpZmllciAqcmlkcywKKwkJCQkJCQkJCSAg IHBncGFfdHJvdmVfZW50cnkgKmVudHJ5LAorCQkJCQkJCQkJICAgYm9vbCBvdXRlcl9pc19udWxs YWJsZSwKKwkJCQkJCQkJCSAgIGJvb2wgKnJlc3RyaWN0X21ldGhvZCk7CisKK3N0YXRpYyBMaXN0 ICpwZ3BhX3BsYW5uZXJfYXBwZW5kX2ZlZWRiYWNrKExpc3QgKmxpc3QsIHBncGFfdHJvdmUgKnRy b3ZlLAorCQkJCQkJCQkJCSAgcGdwYV90cm92ZV9sb29rdXBfdHlwZSB0eXBlLAorCQkJCQkJCQkJ CSAgcGdwYV9pZGVudGlmaWVyICpydF9pZGVudGlmaWVycywKKwkJCQkJCQkJCQkgIHBncGFfcGxh bl93YWxrZXJfY29udGV4dCAqd2Fsa2VyKTsKK3N0YXRpYyB2b2lkIHBncGFfcGxhbm5lcl9mZWVk YmFja193YXJuaW5nKExpc3QgKmZlZWRiYWNrKTsKKworc3RhdGljIGlubGluZSB2b2lkIHBncGFf cmlfY2hlY2tlcl9zYXZlKHBncGFfcGxhbm5lcl9zdGF0ZSAqcHBzLAorCQkJCQkJCQkJCVBsYW5u ZXJJbmZvICpyb290LAorCQkJCQkJCQkJCVJlbE9wdEluZm8gKnJlbCk7CitzdGF0aWMgdm9pZCBw Z3BhX3JpX2NoZWNrZXJfdmFsaWRhdGUocGdwYV9wbGFubmVyX3N0YXRlICpwcHMsCisJCQkJCQkJ CQkgUGxhbm5lZFN0bXQgKnBzdG10KTsKKworc3RhdGljIGNoYXIgKnBncGFfYm1zX3RvX2NzdHJp bmcoQml0bWFwc2V0ICpibXMpOworc3RhdGljIGNvbnN0IGNoYXIgKnBncGFfam9pbnR5cGVfdG9f Y3N0cmluZyhKb2luVHlwZSBqb2ludHlwZSk7CisKKy8qCisgKiBJbnN0YWxsIHBsYW5uZXItcmVs YXRlZCBob29rcy4KKyAqLwordm9pZAorcGdwYV9wbGFubmVyX2luc3RhbGxfaG9va3Modm9pZCkK K3sKKwlwbGFubmVyX2V4dGVuc2lvbl9pZCA9IEdldFBsYW5uZXJFeHRlbnNpb25JZCgicGdfcGxh bl9hZHZpY2UiKTsKKwlwcmV2X3BsYW5uZXJfc2V0dXAgPSBwbGFubmVyX3NldHVwX2hvb2s7CisJ cGxhbm5lcl9zZXR1cF9ob29rID0gcGdwYV9wbGFubmVyX3NldHVwOworCXByZXZfcGxhbm5lcl9z aHV0ZG93biA9IHBsYW5uZXJfc2h1dGRvd25faG9vazsKKwlwbGFubmVyX3NodXRkb3duX2hvb2sg PSBwZ3BhX3BsYW5uZXJfc2h1dGRvd247CisJcHJldl9idWlsZF9zaW1wbGVfcmVsID0gYnVpbGRf c2ltcGxlX3JlbF9ob29rOworCWJ1aWxkX3NpbXBsZV9yZWxfaG9vayA9IHBncGFfYnVpbGRfc2lt cGxlX3JlbDsKKwlwcmV2X2pvaW5yZWxfc2V0dXAgPSBqb2lucmVsX3NldHVwX2hvb2s7CisJam9p bnJlbF9zZXR1cF9ob29rID0gcGdwYV9qb2lucmVsX3NldHVwOworCXByZXZfam9pbl9wYXRoX3Nl dHVwID0gam9pbl9wYXRoX3NldHVwX2hvb2s7CisJam9pbl9wYXRoX3NldHVwX2hvb2sgPSBwZ3Bh X2pvaW5fcGF0aF9zZXR1cDsKK30KKworLyoKKyAqIENhcnJ5IG91dCB3aGF0ZXZlciBzZXR1cCB3 b3JrIHdlIG5lZWQgdG8gZG8gYmVmb3JlIHBsYW5uaW5nLgorICovCitzdGF0aWMgdm9pZAorcGdw YV9wbGFubmVyX3NldHVwKFBsYW5uZXJHbG9iYWwgKmdsb2IsIFF1ZXJ5ICpwYXJzZSwgY29uc3Qg Y2hhciAqcXVlcnlfc3RyaW5nLAorCQkJCSAgIGludCBjdXJzb3JPcHRpb25zLCBkb3VibGUgKnR1 cGxlX2ZyYWN0aW9uLAorCQkJCSAgIEV4cGxhaW5TdGF0ZSAqZXMpCit7CisJcGdwYV90cm92ZSAq dHJvdmUgPSBOVUxMOworCXBncGFfcGxhbm5lcl9zdGF0ZSAqcHBzOworCWNoYXIJICAgKnN1cHBs aWVkX2FkdmljZTsKKwlib29sCQlnZW5lcmF0ZV9hZHZpY2VfZmVlZGJhY2sgPSBmYWxzZTsKKwli b29sCQlnZW5lcmF0ZV9hZHZpY2Vfc3RyaW5nID0gZmFsc2U7CisJYm9vbAkJbmVlZHNfcHBzID0g ZmFsc2U7CisKKwkvKgorCSAqIERlY2lkZSB3aGV0aGVyIHdlIG5lZWQgdG8gZ2VuZXJhdGUgYW4g YWR2aWNlIHN0cmluZy4gV2UgbXVzdCBkbyB0aGlzIGlmCisJICogdGhlIHVzZXIgaGFzIHRvbGQg dXMgdG8gZG8gaXQgY2F0ZWdvcmljYWxseSwgb3IgaWYgYW5vdGhlciBsb2FkYWJsZQorCSAqIG1v ZHVsZSBoYXMgcmVxdWVzdGVkIGl0LCBvciBpZiB0aGUgdXNlciBoYXMgcmVxdWVzdGVkIGl0IHVz aW5nIHRoZQorCSAqIEVYUExBSU4gKFBMQU5fQURWSUNFKSBvcHRpb24uCisJICovCisJZ2VuZXJh dGVfYWR2aWNlX3N0cmluZyA9IChwZ19wbGFuX2FkdmljZV9hbHdheXNfc3RvcmVfYWR2aWNlX2Rl dGFpbHMgfHwKKwkJCQkJCQkgIHBncGFfcGxhbm5lcl9nZW5lcmF0ZV9hZHZpY2UgfHwKKwkJCQkJ CQkgIHBnX3BsYW5fYWR2aWNlX3Nob3VsZF9leHBsYWluKGVzKSk7CisJaWYgKGdlbmVyYXRlX2Fk dmljZV9zdHJpbmcpCisJCW5lZWRzX3BwcyA9IHRydWU7CisKKwkvKgorCSAqIElmIGFueSBhZHZp Y2Ugd2FzIHByb3ZpZGVkLCBidWlsZCBhIHRyb3ZlIG9mIGFkdmljZSBmb3IgdXNlIGR1cmluZwor CSAqIHBsYW5uaW5nLgorCSAqLworCXN1cHBsaWVkX2FkdmljZSA9IHBnX3BsYW5fYWR2aWNlX2dl dF9zdXBwbGllZF9xdWVyeV9hZHZpY2UoZ2xvYiwgcGFyc2UsCisJCQkJCQkJCQkJCQkJCQkgICBx dWVyeV9zdHJpbmcsCisJCQkJCQkJCQkJCQkJCQkgICBjdXJzb3JPcHRpb25zLAorCQkJCQkJCQkJ CQkJCQkJICAgZXMpOworCWlmIChzdXBwbGllZF9hZHZpY2UgIT0gTlVMTCAmJiBzdXBwbGllZF9h ZHZpY2VbMF0gIT0gJ1wwJykKKwl7CisJCUxpc3QJICAgKmFkdmljZV9pdGVtczsKKwkJY2hhcgkg ICAqZXJyb3I7CisKKwkJLyoKKwkJICogSWYgdGhlIHN1cHBsaWVkIGFkdmljZSBzdHJpbmcgY29t ZXMgZnJvbSBwZ19wbGFuX2FkdmljZS5hZHZpY2UsCisJCSAqIHBhcnNpbmcgc2hvdWxkbid0IGZh aWwgaGVyZSwgYmVjYXVzZSB3ZSBtdXN0IGhhdmUgcHJldmlvdXNseSBwYXJzZWQKKwkJICogc3Vj Y2Vzc2Z1bGx5IGluIHBnX3BsYW5fYWR2aWNlX2FkdmljZV9jaGVja19ob29rLiBIb3dldmVyLCBp dCBtaWdodAorCQkgKiBhbHNvIGNvbWUgZnJvbSBhIGhvb2sgcmVnaXN0ZXJlZCB2aWEgcGdfcGxh bl9hZHZpY2VfYWRkX2Fkdmlzb3IsCisJCSAqIGFuZCB3ZSBjYW4ndCBiZSBzdXJlIHdoZXRoZXIg dGhhdCdzIHZhbGlkLiAoUGx1cywgaGF2aW5nIGFuIGVycm9yCisJCSAqIGNoZWNrIGhlcmUgc2Vl bXMgbGlrZSBhIGdvb2QgaWRlYSBhbnl3YXksIGp1c3QgZm9yIHNhZmV0eS4pCisJCSAqLworCQlh ZHZpY2VfaXRlbXMgPSBwZ3BhX3BhcnNlKHN1cHBsaWVkX2FkdmljZSwgJmVycm9yKTsKKwkJaWYg KGVycm9yKQorCQkJZXJlcG9ydChXQVJOSU5HLAorCQkJCQllcnJtc2coImNvdWxkIG5vdCBwYXJz ZSBzdXBwbGllZCBhZHZpY2U6ICVzIiwgZXJyb3IpKTsKKworCQkvKgorCQkgKiBJdCdzIHBvc3Np YmxlIHRoYXQgdGhlIGFkdmljZSBzdHJpbmcgd2FzIG5vbi1lbXB0eSBidXQgY29udGFpbmVkIG5v CisJCSAqIGFjdHVhbCBhZHZpY2UsIGUuZy4gaXQgd2FzIGFsbCB3aGl0ZXNwYWNlLgorCQkgKi8K KwkJaWYgKGFkdmljZV9pdGVtcyAhPSBOSUwpCisJCXsKKwkJCXRyb3ZlID0gcGdwYV9idWlsZF90 cm92ZShhZHZpY2VfaXRlbXMpOworCQkJbmVlZHNfcHBzID0gdHJ1ZTsKKworCQkJLyoKKwkJCSAq IElmIHdlIGtub3cgdGhhdCB3ZSdyZSBydW5uaW5nIHVuZGVyIEVYUExBSU4sIG9yIGlmIHRoZSB1 c2VyIGhhcworCQkJICogdG9sZCB1cyB0byBhbHdheXMgZG8gdGhlIHdvcmssIGdlbmVyYXRlIGFk dmljZSBmZWVkYmFjay4KKwkJCSAqLworCQkJaWYgKGVzICE9IE5VTEwgfHwgcGdfcGxhbl9hZHZp Y2VfZmVlZGJhY2tfd2FybmluZ3MgfHwKKwkJCQlwZ19wbGFuX2FkdmljZV9hbHdheXNfc3RvcmVf YWR2aWNlX2RldGFpbHMpCisJCQkJZ2VuZXJhdGVfYWR2aWNlX2ZlZWRiYWNrID0gdHJ1ZTsKKwkJ fQorCX0KKworI2lmZGVmIFVTRV9BU1NFUlRfQ0hFQ0tJTkcKKworCS8qCisJICogSWYgYXNzZXJ0 cyBhcmUgZW5hYmxlZCwgYWx3YXlzIGJ1aWxkIGEgcHJpdmF0ZSBzdGF0ZSBvYmplY3QgZm9yCisJ ICogY3Jvc3MtY2hlY2tzLgorCSAqLworCW5lZWRzX3BwcyA9IHRydWU7CisjZW5kaWYKKworCS8q CisJICogV2Ugb25seSBjcmVhdGUgYW5kIGluaXRpYWxpemUgYSBwcml2YXRlIHN0YXRlIG9iamVj dCBpZiBpdCdzIG5lZWRlZCBmb3IKKwkgKiBzb21lIHB1cnBvc2UuIFRoYXQgY291bGQgYmUgKDEp IHJlY29yZGluZyB0aGF0IHdlIHdpbGwgbmVlZCB0byBnZW5lcmF0ZQorCSAqIGFuIGFkdmljZSBz dHJpbmcsICgyKSBzdG9yaW5nIGEgdHJvdmUgb2Ygc3VwcGxpZWQgYWR2aWNlLCBvciAoMykKKwkg KiBmYWNpbGl0YXRpbmcgZGVidWdnaW5nIGNyb3NzLWNoZWNrcyB3aGVuIGFzc2VydHMgYXJlIGVu YWJsZWQuCisJICovCisJaWYgKG5lZWRzX3BwcykKKwl7CisJCXBwcyA9IHBhbGxvYzBfb2JqZWN0 KHBncGFfcGxhbm5lcl9zdGF0ZSk7CisJCXBwcy0+Z2VuZXJhdGVfYWR2aWNlX2ZlZWRiYWNrID0g Z2VuZXJhdGVfYWR2aWNlX2ZlZWRiYWNrOworCQlwcHMtPmdlbmVyYXRlX2FkdmljZV9zdHJpbmcg PSBnZW5lcmF0ZV9hZHZpY2Vfc3RyaW5nOworCQlwcHMtPnRyb3ZlID0gdHJvdmU7CisjaWZkZWYg VVNFX0FTU0VSVF9DSEVDS0lORworCQlwcHMtPnJpX2NoZWNrX2hhc2ggPQorCQkJcGdwYV9yaV9j aGVja19jcmVhdGUoQ3VycmVudE1lbW9yeUNvbnRleHQsIDEwMjQsIE5VTEwpOworI2VuZGlmCisJ CVNldFBsYW5uZXJHbG9iYWxFeHRlbnNpb25TdGF0ZShnbG9iLCBwbGFubmVyX2V4dGVuc2lvbl9p ZCwgcHBzKTsKKwl9CisKKwkvKiBQYXNzIGNhbGwgdG8gcHJldmlvdXMgaG9vay4gKi8KKwlpZiAo cHJldl9wbGFubmVyX3NldHVwKQorCQkoKnByZXZfcGxhbm5lcl9zZXR1cCkgKGdsb2IsIHBhcnNl LCBxdWVyeV9zdHJpbmcsIGN1cnNvck9wdGlvbnMsCisJCQkJCQkJICAgdHVwbGVfZnJhY3Rpb24s IGVzKTsKK30KKworLyoKKyAqIENhcnJ5IG91dCB3aGF0ZXZlciB3b3JrIHdlIHdhbnQgdG8gZG8g YWZ0ZXIgcGxhbm5pbmcgaXMgY29tcGxldGUuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX3BsYW5u ZXJfc2h1dGRvd24oUGxhbm5lckdsb2JhbCAqZ2xvYiwgUXVlcnkgKnBhcnNlLAorCQkJCQkgIGNv bnN0IGNoYXIgKnF1ZXJ5X3N0cmluZywgUGxhbm5lZFN0bXQgKnBzdG10KQoreworCXBncGFfcGxh bm5lcl9zdGF0ZSAqcHBzOworCXBncGFfdHJvdmUgKnRyb3ZlID0gTlVMTDsKKwlwZ3BhX3BsYW5f d2Fsa2VyX2NvbnRleHQgd2Fsa2VyID0gezB9OwkvKiBwbGFjYXRlIGNvbXBpbGVyICovCisJYm9v bAkJZ2VuZXJhdGVfYWR2aWNlX2ZlZWRiYWNrID0gZmFsc2U7CisJYm9vbAkJZ2VuZXJhdGVfYWR2 aWNlX3N0cmluZyA9IGZhbHNlOworCUxpc3QJICAgKnBncGFfaXRlbXMgPSBOSUw7CisJcGdwYV9p ZGVudGlmaWVyICpydF9pZGVudGlmaWVycyA9IE5VTEw7CisKKwkvKiBGZXRjaCBvdXIgcHJpdmF0 ZSBzdGF0ZSwgc2V0IHVwIGJ5IHBncGFfcGxhbm5lcl9zZXR1cCgpLiAqLworCXBwcyA9IEdldFBs YW5uZXJHbG9iYWxFeHRlbnNpb25TdGF0ZShnbG9iLCBwbGFubmVyX2V4dGVuc2lvbl9pZCk7CisJ aWYgKHBwcyAhPSBOVUxMKQorCXsKKwkJdHJvdmUgPSBwcHMtPnRyb3ZlOworCQlnZW5lcmF0ZV9h ZHZpY2VfZmVlZGJhY2sgPSBwcHMtPmdlbmVyYXRlX2FkdmljZV9mZWVkYmFjazsKKwkJZ2VuZXJh dGVfYWR2aWNlX3N0cmluZyA9IHBwcy0+Z2VuZXJhdGVfYWR2aWNlX3N0cmluZzsKKwl9CisKKwkv KgorCSAqIElmIHdlJ3JlIHRyeWluZyB0byBnZW5lcmF0ZSBhbiBhZHZpY2Ugc3RyaW5nIG9yIGlm IHdlJ3JlIHRyeWluZyB0bworCSAqIHByb3ZpZGUgYWR2aWNlIGZlZWRiYWNrLCB0aGVuIHdlIHdp bGwgbmVlZCB0byBjcmVhdGUgcmFuZ2UgdGFibGUKKwkgKiBpZGVudGlmaWVycy4KKwkgKi8KKwlp ZiAoZ2VuZXJhdGVfYWR2aWNlX3N0cmluZyB8fCBnZW5lcmF0ZV9hZHZpY2VfZmVlZGJhY2spCisJ eworCQlwZ3BhX3BsYW5fd2Fsa2VyKCZ3YWxrZXIsIHBzdG10LCBwcHMtPnNqX3VuaXF1ZV9yZWxz KTsKKwkJcnRfaWRlbnRpZmllcnMgPSBwZ3BhX2NyZWF0ZV9pZGVudGlmaWVyc19mb3JfcGxhbm5l ZF9zdG10KHBzdG10KTsKKwl9CisKKwkvKiBHZW5lcmF0ZSB0aGUgYWR2aWNlIHN0cmluZywgaWYg d2UgbmVlZCB0byBkbyBzby4gKi8KKwlpZiAoZ2VuZXJhdGVfYWR2aWNlX3N0cmluZykKKwl7CisJ CWNoYXIJICAgKmFkdmljZV9zdHJpbmc7CisJCVN0cmluZ0luZm9EYXRhIGJ1ZjsKKworCQkvKiBH ZW5lcmF0ZSBhIHRleHR1YWwgYWR2aWNlIHN0cmluZy4gKi8KKwkJaW5pdFN0cmluZ0luZm8oJmJ1 Zik7CisJCXBncGFfb3V0cHV0X2FkdmljZSgmYnVmLCAmd2Fsa2VyLCBydF9pZGVudGlmaWVycyk7 CisJCWFkdmljZV9zdHJpbmcgPSBidWYuZGF0YTsKKworCQkvKiBTYXZlIHRoZSBhZHZpY2Ugc3Ry aW5nIGluIHRoZSBmaW5hbCBwbGFuLiAqLworCQlwZ3BhX2l0ZW1zID0gbGFwcGVuZChwZ3BhX2l0 ZW1zLAorCQkJCQkJCSBtYWtlRGVmRWxlbSgiYWR2aWNlX3N0cmluZyIsCisJCQkJCQkJCQkJIChO b2RlICopIG1ha2VTdHJpbmcoYWR2aWNlX3N0cmluZyksCisJCQkJCQkJCQkJIC0xKSk7CisJfQor CisJLyoKKwkgKiBJZiB3ZSdyZSB0cnlpbmcgdG8gcHJvdmlkZSBhZHZpY2UgZmVlZGJhY2ssIHRo ZW4gd2Ugd2lsbCBuZWVkIHRvCisJICogYW5hbHl6ZSBob3cgc3VjY2Vzc2Z1bCB0aGUgYWR2aWNl IHdhcy4KKwkgKi8KKwlpZiAoZ2VuZXJhdGVfYWR2aWNlX2ZlZWRiYWNrKQorCXsKKwkJTGlzdAkg ICAqZmVlZGJhY2sgPSBOSUw7CisKKwkJLyoKKwkJICogSW5qZWN0IGEgTm9kZS10cmVlIHJlcHJl c2VudGF0aW9uIG9mIGFsbCB0aGUgdHJvdmUtZW50cnkgZmxhZ3MgaW50bworCQkgKiB0aGUgUGxh bm5lZFN0bXQuCisJCSAqLworCQlmZWVkYmFjayA9IHBncGFfcGxhbm5lcl9hcHBlbmRfZmVlZGJh Y2soZmVlZGJhY2ssCisJCQkJCQkJCQkJCQl0cm92ZSwKKwkJCQkJCQkJCQkJCVBHUEFfVFJPVkVf TE9PS1VQX1NDQU4sCisJCQkJCQkJCQkJCQlydF9pZGVudGlmaWVycywgJndhbGtlcik7CisJCWZl ZWRiYWNrID0gcGdwYV9wbGFubmVyX2FwcGVuZF9mZWVkYmFjayhmZWVkYmFjaywKKwkJCQkJCQkJ CQkJCXRyb3ZlLAorCQkJCQkJCQkJCQkJUEdQQV9UUk9WRV9MT09LVVBfSk9JTiwKKwkJCQkJCQkJ CQkJCXJ0X2lkZW50aWZpZXJzLCAmd2Fsa2VyKTsKKwkJZmVlZGJhY2sgPSBwZ3BhX3BsYW5uZXJf YXBwZW5kX2ZlZWRiYWNrKGZlZWRiYWNrLAorCQkJCQkJCQkJCQkJdHJvdmUsCisJCQkJCQkJCQkJ CQlQR1BBX1RST1ZFX0xPT0tVUF9SRUwsCisJCQkJCQkJCQkJCQlydF9pZGVudGlmaWVycywgJndh bGtlcik7CisKKwkJcGdwYV9pdGVtcyA9IGxhcHBlbmQocGdwYV9pdGVtcywgbWFrZURlZkVsZW0o ImZlZWRiYWNrIiwKKwkJCQkJCQkJCQkJCQkgKE5vZGUgKikgZmVlZGJhY2ssIC0xKSk7CisKKwkJ LyogSWYgd2Ugd2VyZSBhc2tlZCB0byBnZW5lcmF0ZSBmZWVkYmFjayB3YXJuaW5ncywgZG8gc28u ICovCisJCWlmIChwZ19wbGFuX2FkdmljZV9mZWVkYmFja193YXJuaW5ncykKKwkJCXBncGFfcGxh bm5lcl9mZWVkYmFja193YXJuaW5nKGZlZWRiYWNrKTsKKwl9CisKKwkvKiBQdXNoIHdoYXRldmVy IGRhdGEgd2UncmUgc2F2aW5nIGludG8gdGhlIFBsYW5uZWRTdG10LiAqLworCWlmIChwZ3BhX2l0 ZW1zICE9IE5JTCkKKwkJcHN0bXQtPmV4dGVuc2lvbl9zdGF0ZSA9CisJCQlsYXBwZW5kKHBzdG10 LT5leHRlbnNpb25fc3RhdGUsCisJCQkJCW1ha2VEZWZFbGVtKCJwZ19wbGFuX2FkdmljZSIsIChO b2RlICopIHBncGFfaXRlbXMsIC0xKSk7CisKKwkvKgorCSAqIElmIGFzc2VydGlvbnMgYXJlIGVu YWJsZWQsIGNyb3NzLWNoZWNrIHRoZSBnZW5lcmF0ZWQgcmFuZ2UgdGFibGUKKwkgKiBpZGVudGlm aWVycy4KKwkgKi8KKwlpZiAocHBzICE9IE5VTEwpCisJCXBncGFfcmlfY2hlY2tlcl92YWxpZGF0 ZShwcHMsIHBzdG10KTsKKworCS8qIFBhc3MgY2FsbCB0byBwcmV2aW91cyBob29rLiAqLworCWlm IChwcmV2X3BsYW5uZXJfc2h1dGRvd24pCisJCSgqcHJldl9wbGFubmVyX3NodXRkb3duKSAoZ2xv YiwgcGFyc2UsIHF1ZXJ5X3N0cmluZywgcHN0bXQpOworfQorCisvKgorICogSG9vayBmdW5jdGlv biBmb3IgYnVpbGRfc2ltcGxlX3JlbCgpLgorICoKKyAqIFdlIGNhbiBhcHBseSBzY2FuIGFkdmlj ZSBhdCB0aGlzIHBvaW50LCBhbmQgd2UgYWxzbyB1c2UgdGhpcyBhcyBhbgorICogb3Bwb3J0dW5p dHkgdG8gZG8gcmFuZ2UtdGFibGUgaWRlbnRpZmllciBjcm9zcy1jaGVja2luZyBpbiBhc3NlcnQt ZW5hYmxlZAorICogYnVpbGRzLgorICovCitzdGF0aWMgdm9pZAorcGdwYV9idWlsZF9zaW1wbGVf cmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsIFJhbmdlVGJsRW50cnkgKnJ0 ZSkKK3sKKwlwZ3BhX3BsYW5uZXJfc3RhdGUgKnBwczsKKworCS8qIEZldGNoIG91ciBwcml2YXRl IHN0YXRlLCBzZXQgdXAgYnkgcGdwYV9wbGFubmVyX3NldHVwKCkuICovCisJcHBzID0gR2V0UGxh bm5lckdsb2JhbEV4dGVuc2lvblN0YXRlKHJvb3QtPmdsb2IsIHBsYW5uZXJfZXh0ZW5zaW9uX2lk KTsKKworCS8qIFNhdmUgZGV0YWlscyBuZWVkZWQgZm9yIHJhbmdlIHRhYmxlIGlkZW50aWZpZXIg Y3Jvc3MtY2hlY2tpbmcuICovCisJaWYgKHBwcyAhPSBOVUxMKQorCQlwZ3BhX3JpX2NoZWNrZXJf c2F2ZShwcHMsIHJvb3QsIHJlbCk7CisKKwkvKiBJZiBxdWVyeSBhZHZpY2Ugd2FzIHByb3ZpZGVk LCBzZWFyY2ggZm9yIHJlbGV2YW50IGVudHJpZXMuICovCisJaWYgKHBwcyAhPSBOVUxMICYmIHBw cy0+dHJvdmUgIT0gTlVMTCkKKwl7CisJCXBncGFfaWRlbnRpZmllciByaWQ7CisJCXBncGFfdHJv dmVfcmVzdWx0IHRyZXN1bHRfc2NhbjsKKwkJcGdwYV90cm92ZV9yZXN1bHQgdHJlc3VsdF9yZWw7 CisKKwkJLyogU2VhcmNoIGZvciBzY2FuIGFkdmljZSBhbmQgZ2VuZXJhbCByZWwgYWR2aWNlLiAq LworCQlwZ3BhX2NvbXB1dGVfaWRlbnRpZmllcl9ieV9ydGkocm9vdCwgcmVsLT5yZWxpZCwgJnJp ZCk7CisJCXBncGFfdHJvdmVfbG9va3VwKHBwcy0+dHJvdmUsIFBHUEFfVFJPVkVfTE9PS1VQX1ND QU4sIDEsICZyaWQsCisJCQkJCQkgICZ0cmVzdWx0X3NjYW4pOworCQlwZ3BhX3Ryb3ZlX2xvb2t1 cChwcHMtPnRyb3ZlLCBQR1BBX1RST1ZFX0xPT0tVUF9SRUwsIDEsICZyaWQsCisJCQkJCQkgICZ0 cmVzdWx0X3JlbCk7CisKKwkJLyogSWYgcmVsZXZhbnQgZW50cmllcyB3ZXJlIGZvdW5kLCBhcHBs eSB0aGVtLiAqLworCQlpZiAodHJlc3VsdF9zY2FuLmluZGV4ZXMgIT0gTlVMTCB8fCB0cmVzdWx0 X3JlbC5pbmRleGVzICE9IE5VTEwpCisJCXsKKwkJCXVpbnQ2NAkJb3JpZ2luYWxfbWFzayA9IHJl bC0+cGdzX21hc2s7CisKKwkJCXBncGFfcGxhbm5lcl9hcHBseV9zY2FuX2FkdmljZShyZWwsCisJ CQkJCQkJCQkJICAgdHJlc3VsdF9zY2FuLmVudHJpZXMsCisJCQkJCQkJCQkJICAgdHJlc3VsdF9z Y2FuLmluZGV4ZXMsCisJCQkJCQkJCQkJICAgdHJlc3VsdF9yZWwuZW50cmllcywKKwkJCQkJCQkJ CQkgICB0cmVzdWx0X3JlbC5pbmRleGVzKTsKKworCQkJLyogRW1pdCBkZWJ1Z2dpbmcgbWVzc2Fn ZSwgaWYgZW5hYmxlZC4gKi8KKwkJCWlmIChwZ19wbGFuX2FkdmljZV90cmFjZV9tYXNrICYmIG9y aWdpbmFsX21hc2sgIT0gcmVsLT5wZ3NfbWFzaykKKwkJCXsKKwkJCQlpZiAocm9vdC0+cGxhbl9u YW1lICE9IE5VTEwpCisJCQkJCWVyZXBvcnQoV0FSTklORywKKwkJCQkJCQkoZXJybXNnKCJzdHJh dGVneSBtYXNrIGZvciBSVEkgJXUgaW4gc3VicGxhbiBcIiVzXCIgY2hhbmdlZCBmcm9tIDB4JSIg UFJJeDY0ICIgdG8gMHglIiBQUkl4NjQsCisJCQkJCQkJCQlyZWwtPnJlbGlkLCByb290LT5wbGFu X25hbWUsCisJCQkJCQkJCQlvcmlnaW5hbF9tYXNrLCByZWwtPnBnc19tYXNrKSkpOworCQkJCWVs c2UKKwkJCQkJZXJlcG9ydChXQVJOSU5HLAorCQkJCQkJCShlcnJtc2coInN0cmF0ZWd5IG1hc2sg Zm9yIFJUSSAldSBjaGFuZ2VkIGZyb20gMHglIiBQUkl4NjQgIiB0byAweCUiIFBSSXg2NCwKKwkJ CQkJCQkJCXJlbC0+cmVsaWQsIG9yaWdpbmFsX21hc2ssCisJCQkJCQkJCQlyZWwtPnBnc19tYXNr KSkpOworCQkJfQorCQl9CisJfQorCisJLyogUGFzcyBjYWxsIHRvIHByZXZpb3VzIGhvb2suICov CisJaWYgKHByZXZfYnVpbGRfc2ltcGxlX3JlbCkKKwkJKCpwcmV2X2J1aWxkX3NpbXBsZV9yZWwp IChyb290LCByZWwsIHJ0ZSk7Cit9CisKKy8qCisgKiBFbmZvcmNlIGFueSBwcm92aWRlZCBhZHZp Y2UgdGhhdCBpcyByZWxldmFudCB0byBhbnkgbWV0aG9kIG9mIGltcGxlbWVudGluZworICogdGhp cyBqb2luLgorICoKKyAqIEFsdGhvdWdoIHdlJ3JlIHBhc3NlZCB0aGUgb3V0ZXJyZWwgYW5kIGlu bmVycmVsIGhlcmUsIHRob3NlIGFyZSBqdXN0CisgKiB3aGF0ZXZlciB2YWx1ZXMgaGFwcGVuZWQg dG8gcHJvbXB0IHRoZSBjcmVhdGlvbiBvZiB0aGlzIGpvaW5yZWw7IHRoZXkKKyAqIHNob3VsZG4n dCByZWFsbHkgaW5mbHVlbmNlIG91ciBjaG9pY2Ugb2Ygd2hhdCBhZHZpY2UgdG8gYXBwbHkuCisg Ki8KK3N0YXRpYyB2b2lkCitwZ3BhX2pvaW5yZWxfc2V0dXAoUGxhbm5lckluZm8gKnJvb3QsIFJl bE9wdEluZm8gKmpvaW5yZWwsCisJCQkJICAgUmVsT3B0SW5mbyAqb3V0ZXJyZWwsIFJlbE9wdElu Zm8gKmlubmVycmVsLAorCQkJCSAgIFNwZWNpYWxKb2luSW5mbyAqc2ppbmZvLCBMaXN0ICpyZXN0 cmljdGxpc3QpCit7CisJcGdwYV9qb2luX3N0YXRlICpwanM7CisKKwlBc3NlcnQoYm1zX21lbWJl cnNoaXAoam9pbnJlbC0+cmVsaWRzKSA9PSBCTVNfTVVMVElQTEUpOworCisJLyogR2V0IG91ciBw cml2YXRlIHN0YXRlIGluZm9ybWF0aW9uIGZvciB0aGlzIGpvaW4uICovCisJcGpzID0gcGdwYV9n ZXRfam9pbl9zdGF0ZShyb290LCBqb2lucmVsLCBvdXRlcnJlbCwgaW5uZXJyZWwpOworCisJLyog SWYgdGhlcmUgaXMgcmVsZXZhbnQgYWR2aWNlLCBjYWxsIGEgaGVscGVyIGZ1bmN0aW9uIHRvIGFw cGx5IGl0LiAqLworCWlmIChwanMgIT0gTlVMTCkKKwl7CisJCXVpbnQ2NAkJb3JpZ2luYWxfbWFz ayA9IGpvaW5yZWwtPnBnc19tYXNrOworCisJCXBncGFfcGxhbm5lcl9hcHBseV9qb2lucmVsX2Fk dmljZSgmam9pbnJlbC0+cGdzX21hc2ssCisJCQkJCQkJCQkJICByb290LT5wbGFuX25hbWUsCisJ CQkJCQkJCQkJICBwanMpOworCisJCS8qIEVtaXQgZGVidWdnaW5nIG1lc3NhZ2UsIGlmIGVuYWJs ZWQuICovCisJCWlmIChwZ19wbGFuX2FkdmljZV90cmFjZV9tYXNrICYmIG9yaWdpbmFsX21hc2sg IT0gam9pbnJlbC0+cGdzX21hc2spCisJCXsKKwkJCWlmIChyb290LT5wbGFuX25hbWUgIT0gTlVM TCkKKwkJCQllcmVwb3J0KFdBUk5JTkcsCisJCQkJCQkoZXJybXNnKCJzdHJhdGVneSBtYXNrIGZv ciBqb2luIG9uIFJUSXMgJXMgaW4gc3VicGxhbiBcIiVzXCIgY2hhbmdlZCBmcm9tIDB4JSIgUFJJ eDY0ICIgdG8gMHglIiBQUkl4NjQsCisJCQkJCQkJCXBncGFfYm1zX3RvX2NzdHJpbmcoam9pbnJl bC0+cmVsaWRzKSwKKwkJCQkJCQkJcm9vdC0+cGxhbl9uYW1lLAorCQkJCQkJCQlvcmlnaW5hbF9t YXNrLAorCQkJCQkJCQlqb2lucmVsLT5wZ3NfbWFzaykpKTsKKwkJCWVsc2UKKwkJCQllcmVwb3J0 KFdBUk5JTkcsCisJCQkJCQkoZXJybXNnKCJzdHJhdGVneSBtYXNrIGZvciBqb2luIG9uIFJUSXMg JXMgY2hhbmdlZCBmcm9tIDB4JSIgUFJJeDY0ICIgdG8gMHglIiBQUkl4NjQsCisJCQkJCQkJCXBn cGFfYm1zX3RvX2NzdHJpbmcoam9pbnJlbC0+cmVsaWRzKSwKKwkJCQkJCQkJb3JpZ2luYWxfbWFz aywKKwkJCQkJCQkJam9pbnJlbC0+cGdzX21hc2spKSk7CisJCX0KKwl9CisKKwkvKiBQYXNzIGNh bGwgdG8gcHJldmlvdXMgaG9vay4gKi8KKwlpZiAocHJldl9qb2lucmVsX3NldHVwKQorCQkoKnBy ZXZfam9pbnJlbF9zZXR1cCkgKHJvb3QsIGpvaW5yZWwsIG91dGVycmVsLCBpbm5lcnJlbCwKKwkJ CQkJCQkgICBzamluZm8sIHJlc3RyaWN0bGlzdCk7Cit9CisKKy8qCisgKiBFbmZvcmNlIGFueSBw cm92aWRlZCBhZHZpY2UgdGhhdCBpcyByZWxldmFudCB0byB0aGlzIHBhcnRpY3VsYXIgbWV0aG9k IG9mCisgKiBpbXBsZW1lbnRpbmcgdGhpcyBwYXJ0aWN1bGFyIGpvaW4uCisgKi8KK3N0YXRpYyB2 b2lkCitwZ3BhX2pvaW5fcGF0aF9zZXR1cChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAq am9pbnJlbCwKKwkJCQkJIFJlbE9wdEluZm8gKm91dGVycmVsLCBSZWxPcHRJbmZvICppbm5lcnJl bCwKKwkJCQkJIEpvaW5UeXBlIGpvaW50eXBlLCBKb2luUGF0aEV4dHJhRGF0YSAqZXh0cmEpCit7 CisJcGdwYV9qb2luX3N0YXRlICpwanM7CisKKwlBc3NlcnQoYm1zX21lbWJlcnNoaXAoam9pbnJl bC0+cmVsaWRzKSA9PSBCTVNfTVVMVElQTEUpOworCisJLyoKKwkgKiBJZiB3ZSdyZSBjb25zaWRl cmluZyBpbXBsZW1lbnRpbmcgYSBzZW1pam9pbiBieSBtYWtpbmcgb25lIHNpZGUgdW5pcXVlLAor CSAqIG1ha2UgYSBub3RlIG9mIGl0IGluIHRoZSBwZ3BhX3BsYW5uZXJfc3RhdGUuIFNlZSBjb21t ZW50cyBmb3IKKwkgKiBwZ3BhX3NqX3VuaXF1ZV9yZWwgZm9yIHdoeSB3ZSBkbyB0aGlzLgorCSAq LworCWlmIChqb2ludHlwZSA9PSBKT0lOX1VOSVFVRV9PVVRFUiB8fCBqb2ludHlwZSA9PSBKT0lO X1VOSVFVRV9JTk5FUikKKwl7CisJCXBncGFfcGxhbm5lcl9zdGF0ZSAqcHBzOworCQlSZWxPcHRJ bmZvICp1bmlxdWVyZWw7CisKKwkJdW5pcXVlcmVsID0gam9pbnR5cGUgPT0gSk9JTl9VTklRVUVf T1VURVIgPyBvdXRlcnJlbCA6IGlubmVycmVsOworCQlwcHMgPSBHZXRQbGFubmVyR2xvYmFsRXh0 ZW5zaW9uU3RhdGUocm9vdC0+Z2xvYiwgcGxhbm5lcl9leHRlbnNpb25faWQpOworCQlpZiAocHBz ICE9IE5VTEwgJiYKKwkJCShwcHMtPmdlbmVyYXRlX2FkdmljZV9zdHJpbmcgfHwgcHBzLT5nZW5l cmF0ZV9hZHZpY2VfZmVlZGJhY2spKQorCQl7CisJCQlib29sCQlmb3VuZCA9IGZhbHNlOworCisJ CQkvKiBBdm9pZCBhZGRpbmcgZHVwbGljYXRlcy4gKi8KKwkJCWZvcmVhY2hfcHRyKHBncGFfc2pf dW5pcXVlX3JlbCwgdXIsIHBwcy0+c2pfdW5pcXVlX3JlbHMpCisJCQl7CisJCQkJLyoKKwkJCQkg KiBXZSBzaG91bGQgYWx3YXlzIHVzZSB0aGUgc2FtZSBwb2ludGVyIGZvciB0aGUgc2FtZSBwbGFu CisJCQkJICogbmFtZSwgc28gd2UgbmVlZCBub3QgdXNlIHN0cmNtcCgpIGhlcmUuCisJCQkJICov CisJCQkJaWYgKHJvb3QtPnBsYW5fbmFtZSA9PSB1ci0+cGxhbl9uYW1lICYmCisJCQkJCWJtc19l cXVhbCh1bmlxdWVyZWwtPnJlbGlkcywgdXItPnJlbGlkcykpCisJCQkJeworCQkJCQlmb3VuZCA9 IHRydWU7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKworCQkJLyogSWYgbm90IGEgZHVwbGlj YXRlLCBhcHBlbmQgdG8gdGhlIGxpc3QuICovCisJCQlpZiAoIWZvdW5kKQorCQkJeworCQkJCXBn cGFfc2pfdW5pcXVlX3JlbCAqdXIgPSBwYWxsb2Nfb2JqZWN0KHBncGFfc2pfdW5pcXVlX3JlbCk7 CisKKwkJCQl1ci0+cGxhbl9uYW1lID0gcm9vdC0+cGxhbl9uYW1lOworCQkJCXVyLT5yZWxpZHMg PSB1bmlxdWVyZWwtPnJlbGlkczsKKwkJCQlwcHMtPnNqX3VuaXF1ZV9yZWxzID0gbGFwcGVuZChw cHMtPnNqX3VuaXF1ZV9yZWxzLCB1cik7CisJCQl9CisJCX0KKwl9CisKKwkvKiBHZXQgb3VyIHBy aXZhdGUgc3RhdGUgaW5mb3JtYXRpb24gZm9yIHRoaXMgam9pbi4gKi8KKwlwanMgPSBwZ3BhX2dl dF9qb2luX3N0YXRlKHJvb3QsIGpvaW5yZWwsIG91dGVycmVsLCBpbm5lcnJlbCk7CisKKwkvKiBJ ZiB0aGVyZSBpcyByZWxldmFudCBhZHZpY2UsIGNhbGwgYSBoZWxwZXIgZnVuY3Rpb24gdG8gYXBw bHkgaXQuICovCisJaWYgKHBqcyAhPSBOVUxMKQorCXsKKwkJdWludDY0CQlvcmlnaW5hbF9tYXNr ID0gZXh0cmEtPnBnc19tYXNrOworCisJCXBncGFfcGxhbm5lcl9hcHBseV9qb2luX3BhdGhfYWR2 aWNlKGpvaW50eXBlLAorCQkJCQkJCQkJCQkmZXh0cmEtPnBnc19tYXNrLAorCQkJCQkJCQkJCQly b290LT5wbGFuX25hbWUsCisJCQkJCQkJCQkJCXBqcyk7CisKKwkJLyogRW1pdCBkZWJ1Z2dpbmcg bWVzc2FnZSwgaWYgZW5hYmxlZC4gKi8KKwkJaWYgKHBnX3BsYW5fYWR2aWNlX3RyYWNlX21hc2sg JiYgb3JpZ2luYWxfbWFzayAhPSBleHRyYS0+cGdzX21hc2spCisJCXsKKwkJCWlmIChyb290LT5w bGFuX25hbWUgIT0gTlVMTCkKKwkJCQllcmVwb3J0KFdBUk5JTkcsCisJCQkJCQkoZXJybXNnKCJz dHJhdGVneSBtYXNrIGZvciAlcyBqb2luIG9uICVzIHdpdGggb3V0ZXIgJXMgYW5kIGlubmVyICVz IGluIHN1YnBsYW4gXCIlc1wiIGNoYW5nZWQgZnJvbSAweCUiIFBSSXg2NCAiIHRvIDB4JSIgUFJJ eDY0LAorCQkJCQkJCQlwZ3BhX2pvaW50eXBlX3RvX2NzdHJpbmcoam9pbnR5cGUpLAorCQkJCQkJ CQlwZ3BhX2Jtc190b19jc3RyaW5nKGpvaW5yZWwtPnJlbGlkcyksCisJCQkJCQkJCXBncGFfYm1z X3RvX2NzdHJpbmcob3V0ZXJyZWwtPnJlbGlkcyksCisJCQkJCQkJCXBncGFfYm1zX3RvX2NzdHJp bmcoaW5uZXJyZWwtPnJlbGlkcyksCisJCQkJCQkJCXJvb3QtPnBsYW5fbmFtZSwKKwkJCQkJCQkJ b3JpZ2luYWxfbWFzaywKKwkJCQkJCQkJZXh0cmEtPnBnc19tYXNrKSkpOworCQkJZWxzZQorCQkJ CWVyZXBvcnQoV0FSTklORywKKwkJCQkJCShlcnJtc2coInN0cmF0ZWd5IG1hc2sgZm9yICVzIGpv aW4gb24gJXMgd2l0aCBvdXRlciAlcyBhbmQgaW5uZXIgJXMgY2hhbmdlZCBmcm9tIDB4JSIgUFJJ eDY0ICIgdG8gMHglIiBQUkl4NjQsCisJCQkJCQkJCXBncGFfam9pbnR5cGVfdG9fY3N0cmluZyhq b2ludHlwZSksCisJCQkJCQkJCXBncGFfYm1zX3RvX2NzdHJpbmcoam9pbnJlbC0+cmVsaWRzKSwK KwkJCQkJCQkJcGdwYV9ibXNfdG9fY3N0cmluZyhvdXRlcnJlbC0+cmVsaWRzKSwKKwkJCQkJCQkJ cGdwYV9ibXNfdG9fY3N0cmluZyhpbm5lcnJlbC0+cmVsaWRzKSwKKwkJCQkJCQkJb3JpZ2luYWxf bWFzaywKKwkJCQkJCQkJZXh0cmEtPnBnc19tYXNrKSkpOworCQl9CisJfQorCisJLyogUGFzcyBj YWxsIHRvIHByZXZpb3VzIGhvb2suICovCisJaWYgKHByZXZfam9pbl9wYXRoX3NldHVwKQorCQko KnByZXZfam9pbl9wYXRoX3NldHVwKSAocm9vdCwgam9pbnJlbCwgb3V0ZXJyZWwsIGlubmVycmVs LAorCQkJCQkJCQkgam9pbnR5cGUsIGV4dHJhKTsKK30KKworLyoKKyAqIFNlYXJjaCBmb3IgYWR2 aWNlIHBlcnRhaW5pbmcgdG8gYSBwcm9wb3NlZCBqb2luLgorICovCitzdGF0aWMgcGdwYV9qb2lu X3N0YXRlICoKK3BncGFfZ2V0X2pvaW5fc3RhdGUoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdElu Zm8gKmpvaW5yZWwsCisJCQkJCVJlbE9wdEluZm8gKm91dGVycmVsLCBSZWxPcHRJbmZvICppbm5l cnJlbCkKK3sKKwlwZ3BhX3BsYW5uZXJfc3RhdGUgKnBwczsKKwlwZ3BhX2pvaW5fc3RhdGUgKnBq czsKKwlib29sCQluZXdfcGpzID0gZmFsc2U7CisKKwkvKiBGZXRjaCBvdXIgcHJpdmF0ZSBzdGF0 ZSwgc2V0IHVwIGJ5IHBncGFfcGxhbm5lcl9zZXR1cCgpLiAqLworCXBwcyA9IEdldFBsYW5uZXJH bG9iYWxFeHRlbnNpb25TdGF0ZShyb290LT5nbG9iLCBwbGFubmVyX2V4dGVuc2lvbl9pZCk7CisJ aWYgKHBwcyA9PSBOVUxMIHx8IHBwcy0+dHJvdmUgPT0gTlVMTCkKKwl7CisJCS8qIE5vIGFkdmlj ZSBhcHBsaWVzIHRvIHRoaXMgcXVlcnksIGhlbmNlIG5vbmUgdG8gdGhpcyBqb2lucmVsLiAqLwor CQlyZXR1cm4gTlVMTDsKKwl9CisKKwkvKgorCSAqIFNlZSB3aGV0aGVyIHdlJ3ZlIHByZXZpb3Vz bHkgYXNzb2NpYXRlZCBhIHBncGFfam9pbl9zdGF0ZSB3aXRoIHRoaXMKKwkgKiBqb2lucmVsLiBJ ZiB3ZSBoYXZlIG5vdCwgd2UgbmVlZCB0byB0cnkgdG8gY29uc3RydWN0IG9uZS4gSWYgd2UgaGF2 ZSwKKwkgKiB0aGVuIHRoZXJlIGFyZSB0d28gY2FzZXM6IChhKSBpZiBpbm5lcnJlbCBhbmQgb3V0 ZXJyZWwgYXJlIHVuY2hhbmdlZCwKKwkgKiB3ZSBjYW4gc2ltcGx5IHVzZSBpdCwgYW5kIChiKSBp ZiB0aGV5IGhhdmUgY2hhbmdlZCwgd2UgbmVlZCB0byByZWppZ2dlcgorCSAqIHRoZSBhcnJheSBv ZiBpZGVudGlmaWVycyBidXQgY2FuIHN0aWxsIHNraXAgdGhlIHRyb3ZlIGxvb2t1cC4KKwkgKi8K KwlwanMgPSBHZXRSZWxPcHRJbmZvRXh0ZW5zaW9uU3RhdGUoam9pbnJlbCwgcGxhbm5lcl9leHRl bnNpb25faWQpOworCWlmIChwanMgIT0gTlVMTCkKKwl7CisJCWlmIChwanMtPmpvaW5faW5kZXhl cyA9PSBOVUxMICYmIHBqcy0+cmVsX2luZGV4ZXMgPT0gTlVMTCkKKwkJeworCQkJLyoKKwkJCSAq IElmIHRoZXJlJ3Mgbm8gcG90ZW50aWFsbHkgcmVsZXZhbnQgYWR2aWNlLCB0aGVuIHRoZSBwcmVz ZW5jZSBvZgorCQkJICogdGhpcyBwZ3BhX2pvaW5fc3RhdGUgYWN0cyBsaWtlIGEgbmVnYXRpdmUg Y2FjaGUgZW50cnk6IGl0IHRlbGxzCisJCQkgKiB1cyBub3QgdG8gYm90aGVyIHNlYXJjaGluZyB0 aGUgdHJvdmUgZm9yIGFkdmljZSwgYmVjYXVzZSB3ZQorCQkJICogd2lsbCBub3QgZmluZCBhbnku CisJCQkgKi8KKwkJCXJldHVybiBOVUxMOworCQl9CisKKwkJaWYgKHBqcy0+b3V0ZXJyZWwgPT0g b3V0ZXJyZWwgJiYgcGpzLT5pbm5lcnJlbCA9PSBpbm5lcnJlbCkKKwkJeworCQkJLyogTm8gdXBk YXRlcyByZXF1aXJlZCwgc28ganVzdCByZXR1cm4uICovCisJCQkvKiBYWFguIERvZXMgdGhpcyBu ZWVkIHRvIGRvIHNvbWV0aGluZyBkaWZmZXJlbnQgdW5kZXIgR0VRTz8gKi8KKwkJCXJldHVybiBw anM7CisJCX0KKwl9CisKKwkvKgorCSAqIElmIHRoZXJlJ3Mgbm8gcGdwYV9qb2luX3N0YXRlIHll dCwgd2UgbmVlZCB0byBhbGxvY2F0ZSBvbmUuIFRyb3ZlIGtleXMKKwkgKiB3aWxsIG5vdCBnZXQg YnVpbHQgZm9yIFJURV9KT0lOIFJURXMsIHNvIHRoZSBhcnJheSBtYXkgZW5kIHVwIGJlaW5nCisJ ICogbGFyZ2VyIHRoYW4gbmVlZGVkLiBJdCdzIG5vdCB3b3J0aCB0cnlpbmcgdG8gY29tcHV0ZSBh IHBlcmZlY3RseQorCSAqIGFjY3VyYXRlIGNvdW50IGhlcmUuCisJICovCisJaWYgKHBqcyA9PSBO VUxMKQorCXsKKwkJaW50CQkJcGVzc2ltaXN0aWNfY291bnQgPSBibXNfbnVtX21lbWJlcnMoam9p bnJlbC0+cmVsaWRzKTsKKworCQlwanMgPSBwYWxsb2MwX29iamVjdChwZ3BhX2pvaW5fc3RhdGUp OworCQlwanMtPnJpZHMgPSBwYWxsb2NfYXJyYXkocGdwYV9pZGVudGlmaWVyLCBwZXNzaW1pc3Rp Y19jb3VudCk7CisJCW5ld19wanMgPSB0cnVlOworCX0KKworCS8qCisJICogRWl0aGVyIHdlIGp1 c3QgYWxsb2NhdGVkIGEgbmV3IHBncGFfam9pbl9zdGF0ZSwgb3IgdGhlIGV4aXN0aW5nIG9uZQor CSAqIG5lZWRzIHJlY29uZmlndXJpbmcgZm9yIGEgbmV3IGlubmVycmVsIGFuZCBvdXRlcnJlbC4g VGhlIHJlcXVpcmVkIGFycmF5CisJICogc2l6ZSBjYW4ndCBjaGFuZ2UsIHNvIHdlIGNhbiBvdmVy d3JpdGUgdGhlIGV4aXN0aW5nIG9uZS4KKwkgKi8KKwlwanMtPm91dGVycmVsID0gb3V0ZXJyZWw7 CisJcGpzLT5pbm5lcnJlbCA9IGlubmVycmVsOworCXBqcy0+b3V0ZXJfY291bnQgPQorCQlwZ3Bh X2NvbXB1dGVfaWRlbnRpZmllcnNfYnlfcmVsaWRzKHJvb3QsIG91dGVycmVsLT5yZWxpZHMsIHBq cy0+cmlkcyk7CisJcGpzLT5pbm5lcl9jb3VudCA9CisJCXBncGFfY29tcHV0ZV9pZGVudGlmaWVy c19ieV9yZWxpZHMocm9vdCwgaW5uZXJyZWwtPnJlbGlkcywKKwkJCQkJCQkJCQkgICBwanMtPnJp ZHMgKyBwanMtPm91dGVyX2NvdW50KTsKKworCS8qCisJICogSWYgd2UgYWxsb2NhdGVkIGEgbmV3 IHBncGFfam9pbl9zdGF0ZSwgc2VhcmNoIG91ciB0cm92ZSBvZiBhZHZpY2UgZm9yCisJICogcmVs ZXZhbnQgZW50cmllcy4gVGhlIHRyb3ZlIGxvb2t1cCB3aWxsIHJldHVybiB0aGUgc2FtZSByZXN1 bHRzIGZvcgorCSAqIGV2ZXJ5IG91dGVycmVsL2lubmVycmVsIGNvbWJpbmF0aW9uLCBzbyB3ZSBk b24ndCBuZWVkIHRvIHJlcGVhdCB0aGF0CisJICogd29yayBldmVyeSB0aW1lLgorCSAqLworCWlm IChuZXdfcGpzKQorCXsKKwkJcGdwYV90cm92ZV9yZXN1bHQgdHJlc3VsdDsKKworCQkvKiBGaW5k IGpvaW4gZW50cmllcy4gKi8KKwkJcGdwYV90cm92ZV9sb29rdXAocHBzLT50cm92ZSwgUEdQQV9U Uk9WRV9MT09LVVBfSk9JTiwKKwkJCQkJCSAgcGpzLT5vdXRlcl9jb3VudCArIHBqcy0+aW5uZXJf Y291bnQsCisJCQkJCQkgIHBqcy0+cmlkcywgJnRyZXN1bHQpOworCQlwanMtPmpvaW5fZW50cmll cyA9IHRyZXN1bHQuZW50cmllczsKKwkJcGpzLT5qb2luX2luZGV4ZXMgPSB0cmVzdWx0LmluZGV4 ZXM7CisKKwkJLyogRmluZCByZWwgZW50cmllcy4gKi8KKwkJcGdwYV90cm92ZV9sb29rdXAocHBz LT50cm92ZSwgUEdQQV9UUk9WRV9MT09LVVBfUkVMLAorCQkJCQkJICBwanMtPm91dGVyX2NvdW50 ICsgcGpzLT5pbm5lcl9jb3VudCwKKwkJCQkJCSAgcGpzLT5yaWRzLCAmdHJlc3VsdCk7CisJCXBq cy0+cmVsX2VudHJpZXMgPSB0cmVzdWx0LmVudHJpZXM7CisJCXBqcy0+cmVsX2luZGV4ZXMgPSB0 cmVzdWx0LmluZGV4ZXM7CisKKwkJLyogTm93IHRoYXQgdGhlIG5ldyBwZ3BhX2pvaW5fc3RhdGUg aXMgZnVsbHkgdmFsaWQsIHNhdmUgYSBwb2ludGVyLiAqLworCQlTZXRSZWxPcHRJbmZvRXh0ZW5z aW9uU3RhdGUoam9pbnJlbCwgcGxhbm5lcl9leHRlbnNpb25faWQsIHBqcyk7CisKKwkJLyoKKwkJ ICogSWYgdGhlcmUgd2FzIG5vIHJlbGV2YW50IGFkdmljZSBmb3VuZCwganVzdCByZXR1cm4gTlVM TC4gVGhpcworCQkgKiBwZ3BhX2pvaW5fc3RhdGUgd2lsbCBzdGljayBhcm91bmQgYXMgYSBzb3J0 IG9mIG5lZ2F0aXZlIGNhY2hlCisJCSAqIGVudHJ5LCBzbyB0aGF0IGZ1dHVyZSBjYWxscyBmb3Ig dGhpcyBzYW1lIGpvaW5yZWwgcXVpY2tseSByZXR1cm4KKwkJICogTlVMTC4KKwkJICovCisJCWlm IChwanMtPmpvaW5faW5kZXhlcyA9PSBOVUxMICYmIHBqcy0+cmVsX2luZGV4ZXMgPT0gTlVMTCkK KwkJCXJldHVybiBOVUxMOworCX0KKworCXJldHVybiBwanM7Cit9CisKKy8qCisgKiBFbmZvcmNl IG92ZXJhbGwgcmVzdHJpY3Rpb25zIG9uIGEgam9pbiByZWxhdGlvbiB0aGF0IGFwcGx5IHVuaWZv cm1seQorICogcmVnYXJkbGVzcyBvZiB0aGUgY2hvaWNlIG9mIGlubmVyIGFuZCBvdXRlciByZWwu CisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX3BsYW5uZXJfYXBwbHlfam9pbnJlbF9hZHZpY2UodWlu dDY0ICpwZ3NfbWFza19wLCBjaGFyICpwbGFuX25hbWUsCisJCQkJCQkJCSAgcGdwYV9qb2luX3N0 YXRlICpwanMpCit7CisJaW50CQkJaSA9IC0xOworCWludAkJCWZsYWdzOworCWJvb2wJCWdhdGhl cl9jb25mbGljdCA9IGZhbHNlOworCXVpbnQ2NAkJZ2F0aGVyX21hc2sgPSAwOworCUJpdG1hcHNl dCAgKmdhdGhlcl9wYXJ0aWFsX21hdGNoID0gTlVMTDsKKwlCaXRtYXBzZXQgICpnYXRoZXJfZnVs bF9tYXRjaCA9IE5VTEw7CisJYm9vbAkJcGFydGl0aW9ud2lzZV9jb25mbGljdCA9IGZhbHNlOwor CWludAkJCXBhcnRpdGlvbndpc2Vfb3V0Y29tZSA9IDA7CisJQml0bWFwc2V0ICAqcGFydGl0aW9u d2lzZV9wYXJ0aWFsX21hdGNoID0gTlVMTDsKKwlCaXRtYXBzZXQgICpwYXJ0aXRpb253aXNlX2Z1 bGxfbWF0Y2ggPSBOVUxMOworCisJLyogSXRlcmF0ZSBvdmVyIGFsbCBwb3NzaWJseS1yZWxldmFu dCBhZHZpY2UuICovCisJd2hpbGUgKChpID0gYm1zX25leHRfbWVtYmVyKHBqcy0+cmVsX2luZGV4 ZXMsIGkpKSA+PSAwKQorCXsKKwkJcGdwYV90cm92ZV9lbnRyeSAqZW50cnkgPSAmcGpzLT5yZWxf ZW50cmllc1tpXTsKKwkJcGdwYV9pdG1fdHlwZSBpdG07CisJCWJvb2wJCWZ1bGxfbWF0Y2ggPSBm YWxzZTsKKwkJdWludDY0CQlteV9nYXRoZXJfbWFzayA9IDA7CisJCWludAkJCW15X3BhcnRpdGlv bndpc2Vfb3V0Y29tZSA9IDA7CS8qID4wIHllcywgPDAgbm8gKi8KKworCQkvKgorCQkgKiBGb3Ig R0FUSEVSIGFuZCBHQVRIRVJfTUVSR0UsIGlmIHRoZSBzcGVjaWZpZWQgcmVsYXRpb25zIGV4YWN0 bHkKKwkJICogbWF0Y2ggdGhpcyBqb2lucmVsLCBkbyB3aGF0ZXZlciB0aGUgYWR2aWNlIHNheXM7 IG90aGVyd2lzZSwgZG9uJ3QKKwkJICogYWxsb3cgR2F0aGVyIG9yIEdhdGhlciBNZXJnZSBhdCB0 aGlzIGxldmVsLiBGb3IgTk9fR0FUSEVSLCB0aGVyZQorCQkgKiBtdXN0IGJlIGEgc2luZ2xlIHRh cmdldCByZWxhdGlvbiB3aGljaCBtdXN0IGJlIGluY2x1ZGVkIGluIHRoaXMKKwkJICogam9pbnJl bCwgc28ganVzdCBkb24ndCBhbGxvdyBHYXRoZXIgb3IgR2F0aGVyIE1lcmdlIGhlcmUsIGZ1bGwK KwkJICogc3RvcC4KKwkJICovCisJCWlmIChlbnRyeS0+dGFnID09IFBHUEFfVEFHX05PX0dBVEhF UikKKwkJeworCQkJbXlfZ2F0aGVyX21hc2sgPSBQR1NfQ09OU0lERVJfTk9OUEFSVElBTDsKKwkJ CWZ1bGxfbWF0Y2ggPSB0cnVlOworCQl9CisJCWVsc2UKKwkJeworCQkJaW50CQkJdG90YWxfY291 bnQ7CisKKwkJCXRvdGFsX2NvdW50ID0gcGpzLT5vdXRlcl9jb3VudCArIHBqcy0+aW5uZXJfY291 bnQ7CisJCQlpdG0gPSBwZ3BhX2lkZW50aWZpZXJzX21hdGNoX3RhcmdldCh0b3RhbF9jb3VudCwg cGpzLT5yaWRzLAorCQkJCQkJCQkJCQkJZW50cnktPnRhcmdldCk7CisJCQlBc3NlcnQoaXRtICE9 IFBHUEFfSVRNX0RJU0pPSU5UKTsKKworCQkJaWYgKGl0bSA9PSBQR1BBX0lUTV9FUVVBTCkKKwkJ CXsKKwkJCQlmdWxsX21hdGNoID0gdHJ1ZTsKKwkJCQlpZiAoZW50cnktPnRhZyA9PSBQR1BBX1RB R19QQVJUSVRJT05XSVNFKQorCQkJCQlteV9wYXJ0aXRpb253aXNlX291dGNvbWUgPSAxOworCQkJ CWVsc2UgaWYgKGVudHJ5LT50YWcgPT0gUEdQQV9UQUdfR0FUSEVSKQorCQkJCQlteV9nYXRoZXJf bWFzayA9IFBHU19HQVRIRVI7CisJCQkJZWxzZSBpZiAoZW50cnktPnRhZyA9PSBQR1BBX1RBR19H QVRIRVJfTUVSR0UpCisJCQkJCW15X2dhdGhlcl9tYXNrID0gUEdTX0dBVEhFUl9NRVJHRTsKKwkJ CQllbHNlCisJCQkJCWVsb2coRVJST1IsICJ1bmV4cGVjdGVkIGFkdmljZSB0YWc6ICVkIiwKKwkJ CQkJCSAoaW50KSBlbnRyeS0+dGFnKTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQkvKgorCQkJ CSAqIElmIHNwZWNpZmllZCByZWxhdGlvbnMgZG9uJ3QgZXhhY3RseSBtYXRjaCB0aGlzIGpvaW5y ZWwsCisJCQkJICogdGhlbiB3ZSBzaG91bGQgZG8gdGhlIG9wcG9zaXRlIG9mIHdoYXRldmVyIHRo ZSBhZHZpY2Ugc2F5cy4KKwkJCQkgKiBGb3IgaW5zdGFuY2UsIGlmIHdlIGhhdmUgUEFSVElUSU9O V0lTRSgoYSBiIGMpKSBvcgorCQkJCSAqIEdBVEhFUigoYSBiIGMpKSBhbmQgdGhpcyBqb2lucmVs IGNvdmVycyB7YSwgYn0gb3Ige2EsIGIsIGMsCisJCQkJICogZH0gb3Ige2EsIGR9LCB3ZSBzaG91 bGRuJ3QgcGxhbiBpdCBwYXJ0aXRpb253aXNlIG9yIHB1dCBhCisJCQkJICogR2F0aGVyIG9yIEdh dGhlciBNZXJnZSBvbiBpdCBoZXJlLgorCQkJCSAqCisJCQkJICogQWxzbywgd2UgY2FuJ3QgcHV0 IGEgR2F0aGVyIG9yIEdhdGhlciBNZXJnZSBhdCB0aGlzIGxldmVsCisJCQkJICogaWYgdGhlcmUg aXMgUEFSVElUSU9OV0lTRSBhZHZpY2UgdGhhdCBvdmVybGFwcyB3aXRoIGl0LAorCQkJCSAqIHVu bGVzcyB0aGUgUEFSVElUSU9OV0lTRSBhZHZpY2UgY292ZXJzIGEgc3Vic2V0IG9mIHRoZQorCQkJ CSAqIHJlbGF0aW9ucyBpbiB0aGUgam9pbnJlbC4gVG8gY29udGludWUgdGhlIHByZXZpb3VzIGV4 YW1wbGUsCisJCQkJICogUEFSVElUSU9OV0lTRSgoYSBiIGMpKSBpcyBsb2dpY2FsbHkgaW5jb21w YXRpYmxlIHdpdGgKKwkJCQkgKiBHQVRIRVIoKGEgYikpIG9yIEdBVEhFUigoYSBkKSksIGJ1dCBu b3Qgd2l0aCBHQVRIRVIoKGEgYiBjCisJCQkJICogZCkpLgorCQkJCSAqCisJCQkJICogQ29udmVy c2VseSwgd2UgY2FuJ3QgcHJvY2VlZCBwYXJ0aXRpb253aXNlIGF0IHRoaXMgbGV2ZWwgaWYKKwkJ CQkgKiB0aGVyZSBpcyBvdmVybGFwcGluZyBHQVRIRVIgb3IgR0FUSEVSX01FUkdFIGFkdmljZSwg dW5sZXNzCisJCQkJICogdGhhdCBhZHZpY2UgY292ZXJzIGEgc3VwZXJzZXQgb2YgdGhlIHJlbGF0 aW9ucyBpbiB0aGlzCisJCQkJICogam9pbnJlbC4gVGhpcyBpcyBqdXN0IHRoZSBmbGlwIHNpZGUg b2YgdGhlIHByZWNlZGluZyBwb2ludC4KKwkJCQkgKi8KKwkJCQlpZiAoZW50cnktPnRhZyA9PSBQ R1BBX1RBR19QQVJUSVRJT05XSVNFKQorCQkJCXsKKwkJCQkJbXlfcGFydGl0aW9ud2lzZV9vdXRj b21lID0gLTE7CisJCQkJCWlmIChpdG0gIT0gUEdQQV9JVE1fVEFSR0VUU19BUkVfU1VCU0VUKQor CQkJCQkJbXlfZ2F0aGVyX21hc2sgPSBQR1NfQ09OU0lERVJfTk9OUEFSVElBTDsKKwkJCQl9CisJ CQkJZWxzZSBpZiAoZW50cnktPnRhZyA9PSBQR1BBX1RBR19HQVRIRVIgfHwKKwkJCQkJCSBlbnRy eS0+dGFnID09IFBHUEFfVEFHX0dBVEhFUl9NRVJHRSkKKwkJCQl7CisJCQkJCW15X2dhdGhlcl9t YXNrID0gUEdTX0NPTlNJREVSX05PTlBBUlRJQUw7CisJCQkJCWlmIChpdG0gIT0gUEdQQV9JVE1f S0VZU19BUkVfU1VCU0VUKQorCQkJCQkJbXlfcGFydGl0aW9ud2lzZV9vdXRjb21lID0gLTE7CisJ CQkJfQorCQkJCWVsc2UKKwkJCQkJZWxvZyhFUlJPUiwgInVuZXhwZWN0ZWQgYWR2aWNlIHRhZzog JWQiLAorCQkJCQkJIChpbnQpIGVudHJ5LT50YWcpOworCQkJfQorCQl9CisKKwkJLyoKKwkJICog SWYgd2Ugc2V0IG15X2dhdGhlcl9tYXNrIHVwIGFib3ZlLCB0aGVuIHdlICgxKSBtYWtlIGEgbm90 ZSBpZiB0aGUKKwkJICogYWR2aWNlIGNvbmZsaWN0ZWQsICgyKSByZW1lbWJlciB0aGUgbWFzayB2 YWx1ZSwgYW5kICgzKSByZW1lbWJlcgorCQkgKiB3aGV0aGVyIHRoaXMgd2FzIGEgZnVsbCBvciBw YXJ0aWFsIG1hdGNoLgorCQkgKi8KKwkJaWYgKG15X2dhdGhlcl9tYXNrICE9IDApCisJCXsKKwkJ CWlmIChnYXRoZXJfbWFzayAhPSAwICYmIGdhdGhlcl9tYXNrICE9IG15X2dhdGhlcl9tYXNrKQor CQkJCWdhdGhlcl9jb25mbGljdCA9IHRydWU7CisJCQlnYXRoZXJfbWFzayA9IG15X2dhdGhlcl9t YXNrOworCQkJaWYgKGZ1bGxfbWF0Y2gpCisJCQkJZ2F0aGVyX2Z1bGxfbWF0Y2ggPSBibXNfYWRk X21lbWJlcihnYXRoZXJfZnVsbF9tYXRjaCwgaSk7CisJCQllbHNlCisJCQkJZ2F0aGVyX3BhcnRp YWxfbWF0Y2ggPSBibXNfYWRkX21lbWJlcihnYXRoZXJfcGFydGlhbF9tYXRjaCwgaSk7CisJCX0K KworCQkvKgorCQkgKiBMaWtld2lzZSwgaWYgd2Ugc2V0IG15X3BhcnRpdGlvbndpc2Vfb3V0Y29t ZSB1cCBhYm92ZSwgdGhlbiB3ZSAoMSkKKwkJICogbWFrZSBhIG5vdGUgaWYgdGhlIGFkdmljZSBj b25mbGljdGVkLCAoMikgcmVtZW1iZXIgd2hhdCB0aGUgZGVzaXJlZAorCQkgKiBvdXRjb21lIHdh cywgYW5kICgzKSByZW1lbWJlciB3aGV0aGVyIHRoaXMgd2FzIGEgZnVsbCBvciBwYXJ0aWFsCisJ CSAqIG1hdGNoLgorCQkgKi8KKwkJaWYgKG15X3BhcnRpdGlvbndpc2Vfb3V0Y29tZSAhPSAwKQor CQl7CisJCQlpZiAocGFydGl0aW9ud2lzZV9vdXRjb21lICE9IDAgJiYKKwkJCQlwYXJ0aXRpb253 aXNlX291dGNvbWUgIT0gbXlfcGFydGl0aW9ud2lzZV9vdXRjb21lKQorCQkJCXBhcnRpdGlvbndp c2VfY29uZmxpY3QgPSB0cnVlOworCQkJcGFydGl0aW9ud2lzZV9vdXRjb21lID0gbXlfcGFydGl0 aW9ud2lzZV9vdXRjb21lOworCQkJaWYgKGZ1bGxfbWF0Y2gpCisJCQkJcGFydGl0aW9ud2lzZV9m dWxsX21hdGNoID0KKwkJCQkJYm1zX2FkZF9tZW1iZXIocGFydGl0aW9ud2lzZV9mdWxsX21hdGNo LCBpKTsKKwkJCWVsc2UKKwkJCQlwYXJ0aXRpb253aXNlX3BhcnRpYWxfbWF0Y2ggPQorCQkJCQli bXNfYWRkX21lbWJlcihwYXJ0aXRpb253aXNlX3BhcnRpYWxfbWF0Y2gsIGkpOworCQl9CisJfQor CisJLyoKKwkgKiBNYXJrIGV2ZXJ5IEdhdGhlci1yZWxhdGVkIHBpZWNlIG9mIGFkdmljZSBhcyBw YXJ0aWFsbHkgbWF0Y2hlZCwgYW5kIGlmCisJICogdGhlIHNldCBvZiB0YXJnZXRzIGV4YWN0bHkg bWF0Y2hlZCB0aGlzIHJlbGF0aW9uLCBmdWxseSBtYXRjaGVkLiBJZgorCSAqIHRoZXJlIHdhcyBh IGNvbmZsaWN0LCBtYXJrIHRoZW0gYWxsIGFzIGNvbmZsaWN0aW5nLgorCSAqLworCWZsYWdzID0g UEdQQV9URV9NQVRDSF9QQVJUSUFMOworCWlmIChnYXRoZXJfY29uZmxpY3QpCisJCWZsYWdzIHw9 IFBHUEFfVEVfQ09ORkxJQ1RJTkc7CisJcGdwYV90cm92ZV9zZXRfZmxhZ3MocGpzLT5yZWxfZW50 cmllcywgZ2F0aGVyX3BhcnRpYWxfbWF0Y2gsIGZsYWdzKTsKKwlmbGFncyB8PSBQR1BBX1RFX01B VENIX0ZVTEw7CisJcGdwYV90cm92ZV9zZXRfZmxhZ3MocGpzLT5yZWxfZW50cmllcywgZ2F0aGVy X2Z1bGxfbWF0Y2gsIGZsYWdzKTsKKworCS8qIExpa2V3aXNlIGZvciBwYXJ0aXRpb253aXNlIGFk dmljZS4gKi8KKwlmbGFncyA9IFBHUEFfVEVfTUFUQ0hfUEFSVElBTDsKKwlpZiAocGFydGl0aW9u d2lzZV9jb25mbGljdCkKKwkJZmxhZ3MgfD0gUEdQQV9URV9DT05GTElDVElORzsKKwlwZ3BhX3Ry b3ZlX3NldF9mbGFncyhwanMtPnJlbF9lbnRyaWVzLCBwYXJ0aXRpb253aXNlX3BhcnRpYWxfbWF0 Y2gsIGZsYWdzKTsKKwlmbGFncyB8PSBQR1BBX1RFX01BVENIX0ZVTEw7CisJcGdwYV90cm92ZV9z ZXRfZmxhZ3MocGpzLT5yZWxfZW50cmllcywgcGFydGl0aW9ud2lzZV9mdWxsX21hdGNoLCBmbGFn cyk7CisKKwkvKgorCSAqIEVuZm9yY2UgcmVzdHJpY3Rpb25zIG9uIHRoZSBHYXRoZXIvR2F0aGVy IE1lcmdlLiAgT25seSBjbGVhciBiaXRzIGhlcmUsCisJICogc28gdGhhdCB3ZSBzdGlsbCByZXNw ZWN0IHRoZSBlbmFibGVfKiBHVUNzLiBEbyBub3RoaW5nIGlmIHRoZSBhZHZpY2UKKwkgKiBjb25m bGljdHMuCisJICovCisJaWYgKGdhdGhlcl9tYXNrICE9IDAgJiYgIWdhdGhlcl9jb25mbGljdCkK Kwl7CisJCXVpbnQ2NAkJYWxsX2dhdGhlcl9tYXNrOworCisJCWFsbF9nYXRoZXJfbWFzayA9CisJ CQlQR1NfR0FUSEVSIHwgUEdTX0dBVEhFUl9NRVJHRSB8IFBHU19DT05TSURFUl9OT05QQVJUSUFM OworCQkqcGdzX21hc2tfcCAmPSB+KGFsbF9nYXRoZXJfbWFzayAmIH5nYXRoZXJfbWFzayk7CisJ fQorCisJLyoKKwkgKiBBcyBhYm92ZSwgYnV0IGZvciBwYXJ0aXRpb253aXNlIGFkdmljZS4KKwkg KgorCSAqIFRvIGluZHVjZSBhIHBhcnRpdGlvbndpc2Ugam9pbiwgd2UgZGlzYWJsZSBhbGwgdGhl IG9yZGluYXJ5IG1lYW5zIG9mCisJICogcGVyZm9ybWluZyBhIGpvaW4sIHNvIHRoYXQgYW4gQXBw ZW5kIG9yIE1lcmdlQXBwZW5kIHBhdGggd2lsbCBob3BlZnVsbHkKKwkgKiBiZSBjaG9zZW4uCisJ ICoKKwkgKiBUbyBwcmV2ZW50IG9uZSwgd2UganVzdCBkaXNhYmxlIEFwcGVuZCBhbmQgTWVyZ2VB cHBlbmQuICBOb3RlIHRoYXQgd2UKKwkgKiBtdXN0IG5vdCB1bnNldCBQR1NfQ09OU0lERVJfUEFS VElUSU9OV0lTRSBldmVuIHdoZW4gd2UgZG9uJ3Qgd2FudCBhCisJICogcGFydGl0aW9ud2lzZSBq b2luIGhlcmUsIGJlY2F1c2Ugd2UgbWlnaHQgd2FudCBvbmUgYXQgYSBoaWdoZXIgbGV2ZWwKKwkg KiB0aGF0IHdpbGwgY29uc3RydWN0IGl0cyBvd24gcGF0aHMgdXNpbmcgdGhlIG9uZXMgZnJvbSB0 aGlzIGxldmVsLgorCSAqLworCWlmIChwYXJ0aXRpb253aXNlX291dGNvbWUgIT0gMCAmJiAhcGFy dGl0aW9ud2lzZV9jb25mbGljdCkKKwl7CisJCWlmIChwYXJ0aXRpb253aXNlX291dGNvbWUgPiAw KQorCQkJKnBnc19tYXNrX3AgPSAoKnBnc19tYXNrX3AgJiB+UEdTX0pPSU5fQU5ZKTsKKwkJZWxz ZQorCQkJKnBnc19tYXNrX3AgJj0gfihQR1NfQVBQRU5EIHwgUEdTX01FUkdFX0FQUEVORCk7CisJ fQorfQorCisvKgorICogRW5mb3JjZSByZXN0cmljdGlvbnMgb24gdGhlIGpvaW4gb3JkZXIgb3Ig am9pbiBtZXRob2QuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX3BsYW5uZXJfYXBwbHlfam9pbl9w YXRoX2FkdmljZShKb2luVHlwZSBqb2ludHlwZSwgdWludDY0ICpwZ3NfbWFza19wLAorCQkJCQkJ CQkJY2hhciAqcGxhbl9uYW1lLAorCQkJCQkJCQkJcGdwYV9qb2luX3N0YXRlICpwanMpCit7CisJ aW50CQkJaSA9IC0xOworCUJpdG1hcHNldCAgKmpvX3Blcm1pdF9pbmRleGVzID0gTlVMTDsKKwlC aXRtYXBzZXQgICpqb19kZW55X2luZGV4ZXMgPSBOVUxMOworCUJpdG1hcHNldCAgKmpvX2Rlbnlf cmVsX2luZGV4ZXMgPSBOVUxMOworCUJpdG1hcHNldCAgKmptX2luZGV4ZXMgPSBOVUxMOworCWJv b2wJCWptX2NvbmZsaWN0ID0gZmFsc2U7CisJdWludDMyCQlqb2luX21hc2sgPSAwOworCUJpdG1h cHNldCAgKnNqX3Blcm1pdF9pbmRleGVzID0gTlVMTDsKKwlCaXRtYXBzZXQgICpzal9kZW55X2lu ZGV4ZXMgPSBOVUxMOworCisJLyoKKwkgKiBSZWNvbnNpZGVyIFBBUlRJVElPTldJU0UoLi4uKSBh ZHZpY2UuCisJICoKKwkgKiBXZSBhbHJlYWR5IHRob3VnaHQgYWJvdXQgdGhpcyBmb3IgdGhlIGpv aW5yZWwgYXMgYSB3aG9sZSwgYnV0IGluIHNvbWUKKwkgKiBjYXNlcywgcGFydGl0aW9ud2lzZSBh ZHZpY2UgY2FuIGFsc28gY29uc3RyYWluIHRoZSBqb2luIG9yZGVyLiBGb3IKKwkgKiBpbnN0YW5j ZSwgaWYgdGhlIGFkdmljZSBzYXlzIFBBUlRJVElPTldJU0UoKHQxIHQyKSksIHdlIHNob3VsZG4n dCBidWlsZAorCSAqIGpvaW4gcGF0aHMgZm9yIGFueSBqb2lucmVsIHRoYXQgaW5jbHVkZXMgdDEg b3IgdDIgdW5sZXNzIGl0IGFsc28KKwkgKiBpbmNsdWRlcyB0aGUgb3RoZXIuIEluIGdlbmVyYWws IHRoZSBwYXJ0aXRpb253aXNlIG9wZXJhdGlvbiBtdXN0IGhhdmUKKwkgKiBhbHJlYWR5IGJlZW4g Y29tcGxldGVkIHdpdGhpbiBvbmUgc2lkZSBvZiB0aGUgY3VycmVudCBqb2luIG9yIHRoZQorCSAq IG90aGVyLCBlbHNlIHRoZSBqb2luIG9yZGVyIGlzIGltcGVybWlzc2libGUuCisJICoKKwkgKiBO QjogSXQgbWlnaHQgc2VlbSB0ZW1wdGluZyB0byB0cnkgdG8gZGVhbCB3aXRoIFBBUlRJVElPTldJ U0UgYWR2aWNlCisJICogZW50aXJlbHkgaW4gdGhpcyBmdW5jdGlvbiwgYnV0IHRoYXQgZG9lc24n dCB3b3JrLiBIZXJlLCB3ZSBjYW4gb25seQorCSAqIGFmZmVjdCB0aGUgcGdzX21hc2sgd2l0aGlu IGEgcGFydGljdWxhciBKb2luUGF0aEV4dHJhRGF0YSwgdGhhdCBpcywgZm9yCisJICogYSBwYXJ0 aWN1bGFyIGNob2ljZSBvZiBpbm5lcnJlbCBhbmQgb3V0ZXJyZWwuIFBhcnRpdGlvbndpc2UgcGF0 aHMgYXJlCisJICogbm90IGJ1aWx0IHRoYXQgd2F5LCBzbyB3ZSBtdXN0IHNldCBwZ3NfbWFzayBm b3IgdGhlIFJlbE9wdEluZm8sIHdoaWNoCisJICogaXMgYmVzdCBkb25lIGluIHBncGFfcGxhbm5l cl9hcHBseV9qb2lucmVsX2FkdmljZS4KKwkgKi8KKwl3aGlsZSAoKGkgPSBibXNfbmV4dF9tZW1i ZXIocGpzLT5yZWxfaW5kZXhlcywgaSkpID49IDApCisJeworCQlwZ3BhX3Ryb3ZlX2VudHJ5ICpl bnRyeSA9ICZwanMtPnJlbF9lbnRyaWVzW2ldOworCQlwZ3BhX2l0bV90eXBlIGlubmVyX2l0bTsK KwkJcGdwYV9pdG1fdHlwZSBvdXRlcl9pdG07CisKKwkJaWYgKGVudHJ5LT50YWcgIT0gUEdQQV9U QUdfUEFSVElUSU9OV0lTRSkKKwkJCWNvbnRpbnVlOworCisJCW91dGVyX2l0bSA9IHBncGFfaWRl bnRpZmllcnNfbWF0Y2hfdGFyZ2V0KHBqcy0+b3V0ZXJfY291bnQsCisJCQkJCQkJCQkJCQkgIHBq cy0+cmlkcywgZW50cnktPnRhcmdldCk7CisJCWlmIChvdXRlcl9pdG0gPT0gUEdQQV9JVE1fRVFV QUwgfHwKKwkJCW91dGVyX2l0bSA9PSBQR1BBX0lUTV9UQVJHRVRTX0FSRV9TVUJTRVQpCisJCQlj b250aW51ZTsKKworCQlpbm5lcl9pdG0gPSBwZ3BhX2lkZW50aWZpZXJzX21hdGNoX3RhcmdldChw anMtPmlubmVyX2NvdW50LAorCQkJCQkJCQkJCQkJICBwanMtPnJpZHMgKyBwanMtPm91dGVyX2Nv dW50LAorCQkJCQkJCQkJCQkJICBlbnRyeS0+dGFyZ2V0KTsKKwkJaWYgKGlubmVyX2l0bSA9PSBQ R1BBX0lUTV9FUVVBTCB8fAorCQkJaW5uZXJfaXRtID09IFBHUEFfSVRNX1RBUkdFVFNfQVJFX1NV QlNFVCkKKwkJCWNvbnRpbnVlOworCisJCWpvX2RlbnlfcmVsX2luZGV4ZXMgPSBibXNfYWRkX21l bWJlcihqb19kZW55X3JlbF9pbmRleGVzLCBpKTsKKwl9CisKKwkvKiBJdGVyYXRlIG92ZXIgYWR2 aWNlIHRoYXQgcGVydGFpbnMgdG8gdGhlIGpvaW4gb3JkZXIgYW5kIG1ldGhvZC4gKi8KKwlpID0g LTE7CisJd2hpbGUgKChpID0gYm1zX25leHRfbWVtYmVyKHBqcy0+am9pbl9pbmRleGVzLCBpKSkg Pj0gMCkKKwl7CisJCXBncGFfdHJvdmVfZW50cnkgKmVudHJ5ID0gJnBqcy0+am9pbl9lbnRyaWVz W2ldOworCQl1aW50MzIJCW15X2pvaW5fbWFzazsKKworCQkvKiBIYW5kbGUgam9pbiBvcmRlciBh ZHZpY2UuICovCisJCWlmIChlbnRyeS0+dGFnID09IFBHUEFfVEFHX0pPSU5fT1JERVIpCisJCXsK KwkJCXBncGFfam9fb3V0Y29tZSBqb19vdXRjb21lOworCisJCQlqb19vdXRjb21lID0gcGdwYV9q b2luX29yZGVyX3Blcm1pdHNfam9pbihwanMtPm91dGVyX2NvdW50LAorCQkJCQkJCQkJCQkJCSAg cGpzLT5pbm5lcl9jb3VudCwKKwkJCQkJCQkJCQkJCQkgIHBqcy0+cmlkcywKKwkJCQkJCQkJCQkJ CQkgIGVudHJ5KTsKKwkJCWlmIChqb19vdXRjb21lID09IFBHUEFfSk9fUEVSTUlUVEVEKQorCQkJ CWpvX3Blcm1pdF9pbmRleGVzID0gYm1zX2FkZF9tZW1iZXIoam9fcGVybWl0X2luZGV4ZXMsIGkp OworCQkJZWxzZSBpZiAoam9fb3V0Y29tZSA9PSBQR1BBX0pPX0RFTklFRCkKKwkJCQlqb19kZW55 X2luZGV4ZXMgPSBibXNfYWRkX21lbWJlcihqb19kZW55X2luZGV4ZXMsIGkpOworCQkJY29udGlu dWU7CisJCX0KKworCQkvKiBIYW5kbGUgam9pbiBtZXRob2QgYWR2aWNlLiAqLworCQlteV9qb2lu X21hc2sgPSBwZ3BhX2pvaW5fc3RyYXRlZ3lfbWFza19mcm9tX2FkdmljZV90YWcoZW50cnktPnRh Zyk7CisJCWlmIChteV9qb2luX21hc2sgIT0gMCkKKwkJeworCQkJYm9vbAkJcGVybWl0OworCQkJ Ym9vbAkJcmVzdHJpY3RfbWV0aG9kOworCisJCQlpZiAoZW50cnktPnRhZyA9PSBQR1BBX1RBR19G T1JFSUdOX0pPSU4pCisJCQkJcGVybWl0ID0gcGdwYV9vcGFxdWVfam9pbl9wZXJtaXRzX2pvaW4o cGpzLT5vdXRlcl9jb3VudCwKKwkJCQkJCQkJCQkJCQkgICBwanMtPmlubmVyX2NvdW50LAorCQkJ CQkJCQkJCQkJCSAgIHBqcy0+cmlkcywKKwkJCQkJCQkJCQkJCQkgICBlbnRyeSwKKwkJCQkJCQkJ CQkJCQkgICAmcmVzdHJpY3RfbWV0aG9kKTsKKwkJCWVsc2UKKwkJCQlwZXJtaXQgPSBwZ3BhX2pv aW5fbWV0aG9kX3Blcm1pdHNfam9pbihwanMtPm91dGVyX2NvdW50LAorCQkJCQkJCQkJCQkJCSAg IHBqcy0+aW5uZXJfY291bnQsCisJCQkJCQkJCQkJCQkJICAgcGpzLT5yaWRzLAorCQkJCQkJCQkJ CQkJCSAgIGVudHJ5LAorCQkJCQkJCQkJCQkJCSAgICZyZXN0cmljdF9tZXRob2QpOworCQkJaWYg KCFwZXJtaXQpCisJCQkJam9fZGVueV9pbmRleGVzID0gYm1zX2FkZF9tZW1iZXIoam9fZGVueV9p bmRleGVzLCBpKTsKKwkJCWVsc2UgaWYgKHJlc3RyaWN0X21ldGhvZCkKKwkJCXsKKwkJCQlqbV9p bmRleGVzID0gYm1zX2FkZF9tZW1iZXIoam1faW5kZXhlcywgaSk7CisJCQkJaWYgKGpvaW5fbWFz ayAhPSAwICYmIGpvaW5fbWFzayAhPSBteV9qb2luX21hc2spCisJCQkJCWptX2NvbmZsaWN0ID0g dHJ1ZTsKKwkJCQlqb2luX21hc2sgPSBteV9qb2luX21hc2s7CisJCQl9CisJCQljb250aW51ZTsK KwkJfQorCisJCS8qIEhhbmRsZSBzZW1pam9pbiB1bmlxdWVuZXNzIGFkdmljZS4gKi8KKwkJaWYg KGVudHJ5LT50YWcgPT0gUEdQQV9UQUdfU0VNSUpPSU5fVU5JUVVFIHx8CisJCQllbnRyeS0+dGFn ID09IFBHUEFfVEFHX1NFTUlKT0lOX05PTl9VTklRVUUpCisJCXsKKwkJCWJvb2wJCW91dGVyX3Np ZGVfbnVsbGFibGU7CisJCQlib29sCQlyZXN0cmljdF9tZXRob2Q7CisKKwkJCS8qIFBsYW5uZXIg aGFzIG51bGxhYmxlIHNpZGUgb2YgdGhlIHNlbWlqb2luIG9uIHRoZSBvdXRlciBzaWRlPyAqLwor CQkJb3V0ZXJfc2lkZV9udWxsYWJsZSA9IChqb2ludHlwZSA9PSBKT0lOX1VOSVFVRV9PVVRFUiB8 fAorCQkJCQkJCQkgICBqb2ludHlwZSA9PSBKT0lOX1JJR0hUX1NFTUkpOworCisJCQlpZiAoIXBn cGFfc2VtaWpvaW5fcGVybWl0c19qb2luKHBqcy0+b3V0ZXJfY291bnQsCisJCQkJCQkJCQkJCXBq cy0+aW5uZXJfY291bnQsCisJCQkJCQkJCQkJCXBqcy0+cmlkcywKKwkJCQkJCQkJCQkJZW50cnks CisJCQkJCQkJCQkJCW91dGVyX3NpZGVfbnVsbGFibGUsCisJCQkJCQkJCQkJCSZyZXN0cmljdF9t ZXRob2QpKQorCQkJCWpvX2RlbnlfaW5kZXhlcyA9IGJtc19hZGRfbWVtYmVyKGpvX2RlbnlfaW5k ZXhlcywgaSk7CisJCQllbHNlIGlmIChyZXN0cmljdF9tZXRob2QpCisJCQl7CisJCQkJYm9vbAkJ YWR2aWNlX3VuaXF1ZTsKKwkJCQlib29sCQlqdF91bmlxdWU7CisJCQkJYm9vbAkJanRfbm9uX3Vu aXF1ZTsKKworCQkJCS8qIEFkdmljZSB3YW50cyB0byB1bmlxdWUtaWZ5IGFuZCB1c2UgYSByZWd1 bGFyIGpvaW4/ICovCisJCQkJYWR2aWNlX3VuaXF1ZSA9IChlbnRyeS0+dGFnID09IFBHUEFfVEFH X1NFTUlKT0lOX1VOSVFVRSk7CisKKwkJCQkvKiBQbGFubmVyIGlzIHRyeWluZyB0byB1bmlxdWUt aWZ5IGFuZCB1c2UgYSByZWd1bGFyIGpvaW4/ICovCisJCQkJanRfdW5pcXVlID0gKGpvaW50eXBl ID09IEpPSU5fVU5JUVVFX0lOTkVSIHx8CisJCQkJCQkJIGpvaW50eXBlID09IEpPSU5fVU5JUVVF X09VVEVSKTsKKworCQkJCS8qIFBsYW5uZXIgaXMgdHJ5aW5nIGEgc2VtaS1qb2luLCB3aXRob3V0 IHVuaXF1ZS1pZnlpbmc/ICovCisJCQkJanRfbm9uX3VuaXF1ZSA9IChqb2ludHlwZSA9PSBKT0lO X1NFTUkgfHwKKwkJCQkJCQkJIGpvaW50eXBlID09IEpPSU5fUklHSFRfU0VNSSk7CisKKwkJCQlp ZiAoIWp0X3VuaXF1ZSAmJiAhanRfbm9uX3VuaXF1ZSkKKwkJCQl7CisJCQkJCS8qCisJCQkJCSAq IFRoaXMgZG9lc24ndCBzZWVtIHRvIGJlIGEgc2VtaWpvaW4gdG8gd2hpY2ggU0pfVU5JUVVFCisJ CQkJCSAqIG9yIFNKX05PTl9VTklRVUUgY2FuIGJlIGFwcGxpZWQuCisJCQkJCSAqLworCQkJCQll bnRyeS0+ZmxhZ3MgfD0gUEdQQV9URV9JTkFQUExJQ0FCTEU7CisJCQkJfQorCQkJCWVsc2UgaWYg KGFkdmljZV91bmlxdWUgIT0ganRfdW5pcXVlKQorCQkJCQlzal9kZW55X2luZGV4ZXMgPSBibXNf YWRkX21lbWJlcihzal9kZW55X2luZGV4ZXMsIGkpOworCQkJCWVsc2UKKwkJCQkJc2pfcGVybWl0 X2luZGV4ZXMgPSBibXNfYWRkX21lbWJlcihzal9wZXJtaXRfaW5kZXhlcywgaSk7CisJCQl9CisJ CQljb250aW51ZTsKKwkJfQorCX0KKworCS8qCisJICogSWYgdGhlIGFkdmljZSBpbmRpY2F0ZXMg Ym90aCB0aGF0IHRoaXMgam9pbiBvcmRlciBpcyBwZXJtaXNzaWJsZSBhbmQKKwkgKiBhbHNvIHRo YXQgaXQgaXNuJ3QsIHRoZW4gbWFyayBhZHZpY2UgcmVsYXRlZCB0byB0aGUgam9pbiBvcmRlciBh cworCSAqIGNvbmZsaWN0aW5nLgorCSAqLworCWlmIChqb19wZXJtaXRfaW5kZXhlcyAhPSBOVUxM ICYmCisJCShqb19kZW55X2luZGV4ZXMgIT0gTlVMTCB8fCBqb19kZW55X3JlbF9pbmRleGVzICE9 IE5VTEwpKQorCXsKKwkJcGdwYV90cm92ZV9zZXRfZmxhZ3MocGpzLT5qb2luX2VudHJpZXMsIGpv X3Blcm1pdF9pbmRleGVzLAorCQkJCQkJCSBQR1BBX1RFX0NPTkZMSUNUSU5HKTsKKwkJcGdwYV90 cm92ZV9zZXRfZmxhZ3MocGpzLT5qb2luX2VudHJpZXMsIGpvX2RlbnlfaW5kZXhlcywKKwkJCQkJ CQkgUEdQQV9URV9DT05GTElDVElORyk7CisJCXBncGFfdHJvdmVfc2V0X2ZsYWdzKHBqcy0+cmVs X2VudHJpZXMsIGpvX2RlbnlfcmVsX2luZGV4ZXMsCisJCQkJCQkJIFBHUEFfVEVfQ09ORkxJQ1RJ TkcpOworCX0KKworCS8qCisJICogSWYgbW9yZSB0aGFuIG9uZSBqb2luIG1ldGhvZCBzcGVjaWZp Y2F0aW9uIGlzIHJlbGV2YW50IGhlcmUgYW5kIHRoZXkKKwkgKiBkaWZmZXIsIG1hcmsgdGhlbSBh bGwgYXMgY29uZmxpY3RpbmcuCisJICovCisJaWYgKGptX2NvbmZsaWN0KQorCQlwZ3BhX3Ryb3Zl X3NldF9mbGFncyhwanMtPmpvaW5fZW50cmllcywgam1faW5kZXhlcywKKwkJCQkJCQkgUEdQQV9U RV9DT05GTElDVElORyk7CisKKwkvKiBJZiBzZW1pam9pbiBhZHZpY2Ugc2F5cyBib3RoIHllcyBh bmQgbm8sIG1hcmsgaXQgYWxsIGFzIGNvbmZsaWN0aW5nLiAqLworCWlmIChzal9wZXJtaXRfaW5k ZXhlcyAhPSBOVUxMICYmIHNqX2RlbnlfaW5kZXhlcyAhPSBOVUxMKQorCXsKKwkJcGdwYV90cm92 ZV9zZXRfZmxhZ3MocGpzLT5qb2luX2VudHJpZXMsIHNqX3Blcm1pdF9pbmRleGVzLAorCQkJCQkJ CSBQR1BBX1RFX0NPTkZMSUNUSU5HKTsKKwkJcGdwYV90cm92ZV9zZXRfZmxhZ3MocGpzLT5qb2lu X2VudHJpZXMsIHNqX2RlbnlfaW5kZXhlcywKKwkJCQkJCQkgUEdQQV9URV9DT05GTElDVElORyk7 CisJfQorCisJLyoKKwkgKiBFbmZvcmNlIHJlc3RyaWN0aW9ucyBvbiB0aGUgam9pbiBvcmRlciBh bmQgam9pbiBtZXRob2QsIGFuZCBhbnkKKwkgKiBzZW1pam9pbi1yZWxhdGVkIHJlc3RyaWN0aW9u cy4gT25seSBjbGVhciBiaXRzIGhlcmUsIHNvIHRoYXQgd2Ugc3RpbGwKKwkgKiByZXNwZWN0IHRo ZSBlbmFibGVfKiBHVUNzLiBEbyBub3RoaW5nIGluIGNhc2VzIHdoZXJlIHRoZSBhZHZpY2Ugb24g YQorCSAqIHNpbmdsZSB0b3BpYyBjb25mbGljdHMuCisJICovCisJaWYgKChqb19kZW55X2luZGV4 ZXMgIT0gTlVMTCB8fCBqb19kZW55X3JlbF9pbmRleGVzICE9IE5VTEwpICYmCisJCWpvX3Blcm1p dF9pbmRleGVzID09IE5VTEwpCisJCSpwZ3NfbWFza19wICY9IH5QR1NfSk9JTl9BTlk7CisJaWYg KGpvaW5fbWFzayAhPSAwICYmICFqbV9jb25mbGljdCkKKwkJKnBnc19tYXNrX3AgJj0gfihQR1Nf Sk9JTl9BTlkgJiB+am9pbl9tYXNrKTsKKwlpZiAoc2pfZGVueV9pbmRleGVzICE9IE5VTEwgJiYg c2pfcGVybWl0X2luZGV4ZXMgPT0gTlVMTCkKKwkJKnBnc19tYXNrX3AgJj0gflBHU19KT0lOX0FO WTsKK30KKworLyoKKyAqIFRyYW5zbGF0ZSBhbiBhZHZpY2UgdGFnIGludG8gYSBwYXRoIGdlbmVy YXRpb24gc3RyYXRlZ3kgbWFzay4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQg d2l0aCB0YWcgdHlwZXMgdGhhdCBkb24ndCByZXByZXNlbnQgam9pbgorICogc3RyYXRlZ2llcy4g SW4gc3VjaCBjYXNlcywgd2UganVzdCByZXR1cm4gMCwgd2hpY2ggY2FuJ3QgYmUgY29uZnVzZWQg d2l0aAorICogYSB2YWxpZCBtYXNrLgorICovCitzdGF0aWMgdWludDY0CitwZ3BhX2pvaW5fc3Ry YXRlZ3lfbWFza19mcm9tX2FkdmljZV90YWcocGdwYV9hZHZpY2VfdGFnX3R5cGUgdGFnKQorewor CXN3aXRjaCAodGFnKQorCXsKKwkJY2FzZSBQR1BBX1RBR19GT1JFSUdOX0pPSU46CisJCQlyZXR1 cm4gUEdTX0ZPUkVJR05KT0lOOworCQljYXNlIFBHUEFfVEFHX01FUkdFX0pPSU5fUExBSU46CisJ CQlyZXR1cm4gUEdTX01FUkdFSk9JTl9QTEFJTjsKKwkJY2FzZSBQR1BBX1RBR19NRVJHRV9KT0lO X01BVEVSSUFMSVpFOgorCQkJcmV0dXJuIFBHU19NRVJHRUpPSU5fTUFURVJJQUxJWkU7CisJCWNh c2UgUEdQQV9UQUdfTkVTVEVEX0xPT1BfUExBSU46CisJCQlyZXR1cm4gUEdTX05FU1RMT09QX1BM QUlOOworCQljYXNlIFBHUEFfVEFHX05FU1RFRF9MT09QX01BVEVSSUFMSVpFOgorCQkJcmV0dXJu IFBHU19ORVNUTE9PUF9NQVRFUklBTElaRTsKKwkJY2FzZSBQR1BBX1RBR19ORVNURURfTE9PUF9N RU1PSVpFOgorCQkJcmV0dXJuIFBHU19ORVNUTE9PUF9NRU1PSVpFOworCQljYXNlIFBHUEFfVEFH X0hBU0hfSk9JTjoKKwkJCXJldHVybiBQR1NfSEFTSEpPSU47CisJCWRlZmF1bHQ6CisJCQlyZXR1 cm4gMDsKKwl9Cit9CisKKy8qCisgKiBEb2VzIGEgY2VydGFpbiBpdGVtIG9mIGpvaW4gb3JkZXIg YWR2aWNlIHBlcm1pdCBhIGNlcnRhaW4gam9pbj8KKyAqCisgKiBSZXR1cm5zIFBHUEFfSk9fREVO SUVEIGlmIHRoZSBhZHZpY2UgaXMgaW5jb21wYXRpYmxlIHdpdGggdGhlIHByb3Bvc2VkCisgKiBq b2luIG9yZGVyLgorICoKKyAqIFJldHVybnMgUEdQQV9KT19QRVJNSVRURUQgaWYgdGhlIGFkdmlj ZSBzcGVjaWZpZXMgZXhhY3RseSB0aGUgcHJvcG9zZWQKKyAqIGpvaW4gb3JkZXIuIFRoaXMgaW1w bGllcyB0aGF0IGEgcGFydGl0aW9ud2lzZSBqb2luIHNob3VsZCBub3QgYmUKKyAqIHBlcmZvcm1l ZCBhdCB0aGlzIGxldmVsOyByYXRoZXIsIG9uZSBvZiB0aGUgdHJhZGl0aW9uYWwgam9pbiBtZXRo b2RzCisgKiBzaG91bGQgYmUgdXNlZC4KKyAqCisgKiBSZXR1cm5zIFBHUEFfSk9fSU5ESUZGRVJF TlQgaWYgdGhlIGFkdmljZSBkb2VzIG5vdCBjYXJlIHdoYXQgaGFwcGVucy4KKyAqIFdlIHVzZSB0 aGlzIGZvciB1bm9yZGVyZWQgSk9JTl9PUkRFUiBzdWJsaXN0cywgd2hpY2ggYXJlIGNvbXBhdGli bGUgd2l0aAorICogcGFydGl0aW9ud2lzZSBqb2luIGJ1dCBkbyBub3QgbWFuZGF0ZSBpdC4KKyAq Lworc3RhdGljIHBncGFfam9fb3V0Y29tZQorcGdwYV9qb2luX29yZGVyX3Blcm1pdHNfam9pbihp bnQgb3V0ZXJfY291bnQsIGludCBpbm5lcl9jb3VudCwKKwkJCQkJCQkgcGdwYV9pZGVudGlmaWVy ICpyaWRzLAorCQkJCQkJCSBwZ3BhX3Ryb3ZlX2VudHJ5ICplbnRyeSkKK3sKKwlib29sCQlsb29w ID0gdHJ1ZTsKKwlib29sCQlzdWJsaXN0ID0gZmFsc2U7CisJaW50CQkJbGVuZ3RoOworCWludAkJ CW91dGVyX2xlbmd0aDsKKwlwZ3BhX2FkdmljZV90YXJnZXQgKnRhcmdldCA9IGVudHJ5LT50YXJn ZXQ7CisJcGdwYV9hZHZpY2VfdGFyZ2V0ICpwcmVmaXhfdGFyZ2V0OworCisJLyogV2UgZGVmaW5p dGVseSBoYXZlIGF0IGxlYXN0IGEgcGFydGlhbCBtYXRjaCBmb3IgdGhpcyB0cm92ZSBlbnRyeS4g Ki8KKwllbnRyeS0+ZmxhZ3MgfD0gUEdQQV9URV9NQVRDSF9QQVJUSUFMOworCisJLyoKKwkgKiBG aW5kIHRoZSBpbm5lcm1vc3Qgc3VibGlzdCB0aGF0IGNvbnRhaW5zIGFsbCBrZXlzOyBpZiBubyBz dWJsaXN0IGRvZXMsCisJICogdGhlbiBjb250aW51ZSBwcm9jZXNzaW5nIHdpdGggdGhlIHRvcGxl dmVsIGxpc3QuCisJICoKKwkgKiBGb3IgZXhhbXBsZSwgaWYgdGhlIGFkdmljZSBzYXlzIEpPSU5f T1JERVIodDEgdDIgKHQzIHQ0IHQ1KSksIHRoZW4gd2UKKwkgKiBzaG91bGQgZXZhbHVhdGUgam9p bnMgdGhhdCBvbmx5IGludm9sdmUgdDMsIHQ0LCBhbmQvb3IgdDUgYWdhaW5zdCB0aGUKKwkgKiAo dDMgdDQgdDUpIHN1Ymxpc3QsIGFuZCBvdGhlcnMgYWdhaW5zdCB0aGUgZnVsbCBsaXN0LgorCSAq CisJICogTm90ZSB0aGF0ICgxKSBvdXRlcm1vc3Qgc3VibGlzdCBpcyBhbHdheXMgb3JkZXJlZCBh bmQgKDIpIHdoZW5ldmVyIHdlCisJICogem9vbSBpbnRvIGFuIHVub3JkZXJlZCBzdWJsaXN0LCB3 ZSBpbnN0YW50bHkgcmV0dXJuCisJICogUEdQQV9KT19JTkRJRkZFUkVOVC4KKwkgKi8KKwl3aGls ZSAobG9vcCkKKwl7CisJCUFzc2VydCh0YXJnZXQtPnR0eXBlID09IFBHUEFfVEFSR0VUX09SREVS RURfTElTVCk7CisKKwkJbG9vcCA9IGZhbHNlOworCQlmb3JlYWNoX3B0cihwZ3BhX2FkdmljZV90 YXJnZXQsIGNoaWxkX3RhcmdldCwgdGFyZ2V0LT5jaGlsZHJlbikKKwkJeworCQkJcGdwYV9pdG1f dHlwZSBpdG07CisKKwkJCWlmIChjaGlsZF90YXJnZXQtPnR0eXBlID09IFBHUEFfVEFSR0VUX0lE RU5USUZJRVIpCisJCQkJY29udGludWU7CisKKwkJCWl0bSA9IHBncGFfaWRlbnRpZmllcnNfbWF0 Y2hfdGFyZ2V0KG91dGVyX2NvdW50ICsgaW5uZXJfY291bnQsCisJCQkJCQkJCQkJCQlyaWRzLCBj aGlsZF90YXJnZXQpOworCQkJaWYgKGl0bSA9PSBQR1BBX0lUTV9FUVVBTCB8fCBpdG0gPT0gUEdQ QV9JVE1fS0VZU19BUkVfU1VCU0VUKQorCQkJeworCQkJCWlmIChjaGlsZF90YXJnZXQtPnR0eXBl ID09IFBHUEFfVEFSR0VUX09SREVSRURfTElTVCkKKwkJCQl7CisJCQkJCXRhcmdldCA9IGNoaWxk X3RhcmdldDsKKwkJCQkJc3VibGlzdCA9IHRydWU7CisJCQkJCWxvb3AgPSB0cnVlOworCQkJCQli cmVhazsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJQXNzZXJ0KGNoaWxkX3RhcmdldC0+ dHR5cGUgPT0gUEdQQV9UQVJHRVRfVU5PUkRFUkVEX0xJU1QpOworCQkJCQlyZXR1cm4gUEdQQV9K T19JTkRJRkZFUkVOVDsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwkvKgorCSAqIFRyeSB0byBm aW5kIGEgcHJlZml4IG9mIHRoZSBzZWxlY3RlZCBqb2luIG9yZGVyIGxpc3QgdGhhdCBpcyBleGFj dGx5CisJICogZXF1YWwgdG8gdGhlIG91dGVyIHNpZGUgb2YgdGhlIHByb3Bvc2VkIGpvaW4uCisJ ICovCisJbGVuZ3RoID0gbGlzdF9sZW5ndGgodGFyZ2V0LT5jaGlsZHJlbik7CisJcHJlZml4X3Rh cmdldCA9IHBhbGxvYzBfb2JqZWN0KHBncGFfYWR2aWNlX3RhcmdldCk7CisJcHJlZml4X3Rhcmdl dC0+dHR5cGUgPSBQR1BBX1RBUkdFVF9PUkRFUkVEX0xJU1Q7CisJZm9yIChvdXRlcl9sZW5ndGgg PSAxOyBvdXRlcl9sZW5ndGggPD0gbGVuZ3RoOyArK291dGVyX2xlbmd0aCkKKwl7CisJCXBncGFf aXRtX3R5cGUgaXRtOworCisJCS8qIEF2b2lkIGxlYWtpbmcgbWVtb3J5IGluIGV2ZXJ5IGxvb3Ag aXRlcmF0aW9uLiAqLworCQlpZiAocHJlZml4X3RhcmdldC0+Y2hpbGRyZW4gIT0gTlVMTCkKKwkJ CWxpc3RfZnJlZShwcmVmaXhfdGFyZ2V0LT5jaGlsZHJlbik7CisJCXByZWZpeF90YXJnZXQtPmNo aWxkcmVuID0gbGlzdF9jb3B5X2hlYWQodGFyZ2V0LT5jaGlsZHJlbiwKKwkJCQkJCQkJCQkJCSBv dXRlcl9sZW5ndGgpOworCisJCS8qIFNlYXJjaCwgaG9waW5nIHRvIGZpbmQgYW4gZXhhY3QgbWF0 Y2guICovCisJCWl0bSA9IHBncGFfaWRlbnRpZmllcnNfbWF0Y2hfdGFyZ2V0KG91dGVyX2NvdW50 LCByaWRzLCBwcmVmaXhfdGFyZ2V0KTsKKwkJaWYgKGl0bSA9PSBQR1BBX0lUTV9FUVVBTCkKKwkJ CWJyZWFrOworCisJCS8qCisJCSAqIElmIHRoZSBwcmVmaXggb2YgdGhlIGpvaW4gb3JkZXIgbGlz dCB0aGF0IHdlJ3JlIGNvbnNpZGVyaW5nCisJCSAqIGluY2x1ZGVzIHNvbWUgYnV0IG5vdCBhbGwg b2YgdGhlIG91dGVyIHJlbHMsIHdlIGNhbiBtYWtlIHRoZSBwcmVmaXgKKwkJICogbG9uZ2VyIHRv IGZpbmQgYW4gZXhhY3QgbWF0Y2guIEJ1dCBpZiB0aGUgYWR2aWNlIGhhc24ndCBtZW50aW9uZWQK KwkJICogZXZlcnl0aGluZyB0aGF0J3MgcGFydCBvZiBvdXIgb3V0ZXIgcmVsIHlldCwgYnV0IGhh cyBtZW50aW9uZWQKKwkJICogdGhpbmdzIHRoYXQgYXJlIG5vdCwgdGhlbiB0aGlzIGpvaW4gZG9l c24ndCBtYXRjaCB0aGUgam9pbiBvcmRlcgorCQkgKiBsaXN0LgorCQkgKi8KKwkJaWYgKGl0bSAh PSBQR1BBX0lUTV9UQVJHRVRTX0FSRV9TVUJTRVQpCisJCQlyZXR1cm4gUEdQQV9KT19ERU5JRUQ7 CisJfQorCisJLyoKKwkgKiBJZiB0aGUgcHJldmlvdXMgbG9vcCBzdG9wcGVkIGJlZm9yZSB0aGUg cHJlZml4X3RhcmdldCBpbmNsdWRlZCB0aGUKKwkgKiBlbnRpcmUgam9pbiBvcmRlciBsaXN0LCB0 aGVuIHRoZSBuZXh0IG1lbWJlciBvZiB0aGUgam9pbiBvcmRlciBsaXN0CisJICogbXVzdCBleGFj dGx5IG1hdGNoIHRoZSBpbm5lciBzaWRlIG9mIHRoZSBqb2luLgorCSAqCisJICogRXhhbXBsZTog R2l2ZW4gSk9JTl9PUkRFUih0MSB0MiAodDMgdDQgdDUpKSwgaWYgdGhlIG91dGVyIHNpZGUgb2Yg dGhlCisJICogY3VycmVudCBqb2luIGluY2x1ZGVzIG9ubHkgdDEsIHRoZW4gdGhlIGlubmVyIHNp ZGUgbXVzdCBiZSBleGFjdGx5IHQyOworCSAqIGlmIHRoZSBvdXRlciBzaWRlIGluY2x1ZGVzIGJv dGggdDEgYW5kIHQyLCB0aGVuIHRoZSBpbm5lciBzaWRlIG11c3QKKwkgKiBpbmNsdWRlIGV4YWN0 bHkgdDMsIHQ0LCBhbmQgdDUuCisJICovCisJaWYgKG91dGVyX2xlbmd0aCA8IGxlbmd0aCkKKwl7 CisJCXBncGFfYWR2aWNlX3RhcmdldCAqaW5uZXJfdGFyZ2V0OworCQlwZ3BhX2l0bV90eXBlIGl0 bTsKKworCQlpbm5lcl90YXJnZXQgPSBsaXN0X250aCh0YXJnZXQtPmNoaWxkcmVuLCBvdXRlcl9s ZW5ndGgpOworCisJCWl0bSA9IHBncGFfaWRlbnRpZmllcnNfbWF0Y2hfdGFyZ2V0KGlubmVyX2Nv dW50LCByaWRzICsgb3V0ZXJfY291bnQsCisJCQkJCQkJCQkJCWlubmVyX3RhcmdldCk7CisKKwkJ LyoKKwkJICogQmVmb3JlIHJldHVybmluZywgY29uc2lkZXIgd2hldGhlciB3ZSBuZWVkIHRvIG1h cmsgdGhpcyBlbnRyeSBhcworCQkgKiBmdWxseSBtYXRjaGVkLiBJZiB3ZSdyZSBjb25zaWRlcmlu ZyB0aGUgZnVsbCBsaXN0IHJhdGhlciB0aGFuIGEKKwkJICogc3VibGlzdCwgYW5kIGlmIHdlIGZv dW5kIGV2ZXJ5IGl0ZW0gYnV0IG9uZSBvbiB0aGUgb3V0ZXIgc2lkZSBvZgorCQkgKiB0aGUgam9p biBhbmQgdGhlIGxhc3QgaXRlbSBvbiB0aGUgaW5uZXIgc2lkZSBvZiB0aGUgam9pbiwgdGhlbiB0 aGUKKwkJICogYW5zd2VyIGlzIHllcy4KKwkJICovCisJCWlmICghc3VibGlzdCAmJiBvdXRlcl9s ZW5ndGggKyAxID09IGxlbmd0aCAmJiBpdG0gPT0gUEdQQV9JVE1fRVFVQUwpCisJCQllbnRyeS0+ ZmxhZ3MgfD0gUEdQQV9URV9NQVRDSF9GVUxMOworCisJCXJldHVybiAoaXRtID09IFBHUEFfSVRN X0VRVUFMKSA/IFBHUEFfSk9fUEVSTUlUVEVEIDogUEdQQV9KT19ERU5JRUQ7CisJfQorCisJLyoK KwkgKiBJZiB3ZSBnZXQgaGVyZSwgdGhlbiB0aGUgb3V0ZXIgc2lkZSBvZiB0aGUgam9pbiBpbmNs dWRlcyB0aGUgZW50aXJldHkKKwkgKiBvZiB0aGUgam9pbiBvcmRlciBsaXN0LiBJbiB0aGlzIGNh c2UsIHdlIGJlaGF2ZSBkaWZmZXJlbnRseSBkZXBlbmRpbmcKKwkgKiBvbiB3aGV0aGVyIHdlJ3Jl IGxvb2tpbmcgYXQgdGhlIHRvcC1sZXZlbCBqb2luIG9yZGVyIGxpc3Qgb3Igc3VibGlzdC4KKwkg KiBBdCB0aGUgdG9wLWxldmVsLCB3ZSB0cmVhdCB0aGUgc3BlY2lmaWVkIGxpc3QgYXMgbWFuZGF0 aW5nIHRoYXQgdGhlCisJICogYWN0dWFsIGpvaW4gb3JkZXIgaGFzIHRoZSBnaXZlbiBsaXN0IGFz IGEgcHJlZml4LCBidXQgYSBzdWJsaXN0CisJICogcmVxdWlyZXMgYW4gZXhhY3QgbWF0Y2guCisJ ICoKKwkgKiBFeGFtcGxlOiBHaXZlbiBKT0lOX09SREVSKHQxIHQyICh0MyB0NCB0NSkpLCB3ZSBt dXN0IHN0YXJ0IGJ5IGpvaW5pbmcKKwkgKiBhbGwgZml2ZSBvZiB0aG9zZSByZWxhdGlvbnMgYW5k IGluIHRoYXQgc2VxdWVuY2UsIGJ1dCBvbmNlIHRoYXQgaXMKKwkgKiBkb25lLCBpdCdzIE9LIHRv IGpvaW4gYW55IG90aGVyIHJlbHMgdGhhdCBhcmUgcGFydCBvZiB0aGUgam9pbiBwcm9ibGVtLgor CSAqIFRoaXMgYWxsb3dzIGEgdXNlciB0byBzcGVjaWZ5IHRoZSBkcml2aW5nIHRhYmxlIGFuZCBw ZXJoYXBzIHRoZSBmaXJzdAorCSAqIGZldyB0aGluZ3MgdG8gd2hpY2ggaXQgc2hvdWxkIGJlIGpv aW5lZCB3aGlsZSBsZWF2aW5nIHRoZSByZXN0IG9mIHRoZQorCSAqIGpvaW4gb3JkZXIgdXAgdGhl IG9wdGltaXplci4gQnV0IGl0IHNlZW1zIGxpa2UgaXQgd291bGQgYmUgc3VycHJpc2luZywKKwkg KiBnaXZlbiB0aGF0IHNwZWNpZmljYXRpb24sIGlmIHRoZSB1c2VyIGNvdWxkIGFkZCB0NiB0byB0 aGUgKHQzIHQ0IHQ1KQorCSAqIHN1Yi1qb2luLCBzbyB3ZSBkb24ndCBhbGxvdyB0aGF0LiBJZiB3 ZSBkaWQgd2FudCB0byBhbGxvdyBpdCwgdGhlIGxvZ2ljCisJICogZWFybGllciBpbiB0aGlzIGZ1 bmN0aW9uIHdvdWxkIHJlcXVpcmUgc3Vic3RhbnRpYWwgYWRqdXN0bWVudDogd2UgY291bGQKKwkg KiBhbGxvdyB0aGUgdDMtdDQtdDUtdDYgam9pbiB0byBiZSBidWlsdCBoZXJlLCBidXQgdGhlIG5l eHQgc3RlcCBvZgorCSAqIGpvaW5pbmcgdDEtdDIgdG8gdGhlIHJlc3VsdCB3b3VsZCBzdGlsbCBi ZSByZWplY3RlZC4KKwkgKi8KKwlpZiAoIXN1Ymxpc3QpCisJCWVudHJ5LT5mbGFncyB8PSBQR1BB X1RFX01BVENIX0ZVTEw7CisJcmV0dXJuIHN1Ymxpc3QgPyBQR1BBX0pPX0RFTklFRCA6IFBHUEFf Sk9fUEVSTUlUVEVEOworfQorCisvKgorICogRG9lcyBhIGNlcnRhaW4gaXRlbSBvZiBqb2luIG1l dGhvZCBhZHZpY2UgcGVybWl0IGEgY2VydGFpbiBqb2luPworICoKKyAqIEFkdmljZSBzdWNoIGFz IEhBU0hfSk9JTigoeCB5KSkgbWVhbnMgdGhhdCB0aGVyZSBzaG91bGQgYmUgYSBoYXNoIGpvaW4g d2l0aAorICogZXhhY3RseSB4IGFuZCB5IG9uIHRoZSBpbm5lciBzaWRlLiBPYnZpb3VzbHksIHRo aXMgbWVhbnMgdGhhdCBpZiB3ZSBhcmUKKyAqIGNvbnNpZGVyaW5nIGEgam9pbiB3aXRoIGV4YWN0 bHkgeCBhbmQgeSBvbiB0aGUgaW5uZXIgc2lkZSwgd2Ugc2hvdWxkIGVuZm9yY2UKKyAqIHRoZSB1 c2Ugb2YgYSBoYXNoIGpvaW4uIEhvd2V2ZXIsIGl0IGFsc28gbWVhbnMgdGhhdCB3ZSBtdXN0IHJl amVjdCBzb21lCisgKiBpbmNvbXBhdGlibGUgam9pbiBvcmRlcnMgZW50aXJlbHkuICBGb3IgZXhh bXBsZSwgYSBqb2luIHdpdGggZXhhY3RseSB4CisgKiBhbmQgeSBvbiB0aGUgb3V0ZXIgc2lkZSBz aG91bGRuJ3QgYmUgYWxsb3dlZCwgYmVjYXVzZSBzdWNoIHBhdGhzIG1pZ2h0IHdpbgorICogb3Zl ciB0aGUgYWR2aWNlLWRyaXZlbiBwYXRoIG9uIGNvc3QuCisgKgorICogVG8gYWNjb21tb2RhdGUg dGhlc2UgcmVxdWlyZW1lbnRzLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBpZiB0aGUgam9p bgorICogc2hvdWxkIGJlIGFsbG93ZWQgYW5kIGZhbHNlIGlmIGl0IHNob3VsZCBub3QuIEZ1cnRo ZXJtb3JlLCAqcmVzdHJpY3RfbWV0aG9kCisgKiBpcyBzZXQgdG8gdHJ1ZSBpZiB0aGUgam9pbiBt ZXRob2Qgc2hvdWxkIGJlIGVuZm9yY2VkIGFuZCBmYWxzZSBpZiBub3QuCisgKi8KK3N0YXRpYyBi b29sCitwZ3BhX2pvaW5fbWV0aG9kX3Blcm1pdHNfam9pbihpbnQgb3V0ZXJfY291bnQsIGludCBp bm5lcl9jb3VudCwKKwkJCQkJCQkgIHBncGFfaWRlbnRpZmllciAqcmlkcywKKwkJCQkJCQkgIHBn cGFfdHJvdmVfZW50cnkgKmVudHJ5LAorCQkJCQkJCSAgYm9vbCAqcmVzdHJpY3RfbWV0aG9kKQor eworCXBncGFfYWR2aWNlX3RhcmdldCAqdGFyZ2V0ID0gZW50cnktPnRhcmdldDsKKwlwZ3BhX2l0 bV90eXBlIGlubmVyX2l0bTsKKwlwZ3BhX2l0bV90eXBlIG91dGVyX2l0bTsKKwlwZ3BhX2l0bV90 eXBlIGpvaW5faXRtOworCisJLyogV2UgZGVmaW5pdGVseSBoYXZlIGF0IGxlYXN0IGEgcGFydGlh bCBtYXRjaCBmb3IgdGhpcyB0cm92ZSBlbnRyeS4gKi8KKwllbnRyeS0+ZmxhZ3MgfD0gUEdQQV9U RV9NQVRDSF9QQVJUSUFMOworCisJKnJlc3RyaWN0X21ldGhvZCA9IGZhbHNlOworCisJLyoKKwkg KiBJZiBvdXIgaW5uZXIgcmVsIG1lbnRpb25zIGV4YWN0bHkgdGhlIHNhbWUgcmVsYXRpb25zIGFz IHRoZSBhZHZpY2UKKwkgKiB0YXJnZXQsIGFsbG93IHRoZSBqb2luIGFuZCBlbmZvcmNlIHRoZSBq b2luIG1ldGhvZCByZXN0cmljdGlvbi4KKwkgKgorCSAqIElmIG91ciBpbm5lciByZWwgbWVudGlv bnMgYSBzdXBlcnNldCBvZiB0aGUgdGFyZ2V0IHJlbGF0aW9ucywgYWxsb3cgdGhlCisJICogam9p bi4gVGhlIGpvaW4gd2UgY2FyZSBhYm91dCBoYXMgYWxyZWFkeSB0YWtlbiBwbGFjZSwgYW5kIHRo aXMgYWR2aWNlCisJICogaW1wb3NlcyBubyBmdXJ0aGVyIHJlc3RyaWN0aW9ucy4KKwkgKi8KKwlp bm5lcl9pdG0gPSBwZ3BhX2lkZW50aWZpZXJzX21hdGNoX3RhcmdldChpbm5lcl9jb3VudCwKKwkJ CQkJCQkJCQkJICByaWRzICsgb3V0ZXJfY291bnQsCisJCQkJCQkJCQkJCSAgdGFyZ2V0KTsKKwlp ZiAoaW5uZXJfaXRtID09IFBHUEFfSVRNX0VRVUFMKQorCXsKKwkJZW50cnktPmZsYWdzIHw9IFBH UEFfVEVfTUFUQ0hfRlVMTDsKKwkJKnJlc3RyaWN0X21ldGhvZCA9IHRydWU7CisJCXJldHVybiB0 cnVlOworCX0KKwllbHNlIGlmIChpbm5lcl9pdG0gPT0gUEdQQV9JVE1fVEFSR0VUU19BUkVfU1VC U0VUKQorCQlyZXR1cm4gdHJ1ZTsKKworCS8qCisJICogSWYgb3VyIG91dGVyIHJlbCBtZW50aW9u cyBhIHN1cGVyc2V0IG9mIHRoZSByZWxhdGlvbnMgaW4gdGhlIGFkdmljZQorCSAqIHRhcmdldCwg bm8gcmVzdHJpY3Rpb25zIGFwcGx5LCBiZWNhdXNlIHRoZSBqb2luIHdlIGNhcmUgYWJvdXQgaGFz CisJICogYWxyZWFkeSB0YWtlbiBwbGFjZS4KKwkgKgorCSAqIE9uIHRoZSBvdGhlciBoYW5kLCBp ZiBvdXIgb3V0ZXIgcmVsIG1lbnRpb25zIGV4YWN0bHkgdGhlIHJlbGF0aW9ucworCSAqIG1lbnRp b25lZCBpbiB0aGUgYWR2aWNlIHRhcmdldCwgdGhlIHBsYW5uZXIgaXMgdHJ5aW5nIHRvIHJldmVy c2UgdGhlCisJICogc2lkZXMgb2YgdGhlIGpvaW4gYXMgY29tcGFyZWQgd2l0aCBvdXIgZGVzaXJl ZCBvdXRjb21lLiBSZWplY3QgdGhhdC4KKwkgKi8KKwlvdXRlcl9pdG0gPSBwZ3BhX2lkZW50aWZp ZXJzX21hdGNoX3RhcmdldChvdXRlcl9jb3VudCwKKwkJCQkJCQkJCQkJICByaWRzLCB0YXJnZXQp OworCWlmIChvdXRlcl9pdG0gPT0gUEdQQV9JVE1fVEFSR0VUU19BUkVfU1VCU0VUKQorCQlyZXR1 cm4gdHJ1ZTsKKwllbHNlIGlmIChvdXRlcl9pdG0gPT0gUEdQQV9JVE1fRVFVQUwpCisJCXJldHVy biBmYWxzZTsKKworCS8qCisJICogSWYgdGhlIGFkdmljZSB0YXJnZXQgbWVudGlvbnMgb25seSBh IHNpbmdsZSByZWxhdGlvbiwgdGhlIHRlc3QgYmVsb3cKKwkgKiBjYW5ub3QgZXZlciBwYXNzLCBz byBzYXZlIHNvbWUgd29yayBieSBleGl0aW5nIG5vdy4KKwkgKi8KKwlpZiAodGFyZ2V0LT50dHlw ZSA9PSBQR1BBX1RBUkdFVF9JREVOVElGSUVSKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKgorCSAq IElmIGV2ZXJ5dGhpbmcgaW4gdGhlIGpvaW5yZWwgYXBwZWFycyBpbiB0aGUgYWR2aWNlIHRhcmdl dCwgd2UncmUgYmVsb3cKKwkgKiB0aGUgbGV2ZWwgb2YgdGhlIGpvaW4gd2Ugd2FudCB0byBjb250 cm9sLgorCSAqCisJICogRm9yIGV4YW1wbGUsIEhBU0hfSk9JTigoeCB5KSkgZG9lc24ndCByZXN0 cmljdCBob3cgeCBhbmQgeSBjYW4gYmUKKwkgKiBqb2luZWQuCisJICoKKwkgKiBUaGlzIGxvb2t1 cCBzaG91bGRuJ3QgcmV0dXJuIFBHUEFfSVRNX0RJU0pPSU5ULCBiZWNhdXNlIGFueSBzdWNoIGFk dmljZQorCSAqIHNob3VsZCBub3QgaGF2ZSBiZWVuIHJldHVybmVkIGZyb20gdGhlIHRyb3ZlIGlu IHRoZSBmaXJzdCBwbGFjZS4KKwkgKi8KKwlqb2luX2l0bSA9IHBncGFfaWRlbnRpZmllcnNfbWF0 Y2hfdGFyZ2V0KG91dGVyX2NvdW50ICsgaW5uZXJfY291bnQsCisJCQkJCQkJCQkJCSByaWRzLCB0 YXJnZXQpOworCUFzc2VydChqb2luX2l0bSAhPSBQR1BBX0lUTV9ESVNKT0lOVCk7CisJaWYgKGpv aW5faXRtID09IFBHUEFfSVRNX0tFWVNfQVJFX1NVQlNFVCB8fAorCQlqb2luX2l0bSA9PSBQR1BB X0lUTV9FUVVBTCkKKwkJcmV0dXJuIHRydWU7CisKKwkvKgorCSAqIFdlJ3ZlIGFscmVhZHkgcGVy bWl0dGVkIGFsbCBhbGxvd2FibGUgY2FzZXMsIHNvIHJlamVjdCB0aGlzLgorCSAqCisJICogSWYg d2UgcmVhY2ggdGhpcyBwb2ludCwgdGhlbiB0aGUgYWR2aWNlIG92ZXJsYXBzIHdpdGggdGhpcyBq b2luIGJ1dAorCSAqIGlzbid0IGVudGlyZWx5IGNvbnRhaW5lZCB3aXRoaW4gZWl0aGVyIHNpZGUs IGFuZCB0aGVyZSdzIGFsc28gYXQgbGVhc3QKKwkgKiBvbmUgcmVsYXRpb24gcHJlc2VudCBpbiB0 aGUgam9pbiB0aGF0IGlzbid0IG1lbnRpb25lZCBieSB0aGUgYWR2aWNlLgorCSAqCisJICogRm9y IGluc3RhbmNlLCBpbiB0aGUgSEFTSF9KT0lOKCh4IHkpKSBleGFtcGxlLCB3ZSB3b3VsZCByZWFj aCBoZXJlIGlmIHgKKwkgKiB3ZXJlIG9uIG9uZSBzaWRlIG9mIHRoZSBqb2luLCB5IG9uIHRoZSBv dGhlciwgYW5kIGF0IGxlYXN0IG9uZSBvZiB0aGUKKwkgKiB0d28gc2lkZXMgYWxzbyBpbmNsdWRl ZCBzb21lIG90aGVyIHJlbGF0aW9uLCBzYXkgdC4gSW4gdGhhdCBjYXNlLAorCSAqIGFjY2VwdGlu ZyB0aGlzIGpvaW4gd291bGQgYWxsb3cgdGhlICh4IHkgdCkgam9pbnJlbCB0byBjb250YWluCisJ ICogbm9uLWRpc2FibGVkIHBhdGhzIHRoYXQgZG8gbm90IHB1dCAoeCB5KSBvbiB0aGUgaW5uZXIg c2lkZSBvZiBhIGhhc2gKKwkgKiBqb2luOyB3ZSBjb3VsZCBpbnN0ZWFkIGVuZCB1cCB3aXRoIHNv bWV0aGluZyBsaWtlICh4IEpPSU4gdCkgSk9JTiB5LgorCSAqLworCXJldHVybiBmYWxzZTsKK30K KworLyoKKyAqIERvZXMgYWR2aWNlIGNvbmNlcm5pbmcgYW4gb3BhcXVlIGpvaW4gcGVybWl0IGEg Y2VydGFpbiBqb2luPworICoKKyAqIEJ5IGFuIG9wYXF1ZSBqb2luLCB3ZSBtZWFuIG9uZSB3aGVy ZSB0aGUgZXhhY3QgbWVjaGFuaXNtIGJ5IHdoaWNoIHRoZQorICogam9pbiBpcyBwZXJmb3JtZWQg aXMgbm90IHZpc2libGUgdG8gUG9zdGdyZVNRTC4gQ3VycmVudGx5IHRoaXMgaXMgdGhlCisgKiBj YXNlIG9ubHkgZm9yIGZvcmVpZ24gam9pbnM6IEZPUkVJR05fSk9JTigoeCB5IHopKSBtZWFucyB0 aGF0IHgsIHksIGFuZAorICogeiBhcmUgam9pbmVkIG9uIHRoZSByZW1vdGUgc2lkZSwgYnV0IHdl IGtub3cgbm90aGluZyBhYm91dCB0aGUgam9pbiBvcmRlcgorICogb3Igam9pbiBtZXRob2RzIHVz ZWQgb3ZlciB0aGVyZS4KKyAqCisgKiBUaGUgbG9naWMgaGVyZSBuZWVkcyB0byBkaWZmZXIgZnJv bSBwZ3BhX2pvaW5fbWV0aG9kX3Blcm1pdHNfam9pbiBiZWNhdXNlLAorICogZm9yIG90aGVyIGpv aW4gdHlwZXMsIHRoZSBhZHZpY2UgdGFyZ2V0IGlzIHRoZSBzZXQgb2YgaW5uZXIgcmVsczsgaGVy ZSwgaXQKKyAqIGluY2x1ZGVzIGJvdGggaW5uZXIgYW5kIG91dGVyIHJlbHMuCisgKi8KK3N0YXRp YyBib29sCitwZ3BhX29wYXF1ZV9qb2luX3Blcm1pdHNfam9pbihpbnQgb3V0ZXJfY291bnQsIGlu dCBpbm5lcl9jb3VudCwKKwkJCQkJCQkgIHBncGFfaWRlbnRpZmllciAqcmlkcywKKwkJCQkJCQkg IHBncGFfdHJvdmVfZW50cnkgKmVudHJ5LAorCQkJCQkJCSAgYm9vbCAqcmVzdHJpY3RfbWV0aG9k KQoreworCXBncGFfYWR2aWNlX3RhcmdldCAqdGFyZ2V0ID0gZW50cnktPnRhcmdldDsKKwlwZ3Bh X2l0bV90eXBlIGpvaW5faXRtOworCisJLyogV2UgZGVmaW5pdGVseSBoYXZlIGF0IGxlYXN0IGEg cGFydGlhbCBtYXRjaCBmb3IgdGhpcyB0cm92ZSBlbnRyeS4gKi8KKwllbnRyeS0+ZmxhZ3MgfD0g UEdQQV9URV9NQVRDSF9QQVJUSUFMOworCisJKnJlc3RyaWN0X21ldGhvZCA9IGZhbHNlOworCisJ am9pbl9pdG0gPSBwZ3BhX2lkZW50aWZpZXJzX21hdGNoX3RhcmdldChvdXRlcl9jb3VudCArIGlu bmVyX2NvdW50LAorCQkJCQkJCQkJCQkgcmlkcywgdGFyZ2V0KTsKKwlpZiAoam9pbl9pdG0gPT0g UEdQQV9JVE1fRVFVQUwpCisJeworCQkvKgorCQkgKiBXZSBoYXZlIGFuIGV4YWN0IG1hdGNoLCBh bmQgc2hvdWxkIHRoZXJlZm9yZSBhbGxvdyB0aGUgam9pbiBhbmQKKwkJICogZW5mb3JjZSB0aGUg dXNlIG9mIHRoZSByZWxldmFudCBvcGFxdWUgam9pbiBtZXRob2QuCisJCSAqLworCQllbnRyeS0+ ZmxhZ3MgfD0gUEdQQV9URV9NQVRDSF9GVUxMOworCQkqcmVzdHJpY3RfbWV0aG9kID0gdHJ1ZTsK KwkJcmV0dXJuIHRydWU7CisJfQorCisJaWYgKGpvaW5faXRtID09IFBHUEFfSVRNX0tFWVNfQVJF X1NVQlNFVCB8fAorCQlqb2luX2l0bSA9PSBQR1BBX0lUTV9UQVJHRVRTX0FSRV9TVUJTRVQpCisJ eworCQkvKgorCQkgKiBJZiBqb2luX2l0bSA9PSBQR1BBX0lUTV9UQVJHRVRTX0FSRV9TVUJTRVQs IHRoZW4gdGhlIGpvaW4gd2UgY2FyZQorCQkgKiBhYm91dCBoYXMgYWxyZWFkeSB0YWtlbiBwbGFj ZSBhbmQgbm8gZnVydGhlciByZXN0cmljdGlvbnMgYXBwbHkuCisJCSAqCisJCSAqIElmIGpvaW5f aXRtID09IFBHUEFfSVRNX0tFWVNfQVJFX1NVQlNFVCwgd2UncmUgc3RpbGwgYnVpbGRpbmcgdXAg dG8KKwkJICogdGhlIGpvaW4gd2UgY2FyZSBhYm91dCBhbmQgaGF2ZSBub3QgaW50cm9kdWNlZCBh bnkgZXh0cmFuZW91cworCQkgKiByZWxhdGlvbnMgbm90IG5hbWVkIGluIHRoZSBhZHZpY2UuIE5v dGUgdGhhdCBGb3JlaWduU2NhbiBwYXRocyBmb3IKKwkJICogam9pbnMgYXJlIGJ1aWx0IHVwIGZy b20gRm9yZWlnblNjYW4gcGF0aHMgZnJvbSB1bmRlcmx5aW5nIGpvaW5zIGFuZAorCQkgKiBzY2Fu cywgc28gd2UgbXVzdCBub3QgZGlzYWJsZSB0aGlzIGpvaW4gd2hlbiBjb25zaWRlcmluZyBhIHN1 YnNldAorCQkgKiBvZiB0aGUgcmVsYXRpb25zIHdlIHVsdGltYXRlbHkgd2FudC4KKwkJICovCisJ CXJldHVybiB0cnVlOworCX0KKworCS8qCisJICogVGhlIGFkdmljZSBvdmVybGFwcyB0aGUgam9p biwgYnV0IGF0IGxlYXN0IG9uZSByZWxhdGlvbiBpcyBwcmVzZW50IGluCisJICogdGhlIGpvaW4g dGhhdCBpc24ndCBtZW50aW9uZWQgYnkgdGhlIGFkdmljZS4gV2Ugd2FudCB0byBkaXNhYmxlIHN1 Y2gKKwkgKiBwYXRocyBzbyB0aGF0IHdlIGFjdHVhbGx5IHB1c2ggZG93biB0aGUgam9pbiBhcyBp bnRlbmRlZC4KKwkgKi8KKwlyZXR1cm4gZmFsc2U7Cit9CisKKy8qCisgKiBEb2VzIGFkdmljZSBj b25jZXJuaW5nIGEgc2VtaWpvaW4gcGVybWl0IGEgY2VydGFpbiBqb2luPworICoKKyAqIFVubGlr ZSBqb2luIG1ldGhvZCBhZHZpY2UsIHdoaWNoIGxpc3RzIHRoZSByZWxzIG9uIHRoZSBpbm5lciBz aWRlIG9mIHRoZQorICogam9pbiwgc2VtaWpvaW4gdW5pcXVlbmVzcyBhZHZpY2UgbGlzdHMgdGhl IHJlbHMgb24gdGhlIG51bGxhYmxlIHNpZGUgb2YgdGhlCisgKiBqb2luLiBUaG9zZSBjYW4gYmUg dGhlIHNhbWUsIGlmIHRoZSBqb2luIHR5cGUgaXMgSk9JTl9VTklRVUVfSU5ORVIgb3IKKyAqIEpP SU5fU0VNSSwgb3IgdGhleSBjYW4gYmUgZGlmZmVyZW50LCBpbiBjYXNlIG9mIEpPSU5fVU5JUVVF X09VVEVSIG9yCisgKiBKT0lOX1JJR0hUX1NFTUkuCisgKgorICogV2UgZG9uJ3Qga25vdyBoZXJl IHdoZXRoZXIgdGhlIGNhbGxlciBzcGVjaWZpZWQgU0VNSUpPSU5fVU5JUVVFIG9yCisgKiBTRU1J Sk9JTl9OT05fVU5JUVVFLiBUaGUgY2FsbGVyIHNob3VsZCBjaGVjayB0aGUgam9pbiB0eXBlIGFn YWluc3QgdGhlCisgKiBhZHZpY2UgdHlwZSBpZiBhbmQgb25seSBpZiB3ZSBzZXQgKnJlc3RyaWN0 X21ldGhvZCB0byB0cnVlLgorICovCitzdGF0aWMgYm9vbAorcGdwYV9zZW1pam9pbl9wZXJtaXRz X2pvaW4oaW50IG91dGVyX2NvdW50LCBpbnQgaW5uZXJfY291bnQsCisJCQkJCQkgICBwZ3BhX2lk ZW50aWZpZXIgKnJpZHMsCisJCQkJCQkgICBwZ3BhX3Ryb3ZlX2VudHJ5ICplbnRyeSwKKwkJCQkJ CSAgIGJvb2wgb3V0ZXJfaXNfbnVsbGFibGUsCisJCQkJCQkgICBib29sICpyZXN0cmljdF9tZXRo b2QpCit7CisJcGdwYV9hZHZpY2VfdGFyZ2V0ICp0YXJnZXQgPSBlbnRyeS0+dGFyZ2V0OworCXBn cGFfaXRtX3R5cGUgam9pbl9pdG07CisJcGdwYV9pdG1fdHlwZSBpbm5lcl9pdG07CisJcGdwYV9p dG1fdHlwZSBvdXRlcl9pdG07CisKKwkqcmVzdHJpY3RfbWV0aG9kID0gZmFsc2U7CisKKwkvKiBX ZSBkZWZpbml0ZWx5IGhhdmUgYXQgbGVhc3QgYSBwYXJ0aWFsIG1hdGNoIGZvciB0aGlzIHRyb3Zl IGVudHJ5LiAqLworCWVudHJ5LT5mbGFncyB8PSBQR1BBX1RFX01BVENIX1BBUlRJQUw7CisKKwkv KgorCSAqIElmIG91dGVyIHJlbCBpcyB0aGUgbnVsbGFibGUgc2lkZSBhbmQgY29udGFpbnMgZXhh Y3RseSB0aGUgc2FtZQorCSAqIHJlbGF0aW9ucyBhcyB0aGUgYWR2aWNlIHRhcmdldCwgdGhlbiB0 aGUgam9pbiBvcmRlciBpcyBhbGxvd2FibGUsIGJ1dAorCSAqIHRoZSBjYWxsZXIgbXVzdCBjaGVj ayB3aGV0aGVyIHRoZSBhZHZpY2UgdGFnIChlaXRoZXIgU0VNSUpPSU5fVU5JUVVFIG9yCisJICog U0VNSUpPSU5fTk9OX1VOSVFVRSkgbWF0Y2hlcyB0aGUgam9pbiB0eXBlLgorCSAqCisJICogSWYg dGhlIG91dGVyIHJlbCBpcyBhIHN1cGVyc2V0IG9mIHRoZSB0YXJnZXQgcmVsYXRpb25zLCB0aGUg am9pbiB3ZQorCSAqIGNhcmUgYWJvdXQgaGFzIGFscmVhZHkgdGFrZW4gcGxhY2UsIHNvIHdlIHNo b3VsZCBpbXBvc2Ugbm8gZnVydGhlcgorCSAqIHJlc3RyaWN0aW9ucy4KKwkgKi8KKwlvdXRlcl9p dG0gPSBwZ3BhX2lkZW50aWZpZXJzX21hdGNoX3RhcmdldChvdXRlcl9jb3VudCwKKwkJCQkJCQkJ CQkJICByaWRzLCB0YXJnZXQpOworCWlmIChvdXRlcl9pdG0gPT0gUEdQQV9JVE1fRVFVQUwpCisJ eworCQllbnRyeS0+ZmxhZ3MgfD0gUEdQQV9URV9NQVRDSF9GVUxMOworCQlpZiAob3V0ZXJfaXNf bnVsbGFibGUpCisJCXsKKwkJCSpyZXN0cmljdF9tZXRob2QgPSB0cnVlOworCQkJcmV0dXJuIHRy dWU7CisJCX0KKwl9CisJZWxzZSBpZiAob3V0ZXJfaXRtID09IFBHUEFfSVRNX1RBUkdFVFNfQVJF X1NVQlNFVCkKKwkJcmV0dXJuIHRydWU7CisKKwkvKiBBcyBhYm92ZSwgYnV0IGZvciB0aGUgaW5u ZXIgcmVsLiAqLworCWlubmVyX2l0bSA9IHBncGFfaWRlbnRpZmllcnNfbWF0Y2hfdGFyZ2V0KGlu bmVyX2NvdW50LAorCQkJCQkJCQkJCQkgIHJpZHMgKyBvdXRlcl9jb3VudCwKKwkJCQkJCQkJCQkJ ICB0YXJnZXQpOworCWlmIChpbm5lcl9pdG0gPT0gUEdQQV9JVE1fRVFVQUwpCisJeworCQllbnRy eS0+ZmxhZ3MgfD0gUEdQQV9URV9NQVRDSF9GVUxMOworCQlpZiAoIW91dGVyX2lzX251bGxhYmxl KQorCQl7CisJCQkqcmVzdHJpY3RfbWV0aG9kID0gdHJ1ZTsKKwkJCXJldHVybiB0cnVlOworCQl9 CisJfQorCWVsc2UgaWYgKGlubmVyX2l0bSA9PSBQR1BBX0lUTV9UQVJHRVRTX0FSRV9TVUJTRVQp CisJCXJldHVybiB0cnVlOworCisJLyoKKwkgKiBJZiBldmVyeXRoaW5nIGluIHRoZSBqb2lucmVs IGFwcGVhcnMgaW4gdGhlIGFkdmljZSB0YXJnZXQsIHdlJ3JlIGJlbG93CisJICogdGhlIGxldmVs IG9mIHRoZSBqb2luIHdlIHdhbnQgdG8gY29udHJvbC4KKwkgKi8KKwlqb2luX2l0bSA9IHBncGFf aWRlbnRpZmllcnNfbWF0Y2hfdGFyZ2V0KG91dGVyX2NvdW50ICsgaW5uZXJfY291bnQsCisJCQkJ CQkJCQkJCSByaWRzLCB0YXJnZXQpOworCUFzc2VydChqb2luX2l0bSAhPSBQR1BBX0lUTV9ESVNK T0lOVCk7CisJaWYgKGpvaW5faXRtID09IFBHUEFfSVRNX0tFWVNfQVJFX1NVQlNFVCB8fAorCQlq b2luX2l0bSA9PSBQR1BBX0lUTV9FUVVBTCkKKwkJcmV0dXJuIHRydWU7CisKKwkvKgorCSAqIFdl J3ZlIHRlc3RlZCBmb3IgYWxsIGFsbG93YWJsZSBwb3NzaWJpbGl0aWVzLCBhbmQgc28gbXVzdCBy ZWplY3QgdGhpcworCSAqIGpvaW4gb3JkZXIuIFRoaXMgY2FuIGhhcHBlbiBpbiB0d28gd2F5cy4K KwkgKgorCSAqIEZpcnN0LCB3ZSBtaWdodCBiZSBjb25zaWRlcmluZyBhIHNlbWlqb2luIHRoYXQg b3ZlcmxhcHMgaW5jb21wbGV0ZWx5CisJICogd2l0aCBvbmUgb3IgYm90aCBzaWRlcyBvZiB0aGUg am9pbi4gRm9yIGV4YW1wbGUsIGlmIHRoZSB1c2VyIGhhcworCSAqIHNwZWNpZmllZCBTRU1JSk9J Tl9VTklRVUUoKHQxIHQyKSkgb3IgU0VNSUpPSU5fTk9OX1VOSVFVRSgodDEgdDIpKSwgd2UKKwkg KiBzaG91bGQgcmVqZWN0IGEgcHJvcG9zZWQgdDItdDMgam9pbiwgc2luY2UgdGhhdCBjb3VsZCBu b3QgcmVzdWx0IGluIGEKKwkgKiBmaW5hbCBwbGFuIGNvbXBhdGlibGUgd2l0aCB0aGUgYWR2aWNl LgorCSAqCisJICogU2Vjb25kLCB3ZSBtaWdodCBiZSBjb25zaWRlcmluZyBhIHNlbWlqb2luIHdo ZXJlIHRoZSBhZHZpY2UgdGFyZ2V0CisJICogcGVyZmVjdGx5IG1hdGNoZXMgb25lIHNpZGUgb2Yg dGhlIGpvaW4sIGJ1dCBpdCdzIHRoZSB3cm9uZyBvbmUuIEZvcgorCSAqIGV4YW1wbGUsIGluIHRo ZSBleGFtcGxlIGFib3ZlLCB3ZSBtaWdodCBzZWUgYSAzLXdheSBqb2luIGJldHdlZW4gdDEsCisJ ICogdDIsIGFuZCB0Mywgd2l0aCAodDEgdDIpIG9uIHRoZSBub24tbnVsbGFibGUgc2lkZS4gVGhh dCwgdG9vLCB3b3VsZCBiZQorCSAqIGluY29tcGF0aWJsZSB3aXRoIHRoZSBhZHZpY2UuCisJICov CisJcmV0dXJuIGZhbHNlOworfQorCisvKgorICogQXBwbHkgc2NhbiBhZHZpY2UgdG8gYSBSZWxP cHRJbmZvLgorICovCitzdGF0aWMgdm9pZAorcGdwYV9wbGFubmVyX2FwcGx5X3NjYW5fYWR2aWNl KFJlbE9wdEluZm8gKnJlbCwKKwkJCQkJCQkgICBwZ3BhX3Ryb3ZlX2VudHJ5ICpzY2FuX2VudHJp ZXMsCisJCQkJCQkJICAgQml0bWFwc2V0ICpzY2FuX2luZGV4ZXMsCisJCQkJCQkJICAgcGdwYV90 cm92ZV9lbnRyeSAqcmVsX2VudHJpZXMsCisJCQkJCQkJICAgQml0bWFwc2V0ICpyZWxfaW5kZXhl cykKK3sKKwlib29sCQlnYXRoZXJfY29uZmxpY3QgPSBmYWxzZTsKKwlCaXRtYXBzZXQgICpnYXRo ZXJfcGFydGlhbF9tYXRjaCA9IE5VTEw7CisJQml0bWFwc2V0ICAqZ2F0aGVyX2Z1bGxfbWF0Y2gg PSBOVUxMOworCWludAkJCWkgPSAtMTsKKwlwZ3BhX3Ryb3ZlX2VudHJ5ICpzY2FuX2VudHJ5ID0g TlVMTDsKKwlpbnQJCQlmbGFnczsKKwlib29sCQlzY2FuX3R5cGVfY29uZmxpY3QgPSBmYWxzZTsK KwlCaXRtYXBzZXQgICpzY2FuX3R5cGVfaW5kZXhlcyA9IE5VTEw7CisJQml0bWFwc2V0ICAqc2Nh bl90eXBlX3JlbF9pbmRleGVzID0gTlVMTDsKKwl1aW50NjQJCWdhdGhlcl9tYXNrID0gMDsKKwl1 aW50NjQJCXNjYW5fdHlwZSA9IDA7CisKKwkvKiBTY3J1dGluaXplIGF2YWlsYWJsZSBzY2FuIGFk dmljZS4gKi8KKwl3aGlsZSAoKGkgPSBibXNfbmV4dF9tZW1iZXIoc2Nhbl9pbmRleGVzLCBpKSkg Pj0gMCkKKwl7CisJCXBncGFfdHJvdmVfZW50cnkgKm15X2VudHJ5ID0gJnNjYW5fZW50cmllc1tp XTsKKwkJdWludDY0CQlteV9zY2FuX3R5cGUgPSAwOworCisJCS8qIFRyYW5zbGF0ZSBvdXIgYWR2 aWNlIHRhZ3MgdG8gYSBzY2FuIHN0cmF0ZWd5IGFkdmljZSB2YWx1ZS4gKi8KKwkJaWYgKG15X2Vu dHJ5LT50YWcgPT0gUEdQQV9UQUdfQklUTUFQX0hFQVBfU0NBTikKKwkJeworCQkJLyoKKwkJCSAq IEN1cnJlbnRseSwgUEdTX0NPTlNJREVSX0lOREVYT05MWSBjYW4gc3VwcHJlc3MgQml0bWFwIEhl YXAKKwkJCSAqIFNjYW5zLCBzbyBkb24ndCBjbGVhciBpdCB3aGVuIHN1Y2ggYSBzY2FuIGlzIHJl cXVlc3RlZC4gVGhpcworCQkJICogaGFwcGVucyBiZWNhdXNlIGJ1aWxkX2luZGV4X3NjYW4oKSB0 aGlua3MgdGhhdCB0aGUgcG9zc2liaWxpdHkKKwkJCSAqIG9mIGFuIGluZGV4LW9ubHkgc2NhbiBp cyBhIHN1ZmZpY2llbnQgcmVhc29uIHRvIGNvbnNpZGVyIHVzaW5nCisJCQkgKiBhbiBvdGhlcndp c2UtdXNlbGVzcyBpbmRleCwgYW5kIGdldF9pbmRleF9wYXRocygpIHRoaW5rcyB0aGF0CisJCQkg KiB0aGUgc2FtZSBwYXRocyB0aGF0IGFyZSB1c2VmdWwgZm9yIGluZGV4IG9yIGluZGV4LW9ubHkg c2NhbnMKKwkJCSAqIHNob3VsZCBhbHNvIGJlIGNvbnNpZGVyZWQgZm9yIGJpdG1hcCBzY2Fucy4g UGVyaGFwcyB0aGF0IGxvZ2ljCisJCQkgKiBzaG91bGQgYmUgdGlnaHRlbmVkIHVwLCBidXQgdW50 aWwgdGhlbiB3ZSBuZWVkIHRvIGluY2x1ZGUKKwkJCSAqIFBHU19DT05TSURFUl9JTkRFWE9OTFkg aW4gbXlfc2Nhbl90eXBlIGhlcmUuCisJCQkgKi8KKwkJCW15X3NjYW5fdHlwZSA9IFBHU19CSVRN QVBTQ0FOIHwgUEdTX0NPTlNJREVSX0lOREVYT05MWTsKKwkJfQorCQllbHNlIGlmIChteV9lbnRy eS0+dGFnID09IFBHUEFfVEFHX0lOREVYX09OTFlfU0NBTikKKwkJCW15X3NjYW5fdHlwZSA9IFBH U19JTkRFWE9OTFlTQ0FOIHwgUEdTX0NPTlNJREVSX0lOREVYT05MWTsKKwkJZWxzZSBpZiAobXlf ZW50cnktPnRhZyA9PSBQR1BBX1RBR19JTkRFWF9TQ0FOKQorCQkJbXlfc2Nhbl90eXBlID0gUEdT X0lOREVYU0NBTjsKKwkJZWxzZSBpZiAobXlfZW50cnktPnRhZyA9PSBQR1BBX1RBR19TRVFfU0NB TikKKwkJCW15X3NjYW5fdHlwZSA9IFBHU19TRVFTQ0FOOworCQllbHNlIGlmIChteV9lbnRyeS0+ dGFnID09IFBHUEFfVEFHX1RJRF9TQ0FOKQorCQkJbXlfc2Nhbl90eXBlID0gUEdTX1RJRFNDQU47 CisKKwkJLyoKKwkJICogSWYgdGhpcyBpcyB1bmRlcnN0YW5kYWJsZSBzY2FuIGFkdmljZSwgaGFu ZyBvbiB0byB0aGUgZW50cnksIHRoZQorCQkgKiBpbmZlcnJlZCBzY2FuIHR5cGUsIGFuZCB0aGUg aW5kZXggYXQgd2hpY2ggd2UgZm91bmQgaXQuCisJCSAqCisJCSAqIEFsc28gbWFrZSBhIG5vdGUg aWYgd2Ugc2VlIGNvbmZsaWN0aW5nIHNjYW4gdHlwZSBhZHZpY2UuIE5vdGUgdGhhdAorCQkgKiB3 ZSByZWdhcmQgdHdvIGluZGV4IHNwZWNpZmljYXRpb25zIGFzIGNvbmZsaWN0aW5nIHVubGVzcyB0 aGV5IG1hdGNoCisJCSAqIGV4YWN0bHkuIEluIHRoZW9yeSwgcGVyaGFwcyB3ZSBjb3VsZCByZWdh cmQgSU5ERVhfU0NBTihhIGMpIGFuZAorCQkgKiBJTkRFWF9TQ0FOKGEgYi5jKSBhcyBub24tY29u ZmxpY3RpbmcgaWYgaXQgaGFwcGVucyB0aGF0IHRoZSBvbmx5CisJCSAqIGluZGV4IG5hbWVkIGMg aXMgaW4gc2NoZW1hIGIsIGJ1dCBpdCBkb2Vzbid0IHNlZW0gd29ydGggdGhlIGNvZGUuCisJCSAq LworCQlpZiAobXlfc2Nhbl90eXBlICE9IDApCisJCXsKKwkJCWlmIChzY2FuX3R5cGUgIT0gMCAm JiBzY2FuX3R5cGUgIT0gbXlfc2Nhbl90eXBlKQorCQkJCXNjYW5fdHlwZV9jb25mbGljdCA9IHRy dWU7CisJCQlpZiAoIXNjYW5fdHlwZV9jb25mbGljdCAmJiBzY2FuX2VudHJ5ICE9IE5VTEwgJiYK KwkJCQlteV9lbnRyeS0+dGFyZ2V0LT5pdGFyZ2V0ICE9IE5VTEwgJiYKKwkJCQlzY2FuX2VudHJ5 LT50YXJnZXQtPml0YXJnZXQgIT0gTlVMTCAmJgorCQkJCSFwZ3BhX2luZGV4X3RhcmdldHNfZXF1 YWwoc2Nhbl9lbnRyeS0+dGFyZ2V0LT5pdGFyZ2V0LAorCQkJCQkJCQkJCSAgbXlfZW50cnktPnRh cmdldC0+aXRhcmdldCkpCisJCQkJc2Nhbl90eXBlX2NvbmZsaWN0ID0gdHJ1ZTsKKwkJCXNjYW5f ZW50cnkgPSBteV9lbnRyeTsKKwkJCXNjYW5fdHlwZSA9IG15X3NjYW5fdHlwZTsKKwkJCXNjYW5f dHlwZV9pbmRleGVzID0gYm1zX2FkZF9tZW1iZXIoc2Nhbl90eXBlX2luZGV4ZXMsIGkpOworCQl9 CisJfQorCisJLyogU2NydXRpbml6ZSBhdmFpbGFibGUgZ2F0aGVyLXJlbGF0ZWQgYW5kIHBhcnRp dGlvbndpc2UgYWR2aWNlLiAqLworCWkgPSAtMTsKKwl3aGlsZSAoKGkgPSBibXNfbmV4dF9tZW1i ZXIocmVsX2luZGV4ZXMsIGkpKSA+PSAwKQorCXsKKwkJcGdwYV90cm92ZV9lbnRyeSAqbXlfZW50 cnkgPSAmcmVsX2VudHJpZXNbaV07CisJCXVpbnQ2NAkJbXlfZ2F0aGVyX21hc2sgPSAwOworCQli b29sCQlqdXN0X29uZV9yZWw7CisKKwkJanVzdF9vbmVfcmVsID0gbXlfZW50cnktPnRhcmdldC0+ dHR5cGUgPT0gUEdQQV9UQVJHRVRfSURFTlRJRklFUgorCQkJfHwgbGlzdF9sZW5ndGgobXlfZW50 cnktPnRhcmdldC0+Y2hpbGRyZW4pID09IDE7CisKKwkJLyoKKwkJICogUEFSVElUSU9OV0lTRSBi ZWhhdmVzIGxpa2UgYSBzY2FuIHR5cGUsIGV4Y2VwdCB0aGF0IGlmIHRoZXJlJ3MgbW9yZQorCQkg KiB0aGFuIG9uZSByZWxhdGlvbiB0YXJnZXRlZCwgaXQgaGFzIG5vIGVmZmVjdCBhdCB0aGlzIGxl dmVsLgorCQkgKi8KKwkJaWYgKG15X2VudHJ5LT50YWcgPT0gUEdQQV9UQUdfUEFSVElUSU9OV0lT RSkKKwkJeworCQkJaWYgKGp1c3Rfb25lX3JlbCkKKwkJCXsKKwkJCQljb25zdCB1aW50NjQgbXlf c2Nhbl90eXBlID0gUEdTX0FQUEVORCB8IFBHU19NRVJHRV9BUFBFTkQ7CisKKwkJCQlpZiAoc2Nh bl90eXBlICE9IDAgJiYgc2Nhbl90eXBlICE9IG15X3NjYW5fdHlwZSkKKwkJCQkJc2Nhbl90eXBl X2NvbmZsaWN0ID0gdHJ1ZTsKKwkJCQlzY2FuX2VudHJ5ID0gbXlfZW50cnk7CisJCQkJc2Nhbl90 eXBlID0gbXlfc2Nhbl90eXBlOworCQkJCXNjYW5fdHlwZV9yZWxfaW5kZXhlcyA9CisJCQkJCWJt c19hZGRfbWVtYmVyKHNjYW5fdHlwZV9yZWxfaW5kZXhlcywgaSk7CisJCQl9CisJCQljb250aW51 ZTsKKwkJfQorCisJCS8qCisJCSAqIEdBVEhFUiBhbmQgR0FUSEVSX01FUkdFIGFwcGxpZWQgdG8g YSBzaW5nbGUgcmVsIG1lYW4gdGhhdCB3ZSBzaG91bGQKKwkJICogdXNlIHRoZSBjb3JyZXNwb25k aW5nIHN0cmF0ZWd5IGhlcmUsIHdoaWxlIGFwcGx5aW5nIGVpdGhlciB0byBtb3JlCisJCSAqIHRo YW4gb25lIHJlbCBtZWFucyB3ZSBzaG91bGQgbm90IHVzZSB0aG9zZSBzdHJhdGVnaWVzIGhlcmUs IGJ1dAorCQkgKiByYXRoZXIgYXQgdGhlIGxldmVsIG9mIHRoZSBqb2lucmVsIHRoYXQgY29ycmVz cG9uZHMgdG8gd2hhdCB3YXMKKwkJICogc3BlY2lmaWVkLiBOT19HQVRIRVIgY2FuIG9ubHkgYmUg YXBwbGllZCB0byBzaW5nbGUgcmVscy4KKwkJICoKKwkJICogTm90ZSB0aGF0IHNldHRpbmcgUEdT X0NPTlNJREVSX05PTlBBUlRJQUwgaW4gbXlfZ2F0aGVyX21hc2sgaXMKKwkJICogZXF1aXZhbGVu dCB0byBhbGxvd2luZyB0aGUgbm9uLXVzZSBvZiBlaXRoZXIgZm9ybSBvZiBHYXRoZXIgaGVyZS4K KwkJICovCisJCWlmIChteV9lbnRyeS0+dGFnID09IFBHUEFfVEFHX0dBVEhFUiB8fAorCQkJbXlf ZW50cnktPnRhZyA9PSBQR1BBX1RBR19HQVRIRVJfTUVSR0UpCisJCXsKKwkJCWlmICghanVzdF9v bmVfcmVsKQorCQkJCW15X2dhdGhlcl9tYXNrID0gUEdTX0NPTlNJREVSX05PTlBBUlRJQUw7CisJ CQllbHNlIGlmIChteV9lbnRyeS0+dGFnID09IFBHUEFfVEFHX0dBVEhFUikKKwkJCQlteV9nYXRo ZXJfbWFzayA9IFBHU19HQVRIRVI7CisJCQllbHNlCisJCQkJbXlfZ2F0aGVyX21hc2sgPSBQR1Nf R0FUSEVSX01FUkdFOworCQl9CisJCWVsc2UgaWYgKG15X2VudHJ5LT50YWcgPT0gUEdQQV9UQUdf Tk9fR0FUSEVSKQorCQl7CisJCQlBc3NlcnQoanVzdF9vbmVfcmVsKTsKKwkJCW15X2dhdGhlcl9t YXNrID0gUEdTX0NPTlNJREVSX05PTlBBUlRJQUw7CisJCX0KKworCQkvKgorCQkgKiBJZiB3ZSBz ZXQgbXlfZ2F0aGVyX21hc2sgdXAgYWJvdmUsIHRoZW4gd2UgKDEpIG1ha2UgYSBub3RlIGlmIHRo ZQorCQkgKiBhZHZpY2UgY29uZmxpY3RlZCwgKDIpIHJlbWVtYmVyIHRoZSBtYXNrIHZhbHVlLCBh bmQgKDMpIHJlbWVtYmVyCisJCSAqIHdoZXRoZXIgdGhpcyB3YXMgYSBmdWxsIG9yIHBhcnRpYWwg bWF0Y2guCisJCSAqLworCQlpZiAobXlfZ2F0aGVyX21hc2sgIT0gMCkKKwkJeworCQkJaWYgKGdh dGhlcl9tYXNrICE9IDAgJiYgZ2F0aGVyX21hc2sgIT0gbXlfZ2F0aGVyX21hc2spCisJCQkJZ2F0 aGVyX2NvbmZsaWN0ID0gdHJ1ZTsKKwkJCWdhdGhlcl9tYXNrID0gbXlfZ2F0aGVyX21hc2s7CisJ CQlpZiAoanVzdF9vbmVfcmVsKQorCQkJCWdhdGhlcl9mdWxsX21hdGNoID0gYm1zX2FkZF9tZW1i ZXIoZ2F0aGVyX2Z1bGxfbWF0Y2gsIGkpOworCQkJZWxzZQorCQkJCWdhdGhlcl9wYXJ0aWFsX21h dGNoID0gYm1zX2FkZF9tZW1iZXIoZ2F0aGVyX3BhcnRpYWxfbWF0Y2gsIGkpOworCQl9CisJfQor CisJLyogRW5mb3JjZSBjaG9pY2Ugb2YgaW5kZXguICovCisJaWYgKHNjYW5fZW50cnkgIT0gTlVM TCAmJiAhc2Nhbl90eXBlX2NvbmZsaWN0ICYmCisJCShzY2FuX2VudHJ5LT50YWcgPT0gUEdQQV9U QUdfSU5ERVhfU0NBTiB8fAorCQkgc2Nhbl9lbnRyeS0+dGFnID09IFBHUEFfVEFHX0lOREVYX09O TFlfU0NBTikpCisJeworCQlwZ3BhX2luZGV4X3RhcmdldCAqaXRhcmdldCA9IHNjYW5fZW50cnkt PnRhcmdldC0+aXRhcmdldDsKKwkJSW5kZXhPcHRJbmZvICptYXRjaGVkX2luZGV4ID0gTlVMTDsK KworCQlmb3JlYWNoX25vZGUoSW5kZXhPcHRJbmZvLCBpbmRleCwgcmVsLT5pbmRleGxpc3QpCisJ CXsKKwkJCWNoYXIJICAgKnJlbG5hbWUgPSBnZXRfcmVsX25hbWUoaW5kZXgtPmluZGV4b2lkKTsK KwkJCU9pZAkJCW5zcG9pZCA9IGdldF9yZWxfbmFtZXNwYWNlKGluZGV4LT5pbmRleG9pZCk7CisJ CQljaGFyCSAgICpyZWxuYW1lc3BhY2UgPSBnZXRfbmFtZXNwYWNlX25hbWVfb3JfdGVtcChuc3Bv aWQpOworCisJCQlpZiAoc3RyY21wKGl0YXJnZXQtPmluZG5hbWUsIHJlbG5hbWUpID09IDAgJiYK KwkJCQkoaXRhcmdldC0+aW5kbmFtZXNwYWNlID09IE5VTEwgfHwKKwkJCQkgc3RyY21wKGl0YXJn ZXQtPmluZG5hbWVzcGFjZSwgcmVsbmFtZXNwYWNlKSA9PSAwKSkKKwkJCXsKKwkJCQltYXRjaGVk X2luZGV4ID0gaW5kZXg7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlpZiAobWF0Y2hlZF9p bmRleCA9PSBOVUxMKQorCQl7CisJCQkvKiBEb24ndCBmb3JjZSB0aGUgc2NhbiB0eXBlIGlmIHRo ZSBpbmRleCBkb2Vzbid0IGV4aXN0LiAqLworCQkJc2Nhbl90eXBlID0gMDsKKworCQkJLyogTWFy ayBhZHZpY2UgYXMgaW5hcHBsaWNhYmxlLiAqLworCQkJcGdwYV90cm92ZV9zZXRfZmxhZ3Moc2Nh bl9lbnRyaWVzLCBzY2FuX3R5cGVfaW5kZXhlcywKKwkJCQkJCQkJIFBHUEFfVEVfSU5BUFBMSUNB QkxFKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCS8qIERpc2FibGUgZXZlcnkgb3RoZXIgaW5kZXgu ICovCisJCQlmb3JlYWNoX25vZGUoSW5kZXhPcHRJbmZvLCBpbmRleCwgcmVsLT5pbmRleGxpc3Qp CisJCQl7CisJCQkJaWYgKGluZGV4ICE9IG1hdGNoZWRfaW5kZXgpCisJCQkJCWluZGV4LT5kaXNh YmxlZCA9IHRydWU7CisJCQl9CisJCX0KKwl9CisKKwkvKgorCSAqIE1hcmsgYWxsIHRoZSBzY2Fu IG1ldGhvZCBlbnRyaWVzIGFzIGZ1bGx5IG1hdGNoZWQ7IGFuZCBpZiB0aGV5IHNwZWNpZnkKKwkg KiBkaWZmZXJlbnQgdGhpbmdzLCBtYXJrIHRoZW0gYWxsIGFzIGNvbmZsaWN0aW5nLgorCSAqLwor CWZsYWdzID0gUEdQQV9URV9NQVRDSF9QQVJUSUFMIHwgUEdQQV9URV9NQVRDSF9GVUxMOworCWlm IChzY2FuX3R5cGVfY29uZmxpY3QpCisJCWZsYWdzIHw9IFBHUEFfVEVfQ09ORkxJQ1RJTkc7CisJ cGdwYV90cm92ZV9zZXRfZmxhZ3Moc2Nhbl9lbnRyaWVzLCBzY2FuX3R5cGVfaW5kZXhlcywgZmxh Z3MpOworCXBncGFfdHJvdmVfc2V0X2ZsYWdzKHJlbF9lbnRyaWVzLCBzY2FuX3R5cGVfcmVsX2lu ZGV4ZXMsIGZsYWdzKTsKKworCS8qCisJICogTWFyayBldmVyeSBHYXRoZXItcmVsYXRlZCBwaWVj ZSBvZiBhZHZpY2UgYXMgcGFydGlhbGx5IG1hdGNoZWQuIE1hcmsKKwkgKiB0aGUgb25lcyB0aGF0 IGluY2x1ZGVkIHRoaXMgcmVsYXRpb24gYXMgYSB0YXJnZXQgYnkgaXRzZWxmIGFzIGZ1bGx5CisJ ICogbWF0Y2hlZC4gSWYgdGhlcmUgd2FzIGEgY29uZmxpY3QsIG1hcmsgdGhlbSBhbGwgYXMgY29u ZmxpY3RpbmcuCisJICovCisJZmxhZ3MgPSBQR1BBX1RFX01BVENIX1BBUlRJQUw7CisJaWYgKGdh dGhlcl9jb25mbGljdCkKKwkJZmxhZ3MgfD0gUEdQQV9URV9DT05GTElDVElORzsKKwlwZ3BhX3Ry b3ZlX3NldF9mbGFncyhyZWxfZW50cmllcywgZ2F0aGVyX3BhcnRpYWxfbWF0Y2gsIGZsYWdzKTsK KwlmbGFncyB8PSBQR1BBX1RFX01BVENIX0ZVTEw7CisJcGdwYV90cm92ZV9zZXRfZmxhZ3MocmVs X2VudHJpZXMsIGdhdGhlcl9mdWxsX21hdGNoLCBmbGFncyk7CisKKwkvKgorCSAqIEVuZm9yY2Ug cmVzdHJpY3Rpb25zIG9uIHRoZSBzY2FuIHR5cGUgYW5kIHVzZSBvZiBHYXRoZXIvR2F0aGVyIE1l cmdlLgorCSAqIE9ubHkgY2xlYXIgYml0cyBoZXJlLCBzbyB0aGF0IHdlIHN0aWxsIHJlc3BlY3Qg dGhlIGVuYWJsZV8qIEdVQ3MuIERvCisJICogbm90aGluZyBpbiBjYXNlcyB3aGVyZSB0aGUgYWR2 aWNlIG9uIGEgc2luZ2xlIHRvcGljIGNvbmZsaWN0cy4KKwkgKi8KKwlpZiAoc2Nhbl90eXBlICE9 IDAgJiYgIXNjYW5fdHlwZV9jb25mbGljdCkKKwl7CisJCXVpbnQ2NAkJYWxsX3NjYW5fbWFzazsK KworCQlhbGxfc2Nhbl9tYXNrID0gUEdTX1NDQU5fQU5ZIHwgUEdTX0FQUEVORCB8IFBHU19NRVJH RV9BUFBFTkQgfAorCQkJUEdTX0NPTlNJREVSX0lOREVYT05MWTsKKwkJcmVsLT5wZ3NfbWFzayAm PSB+KGFsbF9zY2FuX21hc2sgJiB+c2Nhbl90eXBlKTsKKwl9CisJaWYgKGdhdGhlcl9tYXNrICE9 IDAgJiYgIWdhdGhlcl9jb25mbGljdCkKKwl7CisJCXVpbnQ2NAkJYWxsX2dhdGhlcl9tYXNrOwor CisJCWFsbF9nYXRoZXJfbWFzayA9CisJCQlQR1NfR0FUSEVSIHwgUEdTX0dBVEhFUl9NRVJHRSB8 IFBHU19DT05TSURFUl9OT05QQVJUSUFMOworCQlyZWwtPnBnc19tYXNrICY9IH4oYWxsX2dhdGhl cl9tYXNrICYgfmdhdGhlcl9tYXNrKTsKKwl9Cit9CisKKy8qCisgKiBBZGQgZmVlZGJhY2sgZW50 cmllcyBmb3Igb25lIHRyb3ZlIHNsaWNlIHRvIHRoZSBwcm92aWRlZCBsaXN0IGFuZAorICogcmV0 dXJuIHRoZSByZXN1bHRpbmcgbGlzdC4KKyAqCisgKiBGZWVkYmFjayBlbnRyaWVzIGFyZSBnZW5l cmF0ZWQgZnJvbSB0aGUgdHJvdmUgZW50cnkncyBmbGFncy4gSXQncyBhc3N1bWVkCisgKiB0aGF0 IHRoZSBjYWxsZXIgaGFzIGFscmVhZHkgc2V0IGFsbCByZWxldmFudCBmbGFncyB3aXRoIHRoZSBl eGNlcHRpb24gb2YKKyAqIFBHUEFfVEVfRkFJTEVELiBXZSBzZXQgdGhhdCBmbGFnIGhlcmUgaWYg YXBwcm9wcmlhdGUuCisgKi8KK3N0YXRpYyBMaXN0ICoKK3BncGFfcGxhbm5lcl9hcHBlbmRfZmVl ZGJhY2soTGlzdCAqbGlzdCwgcGdwYV90cm92ZSAqdHJvdmUsCisJCQkJCQkJIHBncGFfdHJvdmVf bG9va3VwX3R5cGUgdHlwZSwKKwkJCQkJCQkgcGdwYV9pZGVudGlmaWVyICpydF9pZGVudGlmaWVy cywKKwkJCQkJCQkgcGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIpCit7CisJcGdwYV90 cm92ZV9lbnRyeSAqZW50cmllczsKKwlpbnQJCQluZW50cmllczsKKworCXBncGFfdHJvdmVfbG9v a3VwX2FsbCh0cm92ZSwgdHlwZSwgJmVudHJpZXMsICZuZW50cmllcyk7CisJZm9yIChpbnQgaSA9 IDA7IGkgPCBuZW50cmllczsgKytpKQorCXsKKwkJcGdwYV90cm92ZV9lbnRyeSAqZW50cnkgPSAm ZW50cmllc1tpXTsKKwkJRGVmRWxlbSAgICAqaXRlbTsKKworCQkvKgorCQkgKiBJZiB0aGlzIGVu dHJ5IHdhcyBmdWxseSBtYXRjaGVkLCBjaGVjayB3aGV0aGVyIGdlbmVyYXRpbmcgYWR2aWNlCisJ CSAqIGZyb20gdGhpcyBwbGFuIHdvdWxkIHByb2R1Y2Ugc3VjaCBhbiBlbnRyeS4gSWYgbm90LCBs YWJlbCB0aGUgZW50cnkKKwkJICogYXMgZmFpbGVkLgorCQkgKi8KKwkJaWYgKChlbnRyeS0+Zmxh Z3MgJiBQR1BBX1RFX01BVENIX0ZVTEwpICE9IDAgJiYKKwkJCSFwZ3BhX3dhbGtlcl93b3VsZF9h ZHZpc2Uod2Fsa2VyLCBydF9pZGVudGlmaWVycywKKwkJCQkJCQkJCSAgZW50cnktPnRhZywgZW50 cnktPnRhcmdldCkpCisJCQllbnRyeS0+ZmxhZ3MgfD0gUEdQQV9URV9GQUlMRUQ7CisKKwkJaXRl bSA9IG1ha2VEZWZFbGVtKHBncGFfY3N0cmluZ190cm92ZV9lbnRyeShlbnRyeSksCisJCQkJCQkg ICAoTm9kZSAqKSBtYWtlSW50ZWdlcihlbnRyeS0+ZmxhZ3MpLCAtMSk7CisJCWxpc3QgPSBsYXBw ZW5kKGxpc3QsIGl0ZW0pOworCX0KKworCXJldHVybiBsaXN0OworfQorCisvKgorICogRW1pdCBh IFdBUk5JTkcgdG8gdGVsbCB0aGUgdXNlciBhYm91dCBhIHByb2JsZW0gd2l0aCB0aGUgc3VwcGxp ZWQgcGxhbgorICogYWR2aWNlLgorICovCitzdGF0aWMgdm9pZAorcGdwYV9wbGFubmVyX2ZlZWRi YWNrX3dhcm5pbmcoTGlzdCAqZmVlZGJhY2spCit7CisJU3RyaW5nSW5mb0RhdGEgZGV0YWlsYnVm OworCVN0cmluZ0luZm9EYXRhIGZsYWdidWY7CisKKwkvKiBRdWljayBleGl0IGlmIHRoZXJlJ3Mg bm8gZmVlZGJhY2suICovCisJaWYgKGZlZWRiYWNrID09IE5JTCkKKwkJcmV0dXJuOworCisJLyog SW5pdGlhbGl6ZSBidWZmZXJzLiAqLworCWluaXRTdHJpbmdJbmZvKCZkZXRhaWxidWYpOworCWlu aXRTdHJpbmdJbmZvKCZmbGFnYnVmKTsKKworCS8qIE1haW4gbG9vcC4gKi8KKwlmb3JlYWNoX25v ZGUoRGVmRWxlbSwgaXRlbSwgZmVlZGJhY2spCisJeworCQlpbnQJCQlmbGFncyA9IGRlZkdldElu dDMyKGl0ZW0pOworCisJCS8qCisJCSAqIERvbid0IGVtaXQgYW55dGhpbmcgaWYgaXQgd2FzIGZ1 bGx5IG1hdGNoZWQgd2l0aCBubyBwcm9ibGVtcyBmb3VuZC4KKwkJICoKKwkJICogTkI6IEZlZWRi YWNrIHNob3VsZCBuZXZlciBiZSBtYXJrZWQgZnVsbHkgbWF0Y2hlZCB3aXRob3V0IGFsc28KKwkJ ICogYmVpbmcgbWFya2VkIHBhcnRpYWxseSBtYXRjaGVkLgorCQkgKi8KKwkJaWYgKGZsYWdzID09 IChQR1BBX1RFX01BVENIX1BBUlRJQUwgfCBQR1BBX1RFX01BVENIX0ZVTEwpKQorCQkJY29udGlu dWU7CisKKwkJLyoKKwkJICogVGVybWluYXRlIGVhY2ggZGV0YWlsIGxpbmUgZXhjZXB0IHRoZSBs YXN0IHdpdGggYSBuZXdsaW5lLiBUaGlzIGlzCisJCSAqIGFsc28gYSBjb252ZW5pZW50IHBsYWNl IHRvIHJlc2V0IGZsYWdidWYuCisJCSAqLworCQlpZiAoZGV0YWlsYnVmLmxlbiA+IDApCisJCXsK KwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKCZkZXRhaWxidWYsICdcbicpOworCQkJcmVzZXRTdHJp bmdJbmZvKCZmbGFnYnVmKTsKKwkJfQorCisJCS8qIEdlbmVyYXRlIG91dHB1dC4gKi8KKwkJcGdw YV90cm92ZV9hcHBlbmRfZmxhZ3MoJmZsYWdidWYsIGZsYWdzKTsKKwkJYXBwZW5kU3RyaW5nSW5m bygmZGV0YWlsYnVmLCAiYWR2aWNlICVzIGZlZWRiYWNrIGlzIFwiJXNcIiIsCisJCQkJCQkgaXRl bS0+ZGVmbmFtZSwgZmxhZ2J1Zi5kYXRhKTsKKwl9CisKKwkvKiBFbWl0IHRoZSB3YXJuaW5nLCBp ZiBhbnkgcHJvYmxlbXMgd2VyZSBmb3VuZC4gKi8KKwlpZiAoZGV0YWlsYnVmLmxlbiA+IDApCisJ CWVyZXBvcnQoV0FSTklORywKKwkJCQllcnJtc2coInN1cHBsaWVkIHBsYW4gYWR2aWNlIHdhcyBu b3QgZW5mb3JjZWQiKSwKKwkJCQllcnJkZXRhaWwoIiVzIiwgZGV0YWlsYnVmLmRhdGEpKTsKK30K KworI2lmZGVmIFVTRV9BU1NFUlRfQ0hFQ0tJTkcKKworLyoKKyAqIEZhc3QgaGFzaCBmdW5jdGlv biBmb3IgYSBrZXkgY29uc2lzdGluZyBvZiBhbiBSVEkgYW5kIHBsYW4gbmFtZS4KKyAqLworc3Rh dGljIHVpbnQzMgorcGdwYV9yaV9jaGVja2VyX2hhc2hfa2V5KHBncGFfcmlfY2hlY2tlcl9rZXkg a2V5KQoreworCWZhc3RoYXNoX3N0YXRlIGhzOworCWludAkJCXNwX2xlbjsKKworCWZhc3RoYXNo X2luaXQoJmhzLCAwKTsKKworCWhzLmFjY3VtID0ga2V5LnJ0aTsKKwlmYXN0aGFzaF9jb21iaW5l KCZocyk7CisKKwkvKiBwbGFuX25hbWUgY2FuIGJlIE5VTEwgKi8KKwlpZiAoa2V5LnBsYW5fbmFt ZSA9PSBOVUxMKQorCQlzcF9sZW4gPSAwOworCWVsc2UKKwkJc3BfbGVuID0gZmFzdGhhc2hfYWNj dW1fY3N0cmluZygmaHMsIGtleS5wbGFuX25hbWUpOworCisJLyogaGFzaGZuX3Vuc3RhYmxlLmgg cmVjb21tZW5kcyB1c2luZyBzdHJpbmcgbGVuZ3RoIGFzIHR3ZWFrICovCisJcmV0dXJuIGZhc3Ro YXNoX2ZpbmFsMzIoJmhzLCBzcF9sZW4pOworfQorCisjZW5kaWYKKworLyoKKyAqIFNhdmUgdGhl IHJhbmdlIHRhYmxlIGlkZW50aWZpZXIgZm9yIG9uZSByZWxhdGlvbiBmb3IgZnV0dXJlIGNyb3Nz LWNoZWNraW5nLgorICovCitzdGF0aWMgdm9pZAorcGdwYV9yaV9jaGVja2VyX3NhdmUocGdwYV9w bGFubmVyX3N0YXRlICpwcHMsIFBsYW5uZXJJbmZvICpyb290LAorCQkJCQkgUmVsT3B0SW5mbyAq cmVsKQoreworI2lmZGVmIFVTRV9BU1NFUlRfQ0hFQ0tJTkcKKwlwZ3BhX3JpX2NoZWNrZXJfa2V5 IGtleTsKKwlwZ3BhX3JpX2NoZWNrZXIgKmNoZWNrOworCXBncGFfaWRlbnRpZmllciByaWQ7CisJ Y29uc3QgY2hhciAqcmlkX3N0cmluZzsKKwlib29sCQlmb3VuZDsKKworCWtleS5ydGkgPSBibXNf c2luZ2xldG9uX21lbWJlcihyZWwtPnJlbGlkcyk7CisJa2V5LnBsYW5fbmFtZSA9IHJvb3QtPnBs YW5fbmFtZTsKKwlwZ3BhX2NvbXB1dGVfaWRlbnRpZmllcl9ieV9ydGkocm9vdCwga2V5LnJ0aSwg JnJpZCk7CisJcmlkX3N0cmluZyA9IHBncGFfaWRlbnRpZmllcl9zdHJpbmcoJnJpZCk7CisJY2hl Y2sgPSBwZ3BhX3JpX2NoZWNrX2luc2VydChwcHMtPnJpX2NoZWNrX2hhc2gsIGtleSwgJmZvdW5k KTsKKwlBc3NlcnQoIWZvdW5kIHx8IHN0cmNtcChjaGVjay0+cmlkX3N0cmluZywgcmlkX3N0cmlu ZykgPT0gMCk7CisJY2hlY2stPnJpZF9zdHJpbmcgPSByaWRfc3RyaW5nOworI2VuZGlmCit9CisK Ky8qCisgKiBWYWxpZGF0ZSB0aGF0IHRoZSByYW5nZSB0YWJsZSBpZGVudGlmaWVycyB3ZSB3ZXJl IGFibGUgdG8gZ2VuZXJhdGUgZHVyaW5nCisgKiBwbGFubmluZyBtYXRjaCB0aGUgb25lcyB3ZSBn ZW5lcmF0ZWQgZnJvbSB0aGUgZmluYWwgcGxhbi4KKyAqLworc3RhdGljIHZvaWQKK3BncGFfcmlf Y2hlY2tlcl92YWxpZGF0ZShwZ3BhX3BsYW5uZXJfc3RhdGUgKnBwcywgUGxhbm5lZFN0bXQgKnBz dG10KQoreworI2lmZGVmIFVTRV9BU1NFUlRfQ0hFQ0tJTkcKKwlwZ3BhX2lkZW50aWZpZXIgKnJ0 X2lkZW50aWZpZXJzOworCXBncGFfcmlfY2hlY2tfaXRlcmF0b3IgaXQ7CisJcGdwYV9yaV9jaGVj a2VyICpjaGVjazsKKworCS8qIENyZWF0ZSBpZGVudGlmaWVycyBmcm9tIHRoZSBwbGFubmVkIHN0 YXRlbWVudC4gKi8KKwlydF9pZGVudGlmaWVycyA9IHBncGFfY3JlYXRlX2lkZW50aWZpZXJzX2Zv cl9wbGFubmVkX3N0bXQocHN0bXQpOworCisJLyogSXRlcmF0ZSBvdmVyIGlkZW50aWZpZXJzIGNy ZWF0ZWQgZHVyaW5nIHBsYW5uaW5nLCBzbyB3ZSBjYW4gY29tcGFyZS4gKi8KKwlwZ3BhX3JpX2No ZWNrX3N0YXJ0X2l0ZXJhdGUocHBzLT5yaV9jaGVja19oYXNoLCAmaXQpOworCXdoaWxlICgoY2hl Y2sgPSBwZ3BhX3JpX2NoZWNrX2l0ZXJhdGUocHBzLT5yaV9jaGVja19oYXNoLCAmaXQpKSAhPSBO VUxMKQorCXsKKwkJaW50CQkJcnRvZmZzZXQgPSAwOworCQljb25zdCBjaGFyICpyaWRfc3RyaW5n OworCQlJbmRleAkJZmxhdF9ydGk7CisKKwkJLyoKKwkJICogSWYgdGhlcmUncyBubyBwbGFuIG5h bWUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZW50cnksIHRoZW4gdGhlCisJCSAqIHJ0b2Zmc2V0IGlz IDAuIE90aGVyd2lzZSwgd2UgY2FuIHNlYXJjaCB0aGUgU3ViUGxhblJUSW5mbyBsaXN0IHRvCisJ CSAqIGZpbmQgdGhlIHJ0b2Zmc2V0LgorCQkgKi8KKwkJaWYgKGNoZWNrLT5rZXkucGxhbl9uYW1l ICE9IE5VTEwpCisJCXsKKwkJCWZvcmVhY2hfbm9kZShTdWJQbGFuUlRJbmZvLCBydGluZm8sIHBz dG10LT5zdWJydGluZm9zKQorCQkJeworCQkJCS8qCisJCQkJICogSWYgcnRpbmZvLT5kdW1teSBp cyBzZXQsIHRoZW4gdGhlIHN1YnF1ZXJ5J3MgcmFuZ2UgdGFibGUKKwkJCQkgKiB3aWxsIG9ubHkg aGF2ZSBiZWVuIHBhcnRpYWxseSBjb3BpZWQgdG8gdGhlIGZpbmFsIHJhbmdlCisJCQkJICogdGFi bGUuIFNwZWNpZmljYWxseSwgb25seSBSVEVfUkVMQVRJT04gZW50cmllcyBhbmQKKwkJCQkgKiBS VEVfU1VCUVVFUlkgZW50cmllcyB0aGF0IHdlcmUgb25jZSBSVEVfUkVMQVRJT04gZW50cmllcwor CQkJCSAqIHdpbGwgYmUgY29waWVkLCBhcyBwZXIgYWRkX3J0ZXNfdG9fZmxhdF9ydGFibGUuIFRo ZXJlZm9yZSwKKwkJCQkgKiB0aGVyZSdzIG5vIGZpeGVkIHJ0b2Zmc2V0IHRoYXQgd2UgY2FuIGFw cGx5IHRvIHRoZSBSVElzCisJCQkJICogdXNlZCBkdXJpbmcgcGxhbm5pbmcgdG8gbG9jYXRlIHRo ZSBjb3JyZXNwb25kaW5nIHJlbGF0aW9ucworCQkJCSAqIGluIHRoZSBmaW5hbCBydGFibGUuCisJ CQkJICoKKwkJCQkgKiBXaXRoIG1vcmUgY29tcGxleCBsb2dpYywgd2UgY291bGQgd29yayBhcm91 bmQgdGhhdCBwcm9ibGVtCisJCQkJICogYnkgcmVtZW1iZXJpbmcgdGhlIHdob2xlIGNvbnRlbnRz IG9mIHRoZSBzdWJxdWVyeSdzIHJ0YWJsZQorCQkJCSAqIGR1cmluZyBwbGFubmluZywgZGV0ZXJt aW5pbmcgd2hpY2ggb2YgdGhvc2Ugd291bGQgaGF2ZSBiZWVuCisJCQkJICogY29waWVkIHRvIHRo ZSBmaW5hbCBydGFibGUsIGFuZCBtYXRjaGluZyB0aGVtIHVwLiBCdXQgaXQKKwkJCQkgKiBkb2Vz bid0IHNlZW0gbGlrZSBhIHdvcnRod2hpbGUgZW5kZWF2b3IgZm9yIHJpZ2h0IG5vdywKKwkJCQkg KiBiZWNhdXNlIFJUSXMgZnJvbSBzdWNoIHN1YnF1ZXJpZXMgd29uJ3QgYXBwZWFyIGluIHRoZSBw bGFuCisJCQkJICogdHJlZSBpdHNlbGYsIGp1c3QgaW4gdGhlIHJhbmdlIHRhYmxlLiBIZW5jZSwg d2UgY2FuIG5laXRoZXIKKwkJCQkgKiBnZW5lcmF0ZSBub3IgYWNjZXB0IGFkdmljZSBmb3IgdGhl bS4KKwkJCQkgKi8KKwkJCQlpZiAoc3RyY21wKGNoZWNrLT5rZXkucGxhbl9uYW1lLCBydGluZm8t PnBsYW5fbmFtZSkgPT0gMAorCQkJCQkmJiAhcnRpbmZvLT5kdW1teSkKKwkJCQl7CisJCQkJCXJ0 b2Zmc2V0ID0gcnRpbmZvLT5ydG9mZnNldDsKKwkJCQkJQXNzZXJ0KHJ0b2Zmc2V0ID4gMCk7CisJ CQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKworCQkJLyoKKwkJCSAqIEl0J3Mgbm90IGFuIGVycm9y IGlmIHdlIGRvbid0IGZpbmQgdGhlIHBsYW4gbmFtZTogdGhhdCBqdXN0CisJCQkgKiBtZWFucyB0 aGF0IHdlIHBsYW5uZWQgYSBzdWJwbGFuIGJ5IHRoaXMgbmFtZSBidXQgaXQgZW5kZWQgdXAKKwkJ CSAqIGJlaW5nIGEgZHVtbXkgc3VicGxhbiBhbmQgc28gd2Fzbid0IGluY2x1ZGVkIGluIHRoZSBm aW5hbCBwbGFuCisJCQkgKiB0cmVlLgorCQkJICovCisJCQlpZiAocnRvZmZzZXQgPT0gMCkKKwkJ CQljb250aW51ZTsKKwkJfQorCisJCS8qCisJCSAqIGNoZWNrLT5rZXkucnRpIGlzIHRoZSBSVEkg dGhhdCB3ZSBzYXcgcHJpb3IgdG8gcmFuZ2UtdGFibGUKKwkJICogZmxhdHRlbmluZywgc28gd2Ug bXVzdCBhZGQgdGhlIGFwcHJvcHJpYXRlIFJUIG9mZnNldCB0byBnZXQgdGhlCisJCSAqIGZpbmFs IFJUSS4KKwkJICovCisJCWZsYXRfcnRpID0gY2hlY2stPmtleS5ydGkgKyBydG9mZnNldDsKKwkJ QXNzZXJ0KGZsYXRfcnRpIDw9IGxpc3RfbGVuZ3RoKHBzdG10LT5ydGFibGUpKTsKKworCQkvKiBB c3NlcnQgdGhhdCB0aGUgc3RyaW5nIHdlIGNvbXB1dGUgbm93IG1hdGNoZXMgdGhlIHByZXZpb3Vz IG9uZS4gKi8KKwkJcmlkX3N0cmluZyA9IHBncGFfaWRlbnRpZmllcl9zdHJpbmcoJnJ0X2lkZW50 aWZpZXJzW2ZsYXRfcnRpIC0gMV0pOworCQlBc3NlcnQoc3RyY21wKHJpZF9zdHJpbmcsIGNoZWNr LT5yaWRfc3RyaW5nKSA9PSAwKTsKKwl9CisjZW5kaWYKK30KKworLyoKKyAqIENvbnZlcnQgYSBi aXRtYXBzZXQgdG8gYSBDIHN0cmluZyBvZiBjb21tYS1zZXBhcmF0ZWQgaW50ZWdlcnMuCisgKi8K K3N0YXRpYyBjaGFyICoKK3BncGFfYm1zX3RvX2NzdHJpbmcoQml0bWFwc2V0ICpibXMpCit7CisJ U3RyaW5nSW5mb0RhdGEgYnVmOworCWludAkJCXggPSAtMTsKKworCWlmIChibXNfaXNfZW1wdHko Ym1zKSkKKwkJcmV0dXJuICJub25lIjsKKworCWluaXRTdHJpbmdJbmZvKCZidWYpOworCXdoaWxl ICgoeCA9IGJtc19uZXh0X21lbWJlcihibXMsIHgpKSA+PSAwKQorCXsKKwkJaWYgKGJ1Zi5sZW4g PiAwKQorCQkJYXBwZW5kU3RyaW5nSW5mbygmYnVmLCAiLCAlZCIsIHgpOworCQllbHNlCisJCQlh cHBlbmRTdHJpbmdJbmZvKCZidWYsICIlZCIsIHgpOworCX0KKworCXJldHVybiBidWYuZGF0YTsK K30KKworLyoKKyAqIENvbnZlcnQgYSBKb2luVHlwZSB0byBhIEMgc3RyaW5nLgorICovCitzdGF0 aWMgY29uc3QgY2hhciAqCitwZ3BhX2pvaW50eXBlX3RvX2NzdHJpbmcoSm9pblR5cGUgam9pbnR5 cGUpCit7CisJc3dpdGNoIChqb2ludHlwZSkKKwl7CisJCWNhc2UgSk9JTl9JTk5FUjoKKwkJCXJl dHVybiAiaW5uZXIiOworCQljYXNlIEpPSU5fTEVGVDoKKwkJCXJldHVybiAibGVmdCI7CisJCWNh c2UgSk9JTl9GVUxMOgorCQkJcmV0dXJuICJmdWxsIjsKKwkJY2FzZSBKT0lOX1JJR0hUOgorCQkJ cmV0dXJuICJyaWdodCI7CisJCWNhc2UgSk9JTl9TRU1JOgorCQkJcmV0dXJuICJzZW1pIjsKKwkJ Y2FzZSBKT0lOX0FOVEk6CisJCQlyZXR1cm4gImFudGkiOworCQljYXNlIEpPSU5fUklHSFRfU0VN SToKKwkJCXJldHVybiAicmlnaHQgc2VtaSI7CisJCWNhc2UgSk9JTl9SSUdIVF9BTlRJOgorCQkJ cmV0dXJuICJyaWdodCBhbnRpIjsKKwkJY2FzZSBKT0lOX1VOSVFVRV9PVVRFUjoKKwkJCXJldHVy biAidW5pcXVlIG91dGVyIjsKKwkJY2FzZSBKT0lOX1VOSVFVRV9JTk5FUjoKKwkJCXJldHVybiAi dW5pcXVlIGlubmVyIjsKKwl9CisJcmV0dXJuICI/Pz8iOworfQpkaWZmIC0tZ2l0IGEvY29udHJp Yi9wZ19wbGFuX2FkdmljZS9wZ3BhX3BsYW5uZXIuaCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uv cGdwYV9wbGFubmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmM3 MGU0ODZhN2YzCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3Bh X3BsYW5uZXIuaApAQCAtMCwwICsxLDE5IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBw Z3BhX3BsYW5uZXIuaAorICoJICBwbGFubmVyIGludGVncmF0aW9uIGZvciBwZ19wbGFuX2Fkdmlj ZQorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNi0yMDI2LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZl bG9wbWVudCBHcm91cAorICoKKyAqCSAgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3BsYW5u ZXIuaAorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaWZuZGVmIFBHUEFfUExBTk5FUl9I CisjZGVmaW5lIFBHUEFfUExBTk5FUl9ICisKK2V4dGVybiB2b2lkIHBncGFfcGxhbm5lcl9pbnN0 YWxsX2hvb2tzKHZvaWQpOworCitleHRlcm4gaW50CXBncGFfcGxhbm5lcl9nZW5lcmF0ZV9hZHZp Y2U7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3Nj YW4uYyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9zY2FuLmMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjE0YmRlM2UxNDlhCi0tLSAvZGV2L251bGwKKysrIGIv Y29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3NjYW4uYwpAQCAtMCwwICsxLDI3MSBAQAorLyot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgKgorICogcGdwYV9zY2FuLmMKKyAqCSAgYW5hbHlzaXMgb2Ygc2Nh bnMgaW4gUGxhbiB0cmVlcworICoKKyAqIENvcHlyaWdodCAoYykgMjAxNi0yMDI2LCBQb3N0Z3Jl U1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqCSAgY29udHJpYi9wZ19wbGFuX2Fk dmljZS9wZ3BhX3NjYW4uYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaW5jbHVkZSAi cG9zdGdyZXMuaCIKKworI2luY2x1ZGUgInBncGFfc2Nhbi5oIgorI2luY2x1ZGUgInBncGFfd2Fs a2VyLmgiCisKKyNpbmNsdWRlICJub2Rlcy9wYXJzZW5vZGVzLmgiCisjaW5jbHVkZSAicGFyc2Vy L3BhcnNldHJlZS5oIgorCitzdGF0aWMgcGdwYV9zY2FuICpwZ3BhX21ha2Vfc2NhbihwZ3BhX3Bs YW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwgUGxhbiAqcGxhbiwKKwkJCQkJCQkJIHBncGFfc2Nh bl9zdHJhdGVneSBzdHJhdGVneSwKKwkJCQkJCQkJIEJpdG1hcHNldCAqcmVsaWRzKTsKKworCitz dGF0aWMgUlRFS2luZCB1bmlxdWVfbm9uam9pbl9ydGVraW5kKEJpdG1hcHNldCAqcmVsaWRzLCBM aXN0ICpydGFibGUpOworCisvKgorICogQnVpbGQgYSBwZ3BhX3NjYW4gb2JqZWN0IGZvciBhIFBs YW4gbm9kZSBhbmQgdXBkYXRlIHRoZSBwbGFuIHdhbGtlcgorICogY29udGV4dCBhcyBhcHByb3By aWF0ZS4gIElmIHRoaXMgaXMgYW4gQXBwZW5kIG9yIE1lcmdlQXBwZW5kIHNjYW4sIGFsc28KKyAq IGJ1aWxkIHBncGFfc2NhbiBmb3IgYW55IHNjYW5zIHRoYXQgd2VyZSBjb25zb2xpZGF0ZWQgaW50 byB0aGlzIG9uZSBieQorICogQXBwZW5kL01lcmdlQXBwZW5kIHB1bGwtdXAuCisgKgorICogSWYg dGhlcmUgaXMgYXQgbGVhc3Qgb25lIEVsaWRlZE5vZGUgZm9yIHRoaXMgcGxhbiBub2RlLCBwYXNz IHRoZSB1cHBlcm1vc3QKKyAqIG9uZSBhcyBlbGlkZWRfbm9kZSwgZWxzZSBwYXNzIE5VTEwuCisg KgorICogU2V0IHRoZSAnYmVuZWF0aF9hbnlfZ2F0aGVyJyBub2RlIGlmIHdlIGFyZSB1bmRlcm5l YXRoIGEgR2F0aGVyIG9yCisgKiBHYXRoZXIgTWVyZ2Ugbm9kZSAoZXhjZXB0IGZvciBhIHNpbmds ZS1jb3B5IEdhdGhlciBub2RlLCBmb3Igd2hpY2gKKyAqIEdBVEhFUiBvciBHQVRIRVJfTUVSR0Ug YWR2aWNlIHNob3VsZCBub3QgYmUgZW1pdHRlZCkuCisgKgorICogU2V0IHRoZSAnd2l0aGluX2pv aW5fcHJvYmxlbScgZmxhZyBpZiB3ZSdyZSBpbnNpZGUgb2YgYSBqb2luIHByb2JsZW0gYW5kCisg KiBub3Qgb3RoZXJ3aXNlLgorICovCitwZ3BhX3NjYW4gKgorcGdwYV9idWlsZF9zY2FuKHBncGFf cGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLCBQbGFuICpwbGFuLAorCQkJCUVsaWRlZE5vZGUg KmVsaWRlZF9ub2RlLAorCQkJCWJvb2wgYmVuZWF0aF9hbnlfZ2F0aGVyLCBib29sIHdpdGhpbl9q b2luX3Byb2JsZW0pCit7CisJcGdwYV9zY2FuX3N0cmF0ZWd5IHN0cmF0ZWd5ID0gUEdQQV9TQ0FO X09SRElOQVJZOworCUJpdG1hcHNldCAgKnJlbGlkcyA9IE5VTEw7CisJaW50CQkJcnRpID0gLTE7 CisJTGlzdAkgICAqY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMgPSBOSUw7CisJTm9kZVRhZwkJbm9k ZXR5cGUgPSBub2RlVGFnKHBsYW4pOworCisJaWYgKGVsaWRlZF9ub2RlICE9IE5VTEwpCisJewor CQlub2RldHlwZSA9IGVsaWRlZF9ub2RlLT5lbGlkZWRfdHlwZTsKKwkJcmVsaWRzID0gZWxpZGVk X25vZGUtPnJlbGlkczsKKworCQkvKgorCQkgKiBJZiBzZXRyZWZzIHByb2Nlc3NpbmcgZWxpZGVk IGFuIEFwcGVuZCBvciBNZXJnZUFwcGVuZCBub2RlIHRoYXQgaGFkCisJCSAqIG9ubHkgb25lIHN1 cnZpdmluZyBjaGlsZCwgaXQgY291bGQgYmUgZWl0aGVyIGEgcGFydGl0aW9ud2lzZQorCQkgKiBv cGVyYXRpb24gb3IgYSBzZXRvcCBvdmVyIHN1YnF1ZXJpZXMsIGRlcGVuZGluZyBvbiB0aGUgcnRl a2luZC4KKwkJICoKKwkJICogQSBzZXRvcCBvdmVyIHN1YnF1ZXJpZXMsIG9yIGEgdHJpdmlhbCBT dWJxdWVyeVNjYW4gdGhhdCB3YXMgZWxpZGVkLAorCQkgKiBpcyBhbiAib3JkaW5hcnkiIHNjYW4g aS5lLiBvbmUgZm9yIHdoaWNoIHdlIGRvIG5vdCBuZWVkIHRvIGdlbmVyYXRlCisJCSAqIGFkdmlj ZSBiZWNhdXNlIHRoZSBwbGFubmVyIGhhcyBub3QgbWFkZSBhbnkgbWVhbmluZ2Z1bCBjaG9pY2Uu CisJCSAqCisJCSAqIE5vdGUgdGhhdCB0aGUgUEdQQV9TQ0FOX1BBUlRJVElPTldJU0UgY2FzZSBh bHNvIGluY2x1ZGVzCisJCSAqIHBhcnRpdGlvbndpc2Ugam9pbnM7IHRoaXMgbW9kdWxlIGNvbnNp ZGVycyB0aG9zZSB0byBiZSBhIGZvcm0gb2YKKwkJICogc2Nhbiwgc2luY2UgdGhleSBsYWNrIGlu dGVybmFsIHN0cnVjdHVyZSB0aGF0IHdlIGNhbiBkZWNvbXBvc2UuCisJCSAqLworCQlpZiAoKG5v ZGV0eXBlID09IFRfQXBwZW5kIHx8IG5vZGV0eXBlID09IFRfTWVyZ2VBcHBlbmQpICYmCisJCQl1 bmlxdWVfbm9uam9pbl9ydGVraW5kKHJlbGlkcywKKwkJCQkJCQkJICAgd2Fsa2VyLT5wc3RtdC0+ cnRhYmxlKSA9PSBSVEVfUkVMQVRJT04pCisJCQlzdHJhdGVneSA9IFBHUEFfU0NBTl9QQVJUSVRJ T05XSVNFOworCQllbHNlCisJCQlzdHJhdGVneSA9IFBHUEFfU0NBTl9PUkRJTkFSWTsKKworCQkv KiBKb2luIFJUSXMgY2FuIGJlIHByZXNlbnQsIGJ1dCBhZHZpY2UgbmV2ZXIgcmVmZXJzIHRvIHRo ZW0uICovCisJCXJlbGlkcyA9IHBncGFfZmlsdGVyX291dF9qb2luX3JlbGlkcyhyZWxpZHMsIHdh bGtlci0+cHN0bXQtPnJ0YWJsZSk7CisJfQorCWVsc2UgaWYgKChydGkgPSBwZ3BhX3NjYW5yZWxp ZChwbGFuKSkgIT0gMCkKKwl7CisJCXJlbGlkcyA9IGJtc19tYWtlX3NpbmdsZXRvbihydGkpOwor CisJCXN3aXRjaCAobm9kZVRhZyhwbGFuKSkKKwkJeworCQkJY2FzZSBUX1NlcVNjYW46CisJCQkJ c3RyYXRlZ3kgPSBQR1BBX1NDQU5fU0VROworCQkJCWJyZWFrOworCQkJY2FzZSBUX0JpdG1hcEhl YXBTY2FuOgorCQkJCXN0cmF0ZWd5ID0gUEdQQV9TQ0FOX0JJVE1BUF9IRUFQOworCQkJCWJyZWFr OworCQkJY2FzZSBUX0luZGV4U2NhbjoKKwkJCQlzdHJhdGVneSA9IFBHUEFfU0NBTl9JTkRFWDsK KwkJCQlicmVhazsKKwkJCWNhc2UgVF9JbmRleE9ubHlTY2FuOgorCQkJCXN0cmF0ZWd5ID0gUEdQ QV9TQ0FOX0lOREVYX09OTFk7CisJCQkJYnJlYWs7CisJCQljYXNlIFRfVGlkU2NhbjoKKwkJCWNh c2UgVF9UaWRSYW5nZVNjYW46CisJCQkJc3RyYXRlZ3kgPSBQR1BBX1NDQU5fVElEOworCQkJCWJy ZWFrOworCQkJZGVmYXVsdDoKKworCQkJCS8qCisJCQkJICogVGhpcyBjYXNlIGluY2x1ZGVzIGEg Rm9yZWlnblNjYW4gdGFyZ2V0aW5nIGEgc2luZ2xlCisJCQkJICogcmVsYXRpb247IG5vIG90aGVy IHN0cmF0ZWd5IGlzIHBvc3NpYmxlIGluIHRoYXQgY2FzZSwgYnV0CisJCQkJICogc2VlIGJlbG93 LCB3aGVyZSB0aGluZ3MgYXJlIGRpZmZlcmVudCBpbiBtdWx0aS1yZWxhdGlvbgorCQkJCSAqIGNh c2VzLgorCQkJCSAqLworCQkJCXN0cmF0ZWd5ID0gUEdQQV9TQ0FOX09SRElOQVJZOworCQkJCWJy ZWFrOworCQl9CisJfQorCWVsc2UgaWYgKChyZWxpZHMgPSBwZ3BhX3JlbGlkcyhwbGFuKSkgIT0g TlVMTCkKKwl7CisJCXN3aXRjaCAobm9kZVRhZyhwbGFuKSkKKwkJeworCQkJY2FzZSBUX0ZvcmVp Z25TY2FuOgorCisJCQkJLyoKKwkJCQkgKiBJZiBtdWx0aXBsZSByZWxhdGlvbnMgYXJlIGJlaW5n IHRhcmdldGVkIGJ5IGEgc2luZ2xlCisJCQkJICogZm9yZWlnbiBzY2FuLCB0aGVuIHRoZSBmb3Jl aWduIGpvaW4gaGFzIGJlZW4gcHVzaGVkIHRvIHRoZQorCQkJCSAqIHJlbW90ZSBzaWRlLCBhbmQg d2Ugd2FudCB0aGF0IHRvIGJlIHJlZmxlY3RlZCBpbiB0aGUKKwkJCQkgKiBnZW5lcmF0ZWQgYWR2 aWNlLgorCQkJCSAqLworCQkJCXN0cmF0ZWd5ID0gUEdQQV9TQ0FOX0ZPUkVJR047CisJCQkJYnJl YWs7CisJCQljYXNlIFRfQXBwZW5kOgorCisJCQkJLyoKKwkJCQkgKiBBcHBlbmQgbm9kZXMgY2Fu IHJlcHJlc2VudCBwYXJ0aXRpb253aXNlIHNjYW5zIG9mIGEKKwkJCQkgKiByZWxhdGlvbiwgYnV0 IHdoZW4gdGhleSBpbXBsZW1lbnQgYSBzZXQgb3BlcmF0aW9uLCB0aGV5IGFyZQorCQkJCSAqIGp1 c3Qgb3JkaW5hcnkgc2NhbnMuCisJCQkJICovCisJCQkJaWYgKHVuaXF1ZV9ub25qb2luX3J0ZWtp bmQocmVsaWRzLCB3YWxrZXItPnBzdG10LT5ydGFibGUpCisJCQkJCT09IFJURV9SRUxBVElPTikK KwkJCQkJc3RyYXRlZ3kgPSBQR1BBX1NDQU5fUEFSVElUSU9OV0lTRTsKKwkJCQllbHNlCisJCQkJ CXN0cmF0ZWd5ID0gUEdQQV9TQ0FOX09SRElOQVJZOworCisJCQkJLyogQmUgc3VyZSB0byBhY2Nv dW50IGZvciBwdWxsZWQtdXAgc2NhbnMuICovCisJCQkJY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMg PQorCQkJCQkoKEFwcGVuZCAqKSBwbGFuKS0+Y2hpbGRfYXBwZW5kX3JlbGlkX3NldHM7CisJCQkJ YnJlYWs7CisJCQljYXNlIFRfTWVyZ2VBcHBlbmQ6CisJCQkJLyogU2FtZSBsb2dpYyBoZXJlIGFz IGZvciBBcHBlbmQsIGFib3ZlLiAqLworCQkJCWlmICh1bmlxdWVfbm9uam9pbl9ydGVraW5kKHJl bGlkcywgd2Fsa2VyLT5wc3RtdC0+cnRhYmxlKQorCQkJCQk9PSBSVEVfUkVMQVRJT04pCisJCQkJ CXN0cmF0ZWd5ID0gUEdQQV9TQ0FOX1BBUlRJVElPTldJU0U7CisJCQkJZWxzZQorCQkJCQlzdHJh dGVneSA9IFBHUEFfU0NBTl9PUkRJTkFSWTsKKworCQkJCS8qIEJlIHN1cmUgdG8gYWNjb3VudCBm b3IgcHVsbGVkLXVwIHNjYW5zLiAqLworCQkJCWNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzID0KKwkJ CQkJKChNZXJnZUFwcGVuZCAqKSBwbGFuKS0+Y2hpbGRfYXBwZW5kX3JlbGlkX3NldHM7CisJCQkJ YnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCXN0cmF0ZWd5ID0gUEdQQV9TQ0FOX09SRElOQVJZOwor CQkJCWJyZWFrOworCQl9CisKKworCQkvKiBKb2luIFJUSXMgY2FuIGJlIHByZXNlbnQsIGJ1dCBh ZHZpY2UgbmV2ZXIgcmVmZXJzIHRvIHRoZW0uICovCisJCXJlbGlkcyA9IHBncGFfZmlsdGVyX291 dF9qb2luX3JlbGlkcyhyZWxpZHMsIHdhbGtlci0+cHN0bXQtPnJ0YWJsZSk7CisJfQorCisJLyoK KwkgKiBJZiB0aGlzIGlzIGFuIEFwcGVuZCBvciBNZXJnZUFwcGVuZCBub2RlIGludG8gd2hpY2gg c3Vib3JkaW5hdGUgQXBwZW5kCisJICogb3IgTWVyZ2VBcHBlbmQgcGF0aHMgd2VyZSBtZXJnZWQs IGVhY2ggb2YgdGhvc2UgbWVyZ2VkIHBhdGhzIGlzCisJICogZWZmZWN0aXZlbHkgYW5vdGhlciBz Y2FuIGZvciB3aGljaCB3ZSBuZWVkIHRvIGFjY291bnQuCisJICovCisJZm9yZWFjaF9ub2RlKEJp dG1hcHNldCwgY2hpbGRfcmVsaWRzLCBjaGlsZF9hcHBlbmRfcmVsaWRfc2V0cykKKwl7CisJCUJp dG1hcHNldCAgKmNoaWxkX25vbmpvaW5fcmVsaWRzOworCisJCWNoaWxkX25vbmpvaW5fcmVsaWRz ID0KKwkJCXBncGFfZmlsdGVyX291dF9qb2luX3JlbGlkcyhjaGlsZF9yZWxpZHMsCisJCQkJCQkJ CQkJd2Fsa2VyLT5wc3RtdC0+cnRhYmxlKTsKKwkJKHZvaWQpIHBncGFfbWFrZV9zY2FuKHdhbGtl ciwgcGxhbiwgc3RyYXRlZ3ksCisJCQkJCQkJICBjaGlsZF9ub25qb2luX3JlbGlkcyk7CisJfQor CisJLyoKKwkgKiBJZiB0aGlzIHBsYW4gbm9kZSBoYXMgbm8gYXNzb2NpYXRlZCBSVElzLCBpdCdz IG5vdCBhIHNjYW4uIFdoZW4gdGhlCisJICogJ3dpdGhpbl9qb2luX3Byb2JsZW0nIGZsYWcgaXMg c2V0LCB0aGF0J3MgdW5leHBlY3RlZCwgc28gdGhyb3cgYW4KKwkgKiBlcnJvciwgZWxzZSByZXR1 cm4gcXVpZXRseS4KKwkgKi8KKwlpZiAocmVsaWRzID09IE5VTEwpCisJeworCQlpZiAod2l0aGlu X2pvaW5fcHJvYmxlbSkKKwkJCWVsb2coRVJST1IsICJwbGFuIG5vZGUgaGFzIG5vIFJUSXM6ICVk IiwgKGludCkgbm9kZVRhZyhwbGFuKSk7CisJCXJldHVybiBOVUxMOworCX0KKworCS8qCisJICog QWRkIHRoZSBhcHByb3ByaWF0ZSBzZXQgb2YgUlRJcyB0byB3YWxrZXItPm5vX2dhdGhlcl9zY2Fu cy4KKwkgKgorCSAqIEFkZCBub3RoaW5nIGlmIHdlJ3JlIGJlbmVhdGggYSBHYXRoZXIgb3IgR2F0 aGVyIE1lcmdlIG5vZGUsIHNpbmNlCisJICogTk9fR0FUSEVSIGFkdmljZSBpcyBjbGVhcmx5IGlu YXBwcm9wcmlhdGUgaW4gdGhhdCBzaXR1YXRpb24uCisJICoKKwkgKiBBZGQgbm90aGluZyBpZiB0 aGlzIGlzIGFuIEFwcGVuZCBvciBNZXJnZUFwcGVuZCBub2RlLCB3aGV0aGVyIG9yIG5vdAorCSAq IGVsaWRlZC4gV2UnbGwgZW1pdCBOT19HQVRIRVIoKSBmb3IgdGhlIHVuZGVybHlpbmcgc2Nhbiwg d2hpY2ggaXMgZ29vZAorCSAqIGVub3VnaC4KKwkgKi8KKwlpZiAoIWJlbmVhdGhfYW55X2dhdGhl ciAmJiBub2RldHlwZSAhPSBUX0FwcGVuZCAmJgorCQlub2RldHlwZSAhPSBUX01lcmdlQXBwZW5k KQorCQl3YWxrZXItPm5vX2dhdGhlcl9zY2FucyA9CisJCQlibXNfYWRkX21lbWJlcnMod2Fsa2Vy LT5ub19nYXRoZXJfc2NhbnMsIHJlbGlkcyk7CisKKwkvKiBDYWxsZXIgdGVsbHMgdXMgd2hldGhl ciBOT19HQVRIRVIoKSBhZHZpY2UgZm9yIHRoaXMgc2NhbiBpcyBuZWVkZWQuICovCisJcmV0dXJu IHBncGFfbWFrZV9zY2FuKHdhbGtlciwgcGxhbiwgc3RyYXRlZ3ksIHJlbGlkcyk7Cit9CisKKy8q CisgKiBDcmVhdGUgYSBzaW5nbGUgcGdwYV9zY2FuIG9iamVjdCBhbmQgdXBkYXRlIHRoZSBwZ3Bh X3BsYW5fd2Fsa2VyX2NvbnRleHQuCisgKi8KK3N0YXRpYyBwZ3BhX3NjYW4gKgorcGdwYV9tYWtl X3NjYW4ocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsIFBsYW4gKnBsYW4sCisJCQkg ICBwZ3BhX3NjYW5fc3RyYXRlZ3kgc3RyYXRlZ3ksIEJpdG1hcHNldCAqcmVsaWRzKQoreworCXBn cGFfc2NhbiAgKnNjYW47CisKKwkvKiBDcmVhdGUgdGhlIHNjYW4gb2JqZWN0LiAqLworCXNjYW4g PSBwYWxsb2Moc2l6ZW9mKHBncGFfc2NhbikpOworCXNjYW4tPnBsYW4gPSBwbGFuOworCXNjYW4t PnN0cmF0ZWd5ID0gc3RyYXRlZ3k7CisJc2Nhbi0+cmVsaWRzID0gcmVsaWRzOworCisJLyogQWRk IGl0IHRvIHRoZSBhcHByb3ByaWF0ZSBsaXN0LiAqLworCXdhbGtlci0+c2NhbnNbc2Nhbi0+c3Ry YXRlZ3ldID0gbGFwcGVuZCh3YWxrZXItPnNjYW5zW3NjYW4tPnN0cmF0ZWd5XSwKKwkJCQkJCQkJ CQkJc2Nhbik7CisKKwlyZXR1cm4gc2NhbjsKK30KKworLyoKKyAqIERldGVybWluZSB0aGUgdW5p cXVlIHJ0ZWtpbmQgb2YgYSBzZXQgb2YgcmVsaWRzLgorICovCitzdGF0aWMgUlRFS2luZAordW5p cXVlX25vbmpvaW5fcnRla2luZChCaXRtYXBzZXQgKnJlbGlkcywgTGlzdCAqcnRhYmxlKQorewor CWludAkJCXJ0aSA9IC0xOworCWJvb2wJCWZpcnN0ID0gdHJ1ZTsKKwlSVEVLaW5kCQlydGVraW5k OworCisJQXNzZXJ0KHJlbGlkcyAhPSBOVUxMKTsKKworCXdoaWxlICgocnRpID0gYm1zX25leHRf bWVtYmVyKHJlbGlkcywgcnRpKSkgPj0gMCkKKwl7CisJCVJhbmdlVGJsRW50cnkgKnJ0ZSA9IHJ0 X2ZldGNoKHJ0aSwgcnRhYmxlKTsKKworCQlpZiAocnRlLT5ydGVraW5kID09IFJURV9KT0lOKQor CQkJY29udGludWU7CisKKwkJaWYgKGZpcnN0KQorCQl7CisJCQlydGVraW5kID0gcnRlLT5ydGVr aW5kOworCQkJZmlyc3QgPSBmYWxzZTsKKwkJfQorCQllbHNlIGlmIChydGVraW5kICE9IHJ0ZS0+ cnRla2luZCkKKwkJCWVsb2coRVJST1IsICJydGVraW5kIG1pc21hdGNoOiAlZCB2cy4gJWQiLAor CQkJCSBydGVraW5kLCBydGUtPnJ0ZWtpbmQpOworCX0KKworCWlmIChmaXJzdCkKKwkJZWxvZyhF UlJPUiwgIm5vIG5vbi1SVEVfSk9JTiBSVEVzIGZvdW5kIik7CisKKwlyZXR1cm4gcnRla2luZDsK K30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9zY2FuLmggYi9jb250 cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfc2Nhbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAwLi4zOTFjMWE0YjU5NgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdf cGxhbl9hZHZpY2UvcGdwYV9zY2FuLmgKQEAgLTAsMCArMSw4NSBAQAorLyotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgKgorICogcGdwYV9zY2FuLmgKKyAqCSAgYW5hbHlzaXMgb2Ygc2NhbnMgaW4gUGxhbiB0 cmVlcworICoKKyAqIEZvciBwdXJwb3NlcyBvZiB0aGlzIG1vZHVsZSwgYSAic2NhbiIgaW5jbHVk ZXMgKDEpIHNpbmdsZSBwbGFuIG5vZGVzIHRoYXQKKyAqIHNjYW4gbXVsdGlwbGUgUlRJcywgc3Vj aCBhcyBhIGRlZ2VuZXJhdGUgUmVzdWx0IG5vZGUgdGhhdCByZXBsYWNlcyB3aGF0CisgKiB3b3Vs ZCBvdGhlcndpc2UgaGF2ZSBiZWVuIGEgam9pbiwgYW5kICgyKSBBcHBlbmQgYW5kIE1lcmdlQXBw ZW5kIG5vZGVzCisgKiBpbXBsZW1lbnRpbmcgYSBwYXJ0aXRpb253aXNlIHNjYW4gb3IgYSBwYXJ0 aXRpb253aXNlIGpvaW4uIFNhaWQKKyAqIGRpZmZlcmVudGx5LCBzY2FucyBhcmUgdGhlIGxlYXZl cyBvZiB0aGUgam9pbiB0cmVlIGZvciBhIHNpbmdsZSBqb2luCisgKiBwcm9ibGVtLgorICoKKyAq IENvcHlyaWdodCAoYykgMjAxNi0yMDI2LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBH cm91cAorICoKKyAqCSAgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3NjYW4uaAorICoKKyAq LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorICovCisjaWZuZGVmIFBHUEFfU0NBTl9ICisjZGVmaW5lIFBHUEFf U0NBTl9ICisKKyNpbmNsdWRlICJub2Rlcy9wbGFubm9kZXMuaCIKKwordHlwZWRlZiBzdHJ1Y3Qg cGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0IHBncGFfcGxhbl93YWxrZXJfY29udGV4dDsKKworLyoK KyAqIFNjYW4gc3RyYXRlZ2llcy4KKyAqCisgKiBQR1BBX1NDQU5fT1JESU5BUlkgaXMgYW55IHNj YW4gc3RyYXRlZ3kgdGhhdCBpc24ndCBpbnRlcmVzdGluZyB0byB1cworICogYmVjYXVzZSB0aGVy ZSBpcyBubyBtZWFuaW5nZnVsIHBsYW5uZXIgZGVjaXNpb24gaW52b2x2ZWQuIEZvciBleGFtcGxl LAorICogdGhlIG9ubHkgd2F5IHRvIHNjYW4gYSBzdWJxdWVyeSBpcyBhIFN1YnF1ZXJ5U2Nhbiwg YW5kIHRoZSBvbmx5IHdheSB0bworICogc2NhbiBhIFZBTFVFUyBjb25zdHJ1Y3QgaXMgYSBWYWx1 ZXNTY2FuLiBXZSBuZWVkIG5vdCBjYXJlIGV4YWN0bHkgd2hpY2gKKyAqIHR5cGUgb2YgcGxhbm5l ciBub2RlIHdhcyB1c2VkIGluIHN1Y2ggY2FzZXMsIGJlY2F1c2UgdGhlIHNhbWUgdGhpbmcgd2ls bAorICogaGFwcGVuIHdoZW4gcmVwbGFubmluZy4KKyAqCisgKiBQR1BBX1NDQU5fT1JESU5BUlkg YWxzbyBpbmNsdWRlcyBSZXN1bHQgbm9kZXMgdGhhdCBjb3JyZXNwb25kIHRvIHNjYW5zCisgKiBv ciBldmVuIGpvaW5zIHRoYXQgYXJlIHByb3ZlZCBlbXB0eS4gV2UgZG9uJ3Qga25vdyB3aGV0aGVy IG9yIG5vdCB0aGUgc2NhbgorICogb3Igam9pbiB3aWxsIHN0aWxsIGJlIHByb3ZhYmx5IGVtcHR5 IGF0IHJlcGxhbm5pbmcgdGltZSwgYnV0IGlmIGl0IGlzLAorICogdGhlbiBubyBzY2FuLXR5cGUg YWR2aWNlIGlzIG5lZWRlZCwgYW5kIGlmIGl0J3Mgbm90LCB3ZSBjYW4ndCByZWNvbW1lbmQKKyAq IGEgc2NhbiB0eXBlIGJhc2VkIG9uIHRoZSBjdXJyZW50IHBsYW4uCisgKgorICogUEdQQV9TQ0FO X1BBUlRJVElPTldJU0UgYWxzbyBsdW1wcyB0b2dldGhlciBzY2FucyBhbmQgam9pbnM6IHRoaXMg Y2FuCisgKiBiZSBlaXRoZXIgYSBwYXJ0aXRpb253aXNlIHNjYW4gb2YgYSBwYXJ0aXRpb25lZCB0 YWJsZSBvciBhIHBhcnRpdGlvbndpc2UKKyAqIGpvaW4gYmV0d2VlbiBzZXZlcmFsIHBhcnRpdGlv bmVkIHRhYmxlcy4gTm90ZSB0aGF0IGFsbCBkZWNpc2lvbnMgYWJvdXQKKyAqIHdoZXRoZXIgb3Ig bm90IHRvIHVzZSBwYXJ0aXRpb253aXNlIGpvaW4gYXJlIG1lYW5pbmdmdWw6IG5vIG1hdHRlciB3 aGF0CisgKiB3ZSBkZWNpZGVkIHRoaXMgdGltZSwgd2UgY291bGQgZG8gbW9yZSBvciBmZXdlciB0 aGluZ3MgcGFydGl0aW9ud2lzZSB0aGUKKyAqIG5leHQgdGltZS4KKyAqCisgKiBQR1BBX1NDQU5f Rk9SRUlHTiBpcyBvbmx5IHVzZWQgd2hlbiB0aGVyZSdzIG1vcmUgdGhhbiBvbmUgcmVsYXRpb24g aW52b2x2ZWQ7CisgKiBhIHNpbmdsZS10YWJsZSBmb3JlaWduIHNjYW4gaXMgY2xhc3NpZmllZCBh cyBvcmRpbmFyeSwgc2luY2UgdGhlcmUgaXMgbm8KKyAqIGRlY2lzaW9uIHRvIG1ha2UgaW4gdGhh dCBjYXNlLgorICoKKyAqIE90aGVyIHNjYW4gc3RyYXRlZ2llcyBtYXAgb25lLXRvLW9uZSB0byBw bGFuIG5vZGVzLgorICovCit0eXBlZGVmIGVudW0KK3sKKwlQR1BBX1NDQU5fT1JESU5BUlkgPSAw LAorCVBHUEFfU0NBTl9TRVEsCisJUEdQQV9TQ0FOX0JJVE1BUF9IRUFQLAorCVBHUEFfU0NBTl9G T1JFSUdOLAorCVBHUEFfU0NBTl9JTkRFWCwKKwlQR1BBX1NDQU5fSU5ERVhfT05MWSwKKwlQR1BB X1NDQU5fUEFSVElUSU9OV0lTRSwKKwlQR1BBX1NDQU5fVElECisJLyogdXBkYXRlIE5VTV9QR1BB X1NDQU5fU1RSQVRFR1kgaWYgeW91IGFkZCBhbnl0aGluZyBoZXJlICovCit9IHBncGFfc2Nhbl9z dHJhdGVneTsKKworI2RlZmluZSBOVU1fUEdQQV9TQ0FOX1NUUkFURUdZCSgoaW50KSBQR1BBX1ND QU5fVElEICsgMSkKKworLyoKKyAqIEFsbCBvZiB0aGUgZGV0YWlscyB3ZSBuZWVkIHJlZ2FyZGlu ZyBhIHNjYW4uCisgKi8KK3R5cGVkZWYgc3RydWN0IHBncGFfc2NhbgoreworCVBsYW4JICAgKnBs YW47CisJcGdwYV9zY2FuX3N0cmF0ZWd5IHN0cmF0ZWd5OworCUJpdG1hcHNldCAgKnJlbGlkczsK K30gcGdwYV9zY2FuOworCitleHRlcm4gcGdwYV9zY2FuICpwZ3BhX2J1aWxkX3NjYW4ocGdwYV9w bGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsIFBsYW4gKnBsYW4sCisJCQkJCQkJCSAgRWxpZGVk Tm9kZSAqZWxpZGVkX25vZGUsCisJCQkJCQkJCSAgYm9vbCBiZW5lYXRoX2FueV9nYXRoZXIsCisJ CQkJCQkJCSAgYm9vbCB3aXRoaW5fam9pbl9wcm9ibGVtKTsKKworI2VuZGlmCmRpZmYgLS1naXQg YS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfc2Nhbm5lci5sIGIvY29udHJpYi9wZ19wbGFu X2FkdmljZS9wZ3BhX3NjYW5uZXIubApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwMC4uM2IzYmU2ZWI3MjcKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2 aWNlL3BncGFfc2Nhbm5lci5sCkBAIC0wLDAgKzEsMjk3IEBACisldG9weworLyoKKyAqIFNjYW5u ZXIgZm9yIHBsYW4gYWR2aWNlCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAwLTIwMjYsIFBvc3Rn cmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICogY29udHJpYi9wZ19wbGFuX2Fk dmljZS9wZ3BhX3NjYW5uZXIubAorICovCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1 ZGUgImNvbW1vbi9zdHJpbmcuaCIKKyNpbmNsdWRlICJub2Rlcy9taXNjbm9kZXMuaCIKKyNpbmNs dWRlICJwYXJzZXIvc2NhbnN1cC5oIgorCisjaW5jbHVkZSAicGdwYV9hc3QuaCIKKyNpbmNsdWRl ICJwZ3BhX3BhcnNlci5oIgorCisvKgorICogRXh0cmEgZGF0YSB0aGF0IHdlIHBhc3MgYXJvdW5k IHdoZW4gZHVyaW5nIHNjYW5uaW5nLgorICoKKyAqICdsaXRidWYnIGlzIHVzZWQgdG8gaW1wbGVt ZW50IHRoZSA8eGQ+IGV4Y2x1c2l2ZSBzdGF0ZSwgd2hpY2ggaGFuZGxlcworICogZG91YmxlLXF1 b3RlZCBpZGVudGlmaWVycy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgcGdwYV95eV9leHRyYV90eXBl Cit7CisJU3RyaW5nSW5mb0RhdGEJbGl0YnVmOworfSBwZ3BhX3l5X2V4dHJhX3R5cGU7CisKK30K KworJXsKKy8qIExDT1ZfRVhDTF9TVEFSVCAqLworCisjZGVmaW5lIFlZX0RFQ0wgXAorCWV4dGVy biBpbnQgcGdwYV95eWxleCh1bmlvbiBZWVNUWVBFICp5eWx2YWxfcGFyYW0sIExpc3QgKipyZXN1 bHQsIFwKKwkJCQkJCSAgY2hhciAqKnBhcnNlX2Vycm9yX21zZ19wLCB5eXNjYW5fdCB5eXNjYW5u ZXIpCisKKy8qIE5vIHJlYXNvbiB0byBjb25zdHJhaW4gYW1vdW50IG9mIGRhdGEgc2x1cnBlZCAq LworI2RlZmluZSBZWV9SRUFEX0JVRl9TSVpFIDE2Nzc3MjE2CisKKy8qIEF2b2lkIGV4aXQoKSBv biBmYXRhbCBzY2FubmVyIGVycm9ycyAoYSBiaXQgdWdseSAtLSBzZWUgeXlfZmF0YWxfZXJyb3Ip ICovCisjdW5kZWYgZnByaW50ZgorI2RlZmluZSBmcHJpbnRmKGZpbGUsIGZtdCwgbXNnKSAgZnBy aW50Zl90b19lcmVwb3J0KGZtdCwgbXNnKQorCitzdGF0aWMgdm9pZAorZnByaW50Zl90b19lcmVw b3J0KGNvbnN0IGNoYXIgKmZtdCwgY29uc3QgY2hhciAqbXNnKQoreworCWVyZXBvcnQoRVJST1Is IChlcnJtc2dfaW50ZXJuYWwoIiVzIiwgbXNnKSkpOworfQorJX0KKworJW9wdGlvbiByZWVudHJh bnQKKyVvcHRpb24gYmlzb24tYnJpZGdlCislb3B0aW9uIDhiaXQKKyVvcHRpb24gbmV2ZXItaW50 ZXJhY3RpdmUKKyVvcHRpb24gbm9kZWZhdWx0Cislb3B0aW9uIG5vaW5wdXQKKyVvcHRpb24gbm91 bnB1dAorJW9wdGlvbiBub3l5d3JhcAorJW9wdGlvbiBub3l5YWxsb2MKKyVvcHRpb24gbm95eXJl YWxsb2MKKyVvcHRpb24gbm95eWZyZWUKKyVvcHRpb24gd2FybgorJW9wdGlvbiBwcmVmaXg9InBn cGFfeXkiCislb3B0aW9uIGV4dHJhLXR5cGU9InBncGFfeXlfZXh0cmFfdHlwZSAqIgorCisvKgor ICogV2hhdCBmb2xsb3dzIGlzIGEgc2V2ZXJlbHkgc3RyaXBwZWQtZG93biB2ZXJzaW9uIG9mIHRo ZSBjb3JlIHNjYW5uZXIuIFdlCisgKiBvbmx5IGNhcmUgYWJvdXQgcmVjb2duaXppbmcgaWRlbnRp ZmllcnMgd2l0aCBvciB3aXRob3V0IGlkZW50aWZpZXIgcXVvdGluZworICogKGkuZS4gZG91Ymxl LXF1b3RpbmcpLCBkZWNpbWFsIGludGVnZXJzLCBhbmQgYSBzbWFsbCBoYW5kZnVsIG9mIG90aGVy CisgKiB0aGluZ3MuIEtlZXAgdGhlc2UgcnVsZXMgaW4gc3luYyB3aXRoIHNyYy9iYWNrZW5kL3Bh cnNlci9zY2FuLmwuIEFzIGluIHRoYXQKKyAqIGZpbGUsIHdlIHVzZSBhbiBleGNsdXNpdmUgc3Rh dGUgY2FsbGVkICd4YycgZm9yIEMtc3R5bGUgY29tbWVudHMsIGFuZCBhbgorICogZXhjbHVzaXZl IHN0YXRlIGNhbGxlZCAneGQnIGZvciBkb3VibGUtcXVvdGVkIGlkZW50aWZpZXJzLgorICovCisl eCB4YworJXggeGQKKworaWRlbnRfc3RhcnQJCVtBLVphLXpcMjAwLVwzNzdfXQoraWRlbnRfY29u dAkJW0EtWmEtelwyMDAtXDM3N18wLTlcJF0KKworaWRlbnRpZmllcgkJe2lkZW50X3N0YXJ0fXtp ZGVudF9jb250fSoKKworZGVjZGlnaXQJCVswLTldCitkZWNpbnRlZ2VyCQl7ZGVjZGlnaXR9KF8/ e2RlY2RpZ2l0fSkqCisKK3NwYWNlCQkJWyBcdFxuXHJcZlx2XQord2hpdGVzcGFjZQkJe3NwYWNl fSsKKworZHF1b3RlCQkJXCIKK3hkc3RhcnQJCQl7ZHF1b3RlfQoreGRzdG9wCQkJe2RxdW90ZX0K K3hkZG91YmxlCQl7ZHF1b3RlfXtkcXVvdGV9Cit4ZGluc2lkZQkJW14iXSsKKworeGNzdGFydAkJ CVwvXCoKK3hjc3RvcAkJCVwqK1wvCit4Y2luc2lkZQkJW14qL10rCisKKyUlCisKK3t3aGl0ZXNw YWNlfQl7IC8qIGlnbm9yZSAqLyB9CisKK3tpZGVudGlmaWVyfQl7CisJCQkJCWNoYXIgICAqc3Ry OworCQkJCQlib29sCWZhaWw7CisJCQkJCXBncGFfYWR2aWNlX3RhZ190eXBlCXRhZzsKKworCQkJ CQkvKgorCQkJCQkgKiBVbmxpa2UgdGhlIGNvcmUgc2Nhbm5lciwgd2UgZG9uJ3QgdHJ1bmNhdGUg aWRlbnRpZmllcnMKKwkJCQkJICogaGVyZS4gVGhlcmUgaXMgbm8gb2J2aW91cyByZWFzb24gdG8g ZG8gc28uCisJCQkJCSAqLworCQkJCQlzdHIgPSBkb3duY2FzZV9pZGVudGlmaWVyKHl5dGV4dCwg eXlsZW5nLCBmYWxzZSwgZmFsc2UpOworCQkJCQl5eWx2YWwtPnN0ciA9IHN0cjsKKworCQkJCQkv KgorCQkJCQkgKiBJZiBpdCdzIG5vdCBhIHRhZywganVzdCByZXR1cm4gVE9LX0lERU5UOyBlbHNl LCByZXR1cm4KKwkJCQkJICogYSB0b2tlbiB0eXBlIGJhc2VkIG9uIGhvdyBmdXJ0aGVyIHBhcnNp bmcgc2hvdWxkCisJCQkJCSAqIHByb2NlZWQuCisJCQkJCSAqLworCQkJCQl0YWcgPSBwZ3BhX3Bh cnNlX2FkdmljZV90YWcoc3RyLCAmZmFpbCk7CisJCQkJCWlmIChmYWlsKQorCQkJCQkJcmV0dXJu IFRPS19JREVOVDsKKwkJCQkJZWxzZSBpZiAodGFnID09IFBHUEFfVEFHX0pPSU5fT1JERVIpCisJ CQkJCQlyZXR1cm4gVE9LX1RBR19KT0lOX09SREVSOworCQkJCQllbHNlIGlmICh0YWcgPT0gUEdQ QV9UQUdfSU5ERVhfU0NBTiB8fAorCQkJCQkJCSB0YWcgPT0gUEdQQV9UQUdfSU5ERVhfT05MWV9T Q0FOKQorCQkJCQkJcmV0dXJuIFRPS19UQUdfSU5ERVg7CisJCQkJCWVsc2UgaWYgKHRhZyA9PSBQ R1BBX1RBR19TRVFfU0NBTiB8fAorCQkJCQkJCSB0YWcgPT0gUEdQQV9UQUdfVElEX1NDQU4gfHwK KwkJCQkJCQkgdGFnID09IFBHUEFfVEFHX0JJVE1BUF9IRUFQX1NDQU4gfHwKKwkJCQkJCQkgdGFn ID09IFBHUEFfVEFHX05PX0dBVEhFUikKKwkJCQkJCXJldHVybiBUT0tfVEFHX1NJTVBMRTsKKwkJ CQkJZWxzZQorCQkJCQkJcmV0dXJuIFRPS19UQUdfR0VORVJJQzsKKwkJCQl9CisKK3tkZWNpbnRl Z2VyfQl7CisJCQkJCWNoYXIgICAqZW5kcHRyOworCisJCQkJCWVycm5vID0gMDsKKwkJCQkJeXls dmFsLT5pbnRlZ2VyID0gc3RydG9pbnQoeXl0ZXh0LCAmZW5kcHRyLCAxMCk7CisJCQkJCWlmICgq ZW5kcHRyICE9ICdcMCcgfHwgZXJybm8gPT0gRVJBTkdFKQorCQkJCQkJcGdwYV95eWVycm9yKHJl c3VsdCwgcGFyc2VfZXJyb3JfbXNnX3AsIHl5c2Nhbm5lciwKKwkJCQkJCQkJCSAiaW50ZWdlciBv dXQgb2YgcmFuZ2UiKTsKKwkJCQkJcmV0dXJuIFRPS19JTlRFR0VSOworCQkJCX0KKwore3hjc3Rh cnR9CQl7CisJCQkJCUJFR0lOKHhjKTsKKwkJCQl9CisKK3t4ZHN0YXJ0fQkJeworCQkJCQlCRUdJ Tih4ZCk7CisJCQkJCXJlc2V0U3RyaW5nSW5mbygmeXlleHRyYS0+bGl0YnVmKTsKKwkJCQl9CisK Ky4JCQkJeyByZXR1cm4geXl0ZXh0WzBdOyB9CisKKzx4Yz57eGNzdG9wfQl7CisJCQkJCUJFR0lO KElOSVRJQUwpOworCQkJCX0KKworPHhjPnt4Y2luc2lkZX0JeworCQkJCQkvKiBkaXNjYXJkIG11 bHRpcGxlIGNoYXJhY3RlcnMgd2l0aG91dCBzbGFzaCBvciBhc3RlcmlzayAqLworCQkJCX0KKwor PHhjPi4JCQl7CisJCQkJCS8qCisJCQkJCSAqIERpc2NhcmQgYW55IHNpbmdsZSBjaGFyYWN0ZXIu IGZsZXggcHJlZmVycyBsb25nZXIKKwkJCQkJICogbWF0Y2hlcywgc28gdGhpcyBydWxlIHdpbGwg bmV2ZXIgYmUgcGlja2VkIHdoZW4gd2UgY291bGQKKwkJCQkJICogaGF2ZSBtYXRjaGVkIHhjc3Rv cC4KKwkJCQkJICoKKwkJCQkJICogTkI6IEF0IHByZXNlbnQsIHdlIGRvbid0IGJvdGhlciB0byBz dXBwb3J0IG5lc3RlZAorCQkJCQkgKiBDLXN0eWxlIGNvbW1lbnRzIGhlcmUsIGJ1dCB0aGlzIGxv Z2ljIGNvdWxkIGJlIGV4dGVuZGVkCisJCQkJCSAqIGlmIHRoYXQgcmVzdHJpY3Rpb24gcG9zZXMg YSBwcm9ibGVtLgorCQkJCQkgKi8KKwkJCQl9CisKKzx4Yz48PEVPRj4+CQl7CisJCQkJCUJFR0lO KElOSVRJQUwpOworCQkJCQlwZ3BhX3l5ZXJyb3IocmVzdWx0LCBwYXJzZV9lcnJvcl9tc2dfcCwg eXlzY2FubmVyLAorCQkJCQkJCQkgInVudGVybWluYXRlZCBjb21tZW50Iik7CisJCQkJfQorCis8 eGQ+e3hkc3RvcH0JeworCQkJCQlCRUdJTihJTklUSUFMKTsKKwkJCQkJaWYgKHl5ZXh0cmEtPmxp dGJ1Zi5sZW4gPT0gMCkKKwkJCQkJCXBncGFfeXllcnJvcihyZXN1bHQsIHBhcnNlX2Vycm9yX21z Z19wLCB5eXNjYW5uZXIsCisJCQkJCQkJCQkgInplcm8tbGVuZ3RoIGRlbGltaXRlZCBpZGVudGlm aWVyIik7CisJCQkJCXl5bHZhbC0+c3RyID0gcHN0cmR1cCh5eWV4dHJhLT5saXRidWYuZGF0YSk7 CisJCQkJCXJldHVybiBUT0tfSURFTlQ7CisJCQkJfQorCis8eGQ+e3hkZG91YmxlfQl7CisJCQkJ CWFwcGVuZFN0cmluZ0luZm9DaGFyKCZ5eWV4dHJhLT5saXRidWYsICciJyk7CisJCQkJfQorCis8 eGQ+e3hkaW5zaWRlfQl7CisJCQkJCWFwcGVuZEJpbmFyeVN0cmluZ0luZm8oJnl5ZXh0cmEtPmxp dGJ1ZiwgeXl0ZXh0LCB5eWxlbmcpOworCQkJCX0KKworPHhkPjw8RU9GPj4JCXsKKwkJCQkJQkVH SU4oSU5JVElBTCk7CisJCQkJCXBncGFfeXllcnJvcihyZXN1bHQsIHBhcnNlX2Vycm9yX21zZ19w LCB5eXNjYW5uZXIsCisJCQkJCQkJCSAidW50ZXJtaW5hdGVkIHF1b3RlZCBpZGVudGlmaWVyIik7 CisJCQkJfQorCislJQorCisvKiBMQ09WX0VYQ0xfU1RPUCAqLworCisvKgorICogSGFuZGxlciBm b3IgZXJyb3JzIHdoaWxlIHNjYW5uaW5nIG9yIHBhcnNpbmcgYWR2aWNlLgorICoKKyAqIGJpc29u IHBhc3NlcyB0aGUgZXJyb3IgbWVzc2FnZSB0byB1cyB2aWEgJ21lc3NhZ2UnLCBhbmQgdGhlIGNv bnRleHQgaXMKKyAqIGF2YWlsYWJsZSB2aWEgdGhlICd5eXRleHQnIG1hY3JvLiBXZSBhc3NlbWJs ZSB0aG9zZSB2YWx1ZXMgaW50byBhIGZpbmFsCisgKiBlcnJvciB0ZXh0IGFuZCB0aGVuIGFycmFu Z2UgdG8gcGFzcyBpdCBiYWNrIHRvIHRoZSBjYWxsZXIgb2YgcGdwYV95eXBhcnNlKCkKKyAqIGJ5 IHN0b3JpbmcgaXQgaW50byAqcGFyc2VfZXJyb3JfbXNnX3AuCisgKi8KK3ZvaWQKK3BncGFfeXll cnJvcihMaXN0ICoqcmVzdWx0LCBjaGFyICoqcGFyc2VfZXJyb3JfbXNnX3AsIHl5c2Nhbl90IHl5 c2Nhbm5lciwKKwkJCSBjb25zdCBjaGFyICptZXNzYWdlKQoreworCXN0cnVjdCB5eWd1dHNfdCAq eXlnID0gKHN0cnVjdCB5eWd1dHNfdCAqKSB5eXNjYW5uZXI7CS8qIG5lZWRlZCBmb3IgeXl0ZXh0 CisJCQkJCQkJCQkJCQkJCQkgKiBtYWNybyAqLworCisKKwkvKiByZXBvcnQgb25seSB0aGUgZmly c3QgZXJyb3IgaW4gYSBwYXJzZSBvcGVyYXRpb24gKi8KKwlpZiAoKnBhcnNlX2Vycm9yX21zZ19w KQorCQlyZXR1cm47CisKKwlpZiAoeXl0ZXh0WzBdKQorCQkqcGFyc2VfZXJyb3JfbXNnX3AgPSBw c3ByaW50ZigiJXMgYXQgb3IgbmVhciBcIiVzXCIiLCBtZXNzYWdlLCB5eXRleHQpOworCWVsc2UK KwkJKnBhcnNlX2Vycm9yX21zZ19wID0gcHNwcmludGYoIiVzIGF0IGVuZCBvZiBpbnB1dCIsIG1l c3NhZ2UpOworfQorCisvKgorICogSW5pdGlhbGl6ZSB0aGUgYWR2aWNlIHNjYW5uZXIuCisgKgor ICogVGhpcyBzaG91bGQgYmUgY2FsbGVkIGJlZm9yZSBwYXJzaW5nIGJlZ2lucy4KKyAqLwordm9p ZAorcGdwYV9zY2FubmVyX2luaXQoY29uc3QgY2hhciAqc3RyLCB5eXNjYW5fdCAqeXlzY2FubmVy cCkKK3sKKwl5eXNjYW5fdAl5eXNjYW5uZXI7CisJcGdwYV95eV9leHRyYV90eXBlCSp5eWV4dCA9 IHBhbGxvYzBfb2JqZWN0KHBncGFfeXlfZXh0cmFfdHlwZSk7CisKKwlpZiAoeXlsZXhfaW5pdCh5 eXNjYW5uZXJwKSAhPSAwKQorCQllbG9nKEVSUk9SLCAieXlsZXhfaW5pdCgpIGZhaWxlZDogJW0i KTsKKworCXl5c2Nhbm5lciA9ICp5eXNjYW5uZXJwOworCisJaW5pdFN0cmluZ0luZm8oJnl5ZXh0 LT5saXRidWYpOworCXBncGFfeXlzZXRfZXh0cmEoeXlleHQsIHl5c2Nhbm5lcik7CisKKwl5eV9z Y2FuX3N0cmluZyhzdHIsIHl5c2Nhbm5lcik7Cit9CisKKworLyoKKyAqIFNodXQgZG93biB0aGUg YWR2aWNlIHNjYW5uZXIuCisgKgorICogVGhpcyBzaG91bGQgYmUgY2FsbGVkIGFmdGVyIHBhcnNp bmcgaXMgY29tcGxldGUuCisgKi8KK3ZvaWQKK3BncGFfc2Nhbm5lcl9maW5pc2goeXlzY2FuX3Qg eXlzY2FubmVyKQoreworCXl5bGV4X2Rlc3Ryb3koeXlzY2FubmVyKTsKK30KKworLyoKKyAqIElu dGVyZmFjZSBmdW5jdGlvbnMgdG8gbWFrZSBmbGV4IHVzZSBwYWxsb2MoKSBpbnN0ZWFkIG9mIG1h bGxvYygpLgorICogSXQnZCBiZSBiZXR0ZXIgdG8gbWFrZSB0aGVzZSBzdGF0aWMsIGJ1dCBmbGV4 IGluc2lzdHMgb3RoZXJ3aXNlLgorICovCisKK3ZvaWQgKgoreXlhbGxvYyh5eV9zaXplX3Qgc2l6 ZSwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworCXJldHVybiBwYWxsb2Moc2l6ZSk7Cit9CisKK3Zv aWQgKgoreXlyZWFsbG9jKHZvaWQgKnB0ciwgeXlfc2l6ZV90IHNpemUsIHl5c2Nhbl90IHl5c2Nh bm5lcikKK3sKKwlpZiAocHRyKQorCQlyZXR1cm4gcmVwYWxsb2MocHRyLCBzaXplKTsKKwllbHNl CisJCXJldHVybiBwYWxsb2Moc2l6ZSk7Cit9CisKK3ZvaWQKK3l5ZnJlZSh2b2lkICpwdHIsIHl5 c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwlpZiAocHRyKQorCQlwZnJlZShwdHIpOworfQpkaWZmIC0t Z2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3Ryb3ZlLmMgYi9jb250cmliL3BnX3Bs YW5fYWR2aWNlL3BncGFfdHJvdmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwMC4uNjM0ZWM1YzRjNmUKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2 aWNlL3BncGFfdHJvdmUuYwpAQCAtMCwwICsxLDUxNiBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg KgorICogcGdwYV90cm92ZS5jCisgKgkgIEFsbCBvZiB0aGUgYWR2aWNlIGdpdmVuIGZvciBhIHBh cnRpY3VsYXIgcXVlcnksIGFwcHJvcHJpYXRlbHkKKyAqICAgIG9yZ2FuaXplZCBmb3IgY29udmVu aWVudCBhY2Nlc3MuCisgKgorICogVGhpcyBuYW1lIGNvbWVzIGZyb20gdGhlIEVuZ2xpc2ggZXhw cmVzc2lvbiAidHJvdmUgb2YgYWR2aWNlIiwgd2hpY2gKKyAqIG1lYW5zIGEgY29sbGVjdGlvbiBv ZiB3aXNkb20uIFRoaXMgc2xpZ2h0bHkgdW51c3VhbCB0ZXJtIGlzIGNob3NlbgorICogcGFydGx5 IGJlY2F1c2UgaXQgc2VlbXMgdG8gZml0IGFuZCBwYXJ0bHkgYmVjYXVzZSBpdCdzIG5vdCBwcmVz ZW50bHkKKyAqIHVzZWQgZm9yIGFueXRoaW5nIGVsc2UsIG1ha2luZyBpdCBlYXN5IHRvIGdyZXAu IE5vdGUgdGhhdCwgd2hpbGUgd2UKKyAqIGRvbid0IGtub3cgd2hldGhlciB0aGUgcHJvdmlkZWQg YWR2aWNlIGlzIGFjdHVhbGx5IHdpc2UsIGl0J3Mgbm90IG91cgorICogam9iIHRvIHF1ZXN0aW9u IHRoZSB1c2VyJ3MgY2hvaWNlcy4KKyAqCisgKiBUaGUgZ29hbCBvZiB0aGlzIG1vZHVsZSBpcyB0 byBtYWtlIGl0IGVhc3kgdG8gbG9jYXRlIHRoZSBzcGVjaWZpYworICogYml0cyBvZiBhZHZpY2Ug dGhhdCBwZXJ0YWluIHRvIGFueSBnaXZlbiBwYXJ0IG9mIGEgcXVlcnksIG9yIHRvCisgKiBkZXRl cm1pbmUgdGhhdCB0aGVyZSBhcmUgbm9uZS4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAy NiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKgkgIGNvbnRyaWIv cGdfcGxhbl9hZHZpY2UvcGdwYV90cm92ZS5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8K KyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAicGdwYV90cm92ZS5oIgorCisjaW5j bHVkZSAiY29tbW9uL2hhc2hmbl91bnN0YWJsZS5oIgorCisvKgorICogQW4gYWR2aWNlIHRyb3Zl IGlzIG9yZ2FuaXplZCBpbnRvIGEgc2VyaWVzIG9mICJzbGljZXMiLCBlYWNoIG9mIHdoaWNoCisg KiBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCBvbmUgdG9waWMgZS5nLiBzY2FuIG1ldGhvZHMu IEVhY2ggc2xpY2UgY29uc2lzdHMKKyAqIG9mIGFuIGFycmF5IG9mIHRyb3ZlIGVudHJpZXMgcGx1 cyBhIGhhc2ggdGFibGUgdGhhdCB3ZSBjYW4gdXNlIHRvIGRldGVybWluZQorICogd2hpY2ggb25l cyBhcmUgcmVsZXZhbnQgdG8gYSBwYXJ0aWN1bGFyIHBhcnQgb2YgdGhlIHF1ZXJ5LgorICovCit0 eXBlZGVmIHN0cnVjdCBwZ3BhX3Ryb3ZlX3NsaWNlCit7CisJdW5zaWduZWQJbmFsbG9jYXRlZDsK Kwl1bnNpZ25lZAludXNlZDsKKwlwZ3BhX3Ryb3ZlX2VudHJ5ICplbnRyaWVzOworCXN0cnVjdCBw Z3BhX3Ryb3ZlX2VudHJ5X2hhc2ggKmhhc2g7Cit9IHBncGFfdHJvdmVfc2xpY2U7CisKKy8qCisg KiBTY2FuIGFkdmljZSBpcyBzdG9yZWQgaW50byAnc2Nhbic7IGpvaW4gYWR2aWNlIGlzIHN0b3Jl ZCBpbnRvICdqb2luJzsgYW5kCisgKiBhZHZpY2UgdGhhdCBjYW4gYXBwbHkgdG8gYm90aCBjYXNl cyBpcyBzdG9yZWQgaW50byAncmVsJy4gVGhpcyBsZXRzIGNhbGxlcnMKKyAqIGFzayBqdXN0IGZv ciB3aGF0J3MgcmVsZXZhbnQuIFRoZXNlIHNsaWNlcyBjb3JyZXNwb25kIHRvIHRoZSBwb3NzaWJs ZSB2YWx1ZXMKKyAqIG9mIHBncGFfdHJvdmVfbG9va3VwX3R5cGUuCisgKi8KK3N0cnVjdCBwZ3Bh X3Ryb3ZlCit7CisJcGdwYV90cm92ZV9zbGljZSBqb2luOworCXBncGFfdHJvdmVfc2xpY2UgcmVs OworCXBncGFfdHJvdmVfc2xpY2Ugc2NhbjsKK307CisKKy8qCisgKiBXZSdyZSBnb2luZyB0byBi dWlsZCBhIGhhc2ggdGFibGUgdG8gYWxsb3cgY2xpZW50cyBvZiB0aGlzIG1vZHVsZSB0byBmaW5k CisgKiByZWxldmFudCBhZHZpY2UgZm9yIGEgZ2l2ZW4gcGFydCBvZiB0aGUgcXVlcnkgcXVpY2ts eS4gSG93ZXZlciwgd2UncmUgZ29pbmcKKyAqIHRvIHVzZSBvbmx5IHRocmVlIG9mIHRoZSBmaXZl IGtleSBmaWVsZHMgYXMgaGFzaCBrZXlzLiBUaGVyZSBhcmUgdHdvIHJlYXNvbnMKKyAqIGZvciB0 aGlzLgorICoKKyAqIEZpcnN0LCBpdCdzIGFsbG93YWJsZSB0byBzZXQgcGFydGl0aW9uX3NjaGVt YSB0byBOVUxMIHRvIG1hdGNoIGEgcGFydGl0aW9uCisgKiB3aXRoIHRoZSBjb3JyZWN0IG5hbWUg aW4gYW55IHNjaGVtYS4KKyAqCisgKiBTZWNvbmQsIHdlIGV4cGVjdCB0aGUgIm9jY3VycmVuY2Ui IGFuZCAicGFydGl0aW9uX3NjaGVtYSIgcG9ydGlvbnMgb2YgdGhlCisgKiByZWxhdGlvbiBpZGVu dGlmaWVycyB0byBiZSBtb3N0bHkgdW5pbnRlcmVzdGluZy4gTW9zdCBvZiB0aGUgdGltZSwgdGhl CisgKiBvY2N1cnJlbmNlIGZpZWxkIHdpbGwgYmUgMSBhbmQgdGhlIHBhcnRpdGlvbl9zY2hlbWEg dmFsdWVzIHdpbGwgYWxsIGJlIHRoZQorICogc2FtZS4gRXZlbiB3aGVuIHRoZXJlIGlzIHNvbWUg dmFyaWF0aW9uLCB0aGUgYWJzb2x1dGUgbnVtYmVyIG9mIGVudHJpZXMKKyAqIHRoYXQgaGF2ZSB0 aGUgc2FtZSB2YWx1ZXMgZm9yIGFsbCB0aHJlZSBvZiB0aGVzZSBrZXkgZmllbGRzIHNob3VsZCBi ZQorICogcXVpdGUgc21hbGwuCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJY29uc3QgY2hhciAq YWxpYXNfbmFtZTsKKwljb25zdCBjaGFyICpwYXJ0aXRpb25fbmFtZTsKKwljb25zdCBjaGFyICpw bGFuX25hbWU7Cit9IHBncGFfdHJvdmVfZW50cnlfa2V5OworCit0eXBlZGVmIHN0cnVjdAorewor CXBncGFfdHJvdmVfZW50cnlfa2V5IGtleTsKKwlpbnQJCQlzdGF0dXM7CisJQml0bWFwc2V0ICAq aW5kZXhlczsKK30gcGdwYV90cm92ZV9lbnRyeV9lbGVtZW50OworCitzdGF0aWMgdWludDMyIHBn cGFfdHJvdmVfZW50cnlfaGFzaF9rZXkocGdwYV90cm92ZV9lbnRyeV9rZXkga2V5KTsKKworc3Rh dGljIGlubGluZSBib29sCitwZ3BhX3Ryb3ZlX2VudHJ5X2NvbXBhcmVfa2V5KHBncGFfdHJvdmVf ZW50cnlfa2V5IGEsIHBncGFfdHJvdmVfZW50cnlfa2V5IGIpCit7CisJaWYgKHN0cmNtcChhLmFs aWFzX25hbWUsIGIuYWxpYXNfbmFtZSkgIT0gMCkKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKCFz dHJpbmdzX2VxdWFsX29yX2JvdGhfbnVsbChhLnBhcnRpdGlvbl9uYW1lLCBiLnBhcnRpdGlvbl9u YW1lKSkKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKCFzdHJpbmdzX2VxdWFsX29yX2JvdGhfbnVs bChhLnBsYW5fbmFtZSwgYi5wbGFuX25hbWUpKQorCQlyZXR1cm4gZmFsc2U7CisKKwlyZXR1cm4g dHJ1ZTsKK30KKworI2RlZmluZSBTSF9QUkVGSVgJCQlwZ3BhX3Ryb3ZlX2VudHJ5CisjZGVmaW5l IFNIX0VMRU1FTlRfVFlQRQkJcGdwYV90cm92ZV9lbnRyeV9lbGVtZW50CisjZGVmaW5lIFNIX0tF WV9UWVBFCQkJcGdwYV90cm92ZV9lbnRyeV9rZXkKKyNkZWZpbmUgU0hfS0VZCQkJCWtleQorI2Rl ZmluZSBTSF9IQVNIX0tFWSh0Yiwga2V5KQlwZ3BhX3Ryb3ZlX2VudHJ5X2hhc2hfa2V5KGtleSkK KyNkZWZpbmUJU0hfRVFVQUwodGIsIGEsIGIpCXBncGFfdHJvdmVfZW50cnlfY29tcGFyZV9rZXko YSwgYikKKyNkZWZpbmUgU0hfU0NPUEUJCQlzdGF0aWMgaW5saW5lCisjZGVmaW5lIFNIX0RFQ0xB UkUKKyNkZWZpbmUgU0hfREVGSU5FCisjaW5jbHVkZSAibGliL3NpbXBsZWhhc2guaCIKKworc3Rh dGljIHZvaWQgcGdwYV9pbml0X3Ryb3ZlX3NsaWNlKHBncGFfdHJvdmVfc2xpY2UgKnRzbGljZSk7 CitzdGF0aWMgdm9pZCBwZ3BhX3Ryb3ZlX2FkZF90b19zbGljZShwZ3BhX3Ryb3ZlX3NsaWNlICp0 c2xpY2UsCisJCQkJCQkJCQlwZ3BhX2FkdmljZV90YWdfdHlwZSB0YWcsCisJCQkJCQkJCQlwZ3Bh X2FkdmljZV90YXJnZXQgKnRhcmdldCk7CitzdGF0aWMgdm9pZCBwZ3BhX3Ryb3ZlX2FkZF90b19o YXNoKHBncGFfdHJvdmVfZW50cnlfaGFzaCAqaGFzaCwKKwkJCQkJCQkJICAgcGdwYV9hZHZpY2Vf dGFyZ2V0ICp0YXJnZXQsCisJCQkJCQkJCSAgIGludCBpbmRleCk7CitzdGF0aWMgQml0bWFwc2V0 ICpwZ3BhX3Ryb3ZlX3NsaWNlX2xvb2t1cChwZ3BhX3Ryb3ZlX3NsaWNlICp0c2xpY2UsCisJCQkJ CQkJCQkJICBwZ3BhX2lkZW50aWZpZXIgKnJpZCk7CisKKy8qCisgKiBCdWlsZCBhIHRyb3ZlIG9m IGFkdmljZSBmcm9tIGEgbGlzdCBvZiBhZHZpY2UgaXRlbXMuCisgKgorICogQ2FsbGVyIGNhbiBv YnRhaW4gYSBsaXN0IG9mIGFkdmljZSBpdGVtcyB0byBwYXNzIHRvIHRoaXMgZnVuY3Rpb24gYnkK KyAqIGNhbGxpbmcgcGdwYV9wYXJzZSgpLgorICovCitwZ3BhX3Ryb3ZlICoKK3BncGFfYnVpbGRf dHJvdmUoTGlzdCAqYWR2aWNlX2l0ZW1zKQoreworCXBncGFfdHJvdmUgKnRyb3ZlID0gcGFsbG9j X29iamVjdChwZ3BhX3Ryb3ZlKTsKKworCXBncGFfaW5pdF90cm92ZV9zbGljZSgmdHJvdmUtPmpv aW4pOworCXBncGFfaW5pdF90cm92ZV9zbGljZSgmdHJvdmUtPnJlbCk7CisJcGdwYV9pbml0X3Ry b3ZlX3NsaWNlKCZ0cm92ZS0+c2Nhbik7CisKKwlmb3JlYWNoX3B0cihwZ3BhX2FkdmljZV9pdGVt LCBpdGVtLCBhZHZpY2VfaXRlbXMpCisJeworCQlzd2l0Y2ggKGl0ZW0tPnRhZykKKwkJeworCQkJ Y2FzZSBQR1BBX1RBR19KT0lOX09SREVSOgorCQkJCXsKKwkJCQkJcGdwYV9hZHZpY2VfdGFyZ2V0 ICp0YXJnZXQ7CisKKwkJCQkJLyoKKwkJCQkJICogRm9yIG1vc3QgYWR2aWNlIHR5cGVzLCBlYWNo IGVsZW1lbnQgaW4gdGhlIHRvcC1sZXZlbAorCQkJCQkgKiBsaXN0IGlzIGEgc2VwYXJhdGUgdGFy Z2V0LCBidXQgaXQncyBtb3N0IGNvbnZlbmllbnQgdG8KKwkJCQkJICogcmVnYXJkIHRoZSBlbnRp cmV0eSBvZiBhIEpPSU5fT1JERVIgc3BlY2lmaWNhdGlvbiBhcyBhCisJCQkJCSAqIHNpbmdsZSB0 YXJnZXQuIFNpbmNlIGl0IHdhc24ndCByZXByZXNlbnRlZCB0aGF0IHdheQorCQkJCQkgKiBkdXJp bmcgcGFyc2luZywgYnVpbGQgYSBzdXJyb2dhdGUgb2JqZWN0IG5vdy4KKwkJCQkJICovCisJCQkJ CXRhcmdldCA9IHBhbGxvYzBfb2JqZWN0KHBncGFfYWR2aWNlX3RhcmdldCk7CisJCQkJCXRhcmdl dC0+dHR5cGUgPSBQR1BBX1RBUkdFVF9PUkRFUkVEX0xJU1Q7CisJCQkJCXRhcmdldC0+Y2hpbGRy ZW4gPSBpdGVtLT50YXJnZXRzOworCisJCQkJCXBncGFfdHJvdmVfYWRkX3RvX3NsaWNlKCZ0cm92 ZS0+am9pbiwKKwkJCQkJCQkJCQkJaXRlbS0+dGFnLCB0YXJnZXQpOworCQkJCX0KKwkJCQlicmVh azsKKworCQkJY2FzZSBQR1BBX1RBR19CSVRNQVBfSEVBUF9TQ0FOOgorCQkJY2FzZSBQR1BBX1RB R19JTkRFWF9PTkxZX1NDQU46CisJCQljYXNlIFBHUEFfVEFHX0lOREVYX1NDQU46CisJCQljYXNl IFBHUEFfVEFHX1NFUV9TQ0FOOgorCQkJY2FzZSBQR1BBX1RBR19USURfU0NBTjoKKworCQkJCS8q CisJCQkJICogU2NhbiBhZHZpY2UuCisJCQkJICovCisJCQkJZm9yZWFjaF9wdHIocGdwYV9hZHZp Y2VfdGFyZ2V0LCB0YXJnZXQsIGl0ZW0tPnRhcmdldHMpCisJCQkJeworCQkJCQkvKgorCQkJCQkg KiBGb3Igbm93LCBhbGwgb2Ygb3VyIHNjYW4gdHlwZXMgdGFyZ2V0IHNpbmdsZSByZWxhdGlvbnMs CisJCQkJCSAqIGJ1dCBpbiB0aGUgZnV0dXJlIHRoaXMgbWlnaHQgbm90IGJlIHRydWUsIGUuZy4g YSBjdXN0b20KKwkJCQkJICogc2NhbiBjb3VsZCByZXBsYWNlIGEgam9pbi4KKwkJCQkJICovCisJ CQkJCUFzc2VydCh0YXJnZXQtPnR0eXBlID09IFBHUEFfVEFSR0VUX0lERU5USUZJRVIpOworCQkJ CQlwZ3BhX3Ryb3ZlX2FkZF90b19zbGljZSgmdHJvdmUtPnNjYW4sCisJCQkJCQkJCQkJCWl0ZW0t PnRhZywgdGFyZ2V0KTsKKwkJCQl9CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgUEdQQV9UQUdfRk9S RUlHTl9KT0lOOgorCQkJY2FzZSBQR1BBX1RBR19IQVNIX0pPSU46CisJCQljYXNlIFBHUEFfVEFH X01FUkdFX0pPSU5fTUFURVJJQUxJWkU6CisJCQljYXNlIFBHUEFfVEFHX01FUkdFX0pPSU5fUExB SU46CisJCQljYXNlIFBHUEFfVEFHX05FU1RFRF9MT09QX01BVEVSSUFMSVpFOgorCQkJY2FzZSBQ R1BBX1RBR19ORVNURURfTE9PUF9NRU1PSVpFOgorCQkJY2FzZSBQR1BBX1RBR19ORVNURURfTE9P UF9QTEFJTjoKKwkJCWNhc2UgUEdQQV9UQUdfU0VNSUpPSU5fTk9OX1VOSVFVRToKKwkJCWNhc2Ug UEdQQV9UQUdfU0VNSUpPSU5fVU5JUVVFOgorCisJCQkJLyoKKwkJCQkgKiBKb2luIHN0cmF0ZWd5 IGFkdmljZS4KKwkJCQkgKi8KKwkJCQlmb3JlYWNoX3B0cihwZ3BhX2FkdmljZV90YXJnZXQsIHRh cmdldCwgaXRlbS0+dGFyZ2V0cykKKwkJCQl7CisJCQkJCXBncGFfdHJvdmVfYWRkX3RvX3NsaWNl KCZ0cm92ZS0+am9pbiwKKwkJCQkJCQkJCQkJaXRlbS0+dGFnLCB0YXJnZXQpOworCQkJCX0KKwkJ CQlicmVhazsKKworCQkJY2FzZSBQR1BBX1RBR19QQVJUSVRJT05XSVNFOgorCQkJY2FzZSBQR1BB X1RBR19HQVRIRVI6CisJCQljYXNlIFBHUEFfVEFHX0dBVEhFUl9NRVJHRToKKwkJCWNhc2UgUEdQ QV9UQUdfTk9fR0FUSEVSOgorCisJCQkJLyoKKwkJCQkgKiBBZHZpY2UgYWJvdXQgYSBSZWxPcHRJ bmZvIHJlbGV2YW50IHRvIGJvdGggc2NhbnMgYW5kIGpvaW5zLgorCQkJCSAqLworCQkJCWZvcmVh Y2hfcHRyKHBncGFfYWR2aWNlX3RhcmdldCwgdGFyZ2V0LCBpdGVtLT50YXJnZXRzKQorCQkJCXsK KwkJCQkJcGdwYV90cm92ZV9hZGRfdG9fc2xpY2UoJnRyb3ZlLT5yZWwsCisJCQkJCQkJCQkJCWl0 ZW0tPnRhZywgdGFyZ2V0KTsKKwkJCQl9CisJCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyZXR1cm4g dHJvdmU7Cit9CisKKy8qCisgKiBTZWFyY2ggYSB0cm92ZSBvZiBhZHZpY2UgZm9yIHJlbGV2YW50 IGVudHJpZXMuCisgKgorICogQWxsIHBhcmFtZXRlcnMgYXJlIGlucHV0IHBhcmFtZXRlcnMgZXhj ZXB0IGZvciAqcmVzdWx0LCB3aGljaCBpcyBhbiBvdXRwdXQKKyAqIHBhcmFtZXRlciB1c2VkIHRv IHJldHVybiByZXN1bHRzIHRvIHRoZSBjYWxsZXIuCisgKi8KK3ZvaWQKK3BncGFfdHJvdmVfbG9v a3VwKHBncGFfdHJvdmUgKnRyb3ZlLCBwZ3BhX3Ryb3ZlX2xvb2t1cF90eXBlIHR5cGUsCisJCQkJ ICBpbnQgbnJpZHMsIHBncGFfaWRlbnRpZmllciAqcmlkcywgcGdwYV90cm92ZV9yZXN1bHQgKnJl c3VsdCkKK3sKKwlwZ3BhX3Ryb3ZlX3NsaWNlICp0c2xpY2U7CisJQml0bWFwc2V0ICAqaW5kZXhl czsKKworCUFzc2VydChucmlkcyA+IDApOworCisJaWYgKHR5cGUgPT0gUEdQQV9UUk9WRV9MT09L VVBfU0NBTikKKwkJdHNsaWNlID0gJnRyb3ZlLT5zY2FuOworCWVsc2UgaWYgKHR5cGUgPT0gUEdQ QV9UUk9WRV9MT09LVVBfSk9JTikKKwkJdHNsaWNlID0gJnRyb3ZlLT5qb2luOworCWVsc2UKKwkJ dHNsaWNlID0gJnRyb3ZlLT5yZWw7CisKKwlpbmRleGVzID0gcGdwYV90cm92ZV9zbGljZV9sb29r dXAodHNsaWNlLCAmcmlkc1swXSk7CisJZm9yIChpbnQgaSA9IDE7IGkgPCBucmlkczsgKytpKQor CXsKKwkJQml0bWFwc2V0ICAqb3RoZXJfaW5kZXhlczsKKworCQkvKgorCQkgKiBJZiB0aGUgY2Fs bGVyIGlzIGFza2luZyBhYm91dCB0d28gcmVsYXRpb25zIHRoYXQgYXJlbid0IHBhcnQgb2YgdGhl CisJCSAqIHNhbWUgc3VicXVlcnksIHRoZXkndmUgbWVzc2VkIHVwLgorCQkgKi8KKwkJQXNzZXJ0 KHN0cmluZ3NfZXF1YWxfb3JfYm90aF9udWxsKHJpZHNbMF0ucGxhbl9uYW1lLAorCQkJCQkJCQkJ CSAgcmlkc1tpXS5wbGFuX25hbWUpKTsKKworCQlvdGhlcl9pbmRleGVzID0gcGdwYV90cm92ZV9z bGljZV9sb29rdXAodHNsaWNlLCAmcmlkc1tpXSk7CisJCWluZGV4ZXMgPSBibXNfdW5pb24oaW5k ZXhlcywgb3RoZXJfaW5kZXhlcyk7CisJfQorCisJcmVzdWx0LT5lbnRyaWVzID0gdHNsaWNlLT5l bnRyaWVzOworCXJlc3VsdC0+aW5kZXhlcyA9IGluZGV4ZXM7Cit9CisKKy8qCisgKiBSZXR1cm4g YWxsIGVudHJpZXMgaW4gYSB0cm92ZSBzbGljZSB0byB0aGUgY2FsbGVyLgorICoKKyAqIFRoZSBm aXJzdCB0d28gYXJndW1lbnRzIGFyZSBpbnB1dCBhcmd1bWVudHMsIGFuZCB0aGUgcmVtYWluZGVy IGFyZSBvdXRwdXQKKyAqIGFyZ3VtZW50cy4KKyAqLwordm9pZAorcGdwYV90cm92ZV9sb29rdXBf YWxsKHBncGFfdHJvdmUgKnRyb3ZlLCBwZ3BhX3Ryb3ZlX2xvb2t1cF90eXBlIHR5cGUsCisJCQkJ CSAgcGdwYV90cm92ZV9lbnRyeSAqKmVudHJpZXMsIGludCAqbmVudHJpZXMpCit7CisJcGdwYV90 cm92ZV9zbGljZSAqdHNsaWNlOworCisJaWYgKHR5cGUgPT0gUEdQQV9UUk9WRV9MT09LVVBfU0NB TikKKwkJdHNsaWNlID0gJnRyb3ZlLT5zY2FuOworCWVsc2UgaWYgKHR5cGUgPT0gUEdQQV9UUk9W RV9MT09LVVBfSk9JTikKKwkJdHNsaWNlID0gJnRyb3ZlLT5qb2luOworCWVsc2UKKwkJdHNsaWNl ID0gJnRyb3ZlLT5yZWw7CisKKwkqZW50cmllcyA9IHRzbGljZS0+ZW50cmllczsKKwkqbmVudHJp ZXMgPSB0c2xpY2UtPm51c2VkOworfQorCisvKgorICogQ29udmVydCBhIHRyb3ZlIGVudHJ5IHRv IGFuIGl0ZW0gb2YgcGxhbiBhZHZpY2UgdGhhdCB3b3VsZCBwcm9kdWNlIGl0LgorICovCitjaGFy ICoKK3BncGFfY3N0cmluZ190cm92ZV9lbnRyeShwZ3BhX3Ryb3ZlX2VudHJ5ICplbnRyeSkKK3sK KwlTdHJpbmdJbmZvRGF0YSBidWY7CisKKwlpbml0U3RyaW5nSW5mbygmYnVmKTsKKwlhcHBlbmRT dHJpbmdJbmZvKCZidWYsICIlcyIsIHBncGFfY3N0cmluZ19hZHZpY2VfdGFnKGVudHJ5LT50YWcp KTsKKworCS8qIEpPSU5fT1JERVIgdGFncyBhcmUgdHJhbnNmb3JtZWQgYnkgcGdwYV9idWlsZF90 cm92ZTsgdW5kbyB0aGF0IGhlcmUgKi8KKwlpZiAoZW50cnktPnRhZyAhPSBQR1BBX1RBR19KT0lO X09SREVSKQorCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcigmYnVmLCAnKCcpOworCWVsc2UKKwkJQXNz ZXJ0KGVudHJ5LT50YXJnZXQtPnR0eXBlID09IFBHUEFfVEFSR0VUX09SREVSRURfTElTVCk7CisK KwlwZ3BhX2Zvcm1hdF9hZHZpY2VfdGFyZ2V0KCZidWYsIGVudHJ5LT50YXJnZXQpOworCisJaWYg KGVudHJ5LT50YXJnZXQtPml0YXJnZXQgIT0gTlVMTCkKKwl7CisJCWFwcGVuZFN0cmluZ0luZm9D aGFyKCZidWYsICcgJyk7CisJCXBncGFfZm9ybWF0X2luZGV4X3RhcmdldCgmYnVmLCBlbnRyeS0+ dGFyZ2V0LT5pdGFyZ2V0KTsKKwl9CisKKwlpZiAoZW50cnktPnRhZyAhPSBQR1BBX1RBR19KT0lO X09SREVSKQorCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcigmYnVmLCAnKScpOworCisJcmV0dXJuIGJ1 Zi5kYXRhOworfQorCisvKgorICogU2V0IFBHUEFfVEVfKiBmbGFncyBvbiBhIHNldCBvZiB0cm92 ZSBlbnRyaWVzLgorICovCit2b2lkCitwZ3BhX3Ryb3ZlX3NldF9mbGFncyhwZ3BhX3Ryb3ZlX2Vu dHJ5ICplbnRyaWVzLCBCaXRtYXBzZXQgKmluZGV4ZXMsIGludCBmbGFncykKK3sKKwlpbnQJCQlp ID0gLTE7CisKKwl3aGlsZSAoKGkgPSBibXNfbmV4dF9tZW1iZXIoaW5kZXhlcywgaSkpID49IDAp CisJeworCQlwZ3BhX3Ryb3ZlX2VudHJ5ICplbnRyeSA9ICZlbnRyaWVzW2ldOworCisJCWVudHJ5 LT5mbGFncyB8PSBmbGFnczsKKwl9Cit9CisKKy8qCisgKiBBcHBlbmQgYSBzdHJpbmcgcmVwcmVz ZW50YXRpb24gb2YgdGhlIHNwZWNpZmllZCBQR1BBX1RFXyogZmxhZ3MgdG8gdGhlCisgKiBnaXZl biBTdHJpbmdJbmZvLgorICovCit2b2lkCitwZ3BhX3Ryb3ZlX2FwcGVuZF9mbGFncyhTdHJpbmdJ bmZvIGJ1ZiwgaW50IGZsYWdzKQoreworCWlmICgoZmxhZ3MgJiBQR1BBX1RFX01BVENIX0ZVTEwp ICE9IDApCisJeworCQlBc3NlcnQoKGZsYWdzICYgUEdQQV9URV9NQVRDSF9QQVJUSUFMKSAhPSAw KTsKKwkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICJtYXRjaGVkIik7CisJfQorCWVsc2UgaWYgKChm bGFncyAmIFBHUEFfVEVfTUFUQ0hfUEFSVElBTCkgIT0gMCkKKwkJYXBwZW5kU3RyaW5nSW5mbyhi dWYsICJwYXJ0aWFsbHkgbWF0Y2hlZCIpOworCWVsc2UKKwkJYXBwZW5kU3RyaW5nSW5mbyhidWYs ICJub3QgbWF0Y2hlZCIpOworCWlmICgoZmxhZ3MgJiBQR1BBX1RFX0lOQVBQTElDQUJMRSkgIT0g MCkKKwkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIsIGluYXBwbGljYWJsZSIpOworCWlmICgoZmxh Z3MgJiBQR1BBX1RFX0NPTkZMSUNUSU5HKSAhPSAwKQorCQlhcHBlbmRTdHJpbmdJbmZvKGJ1Ziwg IiwgY29uZmxpY3RpbmciKTsKKwlpZiAoKGZsYWdzICYgUEdQQV9URV9GQUlMRUQpICE9IDApCisJ CWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiLCBmYWlsZWQiKTsKK30KKworLyoKKyAqIEFkZCBhIG5l dyBhZHZpY2UgdGFyZ2V0IHRvIGFuIGV4aXN0aW5nIHBncGFfdHJvdmVfc2xpY2Ugb2JqZWN0Lgor ICovCitzdGF0aWMgdm9pZAorcGdwYV90cm92ZV9hZGRfdG9fc2xpY2UocGdwYV90cm92ZV9zbGlj ZSAqdHNsaWNlLAorCQkJCQkJcGdwYV9hZHZpY2VfdGFnX3R5cGUgdGFnLAorCQkJCQkJcGdwYV9h ZHZpY2VfdGFyZ2V0ICp0YXJnZXQpCit7CisJcGdwYV90cm92ZV9lbnRyeSAqZW50cnk7CisKKwlp ZiAodHNsaWNlLT5udXNlZCA+PSB0c2xpY2UtPm5hbGxvY2F0ZWQpCisJeworCQlpbnQJCQluZXdf YWxsb2NhdGVkOworCisJCW5ld19hbGxvY2F0ZWQgPSB0c2xpY2UtPm5hbGxvY2F0ZWQgKiAyOwor CQl0c2xpY2UtPmVudHJpZXMgPSByZXBhbGxvY19hcnJheSh0c2xpY2UtPmVudHJpZXMsIHBncGFf dHJvdmVfZW50cnksCisJCQkJCQkJCQkJIG5ld19hbGxvY2F0ZWQpOworCQl0c2xpY2UtPm5hbGxv Y2F0ZWQgPSBuZXdfYWxsb2NhdGVkOworCX0KKworCWVudHJ5ID0gJnRzbGljZS0+ZW50cmllc1t0 c2xpY2UtPm51c2VkXTsKKwllbnRyeS0+dGFnID0gdGFnOworCWVudHJ5LT50YXJnZXQgPSB0YXJn ZXQ7CisJZW50cnktPmZsYWdzID0gMDsKKworCXBncGFfdHJvdmVfYWRkX3RvX2hhc2godHNsaWNl LT5oYXNoLCB0YXJnZXQsIHRzbGljZS0+bnVzZWQpOworCisJdHNsaWNlLT5udXNlZCsrOworfQor CisvKgorICogVXBkYXRlIHRoZSBoYXNoIHRhYmxlIGZvciBhIG5ld2x5LWFkZGVkIGFkdmljZSB0 YXJnZXQuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX3Ryb3ZlX2FkZF90b19oYXNoKHBncGFfdHJv dmVfZW50cnlfaGFzaCAqaGFzaCwgcGdwYV9hZHZpY2VfdGFyZ2V0ICp0YXJnZXQsCisJCQkJCSAg IGludCBpbmRleCkKK3sKKwlwZ3BhX3Ryb3ZlX2VudHJ5X2tleSBrZXk7CisJcGdwYV90cm92ZV9l bnRyeV9lbGVtZW50ICplbGVtZW50OworCWJvb2wJCWZvdW5kOworCisJLyogRm9yIG5vbi1pZGVu dGlmaWVycywgYWRkIGVudHJpZXMgZm9yIGFsbCBkZXNjZW5kYW50cy4gKi8KKwlpZiAodGFyZ2V0 LT50dHlwZSAhPSBQR1BBX1RBUkdFVF9JREVOVElGSUVSKQorCXsKKwkJZm9yZWFjaF9wdHIocGdw YV9hZHZpY2VfdGFyZ2V0LCBjaGlsZF90YXJnZXQsIHRhcmdldC0+Y2hpbGRyZW4pCisJCXsKKwkJ CXBncGFfdHJvdmVfYWRkX3RvX2hhc2goaGFzaCwgY2hpbGRfdGFyZ2V0LCBpbmRleCk7CisJCX0K KwkJcmV0dXJuOworCX0KKworCS8qIFNhbml0eSBjaGVja3MuICovCisJQXNzZXJ0KHRhcmdldC0+ cmlkLm9jY3VycmVuY2UgPiAwKTsKKwlBc3NlcnQodGFyZ2V0LT5yaWQuYWxpYXNfbmFtZSAhPSBO VUxMKTsKKworCS8qIEFkZCBhbiBlbnRyeSBmb3IgdGhpcyByZWxhdGlvbiBpZGVudGlmaWVyLiAq LworCWtleS5hbGlhc19uYW1lID0gdGFyZ2V0LT5yaWQuYWxpYXNfbmFtZTsKKwlrZXkucGFydGl0 aW9uX25hbWUgPSB0YXJnZXQtPnJpZC5wYXJ0cmVsOworCWtleS5wbGFuX25hbWUgPSB0YXJnZXQt PnJpZC5wbGFuX25hbWU7CisJZWxlbWVudCA9IHBncGFfdHJvdmVfZW50cnlfaW5zZXJ0KGhhc2gs IGtleSwgJmZvdW5kKTsKKwlpZiAoIWZvdW5kKQorCQllbGVtZW50LT5pbmRleGVzID0gTlVMTDsK KwllbGVtZW50LT5pbmRleGVzID0gYm1zX2FkZF9tZW1iZXIoZWxlbWVudC0+aW5kZXhlcywgaW5k ZXgpOworfQorCisvKgorICogQ3JlYXRlIGFuZCBpbml0aWFsaXplIGEgbmV3IHBncGFfdHJvdmVf c2xpY2Ugb2JqZWN0LgorICovCitzdGF0aWMgdm9pZAorcGdwYV9pbml0X3Ryb3ZlX3NsaWNlKHBn cGFfdHJvdmVfc2xpY2UgKnRzbGljZSkKK3sKKwkvKgorCSAqIEluIGFuIGlkZWFsIHdvcmxkLCB3 ZSdsbCBtYWtlIHRzbGljZS0+bmFsbG9jYXRlZCBiaWcgZW5vdWdoIHRoYXQgdGhlCisJICogYXJy YXkgYW5kIGhhc2ggdGFibGUgd2lsbCBiZSBsYXJnZSBlbm91Z2ggdG8gY29udGFpbiB0aGUgbnVt YmVyIG9mCisJICogYWR2aWNlIGl0ZW1zIGluIHRoaXMgdHJvdmUgc2xpY2UsIGJ1dCBhIGdlbmVy b3VzIGRlZmF1bHQgdmFsdWUgaXMgbm90CisJICogZ29vZCBmb3IgcGVyZm9ybWFuY2UsIGJlY2F1 c2UgcGdwYV9pbml0X3Ryb3ZlX3NsaWNlKCkgaGFzIHRvIHplcm8gYW4KKwkgKiBhbW91bnQgb2Yg bWVtb3J5IHByb3BvcnRpb25hbCB0byB0c2xpY2UtPm5hbGxvY2F0ZWQuIEhlbmNlLCB3ZSBrZWVw IHRoZQorCSAqIHN0YXJ0aW5nIHZhbHVlIHF1aXRlIHNtYWxsLCBvbiB0aGUgdGhlb3J5IHRoYXQg YWR2aWNlIHN0cmluZ3Mgd2lsbAorCSAqIG9mdGVuIGJlIHJlbGF0aXZlbHkgc2hvcnQuCisJICov CisJdHNsaWNlLT5uYWxsb2NhdGVkID0gMTY7CisJdHNsaWNlLT5udXNlZCA9IDA7CisJdHNsaWNl LT5lbnRyaWVzID0gcGFsbG9jX2FycmF5KHBncGFfdHJvdmVfZW50cnksIHRzbGljZS0+bmFsbG9j YXRlZCk7CisJdHNsaWNlLT5oYXNoID0gcGdwYV90cm92ZV9lbnRyeV9jcmVhdGUoQ3VycmVudE1l bW9yeUNvbnRleHQsCisJCQkJCQkJCQkJICAgdHNsaWNlLT5uYWxsb2NhdGVkLCBOVUxMKTsKK30K KworLyoKKyAqIEZhc3QgaGFzaCBmdW5jdGlvbiBmb3IgYSBrZXkgY29uc2lzdGluZyBvZiBhbGlh c19uYW1lLCBwYXJ0aXRpb25fbmFtZSwKKyAqIGFuZCBwbGFuX25hbWUuCisgKi8KK3N0YXRpYyB1 aW50MzIKK3BncGFfdHJvdmVfZW50cnlfaGFzaF9rZXkocGdwYV90cm92ZV9lbnRyeV9rZXkga2V5 KQoreworCWZhc3RoYXNoX3N0YXRlIGhzOworCWludAkJCXNwX2xlbjsKKworCWZhc3RoYXNoX2lu aXQoJmhzLCAwKTsKKworCS8qIGFsaWFzX25hbWUgbWF5IG5vdCBiZSBOVUxMICovCisJc3BfbGVu ID0gZmFzdGhhc2hfYWNjdW1fY3N0cmluZygmaHMsIGtleS5hbGlhc19uYW1lKTsKKworCS8qIHBh cnRpdGlvbl9uYW1lIGFuZCBwbGFuX25hbWUsIGhvd2V2ZXIsIGNhbiBiZSBOVUxMICovCisJaWYg KGtleS5wYXJ0aXRpb25fbmFtZSAhPSBOVUxMKQorCQlzcF9sZW4gKz0gZmFzdGhhc2hfYWNjdW1f Y3N0cmluZygmaHMsIGtleS5wYXJ0aXRpb25fbmFtZSk7CisJaWYgKGtleS5wbGFuX25hbWUgIT0g TlVMTCkKKwkJc3BfbGVuICs9IGZhc3RoYXNoX2FjY3VtX2NzdHJpbmcoJmhzLCBrZXkucGxhbl9u YW1lKTsKKworCS8qCisJICogaGFzaGZuX3Vuc3RhYmxlLmggcmVjb21tZW5kcyB1c2luZyBzdHJp bmcgbGVuZ3RoIGFzIHR3ZWFrLiBJdCdzIG5vdAorCSAqIGNsZWFyIHRvIG1lIHdoYXQgdG8gZG8g aWYgdGhlcmUgYXJlIG11bHRpcGxlIHN0cmluZ3MsIHNvIGZvciBub3cgSSdtCisJICoganVzdCB1 c2luZyB0aGUgdG90YWwgb2YgYWxsIG9mIHRoZSBsZW5ndGhzLgorCSAqLworCXJldHVybiBmYXN0 aGFzaF9maW5hbDMyKCZocywgc3BfbGVuKTsKK30KKworLyoKKyAqIExvb2sgZm9yIG1hdGNoaW5n IGVudHJpZXMuCisgKi8KK3N0YXRpYyBCaXRtYXBzZXQgKgorcGdwYV90cm92ZV9zbGljZV9sb29r dXAocGdwYV90cm92ZV9zbGljZSAqdHNsaWNlLCBwZ3BhX2lkZW50aWZpZXIgKnJpZCkKK3sKKwlw Z3BhX3Ryb3ZlX2VudHJ5X2tleSBrZXk7CisJcGdwYV90cm92ZV9lbnRyeV9lbGVtZW50ICplbGVt ZW50OworCUJpdG1hcHNldCAgKnJlc3VsdCA9IE5VTEw7CisKKwlBc3NlcnQocmlkLT5vY2N1cnJl bmNlID49IDEpOworCisJa2V5LmFsaWFzX25hbWUgPSByaWQtPmFsaWFzX25hbWU7CisJa2V5LnBh cnRpdGlvbl9uYW1lID0gcmlkLT5wYXJ0cmVsOworCWtleS5wbGFuX25hbWUgPSByaWQtPnBsYW5f bmFtZTsKKworCWVsZW1lbnQgPSBwZ3BhX3Ryb3ZlX2VudHJ5X2xvb2t1cCh0c2xpY2UtPmhhc2gs IGtleSk7CisKKwlpZiAoZWxlbWVudCAhPSBOVUxMKQorCXsKKwkJaW50CQkJaSA9IC0xOworCisJ CXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJlcihlbGVtZW50LT5pbmRleGVzLCBpKSkgPj0gMCkK KwkJeworCQkJcGdwYV90cm92ZV9lbnRyeSAqZW50cnkgPSAmdHNsaWNlLT5lbnRyaWVzW2ldOwor CisJCQkvKgorCQkJICogV2Uga25vdyB0aGF0IHRoaXMgdGFyZ2V0IG9yIG9uZSBvZiBpdHMgZGVz Y2VuZGFudHMgbWF0Y2hlcyB0aGUKKwkJCSAqIGlkZW50aWZpZXIgb24gdGhlIHRocmVlIGtleSBm aWVsZHMgYWJvdmUsIGJ1dCB3ZSBkb24ndCBrbm93CisJCQkgKiB3aGljaCBkZXNjZW5kYW50IG9y IHdoZXRoZXIgdGhlIG9jY3VycmVuY2UgYW5kIHNjaGVtYSBhbHNvCisJCQkgKiBtYXRjaC4KKwkJ CSAqLworCQkJaWYgKHBncGFfaWRlbnRpZmllcl9tYXRjaGVzX3RhcmdldChyaWQsIGVudHJ5LT50 YXJnZXQpKQorCQkJCXJlc3VsdCA9IGJtc19hZGRfbWVtYmVyKHJlc3VsdCwgaSk7CisJCX0KKwl9 CisKKwlyZXR1cm4gcmVzdWx0OworfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2Fkdmlj ZS9wZ3BhX3Ryb3ZlLmggYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfdHJvdmUuaApuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMjJmZTNhNjIwZjcKLS0tIC9kZXYv bnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfdHJvdmUuaApAQCAtMCwwICsx LDExNCBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogcGdwYV90cm92ZS5oCisgKgkgIEFs bCBvZiB0aGUgYWR2aWNlIGdpdmVuIGZvciBhIHBhcnRpY3VsYXIgcXVlcnksIGFwcHJvcHJpYXRl bHkKKyAqICAgIG9yZ2FuaXplZCBmb3IgY29udmVuaWVudCBhY2Nlc3MuCisgKgorICogQ29weXJp Z2h0IChjKSAyMDE2LTIwMjYsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisg KgorICoJICBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfdHJvdmUuaAorICoKKyAqLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorICovCisjaWZuZGVmIFBHUEFfVFJPVkVfSAorI2RlZmluZSBQR1BBX1RST1ZF X0gKKworI2luY2x1ZGUgInBncGFfYXN0LmgiCisKKyNpbmNsdWRlICJub2Rlcy9iaXRtYXBzZXQu aCIKKwordHlwZWRlZiBzdHJ1Y3QgcGdwYV90cm92ZSBwZ3BhX3Ryb3ZlOworCisvKgorICogRmxh Z3MgdGhhdCBjYW4gYmUgc2V0IG9uIGEgcGdwYV90cm92ZV9lbnRyeSB0byBpbmRpY2F0ZSB3aGF0 IGhhcHBlbmVkIHdoZW4KKyAqIHRyeWluZyB0byBwbGFuIHVzaW5nIGFkdmljZS4KKyAqCisgKiBQ R1BBX1RFX01BVENIX1BBUlRJQUwgbWVhbnMgdGhhdCB3ZSBmb3VuZCBzb21lIHBhcnQgb2YgdGhl IHF1ZXJ5IHRoYXQgYXQKKyAqIGxlYXN0IHBhcnRpYWxseSBtYXRjaGVkIHRoZSB0YXJnZXQ7IGUu Zy4gZ2l2ZW4gSk9JTl9PUkRFUihhIGIpLCB0aGlzIHdvdWxkCisgKiBiZSBzZXQgaWYgd2UgZXZl ciBzYXcgYW55IGpvaW5yZWwgaW5jbHVkaW5nIGVpdGhlciAiYSIgb3IgImIiLgorICoKKyAqIFBH UEFfVEVfTUFUQ0hfRlVMTCBtZWFucyB0aGF0IHdlIGZvdW5kIGFuIGV4YWN0IG1hdGNoIGZvciB0 aGUgdGFyZ2V0OyBlLmcuCisgKiBnaXZlbiBKT0lOX09SREVSKGEgYiksIHRoaXMgd291bGQgYmUg c2V0IGlmIHdlIHNhdyBhIGpvaW5yZWwgY29udGFpbmluZworICogZXhhY3RseSAiYSIgYW5kICJi IiBhbmQgbm90aGluZyBlbHNlLgorICoKKyAqIFBHUEFfVEVfSU5BUFBMSUNBQkxFIG1lYW5zIHRo YXQgdGhlIGFkdmljZSBkb2Vzbid0IHByb3Blcmx5IGFwcGx5IHRvIHRoZQorICogdGFyZ2V0OyBl LmcuIElOREVYX1NDQU4oZm9vIGJhcl9pZHgpIHdvdWxkIGJlIHNvIG1hcmtlZCBpZiBiYXJfaWR4 IGRvZXMgbm90CisgKiBleGlzdCBvbiBmb28uIFRoZSBmYWN0IHRoYXQgdGhpcyBiaXQgaGFzIGJl ZW4gc2V0IGRvZXMgbm90IG1lYW4gdGhhdCB0aGUKKyAqIGFkdmljZSBoYWQgbm8gZWZmZWN0Lgor ICoKKyAqIFBHUEFfVEVfQ09ORkxJQ1RJTkcgbWVhbnMgdGhhdCBhIGNvbmZsaWN0IHdhcyBkZXRl Y3RlZCBiZXR3ZWVuIHdoYXQgdGhpcworICogYWR2aWNlIHdhbnRzIGFuZCB3aGF0IHNvbWUgb3Ro ZXIgcGxhbiBhZHZpY2Ugd2FudHM7IGUuZy4gSk9JTl9PUkRFUihhIGIpCisgKiB3b3VsZCBjb25m bGljdCB3aXRoIEhBU0hfSk9JTihhKSwgYmVjYXVzZSB0aGUgZm9ybWVyIHJlcXVpcmVzICJhIiB0 byBiZSB0aGUKKyAqIG91dGVyIHRhYmxlIHdoaWxlIHRoZSBsYXR0ZXIgcmVxdWlyZXMgaXQgdG8g YmUgdGhlIGlubmVyIHRhYmxlLgorICoKKyAqIFBHUEFfVEVfRkFJTEVEIG1lYW5zIHRoYXQgdGhl IHJlc3VsdGluZyBwbGFuIGRpZCBub3QgY29uZm9ybSB0byB0aGUgYWR2aWNlLgorICovCisjZGVm aW5lIFBHUEFfVEVfTUFUQ0hfUEFSVElBTAkJMHgwMDAxCisjZGVmaW5lIFBHUEFfVEVfTUFUQ0hf RlVMTAkJCTB4MDAwMgorI2RlZmluZSBQR1BBX1RFX0lOQVBQTElDQUJMRQkJMHgwMDA0CisjZGVm aW5lIFBHUEFfVEVfQ09ORkxJQ1RJTkcJCQkweDAwMDgKKyNkZWZpbmUgUEdQQV9URV9GQUlMRUQJ CQkJMHgwMDEwCisKKy8qCisgKiBFYWNoIGVudHJ5IGluIGEgdHJvdmUgb2YgYWR2aWNlIHJlcHJl c2VudHMgdGhlIGFwcGxpY2F0aW9uIG9mIGEgdGFnIHRvCisgKiBhIHNpbmdsZSB0YXJnZXQuCisg Ki8KK3R5cGVkZWYgc3RydWN0IHBncGFfdHJvdmVfZW50cnkKK3sKKwlwZ3BhX2FkdmljZV90YWdf dHlwZSB0YWc7CisJcGdwYV9hZHZpY2VfdGFyZ2V0ICp0YXJnZXQ7CisJaW50CQkJZmxhZ3M7Cit9 IHBncGFfdHJvdmVfZW50cnk7CisKKy8qCisgKiBXaGF0IGtpbmQgb2YgaW5mb3JtYXRpb24gZG9l cyB0aGUgY2FsbGVyIHdhbnQgdG8gZmluZCBpbiBhIHRyb3ZlPworICoKKyAqIFBHUEFfVFJPVkVf TE9PS1VQX1NDQU4gbWVhbnMgd2UncmUgbG9va2luZyBmb3Igc2NhbiBhZHZpY2UuCisgKgorICog UEdQQV9UUk9WRV9MT09LVVBfSk9JTiBtZWFucyB3ZSdyZSBsb29raW5nIGZvciBqb2luLXJlbGF0 ZWQgYWR2aWNlLgorICogVGhpcyBpbmNsdWRlcyBqb2luIG9yZGVyIGFkdmljZSwgam9pbiBtZXRo b2QgYWR2aWNlLCBhbmQgc2VtaWpvaW4tdW5pcXVlbmVzcworICogYWR2aWNlLgorICoKKyAqIFBH UEFfVFJPVkVfTE9PS1VQX1JFTCBtZWFucyB3ZSdyZSBsb29raW5nIGZvciBnZW5lcmFsIGFkdmlj ZSBhYm91dCB0aGlzCisgKiBhIFJlbE9wdEluZm8gdGhhdCBtYXkgY29ycmVzcG9uZCB0byBlaXRo ZXIgYSBzY2FuIG9yIGEgam9pbi4gVGhpcyBpbmNsdWRlcworICogZ2F0aGVyLXJlbGF0ZWQgYWR2 aWNlIGFuZCBwYXJ0aXRpb253aXNlIGFkdmljZS4gTm90ZSB0aGF0IHBhcnRpdGlvbndpc2UKKyAq IGFkdmljZSBtaWdodCBzZWVtIGxpa2Ugam9pbiBhZHZpY2UsIGJ1dCB0aGF0J3Mgbm90IGEgaGVs cGZ1bCB3YXkgb2Ygdmlld2luZworICogdGhlIG1hdHRlciBiZWNhdXNlICgxKSBwYXJ0aXRpb253 aXNlIGFkdmljZSBpcyBhbHNvIHJlbGV2YW50IGF0IHRoZSBzY2FuCisgKiBsZXZlbCBhbmQgKDIp IG90aGVyIHR5cGVzIG9mIGpvaW4gYWR2aWNlIGFmZmVjdCBvbmx5IHdoYXQgdG8gZG8gZnJvbQor ICogam9pbl9wYXRoX3NldHVwX2hvb2ssIGJ1dCBwYXJ0aXRpb253aXNlIGFkdmljZSBhZmZlY3Rz IHdoYXQgdG8gZG8gaW4KKyAqIGpvaW5yZWxfc2V0dXBfaG9vay4KKyAqLwordHlwZWRlZiBlbnVt IHBncGFfdHJvdmVfbG9va3VwX3R5cGUKK3sKKwlQR1BBX1RST1ZFX0xPT0tVUF9KT0lOLAorCVBH UEFfVFJPVkVfTE9PS1VQX1JFTCwKKwlQR1BBX1RST1ZFX0xPT0tVUF9TQ0FOCit9IHBncGFfdHJv dmVfbG9va3VwX3R5cGU7CisKKy8qCisgKiBUaGlzIHN0cnVjdCBpcyB1c2VkIHRvIHN0b3JlIHRo ZSByZXN1bHQgb2YgYSB0cm92ZSBsb29rdXAuIEZvciBlYWNoIG1lbWJlcgorICogb2YgImluZGV4 ZXMiLCB0aGUgZW50cnkgYXQgdGhlIGNvcnJlc3BvbmRpbmcgb2Zmc2V0IHdpdGhpbiAiZW50cmll cyIgaXMgb25lCisgKiBvZiB0aGUgcmVzdWx0cy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgcGdwYV90 cm92ZV9yZXN1bHQKK3sKKwlwZ3BhX3Ryb3ZlX2VudHJ5ICplbnRyaWVzOworCUJpdG1hcHNldCAg KmluZGV4ZXM7Cit9IHBncGFfdHJvdmVfcmVzdWx0OworCitleHRlcm4gcGdwYV90cm92ZSAqcGdw YV9idWlsZF90cm92ZShMaXN0ICphZHZpY2VfaXRlbXMpOworZXh0ZXJuIHZvaWQgcGdwYV90cm92 ZV9sb29rdXAocGdwYV90cm92ZSAqdHJvdmUsCisJCQkJCQkJICBwZ3BhX3Ryb3ZlX2xvb2t1cF90 eXBlIHR5cGUsCisJCQkJCQkJICBpbnQgbnJpZHMsCisJCQkJCQkJICBwZ3BhX2lkZW50aWZpZXIg KnJpZHMsCisJCQkJCQkJICBwZ3BhX3Ryb3ZlX3Jlc3VsdCAqcmVzdWx0KTsKK2V4dGVybiB2b2lk IHBncGFfdHJvdmVfbG9va3VwX2FsbChwZ3BhX3Ryb3ZlICp0cm92ZSwKKwkJCQkJCQkJICBwZ3Bh X3Ryb3ZlX2xvb2t1cF90eXBlIHR5cGUsCisJCQkJCQkJCSAgcGdwYV90cm92ZV9lbnRyeSAqKmVu dHJpZXMsCisJCQkJCQkJCSAgaW50ICpuZW50cmllcyk7CitleHRlcm4gY2hhciAqcGdwYV9jc3Ry aW5nX3Ryb3ZlX2VudHJ5KHBncGFfdHJvdmVfZW50cnkgKmVudHJ5KTsKK2V4dGVybiB2b2lkIHBn cGFfdHJvdmVfc2V0X2ZsYWdzKHBncGFfdHJvdmVfZW50cnkgKmVudHJpZXMsCisJCQkJCQkJCSBC aXRtYXBzZXQgKmluZGV4ZXMsIGludCBmbGFncyk7CitleHRlcm4gdm9pZCBwZ3BhX3Ryb3ZlX2Fw cGVuZF9mbGFncyhTdHJpbmdJbmZvIGJ1ZiwgaW50IGZsYWdzKTsKKworI2VuZGlmCmRpZmYgLS1n aXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfd2Fsa2VyLmMgYi9jb250cmliL3BnX3Bs YW5fYWR2aWNlL3BncGFfd2Fsa2VyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMDAuLmI5NWJhN2E3NWZhCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2Fk dmljZS9wZ3BhX3dhbGtlci5jCkBAIC0wLDAgKzEsMTAyOSBAQAorLyotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgKgorICogcGdwYV93YWxrZXIuYworICoJICBNYWluIGVudHJ5cG9pbnRzIGZvciBhbmFseXpp bmcgYSBwbGFuIHRvIGdlbmVyYXRlIGFuIGFkdmljZSBzdHJpbmcKKyAqCisgKiBDb3B5cmlnaHQg KGMpIDIwMTYtMjAyNiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisg KgkgIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV93YWxrZXIuYworICoKKyAqLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorICovCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgInBncGFfam9p bi5oIgorI2luY2x1ZGUgInBncGFfc2Nhbi5oIgorI2luY2x1ZGUgInBncGFfd2Fsa2VyLmgiCisK KyNpbmNsdWRlICJub2Rlcy9wbGFubm9kZXMuaCIKKyNpbmNsdWRlICJwYXJzZXIvcGFyc2V0cmVl LmgiCisjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCisKK3N0YXRpYyB2b2lkIHBncGFfd2Fs a19yZWN1cnNpdmVseShwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwgUGxhbiAqcGxh biwKKwkJCQkJCQkJICBib29sIHdpdGhpbl9qb2luX3Byb2JsZW0sCisJCQkJCQkJCSAgcGdwYV9q b2luX3Vucm9sbGVyICpqb2luX3Vucm9sbGVyLAorCQkJCQkJCQkgIExpc3QgKmFjdGl2ZV9xdWVy eV9mZWF0dXJlcywKKwkJCQkJCQkJICBib29sIGJlbmVhdGhfYW55X2dhdGhlcik7CitzdGF0aWMg Qml0bWFwc2V0ICpwZ3BhX3Byb2Nlc3NfdW5yb2xsZWRfam9pbihwZ3BhX3BsYW5fd2Fsa2VyX2Nv bnRleHQgKndhbGtlciwKKwkJCQkJCQkJCQkJIHBncGFfdW5yb2xsZWRfam9pbiAqdWpvaW4pOwor CitzdGF0aWMgcGdwYV9xdWVyeV9mZWF0dXJlICpwZ3BhX2FkZF9mZWF0dXJlKHBncGFfcGxhbl93 YWxrZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJCQkJCQkJCQlwZ3BhX3FmX3R5cGUgdHlwZSwKKwkJ CQkJCQkJCQkJUGxhbiAqcGxhbik7CisKK3N0YXRpYyB2b2lkIHBncGFfcWZfYWRkX3J0aShMaXN0 ICphY3RpdmVfcXVlcnlfZmVhdHVyZXMsIEluZGV4IHJ0aSk7CitzdGF0aWMgdm9pZCBwZ3BhX3Fm X2FkZF9ydGlzKExpc3QgKmFjdGl2ZV9xdWVyeV9mZWF0dXJlcywgQml0bWFwc2V0ICpyZWxpZHMp Oworc3RhdGljIHZvaWQgcGdwYV9xZl9hZGRfcGxhbl9ydGlzKExpc3QgKmFjdGl2ZV9xdWVyeV9m ZWF0dXJlcywgUGxhbiAqcGxhbiwKKwkJCQkJCQkJICBMaXN0ICpydGFibGUpOworCitzdGF0aWMg Ym9vbCBwZ3BhX3dhbGtlcl9qb2luX29yZGVyX21hdGNoZXMocGdwYV91bnJvbGxlZF9qb2luICp1 am9pbiwKKwkJCQkJCQkJCQkgICBJbmRleCBydGFibGVfbGVuZ3RoLAorCQkJCQkJCQkJCSAgIHBn cGFfaWRlbnRpZmllciAqcnRfaWRlbnRpZmllcnMsCisJCQkJCQkJCQkJICAgcGdwYV9hZHZpY2Vf dGFyZ2V0ICp0YXJnZXQsCisJCQkJCQkJCQkJICAgYm9vbCB0b3BsZXZlbCk7CitzdGF0aWMgYm9v bCBwZ3BhX3dhbGtlcl9qb2luX29yZGVyX21hdGNoZXNfbWVtYmVyKHBncGFfam9pbl9tZW1iZXIg Km1lbWJlciwKKwkJCQkJCQkJCQkJCSAgSW5kZXggcnRhYmxlX2xlbmd0aCwKKwkJCQkJCQkJCQkJ CSAgcGdwYV9pZGVudGlmaWVyICpydF9pZGVudGlmaWVycywKKwkJCQkJCQkJCQkJCSAgcGdwYV9h ZHZpY2VfdGFyZ2V0ICp0YXJnZXQpOworc3RhdGljIHBncGFfc2NhbiAqcGdwYV93YWxrZXJfZmlu ZF9zY2FuKHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJCQkJCQkJCXBncGFf c2Nhbl9zdHJhdGVneSBzdHJhdGVneSwKKwkJCQkJCQkJCQlCaXRtYXBzZXQgKnJlbGlkcyk7Citz dGF0aWMgYm9vbCBwZ3BhX3dhbGtlcl9pbmRleF90YXJnZXRfbWF0Y2hlc19wbGFuKHBncGFfaW5k ZXhfdGFyZ2V0ICppdGFyZ2V0LAorCQkJCQkJCQkJCQkJICBQbGFuICpwbGFuKTsKK3N0YXRpYyBi b29sIHBncGFfd2Fsa2VyX2NvbnRhaW5zX2ZlYXR1cmUocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0 ICp3YWxrZXIsCisJCQkJCQkJCQkJIHBncGFfcWZfdHlwZSB0eXBlLAorCQkJCQkJCQkJCSBCaXRt YXBzZXQgKnJlbGlkcyk7CitzdGF0aWMgYm9vbCBwZ3BhX3dhbGtlcl9jb250YWluc19qb2luKHBn cGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJCQkJCQkJICBwZ3BhX2pvaW5fc3Ry YXRlZ3kgc3RyYXRlZ3ksCisJCQkJCQkJCQkgIEJpdG1hcHNldCAqcmVsaWRzKTsKK3N0YXRpYyBi b29sIHBncGFfd2Fsa2VyX2NvbnRhaW5zX25vX2dhdGhlcihwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRl eHQgKndhbGtlciwKKwkJCQkJCQkJCQkgICBCaXRtYXBzZXQgKnJlbGlkcyk7CisKKy8qCisgKiBU b3AtbGV2ZWwgZW50cnlwb2ludCBmb3IgdGhlIHBsYW4gdHJlZSB3YWxrLgorICoKKyAqIFBvcHVs YXRlcyB3YWxrZXIgYmFzZWQgb24gYSB0cmF2ZXJzYWwgb2YgdGhlIFBsYW4gdHJlZXMgaW4gcHN0 bXQuCisgKgorICogc2pfdW5pcXVlX3JlbHMgaXMgYSBsaXN0IG9mIHBncGFfc2pfdW5pcXVlX3Jl bCBvYmplY3RzLCBvbmUgZm9yIGVhY2gKKyAqIHJlbGF0aW9uIHdlIGNvbnNpZGVyZWQgbWFraW5n IHVuaXF1ZSBhcyBwYXJ0IG9mIHNlbWlqb2luIHBsYW5uaW5nLgorICovCit2b2lkCitwZ3BhX3Bs YW5fd2Fsa2VyKHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLCBQbGFubmVkU3RtdCAq cHN0bXQsCisJCQkJIExpc3QgKnNqX3VuaXF1ZV9yZWxzKQoreworCUxpc3RDZWxsICAgKmxjOwor CUxpc3QJICAgKnNqX3VuaXF1ZV9ydGlzID0gTlVMTDsKKwlMaXN0CSAgICpzal9ub251bmlxdWVf cWZzID0gTlVMTDsKKworCS8qIEluaXRpYWxpemF0aW9uLiAqLworCW1lbXNldCh3YWxrZXIsIDAs IHNpemVvZihwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQpKTsKKwl3YWxrZXItPnBzdG10ID0gcHN0 bXQ7CisKKwkvKiBXYWxrIHRoZSBtYWluIHBsYW4gdHJlZS4gKi8KKwlwZ3BhX3dhbGtfcmVjdXJz aXZlbHkod2Fsa2VyLCBwc3RtdC0+cGxhblRyZWUsIGZhbHNlLCBOVUxMLCBOSUwsIGZhbHNlKTsK KworCS8qIE1haW4gcGxhbiB0cmVlIHdhbGsgd29uJ3QgcmVhY2ggc3VicGxhbnMsIHNvIHdhbGsg dGhvc2UuICovCisJZm9yZWFjaChsYywgcHN0bXQtPnN1YnBsYW5zKQorCXsKKwkJUGxhbgkgICAq cGxhbiA9IGxmaXJzdChsYyk7CisKKwkJaWYgKHBsYW4gIT0gTlVMTCkKKwkJCXBncGFfd2Fsa19y ZWN1cnNpdmVseSh3YWxrZXIsIHBsYW4sIGZhbHNlLCBOVUxMLCBOSUwsIGZhbHNlKTsKKwl9CisK KwkvKiBBZGp1c3QgUlRJcyBmcm9tIHNqX3VuaXF1ZV9yZWxzIGZvciB0aGUgZmxhdHRlbmVkIHJh bmdlIHRhYmxlLiAqLworCWZvcmVhY2hfcHRyKHBncGFfc2pfdW5pcXVlX3JlbCwgdXIsIHNqX3Vu aXF1ZV9yZWxzKQorCXsKKwkJaW50CQkJcnRpbmRleCA9IC0xOworCQlpbnQJCQlydG9mZnNldCA9 IDA7CisJCWJvb2wJCWR1bW15ID0gZmFsc2U7CisJCUJpdG1hcHNldCAgKnJlbGlkcyA9IE5VTEw7 CisKKwkJLyogSWYgdGhpcyBpcyBhIHN1YnBsYW4sIGZpbmQgdGhlIHJhbmdlIHRhYmxlIG9mZnNl dC4gKi8KKwkJaWYgKHVyLT5wbGFuX25hbWUgIT0gTlVMTCkKKwkJeworCQkJZm9yZWFjaF9ub2Rl KFN1YlBsYW5SVEluZm8sIHJ0aW5mbywgcHN0bXQtPnN1YnJ0aW5mb3MpCisJCQl7CisJCQkJaWYg KHN0cmNtcCh1ci0+cGxhbl9uYW1lLCBydGluZm8tPnBsYW5fbmFtZSkgPT0gMCkKKwkJCQl7CisJ CQkJCXJ0b2Zmc2V0ID0gcnRpbmZvLT5ydG9mZnNldDsKKwkJCQkJZHVtbXkgPSBydGluZm8tPmR1 bW15OworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisKKwkJCWlmIChydG9mZnNldCA9PSAwKQor CQkJCWVsb2coRVJST1IsICJubyBydG9mZnNldCBmb3IgcGxhbiAlcyIsIHVyLT5wbGFuX25hbWUp OworCQl9CisKKwkJLyogSWYgdGhpcyBlbnRyeSBwZXJ0YWlucyB0byBhIGR1bW15IHN1YnF1ZXJ5 LCBpZ25vcmUgaXQuICovCisJCWlmIChkdW1teSkKKwkJCWNvbnRpbnVlOworCisJCS8qIE9mZnNl dCBlYWNoIGVudHJ5IGZyb20gdGhlIG9yaWdpbmFsIHNldC4gKi8KKwkJd2hpbGUgKChydGluZGV4 ID0gYm1zX25leHRfbWVtYmVyKHVyLT5yZWxpZHMsIHJ0aW5kZXgpKSA+PSAwKQorCQkJcmVsaWRz ID0gYm1zX2FkZF9tZW1iZXIocmVsaWRzLCBydGluZGV4ICsgcnRvZmZzZXQpOworCisJCS8qIFN0 b3JlIHRoZSByZXN1bHRpbmcgc2V0LiAqLworCQlzal91bmlxdWVfcnRpcyA9IGxhcHBlbmQoc2pf dW5pcXVlX3J0aXMsIHJlbGlkcyk7CisJfQorCisJLyoKKwkgKiBSZW1vdmUgYW55IG5vbi11bmlx dWUgc2VtaWpvaW4gcXVlcnkgZmVhdHVyZXMgZm9yIHdoaWNoIG1ha2luZyB0aGUgcmVsCisJICog dW5pcXVlIHdhc24ndCBjb25zaWRlcmVkLgorCSAqLworCWZvcmVhY2hfcHRyKHBncGFfcXVlcnlf ZmVhdHVyZSwgcWYsCisJCQkJd2Fsa2VyLT5xdWVyeV9mZWF0dXJlc1tQR1BBUUZfU0VNSUpPSU5f Tk9OX1VOSVFVRV0pCisJeworCQlpZiAobGlzdF9tZW1iZXIoc2pfdW5pcXVlX3J0aXMsIHFmLT5y ZWxpZHMpKQorCQkJc2pfbm9udW5pcXVlX3FmcyA9IGxhcHBlbmQoc2pfbm9udW5pcXVlX3Fmcywg cWYpOworCX0KKwl3YWxrZXItPnF1ZXJ5X2ZlYXR1cmVzW1BHUEFRRl9TRU1JSk9JTl9OT05fVU5J UVVFXSA9IHNqX25vbnVuaXF1ZV9xZnM7CisKKwkvKgorCSAqIElmIHdlIGZpbmQgYW55IGNhc2Vz IHdoZXJlIGFuYWx5c2lzIG9mIHRoZSBQbGFuIHRyZWUgc2hvd3MgdGhhdCB0aGUKKwkgKiBzZW1p am9pbiB3YXMgbWFkZSB1bmlxdWUgYnV0IHRoaXMgcG9zc2liaWxpdHkgd2FzIG5ldmVyIG9ic2Vy dmVkIHRvIGJlCisJICogY29uc2lkZXJlZCBkdXJpbmcgcGxhbm5pbmcsIHRoZW4gd2UgaGF2ZSBh IGJ1ZyBzb21ld2hlcmUuCisJICovCisJZm9yZWFjaF9wdHIocGdwYV9xdWVyeV9mZWF0dXJlLCBx ZiwKKwkJCQl3YWxrZXItPnF1ZXJ5X2ZlYXR1cmVzW1BHUEFRRl9TRU1JSk9JTl9VTklRVUVdKQor CXsKKwkJaWYgKCFsaXN0X21lbWJlcihzal91bmlxdWVfcnRpcywgcWYtPnJlbGlkcykpCisJCXsK KwkJCVN0cmluZ0luZm9EYXRhIGJ1ZjsKKworCQkJaW5pdFN0cmluZ0luZm8oJmJ1Zik7CisJCQlv dXRCaXRtYXBzZXQoJmJ1ZiwgcWYtPnJlbGlkcyk7CisJCQllbG9nKEVSUk9SLAorCQkJCSAidW5p cXVlIHNlbWlqb2luIGZvdW5kIGZvciByZWxpZHMgJXMgYnV0IG5vdCBvYnNlcnZlZCBkdXJpbmcg cGxhbm5pbmciLAorCQkJCSBidWYuZGF0YSk7CisJCX0KKwl9CisKKwkvKgorCSAqIEl0J3MgcG9z c2libGUgZm9yIGEgR2F0aGVyIG9yIEdhdGhlciBNZXJnZSBxdWVyeSBmZWF0dXJlIHRvIGZpbmQg bm8KKwkgKiBSVElzIHdoZW4gcGFydGl0aW9ud2lzZSBhZ2dyZWdhdGlvbiBpcyBpbiB1c2UuIFdl IHNob3VsZG4ndCBlbWl0CisJICogc29tZXRoaW5nIGxpa2UgR0FUSEVSX01FUkdFKCgpKSwgc28g aW5zdGVhZCBlbWl0IG5vdGhpbmcuIFRoaXMgbWVhbnMKKwkgKiB0aGF0IHdlIHdvbid0IGFkdmlz ZSBlaXRoZXIgR0FUSEVSIG9yIEdBVEhFUl9NRVJHRSBvciBOT19HQVRIRVIgaW4gc3VjaAorCSAq IGNhc2VzLCB3aGljaCBtaWdodCBiZSBzb21ldGhpbmcgd2Ugd2FudCB0byBpbXByb3ZlIGluIHRo ZSBmdXR1cmUuCisJICoKKwkgKiAoU2hvdWxkIHRoZSBQYXJ0aWFsIEFnZ3JlZ2F0ZXMgaW4gc3Vj aCBhIGNhc2UgYmUgY3JlYXRlZCBpbiBhbgorCSAqIFVQUEVSUkVMX0dST1VQX0FHRyB3aXRoIGEg bm9uLWVtcHR5IHJlbGlkIHNldD8gUmlnaHQgbm93IHRoYXQgZG9lc24ndAorCSAqIGhhcHBlbiwg YnV0IGl0IHNlZW1zIGxpa2UgaXQgd291bGQgbWFrZSBsaWZlIGVhc2llciBmb3IgdXMgaWYgaXQg ZGlkLikKKwkgKi8KKwlmb3IgKGludCB0ID0gMDsgdCA8IE5VTV9QR1BBX1FGX1RZUEVTOyArK3Qp CisJeworCQlMaXN0CSAgICpxdWVyeV9mZWF0dXJlcyA9IE5JTDsKKworCQlmb3JlYWNoX3B0cihw Z3BhX3F1ZXJ5X2ZlYXR1cmUsIHFmLCB3YWxrZXItPnF1ZXJ5X2ZlYXR1cmVzW3RdKQorCQl7CisJ CQlpZiAocWYtPnJlbGlkcyAhPSBOVUxMKQorCQkJCXF1ZXJ5X2ZlYXR1cmVzID0gbGFwcGVuZChx dWVyeV9mZWF0dXJlcywgcWYpOworCQkJZWxzZQorCQkJCUFzc2VydCh0ID09IFBHUEFRRl9HQVRI RVIgfHwgdCA9PSBQR1BBUUZfR0FUSEVSX01FUkdFKTsKKwkJfQorCisJCXdhbGtlci0+cXVlcnlf ZmVhdHVyZXNbdF0gPSBxdWVyeV9mZWF0dXJlczsKKwl9Cit9CisKKy8qCisgKiBNYWluIHdvcmto b3JzZSBmb3IgdGhlIHBsYW4gdHJlZSB3YWxrLgorICoKKyAqIElmIHdpdGhpbl9qb2luX3Byb2Js ZW0gaXMgdHJ1ZSwgd2UgZW5jb3VudGVyZWQgYSBqb2luIGF0IHNvbWUgaGlnaGVyIGxldmVsCisg KiBvZiB0aGUgdHJlZSB3YWxrIGFuZCBoYXZlbid0IHlldCBkZXNjZW5kZWQgb3V0IG9mIHRoZSBw b3J0aW9uIG9mIHRoZSBwbGFuCisgKiB0cmVlIHRoYXQgaXMgcGFydCBvZiB0aGF0IHNhbWUgam9p biBwcm9ibGVtLiBXZSdyZSBubyBsb25nZXIgaW4gdGhlIHNhbWUKKyAqIGpvaW4gcHJvYmxlbSBp ZiAoMSkgd2UgY3Jvc3MgaW50byBhIGRpZmZlcmVudCBzdWJxdWVyeSBvciAoMikgd2UgZGVzY2Vu ZAorICogdGhyb3VnaCBhbiBBcHBlbmQgb3IgTWVyZ2VBcHBlbmQgbm9kZSwgYmVsb3cgd2hpY2gg YW55IGZ1cnRoZXIgam9pbnMgd291bGQKKyAqIGJlIHBhcnRpdGlvbndpc2Ugam9pbnMgcGxhbm5l ZCBzZXBhcmF0ZWx5IGZyb20gdGhlIG91dGVyIGpvaW4gcHJvYmxlbS4KKyAqCisgKiBJZiBqb2lu X3Vucm9sbGVyICE9IE5VTEwsIHRoZSBqb2luIHVucm9sbGVyIGNvZGUgZXhwZWN0cyB1cyB0byBm aW5kIGEgam9pbgorICogdGhhdCBzaG91bGQgYmUgdW5yb2xsZWQgaW50byB0aGF0IG9iamVjdC4g VGhpcyBpbXBsaWVzIHRoYXQgd2UncmUgd2l0aGluIGEKKyAqIGpvaW4gcHJvYmxlbSwgYnV0IHRo ZSByZXZlcnNlIGlzIG5vdCB0cnVlOiB3aGVuIHdlJ3ZlIHRyYXZlcnNlZCBhbGwgdGhlCisgKiBq b2lucyBidXQgYXJlIHN0aWxsIGxvb2tpbmcgZm9yIHRoZSBzY2FuIHRoYXQgaXMgdGhlIGxlYWYg b2YgdGhlIGpvaW4gdHJlZSwKKyAqIGpvaW5fdW5yb2xsZXIgd2lsbCBiZSBOVUxMIGJ1dCB3aXRo aW5fam9pbl9wcm9ibGVtIHdpbGwgYmUgdHJ1ZS4KKyAqCisgKiBFYWNoIGVsZW1lbnQgb2YgYWN0 aXZlX3F1ZXJ5X2ZlYXR1cmVzIGNvcnJlc3BvbmRzIHRvIHNvbWUgaXRlbSBvZiBhZHZpY2UKKyAq IHRoYXQgbmVlZHMgdG8gZW51bWVyYXRlIGFsbCB0aGUgcmVsYXRpb25zIGl0IGFmZmVjdHMuIFdl IGFkZCBSVElzIHdlIGZpbmQKKyAqIGR1cmluZyB0cmVlIHRyYXZlcnNhbCB0byBlYWNoIG9mIHRo ZXNlIHF1ZXJ5IGZlYXR1cmVzLgorICoKKyAqIElmIGJlbmVhdGhfYW55X2dhdGhlciA9PSB0cnVl LCBzb21lIGhpZ2hlciBsZXZlbCBvZiB0aGUgdHJlZSB0cmF2ZXJzYWwgZm91bmQKKyAqIGEgR2F0 aGVyIG9yIEdhdGhlciBNZXJnZSBub2RlLgorICovCitzdGF0aWMgdm9pZAorcGdwYV93YWxrX3Jl Y3Vyc2l2ZWx5KHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLCBQbGFuICpwbGFuLAor CQkJCQkgIGJvb2wgd2l0aGluX2pvaW5fcHJvYmxlbSwKKwkJCQkJICBwZ3BhX2pvaW5fdW5yb2xs ZXIgKmpvaW5fdW5yb2xsZXIsCisJCQkJCSAgTGlzdCAqYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzLAor CQkJCQkgIGJvb2wgYmVuZWF0aF9hbnlfZ2F0aGVyKQoreworCXBncGFfam9pbl91bnJvbGxlciAq b3V0ZXJfam9pbl91bnJvbGxlciA9IE5VTEw7CisJcGdwYV9qb2luX3Vucm9sbGVyICppbm5lcl9q b2luX3Vucm9sbGVyID0gTlVMTDsKKwlib29sCQlqb2luX3Vucm9sbGVyX3RvcGxldmVsID0gZmFs c2U7CisJTGlzdENlbGwgICAqbGM7CisJTGlzdAkgICAqZXh0cmFwbGFucyA9IE5JTDsKKwlMaXN0 CSAgICplbGlkZWRfbm9kZXMgPSBOSUw7CisKKwlBc3NlcnQod2l0aGluX2pvaW5fcHJvYmxlbSB8 fCBqb2luX3Vucm9sbGVyID09IE5VTEwpOworCisJLyoKKwkgKiBDaGVjayB0aGUgZnV0dXJlX3F1 ZXJ5X2ZlYXR1cmVzIGxpc3QgdG8gc2VlIHdoZXRoZXIgdGhpcyB3YXMgcHJldmlvdXNseQorCSAq IGlkZW50aWZpZWQgYXMgYSBwbGFuIG5vZGUgdGhhdCBuZWVkcyB0byBiZSB0cmVhdGVkIGFzIGEg cXVlcnkgZmVhdHVyZS4KKwkgKiBXZSBtdXN0IGRvIHRoaXMgYmVmb3JlIGhhbmRsaW5nIGVsaWRl ZCBub2RlcywgYmVjYXVzZSBpZiB0aGVyZSdzIGFuCisJICogZWxpZGVkIG5vZGUgYXNzb2NpYXRl ZCB3aXRoIGEgZnV0dXJlIHF1ZXJ5IGZlYXR1cmUsIHRoZSBSVElzIGFzc29jaWF0ZWQKKwkgKiB3 aXRoIHRoZSBlbGlkZWQgbm9kZSBzaG91bGQgYmUgdGhlIG9ubHkgb25lcyBhdHRyaWJ1dGVkIHRv IHRoZSBxdWVyeQorCSAqIGZlYXR1cmUuCisJICovCisJZm9yZWFjaF9wdHIocGdwYV9xdWVyeV9m ZWF0dXJlLCBxZiwgd2Fsa2VyLT5mdXR1cmVfcXVlcnlfZmVhdHVyZXMpCisJeworCQlpZiAocWYt PnBsYW4gPT0gcGxhbikKKwkJeworCQkJYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzID0gbGlzdF9jb3B5 KGFjdGl2ZV9xdWVyeV9mZWF0dXJlcyk7CisJCQlhY3RpdmVfcXVlcnlfZmVhdHVyZXMgPSBsYXBw ZW5kKGFjdGl2ZV9xdWVyeV9mZWF0dXJlcywgcWYpOworCQkJd2Fsa2VyLT5mdXR1cmVfcXVlcnlf ZmVhdHVyZXMgPQorCQkJCWxpc3RfZGVsZXRlX3B0cih3YWxrZXItPmZ1dHVyZV9xdWVyeV9mZWF0 dXJlcywgcWYpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwkvKgorCSAqIEZpbmQgYWxsIGVsaWRl ZCBub2RlcyBmb3IgdGhpcyBQbGFuIG5vZGUuCisJICovCisJZm9yZWFjaF9ub2RlKEVsaWRlZE5v ZGUsIG4sIHdhbGtlci0+cHN0bXQtPmVsaWRlZE5vZGVzKQorCXsKKwkJaWYgKG4tPnBsYW5fbm9k ZV9pZCA9PSBwbGFuLT5wbGFuX25vZGVfaWQpCisJCQllbGlkZWRfbm9kZXMgPSBsYXBwZW5kKGVs aWRlZF9ub2Rlcywgbik7CisJfQorCisJLyogSWYgd2UgZm91bmQgYW55IGVsaWRlZF9ub2Rlcywg aGFuZGxlIHRoZW0uICovCisJaWYgKGVsaWRlZF9ub2RlcyAhPSBOSUwpCisJeworCQlpbnQJCQlu dW1fZWxpZGVkX25vZGVzID0gbGlzdF9sZW5ndGgoZWxpZGVkX25vZGVzKTsKKwkJRWxpZGVkTm9k ZSAqbGFzdF9lbGlkZWRfbm9kZTsKKworCQkvKgorCQkgKiBSVElzIGZvciB0aGUgZmluYWwgLS0g YW5kIHRodXMgbG9naWNhbGx5IHVwcGVybW9zdCAtLSBlbGlkZWQgbm9kZQorCQkgKiBzaG91bGQg YmUgY29sbGVjdGVkIGZvciBxdWVyeSBmZWF0dXJlcyBwYXNzZWQgZG93biBieSB0aGUgY2FsbGVy LgorCQkgKiBIb3dldmVyLCBlbGlkZWQgbm9kZXMgYWN0IGFzIGJhcnJpZXJzIHRvIHF1ZXJ5IGZl YXR1cmVzLCB3aGljaAorCQkgKiBtZWFucyB0aGF0ICgxKSB0aGUgcmVtYWluaW5nIGVsaWRlZCBu b2RlcywgaWYgYW55LCBzaG91bGQgYmUKKwkJICogaWdub3JlZCBmb3IgcHVycG9zZXMgb2YgcXVl cnkgZmVhdHVyZXMgYW5kICgyKSB0aGUgbGlzdCBvZiBhY3RpdmUKKwkJICogcXVlcnkgZmVhdHVy ZXMgc2hvdWxkIGJlIHJlc2V0IHRvIGVtcHR5IHNvIHRoYXQgd2UgZG8gbm90IGFkZCBSVElzCisJ CSAqIGZyb20gdGhlIHBsYW4gbm9kZSB0aGF0IGlzIGxvZ2ljYWxseSBiZW5lYXRoIHRoZSBlbGlk ZWQgbm9kZSB0byB0aGUKKwkJICogcXVlcnkgZmVhdHVyZXMgcGFzc2VkIGRvd24gZnJvbSB0aGUg Y2FsbGVyLgorCQkgKi8KKwkJbGFzdF9lbGlkZWRfbm9kZSA9IGxpc3RfbnRoKGVsaWRlZF9ub2Rl cywgbnVtX2VsaWRlZF9ub2RlcyAtIDEpOworCQlwZ3BhX3FmX2FkZF9ydGlzKGFjdGl2ZV9xdWVy eV9mZWF0dXJlcywKKwkJCQkJCSBwZ3BhX2ZpbHRlcl9vdXRfam9pbl9yZWxpZHMobGFzdF9lbGlk ZWRfbm9kZS0+cmVsaWRzLAorCQkJCQkJCQkJCQkJCSB3YWxrZXItPnBzdG10LT5ydGFibGUpKTsK KwkJYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzID0gTklMOworCisJCS8qCisJCSAqIElmIHdlJ3JlIHdp dGhpbiBhIGpvaW4gcHJvYmxlbSwgdGhlIGpvaW5fdW5yb2xsZXIgaXMgcmVzcG9uc2libGUKKwkJ ICogZm9yIGJ1aWxkaW5nIHRoZSBzY2FuIGZvciB0aGUgZmluYWwgZWxpZGVkIG5vZGUsIHNvIHRo cm93IGl0IG91dC4KKwkJICovCisJCWlmICh3aXRoaW5fam9pbl9wcm9ibGVtKQorCQkJZWxpZGVk X25vZGVzID0gbGlzdF90cnVuY2F0ZShlbGlkZWRfbm9kZXMsIG51bV9lbGlkZWRfbm9kZXMgLSAx KTsKKworCQkvKiBCdWlsZCBzY2FucyBmb3IgYWxsIChvciB0aGUgcmVtYWluaW5nKSBlbGlkZWQg bm9kZXMuICovCisJCWZvcmVhY2hfbm9kZShFbGlkZWROb2RlLCBlbGlkZWRfbm9kZSwgZWxpZGVk X25vZGVzKQorCQl7CisJCQkodm9pZCkgcGdwYV9idWlsZF9zY2FuKHdhbGtlciwgcGxhbiwgZWxp ZGVkX25vZGUsCisJCQkJCQkJCSAgIGJlbmVhdGhfYW55X2dhdGhlciwgd2l0aGluX2pvaW5fcHJv YmxlbSk7CisJCX0KKworCQkvKgorCQkgKiBJZiB0aGVyZSB3ZXJlIGFueSBlbGlkZWQgbm9kZXMs IHRoZW4gZXZlcnl0aGluZyBiZW5lYXRoIHRob3NlIG5vZGVzCisJCSAqIGlzIG5vdCBwYXJ0IG9m IHRoZSBzYW1lIGpvaW4gcHJvYmxlbS4KKwkJICoKKwkJICogSW4gbW9yZSBkZXRhaWwsIGlmIGFu IEFwcGVuZCBvciBNZXJnZUFwcGVuZCB3YXMgZWxpZGVkLCB0aGVuIGEKKwkJICogcGFydGl0aW9u d2lzZSBqb2luIHdhcyBjaG9zZW4gYW5kIG9ubHkgYSBzaW5nbGUgY2hpbGQgc3Vydml2ZWQ7IGlm CisJCSAqIGEgU3VicXVlcnlTY2FuIHdhcyBlbGlkZWQsIHRoZSBzdWJxdWVyeSB3YXMgcGxhbm5l ZCB3aXRob3V0CisJCSAqIGZsYXR0ZW5pbmcgaXQgaW50byB0aGUgcGFyZW50LgorCQkgKi8KKwkJ d2l0aGluX2pvaW5fcHJvYmxlbSA9IGZhbHNlOworCQlqb2luX3Vucm9sbGVyID0gTlVMTDsKKwl9 CisKKwkvKgorCSAqIElmIHRoaXMgaXMgYSBHYXRoZXIgb3IgR2F0aGVyIE1lcmdlIG5vZGUsIGRp cmVjdGx5IGFkZCBpdCB0byB0aGUgbGlzdAorCSAqIG9mIGN1cnJlbnRseS1hY3RpdmUgcXVlcnkg ZmVhdHVyZXMuIFdlIG11c3QgZG8gdGhpcyBhZnRlciBoYW5kbGluZworCSAqIGVsaWRlZCBub2Rl cywgc2luY2UgdGhlIEdhdGhlciBvciBHYXRoZXIgTWVyZ2Ugbm9kZSBvY2N1cnMgbG9naWNhbGx5 CisJICogYmVuZWF0aCBhbnkgYXNzb2NpYXRlZCBlbGlkZWQgbm9kZXMuCisJICoKKwkgKiBFeGNl cHRpb246IFdlIGRpc3JlZ2FyZCBhbnkgc2luZ2xlX2NvcHkgR2F0aGVyIG5vZGVzLiBUaGVzZSBh cmUgY3JlYXRlZAorCSAqIGJ5IGRlYnVnX3BhcmFsbGVsX3F1ZXJ5LCBhbmQgaGF2aW5nIHRoZW0g YWZmZWN0IHRoZSBwbGFuIGFkdmljZSBpcworCSAqIGNvdW50ZXJwcm9kdWN0aXZlLCBhcyB0aGUg cmVzdWx0IHdpbGwgYmUgdG8gYWR2aXNlIHRoZSB1c2Ugb2YgYSByZWFsCisJICogR2F0aGVyIG5v ZGUsIHJhdGhlciB0aGFuIGEgc2luZ2xlIGNvcHkgb25lLgorCSAqLworCWlmIChJc0EocGxhbiwg R2F0aGVyKSAmJiAhKChHYXRoZXIgKikgcGxhbiktPnNpbmdsZV9jb3B5KQorCXsKKwkJYWN0aXZl X3F1ZXJ5X2ZlYXR1cmVzID0KKwkJCWxhcHBlbmQobGlzdF9jb3B5KGFjdGl2ZV9xdWVyeV9mZWF0 dXJlcyksCisJCQkJCXBncGFfYWRkX2ZlYXR1cmUod2Fsa2VyLCBQR1BBUUZfR0FUSEVSLCBwbGFu KSk7CisJCWJlbmVhdGhfYW55X2dhdGhlciA9IHRydWU7CisJfQorCWVsc2UgaWYgKElzQShwbGFu LCBHYXRoZXJNZXJnZSkpCisJeworCQlhY3RpdmVfcXVlcnlfZmVhdHVyZXMgPQorCQkJbGFwcGVu ZChsaXN0X2NvcHkoYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzKSwKKwkJCQkJcGdwYV9hZGRfZmVhdHVy ZSh3YWxrZXIsIFBHUEFRRl9HQVRIRVJfTUVSR0UsIHBsYW4pKTsKKwkJYmVuZWF0aF9hbnlfZ2F0 aGVyID0gdHJ1ZTsKKwl9CisKKwkvKgorCSAqIElmIHdlJ3JlIHdpdGhpbiBhIGpvaW4gcHJvYmxl bSwgdGhlIGpvaW4gdW5yb2xsZXIgaXMgcmVzcG9uc2libGUgZm9yCisJICogYnVpbGRpbmcgYW55 IHJlcXVpcmVkIHNjYW4gZm9yIHRoaXMgbm9kZS4gSWYgbm90LCB3ZSBkbyBpdCBoZXJlLgorCSAq LworCWlmICghd2l0aGluX2pvaW5fcHJvYmxlbSkKKwkJKHZvaWQpIHBncGFfYnVpbGRfc2Nhbih3 YWxrZXIsIHBsYW4sIE5VTEwsIGJlbmVhdGhfYW55X2dhdGhlciwgZmFsc2UpOworCisJLyoKKwkg KiBJZiB0aGlzIGpvaW4gbmVlZHMgdG8gYmUgdW5yb2xsZWQgYnV0IHRoZXJlJ3Mgbm8gam9pbiB1 bnJvbGxlciBhbHJlYWR5CisJICogYXZhaWxhYmxlLCBjcmVhdGUgb25lLgorCSAqLworCWlmIChq b2luX3Vucm9sbGVyID09IE5VTEwgJiYgcGdwYV9pc19qb2luKHBsYW4pKQorCXsKKwkJam9pbl91 bnJvbGxlciA9IHBncGFfY3JlYXRlX2pvaW5fdW5yb2xsZXIoKTsKKwkJam9pbl91bnJvbGxlcl90 b3BsZXZlbCA9IHRydWU7CisJCXdpdGhpbl9qb2luX3Byb2JsZW0gPSB0cnVlOworCX0KKworCS8q CisJICogSWYgdGhpcyBqb2luIGlzIHRvIGJlIHVucm9sbGVkLCBwZ3BhX3Vucm9sbF9qb2luKCkg d2lsbCByZXR1cm4gdGhlIGpvaW4KKwkgKiB1bnJvbGxlciBvYmplY3QgdGhhdCBzaG91bGQgYmUg cGFzc2VkIGRvd24gd2hlbiB3ZSByZWN1cnNlIGludG8gdGhlCisJICogb3V0ZXIgYW5kIGlubmVy IHNpZGVzIG9mIHRoZSBwbGFuLgorCSAqLworCWlmIChqb2luX3Vucm9sbGVyICE9IE5VTEwpCisJ CXBncGFfdW5yb2xsX2pvaW4od2Fsa2VyLCBwbGFuLCBiZW5lYXRoX2FueV9nYXRoZXIsIGpvaW5f dW5yb2xsZXIsCisJCQkJCQkgJm91dGVyX2pvaW5fdW5yb2xsZXIsICZpbm5lcl9qb2luX3Vucm9s bGVyKTsKKworCS8qIEFkZCBSVElzIGZyb20gdGhlIHBsYW4gbm9kZSB0byBhbGwgYWN0aXZlIHF1 ZXJ5IGZlYXR1cmVzLiAqLworCXBncGFfcWZfYWRkX3BsYW5fcnRpcyhhY3RpdmVfcXVlcnlfZmVh dHVyZXMsIHBsYW4sIHdhbGtlci0+cHN0bXQtPnJ0YWJsZSk7CisKKwkvKgorCSAqIFJlY3Vyc2Ug aW50byB0aGUgb3V0ZXIgYW5kIGlubmVyIHN1YnRyZWVzLgorCSAqCisJICogQXMgYW4gZXhjZXB0 aW9uLCBpZiB0aGlzIGlzIGEgRm9yZWlnblNjYW4sIGRvbid0IHJlY3Vyc2UuIHBvc3RncmVzX2Zk dworCSAqIHNvbWV0aW1lcyBzdG9yZXMgYW4gRVBRIHJlY2hlY2sgcGxhbiBpbiBwbGFuLT5sZWZ0 dHJlZSwgYnV0IHRoYXQncyBnb2luZworCSAqIHRvIG1lbnRpb24gdGhlIHNhbWUgc2V0IG9mIHJl bGF0aW9ucyBhcyB0aGUgRm9yZWlnblNjYW4gaXRzZWxmLCBhbmQgd2UKKwkgKiBoYXZlIG5vIHdh eSB0byBlbWl0IGFkdmljZSB0YXJnZXRpbmcgdGhlIEVQUSBjYXNlIHZzLiB0aGUgbm9uLUVQUSBj YXNlLgorCSAqIE1vcmVvdmVyLCBpdCdzIG5vdCBlbnRpcmVseSBjbGVhciB3aGF0IG90aGVyIEZE V3MgbWlnaHQgZG8gd2l0aCB0aGUKKwkgKiBsZWZ0IGFuZCByaWdodCBzdWJ0cmVlcy4gTWF5YmUg c29tZSBiZXR0ZXIgaGFuZGxpbmcgaXMgbmVlZGVkIGhlcmUsIGJ1dAorCSAqIGZvciBub3csIHdl IGp1c3QgcHVudC4KKwkgKi8KKwlpZiAoIUlzQShwbGFuLCBGb3JlaWduU2NhbikpCisJeworCQlp ZiAocGxhbi0+bGVmdHRyZWUgIT0gTlVMTCkKKwkJCXBncGFfd2Fsa19yZWN1cnNpdmVseSh3YWxr ZXIsIHBsYW4tPmxlZnR0cmVlLCB3aXRoaW5fam9pbl9wcm9ibGVtLAorCQkJCQkJCQkgIG91dGVy X2pvaW5fdW5yb2xsZXIsIGFjdGl2ZV9xdWVyeV9mZWF0dXJlcywKKwkJCQkJCQkJICBiZW5lYXRo X2FueV9nYXRoZXIpOworCQlpZiAocGxhbi0+cmlnaHR0cmVlICE9IE5VTEwpCisJCQlwZ3BhX3dh bGtfcmVjdXJzaXZlbHkod2Fsa2VyLCBwbGFuLT5yaWdodHRyZWUsIHdpdGhpbl9qb2luX3Byb2Js ZW0sCisJCQkJCQkJCSAgaW5uZXJfam9pbl91bnJvbGxlciwgYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVz LAorCQkJCQkJCQkgIGJlbmVhdGhfYW55X2dhdGhlcik7CisJfQorCisJLyoKKwkgKiBJZiB3ZSBj cmVhdGVkIGEgam9pbiB1bnJvbGxlciB1cCBhYm92ZSwgdGhlbiBpdCdzIGFsc28gb3VyIGpvaW4g dG8gdXNlCisJICogaXQgdG8gYnVpbGQgdGhlIGZpbmFsIHBncGFfdW5yb2xsZWRfam9pbiwgYW5k IHRvIGRlc3Ryb3kgdGhlIG9iamVjdC4KKwkgKi8KKwlpZiAoam9pbl91bnJvbGxlcl90b3BsZXZl bCkKKwl7CisJCXBncGFfdW5yb2xsZWRfam9pbiAqdWpvaW47CisKKwkJdWpvaW4gPSBwZ3BhX2J1 aWxkX3Vucm9sbGVkX2pvaW4od2Fsa2VyLCBqb2luX3Vucm9sbGVyKTsKKwkJd2Fsa2VyLT50b3Bs ZXZlbF91bnJvbGxlZF9qb2lucyA9CisJCQlsYXBwZW5kKHdhbGtlci0+dG9wbGV2ZWxfdW5yb2xs ZWRfam9pbnMsIHVqb2luKTsKKwkJcGdwYV9kZXN0cm95X2pvaW5fdW5yb2xsZXIoam9pbl91bnJv bGxlcik7CisJCSh2b2lkKSBwZ3BhX3Byb2Nlc3NfdW5yb2xsZWRfam9pbih3YWxrZXIsIHVqb2lu KTsKKwl9CisKKwkvKgorCSAqIFNvbWUgcGxhbiB0eXBlcyBjYW4gaGF2ZSBhZGRpdGlvbmFsIGNo aWxkcmVuLiBOb2RlcyBsaWtlIEFwcGVuZCB0aGF0CisJICogY2FuIGhhdmUgYW55IG51bWJlciBv ZiBjaGlsZHJlbiBzdG9yZSB0aGVtIGluIGEgTGlzdDsgYSBTdWJxdWVyeVNjYW4KKwkgKiBqdXN0 IGhhcyBhIGZpZWxkIGZvciBhIHNpbmdsZSBhZGRpdGlvbmFsIFBsYW4uCisJICovCisJc3dpdGNo IChub2RlVGFnKHBsYW4pKQorCXsKKwkJY2FzZSBUX0FwcGVuZDoKKwkJCXsKKwkJCQlBcHBlbmQJ ICAgKmFwbGFuID0gKEFwcGVuZCAqKSBwbGFuOworCisJCQkJZXh0cmFwbGFucyA9IGFwbGFuLT5h cHBlbmRwbGFuczsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFRfTWVyZ2VBcHBlbmQ6CisJCQl7 CisJCQkJTWVyZ2VBcHBlbmQgKm1hcGxhbiA9IChNZXJnZUFwcGVuZCAqKSBwbGFuOworCisJCQkJ ZXh0cmFwbGFucyA9IG1hcGxhbi0+bWVyZ2VwbGFuczsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNl IFRfQml0bWFwQW5kOgorCQkJZXh0cmFwbGFucyA9ICgoQml0bWFwQW5kICopIHBsYW4pLT5iaXRt YXBwbGFuczsKKwkJCWJyZWFrOworCQljYXNlIFRfQml0bWFwT3I6CisJCQlleHRyYXBsYW5zID0g KChCaXRtYXBPciAqKSBwbGFuKS0+Yml0bWFwcGxhbnM7CisJCQlicmVhazsKKwkJY2FzZSBUX1N1 YnF1ZXJ5U2NhbjoKKworCQkJLyoKKwkJCSAqIFdlIGRvbid0IHBhc3MgZG93biBhY3RpdmVfcXVl cnlfZmVhdHVyZXMgYWNyb3NzIGhlcmUsIGJlY2F1c2UKKwkJCSAqIHRob3NlIGFyZSBzcGVjaWZp YyB0byBhIHN1YnF1ZXJ5IGxldmVsLgorCQkJICovCisJCQlwZ3BhX3dhbGtfcmVjdXJzaXZlbHko d2Fsa2VyLCAoKFN1YnF1ZXJ5U2NhbiAqKSBwbGFuKS0+c3VicGxhbiwKKwkJCQkJCQkJICAwLCBO VUxMLCBOSUwsIGJlbmVhdGhfYW55X2dhdGhlcik7CisJCQlicmVhazsKKwkJY2FzZSBUX0N1c3Rv bVNjYW46CisJCQlleHRyYXBsYW5zID0gKChDdXN0b21TY2FuICopIHBsYW4pLT5jdXN0b21fcGxh bnM7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCX0KKworCS8qIElmIHdlIGZv dW5kIGEgbGlzdCBvZiBleHRyYSBjaGlsZHJlbiwgaXRlcmF0ZSBvdmVyIGl0LiAqLworCWZvcmVh Y2gobGMsIGV4dHJhcGxhbnMpCisJeworCQlQbGFuCSAgICpzdWJwbGFuID0gbGZpcnN0KGxjKTsK KworCQlwZ3BhX3dhbGtfcmVjdXJzaXZlbHkod2Fsa2VyLCBzdWJwbGFuLCBmYWxzZSwgTlVMTCwg TklMLAorCQkJCQkJCSAgYmVuZWF0aF9hbnlfZ2F0aGVyKTsKKwl9Cit9CisKKy8qCisgKiBQZXJm b3JtIGZpbmFsIHByb2Nlc3Npbmcgb2YgYSBuZXdseS1jb25zdHJ1Y3RlZCBwZ3BhX3Vucm9sbGVk X2pvaW4uIFRoaXMKKyAqIG9ubHkgbmVlZHMgdG8gYmUgY2FsbGVkIGZvciB0b3BsZXZlbCBwZ3Bh X3Vucm9sbGVkX2pvaW4gb2JqZWN0cywgc2luY2UgaXQKKyAqIHJlY3Vyc2VzIHRvIHN1Yi1qb2lu cyBhcyBuZWVkZWQuCisgKgorICogT3VyIGdvYWwgaXMgdG8gYWRkIHRoZSBzZXQgb2YgaW5uZXIg cmVsaWRzIHRvIHRoZSByZWxldmFudCBqb2luX3N0cmF0ZWdpZXMKKyAqIGxpc3QsIGFuZCB0byBk byB0aGUgc2FtZSBmb3IgYW55IHN1Yi1qb2lucy4gVG8gdGhhdCBlbmQsIHRoZSByZXR1cm4gdmFs dWUKKyAqIGlzIHRoZSBzZXQgb2YgcmVsaWRzIGZvdW5kIGJlbmVhdGggdGhlIGpvaW4sIGJ1dCBp dCBpcyBleHBlY3RlZCB0aGF0CisgKiB0aGUgdG9wbGV2ZWwgY2FsbGVyIHdpbGwgaWdub3JlIHRo aXMuCisgKi8KK3N0YXRpYyBCaXRtYXBzZXQgKgorcGdwYV9wcm9jZXNzX3Vucm9sbGVkX2pvaW4o cGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsCisJCQkJCQkgICBwZ3BhX3Vucm9sbGVk X2pvaW4gKnVqb2luKQoreworCUJpdG1hcHNldCAgKmFsbF9yZWxpZHMgPSBibXNfY29weSh1am9p bi0+b3V0ZXIuc2Nhbi0+cmVsaWRzKTsKKworCS8qIElmIHRoaXMgZmFpbHMsIHdlIGRpZG4ndCB1 bnJvbGwgcHJvcGVybHkuICovCisJQXNzZXJ0KHVqb2luLT5vdXRlci51bnJvbGxlZF9qb2luID09 IE5VTEwpOworCisJZm9yIChpbnQgayA9IDA7IGsgPCB1am9pbi0+bmlubmVyOyArK2spCisJewor CQlwZ3BhX2pvaW5fbWVtYmVyICptZW1iZXIgPSAmdWpvaW4tPmlubmVyW2tdOworCQlCaXRtYXBz ZXQgICpyZWxpZHM7CisKKwkJaWYgKG1lbWJlci0+dW5yb2xsZWRfam9pbiAhPSBOVUxMKQorCQkJ cmVsaWRzID0gcGdwYV9wcm9jZXNzX3Vucm9sbGVkX2pvaW4od2Fsa2VyLAorCQkJCQkJCQkJCQkJ bWVtYmVyLT51bnJvbGxlZF9qb2luKTsKKwkJZWxzZQorCQl7CisJCQlBc3NlcnQobWVtYmVyLT5z Y2FuICE9IE5VTEwpOworCQkJcmVsaWRzID0gbWVtYmVyLT5zY2FuLT5yZWxpZHM7CisJCX0KKwkJ d2Fsa2VyLT5qb2luX3N0cmF0ZWdpZXNbdWpvaW4tPnN0cmF0ZWd5W2tdXSA9CisJCQlsYXBwZW5k KHdhbGtlci0+am9pbl9zdHJhdGVnaWVzW3Vqb2luLT5zdHJhdGVneVtrXV0sIHJlbGlkcyk7CisJ CWFsbF9yZWxpZHMgPSBibXNfYWRkX21lbWJlcnMoYWxsX3JlbGlkcywgcmVsaWRzKTsKKwl9CisK KwlyZXR1cm4gYWxsX3JlbGlkczsKK30KKworLyoKKyAqIEFycmFuZ2UgZm9yIHRoZSBnaXZlbiBw bGFuIG5vZGUgdG8gYmUgdHJlYXRlZCBhcyBhIHF1ZXJ5IGZlYXR1cmUgd2hlbiB0aGUKKyAqIHRy ZWUgd2FsayByZWFjaGVzIGl0LgorICoKKyAqIE1ha2Ugc3VyZSB0byBvbmx5IHVzZSB0aGlzIGZv ciBub2RlcyB0aGF0IHRoZSB0cmVlIHdhbGsgY2FuJ3QgaGF2ZSByZWFjaGVkCisgKiB5ZXQhCisg Ki8KK3ZvaWQKK3BncGFfYWRkX2Z1dHVyZV9mZWF0dXJlKHBncGFfcGxhbl93YWxrZXJfY29udGV4 dCAqd2Fsa2VyLAorCQkJCQkJcGdwYV9xZl90eXBlIHR5cGUsIFBsYW4gKnBsYW4pCit7CisJcGdw YV9xdWVyeV9mZWF0dXJlICpxZiA9IHBncGFfYWRkX2ZlYXR1cmUod2Fsa2VyLCB0eXBlLCBwbGFu KTsKKworCXdhbGtlci0+ZnV0dXJlX3F1ZXJ5X2ZlYXR1cmVzID0KKwkJbGFwcGVuZCh3YWxrZXIt PmZ1dHVyZV9xdWVyeV9mZWF0dXJlcywgcWYpOworfQorCisvKgorICogUmV0dXJuIHRoZSBsYXN0 IG9mIGFueSBlbGlkZWQgbm9kZXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcGxhbiBub2RlIElELgor ICoKKyAqIFRoZSBsYXN0IGVsaWRlZCBub2RlIGlzIHRoZSBvbmUgdGhhdCB3b3VsZCBoYXZlIGJl ZW4gdXBwZXJtb3N0IGluIHRoZSBwbGFuCisgKiB0cmVlIGhhZCBpdCBub3QgYmVlbiByZW1vdmVk IGR1cmluZyBzZXRyZWZzIHByb2Nlc3NpbmcuCisgKi8KK0VsaWRlZE5vZGUgKgorcGdwYV9sYXN0 X2VsaWRlZF9ub2RlKFBsYW5uZWRTdG10ICpwc3RtdCwgUGxhbiAqcGxhbikKK3sKKwlFbGlkZWRO b2RlICplbGlkZWRfbm9kZSA9IE5VTEw7CisKKwlmb3JlYWNoX25vZGUoRWxpZGVkTm9kZSwgbiwg cHN0bXQtPmVsaWRlZE5vZGVzKQorCXsKKwkJaWYgKG4tPnBsYW5fbm9kZV9pZCA9PSBwbGFuLT5w bGFuX25vZGVfaWQpCisJCQllbGlkZWRfbm9kZSA9IG47CisJfQorCisJcmV0dXJuIGVsaWRlZF9u b2RlOworfQorCisvKgorICogQ2VydGFpbiBwbGFuIG5vZGVzIGNhbiByZWZlciB0byBhIHNldCBv ZiBSVElzLiBFeHRyYWN0IGFuZCByZXR1cm4gdGhlIHNldC4KKyAqLworQml0bWFwc2V0ICoKK3Bn cGFfcmVsaWRzKFBsYW4gKnBsYW4pCit7CisJaWYgKElzQShwbGFuLCBSZXN1bHQpKQorCQlyZXR1 cm4gKChSZXN1bHQgKikgcGxhbiktPnJlbGlkczsKKwllbHNlIGlmIChJc0EocGxhbiwgRm9yZWln blNjYW4pKQorCQlyZXR1cm4gKChGb3JlaWduU2NhbiAqKSBwbGFuKS0+ZnNfcmVsaWRzOworCWVs c2UgaWYgKElzQShwbGFuLCBBcHBlbmQpKQorCQlyZXR1cm4gKChBcHBlbmQgKikgcGxhbiktPmFw cHJlbGlkczsKKwllbHNlIGlmIChJc0EocGxhbiwgTWVyZ2VBcHBlbmQpKQorCQlyZXR1cm4gKChN ZXJnZUFwcGVuZCAqKSBwbGFuKS0+YXBwcmVsaWRzOworCisJcmV0dXJuIE5VTEw7Cit9CisKKy8q CisgKiBFeHRyYWN0IHRoZSBzY2FubmVkIFJUSSBmcm9tIGEgcGxhbiBub2RlLgorICoKKyAqIFJl dHVybnMgMCBpZiB0aGVyZSBpc24ndCBvbmUuCisgKi8KK0luZGV4CitwZ3BhX3NjYW5yZWxpZChQ bGFuICpwbGFuKQoreworCXN3aXRjaCAobm9kZVRhZyhwbGFuKSkKKwl7CisJCWNhc2UgVF9TZXFT Y2FuOgorCQljYXNlIFRfU2FtcGxlU2NhbjoKKwkJY2FzZSBUX0JpdG1hcEhlYXBTY2FuOgorCQlj YXNlIFRfVGlkU2NhbjoKKwkJY2FzZSBUX1RpZFJhbmdlU2NhbjoKKwkJY2FzZSBUX1N1YnF1ZXJ5 U2NhbjoKKwkJY2FzZSBUX0Z1bmN0aW9uU2NhbjoKKwkJY2FzZSBUX1RhYmxlRnVuY1NjYW46CisJ CWNhc2UgVF9WYWx1ZXNTY2FuOgorCQljYXNlIFRfQ3RlU2NhbjoKKwkJY2FzZSBUX05hbWVkVHVw bGVzdG9yZVNjYW46CisJCWNhc2UgVF9Xb3JrVGFibGVTY2FuOgorCQljYXNlIFRfRm9yZWlnblNj YW46CisJCWNhc2UgVF9DdXN0b21TY2FuOgorCQljYXNlIFRfSW5kZXhTY2FuOgorCQljYXNlIFRf SW5kZXhPbmx5U2NhbjoKKwkJCXJldHVybiAoKFNjYW4gKikgcGxhbiktPnNjYW5yZWxpZDsKKwkJ ZGVmYXVsdDoKKwkJCXJldHVybiAwOworCX0KK30KKworLyoKKyAqIENvbnN0cnVjdCBhIG5ldyBC aXRtYXBzZXQgY29udGFpbmluZyBub24tUlRFX0pPSU4gbWVtYmVycyBvZiAncmVsaWRzJy4KKyAq LworQml0bWFwc2V0ICoKK3BncGFfZmlsdGVyX291dF9qb2luX3JlbGlkcyhCaXRtYXBzZXQgKnJl bGlkcywgTGlzdCAqcnRhYmxlKQoreworCWludAkJCXJ0aSA9IC0xOworCUJpdG1hcHNldCAgKnJl c3VsdCA9IE5VTEw7CisKKwl3aGlsZSAoKHJ0aSA9IGJtc19uZXh0X21lbWJlcihyZWxpZHMsIHJ0 aSkpID49IDApCisJeworCQlSYW5nZVRibEVudHJ5ICpydGUgPSBydF9mZXRjaChydGksIHJ0YWJs ZSk7CisKKwkJaWYgKHJ0ZS0+cnRla2luZCAhPSBSVEVfSk9JTikKKwkJCXJlc3VsdCA9IGJtc19h ZGRfbWVtYmVyKHJlc3VsdCwgcnRpKTsKKwl9CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgor ICogQ3JlYXRlIGEgcGdwYV9xdWVyeV9mZWF0dXJlIGFuZCBhZGQgaXQgdG8gdGhlIGxpc3Qgb2Yg YWxsIHF1ZXJ5IGZlYXR1cmVzCisgKiBmb3IgdGhpcyBwbGFuLgorICovCitzdGF0aWMgcGdwYV9x dWVyeV9mZWF0dXJlICoKK3BncGFfYWRkX2ZlYXR1cmUocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0 ICp3YWxrZXIsCisJCQkJIHBncGFfcWZfdHlwZSB0eXBlLCBQbGFuICpwbGFuKQoreworCXBncGFf cXVlcnlfZmVhdHVyZSAqcWYgPSBwYWxsb2MwX29iamVjdChwZ3BhX3F1ZXJ5X2ZlYXR1cmUpOwor CisJcWYtPnR5cGUgPSB0eXBlOworCXFmLT5wbGFuID0gcGxhbjsKKworCXdhbGtlci0+cXVlcnlf ZmVhdHVyZXNbcWYtPnR5cGVdID0KKwkJbGFwcGVuZCh3YWxrZXItPnF1ZXJ5X2ZlYXR1cmVzW3Fm LT50eXBlXSwgcWYpOworCisJcmV0dXJuIHFmOworfQorCisvKgorICogQWRkIGEgc2luZ2xlIFJU SSB0byBlYWNoIGFjdGl2ZSBxdWVyeSBmZWF0dXJlLgorICovCitzdGF0aWMgdm9pZAorcGdwYV9x Zl9hZGRfcnRpKExpc3QgKmFjdGl2ZV9xdWVyeV9mZWF0dXJlcywgSW5kZXggcnRpKQoreworCWZv cmVhY2hfcHRyKHBncGFfcXVlcnlfZmVhdHVyZSwgcWYsIGFjdGl2ZV9xdWVyeV9mZWF0dXJlcykK Kwl7CisJCXFmLT5yZWxpZHMgPSBibXNfYWRkX21lbWJlcihxZi0+cmVsaWRzLCBydGkpOworCX0K K30KKworLyoKKyAqIEFkZCBhIHNldCBvZiBSVElzIHRvIGVhY2ggYWN0aXZlIHF1ZXJ5IGZlYXR1 cmUuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX3FmX2FkZF9ydGlzKExpc3QgKmFjdGl2ZV9xdWVy eV9mZWF0dXJlcywgQml0bWFwc2V0ICpyZWxpZHMpCit7CisJZm9yZWFjaF9wdHIocGdwYV9xdWVy eV9mZWF0dXJlLCBxZiwgYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzKQorCXsKKwkJcWYtPnJlbGlkcyA9 IGJtc19hZGRfbWVtYmVycyhxZi0+cmVsaWRzLCByZWxpZHMpOworCX0KK30KKworLyoKKyAqIEFk ZCBSVElzIGRpcmVjdGx5IGNvbnRhaW5lZCBpbiBhIHBsYW4gbm9kZSB0byBlYWNoIGFjdGl2ZSBx dWVyeSBmZWF0dXJlLAorICogYnV0IGZpbHRlciBvdXQgYW55IGpvaW4gUlRJcywgc2luY2UgYWR2 aWNlIGRvZXNuJ3QgbWVudGlvbiB0aG9zZS4KKyAqLworc3RhdGljIHZvaWQKK3BncGFfcWZfYWRk X3BsYW5fcnRpcyhMaXN0ICphY3RpdmVfcXVlcnlfZmVhdHVyZXMsIFBsYW4gKnBsYW4sIExpc3Qg KnJ0YWJsZSkKK3sKKwlCaXRtYXBzZXQgICpyZWxpZHM7CisJSW5kZXgJCXJ0aTsKKworCWlmICgo cmVsaWRzID0gcGdwYV9yZWxpZHMocGxhbikpICE9IE5VTEwpCisJeworCQlyZWxpZHMgPSBwZ3Bh X2ZpbHRlcl9vdXRfam9pbl9yZWxpZHMocmVsaWRzLCBydGFibGUpOworCQlwZ3BhX3FmX2FkZF9y dGlzKGFjdGl2ZV9xdWVyeV9mZWF0dXJlcywgcmVsaWRzKTsKKwl9CisJZWxzZSBpZiAoKHJ0aSA9 IHBncGFfc2NhbnJlbGlkKHBsYW4pKSAhPSAwKQorCQlwZ3BhX3FmX2FkZF9ydGkoYWN0aXZlX3F1 ZXJ5X2ZlYXR1cmVzLCBydGkpOworfQorCisvKgorICogSWYgd2UgZ2VuZXJhdGVkIHBsYW4gYWR2 aWNlIHVzaW5nIHRoZSBwcm92aWRlZCB3YWxrZXIgb2JqZWN0IGFuZCBhcnJheQorICogb2YgaWRl bnRpZmllcnMsIHdvdWxkIHdlIGdlbmVyYXRlIHRoZSBzcGVjaWZpZWQgdGFnL3RhcmdldCBjb21i aW5hdGlvbj8KKyAqCisgKiBJZiB5ZXMsIHRoZSBwbGFuIGNvbmZvcm1zIHRvIHRoZSBhZHZpY2U7 IGlmIG5vLCBpdCBkb2VzIG5vdC4gTm90ZSB0aGF0CisgKiB3ZSBoYXZlIG5vIHdheSBvZiBrbm93 aW5nIHdoZXRoZXIgdGhlIHBsYW5uZXIgd2FzIGZvcmNlZCB0byBlbWl0IGEgcGxhbgorICogdGhh dCBjb25mb3JtZWQgdG8gdGhlIGFkdmljZSBvciBqdXN0IGhhcHBlbmVkIHRvIGRvIHNvLgorICov Citib29sCitwZ3BhX3dhbGtlcl93b3VsZF9hZHZpc2UocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0 ICp3YWxrZXIsCisJCQkJCQkgcGdwYV9pZGVudGlmaWVyICpydF9pZGVudGlmaWVycywKKwkJCQkJ CSBwZ3BhX2FkdmljZV90YWdfdHlwZSB0YWcsCisJCQkJCQkgcGdwYV9hZHZpY2VfdGFyZ2V0ICp0 YXJnZXQpCit7CisJSW5kZXgJCXJ0YWJsZV9sZW5ndGggPSBsaXN0X2xlbmd0aCh3YWxrZXItPnBz dG10LT5ydGFibGUpOworCUJpdG1hcHNldCAgKnJlbGlkcyA9IE5VTEw7CisKKwlpZiAodGFnID09 IFBHUEFfVEFHX0pPSU5fT1JERVIpCisJeworCQlmb3JlYWNoX3B0cihwZ3BhX3Vucm9sbGVkX2pv aW4sIHVqb2luLCB3YWxrZXItPnRvcGxldmVsX3Vucm9sbGVkX2pvaW5zKQorCQl7CisJCQlpZiAo cGdwYV93YWxrZXJfam9pbl9vcmRlcl9tYXRjaGVzKHVqb2luLCBydGFibGVfbGVuZ3RoLAorCQkJ CQkJCQkJCQkgICBydF9pZGVudGlmaWVycywgdGFyZ2V0LCB0cnVlKSkKKwkJCQlyZXR1cm4gdHJ1 ZTsKKwkJfQorCisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlpZiAodGFyZ2V0LT50dHlwZSA9PSBQ R1BBX1RBUkdFVF9JREVOVElGSUVSKQorCXsKKwkJSW5kZXgJCXJ0aTsKKworCQlydGkgPSBwZ3Bh X2NvbXB1dGVfcnRpX2Zyb21faWRlbnRpZmllcihydGFibGVfbGVuZ3RoLCBydF9pZGVudGlmaWVy cywKKwkJCQkJCQkJCQkJICAgJnRhcmdldC0+cmlkKTsKKwkJaWYgKHJ0aSA9PSAwKQorCQkJcmV0 dXJuIGZhbHNlOworCQlyZWxpZHMgPSBibXNfbWFrZV9zaW5nbGV0b24ocnRpKTsKKwl9CisJZWxz ZQorCXsKKwkJQXNzZXJ0KHRhcmdldC0+dHR5cGUgPT0gUEdQQV9UQVJHRVRfT1JERVJFRF9MSVNU KTsKKwkJZm9yZWFjaF9wdHIocGdwYV9hZHZpY2VfdGFyZ2V0LCBjaGlsZF90YXJnZXQsIHRhcmdl dC0+Y2hpbGRyZW4pCisJCXsKKwkJCUluZGV4CQlydGk7CisKKwkJCUFzc2VydChjaGlsZF90YXJn ZXQtPnR0eXBlID09IFBHUEFfVEFSR0VUX0lERU5USUZJRVIpOworCQkJcnRpID0gcGdwYV9jb21w dXRlX3J0aV9mcm9tX2lkZW50aWZpZXIocnRhYmxlX2xlbmd0aCwKKwkJCQkJCQkJCQkJCSAgIHJ0 X2lkZW50aWZpZXJzLAorCQkJCQkJCQkJCQkJICAgJmNoaWxkX3RhcmdldC0+cmlkKTsKKwkJCWlm IChydGkgPT0gMCkKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQlyZWxpZHMgPSBibXNfYWRkX21lbWJl cihyZWxpZHMsIHJ0aSk7CisJCX0KKwl9CisKKwlzd2l0Y2ggKHRhZykKKwl7CisJCWNhc2UgUEdQ QV9UQUdfSk9JTl9PUkRFUjoKKwkJCS8qIHNob3VsZCBoYXZlIGJlZW4gaGFuZGxlZCBhYm92ZSAq LworCQkJcGdfdW5yZWFjaGFibGUoKTsKKwkJCWJyZWFrOworCQljYXNlIFBHUEFfVEFHX0JJVE1B UF9IRUFQX1NDQU46CisJCQlyZXR1cm4gcGdwYV93YWxrZXJfZmluZF9zY2FuKHdhbGtlciwKKwkJ CQkJCQkJCQkgUEdQQV9TQ0FOX0JJVE1BUF9IRUFQLAorCQkJCQkJCQkJCSByZWxpZHMpICE9IE5V TEw7CisJCWNhc2UgUEdQQV9UQUdfRk9SRUlHTl9KT0lOOgorCQkJcmV0dXJuIHBncGFfd2Fsa2Vy X2ZpbmRfc2Nhbih3YWxrZXIsCisJCQkJCQkJCQkJIFBHUEFfU0NBTl9GT1JFSUdOLAorCQkJCQkJ CQkJCSByZWxpZHMpICE9IE5VTEw7CisJCWNhc2UgUEdQQV9UQUdfSU5ERVhfT05MWV9TQ0FOOgor CQkJeworCQkJCXBncGFfc2NhbiAgKnNjYW47CisKKwkJCQlzY2FuID0gcGdwYV93YWxrZXJfZmlu ZF9zY2FuKHdhbGtlciwgUEdQQV9TQ0FOX0lOREVYX09OTFksCisJCQkJCQkJCQkJCSByZWxpZHMp OworCQkJCWlmIChzY2FuID09IE5VTEwpCisJCQkJCXJldHVybiBmYWxzZTsKKworCQkJCXJldHVy biBwZ3BhX3dhbGtlcl9pbmRleF90YXJnZXRfbWF0Y2hlc19wbGFuKHRhcmdldC0+aXRhcmdldCwg c2Nhbi0+cGxhbik7CisJCQl9CisJCWNhc2UgUEdQQV9UQUdfSU5ERVhfU0NBTjoKKwkJCXsKKwkJ CQlwZ3BhX3NjYW4gICpzY2FuOworCisJCQkJc2NhbiA9IHBncGFfd2Fsa2VyX2ZpbmRfc2Nhbih3 YWxrZXIsIFBHUEFfU0NBTl9JTkRFWCwKKwkJCQkJCQkJCQkJIHJlbGlkcyk7CisJCQkJaWYgKHNj YW4gPT0gTlVMTCkKKwkJCQkJcmV0dXJuIGZhbHNlOworCisJCQkJcmV0dXJuIHBncGFfd2Fsa2Vy X2luZGV4X3RhcmdldF9tYXRjaGVzX3BsYW4odGFyZ2V0LT5pdGFyZ2V0LCBzY2FuLT5wbGFuKTsK KwkJCX0KKwkJY2FzZSBQR1BBX1RBR19QQVJUSVRJT05XSVNFOgorCQkJcmV0dXJuIHBncGFfd2Fs a2VyX2ZpbmRfc2Nhbih3YWxrZXIsCisJCQkJCQkJCQkJIFBHUEFfU0NBTl9QQVJUSVRJT05XSVNF LAorCQkJCQkJCQkJCSByZWxpZHMpICE9IE5VTEw7CisJCWNhc2UgUEdQQV9UQUdfU0VRX1NDQU46 CisJCQlyZXR1cm4gcGdwYV93YWxrZXJfZmluZF9zY2FuKHdhbGtlciwKKwkJCQkJCQkJCQkgUEdQ QV9TQ0FOX1NFUSwKKwkJCQkJCQkJCQkgcmVsaWRzKSAhPSBOVUxMOworCQljYXNlIFBHUEFfVEFH X1RJRF9TQ0FOOgorCQkJcmV0dXJuIHBncGFfd2Fsa2VyX2ZpbmRfc2Nhbih3YWxrZXIsCisJCQkJ CQkJCQkJIFBHUEFfU0NBTl9USUQsCisJCQkJCQkJCQkJIHJlbGlkcykgIT0gTlVMTDsKKwkJY2Fz ZSBQR1BBX1RBR19HQVRIRVI6CisJCQlyZXR1cm4gcGdwYV93YWxrZXJfY29udGFpbnNfZmVhdHVy ZSh3YWxrZXIsCisJCQkJCQkJCQkJCQlQR1BBUUZfR0FUSEVSLAorCQkJCQkJCQkJCQkJcmVsaWRz KTsKKwkJY2FzZSBQR1BBX1RBR19HQVRIRVJfTUVSR0U6CisJCQlyZXR1cm4gcGdwYV93YWxrZXJf Y29udGFpbnNfZmVhdHVyZSh3YWxrZXIsCisJCQkJCQkJCQkJCQlQR1BBUUZfR0FUSEVSX01FUkdF LAorCQkJCQkJCQkJCQkJcmVsaWRzKTsKKwkJY2FzZSBQR1BBX1RBR19TRU1JSk9JTl9OT05fVU5J UVVFOgorCQkJcmV0dXJuIHBncGFfd2Fsa2VyX2NvbnRhaW5zX2ZlYXR1cmUod2Fsa2VyLAorCQkJ CQkJCQkJCQkJUEdQQVFGX1NFTUlKT0lOX05PTl9VTklRVUUsCisJCQkJCQkJCQkJCQlyZWxpZHMp OworCQljYXNlIFBHUEFfVEFHX1NFTUlKT0lOX1VOSVFVRToKKwkJCXJldHVybiBwZ3BhX3dhbGtl cl9jb250YWluc19mZWF0dXJlKHdhbGtlciwKKwkJCQkJCQkJCQkJCVBHUEFRRl9TRU1JSk9JTl9V TklRVUUsCisJCQkJCQkJCQkJCQlyZWxpZHMpOworCQljYXNlIFBHUEFfVEFHX0hBU0hfSk9JTjoK KwkJCXJldHVybiBwZ3BhX3dhbGtlcl9jb250YWluc19qb2luKHdhbGtlciwKKwkJCQkJCQkJCQkJ IEpTVFJBVF9IQVNIX0pPSU4sCisJCQkJCQkJCQkJCSByZWxpZHMpOworCQljYXNlIFBHUEFfVEFH X01FUkdFX0pPSU5fTUFURVJJQUxJWkU6CisJCQlyZXR1cm4gcGdwYV93YWxrZXJfY29udGFpbnNf am9pbih3YWxrZXIsCisJCQkJCQkJCQkJCSBKU1RSQVRfTUVSR0VfSk9JTl9NQVRFUklBTElaRSwK KwkJCQkJCQkJCQkJIHJlbGlkcyk7CisJCWNhc2UgUEdQQV9UQUdfTUVSR0VfSk9JTl9QTEFJTjoK KwkJCXJldHVybiBwZ3BhX3dhbGtlcl9jb250YWluc19qb2luKHdhbGtlciwKKwkJCQkJCQkJCQkJ IEpTVFJBVF9NRVJHRV9KT0lOX1BMQUlOLAorCQkJCQkJCQkJCQkgcmVsaWRzKTsKKwkJY2FzZSBQ R1BBX1RBR19ORVNURURfTE9PUF9NQVRFUklBTElaRToKKwkJCXJldHVybiBwZ3BhX3dhbGtlcl9j b250YWluc19qb2luKHdhbGtlciwKKwkJCQkJCQkJCQkJIEpTVFJBVF9ORVNURURfTE9PUF9NQVRF UklBTElaRSwKKwkJCQkJCQkJCQkJIHJlbGlkcyk7CisJCWNhc2UgUEdQQV9UQUdfTkVTVEVEX0xP T1BfTUVNT0laRToKKwkJCXJldHVybiBwZ3BhX3dhbGtlcl9jb250YWluc19qb2luKHdhbGtlciwK KwkJCQkJCQkJCQkJIEpTVFJBVF9ORVNURURfTE9PUF9NRU1PSVpFLAorCQkJCQkJCQkJCQkgcmVs aWRzKTsKKwkJY2FzZSBQR1BBX1RBR19ORVNURURfTE9PUF9QTEFJTjoKKwkJCXJldHVybiBwZ3Bh X3dhbGtlcl9jb250YWluc19qb2luKHdhbGtlciwKKwkJCQkJCQkJCQkJIEpTVFJBVF9ORVNURURf TE9PUF9QTEFJTiwKKwkJCQkJCQkJCQkJIHJlbGlkcyk7CisJCWNhc2UgUEdQQV9UQUdfTk9fR0FU SEVSOgorCQkJcmV0dXJuIHBncGFfd2Fsa2VyX2NvbnRhaW5zX25vX2dhdGhlcih3YWxrZXIsIHJl bGlkcyk7CisJfQorCisJLyogc2hvdWxkIG5vdCBnZXQgaGVyZSAqLworCXJldHVybiBmYWxzZTsK K30KKworLyoKKyAqIERvZXMgdGhlIGluZGV4IHRhcmdldCBtYXRjaCB0aGUgUGxhbj8KKyAqCisg KiBTaG91bGQgb25seSBiZSBjYWxsZWQgd2hlbiB3ZSBrbm93IHRoYXQgaXRhcmdldCBtYW5kYXRl cyBhbiBJbmRleCBTY2FuIG9yCisgKiBJbmRleCBPbmx5IFNjYW4gYW5kIHRoaXMgY29ycmVzcG9u ZHMgdG8gdGhlIHR5cGUgb2YgUGxhbi4gSGVyZSwgb3VyIGpvYiBpcworICoganVzdCB0byBjaGVj ayB3aGV0aGVyIGl0J3MgdGhlIHNhbWUgaW5kZXguCisgKi8KK3N0YXRpYyBib29sCitwZ3BhX3dh bGtlcl9pbmRleF90YXJnZXRfbWF0Y2hlc19wbGFuKHBncGFfaW5kZXhfdGFyZ2V0ICppdGFyZ2V0 LCBQbGFuICpwbGFuKQoreworCU9pZAkJCWluZGV4b2lkID0gSW52YWxpZE9pZDsKKworCS8qIFJl dHJpZXZlIHRoZSBpbmRleCBPSUQgZnJvbSB0aGUgcGxhbi4gKi8KKwlpZiAoSXNBKHBsYW4sIElu ZGV4U2NhbikpCisJCWluZGV4b2lkID0gKChJbmRleFNjYW4gKikgcGxhbiktPmluZGV4aWQ7CisJ ZWxzZSBpZiAoSXNBKHBsYW4sIEluZGV4T25seVNjYW4pKQorCQlpbmRleG9pZCA9ICgoSW5kZXhP bmx5U2NhbiAqKSBwbGFuKS0+aW5kZXhpZDsKKwllbHNlCisJCWVsb2coRVJST1IsICJ1bnJlY29n bml6ZWQgbm9kZSB0eXBlOiAlZCIsIChpbnQpIG5vZGVUYWcocGxhbikpOworCisJLyogQ2hlY2sg d2hldGhlciBzY2hlbWEgbmFtZSBtYXRjaGVzLCBpZiBzcGVjaWZpZWQgaW4gaW5kZXggdGFyZ2V0 LiAqLworCWlmIChpdGFyZ2V0LT5pbmRuYW1lc3BhY2UgIT0gTlVMTCkKKwl7CisJCU9pZAkJCW5z cG9pZCA9IGdldF9yZWxfbmFtZXNwYWNlKGluZGV4b2lkKTsKKwkJY2hhcgkgICAqcmVsbmFtZXNw YWNlID0gZ2V0X25hbWVzcGFjZV9uYW1lX29yX3RlbXAobnNwb2lkKTsKKworCQlpZiAoc3RyY21w KGl0YXJnZXQtPmluZG5hbWVzcGFjZSwgcmVsbmFtZXNwYWNlKSAhPSAwKQorCQkJcmV0dXJuIGZh bHNlOworCX0KKworCS8qIENoZWNrIHdoZXRoZXIgcmVsYXRpb24gbmFtZSBtYXRjaGVzLiAqLwor CXJldHVybiAoc3RyY21wKGl0YXJnZXQtPmluZG5hbWUsIGdldF9yZWxfbmFtZShpbmRleG9pZCkp ID09IDApOworfQorCisvKgorICogRG9lcyBhbiB1bnJvbGxlZCBqb2luIG1hdGNoIHRoZSBqb2lu IG9yZGVyIHNwZWNpZmllZCBieSBhbiBhZHZpY2UgdGFyZ2V0PworICovCitzdGF0aWMgYm9vbAor cGdwYV93YWxrZXJfam9pbl9vcmRlcl9tYXRjaGVzKHBncGFfdW5yb2xsZWRfam9pbiAqdWpvaW4s CisJCQkJCQkJICAgSW5kZXggcnRhYmxlX2xlbmd0aCwKKwkJCQkJCQkgICBwZ3BhX2lkZW50aWZp ZXIgKnJ0X2lkZW50aWZpZXJzLAorCQkJCQkJCSAgIHBncGFfYWR2aWNlX3RhcmdldCAqdGFyZ2V0 LAorCQkJCQkJCSAgIGJvb2wgdG9wbGV2ZWwpCit7CisJaW50CQkJbmNoaWxkcmVuID0gbGlzdF9s ZW5ndGgodGFyZ2V0LT5jaGlsZHJlbik7CisKKwlBc3NlcnQodGFyZ2V0LT50dHlwZSA9PSBQR1BB X1RBUkdFVF9PUkRFUkVEX0xJU1QpOworCisJLyogQXQgdG9wbGV2ZWwsIHdlIGFsbG93IGEgcHJl Zml4IG1hdGNoLiAqLworCWlmICh0b3BsZXZlbCkKKwl7CisJCWlmIChuY2hpbGRyZW4gPiB1am9p bi0+bmlubmVyICsgMSkKKwkJCXJldHVybiBmYWxzZTsKKwl9CisJZWxzZQorCXsKKwkJaWYgKG5j aGlsZHJlbiAhPSB1am9pbi0+bmlubmVyICsgMSkKKwkJCXJldHVybiBmYWxzZTsKKwl9CisKKwkv KiBPdXRlcm1vc3QgcmVsIG11c3QgbWF0Y2guICovCisJaWYgKCFwZ3BhX3dhbGtlcl9qb2luX29y ZGVyX21hdGNoZXNfbWVtYmVyKCZ1am9pbi0+b3V0ZXIsCisJCQkJCQkJCQkJCSAgIHJ0YWJsZV9s ZW5ndGgsCisJCQkJCQkJCQkJCSAgIHJ0X2lkZW50aWZpZXJzLAorCQkJCQkJCQkJCQkgICBsaW5p dGlhbCh0YXJnZXQtPmNoaWxkcmVuKSkpCisJCXJldHVybiBmYWxzZTsKKworCS8qIEVhY2ggaW5u ZXIgcmVsIG11c3QgbWF0Y2guICovCisJZm9yIChpbnQgbiA9IDA7IG4gPCBuY2hpbGRyZW4gLSAx OyArK24pCisJeworCQlwZ3BhX2FkdmljZV90YXJnZXQgKmNoaWxkX3RhcmdldCA9IGxpc3RfbnRo KHRhcmdldC0+Y2hpbGRyZW4sIG4gKyAxKTsKKworCQlpZiAoIXBncGFfd2Fsa2VyX2pvaW5fb3Jk ZXJfbWF0Y2hlc19tZW1iZXIoJnVqb2luLT5pbm5lcltuXSwKKwkJCQkJCQkJCQkJCSAgIHJ0YWJs ZV9sZW5ndGgsCisJCQkJCQkJCQkJCQkgICBydF9pZGVudGlmaWVycywKKwkJCQkJCQkJCQkJCSAg IGNoaWxkX3RhcmdldCkpCisJCQlyZXR1cm4gZmFsc2U7CisJfQorCisJcmV0dXJuIHRydWU7Cit9 CisKKy8qCisgKiBEb2VzIG9uZSBtZW1iZXIgb2YgYW4gdW5yb2xsZWQgam9pbiBtYXRjaCBhbiBh ZHZpY2UgdGFyZ2V0PworICovCitzdGF0aWMgYm9vbAorcGdwYV93YWxrZXJfam9pbl9vcmRlcl9t YXRjaGVzX21lbWJlcihwZ3BhX2pvaW5fbWVtYmVyICptZW1iZXIsCisJCQkJCQkJCQkgIEluZGV4 IHJ0YWJsZV9sZW5ndGgsCisJCQkJCQkJCQkgIHBncGFfaWRlbnRpZmllciAqcnRfaWRlbnRpZmll cnMsCisJCQkJCQkJCQkgIHBncGFfYWR2aWNlX3RhcmdldCAqdGFyZ2V0KQoreworCUJpdG1hcHNl dCAgKnJlbGlkcyA9IE5VTEw7CisKKwlpZiAobWVtYmVyLT51bnJvbGxlZF9qb2luICE9IE5VTEwp CisJeworCQlpZiAodGFyZ2V0LT50dHlwZSAhPSBQR1BBX1RBUkdFVF9PUkRFUkVEX0xJU1QpCisJ CQlyZXR1cm4gZmFsc2U7CisJCXJldHVybiBwZ3BhX3dhbGtlcl9qb2luX29yZGVyX21hdGNoZXMo bWVtYmVyLT51bnJvbGxlZF9qb2luLAorCQkJCQkJCQkJCQkgIHJ0YWJsZV9sZW5ndGgsCisJCQkJ CQkJCQkJCSAgcnRfaWRlbnRpZmllcnMsCisJCQkJCQkJCQkJCSAgdGFyZ2V0LAorCQkJCQkJCQkJ CQkgIGZhbHNlKTsKKwl9CisKKwlBc3NlcnQobWVtYmVyLT5zY2FuICE9IE5VTEwpOworCXN3aXRj aCAodGFyZ2V0LT50dHlwZSkKKwl7CisJCWNhc2UgUEdQQV9UQVJHRVRfT1JERVJFRF9MSVNUOgor CQkJLyogQ291bGQgb25seSBtYXRjaCBhbiB1bnJvbGxlZCBqb2luICovCisJCQlyZXR1cm4gZmFs c2U7CisKKwkJY2FzZSBQR1BBX1RBUkdFVF9VTk9SREVSRURfTElTVDoKKwkJCXsKKwkJCQlmb3Jl YWNoX3B0cihwZ3BhX2FkdmljZV90YXJnZXQsIGNoaWxkX3RhcmdldCwgdGFyZ2V0LT5jaGlsZHJl bikKKwkJCQl7CisJCQkJCUluZGV4CQlydGk7CisKKwkJCQkJcnRpID0gcGdwYV9jb21wdXRlX3J0 aV9mcm9tX2lkZW50aWZpZXIocnRhYmxlX2xlbmd0aCwKKwkJCQkJCQkJCQkJCQkJICAgcnRfaWRl bnRpZmllcnMsCisJCQkJCQkJCQkJCQkJCSAgICZjaGlsZF90YXJnZXQtPnJpZCk7CisJCQkJCWlm IChydGkgPT0gMCkKKwkJCQkJCXJldHVybiBmYWxzZTsKKwkJCQkJcmVsaWRzID0gYm1zX2FkZF9t ZW1iZXIocmVsaWRzLCBydGkpOworCQkJCX0KKwkJCQlicmVhazsKKwkJCX0KKworCQljYXNlIFBH UEFfVEFSR0VUX0lERU5USUZJRVI6CisJCQl7CisJCQkJSW5kZXgJCXJ0aTsKKworCQkJCXJ0aSA9 IHBncGFfY29tcHV0ZV9ydGlfZnJvbV9pZGVudGlmaWVyKHJ0YWJsZV9sZW5ndGgsCisJCQkJCQkJ CQkJCQkJICAgcnRfaWRlbnRpZmllcnMsCisJCQkJCQkJCQkJCQkJICAgJnRhcmdldC0+cmlkKTsK KwkJCQlpZiAocnRpID09IDApCisJCQkJCXJldHVybiBmYWxzZTsKKwkJCQlyZWxpZHMgPSBibXNf bWFrZV9zaW5nbGV0b24ocnRpKTsKKwkJCQlicmVhazsKKwkJCX0KKwl9CisKKwlyZXR1cm4gYm1z X2VxdWFsKG1lbWJlci0+c2Nhbi0+cmVsaWRzLCByZWxpZHMpOworfQorCisvKgorICogRmluZCB0 aGUgc2NhbiB3aGVyZSB0aGUgd2Fsa2VyIHNheXMgdGhhdCB0aGUgZ2l2ZW4gc2NhbiBzdHJhdGVn eSBzaG91bGQgYmUKKyAqIHVzZWQgZm9yIHRoZSBnaXZlbiByZWxpZCBzZXQsIGlmIG9uZSBleGlz dHMuCisgKgorICogUmV0dXJucyB0aGUgcGdwYV9zY2FuIG9iamVjdCwgb3IgTlVMTCBpZiBub25l IHdhcyBmb3VuZC4KKyAqLworc3RhdGljIHBncGFfc2NhbiAqCitwZ3BhX3dhbGtlcl9maW5kX3Nj YW4ocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsCisJCQkJCSAgcGdwYV9zY2FuX3N0 cmF0ZWd5IHN0cmF0ZWd5LAorCQkJCQkgIEJpdG1hcHNldCAqcmVsaWRzKQoreworCUxpc3QJICAg KnNjYW5zID0gd2Fsa2VyLT5zY2Fuc1tzdHJhdGVneV07CisKKwlmb3JlYWNoX3B0cihwZ3BhX3Nj YW4sIHNjYW4sIHNjYW5zKQorCXsKKwkJaWYgKGJtc19lcXVhbChzY2FuLT5yZWxpZHMsIHJlbGlk cykpCisJCQlyZXR1cm4gc2NhbjsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIERv ZXMgdGhpcyB3YWxrZXIgc2F5IHRoYXQgdGhlIGdpdmVuIHF1ZXJ5IGZlYXR1cmUgYXBwbGllcyB0 byB0aGUgZ2l2ZW4KKyAqIHJlbGlkIHNldD8KKyAqLworc3RhdGljIGJvb2wKK3BncGFfd2Fsa2Vy X2NvbnRhaW5zX2ZlYXR1cmUocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsCisJCQkJ CQkJIHBncGFfcWZfdHlwZSB0eXBlLAorCQkJCQkJCSBCaXRtYXBzZXQgKnJlbGlkcykKK3sKKwlM aXN0CSAgICpxdWVyeV9mZWF0dXJlcyA9IHdhbGtlci0+cXVlcnlfZmVhdHVyZXNbdHlwZV07CisK Kwlmb3JlYWNoX3B0cihwZ3BhX3F1ZXJ5X2ZlYXR1cmUsIHFmLCBxdWVyeV9mZWF0dXJlcykKKwl7 CisJCWlmIChibXNfZXF1YWwocWYtPnJlbGlkcywgcmVsaWRzKSkKKwkJCXJldHVybiB0cnVlOwor CX0KKworCXJldHVybiBmYWxzZTsKK30KKworLyoKKyAqIERvZXMgdGhlIHdhbGtlciBzYXkgdGhh dCB0aGUgZ2l2ZW4gam9pbiBzdHJhdGVneSBzaG91bGQgYmUgdXNlZCBmb3IgdGhlCisgKiBnaXZl biByZWxpZCBzZXQ/CisgKi8KK3N0YXRpYyBib29sCitwZ3BhX3dhbGtlcl9jb250YWluc19qb2lu KHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJCQkJICBwZ3BhX2pvaW5fc3Ry YXRlZ3kgc3RyYXRlZ3ksCisJCQkJCQkgIEJpdG1hcHNldCAqcmVsaWRzKQoreworCUxpc3QJICAg KmpvaW5fc3RyYXRlZ2llcyA9IHdhbGtlci0+am9pbl9zdHJhdGVnaWVzW3N0cmF0ZWd5XTsKKwor CWZvcmVhY2hfcHRyKEJpdG1hcHNldCwganNyZWxpZHMsIGpvaW5fc3RyYXRlZ2llcykKKwl7CisJ CWlmIChibXNfZXF1YWwoanNyZWxpZHMsIHJlbGlkcykpCisJCQlyZXR1cm4gdHJ1ZTsKKwl9CisK KwlyZXR1cm4gZmFsc2U7Cit9CisKKy8qCisgKiBEb2VzIHRoZSB3YWxrZXIgc2F5IHRoYXQgdGhl IGdpdmVuIHJlbGlkcyBzaG91bGQgYmUgbWFya2VkIGFzIE5PX0dBVEhFUj8KKyAqLworc3RhdGlj IGJvb2wKK3BncGFfd2Fsa2VyX2NvbnRhaW5zX25vX2dhdGhlcihwZ3BhX3BsYW5fd2Fsa2VyX2Nv bnRleHQgKndhbGtlciwKKwkJCQkJCQkgICBCaXRtYXBzZXQgKnJlbGlkcykKK3sKKwlyZXR1cm4g Ym1zX2lzX3N1YnNldChyZWxpZHMsIHdhbGtlci0+bm9fZ2F0aGVyX3NjYW5zKTsKK30KZGlmZiAt LWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV93YWxrZXIuaCBiL2NvbnRyaWIvcGdf cGxhbl9hZHZpY2UvcGdwYV93YWxrZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwMC4uNDg5MGQ1NTRkZDMKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5f YWR2aWNlL3BncGFfd2Fsa2VyLmgKQEAgLTAsMCArMSwxNDEgQEAKKy8qLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorICoKKyAqIHBncGFfd2Fsa2VyLmgKKyAqCSAgTWFpbiBlbnRyeXBvaW50cyBmb3IgYW5hbHl6 aW5nIGEgcGxhbiB0byBnZW5lcmF0ZSBhbiBhZHZpY2Ugc3RyaW5nCisgKgorICogQ29weXJpZ2h0 IChjKSAyMDE2LTIwMjYsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgor ICoJICBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfd2Fsa2VyLmgKKyAqCisgKi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyAqLworI2lmbmRlZiBQR1BBX1dBTEtFUl9ICisjZGVmaW5lIFBHUEFfV0FMS0VS X0gKKworI2luY2x1ZGUgInBncGFfYXN0LmgiCisjaW5jbHVkZSAicGdwYV9qb2luLmgiCisjaW5j bHVkZSAicGdwYV9zY2FuLmgiCisKKy8qCisgKiBXaGVuIGdlbmVyYXRpbmcgYWR2aWNlLCB3ZSBz aG91bGQgZW1pdCBlaXRoZXIgU0VNSUpPSU5fVU5JUVVFIGFkdmljZSBvcgorICogU0VNSUpPSU5f Tk9OX1VOSVFVRSBhZHZpY2UgZm9yIGVhY2ggc2VtaWpvaW4gZGVwZW5kaW5nIG9uIHdoZXRoZXIg d2UgY2hvc2UKKyAqIHRvIGltcGxlbWVudCBpdCBhcyBhIHNlbWlqb2luIG9yIHdoZXRoZXIgd2Ug aW5zdGVhZCBjaG9zZSB0byBtYWtlIHRoZQorICogbnVsbGFibGUgc2lkZSB1bmlxdWUgYW5kIHRo ZW4gcGVyZm9ybSBhbiBpbm5lciBqb2luLiBXaGVuIHRoZSBtYWtlLXVuaXF1ZQorICogc3RyYXRl Z3kgaXMgbm90IGNob3NlbiwgaXQncyBub3QgZWFzeSB0byB0ZWxsIGZyb20gdGhlIGZpbmFsIHBs YW4gdHJlZQorICogd2hldGhlciBpdCB3YXMgY29uc2lkZXJlZC4gVGhhdCdzIGF3a3dhcmQsIGJl Y2F1c2Ugd2UgZG9uJ3Qgd2FudCB0byBlbWl0CisgKiB1c2VsZXNzIFNFTUlKT0lOX05PTl9VTklR VUUgYWR2aWNlIHdoZW4gdGhlcmUgd2FzIG5vIGRlY2lzaW9uIHRvIGJlIG1hZGUuCisgKgorICog VG8gYXZvaWQgdGhhdCwgZHVyaW5nIHBsYW5uaW5nLCB3ZSBjcmVhdGUgYSBwZ3BhX3NqX3VuaXF1 ZV9yZWwgZm9yIGVhY2gKKyAqIHJlbGF0aW9uIHRoYXQgd2UgY29uc2lkZXJlZCBtYWtpbmcgdW5p cXVlIGZvciBwdXJwb3NlcyBvZiBzZW1pam9pbiBwbGFubmluZy4KKyAqLwordHlwZWRlZiBzdHJ1 Y3QgcGdwYV9zal91bmlxdWVfcmVsCit7CisJY2hhcgkgICAqcGxhbl9uYW1lOworCUJpdG1hcHNl dCAgKnJlbGlkczsKK30gcGdwYV9zal91bmlxdWVfcmVsOworCisvKgorICogV2UgdXNlIHRoZSB0 ZXJtICJxdWVyeSBmZWF0dXJlIiB0byByZWZlciB0byBwbGFuIG5vZGVzIHRoYXQgYXJlIGludGVy ZXN0aW5nCisgKiBpbiB0aGUgZm9sbG93aW5nIHdheTogdG8gZ2VuZXJhdGUgYWR2aWNlLCB3ZSds bCBuZWVkIHRvIGtub3cgdGhlIHNldCBvZgorICogc2FtZS1zdWJxdWVyeSwgbm9uLWpvaW4gUlRJ cyBvY2N1cnJpbmcgYXQgb3IgYmVsb3cgdGhhdCBwbGFuIG5vZGUsIHdpdGhvdXQKKyAqIGFkbWl4 dHVyZSBvZiBwYXJlbnQgYW5kIGNoaWxkIFJUSXMuCisgKgorICogRm9yIGV4YW1wbGUsIEdhdGhl ciBub2RlcywgZGVzaWduYXRlZCBieSBQR1BBUUZfR0FUSEVSLCBhbmQgR2F0aGVyIE1lcmdlCisg KiBub2RlcywgZGVzaWduYXRlZCBieSBQR1BBUUZfR0FUSEVSX01FUkdFLCBhcmUgcXVlcnkgZmVh dHVyZXMsIGJlY2F1c2Ugd2UnbGwKKyAqIHdhbnQgdG8gYWRtaXQgc29tZSBraW5kIG9mIGFkdmlj ZSB0aGF0IGRlc2NyaWJlcyB0aGUgcG9ydGlvbiBvZiB0aGUgcGxhbgorICogdHJlZSB0aGF0IGFw cGVhcnMgYmVuZWF0aCB0aG9zZSBub2Rlcy4KKyAqCisgKiBFYWNoIHNlbWlqb2luIGNhbiBiZSBp bXBsZW1lbnRlZCBlaXRoZXIgYnkgZGlyZWN0bHkgcGVyZm9ybWluZyBhIHNlbWlqb2luLAorICog b3IgYnkgbWFraW5nIG9uZSBzaWRlIHVuaXF1ZSBhbmQgdGhlbiBwZXJmb3JtaW5nIGEgbm9ybWFs IGpvaW4uIEVpdGhlciB3YXksCisgKiB3ZSB1c2UgYSBxdWVyeSBmZWF0dXJlIHRvIG5vdGljZSB3 aGF0IGRlY2lzaW9uIHdhcyBtYWRlLCBzbyB0aGF0IHdlIGNhbgorICogZGVzY3JpYmUgaXQgYnkg ZW51bWVyYXRpbmcgdGhlIFJUSXMgb24gdGhhdCBzaWRlIG9mIHRoZSBqb2luLgorICoKKyAqIFRv IGVsYWJvcmF0ZSBvbiB0aGUgIm5vIGFkbWl4dHVyZSBvZiBwYXJlbnQgYW5kIGNoaWxkIFJUSXMi IHJ1bGUsIGluIGFsbCBvZgorICogdGhlc2UgY2FzZXMsIGlmIHRoZSBlbnRpcmV0eSBvZiBhbiBp bmhlcml0YW5jZSBoaWVyYXJjaHkgYXBwZWFycyBiZW5lYXRoCisgKiB0aGUgcXVlcnkgZmVhdHVy ZSwgd2Ugb25seSB3YW50IHRvIG5hbWUgdGhlIHBhcmVudCB0YWJsZS4gQnV0IGl0J3MgYWxzbwor ICogcG9zc2libGUgdG8gaGF2ZSBjYXNlcyB3aGVyZSB3ZSBtdXN0IG5hbWUgY2hpbGQgdGFibGVz LiBUaGlzIGlzIHBhcnRpY3VsYXJseQorICogbGlrZWx5IHRvIGhhcHBlbiB3aGVuIHBhcnRpdGlv bndpc2Ugam9pbiBpcyBpbiB1c2UsIGJ1dCBjb3VsZCBoYXBwZW4gZm9yCisgKiBHYXRoZXIgb3Ig R2F0aGVyIE1lcmdlIGV2ZW4gd2l0aG91dCB0aGF0LCBpZiBvbmUgb2YgdGhvc2UgYXBwZWFycyBi ZWxvdworICogYW4gQXBwZW5kIG9yIE1lcmdlQXBwZW5kIG5vZGUgZm9yIGEgc2luZ2xlIHRhYmxl LgorICovCit0eXBlZGVmIGVudW0gcGdwYV9xZl90eXBlCit7CisJUEdQQVFGX0dBVEhFUiwKKwlQ R1BBUUZfR0FUSEVSX01FUkdFLAorCVBHUEFRRl9TRU1JSk9JTl9OT05fVU5JUVVFLAorCVBHUEFR Rl9TRU1JSk9JTl9VTklRVUUKKwkvKiB1cGRhdGUgTlVNX1BHUEFfUUZfVFlQRVMgaWYgeW91IGFk ZCBhbnl0aGluZyBoZXJlICovCit9IHBncGFfcWZfdHlwZTsKKworI2RlZmluZSBOVU1fUEdQQV9R Rl9UWVBFUyAoKGludCkgUEdQQVFGX1NFTUlKT0lOX1VOSVFVRSArIDEpCisKKy8qCisgKiBGb3Ig ZWFjaCBxdWVyeSBmZWF0dXJlLCB3ZSBrZWVwIHRyYWNrIG9mIHRoZSBmZWF0dXJlIHR5cGUgYW5k IHRoZSBzZXQgb2YKKyAqIHJlbGlkcyB0aGF0IHdlIGZvdW5kIHVuZGVybmVhdGggdGhlIHJlbGV2 YW50IHBsYW4gbm9kZS4gU2VlIHRoZSBjb21tZW50cworICogb24gcGdwYV9xZl90eXBlLCBhYm92 ZSwgZm9yIGFkZGl0aW9uYWwgZGV0YWlscy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgcGdwYV9xdWVy eV9mZWF0dXJlCit7CisJcGdwYV9xZl90eXBlIHR5cGU7CisJUGxhbgkgICAqcGxhbjsKKwlCaXRt YXBzZXQgICpyZWxpZHM7Cit9IHBncGFfcXVlcnlfZmVhdHVyZTsKKworLyoKKyAqIENvbnRleHQg b2JqZWN0IGZvciBwbGFuIHRyZWUgd2Fsay4KKyAqCisgKiBwc3RtdCBpcyB0aGUgUGxhbm5lZFN0 bXQgd2UncmUgc3R1ZHlpbmcuCisgKgorICogc2NhbnMgaXMgYW4gYXJyYXkgb2YgbGlzdHMgb2Yg cGdwYV9zY2FuIG9iamVjdHMuIFRoZSBhcnJheSBpcyBpbmRleGVkIGJ5CisgKiB0aGUgc2Nhbidz IHBncGFfc2Nhbl9zdHJhdGVneS4KKyAqCisgKiBub19nYXRoZXJfc2NhbnMgaXMgdGhlIHNldCBv ZiBzY2FuIFJUSXMgdGhhdCBkbyBub3QgYXBwZWFyIGJlbmVhdGggYW55CisgKiBHYXRoZXIgb3Ig R2F0aGVyIE1lcmdlIG5vZGUuCisgKgorICogdG9wbGV2ZWxfdW5yb2xsZWRfam9pbnMgaXMgYSBs aXN0IG9mIGFsbCBwZ3BhX3Vucm9sbGVkX2pvaW4gb2JqZWN0cyB0aGF0CisgKiBhcmUgbm90IGEg Y2hpbGQgb2Ygc29tZSBvdGhlciBwZ3BhX3Vucm9sbGVkX2pvaW4uCisgKgorICogam9pbl9zdHJh dGVneSBpcyBhbiBhcnJheSBvZiBsaXN0cyBvZiBCaXRtYXBzZXQgb2JqZWN0cy4gRWFjaCBCaXRt YXBzZXQKKyAqIGlzIHRoZSBzZXQgb2YgcmVsaWRzIHRoYXQgYXBwZWFycyBvbiB0aGUgaW5uZXIg c2lkZSBvZiBzb21lIGpvaW4gKGV4Y2x1ZGluZworICogUlRJcyBmcm9tIHBhcnRpdGlvbiBjaGls ZHJlbiBhbmQgc3VicXVlcmllcykuIFRoZSBhcnJheSBpcyBpbmRleGVkIGJ5CisgKiBwZ3BhX2pv aW5fc3RyYXRlZ3kuCisgKgorICogcXVlcnlfZmVhdHVyZXMgaXMgYW4gYXJyYXkgbGlzdHMgb2Yg cGdwYV9xdWVyeV9mZWF0dXJlIG9iamVjdHMsIGluZGV4ZWQKKyAqIGJ5IHBncGFfcWZfdHlwZS4K KyAqCisgKiBmdXR1cmVfcXVlcnlfZmVhdHVyZXMgaXMgb25seSB1c2VkIGR1cmluZyB0aGUgcGxh biB0cmVlIHdhbGsgYW5kIHNob3VsZAorICogYmUgZW1wdHkgd2hlbiB0aGUgdHJlZSB3YWxrIGNv bmNsdWRlcy4gSXQgaXMgYSBsaXN0IG9mIHBncGFfcXVlcnlfZmVhdHVyZQorICogb2JqZWN0cyBm b3IgUGxhbiBub2RlcyB0aGF0IHRoZSBwbGFuIHRyZWUgd2FsayBoYXMgbm90IHlldCBlbmNvdW50 ZXJlZDsKKyAqIHdoZW4gZW5jb3VudGVyZWQsIHRoZXkgd2lsbCBiZSBtb3ZlZCB0byB0aGUgbGlz dCBvZiBhY3RpdmUgcXVlcnkgZmVhdHVyZXMKKyAqIHRoYXQgaXMgcHJvcGFnYXRlZCB2aWEgdGhl IGNhbGwgc3RhY2suCisgKi8KK3R5cGVkZWYgc3RydWN0IHBncGFfcGxhbl93YWxrZXJfY29udGV4 dAoreworCVBsYW5uZWRTdG10ICpwc3RtdDsKKwlMaXN0CSAgICpzY2Fuc1tOVU1fUEdQQV9TQ0FO X1NUUkFURUdZXTsKKwlCaXRtYXBzZXQgICpub19nYXRoZXJfc2NhbnM7CisJTGlzdAkgICAqdG9w bGV2ZWxfdW5yb2xsZWRfam9pbnM7CisJTGlzdAkgICAqam9pbl9zdHJhdGVnaWVzW05VTV9QR1BB X0pPSU5fU1RSQVRFR1ldOworCUxpc3QJICAgKnF1ZXJ5X2ZlYXR1cmVzW05VTV9QR1BBX1FGX1RZ UEVTXTsKKwlMaXN0CSAgICpmdXR1cmVfcXVlcnlfZmVhdHVyZXM7Cit9IHBncGFfcGxhbl93YWxr ZXJfY29udGV4dDsKKworZXh0ZXJuIHZvaWQgcGdwYV9wbGFuX3dhbGtlcihwZ3BhX3BsYW5fd2Fs a2VyX2NvbnRleHQgKndhbGtlciwKKwkJCQkJCQkgUGxhbm5lZFN0bXQgKnBzdG10LAorCQkJCQkJ CSBMaXN0ICpzal91bmlxdWVfcmVscyk7CisKK2V4dGVybiB2b2lkIHBncGFfYWRkX2Z1dHVyZV9m ZWF0dXJlKHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJCQkJCQkJcGdwYV9x Zl90eXBlIHR5cGUsCisJCQkJCQkJCQlQbGFuICpwbGFuKTsKKworZXh0ZXJuIEVsaWRlZE5vZGUg KnBncGFfbGFzdF9lbGlkZWRfbm9kZShQbGFubmVkU3RtdCAqcHN0bXQsIFBsYW4gKnBsYW4pOwor ZXh0ZXJuIEJpdG1hcHNldCAqcGdwYV9yZWxpZHMoUGxhbiAqcGxhbik7CitleHRlcm4gSW5kZXgg cGdwYV9zY2FucmVsaWQoUGxhbiAqcGxhbik7CitleHRlcm4gQml0bWFwc2V0ICpwZ3BhX2ZpbHRl cl9vdXRfam9pbl9yZWxpZHMoQml0bWFwc2V0ICpyZWxpZHMsIExpc3QgKnJ0YWJsZSk7CisKK2V4 dGVybiBib29sIHBncGFfd2Fsa2VyX3dvdWxkX2FkdmlzZShwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRl eHQgKndhbGtlciwKKwkJCQkJCQkJCSBwZ3BhX2lkZW50aWZpZXIgKnJ0X2lkZW50aWZpZXJzLAor CQkJCQkJCQkJIHBncGFfYWR2aWNlX3RhZ190eXBlIHRhZywKKwkJCQkJCQkJCSBwZ3BhX2Fkdmlj ZV90YXJnZXQgKnRhcmdldCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFu X2FkdmljZS9zcWwvZ2F0aGVyLnNxbCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL2dhdGhl ci5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjc3NjY2NmJmMTk2 Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvZ2F0aGVyLnNx bApAQCAtMCwwICsxLDg2IEBACitMT0FEICdwZ19wbGFuX2FkdmljZSc7CitTRVQgbWF4X3BhcmFs bGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9IDE7CitTRVQgcGFyYWxsZWxfc2V0dXBfY29zdCA9IDA7 CitTRVQgcGFyYWxsZWxfdHVwbGVfY29zdCA9IDA7CitTRVQgbWluX3BhcmFsbGVsX3RhYmxlX3Nj YW5fc2l6ZSA9IDA7CitTRVQgZGVidWdfcGFyYWxsZWxfcXVlcnkgPSBvZmY7CisKK0NSRUFURSBU QUJMRSBndF9kaW0gKGlkIHNlcmlhbCBwcmltYXJ5IGtleSwgZGltIHRleHQpCisJV0lUSCAoYXV0 b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gZ3RfZGltIChkaW0pIFNFTEVD VCByYW5kb20oKTo6dGV4dCBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMCkgZzsKK1ZBQ1VVTSBB TkFMWVpFIGd0X2RpbTsKKworQ1JFQVRFIFRBQkxFIGd0X2ZhY3QgKAorCWlkIGludCBub3QgbnVs bCwKKwlkaW1faWQgaW50ZWdlciBub3QgbnVsbCByZWZlcmVuY2VzIGd0X2RpbSAoaWQpCispIFdJ VEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJTlRPIGd0X2ZhY3QKKwlT RUxFQ1QgZywgKGclMykrMSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDAwMCkgZzsKK1ZBQ1VV TSBBTkFMWVpFIGd0X2ZhY3Q7CisKKy0tIEJ5IGRlZmF1bHQsIHdlIGV4cGVjdCBHYXRoZXIgTWVy Z2Ugd2l0aCBhIHBhcmFsbGVsIGhhc2ggam9pbi4KK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9B RFZJQ0UpCisJU0VMRUNUICogRlJPTSBndF9mYWN0IGYgSk9JTiBndF9kaW0gZCBPTiBmLmRpbV9p ZCA9IGQuaWQgT1JERVIgQlkgZC5pZDsKKworLS0gRm9yY2UgR2F0aGVyIG9yIEdhdGhlciBNZXJn ZSBvZiBib3RoIHJlbGF0aW9ucyB0b2dldGhlci4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5f YWR2aWNlLmFkdmljZSA9ICdnYXRoZXJfbWVyZ2UoKGYgZCkpJzsKK0VYUExBSU4gKENPU1RTIE9G RiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBndF9mYWN0IGYgSk9JTiBndF9kaW0gZCBP TiBmLmRpbV9pZCA9IGQuaWQgT1JERVIgQlkgZC5pZDsKK1NFVCBMT0NBTCBwZ19wbGFuX2Fkdmlj ZS5hZHZpY2UgPSAnZ2F0aGVyKChmIGQpKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURW SUNFKQorCVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5kaW1faWQg PSBkLmlkIE9SREVSIEJZIGQuaWQ7CitDT01NSVQ7CisKKy0tIEZvcmNlIGEgc2VwYXJhdGUgR2F0 aGVyIG9yIEdhdGhlciBNZXJnZSBvcGVyYXRpb24gZm9yIGVhY2ggcmVsYXRpb24uCitCRUdJTjsK K1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnZ2F0aGVyX21lcmdlKGYgZCknOwor RVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3Qg ZiBKT0lOIGd0X2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZCBPUkRFUiBCWSBkLmlkOworU0VUIExP Q0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdnYXRoZXIoZiBkKSc7CitFWFBMQUlOIChDT1NU UyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGlt IGQgT04gZi5kaW1faWQgPSBkLmlkIE9SREVSIEJZIGQuaWQ7CitTRVQgTE9DQUwgcGdfcGxhbl9h ZHZpY2UuYWR2aWNlID0gJ2dhdGhlcigoZCBkL2QuZCkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwg UExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBndF9mYWN0IGYgSk9JTiBndF9kaW0gZCBPTiBm LmRpbV9pZCA9IGQuaWQgT1JERVIgQlkgZC5pZDsKK0NPTU1JVDsKKworLS0gRm9yY2UgYSBHYXRo ZXIgb3IgR2F0aGVyIE1lcmdlIG9uIG9uZSByZWxhdGlvbiBidXQgbm8gcGFyYWxsZWxpc20gb24g b3RoZXIuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnZ2F0aGVy X21lcmdlKGYpIG5vX2dhdGhlcihkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNF KQorCVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5kaW1faWQgPSBk LmlkIE9SREVSIEJZIGQuaWQ7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2dh dGhlcl9tZXJnZShkKSBub19nYXRoZXIoZiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FE VklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2RpbSBkIE9OIGYuZGltX2lk ID0gZC5pZCBPUkRFUiBCWSBkLmlkOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9 ICdnYXRoZXIoZikgbm9fZ2F0aGVyKGQpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJ Q0UpCisJU0VMRUNUICogRlJPTSBndF9mYWN0IGYgSk9JTiBndF9kaW0gZCBPTiBmLmRpbV9pZCA9 IGQuaWQgT1JERVIgQlkgZC5pZDsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAn Z2F0aGVyKGQpIG5vX2dhdGhlcihmKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNF KQorCVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5kaW1faWQgPSBk LmlkIE9SREVSIEJZIGQuaWQ7CitDT01NSVQ7CisKKy0tIEZvcmNlIG5vIEdhdGhlciBvciBHYXRo ZXIgTWVyZ2UgdXNlIGF0IGFsbC4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFk dmljZSA9ICdub19nYXRoZXIoZiBkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNF KQorCVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5kaW1faWQgPSBk LmlkIE9SREVSIEJZIGQuaWQ7CitDT01NSVQ7CisKKy0tIENhbid0IGZvcmNlIEdhdGhlciBNZXJn ZSB3aXRob3V0IHRoZSBPUkRFUiBCWSBjbGF1c2UsIGJ1dCBqdXN0IEdhdGhlciBpcyBPSy4KK0JF R0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdnYXRoZXJfbWVyZ2UoKGYg ZCkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBn dF9mYWN0IGYgSk9JTiBndF9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CitTRVQgTE9DQUwgcGdf cGxhbl9hZHZpY2UuYWR2aWNlID0gJ2dhdGhlcigoZiBkKSknOworRVhQTEFJTiAoQ09TVFMgT0ZG LCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2RpbSBkIE9O IGYuZGltX2lkID0gZC5pZDsKK0NPTU1JVDsKKworLS0gVGVzdCBjb25mbGljdGluZyBhZHZpY2Uu CitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnZ2F0aGVyKChmIGQp KSBub19nYXRoZXIoZiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxF Q1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZCBPUkRF UiBCWSBkLmlkOworQ09NTUlUOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9z cWwvam9pbl9vcmRlci5zcWwgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9qb2luX29yZGVy LnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uODhkOTBkZTljYzYK LS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9qb2luX29yZGVy LnNxbApAQCAtMCwwICsxLDE0NSBAQAorTE9BRCAncGdfcGxhbl9hZHZpY2UnOworU0VUIG1heF9w YXJhbGxlbF93b3JrZXJzX3Blcl9nYXRoZXIgPSAwOworCitDUkVBVEUgVEFCTEUgam9fZGltMSAo aWQgaW50ZWdlciBwcmltYXJ5IGtleSwgZGltMSB0ZXh0LCB2YWwxIGludCkKKwlXSVRIIChhdXRv dmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5UTyBqb19kaW0xIChpZCwgZGltMSwg dmFsMSkKKwlTRUxFQ1QgZywgJ3NvbWUgZmlsbGVyIHRleHQgJyB8fCBnLCAoZyAlIDMpICsgMQor CSAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDApIGc7CitWQUNVVU0gQU5BTFlaRSBqb19kaW0x OworQ1JFQVRFIFRBQkxFIGpvX2RpbTIgKGlkIGludGVnZXIgcHJpbWFyeSBrZXksIGRpbTIgdGV4 dCwgdmFsMiBpbnQpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJU IElOVE8gam9fZGltMiAoaWQsIGRpbTIsIHZhbDIpCisJU0VMRUNUIGcsICdzb21lIGZpbGxlciB0 ZXh0ICcgfHwgZywgKGcgJSA1MykgKyAxCisJICBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDAp IGc7CitWQUNVVU0gQU5BTFlaRSBqb19kaW0yOworCitDUkVBVEUgVEFCTEUgam9fZmFjdCAoCisJ aWQgaW50IHByaW1hcnkga2V5LAorCWRpbTFfaWQgaW50ZWdlciBub3QgbnVsbCByZWZlcmVuY2Vz IGpvX2RpbTEgKGlkKSwKKwlkaW0yX2lkIGludGVnZXIgbm90IG51bGwgcmVmZXJlbmNlcyBqb19k aW0yIChpZCkKKykgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElO VE8gam9fZmFjdAorCVNFTEVDVCBnLCAoZyUxMDApKzEsIChnJTEwMCkrMSBGUk9NIGdlbmVyYXRl X3NlcmllcygxLDEwMDAwMCkgZzsKK1ZBQ1VVTSBBTkFMWVpFIGpvX2ZhY3Q7CisKKy0tIFdlIGV4 cGVjdCB0byBqb2luIHRvIGQyIGZpcnN0IGFuZCB0aGVuIGQxLCBzaW5jZSB0aGUgY29uZGl0aW9u IG9uIGQyCistLSBpcyBtb3JlIHNlbGVjdGl2ZS4KK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9B RFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGpvX2ZhY3QgZgorCUxFRlQgSk9JTiBqb19kaW0xIGQxIE9O IGYuZGltMV9pZCA9IGQxLmlkCisJTEVGVCBKT0lOIGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkID0g ZDIuaWQKKwlXSEVSRSB2YWwxID0gMSBBTkQgdmFsMiA9IDE7CisKKy0tIEZvcmNlIGEgZmV3IGRp ZmZlcmVudCBqb2luIG9yZGVycy4gU29tZSBvZiB0aGVzZSBhcmUgdmVyeSBpbmVmZmljaWVudCwK Ky0tIGJ1dCB0aGUgcGxhbm5lciBjb25zaWRlcnMgdGhlbSBhbGwgdmlhYmxlLgorQkVHSU47CitT RVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2pvaW5fb3JkZXIoZiBkMSBkMiknOwor RVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gam9fZmFjdCBm CisJTEVGVCBKT0lOIGpvX2RpbTEgZDEgT04gZi5kaW0xX2lkID0gZDEuaWQKKwlMRUZUIEpPSU4g am9fZGltMiBkMiBPTiBmLmRpbTJfaWQgPSBkMi5pZAorCVdIRVJFIHZhbDEgPSAxIEFORCB2YWwy ID0gMTsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnam9pbl9vcmRlcihmIGQy IGQxKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBq b19mYWN0IGYKKwlMRUZUIEpPSU4gam9fZGltMSBkMSBPTiBmLmRpbTFfaWQgPSBkMS5pZAorCUxF RlQgSk9JTiBqb19kaW0yIGQyIE9OIGYuZGltMl9pZCA9IGQyLmlkCisJV0hFUkUgdmFsMSA9IDEg QU5EIHZhbDIgPSAxOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdqb2luX29y ZGVyKGQxIGYgZDIpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1Qg KiBGUk9NIGpvX2ZhY3QgZgorCUxFRlQgSk9JTiBqb19kaW0xIGQxIE9OIGYuZGltMV9pZCA9IGQx LmlkCisJTEVGVCBKT0lOIGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkID0gZDIuaWQKKwlXSEVSRSB2 YWwxID0gMSBBTkQgdmFsMiA9IDE7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0g J2pvaW5fb3JkZXIoZiAoZDEgZDIpKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNF KQorU0VMRUNUICogRlJPTSBqb19mYWN0IGYKKwlMRUZUIEpPSU4gam9fZGltMSBkMSBPTiBmLmRp bTFfaWQgPSBkMS5pZAorCUxFRlQgSk9JTiBqb19kaW0yIGQyIE9OIGYuZGltMl9pZCA9IGQyLmlk CisJV0hFUkUgdmFsMSA9IDEgQU5EIHZhbDIgPSAxOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNl LmFkdmljZSA9ICdqb2luX29yZGVyKGYge2QxIGQyfSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQ TEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gam9fZmFjdCBmCisJTEVGVCBKT0lOIGpvX2RpbTEg ZDEgT04gZi5kaW0xX2lkID0gZDEuaWQKKwlMRUZUIEpPSU4gam9fZGltMiBkMiBPTiBmLmRpbTJf aWQgPSBkMi5pZAorCVdIRVJFIHZhbDEgPSAxIEFORCB2YWwyID0gMTsKK0NPTU1JVDsKKworLS0g Rm9yY2UgYSBqb2luIG9yZGVyIGJ5IG1lbnRpb25pbmcganVzdCBhIHByZWZpeCBvZiB0aGUgam9p biBsaXN0LgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2pvaW5f b3JkZXIoZDIpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBG Uk9NIGpvX2ZhY3QgZgorCUxFRlQgSk9JTiBqb19kaW0xIGQxIE9OIGYuZGltMV9pZCA9IGQxLmlk CisJTEVGVCBKT0lOIGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkID0gZDIuaWQKKwlXSEVSRSB2YWwx ID0gMSBBTkQgdmFsMiA9IDE7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2pv aW5fb3JkZXIoZDIgZDEpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxF Q1QgKiBGUk9NIGpvX2ZhY3QgZgorCUxFRlQgSk9JTiBqb19kaW0xIGQxIE9OIGYuZGltMV9pZCA9 IGQxLmlkCisJTEVGVCBKT0lOIGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkID0gZDIuaWQKKwlXSEVS RSB2YWwxID0gMSBBTkQgdmFsMiA9IDE7CitDT01NSVQ7CisKKy0tIGpvX2ZhY3QgaXMgbm90IHBh cnRpdGlvbmVkLCBidXQgbGV0J3MgdHJ5IHByZXRlbmRpbmcgdGhhdCBpdCBpcyBhbmQKKy0tIHZl cmlmeWluZyB0aGF0IHRoZSBhZHZpY2UgZG9lcyBub3QgYXBwbHkuCitCRUdJTjsKK1NFVCBMT0NB TCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnam9pbl9vcmRlcihmL2QxIGQxIGQyKSc7CitFWFBM QUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBqb19mYWN0IGYKKwlM RUZUIEpPSU4gam9fZGltMSBkMSBPTiBmLmRpbTFfaWQgPSBkMS5pZAorCUxFRlQgSk9JTiBqb19k aW0yIGQyIE9OIGYuZGltMl9pZCA9IGQyLmlkCisJV0hFUkUgdmFsMSA9IDEgQU5EIHZhbDIgPSAx OworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdqb2luX29yZGVyKGYvZDEgKGQx IGQyKSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00g am9fZmFjdCBmCisJTEVGVCBKT0lOIGpvX2RpbTEgZDEgT04gZi5kaW0xX2lkID0gZDEuaWQKKwlM RUZUIEpPSU4gam9fZGltMiBkMiBPTiBmLmRpbTJfaWQgPSBkMi5pZAorCVdIRVJFIHZhbDEgPSAx IEFORCB2YWwyID0gMTsKK0NPTU1JVDsKKworLS0gVGhlIHVudXN1YWwgZm9ybXVsYXRpb24gb2Yg dGhpcyBxdWVyeSBpcyBpbnRlbmRlZCB0byBwcmV2ZW50IHRoZSBxdWVyeQorLS0gcGxhbm5lciBm cm9tIHJlZHVjaW5nIHRoZSBGVUxMIEpPSU4gdG8gc29tZSBvdGhlciBqb2luIHR5cGUsIHNvIHRo YXQgd2UKKy0tIGNhbiB0ZXN0IHdoYXQgaGFwcGVucyB3aXRoIGEgam9pbiB0eXBlIHRoYXQgY2Fu bm90IGJlIHJlb3JkZXJlZC4KK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxF Q1QgKiBGUk9NIGpvX2RpbTEgZDEKKwlJTk5FUiBKT0lOIChqb19mYWN0IGYgRlVMTCBKT0lOIGpv X2RpbTIgZDIgT04gZi5kaW0yX2lkICsgMCA9IGQyLmlkICsgMCkKKwlPTiBkMS5pZCA9IGYuZGlt MV9pZCBPUiBmLmRpbTFfaWQgSVMgTlVMTDsKKworLS0gV2Ugc2hvdWxkIG5vdCBiZSBhYmxlIHRv IGZvcmNlIHRoZSBwbGFubmVyIHRvIGpvaW4gZiB0byBkMSBmaXJzdCwgYmVjYXVzZQorLS0gdGhh dCBpcyBub3QgYSB2YWxpZCBqb2luIG9yZGVyLCBidXQgd2Ugc2hvdWxkIGJlIGFibGUgdG8gZm9y Y2UgdGhlIHBsYW5uZXIKKy0tIHRvIG1ha2UgZWl0aGVyIGQyIG9yIGYgdGhlIGRyaXZpbmcgdGFi bGUuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnam9pbl9vcmRl cihmIGQxIGQyKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICog RlJPTSBqb19kaW0xIGQxCisJSU5ORVIgSk9JTiAoam9fZmFjdCBmIEZVTEwgSk9JTiBqb19kaW0y IGQyIE9OIGYuZGltMl9pZCArIDAgPSBkMi5pZCArIDApCisJT04gZDEuaWQgPSBmLmRpbTFfaWQg T1IgZi5kaW0xX2lkIElTIE5VTEw7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0g J2pvaW5fb3JkZXIoZiBkMiBkMSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkK K1NFTEVDVCAqIEZST00gam9fZGltMSBkMQorCUlOTkVSIEpPSU4gKGpvX2ZhY3QgZiBGVUxMIEpP SU4gam9fZGltMiBkMiBPTiBmLmRpbTJfaWQgKyAwID0gZDIuaWQgKyAwKQorCU9OIGQxLmlkID0g Zi5kaW0xX2lkIE9SIGYuZGltMV9pZCBJUyBOVUxMOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNl LmFkdmljZSA9ICdqb2luX29yZGVyKGQyIGYgZDEpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExB Tl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGpvX2RpbTEgZDEKKwlJTk5FUiBKT0lOIChqb19mYWN0 IGYgRlVMTCBKT0lOIGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkICsgMCA9IGQyLmlkICsgMCkKKwlP TiBkMS5pZCA9IGYuZGltMV9pZCBPUiBmLmRpbTFfaWQgSVMgTlVMTDsKK0NPTU1JVDsKKworLS0g VHdvIGluY29tcGF0aWJsZSBqb2luIG9yZGVycyBzaG91bGQgY29uZmxpY3QuIEluIHRoZSBzZWNv bmQgY2FzZSwKKy0tIHRoZSBjb25mbGljdCBpcyBpbXBsaWNpdDogaWYgZDEgaXMgb24gdGhlIGlu bmVyIHNpZGUgb2YgYSBqb2luIG9mIGFueQorLS0gdHlwZSwgaXQgY2Fubm90IGFsc28gYmUgdGhl IGRyaXZpbmcgdGFibGUuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2Ug PSAnam9pbl9vcmRlcihmKSBqb2luX29yZGVyKGQxKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBM QU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBqb19kaW0xIGQxCisJSU5ORVIgSk9JTiAoam9fZmFj dCBmIEZVTEwgSk9JTiBqb19kaW0yIGQyIE9OIGYuZGltMl9pZCArIDAgPSBkMi5pZCArIDApCisJ T04gZDEuaWQgPSBmLmRpbTFfaWQgT1IgZi5kaW0xX2lkIElTIE5VTEw7CitTRVQgTE9DQUwgcGdf cGxhbl9hZHZpY2UuYWR2aWNlID0gJ2pvaW5fb3JkZXIoZDEpIGhhc2hfam9pbihkMSknOworRVhQ TEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gam9fZGltMSBkMQor CUlOTkVSIEpPSU4gKGpvX2ZhY3QgZiBGVUxMIEpPSU4gam9fZGltMiBkMiBPTiBmLmRpbTJfaWQg KyAwID0gZDIuaWQgKyAwKQorCU9OIGQxLmlkID0gZi5kaW0xX2lkIE9SIGYuZGltMV9pZCBJUyBO VUxMOworQ09NTUlUOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvam9p bl9zdHJhdGVneS5zcWwgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9qb2luX3N0cmF0ZWd5 LnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZWRkNWM0YzBlMTQK LS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9qb2luX3N0cmF0 ZWd5LnNxbApAQCAtMCwwICsxLDg0IEBACitMT0FEICdwZ19wbGFuX2FkdmljZSc7CitTRVQgbWF4 X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9IDA7CisKK0NSRUFURSBUQUJMRSBqb2luX2Rp bSAoaWQgc2VyaWFsIHByaW1hcnkga2V5LCBkaW0gdGV4dCkKKwlXSVRIIChhdXRvdmFjdXVtX2Vu YWJsZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5UTyBqb2luX2RpbSAoZGltKSBTRUxFQ1QgcmFuZG9t KCk6OnRleHQgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDApIGc7CitWQUNVVU0gQU5BTFlaRSBq b2luX2RpbTsKKworQ1JFQVRFIFRBQkxFIGpvaW5fZmFjdCAoCisJaWQgaW50IHByaW1hcnkga2V5 LAorCWRpbV9pZCBpbnRlZ2VyIG5vdCBudWxsIHJlZmVyZW5jZXMgam9pbl9kaW0gKGlkKQorKSBX SVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5UTyBqb2luX2ZhY3QK KwlTRUxFQ1QgZywgKGclMykrMSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDAwMCkgZzsKK0NS RUFURSBJTkRFWCBqb2luX2ZhY3RfZGltX2lkIE9OIGpvaW5fZmFjdCAoZGltX2lkKTsKK1ZBQ1VV TSBBTkFMWVpFIGpvaW5fZmFjdDsKKworLS0gV2UgZXhwZWN0IGEgaGFzaCBqb2luIGJ5IGRlZmF1 bHQuCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gam9p bl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKKworLS0gVHJ5IGZv cmNpbmcgZWFjaCBqb2luIG1ldGhvZCBpbiB0dXJuIHdpdGggam9pbl9kaW0gYXMgdGhlIGlubmVy IHRhYmxlLgorLS0gQWxsIG9mIHRoZXNlIHNob3VsZCB3b3JrIGV4Y2VwdCBmb3IgTUVSR0VfSk9J Tl9NQVRFUklBTElaRTsgdGhhdCB3aWxsCistLSBmYWlsLCBiZWNhdXNlIHRoZSBwbGFubmVyIGtu b3dzIHRoYXQgam9pbl9kaW0gKGlkKSBpcyB1bmlxdWUsIGFuZCB3aWxsCistLSByZWZ1c2UgdG8g YWRkIG1hcmsvcmVzdG9yZSBvdmVyaGVhZC4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2 aWNlLmFkdmljZSA9ICdIQVNIX0pPSU4oZCknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FE VklDRSkKKwlTRUxFQ1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRp bV9pZCA9IGQuaWQ7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ01FUkdFX0pP SU5fTUFURVJJQUxJWkUoZCknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlT RUxFQ1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQu aWQ7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ01FUkdFX0pPSU5fUExBSU4o ZCknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGpv aW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CitTRVQgTE9DQUwg cGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ05FU1RFRF9MT09QX01BVEVSSUFMSVpFKGQpJzsKK0VY UExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3Qg ZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworU0VUIExPQ0FMIHBnX3BsYW5f YWR2aWNlLmFkdmljZSA9ICdORVNURURfTE9PUF9NRU1PSVpFKGQpJzsKK0VYUExBSU4gKENPU1RT IE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5f ZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmlj ZSA9ICdORVNURURfTE9PUF9QTEFJTihkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURW SUNFKQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGlt X2lkID0gZC5pZDsKK0NPTU1JVDsKKworLS0gTm93IHRyeSBmb3JjaW5nIGVhY2ggam9pbiBtZXRo b2QgaW4gdHVybiB3aXRoIGpvaW5fZmFjdCBhcyB0aGUgaW5uZXIKKy0tIHRhYmxlLiBBbGwgb2Yg dGhlc2Ugc2hvdWxkIHdvcmsuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZp Y2UgPSAnSEFTSF9KT0lOKGYpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJ U0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBk LmlkOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdNRVJHRV9KT0lOX01BVEVS SUFMSVpFKGYpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICog RlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworU0VU IExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdNRVJHRV9KT0lOX1BMQUlOKGYpJzsKK0VY UExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3Qg ZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworU0VUIExPQ0FMIHBnX3BsYW5f YWR2aWNlLmFkdmljZSA9ICdORVNURURfTE9PUF9NQVRFUklBTElaRShmKSc7CitFWFBMQUlOIChD T1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBq b2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5h ZHZpY2UgPSAnTkVTVEVEX0xPT1BfTUVNT0laRShmKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBM QU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9O IGYuZGltX2lkID0gZC5pZDsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnTkVT VEVEX0xPT1BfUExBSU4oZiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlT RUxFQ1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQu aWQ7CitDT01NSVQ7CisKKy0tIE5vbi13b3JraW5nIGNhc2VzLiBXZSBjYW4ndCBmb3JjZSBhIGZv cmVpZ24gam9pbiBiZXR3ZWVuIHRoZXNlIHRhYmxlcywKKy0tIGJlY2F1c2UgdGhleSBhcmVuJ3Qg Zm9yZWlnbiB0YWJsZXMuIFdlIGFsc28gY2FuJ3QgdXNlIHR3byBkaWZmZXJlbnQKKy0tIHN0cmF0 ZWdpZXMgb24gdGhlIHNhbWUgdGFibGUsIG5vciBjYW4gd2UgcHV0IGJvdGggdGFibGVzIG9uIHRo ZSBpbm5lcgorLS0gc2lkZSBvZiB0aGUgc2FtZSBqb2luLgorQkVHSU47CitTRVQgTE9DQUwgcGdf cGxhbl9hZHZpY2UuYWR2aWNlID0gJ0ZPUkVJR05fSk9JTigoZiBkKSknOworRVhQTEFJTiAoQ09T VFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9p bl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2 aWNlID0gJ05FU1RFRF9MT09QX1BMQUlOKGYpIE5FU1RFRF9MT09QX01BVEVSSUFMSVpFKGYpJzsK K0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2luX2Zh Y3QgZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworU0VUIExPQ0FMIHBnX3Bs YW5fYWR2aWNlLmFkdmljZSA9ICdORVNURURfTE9PUF9QTEFJTihmIGQpJzsKK0VYUExBSU4gKENP U1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpv aW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworQ09NTUlUOwpkaWZmIC0tZ2l0IGEvY29udHJp Yi9wZ19wbGFuX2FkdmljZS9zcWwvcGFydGl0aW9ud2lzZS5zcWwgYi9jb250cmliL3BnX3BsYW5f YWR2aWNlL3NxbC9wYXJ0aXRpb253aXNlLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwMC4uYzUxNDU2ZGJiYjUKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3Bs YW5fYWR2aWNlL3NxbC9wYXJ0aXRpb253aXNlLnNxbApAQCAtMCwwICsxLDk5IEBACitMT0FEICdw Z19wbGFuX2FkdmljZSc7CitTRVQgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9IDA7 CitTRVQgZW5hYmxlX3BhcnRpdGlvbndpc2Vfam9pbiA9IHRydWU7CisKK0NSRUFURSBUQUJMRSBw dDEgKGlkIGludGVnZXIgcHJpbWFyeSBrZXksIGRpbTEgdGV4dCwgdmFsMSBpbnQpCisJUEFSVElU SU9OIEJZIFJBTkdFIChpZCk7CitDUkVBVEUgVEFCTEUgcHQxYSBQQVJUSVRJT04gT0YgcHQxIEZP UiBWQUxVRVMgRlJPTSAoMSkgdG8gKDEwMDEpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0g ZmFsc2UpOworQ1JFQVRFIFRBQkxFIHB0MWIgUEFSVElUSU9OIE9GIHB0MSBGT1IgVkFMVUVTIEZS T00gKDEwMDEpIHRvICgyMDAxKQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsK K0NSRUFURSBUQUJMRSBwdDFjIFBBUlRJVElPTiBPRiBwdDEgRk9SIFZBTFVFUyBGUk9NICgyMDAx KSB0byAoMzAwMSkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitJTlNFUlQg SU5UTyBwdDEgKGlkLCBkaW0xLCB2YWwxKQorCVNFTEVDVCBnLCAnc29tZSBmaWxsZXIgdGV4dCAn IHx8IGcsIChnICUgMykgKyAxCisJICBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDMwMDApIGc7CitW QUNVVU0gQU5BTFlaRSBwdDE7CisKK0NSRUFURSBUQUJMRSBwdDIgKGlkIGludGVnZXIgcHJpbWFy eSBrZXksIGRpbTIgdGV4dCwgdmFsMiBpbnQpCisJUEFSVElUSU9OIEJZIFJBTkdFIChpZCk7CitD UkVBVEUgVEFCTEUgcHQyYSBQQVJUSVRJT04gT0YgcHQyIEZPUiBWQUxVRVMgRlJPTSAoMSkgdG8g KDEwMDEpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworQ1JFQVRFIFRBQkxF IHB0MmIgUEFSVElUSU9OIE9GIHB0MiBGT1IgVkFMVUVTIEZST00gKDEwMDEpIHRvICgyMDAxKQor CVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0NSRUFURSBUQUJMRSBwdDJjIFBB UlRJVElPTiBPRiBwdDIgRk9SIFZBTFVFUyBGUk9NICgyMDAxKSB0byAoMzAwMSkKKwlXSVRIIChh dXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5UTyBwdDIgKGlkLCBkaW0yLCB2 YWwyKQorCVNFTEVDVCBnLCAnc29tZSBvdGhlciB0ZXh0ICcgfHwgZywgKGcgJSA1KSArIDEKKwkg IEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMzAwMCwyKSBnOworVkFDVVVNIEFOQUxZWkUgcHQyOwor CitDUkVBVEUgVEFCTEUgcHQzIChpZCBpbnRlZ2VyIHByaW1hcnkga2V5LCBkaW0zIHRleHQsIHZh bDMgaW50KQorCVBBUlRJVElPTiBCWSBSQU5HRSAoaWQpOworQ1JFQVRFIFRBQkxFIHB0M2EgUEFS VElUSU9OIE9GIHB0MyBGT1IgVkFMVUVTIEZST00gKDEpIHRvICgxMDAxKQorCVdJVEggKGF1dG92 YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0NSRUFURSBUQUJMRSBwdDNiIFBBUlRJVElPTiBPRiBw dDMgRk9SIFZBTFVFUyBGUk9NICgxMDAxKSB0byAoMjAwMSkKKwlXSVRIIChhdXRvdmFjdXVtX2Vu YWJsZWQgPSBmYWxzZSk7CitDUkVBVEUgVEFCTEUgcHQzYyBQQVJUSVRJT04gT0YgcHQzIEZPUiBW QUxVRVMgRlJPTSAoMjAwMSkgdG8gKDMwMDEpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0g ZmFsc2UpOworSU5TRVJUIElOVE8gcHQzIChpZCwgZGltMywgdmFsMykKKwlTRUxFQ1QgZywgJ2Eg dGhpcmQgcmFuZG9tIHRleHQgJyB8fCBnLCAoZyAlIDcpICsgMQorCSAgRlJPTSBnZW5lcmF0ZV9z ZXJpZXMoMSwzMDAwLDMpIGc7CitWQUNVVU0gQU5BTFlaRSBwdDM7CisKK0NSRUFURSBUQUJMRSBw dG1pc21hdGNoIChpZCBpbnRlZ2VyIHByaW1hcnkga2V5LCBkaW1tIHRleHQsIHZhbG0gaW50KQor CVBBUlRJVElPTiBCWSBSQU5HRSAoaWQpOworQ1JFQVRFIFRBQkxFIHB0bWlzbWF0Y2hhIFBBUlRJ VElPTiBPRiBwdG1pc21hdGNoCisgICAgRk9SIFZBTFVFUyBGUk9NICgxKSB0byAoMTUwMSkKKwlX SVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitDUkVBVEUgVEFCTEUgcHRtaXNtYXRj aGIgUEFSVElUSU9OIE9GIHB0bWlzbWF0Y2gKKyAgICBGT1IgVkFMVUVTIEZST00gKDE1MDEpIHRv ICgzMDAxKQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJTlRP IHB0bWlzbWF0Y2ggKGlkLCBkaW1tLCB2YWxtKQorCVNFTEVDVCBnLCAneWV0IGFub3RoZXIgdGV4 dCAnIHx8IGcsIChnICUgMikgKyAxCisJICBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDMwMDApIGc7 CitWQUNVVU0gQU5BTFlaRSBwdG1pc21hdGNoOworCitFWFBMQUlOIChQTEFOX0FEVklDRSwgQ09T VFMgT0ZGKQorU0VMRUNUICogRlJPTSBwdDEsIHB0MiwgcHQzIFdIRVJFIHB0MS5pZCA9IHB0Mi5p ZCBBTkQgcHQyLmlkID0gcHQzLmlkCisgICBBTkQgdmFsMSA9IDEgQU5EIHZhbDIgPSAxIEFORCB2 YWwzID0gMTsKKworLS0gU3VwcHJlc3MgcGFydGl0aW9ud2lzZSBqb2luLCBvciBkbyBpdCBqdXN0 IHBhcnRpYWxseS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdQ QVJUSVRJT05XSVNFKHB0MSBwdDIgcHQzKSc7CitFWFBMQUlOIChQTEFOX0FEVklDRSwgQ09TVFMg T0ZGKQorU0VMRUNUICogRlJPTSBwdDEsIHB0MiwgcHQzIFdIRVJFIHB0MS5pZCA9IHB0Mi5pZCBB TkQgcHQyLmlkID0gcHQzLmlkCisgICBBTkQgdmFsMSA9IDEgQU5EIHZhbDIgPSAxIEFORCB2YWwz ID0gMTsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnUEFSVElUSU9OV0lTRSgo cHQxIHB0MikgcHQzKSc7CitFWFBMQUlOIChQTEFOX0FEVklDRSwgQ09TVFMgT0ZGKQorU0VMRUNU ICogRlJPTSBwdDEsIHB0MiwgcHQzIFdIRVJFIHB0MS5pZCA9IHB0Mi5pZCBBTkQgcHQyLmlkID0g cHQzLmlkCisgICBBTkQgdmFsMSA9IDEgQU5EIHZhbDIgPSAxIEFORCB2YWwzID0gMTsKK0NPTU1J VDsKKworLS0gVGVzdCBjb25mbGljdGluZyBhZHZpY2UuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19w bGFuX2FkdmljZS5hZHZpY2UgPSAnUEFSVElUSU9OV0lTRSgocHQxIHB0MikgKHB0MSBwdDMpKSc7 CitFWFBMQUlOIChQTEFOX0FEVklDRSwgQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBwdDEsIHB0 MiwgcHQzIFdIRVJFIHB0MS5pZCA9IHB0Mi5pZCBBTkQgcHQyLmlkID0gcHQzLmlkCisgICBBTkQg dmFsMSA9IDEgQU5EIHZhbDIgPSAxIEFORCB2YWwzID0gMTsKK0NPTU1JVDsKKworLS0gQ2FuJ3Qg Zm9yY2UgYSBwYXJ0aXRpb253aXNlIGpvaW4gd2l0aCBhIG1pc21hdGNoZWQgdGFibGUuCitCRUdJ TjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnUEFSVElUSU9OV0lTRSgocHQx IHB0bWlzbWF0Y2gpKSc7CitFWFBMQUlOIChQTEFOX0FEVklDRSwgQ09TVFMgT0ZGKQorU0VMRUNU ICogRlJPTSBwdDEsIHB0bWlzbWF0Y2ggV0hFUkUgcHQxLmlkID0gcHRtaXNtYXRjaC5pZDsKK0NP TU1JVDsKKworLS0gRm9yY2Ugam9pbiBvcmRlciBmb3IgYSBwYXJ0aWN1bGFyIGJyYW5jaCBvZiB0 aGUgcGFydGl0aW9ud2lzZSBqb2luIHdpdGgKKy0tIGFuZCB3aXRob3V0IG1lbnRpb25pbmcgdGhl IHNjaGVtYSBuYW1lLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0g J0pPSU5fT1JERVIocHQzL3B1YmxpYy5wdDNhIHB0Mi9wdWJsaWMucHQyYSBwdDEvcHVibGljLnB0 MWEpJzsKK0VYUExBSU4gKFBMQU5fQURWSUNFLCBDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIHB0 MSwgcHQyLCBwdDMgV0hFUkUgcHQxLmlkID0gcHQyLmlkIEFORCBwdDIuaWQgPSBwdDMuaWQKKyAg IEFORCB2YWwxID0gMSBBTkQgdmFsMiA9IDEgQU5EIHZhbDMgPSAxOworU0VUIExPQ0FMIHBnX3Bs YW5fYWR2aWNlLmFkdmljZSA9ICdKT0lOX09SREVSKHB0My9wdDNhIHB0Mi9wdDJhIHB0MS9wdDFh KSc7CitFWFBMQUlOIChQTEFOX0FEVklDRSwgQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBwdDEs IHB0MiwgcHQzIFdIRVJFIHB0MS5pZCA9IHB0Mi5pZCBBTkQgcHQyLmlkID0gcHQzLmlkCisgICBB TkQgdmFsMSA9IDEgQU5EIHZhbDIgPSAxIEFORCB2YWwzID0gMTsKK0NPTU1JVDsKZGlmZiAtLWdp dCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL3ByZXBhcmVkLnNxbCBiL2NvbnRyaWIvcGdf cGxhbl9hZHZpY2Uvc3FsL3ByZXBhcmVkLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwMC4uM2VjMzBlZWRlZTUKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3Bs YW5fYWR2aWNlL3NxbC9wcmVwYXJlZC5zcWwKQEAgLTAsMCArMSwzNyBAQAorTE9BRCAncGdfcGxh bl9hZHZpY2UnOworU0VUIG1heF9wYXJhbGxlbF93b3JrZXJzX3Blcl9nYXRoZXIgPSAwOworCitD UkVBVEUgVEFCTEUgcHRhYiAoaWQgaW50ZWdlciwgdmFsIHRleHQpIFdJVEggKGF1dG92YWN1dW1f ZW5hYmxlZCA9IGZhbHNlKTsKKworU0VUIHBnX3BsYW5fYWR2aWNlLmFsd2F5c19zdG9yZV9hZHZp Y2VfZGV0YWlscyA9IGZhbHNlOworCistLSBOb3QgcHJlcGFyZWQsIHNvIGFkdmljZSBzaG91bGQg YmUgZ2VuZXJhdGVkLgorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgCitTRUxFQ1Qg KiBGUk9NIHB0YWI7CisKKy0tIFByZXBhcmVkLCBzbyBhZHZpY2Ugc2hvdWxkIG5vdCBiZSBnZW5l cmF0ZWQuCitQUkVQQVJFIHB0MSBBUyBTRUxFQ1QgKiBGUk9NIHB0YWI7CitFWFBMQUlOIChDT1NU UyBPRkYsIFBMQU5fQURWSUNFKSBFWEVDVVRFIHB0MTsKKworU0VUIHBnX3BsYW5fYWR2aWNlLmFs d2F5c19zdG9yZV9hZHZpY2VfZGV0YWlscyA9IHRydWU7CisKKy0tIFByZXBhcmVkLCBidXQgYWx3 YXlzX3N0b3JlX2FkdmljZV9kZXRhaWxzID0gdHJ1ZSwgc28gc2hvdWxkIHNob3cgYWR2aWNlLgor UFJFUEFSRSBwdDIgQVMgU0VMRUNUICogRlJPTSBwdGFiOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQ TEFOX0FEVklDRSkgRVhFQ1VURSBwdDI7CisKKy0tIE5vdCBwcmVwYXJlZCwgc28gZmVlZGJhY2sg c2hvdWxkIGJlIGdlbmVyYXRlZC4KK1NFVCBwZ19wbGFuX2FkdmljZS5hbHdheXNfc3RvcmVfYWR2 aWNlX2RldGFpbHMgPSBmYWxzZTsKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1ND QU4ocHRhYiknOworRVhQTEFJTiAoQ09TVFMgT0ZGKSAKK1NFTEVDVCAqIEZST00gcHRhYjsKKwor LS0gUHJlcGFyZWQsIHNvIGFkdmljZSBzaG91bGQgbm90IGJlIGdlbmVyYXRlZC4KK1BSRVBBUkUg cHQzIEFTIFNFTEVDVCAqIEZST00gcHRhYjsKK0VYUExBSU4gKENPU1RTIE9GRikgRVhFQ1VURSBw dDE7CisKK1NFVCBwZ19wbGFuX2FkdmljZS5hbHdheXNfc3RvcmVfYWR2aWNlX2RldGFpbHMgPSB0 cnVlOworCistLSBQcmVwYXJlZCwgYnV0IGFsd2F5c19zdG9yZV9hZHZpY2VfZGV0YWlscyA9IHRy dWUsIHNvIHNob3VsZCBzaG93IGZlZWRiYWNrLgorUFJFUEFSRSBwdDQgQVMgU0VMRUNUICogRlJP TSBwdGFiOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgRVhFQ1VURSBwdDI7CisK ZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL3NjYW4uc3FsIGIvY29udHJp Yi9wZ19wbGFuX2FkdmljZS9zcWwvc2Nhbi5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMDAuLjRmYzQ5NGM3ZDhlCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19w bGFuX2FkdmljZS9zcWwvc2Nhbi5zcWwKQEAgLTAsMCArMSwxOTUgQEAKK0xPQUQgJ3BnX3BsYW5f YWR2aWNlJzsKK1NFVCBtYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyID0gMDsKK1NFVCBz ZXFfcGFnZV9jb3N0ID0gMC4xOworU0VUIHJhbmRvbV9wYWdlX2Nvc3QgPSAwLjE7CitTRVQgY3B1 X3R1cGxlX2Nvc3QgPSAwOworU0VUIGNwdV9pbmRleF90dXBsZV9jb3N0ID0gMDsKKworQ1JFQVRF IFRBQkxFIHNjYW5fdGFibGUgKGEgaW50IHByaW1hcnkga2V5LCBiIHRleHQpCisJV0lUSCAoYXV0 b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gc2Nhbl90YWJsZQorCVNFTEVD VCBnLCAnc29tZSB0ZXh0ICcgfHwgZyBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAxMDAwMDApIGc7 CitDUkVBVEUgSU5ERVggc2Nhbl90YWJsZV9iIE9OIHNjYW5fdGFibGUgVVNJTkcgYnJpbiAoYik7 CitWQUNVVU0gQU5BTFlaRSBzY2FuX3RhYmxlOworCistLSBTZXF1ZW50aWFsIHNjYW4KK0VYUExB SU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZTsKKwor LS0gSW5kZXggc2NhbgorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICog RlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworCistLSBJbmRleC1vbmx5IHNjYW4KK0VYUExB SU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCBhIEZST00gc2Nhbl90YWJsZSBXSEVS RSBhID0gMTsKKworLS0gQml0bWFwIGhlYXAgc2NhbgorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFO X0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlCisJV0hFUkUgYiA+ICdzb21lIHRleHQg OCc7CisKKy0tIFRJRCBzY2FuCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxF Q1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgY3RpZCA9ICcoMCwxKSc7CisKKy0tIFRJRCByYW5n ZSBzY2FuCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNj YW5fdGFibGUKKwlXSEVSRSBjdGlkID4gJygxLDEpJyBBTkQgY3RpZCA8ICcoMiwxKSc7CisKKy0t IFRyeSBmb3JjaW5nIGVhY2ggb2Ygb3VyIHRlc3QgcXVlcmllcyB0byB1c2UgdGhlIHNjYW4gdHlw ZSB0aGV5CistLSB3YW50ZWQgdG8gdXNlIGFueXdheS4gVGhpcyBzaG91bGQgc3VjY2VlZC4KK0JF R0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTihzY2FuX3Rh YmxlKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNj YW5fdGFibGU7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX1NDQU4o c2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9B RFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKK1NFVCBMT0NBTCBw Z19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfT05MWV9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90 YWJsZV9wa2V5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgYSBG Uk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2 aWNlID0gJ0JJVE1BUF9IRUFQX1NDQU4oc2Nhbl90YWJsZSknOworRVhQTEFJTiAoQ09TVFMgT0ZG LCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlCisJV0hFUkUgYiA+ICdzb21l IHRleHQgOCc7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1RJRF9TQ0FOKHNj YW5fdGFibGUpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZS T00gc2Nhbl90YWJsZSBXSEVSRSBjdGlkID0gJygwLDEpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwg UExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZQorCVdIRVJFIGN0aWQgPiAnKDEs MSknIEFORCBjdGlkIDwgJygyLDEpJzsKK0NPTU1JVDsKKworLS0gVHJ5IHRvIGZvcmNlIGEgZnVs bCBzY2FuIG9mIHRoZSB0YWJsZSB0byB1c2Ugc29tZSBvdGhlciBzY2FuIHR5cGUuIEFsbAorLS0g b2YgdGhlc2Ugd2lsbCBmYWlsLiBBbiBpbmRleCBzY2FuIG9yIGJpdG1hcCBoZWFwIHNjYW4gY291 bGQgcG90ZW50aWFsbHkKKy0tIGdlbmVyYXRlIHRoZSBjb3JyZWN0IGFuc3dlciwgYnV0IHRoZSBw bGFubmVyIGRvZXMgbm90IGV2ZW4gY29uc2lkZXIgdGhlc2UKKy0tIHBvc3NpYmlsaXRpZXMgZHVl IHRvIHRoZSBsYWNrIG9mIGEgV0hFUkUgY2xhdXNlLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxh bl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkp JzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90 YWJsZTsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfT05MWV9TQ0FO KHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5f QURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGU7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZp Y2UuYWR2aWNlID0gJ0JJVE1BUF9IRUFQX1NDQU4oc2Nhbl90YWJsZSknOworRVhQTEFJTiAoQ09T VFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlOworU0VUIExPQ0FM IHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdUSURfU0NBTihzY2FuX3RhYmxlKSc7CitFWFBMQUlO IChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGU7CitDT01N SVQ7CisKKy0tIFRyeSBhZ2FpbiB0byBmb3JjZSBpbmRleCB1c2UuIFRoaXMgc2hvdWxkIG5vdyBz dWNjZWVkIGZvciB0aGUgSU5ERVhfU0NBTgorLS0gYW5kIEJJVE1BUF9IRUFQX1NDQU4sIGJ1dCB0 aGUgSU5ERVhfT05MWV9TQ0FOIGNhbid0IGJlIGZvcmNlZCBiZWNhdXNlIHRoZQorLS0gcXVlcnkg ZmV0Y2hlcyBjb2x1bW5zIG5vdCBpbmNsdWRlZCBpbiB0aGUgaW5kZXguCitCRUdJTjsKK1NFVCBM T0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5f dGFibGVfcGtleSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICog RlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPiAwOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFk dmljZSA9ICdJTkRFWF9PTkxZX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpJzsKK0VY UExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBX SEVSRSBhID4gMDsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnQklUTUFQX0hF QVBfU0NBTihzY2FuX3RhYmxlKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBT RUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA+IDA7CitDT01NSVQ7CisKKy0tIFdlIGNh biBmb3JjZSBhIHByaW1hcnkga2V5IGxvb2t1cCB0byB1c2UgYSBzZXF1ZW50aWFsIHNjYW4sIGJ1 dCB3ZQorLS0gY2FuJ3QgZm9yY2UgaXQgdG8gdXNlIGFuIGluZGV4LW9ubHkgc2NhbiAoZHVlIHRv IHRoZSBjb2x1bW4gbGlzdCkKKy0tIG9yIGEgVElEIHNjYW4gKGR1ZSB0byB0aGUgYWJzZW5jZSBv ZiBhIFRJRCBxdWFsKS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9 ICdTRVFfU0NBTihzY2FuX3RhYmxlKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNF KSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CitTRVQgTE9DQUwgcGdfcGxh bl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX09OTFlfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVf cGtleSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBz Y2FuX3RhYmxlIFdIRVJFIGEgPSAxOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9 ICdUSURfU0NBTihzY2FuX3RhYmxlKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNF KSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CitDT01NSVQ7CisKKy0tIFdl IGNhbiBmb3JjaWJseSBkb3duZ3JhZGUgYW4gaW5kZXgtb25seSBzY2FuIHRvIGFuIGluZGV4IHNj YW4sIGJ1dCB3ZSBjYW4ndAorLS0gZm9yY2UgdGhlIHVzZSBvZiBhbiBpbmRleCB0aGF0IHRoZSBw bGFubmVyIHRoaW5rcyBpcyBpbmFwcGxpY2FibGUuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFu X2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSkn OworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3Rh YmxlIFdIRVJFIGEgPSAxOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRF WF9TQ0FOKHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSknOworRVhQTEFJTiAoQ09T VFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAx OworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9TQ0FOKHNjYW5fdGFi bGUgc2Nhbl90YWJsZV9iKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxF Q1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CitDT01NSVQ7CisKKy0tIFdlIGNhbiBm b3JjZSB0aGUgdXNlIG9mIGEgc2VxdWVudGlhbCBzY2FuIGluIHBsYWNlIG9mIGEgYml0bWFwIGhl YXAgc2NhbiwKKy0tIGJ1dCBhIHBsYWluIGluZGV4IHNjYW4gb24gYSBCUklOIGluZGV4IGlzIG5v dCBwb3NzaWJsZS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdT RVFfU0NBTihzY2FuX3RhYmxlKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBT RUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUKKwlXSEVSRSBiID4gJ3NvbWUgdGV4dCA4JzsKK1NFVCBM T0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5f dGFibGVfYiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJP TSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworQ09NTUlUOworCistLSBXZSBjYW4gZm9yY2UgdGhl IHVzZSBvZiBhIHNlcXVlbnRpYWwgc2NhbiByYXRoZXIgdGhhbiBhIFRJRCBzY2FuIG9yCistLSBU SUQgcmFuZ2Ugc2Nhbi4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9 ICdTRVFfU0NBTihzY2FuX3RhYmxlKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNF KSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgY3RpZCA9ICcoMCwxKSc7CitFWFBMQUlO IChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUKKwlXSEVS RSBjdGlkID4gJygxLDEpJyBBTkQgY3RpZCA8ICcoMiwxKSc7CitDT01NSVQ7CisKKy0tIFRlc3Qg bW9yZSBjb21wbGV4IHNjZW5hcmlvcyB3aXRoIGluZGV4IHNjYW5zLgorQkVHSU47CistLSBTaG91 bGQgc3RpbGwgd29yayBpZiB3ZSBtZW50aW9uIHRoZSBzY2hlbWEuCitTRVQgTE9DQUwgcGdfcGxh bl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX1NDQU4oc2Nhbl90YWJsZSBwdWJsaWMuc2Nhbl90YWJs ZV9wa2V5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9N IHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CistLSBCdXQgbm90IGlmIHdlIG1lbnRpb24gdGhlIHdy b25nIHNjaGVtYS4KK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfU0NB TihzY2FuX3RhYmxlIGNpbGJ1cC5zY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9G RiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKKy0t IEl0J3MgT0sgdG8gcmVwZWF0IHRoZSBzYW1lIGFkdmljZS4KK1NFVCBMT0NBTCBwZ19wbGFuX2Fk dmljZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSBzY2Fu X3RhYmxlIHNjYW5fdGFibGVfcGtleSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklD RSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworLS0gQnV0IGl0IGRvZXNu J3Qgd29yayBpZiB0aGUgaW5kZXggdGFyZ2V0IGlzIGV2ZW4gbm90aW9uYWxseSBkaWZmZXJlbnQu CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX1NDQU4oc2Nhbl90YWJs ZSBzY2FuX3RhYmxlX3BrZXkgc2Nhbl90YWJsZSBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5KSc7CitF WFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUg V0hFUkUgYSA9IDE7CitDT01NSVQ7CisKKy0tIFRlc3QgYXNzb3J0ZWQgaW5jb3JyZWN0IGFkdmlj ZS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTihu b3RoaW5nKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgYSBGUk9N IHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNl ID0gJ0lOREVYX1NDQU4obm90aGluZyB3aGF0c29ldmVyKSc7CitFWFBMQUlOIChDT1NUUyBPRkYs IFBMQU5fQURWSUNFKSBTRUxFQ1QgYSBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CitTRVQg TE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX1NDQU4oc2Nhbl90YWJsZSBib2d1 cyknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUIGEgRlJPTSBzY2Fu X3RhYmxlIFdIRVJFIGEgPSAxOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJ TkRFWF9PTkxZX1NDQU4obm90aGluZyB3aGF0c29ldmVyKSc7CitFWFBMQUlOIChDT1NUUyBPRkYs IFBMQU5fQURWSUNFKSBTRUxFQ1QgYSBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CitTRVQg TE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX09OTFlfU0NBTihzY2FuX3RhYmxl IGJvZ3VzKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgYSBGUk9N IHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CitDT01NSVQ7CisKKy0tIFRlc3Qgb3VyIGFiaWxpdHkg dG8gcmVmZXIgdG8gbXVsdGlwbGUgaW5zdGFuY2VzIG9mIHRoZSBzYW1lIGFsaWFzLgorQkVHSU47 CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSAoZ2VuZXJh dGVfc2VyaWVzKDEsMTApIGcgTEVGVCBKT0lOIHNjYW5fdGFibGUgcyBPTiBnID0gcy5hKSB4Cisg ICAgTEVGVCBKT0lOIHNjYW5fdGFibGUgcyBPTiBnID0gcy5hOworU0VUIExPQ0FMIHBnX3BsYW5f YWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTihzKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5f QURWSUNFKQorU0VMRUNUICogRlJPTSAoZ2VuZXJhdGVfc2VyaWVzKDEsMTApIGcgTEVGVCBKT0lO IHNjYW5fdGFibGUgcyBPTiBnID0gcy5hKSB4CisgICAgTEVGVCBKT0lOIHNjYW5fdGFibGUgcyBP TiBnID0gcy5hOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTihz IzIpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIChn ZW5lcmF0ZV9zZXJpZXMoMSwxMCkgZyBMRUZUIEpPSU4gc2Nhbl90YWJsZSBzIE9OIGcgPSBzLmEp IHgKKyAgICBMRUZUIEpPSU4gc2Nhbl90YWJsZSBzIE9OIGcgPSBzLmE7CitTRVQgTE9DQUwgcGdf cGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKHMpIFNFUV9TQ0FOKHMjMiknOworRVhQTEFJ TiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gKGdlbmVyYXRlX3Nlcmll cygxLDEwKSBnIExFRlQgSk9JTiBzY2FuX3RhYmxlIHMgT04gZyA9IHMuYSkgeAorICAgIExFRlQg Sk9JTiBzY2FuX3RhYmxlIHMgT04gZyA9IHMuYTsKK0NPTU1JVDsKKworLS0gVGVzdCBvdXIgYWJp bGl0eSB0byByZWZlciB0byBzY2FucyB3aXRoaW4gYSBzdWJxdWVyeS4KK0VYUExBSU4gKENPU1RT IE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIChTRUxFQ1QgKiBGUk9NIHNjYW5fdGFi bGUgcyBXSEVSRSBhID0gMSBPRkZTRVQgMCkgeDsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9B RFZJQ0UpCitTRUxFQ1QgKiBGUk9NIChTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgcyBXSEVSRSBh ID0gMSBPRkZTRVQgMCk7CitCRUdJTjsKKy0tIFNob3VsZCBub3QgbWF0Y2guCitTRVQgTE9DQUwg cGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKHMpJzsKK0VYUExBSU4gKENPU1RTIE9G RiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIChTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUg cyBXSEVSRSBhID0gMSBPRkZTRVQgMCkgeDsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJ Q0UpCitTRUxFQ1QgKiBGUk9NIChTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgcyBXSEVSRSBhID0g MSBPRkZTRVQgMCk7CistLSBTaG91bGQgbWF0Y2ggZmlyc3QgcXVlcnkgb25seS4KK1NFVCBMT0NB TCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oc0B4KSc7CitFWFBMQUlOIChDT1NU UyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSAoU0VMRUNUICogRlJPTSBzY2FuX3Rh YmxlIHMgV0hFUkUgYSA9IDEgT0ZGU0VUIDApIHg7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5f QURWSUNFKQorU0VMRUNUICogRlJPTSAoU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIHMgV0hFUkUg YSA9IDEgT0ZGU0VUIDApOworLS0gU2hvdWxkIG1hdGNoIHNlY29uZCBxdWVyeSBvbmx5LgorU0VU IExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTihzQHVubmFtZWRfc3VicXVl cnkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIChT RUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgcyBXSEVSRSBhID0gMSBPRkZTRVQgMCkgeDsKK0VYUExB SU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIChTRUxFQ1QgKiBGUk9N IHNjYW5fdGFibGUgcyBXSEVSRSBhID0gMSBPRkZTRVQgMCk7CitDT01NSVQ7CmRpZmYgLS1naXQg YS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9zZW1pam9pbi5zcWwgYi9jb250cmliL3BnX3Bs YW5fYWR2aWNlL3NxbC9zZW1pam9pbi5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMDAuLjVhNGFlNTJkMWQ5Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFu X2FkdmljZS9zcWwvc2VtaWpvaW4uc3FsCkBAIC0wLDAgKzEsMTE4IEBACitMT0FEICdwZ19wbGFu X2FkdmljZSc7CitTRVQgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9IDA7CisKK0NS RUFURSBUQUJMRSBzal93aWRlICgKKwlpZCBpbnRlZ2VyIHByaW1hcnkga2V5LAorCXZhbDEgaW50 ZWdlciwKKwlwYWRkaW5nIHRleHQgc3RvcmFnZSBwbGFpbgorKSBXSVRIIChhdXRvdmFjdXVtX2Vu YWJsZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5UTyBzal93aWRlCisJU0VMRUNUIGcsIGclMTArMSwg cmVwZWF0KCcgJywgMzAwKSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAxMDAwKSBnOworQ1JFQVRF IElOREVYIE9OIHNqX3dpZGUgKHZhbDEpOworVkFDVVVNIEFOQUxZWkUgc2pfd2lkZTsKKworQ1JF QVRFIFRBQkxFIHNqX25hcnJvdyAoCisJaWQgaW50ZWdlciBwcmltYXJ5IGtleSwKKwl2YWwxIGlu dGVnZXIKKykgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8g c2pfbmFycm93CisJU0VMRUNUIGcsIGclMTArMSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAxMDAw KSBnOworQ1JFQVRFIElOREVYIE9OIHNqX25hcnJvdyAodmFsMSk7CitWQUNVVU0gQU5BTFlaRSBz al9uYXJyb3c7CisKKy0tIFdlIGV4cGVjdCB0aGlzIHRvIG1ha2UgdGhlIFZBTFVFUyBsaXN0IHVu aXF1ZSBhbmQgdXNlIGluZGV4IGxvb2t1cHMgdG8KKy0tIGZpbmQgdGhlIHJvd3MgaW4gc2pfd2lk ZSwgc28gYXMgdG8gYXZvaWQgYSBmdWxsIHNjYW4gb2Ygc2pfd2lkZS4KK0VYUExBSU4gKENPU1RT IE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIHNqX3dpZGUKKwlXSEVSRSAoaWQsIHZh bDEpIElOIChWQUxVRVMgKDEsIDEpLCAoMiwgMiksICgzLCAzKSwgKDQsIDQpLCAoNSwgNSkpOwor CistLSBJZiB3ZSBhc2sgZm9yIGEgdW5pcXVlIHNlbWlqb2luLCB3ZSBzaG91bGQgZ2V0IHRoZSBz YW1lIHBsYW4gYXMgd2l0aAorLS0gbm8gYWR2aWNlLiBJZiB3ZSBhc2sgZm9yIGEgbm9uLXVuaXF1 ZSBzZW1pam9pbiwgd2Ugc2hvdWxkIHNlZSBhIFNlbWkKKy0tIEpvaW4gb3BlcmF0aW9uIGluIHRo ZSBwbGFuIHRyZWUuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAn c2VtaWpvaW5fdW5pcXVlKCIqVkFMVUVTKiIpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9B RFZJQ0UpCitTRUxFQ1QgKiBGUk9NIHNqX3dpZGUKKwlXSEVSRSAoaWQsIHZhbDEpIElOIChWQUxV RVMgKDEsIDEpLCAoMiwgMiksICgzLCAzKSwgKDQsIDQpLCAoNSwgNSkpOworU0VUIExPQ0FMIHBn X3BsYW5fYWR2aWNlLmFkdmljZSA9ICdzZW1pam9pbl9ub25fdW5pcXVlKCIqVkFMVUVTKiIpJzsK K0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIHNqX3dpZGUK KwlXSEVSRSAoaWQsIHZhbDEpIElOIChWQUxVRVMgKDEsIDEpLCAoMiwgMiksICgzLCAzKSwgKDQs IDQpLCAoNSwgNSkpOworQ09NTUlUOworCistLSBCZWNhdXNlIHRoaXMgdGFibGUgaXMgbmFycm93 ZXIgdGhhbiB0aGUgcHJldmlvdXMgb25lLCBhIHNlcXVlbnRpYWwgc2NhbgorLS0gaXMgbGVzcyBl eHBlbnNpdmUsIGFuZCB3ZSBjaG9vc2UgYSBzdHJhaWdodGZvcndhcmQgU2VtaSBKb2luIHBsYW4g YnkKKy0tIGRlZmF1bHQuIChOb3RlIHRoYXQgdGhpcyBpcyBhbHNvIHZlcnkgc2Vuc2l0aXZlIHRv IHRoZSBsZW5ndGggb2YgdGhlIElOCistLSBsaXN0LCB3aGljaCBhZmZlY3RzIGhvdyBtYW55IGlu ZGV4IGxvb2t1cHMgdGhlIGFsdGVybmF0aXZlIHBsYW4gd2lsbCBuZWVkLikKK0VYUExBSU4gKENP U1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIHNqX25hcnJvdworCVdIRVJFIChp ZCwgdmFsMSkgSU4gKFZBTFVFUyAoMSwgMSksICgyLCAyKSwgKDMsIDMpLCAoNCwgNCksICg1LCA1 KSk7CisKKy0tIEhlcmUsIHdlIGV4cGVjdCBhZHZpc2luZyBhIHVuaXF1ZSBzZW1pam9pbiB0byBz d2l0aCB0byB0aGUgc2FtZSBwbGFuIHRoYXQKKy0tIHdlIGdvdCB3aXRoIHNqX3dpZGUsIGFuZCBh ZHZpc2luZyBhIG5vbi11bmlxdWUgc2VtaWpvaW4gc2hvdWxkIG5vdCBjaGFuZ2UKKy0tIHRoZSBw bGFuLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ3NlbWlqb2lu X3VuaXF1ZSgiKlZBTFVFUyoiKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQor U0VMRUNUICogRlJPTSBzal9uYXJyb3cKKwlXSEVSRSAoaWQsIHZhbDEpIElOIChWQUxVRVMgKDEs IDEpLCAoMiwgMiksICgzLCAzKSwgKDQsIDQpLCAoNSwgNSkpOworU0VUIExPQ0FMIHBnX3BsYW5f YWR2aWNlLmFkdmljZSA9ICdzZW1pam9pbl9ub25fdW5pcXVlKCIqVkFMVUVTKiIpJzsKK0VYUExB SU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIHNqX25hcnJvdworCVdI RVJFIChpZCwgdmFsMSkgSU4gKFZBTFVFUyAoMSwgMSksICgyLCAyKSwgKDMsIDMpLCAoNCwgNCks ICg1LCA1KSk7CitDT01NSVQ7CisKKy0tIEluIHRoZSBhYm92ZSBleGFtcGxlLCB3ZSBtYWRlIHRo ZSBvdXRlciBzaWRlIG9mIHRoZSBqb2luIHVuaXF1ZSwgYnV0IGhlcmUsCistLSB3ZSBzaG91bGQg bWFrZSB0aGUgaW5uZXIgc2lkZSB1bmlxdWUuCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURW SUNFKQorU0VMRUNUICogRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwKSBnCisgICAgV0hFUkUg ZyBpbiAoc2VsZWN0IHZhbDEgZnJvbSBzal9uYXJyb3cpOworCistLSBXZSBzaG91bGQgYmUgYWJs ZSB0byBmb3JjZSBhIHBsYW4gd2l0aCBvciB3aXRob3V0IHRoZSBtYWtlLXVuaXF1ZSBzdHJhdGVn eSwKKy0tIHdpdGggZWl0aGVyIHNpZGUgYXMgdGhlIGRyaXZpbmcgdGFibGUuCitCRUdJTjsKK1NF VCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnc2VtaWpvaW5fdW5pcXVlKHNqX25hcnJv dyknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gZ2Vu ZXJhdGVfc2VyaWVzKDEsMTAwMCkgZworICAgIFdIRVJFIGcgaW4gKHNlbGVjdCB2YWwxIGZyb20g c2pfbmFycm93KTsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnc2VtaWpvaW5f bm9uX3VuaXF1ZShzal9uYXJyb3cpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0Up CitTRUxFQ1QgKiBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDApIGcKKyAgICBXSEVSRSBnIGlu IChzZWxlY3QgdmFsMSBmcm9tIHNqX25hcnJvdyk7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2Uu YWR2aWNlID0gJ3NlbWlqb2luX3VuaXF1ZShzal9uYXJyb3cpIGpvaW5fb3JkZXIoc2pfbmFycm93 KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBnZW5l cmF0ZV9zZXJpZXMoMSwxMDAwKSBnCisgICAgV0hFUkUgZyBpbiAoc2VsZWN0IHZhbDEgZnJvbSBz al9uYXJyb3cpOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdzZW1pam9pbl9u b25fdW5pcXVlKHNqX25hcnJvdykgam9pbl9vcmRlcihzal9uYXJyb3cpJzsKK0VYUExBSU4gKENP U1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEw MDApIGcKKyAgICBXSEVSRSBnIGluIChzZWxlY3QgdmFsMSBmcm9tIHNqX25hcnJvdyk7CitDT01N SVQ7CisKKy0tIEhvd2V2ZXIsIG1lbnRpb25pbmcgdGhlIHdyb25nIHNpZGUgb2YgdGhlIGpvaW4g c2hvdWxkIHJlc3VsdCBpbiBhbiBhZHZpY2UKKy0tIGZhaWx1cmUuCitCRUdJTjsKK1NFVCBMT0NB TCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnc2VtaWpvaW5fdW5pcXVlKGcpJzsKK0VYUExBSU4g KENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGdlbmVyYXRlX3Nlcmllcygx LDEwMDApIGcKKyAgICBXSEVSRSBnIGluIChzZWxlY3QgdmFsMSBmcm9tIHNqX25hcnJvdyk7CitT RVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ3NlbWlqb2luX25vbl91bmlxdWUoZykn OworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gZ2VuZXJh dGVfc2VyaWVzKDEsMTAwMCkgZworICAgIFdIRVJFIGcgaW4gKHNlbGVjdCB2YWwxIGZyb20gc2pf bmFycm93KTsKK0NPTU1JVDsKKworLS0gVGVzdCBjb25mbGljdGluZyBhZHZpY2UuCitCRUdJTjsK K1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnc2VtaWpvaW5fdW5pcXVlKHNqX25h cnJvdykgc2VtaWpvaW5fbm9uX3VuaXF1ZShzal9uYXJyb3cpJzsKK0VYUExBSU4gKENPU1RTIE9G RiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDApIGcK KyAgICBXSEVSRSBnIGluIChzZWxlY3QgdmFsMSBmcm9tIHNqX25hcnJvdyk7CitDT01NSVQ7CisK Ky0tIFRyeSBhcHBseWluZyBTRU1JSk9JTl9VTklRVUUoKSB0byBhIG5vbi1zZW1pam9pbi4KK0JF R0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdzZW1pam9pbl91bmlxdWUo ZyknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gZ2Vu ZXJhdGVfc2VyaWVzKDEsMTAwMCkgZywgc2pfbmFycm93IHMgV0hFUkUgZyA9IHMudmFsMTsKK0NP TU1JVDsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL3N5bnRheC5zcWwg Yi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9zeW50YXguc3FsCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi41NmE1ZDU0ZTJiNQotLS0gL2Rldi9udWxsCisrKyBiL2Nv bnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL3N5bnRheC5zcWwKQEAgLTAsMCArMSw2OCBAQAorTE9B RCAncGdfcGxhbl9hZHZpY2UnOworCistLSBBbiBlbXB0eSBzdHJpbmcgaXMgYWxsb3dlZC4gRW1w dHkgdGFyZ2V0IGxpc3RzIGFyZSBhbGxvd2VkIGZvciBtb3N0IGFkdmljZQorLS0gdGFncywgYnV0 IG5vdCBmb3IgSk9JTl9PUkRFUi4gIlN1cHBsaWVkIFBsYW4gQWR2aWNlIiBzaG91bGQgYmUgb21p dHRlZCBpbgorLS0gdGV4dCBmb3JtYXQgd2hlbiB0aGVyZSBpcyBubyBhY3R1YWwgYWR2aWNlLCBi dXQgbm90IGluIG5vbi10ZXh0IGZvcm1hdC4KK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAn JzsKK0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUIDE7CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2 aWNlID0gJ1NFUV9TQ0FOKCknOworRVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1QgMTsKK1NFVCBw Z19wbGFuX2FkdmljZS5hZHZpY2UgPSAnTkVTVEVEX0xPT1BfUExBSU4oKSc7CitFWFBMQUlOIChD T1NUUyBPRkYsIEZPUk1BVCBKU09OKSBTRUxFQ1QgMTsKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZp Y2UgPSAnSk9JTl9PUkRFUigpJzsKKworLS0gVGVzdCBhc3NvcnRlZCB2YXJpYXRpb25zIGluIGNh cGl0YWxpemF0aW9uLCB3aGl0ZXNwYWNlLCBhbmQgd2hpY2ggcGFydHMgb2YKKy0tIHRoZSByZWxh dGlvbiBpZGVudGlmaWVyIGFyZSBpbmNsdWRlZC4gVGhlc2Ugc2hvdWxkIGFsbCB3b3JrLgorU0VU IHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTih4KSc7CitFWFBMQUlOIChDT1NUUyBP RkYpIFNFTEVDVCAxOworU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdzZXFfc2Nhbih4QHkp JzsKK0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUIDE7CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2 aWNlID0gJ1NFUV9zY2FuKHgjMiknOworRVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1QgMTsKK1NF VCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4gKHgveSknOworRVhQTEFJTiAoQ09T VFMgT0ZGKSBTRUxFQ1QgMTsKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnICBTRVFfU0NB TiAoIHggLyB5IC4geiApICAnOworRVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1QgMTsKK1NFVCBw Z19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oIngiIzIvInkiLiJ6IkAidCIpJzsKK0VY UExBSU4gKENPU1RTIE9GRikgU0VMRUNUIDE7CisKKy0tIFN5bnRheCBlcnJvcnMuCitTRVQgcGdf cGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUVVFTlRJQUxfU0NBTih4KSc7CitTRVQgcGdfcGxhbl9h ZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOJzsKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAn U0VRX1NDQU4oJzsKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oIic7CitT RVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKCIiKSc7CitTRVQgcGdfcGxhbl9h ZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKCJhIic7CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNl ID0gJ1NFUV9TQ0FOKCMnOworU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICcoKSc7CitTRVQg cGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJzEyMyc7CisKKy0tIFRhZ3MgbGlrZSBTRVFfU0NBTiBh bmQgTk9fR0FUSEVSIGRvbid0IGFsbG93IHN1Ymxpc3RzIGF0IGFsbDsgb3RoZXIgdGFncywKKy0t IGV4Y2VwdCBmb3IgSk9JTl9PUkRFUiwgYWxsb3cgYXQgbW9zdCBvbmUgbGV2ZWwgb2Ygc3VibGlz dC4gSGVuY2UsIHRoZXNlCistLSBleGFtcGxlcyBzaG91bGQgZXJyb3Igb3V0LgorU0VUIHBnX3Bs YW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTigoeCkpJzsKK1NFVCBwZ19wbGFuX2FkdmljZS5h ZHZpY2UgPSAnR0FUSEVSKCgoeCkpKSc7CisKKy0tIExlZ2FsIGNvbW1lbnRzLgorU0VUIHBnX3Bs YW5fYWR2aWNlLmFkdmljZSA9ICcvKiovJzsKK0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUIDE7 CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0hBU0hfSk9JTihfKS8qKiovJzsKK0VYUExB SU4gKENPU1RTIE9GRikgU0VMRUNUIDE7CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJy8q IGNvbW1lbnQgKi8gSEFTSF9KT0lOKC8qeCoveSknOworRVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxF Q1QgMTsKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnLyogY29tbWVudCAqLyBIQVNIX0pP SU4oeS8vKngqL3opJzsKK0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUIDE7CisKKy0tIFVudGVy bWluYXRlZCBjb21tZW50cy4KK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnLyonOworU0VU IHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdKT0lOX09SREVSKCJmT08iKSAvKiBvb3BzJzsKKwor LS0gTmVzdGVkIGNvbW1lbnRzIGFyZSBub3Qgc3VwcG9ydGVkLCBzbyB0aGUgZmlyc3Qgb2YgdGhl c2UgaXMgbGVnYWwgYW5kCistLSB0aGUgc2Vjb25kIGlzIG5vdC4KK1NFVCBwZ19wbGFuX2Fkdmlj ZS5hZHZpY2UgPSAnLyovKi8nOworRVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1QgMTsKK1NFVCBw Z19wbGFuX2FkdmljZS5hZHZpY2UgPSAnLyovKiBzdHVmZiAqLyovJzsKKworLS0gRm9yZWlnbiBq b2luIHJlcXVpcmVzIG11bHRpcGxlIHJlbGF0aW9uIGlkZW50aWZpZXJzLgorU0VUIHBnX3BsYW5f YWR2aWNlLmFkdmljZSA9ICdGT1JFSUdOX0pPSU4oYSknOworU0VUIHBnX3BsYW5fYWR2aWNlLmFk dmljZSA9ICdGT1JFSUdOX0pPSU4oKGEpKSc7CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvY29u dHJpYi5zZ21sIGIvZG9jL3NyYy9zZ21sL2NvbnRyaWIuc2dtbAppbmRleCAyNGI3MDZiMjlhZC4u YmRkNDg2NWY1M2YgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9jb250cmliLnNnbWwKKysrIGIv ZG9jL3NyYy9zZ21sL2NvbnRyaWIuc2dtbApAQCAtMTU2LDYgKzE1Niw3IEBAIENSRUFURSBFWFRF TlNJT04gPHJlcGxhY2VhYmxlPmV4dGVuc2lvbl9uYW1lPC9yZXBsYWNlYWJsZT47CiAgJnBnZnJl ZXNwYWNlbWFwOwogICZwZ2xvZ2ljYWxpbnNwZWN0OwogICZwZ292ZXJleHBsYWluOworICZwZ3Bs YW5hZHZpY2U7CiAgJnBncHJld2FybTsKICAmcGdyb3dsb2NrczsKICAmcGdzdGF0c3RhdGVtZW50 czsKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9maWxlbGlzdC5zZ21sIGIvZG9jL3NyYy9zZ21s L2ZpbGVsaXN0LnNnbWwKaW5kZXggYWM2NmZjYmRiNTcuLmQ5MGI0MzM4ZDJhIDEwMDY0NAotLS0g YS9kb2Mvc3JjL3NnbWwvZmlsZWxpc3Quc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvZmlsZWxpc3Qu c2dtbApAQCAtMTQ5LDYgKzE0OSw3IEBACiA8IUVOVElUWSBwZ2ZyZWVzcGFjZW1hcCAgU1lTVEVN ICJwZ2ZyZWVzcGFjZW1hcC5zZ21sIj4KIDwhRU5USVRZIHBnbG9naWNhbGluc3BlY3QgIFNZU1RF TSAicGdsb2dpY2FsaW5zcGVjdC5zZ21sIj4KIDwhRU5USVRZIHBnb3ZlcmV4cGxhaW4gICBTWVNU RU0gInBnb3ZlcmV4cGxhaW4uc2dtbCI+Cis8IUVOVElUWSBwZ3BsYW5hZHZpY2UgICAgU1lTVEVN ICJwZ3BsYW5hZHZpY2Uuc2dtbCI+CiA8IUVOVElUWSBwZ3ByZXdhcm0gICAgICAgU1lTVEVNICJw Z3ByZXdhcm0uc2dtbCI+CiA8IUVOVElUWSBwZ3Jvd2xvY2tzICAgICAgU1lTVEVNICJwZ3Jvd2xv Y2tzLnNnbWwiPgogPCFFTlRJVFkgcGdzdGF0c3RhdGVtZW50cyBTWVNURU0gInBnc3RhdHN0YXRl bWVudHMuc2dtbCI+CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcGdwbGFuYWR2aWNlLnNnbWwg Yi9kb2Mvc3JjL3NnbWwvcGdwbGFuYWR2aWNlLnNnbWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMDAuLjhkZjhhOTc4ZWNmCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL3NyYy9z Z21sL3BncGxhbmFkdmljZS5zZ21sCkBAIC0wLDAgKzEsODEzIEBACis8IS0tIGRvYy9zcmMvc2dt bC9wZ3BsYW5hZHZpY2Uuc2dtbCAtLT4KKworPHNlY3QxIGlkPSJwZ3BsYW5hZHZpY2UiIHhyZWZs YWJlbD0icGdfcGxhbl9hZHZpY2UiPgorIDx0aXRsZT5wZ19wbGFuX2FkdmljZSAmbWRhc2g7IGhl bHAgdGhlIHBsYW5uZXIgZ2V0IHRoZSByaWdodCBwbGFuPC90aXRsZT4KKworIDxpbmRleHRlcm0g em9uZT0icGdwbGFuYWR2aWNlIj4KKyAgPHByaW1hcnk+cGdfcGxhbl9hZHZpY2U8L3ByaW1hcnk+ CisgPC9pbmRleHRlcm0+CisKKyA8cGFyYT4KKyAgVGhlIDxmaWxlbmFtZT5wZ19wbGFuX2Fkdmlj ZTwvZmlsZW5hbWU+IG1vZHVsZSBhbGxvd3Mga2V5IHBsYW5uZXIgZGVjaXNpb25zCisgIHRvIGJl IGRlc2NyaWJlZCwgcmVwcm9kdWNlZCwgYW5kIGFsdGVyZWQgdXNpbmcgYSBzcGVjaWFsLXB1cnBv c2UgInBsYW4KKyAgYWR2aWNlIiBtaW5pLWxhbmd1YWdlLiBJdCBpcyBpbnRlbmRlZCB0byBhbGxv dyBzdGFiaWxpemF0aW9uIG9mIHBsYW4gY2hvaWNlcworICB0aGF0IHRoZSB1c2VyIGJlbGlldmVz IHRvIGJlIGdvb2QsIGFzIHdlbGwgYXMgZXhwZXJpbWVudGF0aW9uIHdpdGggcGxhbnMgdGhhdAor ICB0aGUgcGxhbm5lciBiZWxpZXZlcyB0byBiZSBub24tb3B0aW1hbC4KKyA8L3BhcmE+CisKKyA8 cGFyYT4KKyAgTm90ZSB0aGF0LCBzaW5jZSB0aGUgcGxhbm5lciBvZnRlbiBtYWtlcyBnb29kIGRl Y2lzaW9ucywgb3ZlcnJpZGluZyBpdHMKKyAganVkZ21lbnQgY2FuIGVhc2lseSBiYWNrZmlyZS4g Rm9yIGV4YW1wbGUsIGlmIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlCisgIHVuZGVybHlpbmcgZGF0 YSBjaGFuZ2VzLCB0aGUgcGxhbm5lciBub3JtYWxseSBoYXMgdGhlIG9wdGlvbiB0byBhZGp1c3Qg dGhlCisgIHBsYW4gaW4gYW4gYXR0ZW1wdCB0byBwcmVzZXJ2ZSBnb29kIHBlcmZvcm1hbmNlLiBJ ZiB0aGUgcGxhbiBhZHZpY2UgcHJldmVudHMKKyAgdGhpcywgYSB2ZXJ5IHBvb3IgcGxhbiBtYXkg YmUgY2hvc2VuLiBJdCBpcyBpbXBvcnRhbnQgdG8gdXNlIHBsYW4gYWR2aWNlCisgIG9ubHkgd2hl biB0aGUgcmlza3Mgb2YgY29uc3RyYWluaW5nIHRoZSBwbGFubmVyJ3MgY2hvaWNlcyBhcmUgb3V0 d2VpZ2hlZCBieQorICB0aGUgYmVuZWZpdHMuCisgPC9wYXJhPgorCisgPHNlY3QyIGlkPSJwZ3Bs YW5hZHZpY2UtZ2V0dGluZy1zdGFydGVkIj4KKyAgPHRpdGxlPkdldHRpbmcgU3RhcnRlZDwvdGl0 bGU+CisKKyAgPHBhcmE+CisgICBGaXJzdCwgeW91IG11c3QgYXJyYW5nZSB0byBsb2FkIHRoZSA8 bGl0ZXJhbD5wZ19wbGFuX2FkdmljZTwvbGl0ZXJhbD4KKyAgIG1vZHVsZS4gWW91IGNhbiBkbyB0 aGlzIG9uIGEgc3lzdGVtLXdpZGUgYmFzaXMgYnkgYWRkaW5nCisgICA8bGl0ZXJhbD5wZ19wbGFu X2FkdmljZTwvbGl0ZXJhbD4gdG8KKyAgIDx4cmVmIGxpbmtlbmQ9Imd1Yy1zaGFyZWQtcHJlbG9h ZC1saWJyYXJpZXMiLz4gYW5kIHJlc3RhcnRpbmcgdGhlCisgICBzZXJ2ZXIsIG9yIGJ5IGFkZGlu ZyBpdCB0bworICAgPHhyZWYgbGlua2VuZD0iZ3VjLXNlc3Npb24tcHJlbG9hZC1saWJyYXJpZXMi Lz4gYW5kIHN0YXJ0aW5nIGEgbmV3IHNlc3Npb24sCisgICBvciBieSBsb2FkaW5nIGl0IGludG8g YW4gaW5kaXZpZHVhbCBzZXNzaW9uIHVzaW5nIHRoZQorICAgPGxpbmsgbGlua2VuZD0ic3FsLWxv YWQiPjxsaXRlcmFsPkxPQUQ8L2xpdGVyYWw+PC9saW5rPiBjb21tYW5kLgorICA8L3BhcmE+CisK KyAgPHBhcmE+CisgICBPbmNlIHRoZSA8bGl0ZXJhbD5wZ19wbGFuX2FkdmljZTwvbGl0ZXJhbD4g bW9kdWxlIGlzIGxvYWRlZCwKKyAgIDxsaW5rIGxpbmtlbmQ9InNxbC1leHBsYWluIj48bGl0ZXJh bD5FWFBMQUlOPC9saXRlcmFsPjwvbGluaz4gd2lsbCBzdXBwb3J0CisgICBhIDxsaXRlcmFsPlBM QU5fQURWSUNFPC9saXRlcmFsPiBvcHRpb24uIFlvdSBjYW4gdXNlIHRoaXMgb3B0aW9uIHRvIHNl ZQorICAgYSBwbGFuIGFkdmljZSBzdHJpbmcgZm9yIHRoZSBjaG9zZW4gcGxhbi4gRm9yIGV4YW1w bGU6CisgIDwvcGFyYT4KKworPHByb2dyYW1saXN0aW5nPgorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQ TEFOX0FEVklDRSkKKyAgICAgICAgU0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5f ZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworICAgICAgICAgICAgIFFVRVJZIFBMQU4KKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggSm9pbgorICAgSGFzaCBDb25k OiAoZi5kaW1faWQgPSBkLmlkKQorICAgLT4gIFNlcSBTY2FuIG9uIGpvaW5fZmFjdCBmCisgICAt PiAgSGFzaAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvaW5fZGltIGQKKyBHZW5lcmF0ZWQg UGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGYgZCkKKyAgIEhBU0hfSk9JTihkKQorICAgU0VR X1NDQU4oZiBkKQorICAgTk9fR0FUSEVSKGYgZCkKKzwvcHJvZ3JhbWxpc3Rpbmc+CisKKyAgPHBh cmE+CisgICBJbiB0aGlzIGV4YW1wbGUsIHRoZSB1c2VyIGhhcyBub3Qgc3BlY2lmaWVkIGFueSBh ZHZpY2U7IGluc3RlYWQsIHRoZQorICAgcGxhbm5lciBoYXMgYmVlbiBwZXJtaXR0ZWQgdG8gbWFr ZSB3aGF0ZXZlciBkZWNpc2lvbnMgaXQgdGhpbmtzIGJlc3QsIGFuZAorICAgdGhvc2UgZGVjaXNp b25zIGFyZSBtZW1vcmlhbGl6ZWQgaW4gdGhlIGZvcm0gb2YgYW4gYWR2aWNlIHN0cmluZy4KKyAg IDxsaXRlcmFsPkpPSU5fT1JERVIoZiBkKTwvbGl0ZXJhbD4gbWVhbnMgdGhhdCA8bGl0ZXJhbD5m PC9saXRlcmFsPiBzaG91bGQKKyAgIGJlIHRoZSBkcml2aW5nIHRhYmxlLCBhbmQgdGhlIGZpcnN0 IHRhYmxlIHRvIHdoaWNoIGl0IHNob3VsZCBiZSBqb2luZWQgaXMKKyAgIDxsaXRlcmFsPmQ8L2xp dGVyYWw+LiA8bGl0ZXJhbD5IQVNIX0pPSU4oZCk8L2xpdGVyYWw+IG1lYW5zIHRoYXQKKyAgIDxs aXRlcmFsPmQ8L2xpdGVyYWw+IHNob3VsZCBhcHBlYXIgb24gdGhlIGlubmVyIHNpZGUgb2YgYSBo YXNoIGpvaW4uCisgICA8bGl0ZXJhbD5TRVFfU0NBTihmIGQpPC9saXRlcmFsPiBtZWFucyB0aGF0 IGJvdGggPGxpdGVyYWw+ZjwvbGl0ZXJhbD4KKyAgIGFuZCA8bGl0ZXJhbD5kPC9saXRlcmFsPiBz aG91bGQgYmUgYWNjZXNzZWQgdmlhIGEgc2VxdWVudGlhbCBzY2FuLgorICAgPGxpdGVyYWw+Tk9f R0FUSEVSKGYgZCk8L2xpdGVyYWw+IG1lYW5zIHRoYXQgbmVpdGhlciA8bGl0ZXJhbD5mPC9saXRl cmFsPgorICAgbm9yIDxsaXRlcmFsPmQ8L2xpdGVyYWw+IHNob3VsZCBhcHBlYXIgYmVuZWF0aCBh IDxsaXRlcmFsPkdhdGhlcjwvbGl0ZXJhbD4KKyAgIG9yIDxsaXRlcmFsPkdhdGhlciBNZXJnZTwv bGl0ZXJhbD4gbm9kZS4gRm9yIG1vcmUgZGV0YWlscyBvbiB0aGUgcGxhbgorICAgYWR2aWNlIG1p bmktbGFuZ3VhZ2UsIHNlZSB0aGUgaW5mb3JtYXRpb24gb24KKyAgIDxsaW5rIGxpbmtlbmQ9InBn cGxhbmFkdmljZS10YXJnZXRzIj5hZHZpY2UgdGFyZ2V0czwvbGluaz4gYW5kCisgICA8bGluayBs aW5rZW5kPSJwZ3BsYW5hZHZpY2UtdGFncyI+YWR2aWNlIHRhZ3M8L2xpbms+LCBiZWxvdy4KKyAg PC9wYXJhPgorCisgIDxwYXJhPgorICAgT25jZSB5b3UgaGF2ZSBhbiBhZHZpY2Ugc3RyaW5nIGZv ciBhIHF1ZXJ5LCB5b3UgY2FuIHVzZSBpdCB0byBjb250cm9sIGhvdworICAgdGhhdCBxdWVyeSBp cyBwbGFubmVkLiBZb3UgY2FuIGRvIHRoaXMgYnkgc2V0dGluZworICAgPGxpdGVyYWw+cGdfcGxh bl9hZHZpY2UuYWR2aWNlPC9saXRlcmFsPiB0byB0aGUgYWR2aWNlIHN0cmluZyB5b3UndmUKKyAg IGNob3Nlbi4gVGhpcyBjYW4gYmUgYW4gYWR2aWNlIHN0cmluZyB0aGF0IHdhcyBnZW5lcmF0ZWQg YnkgdGhlIHN5c3RlbSwKKyAgIG9yIG9uZSB5b3UndmUgd3JpdHRlbiB5b3Vyc2VsZi4gT25lIGdv b2Qgd2F5IG9mIGNyZWF0aW5nIHlvdXIgb3duIGFkdmljZQorICAgc3RyaW5nIGlzIHRvIHRha2Ug dGhlIHN0cmluZyBnZW5lcmF0ZWQgYnkgdGhlIHN5c3RlbSBhbmQgcGljayBvdXQganVzdAorICAg dGhvc2UgZWxlbWVudHMgdGhhdCB5b3Ugd2lzaCB0byBlbmZvcmNlLiBJbiB0aGUgZXhhbXBsZSBh Ym92ZSwKKyAgIDxsaXRlcmFsPnBnX3BsYW5fYWR2aWNlPC9saXRlcmFsPiBlbWl0cyBhZHZpY2Ug Zm9yIHRoZSBqb2luIG9yZGVyLCB0aGUKKyAgIGpvaW4gbWV0aG9kLCB0aGUgc2NhbiBtZXRob2Qs IGFuZCB0aGUgdXNlIG9mIHBhcmFsbGVsaXNtLCBidXQgeW91IG1pZ2h0CisgICBvbmx5IHdhbnQg dG8gY29udHJvbCB0aGUgam9pbiBvcmRlcjoKKyAgPC9wYXJhPgorCis8cHJvZ3JhbWxpc3Rpbmc+ CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0pPSU5fT1JERVIoZiBkKSc7CitFWFBMQUlO IChDT1NUUyBPRkYpCisgICAgICAgIFNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2lu X2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKKyAgICAgICAgICAgICBRVUVSWSBQTEFOCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoIEpvaW4KKyAgIEhhc2ggQ29u ZDogKGYuZGltX2lkID0gZC5pZCkKKyAgIC0+ICBTZXEgU2NhbiBvbiBqb2luX2ZhY3QgZgorICAg LT4gIEhhc2gKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb2luX2RpbSBkCisgU3VwcGxpZWQg UGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGYgZCkgLyogbWF0Y2hlZCAqLworPC9wcm9ncmFt bGlzdGluZz4KKworICA8cGFyYT4KKyAgIFNpbmNlIHRoZSA8bGl0ZXJhbD5QTEFOX0FEVklDRTwv bGl0ZXJhbD4gb3B0aW9uIHRvCisgICA8bGl0ZXJhbD5FWFBMQUlOPC9saXRlcmFsPiB3YXMgbm90 IHNwZWNpZmllZCwgbm8gYWR2aWNlIHN0cmluZyBpcyBnZW5lcmF0ZWQKKyAgIGZvciB0aGUgcGxh bi4gSG93ZXZlciwgdGhlIHN1cHBsaWVkIHBsYW4gYWR2aWNlIGlzIHN0aWxsIHNob3duIHNvIHRo YXQKKyAgIGFueW9uZSBsb29raW5nIGF0IHRoZSA8bGl0ZXJhbD5FWFBMQUlOPC9saXRlcmFsPiBv dXRwdXQga25vd3MgdGhhdCB0aGUKKyAgIGNob3NlbiBwbGFuIHdhcyBpbmZsdWVuY2VkIGJ5IHBs YW4gYWR2aWNlLiBJZiBpbmZvcm1hdGlvbiBhYm91dCBzdXBwbGllZAorICAgcGxhbiBhZHZpY2Ug aXMgbm90IGRlc2lyZWQsIGl0IGNhbiBiZSBzdXBwcmVzc2VkIGJ5IGNvbmZpZ3VyaW5nCisgICA8 bGl0ZXJhbD5wZ19wbGFuX2FkdmljZS5hbHdheXNfZXhwbGFpbl9zdXBwbGllZF9hZHZpY2UgPSBm YWxzZTwvbGl0ZXJhbD4uCisgICBGb3IgZWFjaCBwaWVjZSBvZiBzdXBwbGllZCBhZHZpY2UsIHRo ZSBvdXRwdXQgc2hvd3MKKyAgIDxsaW5rIGxpbmtlbmQ9InBncGxhbmFkdmljZS1mZWVkYmFjayI+ YWR2aWNlIGZlZWRiYWNrPC9saW5rPiBpbmRpY2F0aW5nCisgICB3aGV0aGVyIG9yIG5vdCB0aGUg YWR2aWNlIHdhcyBzdWNjZXNzZnVsbHkgYXBwbGllZCB0byB0aGUgcXVlcnkuIEluIHRoaXMKKyAg IGNhc2UsIHRoZSBmZWVkYmFjayBzYXlzIDxsaXRlcmFsPi8qIG1hdGNoZWQgKi88L2xpdGVyYWw+ LCB3aGljaCBtZWFucyB0aGF0CisgICA8bGl0ZXJhbD5mPC9saXRlcmFsPiBhbmQgPGxpdGVyYWw+ ZDwvbGl0ZXJhbD4gd2VyZSBmb3VuZCBpbiB0aGUgcXVlcnkgYW5kCisgICB0aGF0IHRoZSByZXN1 bHRpbmcgcXVlcnkgcGxhbiBjb25mb3JtcyB0byB0aGUgc3BlY2lmaWVkIGFkdmljZS4KKyAgPC9w YXJhPgorCisgPC9zZWN0Mj4KKworIDxzZWN0MiBpZD0icGdwbGFuYWR2aWNlLWhvdy1pdC13b3Jr cyI+CisgIDx0aXRsZT5Ib3cgSXQgV29ya3M8L3RpdGxlPgorCisgIDxwYXJhPgorICAgUGxhbiBh ZHZpY2UgaXMgd3JpdHRlbiBpbXBlcmF0aXZlbHk7IHRoYXQgaXMsIGl0IHNwZWNpZmllcyB3aGF0 IHNob3VsZCBiZQorICAgZG9uZS4gSG93ZXZlciwgYXQgYW4gaW1wbGVtZW50YXRpb24gbGV2ZWws CisgICA8bGl0ZXJhbD5wZ19wbGFuX2FkdmljZTwvbGl0ZXJhbD4gd29ya3MgYnkgdGVsbGluZyB0 aGUgY29yZSBwbGFubmVyIHdoYXQKKyAgIHNob3VsZCBub3QgYmUgZG9uZS4gSW4gb3RoZXIgd29y ZHMsIGl0IG9wZXJhdGVzIGJ5IGNvbnN0cmFpbmluZyB0aGUKKyAgIHBsYW5uZXIncyBjaG9pY2Vz LCBub3QgYnkgcmVwbGFjaW5nIGl0LiBUaGVyZWZvcmUsIG5vIG1hdHRlciB3aGF0IGFkdmljZQor ICAgeW91IHByb3ZpZGUsIHlvdSB3aWxsIG9ubHkgZXZlciBnZXQgYSBwbGFuIHRoYXQgdGhlIGNv cmUgcGxhbm5lciB3b3VsZCBoYXZlCisgICBjb25zaWRlcmVkIGZvciB0aGUgcXVlcnkgaW4gcXVl c3Rpb24uIElmIHlvdSBhdHRlbXB0IHRvIGZvcmNlIHdoYXQgeW91CisgICBiZWxpZXZlIHRvIGJl IHRoZSBjb3JyZWN0IHBsYW4gYnkgc3VwcGx5aW5nIGFuIGFkdmljZSBzdHJpbmcsIGFuZCB0aGUK KyAgIHBsYW5uZXIgc3RpbGwgZmFpbHMgdG8gcHJvZHVjZSB0aGUgZGVzaXJlZCBwbGFuLCB0aGlz IG1lYW5zIHRoYXQgZWl0aGVyCisgICB0aGVyZSBpcyBhIGJ1ZyBpbiB5b3VyIGFkdmljZSBzdHJp bmcsIG9yIHRoZSBwbGFuIGluIHF1ZXN0aW9uIHdhcyBub3QKKyAgIGNvbnNpZGVyZWQgdmlhYmxl IGJ5IHRoZSBjb3JlIHBsYW5uZXIuIFRoaXMgY29tbW9ubHkgaGFwcGVucyBmb3Igb25lIG9mIHR3 bworICAgcmVhc29ucy4gRmlyc3QsIGl0IG1pZ2h0IGJlIHRoYXQgdGhlIHBsYW5uZXIgYmVsaWV2 ZXMgdGhhdCB0aGUgcGxhbiB5b3UncmUKKyAgIHRyeWluZyB0byBmb3JjZSB3b3VsZCBiZSBzZW1h bnRpY2FsbHkgaW5jb3JyZWN0IC0gdGhhdCBpcywgaXQgd291bGQgcHJvZHVjZQorICAgdGhlIHdy b25nIHJlc3VsdHMgLSBhbmQgZm9yIHRoYXQgcmVhc29uIGl0IHdhc24ndCBjb25zaWRlcmVkLiBT ZWNvbmQsIGl0CisgICBtaWdodCBiZSB0aGF0IHRoZSBwbGFubmVyIHJlamVjdGVkIHRoZSBwbGFu IHlvdSB3ZXJlIGhvcGluZyB0byBnZW5lcmF0ZSBvbgorICAgc29tZSBncm91bmRzIG90aGVyIHRo YW4gY29zdC4gRm9yIGV4YW1wbGUsIGdpdmVuIGEgdmVyeSBzaW1wbGUgcXVlcnkgc3VjaCBhcwor ICAgPGxpdGVyYWw+U0VMRUNUICogRlJPTSBzb21lX3RhYmxlPC9saXRlcmFsPiwgdGhlIHF1ZXJ5 IHBsYW5uZXIgd2lsbAorICAgZGVjaWRlIHRoYXQgdGhlIHVzZSBvZiBhbiBpbmRleCBpcyB3b3J0 aGxlc3MgaGVyZSBiZWZvcmUgaXQgcGVyZm9ybXMgYW55CisgICBjb3N0aW5nIGNhbGN1bGF0aW9u cy4gWW91IGNhbm5vdCBmb3JjZSBpdCB0byB1c2UgYW4gaW5kZXggZm9yIHRoaXMgcXVlcnkKKyAg IGV2ZW4gaWYgeW91IHNldCA8bGl0ZXJhbD5lbmFibGVfc2Vxc2NhbiA9IGZhbHNlPC9saXRlcmFs PiwgYW5kIHlvdSBjYW4ndAorICAgZm9yY2UgaXQgdG8gdXNlIGFuIGluZGV4IHVzaW5nIHBsYW4g YWR2aWNlLCBlaXRoZXIuCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIFNwZWNpZnlpbmcgcGxh biBhZHZpY2Ugc2hvdWxkIG5ldmVyIGNhdXNlIHBsYW5uZXIgZmFpbHVyZS4gSG93ZXZlciwgaWYg eW91CisgICBzcGVjaWZ5IHBsYW4gYWR2aWNlIHRoYXQgYXNrcyBmb3Igc29tZXRoaW5nIGltcG9z c2libGUsIHlvdSBtYXkgZ2V0IGEgcGxhbgorICAgd2hlcmUgc29tZSBwbGFuIG5vZGVzIGFyZSBm bGFnZ2VkIGFzIDxsaXRlcmFsPkRpc2FibGVkOiB0cnVlPC9saXRlcmFsPiBpbgorICAgdGhlIDxs aXRlcmFsPkVYUExBSU48L2xpdGVyYWw+IG91dHB1dC4gSW4gc29tZSBjYXNlcywgc3VjaCBwbGFu cyB3aWxsIGJlCisgICBiYXNpY2FsbHkgdGhlIHNhbWUgcGxhbiB5b3Ugd291bGQgaGF2ZSBnb3R0 ZW4gd2l0aCBubyBzdXBwbGllZCBhZHZpY2UgYXQKKyAgIGFsbCwgYnV0IGluIG90aGVyIGNhc2Vz LCB0aGV5IG1heSBiZSBtdWNoIHdvcnNlLiBGb3IgZXhhbXBsZToKKyAgPC9wYXJhPgorCis8cHJv Z3JhbWxpc3Rpbmc+CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0pPSU5fT1JERVIoeCBm IGQpJzsKK0VYUExBSU4gKENPU1RTIE9GRikKKyAgICAgICAgU0VMRUNUICogRlJPTSBqb2luX2Zh Y3QgZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworICAgICAgICAgICAgICAg ICAgICAgUVVFUlkgUExBTgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wCisgICBEaXNhYmxlZDogdHJ1ZQorICAgLT4gIFNl cSBTY2FuIG9uIGpvaW5fZmFjdCBmCisgICAtPiAgSW5kZXggU2NhbiB1c2luZyBqb2luX2RpbV9w a2V5IG9uIGpvaW5fZGltIGQKKyAgICAgICAgIEluZGV4IENvbmQ6IChpZCA9IGYuZGltX2lkKQor IFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUih4IGYgZCkgLyogcGFydGlhbGx5 IG1hdGNoZWQgKi8KKzwvcHJvZ3JhbWxpc3Rpbmc+CisKKyAgPHBhcmE+CisgICBCZWNhdXNlIG5l aXRoZXIgPGxpdGVyYWw+ZjwvbGl0ZXJhbD4gbm9yIDxsaXRlcmFsPmQ8L2xpdGVyYWw+IGlzIHRo ZQorICAgZmlyc3QgdGFibGUgaW4gdGhlIDxsaXRlcmFsPkpPSU5fT1JERVIoKTwvbGl0ZXJhbD4g c3BlY2lmaWNhdGlvbiwgdGhlCisgICBwbGFubmVyIGRpc2FibGVzIGFsbCBkaXJlY3Qgam9pbnMg YmV0d2VlbiB0aGUgdHdvIG9mIHRoZW0sIHRoaW5raW5nIHRoYXQKKyAgIHRoZSBqb2luIHRvIDxs aXRlcmFsPng8L2xpdGVyYWw+IHNob3VsZCBoYXBwZW4gZmlyc3QuIFNpbmNlIHBsYW5uaW5nIGlz bid0CisgICBhbGxvd2VkIHRvIGZhaWwsIGEgZGlzYWJsZWQgcGxhbiBiZXR3ZWVuIHRoZSB0d28g cmVsYXRpb25zIGlzIGV2ZW50dWFsbHkKKyAgIHNlbGVjdGVkIGFueXdheSwgYnV0IGhlcmUgaXQn cyBhIDxsaXRlcmFsPk5lc3RlZCBMb29wPC9saXRlcmFsPiByYXRoZXIgdGhhbgorICAgdGhlIDxs aXRlcmFsPkhhc2ggSm9pbjwvbGl0ZXJhbD4gdGhhdCB3YXMgY2hvc2VuIGluIHRoZSBhYm92ZSBl eGFtcGxlIHdoZXJlCisgICBubyBhZHZpY2Ugd2FzIHNwZWNpZmllZC4gVGhlcmUgYXJlIHNldmVy YWwgZGlmZmVyZW50IHdheXMgdGhhdCB0aGlzIGtpbmQKKyAgIG9mIHRoaW5nIGNhbiBoYXBwZW47 IHdoZW4gaXQgZG9lcywgdGhlIHJlc3VsdGluZyBwbGFuIGlzIGdlbmVyYWxseSB3b3JzZQorICAg dGhhbiBpZiBubyBhZHZpY2UgaGFkIGJlZW4gc3BlY2lmaWVkIGF0IGFsbC4gVGhlcmVmb3JlLCBp dCBpcyBhIGdvb2QgaWRlYQorICAgdG8gdmFsaWRhdGUgdGhhdCB0aGUgYWR2aWNlIHlvdSBzcGVj aWZ5IGFwcGxpZXMgdG8gdGhlIHF1ZXJ5IHRvIHdoaWNoIGl0CisgICBpcyBhcHBsaWVkIGFuZCB0 aGF0IHRoZSByZXN1bHRzIGFyZSBhcyBleHBlY3RlZC4KKyAgPC9wYXJhPgorCisgPC9zZWN0Mj4K KworIDxzZWN0MiBpZD0icGdwbGFuYWR2aWNlLXRhcmdldHMiPgorICA8dGl0bGU+QWR2aWNlIFRh cmdldHM8L3RpdGxlPgorCisgIDxwYXJhPgorICAgQW4gPGZpcnN0dGVybT5hZHZpY2UgdGFyZ2V0 PC9maXJzdHRlcm0+IHVuaXF1ZWx5IGlkZW50aWZpZXMgYSBwYXJ0aWN1bGFyCisgICBpbnN0YW5j ZSBvZiBhIHBhcnRpY3VsYXIgcmVsYXRpb24gaW52b2x2ZWQgaW4gYSBwYXJ0aWN1bGFyIHF1ZXJ5 LiBJbiBzaW1wbGUKKyAgIGNhc2VzLCBzdWNoIGFzIHRoZSBleGFtcGxlcyBzaG93biBhYm92ZSwg dGhlIGFkdmljZSB0YXJnZXQgaXMgc2ltcGx5IHRoZQorICAgcmVsYXRpb24gYWxpYXMuIEhvd2V2 ZXIsIGEgbW9yZSBjb21wbGV4IHN5bnRheCBpcyByZXF1aXJlZCB3aGVuIHN1YnF1ZXJpZXMKKyAg IGFyZSB1c2VkLCB3aGVuIHRhYmxlcyBhcmUgcGFydGl0aW9uZWQsIG9yIHdoZW4gdGhlIHNhbWUg cmVsYXRpb24gYWxpYXMgaXMKKyAgIG1lbnRpb25lZCBtb3JlIHRoYW4gb25jZSBpbiB0aGUgc2Ft ZSBzdWJxdWVyeSAoZS5nLiwgPGxpdGVyYWw+KGZvbyBKT0lOIGJhcgorICAgT04gZm9vLmEgPSBi YXIuYSkgeCBKT0lOIGZvbyBPTiB4LmIgPSBmb28uYjwvbGl0ZXJhbD4pLiBBbnkgY29tYmluYXRp b24gb2YKKyAgIHRoZXNlIHRocmVlIHRoaW5ncyBjYW4gb2NjdXIgc2ltdWx0YW5lb3VzbHk6IGEg cmVsYXRpb24gY291bGQgYmUgbWVudGlvbmVkCisgICBtb3JlIHRoYW4gb25jZSwgYmUgcGFydGl0 aW9uZWQsIGFuZCBiZSB1c2VkIGluc2lkZSBvZiBhIHN1YnF1ZXJ5LgorICA8L3BhcmE+CisKKyAg PHBhcmE+CisgICBCZWNhdXNlIG9mIHRoaXMsIHRoZSBnZW5lcmFsIHN5bnRheCBmb3IgYSByZWxh dGlvbiBpZGVudGlmaWVyIGlzOgorICA8L3BhcmE+CisKKzxwcm9ncmFtbGlzdGluZz4KK2FsaWFz X25hbWUjb2NjdXJyZW5jZV9udW1iZXIvcGFydGl0aW9uX3NjaGVtYS5wYXJ0aXRpb25fbmFtZUBw bGFuX25hbWUKKzwvcHJvZ3JhbWxpc3Rpbmc+CisKKyAgPHBhcmE+CisgICBBbGwgY29tcG9uZW50 cyBleGNlcHQgZm9yIHRoZSA8bGl0ZXJhbD5hbGlhc19uYW1lPC9saXRlcmFsPiBhcmUgb3B0aW9u YWwKKyAgIGFuZCBhcmUgaW5jbHVkZWQgb25seSB3aGVuIHJlcXVpcmVkLiBXaGVuIGEgY29tcG9u ZW50IGlzIG9taXR0ZWQsIHRoZQorICAgcHJlY2VkaW5nIHB1bmN0dWF0aW9uIG11c3QgYWxzbyBi ZSBvbWl0dGVkLiBGb3IgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgYQorICAgcmVsYXRpb24gd2l0 aGluIGEgZ2l2ZW4gc3VicXVlcnksIGdlbmVyYXRlZCBhZHZpY2Ugd2lsbCBvbWl0IHRoZSBvY2N1 cnJlbmNlCisgICBudW1iZXIsIGJ1dCBpdCBpcyBsZWdhbCB0byB3cml0ZSA8bGl0ZXJhbD4jMTwv bGl0ZXJhbD4sIGlmIGRlc2lyZWQuIFRoZQorICAgcGFydGl0aW9uIHNjaGVtYSBhbmQgcGFydGl0 aW9uIG5hbWUgYXJlIGluY2x1ZGVkIG9ubHkgZm9yIGNoaWxkcmVuIG9mCisgICBwYXJ0aXRpb25l ZCB0YWJsZXMuIEluIGdlbmVyYXRlZCBhZHZpY2UsIDxsaXRlcmFsPnBnX3BsYW5fYWR2aWNlPC9s aXRlcmFsPgorICAgYWx3YXlzIGluY2x1ZGVzIGJvdGgsIGJ1dCBpdCBpcyBsZWdhbCB0byBvbWl0 IHRoZSBzY2hlbWEuIFRoZSBwbGFuIG5hbWUgaXMKKyAgIG9taXR0ZWQgZm9yIHRoZSB0b3AtbGV2 ZWwgcGxhbiwgYW5kIG11c3QgYmUgaW5jbHVkZWQgZm9yIGFueSBzdWJwbGFuLgorICA8L3BhcmE+ CisKKyAgPHBhcmE+CisgICBJdCBpcyBub3QgYWx3YXlzIGVhc3kgdG8gZGV0ZXJtaW5lIHRoZSBj b3JyZWN0IGFkdmljZSB0YXJnZXQgYnkgZXhhbWluaW5nCisgICB0aGUgcXVlcnkuIEZvciBpbnN0 YW5jZSwgaWYgdGhlIHBsYW5uZXIgcHVsbHMgdXAgYSBzdWJxdWVyeSBpbnRvIHRoZSBwYXJlbnQK KyAgIHF1ZXJ5IGxldmVsLCBldmVyeXRoaW5nIGluc2lkZSBvZiBpdCBiZWNvbWVzIHBhcnQgb2Yg dGhlIHBhcmVudCBxdWVyeSBsZXZlbCwKKyAgIGFuZCB1c2VzIHRoZSBwYXJlbnQgcXVlcnkncyBz dWJwbGFuIG5hbWUgKG9yIG5vIHN1YnBsYW4gbmFtZSwgaWYgcHVsbGVkIHVwCisgICB0byB0aGUg dG9wIGxldmVsKS4gRnVydGhlcm1vcmUsIHRoZSBjb3JyZWN0IHN1YnF1ZXJ5IG5hbWUgaXMgc29t ZXRpbWVzIG5vdAorICAgb2J2aW91cy4gRm9yIGV4YW1wbGUsIHdoZW4gdHdvIHF1ZXJpZXMgYXJl IGpvaW5lZCB1c2luZyBhbiBvcGVyYXRpb24gc3VjaCBhcworICAgPGxpdGVyYWw+VU5JT048L2xp dGVyYWw+IG9yIDxsaXRlcmFsPklOVEVSU0VDVDwvbGl0ZXJhbD4sIG5vIG5hbWUgZm9yIHRoZQor ICAgc3VicXVlcmllcyBpcyBwcmVzZW50IGluIHRoZSBTUUwgc3ludGF4OyBpbnN0ZWFkLCBhIHN5 c3RlbS1nZW5lcmF0ZWQgbmFtZSBpcworICAgYXNzaWduZWQgdG8gZWFjaCBicmFuY2guIFRoZSBl YXNpZXN0IHdheSB0byBkaXNjb3ZlciB0aGUgcHJvcGVyIGFkdmljZQorICAgdGFyZ2V0cyBpcyB0 byB1c2UgPGxpdGVyYWw+RVhQTEFJTiAoUExBTl9BRFZJQ0UpPC9saXRlcmFsPiBhbmQgZXhhbWlu ZSB0aGUKKyAgIGdlbmVyYXRlZCBhZHZpY2UuCisgIDwvcGFyYT4KKworIDwvc2VjdDI+CisKKyA8 c2VjdDIgaWQ9InBncGxhbmFkdmljZS10YWdzIj4KKyAgPHRpdGxlPkFkdmljZSBUYWdzPC90aXRs ZT4KKworICA8cGFyYT4KKyAgIEFuIDxmaXJzdHRlcm0+YWR2aWNlIHRhZzwvZmlyc3R0ZXJtPiBz cGVjaWZpZXMgYSBwYXJ0aWN1bGFyIGJlaGF2aW9yIHRoYXQKKyAgIHNob3VsZCBiZSBlbmZvcmNl ZCBmb3Igc29tZSBwb3J0aW9uIG9mIHRoZSBxdWVyeSwgc3VjaCBhcyBhIHBhcnRpY3VsYXIKKyAg IGpvaW4gb3JkZXIgb3Igam9pbiBtZXRob2QuIEFsbCBhZHZpY2UgdGFncyB0YWtlCisgICA8bGlu ayBsaW5rZW5kPSJwZ3BsYW5hZHZpY2UtdGFyZ2V0cyI+YWR2aWNlIHRhcmdldHM8L2xpbms+IGFz IGFyZ3VtZW50cywKKyAgIGFuZCBtYW55IGFsbG93IGxpc3RzIG9mIGFkdmljZSB0YXJnZXRzLCB3 aGljaCBpbiBzb21lIGNhc2VzIGNhbiBiZSBuZXN0ZWQKKyAgIG11bHRpcGxlIGxldmVscyBkZWVw LiBTZXZlcmFsIGRpZmZlcmVudCBjbGFzc2VzIG9mIGFkdmljZSB0YWdzIGV4aXN0LAorICAgZWFj aCBjb250cm9sbGluZyBhIGRpZmZlcmVudCBhc3BlY3Qgb2YgcXVlcnkgcGxhbm5pbmcuCisgIDwv cGFyYT4KKworICA8c2VjdDMgaWQ9InBncGxhbmFkdmljZS1zY2FuLW1ldGhvZCI+CisgIDx0aXRs ZT5TY2FuIE1ldGhvZCBBZHZpY2U8L3RpdGxlPgorICAgPHN5bm9wc2lzPgorU0VRX1NDQU4oPHJl cGxhY2VhYmxlPnRhcmdldDwvcmVwbGFjZWFibGU+IFsgLi4uIF0pCitUSURfU0NBTig8cmVwbGFj ZWFibGU+dGFyZ2V0PC9yZXBsYWNlYWJsZT4gWyAuLi4gXSkKK0lOREVYX1NDQU4oPHJlcGxhY2Vh YmxlPnRhcmdldDwvcmVwbGFjZWFibGU+IDxyZXBsYWNlYWJsZT5pbmRleF9uYW1lPC9yZXBsYWNl YWJsZT4gWyAuLi4gXSkKK0lOREVYX09OTFlfU0NBTig8cmVwbGFjZWFibGU+dGFyZ2V0PC9yZXBs YWNlYWJsZT4gPHJlcGxhY2VhYmxlPmluZGV4X25hbWU8L3JlcGxhY2VhYmxlPiBbIC4uLiBdKQor Rk9SRUlHTl9TQ0FOKCg8cmVwbGFjZWFibGU+dGFyZ2V0PC9yZXBsYWNlYWJsZT4gWyAuLi4gXSkg WyAuLi4gXSkKK0JJVE1BUF9IRUFQX1NDQU4oPHJlcGxhY2VhYmxlPnRhcmdldDwvcmVwbGFjZWFi bGU+IFsgLi4uIF0pPC9zeW5vcHNpcz4KKworICAgPHBhcmE+CisgICAgPGxpdGVyYWw+U0VRX1ND QU48L2xpdGVyYWw+IHNwZWNpZmllcyB0aGF0IGVhY2ggdGFyZ2V0IHNob3VsZCBiZQorICAgIHNj YW5uZWQgdXNpbmcgYSA8bGl0ZXJhbD5TZXEgU2NhbjwvbGl0ZXJhbD4uIDxsaXRlcmFsPlRJRF9T Q0FOPC9saXRlcmFsPgorICAgIHNwZWNpZmllcyB0aGF0IGVhY2ggdGFyZ2V0IHNob3VsZCBiZSBz Y2FubmVkIHVzaW5nIGEKKyAgICA8bGl0ZXJhbD5USUQgU2NhbjwvbGl0ZXJhbD4gb3IgPGxpdGVy YWw+VElEIFJhbmdlIFNjYW48L2xpdGVyYWw+LgorICAgIDxsaXRlcmFsPkJJVE1BUF9IRUFQX1ND QU48L2xpdGVyYWw+IHNwZWNpZmllcyB0aGF0IGVhY2ggdGFyZ2V0CisgICAgc2hvdWxkIGJlIHNj YW5uZWQgdXNpbmcgYSA8bGl0ZXJhbD5CaXRtYXAgSGVhcCBTY2FuPC9saXRlcmFsPi4KKyAgIDwv cGFyYT4KKworICAgPHBhcmE+CisgICAgPGxpdGVyYWw+SU5ERVhfU0NBTjwvbGl0ZXJhbD4gc3Bl Y2lmaWVzIHRoYXQgZWFjaCB0YXJnZXQgc2hvdWxkCisgICAgYmUgc2Nhbm5lZCB1c2luZyBhbiA8 bGl0ZXJhbD5JbmRleCBTY2FuPC9saXRlcmFsPiBvbiB0aGUgZ2l2ZW4gaW5kZXgKKyAgICBuYW1l LiA8bGl0ZXJhbD5JTkRFWF9PTkxZX1NDQU48L2xpdGVyYWw+IGlzIHNpbWlsYXIsIGJ1dCBzcGVj aWZpZXMgdGhlCisgICAgdXNlIG9mIGFuIDxsaXRlcmFsPkluZGV4IE9ubHkgU2NhbjwvbGl0ZXJh bD4uIEluIGVpdGhlciBjYXNlLCB0aGUgaW5kZXgKKyAgICBuYW1lIGNhbiBiZSwgYnV0IGRvZXMg bm90IGhhdmUgdG8gYmUsIHNjaGVtYS1xdWFsaWZpZWQuCisgICA8L3BhcmE+CisKKyAgIDxwYXJh PgorICAgIDxsaXRlcmFsPkZPUkVJR05fU0NBTjwvbGl0ZXJhbD4gc3BlY2lmaWVzIHRoYXQgYSBq b2luIGJldHdlZW4gdHdvIG9yCisgICAgbW9yZSBmb3JlaWduIHRhYmxlcyBzaG91bGQgYmUgcHVz aGVkIGRvd24gdG8gYSByZW1vdGUgc2VydmVyIHNvCisgICAgdGhhdCBpdCBjYW4gYmUgaW1wbGVt ZW50ZWQgYXMgYSBzaW5nbGUgPGxpdGVyYWw+Rm9yZWlnbiBTY2FuPC9saXRlcmFsPi4KKyAgICBT cGVjaWZ5aW5nIDxsaXRlcmFsPkZPUkVJR05fU0NBTjwvbGl0ZXJhbD4gZm9yIGEgc2luZ2xlIGZv cmVpZ24gdGFibGUgaXMKKyAgICBuZWl0aGVyIG5lY2Vzc2FyeSBub3IgcGVybWlzc2libGU6IGEg PGxpdGVyYWw+Rm9yZWlnbiBTY2FuPC9saXRlcmFsPiB3aWxsCisgICAgbmVlZCB0byBiZSB1c2Vk IHJlZ2FyZGxlc3MuIElmIHlvdSB3YW50IHRvIHByZXZlbnQgYSBqb2luIGZyb20gYmVpbmcKKyAg ICBwdXNoZWQgZG93biwgY29uc2lkZXIgdXNpbmcgdGhlIDxsaXRlcmFsPkpPSU5fT1JERVI8L2xp dGVyYWw+IHRhZyBmb3IKKyAgICB0aGF0IHB1cnBvc2UuCisgICA8L3BhcmE+CisKKyAgIDxwYXJh PgorICAgIFRoZSBwbGFubmVyIHN1cHBvcnRzIG1hbnkgdHlwZXMgb2Ygc2NhbnMgb3RoZXIgdGhh biB0aG9zZSBsaXN0ZWQgaGVyZTsKKyAgICBob3dldmVyLCBpbiBtb3N0IG9mIHRob3NlIGNhc2Vz LCB0aGVyZSBpcyBubyBtZWFuaW5nZnVsIGRlY2lzaW9uIHRvIGJlCisgICAgbWFkZSwgYW5kIGhl bmNlIG5vIG5lZWQgZm9yIGFkdmljZS4gRm9yIGV4YW1wbGUsIHRoZSBvdXRwdXQgb2YgYQorICAg IHNldC1yZXR1cm5pbmcgZnVuY3Rpb24gdGhhdCBhcHBlYXJzIGluIHRoZSA8bGl0ZXJhbD5GUk9N PC9saXRlcmFsPiBjbGF1c2UKKyAgICBjYW4gb25seSBldmVyIGJlIHNjYW5uZWQgdXNpbmcgYSA8 bGl0ZXJhbD5GdW5jdGlvbiBTY2FuPC9saXRlcmFsPiwgc28KKyAgICB0aGVyZSBpcyBubyBvcHBv cnR1bml0eSBmb3IgYWR2aWNlIHRvIGNoYW5nZSBhbnl0aGluZy4KKyAgIDwvcGFyYT4KKworICA8 L3NlY3QzPgorCisgIDxzZWN0MyBpZD0icGdwbGFuYWR2aWNlLWpvaW4tb3JkZXIiPgorICA8dGl0 bGU+Sm9pbiBPcmRlciBBZHZpY2U8L3RpdGxlPgorICAgPHN5bm9wc2lzPgorSk9JTl9PUkRFUig8 cmVwbGFjZWFibGU+am9pbl9vcmRlcl9pdGVtPC9yZXBsYWNlYWJsZT4gWyAuLi4gXSkKKworPHBo cmFzZT53aGVyZSA8cmVwbGFjZWFibGU+am9pbl9vcmRlcl9pdGVtPC9yZXBsYWNlYWJsZT4gaXM6 PC9waHJhc2U+CisKKzxyZXBsYWNlYWJsZT5hZHZpY2VfdGFyZ2V0PC9yZXBsYWNlYWJsZT4gfAor KCA8cmVwbGFjZWFibGU+am9pbl9vcmRlcl9pdGVtPC9yZXBsYWNlYWJsZT4gWyAuLi4gXSApIHwK K3sgPHJlcGxhY2VhYmxlPmpvaW5fb3JkZXJfaXRlbTwvcmVwbGFjZWFibGU+IFsgLi4uIF0gfTwv c3lub3BzaXM+CisKKyAgIDxwYXJhPgorICAgIFdoZW4gPGxpdGVyYWw+Sk9JTl9PUkRFUjwvbGl0 ZXJhbD4gaXMgdXNlZCB3aXRob3V0IGFueSBzdWJsaXN0cywgaXQKKyAgICBzcGVjaWZpZXMgYW4g b3V0ZXItZGVlcCBqb2luIHdpdGggdGhlIGZpcnN0IGFkdmljZSB0YXJnZXQgYXMgdGhlIGRyaXZp bmcKKyAgICB0YWJsZSwgam9pbmVkIHRvIGVhY2ggc3Vic2VxdWVudCBhZHZpY2UgdGFyZ2V0IGlu IHR1cm4gaW4gdGhlIG9yZGVyCisgICAgc3BlY2lmaWVkLiBGb3IgaW5zdGFuY2UsIDxsaXRlcmFs PkpPSU5fT1JERVIoYSBiIGMpPC9saXRlcmFsPiBtZWFucyB0aGF0CisgICAgPGxpdGVyYWw+YTwv bGl0ZXJhbD4gc2hvdWxkIGJlIHRoZSBkcml2aW5nIHRhYmxlLCBhbmQgdGhhdCBpdCBzaG91bGQg YmUKKyAgICBqb2luZWQgZmlyc3QgdG8gPGxpdGVyYWw+YjwvbGl0ZXJhbD4gYW5kIHRoZW4gdG8g PGxpdGVyYWw+YzwvbGl0ZXJhbD4uCisgICAgSWYgdGhlcmUgYXJlIG1vcmUgcmVsYXRpb25zIGlu IHRoZSBxdWVyeSB0aGFuIDxsaXRlcmFsPmE8L2xpdGVyYWw+LAorICAgIDxsaXRlcmFsPmI8L2xp dGVyYWw+LCBhbmQgPGxpdGVyYWw+YzwvbGl0ZXJhbD4sIHRoZSByZXN0IGNhbiBiZSBqb2luZWQK KyAgICBhZnRlcndhcmRzIGluIGFueSBtYW5uZXIuCisgICA8L3BhcmE+CisKKyAgIDxwYXJhPgor ICAgIElmIGEgPGxpdGVyYWw+Sk9JTl9PUkRFUjwvbGl0ZXJhbD4gbGlzdCBjb250YWlucyBhIHBh cmVudGhlc2l6ZWQgc3VibGlzdCwKKyAgICBpdCBzcGVjaWZpZXMgYSBub24tb3V0ZXItZGVlcCBq b2luLiBUaGUgcmVsYXRpb25zIGluIHRoZSBzdWJsaXN0IG11c3QgZmlyc3QKKyAgICBiZSBqb2lu ZWQgdG8gZWFjaCBvdGhlciBtdWNoIGFzIGlmIHRoZSBzdWJsaXN0IHdlcmUgYSB0b3AtbGV2ZWwK KyAgICA8bGl0ZXJhbD5KT0lOX09SREVSPC9saXRlcmFsPiBsaXN0LCBhbmQgdGhlIHJlc3VsdGlu ZyBqb2luIHByb2R1Y3QgbXVzdAorICAgIHRoZW4gYXBwZWFyIG9uIHRoZSBpbm5lciBzaWRlIG9m IGEgam9pbiBhdCB0aGUgYXBwcm9wcmlhdGUgcG9pbnQgaW4gdGhlCisgICAgam9pbiBvcmRlci4g Rm9yIGV4YW1wbGUsIDxsaXRlcmFsPkpPSU5fT1JERVIoYSAoYiBjKSBkKTwvbGl0ZXJhbD4gcmVx dWlyZXMKKyAgICBhIHBsYW4gb2YgdGhpcyBmb3JtOgorICAgPC9wYXJhPgorCis8cHJvZ3JhbWxp c3Rpbmc+CitKb2luCisgIC0+ICBKb2luCisgICAgICAgIC0+IFNjYW4gb24gYQorICAgICAgICAt PiBKb2luCisgICAgICAgICAgICAgLT4gU2NhbiBvbiBiCisgICAgICAgICAgICAgLT4gU2NhbiBv biBjCisgIC0+ICBTY2FuIG9uIGQKKzwvcHJvZ3JhbWxpc3Rpbmc+CisKKyAgIDxwYXJhPgorICAg IElmIGEgPGxpdGVyYWw+Sk9JTl9PUkRFUjwvbGl0ZXJhbD4gbGlzdCBjb250YWlucyBhIHN1Ymxp c3Qgc3Vycm91bmRlZCBieQorICAgIGN1cmx5IGJyYWNlcywgdGhpcyBhbHNvIHNwZWNpZmllcyBh IG5vbi1vdXRlci1kZWVwIGpvaW4uIEhvd2V2ZXIsIHRoZSBqb2luCisgICAgb3JkZXIgd2l0aGlu IHRoZSBzdWJsaXN0IGlzIG5vdCBjb25zdHJhaW5lZC4gRm9yIGV4YW1wbGUsIHNwZWNpZnlpbmcK KyAgICA8bGl0ZXJhbD5KT0lOX09SREVSKGEge2IgY30gZCk8L2xpdGVyYWw+IHdvdWxkIGFsbG93 IHRoZSBzY2FucyBvZgorICAgIDxsaXRlcmFsPmI8L2xpdGVyYWw+IGFuZCA8bGl0ZXJhbD5jPC9s aXRlcmFsPiB0byBiZSBzd2FwcGVkIGluIHRoZQorICAgIHByZXZpb3VzIGV4YW1wbGUsIHdoaWNo IGlzIG5vdCBhbGxvd2VkIHdoZW4gcGFyZW50aGVzZXMgYXJlIHVzZWQuCisgICA8L3BhcmE+CisK KyAgIDxwYXJhPgorICAgIFBhcmVudGhlc2l6ZWQgc3VibGlzdHMgY2FuIGJlIGFyYml0cmFyaWx5 IG5lc3RlZCwgYnV0IHN1Ymxpc3RzIHN1cnJvdW5kZWQKKyAgICBieSBjdXJseSBicmFjZXMgY2Fu bm90IHRoZW1zZWx2ZXMgY29udGFpbiBzdWJsaXN0cy4KKyAgIDwvcGFyYT4KKworICAgPHBhcmE+ CisgICAgTXVsdGlwbGUgaW5zdGFuY2VzIG9mIDxsaXRlcmFsPkpPSU5fT1JERVIoKTwvbGl0ZXJh bD4gY2FuIHNvbWV0aW1lcyBiZQorICAgIG5lZWRlZCBpbiBvcmRlciB0byBmdWxseSBjb25zdHJh aW4gdGhlIGpvaW4gb3JkZXIuIFRoaXMgb2NjdXJzIHdoZW4gdGhlcmUKKyAgICBhcmUgbXVsdGlw bGUgam9pbiBwcm9ibGVtcyB0aGF0IGFyZSBvcHRpbWl6ZWQgc2VwYXJhdGVseSBieSB0aGUgcGxh bm5lci4KKyAgICBUaGlzIGNhbiBoYXBwZW4gZHVlIHRvIHRoZSBwcmVzZW5jZSBvZiBzdWJxdWVy aWVzLCBvciBiZWNhdXNlIHRoZXJlIGlzIGEKKyAgICBwYXJ0aXRpb253aXNlIGpvaW4uIEluIHRo ZSBsYXR0ZXIgY2FzZSwgZWFjaCBicmFuY2ggb2YgdGhlIHBhcnRpdGlvbndpc2UKKyAgICBqb2lu IGNhbiBoYXZlIGl0cyBvd24gam9pbiBvcmRlciwgaW5kZXBlbmRlbnQgb2YgZXZlcnkgb3RoZXIg YnJhbmNoLgorICAgPC9wYXJhPgorCisgIDwvc2VjdDM+CisKKyAgPHNlY3QzIGlkPSJwZ3BsYW5h ZHZpY2Utam9pbi1tZXRob2QiPgorICA8dGl0bGU+Sm9pbiBNZXRob2QgQWR2aWNlPC90aXRsZT4K KyAgIDxzeW5vcHNpcz4KK2pvaW5fbWV0aG9kX25hbWUoPHJlcGxhY2VhYmxlPmpvaW5fbWV0aG9k X2l0ZW08L3JlcGxhY2VhYmxlPiBbIC4uLiBdKQorCis8cGhyYXNlPndoZXJlIDxyZXBsYWNlYWJs ZT5qb2luX21ldGhvZF9uYW1lPC9yZXBsYWNlYWJsZT4gaXM6PC9waHJhc2U+CisKK3sgTUVSR0Vf Sk9JTl9NQVRFUklBTElaRSB8IE1FUkdFX0pPSU5fUExBSU4gfCBORVNURURfTE9PUF9NQVRFUklB TElaRSB8IE5FU1RFRF9MT09QX1BMQUlOIHwgSEFTSF9KT0lOIH0KKworPHBocmFzZT5hbmQgPHJl cGxhY2VhYmxlPmpvaW5fbWV0aG9kX2l0ZW08L3JlcGxhY2VhYmxlPiBpczo8L3BocmFzZT4KKwor eyA8cmVwbGFjZWFibGU+YWR2aWNlX3RhcmdldDwvcmVwbGFjZWFibGU+IHwKKyggPHJlcGxhY2Vh YmxlPmFkdmljZV90YXJnZXQ8L3JlcGxhY2VhYmxlPiBbIC4uLiBdICkgfTwvc3lub3BzaXM+CisK KyAgIDxwYXJhPgorICAgIEpvaW4gbWV0aG9kIGFkdmljZSBzcGVjaWZpZXMgdGhlIHJlbGF0aW9u LCBvciBzZXQgb2YgcmVsYXRpb25zLCB0aGF0IHNob3VsZAorICAgIGFwcGVhciBvbiB0aGUgaW5u ZXIgc2lkZSBvZiBhIGpvaW4gdXNpbmcgdGhlIG5hbWVkIGpvaW4gbWV0aG9kLiBGb3IKKyAgICBl eGFtcGxlLCA8bGl0ZXJhbD5IQVNIX0pPSU4oYSBiKTwvbGl0ZXJhbD4gbWVhbnMgdGhhdCBlYWNo IG9mCisgICAgPGxpdGVyYWw+YTwvbGl0ZXJhbD4gYW5kIDxsaXRlcmFsPmI8L2xpdGVyYWw+IHNo b3VsZCBhcHBlYXIgb24gdGhlIGlubmVyCisgICAgc2lkZSBvZiBhIGhhc2ggam9pbjsgYSBjb25m b3JtaW5nIHBsYW4gbXVzdCBjb250YWluIGF0IGxlYXN0IHR3byBoYXNoCisgICAgam9pbnMsIG9u ZSBvZiB3aGljaCBoYXMgPGxpdGVyYWw+YTwvbGl0ZXJhbD4gYW5kIG5vdGhpbmcgZWxzZSBvbiB0 aGUKKyAgICBpbm5lciBzaWRlLCBhbmQgdGhlIG90aGVyIG9mIHdoaWNoIGhhcyA8bGl0ZXJhbD5i PC9saXRlcmFsPiBhbmQgbm90aGluZworICAgIGVsc2Ugb24gdGhlIGlubmVyIHNpZGUuIE9uIHRo ZSBvdGhlciBoYW5kLAorICAgIDxsaXRlcmFsPkhBU0hfSk9JTigoYSBiKSk8L2xpdGVyYWw+IG1l YW5zIHRoYXQgdGhlIGpvaW4gcHJvZHVjdCBvZgorICAgIDxsaXRlcmFsPmE8L2xpdGVyYWw+IGFu ZCA8bGl0ZXJhbD5iPC9saXRlcmFsPiBzaG91bGQgYXBwZWFyIHRvZ2V0aGVyCisgICAgb24gdGhl IGlubmVyIHNpZGUgb2YgYSBzaW5nbGUgaGFzaCBqb2luLgorICAgPC9wYXJhPgorCisgICA8cGFy YT4KKyAgICBOb3RlIHRoYXQgam9pbiBtZXRob2QgYWR2aWNlIGltcGxpZXMgYSBuZWdhdGl2ZSBq b2luIG9yZGVyIGNvbnN0cmFpbnQuCisgICAgU2luY2UgdGhlIG5hbWVkIHJlbGF0aW9uIG9yIHJl bGF0aW9ucyBtdXN0IGJlIG9uIHRoZSBpbm5lciBzaWRlIG9mIGEgam9pbgorICAgIHVzaW5nIHRo ZSBzcGVjaWZpZWQgbWV0aG9kLCBub25lIG9mIHRoZW0gY2FuIGJlIHRoZSBkcml2aW5nIHRhYmxl IGZvciB0aGUKKyAgICBlbnRpcmUgam9pbiBwcm9ibGVtLiBNb3Jlb3Zlciwgbm8gcmVsYXRpb24g aW5zaWRlIHRoZSBzZXQgc2hvdWxkIGJlIGpvaW5lZAorICAgIHRvIGFueSByZWxhdGlvbiBvdXRz aWRlIHRoZSBzZXQgdW50aWwgYWxsIHJlbGF0aW9ucyB3aXRoaW4gdGhlIHNldCBoYXZlCisgICAg YmVlbiBqb2luZWQgdG8gZWFjaCBvdGhlci4gRm9yIGV4YW1wbGUsIGlmIHRoZSBhZHZpY2Ugc3Bl Y2lmaWVzCisgICAgPGxpdGVyYWw+SEFTSF9KT0lOKChhIGIpKTwvbGl0ZXJhbD4gYW5kIHRoZSBz eXN0ZW0gYmVnaW5zIGJ5IGpvaW5pbmcgZWl0aGVyCisgICAgb2YgdGhvc2UgdG8gc29tZSB0aGly ZCByZWxhdGlvbiA8bGl0ZXJhbD5jPC9saXRlcmFsPiwgdGhlIHJlc3VsdGluZworICAgIHBsYW4g Y291bGQgbmV2ZXIgYmUgY29tcGxpYW50IHdpdGggdGhlIHJlcXVlc3QgdG8gcHV0IGV4YWN0bHkg dGhvc2UgdHdvCisgICAgcmVsYXRpb25zIG9uIHRoZSBpbm5lciBzaWRlIG9mIGEgaGFzaCBqb2lu LiBXaGVuIHVzaW5nIGJvdGggam9pbiBvcmRlcgorICAgIGFkdmljZSBhbmQgam9pbiBtZXRob2Qg YWR2aWNlIGZvciB0aGUgc2FtZSBxdWVyeSwgaXQgaXMgYSBnb29kIGlkZWEgdG8gbWFrZQorICAg IHN1cmUgdGhhdCB0aGV5IGRvIG5vdCBtYW5kYXRlIGluY29tcGF0aWJsZSBqb2luIG9yZGVycy4K KyAgIDwvcGFyYT4KKworICA8L3NlY3QzPgorCisgIDxzZWN0MyBpZD0icGdwbGFuYWR2aWNlLXBh cnRpdGlvbndpc2UiPgorICA8dGl0bGU+UGFydGl0aW9ud2lzZSBBZHZpY2U8L3RpdGxlPgorICAg PHN5bm9wc2lzPgorUEFSVElUSU9OV0lTRSg8cmVwbGFjZWFibGU+cGFydGl0aW9ud2lzZV9pdGVt PC9yZXBsYWNlYWJsZT4gWyAuLi4gXSkKKworPHBocmFzZT53aGVyZSA8cmVwbGFjZWFibGU+cGFy dGl0aW9ud2lzZV9pdGVtPC9yZXBsYWNlYWJsZT4gaXM6PC9waHJhc2U+CisKK3sgPHJlcGxhY2Vh YmxlPmFkdmljZV90YXJnZXQ8L3JlcGxhY2VhYmxlPiB8CisoIDxyZXBsYWNlYWJsZT5hZHZpY2Vf dGFyZ2V0PC9yZXBsYWNlYWJsZT4gWyAuLi4gXSApIH08L3N5bm9wc2lzPgorCisgICA8cGFyYT4K KyAgICBXaGVuIGFwcGxpZWQgdG8gYSBzaW5nbGUgdGFyZ2V0LCA8bGl0ZXJhbD5QQVJUSVRJT05X SVNFPC9saXRlcmFsPgorICAgIHNwZWNpZmllcyB0aGF0IHRoZSBzcGVjaWZpZWQgdGFibGUgc2hv dWxkIG5vdCBiZSBwYXJ0IG9mIGFueSBwYXJ0aXRpb253aXNlCisgICAgam9pbi4gV2hlbiBhcHBs aWVkIHRvIGEgbGlzdCBvZiB0YXJnZXRzLCA8bGl0ZXJhbD5QQVJUSVRJT05XSVNFPC9saXRlcmFs PgorICAgIHNwZWNpZmllcyB0aGF0IGV4YWN0bHkgdGhhdCBzZXQgb2YgcmVsYXRpb25zIHNob3Vs ZCBiZSBqb2luZWQgaW4KKyAgICBwYXJ0aXRpb253aXNlIGZhc2hpb24uIE5vdGUgdGhhdCwgcmVn YXJkbGVzcyBvZiB3aGF0IGFkdmljZSBpcyBzcGVjaWZpZWQsCisgICAgbm8gcGFydGl0aW9ud2lz ZSBqb2lucyB3aWxsIGJlIHBvc3NpYmxlIGlmCisgICAgPGxpdGVyYWw+ZW5hYmxlX3BhcnRpdGlv bndpc2Vfam9pbiA9IG9mZjwvbGl0ZXJhbD4uCisgICA8L3BhcmE+CisKKyAgPC9zZWN0Mz4KKwor ICA8c2VjdDMgaWQ9InBncGxhbmFkdmljZS1zZW1pam9pbi11bmlxdWUiPgorICA8dGl0bGU+U2Vt aWpvaW4gVW5pcXVlbmVzcyBBZHZpY2U8L3RpdGxlPgorICAgPHN5bm9wc2lzPgorU0VNSUpPSU5f VU5JUVVFKDxyZXBsYWNlYWJsZT5zal91bmlxdWVfaXRlbTwvcmVwbGFjZWFibGU+IFsgLi4uIF0p CitTRU1JSk9JTl9OT05fVU5JUVVFKDxyZXBsYWNlYWJsZT5zal91bmlxdWVfaXRlbTwvcmVwbGFj ZWFibGU+IFsgLi4uIF0pCisKKzxwaHJhc2U+d2hlcmUgPHJlcGxhY2VhYmxlPnNqX3VuaXF1ZV9p dGVtPC9yZXBsYWNlYWJsZT4gaXM6PC9waHJhc2U+CisKK3sgPHJlcGxhY2VhYmxlPmFkdmljZV90 YXJnZXQ8L3JlcGxhY2VhYmxlPiB8CisoIDxyZXBsYWNlYWJsZT5hZHZpY2VfdGFyZ2V0PC9yZXBs YWNlYWJsZT4gWyAuLi4gXSApIH08L3N5bm9wc2lzPgorCisgICA8cGFyYT4KKyAgICBUaGUgcGxh bm5lciBzb21ldGltZXMgaGFzIGEgY2hvaWNlIGJldHdlZW4gaW1wbGVtZW50aW5nIGEgc2VtaWpv aW4KKyAgICBkaXJlY3RseSBhbmQgaW1wbGVtZW50aW5nIGEgc2VtaWpvaW4gYnkgbWFraW5nIHRo ZSBudWxsYWJsZSBzaWRlIHVuaXF1ZQorICAgIGFuZCB0aGVuIHBlcmZvcm1pbmcgYW4gaW5uZXIg am9pbi4gPGxpdGVyYWw+U0VNSUpPSU5fVU5JUVVFPC9saXRlcmFsPgorICAgIHNwZWNpZmllcyB0 aGUgbGF0dGVyIHN0cmF0ZWd5LCB3aGlsZSA8bGl0ZXJhbD5TRU1JSk9JTl9OT05fVU5JUVVFPC9s aXRlcmFsPgorICAgIHNwZWNpZmllcyB0aGUgZm9ybWVyIHN0cmF0ZWd5LiBJbiBlaXRoZXIgY2Fz ZSwgdGhlIGFyZ3VtZW50IGlzIHRoZSBzaW5nbGUKKyAgICByZWxhdGlvbiBvciBsaXN0IG9mIHJl bGF0aW9ucyB0aGF0IGFwcGVhciBiZW5lYXRoIHRoZSBudWxsYWJsZSBzaWRlIG9mIHRoZQorICAg IGpvaW4uCisgICA8L3BhcmE+CisKKyAgPC9zZWN0Mz4KKworICA8c2VjdDMgaWQ9InBncGxhbmFk dmljZS1wYXJhbGxlbC1xdWVyeSI+CisgIDx0aXRsZT5QYXJhbGxlbCBRdWVyeSBBZHZpY2U8L3Rp dGxlPgorICAgPHN5bm9wc2lzPgorR0FUSEVSKDxyZXBsYWNlYWJsZT5nYXRoZXJfaXRlbTwvcmVw bGFjZWFibGU+IFsgLi4uIF0pCitHQVRIRVJfTUVSR0UoPHJlcGxhY2VhYmxlPmdhdGhlcl9pdGVt PC9yZXBsYWNlYWJsZT4gWyAuLi4gXSkKK05PX0dBVEhFUig8cmVwbGFjZWFibGU+YWR2aWNlX3Rh cmdldDwvcmVwbGFjZWFibGU+IFsgLi4uIF0pCisKKzxwaHJhc2U+d2hlcmUgPHJlcGxhY2VhYmxl PmdhdGhlcl9pdGVtPC9yZXBsYWNlYWJsZT4gaXM6PC9waHJhc2U+CisKK3sgPHJlcGxhY2VhYmxl PmFkdmljZV90YXJnZXQ8L3JlcGxhY2VhYmxlPiB8CisoIDxyZXBsYWNlYWJsZT5hZHZpY2VfdGFy Z2V0PC9yZXBsYWNlYWJsZT4gWyAuLi4gXSApIH08L3N5bm9wc2lzPgorCisgICA8cGFyYT4KKyAg ICA8bGl0ZXJhbD5HQVRIRVI8L2xpdGVyYWw+IG9yIDxsaXRlcmFsPkdBVEhFUl9NRVJHRTwvbGl0 ZXJhbD4gc3BlY2lmaWVzCisgICAgdGhhdCA8bGl0ZXJhbD5HYXRoZXI8L2xpdGVyYWw+IG9yIDxs aXRlcmFsPkdhdGhlciBNZXJnZTwvbGl0ZXJhbD4sCisgICAgcmVzcGVjdGl2ZWx5LCBzaG91bGQg YmUgcGxhY2VkIG9uIHRvcCBvZiB0aGUgc2luZ2xlIHJlbGF0aW9uIHNwZWNpZmllZCBhcworICAg IGEgdGFyZ2V0LCBvciBvbiB0b3Agb2YgdGhlIGpvaW4gYmV0d2VlbiB0aGUgbGlzdCBvZiByZWxh dGlvbnMgc3BlY2lmaWVkIGFzCisgICAgYSB0YXJnZXQuIFRoaXMgbWVhbnMgdGhhdCA8bGl0ZXJh bD5HQVRIRVIoYSBiIGMpPC9saXRlcmFsPiBpcyBhIHJlcXVlc3QKKyAgICBmb3IgdGhyZWUgZGlm ZmVyZW50IDxsaXRlcmFsPkdhdGhlcjwvbGl0ZXJhbD4gbm9kZXMsIHdoaWxlCisgICAgPGxpdGVy YWw+R0FUSEVSKChhIGIgYykpPC9saXRlcmFsPiBpcyBhIHJlcXVlc3QgZm9yIGEgc2luZ2xlCisg ICAgPGxpdGVyYWw+R2F0aGVyPC9saXRlcmFsPiBub2RlIG9uIHRvcCBvZiBhIDMtd2F5IGpvaW4u CisgICA8L3BhcmE+CisKKyAgIDxwYXJhPgorICAgIDxsaXRlcmFsPk5PX0dBVEhFUjwvbGl0ZXJh bD4gc3BlY2lmaWVzIHRoYXQgbm8gPGxpdGVyYWw+R2F0aGVyPC9saXRlcmFsPiBvcgorICAgIDxs aXRlcmFsPkdhdGhlciBNZXJnZTwvbGl0ZXJhbD4gbm9kZSBzaG91bGQgYXBwZWFyIGFib3ZlIGFu eSBvZiB0aGUKKyAgICB0YXJnZXRzLCBidXQgaXQgb25seSBjb25zdHJhaW5zIHRoZSBwbGFubmlu ZyBvZiBhbiBpbmRpdmlkdWFsIHN1YnF1ZXJ5LAorICAgIGFuZCBvdXRlciBzdWJxdWVyeSBsZXZl bHMgY2FuIHN0aWxsIHVzZSBwYXJhbGxlbCBxdWVyeS4gRm9yIGV4YW1wbGUsCisgICAgPGxpdGVy YWw+Tk9fR0FUSEVSKGlubmVyX2V4YW1wbGVAYW55XzEpPC9saXRlcmFsPiBwcmVjbHVkZXMgdXNp bmcgYQorICAgIDxsaXRlcmFsPlBhcmFsbGVsIFNlcSBTY2FuPC9saXRlcmFsPiB0byBhY2Nlc3Mg dGhlCisgICAgPGxpdGVyYWw+aW5uZXJfZXhhbXBsZTwvbGl0ZXJhbD4gdGFibGUgd2l0aGluIHRo ZSA8bGl0ZXJhbD5hbnlfMTwvbGl0ZXJhbD4KKyAgICBzdWJxdWVyeSwgYnV0IGl0IGRvZXMgbm90 IHByZXZlbnQgdGhlIHBsYW5uZXIgZnJvbSBwbGFjaW5nCisgICAgPGxpdGVyYWw+U3ViUGxhbiBh bnlfMTwvbGl0ZXJhbD4gYmVuZWF0aCBhIDxsaXRlcmFsPkdhdGhlcjwvbGl0ZXJhbD4KKyAgICBv ciA8bGl0ZXJhbD5HYXRoZXIgTWVyZ2U8L2xpdGVyYWw+IG5vZGUuIFRoZSBmb2xsb3dpbmcgcGxh biBpcworICAgIGNvbXBhdGlibGUgd2l0aCA8bGl0ZXJhbD5OT19HQVRIRVIoaW5uZXJfZXhhbXBs ZUBhbnlfMSk8L2xpdGVyYWw+LCBidXQKKyAgICBub3Qgd2l0aCA8bGl0ZXJhbD5OT19HQVRIRVIo b3V0ZXJfZXhhbXBsZSk8L2xpdGVyYWw+OgorICAgPC9wYXJhPgorCis8cHJvZ3JhbWxpc3Rpbmc+ CisgRmluYWxpemUgQWdncmVnYXRlCisgICAtPiAgR2F0aGVyCisgICAgICAgICAtPiAgUGFydGlh bCBBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBTZXEgU2NhbiBvbiBvdXRl cl9leGFtcGxlCisgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6IChzb21ldGhpbmcgPSAoaGFz aGVkIFN1YlBsYW4gYW55XzEpLmNvbDEpCisgICAgICAgICAgICAgICAgICAgICBTdWJQbGFuIGFu eV8xCisgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBpbm5lcl9leGFtcGxl CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHNvbWV0aGluZ19lbHNlID4g MTAwKQorPC9wcm9ncmFtbGlzdGluZz4KKworICAgPHBhcmE+CisgICAgSGVyZSBpcyB0aGUgcmV2 ZXJzZSBjYXNlLCB0aGF0IGlzLCBhIHBsYW4gY29tcGF0aWJsZSB3aXRoCisgICAgPGxpdGVyYWw+ Tk9fR0FUSEVSKG91dGVyX2V4YW1wbGUpPC9saXRlcmFsPiBidXQgbm90IHdpdGgKKyAgICA8bGl0 ZXJhbD5OT19HQVRIRVIoaW5uZXJfZXhhbXBsZUBhbnlfMSk8L2xpdGVyYWw+OgorICAgPC9wYXJh PgorCis8cHJvZ3JhbWxpc3Rpbmc+CisgQWdncmVnYXRlCisgICAtPiAgU2VxIFNjYW4gb24gb3V0 ZXJfZXhhbXBsZQorICAgICAgICAgRmlsdGVyOiAoc29tZXRoaW5nID0gKGhhc2hlZCBTdWJQbGFu IGFueV8xKS5jb2wxKQorICAgICAgICAgU3ViUGxhbiBhbnlfMQorICAgICAgICAgICAtPiAgR2F0 aGVyCisgICAgICAgICAgICAgICAgIC0+IFBhcmFsbGVsIFNlcSBTY2FuIG9uIGlubmVyX2V4YW1w bGUKKyAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6IChzb21ldGhpbmdfZWxzZSA+IDEwMCkK KzwvcHJvZ3JhbWxpc3Rpbmc+CisKKyAgPC9zZWN0Mz4KKyA8L3NlY3QyPgorCisgPHNlY3QyIGlk PSJwZ3BsYW5hZHZpY2UtZmVlZGJhY2siPgorICA8dGl0bGU+QWR2aWNlIEZlZWRiYWNrPC90aXRs ZT4KKworICA8cGFyYT4KKyAgIDxsaXRlcmFsPkVYUExBSU48L2xpdGVyYWw+IHByb3ZpZGVzIGZl ZWRiYWNrIG9uIHdoZXRoZXIgc3VwcGxpZWQgYWR2aWNlIHdhcworICAgc3VjY2Vzc2Z1bGx5IGFw cGxpZWQgdG8gdGhlIHF1ZXJ5IGluIHRoZSBmb3JtIG9mIGEgY29tbWVudCBvbiBlYWNoIHBpZWNl CisgICBvZiBzdXBwbGllZCBhZHZpY2UuIEZvciBleGFtcGxlOgorICA8L3BhcmE+CisKKzxwcm9n cmFtbGlzdGluZz4KK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnaGFzaF9qb2luKGYgZykg am9pbl9vcmRlcihmIGcpIGluZGV4X3NjYW4oZiBub19zdWNoX2luZGV4KSc7CitFWFBMQUlOIChD T1NUUyBPRkYpCisgICAgU0VMRUNUICogRlJPTSBqb19mYWN0IGYKKyAgICBMRUZUIEpPSU4gam9f ZGltMSBkMSBPTiBmLmRpbTFfaWQgPSBkMS5pZAorICAgIExFRlQgSk9JTiBqb19kaW0yIGQyIE9O IGYuZGltMl9pZCA9IGQyLmlkCisgICAgV0hFUkUgdmFsMSA9IDEgQU5EIHZhbDIgPSAxOworICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4KKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoIEpv aW4KKyAgIEhhc2ggQ29uZDogKChkMS5pZCA9IGYuZGltMV9pZCkgQU5EIChkMi5pZCA9IGYuZGlt Ml9pZCkpCisgICAtPiAgTmVzdGVkIExvb3AKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19k aW0yIGQyCisgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyAgICAgICAgIC0+ICBN YXRlcmlhbGl6ZQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2RpbTEgZDEKKyAg ICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDEgPSAxKQorICAgLT4gIEhhc2gKKyAgICAg ICAgIC0+ICBTZXEgU2NhbiBvbiBqb19mYWN0IGYKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAg IElOREVYX1NDQU4oZiBub19zdWNoX2luZGV4KSAvKiBtYXRjaGVkLCBpbmFwcGxpY2FibGUsIGZh aWxlZCAqLworICAgSEFTSF9KT0lOKGYpIC8qIG1hdGNoZWQgKi8KKyAgIEhBU0hfSk9JTihnKSAv KiBub3QgbWF0Y2hlZCAqLworICAgSk9JTl9PUkRFUihmIGcpIC8qIHBhcnRpYWxseSBtYXRjaGVk ICovCis8L3Byb2dyYW1saXN0aW5nPgorCisgIDxwYXJhPgorICAgRm9yIHRoaXMgcXVlcnksIDxs aXRlcmFsPmY8L2xpdGVyYWw+IGlzIGEgdmFsaWQgYWR2aWNlIHRhcmdldCwgYnV0CisgICA8bGl0 ZXJhbD5nPC9saXRlcmFsPiBpcyBub3QuIFRoZXJlZm9yZSwgdGhlIHJlcXVlc3QgdG8gcGxhY2UK KyAgIDxsaXRlcmFsPmY8L2xpdGVyYWw+IG9uIHRoZSBpbm5lciBzaWRlIG9mIGEgaGFzaCBqb2lu IGlzIGxpc3RlZCBhcworICAgPGxpdGVyYWw+bWF0Y2hlZDwvbGl0ZXJhbD4sIGJ1dCB0aGUgcmVx dWVzdCB0byBwbGFjZSA8bGl0ZXJhbD5nPC9saXRlcmFsPgorICAgb24gdGhlIGlubmVyIHNpZGUg b2YgYSBoYXNoIGpvaW4gaXMgbGlzdGVkIGFzCisgICA8bGl0ZXJhbD5ub3QgbWF0Y2hlZDwvbGl0 ZXJhbD4uIFRoZSA8bGl0ZXJhbD5KT0lOX09SREVSPC9saXRlcmFsPiBhZHZpY2UKKyAgIHRhZyBp bnZvbHZlcyBvbmUgdmFsaWQgdGFyZ2V0IGFuZCBvbmUgaW52YWxpZCB0YXJnZXQsIGFuZCBzbyBp cyBsaXN0ZWQgYXMKKyAgIDxsaXRlcmFsPnBhcnRpYWxseSBtYXRjaGVkPC9saXRlcmFsPi4gTm90 ZSB0aGF0CisgICA8bGl0ZXJhbD5IQVNIX0pPSU4oZiBnKTwvbGl0ZXJhbD4gaXMgYWN0dWFsbHkg YSByZXF1ZXN0IGZvciB0d28gbG9naWNhbGx5CisgICBzZXBhcmF0ZSBiZWhhdmlvcnMsIHNvIGlu IHRoZSBmZWVkYmFjayBpdCBpcyBkZWNvbXBvc2VkIGludG8KKyAgIDxsaXRlcmFsPkhBU0hfSk9J TihmKTwvbGl0ZXJhbD4gYW5kIDxsaXRlcmFsPkhBU0hfSk9JTihnKTwvbGl0ZXJhbD4uCisgICBC eSBjb250cmFzdCwgPGxpdGVyYWw+Sk9JTl9PUkRFUihmIGcpPC9saXRlcmFsPiBpcyBhIHNpbmds ZSByZXF1ZXN0IGFuZAorICAgYXBwZWFycyBhcy1pcy4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgor ICAgQWR2aWNlIGZlZWRiYWNrIGNhbiBpbmNsdWRlIGFueSBvZiB0aGUgZm9sbG93aW5nOgorICA8 L3BhcmE+CisKKyAgPGl0ZW1pemVkbGlzdD4KKworICAgPGxpc3RpdGVtPgorICAgIDxwYXJhPgor ICAgICA8bGl0ZXJhbD5tYXRjaGVkPC9saXRlcmFsPiBtZWFucyB0aGF0IGFsbCBvZiB0aGUgc3Bl Y2lmaWVkIGFkdmljZSB0YXJnZXRzCisgICAgIHdlcmUgb2JzZXJ2ZWQgdG9nZXRoZXIgZHVyaW5n IHF1ZXJ5IHBsYW5uaW5nLCBhdCBhIHRpbWUgYXQgd2hpY2ggdGhlCisgICAgIGFkdmljZSBjb3Vs ZCBiZSBlbmZvcmNlZC4KKyAgICA8L3BhcmE+CisgICA8L2xpc3RpdGVtPgorCisgICA8bGlzdGl0 ZW0+CisgICAgPHBhcmE+CisgICAgIDxsaXRlcmFsPnBhcnRpYWxseSBtYXRjaGVkPC9saXRlcmFs PiBtZWFucyB0aGF0IHNvbWUgYnV0IG5vdCBhbGwgb2YgdGhlCisgICAgIHNwZWNpZmllZCBhZHZp Y2UgdGFyZ2V0cyB3ZXJlIG9ic2VydmVkIGR1cmluZyBxdWVyeSBwbGFubmluZywgb3IgYWxsCisg ICAgIG9mIHRoZSBhZHZpY2UgdGFyZ2V0cyB3ZXJlIG9ic2VydmVkIGJ1dCBub3QgdG9nZXRoZXIu IEZvciBleGFtcGxlLCB0aGlzCisgICAgIG1heSBoYXBwZW4gaWYgYWxsIHRoZSB0YXJnZXRzIG9m IDxsaXRlcmFsPkpPSU5fT1JERVI8L2xpdGVyYWw+IGFkdmljZQorICAgICBpbmRpdmlkdWFsbHkg bWF0Y2ggdGhlIHF1ZXJ5LCBidXQgdGhlIHByb3Bvc2VkIGpvaW4gb3JkZXIgaXMgbm90IGxlZ2Fs LgorICAgIDwvcGFyYT4KKyAgIDwvbGlzdGl0ZW0+CisKKyAgIDxsaXN0aXRlbT4KKyAgICA8cGFy YT4KKyAgICAgPGxpdGVyYWw+bm90IG1hdGNoZWQ8L2xpdGVyYWw+IG1lYW5zIHRoYXQgbm9uZSBv ZiB0aGUKKyAgICAgc3BlY2lmaWVkIGFkdmljZSB0YXJnZXRzIHdlcmUgb2JzZXJ2ZWQgZHVyaW5n IHF1ZXJ5IHBsYW5uaW5nLiBUaGlzIG1heQorICAgICBoYXBwZW4gaWYgdGhlIGFkdmljZSBzaW1w bHkgZG9lc24ndCBtYXRjaCB0aGUgcXVlcnksIG9yIGl0IG1heQorICAgICBvY2N1ciBpZiB0aGUg cmVsZXZhbnQgcG9ydGlvbiBvZiB0aGUgcXVlcnkgd2FzIG5vdCBwbGFubmVkLCBwZXJoYXBzCisg ICAgIGJlY2F1c2UgaXQgd2FzIGdhdGVkIGJ5IGEgY29uZGl0aW9uIHRoYXQgd2FzIHNpbXBsaWZp ZWQgdG8gY29uc3RhbnQgZmFsc2UuCisgICAgPC9wYXJhPgorICAgPC9saXN0aXRlbT4KKworICAg PGxpc3RpdGVtPgorICAgIDxwYXJhPgorICAgICA8bGl0ZXJhbD5pbmFwcGxpY2FibGU8L2xpdGVy YWw+IG1lYW5zIHRoYXQgdGhlIGFkdmljZSB0YWcgY291bGQgbm90CisgICAgIGJlIGFwcGxpZWQg dG8gdGhlIGFkdmljZSB0YXJnZXRzIGZvciBzb21lIHJlYXNvbi4gRm9yIGV4YW1wbGUsIHRoaXMg d2lsbAorICAgICBoYXBwZW4gaWYgdGhlIHVzZSBvZiBhIG5vbmV4aXN0ZW50IGluZGV4IGlzIHJl cXVlc3RlZCwgb3IgaWYgYW4gYXR0ZW1wdAorICAgICBpcyBtYWRlIHRvIGNvbnRyb2wgc2VtaWpv aW4gdW5pcXVlbmVzcyBmb3IgYSBub24tc2VtaWpvaW4uCisgICAgPC9wYXJhPgorICAgPC9saXN0 aXRlbT4KKworICAgPGxpc3RpdGVtPgorICAgIDxwYXJhPgorICAgICA8bGl0ZXJhbD5jb25mbGlj dGluZzwvbGl0ZXJhbD4gbWVhbnMgdGhhdCB0d28gb3IgbW9yZSBwaWVjZXMgb2YgYWR2aWNlCisg ICAgIHJlcXVlc3QgaW5jb21wYXRpYmxlIGJlaGF2aW9ycy4gRm9yIGV4YW1wbGUsIGlmIHlvdSBh ZHZpc2UgYSBzZXF1ZW50aWFsCisgICAgIHNjYW4gYW5kIGFuIGluZGV4IHNjYW4gZm9yIHRoZSBz YW1lIHRhYmxlLCBib3RoIHJlcXVlc3RzIHdpbGwgYmUgZmxhZ2dlZAorICAgICBhcyBjb25mbGlj dGluZy4gVGhpcyBhbHNvIGNvbW1vbmx5IGhhcHBlbnMgaWYgam9pbiBtZXRob2QgYWR2aWNlIG9y CisgICAgIHNlbWlqb2luIHVuaXF1ZW5lc3MgYWR2aWNlIGltcGxpZXMgYSBqb2luIG9yZGVyIGlu Y29tcGF0aWJsZSB3aXRoIHRoZQorICAgICBvbmUgZXhwbGljaXRseSBzcGVjaWZpZWQ7IHNlZQor ICAgICA8eHJlZiBsaW5rZW5kPSJwZ3BsYW5hZHZpY2Utam9pbi1tZXRob2QiIC8+LgorICAgIDwv cGFyYT4KKyAgIDwvbGlzdGl0ZW0+CisKKyAgIDxsaXN0aXRlbT4KKyAgICA8cGFyYT4KKyAgICAg PGxpdGVyYWw+ZmFpbGVkPC9saXRlcmFsPiBtZWFucyB0aGF0IHRoZSBxdWVyeSBwbGFuIGRvZXMg bm90IGNvbXBseSB3aXRoCisgICAgIHRoZSBhZHZpY2UuIFRoaXMgb25seSBvY2N1cnMgZm9yIGVu dHJpZXMgdGhhdCBhcmUgYWxzbyBzaG93biBhcworICAgICA8bGl0ZXJhbD5tYXRjaGVkPC9saXRl cmFsPi4gSXQgZnJlcXVlbnRseSBvY2N1cnMgZm9yIGVudHJpZXMgdGhhdCBhcmUKKyAgICAgYWxz byBtYXJrZWQgYXMgPGxpdGVyYWw+Y29uZmxpY3Rpbmc8L2xpdGVyYWw+IG9yCisgICAgIDxsaXRl cmFsPmluYXBwbGljYWJsZTwvbGl0ZXJhbD4uIEhvd2V2ZXIsIGl0IGNhbiBhbHNvIG9jY3VyIHdo ZW4gdGhlCisgICAgIGFkdmljZSBpcyB2YWxpZCBpbnNvZmFyIGFzIDxsaXRlcmFsPnBnX3BsYW5f YWR2aWNlPC9saXRlcmFsPiBpcyBhYmxlCisgICAgIHRvIGRldGVybWluZSwgYnV0IHRoZSBwbGFu bmVyIGlzIG5vdCBhYmxlIHRvIGNvbnN0cnVjdCBhIGxlZ2FsCisgICAgIHBsYW4gdGhhdCBjYW4g Y29tcGx5IHdpdGggdGhlIGFkdmljZS4gSXQgaXMgaW1wb3J0YW50IHRvIG5vdGUgdGhhdCB0aGUK KyAgICAgc2FuaXR5IGNoZWNrcyBwZXJmb3JtZWQgYnkgPGxpdGVyYWw+cGdfcGxhbl9hZHZpY2U8 L2xpdGVyYWw+IGFyZSBmYWlybHkKKyAgICAgc3VwZXJmaWNpYWwgYW5kIGZvY3VzZWQgbW9zdGx5 IG9uIGxvb2tpbmcgZm9yIGxvZ2ljYWwgaW5jb25zaXN0ZW5jaWVzIGluCisgICAgIHRoZSBhZHZp Y2Ugc3RyaW5nOyBvbmx5IHRoZSBwbGFubmVyIGtub3dzIHdoYXQgd2lsbCBhY3R1YWxseSB3b3Jr LgorICAgIDwvcGFyYT4KKyAgIDwvbGlzdGl0ZW0+CisKKyAgPC9pdGVtaXplZGxpc3Q+CisKKyAg PHBhcmE+CisgICBBbGwgYWR2aWNlIHNob3VsZCBiZSBtYXJrZWQgYXMgZXhhY3RseSBvbmUgb2Yg PGxpdGVyYWw+bWF0Y2hlZDwvbGl0ZXJhbD4sCisgICA8bGl0ZXJhbD5wYXJ0aWFsbHkgbWF0Y2hl ZDwvbGl0ZXJhbD4sIG9yIDxsaXRlcmFsPm5vdCBtYXRjaGVkPC9saXRlcmFsPi4KKyAgPC9wYXJh PgorCisgPC9zZWN0Mj4KKworIDxzZWN0MiBpZD0icGdwbGFuYWR2aWNlLWNvbmZpZy1wYXJhbXMi PgorICA8dGl0bGU+Q29uZmlndXJhdGlvbiBQYXJhbWV0ZXJzPC90aXRsZT4KKworICA8dmFyaWFi bGVsaXN0PgorCisgICA8dmFybGlzdGVudHJ5PgorICAgIDx0ZXJtPgorICAgICA8dmFybmFtZT5w Z19wbGFuX2FkdmljZS5hZHZpY2U8L3Zhcm5hbWU+ICg8dHlwZT5zdHJpbmc8L3R5cGU+KQorICAg ICA8aW5kZXh0ZXJtPgorICAgICAgPHByaW1hcnk+PHZhcm5hbWU+cGdfcGxhbl9hZHZpY2UuYWR2 aWNlPC92YXJuYW1lPiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcjwvcHJpbWFyeT4KKyAgICAgPC9p bmRleHRlcm0+CisgICAgPC90ZXJtPgorCisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAg ICAgIDx2YXJuYW1lPnBnX3BsYW5fYWR2aWNlLmFkdmljZTwvdmFybmFtZT4gaXMgYW4gYWR2aWNl IHN0cmluZyB0byBiZQorICAgICAgdXNlZCBkdXJpbmcgcXVlcnkgcGxhbm5pbmcuCisgICAgIDwv cGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisKKyAgIDx2YXJsaXN0 ZW50cnk+CisgICAgPHRlcm0+CisgICAgIDx2YXJuYW1lPnBnX3BsYW5fYWR2aWNlLmFsd2F5c19l eHBsYWluX3N1cHBsaWVkX2FkdmljZTwvdmFybmFtZT4gKDx0eXBlPmJvb2xlYW48L3R5cGU+KQor ICAgICA8aW5kZXh0ZXJtPgorICAgICAgPHByaW1hcnk+PHZhcm5hbWU+cGdfcGxhbl9hZHZpY2Uu YWx3YXlzX2V4cGxhaW5fc3VwcGxpZWRfYWR2aWNlPC92YXJuYW1lPiBjb25maWd1cmF0aW9uIHBh cmFtZXRlcjwvcHJpbWFyeT4KKyAgICAgPC9pbmRleHRlcm0+CisgICAgPC90ZXJtPgorCisgICAg PGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIDx2YXJuYW1lPnBnX3BsYW5fYWR2aWNlLmFs d2F5c19leHBsYWluX3N1cHBsaWVkX2FkdmljZTwvdmFybmFtZT4gY2F1c2VzCisgICAgICA8bGl0 ZXJhbD5FWFBMQUlOPC9saXRlcmFsPiB0byBhbHdheXMgc2hvdyBhbnkgc3VwcGxpZWQgYWR2aWNl IGFuZCB0aGUKKyAgICAgIGFzc29jaWF0ZWQKKyAgICAgIDxsaW5rIGxpbmtlbmQ9InBncGxhbmFk dmljZS1mZWVkYmFjayI+YWR2aWNlIGZlZWRiYWNrPC9saW5rPi4KKyAgICAgIFRoZSBkZWZhdWx0 IHZhbHVlIGlzIDxsaXRlcmFsPnRydWU8L2xpdGVyYWw+LiBJZiBzZXQgdG8KKyAgICAgIDxsaXRl cmFsPmZhbHNlPC9saXRlcmFsPiwgdGhpcyBpbmZvcm1hdGlvbiB3aWxsIGJlIGRpc3BsYXllZCBv bmx5IHdoZW4KKyAgICAgIDxsaXRlcmFsPkVYUExBSU4gKFBMQU5fQURWSUNFKTwvbGl0ZXJhbD4g aXMgdXNlZC4KKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRy eT4KKworICAgPHZhcmxpc3RlbnRyeT4KKyAgICA8dGVybT4KKyAgICAgPHZhcm5hbWU+cGdfcGxh bl9hZHZpY2UuYWx3YXlzX3N0b3JlX2FkdmljZV9kZXRhaWxzPC92YXJuYW1lPiAoPHR5cGU+Ym9v bGVhbjwvdHlwZT4pCisgICAgIDxpbmRleHRlcm0+CisgICAgICA8cHJpbWFyeT48dmFybmFtZT5w Z19wbGFuX2FkdmljZS5hbHdheXNfc3RvcmVfYWR2aWNlX2RldGFpbHM8L3Zhcm5hbWU+IGNvbmZp Z3VyYXRpb24gcGFyYW1ldGVyPC9wcmltYXJ5PgorICAgICA8L2luZGV4dGVybT4KKyAgICA8L3Rl cm0+CisKKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgPHZhcm5hbWU+cGdfcGxh bl9hZHZpY2UuYWx3YXlzX3N0b3JlX2FkdmljZV9kZXRhaWxzPC92YXJuYW1lPiBhbGxvd3MKKyAg ICAgIDxsaXRlcmFsPkVYUExBSU48L2xpdGVyYWw+IHRvIHNob3cgZGV0YWlscyByZWxhdGVkIHRv IHBsYW4gYWR2aWNlIGV2ZW4KKyAgICAgIHdoZW4gcHJlcGFyZWQgcXVlcmllcyBhcmUgdXNlZC4g VGhlIGRlZmF1bHQgdmFsdWUgaXMKKyAgICAgIDxsaXRlcmFsPmZhbHNlPC9saXRlcmFsPi4gV2hl biBwbGFubmluZyBhIHByZXBhcmVkIHF1ZXJ5LCBpdCBpcyBub3QKKyAgICAgIHBvc3NpYmxlIHRv IGtub3cgd2hldGhlciA8bGl0ZXJhbD5FWFBMQUlOPC9saXRlcmFsPiB3aWxsIGxhdGVyIGJlIHVz ZWQsCisgICAgICBzbyBieSBkZWZhdWx0LCB0byByZWR1Y2Ugb3ZlcmhlYWQsIDxsaXRlcmFsPnBn X3BsYW5fYWR2aWNlPC9saXRlcmFsPgorICAgICAgd2lsbCBub3QgZ2VuZXJhdGUgcGxhbiBhZHZp Y2Ugb3IgZmVlZGJhY2sgb24gc3VwcGxpZWQgYWR2aWNlLiBUaGlzIG1lYW5zCisgICAgICB0aGF0 IGlmIDxsaXRlcmFsPkVYUExBSU4gRVhFQ1VURTwvbGl0ZXJhbD4gaXMgdXNlZCBvbiB0aGUgcHJl cGFyZWQgcXVlcnksCisgICAgICBpdCB3aWxsIG5vdCBiZSBhYmxlIHRvIHNob3cgdGhpcyBpbmZv cm1hdGlvbi4gQ2hhbmdpbmcgdGhpcyBzZXR0aW5nIHRvCisgICAgICA8bGl0ZXJhbD50cnVlPC9s aXRlcmFsPiBhdm9pZHMgdGhpcyBwcm9ibGVtLCBidXQgYWRkcyBhZGRpdGlvbmFsCisgICAgICBv dmVyaGVhZC4gSXQgaXMgcHJvYmFibHkgYSBnb29kIGlkZWEgdG8gZW5hYmxlIHRoaXMgb3B0aW9u IG9ubHkgaW4KKyAgICAgIHNlc3Npb25zIHdoZXJlIGl0IGlzIG5lZWRlZCwgcmF0aGVyIHRoYW4g b24gYSBzeXN0ZW0td2lkZSBiYXNpcy4KKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+Cisg ICA8L3Zhcmxpc3RlbnRyeT4KKworICAgPHZhcmxpc3RlbnRyeT4KKyAgICA8dGVybT4KKyAgICAg PHZhcm5hbWU+cGdfcGxhbl9hZHZpY2UuZmVlZGJhY2tfd2FybmluZ3M8L3Zhcm5hbWU+ICg8dHlw ZT5ib29sZWFuPC90eXBlPikKKyAgICAgPGluZGV4dGVybT4KKyAgICAgIDxwcmltYXJ5Pjx2YXJu YW1lPnBnX3BsYW5fYWR2aWNlLmZlZWRiYWNrX3dhcm5pbmdzPC92YXJuYW1lPiBjb25maWd1cmF0 aW9uIHBhcmFtZXRlcjwvcHJpbWFyeT4KKyAgICAgPC9pbmRleHRlcm0+CisgICAgPC90ZXJtPgor CisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIFdoZW4gc2V0IHRvIHRydWUsIDx2 YXJuYW1lPnBnX3BsYW5fYWR2aWNlLmZlZWRiYWNrX3dhcm5pbmdzPC92YXJuYW1lPgorICAgICAg ZW1pdHMgYSB3YXJuaW5nIHdoZW5ldmVyIHN1cHBsaWVkIHBsYW4gYWR2aWNlIGlzIG5vdCBzdWNj ZXNzZnVsbHkKKyAgICAgIGVuZm9yY2VkLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8bGl0ZXJhbD5m YWxzZTwvbGl0ZXJhbD4uCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgPC92YXJs aXN0ZW50cnk+CisKKyAgIDx2YXJsaXN0ZW50cnk+CisgICAgPHRlcm0+CisgICAgIDx2YXJuYW1l PnBnX3BsYW5fYWR2aWNlLnRyYWNlX21hc2s8L3Zhcm5hbWU+ICg8dHlwZT5ib29sZWFuPC90eXBl PikKKyAgICAgPGluZGV4dGVybT4KKyAgICAgIDxwcmltYXJ5Pjx2YXJuYW1lPnBnX3BsYW5fYWR2 aWNlLnRyYWNlX21hc2s8L3Zhcm5hbWU+IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyPC9wcmltYXJ5 PgorICAgICA8L2luZGV4dGVybT4KKyAgICA8L3Rlcm0+CisKKyAgICA8bGlzdGl0ZW0+CisgICAg IDxwYXJhPgorICAgICAgV2hlbiA8dmFybmFtZT5wZ19wbGFuX2FkdmljZS50cmFjZV9tYXNrPC92 YXJuYW1lPiBpcworICAgICAgPGxpdGVyYWw+dHJ1ZTwvbGl0ZXJhbD4sIDxsaXRlcmFsPnBnX3Bs YW5fYWR2aWNlPC9saXRlcmFsPiB3aWxsIHByaW50CisgICAgICBtZXNzYWdlcyBkdXJpbmcgcXVl cnkgcGxhbm5pbmcgZWFjaCB0aW1lIHRoYXQKKyAgICAgIDxsaXRlcmFsPnBnX3BsYW5fYWR2aWNl PC9saXRlcmFsPiBhbHRlcnMgdGhlIG1hc2sgb2YgYWxsb3dhYmxlIHF1ZXJ5CisgICAgICBwbGFu IHR5cGVzIGluIHJlc3BvbnNlIHRvIHN1cHBsaWVkIHBsYW4gYWR2aWNlLiBUaGUgZGVmYXVsdCB2 YWx1ZSBpcworICAgICAgPGxpdGVyYWw+ZmFsc2U8L2xpdGVyYWw+LiBUaGUgbWVzc2FnZXMgcHJp bnRlZCBieSB0aGlzIHNldHRpbmcgYXJlIG5vdAorICAgICAgZXhwZWN0ZWQgdG8gYmUgdXNlZnVs IGV4Y2VwdCBmb3IgcHVycG9zZXMgb2YgZGVidWdnaW5nIHRoaXMgbW9kdWxlLgorICAgICA8L3Bh cmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCisgIDwvdmFyaWFibGVs aXN0PgorCisgPC9zZWN0Mj4KKworIDxzZWN0MiBpZD0icGdwbGFuYWR2aWNlLWxpbWl0YXRpb25z Ij4KKyAgPHRpdGxlPkxpbWl0YXRpb25zPC90aXRsZT4KKworICA8cGFyYT4KKyAgIEl0IGlzIGN1 cnJlbnRseSBub3QgcG9zc2libGUgdG8gY29udHJvbCBhbnkgYXNwZWN0IG9mIHRoZSBwbGFubmVy J3MgYmVoYXZpb3IKKyAgIHdpdGggcmVzcGVjdCB0byBhZ2dyZWdhdGlvbi4gVGhpcyBpbmNsdWRl cyBib3RoIHdoZXRoZXIgYWdncmVnYXRlcyBhcmUKKyAgIGNvbXB1dGVkIGJ5IHNvcnRpbmcgb3Ig aGFzaGluZywgYW5kIGFsc28gd2hldGhlciBzdHJhdGVnaWVzIHN1Y2ggYXMKKyAgIDxsaW5rIGxp bmtlbmQ9Imd1Yy1lbmFibGUtZWFnZXItYWdncmVnYXRlIj5lYWdlciBhZ2dyZWdhdGlvbjwvbGlu az4gb3IKKyAgIDxsaW5rIGxpbmtlbmQ9Imd1Yy1lbmFibGUtcGFydGl0aW9ud2lzZS1hZ2dyZWdh dGUiPnBhcnRpdGlvbndpc2UKKyAgIGFnZ3JlZ2F0aW9uPC9saW5rPiBhcmUgdXNlZC4KKyAgPC9w YXJhPgorCisgIDxwYXJhPgorICAgSXQgYWxzbyBpcyBjdXJyZW50bHkgbm90IHBvc3NpYmxlIHRv IGNvbnRyb2wgYW55IGFzcGVjdCBvZiB0aGUgcGxhbm5lcidzCisgICBiZWhhdmlvciB3aXRoIHJl c3BlY3QgdG8gc2V0IG9wZXJhdGlvbnMgc3VjaCBhcyA8bGl0ZXJhbD5VTklPTjwvbGl0ZXJhbD4K KyAgIG9yIDxsaXRlcmFsPklOVEVSU0VDVDwvbGl0ZXJhbD4uCisgIDwvcGFyYT4KKworICA8cGFy YT4KKyAgIEFzIGRpc2N1c3NlZCBhYm92ZSB1bmRlciA8bGluayBsaW5rZW5kPSJwZ3BsYW5hZHZp Y2UtaG93LWl0LXdvcmtzIj5Ib3cKKyAgIEl0IFdvcmtzPC9saW5rPiwgdGhlIHVzZSBvZiBwbGFu IGFkdmljZSBjYW4gb25seSBhZmZlY3Qgd2hpY2ggcGxhbgorICAgdGhlIHBsYW5uZXIgY2hvb3Nl cyBmcm9tIGFtb25nIHRob3NlIGl0IGJlbGlldmVzIHRvIGJlIHZpYWJsZS4gSXQgY2FuIG5ldmVy CisgICBmb3JjZSB0aGUgY2hvaWNlIG9mIGEgcGxhbiB3aGljaCB0aGUgcGxhbm5lciByZWZ1c2Vk IHRvIGNvbnNpZGVyIGluIHRoZQorICAgZmlyc3QgcGxhY2UuCisgIDwvcGFyYT4KKyA8L3NlY3Qy PgorCisgPHNlY3QyIGlkPSJwZ3BsYW5hZHZpY2UtYXV0aG9yIj4KKyAgPHRpdGxlPkF1dGhvcjwv dGl0bGU+CisKKyAgPHBhcmE+CisgICBSb2JlcnQgSGFhcyA8ZW1haWw+cmhhYXNAcG9zdGdyZXNx bC5vcmc8L2VtYWlsPgorICA8L3BhcmE+CisgPC9zZWN0Mj4KKworPC9zZWN0MT4KZGlmZiAtLWdp dCBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50 L3R5cGVkZWZzLmxpc3QKaW5kZXggMzI1MDU2NGQ0ZmYuLmU0YmEwMTQ2ZmZiIDEwMDY0NAotLS0g YS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMvdG9vbHMvcGdpbmRl bnQvdHlwZWRlZnMubGlzdApAQCAtMzk4NCw2ICszOTg0LDM5IEBAIHBnX3V1aWRfdAogcGdfd2No YXIKIHBnX3djaGFyX3RibAogcGdwX2FybW9yX2hlYWRlcnNfc3RhdGUKK3BncGFfYWR2aWNlX2l0 ZW0KK3BncGFfYWR2aWNlX3RhZ190eXBlCitwZ3BhX2FkdmljZV90YXJnZXQKK3BncGFfaWRlbnRp ZmllcgorcGdwYV9pbmRleF90YXJnZXQKK3BncGFfaW5kZXhfdHlwZQorcGdwYV9pdG1fdHlwZQor cGdwYV9qb19vdXRjb21lCitwZ3BhX2pvaW5fY2xhc3MKK3BncGFfam9pbl9tZW1iZXIKK3BncGFf am9pbl9zdGF0ZQorcGdwYV9qb2luX3N0cmF0ZWd5CitwZ3BhX2pvaW5fdW5yb2xsZXIKK3BncGFf b3V0cHV0X2NvbnRleHQKK3BncGFfcGxhbl93YWxrZXJfY29udGV4dAorcGdwYV9wbGFubmVyX3N0 YXRlCitwZ3BhX3FmX3R5cGUKK3BncGFfcXVlcnlfZmVhdHVyZQorcGdwYV9yaV9jaGVja2VyCitw Z3BhX3JpX2NoZWNrZXJfa2V5CitwZ3BhX3NjYW4KK3BncGFfc2Nhbl9zdHJhdGVneQorcGdwYV9z al91bmlxdWVfcmVsCitwZ3BhX3RhcmdldF90eXBlCitwZ3BhX3Ryb3ZlCitwZ3BhX3Ryb3ZlX2Vu dHJ5CitwZ3BhX3Ryb3ZlX2VudHJ5X2VsZW1lbnQKK3BncGFfdHJvdmVfZW50cnlfaGFzaAorcGdw YV90cm92ZV9lbnRyeV9rZXkKK3BncGFfdHJvdmVfbG9va3VwX3R5cGUKK3BncGFfdHJvdmVfcmVz dWx0CitwZ3BhX3Ryb3ZlX3NsaWNlCitwZ3BhX3Vucm9sbGVkX2pvaW4KIHBnc29ja2V0CiBwZ3Nx bF90aGluZ190CiBwZ3NzRW50cnkKLS0gCjIuNTEuMAoK --0000000000007beb40064cacb69d--