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 1vpwo6-001iWL-1c for pgsql-hackers@arkaria.postgresql.org; Tue, 10 Feb 2026 23:06:12 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vpwo4-001PUC-27 for pgsql-hackers@arkaria.postgresql.org; Tue, 10 Feb 2026 23:06:09 +0000 Received: from makus.postgresql.org ([72.32.157.229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vpwo3-001PTu-0x for pgsql-hackers@lists.postgresql.org; Tue, 10 Feb 2026 23:06:08 +0000 Received: from mail-ej1-x62d.google.com ([2a00:1450:4864:20::62d]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1vpwlp-000000002Bj-1wZb for pgsql-hackers@lists.postgresql.org; Tue, 10 Feb 2026 23:03:52 +0000 Received: by mail-ej1-x62d.google.com with SMTP id a640c23a62f3a-b8870ac4c4eso739763266b.2 for ; Tue, 10 Feb 2026 15:03:50 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1770764627; cv=none; d=google.com; s=arc-20240605; b=XxG1Uj+TRiyfsJDSrgJdPVr+A0EL1uNdzm++n5yR8C6yf0OQmea0swAWmSk3aJCpQr TRLxH6RHLyH2xcygYRbk5Li/ojeGVV9xI8hDnQNAAcmTjfBnu/RPp1QcUYKiTgDw5fSR hsKDmRiJz5jbYd9u9lRHxdZOqg4Lf+PdphkgbeQBK9UFgXAFkWCtVGTxgAg3w8686YS0 DmwVNeWC4YQVW/07xcOgrWbFfRqvsGcm+JTeXkopNCwaqdCCmlUbbImHKJCY8oK6TreG Ah8XW+FHfOHhf91lfTO7r2xyRTqCnvJ0WsSA5bUqP/h4zBxdViwjyhBgP43EPlgnKEEe LAIQ== 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=Wed8zEjN07sMzvZ2P5cljCMb+EDoEQ8hKyA3e+ExpNE=; fh=LxtW8DjeoE8l6lkO9yZ5xeu30GhmCk1nulLclE5RSFM=; b=JHSAJ8AoAu969BfgUSyP2etO8yhSZ+hjMV3e6srrFclm+UqFoxL6zQjbAEPQCaeSJi CxIXfhj+Fz3t3FBxqbWJB1CuCKLRmU0SYUJjHA7hj5l0t+Ia49O1SmZin0FeDWpJKNlT yyj6Zbo3dV1hLyf/wyBH9xR+v3OAV2Vnvilqb3wGJ6kGVHCAdgQJl0gV9002RHMTIku2 9OgIjxG1xsv3NPb70JujtC0CW6iGcBhDmu9ftJrKt2FswZuV5OvYnBZx2GWU54DiZ1Oj EPZVW1/4xBtGf8ujEs28N5Dyhmw9Mh2eNs2I0LZAPLFsT3PIwTLT+XVPk4+e0NVfn6b3 WIwA==; 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=1770764627; x=1771369427; 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=Wed8zEjN07sMzvZ2P5cljCMb+EDoEQ8hKyA3e+ExpNE=; b=OpobkXO/5sOyATblBeFlCA0e7wMb2C1ry1jBl1ykXGFLmwBJ1WoJW8cvOCjMJ2fHym z/suYdmOR4EpMKEGhs3667HYUIoyxJi/SxwXUYGzAMPpj98jp37g8/O4AgPjhutOan/o 2BEq3Qn/pWx0pkmVBS/T+z21Y3XAsjOV/d34j+3F0SqcDaB27yNeiERhJ5rKz3sVROyh vtMcgJq/D/Ffst+vaHZIvDiVaLrl2xPtBbQCdr4Po3YSffFUiXD7JZg/GoK4Vjaw6NoG Nv4xuXeDCOlTz6LVzunUFwpf1YjQrq83bCWPNTP2b8DJ//LNqxpBWFxFpG8O+aEoPI7s 2iHQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1770764627; x=1771369427; 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=Wed8zEjN07sMzvZ2P5cljCMb+EDoEQ8hKyA3e+ExpNE=; b=HEU8qRhBpASVUNbf8Um31cyIGXY142E4QiSEWDeKEGgJA8XEmUTco3GcIl/6bokB0M T956Omq/2Hv5W10LURBgDxKF/0QF2U5U9jqw53qacvbFB6tlP3mTadXU3qndaedduE+D z9JUxiBhrfzsqHAnmZGRUTZEBeQfKXyhJ7xIW76+61laCq6JdMWsG4FncvG3TrVLsEGi cIb7Qab58981a24ISdEbpN1DTq6azfvWaW+f74/60FBDBjpDiWX7fV9wnAGy3WMozDEB 3d73zoe8bqJUTDCve87yA/4eAKSWzDrOgeMXDOWPFkny4TL7noaWgxC2o6M4ZhASPUGx Ha7Q== X-Forwarded-Encrypted: i=1; AJvYcCVrQKPBHqhedFB8cV+FxYjN773POCb+A/AjPcJ4gUfjBa4EWvML+qEHWq1IwmyYfiWmnwan4vYlJbocNqw3@lists.postgresql.org X-Gm-Message-State: AOJu0YxfssCM0cCkgbzQTrrx2++hhQre1nb3VwRpC0ZNUysy34UIM/vq sq8IM8UmP+wUnXhSjooXTvdSzdOtlZM82Qk/5MpeXpKvIgfy93Zb/Lfwi23uRD9zBT8SksXGLsr sVVJfYlJr1MEDzUwjTgkCPltAJc22DpU= X-Gm-Gg: AZuq6aI4e05xvfO3WDRraJyr5CGD73mbwVDHHz0d7PwjLCs64pCXayvCBBc7+MXbcVu GI5ud1MQcQhnOiKsyxSPc3ju52kSM7nolZn/u32+gpdXFbsFdFep3XjlIYwgUqUz/7/riZXN73t fP5iHyHQWqcDGSxwKm3Ni35Uz0nXnF9pCPJkqRUCqnXP26I7oc/4rxksEbe4LWnsXLes9FG9xwx ZS6rtz9lBLR3xrmwsoP+yqjhTkRzmMliF9aQu1Iuy6QSy39tFnuY9B2wX4iQJEElbiziADCBopc z7LPbjyCfgO+BGlbxZLluF4OvSlc6WQYVlLltHo= X-Received: by 2002:a17:906:7308:b0:b87:17df:4d65 with SMTP id a640c23a62f3a-b8f6ae6abe5mr51166766b.51.1770764627247; Tue, 10 Feb 2026 15:03:47 -0800 (PST) MIME-Version: 1.0 References: <1136161.1769654478@sss.pgh.pa.us> In-Reply-To: From: Robert Haas Date: Tue, 10 Feb 2026 18:03:34 -0500 X-Gm-Features: AZwV_Qh1oUWM2U3b0alCuhXITDcHcLCQUAuab8RJySvVJ9j5NmmSrZghbSRrMJ8 Message-ID: Subject: Re: pg_plan_advice To: Alexandra Wang Cc: Richard Guo , Lukas Fittl , Tom Lane , Jacob Champion , Dian Fay , Matheus Alcantara , Jakub Wartak , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="00000000000096d31c064a804400" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000096d31c064a804400 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Mon, Feb 9, 2026 at 10:55=E2=80=AFAM Alexandra Wang wrote: > On Sat, Feb 7, 2026 at 9:38=E2=80=AFAM Robert Haas wrote: > > Here is a new patch set (v14). > > Thanks for the patches! 0003 - 0005 look good to me. I have committed those, as well as 0001 and 0002. Here's v15. The main patch is now 0002, and has the following changes since the last version: - Added a new GUC pg_plan_advice.feedback_warnings, disabled by default, which can be set to true to produce a warning about plan advice strings that aren't fully working. (Previously, you had to use EXPLAIN to get this information.) - Use get_namespace_name_or_temp, rather than get_name_namespace, consistently. One use of the latter function crept in, breaking INDEX_SCAN and INDEX_ONLY_SCAN advice for temporary tables. - Fix a problem in pgpa_scan.c that could cause spurious NO_GATHER advice to be generated in certain situations, such as when joins were proven empty. - Fix a logic error in the handling of JOIN_ORDER advice that could cause it to be marked as conflicting with PARTITIONWISE advice when that was not in reality the case. - Incorporate documentation corrections from David G. Johnston. I didn't take all of his suggestions, but I took many of them, sometimes with some additional wordsmithing on my part. - Remove a stray comment. Also a reminder that 0003 and 0004 (previously 0008 and 0009) don't properly belong to this thread, but I've included them here because otherwise the tests in the last patch don't pass. See http://postgr.es/m/CA+TgmobRufbUSksBoxytGJS1P+mQY4rWctCk-d0iAUO6-k9Wrg@mail= .gmail.com for discussion of those patches. --=20 Robert Haas EDB: http://www.enterprisedb.com --00000000000096d31c064a804400 Content-Type: application/octet-stream; name="v15-0003-Fix-add_partial_path-interaction-with-disabled_n.patch" Content-Disposition: attachment; filename="v15-0003-Fix-add_partial_path-interaction-with-disabled_n.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mlh7d8kx2 RnJvbSBkOTRjMjk0MjdlOTUzOWI3MjYxOWU1ZGM3MjBlNDQxNzQ0NGNjMWVjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IFRodSwgNSBGZWIgMjAyNiAxNToyMzozNiAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjE1IDMv NV0gRml4IGFkZF9wYXJ0aWFsX3BhdGggaW50ZXJhY3Rpb24gd2l0aCBkaXNhYmxlZF9ub2RlcwoK Q29tbWl0IGUyMjI1MzQ2Nzk0MmZkYjEwMDA4Nzc4N2MzZTFlM2E4NjIwYzU0YjIgYWRqdXN0ZWQg dGhlIGxvZ2ljIGluCmFkZF9wYXRoKCkgdG8ga2VlcCB0aGUgcGF0aCBsaXN0IHNvcnRlZCBieSBk aXNhYmxlZF9ub2RlcyBhbmQgdGhlbiBieQp0b3RhbF9jb3N0LCBidXQgZmFpbGVkIHRvIG1ha2Ug dGhlIGNvcnJlc3BvbmRpbmcgYWRqdXN0bWVudCB0bwphZGRfcGFydGlhbF9wYXRoLiBBcyBhIHJl c3VsdCwgYWRkX3BhcnRpYWxfcGF0aCBtaWdodCBzb3J0IHRoZSBwYXRoIGxpc3QKanVzdCBieSB0 b3RhbCBjb3N0LCB3aGljaCBjb3VsZCBsZWFkIHRvIGxhdGVyIHBsYW5uZXIgbWlzYmVoYXZpb3Iu CgpJbiBwcmluY2lwbGUsIHRoaXMgc2hvdWxkIGJlIGJhY2stcGF0Y2hlZCB0byB2MTgsIGJ1dCB3 ZSBhcmUgdHlwaWNhbGx5CnJlbHVjdGFudCB0byBiYWNrLXBhdGNoIHBsYW5uZXIgZml4ZXMgZm9y IGZlYXIgb2YgZGVzdGFiaWxpemluZyB3b3JraW5nCmluc3RhbGxhdGlvbnMsIGFuZCBpdCBpcyB1 bmNsZWFyIHRvIG1lIHRoYXQgdGhpcyBoYXMgc3VmZmljaWVudGx5CnNlcmlvdXMgY29uc2VxdWVu Y2VzIHRvIGp1c3RpZnkgYW4gZXhjZXB0aW9uLCBzbyBmb3Igbm93LCBubyBiYWNrLXBhdGNoLgot LS0KIHNyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BhdGhub2RlLmMgfCA5ICsrKysrKystLQog MSBmaWxlIGNoYW5nZWQsIDcgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wYXRobm9kZS5jIGIvc3JjL2JhY2tlbmQv b3B0aW1pemVyL3V0aWwvcGF0aG5vZGUuYwppbmRleCA4MjkyOTViM2FmZS4uODc1NzY0YWJkYmUg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BhdGhub2RlLmMKKysrIGIv c3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGF0aG5vZGUuYwpAQCAtODc4LDggKzg3OCwxMyBA QCBhZGRfcGFydGlhbF9wYXRoKFJlbE9wdEluZm8gKnBhcmVudF9yZWwsIFBhdGggKm5ld19wYXRo KQogCQl9CiAJCWVsc2UKIAkJewotCQkJLyogbmV3IGJlbG9uZ3MgYWZ0ZXIgdGhpcyBvbGQgcGF0 aCBpZiBpdCBoYXMgY29zdCA+PSBvbGQncyAqLwotCQkJaWYgKG5ld19wYXRoLT50b3RhbF9jb3N0 ID49IG9sZF9wYXRoLT50b3RhbF9jb3N0KQorCQkJLyoKKwkJCSAqIG5ldyBiZWxvbmdzIGFmdGVy IHRoaXMgb2xkIHBhdGggaWYgaXQgaGFzIG1vcmUgZGlzYWJsZWQgbm9kZXMKKwkJCSAqIG9yIGlm IGl0IGhhcyB0aGUgc2FtZSBudW1iZXIgb2Ygbm9kZXMgYnV0IGEgZ3JlYXRlciB0b3RhbCBjb3N0 CisJCQkgKi8KKwkJCWlmIChuZXdfcGF0aC0+ZGlzYWJsZWRfbm9kZXMgPiBvbGRfcGF0aC0+ZGlz YWJsZWRfbm9kZXMgfHwKKwkJCQkobmV3X3BhdGgtPmRpc2FibGVkX25vZGVzID09IG9sZF9wYXRo LT5kaXNhYmxlZF9ub2RlcyAmJgorCQkJCSBuZXdfcGF0aC0+dG90YWxfY29zdCA+PSBvbGRfcGF0 aC0+dG90YWxfY29zdCkpCiAJCQkJaW5zZXJ0X2F0ID0gZm9yZWFjaF9jdXJyZW50X2luZGV4KHAx KSArIDE7CiAJCX0KIAotLSAKMi41MS4wCgo= --00000000000096d31c064a804400 Content-Type: application/octet-stream; name="v15-0001-Allow-extensions-to-mark-an-individual-index-as-.patch" Content-Disposition: attachment; filename="v15-0001-Allow-extensions-to-mark-an-individual-index-as-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mlh7d8km0 RnJvbSA4NjQyOWEwMTU0NTNhN2UyNDNkOTJhODhiY2Q5NWIxNWJiMGJmNTE0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IFNhdCwgNyBGZWIgMjAyNiAwODoxNDo0MyAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjE1IDEv NV0gQWxsb3cgZXh0ZW5zaW9ucyB0byBtYXJrIGFuIGluZGl2aWR1YWwgaW5kZXggYXMKIGRpc2Fi bGVkLgoKVXAgdW50aWwgbm93LCB0aGUgb25seSB3YXkgZm9yIGEgbG9hZGFibGUgbW9kdWxlIHRv IGRpc2FibGUgdGhlIHVzZSBvZiBhCnBhcnRpY3VsYXIgaW5kZXggd2FzIHRvIHVzZSBnZXRfcmVs YXRpb25faW5mb19ob29rIHRvIHJlbW92ZSBpdCBmcm9tIHRoZQppbmRleCBsaXN0LiBXaGlsZSB0 aGF0IHdvcmtzLCBpdCBoYXMgc29tZSBkaXNhZHZhbnRhZ2VzLiBGaXJzdCwgdGhlCmluZGV4IGJl Y29tZXMgaW52aXNpYmxlIGZvciBhbGwgcHVycG9zZXMsIGFuZCBjYW4gbm8gbG9uZ2VyIGJlIHVz ZWQgZm9yCm9wdGltaXphdGlvbnMgc3VjaCBhcyBzZWxmLWpvaW4gZWxpbWluYXRpb24gb3IgbGVm dCBqb2luIHJlbW92YWwsIHdoaWNoCmNhbiBzZXZlcmVseSBkZWdyYWRlIHRoZSByZXN1bHRpbmcg cGxhbi4KClNlY29uZCwgaWYgdGhlIG1vZHVsZSBhdHRlbXB0cyB0byBjb21wZWwgdGhlIHVzZSBv ZiBhIGNlcnRhaW4gaW5kZXgKYnkgcmVtb3ZpbmcgYWxsIG90aGVyIGluZGV4ZXMgZnJvbSB0aGUg aW5kZXggbGlzdCBhbmQgZGlzYWJsaW5nCm90aGVyIHNjYW4gdHlwZXMsIGJ1dCB0aGUgcGxhbm5l ciBpcyB1bmFibGUgdG8gdXNlIHRoZSBjaG9zZW4gaW5kZXgKZm9yIHNvbWUgcmVhc29uLCBpdCB3 aWxsIGZhbGwgYmFjayB0byBhIHNlcXVlbnRpYWwgc2NhbiwgYmVjYXVzZSB0aGF0CmlzIG9ubHkg ZGlzYWJsZWQsIHdoZXJlYXMgdGhlIG90aGVyIGluZGV4ZXMgYXJlLCBmcm9tIHRoZSBwbGFubmVy J3MKcG9pbnQgb2YgdmlldywgY29tcGxldGVseSBnb25lLiBXaGlsZSB0aGlzIHNpdHVhdGlvbiBp ZGVhbGx5IHNob3VsZG4ndApvY2N1ciwgaXQncyBoYXJkIGZvciBhIGxvYWRhYmxlIG1vZHVsZSB0 byBiZSBjb21wbGV0ZWx5IHN1cmUgd2hldGhlcgp0aGUgcGxhbm5lciB3aWxsIHZpZXcgYSBjZXJ0 YWluIGluZGV4IGFzIHVzYWJsZSBmb3IgYSBjZXJ0YWluIHF1ZXJ5LgpJZiBpdCBpc24ndCwgaXQn cyBtb3JlIGRlc2lyYWJsZSB0byBmYWxsIGJhY2sgdG8gdGhlIG5leHQtY2hlYXBlc3QKcGxhbiB0 aGFuIHRvIGJlIGZvcmNlZCBpbnRvIGEgc2VxdWVudGlhbCBzY2FuLgotLS0KIHNyYy9iYWNrZW5k L29wdGltaXplci91dGlsL3BhdGhub2RlLmMgfCA4ICsrKysrKysrCiBzcmMvaW5jbHVkZS9ub2Rl cy9wYXRobm9kZXMuaCAgICAgICAgIHwgMiArKwogMiBmaWxlcyBjaGFuZ2VkLCAxMCBpbnNlcnRp b25zKCspCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGF0aG5vZGUu YyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BhdGhub2RlLmMKaW5kZXggOTY3OGMyMGZm MWYuLjgyOTI5NWIzYWZlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9w YXRobm9kZS5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BhdGhub2RlLmMKQEAg LTEwNzcsNiArMTA3NywxNCBAQCBjcmVhdGVfaW5kZXhfcGF0aChQbGFubmVySW5mbyAqcm9vdCwK IAogCWNvc3RfaW5kZXgocGF0aG5vZGUsIHJvb3QsIGxvb3BfY291bnQsIHBhcnRpYWxfcGF0aCk7 CiAKKwkvKgorCSAqIGNvc3RfaW5kZXggd2lsbCBzZXQgZGlzYWJsZWRfbm9kZXMgdG8gMSBpZiB0 aGlzIHJlbCBpcyBub3QgYWxsb3dlZCB0bworCSAqIHVzZSBpbmRleCBzY2FucyBpbiBnZW5lcmFs LCBidXQgaXQgZG9lc24ndCBoYXZlIHRoZSBJbmRleE9wdEluZm8gdG8KKwkgKiBrbm93IHdoZXRo ZXIgdGhpcyBzcGVjaWZpYyBpbmRleCBoYXMgYmVlbiBkaXNhYmxlZC4KKwkgKi8KKwlpZiAoaW5k ZXgtPmRpc2FibGVkKQorCQlwYXRobm9kZS0+cGF0aC5kaXNhYmxlZF9ub2RlcyA9IDE7CisKIAly ZXR1cm4gcGF0aG5vZGU7CiB9CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhu b2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKaW5kZXggYzE3NWVlOTViNjgu LjI3NzU4ZWMxNmZlIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaAor KysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaApAQCAtMTQxMiw2ICsxNDEyLDggQEAg dHlwZWRlZiBzdHJ1Y3QgSW5kZXhPcHRJbmZvCiAJYm9vbAkJbnVsbHNub3RkaXN0aW5jdDsKIAkv KiBpcyB1bmlxdWVuZXNzIGVuZm9yY2VkIGltbWVkaWF0ZWx5PyAqLwogCWJvb2wJCWltbWVkaWF0 ZTsKKwkvKiB0cnVlIGlmIHBhdGhzIHVzaW5nIHRoaXMgaW5kZXggc2hvdWxkIGJlIG1hcmtlZCBk aXNhYmxlZCAqLworCWJvb2wJCWRpc2FibGVkOwogCS8qIHRydWUgaWYgaW5kZXggZG9lc24ndCBy ZWFsbHkgZXhpc3QgKi8KIAlib29sCQloeXBvdGhldGljYWw7CiAKLS0gCjIuNTEuMAoK --00000000000096d31c064a804400 Content-Type: application/octet-stream; name="v15-0004-Consider-startup-cost-as-a-figure-of-merit-for-p.patch" Content-Disposition: attachment; filename="v15-0004-Consider-startup-cost-as-a-figure-of-merit-for-p.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mlh7d8kz3 RnJvbSBkOTRkODNlZTVmNjg4ZGYxYjEzMThmYjRlY2NlZTUwZGJhMmU2Y2U4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IEZyaSwgNiBGZWIgMjAyNiAxNDo1MToyMyAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjE1IDQv NV0gQ29uc2lkZXIgc3RhcnR1cCBjb3N0IGFzIGEgZmlndXJlIG9mIG1lcml0IGZvcgogcGFydGlh bCBwYXRocy4KClByZXZpb3VzbHksIHRoZSBjb21lbnRzIHN0YXRlZCB0aGF0IHRoZXJlIHdhcyBu byBwdXJwb3NlIHRvIGNvbnNpZGVyaW5nCnN0YXJ0dXAgY29zdCBmb3IgcGFydGlhbCBwYXRocywg YnV0IHRoaXMgaXMgbm90IHRoZSBjYXNlOiBpdCdzIHBlcmZlY3RseQpyZWFzb25hYmxlIHRvIHdh bnQgYSBmYXN0LXN0YXJ0IHBhdGggZm9yIGEgcGxhbiB0aGF0IGludm9sdmVzIGEgTElNSVQKKHBl cmhhcHMgb3ZlciBhbiBhZ2dyZWdhdGUsIHNvIHRoYXQgdGhlcmUgaXMgZW5vdWdoIGRhdGEgYmVp bmcgcHJvY2Vzc2VkCnRvIGp1c3RpZnkgcGFyYWxsZWwgcXVlcnkgYnV0IHlldCB3ZSBkb24ndCB3 YW50IGFsbCB0aGUgcmVzdWx0IHJvd3MpLgoKQWNjb3JkaW5nbHksIHJld3JpdGUgYWRkX3BhcnRp YWxfcGF0aCBhbmQgYWRkX3BhcnRpYWxfcGF0aF9wcmVjaGVjayB0bwpjb25zaWRlciBzdGFydHVw IGNvc3RzLiBUaGlzIGFsc28gZml4ZXMgYW4gaW5kZXBlbmRlbnQgYnVnIGluCmFkZF9wYXJ0aWFs X3BhdGhfcHJlY2hlY2s6IGNvbW1pdCBlMjIyNTM0Njc5NDJmZGIxMDAwODc3ODdjM2UxZTNhODYy MGM1NGIyCmZhaWxlZCB0byB1cGRhdGUgaXQgdG8gZG8gYW55dGhpbmcgd2l0aCB0aGUgbmV3IGRp c2FibGVkX25vZGVzIGZpZWxkLgpUaGF0IGJ1ZyBmaXggaXMgZm9ybWFsbHkgc2VwYXJhdGUgZnJv bSB0aGUgcmVzdCBvZiB0aGlzIHBhdGNoIGFuZCBjb3VsZApiZSBjb21taXR0ZWQgc2VwYXJhdGVs eSwgYnV0IEkgdGhpbmsgaXQgbWFrZXMgbW9yZSBzZW5zZSB0byBmaXggYm90aAppc3N1ZXMgdG9n ZXRoZXIsIGJlY2F1c2UgdGhlbiB3ZSBjYW4gKGFzIHRoaXMgY29tbWl0IGRvZXMpIGp1c3QgbWFr ZQphZGRfcGFydGlhbF9wYXRoX3ByZWNoZWNrIGRvIHRoZSBjb3N0IGNvbXBhcmlzb25zIGluIHRo ZSBzYW1lIHdheSBhcwpjb21wYXJlX3BhdGhfY29zdHNfZnV6emlseSwgd2hpY2ggaG9wZWZ1bGx5 IHJlZHVjZXMgdGhlIGNoYW5jZXMgb2YKZW5kaW5nIHVwIHdpdGggc29tZXRoaW5nIHRoYXQncyBz dGlsbCBpbmNvcnJlY3QuCgpUaGlzIHBhdGNoIGlzIGJhc2VkIG9uIGVhcmxpZXIgd29yayBvbiB0 aGlzIHRvcGljIGJ5IFRvbWFzIFZvbmRyYSwKYnV0IEkgaGF2ZSByZXdyaXR0ZW4gYSBncmVhdCBk ZWFsIG9mIGl0LgoKQ28tYXV0aG9yZWQtYnk6IFJvYmVydCBIYWFzIDxyaGFhc0Bwb3N0Z3Jlc3Fs Lm9yZz4KQ28tYXV0aG9yZWQtYnk6IFRvbWFzIFZvbmRyYSA8dG9tYXNAdm9uZHJhLm1lPgotLS0K IHNyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2pvaW5wYXRoLmMgICAgICAgICB8ICAgMyArCiBz cmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wYXRobm9kZS5jICAgICAgICAgfCAxNTkgKysrKysr KysrKystLS0tLS0tCiBzcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aG5vZGUuaCAgICAgICAgICAg ICAgfCAgIDIgKy0KIC4uLi9yZWdyZXNzL2V4cGVjdGVkL2luY3JlbWVudGFsX3NvcnQub3V0ICAg ICB8ICAxOCArLQogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9qb2luX2hhc2gub3V0ICAgICAg IHwgIDEzICstCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9qb2luX2hhc2guc3FsICAgICAgICAgICAg fCAgMTAgKy0KIDYgZmlsZXMgY2hhbmdlZCwgMTIyIGluc2VydGlvbnMoKyksIDgzIGRlbGV0aW9u cygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2pvaW5wYXRoLmMg Yi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9qb2lucGF0aC5jCmluZGV4IGUwYzAwZTI2ZGQ1 Li4wNDQ1NjBkYTdiZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvam9p bnBhdGguYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9qb2lucGF0aC5jCkBAIC0x MDQ4LDYgKzEwNDgsNyBAQCB0cnlfcGFydGlhbF9uZXN0bG9vcF9wYXRoKFBsYW5uZXJJbmZvICpy b290LAogCWluaXRpYWxfY29zdF9uZXN0bG9vcChyb290LCAmd29ya3NwYWNlLCBqb2ludHlwZSwg bmVzdGxvb3Bfc3VidHlwZSwKIAkJCQkJCSAgb3V0ZXJfcGF0aCwgaW5uZXJfcGF0aCwgZXh0cmEp OwogCWlmICghYWRkX3BhcnRpYWxfcGF0aF9wcmVjaGVjayhqb2lucmVsLCB3b3Jrc3BhY2UuZGlz YWJsZWRfbm9kZXMsCisJCQkJCQkJCSAgIHdvcmtzcGFjZS5zdGFydHVwX2Nvc3QsCiAJCQkJCQkJ CSAgIHdvcmtzcGFjZS50b3RhbF9jb3N0LCBwYXRoa2V5cykpCiAJCXJldHVybjsKIApAQCAtMTIz Nyw2ICsxMjM4LDcgQEAgdHJ5X3BhcnRpYWxfbWVyZ2Vqb2luX3BhdGgoUGxhbm5lckluZm8gKnJv b3QsCiAJCQkJCQkgICBleHRyYSk7CiAKIAlpZiAoIWFkZF9wYXJ0aWFsX3BhdGhfcHJlY2hlY2so am9pbnJlbCwgd29ya3NwYWNlLmRpc2FibGVkX25vZGVzLAorCQkJCQkJCQkgICB3b3Jrc3BhY2Uu c3RhcnR1cF9jb3N0LAogCQkJCQkJCQkgICB3b3Jrc3BhY2UudG90YWxfY29zdCwgcGF0aGtleXMp KQogCQlyZXR1cm47CiAKQEAgLTEzNjksNiArMTM3MSw3IEBAIHRyeV9wYXJ0aWFsX2hhc2hqb2lu X3BhdGgoUGxhbm5lckluZm8gKnJvb3QsCiAJaW5pdGlhbF9jb3N0X2hhc2hqb2luKHJvb3QsICZ3 b3Jrc3BhY2UsIGpvaW50eXBlLCBoYXNoY2xhdXNlcywKIAkJCQkJCSAgb3V0ZXJfcGF0aCwgaW5u ZXJfcGF0aCwgZXh0cmEsIHBhcmFsbGVsX2hhc2gpOwogCWlmICghYWRkX3BhcnRpYWxfcGF0aF9w cmVjaGVjayhqb2lucmVsLCB3b3Jrc3BhY2UuZGlzYWJsZWRfbm9kZXMsCisJCQkJCQkJCSAgIHdv cmtzcGFjZS5zdGFydHVwX2Nvc3QsCiAJCQkJCQkJCSAgIHdvcmtzcGFjZS50b3RhbF9jb3N0LCBO SUwpKQogCQlyZXR1cm47CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGls L3BhdGhub2RlLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wYXRobm9kZS5jCmluZGV4 IDg3NTc2NGFiZGJlLi5kNjFmMzI4NzA3ZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1p emVyL3V0aWwvcGF0aG5vZGUuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wYXRo bm9kZS5jCkBAIC03NzcsMTAgKzc3Nyw5IEBAIGFkZF9wYXRoX3ByZWNoZWNrKFJlbE9wdEluZm8g KnBhcmVudF9yZWwsIGludCBkaXNhYmxlZF9ub2RlcywKICAqCiAgKgkgIEJlY2F1c2Ugd2UgZG9u J3QgY29uc2lkZXIgcGFyYW1ldGVyaXplZCBwYXRocyBoZXJlLCB3ZSBhbHNvIGRvbid0CiAgKgkg IG5lZWQgdG8gY29uc2lkZXIgdGhlIHJvdyBjb3VudHMgYXMgYSBtZWFzdXJlIG9mIHF1YWxpdHk6 IGV2ZXJ5IHBhdGggd2lsbAotICoJICBwcm9kdWNlIHRoZSBzYW1lIG51bWJlciBvZiByb3dzLiAg TmVpdGhlciBkbyB3ZSBuZWVkIHRvIGNvbnNpZGVyIHN0YXJ0dXAKLSAqCSAgY29zdHM6IHBhcmFs bGVsaXNtIGlzIG9ubHkgdXNlZCBmb3IgcGxhbnMgdGhhdCB3aWxsIGJlIHJ1biB0byBjb21wbGV0 aW9uLgotICoJICBUaGVyZWZvcmUsIHRoaXMgcm91dGluZSBpcyBtdWNoIHNpbXBsZXIgdGhhbiBh ZGRfcGF0aDogaXQgbmVlZHMgdG8KLSAqCSAgY29uc2lkZXIgb25seSBkaXNhYmxlZCBub2Rlcywg cGF0aGtleXMgYW5kIHRvdGFsIGNvc3QuCisgKgkgIHByb2R1Y2UgdGhlIHNhbWUgbnVtYmVyIG9m IHJvd3MuICBIb3dldmVyLCB3ZSBkbyBuZWVkIHRvIGNvbnNpZGVyIHRoZQorICoJICBzdGFydHVw IGNvc3RzOiB0aGlzIHBhcnRpYWwgcGF0aCBjb3VsZCBiZSB1c2VkIGJlbmVhdGggYSBMaW1pdCBu b2RlLAorICoJICBzbyBhIGZhc3Qtc3RhcnQgcGxhbiBjb3VsZCBiZSBjb3JyZWN0LgogICoKICAq CSAgQXMgd2l0aCBhZGRfcGF0aCwgd2UgcGZyZWUgcGF0aHMgdGhhdCBhcmUgZm91bmQgdG8gYmUg ZG9taW5hdGVkIGJ5CiAgKgkgIGFub3RoZXIgcGFydGlhbCBwYXRoOyB0aGlzIHJlcXVpcmVzIHRo YXQgdGhlcmUgYmUgbm8gb3RoZXIgcmVmZXJlbmNlcyB0bwpAQCAtODE4LDUyICs4MTcsMzYgQEAg YWRkX3BhcnRpYWxfcGF0aChSZWxPcHRJbmZvICpwYXJlbnRfcmVsLCBQYXRoICpuZXdfcGF0aCkK IAkJLyogQ29tcGFyZSBwYXRoa2V5cy4gKi8KIAkJa2V5c2NtcCA9IGNvbXBhcmVfcGF0aGtleXMo bmV3X3BhdGgtPnBhdGhrZXlzLCBvbGRfcGF0aC0+cGF0aGtleXMpOwogCi0JCS8qIFVubGVzcyBw YXRoa2V5cyBhcmUgaW5jb21wYXRpYmxlLCBrZWVwIGp1c3Qgb25lIG9mIHRoZSB0d28gcGF0aHMu ICovCisJCS8qCisJCSAqIFVubGVzcyBwYXRoa2V5cyBhcmUgaW5jb21wYXRpYmxlLCBzZWUgaWYg b25lIG9mIHRoZSBwYXRocyBkb21pbmF0ZXMKKwkJICogdGhlIG90aGVyIChib3RoIGluIHN0YXJ0 dXAgYW5kIHRvdGFsIGNvc3QpLiBJdCBtYXkgaGFwcGVuIHRoYXQgb25lCisJCSAqIHBhdGggaGFz IGxvd2VyIHN0YXJ0dXAgY29zdCwgdGhlIG90aGVyIGhhcyBsb3dlciB0b3RhbCBjb3N0LgorCQkg Ki8KIAkJaWYgKGtleXNjbXAgIT0gUEFUSEtFWVNfRElGRkVSRU5UKQogCQl7Ci0JCQlpZiAodW5s aWtlbHkobmV3X3BhdGgtPmRpc2FibGVkX25vZGVzICE9IG9sZF9wYXRoLT5kaXNhYmxlZF9ub2Rl cykpCisJCQlQYXRoQ29zdENvbXBhcmlzb24gY29zdGNtcDsKKworCQkJLyoKKwkJCSAqIERvIGEg ZnV6enkgY29zdCBjb21wYXJpc29uIHdpdGggc3RhbmRhcmQgZnV6emluZXNzIGxpbWl0LgorCQkJ ICovCisJCQljb3N0Y21wID0gY29tcGFyZV9wYXRoX2Nvc3RzX2Z1enppbHkobmV3X3BhdGgsIG9s ZF9wYXRoLAorCQkJCQkJCQkJCQkJIFNURF9GVVpaX0ZBQ1RPUik7CisJCQlpZiAoY29zdGNtcCA9 PSBDT1NUU19CRVRURVIxKQogCQkJewotCQkJCWlmIChuZXdfcGF0aC0+ZGlzYWJsZWRfbm9kZXMg PiBvbGRfcGF0aC0+ZGlzYWJsZWRfbm9kZXMpCi0JCQkJCWFjY2VwdF9uZXcgPSBmYWxzZTsKLQkJ CQllbHNlCisJCQkJaWYgKGtleXNjbXAgPT0gUEFUSEtFWVNfQkVUVEVSMSkKIAkJCQkJcmVtb3Zl X29sZCA9IHRydWU7CiAJCQl9Ci0JCQllbHNlIGlmIChuZXdfcGF0aC0+dG90YWxfY29zdCA+IG9s ZF9wYXRoLT50b3RhbF9jb3N0Ci0JCQkJCSAqIFNURF9GVVpaX0ZBQ1RPUikKKwkJCWVsc2UgaWYg KGNvc3RjbXAgPT0gQ09TVFNfQkVUVEVSMikKIAkJCXsKLQkJCQkvKiBOZXcgcGF0aCBjb3N0cyBt b3JlOyBrZWVwIGl0IG9ubHkgaWYgcGF0aGtleXMgYXJlIGJldHRlci4gKi8KLQkJCQlpZiAoa2V5 c2NtcCAhPSBQQVRIS0VZU19CRVRURVIxKQorCQkJCWlmIChrZXlzY21wID09IFBBVEhLRVlTX0JF VFRFUjIpCiAJCQkJCWFjY2VwdF9uZXcgPSBmYWxzZTsKIAkJCX0KLQkJCWVsc2UgaWYgKG9sZF9w YXRoLT50b3RhbF9jb3N0ID4gbmV3X3BhdGgtPnRvdGFsX2Nvc3QKLQkJCQkJICogU1REX0ZVWlpf RkFDVE9SKQorCQkJZWxzZSBpZiAoY29zdGNtcCA9PSBDT1NUU19FUVVBTCkKIAkJCXsKLQkJCQkv KiBPbGQgcGF0aCBjb3N0cyBtb3JlOyBrZWVwIGl0IG9ubHkgaWYgcGF0aGtleXMgYXJlIGJldHRl ci4gKi8KLQkJCQlpZiAoa2V5c2NtcCAhPSBQQVRIS0VZU19CRVRURVIyKQorCQkJCWlmIChrZXlz Y21wID09IFBBVEhLRVlTX0JFVFRFUjEpCiAJCQkJCXJlbW92ZV9vbGQgPSB0cnVlOwotCQkJfQot CQkJZWxzZSBpZiAoa2V5c2NtcCA9PSBQQVRIS0VZU19CRVRURVIxKQotCQkJewotCQkJCS8qIENv c3RzIGFyZSBhYm91dCB0aGUgc2FtZSwgbmV3IHBhdGggaGFzIGJldHRlciBwYXRoa2V5cy4gKi8K LQkJCQlyZW1vdmVfb2xkID0gdHJ1ZTsKLQkJCX0KLQkJCWVsc2UgaWYgKGtleXNjbXAgPT0gUEFU SEtFWVNfQkVUVEVSMikKLQkJCXsKLQkJCQkvKiBDb3N0cyBhcmUgYWJvdXQgdGhlIHNhbWUsIG9s ZCBwYXRoIGhhcyBiZXR0ZXIgcGF0aGtleXMuICovCi0JCQkJYWNjZXB0X25ldyA9IGZhbHNlOwot CQkJfQotCQkJZWxzZSBpZiAob2xkX3BhdGgtPnRvdGFsX2Nvc3QgPiBuZXdfcGF0aC0+dG90YWxf Y29zdCAqIDEuMDAwMDAwMDAwMSkKLQkJCXsKLQkJCQkvKiBQYXRoa2V5cyBhcmUgdGhlIHNhbWUs IGFuZCB0aGUgb2xkIHBhdGggY29zdHMgbW9yZS4gKi8KLQkJCQlyZW1vdmVfb2xkID0gdHJ1ZTsK LQkJCX0KLQkJCWVsc2UKLQkJCXsKLQkJCQkvKgotCQkJCSAqIFBhdGhrZXlzIGFyZSB0aGUgc2Ft ZSwgYW5kIG5ldyBwYXRoIGlzbid0IG1hdGVyaWFsbHkKLQkJCQkgKiBjaGVhcGVyLgotCQkJCSAq LwotCQkJCWFjY2VwdF9uZXcgPSBmYWxzZTsKKwkJCQllbHNlIGlmIChrZXlzY21wID09IFBBVEhL RVlTX0JFVFRFUjIpCisJCQkJCWFjY2VwdF9uZXcgPSBmYWxzZTsKIAkJCX0KIAkJfQogCkBAIC05 MTQsMTYgKzg5NywxNiBAQCBhZGRfcGFydGlhbF9wYXRoKFJlbE9wdEluZm8gKnBhcmVudF9yZWws IFBhdGggKm5ld19wYXRoKQogICogYWRkX3BhcnRpYWxfcGF0aF9wcmVjaGVjawogICoJICBDaGVj ayB3aGV0aGVyIGEgcHJvcG9zZWQgbmV3IHBhcnRpYWwgcGF0aCBjb3VsZCBwb3NzaWJseSBnZXQg YWNjZXB0ZWQuCiAgKgotICogVW5saWtlIGFkZF9wYXRoX3ByZWNoZWNrLCB3ZSBjYW4gaWdub3Jl IHN0YXJ0dXAgY29zdCBhbmQgcGFyYW1ldGVyaXphdGlvbiwKLSAqIHNpbmNlIHRoZXkgZG9uJ3Qg bWF0dGVyIGZvciBwYXJ0aWFsIHBhdGhzIChzZWUgYWRkX3BhcnRpYWxfcGF0aCkuICBCdXQKLSAq IHdlIGRvIHdhbnQgdG8gbWFrZSBzdXJlIHdlIGRvbid0IGFkZCBhIHBhcnRpYWwgcGF0aCBpZiB0 aGVyZSdzIGFscmVhZHkKLSAqIGEgY29tcGxldGUgcGF0aCB0aGF0IGRvbWluYXRlcyBpdCwgc2lu Y2UgaW4gdGhhdCBjYXNlIHRoZSBwcm9wb3NlZCBwYXRoCi0gKiBpcyBzdXJlbHkgYSBsb3Nlci4K KyAqIFVubGlrZSBhZGRfcGF0aF9wcmVjaGVjaywgd2UgY2FuIGlnbm9yZSBwYXJhbWV0ZXJpemF0 aW9uLCBzaW5jZSBpdCBkb2Vzbid0CisgKiBtYXR0ZXIgZm9yIHBhcnRpYWwgcGF0aHMgKHNlZSBh ZGRfcGFydGlhbF9wYXRoKS4gIEJ1dCB3ZSBkbyB3YW50IHRvIG1ha2UKKyAqIHN1cmUgd2UgZG9u J3QgYWRkIGEgcGFydGlhbCBwYXRoIGlmIHRoZXJlJ3MgYWxyZWFkeSBhIGNvbXBsZXRlIHBhdGgg dGhhdAorICogZG9taW5hdGVzIGl0LCBzaW5jZSBpbiB0aGF0IGNhc2UgdGhlIHByb3Bvc2VkIHBh dGggaXMgc3VyZWx5IGEgbG9zZXIuCiAgKi8KIGJvb2wKIGFkZF9wYXJ0aWFsX3BhdGhfcHJlY2hl Y2soUmVsT3B0SW5mbyAqcGFyZW50X3JlbCwgaW50IGRpc2FibGVkX25vZGVzLAotCQkJCQkJICBD b3N0IHRvdGFsX2Nvc3QsIExpc3QgKnBhdGhrZXlzKQorCQkJCQkJICBDb3N0IHN0YXJ0dXBfY29z dCwgQ29zdCB0b3RhbF9jb3N0LCBMaXN0ICpwYXRoa2V5cykKIHsKKwlib29sCQljb25zaWRlcl9z dGFydHVwID0gcGFyZW50X3JlbC0+Y29uc2lkZXJfc3RhcnR1cDsKIAlMaXN0Q2VsbCAgICpwMTsK IAogCS8qCkBAIC05MzMsMjUgKzkxNiw4MCBAQCBhZGRfcGFydGlhbF9wYXRoX3ByZWNoZWNrKFJl bE9wdEluZm8gKnBhcmVudF9yZWwsIGludCBkaXNhYmxlZF9ub2RlcywKIAkgKiBpcyBjbGVhcmx5 IHN1cGVyaW9yIHRvIHNvbWUgZXhpc3RpbmcgcGFydGlhbCBwYXRoIC0tIGF0IGxlYXN0LCBtb2R1 bG8KIAkgKiBmaW5hbCBjb3N0IGNvbXB1dGF0aW9ucy4gIElmIHNvLCB3ZSBkZWZpbml0ZWx5IHdh bnQgdG8gY29uc2lkZXIgaXQuCiAJICoKLQkgKiBVbmxpa2UgYWRkX3BhdGgoKSwgd2UgYWx3YXlz IGNvbXBhcmUgcGF0aGtleXMgaGVyZS4gIFRoaXMgaXMgYmVjYXVzZSB3ZQotCSAqIGV4cGVjdCBw YXJ0aWFsX3BhdGhsaXN0IHRvIGJlIHZlcnkgc2hvcnQsIGFuZCBnZXR0aW5nIGEgZGVmaW5pdGl2 ZQorCSAqIFVubGlrZSBhZGRfcGF0aCgpLCB3ZSBuZXZlciB0cnkgdG8gZXhpdCB0aGlzIGxvb3Ag ZWFybHkuIFRoaXMgaXMgYmVjYXVzZQorCSAqIHdlIGV4cGVjdCBwYXJ0aWFsX3BhdGhsaXN0IHRv IGJlIHZlcnkgc2hvcnQsIGFuZCBnZXR0aW5nIGEgZGVmaW5pdGl2ZQogCSAqIGFuc3dlciBhdCB0 aGlzIHN0YWdlIGF2b2lkcyB0aGUgbmVlZCB0byBjYWxsIGFkZF9wYXRoX3ByZWNoZWNrLgogCSAq LwogCWZvcmVhY2gocDEsIHBhcmVudF9yZWwtPnBhcnRpYWxfcGF0aGxpc3QpCiAJewogCQlQYXRo CSAgICpvbGRfcGF0aCA9IChQYXRoICopIGxmaXJzdChwMSk7CisJCVBhdGhDb3N0Q29tcGFyaXNv biBjb3N0Y21wOwogCQlQYXRoS2V5c0NvbXBhcmlzb24ga2V5c2NtcDsKIAotCQlrZXlzY21wID0g Y29tcGFyZV9wYXRoa2V5cyhwYXRoa2V5cywgb2xkX3BhdGgtPnBhdGhrZXlzKTsKLQkJaWYgKGtl eXNjbXAgIT0gUEFUSEtFWVNfRElGRkVSRU5UKQorCQkvKgorCQkgKiBGaXJzdCwgY29tcGFyZSBj b3N0cyBhbmQgZGlzYWJsZWQgbm9kZXMuIFRoaXMgbG9naWMgc2hvdWxkIGJlCisJCSAqIGlkZW50 aWNhbCB0byBjb21wYXJlX3BhdGhfY29zdHNfZnV6emlseSwgZXhjZXB0IHRoYXQgb25lIG9mIHRo ZQorCQkgKiBwYXRocyBoYXNuJ3QgYmVlbiBjcmVhdGVkIHlldCwgYW5kIHRoZSBmdXp6IGZhY3Rv ciBpcyBhbHdheXMKKwkJICogU1REX0ZVWlpfRkFDVE9SLgorCQkgKi8KKwkJaWYgKHVubGlrZWx5 KG9sZF9wYXRoLT5kaXNhYmxlZF9ub2RlcyAhPSBkaXNhYmxlZF9ub2RlcykpCiAJCXsKLQkJCWlm ICh0b3RhbF9jb3N0ID4gb2xkX3BhdGgtPnRvdGFsX2Nvc3QgKiBTVERfRlVaWl9GQUNUT1IgJiYK LQkJCQlrZXlzY21wICE9IFBBVEhLRVlTX0JFVFRFUjEpCi0JCQkJcmV0dXJuIGZhbHNlOwotCQkJ aWYgKG9sZF9wYXRoLT50b3RhbF9jb3N0ID4gdG90YWxfY29zdCAqIFNURF9GVVpaX0ZBQ1RPUiAm JgotCQkJCWtleXNjbXAgIT0gUEFUSEtFWVNfQkVUVEVSMikKLQkJCQlyZXR1cm4gdHJ1ZTsKKwkJ CWlmIChkaXNhYmxlZF9ub2RlcyA8IG9sZF9wYXRoLT5kaXNhYmxlZF9ub2RlcykKKwkJCQljb3N0 Y21wID0gQ09TVFNfQkVUVEVSMTsKKwkJCWVsc2UKKwkJCQljb3N0Y21wID0gQ09TVFNfQkVUVEVS MjsKKwkJfQorCQllbHNlIGlmICh0b3RhbF9jb3N0ID4gb2xkX3BhdGgtPnRvdGFsX2Nvc3QgKiBT VERfRlVaWl9GQUNUT1IpCisJCXsKKwkJCWlmIChjb25zaWRlcl9zdGFydHVwICYmCisJCQkJb2xk X3BhdGgtPnN0YXJ0dXBfY29zdCA+IHN0YXJ0dXBfY29zdCAqIFNURF9GVVpaX0ZBQ1RPUikKKwkJ CQljb3N0Y21wID0gQ09TVFNfRElGRkVSRU5UOworCQkJZWxzZQorCQkJCWNvc3RjbXAgPSBDT1NU U19CRVRURVIyOworCQl9CisJCWVsc2UgaWYgKG9sZF9wYXRoLT50b3RhbF9jb3N0ID4gdG90YWxf Y29zdCAqIFNURF9GVVpaX0ZBQ1RPUikKKwkJeworCQkJaWYgKGNvbnNpZGVyX3N0YXJ0dXAgJiYK KwkJCQlzdGFydHVwX2Nvc3QgPiBvbGRfcGF0aC0+c3RhcnR1cF9jb3N0ICogU1REX0ZVWlpfRkFD VE9SKQorCQkJCWNvc3RjbXAgPSBDT1NUU19ESUZGRVJFTlQ7CisJCQllbHNlCisJCQkJY29zdGNt cCA9IENPU1RTX0JFVFRFUjE7CiAJCX0KKwkJZWxzZSBpZiAoc3RhcnR1cF9jb3N0ID4gb2xkX3Bh dGgtPnN0YXJ0dXBfY29zdCAqIFNURF9GVVpaX0ZBQ1RPUikKKwkJCWNvc3RjbXAgPSBDT1NUU19C RVRURVIyOworCQllbHNlIGlmIChvbGRfcGF0aC0+c3RhcnR1cF9jb3N0ID4gc3RhcnR1cF9jb3N0 ICogU1REX0ZVWlpfRkFDVE9SKQorCQkJY29zdGNtcCA9IENPU1RTX0JFVFRFUjE7CisJCWVsc2UK KwkJCWNvc3RjbXAgPSBDT1NUU19FUVVBTDsKKworCQkvKgorCQkgKiBJZiBvbmUgcGF0aCB3aW5z IG9uIHN0YXJ0dXAgY29zdCBhbmQgdGhlIG90aGVyIG9uIHRvdGFsIGNvc3QsIHdlCisJCSAqIGNh bid0IHNheSBmb3Igc3VyZSB3aGljaCBpcyBiZXR0ZXIuCisJCSAqLworCQlpZiAoY29zdGNtcCA9 PSBDT1NUU19ESUZGRVJFTlQpCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBJZiB0aGUgdHdv IHBhdGhzIGhhdmUgZGlmZmVyZW50IHBhdGhrZXlzLCB3ZSBjYW4ndCBzYXkgZm9yIHN1cmUKKwkJ ICogd2hpY2ggaXMgYmV0dGVyLgorCQkgKi8KKwkJa2V5c2NtcCA9IGNvbXBhcmVfcGF0aGtleXMo cGF0aGtleXMsIG9sZF9wYXRoLT5wYXRoa2V5cyk7CisJCWlmIChrZXlzY21wID09IFBBVEhLRVlT X0RJRkZFUkVOVCkKKwkJCWNvbnRpbnVlOworCisJCS8qCisJCSAqIElmIHRoZSBleGlzdGluZyBw YXRoIGlzIGNoZWFwZXIgYW5kIHRoZSBwYXRoa2V5cyBhcmUgZXF1YWwgb3Igd29yc2UsCisJCSAq IHRoZSBuZXcgcGF0aCBpcyBub3QgaW50ZXJlc3RpbmcuCisJCSAqLworCQlpZiAoY29zdGNtcCA9 PSBDT1NUU19CRVRURVIyICYmIGtleXNjbXAgIT0gUEFUSEtFWVNfQkVUVEVSMSkKKwkJCXJldHVy biBmYWxzZTsKKworCQkvKgorCQkgKiBJZiB0aGUgbmV3IHBhdGggaXMgY2hlYXBlciBhbmQgdGhl IHBhdGhrZXlzIGFyZSBlcXVhbCBvciBiZXR0ZXIsCisJCSAqIGl0IGlzIGRlZmluaXRlbHkgaW50 ZXJlc3RpbmcuCisJCSAqLworCQlpZiAoY29zdGNtcCA9PSBDT1NUU19CRVRURVIxICYmIGtleXNj bXAgIT0gUEFUSEtFWVNfQkVUVEVSMikKKwkJCXJldHVybiB0cnVlOwogCX0KIAogCS8qCkBAIC05 NTksMTQgKzk5Nyw5IEBAIGFkZF9wYXJ0aWFsX3BhdGhfcHJlY2hlY2soUmVsT3B0SW5mbyAqcGFy ZW50X3JlbCwgaW50IGRpc2FibGVkX25vZGVzLAogCSAqIGNsZWFybHkgZ29vZCBlbm91Z2ggdGhh dCBpdCBtaWdodCByZXBsYWNlIG9uZS4gIENvbXBhcmUgaXQgdG8KIAkgKiBub24tcGFyYWxsZWwg cGxhbnMuICBJZiBpdCBsb3NlcyBldmVuIGJlZm9yZSBhY2NvdW50aW5nIGZvciB0aGUgY29zdCBv ZgogCSAqIHRoZSBHYXRoZXIgbm9kZSwgd2Ugc2hvdWxkIGRlZmluaXRlbHkgcmVqZWN0IGl0Lgot CSAqCi0JICogTm90ZSB0aGF0IHdlIHBhc3MgdGhlIHRvdGFsX2Nvc3QgdG8gYWRkX3BhdGhfcHJl Y2hlY2sgdHdpY2UuICBUaGlzIGlzCi0JICogYmVjYXVzZSBpdCdzIG5ldmVyIGFkdmFudGFnZW91 cyB0byBjb25zaWRlciB0aGUgc3RhcnR1cCBjb3N0IG9mIGEKLQkgKiBwYXJ0aWFsIHBhdGg7IHRo ZSByZXN1bHRpbmcgcGxhbnMsIGlmIHJ1biBpbiBwYXJhbGxlbCwgd2lsbCBiZSBydW4gdG8KLQkg KiBjb21wbGV0aW9uLgogCSAqLwotCWlmICghYWRkX3BhdGhfcHJlY2hlY2socGFyZW50X3JlbCwg ZGlzYWJsZWRfbm9kZXMsIHRvdGFsX2Nvc3QsIHRvdGFsX2Nvc3QsCi0JCQkJCQkgICBwYXRoa2V5 cywgTlVMTCkpCisJaWYgKCFhZGRfcGF0aF9wcmVjaGVjayhwYXJlbnRfcmVsLCBkaXNhYmxlZF9u b2Rlcywgc3RhcnR1cF9jb3N0LAorCQkJCQkJICAgdG90YWxfY29zdCwgcGF0aGtleXMsIE5VTEwp KQogCQlyZXR1cm4gZmFsc2U7CiAKIAlyZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL29wdGltaXplci9wYXRobm9kZS5oIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhub2Rl LmgKaW5kZXggY2Y4YTY1NGZhNTMuLjkzODUxMDQwMGNjIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS9vcHRpbWl6ZXIvcGF0aG5vZGUuaAorKysgYi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aG5v ZGUuaApAQCAtNTUsNyArNTUsNyBAQCBleHRlcm4gYm9vbCBhZGRfcGF0aF9wcmVjaGVjayhSZWxP cHRJbmZvICpwYXJlbnRfcmVsLCBpbnQgZGlzYWJsZWRfbm9kZXMsCiAJCQkJCQkJICBMaXN0ICpw YXRoa2V5cywgUmVsaWRzIHJlcXVpcmVkX291dGVyKTsKIGV4dGVybiB2b2lkIGFkZF9wYXJ0aWFs X3BhdGgoUmVsT3B0SW5mbyAqcGFyZW50X3JlbCwgUGF0aCAqbmV3X3BhdGgpOwogZXh0ZXJuIGJv b2wgYWRkX3BhcnRpYWxfcGF0aF9wcmVjaGVjayhSZWxPcHRJbmZvICpwYXJlbnRfcmVsLAotCQkJ CQkJCQkJICBpbnQgZGlzYWJsZWRfbm9kZXMsCisJCQkJCQkJCQkgIGludCBkaXNhYmxlZF9ub2Rl cywgQ29zdCBzdGFydHVwX2Nvc3QsCiAJCQkJCQkJCQkgIENvc3QgdG90YWxfY29zdCwgTGlzdCAq cGF0aGtleXMpOwogCiBleHRlcm4gUGF0aCAqY3JlYXRlX3NlcXNjYW5fcGF0aChQbGFubmVySW5m byAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC9pbmNyZW1lbnRhbF9zb3J0Lm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv aW5jcmVtZW50YWxfc29ydC5vdXQKaW5kZXggZmRlYzViOWJhNTIuLjI5MDkwZGNhMWJhIDEwMDY0 NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2luY3JlbWVudGFsX3NvcnQub3V0Cisr KyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvaW5jcmVtZW50YWxfc29ydC5vdXQKQEAgLTE0 NTAsMjEgKzE0NTAsMjMgQEAgZXhwbGFpbiAoY29zdHMgb2ZmKSBzZWxlY3QgYSxiLHN1bShjKSBm cm9tIHQgZ3JvdXAgYnkgMSwyIG9yZGVyIGJ5IDEsMiwzIGxpbWl0IDEKIAogc2V0IGVuYWJsZV9p bmNyZW1lbnRhbF9zb3J0ID0gb247CiBleHBsYWluIChjb3N0cyBvZmYpIHNlbGVjdCBhLGIsc3Vt KGMpIGZyb20gdCBncm91cCBieSAxLDIgb3JkZXIgYnkgMSwyLDMgbGltaXQgMTsKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFV RVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KICBMaW1pdAogICAgLT4gIEluY3JlbWVudGFsIFNvcnQKICAgICAgICAgIFNvcnQgS2V5 OiBhLCBiLCAoc3VtKGMpKQogICAgICAgICAgUHJlc29ydGVkIEtleTogYSwgYgotICAgICAgICAg LT4gIEdyb3VwQWdncmVnYXRlCisgICAgICAgICAtPiAgRmluYWxpemUgR3JvdXBBZ2dyZWdhdGUK ICAgICAgICAgICAgICAgIEdyb3VwIEtleTogYSwgYgogICAgICAgICAgICAgICAgLT4gIEdhdGhl ciBNZXJnZQogICAgICAgICAgICAgICAgICAgICAgV29ya2VycyBQbGFubmVkOiAyCi0gICAgICAg ICAgICAgICAgICAgICAtPiAgSW5jcmVtZW50YWwgU29ydAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgU29ydCBLZXk6IGEsIGIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFByZXNvcnRl ZCBLZXk6IGEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBJbmRleCBT Y2FuIHVzaW5nIHRfYV9pZHggb24gdAotKDEyIHJvd3MpCisgICAgICAgICAgICAgICAgICAgICAt PiAgUGFydGlhbCBHcm91cEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgR3Jv dXAgS2V5OiBhLCBiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgSW5jcmVtZW50YWwg U29ydAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29ydCBLZXk6IGEsIGIKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByZXNvcnRlZCBLZXk6IGEKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBJbmRleCBTY2FuIHVzaW5nIHRf YV9pZHggb24gdAorKDE0IHJvd3MpCiAKIC0tIEluY3JlbWVudGFsIHNvcnQgdnMuIHNldCBvcGVy YXRpb25zIHdpdGggdmFybm8gMAogc2V0IGVuYWJsZV9oYXNoYWdnIHRvIG9mZjsKZGlmZiAtLWdp dCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvam9pbl9oYXNoLm91dCBiL3NyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvam9pbl9oYXNoLm91dAppbmRleCA0NzQ5ZjZlZDcwZC4uYmM3Y2M3NjQ2 N2YgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvam9pbl9oYXNoLm91dAor KysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pvaW5faGFzaC5vdXQKQEAgLTc2LDggKzc2 LDggQEAgaW5zZXJ0IGludG8gZXh0cmVtZWx5X3NrZXdlZAogdXBkYXRlIHBnX2NsYXNzCiAgIHNl dCByZWx0dXBsZXMgPSAyLCByZWxwYWdlcyA9IHBnX3JlbGF0aW9uX3NpemUoJ2V4dHJlbWVseV9z a2V3ZWQnKSAvIDgxOTIKICAgd2hlcmUgcmVsbmFtZSA9ICdleHRyZW1lbHlfc2tld2VkJzsKLS0t IE1ha2UgYSByZWxhdGlvbiB3aXRoIGEgY291cGxlIG9mIGVub3Jtb3VzIHR1cGxlcy4KLWNyZWF0 ZSB0YWJsZSB3aWRlIGFzIHNlbGVjdCBnZW5lcmF0ZV9zZXJpZXMoMSwgMikgYXMgaWQsIHJwYWQo JycsIDMyMDAwMCwgJ3gnKSBhcyB0OworLS0gTWFrZSBhIHJlbGF0aW9uIHdpdGggc2V2ZXJhbCBl bm9ybW91cyB0dXBsZXMuCitjcmVhdGUgdGFibGUgd2lkZSBhcyBzZWxlY3QgZ2VuZXJhdGVfc2Vy aWVzKDEsIDMpIGFzIGlkLCBycGFkKCcnLCAzMjAwMDAsICd4JykgYXMgdDsKIGFsdGVyIHRhYmxl IHdpZGUgc2V0IChwYXJhbGxlbF93b3JrZXJzID0gMik7CiAtLSBUaGUgIm9wdGltYWwiIGNhc2U6 IHRoZSBoYXNoIHRhYmxlIGZpdHMgaW4gbWVtb3J5OyB3ZSBwbGFuIGZvciAxCiAtLSBiYXRjaCwg d2Ugc3RpY2sgdG8gdGhhdCBudW1iZXIsIGFuZCBwZWFrIG1lbW9yeSB1c2FnZSBzdGF5cyB3aXRo aW4KQEAgLTkyMiw3ICs5MjIsNyBAQCBzZXQgd29ya19tZW0gPSAnMTI4a0InOwogc2V0IGhhc2hf bWVtX211bHRpcGxpZXIgPSAxLjA7CiBleHBsYWluIChjb3N0cyBvZmYpCiAgIHNlbGVjdCBsZW5n dGgobWF4KHMudCkpCi0gIGZyb20gd2lkZSBsZWZ0IGpvaW4gKHNlbGVjdCBpZCwgY29hbGVzY2Uo dCwgJycpIHx8ICcnIGFzIHQgZnJvbSB3aWRlKSBzIHVzaW5nIChpZCk7CisgIGZyb20gd2lkZSBs ZWZ0IGpvaW4gKHNlbGVjdCBpZCwgY29hbGVzY2UodCwgJycpIHx8ICcnIGFzIHQgZnJvbSB3aWRl IHdoZXJlIGlkIDwgMykgcyB1c2luZyAoaWQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg UVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgIAogLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIEZpbmFsaXpl IEFnZ3JlZ2F0ZQpAQCAtOTM0LDEwICs5MzQsMTEgQEAgZXhwbGFpbiAoY29zdHMgb2ZmKQogICAg ICAgICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9uIHdpZGUKICAgICAgICAg ICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBIYXNoCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAtPiAgUGFyYWxsZWwgU2VxIFNjYW4gb24gd2lkZSB3aWRlXzEKLSg5IHJvd3MpCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6IChpZCA8IDMpCisoMTAgcm93cykKIAog c2VsZWN0IGxlbmd0aChtYXgocy50KSkKLWZyb20gd2lkZSBsZWZ0IGpvaW4gKHNlbGVjdCBpZCwg Y29hbGVzY2UodCwgJycpIHx8ICcnIGFzIHQgZnJvbSB3aWRlKSBzIHVzaW5nIChpZCk7Citmcm9t IHdpZGUgbGVmdCBqb2luIChzZWxlY3QgaWQsIGNvYWxlc2NlKHQsICcnKSB8fCAnJyBhcyB0IGZy b20gd2lkZSB3aGVyZSBpZCA8IDMpIHMgdXNpbmcgKGlkKTsKICBsZW5ndGggCiAtLS0tLS0tLQog IDMyMDAwMApAQCAtOTQ3LDcgKzk0OCw3IEBAIHNlbGVjdCBmaW5hbCA+IDEgYXMgbXVsdGliYXRj aAogICBmcm9tIGhhc2hfam9pbl9iYXRjaGVzKAogJCQKICAgc2VsZWN0IGxlbmd0aChtYXgocy50 KSkKLSAgZnJvbSB3aWRlIGxlZnQgam9pbiAoc2VsZWN0IGlkLCBjb2FsZXNjZSh0LCAnJykgfHwg JycgYXMgdCBmcm9tIHdpZGUpIHMgdXNpbmcgKGlkKTsKKyAgZnJvbSB3aWRlIGxlZnQgam9pbiAo c2VsZWN0IGlkLCBjb2FsZXNjZSh0LCAnJykgfHwgJycgYXMgdCBmcm9tIHdpZGUgd2hlcmUgaWQg PCAzKSBzIHVzaW5nIChpZCk7CiAkJCk7CiAgbXVsdGliYXRjaCAKIC0tLS0tLS0tLS0tLQpkaWZm IC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvam9pbl9oYXNoLnNxbCBiL3NyYy90ZXN0L3Jl Z3Jlc3Mvc3FsL2pvaW5faGFzaC5zcWwKaW5kZXggNDlkM2ZkNjE4NTYuLjUzZGIxNzU0YmIyIDEw MDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9qb2luX2hhc2guc3FsCisrKyBiL3NyYy90 ZXN0L3JlZ3Jlc3Mvc3FsL2pvaW5faGFzaC5zcWwKQEAgLTgzLDggKzgzLDggQEAgdXBkYXRlIHBn X2NsYXNzCiAgIHNldCByZWx0dXBsZXMgPSAyLCByZWxwYWdlcyA9IHBnX3JlbGF0aW9uX3NpemUo J2V4dHJlbWVseV9za2V3ZWQnKSAvIDgxOTIKICAgd2hlcmUgcmVsbmFtZSA9ICdleHRyZW1lbHlf c2tld2VkJzsKIAotLS0gTWFrZSBhIHJlbGF0aW9uIHdpdGggYSBjb3VwbGUgb2YgZW5vcm1vdXMg dHVwbGVzLgotY3JlYXRlIHRhYmxlIHdpZGUgYXMgc2VsZWN0IGdlbmVyYXRlX3NlcmllcygxLCAy KSBhcyBpZCwgcnBhZCgnJywgMzIwMDAwLCAneCcpIGFzIHQ7CistLSBNYWtlIGEgcmVsYXRpb24g d2l0aCBzZXZlcmFsIGVub3Jtb3VzIHR1cGxlcy4KK2NyZWF0ZSB0YWJsZSB3aWRlIGFzIHNlbGVj dCBnZW5lcmF0ZV9zZXJpZXMoMSwgMykgYXMgaWQsIHJwYWQoJycsIDMyMDAwMCwgJ3gnKSBhcyB0 OwogYWx0ZXIgdGFibGUgd2lkZSBzZXQgKHBhcmFsbGVsX3dvcmtlcnMgPSAyKTsKIAogLS0gVGhl ICJvcHRpbWFsIiBjYXNlOiB0aGUgaGFzaCB0YWJsZSBmaXRzIGluIG1lbW9yeTsgd2UgcGxhbiBm b3IgMQpAQCAtNDk2LDE0ICs0OTYsMTQgQEAgc2V0IHdvcmtfbWVtID0gJzEyOGtCJzsKIHNldCBo YXNoX21lbV9tdWx0aXBsaWVyID0gMS4wOwogZXhwbGFpbiAoY29zdHMgb2ZmKQogICBzZWxlY3Qg bGVuZ3RoKG1heChzLnQpKQotICBmcm9tIHdpZGUgbGVmdCBqb2luIChzZWxlY3QgaWQsIGNvYWxl c2NlKHQsICcnKSB8fCAnJyBhcyB0IGZyb20gd2lkZSkgcyB1c2luZyAoaWQpOworICBmcm9tIHdp ZGUgbGVmdCBqb2luIChzZWxlY3QgaWQsIGNvYWxlc2NlKHQsICcnKSB8fCAnJyBhcyB0IGZyb20g d2lkZSB3aGVyZSBpZCA8IDMpIHMgdXNpbmcgKGlkKTsKIHNlbGVjdCBsZW5ndGgobWF4KHMudCkp Ci1mcm9tIHdpZGUgbGVmdCBqb2luIChzZWxlY3QgaWQsIGNvYWxlc2NlKHQsICcnKSB8fCAnJyBh cyB0IGZyb20gd2lkZSkgcyB1c2luZyAoaWQpOworZnJvbSB3aWRlIGxlZnQgam9pbiAoc2VsZWN0 IGlkLCBjb2FsZXNjZSh0LCAnJykgfHwgJycgYXMgdCBmcm9tIHdpZGUgd2hlcmUgaWQgPCAzKSBz IHVzaW5nIChpZCk7CiBzZWxlY3QgZmluYWwgPiAxIGFzIG11bHRpYmF0Y2gKICAgZnJvbSBoYXNo X2pvaW5fYmF0Y2hlcygKICQkCiAgIHNlbGVjdCBsZW5ndGgobWF4KHMudCkpCi0gIGZyb20gd2lk ZSBsZWZ0IGpvaW4gKHNlbGVjdCBpZCwgY29hbGVzY2UodCwgJycpIHx8ICcnIGFzIHQgZnJvbSB3 aWRlKSBzIHVzaW5nIChpZCk7CisgIGZyb20gd2lkZSBsZWZ0IGpvaW4gKHNlbGVjdCBpZCwgY29h bGVzY2UodCwgJycpIHx8ICcnIGFzIHQgZnJvbSB3aWRlIHdoZXJlIGlkIDwgMykgcyB1c2luZyAo aWQpOwogJCQpOwogcm9sbGJhY2sgdG8gc2V0dGluZ3M7CiAKLS0gCjIuNTEuMAoK --00000000000096d31c064a804400 Content-Type: application/octet-stream; name="v15-0005-Test-pg_plan_advice-using-a-new-test_plan_advice.patch" Content-Disposition: attachment; filename="v15-0005-Test-pg_plan_advice-using-a-new-test_plan_advice.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mlh7d8l14 RnJvbSBjZGEwNTU5ZTVjMWUwZDY0NGU3ZjJlZjg1Y2VjMmQ3NjcwNzNjY2YzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IFNhdCwgNyBGZWIgMjAyNiAwOTozNjowOCAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjE1IDUv NV0gVGVzdCBwZ19wbGFuX2FkdmljZSB1c2luZyBhIG5ldyB0ZXN0X3BsYW5fYWR2aWNlCiBtb2R1 bGUuCgpUaGUgVEFQIHRlc3QgaW5jbHVkZWQgaW4gdGhpcyBuZXcgbW9kdWxlIHJ1bnMgdGhlIHJl Z3Jlc3Npb24gdGVzdHMKd2l0aCBwZ19wbGFuX2FkdmljZSBsb2FkZWQuIEl0IGFycmFuZ2VzIGZv ciBlYWNoIHF1ZXJ5IHRvIGJlIHBsYW5uZWQKdHdpY2UuICBUaGUgZmlyc3QgdGltZSwgd2UgZ2Vu ZXJhdGUgcGxhbiBhZHZpY2UuIFRoZSBzZWNvbmQgdGltZSwgd2UKcmVwbGFuIHRoZSBxdWVyeSB1 c2luZyB0aGUgcmVzdWx0aW5nIGFkdmljZSBzdHJpbmcuIElmIHRoZSB0ZXN0cwpmYWlsLCB0aGF0 IG1lYW5zIHRoYXQgdXNpbmcgcGdfcGxhbl9hZHZpY2UgdG8gdGVsbCB0aGUgcGxhbm5lciB0bwpk byB3aGF0IGl0IHdhcyBnb2luZyB0byBkbyBhbnl3YXkgYnJlYWtzIHNvbWV0aGluZywgd2hpY2gg aW5kaWNhdGVzCmEgcHJvYmxlbSBlaXRoZXIgd2l0aCBwZ19wbGFuX2FkdmljZSBvciB3aXRoIHRo ZSBwbGFubmVyLgotLS0KIHNyYy90ZXN0L21vZHVsZXMvTWFrZWZpbGUgICAgICAgICAgICAgICAg ICAgICB8ICAgMSArCiBzcmMvdGVzdC9tb2R1bGVzL21lc29uLmJ1aWxkICAgICAgICAgICAgICAg ICAgfCAgIDEgKwogc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3BsYW5fYWR2aWNlL01ha2VmaWxlICAg IHwgIDI4ICsrKysKIHNyYy90ZXN0L21vZHVsZXMvdGVzdF9wbGFuX2FkdmljZS9tZXNvbi5idWls ZCB8ICAyOSArKysrCiAuLi4vdGVzdF9wbGFuX2FkdmljZS90LzAwMV9yZXBsYW5fcmVncmVzcy5w bCAgfCAgNjQgKysrKysrKysKIC4uLi90ZXN0X3BsYW5fYWR2aWNlL3Rlc3RfcGxhbl9hZHZpY2Uu YyAgICAgICB8IDE0MyArKysrKysrKysrKysrKysrKysKIDYgZmlsZXMgY2hhbmdlZCwgMjY2IGlu c2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfcGxh bl9hZHZpY2UvTWFrZWZpbGUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rl c3RfcGxhbl9hZHZpY2UvbWVzb24uYnVpbGQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9t b2R1bGVzL3Rlc3RfcGxhbl9hZHZpY2UvdC8wMDFfcmVwbGFuX3JlZ3Jlc3MucGwKIGNyZWF0ZSBt b2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfcGxhbl9hZHZpY2UvdGVzdF9wbGFuX2Fk dmljZS5jCgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9NYWtlZmlsZSBiL3NyYy90ZXN0 L21vZHVsZXMvTWFrZWZpbGUKaW5kZXggNDRjNzE2M2MxY2QuLmU4YzMxZWM4ZTc0IDEwMDY0NAot LS0gYS9zcmMvdGVzdC9tb2R1bGVzL01ha2VmaWxlCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvTWFr ZWZpbGUKQEAgLTM4LDYgKzM4LDcgQEAgU1VCRElSUyA9IFwKIAkJICB0ZXN0X29hdF9ob29rcyBc CiAJCSAgdGVzdF9wYXJzZXIgXAogCQkgIHRlc3RfcGdfZHVtcCBcCisJCSAgdGVzdF9wbGFuX2Fk dmljZSBcCiAJCSAgdGVzdF9wcmVkdGVzdCBcCiAJCSAgdGVzdF9yYWRpeHRyZWUgXAogCQkgIHRl c3RfcmJ0cmVlIFwKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvbWVzb24uYnVpbGQgYi9z cmMvdGVzdC9tb2R1bGVzL21lc29uLmJ1aWxkCmluZGV4IDI2MzRhNTE5OTM1Li42OTk4YTIyNmZh NyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy9tZXNvbi5idWlsZAorKysgYi9zcmMvdGVz dC9tb2R1bGVzL21lc29uLmJ1aWxkCkBAIC0zOSw2ICszOSw3IEBAIHN1YmRpcigndGVzdF9taXNj JykKIHN1YmRpcigndGVzdF9vYXRfaG9va3MnKQogc3ViZGlyKCd0ZXN0X3BhcnNlcicpCiBzdWJk aXIoJ3Rlc3RfcGdfZHVtcCcpCitzdWJkaXIoJ3Rlc3RfcGxhbl9hZHZpY2UnKQogc3ViZGlyKCd0 ZXN0X3ByZWR0ZXN0JykKIHN1YmRpcigndGVzdF9yYWRpeHRyZWUnKQogc3ViZGlyKCd0ZXN0X3Ji dHJlZScpCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfcGxhbl9hZHZpY2UvTWFr ZWZpbGUgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfcGxhbl9hZHZpY2UvTWFrZWZpbGUKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmJlMDI2Y2UzNGJmCi0tLSAvZGV2L251 bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3BsYW5fYWR2aWNlL01ha2VmaWxlCkBAIC0w LDAgKzEsMjggQEAKKyMgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3BsYW5fYWR2aWNlL01ha2VmaWxl CisKK1BHRklMRURFU0MgPSAidGVzdF9wbGFuX2FkdmljZSAtIHRlc3Qgd2hldGhlciBnZW5lcmF0 ZWQgcGxhbiBhZHZpY2Ugd29ya3MiCisKK01PRFVMRV9iaWcgPSB0ZXN0X3BsYW5fYWR2aWNlCitP QkpTID0gXAorCSQoV0lOMzJSRVMpIFwKKwl0ZXN0X3BsYW5fYWR2aWNlLm8KKworRVhUUkFfSU5T VEFMTCA9IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UKKworVEFQX1RFU1RTID0gMQorCitpZmRlZiBV U0VfUEdYUworUEdfQ09ORklHID0gcGdfY29uZmlnCitQR1hTIDo9ICQoc2hlbGwgJChQR19DT05G SUcpIC0tcGd4cykKK2luY2x1ZGUgJChQR1hTKQorZWxzZQorc3ViZGlyID0gc3JjL3Rlc3QvbW9k dWxlcy90ZXN0X3BsYW5fYWR2aWNlCit0b3BfYnVpbGRkaXIgPSAuLi8uLi8uLi8uLgoraW5jbHVk ZSAkKHRvcF9idWlsZGRpcikvc3JjL01ha2VmaWxlLmdsb2JhbAoraW5jbHVkZSAkKHRvcF9zcmNk aXIpL2NvbnRyaWIvY29udHJpYi1nbG9iYWwubWsKK2VuZGlmCisKK292ZXJyaWRlIENQUEZMQUdT ICs9IC1JJCh0b3Bfc3JjZGlyKS9jb250cmliL3BnX3BsYW5fYWR2aWNlCisKK1JFR1JFU1NfU0hM SUI9JChhYnNfdG9wX2J1aWxkZGlyKS9zcmMvdGVzdC9yZWdyZXNzL3JlZ3Jlc3MkKERMU1VGRklY KQorZXhwb3J0IFJFR1JFU1NfU0hMSUIKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVz dF9wbGFuX2FkdmljZS9tZXNvbi5idWlsZCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9wbGFuX2Fk dmljZS9tZXNvbi5idWlsZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u YWZkZTQyMGJhZWQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfcGxh bl9hZHZpY2UvbWVzb24uYnVpbGQKQEAgLTAsMCArMSwyOSBAQAorIyBDb3B5cmlnaHQgKGMpIDIw MjItMjAyNiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKwordGVzdF9wbGFu X2FkdmljZV9zb3VyY2VzID0gZmlsZXMoCisgICd0ZXN0X3BsYW5fYWR2aWNlLmMnLAorKQorCitp ZiBob3N0X3N5c3RlbSA9PSAnd2luZG93cycKKyAgdGVzdF9wbGFuX2FkdmljZV9zb3VyY2VzICs9 IHJjX2xpYl9nZW4ucHJvY2Vzcyh3aW4zMnZlcl9yYywgZXh0cmFfYXJnczogWworICAgICctLU5B TUUnLCAndGVzdF9wbGFuX2FkdmljZScsCisgICAgJy0tRklMRURFU0MnLCAndGVzdF9wbGFuX2Fk dmljZSAtIHRlc3Qgd2hldGhlciBnZW5lcmF0ZWQgcGxhbiBhZHZpY2Ugd29ya3MnLF0pCitlbmRp ZgorCit0ZXN0X3BsYW5fYWR2aWNlID0gc2hhcmVkX21vZHVsZSgndGVzdF9wbGFuX2FkdmljZScs CisgIHRlc3RfcGxhbl9hZHZpY2Vfc291cmNlcywKKyAgaW5jbHVkZV9kaXJlY3RvcmllczogcGdf cGxhbl9hZHZpY2VfaW5jLAorICBrd2FyZ3M6IHBnX3Rlc3RfbW9kX2FyZ3MsCispCit0ZXN0X2lu c3RhbGxfbGlicyArPSB0ZXN0X3BsYW5fYWR2aWNlCisKK3Rlc3RzICs9IHsKKyAgJ25hbWUnOiAn dGVzdF9wbGFuX2FkdmljZScsCisgICdzZCc6IG1lc29uLmN1cnJlbnRfc291cmNlX2RpcigpLAor ICAnYmQnOiBtZXNvbi5jdXJyZW50X2J1aWxkX2RpcigpLAorICAndGFwJzogeworICAgICd0ZXN0 cyc6IFsKKyAgICAgICd0LzAwMV9yZXBsYW5fcmVncmVzcy5wbCcsCisgICAgXSwKKyAgfSwKK30K ZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9wbGFuX2FkdmljZS90LzAwMV9yZXBs YW5fcmVncmVzcy5wbCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9wbGFuX2FkdmljZS90LzAwMV9y ZXBsYW5fcmVncmVzcy5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u MTNiMWEyMjU3MDAKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfcGxh bl9hZHZpY2UvdC8wMDFfcmVwbGFuX3JlZ3Jlc3MucGwKQEAgLTAsMCArMSw2NCBAQAorIyBDb3B5 cmlnaHQgKGMpIDIwMjEtMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAK KworIyBSdW4gdGhlIGNvcmUgcmVncmVzc2lvbiB0ZXN0cyB1bmRlciBwZ19wbGFuX2FkdmljZSB0 byBjaGVjayBmb3IgcHJvYmxlbXMuCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzIEZBVEFMID0+ ICdhbGwnOworCit1c2UgQ3dkICAgICAgICAgICAgcXcoYWJzX3BhdGgpOwordXNlIEZpbGU6OkJh c2VuYW1lIHF3KGRpcm5hbWUpOworCit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsKK3Vz ZSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczsKK3VzZSBUZXN0OjpNb3JlOworCisjIEluaXRpYWxp emUgdGhlIHByaW1hcnkgbm9kZQorbXkgJG5vZGUgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVy LT5uZXcoJ21haW4nKTsKKyRub2RlLT5pbml0KCk7CisKKyMgU2V0IHVwIG91ciBkZXNpcmVkIGNv bmZpZ3VyYXRpb24uCiskbm9kZS0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsIDw8RU9N KTsKK3NoYXJlZF9wcmVsb2FkX2xpYnJhcmllcz0ndGVzdF9wbGFuX2FkdmljZScKK3BnX3BsYW5f YWR2aWNlLmFsd2F5c19leHBsYWluX3N1cHBsaWVkX2FkdmljZT1mYWxzZQorRU9NCiskbm9kZS0+ c3RhcnQ7CisKK215ICRzcmNkaXIgPSBhYnNfcGF0aCgiLi4vLi4vLi4vLi4iKTsKKworIyAtLWRs cGF0aCBpcyBuZWVkZWQgdG8gYmUgYWJsZSB0byBmaW5kIHRoZSBsb2NhdGlvbiBvZiByZWdyZXNz LnNvCisjIGFuZCBhbnkgbGlicmFyaWVzIHRoZSByZWdyZXNzaW9uIHRlc3RzIHJlcXVpcmUuCitt eSAkZGxwYXRoID0gZGlybmFtZSgkRU5We1JFR1JFU1NfU0hMSUJ9KTsKKworIyAtLW91dHB1dGRp ciBwb2ludHMgdG8gdGhlIHBhdGggd2hlcmUgdG8gcGxhY2UgdGhlIG91dHB1dCBmaWxlcy4KK215 ICRvdXRwdXRkaXIgPSAkUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM6OnRtcF9jaGVjazsKKworIyAt LWlucHV0ZGlyIHBvaW50cyB0byB0aGUgcGF0aCBvZiB0aGUgaW5wdXQgZmlsZXMuCitteSAkaW5w dXRkaXIgPSAiJHNyY2Rpci9zcmMvdGVzdC9yZWdyZXNzIjsKKworIyBSdW4gdGhlIHRlc3RzLgor bXkgJHJjID0KKyAgc3lzdGVtKCRFTlZ7UEdfUkVHUkVTU30gLiAiICIKKwkgIC4gIi0tYmluZGly PSAiCisJICAuICItLWRscGF0aD1cIiRkbHBhdGhcIiAiCisJICAuICItLWhvc3Q9IiAuICRub2Rl LT5ob3N0IC4gIiAiCisJICAuICItLXBvcnQ9IiAuICRub2RlLT5wb3J0IC4gIiAiCisJICAuICIt LXNjaGVkdWxlPSRzcmNkaXIvc3JjL3Rlc3QvcmVncmVzcy9wYXJhbGxlbF9zY2hlZHVsZSAiCisJ ICAuICItLW1heC1jb25jdXJyZW50LXRlc3RzPTIwICIKKwkgIC4gIi0taW5wdXRkaXI9XCIkaW5w dXRkaXJcIiAiCisJICAuICItLW91dHB1dGRpcj1cIiRvdXRwdXRkaXJcIiIpOworCisjIER1bXAg b3V0IHRoZSByZWdyZXNzaW9uIGRpZmZzIGZpbGUsIGlmIHRoZXJlIGlzIG9uZQoraWYgKCRyYyAh PSAwKQoreworCW15ICRkaWZmcyA9ICIkb3V0cHV0ZGlyL3JlZ3Jlc3Npb24uZGlmZnMiOworCWlm ICgtZSAkZGlmZnMpCisJeworCQlwcmludCAiPT09IGR1bXBpbmcgJGRpZmZzID09PVxuIjsKKwkJ cHJpbnQgc2x1cnBfZmlsZSgkZGlmZnMpOworCQlwcmludCAiPT09IEVPRiA9PT1cbiI7CisJfQor fQorCisjIFJlcG9ydCByZXN1bHRzCitpcygkcmMsIDAsICdyZWdyZXNzaW9uIHRlc3RzIHBhc3Mn KTsKKworZG9uZV90ZXN0aW5nKCk7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3Rf cGxhbl9hZHZpY2UvdGVzdF9wbGFuX2FkdmljZS5jIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3Bs YW5fYWR2aWNlL3Rlc3RfcGxhbl9hZHZpY2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwMC4uOTk2Njc1ZGMzODYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1 bGVzL3Rlc3RfcGxhbl9hZHZpY2UvdGVzdF9wbGFuX2FkdmljZS5jCkBAIC0wLDAgKzEsMTQzIEBA CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiB0ZXN0X3BsYW5fYWR2aWNlLmMKKyAqCSAgVGVz dCBwZ19wbGFuX2FkdmljZSBieSBwbGFubmluZyBldmVyeSBxdWVyeSB3aXRoIGdlbmVyYXRlZCBh ZHZpY2UuCisgKgorICogV2l0aCB0aGlzIG1vZHVsZSBsb2FkZWQsIGV2ZXJ5IHRpbWUgYSBxdWVy eSBpcyBleGVjdXRlZCwgd2UgZW5kIHVwCisgKiBwbGFubmluZyBpdCB0d2ljZS4gVGhlIGZpcnN0 IHRpbWUgd2UgcGxhbiBpdCwgd2UgZ2VuZXJhdGUgcGxhbiBhZHZpY2UsCisgKiB3aGljaCB3ZSB0 aGVuIGZlZWQgYmFjayB0byBwZ19wbGFuX2FkdmljZSBhcyB0aGUgc3VwcGxpZWQgcGxhbiBhZHZp Y2UuCisgKiBJdCBpcyB0aGVuIHBsYW5uZWQgYSBzZWNvbmQgdGltZSB1c2luZyB0aGF0IGFkdmlj ZS4gVGhpcyBob3BlZnVsbHkKKyAqIGFsbG93cyB1cyB0byBkZXRlY3QgY2FzZXMgd2hlcmUgdGhl IGFkdmljZSBpcyBpbmNvcnJlY3Qgb3IgY2F1c2VzCisgKiBmYWlsdXJlcyBvciBwbGFuIGNoYW5n ZXMgZm9yIHNvbWUgcmVhc29uLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNi0yMDI0LCBQb3N0 Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqCSAgc3JjL3Rlc3QvbW9kdWxl cy90ZXN0X3BsYW5fYWR2aWNlL3Rlc3RfcGxhbl9hZHZpY2UuYworICoKKyAqLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorICovCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgImFjY2Vzcy94YWN0 LmgiCisjaW5jbHVkZSAiZm1nci5oIgorI2luY2x1ZGUgIm9wdGltaXplci9vcHRpbWl6ZXIuaCIK KyNpbmNsdWRlICJwZ19wbGFuX2FkdmljZS5oIgorI2luY2x1ZGUgInV0aWxzL2d1Yy5oIgorCitQ R19NT0RVTEVfTUFHSUM7CisKK3N0YXRpYyBib29sIGluX3JlY3Vyc2lvbiA9IGZhbHNlOworCitz dGF0aWMgY2hhciAqdGVzdF9wbGFuX2FkdmljZV9hZHZpc29yKFBsYW5uZXJHbG9iYWwgKmdsb2Is CisJCQkJCQkJCQkgIFF1ZXJ5ICpwYXJzZSwKKwkJCQkJCQkJCSAgY29uc3QgY2hhciAqcXVlcnlf c3RyaW5nLAorCQkJCQkJCQkJICBpbnQgY3Vyc29yT3B0aW9ucywKKwkJCQkJCQkJCSAgRXhwbGFp blN0YXRlICplcyk7CitzdGF0aWMgRGVmRWxlbSAqZmluZF9kZWZlbGVtX2J5X2RlZm5hbWUoTGlz dCAqZGVmbGlzdCwgY2hhciAqZGVmbmFtZSk7CisKKy8qCisgKiBJbml0aWFsaXplIHRoaXMgbW9k dWxlLgorICovCit2b2lkCitfUEdfaW5pdCh2b2lkKQoreworCXZvaWQJICAgKigqYWRkX2Fkdmlz b3JfZm4pIChwZ19wbGFuX2FkdmljZV9hZHZpc29yX2hvb2sgaG9vayk7CisKKwkvKgorCSAqIEFz ayBwZ19wbGFuX2FkdmljZSB0byBnZXQgYWR2aWNlIHN0cmluZ3MgZnJvbSB0ZXN0X3BsYW5fYWR2 aWNlX2Fkdmlzb3IKKwkgKi8KKwlhZGRfYWR2aXNvcl9mbiA9CisJCWxvYWRfZXh0ZXJuYWxfZnVu Y3Rpb24oInBnX3BsYW5fYWR2aWNlIiwgInBnX3BsYW5fYWR2aWNlX2FkZF9hZHZpc29yIiwKKwkJ CQkJCQkgICB0cnVlLCBOVUxMKTsKKworCSgqYWRkX2Fkdmlzb3JfZm4pICh0ZXN0X3BsYW5fYWR2 aWNlX2Fkdmlzb3IpOworfQorCisvKgorICogUmUtcGxhbiB0aGUgZ2l2ZW4gcXVlcnkgYW5kIHJl dHVybiB0aGUgZ2VuZXJhdGVkIGFkdmljZSBzdHJpbmcgYXMgdGhlCisgKiBzdXBwbGllZCBhZHZp Y2UuCisgKi8KK3N0YXRpYyBjaGFyICoKK3Rlc3RfcGxhbl9hZHZpY2VfYWR2aXNvcihQbGFubmVy R2xvYmFsICpnbG9iLCBRdWVyeSAqcGFyc2UsCisJCQkJCQkgY29uc3QgY2hhciAqcXVlcnlfc3Ry aW5nLCBpbnQgY3Vyc29yT3B0aW9ucywKKwkJCQkJCSBFeHBsYWluU3RhdGUgKmVzKQoreworCVBs YW5uZWRTdG10ICpwc3RtdDsKKwlpbnQJCQlzYXZlX25lc3RsZXZlbCA9IDA7CisJRGVmRWxlbSAg ICAqcGdwYV9pdGVtOworCURlZkVsZW0gICAgKmFkdmljZV9zdHJpbmdfaXRlbTsKKworCS8qCisJ ICogU2luY2UgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSB0aGUgcGxhbm5lciBhbmQgdHJp Z2dlcnMgcGxhbm5pbmcsCisJICogd2UgbmVlZCBhIHJlY3Vyc2lvbiBndWFyZC4KKwkgKi8KKwlp ZiAoaW5fcmVjdXJzaW9uKQorCQlyZXR1cm4gTlVMTDsKKworCVBHX1RSWSgpOworCXsKKwkJaW5f cmVjdXJzaW9uID0gdHJ1ZTsKKworCQkvKgorCQkgKiBQbGFubmluZyBjYW4gdHJpZ2dlciBleHBy ZXNzaW9uIGV2YWx1YXRpb24sIHdoaWNoIGNhbiByZXN1bHQgaW4KKwkJICogc2VuZGluZyBOT1RJ Q0UgbWVzc2FnZXMgb3Igb3RoZXIgb3V0cHV0IHRvIHRoZSBjbGllbnQuIFRvIGF2b2lkCisJCSAq IHRoYXQsIHdlIHNldCBjbGllbnRfbWluX21lc3NhZ2VzID0gRVJST1IgaW4gdGhlIGhvcGVzIG9m IGdldHRpbmcKKwkJICogdGhlIHNhbWUgb3V0cHV0IHdpdGggYW5kIHdpdGhvdXQgdGhpcyBtb2R1 bGUuCisJCSAqCisJCSAqIFdlIGFsc28gbmVlZCB0byBzZXQgcGdfcGxhbl9hZHZpY2UuYWx3YXlz X3N0b3JlX2FkdmljZV9kZXRhaWxzIHNvCisJCSAqIHRoYXQgcGdfcGxhbl9hZHZpY2Ugd2lsbCBn ZW5lcmF0ZSBhbiBhZHZpY2Ugc3RyaW5nLCBzaW5jZSB0aGUgd2hvbGUKKwkJICogcG9pbnQgb2Yg dGhpcyBmdW5jdGlvbiBpcyB0byBnZXQgYWNjZXNzIHRvIHRoYXQuCisJCSAqLworCQlzYXZlX25l c3RsZXZlbCA9IE5ld0dVQ05lc3RMZXZlbCgpOworCQlzZXRfY29uZmlnX29wdGlvbigiY2xpZW50 X21pbl9tZXNzYWdlcyIsICJlcnJvciIsCisJCQkJCQkgIFBHQ19TVVNFVCwgUEdDX1NfU0VTU0lP TiwKKwkJCQkJCSAgR1VDX0FDVElPTl9TQVZFLCB0cnVlLCAwLCBmYWxzZSk7CisJCXNldF9jb25m aWdfb3B0aW9uKCJwZ19wbGFuX2FkdmljZS5hbHdheXNfc3RvcmVfYWR2aWNlX2RldGFpbHMiLCAi dHJ1ZSIsCisJCQkJCQkgIFBHQ19TVVNFVCwgUEdDX1NfU0VTU0lPTiwKKwkJCQkJCSAgR1VDX0FD VElPTl9TQVZFLCB0cnVlLCAwLCBmYWxzZSk7CisKKwkJLyoKKwkJICogUmVwbGFuLiBXZSBtdXN0 IGNvcHkgdGhlIFF1ZXJ5LCBiZWNhdXNlIHRoZSBwbGFubmVyIG1vZGlmaWVzIGl0LgorCQkgKiAo QXMgbm90ZWQgZWxzZXdoZXJlLCB0aGF0J3MgdW5mb3J0dW5hdGU7IHBlcmhhcHMgaXQgd2lsbCBi ZSBmaXhlZAorCQkgKiBzb21lIGRheS4pCisJCSAqLworCQlwc3RtdCA9IHBsYW5uZXIoY29weU9i amVjdChwYXJzZSksIHF1ZXJ5X3N0cmluZywgY3Vyc29yT3B0aW9ucywKKwkJCQkJCWdsb2ItPmJv dW5kUGFyYW1zLCBlcyk7CisJfQorCVBHX0ZJTkFMTFkoKTsKKwl7CisJCWluX3JlY3Vyc2lvbiA9 IGZhbHNlOworCX0KKwlQR19FTkRfVFJZKCk7CisKKwkvKiBSb2xsIGJhY2sgYW55IEdVQyBjaGFu Z2VzICovCisJaWYgKHNhdmVfbmVzdGxldmVsID4gMCkKKwkJQXRFT1hhY3RfR1VDKGZhbHNlLCBz YXZlX25lc3RsZXZlbCk7CisKKwkvKiBFeHRyYWN0IGFuZCByZXR1cm4gdGhlIGFkdmljZSBzdHJp bmcgKi8KKwlwZ3BhX2l0ZW0gPSBmaW5kX2RlZmVsZW1fYnlfZGVmbmFtZShwc3RtdC0+ZXh0ZW5z aW9uX3N0YXRlLAorCQkJCQkJCQkJCSJwZ19wbGFuX2FkdmljZSIpOworCWlmIChwZ3BhX2l0ZW0g PT0gTlVMTCkKKwkJZWxvZyhFUlJPUiwgImV4dGVuc2lvbiBzdGF0ZSBmb3IgcGdfcGxhbl9hZHZp Y2Ugbm90IGZvdW5kIik7CisJYWR2aWNlX3N0cmluZ19pdGVtID0gZmluZF9kZWZlbGVtX2J5X2Rl Zm5hbWUoKExpc3QgKikgcGdwYV9pdGVtLT5hcmcsCisJCQkJCQkJCQkJCQkgImFkdmljZV9zdHJp bmciKTsKKwlpZiAoYWR2aWNlX3N0cmluZ19pdGVtID09IE5VTEwpCisJCWVsb2coRVJST1IsCisJ CQkgImFkdmljZSBzdHJpbmcgZm9yIHBnX3BsYW5fYWR2aWNlIG5vdCBmb3VuZCBpbiBleHRlbnNp b24gc3RhdGUiKTsKKwlyZXR1cm4gc3RyVmFsKGFkdmljZV9zdHJpbmdfaXRlbS0+YXJnKTsKK30K KworLyoKKyAqIFNlYXJjaCBhIGxpc3Qgb2YgRGVmRWxlbSBvYmplY3RzIGZvciBhIGdpdmVuIGRl Zm5hbWUuCisgKi8KK3N0YXRpYyBEZWZFbGVtICoKK2ZpbmRfZGVmZWxlbV9ieV9kZWZuYW1lKExp c3QgKmRlZmxpc3QsIGNoYXIgKmRlZm5hbWUpCit7CisJZm9yZWFjaF9ub2RlKERlZkVsZW0sIGl0 ZW0sIGRlZmxpc3QpCisJeworCQlpZiAoc3RyY21wKGl0ZW0tPmRlZm5hbWUsIGRlZm5hbWUpID09 IDApCisJCQlyZXR1cm4gaXRlbTsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KLS0gCjIuNTEuMAoK --00000000000096d31c064a804400 Content-Type: application/octet-stream; name="v15-0002-Add-pg_plan_advice-contrib-module.patch" Content-Disposition: attachment; filename="v15-0002-Add-pg_plan_advice-contrib-module.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mlh7d8kv1 RnJvbSBkY2Y1MWJkZDc4MzMwYTRjZmRiNzU1Nzg4MTc5YTM5MDczYmIxMjM0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IE1vbiwgMjYgSmFuIDIwMjYgMDk6NTY6MzYgLTA1MDAKU3ViamVjdDogW1BBVENIIHYxNSAy LzVdIEFkZCBwZ19wbGFuX2FkdmljZSBjb250cmliIG1vZHVsZS4KClByb3ZpZGUgYSBmYWNpbGl0 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 dCBpcyBvdXQgb2Ygc2NvcGUgZm9yIHRoaXMKY29tbWl0LgoKRm9yIG1vcmUgZGV0YWlscywgc2Vl IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvUkVBRE1FIG9yIHRoZSBTR01MCmRvY3VtZW50YXRpb24u CgpOT1RFOiBUaGVyZSBhcmUgc3RpbGwgc29tZSBrbm93biBwcm9ibGVtcyB3aXRoIHRoaXMgY29k ZSwgd2hpY2ggYXJlCmNhbGxlZCBvdXQgYnkgWFhYLgoKUmV2aWV3ZWQtYnk6IEx1a2FzIEZpdHRs IDxsdWthc0BmaXR0bC5jb20+ClJldmlld2VkLWJ5OiBKYWt1YiBXYXJ0YWsgPGpha3ViLndhcnRh a0BlbnRlcnByaXNlZGIuY29tPgpSZXZpZXdlZC1ieTogR3JlZyBCdXJkIDxncmVnQGJ1cmQubWU+ ClJldmlld2VkLWJ5OiBKYWNvYiBDaGFtcGlvbiA8amFjb2IuY2hhbXBpb25AZW50ZXJwcmlzZWRi LmNvbT4KUmV2aWV3ZWQtYnk6IEhhaWJvIFlhbiA8dHJpc3Rhbi55aW1AZ21haWwuY29tPgpSZXZp ZXdlZC1ieTogRGlhbiBGYXkgPGRpQG5tZmF5LmNvbT4KUmV2aWV3ZWQtYnk6IEFqYXkgUGFsIDxh amF5LnBhbC5rQGdtYWlsLmNvbT4KUmV2aWV3ZWQtYnk6IEpvaG4gTmF5bG9yIDxqb2huY25heWxv cmxzQGdtYWlsLmNvbT4KRGlzY3Vzc2lvbjogaHR0cDovL3Bvc3Rnci5lcy9tL0NBK1RnbW9aLUpo MVQ2UXlXb0NPRE1WUWRoVFVQWWthWmpXenR6UDFFbjQ9WkhvS1B6d0BtYWlsLmdtYWlsLmNvbQot LS0KIGNvbnRyaWIvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDEg KwogY29udHJpYi9tZXNvbi5idWlsZCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMSAr CiBjb250cmliL3BnX3BsYW5fYWR2aWNlLy5naXRpZ25vcmUgICAgICAgICAgICAgfCAgICAzICsK IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvTWFrZWZpbGUgICAgICAgICAgICAgICB8ICAgNTAgKwog Y29udHJpYi9wZ19wbGFuX2FkdmljZS9SRUFETUUgICAgICAgICAgICAgICAgIHwgIDI2MCArKwog Y29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9nYXRoZXIub3V0ICAgIHwgIDM3MSArKysK IC4uLi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9qb2luX29yZGVyLm91dCAgICB8ICA1MDkgKysr KwogLi4uL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL2pvaW5fc3RyYXRlZ3kub3V0IHwgIDMzOSAr KysKIC4uLi9leHBlY3RlZC9sb2NhbF9jb2xsZWN0b3Iub3V0ICAgICAgICAgICAgICB8ICAgNjcg KwogLi4uL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL3BhcnRpdGlvbndpc2Uub3V0IHwgIDQyNiAr KysrCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL3ByZXBhcmVkLm91dCAgfCAgIDY3 ICsKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvc2Nhbi5vdXQgICAgICB8ICA3NTcg KysrKysrCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL3NlbWlqb2luLm91dCAgfCAg Mzc3ICsrKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9zeW50YXgub3V0ICAgIHwg IDE5MiArKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9tZXNvbi5idWlsZCAgICAgICAgICAgIHwg ICA3OSArCiAuLi4vcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UtLTEuMC5zcWwgICAgfCAg IDQzICsKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UuYyAgICAgICB8ICA1 NjMgKysrKysKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UuY29udHJvbCB8 ICAgIDUgKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ19wbGFuX2FkdmljZS5oICAgICAgIHwg ICA2MSArCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfYXN0LmMgICAgICAgICAgICAgfCAg MzUxICsrKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2FzdC5oICAgICAgICAgICAgIHwg IDE4NSArKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2NvbGxlY3Rvci5jICAgICAgIHwg IDYzOSArKysrKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2NvbGxlY3Rvci5oICAgICAg IHwgICAxOCArCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfaWRlbnRpZmllci5jICAgICAg fCAgNDc2ICsrKysKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9pZGVudGlmaWVyLmggICAg ICB8ICAgNTIgKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2pvaW4uYyAgICAgICAgICAg IHwgIDYyOSArKysrKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2pvaW4uaCAgICAgICAg ICAgIHwgIDEwNSArCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfb3V0cHV0LmMgICAgICAg ICAgfCAgNTcxICsrKysrCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfb3V0cHV0LmggICAg ICAgICAgfCAgIDIyICsKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9wYXJzZXIueSAgICAg ICAgICB8ICAzMDEgKysrCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfcGxhbm5lci5jICAg ICAgICAgfCAyMTQwICsrKysrKysrKysrKysrKysrCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3Bn cGFfcGxhbm5lci5oICAgICAgICAgfCAgIDE3ICsKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdw YV9zY2FuLmMgICAgICAgICAgICB8ICAyODggKysrCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3Bn cGFfc2Nhbi5oICAgICAgICAgICAgfCAgIDg1ICsKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdw YV9zY2FubmVyLmwgICAgICAgICB8ICAyOTcgKysrCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3Bn cGFfdHJvdmUuYyAgICAgICAgICAgfCAgNTE2ICsrKysKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2Uv cGdwYV90cm92ZS5oICAgICAgICAgICB8ICAxMTQgKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9w Z3BhX3dhbGtlci5jICAgICAgICAgIHwgMTAwNiArKysrKysrKwogY29udHJpYi9wZ19wbGFuX2Fk dmljZS9wZ3BhX3dhbGtlci5oICAgICAgICAgIHwgIDE0MSArKwogY29udHJpYi9wZ19wbGFuX2Fk dmljZS9zcWwvZ2F0aGVyLnNxbCAgICAgICAgIHwgICA4NiArCiBjb250cmliL3BnX3BsYW5fYWR2 aWNlL3NxbC9qb2luX29yZGVyLnNxbCAgICAgfCAgMTQ1ICsrCiBjb250cmliL3BnX3BsYW5fYWR2 aWNlL3NxbC9qb2luX3N0cmF0ZWd5LnNxbCAgfCAgIDg0ICsKIC4uLi9wZ19wbGFuX2FkdmljZS9z cWwvbG9jYWxfY29sbGVjdG9yLnNxbCAgICB8ICAgNDQgKwogY29udHJpYi9wZ19wbGFuX2Fkdmlj ZS9zcWwvcGFydGl0aW9ud2lzZS5zcWwgIHwgICA5OSArCiBjb250cmliL3BnX3BsYW5fYWR2aWNl L3NxbC9wcmVwYXJlZC5zcWwgICAgICAgfCAgIDM3ICsKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2Uv c3FsL3NjYW4uc3FsICAgICAgICAgICB8ICAxOTUgKysKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2Uv c3FsL3NlbWlqb2luLnNxbCAgICAgICB8ICAxMTggKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9z cWwvc3ludGF4LnNxbCAgICAgICAgIHwgICA2OCArCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3Qv MDAxX3JlZ3Jlc3MucGwgICAgICAgfCAgMTQ4ICsrCiBkb2Mvc3JjL3NnbWwvY29udHJpYi5zZ21s ICAgICAgICAgICAgICAgICAgICAgfCAgICAxICsKIGRvYy9zcmMvc2dtbC9maWxlbGlzdC5zZ21s ICAgICAgICAgICAgICAgICAgICB8ICAgIDEgKwogZG9jL3NyYy9zZ21sL3BncGxhbmFkdmljZS5z Z21sICAgICAgICAgICAgICAgIHwgIDk2OSArKysrKysrKwogc3JjL3Rvb2xzL3BnaW5kZW50L3R5 cGVkZWZzLmxpc3QgICAgICAgICAgICAgIHwgICAzOSArCiA1MyBmaWxlcyBjaGFuZ2VkLCAxNDE1 OCBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2Fkdmlj ZS8uZ2l0aWdub3JlCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9N YWtlZmlsZQogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvUkVBRE1F CiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9nYXRo ZXIub3V0CiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3Rl ZC9qb2luX29yZGVyLm91dAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZp Y2UvZXhwZWN0ZWQvam9pbl9zdHJhdGVneS5vdXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmli L3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL2xvY2FsX2NvbGxlY3Rvci5vdXQKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL3BhcnRpdGlvbndpc2Uub3V0 CiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9wcmVw YXJlZC5vdXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVj dGVkL3NjYW4ub3V0CiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9l eHBlY3RlZC9zZW1pam9pbi5vdXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5f YWR2aWNlL2V4cGVjdGVkL3N5bnRheC5vdXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3Bn X3BsYW5fYWR2aWNlL21lc29uLmJ1aWxkCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19w bGFuX2FkdmljZS9wZ19wbGFuX2FkdmljZS0tMS4wLnNxbAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNv bnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UuYwogY3JlYXRlIG1vZGUgMTAwNjQ0 IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UuY29udHJvbAogY3JlYXRlIG1v ZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UuaAogY3JlYXRl IG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9hc3QuYwogY3JlYXRlIG1v ZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9hc3QuaAogY3JlYXRlIG1vZGUg MTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9jb2xsZWN0b3IuYwogY3JlYXRlIG1v ZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9jb2xsZWN0b3IuaAogY3JlYXRl IG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9pZGVudGlmaWVyLmMKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfaWRlbnRpZmllci5o CiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2pvaW4uYwog Y3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9qb2luLmgKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfb3V0cHV0LmMKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfb3V0cHV0LmgKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfcGFyc2VyLnkKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfcGxhbm5lci5jCiBj cmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3BsYW5uZXIuaAog Y3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9zY2FuLmMKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfc2Nhbi5oCiBjcmVh dGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3NjYW5uZXIubAogY3Jl YXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV90cm92ZS5jCiBjcmVh dGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3Ryb3ZlLmgKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfd2Fsa2VyLmMKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfd2Fsa2VyLmgKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9nYXRoZXIuc3FsCiBjcmVh dGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvam9pbl9vcmRlci5zcWwK IGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9qb2luX3N0cmF0 ZWd5LnNxbAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL2xv Y2FsX2NvbGxlY3Rvci5zcWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2 aWNlL3NxbC9wYXJ0aXRpb253aXNlLnNxbAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdf cGxhbl9hZHZpY2Uvc3FsL3ByZXBhcmVkLnNxbAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIv cGdfcGxhbl9hZHZpY2Uvc3FsL3NjYW4uc3FsCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9w Z19wbGFuX2FkdmljZS9zcWwvc2VtaWpvaW4uc3FsCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJp Yi9wZ19wbGFuX2FkdmljZS9zcWwvc3ludGF4LnNxbAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRy aWIvcGdfcGxhbl9hZHZpY2UvdC8wMDFfcmVncmVzcy5wbAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRv Yy9zcmMvc2dtbC9wZ3BsYW5hZHZpY2Uuc2dtbAoKZGlmZiAtLWdpdCBhL2NvbnRyaWIvTWFrZWZp bGUgYi9jb250cmliL01ha2VmaWxlCmluZGV4IDJmMGE4OGQzZjc3Li5kZDA0YzIwYWNkMiAxMDA2 NDQKLS0tIGEvY29udHJpYi9NYWtlZmlsZQorKysgYi9jb250cmliL01ha2VmaWxlCkBAIC0zNCw2 ICszNCw3IEBAIFNVQkRJUlMgPSBcCiAJCXBnX2ZyZWVzcGFjZW1hcCBcCiAJCXBnX2xvZ2ljYWxp bnNwZWN0IFwKIAkJcGdfb3ZlcmV4cGxhaW4gXAorCQlwZ19wbGFuX2FkdmljZSBcCiAJCXBnX3By ZXdhcm0JXAogCQlwZ19zdGF0X3N0YXRlbWVudHMgXAogCQlwZ19zdXJnZXJ5CVwKZGlmZiAtLWdp dCBhL2NvbnRyaWIvbWVzb24uYnVpbGQgYi9jb250cmliL21lc29uLmJ1aWxkCmluZGV4IGRlZjEz MjU3Y2JlLi41YTc1MmVhYzM0NyAxMDA2NDQKLS0tIGEvY29udHJpYi9tZXNvbi5idWlsZAorKysg Yi9jb250cmliL21lc29uLmJ1aWxkCkBAIC00OCw2ICs0OCw3IEBAIHN1YmRpcigncGdjcnlwdG8n KQogc3ViZGlyKCdwZ19mcmVlc3BhY2VtYXAnKQogc3ViZGlyKCdwZ19sb2dpY2FsaW5zcGVjdCcp CiBzdWJkaXIoJ3BnX292ZXJleHBsYWluJykKK3N1YmRpcigncGdfcGxhbl9hZHZpY2UnKQogc3Vi ZGlyKCdwZ19wcmV3YXJtJykKIHN1YmRpcigncGdyb3dsb2NrcycpCiBzdWJkaXIoJ3BnX3N0YXRf c3RhdGVtZW50cycpCmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlLy5naXRpZ25v cmUgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAuLjE5YTE0MjUzMDE5Ci0tLSAvZGV2L251bGwKKysrIGIvY29u dHJpYi9wZ19wbGFuX2FkdmljZS8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMyBAQAorL3BncGFfcGFy c2VyLmgKKy9wZ3BhX3BhcnNlci5jCisvcGdwYV9zY2FubmVyLmMKZGlmZiAtLWdpdCBhL2NvbnRy aWIvcGdfcGxhbl9hZHZpY2UvTWFrZWZpbGUgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL01ha2Vm aWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4xZDRjNTU5YWVkOAot LS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvTWFrZWZpbGUKQEAgLTAs MCArMSw1MCBAQAorIyBjb250cmliL3BnX3BsYW5fYWR2aWNlL01ha2VmaWxlCisKK01PRFVMRV9i aWcgPSBwZ19wbGFuX2FkdmljZQorT0JKUyA9IFwKKwkkKFdJTjMyUkVTKSBcCisJcGdfcGxhbl9h ZHZpY2UubyBcCisJcGdwYV9hc3QubyBcCisJcGdwYV9jb2xsZWN0b3IubyBcCisJcGdwYV9pZGVu dGlmaWVyLm8gXAorCXBncGFfam9pbi5vIFwKKwlwZ3BhX291dHB1dC5vIFwKKwlwZ3BhX3BhcnNl ci5vIFwKKwlwZ3BhX3BsYW5uZXIubyBcCisJcGdwYV9zY2FuLm8gXAorCXBncGFfc2Nhbm5lci5v IFwKKwlwZ3BhX3Ryb3ZlLm8gXAorCXBncGFfd2Fsa2VyLm8KKworRVhURU5TSU9OID0gcGdfcGxh bl9hZHZpY2UKK0RBVEEgPSBwZ19wbGFuX2FkdmljZS0tMS4wLnNxbAorUEdGSUxFREVTQyA9ICJw Z19wbGFuX2FkdmljZSAtIGhlbHAgdGhlIHBsYW5uZXIgZ2V0IHRoZSByaWdodCBwbGFuIgorCitS RUdSRVNTID0gZ2F0aGVyIGpvaW5fb3JkZXIgam9pbl9zdHJhdGVneSBwYXJ0aXRpb253aXNlIHNj YW4KK1RBUF9URVNUUyA9IDEKKworRVhUUkFfQ0xFQU4gPSBwZ3BhX3BhcnNlci5oIHBncGFfcGFy c2VyLmMgcGdwYV9zY2FubmVyLmMKKworIyByZXF1aXJlZCBmb3IgMDAxX3JlZ3Jlc3MucGwKK1JF R1JFU1NfU0hMSUI9JChhYnNfdG9wX2J1aWxkZGlyKS9zcmMvdGVzdC9yZWdyZXNzL3JlZ3Jlc3Mk KERMU1VGRklYKQorZXhwb3J0IFJFR1JFU1NfU0hMSUIKKworaWZkZWYgVVNFX1BHWFMKK1BHX0NP TkZJRyA9IHBnX2NvbmZpZworUEdYUyA6PSAkKHNoZWxsICQoUEdfQ09ORklHKSAtLXBneHMpCitp bmNsdWRlICQoUEdYUykKK2Vsc2UKK3N1YmRpciA9IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UKK3Rv cF9idWlsZGRpciA9IC4uLy4uCitpbmNsdWRlICQodG9wX2J1aWxkZGlyKS9zcmMvTWFrZWZpbGUu Z2xvYmFsCitpbmNsdWRlICQodG9wX3NyY2RpcikvY29udHJpYi9jb250cmliLWdsb2JhbC5tawor ZW5kaWYKKworIyBTZWUgbm90ZXMgaW4gc3JjL2JhY2tlbmQvcGFyc2VyL01ha2VmaWxlIGFib3V0 IHRoZSBmb2xsb3dpbmcgdHdvIHJ1bGVzCitwZ3BhX3BhcnNlci5oOiBwZ3BhX3BhcnNlci5jCisJ dG91Y2ggJEAKKworcGdwYV9wYXJzZXIuYzogQklTT05GTEFHUyArPSAtZAorCisjIEZvcmNlIHRo ZXNlIGRlcGVuZGVuY2llcyB0byBiZSBrbm93biBldmVuIHdpdGhvdXQgZGVwZW5kZW5jeSBpbmZv IGJ1aWx0OgorcGdwYV9wYXJzZXIubyBwZ3BhX3NjYW5uZXIubzogcGdwYV9wYXJzZXIuaApkaWZm IC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9SRUFETUUgYi9jb250cmliL3BnX3BsYW5f YWR2aWNlL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMGI4 ODhmZDgyZjIKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL1JFQURN RQpAQCAtMCwwICsxLDI2MCBAQAorY29udHJpYi9wZ19wbGFuX2FkdmljZS9SRUFETUUKKworUGxh biBBZHZpY2UKKz09PT09PT09PT09CisKK1RoaXMgbW9kdWxlIGltcGxlbWVudHMgYSBtaW5pLWxh bmd1YWdlIGZvciAicGxhbiBhZHZpY2UiIHRoYXQgYWxsb3dzIGZvcgorY29udHJvbCBvZiBjZXJ0 YWluIGtleSBwbGFubmVyIGRlY2lzaW9ucy4gR29hbHMgaW5jbHVkZSAoMSkgZW5mb3JjaW5nIHBs YW4KK3N0YWJpbGl0eSAobXkgcHJldmlvdXMgcGxhbiB3YXMgZ29vZCBhbmQgSSB3b3VsZCBsaWtl IHRvIGtlZXAgZ2V0dGluZyBhCitzaW1pbGFyIG9uZSkgYW5kICgyKSBhbGxvd2luZyB1c2VycyB0 byBleHBlcmltZW50IHdpdGggcGxhbnMgb3RoZXIgdGhhbgordGhlIG9uZSBwcmVmZXJyZWQgYnkg dGhlIG9wdGltaXplci4gTm9uLWdvYWxzIGluY2x1ZGUgKDEpIGNvbnRyb2xsaW5nCitldmVyeSBw b3NzaWJsZSBwbGFubmVyIGRlY2lzaW9uIGFuZCAoMikgZm9yY2luZyBjb25zaWRlcmF0aW9uIG9m IHBsYW5zCit0aGF0IHRoZSBvcHRpbWl6ZXIgcmVqZWN0cyBmb3IgcmVhc29ucyBvdGhlciB0aGFu IGNvc3QuIChUaGVyZSBpcyBzb21lCityb29tIGZvciBiaWtlc2hlZGRpbmcgYWJvdXQgd2hhdCBl eGFjdGx5IHRoaXMgbm9uLWdvYWwgbWVhbnM6IHdoYXQgaWYKK3dlIHNraXAgcGF0aCBnZW5lcmF0 aW9uIGVudGlyZWx5IGZvciBhIGNlcnRhaW4gY2FzZSBvbiB0aGUgdGhlb3J5IHRoYXQKK3dlIGtu b3cgaXQgY2Fubm90IHdpbiBvbiBjb3N0PyBEb2VzIHRoYXQgY291bnQgYXMgYSBjb3N0LWJhc2Vk IHJlamVjdGlvbgorZXZlbiB0aG91Z2ggbm8gY29zdCB3YXMgZXZlciBjb21wdXRlZD8pCisKK0dl bmVyYWxseSwgcGxhbiBhZHZpY2UgaXMgYSBzZXJpZXMgb2Ygd2hpdGVzcGFjZS1zZXBhcmF0ZWQg YWR2aWNlIGl0ZW1zLAorZWFjaCBvZiB3aGljaCBhcHBsaWVzIGFuIGFkdmljZSB0YWcgdG8gYSBs aXN0IG9mIGFkdmljZSB0YXJnZXRzLiBGb3IKK2V4YW1wbGUsICJTRVFfU0NBTihmb28pIEhBU0hf Sk9JTihiYXJAc3MpIiBjb250YWlucyB0d28gaXRlbXMgb2YgYWR2aWNlLAordGhlIGZpcnN0IG9m IHdoaWNoIGFwcGxpZXMgdGhlIFNFUV9TQ0FOIHRhZyB0byAiZm9vIiBhbmQgdGhlIHNlY29uZCBv Zgord2hpY2ggYXBwbGllcyB0aGUgSEFTSF9KT0lOIHRhZyB0byAiYmFyQHNzIi4gSW4gdGhpcyBz aW1wbGUgZXhhbXBsZSwgZWFjaAordGFyZ2V0IGlkZW50aWZpZXMgYSBzaW5nbGUgcmVsYXRpb247 IHNlZSAiUmVsYXRpb24gSWRlbnRpZmllcnMiLCBiZWxvdy4KK0FkdmljZSB0YWdzIGNhbiBhbHNv IGJlIGFwcGxpZWQgdG8gZ3JvdXBzIG9mIHJlbGF0aW9uczsgZm9yIGV4YW1wbGUsCisiSEFTSF9K T0lOKGJheiAoYmxldGNoIHF1dXgpKSIgYXBwbGllcyB0aGUgSEFTSF9KT0lOIHRhZyB0byB0aGUg c2luZ2xlCityZWxhdGlvbiBpZGVudGlmaWVyICJiYXoiIGFzIHdlbGwgYXMgdG8gdGhlIDItaXRl bSBsaXN0IGNvbnRhaW5pbmcKKyJibGV0Y2giIGFuZCAicXV1eCIuCisKK0NyaXRpY2FsbHksIHRo aXMgbW9kdWxlIGtub3dzIGJvdGggaG93IHRvIGdlbmVyYXRlIHBsYW4gYWR2aWNlIGZyb20gYW4K K2FscmVhZHktZXhpc3RpbmcgcGxhbiwgYW5kIGFsc28gaG93IHRvIGVuZm9yY2UgaXQgZHVyaW5n IGZ1dHVyZSBwbGFubmluZworY3ljbGVzLiBFdmVyeXRoaW5nIGl0IGRvZXMgaXMgaW50ZW5kZWQg dG8gYmUgInJvdW5kLXRyaXAgc2FmZSI6IGlmIHlvdQorZ2VuZXJhdGUgYWR2aWNlIGZyb20gYSBw bGFuIGFuZCB0aGVuIGZlZWQgdGhhdCBiYWNrIGludG8gYSBmdXR1cmUgcGxhbmluZworY3ljbGUs IGVhY2ggcGllY2Ugb2YgYWR2aWNlIHNob3VsZCBiZSBndWFyYW50ZWVkIHRvIGFwcGx5IHRvIHRo ZSBleGFjdGx5IHRoZQorc2FtZSBwYXJ0IG9mIHRoZSBxdWVyeSBmcm9tIHdoaWNoIGl0IHdhcyBn ZW5lcmF0ZWQgd2l0aG91dCBhbWJpZ3VpdHkgb3IKK2d1ZXNzd29yaywgYW5kIGl0IHNob3VsZCBz dWNjZXNmdWxseSBlbmZvcmNlIHRoZSBzYW1lIHBsYW5uaW5nIGRlY2lzaW9uIHRoYXQKK2xlZCB0 byBpdCBiZWluZyBnZW5lcmF0ZWQgaW4gdGhlIGZpcnN0IHBsYWNlLiBOb3RlIHRoYXQgdGhlcmUg aXMgbm8KK2ludGVudGlvbiB0aGF0IHRoZXNlIGd1YXJhbnRlZXMgaG9sZCBpbiB0aGUgcHJlc2Vu Y2Ugb2YgaW50ZXJ2ZW5pbmcgRERMOworZS5nLiBpZiB5b3UgY2hhbmdlIHRoZSBwcm9wZXJ0aWVz IG9mIGEgZnVuY3Rpb24gc28gdGhhdCBhIHN1YnF1ZXJ5IGlzIG5vCitsb25nZXIgaW5saW5lZCwg b3IgaWYgeW91IGRyb3AgYW4gaW5kZXggbmFtZWQgaW4gdGhlIHBsYW4gYWR2aWNlLCB0aGUgYWR2 aWNlCitpc24ndCBnb2luZyB0byB3b3JrIGFueSBtb3JlLiBUaGF0J3MgZXhwZWN0ZWQuCisKK1Ro aXMgbW9kdWxlIGFpbXMgdG8gZm9yY2UgdGhlIHBsYW5uZXIgdG8gZm9sbG93IGFueSBwcm92aWRl ZCBhZHZpY2Ugd2l0aG91dAorcmVnYXJkIHRvIHdoZXRoZXIgaXQgaXMgYXBwZWFycyB0byBiZSBn b29kIGFkdmljZSBvciBiYWQgYWR2aWNlLiAgSWYgdGhlCit1c2VyIHByb3ZpZGVzIGJhZCBhZHZp Y2UsIHdoZXRoZXIgZGVyaXZlZCBmcm9tIGEgcHJldmlvdXNseS1nZW5lcmF0ZWQgcGxhbgorb3Ig bWFudWFsbHkgd3JpdHRlbiwgdGhleSBtYXkgZ2V0IGEgYmFkIHBsYW4uIFdlIHJlZ2FyZCB0aGlz IGFzIHVzZXIgZXJyb3IsCitub3QgYSBkZWZlY3QgaW4gdGhpcyBtb2R1bGUuIEl0IHNlZW1zIGxp a2VseSB0aGF0IGFwcGx5aW5nIGFkdmljZQoranVkaWNpb3VzbHkgYW5kIG9ubHkgd2hlbiB0cnVs eSByZXF1aXJlZCB0byBhdm9pZCBwcm9ibGVtcyB3aWxsIGJlIGEgbW9yZQorc3VjY2Vzc2Z1bCBz dHJhdGVneSB0aGFuIGFwcGx5aW5nIGl0IHdpdGggYSBicm9hZCBicnVzaCwgYnV0IHVzZXJzIGFy ZSBmcmVlCit0byBleHBlcmltZW50IHdpdGggd2hhdGV2ZXIgc3RyYXRlZ2llcyB0aGV5IHRoaW5r IGJlc3QuCisKK1JlbGF0aW9uIElkZW50aWZpZXJzCis9PT09PT09PT09PT09PT09PT09PQorCitV bmlxdWVseSBpZGVudGlmeWluZyB0aGUgcGFydCBvZiBhIHF1ZXJ5IHRvIHdoaWNoIGEgY2VydGFp biBwaWVjZSBvZgorYWR2aWNlIGFwcGxpZXMgaXMgaGFyZGVyIHRoYW4gaXQgc291bmRzLiBPdXIg YmFzaWMgYXBwcm9hY2ggaXMgdG8gdXNlCityZWxhdGlvbiBhbGlhc2VzIGFzIGEgc3RhcnRpbmcg cG9pbnQsIGFuZCB0aGVuIGRpc2FtYmlndWF0ZS4gVGhlcmUgYXJlCit0aHJlZSB3YXlzIHRoYXQg c2FtZSByZWxhdGlvbiBhbGlhcyBjYW4gb2NjdXIgbXVsdGlwbGUgdGltZXM6CisKKzEuIEl0IGNh biBhcHBlYXIgaW4gbW9yZSB0aGFuIG9uZSBzdWJxdWVyeS4KKworMi4gSXQgY2FuIGFwcGVhciBt b3JlIHRoYW4gb25jZSBpbiB0aGUgc2FtZSBzdWJxdWVyeSwKKyAgIGUuZy4gKGZvbyBKT0lOIGJh cikgeCBKT0lOIGZvby4KKworMy4gVGhlIHRhYmxlIGNhbiBiZSBwYXJ0aXRpb25lZC4KKworQW55 IGNvbWJpbmF0aW9uIG9mIHRoZXNlIHRoaW5ncyBjYW4gb2NjdXIgc2ltdWx0YW5lb3VzbHkuICBU aGVyZWZvcmUsIG91cgorZ2VuZXJhbCBzeW50YXggZm9yIGEgcmVsYXRpb24gaWRlbnRpZmllciBp czoKKworYWxpYXNfbmFtZSNvY2N1cnJlbmNlX251bWJlci9wYXJ0aXRpb25fc2NoZW1hLnBhcnRp dGlvbl9uYW1lQHBsYW5fbmFtZQorCitBbGwgY29tcG9uZW50cyBleGNlcHQgZm9yIHRoZSBhbGlh c19uYW1lIGFyZSBvcHRpb25hbCBhbmQgaW5jbHVkZWQgb25seQord2hlbiByZXF1aXJlZC4gV2hl biBhIGNvbXBvbmVudCBpcyBvbWl0dGVkLCB0aGUgYXNzb2NpYXRlZCBwdW5jdHVhdGlvbgorbXVz dCBhbHNvIGJlIG9taXR0ZWQuIE9jY3VycmVuY2UgbnVtYmVycyBhcmUgY291bnRlZCBpZ25vcmlu ZyBjaGlsZHJlbiBvZgorcGFydGl0aW9uZWQgdGFibGVzLiAgV2hlbiB0aGUgZ2VuZXJhdGVkIG9j Y3VycmVuY2UgbnVtYmVyIGlzIDEsIHdlIG9taXQKK3RoZSBvY2N1cnJlbmNlIG51bWJlci4gVGhl IHBhcnRpdGlvbiBzY2hlbWEgYW5kIHBhcnRpdGlvbiBuYW1lIGFyZSBpbmNsdWRlZAorb25seSBm b3IgY2hpbGRyZW4gb2YgcGFydGl0aW9uZWQgdGFibGVzLiBJbiBnZW5lcmF0ZWQgYWR2aWNlLCB0 aGUKK3BhcnRpdGlvbl9zY2hlbWEgaXMgYWx3YXlzIGluY2x1ZGVkIHdoZW5ldmVyIHRoZXJlIGlz IGEgcGFydGl0aW9uX25hbWUsCitidXQgdXNlci13cml0dGVuIGFkdmljZSBtYXkgbWVudGlvbiB0 aGUgbmFtZSBhbmQgb21pdCB0aGUgc2NoZW1hLiBUaGUKK3BsYW5fbmFtZSBpcyBvbWl0dGVkIGZv ciB0aGUgdG9wLWxldmVsIFBsYW5uZXJJbmZvLgorCitTY2FuIEFkdmljZQorPT09PT09PT09PT0K KworRm9yIG1hbnkgdHlwZXMgb2Ygc2Nhbiwgbm8gYWR2aWNlIGlzIGdlbmVyYXRlZCBvciBwb3Nz aWJsZTsgZm9yIGluc3RhbmNlLAorYSBzdWJxdWVyeSBpcyBhbHdheXMgc2Nhbm5lZCB1c2luZyBh IHN1YnF1ZXJ5IHNjYW4uIFdoaWxlIHRoYXQgc2NhbiBtYXkgYmUKK2VsaWRlZCB2aWEgc2V0cmVm cyBwcm9jZXNzaW5nLCB0aGlzIGRvZXNuJ3QgY2hhbmdlIHRoZSBmYWN0IHRoYXQgb25seSBvbmUK K2Jhc2ljIGFwcHJvYWNoIGV4aXN0cy4gSGVuY2UsIHNjYW4gYWR2aWNlIGFwcGxpZXMgbW9zdGx5 IHRvIHJlbGF0aW9ucywgd2hpY2gKK2NhbiBiZSBzY2FubmVkIGluIG11bHRpcGxlIHdheXMuCisK K1dlIHRlbmQgdG8gdGhpbmsgb2YgYSBzY2FuIGFzIHRhcmdldGluZyBhIHNpbmdsZSByZWxhdGlv biwgYW5kIHRoYXQncworbm9ybWFsbHkgdGhlIGNhc2UsIGJ1dCBpdCBkb2Vzbid0IGhhdmUgdG8g YmUuIEZvciBpbnN0YW5jZSwgaWYgYSBqb2luIGlzCitwcm92ZW4gZW1wdHksIHRoZSB3aG9sZSB0 aGluZyBtYXkgYmUgcmVwbGFjZWQgd2l0aCBhIHNpbmdsZSBSZXN1bHQgbm9kZQord2hpY2gsIGlu IGVmZmVjdCwgaXMgYSBkZWdlbmVyYXRlIHNjYW4gb2YgZXZlcnkgcmVsYXRpb24gaW4gdGhlIGNv bGxhcHNlZAorcG9ydGlvbiBvZiB0aGUgam9pbiB0cmVlLiBTaW1pbGFybHksIGl0J3MgcG9zc2li bGUgdG8gaW5qZWN0IGEgY3VzdG9tIHNjYW4KK2luIHN1Y2ggYSB3YXkgdGhhdCBpdCByZXBsYWNl cyBhbiBlbnRpcmUgam9pbi4gSWYgd2UgZXZlciBlbWl0IGFkdmljZQorZm9yIHRoZXNlIGNhc2Vz LCBpdCB3b3VsZCB0YXJnZXQgc2V0cyBvZiByZWxhdGlvbiBpZGVudGlmaWVycyBzdXJyb3VuZGVk CitieSBwYXJlbnRoZXNlcywgZS5nLiBTT01FX1NPUlRfT0ZfU0NBTihmb28gKGJhciBiYXopKSB3 b3VsZCBtZWFuIHRoYXQgdGhlCit0aGUgZ2l2ZW4gc2NhbiB0eXBlIHdvdWxkIGJlIHVzZWQgZm9y IGZvbyBhcyBhIHNpbmdsZSByZWxhdGlvbiBhbmQgYWxzbyB0aGUKK2NvbWJpbmF0aW9uIG9mIGJh ciBhbmQgYmF6IGFzIGEgam9pbiBwcm9kdWN0LiBXZSBoYXZlIG5vIHN1Y2ggY2FzZXMgYXQKK3By ZXNlbnQuCisKK0ZvciBpbmRleCBhbmQgaW5kZXgtb25seSBzY2FucywgYm90aCB0aGUgcmVsYXRp b24gYmVpbmcgc2Nhbm5lZCBhbmQgdGhlCitpbmRleCBvciBpbmRleGVzIGJlaW5nIHVzZWQgbXVz dCBiZSBzcGVjaWZpZWQuIEZvciBleGFtcGxlLCBJTkRFWF9TQ0FOKGZvbworZm9vX2FfaWR4IGJh ciBiYXJfYl9pZHgpIGluZGljYXRlcyB0aGF0IGFuIGluZGV4IHNjYW4gKG5vdCBhbiBpbmRleC1v bmx5CitzY2FuKSBzaG91bGQgYmUgdXNlZCBvbiBmb29fYV9pZHggd2hlbiBzY2FubmluZyBmb28s IGFuZCB0aGF0IGFuIGluZGV4IHNjYW4KK3Nob3VsZCBiZSB1c2VkIG9uIGJhcl9iX2lkeCB3aGVu IHNjYW5uaW5nIGJhci4KKworQml0bWFwIGhlYXAgc2NhbnMgY3VycmVudGx5IGRvIG5vdCBhbGxv dyBmb3IgYW4gaW5kZXggc3BlY2lmaWNhdGlvbjoKK0JJVE1BUF9IRUFQX1NDQU4oZm9vIGJhcikg c2ltcGx5IG1lYW5zIHRoYXQgZWFjaCBvZiBmb28gYW5kIGJhciBzaG91bGQgdXNlCitzb21lIHNv cnQgb2YgYml0bWFwIGhlYXAgc2Nhbi4KKworSm9pbiBPcmRlciBBZHZpY2UKKz09PT09PT09PT09 PT09PT09CisKK1RoZSBKT0lOX09SREVSIHRhZyBzcGVjaWZpZXMgdGhlIG9yZGVyIGluIHdoaWNo IHNldmVyYWwgdGFibGVzIHRoYXQgYXJlCitwYXJ0IG9mIHRoZSBzYW1lIGpvaW4gcHJvYmxlbSBz aG91bGQgYmUgam9pbmVkLiBFYWNoIHN1YnF1ZXJ5IChleGNlcHQgZm9yCit0aG9zZSB0aGF0IGFy ZSBpbmxpbmVkKSBpcyBhIHNlcGFyYXRlIGpvaW4gcHJvYmxlbS4gV2l0aGluIGEgc3VicXVlcnks CitwYXJ0aXRpb253aXNlIGpvaW5zIGNhbiBjcmVhdGUgYWRkaXRpb25hbCwgc2VwYXJhdGUgam9p biBwcm9ibGVtcy4gSGVuY2UsCitxdWVyaWVzIGludm9sdmluZyBwYXJ0aXRpb253aXNlIGpvaW5z IG1heSB1c2UgSk9JTl9PUkRFUigpIG1hbnkgdGltZXMuCisKK1dlIHRha2UgdGhlIGNhbm9uaWNh bCBqb2luIHN0cnVjdHVyZSB0byBiZSBhbiBvdXRlci1kZWVwIHRyZWUsIHNvCitKT0lOX09SREVS KHQxIHQyIHQzKSBzYXlzIHRoYXQgdDEgaXMgdGhlIGRyaXZpbmcgdGFibGUgYW5kIHNob3VsZCBi ZSBqb2luZWQKK2ZpcnN0IHRvIHQyIGFuZCB0aGVuIHRvIHQzLiBJZiB0aGUgam9pbiBwcm9ibGVt IGludm9sdmVzIGFkZGl0aW9uYWwgdGFibGVzLAordGhleSBjYW4gYmUgam9pbmVkIGluIGFueSBv cmRlciBhZnRlciB0aGUgam9pbiBiZXR3ZWVuIHQxLCB0MiwgYW5kIHQzIGhhcworYmVlbiBjb25z dHJ1Y3R1cmVkLiBHZW5lcmF0ZWQgam9pbiBhZHZpY2UgYWx3YXlzIG1lbnRpb25zIGFsbCB0YWJs ZXMKK2luIHRoZSBqb2luIHByb2JsZW0sIGJ1dCBtYW51YWxseSB3cml0dGVuIGpvaW4gYWR2aWNl IG5lZWQgbm90IGRvIHNvLgorCitGb3IgdHJlZXMgd2hpY2ggYXJlIG5vdCBvdXRlci1kZWVwLCBw YXJlbnRoZXNlcyBjYW4gYmUgdXNlZC4gRm9yIGV4YW1wbGUsCitKT0lOX09SREVSKHQxICh0MiB0 MykpIHNheXMgdGhhdCB0aGUgdG9wLWxldmVsIGpvaW4gc2hvdWxkIGhhdmUgdDEgb24gdGhlCitv dXRlciBzaWRlIGFuZCBhIGpvaW4gYmV0d2VlbiB0MiBhbmQgdDMgb24gdGhlIGlubmVyIHNpZGUu IFRoYXQgam9pbiBzaG91bGQKK2JlIGNvbnN0cnVjdGVkIHNvIHRoYXQgdDIgaXMgb24gdGhlIG91 dGVyIHNpZGUgYW5kIHQzIGlzIG9uIHRoZSBpbm5lciBzaWRlLgorCitJbiBzb21lIGNhc2VzLCBp dCdzIG5vdCBwb3NzaWJsZSB0byBmdWxseSBzcGVjaWZ5IHRoZSBqb2luIG9yZGVyIGluIHRoaXMg d2F5LgorRm9yIGV4YW1wbGUsIGlmIHQyIGFuZCB0MyBhcmUgYmVpbmcgc2Nhbm5lZCBieSBhIHNp bmdsZSBjdXN0b20gc2NhbiBvciBmb3JlaWduCitzY2FuLCBvciBpZiBhIHBhcnRpdGlvbndpc2Ug am9pbiBpcyBiZWluZyBwZXJmb3JtZWQgYmV0d2VlbiB0aG9zZSB0YWJsZXMsIHRoZW4KK2l0J3Mg aW1wb3NzaWJsZSB0byBzYXkgdGhhdCB0MiBpcyB0aGUgb3V0ZXIgdGFibGUgYW5kIHQzIGlzIHRo ZSBpbm5lciB0YWJsZSwKK29yIHRoZSBvdGhlciB3YXkgYXJvdW5kOyBpdCdzIGp1c3QgdW5kZWZp bmVkLiBJbiBzdWNoIGNhc2VzLCB3ZSBnZW5lcmF0ZQoram9pbiBhZHZpY2UgdGhhdCB1c2VzIGN1 cmx5IGJyYWNlcywgaW50ZW5kaW5nIHRvIGluZGljYXRlIGEgbGFjayBvZiBvcmRlcmluZzoKK0pP SU5fT1JERVIodDEge3QyIHQzfSkgc2F5cyB0aGF0IHRoZSB1cHBlcm1vc3Qgam9pbiBzaG91bGQg aGF2ZSB0MSBvbiB0aGUgb3V0ZXIKK3NpZGUgYW5kIHNvbWUga2luZCBvZiBqb2luIGJldHdlZW4g dDIgYW5kIHQzIG9uIHRoZSBpbm5lciBzaWRlLCBidXQgd2l0aG91dAorc2F5aW5nIGhvdyB0aGF0 IGpvaW4gbXVzdCBiZSBwZXJmb3JtZWQgb3IgYW55dGhpbmcgYWJvdXQgd2hpY2ggcmVsYXRpb24g c2hvdWxkCithcHBlYXIgb24gd2hpY2ggc2lkZSBvZiB0aGUgam9pbiwgb3IgZXZlbiB3aGV0aGVy IHRoaXMga2luZCBvZiBqb2luIGhhcyBzaWRlcy4KKworSm9pbiBTdHJhdGVneSBBZHZpY2UKKz09 PT09PT09PT09PT09PT09PT09CisKK1RhZ3Mgc3VjaCBhcyBORVNURURfTE9PUF9QTEFJTiBzcGVj aWZ5IHRoZSBtZXRob2QgdGhhdCBzaG91bGQgYmUgdXNlZCB0bworcGVyZm9ybSBhIGNlcnRhaW4g am9pbi4gTW9yZSBzcGVjaWZpY2FsbHksIE5FU1RFRF9MT09QX1BMQUlOKHggKHkgeikpIHNheXMK K3RoYXQgdGhlIHBsYW4gc2hvdWxkIHB1dCB0aGUgcmVsYXRpb24gd2hvc2UgaWRlbnRpZmllciBp cyAieCIgb24gdGhlIGlubmVyCitzaWRlIG9mIGEgcGxhaW4gbmVzdGVkIGxvb3AgKG9uZSB3aXRo b3V0IG1hdGVyaWFsaXphdGlvbiBvciBtZW1vaXphdGlvbikKK2FuZCB0aGF0IGl0IHNob3VsZCBh bHNvIHB1dCBhIGpvaW4gYmV0d2VlbiB0aGUgcmVsYXRpb24gd2hvc2UgaWRlbnRpZmllciBpcwor InkiIGFuZCB0aGUgcmVsYXRpb24gd2hvc2UgaWRlbnRpZmllciBpcyAieiIgb24gdGhlIGlubmVy IHNpZGUgb2YgYSBuZXN0ZWQKK2xvb3AuIEhlbmNlLCBmb3IgYW4gTi10YWJsZSBqb2luIHByb2Js ZW0sIHRoZXJlIHdpbGwgYmUgTi0xIHBpZWNlcyBvZiBqb2luCitzdHJhdGVneSBhZHZpY2U7IG5v IGpvaW4gc3RyYXRlZ3kgYWR2aWNlIGlzIHJlcXVpcmVkIGZvciB0aGUgb3V0ZXJtb3N0Cit0YWJs ZSBpbiB0aGUgam9pbiBwcm9ibGVtLgorCitDb25zaWRlcmluZyB0aGF0IHdlIGhhdmUgYm90aCBq b2luIG9yZGVyIGFkdmljZSBhbmQgam9pbiBzdHJhdGVneSBhZHZpY2UsCitpdCBtaWdodCBzZWVt IG5hdHVyYWwgdG8gc2F5IHRoYXQgTkVTVEVEX0xPT1BfUExBSU4oeCkgc2hvdWxkIGJlIHJlZGVm aW5lZAordG8gbWVhbiB0aGF0IHggc2hvdWxkIGFwcGVhciBieSBpdHNlbGYgb24gb25lIHNpZGUg b3IgdGhlIG90aGVyIG9mIGEgbmVzdGVkCitsb29wLCByYXRoZXIgdGhhbiBzcGVjaWZpY2FsbHkg b24gdGhlIGlubmVyIHNpZGUsIGJ1dCB0aGlzIGRlZmluaXRpb24gYXBwZWFycwordXNlbGVzcyBp biBwcmFjdGljZS4gSXQgZ2l2ZXMgdGhlIHBsYW5uZXIgdG9vIG11Y2ggZnJlZWRvbSB0byBkbyB0 aGluZ3MgdGhhdAorYmVhciBsaXR0bGUgcmVzZW1ibGFuY2UgdG8gd2hhdCB0aGUgdXNlciBwcm9i YWJseSBoYWQgaW4gbWluZC4gVGhpcyBtYWtlcworb25seSBhIGxpbWl0ZWQgYW1vdW50IG9mIHBy YWN0aWNhbCBkaWZmZXJlbmNlIGluIHRoZSBjYXNlIG9mIGEgbWVyZ2Ugam9pbiBvcgordW5wYXJh bWV0ZXJpemVkIG5lc3RlZCBsb29wLCBidXQgZm9yIGEgcGFyYW1ldGVyaXplZCBuZXN0ZWQgbG9v cCBvciBhIGhhc2gKK2pvaW4sIHRoZSB0d28gc2lkZXMgYXJlIHRyZWF0ZWQgdmVyeSBkaWZmZXJl bnRseSBhbmQgc2F5aW5nIHRoYXQgYSBjZXJ0YWluCityZWxhdGlvbiBzaG91bGQgYmUgaW52b2x2 ZWQgaW4gb25lIG9mIHRob3NlIG9wZXJhdGlvbnMgd2l0aG91dCBzYXlpbmcgd2hpY2gKK3JvbGUg aXQgc2hvdWxkIHRha2UgaXNuJ3Qgc2F5aW5nIG11Y2guCisKK1RoaXMgY2hvaWNlIG9mIGRlZmlu aXRpb24gaW1wbGllcyB0aGF0IGpvaW4gc3RyYXRlZ3kgYWR2aWNlIGFsc28gaW1wb3NlcyBzb21l Citqb2luIG9yZGVyIGNvbnN0cmFpbnRzLiBGb3IgZXhhbXBsZSwgZ2l2ZW4gYSBqb2luIGJldHdl ZW4gZm9vIGFuZCBiYXIsCitIQVNIX0pPSU4oYmFyKSBpbXBsaWVzIHRoYXQgZm9vIGlzIHRoZSBk cml2aW5nIHRhYmxlLiBPdGhlcndpc2UsIGl0IHdvdWxkCitiZSBpbXBvc3NpYmxlIHRvIHB1dCBi YXIgYmVuZWF0aCB0aGUgaW5uZXIgc2lkZSBvZiBhIEhhc2ggSm9pbi4KKworTm90ZSB0aGF0LCBn aXZlbiB0aGlzIGRlZmluaXRpb24sIGl0J3MgcmVhc29uYWJsZSB0byBjb25zaWRlciBkZWxldGlu ZyB0aGUKK2pvaW4gb3JkZXIgYWR2aWNlIGJ1dCBhcHBseWluZyB0aGUgam9pbiBzdHJhdGVneSBh ZHZpY2UuIEZvciBleGFtcGxlLAorY29uc2lkZXIgYSBzdGFyIHNjaGVtYSB3aXRoIHRhYmxlcyBm YWN0LCBkaW0xLCBkaW0yLCBkaW0zLCBkaW00LCBhbmQgZGltNS4KK1RoZSBhdXRvbWF0aWNhbGx5 IGdlbmVyYXRlZCBhZHZpY2UgbWlnaHQgc3BlY2lmeSBKT0lOX09SREVSKGZhY3QgZGltMSBkaW0z CitkaW00IGRpbTIgZGltNSkgSEFTSF9KT0lOKGRpbTIgZGltNCkgTkVTVEVEX0xPT1BfUExBSU4o ZGltMSBkaW0zIGRpbTUpLgorRGVsZXRpbmcgdGhlIEpPSU5fT1JERVIgYWR2aWNlIGFsbG93cyB0 aGUgcGxhbm5lciB0byByZW9yZGVyIHRoZSBqb2lucworaG93ZXZlciBpdCBsaWtlcyB3aGlsZSBz dGlsbCBmb3JjaW5nIHRoZSBzYW1lIGNob2ljZSBvZiBqb2luIG1ldGhvZC4gVGhpcworc2VlbXMg cG90ZW50aWFsbHkgdXNlZnVsLCBhbmQgaXMgb25lIHJlYXNvbiB3aHkgYSB1bmlmaWVkIHN5bnRh eCB0aGF0IGNvbnRyb2xzCitib3RoIGpvaW4gb3JkZXIgYW5kIGpvaW4gbWV0aG9kIGluIGEgc2lu Z2xlIGxvY3V0aW9uIHdhcyBub3QgY2hvc2VuLgorCitBZHZpY2UgQ29tcGxldGVuZXNzCis9PT09 PT09PT09PT09PT09PT09CisKK0FuIGVzc2VudGlhbCBndWlkaW5nIHByaW5jaXBsZSBpcyB0aGF0 IG5vIGluZmVyZW5jZSBtYXkgbWFkZSBvbiB0aGUgYmFzaXMKK29mIHRoZSBhYnNlbmNlIG9mIGFk dmljZS4gVGhlIHVzZXIgaXMgZW50aXRsZWQgdG8gcmVtb3ZlIGFueSBwb3J0aW9uIG9mIHRoZQor Z2VuZXJhdGVkIGFkdmljZSB3aGljaCB0aGV5IGRlZW0gdW5zdWl0YWJsZSBvciBjb3VudGVycHJv ZHVjdGl2ZSBhbmQgdGhlCityZXN1bHQgc2hvdWxkIG9ubHkgYmUgdG8gaW5jcmVhc2UgdGhlIGZs ZXhpYmlsaXR5IGFmZm9yZGVkIHRvIHRoZSBwbGFubmVyLgorVGhpcyBtZWFucyB0aGF0IGlmIGFk dmljZSBjYW4gc2F5IHRoYXQgYSBjZXJ0YWluIG9wdGltaXphdGlvbiBvciB0ZWNobmlxdWUKK3No b3VsZCBiZSB1c2VkLCBpdCBzaG91bGQgYWxzbyBiZSBhYmxlIHRvIHNheSB0aGF0IHRoZSBvcHRp bWl6YXRpb24gb3IKK3RlY2huaXF1ZSBzaG91bGQgbm90IGJlIHVzZWQuIFdlIHNob3VsZCBuZXZl ciBhc3N1bWUgdGhhdCB0aGUgYWJzZW5jZSBvZiBhbgoraW5zdHJ1Y3Rpb24gdG8gZG8gYSBjZXJ0 YWluIHRoaW5nIG1lYW5zIHRoYXQgaXQgc2hvdWxkIG5vdCBiZSBkb25lOyBhbGwKK2luc3RydWN0 aW9ucyBtdXN0IGJlIGV4cGxpY2l0LgorCitTZW1pam9pbiBVbmlxdWVuZXNzCis9PT09PT09PT09 PT09PT09PT09CisKK0ZhY2VkIHdpdGggYSBzZW1pam9pbiwgdGhlIHBsYW5uZXIgY29uc2lkZXJz IGJvdGggYSBkaXJlY3QgaW1wbGVtZW50YXRpb24KK2FuZCBhIHBsYW4gd2hlcmUgdGhlIG9uZSBz aWRlIGlzIG1hZGUgdW5pcXVlIGFuZCB0aGVuIGFuIGlubmVyIGpvaW4gaXMKK3BlcmZvcm1lZC4g V2UgZW1pdCBTRU1JSk9JTl9VTklRVUUoKSBhZHZpY2Ugd2hlbiB0aGlzIHRyYW5zZm9ybWF0aW9u IG9jY3VycworYW5kIFNFTUlKT0lOX05PTl9VTklRVUUoKSBhZHZpY2Ugd2hlbiBpdCBkb2Vzbid0 LiBUaGVzZSBpdGVtcyB3b3JrIGxpa2UKK2pvaW4gc3RyYXRlZ3kgYWR2aWNlOiB0aGUgaW5uZXIg c2lkZSBvZiB0aGUgcmVsZXZhbnQgam9pbiBpcyBuYW1lZCwgYW5kIHRoZQorY2hvc2VuIGpvaW4g b3JkZXIgbXVzdCBiZSBjb21wYXRpYmxlIHdpdGggdGhlIGFkdmljZSBoYXZpbmcgc29tZSBlZmZl Y3QuCisKK1BhcnRpdGlvbndpc2UKKz09PT09PT09PT09PT0KKworUEFSVElUSU9OV0lTRSgpIGFk dmlzZSBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGJvdGggdGhvc2UgcGFydGl0aW9ud2lzZSBqb2lu cword2hpY2ggc2hvdWxkIGJlIHBlcmZvcm1lZCBhbmQgdGhvc2Ugd2hpY2ggc2hvdWxkIG5vdCBi ZSBwZXJmb3JtZWQ7IHRoZSBpZGVhCitpcyB0aGF0IGVhY2ggYXJndW1lbnQgdG8gUEFSVElUSU9O V0lTRSBzcGVjaWZpZXMgYSBzZXQgb2YgcmVsYXRpb25zIHRoYXQKK3Nob3VsZCBiZSBzY2FubmVk IHBhcnRpdGlvbndpc2UgYWZ0ZXIgYmVpbmcgam9pbmVkIHRvIGVhY2ggb3RoZXIgYW5kIG5vdGhp bmcKK2Vsc2UuIEhlbmNlLCBmb3IgZXhhbXBsZSwgUEFSVElUSU9OV0lTRSgodDEgdDIpIHQzKSBz cGVjaWZpZXMgdGhhdCB0aGUKK3F1ZXJ5IHNob3VsZCBjb250YWluIGEgcGFydGl0aW9ud2lzZSBq b2luIGJldHdlZW4gdDEgYW5kIHQyIGFuZCB0aGF0IHQzCitzaG91bGQgbm90IGJlIHBhcnQgb2Yg YW55IHBhcnRpdGlvbndpc2Ugam9pbi4gSWYgdGhlcmUgYXJlIG5vIG90aGVyIHJlbHMKK2luIHRo ZSBxdWVyeSwgc3BlY2lmeWluZyBqdXN0IFBBUlRJVElPTldJU0UoKHQxIHQyKSkgd291bGQgaGF2 ZSB0aGUgc2FtZQorZWZmZWN0LCBzaW5jZSB0aGVyZSB3b3VsZCBiZSBubyBvdGhlciByZWxzIHRv IHdoaWNoIHQzIGNvdWxkIGJlIGpvaW5lZCBpbgorYSBwYXJ0aXRpb253aXNlIGZhc2hpb24uCisK K1BhcmFsbGVsIFF1ZXJ5IChHYXRoZXIsIGV0Yy4pCis9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQorCitFYWNoIGFyZ3VtZW50IHRvIEdBVEhFUigpIG9yIEdBVEhFUl9NRVJHRSgpIGlzIGEg c2luZ2xlIHJlbGF0aW9uIG9yIGFuCitleGFjdCBzZXQgb2YgcmVsYXRpb25zIG9uIHRvcCBvZiB3 aGljaCBhIEdhdGhlciBvciBHYXRoZXIgTWVyZ2Ugbm9kZSwKK3Jlc3BlY3RpdmVseSwgc2hvdWxk IGJlIHBsYWNlZC4gRWFjaCBhcmd1bWVudCB0byBOT19HQVRIRVIoKSBpcyBhIHNpbmdsZQorcmVs YXRpb24gdGhhdCBzaG91bGQgbm90IGFwcGVhciBiZW5lYXRoIGFueSBHYXRoZXIgb3IgR2F0aGVy IE1lcmdlIG5vZGU7Cit0aGF0IGlzLCBwYXJhbGxlbGlzbSBzaG91bGQgbm90IGJlIHVzZWQuCisK K0ltcGxpY2l0IEpvaW4gT3JkZXIgQ29uc3RyYWludHMKKz09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KKworV2hlbiBKT0lOX09SREVSKCkgYWR2aWNlIGlzIG5vdCBwcm92aWRlZCBmb3Ig YSBwYXJ0aWN1bGFyIGpvaW4gcHJvYmxlbSwKK290aGVyIHBpZWNlcyBvZiBhZHZpY2UgbWF5IHN0 aWxsIGluY2lkZW50YWxseSBjb25zdHJhaW50IHRoZSBqb2luIG9yZGVyLgorRm9yIGV4YW1wbGUs IGEgdXNlciB3aG8gc3BlY2lmaWVzIEhBU0hfSk9JTigoZm9vIGJhcikpIGlzIGV4cGxpY2l0bHkg c2F5aW5nCit0aGF0IHRoZXJlIHNob3VsZCBiZSBhIGhhc2ggam9pbiB3aXRoIGV4YWN0bHkgZm9v IGFuZCBiYXIgb24gdGhlIG91dGVyCitzaWRlIG9mIGl0LCBidXQgdGhhdCBhbHNvIGltcGxpZXMg dGhhdCBmb28gYW5kIGJhciBtdXN0IGJlIGpvaW5lZCB0bworZWFjaCBvdGhlciBiZWZvcmUgZWl0 aGVyIG9mIHRoZW0gaXMgam9pbmVkIHRvIGFueXRoaW5nIGVsc2UuIE90aGVyd2lzZSwKK3RoZSBq b2luIHRoZSB1c2VyIGlzIGF0dGVtcHRpbmcgdG8gY29uc3RyYWludCB3b24ndCBhY3R1YWxseSBv Y2N1ciBpbiB0aGUKK3F1ZXJ5LCB3aGljaCBlbmRzIHVwIGxvb2tpbmcgbGlrZSB0aGUgc3lzdGVt IGhhcyBqdXN0IGRlY2lkZWQgdG8gaWdub3JlCit0aGUgYWR2aWNlIGFsdG9nZXRoZXIuCisKK0Z1 dHVyZSBXb3JrCis9PT09PT09PT09PQorCitXZSBkb24ndCBoYW5kbGUgY2hvaWNlIG9mIGFnZ3Jl Z2F0aW9uOiBpdCB3b3VsZCBiZSBuaWNlIHRvIGJlIGFibGUgdG8gZm9yY2UKK3NvcnRlZCBvciBn cm91cGVkIGFnZ3JlZ2F0aW9uLiBJJ20gZ3Vlc3NpbmcgdGhpcyBjYW4gYmUgbGVmdCB0byBmdXR1 cmUgd29yay4KKworTW9yZSBzZXJpb3VzbHksIHdlIGRvbid0IGtub3cgYW55dGhpbmcgYWJvdXQg ZWFnZXIgYWdncmVnYXRpb24sIHdoaWNoIGNvdWxkCitoYXZlIGEgbGFyZ2UgaW1wYWN0IG9uIHRo ZSBzaGFwZSBvZiB0aGUgcGxhbiB0cmVlLiBYWFg6IFRoaXMgbmVlZHMgc29tZSBzdHVkeQordG8g ZGV0ZXJtaW5lIGhvdyBsYXJnZSBhIHByb2JsZW0gaXQgaXMsIGFuZCBtaWdodCBuZWVkIHRvIGJl IGZpeGVkIHNvb25lcgorcmF0aGVyIHRoYW4gbGF0ZXIuCisKK1dlIGRvbid0IG9mZmVyIGFueSBj b250cm9sIG92ZXIgZXN0aW1hdGVzLCBvbmx5IG91dGNvbWVzLiBJdCBzZWVtcyBsaWtlIGEKK2dv b2QgaWRlYSB0byBpbmNvcnBvcmF0ZSB0aGF0IGFiaWxpdHkgYXQgc29tZSBmdXR1cmUgcG9pbnQs IGFzIHBnX2hpbnRfcGxhbgorZG9lcy4gSG93ZXZlciwgc2luY2UgcHJpbWFyeSBnb2FsIG9mIHRo ZSBpbml0aWFsIGRldmVsb3BtZW50IHdvcmsgaXMgdG8gYmUKK2FibGUgdG8gaW5kdWNlIHRoZSBw bGFubmVyIHRvIHJlY3JlYXRlIGEgZGVzaXJlZCBwbGFuIHRoYXQgd29ya2VkIHdlbGwgaW4KK3Ro ZSBwYXN0LCB0aGlzIGhhcyBub3QgYmVlbiBpbmNsdWRlZCBpbiB0aGUgaW5pdGlhbCBkZXZlbG9w bWVudCBlZmZvcnQuCisKK1hYWCBOZWVkIHRvIGludmVzdGlnYXRlIHdoZXRoZXIgYW5kIGhvdyB3 ZWxsIHN1cHBseWluZyBhZHZpY2Ugd29ya3Mgd2l0aCBHRVFPCmRpZmYgLS1naXQgYS9jb250cmli L3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL2dhdGhlci5vdXQgYi9jb250cmliL3BnX3BsYW5fYWR2 aWNlL2V4cGVjdGVkL2dhdGhlci5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMDAuLjBjYzBkZWRmODU5Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2Fk dmljZS9leHBlY3RlZC9nYXRoZXIub3V0CkBAIC0wLDAgKzEsMzcxIEBACitMT0FEICdwZ19wbGFu X2FkdmljZSc7CitTRVQgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9IDE7CitTRVQg cGFyYWxsZWxfc2V0dXBfY29zdCA9IDA7CitTRVQgcGFyYWxsZWxfdHVwbGVfY29zdCA9IDA7CitT RVQgbWluX3BhcmFsbGVsX3RhYmxlX3NjYW5fc2l6ZSA9IDA7CitTRVQgZGVidWdfcGFyYWxsZWxf cXVlcnkgPSBvZmY7CitDUkVBVEUgVEFCTEUgZ3RfZGltIChpZCBzZXJpYWwgcHJpbWFyeSBrZXks IGRpbSB0ZXh0KQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJ TlRPIGd0X2RpbSAoZGltKSBTRUxFQ1QgcmFuZG9tKCk6OnRleHQgRlJPTSBnZW5lcmF0ZV9zZXJp ZXMoMSwxMDApIGc7CitWQUNVVU0gQU5BTFlaRSBndF9kaW07CitDUkVBVEUgVEFCTEUgZ3RfZmFj dCAoCisJaWQgaW50IG5vdCBudWxsLAorCWRpbV9pZCBpbnRlZ2VyIG5vdCBudWxsIHJlZmVyZW5j ZXMgZ3RfZGltIChpZCkKKykgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5T RVJUIElOVE8gZ3RfZmFjdAorCVNFTEVDVCBnLCAoZyUzKSsxIEZST00gZ2VuZXJhdGVfc2VyaWVz KDEsMTAwMDAwKSBnOworVkFDVVVNIEFOQUxZWkUgZ3RfZmFjdDsKKy0tIEJ5IGRlZmF1bHQsIHdl IGV4cGVjdCBHYXRoZXIgTWVyZ2Ugd2l0aCBhIHBhcmFsbGVsIGhhc2ggam9pbi4KK0VYUExBSU4g KENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBndF9mYWN0IGYgSk9JTiBn dF9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQgT1JERVIgQlkgZC5pZDsKKyAgICAgICAgICAgICAg ICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBHYXRoZXIgTWVyZ2UK KyAgIFdvcmtlcnMgUGxhbm5lZDogMQorICAgLT4gIFNvcnQKKyAgICAgICAgIFNvcnQgS2V5OiBm LmRpbV9pZAorICAgICAgICAgLT4gIFBhcmFsbGVsIEhhc2ggSm9pbgorICAgICAgICAgICAgICAg SGFzaCBDb25kOiAoZi5kaW1faWQgPSBkLmlkKQorICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVs IFNlcSBTY2FuIG9uIGd0X2ZhY3QgZgorICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIEhhc2gK KyAgICAgICAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBTZXEgU2NhbiBvbiBndF9kaW0gZAor IEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBkKQorICAgSEFTSF9KT0lO KGQpCisgICBTRVFfU0NBTihmIGQpCisgICBHQVRIRVJfTUVSR0UoKGYgZCkpCisoMTQgcm93cykK KworLS0gRm9yY2UgR2F0aGVyIG9yIEdhdGhlciBNZXJnZSBvZiBib3RoIHJlbGF0aW9ucyB0b2dl dGhlci4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdnYXRoZXJf bWVyZ2UoKGYgZCkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNU ICogRlJPTSBndF9mYWN0IGYgSk9JTiBndF9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQgT1JERVIg QlkgZC5pZDsKKyAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAg ICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBHYXRoZXIgTWVyZ2UKKyAgIFdvcmtlcnMgUGxhbm5lZDogMQorICAgLT4gIFNv cnQKKyAgICAgICAgIFNvcnQgS2V5OiBmLmRpbV9pZAorICAgICAgICAgLT4gIFBhcmFsbGVsIEhh c2ggSm9pbgorICAgICAgICAgICAgICAgSGFzaCBDb25kOiAoZi5kaW1faWQgPSBkLmlkKQorICAg ICAgICAgICAgICAgLT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9uIGd0X2ZhY3QgZgorICAgICAgICAg ICAgICAgLT4gIFBhcmFsbGVsIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBQYXJhbGxl bCBTZXEgU2NhbiBvbiBndF9kaW0gZAorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgR0FUSEVS X01FUkdFKChmIGQpKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAg Sk9JTl9PUkRFUihmIGQpCisgICBIQVNIX0pPSU4oZCkKKyAgIFNFUV9TQ0FOKGYgZCkKKyAgIEdB VEhFUl9NRVJHRSgoZiBkKSkKKygxNiByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2Uu YWR2aWNlID0gJ2dhdGhlcigoZiBkKSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklD RSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2RpbSBkIE9OIGYuZGltX2lkID0g ZC5pZCBPUkRFUiBCWSBkLmlkOworICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAg ICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIFNvcnQKKyAgIFNvcnQgS2V5OiBmLmRpbV9pZAorICAgLT4g IEdhdGhlcgorICAgICAgICAgV29ya2VycyBQbGFubmVkOiAxCisgICAgICAgICAtPiAgUGFyYWxs ZWwgSGFzaCBKb2luCisgICAgICAgICAgICAgICBIYXNoIENvbmQ6IChmLmRpbV9pZCA9IGQuaWQp CisgICAgICAgICAgICAgICAtPiAgUGFyYWxsZWwgU2VxIFNjYW4gb24gZ3RfZmFjdCBmCisgICAg ICAgICAgICAgICAtPiAgUGFyYWxsZWwgSGFzaAorICAgICAgICAgICAgICAgICAgICAgLT4gIFBh cmFsbGVsIFNlcSBTY2FuIG9uIGd0X2RpbSBkCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBH QVRIRVIoKGYgZCkpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBK T0lOX09SREVSKGYgZCkKKyAgIEhBU0hfSk9JTihkKQorICAgU0VRX1NDQU4oZiBkKQorICAgR0FU SEVSKChmIGQpKQorKDE2IHJvd3MpCisKK0NPTU1JVDsKKy0tIEZvcmNlIGEgc2VwYXJhdGUgR2F0 aGVyIG9yIEdhdGhlciBNZXJnZSBvcGVyYXRpb24gZm9yIGVhY2ggcmVsYXRpb24uCitCRUdJTjsK K1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnZ2F0aGVyX21lcmdlKGYgZCknOwor RVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3Qg ZiBKT0lOIGd0X2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZCBPUkRFUiBCWSBkLmlkOworICAgICAg ICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTWVyZ2UgSm9pbgorICAg TWVyZ2UgQ29uZDogKGYuZGltX2lkID0gZC5pZCkKKyAgIC0+ICBHYXRoZXIgTWVyZ2UKKyAgICAg ICAgIFdvcmtlcnMgUGxhbm5lZDogMQorICAgICAgICAgLT4gIFNvcnQKKyAgICAgICAgICAgICAg IFNvcnQgS2V5OiBmLmRpbV9pZAorICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIFNlcSBTY2Fu IG9uIGd0X2ZhY3QgZgorICAgLT4gIEdhdGhlciBNZXJnZQorICAgICAgICAgV29ya2VycyBQbGFu bmVkOiAxCisgICAgICAgICAtPiAgU29ydAorICAgICAgICAgICAgICAgU29ydCBLZXk6IGQuaWQK KyAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBTZXEgU2NhbiBvbiBndF9kaW0gZAorIFN1cHBs aWVkIFBsYW4gQWR2aWNlOgorICAgR0FUSEVSX01FUkdFKGYpIC8qIG1hdGNoZWQgKi8KKyAgIEdB VEhFUl9NRVJHRShkKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAg Sk9JTl9PUkRFUihmIGQpCisgICBNRVJHRV9KT0lOX1BMQUlOKGQpCisgICBTRVFfU0NBTihmIGQp CisgICBHQVRIRVJfTUVSR0UoZiBkKQorKDIwIHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2Fk dmljZS5hZHZpY2UgPSAnZ2F0aGVyKGYgZCknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FE VklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2RpbSBkIE9OIGYuZGltX2lk ID0gZC5pZCBPUkRFUiBCWSBkLmlkOworICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgTWVyZ2UgSm9pbgorICAgTWVyZ2UgQ29uZDogKGYuZGltX2lkID0gZC5p ZCkKKyAgIC0+ICBTb3J0CisgICAgICAgICBTb3J0IEtleTogZi5kaW1faWQKKyAgICAgICAgIC0+ ICBHYXRoZXIKKyAgICAgICAgICAgICAgIFdvcmtlcnMgUGxhbm5lZDogMQorICAgICAgICAgICAg ICAgLT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9uIGd0X2ZhY3QgZgorICAgLT4gIFNvcnQKKyAgICAg ICAgIFNvcnQgS2V5OiBkLmlkCisgICAgICAgICAtPiAgR2F0aGVyCisgICAgICAgICAgICAgICBX b3JrZXJzIFBsYW5uZWQ6IDEKKyAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBTZXEgU2NhbiBv biBndF9kaW0gZAorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgR0FUSEVSKGYpIC8qIG1hdGNo ZWQgKi8KKyAgIEdBVEhFUihkKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNl OgorICAgSk9JTl9PUkRFUihmIGQpCisgICBNRVJHRV9KT0lOX1BMQUlOKGQpCisgICBTRVFfU0NB TihmIGQpCisgICBHQVRIRVIoZiBkKQorKDIwIHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2Fk dmljZS5hZHZpY2UgPSAnZ2F0aGVyKChkIGQvZC5kKSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQ TEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2RpbSBkIE9OIGYu ZGltX2lkID0gZC5pZCBPUkRFUiBCWSBkLmlkOworICAgICAgICAgICAgICAgICAgICBRVUVSWSBQ TEFOICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgTWVyZ2UgSm9pbgorICAgTWVyZ2UgQ29uZDogKGYuZGltX2lk ID0gZC5pZCkKKyAgIC0+ICBHYXRoZXIgTWVyZ2UKKyAgICAgICAgIFdvcmtlcnMgUGxhbm5lZDog MQorICAgICAgICAgLT4gIFNvcnQKKyAgICAgICAgICAgICAgIFNvcnQgS2V5OiBmLmRpbV9pZAor ICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9uIGd0X2ZhY3QgZgorICAgLT4g IEluZGV4IFNjYW4gdXNpbmcgZ3RfZGltX3BrZXkgb24gZ3RfZGltIGQKKyBTdXBwbGllZCBQbGFu IEFkdmljZToKKyAgIEdBVEhFUigoZCBkL2QuZCkpIC8qIHBhcnRpYWxseSBtYXRjaGVkICovCisg R2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQpCisgICBNRVJHRV9KT0lO X1BMQUlOKGQpCisgICBTRVFfU0NBTihmKQorICAgSU5ERVhfU0NBTihkIHB1YmxpYy5ndF9kaW1f cGtleSkKKyAgIEdBVEhFUl9NRVJHRShmKQorICAgTk9fR0FUSEVSKGQpCisoMTcgcm93cykKKwor Q09NTUlUOworLS0gRm9yY2UgYSBHYXRoZXIgb3IgR2F0aGVyIE1lcmdlIG9uIG9uZSByZWxhdGlv biBidXQgbm8gcGFyYWxsZWxpc20gb24gb3RoZXIuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFu X2FkdmljZS5hZHZpY2UgPSAnZ2F0aGVyX21lcmdlKGYpIG5vX2dhdGhlcihkKSc7CitFWFBMQUlO IChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4g Z3RfZGltIGQgT04gZi5kaW1faWQgPSBkLmlkIE9SREVSIEJZIGQuaWQ7CisgICAgICAgICAgICAg ICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBNZXJnZSBKb2luCisgICBNZXJnZSBD b25kOiAoZi5kaW1faWQgPSBkLmlkKQorICAgLT4gIEdhdGhlciBNZXJnZQorICAgICAgICAgV29y a2VycyBQbGFubmVkOiAxCisgICAgICAgICAtPiAgU29ydAorICAgICAgICAgICAgICAgU29ydCBL ZXk6IGYuZGltX2lkCisgICAgICAgICAgICAgICAtPiAgUGFyYWxsZWwgU2VxIFNjYW4gb24gZ3Rf ZmFjdCBmCisgICAtPiAgSW5kZXggU2NhbiB1c2luZyBndF9kaW1fcGtleSBvbiBndF9kaW0gZAor IFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgR0FUSEVSX01FUkdFKGYpIC8qIG1hdGNoZWQgKi8K KyAgIE5PX0dBVEhFUihkKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgor ICAgSk9JTl9PUkRFUihmIGQpCisgICBNRVJHRV9KT0lOX1BMQUlOKGQpCisgICBTRVFfU0NBTihm KQorICAgSU5ERVhfU0NBTihkIHB1YmxpYy5ndF9kaW1fcGtleSkKKyAgIEdBVEhFUl9NRVJHRShm KQorICAgTk9fR0FUSEVSKGQpCisoMTggcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNl LmFkdmljZSA9ICdnYXRoZXJfbWVyZ2UoZCkgbm9fZ2F0aGVyKGYpJzsKK0VYUExBSU4gKENPU1RT IE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBndF9mYWN0IGYgSk9JTiBndF9kaW0g ZCBPTiBmLmRpbV9pZCA9IGQuaWQgT1JERVIgQlkgZC5pZDsKKyAgICAgICAgICAgICAgICAgICBR VUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBNZXJnZSBKb2luCisgICBNZXJnZSBDb25kOiAoZi5k aW1faWQgPSBkLmlkKQorICAgLT4gIFNvcnQKKyAgICAgICAgIFNvcnQgS2V5OiBmLmRpbV9pZAor ICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGd0X2ZhY3QgZgorICAgLT4gIEdhdGhlciBNZXJnZQor ICAgICAgICAgV29ya2VycyBQbGFubmVkOiAxCisgICAgICAgICAtPiAgU29ydAorICAgICAgICAg ICAgICAgU29ydCBLZXk6IGQuaWQKKyAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBTZXEgU2Nh biBvbiBndF9kaW0gZAorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgR0FUSEVSX01FUkdFKGQp IC8qIG1hdGNoZWQgKi8KKyAgIE5PX0dBVEhFUihmKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVk IFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQpCisgICBNRVJHRV9KT0lOX1BMQUlOKGQp CisgICBTRVFfU0NBTihmIGQpCisgICBHQVRIRVJfTUVSR0UoZCkKKyAgIE5PX0dBVEhFUihmKQor KDE5IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnZ2F0aGVyKGYp IG5vX2dhdGhlcihkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVD VCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5kaW1faWQgPSBkLmlkIE9SREVS IEJZIGQuaWQ7CisgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyBNZXJnZSBKb2luCisgICBNZXJnZSBDb25kOiAoZC5pZCA9IGYuZGltX2lkKQorICAgLT4gIElu ZGV4IFNjYW4gdXNpbmcgZ3RfZGltX3BrZXkgb24gZ3RfZGltIGQKKyAgIC0+ICBTb3J0CisgICAg ICAgICBTb3J0IEtleTogZi5kaW1faWQKKyAgICAgICAgIC0+ICBHYXRoZXIKKyAgICAgICAgICAg ICAgIFdvcmtlcnMgUGxhbm5lZDogMQorICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIFNlcSBT Y2FuIG9uIGd0X2ZhY3QgZgorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgR0FUSEVSKGYpIC8q IG1hdGNoZWQgKi8KKyAgIE5PX0dBVEhFUihkKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBs YW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihkIGYpCisgICBNRVJHRV9KT0lOX1BMQUlOKGYpCisg ICBTRVFfU0NBTihmKQorICAgSU5ERVhfU0NBTihkIHB1YmxpYy5ndF9kaW1fcGtleSkKKyAgIEdB VEhFUihmKQorICAgTk9fR0FUSEVSKGQpCisoMTggcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5f YWR2aWNlLmFkdmljZSA9ICdnYXRoZXIoZCkgbm9fZ2F0aGVyKGYpJzsKK0VYUExBSU4gKENPU1RT IE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBndF9mYWN0IGYgSk9JTiBndF9kaW0g ZCBPTiBmLmRpbV9pZCA9IGQuaWQgT1JERVIgQlkgZC5pZDsKKyAgICAgICAgICAgICAgICAgICBR VUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBNZXJnZSBKb2luCisgICBNZXJnZSBDb25kOiAoZi5k aW1faWQgPSBkLmlkKQorICAgLT4gIFNvcnQKKyAgICAgICAgIFNvcnQgS2V5OiBmLmRpbV9pZAor ICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGd0X2ZhY3QgZgorICAgLT4gIFNvcnQKKyAgICAgICAg IFNvcnQgS2V5OiBkLmlkCisgICAgICAgICAtPiAgR2F0aGVyCisgICAgICAgICAgICAgICBXb3Jr ZXJzIFBsYW5uZWQ6IDEKKyAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBTZXEgU2NhbiBvbiBn dF9kaW0gZAorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgR0FUSEVSKGQpIC8qIG1hdGNoZWQg Ki8KKyAgIE5PX0dBVEhFUihmKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNl OgorICAgSk9JTl9PUkRFUihmIGQpCisgICBNRVJHRV9KT0lOX1BMQUlOKGQpCisgICBTRVFfU0NB TihmIGQpCisgICBHQVRIRVIoZCkKKyAgIE5PX0dBVEhFUihmKQorKDE5IHJvd3MpCisKK0NPTU1J VDsKKy0tIEZvcmNlIG5vIEdhdGhlciBvciBHYXRoZXIgTWVyZ2UgdXNlIGF0IGFsbC4KK0JFR0lO OworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdub19nYXRoZXIoZiBkKSc7CitF WFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gZ3RfZmFjdCBm IEpPSU4gZ3RfZGltIGQgT04gZi5kaW1faWQgPSBkLmlkIE9SREVSIEJZIGQuaWQ7CisgICAgICAg ICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE1lcmdlIEpvaW4KKyAgIE1lcmdl IENvbmQ6IChkLmlkID0gZi5kaW1faWQpCisgICAtPiAgSW5kZXggU2NhbiB1c2luZyBndF9kaW1f cGtleSBvbiBndF9kaW0gZAorICAgLT4gIFNvcnQKKyAgICAgICAgIFNvcnQgS2V5OiBmLmRpbV9p ZAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGd0X2ZhY3QgZgorIFN1cHBsaWVkIFBsYW4gQWR2 aWNlOgorICAgTk9fR0FUSEVSKGYpIC8qIG1hdGNoZWQgKi8KKyAgIE5PX0dBVEhFUihkKSAvKiBt YXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihkIGYpCisg ICBNRVJHRV9KT0lOX1BMQUlOKGYpCisgICBTRVFfU0NBTihmKQorICAgSU5ERVhfU0NBTihkIHB1 YmxpYy5ndF9kaW1fcGtleSkKKyAgIE5PX0dBVEhFUihmIGQpCisoMTUgcm93cykKKworQ09NTUlU OworLS0gQ2FuJ3QgZm9yY2UgR2F0aGVyIE1lcmdlIHdpdGhvdXQgdGhlIE9SREVSIEJZIGNsYXVz ZSwgYnV0IGp1c3QgR2F0aGVyIGlzIE9LLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZp Y2UuYWR2aWNlID0gJ2dhdGhlcl9tZXJnZSgoZiBkKSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQ TEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2RpbSBkIE9OIGYu ZGltX2lkID0gZC5pZDsKKyAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAg ICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyBHYXRoZXIKKyAgIERpc2FibGVkOiB0cnVlCisgICBXb3JrZXJzIFBsYW5uZWQ6IDEKKyAg IC0+ICBQYXJhbGxlbCBIYXNoIEpvaW4KKyAgICAgICAgIEhhc2ggQ29uZDogKGYuZGltX2lkID0g ZC5pZCkKKyAgICAgICAgIC0+ICBQYXJhbGxlbCBTZXEgU2NhbiBvbiBndF9mYWN0IGYKKyAgICAg ICAgIC0+ICBQYXJhbGxlbCBIYXNoCisgICAgICAgICAgICAgICAtPiAgUGFyYWxsZWwgU2VxIFNj YW4gb24gZ3RfZGltIGQKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIEdBVEhFUl9NRVJHRSgo ZiBkKSkgLyogbWF0Y2hlZCwgZmFpbGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAg Sk9JTl9PUkRFUihmIGQpCisgICBIQVNIX0pPSU4oZCkKKyAgIFNFUV9TQ0FOKGYgZCkKKyAgIEdB VEhFUigoZiBkKSkKKygxNSByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNl ID0gJ2dhdGhlcigoZiBkKSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlT RUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsK KyAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBHYXRoZXIKKyAg IFdvcmtlcnMgUGxhbm5lZDogMQorICAgLT4gIFBhcmFsbGVsIEhhc2ggSm9pbgorICAgICAgICAg SGFzaCBDb25kOiAoZi5kaW1faWQgPSBkLmlkKQorICAgICAgICAgLT4gIFBhcmFsbGVsIFNlcSBT Y2FuIG9uIGd0X2ZhY3QgZgorICAgICAgICAgLT4gIFBhcmFsbGVsIEhhc2gKKyAgICAgICAgICAg ICAgIC0+ICBQYXJhbGxlbCBTZXEgU2NhbiBvbiBndF9kaW0gZAorIFN1cHBsaWVkIFBsYW4gQWR2 aWNlOgorICAgR0FUSEVSKChmIGQpKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2 aWNlOgorICAgSk9JTl9PUkRFUihmIGQpCisgICBIQVNIX0pPSU4oZCkKKyAgIFNFUV9TQ0FOKGYg ZCkKKyAgIEdBVEhFUigoZiBkKSkKKygxNCByb3dzKQorCitDT01NSVQ7CistLSBUZXN0IGNvbmZs aWN0aW5nIGFkdmljZS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9 ICdnYXRoZXIoKGYgZCkpIG5vX2dhdGhlcihmKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5f QURWSUNFKQorCVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5kaW1f aWQgPSBkLmlkIE9SREVSIEJZIGQuaWQ7CisgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExB TiAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgR2F0aGVyIE1lcmdlCisgICBXb3JrZXJzIFBsYW5u ZWQ6IDEKKyAgIC0+ICBTb3J0CisgICAgICAgICBTb3J0IEtleTogZi5kaW1faWQKKyAgICAgICAg IC0+ICBQYXJhbGxlbCBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKGYuZGlt X2lkID0gZC5pZCkKKyAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBTZXEgU2NhbiBvbiBndF9m YWN0IGYKKyAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBIYXNoCisgICAgICAgICAgICAgICAg ICAgICAtPiAgUGFyYWxsZWwgU2VxIFNjYW4gb24gZ3RfZGltIGQKKyBTdXBwbGllZCBQbGFuIEFk dmljZToKKyAgIEdBVEhFUigoZiBkKSkgLyogbWF0Y2hlZCwgY29uZmxpY3RpbmcsIGZhaWxlZCAq LworICAgTk9fR0FUSEVSKGYpIC8qIG1hdGNoZWQsIGNvbmZsaWN0aW5nLCBmYWlsZWQgKi8KKyBH ZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGYgZCkKKyAgIEhBU0hfSk9JTihk KQorICAgU0VRX1NDQU4oZiBkKQorICAgR0FUSEVSX01FUkdFKChmIGQpKQorKDE3IHJvd3MpCisK K0NPTU1JVDsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvam9p bl9vcmRlci5vdXQgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL2pvaW5fb3JkZXIu b3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5kYjBkY2VmNzAxMgot LS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvam9pbl9v cmRlci5vdXQKQEAgLTAsMCArMSw1MDkgQEAKK0xPQUQgJ3BnX3BsYW5fYWR2aWNlJzsKK1NFVCBt YXhfcGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyID0gMDsKK0NSRUFURSBUQUJMRSBqb19kaW0x IChpZCBpbnRlZ2VyIHByaW1hcnkga2V5LCBkaW0xIHRleHQsIHZhbDEgaW50KQorCVdJVEggKGF1 dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJTlRPIGpvX2RpbTEgKGlkLCBkaW0x LCB2YWwxKQorCVNFTEVDVCBnLCAnc29tZSBmaWxsZXIgdGV4dCAnIHx8IGcsIChnICUgMykgKyAx CisJICBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMCkgZzsKK1ZBQ1VVTSBBTkFMWVpFIGpvX2Rp bTE7CitDUkVBVEUgVEFCTEUgam9fZGltMiAoaWQgaW50ZWdlciBwcmltYXJ5IGtleSwgZGltMiB0 ZXh0LCB2YWwyIGludCkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitJTlNF UlQgSU5UTyBqb19kaW0yIChpZCwgZGltMiwgdmFsMikKKwlTRUxFQ1QgZywgJ3NvbWUgZmlsbGVy IHRleHQgJyB8fCBnLCAoZyAlIDcpICsgMQorCSAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAw KSBnOworVkFDVVVNIEFOQUxZWkUgam9fZGltMjsKK0NSRUFURSBUQUJMRSBqb19mYWN0ICgKKwlp ZCBpbnQgcHJpbWFyeSBrZXksCisJZGltMV9pZCBpbnRlZ2VyIG5vdCBudWxsIHJlZmVyZW5jZXMg am9fZGltMSAoaWQpLAorCWRpbTJfaWQgaW50ZWdlciBub3QgbnVsbCByZWZlcmVuY2VzIGpvX2Rp bTIgKGlkKQorKSBXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5U TyBqb19mYWN0CisJU0VMRUNUIGcsIChnJTEwMCkrMSwgKGclMTAwKSsxIEZST00gZ2VuZXJhdGVf c2VyaWVzKDEsMTAwMDAwKSBnOworVkFDVVVNIEFOQUxZWkUgam9fZmFjdDsKKy0tIFdlIGV4cGVj dCB0byBqb2luIHRvIGQyIGZpcnN0IGFuZCB0aGVuIGQxLCBzaW5jZSB0aGUgY29uZGl0aW9uIG9u IGQyCistLSBpcyBtb3JlIHNlbGVjdGl2ZS4KK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJ Q0UpCitTRUxFQ1QgKiBGUk9NIGpvX2ZhY3QgZgorCUxFRlQgSk9JTiBqb19kaW0xIGQxIE9OIGYu ZGltMV9pZCA9IGQxLmlkCisJTEVGVCBKT0lOIGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkID0gZDIu aWQKKwlXSEVSRSB2YWwxID0gMSBBTkQgdmFsMiA9IDE7CisgICAgICAgICAgICAgICAgUVVFUlkg UExBTiAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIEhhc2ggSm9pbgorICAgSGFzaCBDb25kOiAoZi5kaW0xX2lkID0gZDEuaWQpCisg ICAtPiAgSGFzaCBKb2luCisgICAgICAgICBIYXNoIENvbmQ6IChmLmRpbTJfaWQgPSBkMi5pZCkK KyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19mYWN0IGYKKyAgICAgICAgIC0+ICBIYXNoCisg ICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZGltMiBkMgorICAgICAgICAgICAgICAg ICAgICAgRmlsdGVyOiAodmFsMiA9IDEpCisgICAtPiAgSGFzaAorICAgICAgICAgLT4gIFNlcSBT Y2FuIG9uIGpvX2RpbTEgZDEKKyAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDEgPSAxKQorIEdl bmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBkMiBkMSkKKyAgIEhBU0hfSk9J TihkMiBkMSkKKyAgIFNFUV9TQ0FOKGYgZDIgZDEpCisgICBOT19HQVRIRVIoZiBkMSBkMikKKygx NiByb3dzKQorCistLSBGb3JjZSBhIGZldyBkaWZmZXJlbnQgam9pbiBvcmRlcnMuIFNvbWUgb2Yg dGhlc2UgYXJlIHZlcnkgaW5lZmZpY2llbnQsCistLSBidXQgdGhlIHBsYW5uZXIgY29uc2lkZXJz IHRoZW0gYWxsIHZpYWJsZS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmlj ZSA9ICdqb2luX29yZGVyKGYgZDEgZDIpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJ Q0UpCitTRUxFQ1QgKiBGUk9NIGpvX2ZhY3QgZgorCUxFRlQgSk9JTiBqb19kaW0xIGQxIE9OIGYu ZGltMV9pZCA9IGQxLmlkCisJTEVGVCBKT0lOIGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkID0gZDIu aWQKKwlXSEVSRSB2YWwxID0gMSBBTkQgdmFsMiA9IDE7CisgICAgICAgICAgICAgICAgUVVFUlkg UExBTiAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIEhhc2ggSm9pbgorICAgSGFzaCBDb25kOiAoZi5kaW0yX2lkID0gZDIuaWQpCisg ICAtPiAgSGFzaCBKb2luCisgICAgICAgICBIYXNoIENvbmQ6IChmLmRpbTFfaWQgPSBkMS5pZCkK KyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19mYWN0IGYKKyAgICAgICAgIC0+ICBIYXNoCisg ICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZGltMSBkMQorICAgICAgICAgICAgICAg ICAgICAgRmlsdGVyOiAodmFsMSA9IDEpCisgICAtPiAgSGFzaAorICAgICAgICAgLT4gIFNlcSBT Y2FuIG9uIGpvX2RpbTIgZDIKKyAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDIgPSAxKQorIFN1 cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQxIGQyKSAvKiBtYXRjaGVkICov CisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQxIGQyKQorICAgSEFT SF9KT0lOKGQxIGQyKQorICAgU0VRX1NDQU4oZiBkMSBkMikKKyAgIE5PX0dBVEhFUihmIGQxIGQy KQorKDE4IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnam9pbl9v cmRlcihmIGQyIGQxKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNU ICogRlJPTSBqb19mYWN0IGYKKwlMRUZUIEpPSU4gam9fZGltMSBkMSBPTiBmLmRpbTFfaWQgPSBk MS5pZAorCUxFRlQgSk9JTiBqb19kaW0yIGQyIE9OIGYuZGltMl9pZCA9IGQyLmlkCisJV0hFUkUg dmFsMSA9IDEgQU5EIHZhbDIgPSAxOworICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAg ICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBI YXNoIEpvaW4KKyAgIEhhc2ggQ29uZDogKGYuZGltMV9pZCA9IGQxLmlkKQorICAgLT4gIEhhc2gg Sm9pbgorICAgICAgICAgSGFzaCBDb25kOiAoZi5kaW0yX2lkID0gZDIuaWQpCisgICAgICAgICAt PiAgU2VxIFNjYW4gb24gam9fZmFjdCBmCisgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAg ICAgLT4gIFNlcSBTY2FuIG9uIGpvX2RpbTIgZDIKKyAgICAgICAgICAgICAgICAgICAgIEZpbHRl cjogKHZhbDIgPSAxKQorICAgLT4gIEhhc2gKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19k aW0xIGQxCisgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwxID0gMSkKKyBTdXBwbGllZCBQbGFu IEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBkMiBkMSkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRl ZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBkMiBkMSkKKyAgIEhBU0hfSk9JTihkMiBk MSkKKyAgIFNFUV9TQ0FOKGYgZDIgZDEpCisgICBOT19HQVRIRVIoZiBkMSBkMikKKygxOCByb3dz KQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2pvaW5fb3JkZXIoZDEgZiBk MiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gam9f ZmFjdCBmCisJTEVGVCBKT0lOIGpvX2RpbTEgZDEgT04gZi5kaW0xX2lkID0gZDEuaWQKKwlMRUZU IEpPSU4gam9fZGltMiBkMiBPTiBmLmRpbTJfaWQgPSBkMi5pZAorCVdIRVJFIHZhbDEgPSAxIEFO RCB2YWwyID0gMTsKKyAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggSm9pbgorICAg SGFzaCBDb25kOiAoZi5kaW0yX2lkID0gZDIuaWQpCisgICAtPiAgSGFzaCBKb2luCisgICAgICAg ICBIYXNoIENvbmQ6IChkMS5pZCA9IGYuZGltMV9pZCkKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBv biBqb19kaW0xIGQxCisgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwxID0gMSkKKyAgICAgICAg IC0+ICBIYXNoCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZmFjdCBmCisgICAt PiAgSGFzaAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2RpbTIgZDIKKyAgICAgICAgICAg ICAgIEZpbHRlcjogKHZhbDIgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9P UkRFUihkMSBmIGQyKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAg Sk9JTl9PUkRFUihkMSBmIGQyKQorICAgSEFTSF9KT0lOKGYgZDIpCisgICBTRVFfU0NBTihkMSBm IGQyKQorICAgTk9fR0FUSEVSKGYgZDEgZDIpCisoMTggcm93cykKKworU0VUIExPQ0FMIHBnX3Bs YW5fYWR2aWNlLmFkdmljZSA9ICdqb2luX29yZGVyKGYgKGQxIGQyKSknOworRVhQTEFJTiAoQ09T VFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gam9fZmFjdCBmCisJTEVGVCBKT0lO IGpvX2RpbTEgZDEgT04gZi5kaW0xX2lkID0gZDEuaWQKKwlMRUZUIEpPSU4gam9fZGltMiBkMiBP TiBmLmRpbTJfaWQgPSBkMi5pZAorCVdIRVJFIHZhbDEgPSAxIEFORCB2YWwyID0gMTsKKyAgICAg ICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyBNZXJnZSBKb2luCisgICBNZXJnZSBDb25kOiAoKGYuZGltMl9pZCA9IGQyLmlkKSBB TkQgKGYuZGltMV9pZCA9IGQxLmlkKSkKKyAgIC0+ICBTb3J0CisgICAgICAgICBTb3J0IEtleTog Zi5kaW0yX2lkLCBmLmRpbTFfaWQKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19mYWN0IGYK KyAgIC0+ICBTb3J0CisgICAgICAgICBTb3J0IEtleTogZDIuaWQsIGQxLmlkCisgICAgICAgICAt PiAgTmVzdGVkIExvb3AKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19kaW0xIGQx CisgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwxID0gMSkKKyAgICAgICAgICAgICAg IC0+ICBNYXRlcmlhbGl6ZQorICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpv X2RpbTIgZDIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDIgPSAxKQor IFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIChkMSBkMikpIC8qIG1hdGNo ZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGYgKGQxIGQyKSkK KyAgIE1FUkdFX0pPSU5fUExBSU4oKGQxIGQyKSkKKyAgIE5FU1RFRF9MT09QX01BVEVSSUFMSVpF KGQyKQorICAgU0VRX1NDQU4oZiBkMSBkMikKKyAgIE5PX0dBVEhFUihmIGQxIGQyKQorKDIxIHJv d3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnam9pbl9vcmRlcihmIHtk MSBkMn0pJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9N IGpvX2ZhY3QgZgorCUxFRlQgSk9JTiBqb19kaW0xIGQxIE9OIGYuZGltMV9pZCA9IGQxLmlkCisJ TEVGVCBKT0lOIGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkID0gZDIuaWQKKwlXSEVSRSB2YWwxID0g MSBBTkQgdmFsMiA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAg ICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTWVyZ2UgSm9pbgorICAgTWVyZ2UgQ29uZDog KChmLmRpbTJfaWQgPSBkMi5pZCkgQU5EIChmLmRpbTFfaWQgPSBkMS5pZCkpCisgICAtPiAgU29y dAorICAgICAgICAgU29ydCBLZXk6IGYuZGltMl9pZCwgZi5kaW0xX2lkCisgICAgICAgICAtPiAg U2VxIFNjYW4gb24gam9fZmFjdCBmCisgICAtPiAgU29ydAorICAgICAgICAgU29ydCBLZXk6IGQy LmlkLCBkMS5pZAorICAgICAgICAgLT4gIE5lc3RlZCBMb29wCisgICAgICAgICAgICAgICAtPiAg U2VxIFNjYW4gb24gam9fZGltMiBkMgorICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFs MiA9IDEpCisgICAgICAgICAgICAgICAtPiAgTWF0ZXJpYWxpemUKKyAgICAgICAgICAgICAgICAg ICAgIC0+ICBTZXEgU2NhbiBvbiBqb19kaW0xIGQxCisgICAgICAgICAgICAgICAgICAgICAgICAg ICBGaWx0ZXI6ICh2YWwxID0gMSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JE RVIoZiB7ZDEgZDJ9KSAvKiBtYXRjaGVkLCBmYWlsZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZp Y2U6CisgICBKT0lOX09SREVSKGYgKGQyIGQxKSkKKyAgIE1FUkdFX0pPSU5fUExBSU4oKGQxIGQy KSkKKyAgIE5FU1RFRF9MT09QX01BVEVSSUFMSVpFKGQxKQorICAgU0VRX1NDQU4oZiBkMiBkMSkK KyAgIE5PX0dBVEhFUihmIGQxIGQyKQorKDIxIHJvd3MpCisKK0NPTU1JVDsKKy0tIEZvcmNlIGEg am9pbiBvcmRlciBieSBtZW50aW9uaW5nIGp1c3QgYSBwcmVmaXggb2YgdGhlIGpvaW4gbGlzdC4K K0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdqb2luX29yZGVyKGQy KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBqb19m YWN0IGYKKwlMRUZUIEpPSU4gam9fZGltMSBkMSBPTiBmLmRpbTFfaWQgPSBkMS5pZAorCUxFRlQg Sk9JTiBqb19kaW0yIGQyIE9OIGYuZGltMl9pZCA9IGQyLmlkCisJV0hFUkUgdmFsMSA9IDEgQU5E IHZhbDIgPSAxOworICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBI YXNoIEpvaW4KKyAgIEhhc2ggQ29uZDogKGQyLmlkID0gZi5kaW0yX2lkKQorICAgLT4gIFNlcSBT Y2FuIG9uIGpvX2RpbTIgZDIKKyAgICAgICAgIEZpbHRlcjogKHZhbDIgPSAxKQorICAgLT4gIEhh c2gKKyAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKGYu ZGltMV9pZCA9IGQxLmlkKQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2ZhY3Qg ZgorICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEg U2NhbiBvbiBqb19kaW0xIGQxCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2 YWwxID0gMSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZDIpIC8qIG1h dGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGQyIChmIGQx KSkKKyAgIEhBU0hfSk9JTihkMSAoZiBkMSkpCisgICBTRVFfU0NBTihkMiBmIGQxKQorICAgTk9f R0FUSEVSKGYgZDEgZDIpCisoMTggcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFk dmljZSA9ICdqb2luX29yZGVyKGQyIGQxKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURW SUNFKQorU0VMRUNUICogRlJPTSBqb19mYWN0IGYKKwlMRUZUIEpPSU4gam9fZGltMSBkMSBPTiBm LmRpbTFfaWQgPSBkMS5pZAorCUxFRlQgSk9JTiBqb19kaW0yIGQyIE9OIGYuZGltMl9pZCA9IGQy LmlkCisJV0hFUkUgdmFsMSA9IDEgQU5EIHZhbDIgPSAxOworICAgICAgICAgICAgICAgICAgICAg ICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE1lcmdlIEpv aW4KKyAgIE1lcmdlIENvbmQ6ICgoZDIuaWQgPSBmLmRpbTJfaWQpIEFORCAoZDEuaWQgPSBmLmRp bTFfaWQpKQorICAgLT4gIFNvcnQKKyAgICAgICAgIFNvcnQgS2V5OiBkMi5pZCwgZDEuaWQKKyAg ICAgICAgIC0+ICBOZXN0ZWQgTG9vcAorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpv X2RpbTIgZDIKKyAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDIgPSAxKQorICAgICAg ICAgICAgICAgLT4gIE1hdGVyaWFsaXplCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNj YW4gb24gam9fZGltMSBkMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFs MSA9IDEpCisgICAtPiAgU29ydAorICAgICAgICAgU29ydCBLZXk6IGYuZGltMl9pZCwgZi5kaW0x X2lkCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZmFjdCBmCisgU3VwcGxpZWQgUGxhbiBB ZHZpY2U6CisgICBKT0lOX09SREVSKGQyIGQxKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBs YW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihkMiBkMSBmKQorICAgTUVSR0VfSk9JTl9QTEFJTihm KQorICAgTkVTVEVEX0xPT1BfTUFURVJJQUxJWkUoZDEpCisgICBTRVFfU0NBTihkMiBkMSBmKQor ICAgTk9fR0FUSEVSKGYgZDEgZDIpCisoMjEgcm93cykKKworQ09NTUlUOworLS0gam9fZmFjdCBp cyBub3QgcGFydGl0aW9uZWQsIGJ1dCBsZXQncyB0cnkgcHJldGVuZGluZyB0aGF0IGl0IGlzIGFu ZAorLS0gdmVyaWZ5aW5nIHRoYXQgdGhlIGFkdmljZSBkb2VzIG5vdCBhcHBseS4KK0JFR0lOOwor U0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdqb2luX29yZGVyKGYvZDEgZDEgZDIp JzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGpvX2Zh Y3QgZgorCUxFRlQgSk9JTiBqb19kaW0xIGQxIE9OIGYuZGltMV9pZCA9IGQxLmlkCisJTEVGVCBK T0lOIGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkID0gZDIuaWQKKwlXSEVSRSB2YWwxID0gMSBBTkQg dmFsMiA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAg ICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIERpc2FibGVkOiB0cnVlCisg ICAtPiAgTmVzdGVkIExvb3AKKyAgICAgICAgIERpc2FibGVkOiB0cnVlCisgICAgICAgICAtPiAg U2VxIFNjYW4gb24gam9fZmFjdCBmCisgICAgICAgICAtPiAgSW5kZXggU2NhbiB1c2luZyBqb19k aW0xX3BrZXkgb24gam9fZGltMSBkMQorICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGlkID0g Zi5kaW0xX2lkKQorICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMSA9IDEpCisgICAtPiAgSW5k ZXggU2NhbiB1c2luZyBqb19kaW0yX3BrZXkgb24gam9fZGltMiBkMgorICAgICAgICAgSW5kZXgg Q29uZDogKGlkID0gZi5kaW0yX2lkKQorICAgICAgICAgRmlsdGVyOiAodmFsMiA9IDEpCisgU3Vw cGxpZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGYvZDEgZDEgZDIpIC8qIHBhcnRpYWxs eSBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQx IGQyKQorICAgTkVTVEVEX0xPT1BfUExBSU4oZDEgZDIpCisgICBTRVFfU0NBTihmKQorICAgSU5E RVhfU0NBTihkMSBwdWJsaWMuam9fZGltMV9wa2V5IGQyIHB1YmxpYy5qb19kaW0yX3BrZXkpCisg ICBOT19HQVRIRVIoZiBkMSBkMikKKygxOSByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZp Y2UuYWR2aWNlID0gJ2pvaW5fb3JkZXIoZi9kMSAoZDEgZDIpKSc7CitFWFBMQUlOIChDT1NUUyBP RkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBqb19mYWN0IGYKKwlMRUZUIEpPSU4gam9f ZGltMSBkMSBPTiBmLmRpbTFfaWQgPSBkMS5pZAorCUxFRlQgSk9JTiBqb19kaW0yIGQyIE9OIGYu ZGltMl9pZCA9IGQyLmlkCisJV0hFUkUgdmFsMSA9IDEgQU5EIHZhbDIgPSAxOworICAgICAgICAg ICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgTmVzdGVkIExvb3AKKyAgIERpc2FibGVkOiB0cnVlCisgICBKb2luIEZpbHRlcjogKChk MS5pZCA9IGYuZGltMV9pZCkgQU5EIChkMi5pZCA9IGYuZGltMl9pZCkpCisgICAtPiAgTmVzdGVk IExvb3AKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19kaW0xIGQxCisgICAgICAgICAgICAg ICBGaWx0ZXI6ICh2YWwxID0gMSkKKyAgICAgICAgIC0+ICBNYXRlcmlhbGl6ZQorICAgICAgICAg ICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2RpbTIgZDIKKyAgICAgICAgICAgICAgICAgICAgIEZp bHRlcjogKHZhbDIgPSAxKQorICAgLT4gIFNlcSBTY2FuIG9uIGpvX2ZhY3QgZgorIFN1cHBsaWVk IFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmL2QxIChkMSBkMikpIC8qIHBhcnRpYWxseSBt YXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihkMSBkMiBm KQorICAgTkVTVEVEX0xPT1BfUExBSU4oZikKKyAgIE5FU1RFRF9MT09QX01BVEVSSUFMSVpFKGQy KQorICAgU0VRX1NDQU4oZDEgZDIgZikKKyAgIE5PX0dBVEhFUihmIGQxIGQyKQorKDE4IHJvd3Mp CisKK0NPTU1JVDsKKy0tIFRoZSB1bnVzdWFsIGZvcm11bGF0aW9uIG9mIHRoaXMgcXVlcnkgaXMg aW50ZW5kZWQgdG8gcHJldmVudCB0aGUgcXVlcnkKKy0tIHBsYW5uZXIgZnJvbSByZWR1Y2luZyB0 aGUgRlVMTCBKT0lOIHRvIHNvbWUgb3RoZXIgam9pbiB0eXBlLCBzbyB0aGF0IHdlCistLSBjYW4g dGVzdCB3aGF0IGhhcHBlbnMgd2l0aCBhIGpvaW4gdHlwZSB0aGF0IGNhbm5vdCBiZSByZW9yZGVy ZWQuCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBqb19k aW0xIGQxCisJSU5ORVIgSk9JTiAoam9fZmFjdCBmIEZVTEwgSk9JTiBqb19kaW0yIGQyIE9OIGYu ZGltMl9pZCArIDAgPSBkMi5pZCArIDApCisJT04gZDEuaWQgPSBmLmRpbTFfaWQgT1IgZi5kaW0x X2lkIElTIE5VTEw7CisgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAg ICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIEpvaW4gRmlsdGVyOiAo KGQxLmlkID0gZi5kaW0xX2lkKSBPUiAoZi5kaW0xX2lkIElTIE5VTEwpKQorICAgLT4gIE1lcmdl IEZ1bGwgSm9pbgorICAgICAgICAgTWVyZ2UgQ29uZDogKCgoZDIuaWQgKyAwKSkgPSAoKGYuZGlt Ml9pZCArIDApKSkKKyAgICAgICAgIC0+ICBTb3J0CisgICAgICAgICAgICAgICBTb3J0IEtleTog KChkMi5pZCArIDApKQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2RpbTIgZDIK KyAgICAgICAgIC0+ICBTb3J0CisgICAgICAgICAgICAgICBTb3J0IEtleTogKChmLmRpbTJfaWQg KyAwKSkKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19mYWN0IGYKKyAgIC0+ICBN YXRlcmlhbGl6ZQorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2RpbTEgZDEKKyBHZW5lcmF0 ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGQyIGYgZDEpCisgICBNRVJHRV9KT0lOX1BM QUlOKGYpCisgICBORVNURURfTE9PUF9NQVRFUklBTElaRShkMSkKKyAgIFNFUV9TQ0FOKGQyIGYg ZDEpCisgICBOT19HQVRIRVIoZDEgZiBkMikKKygxOCByb3dzKQorCistLSBXZSBzaG91bGQgbm90 IGJlIGFibGUgdG8gZm9yY2UgdGhlIHBsYW5uZXIgdG8gam9pbiBmIHRvIGQxIGZpcnN0LCBiZWNh dXNlCistLSB0aGF0IGlzIG5vdCBhIHZhbGlkIGpvaW4gb3JkZXIsIGJ1dCB3ZSBzaG91bGQgYmUg YWJsZSB0byBmb3JjZSB0aGUgcGxhbm5lcgorLS0gdG8gbWFrZSBlaXRoZXIgZDIgb3IgZiB0aGUg ZHJpdmluZyB0YWJsZS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9 ICdqb2luX29yZGVyKGYgZDEgZDIpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0Up CitTRUxFQ1QgKiBGUk9NIGpvX2RpbTEgZDEKKwlJTk5FUiBKT0lOIChqb19mYWN0IGYgRlVMTCBK T0lOIGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkICsgMCA9IGQyLmlkICsgMCkKKwlPTiBkMS5pZCA9 IGYuZGltMV9pZCBPUiBmLmRpbTFfaWQgSVMgTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgICAg ICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9v cAorICAgRGlzYWJsZWQ6IHRydWUKKyAgIEpvaW4gRmlsdGVyOiAoKGQxLmlkID0gZi5kaW0xX2lk KSBPUiAoZi5kaW0xX2lkIElTIE5VTEwpKQorICAgLT4gIE1lcmdlIEZ1bGwgSm9pbgorICAgICAg ICAgRGlzYWJsZWQ6IHRydWUKKyAgICAgICAgIE1lcmdlIENvbmQ6ICgoKGQyLmlkICsgMCkpID0g KChmLmRpbTJfaWQgKyAwKSkpCisgICAgICAgICAtPiAgU29ydAorICAgICAgICAgICAgICAgU29y dCBLZXk6ICgoZDIuaWQgKyAwKSkKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19k aW0yIGQyCisgICAgICAgICAtPiAgU29ydAorICAgICAgICAgICAgICAgU29ydCBLZXk6ICgoZi5k aW0yX2lkICsgMCkpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZmFjdCBmCisg ICAtPiAgU2VxIFNjYW4gb24gam9fZGltMSBkMQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAg Sk9JTl9PUkRFUihmIGQxIGQyKSAvKiBwYXJ0aWFsbHkgbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQ bGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZDIgZiBkMSkKKyAgIE1FUkdFX0pPSU5fUExBSU4o ZikKKyAgIE5FU1RFRF9MT09QX1BMQUlOKGQxKQorICAgU0VRX1NDQU4oZDIgZiBkMSkKKyAgIE5P X0dBVEhFUihkMSBmIGQyKQorKDIxIHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5h ZHZpY2UgPSAnam9pbl9vcmRlcihmIGQyIGQxKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5f QURWSUNFKQorU0VMRUNUICogRlJPTSBqb19kaW0xIGQxCisJSU5ORVIgSk9JTiAoam9fZmFjdCBm IEZVTEwgSk9JTiBqb19kaW0yIGQyIE9OIGYuZGltMl9pZCArIDAgPSBkMi5pZCArIDApCisJT04g ZDEuaWQgPSBmLmRpbTFfaWQgT1IgZi5kaW0xX2lkIElTIE5VTEw7CisgICAgICAgICAgICAgICAg ICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVz dGVkIExvb3AKKyAgIEpvaW4gRmlsdGVyOiAoKGQxLmlkID0gZi5kaW0xX2lkKSBPUiAoZi5kaW0x X2lkIElTIE5VTEwpKQorICAgLT4gIE1lcmdlIEZ1bGwgSm9pbgorICAgICAgICAgTWVyZ2UgQ29u ZDogKCgoZi5kaW0yX2lkICsgMCkpID0gKChkMi5pZCArIDApKSkKKyAgICAgICAgIC0+ICBTb3J0 CisgICAgICAgICAgICAgICBTb3J0IEtleTogKChmLmRpbTJfaWQgKyAwKSkKKyAgICAgICAgICAg ICAgIC0+ICBTZXEgU2NhbiBvbiBqb19mYWN0IGYKKyAgICAgICAgIC0+ICBTb3J0CisgICAgICAg ICAgICAgICBTb3J0IEtleTogKChkMi5pZCArIDApKQorICAgICAgICAgICAgICAgLT4gIFNlcSBT Y2FuIG9uIGpvX2RpbTIgZDIKKyAgIC0+ICBNYXRlcmlhbGl6ZQorICAgICAgICAgLT4gIFNlcSBT Y2FuIG9uIGpvX2RpbTEgZDEKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIo ZiBkMiBkMSkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5f T1JERVIoZiBkMiBkMSkKKyAgIE1FUkdFX0pPSU5fUExBSU4oZDIpCisgICBORVNURURfTE9PUF9N QVRFUklBTElaRShkMSkKKyAgIFNFUV9TQ0FOKGYgZDIgZDEpCisgICBOT19HQVRIRVIoZDEgZiBk MikKKygyMCByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2pvaW5f b3JkZXIoZDIgZiBkMSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVD VCAqIEZST00gam9fZGltMSBkMQorCUlOTkVSIEpPSU4gKGpvX2ZhY3QgZiBGVUxMIEpPSU4gam9f ZGltMiBkMiBPTiBmLmRpbTJfaWQgKyAwID0gZDIuaWQgKyAwKQorCU9OIGQxLmlkID0gZi5kaW0x X2lkIE9SIGYuZGltMV9pZCBJUyBOVUxMOworICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZ IFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wCisgICBK b2luIEZpbHRlcjogKChkMS5pZCA9IGYuZGltMV9pZCkgT1IgKGYuZGltMV9pZCBJUyBOVUxMKSkK KyAgIC0+ICBNZXJnZSBGdWxsIEpvaW4KKyAgICAgICAgIE1lcmdlIENvbmQ6ICgoKGQyLmlkICsg MCkpID0gKChmLmRpbTJfaWQgKyAwKSkpCisgICAgICAgICAtPiAgU29ydAorICAgICAgICAgICAg ICAgU29ydCBLZXk6ICgoZDIuaWQgKyAwKSkKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBv biBqb19kaW0yIGQyCisgICAgICAgICAtPiAgU29ydAorICAgICAgICAgICAgICAgU29ydCBLZXk6 ICgoZi5kaW0yX2lkICsgMCkpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZmFj dCBmCisgICAtPiAgTWF0ZXJpYWxpemUKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19kaW0x IGQxCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGQyIGYgZDEpIC8qIG1h dGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGQyIGYgZDEp CisgICBNRVJHRV9KT0lOX1BMQUlOKGYpCisgICBORVNURURfTE9PUF9NQVRFUklBTElaRShkMSkK KyAgIFNFUV9TQ0FOKGQyIGYgZDEpCisgICBOT19HQVRIRVIoZDEgZiBkMikKKygyMCByb3dzKQor CitDT01NSVQ7CistLSBUd28gaW5jb21wYXRpYmxlIGpvaW4gb3JkZXJzIHNob3VsZCBjb25mbGlj dC4gSW4gdGhlIHNlY29uZCBjYXNlLAorLS0gdGhlIGNvbmZsaWN0IGlzIGltcGxpY2l0OiBpZiBk MSBpcyBvbiB0aGUgaW5uZXIgc2lkZSBvZiBhIGpvaW4gb2YgYW55CistLSB0eXBlLCBpdCBjYW5u b3QgYWxzbyBiZSB0aGUgZHJpdmluZyB0YWJsZS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5f YWR2aWNlLmFkdmljZSA9ICdqb2luX29yZGVyKGYpIGpvaW5fb3JkZXIoZDEpJzsKK0VYUExBSU4g KENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGpvX2RpbTEgZDEKKwlJTk5F UiBKT0lOIChqb19mYWN0IGYgRlVMTCBKT0lOIGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkICsgMCA9 IGQyLmlkICsgMCkKKwlPTiBkMS5pZCA9IGYuZGltMV9pZCBPUiBmLmRpbTFfaWQgSVMgTlVMTDsK KyAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgSm9pbiBGaWx0ZXI6ICgoZDEuaWQgPSBmLmRp bTFfaWQpIE9SIChmLmRpbTFfaWQgSVMgTlVMTCkpCisgICAtPiAgTWVyZ2UgRnVsbCBKb2luCisg ICAgICAgICBNZXJnZSBDb25kOiAoKChmLmRpbTJfaWQgKyAwKSkgPSAoKGQyLmlkICsgMCkpKQor ICAgICAgICAgLT4gIFNvcnQKKyAgICAgICAgICAgICAgIFNvcnQgS2V5OiAoKGYuZGltMl9pZCAr IDApKQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2ZhY3QgZgorICAgICAgICAg LT4gIFNvcnQKKyAgICAgICAgICAgICAgIFNvcnQgS2V5OiAoKGQyLmlkICsgMCkpCisgICAgICAg ICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZGltMiBkMgorICAgLT4gIE1hdGVyaWFsaXplCisg ICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZGltMSBkMQorIFN1cHBsaWVkIFBsYW4gQWR2aWNl OgorICAgSk9JTl9PUkRFUihmKSAvKiBtYXRjaGVkLCBjb25mbGljdGluZyAqLworICAgSk9JTl9P UkRFUihkMSkgLyogbWF0Y2hlZCwgY29uZmxpY3RpbmcsIGZhaWxlZCAqLworIEdlbmVyYXRlZCBQ bGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBkMiBkMSkKKyAgIE1FUkdFX0pPSU5fUExBSU4o ZDIpCisgICBORVNURURfTE9PUF9NQVRFUklBTElaRShkMSkKKyAgIFNFUV9TQ0FOKGYgZDIgZDEp CisgICBOT19HQVRIRVIoZDEgZiBkMikKKygyMSByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9h ZHZpY2UuYWR2aWNlID0gJ2pvaW5fb3JkZXIoZDEpIGhhc2hfam9pbihkMSknOworRVhQTEFJTiAo Q09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gam9fZGltMSBkMQorCUlOTkVS IEpPSU4gKGpvX2ZhY3QgZiBGVUxMIEpPSU4gam9fZGltMiBkMiBPTiBmLmRpbTJfaWQgKyAwID0g ZDIuaWQgKyAwKQorCU9OIGQxLmlkID0gZi5kaW0xX2lkIE9SIGYuZGltMV9pZCBJUyBOVUxMOwor ICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgSm9pbiBGaWx0ZXI6ICgoZDEuaWQgPSBm LmRpbTFfaWQpIE9SIChmLmRpbTFfaWQgSVMgTlVMTCkpCisgICAtPiAgU2VxIFNjYW4gb24gam9f ZGltMSBkMQorICAgLT4gIE1hdGVyaWFsaXplCisgICAgICAgICAtPiAgTWVyZ2UgRnVsbCBKb2lu CisgICAgICAgICAgICAgICBNZXJnZSBDb25kOiAoKChkMi5pZCArIDApKSA9ICgoZi5kaW0yX2lk ICsgMCkpKQorICAgICAgICAgICAgICAgLT4gIFNvcnQKKyAgICAgICAgICAgICAgICAgICAgIFNv cnQgS2V5OiAoKGQyLmlkICsgMCkpCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4g b24gam9fZGltMiBkMgorICAgICAgICAgICAgICAgLT4gIFNvcnQKKyAgICAgICAgICAgICAgICAg ICAgIFNvcnQgS2V5OiAoKGYuZGltMl9pZCArIDApKQorICAgICAgICAgICAgICAgICAgICAgLT4g IFNlcSBTY2FuIG9uIGpvX2ZhY3QgZgorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9P UkRFUihkMSkgLyogbWF0Y2hlZCwgY29uZmxpY3RpbmcgKi8KKyAgIEhBU0hfSk9JTihkMSkgLyog bWF0Y2hlZCwgY29uZmxpY3RpbmcsIGZhaWxlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToK KyAgIEpPSU5fT1JERVIoZDEgKGQyIGYpKQorICAgTUVSR0VfSk9JTl9QTEFJTihmKQorICAgTkVT VEVEX0xPT1BfTUFURVJJQUxJWkUoKGYgZDIpKQorICAgU0VRX1NDQU4oZDEgZDIgZikKKyAgIE5P X0dBVEhFUihkMSBmIGQyKQorKDIxIHJvd3MpCisKK0NPTU1JVDsKZGlmZiAtLWdpdCBhL2NvbnRy aWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvam9pbl9zdHJhdGVneS5vdXQgYi9jb250cmliL3Bn X3BsYW5fYWR2aWNlL2V4cGVjdGVkL2pvaW5fc3RyYXRlZ3kub3V0Cm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4wZjlkYjY5MjE5MAotLS0gL2Rldi9udWxsCisrKyBiL2Nv bnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvam9pbl9zdHJhdGVneS5vdXQKQEAgLTAsMCAr MSwzMzkgQEAKK0xPQUQgJ3BnX3BsYW5fYWR2aWNlJzsKK1NFVCBtYXhfcGFyYWxsZWxfd29ya2Vy c19wZXJfZ2F0aGVyID0gMDsKK0NSRUFURSBUQUJMRSBqb2luX2RpbSAoaWQgc2VyaWFsIHByaW1h cnkga2V5LCBkaW0gdGV4dCkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitJ TlNFUlQgSU5UTyBqb2luX2RpbSAoZGltKSBTRUxFQ1QgcmFuZG9tKCk6OnRleHQgRlJPTSBnZW5l cmF0ZV9zZXJpZXMoMSwxMDApIGc7CitWQUNVVU0gQU5BTFlaRSBqb2luX2RpbTsKK0NSRUFURSBU QUJMRSBqb2luX2ZhY3QgKAorCWlkIGludCBwcmltYXJ5IGtleSwKKwlkaW1faWQgaW50ZWdlciBu b3QgbnVsbCByZWZlcmVuY2VzIGpvaW5fZGltIChpZCkKKykgV0lUSCAoYXV0b3ZhY3V1bV9lbmFi bGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gam9pbl9mYWN0CisJU0VMRUNUIGcsIChnJTMpKzEg RlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwMDApIGc7CitDUkVBVEUgSU5ERVggam9pbl9mYWN0 X2RpbV9pZCBPTiBqb2luX2ZhY3QgKGRpbV9pZCk7CitWQUNVVU0gQU5BTFlaRSBqb2luX2ZhY3Q7 CistLSBXZSBleHBlY3QgYSBoYXNoIGpvaW4gYnkgZGVmYXVsdC4KK0VYUExBSU4gKENPU1RTIE9G RiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5fZGlt IGQgT04gZi5kaW1faWQgPSBkLmlkOworICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoIEpvaW4KKyAg IEhhc2ggQ29uZDogKGYuZGltX2lkID0gZC5pZCkKKyAgIC0+ICBTZXEgU2NhbiBvbiBqb2luX2Zh Y3QgZgorICAgLT4gIEhhc2gKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb2luX2RpbSBkCisg R2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQpCisgICBIQVNIX0pPSU4o ZCkKKyAgIFNFUV9TQ0FOKGYgZCkKKyAgIE5PX0dBVEhFUihmIGQpCisoMTAgcm93cykKKworLS0g VHJ5IGZvcmNpbmcgZWFjaCBqb2luIG1ldGhvZCBpbiB0dXJuIHdpdGggam9pbl9kaW0gYXMgdGhl IGlubmVyIHRhYmxlLgorLS0gQWxsIG9mIHRoZXNlIHNob3VsZCB3b3JrIGV4Y2VwdCBmb3IgTUVS R0VfSk9JTl9NQVRFUklBTElaRTsgdGhhdCB3aWxsCistLSBmYWlsLCBiZWNhdXNlIHRoZSBwbGFu bmVyIGtub3dzIHRoYXQgam9pbl9kaW0gKGlkKSBpcyB1bmlxdWUsIGFuZCB3aWxsCistLSByZWZ1 c2UgdG8gYWRkIG1hcmsvcmVzdG9yZSBvdmVyaGVhZC4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3Bs YW5fYWR2aWNlLmFkdmljZSA9ICdIQVNIX0pPSU4oZCknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQ TEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBP TiBmLmRpbV9pZCA9IGQuaWQ7CisgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggSm9pbgorICAgSGFz aCBDb25kOiAoZi5kaW1faWQgPSBkLmlkKQorICAgLT4gIFNlcSBTY2FuIG9uIGpvaW5fZmFjdCBm CisgICAtPiAgSGFzaAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvaW5fZGltIGQKKyBTdXBw bGllZCBQbGFuIEFkdmljZToKKyAgIEhBU0hfSk9JTihkKSAvKiBtYXRjaGVkICovCisgR2VuZXJh dGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQpCisgICBIQVNIX0pPSU4oZCkKKyAg IFNFUV9TQ0FOKGYgZCkKKyAgIE5PX0dBVEhFUihmIGQpCisoMTIgcm93cykKKworU0VUIExPQ0FM IHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdNRVJHRV9KT0lOX01BVEVSSUFMSVpFKGQpJzsKK0VY UExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3Qg ZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworICAgICAgICAgICAgICAgICAg ICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IE1lcmdlIEpvaW4KKyAgIERpc2FibGVkOiB0cnVlCisgICBNZXJnZSBDb25kOiAoZi5kaW1faWQg PSBkLmlkKQorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgam9pbl9mYWN0X2RpbV9pZCBvbiBqb2lu X2ZhY3QgZgorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgam9pbl9kaW1fcGtleSBvbiBqb2luX2Rp bSBkCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBNRVJHRV9KT0lOX01BVEVSSUFMSVpFKGQp IC8qIG1hdGNoZWQsIGZhaWxlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5f T1JERVIoZiBkKQorICAgTUVSR0VfSk9JTl9QTEFJTihkKQorICAgSU5ERVhfU0NBTihmIHB1Ymxp Yy5qb2luX2ZhY3RfZGltX2lkIGQgcHVibGljLmpvaW5fZGltX3BrZXkpCisgICBOT19HQVRIRVIo ZiBkKQorKDEyIHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnTUVS R0VfSk9JTl9QTEFJTihkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNF TEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5p ZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAg ICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBNZXJnZSBKb2luCisgICBNZXJnZSBDb25kOiAoZi5kaW1f aWQgPSBkLmlkKQorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgam9pbl9mYWN0X2RpbV9pZCBvbiBq b2luX2ZhY3QgZgorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgam9pbl9kaW1fcGtleSBvbiBqb2lu X2RpbSBkCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBNRVJHRV9KT0lOX1BMQUlOKGQpIC8q IG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGYgZCkK KyAgIE1FUkdFX0pPSU5fUExBSU4oZCkKKyAgIElOREVYX1NDQU4oZiBwdWJsaWMuam9pbl9mYWN0 X2RpbV9pZCBkIHB1YmxpYy5qb2luX2RpbV9wa2V5KQorICAgTk9fR0FUSEVSKGYgZCkKKygxMSBy b3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ05FU1RFRF9MT09QX01B VEVSSUFMSVpFKGQpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNU ICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOwor ICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIEpvaW4g RmlsdGVyOiAoZi5kaW1faWQgPSBkLmlkKQorICAgLT4gIFNlcSBTY2FuIG9uIGpvaW5fZmFjdCBm CisgICAtPiAgTWF0ZXJpYWxpemUKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb2luX2RpbSBk CisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBORVNURURfTE9PUF9NQVRFUklBTElaRShkKSAv KiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQp CisgICBORVNURURfTE9PUF9NQVRFUklBTElaRShkKQorICAgU0VRX1NDQU4oZiBkKQorICAgTk9f R0FUSEVSKGYgZCkKKygxMiByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNl ID0gJ05FU1RFRF9MT09QX01FTU9JWkUoZCknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FE VklDRSkKKwlTRUxFQ1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRp bV9pZCA9IGQuaWQ7CisgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAg ICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIC0+ICBTZXEgU2NhbiBvbiBqb2lu X2ZhY3QgZgorICAgLT4gIE1lbW9pemUKKyAgICAgICAgIENhY2hlIEtleTogZi5kaW1faWQKKyAg ICAgICAgIENhY2hlIE1vZGU6IGxvZ2ljYWwKKyAgICAgICAgIC0+ICBJbmRleCBTY2FuIHVzaW5n IGpvaW5fZGltX3BrZXkgb24gam9pbl9kaW0gZAorICAgICAgICAgICAgICAgSW5kZXggQ29uZDog KGlkID0gZi5kaW1faWQpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBORVNURURfTE9PUF9N RU1PSVpFKGQpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lO X09SREVSKGYgZCkKKyAgIE5FU1RFRF9MT09QX01FTU9JWkUoZCkKKyAgIFNFUV9TQ0FOKGYpCisg ICBJTkRFWF9TQ0FOKGQgcHVibGljLmpvaW5fZGltX3BrZXkpCisgICBOT19HQVRIRVIoZiBkKQor KDE1IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnTkVTVEVEX0xP T1BfUExBSU4oZCknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1Qg KiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7Cisg ICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVk IExvb3AKKyAgIC0+ICBTZXEgU2NhbiBvbiBqb2luX2ZhY3QgZgorICAgLT4gIEluZGV4IFNjYW4g dXNpbmcgam9pbl9kaW1fcGtleSBvbiBqb2luX2RpbSBkCisgICAgICAgICBJbmRleCBDb25kOiAo aWQgPSBmLmRpbV9pZCkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIE5FU1RFRF9MT09QX1BM QUlOKGQpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09S REVSKGYgZCkKKyAgIE5FU1RFRF9MT09QX1BMQUlOKGQpCisgICBTRVFfU0NBTihmKQorICAgSU5E RVhfU0NBTihkIHB1YmxpYy5qb2luX2RpbV9wa2V5KQorICAgTk9fR0FUSEVSKGYgZCkKKygxMiBy b3dzKQorCitDT01NSVQ7CistLSBOb3cgdHJ5IGZvcmNpbmcgZWFjaCBqb2luIG1ldGhvZCBpbiB0 dXJuIHdpdGggam9pbl9mYWN0IGFzIHRoZSBpbm5lcgorLS0gdGFibGUuIEFsbCBvZiB0aGVzZSBz aG91bGQgd29yay4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdI QVNIX0pPSU4oZiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1Qg KiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7Cisg ICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgSGFzaCBKb2luCisgICBIYXNoIENvbmQ6IChkLmlkID0gZi5k aW1faWQpCisgICAtPiAgU2VxIFNjYW4gb24gam9pbl9kaW0gZAorICAgLT4gIEhhc2gKKyAgICAg ICAgIC0+ICBTZXEgU2NhbiBvbiBqb2luX2ZhY3QgZgorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgor ICAgSEFTSF9KT0lOKGYpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6Cisg ICBKT0lOX09SREVSKGQgZikKKyAgIEhBU0hfSk9JTihmKQorICAgU0VRX1NDQU4oZCBmKQorICAg Tk9fR0FUSEVSKGYgZCkKKygxMiByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2 aWNlID0gJ01FUkdFX0pPSU5fTUFURVJJQUxJWkUoZiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQ TEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBP TiBmLmRpbV9pZCA9IGQuaWQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFO ICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTWVyZ2UgSm9pbgorICAgTWVy Z2UgQ29uZDogKGQuaWQgPSBmLmRpbV9pZCkKKyAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIGpvaW5f ZGltX3BrZXkgb24gam9pbl9kaW0gZAorICAgLT4gIE1hdGVyaWFsaXplCisgICAgICAgICAtPiAg SW5kZXggU2NhbiB1c2luZyBqb2luX2ZhY3RfZGltX2lkIG9uIGpvaW5fZmFjdCBmCisgU3VwcGxp ZWQgUGxhbiBBZHZpY2U6CisgICBNRVJHRV9KT0lOX01BVEVSSUFMSVpFKGYpIC8qIG1hdGNoZWQg Ki8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGQgZikKKyAgIE1FUkdF X0pPSU5fTUFURVJJQUxJWkUoZikKKyAgIElOREVYX1NDQU4oZCBwdWJsaWMuam9pbl9kaW1fcGtl eSBmIHB1YmxpYy5qb2luX2ZhY3RfZGltX2lkKQorICAgTk9fR0FUSEVSKGYgZCkKKygxMiByb3dz KQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ01FUkdFX0pPSU5fUExBSU4o ZiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGpv aW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CisgICAgICAgICAg ICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgTWVyZ2UgSm9pbgorICAgTWVyZ2UgQ29uZDogKGQuaWQgPSBmLmRpbV9pZCkKKyAg IC0+ICBJbmRleCBTY2FuIHVzaW5nIGpvaW5fZGltX3BrZXkgb24gam9pbl9kaW0gZAorICAgLT4g IEluZGV4IFNjYW4gdXNpbmcgam9pbl9mYWN0X2RpbV9pZCBvbiBqb2luX2ZhY3QgZgorIFN1cHBs aWVkIFBsYW4gQWR2aWNlOgorICAgTUVSR0VfSk9JTl9QTEFJTihmKSAvKiBtYXRjaGVkICovCisg R2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihkIGYpCisgICBNRVJHRV9KT0lO X1BMQUlOKGYpCisgICBJTkRFWF9TQ0FOKGQgcHVibGljLmpvaW5fZGltX3BrZXkgZiBwdWJsaWMu am9pbl9mYWN0X2RpbV9pZCkKKyAgIE5PX0dBVEhFUihmIGQpCisoMTEgcm93cykKKworU0VUIExP Q0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdORVNURURfTE9PUF9NQVRFUklBTElaRShmKSc7 CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gam9pbl9m YWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKKyAgICAgICAgICAgICAg ICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wCisgICBKb2luIEZpbHRlcjogKGYuZGlt X2lkID0gZC5pZCkKKyAgIC0+ICBTZXEgU2NhbiBvbiBqb2luX2RpbSBkCisgICAtPiAgTWF0ZXJp YWxpemUKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb2luX2ZhY3QgZgorIFN1cHBsaWVkIFBs YW4gQWR2aWNlOgorICAgTkVTVEVEX0xPT1BfTUFURVJJQUxJWkUoZikgLyogbWF0Y2hlZCAqLwor IEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZCBmKQorICAgTkVTVEVEX0xP T1BfTUFURVJJQUxJWkUoZikKKyAgIFNFUV9TQ0FOKGQgZikKKyAgIE5PX0dBVEhFUihmIGQpCiso MTIgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdORVNURURfTE9P UF9NRU1PSVpFKGYpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNU ICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOwor ICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIC0+ICBTZXEgU2NhbiBvbiBqb2luX2RpbSBk CisgICAtPiAgTWVtb2l6ZQorICAgICAgICAgQ2FjaGUgS2V5OiBkLmlkCisgICAgICAgICBDYWNo ZSBNb2RlOiBsb2dpY2FsCisgICAgICAgICAtPiAgSW5kZXggU2NhbiB1c2luZyBqb2luX2ZhY3Rf ZGltX2lkIG9uIGpvaW5fZmFjdCBmCisgICAgICAgICAgICAgICBJbmRleCBDb25kOiAoZGltX2lk ID0gZC5pZCkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIE5FU1RFRF9MT09QX01FTU9JWkUo ZikgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIo ZCBmKQorICAgTkVTVEVEX0xPT1BfTUVNT0laRShmKQorICAgU0VRX1NDQU4oZCkKKyAgIElOREVY X1NDQU4oZiBwdWJsaWMuam9pbl9mYWN0X2RpbV9pZCkKKyAgIE5PX0dBVEhFUihmIGQpCisoMTUg cm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdORVNURURfTE9PUF9Q TEFJTihmKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZS T00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKKyAgICAg ICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5l c3RlZCBMb29wCisgICAtPiAgU2VxIFNjYW4gb24gam9pbl9kaW0gZAorICAgLT4gIEluZGV4IFNj YW4gdXNpbmcgam9pbl9mYWN0X2RpbV9pZCBvbiBqb2luX2ZhY3QgZgorICAgICAgICAgSW5kZXgg Q29uZDogKGRpbV9pZCA9IGQuaWQpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBORVNURURf TE9PUF9QTEFJTihmKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAg Sk9JTl9PUkRFUihkIGYpCisgICBORVNURURfTE9PUF9QTEFJTihmKQorICAgU0VRX1NDQU4oZCkK KyAgIElOREVYX1NDQU4oZiBwdWJsaWMuam9pbl9mYWN0X2RpbV9pZCkKKyAgIE5PX0dBVEhFUihm IGQpCisoMTIgcm93cykKKworQ09NTUlUOworLS0gTm9uLXdvcmtpbmcgY2FzZXMuIFdlIGNhbid0 IGZvcmNlIGEgZm9yZWlnbiBqb2luIGJldHdlZW4gdGhlc2UgdGFibGVzLAorLS0gYmVjYXVzZSB0 aGV5IGFyZW4ndCBmb3JlaWduIHRhYmxlcy4gV2UgYWxzbyBjYW4ndCB1c2UgdHdvIGRpZmZlcmVu dAorLS0gc3RyYXRlZ2llcyBvbiB0aGUgc2FtZSB0YWJsZSwgbm9yIGNhbiB3ZSBwdXQgYm90aCB0 YWJsZXMgb24gdGhlIGlubmVyCistLSBzaWRlIG9mIHRoZSBzYW1lIGpvaW4uCitCRUdJTjsKK1NF VCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnRk9SRUlHTl9KT0lOKChmIGQpKSc7CitF WFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0 IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKKyAgICAgICAgICAgICAgICAg ICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgRGlzYWJs ZWQ6IHRydWUKKyAgIC0+ICBTZXEgU2NhbiBvbiBqb2luX2ZhY3QgZgorICAgLT4gIEluZGV4IFNj YW4gdXNpbmcgam9pbl9kaW1fcGtleSBvbiBqb2luX2RpbSBkCisgICAgICAgICBJbmRleCBDb25k OiAoaWQgPSBmLmRpbV9pZCkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIEZPUkVJR05fSk9J TigoZiBkKSkgLyogbWF0Y2hlZCwgZmFpbGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgor ICAgSk9JTl9PUkRFUihmIGQpCisgICBORVNURURfTE9PUF9QTEFJTihkKQorICAgU0VRX1NDQU4o ZikKKyAgIElOREVYX1NDQU4oZCBwdWJsaWMuam9pbl9kaW1fcGtleSkKKyAgIE5PX0dBVEhFUihm IGQpCisoMTMgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdORVNU RURfTE9PUF9QTEFJTihmKSBORVNURURfTE9PUF9NQVRFUklBTElaRShmKSc7CitFWFBMQUlOIChD T1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBq b2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg IFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE1lcmdl IEpvaW4KKyAgIE1lcmdlIENvbmQ6IChkLmlkID0gZi5kaW1faWQpCisgICAtPiAgSW5kZXggU2Nh biB1c2luZyBqb2luX2RpbV9wa2V5IG9uIGpvaW5fZGltIGQKKyAgIC0+ICBJbmRleCBTY2FuIHVz aW5nIGpvaW5fZmFjdF9kaW1faWQgb24gam9pbl9mYWN0IGYKKyBTdXBwbGllZCBQbGFuIEFkdmlj ZToKKyAgIE5FU1RFRF9MT09QX1BMQUlOKGYpIC8qIG1hdGNoZWQsIGNvbmZsaWN0aW5nLCBmYWls ZWQgKi8KKyAgIE5FU1RFRF9MT09QX01BVEVSSUFMSVpFKGYpIC8qIG1hdGNoZWQsIGNvbmZsaWN0 aW5nLCBmYWlsZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGQg ZikKKyAgIE1FUkdFX0pPSU5fUExBSU4oZikKKyAgIElOREVYX1NDQU4oZCBwdWJsaWMuam9pbl9k aW1fcGtleSBmIHB1YmxpYy5qb2luX2ZhY3RfZGltX2lkKQorICAgTk9fR0FUSEVSKGYgZCkKKygx MiByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ05FU1RFRF9MT09Q X1BMQUlOKGYgZCknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1Qg KiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7Cisg ICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVk IExvb3AKKyAgIERpc2FibGVkOiB0cnVlCisgICAtPiAgU2VxIFNjYW4gb24gam9pbl9mYWN0IGYK KyAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIGpvaW5fZGltX3BrZXkgb24gam9pbl9kaW0gZAorICAg ICAgICAgSW5kZXggQ29uZDogKGlkID0gZi5kaW1faWQpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6 CisgICBORVNURURfTE9PUF9QTEFJTihmKSAvKiBtYXRjaGVkLCBmYWlsZWQgKi8KKyAgIE5FU1RF RF9MT09QX1BMQUlOKGQpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6Cisg ICBKT0lOX09SREVSKGYgZCkKKyAgIE5FU1RFRF9MT09QX1BMQUlOKGQpCisgICBTRVFfU0NBTihm KQorICAgSU5ERVhfU0NBTihkIHB1YmxpYy5qb2luX2RpbV9wa2V5KQorICAgTk9fR0FUSEVSKGYg ZCkKKygxNCByb3dzKQorCitDT01NSVQ7CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2 aWNlL2V4cGVjdGVkL2xvY2FsX2NvbGxlY3Rvci5vdXQgYi9jb250cmliL3BnX3BsYW5fYWR2aWNl L2V4cGVjdGVkL2xvY2FsX2NvbGxlY3Rvci5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMDAuLmYyYWRlZjM5ZWQ4Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19w bGFuX2FkdmljZS9leHBlY3RlZC9sb2NhbF9jb2xsZWN0b3Iub3V0CkBAIC0wLDAgKzEsNjcgQEAK K0NSRUFURSBFWFRFTlNJT04gcGdfcGxhbl9hZHZpY2U7CitTRVQgZGVidWdfcGFyYWxsZWxfcXVl cnkgPSBvZmY7CistLSBUcnkgY2xlYXJpbmcgYWR2aWNlIGJlZm9yZSB3ZSd2ZSBjb2xsZWN0ZWQg YW55LgorU0VMRUNUIHBnX2NsZWFyX2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UoKTsKKyBwZ19jbGVh cl9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgCisoMSByb3cpCisKKy0tIFNldCBhIHNtYWxsIGFkdmljZSBjb2xsZWN0aW9uIGxpbWl0 IHNvIHRoYXQgd2UnbGwgZXhjZWVkIGl0LgorU0VUIHBnX3BsYW5fYWR2aWNlLmxvY2FsX2NvbGxl Y3Rpb25fbGltaXQgPSAyOworLS0gRW5hYmxlIHRoZSBjb2xsZWN0b3IuCitTRVQgcGdfcGxhbl9h ZHZpY2UubG9jYWxfY29sbGVjdG9yID0gb247CistLSBTZXQgdXAgYSBkdW1teSB0YWJsZS4KK0NS RUFURSBUQUJMRSBkdW1teV90YWJsZSAoYSBpbnQgcHJpbWFyeSBrZXksIGIgdGV4dCkKKwlXSVRI IChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSwgcGFyYWxsZWxfd29ya2VycyA9IDApOworLS0g VGVzdCBxdWVyaWVzLgorU0VMRUNUICogRlJPTSBkdW1teV90YWJsZSBhLCBkdW1teV90YWJsZSBi OworIGEgfCBiIHwgYSB8IGIgCistLS0rLS0tKy0tLSstLS0KKygwIHJvd3MpCisKK1NFTEVDVCAq IEZST00gZHVtbXlfdGFibGU7CisgYSB8IGIgCistLS0rLS0tCisoMCByb3dzKQorCistLSBTaG91 bGQgcmV0dXJuIHRoZSBhZHZpY2UgZnJvbSB0aGUgc2Vjb25kIHRlc3QgcXVlcnkuCitTRUxFQ1Qg YWR2aWNlIEZST00gcGdfZ2V0X2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UoKSBPUkRFUiBCWSBpZCBE RVNDIExJTUlUIDE7CisgICAgICAgICBhZHZpY2UgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIFNFUV9TQ0FOKGR1bW15X3RhYmxlKSArCisgTk9fR0FUSEVSKGR1bW15X3RhYmxl KQorKDEgcm93KQorCistLSBOb3cgdHJ5IGNsZWFyaW5nIGFkdmljZSBhZ2Fpbi4KK1NFTEVDVCBw Z19jbGVhcl9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlKCk7CisgcGdfY2xlYXJfY29sbGVjdGVkX2xv Y2FsX2FkdmljZSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIAorKDEgcm93 KQorCistLSBSYWlzZSB0aGUgY29sbGVjdGlvbiBsaW1pdCBzbyB0aGF0IHRoZSBjb2xsZWN0b3Ig dXNlcyBtdWx0aXBsZSBjaHVua3MuCitTRVQgcGdfcGxhbl9hZHZpY2UubG9jYWxfY29sbGVjdGlv bl9saW1pdCA9IDIwMDA7CistLSBQdXNoIGEgYnVuY2ggb2YgcXVlcmllcyB0aHJvdWdoIHRoZSBj b2xsZWN0b3IuCitETyAkJAorQkVHSU4KKwlGT1IgeCBJTiAxLi4yMDAwIExPT1AKKwkJRVhFQ1VU RSAnU0VMRUNUICogRlJPTSBkdW1teV90YWJsZSc7CisJRU5EIExPT1A7CitFTkQKKyQkOworLS0g Q2hlY2sgdGhhdCB0aGUgY29sbGVjdG9yIHdvcmtlZC4KK1NFTEVDVCBDT1VOVCgqKSBGUk9NIHBn X2dldF9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlKCk7CisgY291bnQgCistLS0tLS0tCisgIDIwMDAK KygxIHJvdykKKworLS0gQW5kIGNsZWFyIG9uZSBtb3JlIHRpbWUsIHRvIHZlcmlmeSB0aGF0IHRo aXMgZG9lc24ndCBjYXVzZSBhIHByb2JsZW0KKy0tIGV2ZW4gd2l0aCBhIGxhcmdlciBudW1iZXIg b2YgZW50cmllcy4KK1NFTEVDVCBwZ19jbGVhcl9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlKCk7Cisg cGdfY2xlYXJfY29sbGVjdGVkX2xvY2FsX2FkdmljZSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIAorKDEgcm93KQorCmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2 aWNlL2V4cGVjdGVkL3BhcnRpdGlvbndpc2Uub3V0IGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9l eHBlY3RlZC9wYXJ0aXRpb253aXNlLm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwMC4uMmIzZDBhODI0NDMKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5f YWR2aWNlL2V4cGVjdGVkL3BhcnRpdGlvbndpc2Uub3V0CkBAIC0wLDAgKzEsNDI2IEBACitMT0FE ICdwZ19wbGFuX2FkdmljZSc7CitTRVQgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9 IDA7CitTRVQgZW5hYmxlX3BhcnRpdGlvbndpc2Vfam9pbiA9IHRydWU7CitDUkVBVEUgVEFCTEUg cHQxIChpZCBpbnRlZ2VyIHByaW1hcnkga2V5LCBkaW0xIHRleHQsIHZhbDEgaW50KQorCVBBUlRJ VElPTiBCWSBSQU5HRSAoaWQpOworQ1JFQVRFIFRBQkxFIHB0MWEgUEFSVElUSU9OIE9GIHB0MSBG T1IgVkFMVUVTIEZST00gKDEpIHRvICgxMDAxKQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9 IGZhbHNlKTsKK0NSRUFURSBUQUJMRSBwdDFiIFBBUlRJVElPTiBPRiBwdDEgRk9SIFZBTFVFUyBG Uk9NICgxMDAxKSB0byAoMjAwMSkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7 CitDUkVBVEUgVEFCTEUgcHQxYyBQQVJUSVRJT04gT0YgcHQxIEZPUiBWQUxVRVMgRlJPTSAoMjAw MSkgdG8gKDMwMDEpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJU IElOVE8gcHQxIChpZCwgZGltMSwgdmFsMSkKKwlTRUxFQ1QgZywgJ3NvbWUgZmlsbGVyIHRleHQg JyB8fCBnLCAoZyAlIDMpICsgMQorCSAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwzMDAwKSBnOwor VkFDVVVNIEFOQUxZWkUgcHQxOworQ1JFQVRFIFRBQkxFIHB0MiAoaWQgaW50ZWdlciBwcmltYXJ5 IGtleSwgZGltMiB0ZXh0LCB2YWwyIGludCkKKwlQQVJUSVRJT04gQlkgUkFOR0UgKGlkKTsKK0NS RUFURSBUQUJMRSBwdDJhIFBBUlRJVElPTiBPRiBwdDIgRk9SIFZBTFVFUyBGUk9NICgxKSB0byAo MTAwMSkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitDUkVBVEUgVEFCTEUg cHQyYiBQQVJUSVRJT04gT0YgcHQyIEZPUiBWQUxVRVMgRlJPTSAoMTAwMSkgdG8gKDIwMDEpCisJ V0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworQ1JFQVRFIFRBQkxFIHB0MmMgUEFS VElUSU9OIE9GIHB0MiBGT1IgVkFMVUVTIEZST00gKDIwMDEpIHRvICgzMDAxKQorCVdJVEggKGF1 dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJTlRPIHB0MiAoaWQsIGRpbTIsIHZh bDIpCisJU0VMRUNUIGcsICdzb21lIG90aGVyIHRleHQgJyB8fCBnLCAoZyAlIDUpICsgMQorCSAg RlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwzMDAwLDIpIGc7CitWQUNVVU0gQU5BTFlaRSBwdDI7CitD UkVBVEUgVEFCTEUgcHQzIChpZCBpbnRlZ2VyIHByaW1hcnkga2V5LCBkaW0zIHRleHQsIHZhbDMg aW50KQorCVBBUlRJVElPTiBCWSBSQU5HRSAoaWQpOworQ1JFQVRFIFRBQkxFIHB0M2EgUEFSVElU SU9OIE9GIHB0MyBGT1IgVkFMVUVTIEZST00gKDEpIHRvICgxMDAxKQorCVdJVEggKGF1dG92YWN1 dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0NSRUFURSBUQUJMRSBwdDNiIFBBUlRJVElPTiBPRiBwdDMg Rk9SIFZBTFVFUyBGUk9NICgxMDAxKSB0byAoMjAwMSkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJs ZWQgPSBmYWxzZSk7CitDUkVBVEUgVEFCTEUgcHQzYyBQQVJUSVRJT04gT0YgcHQzIEZPUiBWQUxV RVMgRlJPTSAoMjAwMSkgdG8gKDMwMDEpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFs c2UpOworSU5TRVJUIElOVE8gcHQzIChpZCwgZGltMywgdmFsMykKKwlTRUxFQ1QgZywgJ2EgdGhp cmQgcmFuZG9tIHRleHQgJyB8fCBnLCAoZyAlIDcpICsgMQorCSAgRlJPTSBnZW5lcmF0ZV9zZXJp ZXMoMSwzMDAwLDMpIGc7CitWQUNVVU0gQU5BTFlaRSBwdDM7CitDUkVBVEUgVEFCTEUgcHRtaXNt YXRjaCAoaWQgaW50ZWdlciBwcmltYXJ5IGtleSwgZGltbSB0ZXh0LCB2YWxtIGludCkKKwlQQVJU SVRJT04gQlkgUkFOR0UgKGlkKTsKK0NSRUFURSBUQUJMRSBwdG1pc21hdGNoYSBQQVJUSVRJT04g T0YgcHRtaXNtYXRjaAorICAgIEZPUiBWQUxVRVMgRlJPTSAoMSkgdG8gKDE1MDEpCisJV0lUSCAo YXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworQ1JFQVRFIFRBQkxFIHB0bWlzbWF0Y2hiIFBB UlRJVElPTiBPRiBwdG1pc21hdGNoCisgICAgRk9SIFZBTFVFUyBGUk9NICgxNTAxKSB0byAoMzAw MSkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5UTyBwdG1p c21hdGNoIChpZCwgZGltbSwgdmFsbSkKKwlTRUxFQ1QgZywgJ3lldCBhbm90aGVyIHRleHQgJyB8 fCBnLCAoZyAlIDIpICsgMQorCSAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwzMDAwKSBnOworVkFD VVVNIEFOQUxZWkUgcHRtaXNtYXRjaDsKK0VYUExBSU4gKFBMQU5fQURWSUNFLCBDT1NUUyBPRkYp CitTRUxFQ1QgKiBGUk9NIHB0MSwgcHQyLCBwdDMgV0hFUkUgcHQxLmlkID0gcHQyLmlkIEFORCBw dDIuaWQgPSBwdDMuaWQKKyAgIEFORCB2YWwxID0gMSBBTkQgdmFsMiA9IDEgQU5EIHZhbDMgPSAx OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorIEFwcGVuZAorICAgLT4gIE5lc3RlZCBMb29wCisgICAgICAgICAtPiAgSGFzaCBKb2lu CisgICAgICAgICAgICAgICBIYXNoIENvbmQ6IChwdDJfMS5pZCA9IHB0M18xLmlkKQorICAgICAg ICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0MmEgcHQyXzEKKyAgICAgICAgICAgICAgICAgICAg IEZpbHRlcjogKHZhbDIgPSAxKQorICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAg ICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDNhIHB0M18xCisgICAgICAgICAgICAgICAgICAg ICAgICAgICBGaWx0ZXI6ICh2YWwzID0gMSkKKyAgICAgICAgIC0+ICBJbmRleCBTY2FuIHVzaW5n IHB0MWFfcGtleSBvbiBwdDFhIHB0MV8xCisgICAgICAgICAgICAgICBJbmRleCBDb25kOiAoaWQg PSBwdDJfMS5pZCkKKyAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDEgPSAxKQorICAgLT4gIE5l c3RlZCBMb29wCisgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICBIYXNoIENv bmQ6IChwdDJfMi5pZCA9IHB0M18yLmlkKQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9u IHB0MmIgcHQyXzIKKyAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDIgPSAxKQorICAg ICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBv biBwdDNiIHB0M18yCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwzID0g MSkKKyAgICAgICAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIHB0MWJfcGtleSBvbiBwdDFiIHB0MV8y CisgICAgICAgICAgICAgICBJbmRleCBDb25kOiAoaWQgPSBwdDJfMi5pZCkKKyAgICAgICAgICAg ICAgIEZpbHRlcjogKHZhbDEgPSAxKQorICAgLT4gIE5lc3RlZCBMb29wCisgICAgICAgICAtPiAg SGFzaCBKb2luCisgICAgICAgICAgICAgICBIYXNoIENvbmQ6IChwdDJfMy5pZCA9IHB0M18zLmlk KQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0MmMgcHQyXzMKKyAgICAgICAgICAg ICAgICAgICAgIEZpbHRlcjogKHZhbDIgPSAxKQorICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAg ICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDNjIHB0M18zCisgICAgICAgICAg ICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwzID0gMSkKKyAgICAgICAgIC0+ICBJbmRleCBT Y2FuIHVzaW5nIHB0MWNfcGtleSBvbiBwdDFjIHB0MV8zCisgICAgICAgICAgICAgICBJbmRleCBD b25kOiAoaWQgPSBwdDJfMy5pZCkKKyAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDEgPSAxKQor IEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIocHQyL3B1YmxpYy5wdDJhIHB0 My9wdWJsaWMucHQzYSBwdDEvcHVibGljLnB0MWEpCisgICBKT0lOX09SREVSKHB0Mi9wdWJsaWMu cHQyYiBwdDMvcHVibGljLnB0M2IgcHQxL3B1YmxpYy5wdDFiKQorICAgSk9JTl9PUkRFUihwdDIv cHVibGljLnB0MmMgcHQzL3B1YmxpYy5wdDNjIHB0MS9wdWJsaWMucHQxYykKKyAgIE5FU1RFRF9M T09QX1BMQUlOKHB0MS9wdWJsaWMucHQxYSBwdDEvcHVibGljLnB0MWIgcHQxL3B1YmxpYy5wdDFj KQorICAgSEFTSF9KT0lOKHB0My9wdWJsaWMucHQzYSBwdDMvcHVibGljLnB0M2IgcHQzL3B1Ymxp Yy5wdDNjKQorICAgU0VRX1NDQU4ocHQyL3B1YmxpYy5wdDJhIHB0My9wdWJsaWMucHQzYSBwdDIv cHVibGljLnB0MmIgcHQzL3B1YmxpYy5wdDNiCisgICAgcHQyL3B1YmxpYy5wdDJjIHB0My9wdWJs aWMucHQzYykKKyAgIElOREVYX1NDQU4ocHQxL3B1YmxpYy5wdDFhIHB1YmxpYy5wdDFhX3BrZXkg cHQxL3B1YmxpYy5wdDFiIHB1YmxpYy5wdDFiX3BrZXkKKyAgICBwdDEvcHVibGljLnB0MWMgcHVi bGljLnB0MWNfcGtleSkKKyAgIFBBUlRJVElPTldJU0UoKHB0MSBwdDIgcHQzKSkKKyAgIE5PX0dB VEhFUihwdDEvcHVibGljLnB0MWEgcHQxL3B1YmxpYy5wdDFiIHB0MS9wdWJsaWMucHQxYyBwdDIv cHVibGljLnB0MmEKKyAgICBwdDIvcHVibGljLnB0MmIgcHQyL3B1YmxpYy5wdDJjIHB0My9wdWJs aWMucHQzYSBwdDMvcHVibGljLnB0M2IgcHQzL3B1YmxpYy5wdDNjKQorKDQ3IHJvd3MpCisKKy0t IFN1cHByZXNzIHBhcnRpdGlvbndpc2Ugam9pbiwgb3IgZG8gaXQganVzdCBwYXJ0aWFsbHkuCitC RUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnUEFSVElUSU9OV0lTRShw dDEgcHQyIHB0MyknOworRVhQTEFJTiAoUExBTl9BRFZJQ0UsIENPU1RTIE9GRikKK1NFTEVDVCAq IEZST00gcHQxLCBwdDIsIHB0MyBXSEVSRSBwdDEuaWQgPSBwdDIuaWQgQU5EIHB0Mi5pZCA9IHB0 My5pZAorICAgQU5EIHZhbDEgPSAxIEFORCB2YWwyID0gMSBBTkQgdmFsMyA9IDE7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVz dGVkIExvb3AKKyAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgIEhhc2ggQ29uZDogKHB0Mi5pZCA9 IHB0My5pZCkKKyAgICAgICAgIC0+ICBBcHBlbmQKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2Nh biBvbiBwdDJhIHB0Ml8xCisgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkK KyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDJiIHB0Ml8yCisgICAgICAgICAgICAg ICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBv biBwdDJjIHB0Ml8zCisgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyAg ICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAtPiAgQXBwZW5kCisgICAgICAgICAgICAg ICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQzYSBwdDNfMQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgRmlsdGVyOiAodmFsMyA9IDEpCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNj YW4gb24gcHQzYiBwdDNfMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFs MyA9IDEpCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQzYyBwdDNfMwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMyA9IDEpCisgICAtPiAgQXBw ZW5kCisgICAgICAgICAtPiAgSW5kZXggU2NhbiB1c2luZyBwdDFhX3BrZXkgb24gcHQxYSBwdDFf MQorICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGlkID0gcHQyLmlkKQorICAgICAgICAgICAg ICAgRmlsdGVyOiAodmFsMSA9IDEpCisgICAgICAgICAtPiAgSW5kZXggU2NhbiB1c2luZyBwdDFi X3BrZXkgb24gcHQxYiBwdDFfMgorICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGlkID0gcHQy LmlkKQorICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMSA9IDEpCisgICAgICAgICAtPiAgSW5k ZXggU2NhbiB1c2luZyBwdDFjX3BrZXkgb24gcHQxYyBwdDFfMworICAgICAgICAgICAgICAgSW5k ZXggQ29uZDogKGlkID0gcHQyLmlkKQorICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMSA9IDEp CisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBQQVJUSVRJT05XSVNFKHB0MSkgLyogbWF0Y2hl ZCAqLworICAgUEFSVElUSU9OV0lTRShwdDIpIC8qIG1hdGNoZWQgKi8KKyAgIFBBUlRJVElPTldJ U0UocHQzKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9P UkRFUihwdDIgcHQzIHB0MSkKKyAgIE5FU1RFRF9MT09QX1BMQUlOKHB0MSkKKyAgIEhBU0hfSk9J TihwdDMpCisgICBTRVFfU0NBTihwdDIvcHVibGljLnB0MmEgcHQyL3B1YmxpYy5wdDJiIHB0Mi9w dWJsaWMucHQyYyBwdDMvcHVibGljLnB0M2EKKyAgICBwdDMvcHVibGljLnB0M2IgcHQzL3B1Ymxp Yy5wdDNjKQorICAgSU5ERVhfU0NBTihwdDEvcHVibGljLnB0MWEgcHVibGljLnB0MWFfcGtleSBw dDEvcHVibGljLnB0MWIgcHVibGljLnB0MWJfcGtleQorICAgIHB0MS9wdWJsaWMucHQxYyBwdWJs aWMucHQxY19wa2V5KQorICAgUEFSVElUSU9OV0lTRShwdDIgcHQzIHB0MSkKKyAgIE5PX0dBVEhF UihwdDEvcHVibGljLnB0MWEgcHQxL3B1YmxpYy5wdDFiIHB0MS9wdWJsaWMucHQxYyBwdDIvcHVi bGljLnB0MmEKKyAgICBwdDIvcHVibGljLnB0MmIgcHQyL3B1YmxpYy5wdDJjIHB0My9wdWJsaWMu cHQzYSBwdDMvcHVibGljLnB0M2IgcHQzL3B1YmxpYy5wdDNjKQorKDQzIHJvd3MpCisKK1NFVCBM T0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnUEFSVElUSU9OV0lTRSgocHQxIHB0MikgcHQz KSc7CitFWFBMQUlOIChQTEFOX0FEVklDRSwgQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBwdDEs IHB0MiwgcHQzIFdIRVJFIHB0MS5pZCA9IHB0Mi5pZCBBTkQgcHQyLmlkID0gcHQzLmlkCisgICBB TkQgdmFsMSA9IDEgQU5EIHZhbDIgPSAxIEFORCB2YWwzID0gMTsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoIEpvaW4KKyAg IEhhc2ggQ29uZDogKHB0MS5pZCA9IHB0My5pZCkKKyAgIC0+ICBBcHBlbmQKKyAgICAgICAgIC0+ ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHB0MV8xLmlkID0gcHQyXzEu aWQpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQxYSBwdDFfMQorICAgICAgICAg ICAgICAgICAgICAgRmlsdGVyOiAodmFsMSA9IDEpCisgICAgICAgICAgICAgICAtPiAgSGFzaAor ICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0MmEgcHQyXzEKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDIgPSAxKQorICAgICAgICAgLT4gIEhhc2gg Sm9pbgorICAgICAgICAgICAgICAgSGFzaCBDb25kOiAocHQxXzIuaWQgPSBwdDJfMi5pZCkKKyAg ICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDFiIHB0MV8yCisgICAgICAgICAgICAgICAg ICAgICBGaWx0ZXI6ICh2YWwxID0gMSkKKyAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAg ICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQyYiBwdDJfMgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgRmlsdGVyOiAodmFsMiA9IDEpCisgICAgICAgICAtPiAgSGFzaCBKb2luCisg ICAgICAgICAgICAgICBIYXNoIENvbmQ6IChwdDFfMy5pZCA9IHB0Ml8zLmlkKQorICAgICAgICAg ICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0MWMgcHQxXzMKKyAgICAgICAgICAgICAgICAgICAgIEZp bHRlcjogKHZhbDEgPSAxKQorICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAg ICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDJjIHB0Ml8zCisgICAgICAgICAgICAgICAgICAgICAg ICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyAgIC0+ICBIYXNoCisgICAgICAgICAtPiAgQXBwZW5k CisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQzYSBwdDNfMQorICAgICAgICAgICAg ICAgICAgICAgRmlsdGVyOiAodmFsMyA9IDEpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4g b24gcHQzYiBwdDNfMgorICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMyA9IDEpCisg ICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQzYyBwdDNfMworICAgICAgICAgICAgICAg ICAgICAgRmlsdGVyOiAodmFsMyA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBQQVJU SVRJT05XSVNFKChwdDEgcHQyKSkgLyogbWF0Y2hlZCAqLworICAgUEFSVElUSU9OV0lTRShwdDMp IC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKHB0 MS9wdWJsaWMucHQxYSBwdDIvcHVibGljLnB0MmEpCisgICBKT0lOX09SREVSKHB0MS9wdWJsaWMu cHQxYiBwdDIvcHVibGljLnB0MmIpCisgICBKT0lOX09SREVSKHB0MS9wdWJsaWMucHQxYyBwdDIv cHVibGljLnB0MmMpCisgICBKT0lOX09SREVSKHtwdDEgcHQyfSBwdDMpCisgICBIQVNIX0pPSU4o cHQyL3B1YmxpYy5wdDJhIHB0Mi9wdWJsaWMucHQyYiBwdDIvcHVibGljLnB0MmMgcHQzKQorICAg U0VRX1NDQU4ocHQxL3B1YmxpYy5wdDFhIHB0Mi9wdWJsaWMucHQyYSBwdDEvcHVibGljLnB0MWIg cHQyL3B1YmxpYy5wdDJiCisgICAgcHQxL3B1YmxpYy5wdDFjIHB0Mi9wdWJsaWMucHQyYyBwdDMv cHVibGljLnB0M2EgcHQzL3B1YmxpYy5wdDNiCisgICAgcHQzL3B1YmxpYy5wdDNjKQorICAgUEFS VElUSU9OV0lTRSgocHQxIHB0MikgcHQzKQorICAgTk9fR0FUSEVSKHB0MS9wdWJsaWMucHQxYSBw dDEvcHVibGljLnB0MWIgcHQxL3B1YmxpYy5wdDFjIHB0Mi9wdWJsaWMucHQyYQorICAgIHB0Mi9w dWJsaWMucHQyYiBwdDIvcHVibGljLnB0MmMgcHQzL3B1YmxpYy5wdDNhIHB0My9wdWJsaWMucHQz YiBwdDMvcHVibGljLnB0M2MpCisoNDcgcm93cykKKworQ09NTUlUOworLS0gVGVzdCBjb25mbGlj dGluZyBhZHZpY2UuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAn UEFSVElUSU9OV0lTRSgocHQxIHB0MikgKHB0MSBwdDMpKSc7CitFWFBMQUlOIChQTEFOX0FEVklD RSwgQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBwdDEsIHB0MiwgcHQzIFdIRVJFIHB0MS5pZCA9 IHB0Mi5pZCBBTkQgcHQyLmlkID0gcHQzLmlkCisgICBBTkQgdmFsMSA9IDEgQU5EIHZhbDIgPSAx IEFORCB2YWwzID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVS WSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBBcHBlbmQKKyAgIERpc2FibGVkOiB0cnVlCisgICAtPiAgTmVz dGVkIExvb3AKKyAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgIEhhc2ggQ29u ZDogKHB0Ml8xLmlkID0gcHQzXzEuaWQpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24g cHQyYSBwdDJfMQorICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMiA9IDEpCisgICAg ICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9u IHB0M2EgcHQzXzEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDMgPSAx KQorICAgICAgICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgcHQxYV9wa2V5IG9uIHB0MWEgcHQxXzEK KyAgICAgICAgICAgICAgIEluZGV4IENvbmQ6IChpZCA9IHB0Ml8xLmlkKQorICAgICAgICAgICAg ICAgRmlsdGVyOiAodmFsMSA9IDEpCisgICAtPiAgTmVzdGVkIExvb3AKKyAgICAgICAgIC0+ICBI YXNoIEpvaW4KKyAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHB0Ml8yLmlkID0gcHQzXzIuaWQp CisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQyYiBwdDJfMgorICAgICAgICAgICAg ICAgICAgICAgRmlsdGVyOiAodmFsMiA9IDEpCisgICAgICAgICAgICAgICAtPiAgSGFzaAorICAg ICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0M2IgcHQzXzIKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDMgPSAxKQorICAgICAgICAgLT4gIEluZGV4IFNj YW4gdXNpbmcgcHQxYl9wa2V5IG9uIHB0MWIgcHQxXzIKKyAgICAgICAgICAgICAgIEluZGV4IENv bmQ6IChpZCA9IHB0Ml8yLmlkKQorICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMSA9IDEpCisg ICAtPiAgTmVzdGVkIExvb3AKKyAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAg IEhhc2ggQ29uZDogKHB0Ml8zLmlkID0gcHQzXzMuaWQpCisgICAgICAgICAgICAgICAtPiAgU2Vx IFNjYW4gb24gcHQyYyBwdDJfMworICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMiA9 IDEpCisgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgLT4gIFNl cSBTY2FuIG9uIHB0M2MgcHQzXzMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjog KHZhbDMgPSAxKQorICAgICAgICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgcHQxY19wa2V5IG9uIHB0 MWMgcHQxXzMKKyAgICAgICAgICAgICAgIEluZGV4IENvbmQ6IChpZCA9IHB0Ml8zLmlkKQorICAg ICAgICAgICAgICAgRmlsdGVyOiAodmFsMSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6Cisg ICBQQVJUSVRJT05XSVNFKChwdDEgcHQyKSkgLyogbWF0Y2hlZCwgY29uZmxpY3RpbmcsIGZhaWxl ZCAqLworICAgUEFSVElUSU9OV0lTRSgocHQxIHB0MykpIC8qIG1hdGNoZWQsIGNvbmZsaWN0aW5n LCBmYWlsZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKHB0Mi9w dWJsaWMucHQyYSBwdDMvcHVibGljLnB0M2EgcHQxL3B1YmxpYy5wdDFhKQorICAgSk9JTl9PUkRF UihwdDIvcHVibGljLnB0MmIgcHQzL3B1YmxpYy5wdDNiIHB0MS9wdWJsaWMucHQxYikKKyAgIEpP SU5fT1JERVIocHQyL3B1YmxpYy5wdDJjIHB0My9wdWJsaWMucHQzYyBwdDEvcHVibGljLnB0MWMp CisgICBORVNURURfTE9PUF9QTEFJTihwdDEvcHVibGljLnB0MWEgcHQxL3B1YmxpYy5wdDFiIHB0 MS9wdWJsaWMucHQxYykKKyAgIEhBU0hfSk9JTihwdDMvcHVibGljLnB0M2EgcHQzL3B1YmxpYy5w dDNiIHB0My9wdWJsaWMucHQzYykKKyAgIFNFUV9TQ0FOKHB0Mi9wdWJsaWMucHQyYSBwdDMvcHVi bGljLnB0M2EgcHQyL3B1YmxpYy5wdDJiIHB0My9wdWJsaWMucHQzYgorICAgIHB0Mi9wdWJsaWMu cHQyYyBwdDMvcHVibGljLnB0M2MpCisgICBJTkRFWF9TQ0FOKHB0MS9wdWJsaWMucHQxYSBwdWJs aWMucHQxYV9wa2V5IHB0MS9wdWJsaWMucHQxYiBwdWJsaWMucHQxYl9wa2V5CisgICAgcHQxL3B1 YmxpYy5wdDFjIHB1YmxpYy5wdDFjX3BrZXkpCisgICBQQVJUSVRJT05XSVNFKChwdDEgcHQyIHB0 MykpCisgICBOT19HQVRIRVIocHQxL3B1YmxpYy5wdDFhIHB0MS9wdWJsaWMucHQxYiBwdDEvcHVi bGljLnB0MWMgcHQyL3B1YmxpYy5wdDJhCisgICAgcHQyL3B1YmxpYy5wdDJiIHB0Mi9wdWJsaWMu cHQyYyBwdDMvcHVibGljLnB0M2EgcHQzL3B1YmxpYy5wdDNiIHB0My9wdWJsaWMucHQzYykKKyg1 MSByb3dzKQorCitDT01NSVQ7CistLSBDYW4ndCBmb3JjZSBhIHBhcnRpdGlvbndpc2Ugam9pbiB3 aXRoIGEgbWlzbWF0Y2hlZCB0YWJsZS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNl LmFkdmljZSA9ICdQQVJUSVRJT05XSVNFKChwdDEgcHRtaXNtYXRjaCkpJzsKK0VYUExBSU4gKFBM QU5fQURWSUNFLCBDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIHB0MSwgcHRtaXNtYXRjaCBXSEVS RSBwdDEuaWQgPSBwdG1pc21hdGNoLmlkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgRGlzYWJsZWQ6IHRydWUKKyAgIC0+ICBBcHBlbmQK KyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDFhIHB0MV8xCisgICAgICAgICAtPiAgU2VxIFNj YW4gb24gcHQxYiBwdDFfMgorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0MWMgcHQxXzMKKyAg IC0+ICBBcHBlbmQKKyAgICAgICAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIHB0bWlzbWF0Y2hhX3Br ZXkgb24gcHRtaXNtYXRjaGEgcHRtaXNtYXRjaF8xCisgICAgICAgICAgICAgICBJbmRleCBDb25k OiAoaWQgPSBwdDEuaWQpCisgICAgICAgICAtPiAgSW5kZXggU2NhbiB1c2luZyBwdG1pc21hdGNo Yl9wa2V5IG9uIHB0bWlzbWF0Y2hiIHB0bWlzbWF0Y2hfMgorICAgICAgICAgICAgICAgSW5kZXgg Q29uZDogKGlkID0gcHQxLmlkKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgUEFSVElUSU9O V0lTRSgocHQxIHB0bWlzbWF0Y2gpKSAvKiBtYXRjaGVkLCBmYWlsZWQgKi8KKyBHZW5lcmF0ZWQg UGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKHB0MSBwdG1pc21hdGNoKQorICAgTkVTVEVEX0xP T1BfUExBSU4ocHRtaXNtYXRjaCkKKyAgIFNFUV9TQ0FOKHB0MS9wdWJsaWMucHQxYSBwdDEvcHVi bGljLnB0MWIgcHQxL3B1YmxpYy5wdDFjKQorICAgSU5ERVhfU0NBTihwdG1pc21hdGNoL3B1Ymxp Yy5wdG1pc21hdGNoYSBwdWJsaWMucHRtaXNtYXRjaGFfcGtleQorICAgIHB0bWlzbWF0Y2gvcHVi bGljLnB0bWlzbWF0Y2hiIHB1YmxpYy5wdG1pc21hdGNoYl9wa2V5KQorICAgUEFSVElUSU9OV0lT RShwdDEgcHRtaXNtYXRjaCkKKyAgIE5PX0dBVEhFUihwdDEvcHVibGljLnB0MWEgcHQxL3B1Ymxp Yy5wdDFiIHB0MS9wdWJsaWMucHQxYworICAgIHB0bWlzbWF0Y2gvcHVibGljLnB0bWlzbWF0Y2hh IHB0bWlzbWF0Y2gvcHVibGljLnB0bWlzbWF0Y2hiKQorKDIyIHJvd3MpCisKK0NPTU1JVDsKKy0t IEZvcmNlIGpvaW4gb3JkZXIgZm9yIGEgcGFydGljdWxhciBicmFuY2ggb2YgdGhlIHBhcnRpdGlv bndpc2Ugam9pbiB3aXRoCistLSBhbmQgd2l0aG91dCBtZW50aW9uaW5nIHRoZSBzY2hlbWEgbmFt ZS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdKT0lOX09SREVS KHB0My9wdWJsaWMucHQzYSBwdDIvcHVibGljLnB0MmEgcHQxL3B1YmxpYy5wdDFhKSc7CitFWFBM QUlOIChQTEFOX0FEVklDRSwgQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBwdDEsIHB0MiwgcHQz IFdIRVJFIHB0MS5pZCA9IHB0Mi5pZCBBTkQgcHQyLmlkID0gcHQzLmlkCisgICBBTkQgdmFsMSA9 IDEgQU5EIHZhbDIgPSAxIEFORCB2YWwzID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBBcHBlbmQKKyAgIC0+ICBOZXN0ZWQg TG9vcAorICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgSGFzaCBDb25kOiAo cHQzXzEuaWQgPSBwdDJfMS5pZCkKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDNh IHB0M18xCisgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwzID0gMSkKKyAgICAgICAg ICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQy YSBwdDJfMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMiA9IDEpCisg ICAgICAgICAtPiAgSW5kZXggU2NhbiB1c2luZyBwdDFhX3BrZXkgb24gcHQxYSBwdDFfMQorICAg ICAgICAgICAgICAgSW5kZXggQ29uZDogKGlkID0gcHQyXzEuaWQpCisgICAgICAgICAgICAgICBG aWx0ZXI6ICh2YWwxID0gMSkKKyAgIC0+ICBOZXN0ZWQgTG9vcAorICAgICAgICAgLT4gIEhhc2gg Sm9pbgorICAgICAgICAgICAgICAgSGFzaCBDb25kOiAocHQyXzIuaWQgPSBwdDNfMi5pZCkKKyAg ICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDJiIHB0Ml8yCisgICAgICAgICAgICAgICAg ICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAg ICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQzYiBwdDNfMgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgRmlsdGVyOiAodmFsMyA9IDEpCisgICAgICAgICAtPiAgSW5kZXggU2NhbiB1 c2luZyBwdDFiX3BrZXkgb24gcHQxYiBwdDFfMgorICAgICAgICAgICAgICAgSW5kZXggQ29uZDog KGlkID0gcHQyXzIuaWQpCisgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwxID0gMSkKKyAgIC0+ ICBOZXN0ZWQgTG9vcAorICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgSGFz aCBDb25kOiAocHQyXzMuaWQgPSBwdDNfMy5pZCkKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2Nh biBvbiBwdDJjIHB0Ml8zCisgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkK KyAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNj YW4gb24gcHQzYyBwdDNfMworICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFs MyA9IDEpCisgICAgICAgICAtPiAgSW5kZXggU2NhbiB1c2luZyBwdDFjX3BrZXkgb24gcHQxYyBw dDFfMworICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGlkID0gcHQyXzMuaWQpCisgICAgICAg ICAgICAgICBGaWx0ZXI6ICh2YWwxID0gMSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIEpP SU5fT1JERVIocHQzL3B1YmxpYy5wdDNhIHB0Mi9wdWJsaWMucHQyYSBwdDEvcHVibGljLnB0MWEp IC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKHB0 My9wdWJsaWMucHQzYSBwdDIvcHVibGljLnB0MmEgcHQxL3B1YmxpYy5wdDFhKQorICAgSk9JTl9P UkRFUihwdDIvcHVibGljLnB0MmIgcHQzL3B1YmxpYy5wdDNiIHB0MS9wdWJsaWMucHQxYikKKyAg IEpPSU5fT1JERVIocHQyL3B1YmxpYy5wdDJjIHB0My9wdWJsaWMucHQzYyBwdDEvcHVibGljLnB0 MWMpCisgICBORVNURURfTE9PUF9QTEFJTihwdDEvcHVibGljLnB0MWEgcHQxL3B1YmxpYy5wdDFi IHB0MS9wdWJsaWMucHQxYykKKyAgIEhBU0hfSk9JTihwdDIvcHVibGljLnB0MmEgcHQzL3B1Ymxp Yy5wdDNiIHB0My9wdWJsaWMucHQzYykKKyAgIFNFUV9TQ0FOKHB0My9wdWJsaWMucHQzYSBwdDIv cHVibGljLnB0MmEgcHQyL3B1YmxpYy5wdDJiIHB0My9wdWJsaWMucHQzYgorICAgIHB0Mi9wdWJs aWMucHQyYyBwdDMvcHVibGljLnB0M2MpCisgICBJTkRFWF9TQ0FOKHB0MS9wdWJsaWMucHQxYSBw dWJsaWMucHQxYV9wa2V5IHB0MS9wdWJsaWMucHQxYiBwdWJsaWMucHQxYl9wa2V5CisgICAgcHQx L3B1YmxpYy5wdDFjIHB1YmxpYy5wdDFjX3BrZXkpCisgICBQQVJUSVRJT05XSVNFKChwdDEgcHQy IHB0MykpCisgICBOT19HQVRIRVIocHQxL3B1YmxpYy5wdDFhIHB0MS9wdWJsaWMucHQxYiBwdDEv cHVibGljLnB0MWMgcHQyL3B1YmxpYy5wdDJhCisgICAgcHQyL3B1YmxpYy5wdDJiIHB0Mi9wdWJs aWMucHQyYyBwdDMvcHVibGljLnB0M2EgcHQzL3B1YmxpYy5wdDNiIHB0My9wdWJsaWMucHQzYykK Kyg0OSByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0pPSU5fT1JE RVIocHQzL3B0M2EgcHQyL3B0MmEgcHQxL3B0MWEpJzsKK0VYUExBSU4gKFBMQU5fQURWSUNFLCBD T1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIHB0MSwgcHQyLCBwdDMgV0hFUkUgcHQxLmlkID0gcHQy LmlkIEFORCBwdDIuaWQgPSBwdDMuaWQKKyAgIEFORCB2YWwxID0gMSBBTkQgdmFsMiA9IDEgQU5E IHZhbDMgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBM QU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIEFwcGVuZAorICAgLT4gIE5lc3RlZCBMb29wCisgICAgICAgICAtPiAg SGFzaCBKb2luCisgICAgICAgICAgICAgICBIYXNoIENvbmQ6IChwdDNfMS5pZCA9IHB0Ml8xLmlk KQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0M2EgcHQzXzEKKyAgICAgICAgICAg ICAgICAgICAgIEZpbHRlcjogKHZhbDMgPSAxKQorICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAg ICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDJhIHB0Ml8xCisgICAgICAgICAg ICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyAgICAgICAgIC0+ICBJbmRleCBT Y2FuIHVzaW5nIHB0MWFfcGtleSBvbiBwdDFhIHB0MV8xCisgICAgICAgICAgICAgICBJbmRleCBD b25kOiAoaWQgPSBwdDJfMS5pZCkKKyAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDEgPSAxKQor ICAgLT4gIE5lc3RlZCBMb29wCisgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAg ICBIYXNoIENvbmQ6IChwdDJfMi5pZCA9IHB0M18yLmlkKQorICAgICAgICAgICAgICAgLT4gIFNl cSBTY2FuIG9uIHB0MmIgcHQyXzIKKyAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDIg PSAxKQorICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBT ZXEgU2NhbiBvbiBwdDNiIHB0M18yCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6 ICh2YWwzID0gMSkKKyAgICAgICAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIHB0MWJfcGtleSBvbiBw dDFiIHB0MV8yCisgICAgICAgICAgICAgICBJbmRleCBDb25kOiAoaWQgPSBwdDJfMi5pZCkKKyAg ICAgICAgICAgICAgIEZpbHRlcjogKHZhbDEgPSAxKQorICAgLT4gIE5lc3RlZCBMb29wCisgICAg ICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICBIYXNoIENvbmQ6IChwdDJfMy5pZCA9 IHB0M18zLmlkKQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0MmMgcHQyXzMKKyAg ICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDIgPSAxKQorICAgICAgICAgICAgICAgLT4g IEhhc2gKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDNjIHB0M18zCisg ICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwzID0gMSkKKyAgICAgICAgIC0+ ICBJbmRleCBTY2FuIHVzaW5nIHB0MWNfcGtleSBvbiBwdDFjIHB0MV8zCisgICAgICAgICAgICAg ICBJbmRleCBDb25kOiAoaWQgPSBwdDJfMy5pZCkKKyAgICAgICAgICAgICAgIEZpbHRlcjogKHZh bDEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihwdDMvcHQzYSBw dDIvcHQyYSBwdDEvcHQxYSkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToK KyAgIEpPSU5fT1JERVIocHQzL3B1YmxpYy5wdDNhIHB0Mi9wdWJsaWMucHQyYSBwdDEvcHVibGlj LnB0MWEpCisgICBKT0lOX09SREVSKHB0Mi9wdWJsaWMucHQyYiBwdDMvcHVibGljLnB0M2IgcHQx L3B1YmxpYy5wdDFiKQorICAgSk9JTl9PUkRFUihwdDIvcHVibGljLnB0MmMgcHQzL3B1YmxpYy5w dDNjIHB0MS9wdWJsaWMucHQxYykKKyAgIE5FU1RFRF9MT09QX1BMQUlOKHB0MS9wdWJsaWMucHQx YSBwdDEvcHVibGljLnB0MWIgcHQxL3B1YmxpYy5wdDFjKQorICAgSEFTSF9KT0lOKHB0Mi9wdWJs aWMucHQyYSBwdDMvcHVibGljLnB0M2IgcHQzL3B1YmxpYy5wdDNjKQorICAgU0VRX1NDQU4ocHQz L3B1YmxpYy5wdDNhIHB0Mi9wdWJsaWMucHQyYSBwdDIvcHVibGljLnB0MmIgcHQzL3B1YmxpYy5w dDNiCisgICAgcHQyL3B1YmxpYy5wdDJjIHB0My9wdWJsaWMucHQzYykKKyAgIElOREVYX1NDQU4o cHQxL3B1YmxpYy5wdDFhIHB1YmxpYy5wdDFhX3BrZXkgcHQxL3B1YmxpYy5wdDFiIHB1YmxpYy5w dDFiX3BrZXkKKyAgICBwdDEvcHVibGljLnB0MWMgcHVibGljLnB0MWNfcGtleSkKKyAgIFBBUlRJ VElPTldJU0UoKHB0MSBwdDIgcHQzKSkKKyAgIE5PX0dBVEhFUihwdDEvcHVibGljLnB0MWEgcHQx L3B1YmxpYy5wdDFiIHB0MS9wdWJsaWMucHQxYyBwdDIvcHVibGljLnB0MmEKKyAgICBwdDIvcHVi bGljLnB0MmIgcHQyL3B1YmxpYy5wdDJjIHB0My9wdWJsaWMucHQzYSBwdDMvcHVibGljLnB0M2Ig cHQzL3B1YmxpYy5wdDNjKQorKDQ5IHJvd3MpCisKK0NPTU1JVDsKZGlmZiAtLWdpdCBhL2NvbnRy aWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvcHJlcGFyZWQub3V0IGIvY29udHJpYi9wZ19wbGFu X2FkdmljZS9leHBlY3RlZC9wcmVwYXJlZC5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMDAuLjA3YTdjNjIzNjU5Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19w bGFuX2FkdmljZS9leHBlY3RlZC9wcmVwYXJlZC5vdXQKQEAgLTAsMCArMSw2NyBAQAorTE9BRCAn cGdfcGxhbl9hZHZpY2UnOworU0VUIG1heF9wYXJhbGxlbF93b3JrZXJzX3Blcl9nYXRoZXIgPSAw OworQ1JFQVRFIFRBQkxFIHB0YWIgKGlkIGludGVnZXIsIHZhbCB0ZXh0KSBXSVRIIChhdXRvdmFj dXVtX2VuYWJsZWQgPSBmYWxzZSk7CitTRVQgcGdfcGxhbl9hZHZpY2UuYWx3YXlzX3N0b3JlX2Fk dmljZV9kZXRhaWxzID0gZmFsc2U7CistLSBOb3QgcHJlcGFyZWQsIHNvIGFkdmljZSBzaG91bGQg YmUgZ2VuZXJhdGVkLgorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgCitTRUxFQ1Qg KiBGUk9NIHB0YWI7CisgICAgICAgUVVFUlkgUExBTiAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIFNlcSBTY2FuIG9uIHB0YWIKKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBT RVFfU0NBTihwdGFiKQorICAgTk9fR0FUSEVSKHB0YWIpCisoNCByb3dzKQorCistLSBQcmVwYXJl ZCwgc28gYWR2aWNlIHNob3VsZCBub3QgYmUgZ2VuZXJhdGVkLgorUFJFUEFSRSBwdDEgQVMgU0VM RUNUICogRlJPTSBwdGFiOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgRVhFQ1VU RSBwdDE7CisgICAgUVVFUlkgUExBTiAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2Fu IG9uIHB0YWIKKygxIHJvdykKKworU0VUIHBnX3BsYW5fYWR2aWNlLmFsd2F5c19zdG9yZV9hZHZp Y2VfZGV0YWlscyA9IHRydWU7CistLSBQcmVwYXJlZCwgYnV0IGFsd2F5c19zdG9yZV9hZHZpY2Vf ZGV0YWlscyA9IHRydWUsIHNvIHNob3VsZCBzaG93IGFkdmljZS4KK1BSRVBBUkUgcHQyIEFTIFNF TEVDVCAqIEZST00gcHRhYjsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIEVYRUNV VEUgcHQyOworICAgICAgIFFVRVJZIFBMQU4gICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyBTZXEgU2NhbiBvbiBwdGFiCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1ND QU4ocHRhYikKKyAgIE5PX0dBVEhFUihwdGFiKQorKDQgcm93cykKKworLS0gTm90IHByZXBhcmVk LCBzbyBmZWVkYmFjayBzaG91bGQgYmUgZ2VuZXJhdGVkLgorU0VUIHBnX3BsYW5fYWR2aWNlLmFs d2F5c19zdG9yZV9hZHZpY2VfZGV0YWlscyA9IGZhbHNlOworU0VUIHBnX3BsYW5fYWR2aWNlLmFk dmljZSA9ICdTRVFfU0NBTihwdGFiKSc7CitFWFBMQUlOIChDT1NUUyBPRkYpIAorU0VMRUNUICog RlJPTSBwdGFiOworICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gcHRhYgorIFN1cHBsaWVkIFBsYW4g QWR2aWNlOgorICAgU0VRX1NDQU4ocHRhYikgLyogbWF0Y2hlZCAqLworKDMgcm93cykKKworLS0g UHJlcGFyZWQsIHNvIGFkdmljZSBzaG91bGQgbm90IGJlIGdlbmVyYXRlZC4KK1BSRVBBUkUgcHQz IEFTIFNFTEVDVCAqIEZST00gcHRhYjsKK0VYUExBSU4gKENPU1RTIE9GRikgRVhFQ1VURSBwdDE7 CisgICAgUVVFUlkgUExBTiAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHB0 YWIKKygxIHJvdykKKworU0VUIHBnX3BsYW5fYWR2aWNlLmFsd2F5c19zdG9yZV9hZHZpY2VfZGV0 YWlscyA9IHRydWU7CistLSBQcmVwYXJlZCwgYnV0IGFsd2F5c19zdG9yZV9hZHZpY2VfZGV0YWls cyA9IHRydWUsIHNvIHNob3VsZCBzaG93IGZlZWRiYWNrLgorUFJFUEFSRSBwdDQgQVMgU0VMRUNU ICogRlJPTSBwdGFiOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgRVhFQ1VURSBw dDI7CisgICAgICAgUVVFUlkgUExBTiAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IFNlcSBTY2FuIG9uIHB0YWIKKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihw dGFiKQorICAgTk9fR0FUSEVSKHB0YWIpCisoNCByb3dzKQorCmRpZmYgLS1naXQgYS9jb250cmli L3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL3NjYW4ub3V0IGIvY29udHJpYi9wZ19wbGFuX2Fkdmlj ZS9leHBlY3RlZC9zY2FuLm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw MC4uZDA1ZWFkMzY5YjQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNl L2V4cGVjdGVkL3NjYW4ub3V0CkBAIC0wLDAgKzEsNzU3IEBACitMT0FEICdwZ19wbGFuX2Fkdmlj ZSc7CitTRVQgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9IDA7CitTRVQgc2VxX3Bh Z2VfY29zdCA9IDAuMTsKK1NFVCByYW5kb21fcGFnZV9jb3N0ID0gMC4xOworU0VUIGNwdV90dXBs ZV9jb3N0ID0gMDsKK1NFVCBjcHVfaW5kZXhfdHVwbGVfY29zdCA9IDA7CitDUkVBVEUgVEFCTEUg c2Nhbl90YWJsZSAoYSBpbnQgcHJpbWFyeSBrZXksIGIgdGV4dCkKKwlXSVRIIChhdXRvdmFjdXVt X2VuYWJsZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5UTyBzY2FuX3RhYmxlCisJU0VMRUNUIGcsICdz b21lIHRleHQgJyB8fCBnIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMDAwMCkgZzsKK0NSRUFU RSBJTkRFWCBzY2FuX3RhYmxlX2IgT04gc2Nhbl90YWJsZSBVU0lORyBicmluIChiKTsKK1ZBQ1VV TSBBTkFMWVpFIHNjYW5fdGFibGU7CistLSBTZXF1ZW50aWFsIHNjYW4KK0VYUExBSU4gKENPU1RT IE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZTsKKyAgICAgICBRVUVS WSBQTEFOICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBz Y2FuX3RhYmxlCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4oc2Nhbl90YWJs ZSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDQgcm93cykKKworLS0gSW5kZXggc2Nhbgor RVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxl IFdIRVJFIGEgPSAxOworICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIEluZGV4IFNjYW4gdXNpbmcgc2Nhbl90YWJsZV9wa2V5IG9uIHNjYW5fdGFibGUKKyAgIElu ZGV4IENvbmQ6IChhID0gMSkKKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FO KHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihzY2FuX3Rh YmxlKQorKDUgcm93cykKKworLS0gSW5kZXgtb25seSBzY2FuCitFWFBMQUlOIChDT1NUUyBPRkYs IFBMQU5fQURWSUNFKSBTRUxFQ1QgYSBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CisgICAg ICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4 IE9ubHkgU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZQorICAgSW5kZXgg Q29uZDogKGEgPSAxKQorIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIElOREVYX09OTFlfU0NB TihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpCisgICBOT19HQVRIRVIoc2Nhbl90 YWJsZSkKKyg1IHJvd3MpCisKKy0tIEJpdG1hcCBoZWFwIHNjYW4KK0VYUExBSU4gKENPU1RTIE9G RiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZQorCVdIRVJFIGIgPiAnc29t ZSB0ZXh0IDgnOworICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQml0 bWFwIEhlYXAgU2NhbiBvbiBzY2FuX3RhYmxlCisgICBSZWNoZWNrIENvbmQ6IChiID4gJ3NvbWUg dGV4dCA4Jzo6dGV4dCkKKyAgIC0+ICBCaXRtYXAgSW5kZXggU2NhbiBvbiBzY2FuX3RhYmxlX2IK KyAgICAgICAgIEluZGV4IENvbmQ6IChiID4gJ3NvbWUgdGV4dCA4Jzo6dGV4dCkKKyBHZW5lcmF0 ZWQgUGxhbiBBZHZpY2U6CisgICBCSVRNQVBfSEVBUF9TQ0FOKHNjYW5fdGFibGUpCisgICBOT19H QVRIRVIoc2Nhbl90YWJsZSkKKyg3IHJvd3MpCisKKy0tIFRJRCBzY2FuCitFWFBMQUlOIChDT1NU UyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgY3RpZCA9 ICcoMCwxKSc7CisgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBUaWQgU2NhbiBvbiBzY2FuX3RhYmxlCisgICBU SUQgQ29uZDogKGN0aWQgPSAnKDAsMSknOjp0aWQpCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgor ICAgVElEX1NDQU4oc2Nhbl90YWJsZSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDUgcm93 cykKKworLS0gVElEIHJhbmdlIHNjYW4KK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0Up IFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZQorCVdIRVJFIGN0aWQgPiAnKDEsMSknIEFORCBjdGlk IDwgJygyLDEpJzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAg ICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgVGlkIFJhbmdlIFNjYW4gb24gc2Nhbl90YWJs ZQorICAgVElEIENvbmQ6ICgoY3RpZCA+ICcoMSwxKSc6OnRpZCkgQU5EIChjdGlkIDwgJygyLDEp Jzo6dGlkKSkKKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBUSURfU0NBTihzY2FuX3RhYmxl KQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoNSByb3dzKQorCistLSBUcnkgZm9yY2luZyBl YWNoIG9mIG91ciB0ZXN0IHF1ZXJpZXMgdG8gdXNlIHRoZSBzY2FuIHR5cGUgdGhleQorLS0gd2Fu dGVkIHRvIHVzZSBhbnl3YXkuIFRoaXMgc2hvdWxkIHN1Y2NlZWQuCitCRUdJTjsKK1NFVCBMT0NB TCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oc2Nhbl90YWJsZSknOworRVhQTEFJ TiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlOworICAg ICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gc2Nhbl90YWJsZQorIFN1cHBsaWVkIFBs YW4gQWR2aWNlOgorICAgU0VRX1NDQU4oc2Nhbl90YWJsZSkgLyogbWF0Y2hlZCAqLworIEdlbmVy YXRlZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FOKHNjYW5fdGFibGUpCisgICBOT19HQVRIRVIo c2Nhbl90YWJsZSkKKyg2IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2Ug PSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSknOworRVhQTEFJTiAoQ09T VFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAx OworICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgSW5kZXggU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZQorICAg SW5kZXggQ29uZDogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NB TihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQ bGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4oc2Nhbl90YWJsZSBwdWJsaWMuc2Nhbl90YWJsZV9w a2V5KQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoNyByb3dzKQorCitTRVQgTE9DQUwgcGdf cGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX09OTFlfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFi bGVfcGtleSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUIGEgRlJP TSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZ IFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IE9ubHkgU2NhbiB1 c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZQorICAgSW5kZXggQ29uZDogKGEgPSAx KQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfT05MWV9TQ0FOKHNjYW5fdGFibGUg c2Nhbl90YWJsZV9wa2V5KSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgor ICAgSU5ERVhfT05MWV9TQ0FOKHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAg IE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDcgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2 aWNlLmFkdmljZSA9ICdCSVRNQVBfSEVBUF9TQ0FOKHNjYW5fdGFibGUpJzsKK0VYUExBSU4gKENP U1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZQorCVdIRVJFIGIg PiAnc29tZSB0ZXh0IDgnOworICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAg ICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgQml0bWFwIEhlYXAgU2NhbiBvbiBzY2FuX3RhYmxlCisgICBSZWNoZWNrIENvbmQ6IChiID4g J3NvbWUgdGV4dCA4Jzo6dGV4dCkKKyAgIC0+ICBCaXRtYXAgSW5kZXggU2NhbiBvbiBzY2FuX3Rh YmxlX2IKKyAgICAgICAgIEluZGV4IENvbmQ6IChiID4gJ3NvbWUgdGV4dCA4Jzo6dGV4dCkKKyBT dXBwbGllZCBQbGFuIEFkdmljZToKKyAgIEJJVE1BUF9IRUFQX1NDQU4oc2Nhbl90YWJsZSkgLyog bWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEJJVE1BUF9IRUFQX1NDQU4o c2Nhbl90YWJsZSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDkgcm93cykKKworU0VUIExP Q0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdUSURfU0NBTihzY2FuX3RhYmxlKSc7CitFWFBM QUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hF UkUgY3RpZCA9ICcoMCwxKSc7CisgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBUaWQgU2NhbiBvbiBz Y2FuX3RhYmxlCisgICBUSUQgQ29uZDogKGN0aWQgPSAnKDAsMSknOjp0aWQpCisgU3VwcGxpZWQg UGxhbiBBZHZpY2U6CisgICBUSURfU0NBTihzY2FuX3RhYmxlKSAvKiBtYXRjaGVkICovCisgR2Vu ZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgVElEX1NDQU4oc2Nhbl90YWJsZSkKKyAgIE5PX0dBVEhF UihzY2FuX3RhYmxlKQorKDcgcm93cykKKworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklD RSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlCisJV0hFUkUgY3RpZCA+ICcoMSwxKScgQU5EIGN0 aWQgPCAnKDIsMSknOworICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAg ICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBUaWQgUmFuZ2UgU2NhbiBvbiBzY2FuX3Rh YmxlCisgICBUSUQgQ29uZDogKChjdGlkID4gJygxLDEpJzo6dGlkKSBBTkQgKGN0aWQgPCAnKDIs MSknOjp0aWQpKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgVElEX1NDQU4oc2Nhbl90YWJs ZSkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIFRJRF9TQ0FOKHNj YW5fdGFibGUpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg3IHJvd3MpCisKK0NPTU1JVDsK Ky0tIFRyeSB0byBmb3JjZSBhIGZ1bGwgc2NhbiBvZiB0aGUgdGFibGUgdG8gdXNlIHNvbWUgb3Ro ZXIgc2NhbiB0eXBlLiBBbGwKKy0tIG9mIHRoZXNlIHdpbGwgZmFpbC4gQW4gaW5kZXggc2NhbiBv ciBiaXRtYXAgaGVhcCBzY2FuIGNvdWxkIHBvdGVudGlhbGx5CistLSBnZW5lcmF0ZSB0aGUgY29y cmVjdCBhbnN3ZXIsIGJ1dCB0aGUgcGxhbm5lciBkb2VzIG5vdCBldmVuIGNvbnNpZGVyIHRoZXNl CistLSBwb3NzaWJpbGl0aWVzIGR1ZSB0byB0aGUgbGFjayBvZiBhIFdIRVJFIGNsYXVzZS4KK0JF R0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9TQ0FOKHNjYW5f dGFibGUgc2Nhbl90YWJsZV9wa2V5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNF KSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBR VUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4g b24gc2Nhbl90YWJsZQorICAgRGlzYWJsZWQ6IHRydWUKKyBTdXBwbGllZCBQbGFuIEFkdmljZToK KyAgIElOREVYX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpIC8qIG1hdGNoZWQsIGZh aWxlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FOKHNjYW5fdGFibGUp CisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg3IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFu X2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfT05MWV9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9w a2V5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNj YW5fdGFibGU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHNjYW5f dGFibGUKKyAgIERpc2FibGVkOiB0cnVlCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBJTkRF WF9PTkxZX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpIC8qIG1hdGNoZWQsIGZhaWxl ZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FOKHNjYW5fdGFibGUpCisg ICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg3IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2Fk dmljZS5hZHZpY2UgPSAnQklUTUFQX0hFQVBfU0NBTihzY2FuX3RhYmxlKSc7CitFWFBMQUlOIChD T1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGU7CisgICAgICAg ICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2Fu IG9uIHNjYW5fdGFibGUKKyAgIERpc2FibGVkOiB0cnVlCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6 CisgICBCSVRNQVBfSEVBUF9TQ0FOKHNjYW5fdGFibGUpIC8qIG1hdGNoZWQsIGZhaWxlZCAqLwor IEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FOKHNjYW5fdGFibGUpCisgICBOT19H QVRIRVIoc2Nhbl90YWJsZSkKKyg3IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5h ZHZpY2UgPSAnVElEX1NDQU4oc2Nhbl90YWJsZSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFO X0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlOworICAgICAgICAgICAgICAgICAgUVVF UlkgUExBTiAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHNjYW5fdGFibGUKKyAgIERpc2FibGVkOiB0 cnVlCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBUSURfU0NBTihzY2FuX3RhYmxlKSAvKiBt YXRjaGVkLCBmYWlsZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihz Y2FuX3RhYmxlKQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoNyByb3dzKQorCitDT01NSVQ7 CistLSBUcnkgYWdhaW4gdG8gZm9yY2UgaW5kZXggdXNlLiBUaGlzIHNob3VsZCBub3cgc3VjY2Vl ZCBmb3IgdGhlIElOREVYX1NDQU4KKy0tIGFuZCBCSVRNQVBfSEVBUF9TQ0FOLCBidXQgdGhlIElO REVYX09OTFlfU0NBTiBjYW4ndCBiZSBmb3JjZWQgYmVjYXVzZSB0aGUKKy0tIHF1ZXJ5IGZldGNo ZXMgY29sdW1ucyBub3QgaW5jbHVkZWQgaW4gdGhlIGluZGV4LgorQkVHSU47CitTRVQgTE9DQUwg cGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxl X3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00g c2Nhbl90YWJsZSBXSEVSRSBhID4gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExB TiAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IFNjYW4gdXNpbmcgc2Nhbl90YWJsZV9w a2V5IG9uIHNjYW5fdGFibGUKKyAgIEluZGV4IENvbmQ6IChhID4gMCkKKyBTdXBwbGllZCBQbGFu IEFkdmljZToKKyAgIElOREVYX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpIC8qIG1h dGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FOKHNjYW5fdGFi bGUgcHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDcg cm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9PTkxZX1ND QU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExB Tl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID4gMDsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gc2Nhbl90YWJsZQorICAgRGlzYWJsZWQ6 IHRydWUKKyAgIEZpbHRlcjogKGEgPiAwKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSU5E RVhfT05MWV9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSAvKiBtYXRjaGVkLCBmYWls ZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzY2FuX3RhYmxlKQor ICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoOCByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9h ZHZpY2UuYWR2aWNlID0gJ0JJVE1BUF9IRUFQX1NDQU4oc2Nhbl90YWJsZSknOworRVhQTEFJTiAo Q09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEg PiAwOworICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEJpdG1hcCBIZWFw IFNjYW4gb24gc2Nhbl90YWJsZQorICAgUmVjaGVjayBDb25kOiAoYSA+IDApCisgICAtPiAgQml0 bWFwIEluZGV4IFNjYW4gb24gc2Nhbl90YWJsZV9wa2V5CisgICAgICAgICBJbmRleCBDb25kOiAo YSA+IDApCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBCSVRNQVBfSEVBUF9TQ0FOKHNjYW5f dGFibGUpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBCSVRNQVBf SEVBUF9TQ0FOKHNjYW5fdGFibGUpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg5IHJvd3Mp CisKK0NPTU1JVDsKKy0tIFdlIGNhbiBmb3JjZSBhIHByaW1hcnkga2V5IGxvb2t1cCB0byB1c2Ug YSBzZXF1ZW50aWFsIHNjYW4sIGJ1dCB3ZQorLS0gY2FuJ3QgZm9yY2UgaXQgdG8gdXNlIGFuIGlu ZGV4LW9ubHkgc2NhbiAoZHVlIHRvIHRoZSBjb2x1bW4gbGlzdCkKKy0tIG9yIGEgVElEIHNjYW4g KGR1ZSB0byB0aGUgYWJzZW5jZSBvZiBhIFRJRCBxdWFsKS4KK0JFR0lOOworU0VUIExPQ0FMIHBn X3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTihzY2FuX3RhYmxlKSc7CitFWFBMQUlOIChD T1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9 IDE7CisgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBzY2FuX3RhYmxlCisgICBG aWx0ZXI6IChhID0gMSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FOKHNjYW5f dGFibGUpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NB TihzY2FuX3RhYmxlKQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoNyByb3dzKQorCitTRVQg TE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX09OTFlfU0NBTihzY2FuX3RhYmxl IHNjYW5fdGFibGVfcGtleSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VM RUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyBJbmRleCBTY2FuIHVzaW5nIHNjYW5fdGFibGVfcGtleSBvbiBzY2FuX3RhYmxlCisg ICBEaXNhYmxlZDogdHJ1ZQorICAgSW5kZXggQ29uZDogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4g QWR2aWNlOgorICAgSU5ERVhfT05MWV9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSAv KiBtYXRjaGVkLCBmYWlsZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9T Q0FOKHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihzY2Fu X3RhYmxlKQorKDggcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdU SURfU0NBTihzY2FuX3RhYmxlKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBT RUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CisgICAgICAgICAgICAgICAgICAg UVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyBzY2FuX3RhYmxlX3Br ZXkgb24gc2Nhbl90YWJsZQorICAgRGlzYWJsZWQ6IHRydWUKKyAgIEluZGV4IENvbmQ6IChhID0g MSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIFRJRF9TQ0FOKHNjYW5fdGFibGUpIC8qIG1h dGNoZWQsIGZhaWxlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4o c2Nhbl90YWJsZSBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5KQorICAgTk9fR0FUSEVSKHNjYW5fdGFi bGUpCisoOCByb3dzKQorCitDT01NSVQ7CistLSBXZSBjYW4gZm9yY2libHkgZG93bmdyYWRlIGFu IGluZGV4LW9ubHkgc2NhbiB0byBhbiBpbmRleCBzY2FuLCBidXQgd2UgY2FuJ3QKKy0tIGZvcmNl IHRoZSB1c2Ugb2YgYW4gaW5kZXggdGhhdCB0aGUgcGxhbm5lciB0aGlua3MgaXMgaW5hcHBsaWNh YmxlLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX1ND QU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExB Tl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKKyAgICAgICAg ICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4 IFNjYW4gdXNpbmcgc2Nhbl90YWJsZV9wa2V5IG9uIHNjYW5fdGFibGUKKyAgIEluZGV4IENvbmQ6 IChhID0gMSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4oc2Nhbl90YWJs ZSBzY2FuX3RhYmxlX3BrZXkpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6 CisgICBJTkRFWF9TQ0FOKHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5P X0dBVEhFUihzY2FuX3RhYmxlKQorKDcgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNl LmFkdmljZSA9ICdJTkRFWF9TQ0FOKHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSkn OworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3Rh YmxlIFdIRVJFIGEgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBTY2FuIHVzaW5nIHNjYW5f dGFibGVfcGtleSBvbiBzY2FuX3RhYmxlCisgICBJbmRleCBDb25kOiAoYSA9IDEpCisgU3VwcGxp ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FOKHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFi bGVfcGtleSkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIElOREVY X1NDQU4oc2Nhbl90YWJsZSBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5KQorICAgTk9fR0FUSEVSKHNj YW5fdGFibGUpCisoNyByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0g J0lOREVYX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX2IpJzsKK0VYUExBSU4gKENPU1RTIE9G RiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKKyAg ICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBJbmRleCBTY2FuIHVzaW5nIHNjYW5fdGFibGVfcGtleSBvbiBzY2FuX3RhYmxl CisgICBEaXNhYmxlZDogdHJ1ZQorICAgSW5kZXggQ29uZDogKGEgPSAxKQorIFN1cHBsaWVkIFBs YW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfYikgLyogbWF0 Y2hlZCwgZmFpbGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihz Y2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpCisgICBOT19HQVRIRVIoc2Nhbl90YWJs ZSkKKyg4IHJvd3MpCisKK0NPTU1JVDsKKy0tIFdlIGNhbiBmb3JjZSB0aGUgdXNlIG9mIGEgc2Vx dWVudGlhbCBzY2FuIGluIHBsYWNlIG9mIGEgYml0bWFwIGhlYXAgc2NhbiwKKy0tIGJ1dCBhIHBs YWluIGluZGV4IHNjYW4gb24gYSBCUklOIGluZGV4IGlzIG5vdCBwb3NzaWJsZS4KK0JFR0lOOwor U0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTihzY2FuX3RhYmxlKSc7 CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFi bGUKKwlXSEVSRSBiID4gJ3NvbWUgdGV4dCA4JzsKKyAgICAgICAgICAgICAgUVVFUlkgUExBTiAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNl cSBTY2FuIG9uIHNjYW5fdGFibGUKKyAgIEZpbHRlcjogKGIgPiAnc29tZSB0ZXh0IDgnOjp0ZXh0 KQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4oc2Nhbl90YWJsZSkgLyogbWF0 Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FOKHNjYW5fdGFibGUp CisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg3IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFu X2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfYiknOwor RVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxl IFdIRVJFIGEgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAg ICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IFNjYW4gdXNpbmcgc2Nhbl90YWJsZV9w a2V5IG9uIHNjYW5fdGFibGUKKyAgIERpc2FibGVkOiB0cnVlCisgICBJbmRleCBDb25kOiAoYSA9 IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FOKHNjYW5fdGFibGUgc2Nh bl90YWJsZV9iKSAvKiBtYXRjaGVkLCBmYWlsZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6 CisgICBJTkRFWF9TQ0FOKHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5P X0dBVEhFUihzY2FuX3RhYmxlKQorKDggcm93cykKKworQ09NTUlUOworLS0gV2UgY2FuIGZvcmNl IHRoZSB1c2Ugb2YgYSBzZXF1ZW50aWFsIHNjYW4gcmF0aGVyIHRoYW4gYSBUSUQgc2NhbiBvcgor LS0gVElEIHJhbmdlIHNjYW4uCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZp Y2UgPSAnU0VRX1NDQU4oc2Nhbl90YWJsZSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FE VklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGN0aWQgPSAnKDAsMSknOworICAg ICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gc2Nhbl90YWJsZQorICAgRmlsdGVyOiAo Y3RpZCA9ICcoMCwxKSc6OnRpZCkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FO KHNjYW5fdGFibGUpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBT RVFfU0NBTihzY2FuX3RhYmxlKQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoNyByb3dzKQor CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFi bGUKKwlXSEVSRSBjdGlkID4gJygxLDEpJyBBTkQgY3RpZCA8ICcoMiwxKSc7CisgICAgICAgICAg ICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgU2VxIFNjYW4gb24gc2Nhbl90YWJsZQorICAgRmlsdGVyOiAoKGN0aWQgPiAnKDEsMSknOjp0 aWQpIEFORCAoY3RpZCA8ICcoMiwxKSc6OnRpZCkpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6Cisg ICBTRVFfU0NBTihzY2FuX3RhYmxlKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2 aWNlOgorICAgU0VRX1NDQU4oc2Nhbl90YWJsZSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQor KDcgcm93cykKKworQ09NTUlUOworLS0gVGVzdCBtb3JlIGNvbXBsZXggc2NlbmFyaW9zIHdpdGgg aW5kZXggc2NhbnMuCitCRUdJTjsKKy0tIFNob3VsZCBzdGlsbCB3b3JrIGlmIHdlIG1lbnRpb24g dGhlIHNjaGVtYS4KK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfU0NB TihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9G RiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90 YWJsZQorICAgSW5kZXggQ29uZDogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAg SU5ERVhfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpIC8qIG1hdGNoZWQg Ki8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FOKHNjYW5fdGFibGUgcHVi bGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDcgcm93cykK KworLS0gQnV0IG5vdCBpZiB3ZSBtZW50aW9uIHRoZSB3cm9uZyBzY2hlbWEuCitTRVQgTE9DQUwg cGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX1NDQU4oc2Nhbl90YWJsZSBjaWxidXAuc2Nh bl90YWJsZV9wa2V5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1Qg KiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyBzY2Fu X3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZQorICAgSW5kZXggQ29uZDogKGEgPSAxKQorIFN1cHBs aWVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIGNpbGJ1cC5zY2FuX3Rh YmxlX3BrZXkpIC8qIG1hdGNoZWQsIGluYXBwbGljYWJsZSwgZmFpbGVkICovCisgR2VuZXJhdGVk IFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxl X3BrZXkpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg3IHJvd3MpCisKKy0tIEl0J3MgT0sg dG8gcmVwZWF0IHRoZSBzYW1lIGFkdmljZS4KK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZp Y2UgPSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSBzY2FuX3RhYmxlIHNj YW5fdGFibGVfcGtleSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNU ICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworICAgICAgICAgICAgICAgICAgICAgICBR VUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyBzY2Fu X3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZQorICAgSW5kZXggQ29uZDogKGEgPSAxKQorIFN1cHBs aWVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtl eSkgLyogbWF0Y2hlZCAqLworICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtl eSkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4o c2Nhbl90YWJsZSBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5KQorICAgTk9fR0FUSEVSKHNjYW5fdGFi bGUpCisoOCByb3dzKQorCistLSBCdXQgaXQgZG9lc24ndCB3b3JrIGlmIHRoZSBpbmRleCB0YXJn ZXQgaXMgZXZlbiBub3Rpb25hbGx5IGRpZmZlcmVudC4KK1NFVCBMT0NBTCBwZ19wbGFuX2Fkdmlj ZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSBzY2FuX3Rh YmxlIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9B RFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBTY2FuIHVzaW5nIHNjYW5fdGFi bGVfcGtleSBvbiBzY2FuX3RhYmxlCisgICBJbmRleCBDb25kOiAoYSA9IDEpCisgU3VwcGxpZWQg UGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSAv KiBtYXRjaGVkLCBjb25mbGljdGluZyAqLworICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHB1Ymxp Yy5zY2FuX3RhYmxlX3BrZXkpIC8qIG1hdGNoZWQsIGNvbmZsaWN0aW5nICovCisgR2VuZXJhdGVk IFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxl X3BrZXkpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg4IHJvd3MpCisKK0NPTU1JVDsKKy0t IFRlc3QgYXNzb3J0ZWQgaW5jb3JyZWN0IGFkdmljZS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3Bs YW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTihub3RoaW5nKSc7CitFWFBMQUlOIChDT1NUUyBP RkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgYSBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7Cisg ICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIElu ZGV4IE9ubHkgU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZQorICAgSW5k ZXggQ29uZDogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4obm90 aGluZykgLyogbm90IG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRF WF9PTkxZX1NDQU4oc2Nhbl90YWJsZSBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5KQorICAgTk9fR0FU SEVSKHNjYW5fdGFibGUpCisoNyByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2 aWNlID0gJ0lOREVYX1NDQU4obm90aGluZyB3aGF0c29ldmVyKSc7CitFWFBMQUlOIChDT1NUUyBP RkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgYSBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7Cisg ICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIElu ZGV4IE9ubHkgU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZQorICAgSW5k ZXggQ29uZDogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihu b3RoaW5nIHdoYXRzb2V2ZXIpIC8qIG5vdCBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2 aWNlOgorICAgSU5ERVhfT05MWV9TQ0FOKHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtl eSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDcgcm93cykKKworU0VUIExPQ0FMIHBnX3Bs YW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9TQ0FOKHNjYW5fdGFibGUgYm9ndXMpJzsKK0VYUExB SU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCBhIEZST00gc2Nhbl90YWJsZSBXSEVS RSBhID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IE9ubHkgU2NhbiB1c2lu ZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZQorICAgSW5kZXggQ29uZDogKGEgPSAxKQor IFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIGJvZ3VzKSAv KiBtYXRjaGVkLCBpbmFwcGxpY2FibGUsIGZhaWxlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmlj ZToKKyAgIElOREVYX09OTFlfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkp CisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg3IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFu X2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfT05MWV9TQ0FOKG5vdGhpbmcgd2hhdHNvZXZlciknOwor RVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUIGEgRlJPTSBzY2FuX3RhYmxl IFdIRVJFIGEgPSAxOworICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAg ICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBPbmx5IFNjYW4gdXNpbmcgc2Nhbl90YWJsZV9wa2V5 IG9uIHNjYW5fdGFibGUKKyAgIEluZGV4IENvbmQ6IChhID0gMSkKKyBTdXBwbGllZCBQbGFuIEFk dmljZToKKyAgIElOREVYX09OTFlfU0NBTihub3RoaW5nIHdoYXRzb2V2ZXIpIC8qIG5vdCBtYXRj aGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfT05MWV9TQ0FOKHNjYW5f dGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQor KDcgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9PTkxZ X1NDQU4oc2Nhbl90YWJsZSBib2d1cyknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklD RSkgU0VMRUNUIGEgRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IE9ubHkgU2NhbiB1c2luZyBzY2FuX3RhYmxlX3Br ZXkgb24gc2Nhbl90YWJsZQorICAgSW5kZXggQ29uZDogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4g QWR2aWNlOgorICAgSU5ERVhfT05MWV9TQ0FOKHNjYW5fdGFibGUgYm9ndXMpIC8qIG1hdGNoZWQs IGluYXBwbGljYWJsZSwgZmFpbGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSU5E RVhfT05MWV9TQ0FOKHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dB VEhFUihzY2FuX3RhYmxlKQorKDcgcm93cykKKworQ09NTUlUOworLS0gVGVzdCBvdXIgYWJpbGl0 eSB0byByZWZlciB0byBtdWx0aXBsZSBpbnN0YW5jZXMgb2YgdGhlIHNhbWUgYWxpYXMuCitCRUdJ TjsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIChnZW5l cmF0ZV9zZXJpZXMoMSwxMCkgZyBMRUZUIEpPSU4gc2Nhbl90YWJsZSBzIE9OIGcgPSBzLmEpIHgK KyAgICBMRUZUIEpPSU4gc2Nhbl90YWJsZSBzIE9OIGcgPSBzLmE7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgTmVzdGVkIExvb3AgTGVmdCBKb2luCisgICAtPiAgTmVzdGVkIExvb3AgTGVmdCBK b2luCisgICAgICAgICAtPiAgRnVuY3Rpb24gU2NhbiBvbiBnZW5lcmF0ZV9zZXJpZXMgZworICAg ICAgICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgc2Nhbl90YWJsZV9wa2V5IG9uIHNjYW5fdGFibGUg cworICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGEgPSBnLmcpCisgICAtPiAgSW5kZXggU2Nh biB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZSBzXzEKKyAgICAgICAgIEluZGV4 IENvbmQ6IChhID0gZy5nKQorIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIo ZyBzIHMjMikKKyAgIE5FU1RFRF9MT09QX1BMQUlOKHMgcyMyKQorICAgSU5ERVhfU0NBTihzIHB1 YmxpYy5zY2FuX3RhYmxlX3BrZXkgcyMyIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpCisgICBOT19H QVRIRVIocyBzIzIpCisoMTIgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmlj ZSA9ICdTRVFfU0NBTihzKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VM RUNUICogRlJPTSAoZ2VuZXJhdGVfc2VyaWVzKDEsMTApIGcgTEVGVCBKT0lOIHNjYW5fdGFibGUg cyBPTiBnID0gcy5hKSB4CisgICAgTEVGVCBKT0lOIHNjYW5fdGFibGUgcyBPTiBnID0gcy5hOwor ICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorIE5lc3RlZCBMb29wIExlZnQgSm9pbgorICAgLT4gIEhhc2ggTGVmdCBKb2luCisgICAg ICAgICBIYXNoIENvbmQ6IChnLmcgPSBzLmEpCisgICAgICAgICAtPiAgRnVuY3Rpb24gU2NhbiBv biBnZW5lcmF0ZV9zZXJpZXMgZworICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgIC0+ ICBTZXEgU2NhbiBvbiBzY2FuX3RhYmxlIHMKKyAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIHNjYW5f dGFibGVfcGtleSBvbiBzY2FuX3RhYmxlIHNfMQorICAgICAgICAgSW5kZXggQ29uZDogKGEgPSBn LmcpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzKSAvKiBtYXRjaGVkICov CisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihnIHMgcyMyKQorICAgTkVT VEVEX0xPT1BfUExBSU4ocyMyKQorICAgSEFTSF9KT0lOKHMpCisgICBTRVFfU0NBTihzKQorICAg SU5ERVhfU0NBTihzIzIgcHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihzIHMj MikKKygxNyByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9T Q0FOKHMjMiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZS T00gKGdlbmVyYXRlX3NlcmllcygxLDEwKSBnIExFRlQgSk9JTiBzY2FuX3RhYmxlIHMgT04gZyA9 IHMuYSkgeAorICAgIExFRlQgSk9JTiBzY2FuX3RhYmxlIHMgT04gZyA9IHMuYTsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorIEhhc2ggTGVmdCBKb2luCisgICBIYXNoIENvbmQ6IChnLmcgPSBzXzEuYSkKKyAgIC0+ ICBOZXN0ZWQgTG9vcCBMZWZ0IEpvaW4KKyAgICAgICAgIC0+ICBGdW5jdGlvbiBTY2FuIG9uIGdl bmVyYXRlX3NlcmllcyBnCisgICAgICAgICAtPiAgSW5kZXggU2NhbiB1c2luZyBzY2FuX3RhYmxl X3BrZXkgb24gc2Nhbl90YWJsZSBzCisgICAgICAgICAgICAgICBJbmRleCBDb25kOiAoYSA9IGcu ZykKKyAgIC0+ICBIYXNoCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gc2Nhbl90YWJsZSBzXzEK KyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FOKHMjMikgLyogbWF0Y2hlZCAqLwor IEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZyBzIHMjMikKKyAgIE5FU1RF RF9MT09QX1BMQUlOKHMpCisgICBIQVNIX0pPSU4ocyMyKQorICAgU0VRX1NDQU4ocyMyKQorICAg SU5ERVhfU0NBTihzIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpCisgICBOT19HQVRIRVIocyBzIzIp CisoMTcgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NB TihzKSBTRVFfU0NBTihzIzIpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitT RUxFQ1QgKiBGUk9NIChnZW5lcmF0ZV9zZXJpZXMoMSwxMCkgZyBMRUZUIEpPSU4gc2Nhbl90YWJs ZSBzIE9OIGcgPSBzLmEpIHgKKyAgICBMRUZUIEpPSU4gc2Nhbl90YWJsZSBzIE9OIGcgPSBzLmE7 CisgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggTGVmdCBK b2luCisgICBIYXNoIENvbmQ6IChnLmcgPSBzXzEuYSkKKyAgIC0+ICBIYXNoIExlZnQgSm9pbgor ICAgICAgICAgSGFzaCBDb25kOiAoZy5nID0gcy5hKQorICAgICAgICAgLT4gIEZ1bmN0aW9uIFNj YW4gb24gZ2VuZXJhdGVfc2VyaWVzIGcKKyAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAg ICAtPiAgU2VxIFNjYW4gb24gc2Nhbl90YWJsZSBzCisgICAtPiAgSGFzaAorICAgICAgICAgLT4g IFNlcSBTY2FuIG9uIHNjYW5fdGFibGUgc18xCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBT RVFfU0NBTihzKSAvKiBtYXRjaGVkICovCisgICBTRVFfU0NBTihzIzIpIC8qIG1hdGNoZWQgKi8K KyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGcgcyBzIzIpCisgICBIQVNI X0pPSU4ocyBzIzIpCisgICBTRVFfU0NBTihzIHMjMikKKyAgIE5PX0dBVEhFUihzIHMjMikKKygx NyByb3dzKQorCitDT01NSVQ7CistLSBUZXN0IG91ciBhYmlsaXR5IHRvIHJlZmVyIHRvIHNjYW5z IHdpdGhpbiBhIHN1YnF1ZXJ5LgorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NF TEVDVCAqIEZST00gKFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBzIFdIRVJFIGEgPSAxIE9GRlNF VCAwKSB4OworICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg SW5kZXggU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZSBzCisgICBJbmRl eCBDb25kOiAoYSA9IDEpCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihz QHggcHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihzQHgpCisoNSByb3dzKQor CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSAoU0VMRUNU ICogRlJPTSBzY2FuX3RhYmxlIHMgV0hFUkUgYSA9IDEgT0ZGU0VUIDApOworICAgICAgICAgICAg ICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBT Y2FuIHVzaW5nIHNjYW5fdGFibGVfcGtleSBvbiBzY2FuX3RhYmxlIHMKKyAgIEluZGV4IENvbmQ6 IChhID0gMSkKKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FOKHNAdW5uYW1l ZF9zdWJxdWVyeSBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5KQorICAgTk9fR0FUSEVSKHNAdW5uYW1l ZF9zdWJxdWVyeSkKKyg1IHJvd3MpCisKK0JFR0lOOworLS0gU2hvdWxkIG5vdCBtYXRjaC4KK1NF VCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4ocyknOworRVhQTEFJTiAo Q09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gKFNFTEVDVCAqIEZST00gc2Nh bl90YWJsZSBzIFdIRVJFIGEgPSAxIE9GRlNFVCAwKSB4OworICAgICAgICAgICAgICAgICAgICBR VUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyBzY2FuX3RhYmxlX3Br ZXkgb24gc2Nhbl90YWJsZSBzCisgICBJbmRleCBDb25kOiAoYSA9IDEpCisgU3VwcGxpZWQgUGxh biBBZHZpY2U6CisgICBTRVFfU0NBTihzKSAvKiBub3QgbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQ bGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4oc0B4IHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpCisg ICBOT19HQVRIRVIoc0B4KQorKDcgcm93cykKKworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FE VklDRSkKK1NFTEVDVCAqIEZST00gKFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBzIFdIRVJFIGEg PSAxIE9GRlNFVCAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAg ICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24g c2Nhbl90YWJsZSBzCisgICBJbmRleCBDb25kOiAoYSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZp Y2U6CisgICBTRVFfU0NBTihzKSAvKiBub3QgbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFk dmljZToKKyAgIElOREVYX1NDQU4oc0B1bm5hbWVkX3N1YnF1ZXJ5IHB1YmxpYy5zY2FuX3RhYmxl X3BrZXkpCisgICBOT19HQVRIRVIoc0B1bm5hbWVkX3N1YnF1ZXJ5KQorKDcgcm93cykKKworLS0g U2hvdWxkIG1hdGNoIGZpcnN0IHF1ZXJ5IG9ubHkuCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2Uu YWR2aWNlID0gJ1NFUV9TQ0FOKHNAeCknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklD RSkKK1NFTEVDVCAqIEZST00gKFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBzIFdIRVJFIGEgPSAx IE9GRlNFVCAwKSB4OworICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHNjYW5fdGFibGUgcworICAgRmls dGVyOiAoYSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzQHgpIC8q IG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzQHgpCisg ICBOT19HQVRIRVIoc0B4KQorKDcgcm93cykKKworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FE VklDRSkKK1NFTEVDVCAqIEZST00gKFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBzIFdIRVJFIGEg PSAxIE9GRlNFVCAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAg ICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24g c2Nhbl90YWJsZSBzCisgICBJbmRleCBDb25kOiAoYSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZp Y2U6CisgICBTRVFfU0NBTihzQHgpIC8qIG5vdCBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4g QWR2aWNlOgorICAgSU5ERVhfU0NBTihzQHVubmFtZWRfc3VicXVlcnkgcHVibGljLnNjYW5fdGFi bGVfcGtleSkKKyAgIE5PX0dBVEhFUihzQHVubmFtZWRfc3VicXVlcnkpCisoNyByb3dzKQorCist LSBTaG91bGQgbWF0Y2ggc2Vjb25kIHF1ZXJ5IG9ubHkuCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZp Y2UuYWR2aWNlID0gJ1NFUV9TQ0FOKHNAdW5uYW1lZF9zdWJxdWVyeSknOworRVhQTEFJTiAoQ09T VFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gKFNFTEVDVCAqIEZST00gc2Nhbl90 YWJsZSBzIFdIRVJFIGEgPSAxIE9GRlNFVCAwKSB4OworICAgICAgICAgICAgICAgICAgICBRVUVS WSBQTEFOICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkg b24gc2Nhbl90YWJsZSBzCisgICBJbmRleCBDb25kOiAoYSA9IDEpCisgU3VwcGxpZWQgUGxhbiBB ZHZpY2U6CisgICBTRVFfU0NBTihzQHVubmFtZWRfc3VicXVlcnkpIC8qIG5vdCBtYXRjaGVkICov CisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzQHggcHVibGljLnNjYW5f dGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihzQHgpCisoNyByb3dzKQorCitFWFBMQUlOIChDT1NU UyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSAoU0VMRUNUICogRlJPTSBzY2FuX3Rh YmxlIHMgV0hFUkUgYSA9IDEgT0ZGU0VUIDApOworICAgICAgICAgICAgICAgICAgUVVFUlkgUExB TiAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHNjYW5fdGFibGUgcworICAgRmlsdGVyOiAoYSA9IDEp CisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzQHVubmFtZWRfc3VicXVlcnkp IC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzQHVu bmFtZWRfc3VicXVlcnkpCisgICBOT19HQVRIRVIoc0B1bm5hbWVkX3N1YnF1ZXJ5KQorKDcgcm93 cykKKworQ09NTUlUOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3Rl ZC9zZW1pam9pbi5vdXQgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL3NlbWlqb2lu Lm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNmYyMDNjNWE2OGUK LS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL3NlbWlq b2luLm91dApAQCAtMCwwICsxLDM3NyBAQAorTE9BRCAncGdfcGxhbl9hZHZpY2UnOworU0VUIG1h eF9wYXJhbGxlbF93b3JrZXJzX3Blcl9nYXRoZXIgPSAwOworQ1JFQVRFIFRBQkxFIHNqX3dpZGUg KAorCWlkIGludGVnZXIgcHJpbWFyeSBrZXksCisJdmFsMSBpbnRlZ2VyLAorCXBhZGRpbmcgdGV4 dCBzdG9yYWdlIHBsYWluCispIFdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lO U0VSVCBJTlRPIHNqX3dpZGUKKwlTRUxFQ1QgZywgZyUxMCsxLCByZXBlYXQoJyAnLCAzMDApIEZS T00gZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMDApIGc7CitDUkVBVEUgSU5ERVggT04gc2pfd2lkZSAo dmFsMSk7CitWQUNVVU0gQU5BTFlaRSBzal93aWRlOworQ1JFQVRFIFRBQkxFIHNqX25hcnJvdyAo CisJaWQgaW50ZWdlciBwcmltYXJ5IGtleSwKKwl2YWwxIGludGVnZXIKKykgV0lUSCAoYXV0b3Zh Y3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gc2pfbmFycm93CisJU0VMRUNUIGcs IGclMTArMSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAxMDAwKSBnOworQ1JFQVRFIElOREVYIE9O IHNqX25hcnJvdyAodmFsMSk7CitWQUNVVU0gQU5BTFlaRSBzal9uYXJyb3c7CistLSBXZSBleHBl Y3QgdGhpcyB0byBtYWtlIHRoZSBWQUxVRVMgbGlzdCB1bmlxdWUgYW5kIHVzZSBpbmRleCBsb29r dXBzIHRvCistLSBmaW5kIHRoZSByb3dzIGluIHNqX3dpZGUsIHNvIGFzIHRvIGF2b2lkIGEgZnVs bCBzY2FuIG9mIHNqX3dpZGUuCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VM RUNUICogRlJPTSBzal93aWRlCisJV0hFUkUgKGlkLCB2YWwxKSBJTiAoVkFMVUVTICgxLCAxKSwg KDIsIDIpLCAoMywgMyksICg0LCA0KSwgKDUsIDUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg IFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wCisg ICAtPiAgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgR3JvdXAgS2V5OiAiKlZBTFVFUyoiLmNvbHVt bjEsICIqVkFMVUVTKiIuY29sdW1uMgorICAgICAgICAgLT4gIFZhbHVlcyBTY2FuIG9uICIqVkFM VUVTKiIKKyAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIHNqX3dpZGVfcGtleSBvbiBzal93aWRlCisg ICAgICAgICBJbmRleCBDb25kOiAoaWQgPSAiKlZBTFVFUyoiLmNvbHVtbjEpCisgICAgICAgICBG aWx0ZXI6ICh2YWwxID0gIipWQUxVRVMqIi5jb2x1bW4yKQorIEdlbmVyYXRlZCBQbGFuIEFkdmlj ZToKKyAgIEpPSU5fT1JERVIoIipWQUxVRVMqIiBzal93aWRlKQorICAgTkVTVEVEX0xPT1BfUExB SU4oc2pfd2lkZSkKKyAgIElOREVYX1NDQU4oc2pfd2lkZSBwdWJsaWMuc2pfd2lkZV9wa2V5KQor ICAgU0VNSUpPSU5fVU5JUVVFKCIqVkFMVUVTKiIpCisgICBOT19HQVRIRVIoc2pfd2lkZSkKKygx MyByb3dzKQorCistLSBJZiB3ZSBhc2sgZm9yIGEgdW5pcXVlIHNlbWlqb2luLCB3ZSBzaG91bGQg Z2V0IHRoZSBzYW1lIHBsYW4gYXMgd2l0aAorLS0gbm8gYWR2aWNlLiBJZiB3ZSBhc2sgZm9yIGEg bm9uLXVuaXF1ZSBzZW1pam9pbiwgd2Ugc2hvdWxkIHNlZSBhIFNlbWkKKy0tIEpvaW4gb3BlcmF0 aW9uIGluIHRoZSBwbGFuIHRyZWUuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5h ZHZpY2UgPSAnc2VtaWpvaW5fdW5pcXVlKCIqVkFMVUVTKiIpJzsKK0VYUExBSU4gKENPU1RTIE9G RiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIHNqX3dpZGUKKwlXSEVSRSAoaWQsIHZhbDEp IElOIChWQUxVRVMgKDEsIDEpLCAoMiwgMiksICgzLCAzKSwgKDQsIDQpLCAoNSwgNSkpOworICAg ICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgTmVzdGVkIExvb3AKKyAgIC0+ICBIYXNoQWdncmVnYXRlCisgICAgICAgICBHcm91cCBL ZXk6ICIqVkFMVUVTKiIuY29sdW1uMSwgIipWQUxVRVMqIi5jb2x1bW4yCisgICAgICAgICAtPiAg VmFsdWVzIFNjYW4gb24gIipWQUxVRVMqIgorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgc2pfd2lk ZV9wa2V5IG9uIHNqX3dpZGUKKyAgICAgICAgIEluZGV4IENvbmQ6IChpZCA9ICIqVkFMVUVTKiIu Y29sdW1uMSkKKyAgICAgICAgIEZpbHRlcjogKHZhbDEgPSAiKlZBTFVFUyoiLmNvbHVtbjIpCisg U3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBTRU1JSk9JTl9VTklRVUUoIipWQUxVRVMqIikgLyog bWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoIipWQUxV RVMqIiBzal93aWRlKQorICAgTkVTVEVEX0xPT1BfUExBSU4oc2pfd2lkZSkKKyAgIElOREVYX1ND QU4oc2pfd2lkZSBwdWJsaWMuc2pfd2lkZV9wa2V5KQorICAgU0VNSUpPSU5fVU5JUVVFKCIqVkFM VUVTKiIpCisgICBOT19HQVRIRVIoc2pfd2lkZSkKKygxNSByb3dzKQorCitTRVQgTE9DQUwgcGdf cGxhbl9hZHZpY2UuYWR2aWNlID0gJ3NlbWlqb2luX25vbl91bmlxdWUoIipWQUxVRVMqIiknOwor RVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gc2pfd2lkZQor CVdIRVJFIChpZCwgdmFsMSkgSU4gKFZBTFVFUyAoMSwgMSksICgyLCAyKSwgKDMsIDMpLCAoNCwg NCksICg1LCA1KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVF UlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggU2VtaSBKb2luCisgICBIYXNoIENvbmQ6 ICgoc2pfd2lkZS5pZCA9ICIqVkFMVUVTKiIuY29sdW1uMSkgQU5EIChzal93aWRlLnZhbDEgPSAi KlZBTFVFUyoiLmNvbHVtbjIpKQorICAgLT4gIFNlcSBTY2FuIG9uIHNqX3dpZGUKKyAgIC0+ICBI YXNoCisgICAgICAgICAtPiAgVmFsdWVzIFNjYW4gb24gIipWQUxVRVMqIgorIFN1cHBsaWVkIFBs YW4gQWR2aWNlOgorICAgU0VNSUpPSU5fTk9OX1VOSVFVRSgiKlZBTFVFUyoiKSAvKiBtYXRjaGVk ICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihzal93aWRlICIqVkFM VUVTKiIpCisgICBIQVNIX0pPSU4oIipWQUxVRVMqIikKKyAgIFNFUV9TQ0FOKHNqX3dpZGUpCisg ICBTRU1JSk9JTl9OT05fVU5JUVVFKCIqVkFMVUVTKiIpCisgICBOT19HQVRIRVIoc2pfd2lkZSkK KygxMyByb3dzKQorCitDT01NSVQ7CistLSBCZWNhdXNlIHRoaXMgdGFibGUgaXMgbmFycm93ZXIg dGhhbiB0aGUgcHJldmlvdXMgb25lLCBhIHNlcXVlbnRpYWwgc2NhbgorLS0gaXMgbGVzcyBleHBl bnNpdmUsIGFuZCB3ZSBjaG9vc2UgYSBzdHJhaWdodGZvcndhcmQgU2VtaSBKb2luIHBsYW4gYnkK Ky0tIGRlZmF1bHQuIChOb3RlIHRoYXQgdGhpcyBpcyBhbHNvIHZlcnkgc2Vuc2l0aXZlIHRvIHRo ZSBsZW5ndGggb2YgdGhlIElOCistLSBsaXN0LCB3aGljaCBhZmZlY3RzIGhvdyBtYW55IGluZGV4 IGxvb2t1cHMgdGhlIGFsdGVybmF0aXZlIHBsYW4gd2lsbCBuZWVkLikKK0VYUExBSU4gKENPU1RT IE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIHNqX25hcnJvdworCVdIRVJFIChpZCwg dmFsMSkgSU4gKFZBTFVFUyAoMSwgMSksICgyLCAyKSwgKDMsIDMpLCAoNCwgNCksICg1LCA1KSk7 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSGFzaCBTZW1pIEpvaW4KKyAgIEhhc2ggQ29uZDogKChz al9uYXJyb3cuaWQgPSAiKlZBTFVFUyoiLmNvbHVtbjEpIEFORCAoc2pfbmFycm93LnZhbDEgPSAi KlZBTFVFUyoiLmNvbHVtbjIpKQorICAgLT4gIFNlcSBTY2FuIG9uIHNqX25hcnJvdworICAgLT4g IEhhc2gKKyAgICAgICAgIC0+ICBWYWx1ZXMgU2NhbiBvbiAiKlZBTFVFUyoiCisgR2VuZXJhdGVk IFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihzal9uYXJyb3cgIipWQUxVRVMqIikKKyAgIEhB U0hfSk9JTigiKlZBTFVFUyoiKQorICAgU0VRX1NDQU4oc2pfbmFycm93KQorICAgU0VNSUpPSU5f Tk9OX1VOSVFVRSgiKlZBTFVFUyoiKQorICAgTk9fR0FUSEVSKHNqX25hcnJvdykKKygxMSByb3dz KQorCistLSBIZXJlLCB3ZSBleHBlY3QgYWR2aXNpbmcgYSB1bmlxdWUgc2VtaWpvaW4gdG8gc3dp dGggdG8gdGhlIHNhbWUgcGxhbiB0aGF0CistLSB3ZSBnb3Qgd2l0aCBzal93aWRlLCBhbmQgYWR2 aXNpbmcgYSBub24tdW5pcXVlIHNlbWlqb2luIHNob3VsZCBub3QgY2hhbmdlCistLSB0aGUgcGxh bi4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdzZW1pam9pbl91 bmlxdWUoIipWQUxVRVMqIiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NF TEVDVCAqIEZST00gc2pfbmFycm93CisJV0hFUkUgKGlkLCB2YWwxKSBJTiAoVkFMVUVTICgxLCAx KSwgKDIsIDIpLCAoMywgMyksICg0LCA0KSwgKDUsIDUpKTsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyBIYXNoIEpvaW4KKyAgIEhhc2ggQ29uZDogKChzal9uYXJyb3cuaWQgPSAiKlZBTFVFUyoiLmNv bHVtbjEpIEFORCAoc2pfbmFycm93LnZhbDEgPSAiKlZBTFVFUyoiLmNvbHVtbjIpKQorICAgLT4g IFNlcSBTY2FuIG9uIHNqX25hcnJvdworICAgLT4gIEhhc2gKKyAgICAgICAgIC0+ICBIYXNoQWdn cmVnYXRlCisgICAgICAgICAgICAgICBHcm91cCBLZXk6ICIqVkFMVUVTKiIuY29sdW1uMSwgIipW QUxVRVMqIi5jb2x1bW4yCisgICAgICAgICAgICAgICAtPiAgVmFsdWVzIFNjYW4gb24gIipWQUxV RVMqIgorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgU0VNSUpPSU5fVU5JUVVFKCIqVkFMVUVT KiIpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVS KHNqX25hcnJvdyAiKlZBTFVFUyoiKQorICAgSEFTSF9KT0lOKCIqVkFMVUVTKiIpCisgICBTRVFf U0NBTihzal9uYXJyb3cpCisgICBTRU1JSk9JTl9VTklRVUUoIipWQUxVRVMqIikKKyAgIE5PX0dB VEhFUihzal9uYXJyb3cpCisoMTUgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFk dmljZSA9ICdzZW1pam9pbl9ub25fdW5pcXVlKCIqVkFMVUVTKiIpJzsKK0VYUExBSU4gKENPU1RT IE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIHNqX25hcnJvdworCVdIRVJFIChpZCwg dmFsMSkgSU4gKFZBTFVFUyAoMSwgMSksICgyLCAyKSwgKDMsIDMpLCAoNCwgNCksICg1LCA1KSk7 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSGFzaCBTZW1pIEpvaW4KKyAgIEhhc2ggQ29uZDogKChz al9uYXJyb3cuaWQgPSAiKlZBTFVFUyoiLmNvbHVtbjEpIEFORCAoc2pfbmFycm93LnZhbDEgPSAi KlZBTFVFUyoiLmNvbHVtbjIpKQorICAgLT4gIFNlcSBTY2FuIG9uIHNqX25hcnJvdworICAgLT4g IEhhc2gKKyAgICAgICAgIC0+ICBWYWx1ZXMgU2NhbiBvbiAiKlZBTFVFUyoiCisgU3VwcGxpZWQg UGxhbiBBZHZpY2U6CisgICBTRU1JSk9JTl9OT05fVU5JUVVFKCIqVkFMVUVTKiIpIC8qIG1hdGNo ZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKHNqX25hcnJvdyAi KlZBTFVFUyoiKQorICAgSEFTSF9KT0lOKCIqVkFMVUVTKiIpCisgICBTRVFfU0NBTihzal9uYXJy b3cpCisgICBTRU1JSk9JTl9OT05fVU5JUVVFKCIqVkFMVUVTKiIpCisgICBOT19HQVRIRVIoc2pf bmFycm93KQorKDEzIHJvd3MpCisKK0NPTU1JVDsKKy0tIEluIHRoZSBhYm92ZSBleGFtcGxlLCB3 ZSBtYWRlIHRoZSBvdXRlciBzaWRlIG9mIHRoZSBqb2luIHVuaXF1ZSwgYnV0IGhlcmUsCistLSB3 ZSBzaG91bGQgbWFrZSB0aGUgaW5uZXIgc2lkZSB1bmlxdWUuCitFWFBMQUlOIChDT1NUUyBPRkYs IFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwKSBnCisg ICAgV0hFUkUgZyBpbiAoc2VsZWN0IHZhbDEgZnJvbSBzal9uYXJyb3cpOworICAgICAgICAgICAg ICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoIEpvaW4KKyAgIEhhc2ggQ29uZDogKGcuZyA9IHNqX25h cnJvdy52YWwxKQorICAgLT4gIEZ1bmN0aW9uIFNjYW4gb24gZ2VuZXJhdGVfc2VyaWVzIGcKKyAg IC0+ICBIYXNoCisgICAgICAgICAtPiAgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgR3Jv dXAgS2V5OiBzal9uYXJyb3cudmFsMQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHNq X25hcnJvdworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZyBzal9uYXJy b3cpCisgICBIQVNIX0pPSU4oc2pfbmFycm93KQorICAgU0VRX1NDQU4oc2pfbmFycm93KQorICAg U0VNSUpPSU5fVU5JUVVFKHNqX25hcnJvdykKKyAgIE5PX0dBVEhFUihzal9uYXJyb3cpCisoMTMg cm93cykKKworLS0gV2Ugc2hvdWxkIGJlIGFibGUgdG8gZm9yY2UgYSBwbGFuIHdpdGggb3Igd2l0 aG91dCB0aGUgbWFrZS11bmlxdWUgc3RyYXRlZ3ksCistLSB3aXRoIGVpdGhlciBzaWRlIGFzIHRo ZSBkcml2aW5nIHRhYmxlLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNl ID0gJ3NlbWlqb2luX3VuaXF1ZShzal9uYXJyb3cpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExB Tl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDApIGcKKyAgICBX SEVSRSBnIGluIChzZWxlY3QgdmFsMSBmcm9tIHNqX25hcnJvdyk7CisgICAgICAgICAgICAgICAg IFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoIEpvaW4KKyAgIEhhc2ggQ29uZDogKGcuZyA9IHNqX25h cnJvdy52YWwxKQorICAgLT4gIEZ1bmN0aW9uIFNjYW4gb24gZ2VuZXJhdGVfc2VyaWVzIGcKKyAg IC0+ICBIYXNoCisgICAgICAgICAtPiAgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgR3Jv dXAgS2V5OiBzal9uYXJyb3cudmFsMQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHNq X25hcnJvdworIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgU0VNSUpPSU5fVU5JUVVFKHNqX25h cnJvdykgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JE RVIoZyBzal9uYXJyb3cpCisgICBIQVNIX0pPSU4oc2pfbmFycm93KQorICAgU0VRX1NDQU4oc2pf bmFycm93KQorICAgU0VNSUpPSU5fVU5JUVVFKHNqX25hcnJvdykKKyAgIE5PX0dBVEhFUihzal9u YXJyb3cpCisoMTUgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdz ZW1pam9pbl9ub25fdW5pcXVlKHNqX25hcnJvdyknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFO X0FEVklDRSkKK1NFTEVDVCAqIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMCkgZworICAgIFdI RVJFIGcgaW4gKHNlbGVjdCB2YWwxIGZyb20gc2pfbmFycm93KTsKKyAgICAgICAgICAgICAgICAg ICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSGFzaCBTZW1pIEpvaW4KKyAgIEhhc2ggQ29uZDog KGcuZyA9IHNqX25hcnJvdy52YWwxKQorICAgLT4gIEZ1bmN0aW9uIFNjYW4gb24gZ2VuZXJhdGVf c2VyaWVzIGcKKyAgIC0+ICBIYXNoCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gc2pfbmFycm93 CisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBTRU1JSk9JTl9OT05fVU5JUVVFKHNqX25hcnJv dykgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIo ZyBzal9uYXJyb3cpCisgICBIQVNIX0pPSU4oc2pfbmFycm93KQorICAgU0VRX1NDQU4oc2pfbmFy cm93KQorICAgU0VNSUpPSU5fTk9OX1VOSVFVRShzal9uYXJyb3cpCisgICBOT19HQVRIRVIoc2pf bmFycm93KQorKDEzIHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAn c2VtaWpvaW5fdW5pcXVlKHNqX25hcnJvdykgam9pbl9vcmRlcihzal9uYXJyb3cpJzsKK0VYUExB SU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGdlbmVyYXRlX3Nlcmll cygxLDEwMDApIGcKKyAgICBXSEVSRSBnIGluIChzZWxlY3QgdmFsMSBmcm9tIHNqX25hcnJvdyk7 CisgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggSm9pbgor ICAgSGFzaCBDb25kOiAoc2pfbmFycm93LnZhbDEgPSBnLmcpCisgICAtPiAgSGFzaEFnZ3JlZ2F0 ZQorICAgICAgICAgR3JvdXAgS2V5OiBzal9uYXJyb3cudmFsMQorICAgICAgICAgLT4gIFNlcSBT Y2FuIG9uIHNqX25hcnJvdworICAgLT4gIEhhc2gKKyAgICAgICAgIC0+ICBGdW5jdGlvbiBTY2Fu IG9uIGdlbmVyYXRlX3NlcmllcyBnCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBTRU1JSk9J Tl9VTklRVUUoc2pfbmFycm93KSAvKiBtYXRjaGVkICovCisgICBKT0lOX09SREVSKHNqX25hcnJv dykgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIo c2pfbmFycm93IGcpCisgICBIQVNIX0pPSU4oZykKKyAgIFNFUV9TQ0FOKHNqX25hcnJvdykKKyAg IFNFTUlKT0lOX1VOSVFVRShzal9uYXJyb3cpCisgICBOT19HQVRIRVIoc2pfbmFycm93KQorKDE2 IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnc2VtaWpvaW5fbm9u X3VuaXF1ZShzal9uYXJyb3cpIGpvaW5fb3JkZXIoc2pfbmFycm93KSc7CitFWFBMQUlOIChDT1NU UyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAw KSBnCisgICAgV0hFUkUgZyBpbiAoc2VsZWN0IHZhbDEgZnJvbSBzal9uYXJyb3cpOworICAgICAg ICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoIFJpZ2h0IFNlbWkgSm9p bgorICAgSGFzaCBDb25kOiAoc2pfbmFycm93LnZhbDEgPSBnLmcpCisgICAtPiAgU2VxIFNjYW4g b24gc2pfbmFycm93CisgICAtPiAgSGFzaAorICAgICAgICAgLT4gIEZ1bmN0aW9uIFNjYW4gb24g Z2VuZXJhdGVfc2VyaWVzIGcKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIFNFTUlKT0lOX05P Tl9VTklRVUUoc2pfbmFycm93KSAvKiBtYXRjaGVkICovCisgICBKT0lOX09SREVSKHNqX25hcnJv dykgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIo c2pfbmFycm93IGcpCisgICBIQVNIX0pPSU4oZykKKyAgIFNFUV9TQ0FOKHNqX25hcnJvdykKKyAg IFNFTUlKT0lOX05PTl9VTklRVUUoc2pfbmFycm93KQorICAgTk9fR0FUSEVSKHNqX25hcnJvdykK KygxNCByb3dzKQorCitDT01NSVQ7CistLSBIb3dldmVyLCBtZW50aW9uaW5nIHRoZSB3cm9uZyBz aWRlIG9mIHRoZSBqb2luIHNob3VsZCByZXN1bHQgaW4gYW4gYWR2aWNlCistLSBmYWlsdXJlLgor QkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ3NlbWlqb2luX3VuaXF1 ZShnKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBn ZW5lcmF0ZV9zZXJpZXMoMSwxMDAwKSBnCisgICAgV0hFUkUgZyBpbiAoc2VsZWN0IHZhbDEgZnJv bSBzal9uYXJyb3cpOworICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVk IExvb3AKKyAgIERpc2FibGVkOiB0cnVlCisgICBKb2luIEZpbHRlcjogKGcuZyA9IHNqX25hcnJv dy52YWwxKQorICAgLT4gIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgIEdyb3VwIEtleTogc2pfbmFy cm93LnZhbDEKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBzal9uYXJyb3cKKyAgIC0+ICBGdW5j dGlvbiBTY2FuIG9uIGdlbmVyYXRlX3NlcmllcyBnCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6Cisg ICBTRU1JSk9JTl9VTklRVUUoZykgLyogbWF0Y2hlZCwgZmFpbGVkICovCisgR2VuZXJhdGVkIFBs YW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihzal9uYXJyb3cgZykKKyAgIE5FU1RFRF9MT09QX1BM QUlOKGcpCisgICBTRVFfU0NBTihzal9uYXJyb3cpCisgICBTRU1JSk9JTl9VTklRVUUoc2pfbmFy cm93KQorICAgTk9fR0FUSEVSKHNqX25hcnJvdykKKygxNSByb3dzKQorCitTRVQgTE9DQUwgcGdf cGxhbl9hZHZpY2UuYWR2aWNlID0gJ3NlbWlqb2luX25vbl91bmlxdWUoZyknOworRVhQTEFJTiAo Q09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEs MTAwMCkgZworICAgIFdIRVJFIGcgaW4gKHNlbGVjdCB2YWwxIGZyb20gc2pfbmFycm93KTsKKyAg ICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAg IERpc2FibGVkOiB0cnVlCisgICBKb2luIEZpbHRlcjogKGcuZyA9IHNqX25hcnJvdy52YWwxKQor ICAgLT4gIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgIEdyb3VwIEtleTogc2pfbmFycm93LnZhbDEK KyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBzal9uYXJyb3cKKyAgIC0+ICBGdW5jdGlvbiBTY2Fu IG9uIGdlbmVyYXRlX3NlcmllcyBnCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBTRU1JSk9J Tl9OT05fVU5JUVVFKGcpIC8qIG1hdGNoZWQsIGZhaWxlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFk dmljZToKKyAgIEpPSU5fT1JERVIoc2pfbmFycm93IGcpCisgICBORVNURURfTE9PUF9QTEFJTihn KQorICAgU0VRX1NDQU4oc2pfbmFycm93KQorICAgU0VNSUpPSU5fVU5JUVVFKHNqX25hcnJvdykK KyAgIE5PX0dBVEhFUihzal9uYXJyb3cpCisoMTUgcm93cykKKworQ09NTUlUOworLS0gVGVzdCBj b25mbGljdGluZyBhZHZpY2UuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZp Y2UgPSAnc2VtaWpvaW5fdW5pcXVlKHNqX25hcnJvdykgc2VtaWpvaW5fbm9uX3VuaXF1ZShzal9u YXJyb3cpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9N IGdlbmVyYXRlX3NlcmllcygxLDEwMDApIGcKKyAgICBXSEVSRSBnIGluIChzZWxlY3QgdmFsMSBm cm9tIHNqX25hcnJvdyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggSm9pbgor ICAgSGFzaCBDb25kOiAoZy5nID0gc2pfbmFycm93LnZhbDEpCisgICAtPiAgRnVuY3Rpb24gU2Nh biBvbiBnZW5lcmF0ZV9zZXJpZXMgZworICAgLT4gIEhhc2gKKyAgICAgICAgIC0+ICBIYXNoQWdn cmVnYXRlCisgICAgICAgICAgICAgICBHcm91cCBLZXk6IHNqX25hcnJvdy52YWwxCisgICAgICAg ICAgICAgICAtPiAgU2VxIFNjYW4gb24gc2pfbmFycm93CisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6 CisgICBTRU1JSk9JTl9VTklRVUUoc2pfbmFycm93KSAvKiBtYXRjaGVkLCBjb25mbGljdGluZyAq LworICAgU0VNSUpPSU5fTk9OX1VOSVFVRShzal9uYXJyb3cpIC8qIG1hdGNoZWQsIGNvbmZsaWN0 aW5nLCBmYWlsZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGcg c2pfbmFycm93KQorICAgSEFTSF9KT0lOKHNqX25hcnJvdykKKyAgIFNFUV9TQ0FOKHNqX25hcnJv dykKKyAgIFNFTUlKT0lOX1VOSVFVRShzal9uYXJyb3cpCisgICBOT19HQVRIRVIoc2pfbmFycm93 KQorKDE2IHJvd3MpCisKK0NPTU1JVDsKKy0tIFRyeSBhcHBseWluZyBTRU1JSk9JTl9VTklRVUUo KSB0byBhIG5vbi1zZW1pam9pbi4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFk dmljZSA9ICdzZW1pam9pbl91bmlxdWUoZyknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FE VklDRSkKK1NFTEVDVCAqIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMCkgZywgc2pfbmFycm93 IHMgV0hFUkUgZyA9IHMudmFsMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4g ICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBNZXJnZSBKb2luCisgICBNZXJnZSBDb25kOiAo cy52YWwxID0gZy5nKQorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgc2pfbmFycm93X3ZhbDFfaWR4 IG9uIHNqX25hcnJvdyBzCisgICAtPiAgU29ydAorICAgICAgICAgU29ydCBLZXk6IGcuZworICAg ICAgICAgLT4gIEZ1bmN0aW9uIFNjYW4gb24gZ2VuZXJhdGVfc2VyaWVzIGcKKyBTdXBwbGllZCBQ bGFuIEFkdmljZToKKyAgIFNFTUlKT0lOX1VOSVFVRShnKSAvKiBtYXRjaGVkLCBpbmFwcGxpY2Fi bGUsIGZhaWxlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIocyBn KQorICAgTUVSR0VfSk9JTl9QTEFJTihnKQorICAgSU5ERVhfU0NBTihzIHB1YmxpYy5zal9uYXJy b3dfdmFsMV9pZHgpCisgICBOT19HQVRIRVIocykKKygxMyByb3dzKQorCitDT01NSVQ7CmRpZmYg LS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL3N5bnRheC5vdXQgYi9jb250 cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL3N5bnRheC5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAuLmJlNjE0MDJiNTY5Ci0tLSAvZGV2L251bGwKKysrIGIvY29u dHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9zeW50YXgub3V0CkBAIC0wLDAgKzEsMTkyIEBA CitMT0FEICdwZ19wbGFuX2FkdmljZSc7CistLSBBbiBlbXB0eSBzdHJpbmcgaXMgYWxsb3dlZC4g RW1wdHkgdGFyZ2V0IGxpc3RzIGFyZSBhbGxvd2VkIGZvciBtb3N0IGFkdmljZQorLS0gdGFncywg YnV0IG5vdCBmb3IgSk9JTl9PUkRFUi4gIlN1cHBsaWVkIFBsYW4gQWR2aWNlIiBzaG91bGQgYmUg b21pdHRlZCBpbgorLS0gdGV4dCBmb3JtYXQgd2hlbiB0aGVyZSBpcyBubyBhY3R1YWwgYWR2aWNl LCBidXQgbm90IGluIG5vbi10ZXh0IGZvcm1hdC4KK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2Ug PSAnJzsKK0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUIDE7CisgUVVFUlkgUExBTiAKKy0tLS0t LS0tLS0tLQorIFJlc3VsdAorKDEgcm93KQorCitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0g J1NFUV9TQ0FOKCknOworRVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1QgMTsKKyBRVUVSWSBQTEFO IAorLS0tLS0tLS0tLS0tCisgUmVzdWx0CisoMSByb3cpCisKK1NFVCBwZ19wbGFuX2FkdmljZS5h ZHZpY2UgPSAnTkVTVEVEX0xPT1BfUExBSU4oKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIEZPUk1B VCBKU09OKSBTRUxFQ1QgMTsKKyAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICsKKyAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICArCisgICAgICJQbGFuIjogeyAg ICAgICAgICAgICAgICAgKworICAgICAgICJOb2RlIFR5cGUiOiAiUmVzdWx0IiwgICsKKyAgICAg ICAiUGFyYWxsZWwgQXdhcmUiOiBmYWxzZSwrCisgICAgICAgIkFzeW5jIENhcGFibGUiOiBmYWxz ZSwgKworICAgICAgICJEaXNhYmxlZCI6IGZhbHNlICAgICAgICsKKyAgICAgfSwgICAgICAgICAg ICAgICAgICAgICAgICArCisgICAgICJTdXBwbGllZCBQbGFuIEFkdmljZSI6ICIiKworICAgfSAg ICAgICAgICAgICAgICAgICAgICAgICAgICsKKyBdCisoMSByb3cpCisKK1NFVCBwZ19wbGFuX2Fk dmljZS5hZHZpY2UgPSAnSk9JTl9PUkRFUigpJzsKK0VSUk9SOiAgaW52YWxpZCB2YWx1ZSBmb3Ig cGFyYW1ldGVyICJwZ19wbGFuX2FkdmljZS5hZHZpY2UiOiAiSk9JTl9PUkRFUigpIgorREVUQUlM OiAgQ291bGQgbm90IHBhcnNlIGFkdmljZTogSk9JTl9PUkRFUiBtdXN0IGhhdmUgYXQgbGVhc3Qg b25lIHRhcmdldCBhdCBvciBuZWFyICIpIgorLS0gVGVzdCBhc3NvcnRlZCB2YXJpYXRpb25zIGlu IGNhcGl0YWxpemF0aW9uLCB3aGl0ZXNwYWNlLCBhbmQgd2hpY2ggcGFydHMgb2YKKy0tIHRoZSBy ZWxhdGlvbiBpZGVudGlmaWVyIGFyZSBpbmNsdWRlZC4gVGhlc2Ugc2hvdWxkIGFsbCB3b3JrLgor U0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTih4KSc7CitFWFBMQUlOIChDT1NU UyBPRkYpIFNFTEVDVCAxOworICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBSZXN1bHQKKyBTdXBwbGllZCBQbGFuIEFk dmljZToKKyAgIFNFUV9TQ0FOKHgpIC8qIG5vdCBtYXRjaGVkICovCisoMyByb3dzKQorCitTRVQg cGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ3NlcV9zY2FuKHhAeSknOworRVhQTEFJTiAoQ09TVFMg T0ZGKSBTRUxFQ1QgMTsKKyAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFJlc3VsdAorIFN1cHBsaWVkIFBsYW4g QWR2aWNlOgorICAgU0VRX1NDQU4oeEB5KSAvKiBub3QgbWF0Y2hlZCAqLworKDMgcm93cykKKwor U0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfc2Nhbih4IzIpJzsKK0VYUExBSU4gKENP U1RTIE9GRikgU0VMRUNUIDE7CisgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBSZXN1bHQKKyBTdXBwbGllZCBQ bGFuIEFkdmljZToKKyAgIFNFUV9TQ0FOKHgjMikgLyogbm90IG1hdGNoZWQgKi8KKygzIHJvd3Mp CisKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4gKHgveSknOworRVhQTEFJ TiAoQ09TVFMgT0ZGKSBTRUxFQ1QgMTsKKyAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFJlc3VsdAorIFN1cHBs aWVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4oeC95KSAvKiBub3QgbWF0Y2hlZCAqLworKDMg cm93cykKKworU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICcgIFNFUV9TQ0FOICggeCAvIHkg LiB6ICkgICc7CitFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCAxOworICAgICAgICAgICAgIFFV RVJZIFBMQU4gICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorIFJlc3VsdAorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4oeC95Lnop IC8qIG5vdCBtYXRjaGVkICovCisoMyByb3dzKQorCitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNl ID0gJ1NFUV9TQ0FOKCJ4IiMyLyJ5Ii4ieiJAInQiKSc7CitFWFBMQUlOIChDT1NUUyBPRkYpIFNF TEVDVCAxOworICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgUmVzdWx0CisgU3VwcGxpZWQg UGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTih4IzIveS56QHQpIC8qIG5vdCBtYXRjaGVkICovCiso MyByb3dzKQorCistLSBTeW50YXggZXJyb3JzLgorU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9 ICdTRVFVRU5USUFMX1NDQU4oeCknOworRVJST1I6ICBpbnZhbGlkIHZhbHVlIGZvciBwYXJhbWV0 ZXIgInBnX3BsYW5fYWR2aWNlLmFkdmljZSI6ICJTRVFVRU5USUFMX1NDQU4oeCkiCitERVRBSUw6 ICBDb3VsZCBub3QgcGFyc2UgYWR2aWNlOiBzeW50YXggZXJyb3IgYXQgb3IgbmVhciAiU0VRVUVO VElBTF9TQ0FOIgorU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTic7CitFUlJP UjogIGludmFsaWQgdmFsdWUgZm9yIHBhcmFtZXRlciAicGdfcGxhbl9hZHZpY2UuYWR2aWNlIjog IlNFUV9TQ0FOIgorREVUQUlMOiAgQ291bGQgbm90IHBhcnNlIGFkdmljZTogc3ludGF4IGVycm9y IGF0IGVuZCBvZiBpbnB1dAorU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTign OworRVJST1I6ICBpbnZhbGlkIHZhbHVlIGZvciBwYXJhbWV0ZXIgInBnX3BsYW5fYWR2aWNlLmFk dmljZSI6ICJTRVFfU0NBTigiCitERVRBSUw6ICBDb3VsZCBub3QgcGFyc2UgYWR2aWNlOiBzeW50 YXggZXJyb3IgYXQgZW5kIG9mIGlucHV0CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NF UV9TQ0FOKCInOworRVJST1I6ICBpbnZhbGlkIHZhbHVlIGZvciBwYXJhbWV0ZXIgInBnX3BsYW5f YWR2aWNlLmFkdmljZSI6ICJTRVFfU0NBTigiIgorREVUQUlMOiAgQ291bGQgbm90IHBhcnNlIGFk dmljZTogdW50ZXJtaW5hdGVkIHF1b3RlZCBpZGVudGlmaWVyIGF0IGVuZCBvZiBpbnB1dAorU0VU IHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTigiIiknOworRVJST1I6ICBpbnZhbGlk IHZhbHVlIGZvciBwYXJhbWV0ZXIgInBnX3BsYW5fYWR2aWNlLmFkdmljZSI6ICJTRVFfU0NBTigi IikiCitERVRBSUw6ICBDb3VsZCBub3QgcGFyc2UgYWR2aWNlOiB6ZXJvLWxlbmd0aCBkZWxpbWl0 ZWQgaWRlbnRpZmllciBhdCBvciBuZWFyICIiIgorU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9 ICdTRVFfU0NBTigiYSInOworRVJST1I6ICBpbnZhbGlkIHZhbHVlIGZvciBwYXJhbWV0ZXIgInBn X3BsYW5fYWR2aWNlLmFkdmljZSI6ICJTRVFfU0NBTigiYSIiCitERVRBSUw6ICBDb3VsZCBub3Qg cGFyc2UgYWR2aWNlOiBzeW50YXggZXJyb3IgYXQgZW5kIG9mIGlucHV0CitTRVQgcGdfcGxhbl9h ZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKCMnOworRVJST1I6ICBpbnZhbGlkIHZhbHVlIGZvciBw YXJhbWV0ZXIgInBnX3BsYW5fYWR2aWNlLmFkdmljZSI6ICJTRVFfU0NBTigjIgorREVUQUlMOiAg Q291bGQgbm90IHBhcnNlIGFkdmljZTogc3ludGF4IGVycm9yIGF0IG9yIG5lYXIgIiMiCitTRVQg cGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJygpJzsKK0VSUk9SOiAgaW52YWxpZCB2YWx1ZSBmb3Ig cGFyYW1ldGVyICJwZ19wbGFuX2FkdmljZS5hZHZpY2UiOiAiKCkiCitERVRBSUw6ICBDb3VsZCBu b3QgcGFyc2UgYWR2aWNlOiBzeW50YXggZXJyb3IgYXQgb3IgbmVhciAiKCIKK1NFVCBwZ19wbGFu X2FkdmljZS5hZHZpY2UgPSAnMTIzJzsKK0VSUk9SOiAgaW52YWxpZCB2YWx1ZSBmb3IgcGFyYW1l dGVyICJwZ19wbGFuX2FkdmljZS5hZHZpY2UiOiAiMTIzIgorREVUQUlMOiAgQ291bGQgbm90IHBh cnNlIGFkdmljZTogc3ludGF4IGVycm9yIGF0IG9yIG5lYXIgIjEyMyIKKy0tIFRhZ3MgbGlrZSBT RVFfU0NBTiBhbmQgTk9fR0FUSEVSIGRvbid0IGFsbG93IHN1Ymxpc3RzIGF0IGFsbDsgb3RoZXIg dGFncywKKy0tIGV4Y2VwdCBmb3IgSk9JTl9PUkRFUiwgYWxsb3cgYXQgbW9zdCBvbmUgbGV2ZWwg b2Ygc3VibGlzdC4gSGVuY2UsIHRoZXNlCistLSBleGFtcGxlcyBzaG91bGQgZXJyb3Igb3V0Lgor U0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTigoeCkpJzsKK0VSUk9SOiAgaW52 YWxpZCB2YWx1ZSBmb3IgcGFyYW1ldGVyICJwZ19wbGFuX2FkdmljZS5hZHZpY2UiOiAiU0VRX1ND QU4oKHgpKSIKK0RFVEFJTDogIENvdWxkIG5vdCBwYXJzZSBhZHZpY2U6IHN5bnRheCBlcnJvciBh dCBvciBuZWFyICIoIgorU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdHQVRIRVIoKCh4KSkp JzsKK0VSUk9SOiAgaW52YWxpZCB2YWx1ZSBmb3IgcGFyYW1ldGVyICJwZ19wbGFuX2FkdmljZS5h ZHZpY2UiOiAiR0FUSEVSKCgoeCkpKSIKK0RFVEFJTDogIENvdWxkIG5vdCBwYXJzZSBhZHZpY2U6 IHN5bnRheCBlcnJvciBhdCBvciBuZWFyICIoIgorLS0gTGVnYWwgY29tbWVudHMuCitTRVQgcGdf cGxhbl9hZHZpY2UuYWR2aWNlID0gJy8qKi8nOworRVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1Qg MTsKKyBRVUVSWSBQTEFOIAorLS0tLS0tLS0tLS0tCisgUmVzdWx0CisoMSByb3cpCisKK1NFVCBw Z19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSEFTSF9KT0lOKF8pLyoqKi8nOworRVhQTEFJTiAoQ09T VFMgT0ZGKSBTRUxFQ1QgMTsKKyAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBSZXN1bHQKKyBTdXBwbGllZCBQbGFu IEFkdmljZToKKyAgIEhBU0hfSk9JTihfKSAvKiBub3QgbWF0Y2hlZCAqLworKDMgcm93cykKKwor U0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICcvKiBjb21tZW50ICovIEhBU0hfSk9JTigvKngq L3kpJzsKK0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUIDE7CisgICAgICAgICAgICBRVUVSWSBQ TEFOICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgUmVz dWx0CisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBIQVNIX0pPSU4oeSkgLyogbm90IG1hdGNo ZWQgKi8KKygzIHJvd3MpCisKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnLyogY29tbWVu dCAqLyBIQVNIX0pPSU4oeS8vKngqL3opJzsKK0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUIDE7 CisgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIFJlc3VsdAorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAg SEFTSF9KT0lOKHkveikgLyogbm90IG1hdGNoZWQgKi8KKygzIHJvd3MpCisKKy0tIFVudGVybWlu YXRlZCBjb21tZW50cy4KK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnLyonOworRVJST1I6 ICBpbnZhbGlkIHZhbHVlIGZvciBwYXJhbWV0ZXIgInBnX3BsYW5fYWR2aWNlLmFkdmljZSI6ICIv KiIKK0RFVEFJTDogIENvdWxkIG5vdCBwYXJzZSBhZHZpY2U6IHVudGVybWluYXRlZCBjb21tZW50 IGF0IGVuZCBvZiBpbnB1dAorU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdKT0lOX09SREVS KCJmT08iKSAvKiBvb3BzJzsKK0VSUk9SOiAgaW52YWxpZCB2YWx1ZSBmb3IgcGFyYW1ldGVyICJw Z19wbGFuX2FkdmljZS5hZHZpY2UiOiAiSk9JTl9PUkRFUigiZk9PIikgLyogb29wcyIKK0RFVEFJ TDogIENvdWxkIG5vdCBwYXJzZSBhZHZpY2U6IHVudGVybWluYXRlZCBjb21tZW50IGF0IGVuZCBv ZiBpbnB1dAorLS0gTmVzdGVkIGNvbW1lbnRzIGFyZSBub3Qgc3VwcG9ydGVkLCBzbyB0aGUgZmly c3Qgb2YgdGhlc2UgaXMgbGVnYWwgYW5kCistLSB0aGUgc2Vjb25kIGlzIG5vdC4KK1NFVCBwZ19w bGFuX2FkdmljZS5hZHZpY2UgPSAnLyovKi8nOworRVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1Qg MTsKKyBRVUVSWSBQTEFOIAorLS0tLS0tLS0tLS0tCisgUmVzdWx0CisoMSByb3cpCisKK1NFVCBw Z19wbGFuX2FkdmljZS5hZHZpY2UgPSAnLyovKiBzdHVmZiAqLyovJzsKK0VSUk9SOiAgaW52YWxp ZCB2YWx1ZSBmb3IgcGFyYW1ldGVyICJwZ19wbGFuX2FkdmljZS5hZHZpY2UiOiAiLyovKiBzdHVm ZiAqLyovIgorREVUQUlMOiAgQ291bGQgbm90IHBhcnNlIGFkdmljZTogc3ludGF4IGVycm9yIGF0 IG9yIG5lYXIgIioiCistLSBGb3JlaWduIGpvaW4gcmVxdWlyZXMgbXVsdGlwbGUgcmVsYXRpb24g aWRlbnRpZmllcnMuCitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0ZPUkVJR05fSk9JTihh KSc7CitFUlJPUjogIGludmFsaWQgdmFsdWUgZm9yIHBhcmFtZXRlciAicGdfcGxhbl9hZHZpY2Uu YWR2aWNlIjogIkZPUkVJR05fSk9JTihhKSIKK0RFVEFJTDogIENvdWxkIG5vdCBwYXJzZSBhZHZp Y2U6IEZPUkVJR05fSk9JTiB0YXJnZXRzIG11c3QgY29udGFpbiBtb3JlIHRoYW4gb25lIHJlbGF0 aW9uIGlkZW50aWZpZXIgYXQgb3IgbmVhciAiKSIKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2Ug PSAnRk9SRUlHTl9KT0lOKChhKSknOworRVJST1I6ICBpbnZhbGlkIHZhbHVlIGZvciBwYXJhbWV0 ZXIgInBnX3BsYW5fYWR2aWNlLmFkdmljZSI6ICJGT1JFSUdOX0pPSU4oKGEpKSIKK0RFVEFJTDog IENvdWxkIG5vdCBwYXJzZSBhZHZpY2U6IEZPUkVJR05fSk9JTiB0YXJnZXRzIG11c3QgY29udGFp biBtb3JlIHRoYW4gb25lIHJlbGF0aW9uIGlkZW50aWZpZXIgYXQgb3IgbmVhciAiKSIKZGlmZiAt LWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvbWVzb24uYnVpbGQgYi9jb250cmliL3BnX3Bs YW5fYWR2aWNlL21lc29uLmJ1aWxkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAwLi5mNzIyOWRkZGNlZgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZp Y2UvbWVzb24uYnVpbGQKQEAgLTAsMCArMSw3OSBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMjItMjAy NCwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKworcGdfcGxhbl9hZHZpY2Vf c291cmNlcyA9IGZpbGVzKAorICAncGdfcGxhbl9hZHZpY2UuYycsCisgICdwZ3BhX2FzdC5jJywK KyAgJ3BncGFfY29sbGVjdG9yLmMnLAorICAncGdwYV9pZGVudGlmaWVyLmMnLAorICAncGdwYV9q b2luLmMnLAorICAncGdwYV9vdXRwdXQuYycsCisgICdwZ3BhX3BsYW5uZXIuYycsCisgICdwZ3Bh X3NjYW4uYycsCisgICdwZ3BhX3Ryb3ZlLmMnLAorICAncGdwYV93YWxrZXIuYycsCispCisKK3Bn cGFfc2Nhbm5lciA9IGN1c3RvbV90YXJnZXQoJ3BncGFfc2Nhbm5lcicsCisgIGlucHV0OiAncGdw YV9zY2FubmVyLmwnLAorICBvdXRwdXQ6ICdwZ3BhX3NjYW5uZXIuYycsCisgIGNvbW1hbmQ6IGZs ZXhfY21kLAorKQorZ2VuZXJhdGVkX3NvdXJjZXMgKz0gcGdwYV9zY2FubmVyCitwZ19wbGFuX2Fk dmljZV9zb3VyY2VzICs9IHBncGFfc2Nhbm5lcgorCitwZ3BhX3BhcnNlciA9IGN1c3RvbV90YXJn ZXQoJ3BncGFfcGFyc2VyJywKKyAgaW5wdXQ6ICdwZ3BhX3BhcnNlci55JywKKyAga3dhcmdzOiBi aXNvbl9rdywKKykKK2dlbmVyYXRlZF9zb3VyY2VzICs9IHBncGFfcGFyc2VyLnRvX2xpc3QoKQor cGdfcGxhbl9hZHZpY2Vfc291cmNlcyArPSBwZ3BhX3BhcnNlcgorCitpZiBob3N0X3N5c3RlbSA9 PSAnd2luZG93cycKKyAgcGdfcGxhbl9hZHZpY2Vfc291cmNlcyArPSByY19saWJfZ2VuLnByb2Nl c3Mod2luMzJ2ZXJfcmMsIGV4dHJhX2FyZ3M6IFsKKyAgICAnLS1OQU1FJywgJ3BnX3BsYW5fYWR2 aWNlJywKKyAgICAnLS1GSUxFREVTQycsICdwZ19wbGFuX2FkdmljZSAtIGhlbHAgdGhlIHBsYW5u ZXIgZ2V0IHRoZSByaWdodCBwbGFuJyxdKQorZW5kaWYKKworcGdfcGxhbl9hZHZpY2VfaW5jID0g aW5jbHVkZV9kaXJlY3RvcmllcygnLicpCisKK3BnX3BsYW5fYWR2aWNlID0gc2hhcmVkX21vZHVs ZSgncGdfcGxhbl9hZHZpY2UnLAorICBwZ19wbGFuX2FkdmljZV9zb3VyY2VzLAorICBpbmNsdWRl X2RpcmVjdG9yaWVzOiBwZ19wbGFuX2FkdmljZV9pbmMsCisgIGt3YXJnczogY29udHJpYl9tb2Rf YXJncywKKykKK2NvbnRyaWJfdGFyZ2V0cyArPSBwZ19wbGFuX2FkdmljZQorCitpbnN0YWxsX2Rh dGEoCisgICdwZ19wbGFuX2FkdmljZS0tMS4wLnNxbCcsCisgICdwZ19wbGFuX2FkdmljZS5jb250 cm9sJywKKyAga3dhcmdzOiBjb250cmliX2RhdGFfYXJncywKKykKKworaW5zdGFsbF9oZWFkZXJz KAorICAncGdfcGxhbl9hZHZpY2UuaCcsCisgIGluc3RhbGxfZGlyOiBkaXJfaW5jbHVkZV9leHRl bnNpb24gLyAncGdfcGxhbl9hZHZpY2UnLAorKQorCit0ZXN0cyArPSB7CisgICduYW1lJzogJ3Bn X3BsYW5fYWR2aWNlJywKKyAgJ3NkJzogbWVzb24uY3VycmVudF9zb3VyY2VfZGlyKCksCisgICdi ZCc6IG1lc29uLmN1cnJlbnRfYnVpbGRfZGlyKCksCisgICdyZWdyZXNzJzogeworICAgICdzcWwn OiBbCisgICAgICAnZ2F0aGVyJywKKyAgICAgICdqb2luX29yZGVyJywKKyAgICAgICdqb2luX3N0 cmF0ZWd5JywKKyAgICAgICdsb2NhbF9jb2xsZWN0b3InLAorICAgICAgJ3BhcnRpdGlvbndpc2Un LAorICAgICAgJ3ByZXBhcmVkJywKKyAgICAgICdzY2FuJywKKyAgICAgICdzZW1pam9pbicsCisg ICAgICAnc3ludGF4JywKKyAgICBdLAorICB9LAorICAndGFwJzogeworICAgICd0ZXN0cyc6IFsK KyAgICAgICd0LzAwMV9yZWdyZXNzLnBsJywKKyAgICBdLAorICB9LAorfQpkaWZmIC0tZ2l0IGEv Y29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ19wbGFuX2FkdmljZS0tMS4wLnNxbCBiL2NvbnRyaWIv cGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UtLTEuMC5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAuLjQ1MGM0MjA0MGZkCi0tLSAvZGV2L251bGwKKysrIGIvY29u dHJpYi9wZ19wbGFuX2FkdmljZS9wZ19wbGFuX2FkdmljZS0tMS4wLnNxbApAQCAtMCwwICsxLDQz IEBACisvKiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BnX3BsYW5fYWR2aWNlLS0xLjAuc3FsICov CisKKy0tIGNvbXBsYWluIGlmIHNjcmlwdCBpcyBzb3VyY2VkIGluIHBzcWwsIHJhdGhlciB0aGFu IHZpYSBDUkVBVEUgRVhURU5TSU9OCitcZWNobyBVc2UgIkNSRUFURSBFWFRFTlNJT04gcGdfcGxh bl9hZHZpY2UiIHRvIGxvYWQgdGhpcyBmaWxlLiBccXVpdAorCitDUkVBVEUgRlVOQ1RJT04gcGdf Y2xlYXJfY29sbGVjdGVkX2xvY2FsX2FkdmljZSgpCitSRVRVUk5TIHZvaWQKK0FTICdNT0RVTEVf UEFUSE5BTUUnLCAncGdfY2xlYXJfY29sbGVjdGVkX2xvY2FsX2FkdmljZScKK0xBTkdVQUdFIEMg U1RSSUNUOworCitDUkVBVEUgRlVOQ1RJT04gcGdfY2xlYXJfY29sbGVjdGVkX3NoYXJlZF9hZHZp Y2UoKQorUkVUVVJOUyB2b2lkCitBUyAnTU9EVUxFX1BBVEhOQU1FJywgJ3BnX2NsZWFyX2NvbGxl Y3RlZF9zaGFyZWRfYWR2aWNlJworTEFOR1VBR0UgQyBTVFJJQ1Q7CisKK0NSRUFURSBGVU5DVElP TiBwZ19nZXRfY29sbGVjdGVkX2xvY2FsX2FkdmljZSgKKwlPVVQgaWQgYmlnaW50LAorCU9VVCB1 c2VyaWQgb2lkLAorCU9VVCBkYmlkIG9pZCwKKwlPVVQgcXVlcnlpZCBiaWdpbnQsCisJT1VUIGNv bGxlY3Rpb25fdGltZSB0aW1lc3RhbXB0eiwKKwlPVVQgcXVlcnkgdGV4dCwKKwlPVVQgYWR2aWNl IHRleHQKKykKK1JFVFVSTlMgU0VUT0YgcmVjb3JkCitBUyAnTU9EVUxFX1BBVEhOQU1FJywgJ3Bn X2dldF9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlJworTEFOR1VBR0UgQyBTVFJJQ1Q7CisKK0NSRUFU RSBGVU5DVElPTiBwZ19nZXRfY29sbGVjdGVkX3NoYXJlZF9hZHZpY2UoCisJT1VUIGlkIGJpZ2lu dCwKKwlPVVQgdXNlcmlkIG9pZCwKKwlPVVQgZGJpZCBvaWQsCisJT1VUIHF1ZXJ5aWQgYmlnaW50 LAorCU9VVCBjb2xsZWN0aW9uX3RpbWUgdGltZXN0YW1wdHosCisJT1VUIHF1ZXJ5IHRleHQsCisJ T1VUIGFkdmljZSB0ZXh0CispCitSRVRVUk5TIFNFVE9GIHJlY29yZAorQVMgJ01PRFVMRV9QQVRI TkFNRScsICdwZ19nZXRfY29sbGVjdGVkX3NoYXJlZF9hZHZpY2UnCitMQU5HVUFHRSBDIFNUUklD VDsKKworUkVWT0tFIEFMTCBPTiBGVU5DVElPTiBwZ19jbGVhcl9jb2xsZWN0ZWRfc2hhcmVkX2Fk dmljZSgpIEZST00gUFVCTElDOworUkVWT0tFIEFMTCBPTiBGVU5DVElPTiBwZ19nZXRfY29sbGVj dGVkX3NoYXJlZF9hZHZpY2UoKSBGUk9NIFBVQkxJQzsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdf cGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UuYyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdf cGxhbl9hZHZpY2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOTli OTc4NDM5OTEKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BnX3Bs YW5fYWR2aWNlLmMKQEAgLTAsMCArMSw1NjMgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAq IHBnX3BsYW5fYWR2aWNlLmMKKyAqCSAgbWFpbiBlbnRyeXBvaW50cyBmb3IgZ2VuZXJhdGluZyBh bmQgYXBwbHlpbmcgcGxhbm5lciBhZHZpY2UKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAy NCwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKgkgIGNvbnRyaWIv cGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UuYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor ICovCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgInBnX3BsYW5fYWR2aWNlLmgi CisjaW5jbHVkZSAicGdwYV9hc3QuaCIKKyNpbmNsdWRlICJwZ3BhX2NvbGxlY3Rvci5oIgorI2lu Y2x1ZGUgInBncGFfaWRlbnRpZmllci5oIgorI2luY2x1ZGUgInBncGFfb3V0cHV0LmgiCisjaW5j bHVkZSAicGdwYV9wbGFubmVyLmgiCisjaW5jbHVkZSAicGdwYV90cm92ZS5oIgorI2luY2x1ZGUg InBncGFfd2Fsa2VyLmgiCisKKyNpbmNsdWRlICJjb21tYW5kcy9kZWZyZW0uaCIKKyNpbmNsdWRl ICJjb21tYW5kcy9leHBsYWluLmgiCisjaW5jbHVkZSAiY29tbWFuZHMvZXhwbGFpbl9mb3JtYXQu aCIKKyNpbmNsdWRlICJjb21tYW5kcy9leHBsYWluX3N0YXRlLmgiCisjaW5jbHVkZSAiZnVuY2Fw aS5oIgorI2luY2x1ZGUgIm9wdGltaXplci9wbGFubmVyLmgiCisjaW5jbHVkZSAic3RvcmFnZS9k c21fcmVnaXN0cnkuaCIKKyNpbmNsdWRlICJ1dGlscy9ndWMuaCIKKworUEdfTU9EVUxFX01BR0lD OworCitzdGF0aWMgcGdwYV9zaGFyZWRfc3RhdGUgKnBncGFfc3RhdGUgPSBOVUxMOworc3RhdGlj IGRzYV9hcmVhICpwZ3BhX2RzYV9hcmVhID0gTlVMTDsKK3N0YXRpYyBMaXN0ICphZHZpc29yX2hv b2tfbGlzdCA9IE5JTDsKKworLyogR1VDIHZhcmlhYmxlcyAqLworY2hhcgkgICAqcGdfcGxhbl9h ZHZpY2VfYWR2aWNlID0gTlVMTDsKK2Jvb2wJCXBnX3BsYW5fYWR2aWNlX2Fsd2F5c19zdG9yZV9h ZHZpY2VfZGV0YWlscyA9IGZhbHNlOworc3RhdGljIGJvb2wgcGdfcGxhbl9hZHZpY2VfYWx3YXlz X2V4cGxhaW5fc3VwcGxpZWRfYWR2aWNlID0gdHJ1ZTsKK2Jvb2wJCXBnX3BsYW5fYWR2aWNlX2Zl ZWRiYWNrX3dhcm5pbmdzID0gZmFsc2U7Citib29sCQlwZ19wbGFuX2FkdmljZV9sb2NhbF9jb2xs ZWN0b3IgPSBmYWxzZTsKK2ludAkJCXBnX3BsYW5fYWR2aWNlX2xvY2FsX2NvbGxlY3Rpb25fbGlt aXQgPSAwOworYm9vbAkJcGdfcGxhbl9hZHZpY2Vfc2hhcmVkX2NvbGxlY3RvciA9IGZhbHNlOwor aW50CQkJcGdfcGxhbl9hZHZpY2Vfc2hhcmVkX2NvbGxlY3Rpb25fbGltaXQgPSAwOworYm9vbAkJ cGdfcGxhbl9hZHZpY2VfdHJhY2VfbWFzayA9IGZhbHNlOworCisvKiBTYXZlZCBob29rIHZhbHVl ICovCitzdGF0aWMgZXhwbGFpbl9wZXJfcGxhbl9ob29rX3R5cGUgcHJldl9leHBsYWluX3Blcl9w bGFuID0gTlVMTDsKKworLyogT3RoZXIgZmlsZS1sZXZlbCBnbG9iYWxzICovCitzdGF0aWMgaW50 CWVzX2V4dGVuc2lvbl9pZDsKK3N0YXRpYyBNZW1vcnlDb250ZXh0IHBncGFfbWVtb3J5X2NvbnRl eHQgPSBOVUxMOworCitzdGF0aWMgdm9pZCBwZ3BhX2luaXRfc2hhcmVkX3N0YXRlKHZvaWQgKnB0 ciwgdm9pZCAqYXJnKTsKK3N0YXRpYyB2b2lkIHBnX3BsYW5fYWR2aWNlX2V4cGxhaW5fb3B0aW9u X2hhbmRsZXIoRXhwbGFpblN0YXRlICplcywKKwkJCQkJCQkJCQkJCSAgRGVmRWxlbSAqb3B0LAor CQkJCQkJCQkJCQkJICBQYXJzZVN0YXRlICpwc3RhdGUpOworc3RhdGljIHZvaWQgcGdfcGxhbl9h ZHZpY2VfZXhwbGFpbl9wZXJfcGxhbl9ob29rKFBsYW5uZWRTdG10ICpwbGFubmVkc3RtdCwKKwkJ CQkJCQkJCQkJCSBJbnRvQ2xhdXNlICppbnRvLAorCQkJCQkJCQkJCQkJIEV4cGxhaW5TdGF0ZSAq ZXMsCisJCQkJCQkJCQkJCQkgY29uc3QgY2hhciAqcXVlcnlTdHJpbmcsCisJCQkJCQkJCQkJCQkg UGFyYW1MaXN0SW5mbyBwYXJhbXMsCisJCQkJCQkJCQkJCQkgUXVlcnlFbnZpcm9ubWVudCAqcXVl cnlFbnYpOworc3RhdGljIGJvb2wgcGdfcGxhbl9hZHZpY2VfYWR2aWNlX2NoZWNrX2hvb2soY2hh ciAqKm5ld3ZhbCwgdm9pZCAqKmV4dHJhLAorCQkJCQkJCQkJCQkgR3VjU291cmNlIHNvdXJjZSk7 CitzdGF0aWMgRGVmRWxlbSAqZmluZF9kZWZlbGVtX2J5X2RlZm5hbWUoTGlzdCAqZGVmbGlzdCwg Y2hhciAqZGVmbmFtZSk7CisKKy8qCisgKiBJbml0aWFsaXplIHRoaXMgbW9kdWxlLgorICovCit2 b2lkCitfUEdfaW5pdCh2b2lkKQoreworCURlZmluZUN1c3RvbVN0cmluZ1ZhcmlhYmxlKCJwZ19w bGFuX2FkdmljZS5hZHZpY2UiLAorCQkJCQkJCSAgICJhZHZpY2UgdG8gYXBwbHkgZHVyaW5nIHF1 ZXJ5IHBsYW5uaW5nIiwKKwkJCQkJCQkgICBOVUxMLAorCQkJCQkJCSAgICZwZ19wbGFuX2Fkdmlj ZV9hZHZpY2UsCisJCQkJCQkJICAgTlVMTCwKKwkJCQkJCQkgICBQR0NfVVNFUlNFVCwKKwkJCQkJ CQkgICAwLAorCQkJCQkJCSAgIHBnX3BsYW5fYWR2aWNlX2FkdmljZV9jaGVja19ob29rLAorCQkJ CQkJCSAgIE5VTEwsCisJCQkJCQkJICAgTlVMTCk7CisKKwlEZWZpbmVDdXN0b21Cb29sVmFyaWFi bGUoInBnX3BsYW5fYWR2aWNlLmFsd2F5c19leHBsYWluX3N1cHBsaWVkX2FkdmljZSIsCisJCQkJ CQkJICJFWFBMQUlOIG91dHB1dCBpbmNsdWRlcyBzdXBwbGllZCBhZHZpY2UgZXZlbiB3aXRob3V0 IEVYUExBSU4gKFBMQU5fQURWSUNFKSIsCisJCQkJCQkJIE5VTEwsCisJCQkJCQkJICZwZ19wbGFu X2FkdmljZV9hbHdheXNfZXhwbGFpbl9zdXBwbGllZF9hZHZpY2UsCisJCQkJCQkJIHRydWUsCisJ CQkJCQkJIFBHQ19VU0VSU0VULAorCQkJCQkJCSAwLAorCQkJCQkJCSBOVUxMLAorCQkJCQkJCSBO VUxMLAorCQkJCQkJCSBOVUxMKTsKKworCURlZmluZUN1c3RvbUJvb2xWYXJpYWJsZSgicGdfcGxh bl9hZHZpY2UuYWx3YXlzX3N0b3JlX2FkdmljZV9kZXRhaWxzIiwKKwkJCQkJCQkgIkdlbmVyYXRl IGFkdmljZSBzdHJpbmdzIGV2ZW4gd2hlbiBzZWVtaW5nbHkgbm90IHJlcXVpcmVkIiwKKwkJCQkJ CQkgIlVzZSB0aGlzIG9wdGlvbiB0byBzZWUgZ2VuZXJhdGVkIGFkdmljZSBmb3IgcHJlcGFyZWQg cXVlcmllcy4iLAorCQkJCQkJCSAmcGdfcGxhbl9hZHZpY2VfYWx3YXlzX3N0b3JlX2FkdmljZV9k ZXRhaWxzLAorCQkJCQkJCSBmYWxzZSwKKwkJCQkJCQkgUEdDX1VTRVJTRVQsCisJCQkJCQkJIDAs CisJCQkJCQkJIE5VTEwsCisJCQkJCQkJIE5VTEwsCisJCQkJCQkJIE5VTEwpOworCisJRGVmaW5l Q3VzdG9tQm9vbFZhcmlhYmxlKCJwZ19wbGFuX2FkdmljZS5mZWVkYmFja193YXJuaW5ncyIsCisJ CQkJCQkJICJXYXJuIHdoZW4gc3VwcGxpZWQgYWR2aWNlIGRvZXMgbm90IGFwcGx5IGNsZWFubHki LAorCQkJCQkJCSBOVUxMLAorCQkJCQkJCSAmcGdfcGxhbl9hZHZpY2VfZmVlZGJhY2tfd2Fybmlu Z3MsCisJCQkJCQkJIGZhbHNlLAorCQkJCQkJCSBQR0NfVVNFUlNFVCwKKwkJCQkJCQkgMCwKKwkJ CQkJCQkgTlVMTCwKKwkJCQkJCQkgTlVMTCwKKwkJCQkJCQkgTlVMTCk7CisKKwlEZWZpbmVDdXN0 b21Cb29sVmFyaWFibGUoInBnX3BsYW5fYWR2aWNlLmxvY2FsX2NvbGxlY3RvciIsCisJCQkJCQkJ ICJFbmFibGUgdGhlIGxvY2FsIGFkdmljZSBjb2xsZWN0b3IuIiwKKwkJCQkJCQkgTlVMTCwKKwkJ CQkJCQkgJnBnX3BsYW5fYWR2aWNlX2xvY2FsX2NvbGxlY3RvciwKKwkJCQkJCQkgZmFsc2UsCisJ CQkJCQkJIFBHQ19VU0VSU0VULAorCQkJCQkJCSAwLAorCQkJCQkJCSBOVUxMLAorCQkJCQkJCSBO VUxMLAorCQkJCQkJCSBOVUxMKTsKKworCURlZmluZUN1c3RvbUludFZhcmlhYmxlKCJwZ19wbGFu X2FkdmljZS5sb2NhbF9jb2xsZWN0aW9uX2xpbWl0IiwKKwkJCQkJCQkiIyBvZiBhZHZpY2UgZW50 cmllcyB0byByZXRhaW4gaW4gcGVyLWJhY2tlbmQgbWVtb3J5IiwKKwkJCQkJCQlOVUxMLAorCQkJ CQkJCSZwZ19wbGFuX2FkdmljZV9sb2NhbF9jb2xsZWN0aW9uX2xpbWl0LAorCQkJCQkJCTAsCisJ CQkJCQkJMCwgSU5UX01BWCwKKwkJCQkJCQlQR0NfVVNFUlNFVCwKKwkJCQkJCQkwLAorCQkJCQkJ CU5VTEwsCisJCQkJCQkJTlVMTCwKKwkJCQkJCQlOVUxMKTsKKworCURlZmluZUN1c3RvbUJvb2xW YXJpYWJsZSgicGdfcGxhbl9hZHZpY2Uuc2hhcmVkX2NvbGxlY3RvciIsCisJCQkJCQkJICJFbmFi bGUgdGhlIHNoYXJlZCBhZHZpY2UgY29sbGVjdG9yLiIsCisJCQkJCQkJIE5VTEwsCisJCQkJCQkJ ICZwZ19wbGFuX2FkdmljZV9zaGFyZWRfY29sbGVjdG9yLAorCQkJCQkJCSBmYWxzZSwKKwkJCQkJ CQkgUEdDX1NVU0VULAorCQkJCQkJCSAwLAorCQkJCQkJCSBOVUxMLAorCQkJCQkJCSBOVUxMLAor CQkJCQkJCSBOVUxMKTsKKworCURlZmluZUN1c3RvbUludFZhcmlhYmxlKCJwZ19wbGFuX2Fkdmlj ZS5zaGFyZWRfY29sbGVjdGlvbl9saW1pdCIsCisJCQkJCQkJIiMgb2YgYWR2aWNlIGVudHJpZXMg dG8gcmV0YWluIGluIHNoYXJlZCBtZW1vcnkiLAorCQkJCQkJCU5VTEwsCisJCQkJCQkJJnBnX3Bs YW5fYWR2aWNlX3NoYXJlZF9jb2xsZWN0aW9uX2xpbWl0LAorCQkJCQkJCTAsCisJCQkJCQkJMCwg SU5UX01BWCwKKwkJCQkJCQlQR0NfU1VTRVQsCisJCQkJCQkJMCwKKwkJCQkJCQlOVUxMLAorCQkJ CQkJCU5VTEwsCisJCQkJCQkJTlVMTCk7CisKKwlEZWZpbmVDdXN0b21Cb29sVmFyaWFibGUoInBn X3BsYW5fYWR2aWNlLnRyYWNlX21hc2siLAorCQkJCQkJCSAiRW1pdCBkZWJ1Z2dpbmcgbWVzc2Fn ZXMgc2hvd2luZyB0aGUgY29tcHV0ZWQgc3RyYXRlZ3kgbWFzayBmb3IgZWFjaCByZWxhdGlvbiIs CisJCQkJCQkJIE5VTEwsCisJCQkJCQkJICZwZ19wbGFuX2FkdmljZV90cmFjZV9tYXNrLAorCQkJ CQkJCSBmYWxzZSwKKwkJCQkJCQkgUEdDX1VTRVJTRVQsCisJCQkJCQkJIDAsCisJCQkJCQkJIE5V TEwsCisJCQkJCQkJIE5VTEwsCisJCQkJCQkJIE5VTEwpOworCisJTWFya0dVQ1ByZWZpeFJlc2Vy dmVkKCJwZ19wbGFuX2FkdmljZSIpOworCisJLyogR2V0IGFuIElEIHRoYXQgd2UgY2FuIHVzZSB0 byBjYWNoZSBkYXRhIGluIGFuIEV4cGxhaW5TdGF0ZS4gKi8KKwllc19leHRlbnNpb25faWQgPSBH ZXRFeHBsYWluRXh0ZW5zaW9uSWQoInBnX3BsYW5fYWR2aWNlIik7CisKKwkvKiBSZWdpc3RlciB0 aGUgbmV3IEVYUExBSU4gb3B0aW9ucyBpbXBsZW1lbnRlZCBieSB0aGlzIG1vZHVsZS4gKi8KKwlS ZWdpc3RlckV4dGVuc2lvbkV4cGxhaW5PcHRpb24oInBsYW5fYWR2aWNlIiwKKwkJCQkJCQkJICAg cGdfcGxhbl9hZHZpY2VfZXhwbGFpbl9vcHRpb25faGFuZGxlcik7CisKKwkvKiBJbnN0YWxsIGhv b2tzICovCisJcGdwYV9wbGFubmVyX2luc3RhbGxfaG9va3MoKTsKKwlwcmV2X2V4cGxhaW5fcGVy X3BsYW4gPSBleHBsYWluX3Blcl9wbGFuX2hvb2s7CisJZXhwbGFpbl9wZXJfcGxhbl9ob29rID0g cGdfcGxhbl9hZHZpY2VfZXhwbGFpbl9wZXJfcGxhbl9ob29rOworfQorCisvKgorICogSW5pdGlh bGl6ZSBzaGFyZWQgc3RhdGUgd2hlbiBmaXJzdCBjcmVhdGVkLgorICovCitzdGF0aWMgdm9pZAor cGdwYV9pbml0X3NoYXJlZF9zdGF0ZSh2b2lkICpwdHIsIHZvaWQgKmFyZykKK3sKKwlwZ3BhX3No YXJlZF9zdGF0ZSAqc3RhdGUgPSAocGdwYV9zaGFyZWRfc3RhdGUgKikgcHRyOworCisJTFdMb2Nr SW5pdGlhbGl6ZSgmc3RhdGUtPmxvY2ssIExXTG9ja05ld1RyYW5jaGVJZCgicGdfcGxhbl9hZHZp Y2VfbG9jayIpKTsKKwlzdGF0ZS0+ZHNhX3RyYW5jaGUgPSBMV0xvY2tOZXdUcmFuY2hlSWQoInBn X3BsYW5fYWR2aWNlX2RzYSIpOworCXN0YXRlLT5hcmVhID0gRFNBX0hBTkRMRV9JTlZBTElEOwor CXN0YXRlLT5zaGFyZWRfY29sbGVjdG9yID0gSW52YWxpZERzYVBvaW50ZXI7Cit9CisKKy8qCisg KiBSZXR1cm4gYSBwb2ludGVyIHRvIGEgbWVtb3J5IGNvbnRleHQgd2hlcmUgbG9uZy1saXZlZCBk YXRhIG1hbmFnZWQgYnkgdGhpcworICogbW9kdWxlIGNhbiBiZSBzdG9yZWQuCisgKi8KK01lbW9y eUNvbnRleHQKK3BnX3BsYW5fYWR2aWNlX2dldF9tY3h0KHZvaWQpCit7CisJaWYgKHBncGFfbWVt b3J5X2NvbnRleHQgPT0gTlVMTCkKKwkJcGdwYV9tZW1vcnlfY29udGV4dCA9IEFsbG9jU2V0Q29u dGV4dENyZWF0ZShUb3BNZW1vcnlDb250ZXh0LAorCQkJCQkJCQkJCQkJCSJwZ19wbGFuX2Fkdmlj ZSIsCisJCQkJCQkJCQkJCQkJQUxMT0NTRVRfREVGQVVMVF9TSVpFUyk7CisKKwlyZXR1cm4gcGdw YV9tZW1vcnlfY29udGV4dDsKK30KKworLyoKKyAqIEdldCBhIHBvaW50ZXIgdG8gb3VyIHNoYXJl ZCBzdGF0ZS4KKyAqCisgKiBJZiBubyBzaGFyZWQgc3RhdGUgZXhpc3RzLCBjcmVhdGUgYW5kIGlu aXRpYWxpemUgaXQuIElmIGl0IGRvZXMgZXhpc3QgYnV0CisgKiB0aGlzIGJhY2tlbmQgaGFzIG5v dCB5ZXQgYWNjZXNzZWQgaXQsIGF0dGFjaCB0byBpdC4gT3RoZXJ3aXNlLCBqdXN0IHJldHVybgor ICogb3VyIGNhY2hlZCBwb2ludGVyLgorICoKKyAqIEFsb25nIHRoZSB3YXksIG1ha2Ugc3VyZSB0 aGUgcmVsZXZhbnQgTFdMb2NrIHRyYW5jaGVzIGFyZSByZWdpc3RlcmVkLgorICovCitwZ3BhX3No YXJlZF9zdGF0ZSAqCitwZ19wbGFuX2FkdmljZV9hdHRhY2godm9pZCkKK3sKKwlpZiAocGdwYV9z dGF0ZSA9PSBOVUxMKQorCXsKKwkJYm9vbAkJZm91bmQ7CisKKwkJcGdwYV9zdGF0ZSA9CisJCQlH ZXROYW1lZERTTVNlZ21lbnQoInBnX3BsYW5fYWR2aWNlIiwgc2l6ZW9mKHBncGFfc2hhcmVkX3N0 YXRlKSwKKwkJCQkJCQkgICBwZ3BhX2luaXRfc2hhcmVkX3N0YXRlLCAmZm91bmQsIE5VTEwpOwor CX0KKworCXJldHVybiBwZ3BhX3N0YXRlOworfQorCisvKgorICogUmV0dXJuIGEgcG9pbnRlciB0 byBwZ19wbGFuX2FkdmljZSdzIERTQSBhcmVhLCBjcmVhdGluZyBpdCBpZiBuZWVkZWQuCisgKi8K K2RzYV9hcmVhICoKK3BnX3BsYW5fYWR2aWNlX2RzYV9hcmVhKHZvaWQpCit7CisJaWYgKHBncGFf ZHNhX2FyZWEgPT0gTlVMTCkKKwl7CisJCXBncGFfc2hhcmVkX3N0YXRlICpzdGF0ZSA9IHBnX3Bs YW5fYWR2aWNlX2F0dGFjaCgpOworCQlkc2FfaGFuZGxlCWFyZWFfaGFuZGxlOworCQlNZW1vcnlD b250ZXh0IG9sZGNvbnRleHQ7CisKKwkJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hU byhwZ19wbGFuX2FkdmljZV9nZXRfbWN4dCgpKTsKKworCQlMV0xvY2tBY3F1aXJlKCZzdGF0ZS0+ bG9jaywgTFdfRVhDTFVTSVZFKTsKKwkJYXJlYV9oYW5kbGUgPSBzdGF0ZS0+YXJlYTsKKwkJaWYg KGFyZWFfaGFuZGxlID09IERTQV9IQU5ETEVfSU5WQUxJRCkKKwkJeworCQkJcGdwYV9kc2FfYXJl YSA9IGRzYV9jcmVhdGUoc3RhdGUtPmRzYV90cmFuY2hlKTsKKwkJCWRzYV9waW4ocGdwYV9kc2Ff YXJlYSk7CisJCQlzdGF0ZS0+YXJlYSA9IGRzYV9nZXRfaGFuZGxlKHBncGFfZHNhX2FyZWEpOwor CQkJTFdMb2NrUmVsZWFzZSgmc3RhdGUtPmxvY2spOworCQl9CisJCWVsc2UKKwkJeworCQkJTFdM b2NrUmVsZWFzZSgmc3RhdGUtPmxvY2spOworCQkJcGdwYV9kc2FfYXJlYSA9IGRzYV9hdHRhY2go YXJlYV9oYW5kbGUpOworCQl9CisKKwkJZHNhX3Bpbl9tYXBwaW5nKHBncGFfZHNhX2FyZWEpOwor CisJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKKwl9CisKKwlyZXR1cm4gcGdw YV9kc2FfYXJlYTsKK30KKworLyoKKyAqIFdhcyB0aGUgUExBTl9BRFZJQ0Ugb3B0aW9uIHNwZWNp ZmllZCBhbmQgbm90IHNldCB0byBmYWxzZT8KKyAqLworYm9vbAorcGdfcGxhbl9hZHZpY2Vfc2hv dWxkX2V4cGxhaW4oRXhwbGFpblN0YXRlICplcykKK3sKKwlib29sCSAgICpwbGFuX2FkdmljZSA9 IE5VTEw7CisKKwlpZiAoZXMgIT0gTlVMTCkKKwkJcGxhbl9hZHZpY2UgPSBHZXRFeHBsYWluRXh0 ZW5zaW9uU3RhdGUoZXMsIGVzX2V4dGVuc2lvbl9pZCk7CisJcmV0dXJuIHBsYW5fYWR2aWNlICE9 IE5VTEwgJiYgKnBsYW5fYWR2aWNlOworfQorCisvKgorICogR2V0IHRoZSBhZHZpY2UgdGhhdCBz aG91bGQgYmUgdXNlZCB3aGlsZSBwbGFubmluZyBhIHBhcnRpY3VsYXIgcXVlcnkuCisgKi8KK2No YXIgKgorcGdfcGxhbl9hZHZpY2VfZ2V0X3N1cHBsaWVkX3F1ZXJ5X2FkdmljZShQbGFubmVyR2xv YmFsICpnbG9iLAorCQkJCQkJCQkJCSBRdWVyeSAqcGFyc2UsCisJCQkJCQkJCQkJIGNvbnN0IGNo YXIgKnF1ZXJ5X3N0cmluZywKKwkJCQkJCQkJCQkgaW50IGN1cnNvck9wdGlvbnMsCisJCQkJCQkJ CQkJIEV4cGxhaW5TdGF0ZSAqZXMpCit7CisJTGlzdENlbGwgICAqbGM7CisKKwkvKgorCSAqIElm IGFueSBhZHZpc29ycyBhcmUgbG9hZGVkLCBjb25zdWx0IHRoZW0uIFRoZSBmaXJzdCBvbmUgdGhh dCBwcm9kdWNlcyBhCisJICogbm9uLU5VTEwgc3RyaW5nIHdpbnMuCisJICovCisJZm9yZWFjaChs YywgYWR2aXNvcl9ob29rX2xpc3QpCisJeworCQlwZ19wbGFuX2FkdmljZV9hZHZpc29yX2hvb2sg aG9vayA9IGxmaXJzdChsYyk7CisJCWNoYXIJICAgKmFkdmljZV9zdHJpbmc7CisKKwkJYWR2aWNl X3N0cmluZyA9ICgqaG9vaykgKGdsb2IsIHBhcnNlLCBxdWVyeV9zdHJpbmcsIGN1cnNvck9wdGlv bnMsIGVzKTsKKwkJaWYgKGFkdmljZV9zdHJpbmcgIT0gTlVMTCkKKwkJCXJldHVybiBhZHZpY2Vf c3RyaW5nOworCX0KKworCS8qIE90aGVyd2lzZSwganVzdCB1c2UgdGhlIHZhbHVlIG9mIHRoZSBH VUMuICovCisJcmV0dXJuIHBnX3BsYW5fYWR2aWNlX2FkdmljZTsKK30KKworLyoKKyAqIEFkZCBh biBhZHZpc29yLCB3aGljaCBjYW4gc3VwcGx5IGFkdmljZSBzdHJpbmdzIHRvIGJlIHVzZWQgZHVy aW5nIGZ1dHVyZQorICogcXVlcnkgcGxhbm5pbmcgb3BlcmF0aW9ucy4KKyAqCisgKiBUaGUgYWR2 aXNvciBzaG91bGQgcmV0dXJuIE5VTEwgaWYgaXQgaGFzIG5vIGFkdmljZSBzdHJpbmcgdG8gb2Zm ZXIgZm9yIGEKKyAqIGdpdmVuIHF1ZXJ5LiBJZiBtdWx0aXBsZSBhZHZpc29ycyBhcmUgYWRkZWQs IHRoZXkgd2lsbCBiZSBjb25zdWx0ZWQgaW4gdGhlCisgKiBvcmRlciBhZGRlZCB1bnRpbCBvbmUg b2YgdGhlbSByZXR1cm5zIGEgbm9uLU5VTEwgdmFsdWUuCisgKi8KK3ZvaWQKK3BnX3BsYW5fYWR2 aWNlX2FkZF9hZHZpc29yKHBnX3BsYW5fYWR2aWNlX2Fkdmlzb3JfaG9vayBob29rKQoreworCU1l bW9yeUNvbnRleHQgb2xkY29udGV4dDsKKworCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dp dGNoVG8ocGdfcGxhbl9hZHZpY2VfZ2V0X21jeHQoKSk7CisJYWR2aXNvcl9ob29rX2xpc3QgPSBs YXBwZW5kKGFkdmlzb3JfaG9va19saXN0LCBob29rKTsKKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8o b2xkY29udGV4dCk7Cit9CisKKy8qCisgKiBSZW1vdmUgYW4gYWR2aXNvci4KKyAqLwordm9pZAor cGdfcGxhbl9hZHZpY2VfcmVtb3ZlX2Fkdmlzb3IocGdfcGxhbl9hZHZpY2VfYWR2aXNvcl9ob29r IGhvb2spCit7CisJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OworCisJb2xkY29udGV4dCA9IE1l bW9yeUNvbnRleHRTd2l0Y2hUbyhwZ19wbGFuX2FkdmljZV9nZXRfbWN4dCgpKTsKKwlhZHZpc29y X2hvb2tfbGlzdCA9IGxpc3RfZGVsZXRlX3B0cihhZHZpc29yX2hvb2tfbGlzdCwgaG9vayk7CisJ TWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOworfQorCisvKgorICogSGFuZGxlciBm b3IgRVhQTEFJTiAoUExBTl9BRFZJQ0UpLgorICovCitzdGF0aWMgdm9pZAorcGdfcGxhbl9hZHZp Y2VfZXhwbGFpbl9vcHRpb25faGFuZGxlcihFeHBsYWluU3RhdGUgKmVzLCBEZWZFbGVtICpvcHQs CisJCQkJCQkJCQkgIFBhcnNlU3RhdGUgKnBzdGF0ZSkKK3sKKwlib29sCSAgICpwbGFuX2Fkdmlj ZTsKKworCXBsYW5fYWR2aWNlID0gR2V0RXhwbGFpbkV4dGVuc2lvblN0YXRlKGVzLCBlc19leHRl bnNpb25faWQpOworCisJaWYgKHBsYW5fYWR2aWNlID09IE5VTEwpCisJeworCQlwbGFuX2Fkdmlj ZSA9IHBhbGxvYzBfb2JqZWN0KGJvb2wpOworCQlTZXRFeHBsYWluRXh0ZW5zaW9uU3RhdGUoZXMs IGVzX2V4dGVuc2lvbl9pZCwgcGxhbl9hZHZpY2UpOworCX0KKworCSpwbGFuX2FkdmljZSA9IGRl ZkdldEJvb2xlYW4ob3B0KTsKK30KKworLyoKKyAqIERpc3BsYXkgYSBzdHJpbmcgdGhhdCBpcyBs aWtlbHkgdG8gY29uc2lzdCBvZiBtdWx0aXBsZSBsaW5lcyBpbiBFWFBMQUlOCisgKiBvdXRwdXQu CisgKi8KK3N0YXRpYyB2b2lkCitwZ19wbGFuX2FkdmljZV9leHBsYWluX3RleHRfbXVsdGlsaW5l KEV4cGxhaW5TdGF0ZSAqZXMsIGNoYXIgKnFsYWJlbCwKKwkJCQkJCQkJCSAgY2hhciAqdmFsdWUp Cit7CisJY2hhcgkgICAqczsKKworCS8qIEZvciBub24tdGV4dCBmb3JtYXRzLCBpdCdzIGJlc3Qg bm90IHRvIGFkZCBhbnkgc3BlY2lhbCBoYW5kbGluZy4gKi8KKwlpZiAoZXMtPmZvcm1hdCAhPSBF WFBMQUlOX0ZPUk1BVF9URVhUKQorCXsKKwkJRXhwbGFpblByb3BlcnR5VGV4dChxbGFiZWwsIHZh bHVlLCBlcyk7CisJCXJldHVybjsKKwl9CisKKwkvKiBJbiB0ZXh0IGZvcm1hdCwgaWYgdGhlcmUg aXMgbm8gZGF0YSwgZGlzcGxheSBub3RoaW5nLiAqLworCWlmICgqdmFsdWUgPT0gJ1wwJykKKwkJ cmV0dXJuOworCisJLyoKKwkgKiBJdCBsb29rcyBuaWNlc3QgdG8gaW5kZW50IGVhY2ggbGluZSBv ZiB0aGUgYWR2aWNlIHNlcGFyYXRlbHksIGJlZ2lubmluZworCSAqIG9uIHRoZSBsaW5lIGJlbG93 IHRoZSBsYWJlbC4KKwkgKi8KKwlFeHBsYWluSW5kZW50VGV4dChlcyk7CisJYXBwZW5kU3RyaW5n SW5mbyhlcy0+c3RyLCAiJXM6XG4iLCBxbGFiZWwpOworCWVzLT5pbmRlbnQrKzsKKwl3aGlsZSAo KHMgPSBzdHJjaHIodmFsdWUsICdcbicpKSAhPSBOVUxMKQorCXsKKwkJRXhwbGFpbkluZGVudFRl eHQoZXMpOworCQlhcHBlbmRCaW5hcnlTdHJpbmdJbmZvKGVzLT5zdHIsIHZhbHVlLCAocyAtIHZh bHVlKSArIDEpOworCQl2YWx1ZSA9IHMgKyAxOworCX0KKworCS8qIERvbid0IGludGVycHJldCBh IHRlcm1pbmFsIG5ld2xpbmUgYXMgYSByZXF1ZXN0IGZvciBhbiBlbXB0eSBsaW5lLiAqLworCWlm ICgqdmFsdWUgIT0gJ1wwJykKKwl7CisJCUV4cGxhaW5JbmRlbnRUZXh0KGVzKTsKKwkJYXBwZW5k U3RyaW5nSW5mbyhlcy0+c3RyLCAiJXNcbiIsIHZhbHVlKTsKKwl9CisKKwllcy0+aW5kZW50LS07 Cit9CisKKy8qCisgKiBBZGQgYWR2aWNlIGZlZWRiYWNrIHRvIHRoZSBFWFBMQUlOIG91dHB1dC4K KyAqLworc3RhdGljIHZvaWQKK3BnX3BsYW5fYWR2aWNlX2V4cGxhaW5fZmVlZGJhY2soRXhwbGFp blN0YXRlICplcywgTGlzdCAqZmVlZGJhY2spCit7CisJU3RyaW5nSW5mb0RhdGEgYnVmOworCisJ aW5pdFN0cmluZ0luZm8oJmJ1Zik7CisJZm9yZWFjaF9ub2RlKERlZkVsZW0sIGl0ZW0sIGZlZWRi YWNrKQorCXsKKwkJaW50CQkJZmxhZ3MgPSBkZWZHZXRJbnQzMihpdGVtKTsKKworCQlhcHBlbmRT dHJpbmdJbmZvKCZidWYsICIlcyAvKiAiLCBpdGVtLT5kZWZuYW1lKTsKKwkJcGdwYV90cm92ZV9h cHBlbmRfZmxhZ3MoJmJ1ZiwgZmxhZ3MpOworCQlhcHBlbmRTdHJpbmdJbmZvKCZidWYsICIgKi9c biIpOworCX0KKworCXBnX3BsYW5fYWR2aWNlX2V4cGxhaW5fdGV4dF9tdWx0aWxpbmUoZXMsICJT dXBwbGllZCBQbGFuIEFkdmljZSIsCisJCQkJCQkJCQkJICBidWYuZGF0YSk7Cit9CisKKy8qCisg KiBBZGQgcmVsZXZhbnQgZGV0YWlscywgaWYgYW55LCB0byB0aGUgRVhQTEFJTiBvdXRwdXQgZm9y IGEgc2luZ2xlIHBsYW4uCisgKi8KK3N0YXRpYyB2b2lkCitwZ19wbGFuX2FkdmljZV9leHBsYWlu X3Blcl9wbGFuX2hvb2soUGxhbm5lZFN0bXQgKnBsYW5uZWRzdG10LAorCQkJCQkJCQkJIEludG9D bGF1c2UgKmludG8sCisJCQkJCQkJCQkgRXhwbGFpblN0YXRlICplcywKKwkJCQkJCQkJCSBjb25z dCBjaGFyICpxdWVyeVN0cmluZywKKwkJCQkJCQkJCSBQYXJhbUxpc3RJbmZvIHBhcmFtcywKKwkJ CQkJCQkJCSBRdWVyeUVudmlyb25tZW50ICpxdWVyeUVudikKK3sKKwlib29sCQlzaG91bGRfZXhw bGFpbjsKKwlEZWZFbGVtICAgICpwZ3BhX2l0ZW07CisJTGlzdAkgICAqcGdwYV9saXN0OworCisJ aWYgKHByZXZfZXhwbGFpbl9wZXJfcGxhbikKKwkJcHJldl9leHBsYWluX3Blcl9wbGFuKHBsYW5u ZWRzdG10LCBpbnRvLCBlcywgcXVlcnlTdHJpbmcsIHBhcmFtcywKKwkJCQkJCQkgIHF1ZXJ5RW52 KTsKKworCS8qIFNob3VsZCBhbiBhZHZpY2Ugc3RyaW5nIGJlIHBhcnQgb2YgdGhlIEVYUExBSU4g b3V0cHV0PyAqLworCXNob3VsZF9leHBsYWluID0gcGdfcGxhbl9hZHZpY2Vfc2hvdWxkX2V4cGxh aW4oZXMpOworCisJLyogRmluZCBhbnkgZGF0YSBwZ3BhX3BsYW5uZXJfc2h1dGRvd24gc3Rhc2hl ZCBpbiB0aGUgUGxhbm5lZFN0bXQuICovCisJcGdwYV9pdGVtID0gZmluZF9kZWZlbGVtX2J5X2Rl Zm5hbWUocGxhbm5lZHN0bXQtPmV4dGVuc2lvbl9zdGF0ZSwKKwkJCQkJCQkJCQkicGdfcGxhbl9h ZHZpY2UiKTsKKwlwZ3BhX2xpc3QgPSBwZ3BhX2l0ZW0gPT0gTlVMTCA/IE5VTEwgOiAoTGlzdCAq KSBwZ3BhX2l0ZW0tPmFyZzsKKworCS8qCisJICogQnkgZGVmYXVsdCwgaWYgdGhlcmUgaXMgYSBy ZWNvcmQgb2YgYXR0ZW1wdGluZyB0byBhcHBseSBhZHZpY2UgZHVyaW5nCisJICogcXVlcnkgcGxh bm5pbmcsIHdlIGFsd2F5cyBvdXRwdXQgdGhhdCBpbmZvcm1hdGlvbiwgYnV0IHRoZSB1c2VyIGNh biBzZXQKKwkgKiBwZ19wbGFuX2FkdmljZS5hbHdheXNfZXhwbGFpbl9zdXBwbGllZF9hZHZpY2Ug PSBmYWxzZSB0byBzdXBwcmVzcyB0aGF0CisJICogYmVoYXZpb3IuIElmIHRoZXkgZG8sIHdlJ2xs IG9ubHkgZGlzcGxheSBpdCB3aGVuIHRoZSBQTEFOX0FEVklDRSBvcHRpb24KKwkgKiB3YXMgc3Bl Y2lmaWVkIGFuZCBub3Qgc2V0IHRvIGZhbHNlLgorCSAqCisJICogTkI6IElmIHdlJ3JlIGV4cGxh aW5pbmcgYSBxdWVyeSBwbGFubmVkIGJlZm9yZWhhbmQgLS0gaS5lLiBhIHByZXBhcmVkCisJICog c3RhdGVtZW50IC0tIHRoZSBhcHBsaWNhdGlvbiBvZiBxdWVyeSBhZHZpY2UgbWF5IG5vdCBoYXZl IGJlZW4KKwkgKiByZWNvcmRlZCwgYW5kIHRoZXJlZm9yZSB0aGlzIHdvbid0IGJlIGFibGUgdG8g c2hvdyBhbnl0aGluZy4gVXNlCisJICogcGdfcGxhbl9hZHZpY2UuYWx3YXlzX3N0b3JlX2Fkdmlj ZV9kZXRhaWxzID0gdHJ1ZSB0byB3b3JrIGFyb3VuZCB0aGlzLgorCSAqLworCWlmIChwZ3BhX2xp c3QgIT0gTlVMTCAmJiAocGdfcGxhbl9hZHZpY2VfYWx3YXlzX2V4cGxhaW5fc3VwcGxpZWRfYWR2 aWNlIHx8CisJCQkJCQkJICBzaG91bGRfZXhwbGFpbikpCisJeworCQlEZWZFbGVtICAgICpmZWVk YmFjazsKKworCQlmZWVkYmFjayA9IGZpbmRfZGVmZWxlbV9ieV9kZWZuYW1lKHBncGFfbGlzdCwg ImZlZWRiYWNrIik7CisJCWlmIChmZWVkYmFjayAhPSBOVUxMKQorCQkJcGdfcGxhbl9hZHZpY2Vf ZXhwbGFpbl9mZWVkYmFjayhlcywgKExpc3QgKikgZmVlZGJhY2stPmFyZyk7CisJfQorCisJLyoK KwkgKiBJZiB0aGUgUExBTl9BRFZJQ0Ugb3B0aW9uIHdhcyBzcGVjaWZpZWQgLS0gYW5kIG5vdCBz ZW50IHRvIEZBTFNFIC0tCisJICogc2hvdyBnZW5lcmF0ZWQgYWR2aWNlLgorCSAqLworCWlmIChz aG91bGRfZXhwbGFpbikKKwl7CisJCURlZkVsZW0gICAgKmFkdmljZV9zdHJpbmdfaXRlbTsKKwkJ Y2hhcgkgICAqYWR2aWNlX3N0cmluZyA9IE5VTEw7CisKKwkJYWR2aWNlX3N0cmluZ19pdGVtID0K KwkJCWZpbmRfZGVmZWxlbV9ieV9kZWZuYW1lKHBncGFfbGlzdCwgImFkdmljZV9zdHJpbmciKTsK KwkJaWYgKGFkdmljZV9zdHJpbmdfaXRlbSAhPSBOVUxMKQorCQl7CisJCQlhZHZpY2Vfc3RyaW5n ID0gc3RyVmFsKGFkdmljZV9zdHJpbmdfaXRlbS0+YXJnKTsKKwkJCXBnX3BsYW5fYWR2aWNlX2V4 cGxhaW5fdGV4dF9tdWx0aWxpbmUoZXMsICJHZW5lcmF0ZWQgUGxhbiBBZHZpY2UiLAorCQkJCQkJ CQkJCQkJICBhZHZpY2Vfc3RyaW5nKTsKKwkJfQorCX0KK30KKworLyoKKyAqIENoZWNrIGhvb2sg Zm9yIHBnX3BsYW5fYWR2aWNlLmFkdmljZQorICovCitzdGF0aWMgYm9vbAorcGdfcGxhbl9hZHZp Y2VfYWR2aWNlX2NoZWNrX2hvb2soY2hhciAqKm5ld3ZhbCwgdm9pZCAqKmV4dHJhLCBHdWNTb3Vy Y2Ugc291cmNlKQoreworCU1lbW9yeUNvbnRleHQgb2xkY29udGV4dDsKKwlNZW1vcnlDb250ZXh0 IHRtcGNvbnRleHQ7CisJY2hhcgkgICAqZXJyb3I7CisKKwlpZiAoKm5ld3ZhbCA9PSBOVUxMKQor CQlyZXR1cm4gdHJ1ZTsKKworCXRtcGNvbnRleHQgPSBBbGxvY1NldENvbnRleHRDcmVhdGUoQ3Vy cmVudE1lbW9yeUNvbnRleHQsCisJCQkJCQkJCQkgICAicGdfcGxhbl9hZHZpY2UuYWR2aWNlIiwK KwkJCQkJCQkJCSAgIEFMTE9DU0VUX0RFRkFVTFRfU0laRVMpOworCW9sZGNvbnRleHQgPSBNZW1v cnlDb250ZXh0U3dpdGNoVG8odG1wY29udGV4dCk7CisKKwkvKgorCSAqIEl0IHdvdWxkIGJlIG5p Y2UgdG8gc2F2ZSB0aGUgcGFyc2UgdHJlZSB0aGF0IHdlIGNvbnN0cnVjdCBoZXJlIGZvcgorCSAq IGV2ZW50dWFsIHVzZSB3aGVuIHBsYW5uaW5nIHdpdGggdGhpcyBhZHZpY2UsIGJ1dCAqZXh0cmEg Y2FuIG9ubHkgcG9pbnQKKwkgKiB0byBhIHNpbmdsZSBndWNfbWFsbG9jJ2QgY2h1bmssIGFuZCBv dXIgcGFyc2UgdHJlZSBpbnZvbHZlcyBhbgorCSAqIGFyYml0cmFyeSBudW1iZXIgb2YgbWVtb3J5 IGFsbG9jYXRpb25zLgorCSAqLworCSh2b2lkKSBwZ3BhX3BhcnNlKCpuZXd2YWwsICZlcnJvcik7 CisKKwlpZiAoZXJyb3IgIT0gTlVMTCkKKwl7CisJCUdVQ19jaGVja19lcnJkZXRhaWwoIkNvdWxk IG5vdCBwYXJzZSBhZHZpY2U6ICVzIiwgZXJyb3IpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJ TWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOworCU1lbW9yeUNvbnRleHREZWxldGUo dG1wY29udGV4dCk7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoKKyAqIFNlYXJjaCBhIGxpc3Qg b2YgRGVmRWxlbSBvYmplY3RzIGZvciBhIGdpdmVuIGRlZm5hbWUuCisgKi8KK3N0YXRpYyBEZWZF bGVtICoKK2ZpbmRfZGVmZWxlbV9ieV9kZWZuYW1lKExpc3QgKmRlZmxpc3QsIGNoYXIgKmRlZm5h bWUpCit7CisJZm9yZWFjaF9ub2RlKERlZkVsZW0sIGl0ZW0sIGRlZmxpc3QpCisJeworCQlpZiAo c3RyY21wKGl0ZW0tPmRlZm5hbWUsIGRlZm5hbWUpID09IDApCisJCQlyZXR1cm4gaXRlbTsKKwl9 CisKKwlyZXR1cm4gTlVMTDsKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uv cGdfcGxhbl9hZHZpY2UuY29udHJvbCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9h ZHZpY2UuY29udHJvbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYWE2 ZmRjOWU3YjIKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BnX3Bs YW5fYWR2aWNlLmNvbnRyb2wKQEAgLTAsMCArMSw1IEBACisjIHBnX3BsYW5fYWR2aWNlIGV4dGVu c2lvbgorY29tbWVudCA9ICdoZWxwIHRoZSBwbGFubmVyIGdldCB0aGUgcmlnaHQgcGxhbicKK2Rl ZmF1bHRfdmVyc2lvbiA9ICcxLjAnCittb2R1bGVfcGF0aG5hbWUgPSAnJGxpYmRpci9wZ19wbGFu X2FkdmljZScKK3JlbG9jYXRhYmxlID0gdHJ1ZQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFu X2FkdmljZS9wZ19wbGFuX2FkdmljZS5oIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ19wbGFu X2FkdmljZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4yMWY2NjA5 MmZhMgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9h ZHZpY2UuaApAQCAtMCwwICsxLDYxIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBwZ19w bGFuX2FkdmljZS5oCisgKgkgIG1haW4gaGVhZGVyIGZpbGUgZm9yIHBnX3BsYW5fYWR2aWNlIGNv bnRyaWIgbW9kdWxlCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjQsIFBvc3RncmVTUUwg R2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICoJICBjb250cmliL3BnX3BsYW5fYWR2aWNl L3BnX3BsYW5fYWR2aWNlLmgKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lmbmRlZiBQ R19QTEFOX0FEVklDRV9ICisjZGVmaW5lIFBHX1BMQU5fQURWSUNFX0gKKworI2luY2x1ZGUgImNv bW1hbmRzL2V4cGxhaW5fc3RhdGUuaCIKKyNpbmNsdWRlICJub2Rlcy9wYXRobm9kZXMuaCIKKyNp bmNsdWRlICJub2Rlcy9wbGFubm9kZXMuaCIKKyNpbmNsdWRlICJzdG9yYWdlL2x3bG9jay5oIgor I2luY2x1ZGUgInV0aWxzL2RzYS5oIgorCit0eXBlZGVmIHN0cnVjdCBwZ3BhX3NoYXJlZF9zdGF0 ZQoreworCUxXTG9jawkJbG9jazsKKwlpbnQJCQlkc2FfdHJhbmNoZTsKKwlkc2FfaGFuZGxlCWFy ZWE7CisJZHNhX3BvaW50ZXIgc2hhcmVkX2NvbGxlY3RvcjsKK30gcGdwYV9zaGFyZWRfc3RhdGU7 CisKKy8qIEhvb2sgZm9yIG90aGVyIHBsdWdpbnMgdG8gc3VwcGx5IGFkdmljZSBzdHJpbmdzICov Cit0eXBlZGVmIGNoYXIgKigqcGdfcGxhbl9hZHZpY2VfYWR2aXNvcl9ob29rKSAoUGxhbm5lckds b2JhbCAqZ2xvYiwKKwkJCQkJCQkJCQkJICBRdWVyeSAqcGFyc2UsCisJCQkJCQkJCQkJCSAgY29u c3QgY2hhciAqcXVlcnlfc3RyaW5nLAorCQkJCQkJCQkJCQkgIGludCBjdXJzb3JPcHRpb25zLAor CQkJCQkJCQkJCQkgIEV4cGxhaW5TdGF0ZSAqZXMpOworCisvKiBHVUMgdmFyaWFibGVzICovCitl eHRlcm4gY2hhciAqcGdfcGxhbl9hZHZpY2VfYWR2aWNlOworZXh0ZXJuIGJvb2wgcGdfcGxhbl9h ZHZpY2VfYWx3YXlzX3N0b3JlX2FkdmljZV9kZXRhaWxzOworZXh0ZXJuIGJvb2wgcGdfcGxhbl9h ZHZpY2VfZmVlZGJhY2tfd2FybmluZ3M7CitleHRlcm4gYm9vbCBwZ19wbGFuX2FkdmljZV9sb2Nh bF9jb2xsZWN0b3I7CitleHRlcm4gaW50CXBnX3BsYW5fYWR2aWNlX2xvY2FsX2NvbGxlY3Rpb25f bGltaXQ7CitleHRlcm4gYm9vbCBwZ19wbGFuX2FkdmljZV9zaGFyZWRfY29sbGVjdG9yOworZXh0 ZXJuIGludAlwZ19wbGFuX2FkdmljZV9zaGFyZWRfY29sbGVjdGlvbl9saW1pdDsKK2V4dGVybiBi b29sIHBnX3BsYW5fYWR2aWNlX3RyYWNlX21hc2s7CisKKy8qIEZ1bmN0aW9uIHByb3RvdHlwZXMg KGZvciB1c2UgYnkgcGdfcGxhbl9hZHZpY2UgaXRzZWxmKSAqLworZXh0ZXJuIE1lbW9yeUNvbnRl eHQgcGdfcGxhbl9hZHZpY2VfZ2V0X21jeHQodm9pZCk7CitleHRlcm4gcGdwYV9zaGFyZWRfc3Rh dGUgKnBnX3BsYW5fYWR2aWNlX2F0dGFjaCh2b2lkKTsKK2V4dGVybiBkc2FfYXJlYSAqcGdfcGxh bl9hZHZpY2VfZHNhX2FyZWEodm9pZCk7CitleHRlcm4gYm9vbCBwZ19wbGFuX2FkdmljZV9zaG91 bGRfZXhwbGFpbihFeHBsYWluU3RhdGUgKmVzKTsKK2V4dGVybiBjaGFyICpwZ19wbGFuX2Fkdmlj ZV9nZXRfc3VwcGxpZWRfcXVlcnlfYWR2aWNlKFBsYW5uZXJHbG9iYWwgKmdsb2IsCisJCQkJCQkJ CQkJCQkJICBRdWVyeSAqcGFyc2UsCisJCQkJCQkJCQkJCQkJICBjb25zdCBjaGFyICpxdWVyeV9z dHJpbmcsCisJCQkJCQkJCQkJCQkJICBpbnQgY3Vyc29yT3B0aW9ucywKKwkJCQkJCQkJCQkJCQkg IEV4cGxhaW5TdGF0ZSAqZXMpOworCisvKiBGdW5jdGlvbiBwcm90b3R5cGVzIChmb3IgdXNlIGJ5 IG90aGVyIHBsdWdpbnMpICovCitleHRlcm4gUEdETExFWFBPUlQgdm9pZCBwZ19wbGFuX2Fkdmlj ZV9hZGRfYWR2aXNvcihwZ19wbGFuX2FkdmljZV9hZHZpc29yX2hvb2sgaG9vayk7CitleHRlcm4g UEdETExFWFBPUlQgdm9pZCBwZ19wbGFuX2FkdmljZV9yZW1vdmVfYWR2aXNvcihwZ19wbGFuX2Fk dmljZV9hZHZpc29yX2hvb2sgaG9vayk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29udHJpYi9w Z19wbGFuX2FkdmljZS9wZ3BhX2FzdC5jIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2Fz dC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi44NWJkNzQ4NTlkZgot LS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9hc3QuYwpAQCAt MCwwICsxLDM1MSBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogcGdwYV9hc3QuYworICoJ ICBhZGRpdGlvbmFsIHN1cHBvcnRpbmcgY29kZSByZWxhdGVkIHRvIHBsYW4gYWR2aWNlIHBhcnNp bmcKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyNCwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2 ZWxvcG1lbnQgR3JvdXAKKyAqCisgKgkgIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9hc3Qu YworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgor CisjaW5jbHVkZSAicGdwYV9hc3QuaCIKKworI2luY2x1ZGUgImZ1bmNhcGkuaCIKKyNpbmNsdWRl ICJ1dGlscy9hcnJheS5oIgorI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCisKK3N0YXRpYyBi b29sIHBncGFfaWRlbnRpZmllcnNfY292ZXJfdGFyZ2V0KGludCBucmlkcywgcGdwYV9pZGVudGlm aWVyICpyaWRzLAorCQkJCQkJCQkJCSAgcGdwYV9hZHZpY2VfdGFyZ2V0ICp0YXJnZXQsCisJCQkJ CQkJCQkJICBib29sICpyaWRzX3VzZWQpOworCisvKgorICogR2V0IGEgQyBzdHJpbmcgdGhhdCBj b3JyZXNwb25kcyB0byB0aGUgc3BlY2lmaWVkIGFkdmljZSB0YWcuCisgKi8KK2NoYXIgKgorcGdw YV9jc3RyaW5nX2FkdmljZV90YWcocGdwYV9hZHZpY2VfdGFnX3R5cGUgYWR2aWNlX3RhZykKK3sK Kwlzd2l0Y2ggKGFkdmljZV90YWcpCisJeworCQljYXNlIFBHUEFfVEFHX0JJVE1BUF9IRUFQX1ND QU46CisJCQlyZXR1cm4gIkJJVE1BUF9IRUFQX1NDQU4iOworCQljYXNlIFBHUEFfVEFHX0ZPUkVJ R05fSk9JTjoKKwkJCXJldHVybiAiRk9SRUlHTl9KT0lOIjsKKwkJY2FzZSBQR1BBX1RBR19HQVRI RVI6CisJCQlyZXR1cm4gIkdBVEhFUiI7CisJCWNhc2UgUEdQQV9UQUdfR0FUSEVSX01FUkdFOgor CQkJcmV0dXJuICJHQVRIRVJfTUVSR0UiOworCQljYXNlIFBHUEFfVEFHX0hBU0hfSk9JTjoKKwkJ CXJldHVybiAiSEFTSF9KT0lOIjsKKwkJY2FzZSBQR1BBX1RBR19JTkRFWF9PTkxZX1NDQU46CisJ CQlyZXR1cm4gIklOREVYX09OTFlfU0NBTiI7CisJCWNhc2UgUEdQQV9UQUdfSU5ERVhfU0NBTjoK KwkJCXJldHVybiAiSU5ERVhfU0NBTiI7CisJCWNhc2UgUEdQQV9UQUdfSk9JTl9PUkRFUjoKKwkJ CXJldHVybiAiSk9JTl9PUkRFUiI7CisJCWNhc2UgUEdQQV9UQUdfTUVSR0VfSk9JTl9NQVRFUklB TElaRToKKwkJCXJldHVybiAiTUVSR0VfSk9JTl9NQVRFUklBTElaRSI7CisJCWNhc2UgUEdQQV9U QUdfTUVSR0VfSk9JTl9QTEFJTjoKKwkJCXJldHVybiAiTUVSR0VfSk9JTl9QTEFJTiI7CisJCWNh c2UgUEdQQV9UQUdfTkVTVEVEX0xPT1BfTUFURVJJQUxJWkU6CisJCQlyZXR1cm4gIk5FU1RFRF9M T09QX01BVEVSSUFMSVpFIjsKKwkJY2FzZSBQR1BBX1RBR19ORVNURURfTE9PUF9NRU1PSVpFOgor CQkJcmV0dXJuICJORVNURURfTE9PUF9NRU1PSVpFIjsKKwkJY2FzZSBQR1BBX1RBR19ORVNURURf TE9PUF9QTEFJTjoKKwkJCXJldHVybiAiTkVTVEVEX0xPT1BfUExBSU4iOworCQljYXNlIFBHUEFf VEFHX05PX0dBVEhFUjoKKwkJCXJldHVybiAiTk9fR0FUSEVSIjsKKwkJY2FzZSBQR1BBX1RBR19Q QVJUSVRJT05XSVNFOgorCQkJcmV0dXJuICJQQVJUSVRJT05XSVNFIjsKKwkJY2FzZSBQR1BBX1RB R19TRU1JSk9JTl9OT05fVU5JUVVFOgorCQkJcmV0dXJuICJTRU1JSk9JTl9OT05fVU5JUVVFIjsK KwkJY2FzZSBQR1BBX1RBR19TRU1JSk9JTl9VTklRVUU6CisJCQlyZXR1cm4gIlNFTUlKT0lOX1VO SVFVRSI7CisJCWNhc2UgUEdQQV9UQUdfU0VRX1NDQU46CisJCQlyZXR1cm4gIlNFUV9TQ0FOIjsK KwkJY2FzZSBQR1BBX1RBR19USURfU0NBTjoKKwkJCXJldHVybiAiVElEX1NDQU4iOworCX0KKwor CXBnX3VucmVhY2hhYmxlKCk7CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBDb252ZXJ0IGFu IGFkdmljZSB0YWcsIGZvcm1hdHRlZCBhcyBhIHN0cmluZyB0aGF0IGhhcyBhbHJlYWR5IGJlZW4K KyAqIGRvd25jYXNlZCBhcyBhcHByb3ByaWF0ZSwgdG8gYSBwZ3BhX2FkdmljZV90YWdfdHlwZS4K KyAqCisgKiBJZiB3ZSBzdWNjZWVkLCBzZXQgKmZhaWwgPSBmYWxzZSBhbmQgcmV0dXJuIHRoZSBy ZXN1bHQ7IGlmIHdlIGZhaWwsCisgKiBzZXQgKmZhaWwgPSB0cnVlIGFuZCByZXVybiBhbiBhcmJp dHJhcnkgdmFsdWUuCisgKi8KK3BncGFfYWR2aWNlX3RhZ190eXBlCitwZ3BhX3BhcnNlX2Fkdmlj ZV90YWcoY29uc3QgY2hhciAqdGFnLCBib29sICpmYWlsKQoreworCSpmYWlsID0gZmFsc2U7CisK Kwlzd2l0Y2ggKHRhZ1swXSkKKwl7CisJCWNhc2UgJ2InOgorCQkJaWYgKHN0cmNtcCh0YWcsICJi aXRtYXBfaGVhcF9zY2FuIikgPT0gMCkKKwkJCQlyZXR1cm4gUEdQQV9UQUdfQklUTUFQX0hFQVBf U0NBTjsKKwkJCWJyZWFrOworCQljYXNlICdmJzoKKwkJCWlmIChzdHJjbXAodGFnLCAiZm9yZWln bl9qb2luIikgPT0gMCkKKwkJCQlyZXR1cm4gUEdQQV9UQUdfRk9SRUlHTl9KT0lOOworCQkJYnJl YWs7CisJCWNhc2UgJ2cnOgorCQkJaWYgKHN0cmNtcCh0YWcsICJnYXRoZXIiKSA9PSAwKQorCQkJ CXJldHVybiBQR1BBX1RBR19HQVRIRVI7CisJCQlpZiAoc3RyY21wKHRhZywgImdhdGhlcl9tZXJn ZSIpID09IDApCisJCQkJcmV0dXJuIFBHUEFfVEFHX0dBVEhFUl9NRVJHRTsKKwkJCWJyZWFrOwor CQljYXNlICdoJzoKKwkJCWlmIChzdHJjbXAodGFnLCAiaGFzaF9qb2luIikgPT0gMCkKKwkJCQly ZXR1cm4gUEdQQV9UQUdfSEFTSF9KT0lOOworCQkJYnJlYWs7CisJCWNhc2UgJ2knOgorCQkJaWYg KHN0cmNtcCh0YWcsICJpbmRleF9zY2FuIikgPT0gMCkKKwkJCQlyZXR1cm4gUEdQQV9UQUdfSU5E RVhfU0NBTjsKKwkJCWlmIChzdHJjbXAodGFnLCAiaW5kZXhfb25seV9zY2FuIikgPT0gMCkKKwkJ CQlyZXR1cm4gUEdQQV9UQUdfSU5ERVhfT05MWV9TQ0FOOworCQkJYnJlYWs7CisJCWNhc2UgJ2on OgorCQkJaWYgKHN0cmNtcCh0YWcsICJqb2luX29yZGVyIikgPT0gMCkKKwkJCQlyZXR1cm4gUEdQ QV9UQUdfSk9JTl9PUkRFUjsKKwkJCWJyZWFrOworCQljYXNlICdtJzoKKwkJCWlmIChzdHJjbXAo dGFnLCAibWVyZ2Vfam9pbl9tYXRlcmlhbGl6ZSIpID09IDApCisJCQkJcmV0dXJuIFBHUEFfVEFH X01FUkdFX0pPSU5fTUFURVJJQUxJWkU7CisJCQlpZiAoc3RyY21wKHRhZywgIm1lcmdlX2pvaW5f cGxhaW4iKSA9PSAwKQorCQkJCXJldHVybiBQR1BBX1RBR19NRVJHRV9KT0lOX1BMQUlOOworCQkJ YnJlYWs7CisJCWNhc2UgJ24nOgorCQkJaWYgKHN0cmNtcCh0YWcsICJuZXN0ZWRfbG9vcF9tYXRl cmlhbGl6ZSIpID09IDApCisJCQkJcmV0dXJuIFBHUEFfVEFHX05FU1RFRF9MT09QX01BVEVSSUFM SVpFOworCQkJaWYgKHN0cmNtcCh0YWcsICJuZXN0ZWRfbG9vcF9tZW1vaXplIikgPT0gMCkKKwkJ CQlyZXR1cm4gUEdQQV9UQUdfTkVTVEVEX0xPT1BfTUVNT0laRTsKKwkJCWlmIChzdHJjbXAodGFn LCAibmVzdGVkX2xvb3BfcGxhaW4iKSA9PSAwKQorCQkJCXJldHVybiBQR1BBX1RBR19ORVNURURf TE9PUF9QTEFJTjsKKwkJCWlmIChzdHJjbXAodGFnLCAibm9fZ2F0aGVyIikgPT0gMCkKKwkJCQly ZXR1cm4gUEdQQV9UQUdfTk9fR0FUSEVSOworCQkJYnJlYWs7CisJCWNhc2UgJ3AnOgorCQkJaWYg KHN0cmNtcCh0YWcsICJwYXJ0aXRpb253aXNlIikgPT0gMCkKKwkJCQlyZXR1cm4gUEdQQV9UQUdf UEFSVElUSU9OV0lTRTsKKwkJCWJyZWFrOworCQljYXNlICdzJzoKKwkJCWlmIChzdHJjbXAodGFn LCAic2VtaWpvaW5fbm9uX3VuaXF1ZSIpID09IDApCisJCQkJcmV0dXJuIFBHUEFfVEFHX1NFTUlK T0lOX05PTl9VTklRVUU7CisJCQlpZiAoc3RyY21wKHRhZywgInNlbWlqb2luX3VuaXF1ZSIpID09 IDApCisJCQkJcmV0dXJuIFBHUEFfVEFHX1NFTUlKT0lOX1VOSVFVRTsKKwkJCWlmIChzdHJjbXAo dGFnLCAic2VxX3NjYW4iKSA9PSAwKQorCQkJCXJldHVybiBQR1BBX1RBR19TRVFfU0NBTjsKKwkJ CWJyZWFrOworCQljYXNlICd0JzoKKwkJCWlmIChzdHJjbXAodGFnLCAidGlkX3NjYW4iKSA9PSAw KQorCQkJCXJldHVybiBQR1BBX1RBR19USURfU0NBTjsKKwkJCWJyZWFrOworCX0KKworCS8qIGRp ZG4ndCB3b3JrIG91dCAqLworCSpmYWlsID0gdHJ1ZTsKKworCS8qIHJldHVybiBhbiBhcmJpdHJh cnkgdmFsdWUgdG8gdW53aW5kIHRoZSBjYWxsIHN0YWNrICovCisJcmV0dXJuIFBHUEFfVEFHX1NF UV9TQ0FOOworfQorCisvKgorICogRm9ybWF0IGEgcGdwYV9hZHZpY2VfdGFyZ2V0IGFzIGEgc3Ry aW5nIGFuZCBhcHBlbmQgcmVzdWx0IHRvIGEgU3RyaW5nSW5mby4KKyAqLwordm9pZAorcGdwYV9m b3JtYXRfYWR2aWNlX3RhcmdldChTdHJpbmdJbmZvIHN0ciwgcGdwYV9hZHZpY2VfdGFyZ2V0ICp0 YXJnZXQpCit7CisJaWYgKHRhcmdldC0+dHR5cGUgIT0gUEdQQV9UQVJHRVRfSURFTlRJRklFUikK Kwl7CisJCWJvb2wJCWZpcnN0ID0gdHJ1ZTsKKwkJY2hhcgkgICAqZGVsaW1zOworCisJCWlmICh0 YXJnZXQtPnR0eXBlID09IFBHUEFfVEFSR0VUX1VOT1JERVJFRF9MSVNUKQorCQkJZGVsaW1zID0g Int9IjsKKwkJZWxzZQorCQkJZGVsaW1zID0gIigpIjsKKworCQlhcHBlbmRTdHJpbmdJbmZvQ2hh cihzdHIsIGRlbGltc1swXSk7CisJCWZvcmVhY2hfcHRyKHBncGFfYWR2aWNlX3RhcmdldCwgY2hp bGRfdGFyZ2V0LCB0YXJnZXQtPmNoaWxkcmVuKQorCQl7CisJCQlpZiAoZmlyc3QpCisJCQkJZmly c3QgPSBmYWxzZTsKKwkJCWVsc2UKKwkJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihzdHIsICcgJyk7 CisJCQlwZ3BhX2Zvcm1hdF9hZHZpY2VfdGFyZ2V0KHN0ciwgY2hpbGRfdGFyZ2V0KTsKKwkJfQor CQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihzdHIsIGRlbGltc1sxXSk7CisJfQorCWVsc2UKKwl7CisJ CWNvbnN0IGNoYXIgKnJ0X2lkZW50aWZpZXI7CisKKwkJcnRfaWRlbnRpZmllciA9IHBncGFfaWRl bnRpZmllcl9zdHJpbmcoJnRhcmdldC0+cmlkKTsKKwkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhz dHIsIHJ0X2lkZW50aWZpZXIpOworCX0KK30KKworLyoKKyAqIEZvcm1hdCBhIHBncGFfaW5kZXhf dGFyZ2V0IGFzIGEgc3RyaW5nIGFuZCBhcHBlbmQgcmVzdWx0IHRvIGEgU3RyaW5nSW5mby4KKyAq Lwordm9pZAorcGdwYV9mb3JtYXRfaW5kZXhfdGFyZ2V0KFN0cmluZ0luZm8gc3RyLCBwZ3BhX2lu ZGV4X3RhcmdldCAqaXRhcmdldCkKK3sKKwlpZiAoaXRhcmdldC0+aW5kbmFtZXNwYWNlICE9IE5V TEwpCisJCWFwcGVuZFN0cmluZ0luZm8oc3RyLCAiJXMuIiwKKwkJCQkJCSBxdW90ZV9pZGVudGlm aWVyKGl0YXJnZXQtPmluZG5hbWVzcGFjZSkpOworCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoc3Ry LCBxdW90ZV9pZGVudGlmaWVyKGl0YXJnZXQtPmluZG5hbWUpKTsKK30KKworLyoKKyAqIERldGVy bWluZSB3aGV0aGVyIHR3byBwZ3BhX2luZGV4X3RhcmdldCBvYmplY3RzIGFyZSBleGFjdGx5IGlk ZW50aWNhbC4KKyAqLworYm9vbAorcGdwYV9pbmRleF90YXJnZXRzX2VxdWFsKHBncGFfaW5kZXhf dGFyZ2V0ICppMSwgcGdwYV9pbmRleF90YXJnZXQgKmkyKQoreworCS8qIGluZG5hbWVzcGFjZSBj YW4gYmUgTlVMTCwgYW5kIHR3byBOVUxMIHZhbHVlcyBhcmUgZXF1YWwgKi8KKwlpZiAoKGkxLT5p bmRuYW1lc3BhY2UgIT0gTlVMTCB8fCBpMi0+aW5kbmFtZXNwYWNlICE9IE5VTEwpICYmCisJCShp MS0+aW5kbmFtZXNwYWNlID09IE5VTEwgfHwgaTItPmluZG5hbWVzcGFjZSA9PSBOVUxMIHx8CisJ CSBzdHJjbXAoaTEtPmluZG5hbWVzcGFjZSwgaTItPmluZG5hbWVzcGFjZSkgIT0gMCkpCisJCXJl dHVybiBmYWxzZTsKKwlpZiAoc3RyY21wKGkxLT5pbmRuYW1lLCBpMi0+aW5kbmFtZSkgIT0gMCkK KwkJcmV0dXJuIGZhbHNlOworCisJcmV0dXJuIHRydWU7Cit9CisKKy8qCisgKiBDaGVjayB3aGV0 aGVyIGFuIGlkZW50aWZpZXIgbWF0Y2hlcyBhbiBhbnkgcGFydCBvZiBhbiBhZHZpY2UgdGFyZ2V0 LgorICovCitib29sCitwZ3BhX2lkZW50aWZpZXJfbWF0Y2hlc190YXJnZXQocGdwYV9pZGVudGlm aWVyICpyaWQsIHBncGFfYWR2aWNlX3RhcmdldCAqdGFyZ2V0KQoreworCS8qIEZvciBub24taWRl bnRpZmllcnMsIGNoZWNrIGFsbCBkZXNjZW5kZW50cy4gKi8KKwlpZiAodGFyZ2V0LT50dHlwZSAh PSBQR1BBX1RBUkdFVF9JREVOVElGSUVSKQorCXsKKwkJZm9yZWFjaF9wdHIocGdwYV9hZHZpY2Vf dGFyZ2V0LCBjaGlsZF90YXJnZXQsIHRhcmdldC0+Y2hpbGRyZW4pCisJCXsKKwkJCWlmIChwZ3Bh X2lkZW50aWZpZXJfbWF0Y2hlc190YXJnZXQocmlkLCBjaGlsZF90YXJnZXQpKQorCQkJCXJldHVy biB0cnVlOworCQl9CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwkvKiBTdHJhaWdodGZvcndhcmQg Y29tcGFyaXNvbnMgb2YgYWxpYXMgbmFtZSBhbmQgb2NjY3VycmVuY2UgbnVtYmVyLiAqLworCWlm IChzdHJjbXAocmlkLT5hbGlhc19uYW1lLCB0YXJnZXQtPnJpZC5hbGlhc19uYW1lKSAhPSAwKQor CQlyZXR1cm4gZmFsc2U7CisJaWYgKHJpZC0+b2NjdXJyZW5jZSAhPSB0YXJnZXQtPnJpZC5vY2N1 cnJlbmNlKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKgorCSAqIElmIGEgcmVsYXRpb24gaWRlbnRp ZmVyIG1lbnRpb25zIGEgcGFydGl0aW9uIG5hbWUsIGl0IHNob3VsZCBhbHNvCisJICogc3BlY2lm eSBhIHBhcnRpdGlvbiBzY2hlbWEuIEJ1dCB0aGUgdGFyZ2V0IG1heSBsZWF2ZSB0aGUgc2NoZW1h IE5VTEwgdG8KKwkgKiBtYXRjaCBhbnl0aGluZy4KKwkgKi8KKwlBc3NlcnQocmlkLT5wYXJ0bnNw ICE9IE5VTEwgfHwgcmlkLT5wYXJ0cmVsID09IE5VTEwpOworCWlmIChyaWQtPnBhcnRuc3AgIT0g TlVMTCAmJiB0YXJnZXQtPnJpZC5wYXJ0bnNwICE9IE5VTEwgJiYKKwkJc3RyY21wKHJpZC0+cGFy dG5zcCwgdGFyZ2V0LT5yaWQucGFydG5zcCkgIT0gMCkKKwkJcmV0dXJuIGZhbHNlOworCisJLyoK KwkgKiBUaGVzZSBmaWVsZHMgY2FuIGJlIE5VTEwgb24gZWl0aGVyIHNpZGUsIGJ1dCBOVUxMIG9u bHkgbWF0Y2hlcyBhbm90aGVyCisJICogTlVMTC4KKwkgKi8KKwlpZiAoIXN0cmluZ3NfZXF1YWxf b3JfYm90aF9udWxsKHJpZC0+cGFydHJlbCwgdGFyZ2V0LT5yaWQucGFydHJlbCkpCisJCXJldHVy biBmYWxzZTsKKwlpZiAoIXN0cmluZ3NfZXF1YWxfb3JfYm90aF9udWxsKHJpZC0+cGxhbl9uYW1l LCB0YXJnZXQtPnJpZC5wbGFuX25hbWUpKQorCQlyZXR1cm4gZmFsc2U7CisKKwlyZXR1cm4gdHJ1 ZTsKK30KKworLyoKKyAqIE1hdGNoIGlkZW50aWZpZXJzIHRvIGFkdmljZSB0YXJnZXRzIGFuZCBy ZXR1cm4gYW4gZW51bSB2YWx1ZSBpbmRpY2F0aW5nCisgKiB0aGUgcmVsYXRpb25zaGlwIGJldHdl ZW4gdGhlIHNldCBvZiBrZXlzIGFuZCB0aGUgc2V0IG9mIHRhcmdldHMuCisgKgorICogU2VlIHRo ZSBjb21tZW50cyBmb3IgcGdwYV9pdG1fdHlwZS4KKyAqLworcGdwYV9pdG1fdHlwZQorcGdwYV9p ZGVudGlmaWVyc19tYXRjaF90YXJnZXQoaW50IG5yaWRzLCBwZ3BhX2lkZW50aWZpZXIgKnJpZHMs CisJCQkJCQkJICBwZ3BhX2FkdmljZV90YXJnZXQgKnRhcmdldCkKK3sKKwlib29sCQlhbGxfcmlk c191c2VkID0gdHJ1ZTsKKwlib29sCQlhbnlfcmlkc191c2VkID0gZmFsc2U7CisJYm9vbAkJYWxs X3RhcmdldHNfdXNlZDsKKwlib29sCSAgICpyaWRzX3VzZWQgPSBwYWxsb2MwX2FycmF5KGJvb2ws IG5yaWRzKTsKKworCWFsbF90YXJnZXRzX3VzZWQgPQorCQlwZ3BhX2lkZW50aWZpZXJzX2NvdmVy X3RhcmdldChucmlkcywgcmlkcywgdGFyZ2V0LCByaWRzX3VzZWQpOworCisJZm9yIChpbnQgaSA9 IDA7IGkgPCBucmlkczsgKytpKQorCXsKKwkJaWYgKHJpZHNfdXNlZFtpXSkKKwkJCWFueV9yaWRz X3VzZWQgPSB0cnVlOworCQllbHNlCisJCQlhbGxfcmlkc191c2VkID0gZmFsc2U7CisJfQorCisJ aWYgKGFsbF9yaWRzX3VzZWQpCisJeworCQlpZiAoYWxsX3RhcmdldHNfdXNlZCkKKwkJCXJldHVy biBQR1BBX0lUTV9FUVVBTDsKKwkJZWxzZQorCQkJcmV0dXJuIFBHUEFfSVRNX0tFWVNfQVJFX1NV QlNFVDsKKwl9CisJZWxzZQorCXsKKwkJaWYgKGFsbF90YXJnZXRzX3VzZWQpCisJCQlyZXR1cm4g UEdQQV9JVE1fVEFSR0VUU19BUkVfU1VCU0VUOworCQllbHNlIGlmIChhbnlfcmlkc191c2VkKQor CQkJcmV0dXJuIFBHUEFfSVRNX0lOVEVSU0VDVElORzsKKwkJZWxzZQorCQkJcmV0dXJuIFBHUEFf SVRNX0RJU0pPSU5UOworCX0KK30KKworLyoKKyAqIFJldHVybnMgdHJ1ZSBpZiBldmVyeSB0YXJn ZXQgb3Igc3ViLXRhcmdldCBpcyBtYXRjaGVkIGJ5IGF0IGxlYXN0IG9uZQorICogaWRlbnRpZmll ciwgYW5kIG90aGVyd2lzZSBmYWxzZS4KKyAqCisgKiBBbHNvIHNldHMgcmlkc191c2VkW2ldID0g dHJ1ZSBmb3IgZWFjaCBpZGVuaWZpZXIgdGhhdCBtYXRjaGVzIGF0IGxlYXN0IG9uZQorICogdGFy Z2V0LgorICovCitzdGF0aWMgYm9vbAorcGdwYV9pZGVudGlmaWVyc19jb3Zlcl90YXJnZXQoaW50 IG5yaWRzLCBwZ3BhX2lkZW50aWZpZXIgKnJpZHMsCisJCQkJCQkJICBwZ3BhX2FkdmljZV90YXJn ZXQgKnRhcmdldCwgYm9vbCAqcmlkc191c2VkKQoreworCWJvb2wJCXJlc3VsdCA9IGZhbHNlOwor CisJaWYgKHRhcmdldC0+dHR5cGUgIT0gUEdQQV9UQVJHRVRfSURFTlRJRklFUikKKwl7CisJCXJl c3VsdCA9IHRydWU7CisKKwkJZm9yZWFjaF9wdHIocGdwYV9hZHZpY2VfdGFyZ2V0LCBjaGlsZF90 YXJnZXQsIHRhcmdldC0+Y2hpbGRyZW4pCisJCXsKKwkJCWlmICghcGdwYV9pZGVudGlmaWVyc19j b3Zlcl90YXJnZXQobnJpZHMsIHJpZHMsIGNoaWxkX3RhcmdldCwKKwkJCQkJCQkJCQkJICAgcmlk c191c2VkKSkKKwkJCQlyZXN1bHQgPSBmYWxzZTsKKwkJfQorCX0KKwllbHNlCisJeworCQlmb3Ig KGludCBpID0gMDsgaSA8IG5yaWRzOyArK2kpCisJCXsKKwkJCWlmIChwZ3BhX2lkZW50aWZpZXJf bWF0Y2hlc190YXJnZXQoJnJpZHNbaV0sIHRhcmdldCkpCisJCQl7CisJCQkJcmlkc191c2VkW2ld ID0gdHJ1ZTsKKwkJCQlyZXN1bHQgPSB0cnVlOworCQkJfQorCQl9CisJfQorCisJcmV0dXJuIHJl c3VsdDsKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9hc3QuaCBi L2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9hc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwMC4uNWQzZjhkNThhNzEKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmli L3BnX3BsYW5fYWR2aWNlL3BncGFfYXN0LmgKQEAgLTAsMCArMSwxODUgQEAKKy8qLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorICoKKyAqIHBncGFfYXN0LmgKKyAqCSAgYWJzdHJhY3Qgc3ludGF4IHRyZWVzIGZv ciBwbGFuIGFkdmljZSwgcGx1cyBwYXJzZXIvc2Nhbm5lciBzdXBwb3J0CisgKgorICogQ29weXJp Z2h0IChjKSAyMDE2LTIwMjQsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisg KgorICoJICBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfYXN0LmgKKyAqCisgKi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyAqLworI2lmbmRlZiBQR1BBX0FTVF9ICisjZGVmaW5lIFBHUEFfQVNUX0gKKwor I2luY2x1ZGUgInBncGFfaWRlbnRpZmllci5oIgorCisjaW5jbHVkZSAibm9kZXMvcGdfbGlzdC5o IgorCisvKgorICogQWR2aWNlIGl0ZW1zIGdlbmVyYWxseSB0YWtlIHRoZSBmb3JtIFNPTUVfVEFH KGl0ZW0gWy4uLl0pLCB3aGVyZSBhbiBpdGVtCisgKiBjYW4gdGFrZSB2YXJpb3VzIGZvcm1zLiBU aGUgc2ltcGxlc3QgY2FzZSBpcyBhIHJlbGF0aW9uIGlkZW50aWZpZXIsIGJ1dAorICogc29tZSB0 YWdzIGFsbG93IHN1Ymxpc3RzLCBhbmQgSk9JTl9PUkRFUigpIGFsbG93cyBib3RoIG9yZGVyZWQg YW5kIHVub3JkZXJlZAorICogc3VibGlzdHMuCisgKi8KK3R5cGVkZWYgZW51bQoreworCVBHUEFf VEFSR0VUX0lERU5USUZJRVIsCQkvKiByZWxhdGlvbiBpZGVudGlmaWVyICovCisJUEdQQV9UQVJH RVRfT1JERVJFRF9MSVNULAkvKiAoaXRlbSAuLi4pICovCisJUEdQQV9UQVJHRVRfVU5PUkRFUkVE X0xJU1QJLyoge2l0ZW0gLi4ufSAqLworfSBwZ3BhX3RhcmdldF90eXBlOworCisvKgorICogQW4g aW5kZXggc3BlY2lmaWNhdGlvbi4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgcGdwYV9pbmRleF90YXJn ZXQKK3sKKwkvKiBJbmRleCBzY2hlbWEgYW5kIG5hbWUgKi8KKwljaGFyCSAgICppbmRuYW1lc3Bh Y2U7CisJY2hhcgkgICAqaW5kbmFtZTsKK30gcGdwYV9pbmRleF90YXJnZXQ7CisKKy8qCisgKiBB IHNpbmdsZSBpdGVtIGFib3V0IHdoaWNoIGFkdmljZSBpcyBiZWluZyBnaXZlbiwgd2hpY2ggY291 bGQgYmUgZWl0aGVyCisgKiBhIHJlbGF0aW9uIGlkZW50aWZpZXIgdGhhdCB3ZSB3YW50IHRvIGJy ZWFrIG91dCBpbnRvIGl0cyBjb25zdGl0dWVudCBmaWVsZHMsCisgKiBvciBhIHN1Ymxpc3Qgb2Yg c29tZSBraW5kLgorICovCit0eXBlZGVmIHN0cnVjdCBwZ3BhX2FkdmljZV90YXJnZXQKK3sKKwlw Z3BhX3RhcmdldF90eXBlIHR0eXBlOworCisJLyoKKwkgKiBUaGlzIGZpZWxkIGlzIG1lYW5pbmdm dWwgd2hlbiB0dHlwZSBpcyBQR1BBX1RBUkdFVF9JREVOVElGSUVSLgorCSAqCisJICogQWxsIGlk ZW50aWZpZXJzIG11c3QgaGF2ZSBhbiBhbGlhcyBuYW1lIGFuZCBhbiBvY2N1cnJlbmNlIG51bWJl cjsgdGhlCisJICogcmVtYWluaW5nIGZpZWxkcyBjYW4gYmUgTlVMTC4gTm90ZSB0aGF0IGl0J3Mg cG9zc2libGUgdG8gc3BlY2lmeSBhCisJICogcGFydGl0aW9uIG5hbWUgd2l0aG91dCBhIHBhcnRp dGlvbiBzY2hlbWEsIGJ1dCBub3QgdGhlIHJldmVyc2UuCisJICovCisJcGdwYV9pZGVudGlmaWVy IHJpZDsKKworCS8qCisJICogVGhpcyBmaWVsZCBpcyBzZXQgd2hlbiB0dHlwZSBpcyBQUEdBX1RB UkdFVF9JREVOVElGSUVSIGFuZCB0aGUgYWR2aWNlCisJICogdGFnIGlzIFBHUEFfVEFHX0lOREVY X1NDQU4gb3IgUEdQQV9UQUdfSU5ERVhfT05MWV9TQ0FOLgorCSAqLworCXBncGFfaW5kZXhfdGFy Z2V0ICppdGFyZ2V0OworCisJLyoKKwkgKiBXaGVuIHRoZSB0dHlwZSBpcyBQR1BBX1RBUkdFVF88 YW55dGhpbmc+X0xJU1QsIHRoaXMgZmllbGQgY29udGFpbnMgYQorCSAqIGxpc3Qgb2YgYWRkaXRp b25hbCBwZ3BhX2FkdmljZV90YXJnZXQgb2JqZWN0cy4gT3RoZXJ3aXNlLCBpdCBpcyB1bnVzZWQu CisJICovCisJTGlzdAkgICAqY2hpbGRyZW47Cit9IHBncGFfYWR2aWNlX3RhcmdldDsKKworLyoK KyAqIFRoZXNlIGFyZSBhbGwgdGhlIGtpbmRzIG9mIGFkdmljZSB0aGF0IHdlIGtub3cgaG93IHRv IHBhcnNlLiBJZiBhIGtleXdvcmQKKyAqIGlzIGZvdW5kIGF0IHRoZSB0b3AgbGV2ZWwsIGl0IG11 c3QgYmUgaW4gdGhpcyBsaXN0LgorICoKKyAqIElmIHlvdSBjaGFuZ2UgYW55dGhpbmcgaGVyZSwg YWxzbyB1cGRhdGUgcGdwYV9wYXJzZV9hZHZpY2VfdGFnIGFuZAorICogcGdwYV9jc3RyaW5nX2Fk dmljZV90YWcuCisgKi8KK3R5cGVkZWYgZW51bSBwZ3BhX2FkdmljZV90YWdfdHlwZQoreworCVBH UEFfVEFHX0JJVE1BUF9IRUFQX1NDQU4sCisJUEdQQV9UQUdfRk9SRUlHTl9KT0lOLAorCVBHUEFf VEFHX0dBVEhFUiwKKwlQR1BBX1RBR19HQVRIRVJfTUVSR0UsCisJUEdQQV9UQUdfSEFTSF9KT0lO LAorCVBHUEFfVEFHX0lOREVYX09OTFlfU0NBTiwKKwlQR1BBX1RBR19JTkRFWF9TQ0FOLAorCVBH UEFfVEFHX0pPSU5fT1JERVIsCisJUEdQQV9UQUdfTUVSR0VfSk9JTl9NQVRFUklBTElaRSwKKwlQ R1BBX1RBR19NRVJHRV9KT0lOX1BMQUlOLAorCVBHUEFfVEFHX05FU1RFRF9MT09QX01BVEVSSUFM SVpFLAorCVBHUEFfVEFHX05FU1RFRF9MT09QX01FTU9JWkUsCisJUEdQQV9UQUdfTkVTVEVEX0xP T1BfUExBSU4sCisJUEdQQV9UQUdfTk9fR0FUSEVSLAorCVBHUEFfVEFHX1BBUlRJVElPTldJU0Us CisJUEdQQV9UQUdfU0VNSUpPSU5fTk9OX1VOSVFVRSwKKwlQR1BBX1RBR19TRU1JSk9JTl9VTklR VUUsCisJUEdQQV9UQUdfU0VRX1NDQU4sCisJUEdQQV9UQUdfVElEX1NDQU4KK30gcGdwYV9hZHZp Y2VfdGFnX3R5cGU7CisKKy8qCisgKiBBbiBpdGVtIG9mIGFkdmljZSwgbWVhbmluZyBhIHRhZyBh bmQgdGhlIGxpc3Qgb2YgYWxsIHRhcmdldHMgdG8gd2hpY2gKKyAqIGl0IGlzIGJlaW5nIGFwcGxp ZWQuCisgKgorICogInRhcmdldHMiIGlzIGEgbGlzdCBvZiBwZ3BhX2FkdmljZV90YXJnZXQgb2Jq ZWN0cy4KKyAqCisgKiBUaGUgTGlzdCByZXR1cm5lZCBmcm9tIHBncGFfeXlwYXJzZSBpcyBsaXN0 IG9mIHBncGFfYWR2aWNlX2l0ZW0gb2JqZWN0cy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgcGdwYV9h ZHZpY2VfaXRlbQoreworCXBncGFfYWR2aWNlX3RhZ190eXBlIHRhZzsKKwlMaXN0CSAgICp0YXJn ZXRzOworfSBwZ3BhX2FkdmljZV9pdGVtOworCisvKgorICogUmVzdWx0IG9mIGNvbXBhcmluZyBh biBhcnJheSBvZiBwZ3BhX3JlbGF0aW9uX2lkZW50aWZpZXIgb2JqZWN0cyB0byBhCisgKiBwZ3Bh X2FkdmljZV90YXJnZXQuCisgKgorICogUEdQQV9JVE1fRVFVQUwgbWVhbnMgYWxsIHRhcmdldHMg YXJlIG1hdGNoZWQgYnkgc29tZSBpZGVudGlmaWVyLCBhbmQKKyAqIGFsbCBpZGVudGlmaWVycyB3 ZXJlIG1hdGNoZWQgdG8gYSB0YXJnZXQuCisgKgorICogUEdQQV9JVE1fS0VZU19BUkVfU1VCU0VU IG1lYW5zIHRoYXQgYWxsIGlkZW50aWZpZXJzIG1hdGNoZWQgdG8gYSB0YXJnZXQsCisgKiBidXQg dGhlcmUgd2VyZSBsZWZ0b3ZlciB0YXJnZXRzLiBHZW5lcmFsbHksIHRoaXMgbWVhbnMgdGhhdCB0 aGUgYWR2aWNlIGlzCisgKiBsb29raW5nIHRvIGFwcGx5IHRvIGFsbCBvZiB0aGUgcmVscyB3ZSBo YXZlIHBsdXMgc29tZSBhZGRpdGlvbmFsIG9uZXMgdGhhdAorICogd2UgZG9uJ3QgaGF2ZS4KKyAq CisgKiBQR1BBX0lUTV9UQVJHRVRTX0FSRV9TVUJTRVQgbWVhbnMgdGhhdCBhbGwgdGFyZ2V0cyBh cmUgbWF0Y2hlZCBieSBhbgorICogaWRlbnRpZmllcnMsIGJ1dCB0aGVyZSB3ZXJlIGxlZnRvdmVy IGlkZW50aWZpZXJzLiBHZW5lcmFsbHksIHRoaXMgbWVhbnMKKyAqIHRoYXQgdGhlIGFkdmljZSBp cyBsb29raW5nIHRvIGFwcGx5IHRvIHNvbWUgYnV0IG5vdCBhbGwgb2YgdGhlIHJlbHMgd2UgaGF2 ZS4KKyAqCisgKiBQR1BBX0lUTV9JTlRFUlNFQ1RJTkcgbWVhbnMgdGhhdCBzb21lIGlkZW50aWZl aXJzIGFuZCB0YXJnZXRzIHdlcmUgbWF0Y2hlZCwKKyAqIGJ1dCBuZWl0aGVyIGFsbCBpZGVudGlm aWVycyBub3IgYWxsIHRhcmdldHMgY291bGQgYmUgbWF0Y2hlZCB0byBpdGVtcyBpbgorICogdGhl IG90aGVyIHNldC4KKyAqCisgKiBQR1BBX0lUTV9ESVNKT0lOVCBtZWFucyB0aGF0IG5vIG1hdGNo ZXMgYmV0d2VlbiBpZGVudGlmZWlycyBhbmQgdGFyZ2V0cyB3ZXJlCisgKiBmb3VuZC4KKyAqLwor dHlwZWRlZiBlbnVtCit7CisJUEdQQV9JVE1fRVFVQUwsCisJUEdQQV9JVE1fS0VZU19BUkVfU1VC U0VULAorCVBHUEFfSVRNX1RBUkdFVFNfQVJFX1NVQlNFVCwKKwlQR1BBX0lUTV9JTlRFUlNFQ1RJ TkcsCisJUEdQQV9JVE1fRElTSk9JTlQKK30gcGdwYV9pdG1fdHlwZTsKKworLyogZm9yIHBncGFf c2Nhbm5lci5sIGFuZCBwZ3BhX3BhcnNlci55ICovCit1bmlvbiBZWVNUWVBFOworI2lmbmRlZiBZ WV9UWVBFREVGX1lZX1NDQU5ORVJfVAorI2RlZmluZSBZWV9UWVBFREVGX1lZX1NDQU5ORVJfVAor dHlwZWRlZiB2b2lkICp5eXNjYW5fdDsKKyNlbmRpZgorCisvKiBpbiBwZ3BhX3NjYW5uZXIubCAq LworZXh0ZXJuIGludAlwZ3BhX3l5bGV4KHVuaW9uIFlZU1RZUEUgKnl5bHZhbF9wYXJhbSwgTGlz dCAqKnJlc3VsdCwKKwkJCQkJICAgY2hhciAqKnBhcnNlX2Vycm9yX21zZ19wLCB5eXNjYW5fdCB5 eXNjYW5uZXIpOworZXh0ZXJuIHZvaWQgcGdwYV95eWVycm9yKExpc3QgKipyZXN1bHQsIGNoYXIg KipwYXJzZV9lcnJvcl9tc2dfcCwKKwkJCQkJCSB5eXNjYW5fdCB5eXNjYW5uZXIsCisJCQkJCQkg Y29uc3QgY2hhciAqbWVzc2FnZSk7CitleHRlcm4gdm9pZCBwZ3BhX3NjYW5uZXJfaW5pdChjb25z dCBjaGFyICpzdHIsIHl5c2Nhbl90ICp5eXNjYW5uZXJwKTsKK2V4dGVybiB2b2lkIHBncGFfc2Nh bm5lcl9maW5pc2goeXlzY2FuX3QgeXlzY2FubmVyKTsKKworLyogaW4gcGdwYV9wYXJzZXIueSAq LworZXh0ZXJuIGludAlwZ3BhX3l5cGFyc2UoTGlzdCAqKnJlc3VsdCwgY2hhciAqKnBhcnNlX2Vy cm9yX21zZ19wLAorCQkJCQkJIHl5c2Nhbl90IHl5c2Nhbm5lcik7CitleHRlcm4gTGlzdCAqcGdw YV9wYXJzZShjb25zdCBjaGFyICphZHZpY2Vfc3RyaW5nLCBjaGFyICoqZXJyb3JfcCk7CisKKy8q IGluIHBncGFfYXN0LmMgKi8KK2V4dGVybiBjaGFyICpwZ3BhX2NzdHJpbmdfYWR2aWNlX3RhZyhw Z3BhX2FkdmljZV90YWdfdHlwZSBhZHZpY2VfdGFnKTsKK2V4dGVybiBib29sIHBncGFfaWRlbnRp Zmllcl9tYXRjaGVzX3RhcmdldChwZ3BhX2lkZW50aWZpZXIgKnJpZCwKKwkJCQkJCQkJCQkgICBw Z3BhX2FkdmljZV90YXJnZXQgKnRhcmdldCk7CitleHRlcm4gcGdwYV9pdG1fdHlwZSBwZ3BhX2lk ZW50aWZpZXJzX21hdGNoX3RhcmdldChpbnQgbnJpZHMsCisJCQkJCQkJCQkJCQkgICBwZ3BhX2lk ZW50aWZpZXIgKnJpZHMsCisJCQkJCQkJCQkJCQkgICBwZ3BhX2FkdmljZV90YXJnZXQgKnRhcmdl dCk7CitleHRlcm4gYm9vbCBwZ3BhX2luZGV4X3RhcmdldHNfZXF1YWwocGdwYV9pbmRleF90YXJn ZXQgKmkxLAorCQkJCQkJCQkJIHBncGFfaW5kZXhfdGFyZ2V0ICppMik7CitleHRlcm4gcGdwYV9h ZHZpY2VfdGFnX3R5cGUgcGdwYV9wYXJzZV9hZHZpY2VfdGFnKGNvbnN0IGNoYXIgKnRhZywgYm9v bCAqZmFpbCk7CitleHRlcm4gdm9pZCBwZ3BhX2Zvcm1hdF9hZHZpY2VfdGFyZ2V0KFN0cmluZ0lu Zm8gc3RyLAorCQkJCQkJCQkJICBwZ3BhX2FkdmljZV90YXJnZXQgKnRhcmdldCk7CitleHRlcm4g dm9pZCBwZ3BhX2Zvcm1hdF9pbmRleF90YXJnZXQoU3RyaW5nSW5mbyBzdHIsCisJCQkJCQkJCQkg cGdwYV9pbmRleF90YXJnZXQgKml0YXJnZXQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NvbnRy aWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9jb2xsZWN0b3IuYyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZp Y2UvcGdwYV9jb2xsZWN0b3IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw MC4uYTBiMGQ3ZTE1OTQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNl L3BncGFfY29sbGVjdG9yLmMKQEAgLTAsMCArMSw2MzkgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor ICoKKyAqIHBncGFfY29sbGVjdG9yLmMKKyAqCSAgY29sbGVjdCBhZHZpY2UgaW50byBiYWNrZW5k LWxvY2FsIG9yIHNoYXJlZCBtZW1vcnkKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyNSwg UG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKgkgIGNvbnRyaWIvcGdf cGxhbl9hZHZpY2UvcGdwYV9jb2xsZWN0b3IuYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICov CisKKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAicGdfcGxhbl9hZHZpY2UuaCIK KyNpbmNsdWRlICJwZ3BhX2NvbGxlY3Rvci5oIgorCisjaW5jbHVkZSAiZGF0YXR5cGUvdGltZXN0 YW1wLmgiCisjaW5jbHVkZSAiZnVuY2FwaS5oIgorI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgorI2lu Y2x1ZGUgIm5vZGVzL3BnX2xpc3QuaCIKKyNpbmNsdWRlICJ1dGlscy9hY2wuaCIKKyNpbmNsdWRl ICJ1dGlscy9idWlsdGlucy5oIgorI2luY2x1ZGUgInV0aWxzL3RpbWVzdGFtcC5oIgorCitQR19G VU5DVElPTl9JTkZPX1YxKHBnX2NsZWFyX2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UpOworUEdfRlVO Q1RJT05fSU5GT19WMShwZ19jbGVhcl9jb2xsZWN0ZWRfc2hhcmVkX2FkdmljZSk7CitQR19GVU5D VElPTl9JTkZPX1YxKHBnX2dldF9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlKTsKK1BHX0ZVTkNUSU9O X0lORk9fVjEocGdfZ2V0X2NvbGxlY3RlZF9zaGFyZWRfYWR2aWNlKTsKKworI2RlZmluZSBBRFZJ Q0VfQ0hVTktfU0laRQkJMTAyNAorI2RlZmluZSBBRFZJQ0VfQ0hVTktfQVJSQVlfU0laRQk2NAor CisjZGVmaW5lCVBHX0dFVF9BRFZJQ0VfQ09MVU1OUwk3CisKKy8qCisgKiBBZHZpY2UgZXh0cmFj dGVkIGZyb20gb25lIHF1ZXJ5IHBsYW4sIHRvZ2V0aGVyIHdpdGggdGhlIHF1ZXJ5IHN0cmluZwor ICogYW5kIHZhcmlvdXMgb3RoZXIgaWRlbnRpZnlpbmcgZGV0YWlscy4KKyAqLwordHlwZWRlZiBz dHJ1Y3QgcGdwYV9jb2xsZWN0ZWRfYWR2aWNlCit7CisJT2lkCQkJdXNlcmlkOwkJCS8qIHVzZXIg T0lEICovCisJT2lkCQkJZGJpZDsJCQkvKiBkYXRhYmFzZSBPSUQgKi8KKwl1aW50NjQJCXF1ZXJ5 aWQ7CQkvKiBxdWVyeSBpZGVudGlmaWVyICovCisJVGltZXN0YW1wVHogdGltZXN0YW1wOwkJLyog cXVlcnkgdGltZXN0YW1wICovCisJaW50CQkJYWR2aWNlX29mZnNldDsJLyogc3RhcnQgb2YgYWR2 aWNlIGluIHRleHR1YWwgZGF0YSAqLworCWNoYXIJCXRleHR1YWxfZGF0YVtGTEVYSUJMRV9BUlJB WV9NRU1CRVJdOworfSBwZ3BhX2NvbGxlY3RlZF9hZHZpY2U7CisKKy8qCisgKiBBIGJ1bmNoIG9m IHBvaW50ZXJzIHRvIHBncGFfY29sbGVjdGVkX2FkdmljZSBvYmplY3RzLCBzdG9yZWQgaW4KKyAq IGJhY2tlbmQtbG9jYWwgbWVtb3J5LgorICovCit0eXBlZGVmIHN0cnVjdCBwZ3BhX2xvY2FsX2Fk dmljZV9jaHVuaworeworCXBncGFfY29sbGVjdGVkX2FkdmljZSAqZW50cmllc1tBRFZJQ0VfQ0hV TktfU0laRV07Cit9IHBncGFfbG9jYWxfYWR2aWNlX2NodW5rOworCisvKgorICogSW5mb3JtYXRp b24gYWJvdXQgYWxsIG9mIHRoZSBwZ3BhX2NvbGxlY3RlZF9hZHZpY2Ugb2JqZWN0cyB0aGF0IHdl J3JlCisgKiBzdG9yaW5nIGluIGxvY2FsIG1lbW9yeS4KKyAqCisgKiBXZSBhc3NpZ24gY29uc2Vj dXRpdmUgSURzLCBzdGFydGluZyBmcm9tIDAsIHRvIGVhY2ggcGdwYV9jb2xsZWN0ZWRfYWR2aWNl CisgKiBvYmplY3QgdGhhdCB3ZSBzdG9yZS4gVGhlIGFjdHVhbCBzdG9yYWdlIGlzIGFuIGFycmF5 IG9mIGNodW5rcywgd2hpY2gKKyAqIGhlbHBzIGtlZXAgbWVtY3B5KCkgb3ZlcmhlYWQgbG93IHdo ZW4gd2Ugc3RhcnQgZGlzY2FyZGluZyBvbGRlciBkYXRhLgorICovCit0eXBlZGVmIHN0cnVjdCBw Z3BhX2xvY2FsX2FkdmljZQoreworCXVpbnQ2NAkJbmV4dF9pZDsKKwl1aW50NjQJCW9sZGVzdF9p ZDsKKwl1aW50NjQJCWJhc2VfaWQ7CisJaW50CQkJY2h1bmtfYXJyYXlfYWxsb2NhdGVkX3NpemU7 CisJcGdwYV9sb2NhbF9hZHZpY2VfY2h1bmsgKipjaHVua3M7Cit9IHBncGFfbG9jYWxfYWR2aWNl OworCisvKgorICogSnVzdCBsaWtlIHBncGFfbG9jYWxfYWR2aWNlX2NodW5rLCBidXQgc3RvcmVk IGluIGEgZHluYW1pYyBzaGFyZWQgYXJlYSwKKyAqIHNvIHdlIG11c3QgdXNlIGRzYV9wb2ludGVy IGluc3RlYWQgb2YgbmF0aXZlIHBvaW50ZXJzLgorICovCit0eXBlZGVmIHN0cnVjdCBwZ3BhX3No YXJlZF9hZHZpY2VfY2h1bmsKK3sKKwlkc2FfcG9pbnRlciBlbnRyaWVzW0FEVklDRV9DSFVOS19T SVpFXTsKK30gcGdwYV9zaGFyZWRfYWR2aWNlX2NodW5rOworCisvKgorICogSnVzdCBsaWtlIHBn cGFfbG9jYWxfYWR2aWNlLCBidXQgc3RvcmVkIGluIGEgZHluYW1pYyBzaGFyZWQgYXJlYSwgc28K KyAqIHdlIG11c3QgdXNlIGRzYV9wb2ludGVyIGluc3RlYWQgb2YgbmF0aXZlIHBvaW50ZXJzLgor ICovCit0eXBlZGVmIHN0cnVjdCBwZ3BhX3NoYXJlZF9hZHZpY2UKK3sKKwl1aW50NjQJCW5leHRf aWQ7CisJdWludDY0CQlvbGRlc3RfaWQ7CisJdWludDY0CQliYXNlX2lkOworCWludAkJCWNodW5r X2FycmF5X2FsbG9jYXRlZF9zaXplOworCWRzYV9wb2ludGVyIGNodW5rczsKK30gcGdwYV9zaGFy ZWRfYWR2aWNlOworCisvKiBQb2ludGVycyB0byBsb2NhbCBhbmQgc2hhcmVkIGNvbGxlY3RvcnMg Ki8KK3N0YXRpYyBwZ3BhX2xvY2FsX2FkdmljZSAqbG9jYWxfY29sbGVjdG9yID0gTlVMTDsKK3N0 YXRpYyBwZ3BhX3NoYXJlZF9hZHZpY2UgKnNoYXJlZF9jb2xsZWN0b3IgPSBOVUxMOworCisvKiBT dGF0aWMgZnVuY3Rpb25zICovCitzdGF0aWMgcGdwYV9jb2xsZWN0ZWRfYWR2aWNlICpwZ3BhX21h a2VfY29sbGVjdGVkX2FkdmljZShPaWQgdXNlcmlkLAorCQkJCQkJCQkJCQkJCQkgT2lkIGRiaWQs CisJCQkJCQkJCQkJCQkJCSB1aW50NjQgcXVlcnlJZCwKKwkJCQkJCQkJCQkJCQkJIFRpbWVzdGFt cFR6IHRpbWVzdGFtcCwKKwkJCQkJCQkJCQkJCQkJIGNvbnN0IGNoYXIgKnF1ZXJ5X3N0cmluZywK KwkJCQkJCQkJCQkJCQkJIGNvbnN0IGNoYXIgKmFkdmljZV9zdHJpbmcsCisJCQkJCQkJCQkJCQkJ CSBkc2FfYXJlYSAqYXJlYSwKKwkJCQkJCQkJCQkJCQkJIGRzYV9wb2ludGVyICpyZXN1bHQpOwor c3RhdGljIHZvaWQgcGdwYV9zdG9yZV9sb2NhbF9hZHZpY2UocGdwYV9jb2xsZWN0ZWRfYWR2aWNl ICpjYSk7CitzdGF0aWMgdm9pZCBwZ3BhX3RyaW1fbG9jYWxfYWR2aWNlKGludCBsaW1pdCk7Citz dGF0aWMgdm9pZCBwZ3BhX3N0b3JlX3NoYXJlZF9hZHZpY2UoZHNhX3BvaW50ZXIgY2FfcG9pbnRl cik7CitzdGF0aWMgdm9pZCBwZ3BhX3RyaW1fc2hhcmVkX2FkdmljZShkc2FfYXJlYSAqYXJlYSwg aW50IGxpbWl0KTsKKworLyogSGVscGVyIGZ1bmN0aW9uIHRvIGV4dHJhY3QgdGhlIHF1ZXJ5IHN0 cmluZyBmcm9tIHBncGFfY29sbGVjdGVkX2FkdmljZSAqLworc3RhdGljIGlubGluZSBjb25zdCBj aGFyICoKK3F1ZXJ5X3N0cmluZyhwZ3BhX2NvbGxlY3RlZF9hZHZpY2UgKmNhKQoreworCXJldHVy biBjYS0+dGV4dHVhbF9kYXRhOworfQorCisvKiBIZWxwZXIgZnVuY3Rpb24gdG8gZXh0cmFjdCB0 aGUgYWR2aWNlIHN0cmluZyBmcm9tIHBncGFfY29sbGVjdGVkX2FkdmljZSAqLworc3RhdGljIGlu bGluZSBjb25zdCBjaGFyICoKK2FkdmljZV9zdHJpbmcocGdwYV9jb2xsZWN0ZWRfYWR2aWNlICpj YSkKK3sKKwlyZXR1cm4gY2EtPnRleHR1YWxfZGF0YSArIGNhLT5hZHZpY2Vfb2Zmc2V0OworfQor CisvKgorICogU3RvcmUgY29sbGVjdGVkIHF1ZXJ5IGFkdmljZSBpbnRvIHRoZSBsb2NhbCBvciBz aGFyZWQgYWR2aWNlIGNvbGxlY3RvciwKKyAqIGFzIGFwcHJvcHJpYXRlLgorICovCit2b2lkCitw Z3BhX2NvbGxlY3RfYWR2aWNlKHVpbnQ2NCBxdWVyeUlkLCBjb25zdCBjaGFyICpxdWVyeV9zdHJp bmcsCisJCQkJCWNvbnN0IGNoYXIgKmFkdmljZV9zdHJpbmcpCit7CisJT2lkCQkJdXNlcmlkID0g R2V0VXNlcklkKCk7CisJT2lkCQkJZGJpZCA9IE15RGF0YWJhc2VJZDsKKwlUaW1lc3RhbXBUeiBu b3cgPSBHZXRDdXJyZW50VGltZXN0YW1wKCk7CisKKwlpZiAocGdfcGxhbl9hZHZpY2VfbG9jYWxf Y29sbGVjdG9yICYmCisJCXBnX3BsYW5fYWR2aWNlX2xvY2FsX2NvbGxlY3Rpb25fbGltaXQgPiAw KQorCXsKKwkJcGdwYV9jb2xsZWN0ZWRfYWR2aWNlICpjYTsKKwkJTWVtb3J5Q29udGV4dCBvbGRj b250ZXh0OworCisJCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8ocGdfcGxhbl9h ZHZpY2VfZ2V0X21jeHQoKSk7CisJCWNhID0gcGdwYV9tYWtlX2NvbGxlY3RlZF9hZHZpY2UodXNl cmlkLCBkYmlkLCBxdWVyeUlkLCBub3csCisJCQkJCQkJCQkJcXVlcnlfc3RyaW5nLCBhZHZpY2Vf c3RyaW5nLAorCQkJCQkJCQkJCU5VTEwsIE5VTEwpOworCQlwZ3BhX3N0b3JlX2xvY2FsX2Fkdmlj ZShjYSk7CisJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKKwl9CisKKwlpZiAo cGdfcGxhbl9hZHZpY2Vfc2hhcmVkX2NvbGxlY3RvciAmJgorCQlwZ19wbGFuX2FkdmljZV9zaGFy ZWRfY29sbGVjdGlvbl9saW1pdCA+IDApCisJeworCQlkc2FfYXJlYSAgICphcmVhID0gcGdfcGxh bl9hZHZpY2VfZHNhX2FyZWEoKTsKKwkJZHNhX3BvaW50ZXIgY2FfcG9pbnRlciA9IEludmFsaWRE c2FQb2ludGVyOyAvKiBwbGFjYXRlIGNvbXBpbGVyICovCisKKwkJcGdwYV9tYWtlX2NvbGxlY3Rl ZF9hZHZpY2UodXNlcmlkLCBkYmlkLCBxdWVyeUlkLCBub3csCisJCQkJCQkJCSAgIHF1ZXJ5X3N0 cmluZywgYWR2aWNlX3N0cmluZywgYXJlYSwKKwkJCQkJCQkJICAgJmNhX3BvaW50ZXIpOworCQlw Z3BhX3N0b3JlX3NoYXJlZF9hZHZpY2UoY2FfcG9pbnRlcik7CisJfQorfQorCisvKgorICogQWxs b2NhdGUgYW5kIGZpbGwgYSBuZXcgcGdwYV9jb2xsZWN0ZWRfYWR2aWNlIG9iamVjdC4KKyAqCisg KiBJZiBhcmVhICE9IE5VTEwsIGl0IGlzIHVzZWQgdG8gYWxsb2NhdGUgdGhlIG5ldyBvYmplY3Qs IGFuZCB0aGUgcmVzdWx0aW5nCisgKiBkc2FfcG9pbnRlciBpcyByZXR1cm5lZCB2aWEgKnJlc3Vs dC4KKyAqCisgKiBJZiBhcmVhID09IE5VTEwsIHRoZSBuZXcgb2JqZWN0IGlzIGFsbG9jYXRlZCBp biB0aGUgY3VycmVudCBtZW1vcnkgY29udGV4dCwKKyAqIGFuZCByZXN1bHQgaXMgbm90IGV4YW1p bmVkIG9yIG1vZGlmaWVkLgorICovCitzdGF0aWMgcGdwYV9jb2xsZWN0ZWRfYWR2aWNlICoKK3Bn cGFfbWFrZV9jb2xsZWN0ZWRfYWR2aWNlKE9pZCB1c2VyaWQsIE9pZCBkYmlkLCB1aW50NjQgcXVl cnlJZCwKKwkJCQkJCSAgIFRpbWVzdGFtcFR6IHRpbWVzdGFtcCwKKwkJCQkJCSAgIGNvbnN0IGNo YXIgKnF1ZXJ5X3N0cmluZywKKwkJCQkJCSAgIGNvbnN0IGNoYXIgKmFkdmljZV9zdHJpbmcsCisJ CQkJCQkgICBkc2FfYXJlYSAqYXJlYSwgZHNhX3BvaW50ZXIgKnJlc3VsdCkKK3sKKwlzaXplX3QJ CXF1ZXJ5X3N0cmluZ19sZW5ndGggPSBzdHJsZW4ocXVlcnlfc3RyaW5nKSArIDE7CisJc2l6ZV90 CQlhZHZpY2Vfc3RyaW5nX2xlbmd0aCA9IHN0cmxlbihhZHZpY2Vfc3RyaW5nKSArIDE7CisJc2l6 ZV90CQl0b3RhbF9sZW5ndGg7CisJcGdwYV9jb2xsZWN0ZWRfYWR2aWNlICpjYTsKKworCXRvdGFs X2xlbmd0aCA9IG9mZnNldG9mKHBncGFfY29sbGVjdGVkX2FkdmljZSwgdGV4dHVhbF9kYXRhKQor CQkrIHF1ZXJ5X3N0cmluZ19sZW5ndGggKyBhZHZpY2Vfc3RyaW5nX2xlbmd0aDsKKworCWlmIChh cmVhID09IE5VTEwpCisJCWNhID0gcGFsbG9jKHRvdGFsX2xlbmd0aCk7CisJZWxzZQorCXsKKwkJ KnJlc3VsdCA9IGRzYV9hbGxvY2F0ZShhcmVhLCB0b3RhbF9sZW5ndGgpOworCQljYSA9IGRzYV9n ZXRfYWRkcmVzcyhhcmVhLCAqcmVzdWx0KTsKKwl9CisKKwljYS0+dXNlcmlkID0gdXNlcmlkOwor CWNhLT5kYmlkID0gZGJpZDsKKwljYS0+cXVlcnlpZCA9IHF1ZXJ5SWQ7CisJY2EtPnRpbWVzdGFt cCA9IHRpbWVzdGFtcDsKKwljYS0+YWR2aWNlX29mZnNldCA9IHF1ZXJ5X3N0cmluZ19sZW5ndGg7 CisKKwltZW1jcHkoY2EtPnRleHR1YWxfZGF0YSwgcXVlcnlfc3RyaW5nLCBxdWVyeV9zdHJpbmdf bGVuZ3RoKTsKKwltZW1jcHkoJmNhLT50ZXh0dWFsX2RhdGFbY2EtPmFkdmljZV9vZmZzZXRdLAor CQkgICBhZHZpY2Vfc3RyaW5nLCBhZHZpY2Vfc3RyaW5nX2xlbmd0aCk7CisKKwlyZXR1cm4gY2E7 Cit9CisKKy8qCisgKiBBZGQgYSBwZ19jb2xsZWN0ZWRfYWR2aWNlIG9iamVjdCB0byBvdXIgYmFj a2VuZC1sb2NhbCBhZHZpY2UgY29sbGVjdGlvbi4KKyAqCisgKiBDYWxsZXIgaXMgcmVzcG9uc2li bGUgZm9yIHN3aXRjaGluZyB0byB0aGUgYXBwcm9wcmlhdGUgbWVtb3J5IGNvbnRleHQ7CisgKiB0 aGUgcHJvdmlkZWQgb2JqZWN0IHNob3VsZCBoYXZlIGJlZW4gYWxsb2NhdGVkIGluIHRoYXQgc2Ft ZSBjb250ZXh0LgorICovCitzdGF0aWMgdm9pZAorcGdwYV9zdG9yZV9sb2NhbF9hZHZpY2UocGdw YV9jb2xsZWN0ZWRfYWR2aWNlICpjYSkKK3sKKwl1aW50NjQJCWNodW5rX251bWJlcjsKKwl1aW50 NjQJCWNodW5rX29mZnNldDsKKwlwZ3BhX2xvY2FsX2FkdmljZSAqbGEgPSBsb2NhbF9jb2xsZWN0 b3I7CisKKwkvKiBJZiB0aGUgbG9jYWwgYWR2aWNlIGNvbGxlY3RvciBpc24ndCBpbml0aWFsaXpl ZCB5ZXQsIGRvIHRoYXQgbm93LiAqLworCWlmIChsYSA9PSBOVUxMKQorCXsKKwkJbGEgPSBwYWxs b2MwKHNpemVvZihwZ3BhX2xvY2FsX2FkdmljZSkpOworCQlsYS0+Y2h1bmtfYXJyYXlfYWxsb2Nh dGVkX3NpemUgPSBBRFZJQ0VfQ0hVTktfQVJSQVlfU0laRTsKKwkJbGEtPmNodW5rcyA9IHBhbGxv YzBfYXJyYXkocGdwYV9sb2NhbF9hZHZpY2VfY2h1bmsgKiwKKwkJCQkJCQkJICAgbGEtPmNodW5r X2FycmF5X2FsbG9jYXRlZF9zaXplKTsKKwkJbG9jYWxfY29sbGVjdG9yID0gbGE7CisJfQorCisJ LyogQ29tcHV0ZSBjaHVuayBhbmQgb2Zmc2V0IGF0IHdoaWNoIHRvIHN0b3JlIHRoaXMgYWR2aWNl LiAqLworCWNodW5rX251bWJlciA9IChsYS0+bmV4dF9pZCAtIGxhLT5iYXNlX2lkKSAvIEFEVklD RV9DSFVOS19TSVpFOworCWNodW5rX29mZnNldCA9IChsYS0+bmV4dF9pZCAtIGxhLT5iYXNlX2lk KSAlIEFEVklDRV9DSFVOS19TSVpFOworCisJLyogRXh0ZW5kIGNodW5rIGFycmF5LCBpZiBuZWVk ZWQuICovCisJaWYgKGNodW5rX251bWJlciA+PSBsYS0+Y2h1bmtfYXJyYXlfYWxsb2NhdGVkX3Np emUpCisJeworCQlpbnQJCQluZXdfc2l6ZTsKKworCQluZXdfc2l6ZSA9IGxhLT5jaHVua19hcnJh eV9hbGxvY2F0ZWRfc2l6ZSArIEFEVklDRV9DSFVOS19BUlJBWV9TSVpFOworCQlsYS0+Y2h1bmtz ID0gcmVwYWxsb2MwX2FycmF5KGxhLT5jaHVua3MsCisJCQkJCQkJCQkgcGdwYV9sb2NhbF9hZHZp Y2VfY2h1bmsgKiwKKwkJCQkJCQkJCSBsYS0+Y2h1bmtfYXJyYXlfYWxsb2NhdGVkX3NpemUsCisJ CQkJCQkJCQkgbmV3X3NpemUpOworCQlsYS0+Y2h1bmtfYXJyYXlfYWxsb2NhdGVkX3NpemUgPSBu ZXdfc2l6ZTsKKwl9CisKKwkvKiBBbGxvY2F0ZSBuZXcgY2h1bmssIGlmIG5lZWRlZC4gKi8KKwlp ZiAobGEtPmNodW5rc1tjaHVua19udW1iZXJdID09IE5VTEwpCisJCWxhLT5jaHVua3NbY2h1bmtf bnVtYmVyXSA9IHBhbGxvYzBfb2JqZWN0KHBncGFfbG9jYWxfYWR2aWNlX2NodW5rKTsKKworCS8q IFNhdmUgcG9pbnRlciBhbmQgYnVtcCBuZXh0LWlkIGNvdW50ZXIuICovCisJQXNzZXJ0KGxhLT5j aHVua3NbY2h1bmtfbnVtYmVyXS0+ZW50cmllc1tjaHVua19vZmZzZXRdID09IE5VTEwpOworCWxh LT5jaHVua3NbY2h1bmtfbnVtYmVyXS0+ZW50cmllc1tjaHVua19vZmZzZXRdID0gY2E7CisJKyts YS0+bmV4dF9pZDsKKworCS8qIElmIHdlJ3ZlIGV4Y2VlZGVkIHRoZSBzdG9yYWdlIGxpbWl0LCBk aXNjYXJkIG9sZCBkYXRhLiAqLworCXBncGFfdHJpbV9sb2NhbF9hZHZpY2UocGdfcGxhbl9hZHZp Y2VfbG9jYWxfY29sbGVjdGlvbl9saW1pdCk7Cit9CisKKy8qCisgKiBBZGQgYSBwZ19jb2xsZWN0 ZWRfYWR2aWNlIG9iamVjdCB0byB0aGUgc2hhcmVkIGFkdmljZSBjb2xsZWN0aW9uLgorICoKKyAq ICdjYV9wb2ludGVyJyBzaG91bGQgaGF2ZSBiZWVuIGFsbG9jYXRlZCBmcm9tIHRoZSBwZ19wbGFu X2FkdmljZSBEU0EgYXJlYQorICogYW5kIHNob3VsZCBwb2ludCB0byBhbiBvYmplY3Qgb2YgdHlw ZSBwZ3BhX2NvbGxlY3RlZF9hZHZpY2UuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX3N0b3JlX3No YXJlZF9hZHZpY2UoZHNhX3BvaW50ZXIgY2FfcG9pbnRlcikKK3sKKwl1aW50NjQJCWNodW5rX251 bWJlcjsKKwl1aW50NjQJCWNodW5rX29mZnNldDsKKwlwZ3BhX3NoYXJlZF9zdGF0ZSAqc3RhdGUg PSBwZ19wbGFuX2FkdmljZV9hdHRhY2goKTsKKwlkc2FfYXJlYSAgICphcmVhID0gcGdfcGxhbl9h ZHZpY2VfZHNhX2FyZWEoKTsKKwlwZ3BhX3NoYXJlZF9hZHZpY2UgKnNhID0gc2hhcmVkX2NvbGxl Y3RvcjsKKwlkc2FfcG9pbnRlciAqY2h1bmtfYXJyYXk7CisJcGdwYV9zaGFyZWRfYWR2aWNlX2No dW5rICpjaHVuazsKKworCS8qIExvY2sgdGhlIHNoYXJlZCBzdGF0ZS4gKi8KKwlMV0xvY2tBY3F1 aXJlKCZzdGF0ZS0+bG9jaywgTFdfRVhDTFVTSVZFKTsKKworCS8qCisJICogSWYgd2UncmUgbm90 IGF0dGFjaGVkIHRvIHRoZSBzaGFyZWQgYWR2aWNlIGNvbGxlY3RvciB5ZXQsIGZpeCB0aGF0IG5v dy4KKwkgKiBJZiB3ZSdyZSB0aGUgZmlyc3Qgb25lcyB0byBhdHRhY2gsIHdlIG1heSBuZWVkIHRv IGNyZWF0ZSB0aGUgb2JqZWN0LgorCSAqLworCWlmIChzYSA9PSBOVUxMKQorCXsKKwkJaWYgKHN0 YXRlLT5zaGFyZWRfY29sbGVjdG9yID09IEludmFsaWREc2FQb2ludGVyKQorCQkJc3RhdGUtPnNo YXJlZF9jb2xsZWN0b3IgPQorCQkJCWRzYV9hbGxvY2F0ZTAoYXJlYSwgc2l6ZW9mKHBncGFfc2hh cmVkX2FkdmljZSkpOworCQlzaGFyZWRfY29sbGVjdG9yID0gc2EgPSBkc2FfZ2V0X2FkZHJlc3Mo YXJlYSwgc3RhdGUtPnNoYXJlZF9jb2xsZWN0b3IpOworCX0KKworCS8qCisJICogSXQncyBwb3Nz aWJsZSB0aGF0IHNvbWUgb3RoZXIgYmFja2VuZCBtYXkgaGF2ZSBzdWNjZWVkZWQgaW4gY3JlYXRp bmcKKwkgKiB0aGUgbWFpbiBjb2xsZWN0b3Igb2JqZWN0IGJ1dCBmYWlsZWQgdG8gYWxsb2NhdGUg YW4gaW5pdGlhbCBjaHVuaworCSAqIGFycmF5LCBzbyB3ZSBtdXN0IGJlIHByZXBhcmVkIHRvIGFs bG9jYXRlIHRoZSBjaHVuayBhcnJheSBoZXJlIHdoZXRoZXIKKwkgKiBvciBub3Qgd2UgY3JlYXRl ZCB0aGUgY29sbGVjdG9yIG9iamVjdC4KKwkgKi8KKwlpZiAoc2hhcmVkX2NvbGxlY3Rvci0+Y2h1 bmtfYXJyYXlfYWxsb2NhdGVkX3NpemUgPT0gMCkKKwl7CisJCXNhLT5jaHVua3MgPQorCQkJZHNh X2FsbG9jYXRlMChhcmVhLAorCQkJCQkJICBzaXplb2YoZHNhX3BvaW50ZXIpICogQURWSUNFX0NI VU5LX0FSUkFZX1NJWkUpOworCQlzYS0+Y2h1bmtfYXJyYXlfYWxsb2NhdGVkX3NpemUgPSBBRFZJ Q0VfQ0hVTktfQVJSQVlfU0laRTsKKwl9CisKKwkvKiBDb21wdXRlIGNodW5rIGFuZCBvZmZzZXQg YXQgd2hpY2ggdG8gc3RvcmUgdGhpcyBhZHZpY2UuICovCisJY2h1bmtfbnVtYmVyID0gKHNhLT5u ZXh0X2lkIC0gc2EtPmJhc2VfaWQpIC8gQURWSUNFX0NIVU5LX1NJWkU7CisJY2h1bmtfb2Zmc2V0 ID0gKHNhLT5uZXh0X2lkIC0gc2EtPmJhc2VfaWQpICUgQURWSUNFX0NIVU5LX1NJWkU7CisKKwkv KiBHZXQgdGhlIGFkZHJlc3Mgb2YgdGhlIGNodW5rIGFycmF5IGFuZCwgaWYgbmVlZGVkLCBleHRl bmQgaXQuICovCisJaWYgKGNodW5rX251bWJlciA+PSBzYS0+Y2h1bmtfYXJyYXlfYWxsb2NhdGVk X3NpemUpCisJeworCQlpbnQJCQluZXdfc2l6ZTsKKwkJZHNhX3BvaW50ZXIgbmV3X2NodW5rczsK KworCQkvKgorCQkgKiBEU0EgY2FuJ3QgZW5sYXJnZSBhbiBleGlzdGluZyBhbGxvY2F0aW9uLCBz byB3ZSBtdXN0IG1ha2UgYSBuZXcKKwkJICogYWxsb2NhdGlvbiBhbmQgY29weSBkYXRhIG92ZXIu CisJCSAqLworCQluZXdfc2l6ZSA9IHNhLT5jaHVua19hcnJheV9hbGxvY2F0ZWRfc2l6ZSArIEFE VklDRV9DSFVOS19BUlJBWV9TSVpFOworCQluZXdfY2h1bmtzID0gZHNhX2FsbG9jYXRlMChhcmVh LCBzaXplb2YoZHNhX3BvaW50ZXIpICogbmV3X3NpemUpOworCQljaHVua19hcnJheSA9IGRzYV9n ZXRfYWRkcmVzcyhhcmVhLCBuZXdfY2h1bmtzKTsKKwkJbWVtY3B5KGNodW5rX2FycmF5LCBkc2Ff Z2V0X2FkZHJlc3MoYXJlYSwgc2EtPmNodW5rcyksCisJCQkgICBzaXplb2YoZHNhX3BvaW50ZXIp ICogc2EtPmNodW5rX2FycmF5X2FsbG9jYXRlZF9zaXplKTsKKwkJZHNhX2ZyZWUoYXJlYSwgc2Et PmNodW5rcyk7CisJCXNhLT5jaHVua3MgPSBuZXdfY2h1bmtzOworCQlzYS0+Y2h1bmtfYXJyYXlf YWxsb2NhdGVkX3NpemUgPSBuZXdfc2l6ZTsKKwl9CisJZWxzZQorCQljaHVua19hcnJheSA9IGRz YV9nZXRfYWRkcmVzcyhhcmVhLCBzYS0+Y2h1bmtzKTsKKworCS8qIEdldCB0aGUgYWRkcmVzcyBv ZiB0aGUgZGVzaXJlZCBjaHVuaywgYWxsb2NhdGluZyBpdCBpZiBuZWVkZWQuICovCisJaWYgKGNo dW5rX2FycmF5W2NodW5rX251bWJlcl0gPT0gSW52YWxpZERzYVBvaW50ZXIpCisJCWNodW5rX2Fy cmF5W2NodW5rX251bWJlcl0gPQorCQkJZHNhX2FsbG9jYXRlMChhcmVhLCBzaXplb2YocGdwYV9z aGFyZWRfYWR2aWNlX2NodW5rKSk7CisJY2h1bmsgPSBkc2FfZ2V0X2FkZHJlc3MoYXJlYSwgY2h1 bmtfYXJyYXlbY2h1bmtfbnVtYmVyXSk7CisKKwkvKiBTYXZlIHBvaW50ZXIgYW5kIGJ1bXAgbmV4 dC1pZCBjb3VudGVyLiAqLworCUFzc2VydChjaHVuay0+ZW50cmllc1tjaHVua19vZmZzZXRdID09 IEludmFsaWREc2FQb2ludGVyKTsKKwljaHVuay0+ZW50cmllc1tjaHVua19vZmZzZXRdID0gY2Ff cG9pbnRlcjsKKwkrK3NhLT5uZXh0X2lkOworCisJLyogSWYgd2UndmUgZXhjZWVkZWQgdGhlIHN0 b3JhZ2UgbGltaXQsIGRpc2NhcmQgb2xkIGRhdGEuICovCisJcGdwYV90cmltX3NoYXJlZF9hZHZp Y2UoYXJlYSwgcGdfcGxhbl9hZHZpY2Vfc2hhcmVkX2NvbGxlY3Rpb25fbGltaXQpOworCisJLyog UmVsZWFzZSBsb2NrIG9uIHNoYXJlZCBzdGF0ZS4gKi8KKwlMV0xvY2tSZWxlYXNlKCZzdGF0ZS0+ bG9jayk7Cit9CisKKy8qCisgKiBEaXNjYXJkIGNvbGxlY3RlZCBhZHZpY2Ugc3RvcmVkIGluIGJh Y2tlbmQtbG9jYWwgbWVtb3J5IGluIGV4Y2VzcyBvZiB0aGUKKyAqIHNwZWNpZmllZCBsaW1pdC4K KyAqLworc3RhdGljIHZvaWQKK3BncGFfdHJpbV9sb2NhbF9hZHZpY2UoaW50IGxpbWl0KQorewor CXBncGFfbG9jYWxfYWR2aWNlICpsYSA9IGxvY2FsX2NvbGxlY3RvcjsKKwl1aW50NjQJCWN1cnJl bnRfY291bnQ7CisJdWludDY0CQl0cmltX2NvdW50OworCXVpbnQ2NAkJdG90YWxfY2h1bmtfY291 bnQ7CisJdWludDY0CQl0cmltX2NodW5rX2NvdW50OworCXVpbnQ2NAkJcmVtYWluaW5nX2NodW5r X2NvdW50OworCisJLyogSWYgd2UgaGF2ZW4ndCB5ZXQgcmVhY2hlZCB0aGUgbGltaXQsIHRoZXJl J3Mgbm90aGluZyB0byBkby4gKi8KKwljdXJyZW50X2NvdW50ID0gbGEtPm5leHRfaWQgLSBsYS0+ b2xkZXN0X2lkOworCWlmIChjdXJyZW50X2NvdW50IDw9IGxpbWl0KQorCQlyZXR1cm47CisKKwkv KiBGcmVlIGVub3VnaCBlbnRyaWVzIHRvIGdldCB1cyBiYWNrIGRvd24gdG8gdGhlIGxpbWl0LiAq LworCXRyaW1fY291bnQgPSBjdXJyZW50X2NvdW50IC0gbGltaXQ7CisJd2hpbGUgKHRyaW1fY291 bnQgPiAwKQorCXsKKwkJdWludDY0CQljaHVua19udW1iZXI7CisJCXVpbnQ2NAkJY2h1bmtfb2Zm c2V0OworCisJCWNodW5rX251bWJlciA9IChsYS0+b2xkZXN0X2lkIC0gbGEtPmJhc2VfaWQpIC8g QURWSUNFX0NIVU5LX1NJWkU7CisJCWNodW5rX29mZnNldCA9IChsYS0+b2xkZXN0X2lkIC0gbGEt PmJhc2VfaWQpICUgQURWSUNFX0NIVU5LX1NJWkU7CisKKwkJQXNzZXJ0KGxhLT5jaHVua3NbY2h1 bmtfbnVtYmVyXS0+ZW50cmllc1tjaHVua19vZmZzZXRdICE9IE5VTEwpOworCQlwZnJlZShsYS0+ Y2h1bmtzW2NodW5rX251bWJlcl0tPmVudHJpZXNbY2h1bmtfb2Zmc2V0XSk7CisJCWxhLT5jaHVu a3NbY2h1bmtfbnVtYmVyXS0+ZW50cmllc1tjaHVua19vZmZzZXRdID0gTlVMTDsKKwkJKytsYS0+ b2xkZXN0X2lkOworCQktLXRyaW1fY291bnQ7CisJfQorCisJLyogRnJlZSBhbnkgY2h1bmtzIHRo YXQgYXJlIG5vdyBlbnRpcmVseSB1bnVzZWQuICovCisJdHJpbV9jaHVua19jb3VudCA9IChsYS0+ b2xkZXN0X2lkIC0gbGEtPmJhc2VfaWQpIC8gQURWSUNFX0NIVU5LX1NJWkU7CisJZm9yICh1aW50 NjQgbiA9IDA7IG4gPCB0cmltX2NodW5rX2NvdW50OyArK24pCisJCXBmcmVlKGxhLT5jaHVua3Nb bl0pOworCisJLyogU2xpZGUgcmVtYWluaW5nIGNodW5rIHBvaW50ZXJzIGJhY2sgdG93YXJkIHRo ZSBiYXNlIG9mIHRoZSBhcnJheS4gKi8KKwl0b3RhbF9jaHVua19jb3VudCA9IChsYS0+bmV4dF9p ZCAtIGxhLT5iYXNlX2lkICsKKwkJCQkJCSBBRFZJQ0VfQ0hVTktfU0laRSAtIDEpIC8gQURWSUNF X0NIVU5LX1NJWkU7CisJcmVtYWluaW5nX2NodW5rX2NvdW50ID0gdG90YWxfY2h1bmtfY291bnQg LSB0cmltX2NodW5rX2NvdW50OworCWlmIChyZW1haW5pbmdfY2h1bmtfY291bnQgPiAwKQorCQlt ZW1tb3ZlKCZsYS0+Y2h1bmtzWzBdLCAmbGEtPmNodW5rc1t0cmltX2NodW5rX2NvdW50XSwKKwkJ CQlzaXplb2YocGdwYV9sb2NhbF9hZHZpY2VfY2h1bmsgKikgKiByZW1haW5pbmdfY2h1bmtfY291 bnQpOworCisJLyogRG9uJ3QgbGVhdmUgc3RhbGUgcG9pbnRlcnMgYXJvdW5kLiAqLworCW1lbXNl dCgmbGEtPmNodW5rc1tyZW1haW5pbmdfY2h1bmtfY291bnRdLCAwLAorCQkgICBzaXplb2YocGdw YV9sb2NhbF9hZHZpY2VfY2h1bmsgKikKKwkJICAgKiAodG90YWxfY2h1bmtfY291bnQgLSByZW1h aW5pbmdfY2h1bmtfY291bnQpKTsKKworCS8qIEFkanVzdCBiYXNlIElEIHZhbHVlIGFjY29yZGlu Z2x5LiAqLworCWxhLT5iYXNlX2lkICs9IHRyaW1fY2h1bmtfY291bnQgKiBBRFZJQ0VfQ0hVTktf U0laRTsKK30KKworLyoKKyAqIERpc2NhcmQgY29sbGVjdGVkIGFkdmljZSBzdG9yZWQgaW4gc2hh cmVkIG1lbW9yeSBpbiBleGNlc3Mgb2YgdGhlCisgKiBzcGVjaWZpZWQgbGltaXQuCisgKi8KK3N0 YXRpYyB2b2lkCitwZ3BhX3RyaW1fc2hhcmVkX2FkdmljZShkc2FfYXJlYSAqYXJlYSwgaW50IGxp bWl0KQoreworCXBncGFfc2hhcmVkX2FkdmljZSAqc2EgPSBzaGFyZWRfY29sbGVjdG9yOworCXVp bnQ2NAkJY3VycmVudF9jb3VudDsKKwl1aW50NjQJCXRyaW1fY291bnQ7CisJdWludDY0CQl0b3Rh bF9jaHVua19jb3VudDsKKwl1aW50NjQJCXRyaW1fY2h1bmtfY291bnQ7CisJdWludDY0CQlyZW1h aW5pbmdfY2h1bmtfY291bnQ7CisJZHNhX3BvaW50ZXIgKmNodW5rX2FycmF5OworCisJLyogSWYg d2UgaGF2ZW4ndCB5ZXQgcmVhY2hlZCB0aGUgbGltaXQsIHRoZXJlJ3Mgbm90aGluZyB0byBkby4g Ki8KKwljdXJyZW50X2NvdW50ID0gc2EtPm5leHRfaWQgLSBzYS0+b2xkZXN0X2lkOworCWlmIChj dXJyZW50X2NvdW50IDw9IGxpbWl0KQorCQlyZXR1cm47CisKKwkvKiBHZXQgYSBwb2ludGVyIHRv IHRoZSBjaHVuayBhcnJheS4gKi8KKwljaHVua19hcnJheSA9IGRzYV9nZXRfYWRkcmVzcyhhcmVh LCBzYS0+Y2h1bmtzKTsKKworCS8qIEZyZWUgZW5vdWdoIGVudHJpZXMgdG8gZ2V0IHVzIGJhY2sg ZG93biB0byB0aGUgbGltaXQuICovCisJdHJpbV9jb3VudCA9IGN1cnJlbnRfY291bnQgLSBsaW1p dDsKKwl3aGlsZSAodHJpbV9jb3VudCA+IDApCisJeworCQl1aW50NjQJCWNodW5rX251bWJlcjsK KwkJdWludDY0CQljaHVua19vZmZzZXQ7CisJCXBncGFfc2hhcmVkX2FkdmljZV9jaHVuayAqY2h1 bms7CisKKwkJY2h1bmtfbnVtYmVyID0gKHNhLT5vbGRlc3RfaWQgLSBzYS0+YmFzZV9pZCkgLyBB RFZJQ0VfQ0hVTktfU0laRTsKKwkJY2h1bmtfb2Zmc2V0ID0gKHNhLT5vbGRlc3RfaWQgLSBzYS0+ YmFzZV9pZCkgJSBBRFZJQ0VfQ0hVTktfU0laRTsKKworCQljaHVuayA9IGRzYV9nZXRfYWRkcmVz cyhhcmVhLCBjaHVua19hcnJheVtjaHVua19udW1iZXJdKTsKKwkJQXNzZXJ0KGNodW5rLT5lbnRy aWVzW2NodW5rX29mZnNldF0gIT0gSW52YWxpZERzYVBvaW50ZXIpOworCQlkc2FfZnJlZShhcmVh LCBjaHVuay0+ZW50cmllc1tjaHVua19vZmZzZXRdKTsKKwkJY2h1bmstPmVudHJpZXNbY2h1bmtf b2Zmc2V0XSA9IEludmFsaWREc2FQb2ludGVyOworCQkrK3NhLT5vbGRlc3RfaWQ7CisJCS0tdHJp bV9jb3VudDsKKwl9CisKKwkvKiBGcmVlIGFueSBjaHVua3MgdGhhdCBhcmUgbm93IGVudGlyZWx5 IHVudXNlZC4gKi8KKwl0cmltX2NodW5rX2NvdW50ID0gKHNhLT5vbGRlc3RfaWQgLSBzYS0+YmFz ZV9pZCkgLyBBRFZJQ0VfQ0hVTktfU0laRTsKKwlmb3IgKHVpbnQ2NCBuID0gMDsgbiA8IHRyaW1f Y2h1bmtfY291bnQ7ICsrbikKKwkJZHNhX2ZyZWUoYXJlYSwgY2h1bmtfYXJyYXlbbl0pOworCisJ LyogU2xpZGUgcmVtYWluaW5nIGNodW5rIHBvaW50ZXJzIGJhY2sgdG93YXJkIHRoZSBiYXNlIG9m IHRoZSBhcnJheS4gKi8KKwl0b3RhbF9jaHVua19jb3VudCA9IChzYS0+bmV4dF9pZCAtIHNhLT5i YXNlX2lkICsKKwkJCQkJCSBBRFZJQ0VfQ0hVTktfU0laRSAtIDEpIC8gQURWSUNFX0NIVU5LX1NJ WkU7CisJcmVtYWluaW5nX2NodW5rX2NvdW50ID0gdG90YWxfY2h1bmtfY291bnQgLSB0cmltX2No dW5rX2NvdW50OworCWlmIChyZW1haW5pbmdfY2h1bmtfY291bnQgPiAwKQorCQltZW1tb3ZlKCZj aHVua19hcnJheVswXSwgJmNodW5rX2FycmF5W3RyaW1fY2h1bmtfY291bnRdLAorCQkJCXNpemVv Zihkc2FfcG9pbnRlcikgKiByZW1haW5pbmdfY2h1bmtfY291bnQpOworCisJLyogRG9uJ3QgbGVh dmUgc3RhbGUgcG9pbnRlcnMgYXJvdW5kLiAqLworCW1lbXNldCgmY2h1bmtfYXJyYXlbcmVtYWlu aW5nX2NodW5rX2NvdW50XSwgMCwKKwkJICAgc2l6ZW9mKHBncGFfc2hhcmVkX2FkdmljZV9jaHVu ayAqKQorCQkgICAqICh0b3RhbF9jaHVua19jb3VudCAtIHJlbWFpbmluZ19jaHVua19jb3VudCkp OworCisJLyogQWRqdXN0IGJhc2UgSUQgdmFsdWUgYWNjb3JkaW5nbHkuICovCisJc2EtPmJhc2Vf aWQgKz0gdHJpbV9jaHVua19jb3VudCAqIEFEVklDRV9DSFVOS19TSVpFOworfQorCisvKgorICog U1FMLWNhbGxhYmxlIGZ1bmN0aW9uIHRvIGRpc2NhcmQgYWR2aWNlIGNvbGxlY3RlZCBpbiBiYWNr ZW5kLWxvY2FsIG1lbW9yeQorICovCitEYXR1bQorcGdfY2xlYXJfY29sbGVjdGVkX2xvY2FsX2Fk dmljZShQR19GVU5DVElPTl9BUkdTKQoreworCWlmIChsb2NhbF9jb2xsZWN0b3IgIT0gTlVMTCkK KwkJcGdwYV90cmltX2xvY2FsX2FkdmljZSgwKTsKKworCVBHX1JFVFVSTl9WT0lEKCk7Cit9CisK Ky8qCisgKiBTUUwtY2FsbGFibGUgZnVuY3Rpb24gdG8gZGlzY2FyZCBhZHZpY2UgY29sbGVjdGVk IGluIGJhY2tlbmQtbG9jYWwgbWVtb3J5CisgKi8KK0RhdHVtCitwZ19jbGVhcl9jb2xsZWN0ZWRf c2hhcmVkX2FkdmljZShQR19GVU5DVElPTl9BUkdTKQoreworCXBncGFfc2hhcmVkX3N0YXRlICpz dGF0ZSA9IHBnX3BsYW5fYWR2aWNlX2F0dGFjaCgpOworCWRzYV9hcmVhICAgKmFyZWEgPSBwZ19w bGFuX2FkdmljZV9kc2FfYXJlYSgpOworCisJTFdMb2NrQWNxdWlyZSgmc3RhdGUtPmxvY2ssIExX X0VYQ0xVU0lWRSk7CisKKwkvKgorCSAqIElmIHdlJ3JlIG5vdCBhdHRhY2hlZCB0byB0aGUgc2hh cmVkIGFkdmljZSBjb2xsZWN0b3IgeWV0LCBmaXggdGhhdCBub3c7CisJICogYnV0IGlmIHRoZSBj b2xsZWN0b3IgZG9lc24ndCBldmVuIGV4aXN0LCB3ZSBjYW4gcmV0dXJuIHdpdGhvdXQgZG9pbmcK KwkgKiBhbnl0aGluZyBlbHNlLgorCSAqLworCWlmIChzaGFyZWRfY29sbGVjdG9yID09IE5VTEwp CisJeworCQlpZiAoc3RhdGUtPnNoYXJlZF9jb2xsZWN0b3IgPT0gSW52YWxpZERzYVBvaW50ZXIp CisJCXsKKwkJCUxXTG9ja1JlbGVhc2UoJnN0YXRlLT5sb2NrKTsKKwkJCXJldHVybiAoRGF0dW0p IDA7CisJCX0KKwkJc2hhcmVkX2NvbGxlY3RvciA9IGRzYV9nZXRfYWRkcmVzcyhhcmVhLCBzdGF0 ZS0+c2hhcmVkX2NvbGxlY3Rvcik7CisJfQorCisJLyogRG8gdGhlIHJlYWwgd29yayAqLworCXBn cGFfdHJpbV9zaGFyZWRfYWR2aWNlKGFyZWEsIDApOworCisJTFdMb2NrUmVsZWFzZSgmc3RhdGUt PmxvY2spOworCisJUEdfUkVUVVJOX1ZPSUQoKTsKK30KKworLyoKKyAqIFNRTC1jYWxsYWJsZSBT UkYgdG8gcmV0dXJuIGFkdmljZSBjb2xsZWN0ZWQgaW4gYmFja2VuZC1sb2NhbCBtZW1vcnkKKyAq LworRGF0dW0KK3BnX2dldF9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlKFBHX0ZVTkNUSU9OX0FSR1Mp Cit7CisJUmV0dXJuU2V0SW5mbyAqcnNpbmZvID0gKFJldHVyblNldEluZm8gKikgZmNpbmZvLT5y ZXN1bHRpbmZvOworCXBncGFfbG9jYWxfYWR2aWNlICpsYSA9IGxvY2FsX2NvbGxlY3RvcjsKKwlP aWQJCQl1c2VyaWQgPSBHZXRVc2VySWQoKTsKKworCUluaXRNYXRlcmlhbGl6ZWRTUkYoZmNpbmZv LCAwKTsKKworCWlmIChsYSA9PSBOVUxMKQorCQlyZXR1cm4gKERhdHVtKSAwOworCisJLyogTG9v cCBvdmVyIGFsbCBlbnRyaWVzLiAqLworCWZvciAodWludDY0IGlkID0gbGEtPm9sZGVzdF9pZDsg aWQgPCBsYS0+bmV4dF9pZDsgKytpZCkKKwl7CisJCXVpbnQ2NAkJY2h1bmtfbnVtYmVyOworCQl1 aW50NjQJCWNodW5rX29mZnNldDsKKwkJcGdwYV9jb2xsZWN0ZWRfYWR2aWNlICpjYTsKKwkJRGF0 dW0JCXZhbHVlc1tQR19HRVRfQURWSUNFX0NPTFVNTlNdOworCQlib29sCQludWxsc1tQR19HRVRf QURWSUNFX0NPTFVNTlNdID0gezB9OworCisJCWNodW5rX251bWJlciA9IChpZCAtIGxhLT5iYXNl X2lkKSAvIEFEVklDRV9DSFVOS19TSVpFOworCQljaHVua19vZmZzZXQgPSAoaWQgLSBsYS0+YmFz ZV9pZCkgJSBBRFZJQ0VfQ0hVTktfU0laRTsKKworCQljYSA9IGxhLT5jaHVua3NbY2h1bmtfbnVt YmVyXS0+ZW50cmllc1tjaHVua19vZmZzZXRdOworCisJCWlmICghbWVtYmVyX2Nhbl9zZXRfcm9s ZSh1c2VyaWQsIGNhLT51c2VyaWQpKQorCQkJY29udGludWU7CisKKwkJdmFsdWVzWzBdID0gVUlu dDY0R2V0RGF0dW0oaWQpOworCQl2YWx1ZXNbMV0gPSBPYmplY3RJZEdldERhdHVtKGNhLT51c2Vy aWQpOworCQl2YWx1ZXNbMl0gPSBPYmplY3RJZEdldERhdHVtKGNhLT5kYmlkKTsKKwkJdmFsdWVz WzNdID0gVUludDY0R2V0RGF0dW0oY2EtPnF1ZXJ5aWQpOworCQl2YWx1ZXNbNF0gPSBUaW1lc3Rh bXBHZXREYXR1bShjYS0+dGltZXN0YW1wKTsKKwkJdmFsdWVzWzVdID0gQ1N0cmluZ0dldFRleHRE YXR1bShxdWVyeV9zdHJpbmcoY2EpKTsKKwkJdmFsdWVzWzZdID0gQ1N0cmluZ0dldFRleHREYXR1 bShhZHZpY2Vfc3RyaW5nKGNhKSk7CisKKwkJdHVwbGVzdG9yZV9wdXR2YWx1ZXMocnNpbmZvLT5z ZXRSZXN1bHQsIHJzaW5mby0+c2V0RGVzYywKKwkJCQkJCQkgdmFsdWVzLCBudWxscyk7CisJfQor CisJcmV0dXJuIChEYXR1bSkgMDsKK30KKworLyoKKyAqIFNRTC1jYWxsYWJsZSBTUkYgdG8gcmV0 dXJuIGFkdmljZSBjb2xsZWN0ZWQgaW4gc2hhcmVkIG1lbW9yeQorICovCitEYXR1bQorcGdfZ2V0 X2NvbGxlY3RlZF9zaGFyZWRfYWR2aWNlKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJUmV0dXJuU2V0 SW5mbyAqcnNpbmZvID0gKFJldHVyblNldEluZm8gKikgZmNpbmZvLT5yZXN1bHRpbmZvOworCXBn cGFfc2hhcmVkX3N0YXRlICpzdGF0ZSA9IHBnX3BsYW5fYWR2aWNlX2F0dGFjaCgpOworCWRzYV9h cmVhICAgKmFyZWEgPSBwZ19wbGFuX2FkdmljZV9kc2FfYXJlYSgpOworCWRzYV9wb2ludGVyICpj aHVua19hcnJheTsKKwlwZ3BhX3NoYXJlZF9hZHZpY2UgKnNhID0gc2hhcmVkX2NvbGxlY3RvcjsK KworCUluaXRNYXRlcmlhbGl6ZWRTUkYoZmNpbmZvLCAwKTsKKworCS8qIExvY2sgdGhlIHNoYXJl ZCBzdGF0ZS4gKi8KKwlMV0xvY2tBY3F1aXJlKCZzdGF0ZS0+bG9jaywgTFdfU0hBUkVEKTsKKwor CS8qCisJICogSWYgd2UncmUgbm90IGF0dGFjaGVkIHRvIHRoZSBzaGFyZWQgYWR2aWNlIGNvbGxl Y3RvciB5ZXQsIGZpeCB0aGF0IG5vdzsKKwkgKiBidXQgaWYgdGhlIGNvbGxlY3RvciBkb2Vzbid0 IGV2ZW4gZXhpc3QsIHdlIGNhbiByZXR1cm4gd2l0aG91dCBkb2luZworCSAqIGFueXRoaW5nIGVs c2UuCisJICovCisJaWYgKHNhID09IE5VTEwpCisJeworCQlpZiAoc3RhdGUtPnNoYXJlZF9jb2xs ZWN0b3IgPT0gSW52YWxpZERzYVBvaW50ZXIpCisJCXsKKwkJCUxXTG9ja1JlbGVhc2UoJnN0YXRl LT5sb2NrKTsKKwkJCXJldHVybiAoRGF0dW0pIDA7CisJCX0KKwkJc2hhcmVkX2NvbGxlY3RvciA9 IHNhID0gZHNhX2dldF9hZGRyZXNzKGFyZWEsIHN0YXRlLT5zaGFyZWRfY29sbGVjdG9yKTsKKwl9 CisKKwkvKiBHZXQgYSBwb2ludGVyIHRvIHRoZSBjaHVuayBhcnJheS4gKi8KKwljaHVua19hcnJh eSA9IGRzYV9nZXRfYWRkcmVzcyhhcmVhLCBzYS0+Y2h1bmtzKTsKKworCS8qIExvb3Agb3ZlciBh bGwgZW50cmllcy4gKi8KKwlmb3IgKHVpbnQ2NCBpZCA9IHNhLT5vbGRlc3RfaWQ7IGlkIDwgc2Et Pm5leHRfaWQ7ICsraWQpCisJeworCQl1aW50NjQJCWNodW5rX251bWJlcjsKKwkJdWludDY0CQlj aHVua19vZmZzZXQ7CisJCXBncGFfc2hhcmVkX2FkdmljZV9jaHVuayAqY2h1bms7CisJCXBncGFf Y29sbGVjdGVkX2FkdmljZSAqY2E7CisJCURhdHVtCQl2YWx1ZXNbUEdfR0VUX0FEVklDRV9DT0xV TU5TXTsKKwkJYm9vbAkJbnVsbHNbUEdfR0VUX0FEVklDRV9DT0xVTU5TXSA9IHswfTsKKworCQlj aHVua19udW1iZXIgPSAoaWQgLSBzYS0+YmFzZV9pZCkgLyBBRFZJQ0VfQ0hVTktfU0laRTsKKwkJ Y2h1bmtfb2Zmc2V0ID0gKGlkIC0gc2EtPmJhc2VfaWQpICUgQURWSUNFX0NIVU5LX1NJWkU7CisK KwkJY2h1bmsgPSBkc2FfZ2V0X2FkZHJlc3MoYXJlYSwgY2h1bmtfYXJyYXlbY2h1bmtfbnVtYmVy XSk7CisJCWNhID0gZHNhX2dldF9hZGRyZXNzKGFyZWEsIGNodW5rLT5lbnRyaWVzW2NodW5rX29m ZnNldF0pOworCisJCXZhbHVlc1swXSA9IFVJbnQ2NEdldERhdHVtKGlkKTsKKwkJdmFsdWVzWzFd ID0gT2JqZWN0SWRHZXREYXR1bShjYS0+dXNlcmlkKTsKKwkJdmFsdWVzWzJdID0gT2JqZWN0SWRH ZXREYXR1bShjYS0+ZGJpZCk7CisJCXZhbHVlc1szXSA9IFVJbnQ2NEdldERhdHVtKGNhLT5xdWVy eWlkKTsKKwkJdmFsdWVzWzRdID0gVGltZXN0YW1wR2V0RGF0dW0oY2EtPnRpbWVzdGFtcCk7CisJ CXZhbHVlc1s1XSA9IENTdHJpbmdHZXRUZXh0RGF0dW0ocXVlcnlfc3RyaW5nKGNhKSk7CisJCXZh bHVlc1s2XSA9IENTdHJpbmdHZXRUZXh0RGF0dW0oYWR2aWNlX3N0cmluZyhjYSkpOworCisJCXR1 cGxlc3RvcmVfcHV0dmFsdWVzKHJzaW5mby0+c2V0UmVzdWx0LCByc2luZm8tPnNldERlc2MsCisJ CQkJCQkJIHZhbHVlcywgbnVsbHMpOworCX0KKworCS8qIFJlbGVhc2UgbG9jayBvbiBzaGFyZWQg c3RhdGUuICovCisJTFdMb2NrUmVsZWFzZSgmc3RhdGUtPmxvY2spOworCisJcmV0dXJuIChEYXR1 bSkgMDsKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9jb2xsZWN0 b3IuaCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9jb2xsZWN0b3IuaApuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYjZlNzQ2YTA2ZDcKLS0tIC9kZXYvbnVsbAor KysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfY29sbGVjdG9yLmgKQEAgLTAsMCArMSwx OCBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogcGdwYV9jb2xsZWN0b3IuaAorICoJICBj b2xsZWN0IGFkdmljZSBpbnRvIGJhY2tlbmQtbG9jYWwgb3Igc2hhcmVkIG1lbW9yeQorICoKKyAq IENvcHlyaWdodCAoYykgMjAxNi0yMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBH cm91cAorICoKKyAqCSAgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2NvbGxlY3Rvci5oCisg KgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpZm5kZWYgUEdQQV9DT0xMRUNUT1JfSAorI2Rl ZmluZSBQR1BBX0NPTExFQ1RPUl9ICisKK2V4dGVybiB2b2lkIHBncGFfY29sbGVjdF9hZHZpY2Uo dWludDY0IHF1ZXJ5SWQsIGNvbnN0IGNoYXIgKnF1ZXJ5X3N0cmluZywKKwkJCQkJCQkJY29uc3Qg Y2hhciAqYWR2aWNlX3N0cmluZyk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19w bGFuX2FkdmljZS9wZ3BhX2lkZW50aWZpZXIuYyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdw YV9pZGVudGlmaWVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjUx YjRiMGM2MGE2Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3Bh X2lkZW50aWZpZXIuYwpAQCAtMCwwICsxLDQ3NiBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgor ICogcGdwYV9pZGVudGlmaWVyLmMKKyAqCSAgY3JlYXRlIGFwcHJvcHJpYXRlIGlkZW50aWZpZXJz IGZvciByYW5nZSB0YWJsZSBlbnRyaWVzCisgKgorICogVGhlIGdvYWwgb2YgdGhpcyBtb2R1bGUg aXMgdG8gYmUgYWJsZSB0byBwcm9kdWNlIGlkZW50aWZpZXJzIGZvciByYW5nZQorICogdGFibGUg ZW50cmllcyB0aGF0IGFyZSB1bmlxdWUsIHVuZGVyc3RhbmRhYmxlIHRvIGh1bWFuIGJlaW5ncywg YW5kCisgKiBhYmxlIHRvIGJlIHJlY29uc3RydWN0ZWQgZHVyaW5nIGZ1dHVyZSBwbGFubmluZyBj eWNsZXMuIEFzIGFuCisgKiBleGNlcHRpb24sIHdlIGRvIG5vdCBjYXJlIGFib3V0LCBvciB3YW50 IHRvIHByb2R1Y2UsIGlkZW50aWZpZXJzIGZvcgorICogUlRFX0pPSU4gZW50cmllcy4gVGhpcyBp cyBiZWNhdXNlICgxKSB3ZSB3b3VsZCBlbmQgdXAgd2l0aCBhIHRvbiBvZgorICogUlRFcyB3aXRo IHVuaGVscGZ1bCBuYW1lcyBsaWtlIHVubmFtZWRfam9pbl8xNzsgKDIpIG5vdCBhbGwgam9pbnMg aGF2ZQorICogUlRFczsgYW5kICgzKSB3ZSBpbnRlbmQgdG8gcmVmZXIgdG8gam9pbnMgYnkgdGhl aXIgY29uc3RpdHVlbnQgbWVtYmVycworICogcmF0aGVyIHRoYW4gYnkgcmVmZXJlbmNlIHRvIHRo ZSBqb2luIFJURS4KKyAqCisgKiBJbiBnZW5lcmFsLCB3ZSBjb25zdHJ1Y3QgaWRlbnRpZmllcnMg b2YgdGhlIGZvbGxvd2luZyBmb3JtOgorICoKKyAqIGFsaWFzX25hbWUjb2NjdXJyZW5jZV9udW1i ZXIvY2hpbGRfdGFibGVfbmFtZUBzdWJxdWVyeV9uYW1lCisgKgorICogSG93ZXZlciwgb2NjdXJy ZW5jZV9udW1iZXIgaXMgb21pdHRlZCB3aGVuIGl0IGlzIHRoZSBmaXJzdCBvY2N1cnJlbmNlCisg KiB3aXRoaW4gdGhlIHNhbWUgc3VicXVlcnksIGNoaWxkX3RhYmxlX25hbWUgaXMgb21pdHRlZCBm b3IgcmVsYXRpb25zIHRoYXQKKyAqIGFyZSBub3QgY2hpbGQgdGFibGVzLCBhbmQgc3VicXVlcnlf bmFtZSBpcyBvbWl0dGVkIGZvciB0aGUgdG9wbW9zdAorICogcXVlcnkgbGV2ZWwuIFdoZW5ldmVy IGFuIGl0ZW0gaXMgb21pdHRlZCwgdGhlIHByZWNlZGluZyBwdW5jdHVhdGlvbiBtYXJrCisgKiBp cyBhbHNvIG9taXR0ZWQuICBJZGVudGlmaWVyLXN0eWxlIGVzY2FwaW5nIGlzIGFwcGxpZWQgdG8g YWxpYXNfbmFtZSBhbmQKKyAqIHN1YnF1ZXJ5X25hbWUuICBXaGVuZXZlciB3ZSBpbmNsdWRlIGNo aWxkX3RhYmxlX25hbWUsIHdlIGFsd2F5cworICogc2NoZW1hLXF1YWxpZmllZCBuYW1lLCBidXQg d3JpdGluZyB0aGVpciBvd24gcGxhbiBhZHZpY2UgYXJlIG5vdCByZXF1aXJlZAorICogdG8gZG8g c28uICBJZGVudGlmaWVyLXN0eWxlIGVzY2FwaW5nIGlzIGFwcGxpZWQgdG8gdGhlIHNjaGVtYSBh bmQgdG8gdGhlCisgKiByZWxhdGlvbiBuYW1lcyBzZXBhcmF0ZWx5LgorICoKKyAqIFRoZSB1cHNo b3Qgb2YgYWxsIG9mIHRoZXNlIHJ1bGVzIGlzIHRoYXQgaW4gc2ltcGxlIGNhc2VzLCB0aGUgcmVs YXRpb24KKyAqIGlkZW50aWZpZXIgaXMgdGV4dHVhbGx5IGlkZW50aWNhbCB0byB0aGUgYWxpYXMg bmFtZSwgbWFraW5nIGxpZmUgZWFzaWVyCisgKiBmb3IgdXNlcnMuIEhvd2V2ZXIsIGV2ZW4gaW4g Y29tcGxleCBjYXNlcywgZXZlcnkgcmVsYXRpb24gaWRlbnRpZmllcgorICogZm9yIGEgZ2l2ZW4g cXVlcnkgd2lsbCBiZSB1bmlxdWUgKG9yIGF0IGxlYXN0IHdlIGhvcGUgc286IGlmIG5vdCwgdGhp cworICogY29kZSBpcyBidWdneSBhbmQgdGhlIGlkZW50aWZpZXIgZm9ybWF0IG1pZ2h0IG5lZWQg dG8gYmUgcmV0aG91Z2h0KS4KKyAqCisgKiBBIGtleSBnb2FsIG9mIHRoaXMgc3lzdGVtIGlzIHRo YXQgd2Ugd2FudCB0byBiZSBhYmxlIHRvIHJlY29uc3RydWN0IHRoZQorICogc2FtZSBpZGVudGlm aWVycyBkdXJpbmcgYSBmdXR1cmUgcGxhbm5pbmcgY3ljbGUgZm9yIHRoZSBzYW1lIHF1ZXJ5LCBz bworICogdGhhdCBpZiBhIGNlcnRhaW4gYmVoYXZpb3IgaXMgc3BlY2lmaWVkIGZvciBhIGNlcnRh aW4gaWRlbnRpZmllciwgd2UgY2FuCisgKiBwcm9wZXJseSBpZGVudGlmeSB0aGUgUlRJIGZvciB3 aGljaCB0aGF0IGJlaGF2aW9yIGlzIG1hbmRhdGVkLiBJbiBvcmRlcgorICogZm9yIHRoaXMgdG8g d29yaywgc3VicXVlcnkgbmFtZXMgbXVzdCBiZSB1bmlxdWUgYW5kIGtub3duIGJlZm9yZSB0aGUK KyAqIHN1YnF1ZXJ5IGlzIHBsYW5uZWQsIGFuZCB0aGUgcmVtYWluZGVyIG9mIHRoZSBpZGVudGlm aWVyIG11c3Qgbm90IGRlcGVuZAorICogb24gYW55IHBhcnQgb2YgdGhlIHF1ZXJ5IG91dHNpZGUg b2YgdGhlIGN1cnJlbnQgc3VicXVlcnkgbGV2ZWwuIEluCisgKiBwYXJ0aWN1bGFyLCBvY2N1cnJl bmNlX251bWJlciBtdXN0IGJlIGNhbGN1bGF0ZWQgcmVsYXRpdmUgdG8gdGhlIHJhbmdlCisgKiB0 YWJsZSBmb3IgdGhlIHJlbGV2YW50IHN1YnF1ZXJ5LCBub3QgdGhlIGZpbmFsIGZsYXR0ZW5lZCBy YW5nZSB0YWJsZS4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyNCwgUG9zdGdyZVNRTCBH bG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKgkgIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2Uv cGdwYV9pZGVudGlmaWVyLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisjaW5jbHVk ZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgInBncGFfaWRlbnRpZmllci5oIgorCisjaW5jbHVk ZSAicGFyc2VyL3BhcnNldHJlZS5oIgorI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCisjaW5j bHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCisKK3N0YXRpYyBJbmRleCAqcGdwYV9jcmVhdGVfdG9w X3J0aV9tYXAoSW5kZXggcnRhYmxlX2xlbmd0aCwgTGlzdCAqcnRhYmxlLAorCQkJCQkJCQkJICBM aXN0ICphcHBpbmZvcyk7CitzdGF0aWMgaW50CXBncGFfb2NjdXJyZW5jZV9udW1iZXIoTGlzdCAq cnRhYmxlLCBJbmRleCAqdG9wX3J0aV9tYXAsCisJCQkJCQkJCSAgIFN1YlBsYW5SVEluZm8gKnJ0 aW5mbywgSW5kZXggcnRpKTsKKworLyoKKyAqIENyZWF0ZSBhIHJhbmdlIHRhYmxlIGlkZW50aWZp ZXIgZnJvbSBzY3JhdGNoLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gbGVhdmVzIHRoZSBjYWxsZXIg dG8gZG8gYWxsIHRoZSBoZWF2eSBsaWZ0aW5nLCBzbyBpdCdzCisgKiBnZW5lcmFsbHkgYmV0dGVy IHRvIHVzZSBvbmUgb2YgdGhlIGZ1bmN0aW9ucyBiZWxvdyBpbnN0ZWFkLgorICoKKyAqIFNlZSB0 aGUgZmlsZSBoZWFkZXIgY29tbWVudHMgZm9yIG1vcmUgZGV0YWlscyBvbiB0aGUgZm9ybWF0IG9m IGFuCisgKiBpZGVudGlmaWVyLgorICovCitjb25zdCBjaGFyICoKK3BncGFfaWRlbnRpZmllcl9z dHJpbmcoY29uc3QgcGdwYV9pZGVudGlmaWVyICpyaWQpCit7CisJY29uc3QgY2hhciAqcmVzdWx0 OworCisJQXNzZXJ0KHJpZC0+YWxpYXNfbmFtZSAhPSBOVUxMKTsKKwlyZXN1bHQgPSBxdW90ZV9p ZGVudGlmaWVyKHJpZC0+YWxpYXNfbmFtZSk7CisKKwlBc3NlcnQocmlkLT5vY2N1cnJlbmNlID49 IDApOworCWlmIChyaWQtPm9jY3VycmVuY2UgPiAxKQorCQlyZXN1bHQgPSBwc3ByaW50ZigiJXMj JWQiLCByZXN1bHQsIHJpZC0+b2NjdXJyZW5jZSk7CisKKwlpZiAocmlkLT5wYXJ0cmVsICE9IE5V TEwpCisJeworCQlpZiAocmlkLT5wYXJ0bnNwID09IE5VTEwpCisJCQlyZXN1bHQgPSBwc3ByaW50 ZigiJXMvJXMiLCByZXN1bHQsCisJCQkJCQkJICBxdW90ZV9pZGVudGlmaWVyKHJpZC0+cGFydHJl bCkpOworCQllbHNlCisJCQlyZXN1bHQgPSBwc3ByaW50ZigiJXMvJXMuJXMiLCByZXN1bHQsCisJ CQkJCQkJICBxdW90ZV9pZGVudGlmaWVyKHJpZC0+cGFydG5zcCksCisJCQkJCQkJICBxdW90ZV9p ZGVudGlmaWVyKHJpZC0+cGFydHJlbCkpOworCX0KKworCWlmIChyaWQtPnBsYW5fbmFtZSAhPSBO VUxMKQorCQlyZXN1bHQgPSBwc3ByaW50ZigiJXNAJXMiLCByZXN1bHQsIHF1b3RlX2lkZW50aWZp ZXIocmlkLT5wbGFuX25hbWUpKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBDb21w dXRlIGEgcmVsYXRpb24gaWRlbnRpZmllciBmb3IgYSBwYXJ0aWN1bGFyIFJUSS4KKyAqCisgKiBU aGUgY2FsbGVyIHByb3ZpZGVzIHJvb3QgYW5kIHJ0aSwgYW5kIGdldHMgdGhlIG5lY2Vzc2FyeSBk ZXRhaWxzIGJhY2sgdmlhCisgKiB0aGUgcmVtYWluaW5nIHBhcmFtZXRlcnMuCisgKi8KK3ZvaWQK K3BncGFfY29tcHV0ZV9pZGVudGlmaWVyX2J5X3J0aShQbGFubmVySW5mbyAqcm9vdCwgSW5kZXgg cnRpLAorCQkJCQkJCSAgIHBncGFfaWRlbnRpZmllciAqcmlkKQoreworCUluZGV4CQl0b3BfcnRp ID0gcnRpOworCWludAkJCW9jY3VycmVuY2UgPSAxOworCVJhbmdlVGJsRW50cnkgKnJ0ZTsKKwlS YW5nZVRibEVudHJ5ICp0b3BfcnRlOworCWNoYXIJICAgKnBhcnRuc3AgPSBOVUxMOworCWNoYXIJ ICAgKnBhcnRyZWwgPSBOVUxMOworCisJLyoKKwkgKiBJZiB0aGlzIGlzIGEgY2hpbGQgUlRFLCBm aW5kIHRoZSB0b3Btb3N0IHBhcmVudCB0aGF0IGlzIHN0aWxsIG9mIHR5cGUKKwkgKiBSVEVfUkVM QVRJT04uIFdlIGRvIHRoaXMgYmVjYXVzZSB3ZSBpZGVudGlmeSBjaGlsZHJlbiBvZiBwYXJ0aXRp b25lZAorCSAqIHRhYmxlcyBieSB0aGUgbmFtZSBvZiB0aGUgY2hpbGQgdGFibGUsIGJ1dCBzdWJx dWVyaWVzIGNhbiBhbHNvIGhhdmUKKwkgKiBjaGlsZCByZWxzIGFuZCB3ZSBkb24ndCBjYXJlIGFi b3V0IHRob3NlIGhlcmUuCisJICovCisJZm9yICg7OykKKwl7CisJCUFwcGVuZFJlbEluZm8gKmFw cGluZm87CisJCVJhbmdlVGJsRW50cnkgKnBhcmVudF9ydGU7CisKKwkJLyogYXBwZW5kX3JlbF9h cnJheSBjYW4gYmUgTlVMTCBpZiB0aGVyZSBhcmUgbm8gY2hpbGRyZW4gKi8KKwkJaWYgKHJvb3Qt PmFwcGVuZF9yZWxfYXJyYXkgPT0gTlVMTCB8fAorCQkJKGFwcGluZm8gPSByb290LT5hcHBlbmRf cmVsX2FycmF5W3RvcF9ydGldKSA9PSBOVUxMKQorCQkJYnJlYWs7CisKKwkJcGFyZW50X3J0ZSA9 IHBsYW5uZXJfcnRfZmV0Y2goYXBwaW5mby0+cGFyZW50X3JlbGlkLCByb290KTsKKwkJaWYgKHBh cmVudF9ydGUtPnJ0ZWtpbmQgIT0gUlRFX1JFTEFUSU9OKQorCQkJYnJlYWs7CisKKwkJdG9wX3J0 aSA9IGFwcGluZm8tPnBhcmVudF9yZWxpZDsKKwl9CisKKwkvKiBHZXQgdGhlIHJhbmdlIHRhYmxl IGVudHJpZXMgZm9yIHRoZSBSVEkgYW5kIHRvcCBSVEkuICovCisJcnRlID0gcGxhbm5lcl9ydF9m ZXRjaChydGksIHJvb3QpOworCXRvcF9ydGUgPSBwbGFubmVyX3J0X2ZldGNoKHRvcF9ydGksIHJv b3QpOworCUFzc2VydChydGUtPnJ0ZWtpbmQgIT0gUlRFX0pPSU4pOworCUFzc2VydCh0b3BfcnRl LT5ydGVraW5kICE9IFJURV9KT0lOKTsKKworCS8qIFdvcmsgb3V0IHRoZSBjb3JyZWN0IG9jY3Vy cmVuY2UgbnVtYmVyLiAqLworCWZvciAoSW5kZXggcHJpb3JfcnRpID0gMTsgcHJpb3JfcnRpIDwg dG9wX3J0aTsgKytwcmlvcl9ydGkpCisJeworCQlSYW5nZVRibEVudHJ5ICpwcmlvcl9ydGU7CisJ CUFwcGVuZFJlbEluZm8gKmFwcGluZm87CisKKwkJLyoKKwkJICogSWYgdGhpcyBpcyBhIGNoaWxk IHJlbCBvZiBhIHBhcmVudCB0aGF0IGlzIGEgcmVsYXRpb24sIHNraXAgaXQuCisJCSAqCisJCSAq IFN1Y2ggcmFuZ2UgdGFibGUgZW50cmllcyBhcmUgZGlzYW1iaWd1YXRlZCBieSBtZW50aW9uaW5n IHRoZSBzY2hlbWEKKwkJICogYW5kIG5hbWUgb2YgdGhlIHRhYmxlLCBub3QgYnkgY291bnRpbmcg dGhlbSBhcyBzZXBhcmF0ZSBvY2N1cnJlbmNlcworCQkgKiBvZiB0aGUgc2FtZSB0YWJsZS4KKwkJ ICoKKwkJICogTkI6IGFwcGVuZF9yZWxfYXJyYXkgY2FuIGJlIE5VTEwgaWYgdGhlcmUgYXJlIG5v IGNoaWxkcmVuCisJCSAqLworCQlpZiAocm9vdC0+YXBwZW5kX3JlbF9hcnJheSAhPSBOVUxMICYm CisJCQkoYXBwaW5mbyA9IHJvb3QtPmFwcGVuZF9yZWxfYXJyYXlbcHJpb3JfcnRpXSkgIT0gTlVM TCkKKwkJeworCQkJUmFuZ2VUYmxFbnRyeSAqcGFyZW50X3J0ZTsKKworCQkJcGFyZW50X3J0ZSA9 IHBsYW5uZXJfcnRfZmV0Y2goYXBwaW5mby0+cGFyZW50X3JlbGlkLCByb290KTsKKwkJCWlmIChw YXJlbnRfcnRlLT5ydGVraW5kID09IFJURV9SRUxBVElPTikKKwkJCQljb250aW51ZTsKKwkJfQor CisJCS8qIFNraXAgTlVMTCBlbnRyaWVzIGFuZCBqb2lucy4gKi8KKwkJcHJpb3JfcnRlID0gcGxh bm5lcl9ydF9mZXRjaChwcmlvcl9ydGksIHJvb3QpOworCQlpZiAocHJpb3JfcnRlID09IE5VTEwg fHwgcHJpb3JfcnRlLT5ydGVraW5kID09IFJURV9KT0lOKQorCQkJY29udGludWU7CisKKwkJLyog U2tpcCBpZiB0aGUgYWxpYXMgbmFtZSBkaWZmZXJzLiAqLworCQlpZiAoc3RyY21wKHByaW9yX3J0 ZS0+ZXJlZi0+YWxpYXNuYW1lLCBydGUtPmVyZWYtPmFsaWFzbmFtZSkgIT0gMCkKKwkJCWNvbnRp bnVlOworCisJCS8qIExvb2tzIGxpa2UgYSB0cnVlIGR1cGxpY2F0ZS4gKi8KKwkJKytvY2N1cnJl bmNlOworCX0KKworCS8qIElmIHRoaXMgaXMgYSBjaGlsZCB0YWJsZSwgZ2V0IHRoZSBzY2hlbWEg YW5kIHJlbGF0aW9uIG5hbWVzLiAqLworCWlmIChydGkgIT0gdG9wX3J0aSkKKwl7CisJCXBhcnRu c3AgPSBnZXRfbmFtZXNwYWNlX25hbWVfb3JfdGVtcChnZXRfcmVsX25hbWVzcGFjZShydGUtPnJl bGlkKSk7CisJCXBhcnRyZWwgPSBnZXRfcmVsX25hbWUocnRlLT5yZWxpZCk7CisJfQorCisJLyog T0ssIHdlIGhhdmUgYWxsIHRoZSBhbnN3ZXJzIHdlIG5lZWQuIFJldHVybiB0aGVtIHRvIHRoZSBj YWxsZXIuICovCisJcmlkLT5hbGlhc19uYW1lID0gdG9wX3J0ZS0+ZXJlZi0+YWxpYXNuYW1lOwor CXJpZC0+b2NjdXJyZW5jZSA9IG9jY3VycmVuY2U7CisJcmlkLT5wYXJ0bnNwID0gcGFydG5zcDsK KwlyaWQtPnBhcnRyZWwgPSBwYXJ0cmVsOworCXJpZC0+cGxhbl9uYW1lID0gcm9vdC0+cGxhbl9u YW1lOworfQorCisvKgorICogQ29tcHV0ZSBhIHJlbGF0aW9uIGlkZW50aWZpZXIgZm9yIGEgc2V0 IG9mIFJUSXMsIGV4Y2VwdCBmb3IgYW55IFJURV9KT0lOCisgKiBSVElzIHRoYXQgbWF5IGJlIHBy ZXNlbnQuCisgKgorICogUlRFX0pPSU4gZW50cmllcyBhcmUgZXhjbHVkZWQgYmVjYXVzZSB0aGV5 IGNhbm5vdCBiZSBtZW50aW9uZWQgYnkgcGxhbgorICogYWR2aWNlLgorICoKKyAqIFRoZSBjYWxs ZXIgaXMgcmVzcG9uc2libGUgZm9yIG1ha2luZyBzdXJlIHRoYXQgdGhlIHRrZXlzIGFycmF5IGlz IGxhcmdlCisgKiBlbm91Z2ggdG8gc3RvcmUgdGhlIHJlc3VsdHMuCisgKgorICogVGhlIHJldHVy biB2YWx1ZSBpcyB0aGUgbnVtYmVyIG9mIGlkZW50aWZpZXJzIGNvbXB1dGVkLgorICovCitpbnQK K3BncGFfY29tcHV0ZV9pZGVudGlmaWVyc19ieV9yZWxpZHMoUGxhbm5lckluZm8gKnJvb3QsIEJp dG1hcHNldCAqcmVsaWRzLAorCQkJCQkJCQkgICBwZ3BhX2lkZW50aWZpZXIgKnJpZHMpCit7CisJ aW50CQkJY291bnQgPSAwOworCWludAkJCXJ0aSA9IC0xOworCisJd2hpbGUgKChydGkgPSBibXNf bmV4dF9tZW1iZXIocmVsaWRzLCBydGkpKSA+PSAwKQorCXsKKwkJUmFuZ2VUYmxFbnRyeSAqcnRl ID0gcGxhbm5lcl9ydF9mZXRjaChydGksIHJvb3QpOworCisJCWlmIChydGUtPnJ0ZWtpbmQgPT0g UlRFX0pPSU4pCisJCQljb250aW51ZTsKKwkJcGdwYV9jb21wdXRlX2lkZW50aWZpZXJfYnlfcnRp KHJvb3QsIHJ0aSwgJnJpZHNbY291bnQrK10pOworCX0KKworCUFzc2VydChjb3VudCA+IDApOwor CXJldHVybiBjb3VudDsKK30KKworLyoKKyAqIENyZWF0ZSBhbiBhcnJheSBvZiByYW5nZSB0YWJs ZSBpZGVudGlmaWVycyBmb3IgYWxsIHRoZSBub24tTlVMTCwKKyAqIG5vbi1SVEVfSk9JTiBlbnRy aWVzIGluIHRoZSBQbGFubmVkU3RtdCdzIHJhbmdlIHRhYmxlLgorICovCitwZ3BhX2lkZW50aWZp ZXIgKgorcGdwYV9jcmVhdGVfaWRlbnRpZmllcnNfZm9yX3BsYW5uZWRfc3RtdChQbGFubmVkU3Rt dCAqcHN0bXQpCit7CisJSW5kZXgJCXJ0YWJsZV9sZW5ndGggPSBsaXN0X2xlbmd0aChwc3RtdC0+ cnRhYmxlKTsKKwlwZ3BhX2lkZW50aWZpZXIgKnJlc3VsdCA9IHBhbGxvYzBfYXJyYXkocGdwYV9p ZGVudGlmaWVyLCBydGFibGVfbGVuZ3RoKTsKKwlJbmRleAkgICAqdG9wX3J0aV9tYXA7CisJaW50 CQkJcnRpbmZvaW5kZXggPSAwOworCVN1YlBsYW5SVEluZm8gKnJ0aW5mbyA9IE5VTEw7CisJU3Vi UGxhblJUSW5mbyAqbmV4dHJ0aW5mbyA9IE5VTEw7CisKKwkvKgorCSAqIEFjY291bnQgZm9yIHJl bGF0aW9ucyBhZGRkZWQgYnkgaW5oZXJpdGFuY2UgZXhwYW5zaW9uIG9mIHBhcnRpdGlvbmVkCisJ ICogdGFibGVzLgorCSAqLworCXRvcF9ydGlfbWFwID0gcGdwYV9jcmVhdGVfdG9wX3J0aV9tYXAo cnRhYmxlX2xlbmd0aCwgcHN0bXQtPnJ0YWJsZSwKKwkJCQkJCQkJCQkgIHBzdG10LT5hcHBlbmRS ZWxhdGlvbnMpOworCisJLyoKKwkgKiBXaGVuIHdlIGJlZ2luIGl0ZXJhdGluZywgd2UncmUgcHJv Y2Vzc2luZyB0aGUgcG9ydGlvbiBvZiB0aGUgcmFuZ2UKKwkgKiB0YWJsZSB0aGF0IG9yaWdpbmF0 ZWQgZnJvbSB0aGUgdG9wLWxldmVsIFBsYW5uZXJJbmZvLCBzbyBzdWJydGluZm8gaXMKKwkgKiBO VUxMLiBMYXRlciwgc3VicnRpbmZvIHdpbGwgYmUgdGhlIFN1YlBsYW5SVEluZm8gZm9yIHRoZSBz dWJxdWVyeSB3aG9zZQorCSAqIHBvcnRpb24gb2YgdGhlIHJhbmdlIHRhYmxlIHdlIGFyZSBwcm9j ZXNzaW5nLiBuZXh0cnRpbmZvIGlzIGFsd2F5cyB0aGUKKwkgKiBTdWJQbGFuUlRJbmZvIHRoYXQg Zm9sbG93cyB0aGUgY3VycmVudCBvbmUsIGlmIGFueSwgc28gd2hlbiB3ZSdyZQorCSAqIHByb2Nl c3NpbmcgdGhlIHRvcC1sZXZlbCBxdWVyeSdzIHBvcnRpb24gb2YgdGhlIHJhbmdlIHRhYmxlLCB0 aGUgbmV4dAorCSAqIFN1YlBsYW5SVEluZm8gaXMgdGhlIHZlcnkgZmlyc3Qgb25lLgorCSAqLwor CWlmIChwc3RtdC0+c3VicnRpbmZvcyAhPSBOVUxMKQorCQluZXh0cnRpbmZvID0gbGluaXRpYWwo cHN0bXQtPnN1YnJ0aW5mb3MpOworCisJLyogTWFpbiBsb29wIG92ZXIgdGhlIHJhbmdlIHRhYmxl LiAqLworCWZvciAoSW5kZXggcnRpID0gMTsgcnRpIDw9IHJ0YWJsZV9sZW5ndGg7IHJ0aSsrKQor CXsKKwkJY29uc3QgY2hhciAqcGxhbl9uYW1lOworCQlJbmRleAkJdG9wX3J0aTsKKwkJUmFuZ2VU YmxFbnRyeSAqcnRlOworCQlSYW5nZVRibEVudHJ5ICp0b3BfcnRlOworCQljaGFyCSAgICpwYXJ0 bnNwID0gTlVMTDsKKwkJY2hhcgkgICAqcGFydHJlbCA9IE5VTEw7CisJCWludAkJCW9jY3VycmVu Y2U7CisJCXBncGFfaWRlbnRpZmllciAqcmlkOworCisJCS8qCisJCSAqIEFkdmFuY2UgdG8gdGhl IG5leHQgU3ViUGxhblJUSW5mbywgaWYgaXQncyB0aW1lIHRvIGRvIHRoYXQuCisJCSAqCisJCSAq IFRoaXMgbG9vcCBwcm9iYWJseSBzaG91bGRuJ3QgZXZlciBpdGVyYXRlIG1vcmUgdGhhbiBvbmNl LCBiZWNhdXNlCisJCSAqIHRoYXQgd291bGQgaW1wbHkgdGhhdCBhIHN1YnF1ZXJ5IHdhcyBwbGFu bmVkIGJ1dCBhZGRlZCBub3RoaW5nIHRvCisJCSAqIHRoZSByYW5nZSB0YWJsZTsgYnV0IGxldCdz IGJlIGRlZmVuc2l2ZSBhbmQgYXNzdW1lIGl0IGNhbiBoYXBwZW4uCisJCSAqLworCQl3aGlsZSAo bmV4dHJ0aW5mbyAhPSBOVUxMICYmIHJ0aSA+IG5leHRydGluZm8tPnJ0b2Zmc2V0KQorCQl7CisJ CQlydGluZm8gPSBuZXh0cnRpbmZvOworCQkJaWYgKCsrcnRpbmZvaW5kZXggPj0gbGlzdF9sZW5n dGgocHN0bXQtPnN1YnJ0aW5mb3MpKQorCQkJCW5leHRydGluZm8gPSBOVUxMOworCQkJZWxzZQor CQkJCW5leHRydGluZm8gPSBsaXN0X250aChwc3RtdC0+c3VicnRpbmZvcywgcnRpbmZvaW5kZXgp OworCQl9CisKKwkJLyogRmV0Y2ggdGhlIHJhbmdlIHRhYmxlIGVudHJ5LCBpZiBhbnkuICovCisJ CXJ0ZSA9IHJ0X2ZldGNoKHJ0aSwgcHN0bXQtPnJ0YWJsZSk7CisKKwkJLyoKKwkJICogV2UgY2Fu J3QgYW5kIGRvbid0IG5lZWQgdG8gaWRlbnRpZnkgbnVsbCBlbnRyaWVzLCBhbmQgd2UgZG9uJ3Qg d2FudAorCQkgKiB0byBpZGVudGlmeSBqb2luIGVudHJpZXMuCisJCSAqLworCQlpZiAocnRlID09 IE5VTEwgfHwgcnRlLT5ydGVraW5kID09IFJURV9KT0lOKQorCQkJY29udGludWU7CisKKwkJLyoK KwkJICogSWYgdGhpcyBpcyBub3QgYSByZWxhdGlvbiBhZGRlZCBieSBwYXJ0aXRpb25lZCB0YWJs ZSBleHBhbnNpb24sCisJCSAqIHRoZW4gdGhlIHRvcCBSVEkvUlRFIGFyZSBqdXN0IHRoZSBzYW1l IGFzIHRoaXMgUlRJL1JURS4gT3RoZXJ3aXNlLAorCQkgKiB3ZSBuZWVkIHRoZSBpbmZvcm1hdGlv biBmb3IgdGhlIHRvcCBSVEkvUlRFLCBhbmQgbXVzdCBhbHNvIGZldGNoCisJCSAqIHRoZSBwYXJ0 aXRpb24gc2NoZW1hIGFuZCBuYW1lLgorCQkgKi8KKwkJdG9wX3J0aSA9IHRvcF9ydGlfbWFwW3J0 aSAtIDFdOworCQlpZiAocnRpID09IHRvcF9ydGkpCisJCQl0b3BfcnRlID0gcnRlOworCQllbHNl CisJCXsKKwkJCXRvcF9ydGUgPSBydF9mZXRjaCh0b3BfcnRpLCBwc3RtdC0+cnRhYmxlKTsKKwkJ CXBhcnRuc3AgPQorCQkJCWdldF9uYW1lc3BhY2VfbmFtZV9vcl90ZW1wKGdldF9yZWxfbmFtZXNw YWNlKHJ0ZS0+cmVsaWQpKTsKKwkJCXBhcnRyZWwgPSBnZXRfcmVsX25hbWUocnRlLT5yZWxpZCk7 CisJCX0KKworCQkvKiBDb21wdXRlIHRoZSBjb3JyZWN0IG9jY3VycmVuY2UgbnVtYmVyLiAqLwor CQlvY2N1cnJlbmNlID0gcGdwYV9vY2N1cnJlbmNlX251bWJlcihwc3RtdC0+cnRhYmxlLCB0b3Bf cnRpX21hcCwKKwkJCQkJCQkJCQkJcnRpbmZvLCB0b3BfcnRpKTsKKworCQkvKiBHZXQgdGhlIG5h bWUgb2YgdGhlIGN1cnJlbnQgcGxhbiAoTlVMTCBmb3IgdG9wbGV2ZWwgcXVlcnkpLiAqLworCQlw bGFuX25hbWUgPSBydGluZm8gPT0gTlVMTCA/IE5VTEwgOiBydGluZm8tPnBsYW5fbmFtZTsKKwor CQkvKiBTYXZlIGFsbCB0aGUgZGV0YWlscyB3ZSd2ZSBkZXJpdmVkLiAqLworCQlyaWQgPSAmcmVz dWx0W3J0aSAtIDFdOworCQlyaWQtPmFsaWFzX25hbWUgPSB0b3BfcnRlLT5lcmVmLT5hbGlhc25h bWU7CisJCXJpZC0+b2NjdXJyZW5jZSA9IG9jY3VycmVuY2U7CisJCXJpZC0+cGFydG5zcCA9IHBh cnRuc3A7CisJCXJpZC0+cGFydHJlbCA9IHBhcnRyZWw7CisJCXJpZC0+cGxhbl9uYW1lID0gcGxh bl9uYW1lOworCX0KKworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBTZWFyY2ggZm9yIGEg cGdwYV9pZGVudGlmaWVyIGluIHRoZSBhcnJheSBvZiBpZGVudGlmaWVycyBjb21wdXRlZCBmb3Ig dGhlCisgKiByYW5nZSB0YWJsZS4gSWYgZXhhY3RseSBvbmUgbWF0Y2ggaXMgZm91bmQsIHJldHVy biB0aGUgbWF0Y2hpbmcgUlRJOyBlbHNlCisgKiByZXR1cm4gMC4KKyAqLworSW5kZXgKK3BncGFf Y29tcHV0ZV9ydGlfZnJvbV9pZGVudGlmaWVyKGludCBydGFibGVfbGVuZ3RoLAorCQkJCQkJCQkg cGdwYV9pZGVudGlmaWVyICpydF9pZGVudGlmaWVycywKKwkJCQkJCQkJIHBncGFfaWRlbnRpZmll ciAqcmlkKQoreworCUluZGV4CQlyZXN1bHQgPSAwOworCisJZm9yIChJbmRleCBydGkgPSAxOyBy dGkgPD0gcnRhYmxlX2xlbmd0aDsgKytydGkpCisJeworCQlwZ3BhX2lkZW50aWZpZXIgKnJ0aV9y aWQgPSAmcnRfaWRlbnRpZmllcnNbcnRpIC0gMV07CisKKwkJLyogSWYgdGhlcmUncyBubyBpZGVu dGlmaWVyIGZvciB0aGlzIFJUSSwgc2tpcCBpdC4gKi8KKwkJaWYgKHJ0aV9yaWQtPmFsaWFzX25h bWUgPT0gTlVMTCkKKwkJCWNvbnRpbnVlOworCisJCS8qCisJCSAqIElmIGl0IG1hdGNoZXMsIHJl dHVybiB0aGlzIFJUSS4gQXMgdXN1YWwsIGFuIG9taXR0ZWQgcGFydGl0aW9uCisJCSAqIHNjaGVt YSBtYXRjaGVzIGFueXRoaW5nLCBidXQgcGFydGl0aW9uIGFuZCBwbGFuIG5hbWVzIG11c3QgZWl0 aGVyCisJCSAqIG1hdGNoIGV4YWN0bHkgb3IgYmUgb21pdHRlZCBvbiBib3RoIHNpZGVzLgorCQkg Ki8KKwkJaWYgKHN0cmNtcChyaWQtPmFsaWFzX25hbWUsIHJ0aV9yaWQtPmFsaWFzX25hbWUpID09 IDAgJiYKKwkJCXJpZC0+b2NjdXJyZW5jZSA9PSBydGlfcmlkLT5vY2N1cnJlbmNlICYmCisJCQko cmlkLT5wYXJ0bnNwID09IE5VTEwgfHwgcnRpX3JpZC0+cGFydG5zcCA9PSBOVUxMIHx8CisJCQkg c3RyY21wKHJpZC0+cGFydG5zcCwgcnRpX3JpZC0+cGFydG5zcCkgPT0gMCkgJiYKKwkJCXN0cmlu Z3NfZXF1YWxfb3JfYm90aF9udWxsKHJpZC0+cGFydHJlbCwgcnRpX3JpZC0+cGFydHJlbCkgJiYK KwkJCXN0cmluZ3NfZXF1YWxfb3JfYm90aF9udWxsKHJpZC0+cGxhbl9uYW1lLCBydGlfcmlkLT5w bGFuX25hbWUpKQorCQl7CisJCQlpZiAocmVzdWx0ICE9IDApCisJCQl7CisJCQkJLyogTXVsdGlw bGUgbWF0Y2hlcyB3ZXJlIGZvdW5kLiAqLworCQkJCXJldHVybiAwOworCQkJfQorCQkJcmVzdWx0 ID0gcnRpOworCQl9CisJfQorCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIEJ1aWxkIGEg bWFwcGluZyBmcm9tIGVhY2ggUlRJIHRvIHRoZSBSVEkgd2hvc2UgYWxpYXNfbmFtZSB3aWxsIGJl IHVzZWQgdG8KKyAqIGNvbnN0cnVjdCB0aGUgcmFuZ2UgdGFibGUgaWRlbnRpZmllci4KKyAqCisg KiBGb3IgY2hpbGQgcmVsYXRpb25zLCB0aGlzIGlzIHRoZSB0b3Btb3N0IHBhcmVudCB0aGF0IGlz IHN0aWxsIG9mIHR5cGUKKyAqIFJURV9SRUxBVElPTi4gRm9yIG90aGVyIHJlbGF0aW9ucywgaXQn cyBqdXN0IHRoZSBvcmlnaW5hbCBSVEkuCisgKgorICogU2luY2Ugd2UncmUgZXZlbnR1YWxseSBn b2luZyB0byBuZWVkIHRoaXMgaW5mb3JtYXRpb24gZm9yIGV2ZXJ5IFJUSSBpbgorICogdGhlIHJh bmdlIHRhYmxlLCBpdCdzIGJlc3QgdG8gY29tcHV0ZSBhbGwgdGhlIGFuc3dlcnMgaW4gYSBzaW5n bGUgcGFzcyBvdmVyCisgKiB0aGUgQXBwZW5kUmVsSW5mbyBsaXN0LiBPdGhlcndpc2UsIHdlIG1p Z2h0IGVuZCB1cCBzZWFyY2hpbmcgdGhyb3VnaCB0aGF0CisgKiBsaXN0IHJlcGVhdGVkbHkgZm9y IGVudHJpZXMgb2YgaW50ZXJlc3QuCisgKgorICogTm90ZSB0aGF0IHRoZSByZXR1cm5lZCBhcnJh eSBpcyB1c2VzIHplcm8tYmFzZWQgaW5kZXhpbmcsIHdoaWxlIFJUSXMgdXNlCisgKiAxLWJhc2Vk IGluZGV4aW5nLCBzbyBzdWJ0cmFjdCAxIGZyb20gdGhlIFJUSSBiZWZvcmUgbG9va2luZyBpdCB1 cCBpbiB0aGUKKyAqIGFycmF5LgorICovCitzdGF0aWMgSW5kZXggKgorcGdwYV9jcmVhdGVfdG9w X3J0aV9tYXAoSW5kZXggcnRhYmxlX2xlbmd0aCwgTGlzdCAqcnRhYmxlLCBMaXN0ICphcHBpbmZv cykKK3sKKwlJbmRleAkgICAqdG9wX3J0aV9tYXAgPSBwYWxsb2MwX2FycmF5KEluZGV4LCBydGFi bGVfbGVuZ3RoKTsKKworCS8qIEluaXRpYWxseSwgbWFrZSBldmVyeSBSVEkgcG9pbnQgdG8gaXRz ZWxmLiAqLworCWZvciAoSW5kZXggcnRpID0gMTsgcnRpIDw9IHJ0YWJsZV9sZW5ndGg7ICsrcnRp KQorCQl0b3BfcnRpX21hcFtydGkgLSAxXSA9IHJ0aTsKKworCS8qIFVwZGF0ZSB0aGUgbWFwIGZv ciBlYWNoIEFwcGVuZFJlbEluZm8gb2JqZWN0LiAqLworCWZvcmVhY2hfbm9kZShBcHBlbmRSZWxJ bmZvLCBhcHBpbmZvLCBhcHBpbmZvcykKKwl7CisJCUluZGV4CQlwYXJlbnRfcnRpID0gYXBwaW5m by0+cGFyZW50X3JlbGlkOworCQlSYW5nZVRibEVudHJ5ICpwYXJlbnRfcnRlID0gcnRfZmV0Y2go cGFyZW50X3J0aSwgcnRhYmxlKTsKKworCQkvKiBJZiB0aGUgcGFyZW50IGlzIG5vdCBSVEVfUkVM QVRJT04sIGlnbm9yZSB0aGlzIGVudHJ5LiAqLworCQlpZiAocGFyZW50X3J0ZS0+cnRla2luZCAh PSBSVEVfUkVMQVRJT04pCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBNYXAgdGhlIGNoaWxk IHRvIHdoZXJldmVyIHdlIG1hcHBlZCB0aGUgcGFyZW50LiBQYXJlbnRzIGFsd2F5cworCQkgKiBw cmVjZWRlIHRoZWlyIGNoaWxkcmVuIGluIHRoZSBBcHBlbmRSZWxJbmZvIGxpc3QsIHNvIHRoaXMg c2hvdWxkCisJCSAqIHdvcmsgb3V0LgorCQkgKi8KKwkJdG9wX3J0aV9tYXBbYXBwaW5mby0+Y2hp bGRfcmVsaWQgLSAxXSA9IHRvcF9ydGlfbWFwW3BhcmVudF9ydGkgLSAxXTsKKwl9CisKKwlyZXR1 cm4gdG9wX3J0aV9tYXA7Cit9CisKKy8qCisgKiBGaW5kIHRoZSBvY2N1cmVuY2UgbnVtYmVyIG9m IGEgY2VydGFpbiByZWxhdGlvbiB3aXRoaW4gYSBjZXJ0YWluIHN1YnF1ZXJ5LgorICoKKyAqIFRo ZSBzYW1lIGFsaWFzIG5hbWUgY2FuIG9jY3VyIG11bHRpcGxlIHRpbWVzIHdpdGhpbiBhIHN1YnF1 ZXJ5LCBidXQgd2Ugd2FudAorICogdG8gZGlzYW1iaWd1YXRlIGJ5IGdpdmluZyBkaWZmZXJlbnQg b2NjdXJyZW5jZXMgZGlmZmVyZW50IGludGVnZXIgaW5kZXhlcy4KKyAqIEhvd2V2ZXIsIGNoaWxk IHRhYmxlcyBhcmUgZGlzYW1iaWd1YXRlZCBieSBpbmNsdWRpbmcgdGhlIHRhYmxlIG5hbWUgcmF0 aGVyCisgKiB0aGFuIGJ5IGluY3JlbWVudGluZyB0aGUgb2NjdXJyZW5jZSBudW1iZXI7IGFuZCBq b2lucyBhcmUgbm90IG5hbWVkIGFuZCBzbworICogc2hvdWxkbid0IGluY3JlbWVudCB0aGUgb2Nj dXJlbmNlIG51bWJlciBlaXRoZXIuCisgKi8KK3N0YXRpYyBpbnQKK3BncGFfb2NjdXJyZW5jZV9u dW1iZXIoTGlzdCAqcnRhYmxlLCBJbmRleCAqdG9wX3J0aV9tYXAsCisJCQkJCSAgIFN1YlBsYW5S VEluZm8gKnJ0aW5mbywgSW5kZXggcnRpKQoreworCUluZGV4CQlydG9mZnNldCA9IChydGluZm8g PT0gTlVMTCkgPyAwIDogcnRpbmZvLT5ydG9mZnNldDsKKwlpbnQJCQlvY2N1cnJlbmNlID0gMTsK KwlSYW5nZVRibEVudHJ5ICpydGUgPSBydF9mZXRjaChydGksIHJ0YWJsZSk7CisKKwlmb3IgKElu ZGV4IHByaW9yX3J0aSA9IHJ0b2Zmc2V0ICsgMTsgcHJpb3JfcnRpIDwgcnRpOyArK3ByaW9yX3J0 aSkKKwl7CisJCVJhbmdlVGJsRW50cnkgKnByaW9yX3J0ZTsKKworCQkvKgorCQkgKiBJZiB0aGlz IGlzIGEgY2hpbGQgcmVsIG9mIGEgcGFyZW50IHRoYXQgaXMgYSByZWxhdGlvbiwgc2tpcCBpdC4K KwkJICoKKwkJICogU3VjaCByYW5nZSB0YWJsZSBlbnRyaWVzIGFyZSBkaXNhbWJpZ3VhdGVkIGJ5 IG1lbnRpb25pbmcgdGhlIHNjaGVtYQorCQkgKiBhbmQgbmFtZSBvZiB0aGUgdGFibGUsIG5vdCBi eSBjb3VudGluZyB0aGVtIGFzIHNlcGFyYXRlIG9jY3VycmVuY2VzCisJCSAqIG9mIHRoZSBzYW1l IHRhYmxlLgorCQkgKi8KKwkJaWYgKHRvcF9ydGlfbWFwW3ByaW9yX3J0aSAtIDFdICE9IHByaW9y X3J0aSkKKwkJCWNvbnRpbnVlOworCisJCS8qIFNraXAgam9pbnMuICovCisJCXByaW9yX3J0ZSA9 IHJ0X2ZldGNoKHByaW9yX3J0aSwgcnRhYmxlKTsKKwkJaWYgKHByaW9yX3J0ZS0+cnRla2luZCA9 PSBSVEVfSk9JTikKKwkJCWNvbnRpbnVlOworCisJCS8qIFNraXAgaWYgdGhlIGFsaWFzIG5hbWUg ZGlmZmVycy4gKi8KKwkJaWYgKHN0cmNtcChwcmlvcl9ydGUtPmVyZWYtPmFsaWFzbmFtZSwgcnRl LT5lcmVmLT5hbGlhc25hbWUpICE9IDApCisJCQljb250aW51ZTsKKworCQkvKiBMb29rcyBsaWtl IGEgdHJ1ZSBkdXBsaWNhdGUuICovCisJCSsrb2NjdXJyZW5jZTsKKwl9CisKKwlyZXR1cm4gb2Nj dXJyZW5jZTsKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9pZGVu dGlmaWVyLmggYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfaWRlbnRpZmllci5oCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5iMDAwZDJiNzA4MQotLS0gL2Rldi9u dWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9pZGVudGlmaWVyLmgKQEAgLTAs MCArMSw1MiBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogcGdwYV9pZGVudGlmaWVyLmgK KyAqCSAgY3JlYXRlIGFwcHJvcHJpYXRlIGlkZW50aWZpZXJzIGZvciByYW5nZSB0YWJsZSBlbnRy aWVzCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERl dmVsb3BtZW50IEdyb3VwCisgKgorICoJICBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfaWRl bnRpZmllci5oCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworI2lmbmRlZiBQR1BBX0lE RU5USUZJRVJfSAorI2RlZmluZSBQR1BBX0lERU5USUZJRVJfSAorCisjaW5jbHVkZSAibm9kZXMv cGF0aG5vZGVzLmgiCisjaW5jbHVkZSAibm9kZXMvcGxhbm5vZGVzLmgiCisKK3R5cGVkZWYgc3Ry dWN0IHBncGFfaWRlbnRpZmllcgoreworCWNvbnN0IGNoYXIgKmFsaWFzX25hbWU7CisJaW50CQkJ b2NjdXJyZW5jZTsKKwljb25zdCBjaGFyICpwYXJ0bnNwOworCWNvbnN0IGNoYXIgKnBhcnRyZWw7 CisJY29uc3QgY2hhciAqcGxhbl9uYW1lOworfSBwZ3BhX2lkZW50aWZpZXI7CisKKy8qIENvbnZl bmllbmNlIGZ1bmN0aW9uIGZvciBjb21wYXJpbmcgcG9zc2libHktTlVMTCBzdHJpbmdzLiAqLwor c3RhdGljIGlubGluZSBib29sCitzdHJpbmdzX2VxdWFsX29yX2JvdGhfbnVsbChjb25zdCBjaGFy ICphLCBjb25zdCBjaGFyICpiKQoreworCWlmIChhID09IGIpCisJCXJldHVybiB0cnVlOworCWVs c2UgaWYgKGEgPT0gTlVMTCB8fCBiID09IE5VTEwpCisJCXJldHVybiBmYWxzZTsKKwllbHNlCisJ CXJldHVybiBzdHJjbXAoYSwgYikgPT0gMDsKK30KKworZXh0ZXJuIGNvbnN0IGNoYXIgKnBncGFf aWRlbnRpZmllcl9zdHJpbmcoY29uc3QgcGdwYV9pZGVudGlmaWVyICpyaWQpOworZXh0ZXJuIHZv aWQgcGdwYV9jb21wdXRlX2lkZW50aWZpZXJfYnlfcnRpKFBsYW5uZXJJbmZvICpyb290LCBJbmRl eCBydGksCisJCQkJCQkJCQkJICAgcGdwYV9pZGVudGlmaWVyICpyaWQpOworZXh0ZXJuIGludAlw Z3BhX2NvbXB1dGVfaWRlbnRpZmllcnNfYnlfcmVsaWRzKFBsYW5uZXJJbmZvICpyb290LAorCQkJ CQkJCQkJCQkgICBCaXRtYXBzZXQgKnJlbGlkcywKKwkJCQkJCQkJCQkJICAgcGdwYV9pZGVudGlm aWVyICpyaWRzKTsKK2V4dGVybiBwZ3BhX2lkZW50aWZpZXIgKnBncGFfY3JlYXRlX2lkZW50aWZp ZXJzX2Zvcl9wbGFubmVkX3N0bXQoUGxhbm5lZFN0bXQgKnBzdG10KTsKKworZXh0ZXJuIEluZGV4 IHBncGFfY29tcHV0ZV9ydGlfZnJvbV9pZGVudGlmaWVyKGludCBydGFibGVfbGVuZ3RoLAorCQkJ CQkJCQkJCQkgIHBncGFfaWRlbnRpZmllciAqcnRfaWRlbnRpZmllcnMsCisJCQkJCQkJCQkJCSAg cGdwYV9pZGVudGlmaWVyICpyaWQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdf cGxhbl9hZHZpY2UvcGdwYV9qb2luLmMgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfam9p bi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5lYzhlMWE2NjZlYwot LS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9qb2luLmMKQEAg LTAsMCArMSw2MjkgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHBncGFfam9pbi5jCisg KgkgIGFuYWx5c2lzIG9mIGpvaW5zIGluIFBsYW4gdHJlZXMKKyAqCisgKiBDb3B5cmlnaHQgKGMp IDIwMTYtMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKgkg IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9qb2luLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyAqLworCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgInBncGFfam9pbi5o IgorI2luY2x1ZGUgInBncGFfc2Nhbi5oIgorI2luY2x1ZGUgInBncGFfd2Fsa2VyLmgiCisKKyNp bmNsdWRlICJub2Rlcy9wYXRobm9kZXMuaCIKKyNpbmNsdWRlICJub2Rlcy9wcmludC5oIgorI2lu Y2x1ZGUgInBhcnNlci9wYXJzZXRyZWUuaCIKKworLyoKKyAqIFRlbXBvcmFyeSBvYmplY3QgdXNl ZCB3aGVuIHVucm9sbGluZyBhIGpvaW4gdHJlZS4KKyAqLworc3RydWN0IHBncGFfam9pbl91bnJv bGxlcgoreworCXVuc2lnbmVkCW5hbGxvY2F0ZWQ7CisJdW5zaWduZWQJbnVzZWQ7CisJUGxhbgkg ICAqb3V0ZXJfc3VicGxhbjsKKwlFbGlkZWROb2RlICpvdXRlcl9lbGlkZWRfbm9kZTsKKwlib29s CQlvdXRlcl9iZW5lYXRoX2FueV9nYXRoZXI7CisJcGdwYV9qb2luX3N0cmF0ZWd5ICpzdHJhdGVn eTsKKwlQbGFuCSAgKippbm5lcl9zdWJwbGFuczsKKwlFbGlkZWROb2RlICoqaW5uZXJfZWxpZGVk X25vZGVzOworCXBncGFfam9pbl91bnJvbGxlciAqKmlubmVyX3Vucm9sbGVyczsKKwlib29sCSAg ICppbm5lcl9iZW5lYXRoX2FueV9nYXRoZXI7Cit9OworCitzdGF0aWMgcGdwYV9qb2luX3N0cmF0 ZWd5IHBncGFfZGVjb21wb3NlX2pvaW4ocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIs CisJCQkJCQkJCQkJCSAgUGxhbiAqcGxhbiwKKwkJCQkJCQkJCQkJICBQbGFuICoqcmVhbG91dGVy LAorCQkJCQkJCQkJCQkgIFBsYW4gKipyZWFsaW5uZXIsCisJCQkJCQkJCQkJCSAgRWxpZGVkTm9k ZSAqKmVsaWRlZHJlYWxvdXRlciwKKwkJCQkJCQkJCQkJICBFbGlkZWROb2RlICoqZWxpZGVkcmVh bGlubmVyLAorCQkJCQkJCQkJCQkgIGJvb2wgKmZvdW5kX2FueV9vdXRlcl9nYXRoZXIsCisJCQkJ CQkJCQkJCSAgYm9vbCAqZm91bmRfYW55X2lubmVyX2dhdGhlcik7CitzdGF0aWMgRWxpZGVkTm9k ZSAqcGdwYV9kZXNjZW5kX25vZGUoUGxhbm5lZFN0bXQgKnBzdG10LCBQbGFuICoqcGxhbik7Citz dGF0aWMgRWxpZGVkTm9kZSAqcGdwYV9kZXNjZW5kX2FueV9nYXRoZXIoUGxhbm5lZFN0bXQgKnBz dG10LCBQbGFuICoqcGxhbiwKKwkJCQkJCQkJCQkgICBib29sICpmb3VuZF9hbnlfZ2F0aGVyKTsK K3N0YXRpYyBib29sIHBncGFfZGVzY2VuZF9hbnlfdW5pcXVlKFBsYW5uZWRTdG10ICpwc3RtdCwg UGxhbiAqKnBsYW4sCisJCQkJCQkJCQlFbGlkZWROb2RlICoqZWxpZGVkX25vZGUpOworCitzdGF0 aWMgYm9vbCBpc19yZXN1bHRfbm9kZV93aXRoX2NoaWxkKFBsYW4gKnBsYW4pOworc3RhdGljIGJv b2wgaXNfc29ydGluZ19wbGFuKFBsYW4gKnBsYW4pOworCisvKgorICogQ3JlYXRlIGFuIGluaXRp YWxseS1lbXB0eSBvYmplY3QgZm9yIHVucm9sbGluZyBqb2lucy4KKyAqCisgKiBUaGlzIGZ1bmN0 aW9uIGNyZWF0ZXMgYSBoZWxwZXIgb2JqZWN0IHRoYXQgY2FuIGxhdGVyIGJlIHVzZWQgdG8gY3Jl YXRlIGEKKyAqIHBncGFfdW5yb2xsZWRfam9pbiwgYWZ0ZXIgZmlyc3QgY2FsbGluZyBwZ3BhX3Vu cm9sbF9qb2luIG9uZSBvciBtb3JlIHRpbWVzLgorICovCitwZ3BhX2pvaW5fdW5yb2xsZXIgKgor cGdwYV9jcmVhdGVfam9pbl91bnJvbGxlcih2b2lkKQoreworCXBncGFfam9pbl91bnJvbGxlciAq am9pbl91bnJvbGxlcjsKKworCWpvaW5fdW5yb2xsZXIgPSBwYWxsb2MwX29iamVjdChwZ3BhX2pv aW5fdW5yb2xsZXIpOworCWpvaW5fdW5yb2xsZXItPm5hbGxvY2F0ZWQgPSA0OworCWpvaW5fdW5y b2xsZXItPnN0cmF0ZWd5ID0KKwkJcGFsbG9jX2FycmF5KHBncGFfam9pbl9zdHJhdGVneSwgam9p bl91bnJvbGxlci0+bmFsbG9jYXRlZCk7CisJam9pbl91bnJvbGxlci0+aW5uZXJfc3VicGxhbnMg PQorCQlwYWxsb2NfYXJyYXkoUGxhbiAqLCBqb2luX3Vucm9sbGVyLT5uYWxsb2NhdGVkKTsKKwlq b2luX3Vucm9sbGVyLT5pbm5lcl9lbGlkZWRfbm9kZXMgPQorCQlwYWxsb2NfYXJyYXkoRWxpZGVk Tm9kZSAqLCBqb2luX3Vucm9sbGVyLT5uYWxsb2NhdGVkKTsKKwlqb2luX3Vucm9sbGVyLT5pbm5l cl91bnJvbGxlcnMgPQorCQlwYWxsb2NfYXJyYXkocGdwYV9qb2luX3Vucm9sbGVyICosIGpvaW5f dW5yb2xsZXItPm5hbGxvY2F0ZWQpOworCWpvaW5fdW5yb2xsZXItPmlubmVyX2JlbmVhdGhfYW55 X2dhdGhlciA9CisJCXBhbGxvY19hcnJheShib29sLCBqb2luX3Vucm9sbGVyLT5uYWxsb2NhdGVk KTsKKworCXJldHVybiBqb2luX3Vucm9sbGVyOworfQorCisvKgorICogVW5yb2xsIG9uZSBsZXZl bCBvZiBhbiB1bnJvbGxhYmxlIGpvaW4gdHJlZS4KKyAqCisgKiBPdXIgYmFzaWMgZ29hbCBoZXJl IGlzIHRvIHVucm9sbCBqb2luIHRyZWVzIGFzIHRoZXkgb2NjdXIgaW4gdGhlIFBsYW4KKyAqIHRy ZWUgaW50byBhIHNpbXBsZXIgYW5kIG1vcmUgcmVndWxhciBzdHJ1Y3R1cmUgdGhhdCB3ZSBjYW4g bW9yZSBlYXNpbHkKKyAqIHVzZSBmb3IgZnVydGhlciBwcm9jZXNzaW5nLiBVbnJvbGxpbmcgaXMg b3V0ZXItZGVlcCwgc28gaWYgdGhlIHBsYW4gdHJlZQorICogaGFzIEpvaW4xKEpvaW4yKEEsQiks Sm9pbjMoQyxEKSksIHRoZSBzYW1lIGpvaW4gdW5yb2xsZXIgb2JqZWN0IHNob3VsZCBiZQorICog dXNlZCBmb3IgSm9pbjEgYW5kIEpvaW4yLCBidXQgYSBkaWZmZXJlbnQgb25lIHdpbGwgYmUgbmVl ZGVkIGZvciBKb2luMywKKyAqIHNpbmNlIHRoYXQgaW52b2x2ZXMgYSBqb2luIHdpdGhpbiB0aGUg KmlubmVyKiBzaWRlIG9mIGFub3RoZXIgam9pbi4KKyAqCisgKiBwZ3BhX3BsYW5fd2Fsa2VyIGNy ZWF0ZXMgYSAidG9wIGxldmVsIiBqb2luIHVucm9sbGVyIG9iamVjdCB3aGVuIGl0CisgKiBlbmNv dW50ZXJzIGEgam9pbiBpbiBhIHBvcnRpb24gb2YgdGhlIHBsYW4gdHJlZSBpbiB3aGljaCBubyBq b2luIHVucm9sbGVyCisgKiBpcyBhbHJlYWR5IGFjdGl2ZS4gRnJvbSB0aGVyZSwgdGhpcyBmdW5j dGlvbiBpcyByZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5nCisgKiB0byB3aGF0IHBvcnRpb24gb2Yg dGhlIHBsYW4gdHJlZSB0aGF0IGpvaW4gdW5yb2xsZXIgYXBwbGllcywgYW5kIGZvcgorICogY3Jl YXRpbmcgYW55IHN1Ym9yZGluYXRlIGpvaW4gdW5yb2xsZXIgb2JqZWN0cyB0aGF0IGFyZSBuZWVk ZWQgYXMgYSByZXN1bHQKKyAqIG9mIG5vbi1vdXRlci1kZWVwIGpvaW4gdHJlZXMuIFdlIGRvIHRo aXMgYnkgcmV0dXJuaW5nIHRoZSBqb2luIHVucm9sbGVyCisgKiBvYmplY3RzIHRoYXQgc2hvdWxk IGJlIHVzZWQgZm9yIGZ1cnRoZXIgdHJhdmVyc2FsIG9mIHRoZSBvdXRlciBhbmQgaW5uZXIKKyAq IHN1YnRyZWVzIG9mIHRoZSBjdXJyZW50IHBsYW4gbm9kZSB2aWEgKm91dGVyX2pvaW5fdW5yb2xs ZXIgYW5kCisgKiAqaW5uZXJfam9pbl91bnJvbGxlciwgcmVzcGVjdGl2ZWx5LgorICovCit2b2lk CitwZ3BhX3Vucm9sbF9qb2luKHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLCBQbGFu ICpwbGFuLAorCQkJCSBib29sIGJlbmVhdGhfYW55X2dhdGhlciwKKwkJCQkgcGdwYV9qb2luX3Vu cm9sbGVyICpqb2luX3Vucm9sbGVyLAorCQkJCSBwZ3BhX2pvaW5fdW5yb2xsZXIgKipvdXRlcl9q b2luX3Vucm9sbGVyLAorCQkJCSBwZ3BhX2pvaW5fdW5yb2xsZXIgKippbm5lcl9qb2luX3Vucm9s bGVyKQoreworCXBncGFfam9pbl9zdHJhdGVneSBzdHJhdGVneTsKKwlQbGFuCSAgICpyZWFsaW5u ZXIsCisJCQkgICAqcmVhbG91dGVyOworCUVsaWRlZE5vZGUgKmVsaWRlZGlubmVyLAorCQkJICAg KmVsaWRlZG91dGVyOworCWludAkJCW47CisJYm9vbAkJZm91bmRfYW55X291dGVyX2dhdGhlciA9 IGZhbHNlOworCWJvb2wJCWZvdW5kX2FueV9pbm5lcl9nYXRoZXIgPSBmYWxzZTsKKworCUFzc2Vy dChqb2luX3Vucm9sbGVyICE9IE5VTEwpOworCisJLyoKKwkgKiBXZSBuZWVkIHRvIHBhc3MgdGhl IGpvaW5fdW5yb2xsZXIgb2JqZWN0IGRvd24gdGhyb3VnaCBjZXJ0YWluIHR5cGVzIG9mCisJICog cGxhbiBub2RlcyAtLSBhbnl0aGluZyB0aGF0J3MgY29uc2lkZXJlZCBwYXJ0IG9mIHRoZSBqb2lu IHN0cmF0ZWd5LCBhbmQKKwkgKiBhbnkgb3RoZXIgbm9kZXMgdGhhdCBjYW4gb2NjdXIgaW4gYSBq b2luIHRyZWUgZGVzcGl0ZSBub3QgYmVpbmcgc2NhbnMKKwkgKiBvciBqb2lucy4KKwkgKgorCSAq IFRoaXMgaW5jbHVkZXM6CisJICoKKwkgKiAoMSkgTWF0ZXJpYWxpemUsIE1lbW9pemUsIGFuZCBI YXNoIG5vZGVzLCB3aGljaCBhcmUgcGFydCBvZiB0aGUgam9pbgorCSAqIHN0cmF0ZWd5LAorCSAq CisJICogKDIpIEdhdGhlciBhbmQgR2F0aGVyIE1lcmdlIG5vZGVzLCB3aGljaCBjYW4gb2NjdXIg YXQgYW55IHBvaW50IGluIHRoZQorCSAqIGpvaW4gdHJlZSB3aGVyZSB0aGUgcGxhbm5lciBkZWNp ZGVkIHRvIGluaXRpYXRlIHBhcmFsbGVsaXNtLAorCSAqCisJICogKDMpIFNvcnQgYW5kIEluY3Jl bWVudGFsU29ydCBub2Rlcywgd2hpY2ggY2FuIG9jY3VyIGJlbmVhdGggTWVyZ2VKb2luCisJICog b3IgR2F0aGVyTWVyZ2UsCisJICoKKwkgKiAoNCkgQWdnIGFuZCBVbmlxdWUgbm9kZXMsIHdoaWNo IGNhbiBvY2N1ciB3aGVuIHdlIGRlY2lkZSB0byBtYWtlIHRoZQorCSAqIG51bGxhYmxlIHNpZGUg b2YgYSBzZW1pam9pbiB1bmlxdWUgYW5kIHRoZW4gam9pbiB0aGUgcmVzdWx0LCBhbmQKKwkgKgor CSAqICg1KSBSZXN1bHQgbm9kZXMgd2l0aCBjaGlsZHJlbiwgd2hpY2ggY2FuIGJlIGFkZGVkIGVp dGhlciB0byBwcm9qZWN0IHRvCisJICogZW5mb3JjZSBhIG9uZS10aW1lIGZpbHRlciAoYnV0IFJl c3VsdCBub2RlcyB3aXRob3V0IGNoaWxkcmVuIGFyZQorCSAqIGRlZ2VuZXJhdGUgc2NhbnMgb3Ig am9pbnMpLgorCSAqLworCWlmIChJc0EocGxhbiwgTWF0ZXJpYWwpIHx8IElzQShwbGFuLCBNZW1v aXplKSB8fCBJc0EocGxhbiwgSGFzaCkKKwkJfHwgSXNBKHBsYW4sIEdhdGhlcikgfHwgSXNBKHBs YW4sIEdhdGhlck1lcmdlKQorCQl8fCBpc19zb3J0aW5nX3BsYW4ocGxhbikgfHwgSXNBKHBsYW4s IEFnZykgfHwgSXNBKHBsYW4sIFVuaXF1ZSkKKwkJfHwgaXNfcmVzdWx0X25vZGVfd2l0aF9jaGls ZChwbGFuKSkKKwl7CisJCSpvdXRlcl9qb2luX3Vucm9sbGVyID0gam9pbl91bnJvbGxlcjsKKwkJ cmV0dXJuOworCX0KKworCS8qCisJICogU2luY2Ugd2UndmUgYWxyZWFkeSBoYW5kbGVkIG5vZGVz IHRoYXQgcmVxdWlyZSBwYXNzLXRocm91Z2ggdHJlYXRtZW50LAorCSAqIHRoaXMgc2hvdWxkIGJl IGFuIHVucm9sbGFibGUgam9pbi4KKwkgKi8KKwlzdHJhdGVneSA9IHBncGFfZGVjb21wb3NlX2pv aW4od2Fsa2VyLCBwbGFuLAorCQkJCQkJCQkgICAmcmVhbG91dGVyLCAmcmVhbGlubmVyLAorCQkJ CQkJCQkgICAmZWxpZGVkb3V0ZXIsICZlbGlkZWRpbm5lciwKKwkJCQkJCQkJICAgJmZvdW5kX2Fu eV9vdXRlcl9nYXRoZXIsCisJCQkJCQkJCSAgICZmb3VuZF9hbnlfaW5uZXJfZ2F0aGVyKTsKKwor CS8qIElmIG91ciB3b3Jrc3BhY2UgaXMgZnVsbCwgZXhwYW5kIGl0LiAqLworCWlmIChqb2luX3Vu cm9sbGVyLT5udXNlZCA+PSBqb2luX3Vucm9sbGVyLT5uYWxsb2NhdGVkKQorCXsKKwkJam9pbl91 bnJvbGxlci0+bmFsbG9jYXRlZCAqPSAyOworCQlqb2luX3Vucm9sbGVyLT5zdHJhdGVneSA9CisJ CQlyZXBhbGxvY19hcnJheShqb2luX3Vucm9sbGVyLT5zdHJhdGVneSwKKwkJCQkJCSAgIHBncGFf am9pbl9zdHJhdGVneSwKKwkJCQkJCSAgIGpvaW5fdW5yb2xsZXItPm5hbGxvY2F0ZWQpOworCQlq b2luX3Vucm9sbGVyLT5pbm5lcl9zdWJwbGFucyA9CisJCQlyZXBhbGxvY19hcnJheShqb2luX3Vu cm9sbGVyLT5pbm5lcl9zdWJwbGFucywKKwkJCQkJCSAgIFBsYW4gKiwKKwkJCQkJCSAgIGpvaW5f dW5yb2xsZXItPm5hbGxvY2F0ZWQpOworCQlqb2luX3Vucm9sbGVyLT5pbm5lcl9lbGlkZWRfbm9k ZXMgPQorCQkJcmVwYWxsb2NfYXJyYXkoam9pbl91bnJvbGxlci0+aW5uZXJfZWxpZGVkX25vZGVz LAorCQkJCQkJICAgRWxpZGVkTm9kZSAqLAorCQkJCQkJICAgam9pbl91bnJvbGxlci0+bmFsbG9j YXRlZCk7CisJCWpvaW5fdW5yb2xsZXItPmlubmVyX2JlbmVhdGhfYW55X2dhdGhlciA9CisJCQly ZXBhbGxvY19hcnJheShqb2luX3Vucm9sbGVyLT5pbm5lcl9iZW5lYXRoX2FueV9nYXRoZXIsCisJ CQkJCQkgICBib29sLAorCQkJCQkJICAgam9pbl91bnJvbGxlci0+bmFsbG9jYXRlZCk7CisJCWpv aW5fdW5yb2xsZXItPmlubmVyX3Vucm9sbGVycyA9CisJCQlyZXBhbGxvY19hcnJheShqb2luX3Vu cm9sbGVyLT5pbm5lcl91bnJvbGxlcnMsCisJCQkJCQkgICBwZ3BhX2pvaW5fdW5yb2xsZXIgKiwK KwkJCQkJCSAgIGpvaW5fdW5yb2xsZXItPm5hbGxvY2F0ZWQpOworCX0KKworCS8qCisJICogU2lu Y2Ugd2UncmUgZmxhdHRlbmluZyBvdXRlci1kZWVwIGpvaW4gdHJlZXMsIGl0IGZvbGxvd3MgdGhh dCBpZiB0aGUKKwkgKiBvdXRlciBzaWRlIGlzIHN0aWxsIGFuIHVucm9sbGFibGUgam9pbiwgaXQg c2hvdWxkIGJlIHVucm9sbGVkIGludG8gdGhpcworCSAqIHNhbWUgb2JqZWN0LiBPdGhlcndpc2Us IHdlJ3ZlIHJlYWNoZWQgdGhlIGxpbWl0IG9mIHdoYXQgd2UgY2FuIHVucm9sbAorCSAqIGludG8g dGhpcyBvYmplY3QgYW5kIG11c3QgcmVtZW1iZXIgdGhlIG91dGVyIHNpZGUgYXMgdGhlIGZpbmFs IG91dGVyCisJICogc3VicGxhbi4KKwkgKi8KKwlpZiAoZWxpZGVkb3V0ZXIgPT0gTlVMTCAmJiBw Z3BhX2lzX2pvaW4ocmVhbG91dGVyKSkKKwkJKm91dGVyX2pvaW5fdW5yb2xsZXIgPSBqb2luX3Vu cm9sbGVyOworCWVsc2UKKwl7CisJCWpvaW5fdW5yb2xsZXItPm91dGVyX3N1YnBsYW4gPSByZWFs b3V0ZXI7CisJCWpvaW5fdW5yb2xsZXItPm91dGVyX2VsaWRlZF9ub2RlID0gZWxpZGVkb3V0ZXI7 CisJCWpvaW5fdW5yb2xsZXItPm91dGVyX2JlbmVhdGhfYW55X2dhdGhlciA9CisJCQliZW5lYXRo X2FueV9nYXRoZXIgfHwgZm91bmRfYW55X291dGVyX2dhdGhlcjsKKwl9CisKKwkvKgorCSAqIFN0 b3JlIHRoZSBpbm5lciBzdWJwbGFuLiBJZiBpdCdzIGFuIHVucm9sbGFibGUgam9pbiwgaXQgbmVl ZHMgdG8gYmUKKwkgKiBmbGF0dGVuZWQgaW4gdHVybiwgYnV0IGludG8gYSBuZXcgdW5yb2xsZXIg b2JqZWN0LCBub3QgdGhpcyBvbmUuCisJICovCisJbiA9IGpvaW5fdW5yb2xsZXItPm51c2VkKys7 CisJam9pbl91bnJvbGxlci0+c3RyYXRlZ3lbbl0gPSBzdHJhdGVneTsKKwlqb2luX3Vucm9sbGVy LT5pbm5lcl9zdWJwbGFuc1tuXSA9IHJlYWxpbm5lcjsKKwlqb2luX3Vucm9sbGVyLT5pbm5lcl9l bGlkZWRfbm9kZXNbbl0gPSBlbGlkZWRpbm5lcjsKKwlqb2luX3Vucm9sbGVyLT5pbm5lcl9iZW5l YXRoX2FueV9nYXRoZXJbbl0gPQorCQliZW5lYXRoX2FueV9nYXRoZXIgfHwgZm91bmRfYW55X2lu bmVyX2dhdGhlcjsKKwlpZiAoZWxpZGVkaW5uZXIgPT0gTlVMTCAmJiBwZ3BhX2lzX2pvaW4ocmVh bGlubmVyKSkKKwkJKmlubmVyX2pvaW5fdW5yb2xsZXIgPSBwZ3BhX2NyZWF0ZV9qb2luX3Vucm9s bGVyKCk7CisJZWxzZQorCQkqaW5uZXJfam9pbl91bnJvbGxlciA9IE5VTEw7CisJam9pbl91bnJv bGxlci0+aW5uZXJfdW5yb2xsZXJzW25dID0gKmlubmVyX2pvaW5fdW5yb2xsZXI7Cit9CisKKy8q CisgKiBVc2UgdGhlIGRhdGEgd2UndmUgYWNjdW11bGF0ZWQgaW4gYSBwZ3BhX2pvaW5fdW5yb2xs ZXIgb2JqZWN0IHRvIGNvbnN0cnVjdAorICogYSBwZ3BhX3Vucm9sbGVkX2pvaW4uCisgKi8KK3Bn cGFfdW5yb2xsZWRfam9pbiAqCitwZ3BhX2J1aWxkX3Vucm9sbGVkX2pvaW4ocGdwYV9wbGFuX3dh bGtlcl9jb250ZXh0ICp3YWxrZXIsCisJCQkJCQkgcGdwYV9qb2luX3Vucm9sbGVyICpqb2luX3Vu cm9sbGVyKQoreworCXBncGFfdW5yb2xsZWRfam9pbiAqdWpvaW47CisJaW50CQkJaTsKKworCS8q CisJICogV2Ugc2hvdWxkbid0IGhhdmUgZ29uZSBldmVuIHNvIGZhciBhcyB0byBjcmVhdGUgYSBq b2luIHVucm9sbGVyIHVubGVzcworCSAqIHdlIGZvdW5kIGF0IGxlYXN0IG9uZSB1bnJvbGxhYmxl IGpvaW4uCisJICovCisJQXNzZXJ0KGpvaW5fdW5yb2xsZXItPm51c2VkID4gMCk7CisKKwkvKiBB bGxvY2F0ZSByZXN1bHQgc3RydWN0dXJlcy4gKi8KKwl1am9pbiA9IHBhbGxvYzBfb2JqZWN0KHBn cGFfdW5yb2xsZWRfam9pbik7CisJdWpvaW4tPm5pbm5lciA9IGpvaW5fdW5yb2xsZXItPm51c2Vk OworCXVqb2luLT5zdHJhdGVneSA9IHBhbGxvYzBfYXJyYXkocGdwYV9qb2luX3N0cmF0ZWd5LCBq b2luX3Vucm9sbGVyLT5udXNlZCk7CisJdWpvaW4tPmlubmVyID0gcGFsbG9jMF9hcnJheShwZ3Bh X2pvaW5fbWVtYmVyLCBqb2luX3Vucm9sbGVyLT5udXNlZCk7CisKKwkvKiBIYW5kbGUgdGhlIG91 dGVybW9zdCBqb2luLiAqLworCXVqb2luLT5vdXRlci5wbGFuID0gam9pbl91bnJvbGxlci0+b3V0 ZXJfc3VicGxhbjsKKwl1am9pbi0+b3V0ZXIuZWxpZGVkX25vZGUgPSBqb2luX3Vucm9sbGVyLT5v dXRlcl9lbGlkZWRfbm9kZTsKKwl1am9pbi0+b3V0ZXIuc2NhbiA9CisJCXBncGFfYnVpbGRfc2Nh bih3YWxrZXIsIHVqb2luLT5vdXRlci5wbGFuLAorCQkJCQkJdWpvaW4tPm91dGVyLmVsaWRlZF9u b2RlLAorCQkJCQkJam9pbl91bnJvbGxlci0+b3V0ZXJfYmVuZWF0aF9hbnlfZ2F0aGVyLAorCQkJ CQkJdHJ1ZSk7CisKKwkvKgorCSAqIFdlIHdhbnQgdGhlIGpvaW5zIGZyb20gdGhlIGRlZXBlc3Qg cGFydCBvZiB0aGUgcGxhbiB0cmVlIHRvIGFwcGVhcgorCSAqIGZpcnN0IGluIHRoZSByZXN1bHQg b2JqZWN0LCBidXQgdGhlIGpvaW4gdW5yb2xsZXIgYWRkcyB0aGVtIGluIGV4YWN0bHkKKwkgKiB0 aGUgcmV2ZXJzZSBvZiB0aGF0IG9yZGVyLCBzbyB3ZSBuZWVkIHRvIGZsaXAgdGhlIG9yZGVyIG9m IHRoZSBhcnJheXMKKwkgKiB3aGVuIGNvbnN0cnVjdGluZyB0aGUgZmluYWwgcmVzdWx0LgorCSAq LworCWZvciAoaSA9IDA7IGkgPCBqb2luX3Vucm9sbGVyLT5udXNlZDsgKytpKQorCXsKKwkJaW50 CQkJayA9IGpvaW5fdW5yb2xsZXItPm51c2VkIC0gaSAtIDE7CisKKwkJLyogQ29weSBzdHJhdGVn eSwgUGxhbiwgYW5kIEVsaWRlZE5vZGUuICovCisJCXVqb2luLT5zdHJhdGVneVtpXSA9IGpvaW5f dW5yb2xsZXItPnN0cmF0ZWd5W2tdOworCQl1am9pbi0+aW5uZXJbaV0ucGxhbiA9IGpvaW5fdW5y b2xsZXItPmlubmVyX3N1YnBsYW5zW2tdOworCQl1am9pbi0+aW5uZXJbaV0uZWxpZGVkX25vZGUg PSBqb2luX3Vucm9sbGVyLT5pbm5lcl9lbGlkZWRfbm9kZXNba107CisKKwkJLyoKKwkJICogRmls bCBpbiByZW1haW5pbmcgZGV0YWlscywgdXNpbmcgZWl0aGVyIHRoZSBuZXN0ZWQgam9pbiB1bnJv bGxlciwKKwkJICogb3IgYnkgZGVyaXZpbmcgdGhlbSBmcm9tIHRoZSBwbGFuIGFuZCBlbGlkZWQg bm9kZXMuCisJCSAqLworCQlpZiAoam9pbl91bnJvbGxlci0+aW5uZXJfdW5yb2xsZXJzW2tdICE9 IE5VTEwpCisJCQl1am9pbi0+aW5uZXJbaV0udW5yb2xsZWRfam9pbiA9CisJCQkJcGdwYV9idWls ZF91bnJvbGxlZF9qb2luKHdhbGtlciwKKwkJCQkJCQkJCQkgam9pbl91bnJvbGxlci0+aW5uZXJf dW5yb2xsZXJzW2tdKTsKKwkJZWxzZQorCQkJdWpvaW4tPmlubmVyW2ldLnNjYW4gPQorCQkJCXBn cGFfYnVpbGRfc2Nhbih3YWxrZXIsIHVqb2luLT5pbm5lcltpXS5wbGFuLAorCQkJCQkJCQl1am9p bi0+aW5uZXJbaV0uZWxpZGVkX25vZGUsCisJCQkJCQkJCWpvaW5fdW5yb2xsZXItPmlubmVyX2Jl bmVhdGhfYW55X2dhdGhlcltrXSwKKwkJCQkJCQkJdHJ1ZSk7CisJfQorCisJcmV0dXJuIHVqb2lu OworfQorCisvKgorICogRnJlZSBtZW1vcnkgYWxsb2NhdGVkIGZvciBwZ3BhX2pvaW5fdW5yb2xs ZXIuCisgKi8KK3ZvaWQKK3BncGFfZGVzdHJveV9qb2luX3Vucm9sbGVyKHBncGFfam9pbl91bnJv bGxlciAqam9pbl91bnJvbGxlcikKK3sKKwlwZnJlZShqb2luX3Vucm9sbGVyLT5zdHJhdGVneSk7 CisJcGZyZWUoam9pbl91bnJvbGxlci0+aW5uZXJfc3VicGxhbnMpOworCXBmcmVlKGpvaW5fdW5y b2xsZXItPmlubmVyX2VsaWRlZF9ub2Rlcyk7CisJcGZyZWUoam9pbl91bnJvbGxlci0+aW5uZXJf dW5yb2xsZXJzKTsKKwlwZnJlZShqb2luX3Vucm9sbGVyKTsKK30KKworLyoKKyAqIElkZW50aWZ5 IHRoZSBqb2luIHN0cmF0ZWd5IHVzZWQgYnkgYSBqb2luIGFuZCB0aGUgInJlYWwiIGlubmVyIGFu ZCBvdXRlcgorICogcGxhbnMuCisgKgorICogRm9yIGV4YW1wbGUsIGEgSGFzaCBKb2luIGFsd2F5 cyBoYXMgYSBIYXNoIG5vZGUgb24gdGhlIGlubmVyIHNpZGUsIGJ1dAorICogZm9yIGFsbCBpbnRl bnRzIGFuZCBwdXJwb3NlcyB0aGUgcmVhbCBpbm5lciBpbnB1dCBpcyB0aGUgSGFzaCBub2RlJ3Mg Y2hpbGQsCisgKiBub3QgdGhlIEhhc2ggbm9kZSBpdHNlbGYuCisgKgorICogTGlrZXdpc2UsIGEg TWVyZ2UgSm9pbiBtYXkgaGF2ZSBTb3J0IG5vdGUgb24gdGhlIGlubmVyIG9yIG91dGVyIHNpZGU7 IGlmCisgKiBpdCBkb2VzLCB0aGUgcmVhbCBpbnB1dCB0byB0aGUgam9pbiBpcyB0aGUgU29ydCBu b2RlJ3MgY2hpbGQsIG5vdCB0aGUKKyAqIFNvcnQgbm9kZSBpdHNlbGYuCisgKgorICogSW4gYWRk aXRpb24sIHdpdGggYSBNZXJnZSBKb2luIG9yIGEgTmVzdGVkIExvb3AsIHRoZSBqb2luIHBsYW5u aW5nIGNvZGUKKyAqIG1heSBhZGQgYWRkaXRpb25hbCBub2RlcyBzdWNoIGFzIE1hdGVyaWFsaXpl IG9yIE1lbW9pemUuIFdlIHJlZ2FyZCB0aGVzZQorICogYXMgYW4gYXNwZWN0IG9mIHRoZSBqb2lu IHN0cmF0ZWd5LiBBcyBpbiB0aGUgcHJldmlvdXMgY2FzZXMsIHRoZSB0cnVlIGlucHV0CisgKiB0 byB0aGUgam9pbiBpcyB0aGUgdW5kZXJseWluZyBub2RlLgorICoKKyAqIEhvd2V2ZXIsIGlmIGFu eSBpbnZvbHZlZCBjaGlsZCBub2RlIHByZXZpb3VzbHkgaGFkIGEgbm93LWVsaWRlZCBub2RlIHN0 YWNrZWQKKyAqIG9uIHRvcCwgdGhlbiB3ZSBjYW4ndCAibG9vayB0aHJvdWdoIiB0aGF0IG5vZGUg LS0gaW5kZWVkLCB3aGF0J3MgZ29pbmcgdG8gYmUKKyAqIHJlbGV2YW50IGZvciBvdXIgcHVycG9z ZXMgaXMgdGhlIEVsaWRlZE5vZGUgb24gdG9wIG9mIHRoYXQgcGxhbiBub2RlLCByYXRoZXIKKyAq IHRoYW4gdGhlIHBsYW4gbm9kZSBpdHNlbGYuCisgKgorICogSWYgdGhlcmUgYXJlIG11bHRpcGxl IGVsaWRlZCBub2Rlcywgd2Ugd2FudCB0aGF0IG9uZSB0aGF0IHdvdWxkIGhhdmUgYmVlbgorICog dXBwZXJtb3N0IGluIHRoZSBwbGFuIHRyZWUgcHJpb3IgdG8gc2V0cmVmcyBwcm9jZXNzaW5nOyB3 ZSBleHBlY3QgdG8gZmluZAorICogdGhhdCBvbmUgbGFzdCBpbiB0aGUgbGlzdCBvZiBlbGlkZWQg bm9kZXMuCisgKgorICogT24gcmV0dXJuICpyZWFsb3V0ZXIgYW5kICpyZWFsaW5uZXIgd2lsbCBo YXZlIGJlZW4gc2V0IHRvIHRoZSByZWFsIGlubmVyCisgKiBhbmQgcmVhbCBvdXRlciBwbGFucyB0 aGF0IHdlIGlkZW50aWZpZWQsIGFuZCAqZWxpZGVkcmVhbG91dGVyIGFuZAorICogKmVsaWRlZHJl YWxpbm5lciB0byB0aGUgbGFzdCBvZiBhbnkgY29ycmVzcG9kaW5nIGVsaWRlZCBub2Rlcy4KKyAq IEFkZGl0aW9uYWxseSwgKmZvdW5kX2FueV9vdXRlcl9nYXRoZXIgYW5kICpmb3VuZF9hbnlfaW5u ZXJfZ2F0aGVyIHdpbGwKKyAqIGJlIHNldCB0byB0cnVlIGlmIHdlIGxvb2tlZCB0aHJvdWdoIGEg R2F0aGVyIG9yIEdhdGhlciBNZXJnZSBub2RlIG9uCisgKiB0aGF0IHNpZGUgb2YgdGhlIGpvaW4s IGFuZCBmYWxzZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBwZ3BhX2pvaW5fc3RyYXRlZ3kKK3Bn cGFfZGVjb21wb3NlX2pvaW4ocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsIFBsYW4g KnBsYW4sCisJCQkJCVBsYW4gKipyZWFsb3V0ZXIsIFBsYW4gKipyZWFsaW5uZXIsCisJCQkJCUVs aWRlZE5vZGUgKiplbGlkZWRyZWFsb3V0ZXIsIEVsaWRlZE5vZGUgKiplbGlkZWRyZWFsaW5uZXIs CisJCQkJCWJvb2wgKmZvdW5kX2FueV9vdXRlcl9nYXRoZXIsIGJvb2wgKmZvdW5kX2FueV9pbm5l cl9nYXRoZXIpCit7CisJUGxhbm5lZFN0bXQgKnBzdG10ID0gd2Fsa2VyLT5wc3RtdDsKKwlKb2lu VHlwZQlqb2ludHlwZSA9ICgoSm9pbiAqKSBwbGFuKS0+am9pbnR5cGU7CisJUGxhbgkgICAqb3V0 ZXJwbGFuID0gcGxhbi0+bGVmdHRyZWU7CisJUGxhbgkgICAqaW5uZXJwbGFuID0gcGxhbi0+cmln aHR0cmVlOworCUVsaWRlZE5vZGUgKmVsaWRlZG91dGVyOworCUVsaWRlZE5vZGUgKmVsaWRlZGlu bmVyOworCXBncGFfam9pbl9zdHJhdGVneSBzdHJhdGVneTsKKwlib29sCQl1bmlxdWVvdXRlcjsK Kwlib29sCQl1bmlxdWVpbm5lcjsKKworCWVsaWRlZG91dGVyID0gcGdwYV9sYXN0X2VsaWRlZF9u b2RlKHBzdG10LCBvdXRlcnBsYW4pOworCWVsaWRlZGlubmVyID0gcGdwYV9sYXN0X2VsaWRlZF9u b2RlKHBzdG10LCBpbm5lcnBsYW4pOworCSpmb3VuZF9hbnlfb3V0ZXJfZ2F0aGVyID0gZmFsc2U7 CisJKmZvdW5kX2FueV9pbm5lcl9nYXRoZXIgPSBmYWxzZTsKKworCXN3aXRjaCAobm9kZVRhZyhw bGFuKSkKKwl7CisJCWNhc2UgVF9NZXJnZUpvaW46CisKKwkJCS8qCisJCQkgKiBUaGUgcGxhbm5l ciBtYXkgaGF2ZSBjaG9zZW4gdG8gcGxhY2UgYSBNYXRlcmlhbCBub2RlIG9uIHRoZQorCQkJICog aW5uZXIgc2lkZSBvZiB0aGUgTWVyZ2VKb2luOyBpZiB0aGlzIGlzIHByZXNlbnQsIHdlIHJlY29y ZCBpdAorCQkJICogYXMgcGFydCBvZiB0aGUgam9pbiBzdHJhdGVneS4KKwkJCSAqLworCQkJaWYg KGVsaWRlZGlubmVyID09IE5VTEwgJiYgSXNBKGlubmVycGxhbiwgTWF0ZXJpYWwpKQorCQkJewor CQkJCWVsaWRlZGlubmVyID0gcGdwYV9kZXNjZW5kX25vZGUocHN0bXQsICZpbm5lcnBsYW4pOwor CQkJCXN0cmF0ZWd5ID0gSlNUUkFUX01FUkdFX0pPSU5fTUFURVJJQUxJWkU7CisJCQl9CisJCQll bHNlCisJCQkJc3RyYXRlZ3kgPSBKU1RSQVRfTUVSR0VfSk9JTl9QTEFJTjsKKworCQkJLyoKKwkJ CSAqIEZvciBhIE1lcmdlSm9pbiwgZWl0aGVyIHRoZSBvdXRlciBvciB0aGUgaW5uZXIgc3VicGxh biwgb3IKKwkJCSAqIGJvdGgsIG1heSBoYXZlIG5lZWRlZCB0byBiZSBzb3J0ZWQ7IHdlIG11c3Qg ZGlzcmVnYXJkIGFueSBTb3J0CisJCQkgKiBvciBJbmNyZW1lbnRhbFNvcnQgbm9kZSB0byBmaW5k IHRoZSByZWFsIGlubmVyIG9yIG91dGVyCisJCQkgKiBzdWJwbGFuLgorCQkJICovCisJCQlpZiAo ZWxpZGVkb3V0ZXIgPT0gTlVMTCAmJiBpc19zb3J0aW5nX3BsYW4ob3V0ZXJwbGFuKSkKKwkJCQll bGlkZWRvdXRlciA9IHBncGFfZGVzY2VuZF9ub2RlKHBzdG10LCAmb3V0ZXJwbGFuKTsKKwkJCWlm IChlbGlkZWRpbm5lciA9PSBOVUxMICYmIGlzX3NvcnRpbmdfcGxhbihpbm5lcnBsYW4pKQorCQkJ CWVsaWRlZGlubmVyID0gcGdwYV9kZXNjZW5kX25vZGUocHN0bXQsICZpbm5lcnBsYW4pOworCQkJ YnJlYWs7CisKKwkJY2FzZSBUX05lc3RMb29wOgorCisJCQkvKgorCQkJICogVGhlIHBsYW5uZXIg bWF5IGhhdmUgY2hvc2VuIHRvIHBsYWNlIGEgTWF0ZXJpYWwgb3IgTWVtb2l6ZSBub2RlCisJCQkg KiBvbiB0aGUgaW5uZXIgc2lkZSBvZiB0aGUgTmVzdExvb3A7IGlmIHRoaXMgaXMgcHJlc2VudCwg d2UKKwkJCSAqIHJlY29yZCBpdCBhcyBwYXJ0IG9mIHRoZSBqb2luIHN0cmF0ZWd5LgorCQkJICov CisJCQlpZiAoZWxpZGVkaW5uZXIgPT0gTlVMTCAmJiBJc0EoaW5uZXJwbGFuLCBNYXRlcmlhbCkp CisJCQl7CisJCQkJZWxpZGVkaW5uZXIgPSBwZ3BhX2Rlc2NlbmRfbm9kZShwc3RtdCwgJmlubmVy cGxhbik7CisJCQkJc3RyYXRlZ3kgPSBKU1RSQVRfTkVTVEVEX0xPT1BfTUFURVJJQUxJWkU7CisJ CQl9CisJCQllbHNlIGlmIChlbGlkZWRpbm5lciA9PSBOVUxMICYmIElzQShpbm5lcnBsYW4sIE1l bW9pemUpKQorCQkJeworCQkJCWVsaWRlZGlubmVyID0gcGdwYV9kZXNjZW5kX25vZGUocHN0bXQs ICZpbm5lcnBsYW4pOworCQkJCXN0cmF0ZWd5ID0gSlNUUkFUX05FU1RFRF9MT09QX01FTU9JWkU7 CisJCQl9CisJCQllbHNlCisJCQkJc3RyYXRlZ3kgPSBKU1RSQVRfTkVTVEVEX0xPT1BfUExBSU47 CisJCQlicmVhazsKKworCQljYXNlIFRfSGFzaEpvaW46CisKKwkJCS8qCisJCQkgKiBUaGUgaW5u ZXIgc3VicGxhbiBvZiBhIEhhc2hKb2luIGlzIGFsd2F5cyBhIEhhc2ggbm9kZTsgdGhlIHJlYWwK KwkJCSAqIGlubmVyIHN1YnBsYW4gaXMgdGhlIEhhc2ggbm9kZSdzIGNoaWxkLgorCQkJICovCisJ CQlBc3NlcnQoSXNBKGlubmVycGxhbiwgSGFzaCkpOworCQkJQXNzZXJ0KGVsaWRlZGlubmVyID09 IE5VTEwpOworCQkJZWxpZGVkaW5uZXIgPSBwZ3BhX2Rlc2NlbmRfbm9kZShwc3RtdCwgJmlubmVy cGxhbik7CisJCQlzdHJhdGVneSA9IEpTVFJBVF9IQVNIX0pPSU47CisJCQlicmVhazsKKworCQlk ZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCBub2RlIHR5cGU6ICVkIiwgKGlu dCkgbm9kZVRhZyhwbGFuKSk7CisJfQorCisJLyoKKwkgKiBUaGUgcGxhbm5lciBtYXkgaGF2ZSBk ZWNpZGVkIHRvIGltcGxlbWVudCBhIHNlbWlqb2luIGJ5IGZpcnN0IG1ha2luZworCSAqIHRoZSBu dWxsYWJsZSBzaWRlIG9mIHRoZSBwbGFuIHVuaXF1ZSwgYW5kIHRoZW4gcGVyZm9ybWluZyBhIG5v cm1hbCBqb2luCisJICogYWdhaW5zdCB0aGUgcmVzdWx0LiBUaGVyZWZvcmUsIHdlIG1pZ2h0IG5l ZWQgdG8gZGVzY2VuZCB0aHJvdWdoIGEKKwkgKiB1bmlxdWUgbm9kZSBvbiBlaXRoZXIgc2lkZSBv ZiB0aGUgcGxhbi4KKwkgKi8KKwl1bmlxdWVvdXRlciA9IHBncGFfZGVzY2VuZF9hbnlfdW5pcXVl KHBzdG10LCAmb3V0ZXJwbGFuLCAmZWxpZGVkb3V0ZXIpOworCXVuaXF1ZWlubmVyID0gcGdwYV9k ZXNjZW5kX2FueV91bmlxdWUocHN0bXQsICZpbm5lcnBsYW4sICZlbGlkZWRpbm5lcik7CisKKwkv KgorCSAqIFRoZSBwbGFubmVyIG1heSBoYXZlIGRlY2lkZWQgdG8gcGFyYWxsZWxpemUgcGFydCBv ZiB0aGUgam9pbiB0cmVlLCBzbworCSAqIHdlIGNvdWxkIGZpbmQgYSBHYXRoZXIgb3IgR2F0aGVy IE1lcmdlIG5vZGUgaGVyZS4gTm90ZSB0aGF0LCBpZgorCSAqIHByZXNlbnQsIHRoaXMgd2lsbCBh cHBlYXIgYmVsb3cgbm9kZXMgd2UgY29uc2lkZXJlZCBhcyBwYXJ0IG9mIHRoZSBqb2luCisJICog c3RyYXRlZ3ksIGJ1dCB3ZSBjb3VsZCBmaW5kIGFub3RoZXIgdW5pcXVlbmVzcy1lbmZvcmNpbmcg bm9kZSBiZWxvdyB0aGUKKwkgKiBHYXRoZXIgb3IgR2F0aGVyIE1lcmdlLCBpZiBwcmVzZW50Lgor CSAqLworCWlmIChlbGlkZWRvdXRlciA9PSBOVUxMKQorCXsKKwkJZWxpZGVkb3V0ZXIgPSBwZ3Bh X2Rlc2NlbmRfYW55X2dhdGhlcihwc3RtdCwgJm91dGVycGxhbiwKKwkJCQkJCQkJCQkJICBmb3Vu ZF9hbnlfb3V0ZXJfZ2F0aGVyKTsKKwkJaWYgKGZvdW5kX2FueV9vdXRlcl9nYXRoZXIgJiYKKwkJ CXBncGFfZGVzY2VuZF9hbnlfdW5pcXVlKHBzdG10LCAmb3V0ZXJwbGFuLCAmZWxpZGVkb3V0ZXIp KQorCQkJdW5pcXVlb3V0ZXIgPSB0cnVlOworCX0KKwlpZiAoZWxpZGVkaW5uZXIgPT0gTlVMTCkK Kwl7CisJCWVsaWRlZGlubmVyID0gcGdwYV9kZXNjZW5kX2FueV9nYXRoZXIocHN0bXQsICZpbm5l cnBsYW4sCisJCQkJCQkJCQkJCSAgZm91bmRfYW55X2lubmVyX2dhdGhlcik7CisJCWlmIChmb3Vu ZF9hbnlfaW5uZXJfZ2F0aGVyICYmCisJCQlwZ3BhX2Rlc2NlbmRfYW55X3VuaXF1ZShwc3RtdCwg JmlubmVycGxhbiwgJmVsaWRlZGlubmVyKSkKKwkJCXVuaXF1ZWlubmVyID0gdHJ1ZTsKKwl9CisK KwkvKgorCSAqIEl0J3MgcG9zc2libGUgdGhhdCBSZXN1bHQgbm9kZSBoYXMgYmVlbiBpbnNlcnRl ZCBlaXRoZXIgdG8gcHJvamVjdCBhCisJICogdGFyZ2V0IGxpc3Qgb3IgdG8gaW1wbGVtZW50IGEg b25lLXRpbWUgZmlsdGVyLiBJZiBzbywgd2UgY2FuIGRlc2NlbmQKKwkgKiB0aHJvdWdodCBpdC4g Tm90ZSB0aGF0IGEgcmVzdWx0IG5vZGUgd2l0aG91dCBhIGNoaWxkIHdvdWxkIGJlIGEKKwkgKiBk ZWdlbmVyYXRlIHNjYW4gb3Igam9pbiwgYW5kIG5vdCBzb21ldGhpbmcgd2UgY291bGQgZGVzY2Vu ZCB0aHJvdWdoLgorCSAqCisJICogWFhYLiBJIHN1c3BlY3QgaXQncyBwb3NzaWJsZSBmb3IgdGhp cyB0byBoYXBwZW4gYWJvdmUgdGhlIEdhdGhlciBvcgorCSAqIEdhdGhlciBNZXJnZSBub2RlLCB0 b28sIGJ1dCBhcHBhcmVudGx5IHdlIGhhdmUgbm8gdGVzdCBjYXNlIGZvciB0aGF0CisJICogc2Nl bmFyaW8uCisJICovCisJaWYgKGVsaWRlZG91dGVyID09IE5VTEwgJiYgaXNfcmVzdWx0X25vZGVf d2l0aF9jaGlsZChvdXRlcnBsYW4pKQorCQllbGlkZWRvdXRlciA9IHBncGFfZGVzY2VuZF9ub2Rl KHBzdG10LCAmb3V0ZXJwbGFuKTsKKwlpZiAoZWxpZGVkaW5uZXIgPT0gTlVMTCAmJiBpc19yZXN1 bHRfbm9kZV93aXRoX2NoaWxkKGlubmVycGxhbikpCisJCWVsaWRlZGlubmVyID0gcGdwYV9kZXNj ZW5kX25vZGUocHN0bXQsICZpbm5lcnBsYW4pOworCisJLyoKKwkgKiBJZiB0aGlzIGlzIGEgc2Vt aWpvaW4gdGhhdCB3YXMgY29udmVydGVkIHRvIGFuIGlubmVyIGpvaW4gYnkgbWFraW5nIG9uZQor CSAqIHNpZGUgb3IgdGhlIG90aGVyIHVuaXF1ZSwgbWFrZSBhIG5vdGUgdGhhdCB0aGUgaW5uZXIg b3Igb3V0ZXIgc3VicGxhbiwKKwkgKiBhcyBhcHByb3ByaWF0ZSwgc2hvdWxkIGJlIHRyZWF0ZWQg YXMgYSBxdWVyeSBwbGFuIGZlYXR1cmUgd2hlbiB0aGUgbWFpbgorCSAqIHRyZWUgdHJhdmVyc2Fs IHJlYWNoZXMgaXQuCisJICoKKwkgKiBDb252ZXJzZWx5LCBpZiB0aGUgcGxhbm5lciBjb3VsZCBo YXZlIG1hZGUgb25lIHNpZGUgb2YgdGhlIGpvaW4gdW5pcXVlCisJICogYW5kIHRoZXJlYnkgY29u dmVydGVkIGl0IHRvIGFuIGlubmVyIGpvaW4sIGFuZCBjaG9zZSBub3QgdG8gZG8gc28sIHRoYXQK KwkgKiBpcyBhbHNvIHdvcnRoIG5vdGluZy4KKwkgKgorCSAqIE5COiBUaGlzIGNvZGUgY291bGQg YXBwZWFyIHNsaWdodGx5IGhpZ2hlciB1cCBpbiBpbiB0aGlzIGZ1bmN0aW9uLCBidXQKKwkgKiBu b25lIG9mIHRoZSBub2RlcyB0aHJvdWdoIHdoaWNoIHdlIGp1c3QgZGVzY2VuZGVkIHNob3VsZCBo YXZlCisJICogYXNzb2NpYXRlZCBSVElzLgorCSAqCisJICogTkI6IFRoaXMgc2VlbXMgbGlrZSBh IHNvbWV3aGF0IGhhY2t5IHdheSBvZiBwYXNzaW5nIGluZm9ybWF0aW9uIHVwIHRvCisJICogdGhl IG1haW4gdHJlZSB3YWxrLCBidXQgSSBkb24ndCBjdXJyZW50bHkgaGF2ZSBhIGJldHRlciBpZGVh LgorCSAqLworCWlmICh1bmlxdWVvdXRlcikKKwkJcGdwYV9hZGRfZnV0dXJlX2ZlYXR1cmUod2Fs a2VyLCBQR1BBUUZfU0VNSUpPSU5fVU5JUVVFLCBvdXRlcnBsYW4pOworCWVsc2UgaWYgKGpvaW50 eXBlID09IEpPSU5fUklHSFRfU0VNSSkKKwkJcGdwYV9hZGRfZnV0dXJlX2ZlYXR1cmUod2Fsa2Vy LCBQR1BBUUZfU0VNSUpPSU5fTk9OX1VOSVFVRSwgb3V0ZXJwbGFuKTsKKwlpZiAodW5pcXVlaW5u ZXIpCisJCXBncGFfYWRkX2Z1dHVyZV9mZWF0dXJlKHdhbGtlciwgUEdQQVFGX1NFTUlKT0lOX1VO SVFVRSwgaW5uZXJwbGFuKTsKKwllbHNlIGlmIChqb2ludHlwZSA9PSBKT0lOX1NFTUkpCisJCXBn cGFfYWRkX2Z1dHVyZV9mZWF0dXJlKHdhbGtlciwgUEdQQVFGX1NFTUlKT0lOX05PTl9VTklRVUUs IGlubmVycGxhbik7CisKKwkvKiBTZXQgb3V0cHV0IHBhcmFtZXRlcnMuICovCisJKnJlYWxvdXRl ciA9IG91dGVycGxhbjsKKwkqcmVhbGlubmVyID0gaW5uZXJwbGFuOworCSplbGlkZWRyZWFsb3V0 ZXIgPSBlbGlkZWRvdXRlcjsKKwkqZWxpZGVkcmVhbGlubmVyID0gZWxpZGVkaW5uZXI7CisJcmV0 dXJuIHN0cmF0ZWd5OworfQorCisvKgorICogRGVzY2VuZCB0aHJvdWdoIGEgUGxhbiBub2RlIGlu IGEgam9pbiB0cmVlIHRoYXQgdGhlIGNhbGxlciBoYXMgZGV0ZXJtaW5lZAorICogdG8gYmUgaXJy ZWxldmFudC4KKyAqCisgKiBVcGRhdGVzICpwbGFuLCBhbmQgcmV0dXJucyB0aGUgbGFzdCBvZiBh bnkgZWxpZGVkIG5vZGVzIHBlcnRhaW5pbmcgdG8gdGhlCisgKiBuZXcgcGxhbiBub2RlLgorICov CitzdGF0aWMgRWxpZGVkTm9kZSAqCitwZ3BhX2Rlc2NlbmRfbm9kZShQbGFubmVkU3RtdCAqcHN0 bXQsIFBsYW4gKipwbGFuKQoreworCSpwbGFuID0gKCpwbGFuKS0+bGVmdHRyZWU7CisJcmV0dXJu IHBncGFfbGFzdF9lbGlkZWRfbm9kZShwc3RtdCwgKnBsYW4pOworfQorCisvKgorICogRGVzY2Vu ZCB0aHJvdWdoIGEgR2F0aGVyIG9yIEdhdGhlciBNZXJnZSBub2RlLCBpZiBwcmVzZW50LCBhbmQg YW55IFNvcnQKKyAqIG9yIEluY3JlbWVudGFsU29ydCBub2RlIG9jY3VycmluZyB1bmRlciBhIEdh dGhlciBNZXJnZS4KKyAqCisgKiBDYWxsZXIgc2hvdWxkIGhhdmUgdmVyaWZpZWQgdGhhdCB0aGVy ZSBpcyBubyBFbGlkZWROb2RlIHBlcnRhaW5pbmcgdG8KKyAqIHRoZSBpbml0aWFsIHZhbHVlIG9m ICpwbGFuLgorICoKKyAqIFVwZGF0ZXMgKnBsYW4sIGFuZCByZXR1cm5zIHRoZSBsYXN0IG9mIGFu eSBlbGlkZWQgbm9kZXMgcGVydGFpbmluZyB0byB0aGUKKyAqIG5ldyBwbGFuIG5vZGUuIFNldHMg KmZvdW5kX2FueV9nYXRoZXIgPSB0cnVlIGlmIGVpdGhlciBHYXRoZXIgb3IKKyAqIEdhdGhlciBN ZXJnZSB3YXMgZm91bmQsIGFuZCBvdGhlcndpc2UgbGVhdmVzIGl0IHVuY2hhbmdlZC4KKyAqLwor c3RhdGljIEVsaWRlZE5vZGUgKgorcGdwYV9kZXNjZW5kX2FueV9nYXRoZXIoUGxhbm5lZFN0bXQg KnBzdG10LCBQbGFuICoqcGxhbiwKKwkJCQkJCWJvb2wgKmZvdW5kX2FueV9nYXRoZXIpCit7CisJ aWYgKElzQSgqcGxhbiwgR2F0aGVyKSkKKwl7CisJCSpmb3VuZF9hbnlfZ2F0aGVyID0gdHJ1ZTsK KwkJcmV0dXJuIHBncGFfZGVzY2VuZF9ub2RlKHBzdG10LCBwbGFuKTsKKwl9CisKKwlpZiAoSXNB KCpwbGFuLCBHYXRoZXJNZXJnZSkpCisJeworCQlFbGlkZWROb2RlICplbGlkZWQgPSBwZ3BhX2Rl c2NlbmRfbm9kZShwc3RtdCwgcGxhbik7CisKKwkJaWYgKGVsaWRlZCA9PSBOVUxMICYmIGlzX3Nv cnRpbmdfcGxhbigqcGxhbikpCisJCQllbGlkZWQgPSBwZ3BhX2Rlc2NlbmRfbm9kZShwc3RtdCwg cGxhbik7CisKKwkJKmZvdW5kX2FueV9nYXRoZXIgPSB0cnVlOworCQlyZXR1cm4gZWxpZGVkOwor CX0KKworCXJldHVybiBOVUxMOworfQorCisvKgorICogSWYgKnBsYW4gaXMgYW4gQWdnIG9yIFVu aXF1ZSBub2RlLCB3ZSB3YW50IHRvIGRlc2NlbmQgdGhyb3VnaCBpdCwgdW5sZXNzCisgKiBpdCBo YXMgYSBjb3JyZXNwb25kaW5nIGVsaWRlZCBub2RlLiBJZiBpdHMgaW1tZWRpYXRlIGNoaWxkIGlz IGEgU29ydCBvcgorICogSW5jcmVtZW50YWxTb3J0LCB3ZSBhbHNvIHdhbnQgdG8gZGVzY2VuZCB0 aHJvdWdoIHRoYXQsIHVubGVzcyBpdCBoYXMgYQorICogY29ycmVzcG9uZGluZyBlbGlkZWQgbm9k ZS4KKyAqCisgKiBPbiBlbnRyeSwgKmVsaWRlZF9ub2RlIG11c3QgYmUgdGhlIGxhc3Qgb2YgYW55 IGVsaWRlZCBub2RlcyBjb3JyZXNwb25kaW5nCisgKiB0byAqcGxhbjsgb24gZXhpdCwgdGhpcyB3 aWxsIHN0aWxsIGJlIHRydWUsIGJ1dCAqcGxhbiBtYXkgaGF2ZSBiZWVuIHVwZGF0ZWQuCisgKgor ICogVGhlIHJlYXNvbiB3ZSBkb24ndCB3YW50IHRvIGRlc2NlbmQgdGhyb3VnaCBlbGlkZWQgbm9k ZXMgaXMgdGhhdCBhIHNpbmdsZQorICogam9pbiB0cmVlIGNhbid0IGNyb3NzIHRocm91Z2ggYW55 IHNvcnQgb2YgZWxpZGVkIG5vZGU6IHN1YnF1ZXJpZXMgYXJlCisgKiBwbGFubmVkIHNlcGFyYXRl bHksIGFuZCBwbGFubmluZyBpbnNpZGUgYW4gQXBwZW5kIG9yIE1lcmdlQXBwZW5kIGlzCisgKiBz ZXBhcmF0ZSBmcm9tIHBsYW5uaW5nIG91dHNpZGUgb2YgaXQuCisgKgorICogVGhlIHJldHVybiB2 YWx1ZSBpcyB0cnVlIGlmIHdlIGRlc2NlbmQgdGhyb3VnaCBhIG5vZGUgdGhhdCB3ZSBiZWxpZXZl IGlzCisgKiBtYWtpbmcgb25lIHNpZGUgb2YgYSBzZW1pam9pbiB1bmlxdWUsIGFuZCBvdGhlcndp c2UgZmFsc2UuCisgKi8KK3N0YXRpYyBib29sCitwZ3BhX2Rlc2NlbmRfYW55X3VuaXF1ZShQbGFu bmVkU3RtdCAqcHN0bXQsIFBsYW4gKipwbGFuLAorCQkJCQkJRWxpZGVkTm9kZSAqKmVsaWRlZF9u b2RlKQoreworCWJvb2wJCWRlc2NlbmQgPSBmYWxzZTsKKwlib29sCQlzanVuaXF1ZSA9IGZhbHNl OworCisJaWYgKCplbGlkZWRfbm9kZSAhPSBOVUxMKQorCQlyZXR1cm4gc2p1bmlxdWU7CisKKwlp ZiAoSXNBKCpwbGFuLCBVbmlxdWUpKQorCXsKKwkJZGVzY2VuZCA9IHRydWU7CisJCXNqdW5pcXVl ID0gdHJ1ZTsKKwl9CisJZWxzZSBpZiAoSXNBKCpwbGFuLCBBZ2cpKQorCXsKKwkJLyoKKwkJICog SWYgdGhpcyBpcyBhIHNpbXBsZSBBZ2cgbm9kZSwgdGhlbiBhc3N1bWUgaXQncyBoZXJlIHRvIGlt cGxlbWVudAorCQkgKiBzZW1pam9pbiB1bmlxdWVuZXNzLiBPdGhlcndpc2UsIGFzc3VtZSBpdCdz IGNvbXBsZXRpbmcgYW4gZWFnZXIKKwkJICogYWdncmVnYXRpb24gb3IgcGFydGl0aW9ud2lzZSBh Z2dyZWdhdGlvbiBvcGVyYXRpb24gdGhhdCBiZWdhbiBhdCBhCisJCSAqIGhpZ2hlciBsZXZlbCBv ZiB0aGUgcGxhbiB0cmVlLgorCQkgKgorCQkgKiBYWFguIEkgc3VzcGVjdCB0aGlzIGxvZ2ljIGRv ZXMgbm90IGNvdmVyIGFsbCBjYXNlczogY291bGRuJ3QgU0oKKwkJICogdW5pcXVlbmVzcyBiZSBp bXBsZW1lbnRlZCBpbiB0d28gc3RlcHMgd2l0aCBhbiBpbnRlcm1lZGlhdGUgR2F0aGVyPworCQkg Ki8KKwkJZGVzY2VuZCA9IHRydWU7CisJCXNqdW5pcXVlID0gKCgoQWdnICopICpwbGFuKS0+YWdn c3BsaXQgPT0gQUdHU1BMSVRfU0lNUExFKTsKKwl9CisKKwlpZiAoZGVzY2VuZCkKKwl7CisJCSpl bGlkZWRfbm9kZSA9IHBncGFfZGVzY2VuZF9ub2RlKHBzdG10LCBwbGFuKTsKKworCQlpZiAoKmVs aWRlZF9ub2RlID09IE5VTEwgJiYgaXNfc29ydGluZ19wbGFuKCpwbGFuKSkKKwkJCSplbGlkZWRf bm9kZSA9IHBncGFfZGVzY2VuZF9ub2RlKHBzdG10LCBwbGFuKTsKKwl9CisKKwlyZXR1cm4gc2p1 bmlxdWU7Cit9CisKKy8qCisgKiBJcyB0aGlzIGEgUmVzdWx0IG5vZGUgdGhhdCBoYXMgYSBjaGls ZD8KKyAqLworc3RhdGljIGJvb2wKK2lzX3Jlc3VsdF9ub2RlX3dpdGhfY2hpbGQoUGxhbiAqcGxh bikKK3sKKwlyZXR1cm4gSXNBKHBsYW4sIFJlc3VsdCkgJiYgcGxhbi0+bGVmdHRyZWUgIT0gTlVM TDsKK30KKworLyoKKyAqIElzIHRoaXMgYSBQbGFuIG5vZGUgd2hvc2UgcHVycG9zZSBpcyBwdXQg dGhlIGRhdGEgaW4gYSBjZXJ0YWluIG9yZGVyPworICovCitzdGF0aWMgYm9vbAoraXNfc29ydGlu Z19wbGFuKFBsYW4gKnBsYW4pCit7CisJcmV0dXJuIElzQShwbGFuLCBTb3J0KSB8fCBJc0EocGxh biwgSW5jcmVtZW50YWxTb3J0KTsKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZp Y2UvcGdwYV9qb2luLmggYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfam9pbi5oCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi40ZGM3Mjk4NmE3MAotLS0gL2Rldi9u dWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9qb2luLmgKQEAgLTAsMCArMSwx MDUgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHBncGFfam9pbi5oCisgKgkgIGFuYWx5 c2lzIG9mIGpvaW5zIGluIFBsYW4gdHJlZXMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAy NSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKgkgIGNvbnRyaWIv cGdfcGxhbl9hZHZpY2UvcGdwYV9qb2luLmgKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLwor I2lmbmRlZiBQR1BBX0pPSU5fSAorI2RlZmluZSBQR1BBX0pPSU5fSAorCisjaW5jbHVkZSAibm9k ZXMvcGxhbm5vZGVzLmgiCisKK3R5cGVkZWYgc3RydWN0IHBncGFfcGxhbl93YWxrZXJfY29udGV4 dCBwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQ7Cit0eXBlZGVmIHN0cnVjdCBwZ3BhX2pvaW5fdW5y b2xsZXIgcGdwYV9qb2luX3Vucm9sbGVyOwordHlwZWRlZiBzdHJ1Y3QgcGdwYV91bnJvbGxlZF9q b2luIHBncGFfdW5yb2xsZWRfam9pbjsKKworLyoKKyAqIEFsdGhvdWdoIHRoZXJlIGFyZSB0aHJl ZSBtYWluIGpvaW4gc3RyYXRlZ2llcywgd2UgdHJ5IHRvIGNsYXNzaWZ5IHRoaW5ncworICogbW9y ZSBwcmVjaXNlbHkgaGVyZTogbWVyZ2Ugam9pbnMgaGF2ZSB0aGUgb3B0aW9uIG9mIHVzaW5nIG1h dGVyaWFsaXphdGlvbgorICogb24gdGhlIGlubmVyIHNpZGUsIGFuZCBuZXN0ZWQgbG9vcHMgY2Fu IHVzZSBlaXRoZXIgbWF0ZXJpYWxpemF0aW9uIG9yCisgKiBtZW1vaXphdGlvbi4KKyAqLwordHlw ZWRlZiBlbnVtCit7CisJSlNUUkFUX01FUkdFX0pPSU5fUExBSU4gPSAwLAorCUpTVFJBVF9NRVJH RV9KT0lOX01BVEVSSUFMSVpFLAorCUpTVFJBVF9ORVNURURfTE9PUF9QTEFJTiwKKwlKU1RSQVRf TkVTVEVEX0xPT1BfTUFURVJJQUxJWkUsCisJSlNUUkFUX05FU1RFRF9MT09QX01FTU9JWkUsCisJ SlNUUkFUX0hBU0hfSk9JTgorCS8qIHVwZGF0ZSBOVU1fUEdQQV9KT0lOX1NUUkFURUdZIGlmIHlv dSBhZGQgYW55dGhpbmcgaGVyZSAqLworfSBwZ3BhX2pvaW5fc3RyYXRlZ3k7CisKKyNkZWZpbmUg TlVNX1BHUEFfSk9JTl9TVFJBVEVHWQkJKChpbnQpIEpTVFJBVF9IQVNIX0pPSU4gKyAxKQorCisv KgorICogSW4gYW4gb3V0ZXItZGVlcCBqb2luIHRyZWUsIGV2ZXJ5IG1lbWJlciBvZiBhbiB1bnJv bGxlZCBqb2luIHdpbGwgYmUgYSBzY2FuLAorICogYnV0IGpvaW4gdHJlZXMgd2l0aCBvdGhlciBz aGFwZXMgY2FuIGNvbnRhaW4gdW5yb2xsZWQgam9pbnMuCisgKgorICogVGhlIHBsYW4gbm9kZSB3 ZSBzdG9yZSBoZXJlIHdpbGwgYmUgdGhlIGlubmVyIG9yIG91dGVyIGNoaWxkIG9mIHRoZSBqb2lu CisgKiBub2RlLCBhcyBhcHByb3ByaWF0ZSwgZXhjZXB0IHRoYXQgd2UgbG9vayB0aHJvdWdoIHN1 Ym5vZGVzIHRoYXQgd2UgcmVnYXJkIGFzCisgKiBwYXJ0IG9mIHRoZSBqb2luIG1ldGhvZCBpdHNl bGYuIEZvciBpbnN0YW5jZSwgZm9yIGEgTmVzdGVkIExvb3AgdGhhdAorICogbWF0ZXJpYWxpemVz IHRoZSBpbm5lciBpbnB1dCwgd2UnbGwgc3RvcmUgdGhlIGNoaWxkIG9mIHRoZSBNYXRlcmlhbGl6 ZSBub2RlLAorICogbm90IHRoZSBNYXRlcmlhbGl6ZSBub2RlIGl0c2VsZi4KKyAqCisgKiBJZiBz ZXRyZWZzIHByb2Nlc3NpbmcgZWxpZGVkIG9uZSBvciBtb3JlIG5vZGVzIGZyb20gdGhlIHBsYW4g dHJlZSwgdGhlbgorICogd2UnbGwgc3RvcmUgZGV0YWlscyBhYm91dCB0aGUgdG9wbW9zdCBvZiB0 aG9zZSBpbiBlbGlkZWRfbm9kZTsgb3RoZXJ3aXNlLAorICogaXQgd2lsbCBiZSBOVUxMLgorICoK KyAqIEV4YWN0bHkgb25lIG9mIHNjYW4gYW5kIHVucm9sbGVkX2pvaW4gd2lsbCBiZSBub24tTlVM TC4KKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlQbGFuCSAgICpwbGFuOworCUVsaWRlZE5vZGUg KmVsaWRlZF9ub2RlOworCXN0cnVjdCBwZ3BhX3NjYW4gKnNjYW47CisJcGdwYV91bnJvbGxlZF9q b2luICp1bnJvbGxlZF9qb2luOworfSBwZ3BhX2pvaW5fbWVtYmVyOworCisvKgorICogV2UgY29u dmVydCBvdXRlci1kZWVwIGpvaW4gdHJlZXMgdG8gYSBmbGF0IHN0cnVjdHVyZTsgdGhhdCBpcywg KChBIEpPSU4gQikKKyAqIEpPSU4gQykgSk9JTiBEIGdldHMgY29udmVydGVkIHRvIG91dGVyID0g QSwgaW5uZXIgPSA8QiBDIEQ+LiAgV2hlbiBqb2lucworICogYXJlbid0IG91dGVyLWRlZXAsIHN1 YnN0cnVjdHVyZSBpcyByZXF1aXJlZCwgZS5nLiAoQSBKT0lOIEIpIEpPSU4gKEMgSk9JTiBEKQor ICogaXMgcmVwcmVzZW50ZWQgYXMgb3V0ZXIgPSBBLCBpbm5lciA9IDxCIFg+LCB3aGVyZSBYIGlz IGEgcGdwYV91bnJvbGxlZF9qb2luCisgKiBjb3ZlcmluZyBDLUQuCisgKi8KK3N0cnVjdCBwZ3Bh X3Vucm9sbGVkX2pvaW4KK3sKKwkvKiBPdXRlcm1vc3QgbWVtYmVyOyBtdXN0IG5vdCBpdHNlbGYg YmUgYW4gdW5yb2xsZWQgam9pbi4gKi8KKwlwZ3BhX2pvaW5fbWVtYmVyIG91dGVyOworCisJLyog TnVtYmVyIG9mIGlubmVyIG1lbWJlcnMuIExlbmd0aCBvZiB0aGUgc3RyYXRlZ3kgYW5kIGlubmVy IGFycmF5cy4gKi8KKwl1bnNpZ25lZAluaW5uZXI7CisKKwkvKiBBcnJheSBvZiBzdHJhdGVnaWVz LCBvbmUgcGVyIG5vbi1vdXRlcm1vc3QgbWVtYmVyLiAqLworCXBncGFfam9pbl9zdHJhdGVneSAq c3RyYXRlZ3k7CisKKwkvKiBBcnJheSBvZiBtZW1iZXJzLCBleGNsdWRpbmcgdGhlIG91dGVybW9z dC4gRGVlcGVzdCBmaXJzdC4gKi8KKwlwZ3BhX2pvaW5fbWVtYmVyICppbm5lcjsKK307CisKKy8q CisgKiBEb2VzIHRoaXMgcGxhbiBub2RlIGluaGVyaXQgZnJvbSBKb2luPworICovCitzdGF0aWMg aW5saW5lIGJvb2wKK3BncGFfaXNfam9pbihQbGFuICpwbGFuKQoreworCXJldHVybiBJc0EocGxh biwgTmVzdExvb3ApIHx8IElzQShwbGFuLCBNZXJnZUpvaW4pIHx8IElzQShwbGFuLCBIYXNoSm9p bik7Cit9CisKK2V4dGVybiBwZ3BhX2pvaW5fdW5yb2xsZXIgKnBncGFfY3JlYXRlX2pvaW5fdW5y b2xsZXIodm9pZCk7CitleHRlcm4gdm9pZCBwZ3BhX3Vucm9sbF9qb2luKHBncGFfcGxhbl93YWxr ZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJCQkJCSBQbGFuICpwbGFuLCBib29sIGJlbmVhdGhfYW55 X2dhdGhlciwKKwkJCQkJCQkgcGdwYV9qb2luX3Vucm9sbGVyICpqb2luX3Vucm9sbGVyLAorCQkJ CQkJCSBwZ3BhX2pvaW5fdW5yb2xsZXIgKipvdXRlcl9qb2luX3Vucm9sbGVyLAorCQkJCQkJCSBw Z3BhX2pvaW5fdW5yb2xsZXIgKippbm5lcl9qb2luX3Vucm9sbGVyKTsKK2V4dGVybiBwZ3BhX3Vu cm9sbGVkX2pvaW4gKnBncGFfYnVpbGRfdW5yb2xsZWRfam9pbihwZ3BhX3BsYW5fd2Fsa2VyX2Nv bnRleHQgKndhbGtlciwKKwkJCQkJCQkJCQkJCQlwZ3BhX2pvaW5fdW5yb2xsZXIgKmpvaW5fdW5y b2xsZXIpOworZXh0ZXJuIHZvaWQgcGdwYV9kZXN0cm95X2pvaW5fdW5yb2xsZXIocGdwYV9qb2lu X3Vucm9sbGVyICpqb2luX3Vucm9sbGVyKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9jb250cmli L3BnX3BsYW5fYWR2aWNlL3BncGFfb3V0cHV0LmMgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3Bn cGFfb3V0cHV0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjY3NjQ3 YWNkZjVhCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX291 dHB1dC5jCkBAIC0wLDAgKzEsNTcxIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBwZ3Bh X291dHB1dC5jCisgKgkgIHByb2R1Y2UgdGV4dHVhbCBvdXRwdXQgZnJvbSB0aGUgcmVzdWx0cyBv ZiBhIHBsYW4gdHJlZSB3YWxrCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjUsIFBvc3Rn cmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICoJICBjb250cmliL3BnX3BsYW5f YWR2aWNlL3BncGFfb3V0cHV0LmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisjaW5j bHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgInBncGFfb3V0cHV0LmgiCisjaW5jbHVkZSAi cGdwYV9zY2FuLmgiCisKKyNpbmNsdWRlICJub2Rlcy9wYXJzZW5vZGVzLmgiCisjaW5jbHVkZSAi cGFyc2VyL3BhcnNldHJlZS5oIgorI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCisjaW5jbHVk ZSAidXRpbHMvbHN5c2NhY2hlLmgiCisKKy8qCisgKiBDb250ZXh0IG9iamVjdCBmb3IgdGV4dHVh bCBhZHZpY2UgZ2VuZXJhdGlvbi4KKyAqCisgKiBydF9pZGVudGlmaWVycyBpcyB0aGUgY2FsbGVy LXByb3ZpZGVkIGFycmF5IG9mIHJhbmdlIHRhYmxlIGlkZW50aWZpZXJzLgorICogU2VlIHRoZSBj b21tZW50cyBhdCB0aGUgdG9wIG9mIHBncGFfaWRlbnRpZmllci5jIGZvciBtb3JlIGRldGFpbHMu CisgKgorICogYnVmIGlzIHRoZSBjYWxsZXItcHJvdmlkZWQgb3V0cHV0IGJ1ZmZlci4KKyAqCisg KiB3cmFwX2NvbHVtbiBpcyB0aGUgd3JhcCBjb2x1bW4sIHNvIHRoYXQgd2UgZG9uJ3QgY3JlYXRl IG91dHB1dCB0aGF0IGlzCisgKiB0b28gd2lkZS4gU2VlIHBncGFfbWF5YmVfbGluZWJyZWFrKCkg YW5kIGNvbW1lbnRzIGluIHBncGFfb3V0cHV0X2FkdmljZS4KKyAqLwordHlwZWRlZiBzdHJ1Y3Qg cGdwYV9vdXRwdXRfY29udGV4dAoreworCWNvbnN0IGNoYXIgKipyaWRfc3RyaW5nczsKKwlTdHJp bmdJbmZvCWJ1ZjsKKwlpbnQJCQl3cmFwX2NvbHVtbjsKK30gcGdwYV9vdXRwdXRfY29udGV4dDsK Kworc3RhdGljIHZvaWQgcGdwYV9vdXRwdXRfdW5yb2xsZWRfam9pbihwZ3BhX291dHB1dF9jb250 ZXh0ICpjb250ZXh0LAorCQkJCQkJCQkJICBwZ3BhX3Vucm9sbGVkX2pvaW4gKmpvaW4pOworc3Rh dGljIHZvaWQgcGdwYV9vdXRwdXRfam9pbl9tZW1iZXIocGdwYV9vdXRwdXRfY29udGV4dCAqY29u dGV4dCwKKwkJCQkJCQkJCXBncGFfam9pbl9tZW1iZXIgKm1lbWJlcik7CitzdGF0aWMgdm9pZCBw Z3BhX291dHB1dF9zY2FuX3N0cmF0ZWd5KHBncGFfb3V0cHV0X2NvbnRleHQgKmNvbnRleHQsCisJ CQkJCQkJCQkgIHBncGFfc2Nhbl9zdHJhdGVneSBzdHJhdGVneSwKKwkJCQkJCQkJCSAgTGlzdCAq c2NhbnMpOworc3RhdGljIHZvaWQgcGdwYV9vdXRwdXRfcmVsYXRpb25fbmFtZShwZ3BhX291dHB1 dF9jb250ZXh0ICpjb250ZXh0LCBPaWQgcmVsaWQpOworc3RhdGljIHZvaWQgcGdwYV9vdXRwdXRf cXVlcnlfZmVhdHVyZShwZ3BhX291dHB1dF9jb250ZXh0ICpjb250ZXh0LAorCQkJCQkJCQkJICBw Z3BhX3FmX3R5cGUgdHlwZSwKKwkJCQkJCQkJCSAgTGlzdCAqcXVlcnlfZmVhdHVyZXMpOworc3Rh dGljIHZvaWQgcGdwYV9vdXRwdXRfc2ltcGxlX3N0cmF0ZWd5KHBncGFfb3V0cHV0X2NvbnRleHQg KmNvbnRleHQsCisJCQkJCQkJCQkJY2hhciAqc3RyYXRlZ3ksCisJCQkJCQkJCQkJTGlzdCAqcmVs aWRfc2V0cyk7CitzdGF0aWMgdm9pZCBwZ3BhX291dHB1dF9ub19nYXRoZXIocGdwYV9vdXRwdXRf Y29udGV4dCAqY29udGV4dCwKKwkJCQkJCQkJICBCaXRtYXBzZXQgKnJlbGlkcyk7CitzdGF0aWMg dm9pZCBwZ3BhX291dHB1dF9yZWxhdGlvbnMocGdwYV9vdXRwdXRfY29udGV4dCAqY29udGV4dCwg U3RyaW5nSW5mbyBidWYsCisJCQkJCQkJCSAgQml0bWFwc2V0ICpyZWxpZHMpOworCitzdGF0aWMg Y2hhciAqcGdwYV9jc3RyaW5nX2pvaW5fc3RyYXRlZ3kocGdwYV9qb2luX3N0cmF0ZWd5IHN0cmF0 ZWd5KTsKK3N0YXRpYyBjaGFyICpwZ3BhX2NzdHJpbmdfc2Nhbl9zdHJhdGVneShwZ3BhX3NjYW5f c3RyYXRlZ3kgc3RyYXRlZ3kpOworc3RhdGljIGNoYXIgKnBncGFfY3N0cmluZ19xdWVyeV9mZWF0 dXJlX3R5cGUocGdwYV9xZl90eXBlIHR5cGUpOworCitzdGF0aWMgdm9pZCBwZ3BhX21heWJlX2xp bmVicmVhayhTdHJpbmdJbmZvIGJ1ZiwgaW50IHdyYXBfY29sdW1uKTsKKworLyoKKyAqIEFwcGVu ZCBxdWVyeSBhZHZpY2UgdG8gdGhlIHByb3ZpZGVkIGJ1ZmZlci4KKyAqCisgKiBCZWZvcmUgY2Fs bGluZyB0aGlzIGZ1bmN0aW9uLCAnd2Fsa2VyJyBtdXN0IGJlIHVzZWQgdG8gaXRlcmF0ZSBvdmVy IHRoZQorICogbWFpbiBwbGFuIHRyZWUgYW5kIGFsbCBzdWJwbGFucyBmcm9tIHRoZSBQbGFubmVk U3RtdC4KKyAqCisgKiAncnRfaWRlbnRpZmllcnMnIGlzIGEgdGFibGUgb2YgdW5pcXVlIGlkZW50 aWZpZXJzLCBvbmUgZm9yIGVhY2ggUlRJLgorICogU2VlIHBncGFfY3JlYXRlX2lkZW50aWZpZXJz X2Zvcl9wbGFubmVkX3N0bXQoKS4KKyAqCisgKiBSZXN1bHRzIHdpbGwgYmUgYXBwZW5kZWQgdG8g J2J1ZicuCisgKi8KK3ZvaWQKK3BncGFfb3V0cHV0X2FkdmljZShTdHJpbmdJbmZvIGJ1ZiwgcGdw YV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsCisJCQkJICAgcGdwYV9pZGVudGlmaWVyICpy dF9pZGVudGlmaWVycykKK3sKKwlJbmRleAkJcnRhYmxlX2xlbmd0aCA9IGxpc3RfbGVuZ3RoKHdh bGtlci0+cHN0bXQtPnJ0YWJsZSk7CisJTGlzdENlbGwgICAqbGM7CisJcGdwYV9vdXRwdXRfY29u dGV4dCBjb250ZXh0OworCisJLyogQmFzaWMgaW5pdGlhbGl6YXRpb24uICovCisJbWVtc2V0KCZj b250ZXh0LCAwLCBzaXplb2YocGdwYV9vdXRwdXRfY29udGV4dCkpOworCWNvbnRleHQuYnVmID0g YnVmOworCisJLyoKKwkgKiBDb252ZXJ0IGlkZW50aWZpZXJzIHRvIHN0cmluZyBmb3JtLiBOb3Rl IHRoYXQgdGhlIGxvb3AgdmFyaWFibGUgaGVyZSBpcworCSAqIG5vdCBhbiBSVEksIGJlY2F1c2Ug UlRJcyBhcmUgMS1iYXNlZC4gU29tZSBSVElzIHdpbGwgaGF2ZSBubworCSAqIGlkZW50aWZpZXIs IGVpdGhlciBiZWNhdXNlIHRoZSByZWxvcHRraW5kIGlzIFJURV9KT0lOIG9yIGJlY2F1c2UgdGhh dAorCSAqIHBvcnRpb24gb2YgdGhlIHF1ZXJ5IGRpZG4ndCBtYWtlIGl0IGludG8gdGhlIGZpbmFs IHBsYW4uCisJICovCisJY29udGV4dC5yaWRfc3RyaW5ncyA9IHBhbGxvYzBfYXJyYXkoY29uc3Qg Y2hhciAqLCBydGFibGVfbGVuZ3RoKTsKKwlmb3IgKGludCBpID0gMDsgaSA8IHJ0YWJsZV9sZW5n dGg7ICsraSkKKwkJaWYgKHJ0X2lkZW50aWZpZXJzW2ldLmFsaWFzX25hbWUgIT0gTlVMTCkKKwkJ CWNvbnRleHQucmlkX3N0cmluZ3NbaV0gPSBwZ3BhX2lkZW50aWZpZXJfc3RyaW5nKCZydF9pZGVu dGlmaWVyc1tpXSk7CisKKwkvKgorCSAqIElmIHRoZSB1c2VyIGNob29zZXMgdG8gdXNlIEVYUExB SU4gKFBMQU5fQURWSUNFKSBpbiBhbiA4MC1jb2x1bW4gd2luZG93CisJICogZnJvbSBhIHBzcWwg Y2xpZW50IHdpdGggZGVmYXVsdCBzZXR0aW5ncywgcHNxbCB3aWxsIGFkZCBvbmUgc3BhY2UgdG8K KwkgKiB0aGUgbGVmdCBvZiB0aGUgb3V0cHV0IGFuZCBFWFBMQUlOIHdpbGwgYWRkIHR3byBtb3Jl IHRvIHRoZSBsZWZ0IG9mIHRoZQorCSAqIGFkdmljZS4gVGh1cywgbGluZXMgb2YgbW9yZSB0aGFu IDc3IGNoYXJhY3RlcnMgd2lsbCB3cmFwLiBXZSBzZXQgdGhlCisJICogd3JhcCBsaW1pdCB0byA3 NiBoZXJlIHNvIHRoYXQgdGhlIG91dHB1dCB3b24ndCByZWFjaCBhbGwgdGhlIHdheSB0byB0aGUK KwkgKiB2ZXJ5IGxhc3QgY29sdW1uIG9mIHRoZSB0ZXJtaW5hbC4KKwkgKgorCSAqIE9mIGNvdXJz ZSwgdGhpcyBpcyBmYWlybHkgYXJiaXRyYXJ5IHNldCBvZiBhc3N1bXB0aW9ucywgYW5kIG9uZSBj b3VsZAorCSAqIHdlbGwgbWFrZSBhbiBhcmd1bWVudCBmb3IgYSBkaWZmZXJlbnQgd3JhcCBsaW1p dCwgb3IgZm9yIGEgY29uZmlndXJhYmxlCisJICogb25lLgorCSAqLworCWNvbnRleHQud3JhcF9j b2x1bW4gPSA3NjsKKworCS8qCisJICogRWFjaCBwaWVjZSBvZiBKT0lOX09SREVSKCkgYWR2aWNl IGZ1bGx5IGRlc2NyaWJlcyB0aGUgam9pbiBvcmRlciBmb3IgYQorCSAqIGEgc2luZ2xlIHVucm9s bGVkIGpvaW4uIE1lcmdpbmcgaXMgbm90IHBlcm1pdHRlZCwgYmVjYXVzZSB0aGF0IHdvdWxkCisJ ICogY2hhbmdlIHRoZSBtZWFuaW5nLCBlLmcuIFNFUV9TQ0FOKGEgYiBjIGQpIG1lYW5zIHNpbXBs eSB0aGF0IHNlcXVlbnRpYWwKKwkgKiBzY2FucyBzaG91bGQgYmUgdXNlZCBmb3IgYWxsIG9mIHRo b3NlIHJlbGF0aW9ucywgYW5kIGlzIHRodXMgZXF1aXZhbGVudAorCSAqIHRvIFNFUV9TQ0FOKGEg YikgU0VRX1NDQU4oYyBkKSwgYnV0IEpPSU5fT1JERVIoYSBiIGMgZCkgbWVhbnMgdGhhdCAiYSIK KwkgKiBpcyB0aGUgZHJpdmluZyB0YWJsZSB3aGljaCBpcyB0aGVuIGpvaW5lZCB0byAiYiIgdGhl biAiYyIgdGhlbiAiZCIsCisJICogd2hpY2ggaXMgdG90YWxseSBkaWZmZXJlbnQgZnJvbSBKT0lO X09SREVSKGEgYikgYW5kIEpPSU5fT1JERVIoYyBkKS4KKwkgKi8KKwlmb3JlYWNoKGxjLCB3YWxr ZXItPnRvcGxldmVsX3Vucm9sbGVkX2pvaW5zKQorCXsKKwkJcGdwYV91bnJvbGxlZF9qb2luICp1 am9pbiA9IGxmaXJzdChsYyk7CisKKwkJaWYgKGJ1Zi0+bGVuID4gMCkKKwkJCWFwcGVuZFN0cmlu Z0luZm9DaGFyKGJ1ZiwgJ1xuJyk7CisJCWFwcGVuZFN0cmluZ0luZm8oY29udGV4dC5idWYsICJK T0lOX09SREVSKCIpOworCQlwZ3BhX291dHB1dF91bnJvbGxlZF9qb2luKCZjb250ZXh0LCB1am9p bik7CisJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQuYnVmLCAnKScpOworCQlwZ3BhX21h eWJlX2xpbmVicmVhayhjb250ZXh0LmJ1ZiwgY29udGV4dC53cmFwX2NvbHVtbik7CisJfQorCisJ LyogRW1pdCBqb2luIHN0cmF0ZWd5IGFkdmljZS4gKi8KKwlmb3IgKGludCBzID0gMDsgcyA8IE5V TV9QR1BBX0pPSU5fU1RSQVRFR1k7ICsrcykKKwl7CisJCWNoYXIJICAgKnN0cmF0ZWd5ID0gcGdw YV9jc3RyaW5nX2pvaW5fc3RyYXRlZ3kocyk7CisKKwkJcGdwYV9vdXRwdXRfc2ltcGxlX3N0cmF0 ZWd5KCZjb250ZXh0LAorCQkJCQkJCQkJc3RyYXRlZ3ksCisJCQkJCQkJCQl3YWxrZXItPmpvaW5f c3RyYXRlZ2llc1tzXSk7CisJfQorCisJLyoKKwkgKiBFbWl0IHNjYW4gc3RyYXRlZ3kgYWR2aWNl IChidXQgbm90IGZvciBvcmRpbmFyeSBzY2Fucywgd2hpY2ggYXJlCisJICogZGVmaW5pdGlvbmFs bHkgdW5pbnRlcmVzdGluZykuCisJICovCisJZm9yIChpbnQgYyA9IDA7IGMgPCBOVU1fUEdQQV9T Q0FOX1NUUkFURUdZOyArK2MpCisJCWlmIChjICE9IFBHUEFfU0NBTl9PUkRJTkFSWSkKKwkJCXBn cGFfb3V0cHV0X3NjYW5fc3RyYXRlZ3koJmNvbnRleHQsIGMsIHdhbGtlci0+c2NhbnNbY10pOwor CisJLyogRW1pdCBxdWVyeSBmZWF0dXJlIGFkdmljZS4gKi8KKwlmb3IgKGludCB0ID0gMDsgdCA8 IE5VTV9QR1BBX1FGX1RZUEVTOyArK3QpCisJCXBncGFfb3V0cHV0X3F1ZXJ5X2ZlYXR1cmUoJmNv bnRleHQsIHQsIHdhbGtlci0+cXVlcnlfZmVhdHVyZXNbdF0pOworCisJLyogRW1pdCBOT19HQVRI RVIgYWR2aWNlLiAqLworCXBncGFfb3V0cHV0X25vX2dhdGhlcigmY29udGV4dCwgd2Fsa2VyLT5u b19nYXRoZXJfc2NhbnMpOworfQorCisvKgorICogT3V0cHV0IHRoZSBtZW1iZXJzIG9mIGFuIHVu cm9sbGVkIGpvaW4sIGZpcnN0IHRoZSBvdXRlcm1vc3QgbWVtYmVyLCBhbmQKKyAqIHRoZW4gdGhl IGlubmVyIG1lbWJlcnMgb25lIGJ5IG9uZSwgYXMgcGFydCBvZiBKT0lOX09SREVSKCkgYWR2aWNl LgorICovCitzdGF0aWMgdm9pZAorcGdwYV9vdXRwdXRfdW5yb2xsZWRfam9pbihwZ3BhX291dHB1 dF9jb250ZXh0ICpjb250ZXh0LAorCQkJCQkJICBwZ3BhX3Vucm9sbGVkX2pvaW4gKmpvaW4pCit7 CisJcGdwYV9vdXRwdXRfam9pbl9tZW1iZXIoY29udGV4dCwgJmpvaW4tPm91dGVyKTsKKworCWZv ciAoaW50IGsgPSAwOyBrIDwgam9pbi0+bmlubmVyOyArK2spCisJeworCQlwZ3BhX2pvaW5fbWVt YmVyICptZW1iZXIgPSAmam9pbi0+aW5uZXJba107CisKKwkJcGdwYV9tYXliZV9saW5lYnJlYWso Y29udGV4dC0+YnVmLCBjb250ZXh0LT53cmFwX2NvbHVtbik7CisJCWFwcGVuZFN0cmluZ0luZm9D aGFyKGNvbnRleHQtPmJ1ZiwgJyAnKTsKKwkJcGdwYV9vdXRwdXRfam9pbl9tZW1iZXIoY29udGV4 dCwgbWVtYmVyKTsKKwl9Cit9CisKKy8qCisgKiBPdXRwdXQgYSBzaW5nbGUgbWVtYmVyIG9mIGFu IHVucm9sbGVkIGpvaW4gYXMgcGFydCBvZiBKT0lOX09SREVSKCkgYWR2aWNlLgorICovCitzdGF0 aWMgdm9pZAorcGdwYV9vdXRwdXRfam9pbl9tZW1iZXIocGdwYV9vdXRwdXRfY29udGV4dCAqY29u dGV4dCwKKwkJCQkJCXBncGFfam9pbl9tZW1iZXIgKm1lbWJlcikKK3sKKwlpZiAobWVtYmVyLT51 bnJvbGxlZF9qb2luICE9IE5VTEwpCisJeworCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0 LT5idWYsICcoJyk7CisJCXBncGFfb3V0cHV0X3Vucm9sbGVkX2pvaW4oY29udGV4dCwgbWVtYmVy LT51bnJvbGxlZF9qb2luKTsKKwkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAn KScpOworCX0KKwllbHNlCisJeworCQlwZ3BhX3NjYW4gICpzY2FuID0gbWVtYmVyLT5zY2FuOwor CisJCUFzc2VydChzY2FuICE9IE5VTEwpOworCQlpZiAoYm1zX21lbWJlcnNoaXAoc2Nhbi0+cmVs aWRzKSA9PSBCTVNfU0lOR0xFVE9OKQorCQkJcGdwYV9vdXRwdXRfcmVsYXRpb25zKGNvbnRleHQs IGNvbnRleHQtPmJ1Ziwgc2Nhbi0+cmVsaWRzKTsKKwkJZWxzZQorCQl7CisJCQlhcHBlbmRTdHJp bmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICd7Jyk7CisJCQlwZ3BhX291dHB1dF9yZWxhdGlvbnMo Y29udGV4dCwgY29udGV4dC0+YnVmLCBzY2FuLT5yZWxpZHMpOworCQkJYXBwZW5kU3RyaW5nSW5m b0NoYXIoY29udGV4dC0+YnVmLCAnfScpOworCQl9CisJfQorfQorCisvKgorICogT3V0cHV0IGFk dmljZSBmb3IgYSBMaXN0IG9mIHBncGFfc2NhbiBvYmplY3RzLgorICoKKyAqIEFsbCB0aGUgc2Nh bnMgbXVzdCB1c2UgdGhlIHN0cmF0ZWd5IHNwZWNpZmllZCBieSB0aGUgInN0cmF0ZWd5IiBhcmd1 bWVudC4KKyAqLworc3RhdGljIHZvaWQKK3BncGFfb3V0cHV0X3NjYW5fc3RyYXRlZ3kocGdwYV9v dXRwdXRfY29udGV4dCAqY29udGV4dCwKKwkJCQkJCSAgcGdwYV9zY2FuX3N0cmF0ZWd5IHN0cmF0 ZWd5LAorCQkJCQkJICBMaXN0ICpzY2FucykKK3sKKwlib29sCQlmaXJzdCA9IHRydWU7CisKKwlp ZiAoc2NhbnMgPT0gTklMKQorCQlyZXR1cm47CisKKwlpZiAoY29udGV4dC0+YnVmLT5sZW4gPiAw KQorCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICdcbicpOworCWFwcGVuZFN0 cmluZ0luZm8oY29udGV4dC0+YnVmLCAiJXMoIiwKKwkJCQkJIHBncGFfY3N0cmluZ19zY2FuX3N0 cmF0ZWd5KHN0cmF0ZWd5KSk7CisKKwlmb3JlYWNoX3B0cihwZ3BhX3NjYW4sIHNjYW4sIHNjYW5z KQorCXsKKwkJUGxhbgkgICAqcGxhbiA9IHNjYW4tPnBsYW47CisKKwkJaWYgKGZpcnN0KQorCQkJ Zmlyc3QgPSBmYWxzZTsKKwkJZWxzZQorCQl7CisJCQlwZ3BhX21heWJlX2xpbmVicmVhayhjb250 ZXh0LT5idWYsIGNvbnRleHQtPndyYXBfY29sdW1uKTsKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFy KGNvbnRleHQtPmJ1ZiwgJyAnKTsKKwkJfQorCisJCS8qIE91dHB1dCB0aGUgcmVsYXRpb24gaWRl bnRpZmllcnMuICovCisJCWlmIChibXNfbWVtYmVyc2hpcChzY2FuLT5yZWxpZHMpID09IEJNU19T SU5HTEVUT04pCisJCQlwZ3BhX291dHB1dF9yZWxhdGlvbnMoY29udGV4dCwgY29udGV4dC0+YnVm LCBzY2FuLT5yZWxpZHMpOworCQllbHNlCisJCXsKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNv bnRleHQtPmJ1ZiwgJygnKTsKKwkJCXBncGFfb3V0cHV0X3JlbGF0aW9ucyhjb250ZXh0LCBjb250 ZXh0LT5idWYsIHNjYW4tPnJlbGlkcyk7CisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0 LT5idWYsICcpJyk7CisJCX0KKworCQkvKiBGb3IgaW5kZXggb3IgaW5kZXgtb25seSBzY2Fucywg b3V0cHV0IGluZGV4IGluZm9ybWF0aW9uLiAqLworCQlpZiAoc3RyYXRlZ3kgPT0gUEdQQV9TQ0FO X0lOREVYKQorCQl7CisJCQlBc3NlcnQoSXNBKHBsYW4sIEluZGV4U2NhbikpOworCQkJcGdwYV9t YXliZV9saW5lYnJlYWsoY29udGV4dC0+YnVmLCBjb250ZXh0LT53cmFwX2NvbHVtbik7CisJCQlh cHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICcgJyk7CisJCQlwZ3BhX291dHB1dF9y ZWxhdGlvbl9uYW1lKGNvbnRleHQsICgoSW5kZXhTY2FuICopIHBsYW4pLT5pbmRleGlkKTsKKwkJ fQorCQllbHNlIGlmIChzdHJhdGVneSA9PSBQR1BBX1NDQU5fSU5ERVhfT05MWSkKKwkJeworCQkJ QXNzZXJ0KElzQShwbGFuLCBJbmRleE9ubHlTY2FuKSk7CisJCQlwZ3BhX21heWJlX2xpbmVicmVh ayhjb250ZXh0LT5idWYsIGNvbnRleHQtPndyYXBfY29sdW1uKTsKKwkJCWFwcGVuZFN0cmluZ0lu Zm9DaGFyKGNvbnRleHQtPmJ1ZiwgJyAnKTsKKwkJCXBncGFfb3V0cHV0X3JlbGF0aW9uX25hbWUo Y29udGV4dCwKKwkJCQkJCQkJCSAgKChJbmRleE9ubHlTY2FuICopIHBsYW4pLT5pbmRleGlkKTsK KwkJfQorCX0KKworCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJyknKTsKKwlw Z3BhX21heWJlX2xpbmVicmVhayhjb250ZXh0LT5idWYsIGNvbnRleHQtPndyYXBfY29sdW1uKTsK K30KKworLyoKKyAqIE91dHB1dCBhIHNjaGVtYS1xdWFsaWZpZWQgcmVsYXRpb24gbmFtZS4KKyAq Lworc3RhdGljIHZvaWQKK3BncGFfb3V0cHV0X3JlbGF0aW9uX25hbWUocGdwYV9vdXRwdXRfY29u dGV4dCAqY29udGV4dCwgT2lkIHJlbGlkKQoreworCU9pZAkJCW5zcG9pZCA9IGdldF9yZWxfbmFt ZXNwYWNlKHJlbGlkKTsKKwljaGFyCSAgICpyZWxuYW1lc3BhY2UgPSBnZXRfbmFtZXNwYWNlX25h bWVfb3JfdGVtcChuc3BvaWQpOworCWNoYXIJICAgKnJlbG5hbWUgPSBnZXRfcmVsX25hbWUocmVs aWQpOworCisJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhjb250ZXh0LT5idWYsIHF1b3RlX2lkZW50 aWZpZXIocmVsbmFtZXNwYWNlKSk7CisJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVm LCAnLicpOworCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoY29udGV4dC0+YnVmLCBxdW90ZV9pZGVu dGlmaWVyKHJlbG5hbWUpKTsKK30KKworLyoKKyAqIE91dHB1dCBhZHZpY2UgZm9yIGEgTGlzdCBv ZiBwZ3BhX3F1ZXJ5X2ZlYXR1cmUgb2JqZWN0cy4KKyAqCisgKiBBbGwgZmVhdHVyZXMgbXVzdCBi ZSBvZiB0aGUgdHlwZSBzcGVjaWZpZWQgYnkgdGhlICJ0eXBlIiBhcmd1bWVudC4KKyAqLworc3Rh dGljIHZvaWQKK3BncGFfb3V0cHV0X3F1ZXJ5X2ZlYXR1cmUocGdwYV9vdXRwdXRfY29udGV4dCAq Y29udGV4dCwgcGdwYV9xZl90eXBlIHR5cGUsCisJCQkJCQkgIExpc3QgKnF1ZXJ5X2ZlYXR1cmVz KQoreworCWJvb2wJCWZpcnN0ID0gdHJ1ZTsKKworCWlmIChxdWVyeV9mZWF0dXJlcyA9PSBOSUwp CisJCXJldHVybjsKKworCWlmIChjb250ZXh0LT5idWYtPmxlbiA+IDApCisJCWFwcGVuZFN0cmlu Z0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJ1xuJyk7CisJYXBwZW5kU3RyaW5nSW5mbyhjb250ZXh0 LT5idWYsICIlcygiLAorCQkJCQkgcGdwYV9jc3RyaW5nX3F1ZXJ5X2ZlYXR1cmVfdHlwZSh0eXBl KSk7CisKKwlmb3JlYWNoX3B0cihwZ3BhX3F1ZXJ5X2ZlYXR1cmUsIHFmLCBxdWVyeV9mZWF0dXJl cykKKwl7CisJCWlmIChmaXJzdCkKKwkJCWZpcnN0ID0gZmFsc2U7CisJCWVsc2UKKwkJeworCQkJ cGdwYV9tYXliZV9saW5lYnJlYWsoY29udGV4dC0+YnVmLCBjb250ZXh0LT53cmFwX2NvbHVtbik7 CisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICcgJyk7CisJCX0KKworCQlp ZiAoYm1zX21lbWJlcnNoaXAocWYtPnJlbGlkcykgPT0gQk1TX1NJTkdMRVRPTikKKwkJCXBncGFf b3V0cHV0X3JlbGF0aW9ucyhjb250ZXh0LCBjb250ZXh0LT5idWYsIHFmLT5yZWxpZHMpOworCQll bHNlCisJCXsKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJygnKTsKKwkJ CXBncGFfb3V0cHV0X3JlbGF0aW9ucyhjb250ZXh0LCBjb250ZXh0LT5idWYsIHFmLT5yZWxpZHMp OworCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAnKScpOworCQl9CisJfQor CisJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAnKScpOworCXBncGFfbWF5YmVf bGluZWJyZWFrKGNvbnRleHQtPmJ1ZiwgY29udGV4dC0+d3JhcF9jb2x1bW4pOworfQorCisvKgor ICogT3V0cHV0ICJzaW1wbGUiIGFkdmljZSBmb3IgYSBMaXN0IG9mIEJpdG1hcHNldCBvYmplY3Rz IGVhY2ggb2Ygd2hpY2gKKyAqIGNvbnRhaW5zIG9uZSBvciBtb3JlIFJUSXMuCisgKgorICogQnkg c2ltcGxlLCB3ZSBqdXN0IG1lYW4gdGhhdCB0aGUgYWR2aWNlIGVtaXR0ZWQgZm9sbG93cyB0aGUg bW9zdAorICogc3RyYWlnaHRmb3J3YXJkIHBhdHRlcm46IHRoZSBzdHJhdGVneSBuYW1lLCBmb2xs b3dlZCBieSBhIGxpc3Qgb2YgaXRlbXMKKyAqIHNlcGFyYXRlZCBieSBzcGFjZXMgYW5kIHN1cnJv dW5kZWQgYnkgcGFyZW50aGVzZXMuIEluZGl2aWR1YWwgaXRlbXMgaW4KKyAqIHRoZSBsaXN0IGFy ZSBhIHNpbmdsZSByZWxhdGlvbiBpZGVudGlmaWVyIGZvciBhIEJpdG1hcHNldCB0aGF0IGNvbnRh aW5zCisgKiBqdXN0IG9uZSBtZW1iZXIsIG9yIGEgc3ViLWxpc3QgYWdhaW4gc2VwYXJhdGVkIGJ5 IHNwYWNlcyBhbmQgc3Vycm91bmRlZAorICogYnkgcGFyZW50aGVzZXMgZm9yIGEgQml0bWFwc2V0 IHdpdGggbXVsdGlwbGUgbWVtYmVycy4gQml0bWFwc2V0cyB3aXRoCisgKiBubyBtZW1iZXJzIHBy b2JhYmx5IHNob3VsZG4ndCBvY2N1ciBoZXJlLCBidXQgaWYgdGhleSBkbyB0aGV5J2xsIGJlCisg KiByZW5kZXJlZCBhcyBhbiBlbXB0eSBzdWItbGlzdC4KKyAqLworc3RhdGljIHZvaWQKK3BncGFf b3V0cHV0X3NpbXBsZV9zdHJhdGVneShwZ3BhX291dHB1dF9jb250ZXh0ICpjb250ZXh0LCBjaGFy ICpzdHJhdGVneSwKKwkJCQkJCQlMaXN0ICpyZWxpZF9zZXRzKQoreworCWJvb2wJCWZpcnN0ID0g dHJ1ZTsKKworCWlmIChyZWxpZF9zZXRzID09IE5JTCkKKwkJcmV0dXJuOworCisJaWYgKGNvbnRl eHQtPmJ1Zi0+bGVuID4gMCkKKwkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAn XG4nKTsKKwlhcHBlbmRTdHJpbmdJbmZvKGNvbnRleHQtPmJ1ZiwgIiVzKCIsIHN0cmF0ZWd5KTsK KworCWZvcmVhY2hfbm9kZShCaXRtYXBzZXQsIHJlbGlkcywgcmVsaWRfc2V0cykKKwl7CisJCWlm IChmaXJzdCkKKwkJCWZpcnN0ID0gZmFsc2U7CisJCWVsc2UKKwkJeworCQkJcGdwYV9tYXliZV9s aW5lYnJlYWsoY29udGV4dC0+YnVmLCBjb250ZXh0LT53cmFwX2NvbHVtbik7CisJCQlhcHBlbmRT dHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICcgJyk7CisJCX0KKworCQlpZiAoYm1zX21lbWJl cnNoaXAocmVsaWRzKSA9PSBCTVNfU0lOR0xFVE9OKQorCQkJcGdwYV9vdXRwdXRfcmVsYXRpb25z KGNvbnRleHQsIGNvbnRleHQtPmJ1ZiwgcmVsaWRzKTsKKwkJZWxzZQorCQl7CisJCQlhcHBlbmRT dHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICcoJyk7CisJCQlwZ3BhX291dHB1dF9yZWxhdGlv bnMoY29udGV4dCwgY29udGV4dC0+YnVmLCByZWxpZHMpOworCQkJYXBwZW5kU3RyaW5nSW5mb0No YXIoY29udGV4dC0+YnVmLCAnKScpOworCQl9CisJfQorCisJYXBwZW5kU3RyaW5nSW5mb0NoYXIo Y29udGV4dC0+YnVmLCAnKScpOworCXBncGFfbWF5YmVfbGluZWJyZWFrKGNvbnRleHQtPmJ1Ziwg Y29udGV4dC0+d3JhcF9jb2x1bW4pOworfQorCisvKgorICogT3V0cHV0IE5PX0dBVEhFUiBhZHZp Y2UgZm9yIGFsbCByZWxhdGlvbnMgbm90IGFwcGVhcmluZyBiZW5lYXRoIGFueQorICogR2F0aGVy IG9yIEdhdGhlciBNZXJnZSBub2RlLgorICovCitzdGF0aWMgdm9pZAorcGdwYV9vdXRwdXRfbm9f Z2F0aGVyKHBncGFfb3V0cHV0X2NvbnRleHQgKmNvbnRleHQsIEJpdG1hcHNldCAqcmVsaWRzKQor eworCWlmIChyZWxpZHMgPT0gTlVMTCkKKwkJcmV0dXJuOworCWlmIChjb250ZXh0LT5idWYtPmxl biA+IDApCisJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJ1xuJyk7CisJYXBw ZW5kU3RyaW5nSW5mb1N0cmluZyhjb250ZXh0LT5idWYsICJOT19HQVRIRVIoIik7CisJcGdwYV9v dXRwdXRfcmVsYXRpb25zKGNvbnRleHQsIGNvbnRleHQtPmJ1ZiwgcmVsaWRzKTsKKwlhcHBlbmRT dHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICcpJyk7Cit9CisKKy8qCisgKiBPdXRwdXQgdGhl IGlkZW50aWZpZXJzIGZvciBlYWNoIFJUSSBpbiB0aGUgcHJvdmlkZWQgc2V0LgorICoKKyAqIElk ZW50aWZpZXJzIGFyZSBzZXBhcmF0ZWQgYnkgc3BhY2VzLCBhbmQgYSBsaW5lIGJyZWFrIGlzIHBv c3NpYmxlIGFmdGVyCisgKiBlYWNoIG9uZS4KKyAqLworc3RhdGljIHZvaWQKK3BncGFfb3V0cHV0 X3JlbGF0aW9ucyhwZ3BhX291dHB1dF9jb250ZXh0ICpjb250ZXh0LCBTdHJpbmdJbmZvIGJ1ZiwK KwkJCQkJICBCaXRtYXBzZXQgKnJlbGlkcykKK3sKKwlpbnQJCQlydGkgPSAtMTsKKwlib29sCQlm aXJzdCA9IHRydWU7CisKKwl3aGlsZSAoKHJ0aSA9IGJtc19uZXh0X21lbWJlcihyZWxpZHMsIHJ0 aSkpID49IDApCisJeworCQljb25zdCBjaGFyICpyaWRfc3RyaW5nID0gY29udGV4dC0+cmlkX3N0 cmluZ3NbcnRpIC0gMV07CisKKwkJaWYgKHJpZF9zdHJpbmcgPT0gTlVMTCkKKwkJCWVsb2coRVJS T1IsICJubyBpZGVudGlmaWVyIGZvciBSVEkgJWQiLCBydGkpOworCisJCWlmIChmaXJzdCkKKwkJ eworCQkJZmlyc3QgPSBmYWxzZTsKKwkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCByaWRf c3RyaW5nKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCXBncGFfbWF5YmVfbGluZWJyZWFrKGJ1Ziwg Y29udGV4dC0+d3JhcF9jb2x1bW4pOworCQkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIgJXMiLCBy aWRfc3RyaW5nKTsKKwkJfQorCX0KK30KKworLyoKKyAqIEdldCBhIEMgc3RyaW5nIHRoYXQgY29y cmVzcG9uZHMgdG8gdGhlIHNwZWNpZmllZCBqb2luIHN0cmF0ZWd5LgorICovCitzdGF0aWMgY2hh ciAqCitwZ3BhX2NzdHJpbmdfam9pbl9zdHJhdGVneShwZ3BhX2pvaW5fc3RyYXRlZ3kgc3RyYXRl Z3kpCit7CisJc3dpdGNoIChzdHJhdGVneSkKKwl7CisJCWNhc2UgSlNUUkFUX01FUkdFX0pPSU5f UExBSU46CisJCQlyZXR1cm4gIk1FUkdFX0pPSU5fUExBSU4iOworCQljYXNlIEpTVFJBVF9NRVJH RV9KT0lOX01BVEVSSUFMSVpFOgorCQkJcmV0dXJuICJNRVJHRV9KT0lOX01BVEVSSUFMSVpFIjsK KwkJY2FzZSBKU1RSQVRfTkVTVEVEX0xPT1BfUExBSU46CisJCQlyZXR1cm4gIk5FU1RFRF9MT09Q X1BMQUlOIjsKKwkJY2FzZSBKU1RSQVRfTkVTVEVEX0xPT1BfTUFURVJJQUxJWkU6CisJCQlyZXR1 cm4gIk5FU1RFRF9MT09QX01BVEVSSUFMSVpFIjsKKwkJY2FzZSBKU1RSQVRfTkVTVEVEX0xPT1Bf TUVNT0laRToKKwkJCXJldHVybiAiTkVTVEVEX0xPT1BfTUVNT0laRSI7CisJCWNhc2UgSlNUUkFU X0hBU0hfSk9JTjoKKwkJCXJldHVybiAiSEFTSF9KT0lOIjsKKwl9CisKKwlwZ191bnJlYWNoYWJs ZSgpOworCXJldHVybiBOVUxMOworfQorCisvKgorICogR2V0IGEgQyBzdHJpbmcgdGhhdCBjb3Jy ZXNwb25kcyB0byB0aGUgc3BlY2lmaWVkIHNjYW4gc3RyYXRlZ3kuCisgKi8KK3N0YXRpYyBjaGFy ICoKK3BncGFfY3N0cmluZ19zY2FuX3N0cmF0ZWd5KHBncGFfc2Nhbl9zdHJhdGVneSBzdHJhdGVn eSkKK3sKKwlzd2l0Y2ggKHN0cmF0ZWd5KQorCXsKKwkJY2FzZSBQR1BBX1NDQU5fT1JESU5BUlk6 CisJCQlyZXR1cm4gIk9SRElOQVJZX1NDQU4iOworCQljYXNlIFBHUEFfU0NBTl9TRVE6CisJCQly ZXR1cm4gIlNFUV9TQ0FOIjsKKwkJY2FzZSBQR1BBX1NDQU5fQklUTUFQX0hFQVA6CisJCQlyZXR1 cm4gIkJJVE1BUF9IRUFQX1NDQU4iOworCQljYXNlIFBHUEFfU0NBTl9GT1JFSUdOOgorCQkJcmV0 dXJuICJGT1JFSUdOX0pPSU4iOworCQljYXNlIFBHUEFfU0NBTl9JTkRFWDoKKwkJCXJldHVybiAi SU5ERVhfU0NBTiI7CisJCWNhc2UgUEdQQV9TQ0FOX0lOREVYX09OTFk6CisJCQlyZXR1cm4gIklO REVYX09OTFlfU0NBTiI7CisJCWNhc2UgUEdQQV9TQ0FOX1BBUlRJVElPTldJU0U6CisJCQlyZXR1 cm4gIlBBUlRJVElPTldJU0UiOworCQljYXNlIFBHUEFfU0NBTl9USUQ6CisJCQlyZXR1cm4gIlRJ RF9TQ0FOIjsKKwl9CisKKwlwZ191bnJlYWNoYWJsZSgpOworCXJldHVybiBOVUxMOworfQorCisv KgorICogR2V0IGEgQyBzdHJpbmcgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgc3BlY2lmaWVkIHNj YW4gc3RyYXRlZ3kuCisgKi8KK3N0YXRpYyBjaGFyICoKK3BncGFfY3N0cmluZ19xdWVyeV9mZWF0 dXJlX3R5cGUocGdwYV9xZl90eXBlIHR5cGUpCit7CisJc3dpdGNoICh0eXBlKQorCXsKKwkJY2Fz ZSBQR1BBUUZfR0FUSEVSOgorCQkJcmV0dXJuICJHQVRIRVIiOworCQljYXNlIFBHUEFRRl9HQVRI RVJfTUVSR0U6CisJCQlyZXR1cm4gIkdBVEhFUl9NRVJHRSI7CisJCWNhc2UgUEdQQVFGX1NFTUlK T0lOX05PTl9VTklRVUU6CisJCQlyZXR1cm4gIlNFTUlKT0lOX05PTl9VTklRVUUiOworCQljYXNl IFBHUEFRRl9TRU1JSk9JTl9VTklRVUU6CisJCQlyZXR1cm4gIlNFTUlKT0lOX1VOSVFVRSI7CisJ fQorCisKKwlwZ191bnJlYWNoYWJsZSgpOworCXJldHVybiBOVUxMOworfQorCisvKgorICogSW5z ZXJ0IGEgbGluZSBicmVhayBpbnRvIHRoZSBTdHJpbmdJbmZvRGF0YSwgaWYgbmVlZGVkLgorICoK KyAqIElmIHdyYXBfY29sdW1uIGlzIHplcm8gb3IgbmVnYXRpdmUsIHRoaXMgZG9lcyBub3RoaW5n LiBPdGhlcndpc2UsIHdlCisgKiBjb25zaWRlciBpbnNlcnRpbmcgYSBuZXdsaW5lLiBXZSBvbmx5 IGluc2VydCBhIG5ld2xpbmUgaWYgdGhlIGxlbmd0aCBvZgorICogdGhlIGxhc3QgbGluZSBpbiB0 aGUgYnVmZmVyIGV4Y2VlZHMgd3JhcF9jb2x1bW4sIGFuZCBub3QgaWYgd2UnZCBiZQorICogaW5z ZXJ0aW5nIGEgbmV3bGluZSBhdCBvciBiZWZvcmUgdGhlIGJlZ2lubmluZyBvZiB0aGUgY3VycmVu dCBsaW5lLgorICoKKyAqIFRoZSBwb3NpdGlvbiBhdCB3aGljaCB0aGUgbmV3bGluZSBpcyBpbnNl cnRlZCBpcyBzaW1wbHkgd2hlcmV2ZXIgdGhlCisgKiBidWZmZXIgZW5kZWQgdGhlIGxhc3QgdGlt ZSB0aGlzIGZ1bmN0aW9uIHdhcyBjYWxsZWQuIEluIG90aGVyIHdvcmRzLAorICogdGhlIGNhbGxl ciBpcyBleHBlY3RlZCB0byBjYWxsIHRoaXMgZnVuY3Rpb24gZXZlcnkgdGltZSB3ZSByZWFjaCBh IGdvb2QKKyAqIHBsYWNlIGZvciBhIGxpbmUgYnJlYWsuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3Bh X21heWJlX2xpbmVicmVhayhTdHJpbmdJbmZvIGJ1ZiwgaW50IHdyYXBfY29sdW1uKQoreworCWNo YXIJICAgKnRyYWlsaW5nX25sOworCWludAkJCWxpbmVfc3RhcnQ7CisJaW50CQkJc2F2ZV9jdXJz b3I7CisKKwkvKiBJZiBsaW5lIHdyYXBwaW5nIGlzIGRpc2FibGVkLCBleGl0IHF1aWNrbHkuICov CisJaWYgKHdyYXBfY29sdW1uIDw9IDApCisJCXJldHVybjsKKworCS8qCisJICogU2V0IGxpbmVf c3RhcnQgdG8gdGhlIGJ5dGUgb2Zmc2V0IHdpdGhpbiBidWYtPmRhdGEgb2YgdGhlIGZpcnN0CisJ ICogY2hhcmFjdGVyIG9mIHRoZSBjdXJyZW50IGxpbmUsIHdoZXJlIHRoZSBjdXJyZW50IGxpbmUg bWVhbnMgdGhlIGxhc3QKKwkgKiBvbmUgaW4gdGhlIGJ1ZmZlci4gTm90ZSB0aGF0IGxpbmVfc3Rh cnQgY291bGQgYmUgdGhlIG9mZnNldCBvZiB0aGUKKwkgKiB0cmFpbGluZyAnXDAnIGlmIHRoZSBs YXN0IGNoYXJhY3RlciBpbiB0aGUgYnVmZmVyIGlzIGEgbGluZSBicmVhay4KKwkgKi8KKwl0cmFp bGluZ19ubCA9IHN0cnJjaHIoYnVmLT5kYXRhLCAnXG4nKTsKKwlpZiAodHJhaWxpbmdfbmwgPT0g TlVMTCkKKwkJbGluZV9zdGFydCA9IDA7CisJZWxzZQorCQlsaW5lX3N0YXJ0ID0gKHRyYWlsaW5n X25sIC0gYnVmLT5kYXRhKSArIDE7CisKKwkvKgorCSAqIFJlbWVtYmVyIHRoYXQgdGhlIGN1cnJl bnQgZW5kIG9mIHRoZSBidWZmZXIgaXMgYSBwb3RlbnRpYWwgbG9jYXRpb24gdG8KKwkgKiBpbnNl cnQgYSBsaW5lIGJyZWFrIG9uIGEgZnV0dXJlIGNhbGwgdG8gdGhpcyBmdW5jdGlvbi4KKwkgKi8K KwlzYXZlX2N1cnNvciA9IGJ1Zi0+Y3Vyc29yOworCWJ1Zi0+Y3Vyc29yID0gYnVmLT5sZW47CisK KwkvKiBJZiB3ZSBoYXZlbid0IHBhc3NlZCB0aGUgd3JhcCBjb2x1bW4sIHdlIGRvbid0IG5lZWQg YSBuZXdsaW5lLiAqLworCWlmIChidWYtPmxlbiAtIGxpbmVfc3RhcnQgPD0gd3JhcF9jb2x1bW4p CisJCXJldHVybjsKKworCS8qCisJICogSXQgb25seSBtYWtlcyBzZW5zZSB0byBpbnNlcnQgYSBu ZXdsaW5lIGF0IGEgcG9zaXRpb24gbGF0ZXIgdGhhbiB0aGUKKwkgKiBiZWdpbm5pbmcgb2YgdGhl IGN1cnJlbnQgbGluZS4KKwkgKi8KKwlpZiAoYnVmLT5jdXJzb3IgPD0gbGluZV9zdGFydCkKKwkJ cmV0dXJuOworCisJLyogSW5zZXJ0IGEgbmV3bGluZSBhdCB0aGUgcHJldmlvdXMgY3Vyc29yIGxv Y2F0aW9uLiAqLworCWVubGFyZ2VTdHJpbmdJbmZvKGJ1ZiwgMSk7CisJbWVtbW92ZSgmYnVmLT5k YXRhW3NhdmVfY3Vyc29yXSArIDEsICZidWYtPmRhdGFbc2F2ZV9jdXJzb3JdLAorCQkJYnVmLT5s ZW4gLSBzYXZlX2N1cnNvcik7CisJKytidWYtPmN1cnNvcjsKKwlidWYtPmRhdGFbKytidWYtPmxl bl0gPSAnXDAnOworCWJ1Zi0+ZGF0YVtzYXZlX2N1cnNvcl0gPSAnXG4nOworfQpkaWZmIC0tZ2l0 IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX291dHB1dC5oIGIvY29udHJpYi9wZ19wbGFu X2FkdmljZS9wZ3BhX291dHB1dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAwLi40NzQ5NmQ3NmY1MgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZp Y2UvcGdwYV9vdXRwdXQuaApAQCAtMCwwICsxLDIyIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAq CisgKiBwZ3BhX291dHB1dC5oCisgKgkgIHByb2R1Y2UgdGV4dHVhbCBvdXRwdXQgZnJvbSB0aGUg cmVzdWx0cyBvZiBhIHBsYW4gdHJlZSB3YWxrCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LTIw MjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICoJICBjb250cmli L3BnX3BsYW5fYWR2aWNlL3BncGFfb3V0cHV0LmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAq LworI2lmbmRlZiBQR1BBX09VVFBVVF9ICisjZGVmaW5lIFBHUEFfT1VUUFVUX0gKKworI2luY2x1 ZGUgInBncGFfaWRlbnRpZmllci5oIgorI2luY2x1ZGUgInBncGFfd2Fsa2VyLmgiCisKK2V4dGVy biB2b2lkIHBncGFfb3V0cHV0X2FkdmljZShTdHJpbmdJbmZvIGJ1ZiwKKwkJCQkJCQkgICBwZ3Bh X3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwKKwkJCQkJCQkgICBwZ3BhX2lkZW50aWZpZXIg KnJ0X2lkZW50aWZpZXJzKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5f YWR2aWNlL3BncGFfcGFyc2VyLnkgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfcGFyc2Vy LnkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjRjM2EzZWQ2ZGI5Ci0t LSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3BhcnNlci55CkBA IC0wLDAgKzEsMzAxIEBACisleworLyoKKyAqIFBhcnNlciBmb3IgcGxhbiBhZHZpY2UKKyAqCisg KiBDb3B5cmlnaHQgKGMpIDIwMDAtMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQg R3JvdXAKKyAqCisgKiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfcGFyc2VyLnkKKyAqLwor CisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgPGZsb2F0Lmg+CisjaW5jbHVkZSA8 bWF0aC5oPgorCisjaW5jbHVkZSAiZm1nci5oIgorI2luY2x1ZGUgIm5vZGVzL21pc2Nub2Rlcy5o IgorI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCisjaW5jbHVkZSAidXRpbHMvZmxvYXQuaCIK KworI2luY2x1ZGUgInBncGFfYXN0LmgiCisjaW5jbHVkZSAicGdwYV9wYXJzZXIuaCIKKworLyoK KyAqIEJpc29uIGRvZXNuJ3QgYWxsb2NhdGUgYW55dGhpbmcgdGhhdCBuZWVkcyB0byBsaXZlIGFj cm9zcyBwYXJzZXIgY2FsbHMsCisgKiBzbyB3ZSBjYW4gZWFzaWx5IGhhdmUgaXQgdXNlIHBhbGxv YyBpbnN0ZWFkIG9mIG1hbGxvYy4gIFRoaXMgcHJldmVudHMKKyAqIG1lbW9yeSBsZWFrcyBpZiB3 ZSBlcnJvciBvdXQgZHVyaW5nIHBhcnNpbmcuCisgKi8KKyNkZWZpbmUgWVlNQUxMT0MgcGFsbG9j CisjZGVmaW5lIFlZRlJFRSAgIHBmcmVlCislfQorCisvKiBCSVNPTiBEZWNsYXJhdGlvbnMgKi8K KyVwYXJzZS1wYXJhbSB7TGlzdCAqKnJlc3VsdH0KKyVwYXJzZS1wYXJhbSB7Y2hhciAqKnBhcnNl X2Vycm9yX21zZ19wfQorJXBhcnNlLXBhcmFtIHt5eXNjYW5fdCB5eXNjYW5uZXJ9CislbGV4LXBh cmFtIHtMaXN0ICoqcmVzdWx0fQorJWxleC1wYXJhbSB7Y2hhciAqKnBhcnNlX2Vycm9yX21zZ19w fQorJWxleC1wYXJhbSB7eXlzY2FuX3QgeXlzY2FubmVyfQorJXB1cmUtcGFyc2VyCislZXhwZWN0 IDAKKyVuYW1lLXByZWZpeD0icGdwYV95eSIKKworJXVuaW9uCit7CisJY2hhcgkgICAqc3RyOwor CWludAkJCWludGVnZXI7CisJTGlzdAkgICAqbGlzdDsKKwlwZ3BhX2FkdmljZV9pdGVtICppdGVt OworCXBncGFfYWR2aWNlX3RhcmdldCAqdGFyZ2V0OworCXBncGFfaW5kZXhfdGFyZ2V0ICppdGFy Z2V0OworfQorJXRva2VuIDxzdHI+IFRPS19JREVOVCBUT0tfVEFHX0pPSU5fT1JERVIgVE9LX1RB R19JTkRFWAorJXRva2VuIDxzdHI+IFRPS19UQUdfU0lNUExFIFRPS19UQUdfR0VORVJJQworJXRv a2VuIDxpbnRlZ2VyPiBUT0tfSU5URUdFUgorCisldHlwZSA8aW50ZWdlcj4gb3B0X3JpX29jY3Vy cmVuY2UKKyV0eXBlIDxpdGVtPiBhZHZpY2VfaXRlbQorJXR5cGUgPGxpc3Q+IGFkdmljZV9pdGVt X2xpc3QgZ2VuZXJpY190YXJnZXRfbGlzdAorJXR5cGUgPGxpc3Q+IGluZGV4X3RhcmdldF9saXN0 IGpvaW5fb3JkZXJfdGFyZ2V0X2xpc3QKKyV0eXBlIDxsaXN0PiBvcHRfcGFydGl0aW9uIHNpbXBs ZV90YXJnZXRfbGlzdAorJXR5cGUgPHN0cj4gaWRlbnRpZmllciBvcHRfcGxhbl9uYW1lCisldHlw ZSA8dGFyZ2V0PiBnZW5lcmljX3N1Ymxpc3Qgam9pbl9vcmRlcl9zdWJsaXN0CisldHlwZSA8dGFy Z2V0PiByZWxhdGlvbl9pZGVudGlmaWVyCisldHlwZSA8aXRhcmdldD4gaW5kZXhfbmFtZQorCisl c3RhcnQgcGFyc2VfdG9wbGV2ZWwKKworLyogR3JhbW1hciBmb2xsb3dzICovCislJQorCitwYXJz ZV90b3BsZXZlbDogYWR2aWNlX2l0ZW1fbGlzdAorCQl7CisJCQkodm9pZCkgeXluZXJyczsJCQkJ Lyogc3VwcHJlc3MgY29tcGlsZXIgd2FybmluZyAqLworCQkJKnJlc3VsdCA9ICQxOworCQl9CisJ OworCithZHZpY2VfaXRlbV9saXN0OiBhZHZpY2VfaXRlbV9saXN0IGFkdmljZV9pdGVtCisJCXsg JCQgPSBsYXBwZW5kKCQxLCAkMik7IH0KKwl8CisJCXsgJCQgPSBOSUw7IH0KKwk7CisKK2Fkdmlj ZV9pdGVtOiBUT0tfVEFHX0pPSU5fT1JERVIgJygnIGpvaW5fb3JkZXJfdGFyZ2V0X2xpc3QgJykn CisJCXsKKwkJCSQkID0gcGFsbG9jMF9vYmplY3QocGdwYV9hZHZpY2VfaXRlbSk7CisJCQkkJC0+ dGFnID0gUEdQQV9UQUdfSk9JTl9PUkRFUjsKKwkJCSQkLT50YXJnZXRzID0gJDM7CisJCQlpZiAo JDMgPT0gTklMKQorCQkJCXBncGFfeXllcnJvcihyZXN1bHQsIHBhcnNlX2Vycm9yX21zZ19wLCB5 eXNjYW5uZXIsCisJCQkJCQkJICJKT0lOX09SREVSIG11c3QgaGF2ZSBhdCBsZWFzdCBvbmUgdGFy Z2V0Iik7CisJCX0KKwl8IFRPS19UQUdfSU5ERVggJygnIGluZGV4X3RhcmdldF9saXN0ICcpJwor CQl7CisJCQkkJCA9IHBhbGxvYzBfb2JqZWN0KHBncGFfYWR2aWNlX2l0ZW0pOworCQkJaWYgKHN0 cmNtcCgkMSwgImluZGV4X29ubHlfc2NhbiIpID09IDApCisJCQkJJCQtPnRhZyA9IFBHUEFfVEFH X0lOREVYX09OTFlfU0NBTjsKKwkJCWVsc2UgaWYgKHN0cmNtcCgkMSwgImluZGV4X3NjYW4iKSA9 PSAwKQorCQkJCSQkLT50YWcgPSBQR1BBX1RBR19JTkRFWF9TQ0FOOworCQkJZWxzZQorCQkJCWVs b2coRVJST1IsICJ0YWcgcGFyc2luZyBmYWlsZWQ6ICVzIiwgJDEpOworCQkJJCQtPnRhcmdldHMg PSAkMzsKKwkJfQorCXwgVE9LX1RBR19TSU1QTEUgJygnIHNpbXBsZV90YXJnZXRfbGlzdCAnKScK KwkJeworCQkJJCQgPSBwYWxsb2MwX29iamVjdChwZ3BhX2FkdmljZV9pdGVtKTsKKwkJCWlmIChz dHJjbXAoJDEsICJiaXRtYXBfaGVhcF9zY2FuIikgPT0gMCkKKwkJCQkkJC0+dGFnID0gUEdQQV9U QUdfQklUTUFQX0hFQVBfU0NBTjsKKwkJCWVsc2UgaWYgKHN0cmNtcCgkMSwgIm5vX2dhdGhlciIp ID09IDApCisJCQkJJCQtPnRhZyA9IFBHUEFfVEFHX05PX0dBVEhFUjsKKwkJCWVsc2UgaWYgKHN0 cmNtcCgkMSwgInNlcV9zY2FuIikgPT0gMCkKKwkJCQkkJC0+dGFnID0gUEdQQV9UQUdfU0VRX1ND QU47CisJCQllbHNlIGlmIChzdHJjbXAoJDEsICJ0aWRfc2NhbiIpID09IDApCisJCQkJJCQtPnRh ZyA9IFBHUEFfVEFHX1RJRF9TQ0FOOworCQkJZWxzZQorCQkJCWVsb2coRVJST1IsICJ0YWcgcGFy c2luZyBmYWlsZWQ6ICVzIiwgJDEpOworCQkJJCQtPnRhcmdldHMgPSAkMzsKKwkJfQorCXwgVE9L X1RBR19HRU5FUklDICcoJyBnZW5lcmljX3RhcmdldF9saXN0ICcpJworCQl7CisJCQlib29sCWZh aWw7CisKKwkJCSQkID0gcGFsbG9jMF9vYmplY3QocGdwYV9hZHZpY2VfaXRlbSk7CisJCQkkJC0+ dGFnID0gcGdwYV9wYXJzZV9hZHZpY2VfdGFnKCQxLCAmZmFpbCk7CisJCQlpZiAoZmFpbCkKKwkJ CXsKKwkJCQlwZ3BhX3l5ZXJyb3IocmVzdWx0LCBwYXJzZV9lcnJvcl9tc2dfcCwgeXlzY2FubmVy LAorCQkJCQkJCSAidW5yZWNvZ25pemVkIGFkdmljZSB0YWciKTsKKwkJCX0KKworCQkJaWYgKCQk LT50YWcgPT0gUEdQQV9UQUdfRk9SRUlHTl9KT0lOKQorCQkJeworCQkJCWZvcmVhY2hfcHRyKHBn cGFfYWR2aWNlX3RhcmdldCwgdGFyZ2V0LCAkMykKKwkJCQl7CisJCQkJCWlmICh0YXJnZXQtPnR0 eXBlID09IFBHUEFfVEFSR0VUX0lERU5USUZJRVIgfHwKKwkJCQkJCWxpc3RfbGVuZ3RoKHRhcmdl dC0+Y2hpbGRyZW4pID09IDEpCisJCQkJCQkJcGdwYV95eWVycm9yKHJlc3VsdCwgcGFyc2VfZXJy b3JfbXNnX3AsIHl5c2Nhbm5lciwKKwkJCQkJCQkJCQkgIkZPUkVJR05fSk9JTiB0YXJnZXRzIG11 c3QgY29udGFpbiBtb3JlIHRoYW4gb25lIHJlbGF0aW9uIGlkZW50aWZpZXIiKTsKKwkJCQl9CisJ CQl9CisKKwkJCSQkLT50YXJnZXRzID0gJDM7CisJCX0KKwk7CisKK3JlbGF0aW9uX2lkZW50aWZp ZXI6IGlkZW50aWZpZXIgb3B0X3JpX29jY3VycmVuY2Ugb3B0X3BhcnRpdGlvbiBvcHRfcGxhbl9u YW1lCisJCXsKKwkJCSQkID0gcGFsbG9jMF9vYmplY3QocGdwYV9hZHZpY2VfdGFyZ2V0KTsKKwkJ CSQkLT50dHlwZSA9IFBHUEFfVEFSR0VUX0lERU5USUZJRVI7CisJCQkkJC0+cmlkLmFsaWFzX25h bWUgPSAkMTsKKwkJCSQkLT5yaWQub2NjdXJyZW5jZSA9ICQyOworCQkJaWYgKGxpc3RfbGVuZ3Ro KCQzKSA9PSAyKQorCQkJeworCQkJCSQkLT5yaWQucGFydG5zcCA9IGxpbml0aWFsKCQzKTsKKwkJ CQkkJC0+cmlkLnBhcnRyZWwgPSBsc2Vjb25kKCQzKTsKKwkJCX0KKwkJCWVsc2UgaWYgKCQzICE9 IE5JTCkKKwkJCQkkJC0+cmlkLnBhcnRyZWwgPSBsaW5pdGlhbCgkMyk7CisJCQkkJC0+cmlkLnBs YW5fbmFtZSA9ICQ0OworCQl9CisJOworCitpbmRleF9uYW1lOiBpZGVudGlmaWVyCisJCXsKKwkJ CSQkID0gcGFsbG9jMF9vYmplY3QocGdwYV9pbmRleF90YXJnZXQpOworCQkJJCQtPmluZG5hbWUg PSAkMTsKKwkJfQorCXwgaWRlbnRpZmllciAnLicgaWRlbnRpZmllcgorCQl7CisJCQkkJCA9IHBh bGxvYzBfb2JqZWN0KHBncGFfaW5kZXhfdGFyZ2V0KTsKKwkJCSQkLT5pbmRuYW1lc3BhY2UgPSAk MTsKKwkJCSQkLT5pbmRuYW1lID0gJDM7CisJCX0KKwk7CisKK29wdF9yaV9vY2N1cnJlbmNlOgor CScjJyBUT0tfSU5URUdFUgorCQl7CisJCQlpZiAoJDIgPD0gMCkKKwkJCQlwZ3BhX3l5ZXJyb3Io cmVzdWx0LCBwYXJzZV9lcnJvcl9tc2dfcCwgeXlzY2FubmVyLAorCQkJCQkJCSAib25seSBwb3Np dGl2ZSBvY2N1cnJlbmNlIG51bWJlcnMgYXJlIHBlcm1pdHRlZCIpOworCQkJJCQgPSAkMjsKKwkJ fQorCXwKKwkJeworCQkJLyogVGhlIGRlZmF1bHQgb2NjdXJyZW5jZSBudW1iZXIgaXMgMS4gKi8K KwkJCSQkID0gMTsKKwkJfQorCTsKKworaWRlbnRpZmllcjogVE9LX0lERU5UCisJfCBUT0tfVEFH X0pPSU5fT1JERVIKKwl8IFRPS19UQUdfSU5ERVgKKwl8IFRPS19UQUdfU0lNUExFCisJfCBUT0tf VEFHX0dFTkVSSUMKKwk7CisKKy8qCisgKiBXaGVuIGdlbmVyYXRpbmcgYWR2aWNlLCB3ZSBhbHdh eXMgc2NoZW1hLXF1YWxpZnkgdGhlIHBhcnRpdGlvbiBuYW1lLCBidXQKKyAqIHdoZW4gcGFyc2lu ZyBhZHZpY2UsIHdlIGFjY2VwdCBhIHNwZWNpZmljYXRpb24gdGhhdCBsYWNrcyBvbmUuCisgKi8K K29wdF9wYXJ0aXRpb246CisJJy8nIFRPS19JREVOVCAnLicgVE9LX0lERU5UCisJCXsgJCQgPSBs aXN0X21ha2UyKCQyLCAkNCk7IH0KKwl8ICcvJyBUT0tfSURFTlQKKwkJeyAkJCA9IGxpc3RfbWFr ZTEoJDIpOyB9CisJfAorCQl7ICQkID0gTklMOyB9CisJOworCitvcHRfcGxhbl9uYW1lOgorCSdA JyBUT0tfSURFTlQKKwkJeyAkJCA9ICQyOyB9CisJfAorCQl7ICQkID0gTlVMTDsgfQorCTsKKwor Z2VuZXJpY190YXJnZXRfbGlzdDogZ2VuZXJpY190YXJnZXRfbGlzdCByZWxhdGlvbl9pZGVudGlm aWVyCisJCXsgJCQgPSBsYXBwZW5kKCQxLCAkMik7IH0KKwl8IGdlbmVyaWNfdGFyZ2V0X2xpc3Qg Z2VuZXJpY19zdWJsaXN0CisJCXsgJCQgPSBsYXBwZW5kKCQxLCAkMik7IH0KKwl8CisJCXsgJCQg PSBOSUw7IH0KKwk7CisKK2dlbmVyaWNfc3VibGlzdDogJygnIHNpbXBsZV90YXJnZXRfbGlzdCAn KScKKwkJeworCQkJJCQgPSBwYWxsb2MwX29iamVjdChwZ3BhX2FkdmljZV90YXJnZXQpOworCQkJ JCQtPnR0eXBlID0gUEdQQV9UQVJHRVRfT1JERVJFRF9MSVNUOworCQkJJCQtPmNoaWxkcmVuID0g JDI7CisJCX0KKwk7CisKK2luZGV4X3RhcmdldF9saXN0OgorCSAgaW5kZXhfdGFyZ2V0X2xpc3Qg cmVsYXRpb25faWRlbnRpZmllciBpbmRleF9uYW1lCisJCXsKKwkJCSQyLT5pdGFyZ2V0ID0gJDM7 CisJCQkkJCA9IGxhcHBlbmQoJDEsICQyKTsKKwkJfQorCXwKKwkJeyAkJCA9IE5JTDsgfQorCTsK Kworam9pbl9vcmRlcl90YXJnZXRfbGlzdDogam9pbl9vcmRlcl90YXJnZXRfbGlzdCByZWxhdGlv bl9pZGVudGlmaWVyCisJCXsgJCQgPSBsYXBwZW5kKCQxLCAkMik7IH0KKwl8IGpvaW5fb3JkZXJf dGFyZ2V0X2xpc3Qgam9pbl9vcmRlcl9zdWJsaXN0CisJCXsgJCQgPSBsYXBwZW5kKCQxLCAkMik7 IH0KKwl8CisJCXsgJCQgPSBOSUw7IH0KKwk7CisKK2pvaW5fb3JkZXJfc3VibGlzdDoKKwknKCcg am9pbl9vcmRlcl90YXJnZXRfbGlzdCAnKScKKwkJeworCQkJJCQgPSBwYWxsb2MwX29iamVjdChw Z3BhX2FkdmljZV90YXJnZXQpOworCQkJJCQtPnR0eXBlID0gUEdQQV9UQVJHRVRfT1JERVJFRF9M SVNUOworCQkJJCQtPmNoaWxkcmVuID0gJDI7CisJCX0KKwl8ICd7JyBzaW1wbGVfdGFyZ2V0X2xp c3QgJ30nCisJCXsKKwkJCSQkID0gcGFsbG9jMF9vYmplY3QocGdwYV9hZHZpY2VfdGFyZ2V0KTsK KwkJCSQkLT50dHlwZSA9IFBHUEFfVEFSR0VUX1VOT1JERVJFRF9MSVNUOworCQkJJCQtPmNoaWxk cmVuID0gJDI7CisJCX0KKwk7CisKK3NpbXBsZV90YXJnZXRfbGlzdDogc2ltcGxlX3RhcmdldF9s aXN0IHJlbGF0aW9uX2lkZW50aWZpZXIKKwkJeyAkJCA9IGxhcHBlbmQoJDEsICQyKTsgfQorCXwK KwkJeyAkJCA9IE5JTDsgfQorCTsKKworJSUKKworLyoKKyAqIFBhcnNlIGFuIGFkdmljZV9zdHJp bmcgYW5kIHJldHVybiB0aGUgcmVzdWx0aW5nIGxpc3Qgb2YgcGdwYV9hZHZpY2VfaXRlbQorICog b2JqZWN0cy4gSWYgYSBwYXJzZSBlcnJvciBvY2N1cnMsIGluc3RlYWQgcmV0dXJuIE5VTEwuCisg KgorICogSWYgdGhlIHJldHVybiB2YWx1ZSBpcyBOVUxMLCAqZXJyb3JfcCB3aWxsIGJlIHNldCB0 byB0aGUgZXJyb3IgbWVzc2FnZTsKKyAqIG90aGVyd2lzZSwgKmVycm9yX3Agd2lsbCBiZSBzZXQg dG8gTlVMTC4KKyAqLworTGlzdCAqCitwZ3BhX3BhcnNlKGNvbnN0IGNoYXIgKmFkdmljZV9zdHJp bmcsIGNoYXIgKiplcnJvcl9wKQoreworCXl5c2Nhbl90CXNjYW5uZXI7CisJTGlzdAkgICAqcmVz dWx0OworCWNoYXIJICAgKmVycm9yID0gTlVMTDsKKworCXBncGFfc2Nhbm5lcl9pbml0KGFkdmlj ZV9zdHJpbmcsICZzY2FubmVyKTsKKwlwZ3BhX3l5cGFyc2UoJnJlc3VsdCwgJmVycm9yLCBzY2Fu bmVyKTsKKwlwZ3BhX3NjYW5uZXJfZmluaXNoKHNjYW5uZXIpOworCisJaWYgKGVycm9yICE9IE5V TEwpCisJeworCQkqZXJyb3JfcCA9IGVycm9yOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwkqZXJy b3JfcCA9IE5VTEw7CisJcmV0dXJuIHJlc3VsdDsKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdf cGxhbl9hZHZpY2UvcGdwYV9wbGFubmVyLmMgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFf cGxhbm5lci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4xYTE0ZmY5 ZmQ0YgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9wbGFu bmVyLmMKQEAgLTAsMCArMSwyMTQwIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBwZ3Bh X3BsYW5uZXIuYworICoJICBwbGFubmVyIGhvb2tzCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2 LTIwMjQsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICoJICBjb250 cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfcGxhbm5lci5jCisgKgorICotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgKi8KKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAicGdfcGxhbl9hZHZpY2Uu aCIKKyNpbmNsdWRlICJwZ3BhX2NvbGxlY3Rvci5oIgorI2luY2x1ZGUgInBncGFfaWRlbnRpZmll ci5oIgorI2luY2x1ZGUgInBncGFfb3V0cHV0LmgiCisjaW5jbHVkZSAicGdwYV9wbGFubmVyLmgi CisjaW5jbHVkZSAicGdwYV90cm92ZS5oIgorI2luY2x1ZGUgInBncGFfd2Fsa2VyLmgiCisKKyNp bmNsdWRlICJjb21tYW5kcy9kZWZyZW0uaCIKKyNpbmNsdWRlICJjb21tb24vaGFzaGZuX3Vuc3Rh YmxlLmgiCisjaW5jbHVkZSAibm9kZXMvbWFrZWZ1bmNzLmgiCisjaW5jbHVkZSAib3B0aW1pemVy L2V4dGVuZHBsYW4uaCIKKyNpbmNsdWRlICJvcHRpbWl6ZXIvcGF0aG5vZGUuaCIKKyNpbmNsdWRl ICJvcHRpbWl6ZXIvcGF0aHMuaCIKKyNpbmNsdWRlICJvcHRpbWl6ZXIvcGxhbmNhdC5oIgorI2lu Y2x1ZGUgIm9wdGltaXplci9wbGFubmVyLmgiCisjaW5jbHVkZSAicGFyc2VyL3BhcnNldHJlZS5o IgorI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgorCisjaWZkZWYgVVNFX0FTU0VSVF9DSEVD S0lORworCisvKgorICogV2hlbiBhc3NlcnRpb25zIGFyZSBlbmFibGVkLCB3ZSB0cnkgZ2VuZXJh dGluZyByZWxhdGlvbiBpZGVudGlmaWVycyBkdXJpbmcKKyAqIHBsYW5uaW5nLCBzYXZpbmcgdGhl bSBpbiBhIGhhc2ggdGFibGUsIGFuZCB0aGVuIGNyb3NzLWNoZWNraW5nIHRoZW0gYWdhaW5zdAor ICogdGhlIG9uZXMgZ2VuZXJhdGVkIGFmdGVyIHBsYW5uaW5nIGlzIGNvbXBsZXRlLgorICovCit0 eXBlZGVmIHN0cnVjdCBwZ3BhX3JpX2NoZWNrZXJfa2V5Cit7CisJY2hhcgkgICAqcGxhbl9uYW1l OworCUluZGV4CQlydGk7Cit9IHBncGFfcmlfY2hlY2tlcl9rZXk7CisKK3R5cGVkZWYgc3RydWN0 IHBncGFfcmlfY2hlY2tlcgoreworCXBncGFfcmlfY2hlY2tlcl9rZXkga2V5OworCXVpbnQzMgkJ c3RhdHVzOworCWNvbnN0IGNoYXIgKnJpZF9zdHJpbmc7Cit9IHBncGFfcmlfY2hlY2tlcjsKKwor c3RhdGljIHVpbnQzMiBwZ3BhX3JpX2NoZWNrZXJfaGFzaF9rZXkocGdwYV9yaV9jaGVja2VyX2tl eSBrZXkpOworCitzdGF0aWMgaW5saW5lIGJvb2wKK3BncGFfcmlfY2hlY2tlcl9jb21wYXJlX2tl eShwZ3BhX3JpX2NoZWNrZXJfa2V5IGEsIHBncGFfcmlfY2hlY2tlcl9rZXkgYikKK3sKKwlpZiAo YS5ydGkgIT0gYi5ydGkpCisJCXJldHVybiBmYWxzZTsKKwlpZiAoYS5wbGFuX25hbWUgPT0gTlVM TCkKKwkJcmV0dXJuIChiLnBsYW5fbmFtZSA9PSBOVUxMKTsKKwlpZiAoYi5wbGFuX25hbWUgPT0g TlVMTCkKKwkJcmV0dXJuIGZhbHNlOworCXJldHVybiBzdHJjbXAoYS5wbGFuX25hbWUsIGIucGxh bl9uYW1lKSA9PSAwOworfQorCisjZGVmaW5lIFNIX1BSRUZJWAkJCXBncGFfcmlfY2hlY2sKKyNk ZWZpbmUgU0hfRUxFTUVOVF9UWVBFCQlwZ3BhX3JpX2NoZWNrZXIKKyNkZWZpbmUgU0hfS0VZX1RZ UEUJCQlwZ3BhX3JpX2NoZWNrZXJfa2V5CisjZGVmaW5lIFNIX0tFWQkJCQlrZXkKKyNkZWZpbmUg U0hfSEFTSF9LRVkodGIsIGtleSkJcGdwYV9yaV9jaGVja2VyX2hhc2hfa2V5KGtleSkKKyNkZWZp bmUJU0hfRVFVQUwodGIsIGEsIGIpCXBncGFfcmlfY2hlY2tlcl9jb21wYXJlX2tleShhLCBiKQor I2RlZmluZSBTSF9TQ09QRQkJCXN0YXRpYyBpbmxpbmUKKyNkZWZpbmUgU0hfREVDTEFSRQorI2Rl ZmluZSBTSF9ERUZJTkUKKyNpbmNsdWRlICJsaWIvc2ltcGxlaGFzaC5oIgorCisjZW5kaWYKKwor dHlwZWRlZiBlbnVtIHBncGFfam9fb3V0Y29tZQoreworCVBHUEFfSk9fUEVSTUlUVEVELAkJCS8q IHBlcm1pdCB0aGlzIGpvaW4gb3JkZXIgKi8KKwlQR1BBX0pPX0RFTklFRCwJCQkJLyogZGVueSB0 aGlzIGpvaW4gb3JkZXIgKi8KKwlQR1BBX0pPX0lORElGRkVSRU5UCQkJLyogZG8gbmVpdGhlciAq LworfSBwZ3BhX2pvX291dGNvbWU7CisKK3R5cGVkZWYgc3RydWN0IHBncGFfcGxhbm5lcl9zdGF0 ZQoreworCUV4cGxhaW5TdGF0ZSAqZXhwbGFpbl9zdGF0ZTsKKwlib29sCQlnZW5lcmF0ZV9hZHZp Y2VfZmVlZGJhY2s7CisJYm9vbAkJZ2VuZXJhdGVfYWR2aWNlX3N0cmluZzsKKwlwZ3BhX3Ryb3Zl ICp0cm92ZTsKKwlNZW1vcnlDb250ZXh0IHRyb3ZlX2N4dDsKKwlMaXN0CSAgICpzal91bmlxdWVf cmVsczsKKworI2lmZGVmIFVTRV9BU1NFUlRfQ0hFQ0tJTkcKKwlwZ3BhX3JpX2NoZWNrX2hhc2gg KnJpX2NoZWNrX2hhc2g7CisjZW5kaWYKK30gcGdwYV9wbGFubmVyX3N0YXRlOworCit0eXBlZGVm IHN0cnVjdCBwZ3BhX2pvaW5fc3RhdGUKK3sKKwkvKiBNb3N0LXJlY2VudGx5LWNvbnNpZGVyZWQg b3V0ZXIgcmVsLiAqLworCVJlbE9wdEluZm8gKm91dGVycmVsOworCisJLyogTW9zdC1yZWNlbnRs eS1jb25zaWRlcmVkIGlubmVyIHJlbC4gKi8KKwlSZWxPcHRJbmZvICppbm5lcnJlbDsKKworCS8q CisJICogQXJyYXkgb2YgcmVsYXRpb24gaWRlbnRpZmllcnMgZm9yIGFsbCBtZW1iZXJzIG9mIHRo aXMgam9pbnJlbCwgd2l0aAorCSAqIG91dGVycmVsIGlkZW5pZmllcnMgYmVmb3JlIGlubmVycmVs IGlkZW50aWZpZXJzLgorCSAqLworCXBncGFfaWRlbnRpZmllciAqcmlkczsKKworCS8qIE51bWJl ciBvZiBvdXRlciByZWwgaWRlbnRpZmllcnMuICovCisJaW50CQkJb3V0ZXJfY291bnQ7CisKKwkv KiBOdW1iZXIgb2YgaW5uZXIgcmVsIGlkZW50aWZpZXJzLiAqLworCWludAkJCWlubmVyX2NvdW50 OworCisJLyoKKwkgKiBUcm92ZSBsb29rdXAgcmVzdWx0cy4KKwkgKgorCSAqIGpvaW5fZW50cmll cyBhbmQgcmVsX2VudHJpZXMgYXJlIGFycmF5cyBvZiBlbnRyaWVzLCBhbmQgam9pbl9pbmRleGVz CisJICogYW5kIHJlbF9pbmRleGVzIGFyZSB0aGUgaW50ZWdlciBvZmZzZXRzIHdpdGhpbiB0aG9z ZSBhcnJheXMgb2YgZW50cmllcworCSAqIHBvdGVudGlhbGx5IHJlbGV2YW50IHRvIHVzLiBUaGUg ImpvaW4iIGZpZWxkcyBjb3JyZXNwb25kIHRvIGEgbG9va3VwCisJICogdXNpbmcgUEdQQV9UUk9W RV9MT09LVVBfSk9JTiBhbmQgdGhlICJyZWwiIGZpZWxkcyB0byBhIGxvb2t1cCB1c2luZworCSAq IFBHUEFfVFJPVkVfTE9PS1VQX1JFTC4KKwkgKi8KKwlwZ3BhX3Ryb3ZlX2VudHJ5ICpqb2luX2Vu dHJpZXM7CisJQml0bWFwc2V0ICAqam9pbl9pbmRleGVzOworCXBncGFfdHJvdmVfZW50cnkgKnJl bF9lbnRyaWVzOworCUJpdG1hcHNldCAgKnJlbF9pbmRleGVzOworfSBwZ3BhX2pvaW5fc3RhdGU7 CisKKy8qIFNhdmVkIGhvb2sgdmFsdWVzICovCitzdGF0aWMgZ2V0X3JlbGF0aW9uX2luZm9faG9v a190eXBlIHByZXZfZ2V0X3JlbGF0aW9uX2luZm8gPSBOVUxMOworc3RhdGljIGpvaW5fcGF0aF9z ZXR1cF9ob29rX3R5cGUgcHJldl9qb2luX3BhdGhfc2V0dXAgPSBOVUxMOworc3RhdGljIGpvaW5y ZWxfc2V0dXBfaG9va190eXBlIHByZXZfam9pbnJlbF9zZXR1cCA9IE5VTEw7CitzdGF0aWMgcGxh bm5lcl9zZXR1cF9ob29rX3R5cGUgcHJldl9wbGFubmVyX3NldHVwID0gTlVMTDsKK3N0YXRpYyBw bGFubmVyX3NodXRkb3duX2hvb2tfdHlwZSBwcmV2X3BsYW5uZXJfc2h1dGRvd24gPSBOVUxMOwor CisvKiBPdGhlciBnbG9iYWwgdmFyaWFiZXMgKi8KK3N0YXRpYyBpbnQJcGxhbm5lcl9leHRlbnNp b25faWQgPSAtMTsKKworLyogRnVuY3Rpb24gcHJvdG90eXBlcy4gKi8KK3N0YXRpYyB2b2lkIHBn cGFfcGxhbm5lcl9zZXR1cChQbGFubmVyR2xvYmFsICpnbG9iLCBRdWVyeSAqcGFyc2UsCisJCQkJ CQkJICAgY29uc3QgY2hhciAqcXVlcnlfc3RyaW5nLAorCQkJCQkJCSAgIGludCBjdXJzb3JPcHRp b25zLAorCQkJCQkJCSAgIGRvdWJsZSAqdHVwbGVfZnJhY3Rpb24sCisJCQkJCQkJICAgRXhwbGFp blN0YXRlICplcyk7CitzdGF0aWMgdm9pZCBwZ3BhX3BsYW5uZXJfc2h1dGRvd24oUGxhbm5lckds b2JhbCAqZ2xvYiwgUXVlcnkgKnBhcnNlLAorCQkJCQkJCQkgIGNvbnN0IGNoYXIgKnF1ZXJ5X3N0 cmluZywgUGxhbm5lZFN0bXQgKnBzdG10KTsKK3N0YXRpYyB2b2lkIHBncGFfZ2V0X3JlbGF0aW9u X2luZm8oUGxhbm5lckluZm8gKnJvb3QsCisJCQkJCQkJCSAgIE9pZCByZWxhdGlvbk9iamVjdElk LAorCQkJCQkJCQkgICBib29sIGluaHBhcmVudCwKKwkJCQkJCQkJICAgUmVsT3B0SW5mbyAqcmVs KTsKK3N0YXRpYyB2b2lkIHBncGFfam9pbnJlbF9zZXR1cChQbGFubmVySW5mbyAqcm9vdCwKKwkJ CQkJCQkgICBSZWxPcHRJbmZvICpqb2lucmVsLAorCQkJCQkJCSAgIFJlbE9wdEluZm8gKm91dGVy cmVsLAorCQkJCQkJCSAgIFJlbE9wdEluZm8gKmlubmVycmVsLAorCQkJCQkJCSAgIFNwZWNpYWxK b2luSW5mbyAqc2ppbmZvLAorCQkJCQkJCSAgIExpc3QgKnJlc3RyaWN0bGlzdCk7CitzdGF0aWMg dm9pZCBwZ3BhX2pvaW5fcGF0aF9zZXR1cChQbGFubmVySW5mbyAqcm9vdCwKKwkJCQkJCQkJIFJl bE9wdEluZm8gKmpvaW5yZWwsCisJCQkJCQkJCSBSZWxPcHRJbmZvICpvdXRlcnJlbCwKKwkJCQkJ CQkJIFJlbE9wdEluZm8gKmlubmVycmVsLAorCQkJCQkJCQkgSm9pblR5cGUgam9pbnR5cGUsCisJ CQkJCQkJCSBKb2luUGF0aEV4dHJhRGF0YSAqZXh0cmEpOworc3RhdGljIHBncGFfam9pbl9zdGF0 ZSAqcGdwYV9nZXRfam9pbl9zdGF0ZShQbGFubmVySW5mbyAqcm9vdCwKKwkJCQkJCQkJCQkJUmVs T3B0SW5mbyAqam9pbnJlbCwKKwkJCQkJCQkJCQkJUmVsT3B0SW5mbyAqb3V0ZXJyZWwsCisJCQkJ CQkJCQkJCVJlbE9wdEluZm8gKmlubmVycmVsKTsKK3N0YXRpYyB2b2lkIHBncGFfcGxhbm5lcl9h cHBseV9qb2lucmVsX2FkdmljZSh1aW50NjQgKnBnc19tYXNrX3AsCisJCQkJCQkJCQkJCSAgY2hh ciAqcGxhbl9uYW1lLAorCQkJCQkJCQkJCQkgIHBncGFfam9pbl9zdGF0ZSAqcGpzKTsKK3N0YXRp YyB2b2lkIHBncGFfcGxhbm5lcl9hcHBseV9qb2luX3BhdGhfYWR2aWNlKEpvaW5UeXBlIGpvaW50 eXBlLAorCQkJCQkJCQkJCQkJdWludDY0ICpwZ3NfbWFza19wLAorCQkJCQkJCQkJCQkJY2hhciAq cGxhbl9uYW1lLAorCQkJCQkJCQkJCQkJcGdwYV9qb2luX3N0YXRlICpwanMpOworc3RhdGljIHZv aWQgcGdwYV9wbGFubmVyX2FwcGx5X3NjYW5fYWR2aWNlKFJlbE9wdEluZm8gKnJlbCwKKwkJCQkJ CQkJCQkgICBwZ3BhX3Ryb3ZlX2VudHJ5ICpzY2FuX2VudHJpZXMsCisJCQkJCQkJCQkJICAgQml0 bWFwc2V0ICpzY2FuX2luZGV4ZXMsCisJCQkJCQkJCQkJICAgcGdwYV90cm92ZV9lbnRyeSAqcmVs X2VudHJpZXMsCisJCQkJCQkJCQkJICAgQml0bWFwc2V0ICpyZWxfaW5kZXhlcyk7CitzdGF0aWMg dWludDY0IHBncGFfam9pbl9zdHJhdGVneV9tYXNrX2Zyb21fYWR2aWNlX3RhZyhwZ3BhX2Fkdmlj ZV90YWdfdHlwZSB0YWcpOworc3RhdGljIHBncGFfam9fb3V0Y29tZSBwZ3BhX2pvaW5fb3JkZXJf cGVybWl0c19qb2luKGludCBvdXRlcl9jb3VudCwKKwkJCQkJCQkJCQkJCQlpbnQgaW5uZXJfY291 bnQsCisJCQkJCQkJCQkJCQkJcGdwYV9pZGVudGlmaWVyICpyaWRzLAorCQkJCQkJCQkJCQkJCXBn cGFfdHJvdmVfZW50cnkgKmVudHJ5KTsKK3N0YXRpYyBib29sIHBncGFfam9pbl9tZXRob2RfcGVy bWl0c19qb2luKGludCBvdXRlcl9jb3VudCwgaW50IGlubmVyX2NvdW50LAorCQkJCQkJCQkJCSAg cGdwYV9pZGVudGlmaWVyICpyaWRzLAorCQkJCQkJCQkJCSAgcGdwYV90cm92ZV9lbnRyeSAqZW50 cnksCisJCQkJCQkJCQkJICBib29sICpyZXN0cmljdF9tZXRob2QpOworc3RhdGljIGJvb2wgcGdw YV9vcGFxdWVfam9pbl9wZXJtaXRzX2pvaW4oaW50IG91dGVyX2NvdW50LCBpbnQgaW5uZXJfY291 bnQsCisJCQkJCQkJCQkJICBwZ3BhX2lkZW50aWZpZXIgKnJpZHMsCisJCQkJCQkJCQkJICBwZ3Bh X3Ryb3ZlX2VudHJ5ICplbnRyeSwKKwkJCQkJCQkJCQkgIGJvb2wgKnJlc3RyaWN0X21ldGhvZCk7 CitzdGF0aWMgYm9vbCBwZ3BhX3NlbWlqb2luX3Blcm1pdHNfam9pbihpbnQgb3V0ZXJfY291bnQs IGludCBpbm5lcl9jb3VudCwKKwkJCQkJCQkJCSAgIHBncGFfaWRlbnRpZmllciAqcmlkcywKKwkJ CQkJCQkJCSAgIHBncGFfdHJvdmVfZW50cnkgKmVudHJ5LAorCQkJCQkJCQkJICAgYm9vbCBvdXRl cl9zaWRlX251bGxhYmxlLAorCQkJCQkJCQkJICAgYm9vbCAqcmVzdHJpY3RfbWV0aG9kKTsKKwor c3RhdGljIExpc3QgKnBncGFfcGxhbm5lcl9hcHBlbmRfZmVlZGJhY2soTGlzdCAqbGlzdCwgcGdw YV90cm92ZSAqdHJvdmUsCisJCQkJCQkJCQkJICBwZ3BhX3Ryb3ZlX2xvb2t1cF90eXBlIHR5cGUs CisJCQkJCQkJCQkJICBwZ3BhX2lkZW50aWZpZXIgKnJ0X2lkZW50aWZpZXJzLAorCQkJCQkJCQkJ CSAgcGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIpOworc3RhdGljIHZvaWQgcGdwYV9w bGFubmVyX2ZlZWRiYWNrX3dhcm5pbmcoTGlzdCAqZmVlZGJhY2spOworCitzdGF0aWMgaW5saW5l IHZvaWQgcGdwYV9yaV9jaGVja2VyX3NhdmUocGdwYV9wbGFubmVyX3N0YXRlICpwcHMsCisJCQkJ CQkJCQkJUGxhbm5lckluZm8gKnJvb3QsCisJCQkJCQkJCQkJUmVsT3B0SW5mbyAqcmVsKTsKK3N0 YXRpYyB2b2lkIHBncGFfcmlfY2hlY2tlcl92YWxpZGF0ZShwZ3BhX3BsYW5uZXJfc3RhdGUgKnBw cywKKwkJCQkJCQkJCSBQbGFubmVkU3RtdCAqcHN0bXQpOworCitzdGF0aWMgY2hhciAqcGdwYV9i bXNfdG9fY3N0cmluZyhCaXRtYXBzZXQgKmJtcyk7CitzdGF0aWMgY29uc3QgY2hhciAqcGdwYV9q b2ludHlwZV90b19jc3RyaW5nKEpvaW5UeXBlIGpvaW50eXBlKTsKKworLyoKKyAqIEluc3RhbGwg cGxhbm5lci1yZWxhdGVkIGhvb2tzLgorICovCit2b2lkCitwZ3BhX3BsYW5uZXJfaW5zdGFsbF9o b29rcyh2b2lkKQoreworCXBsYW5uZXJfZXh0ZW5zaW9uX2lkID0gR2V0UGxhbm5lckV4dGVuc2lv bklkKCJwZ19wbGFuX2FkdmljZSIpOworCXByZXZfcGxhbm5lcl9zZXR1cCA9IHBsYW5uZXJfc2V0 dXBfaG9vazsKKwlwbGFubmVyX3NldHVwX2hvb2sgPSBwZ3BhX3BsYW5uZXJfc2V0dXA7CisJcHJl dl9wbGFubmVyX3NodXRkb3duID0gcGxhbm5lcl9zaHV0ZG93bl9ob29rOworCXBsYW5uZXJfc2h1 dGRvd25faG9vayA9IHBncGFfcGxhbm5lcl9zaHV0ZG93bjsKKwlwcmV2X2dldF9yZWxhdGlvbl9p bmZvID0gZ2V0X3JlbGF0aW9uX2luZm9faG9vazsKKwlnZXRfcmVsYXRpb25faW5mb19ob29rID0g cGdwYV9nZXRfcmVsYXRpb25faW5mbzsKKwlwcmV2X2pvaW5yZWxfc2V0dXAgPSBqb2lucmVsX3Nl dHVwX2hvb2s7CisJam9pbnJlbF9zZXR1cF9ob29rID0gcGdwYV9qb2lucmVsX3NldHVwOworCXBy ZXZfam9pbl9wYXRoX3NldHVwID0gam9pbl9wYXRoX3NldHVwX2hvb2s7CisJam9pbl9wYXRoX3Nl dHVwX2hvb2sgPSBwZ3BhX2pvaW5fcGF0aF9zZXR1cDsKK30KKworLyoKKyAqIENhcnJ5IG91dCB3 aGF0ZXZlciBzZXR1cCB3b3JrIHdlIG5lZWQgdG8gZG8gYmVmb3JlIHBsYW5uaW5nLgorICovCitz dGF0aWMgdm9pZAorcGdwYV9wbGFubmVyX3NldHVwKFBsYW5uZXJHbG9iYWwgKmdsb2IsIFF1ZXJ5 ICpwYXJzZSwgY29uc3QgY2hhciAqcXVlcnlfc3RyaW5nLAorCQkJCSAgIGludCBjdXJzb3JPcHRp b25zLCBkb3VibGUgKnR1cGxlX2ZyYWN0aW9uLAorCQkJCSAgIEV4cGxhaW5TdGF0ZSAqZXMpCit7 CisJcGdwYV90cm92ZSAqdHJvdmUgPSBOVUxMOworCXBncGFfcGxhbm5lcl9zdGF0ZSAqcHBzOwor CWNoYXIJICAgKnN1cHBsaWVkX2FkdmljZTsKKwlib29sCQlnZW5lcmF0ZV9hZHZpY2VfZmVlZGJh Y2sgPSBmYWxzZTsKKwlib29sCQlnZW5lcmF0ZV9hZHZpY2Vfc3RyaW5nID0gZmFsc2U7CisJYm9v bAkJbmVlZHNfcHBzID0gZmFsc2U7CisKKwkvKgorCSAqIERlY2lkZSB3aGV0aGVyIHdlIG5lZWQg dG8gZ2VuZXJhdGUgYW4gYWR2aWNlIHN0cmluZy4gV2UgbXVzdCBkbyB0aGlzIGlmCisJICogdGhl IHVzZXIgaGFzIHRvbGQgdXMgdG8gZG8gaXQgY2F0ZWdvcmljYWxseSwgb3IgaWYgYXQgbGVhc3Qg b25lCisJICogY29sbGVjdG9yIGlzIGVuYWJsZWQsIG9yIGlmIHRoZSB1c2VyIGhhcyByZXF1ZXN0 ZWQgaXQgdXNpbmcgdGhlIEVYUExBSU4KKwkgKiAoUExBTl9BRFZJQ0UpIG9wdGlvbi4KKwkgKi8K KwlnZW5lcmF0ZV9hZHZpY2Vfc3RyaW5nID0gKHBnX3BsYW5fYWR2aWNlX2Fsd2F5c19zdG9yZV9h ZHZpY2VfZGV0YWlscyB8fAorCQkJCQkJCSAgcGdfcGxhbl9hZHZpY2VfbG9jYWxfY29sbGVjdG9y IHx8CisJCQkJCQkJICBwZ19wbGFuX2FkdmljZV9zaGFyZWRfY29sbGVjdG9yIHx8CisJCQkJCQkJ ICBwZ19wbGFuX2FkdmljZV9zaG91bGRfZXhwbGFpbihlcykpOworCWlmIChnZW5lcmF0ZV9hZHZp Y2Vfc3RyaW5nKQorCQluZWVkc19wcHMgPSB0cnVlOworCisJLyoKKwkgKiBJZiBhbnkgYWR2aWNl IHdhcyBwcm92aWRlZCwgYnVpbGQgYSB0cm92ZSBvZiBhZHZpY2UgZm9yIHVzZSBkdXJpbmcKKwkg KiBwbGFubmluZy4KKwkgKi8KKwlzdXBwbGllZF9hZHZpY2UgPSBwZ19wbGFuX2FkdmljZV9nZXRf c3VwcGxpZWRfcXVlcnlfYWR2aWNlKGdsb2IsIHBhcnNlLAorCQkJCQkJCQkJCQkJCQkJICAgcXVl cnlfc3RyaW5nLAorCQkJCQkJCQkJCQkJCQkJICAgY3Vyc29yT3B0aW9ucywKKwkJCQkJCQkJCQkJ CQkJCSAgIGVzKTsKKwlpZiAoc3VwcGxpZWRfYWR2aWNlICE9IE5VTEwgJiYgc3VwcGxpZWRfYWR2 aWNlWzBdICE9ICdcMCcpCisJeworCQlMaXN0CSAgICphZHZpY2VfaXRlbXM7CisJCWNoYXIJICAg KmVycm9yOworCisJCS8qCisJCSAqIElmIHRoZSBzdXBwbGllZCBhZHZpY2Ugc3RyaW5nIGNvbWVz IGZyb20gcGdfcGxhbl9hZHZpY2UuYWR2aWNlLAorCQkgKiBwYXJzaW5nIHNob3VsZG4ndCBmYWls IGhlcmUsIGJlY2F1c2Ugd2UgbXVzdCBoYXZlIHByZXZpb3VzbHkgcGFyc2VkCisJCSAqIHN1Y2Nl c3NmdWxseSBpbiBwZ19wbGFuX2FkdmljZV9hZHZpY2VfY2hlY2tfaG9vay4gSG93ZXZlciwgaXQg bWlnaHQKKwkJICogYWxzbyBiZSBjb21lIGZyb20gYSBob29rIHJlZ2lzdGVyZWQgdmlhIHBnX3Bs YW5fYWR2aWNlX2FkZF9hZHZpc29yLAorCQkgKiBhbmQgd2UgY2FuJ3QgYmUgc3VyZSB3aGV0aGVy IHRoYXQncyB2YWxpZC4gKFBsdXMsIGhhdmluZyBhbiBlcnJvcgorCQkgKiBjaGVjayBvZiBoZXJl IHNlZW1zIGxpa2UgYSBnb29kIGlkZWEgYW55d2F5LCBqdXN0IGZvciBzYWZldHkuKQorCQkgKi8K KwkJYWR2aWNlX2l0ZW1zID0gcGdwYV9wYXJzZShzdXBwbGllZF9hZHZpY2UsICZlcnJvcik7CisJ CWlmIChlcnJvcikKKwkJCWVyZXBvcnQoV0FSTklORywKKwkJCQkJZXJybXNnKCJjb3VsZCBub3Qg cGFyc2Ugc3VwcGxpZWQgYWR2aWNlOiAlcyIsIGVycm9yKSk7CisKKwkJLyoKKwkJICogSXQncyBw b3NzaWJsZSB0aGF0IHRoZSBhZHZpY2Ugc3RyaW5nIHdhcyBub24tZW1wdHkgYnV0IGNvbnRhaW5l ZCBubworCQkgKiBhY3R1YWwgYWR2aWNlLCBlLmcuIGl0IHdhcyBhbGwgd2hpdGVzcGFjZS4KKwkJ ICovCisJCWlmIChhZHZpY2VfaXRlbXMgIT0gTklMKQorCQl7CisJCQl0cm92ZSA9IHBncGFfYnVp bGRfdHJvdmUoYWR2aWNlX2l0ZW1zKTsKKwkJCW5lZWRzX3BwcyA9IHRydWU7CisKKwkJCS8qCisJ CQkgKiBJZiB3ZSBrbm93IHRoYXQgd2UncmUgcnVubmluZyB1bmRlciBFWFBMQUlOLCBvciBpZiB0 aGUgdXNlciBoYXMKKwkJCSAqIHRvbGQgdXMgdG8gYWx3YXlzIGRvIHRoZSB3b3JrLCBnZW5lcmF0 ZSBhZHZpY2UgZmVlZGJhY2suCisJCQkgKi8KKwkJCWlmIChlcyAhPSBOVUxMIHx8IHBnX3BsYW5f YWR2aWNlX2ZlZWRiYWNrX3dhcm5pbmdzIHx8CisJCQkJcGdfcGxhbl9hZHZpY2VfYWx3YXlzX3N0 b3JlX2FkdmljZV9kZXRhaWxzKQorCQkJCWdlbmVyYXRlX2FkdmljZV9mZWVkYmFjayA9IHRydWU7 CisJCX0KKwl9CisKKyNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5HCisKKwkvKgorCSAqIElmIGFz c2VydHMgYXJlIGVuYWJsZWQsIGFsd2F5cyBidWlsZCBhIHByaXZhdGUgc3RhdGUgb2JqZWN0IGZv cgorCSAqIGNyb3NzLWNoZWNrcy4KKwkgKi8KKwluZWVkc19wcHMgPSB0cnVlOworI2VuZGlmCisK KwkvKgorCSAqIFdlIG9ubHkgY3JlYXRlIGFuZCBpbml0aWFsaXplIGEgcHJpdmF0ZSBzdGF0ZSBv YmplY3QgaWYgaXQncyBuZWVkZWQgZm9yCisJICogc29tZSBwdXJwb3NlLiBUaGF0IGNvdWxkIGJl ICgxKSByZWNvcmRpbmcgdGhhdCB3ZSB3aWxsIG5lZWQgdG8gZ2VuZXJhdGUKKwkgKiBhbiBhZHZp Y2Ugc3RyaW5nLCAoMikgc3RvcmluZyBhIHRyb3ZlIG9mIHN1cHBsaWVkIGFkdmljZSwgb3IgKDMp CisJICogZmFjaWxpdGF0aW5nIGRlYnVnZ2luZyBjcm9zcy1jaGVja3Mgd2hlbiBhc3NlcnRzIGFy ZSBlbmFibGVkLgorCSAqLworCWlmIChuZWVkc19wcHMpCisJeworCQlwcHMgPSBwYWxsb2MwX29i amVjdChwZ3BhX3BsYW5uZXJfc3RhdGUpOworCQlwcHMtPmV4cGxhaW5fc3RhdGUgPSBlczsKKwkJ cHBzLT5nZW5lcmF0ZV9hZHZpY2VfZmVlZGJhY2sgPSBnZW5lcmF0ZV9hZHZpY2VfZmVlZGJhY2s7 CisJCXBwcy0+Z2VuZXJhdGVfYWR2aWNlX3N0cmluZyA9IGdlbmVyYXRlX2FkdmljZV9zdHJpbmc7 CisJCXBwcy0+dHJvdmUgPSB0cm92ZTsKKyNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5HCisJCXBw cy0+cmlfY2hlY2tfaGFzaCA9CisJCQlwZ3BhX3JpX2NoZWNrX2NyZWF0ZShDdXJyZW50TWVtb3J5 Q29udGV4dCwgMTAyNCwgTlVMTCk7CisjZW5kaWYKKwkJU2V0UGxhbm5lckdsb2JhbEV4dGVuc2lv blN0YXRlKGdsb2IsIHBsYW5uZXJfZXh0ZW5zaW9uX2lkLCBwcHMpOworCX0KK30KKworLyoKKyAq IENhcnJ5IG91dCB3aGF0ZXZlciB3b3JrIHdlIHdhbnQgdG8gZG8gYWZ0ZXIgcGxhbm5pbmcgaXMg Y29tcGxldGUuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX3BsYW5uZXJfc2h1dGRvd24oUGxhbm5l ckdsb2JhbCAqZ2xvYiwgUXVlcnkgKnBhcnNlLAorCQkJCQkgIGNvbnN0IGNoYXIgKnF1ZXJ5X3N0 cmluZywgUGxhbm5lZFN0bXQgKnBzdG10KQoreworCXBncGFfcGxhbm5lcl9zdGF0ZSAqcHBzOwor CXBncGFfdHJvdmUgKnRyb3ZlID0gTlVMTDsKKwlwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgd2Fs a2VyID0gezB9OwkvKiBwbGFjYXRlIGNvbXBpbGVyICovCisJYm9vbAkJZ2VuZXJhdGVfYWR2aWNl X2ZlZWRiYWNrID0gZmFsc2U7CisJYm9vbAkJZ2VuZXJhdGVfYWR2aWNlX3N0cmluZyA9IGZhbHNl OworCUxpc3QJICAgKnBncGFfaXRlbXMgPSBOSUw7CisJcGdwYV9pZGVudGlmaWVyICpydF9pZGVu dGlmaWVycyA9IE5VTEw7CisKKwkvKiBGZXRjaCBvdXIgcHJpdmF0ZSBzdGF0ZSwgc2V0IHVwIGJ5 IHBncGFfcGxhbm5lcl9zZXR1cCgpLiAqLworCXBwcyA9IEdldFBsYW5uZXJHbG9iYWxFeHRlbnNp b25TdGF0ZShnbG9iLCBwbGFubmVyX2V4dGVuc2lvbl9pZCk7CisJaWYgKHBwcyAhPSBOVUxMKQor CXsKKwkJdHJvdmUgPSBwcHMtPnRyb3ZlOworCQlnZW5lcmF0ZV9hZHZpY2VfZmVlZGJhY2sgPSBw cHMtPmdlbmVyYXRlX2FkdmljZV9mZWVkYmFjazsKKwkJZ2VuZXJhdGVfYWR2aWNlX3N0cmluZyA9 IHBwcy0+Z2VuZXJhdGVfYWR2aWNlX3N0cmluZzsKKwl9CisKKwkvKgorCSAqIElmIHdlJ3JlIHRy eWluZyB0byBnZW5lcmF0ZSBhbiBhZHZpY2Ugc3RyaW5nIG9yIGlmIHdlJ3JlIHRyeWluZyB0bwor CSAqIHByb3ZpZGUgYWR2aWNlIGZlZWRiYWNrLCB0aGVuIHdlIHdpbGwgbmVlZCB0byBjcmVhdGUg cmFuZ2UgdGFibGUKKwkgKiBpZGVudGlmaWVycy4KKwkgKi8KKwlpZiAoZ2VuZXJhdGVfYWR2aWNl X3N0cmluZyB8fCBnZW5lcmF0ZV9hZHZpY2VfZmVlZGJhY2spCisJeworCQlwZ3BhX3BsYW5fd2Fs a2VyKCZ3YWxrZXIsIHBzdG10LCBwcHMtPnNqX3VuaXF1ZV9yZWxzKTsKKwkJcnRfaWRlbnRpZmll cnMgPSBwZ3BhX2NyZWF0ZV9pZGVudGlmaWVyc19mb3JfcGxhbm5lZF9zdG10KHBzdG10KTsKKwl9 CisKKwkvKiBHZW5lcmF0ZSB0aGUgYWR2aWNlIHN0cmluZywgaWYgd2UgbmVlZCB0byBkbyBzby4g Ki8KKwlpZiAoZ2VuZXJhdGVfYWR2aWNlX3N0cmluZykKKwl7CisJCWNoYXIJICAgKmFkdmljZV9z dHJpbmc7CisJCVN0cmluZ0luZm9EYXRhIGJ1ZjsKKworCQkvKiBHZW5lcmF0ZSBhIHRleHR1YWwg YWR2aWNlIHN0cmluZy4gKi8KKwkJaW5pdFN0cmluZ0luZm8oJmJ1Zik7CisJCXBncGFfb3V0cHV0 X2FkdmljZSgmYnVmLCAmd2Fsa2VyLCBydF9pZGVudGlmaWVycyk7CisJCWFkdmljZV9zdHJpbmcg PSBidWYuZGF0YTsKKworCQkvKiBJZiB0aGUgYWR2aWNlIHN0cmluZyBpcyBlbXB0eSwgZG9uJ3Qg Ym90aGVyIGNvbGxlY3RpbmcgaXQuICovCisJCWlmIChhZHZpY2Vfc3RyaW5nWzBdICE9ICdcMCcp CisJCQlwZ3BhX2NvbGxlY3RfYWR2aWNlKHBzdG10LT5xdWVyeUlkLCBxdWVyeV9zdHJpbmcsIGFk dmljZV9zdHJpbmcpOworCisJCS8qIFNhdmUgdGhlIGFkdmljZSBzdHJpbmcgaW4gdGhlIGZpbmFs IHBsYW4uICovCisJCXBncGFfaXRlbXMgPSBsYXBwZW5kKHBncGFfaXRlbXMsCisJCQkJCQkJIG1h a2VEZWZFbGVtKCJhZHZpY2Vfc3RyaW5nIiwKKwkJCQkJCQkJCQkgKE5vZGUgKikgbWFrZVN0cmlu ZyhhZHZpY2Vfc3RyaW5nKSwKKwkJCQkJCQkJCQkgLTEpKTsKKwl9CisKKwkvKgorCSAqIElmIHdl J3JlIHRyeWluZyB0byBwcm92aWRlIGFkdmljZSBmZWVkYmFjaywgdGhlbiB3ZSB3aWxsIG5lZWQg dG8KKwkgKiBhbmFseXplIGhvdyBzdWNjZXNzZnVsIHRoZSBhZHZpY2Ugd2FzLgorCSAqLworCWlm IChnZW5lcmF0ZV9hZHZpY2VfZmVlZGJhY2spCisJeworCQlMaXN0CSAgICpmZWVkYmFjayA9IE5J TDsKKworCQkvKgorCQkgKiBJbmplY3QgYSBOb2RlLXRyZWUgcmVwcmVzZW50YXRpb24gb2YgYWxs IHRoZSB0cm92ZS1lbnRyeSBmbGFncyBpbnRvCisJCSAqIHRoZSBQbGFubmVkU3RtdC4KKwkJICov CisJCWZlZWRiYWNrID0gcGdwYV9wbGFubmVyX2FwcGVuZF9mZWVkYmFjayhmZWVkYmFjaywKKwkJ CQkJCQkJCQkJCXRyb3ZlLAorCQkJCQkJCQkJCQkJUEdQQV9UUk9WRV9MT09LVVBfU0NBTiwKKwkJ CQkJCQkJCQkJCXJ0X2lkZW50aWZpZXJzLCAmd2Fsa2VyKTsKKwkJZmVlZGJhY2sgPSBwZ3BhX3Bs YW5uZXJfYXBwZW5kX2ZlZWRiYWNrKGZlZWRiYWNrLAorCQkJCQkJCQkJCQkJdHJvdmUsCisJCQkJ CQkJCQkJCQlQR1BBX1RST1ZFX0xPT0tVUF9KT0lOLAorCQkJCQkJCQkJCQkJcnRfaWRlbnRpZmll cnMsICZ3YWxrZXIpOworCQlmZWVkYmFjayA9IHBncGFfcGxhbm5lcl9hcHBlbmRfZmVlZGJhY2so ZmVlZGJhY2ssCisJCQkJCQkJCQkJCQl0cm92ZSwKKwkJCQkJCQkJCQkJCVBHUEFfVFJPVkVfTE9P S1VQX1JFTCwKKwkJCQkJCQkJCQkJCXJ0X2lkZW50aWZpZXJzLCAmd2Fsa2VyKTsKKworCQlwZ3Bh X2l0ZW1zID0gbGFwcGVuZChwZ3BhX2l0ZW1zLCBtYWtlRGVmRWxlbSgiZmVlZGJhY2siLAorCQkJ CQkJCQkJCQkJCSAoTm9kZSAqKSBmZWVkYmFjaywgLTEpKTsKKworCQkvKiBJZiB3ZSB3ZXJlIGFz a2VkIHRvIGdlbmVyYXRlIGZlZWRiYWNrIHdhcm5pbmdzLCBkbyBzby4gKi8KKwkJaWYgKHBnX3Bs YW5fYWR2aWNlX2ZlZWRiYWNrX3dhcm5pbmdzKQorCQkJcGdwYV9wbGFubmVyX2ZlZWRiYWNrX3dh cm5pbmcoZmVlZGJhY2spOworCX0KKworCS8qIFB1c2ggd2hhdGV2ZXIgZGF0YSB3ZSdyZSBzYXZp bmcgaW50byB0aGUgUGxhbm5lZFN0bXQuICovCisJaWYgKHBncGFfaXRlbXMgIT0gTklMKQorCQlw c3RtdC0+ZXh0ZW5zaW9uX3N0YXRlID0KKwkJCWxhcHBlbmQocHN0bXQtPmV4dGVuc2lvbl9zdGF0 ZSwKKwkJCQkJbWFrZURlZkVsZW0oInBnX3BsYW5fYWR2aWNlIiwgKE5vZGUgKikgcGdwYV9pdGVt cywgLTEpKTsKKworCS8qCisJICogSWYgYXNzZXJ0aW9ucyBhcmUgZW5hYmxlZCwgY3Jvc3MtY2hl Y2sgdGhlIGdlbmVyYXRlZCByYW5nZSB0YWJsZQorCSAqIGlkZW50aWZpZXJzLgorCSAqLworCWlm IChwcHMgIT0gTlVMTCkKKwkJcGdwYV9yaV9jaGVja2VyX3ZhbGlkYXRlKHBwcywgcHN0bXQpOwor fQorCisvKgorICogSG9vayBmdW5jdGlvbiBmb3IgZ2V0X3JlbGF0aW9uX2luZm8oKS4KKyAqCisg KiBXZSBjYW4gYXBwbHkgc2NhbiBhZHZpY2UgYXQgdGhpcyBvcGludCwgYW5kIHdlIGFsc28gdXNl ZSB0aGlzIGFzIGFuCisgKiBvcHBvcnR1bml0eSB0byBkbyByYW5nZS10YWJsZSBpZGVudGlmaWVy IGNyb3NzLWNoZWNraW5nIGluIGFzc2VydC1lbmFibGVkCisgKiBidWlsZHMuCisgKi8KK3N0YXRp YyB2b2lkCitwZ3BhX2dldF9yZWxhdGlvbl9pbmZvKFBsYW5uZXJJbmZvICpyb290LCBPaWQgcmVs YXRpb25PYmplY3RJZCwKKwkJCQkJICAgYm9vbCBpbmhwYXJlbnQsIFJlbE9wdEluZm8gKnJlbCkK K3sKKwlwZ3BhX3BsYW5uZXJfc3RhdGUgKnBwczsKKworCS8qIEZldGNoIG91ciBwcml2YXRlIHN0 YXRlLCBzZXQgdXAgYnkgcGdwYV9wbGFubmVyX3NldHVwKCkuICovCisJcHBzID0gR2V0UGxhbm5l ckdsb2JhbEV4dGVuc2lvblN0YXRlKHJvb3QtPmdsb2IsIHBsYW5uZXJfZXh0ZW5zaW9uX2lkKTsK KworCS8qIFNhdmUgZGV0YWlscyBuZWVkZWQgZm9yIHJhbmdlIHRhYmxlIGlkZW50aWZpZXIgY3Jv c3MtY2hlY2tpbmcuICovCisJaWYgKHBwcyAhPSBOVUxMKQorCQlwZ3BhX3JpX2NoZWNrZXJfc2F2 ZShwcHMsIHJvb3QsIHJlbCk7CisKKwkvKiBJZiBxdWVyeSBhZHZpY2Ugd2FzIHByb3ZpZGVkLCBz ZWFyY2ggZm9yIHJlbGV2YW50IGVudHJpZXMuICovCisJaWYgKHBwcyAhPSBOVUxMICYmIHBwcy0+ dHJvdmUgIT0gTlVMTCkKKwl7CisJCXBncGFfaWRlbnRpZmllciByaWQ7CisJCXBncGFfdHJvdmVf cmVzdWx0IHRyZXN1bHRfc2NhbjsKKwkJcGdwYV90cm92ZV9yZXN1bHQgdHJlc3VsdF9yZWw7CisK KwkJLyogU2VhcmNoIGZvciBzY2FuIGFkdmljZSBhbmQgZ2VuZXJhbCByZWwgYWR2aWNlLiAqLwor CQlwZ3BhX2NvbXB1dGVfaWRlbnRpZmllcl9ieV9ydGkocm9vdCwgcmVsLT5yZWxpZCwgJnJpZCk7 CisJCXBncGFfdHJvdmVfbG9va3VwKHBwcy0+dHJvdmUsIFBHUEFfVFJPVkVfTE9PS1VQX1NDQU4s IDEsICZyaWQsCisJCQkJCQkgICZ0cmVzdWx0X3NjYW4pOworCQlwZ3BhX3Ryb3ZlX2xvb2t1cChw cHMtPnRyb3ZlLCBQR1BBX1RST1ZFX0xPT0tVUF9SRUwsIDEsICZyaWQsCisJCQkJCQkgICZ0cmVz dWx0X3JlbCk7CisKKwkJLyogSWYgcmVsZXZhbnQgZW50cmllcyB3ZXJlIGZvdW5kLCBhcHBseSB0 aGVtLiAqLworCQlpZiAodHJlc3VsdF9zY2FuLmluZGV4ZXMgIT0gTlVMTCB8fCB0cmVzdWx0X3Jl bC5pbmRleGVzICE9IE5VTEwpCisJCXsKKwkJCXVpbnQ2NAkJb3JpZ2luYWxfbWFzayA9IHJlbC0+ cGdzX21hc2s7CisKKwkJCXBncGFfcGxhbm5lcl9hcHBseV9zY2FuX2FkdmljZShyZWwsCisJCQkJ CQkJCQkJICAgdHJlc3VsdF9zY2FuLmVudHJpZXMsCisJCQkJCQkJCQkJICAgdHJlc3VsdF9zY2Fu LmluZGV4ZXMsCisJCQkJCQkJCQkJICAgdHJlc3VsdF9yZWwuZW50cmllcywKKwkJCQkJCQkJCQkg ICB0cmVzdWx0X3JlbC5pbmRleGVzKTsKKworCQkJLyogRW1pdCBkZWJ1Z2dpbmcgbWVzc2FnZSwg aWYgZW5hYmxlZC4gKi8KKwkJCWlmIChwZ19wbGFuX2FkdmljZV90cmFjZV9tYXNrICYmIG9yaWdp bmFsX21hc2sgIT0gcmVsLT5wZ3NfbWFzaykKKwkJCQllcmVwb3J0KFdBUk5JTkcsCisJCQkJCQko ZXJybXNnKCJzdHJhdGVneSBtYXNrIGZvciBSVEkgJXUgY2hhbmdlZCBmcm9tIDB4JSIgUFJJeDY0 ICIgdG8gMHglIiBQUkl4NjQsCisJCQkJCQkJCXJlbC0+cmVsaWQsIG9yaWdpbmFsX21hc2ssIHJl bC0+cGdzX21hc2spKSk7CisJCX0KKwl9CisKKwkvKiBQYXNzIGNhbGwgdG8gcHJldmlvdXMgaG9v ay4gKi8KKwlpZiAocHJldl9nZXRfcmVsYXRpb25faW5mbykKKwkJKCpwcmV2X2dldF9yZWxhdGlv bl9pbmZvKSAocm9vdCwgcmVsYXRpb25PYmplY3RJZCwgaW5ocGFyZW50LCByZWwpOworfQorCisv KgorICogRW5mb3JjZSBhbnkgcHJvdmlkZWQgYWR2aWNlIHRoYXQgaXMgcmVsZXZhbnQgdG8gYW55 IG1ldGhvZCBvZiBpbXBsZW1lbnRpbmcKKyAqIHRoaXMgam9pbi4KKyAqCisgKiBBbHRob3VnaCB3 ZSdyZSBwYXNzZWQgdGhlIG91dGVycmVsIGFuZCBpbm5lcnJlbCBoZXJlLCB0aG9zZSBhcmUganVz dAorICogd2hhdGV2ZXIgdmFsdWVzIGhhcHBlbmVkIHRvIHByb21wdCB0aGUgY3JlYXRpb24gb2Yg dGhpcyBqb2lucmVsOyB0aGV5CisgKiBzaG91bGRuJ3QgcmVhbGx5IGluZmx1ZW5jZSBvdXIgY2hv aWNlIG9mIHdoYXQgYWR2aWNlIHRvIGFwcGx5LgorICovCitzdGF0aWMgdm9pZAorcGdwYV9qb2lu cmVsX3NldHVwKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpqb2lucmVsLAorCQkJCSAg IFJlbE9wdEluZm8gKm91dGVycmVsLCBSZWxPcHRJbmZvICppbm5lcnJlbCwKKwkJCQkgICBTcGVj aWFsSm9pbkluZm8gKnNqaW5mbywgTGlzdCAqcmVzdHJpY3RsaXN0KQoreworCXBncGFfam9pbl9z dGF0ZSAqcGpzOworCisJQXNzZXJ0KGJtc19tZW1iZXJzaGlwKGpvaW5yZWwtPnJlbGlkcykgPT0g Qk1TX01VTFRJUExFKTsKKworCS8qIEdldCBvdXIgcHJpdmF0ZSBzdGF0ZSBpbmZvcm1hdGlvbiBm b3IgdGhpcyBqb2luLiAqLworCXBqcyA9IHBncGFfZ2V0X2pvaW5fc3RhdGUocm9vdCwgam9pbnJl bCwgb3V0ZXJyZWwsIGlubmVycmVsKTsKKworCS8qIElmIHRoZXJlIGlzIHJlbGV2YW50IGFkdmlj ZSwgY2FsbCBhIGhlbHBlciBmdW5jdGlvbiB0byBhcHBseSBpdC4gKi8KKwlpZiAocGpzICE9IE5V TEwpCisJeworCQl1aW50NjQJCW9yaWdpbmFsX21hc2sgPSBqb2lucmVsLT5wZ3NfbWFzazsKKwor CQlwZ3BhX3BsYW5uZXJfYXBwbHlfam9pbnJlbF9hZHZpY2UoJmpvaW5yZWwtPnBnc19tYXNrLAor CQkJCQkJCQkJCSAgcm9vdC0+cGxhbl9uYW1lLAorCQkJCQkJCQkJCSAgcGpzKTsKKworCQkvKiBF bWl0IGRlYnVnZ2luZyBtZXNzYWdlLCBpZiBlbmFibGVkLiAqLworCQlpZiAocGdfcGxhbl9hZHZp Y2VfdHJhY2VfbWFzayAmJiBvcmlnaW5hbF9tYXNrICE9IGpvaW5yZWwtPnBnc19tYXNrKQorCQkJ ZXJlcG9ydChXQVJOSU5HLAorCQkJCQkoZXJybXNnKCJzdHJhdGVneSBtYXNrIGZvciBqb2luIG9u IFJUSXMgJXMgY2hhbmdlZCBmcm9tIDB4JSIgUFJJeDY0ICIgdG8gMHglIiBQUkl4NjQsCisJCQkJ CQkJcGdwYV9ibXNfdG9fY3N0cmluZyhqb2lucmVsLT5yZWxpZHMpLAorCQkJCQkJCW9yaWdpbmFs X21hc2ssCisJCQkJCQkJam9pbnJlbC0+cGdzX21hc2spKSk7CisJfQorCisJLyogUGFzcyBjYWxs IHRvIHByZXZpb3VzIGhvb2suICovCisJaWYgKHByZXZfam9pbnJlbF9zZXR1cCkKKwkJKCpwcmV2 X2pvaW5yZWxfc2V0dXApIChyb290LCBqb2lucmVsLCBvdXRlcnJlbCwgaW5uZXJyZWwsCisJCQkJ CQkJICAgc2ppbmZvLCByZXN0cmljdGxpc3QpOworfQorCisvKgorICogRW5mb3JjZSBhbnkgcHJv dmlkZWQgYWR2aWNlIHRoYXQgaXMgcmVsZXZhbnQgdG8gdGhpcyBwYXJ0aWN1bGFyIG1ldGhvZCBv ZgorICogaW1wbGVtZW50aW5nIHRoaXMgcGFydGljdWxhciBqb2luLgorICovCitzdGF0aWMgdm9p ZAorcGdwYV9qb2luX3BhdGhfc2V0dXAoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKmpv aW5yZWwsCisJCQkJCSBSZWxPcHRJbmZvICpvdXRlcnJlbCwgUmVsT3B0SW5mbyAqaW5uZXJyZWws CisJCQkJCSBKb2luVHlwZSBqb2ludHlwZSwgSm9pblBhdGhFeHRyYURhdGEgKmV4dHJhKQorewor CXBncGFfam9pbl9zdGF0ZSAqcGpzOworCisJQXNzZXJ0KGJtc19tZW1iZXJzaGlwKGpvaW5yZWwt PnJlbGlkcykgPT0gQk1TX01VTFRJUExFKTsKKworCS8qCisJICogSWYgd2UncmUgY29uc2lkZXJp bmcgaW1wbGVtZW50aW5nIGEgc2VtaWpvaW4gYnkgbWFraW5nIG9uZSBzaWRlIHVuaXF1ZSwKKwkg KiBtYWtlIGEgbm90ZSBvZiBpdCBpbiB0aGUgcGdwYV9wbGFubmVyX3N0YXRlLiBTZWUgY29tbWVu dHMgZm9yCisJICogcGdwYV9zal91bmlxdWVfcmVsIGZvciB3aHkgd2UgZG8gdGhpcy4KKwkgKi8K KwlpZiAoam9pbnR5cGUgPT0gSk9JTl9VTklRVUVfT1VURVIgfHwgam9pbnR5cGUgPT0gSk9JTl9V TklRVUVfSU5ORVIpCisJeworCQlwZ3BhX3BsYW5uZXJfc3RhdGUgKnBwczsKKwkJUmVsT3B0SW5m byAqdW5pcXVlcmVsOworCisJCXVuaXF1ZXJlbCA9IGpvaW50eXBlID09IEpPSU5fVU5JUVVFX09V VEVSID8gb3V0ZXJyZWwgOiBpbm5lcnJlbDsKKwkJcHBzID0gR2V0UGxhbm5lckdsb2JhbEV4dGVu c2lvblN0YXRlKHJvb3QtPmdsb2IsIHBsYW5uZXJfZXh0ZW5zaW9uX2lkKTsKKwkJaWYgKHBwcyAh PSBOVUxMICYmCisJCQkocHBzLT5nZW5lcmF0ZV9hZHZpY2Vfc3RyaW5nIHx8IHBwcy0+Z2VuZXJh dGVfYWR2aWNlX2ZlZWRiYWNrKSkKKwkJeworCQkJYm9vbAkJZm91bmQgPSBmYWxzZTsKKworCQkJ LyogQXZvaWQgYWRkaW5nIGR1cGxpY2F0ZXMuICovCisJCQlmb3JlYWNoX3B0cihwZ3BhX3NqX3Vu aXF1ZV9yZWwsIHVyLCBwcHMtPnNqX3VuaXF1ZV9yZWxzKQorCQkJeworCQkJCS8qCisJCQkJICog V2Ugc2hvdWxkIGFsd2F5cyB1c2UgdGhlIHNhbWUgcG9pbnRlciBmb3IgdGhlIHNhbWUgcGxhbgor CQkJCSAqIG5hbWUsIHNvIHdlIG5lZWQgbm90IHVzZSBzdHJjbXAoKSBoZXJlLgorCQkJCSAqLwor CQkJCWlmIChyb290LT5wbGFuX25hbWUgPT0gdXItPnBsYW5fbmFtZSAmJgorCQkJCQlibXNfZXF1 YWwodW5pcXVlcmVsLT5yZWxpZHMsIHVyLT5yZWxpZHMpKQorCQkJCXsKKwkJCQkJZm91bmQgPSB0 cnVlOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisKKwkJCS8qIElmIG5vdCBhIGR1cGxpY2F0 ZSwgYXBwZW5kIHRvIHRoZSBsaXN0LiAqLworCQkJaWYgKCFmb3VuZCkKKwkJCXsKKwkJCQlwZ3Bh X3NqX3VuaXF1ZV9yZWwgKnVyID0gcGFsbG9jX29iamVjdChwZ3BhX3NqX3VuaXF1ZV9yZWwpOwor CisJCQkJdXItPnBsYW5fbmFtZSA9IHJvb3QtPnBsYW5fbmFtZTsKKwkJCQl1ci0+cmVsaWRzID0g dW5pcXVlcmVsLT5yZWxpZHM7CisJCQkJcHBzLT5zal91bmlxdWVfcmVscyA9IGxhcHBlbmQocHBz LT5zal91bmlxdWVfcmVscywgdXIpOworCQkJfQorCQl9CisJfQorCisJLyogR2V0IG91ciBwcml2 YXRlIHN0YXRlIGluZm9ybWF0aW9uIGZvciB0aGlzIGpvaW4uICovCisJcGpzID0gcGdwYV9nZXRf am9pbl9zdGF0ZShyb290LCBqb2lucmVsLCBvdXRlcnJlbCwgaW5uZXJyZWwpOworCisJLyogSWYg dGhlcmUgaXMgcmVsZXZhbnQgYWR2aWNlLCBjYWxsIGEgaGVscGVyIGZ1bmN0aW9uIHRvIGFwcGx5 IGl0LiAqLworCWlmIChwanMgIT0gTlVMTCkKKwl7CisJCXVpbnQ2NAkJb3JpZ2luYWxfbWFzayA9 IGV4dHJhLT5wZ3NfbWFzazsKKworCQlwZ3BhX3BsYW5uZXJfYXBwbHlfam9pbl9wYXRoX2Fkdmlj ZShqb2ludHlwZSwKKwkJCQkJCQkJCQkJJmV4dHJhLT5wZ3NfbWFzaywKKwkJCQkJCQkJCQkJcm9v dC0+cGxhbl9uYW1lLAorCQkJCQkJCQkJCQlwanMpOworCisJCS8qIEVtaXQgZGVidWdnaW5nIG1l c3NhZ2UsIGlmIGVuYWJsZWQuICovCisJCWlmIChwZ19wbGFuX2FkdmljZV90cmFjZV9tYXNrICYm IG9yaWdpbmFsX21hc2sgIT0gZXh0cmEtPnBnc19tYXNrKQorCQkJZXJlcG9ydChXQVJOSU5HLAor CQkJCQkoZXJybXNnKCJzdHJhdGVneSBtYXNrIGZvciAlcyBqb2luIG9uICVzIHdpdGggb3V0ZXIg JXMgYW5kIGlubmVyICVzIGNoYW5nZWQgZnJvbSAweCUiIFBSSXg2NCAiIHRvIDB4JSIgUFJJeDY0 LAorCQkJCQkJCXBncGFfam9pbnR5cGVfdG9fY3N0cmluZyhqb2ludHlwZSksCisJCQkJCQkJcGdw YV9ibXNfdG9fY3N0cmluZyhqb2lucmVsLT5yZWxpZHMpLAorCQkJCQkJCXBncGFfYm1zX3RvX2Nz dHJpbmcob3V0ZXJyZWwtPnJlbGlkcyksCisJCQkJCQkJcGdwYV9ibXNfdG9fY3N0cmluZyhpbm5l cnJlbC0+cmVsaWRzKSwKKwkJCQkJCQlvcmlnaW5hbF9tYXNrLAorCQkJCQkJCWV4dHJhLT5wZ3Nf bWFzaykpKTsKKwl9CisKKwkvKiBQYXNzIGNhbGwgdG8gcHJldmlvdXMgaG9vay4gKi8KKwlpZiAo cHJldl9qb2luX3BhdGhfc2V0dXApCisJCSgqcHJldl9qb2luX3BhdGhfc2V0dXApIChyb290LCBq b2lucmVsLCBvdXRlcnJlbCwgaW5uZXJyZWwsCisJCQkJCQkJCSBqb2ludHlwZSwgZXh0cmEpOwor fQorCisvKgorICogU2VhcmNoIGZvciBhZHZpY2UgcGVydGFpbmluZyB0byBhIHByb3Bvc2VkIGpv aW4uCisgKi8KK3N0YXRpYyBwZ3BhX2pvaW5fc3RhdGUgKgorcGdwYV9nZXRfam9pbl9zdGF0ZShQ bGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqam9pbnJlbCwKKwkJCQkJUmVsT3B0SW5mbyAq b3V0ZXJyZWwsIFJlbE9wdEluZm8gKmlubmVycmVsKQoreworCXBncGFfcGxhbm5lcl9zdGF0ZSAq cHBzOworCXBncGFfam9pbl9zdGF0ZSAqcGpzOworCWJvb2wJCW5ld19wanMgPSBmYWxzZTsKKwor CS8qIEZldGNoIG91ciBwcml2YXRlIHN0YXRlLCBzZXQgdXAgYnkgcGdwYV9wbGFubmVyX3NldHVw KCkuICovCisJcHBzID0gR2V0UGxhbm5lckdsb2JhbEV4dGVuc2lvblN0YXRlKHJvb3QtPmdsb2Is IHBsYW5uZXJfZXh0ZW5zaW9uX2lkKTsKKwlpZiAocHBzID09IE5VTEwgfHwgcHBzLT50cm92ZSA9 PSBOVUxMKQorCXsKKwkJLyogTm8gYWR2aWNlIGFwcGxpZXMgdG8gdGhpcyBxdWVyeSwgaGVuY2Ug bm9uZSB0byB0aGlzIGpvaW5yZWwuICovCisJCXJldHVybiBOVUxMOworCX0KKworCS8qCisJICog U2VlIHdoZXRoZXIgd2UndmUgcHJldmlvdXNseSBhc3NvY2lhdGVkIGEgcGdwYV9qb2luX3N0YXRl IHdpdGggdGhpcworCSAqIGpvaW5yZWwuIElmIHdlIGhhdmUgbm90LCB3ZSBuZWVkIHRvIHRyeSB0 byBjb25zdHJ1Y3Qgb25lLiBJZiB3ZSBoYXZlLAorCSAqIHRoZW4gdGhlcmUgYXJlIHR3byBjYXNl czogKGEpIGlmIGlubmVycmVsIGFuZCBvdXRlcnJlbCBhcmUgdW5jaGFuZ2VkLAorCSAqIHdlIGNh biBzaW1wbHkgdXNlIGl0LCBhbmQgKGIpIGlmIHRoZXkgaGF2ZSBjaGFuZ2VkLCB3ZSBuZWVkIHRv IHJlamlnZ2VyCisJICogdGhlIGFycmF5IG9mIGlkZW50aWZpZXJzIGJ1dCBjYW4gc3RpbGwgc2tp cCB0aGUgdHJvdmUgbG9va3VwLgorCSAqLworCXBqcyA9IEdldFJlbE9wdEluZm9FeHRlbnNpb25T dGF0ZShqb2lucmVsLCBwbGFubmVyX2V4dGVuc2lvbl9pZCk7CisJaWYgKHBqcyAhPSBOVUxMKQor CXsKKwkJaWYgKHBqcy0+am9pbl9pbmRleGVzID09IE5VTEwgJiYgcGpzLT5yZWxfaW5kZXhlcyA9 PSBOVUxMKQorCQl7CisJCQkvKgorCQkJICogSWYgdGhlcmUncyBubyBwb3RlbnRpYWxseSByZWxl dmFudCBhZHZpY2UsIHRoZW4gdGhlIHByZXNlbmNlIG9mCisJCQkgKiB0aGlzIHBncGFfam9pbl9z dGF0ZSBhY3RzIGxpa2UgYSBuZWdhdGl2ZSBjYWNoZSBlbnRyeTogaXQgdGVsbHMKKwkJCSAqIHVz IG5vdCB0byBib3RoZXIgc2VhcmNoaW5nIHRoZSB0cm92ZSBmb3IgYWR2aWNlLCBiZWNhdXNlIHdl CisJCQkgKiB3aWxsIG5vdCBmaW5kIGFueS4KKwkJCSAqLworCQkJcmV0dXJuIE5VTEw7CisJCX0K KworCQlpZiAocGpzLT5vdXRlcnJlbCA9PSBvdXRlcnJlbCAmJiBwanMtPmlubmVycmVsID09IGlu bmVycmVsKQorCQl7CisJCQkvKiBObyB1cGRhdGVzIHJlcXVpcmVkLCBzbyBqdXN0IHJldHVybi4g Ki8KKwkJCS8qIFhYWC4gRG9lcyB0aGlzIG5lZWQgdG8gZG8gc29tZXRoaW5nIGRpZmZlcmVudCB1 bmRlciBHRVFPPyAqLworCQkJcmV0dXJuIHBqczsKKwkJfQorCX0KKworCS8qCisJICogSWYgdGhl cmUncyBubyBwZ3BhX2pvaW5fc3RhdGUgeWV0LCB3ZSBuZWVkIHRvIGFsbG9jYXRlIG9uZS4gVHJv dmUga2V5cworCSAqIHdpbGwgbm90IGdldCBidWlsdCBmb3IgUlRFX0pPSU4gUlRFcywgc28gdGhl IGFycmF5IG1heSBlbmQgdXAgYmVpbmcKKwkgKiBsYXJnZXIgdGhhbiBuZWVkZWQuIEl0J3Mgbm90 IHdvcnRoIHRyeWluZyB0byBjb21wdXRlIGEgcGVyZmVjdGx5CisJICogYWNjdXJhdGUgY291bnQg aGVyZS4KKwkgKi8KKwlpZiAocGpzID09IE5VTEwpCisJeworCQlpbnQJCQlwZXNzaW1pc3RpY19j b3VudCA9IGJtc19udW1fbWVtYmVycyhqb2lucmVsLT5yZWxpZHMpOworCisJCXBqcyA9IHBhbGxv YzBfb2JqZWN0KHBncGFfam9pbl9zdGF0ZSk7CisJCXBqcy0+cmlkcyA9IHBhbGxvY19hcnJheShw Z3BhX2lkZW50aWZpZXIsIHBlc3NpbWlzdGljX2NvdW50KTsKKwkJbmV3X3BqcyA9IHRydWU7CisJ fQorCisJLyoKKwkgKiBFaXRoZXIgd2UganVzdCBhbGxvY2F0ZWQgYSBuZXcgcGdwYV9qb2luX3N0 YXRlLCBvciB0aGUgZXhpc3Rpbmcgb25lCisJICogbmVlZHMgcmVjb25maWd1cmluZyBmb3IgYSBu ZXcgaW5uZXJyZWwgYW5kIG91dGVycmVsLiBUaGUgcmVxdWlyZWQgYXJyYXkKKwkgKiBzaXplIGNh bid0IGNoYW5nZSwgc28gd2UgY2FuIG92ZXJ3cml0ZSB0aGUgZXhpc3Rpbmcgb25lLgorCSAqLwor CXBqcy0+b3V0ZXJyZWwgPSBvdXRlcnJlbDsKKwlwanMtPmlubmVycmVsID0gaW5uZXJyZWw7CisJ cGpzLT5vdXRlcl9jb3VudCA9CisJCXBncGFfY29tcHV0ZV9pZGVudGlmaWVyc19ieV9yZWxpZHMo cm9vdCwgb3V0ZXJyZWwtPnJlbGlkcywgcGpzLT5yaWRzKTsKKwlwanMtPmlubmVyX2NvdW50ID0K KwkJcGdwYV9jb21wdXRlX2lkZW50aWZpZXJzX2J5X3JlbGlkcyhyb290LCBpbm5lcnJlbC0+cmVs aWRzLAorCQkJCQkJCQkJCSAgIHBqcy0+cmlkcyArIHBqcy0+b3V0ZXJfY291bnQpOworCisJLyoK KwkgKiBJZiB3ZSBhbGxvY2F0ZWQgYSBuZXcgcGdwYV9qb2luX3N0YXRlLCBzZWFyY2ggb3VyIHRy b3ZlIG9mIGFkdmljZSBmb3IKKwkgKiByZWxldmFudCBlbnRyaWVzLiBUaGUgdHJvdmUgbG9va3Vw IHdpbGwgcmV0dXJuIHRoZSBzYW1lIHJlc3VsdHMgZm9yCisJICogZXZlcnkgb3V0ZXJyZWwvaW5u ZXJyZWwgY29tYmluYXRpb24sIHNvIHdlIGRvbid0IG5lZWQgdG8gcmVwZWF0IHRoYXQKKwkgKiB3 b3JrIGV2ZXJ5IHRpbWUuCisJICovCisJaWYgKG5ld19wanMpCisJeworCQlwZ3BhX3Ryb3ZlX3Jl c3VsdCB0cmVzdWx0OworCisJCS8qIEZpbmQgam9pbiBlbnRyaWVzLiAqLworCQlwZ3BhX3Ryb3Zl X2xvb2t1cChwcHMtPnRyb3ZlLCBQR1BBX1RST1ZFX0xPT0tVUF9KT0lOLAorCQkJCQkJICBwanMt Pm91dGVyX2NvdW50ICsgcGpzLT5pbm5lcl9jb3VudCwKKwkJCQkJCSAgcGpzLT5yaWRzLCAmdHJl c3VsdCk7CisJCXBqcy0+am9pbl9lbnRyaWVzID0gdHJlc3VsdC5lbnRyaWVzOworCQlwanMtPmpv aW5faW5kZXhlcyA9IHRyZXN1bHQuaW5kZXhlczsKKworCQkvKiBGaW5kIHJlbCBlbnRyaWVzLiAq LworCQlwZ3BhX3Ryb3ZlX2xvb2t1cChwcHMtPnRyb3ZlLCBQR1BBX1RST1ZFX0xPT0tVUF9SRUws CisJCQkJCQkgIHBqcy0+b3V0ZXJfY291bnQgKyBwanMtPmlubmVyX2NvdW50LAorCQkJCQkJICBw anMtPnJpZHMsICZ0cmVzdWx0KTsKKwkJcGpzLT5yZWxfZW50cmllcyA9IHRyZXN1bHQuZW50cmll czsKKwkJcGpzLT5yZWxfaW5kZXhlcyA9IHRyZXN1bHQuaW5kZXhlczsKKworCQkvKiBOb3cgdGhh dCB0aGUgbmV3IHBncGFfam9pbl9zdGF0ZSBpcyBmdWxseSB2YWxpZCwgc2F2ZSBhIHBvaW50ZXIu ICovCisJCVNldFJlbE9wdEluZm9FeHRlbnNpb25TdGF0ZShqb2lucmVsLCBwbGFubmVyX2V4dGVu c2lvbl9pZCwgcGpzKTsKKworCQkvKgorCQkgKiBJZiB0aGVyZSB3YXMgbm8gcmVsZXZhbnQgYWR2 aWNlIGZvdW5kLCBqdXN0IHJldHVybiBOVUxMLiBUaGlzCisJCSAqIHBncGFfam9pbl9zdGF0ZSB3 aWxsIHN0aWNrIGFyb3VuZCBhcyBhIHNvcnQgb2YgbmVnYXRpdmUgY2FjaGUKKwkJICogZW50cnks IHNvIHRoYXQgZnV0dXJlIGNhbGxzIGZvciB0aGlzIHNhbWUgam9pbnJlbCBxdWlja2x5IHJldHVy bgorCQkgKiBOVUxMLgorCQkgKi8KKwkJaWYgKHBqcy0+am9pbl9pbmRleGVzID09IE5VTEwgJiYg cGpzLT5yZWxfaW5kZXhlcyA9PSBOVUxMKQorCQkJcmV0dXJuIE5VTEw7CisJfQorCisJcmV0dXJu IHBqczsKK30KKworLyoKKyAqIEVuZm9yY2Ugb3ZlcmFsbCByZXN0cmljdGlvbnMgb24gYSBqb2lu IHJlbGF0aW9uIHRoYXQgYXBwbHkgdW5pZm9ybWx5CisgKiByZWdhcmRsZXNzIG9mIHRoZSBjaG9p Y2Ugb2YgaW5uZXIgYW5kIG91dGVyIHJlbC4KKyAqLworc3RhdGljIHZvaWQKK3BncGFfcGxhbm5l cl9hcHBseV9qb2lucmVsX2FkdmljZSh1aW50NjQgKnBnc19tYXNrX3AsIGNoYXIgKnBsYW5fbmFt ZSwKKwkJCQkJCQkJICBwZ3BhX2pvaW5fc3RhdGUgKnBqcykKK3sKKwlpbnQJCQlpID0gLTE7CisJ aW50CQkJZmxhZ3M7CisJYm9vbAkJZ2F0aGVyX2NvbmZsaWN0ID0gZmFsc2U7CisJdWludDY0CQln YXRoZXJfbWFzayA9IDA7CisJQml0bWFwc2V0ICAqZ2F0aGVyX3BhcnRpYWxfbWF0Y2ggPSBOVUxM OworCUJpdG1hcHNldCAgKmdhdGhlcl9mdWxsX21hdGNoID0gTlVMTDsKKwlib29sCQlwYXJ0aXRp b253aXNlX2NvbmZsaWN0ID0gZmFsc2U7CisJaW50CQkJcGFydGl0aW9ud2lzZV9vdXRjb21lID0g MDsKKwlCaXRtYXBzZXQgICpwYXJ0aXRpb253aXNlX3BhcnRpYWxfbWF0Y2ggPSBOVUxMOworCUJp dG1hcHNldCAgKnBhcnRpdGlvbndpc2VfZnVsbF9tYXRjaCA9IE5VTEw7CisKKwkvKiBJdGVyYXRl IG92ZXIgYWxsIHBvc3NpYmx5LXJlbGV2YW50IGFkdmljZS4gKi8KKwl3aGlsZSAoKGkgPSBibXNf bmV4dF9tZW1iZXIocGpzLT5yZWxfaW5kZXhlcywgaSkpID49IDApCisJeworCQlwZ3BhX3Ryb3Zl X2VudHJ5ICplbnRyeSA9ICZwanMtPnJlbF9lbnRyaWVzW2ldOworCQlwZ3BhX2l0bV90eXBlIGl0 bTsKKwkJYm9vbAkJZnVsbF9tYXRjaCA9IGZhbHNlOworCQl1aW50NjQJCW15X2dhdGhlcl9tYXNr ID0gMDsKKwkJaW50CQkJbXlfcGFydGl0aW9ud2lzZV9vdXRjb21lID0gMDsJLyogPjAgeWVzLCA8 MCBubyAqLworCisJCS8qCisJCSAqIEZvciBHQVRIRVIgYW5kIEdBVEhFUl9NRVJHRSwgaWYgdGhl IHNwZWNpZmllZCByZWxhdGlvbnMgZXhhY3RseQorCQkgKiBtYXRjaCB0aGlzIGpvaW5yZWwsIGRv IHdoYXRldmVyIHRoZSBhZHZpY2Ugc2F5czsgb3RoZXJ3aXNlLCBkb24ndAorCQkgKiBhbGxvdyBH YXRoZXIgb3IgR2F0aGVyIE1lcmdlIGF0IHRoaXMgbGV2ZWwuIEZvciBOT19HQVRIRVIsIHRoZXJl CisJCSAqIG11c3QgYmUgYSBzaW5nbGUgdGFyZ2V0IHJlbGF0aW9uIHdoaWNoIG11c3QgYmUgaW5j bHVkZWQgaW4gdGhpcworCQkgKiBqb2lucmVsLCBzbyBqdXN0IGRvbid0IGFsbG93IEdhdGhlciBv ciBHYXRoZXIgTWVyZ2UgaGVyZSwgZnVsbAorCQkgKiBzdG9wLgorCQkgKi8KKwkJaWYgKGVudHJ5 LT50YWcgPT0gUEdQQV9UQUdfTk9fR0FUSEVSKQorCQl7CisJCQlteV9nYXRoZXJfbWFzayA9IFBH U19DT05TSURFUl9OT05QQVJUSUFMOworCQkJZnVsbF9tYXRjaCA9IHRydWU7CisJCX0KKwkJZWxz ZQorCQl7CisJCQlpbnQJCQl0b3RhbF9jb3VudDsKKworCQkJdG90YWxfY291bnQgPSBwanMtPm91 dGVyX2NvdW50ICsgcGpzLT5pbm5lcl9jb3VudDsKKwkJCWl0bSA9IHBncGFfaWRlbnRpZmllcnNf bWF0Y2hfdGFyZ2V0KHRvdGFsX2NvdW50LCBwanMtPnJpZHMsCisJCQkJCQkJCQkJCQllbnRyeS0+ dGFyZ2V0KTsKKwkJCUFzc2VydChpdG0gIT0gUEdQQV9JVE1fRElTSk9JTlQpOworCisJCQlpZiAo aXRtID09IFBHUEFfSVRNX0VRVUFMKQorCQkJeworCQkJCWZ1bGxfbWF0Y2ggPSB0cnVlOworCQkJ CWlmIChlbnRyeS0+dGFnID09IFBHUEFfVEFHX1BBUlRJVElPTldJU0UpCisJCQkJCW15X3BhcnRp dGlvbndpc2Vfb3V0Y29tZSA9IDE7CisJCQkJZWxzZSBpZiAoZW50cnktPnRhZyA9PSBQR1BBX1RB R19HQVRIRVIpCisJCQkJCW15X2dhdGhlcl9tYXNrID0gUEdTX0dBVEhFUjsKKwkJCQllbHNlIGlm IChlbnRyeS0+dGFnID09IFBHUEFfVEFHX0dBVEhFUl9NRVJHRSkKKwkJCQkJbXlfZ2F0aGVyX21h c2sgPSBQR1NfR0FUSEVSX01FUkdFOworCQkJCWVsc2UKKwkJCQkJZWxvZyhFUlJPUiwgInVuZXhw ZWN0ZWQgYWR2aWNlIHRhZzogJWQiLAorCQkJCQkJIChpbnQpIGVudHJ5LT50YWcpOworCQkJfQor CQkJZWxzZQorCQkJeworCQkJCWlmIChlbnRyeS0+dGFnID09IFBHUEFfVEFHX1BBUlRJVElPTldJ U0UpCisJCQkJeworCQkJCQlteV9wYXJ0aXRpb253aXNlX291dGNvbWUgPSAtMTsKKwkJCQkJbXlf Z2F0aGVyX21hc2sgPSBQR1NfQ09OU0lERVJfTk9OUEFSVElBTDsKKwkJCQl9CisJCQkJZWxzZSBp ZiAoZW50cnktPnRhZyA9PSBQR1BBX1RBR19HQVRIRVIgfHwKKwkJCQkJCSBlbnRyeS0+dGFnID09 IFBHUEFfVEFHX0dBVEhFUl9NRVJHRSkKKwkJCQl7CisJCQkJCW15X3BhcnRpdGlvbndpc2Vfb3V0 Y29tZSA9IC0xOworCQkJCQlteV9nYXRoZXJfbWFzayA9IFBHU19DT05TSURFUl9OT05QQVJUSUFM OworCQkJCX0KKwkJCQllbHNlCisJCQkJCWVsb2coRVJST1IsICJ1bmV4cGVjdGVkIGFkdmljZSB0 YWc6ICVkIiwKKwkJCQkJCSAoaW50KSBlbnRyeS0+dGFnKTsKKwkJCX0KKwkJfQorCisJCS8qCisJ CSAqIElmIHdlIHNldCBteV9nYXRoZXJfbWFzayB1cCBhYm92ZSwgdGhlbiB3ZSAoMSkgbWFrZSBh IG5vdGUgaWYgdGhlCisJCSAqIGFkdmljZSBjb25mbGljdGVkLCAoMikgcmVtZW1iZXIgdGhlIG1h c2sgdmFsdWUsIGFuZCAoMykgcmVtZW1iZXIKKwkJICogd2hldGhlciB0aGlzIHdhcyBhIGZ1bGwg b3IgcGFydGlhbCBtYXRjaC4KKwkJICovCisJCWlmIChteV9nYXRoZXJfbWFzayAhPSAwKQorCQl7 CisJCQlpZiAoZ2F0aGVyX21hc2sgIT0gMCAmJiBnYXRoZXJfbWFzayAhPSBteV9nYXRoZXJfbWFz aykKKwkJCQlnYXRoZXJfY29uZmxpY3QgPSB0cnVlOworCQkJZ2F0aGVyX21hc2sgPSBteV9nYXRo ZXJfbWFzazsKKwkJCWlmIChmdWxsX21hdGNoKQorCQkJCWdhdGhlcl9mdWxsX21hdGNoID0gYm1z X2FkZF9tZW1iZXIoZ2F0aGVyX2Z1bGxfbWF0Y2gsIGkpOworCQkJZWxzZQorCQkJCWdhdGhlcl9w YXJ0aWFsX21hdGNoID0gYm1zX2FkZF9tZW1iZXIoZ2F0aGVyX3BhcnRpYWxfbWF0Y2gsIGkpOwor CQl9CisKKwkJLyoKKwkJICogTGlrZXdpc2UsIGlmIHdlIHNldCBteV9wYXJ0aXRpb253aXNlX291 dGNvbWUgdXAgYWJvdmUsIHRoZW4gd2UgKDEpCisJCSAqIG1ha2UgYSBub3RlIGlmIHRoZSBhZHZp Y2UgY29uZmxpY3RlZCwgKDIpIHJlbWVtYmVyIHdoYXQgdGhlIGRlc2lyZWQKKwkJICogb3V0Y29t ZSB3YXMsIGFuZCAoMykgcmVtZW1iZXIgd2hldGhlciB0aGlzIHdhcyBhIGZ1bGwgb3IgcGFydGlh bAorCQkgKiBtYXRjaC4KKwkJICovCisJCWlmIChteV9wYXJ0aXRpb253aXNlX291dGNvbWUgIT0g MCkKKwkJeworCQkJaWYgKHBhcnRpdGlvbndpc2Vfb3V0Y29tZSAhPSAwICYmCisJCQkJcGFydGl0 aW9ud2lzZV9vdXRjb21lICE9IG15X3BhcnRpdGlvbndpc2Vfb3V0Y29tZSkKKwkJCQlwYXJ0aXRp b253aXNlX2NvbmZsaWN0ID0gdHJ1ZTsKKwkJCXBhcnRpdGlvbndpc2Vfb3V0Y29tZSA9IG15X3Bh cnRpdGlvbndpc2Vfb3V0Y29tZTsKKwkJCWlmIChmdWxsX21hdGNoKQorCQkJCXBhcnRpdGlvbndp c2VfZnVsbF9tYXRjaCA9CisJCQkJCWJtc19hZGRfbWVtYmVyKHBhcnRpdGlvbndpc2VfZnVsbF9t YXRjaCwgaSk7CisJCQllbHNlCisJCQkJcGFydGl0aW9ud2lzZV9wYXJ0aWFsX21hdGNoID0KKwkJ CQkJYm1zX2FkZF9tZW1iZXIocGFydGl0aW9ud2lzZV9wYXJ0aWFsX21hdGNoLCBpKTsKKwkJfQor CX0KKworCS8qCisJICogTWFyayBldmVyeSBHYXRoZXItcmVsYXRlZCBwaWVjZSBvZiBhZHZpY2Ug YXMgcGFydGlhbGx5IG1hdGNoZWQsIGFuZCBpZgorCSAqIHRoZSBzZXQgb2YgdGFyZ2V0cyBleGFj dGx5IG1hdGNoZWQgdGhpcyByZWxhdGlvbiwgZnVsbHkgbWF0Y2hlZC4gSWYKKwkgKiB0aGVyZSB3 YXMgYSBjb25mbGljdCwgbWFyayB0aGVtIGFsbCBhcyBjb25mbGljdGluZy4KKwkgKi8KKwlmbGFn cyA9IFBHUEFfVEVfTUFUQ0hfUEFSVElBTDsKKwlpZiAoZ2F0aGVyX2NvbmZsaWN0KQorCQlmbGFn cyB8PSBQR1BBX1RFX0NPTkZMSUNUSU5HOworCXBncGFfdHJvdmVfc2V0X2ZsYWdzKHBqcy0+cmVs X2VudHJpZXMsIGdhdGhlcl9wYXJ0aWFsX21hdGNoLCBmbGFncyk7CisJZmxhZ3MgfD0gUEdQQV9U RV9NQVRDSF9GVUxMOworCXBncGFfdHJvdmVfc2V0X2ZsYWdzKHBqcy0+cmVsX2VudHJpZXMsIGdh dGhlcl9mdWxsX21hdGNoLCBmbGFncyk7CisKKwkvKiBMaWtld2lzZSBmb3IgcGFydGl0aW9ud2lz ZSBhZHZpY2UuICovCisJZmxhZ3MgPSBQR1BBX1RFX01BVENIX1BBUlRJQUw7CisJaWYgKHBhcnRp dGlvbndpc2VfY29uZmxpY3QpCisJCWZsYWdzIHw9IFBHUEFfVEVfQ09ORkxJQ1RJTkc7CisJcGdw YV90cm92ZV9zZXRfZmxhZ3MocGpzLT5yZWxfZW50cmllcywgcGFydGl0aW9ud2lzZV9wYXJ0aWFs X21hdGNoLCBmbGFncyk7CisJZmxhZ3MgfD0gUEdQQV9URV9NQVRDSF9GVUxMOworCXBncGFfdHJv dmVfc2V0X2ZsYWdzKHBqcy0+cmVsX2VudHJpZXMsIHBhcnRpdGlvbndpc2VfZnVsbF9tYXRjaCwg ZmxhZ3MpOworCisJLyoKKwkgKiBFbmZvcmNlIHJlc3RyaWN0aW9ucyBvbiB0aGUgR2F0aGVyL0dh dGhlciBNZXJnZS4gIE9ubHkgY2xlYXIgYml0cyBoZXJlLAorCSAqIHNvIHRoYXQgd2Ugc3RpbGwg cmVzcGVjdCB0aGUgZW5hYmxlXyogR1VDcy4gRG8gbm90aGluZyBpZiB0aGUgYWR2aXNlCisJICog Y29uZmxpY3RzLgorCSAqLworCWlmIChnYXRoZXJfbWFzayAhPSAwICYmICFnYXRoZXJfY29uZmxp Y3QpCisJeworCQl1aW50NjQJCWFsbF9nYXRoZXJfbWFzazsKKworCQlhbGxfZ2F0aGVyX21hc2sg PQorCQkJUEdTX0dBVEhFUiB8IFBHU19HQVRIRVJfTUVSR0UgfCBQR1NfQ09OU0lERVJfTk9OUEFS VElBTDsKKwkJKnBnc19tYXNrX3AgJj0gfihhbGxfZ2F0aGVyX21hc2sgJiB+Z2F0aGVyX21hc2sp OworCX0KKworCS8qCisJICogQXMgYWJvdmUsIGJ1dCBmb3IgcGFydGl0aW9ud2lzZSBhZHZpY2Uu CisJICoKKwkgKiBUbyBpbmR1Y2UgYSBwYXJ0aXRpb253aXNlIGpvaW4sIHdlIGRpc2FibGUgYWxs IHRoZSBvcmRpbmFyeSBtZWFucyBvZgorCSAqIHBlcmZvcm1pbmcgYSBqb2luLCBzbyB0aGF0IGFu IEFwcGVuZCBvciBNZXJnZUFwcGVuZCBwYXRoIHdpbGwgaG9wZWZ1bGx5CisJICogYmUgY2hvc2Vu LgorCSAqCisJICogVG8gcHJldmVudCBvbmUsIHdlIGp1c3QgZGlzYWJsZSBBcHBlbmQgYW5kIE1l cmdlQXBwZW5kLiAgTm90ZSB0aGF0IHdlCisJICogbXVzdCBub3QgdW5zZXQgUEdTX0NPTlNJREVS X1BBUlRJVElPTldJU0UgZXZlbiB3aGVuIHdlIGRvbid0IHdhbnQgYQorCSAqIHBhcnRpdGlvbndp c2Ugam9pbiBoZXJlLCBiZWNhdXNlIHdlIG1pZ2h0IHdhbnQgb25lIGF0IGEgaGlnaGVyIGxldmVs CisJICogdGhhdCBpcyBjb25zdHJ1Y3RpbmcgdXNpbmcgcGF0aHMgZnJvbSB0aGlzIGxldmVsLgor CSAqLworCWlmIChwYXJ0aXRpb253aXNlX291dGNvbWUgIT0gMCAmJiAhcGFydGl0aW9ud2lzZV9j b25mbGljdCkKKwl7CisJCWlmIChwYXJ0aXRpb253aXNlX291dGNvbWUgPiAwKQorCQkJKnBnc19t YXNrX3AgPSAoKnBnc19tYXNrX3AgJiB+UEdTX0pPSU5fQU5ZKTsKKwkJZWxzZQorCQkJKnBnc19t YXNrX3AgJj0gfihQR1NfQVBQRU5EIHwgUEdTX01FUkdFX0FQUEVORCk7CisJfQorfQorCisvKgor ICogRW5mb3JjZSByZXN0cmljdGlvbnMgb24gdGhlIGpvaW4gb3JkZXIgb3Igam9pbiBtZXRob2Qu CisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX3BsYW5uZXJfYXBwbHlfam9pbl9wYXRoX2FkdmljZShK b2luVHlwZSBqb2ludHlwZSwgdWludDY0ICpwZ3NfbWFza19wLAorCQkJCQkJCQkJY2hhciAqcGxh bl9uYW1lLAorCQkJCQkJCQkJcGdwYV9qb2luX3N0YXRlICpwanMpCit7CisJaW50CQkJaSA9IC0x OworCUJpdG1hcHNldCAgKmpvX3Blcm1pdF9pbmRleGVzID0gTlVMTDsKKwlCaXRtYXBzZXQgICpq b19kZW55X2luZGV4ZXMgPSBOVUxMOworCUJpdG1hcHNldCAgKmpvX2RlbnlfcmVsX2luZGV4ZXMg PSBOVUxMOworCUJpdG1hcHNldCAgKmptX2luZGV4ZXMgPSBOVUxMOworCWJvb2wJCWptX2NvbmZs aWN0ID0gZmFsc2U7CisJdWludDMyCQlqb2luX21hc2sgPSAwOworCUJpdG1hcHNldCAgKnNqX3Bl cm1pdF9pbmRleGVzID0gTlVMTDsKKwlCaXRtYXBzZXQgICpzal9kZW55X2luZGV4ZXMgPSBOVUxM OworCisJLyoKKwkgKiBSZWNvbnNpZGVyIFBBUlRJVElPTldJU0UoLi4uKSBhZHZpY2UuCisJICoK KwkgKiBXZSBhbHJlYWR5IHRob3VnaHQgYWJvdXQgdGhpcyBmb3IgdGhlIGpvaW5yZWwgYXMgYSB3 aG9sZSwgYnV0IGluIHNvbWUKKwkgKiBjYXNlcywgcGFydGl0aW9ud2lzZSBhZHZpY2UgY2FuIGFs c28gY29uc3RyYWluIHRoZSBqb2luIG9yZGVyLiBGb3IKKwkgKiBpbnN0YW5jZSwgaWYgdGhlIGFk dmljZSBzYXlzIFBBUlRJVElPTldJU0UoKHQxIHQyKSksIHdlIHNob3VsZG4ndCBidWlsZAorCSAq IGpvaW4gcGF0aHMgZm9yIGEgYW55IGpvaW5yZWwgdGhhdCBpbmNsdWRlcyB0MSBvciB0MiB1bmxl c3MgaXQgYWxzbworCSAqIGluY2x1ZGVzIHRoZSBvdGhlci4gSW4gZ2VuZXJhbCwgdGhlIHBhcml0 aW9ud2lzZSBvcGVyYXRpb24gbXVzdCBoYXZlCisJICogYWxyZWFkeSBiZWVuIGNvbXBsZXRlZCB3 aXRoaW4gb25lIHNpZGUgb2YgdGhlIGN1cnJlbnQgam9pbiBvciB0aGUKKwkgKiBvdGhlciwgZWxz ZSB0aGUgam9pbiBvcmRlciBpcyBpbXBlcm1pc3NpYmxlLgorCSAqCisJICogTkI6IEl0IG1pZ2h0 IHNlZW0gdGVtcHRpbmcgdG8gdHJ5IHRvIGRlYWwgd2l0aCBQQVJUSVRJT05XSVNFIGFkdmlzZQor CSAqIGVudGlyZWx5IGluIHRoaXMgZnVuY3Rpb24sIGJ1dCB0aGF0IGRvZXNuJ3Qgd29yay4gSGVy ZSwgd2UgY2FuIG9ubHkKKwkgKiBhZmZlY3QgdGhlIHBnc19tYXNrIHdpdGhpbiBhIHBhcnRpY3Vs YXIgSm9pblBhdGhFeHRyYURhdGEsIHRoYXQgaXMsIGZvcgorCSAqIGEgcGFydGljdWxhciBjaG9p Y2Ugb2YgaW5uZXJyZWwgYW5kIG91dGVycmVsLiBQYXJ0aXRpb253aXNlIHBhdGhzIGFyZQorCSAq IG5vdCBidWlsdCB0aGF0IHdheSwgc28gd2UgbXVzdCBzZXQgcGdzX21hc2sgZm9yIHRoZSBSZWxP cHRJbmZvLCB3aGljaAorCSAqIGlzIGJlc3QgZG9uZSBpbiBwZ3BhX3BsYW5uZXJfYXBwbHlfam9p bnJlbF9hZHZpY2UuCisJICovCisJd2hpbGUgKChpID0gYm1zX25leHRfbWVtYmVyKHBqcy0+cmVs X2luZGV4ZXMsIGkpKSA+PSAwKQorCXsKKwkJcGdwYV90cm92ZV9lbnRyeSAqZW50cnkgPSAmcGpz LT5yZWxfZW50cmllc1tpXTsKKwkJcGdwYV9pdG1fdHlwZSBpbm5lcl9pdG07CisJCXBncGFfaXRt X3R5cGUgb3V0ZXJfaXRtOworCisJCWlmIChlbnRyeS0+dGFnICE9IFBHUEFfVEFHX1BBUlRJVElP TldJU0UpCisJCQljb250aW51ZTsKKworCQlvdXRlcl9pdG0gPSBwZ3BhX2lkZW50aWZpZXJzX21h dGNoX3RhcmdldChwanMtPm91dGVyX2NvdW50LAorCQkJCQkJCQkJCQkJICBwanMtPnJpZHMsIGVu dHJ5LT50YXJnZXQpOworCQlpZiAob3V0ZXJfaXRtID09IFBHUEFfSVRNX0VRVUFMIHx8CisJCQlv dXRlcl9pdG0gPT0gUEdQQV9JVE1fVEFSR0VUU19BUkVfU1VCU0VUKQorCQkJY29udGludWU7CisK KwkJaW5uZXJfaXRtID0gcGdwYV9pZGVudGlmaWVyc19tYXRjaF90YXJnZXQocGpzLT5pbm5lcl9j b3VudCwKKwkJCQkJCQkJCQkJCSAgcGpzLT5yaWRzICsgcGpzLT5vdXRlcl9jb3VudCwKKwkJCQkJ CQkJCQkJCSAgZW50cnktPnRhcmdldCk7CisJCWlmIChpbm5lcl9pdG0gPT0gUEdQQV9JVE1fRVFV QUwgfHwKKwkJCWlubmVyX2l0bSA9PSBQR1BBX0lUTV9UQVJHRVRTX0FSRV9TVUJTRVQpCisJCQlj b250aW51ZTsKKworCQlqb19kZW55X3JlbF9pbmRleGVzID0gYm1zX2FkZF9tZW1iZXIoam9fZGVu eV9yZWxfaW5kZXhlcywgaSk7CisJfQorCisJLyogSXRlcmF0ZSBvdmVyIGFkdmljZSB0aGF0IHBl cnRhaW5zIHRvIHRoZSBqb2luIG9yZGVyIGFuZCBtZXRob2QuICovCisJaSA9IC0xOworCXdoaWxl ICgoaSA9IGJtc19uZXh0X21lbWJlcihwanMtPmpvaW5faW5kZXhlcywgaSkpID49IDApCisJewor CQlwZ3BhX3Ryb3ZlX2VudHJ5ICplbnRyeSA9ICZwanMtPmpvaW5fZW50cmllc1tpXTsKKwkJdWlu dDMyCQlteV9qb2luX21hc2s7CisKKwkJLyogSGFuZGxlIGpvaW4gb3JkZXIgYWR2aWNlLiAqLwor CQlpZiAoZW50cnktPnRhZyA9PSBQR1BBX1RBR19KT0lOX09SREVSKQorCQl7CisJCQlwZ3BhX2pv X291dGNvbWUgam9fb3V0Y29tZTsKKworCQkJam9fb3V0Y29tZSA9IHBncGFfam9pbl9vcmRlcl9w ZXJtaXRzX2pvaW4ocGpzLT5vdXRlcl9jb3VudCwKKwkJCQkJCQkJCQkJCQkgIHBqcy0+aW5uZXJf Y291bnQsCisJCQkJCQkJCQkJCQkJICBwanMtPnJpZHMsCisJCQkJCQkJCQkJCQkJICBlbnRyeSk7 CisJCQlpZiAoam9fb3V0Y29tZSA9PSBQR1BBX0pPX1BFUk1JVFRFRCkKKwkJCQlqb19wZXJtaXRf aW5kZXhlcyA9IGJtc19hZGRfbWVtYmVyKGpvX3Blcm1pdF9pbmRleGVzLCBpKTsKKwkJCWVsc2Ug aWYgKGpvX291dGNvbWUgPT0gUEdQQV9KT19ERU5JRUQpCisJCQkJam9fZGVueV9pbmRleGVzID0g Ym1zX2FkZF9tZW1iZXIoam9fZGVueV9pbmRleGVzLCBpKTsKKwkJCWNvbnRpbnVlOworCQl9CisK KwkJLyogSGFuZGxlIGpvaW4gbWV0aG9kIGFkdmljZS4gKi8KKwkJbXlfam9pbl9tYXNrID0gcGdw YV9qb2luX3N0cmF0ZWd5X21hc2tfZnJvbV9hZHZpY2VfdGFnKGVudHJ5LT50YWcpOworCQlpZiAo bXlfam9pbl9tYXNrICE9IDApCisJCXsKKwkJCWJvb2wJCXBlcm1pdDsKKwkJCWJvb2wJCXJlc3Ry aWN0X21ldGhvZDsKKworCQkJaWYgKGVudHJ5LT50YWcgPT0gUEdQQV9UQUdfRk9SRUlHTl9KT0lO KQorCQkJCXBlcm1pdCA9IHBncGFfb3BhcXVlX2pvaW5fcGVybWl0c19qb2luKHBqcy0+b3V0ZXJf Y291bnQsCisJCQkJCQkJCQkJCQkJICAgcGpzLT5pbm5lcl9jb3VudCwKKwkJCQkJCQkJCQkJCQkg ICBwanMtPnJpZHMsCisJCQkJCQkJCQkJCQkJICAgZW50cnksCisJCQkJCQkJCQkJCQkJICAgJnJl c3RyaWN0X21ldGhvZCk7CisJCQllbHNlCisJCQkJcGVybWl0ID0gcGdwYV9qb2luX21ldGhvZF9w ZXJtaXRzX2pvaW4ocGpzLT5vdXRlcl9jb3VudCwKKwkJCQkJCQkJCQkJCQkgICBwanMtPmlubmVy X2NvdW50LAorCQkJCQkJCQkJCQkJCSAgIHBqcy0+cmlkcywKKwkJCQkJCQkJCQkJCQkgICBlbnRy eSwKKwkJCQkJCQkJCQkJCQkgICAmcmVzdHJpY3RfbWV0aG9kKTsKKwkJCWlmICghcGVybWl0KQor CQkJCWpvX2RlbnlfaW5kZXhlcyA9IGJtc19hZGRfbWVtYmVyKGpvX2RlbnlfaW5kZXhlcywgaSk7 CisJCQllbHNlIGlmIChyZXN0cmljdF9tZXRob2QpCisJCQl7CisJCQkJam1faW5kZXhlcyA9IGJt c19hZGRfbWVtYmVyKGptX2luZGV4ZXMsIGkpOworCQkJCWlmIChqb2luX21hc2sgIT0gMCAmJiBq b2luX21hc2sgIT0gbXlfam9pbl9tYXNrKQorCQkJCQlqbV9jb25mbGljdCA9IHRydWU7CisJCQkJ am9pbl9tYXNrID0gbXlfam9pbl9tYXNrOworCQkJfQorCQkJY29udGludWU7CisJCX0KKworCQkv KiBIYW5kbGUgc2VtaWpvaW4gdW5pcXVlbmVzcyBhZHZpY2UuICovCisJCWlmIChlbnRyeS0+dGFn ID09IFBHUEFfVEFHX1NFTUlKT0lOX1VOSVFVRSB8fAorCQkJZW50cnktPnRhZyA9PSBQR1BBX1RB R19TRU1JSk9JTl9OT05fVU5JUVVFKQorCQl7CisJCQlib29sCQlvdXRlcl9zaWRlX251bGxhYmxl OworCQkJYm9vbAkJcmVzdHJpY3RfbWV0aG9kOworCisJCQkvKiBQbGFubmVyIGhhcyBudWxsYWJs ZSBzaWRlIG9mIHRoZSBzZW1pam9pbiBvbiB0aGUgb3V0ZXIgc2lkZT8gKi8KKwkJCW91dGVyX3Np ZGVfbnVsbGFibGUgPSAoam9pbnR5cGUgPT0gSk9JTl9VTklRVUVfT1VURVIgfHwKKwkJCQkJCQkJ ICAgam9pbnR5cGUgPT0gSk9JTl9SSUdIVF9TRU1JKTsKKworCQkJaWYgKCFwZ3BhX3NlbWlqb2lu X3Blcm1pdHNfam9pbihwanMtPm91dGVyX2NvdW50LAorCQkJCQkJCQkJCQlwanMtPmlubmVyX2Nv dW50LAorCQkJCQkJCQkJCQlwanMtPnJpZHMsCisJCQkJCQkJCQkJCWVudHJ5LAorCQkJCQkJCQkJ CQlvdXRlcl9zaWRlX251bGxhYmxlLAorCQkJCQkJCQkJCQkmcmVzdHJpY3RfbWV0aG9kKSkKKwkJ CQlqb19kZW55X2luZGV4ZXMgPSBibXNfYWRkX21lbWJlcihqb19kZW55X2luZGV4ZXMsIGkpOwor CQkJZWxzZSBpZiAocmVzdHJpY3RfbWV0aG9kKQorCQkJeworCQkJCWJvb2wJCWFkdmljZV91bmlx dWU7CisJCQkJYm9vbAkJanRfdW5pcXVlOworCQkJCWJvb2wJCWp0X25vbl91bmlxdWU7CisKKwkJ CQkvKiBBZHZpY2Ugd2FudHMgdG8gdW5pcXVlLWlmeSBhbmQgdXNlIGEgcmVndWxhciBqb2luPyAq LworCQkJCWFkdmljZV91bmlxdWUgPSAoZW50cnktPnRhZyA9PSBQR1BBX1RBR19TRU1JSk9JTl9V TklRVUUpOworCisJCQkJLyogUGxhbm5lciBpcyB0cnlpbmcgdG8gdW5pcXVlLWlmeSBhbmQgdXNl IGEgcmVndWxhciBqb2luPyAqLworCQkJCWp0X3VuaXF1ZSA9IChqb2ludHlwZSA9PSBKT0lOX1VO SVFVRV9JTk5FUiB8fAorCQkJCQkJCSBqb2ludHlwZSA9PSBKT0lOX1VOSVFVRV9PVVRFUik7CisK KwkJCQkvKiBQbGFubmVyIGlzIHRyeWluZyBhIHNlbWktam9pbiwgd2l0aG91dCB1bmlxdWUtaWZ5 aW5nPyAqLworCQkJCWp0X25vbl91bmlxdWUgPSAoam9pbnR5cGUgPT0gSk9JTl9TRU1JIHx8CisJ CQkJCQkJCSBqb2ludHlwZSA9PSBKT0lOX1JJR0hUX1NFTUkpOworCisJCQkJaWYgKCFqdF91bmlx dWUgJiYgIWp0X25vbl91bmlxdWUpCisJCQkJeworCQkJCQkvKgorCQkJCQkgKiBUaGlzIGRvZXNu J3Qgc2VlbSB0byBiZSBhIHNlbWlqb2luIHRvIHdoaWNoIFNKX1VOSVFVRQorCQkJCQkgKiBvciBT Sl9OT05fVU5JUVVFIGNhbiBiZSBhcHBsaWVkLgorCQkJCQkgKi8KKwkJCQkJZW50cnktPmZsYWdz IHw9IFBHUEFfVEVfSU5BUFBMSUNBQkxFOworCQkJCX0KKwkJCQllbHNlIGlmIChhZHZpY2VfdW5p cXVlICE9IGp0X3VuaXF1ZSkKKwkJCQkJc2pfZGVueV9pbmRleGVzID0gYm1zX2FkZF9tZW1iZXIo c2pfZGVueV9pbmRleGVzLCBpKTsKKwkJCQllbHNlCisJCQkJCXNqX3Blcm1pdF9pbmRleGVzID0g Ym1zX2FkZF9tZW1iZXIoc2pfcGVybWl0X2luZGV4ZXMsIGkpOworCQkJfQorCQkJY29udGludWU7 CisJCX0KKwl9CisKKwkvKgorCSAqIElmIHRoZSBhZHZpY2UgaW5kaWNhdGVzIGJvdGggdGhhdCB0 aGlzIGpvaW4gb3JkZXIgaXMgcGVybWlzc2libGUgYW5kCisJICogYWxzbyB0aGF0IGl0IGlzbid0 LCB0aGVuIG1hcmsgYWR2aWNlIHJlbGF0ZWQgdG8gdGhlIGpvaW4gb3JkZXIgYXMKKwkgKiBjb25m bGljdGluZy4KKwkgKi8KKwlpZiAoam9fcGVybWl0X2luZGV4ZXMgIT0gTlVMTCAmJgorCQkoam9f ZGVueV9pbmRleGVzICE9IE5VTEwgfHwgam9fZGVueV9yZWxfaW5kZXhlcyAhPSBOVUxMKSkKKwl7 CisJCXBncGFfdHJvdmVfc2V0X2ZsYWdzKHBqcy0+am9pbl9lbnRyaWVzLCBqb19wZXJtaXRfaW5k ZXhlcywKKwkJCQkJCQkgUEdQQV9URV9DT05GTElDVElORyk7CisJCXBncGFfdHJvdmVfc2V0X2Zs YWdzKHBqcy0+am9pbl9lbnRyaWVzLCBqb19kZW55X2luZGV4ZXMsCisJCQkJCQkJIFBHUEFfVEVf Q09ORkxJQ1RJTkcpOworCQlwZ3BhX3Ryb3ZlX3NldF9mbGFncyhwanMtPnJlbF9lbnRyaWVzLCBq b19kZW55X3JlbF9pbmRleGVzLAorCQkJCQkJCSBQR1BBX1RFX0NPTkZMSUNUSU5HKTsKKwl9CisK KwkvKgorCSAqIElmIG1vcmUgdGhhbiBvbmUgam9pbiBtZXRob2Qgc3BlY2lmaWNhdGlvbiBpcyBy ZWxldmFudCBoZXJlIGFuZCB0aGV5CisJICogZGlmZmVyLCBtYXJrIHRoZW0gYWxsIGFzIGNvbmZs aWN0aW5nLgorCSAqLworCWlmIChqbV9jb25mbGljdCkKKwkJcGdwYV90cm92ZV9zZXRfZmxhZ3Mo cGpzLT5qb2luX2VudHJpZXMsIGptX2luZGV4ZXMsCisJCQkJCQkJIFBHUEFfVEVfQ09ORkxJQ1RJ TkcpOworCisJLyogSWYgc2VtaWpvaW4gYWR2aWNlIHNheXMgYm90aCB5ZXMgYW5kIG5vLCBtYXJr IGl0IGFsbCBhcyBjb25mbGljdGluZy4gKi8KKwlpZiAoc2pfcGVybWl0X2luZGV4ZXMgIT0gTlVM TCAmJiBzal9kZW55X2luZGV4ZXMgIT0gTlVMTCkKKwl7CisJCXBncGFfdHJvdmVfc2V0X2ZsYWdz KHBqcy0+am9pbl9lbnRyaWVzLCBzal9wZXJtaXRfaW5kZXhlcywKKwkJCQkJCQkgUEdQQV9URV9D T05GTElDVElORyk7CisJCXBncGFfdHJvdmVfc2V0X2ZsYWdzKHBqcy0+am9pbl9lbnRyaWVzLCBz al9kZW55X2luZGV4ZXMsCisJCQkJCQkJIFBHUEFfVEVfQ09ORkxJQ1RJTkcpOworCX0KKworCS8q CisJICogRW5mb3JjZSByZXN0cmljdGlvbnMgb24gdGhlIGpvaW4gb3JkZXIgYW5kIGpvaW4gbWV0 aG9kLCBhbmQgYW55CisJICogc2VtaWpvaW4tcmVsYXRlZCByZXN0cmljdGlvbnMuIE9ubHkgY2xl YXIgYml0cyBoZXJlLCBzbyB0aGF0IHdlIHN0aWxsCisJICogcmVzcGVjdCB0aGUgZW5hYmxlXyog R1VDcy4gRG8gbm90aGluZyBpbiBjYXNlcyB3aGVyZSB0aGUgYWR2aWNlIG9uIGEKKwkgKiBzaW5n bGUgdG9waWMgY29uZmxpY3RzLgorCSAqLworCWlmICgoam9fZGVueV9pbmRleGVzICE9IE5VTEwg fHwgam9fZGVueV9yZWxfaW5kZXhlcyAhPSBOVUxMKSAmJgorCQlqb19wZXJtaXRfaW5kZXhlcyA9 PSBOVUxMKQorCQkqcGdzX21hc2tfcCAmPSB+UEdTX0pPSU5fQU5ZOworCWlmIChqb2luX21hc2sg IT0gMCAmJiAham1fY29uZmxpY3QpCisJCSpwZ3NfbWFza19wICY9IH4oUEdTX0pPSU5fQU5ZICYg fmpvaW5fbWFzayk7CisJaWYgKHNqX2RlbnlfaW5kZXhlcyAhPSBOVUxMICYmIHNqX3Blcm1pdF9p bmRleGVzID09IE5VTEwpCisJCSpwZ3NfbWFza19wICY9IH5QR1NfSk9JTl9BTlk7Cit9CisKKy8q CisgKiBUcmFuc2xhdGUgYW4gYWR2aWNlIHRhZyBpbnRvIGEgcGF0aCBnZW5lcmF0aW9uIHN0cmF0 ZWd5IG1hc2suCisgKgorICogVGhpcyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIHdpdGggdGFnIHR5 cGVzIHRoYXQgZG9uJ3QgcmVwcmVzZW50IGpvaW4KKyAqIHN0cmF0ZWdpZXMuIEluIHN1Y2ggY2Fz ZXMsIHdlIGp1c3QgcmV0dXJuIDAsIHdoaWNoIGNhbid0IGJlIGNvbmZ1c2VkIHdpdGgKKyAqIGEg dmFsaWQgbWFzay4KKyAqLworc3RhdGljIHVpbnQ2NAorcGdwYV9qb2luX3N0cmF0ZWd5X21hc2tf ZnJvbV9hZHZpY2VfdGFnKHBncGFfYWR2aWNlX3RhZ190eXBlIHRhZykKK3sKKwlzd2l0Y2ggKHRh ZykKKwl7CisJCWNhc2UgUEdQQV9UQUdfRk9SRUlHTl9KT0lOOgorCQkJcmV0dXJuIFBHU19GT1JF SUdOSk9JTjsKKwkJY2FzZSBQR1BBX1RBR19NRVJHRV9KT0lOX1BMQUlOOgorCQkJcmV0dXJuIFBH U19NRVJHRUpPSU5fUExBSU47CisJCWNhc2UgUEdQQV9UQUdfTUVSR0VfSk9JTl9NQVRFUklBTEla RToKKwkJCXJldHVybiBQR1NfTUVSR0VKT0lOX01BVEVSSUFMSVpFOworCQljYXNlIFBHUEFfVEFH X05FU1RFRF9MT09QX1BMQUlOOgorCQkJcmV0dXJuIFBHU19ORVNUTE9PUF9QTEFJTjsKKwkJY2Fz ZSBQR1BBX1RBR19ORVNURURfTE9PUF9NQVRFUklBTElaRToKKwkJCXJldHVybiBQR1NfTkVTVExP T1BfTUFURVJJQUxJWkU7CisJCWNhc2UgUEdQQV9UQUdfTkVTVEVEX0xPT1BfTUVNT0laRToKKwkJ CXJldHVybiBQR1NfTkVTVExPT1BfTUVNT0laRTsKKwkJY2FzZSBQR1BBX1RBR19IQVNIX0pPSU46 CisJCQlyZXR1cm4gUEdTX0hBU0hKT0lOOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIDA7CisJfQor fQorCisvKgorICogRG9lcyBhIGNlcnRhaW4gaXRlbSBvZiBqb2luIG9yZGVyIGFkdmljZSBwZXJt aXQgYSBjZXJ0YWluIGpvaW4/CisgKgorICogUmV0dXJucyBQR1BBX0pPX0RFTklFRCBpZiB0aGUg YWR2aWNlIGlzIGluY29tcGF0aWJsZSB3aXRoIHRoZSBwcm9wb3NlZAorICogam9pbiBvcmRlci4K KyAqCisgKiBSZXR1cm5zIFBHUEFfSk9fUEVSTUlUVEVEIGlmIHRoZSBhZHZpY2Ugc3BlY2lmaWVz IGV4YWN0bHkgdGhlIHByb3Bvc2VkCisgKiBqb2luIG9yZGVyLiBUaGlzIGltcGxpZXMgdGhhdCBh IHBhcnRpdGlvbndpc2Ugam9pbiBzaG91bGQgbm90IGJlCisgKiBwZXJmb3JtZWQgYXQgdGhpcyBs ZXZlbDsgcmF0aGVyLCBvbmUgb2YgdGhlIHRyYWRpdGlvbmFsIGpvaW4gbWV0aG9kcworICogc2hv dWxkIGJlIHVzZWQuCisgKgorICogUmV0dXJucyBQR1BBX0pPX0lORElGRkVSRU5UIGlmIHRoZSBh ZHZpY2UgZG9lcyBub3QgY2FyZSB3aGF0IGhhcHBlbnMuCisgKiBXZSB1c2UgdGhpcyBmb3IgdW5v cmRlcmVkIEpPSU5fT1JERVIgc3VibGlzdHMsIHdoaWNoIGFyZSBjb21wYXRpYmxlIHdpdGgKKyAq IHBhcnRpdGlvbndpc2Ugam9pbiBidXQgZG8gbm90IG1hbmRhdGUgaXQuCisgKi8KK3N0YXRpYyBw Z3BhX2pvX291dGNvbWUKK3BncGFfam9pbl9vcmRlcl9wZXJtaXRzX2pvaW4oaW50IG91dGVyX2Nv dW50LCBpbnQgaW5uZXJfY291bnQsCisJCQkJCQkJIHBncGFfaWRlbnRpZmllciAqcmlkcywKKwkJ CQkJCQkgcGdwYV90cm92ZV9lbnRyeSAqZW50cnkpCit7CisJYm9vbAkJbG9vcCA9IHRydWU7CisJ Ym9vbAkJc3VibGlzdCA9IGZhbHNlOworCWludAkJCWxlbmd0aDsKKwlpbnQJCQlvdXRlcl9sZW5n dGg7CisJcGdwYV9hZHZpY2VfdGFyZ2V0ICp0YXJnZXQgPSBlbnRyeS0+dGFyZ2V0OworCXBncGFf YWR2aWNlX3RhcmdldCAqcHJlZml4X3RhcmdldDsKKworCS8qIFdlIGRlZmluaXRlbHkgaGF2ZSBh dCBsZWFzdCBhIHBhcnRpYWwgbWF0Y2ggZm9yIHRoaXMgdHJvdmUgZW50cnkuICovCisJZW50cnkt PmZsYWdzIHw9IFBHUEFfVEVfTUFUQ0hfUEFSVElBTDsKKworCS8qCisJICogRmluZCB0aGUgaW5u ZXJtb3N0IHN1Ymxpc3QgdGhhdCBjb250YWlucyBhbGwga2V5czsgaWYgbm8gc3VibGlzdCBkb2Vz LAorCSAqIHRoZW4gY29udGludWUgcHJvY2Vzc2luZyB3aXRoIHRoZSB0b3BsZXZlbCBsaXN0Lgor CSAqCisJICogRm9yIGV4YW1wbGUsIGlmIHRoZSBhZHZpY2Ugc2F5cyBKT0lOX09SREVSKHQxIHQy ICh0MyB0NCB0NSkpLCB0aGVuIHdlCisJICogc2hvdWxkIGV2YWx1YXRlIGpvaW5zIHRoYXQgb25s eSBpbnZvbHZlIHQzLCB0NCwgYW5kL29yIHQ1IGFnYWluc3QgdGhlCisJICogKHQzIHQ0IHQ1KSBz dWJsaXN0LCBhbmQgb3RoZXJzIGFnYWluc3QgdGhlIGZ1bGwgbGlzdC4KKwkgKgorCSAqIE5vdGUg dGhhdCAoMSkgb3V0ZXJtb3N0IHN1Ymxpc3QgaXMgYWx3YXlzIG9yZGVyZWQgYW5kICgyKSB3aGVu ZXZlciB3ZQorCSAqIHpvb20gaW50byBhbiB1bm9yZGVyZWQgc3VibGlzdCwgd2UgaW5zdGFudGx5 IHJldHVybgorCSAqIFBHUEFfSk9fSU5ESUZGRVJFTlQuCisJICovCisJd2hpbGUgKGxvb3ApCisJ eworCQlBc3NlcnQodGFyZ2V0LT50dHlwZSA9PSBQR1BBX1RBUkdFVF9PUkRFUkVEX0xJU1QpOwor CisJCWxvb3AgPSBmYWxzZTsKKwkJZm9yZWFjaF9wdHIocGdwYV9hZHZpY2VfdGFyZ2V0LCBjaGls ZF90YXJnZXQsIHRhcmdldC0+Y2hpbGRyZW4pCisJCXsKKwkJCXBncGFfaXRtX3R5cGUgaXRtOwor CisJCQlpZiAoY2hpbGRfdGFyZ2V0LT50dHlwZSA9PSBQR1BBX1RBUkdFVF9JREVOVElGSUVSKQor CQkJCWNvbnRpbnVlOworCisJCQlpdG0gPSBwZ3BhX2lkZW50aWZpZXJzX21hdGNoX3RhcmdldChv dXRlcl9jb3VudCArIGlubmVyX2NvdW50LAorCQkJCQkJCQkJCQkJcmlkcywgY2hpbGRfdGFyZ2V0 KTsKKwkJCWlmIChpdG0gPT0gUEdQQV9JVE1fRVFVQUwgfHwgaXRtID09IFBHUEFfSVRNX0tFWVNf QVJFX1NVQlNFVCkKKwkJCXsKKwkJCQlpZiAoY2hpbGRfdGFyZ2V0LT50dHlwZSA9PSBQR1BBX1RB UkdFVF9PUkRFUkVEX0xJU1QpCisJCQkJeworCQkJCQl0YXJnZXQgPSBjaGlsZF90YXJnZXQ7CisJ CQkJCXN1Ymxpc3QgPSB0cnVlOworCQkJCQlsb29wID0gdHJ1ZTsKKwkJCQkJYnJlYWs7CisJCQkJ fQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCUFzc2VydChjaGlsZF90YXJnZXQtPnR0eXBlID09IFBH UEFfVEFSR0VUX1VOT1JERVJFRF9MSVNUKTsKKwkJCQkJcmV0dXJuIFBHUEFfSk9fSU5ESUZGRVJF TlQ7CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJLyoKKwkgKiBUcnkgdG8gZmluZCBhIHByZWZp eCBvZiB0aGUgc2VsZWN0ZWQgam9pbiBvcmRlciBsaXN0IHRoYXQgaXMgZXhhY3RseQorCSAqIGVx dWFsIHRvIHRoZSBvdXRlciBzaWRlIG9mIHRoZSBwcm9wb3NlZCBqb2luLgorCSAqLworCWxlbmd0 aCA9IGxpc3RfbGVuZ3RoKHRhcmdldC0+Y2hpbGRyZW4pOworCXByZWZpeF90YXJnZXQgPSBwYWxs b2MwX29iamVjdChwZ3BhX2FkdmljZV90YXJnZXQpOworCXByZWZpeF90YXJnZXQtPnR0eXBlID0g UEdQQV9UQVJHRVRfT1JERVJFRF9MSVNUOworCWZvciAob3V0ZXJfbGVuZ3RoID0gMTsgb3V0ZXJf bGVuZ3RoIDw9IGxlbmd0aDsgKytvdXRlcl9sZW5ndGgpCisJeworCQlwZ3BhX2l0bV90eXBlIGl0 bTsKKworCQkvKiBBdm9pZCBsZWFraW5nIG1lbW9yeSBpbiBldmVyeSBsb29wIGl0ZXJhdGlvbi4g Ki8KKwkJaWYgKHByZWZpeF90YXJnZXQtPmNoaWxkcmVuICE9IE5VTEwpCisJCQlsaXN0X2ZyZWUo cHJlZml4X3RhcmdldC0+Y2hpbGRyZW4pOworCQlwcmVmaXhfdGFyZ2V0LT5jaGlsZHJlbiA9IGxp c3RfY29weV9oZWFkKHRhcmdldC0+Y2hpbGRyZW4sCisJCQkJCQkJCQkJCQkgb3V0ZXJfbGVuZ3Ro KTsKKworCQkvKiBTZWFyY2gsIGhvcGluZyB0byBmaW5kIGFuIGV4YWN0IG1hdGNoLiAqLworCQlp dG0gPSBwZ3BhX2lkZW50aWZpZXJzX21hdGNoX3RhcmdldChvdXRlcl9jb3VudCwgcmlkcywgcHJl Zml4X3RhcmdldCk7CisJCWlmIChpdG0gPT0gUEdQQV9JVE1fRVFVQUwpCisJCQlicmVhazsKKwor CQkvKgorCQkgKiBJZiB0aGUgcHJlZml4IG9mIHRoZSBqb2luIG9yZGVyIGxpc3QgdGhhdCB3ZSdy ZSBjb25zaWRlcmluZworCQkgKiBpbmNsdWRlcyBzb21lIGJ1dCBub3QgYWxsIG9mIHRoZSBvdXRl ciByZWxzLCB3ZSBjYW4gbWFrZSB0aGUgcHJlZml4CisJCSAqIGxvbmdlciB0byBmaW5kIGFuIGV4 YWN0IG1hdGNoLiBCdXQgdGhlIGFkdmljZSBoYXNuJ3QgbWVudGlvbmVkCisJCSAqIGV2ZXJ5dGhp bmcgdGhhdCdzIHBhcnQgb2Ygb3VyIG91dGVyIHJlbCB5ZXQsIGJ1dCBoYXMgbWVudGlvbmVkCisJ CSAqIHRoaW5ncyB0aGF0IGFyZSBub3QsIHRoZW4gdGhpcyBqb2luIGRvZXNuJ3QgbWF0Y2ggdGhl IGpvaW4gb3JkZXIKKwkJICogbGlzdC4KKwkJICovCisJCWlmIChpdG0gIT0gUEdQQV9JVE1fVEFS R0VUU19BUkVfU1VCU0VUKQorCQkJcmV0dXJuIFBHUEFfSk9fREVOSUVEOworCX0KKworCS8qCisJ ICogSWYgdGhlIHByZXZpb3VzIGxvb3BlZCBzdG9wcGVkIGJlZm9yZSB0aGUgcHJlZml4X3Rhcmdl dCBpbmNsdWRlZCB0aGUKKwkgKiBlbnRpcmUgam9pbiBvcmRlciBsaXN0LCB0aGVuIHRoZSBuZXh0 IG1lbWJlciBvZiB0aGUgam9pbiBvcmRlciBsaXN0CisJICogbXVzdCBleGFjdGx5IG1hdGNoIHRo ZSBpbm5lciBzaWRlIG9mIHRoZSBqb2luLgorCSAqCisJICogRXhhbXBsZTogR2l2ZW4gSk9JTl9P UkRFUih0MSB0MiAodDMgdDQgdDUpKSwgaWYgdGhlIG91dGVyIHNpZGUgb2YgdGhlCisJICogY3Vy cmVudCBqb2luIGluY2x1ZGVzIG9ubHkgdDEsIHRoZW4gdGhlIGlubmVyIHNpZGUgbXVzdCBiZSBl eGFjdGx5IHQyOworCSAqIGlmIHRoZSBvdXRlciBzaWRlIGluY2x1ZGVzIGJvdGggdDEgYW5kIHQy LCB0aGVuIHRoZSBpbm5lciBzaWRlIG11c3QKKwkgKiBpbmNsdWRlIGV4YWN0bHkgdDMsIHQ0LCBh bmQgdDUuCisJICovCisJaWYgKG91dGVyX2xlbmd0aCA8IGxlbmd0aCkKKwl7CisJCXBncGFfYWR2 aWNlX3RhcmdldCAqaW5uZXJfdGFyZ2V0OworCQlwZ3BhX2l0bV90eXBlIGl0bTsKKworCQlpbm5l cl90YXJnZXQgPSBsaXN0X250aCh0YXJnZXQtPmNoaWxkcmVuLCBvdXRlcl9sZW5ndGgpOworCisJ CWl0bSA9IHBncGFfaWRlbnRpZmllcnNfbWF0Y2hfdGFyZ2V0KGlubmVyX2NvdW50LCByaWRzICsg b3V0ZXJfY291bnQsCisJCQkJCQkJCQkJCWlubmVyX3RhcmdldCk7CisKKwkJLyoKKwkJICogQmVm b3JlIHJldHVybmluZywgY29uc2lkZXIgd2hldGhlciB3ZSBuZWVkIHRvIG1hcmsgdGhpcyBlbnRy eSBhcworCQkgKiBmdWxseSBtYXRjaGVkLiBJZiB3ZSdyZSBjb25zaWRlcmluZyB0aGUgZnVsbCBs aXN0IHJhdGhlciB0aGFuIGEKKwkJICogc3VibGlzdCwgYW5kIGlmIHdlIGZvdW5kIGV2ZXJ5IGl0 ZW0gYnV0IG9uZSBvbiB0aGUgb3V0ZXIgc2lkZSBvZgorCQkgKiB0aGUgam9pbiBhbmQgdGhlIGxh c3QgaXRlbSBvbiB0aGUgaW5uZXIgc2lkZSBvZiB0aGUgam9pbiwgdGhlbiB0aGUKKwkJICogYW5z d2VyIGlzIHllcy4KKwkJICovCisJCWlmICghc3VibGlzdCAmJiBvdXRlcl9sZW5ndGggKyAxID09 IGxlbmd0aCAmJiBpdG0gPT0gUEdQQV9JVE1fRVFVQUwpCisJCQllbnRyeS0+ZmxhZ3MgfD0gUEdQ QV9URV9NQVRDSF9GVUxMOworCisJCXJldHVybiAoaXRtID09IFBHUEFfSVRNX0VRVUFMKSA/IFBH UEFfSk9fUEVSTUlUVEVEIDogUEdQQV9KT19ERU5JRUQ7CisJfQorCisJLyoKKwkgKiBJZiB3ZSBn ZXQgaGVyZSwgdGhlbiB0aGUgb3V0ZXIgc2lkZSBvZiB0aGUgam9pbiBpbmNsdWRlcyB0aGUgZW50 aXJldHkKKwkgKiBvZiB0aGUgam9pbiBvcmRlciBsaXN0LiBJbiB0aGlzIGNhc2UsIHdlIGJlaGF2 ZSBkaWZmZXJlbnRseSBkZXBlbmRpbmcKKwkgKiBvbiB3aGV0aGVyIHdlJ3JlIGxvb2tpbmcgYXQg dGhlIHRvcC1sZXZlbCBqb2luIG9yZGVyIGxpc3Qgb3Igc3VibGlzdC4KKwkgKiBBdCB0aGUgdG9w LWxldmVsLCB3ZSB0cmVhdCB0aGUgc3BlY2lmaWVkIGxpc3QgYXMgbWFuZGF0aW5nIHRoYXQgdGhl CisJICogYWN0dWFsIGpvaW4gb3JkZXIgaGFzIHRoZSBnaXZlbiBsaXN0IGFzIGEgcHJlZml4LCBi dXQgYSBzdWJsaXN0CisJICogcmVxdWlyZXMgYW4gZXhhY3QgbWF0Y2guCisJICoKKwkgKiBFeG1h cGxlOiBHaXZlbiBKT0lOX09SREVSKHQxIHQyICh0MyB0NCB0NSkpLCB3ZSBtdXN0IHN0YXJ0IGJ5 IGpvaW5pbmcKKwkgKiBhbGwgZml2ZSBvZiB0aG9zZSByZWxhdGlvbnMgYW5kIGluIHRoYXQgc2Vx dWVuY2UsIGJ1dCBvbmNlIHRoYXQgaXMKKwkgKiBkb25lLCBpdCdzIE9LIHRvIGpvaW4gYW55IG90 aGVyIHJlbHMgdGhhdCBhcmUgcGFydCBvZiB0aGUgam9pbiBwcm9ibGVtLgorCSAqIFRoaXMgYWxs b3dzIGEgdXNlciB0byBzcGVjaWZ5IHRoZSBkcml2aW5nIHRhYmxlIGFuZCBwZXJoYXBzIHRoZSBm aXJzdAorCSAqIGZldyB0aGluZ3MgdG8gd2hpY2ggaXQgc2hvdWxkIGJlIGpvaW5lZCB3aGlsZSBs ZWF2aW5nIHRoZSByZXN0IG9mIHRoZQorCSAqIGpvaW4gb3JkZXIgdXAgdGhlIG9wdGltaXplci4g QnV0IGl0IHNlZW1zIGxpa2UgaXQgd291bGQgYmUgc3VycHJpc2luZywKKwkgKiBnaXZlbiB0aGF0 IHNwZWNpZmljYXRpb24sIGlmIHRoZSB1c2VyIGNvdWxkIGFkZCB0NiB0byB0aGUgKHQzIHQ0IHQ1 KQorCSAqIHN1Yi1qb2luLCBzbyB3ZSBkb24ndCBhbGxvdyB0aGF0LiBJZiB3ZSBkaWQgd2FudCB0 byBhbGxvdyBpdCwgdGhlIGxvZ2ljCisJICogZWFybGllciBpbiB0aGlzIGZ1bmN0aW9uIHdvdWxk IHJlcXVpcmUgc3Vic3RhbnRpYWwgYWRqdXN0bWVudDogd2UgY291bGQKKwkgKiBhbGxvdyB0aGUg dDMtdDQtdDUtdDYgam9pbiB0byBiZSBidWlsdCBoZXJlLCBidXQgdGhlIG5leHQgc3RlcCBvZgor CSAqIGpvaW5pbmcgdDEtdDIgdG8gdGhlIHJlc3VsdCB3b3VsZCBzdGlsbCBiZSByZWplY3RlZC4K KwkgKi8KKwlpZiAoIXN1Ymxpc3QpCisJCWVudHJ5LT5mbGFncyB8PSBQR1BBX1RFX01BVENIX0ZV TEw7CisJcmV0dXJuIHN1Ymxpc3QgPyBQR1BBX0pPX0RFTklFRCA6IFBHUEFfSk9fUEVSTUlUVEVE OworfQorCisvKgorICogRG9lcyBhIGNlcnRhaW4gaXRlbSBvZiBqb2luIG1ldGhvZCBhZHZpY2Ug cGVybWl0IGEgY2VydGFpbiBqb2luPworICoKKyAqIEFkdmljZSBzdWNoIGFzIEhBU0hfSk9JTigo eCB5KSkgbWVhbnMgdGhhdCB0aGVyZSBzaG91bGQgYmUgYSBoYXNoIGpvaW4gd2l0aAorICogZXhh Y3RseSB4IGFuZCB5IG9uIHRoZSBpbm5lciBzaWRlLiBPYnZpb3VzbHksIHRoaXMgbWVhbnMgdGhh dCBpZiB3ZSBhcmUKKyAqIGNvbnNpZGVyaW5nIGEgam9pbiB3aXRoIGV4YWN0bHkgeCBhbmQgeSBv biB0aGUgaW5uZXIgc2lkZSwgd2Ugc2hvdWxkIGVuZm9yY2UKKyAqIHRoZSB1c2Ugb2YgYSBoYXNo IGpvaW4uIEhvd2V2ZXIsIGl0IGFsc28gbWVhbnMgdGhhdCB3ZSBtdXN0IHJlamVjdCBzb21lCisg KiBpbmNvbXBhdGlibGUgam9pbiBvcmRlcnMgZW50aXJlbHkuICBGb3IgZXhhbXBsZSwgYSBqb2lu IHdpdGggZXhhY3RseSB4CisgKiBhbmQgeSBvbiB0aGUgb3V0ZXIgc2lkZSBzaG91bGRuJ3QgYmUg YWxsb3dlZCwgYmVjYXVzZSBzdWNoIHBhdGhzIG1pZ2h0IHdpbgorICogb3ZlciB0aGUgYWR2aWNl LWRyaXZlbiBwYXRoIG9uIGNvc3QuCisgKgorICogVG8gYWNjb21tb2RhdGUgdGhlc2UgcmVxdWly ZW1lbnRzLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBpZiB0aGUgam9pbgorICogc2hvdWxk IGJlIGFsbG93ZWQgYW5kIGZhbHNlIGlmIGl0IHNob3VsZCBub3QuIEZ1cnRoZXJtb3JlLCAqcmVz dHJpY3RfbWV0aG9kCisgKiBpcyBzZXQgdG8gdHJ1ZSBpZiB0aGUgam9pbiBtZXRob2Qgc2hvdWxk IGJlIGVuZm9yY2VkIGFuZCBmYWxzZSBpZiBub3QuCisgKi8KK3N0YXRpYyBib29sCitwZ3BhX2pv aW5fbWV0aG9kX3Blcm1pdHNfam9pbihpbnQgb3V0ZXJfY291bnQsIGludCBpbm5lcl9jb3VudCwK KwkJCQkJCQkgIHBncGFfaWRlbnRpZmllciAqcmlkcywKKwkJCQkJCQkgIHBncGFfdHJvdmVfZW50 cnkgKmVudHJ5LAorCQkJCQkJCSAgYm9vbCAqcmVzdHJpY3RfbWV0aG9kKQoreworCXBncGFfYWR2 aWNlX3RhcmdldCAqdGFyZ2V0ID0gZW50cnktPnRhcmdldDsKKwlwZ3BhX2l0bV90eXBlIGlubmVy X2l0bTsKKwlwZ3BhX2l0bV90eXBlIG91dGVyX2l0bTsKKwlwZ3BhX2l0bV90eXBlIGpvaW5faXRt OworCisJLyogV2UgZGVmaW5pdGVseSBoYXZlIGF0IGxlYXN0IGEgcGFydGlhbCBtYXRjaCBmb3Ig dGhpcyB0cm92ZSBlbnRyeS4gKi8KKwllbnRyeS0+ZmxhZ3MgfD0gUEdQQV9URV9NQVRDSF9QQVJU SUFMOworCisJKnJlc3RyaWN0X21ldGhvZCA9IGZhbHNlOworCisJLyoKKwkgKiBJZiBvdXIgaW5u ZXIgcmVsIG1lbnRpb25zIGV4YWN0bHkgdGhlIHNhbWUgcmVsYXRpb25zIGFzIHRoZSBhZHZpY2UK KwkgKiB0YXJnZXQsIGFsbG93IHRoZSBqb2luIGFuZCBlbmZvcmNlIHRoZSBqb2luIG1ldGhvZCBy ZXN0cmljdGlvbi4KKwkgKgorCSAqIElmIG91ciBpbm5lciByZWwgbWVudGlvbnMgYSBzdXBlcnNl dCBvZiB0aGUgdGFyZ2V0IHJlbGF0aW9ucywgYWxsb3cgdGhlCisJICogam9pbi4gVGhlIGpvaW4g d2UgY2FyZSBhYm91dCBoYXMgYWxyZWFkeSB0YWtlbiBwbGFjZSwgYW5kIHRoaXMgYWR2aWNlCisJ ICogaW1wb3NlcyBubyBmdXJ0aGVyIHJlc3RyaWN0aW9ucy4KKwkgKi8KKwlpbm5lcl9pdG0gPSBw Z3BhX2lkZW50aWZpZXJzX21hdGNoX3RhcmdldChpbm5lcl9jb3VudCwKKwkJCQkJCQkJCQkJICBy aWRzICsgb3V0ZXJfY291bnQsCisJCQkJCQkJCQkJCSAgdGFyZ2V0KTsKKwlpZiAoaW5uZXJfaXRt ID09IFBHUEFfSVRNX0VRVUFMKQorCXsKKwkJZW50cnktPmZsYWdzIHw9IFBHUEFfVEVfTUFUQ0hf RlVMTDsKKwkJKnJlc3RyaWN0X21ldGhvZCA9IHRydWU7CisJCXJldHVybiB0cnVlOworCX0KKwll bHNlIGlmIChpbm5lcl9pdG0gPT0gUEdQQV9JVE1fVEFSR0VUU19BUkVfU1VCU0VUKQorCQlyZXR1 cm4gdHJ1ZTsKKworCS8qCisJICogSWYgb3VyIG91dGVyIHJlbCBtZW50aW9ucyBhIHN1cHNlcnNl dCBvZiB0aGUgcmVsYXRpb25zIGluIHRoZSBhZHZpY2UKKwkgKiB0YXJnZXQsIG5vIHJlc3RyaWN0 aW9ucyBhcHBseS4gVGhlIGpvaW4gd2UgY2FyZSBoYXMgYWxyZWFkeSB0YWtlbgorCSAqIHBsYWNl LCBhbmQgdGhpcyBhZHZpY2UgaW1wb3NlcyBubyBmdXJ0aGVyIHJlc3RyaWN0aW9ucy4KKwkgKgor CSAqIE9uIHRoZSBvdGhlciBoYW5kLCBpZiBvdXIgb3V0ZXIgcmVsIG1lbnRpb25zIGV4YWN0bHkg dGhlIHJlbGF0aW9ucworCSAqIG1lbnRpb25lZCBpbiB0aGUgYWR2aWNlIHRhcmdldCwgdGhlIHBs YW5uZXIgaXMgdHJ5aW5nIHRvIHJldmVyc2UgdGhlCisJICogc2lkZXMgb2YgdGhlIGpvaW4gYXMg Y29tcGFyZWQgd2l0aCBvdXIgZGVzaXJlZCBvdXRjb21lLiBSZWplY3QgdGhhdC4KKwkgKi8KKwlv dXRlcl9pdG0gPSBwZ3BhX2lkZW50aWZpZXJzX21hdGNoX3RhcmdldChvdXRlcl9jb3VudCwKKwkJ CQkJCQkJCQkJICByaWRzLCB0YXJnZXQpOworCWlmIChvdXRlcl9pdG0gPT0gUEdQQV9JVE1fVEFS R0VUU19BUkVfU1VCU0VUKQorCQlyZXR1cm4gdHJ1ZTsKKwllbHNlIGlmIChvdXRlcl9pdG0gPT0g UEdQQV9JVE1fRVFVQUwpCisJCXJldHVybiBmYWxzZTsKKworCS8qCisJICogSWYgdGhlIGFkdmlj ZSB0YXJnZXQgbWVudGlvbnMgb25seSBhIHNpbmdsZSByZWxhdGlvbiwgdGhlIHRlc3QgYmVsb3cK KwkgKiBjYW5ub3QgZXZlciBwYXNzLCBzbyBzYXZlIHNvbWUgd29yayBieSBleGl0aW5nIG5vdy4K KwkgKi8KKwlpZiAodGFyZ2V0LT50dHlwZSA9PSBQR1BBX1RBUkdFVF9JREVOVElGSUVSKQorCQly ZXR1cm4gZmFsc2U7CisKKwkvKgorCSAqIElmIGV2ZXJ5dGhpbmcgaW4gdGhlIGpvaW5yZWwgYXBw ZWFycyBpbiB0aGUgYWR2aWNlIHRhcmdldCwgd2UncmUgYmVsb3cKKwkgKiB0aGUgbGV2ZWwgb2Yg dGhlIGpvaW4gd2Ugd2FudCB0byBjb250cm9sLgorCSAqCisJICogRm9yIGV4YW1wbGUsIEhBU0hf Sk9JTigoeCB5KSkgZG9lc24ndCByZXN0cmljdCBob3cgeCBhbmQgeSBjYW4gYmUKKwkgKiBqb2lu ZWQuCisJICoKKwkgKiBUaGlzIGxvb2t1cCBzaG91bGRuJ3QgcmV0dXJuIFBHUEFfSVRNX0RJU0pP SU5ULCBiZWNhdXNlIGFueSBzdWNoIGFkdmljZQorCSAqIHNob3VsZCBub3QgaGF2ZSBiZWVuIHJl dHVybmVkIGZyb20gdGhlIHRyb3ZlIGluIHRoZSBmaXJzdCBwbGFjZS4KKwkgKi8KKwlqb2luX2l0 bSA9IHBncGFfaWRlbnRpZmllcnNfbWF0Y2hfdGFyZ2V0KG91dGVyX2NvdW50ICsgaW5uZXJfY291 bnQsCisJCQkJCQkJCQkJCSByaWRzLCB0YXJnZXQpOworCUFzc2VydChqb2luX2l0bSAhPSBQR1BB X0lUTV9ESVNKT0lOVCk7CisJaWYgKGpvaW5faXRtID09IFBHUEFfSVRNX0tFWVNfQVJFX1NVQlNF VCB8fAorCQlqb2luX2l0bSA9PSBQR1BBX0lUTV9FUVVBTCkKKwkJcmV0dXJuIHRydWU7CisKKwkv KgorCSAqIFdlJ3ZlIGFscmVhZHkgcGVybWl0dGVkIGFsbCBhbGxvd2FibGUgY2FzZXMsIHNvIHJl amVjdCB0aGlzLgorCSAqCisJICogSWYgd2UgcmVhY2ggdGhpcyBwb2ludCwgdGhlbiB0aGUgYWR2 aWNlIG92ZXJsYXBzIHdpdGggdGhpcyBqb2luIGJ1dAorCSAqIGlzbid0IGVudGlyZWx5IGNvbnRh aW5lZCB3aXRoaW4gZWl0aGVyIHNpZGUsIGFuZCB0aGVyZSdzIGFsc28gYXQgbGVhc3QKKwkgKiBv bmUgcmVsYXRpb24gcHJlc2VudCBpbiB0aGUgam9pbiB0aGF0IGlzbid0IG1lbnRpb25lZCBieSB0 aGUgYWR2aWNlLgorCSAqCisJICogRm9yIGluc3RhbmNlLCBpbiB0aGUgSEFTSF9KT0lOKCh4IHkp KSBleGFtcGxlLCB3ZSB3b3VsZCByZWFjaCBoZXJlIGlmIHgKKwkgKiB3ZXJlIG9uIG9uZSBzaWRl IG9mIHRoZSBqb2luLCB5IG9uIHRoZSBvdGhlciwgYW5kIGF0IGxlYXN0IG9uZSBvZiB0aGUKKwkg KiB0d28gc2lkZXMgYWxzbyBpbmNsdWRlZCBzb21lIG90aGVyIHJlbGF0aW9uLCBzYXkgdC4gSW4g dGhhdCBjYXNlLAorCSAqIGFjY2VwdGluZyB0aGlzIGpvaW4gd291bGQgYWxsb3cgdGhlICh4IHkg dCkgam9pbnJlbCB0byBjb250YWluCisJICogbm9uLWRpc2FibGVkIHBhdGhzIHRoYXQgZG8gbm90 IHB1dCAoeCB5KSBvbiB0aGUgaW5uZXIgc2lkZSBvZiBhIGhhc2gKKwkgKiBqb2luOyB3ZSBjb3Vs ZCBpbnN0ZWFkIGVuZCB1cCB3aXRoIHNvbWV0aGluZyBsaWtlICh4IEpPSU4gdCkgSk9JTiB5Lgor CSAqLworCXJldHVybiBmYWxzZTsKK30KKworLyoKKyAqIERvZXMgYWR2aWNlIGNvbmNlcm5pbmcg YW4gb3BhcXVlIGpvaW4gcGVybWl0IGEgY2VydGFpbiBqb2luPworICoKKyAqIEJ5IGFuIG9wYXF1 ZSBqb2luLCB3ZSBtZWFuIG9uZSB3aGVyZSB0aGUgZXhhY3QgbWVjaGFuaXNtIGJ5IHdoaWNoIHRo ZQorICogam9pbiBpcyBwZXJmb3JtZWQgaXMgbm90IHZpc2libGUgdG8gUG9zdGdyZVNRTC4gQ3Vy cmVudGx5IHRoaXMgaXMgdGhlCisgKiBjYXNlIG9ubHkgZm9yIGZvcmVpZ24gam9pbnM6IEZPUkVJ R05fSk9JTigoeCB5IHopKSBtZWFucyB0aGF0IHgsIHksIGFuZAorICogeiBhcmUgam9pbmVkIG9u IHRoZSByZW1vdGUgc2lkZSwgYnV0IHdlIGtub3cgbm90aGluZyBhYm91dCB0aGUgam9pbiBvcmRl cgorICogb3Igam9pbiBtZXRob2RzIHVzZWQgb3ZlciB0aGVyZS4KKyAqCisgKiBUaGUgbG9naWMg aGVyZSBuZWVkcyB0byBkaWZmZXIgZnJvbSBwZ3BhX2pvaW5fbWV0aG9kX3Blcm1pdHNfam9pbiBi ZWNhdXNlLAorICogZm9yIG90aGVyIGpvaW4gdHlwZXMsIHRoZSBhZHZpY2UgdGFyZ2V0IGlzIHRo ZSBzZXQgb2YgaW5uZXIgcmVsczsgaGVyZSwgaXQKKyAqIGluY2x1ZGVzIGJvdGggaW5uZXIgYW5k IG91dGVyIHJlbHMuCisgKi8KK3N0YXRpYyBib29sCitwZ3BhX29wYXF1ZV9qb2luX3Blcm1pdHNf am9pbihpbnQgb3V0ZXJfY291bnQsIGludCBpbm5lcl9jb3VudCwKKwkJCQkJCQkgIHBncGFfaWRl bnRpZmllciAqcmlkcywKKwkJCQkJCQkgIHBncGFfdHJvdmVfZW50cnkgKmVudHJ5LAorCQkJCQkJ CSAgYm9vbCAqcmVzdHJpY3RfbWV0aG9kKQoreworCXBncGFfYWR2aWNlX3RhcmdldCAqdGFyZ2V0 ID0gZW50cnktPnRhcmdldDsKKwlwZ3BhX2l0bV90eXBlIGpvaW5faXRtOworCisJLyogV2UgZGVm aW5pdGVseSBoYXZlIGF0IGxlYXN0IGEgcGFydGlhbCBtYXRjaCBmb3IgdGhpcyB0cm92ZSBlbnRy eS4gKi8KKwllbnRyeS0+ZmxhZ3MgfD0gUEdQQV9URV9NQVRDSF9QQVJUSUFMOworCisJKnJlc3Ry aWN0X21ldGhvZCA9IGZhbHNlOworCisJam9pbl9pdG0gPSBwZ3BhX2lkZW50aWZpZXJzX21hdGNo X3RhcmdldChvdXRlcl9jb3VudCArIGlubmVyX2NvdW50LAorCQkJCQkJCQkJCQkgcmlkcywgdGFy Z2V0KTsKKwlpZiAoam9pbl9pdG0gPT0gUEdQQV9JVE1fRVFVQUwpCisJeworCQkvKgorCQkgKiBX ZSBoYXZlIGFuIGV4YWN0IG1hdGNoLCBhbmQgc2hvdWxkIHRoZXJlZm9yZSBhbGxvdyB0aGUgam9p biBhbmQKKwkJICogZW5mb3JjZSB0aGUgdXNlIG9mIHRoZSByZWxldmFudCBvcGFxdWUgam9pbiBt ZXRob2QuCisJCSAqLworCQllbnRyeS0+ZmxhZ3MgfD0gUEdQQV9URV9NQVRDSF9GVUxMOworCQkq cmVzdHJpY3RfbWV0aG9kID0gdHJ1ZTsKKwkJcmV0dXJuIHRydWU7CisJfQorCisJaWYgKGpvaW5f aXRtID09IFBHUEFfSVRNX0tFWVNfQVJFX1NVQlNFVCB8fAorCQlqb2luX2l0bSA9PSBQR1BBX0lU TV9UQVJHRVRTX0FSRV9TVUJTRVQpCisJeworCQkvKgorCQkgKiBJZiBqb2luX2l0bSA9PSBQR1BB X0lUTV9UQVJHRVRTX0FSRV9TVUJTRVQsIHRoZW4gdGhlIGpvaW4gd2UgY2FyZQorCQkgKiBhYm91 dCBoYXMgYWxyZWFkeSB0YWtlbiBwbGFjZSBhbmQgbm8gZnVydGhlciByZXN0cmljdGlvbnMgYXBw bHkuCisJCSAqCisJCSAqIElmIGpvaW5faXRtID09IFBHUEFfSVRNX0tFWVNfQVJFX1NVQlNFVCwg d2UncmUgc3RpbGwgYnVpbGRpbmcgdXAgdG8KKwkJICogdGhlIGpvaW4gd2UgY2FyZSBhYm91dCBh bmQgaGF2ZSBub3QgaW50cm9kdWNlZCBhbnkgZXh0cmFuZW91cworCQkgKiByZWxhdGlvbnMgbm90 IG5hbWVkIGluIHRoZSBhZHZpY2UuIE5vdGUgdGhhdCBGb3JlaWduU2NhbiBwYXRocyBmb3IKKwkJ ICogam9pbnMgYXJlIGJ1aWx0IHVwIGZyb20gRm9yZWlnblNjYW4gcGF0aHMgZnJvbSB1bmRlcmx5 aW5nIGpvaW5zIGFuZAorCQkgKiBzY2Fucywgc28gd2UgbXVzdCBub3QgZGlzYWJsZSB0aGlzIGpv aW4gd2hlbiBjb25zaWRlcmluZyBhIHN1YnNldAorCQkgKiBvZiB0aGUgcmVsYXRpb25zIHdlIHVs dGltYXRlbHkgd2FudC4KKwkJICovCisJCXJldHVybiB0cnVlOworCX0KKworCS8qCisJICogVGhl IGFkdmljZSBvdmVybGFwcyB0aGUgam9pbiwgYnV0IGF0IGxlYXN0IG9uZSByZWxhdGlvbiBpcyBw cmVzZW50IGluCisJICogdGhlIGpvaW4gdGhhdCBpc24ndCBtZW50aW9uZWQgYnkgdGhlIGFkdmlj ZS4gV2Ugd2FudCB0byBkaXNhYmxlIHN1Y2gKKwkgKiBwYXRocyBzbyB0aGF0IHdlIGFjdHVhbGx5 IHB1c2ggZG93biB0aGUgam9pbiBhcyBpbnRlbmRlZC4KKwkgKi8KKwlyZXR1cm4gZmFsc2U7Cit9 CisKKy8qCisgKiBEb2VzIGFkdmljZSBjb25jZXJuaW5nIGEgc2VtaWpvaW4gcGVybWl0IGEgY2Vy dGFpbiBqb2luPworICoKKyAqIFVubGlrZSBqb2luIG1ldGhvZCBhZHZpY2UsIHdoaWNoIGxpc3Rz IHRoZSByZWxzIG9uIHRoZSBpbm5lciBzaWRlIG9mIHRoZQorICogam9pbiwgc2VtaWpvaW4gdW5p cXVlbmVzcyBhZHZpY2UgbGlzdHMgdGhlIHJlbHMgb24gdGhlIG51bGxhYmxlIHNpZGUgb2YgdGhl CisgKiBqb2luLiBUaG9zZSBjYW4gYmUgdGhlIHNhbWUsIGlmIHRoZSBqb2luIHR5cGUgaXMgSk9J Tl9VTklRVUVfSU5ORVIgb3IKKyAqIEpPSU5fU0VNSSwgb3IgdGhleSBjYW4gYmUgZGlmZmVyZW50 LCBpbiBjYXNlIG9mIEpPSU5fVU5JUVVFX09VVEVSIG9yCisgKiBKT0lOX1JJR0hUX1NFTUkuCisg KgorICogV2UgZG9uJ3Qga25vdyBoZXJlIHdoZXRoZXIgdGhlIGNhbGxlciBzcGVjaWZpZWQgU0VN SUpPSU5fVU5JUVVFIG9yCisgKiBTRU1JSk9JTl9OT05fVU5JUVVFLiBUaGUgY2FsbGVyIHNob3Vs ZCBjaGVjayB0aGUgam9pbiB0eXBlIGFnYWluc3QgdGhlCisgKiBhZHZpY2UgdHlwZSBpZiBhbmQg b25seSBpZiB3ZSBzZXQgKnJlc3RyaWN0X21ldGhvZCB0byB0cnVlLgorICovCitzdGF0aWMgYm9v bAorcGdwYV9zZW1pam9pbl9wZXJtaXRzX2pvaW4oaW50IG91dGVyX2NvdW50LCBpbnQgaW5uZXJf Y291bnQsCisJCQkJCQkgICBwZ3BhX2lkZW50aWZpZXIgKnJpZHMsCisJCQkJCQkgICBwZ3BhX3Ry b3ZlX2VudHJ5ICplbnRyeSwKKwkJCQkJCSAgIGJvb2wgb3V0ZXJfaXNfbnVsbGFibGUsCisJCQkJ CQkgICBib29sICpyZXN0cmljdF9tZXRob2QpCit7CisJcGdwYV9hZHZpY2VfdGFyZ2V0ICp0YXJn ZXQgPSBlbnRyeS0+dGFyZ2V0OworCXBncGFfaXRtX3R5cGUgam9pbl9pdG07CisJcGdwYV9pdG1f dHlwZSBpbm5lcl9pdG07CisJcGdwYV9pdG1fdHlwZSBvdXRlcl9pdG07CisKKwkqcmVzdHJpY3Rf bWV0aG9kID0gZmFsc2U7CisKKwkvKiBXZSBkZWZpbml0ZWx5IGhhdmUgYXQgbGVhc3QgYSBwYXJ0 aWFsIG1hdGNoIGZvciB0aGlzIHRyb3ZlIGVudHJ5LiAqLworCWVudHJ5LT5mbGFncyB8PSBQR1BB X1RFX01BVENIX1BBUlRJQUw7CisKKwkvKgorCSAqIElmIG91dGVyIHJlbCBpcyB0aGUgbnVsbGFi bGUgc2lkZSBhbmQgY29udGFpbnMgZXhhY3RseSB0aGUgc2FtZQorCSAqIHJlbGF0aW9ucyBhcyB0 aGUgYWR2aWNlIHRhcmdldCwgdGhlbiB0aGUgam9pbiBvcmRlciBpcyBhbGxvd2FibGUsIGJ1dAor CSAqIHRoZSBjYWxsZXIgbXVzdCBjaGVjayB3aGV0aGVyIHRoZSBhZHZpY2UgdGFnIChlaXRoZXIg U0VNSUpPSU5fVU5JUVVFIG9yCisJICogU0VNSUpPSU5fTk9OX1VOSVFVRSkgbWF0Y2hlcyB0aGUg am9pbiB0eXBlLgorCSAqCisJICogSWYgdGhlIG91dGVyIHJlbCBpcyBhIHN1cGVyc2V0IG9mIHRo ZSB0YXJnZXQgcmVsYXRpb25zLCB0aGUgam9pbiB3ZQorCSAqIGNhcmUgYWJvdXQgaGFzIGFscmVh ZHkgdGFrZW4gcGxhY2UsIHNvIHdlIHNob3VsZCBpbXBvc2Ugbm8gZnV0aGVyCisJICogcmVzdHJp dGlvbnMuCisJICovCisJb3V0ZXJfaXRtID0gcGdwYV9pZGVudGlmaWVyc19tYXRjaF90YXJnZXQo b3V0ZXJfY291bnQsCisJCQkJCQkJCQkJCSAgcmlkcywgdGFyZ2V0KTsKKwlpZiAob3V0ZXJfaXRt ID09IFBHUEFfSVRNX0VRVUFMKQorCXsKKwkJZW50cnktPmZsYWdzIHw9IFBHUEFfVEVfTUFUQ0hf RlVMTDsKKwkJaWYgKG91dGVyX2lzX251bGxhYmxlKQorCQl7CisJCQkqcmVzdHJpY3RfbWV0aG9k ID0gdHJ1ZTsKKwkJCXJldHVybiB0cnVlOworCQl9CisJfQorCWVsc2UgaWYgKG91dGVyX2l0bSA9 PSBQR1BBX0lUTV9UQVJHRVRTX0FSRV9TVUJTRVQpCisJCXJldHVybiB0cnVlOworCisJLyogQXMg YWJvdmUsIGJ1dCBmb3IgdGhlIGlubmVyIHJlbC4gKi8KKwlpbm5lcl9pdG0gPSBwZ3BhX2lkZW50 aWZpZXJzX21hdGNoX3RhcmdldChpbm5lcl9jb3VudCwKKwkJCQkJCQkJCQkJICByaWRzICsgb3V0 ZXJfY291bnQsCisJCQkJCQkJCQkJCSAgdGFyZ2V0KTsKKwlpZiAoaW5uZXJfaXRtID09IFBHUEFf SVRNX0VRVUFMKQorCXsKKwkJZW50cnktPmZsYWdzIHw9IFBHUEFfVEVfTUFUQ0hfRlVMTDsKKwkJ aWYgKCFvdXRlcl9pc19udWxsYWJsZSkKKwkJeworCQkJKnJlc3RyaWN0X21ldGhvZCA9IHRydWU7 CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCX0KKwllbHNlIGlmIChpbm5lcl9pdG0gPT0gUEdQQV9J VE1fVEFSR0VUU19BUkVfU1VCU0VUKQorCQlyZXR1cm4gdHJ1ZTsKKworCS8qCisJICogSWYgZXZl cnl0aGluZyBpbiB0aGUgam9pbnJlbCBhcHBlYXJzIGluIHRoZSBhZHZpY2UgdGFyZ2V0LCB3ZSdy ZSBiZWxvdworCSAqIHRoZSBsZXZlbCBvZiB0aGUgam9pbiB3ZSB3YW50IHRvIGNvbnRyb2wuCisJ ICovCisJam9pbl9pdG0gPSBwZ3BhX2lkZW50aWZpZXJzX21hdGNoX3RhcmdldChvdXRlcl9jb3Vu dCArIGlubmVyX2NvdW50LAorCQkJCQkJCQkJCQkgcmlkcywgdGFyZ2V0KTsKKwlBc3NlcnQoam9p bl9pdG0gIT0gUEdQQV9JVE1fRElTSk9JTlQpOworCWlmIChqb2luX2l0bSA9PSBQR1BBX0lUTV9L RVlTX0FSRV9TVUJTRVQgfHwKKwkJam9pbl9pdG0gPT0gUEdQQV9JVE1fRVFVQUwpCisJCXJldHVy biB0cnVlOworCisJLyoKKwkgKiBXZSd2ZSB0ZXN0ZWQgZm9yIGFsbCBhbGxvd2FibGUgcG9zc2li aWxpdGllcywgYW5kIHNvIG11c3QgcmVqZWN0IHRoaXMKKwkgKiBqb2luIG9yZGVyLiBUaGlzIGNh biBoYXBwZW4gaW4gdHdvIHdheXMuCisJICoKKwkgKiBGaXJzdCwgd2UgbWlnaCBiZSBjb25zaWRl cmluZyBhIHNlbWlqb2luIHRoYXQgb3ZlcmxhcHMgaW5jb21wbGV0ZWx5CisJICogd2l0aCBvbmUg b3IgYm90aCBzaWRlcyBvZiB0aGUgam9pbi4gRm9yIGV4YW1wbGUsIGlmIHRoZSB1c2VyIGhhcwor CSAqIHNwZWNpZmllZCBTRU1JSk9JTl9VTklRVUUoKHQxIHQyKSkgb3IgU0VNSUpPSU5fTk9OX1VO SVFVRSgodDEgdDIpKSwgd2UKKwkgKiBzaG91bGQgcmVqZWN0IGEgcHJvcG9zZWQgdDItdDMgam9p biwgc2luY2UgdGhhdCBjb3VsZCBub3QgcmVzdWx0IGluIGEKKwkgKiBmaW5hbCBwbGFuIGNvbXBh dGlibGUgd2l0aCB0aGUgYWR2aWNlLgorCSAqCisJICogU2Vjb25kLCB3ZSBtaWdodCBiZSBjb25z aWRlcmluZyBhIHNlbWlqb2luIHdoZXJlIHRoZSBhZHZpY2UgdGFyZ2V0CisJICogcGVyZmVjdGx5 IG1hdGNoZXMgb25lIHNpZGUgb2YgdGhlIGpvaW4sIGJ1dCBpdCdzIHRoZSB3cm9uZyBvbmUuIEZv cgorCSAqIGV4YW1wbGUsIGluIHRoZSBleGFtcGxlIGFib3ZlLCB3ZSBtaWdodCBzZWUgYSAzLXdh eSBqb2luIGJldHdlZW4gdDEsCisJICogdDIsIGFuZCB0Mywgd2l0aCAodDEgdDIpIG9uIHRoZSBu b24tbnVsbGFibGUgc2lkZS4gVGhhdCwgdG9vLCB3b3VsZCBiZQorCSAqIGluY29tcGF0aWJsZSB3 aXRoIHRoZSBhZHZpY2UuCisJICovCisJcmV0dXJuIGZhbHNlOworfQorCisvKgorICogQXBwbHkg c2NhbiBhZHZpY2UgdG8gYSBSZWxPcHRJbmZvLgorICovCitzdGF0aWMgdm9pZAorcGdwYV9wbGFu bmVyX2FwcGx5X3NjYW5fYWR2aWNlKFJlbE9wdEluZm8gKnJlbCwKKwkJCQkJCQkgICBwZ3BhX3Ry b3ZlX2VudHJ5ICpzY2FuX2VudHJpZXMsCisJCQkJCQkJICAgQml0bWFwc2V0ICpzY2FuX2luZGV4 ZXMsCisJCQkJCQkJICAgcGdwYV90cm92ZV9lbnRyeSAqcmVsX2VudHJpZXMsCisJCQkJCQkJICAg Qml0bWFwc2V0ICpyZWxfaW5kZXhlcykKK3sKKwlib29sCQlnYXRoZXJfY29uZmxpY3QgPSBmYWxz ZTsKKwlCaXRtYXBzZXQgICpnYXRoZXJfcGFydGlhbF9tYXRjaCA9IE5VTEw7CisJQml0bWFwc2V0 ICAqZ2F0aGVyX2Z1bGxfbWF0Y2ggPSBOVUxMOworCWludAkJCWkgPSAtMTsKKwlwZ3BhX3Ryb3Zl X2VudHJ5ICpzY2FuX2VudHJ5ID0gTlVMTDsKKwlpbnQJCQlmbGFnczsKKwlib29sCQlzY2FuX3R5 cGVfY29uZmxpY3QgPSBmYWxzZTsKKwlCaXRtYXBzZXQgICpzY2FuX3R5cGVfaW5kZXhlcyA9IE5V TEw7CisJQml0bWFwc2V0ICAqc2Nhbl90eXBlX3JlbF9pbmRleGVzID0gTlVMTDsKKwl1aW50NjQJ CWdhdGhlcl9tYXNrID0gMDsKKwl1aW50NjQJCXNjYW5fdHlwZSA9IDA7CisKKwkvKiBTY3J1dGlu aXplIGF2YWlsYWJsZSBzY2FuIGFkdmljZS4gKi8KKwl3aGlsZSAoKGkgPSBibXNfbmV4dF9tZW1i ZXIoc2Nhbl9pbmRleGVzLCBpKSkgPj0gMCkKKwl7CisJCXBncGFfdHJvdmVfZW50cnkgKm15X2Vu dHJ5ID0gJnNjYW5fZW50cmllc1tpXTsKKwkJdWludDY0CQlteV9zY2FuX3R5cGUgPSAwOworCisJ CS8qIFRyYW5zbGF0ZSBvdXIgYWR2aWNlIHRhZ3MgdG8gYSBzY2FuIHN0cmF0ZWd5IGFkdmljZSB2 YWx1ZS4gKi8KKwkJaWYgKG15X2VudHJ5LT50YWcgPT0gUEdQQV9UQUdfQklUTUFQX0hFQVBfU0NB TikKKwkJeworCQkJLyoKKwkJCSAqIENsZWFybHkgUEdTX0NPTlNJREVSX0lOREVYT05MWSBjYW4g c3VwcHJlc3MgQml0bWFwIEhlYXAgU2NhbnMsCisJCQkgKiBzbyBkb24ndCBjbGVhciBpdCB3aGVu IHN1Y2ggYSBzY2FuIGlzIHJlcXVlc3RlZC4gVGhpcyBoYXBwZW5zCisJCQkgKiBiZWNhdXNlIGJ1 aWxkX2luZGV4X3NjYW4oKSB0aGlua3MgdGhhdCB0aGUgcG9zc2liaWxpdHkgb2YgYW4KKwkJCSAq IGluZGV4LW9ubHkgc2NhbiBpcyBhIHN1ZmZpY2llbnQgcmVhc29uIHRvIGNvbnNpZGVyIHVzaW5n IGFuCisJCQkgKiBvdGhlcndpc2UtdXNlbGVzcyBpbmRleCwgYW5kIGdldF9pbmRleF9wYXRocygp IHRoaW5rcyB0aGF0IHRoZQorCQkJICogc2FtZSBwYXRocyB0aGF0IGFyZSB1c2VmdWwgZm9yIGlu ZGV4IG9yIGluZGV4LW9ubHkgc2NhbnMgc2hvdWxkCisJCQkgKiBhbHNvIGJlIGNvbnNpZGVyZWQg Zm9yIGJpdG1hcCBzY2Fucy4gUGVyaGFwcyB0aGF0IGxvZ2ljIHNob3VsZAorCQkJICogYmUgdGln aHRlbmVkIHVwLCBidXQgdW50aWwgdGhlbiB3ZSBuZWVkIHRvIGluY2x1ZGUKKwkJCSAqIFBHU19D T05TSURFUl9JTkRFWE9OTFkgaW4gbXlfc2Nhbl90eXBlIGhlcmUuCisJCQkgKi8KKwkJCW15X3Nj YW5fdHlwZSA9IFBHU19CSVRNQVBTQ0FOIHwgUEdTX0NPTlNJREVSX0lOREVYT05MWTsKKwkJfQor CQllbHNlIGlmIChteV9lbnRyeS0+dGFnID09IFBHUEFfVEFHX0lOREVYX09OTFlfU0NBTikKKwkJ CW15X3NjYW5fdHlwZSA9IFBHU19JTkRFWE9OTFlTQ0FOIHwgUEdTX0NPTlNJREVSX0lOREVYT05M WTsKKwkJZWxzZSBpZiAobXlfZW50cnktPnRhZyA9PSBQR1BBX1RBR19JTkRFWF9TQ0FOKQorCQkJ bXlfc2Nhbl90eXBlID0gUEdTX0lOREVYU0NBTjsKKwkJZWxzZSBpZiAobXlfZW50cnktPnRhZyA9 PSBQR1BBX1RBR19TRVFfU0NBTikKKwkJCW15X3NjYW5fdHlwZSA9IFBHU19TRVFTQ0FOOworCQll bHNlIGlmIChteV9lbnRyeS0+dGFnID09IFBHUEFfVEFHX1RJRF9TQ0FOKQorCQkJbXlfc2Nhbl90 eXBlID0gUEdTX1RJRFNDQU47CisKKwkJLyoKKwkJICogSWYgdGhpcyBpcyB1bmRlcnN0YW5kYWJs ZSBzY2FuIGFkdmljZSwgaGFuZyBvbiB0byB0aGUgZW50cnksIHRoZQorCQkgKiBpbmZlcnJlZCBz Y2FuIHR5cGUgdHlwZSwgYW5kIHRoZSBpbmRleCBhdCB3aGljaCB3ZSBmb3VuZCBpdC4KKwkJICoK KwkJICogQWxzbyBtYWtlIGEgbm90ZSBpZiB3ZSBzZWUgY29uZmxpY3Rpbmcgc2NhbiB0eXBlIGFk dmljZS4gTm90ZSB0aGF0CisJCSAqIHdlIHJlZ2FyZCB0d28gaW5kZXggc3BlY2lmaWNhdGlvbnMg YXMgY29uZmxpY3RpbmcgdW5sZXNzIHRoZXkgbWF0Y2gKKwkJICogZXhhY3RseS4gSW4gdGhlb3J5 LCBwZXJoYXBzIHdlIGNvdWxkIHJlZ2FyZCBJTkRFWF9TQ0FOKGEgYykgYW5kCisJCSAqIElOREVY X1NDQU4oYSBiLmMpIGFzIG5vbi1jb25mbGljdGluZyBpZiBpdCBoYXBwZW5zIHRoYXQgdGhlIG9u bHkKKwkJICogaW5kZXggbmFtZWQgYyBpcyBpbiBzY2hlbWEgYiwgYnV0IGl0IGRvZXNuJ3Qgc2Vl bSB3b3J0aCB0aGUgY29kZS4KKwkJICovCisJCWlmIChteV9zY2FuX3R5cGUgIT0gMCkKKwkJewor CQkJaWYgKHNjYW5fdHlwZSAhPSAwICYmIHNjYW5fdHlwZSAhPSBteV9zY2FuX3R5cGUpCisJCQkJ c2Nhbl90eXBlX2NvbmZsaWN0ID0gdHJ1ZTsKKwkJCWlmICghc2Nhbl90eXBlX2NvbmZsaWN0ICYm IHNjYW5fZW50cnkgIT0gTlVMTCAmJgorCQkJCW15X2VudHJ5LT50YXJnZXQtPml0YXJnZXQgIT0g TlVMTCAmJgorCQkJCXNjYW5fZW50cnktPnRhcmdldC0+aXRhcmdldCAhPSBOVUxMICYmCisJCQkJ IXBncGFfaW5kZXhfdGFyZ2V0c19lcXVhbChzY2FuX2VudHJ5LT50YXJnZXQtPml0YXJnZXQsCisJ CQkJCQkJCQkJICBteV9lbnRyeS0+dGFyZ2V0LT5pdGFyZ2V0KSkKKwkJCQlzY2FuX3R5cGVfY29u ZmxpY3QgPSB0cnVlOworCQkJc2Nhbl9lbnRyeSA9IG15X2VudHJ5OworCQkJc2Nhbl90eXBlID0g bXlfc2Nhbl90eXBlOworCQkJc2Nhbl90eXBlX2luZGV4ZXMgPSBibXNfYWRkX21lbWJlcihzY2Fu X3R5cGVfaW5kZXhlcywgaSk7CisJCX0KKwl9CisKKwkvKiBTY3J1dGluaXplIGF2YWlsYWJsZSBn YXRoZXItcmVsYXRlZCBhbmQgcGFydGl0aW9ud2lzZSBhZHZpY2UuICovCisJaSA9IC0xOworCXdo aWxlICgoaSA9IGJtc19uZXh0X21lbWJlcihyZWxfaW5kZXhlcywgaSkpID49IDApCisJeworCQlw Z3BhX3Ryb3ZlX2VudHJ5ICpteV9lbnRyeSA9ICZyZWxfZW50cmllc1tpXTsKKwkJdWludDY0CQlt eV9nYXRoZXJfbWFzayA9IDA7CisJCWJvb2wJCWp1c3Rfb25lX3JlbDsKKworCQlqdXN0X29uZV9y ZWwgPSBteV9lbnRyeS0+dGFyZ2V0LT50dHlwZSA9PSBQR1BBX1RBUkdFVF9JREVOVElGSUVSCisJ CQl8fCBsaXN0X2xlbmd0aChteV9lbnRyeS0+dGFyZ2V0LT5jaGlsZHJlbikgPT0gMTsKKworCQkv KgorCQkgKiBQQVJUSVRJT05XSVNFIGJlaGF2ZXMgbGlrZSBhIHNjYW4gdHlwZSwgZXhjZXB0IHRo YXQgaWYgdGhlcmUncyBtb3JlCisJCSAqIHRoYW4gb25lIHJlbGF0aW9uIHRhcmdldGVkLCBpdCBo YXMgbm8gZWZmZWN0IGF0IHRoaXMgbGV2ZWwuCisJCSAqLworCQlpZiAobXlfZW50cnktPnRhZyA9 PSBQR1BBX1RBR19QQVJUSVRJT05XSVNFKQorCQl7CisJCQlpZiAoanVzdF9vbmVfcmVsKQorCQkJ eworCQkJCWNvbnN0IHVpbnQ2NCBteV9zY2FuX3R5cGUgPSBQR1NfQVBQRU5EIHwgUEdTX01FUkdF X0FQUEVORDsKKworCQkJCWlmIChzY2FuX3R5cGUgIT0gMCAmJiBzY2FuX3R5cGUgIT0gbXlfc2Nh bl90eXBlKQorCQkJCQlzY2FuX3R5cGVfY29uZmxpY3QgPSB0cnVlOworCQkJCXNjYW5fZW50cnkg PSBteV9lbnRyeTsKKwkJCQlzY2FuX3R5cGUgPSBteV9zY2FuX3R5cGU7CisJCQkJc2Nhbl90eXBl X3JlbF9pbmRleGVzID0KKwkJCQkJYm1zX2FkZF9tZW1iZXIoc2Nhbl90eXBlX3JlbF9pbmRleGVz LCBpKTsKKwkJCX0KKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyoKKwkJICogR0FUSEVSIGFuZCBH QVRIRVJfTUVSR0UgYXBwbGllZCB0byBhIHNpbmdsZSByZWwgbWVhbiB0aGF0IHdlIHNob3VsZAor CQkgKiB1c2UgdGhlIGNvcnJlc3BvbmRpbmdzIHN0cmF0ZWd5IGhlcmUsIHdoaWxlIGFwcGx5aW5n IGVpdGhlciB0byBtb3JlCisJCSAqIHRoYW4gb25lIHJlbCBtZWFucyB3ZSBzaG91bGQgbm90IHVz ZSB0aG9zZSBzdHJhdGVnaWVzIGhlcmUsIGJ1dAorCQkgKiByYXRoZXIgYXQgdGhlIGxldmVsIG9m IHRoZSBqb2lucmVsIHRoYXQgY29ycmVzcG9uZHMgdG8gd2hhdCB3YXMKKwkJICogc3BlY2lmaWVk LiBOT19HQVRIRVIgY2FuIG9ubHkgYmUgYXBwbGllZCB0byBzaW5nbGUgcmVscy4KKwkJICoKKwkJ ICogTm90ZSB0aGF0IHNldHRpbmcgUEdTX0NPTlNJREVSX05PTlBBUlRJQUwgaW4gbXlfZ2F0aGVy X21hc2sgaXMKKwkJICogZXF1aXZhbGVudCB0byBhbGxvd2luZyB0aGUgbm9uLXVzZSBvZiBlaXRo ZXIgZm9ybSBvZiBHYXRoZXIgaGVyZS4KKwkJICovCisJCWlmIChteV9lbnRyeS0+dGFnID09IFBH UEFfVEFHX0dBVEhFUiB8fAorCQkJbXlfZW50cnktPnRhZyA9PSBQR1BBX1RBR19HQVRIRVJfTUVS R0UpCisJCXsKKwkJCWlmICghanVzdF9vbmVfcmVsKQorCQkJCW15X2dhdGhlcl9tYXNrID0gUEdT X0NPTlNJREVSX05PTlBBUlRJQUw7CisJCQllbHNlIGlmIChteV9lbnRyeS0+dGFnID09IFBHUEFf VEFHX0dBVEhFUikKKwkJCQlteV9nYXRoZXJfbWFzayA9IFBHU19HQVRIRVI7CisJCQllbHNlCisJ CQkJbXlfZ2F0aGVyX21hc2sgPSBQR1NfR0FUSEVSX01FUkdFOworCQl9CisJCWVsc2UgaWYgKG15 X2VudHJ5LT50YWcgPT0gUEdQQV9UQUdfTk9fR0FUSEVSKQorCQl7CisJCQlBc3NlcnQoanVzdF9v bmVfcmVsKTsKKwkJCW15X2dhdGhlcl9tYXNrID0gUEdTX0NPTlNJREVSX05PTlBBUlRJQUw7CisJ CX0KKworCQkvKgorCQkgKiBJZiB3ZSBzZXQgbXlfZ2F0aGVyX21hc2sgdXAgYWJvdmUsIHRoZW4g d2UgKDEpIG1ha2UgYSBub3RlIGlmIHRoZQorCQkgKiBhZHZpY2UgY29uZmxpY3RlZCwgKDIpIHJl bWVtYmVyIHRoZSBtYXNrIHZhbHVlLCBhbmQgKDMpIHJlbWVtYmVyCisJCSAqIHdoZXRoZXIgdGhp cyB3YXMgYSBmdWxsIG9yIHBhcnRpYWwgbWF0Y2guCisJCSAqLworCQlpZiAobXlfZ2F0aGVyX21h c2sgIT0gMCkKKwkJeworCQkJaWYgKGdhdGhlcl9tYXNrICE9IDAgJiYgZ2F0aGVyX21hc2sgIT0g bXlfZ2F0aGVyX21hc2spCisJCQkJZ2F0aGVyX2NvbmZsaWN0ID0gdHJ1ZTsKKwkJCWdhdGhlcl9t YXNrID0gbXlfZ2F0aGVyX21hc2s7CisJCQlpZiAoanVzdF9vbmVfcmVsKQorCQkJCWdhdGhlcl9m dWxsX21hdGNoID0gYm1zX2FkZF9tZW1iZXIoZ2F0aGVyX2Z1bGxfbWF0Y2gsIGkpOworCQkJZWxz ZQorCQkJCWdhdGhlcl9wYXJ0aWFsX21hdGNoID0gYm1zX2FkZF9tZW1iZXIoZ2F0aGVyX3BhcnRp YWxfbWF0Y2gsIGkpOworCQl9CisJfQorCisJLyogRW5mb3JjZSBjaG9pY2Ugb2YgaW5kZXguICov CisJaWYgKHNjYW5fZW50cnkgIT0gTlVMTCAmJiAhc2Nhbl90eXBlX2NvbmZsaWN0ICYmCisJCShz Y2FuX2VudHJ5LT50YWcgPT0gUEdQQV9UQUdfSU5ERVhfU0NBTiB8fAorCQkgc2Nhbl9lbnRyeS0+ dGFnID09IFBHUEFfVEFHX0lOREVYX09OTFlfU0NBTikpCisJeworCQlwZ3BhX2luZGV4X3Rhcmdl dCAqaXRhcmdldCA9IHNjYW5fZW50cnktPnRhcmdldC0+aXRhcmdldDsKKwkJSW5kZXhPcHRJbmZv ICptYXRjaGVkX2luZGV4ID0gTlVMTDsKKworCQlmb3JlYWNoX25vZGUoSW5kZXhPcHRJbmZvLCBp bmRleCwgcmVsLT5pbmRleGxpc3QpCisJCXsKKwkJCWNoYXIJICAgKnJlbG5hbWUgPSBnZXRfcmVs X25hbWUoaW5kZXgtPmluZGV4b2lkKTsKKwkJCU9pZAkJCW5zcG9pZCA9IGdldF9yZWxfbmFtZXNw YWNlKGluZGV4LT5pbmRleG9pZCk7CisJCQljaGFyCSAgICpyZWxuYW1lc3BhY2UgPSBnZXRfbmFt ZXNwYWNlX25hbWVfb3JfdGVtcChuc3BvaWQpOworCisJCQlpZiAoc3RyY21wKGl0YXJnZXQtPmlu ZG5hbWUsIHJlbG5hbWUpID09IDAgJiYKKwkJCQkoaXRhcmdldC0+aW5kbmFtZXNwYWNlID09IE5V TEwgfHwKKwkJCQkgc3RyY21wKGl0YXJnZXQtPmluZG5hbWVzcGFjZSwgcmVsbmFtZXNwYWNlKSA9 PSAwKSkKKwkJCXsKKwkJCQltYXRjaGVkX2luZGV4ID0gaW5kZXg7CisJCQkJYnJlYWs7CisJCQl9 CisJCX0KKworCQlpZiAobWF0Y2hlZF9pbmRleCA9PSBOVUxMKQorCQl7CisJCQkvKiBEb24ndCBm b3JjZSB0aGUgc2NhbiB0eXBlIGlmIHRoZSBpbmRleCBkb2Vzbid0IGV4aXN0LiAqLworCQkJc2Nh bl90eXBlID0gMDsKKworCQkJLyogTWFyayBhZHZpY2UgYXMgaW5hcHBsaWNhYmxlLiAqLworCQkJ cGdwYV90cm92ZV9zZXRfZmxhZ3Moc2Nhbl9lbnRyaWVzLCBzY2FuX3R5cGVfaW5kZXhlcywKKwkJ CQkJCQkJIFBHUEFfVEVfSU5BUFBMSUNBQkxFKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCS8qIERp c2FibGUgZXZlcnkgb3RoZXIgaW5kZXguICovCisJCQlmb3JlYWNoX25vZGUoSW5kZXhPcHRJbmZv LCBpbmRleCwgcmVsLT5pbmRleGxpc3QpCisJCQl7CisJCQkJaWYgKGluZGV4ICE9IG1hdGNoZWRf aW5kZXgpCisJCQkJCWluZGV4LT5kaXNhYmxlZCA9IHRydWU7CisJCQl9CisJCX0KKwl9CisKKwkv KgorCSAqIE1hcmsgYWxsIHRoZSBzY2FuIG1ldGhvZCBlbnRyaWVzIGFzIGZ1bGx5IG1hdGNoZWQ7 IGFuZCBpZiB0aGV5IHNwZWNpZnkKKwkgKiBkaWZmZXJlbnQgdGhpbmdzLCBtYXJrIHRoZW0gYWxs IGFzIGNvbmZsaWN0aW5nLgorCSAqLworCWZsYWdzID0gUEdQQV9URV9NQVRDSF9QQVJUSUFMIHwg UEdQQV9URV9NQVRDSF9GVUxMOworCWlmIChzY2FuX3R5cGVfY29uZmxpY3QpCisJCWZsYWdzIHw9 IFBHUEFfVEVfQ09ORkxJQ1RJTkc7CisJcGdwYV90cm92ZV9zZXRfZmxhZ3Moc2Nhbl9lbnRyaWVz LCBzY2FuX3R5cGVfaW5kZXhlcywgZmxhZ3MpOworCXBncGFfdHJvdmVfc2V0X2ZsYWdzKHJlbF9l bnRyaWVzLCBzY2FuX3R5cGVfcmVsX2luZGV4ZXMsIGZsYWdzKTsKKworCS8qCisJICogTWFyayBl dmVyeSBHYXRoZXItcmVsYXRlZCBwaWVjZSBvZiBhZHZpY2UgYXMgcGFydGlhbGx5IG1hdGNoZWQu IE1hcmsKKwkgKiB0aGUgb25lcyB0aGF0IGluY2x1ZGVkIHRoaXMgcmVsYXRpb24gYXMgYSB0YXJn ZXQgYnkgaXRzZWxmIGFzIGZ1bGx5CisJICogbWF0Y2hlZC4gSWYgdGhlcmUgd2FzIGEgY29uZmxp Y3QsIG1hcmsgdGhlbSBhbGwgYXMgY29uZmxpY3RpbmcuCisJICovCisJZmxhZ3MgPSBQR1BBX1RF X01BVENIX1BBUlRJQUw7CisJaWYgKGdhdGhlcl9jb25mbGljdCkKKwkJZmxhZ3MgfD0gUEdQQV9U RV9DT05GTElDVElORzsKKwlwZ3BhX3Ryb3ZlX3NldF9mbGFncyhyZWxfZW50cmllcywgZ2F0aGVy X3BhcnRpYWxfbWF0Y2gsIGZsYWdzKTsKKwlmbGFncyB8PSBQR1BBX1RFX01BVENIX0ZVTEw7CisJ cGdwYV90cm92ZV9zZXRfZmxhZ3MocmVsX2VudHJpZXMsIGdhdGhlcl9mdWxsX21hdGNoLCBmbGFn cyk7CisKKwkvKgorCSAqIEVuZm9yY2UgcmVzdHJpY3Rpb25zIG9uIHRoZSBzY2FuIHR5cGUgYW5k IHVzZSBvZiBHYXRoZXIvR2F0aGVyIE1lcmdlLgorCSAqIE9ubHkgY2xlYXIgYml0cyBoZXJlLCBz byB0aGF0IHdlIHN0aWxsIHJlc3BlY3QgdGhlIGVuYWJsZV8qIEdVQ3MuIERvCisJICogbm90aGlu ZyBpbiBjYXNlcyB3aGVyZSB0aGUgYWR2aWNlIG9uIGEgc2luZ2xlIHRvcGljIGNvbmZsaWN0cy4K KwkgKi8KKwlpZiAoc2Nhbl90eXBlICE9IDAgJiYgIXNjYW5fdHlwZV9jb25mbGljdCkKKwl7CisJ CXVpbnQ2NAkJYWxsX3NjYW5fbWFzazsKKworCQlhbGxfc2Nhbl9tYXNrID0gUEdTX1NDQU5fQU5Z IHwgUEdTX0FQUEVORCB8IFBHU19NRVJHRV9BUFBFTkQgfAorCQkJUEdTX0NPTlNJREVSX0lOREVY T05MWTsKKwkJcmVsLT5wZ3NfbWFzayAmPSB+KGFsbF9zY2FuX21hc2sgJiB+c2Nhbl90eXBlKTsK Kwl9CisJaWYgKGdhdGhlcl9tYXNrICE9IDAgJiYgIWdhdGhlcl9jb25mbGljdCkKKwl7CisJCXVp bnQ2NAkJYWxsX2dhdGhlcl9tYXNrOworCisJCWFsbF9nYXRoZXJfbWFzayA9CisJCQlQR1NfR0FU SEVSIHwgUEdTX0dBVEhFUl9NRVJHRSB8IFBHU19DT05TSURFUl9OT05QQVJUSUFMOworCQlyZWwt PnBnc19tYXNrICY9IH4oYWxsX2dhdGhlcl9tYXNrICYgfmdhdGhlcl9tYXNrKTsKKwl9Cit9CisK Ky8qCisgKiBBZGQgZmVlZGJhY2sgZW50cmllcyB0byBmb3Igb25lIHRyb3ZlIHNsaWNlIHRvIHRo ZSBwcm92aWRlZCBsaXN0IGFuZAorICogcmV0dXJuIHRoZSByZXN1bHRpbmcgbGlzdC4KKyAqCisg KiBGZWVkYmFjayBlbnRyaWVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgdHJvdmUgZW50cnkncyBm bGFncy4gSXQncyBhc3N1bWVkCisgKiB0aGF0IHRoZSBjYWxsZXIgaGFzIGFscmVhZHkgc2V0IGFs bCByZWxldmFudCBmbGFncyB3aXRoIHRoZSBleGNlcHRpb24gb2YKKyAqIFBHUEFfVEVfRkFJTEVE LiBXZSBzZXQgdGhhdCBmbGFnIGhlcmUgaWYgYXBwcm9wcmlhdGUuCisgKi8KK3N0YXRpYyBMaXN0 ICoKK3BncGFfcGxhbm5lcl9hcHBlbmRfZmVlZGJhY2soTGlzdCAqbGlzdCwgcGdwYV90cm92ZSAq dHJvdmUsCisJCQkJCQkJIHBncGFfdHJvdmVfbG9va3VwX3R5cGUgdHlwZSwKKwkJCQkJCQkgcGdw YV9pZGVudGlmaWVyICpydF9pZGVudGlmaWVycywKKwkJCQkJCQkgcGdwYV9wbGFuX3dhbGtlcl9j b250ZXh0ICp3YWxrZXIpCit7CisJcGdwYV90cm92ZV9lbnRyeSAqZW50cmllczsKKwlpbnQJCQlu ZW50cmllczsKKwlTdHJpbmdJbmZvRGF0YSBidWY7CisKKwlpbml0U3RyaW5nSW5mbygmYnVmKTsK KwlwZ3BhX3Ryb3ZlX2xvb2t1cF9hbGwodHJvdmUsIHR5cGUsICZlbnRyaWVzLCAmbmVudHJpZXMp OworCWZvciAoaW50IGkgPSAwOyBpIDwgbmVudHJpZXM7ICsraSkKKwl7CisJCXBncGFfdHJvdmVf ZW50cnkgKmVudHJ5ID0gJmVudHJpZXNbaV07CisJCURlZkVsZW0gICAgKml0ZW07CisKKwkJLyoK KwkJICogSWYgdGhpcyBlbnRyeSB3YXMgZnVsbHkgbWF0Y2hlZCwgY2hlY2sgd2hldGhlciBnZW5l cmF0aW5nIGFkdmljZQorCQkgKiBmcm9tIHRoaXMgcGxhbiB3b3VsZCBwcm9kdWNlIHN1Y2ggYW4g ZW50cnkuIElmIG5vdCwgbGFiZWwgdGhlIGVudHJ5CisJCSAqIGFzIGZhaWxlZC4KKwkJICovCisJ CWlmICgoZW50cnktPmZsYWdzICYgUEdQQV9URV9NQVRDSF9GVUxMKSAhPSAwICYmCisJCQkhcGdw YV93YWxrZXJfd291bGRfYWR2aXNlKHdhbGtlciwgcnRfaWRlbnRpZmllcnMsCisJCQkJCQkJCQkg IGVudHJ5LT50YWcsIGVudHJ5LT50YXJnZXQpKQorCQkJZW50cnktPmZsYWdzIHw9IFBHUEFfVEVf RkFJTEVEOworCisJCWl0ZW0gPSBtYWtlRGVmRWxlbShwZ3BhX2NzdHJpbmdfdHJvdmVfZW50cnko ZW50cnkpLAorCQkJCQkJICAgKE5vZGUgKikgbWFrZUludGVnZXIoZW50cnktPmZsYWdzKSwgLTEp OworCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBpdGVtKTsKKwl9CisKKwlyZXR1cm4gbGlzdDsKK30K KworLyoKKyAqIEVtaXQgYSBXQVJOSU5HIHRlbGwgdGhlIHVzZXIgYWJvdXQgYSBwcm9ibGVtIHdp dGggdGhlIHN1cHBsaWVkIHBsYW4gYWR2aWNlLgorICovCitzdGF0aWMgdm9pZAorcGdwYV9wbGFu bmVyX2ZlZWRiYWNrX3dhcm5pbmcoTGlzdCAqZmVlZGJhY2spCit7CisJU3RyaW5nSW5mb0RhdGEg ZGV0YWlsYnVmOworCVN0cmluZ0luZm9EYXRhIGZsYWdidWY7CisKKwkvKiBRdWljayBleGl0IGlm IHRoZXJlJ3Mgbm8gZmVlZGJhY2suICovCisJaWYgKGZlZWRiYWNrID09IE5JTCkKKwkJcmV0dXJu OworCisJLyogSW5pdGlhbGl6ZSBidWZmZXJzLiAqLworCWluaXRTdHJpbmdJbmZvKCZkZXRhaWxi dWYpOworCWluaXRTdHJpbmdJbmZvKCZmbGFnYnVmKTsKKworCS8qIE1haW4gbG9vcC4gKi8KKwlm b3JlYWNoX25vZGUoRGVmRWxlbSwgaXRlbSwgZmVlZGJhY2spCisJeworCQlpbnQJCQlmbGFncyA9 IGRlZkdldEludDMyKGl0ZW0pOworCisJCS8qCisJCSAqIERvbid0IGVtaXQgYW55dGhpbmcgaWYg aXQgd2FzIGZ1bGx5IG1hdGNoZWQgd2l0aCBubyBwcm9ibGVtcyBmb3VuZC4KKwkJICoKKwkJICog TkI6IEZlZWRiYWNrIHNob3VsZCBuZXZlciBiZSBtYXJrZWQgZnVsbHkgbWF0Y2hlZCB3aXRob3V0 IGFsc28KKwkJICogYmVpbmcgbWFya2VkIHBhcnRpYWxseSBtYXRjaGVkLgorCQkgKi8KKwkJaWYg KGZsYWdzID09IChQR1BBX1RFX01BVENIX1BBUlRJQUwgfCBQR1BBX1RFX01BVENIX0ZVTEwpKQor CQkJY29udGludWU7CisKKwkJLyoKKwkJICogVGVybWluYXRlIGVhY2ggZGV0YWlsIGxpbmUgZXhj ZXB0IHRoZSBsYXN0IHdpdGggYSBuZXdsaW5lLiBUaGlzIGlzCisJCSAqIGFsc28gYSBjb252ZW5p ZW50IHBsYWNlIHRvIHJlc2V0IGZsYWdidWYuCisJCSAqLworCQlpZiAoZGV0YWlsYnVmLmxlbiA+ IDApCisJCXsKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKCZkZXRhaWxidWYsICdcbicpOworCQkJ cmVzZXRTdHJpbmdJbmZvKCZmbGFnYnVmKTsKKwkJfQorCisJCS8qIEdlbmVyYXRlIG91dHB1dC4g Ki8KKwkJcGdwYV90cm92ZV9hcHBlbmRfZmxhZ3MoJmZsYWdidWYsIGZsYWdzKTsKKwkJYXBwZW5k U3RyaW5nSW5mbygmZGV0YWlsYnVmLCBfKCJhZHZpY2UgJXMgZmVlZGJhY2sgaXMgXCIlc1wiIiks CisJCQkJCQkgaXRlbS0+ZGVmbmFtZSwgZmxhZ2J1Zi5kYXRhKTsKKwl9CisKKwkvKiBFbWl0IHRo ZSB3YXJuaW5nLCBpZiBhbnkgcHJvYmxlbXMgd2VyZSBmb3VuZC4gKi8KKwlpZiAoZGV0YWlsYnVm LmxlbiA+IDApCisJCWVyZXBvcnQoV0FSTklORywKKwkJCQllcnJtc2coInN1cHBsaWVkIHBsYW4g YWR2aWNlIHdhcyBub3QgZW5mb3JjZWQiKSwKKwkJCQllcnJkZXRhaWwoIiVzIiwgZGV0YWlsYnVm LmRhdGEpKTsKK30KKworI2lmZGVmIFVTRV9BU1NFUlRfQ0hFQ0tJTkcKKworLyoKKyAqIEZhc3Qg aGFzaCBmdW5jdGlvbiBmb3IgYSBrZXkgY29uc2lzdGluZyBvZiBhbiBSVEkgYW5kIHBsYW4gbmFt ZS4KKyAqLworc3RhdGljIHVpbnQzMgorcGdwYV9yaV9jaGVja2VyX2hhc2hfa2V5KHBncGFfcmlf Y2hlY2tlcl9rZXkga2V5KQoreworCWZhc3RoYXNoX3N0YXRlIGhzOworCWludAkJCXNwX2xlbjsK KworCWZhc3RoYXNoX2luaXQoJmhzLCAwKTsKKworCWhzLmFjY3VtID0ga2V5LnJ0aTsKKwlmYXN0 aGFzaF9jb21iaW5lKCZocyk7CisKKwkvKiBwbGFuX25hbWUgY2FuIGJlIE5VTEwgKi8KKwlpZiAo a2V5LnBsYW5fbmFtZSA9PSBOVUxMKQorCQlzcF9sZW4gPSAwOworCWVsc2UKKwkJc3BfbGVuID0g ZmFzdGhhc2hfYWNjdW1fY3N0cmluZygmaHMsIGtleS5wbGFuX25hbWUpOworCisJLyogaGFzaGZu X3Vuc3RhYmxlLmggcmVjb21tZW5kcyB1c2luZyBzdHJpbmcgbGVuZ3RoIGFzIHR3ZWFrICovCisJ cmV0dXJuIGZhc3RoYXNoX2ZpbmFsMzIoJmhzLCBzcF9sZW4pOworfQorCisjZW5kaWYKKworLyoK KyAqIFNhdmUgdGhlIHJhbmdlIHRhYmxlIGlkZW50aWZpZXIgZm9yIG9uZSByZWxhdGlvbiBmb3Ig ZnV0dXJlIGNyb3NzLWNoZWNraW5nLgorICovCitzdGF0aWMgdm9pZAorcGdwYV9yaV9jaGVja2Vy X3NhdmUocGdwYV9wbGFubmVyX3N0YXRlICpwcHMsIFBsYW5uZXJJbmZvICpyb290LAorCQkJCQkg UmVsT3B0SW5mbyAqcmVsKQoreworI2lmZGVmIFVTRV9BU1NFUlRfQ0hFQ0tJTkcKKwlwZ3BhX3Jp X2NoZWNrZXJfa2V5IGtleTsKKwlwZ3BhX3JpX2NoZWNrZXIgKmNoZWNrOworCXBncGFfaWRlbnRp ZmllciByaWQ7CisJY29uc3QgY2hhciAqcmlkX3N0cmluZzsKKwlib29sCQlmb3VuZDsKKworCWtl eS5ydGkgPSBibXNfc2luZ2xldG9uX21lbWJlcihyZWwtPnJlbGlkcyk7CisJa2V5LnBsYW5fbmFt ZSA9IHJvb3QtPnBsYW5fbmFtZTsKKwlwZ3BhX2NvbXB1dGVfaWRlbnRpZmllcl9ieV9ydGkocm9v dCwga2V5LnJ0aSwgJnJpZCk7CisJcmlkX3N0cmluZyA9IHBncGFfaWRlbnRpZmllcl9zdHJpbmco JnJpZCk7CisJY2hlY2sgPSBwZ3BhX3JpX2NoZWNrX2luc2VydChwcHMtPnJpX2NoZWNrX2hhc2gs IGtleSwgJmZvdW5kKTsKKwlBc3NlcnQoIWZvdW5kIHx8IHN0cmNtcChjaGVjay0+cmlkX3N0cmlu ZywgcmlkX3N0cmluZykgPT0gMCk7CisJY2hlY2stPnJpZF9zdHJpbmcgPSByaWRfc3RyaW5nOwor I2VuZGlmCit9CisKKy8qCisgKiBWYWxpZGF0ZSB0aGF0IHRoZSByYW5nZSB0YWJsZSBpZGVudGlm aWVycyB3ZSB3ZXJlIGFibGUgdG8gZ2VuZXJhdGUgZHVyaW5nCisgKiBwbGFubmluZyBtYXRjaCB0 aGUgb25lcyB3ZSBnZW5lcmF0ZWQgZnJvbSB0aGUgZmluYWwgcGxhbi4KKyAqLworc3RhdGljIHZv aWQKK3BncGFfcmlfY2hlY2tlcl92YWxpZGF0ZShwZ3BhX3BsYW5uZXJfc3RhdGUgKnBwcywgUGxh bm5lZFN0bXQgKnBzdG10KQoreworI2lmZGVmIFVTRV9BU1NFUlRfQ0hFQ0tJTkcKKwlwZ3BhX2lk ZW50aWZpZXIgKnJ0X2lkZW50aWZpZXJzOworCXBncGFfcmlfY2hlY2tfaXRlcmF0b3IgaXQ7CisJ cGdwYV9yaV9jaGVja2VyICpjaGVjazsKKworCS8qIENyZWF0ZSBpZGVudGlmaWVycyBmcm9tIHRo ZSBwbGFubmVkIHN0YXRlbWVudC4gKi8KKwlydF9pZGVudGlmaWVycyA9IHBncGFfY3JlYXRlX2lk ZW50aWZpZXJzX2Zvcl9wbGFubmVkX3N0bXQocHN0bXQpOworCisJLyogSXRlcmF0ZSBvdmVyIGlk ZW50aWZpZXJzIGNyZWF0ZWQgZHVyaW5nIHBsYW5uaW5nLCBzbyB3ZSBjYW4gY29tcGFyZS4gKi8K KwlwZ3BhX3JpX2NoZWNrX3N0YXJ0X2l0ZXJhdGUocHBzLT5yaV9jaGVja19oYXNoLCAmaXQpOwor CXdoaWxlICgoY2hlY2sgPSBwZ3BhX3JpX2NoZWNrX2l0ZXJhdGUocHBzLT5yaV9jaGVja19oYXNo LCAmaXQpKSAhPSBOVUxMKQorCXsKKwkJaW50CQkJcnRvZmZzZXQgPSAwOworCQljb25zdCBjaGFy ICpyaWRfc3RyaW5nOworCQlJbmRleAkJZmxhdF9ydGk7CisKKwkJLyoKKwkJICogSWYgdGhlcmUn cyBubyBwbGFuIG5hbWUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZW50cnksIHRoZW4gdGhlCisJCSAq IHJ0b2Zmc2V0IGlzIDAuIE90aGVyd2lzZSwgd2UgY2FuIHNlYXJjaCB0aGUgU3ViUGxhblJUSW5m byBsaXN0IHRvCisJCSAqIGZpbmQgdGhlIHJ0b2Zmc2V0LgorCQkgKi8KKwkJaWYgKGNoZWNrLT5r ZXkucGxhbl9uYW1lICE9IE5VTEwpCisJCXsKKwkJCWZvcmVhY2hfbm9kZShTdWJQbGFuUlRJbmZv LCBydGluZm8sIHBzdG10LT5zdWJydGluZm9zKQorCQkJeworCQkJCS8qCisJCQkJICogSWYgcnRp bmZvLT5kdW1teSBpcyBzZXQsIHRoZW4gdGhlIHN1YnF1ZXJ5J3MgcmFuZ2UgdGFibGUKKwkJCQkg KiB3aWxsIG9ubHkgaGF2ZSBiZWVuIHBhcnRpYWxseSBjb3BpZWQgdG8gdGhlIGZpbmFsIHJhbmdl CisJCQkJICogdGFibGUuIFNwZWNpZmljYWxseSwgb25seSBSVEVfUkVMQVRJT04gZW50cmllcyBh bmQKKwkJCQkgKiBSVEVfU1VCUVVFUlkgZW50cmllcyB0aGF0IHdlcmUgb25jZSBSVEVfUkVMQVRJ T04gZW50cmllcworCQkJCSAqIHdpbGwgYmUgY29waWVkLCBhcyBwZXIgYWRkX3J0ZXNfdG9fZmxh dF9ydGFibGUuIFRoZXJlZm9yZSwKKwkJCQkgKiB0aGVyZSdzIG5vIGZpeGVkIHJ0b2Zmc2V0IHRo YXQgd2UgY2FuIGFwcGx5IHRvIHRoZSBSVElzCisJCQkJICogdXNlZCBkdXJpbmcgcGxhbm5pbmcg dG8gbG9jYXRlIHRoZSBjb3JyZXNwb25kaW5nIHJlbGF0aW9ucworCQkJCSAqIGluIHRoZSBmaW5h bCBydGFibGUuCisJCQkJICoKKwkJCQkgKiBXaXRoIG1vcmUgY29tcGxleCBsb2dpYywgd2UgY291 bGQgd29yayBhcm91bmQgdGhhdCBwcm9ibGVtCisJCQkJICogYnkgcmVtZW1iZXJpbmcgdGhlIHdo b2xlIGNvbnRlbnRzIG9mIHRoZSBzdWJxdWVyeSdzIHJ0YWJsZQorCQkJCSAqIGR1cmluZyBwbGFu bmluZywgZGV0ZXJtaW5pbmcgd2hpY2ggb2YgdGhvc2Ugd291bGQgaGF2ZSBiZWVuCisJCQkJICog Y29waWVkIHRvIHRoZSBmaW5hbCBydGFibGUsIGFuZCBtYXRjaGluZyB0aGVtIHVwLiBCdXQgaXQK KwkJCQkgKiBkb2Vzbid0IHNlZW0gbGlrZSBhIHdvcnRod2hpbGUgZW5kZWF2b3IgZm9yIHJpZ2h0 IG5vdywKKwkJCQkgKiBiZWNhdXNlIFJUSXMgZnJvbSBzdWNoIHN1YnF1ZXJpZXMgd29uJ3QgYXBw ZWFyIGluIHRoZSBwbGFuCisJCQkJICogdHJlZSBpdHNlbGYsIGp1c3QgaW4gdGhlIHJhbmdlIHRh YmxlLiBIZW5jZSwgd2UgY2FuIG5laXRoZXIKKwkJCQkgKiBnZW5lcmF0ZSBub3IgYWNjZXB0IGFk dmljZSBmb3IgdGhlbS4KKwkJCQkgKi8KKwkJCQlpZiAoc3RyY21wKGNoZWNrLT5rZXkucGxhbl9u YW1lLCBydGluZm8tPnBsYW5fbmFtZSkgPT0gMAorCQkJCQkmJiAhcnRpbmZvLT5kdW1teSkKKwkJ CQl7CisJCQkJCXJ0b2Zmc2V0ID0gcnRpbmZvLT5ydG9mZnNldDsKKwkJCQkJQXNzZXJ0KHJ0b2Zm c2V0ID4gMCk7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKworCQkJLyoKKwkJCSAqIEl0J3Mg bm90IGFuIGVycm9yIGlmIHdlIGRvbid0IGZpbmQgdGhlIHBsYW4gbmFtZTogdGhhdCBqdXN0CisJ CQkgKiBtZWFucyB0aGF0IHdlIHBsYW5uZWQgYSBzdWJwbGFuIGJ5IHRoaXMgbmFtZSBidXQgaXQg ZW5kZWQgdXAKKwkJCSAqIGJlaW5nIGEgZHVtbXkgc3VicGxhbiBhbmQgc28gd2Fzbid0IGluY2x1 ZGVkIGluIHRoZSBmaW5hbCBwbGFuCisJCQkgKiB0cmVlLgorCQkJICovCisJCQlpZiAocnRvZmZz ZXQgPT0gMCkKKwkJCQljb250aW51ZTsKKwkJfQorCisJCS8qCisJCSAqIGNoZWNrLT5rZXkucnRp IGlzIHRoZSBSVEkgdGhhdCB3ZSBzYXcgcHJpb3IgdG8gcmFuZ2UtdGFibGUKKwkJICogZmxhdHRl bmluZywgc28gd2UgbXVzdCBhZGQgdGhlIGFwcHJvcHJpYXRlIFJUIG9mZnNldCB0byBnZXQgdGhl CisJCSAqIGZpbmFsIFJUSS4KKwkJICovCisJCWZsYXRfcnRpID0gY2hlY2stPmtleS5ydGkgKyBy dG9mZnNldDsKKwkJQXNzZXJ0KGZsYXRfcnRpIDw9IGxpc3RfbGVuZ3RoKHBzdG10LT5ydGFibGUp KTsKKworCQkvKiBBc3NlcnQgdGhhdCB0aGUgc3RyaW5nIHdlIGNvbXB1dGUgbm93IG1hdGNoZXMg dGhlIHByZXZpb3VzIG9uZS4gKi8KKwkJcmlkX3N0cmluZyA9IHBncGFfaWRlbnRpZmllcl9zdHJp bmcoJnJ0X2lkZW50aWZpZXJzW2ZsYXRfcnRpIC0gMV0pOworCQlBc3NlcnQoc3RyY21wKHJpZF9z dHJpbmcsIGNoZWNrLT5yaWRfc3RyaW5nKSA9PSAwKTsKKwl9CisjZW5kaWYKK30KKworLyoKKyAq IENvbnZlcnQgYSBiaXRtYXBzZXQgdG8gYSBDIHN0cmluZyBvZiBjb21tYS1zZXBhcmF0ZWQgaW50 ZWdlcnMuCisgKi8KK3N0YXRpYyBjaGFyICoKK3BncGFfYm1zX3RvX2NzdHJpbmcoQml0bWFwc2V0 ICpibXMpCit7CisJU3RyaW5nSW5mb0RhdGEgYnVmOworCWludAkJCXggPSAtMTsKKworCWlmIChi bXNfaXNfZW1wdHkoYm1zKSkKKwkJcmV0dXJuICJub25lIjsKKworCWluaXRTdHJpbmdJbmZvKCZi dWYpOworCXdoaWxlICgoeCA9IGJtc19uZXh0X21lbWJlcihibXMsIHgpKSA+PSAwKQorCXsKKwkJ aWYgKGJ1Zi5sZW4gPiAwKQorCQkJYXBwZW5kU3RyaW5nSW5mbygmYnVmLCAiLCAlZCIsIHgpOwor CQllbHNlCisJCQlhcHBlbmRTdHJpbmdJbmZvKCZidWYsICIlZCIsIHgpOworCX0KKworCXJldHVy biBidWYuZGF0YTsKK30KKworLyoKKyAqIENvbnZlcnQgYSBKb2luVHlwZSB0byBhIEMgc3RyaW5n LgorICovCitzdGF0aWMgY29uc3QgY2hhciAqCitwZ3BhX2pvaW50eXBlX3RvX2NzdHJpbmcoSm9p blR5cGUgam9pbnR5cGUpCit7CisJc3dpdGNoIChqb2ludHlwZSkKKwl7CisJCWNhc2UgSk9JTl9J Tk5FUjoKKwkJCXJldHVybiAiaW5uZXIiOworCQljYXNlIEpPSU5fTEVGVDoKKwkJCXJldHVybiAi bGVmdCI7CisJCWNhc2UgSk9JTl9GVUxMOgorCQkJcmV0dXJuICJmdWxsIjsKKwkJY2FzZSBKT0lO X1JJR0hUOgorCQkJcmV0dXJuICJyaWdodCI7CisJCWNhc2UgSk9JTl9TRU1JOgorCQkJcmV0dXJu ICJzZW1pIjsKKwkJY2FzZSBKT0lOX0FOVEk6CisJCQlyZXR1cm4gImFudGkiOworCQljYXNlIEpP SU5fUklHSFRfU0VNSToKKwkJCXJldHVybiAicmlnaHQgc2VtaSI7CisJCWNhc2UgSk9JTl9SSUdI VF9BTlRJOgorCQkJcmV0dXJuICJyaWdodCBhbnRpIjsKKwkJY2FzZSBKT0lOX1VOSVFVRV9PVVRF UjoKKwkJCXJldHVybiAidW5pcXVlIG91dGVyIjsKKwkJY2FzZSBKT0lOX1VOSVFVRV9JTk5FUjoK KwkJCXJldHVybiAidW5pcXVlIGlubmVyIjsKKwl9CisJcmV0dXJuICI/Pz8iOworfQpkaWZmIC0t Z2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3BsYW5uZXIuaCBiL2NvbnRyaWIvcGdf cGxhbl9hZHZpY2UvcGdwYV9wbGFubmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMDAuLjdkNDBiOTEwYjAwCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFu X2FkdmljZS9wZ3BhX3BsYW5uZXIuaApAQCAtMCwwICsxLDE3IEBACisvKi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyAqCisgKiBwZ3BhX3BsYW5uZXIuaAorICoJICBwbGFubmVyIGhvb2tzCisgKgorICogQ29w eXJpZ2h0IChjKSAyMDE2LTIwMjQsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3Vw CisgKgorICoJICBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfcGxhbm5lci5oCisgKgorICot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpZm5kZWYgUEdQQV9QTEFOTkVSX0gKKyNkZWZpbmUgUEdQ QV9QTEFOTkVSX0gKKworZXh0ZXJuIHZvaWQgcGdwYV9wbGFubmVyX2luc3RhbGxfaG9va3Modm9p ZCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3Nj YW4uYyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9zY2FuLmMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjc1ZDFhM2VmYTM2Ci0tLSAvZGV2L251bGwKKysrIGIv Y29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3NjYW4uYwpAQCAtMCwwICsxLDI4OCBAQAorLyot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgKgorICogcGdwYV9zY2FuLmMKKyAqCSAgYW5hbHlzaXMgb2Ygc2Nh bnMgaW4gUGxhbiB0cmVlcworICoKKyAqIENvcHlyaWdodCAoYykgMjAxNi0yMDI1LCBQb3N0Z3Jl U1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqCSAgY29udHJpYi9wZ19wbGFuX2Fk dmljZS9wZ3BhX3NjYW4uYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaW5jbHVkZSAi cG9zdGdyZXMuaCIKKworI2luY2x1ZGUgInBncGFfc2Nhbi5oIgorI2luY2x1ZGUgInBncGFfd2Fs a2VyLmgiCisKKyNpbmNsdWRlICJub2Rlcy9wYXJzZW5vZGVzLmgiCisjaW5jbHVkZSAicGFyc2Vy L3BhcnNldHJlZS5oIgorCitzdGF0aWMgcGdwYV9zY2FuICpwZ3BhX21ha2Vfc2NhbihwZ3BhX3Bs YW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwgUGxhbiAqcGxhbiwKKwkJCQkJCQkJIHBncGFfc2Nh bl9zdHJhdGVneSBzdHJhdGVneSwKKwkJCQkJCQkJIEJpdG1hcHNldCAqcmVsaWRzKTsKKworCitz dGF0aWMgUlRFS2luZCB1bmlxdWVfbm9uam9pbl9ydGVraW5kKEJpdG1hcHNldCAqcmVsaWRzLCBM aXN0ICpydGFibGUpOworCisvKgorICogQnVpbGQgYSBwZ3BhX3NjYW4gb2JqZWN0IGZvciBhIFBs YW4gbm9kZSBhbmQgdXBkYXRlIHRoZSBwbGFuIHdhbGtlcgorICogY29udGV4dCBhcyBhcHBvcHJp YXRlLiAgSWYgdGhpcyBpcyBhbiBBcHBlbmQgb3IgTWVyZ2VBcHBlbmQgc2NhbiwgYWxzbworICog YnVpbGQgcGdwYV9zY2FuIGZvciBhbnkgc2NhbnMgdGhhdCB3ZXJlIGNvbnNvbGlkYXRlZCBpbnRv IHRoaXMgb25lIGJ5CisgKiBBcHBlbmQvTWVyZ2VBcHBlbmQgcHVsbC11cC4KKyAqCisgKiBJZiB0 aGVyZSBpcyBhdCBsZWFzdCBvbmUgRWxpZGVkTm9kZSBmb3IgdGhpcyBwbGFuIG5vZGUsIHBhc3Mg dGhlIHVwcGVybW9zdAorICogb25lIGFzIGVsaWRlZF9ub2RlLCBlbHNlIHBhc3MgTlVMTC4KKyAq CisgKiBTZXQgdGhlICdiZW5lYXRoX2FueV9nYXRoZXInIG5vZGUgaWYgd2UgYXJlIHVuZGVybmVh dGggYSBHYXRoZXIgb3IKKyAqIEdhdGhlciBNZXJnZSBub2RlIChleGNlcHQgZm9yIGEgc2luZ2xl LWNvcHkgR2F0aGVyIG5vZGUsIGZvciB3aGljaAorICogR0FUSEVSIG9yIEdBVEhFUl9NRVJHRSBh ZHZpY2Ugc2hvdWxkIG5vdCBiZSBlbWl0dGVkKS4KKyAqCisgKiBTZXQgdGhlICd3aXRoaW5fam9p bl9wcm9ibGVtJyBmbGFnIGlmIHdlJ3JlIGluc2lkZSBvZiBhIGpvaW4gcHJvYmxlbSBhbmQKKyAq IG5vdCBvdGhlcndpc2UuCisgKi8KK3BncGFfc2NhbiAqCitwZ3BhX2J1aWxkX3NjYW4ocGdwYV9w bGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsIFBsYW4gKnBsYW4sCisJCQkJRWxpZGVkTm9kZSAq ZWxpZGVkX25vZGUsCisJCQkJYm9vbCBiZW5lYXRoX2FueV9nYXRoZXIsIGJvb2wgd2l0aGluX2pv aW5fcHJvYmxlbSkKK3sKKwlwZ3BhX3NjYW5fc3RyYXRlZ3kgc3RyYXRlZ3kgPSBQR1BBX1NDQU5f T1JESU5BUlk7CisJQml0bWFwc2V0ICAqcmVsaWRzID0gTlVMTDsKKwlpbnQJCQlydGkgPSAtMTsK KwlMaXN0CSAgICpjaGlsZF9hcHBlbmRfcmVsaWRfc2V0cyA9IE5JTDsKKworCWlmIChlbGlkZWRf bm9kZSAhPSBOVUxMKQorCXsKKwkJTm9kZVRhZwkJZWxpZGVkX3R5cGUgPSBlbGlkZWRfbm9kZS0+ ZWxpZGVkX3R5cGU7CisKKwkJLyoKKwkJICogSWYgc2V0cmVmcyBwcm9jZXNzaW5nIGVsaWRlZCBh biBBcHBlbmQgb3IgTWVyZ2VBcHBlbmQgbm9kZSB0aGF0IGhhZAorCQkgKiBvbmx5IG9uZSBzdXJ2 aXZpbmcgY2hpbGQsIGl0IG1pZ2h0IGJlIGEgcGFydGl0aW9ud2lzZSBvcGVyYXRpb24sCisJCSAq IGJ1dCB0aGVuIHRoaXMgaXMgZWl0aGVyIGEgc2V0b3Agb3ZlciBzdWJxdWVyaWVzLCBvciBhIHBh cnRpdGlvbndpc2UKKwkJICogb3BlcmF0aW9uICh3aGljaCBtaWdodCBiZSBhIHNjYW4gb3IgYSBq b2luIGluIHJlYWxpdHksIGJ1dCBoZXJlIHdlCisJCSAqIGRvbid0IGNhcmUgYWJvdXQgdGhlIGRp c3RpbmN0aW9uIGFuZCBjb25zaWRlciBpdCBzaW1wbHkgYSBzY2FuKS4KKwkJICoKKwkJICogQSBz ZXRvcCBvdmVyIHN1YnF1ZXJpZXMsIG9yIGEgdHJpdmlhbCBTdWJRdWVyeVNjYW4gdGhhdCB3YXMg ZWxpZGVkLAorCQkgKiBpcyBhbiAib3JkaW5hcnkiIHNjYW4gaS5lLiBvbmUgZm9yIHdoaWNoIHdl IG5lZWQgdG8gZ2VuZXJhdGUgYWR2aWNlCisJCSAqIGJlY2F1c2UgdGhlIHBsYW5uZXIgaGFzIG5v dCBtYWRlIGFueSBtZWFuaW5nZnVsIGNob2ljZS4KKwkJICovCisJCXJlbGlkcyA9IGVsaWRlZF9u b2RlLT5yZWxpZHM7CisJCWlmICgoZWxpZGVkX3R5cGUgPT0gVF9BcHBlbmQgfHwgZWxpZGVkX3R5 cGUgPT0gVF9NZXJnZUFwcGVuZCkgJiYKKwkJCXVuaXF1ZV9ub25qb2luX3J0ZWtpbmQocmVsaWRz LAorCQkJCQkJCQkgICB3YWxrZXItPnBzdG10LT5ydGFibGUpID09IFJURV9SRUxBVElPTikKKwkJ CXN0cmF0ZWd5ID0gUEdQQV9TQ0FOX1BBUlRJVElPTldJU0U7CisJCWVsc2UKKwkJCXN0cmF0ZWd5 ID0gUEdQQV9TQ0FOX09SRElOQVJZOworCisJCS8qIEpvaW4gUlRJcyBjYW4gYmUgcHJlc2VudCwg YnV0IGFkdmljZSBuZXZlciByZWZlcnMgdG8gdGhlbS4gKi8KKwkJcmVsaWRzID0gcGdwYV9maWx0 ZXJfb3V0X2pvaW5fcmVsaWRzKHJlbGlkcywgd2Fsa2VyLT5wc3RtdC0+cnRhYmxlKTsKKwl9CisJ ZWxzZSBpZiAoKHJ0aSA9IHBncGFfc2NhbnJlbGlkKHBsYW4pKSAhPSAwKQorCXsKKwkJcmVsaWRz ID0gYm1zX21ha2Vfc2luZ2xldG9uKHJ0aSk7CisKKwkJc3dpdGNoIChub2RlVGFnKHBsYW4pKQor CQl7CisJCQljYXNlIFRfU2VxU2NhbjoKKwkJCQlzdHJhdGVneSA9IFBHUEFfU0NBTl9TRVE7CisJ CQkJYnJlYWs7CisJCQljYXNlIFRfQml0bWFwSGVhcFNjYW46CisJCQkJc3RyYXRlZ3kgPSBQR1BB X1NDQU5fQklUTUFQX0hFQVA7CisJCQkJYnJlYWs7CisJCQljYXNlIFRfSW5kZXhTY2FuOgorCQkJ CXN0cmF0ZWd5ID0gUEdQQV9TQ0FOX0lOREVYOworCQkJCWJyZWFrOworCQkJY2FzZSBUX0luZGV4 T25seVNjYW46CisJCQkJc3RyYXRlZ3kgPSBQR1BBX1NDQU5fSU5ERVhfT05MWTsKKwkJCQlicmVh azsKKwkJCWNhc2UgVF9UaWRTY2FuOgorCQkJY2FzZSBUX1RpZFJhbmdlU2NhbjoKKwkJCQlzdHJh dGVneSA9IFBHUEFfU0NBTl9USUQ7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCisJCQkJLyoK KwkJCQkgKiBUaGlzIGNhc2UgaW5jbHVkZXMgYSBGb3JlaWduU2NhbiB0YXJnZXRpbmcgYSBzaW5n bGUKKwkJCQkgKiByZWxhdGlvbjsgbm8gb3RoZXIgc3RyYXRlZ3kgaXMgcG9zc2libGUgaW4gdGhh dCBjYXNlLCBidXQKKwkJCQkgKiBzZWUgYmVsb3csIHdoZXJlIHRoaW5ncyBhcmUgZGlmZmVyZW50 IGluIG11bHRpLXJlbGF0aW9uCisJCQkJICogY2FzZXMuCisJCQkJICovCisJCQkJc3RyYXRlZ3kg PSBQR1BBX1NDQU5fT1JESU5BUlk7CisJCQkJYnJlYWs7CisJCX0KKwl9CisJZWxzZSBpZiAoKHJl bGlkcyA9IHBncGFfcmVsaWRzKHBsYW4pKSAhPSBOVUxMKQorCXsKKwkJc3dpdGNoIChub2RlVGFn KHBsYW4pKQorCQl7CisJCQljYXNlIFRfRm9yZWlnblNjYW46CisKKwkJCQkvKgorCQkJCSAqIElm IG11bHRpcGxlIHJlbGF0aW9ucyBhcmUgYmVpbmcgdGFyZ2V0ZWQgYnkgYSBzaW5nbGUKKwkJCQkg KiBmb3JlaWduIHNjYW4sIHRoZW4gdGhlIGZvcmVpZ24gam9pbiBoYXMgYmVlbiBwdXNoZWQgdG8g dGhlCisJCQkJICogcmVtb3RlIHNpZGUsIGFuZCB3ZSB3YW50IHRoYXQgdG8gYmUgcmVmbGVjdGVk IGluIHRoZQorCQkJCSAqIGdlbmVyYXRlZCBhZHZpY2UuCisJCQkJICovCisJCQkJc3RyYXRlZ3kg PSBQR1BBX1NDQU5fRk9SRUlHTjsKKwkJCQlicmVhazsKKwkJCWNhc2UgVF9BcHBlbmQ6CisKKwkJ CQkvKgorCQkJCSAqIEFwcGVuZCBub2RlcyBjYW4gcmVwcmVzZW50IHBhcnRpdGlvbndpc2Ugc2Nh bnMgb2YgYSBhCisJCQkJICogcmVsYXRpb24sIGJ1dCB3aGVuIHRoZXkgaW1wbGVtZW50IGEgc2V0 IG9wZXJhdGlvbiwgdGhleSBhcmUKKwkJCQkgKiBqdXN0IG9yZGluYXJ5IHNjYW5zLgorCQkJCSAq LworCQkJCWlmICh1bmlxdWVfbm9uam9pbl9ydGVraW5kKHJlbGlkcywgd2Fsa2VyLT5wc3RtdC0+ cnRhYmxlKQorCQkJCQk9PSBSVEVfUkVMQVRJT04pCisJCQkJCXN0cmF0ZWd5ID0gUEdQQV9TQ0FO X1BBUlRJVElPTldJU0U7CisJCQkJZWxzZQorCQkJCQlzdHJhdGVneSA9IFBHUEFfU0NBTl9PUkRJ TkFSWTsKKworCQkJCS8qIEJlIHN1cmUgdG8gYWNjb3VudCBmb3IgcHVsbGVkLXVwIHNjYW5zLiAq LworCQkJCWNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzID0KKwkJCQkJKChBcHBlbmQgKikgcGxhbikt PmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzOworCQkJCWJyZWFrOworCQkJY2FzZSBUX01lcmdlQXBw ZW5kOgorCQkJCS8qIFNvbWUgbG9naWMgaGVyZSBhcyBmb3IgQXBwZW5kLCBhYm92ZS4gKi8KKwkJ CQlpZiAodW5pcXVlX25vbmpvaW5fcnRla2luZChyZWxpZHMsIHdhbGtlci0+cHN0bXQtPnJ0YWJs ZSkKKwkJCQkJPT0gUlRFX1JFTEFUSU9OKQorCQkJCQlzdHJhdGVneSA9IFBHUEFfU0NBTl9QQVJU SVRJT05XSVNFOworCQkJCWVsc2UKKwkJCQkJc3RyYXRlZ3kgPSBQR1BBX1NDQU5fT1JESU5BUlk7 CisKKwkJCQkvKiBCZSBzdXJlIHRvIGFjY291bnQgZm9yIHB1bGxlZC11cCBzY2Fucy4gKi8KKwkJ CQljaGlsZF9hcHBlbmRfcmVsaWRfc2V0cyA9CisJCQkJCSgoTWVyZ2VBcHBlbmQgKikgcGxhbikt PmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlz dHJhdGVneSA9IFBHUEFfU0NBTl9PUkRJTkFSWTsKKwkJCQlicmVhazsKKwkJfQorCisKKwkJLyog Sm9pbiBSVElzIGNhbiBiZSBwcmVzZW50LCBidXQgYWR2aWNlIG5ldmVyIHJlZmVycyB0byB0aGVt LiAqLworCQlyZWxpZHMgPSBwZ3BhX2ZpbHRlcl9vdXRfam9pbl9yZWxpZHMocmVsaWRzLCB3YWxr ZXItPnBzdG10LT5ydGFibGUpOworCX0KKworCS8qCisJICogSWYgdGhpcyBpcyBhbiBBcHBlbmQg b3IgTWVyZ2VBcHBlbmQgbm9kZSBpbnRvIHdoaWNoIHN1Ym9yZGluYXRlIEFwcGVuZAorCSAqIG9y IE1lcmdlQXBwZW5kIHBhdGhzIHdlcmUgbWVyZ2VkLCBlYWNoIG9mIHRob3NlIG1lcmdlZCBwYXRo cyBpcworCSAqIGVmZmVjdGl2ZWx5IGFub3RoZXIgc2NhbiBmb3Igd2hpY2ggd2UgbmVlZCB0byBh Y2NvdW50LgorCSAqLworCWZvcmVhY2hfbm9kZShCaXRtYXBzZXQsIGNoaWxkX3JlbGlkcywgY2hp bGRfYXBwZW5kX3JlbGlkX3NldHMpCisJeworCQlCaXRtYXBzZXQgICpjaGlsZF9ub25qb2luX3Jl bGlkczsKKworCQljaGlsZF9ub25qb2luX3JlbGlkcyA9CisJCQlwZ3BhX2ZpbHRlcl9vdXRfam9p bl9yZWxpZHMoY2hpbGRfcmVsaWRzLAorCQkJCQkJCQkJCXdhbGtlci0+cHN0bXQtPnJ0YWJsZSk7 CisJCSh2b2lkKSBwZ3BhX21ha2Vfc2Nhbih3YWxrZXIsIHBsYW4sIHN0cmF0ZWd5LAorCQkJCQkJ CSAgY2hpbGRfbm9uam9pbl9yZWxpZHMpOworCX0KKworCS8qCisJICogSWYgdGhpcyBwbGFuIG5v ZGUgaGFzIG5vIGFzc29jaWF0ZWQgUlRJcywgaXQncyBub3QgYSBzY2FuLiBXaGVuIHRoZQorCSAq ICd3aXRoaW5fam9pbl9wcm9ibGVtJyBmbGFnIGlzIHNldCwgdGhhdCdzIHVuZXhwZWN0ZWQsIHNv IHRocm93IGFuCisJICogZXJyb3IsIGVsc2UgcmV0dXJuIHF1aWV0bHkuCisJICovCisJaWYgKHJl bGlkcyA9PSBOVUxMKQorCXsKKwkJaWYgKHdpdGhpbl9qb2luX3Byb2JsZW0pCisJCQllbG9nKEVS Uk9SLCAicGxhbiBub2RlIGhhcyBubyBSVElzOiAlZCIsIChpbnQpIG5vZGVUYWcocGxhbikpOwor CQlyZXR1cm4gTlVMTDsKKwl9CisKKwkvKgorCSAqIEFkZCB0aGUgYXBwcm9wcmlhdGUgc2V0IG9m IFJUSXMgdG8gd2Fsa2VyLT5ub19nYXRoZXJfc2NhbnMuCisJICoKKwkgKiBBZGQgbm90aGluZyBp ZiB3ZSdyZSBiZW5lYXRoIGEgR2F0aGVyIG9yIEdhdGhlciBNZXJnZSBub2RlLCBzaW5jZQorCSAq IE5PX0dBVEhFUiBhZHZpY2UgaXMgY2xlYXJseSBpbmFwcHJvcHJpYXRlIGluIHRoYXQgc2l0dWF0 aW9uLgorCSAqCisJICogQWRkIG5vdGhpbmcgaWYgdGhpcyBpcyBhbiBBcHBlbmQgb3IgTWVyZ2VB cHBlbmQgbm9kZSwgd2UnbGwgZW1pdAorCSAqIE5PX0dBVEhFUigpIGZvciB0aGUgdW5kZXJseWlu ZyBzY2FuLCB3aGljaCBpcyBnb29kIGVub3VnaC4KKwkgKgorCSAqIEFkZCBub3RoaW5nIGlmIHRo aXMgaXMgYW4gZWxpZGVkIG5vZGUuICBJZiBpdCdzIGFuIGVsaWRlZCBBcHBlbmQgb3IKKwkgKiBN ZXJnZUFwcGVuZCBub2RlLCB0aGUgc2FtZSBhcmd1bWVudCBhcHBsaWVzIGFzIGZvciBhIG5vbi1l bGlkZWQgQXBwZW5kCisJICogb3IgTWVyZ2VBcHBlbmQuICBBbiBlbGlkZWQgU3VicXVlcnlTY2Fu IGlzIGxpa2VseSB0byBoYXZlIHVuZGVybHlpbmcKKwkgKiB0YWJsZXMgYXMgd2VsbCwgYnV0IGV2 ZW4gaWYgaXQgZG9lc24ndCwgZW1pdHRpbmcgTk9fR0FUSEVSKCkgZm9yIGEKKwkgKiBub24tUlRF X1JFTEFUSU9OIHdvbid0IHdvcmsgYW55d2F5LCBzaW5jZSBnZXRfcmVsYXRpb25faW5mbygpIGlz bid0CisJICogY2FsbGVkIGluIHN1Y2ggY2FzZXMuCisJICoKKwkgKiBJbiBmYWN0LCB3ZSBuZWVk IHRvIGZpbHRlciBvdXQgYW55IG5vbi1SVEVfUkVMQVRJT04gUlRJcyBmb3IgZXhhY3RseQorCSAq IHRoaXMgcmVhc29uLCBhbmQgYXZvaWQgYWRkaW5nIHRoZW0gdG8gdGhlIG5vX2dhdGhlcl9zY2Fu cyBzZXQuCisJICovCisJaWYgKCFiZW5lYXRoX2FueV9nYXRoZXIgJiYgZWxpZGVkX25vZGUgPT0g TlVMTCAmJgorCQkhSXNBKHBsYW4sIEFwcGVuZCkgJiYgIUlzQShwbGFuLCBNZXJnZUFwcGVuZCkp CisJeworCQlpbnQJCQlub19nYXRoZXJfcnRpID0gLTE7CisKKwkJd2hpbGUgKChub19nYXRoZXJf cnRpID0gYm1zX25leHRfbWVtYmVyKHJlbGlkcywgbm9fZ2F0aGVyX3J0aSkpID49IDApCisJCXsK KwkJCVJhbmdlVGJsRW50cnkgKnJ0ZTsKKworCQkJcnRlID0gcnRfZmV0Y2gobm9fZ2F0aGVyX3J0 aSwgd2Fsa2VyLT5wc3RtdC0+cnRhYmxlKTsKKwkJCWlmIChydGUtPnJ0ZWtpbmQgPT0gUlRFX1JF TEFUSU9OKQorCQkJCXdhbGtlci0+bm9fZ2F0aGVyX3NjYW5zID0KKwkJCQkJYm1zX2FkZF9tZW1i ZXIod2Fsa2VyLT5ub19nYXRoZXJfc2NhbnMsIG5vX2dhdGhlcl9ydGkpOworCQl9CisJfQorCisJ LyogQ2FsbGVyIHRlbGxzIHVzIHdoZXRoZXIgTk9fR0FUSEVSKCkgYWR2aWNlIGZvciB0aGlzIHNj YW4gaXMgbmVlZGVkLiAqLworCXJldHVybiBwZ3BhX21ha2Vfc2Nhbih3YWxrZXIsIHBsYW4sIHN0 cmF0ZWd5LCByZWxpZHMpOworfQorCisvKgorICogQ3JlYXRlIGEgc2luZ2xlIHBncGFfc2NhbiBv YmplY3QgYW5kIHVwZGF0ZSB0aGUgcGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0LgorICovCitzdGF0 aWMgcGdwYV9zY2FuICoKK3BncGFfbWFrZV9zY2FuKHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAq d2Fsa2VyLCBQbGFuICpwbGFuLAorCQkJICAgcGdwYV9zY2FuX3N0cmF0ZWd5IHN0cmF0ZWd5LCBC aXRtYXBzZXQgKnJlbGlkcykKK3sKKwlwZ3BhX3NjYW4gICpzY2FuOworCisJLyogQ3JlYXRlIHRo ZSBzY2FuIG9iamVjdC4gKi8KKwlzY2FuID0gcGFsbG9jKHNpemVvZihwZ3BhX3NjYW4pKTsKKwlz Y2FuLT5wbGFuID0gcGxhbjsKKwlzY2FuLT5zdHJhdGVneSA9IHN0cmF0ZWd5OworCXNjYW4tPnJl bGlkcyA9IHJlbGlkczsKKworCS8qIEFkZCBpdCB0byB0aGUgYXBwcm9wcmlhdGUgbGlzdC4gKi8K Kwl3YWxrZXItPnNjYW5zW3NjYW4tPnN0cmF0ZWd5XSA9IGxhcHBlbmQod2Fsa2VyLT5zY2Fuc1tz Y2FuLT5zdHJhdGVneV0sCisJCQkJCQkJCQkJCXNjYW4pOworCisJcmV0dXJuIHNjYW47Cit9CisK Ky8qCisgKiBEZXRlcm1pbmUgdGhlIHVuaXF1ZSBydGVraW5kIG9mIGEgc2V0IG9mIHJlbGlkcy4K KyAqLworc3RhdGljIFJURUtpbmQKK3VuaXF1ZV9ub25qb2luX3J0ZWtpbmQoQml0bWFwc2V0ICpy ZWxpZHMsIExpc3QgKnJ0YWJsZSkKK3sKKwlpbnQJCQlydGkgPSAtMTsKKwlib29sCQlmaXJzdCA9 IHRydWU7CisJUlRFS2luZAkJcnRla2luZDsKKworCUFzc2VydChyZWxpZHMgIT0gTlVMTCk7CisK Kwl3aGlsZSAoKHJ0aSA9IGJtc19uZXh0X21lbWJlcihyZWxpZHMsIHJ0aSkpID49IDApCisJewor CQlSYW5nZVRibEVudHJ5ICpydGUgPSBydF9mZXRjaChydGksIHJ0YWJsZSk7CisKKwkJaWYgKHJ0 ZS0+cnRla2luZCA9PSBSVEVfSk9JTikKKwkJCWNvbnRpbnVlOworCisJCWlmIChmaXJzdCkKKwkJ eworCQkJcnRla2luZCA9IHJ0ZS0+cnRla2luZDsKKwkJCWZpcnN0ID0gZmFsc2U7CisJCX0KKwkJ ZWxzZSBpZiAocnRla2luZCAhPSBydGUtPnJ0ZWtpbmQpCisJCQllbG9nKEVSUk9SLCAicnRla2lu ZCBtaXNtYXRjaDogJWQgdnMuICVkIiwKKwkJCQkgcnRla2luZCwgcnRlLT5ydGVraW5kKTsKKwl9 CisKKwlpZiAoZmlyc3QpCisJCWVsb2coRVJST1IsICJubyBub24tUlRFX0pPSU4gUlRFcyBmb3Vu ZCIpOworCisJcmV0dXJuIHJ0ZWtpbmQ7Cit9CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5f YWR2aWNlL3BncGFfc2Nhbi5oIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3NjYW4uaApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uM2JiODcyNmZmMWUKLS0tIC9k ZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfc2Nhbi5oCkBAIC0wLDAg KzEsODUgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHBncGFfc2Nhbi5oCisgKgkgIGFu YWx5c2lzIG9mIHNjYW5zIGluIFBsYW4gdHJlZXMKKyAqCisgKiBGb3IgcHVycG9zZXMgb2YgdGhp cyBtb2R1bGUsIGEgInNjYW4iIGluY2x1ZGVzICgxKSBzaW5nbGUgcGxhbiBub2RlcyB0aGF0Cisg KiBzY2FuIG11bHRpcGxlIFJUSXMsIHN1Y2ggYXMgYSBkZWdlbmVyYXRlIFJlc3VsdCBub2RlIHRo YXQgcmVwbGFjZXMgd2hhdAorICogd291bGQgb3RoZXJ3aXNlIGhhdmUgYmVlbiBhIGpvaW4sIGFu ZCAoMikgQXBwZW5kIGFuZCBNZXJnZUFwcGVuZCBub2RlcworICogaW1wbGVtZW50aW5nIGEgcGFy dGl0aW9ud2lzZSBzY2FuIG9yIGEgcGFydGl0aW9ud2lzZSBqb2luLiBTYWlkCisgKiBkaWZmZXJl bnRseSwgc2NhbnMgYXJlIHRoZSBsZWF2ZXMgb2YgdGhlIGpvaW4gdHJlZSBmb3IgYSBzaW5nbGUg am9pbgorICogcHJvYmxlbS4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyNSwgUG9zdGdy ZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKgkgIGNvbnRyaWIvcGdfcGxhbl9h ZHZpY2UvcGdwYV9zY2FuLmgKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lmbmRlZiBQ R1BBX1NDQU5fSAorI2RlZmluZSBQR1BBX1NDQU5fSAorCisjaW5jbHVkZSAibm9kZXMvcGxhbm5v ZGVzLmgiCisKK3R5cGVkZWYgc3RydWN0IHBncGFfcGxhbl93YWxrZXJfY29udGV4dCBwZ3BhX3Bs YW5fd2Fsa2VyX2NvbnRleHQ7CisKKy8qCisgKiBTY2FuIHN0cmF0ZWdpZXMuCisgKgorICogUEdQ QV9TQ0FOX09SRElOQVJZIGlzIGFueSBzY2FuIHN0cmF0ZWd5IHRoYXQgaXNuJ3QgaW50ZXJlc3Rp bmcgdG8gdXMKKyAqIGJlY2F1c2UgdGhlcmUgaXMgbm8gbWVhbmluZ2Z1bCBwbGFubmVyIGRlY2lz aW9uIGludm9sdmVkLiBGb3IgZXhhbXBsZSwKKyAqIHRoZSBvbmx5IHdheSB0byBzY2FuIGEgc3Vi cXVlcnkgaXMgYSBTdWJxdWVyeVNjYW4sIGFuZCB0aGUgb25seSB3YXkgdG8KKyAqIHNjYW4gYSBW QUxVRVMgY29uc3RydWN0IGlzIGEgVmFsdWVzU2Nhbi4gV2UgbmVlZCBub3QgY2FyZSBleGFjdGx5 IHdoaWNoCisgKiB0eXBlIG9mIHBsYW5uZXIgbm9kZSB3YXMgdXNlZCBpbiBzdWNoIGNhc2VzLCBi ZWNhdXNlIHRoZSBzYW1lIHRoaW5nIHdpbGwKKyAqIGhhcHBlbiB3aGVuIHJlcGxhbm5pbmcuCisg KgorICogUEdQQV9TQ0FOX09SRElOQVJZIGFsc28gaW5jbHVkZXMgUmVzdWx0IG5vZGVzIHRoYXQg Y29ycmVzcG9uZCB0byBzY2FucworICogb3IgZXZlbiBqb2lucyB0aGF0IGFyZSBwcm92ZWQgZW1w dHkuIFdlIGRvbid0IGtub3cgd2hldGhlciBvciBub3QgdGhlIHNjYW4KKyAqIG9yIGpvaW4gd2ls bCBzdGlsbCBiZSBwcm92YWJseSBlbXB0eSBhdCByZXBsYW5uaW5nIHRpbWUsIGJ1dCBpZiBpdCBp cywKKyAqIHRoZW4gbm8gc2Nhbi10eXBlIGFkdmljZSBpcyBuZWVkZWQsIGFuZCBpZiBpdCdzIG5v dCwgd2UgY2FuJ3QgcmVjb21tZW5kCisgKiBhIHNjYW4gdHlwZSBiYXNlZCBvbiB0aGUgY3VycmVu dCBwbGFuLgorICoKKyAqIFBHUEFfU0NBTl9QQVJUSVRJT05XSVNFIGFsc28gbHVtcHMgdG9nZXRo ZXIgc2NhbnMgYW5kIGpvaW5zOiB0aGlzIGNhbgorICogYmUgZWl0aGVyIGEgcGFydGl0aW9ud2lz ZSBzY2FuIG9mIGEgcGFydGl0aW9uZWQgdGFibGUgb3IgYSBwYXJ0aXRpb253aXNlCisgKiBqb2lu IGJldHdlZW4gc2V2ZXJhbCBwYXJ0aXRpb25lZCB0YWJsZXMuIE5vdGUgdGhhdCBhbGwgZGVjaXNp b25zIGFib3V0CisgKiB3aGV0aGVyIG9yIG5vdCB0byB1c2UgcGFydGl0aW9ud2lzZSBqb2luIGFy ZSBtZWFuaW5nZnVsOiBubyBtYXR0ZXIgd2hhdAorICogd2UgZGVjaWRlZCB0aGlzIHRpbWUsIHdl IGNvdWxkIGRvIG1vcmUgb3IgZmV3ZXIgdGhpbmdzIHBhcnRpdGlvbndpc2UgdGhlCisgKiBuZXh0 IHRpbWUuCisgKgorICogUEdQQV9TQ0FOX0ZPUkVJR04gaXMgb25seSB1c2VkIHdoZW4gdGhlcmUn cyBtb3JlIHRoYW4gb25lIHJlbGF0aW9uIGludm9sdmVkOworICogYSBzaW5nbGUtdGFibGUgZm9y ZWlnbiBzY2FuIGlzIGNsYXNzaWZpZWQgYXMgb3JkaW5hcnksIHNpbmNlIHRoZXJlIGlzIG5vCisg KiBkZWNpc2lvbiB0byBtYWtlIGluIHRoYXQgY2FzZS4KKyAqCisgKiBPdGhlciBzY2FuIHN0cmF0 ZWdpZXMgbWFwIG9uZS10by1vbmUgdG8gcGxhbiBub2Rlcy4KKyAqLwordHlwZWRlZiBlbnVtCit7 CisJUEdQQV9TQ0FOX09SRElOQVJZID0gMCwKKwlQR1BBX1NDQU5fU0VRLAorCVBHUEFfU0NBTl9C SVRNQVBfSEVBUCwKKwlQR1BBX1NDQU5fRk9SRUlHTiwKKwlQR1BBX1NDQU5fSU5ERVgsCisJUEdQ QV9TQ0FOX0lOREVYX09OTFksCisJUEdQQV9TQ0FOX1BBUlRJVElPTldJU0UsCisJUEdQQV9TQ0FO X1RJRAorCS8qIHVwZGF0ZSBOVU1fUEdQQV9TQ0FOX1NUUkFURUdZIGlmIHlvdSBhZGQgYW55dGhp bmcgaGVyZSAqLworfSBwZ3BhX3NjYW5fc3RyYXRlZ3k7CisKKyNkZWZpbmUgTlVNX1BHUEFfU0NB Tl9TVFJBVEVHWQkoKGludCkgUEdQQV9TQ0FOX1RJRCArIDEpCisKKy8qCisgKiBBbGwgb2YgdGhl IGRldGFpbHMgd2UgbmVlZCByZWdhcmRpbmcgYSBzY2FuLgorICovCit0eXBlZGVmIHN0cnVjdCBw Z3BhX3NjYW4KK3sKKwlQbGFuCSAgICpwbGFuOworCXBncGFfc2Nhbl9zdHJhdGVneSBzdHJhdGVn eTsKKwlCaXRtYXBzZXQgICpyZWxpZHM7Cit9IHBncGFfc2NhbjsKKworZXh0ZXJuIHBncGFfc2Nh biAqcGdwYV9idWlsZF9zY2FuKHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLCBQbGFu ICpwbGFuLAorCQkJCQkJCQkgIEVsaWRlZE5vZGUgKmVsaWRlZF9ub2RlLAorCQkJCQkJCQkgIGJv b2wgYmVuZWF0aF9hbnlfZ2F0aGVyLAorCQkJCQkJCQkgIGJvb2wgd2l0aGluX2pvaW5fcHJvYmxl bSk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3Nj YW5uZXIubCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9zY2FubmVyLmwKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmE4ODc3MzVmMzE0Ci0tLSAvZGV2L251bGwK KysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3NjYW5uZXIubApAQCAtMCwwICsxLDI5 NyBAQAorJXRvcHsKKy8qCisgKiBTY2FubmVyIGZvciBwbGFuIGFkdmljZQorICoKKyAqIENvcHly aWdodCAoYykgMjAwMC0yMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAor ICoKKyAqIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9zY2FubmVyLmwKKyAqLworI2luY2x1 ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJjb21tb24vc3RyaW5nLmgiCisjaW5jbHVkZSAi bm9kZXMvbWlzY25vZGVzLmgiCisjaW5jbHVkZSAicGFyc2VyL3NjYW5zdXAuaCIKKworI2luY2x1 ZGUgInBncGFfYXN0LmgiCisjaW5jbHVkZSAicGdwYV9wYXJzZXIuaCIKKworLyoKKyAqIEV4dHJh IGRhdGEgdGhhdCB3ZSBwYXNzIGFyb3VuZCB3aGVuIGR1cmluZyBzY2FubmluZy4KKyAqCisgKiAn bGl0YnVmJyBpcyB1c2VkIHRvIGltcGxlbWVudCB0aGUgPHhkPiBleGNsdXNpdmUgc3RhdGUsIHdo aWNoIGhhbmRsZXMKKyAqIGRvdWJsZS1xdW90ZWQgaWRlbnRpZmllcnMuCisgKi8KK3R5cGVkZWYg c3RydWN0IHBncGFfeXlfZXh0cmFfdHlwZQoreworCVN0cmluZ0luZm9EYXRhCWxpdGJ1ZjsKK30g cGdwYV95eV9leHRyYV90eXBlOworCit9CisKKyV7CisvKiBMQ09WX0VYQ0xfU1RBUlQgKi8KKwor I2RlZmluZSBZWV9ERUNMIFwKKwlleHRlcm4gaW50IHBncGFfeXlsZXgodW5pb24gWVlTVFlQRSAq eXlsdmFsX3BhcmFtLCBMaXN0ICoqcmVzdWx0LCBcCisJCQkJCQkgIGNoYXIgKipwYXJzZV9lcnJv cl9tc2dfcCwgeXlzY2FuX3QgeXlzY2FubmVyKQorCisvKiBObyByZWFzb24gdG8gY29uc3RyYWlu IGFtb3VudCBvZiBkYXRhIHNsdXJwZWQgKi8KKyNkZWZpbmUgWVlfUkVBRF9CVUZfU0laRSAxNjc3 NzIxNgorCisvKiBBdm9pZCBleGl0KCkgb24gZmF0YWwgc2Nhbm5lciBlcnJvcnMgKGEgYml0IHVn bHkgLS0gc2VlIHl5X2ZhdGFsX2Vycm9yKSAqLworI3VuZGVmIGZwcmludGYKKyNkZWZpbmUgZnBy aW50ZihmaWxlLCBmbXQsIG1zZykgIGZwcmludGZfdG9fZXJlcG9ydChmbXQsIG1zZykKKworc3Rh dGljIHZvaWQKK2ZwcmludGZfdG9fZXJlcG9ydChjb25zdCBjaGFyICpmbXQsIGNvbnN0IGNoYXIg Km1zZykKK3sKKwllcmVwb3J0KEVSUk9SLCAoZXJybXNnX2ludGVybmFsKCIlcyIsIG1zZykpKTsK K30KKyV9CisKKyVvcHRpb24gcmVlbnRyYW50Cislb3B0aW9uIGJpc29uLWJyaWRnZQorJW9wdGlv biA4Yml0Cislb3B0aW9uIG5ldmVyLWludGVyYWN0aXZlCislb3B0aW9uIG5vZGVmYXVsdAorJW9w dGlvbiBub2lucHV0Cislb3B0aW9uIG5vdW5wdXQKKyVvcHRpb24gbm95eXdyYXAKKyVvcHRpb24g bm95eWFsbG9jCislb3B0aW9uIG5veXlyZWFsbG9jCislb3B0aW9uIG5veXlmcmVlCislb3B0aW9u IHdhcm4KKyVvcHRpb24gcHJlZml4PSJwZ3BhX3l5IgorJW9wdGlvbiBleHRyYS10eXBlPSJwZ3Bh X3l5X2V4dHJhX3R5cGUgKiIKKworLyoKKyAqIFdoYXQgZm9sbG93cyBpcyBhIHNldmVyZWx5IHN0 cmlwcGVkLWRvd24gdmVyc2lvbiBvZiB0aGUgY29yZSBzY2FubmVyLiBXZQorICogb25seSBjYXJl IGFib3V0IHJlY29nbml6aW5nIGlkZW50aWZpZXJzIHdpdGggb3Igd2l0aG91dCBpZGVudGlmaWVy IHF1b3RpbmcKKyAqIChpLmUuIGRvdWJsZS1xdW90aW5nKSwgZGVjaW1hbCBpbnRlZ2VycywgYW5k IGEgc21hbGwgaGFuZGZ1bCBvZiBvdGhlcgorICogdGhpbmdzLiBLZWVwIHRoZXNlIHJ1bGVzIGlu IHN5bmMgd2l0aCBzcmMvYmFja2VuZC9wYXJzZXIvc2Nhbi5sLiBBcyBpbiB0aGF0CisgKiBmaWxl LCB3ZSB1c2UgYW4gZXhjbHVzaXZlIHN0YXRlIGNhbGxlZCAneGMnIGZvciBDLXN0eWxlIGNvbW1l bnRzLCBhbmQgYW4KKyAqIGV4Y2x1c2l2ZSBzdGF0ZSBjYWxsZWQgJ3hkJyBmb3IgZG91YmxlLXF1 b3RlZCBpZGVudGlmaWVycy4KKyAqLworJXggeGMKKyV4IHhkCisKK2lkZW50X3N0YXJ0CQlbQS1a YS16XDIwMC1cMzc3X10KK2lkZW50X2NvbnQJCVtBLVphLXpcMjAwLVwzNzdfMC05XCRdCisKK2lk ZW50aWZpZXIJCXtpZGVudF9zdGFydH17aWRlbnRfY29udH0qCisKK2RlY2RpZ2l0CQlbMC05XQor ZGVjaW50ZWdlcgkJe2RlY2RpZ2l0fShfP3tkZWNkaWdpdH0pKgorCitzcGFjZQkJCVsgXHRcblxy XGZcdl0KK3doaXRlc3BhY2UJCXtzcGFjZX0rCisKK2RxdW90ZQkJCVwiCit4ZHN0YXJ0CQkJe2Rx dW90ZX0KK3hkc3RvcAkJCXtkcXVvdGV9Cit4ZGRvdWJsZQkJe2RxdW90ZX17ZHF1b3RlfQoreGRp bnNpZGUJCVteIl0rCisKK3hjc3RhcnQJCQlcL1wqCit4Y3N0b3AJCQlcKitcLworeGNpbnNpZGUJ CVteKi9dKworCislJQorCit7d2hpdGVzcGFjZX0JeyAvKiBpZ25vcmUgKi8gfQorCit7aWRlbnRp Zmllcn0JeworCQkJCQljaGFyICAgKnN0cjsKKwkJCQkJYm9vbAlmYWlsOworCQkJCQlwZ3BhX2Fk dmljZV90YWdfdHlwZQl0YWc7CisKKwkJCQkJLyoKKwkJCQkJICogVW5saWtlIHRoZSBjb3JlIHNj YW5uZXIsIHdlIGRvbid0IHRydW5jYXRlIGlkZW50aWZpZXJzCisJCQkJCSAqIGhlcmUuIFRoZXJl IGlzIG5vIG9idmlvdXMgcmVhc29uIHRvIGRvIHNvLgorCQkJCQkgKi8KKwkJCQkJc3RyID0gZG93 bmNhc2VfaWRlbnRpZmllcih5eXRleHQsIHl5bGVuZywgZmFsc2UsIGZhbHNlKTsKKwkJCQkJeXls dmFsLT5zdHIgPSBzdHI7CisKKwkJCQkJLyoKKwkJCQkJICogSWYgaXQncyBub3QgYSB0YWcsIGp1 c3QgcmV0dXJuIFRPS19JREVOVDsgZWxzZSwgcmV0dXJuCisJCQkJCSAqIGEgdG9rZW4gdHlwZSBi YXNlZCBvbiBob3cgZnVydGhlciBwYXJzaW5nIHNob3VsZAorCQkJCQkgKiBwcm9jZWVkLgorCQkJ CQkgKi8KKwkJCQkJdGFnID0gcGdwYV9wYXJzZV9hZHZpY2VfdGFnKHN0ciwgJmZhaWwpOworCQkJ CQlpZiAoZmFpbCkKKwkJCQkJCXJldHVybiBUT0tfSURFTlQ7CisJCQkJCWVsc2UgaWYgKHRhZyA9 PSBQR1BBX1RBR19KT0lOX09SREVSKQorCQkJCQkJcmV0dXJuIFRPS19UQUdfSk9JTl9PUkRFUjsK KwkJCQkJZWxzZSBpZiAodGFnID09IFBHUEFfVEFHX0lOREVYX1NDQU4gfHwKKwkJCQkJCQkgdGFn ID09IFBHUEFfVEFHX0lOREVYX09OTFlfU0NBTikKKwkJCQkJCXJldHVybiBUT0tfVEFHX0lOREVY OworCQkJCQllbHNlIGlmICh0YWcgPT0gUEdQQV9UQUdfU0VRX1NDQU4gfHwKKwkJCQkJCQkgdGFn ID09IFBHUEFfVEFHX1RJRF9TQ0FOIHx8CisJCQkJCQkJIHRhZyA9PSBQR1BBX1RBR19CSVRNQVBf SEVBUF9TQ0FOIHx8CisJCQkJCQkJIHRhZyA9PSBQR1BBX1RBR19OT19HQVRIRVIpCisJCQkJCQly ZXR1cm4gVE9LX1RBR19TSU1QTEU7CisJCQkJCWVsc2UKKwkJCQkJCXJldHVybiBUT0tfVEFHX0dF TkVSSUM7CisJCQkJfQorCit7ZGVjaW50ZWdlcn0JeworCQkJCQljaGFyICAgKmVuZHB0cjsKKwor CQkJCQllcnJubyA9IDA7CisJCQkJCXl5bHZhbC0+aW50ZWdlciA9IHN0cnRvaW50KHl5dGV4dCwg JmVuZHB0ciwgMTApOworCQkJCQlpZiAoKmVuZHB0ciAhPSAnXDAnIHx8IGVycm5vID09IEVSQU5H RSkKKwkJCQkJCXBncGFfeXllcnJvcihyZXN1bHQsIHBhcnNlX2Vycm9yX21zZ19wLCB5eXNjYW5u ZXIsCisJCQkJCQkJCQkgImludGVnZXIgb3V0IG9mIHJhbmdlIik7CisJCQkJCXJldHVybiBUT0tf SU5URUdFUjsKKwkJCQl9CisKK3t4Y3N0YXJ0fQkJeworCQkJCQlCRUdJTih4Yyk7CisJCQkJfQor Cit7eGRzdGFydH0JCXsKKwkJCQkJQkVHSU4oeGQpOworCQkJCQlyZXNldFN0cmluZ0luZm8oJnl5 ZXh0cmEtPmxpdGJ1Zik7CisJCQkJfQorCisuCQkJCXsgcmV0dXJuIHl5dGV4dFswXTsgfQorCis8 eGM+e3hjc3RvcH0JeworCQkJCQlCRUdJTihJTklUSUFMKTsKKwkJCQl9CisKKzx4Yz57eGNpbnNp ZGV9CXsKKwkJCQkJLyogZGlzY2FyZCBtdWx0aXBsZSBjaGFyYWN0ZXJzIHdpdGhvdXQgc2xhc2gg b3IgYXN0ZXJpc2sgKi8KKwkJCQl9CisKKzx4Yz4uCQkJeworCQkJCQkvKgorCQkJCQkgKiBEaXNj YXJkIGFueSBzaW5nbGUgY2hhcmFjdGVyLiBmbGV4IHByZWZlcnMgbG9uZ2VyCisJCQkJCSAqIG1h dGNoZXMsIHNvIHRoaXMgcnVsZSB3aWxsIG5ldmVyIGJlIHBpY2tlZCB3aGVuIHdlIGNvdWxkCisJ CQkJCSAqIGhhdmUgbWF0Y2hlZCB4Y3N0b3AuCisJCQkJCSAqCisJCQkJCSAqIE5COiBBdCBwcmVz ZW50LCB3ZSBkb24ndCBib3RoZXIgdG8gc3VwcG9ydCBuZXN0ZWQKKwkJCQkJICogQy1zdHlsZSBj b21tZW50cyBoZXJlLCBidXQgdGhpcyBsb2dpYyBjb3VsZCBiZSBleHRlbmRlZAorCQkJCQkgKiBp ZiB0aGF0IHJlc3RyaWN0aW9uIHBvc2VzIGEgcHJvYmxlbS4KKwkJCQkJICovCisJCQkJfQorCis8 eGM+PDxFT0Y+PgkJeworCQkJCQlCRUdJTihJTklUSUFMKTsKKwkJCQkJcGdwYV95eWVycm9yKHJl c3VsdCwgcGFyc2VfZXJyb3JfbXNnX3AsIHl5c2Nhbm5lciwKKwkJCQkJCQkJICJ1bnRlcm1pbmF0 ZWQgY29tbWVudCIpOworCQkJCX0KKworPHhkPnt4ZHN0b3B9CXsKKwkJCQkJQkVHSU4oSU5JVElB TCk7CisJCQkJCWlmICh5eWV4dHJhLT5saXRidWYubGVuID09IDApCisJCQkJCQlwZ3BhX3l5ZXJy b3IocmVzdWx0LCBwYXJzZV9lcnJvcl9tc2dfcCwgeXlzY2FubmVyLAorCQkJCQkJCQkJICJ6ZXJv LWxlbmd0aCBkZWxpbWl0ZWQgaWRlbnRpZmllciIpOworCQkJCQl5eWx2YWwtPnN0ciA9IHBzdHJk dXAoeXlleHRyYS0+bGl0YnVmLmRhdGEpOworCQkJCQlyZXR1cm4gVE9LX0lERU5UOworCQkJCX0K KworPHhkPnt4ZGRvdWJsZX0JeworCQkJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcigmeXlleHRyYS0+ bGl0YnVmLCAnIicpOworCQkJCX0KKworPHhkPnt4ZGluc2lkZX0JeworCQkJCQlhcHBlbmRCaW5h cnlTdHJpbmdJbmZvKCZ5eWV4dHJhLT5saXRidWYsIHl5dGV4dCwgeXlsZW5nKTsKKwkJCQl9CisK Kzx4ZD48PEVPRj4+CQl7CisJCQkJCUJFR0lOKElOSVRJQUwpOworCQkJCQlwZ3BhX3l5ZXJyb3Io cmVzdWx0LCBwYXJzZV9lcnJvcl9tc2dfcCwgeXlzY2FubmVyLAorCQkJCQkJCQkgInVudGVybWlu YXRlZCBxdW90ZWQgaWRlbnRpZmllciIpOworCQkJCX0KKworJSUKKworLyogTENPVl9FWENMX1NU T1AgKi8KKworLyoKKyAqIEhhbmRsZXIgZm9yIGVycm9ycyB3aGlsZSBzY2FubmluZyBvciBwYXJz aW5nIGFkdmljZS4KKyAqCisgKiBiaXNvbiBwYXNzZXMgdGhlIGVycm9yIG1lc3NhZ2UgdG8gdXMg dmlhICdtZXNzYWdlJywgYW5kIHRoZSBjb250ZXh0IGlzCisgKiBhdmFpbGFibGUgdmlhIHRoZSAn eXl0ZXh0JyBtYWNyby4gV2UgYXNzZW1ibGUgdGhvc2UgdmFsdWVzIGludG8gYSBmaW5hbAorICog ZXJyb3IgdGV4dCBhbmQgdGhlbiBhcnJhbmdlIHRvIHBhc3MgaXQgYmFjayB0byB0aGUgY2FsbGVy IG9mIHBncGFfeXlwYXJzZSgpCisgKiBieSBzdG9yaW5nIGl0IGludG8gKnBhcnNlX2Vycm9yX21z Z19wLgorICovCit2b2lkCitwZ3BhX3l5ZXJyb3IoTGlzdCAqKnJlc3VsdCwgY2hhciAqKnBhcnNl X2Vycm9yX21zZ19wLCB5eXNjYW5fdCB5eXNjYW5uZXIsCisJCQkgY29uc3QgY2hhciAqbWVzc2Fn ZSkKK3sKKwlzdHJ1Y3QgeXlndXRzX3QgKnl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QgKikgeXlzY2Fu bmVyOwkvKiBuZWVkZWQgZm9yIHl5dGV4dAorCQkJCQkJCQkJCQkJCQkJICogbWFjcm8gKi8KKwor CisJLyogcmVwb3J0IG9ubHkgdGhlIGZpcnN0IGVycm9yIGluIGEgcGFyc2Ugb3BlcmF0aW9uICov CisJaWYgKCpwYXJzZV9lcnJvcl9tc2dfcCkKKwkJcmV0dXJuOworCisJaWYgKHl5dGV4dFswXSkK KwkJKnBhcnNlX2Vycm9yX21zZ19wID0gcHNwcmludGYoIiVzIGF0IG9yIG5lYXIgXCIlc1wiIiwg bWVzc2FnZSwgeXl0ZXh0KTsKKwllbHNlCisJCSpwYXJzZV9lcnJvcl9tc2dfcCA9IHBzcHJpbnRm KCIlcyBhdCBlbmQgb2YgaW5wdXQiLCBtZXNzYWdlKTsKK30KKworLyoKKyAqIEluaXRpYWxpemUg dGhlIGFkdmljZSBzY2FubmVyLgorICoKKyAqIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCBiZWZvcmUg cGFyc2luZyBiZWdpbnMuCisgKi8KK3ZvaWQKK3BncGFfc2Nhbm5lcl9pbml0KGNvbnN0IGNoYXIg KnN0ciwgeXlzY2FuX3QgKnl5c2Nhbm5lcnApCit7CisJeXlzY2FuX3QJeXlzY2FubmVyOworCXBn cGFfeXlfZXh0cmFfdHlwZQkqeXlleHQgPSBwYWxsb2MwX29iamVjdChwZ3BhX3l5X2V4dHJhX3R5 cGUpOworCisJaWYgKHl5bGV4X2luaXQoeXlzY2FubmVycCkgIT0gMCkKKwkJZWxvZyhFUlJPUiwg Inl5bGV4X2luaXQoKSBmYWlsZWQ6ICVtIik7CisKKwl5eXNjYW5uZXIgPSAqeXlzY2FubmVycDsK KworCWluaXRTdHJpbmdJbmZvKCZ5eWV4dC0+bGl0YnVmKTsKKwlwZ3BhX3l5c2V0X2V4dHJhKHl5 ZXh0LCB5eXNjYW5uZXIpOworCisJeXlfc2Nhbl9zdHJpbmcoc3RyLCB5eXNjYW5uZXIpOworfQor CisKKy8qCisgKiBTaHV0IGRvd24gdGhlIGFkdmljZSBzY2FubmVyLgorICoKKyAqIFRoaXMgc2hv dWxkIGJlIGNhbGxlZCBhZnRlciBwYXJzaW5nIGlzIGNvbXBsZXRlLgorICovCit2b2lkCitwZ3Bh X3NjYW5uZXJfZmluaXNoKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwl5eWxleF9kZXN0cm95KHl5 c2Nhbm5lcik7Cit9CisKKy8qCisgKiBJbnRlcmZhY2UgZnVuY3Rpb25zIHRvIG1ha2UgZmxleCB1 c2UgcGFsbG9jKCkgaW5zdGVhZCBvZiBtYWxsb2MoKS4KKyAqIEl0J2QgYmUgYmV0dGVyIHRvIG1h a2UgdGhlc2Ugc3RhdGljLCBidXQgZmxleCBpbnNpc3RzIG90aGVyd2lzZS4KKyAqLworCit2b2lk ICoKK3l5YWxsb2MoeXlfc2l6ZV90IHNpemUsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwlyZXR1 cm4gcGFsbG9jKHNpemUpOworfQorCit2b2lkICoKK3l5cmVhbGxvYyh2b2lkICpwdHIsIHl5X3Np emVfdCBzaXplLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisJaWYgKHB0cikKKwkJcmV0dXJuIHJl cGFsbG9jKHB0ciwgc2l6ZSk7CisJZWxzZQorCQlyZXR1cm4gcGFsbG9jKHNpemUpOworfQorCit2 b2lkCit5eWZyZWUodm9pZCAqcHRyLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisJaWYgKHB0cikK KwkJcGZyZWUocHRyKTsKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdw YV90cm92ZS5jIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3Ryb3ZlLmMKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmU5MjQ5NTljMDEwCi0tLSAvZGV2L251bGwK KysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3Ryb3ZlLmMKQEAgLTAsMCArMSw1MTYg QEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHBncGFfdHJvdmUuYworICoJICBBbGwgb2Yg dGhlIGFkdmljZSBnaXZlbiBmb3IgYSBwYXJ0aWN1bGFyIHF1ZXJ5LCBhcHByb3ByaWF0ZWx5Cisg KiAgICBvcmdhbml6ZWQgZm9yIGNvbnZlbmllbnQgYWNjZXNzLgorICoKKyAqIFRoaXMgbmFtZSBj b21lcyBmcm9tIHRoZSBFbmdsaXNoIGV4cHJlc3Npb24gInRyb3ZlIG9mIGFkdmljZSIsIHdoaWNo CisgKiBtZWFucyBhIGNvbGxlY3Rpb24gb2Ygd2lzZG9tLiBUaGlzIHNsaWdodGx5IHVudXN1YWwg dGVybSBpcyBjaG9zZW4gdG8KKyAqIGF2b2lkIG5hbWluZyBjb25mdXNpb247IGZvciBleGFtcGxl LCAiY29sbGVjdGlvbiBvZiBhZHZpY2UiIHdvdWxkCisgKiBpbnZpdGUgY29uZnVzaW9uIHdpdGgg cGdwYV9jb2xsZWN0b3IuYy4gTm90ZSB0aGF0LCB3aGlsZSB3ZSBkb24ndCBrbm93CisgKiB3aGV0 aGVyIHRoZSBwcm92aWRlZCBhZHZpY2UgaXMgYWN0dWFsbHkgd2lzZSwgaXQncyBub3Qgb3VyIGpv YiB0bworICogcXVlc3Rpb24gdGhlIHVzZXIncyBjaG9pY2VzLgorICoKKyAqIFRoZSBnb2FsIG9m IHRoaXMgbW9kdWxlIGlzIHRvIG1ha2UgaXQgZWFzeSB0byBsb2NhdGUgdGhlIHNwZWNpZmljCisg KiBiaXRzIG9mIGFkdmljZSB0aGF0IHBlcnRhaW4gdG8gYW55IGdpdmVuIHBhcnQgb2YgYSBxdWVy eSwgb3IgdG8KKyAqIGRldGVybWluZSB0aGF0IHRoZXJlIGFyZSBub25lLgorICoKKyAqIENvcHly aWdodCAoYykgMjAxNi0yMDI0LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAor ICoKKyAqCSAgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3Ryb3ZlLmMKKyAqCisgKi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAqLworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJwZ3Bh X3Ryb3ZlLmgiCisKKyNpbmNsdWRlICJjb21tb24vaGFzaGZuX3Vuc3RhYmxlLmgiCisKKy8qCisg KiBBbiBhZHZpY2UgdHJvdmUgaXMgb3JnYW5pemVkIGludG8gYSBzZXJpZXMgb2YgInNsaWNlcyIs IGVhY2ggb2Ygd2hpY2gKKyAqIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IG9uZSB0b3BpYyBl LmcuIHNjYW4gbWV0aG9kcy4gRWFjaCBzbGljZSBjb25zaXN0cworICogb2YgYW4gYXJyYXkgb2Yg dHJvdmUgZW50cmllcyBwbHVzIGEgaGFzaCB0YWJsZSB0aGF0IHdlIGNhbiB1c2UgdG8gZGV0ZXJt aW5lCisgKiB3aGljaCBvbmVzIGFyZSByZWxldmFudCB0byBhIHBhcnRpY3VsYXIgcGFydCBvZiB0 aGUgcXVlcnkuCisgKi8KK3R5cGVkZWYgc3RydWN0IHBncGFfdHJvdmVfc2xpY2UKK3sKKwl1bnNp Z25lZAluYWxsb2NhdGVkOworCXVuc2lnbmVkCW51c2VkOworCXBncGFfdHJvdmVfZW50cnkgKmVu dHJpZXM7CisJc3RydWN0IHBncGFfdHJvdmVfZW50cnlfaGFzaCAqaGFzaDsKK30gcGdwYV90cm92 ZV9zbGljZTsKKworLyoKKyAqIFNjYW4gYWR2aWNlIGlzIHN0b3JlZCBpbnRvICdzY2FuJzsgam9p biBhZHZpY2UgaXMgc3RvcmVkIGludG8gJ2pvaW4nOyBhbmQKKyAqIGFkdmljZSB0aGF0IGNhbiBh cHBseSB0byBib3RoIGNhc2VzIGlzIHN0b3JlZCBpbnRvICdyZWwnLiBUaGlzIGxldHMgY2FsbGVy cworICogYXNrIGp1c3QgZm9yIHdoYXQncyByZWxldmFudC4gVGhlc2Ugc2xpY2VzIGNvcnJlc3Bv bmQgdG8gdGhlIHBvc3NpYmxlIHZhbHVlcworICogb2YgcGdwYV90cm92ZV9sb29rdXBfdHlwZS4K KyAqLworc3RydWN0IHBncGFfdHJvdmUKK3sKKwlwZ3BhX3Ryb3ZlX3NsaWNlIGpvaW47CisJcGdw YV90cm92ZV9zbGljZSByZWw7CisJcGdwYV90cm92ZV9zbGljZSBzY2FuOworfTsKKworLyoKKyAq IFdlJ3JlIGdvaW5nIHRvIGJ1aWxkIGEgaGFzaCB0YWJsZSB0byBhbGxvdyBjbGllbnRzIG9mIHRo aXMgbW9kdWxlIHRvIGZpbmQKKyAqIHJlbGV2YW50IGFkdmljZSBmb3IgYSBnaXZlbiBwYXJ0IG9m IHRoZSBxdWVyeSBxdWlja2x5LiBIb3dldmVyLCB3ZSdyZSBnb2luZworICogdG8gdXNlIG9ubHkg dGhyZWUgb2YgdGhlIGZpdmUga2V5IGZpZWxkcyBhcyBoYXNoIGtleXMuIFRoZXJlIGFyZSB0d28g cmVhc29ucworICogZm9yIHRoaXMuCisgKgorICogRmlyc3QsIGl0J3MgYWxsb3dhYmxlIHRvIHNl dCBwYXJ0aXRpb25fc2NoZW1hIHRvIE5VTEwgdG8gbWF0Y2ggYSBwYXJ0aXRpb24KKyAqIHdpdGgg dGhlIGNvcnJlY3QgbmFtZSBpbiBhbnkgc2NoZW1hLgorICoKKyAqIFNlY29uZCwgd2UgZXhwZWN0 IHRoZSAib2NjdXJyZW5jZSIgYW5kICJwYXJ0aXRpb25fc2NoZW1hIiBwb3J0aW9ucyBvZiB0aGUK KyAqIHJlbGF0aW9uIGlkZW50aWZpZXJzIHRvIGJlIG1vc3RseSB1bmludGVyZXN0aW5nLiBNb3N0 IG9mIHRoZSB0aW1lLCB0aGUKKyAqIG9jY3VycmVuY2UgZmllbGQgd2lsbCBiZSAxIGFuZCB0aGUg cGFydGl0aW9uX3NjaGVtYSB2YWx1ZXMgd2lsbCBhbGwgYmUgdGhlCisgKiBzYW1lLiBFdmVuIHdo ZW4gdGhlcmUgaXMgc29tZSB2YXJpYXRpb24sIHRoZSBhYnNvbHV0ZSBudW1iZXIgb2YgZW50cmll cworICogdGhhdCBoYXZlIHRoZSBzYW1lIHZhbHVlcyBmb3IgYWxsIHRocmVlIG9mIHRoZXNlIGtl eSBmaWVsZHMgc2hvdWxkIGJlCisgKiBxdWl0ZSBzbWFsbC4KKyAqLwordHlwZWRlZiBzdHJ1Y3QK K3sKKwljb25zdCBjaGFyICphbGlhc19uYW1lOworCWNvbnN0IGNoYXIgKnBhcnRpdGlvbl9uYW1l OworCWNvbnN0IGNoYXIgKnBsYW5fbmFtZTsKK30gcGdwYV90cm92ZV9lbnRyeV9rZXk7CisKK3R5 cGVkZWYgc3RydWN0Cit7CisJcGdwYV90cm92ZV9lbnRyeV9rZXkga2V5OworCWludAkJCXN0YXR1 czsKKwlCaXRtYXBzZXQgICppbmRleGVzOworfSBwZ3BhX3Ryb3ZlX2VudHJ5X2VsZW1lbnQ7CisK K3N0YXRpYyB1aW50MzIgcGdwYV90cm92ZV9lbnRyeV9oYXNoX2tleShwZ3BhX3Ryb3ZlX2VudHJ5 X2tleSBrZXkpOworCitzdGF0aWMgaW5saW5lIGJvb2wKK3BncGFfdHJvdmVfZW50cnlfY29tcGFy ZV9rZXkocGdwYV90cm92ZV9lbnRyeV9rZXkgYSwgcGdwYV90cm92ZV9lbnRyeV9rZXkgYikKK3sK KwlpZiAoc3RyY21wKGEuYWxpYXNfbmFtZSwgYi5hbGlhc19uYW1lKSAhPSAwKQorCQlyZXR1cm4g ZmFsc2U7CisKKwlpZiAoIXN0cmluZ3NfZXF1YWxfb3JfYm90aF9udWxsKGEucGFydGl0aW9uX25h bWUsIGIucGFydGl0aW9uX25hbWUpKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAoIXN0cmluZ3Nf ZXF1YWxfb3JfYm90aF9udWxsKGEucGxhbl9uYW1lLCBiLnBsYW5fbmFtZSkpCisJCXJldHVybiBm YWxzZTsKKworCXJldHVybiB0cnVlOworfQorCisjZGVmaW5lIFNIX1BSRUZJWAkJCXBncGFfdHJv dmVfZW50cnkKKyNkZWZpbmUgU0hfRUxFTUVOVF9UWVBFCQlwZ3BhX3Ryb3ZlX2VudHJ5X2VsZW1l bnQKKyNkZWZpbmUgU0hfS0VZX1RZUEUJCQlwZ3BhX3Ryb3ZlX2VudHJ5X2tleQorI2RlZmluZSBT SF9LRVkJCQkJa2V5CisjZGVmaW5lIFNIX0hBU0hfS0VZKHRiLCBrZXkpCXBncGFfdHJvdmVfZW50 cnlfaGFzaF9rZXkoa2V5KQorI2RlZmluZQlTSF9FUVVBTCh0YiwgYSwgYikJcGdwYV90cm92ZV9l bnRyeV9jb21wYXJlX2tleShhLCBiKQorI2RlZmluZSBTSF9TQ09QRQkJCXN0YXRpYyBpbmxpbmUK KyNkZWZpbmUgU0hfREVDTEFSRQorI2RlZmluZSBTSF9ERUZJTkUKKyNpbmNsdWRlICJsaWIvc2lt cGxlaGFzaC5oIgorCitzdGF0aWMgdm9pZCBwZ3BhX2luaXRfdHJvdmVfc2xpY2UocGdwYV90cm92 ZV9zbGljZSAqdHNsaWNlKTsKK3N0YXRpYyB2b2lkIHBncGFfdHJvdmVfYWRkX3RvX3NsaWNlKHBn cGFfdHJvdmVfc2xpY2UgKnRzbGljZSwKKwkJCQkJCQkJCXBncGFfYWR2aWNlX3RhZ190eXBlIHRh ZywKKwkJCQkJCQkJCXBncGFfYWR2aWNlX3RhcmdldCAqdGFyZ2V0KTsKK3N0YXRpYyB2b2lkIHBn cGFfdHJvdmVfYWRkX3RvX2hhc2gocGdwYV90cm92ZV9lbnRyeV9oYXNoICpoYXNoLAorCQkJCQkJ CQkgICBwZ3BhX2FkdmljZV90YXJnZXQgKnRhcmdldCwKKwkJCQkJCQkJICAgaW50IGluZGV4KTsK K3N0YXRpYyBCaXRtYXBzZXQgKnBncGFfdHJvdmVfc2xpY2VfbG9va3VwKHBncGFfdHJvdmVfc2xp Y2UgKnRzbGljZSwKKwkJCQkJCQkJCQkgIHBncGFfaWRlbnRpZmllciAqcmlkKTsKKworLyoKKyAq IEJ1aWxkIGEgdHJvdmUgb2YgYWR2aWNlIGZyb20gYSBsaXN0IG9mIGFkdmljZSBpdGVtcy4KKyAq CisgKiBDYWxsZXIgY2FuIG9idGFpbiBhIGxpc3Qgb2YgYWR2aWNlIGl0ZW1zIHRvIHBhc3MgdG8g dGhpcyBmdW5jdGlvbiBieQorICogY2FsbGluZyBwZ3BhX3BhcnNlKCkuCisgKi8KK3BncGFfdHJv dmUgKgorcGdwYV9idWlsZF90cm92ZShMaXN0ICphZHZpY2VfaXRlbXMpCit7CisJcGdwYV90cm92 ZSAqdHJvdmUgPSBwYWxsb2Nfb2JqZWN0KHBncGFfdHJvdmUpOworCisJcGdwYV9pbml0X3Ryb3Zl X3NsaWNlKCZ0cm92ZS0+am9pbik7CisJcGdwYV9pbml0X3Ryb3ZlX3NsaWNlKCZ0cm92ZS0+cmVs KTsKKwlwZ3BhX2luaXRfdHJvdmVfc2xpY2UoJnRyb3ZlLT5zY2FuKTsKKworCWZvcmVhY2hfcHRy KHBncGFfYWR2aWNlX2l0ZW0sIGl0ZW0sIGFkdmljZV9pdGVtcykKKwl7CisJCXN3aXRjaCAoaXRl bS0+dGFnKQorCQl7CisJCQljYXNlIFBHUEFfVEFHX0pPSU5fT1JERVI6CisJCQkJeworCQkJCQlw Z3BhX2FkdmljZV90YXJnZXQgKnRhcmdldDsKKworCQkJCQkvKgorCQkJCQkgKiBGb3IgbW9zdCBh ZHZpY2UgdHlwZXMsIGVhY2ggZWxlbWVudCBpbiB0aGUgdG9wLWxldmVsCisJCQkJCSAqIGxpc3Qg aXMgYSBzZXBhcmF0ZSB0YXJnZXQsIGJ1dCBpdCdzIG1vc3QgY29udmVuaWVudCB0bworCQkJCQkg KiByZWdhcmQgdGhlIGVudGlyZXR5IG9mIGEgSk9JTl9PUkRFUiBzcGVjaWZpY2F0aW9uIGFzIGEK KwkJCQkJICogc2luZ2xlIHRhcmdldC4gU2luY2UgaXQgd2Fzbid0IHJlcHJlc2VudGVkIHRoYXQg d2F5CisJCQkJCSAqIGR1cmluZyBwYXJzaW5nLCBidWlsZCBhIHN1cnJvZ2F0ZSBvYmplY3Qgbm93 LgorCQkJCQkgKi8KKwkJCQkJdGFyZ2V0ID0gcGFsbG9jMF9vYmplY3QocGdwYV9hZHZpY2VfdGFy Z2V0KTsKKwkJCQkJdGFyZ2V0LT50dHlwZSA9IFBHUEFfVEFSR0VUX09SREVSRURfTElTVDsKKwkJ CQkJdGFyZ2V0LT5jaGlsZHJlbiA9IGl0ZW0tPnRhcmdldHM7CisKKwkJCQkJcGdwYV90cm92ZV9h ZGRfdG9fc2xpY2UoJnRyb3ZlLT5qb2luLAorCQkJCQkJCQkJCQlpdGVtLT50YWcsIHRhcmdldCk7 CisJCQkJfQorCQkJCWJyZWFrOworCisJCQljYXNlIFBHUEFfVEFHX0JJVE1BUF9IRUFQX1NDQU46 CisJCQljYXNlIFBHUEFfVEFHX0lOREVYX09OTFlfU0NBTjoKKwkJCWNhc2UgUEdQQV9UQUdfSU5E RVhfU0NBTjoKKwkJCWNhc2UgUEdQQV9UQUdfU0VRX1NDQU46CisJCQljYXNlIFBHUEFfVEFHX1RJ RF9TQ0FOOgorCisJCQkJLyoKKwkJCQkgKiBTY2FuIGFkdmljZS4KKwkJCQkgKi8KKwkJCQlmb3Jl YWNoX3B0cihwZ3BhX2FkdmljZV90YXJnZXQsIHRhcmdldCwgaXRlbS0+dGFyZ2V0cykKKwkJCQl7 CisJCQkJCS8qCisJCQkJCSAqIEZvciBub3csIGFsbCBvZiBvdXIgc2NhbiB0eXBlcyB0YXJnZXQg c2luZ2xlIHJlbGF0aW9ucywKKwkJCQkJICogYnV0IGluIHRoZSBmdXR1cmUgdGhpcyBtaWdodCBu b3QgYmUgdHJ1ZSwgZS5nLiBhIGN1c3RvbQorCQkJCQkgKiBzY2FuIGNvdWxkIHJlcGxhY2UgYSBq b2luLgorCQkJCQkgKi8KKwkJCQkJQXNzZXJ0KHRhcmdldC0+dHR5cGUgPT0gUEdQQV9UQVJHRVRf SURFTlRJRklFUik7CisJCQkJCXBncGFfdHJvdmVfYWRkX3RvX3NsaWNlKCZ0cm92ZS0+c2NhbiwK KwkJCQkJCQkJCQkJaXRlbS0+dGFnLCB0YXJnZXQpOworCQkJCX0KKwkJCQlicmVhazsKKworCQkJ Y2FzZSBQR1BBX1RBR19GT1JFSUdOX0pPSU46CisJCQljYXNlIFBHUEFfVEFHX0hBU0hfSk9JTjoK KwkJCWNhc2UgUEdQQV9UQUdfTUVSR0VfSk9JTl9NQVRFUklBTElaRToKKwkJCWNhc2UgUEdQQV9U QUdfTUVSR0VfSk9JTl9QTEFJTjoKKwkJCWNhc2UgUEdQQV9UQUdfTkVTVEVEX0xPT1BfTUFURVJJ QUxJWkU6CisJCQljYXNlIFBHUEFfVEFHX05FU1RFRF9MT09QX01FTU9JWkU6CisJCQljYXNlIFBH UEFfVEFHX05FU1RFRF9MT09QX1BMQUlOOgorCQkJY2FzZSBQR1BBX1RBR19TRU1JSk9JTl9OT05f VU5JUVVFOgorCQkJY2FzZSBQR1BBX1RBR19TRU1JSk9JTl9VTklRVUU6CisKKwkJCQkvKgorCQkJ CSAqIEpvaW4gc3RyYXRlZ3kgYWR2aWNlLgorCQkJCSAqLworCQkJCWZvcmVhY2hfcHRyKHBncGFf YWR2aWNlX3RhcmdldCwgdGFyZ2V0LCBpdGVtLT50YXJnZXRzKQorCQkJCXsKKwkJCQkJcGdwYV90 cm92ZV9hZGRfdG9fc2xpY2UoJnRyb3ZlLT5qb2luLAorCQkJCQkJCQkJCQlpdGVtLT50YWcsIHRh cmdldCk7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQljYXNlIFBHUEFfVEFHX1BBUlRJVElPTldJ U0U6CisJCQljYXNlIFBHUEFfVEFHX0dBVEhFUjoKKwkJCWNhc2UgUEdQQV9UQUdfR0FUSEVSX01F UkdFOgorCQkJY2FzZSBQR1BBX1RBR19OT19HQVRIRVI6CisKKwkJCQkvKgorCQkJCSAqIEFkdmlj ZSBhYm91dCBhIFJlbE9wdEluZm8gcmVsZXZhbnQgdG8gYm90aCBzY2FucyBhbmQgam9pbnMuCisJ CQkJICovCisJCQkJZm9yZWFjaF9wdHIocGdwYV9hZHZpY2VfdGFyZ2V0LCB0YXJnZXQsIGl0ZW0t PnRhcmdldHMpCisJCQkJeworCQkJCQlwZ3BhX3Ryb3ZlX2FkZF90b19zbGljZSgmdHJvdmUtPnJl bCwKKwkJCQkJCQkJCQkJaXRlbS0+dGFnLCB0YXJnZXQpOworCQkJCX0KKwkJCQlicmVhazsKKwkJ fQorCX0KKworCXJldHVybiB0cm92ZTsKK30KKworLyoKKyAqIFNlYXJjaCBhIHRyb3ZlIG9mIGFk dmljZSBmb3IgcmVsZXZhbnQgZW50cmllcy4KKyAqCisgKiBBbGwgcGFyYW1ldGVycyBhcmUgaW5w dXQgcGFyYW1ldGVycyBleGNlcHQgZm9yICpyZXN1bHQsIHdoaWNoIGlzIGFuIG91dHB1dAorICog cGFyYW1ldGVyIHVzZWQgdG8gcmV0dXJuIHJlc3VsdHMgdG8gdGhlIGNhbGxlci4KKyAqLwordm9p ZAorcGdwYV90cm92ZV9sb29rdXAocGdwYV90cm92ZSAqdHJvdmUsIHBncGFfdHJvdmVfbG9va3Vw X3R5cGUgdHlwZSwKKwkJCQkgIGludCBucmlkcywgcGdwYV9pZGVudGlmaWVyICpyaWRzLCBwZ3Bh X3Ryb3ZlX3Jlc3VsdCAqcmVzdWx0KQoreworCXBncGFfdHJvdmVfc2xpY2UgKnRzbGljZTsKKwlC aXRtYXBzZXQgICppbmRleGVzOworCisJQXNzZXJ0KG5yaWRzID4gMCk7CisKKwlpZiAodHlwZSA9 PSBQR1BBX1RST1ZFX0xPT0tVUF9TQ0FOKQorCQl0c2xpY2UgPSAmdHJvdmUtPnNjYW47CisJZWxz ZSBpZiAodHlwZSA9PSBQR1BBX1RST1ZFX0xPT0tVUF9KT0lOKQorCQl0c2xpY2UgPSAmdHJvdmUt PmpvaW47CisJZWxzZQorCQl0c2xpY2UgPSAmdHJvdmUtPnJlbDsKKworCWluZGV4ZXMgPSBwZ3Bh X3Ryb3ZlX3NsaWNlX2xvb2t1cCh0c2xpY2UsICZyaWRzWzBdKTsKKwlmb3IgKGludCBpID0gMTsg aSA8IG5yaWRzOyArK2kpCisJeworCQlCaXRtYXBzZXQgICpvdGhlcl9pbmRleGVzOworCisJCS8q CisJCSAqIElmIHRoZSBjYWxsZXIgaXMgYXNraW5nIGFib3V0IHR3byByZWxhdGlvbnMgdGhhdCBh cmVuJ3QgcGFydCBvZiB0aGUKKwkJICogc2FtZSBzdWJxdWVyeSwgdGhleSd2ZSBtZXNzZWQgdXAu CisJCSAqLworCQlBc3NlcnQoc3RyaW5nc19lcXVhbF9vcl9ib3RoX251bGwocmlkc1swXS5wbGFu X25hbWUsCisJCQkJCQkJCQkJICByaWRzW2ldLnBsYW5fbmFtZSkpOworCisJCW90aGVyX2luZGV4 ZXMgPSBwZ3BhX3Ryb3ZlX3NsaWNlX2xvb2t1cCh0c2xpY2UsICZyaWRzW2ldKTsKKwkJaW5kZXhl cyA9IGJtc191bmlvbihpbmRleGVzLCBvdGhlcl9pbmRleGVzKTsKKwl9CisKKwlyZXN1bHQtPmVu dHJpZXMgPSB0c2xpY2UtPmVudHJpZXM7CisJcmVzdWx0LT5pbmRleGVzID0gaW5kZXhlczsKK30K KworLyoKKyAqIFJldHVybiBhbGwgZW50cmllcyBpbiBhIHRyb3ZlIHNsaWNlIHRvIHRoZSBjYWxs ZXIuCisgKgorICogVGhlIGZpcnN0IHR3byBhcmd1bWVudHMgYXJlIGlucHV0IGFyZ3VtZW50cywg YW5kIHRoZSByZW1haW5kZXIgYXJlIG91dHB1dAorICogYXJndW1lbnRzLgorICovCit2b2lkCitw Z3BhX3Ryb3ZlX2xvb2t1cF9hbGwocGdwYV90cm92ZSAqdHJvdmUsIHBncGFfdHJvdmVfbG9va3Vw X3R5cGUgdHlwZSwKKwkJCQkJICBwZ3BhX3Ryb3ZlX2VudHJ5ICoqZW50cmllcywgaW50ICpuZW50 cmllcykKK3sKKwlwZ3BhX3Ryb3ZlX3NsaWNlICp0c2xpY2U7CisKKwlpZiAodHlwZSA9PSBQR1BB X1RST1ZFX0xPT0tVUF9TQ0FOKQorCQl0c2xpY2UgPSAmdHJvdmUtPnNjYW47CisJZWxzZSBpZiAo dHlwZSA9PSBQR1BBX1RST1ZFX0xPT0tVUF9KT0lOKQorCQl0c2xpY2UgPSAmdHJvdmUtPmpvaW47 CisJZWxzZQorCQl0c2xpY2UgPSAmdHJvdmUtPnJlbDsKKworCSplbnRyaWVzID0gdHNsaWNlLT5l bnRyaWVzOworCSpuZW50cmllcyA9IHRzbGljZS0+bnVzZWQ7Cit9CisKKy8qCisgKiBDb252ZXJ0 IGEgdHJvdmUgZW50cnkgdG8gYW4gaXRlbSBvZiBwbGFuIGFkdmljZSB0aGF0IHdvdWxkIHByb2R1 Y2UgaXQuCisgKi8KK2NoYXIgKgorcGdwYV9jc3RyaW5nX3Ryb3ZlX2VudHJ5KHBncGFfdHJvdmVf ZW50cnkgKmVudHJ5KQoreworCVN0cmluZ0luZm9EYXRhIGJ1ZjsKKworCWluaXRTdHJpbmdJbmZv KCZidWYpOworCWFwcGVuZFN0cmluZ0luZm8oJmJ1ZiwgIiVzIiwgcGdwYV9jc3RyaW5nX2Fkdmlj ZV90YWcoZW50cnktPnRhZykpOworCisJLyogSk9JTl9PUkRFUiB0YWdzIGFyZSB0cmFuc2Zvcm1l ZCBieSBwZ3BhX2J1aWxkX3Ryb3ZlOyB1bmRvIHRoYXQgaGVyZSAqLworCWlmIChlbnRyeS0+dGFn ICE9IFBHUEFfVEFHX0pPSU5fT1JERVIpCisJCWFwcGVuZFN0cmluZ0luZm9DaGFyKCZidWYsICco Jyk7CisJZWxzZQorCQlBc3NlcnQoZW50cnktPnRhcmdldC0+dHR5cGUgPT0gUEdQQV9UQVJHRVRf T1JERVJFRF9MSVNUKTsKKworCXBncGFfZm9ybWF0X2FkdmljZV90YXJnZXQoJmJ1ZiwgZW50cnkt PnRhcmdldCk7CisKKwlpZiAoZW50cnktPnRhcmdldC0+aXRhcmdldCAhPSBOVUxMKQorCXsKKwkJ YXBwZW5kU3RyaW5nSW5mb0NoYXIoJmJ1ZiwgJyAnKTsKKwkJcGdwYV9mb3JtYXRfaW5kZXhfdGFy Z2V0KCZidWYsIGVudHJ5LT50YXJnZXQtPml0YXJnZXQpOworCX0KKworCWlmIChlbnRyeS0+dGFn ICE9IFBHUEFfVEFHX0pPSU5fT1JERVIpCisJCWFwcGVuZFN0cmluZ0luZm9DaGFyKCZidWYsICcp Jyk7CisKKwlyZXR1cm4gYnVmLmRhdGE7Cit9CisKKy8qCisgKiBTZXQgUEdQQV9URV8qIGZsYWdz IG9uIGEgc2V0IG9mIHRyb3ZlIGVudHJpZXMuCisgKi8KK3ZvaWQKK3BncGFfdHJvdmVfc2V0X2Zs YWdzKHBncGFfdHJvdmVfZW50cnkgKmVudHJpZXMsIEJpdG1hcHNldCAqaW5kZXhlcywgaW50IGZs YWdzKQoreworCWludAkJCWkgPSAtMTsKKworCXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJlcihp bmRleGVzLCBpKSkgPj0gMCkKKwl7CisJCXBncGFfdHJvdmVfZW50cnkgKmVudHJ5ID0gJmVudHJp ZXNbaV07CisKKwkJZW50cnktPmZsYWdzIHw9IGZsYWdzOworCX0KK30KKworLyoKKyAqIEFwcGVu ZCBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3BlY2lmaWVkIFBHUEFfVEVfKiBmbGFn cyB0byB0aGUKKyAqIGdpdmVuIFN0cmluZ0luZm8uCisgKi8KK3ZvaWQKK3BncGFfdHJvdmVfYXBw ZW5kX2ZsYWdzKFN0cmluZ0luZm8gYnVmLCBpbnQgZmxhZ3MpCit7CisJaWYgKChmbGFncyAmIFBH UEFfVEVfTUFUQ0hfRlVMTCkgIT0gMCkKKwl7CisJCUFzc2VydCgoZmxhZ3MgJiBQR1BBX1RFX01B VENIX1BBUlRJQUwpICE9IDApOworCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIm1hdGNoZWQiKTsK Kwl9CisJZWxzZSBpZiAoKGZsYWdzICYgUEdQQV9URV9NQVRDSF9QQVJUSUFMKSAhPSAwKQorCQlh cHBlbmRTdHJpbmdJbmZvKGJ1ZiwgInBhcnRpYWxseSBtYXRjaGVkIik7CisJZWxzZQorCQlhcHBl bmRTdHJpbmdJbmZvKGJ1ZiwgIm5vdCBtYXRjaGVkIik7CisJaWYgKChmbGFncyAmIFBHUEFfVEVf SU5BUFBMSUNBQkxFKSAhPSAwKQorCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiwgaW5hcHBsaWNh YmxlIik7CisJaWYgKChmbGFncyAmIFBHUEFfVEVfQ09ORkxJQ1RJTkcpICE9IDApCisJCWFwcGVu ZFN0cmluZ0luZm8oYnVmLCAiLCBjb25mbGljdGluZyIpOworCWlmICgoZmxhZ3MgJiBQR1BBX1RF X0ZBSUxFRCkgIT0gMCkKKwkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIsIGZhaWxlZCIpOworfQor CisvKgorICogQWRkIGEgbmV3IGFkdmljZSB0YXJnZXQgdG8gYW4gZXhpc3RpbmcgcGdwYV90cm92 ZV9zbGljZSBvYmplY3QuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX3Ryb3ZlX2FkZF90b19zbGlj ZShwZ3BhX3Ryb3ZlX3NsaWNlICp0c2xpY2UsCisJCQkJCQlwZ3BhX2FkdmljZV90YWdfdHlwZSB0 YWcsCisJCQkJCQlwZ3BhX2FkdmljZV90YXJnZXQgKnRhcmdldCkKK3sKKwlwZ3BhX3Ryb3ZlX2Vu dHJ5ICplbnRyeTsKKworCWlmICh0c2xpY2UtPm51c2VkID49IHRzbGljZS0+bmFsbG9jYXRlZCkK Kwl7CisJCWludAkJCW5ld19hbGxvY2F0ZWQ7CisKKwkJbmV3X2FsbG9jYXRlZCA9IHRzbGljZS0+ bmFsbG9jYXRlZCAqIDI7CisJCXRzbGljZS0+ZW50cmllcyA9IHJlcGFsbG9jX2FycmF5KHRzbGlj ZS0+ZW50cmllcywgcGdwYV90cm92ZV9lbnRyeSwKKwkJCQkJCQkJCQkgbmV3X2FsbG9jYXRlZCk7 CisJCXRzbGljZS0+bmFsbG9jYXRlZCA9IG5ld19hbGxvY2F0ZWQ7CisJfQorCisJZW50cnkgPSAm dHNsaWNlLT5lbnRyaWVzW3RzbGljZS0+bnVzZWRdOworCWVudHJ5LT50YWcgPSB0YWc7CisJZW50 cnktPnRhcmdldCA9IHRhcmdldDsKKwllbnRyeS0+ZmxhZ3MgPSAwOworCisJcGdwYV90cm92ZV9h ZGRfdG9faGFzaCh0c2xpY2UtPmhhc2gsIHRhcmdldCwgdHNsaWNlLT5udXNlZCk7CisKKwl0c2xp Y2UtPm51c2VkKys7Cit9CisKKy8qCisgKiBVcGRhdGUgdGhlIGhhc2ggdGFibGUgZm9yIGEgbmV3 bHktYWRkZWQgYWR2aWNlIHRhcmdldC4KKyAqLworc3RhdGljIHZvaWQKK3BncGFfdHJvdmVfYWRk X3RvX2hhc2gocGdwYV90cm92ZV9lbnRyeV9oYXNoICpoYXNoLCBwZ3BhX2FkdmljZV90YXJnZXQg KnRhcmdldCwKKwkJCQkJICAgaW50IGluZGV4KQoreworCXBncGFfdHJvdmVfZW50cnlfa2V5IGtl eTsKKwlwZ3BhX3Ryb3ZlX2VudHJ5X2VsZW1lbnQgKmVsZW1lbnQ7CisJYm9vbAkJZm91bmQ7CisK KwkvKiBGb3Igbm9uLWlkZW50aWZpZXJzLCBhZGQgZW50cmllcyBmb3IgYWxsIGRlc2NlbmRlbnRz LiAqLworCWlmICh0YXJnZXQtPnR0eXBlICE9IFBHUEFfVEFSR0VUX0lERU5USUZJRVIpCisJewor CQlmb3JlYWNoX3B0cihwZ3BhX2FkdmljZV90YXJnZXQsIGNoaWxkX3RhcmdldCwgdGFyZ2V0LT5j aGlsZHJlbikKKwkJeworCQkJcGdwYV90cm92ZV9hZGRfdG9faGFzaChoYXNoLCBjaGlsZF90YXJn ZXQsIGluZGV4KTsKKwkJfQorCQlyZXR1cm47CisJfQorCisJLyogU2FuaXR5IGNoZWNrcy4gKi8K KwlBc3NlcnQodGFyZ2V0LT5yaWQub2NjdXJyZW5jZSA+IDApOworCUFzc2VydCh0YXJnZXQtPnJp ZC5hbGlhc19uYW1lICE9IE5VTEwpOworCisJLyogQWRkIGFuIGVudHJ5IGZvciB0aGlzIHJlbGF0 aW9uIGlkZW50aWZpZXIuICovCisJa2V5LmFsaWFzX25hbWUgPSB0YXJnZXQtPnJpZC5hbGlhc19u YW1lOworCWtleS5wYXJ0aXRpb25fbmFtZSA9IHRhcmdldC0+cmlkLnBhcnRyZWw7CisJa2V5LnBs YW5fbmFtZSA9IHRhcmdldC0+cmlkLnBsYW5fbmFtZTsKKwllbGVtZW50ID0gcGdwYV90cm92ZV9l bnRyeV9pbnNlcnQoaGFzaCwga2V5LCAmZm91bmQpOworCWlmICghZm91bmQpCisJCWVsZW1lbnQt PmluZGV4ZXMgPSBOVUxMOworCWVsZW1lbnQtPmluZGV4ZXMgPSBibXNfYWRkX21lbWJlcihlbGVt ZW50LT5pbmRleGVzLCBpbmRleCk7Cit9CisKKy8qCisgKiBDcmVhdGUgYW5kIGluaXRpYWxpemUg YSBuZXcgcGdwYV90cm92ZV9zbGljZSBvYmplY3QuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX2lu aXRfdHJvdmVfc2xpY2UocGdwYV90cm92ZV9zbGljZSAqdHNsaWNlKQoreworCS8qCisJICogSW4g YW4gaWRlYWwgd29ybGQsIHdlJ2xsIG1ha2UgdHNsaWNlLT5uYWxsb2NhdGVkIGJpZyBlbm91Z2gg dGhhdCB0aGUKKwkgKiBhcnJheSBhbmQgaGFzaCB0YWJsZSB3aWxsIGJlIGxhcmdlIGVub3VnaCB0 byBjb250YWluIHRoZSBudW1iZXIgb2YKKwkgKiBhZHZpY2UgaXRlbXMgaW4gdGhpcyB0cm92ZSBz bGljZSwgYnV0IGEgZ2VuZXJvdXMgZGVmYXVsdCB2YWx1ZSBpcyBub3QKKwkgKiBnb29kIGZvciBw ZXJmb3JtYW5jZSwgYmVjYXVzZSBwZ3BhX2luaXRfdHJvdmVfc2xpY2UoKSBoYXMgdG8gemVybyBh bgorCSAqIGFtb3VudCBvZiBtZW1vcnkgcHJvcG9ydGlvbmFsIHRvIHRzbGljZS0+bmFsbG9jYXRl ZC4gSGVuY2UsIHdlIGtlZXAgdGhlCisJICogc3RhcnRpbmcgdmFsdWUgcXVpdGUgc21hbGwsIG9u IHRoZSB0aGVvcnkgdGhhdCBhZHZpY2Ugc3RyaW5ncyB3aWxsCisJICogb2Z0ZW4gYmUgcmVsYXRp dmVseSBzaG9ydC4KKwkgKi8KKwl0c2xpY2UtPm5hbGxvY2F0ZWQgPSAxNjsKKwl0c2xpY2UtPm51 c2VkID0gMDsKKwl0c2xpY2UtPmVudHJpZXMgPSBwYWxsb2NfYXJyYXkocGdwYV90cm92ZV9lbnRy eSwgdHNsaWNlLT5uYWxsb2NhdGVkKTsKKwl0c2xpY2UtPmhhc2ggPSBwZ3BhX3Ryb3ZlX2VudHJ5 X2NyZWF0ZShDdXJyZW50TWVtb3J5Q29udGV4dCwKKwkJCQkJCQkJCQkgICB0c2xpY2UtPm5hbGxv Y2F0ZWQsIE5VTEwpOworfQorCisvKgorICogRmFzdCBoYXNoIGZ1bmN0aW9uIGZvciBhIGtleSBj b25zaXN0aW5nIG9mIGFsaWFzX25hbWUsIHBhcnRpdGlvbl9uYW1lLAorICogYW5kIHBsYW5fbmFt ZS4KKyAqLworc3RhdGljIHVpbnQzMgorcGdwYV90cm92ZV9lbnRyeV9oYXNoX2tleShwZ3BhX3Ry b3ZlX2VudHJ5X2tleSBrZXkpCit7CisJZmFzdGhhc2hfc3RhdGUgaHM7CisJaW50CQkJc3BfbGVu OworCisJZmFzdGhhc2hfaW5pdCgmaHMsIDApOworCisJLyogYWxpYXNfbmFtZSBtYXkgbm90IGJl IE5VTEwgKi8KKwlzcF9sZW4gPSBmYXN0aGFzaF9hY2N1bV9jc3RyaW5nKCZocywga2V5LmFsaWFz X25hbWUpOworCisJLyogcGFydGl0aW9uX25hbWUgYW5kIHBsYW5fbmFtZSwgaG93ZXZlciwgY2Fu IGJlIE5VTEwgKi8KKwlpZiAoa2V5LnBhcnRpdGlvbl9uYW1lICE9IE5VTEwpCisJCXNwX2xlbiAr PSBmYXN0aGFzaF9hY2N1bV9jc3RyaW5nKCZocywga2V5LnBhcnRpdGlvbl9uYW1lKTsKKwlpZiAo a2V5LnBsYW5fbmFtZSAhPSBOVUxMKQorCQlzcF9sZW4gKz0gZmFzdGhhc2hfYWNjdW1fY3N0cmlu ZygmaHMsIGtleS5wbGFuX25hbWUpOworCisJLyoKKwkgKiBoYXNoZm5fdW5zdGFibGUuaCByZWNv bW1lbmRzIHVzaW5nIHN0cmluZyBsZW5ndGggYXMgdHdlYWsuIEl0J3Mgbm90CisJICogY2xlYXIg dG8gbWUgd2hhdCB0byBkbyBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgc3RyaW5ncywgc28gZm9yIG5v dyBJJ20KKwkgKiBqdXN0IHVzaW5nIHRoZSB0b3RhbCBvZiBhbGwgb2YgdGhlIGxlbmd0aHMuCisJ ICovCisJcmV0dXJuIGZhc3RoYXNoX2ZpbmFsMzIoJmhzLCBzcF9sZW4pOworfQorCisvKgorICog TG9vayBmb3IgbWF0Y2hpbmcgZW50cmllcy4KKyAqLworc3RhdGljIEJpdG1hcHNldCAqCitwZ3Bh X3Ryb3ZlX3NsaWNlX2xvb2t1cChwZ3BhX3Ryb3ZlX3NsaWNlICp0c2xpY2UsIHBncGFfaWRlbnRp ZmllciAqcmlkKQoreworCXBncGFfdHJvdmVfZW50cnlfa2V5IGtleTsKKwlwZ3BhX3Ryb3ZlX2Vu dHJ5X2VsZW1lbnQgKmVsZW1lbnQ7CisJQml0bWFwc2V0ICAqcmVzdWx0ID0gTlVMTDsKKworCUFz c2VydChyaWQtPm9jY3VycmVuY2UgPj0gMSk7CisKKwlrZXkuYWxpYXNfbmFtZSA9IHJpZC0+YWxp YXNfbmFtZTsKKwlrZXkucGFydGl0aW9uX25hbWUgPSByaWQtPnBhcnRyZWw7CisJa2V5LnBsYW5f bmFtZSA9IHJpZC0+cGxhbl9uYW1lOworCisJZWxlbWVudCA9IHBncGFfdHJvdmVfZW50cnlfbG9v a3VwKHRzbGljZS0+aGFzaCwga2V5KTsKKworCWlmIChlbGVtZW50ICE9IE5VTEwpCisJeworCQlp bnQJCQlpID0gLTE7CisKKwkJd2hpbGUgKChpID0gYm1zX25leHRfbWVtYmVyKGVsZW1lbnQtPmlu ZGV4ZXMsIGkpKSA+PSAwKQorCQl7CisJCQlwZ3BhX3Ryb3ZlX2VudHJ5ICplbnRyeSA9ICZ0c2xp Y2UtPmVudHJpZXNbaV07CisKKwkJCS8qCisJCQkgKiBXZSBrbm93IHRoYXQgdGhpcyB0YXJnZXQg b3Igb25lIG9mIGl0cyBkZXNjZW5kZW50cyBtYXRjaGVzIHRoZQorCQkJICogaWRlbnRpZmllciBv biB0aGUgdGhyZWUga2V5IGZpZWxkcyBhYm92ZSwgYnV0IHdlIGRvbid0IGtub3cKKwkJCSAqIHdo aWNoIGRlc2NlbmRlbnQgb3Igd2hldGhlciB0aGUgb2NjdXJlbmNlIGFuZCBzY2hlbWEgYWxzbwor CQkJICogbWF0Y2guCisJCQkgKi8KKwkJCWlmIChwZ3BhX2lkZW50aWZpZXJfbWF0Y2hlc190YXJn ZXQocmlkLCBlbnRyeS0+dGFyZ2V0KSkKKwkJCQlyZXN1bHQgPSBibXNfYWRkX21lbWJlcihyZXN1 bHQsIGkpOworCQl9CisJfQorCisJcmV0dXJuIHJlc3VsdDsKK30KZGlmZiAtLWdpdCBhL2NvbnRy aWIvcGdfcGxhbl9hZHZpY2UvcGdwYV90cm92ZS5oIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9w Z3BhX3Ryb3ZlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmExYjc1 YWY3MjRhCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3Ry b3ZlLmgKQEAgLTAsMCArMSwxMTQgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHBncGFf dHJvdmUuaAorICoJICBBbGwgb2YgdGhlIGFkdmljZSBnaXZlbiBmb3IgYSBwYXJ0aWN1bGFyIHF1 ZXJ5LCBhcHByb3ByaWF0ZWx5CisgKiAgICBvcmdhbml6ZWQgZm9yIGNvbnZlbmllbnQgYWNjZXNz LgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNi0yMDI0LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZl bG9wbWVudCBHcm91cAorICoKKyAqCSAgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3Ryb3Zl LmgKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lmbmRlZiBQR1BBX1RST1ZFX0gKKyNk ZWZpbmUgUEdQQV9UUk9WRV9ICisKKyNpbmNsdWRlICJwZ3BhX2FzdC5oIgorCisjaW5jbHVkZSAi bm9kZXMvYml0bWFwc2V0LmgiCisKK3R5cGVkZWYgc3RydWN0IHBncGFfdHJvdmUgcGdwYV90cm92 ZTsKKworLyoKKyAqIEZsYWdzIHRoYXQgY2FuIGJlIHNldCBvbiBhIHBncGFfdHJvdmVfZW50cnkg dG8gaW5kaWNhdGUgd2hhdCBoYXBwZW5lZCB3aGVuCisgKiB0cnlpbmcgdG8gcGxhbiB1c2luZyBh ZHZpY2UuCisgKgorICogUEdQQV9URV9NQVRDSF9QQVJUSUFMIG1lYW5zIHRoYXQgd2UgZm91bmQg c29tZSBwYXJ0IG9mIHRoZSBxdWVyeSB0aGF0IGF0CisgKiBsZWFzdCBwYXJ0aWFsbHkgbWF0Y2hl ZCB0aGUgdGFyZ2V0OyBlLmcuIGdpdmVuIEpPSU5fT1JERVIoYSBiKSwgdGhpcyB3b3VsZAorICog YmUgc2V0IGlmIHdlIGV2ZXIgc2F3IGFueSBqb2lucmVsIGluY2x1ZGluZyBlaXRoZXIgImEiIG9y ICJiIi4KKyAqCisgKiBQR1BBX1RFX01BVENIX0ZVTEwgbWVhbnMgdGhhdCB3ZSBmb3VuZCBhbiBl eGFjdCBtYXRjaCBmb3IgdGhlIHRhcmdldDsgZS5nLgorICogZ2l2ZW4gSk9JTl9PUkRFUihhIGIp LCB0aGlzIHdvdWxkIGJlIHNldCBpZiB3ZSBzYXcgYSBqb2lucmVsIGNvbnRhaW5pbmcKKyAqIGV4 YWN0bHkgImEiIGFuZCAiYiIgYW5kIG5vdGhpbmcgZWxzZS4KKyAqCisgKiBQR1BBX1RFX0lOQVBQ TElDQUJMRSBtZWFucyB0aGF0IHRoZSBhZHZpY2UgZG9lc24ndCBwcm9wZXJseSBhcHBseSB0byB0 aGUKKyAqIHRhcmdldDsgZS5nLiBJTkRFWF9TQ0FOKGZvbyBiYXJfaWR4KSB3b3VsZCBiZSBzbyBt YXJrZWQgaWYgYmFyX2lkeCBkb2VzIG5vdAorICogZXhpc3Qgb24gZm9vLiBUaGUgZmFjdCB0aGF0 IHRoaXMgYml0IGhhcyBiZWVuIHNldCBkb2VzIG5vdCBtZWFuIHRoYXQgdGhlCisgKiBhZHZpY2Ug aGFkIG5vIGVmZmVjdC4KKyAqCisgKiBQR1BBX1RFX0NPTkZMSUNUSU5HIG1lYW5zIHRoYXQgYSBj b25mbGljdCB3YXMgZGV0ZWN0ZWQgYmV0d2VlbiB3aGF0IHRoaXMKKyAqIGFkdmljZSB3YW50cyBh bmQgd2hhdCBzb21lIG90aGVyIHBsYW4gYWR2aWNlIHdhbnRzOyBlLmcuIEpPSU5fT1JERVIoYSBi KQorICogd291bGQgY29uZmxpY3Qgd2l0aCBIQVNIX0pPSU4oYSksIGJlY2F1c2UgdGhlIGZvcm1l ciByZXF1aXJlcyAiYSIgdG8gYmUgdGhlCisgKiBvdXRlciB0YWJsZSB3aGlsZSB0aGUgbGF0dGVy IHJlcXVpcmVzIGl0IHRvIGJlIHRoZSBpbm5lciB0YWJsZS4KKyAqCisgKiBQR1BBX1RFX0ZBSUxF RCBtZWFucyB0aGF0IHRoZSByZXN1bHRpbmcgcGxhbiBkaWQgbm90IGNvbmZvcm0gdG8gdGhlIGFk dmljZS4KKyAqLworI2RlZmluZSBQR1BBX1RFX01BVENIX1BBUlRJQUwJCTB4MDAwMQorI2RlZmlu ZSBQR1BBX1RFX01BVENIX0ZVTEwJCQkweDAwMDIKKyNkZWZpbmUgUEdQQV9URV9JTkFQUExJQ0FC TEUJCTB4MDAwNAorI2RlZmluZSBQR1BBX1RFX0NPTkZMSUNUSU5HCQkJMHgwMDA4CisjZGVmaW5l IFBHUEFfVEVfRkFJTEVECQkJCTB4MDAxMAorCisvKgorICogRWFjaCBlbnRyeSBpbiBhIHRyb3Zl IG9mIGFkdmljZSByZXByZXNlbnRzIHRoZSBhcHBsaWNhdGlvbiBvZiBhIHRhZyB0bworICogYSBz aW5nbGUgdGFyZ2V0LgorICovCit0eXBlZGVmIHN0cnVjdCBwZ3BhX3Ryb3ZlX2VudHJ5Cit7CisJ cGdwYV9hZHZpY2VfdGFnX3R5cGUgdGFnOworCXBncGFfYWR2aWNlX3RhcmdldCAqdGFyZ2V0Owor CWludAkJCWZsYWdzOworfSBwZ3BhX3Ryb3ZlX2VudHJ5OworCisvKgorICogV2hhdCBraW5kIG9m IGluZm9ybWF0aW9uIGRvZXMgdGhlIGNhbGxlciB3YW50IHRvIGZpbmQgaW4gYSB0cm92ZT8KKyAq CisgKiBQR1BBX1RST1ZFX0xPT0tVUF9TQ0FOIG1lYW5zIHdlJ3JlIGxvb2tpbmcgZm9yIHNjYW4g YWR2aWNlLgorICoKKyAqIFBHUEFfVFJPVkVfTE9PS1VQX0pPSU4gbWVhbnMgd2UncmUgbG9va2lu ZyBmb3Igam9pbi1yZWxhdGVkIGFkdmljZS4KKyAqIFRoaXMgaW5jbHVkZXMgam9pbiBvcmRlciBh ZHZpY2UsIGpvaW4gbWV0aG9kIGFkdmljZSwgYW5kIHNlbWlqb2luLXVuaXF1ZW5lc3MKKyAqIGFk dmljZS4KKyAqCisgKiBQR1BBX1RST1ZFX0xPT0tVUF9SRUwgbWVhbnMgd2UncmUgbG9va2luZyBm b3IgZ2VuZXJhbCBhZHZpY2UgYWJvdXQgdGhpcworICogYSBSZWxPcHRJbmZvIHRoYXQgbWF5IGNv cnJlc3BvbmQgdG8gZWl0aGVyIGEgc2NhbiBvciBhIGpvaW4uIFRoaXMgaW5jbHVkZXMKKyAqIGdh dGhlci1yZWxhdGVkIGFkdmljZSBhbmQgcGFydGl0aW9ud2lzZSBhZHZpY2UuIE5vdGUgdGhhdCBw YXJ0aXRpb253aXNlCisgKiBhZHZpY2UgbWlnaHQgc2VlbSBsaWtlIGpvaW4gYWR2aWNlLCBidXQg dGhhdCdzIG5vdCBhIGhlbHBmdWwgd2F5IG9mIHZpZXdpbmcKKyAqIHRoZSBtYXR0ZXIgYmVjYXVz ZSAoMSkgcGFydGl0aW9ud2lzZSBhZHZpY2UgaXMgYWxzbyByZWxldmFudCBhdCB0aGUgc2Nhbgor ICogbGV2ZWwgYW5kICgyKSBvdGhlciB0eXBlcyBvZiBqb2luIGFkdmljZSBhZmZlY3Qgb25seSB3 aGF0IHRvIGRvIGZyb20KKyAqIGpvaW5fcGF0aF9zZXR1cF9ob29rLCBidXQgcGFydGl0aW9ud2lz ZSBhZHZpY2UgYWZmZWN0cyB3aGF0IHRvIGRvIGluCisgKiBqb2lucmVsX3NldHVwX2hvb2suCisg Ki8KK3R5cGVkZWYgZW51bSBwZ3BhX3Ryb3ZlX2xvb2t1cF90eXBlCit7CisJUEdQQV9UUk9WRV9M T09LVVBfSk9JTiwKKwlQR1BBX1RST1ZFX0xPT0tVUF9SRUwsCisJUEdQQV9UUk9WRV9MT09LVVBf U0NBTgorfSBwZ3BhX3Ryb3ZlX2xvb2t1cF90eXBlOworCisvKgorICogVGhpcyBzdHJ1Y3QgaXMg dXNlZCB0byBzdG9yZSB0aGUgcmVzdWx0IG9mIGEgdHJvdmUgbG9va3VwLiBGb3IgZWFjaCBtZW1i ZXIKKyAqIG9mICJpbmRleGVzIiwgdGhlIGVudHJ5IGF0IHRoZSBjb3JyZXNwb25kaW5nIG9mZnNl dCB3aXRoaW4gImVudHJpZXMiIGlzIG9uZQorICogb2YgdGhlIHJlc3VsdHMuCisgKi8KK3R5cGVk ZWYgc3RydWN0IHBncGFfdHJvdmVfcmVzdWx0Cit7CisJcGdwYV90cm92ZV9lbnRyeSAqZW50cmll czsKKwlCaXRtYXBzZXQgICppbmRleGVzOworfSBwZ3BhX3Ryb3ZlX3Jlc3VsdDsKKworZXh0ZXJu IHBncGFfdHJvdmUgKnBncGFfYnVpbGRfdHJvdmUoTGlzdCAqYWR2aWNlX2l0ZW1zKTsKK2V4dGVy biB2b2lkIHBncGFfdHJvdmVfbG9va3VwKHBncGFfdHJvdmUgKnRyb3ZlLAorCQkJCQkJCSAgcGdw YV90cm92ZV9sb29rdXBfdHlwZSB0eXBlLAorCQkJCQkJCSAgaW50IG5yaWRzLAorCQkJCQkJCSAg cGdwYV9pZGVudGlmaWVyICpyaWRzLAorCQkJCQkJCSAgcGdwYV90cm92ZV9yZXN1bHQgKnJlc3Vs dCk7CitleHRlcm4gdm9pZCBwZ3BhX3Ryb3ZlX2xvb2t1cF9hbGwocGdwYV90cm92ZSAqdHJvdmUs CisJCQkJCQkJCSAgcGdwYV90cm92ZV9sb29rdXBfdHlwZSB0eXBlLAorCQkJCQkJCQkgIHBncGFf dHJvdmVfZW50cnkgKiplbnRyaWVzLAorCQkJCQkJCQkgIGludCAqbmVudHJpZXMpOworZXh0ZXJu IGNoYXIgKnBncGFfY3N0cmluZ190cm92ZV9lbnRyeShwZ3BhX3Ryb3ZlX2VudHJ5ICplbnRyeSk7 CitleHRlcm4gdm9pZCBwZ3BhX3Ryb3ZlX3NldF9mbGFncyhwZ3BhX3Ryb3ZlX2VudHJ5ICplbnRy aWVzLAorCQkJCQkJCQkgQml0bWFwc2V0ICppbmRleGVzLCBpbnQgZmxhZ3MpOworZXh0ZXJuIHZv aWQgcGdwYV90cm92ZV9hcHBlbmRfZmxhZ3MoU3RyaW5nSW5mbyBidWYsIGludCBmbGFncyk7CisK KyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3dhbGtlci5j IGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3dhbGtlci5jCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4yMTBkMzA4OTFiMgotLS0gL2Rldi9udWxsCisrKyBiL2Nv bnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV93YWxrZXIuYwpAQCAtMCwwICsxLDEwMDYgQEAKKy8q LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHBncGFfd2Fsa2VyLmMKKyAqCSAgUGxhbiB0cmVlIGl0 ZXJhdGlvbgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNi0yMDI1LCBQb3N0Z3JlU1FMIEdsb2Jh bCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqCSAgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3Bh X3dhbGtlci5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpbmNsdWRlICJwb3N0Z3Jl cy5oIgorCisjaW5jbHVkZSAicGdwYV9qb2luLmgiCisjaW5jbHVkZSAicGdwYV9zY2FuLmgiCisj aW5jbHVkZSAicGdwYV93YWxrZXIuaCIKKworI2luY2x1ZGUgIm5vZGVzL3BsYW5ub2Rlcy5oIgor I2luY2x1ZGUgInBhcnNlci9wYXJzZXRyZWUuaCIKKyNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUu aCIKKworc3RhdGljIHZvaWQgcGdwYV93YWxrX3JlY3Vyc2l2ZWx5KHBncGFfcGxhbl93YWxrZXJf Y29udGV4dCAqd2Fsa2VyLCBQbGFuICpwbGFuLAorCQkJCQkJCQkgIGJvb2wgd2l0aGluX2pvaW5f cHJvYmxlbSwKKwkJCQkJCQkJICBwZ3BhX2pvaW5fdW5yb2xsZXIgKmpvaW5fdW5yb2xsZXIsCisJ CQkJCQkJCSAgTGlzdCAqYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzLAorCQkJCQkJCQkgIGJvb2wgYmVu ZWF0aF9hbnlfZ2F0aGVyKTsKK3N0YXRpYyBCaXRtYXBzZXQgKnBncGFfcHJvY2Vzc191bnJvbGxl ZF9qb2luKHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJCQkJCQkJCQkgcGdw YV91bnJvbGxlZF9qb2luICp1am9pbik7CisKK3N0YXRpYyBwZ3BhX3F1ZXJ5X2ZlYXR1cmUgKnBn cGFfYWRkX2ZlYXR1cmUocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsCisJCQkJCQkJ CQkJCXBncGFfcWZfdHlwZSB0eXBlLAorCQkJCQkJCQkJCQlQbGFuICpwbGFuKTsKKworc3RhdGlj IHZvaWQgcGdwYV9xZl9hZGRfcnRpKExpc3QgKmFjdGl2ZV9xdWVyeV9mZWF0dXJlcywgSW5kZXgg cnRpKTsKK3N0YXRpYyB2b2lkIHBncGFfcWZfYWRkX3J0aXMoTGlzdCAqYWN0aXZlX3F1ZXJ5X2Zl YXR1cmVzLCBCaXRtYXBzZXQgKnJlbGlkcyk7CitzdGF0aWMgdm9pZCBwZ3BhX3FmX2FkZF9wbGFu X3J0aXMoTGlzdCAqYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzLCBQbGFuICpwbGFuLAorCQkJCQkJCQkg IExpc3QgKnJ0YWJsZSk7CisKK3N0YXRpYyBib29sIHBncGFfd2Fsa2VyX2pvaW5fb3JkZXJfbWF0 Y2hlcyhwZ3BhX3Vucm9sbGVkX2pvaW4gKnVqb2luLAorCQkJCQkJCQkJCSAgIEluZGV4IHJ0YWJs ZV9sZW5ndGgsCisJCQkJCQkJCQkJICAgcGdwYV9pZGVudGlmaWVyICpydF9pZGVudGlmaWVycywK KwkJCQkJCQkJCQkgICBwZ3BhX2FkdmljZV90YXJnZXQgKnRhcmdldCwKKwkJCQkJCQkJCQkgICBi b29sIHRvcGxldmVsKTsKK3N0YXRpYyBib29sIHBncGFfd2Fsa2VyX2pvaW5fb3JkZXJfbWF0Y2hl c19tZW1iZXIocGdwYV9qb2luX21lbWJlciAqbWVtYmVyLAorCQkJCQkJCQkJCQkJICBJbmRleCBy dGFibGVfbGVuZ3RoLAorCQkJCQkJCQkJCQkJICBwZ3BhX2lkZW50aWZpZXIgKnJ0X2lkZW50aWZp ZXJzLAorCQkJCQkJCQkJCQkJICBwZ3BhX2FkdmljZV90YXJnZXQgKnRhcmdldCk7CitzdGF0aWMg cGdwYV9zY2FuICpwZ3BhX3dhbGtlcl9maW5kX3NjYW4ocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0 ICp3YWxrZXIsCisJCQkJCQkJCQkJcGdwYV9zY2FuX3N0cmF0ZWd5IHN0cmF0ZWd5LAorCQkJCQkJ CQkJCUJpdG1hcHNldCAqcmVsaWRzKTsKK3N0YXRpYyBib29sIHBncGFfd2Fsa2VyX2luZGV4X3Rh cmdldF9tYXRjaGVzX3BsYW4ocGdwYV9pbmRleF90YXJnZXQgKml0YXJnZXQsCisJCQkJCQkJCQkJ CQkgIFBsYW4gKnBsYW4pOworc3RhdGljIGJvb2wgcGdwYV93YWxrZXJfY29udGFpbnNfZmVhdHVy ZShwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwKKwkJCQkJCQkJCQkgcGdwYV9xZl90 eXBlIHR5cGUsCisJCQkJCQkJCQkJIEJpdG1hcHNldCAqcmVsaWRzKTsKK3N0YXRpYyBib29sIHBn cGFfd2Fsa2VyX2NvbnRhaW5zX2pvaW4ocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIs CisJCQkJCQkJCQkgIHBncGFfam9pbl9zdHJhdGVneSBzdHJhdGVneSwKKwkJCQkJCQkJCSAgQml0 bWFwc2V0ICpyZWxpZHMpOworc3RhdGljIGJvb2wgcGdwYV93YWxrZXJfY29udGFpbnNfbm9fZ2F0 aGVyKHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJCQkJCQkJCSAgIEJpdG1h cHNldCAqcmVsaWRzKTsKKworLyoKKyAqIFRvcC1sZXZlbCBlbnRyeXBvaW50IGZvciB0aGUgcGxh biB0cmVlIHdhbGsuCisgKgorICogUG9wdWxhdGVzIHdhbGtlciBiYXNlZCBvbiBhIHRyYXZlcnNh bCBvZiB0aGUgUGxhbiB0cmVlcyBpbiBwc3RtdC4KKyAqCisgKiBzal91bmlxdWVfcmVscyBpcyBh IGxpc3Qgb2YgcGdwYV9zal91bmlxdWVfcmVsIG9iamVjdHMsIG9uZSBmb3IgZWFjaAorICogcmVs YXRpb24gd2UgY29uc2lkZXJlZCBtYWtpbmcgdW5pcXVlIGFzIHBhcnQgb2Ygc2VtaWpvaW4gcGxh bm5pbmcuCisgKi8KK3ZvaWQKK3BncGFfcGxhbl93YWxrZXIocGdwYV9wbGFuX3dhbGtlcl9jb250 ZXh0ICp3YWxrZXIsIFBsYW5uZWRTdG10ICpwc3RtdCwKKwkJCQkgTGlzdCAqc2pfdW5pcXVlX3Jl bHMpCit7CisJTGlzdENlbGwgICAqbGM7CisJTGlzdAkgICAqc2pfdW5pcXVlX3J0aXMgPSBOVUxM OworCUxpc3QJICAgKnNqX25vbnVuaXF1ZV9xZnMgPSBOVUxMOworCisJLyogSW5pdGlhbGl6YXRp b24uICovCisJbWVtc2V0KHdhbGtlciwgMCwgc2l6ZW9mKHBncGFfcGxhbl93YWxrZXJfY29udGV4 dCkpOworCXdhbGtlci0+cHN0bXQgPSBwc3RtdDsKKworCS8qIFdhbGsgdGhlIG1haW4gcGxhbiB0 cmVlLiAqLworCXBncGFfd2Fsa19yZWN1cnNpdmVseSh3YWxrZXIsIHBzdG10LT5wbGFuVHJlZSwg MCwgTlVMTCwgTklMLCBmYWxzZSk7CisKKwkvKiBNYWluIHBsYW4gdHJlZSB3YWxrIHdvbid0IHJl YWNoIHN1YnBsYW5zLCBzbyB3YWxrIHRob3NlLiAqLworCWZvcmVhY2gobGMsIHBzdG10LT5zdWJw bGFucykKKwl7CisJCVBsYW4JICAgKnBsYW4gPSBsZmlyc3QobGMpOworCisJCWlmIChwbGFuICE9 IE5VTEwpCisJCQlwZ3BhX3dhbGtfcmVjdXJzaXZlbHkod2Fsa2VyLCBwbGFuLCAwLCBOVUxMLCBO SUwsIGZhbHNlKTsKKwl9CisKKwkvKiBBZGp1c3QgUlRJcyBmcm9tIHNqX3VuaXF1ZV9yZWxzIGZv ciB0aGUgZmxhdHRlbmVkIHJhbmdlIHRhYmxlLiAqLworCWZvcmVhY2hfcHRyKHBncGFfc2pfdW5p cXVlX3JlbCwgdXIsIHNqX3VuaXF1ZV9yZWxzKQorCXsKKwkJaW50CQkJcnRpbmRleCA9IC0xOwor CQlpbnQJCQlydG9mZnNldCA9IDA7CisJCWJvb2wJCWR1bW15ID0gZmFsc2U7CisJCUJpdG1hcHNl dCAgKnJlbGlkcyA9IE5VTEw7CisKKwkJLyogSWYgdGhpcyBpcyBhIHN1YnBsYW4sIGZpbmQgdGhl IHJhbmdlIHRhYmxlIG9mZnNldC4gKi8KKwkJaWYgKHVyLT5wbGFuX25hbWUgIT0gTlVMTCkKKwkJ eworCQkJZm9yZWFjaF9ub2RlKFN1YlBsYW5SVEluZm8sIHJ0aW5mbywgcHN0bXQtPnN1YnJ0aW5m b3MpCisJCQl7CisJCQkJaWYgKHN0cmNtcCh1ci0+cGxhbl9uYW1lLCBydGluZm8tPnBsYW5fbmFt ZSkgPT0gMCkKKwkJCQl7CisJCQkJCXJ0b2Zmc2V0ID0gcnRpbmZvLT5ydG9mZnNldDsKKwkJCQkJ ZHVtbXkgPSBydGluZm8tPmR1bW15OworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisKKwkJCWlm IChydG9mZnNldCA9PSAwKQorCQkJCWVsb2coRVJST1IsICJubyBydG9mZnNldCBmb3IgcGxhbiAl cyIsIHVyLT5wbGFuX25hbWUpOworCQl9CisKKwkJLyogSWYgdGhpcyBlbnRyeSBwZXJ0YWlucyB0 byBhIGR1bW15IHN1YnF1ZXJ5LCBpZ25vcmUgaXQuICovCisJCWlmIChkdW1teSkKKwkJCWNvbnRp bnVlOworCisJCS8qIE9mZnNldCBlYWNoIGVudHJ5IGZyb20gdGhlIG9yaWdpbmFsIHNldC4gKi8K KwkJd2hpbGUgKChydGluZGV4ID0gYm1zX25leHRfbWVtYmVyKHVyLT5yZWxpZHMsIHJ0aW5kZXgp KSA+PSAwKQorCQkJcmVsaWRzID0gYm1zX2FkZF9tZW1iZXIocmVsaWRzLCBydGluZGV4ICsgcnRv ZmZzZXQpOworCisJCS8qIFN0b3JlIHRoZSByZXN1bHRpbmcgc2V0LiAqLworCQlzal91bmlxdWVf cnRpcyA9IGxhcHBlbmQoc2pfdW5pcXVlX3J0aXMsIHJlbGlkcyk7CisJfQorCisJLyoKKwkgKiBS ZW1vdmUgYW55IG5vbi11bmlxdWUgc2Vtam9pbiBxdWVyeSBmZWF0dXJlcyBmb3Igd2hpY2ggbWFr aW5nIHRoZSByZWwKKwkgKiB1bmlxdWUgd2Fzbid0IGNvbnNpZGVyZWQuCisJICovCisJZm9yZWFj aF9wdHIocGdwYV9xdWVyeV9mZWF0dXJlLCBxZiwKKwkJCQl3YWxrZXItPnF1ZXJ5X2ZlYXR1cmVz W1BHUEFRRl9TRU1JSk9JTl9OT05fVU5JUVVFXSkKKwl7CisJCWlmIChsaXN0X21lbWJlcihzal91 bmlxdWVfcnRpcywgcWYtPnJlbGlkcykpCisJCQlzal9ub251bmlxdWVfcWZzID0gbGFwcGVuZChz al9ub251bmlxdWVfcWZzLCBxZik7CisJfQorCXdhbGtlci0+cXVlcnlfZmVhdHVyZXNbUEdQQVFG X1NFTUlKT0lOX05PTl9VTklRVUVdID0gc2pfbm9udW5pcXVlX3FmczsKKworCS8qCisJICogSWYg d2UgZmluZCBhbnkgY2FzZXMgd2hlcmUgYW5hbHlzaXMgb2YgdGhlIFBsYW4gdHJlZSBzaG93cyB0 aGF0IHRoZQorCSAqIHNlbWlqb2luIHdhcyBtYWRlIHVuaXF1ZSBidXQgdGhpcyBwb3NzaWJpbGl0 eSB3YXMgbmV2ZXIgb2JzZXJ2ZWQgdG8gYmUKKwkgKiBjb25zaWRlcmVkIGR1cmluZyBwbGFubmlu ZywgdGhlbiB3ZSBoYXZlIGEgYnVnIHNvbWV3aGVyZS4KKwkgKi8KKwlmb3JlYWNoX3B0cihwZ3Bh X3F1ZXJ5X2ZlYXR1cmUsIHFmLAorCQkJCXdhbGtlci0+cXVlcnlfZmVhdHVyZXNbUEdQQVFGX1NF TUlKT0lOX1VOSVFVRV0pCisJeworCQlpZiAoIWxpc3RfbWVtYmVyKHNqX3VuaXF1ZV9ydGlzLCBx Zi0+cmVsaWRzKSkKKwkJeworCQkJU3RyaW5nSW5mb0RhdGEgYnVmOworCisJCQlpbml0U3RyaW5n SW5mbygmYnVmKTsKKwkJCW91dEJpdG1hcHNldCgmYnVmLCBxZi0+cmVsaWRzKTsKKwkJCWVsb2co RVJST1IsCisJCQkJICJ1bmlxdWUgc2VtaWpvaW4gZm91bmQgZm9yIHJlbGlkcyAlcyBidXQgbm90 IG9ic2VydmVkIGR1cmluZyBwbGFubmluZyIsCisJCQkJIGJ1Zi5kYXRhKTsKKwkJfQorCX0KK30K KworLyoKKyAqIE1haW4gd29ya2hvcnNlIGZvciB0aGUgcGxhbiB0cmVlIHdhbGsuCisgKgorICog SWYgd2l0aGluX2pvaW5fcHJvYmxlbSBpcyB0cnVlLCB3ZSBlbmNvdW50ZXJlZCBhIGpvaW4gYXQg c29tZSBoaWdoZXIgbGV2ZWwKKyAqIG9mIHRoZSB0cmVlIHdhbGsgYW5kIGhhdmVuJ3QgeWV0IGRl c2NlbmRlZCBvdXQgb2YgdGhlIHBvcnRpb24gb2YgdGhlIHBsYW4KKyAqIHRyZWUgdGhhdCBpcyBw YXJ0IG9mIHRoYXQgc2FtZSBqb2luIHByb2JsZW0uIFdlJ3JlIG5vIGxvbmdlciBpbiB0aGUgc2Ft ZQorICogam9pbiBwcm9ibGVtIGlmICgxKSB3ZSBjcm9zcyBpbnRvIGEgZGlmZmVyZW50IHN1YnF1 ZXJ5IG9yICgyKSB3ZSBkZXNjZW5kCisgKiB0aHJvdWdoIGFuIEFwcGVuZCBvciBNZXJnZUFwcGVu ZCBub2RlLCBiZWxvdyB3aGljaCBhbnkgZnVydGhlciBqb2lucyB3b3VsZAorICogYmUgcGFydGl0 aW9ud2lzZSBqb2lucyBwbGFubmVkIHNlcGFyYXRlbHkgZnJvbSB0aGUgb3V0ZXIgam9pbiBwcm9i bGVtLgorICoKKyAqIElmIGpvaW5fdW5yb2xsZXIgIT0gTlVMTCwgdGhlIGpvaW4gdW5yb2xsZXIg Y29kZSBleHBlY3RzIHVzIHRvIGZpbmQgYSBqb2luCisgKiB0aGF0IHNob3VsZCBiZSB1bnJvbGxl ZCBpbnRvIHRoYXQgb2JqZWN0LiBUaGlzIGltcGxpZXMgdGhhdCB3ZSdyZSB3aXRoaW4gYQorICog am9pbiBwcm9ibGVtLCBidXQgdGhlIHJldmVyc2UgaXMgbm90IHRydWU6IHdoZW4gd2UndmUgdHJh dmVyc2VkIGFsbCB0aGUKKyAqIGpvaW5zIGJ1dCBhcmUgc3RpbGwgbG9va2luZyBmb3IgdGhlIHNj YW4gdGhhdCBpcyB0aGUgbGVhZiBvZiB0aGUgam9pbiB0cmVlLAorICogam9pbl91bnJvbGxlciB3 aWxsIGJlIE5VTEwgYnV0IHdpdGhpbl9qb2luX3Byb2JsZW0gd2lsbCBiZSB0cnVlLgorICoKKyAq IEVhY2ggZWxlbWVudCBvZiBhY3RpdmVfcXVlcnlfZmVhdHVyZXMgY29ycmVzcG9uZHMgdG8gc29t ZSBpdGVtIG9mIGFkdmljZQorICogdGhhdCBuZWVkcyB0byBlbnVtZXJhdGUgYWxsIHRoZSByZWxh dGlvbnMgaXQgYWZmZWN0cy4gV2UgYWRkIFJUSXMgd2UgZmluZAorICogZHVyaW5nIHRyZWUgdHJh dmVyc2FsIHRvIGVhY2ggb2YgdGhlc2UgcXVlcnkgZmVhdHVyZXMuCisgKgorICogSWYgYmVuZWF0 aF9hbnlfZ2F0aGVyID09IHRydWUsIHNvbWUgaGlnaGVyIGxldmVsIG9mIHRoZSB0cmVlIHRyYXZl cnNhbCBmb3VuZAorICogYSBHYXRoZXIgb3IgR2F0aGVyIE1lcmdlIG5vZGUuCisgKi8KK3N0YXRp YyB2b2lkCitwZ3BhX3dhbGtfcmVjdXJzaXZlbHkocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3 YWxrZXIsIFBsYW4gKnBsYW4sCisJCQkJCSAgYm9vbCB3aXRoaW5fam9pbl9wcm9ibGVtLAorCQkJ CQkgIHBncGFfam9pbl91bnJvbGxlciAqam9pbl91bnJvbGxlciwKKwkJCQkJICBMaXN0ICphY3Rp dmVfcXVlcnlfZmVhdHVyZXMsCisJCQkJCSAgYm9vbCBiZW5lYXRoX2FueV9nYXRoZXIpCit7CisJ cGdwYV9qb2luX3Vucm9sbGVyICpvdXRlcl9qb2luX3Vucm9sbGVyID0gTlVMTDsKKwlwZ3BhX2pv aW5fdW5yb2xsZXIgKmlubmVyX2pvaW5fdW5yb2xsZXIgPSBOVUxMOworCWJvb2wJCWpvaW5fdW5y b2xsZXJfdG9wbGV2ZWwgPSBmYWxzZTsKKwlMaXN0CSAgICpwdXNoZG93bl9xdWVyeV9mZWF0dXJl cyA9IE5JTDsKKwlMaXN0Q2VsbCAgICpsYzsKKwlMaXN0CSAgICpleHRyYXBsYW5zID0gTklMOwor CUxpc3QJICAgKmVsaWRlZF9ub2RlcyA9IE5JTDsKKworCUFzc2VydCh3aXRoaW5fam9pbl9wcm9i bGVtIHx8IGpvaW5fdW5yb2xsZXIgPT0gTlVMTCk7CisKKwkvKgorCSAqIElmIHRoaXMgaXMgYSBH YXRoZXIgb3IgR2F0aGVyIE1lcmdlIG5vZGUsIGRpcmVjdGx5IGFkZCBpdCB0byB0aGUgbGlzdAor CSAqIG9mIGN1cnJlbnRseS1hY3RpdmUgcXVlcnkgZmVhdHVyZXMuIChFeGNlcHRpb246IERpc3Jl Z2FyZCBzaW5nbGVfY29weQorCSAqIEdhdGhlciBub2Rlcy4gVGhlc2UgYXJlIGNyZWF0ZWQgYnkg ZGVidWdfcGFyYWxsZWxfcXVlcnksIGFuZCBoYXZpbmcKKwkgKiB0aGVtIGFmZmVjdCB0aGUgcGxh biBhZHZpY2UgaXMgY291bnRlcnByb2R1Y3RpdmUsIGFzIHRoZSByZXN1bHQgd2lsbCBiZQorCSAq IHRvIGFkdmlzZSB0aGUgdXNlIG9mIGEgcmVhbCBHYXRoZXIgbm9kZSwgcmF0aGVyIHRoYW4gYSBz aW5nbGUgY29weQorCSAqIG9uZS4pCisJICoKKwkgKiBPdGhlcndpc2UsIGNoZWNrIHRoZSBmdXR1 cmVfcXVlcnlfZmVhdHVyZXMgbGlzdCB0byBzZWUgd2hldGhlciB0aGlzIHdhcworCSAqIHByZXZp b3VzbHkgaWRlbnRpZmllZCBhcyBhIHBsYW4gbm9kZSB0aGF0IG5lZWRzIHRvIGJlIHRyZWF0ZWQg YXMgYQorCSAqIHF1ZXJ5IGZlYXR1cmUuCisJICoKKwkgKiBOb3RlIHRoYXQgdGhlIGNhbGxlciBh bHNvIGhhcyBhIGNvcHkgdG8gYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzLCBzbyB3ZQorCSAqIGNhbid0 IGRlc3RydWN0aXZlbHkgbW9kaWZ5IGl0IHdpdGhvdXQgbWFraW5nIGEgY29weS4KKwkgKi8KKwlp ZiAoSXNBKHBsYW4sIEdhdGhlcikgJiYgISgoR2F0aGVyICopIHBsYW4pLT5zaW5nbGVfY29weSkK Kwl7CisJCWFjdGl2ZV9xdWVyeV9mZWF0dXJlcyA9CisJCQlsYXBwZW5kKGxpc3RfY29weShhY3Rp dmVfcXVlcnlfZmVhdHVyZXMpLAorCQkJCQlwZ3BhX2FkZF9mZWF0dXJlKHdhbGtlciwgUEdQQVFG X0dBVEhFUiwgcGxhbikpOworCQliZW5lYXRoX2FueV9nYXRoZXIgPSB0cnVlOworCX0KKwllbHNl IGlmIChJc0EocGxhbiwgR2F0aGVyTWVyZ2UpKQorCXsKKwkJYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVz ID0KKwkJCWxhcHBlbmQobGlzdF9jb3B5KGFjdGl2ZV9xdWVyeV9mZWF0dXJlcyksCisJCQkJCXBn cGFfYWRkX2ZlYXR1cmUod2Fsa2VyLCBQR1BBUUZfR0FUSEVSX01FUkdFLCBwbGFuKSk7CisJCWJl bmVhdGhfYW55X2dhdGhlciA9IHRydWU7CisJfQorCWVsc2UKKwl7CisJCWZvcmVhY2hfcHRyKHBn cGFfcXVlcnlfZmVhdHVyZSwgcWYsIHdhbGtlci0+ZnV0dXJlX3F1ZXJ5X2ZlYXR1cmVzKQorCQl7 CisJCQlpZiAocWYtPnBsYW4gPT0gcGxhbikKKwkJCXsKKwkJCQlhY3RpdmVfcXVlcnlfZmVhdHVy ZXMgPSBsaXN0X2NvcHkoYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzKTsKKwkJCQlhY3RpdmVfcXVlcnlf ZmVhdHVyZXMgPSBsYXBwZW5kKGFjdGl2ZV9xdWVyeV9mZWF0dXJlcywgcWYpOworCQkJCXdhbGtl ci0+ZnV0dXJlX3F1ZXJ5X2ZlYXR1cmVzID0KKwkJCQkJbGlzdF9kZWxldGVfcHRyKHdhbGtlci0+ ZnV0dXJlX3F1ZXJ5X2ZlYXR1cmVzLCBwbGFuKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0K KworCS8qCisJICogRmluZCBhbGwgZWxpZGVkIG5vZGVzIGZvciB0aGlzIFBsYW4gbm9kZS4KKwkg Ki8KKwlmb3JlYWNoX25vZGUoRWxpZGVkTm9kZSwgbiwgd2Fsa2VyLT5wc3RtdC0+ZWxpZGVkTm9k ZXMpCisJeworCQlpZiAobi0+cGxhbl9ub2RlX2lkID09IHBsYW4tPnBsYW5fbm9kZV9pZCkKKwkJ CWVsaWRlZF9ub2RlcyA9IGxhcHBlbmQoZWxpZGVkX25vZGVzLCBuKTsKKwl9CisKKwkvKiBJZiB3 ZSBmb3VuZCBhbnkgZWxpZGVkX25vZGVzLCBoYW5kbGUgdGhlbS4gKi8KKwlpZiAoZWxpZGVkX25v ZGVzICE9IE5JTCkKKwl7CisJCWludAkJCW51bV9lbGlkZWRfbm9kZXMgPSBsaXN0X2xlbmd0aChl bGlkZWRfbm9kZXMpOworCQlFbGlkZWROb2RlICpsYXN0X2VsaWRlZF9ub2RlOworCisJCS8qCisJ CSAqIFJUSXMgZm9yIHRoZSBmaW5hbCAtLSBhbmQgdGh1cyBsb2dpY2FsbHkgdXBwZXJtb3N0IC0t IGVsaWRlZCBub2RlCisJCSAqIHNob3VsZCBiZSBjb2xsZWN0ZWQgZm9yIHF1ZXJ5IGZlYXR1cmVz IHBhc3NlZCBkb3duIGJ5IHRoZSBjYWxsZXIuCisJCSAqIEhvd2V2ZXIsIGVsaWRlZCBub2RlcyBh Y3QgYXMgYmFycmllcnMgdG8gcXVlcnkgZmVhdHVyZXMsIHdoaWNoCisJCSAqIG1lYW5zIHRoYXQg KDEpIHRoZSByZW1haW5pbmcgZWxpZGVkIG5vZGVzLCBpZiBhbnksIHNob3VsZCBiZQorCQkgKiBp Z25vcmVkIGZvciBwdXJwb3NlcyBvZiBxdWVyeSBmZWF0dXJlcyBhbmQgKDIpIHRoZSBsaXN0IG9m IGFjdGl2ZQorCQkgKiBxdWVyeSBmZWF0dXJlcyBzaG91bGQgYmUgcmVzZXQgdG8gZW1wdHkgc28g dGhhdCB3ZSBkbyBub3QgYWRkIFJUSXMKKwkJICogZnJvbSB0aGUgcGxhbiBub2RlIHRoYXQgaXMg bG9naWNhbGx5IGJlbmVhdGggdGhlIGVsaWRlZCBub2RlIHRvIHRoZQorCQkgKiBxdWVyeSBmZWF0 dXJlcyBwYXNzZWQgZG93biBmcm9tIHRoZSBjYWxsZXIuCisJCSAqLworCQlsYXN0X2VsaWRlZF9u b2RlID0gbGlzdF9udGgoZWxpZGVkX25vZGVzLCBudW1fZWxpZGVkX25vZGVzIC0gMSk7CisJCXBn cGFfcWZfYWRkX3J0aXMoYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzLAorCQkJCQkJIHBncGFfZmlsdGVy X291dF9qb2luX3JlbGlkcyhsYXN0X2VsaWRlZF9ub2RlLT5yZWxpZHMsCisJCQkJCQkJCQkJCQkJ IHdhbGtlci0+cHN0bXQtPnJ0YWJsZSkpOworCQlhY3RpdmVfcXVlcnlfZmVhdHVyZXMgPSBOSUw7 CisKKwkJLyoKKwkJICogSWYgd2UncmUgd2l0aGluIGEgam9pbiBwcm9ibGVtLCB0aGUgam9pbl91 bnJvbGxlciBpcyByZXNwb25zaWJsZQorCQkgKiBmb3IgYnVpbGRpbmcgdGhlIHNjYW4gZm9yIHRo ZSBmaW5hbCBlbGlkZWQgbm9kZSwgc28gdGhyb3cgaXQgb3V0LgorCQkgKi8KKwkJaWYgKHdpdGhp bl9qb2luX3Byb2JsZW0pCisJCQllbGlkZWRfbm9kZXMgPSBsaXN0X3RydW5jYXRlKGVsaWRlZF9u b2RlcywgbnVtX2VsaWRlZF9ub2RlcyAtIDEpOworCisJCS8qIEJ1aWxkIHNjYW5zIGZvciBhbGwg KG9yIHRoZSByZW1haW5pbmcpIGVsaWRlZCBub2Rlcy4gKi8KKwkJZm9yZWFjaF9ub2RlKEVsaWRl ZE5vZGUsIGVsaWRlZF9ub2RlLCBlbGlkZWRfbm9kZXMpCisJCXsKKwkJCSh2b2lkKSBwZ3BhX2J1 aWxkX3NjYW4od2Fsa2VyLCBwbGFuLCBlbGlkZWRfbm9kZSwKKwkJCQkJCQkJICAgYmVuZWF0aF9h bnlfZ2F0aGVyLCB3aXRoaW5fam9pbl9wcm9ibGVtKTsKKwkJfQorCisJCS8qCisJCSAqIElmIHRo ZXJlIHdlcmUgYW55IGVsaWRlZCBub2RlcywgdGhlbiBldmVyeXRoaW5nIGJlbmVhdGggdGhvc2Ug bm9kZXMKKwkJICogaXMgbm90IHBhcnQgb2YgdGhlIHNhbWUgam9pbiBwcm9ibGVtLgorCQkgKgor CQkgKiBJbiBtb3JlIGRldGFpbCwgaWYgYW4gQXBwZW5kIG9yIE1lcmdlQXBwZW5kIHdhcyBlbGlk ZWQsIHRoZW4gYQorCQkgKiBwYXJ0aXRpb253aXNlIGpvaW4gd2FzIGNob3NlbiBhbmQgb25seSBh IHNpbmdsZSBjaGlsZCBzdXJ2aXZlZDsgaWYKKwkJICogYSBTdWJxdWVyeVNjYW4gd2FzIGVsaWRl ZCwgdGhlIHN1YnF1ZXJ5IHdhcyBwbGFubmVkIHdpdGhvdXQKKwkJICogZmxhdHRlbmluZyBpdCBp bnRvIHRoZSBwYXJlbnQuCisJCSAqLworCQl3aXRoaW5fam9pbl9wcm9ibGVtID0gZmFsc2U7CisJ CWpvaW5fdW5yb2xsZXIgPSBOVUxMOworCX0KKworCS8qCisJICogSWYgd2UncmUgd2l0aGluIGEg am9pbiBwcm9ibGVtLCB0aGUgam9pbiB1bnJvbGxlciBpcyByZXNwb25zaWJsZSBmb3IKKwkgKiBi dWlsZGluZyBhbnkgcmVxdWlyZWQgc2NhbiBmb3IgdGhpcyBub2RlLiBJZiBub3QsIHdlIGRvIGl0 IGhlcmUuCisJICovCisJaWYgKCF3aXRoaW5fam9pbl9wcm9ibGVtKQorCQkodm9pZCkgcGdwYV9i dWlsZF9zY2FuKHdhbGtlciwgcGxhbiwgTlVMTCwgYmVuZWF0aF9hbnlfZ2F0aGVyLCBmYWxzZSk7 CisKKwkvKgorCSAqIElmIHRoaXMgam9pbiBuZWVkcyB0byB1bnJvbGxlZCBidXQgdGhlcmUncyBu byBqb2luIHVucm9sbGVyIGFscmVhZHkKKwkgKiBhdmFpbGFibGUsIGNyZWF0ZSBvbmUuCisJICov CisJaWYgKGpvaW5fdW5yb2xsZXIgPT0gTlVMTCAmJiBwZ3BhX2lzX2pvaW4ocGxhbikpCisJewor CQlqb2luX3Vucm9sbGVyID0gcGdwYV9jcmVhdGVfam9pbl91bnJvbGxlcigpOworCQlqb2luX3Vu cm9sbGVyX3RvcGxldmVsID0gdHJ1ZTsKKwkJd2l0aGluX2pvaW5fcHJvYmxlbSA9IHRydWU7CisJ fQorCisJLyoKKwkgKiBJZiB0aGlzIGpvaW4gaXMgdG8gYmUgdW5yb2xsZWQsIHBncGFfdW5yb2xs X2pvaW4oKSB3aWxsIHJldHVybiB0aGUgam9pbgorCSAqIHVucm9sbGVyIG9iamVjdCB0aGF0IHNo b3VsZCBiZSBwYXNzZWQgZG93biB3aGVuIHdlIHJlY3Vyc2UgaW50byB0aGUKKwkgKiBvdXRlciBh bmQgaW5uZXIgc2lkZXMgb2YgdGhlIHBsYW4uCisJICovCisJaWYgKGpvaW5fdW5yb2xsZXIgIT0g TlVMTCkKKwkJcGdwYV91bnJvbGxfam9pbih3YWxrZXIsIHBsYW4sIGJlbmVhdGhfYW55X2dhdGhl ciwgam9pbl91bnJvbGxlciwKKwkJCQkJCSAmb3V0ZXJfam9pbl91bnJvbGxlciwgJmlubmVyX2pv aW5fdW5yb2xsZXIpOworCisJLyogQWRkIFJUSXMgZnJvbSB0aGUgcGxhbiBub2RlIHRvIGFsbCBh Y3RpdmUgcXVlcnkgZmVhdHVyZXMuICovCisJcGdwYV9xZl9hZGRfcGxhbl9ydGlzKGFjdGl2ZV9x dWVyeV9mZWF0dXJlcywgcGxhbiwgd2Fsa2VyLT5wc3RtdC0+cnRhYmxlKTsKKworCS8qCisJICog UmVjdXJzZSBpbnRvIHRoZSBvdXRlciBhbmQgaW5uZXIgc3VidHJlZXMuCisJICoKKwkgKiBBcyBh biBleGNlcHRpb24sIGlmIHRoaXMgaXMgYSBGb3JlaWduU2NhbiwgZG9uJ3QgcmVjdXJzZS4gcG9z dGdyZXNfZmR3CisJICogc29tZXRpbWVzIHN0b3JlcyBhbiBFUFEgcmVjaGVjayBwbGFuIGluIHBs YW4tPmxlZnRyZWUsIGJ1dCB0aGF0J3MgZ29pbmcKKwkgKiB0byBtZW50aW9uIHRoZSBzYW1lIHNl dCBvZiByZWxhdGlvbnMgYXMgdGhlIEZvcmVpZ25TY2FuIGl0c2VsZiwgYW5kIHdlCisJICogaGF2 ZSBubyB3YXkgdG8gZW1pdCBhZHZpY2UgdGFyZ2V0aW5nIHRoZSBFUFEgY2FzZSB2cy4gdGhlIG5v bi1FUFEgY2FzZS4KKwkgKiBNb3Jlb3ZlciwgaXQncyBub3QgZW50aXJlbHkgY2xlYXIgd2hhdCBv dGhlciBGRFdzIG1pZ2h0IGRvIHdpdGggdGhlCisJICogbGVmdCBhbmQgcmlnaHQgc3VidHJlZXMu IE1heWJlIHNvbWUgYmV0dGVyIGhhbmRsaW5nIGlzIG5lZWRlZCBoZXJlLCBidXQKKwkgKiBmb3Ig bm93LCB3ZSBqdXN0IHB1bnQuCisJICovCisJaWYgKCFJc0EocGxhbiwgRm9yZWlnblNjYW4pKQor CXsKKwkJaWYgKHBsYW4tPmxlZnR0cmVlICE9IE5VTEwpCisJCQlwZ3BhX3dhbGtfcmVjdXJzaXZl bHkod2Fsa2VyLCBwbGFuLT5sZWZ0dHJlZSwgd2l0aGluX2pvaW5fcHJvYmxlbSwKKwkJCQkJCQkJ ICBvdXRlcl9qb2luX3Vucm9sbGVyLCBhY3RpdmVfcXVlcnlfZmVhdHVyZXMsCisJCQkJCQkJCSAg YmVuZWF0aF9hbnlfZ2F0aGVyKTsKKwkJaWYgKHBsYW4tPnJpZ2h0dHJlZSAhPSBOVUxMKQorCQkJ cGdwYV93YWxrX3JlY3Vyc2l2ZWx5KHdhbGtlciwgcGxhbi0+cmlnaHR0cmVlLCB3aXRoaW5fam9p bl9wcm9ibGVtLAorCQkJCQkJCQkgIGlubmVyX2pvaW5fdW5yb2xsZXIsIGFjdGl2ZV9xdWVyeV9m ZWF0dXJlcywKKwkJCQkJCQkJICBiZW5lYXRoX2FueV9nYXRoZXIpOworCX0KKworCS8qCisJICog SWYgd2UgY3JlYXRlZCBhIGpvaW4gdW5yb2xsZXIgdXAgYWJvdmUsIHRoZW4gaXQncyBhbHNvIG91 ciBqb2luIHRvIHVzZQorCSAqIGl0IHRvIGJ1aWxkIHRoZSBmaW5hbCBwZ3BhX3Vucm9sbGVkX2pv aW4sIGFuZCB0byBkZXN0cm95IHRoZSBvYmplY3QuCisJICovCisJaWYgKGpvaW5fdW5yb2xsZXJf dG9wbGV2ZWwpCisJeworCQlwZ3BhX3Vucm9sbGVkX2pvaW4gKnVqb2luOworCisJCXVqb2luID0g cGdwYV9idWlsZF91bnJvbGxlZF9qb2luKHdhbGtlciwgam9pbl91bnJvbGxlcik7CisJCXdhbGtl ci0+dG9wbGV2ZWxfdW5yb2xsZWRfam9pbnMgPQorCQkJbGFwcGVuZCh3YWxrZXItPnRvcGxldmVs X3Vucm9sbGVkX2pvaW5zLCB1am9pbik7CisJCXBncGFfZGVzdHJveV9qb2luX3Vucm9sbGVyKGpv aW5fdW5yb2xsZXIpOworCQkodm9pZCkgcGdwYV9wcm9jZXNzX3Vucm9sbGVkX2pvaW4od2Fsa2Vy LCB1am9pbik7CisJfQorCisJLyoKKwkgKiBTb21lIHBsYW4gdHlwZXMgY2FuIGhhdmUgYWRkaXRp b25hbCBjaGlsZHJlbi4gTm9kZXMgbGlrZSBBcHBlbmQgdGhhdAorCSAqIGNhbiBoYXZlIGFueSBu dW1iZXIgb2YgY2hpbGRyZW4gc3RvcmUgdGhlbSBpbiBhIExpc3Q7IGEgU3VicXVlcnlTY2FuCisJ ICoganVzdCBoYXMgYSBmaWVsZCBmb3IgYSBzaW5nbGUgYWRkaXRpb25hbCBQbGFuLgorCSAqLwor CXN3aXRjaCAobm9kZVRhZyhwbGFuKSkKKwl7CisJCWNhc2UgVF9BcHBlbmQ6CisJCQl7CisJCQkJ QXBwZW5kCSAgICphcGxhbiA9IChBcHBlbmQgKikgcGxhbjsKKworCQkJCWV4dHJhcGxhbnMgPSBh cGxhbi0+YXBwZW5kcGxhbnM7CisJCQkJaWYgKGJtc19pc19lbXB0eShhcGxhbi0+YXBwcmVsaWRz KSkKKwkJCQkJcHVzaGRvd25fcXVlcnlfZmVhdHVyZXMgPSBhY3RpdmVfcXVlcnlfZmVhdHVyZXM7 CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBUX01lcmdlQXBwZW5kOgorCQkJeworCQkJCU1lcmdl QXBwZW5kICptYXBsYW4gPSAoTWVyZ2VBcHBlbmQgKikgcGxhbjsKKworCQkJCWV4dHJhcGxhbnMg PSBtYXBsYW4tPm1lcmdlcGxhbnM7CisJCQkJaWYgKGJtc19pc19lbXB0eShtYXBsYW4tPmFwcHJl bGlkcykpCisJCQkJCXB1c2hkb3duX3F1ZXJ5X2ZlYXR1cmVzID0gYWN0aXZlX3F1ZXJ5X2ZlYXR1 cmVzOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgVF9CaXRtYXBBbmQ6CisJCQlleHRyYXBsYW5z ID0gKChCaXRtYXBBbmQgKikgcGxhbiktPmJpdG1hcHBsYW5zOworCQkJYnJlYWs7CisJCWNhc2Ug VF9CaXRtYXBPcjoKKwkJCWV4dHJhcGxhbnMgPSAoKEJpdG1hcE9yICopIHBsYW4pLT5iaXRtYXBw bGFuczsKKwkJCWJyZWFrOworCQljYXNlIFRfU3VicXVlcnlTY2FuOgorCisJCQkvKgorCQkJICog V2UgZG9uJ3QgcGFzcyBkb3duIGFjdGl2ZV9xdWVyeV9mZWF0dXJlcyBhY3Jvc3MgaGVyZSwgYmVj YXVzZQorCQkJICogdGhvc2UgYXJlIHNwZWNpZmljIHRvIGEgc3VicXVlcnkgbGV2ZWwuCisJCQkg Ki8KKwkJCXBncGFfd2Fsa19yZWN1cnNpdmVseSh3YWxrZXIsICgoU3VicXVlcnlTY2FuICopIHBs YW4pLT5zdWJwbGFuLAorCQkJCQkJCQkgIDAsIE5VTEwsIE5JTCwgYmVuZWF0aF9hbnlfZ2F0aGVy KTsKKwkJCWJyZWFrOworCQljYXNlIFRfQ3VzdG9tU2NhbjoKKwkJCWV4dHJhcGxhbnMgPSAoKEN1 c3RvbVNjYW4gKikgcGxhbiktPmN1c3RvbV9wbGFuczsKKwkJCWJyZWFrOworCQlkZWZhdWx0Ogor CQkJYnJlYWs7CisJfQorCisJLyogSWYgd2UgZm91bmQgYSBsaXN0IG9mIGV4dHJhIGNoaWxkcmVu LCBpdGVyYXRlIG92ZXIgaXQuICovCisJZm9yZWFjaChsYywgZXh0cmFwbGFucykKKwl7CisJCVBs YW4JICAgKnN1YnBsYW4gPSBsZmlyc3QobGMpOworCisJCXBncGFfd2Fsa19yZWN1cnNpdmVseSh3 YWxrZXIsIHN1YnBsYW4sIDAsIE5VTEwsIHB1c2hkb3duX3F1ZXJ5X2ZlYXR1cmVzLAorCQkJCQkJ CSAgYmVuZWF0aF9hbnlfZ2F0aGVyKTsKKwl9Cit9CisKKy8qCisgKiBQZXJmb3JtIGZpbmFsIHBy b2Nlc3Npbmcgb2YgYSBuZXdseS1jb25zdHJ1Y3RlZCBwZ3BhX3Vucm9sbGVkX2pvaW4uIFRoaXMK KyAqIG9ubHkgbmVlZHMgdG8gYmUgY2FsbGVkIGZvciB0b3BsZXZlbCBwZ3BhX3Vucm9sbGVkX2pv aW4gb2JqZWN0cywgc2luY2UgaXQKKyAqIHJlY3Vyc2VzIHRvIHN1Yi1qb2lucyBhcyBuZWVkZWQu CisgKgorICogT3VyIGdvYWwgaXMgdG8gYWRkIHRoZSBzZXQgb2YgaW5uZXIgcmVsaWRzIHRvIHRo ZSByZWxldmFudCBqb2luX3N0cmF0ZWdpZXMKKyAqIGxpc3QsIGFuZCB0byBkbyB0aGUgc2FtZSBm b3IgYW55IHN1Yi1qb2lucy4gVG8gdGhhdCBlbmQsIHRoZSByZXR1cm4gdmFsdWUKKyAqIGlzIHRo ZSBzZXQgb2YgcmVsaWRzIGZvdW5kIGJlbmVhdGggdGhlIHRoZSBqb2luLCBidXQgaXQgaXMgZXhw ZWN0ZWQgdGhhdAorICogdGhlIHRvcGxldmVsIGNhbGxlciB3aWxsIGlnbm9yZSB0aGlzLgorICov CitzdGF0aWMgQml0bWFwc2V0ICoKK3BncGFfcHJvY2Vzc191bnJvbGxlZF9qb2luKHBncGFfcGxh bl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJCQkJICAgcGdwYV91bnJvbGxlZF9qb2luICp1 am9pbikKK3sKKwlCaXRtYXBzZXQgICphbGxfcmVsaWRzID0gYm1zX2NvcHkodWpvaW4tPm91dGVy LnNjYW4tPnJlbGlkcyk7CisKKwkvKiBJZiB0aGlzIGZhaWxzLCB3ZSBkaWRuJ3QgdW5yb2xsIHBy b3Blcmx5LiAqLworCUFzc2VydCh1am9pbi0+b3V0ZXIudW5yb2xsZWRfam9pbiA9PSBOVUxMKTsK KworCWZvciAoaW50IGsgPSAwOyBrIDwgdWpvaW4tPm5pbm5lcjsgKytrKQorCXsKKwkJcGdwYV9q b2luX21lbWJlciAqbWVtYmVyID0gJnVqb2luLT5pbm5lcltrXTsKKwkJQml0bWFwc2V0ICAqcmVs aWRzOworCisJCWlmIChtZW1iZXItPnVucm9sbGVkX2pvaW4gIT0gTlVMTCkKKwkJCXJlbGlkcyA9 IHBncGFfcHJvY2Vzc191bnJvbGxlZF9qb2luKHdhbGtlciwKKwkJCQkJCQkJCQkJCW1lbWJlci0+ dW5yb2xsZWRfam9pbik7CisJCWVsc2UKKwkJeworCQkJQXNzZXJ0KG1lbWJlci0+c2NhbiAhPSBO VUxMKTsKKwkJCXJlbGlkcyA9IG1lbWJlci0+c2Nhbi0+cmVsaWRzOworCQl9CisJCXdhbGtlci0+ am9pbl9zdHJhdGVnaWVzW3Vqb2luLT5zdHJhdGVneVtrXV0gPQorCQkJbGFwcGVuZCh3YWxrZXIt PmpvaW5fc3RyYXRlZ2llc1t1am9pbi0+c3RyYXRlZ3lba11dLCByZWxpZHMpOworCQlhbGxfcmVs aWRzID0gYm1zX2FkZF9tZW1iZXJzKGFsbF9yZWxpZHMsIHJlbGlkcyk7CisJfQorCisJcmV0dXJu IGFsbF9yZWxpZHM7Cit9CisKKy8qCisgKiBBcnJhbmdlIGZvciB0aGUgZ2l2ZW4gcGxhbiBub2Rl IHRvIGJlIHRyZWF0ZWQgYXMgYSBxdWVyeSBmZWF0dXJlIHdoZW4gdGhlCisgKiB0cmVlIHdhbGsg cmVhY2hlcyBpdC4KKyAqCisgKiBNYWtlIHN1cmUgdG8gb25seSB1c2UgdGhpcyBmb3Igbm9kZXMg dGhhdCB0aGUgdHJlZSB3YWxrIGNhbid0IGhhdmUgcmVhY2hlZAorICogeWV0IQorICovCit2b2lk CitwZ3BhX2FkZF9mdXR1cmVfZmVhdHVyZShwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtl ciwKKwkJCQkJCXBncGFfcWZfdHlwZSB0eXBlLCBQbGFuICpwbGFuKQoreworCXBncGFfcXVlcnlf ZmVhdHVyZSAqcWYgPSBwZ3BhX2FkZF9mZWF0dXJlKHdhbGtlciwgdHlwZSwgcGxhbik7CisKKwl3 YWxrZXItPmZ1dHVyZV9xdWVyeV9mZWF0dXJlcyA9CisJCWxhcHBlbmQod2Fsa2VyLT5mdXR1cmVf cXVlcnlfZmVhdHVyZXMsIHFmKTsKK30KKworLyoKKyAqIFJldHVybiB0aGUgbGFzdCBvZiBhbnkg ZWxpZGVkIG5vZGVzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHBsYW4gbm9kZSBJRC4KKyAqCisgKiBU aGUgbGFzdCBlbGlkZWQgbm9kZSBpcyB0aGUgb25lIHRoYXQgd291bGQgaGF2ZSBiZWVuIHVwcGVy bW9zdCBpbiB0aGUgcGxhbgorICogdHJlZSBoYWQgaXQgbm90IGJlZW4gcmVtb3ZlZCBkdXJpbmcg c2V0cmVmcyBwcm9jZXNzaWcuCisgKi8KK0VsaWRlZE5vZGUgKgorcGdwYV9sYXN0X2VsaWRlZF9u b2RlKFBsYW5uZWRTdG10ICpwc3RtdCwgUGxhbiAqcGxhbikKK3sKKwlFbGlkZWROb2RlICplbGlk ZWRfbm9kZSA9IE5VTEw7CisKKwlmb3JlYWNoX25vZGUoRWxpZGVkTm9kZSwgbiwgcHN0bXQtPmVs aWRlZE5vZGVzKQorCXsKKwkJaWYgKG4tPnBsYW5fbm9kZV9pZCA9PSBwbGFuLT5wbGFuX25vZGVf aWQpCisJCQllbGlkZWRfbm9kZSA9IG47CisJfQorCisJcmV0dXJuIGVsaWRlZF9ub2RlOworfQor CisvKgorICogQ2VydGFpbiBwbGFuIG5vZGVzIGNhbiByZWZlciB0byBhIHNldCBvZiBSVElzLiBF eHRyYWN0IGFuZCByZXR1cm4gdGhlIHNldC4KKyAqLworQml0bWFwc2V0ICoKK3BncGFfcmVsaWRz KFBsYW4gKnBsYW4pCit7CisJaWYgKElzQShwbGFuLCBSZXN1bHQpKQorCQlyZXR1cm4gKChSZXN1 bHQgKikgcGxhbiktPnJlbGlkczsKKwllbHNlIGlmIChJc0EocGxhbiwgRm9yZWlnblNjYW4pKQor CQlyZXR1cm4gKChGb3JlaWduU2NhbiAqKSBwbGFuKS0+ZnNfcmVsaWRzOworCWVsc2UgaWYgKElz QShwbGFuLCBBcHBlbmQpKQorCQlyZXR1cm4gKChBcHBlbmQgKikgcGxhbiktPmFwcHJlbGlkczsK KwllbHNlIGlmIChJc0EocGxhbiwgTWVyZ2VBcHBlbmQpKQorCQlyZXR1cm4gKChNZXJnZUFwcGVu ZCAqKSBwbGFuKS0+YXBwcmVsaWRzOworCisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBFeHRy YWN0IHRoZSBzY2FubmVkIFJUSSBmcm9tIGEgcGxhbiBub2RlLgorICoKKyAqIFJldHVybnMgMCBp ZiB0aGVyZSBpc24ndCBvbmUuCisgKi8KK0luZGV4CitwZ3BhX3NjYW5yZWxpZChQbGFuICpwbGFu KQoreworCXN3aXRjaCAobm9kZVRhZyhwbGFuKSkKKwl7CisJCWNhc2UgVF9TZXFTY2FuOgorCQlj YXNlIFRfU2FtcGxlU2NhbjoKKwkJY2FzZSBUX0JpdG1hcEhlYXBTY2FuOgorCQljYXNlIFRfVGlk U2NhbjoKKwkJY2FzZSBUX1RpZFJhbmdlU2NhbjoKKwkJY2FzZSBUX1N1YnF1ZXJ5U2NhbjoKKwkJ Y2FzZSBUX0Z1bmN0aW9uU2NhbjoKKwkJY2FzZSBUX1RhYmxlRnVuY1NjYW46CisJCWNhc2UgVF9W YWx1ZXNTY2FuOgorCQljYXNlIFRfQ3RlU2NhbjoKKwkJY2FzZSBUX05hbWVkVHVwbGVzdG9yZVNj YW46CisJCWNhc2UgVF9Xb3JrVGFibGVTY2FuOgorCQljYXNlIFRfRm9yZWlnblNjYW46CisJCWNh c2UgVF9DdXN0b21TY2FuOgorCQljYXNlIFRfSW5kZXhTY2FuOgorCQljYXNlIFRfSW5kZXhPbmx5 U2NhbjoKKwkJCXJldHVybiAoKFNjYW4gKikgcGxhbiktPnNjYW5yZWxpZDsKKwkJZGVmYXVsdDoK KwkJCXJldHVybiAwOworCX0KK30KKworLyoKKyAqIENvbnN0cnVjdCBhIG5ldyBCaXRtYXBzZXQg Y29udGFpbmluZyBub24tUlRFX0pPSU4gbWVtYmVycyBvZiAncmVsaWRzJy4KKyAqLworQml0bWFw c2V0ICoKK3BncGFfZmlsdGVyX291dF9qb2luX3JlbGlkcyhCaXRtYXBzZXQgKnJlbGlkcywgTGlz dCAqcnRhYmxlKQoreworCWludAkJCXJ0aSA9IC0xOworCUJpdG1hcHNldCAgKnJlc3VsdCA9IE5V TEw7CisKKwl3aGlsZSAoKHJ0aSA9IGJtc19uZXh0X21lbWJlcihyZWxpZHMsIHJ0aSkpID49IDAp CisJeworCQlSYW5nZVRibEVudHJ5ICpydGUgPSBydF9mZXRjaChydGksIHJ0YWJsZSk7CisKKwkJ aWYgKHJ0ZS0+cnRla2luZCAhPSBSVEVfSk9JTikKKwkJCXJlc3VsdCA9IGJtc19hZGRfbWVtYmVy KHJlc3VsdCwgcnRpKTsKKwl9CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICogQ3JlYXRl IGEgcGdwYV9xdWVyeV9mZWF0dXJlIGFuZCBhZGQgaXQgdG8gdGhlIGxpc3Qgb2YgYWxsIHF1ZXJ5 IGZlYXR1cmVzCisgKiBmb3IgdGhpcyBwbGFuLgorICovCitzdGF0aWMgcGdwYV9xdWVyeV9mZWF0 dXJlICoKK3BncGFfYWRkX2ZlYXR1cmUocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIs CisJCQkJIHBncGFfcWZfdHlwZSB0eXBlLCBQbGFuICpwbGFuKQoreworCXBncGFfcXVlcnlfZmVh dHVyZSAqcWYgPSBwYWxsb2MwX29iamVjdChwZ3BhX3F1ZXJ5X2ZlYXR1cmUpOworCisJcWYtPnR5 cGUgPSB0eXBlOworCXFmLT5wbGFuID0gcGxhbjsKKworCXdhbGtlci0+cXVlcnlfZmVhdHVyZXNb cWYtPnR5cGVdID0KKwkJbGFwcGVuZCh3YWxrZXItPnF1ZXJ5X2ZlYXR1cmVzW3FmLT50eXBlXSwg cWYpOworCisJcmV0dXJuIHFmOworfQorCisvKgorICogQWRkIGEgc2luZ2xlIFJUSSB0byBlYWNo IGFjdGl2ZSBxdWVyeSBmZWF0dXJlLgorICovCitzdGF0aWMgdm9pZAorcGdwYV9xZl9hZGRfcnRp KExpc3QgKmFjdGl2ZV9xdWVyeV9mZWF0dXJlcywgSW5kZXggcnRpKQoreworCWZvcmVhY2hfcHRy KHBncGFfcXVlcnlfZmVhdHVyZSwgcWYsIGFjdGl2ZV9xdWVyeV9mZWF0dXJlcykKKwl7CisJCXFm LT5yZWxpZHMgPSBibXNfYWRkX21lbWJlcihxZi0+cmVsaWRzLCBydGkpOworCX0KK30KKworLyoK KyAqIEFkZCBhIHNldCBvZiBSVElzIHRvIGVhY2ggYWN0aXZlIHF1ZXJ5IGZlYXR1cmUuCisgKi8K K3N0YXRpYyB2b2lkCitwZ3BhX3FmX2FkZF9ydGlzKExpc3QgKmFjdGl2ZV9xdWVyeV9mZWF0dXJl cywgQml0bWFwc2V0ICpyZWxpZHMpCit7CisJZm9yZWFjaF9wdHIocGdwYV9xdWVyeV9mZWF0dXJl LCBxZiwgYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzKQorCXsKKwkJcWYtPnJlbGlkcyA9IGJtc19hZGRf bWVtYmVycyhxZi0+cmVsaWRzLCByZWxpZHMpOworCX0KK30KKworLyoKKyAqIEFkZCBSVElzIGRp cmVjdGx5IGNvbnRhaW5lZCBpbiBhIHBsYW4gbm9kZSB0byBlYWNoIGFjdGl2ZSBxdWVyeSBmZWF0 dXJlLAorICogYnV0IGZpbHRlciBvdXQgYW55IGpvaW4gUlRJcywgc2luY2UgYWR2aWNlIGRvZXNu J3QgbWVudGlvbiB0aG9zZS4KKyAqLworc3RhdGljIHZvaWQKK3BncGFfcWZfYWRkX3BsYW5fcnRp cyhMaXN0ICphY3RpdmVfcXVlcnlfZmVhdHVyZXMsIFBsYW4gKnBsYW4sIExpc3QgKnJ0YWJsZSkK K3sKKwlCaXRtYXBzZXQgICpyZWxpZHM7CisJSW5kZXgJCXJ0aTsKKworCWlmICgocmVsaWRzID0g cGdwYV9yZWxpZHMocGxhbikpICE9IE5VTEwpCisJeworCQlyZWxpZHMgPSBwZ3BhX2ZpbHRlcl9v dXRfam9pbl9yZWxpZHMocmVsaWRzLCBydGFibGUpOworCQlwZ3BhX3FmX2FkZF9ydGlzKGFjdGl2 ZV9xdWVyeV9mZWF0dXJlcywgcmVsaWRzKTsKKwl9CisJZWxzZSBpZiAoKHJ0aSA9IHBncGFfc2Nh bnJlbGlkKHBsYW4pKSAhPSAwKQorCQlwZ3BhX3FmX2FkZF9ydGkoYWN0aXZlX3F1ZXJ5X2ZlYXR1 cmVzLCBydGkpOworfQorCisvKgorICogSWYgd2UgZ2VuZXJhdGVkIHBsYW4gYWR2aWNlIHVzaW5n IHRoZSBwcm92aWRlZCB3YWxrZXIgb2JqZWN0IGFuZCBhcnJheQorICogb2YgaWRlbnRpZmllcnMs IHdvdWxkIHdlIGdlbmVyYXRlIHRoZSBzcGVjaWZpZWQgdGFnL3RhcmdldCBjb21iaW5hdGlvbj8K KyAqCisgKiBJZiB5ZXMsIHRoZSBwbGFuIGNvbmZvcm1zIHRvIHRoZSBhZHZpY2U7IGlmIG5vLCBp dCBkb2VzIG5vdC4gTm90ZSB0aGF0CisgKiB3ZSBoYXZlIGtub3cgd2F5IG9mIGtub3dpbmcgd2hl dGhlciB0aGUgcGxhbm5lciB3YXMgZm9yY2VkIHRvIGVtaXQgYSBwbGFuCisgKiB0aGF0IGNvbmZv cm1lZCB0byB0aGUgYWR2aWNlIG9yIGp1c3QgaGFwcGVuZWQgdG8gZG8gc28uCisgKi8KK2Jvb2wK K3BncGFfd2Fsa2VyX3dvdWxkX2FkdmlzZShwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtl ciwKKwkJCQkJCSBwZ3BhX2lkZW50aWZpZXIgKnJ0X2lkZW50aWZpZXJzLAorCQkJCQkJIHBncGFf YWR2aWNlX3RhZ190eXBlIHRhZywKKwkJCQkJCSBwZ3BhX2FkdmljZV90YXJnZXQgKnRhcmdldCkK K3sKKwlJbmRleAkJcnRhYmxlX2xlbmd0aCA9IGxpc3RfbGVuZ3RoKHdhbGtlci0+cHN0bXQtPnJ0 YWJsZSk7CisJQml0bWFwc2V0ICAqcmVsaWRzID0gTlVMTDsKKworCWlmICh0YWcgPT0gUEdQQV9U QUdfSk9JTl9PUkRFUikKKwl7CisJCWZvcmVhY2hfcHRyKHBncGFfdW5yb2xsZWRfam9pbiwgdWpv aW4sIHdhbGtlci0+dG9wbGV2ZWxfdW5yb2xsZWRfam9pbnMpCisJCXsKKwkJCWlmIChwZ3BhX3dh bGtlcl9qb2luX29yZGVyX21hdGNoZXModWpvaW4sIHJ0YWJsZV9sZW5ndGgsCisJCQkJCQkJCQkJ CSAgIHJ0X2lkZW50aWZpZXJzLCB0YXJnZXQsIHRydWUpKQorCQkJCXJldHVybiB0cnVlOworCQl9 CisKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCWlmICh0YXJnZXQtPnR0eXBlID09IFBHUEFfVEFS R0VUX0lERU5USUZJRVIpCisJeworCQlJbmRleAkJcnRpOworCisJCXJ0aSA9IHBncGFfY29tcHV0 ZV9ydGlfZnJvbV9pZGVudGlmaWVyKHJ0YWJsZV9sZW5ndGgsIHJ0X2lkZW50aWZpZXJzLAorCQkJ CQkJCQkJCQkgICAmdGFyZ2V0LT5yaWQpOworCQlpZiAocnRpID09IDApCisJCQlyZXR1cm4gZmFs c2U7CisJCXJlbGlkcyA9IGJtc19tYWtlX3NpbmdsZXRvbihydGkpOworCX0KKwllbHNlCisJewor CQlBc3NlcnQodGFyZ2V0LT50dHlwZSA9PSBQR1BBX1RBUkdFVF9PUkRFUkVEX0xJU1QpOworCQlm b3JlYWNoX3B0cihwZ3BhX2FkdmljZV90YXJnZXQsIGNoaWxkX3RhcmdldCwgdGFyZ2V0LT5jaGls ZHJlbikKKwkJeworCQkJSW5kZXgJCXJ0aTsKKworCQkJQXNzZXJ0KGNoaWxkX3RhcmdldC0+dHR5 cGUgPT0gUEdQQV9UQVJHRVRfSURFTlRJRklFUik7CisJCQlydGkgPSBwZ3BhX2NvbXB1dGVfcnRp X2Zyb21faWRlbnRpZmllcihydGFibGVfbGVuZ3RoLAorCQkJCQkJCQkJCQkJICAgcnRfaWRlbnRp ZmllcnMsCisJCQkJCQkJCQkJCQkgICAmY2hpbGRfdGFyZ2V0LT5yaWQpOworCQkJaWYgKHJ0aSA9 PSAwKQorCQkJCXJldHVybiBmYWxzZTsKKwkJCXJlbGlkcyA9IGJtc19hZGRfbWVtYmVyKHJlbGlk cywgcnRpKTsKKwkJfQorCX0KKworCXN3aXRjaCAodGFnKQorCXsKKwkJY2FzZSBQR1BBX1RBR19K T0lOX09SREVSOgorCQkJLyogc2hvdWxkIGhhdmUgYmVlbiBoYW5kbGVkIGFib3ZlICovCisJCQlw Z191bnJlYWNoYWJsZSgpOworCQkJYnJlYWs7CisJCWNhc2UgUEdQQV9UQUdfQklUTUFQX0hFQVBf U0NBTjoKKwkJCXJldHVybiBwZ3BhX3dhbGtlcl9maW5kX3NjYW4od2Fsa2VyLAorCQkJCQkJCQkJ CSBQR1BBX1NDQU5fQklUTUFQX0hFQVAsCisJCQkJCQkJCQkJIHJlbGlkcykgIT0gTlVMTDsKKwkJ Y2FzZSBQR1BBX1RBR19GT1JFSUdOX0pPSU46CisJCQlyZXR1cm4gcGdwYV93YWxrZXJfZmluZF9z Y2FuKHdhbGtlciwKKwkJCQkJCQkJCQkgUEdQQV9TQ0FOX0ZPUkVJR04sCisJCQkJCQkJCQkJIHJl bGlkcykgIT0gTlVMTDsKKwkJY2FzZSBQR1BBX1RBR19JTkRFWF9PTkxZX1NDQU46CisJCQl7CisJ CQkJcGdwYV9zY2FuICAqc2NhbjsKKworCQkJCXNjYW4gPSBwZ3BhX3dhbGtlcl9maW5kX3NjYW4o d2Fsa2VyLCBQR1BBX1NDQU5fSU5ERVhfT05MWSwKKwkJCQkJCQkJCQkJIHJlbGlkcyk7CisJCQkJ aWYgKHNjYW4gPT0gTlVMTCkKKwkJCQkJcmV0dXJuIGZhbHNlOworCisJCQkJcmV0dXJuIHBncGFf d2Fsa2VyX2luZGV4X3RhcmdldF9tYXRjaGVzX3BsYW4odGFyZ2V0LT5pdGFyZ2V0LCBzY2FuLT5w bGFuKTsKKwkJCX0KKwkJY2FzZSBQR1BBX1RBR19JTkRFWF9TQ0FOOgorCQkJeworCQkJCXBncGFf c2NhbiAgKnNjYW47CisKKwkJCQlzY2FuID0gcGdwYV93YWxrZXJfZmluZF9zY2FuKHdhbGtlciwg UEdQQV9TQ0FOX0lOREVYLAorCQkJCQkJCQkJCQkgcmVsaWRzKTsKKwkJCQlpZiAoc2NhbiA9PSBO VUxMKQorCQkJCQlyZXR1cm4gZmFsc2U7CisKKwkJCQlyZXR1cm4gcGdwYV93YWxrZXJfaW5kZXhf dGFyZ2V0X21hdGNoZXNfcGxhbih0YXJnZXQtPml0YXJnZXQsIHNjYW4tPnBsYW4pOworCQkJfQor CQljYXNlIFBHUEFfVEFHX1BBUlRJVElPTldJU0U6CisJCQlyZXR1cm4gcGdwYV93YWxrZXJfZmlu ZF9zY2FuKHdhbGtlciwKKwkJCQkJCQkJCQkgUEdQQV9TQ0FOX1BBUlRJVElPTldJU0UsCisJCQkJ CQkJCQkJIHJlbGlkcykgIT0gTlVMTDsKKwkJY2FzZSBQR1BBX1RBR19TRVFfU0NBTjoKKwkJCXJl dHVybiBwZ3BhX3dhbGtlcl9maW5kX3NjYW4od2Fsa2VyLAorCQkJCQkJCQkJCSBQR1BBX1NDQU5f U0VRLAorCQkJCQkJCQkJCSByZWxpZHMpICE9IE5VTEw7CisJCWNhc2UgUEdQQV9UQUdfVElEX1ND QU46CisJCQlyZXR1cm4gcGdwYV93YWxrZXJfZmluZF9zY2FuKHdhbGtlciwKKwkJCQkJCQkJCQkg UEdQQV9TQ0FOX1RJRCwKKwkJCQkJCQkJCQkgcmVsaWRzKSAhPSBOVUxMOworCQljYXNlIFBHUEFf VEFHX0dBVEhFUjoKKwkJCXJldHVybiBwZ3BhX3dhbGtlcl9jb250YWluc19mZWF0dXJlKHdhbGtl ciwKKwkJCQkJCQkJCQkJCVBHUEFRRl9HQVRIRVIsCisJCQkJCQkJCQkJCQlyZWxpZHMpOworCQlj YXNlIFBHUEFfVEFHX0dBVEhFUl9NRVJHRToKKwkJCXJldHVybiBwZ3BhX3dhbGtlcl9jb250YWlu c19mZWF0dXJlKHdhbGtlciwKKwkJCQkJCQkJCQkJCVBHUEFRRl9HQVRIRVJfTUVSR0UsCisJCQkJ CQkJCQkJCQlyZWxpZHMpOworCQljYXNlIFBHUEFfVEFHX1NFTUlKT0lOX05PTl9VTklRVUU6CisJ CQlyZXR1cm4gcGdwYV93YWxrZXJfY29udGFpbnNfZmVhdHVyZSh3YWxrZXIsCisJCQkJCQkJCQkJ CQlQR1BBUUZfU0VNSUpPSU5fTk9OX1VOSVFVRSwKKwkJCQkJCQkJCQkJCXJlbGlkcyk7CisJCWNh c2UgUEdQQV9UQUdfU0VNSUpPSU5fVU5JUVVFOgorCQkJcmV0dXJuIHBncGFfd2Fsa2VyX2NvbnRh aW5zX2ZlYXR1cmUod2Fsa2VyLAorCQkJCQkJCQkJCQkJUEdQQVFGX1NFTUlKT0lOX1VOSVFVRSwK KwkJCQkJCQkJCQkJCXJlbGlkcyk7CisJCWNhc2UgUEdQQV9UQUdfSEFTSF9KT0lOOgorCQkJcmV0 dXJuIHBncGFfd2Fsa2VyX2NvbnRhaW5zX2pvaW4od2Fsa2VyLAorCQkJCQkJCQkJCQkgSlNUUkFU X0hBU0hfSk9JTiwKKwkJCQkJCQkJCQkJIHJlbGlkcyk7CisJCWNhc2UgUEdQQV9UQUdfTUVSR0Vf Sk9JTl9NQVRFUklBTElaRToKKwkJCXJldHVybiBwZ3BhX3dhbGtlcl9jb250YWluc19qb2luKHdh bGtlciwKKwkJCQkJCQkJCQkJIEpTVFJBVF9NRVJHRV9KT0lOX01BVEVSSUFMSVpFLAorCQkJCQkJ CQkJCQkgcmVsaWRzKTsKKwkJY2FzZSBQR1BBX1RBR19NRVJHRV9KT0lOX1BMQUlOOgorCQkJcmV0 dXJuIHBncGFfd2Fsa2VyX2NvbnRhaW5zX2pvaW4od2Fsa2VyLAorCQkJCQkJCQkJCQkgSlNUUkFU X01FUkdFX0pPSU5fUExBSU4sCisJCQkJCQkJCQkJCSByZWxpZHMpOworCQljYXNlIFBHUEFfVEFH X05FU1RFRF9MT09QX01BVEVSSUFMSVpFOgorCQkJcmV0dXJuIHBncGFfd2Fsa2VyX2NvbnRhaW5z X2pvaW4od2Fsa2VyLAorCQkJCQkJCQkJCQkgSlNUUkFUX05FU1RFRF9MT09QX01BVEVSSUFMSVpF LAorCQkJCQkJCQkJCQkgcmVsaWRzKTsKKwkJY2FzZSBQR1BBX1RBR19ORVNURURfTE9PUF9NRU1P SVpFOgorCQkJcmV0dXJuIHBncGFfd2Fsa2VyX2NvbnRhaW5zX2pvaW4od2Fsa2VyLAorCQkJCQkJ CQkJCQkgSlNUUkFUX05FU1RFRF9MT09QX01FTU9JWkUsCisJCQkJCQkJCQkJCSByZWxpZHMpOwor CQljYXNlIFBHUEFfVEFHX05FU1RFRF9MT09QX1BMQUlOOgorCQkJcmV0dXJuIHBncGFfd2Fsa2Vy X2NvbnRhaW5zX2pvaW4od2Fsa2VyLAorCQkJCQkJCQkJCQkgSlNUUkFUX05FU1RFRF9MT09QX1BM QUlOLAorCQkJCQkJCQkJCQkgcmVsaWRzKTsKKwkJY2FzZSBQR1BBX1RBR19OT19HQVRIRVI6CisJ CQlyZXR1cm4gcGdwYV93YWxrZXJfY29udGFpbnNfbm9fZ2F0aGVyKHdhbGtlciwgcmVsaWRzKTsK Kwl9CisKKwkvKiBzaG91bGQgbm90IGdldCBoZXJlICovCisJcmV0dXJuIGZhbHNlOworfQorCisv KgorICogRG9lcyB0aGUgaW5kZXggdGFyZ2V0IG1hdGNoIHRoZSBQbGFuPworICoKKyAqIFNob3Vs ZCBvbmx5IGJlIGNhbGxlZCB3aGVuIHdlIGtub3cgdGhhdCBpdGFyZ2V0IG1hbmRhdGVzIGFuIElu ZGV4IFNjYW4gb3IKKyAqIEluZGV4IE9ubHkgU2NhbiBhbmQgdGhpcyBjb3JyZXNwb25kcyB0byB0 aGUgdHlwZSBvZiBQbGFuLiBIZXJlLCBvdXIgam9iIGlzCisgKiBqdXN0IHRvIGNoZWNrIHdoZXRo ZXIgaXQncyB0aGUgc2FtZSBpbmRleC4KKyAqLworc3RhdGljIGJvb2wKK3BncGFfd2Fsa2VyX2lu ZGV4X3RhcmdldF9tYXRjaGVzX3BsYW4ocGdwYV9pbmRleF90YXJnZXQgKml0YXJnZXQsIFBsYW4g KnBsYW4pCit7CisJT2lkCQkJaW5kZXhvaWQgPSBJbnZhbGlkT2lkOworCisJLyogUmV0cmlldmUg dGhlIGluZGV4IE9JRCBmcm9tIHRoZSBwbGFuLiAqLworCWlmIChJc0EocGxhbiwgSW5kZXhTY2Fu KSkKKwkJaW5kZXhvaWQgPSAoKEluZGV4U2NhbiAqKSBwbGFuKS0+aW5kZXhpZDsKKwllbHNlIGlm IChJc0EocGxhbiwgSW5kZXhPbmx5U2NhbikpCisJCWluZGV4b2lkID0gKChJbmRleE9ubHlTY2Fu ICopIHBsYW4pLT5pbmRleGlkOworCWVsc2UKKwkJZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCBu b2RlIHR5cGU6ICVkIiwgKGludCkgbm9kZVRhZyhwbGFuKSk7CisKKwkvKiBDaGVjayB3aGV0aGVy IHNjaGVtYSBuYW1lIG1hdGNoZXMsIGlmIHNwZWNpZmllZCBpbiBpbmRleCB0YXJnZXQuICovCisJ aWYgKGl0YXJnZXQtPmluZG5hbWVzcGFjZSAhPSBOVUxMKQorCXsKKwkJT2lkCQkJbnNwb2lkID0g Z2V0X3JlbF9uYW1lc3BhY2UoaW5kZXhvaWQpOworCQljaGFyCSAgICpyZWxuYW1lc3BhY2UgPSBn ZXRfbmFtZXNwYWNlX25hbWVfb3JfdGVtcChuc3BvaWQpOworCisJCWlmIChzdHJjbXAoaXRhcmdl dC0+aW5kbmFtZXNwYWNlLCByZWxuYW1lc3BhY2UpICE9IDApCisJCQlyZXR1cm4gZmFsc2U7CisJ fQorCisJLyogQ2hlY2sgd2hldGhlciByZWxhdGlvbiBuYW1lIG1hdGNoZXMuICovCisJcmV0dXJu IChzdHJjbXAoaXRhcmdldC0+aW5kbmFtZSwgZ2V0X3JlbF9uYW1lKGluZGV4b2lkKSkgPT0gMCk7 Cit9CisKKy8qCisgKiBEb2VzIGFuIHVucm9sbGVkIGpvaW4gbWF0Y2ggdGhlIGpvaW4gb3JkZXIg c3BlY2lmaWVkIGJ5IGFuIGFkdmljZSB0YXJnZXQ/CisgKi8KK3N0YXRpYyBib29sCitwZ3BhX3dh bGtlcl9qb2luX29yZGVyX21hdGNoZXMocGdwYV91bnJvbGxlZF9qb2luICp1am9pbiwKKwkJCQkJ CQkgICBJbmRleCBydGFibGVfbGVuZ3RoLAorCQkJCQkJCSAgIHBncGFfaWRlbnRpZmllciAqcnRf aWRlbnRpZmllcnMsCisJCQkJCQkJICAgcGdwYV9hZHZpY2VfdGFyZ2V0ICp0YXJnZXQsCisJCQkJ CQkJICAgYm9vbCB0b3BsZXZlbCkKK3sKKwlpbnQJCQluY2hpbGRyZW4gPSBsaXN0X2xlbmd0aCh0 YXJnZXQtPmNoaWxkcmVuKTsKKworCUFzc2VydCh0YXJnZXQtPnR0eXBlID09IFBHUEFfVEFSR0VU X09SREVSRURfTElTVCk7CisKKwkvKiBBdCB0b3BsZXZlbCwgd2UgYWxsb3cgYSBwcmVmaXggbWF0 Y2guICovCisJaWYgKHRvcGxldmVsKQorCXsKKwkJaWYgKG5jaGlsZHJlbiA+IHVqb2luLT5uaW5u ZXIgKyAxKQorCQkJcmV0dXJuIGZhbHNlOworCX0KKwllbHNlCisJeworCQlpZiAobmNoaWxkcmVu ICE9IHVqb2luLT5uaW5uZXIgKyAxKQorCQkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qIE91dGVy bW9zdCByZWwgbXVzdCBtYXRjaC4gKi8KKwlpZiAoIXBncGFfd2Fsa2VyX2pvaW5fb3JkZXJfbWF0 Y2hlc19tZW1iZXIoJnVqb2luLT5vdXRlciwKKwkJCQkJCQkJCQkJICAgcnRhYmxlX2xlbmd0aCwK KwkJCQkJCQkJCQkJICAgcnRfaWRlbnRpZmllcnMsCisJCQkJCQkJCQkJCSAgIGxpbml0aWFsKHRh cmdldC0+Y2hpbGRyZW4pKSkKKwkJcmV0dXJuIGZhbHNlOworCisJLyogRWFjaCBpbm5lciByZWwg bXVzdCBtYXRjaC4gKi8KKwlmb3IgKGludCBuID0gMDsgbiA8IG5jaGlsZHJlbiAtIDE7ICsrbikK Kwl7CisJCXBncGFfYWR2aWNlX3RhcmdldCAqY2hpbGRfdGFyZ2V0ID0gbGlzdF9udGgodGFyZ2V0 LT5jaGlsZHJlbiwgbiArIDEpOworCisJCWlmICghcGdwYV93YWxrZXJfam9pbl9vcmRlcl9tYXRj aGVzX21lbWJlcigmdWpvaW4tPmlubmVyW25dLAorCQkJCQkJCQkJCQkJICAgcnRhYmxlX2xlbmd0 aCwKKwkJCQkJCQkJCQkJCSAgIHJ0X2lkZW50aWZpZXJzLAorCQkJCQkJCQkJCQkJICAgY2hpbGRf dGFyZ2V0KSkKKwkJCXJldHVybiBmYWxzZTsKKwl9CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoK KyAqIERvZXMgb25lIG1lbWJlciBvZiBhbiB1bnJvbGxlZCBqb2luIG1hdGNoIGFuIGFkdmljZSB0 YXJnZXQ/CisgKi8KK3N0YXRpYyBib29sCitwZ3BhX3dhbGtlcl9qb2luX29yZGVyX21hdGNoZXNf bWVtYmVyKHBncGFfam9pbl9tZW1iZXIgKm1lbWJlciwKKwkJCQkJCQkJCSAgSW5kZXggcnRhYmxl X2xlbmd0aCwKKwkJCQkJCQkJCSAgcGdwYV9pZGVudGlmaWVyICpydF9pZGVudGlmaWVycywKKwkJ CQkJCQkJCSAgcGdwYV9hZHZpY2VfdGFyZ2V0ICp0YXJnZXQpCit7CisJQml0bWFwc2V0ICAqcmVs aWRzID0gTlVMTDsKKworCWlmIChtZW1iZXItPnVucm9sbGVkX2pvaW4gIT0gTlVMTCkKKwl7CisJ CWlmICh0YXJnZXQtPnR0eXBlICE9IFBHUEFfVEFSR0VUX09SREVSRURfTElTVCkKKwkJCXJldHVy biBmYWxzZTsKKwkJcmV0dXJuIHBncGFfd2Fsa2VyX2pvaW5fb3JkZXJfbWF0Y2hlcyhtZW1iZXIt PnVucm9sbGVkX2pvaW4sCisJCQkJCQkJCQkJCSAgcnRhYmxlX2xlbmd0aCwKKwkJCQkJCQkJCQkJ ICBydF9pZGVudGlmaWVycywKKwkJCQkJCQkJCQkJICB0YXJnZXQsCisJCQkJCQkJCQkJCSAgZmFs c2UpOworCX0KKworCUFzc2VydChtZW1iZXItPnNjYW4gIT0gTlVMTCk7CisJc3dpdGNoICh0YXJn ZXQtPnR0eXBlKQorCXsKKwkJY2FzZSBQR1BBX1RBUkdFVF9PUkRFUkVEX0xJU1Q6CisJCQkvKiBD b3VsZCBvbmx5IG1hdGNoIGFuIHVucm9sbGVkIGpvaW4gKi8KKwkJCXJldHVybiBmYWxzZTsKKwor CQljYXNlIFBHUEFfVEFSR0VUX1VOT1JERVJFRF9MSVNUOgorCQkJeworCQkJCWZvcmVhY2hfcHRy KHBncGFfYWR2aWNlX3RhcmdldCwgY2hpbGRfdGFyZ2V0LCB0YXJnZXQtPmNoaWxkcmVuKQorCQkJ CXsKKwkJCQkJSW5kZXgJCXJ0aTsKKworCQkJCQlydGkgPSBwZ3BhX2NvbXB1dGVfcnRpX2Zyb21f aWRlbnRpZmllcihydGFibGVfbGVuZ3RoLAorCQkJCQkJCQkJCQkJCQkgICBydF9pZGVudGlmaWVy cywKKwkJCQkJCQkJCQkJCQkJICAgJmNoaWxkX3RhcmdldC0+cmlkKTsKKwkJCQkJaWYgKHJ0aSA9 PSAwKQorCQkJCQkJcmV0dXJuIGZhbHNlOworCQkJCQlyZWxpZHMgPSBibXNfYWRkX21lbWJlcihy ZWxpZHMsIHJ0aSk7CisJCQkJfQorCQkJCWJyZWFrOworCQkJfQorCisJCWNhc2UgUEdQQV9UQVJH RVRfSURFTlRJRklFUjoKKwkJCXsKKwkJCQlJbmRleAkJcnRpOworCisJCQkJcnRpID0gcGdwYV9j b21wdXRlX3J0aV9mcm9tX2lkZW50aWZpZXIocnRhYmxlX2xlbmd0aCwKKwkJCQkJCQkJCQkJCQkg ICBydF9pZGVudGlmaWVycywKKwkJCQkJCQkJCQkJCQkgICAmdGFyZ2V0LT5yaWQpOworCQkJCWlm IChydGkgPT0gMCkKKwkJCQkJcmV0dXJuIGZhbHNlOworCQkJCXJlbGlkcyA9IGJtc19tYWtlX3Np bmdsZXRvbihydGkpOworCQkJCWJyZWFrOworCQkJfQorCX0KKworCXJldHVybiBibXNfZXF1YWwo bWVtYmVyLT5zY2FuLT5yZWxpZHMsIHJlbGlkcyk7Cit9CisKKy8qCisgKiBGaW5kIHRoZSBzY2Fu IHdoZXJlIHRoZSB3YWxrZXIgc2F5cyB0aGF0IHRoZSBnaXZlbiBzY2FuIHN0cmF0ZWd5IHNob3Vs ZCBiZQorICogdXNlZCBmb3IgdGhlIGdpdmVuIHJlbGlkIHNldCwgaWYgb25lIGV4aXN0cy4KKyAq CisgKiBSZXR1cm5zIHRoZSBwZ3BhX3NjYW4gb2JqZWN0LCBvciBOVUxMIGlmIG5vbmUgd2FzIGZv dW5kLgorICovCitzdGF0aWMgcGdwYV9zY2FuICoKK3BncGFfd2Fsa2VyX2ZpbmRfc2NhbihwZ3Bh X3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwKKwkJCQkJICBwZ3BhX3NjYW5fc3RyYXRlZ3kg c3RyYXRlZ3ksCisJCQkJCSAgQml0bWFwc2V0ICpyZWxpZHMpCit7CisJTGlzdAkgICAqc2NhbnMg PSB3YWxrZXItPnNjYW5zW3N0cmF0ZWd5XTsKKworCWZvcmVhY2hfcHRyKHBncGFfc2Nhbiwgc2Nh biwgc2NhbnMpCisJeworCQlpZiAoYm1zX2VxdWFsKHNjYW4tPnJlbGlkcywgcmVsaWRzKSkKKwkJ CXJldHVybiBzY2FuOworCX0KKworCXJldHVybiBOVUxMOworfQorCisvKgorICogRG9lcyB0aGlz IHdhbGtlciBzYXkgdGhhdCB0aGUgZ2l2ZW4gcXVlcnkgZmVhdHVyZSBhcHBsaWVzIHRvIHRoZSBn aXZlbgorICogcmVsaWQgc2V0PworICovCitzdGF0aWMgYm9vbAorcGdwYV93YWxrZXJfY29udGFp bnNfZmVhdHVyZShwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwKKwkJCQkJCQkgcGdw YV9xZl90eXBlIHR5cGUsCisJCQkJCQkJIEJpdG1hcHNldCAqcmVsaWRzKQoreworCUxpc3QJICAg KnF1ZXJ5X2ZlYXR1cmVzID0gd2Fsa2VyLT5xdWVyeV9mZWF0dXJlc1t0eXBlXTsKKworCWZvcmVh Y2hfcHRyKHBncGFfcXVlcnlfZmVhdHVyZSwgcWYsIHF1ZXJ5X2ZlYXR1cmVzKQorCXsKKwkJaWYg KGJtc19lcXVhbChxZi0+cmVsaWRzLCByZWxpZHMpKQorCQkJcmV0dXJuIHRydWU7CisJfQorCisJ cmV0dXJuIGZhbHNlOworfQorCisvKgorICogRG9lcyB0aGUgd2Fsa2VyIHNheSB0aGF0IHRoZSBn aXZlbiBqb2luIHN0cmF0ZWd5IHNob3VsZCBiZSB1c2VkIGZvciB0aGUKKyAqIGdpdmVuIHJlbGlk IHNldD8KKyAqLworc3RhdGljIGJvb2wKK3BncGFfd2Fsa2VyX2NvbnRhaW5zX2pvaW4ocGdwYV9w bGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsCisJCQkJCQkgIHBncGFfam9pbl9zdHJhdGVneSBz dHJhdGVneSwKKwkJCQkJCSAgQml0bWFwc2V0ICpyZWxpZHMpCit7CisJTGlzdAkgICAqam9pbl9z dHJhdGVnaWVzID0gd2Fsa2VyLT5qb2luX3N0cmF0ZWdpZXNbc3RyYXRlZ3ldOworCisJZm9yZWFj aF9wdHIoQml0bWFwc2V0LCBqc3JlbGlkcywgam9pbl9zdHJhdGVnaWVzKQorCXsKKwkJaWYgKGJt c19lcXVhbChqc3JlbGlkcywgcmVsaWRzKSkKKwkJCXJldHVybiB0cnVlOworCX0KKworCXJldHVy biBmYWxzZTsKK30KKworLyoKKyAqIERvZXMgdGhlIHdhbGtlciBzYXkgdGhhdCB0aGUgZ2l2ZW4g cmVsaWRzIHNob3VsZCBiZSBtYXJrZWQgYXMgTk9fR0FUSEVSPworICovCitzdGF0aWMgYm9vbAor cGdwYV93YWxrZXJfY29udGFpbnNfbm9fZ2F0aGVyKHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAq d2Fsa2VyLAorCQkJCQkJCSAgIEJpdG1hcHNldCAqcmVsaWRzKQoreworCXJldHVybiBibXNfaXNf c3Vic2V0KHJlbGlkcywgd2Fsa2VyLT5ub19nYXRoZXJfc2NhbnMpOworfQpkaWZmIC0tZ2l0IGEv Y29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3dhbGtlci5oIGIvY29udHJpYi9wZ19wbGFuX2Fk dmljZS9wZ3BhX3dhbGtlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw Li5iOTFhMzZjYTNkZAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uv cGdwYV93YWxrZXIuaApAQCAtMCwwICsxLDE0MSBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgor ICogcGdwYV93YWxrZXIuaAorICoJICBQbGFuIHRyZWUgaXRlcmF0aW9uCisgKgorICogQ29weXJp Z2h0IChjKSAyMDE2LTIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisg KgorICoJICBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfd2Fsa2VyLmgKKyAqCisgKi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAqLworI2lmbmRlZiBQR1BBX1dBTEtFUl9ICisjZGVmaW5lIFBHUEFfV0FM S0VSX0gKKworI2luY2x1ZGUgInBncGFfYXN0LmgiCisjaW5jbHVkZSAicGdwYV9qb2luLmgiCisj aW5jbHVkZSAicGdwYV9zY2FuLmgiCisKKy8qCisgKiBXaGVuIGdlbmVyYXRpbmcgYWR2aWNlLCB3 ZSBzaG91bGQgZW1pdCBlaXRoZXIgU0VNSUpPSU5fVU5JUVVFIGFkdmljZSBvcgorICogU0VNSUpP SU5fTk9OX1VOSVFVRSBhZHZpY2UgZm9yIGVhY2ggc2VtaWpvaW4gZGVwZW5kaW5nIG9uIHdoZXRo ZXIgd2UgY2hvc2UKKyAqIHRvIGltcGxlbWVudCBpdCBhcyBhIHNlbWlqb2luIG9yIHdoZXRoZXIg d2UgaW5zdGVhZCBjaG9zZSB0byBtYWtlIHRoZQorICogbnVsbGFibGUgc2lkZSB1bmlxdWUgYW5k IHRoZW4gcGVyZm9ybSBhbiBpbm5lciBqb2luLiBXaGVuIHRoZSBtYWtlLXVuaXF1ZQorICogc3Ry YXRlZ3kgaXMgbm90IGNob3NlbiwgaXQncyBub3QgZWFzeSB0byB0ZWxsIGZyb20gdGhlIGZpbmFs IHBsYW4gdHJlZQorICogd2hldGhlciBpdCB3YXMgY29uc2lkZXJlZC4gVGhhdCdzIGF3a3dhcmQs IGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0byBlbWl0CisgKiB1c2VsZXNzIFNFTUlKT0lOX05PTl9V TklRVUUgYWR2aWNlIHdoZW4gdGhlcmUgd2FzIG5vIGRlY2lzaW9uIHRvIGJlIG1hZGUuCisgKgor ICogVG8gYXZvaWQgdGhhdCwgZHVyaW5nIHBsYW5uaW5nLCB3ZSBjcmVhdGUgYSBwZ3BhX3NqX3Vu aXF1ZV9yZWwgZm9yIGVhY2gKKyAqIHJlbGF0aW9uIHRoYXQgd2UgY29uc2lkZXJlZCBtYWtpbmcg dW5pcXVlIGZvciBwdXJwb3NlcyBvZiBzZW1pam9pbiBwbGFubmluZy4KKyAqLwordHlwZWRlZiBz dHJ1Y3QgcGdwYV9zal91bmlxdWVfcmVsCit7CisJY2hhcgkgICAqcGxhbl9uYW1lOworCUJpdG1h cHNldCAgKnJlbGlkczsKK30gcGdwYV9zal91bmlxdWVfcmVsOworCisvKgorICogV2UgdXNlIHRo ZSB0ZXJtICJxdWVyeSBmZWF0dXJlIiB0byByZWZlciB0byBwbGFuIG5vZGVzIHRoYXQgYXJlIGlu dGVyZXN0aW5nCisgKiBpbiB0aGUgZm9sbG93aW5nIHdheTogdG8gZ2VuZXJhdGUgYWR2aWNlLCB3 ZSdsbCBuZWVkIHRvIGtub3cgdGhlIHNldCBvZgorICogc2FtZS1zdWJxdWVyeSwgbm9uLWpvaW4g UlRJcyBvY2N1cmluZyBhdCBvciBiZWxvdyB0aGF0IHBsYW4gbm9kZSwgd2l0aG91dAorICogYWRt aXh0dXJlIG9mIHBhcmVudCBhbmQgY2hpbGQgUlRJcy4KKyAqCisgKiBGb3IgZXhhbXBsZSwgR2F0 aGVyIG5vZGVzLCBkZXNpZ2luYXRlZCBieSBQR1BBUUZfR0FUSEVSLCBhbmQgR2F0aGVyIE1lcmdl CisgKiBub2RlcywgZGVzaWduYXRlZCBieSBQR1BBUUZfR0FUSEVSX01FUkdFLCBhcmUgcXVlcnkg ZmVhdHVyZXMsIGJlY2F1c2Ugd2UnbGwKKyAqIHdhbnQgdG8gYWRtaXQgc29tZSBraW5kIG9mIGFk dmljZSB0aGF0IGRlc2NyaWJlcyB0aGUgcG9ydGlvbiBvZiB0aGUgcGxhbgorICogdHJlZSB0aGF0 IGFwcGVhcnMgYmVuZWF0aCB0aG9zZSBub2Rlcy4KKyAqCisgKiBFYWNoIHNlbWlqb2luIGNhbiBi ZSBpbXBsZW1lbnRlZCBlaXRoZXIgYnkgZGlyZWN0bHkgcGVyZm9ybWluZyBhIHNlbWlqb2luLAor ICogb3IgYnkgbWFraW5nIG9uZSBzaWRlIHVuaXF1ZSBhbmQgdGhlbiBwZXJmb3JtaW5nIGEgbm9y bWFsIGpvaW4uIEVpdGhlciB3YXksCisgKiB3ZSB1c2UgYSBxdWVyeSBmZWF0dXJlIHRvIG5vdGlj ZSB3aGF0IGRlY2lzaW9uIHdhcyBtYWRlLCBzbyB0aGF0IHdlIGNhbgorICogZGVzY3JpYmUgaXQg YnkgZW51bWVyYXRpbmcgdGhlIFJUSXMgb24gdGhhdCBzaWRlIG9mIHRoZSBqb2luLgorICoKKyAq IFRvIGVsYWJvcmF0ZSBvbiB0aGUgIm5vIGFkbWl4dHVyZSBvZiBwYXJlbnQgYW5kIGNoaWxkIFJU SXMiIHJ1bGUsIGluIGFsbCBvZgorICogdGhlc2UgY2FzZXMsIGlmIHRoZSBlbnRpcmV0eSBvZiBh biBpbmhlcml0YW5jZSBoaWVyYXJjaHkgYXBwZWFycyBiZW5lYXRoCisgKiB0aGUgcXVlcnkgZmVh dHVyZSwgd2Ugb25seSB3YW50IHRvIG5hbWUgdGhlIHBhcmVudCB0YWJsZS4gQnV0IGl0J3MgYWxz bworICogcG9zc2libGUgdG8gaGF2ZSBjYXNlcyB3aGVyZSB3ZSBtdXN0IG5hbWUgY2hpbGQgdGFi bGVzLiBUaGlzIGlzIHBhcnRpY3VsYXJseQorICogbGlrZWx5IHRvIGhhcHBlbiB3aGVuIHBhcnRp dGlvbndpc2Ugam9pbiBpcyBpbiB1c2UsIGJ1dCBjb3VsZCBoYXBwZW4gZm9yCisgKiBHYXRoZXIg b3IgR2F0aGVyIE1lcmdlIGV2ZW4gd2l0aG91dCB0aGF0LCBpZiBvbmUgb2YgdGhvc2UgYXBwZWFy cyBiZWxvdworICogYW4gQXBwZW5kIG9yIE1lcmdlQXBwZW5kIG5vZGUgZm9yIGEgc2luZ2xlIHRh YmxlLgorICovCit0eXBlZGVmIGVudW0gcGdwYV9xZl90eXBlCit7CisJUEdQQVFGX0dBVEhFUiwK KwlQR1BBUUZfR0FUSEVSX01FUkdFLAorCVBHUEFRRl9TRU1JSk9JTl9OT05fVU5JUVVFLAorCVBH UEFRRl9TRU1JSk9JTl9VTklRVUUKKwkvKiB1cGRhdGUgTlVNX1BHUEFfUUZfVFlQRVMgaWYgeW91 IGFkZCBhbnl0aGluZyBoZXJlICovCit9IHBncGFfcWZfdHlwZTsKKworI2RlZmluZSBOVU1fUEdQ QV9RRl9UWVBFUyAoKGludCkgUEdQQVFGX1NFTUlKT0lOX1VOSVFVRSArIDEpCisKKy8qCisgKiBG b3IgZWFjaCBxdWVyeSBmZWF0dXJlLCB3ZSBrZWVwIHRyYWNrIG9mIHRoZSBmZWF0dXJlIHR5cGUg YW5kIHRoZSBzZXQgb2YKKyAqIHJlbGlkcyB0aGF0IHdlIGZvdW5kIHVuZGVybmVhdGggdGhlIHJl bGV2YW50IHBsYW4gbm9kZS4gU2VlIHRoZSBjb21tZW50cworICogb24gcGdwYV9xZl90eXBlLCBh Ym92ZSwgZm9yIGFkZGl0aW9uYWwgZGV0YWlscy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgcGdwYV9x dWVyeV9mZWF0dXJlCit7CisJcGdwYV9xZl90eXBlIHR5cGU7CisJUGxhbgkgICAqcGxhbjsKKwlC aXRtYXBzZXQgICpyZWxpZHM7Cit9IHBncGFfcXVlcnlfZmVhdHVyZTsKKworLyoKKyAqIENvbnRl eHQgb2JqZWN0IGZvciBwbGFuIHRyZWUgd2Fsay4KKyAqCisgKiBwc3RtdCBpcyB0aGUgUGxhbm5l ZFN0bXQgd2UncmUgc3R1ZHlpbmcuCisgKgorICogc2NhbnMgaXMgYW4gYXJyYXkgb2YgbGlzdHMg b2YgcGdwYV9zY2FuIG9iamVjdHMuIFRoZSBhcnJheSBpcyBpbmRleGVkIGJ5CisgKiB0aGUgc2Nh bidzIHBncGFfc2Nhbl9zdHJhdGVneS4KKyAqCisgKiBub19nYXRoZXJfc2NhbnMgaXMgdGhlIHNl dCBvZiBzY2FuIFJUSXMgdGhhdCBkbyBub3QgYXBwZWFyIGJlbmVhdGggYW55CisgKiBHYXRoZXIg b3IgR2F0aGVyIE1lcmdlIG5vZGUuCisgKgorICogdG9wbGV2ZWxfdW5yb2xsZWRfam9pbnMgaXMg YSBsaXN0IG9mIGFsbCBwZ3BhX3Vucm9sbGVkX2pvaW4gb2JqZWN0cyB0aGF0CisgKiBhcmUgbm90 IGEgY2hpbGQgb2Ygc29tZSBvdGhlciBwZ3BhX3Vucm9sbGVkX2pvaW4uCisgKgorICogam9pbl9z dHJhdGVneSBpcyBhbiBhcnJheSBvZiBsaXN0cyBvZiBCaXRtYXBzZXQgb2JqZWN0cy4gRWFjaCBC aXRtYXBzZXQKKyAqIGlzIHRoZSBzZXQgb2YgcmVsaWRzIHRoYXQgYXBwZWFycyBvbiB0aGUgaW5u ZXIgc2lkZSBvZiBzb21lIGpvaW4gKGV4Y2x1ZGluZworICogUlRJcyBmcm9tIHBhcnRpdGlvbiBj aGlsZHJlbiBhbmQgc3VicXVlcmllcykuIFRoZSBhcnJheSBpcyBpbmRleGVkIGJ5CisgKiBwZ3Bh X2pvaW5fc3RyYXRlZ3kuCisgKgorICogcXVlcnlfZmVhdHVyZXMgaXMgYW4gYXJyYXkgbGlzdHMg b2YgcGdwYV9xdWVyeV9mZWF0dXJlIG9iamVjdHMsIGluZGV4ZWQKKyAqIGJ5IHBncGFfcWZfdHlw ZS4KKyAqCisgKiBmdXR1cmVfcXVlcnlfZmVhdHVyZXMgaXMgb25seSB1c2VkIGR1cmluZyB0aGUg cGxhbiB0cmVlIHdhbGsgYW5kIHNob3VsZAorICogYmUgZW1wdHkgd2hlbiB0aGUgdHJlZSB3YWxr IGNvbmNsdWRlcy4gSXQgaXMgYSBsaXN0IG9mIHBncGFfcXVlcnlfZmVhdHVyZQorICogb2JqZWN0 cyBmb3IgUGxhbiBub2RlcyB0aGF0IHRoZSBwbGFuIHRyZWUgd2FsayBoYXMgbm90IHlldCBlbmNv dW50ZXJlZDsKKyAqIHdoZW4gZW5jb3VudGVyZWQsIHRoZXkgd2lsbCBiZSBtb3ZlZCB0byB0aGUg bGlzdCBvZiBhY3RpdmUgcXVlcnkgZmVhdHVyZXMKKyAqIHRoYXQgaXMgcHJvcGFnYXRlZCB2aWEg dGhlIGNhbGwgc3RhY2suCisgKi8KK3R5cGVkZWYgc3RydWN0IHBncGFfcGxhbl93YWxrZXJfY29u dGV4dAoreworCVBsYW5uZWRTdG10ICpwc3RtdDsKKwlMaXN0CSAgICpzY2Fuc1tOVU1fUEdQQV9T Q0FOX1NUUkFURUdZXTsKKwlCaXRtYXBzZXQgICpub19nYXRoZXJfc2NhbnM7CisJTGlzdAkgICAq dG9wbGV2ZWxfdW5yb2xsZWRfam9pbnM7CisJTGlzdAkgICAqam9pbl9zdHJhdGVnaWVzW05VTV9Q R1BBX0pPSU5fU1RSQVRFR1ldOworCUxpc3QJICAgKnF1ZXJ5X2ZlYXR1cmVzW05VTV9QR1BBX1FG X1RZUEVTXTsKKwlMaXN0CSAgICpmdXR1cmVfcXVlcnlfZmVhdHVyZXM7Cit9IHBncGFfcGxhbl93 YWxrZXJfY29udGV4dDsKKworZXh0ZXJuIHZvaWQgcGdwYV9wbGFuX3dhbGtlcihwZ3BhX3BsYW5f d2Fsa2VyX2NvbnRleHQgKndhbGtlciwKKwkJCQkJCQkgUGxhbm5lZFN0bXQgKnBzdG10LAorCQkJ CQkJCSBMaXN0ICpzal91bmlxdWVfcmVscyk7CisKK2V4dGVybiB2b2lkIHBncGFfYWRkX2Z1dHVy ZV9mZWF0dXJlKHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJCQkJCQkJcGdw YV9xZl90eXBlIHR5cGUsCisJCQkJCQkJCQlQbGFuICpwbGFuKTsKKworZXh0ZXJuIEVsaWRlZE5v ZGUgKnBncGFfbGFzdF9lbGlkZWRfbm9kZShQbGFubmVkU3RtdCAqcHN0bXQsIFBsYW4gKnBsYW4p OworZXh0ZXJuIEJpdG1hcHNldCAqcGdwYV9yZWxpZHMoUGxhbiAqcGxhbik7CitleHRlcm4gSW5k ZXggcGdwYV9zY2FucmVsaWQoUGxhbiAqcGxhbik7CitleHRlcm4gQml0bWFwc2V0ICpwZ3BhX2Zp bHRlcl9vdXRfam9pbl9yZWxpZHMoQml0bWFwc2V0ICpyZWxpZHMsIExpc3QgKnJ0YWJsZSk7CisK K2V4dGVybiBib29sIHBncGFfd2Fsa2VyX3dvdWxkX2FkdmlzZShwZ3BhX3BsYW5fd2Fsa2VyX2Nv bnRleHQgKndhbGtlciwKKwkJCQkJCQkJCSBwZ3BhX2lkZW50aWZpZXIgKnJ0X2lkZW50aWZpZXJz LAorCQkJCQkJCQkJIHBncGFfYWR2aWNlX3RhZ190eXBlIHRhZywKKwkJCQkJCQkJCSBwZ3BhX2Fk dmljZV90YXJnZXQgKnRhcmdldCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19w bGFuX2FkdmljZS9zcWwvZ2F0aGVyLnNxbCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL2dh dGhlci5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjc3NjY2NmJm MTk2Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvZ2F0aGVy LnNxbApAQCAtMCwwICsxLDg2IEBACitMT0FEICdwZ19wbGFuX2FkdmljZSc7CitTRVQgbWF4X3Bh cmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9IDE7CitTRVQgcGFyYWxsZWxfc2V0dXBfY29zdCA9 IDA7CitTRVQgcGFyYWxsZWxfdHVwbGVfY29zdCA9IDA7CitTRVQgbWluX3BhcmFsbGVsX3RhYmxl X3NjYW5fc2l6ZSA9IDA7CitTRVQgZGVidWdfcGFyYWxsZWxfcXVlcnkgPSBvZmY7CisKK0NSRUFU RSBUQUJMRSBndF9kaW0gKGlkIHNlcmlhbCBwcmltYXJ5IGtleSwgZGltIHRleHQpCisJV0lUSCAo YXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gZ3RfZGltIChkaW0pIFNF TEVDVCByYW5kb20oKTo6dGV4dCBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMCkgZzsKK1ZBQ1VV TSBBTkFMWVpFIGd0X2RpbTsKKworQ1JFQVRFIFRBQkxFIGd0X2ZhY3QgKAorCWlkIGludCBub3Qg bnVsbCwKKwlkaW1faWQgaW50ZWdlciBub3QgbnVsbCByZWZlcmVuY2VzIGd0X2RpbSAoaWQpCisp IFdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJTlRPIGd0X2ZhY3QK KwlTRUxFQ1QgZywgKGclMykrMSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDAwMCkgZzsKK1ZB Q1VVTSBBTkFMWVpFIGd0X2ZhY3Q7CisKKy0tIEJ5IGRlZmF1bHQsIHdlIGV4cGVjdCBHYXRoZXIg TWVyZ2Ugd2l0aCBhIHBhcmFsbGVsIGhhc2ggam9pbi4KK0VYUExBSU4gKENPU1RTIE9GRiwgUExB Tl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBndF9mYWN0IGYgSk9JTiBndF9kaW0gZCBPTiBmLmRp bV9pZCA9IGQuaWQgT1JERVIgQlkgZC5pZDsKKworLS0gRm9yY2UgR2F0aGVyIG9yIEdhdGhlciBN ZXJnZSBvZiBib3RoIHJlbGF0aW9ucyB0b2dldGhlci4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3Bs YW5fYWR2aWNlLmFkdmljZSA9ICdnYXRoZXJfbWVyZ2UoKGYgZCkpJzsKK0VYUExBSU4gKENPU1RT IE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBndF9mYWN0IGYgSk9JTiBndF9kaW0g ZCBPTiBmLmRpbV9pZCA9IGQuaWQgT1JERVIgQlkgZC5pZDsKK1NFVCBMT0NBTCBwZ19wbGFuX2Fk dmljZS5hZHZpY2UgPSAnZ2F0aGVyKChmIGQpKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5f QURWSUNFKQorCVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5kaW1f aWQgPSBkLmlkIE9SREVSIEJZIGQuaWQ7CitDT01NSVQ7CisKKy0tIEZvcmNlIGEgc2VwYXJhdGUg R2F0aGVyIG9yIEdhdGhlciBNZXJnZSBvcGVyYXRpb24gZm9yIGVhY2ggcmVsYXRpb24uCitCRUdJ TjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnZ2F0aGVyX21lcmdlKGYgZCkn OworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2Zh Y3QgZiBKT0lOIGd0X2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZCBPUkRFUiBCWSBkLmlkOworU0VU IExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdnYXRoZXIoZiBkKSc7CitFWFBMQUlOIChD T1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3Rf ZGltIGQgT04gZi5kaW1faWQgPSBkLmlkIE9SREVSIEJZIGQuaWQ7CitTRVQgTE9DQUwgcGdfcGxh bl9hZHZpY2UuYWR2aWNlID0gJ2dhdGhlcigoZCBkL2QuZCkpJzsKK0VYUExBSU4gKENPU1RTIE9G RiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBndF9mYWN0IGYgSk9JTiBndF9kaW0gZCBP TiBmLmRpbV9pZCA9IGQuaWQgT1JERVIgQlkgZC5pZDsKK0NPTU1JVDsKKworLS0gRm9yY2UgYSBH YXRoZXIgb3IgR2F0aGVyIE1lcmdlIG9uIG9uZSByZWxhdGlvbiBidXQgbm8gcGFyYWxsZWxpc20g b24gb3RoZXIuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnZ2F0 aGVyX21lcmdlKGYpIG5vX2dhdGhlcihkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURW SUNFKQorCVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5kaW1faWQg PSBkLmlkIE9SREVSIEJZIGQuaWQ7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0g J2dhdGhlcl9tZXJnZShkKSBub19nYXRoZXIoZiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFO X0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2RpbSBkIE9OIGYuZGlt X2lkID0gZC5pZCBPUkRFUiBCWSBkLmlkOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmlj ZSA9ICdnYXRoZXIoZikgbm9fZ2F0aGVyKGQpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9B RFZJQ0UpCisJU0VMRUNUICogRlJPTSBndF9mYWN0IGYgSk9JTiBndF9kaW0gZCBPTiBmLmRpbV9p ZCA9IGQuaWQgT1JERVIgQlkgZC5pZDsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2Ug PSAnZ2F0aGVyKGQpIG5vX2dhdGhlcihmKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURW SUNFKQorCVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5kaW1faWQg PSBkLmlkIE9SREVSIEJZIGQuaWQ7CitDT01NSVQ7CisKKy0tIEZvcmNlIG5vIEdhdGhlciBvciBH YXRoZXIgTWVyZ2UgdXNlIGF0IGFsbC4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNl LmFkdmljZSA9ICdub19nYXRoZXIoZiBkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURW SUNFKQorCVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5kaW1faWQg PSBkLmlkIE9SREVSIEJZIGQuaWQ7CitDT01NSVQ7CisKKy0tIENhbid0IGZvcmNlIEdhdGhlciBN ZXJnZSB3aXRob3V0IHRoZSBPUkRFUiBCWSBjbGF1c2UsIGJ1dCBqdXN0IEdhdGhlciBpcyBPSy4K K0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdnYXRoZXJfbWVyZ2Uo KGYgZCkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJP TSBndF9mYWN0IGYgSk9JTiBndF9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CitTRVQgTE9DQUwg cGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2dhdGhlcigoZiBkKSknOworRVhQTEFJTiAoQ09TVFMg T0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2RpbSBk IE9OIGYuZGltX2lkID0gZC5pZDsKK0NPTU1JVDsKKworLS0gVGVzdCBjb25mbGljdGluZyBhZHZp Y2UuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnZ2F0aGVyKChm IGQpKSBub19nYXRoZXIoZiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlT RUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZCBP UkRFUiBCWSBkLmlkOworQ09NTUlUOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2Fkdmlj ZS9zcWwvam9pbl9vcmRlci5zcWwgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9qb2luX29y ZGVyLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNWUxNmU1NGVm YWQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9qb2luX29y ZGVyLnNxbApAQCAtMCwwICsxLDE0NSBAQAorTE9BRCAncGdfcGxhbl9hZHZpY2UnOworU0VUIG1h eF9wYXJhbGxlbF93b3JrZXJzX3Blcl9nYXRoZXIgPSAwOworCitDUkVBVEUgVEFCTEUgam9fZGlt MSAoaWQgaW50ZWdlciBwcmltYXJ5IGtleSwgZGltMSB0ZXh0LCB2YWwxIGludCkKKwlXSVRIIChh dXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5UTyBqb19kaW0xIChpZCwgZGlt MSwgdmFsMSkKKwlTRUxFQ1QgZywgJ3NvbWUgZmlsbGVyIHRleHQgJyB8fCBnLCAoZyAlIDMpICsg MQorCSAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDApIGc7CitWQUNVVU0gQU5BTFlaRSBqb19k aW0xOworQ1JFQVRFIFRBQkxFIGpvX2RpbTIgKGlkIGludGVnZXIgcHJpbWFyeSBrZXksIGRpbTIg dGV4dCwgdmFsMiBpbnQpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5T RVJUIElOVE8gam9fZGltMiAoaWQsIGRpbTIsIHZhbDIpCisJU0VMRUNUIGcsICdzb21lIGZpbGxl ciB0ZXh0ICcgfHwgZywgKGcgJSA3KSArIDEKKwkgIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAw MCkgZzsKK1ZBQ1VVTSBBTkFMWVpFIGpvX2RpbTI7CisKK0NSRUFURSBUQUJMRSBqb19mYWN0ICgK KwlpZCBpbnQgcHJpbWFyeSBrZXksCisJZGltMV9pZCBpbnRlZ2VyIG5vdCBudWxsIHJlZmVyZW5j ZXMgam9fZGltMSAoaWQpLAorCWRpbTJfaWQgaW50ZWdlciBub3QgbnVsbCByZWZlcmVuY2VzIGpv X2RpbTIgKGlkKQorKSBXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitJTlNFUlQg SU5UTyBqb19mYWN0CisJU0VMRUNUIGcsIChnJTEwMCkrMSwgKGclMTAwKSsxIEZST00gZ2VuZXJh dGVfc2VyaWVzKDEsMTAwMDAwKSBnOworVkFDVVVNIEFOQUxZWkUgam9fZmFjdDsKKworLS0gV2Ug ZXhwZWN0IHRvIGpvaW4gdG8gZDIgZmlyc3QgYW5kIHRoZW4gZDEsIHNpbmNlIHRoZSBjb25kaXRp b24gb24gZDIKKy0tIGlzIG1vcmUgc2VsZWN0aXZlLgorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFO X0FEVklDRSkKK1NFTEVDVCAqIEZST00gam9fZmFjdCBmCisJTEVGVCBKT0lOIGpvX2RpbTEgZDEg T04gZi5kaW0xX2lkID0gZDEuaWQKKwlMRUZUIEpPSU4gam9fZGltMiBkMiBPTiBmLmRpbTJfaWQg PSBkMi5pZAorCVdIRVJFIHZhbDEgPSAxIEFORCB2YWwyID0gMTsKKworLS0gRm9yY2UgYSBmZXcg ZGlmZmVyZW50IGpvaW4gb3JkZXJzLiBTb21lIG9mIHRoZXNlIGFyZSB2ZXJ5IGluZWZmaWNpZW50 LAorLS0gYnV0IHRoZSBwbGFubmVyIGNvbnNpZGVycyB0aGVtIGFsbCB2aWFibGUuCitCRUdJTjsK K1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnam9pbl9vcmRlcihmIGQxIGQyKSc7 CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBqb19mYWN0 IGYKKwlMRUZUIEpPSU4gam9fZGltMSBkMSBPTiBmLmRpbTFfaWQgPSBkMS5pZAorCUxFRlQgSk9J TiBqb19kaW0yIGQyIE9OIGYuZGltMl9pZCA9IGQyLmlkCisJV0hFUkUgdmFsMSA9IDEgQU5EIHZh bDIgPSAxOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdqb2luX29yZGVyKGYg ZDIgZDEpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9N IGpvX2ZhY3QgZgorCUxFRlQgSk9JTiBqb19kaW0xIGQxIE9OIGYuZGltMV9pZCA9IGQxLmlkCisJ TEVGVCBKT0lOIGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkID0gZDIuaWQKKwlXSEVSRSB2YWwxID0g MSBBTkQgdmFsMiA9IDE7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2pvaW5f b3JkZXIoZDEgZiBkMiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVD VCAqIEZST00gam9fZmFjdCBmCisJTEVGVCBKT0lOIGpvX2RpbTEgZDEgT04gZi5kaW0xX2lkID0g ZDEuaWQKKwlMRUZUIEpPSU4gam9fZGltMiBkMiBPTiBmLmRpbTJfaWQgPSBkMi5pZAorCVdIRVJF IHZhbDEgPSAxIEFORCB2YWwyID0gMTsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2Ug PSAnam9pbl9vcmRlcihmIChkMSBkMikpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJ Q0UpCitTRUxFQ1QgKiBGUk9NIGpvX2ZhY3QgZgorCUxFRlQgSk9JTiBqb19kaW0xIGQxIE9OIGYu ZGltMV9pZCA9IGQxLmlkCisJTEVGVCBKT0lOIGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkID0gZDIu aWQKKwlXSEVSRSB2YWwxID0gMSBBTkQgdmFsMiA9IDE7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZp Y2UuYWR2aWNlID0gJ2pvaW5fb3JkZXIoZiB7ZDEgZDJ9KSc7CitFWFBMQUlOIChDT1NUUyBPRkYs IFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBqb19mYWN0IGYKKwlMRUZUIEpPSU4gam9fZGlt MSBkMSBPTiBmLmRpbTFfaWQgPSBkMS5pZAorCUxFRlQgSk9JTiBqb19kaW0yIGQyIE9OIGYuZGlt Ml9pZCA9IGQyLmlkCisJV0hFUkUgdmFsMSA9IDEgQU5EIHZhbDIgPSAxOworQ09NTUlUOworCist LSBGb3JjZSBhIGpvaW4gb3JkZXIgYnkgbWVudGlvbmluZyBqdXN0IGEgcHJlZml4IG9mIHRoZSBq b2luIGxpc3QuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnam9p bl9vcmRlcihkMiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAq IEZST00gam9fZmFjdCBmCisJTEVGVCBKT0lOIGpvX2RpbTEgZDEgT04gZi5kaW0xX2lkID0gZDEu aWQKKwlMRUZUIEpPSU4gam9fZGltMiBkMiBPTiBmLmRpbTJfaWQgPSBkMi5pZAorCVdIRVJFIHZh bDEgPSAxIEFORCB2YWwyID0gMTsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAn am9pbl9vcmRlcihkMiBkMSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NF TEVDVCAqIEZST00gam9fZmFjdCBmCisJTEVGVCBKT0lOIGpvX2RpbTEgZDEgT04gZi5kaW0xX2lk ID0gZDEuaWQKKwlMRUZUIEpPSU4gam9fZGltMiBkMiBPTiBmLmRpbTJfaWQgPSBkMi5pZAorCVdI RVJFIHZhbDEgPSAxIEFORCB2YWwyID0gMTsKK0NPTU1JVDsKKworLS0gam9fZmFjdCBpcyBub3Qg cGFydGl0aW9uZWQsIGJ1dCBsZXQncyB0cnkgcHJldGVuZGluZyB0aGF0IGl0IGlzIGFuZAorLS0g dmVyaWZ5aW5nIHRoYXQgdGhlIGFkdmljZSBkb2VzIG5vdCBhcHBseS4KK0JFR0lOOworU0VUIExP Q0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdqb2luX29yZGVyKGYvZDEgZDEgZDIpJzsKK0VY UExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGpvX2ZhY3QgZgor CUxFRlQgSk9JTiBqb19kaW0xIGQxIE9OIGYuZGltMV9pZCA9IGQxLmlkCisJTEVGVCBKT0lOIGpv X2RpbTIgZDIgT04gZi5kaW0yX2lkID0gZDIuaWQKKwlXSEVSRSB2YWwxID0gMSBBTkQgdmFsMiA9 IDE7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2pvaW5fb3JkZXIoZi9kMSAo ZDEgZDIpKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJP TSBqb19mYWN0IGYKKwlMRUZUIEpPSU4gam9fZGltMSBkMSBPTiBmLmRpbTFfaWQgPSBkMS5pZAor CUxFRlQgSk9JTiBqb19kaW0yIGQyIE9OIGYuZGltMl9pZCA9IGQyLmlkCisJV0hFUkUgdmFsMSA9 IDEgQU5EIHZhbDIgPSAxOworQ09NTUlUOworCistLSBUaGUgdW51c3VhbCBmb3JtdWxhdGlvbiBv ZiB0aGlzIHF1ZXJ5IGlzIGludGVuZGVkIHRvIHByZXZlbnQgdGhlIHF1ZXJ5CistLSBwbGFubmVy IGZyb20gcmVkdWNpbmcgdGhlIEZVTEwgSk9JTiB0byBzb21lIG90aGVyIGpvaW4gdHlwZSwgc28g dGhhdCB3ZQorLS0gY2FuIHRlc3Qgd2hhdCBoYXBwZW5zIHdpdGggYSBqb2luIHR5cGUgdGhhdCBj YW5ub3QgYmUgcmVvcmRlcmVkLgorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NF TEVDVCAqIEZST00gam9fZGltMSBkMQorCUlOTkVSIEpPSU4gKGpvX2ZhY3QgZiBGVUxMIEpPSU4g am9fZGltMiBkMiBPTiBmLmRpbTJfaWQgKyAwID0gZDIuaWQgKyAwKQorCU9OIGQxLmlkID0gZi5k aW0xX2lkIE9SIGYuZGltMV9pZCBJUyBOVUxMOworCistLSBXZSBzaG91bGQgbm90IGJlIGFibGUg dG8gZm9yY2UgdGhlIHBsYW5uZXIgdG8gam9pbiBmIHRvIGQxIGZpcnN0LCBiZWNhdXNlCistLSB0 aGF0IGlzIG5vdCBhIHZhbGlkIGpvaW4gb3JkZXIsIGJ1dCB3ZSBzaG91bGQgYmUgYWJsZSB0byBm b3JjZSB0aGUgcGxhbm5lcgorLS0gdG8gbWFrZSBlaXRoZXIgZDIgb3IgZiB0aGUgZHJpdmluZyB0 YWJsZS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdqb2luX29y ZGVyKGYgZDEgZDIpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1Qg KiBGUk9NIGpvX2RpbTEgZDEKKwlJTk5FUiBKT0lOIChqb19mYWN0IGYgRlVMTCBKT0lOIGpvX2Rp bTIgZDIgT04gZi5kaW0yX2lkICsgMCA9IGQyLmlkICsgMCkKKwlPTiBkMS5pZCA9IGYuZGltMV9p ZCBPUiBmLmRpbTFfaWQgSVMgTlVMTDsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2Ug PSAnam9pbl9vcmRlcihmIGQyIGQxKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNF KQorU0VMRUNUICogRlJPTSBqb19kaW0xIGQxCisJSU5ORVIgSk9JTiAoam9fZmFjdCBmIEZVTEwg Sk9JTiBqb19kaW0yIGQyIE9OIGYuZGltMl9pZCArIDAgPSBkMi5pZCArIDApCisJT04gZDEuaWQg PSBmLmRpbTFfaWQgT1IgZi5kaW0xX2lkIElTIE5VTEw7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZp Y2UuYWR2aWNlID0gJ2pvaW5fb3JkZXIoZDIgZiBkMSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQ TEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gam9fZGltMSBkMQorCUlOTkVSIEpPSU4gKGpvX2Zh Y3QgZiBGVUxMIEpPSU4gam9fZGltMiBkMiBPTiBmLmRpbTJfaWQgKyAwID0gZDIuaWQgKyAwKQor CU9OIGQxLmlkID0gZi5kaW0xX2lkIE9SIGYuZGltMV9pZCBJUyBOVUxMOworQ09NTUlUOworCist LSBUd28gaW5jb21wYXRpYmxlIGpvaW4gb3JkZXJzIHNob3VsZCBjb25mbGljdC4gSW4gdGhlIHNl Y29uZCBjYXNlLAorLS0gdGhlIGNvbmZsaWN0IGlzIGltcGxpY2l0OiBpZiBkMSBpcyBvbiB0aGUg aW5uZXIgc2lkZSBvZiBhIGpvaW4gb2YgYW55CistLSB0eXBlLCBpdCBjYW5ub3QgYWxzbyBiZSB0 aGUgZHJpdmluZyB0YWJsZS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmlj ZSA9ICdqb2luX29yZGVyKGYpIGpvaW5fb3JkZXIoZDEpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwg UExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGpvX2RpbTEgZDEKKwlJTk5FUiBKT0lOIChqb19m YWN0IGYgRlVMTCBKT0lOIGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkICsgMCA9IGQyLmlkICsgMCkK KwlPTiBkMS5pZCA9IGYuZGltMV9pZCBPUiBmLmRpbTFfaWQgSVMgTlVMTDsKK1NFVCBMT0NBTCBw Z19wbGFuX2FkdmljZS5hZHZpY2UgPSAnam9pbl9vcmRlcihkMSkgaGFzaF9qb2luKGQxKSc7CitF WFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBqb19kaW0xIGQx CisJSU5ORVIgSk9JTiAoam9fZmFjdCBmIEZVTEwgSk9JTiBqb19kaW0yIGQyIE9OIGYuZGltMl9p ZCArIDAgPSBkMi5pZCArIDApCisJT04gZDEuaWQgPSBmLmRpbTFfaWQgT1IgZi5kaW0xX2lkIElT IE5VTEw7CitDT01NSVQ7CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9q b2luX3N0cmF0ZWd5LnNxbCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL2pvaW5fc3RyYXRl Z3kuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5lZGQ1YzRjMGUx NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL2pvaW5fc3Ry YXRlZ3kuc3FsCkBAIC0wLDAgKzEsODQgQEAKK0xPQUQgJ3BnX3BsYW5fYWR2aWNlJzsKK1NFVCBt YXhfcGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyID0gMDsKKworQ1JFQVRFIFRBQkxFIGpvaW5f ZGltIChpZCBzZXJpYWwgcHJpbWFyeSBrZXksIGRpbSB0ZXh0KQorCVdJVEggKGF1dG92YWN1dW1f ZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJTlRPIGpvaW5fZGltIChkaW0pIFNFTEVDVCByYW5k b20oKTo6dGV4dCBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMCkgZzsKK1ZBQ1VVTSBBTkFMWVpF IGpvaW5fZGltOworCitDUkVBVEUgVEFCTEUgam9pbl9mYWN0ICgKKwlpZCBpbnQgcHJpbWFyeSBr ZXksCisJZGltX2lkIGludGVnZXIgbm90IG51bGwgcmVmZXJlbmNlcyBqb2luX2RpbSAoaWQpCisp IFdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJTlRPIGpvaW5fZmFj dAorCVNFTEVDVCBnLCAoZyUzKSsxIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMDAwKSBnOwor Q1JFQVRFIElOREVYIGpvaW5fZmFjdF9kaW1faWQgT04gam9pbl9mYWN0IChkaW1faWQpOworVkFD VVVNIEFOQUxZWkUgam9pbl9mYWN0OworCistLSBXZSBleHBlY3QgYSBoYXNoIGpvaW4gYnkgZGVm YXVsdC4KK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBq b2luX2ZhY3QgZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworCistLSBUcnkg Zm9yY2luZyBlYWNoIGpvaW4gbWV0aG9kIGluIHR1cm4gd2l0aCBqb2luX2RpbSBhcyB0aGUgaW5u ZXIgdGFibGUuCistLSBBbGwgb2YgdGhlc2Ugc2hvdWxkIHdvcmsgZXhjZXB0IGZvciBNRVJHRV9K T0lOX01BVEVSSUFMSVpFOyB0aGF0IHdpbGwKKy0tIGZhaWwsIGJlY2F1c2UgdGhlIHBsYW5uZXIg a25vd3MgdGhhdCBqb2luX2RpbSAoaWQpIGlzIHVuaXF1ZSwgYW5kIHdpbGwKKy0tIHJlZnVzZSB0 byBhZGQgbWFyay9yZXN0b3JlIG92ZXJoZWFkLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9h ZHZpY2UuYWR2aWNlID0gJ0hBU0hfSk9JTihkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5f QURWSUNFKQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYu ZGltX2lkID0gZC5pZDsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnTUVSR0Vf Sk9JTl9NQVRFUklBTElaRShkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQor CVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0g ZC5pZDsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnTUVSR0VfSk9JTl9QTEFJ TihkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00g am9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKK1NFVCBMT0NB TCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnTkVTVEVEX0xPT1BfTUFURVJJQUxJWkUoZCknOwor RVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGpvaW5fZmFj dCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CitTRVQgTE9DQUwgcGdfcGxh bl9hZHZpY2UuYWR2aWNlID0gJ05FU1RFRF9MT09QX01FTU9JWkUoZCknOworRVhQTEFJTiAoQ09T VFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9p bl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2 aWNlID0gJ05FU1RFRF9MT09QX1BMQUlOKGQpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9B RFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5fZGltIGQgT04gZi5k aW1faWQgPSBkLmlkOworQ09NTUlUOworCistLSBOb3cgdHJ5IGZvcmNpbmcgZWFjaCBqb2luIG1l dGhvZCBpbiB0dXJuIHdpdGggam9pbl9mYWN0IGFzIHRoZSBpbm5lcgorLS0gdGFibGUuIEFsbCBv ZiB0aGVzZSBzaG91bGQgd29yay4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFk dmljZSA9ICdIQVNIX0pPSU4oZiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkK KwlTRUxFQ1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9 IGQuaWQ7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ01FUkdFX0pPSU5fTUFU RVJJQUxJWkUoZiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1Qg KiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CitT RVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ01FUkdFX0pPSU5fUExBSU4oZiknOwor RVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGpvaW5fZmFj dCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CitTRVQgTE9DQUwgcGdfcGxh bl9hZHZpY2UuYWR2aWNlID0gJ05FU1RFRF9MT09QX01BVEVSSUFMSVpFKGYpJzsKK0VYUExBSU4g KENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lO IGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNl LmFkdmljZSA9ICdORVNURURfTE9PUF9NRU1PSVpFKGYpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwg UExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5fZGltIGQg T04gZi5kaW1faWQgPSBkLmlkOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdO RVNURURfTE9PUF9QTEFJTihmKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQor CVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0g ZC5pZDsKK0NPTU1JVDsKKworLS0gTm9uLXdvcmtpbmcgY2FzZXMuIFdlIGNhbid0IGZvcmNlIGEg Zm9yZWlnbiBqb2luIGJldHdlZW4gdGhlc2UgdGFibGVzLAorLS0gYmVjYXVzZSB0aGV5IGFyZW4n dCBmb3JlaWduIHRhYmxlcy4gV2UgYWxzbyBjYW4ndCB1c2UgdHdvIGRpZmZlcmVudAorLS0gc3Ry YXRlZ2llcyBvbiB0aGUgc2FtZSB0YWJsZSwgbm9yIGNhbiB3ZSBwdXQgYm90aCB0YWJsZXMgb24g dGhlIGlubmVyCistLSBzaWRlIG9mIHRoZSBzYW1lIGpvaW4uCitCRUdJTjsKK1NFVCBMT0NBTCBw Z19wbGFuX2FkdmljZS5hZHZpY2UgPSAnRk9SRUlHTl9KT0lOKChmIGQpKSc7CitFWFBMQUlOIChD T1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBq b2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5h ZHZpY2UgPSAnTkVTVEVEX0xPT1BfUExBSU4oZikgTkVTVEVEX0xPT1BfTUFURVJJQUxJWkUoZikn OworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGpvaW5f ZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CitTRVQgTE9DQUwgcGdf cGxhbl9hZHZpY2UuYWR2aWNlID0gJ05FU1RFRF9MT09QX1BMQUlOKGYgZCknOworRVhQTEFJTiAo Q09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4g am9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CitDT01NSVQ7CmRpZmYgLS1naXQgYS9jb250 cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9sb2NhbF9jb2xsZWN0b3Iuc3FsIGIvY29udHJpYi9wZ19w bGFuX2FkdmljZS9zcWwvbG9jYWxfY29sbGVjdG9yLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwMC4uZGIxZTIzNDg4ZDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmli L3BnX3BsYW5fYWR2aWNlL3NxbC9sb2NhbF9jb2xsZWN0b3Iuc3FsCkBAIC0wLDAgKzEsNDQgQEAK K0NSRUFURSBFWFRFTlNJT04gcGdfcGxhbl9hZHZpY2U7CitTRVQgZGVidWdfcGFyYWxsZWxfcXVl cnkgPSBvZmY7CisKKy0tIFRyeSBjbGVhcmluZyBhZHZpY2UgYmVmb3JlIHdlJ3ZlIGNvbGxlY3Rl ZCBhbnkuCitTRUxFQ1QgcGdfY2xlYXJfY29sbGVjdGVkX2xvY2FsX2FkdmljZSgpOworCistLSBT ZXQgYSBzbWFsbCBhZHZpY2UgY29sbGVjdGlvbiBsaW1pdCBzbyB0aGF0IHdlJ2xsIGV4Y2VlZCBp dC4KK1NFVCBwZ19wbGFuX2FkdmljZS5sb2NhbF9jb2xsZWN0aW9uX2xpbWl0ID0gMjsKKworLS0g RW5hYmxlIHRoZSBjb2xsZWN0b3IuCitTRVQgcGdfcGxhbl9hZHZpY2UubG9jYWxfY29sbGVjdG9y ID0gb247CisKKy0tIFNldCB1cCBhIGR1bW15IHRhYmxlLgorQ1JFQVRFIFRBQkxFIGR1bW15X3Rh YmxlIChhIGludCBwcmltYXJ5IGtleSwgYiB0ZXh0KQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxl ZCA9IGZhbHNlLCBwYXJhbGxlbF93b3JrZXJzID0gMCk7CisKKy0tIFRlc3QgcXVlcmllcy4KK1NF TEVDVCAqIEZST00gZHVtbXlfdGFibGUgYSwgZHVtbXlfdGFibGUgYjsKK1NFTEVDVCAqIEZST00g ZHVtbXlfdGFibGU7CisKKy0tIFNob3VsZCByZXR1cm4gdGhlIGFkdmljZSBmcm9tIHRoZSBzZWNv bmQgdGVzdCBxdWVyeS4KK1NFTEVDVCBhZHZpY2UgRlJPTSBwZ19nZXRfY29sbGVjdGVkX2xvY2Fs X2FkdmljZSgpIE9SREVSIEJZIGlkIERFU0MgTElNSVQgMTsKKworLS0gTm93IHRyeSBjbGVhcmlu ZyBhZHZpY2UgYWdhaW4uCitTRUxFQ1QgcGdfY2xlYXJfY29sbGVjdGVkX2xvY2FsX2FkdmljZSgp OworCistLSBSYWlzZSB0aGUgY29sbGVjdGlvbiBsaW1pdCBzbyB0aGF0IHRoZSBjb2xsZWN0b3Ig dXNlcyBtdWx0aXBsZSBjaHVua3MuCitTRVQgcGdfcGxhbl9hZHZpY2UubG9jYWxfY29sbGVjdGlv bl9saW1pdCA9IDIwMDA7CisKKy0tIFB1c2ggYSBidW5jaCBvZiBxdWVyaWVzIHRocm91Z2ggdGhl IGNvbGxlY3Rvci4KK0RPICQkCitCRUdJTgorCUZPUiB4IElOIDEuLjIwMDAgTE9PUAorCQlFWEVD VVRFICdTRUxFQ1QgKiBGUk9NIGR1bW15X3RhYmxlJzsKKwlFTkQgTE9PUDsKK0VORAorJCQ7CisK Ky0tIENoZWNrIHRoYXQgdGhlIGNvbGxlY3RvciB3b3JrZWQuCitTRUxFQ1QgQ09VTlQoKikgRlJP TSBwZ19nZXRfY29sbGVjdGVkX2xvY2FsX2FkdmljZSgpOworCistLSBBbmQgY2xlYXIgb25lIG1v cmUgdGltZSwgdG8gdmVyaWZ5IHRoYXQgdGhpcyBkb2Vzbid0IGNhdXNlIGEgcHJvYmxlbQorLS0g ZXZlbiB3aXRoIGEgbGFyZ2VyIG51bWJlciBvZiBlbnRyaWVzLgorU0VMRUNUIHBnX2NsZWFyX2Nv bGxlY3RlZF9sb2NhbF9hZHZpY2UoKTsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZp Y2Uvc3FsL3BhcnRpdGlvbndpc2Uuc3FsIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvcGFy dGl0aW9ud2lzZS5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmM1 MTQ1NmRiYmI1Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwv cGFydGl0aW9ud2lzZS5zcWwKQEAgLTAsMCArMSw5OSBAQAorTE9BRCAncGdfcGxhbl9hZHZpY2Un OworU0VUIG1heF9wYXJhbGxlbF93b3JrZXJzX3Blcl9nYXRoZXIgPSAwOworU0VUIGVuYWJsZV9w YXJ0aXRpb253aXNlX2pvaW4gPSB0cnVlOworCitDUkVBVEUgVEFCTEUgcHQxIChpZCBpbnRlZ2Vy IHByaW1hcnkga2V5LCBkaW0xIHRleHQsIHZhbDEgaW50KQorCVBBUlRJVElPTiBCWSBSQU5HRSAo aWQpOworQ1JFQVRFIFRBQkxFIHB0MWEgUEFSVElUSU9OIE9GIHB0MSBGT1IgVkFMVUVTIEZST00g KDEpIHRvICgxMDAxKQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0NSRUFU RSBUQUJMRSBwdDFiIFBBUlRJVElPTiBPRiBwdDEgRk9SIFZBTFVFUyBGUk9NICgxMDAxKSB0byAo MjAwMSkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitDUkVBVEUgVEFCTEUg cHQxYyBQQVJUSVRJT04gT0YgcHQxIEZPUiBWQUxVRVMgRlJPTSAoMjAwMSkgdG8gKDMwMDEpCisJ V0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gcHQxIChpZCwg ZGltMSwgdmFsMSkKKwlTRUxFQ1QgZywgJ3NvbWUgZmlsbGVyIHRleHQgJyB8fCBnLCAoZyAlIDMp ICsgMQorCSAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwzMDAwKSBnOworVkFDVVVNIEFOQUxZWkUg cHQxOworCitDUkVBVEUgVEFCTEUgcHQyIChpZCBpbnRlZ2VyIHByaW1hcnkga2V5LCBkaW0yIHRl eHQsIHZhbDIgaW50KQorCVBBUlRJVElPTiBCWSBSQU5HRSAoaWQpOworQ1JFQVRFIFRBQkxFIHB0 MmEgUEFSVElUSU9OIE9GIHB0MiBGT1IgVkFMVUVTIEZST00gKDEpIHRvICgxMDAxKQorCVdJVEgg KGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0NSRUFURSBUQUJMRSBwdDJiIFBBUlRJVElP TiBPRiBwdDIgRk9SIFZBTFVFUyBGUk9NICgxMDAxKSB0byAoMjAwMSkKKwlXSVRIIChhdXRvdmFj dXVtX2VuYWJsZWQgPSBmYWxzZSk7CitDUkVBVEUgVEFCTEUgcHQyYyBQQVJUSVRJT04gT0YgcHQy IEZPUiBWQUxVRVMgRlJPTSAoMjAwMSkgdG8gKDMwMDEpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFi bGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gcHQyIChpZCwgZGltMiwgdmFsMikKKwlTRUxFQ1Qg ZywgJ3NvbWUgb3RoZXIgdGV4dCAnIHx8IGcsIChnICUgNSkgKyAxCisJICBGUk9NIGdlbmVyYXRl X3NlcmllcygxLDMwMDAsMikgZzsKK1ZBQ1VVTSBBTkFMWVpFIHB0MjsKKworQ1JFQVRFIFRBQkxF IHB0MyAoaWQgaW50ZWdlciBwcmltYXJ5IGtleSwgZGltMyB0ZXh0LCB2YWwzIGludCkKKwlQQVJU SVRJT04gQlkgUkFOR0UgKGlkKTsKK0NSRUFURSBUQUJMRSBwdDNhIFBBUlRJVElPTiBPRiBwdDMg Rk9SIFZBTFVFUyBGUk9NICgxKSB0byAoMTAwMSkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQg PSBmYWxzZSk7CitDUkVBVEUgVEFCTEUgcHQzYiBQQVJUSVRJT04gT0YgcHQzIEZPUiBWQUxVRVMg RlJPTSAoMTAwMSkgdG8gKDIwMDEpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2Up OworQ1JFQVRFIFRBQkxFIHB0M2MgUEFSVElUSU9OIE9GIHB0MyBGT1IgVkFMVUVTIEZST00gKDIw MDEpIHRvICgzMDAxKQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VS VCBJTlRPIHB0MyAoaWQsIGRpbTMsIHZhbDMpCisJU0VMRUNUIGcsICdhIHRoaXJkIHJhbmRvbSB0 ZXh0ICcgfHwgZywgKGcgJSA3KSArIDEKKwkgIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMzAwMCwz KSBnOworVkFDVVVNIEFOQUxZWkUgcHQzOworCitDUkVBVEUgVEFCTEUgcHRtaXNtYXRjaCAoaWQg aW50ZWdlciBwcmltYXJ5IGtleSwgZGltbSB0ZXh0LCB2YWxtIGludCkKKwlQQVJUSVRJT04gQlkg UkFOR0UgKGlkKTsKK0NSRUFURSBUQUJMRSBwdG1pc21hdGNoYSBQQVJUSVRJT04gT0YgcHRtaXNt YXRjaAorICAgIEZPUiBWQUxVRVMgRlJPTSAoMSkgdG8gKDE1MDEpCisJV0lUSCAoYXV0b3ZhY3V1 bV9lbmFibGVkID0gZmFsc2UpOworQ1JFQVRFIFRBQkxFIHB0bWlzbWF0Y2hiIFBBUlRJVElPTiBP RiBwdG1pc21hdGNoCisgICAgRk9SIFZBTFVFUyBGUk9NICgxNTAxKSB0byAoMzAwMSkKKwlXSVRI IChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5UTyBwdG1pc21hdGNoIChp ZCwgZGltbSwgdmFsbSkKKwlTRUxFQ1QgZywgJ3lldCBhbm90aGVyIHRleHQgJyB8fCBnLCAoZyAl IDIpICsgMQorCSAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwzMDAwKSBnOworVkFDVVVNIEFOQUxZ WkUgcHRtaXNtYXRjaDsKKworRVhQTEFJTiAoUExBTl9BRFZJQ0UsIENPU1RTIE9GRikKK1NFTEVD VCAqIEZST00gcHQxLCBwdDIsIHB0MyBXSEVSRSBwdDEuaWQgPSBwdDIuaWQgQU5EIHB0Mi5pZCA9 IHB0My5pZAorICAgQU5EIHZhbDEgPSAxIEFORCB2YWwyID0gMSBBTkQgdmFsMyA9IDE7CisKKy0t IFN1cHByZXNzIHBhcnRpdGlvbndpc2Ugam9pbiwgb3IgZG8gaXQganVzdCBwYXJ0aWFsbHkuCitC RUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnUEFSVElUSU9OV0lTRShw dDEgcHQyIHB0MyknOworRVhQTEFJTiAoUExBTl9BRFZJQ0UsIENPU1RTIE9GRikKK1NFTEVDVCAq IEZST00gcHQxLCBwdDIsIHB0MyBXSEVSRSBwdDEuaWQgPSBwdDIuaWQgQU5EIHB0Mi5pZCA9IHB0 My5pZAorICAgQU5EIHZhbDEgPSAxIEFORCB2YWwyID0gMSBBTkQgdmFsMyA9IDE7CitTRVQgTE9D QUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1BBUlRJVElPTldJU0UoKHB0MSBwdDIpIHB0Mykn OworRVhQTEFJTiAoUExBTl9BRFZJQ0UsIENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gcHQxLCBw dDIsIHB0MyBXSEVSRSBwdDEuaWQgPSBwdDIuaWQgQU5EIHB0Mi5pZCA9IHB0My5pZAorICAgQU5E IHZhbDEgPSAxIEFORCB2YWwyID0gMSBBTkQgdmFsMyA9IDE7CitDT01NSVQ7CisKKy0tIFRlc3Qg Y29uZmxpY3RpbmcgYWR2aWNlLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2 aWNlID0gJ1BBUlRJVElPTldJU0UoKHB0MSBwdDIpIChwdDEgcHQzKSknOworRVhQTEFJTiAoUExB Tl9BRFZJQ0UsIENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gcHQxLCBwdDIsIHB0MyBXSEVSRSBw dDEuaWQgPSBwdDIuaWQgQU5EIHB0Mi5pZCA9IHB0My5pZAorICAgQU5EIHZhbDEgPSAxIEFORCB2 YWwyID0gMSBBTkQgdmFsMyA9IDE7CitDT01NSVQ7CisKKy0tIENhbid0IGZvcmNlIGEgcGFydGl0 aW9ud2lzZSBqb2luIHdpdGggYSBtaXNtYXRjaGVkIHRhYmxlLgorQkVHSU47CitTRVQgTE9DQUwg cGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1BBUlRJVElPTldJU0UoKHB0MSBwdG1pc21hdGNoKSkn OworRVhQTEFJTiAoUExBTl9BRFZJQ0UsIENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gcHQxLCBw dG1pc21hdGNoIFdIRVJFIHB0MS5pZCA9IHB0bWlzbWF0Y2guaWQ7CitDT01NSVQ7CisKKy0tIEZv cmNlIGpvaW4gb3JkZXIgZm9yIGEgcGFydGljdWxhciBicmFuY2ggb2YgdGhlIHBhcnRpdGlvbndp c2Ugam9pbiB3aXRoCistLSBhbmQgd2l0aG91dCBtZW50aW9uaW5nIHRoZSBzY2hlbWEgbmFtZS4K K0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdKT0lOX09SREVSKHB0 My9wdWJsaWMucHQzYSBwdDIvcHVibGljLnB0MmEgcHQxL3B1YmxpYy5wdDFhKSc7CitFWFBMQUlO IChQTEFOX0FEVklDRSwgQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBwdDEsIHB0MiwgcHQzIFdI RVJFIHB0MS5pZCA9IHB0Mi5pZCBBTkQgcHQyLmlkID0gcHQzLmlkCisgICBBTkQgdmFsMSA9IDEg QU5EIHZhbDIgPSAxIEFORCB2YWwzID0gMTsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZp Y2UgPSAnSk9JTl9PUkRFUihwdDMvcHQzYSBwdDIvcHQyYSBwdDEvcHQxYSknOworRVhQTEFJTiAo UExBTl9BRFZJQ0UsIENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gcHQxLCBwdDIsIHB0MyBXSEVS RSBwdDEuaWQgPSBwdDIuaWQgQU5EIHB0Mi5pZCA9IHB0My5pZAorICAgQU5EIHZhbDEgPSAxIEFO RCB2YWwyID0gMSBBTkQgdmFsMyA9IDE7CitDT01NSVQ7CmRpZmYgLS1naXQgYS9jb250cmliL3Bn X3BsYW5fYWR2aWNlL3NxbC9wcmVwYXJlZC5zcWwgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3Nx bC9wcmVwYXJlZC5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjNl YzMwZWVkZWU1Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwv cHJlcGFyZWQuc3FsCkBAIC0wLDAgKzEsMzcgQEAKK0xPQUQgJ3BnX3BsYW5fYWR2aWNlJzsKK1NF VCBtYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyID0gMDsKKworQ1JFQVRFIFRBQkxFIHB0 YWIgKGlkIGludGVnZXIsIHZhbCB0ZXh0KSBXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxz ZSk7CisKK1NFVCBwZ19wbGFuX2FkdmljZS5hbHdheXNfc3RvcmVfYWR2aWNlX2RldGFpbHMgPSBm YWxzZTsKKworLS0gTm90IHByZXBhcmVkLCBzbyBhZHZpY2Ugc2hvdWxkIGJlIGdlbmVyYXRlZC4K K0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIAorU0VMRUNUICogRlJPTSBwdGFiOwor CistLSBQcmVwYXJlZCwgc28gYWR2aWNlIHNob3VsZCBub3QgYmUgZ2VuZXJhdGVkLgorUFJFUEFS RSBwdDEgQVMgU0VMRUNUICogRlJPTSBwdGFiOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FE VklDRSkgRVhFQ1VURSBwdDE7CisKK1NFVCBwZ19wbGFuX2FkdmljZS5hbHdheXNfc3RvcmVfYWR2 aWNlX2RldGFpbHMgPSB0cnVlOworCistLSBQcmVwYXJlZCwgYnV0IGFsd2F5c19zdG9yZV9hZHZp Y2VfZGV0YWlscyA9IHRydWUsIHNvIHNob3VsZCBzaG93IGFkdmljZS4KK1BSRVBBUkUgcHQyIEFT IFNFTEVDVCAqIEZST00gcHRhYjsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIEVY RUNVVEUgcHQyOworCistLSBOb3QgcHJlcGFyZWQsIHNvIGZlZWRiYWNrIHNob3VsZCBiZSBnZW5l cmF0ZWQuCitTRVQgcGdfcGxhbl9hZHZpY2UuYWx3YXlzX3N0b3JlX2FkdmljZV9kZXRhaWxzID0g ZmFsc2U7CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKHB0YWIpJzsKK0VY UExBSU4gKENPU1RTIE9GRikgCitTRUxFQ1QgKiBGUk9NIHB0YWI7CisKKy0tIFByZXBhcmVkLCBz byBhZHZpY2Ugc2hvdWxkIG5vdCBiZSBnZW5lcmF0ZWQuCitQUkVQQVJFIHB0MyBBUyBTRUxFQ1Qg KiBGUk9NIHB0YWI7CitFWFBMQUlOIChDT1NUUyBPRkYpIEVYRUNVVEUgcHQxOworCitTRVQgcGdf cGxhbl9hZHZpY2UuYWx3YXlzX3N0b3JlX2FkdmljZV9kZXRhaWxzID0gdHJ1ZTsKKworLS0gUHJl cGFyZWQsIGJ1dCBhbHdheXNfc3RvcmVfYWR2aWNlX2RldGFpbHMgPSB0cnVlLCBzbyBzaG91bGQg c2hvdyBmZWVkYmFjay4KK1BSRVBBUkUgcHQ0IEFTIFNFTEVDVCAqIEZST00gcHRhYjsKK0VYUExB SU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIEVYRUNVVEUgcHQyOworCmRpZmYgLS1naXQgYS9j b250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9zY2FuLnNxbCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZp Y2Uvc3FsL3NjYW4uc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi40 ZmM0OTRjN2Q4ZQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3Fs L3NjYW4uc3FsCkBAIC0wLDAgKzEsMTk1IEBACitMT0FEICdwZ19wbGFuX2FkdmljZSc7CitTRVQg bWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9IDA7CitTRVQgc2VxX3BhZ2VfY29zdCA9 IDAuMTsKK1NFVCByYW5kb21fcGFnZV9jb3N0ID0gMC4xOworU0VUIGNwdV90dXBsZV9jb3N0ID0g MDsKK1NFVCBjcHVfaW5kZXhfdHVwbGVfY29zdCA9IDA7CisKK0NSRUFURSBUQUJMRSBzY2FuX3Rh YmxlIChhIGludCBwcmltYXJ5IGtleSwgYiB0ZXh0KQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxl ZCA9IGZhbHNlKTsKK0lOU0VSVCBJTlRPIHNjYW5fdGFibGUKKwlTRUxFQ1QgZywgJ3NvbWUgdGV4 dCAnIHx8IGcgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAwMDAwKSBnOworQ1JFQVRFIElOREVY IHNjYW5fdGFibGVfYiBPTiBzY2FuX3RhYmxlIFVTSU5HIGJyaW4gKGIpOworVkFDVVVNIEFOQUxZ WkUgc2Nhbl90YWJsZTsKKworLS0gU2VxdWVudGlhbCBzY2FuCitFWFBMQUlOIChDT1NUUyBPRkYs IFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGU7CisKKy0tIEluZGV4IHNjYW4K K0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJs ZSBXSEVSRSBhID0gMTsKKworLS0gSW5kZXgtb25seSBzY2FuCitFWFBMQUlOIChDT1NUUyBPRkYs IFBMQU5fQURWSUNFKSBTRUxFQ1QgYSBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CisKKy0t IEJpdG1hcCBoZWFwIHNjYW4KK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVD VCAqIEZST00gc2Nhbl90YWJsZQorCVdIRVJFIGIgPiAnc29tZSB0ZXh0IDgnOworCistLSBUSUQg c2NhbgorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2Fu X3RhYmxlIFdIRVJFIGN0aWQgPSAnKDAsMSknOworCistLSBUSUQgcmFuZ2Ugc2NhbgorRVhQTEFJ TiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlCisJV0hF UkUgY3RpZCA+ICcoMSwxKScgQU5EIGN0aWQgPCAnKDIsMSknOworCistLSBUcnkgZm9yY2luZyBl YWNoIG9mIG91ciB0ZXN0IHF1ZXJpZXMgdG8gdXNlIHRoZSBzY2FuIHR5cGUgdGhleQorLS0gd2Fu dGVkIHRvIHVzZSBhbnl3YXkuIFRoaXMgc2hvdWxkIHN1Y2NlZWQuCitCRUdJTjsKK1NFVCBMT0NB TCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oc2Nhbl90YWJsZSknOworRVhQTEFJ TiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlOworU0VU IExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9TQ0FOKHNjYW5fdGFibGUgc2Nh bl90YWJsZV9wa2V5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1Qg KiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2Uu YWR2aWNlID0gJ0lOREVYX09OTFlfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSknOwor RVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUIGEgRlJPTSBzY2FuX3RhYmxl IFdIRVJFIGEgPSAxOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdCSVRNQVBf SEVBUF9TQ0FOKHNjYW5fdGFibGUpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0Up IFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZQorCVdIRVJFIGIgPiAnc29tZSB0ZXh0IDgnOworU0VU IExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdUSURfU0NBTihzY2FuX3RhYmxlKSc7CitF WFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUg V0hFUkUgY3RpZCA9ICcoMCwxKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBT RUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUKKwlXSEVSRSBjdGlkID4gJygxLDEpJyBBTkQgY3RpZCA8 ICcoMiwxKSc7CitDT01NSVQ7CisKKy0tIFRyeSB0byBmb3JjZSBhIGZ1bGwgc2NhbiBvZiB0aGUg dGFibGUgdG8gdXNlIHNvbWUgb3RoZXIgc2NhbiB0eXBlLiBBbGwKKy0tIG9mIHRoZXNlIHdpbGwg ZmFpbC4gQW4gaW5kZXggc2NhbiBvciBiaXRtYXAgaGVhcCBzY2FuIGNvdWxkIHBvdGVudGlhbGx5 CistLSBnZW5lcmF0ZSB0aGUgY29ycmVjdCBhbnN3ZXIsIGJ1dCB0aGUgcGxhbm5lciBkb2VzIG5v dCBldmVuIGNvbnNpZGVyIHRoZXNlCistLSBwb3NzaWJpbGl0aWVzIGR1ZSB0byB0aGUgbGFjayBv ZiBhIFdIRVJFIGNsYXVzZS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmlj ZSA9ICdJTkRFWF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSc7CitFWFBMQUlOIChD T1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGU7CitTRVQgTE9D QUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX09OTFlfU0NBTihzY2FuX3RhYmxlIHNj YW5fdGFibGVfcGtleSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNU ICogRlJPTSBzY2FuX3RhYmxlOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdC SVRNQVBfSEVBUF9TQ0FOKHNjYW5fdGFibGUpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9B RFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZTsKK1NFVCBMT0NBTCBwZ19wbGFuX2Fkdmlj ZS5hZHZpY2UgPSAnVElEX1NDQU4oc2Nhbl90YWJsZSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQ TEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlOworQ09NTUlUOworCistLSBUcnkg YWdhaW4gdG8gZm9yY2UgaW5kZXggdXNlLiBUaGlzIHNob3VsZCBub3cgc3VjY2VlZCBmb3IgdGhl IElOREVYX1NDQU4KKy0tIGFuZCBCSVRNQVBfSEVBUF9TQ0FOLCBidXQgdGhlIElOREVYX09OTFlf U0NBTiBjYW4ndCBiZSBmb3JjZWQgYmVjYXVzZSB0aGUKKy0tIHF1ZXJ5IGZldGNoZXMgY29sdW1u cyBub3QgaW5jbHVkZWQgaW4gdGhlIGluZGV4LgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9h ZHZpY2UuYWR2aWNlID0gJ0lOREVYX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpJzsK K0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJs ZSBXSEVSRSBhID4gMDsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhf T05MWV9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSc7CitFWFBMQUlOIChDT1NUUyBP RkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA+IDA7CitT RVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0JJVE1BUF9IRUFQX1NDQU4oc2Nhbl90 YWJsZSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBz Y2FuX3RhYmxlIFdIRVJFIGEgPiAwOworQ09NTUlUOworCistLSBXZSBjYW4gZm9yY2UgYSBwcmlt YXJ5IGtleSBsb29rdXAgdG8gdXNlIGEgc2VxdWVudGlhbCBzY2FuLCBidXQgd2UKKy0tIGNhbid0 IGZvcmNlIGl0IHRvIHVzZSBhbiBpbmRleC1vbmx5IHNjYW4gKGR1ZSB0byB0aGUgY29sdW1uIGxp c3QpCistLSBvciBhIFRJRCBzY2FuIChkdWUgdG8gdGhlIGFic2VuY2Ugb2YgYSBUSUQgcXVhbCku CitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oc2Nh bl90YWJsZSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJP TSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmlj ZSA9ICdJTkRFWF9PTkxZX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExB SU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVS RSBhID0gMTsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnVElEX1NDQU4oc2Nh bl90YWJsZSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJP TSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworQ09NTUlUOworCistLSBXZSBjYW4gZm9yY2libHkg ZG93bmdyYWRlIGFuIGluZGV4LW9ubHkgc2NhbiB0byBhbiBpbmRleCBzY2FuLCBidXQgd2UgY2Fu J3QKKy0tIGZvcmNlIHRoZSB1c2Ugb2YgYW4gaW5kZXggdGhhdCB0aGUgcGxhbm5lciB0aGlua3Mg aXMgaW5hcHBsaWNhYmxlLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNl ID0gJ0lOREVYX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENP U1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0g MTsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihzY2FuX3Rh YmxlIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9B RFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKK1NFVCBMT0NBTCBw Z19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVf YiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2Fu X3RhYmxlIFdIRVJFIGEgPSAxOworQ09NTUlUOworCistLSBXZSBjYW4gZm9yY2UgdGhlIHVzZSBv ZiBhIHNlcXVlbnRpYWwgc2NhbiBpbiBwbGFjZSBvZiBhIGJpdG1hcCBoZWFwIHNjYW4sCistLSBi dXQgYSBwbGFpbiBpbmRleCBzY2FuIG9uIGEgQlJJTiBpbmRleCBpcyBub3QgcG9zc2libGUuCitC RUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oc2Nhbl90 YWJsZSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBz Y2FuX3RhYmxlCisJV0hFUkUgYiA+ICdzb21lIHRleHQgOCc7CitTRVQgTE9DQUwgcGdfcGxhbl9h ZHZpY2UuYWR2aWNlID0gJ0lOREVYX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX2IpJzsKK0VY UExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBX SEVSRSBhID0gMTsKK0NPTU1JVDsKKworLS0gV2UgY2FuIGZvcmNlIHRoZSB1c2Ugb2YgYSBzZXF1 ZW50aWFsIHNjYW4gcmF0aGVyIHRoYW4gYSBUSUQgc2NhbiBvcgorLS0gVElEIHJhbmdlIHNjYW4u CitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oc2Nh bl90YWJsZSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJP TSBzY2FuX3RhYmxlIFdIRVJFIGN0aWQgPSAnKDAsMSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQ TEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlCisJV0hFUkUgY3RpZCA+ICcoMSwx KScgQU5EIGN0aWQgPCAnKDIsMSknOworQ09NTUlUOworCistLSBUZXN0IG1vcmUgY29tcGxleCBz Y2VuYXJpb3Mgd2l0aCBpbmRleCBzY2Fucy4KK0JFR0lOOworLS0gU2hvdWxkIHN0aWxsIHdvcmsg aWYgd2UgbWVudGlvbiB0aGUgc2NoZW1hLgorU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmlj ZSA9ICdJTkRFWF9TQ0FOKHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSknOworRVhQ TEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdI RVJFIGEgPSAxOworLS0gQnV0IG5vdCBpZiB3ZSBtZW50aW9uIHRoZSB3cm9uZyBzY2hlbWEuCitT RVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX1NDQU4oc2Nhbl90YWJsZSBj aWxidXAuc2Nhbl90YWJsZV9wa2V5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNF KSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CistLSBJdCdzIE9LIHRvIHJl cGVhdCB0aGUgc2FtZSBhZHZpY2UuCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0g J0lOREVYX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkgc2Nhbl90YWJsZSBzY2FuX3Rh YmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZS T00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKKy0tIEJ1dCBpdCBkb2Vzbid0IHdvcmsgaWYgdGhl IGluZGV4IHRhcmdldCBpcyBldmVuIG5vdGlvbmFsbHkgZGlmZmVyZW50LgorU0VUIExPQ0FMIHBn X3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9w a2V5IHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSknOworRVhQTEFJTiAoQ09TVFMg T0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOwor Q09NTUlUOworCistLSBUZXN0IGFzc29ydGVkIGluY29ycmVjdCBhZHZpY2UuCitCRUdJTjsKK1NF VCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4obm90aGluZyknOworRVhQ TEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUIGEgRlJPTSBzY2FuX3RhYmxlIFdI RVJFIGEgPSAxOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9TQ0FO KG5vdGhpbmcgd2hhdHNvZXZlciknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkg U0VMRUNUIGEgRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworU0VUIExPQ0FMIHBnX3BsYW5f YWR2aWNlLmFkdmljZSA9ICdJTkRFWF9TQ0FOKHNjYW5fdGFibGUgYm9ndXMpJzsKK0VYUExBSU4g KENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCBhIEZST00gc2Nhbl90YWJsZSBXSEVSRSBh ID0gMTsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfT05MWV9TQ0FO KG5vdGhpbmcgd2hhdHNvZXZlciknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkg U0VMRUNUIGEgRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworU0VUIExPQ0FMIHBnX3BsYW5f YWR2aWNlLmFkdmljZSA9ICdJTkRFWF9PTkxZX1NDQU4oc2Nhbl90YWJsZSBib2d1cyknOworRVhQ TEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUIGEgRlJPTSBzY2FuX3RhYmxlIFdI RVJFIGEgPSAxOworQ09NTUlUOworCistLSBUZXN0IG91ciBhYmlsaXR5IHRvIHJlZmVyIHRvIG11 bHRpcGxlIGluc3RhbmNlcyBvZiB0aGUgc2FtZSBhbGlhcy4KK0JFR0lOOworRVhQTEFJTiAoQ09T VFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gKGdlbmVyYXRlX3NlcmllcygxLDEw KSBnIExFRlQgSk9JTiBzY2FuX3RhYmxlIHMgT04gZyA9IHMuYSkgeAorICAgIExFRlQgSk9JTiBz Y2FuX3RhYmxlIHMgT04gZyA9IHMuYTsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2Ug PSAnU0VRX1NDQU4ocyknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVD VCAqIEZST00gKGdlbmVyYXRlX3NlcmllcygxLDEwKSBnIExFRlQgSk9JTiBzY2FuX3RhYmxlIHMg T04gZyA9IHMuYSkgeAorICAgIExFRlQgSk9JTiBzY2FuX3RhYmxlIHMgT04gZyA9IHMuYTsKK1NF VCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4ocyMyKSc7CitFWFBMQUlO IChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSAoZ2VuZXJhdGVfc2VyaWVz KDEsMTApIGcgTEVGVCBKT0lOIHNjYW5fdGFibGUgcyBPTiBnID0gcy5hKSB4CisgICAgTEVGVCBK T0lOIHNjYW5fdGFibGUgcyBPTiBnID0gcy5hOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFk dmljZSA9ICdTRVFfU0NBTihzKSBTRVFfU0NBTihzIzIpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwg UExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIChnZW5lcmF0ZV9zZXJpZXMoMSwxMCkgZyBMRUZU IEpPSU4gc2Nhbl90YWJsZSBzIE9OIGcgPSBzLmEpIHgKKyAgICBMRUZUIEpPSU4gc2Nhbl90YWJs ZSBzIE9OIGcgPSBzLmE7CitDT01NSVQ7CisKKy0tIFRlc3Qgb3VyIGFiaWxpdHkgdG8gcmVmZXIg dG8gc2NhbnMgd2l0aGluIGEgc3VicXVlcnkuCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURW SUNFKQorU0VMRUNUICogRlJPTSAoU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIHMgV0hFUkUgYSA9 IDEgT0ZGU0VUIDApIHg7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNU ICogRlJPTSAoU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIHMgV0hFUkUgYSA9IDEgT0ZGU0VUIDAp OworQkVHSU47CistLSBTaG91bGQgbm90IG1hdGNoLgorU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNl LmFkdmljZSA9ICdTRVFfU0NBTihzKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNF KQorU0VMRUNUICogRlJPTSAoU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIHMgV0hFUkUgYSA9IDEg T0ZGU0VUIDApIHg7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICog RlJPTSAoU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIHMgV0hFUkUgYSA9IDEgT0ZGU0VUIDApOwor LS0gU2hvdWxkIG1hdGNoIGZpcnN0IHF1ZXJ5IG9ubHkuCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZp Y2UuYWR2aWNlID0gJ1NFUV9TQ0FOKHNAeCknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FE VklDRSkKK1NFTEVDVCAqIEZST00gKFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBzIFdIRVJFIGEg PSAxIE9GRlNFVCAwKSB4OworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVD VCAqIEZST00gKFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBzIFdIRVJFIGEgPSAxIE9GRlNFVCAw KTsKKy0tIFNob3VsZCBtYXRjaCBzZWNvbmQgcXVlcnkgb25seS4KK1NFVCBMT0NBTCBwZ19wbGFu X2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oc0B1bm5hbWVkX3N1YnF1ZXJ5KSc7CitFWFBMQUlO IChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSAoU0VMRUNUICogRlJPTSBz Y2FuX3RhYmxlIHMgV0hFUkUgYSA9IDEgT0ZGU0VUIDApIHg7CitFWFBMQUlOIChDT1NUUyBPRkYs IFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSAoU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIHMg V0hFUkUgYSA9IDEgT0ZGU0VUIDApOworQ09NTUlUOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19w bGFuX2FkdmljZS9zcWwvc2VtaWpvaW4uc3FsIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwv c2VtaWpvaW4uc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi41YTRh ZTUyZDFkOQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL3Nl bWlqb2luLnNxbApAQCAtMCwwICsxLDExOCBAQAorTE9BRCAncGdfcGxhbl9hZHZpY2UnOworU0VU IG1heF9wYXJhbGxlbF93b3JrZXJzX3Blcl9nYXRoZXIgPSAwOworCitDUkVBVEUgVEFCTEUgc2pf d2lkZSAoCisJaWQgaW50ZWdlciBwcmltYXJ5IGtleSwKKwl2YWwxIGludGVnZXIsCisJcGFkZGlu ZyB0ZXh0IHN0b3JhZ2UgcGxhaW4KKykgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2Up OworSU5TRVJUIElOVE8gc2pfd2lkZQorCVNFTEVDVCBnLCBnJTEwKzEsIHJlcGVhdCgnICcsIDMw MCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAwMCkgZzsKK0NSRUFURSBJTkRFWCBPTiBzal93 aWRlICh2YWwxKTsKK1ZBQ1VVTSBBTkFMWVpFIHNqX3dpZGU7CisKK0NSRUFURSBUQUJMRSBzal9u YXJyb3cgKAorCWlkIGludGVnZXIgcHJpbWFyeSBrZXksCisJdmFsMSBpbnRlZ2VyCispIFdJVEgg KGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJTlRPIHNqX25hcnJvdworCVNF TEVDVCBnLCBnJTEwKzEgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAwMCkgZzsKK0NSRUFURSBJ TkRFWCBPTiBzal9uYXJyb3cgKHZhbDEpOworVkFDVVVNIEFOQUxZWkUgc2pfbmFycm93OworCist LSBXZSBleHBlY3QgdGhpcyB0byBtYWtlIHRoZSBWQUxVRVMgbGlzdCB1bmlxdWUgYW5kIHVzZSBp bmRleCBsb29rdXBzIHRvCistLSBmaW5kIHRoZSByb3dzIGluIHNqX3dpZGUsIHNvIGFzIHRvIGF2 b2lkIGEgZnVsbCBzY2FuIG9mIHNqX3dpZGUuCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURW SUNFKQorU0VMRUNUICogRlJPTSBzal93aWRlCisJV0hFUkUgKGlkLCB2YWwxKSBJTiAoVkFMVUVT ICgxLCAxKSwgKDIsIDIpLCAoMywgMyksICg0LCA0KSwgKDUsIDUpKTsKKworLS0gSWYgd2UgYXNr IGZvciBhIHVuaXF1ZSBzZW1pam9pbiwgd2Ugc2hvdWxkIGdldCB0aGUgc2FtZSBwbGFuIGFzIHdp dGgKKy0tIG5vIGFkdmljZS4gSWYgd2UgYXNrIGZvciBhIG5vbi11bmlxdWUgc2VtaWpvaW4sIHdl IHNob3VsZCBzZWUgYSBTZW1pCistLSBKb2luIG9wZXJhdGlvbiBpbiB0aGUgcGxhbiB0cmVlLgor QkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ3NlbWlqb2luX3VuaXF1 ZSgiKlZBTFVFUyoiKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNU ICogRlJPTSBzal93aWRlCisJV0hFUkUgKGlkLCB2YWwxKSBJTiAoVkFMVUVTICgxLCAxKSwgKDIs IDIpLCAoMywgMyksICg0LCA0KSwgKDUsIDUpKTsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5h ZHZpY2UgPSAnc2VtaWpvaW5fbm9uX3VuaXF1ZSgiKlZBTFVFUyoiKSc7CitFWFBMQUlOIChDT1NU UyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBzal93aWRlCisJV0hFUkUgKGlkLCB2 YWwxKSBJTiAoVkFMVUVTICgxLCAxKSwgKDIsIDIpLCAoMywgMyksICg0LCA0KSwgKDUsIDUpKTsK K0NPTU1JVDsKKworLS0gQmVjYXVzZSB0aGlzIHRhYmxlIGlzIG5hcnJvd2VyIHRoYW4gdGhlIHBy ZXZpb3VzIG9uZSwgYSBzZXF1ZW50aWFsIHNjYW4KKy0tIGlzIGxlc3MgZXhwZW5zaXZlLCBhbmQg d2UgY2hvb3NlIGEgc3RyYWlnaHRmb3J3YXJkIFNlbWkgSm9pbiBwbGFuIGJ5CistLSBkZWZhdWx0 LiAoTm90ZSB0aGF0IHRoaXMgaXMgYWxzbyB2ZXJ5IHNlbnNpdGl2ZSB0byB0aGUgbGVuZ3RoIG9m IHRoZSBJTgorLS0gbGlzdCwgd2hpY2ggYWZmZWN0cyBob3cgbWFueSBpbmRleCBsb29rdXBzIHRo ZSBhbHRlcm5hdGl2ZSBwbGFuIHdpbGwgbmVlZC4pCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5f QURWSUNFKQorU0VMRUNUICogRlJPTSBzal9uYXJyb3cKKwlXSEVSRSAoaWQsIHZhbDEpIElOIChW QUxVRVMgKDEsIDEpLCAoMiwgMiksICgzLCAzKSwgKDQsIDQpLCAoNSwgNSkpOworCistLSBIZXJl LCB3ZSBleHBlY3QgYWR2aXNpbmcgYSB1bmlxdWUgc2VtaWpvaW4gdG8gc3dpdGggdG8gdGhlIHNh bWUgcGxhbiB0aGF0CistLSB3ZSBnb3Qgd2l0aCBzal93aWRlLCBhbmQgYWR2aXNpbmcgYSBub24t dW5pcXVlIHNlbWlqb2luIHNob3VsZCBub3QgY2hhbmdlCistLSB0aGUgcGxhbi4KK0JFR0lOOwor U0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdzZW1pam9pbl91bmlxdWUoIipWQUxV RVMqIiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00g c2pfbmFycm93CisJV0hFUkUgKGlkLCB2YWwxKSBJTiAoVkFMVUVTICgxLCAxKSwgKDIsIDIpLCAo MywgMyksICg0LCA0KSwgKDUsIDUpKTsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2Ug PSAnc2VtaWpvaW5fbm9uX3VuaXF1ZSgiKlZBTFVFUyoiKSc7CitFWFBMQUlOIChDT1NUUyBPRkYs IFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBzal9uYXJyb3cKKwlXSEVSRSAoaWQsIHZhbDEp IElOIChWQUxVRVMgKDEsIDEpLCAoMiwgMiksICgzLCAzKSwgKDQsIDQpLCAoNSwgNSkpOworQ09N TUlUOworCistLSBJbiB0aGUgYWJvdmUgZXhhbXBsZSwgd2UgbWFkZSB0aGUgb3V0ZXIgc2lkZSBv ZiB0aGUgam9pbiB1bmlxdWUsIGJ1dCBoZXJlLAorLS0gd2Ugc2hvdWxkIG1ha2UgdGhlIGlubmVy IHNpZGUgdW5pcXVlLgorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAq IEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMCkgZworICAgIFdIRVJFIGcgaW4gKHNlbGVjdCB2 YWwxIGZyb20gc2pfbmFycm93KTsKKworLS0gV2Ugc2hvdWxkIGJlIGFibGUgdG8gZm9yY2UgYSBw bGFuIHdpdGggb3Igd2l0aG91dCB0aGUgbWFrZS11bmlxdWUgc3RyYXRlZ3ksCistLSB3aXRoIGVp dGhlciBzaWRlIGFzIHRoZSBkcml2aW5nIHRhYmxlLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxh bl9hZHZpY2UuYWR2aWNlID0gJ3NlbWlqb2luX3VuaXF1ZShzal9uYXJyb3cpJzsKK0VYUExBSU4g KENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGdlbmVyYXRlX3Nlcmllcygx LDEwMDApIGcKKyAgICBXSEVSRSBnIGluIChzZWxlY3QgdmFsMSBmcm9tIHNqX25hcnJvdyk7CitT RVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ3NlbWlqb2luX25vbl91bmlxdWUoc2pf bmFycm93KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJP TSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwKSBnCisgICAgV0hFUkUgZyBpbiAoc2VsZWN0IHZhbDEg ZnJvbSBzal9uYXJyb3cpOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdzZW1p am9pbl91bmlxdWUoc2pfbmFycm93KSBqb2luX29yZGVyKHNqX25hcnJvdyknOworRVhQTEFJTiAo Q09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEs MTAwMCkgZworICAgIFdIRVJFIGcgaW4gKHNlbGVjdCB2YWwxIGZyb20gc2pfbmFycm93KTsKK1NF VCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnc2VtaWpvaW5fbm9uX3VuaXF1ZShzal9u YXJyb3cpIGpvaW5fb3JkZXIoc2pfbmFycm93KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5f QURWSUNFKQorU0VMRUNUICogRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwKSBnCisgICAgV0hF UkUgZyBpbiAoc2VsZWN0IHZhbDEgZnJvbSBzal9uYXJyb3cpOworQ09NTUlUOworCistLSBIb3dl dmVyLCBtZW50aW9uaW5nIHRoZSB3cm9uZyBzaWRlIG9mIHRoZSBqb2luIHNob3VsZCByZXN1bHQg aW4gYW4gYWR2aWNlCistLSBmYWlsdXJlLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZp Y2UuYWR2aWNlID0gJ3NlbWlqb2luX3VuaXF1ZShnKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBM QU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwKSBnCisgICAg V0hFUkUgZyBpbiAoc2VsZWN0IHZhbDEgZnJvbSBzal9uYXJyb3cpOworU0VUIExPQ0FMIHBnX3Bs YW5fYWR2aWNlLmFkdmljZSA9ICdzZW1pam9pbl9ub25fdW5pcXVlKGcpJzsKK0VYUExBSU4gKENP U1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEw MDApIGcKKyAgICBXSEVSRSBnIGluIChzZWxlY3QgdmFsMSBmcm9tIHNqX25hcnJvdyk7CitDT01N SVQ7CisKKy0tIFRlc3QgY29uZmxpY3RpbmcgYWR2aWNlLgorQkVHSU47CitTRVQgTE9DQUwgcGdf cGxhbl9hZHZpY2UuYWR2aWNlID0gJ3NlbWlqb2luX3VuaXF1ZShzal9uYXJyb3cpIHNlbWlqb2lu X25vbl91bmlxdWUoc2pfbmFycm93KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNF KQorU0VMRUNUICogRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwKSBnCisgICAgV0hFUkUgZyBp biAoc2VsZWN0IHZhbDEgZnJvbSBzal9uYXJyb3cpOworQ09NTUlUOworCistLSBUcnkgYXBwbHlp bmcgU0VNSUpPSU5fVU5JUVVFKCkgdG8gYSBub24tc2VtaWpvaW4uCitCRUdJTjsKK1NFVCBMT0NB TCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnc2VtaWpvaW5fdW5pcXVlKGcpJzsKK0VYUExBSU4g KENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGdlbmVyYXRlX3Nlcmllcygx LDEwMDApIGcsIHNqX25hcnJvdyBzIFdIRVJFIGcgPSBzLnZhbDE7CitDT01NSVQ7CmRpZmYgLS1n aXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9zeW50YXguc3FsIGIvY29udHJpYi9wZ19w bGFuX2FkdmljZS9zcWwvc3ludGF4LnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwMC4uNTZhNWQ1NGUyYjUKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5f YWR2aWNlL3NxbC9zeW50YXguc3FsCkBAIC0wLDAgKzEsNjggQEAKK0xPQUQgJ3BnX3BsYW5fYWR2 aWNlJzsKKworLS0gQW4gZW1wdHkgc3RyaW5nIGlzIGFsbG93ZWQuIEVtcHR5IHRhcmdldCBsaXN0 cyBhcmUgYWxsb3dlZCBmb3IgbW9zdCBhZHZpY2UKKy0tIHRhZ3MsIGJ1dCBub3QgZm9yIEpPSU5f T1JERVIuICJTdXBwbGllZCBQbGFuIEFkdmljZSIgc2hvdWxkIGJlIG9taXR0ZWQgaW4KKy0tIHRl eHQgZm9ybWF0IHdoZW4gdGhlcmUgaXMgbm8gYWN0dWFsIGFkdmljZSwgYnV0IG5vdCBpbiBub24t dGV4dCBmb3JtYXQuCitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJyc7CitFWFBMQUlOIChD T1NUUyBPRkYpIFNFTEVDVCAxOworU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NB TigpJzsKK0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUIDE7CitTRVQgcGdfcGxhbl9hZHZpY2Uu YWR2aWNlID0gJ05FU1RFRF9MT09QX1BMQUlOKCknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBGT1JN QVQgSlNPTikgU0VMRUNUIDE7CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0pPSU5fT1JE RVIoKSc7CisKKy0tIFRlc3QgYXNzb3J0ZWQgdmFyaWF0aW9ucyBpbiBjYXBpdGFsaXphdGlvbiwg d2hpdGVzcGFjZSwgYW5kIHdoaWNoIHBhcnRzIG9mCistLSB0aGUgcmVsYXRpb24gaWRlbnRpZmll ciBhcmUgaW5jbHVkZWQuIFRoZXNlIHNob3VsZCBhbGwgd29yay4KK1NFVCBwZ19wbGFuX2Fkdmlj ZS5hZHZpY2UgPSAnU0VRX1NDQU4oeCknOworRVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1QgMTsK K1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnc2VxX3NjYW4oeEB5KSc7CitFWFBMQUlOIChD T1NUUyBPRkYpIFNFTEVDVCAxOworU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfc2Nh bih4IzIpJzsKK0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUIDE7CitTRVQgcGdfcGxhbl9hZHZp Y2UuYWR2aWNlID0gJ1NFUV9TQ0FOICh4L3kpJzsKK0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNU IDE7CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJyAgU0VRX1NDQU4gKCB4IC8geSAuIHog KSAgJzsKK0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUIDE7CitTRVQgcGdfcGxhbl9hZHZpY2Uu YWR2aWNlID0gJ1NFUV9TQ0FOKCJ4IiMyLyJ5Ii4ieiJAInQiKSc7CitFWFBMQUlOIChDT1NUUyBP RkYpIFNFTEVDVCAxOworCistLSBTeW50YXggZXJyb3JzLgorU0VUIHBnX3BsYW5fYWR2aWNlLmFk dmljZSA9ICdTRVFVRU5USUFMX1NDQU4oeCknOworU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9 ICdTRVFfU0NBTic7CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKCc7CitT RVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKCInOworU0VUIHBnX3BsYW5fYWR2 aWNlLmFkdmljZSA9ICdTRVFfU0NBTigiIiknOworU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9 ICdTRVFfU0NBTigiYSInOworU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTigj JzsKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnKCknOworU0VUIHBnX3BsYW5fYWR2aWNl LmFkdmljZSA9ICcxMjMnOworCistLSBUYWdzIGxpa2UgU0VRX1NDQU4gYW5kIE5PX0dBVEhFUiBk b24ndCBhbGxvdyBzdWJsaXN0cyBhdCBhbGw7IG90aGVyIHRhZ3MsCistLSBleGNlcHQgZm9yIEpP SU5fT1JERVIsIGFsbG93IGF0IG1vc3Qgb25lIGxldmVsIG9mIHN1Ymxpc3QuIEhlbmNlLCB0aGVz ZQorLS0gZXhhbXBsZXMgc2hvdWxkIGVycm9yIG91dC4KK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZp Y2UgPSAnU0VRX1NDQU4oKHgpKSc7CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0dBVEhF UigoKHgpKSknOworCistLSBMZWdhbCBjb21tZW50cy4KK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZp Y2UgPSAnLyoqLyc7CitFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCAxOworU0VUIHBnX3BsYW5f YWR2aWNlLmFkdmljZSA9ICdIQVNIX0pPSU4oXykvKioqLyc7CitFWFBMQUlOIChDT1NUUyBPRkYp IFNFTEVDVCAxOworU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICcvKiBjb21tZW50ICovIEhB U0hfSk9JTigvKngqL3kpJzsKK0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUIDE7CitTRVQgcGdf cGxhbl9hZHZpY2UuYWR2aWNlID0gJy8qIGNvbW1lbnQgKi8gSEFTSF9KT0lOKHkvLyp4Ki96KSc7 CitFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCAxOworCistLSBVbnRlcm1pbmF0ZWQgY29tbWVu dHMuCitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJy8qJzsKK1NFVCBwZ19wbGFuX2Fkdmlj ZS5hZHZpY2UgPSAnSk9JTl9PUkRFUigiZk9PIikgLyogb29wcyc7CisKKy0tIE5lc3RlZCBjb21t ZW50cyBhcmUgbm90IHN1cHBvcnRlZCwgc28gdGhlIGZpcnN0IG9mIHRoZXNlIGlzIGxlZ2FsIGFu ZAorLS0gdGhlIHNlY29uZCBpcyBub3QuCitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJy8q LyovJzsKK0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUIDE7CitTRVQgcGdfcGxhbl9hZHZpY2Uu YWR2aWNlID0gJy8qLyogc3R1ZmYgKi8qLyc7CisKKy0tIEZvcmVpZ24gam9pbiByZXF1aXJlcyBt dWx0aXBsZSByZWxhdGlvbiBpZGVudGlmaWVycy4KK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2Ug PSAnRk9SRUlHTl9KT0lOKGEpJzsKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnRk9SRUlH Tl9KT0lOKChhKSknOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS90LzAwMV9y ZWdyZXNzLnBsIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS90LzAwMV9yZWdyZXNzLnBsCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi42NzU5NWNkZGY3NQotLS0gL2Rldi9u dWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvdC8wMDFfcmVncmVzcy5wbApAQCAtMCww ICsxLDE0OCBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMjEtMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwg RGV2ZWxvcG1lbnQgR3JvdXAKKworIyBSdW4gdGhlIGNvcmUgcmVncmVzc2lvbiB0ZXN0cyB1bmRl ciBwZ19wbGFuX2FkdmljZSB0byBjaGVjayBmb3IgcHJvYmxlbXMuCit1c2Ugc3RyaWN0OwordXNl IHdhcm5pbmdzIEZBVEFMID0+ICdhbGwnOworCit1c2UgQ3dkICAgICAgICAgICAgcXcoYWJzX3Bh dGgpOwordXNlIEZpbGU6OkJhc2VuYW1lIHF3KGRpcm5hbWUpOworCit1c2UgUG9zdGdyZVNRTDo6 VGVzdDo6Q2x1c3RlcjsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczsKK3VzZSBUZXN0OjpN b3JlOworCisjIEluaXRpYWxpemUgdGhlIHByaW1hcnkgbm9kZQorbXkgJG5vZGUgPSBQb3N0Z3Jl U1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ21haW4nKTsKKyRub2RlLT5pbml0KCk7CisKKyMgU2V0 IHVwIG91ciBkZXNpcmVkIGNvbmZpZ3VyYXRpb24uCisjCisjIFdlIHJ1biB3aXRoIHBnX3BsYW5f YWR2aWNlLnNoYXJlZF9jb2xsZWN0aW9uX2xpbWl0IHNldCB0byBlbnN1cmUgdGhhdCB0aGUKKyMg cGxhbiB0cmVlIHdhbGtlciBjb2RlIHJ1bnMgYWdhaW5zdCBldmVyeSBxdWVyeSBpbiB0aGUgcmVn cmVzc2lvbiB0ZXN0cy4gSWYKKyMgd2UncmUgdW5hYmxlIHRvIHByb3Blcmx5IGFuYWx5emUgYW55 IG9mIHRob3NlIHBsYW4gdHJlZXMsIHRoaXMgdGVzdCBzaG91bGQgZmFpbC4KKyMKKyMgV2Ugc2V0 IHBnX3BsYW5fYWR2aWNlLmFkdmljZSB0byBhbiBhZHZpY2Ugc3RyaW5nIHRoYXQgd2lsbCBjYXVz ZSB0aGUgYWR2aWNlCisjIHRyb3ZlIHRvIGJlIHBvcHVsYXRlZCB3aXRoIGEgZmV3IGVudHJpZXMg b2YgdmFyaW91cyBzb3J0cywgYnV0IHdoaWNoIHdlIGRvCisjIG5vdCBleHBlY3QgdG8gbWF0Y2gg YW55dGhpbmcgaW4gdGhlIHJlZ3Jlc3Npb24gdGVzdCBxdWVyaWVzLiBUaGlzIHdheSwgdGhlCisj IHBsYW5uZXIgaG9va3Mgd2lsbCBiZSBjYWxsZWQsIGltcHJvdmluZyBjb2RlIGNvdmVyYWdlLCBi dXQgbm8gcGxhbnMgc2hvdWxkCisjIGFjdHVhbGx5IGNoYW5nZS4KKyMKKyMgcGdfcGxhbl9hZHZp Y2UuYWx3YXlzX2V4cGxhaW5fc3VwcGxpZWRfYWR2aWNlPWZhbHNlIGlzIG5lZWRlZCB0byBhdm9p ZCBicmVha2luZworIyByZWdyZXNzaW9uIHRlc3QgcXVlcmllcyB0aGF0IHVzZSBFWFBMQUlOLiBJ biB0aGUgcmVhbCB3b3JsZCwgaXQgc2VlbXMgbGlrZQorIyB1c2VycyB3aWxsIHdhbnQgRVhQTEFJ TiBvdXRwdXQgdG8gc2hvdyBzdXBwbGllZCBhZHZpY2Ugc28gdGhhdCBpdCdzIGNsZWFyCisjIHdo ZXRoZXIgbm9ybWFsIHBsYW5uZXIgYmVoYXZpb3IgaGFzIGJlZW4gYWx0ZXJlZCwgYnV0IGhlcmUg dGhhdCdzIHVuZGVzaXJhYmxlLgorJG5vZGUtPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYn LCA8PEVPTSk7CitwZ19wbGFuX2FkdmljZS5zaGFyZWRfY29sbGVjdGlvbl9saW1pdD0xMDAwMDAw CitwZ19wbGFuX2FkdmljZS5zaGFyZWRfY29sbGVjdG9yPXRydWUKK3NoYXJlZF9wcmVsb2FkX2xp YnJhcmllcz1wZ19wbGFuX2FkdmljZQorcGdfcGxhbl9hZHZpY2UuYWR2aWNlPSdTRVFfU0NBTihl bnRpcmVseV9maWN0aXRpb3VzKSBIQVNIX0pPSU4odG90YWxfZmFicmljYXRpb24pIEdBVEhFUihj b21wbGV0ZWx5X2ltYWdpbmFyeSknCitwZ19wbGFuX2FkdmljZS5hbHdheXNfZXhwbGFpbl9zdXBw bGllZF9hZHZpY2U9ZmFsc2UKK0VPTQorJG5vZGUtPnN0YXJ0OworCitteSAkc3JjZGlyID0gYWJz X3BhdGgoIi4uLy4uIik7CisKKyMgLS1kbHBhdGggaXMgbmVlZGVkIHRvIGJlIGFibGUgdG8gZmlu ZCB0aGUgbG9jYXRpb24gb2YgcmVncmVzcy5zbworIyBhbmQgYW55IGxpYnJhcmllcyB0aGUgcmVn cmVzc2lvbiB0ZXN0cyByZXF1aXJlLgorbXkgJGRscGF0aCA9IGRpcm5hbWUoJEVOVntSRUdSRVNT X1NITElCfSk7CisKKyMgLS1vdXRwdXRkaXIgcG9pbnRzIHRvIHRoZSBwYXRoIHdoZXJlIHRvIHBs YWNlIHRoZSBvdXRwdXQgZmlsZXMuCitteSAkb3V0cHV0ZGlyID0gJFBvc3RncmVTUUw6OlRlc3Q6 OlV0aWxzOjp0bXBfY2hlY2s7CisKKyMgLS1pbnB1dGRpciBwb2ludHMgdG8gdGhlIHBhdGggb2Yg dGhlIGlucHV0IGZpbGVzLgorbXkgJGlucHV0ZGlyID0gIiRzcmNkaXIvc3JjL3Rlc3QvcmVncmVz cyI7CisKKyMgUnVuIHRoZSB0ZXN0cy4KK215ICRyYyA9CisgIHN5c3RlbSgkRU5We1BHX1JFR1JF U1N9IC4gIiAiCisJICAuICItLWJpbmRpcj0gIgorCSAgLiAiLS1kbHBhdGg9XCIkZGxwYXRoXCIg IgorCSAgLiAiLS1ob3N0PSIgLiAkbm9kZS0+aG9zdCAuICIgIgorCSAgLiAiLS1wb3J0PSIgLiAk bm9kZS0+cG9ydCAuICIgIgorCSAgLiAiLS1zY2hlZHVsZT0kc3JjZGlyL3NyYy90ZXN0L3JlZ3Jl c3MvcGFyYWxsZWxfc2NoZWR1bGUgIgorCSAgLiAiLS1tYXgtY29uY3VycmVudC10ZXN0cz0yMCAi CisJICAuICItLWlucHV0ZGlyPVwiJGlucHV0ZGlyXCIgIgorCSAgLiAiLS1vdXRwdXRkaXI9XCIk b3V0cHV0ZGlyXCIiKTsKKworIyBEdW1wIG91dCB0aGUgcmVncmVzc2lvbiBkaWZmcyBmaWxlLCBp ZiB0aGVyZSBpcyBvbmUKK2lmICgkcmMgIT0gMCkKK3sKKwlteSAkZGlmZnMgPSAiJG91dHB1dGRp ci9yZWdyZXNzaW9uLmRpZmZzIjsKKwlpZiAoLWUgJGRpZmZzKQorCXsKKwkJcHJpbnQgIj09PSBk dW1waW5nICRkaWZmcyA9PT1cbiI7CisJCXByaW50IHNsdXJwX2ZpbGUoJGRpZmZzKTsKKwkJcHJp bnQgIj09PSBFT0YgPT09XG4iOworCX0KK30KKworIyBSZXBvcnQgcmVzdWx0cworaXMoJHJjLCAw LCAncmVncmVzc2lvbiB0ZXN0cyBwYXNzJyk7CisKKyMgQ3JlYXRlIHRoZSBleHRlbnNpb24gc28g d2UgY2FuIGFjY2VzcyB0aGUgY29sbGVjdG9yCiskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICdDUkVBVEUgRVhURU5TSU9OIHBnX3BsYW5fYWR2aWNlJyk7CisKKyMgVmVyaWZ5IHRoYXQgYSBs YXJnZSBhbW91bnQgb2YgYWR2aWNlIHdhcyBjb2xsZWN0ZWQKK215ICRhbGxfcXVlcnlfY291bnQg PSAkbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIDw8RU9NKTsKK1NFTEVDVCBDT1VOVCgqKSBG Uk9NIHBnX2dldF9jb2xsZWN0ZWRfc2hhcmVkX2FkdmljZSgpOworRU9NCitjbXBfb2soJGFsbF9x dWVyeV9jb3VudCwgJz4nLCAyMDAwMCwgImNvcGlvdXMgYWR2aWNlIGNvbGxlY3RlZCIpOworCisj IFZlcmlmeSB0aGF0IGxvdHMgb2YgZGlmZmVyZW50IGFkdmljZSBzdHJpbmdzIHdlcmUgY29sbGVj dGVkCitteSAkZGlzdGluY3RfcXVlcnlfY291bnQgPSAkbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsIDw8RU9NKTsKK1NFTEVDVCBDT1VOVCgqKSBGUk9NCisJKFNFTEVDVCBESVNUSU5DVCBhZHZp Y2UgRlJPTSBwZ19nZXRfY29sbGVjdGVkX3NoYXJlZF9hZHZpY2UoKSk7CitFT00KK2NtcF9vaygk ZGlzdGluY3RfcXVlcnlfY291bnQsICc+JywgMzAwMCwgImRpdmVyc2UgYWR2aWNlIGNvbGxlY3Rl ZCIpOworCisjIFdlIHdhbnQgdG8gdGVzdCBmb3IgdGhlIHByZXNlbmNlIG9mIG91ciBrbm93biB0 YWdzIGluIHRoZSBjb2xsZWN0ZWQgYWR2aWNlLgorIyBQdXQgYWxsIHRhZ3MgaW50byB0aGUgaGFz aCB0aGF0IGZvbGxvd3M7IG1hcCBhbnkgdGFncyB0aGF0IGFyZW4ndCB0ZXN0ZWQKKyMgYnkgdGhl IGNvcmUgcmVncmVzc2lvbiB0ZXN0cyB0byAwLCBhbmQgb3RoZXJzIHRvIDEuCitteSAldGFnX21h cCA9ICgKKwlCSVRNQVBfSEVBUF9TQ0FOID0+IDEsCisJRk9SRUlHTl9KT0lOID0+IDAsCisJR0FU SEVSID0+IDEsCisJR0FUSEVSX01FUkdFID0+IDEsCisJSEFTSF9KT0lOID0+IDEsCisJSU5ERVhf T05MWV9TQ0FOID0+IDEsCisJSU5ERVhfU0NBTiA9PiAxLAorCUpPSU5fT1JERVIgPT4gMSwKKwlN RVJHRV9KT0lOX01BVEVSSUFMSVpFID0+IDEsCisJTUVSR0VfSk9JTl9QTEFJTiA9PiAxLAorCU5F U1RFRF9MT09QX01BVEVSSUFMSVpFID0+IDEsCisJTkVTVEVEX0xPT1BfTUVNT0laRSA9PiAxLAor CU5FU1RFRF9MT09QX1BMQUlOID0+IDEsCisJTk9fR0FUSEVSID0+IDEsCisJUEFSVElUSU9OV0lT RSA9PiAxLAorCVNFTUlKT0lOX05PTl9VTklRVUUgPT4gMSwKKwlTRU1JSk9JTl9VTklRVUUgPT4g MSwKKwlTRVFfU0NBTiA9PiAxLAorCVRJRF9TQ0FOID0+IDEsCispOworZm9yIG15ICR0YWcgKHNv cnQga2V5cyAldGFnX21hcCkKK3sKKwlteSAkY2hlY2tpdCA9ICR0YWdfbWFweyR0YWd9OworCisJ IyBTZWFyY2ggZm9yIHRoZSBnaXZlbiB0YWcuIFRoaXMgaXMgbm90IGVudGlyZWx5IHJvYnVzdDog aXQgY291bGQgZ2V0IHRocm93bgorCSMgb2ZmIGJ5IGEgdGFibGUgYWxpYXMgc3VjaCBhcyAiRk9S RUlHTl9KT0lOKCIsIGJ1dCB0aGF0IHByb2JhYmx5IHdvbid0CisJIyBoYXBwZW4gaW4gdGhlIGNv cmUgcmVncmVzc2lvbiB0ZXN0cy4KKwlteSAkdGFnX2NvdW50ID0gJG5vZGUtPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCA8PEVPTSk7CitTRUxFQ1QgQ09VTlQoKikgRlJPTSBwZ19nZXRfY29sbGVjdGVk X3NoYXJlZF9hZHZpY2UoKQorCVdIRVJFIGFkdmljZSBMSUtFICclJHRhZyglJworRU9NCisKKwkj IENoZWNrIHRoYXQgdGhlIHRhZyBnb3QgYSBub24tdHJpdmlhbCBhbW91bnQgb2YgdXNlLCB1bmxl c3MgdG9sZCBvdGhlcndpc2UuCisJY21wX29rKCR0YWdfY291bnQsICc+JywgMTAsICJtdWx0aXBs ZSB1c2VzIG9mICR0YWciKSBpZiAkY2hlY2tpdDsKKworCSMgUmVnYXJkbGVzcywgbm90ZSB0aGUg ZXhhY3QgY291bnQgaW4gdGhlIGxvZywgZm9yIGh1bWFuIGNvbnN1bXB0aW9uLgorCW5vdGUoImZv dW5kICR0YWdfY291bnQgYWR2aWNlIHN0cmluZ3MgY29udGFpbmluZyAkdGFnIik7Cit9CisKKyMg VHJpZ2dlciBhIHBhcnRpYWwgY2xlYW51cCBvZiB0aGUgc2hhcmVkIGFkdmljZSBjb2xsZWN0b3Is IGFuZCB0aGVuIGEgZnVsbAorIyBjbGVhbnVwLgorJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMn LCA8PEVPTSk7CitTRVQgcGdfcGxhbl9hZHZpY2Uuc2hhcmVkX2NvbGxlY3Rpb25fbGltaXQ9NTAw OworU0VMRUNUICogRlJPTSBwZ19jbGVhcl9jb2xsZWN0ZWRfc2hhcmVkX2FkdmljZSgpOworRU9N CisKK2RvbmVfdGVzdGluZygpOwpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2NvbnRyaWIuc2dt bCBiL2RvYy9zcmMvc2dtbC9jb250cmliLnNnbWwKaW5kZXggMjRiNzA2YjI5YWQuLmJkZDQ4NjVm NTNmIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvY29udHJpYi5zZ21sCisrKyBiL2RvYy9zcmMv c2dtbC9jb250cmliLnNnbWwKQEAgLTE1Niw2ICsxNTYsNyBAQCBDUkVBVEUgRVhURU5TSU9OIDxy ZXBsYWNlYWJsZT5leHRlbnNpb25fbmFtZTwvcmVwbGFjZWFibGU+OwogICZwZ2ZyZWVzcGFjZW1h cDsKICAmcGdsb2dpY2FsaW5zcGVjdDsKICAmcGdvdmVyZXhwbGFpbjsKKyAmcGdwbGFuYWR2aWNl OwogICZwZ3ByZXdhcm07CiAgJnBncm93bG9ja3M7CiAgJnBnc3RhdHN0YXRlbWVudHM7CmRpZmYg LS1naXQgYS9kb2Mvc3JjL3NnbWwvZmlsZWxpc3Quc2dtbCBiL2RvYy9zcmMvc2dtbC9maWxlbGlz dC5zZ21sCmluZGV4IGFjNjZmY2JkYjU3Li5kOTBiNDMzOGQyYSAxMDA2NDQKLS0tIGEvZG9jL3Ny Yy9zZ21sL2ZpbGVsaXN0LnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2ZpbGVsaXN0LnNnbWwKQEAg LTE0OSw2ICsxNDksNyBAQAogPCFFTlRJVFkgcGdmcmVlc3BhY2VtYXAgIFNZU1RFTSAicGdmcmVl c3BhY2VtYXAuc2dtbCI+CiA8IUVOVElUWSBwZ2xvZ2ljYWxpbnNwZWN0ICBTWVNURU0gInBnbG9n aWNhbGluc3BlY3Quc2dtbCI+CiA8IUVOVElUWSBwZ292ZXJleHBsYWluICAgU1lTVEVNICJwZ292 ZXJleHBsYWluLnNnbWwiPgorPCFFTlRJVFkgcGdwbGFuYWR2aWNlICAgIFNZU1RFTSAicGdwbGFu YWR2aWNlLnNnbWwiPgogPCFFTlRJVFkgcGdwcmV3YXJtICAgICAgIFNZU1RFTSAicGdwcmV3YXJt LnNnbWwiPgogPCFFTlRJVFkgcGdyb3dsb2NrcyAgICAgIFNZU1RFTSAicGdyb3dsb2Nrcy5zZ21s Ij4KIDwhRU5USVRZIHBnc3RhdHN0YXRlbWVudHMgU1lTVEVNICJwZ3N0YXRzdGF0ZW1lbnRzLnNn bWwiPgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3BncGxhbmFkdmljZS5zZ21sIGIvZG9jL3Ny Yy9zZ21sL3BncGxhbmFkdmljZS5zZ21sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAwLi5hNWY2MDViM2YxOQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9zcmMvc2dtbC9wZ3Bs YW5hZHZpY2Uuc2dtbApAQCAtMCwwICsxLDk2OSBAQAorPCEtLSBkb2Mvc3JjL3NnbWwvcGdwbGFu YWR2aWNlLnNnbWwgLS0+CisKKzxzZWN0MSBpZD0icGdwbGFuYWR2aWNlIiB4cmVmbGFiZWw9InBn X3ByZXdhcm0iPgorIDx0aXRsZT5wZ19wbGFuX2FkdmljZSAmbWRhc2g7IGhlbHAgdGhlIHBsYW5u ZXIgZ2V0IHRoZSByaWdodCBwbGFuPC90aXRsZT4KKworIDxpbmRleHRlcm0gem9uZT0icGdwbGFu YWR2aWNlIj4KKyAgPHByaW1hcnk+cGdfcGxhbl9hZHZpY2U8L3ByaW1hcnk+CisgPC9pbmRleHRl cm0+CisKKyA8cGFyYT4KKyAgVGhlIDxmaWxlbmFtZT5wZ19wbGFuX2FkdmljZTwvZmlsZW5hbWU+ IGFsbG93cyBrZXkgcGxhbm5lciBkZWNpc2lvbnMgdG8gYmUKKyAgZGVzY3JpYmVkLCByZXByb2R1 Y2VkLCBhbmQgYWx0ZXJlZCB1c2luZyBhIHNwZWNpYWwtcHVycG9zZSAicGxhbiBhZHZpY2UiCisg IG1pbmktbGFuZ3VhZ2UuIEl0IGlzIGludGVuZGVkIHRvIGFsbG93IHN0YWJpbGl6YXRpb24gb2Yg cGxhbiBjaG9pY2VzIHRoYXQKKyAgdGhlIHVzZXIgYmVsaWV2ZXMgdG8gYmUgZ29vZCwgYXMgd2Vs bCBhcyBleHBlcmltZW50YXRpb24gd2l0aCBwbGFucyB0aGF0CisgIHRoZSBwbGFubmVyIGJlbGll dmVzIHRvIGJlIG5vbi1vcHRpbWFsLgorIDwvcGFyYT4KKworIDxwYXJhPgorICBOb3RlIHRoYXQs IHNpbmNlIHRoZSBwbGFubmVyIG9mdGVuIG1ha2VzIGdvb2QgZGVjaXNpb25zLCBvdmVycmlkaW5n IGl0cworICBqdWRnZW1lbnQgY2FuIGVhc2lseSBiYWNrZmlyZS4gRm9yIGV4YW1wbGUsIGlmIHRo ZSBkaXN0cmlidXRpb24gb2YgdGhlCisgIHVuZGVybHlpbmcgZGF0YSBjaGFuZ2VzLCB0aGUgcGxh bm5lciBub3JtYWxseSBoYXMgdGhlIG9wdGlvbiB0byBhZGp1c3QgdGhlCisgIHBsYW4gaW4gYW4g YXR0ZW1wdCB0byBwcmVzZXJ2ZSBnb29kIHBlcmZvcm1hbmNlLiBJZiB0aGUgcGxhbiBhZHZpY2Ug cHJldmVudHMKKyAgdGhpcywgYSB2ZXJ5IHBvb3IgcGxhbiBtYXkgYmUgY2hvc2VuLiBJdCBpcyBp bXBvcnRhbnQgdG8gdXNlIHBsYW4gYWR2aWNlCisgIG9ubHkgd2hlbiB0aGUgcmlza3Mgb2YgY29u c3RyYWluaW5nIHRoZSBwbGFubmVyJ3MgY2hvaWNlcyBhcmUgb3V0d2VpZ2hlZCBieQorICB0aGUg YmVuZWZpdHMuCisgPC9wYXJhPgorCisgPHNlY3QyIGlkPSJwZ3BsYW5hZHZpY2UtZ2V0dGluZy1z dGFydGVkIj4KKyAgPHRpdGxlPkdldHRpbmcgU3RhcnRlZDwvdGl0bGU+CisKKyAgPHBhcmE+Cisg ICBJbiBvcmRlciB0byB1c2UgdGhpcyBtb2R1bGUsIHRoZSA8bGl0ZXJhbD5wZ19wbGFuX2Fkdmlj ZTwvbGl0ZXJhbD4gbW9kdWxlCisgICBtdXN0IGJlIGxvYWRlZC4gWW91IGNhbiBkbyB0aGlzIG9u IGEgc3lzdGVtLXdpZGUgYmFzaXMgYnkgYWRkaW5nCisgICA8bGl0ZXJhbD5wZ19wbGFuX2Fkdmlj ZTwvbGl0ZXJhbD4gdG8KKyAgIDx4cmVmIGxpbmtlbmQ9Imd1Yy1zaGFyZWQtcHJlbG9hZC1saWJy YXJpZXMiLz4gYW5kIHJlc3RhcnRpbmcgdGhlCisgICBzZXJ2ZXIsIG9yIGJ5IGFkZGluZyBpdCB0 bworICAgPHhyZWYgbGlua2VuZD0iZ3VjLXNlc3Npb24tcHJlbG9hZC1saWJyYXJpZXMiLz4gYW5k IHN0YXJ0aW5nIGEgbmV3IHNlc3Npb24sCisgICBvciBieSBsb2FkaW5nIGl0IGludG8gYW4gaW5k aXZpZHVhbCBzZXNzaW9uIHVzaW5nIHRoZQorICAgPGxpbmsgbGlua2VuZD0ic3FsLWxvYWQiPjxs aXRlcmFsPkxPQUQ8L2xpdGVyYWw+PC9saW5rPiBjb21tYW5kLiBJZiB5b3UKKyAgIHdpc2ggdG8g dXNlIHRoZQorICAgPGxpbmsgbGlua2VuZD0icGdwbGFuYWR2aWNlLWNvbGxlY3RvciI+Y29sbGVj dG9yIGludGVyZmFjZTwvbGluaz4sCisgICB5b3UgbXVzdCBhbHNvIGluc3RhbGwgdGhlIDxsaXRl cmFsPnBnX3BsYW5fYWR2aWNlPC9saXRlcmFsPiBleHRlbnNpb24KKyAgIGluIHRoZSBkYXRhYmFz ZSB3aGVyZSB5b3Ugd2lzaCB0byB1c2UgdGhlIGNvbGxlY3Rvci4gVXNlIHRoZSBjb21tYW5kCisg ICA8bGl0ZXJhbD5DUkVBVEUgRVhURU5TSU9OIHBnX3BsYW5fYWR2aWNlPC9saXRlcmFsPiB0byBk byB0aGlzLiBJZiB5b3UgZG8KKyAgIG5vdCB3aXNoIHRvIHVzZSB0aGUgY29sbGVjdG9yIGludGVy ZmFjZSwgdGhpcyBzdGVwIGlzIG5vdCByZXF1aXJlZC4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgor ICAgT25jZSB0aGUgPGxpdGVyYWw+cGdfcGxhbl9hZHZpY2U8L2xpdGVyYWw+IG1vZHVsZSBpcyBs b2FkZWQsCisgICA8bGluayBsaW5rZW5kPSJzcWwtZXhwbGFpbiI+PGxpdGVyYWw+RVhQTEFJTjwv bGl0ZXJhbD48L2xpbms+IHdpbGwgc3VwcG9ydAorICAgYSA8bGl0ZXJhbD5QTEFOX0FEVklDRTwv bGl0ZXJhbD4gb3B0aW9uLiBZb3UgY2FuIHVzZSB0aGlzIG9wdGlvbiB0byBzZWUKKyAgIGEgcGxh biBhZHZpY2Ugc3RyaW5nIGZvciB0aGUgY2hvc2VuIHBsYW4uIEZvciBleGFtcGxlOgorICA8L3Bh cmE+CisKKzxwcm9ncmFtbGlzdGluZz4KK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0Up CisgICAgICAgIFNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYu ZGltX2lkID0gZC5pZDsKKyAgICAgICAgICAgICBRVUVSWSBQTEFOCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoIEpvaW4KKyAgIEhhc2ggQ29uZDogKGYuZGltX2lk ID0gZC5pZCkKKyAgIC0+ICBTZXEgU2NhbiBvbiBqb2luX2ZhY3QgZgorICAgLT4gIEhhc2gKKyAg ICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb2luX2RpbSBkCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNl OgorICAgSk9JTl9PUkRFUihmIGQpCisgICBIQVNIX0pPSU4oZCkKKyAgIFNFUV9TQ0FOKGYgZCkK KyAgIE5PX0dBVEhFUihmIGQpCis8L3Byb2dyYW1saXN0aW5nPgorCisgIDxwYXJhPgorICAgSW4g dGhpcyBleGFtcGxlLCB0aGUgdXNlciBoYXMgbm90IHNwZWNpZmllZCBhbnkgYWR2aWNlOyBpbnN0 ZWFkLCB0aGUKKyAgIHBsYW5uZXIgaGFzIGJlZW4gcGVybWl0dGVkIHRvIG1ha2Ugd2hhdGV2ZXIg ZGVjaXNpb25zIGl0IHRoaW5rcyBiZXN0LCBhbmQKKyAgIHRob3NlIGRlY2lzaW9ucyBhcmUgbWVt b3JpYWxpemVkIGluIHRoZSBmb3JtIG9mIGFuIGFkdmljZSBzdHJpbmcuCisgICA8bGl0ZXJhbD5K T0lOX09SREVSKGYgZCk8L2xpdGVyYWw+IG1lYW5zIHRoYXQgPGxpdGVyYWw+ZjwvbGl0ZXJhbD4g c2hvdWxkCisgICBiZSB0aGUgZHJpdmluZyB0YWJsZSwgYW5kIHRoZSBmaXJzdCB0YWJsZSB0byB3 aGljaCBpdCBzaG91bGQgYmUgam9pbmVkIGlzCisgICA8bGl0ZXJhbD5kPC9saXRlcmFsPi4gPGxp dGVyYWw+SEFTSF9KT0lOKGQpPC9saXRlcmFsPiBtZWFucyB0aGF0CisgICA8bGl0ZXJhbD5kPC9s aXRlcmFsPiBzaG91bGQgYXBwZWFyIG9uIHRoZSBpbm5lciBzaWRlIG9mIGEgaGFzaCBqb2luLgor ICAgPGxpdGVyYWw+U0VRX1NDQU4oZiBkKTwvbGl0ZXJhbD4gbWVhbnMgdGhhdCBib3RoIDxsaXRl cmFsPmY8L2xpdGVyYWw+CisgICBhbmQgPGxpdGVyYWw+ZDwvbGl0ZXJhbD4gc2hvdWxkIGJlIGFj Y2Vzc2VkIHZpYSBhIHNlcXVlbnRpYWwgc2Nhbi4KKyAgIDxsaXRlcmFsPk5PX0dBVEhFUihmIGQp PC9saXRlcmFsPiBtZWFucyB0aGF0IG5laXRoZXIgPGxpdGVyYWw+ZjwvbGl0ZXJhbD4KKyAgIG5v ciA8bGl0ZXJhbD5kPC9saXRlcmFsPiBzaG91bGQgYXBwZWFyIGJlbmVhdGggYSA8bGl0ZXJhbD5H YXRoZXI8L2xpdGVyYWw+CisgICBvciA8bGl0ZXJhbD5HYXRoZXIgTWVyZ2U8L2xpdGVyYWw+IG5v ZGUuIEZvciBtb3JlIGRldGFpbHMgb24gdGhlIHBsYW4KKyAgIGFkdmljZSBtaW5pLWxhbmd1YWdl LCBzZWUgdGhlIGluZm9ybWF0aW9uIG9uCisgICA8bGluayBsaW5rZW5kPSJwZ3BsYW5hZHZpY2Ut dGFyZ2V0cyI+YWR2aWNlIHRhcmdldHM8L2xpbms+IGFuZAorICAgPGxpbmsgbGlua2VuZD0icGdw bGFuYWR2aWNlLXRhZ3MiPmFkdmljZSB0YWdzPC9saW5rPiwgYmVsb3cuCisgIDwvcGFyYT4KKwor ICA8cGFyYT4KKyAgIElmIHlvdSB3YW50IHRvIHNlZSB0aGUgYWR2aWNlIHN0cmluZ3MgZm9yIGEg bGFyZ2UgbnVtYmVyIG9mIHF1ZXJpZXMsIG9yCisgICBhbiBlbnRpcmUgd29ya2xvYWQsIHJ1bm5p bmcgPGxpdGVyYWw+RVhQTEFJTiAoUExBTl9BRFZJQ0UpPC9saXRlcmFsPiBmb3IKKyAgIGVhY2gg b25lIG1heSBub3QgYmUgY29udmVuaWVudC4gSW4gc3VjaCBzaXR1YXRpb25zLCBpdCBjYW4gYmUg bW9yZQorICAgY29udmVuaWVudCB0byB1c2UgYW4KKyAgIDxsaW5rIGxpbmtlbmQ9InBncGxhbmFk dmljZS1jb2xsZWN0b3IiPmFkdmljZSBjb2xsZWN0b3I8L2xpbms+LgorICA8L3BhcmE+CisKKyAg PHBhcmE+CisgICBPbmNlIHlvdSBoYXZlIGFuIGFkdmljZSBzdHJpbmcgZm9yIGEgcXVlcnksIHlv dSBjYW4gdXNlIGl0IHRvIGNvbnRyb2wgaG93CisgICB0aGF0IHF1ZXJ5IGlzIHBsYW5uZWQuIFlv dSBjYW4gZG8gdGhpcyBieSBzZXR0aW5nCisgICA8bGl0ZXJhbD5wZ19wbGFuX2FkdmljZS5hZHZp Y2U8L2xpdGVyYWw+IHRvIHRoZSBhZHZpY2Ugc3RyaW5nIHlvdSd2ZQorICAgY2hvc2VuLiBUaGlz IGNhbiBiZSBhbiBhZHZpY2Ugc3RyaW5nIHRoYXQgd2FzIGdlbmVyYXRlZCBieSB0aGUgc3lzdGVt LAorICAgb3Igb25lIHlvdSd2ZSB3cml0dGVuIHlvdXJzZWxmLiBPbmUgZ29vZCB3YXkgb2YgY3Jl YXRpbmcgeW91ciBvd24gYWR2aWNlCisgICBzdHJpbmcgaXMgdG8gdGFrZSB0aGUgc3RyaW5nIGdl bmVyYXRlZCBieSB0aGUgc3lzdGVtIGFuZCBwaWNrIG91dCBqdXN0CisgICB0aG9zZSBlbGVtZW50 cyB0aGF0IHlvdSB3aXNoIHRvIGVuZm9yY2UuIEluIHRoZSBleGFtcGxlIGFib3ZlLAorICAgPGxp dGVyYWw+cGdfcGxhbl9hZHZpY2U8L2xpdGVyYWw+IGVtaXRzIGFkdmljZSBmb3IgdGhlIGpvaW4g b3JkZXIsIHRoZQorICAgam9pbiBtZXRob2QsIHRoZSBzY2FuIG1ldGhvZCwgYW5kIHRoZSB1c2Ug b2YgcGFyYWxsZWxpc20sIGJ1dCB5b3UgbWlnaHQKKyAgIG9ubHkgd2FudCB0byBjb250cm9sIHRo ZSBqb2luIG9yZGVyOgorICA8L3BhcmE+CisKKzxwcm9ncmFtbGlzdGluZz4KK1NFVCBwZ19wbGFu X2FkdmljZS5hZHZpY2UgPSAnSk9JTl9PUkRFUihmIGQpJzsKK0VYUExBSU4gKENPU1RTIE9GRikK KyAgICAgICAgU0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5fZGltIGQgT04gZi5k aW1faWQgPSBkLmlkOworICAgICAgICAgICAgIFFVRVJZIFBMQU4KKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggSm9pbgorICAgSGFzaCBDb25kOiAoZi5kaW1faWQg PSBkLmlkKQorICAgLT4gIFNlcSBTY2FuIG9uIGpvaW5fZmFjdCBmCisgICAtPiAgSGFzaAorICAg ICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvaW5fZGltIGQKKyBTdXBwbGllZCBQbGFuIEFkdmljZToK KyAgIEpPSU5fT1JERVIoZiBkKSAvKiBtYXRjaGVkICovCis8L3Byb2dyYW1saXN0aW5nPgorCisg IDxwYXJhPgorICAgU2luY2UgdGhlIDxsaXRlcmFsPlBMQU5fQURWSUNFPC9saXRlcmFsPiBvcHRp b24gdG8KKyAgIDxsaXRlcmFsPkVYUExBSU48L2xpdGVyYWw+IHdhcyBub3Qgc3BlY2lmaWVkLCBu byBhZHZpY2Ugc3RyaW5nIGlzIGdlbmVyYXRlZAorICAgZm9yIHRoZSBwbGFuLiBIb3dldmVyLCB0 aGUgc3VwcGxpZWQgcGxhbiBhZHZpY2UgaXMgc3RpbGwgc2hvd24gc28gdGhhdAorICAgYW55b25l IGxvb2tpbmcgYXQgdGhlIDxsaXRlcmFsPkVYUExBSU48L2xpdGVyYWw+IG91dHB1dCBrbm93cyB0 aGF0IHRoZQorICAgY2hvc2VuIHBsYW4gd2FzIGluZmx1ZW5jZWQgYnkgcGxhbiBhZHZpY2UuIElm IGluZm9ybWF0aW9uIGFib3V0IHN1cHBsaWVkCisgICBwbGFuIGFkdmljZSBpcyBub3QgZGVzaXJl ZCwgaXQgY2FuIGJlIHN1cHByZXNzZWQgYnkgY29uZmlndXJpbmcKKyAgIDxsaXRlcmFsPnBnX3Bs YW5fYWR2aWNlLmFsd2F5c19leHBsYWluX3N1cHBsaWVkX2FkdmljZSA9IGZhbHNlPC9saXRlcmFs Pi4KKyAgIEZvciBlYWNoIHBpZWNlIG9mIHN1cHBsaWVkIGFkdmljZSwgdGhlIG91dHB1dCBzaG93 cworICAgPGxpbmsgbGlua2VuZD0icGdwbGFuYWR2aWNlLWZlZWRiYWNrIj5hZHZpY2UgZmVlZGJh Y2s8L2xpbms+IGluZGljYXRpbmcKKyAgIHdoZXRoZXIgb3Igbm90IHRoZSBhZHZpY2Ugd2FzIHN1 Y2Nlc3NmdWxseSBhcHBsaWVkIHRvIHRoZSBxdWVyeS4gSW4gdGhpcworICAgY2FzZSwgdGhlIGZl ZWRiYWNrIHNheXMgPGxpdGVyYWw+LyogbWF0Y2hlZCAqLzwvbGl0ZXJhbD4sIHdoaWNoIG1lYW5z IHRoYXQKKyAgIDxsaXRlcmFsPmY8L2xpdGVyYWw+IGFuZCA8bGl0ZXJhbD5kPC9saXRlcmFsPiB3 ZXJlIGZvdW5kIGluIHRoZSBxdWVyeSBhbmQKKyAgIHRoYXQgdGhlIHJlc3VsdGluZyBxdWVyeSBw bGFuIGNvbmZvcm1zIHRvIHRoZSBzcGVjaWZpZWQgYWR2aWNlLgorICA8L3BhcmE+CisKKyA8L3Nl Y3QyPgorCisgPHNlY3QyIGlkPSJwZ3BsYW5hZHZpY2UtaG93LWl0LXdvcmtzIj4KKyAgPHRpdGxl PkhvdyBJdCBXb3JrczwvdGl0bGU+CisKKyAgPHBhcmE+CisgICBQbGFuIGFkdmljZSBpcyB3cml0 dGVuIGltcGVyYXRpdmVseTsgdGhhdCBpcywgaXQgc3BlY2lmaWVzIHdoYXQgc2hvdWxkIGJlCisg ICBkb25lLiBIb3dldmVyLCBhdCBhbiBpbXBsZW1lbnRhdGlvbiBsZXZlbCwKKyAgIDxsaXRlcmFs PnBnX3BsYW5fYWR2aWNlPC9saXRlcmFsPiB3b3JrcyBieSB0ZWxsaW5nIHRoZSBjb3JlIHBsYW5u ZXIgd2hhdAorICAgc2hvdWxkIG5vdCBiZSBkb25lLiBJbiBvdGhlciB3b3JkcywgaXQgb3BlcmF0 ZXMgYnkgY29uc3RyYWluaW5nIHRoZQorICAgcGxhbm5lcidzIGNob2ljZXMsIG5vdCBieSByZXBs YWNpbmcgaXQuIFRoZXJlZm9yZSwgbm8gbWF0dGVyIHdoYXQgYWR2aWNlCisgICB5b3UgcHJvdmlk ZSwgeW91IHdpbGwgb25seSBldmVyIGdldCBhIHBsYW4gdGhhdCB0aGUgY29yZSBwbGFubmVyIHdv dWxkIGhhdmUKKyAgIGNvbnNpZGVyZWQgZm9yIHRoZSBxdWVyeSBpbiBxdWVzdGlvbi4gSWYgeW91 IGF0dGVtcHQgdG8gZm9yY2Ugd2hhdCB5b3UKKyAgIGJlbGlldmUgdG8gYmUgdGhlIGNvcnJlY3Qg cGxhbiBieSBzdXBwbHlpbmcgYW4gYWR2aWNlIHN0cmluZywgYW5kIHRoZQorICAgcGxhbm5lciBz dGlsbCBmYWlscyB0byBwcm9kdWNlIHRoZSBkZXNpcmVkIHBsYW4sIHRoaXMgbWVhbnMgdGhhdCBl aXRoZXIKKyAgIHRoZXJlIGlzIGEgYnVnIGluIHlvdXIgYWR2aWNlIHN0cmluZywgb3IgdGhlIHBs YW4gaW4gcXVlc3Rpb24gd2FzIG5vdAorICAgY29uc2lkZXJlZCB2aWFibGUgYnkgdGhlIGNvcmUg cGxhbm5lci4gVGhpcyBjb21tb25seSBoYXBwZW5zIGZvciBvbmUgb2YgdHdvCisgICByZWFzb25z LiBGaXJzdCwgaXQgbWlnaHQgYmUgdGhlIHBsYW5uZXIgYmVsaWV2ZXMgdGhhdCB0aGUgcGxhbiB5 b3UncmUgdHJ5aW5nCisgICB0byBmb3JjZSB3b3VsZCBiZSBzZW1hbnRpY2FsbHkgaW5jb3JyZWN0 IC0gdGhhdCBpcywgaXQgd291bGQgcHJvZHVjZSB0aGUKKyAgIHdyb25nIHJlc3VsdHMgLSBhbmQg Zm9yIHRoYXQgcmVhc29uIGl0IHdhc24ndCBjb25zaWRlcmVkLiBTZWNvbmQsIGl0IG1pZ2h0Cisg ICBiZSB0aGF0IHRoZSBwbGFubmVyIHJlamVjdGVkIHRoZSBwbGFuIHlvdSB3ZXJlIGhvcGluZyB0 byBnZW5lcmF0ZSBvbiBzb21lCisgICBncm91bmRzIG90aGVyIHRoYW4gY29zdC4gRm9yIGV4YW1w bGUsIGdpdmVuIGEgdmVyeSBzaW1wbGUgcXVlcnkgc3VjaCBhcworICAgPGxpdGVyYWw+U0VMRUNU ICogRlJPTSBzb21lX3RhYmxlPC9saXRlcmFsPiwgdGhlIHF1ZXJ5IHBsYW5uZXIgd2lsbAorICAg ZGVjaWRlIHRoYXQgdGhlIHVzZSBvZiBhbiBpbmRleCBpcyB3b3J0aGxlc3MgaGVyZSBiZWZvcmUg aXQgcGVyZm9ybXMgYW55CisgICBjb3N0aW5nIGNhbGN1bGF0aW9ucy4gWW91IGNhbm5vdCBmb3Jj ZSBpdCB0byB1c2UgYW4gaW5kZXggZm9yIHRoaXMgcXVlcnkKKyAgIGV2ZW4gaWYgeW91IHNldCA8 bGl0ZXJhbD5lbmFibGVfc2Vxc2NhbiA9IGZhbHNlPC9saXRlcmFsPiwgYW5kIHlvdSBjYW4ndAor ICAgZm9yY2UgaXQgdG8gdXNlIGFuIGluZGV4IHVzaW5nIHBsYW4gYWR2aWNlLCBlaXRoZXIuCisg IDwvcGFyYT4KKworICA8cGFyYT4KKyAgIFNwZWNpZnlpbmcgcGxhbiBhZHZpY2Ugc2hvdWxkIG5l dmVyIGNhdXNlIHBsYW5uZXIgZmFpbHVyZS4gSG93ZXZlciwgaWYgeW91CisgICBzcGVjaWZ5IHBs YW4gYWR2aWNlIHRoYXQgYXNrcyBmb3Igc29tZXRoaW5nIGltcG9zc2libGUsIHlvdSBtYXkgZ2V0 IGEgcGxhbgorICAgd2hlcmUgc29tZSBwbGFuIG5vZGVzIGFyZSBmbGFnZ2VkIGFzIDxsaXRlcmFs PkRpc2FibGVkOiB0cnVlPC9saXRlcmFsPiBpbgorICAgdGhlIDxsaXRlcmFsPkVYUExBSU48L2xp dGVyYWw+IG91dHB1dC4gSW4gc29tZSBjYXNlcywgc3VjaCBwbGFucyB3aWxsIGJlCisgICBiYXNp Y2FsbHkgdGhlIHNhbWUgcGxhbiB5b3Ugd291bGQgaGF2ZSBnb3R0ZW4gd2l0aCBubyBzdXBwbGll ZCBhZHZpY2UgYXQKKyAgIGFsbCwgYnV0IGluIG90aGVyIGNhc2VzLCB0aGV5IG1heSBiZSBtdWNo IHdvcnNlLiBGb3IgZXhhbXBsZToKKyAgPC9wYXJhPgorCis8cHJvZ3JhbWxpc3Rpbmc+CitTRVQg cGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0pPSU5fT1JERVIoeCBmIGQpJzsKK0VYUExBSU4gKENP U1RTIE9GRikKKyAgICAgICAgU0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5fZGlt IGQgT04gZi5kaW1faWQgPSBkLmlkOworICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTgor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5l c3RlZCBMb29wCisgICBEaXNhYmxlZDogdHJ1ZQorICAgLT4gIFNlcSBTY2FuIG9uIGpvaW5fZmFj dCBmCisgICAtPiAgSW5kZXggU2NhbiB1c2luZyBqb2luX2RpbV9wa2V5IG9uIGpvaW5fZGltIGQK KyAgICAgICAgIEluZGV4IENvbmQ6IChpZCA9IGYuZGltX2lkKQorIFN1cHBsaWVkIFBsYW4gQWR2 aWNlOgorICAgSk9JTl9PUkRFUih4IGYgZCkgLyogcGFydGlhbGx5IG1hdGNoZWQgKi8KKzwvcHJv Z3JhbWxpc3Rpbmc+CisKKyAgPHBhcmE+CisgICBCZWNhdXNlIG5laXRoZXIgPGxpdGVyYWw+Zjwv bGl0ZXJhbD4gbm9yIDxsaXRlcmFsPmQ8L2xpdGVyYWw+IGlzIHRoZQorICAgZmlyc3QgdGFibGUg aW4gdGhlIDxsaXRlcmFsPkpPSU5fT1JERVIoKTwvbGl0ZXJhbD4gc3BlY2lmaWNhdGlvbiwgdGhl CisgICBwbGFubmVyIGRpc2FibGVzIGFsbCBkaXJlY3Qgam9pbnMgYmV0d2VlbiB0aGUgdHdvIG9m IHRoZW0sIHRoaW5raW5nIHRoYXQKKyAgIHRoZSBqb2luIHRvIDxsaXRlcmFsPng8L2xpdGVyYWw+ IHNob3VsZCBoYXBwZW4gZmlyc3QuIFNpbmNlIHBsYW5uaW5nIGlzbid0CisgICBhbGxvd2VkIHRv IGZhaWwsIGEgZGlzYWJsZWQgcGxhbiBiZXR3ZWVuIHRoZSB0d28gdGFibGVzIGlzIGV2ZW50dWFs bHkKKyAgIHNlbGVjdGVkIGFueXdheSwgYnV0IGhlcmUgaXQncyBhIDxsaXRlcmFsPk5lc3RlZCBM b29wPC9saXRlcmFsPiByYXRoZXIgdGhhbgorICAgdGhlIDxsaXRlcmFsPkhhc2ggSm9pbjwvbGl0 ZXJhbD4gdGhhdCB3YXMgY2hvc2VuIGluIHRoZSBhYm92ZSBleGFtcGxlIHdoZXJlCisgICBubyBh ZHZpY2Ugd2FzIHNwZWNpZmllZC4gVGhlcmUgYXJlIHNldmVyYWwgZGlmZmVyZW50IHdheXMgdGhh dCB0aGlzIGtpbmQKKyAgIG9mIHRoaW5nIGNhbiBoYXBwZW47IHdoZW4gaXQgZG9lcywgdGhlIHJl c3VsdGluZyBwbGFuIGlzIGdlbmVyYWxseSB3b3JzZQorICAgdGhhbiBpZiBubyBhZHZpY2UgaGFk IGJlZW4gc3BlY2lmaWVkIGF0IGFsbC4gVGhlcmVmb3JlLCBpdCBpcyBhIGdvb2QgaWRlYQorICAg dG8gdmFsaWRhdGUgdGhhdCB0aGUgYWR2aWNlIHlvdSBzcGVjaWZ5IGFwcGxpZXMgdG8gdGhlIHF1 ZXJ5IHRvIHdoaWNoIGl0CisgICBpcyBhcHBsaWVkIGFuZCB0aGF0IHRoZSByZXN1bHRzIGFyZSBh cyBleHBlY3RlZC4KKyAgPC9wYXJhPgorCisgPC9zZWN0Mj4KKworIDxzZWN0MiBpZD0icGdwbGFu YWR2aWNlLXRhcmdldHMiPgorICA8dGl0bGU+QWR2aWNlIFRhcmdldHM8L3RpdGxlPgorCisgIDxw YXJhPgorICAgQW4gPGZpcnN0dGVybT5hZHZpY2UgdGFyZ2V0PC9maXJzdHRlcm0+IHVuaXF1ZWx5 IGlkZW50aWZpZXMgYSBwYXJ0aWN1bGFyCisgICBpbnN0YW5jZSBvZiBhIHBhcnRpY3VsYXIgdGFi bGUgaW52b2x2ZWQgaW4gYSBwYXJ0aWN1bGFyIHF1ZXJ5LiBJbiBzaW1wbGUKKyAgIGNhc2VzLCBz dWNoIGFzIHRoZSBleGFtcGxlcyBzaG93biBhYm92ZSwgdGhlIGFkdmljZSB0YXJnZXQgaXMgc2lt cGx5IHRoZQorICAgcmVsYXRpb24gYWxpYXMuIEhvd2V2ZXIsIGEgbW9yZSBjb21wbGV4IHN5bnRh eCBpcyByZXF1aXJlZCB3aGVuIHN1YnF1ZXJpZXMKKyAgIGFyZSB1c2VkLCB3aGVuIHRhYmxlcyBh cmUgcGFydGl0aW9uZWQsIG9yIHdoZW4gdGhlIHNhbWUgcmVsYXRpb24gYWxpYXMgaXMKKyAgIG1l bnRpb25lZCBtb3JlIHRoYW4gb25jZSBpbiB0aGUgc2FtZSBzdWJxdWVyeSAoZS5nLiwgPGxpdGVy YWw+KGZvbyBKT0lOIGJhcgorICAgT04gZm9vLmEgPSBiYXIuYSkgeCBKT0lOIGZvbyBPTiB4LmIg PSBmb28uYjwvbGl0ZXJhbD4pLiBBbnkgY29tYmluYXRpb24gb2YKKyAgIHRoZXNlIHRocmVlIHRo aW5ncyBjYW4gb2NjdXIgc2ltdWx0YW5lb3VzbHk6IGEgcmVsYXRpb24gY291bGQgYmUgbWVudGlv bmVkCisgICBtb3JlIHRoYW4gb25jZSwgYmUgcGFydGl0aW9uZWQsIGFuZCBiZSB1c2VkIGluc2lk ZSBvZiBhIHN1YnF1ZXJ5LgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBCZWNhdXNlIG9mIHRo aXMsIHRoZSBnZW5lcmFsIHN5bnRheCBmb3IgYSByZWxhdGlvbiBpZGVudGlmaWVyIGlzOgorICA8 L3BhcmE+CisKKzxwcm9ncmFtbGlzdGluZz4KK2FsaWFzX25hbWUjb2NjdXJyZW5jZV9udW1iZXIv cGFydGl0aW9uX3NjaGVtYS5wYXJ0aXRpb25fbmFtZUBwbGFuX25hbWUKKzwvcHJvZ3JhbWxpc3Rp bmc+CisKKyAgPHBhcmE+CisgICBBbGwgY29tcG9uZW50cyBleGNlcHQgZm9yIHRoZSA8bGl0ZXJh bD5hbGlhc19uYW1lPC9saXRlcmFsPiBhcmUgb3B0aW9uYWwKKyAgIGFuZCBhcmUgaW5jbHVkZWQg b25seSB3aGVuIHJlcXVpcmVkLiBXaGVuIGEgY29tcG9uZW50IGlzIG9taXR0ZWQsIHRoZQorICAg cHJlY2VkaW5nIHB1bmN0dWF0aW9uIG11c3QgYWxzbyBiZSBvbWl0dGVkLiBGb3IgdGhlIGZpcnN0 IG9jY3VycmVuY2Ugb2YgYQorICAgdGFibGUgd2l0aGluIGEgZ2l2ZW4gc3VicXVlcnksIGdlbmVy YXRlZCBhZHZpY2Ugd2lsbCBvbWl0IHRoZSBvY2N1cnJlbmNlCisgICBudW1iZXIsIGJ1dCBpdCBp cyBsZWdhbCB0byB3cml0ZSA8bGl0ZXJhbD4jMTwvbGl0ZXJhbD4sIGlmIGRlc2lyZWQuIFRoZQor ICAgcGFydGl0aW9uIHNjaGVtYSBhbmQgcGFydGl0aW9uIG5hbWUgYXJlIGluY2x1ZGVkIG9ubHkg Zm9yIGNoaWxkcmVuIG9mCisgICBwYXJ0aXRpb25lZCB0YWJsZXMuIEluIGdlbmVyYXRlZCBhZHZp Y2UsIDxsaXRlcmFsPnBnX3BsYW5fYWR2aWNlPC9saXRlcmFsPgorICAgYWx3YXlzIGluY2x1ZGVz IGJvdGgsIGJ1dCBpdCBpcyBsZWdhbCB0byBvbWl0IHRoZSBzY2hlbWEuIFRoZSBwbGFuIG5hbWUg aXMKKyAgIG9taXR0ZWQgZm9yIHRoZSB0b3AtbGV2ZWwgcGxhbiwgYW5kIG11c3QgYmUgaW5jbHVk ZWQgZm9yIGFueSBzdWJwbGFuLgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBJdCBpcyBub3Qg YWx3YXlzIGVhc3kgdG8gZGV0ZXJtaW5lIHRoZSBjb3JyZWN0IGFkdmljZSB0YXJnZXQgYnkgZXhh bWluaW5nCisgICB0aGUgcXVlcnkuIEZvciBpbnN0YW5jZSwgaWYgdGhlIHBsYW5uZXIgcHVsbHMg dXAgYSBzdWJxdWVyeSBpbnRvIHRoZSBwYXJlbnQKKyAgIHF1ZXJ5IGxldmVsLCBldmVyeXRoaW5n IGluc2lkZSBvZiBpdCBiZWNvbWVzIHBhcnQgb2YgdGhlIHBhcmVudCBxdWVyeSBsZXZlbCwKKyAg IGFuZCB1c2VzIHRoZSBwYXJlbnQgcXVlcnkncyBzdWJwbGFuIG5hbWUgKG9yIG5vIHN1YnBsYW4g bmFtZSwgaWYgcHVsbGVkIHVwCisgICB0byB0aGUgdG9wIGxldmVsKS4gRnVydGhlcm1vcmUsIHRo ZSBjb3JyZWN0IHN1YnF1ZXJ5IG5hbWUgaXMgc29tZXRpbWVzIG5vdAorICAgb2J2aW91cy4gRm9y IGV4YW1wbGUsIHdoZW4gdHdvIHF1ZXJpZXMgYXJlIGpvaW5lZCB1c2luZyBhbiBvcGVyYXRpb24g c3VjaCBhcworICAgPGxpdGVyYWw+VU5JT048L2xpdGVyYWw+IG9yIDxsaXRlcmFsPklOVEVSU0VD VDwvbGl0ZXJhbD4sIG5vIG5hbWUgZm9yIHRoZQorICAgc3VicXVlcmllcyBpcyBwcmVzZW50IGlu IHRoZSBTUUwgc3ludGF4OyBpbnN0ZWFkLCBhIHN5c3RlbS1nZW5lcmF0ZWQgbmFtZSBpcworICAg YXNzaWduZWQgdG8gZWFjaCBicmFuY2guIFRoZSBlYXNpZXN0IHdheSB0byBkaXNjb3ZlciB0aGUg cHJvcGVyIGFkdmljZQorICAgdGFyZ2V0cyBpcyB0byB1c2UgPGxpdGVyYWw+RVhQTEFJTiAoUExB Tl9BRFZJQ0UpPC9saXRlcmFsPiBhbmQgZXhhbWluZSB0aGUKKyAgIGdlbmVyYXRlZCBhZHZpY2Uu CisgIDwvcGFyYT4KKworIDwvc2VjdDI+CisKKyA8c2VjdDIgaWQ9InBncGxhbmFkdmljZS10YWdz Ij4KKyAgPHRpdGxlPkFkdmljZSBUYWdzPC90aXRsZT4KKworICA8cGFyYT4KKyAgIEFuIDxmaXJz dHRlcm0+YWR2aWNlIHRhZzwvZmlyc3R0ZXJtPiBzcGVjaWZpZXMgYSBwYXJ0aWN1bGFyIGJlaGF2 aW9yIHRoYXQKKyAgIHNob3VsZCBiZSBlbmZvcmNlZCBmb3Igc29tZSBwb3J0aW9uIG9mIHRoZSBx dWVyeSwgc3VjaCBhcyBhIHBhcnRpY3VsYXIKKyAgIGpvaW4gb3JkZXIgb3Igam9pbiBtZXRob2Qu IEFsbCBhZHZpY2UgdGFncyB0YWtlCisgICA8bGluayBsaW5rZW5kPSJwZ3BsYW5hZHZpY2UtdGFy Z2V0cyI+YWR2aWNlIHRhcmdldHM8L2xpbms+IGFzIGFyZ3VtZW50cywKKyAgIGFuZCBtYW55IGFs bG93IGxpc3RzIG9mIGFkdmljZSB0YXJnZXRzLCB3aGljaCBpbiBzb21lIGNhc2VzIGNhbiBiZSBu ZXN0ZWQKKyAgIG11bHRpcGxlIGxldmVscyBkZWVwLiBTZXZlcmFsIGRpZmZlcmVudCBjbGFzc2Vz IG9mIGFkdmljZSB0YXJnZXRzIGV4aXN0LAorICAgZWFjaCBjb250cm9sbGluZyBhIGRpZmZlcmVu dCBhc3BlY3Qgb2YgcXVlcnkgcGxhbm5pbmcuCisgIDwvcGFyYT4KKworICA8c2VjdDMgaWQ9InBn cGxhbmFkdmljZS1zY2FuLW1ldGhvZCI+CisgIDx0aXRsZT5TY2FuIE1ldGhvZCBBZHZpY2U8L3Rp dGxlPgorICAgPHN5bm9wc2lzPgorU0VRX1NDQU4oPHJlcGxhY2VhYmxlPnRhcmdldDwvcmVwbGFj ZWFibGU+IFsgLi4uIF0pCitUSURfU0NBTig8cmVwbGFjZWFibGU+dGFyZ2V0PC9yZXBsYWNlYWJs ZT4gWyAuLi4gXSkKK0lOREVYX1NDQU4oPHJlcGxhY2VhYmxlPnRhcmdldDwvcmVwbGFjZWFibGU+ IDxyZXBsYWNlYWJsZT5pbmRleF9uYW1lPC9yZXBsYWNlYWJsZT4gWyAuLi4gXSkKK0lOREVYX09O TFlfU0NBTig8cmVwbGFjZWFibGU+dGFyZ2V0PC9yZXBsYWNlYWJsZT4gPHJlcGxhY2VhYmxlPmlu ZGV4X25hbWU8L3JlcGxhY2VhYmxlPiBbIC4uLiBdKQorRk9SRUlHTl9TQ0FOKCg8cmVwbGFjZWFi bGU+dGFyZ2V0PC9yZXBsYWNlYWJsZT4gWyAuLi4gXSkgWyAuLi4gXSkKK0JJVE1BUF9IRUFQX1ND QU4oPHJlcGxhY2VhYmxlPnRhcmdldDwvcmVwbGFjZWFibGU+IFsgLi4uIF0pPC9zeW5vcHNpcz4K KworICAgPHBhcmE+CisgICAgPGxpdGVyYWw+U0VRX1NDQU48L2xpdGVyYWw+IHNwZWNpZmllcyB0 aGF0IGVhY2ggdGFyZ2V0IHRhYmxlIHNob3VsZCBiZQorICAgIHNjYW5uZWQgdXNpbmcgYSA8bGl0 ZXJhbD5TZXEgU2NhbjwvbGl0ZXJhbD4uIDxsaXRlcmFsPlRJRF9TQ0FOPC9saXRlcmFsPgorICAg IHNwZWNpZmllcyB0aGF0IGVhY2ggdGFyZ2V0IHRhYmxlIHNob3VsZCBiZSBzY2FubmVkIHVzaW5n IGEKKyAgICA8bGl0ZXJhbD5USUQgU2NhbjwvbGl0ZXJhbD4gb3IgPGxpdGVyYWw+VElEIFJhbmdl IFNjYW48L2xpdGVyYWw+LgorICAgIDxsaXRlcmFsPkJJVE1BUF9IRUFQX1NDQU48L2xpdGVyYWw+ IHNwZWNpZmllcyB0aGF0IGVhY2ggdGFyZ2V0IHRhYmxlCisgICAgc2hvdWxkIGJlIHNjYW5uZWQg dXNpbmcgYSA8bGl0ZXJhbD5CaXRtYXAgSGVhcCBTY2FuPC9saXRlcmFsPi4KKyAgIDwvcGFyYT4K KworICAgPHBhcmE+CisgICAgPGxpdGVyYWw+SU5ERVhfU0NBTjwvbGl0ZXJhbD4gc3BlY2lmaWVz IHRoYXQgZWFjaCB0YXJnZXQgdGFibGUgc2hvdWxkCisgICAgYmUgc2Nhbm5lZCB1c2luZyBhbiA8 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+YzwvbGl0ZXJhbD4uCisgICAgSWYgdGhlcmUgYXJlIG1vcmUgdGFibGVzIGluIHRo ZSBxdWVyeSB0aGFuIDxsaXRlcmFsPmE8L2xpdGVyYWw+LAorICAgIDxsaXRlcmFsPmI8L2xpdGVy YWw+LCBhbmQgPGxpdGVyYWw+YzwvbGl0ZXJhbD4sIHRoZSByZXN0IGNhbiBiZSBqb2luZWQKKyAg ICBhZnRlcndhcmRzIGluIGFueSBtYW5uZXIuCisgICA8L3BhcmE+CisKKyAgIDxwYXJhPgorICAg IElmIGEgPGxpdGVyYWw+Sk9JTl9PUkRFUjwvbGl0ZXJhbD4gbGlzdCBjb250YWlucyBhIHBhcmVu dGhlc2l6ZWQgc3VibGlzdCwKKyAgICBpdCBzcGVjaWZpZXMgYSBub24tb3V0ZXItZGVlcCBqb2lu LiBUaGUgdGFibGVzIGluIHRoZSBzdWJsaXN0IG11c3QgZmlyc3QKKyAgICBiZSBqb2luZWQgdG8g ZWFjaCBvdGhlciBtdWNoIGFzIGlmIHRoZSBzdWJsaXN0IHdlcmUgYSB0b3AtbGV2ZWwKKyAgICA8 bGl0ZXJhbD5KT0lOX09SREVSPC9saXRlcmFsPiBsaXN0LCBhbmQgdGhlIHJlc3VsdGluZyBqb2lu IHByb2R1Y3QgbXVzdAorICAgIHRoZW4gYXBwZWFyIG9uIHRoZSBpbm5lciBzaWRlIG9mIGEgam9p biBhdCB0aGUgYXBwcm9wcmlhdGUgcG9pbnQgaW4gdGhlCisgICAgam9pbiBvcmRlci4gRm9yIGV4 YW1wbGUsIDxsaXRlcmFsPkpPSU5fT1JERVIoYSAoYiBjKSBkKTwvbGl0ZXJhbD4gcmVxdWlyZXMK KyAgICBhIHBsYW4gb2YgdGhpcyBmb3JtOgorICAgPC9wYXJhPgorCis8cHJvZ3JhbWxpc3Rpbmc+ CitKb2luCisgIC0+ICBKb2luCisgICAgICAgIC0+IFNjYW4gb24gYQorICAgICAgICAtPiBKb2lu CisgICAgICAgICAgICAgLT4gU2NhbiBvbiBiCisgICAgICAgICAgICAgLT4gU2NhbiBvbiBjCisg IC0+ICBTY2FuIG9uIGQKKzwvcHJvZ3JhbWxpc3Rpbmc+CisKKyAgIDxwYXJhPgorICAgIElmIGEg PGxpdGVyYWw+Sk9JTl9PUkRFUjwvbGl0ZXJhbD4gbGlzdCBjb250YWlucyBhIHN1Ymxpc3Qgc3Vy cm91bmRlZCBieQorICAgIGN1cmx5IGJyYWNlcywgdGhpcyBhbHNvIHNwZWNpZmllcyBhIG5vbi1v dXRlci1kZWVwIGpvaW4uIEhvd2V2ZXIsIHRoZSBqb2luCisgICAgb3JkZXIgd2l0aGluIHRoZSBz dWJsaXN0IGlzIG5vdCBjb25zdHJhaW5lZC4gRm9yIGV4YW1wbGUsIHNwZWNpZml5aW5nCisgICAg PGxpdGVyYWw+Sk9JTl9PUkRFUihhIHtiIGN9IGQpPC9saXRlcmFsPiB3b3VsZCBhbGxvdyB0aGUg c2NhbnMgb2YKKyAgICA8bGl0ZXJhbD5iPC9saXRlcmFsPiBhbmQgPGxpdGVyYWw+YzwvbGl0ZXJh bD4gdG8gYmUgc3dhcHBlZCBpbiB0aGUKKyAgICBwcmV2aW91cyBleGFtcGxlLCB3aGljaCBpcyBu b3QgYWxsb3dlZCB3aGVuIHBhcmVudGhlc2VzIGFyZSB1c2VkLgorICAgPC9wYXJhPgorCisgICA8 cGFyYT4KKyAgICBQYXJlbnRoZXNpemVkIHN1Ymxpc3RzIGNhbiBiZSBhcmJpdHJhcmlseSBuZXN0 ZWQsIGJ1dCBzdWJsaXN0cyBzdXJyb3VuZGVkCisgICAgYnkgY3VybHkgYnJhY2VzIGNhbm5vdCB0 aGVtc2VsdmVzIGNvbnRhaW4gc3VibGlzdHMuCisgICA8L3BhcmE+CisKKyAgIDxwYXJhPgorICAg IE11bHRpcGxlIGluc3RhbmNlcyBvZiA8bGl0ZXJhbD5KT0lOX09SREVSKCk8L2xpdGVyYWw+IGNh biBzb21ldGltZXMgYmUKKyAgICBuZWVkZWQgaW4gb3JkZXIgdG8gZnVsbHkgY29uc3RyYWludCB0 aGUgam9pbiBvcmRlci4gVGhpcyBvY2N1cnMgd2hlbiB0aGVyZQorICAgIGFyZSBtdWx0aXBsZSBq b2luIHByb2JsZW1zIHRoYXQgYXJlIG9wdGltaXplZCBzZXBhcmF0ZWx5IGJ5IHRoZSBwbGFubmVy LgorICAgIFRoaXMgY2FuIGhhcHBlbiBkdWUgdG8gdGhlIHByZXNlbmNlIG9mIHN1YnF1ZXJpZXMs IG9yIGJlY2F1c2UgdGhlcmUgaXMgYQorICAgIHBhcnRpdGlvbndpc2Ugam9pbi4gSW4gdGhlIGxh dHRlciBjYXNlLCBlYWNoIGJyYW5jaCBvZiB0aGUgcGFydGl0aW9ud2lzZQorICAgIGpvaW4gY2Fu IGhhdmUgaXRzIG93biBqb2luIG9yZGVyLCBpbmRlcGVuZGVudCBvZiBldmVyeSBvdGhlciBicmFu Y2guCisgICA8L3BhcmE+CisKKyAgPC9zZWN0Mz4KKworICA8c2VjdDMgaWQ9InBncGxhbmFkdmlj ZS1qb2luLW1ldGhvZCI+CisgIDx0aXRsZT5Kb2luIE1ldGhvZCBBZHZpY2U8L3RpdGxlPgorICAg PHN5bm9wc2lzPgoram9pbl9tZXRob2RfbmFtZSg8cmVwbGFjZWFibGU+am9pbl9tZXRob2RfaXRl bTwvcmVwbGFjZWFibGU+IFsgLi4uIF0pCisKKzxwaHJhc2U+d2hlcmUgPHJlcGxhY2VhYmxlPmpv aW5fbWV0aG9kX25hbWU8L3JlcGxhY2VhYmxlPiBpczo8L3BocmFzZT4KKworeyBNRVJHRV9KT0lO X01BVEVSSUFMSVpFIHwgTUVSR0VfSk9JTl9QTEFJTiB8IE5FU1RFRF9MT09QX01BVEVSSUFMSVpF IHwgTkVTVEVEX0xPT1BfUExBSU4gfCBIQVNIX0pPSU4gfQorCis8cGhyYXNlPmFuZCA8cmVwbGFj ZWFibGU+am9pbl9tZXRob2RfaXRlbTwvcmVwbGFjZWFibGU+IGlzOjwvcGhyYXNlPgorCit7IDxy ZXBsYWNlYWJsZT5hZHZpY2VfdGFyZ2V0PC9yZXBsYWNlYWJsZT4gfAorKCA8cmVwbGFjZWFibGU+ YWR2aWNlX3RhcmdldDwvcmVwbGFjZWFibGU+IFsgLi4uIF0gKSB9PC9zeW5vcHNpcz4KKworICAg PHBhcmE+CisgICAgSm9pbiBtZXRob2QgYWR2aWNlIHNwZWNpZmllcyB0aGUgdGFibGUsIG9yIHNl dCBvZiB0YWJsZXMsIHRoYXQgc2hvdWxkCisgICAgYXBwZWFyIG9uIHRoZSBpbm5lciBzaWRlIG9m IGEgam9pbiB1c2luZyB0aGUgbmFtZWQgam9pbiBtZXRob2QuIEZvcgorICAgIGV4YW1wbGUsIDxs aXRlcmFsPkhBU0hfSk9JTihhIGIpPC9saXRlcmFsPiBtZWFucyB0aGF0IGVhY2ggb2YKKyAgICA8 bGl0ZXJhbD5hPC9saXRlcmFsPiBhbmQgPGxpdGVyYWw+YjwvbGl0ZXJhbD4gc2hvdWxkIGFwcGVh ciBvbiB0aGUgaW5uZXIKKyAgICBzaWRlIG9mIGEgaGFzaCBqb2luOyBhIGNvbmZvcm1pbmcgcGxh biBtdXN0IGNvbnRhaW4gYXQgbGVhc3QgdHdvIGhhc2gKKyAgICBqb2lucywgb25lIG9mIHdoaWNo IGhhcyA8bGl0ZXJhbD5hPC9saXRlcmFsPiBhbmQgbm90aGluZyBlbHNlIG9uIHRoZQorICAgIGlu bmVyIHNpZGUsIGFuZCB0aGUgb3RoZXIgb2Ygd2hpY2ggaGFzIDxsaXRlcmFsPmI8L2xpdGVyYWw+ IGFuZCBub3RoaW5nCisgICAgZWxzZSBvbiB0aGUgaW5uZXIgc2lkZS4gT24gdGhlIG90aGVyIGhh bmQsCisgICAgPGxpdGVyYWw+SEFTSF9KT0lOKChhIGIpKTwvbGl0ZXJhbD4gbWVhbnMgdGhhdCB0 aGUgam9pbiBwcm9kdWN0IG9mCisgICAgPGxpdGVyYWw+YTwvbGl0ZXJhbD4gYW5kIDxsaXRlcmFs PmI8L2xpdGVyYWw+IHNob3VsZCBhcHBlYXIgdG9nZXRoZXIKKyAgICBvbiB0aGUgaW5uZXIgc2lk ZSBvZiBhIHNpbmdsZSBoYXNoIGpvaW4uCisgICA8L3BhcmE+CisKKyAgIDxwYXJhPgorICAgIE5v dGUgdGhhdCBqb2luIG1ldGhvZCBhZHZpY2UgaW1wbGllcyBhIG5lZ2F0aXZlIGpvaW4gb3JkZXIg Y29uc3RyYWludC4KKyAgICBTaW5jZSB0aGUgbmFtZWQgdGFibGUgb3IgdGFibGVzIG11c3QgYmUg b24gdGhlIGlubmVyIHNpZGUgb2YgYSBqb2luIHVzaW5nCisgICAgdGhlIHNwZWNpZmllZCBtZXRo b2QsIG5vbmUgb2YgdGhlbSBjYW4gYmUgdGhlIGRyaXZpbmcgdGFibGUgZm9yIHRoZSBlbnRpcmUK KyAgICBqb2luIHByb2JsZW0uIE1vcmVvdmVyLCBubyB0YWJsZSBpbnNpZGUgdGhlIHNldCBzaG91 bGQgYmUgam9pbmVkIHRvIGFueQorICAgIHRhYmxlIG91dHNpZGUgdGhlIHNldCB1bnRpbCBhbGwg dGFibGVzIHdpdGhpbiB0aGUgc2V0IGhhdmUgYmVlbiBqb2luZWQgdG8KKyAgICBlYWNoIG90aGVy LiBGb3IgZXhhbXBsZSwgaWYgdGhlIGFkdmljZSBzcGVjaWZpZXMKKyAgICA8bGl0ZXJhbD5IQVNI X0pPSU4oKGEgYikpPC9saXRlcmFsPiBhbmQgdGhlIHN5c3RlbSBiZWdpbnMgYnkgam9pbmluZyBl aXRoZXIKKyAgICBvZiB0aG9zZSB0YWJsZXMgdG8gc29tZSB0aGlyZCB0YWJsZSA8bGl0ZXJhbD5j PC9saXRlcmFsPiwgdGhlIHJlc3VsdGluZworICAgIHBsYW4gY291bGQgbmV2ZXIgYmUgY29tcGxp YW50IHdpdGggdGhlIHJlcXVlc3QgdG8gcHV0IGV4YWN0bHkgdGhvc2UgdHdvCisgICAgdGFibGVz IG9uIHRoZSBpbm5lciBzaWRlIG9mIGEgaGFzaCBqb2luLiBXaGVuIHVzaW5nIGJvdGggam9pbiBv cmRlciBhZHZpY2UKKyAgICBhbmQgam9pbiBtZXRob2QgYWR2aWNlIGZvciB0aGUgc2FtZSBxdWVy eSwgaXQgaXMgYSBnb29kIGlkZWEgdG8gbWFrZSBzdXJlCisgICAgdGhhdCB0aGV5IGRvIG5vdCBt YW5kYXRlIGluY29tcGF0aWJsZSBqb2luIG9yZGVycy4KKyAgIDwvcGFyYT4KKworICA8L3NlY3Qz PgorCisgIDxzZWN0MyBpZD0icGdwbGFuYWR2aWNlLXBhcnRpdGlvbndpc2UiPgorICA8dGl0bGU+ UGFydGl0aW9ud2lzZSBBZHZpY2U8L3RpdGxlPgorICAgPHN5bm9wc2lzPgorUEFSVElUSU9OV0lT RSg8cmVwbGFjZWFibGU+cGFydGl0aW9ud2lzZV9pdGVtPC9yZXBsYWNlYWJsZT4gWyAuLi4gXSkK KworPHBocmFzZT53aGVyZSA8cmVwbGFjZWFibGU+cGFydGl0aW9ud2lzZV9pdGVtPC9yZXBsYWNl YWJsZT4gaXM6PC9waHJhc2U+CisKK3sgPHJlcGxhY2VhYmxlPmFkdmljZV90YXJnZXQ8L3JlcGxh Y2VhYmxlPiB8CisoIDxyZXBsYWNlYWJsZT5hZHZpY2VfdGFyZ2V0PC9yZXBsYWNlYWJsZT4gWyAu Li4gXSApIH08L3N5bm9wc2lzPgorCisgICA8cGFyYT4KKyAgICBXaGVuIGFwcGxpZWQgdG8gYSBz aW5nbGUgdGFyZ2V0LCA8bGl0ZXJhbD5QQVJUSVRJT05XSVNFPC9saXRlcmFsPgorICAgIHNwZWNp ZmllcyB0aGF0IHRoZSBzcGVjaWZpZWQgdGFibGUgc2hvdWxkIG5vdCBiZSBwYXJ0IG9mIGFueSBw YXJ0aXRpb253aXNlCisgICAgam9pbi4gV2hlbiBhcHBsaWVkIHRvIGEgbGlzdCBvZiB0YXJnZXRz LCA8bGl0ZXJhbD5QQVJUSVRJT05XSVNFPC9saXRlcmFsPgorICAgIHNwZWNpZmllcyB0aGF0IGV4 YWN0bHkgdGhhdCBzZXQgb2YgdGFibGVzIHNob3VsZCBiZSBqb2luZWQgaW4KKyAgICBwYXJ0aXRp b253aXNlIGZhc2hpb24uIE5vdGUgdGhhdCwgcmVnYXJkbGVzcyBvZiB3aGF0IGFkdmljZSBpcyBz cGVjaWZpZWQsCisgICAgbm8gcGFydGl0aW9ud2lzZSBqb2lucyB3aWxsIGJlIHBvc3NpYmxlIGlm CisgICAgPGxpdGVyYWw+ZW5hYmxlX3BhcnRpdGlvbndpc2Vfam9pbiA9IG9mZjwvbGl0ZXJhbD4u CisgICA8L3BhcmE+CisKKyAgPC9zZWN0Mz4KKworICA8c2VjdDMgaWQ9InBncGxhbmFkdmljZS1z ZW1pam9pbi11bmlxdWUiPgorICA8dGl0bGU+U2VtaWpvaW4gVW5pcXVlbmVzcyBBZHZpY2U8L3Rp dGxlPgorICAgPHN5bm9wc2lzPgorU0VNSUpPSU5fVU5JUVVFKDxyZXBsYWNlYWJsZT5zal91bmlx dWVfaXRlbTwvcmVwbGFjZWFibGU+IFsgLi4uIF0pCitTRU1JSk9JTl9OT05fVU5JUVVFKDxyZXBs YWNlYWJsZT5zal91bmlxdWVfaXRlbTwvcmVwbGFjZWFibGU+IFsgLi4uIF0pCisKKzxwaHJhc2U+ d2hlcmUgPHJlcGxhY2VhYmxlPnNqX3VuaXF1ZV9pdGVtPC9yZXBsYWNlYWJsZT4gaXM6PC9waHJh c2U+CisKK3sgPHJlcGxhY2VhYmxlPmFkdmljZV90YXJnZXQ8L3JlcGxhY2VhYmxlPiB8CisoIDxy ZXBsYWNlYWJsZT5hZHZpY2VfdGFyZ2V0PC9yZXBsYWNlYWJsZT4gWyAuLi4gXSApIH08L3N5bm9w c2lzPgorCisgICA8cGFyYT4KKyAgICBUaGUgcGxhbm5lciBzb21ldGltZXMgaGFzIGEgY2hvaWNl IGJldHdlZW4gaW1wbGVtZW50aW5nIGEgc2VtaWpvaW4KKyAgICBkaXJlY3RseSBhbmQgaW1wbGVt ZW1udGluZyBhIHNlbWlqb2luIGJ5IG1ha2luZyB0aGUgbnVsbGFibGUgc2lkZSB1bmlxdWUKKyAg ICBhbmQgdGhlbiBwZXJmb3JtaW5nIGFuIGlubmVyIGpvaW4uIDxsaXRlcmFsPlNFTUlKT0lOX1VO SVFVRTwvbGl0ZXJhbD4KKyAgICBzcGVjaWZpZXMgdGhlIGxhdHRlciBzdHJhdGVneSwgd2hpbGUg PGxpdGVyYWw+U0VNSUpPSU5fTk9OX1VOSVFVRTwvbGl0ZXJhbD4KKyAgICBzcGVjaWZpZXMgdGhl IGZvcm1lciBzdHJhdGVneS4gSW4gZWl0aGVyIGNhc2UsIHRoZSBhcmd1bWVudCBpcyB0aGUgc2lu Z2xlCisgICAgdGFibGUgb3IgbGlzdCBvZiB0YWJsZXMgdGhhdCBhcHBlYXIgYmVuZWF0aCB0aGUg bnVsbGFibGUgc2lkZSBvZiB0aGUgam9pbi4KKyAgIDwvcGFyYT4KKworICA8L3NlY3QzPgorCisg IDxzZWN0MyBpZD0icGdwbGFuYWR2aWNlLXBhcmFsbGVsLXF1ZXJ5aiI+CisgIDx0aXRsZT5QYXJh bGxlbCBRdWVyeSBBZHZpY2U8L3RpdGxlPgorICAgPHN5bm9wc2lzPgorR0FUSEVSKDxyZXBsYWNl YWJsZT5nYXRoZXJfaXRlbTwvcmVwbGFjZWFibGU+IFsgLi4uIF0pCitHQVRIRVJfTUVSR0UoPHJl cGxhY2VhYmxlPmdhdGhlcl9pdGVtPC9yZXBsYWNlYWJsZT4gWyAuLi4gXSkKK05PX0dBVEhFUig8 cmVwbGFjZWFibGU+YWR2aWNlX3RhcmdldDwvcmVwbGFjZWFibGU+IFsgLi4uIF0pCisKKzxwaHJh c2U+d2hlcmUgPHJlcGxhY2VhYmxlPmdhdGhlcl9pdGVtPC9yZXBsYWNlYWJsZT4gaXM6PC9waHJh c2U+CisKK3sgPHJlcGxhY2VhYmxlPmFkdmljZV90YXJnZXQ8L3JlcGxhY2VhYmxlPiB8CisoIDxy ZXBsYWNlYWJsZT5hZHZpY2VfdGFyZ2V0PC9yZXBsYWNlYWJsZT4gWyAuLi4gXSApIH08L3N5bm9w c2lzPgorCisgICA8cGFyYT4KKyAgICA8bGl0ZXJhbD5HQVRIRVI8L2xpdGVyYWw+IG9yIDxsaXRl cmFsPkdBVEhFUl9NRVJHRTwvbGl0ZXJhbD4gc3BlY2lmaWVzCisgICAgdGhhdCA8bGl0ZXJhbD5H YXRoZXI8L2xpdGVyYWw+IG9yIDxsaXRlcmFsPkdhdGhlciBNZXJnZTwvbGl0ZXJhbD4sCisgICAg cmVzcGVjdGl2ZWx5LCBzaG91bGQgYmUgcGxhY2VkIG9uIHRvcCBvZiB0aGUgc2luZ2xlIHRhYmxl IHNwZWNpZmllZCBhcworICAgIGEgdGFyZ2V0LCBvciBvbiB0b3Agb2YgdGhlIGpvaW4gYmV0d2Vl biB0aGUgbGlzdCBvZiB0YWJsZXMgc3BlY2lmaWVkIGFzCisgICAgYSB0YXJnZXQuIFRoaXMgbWVh bnMgdGhhdCA8bGl0ZXJhbD5HQVRIRVIoYSBiIGMpPC9saXRlcmFsPiBpcyBhIHJlcXVlc3QKKyAg ICBmb3IgdGhyZWUgZGlmZmVyZW50IDxsaXRlcmFsPkdhdGhlcjwvbGl0ZXJhbD4gbm9kZXMsIHdo aWxlCisgICAgPGxpdGVyYWw+R0FUSEVSKChhIGIgYykpPC9saXRlcmFsPiBpcyBhIHJlcXVlc3Qg Zm9yIGEgc2luZ2xlCisgICAgPGxpdGVyYWw+R2F0aGVyPC9saXRlcmFsPiBub2RlIG9uIHRvcCBv ZiBhIDMtd2F5IGpvaW4uCisgICA8L3BhcmE+CisKKyAgIDxwYXJhPgorICAgIDxsaXRlcmFsPk5P X0dBVEhFUjwvbGl0ZXJhbD4gc3BlY2lmaWVzIHRoYXQgbm9uZSBvZiB0aGUgdGFibGVzIGdpdmVu CisgICAgYXMgYXJndW1lbnRzIHNob3VsZCBhcHBlYXIgYmVuZWF0aCBhIDxsaXRlcmFsPkdhdGhl cjwvbGl0ZXJhbD4gb3IKKyAgICA8bGl0ZXJhbD5HYXRoZXIgTWVyZ2U8L2xpdGVyYWw+IG5vZGUu CisgICA8L3BhcmE+CisKKyAgPC9zZWN0Mz4KKworIDwvc2VjdDI+CisKKyA8c2VjdDIgaWQ9InBn cGxhbmFkdmljZS1mZWVkYmFjayI+CisgIDx0aXRsZT5BZHZpY2UgRmVlZGJhY2s8L3RpdGxlPgor CisgIDxwYXJhPgorICAgPGxpdGVyYWw+RVhQTEFJTjwvbGl0ZXJhbD4gcHJvdmlkZXMgZmVlZGJh Y2sgb24gd2hldGhlciBzdXBwbGllZCBhZHZpY2Ugd2FzCisgICBzdWNjZXNzZnVsbHkgYXBwbGll ZCB0byB0aGUgcXVlcnkgaW4gdGhlIGZvcm0gb2YgYSBjb21tZW50IG9uIGVhY2ggcGllY2UKKyAg IG9mIHN1cHBsaWVkIGFkdmljZS4gRm9yIGV4YW1wbGU6CisgIDwvcGFyYT4KKworPHByb2dyYW1s aXN0aW5nPgorU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdoYXNoX2pvaW4oZiBnKSBqb2lu X29yZGVyKGYgZykgaW5kZXhfc2NhbihmIG5vX3N1Y2hfaW5kZXgpJzsKK1NFVAorcmhhYXM9IyBF WFBMQUlOIChDT1NUUyBPRkYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBTRUxFQ1QgKiBGUk9NIGpvX2ZhY3QgZgorICAgICAgICBMRUZUIEpPSU4g am9fZGltMSBkMSBPTiBmLmRpbTFfaWQgPSBkMS5pZAorICAgICAgICBMRUZUIEpPSU4gam9fZGlt MiBkMiBPTiBmLmRpbTJfaWQgPSBkMi5pZAorICAgICAgICBXSEVSRSB2YWwxID0gMSBBTkQgdmFs MiA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTgorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIEhhc2ggSm9pbgorICAgSGFzaCBDb25kOiAoKGQxLmlkID0gZi5kaW0xX2lkKSBBTkQgKGQy LmlkID0gZi5kaW0yX2lkKSkKKyAgIC0+ICBOZXN0ZWQgTG9vcAorICAgICAgICAgLT4gIFNlcSBT Y2FuIG9uIGpvX2RpbTIgZDIKKyAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDIgPSAxKQorICAg ICAgICAgLT4gIE1hdGVyaWFsaXplCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9f ZGltMSBkMQorICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMSA9IDEpCisgICAtPiAg SGFzaAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2ZhY3QgZgorIFN1cHBsaWVkIFBsYW4g QWR2aWNlOgorICAgSU5ERVhfU0NBTihmIG5vX3N1Y2hfaW5kZXgpIC8qIG1hdGNoZWQsIGluYXBw bGljYWJsZSwgZmFpbGVkICovCisgICBIQVNIX0pPSU4oZikgLyogbWF0Y2hlZCAqLworICAgSEFT SF9KT0lOKGcpIC8qIG5vdCBtYXRjaGVkICovCisgICBKT0lOX09SREVSKGYgZykgLyogcGFydGlh bGx5IG1hdGNoZWQgKi8KKzwvcHJvZ3JhbWxpc3Rpbmc+CisKKyAgPHBhcmE+CisgICBGb3IgdGhp cyBxdWVyeSwgPGxpdGVyYWw+ZjwvbGl0ZXJhbD4gaXMgYSB2YWxpZCBhZHZpY2UgdGFyZ2V0LCBi dXQKKyAgIDxsaXRlcmFsPmc8L2xpdGVyYWw+IGlzIG5vdC4gVGhlcmVmb3JlLCB0aGUgcmVxdWVz dCB0byBwbGFjZQorICAgPGxpdGVyYWw+ZjwvbGl0ZXJhbD4gb24gdGhlIGlubmVyIHNpZGUgb2Yg YSBoYXNoIGpvaW4gaXMgbGlzdGVkIGFzCisgICA8bGl0ZXJhbD5tYXRjaGVkPC9saXRlcmFsPiwg YnV0IHRoZSByZXF1ZXN0IHRvIHBsYWNlIDxsaXRlcmFsPmc8L2xpdGVyYWw+CisgICBvbiB0aGUg aW5uZXIgc2lkZSBvZiBhIGhhc2ggam9pbiBpcyBsaXN0ZWQgYXMKKyAgIDxsaXRlcmFsPm5vdCBt YXRjaGVkPC9saXRlcmFsPi4gVGhlIDxsaXRlcmFsPkpPSU5fT1JERVI8L2xpdGVyYWw+IGFkdmlj ZQorICAgdGFnIGludm9sdmVzIG9uZSB2YWxpZCB0YXJnZXQgYW5kIG9uZSBpbnZhbGQgdGFyZ2V0 LCBhbmQgc28gaXMgbGlzdGVkIGFzCisgICA8bGl0ZXJhbD5wYXJ0aWFsbHkgbWF0Y2hlZDwvbGl0 ZXJhbD4uIE5vdGUgdGhhdAorICAgPGxpdGVyYWw+SEFTSF9KT0lOKGYgZyk8L2xpdGVyYWw+IGlz IGFjdHVhbGx5IGEgcmVxdWVzdCBmb3IgdHdvIGxvZ2ljYWxseQorICAgc2VwYXJhdGUgYmVoYXZp b3JzLCB3aGVyZWFzIDxsaXRlcmFsPkpPSU5fT1JERVIoZiBnKTwvbGl0ZXJhbD4gaXMgYSBzaW5n bGUKKyAgIHJlcXVlc3QuIFdoZW4gcHJvdmlkaW5nIGFkdmljZSBmZWVkYmFjaywgPGxpdGVyYWw+ RVhQTEFJTjwvbGl0ZXJhbD4gc2hvd3MKKyAgIGVhY2ggbG9naWNhbCByZXF1ZXN0IHNlcGFyYXRl bHksIHRvZ2V0aGVyIHdpdGggYWxsIHRoZSBmZWVkYmFjayBhcHBsaWNhYmxlCisgICB0byB0aGF0 IHJlcXVlc3QgdHlwZS4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgQWR2aWNlIGZlZWRiYWNr IGNhbiBpbmNsdWRlIGFueSBvZiB0aGUgZm9sbGxvd2luZzoKKyAgPC9wYXJhPgorCisgIDxpdGVt aXplZGxpc3Q+CisKKyAgIDxsaXN0aXRlbT4KKyAgICA8cGFyYT4KKyAgICAgPGxpdGVyYWw+bWF0 Y2hlZDwvbGl0ZXJhbD4gbWVhbnMgdGhhdCBhbGwgb2YgdGhlIHNwZWNpZmllZCBhZHZpY2UgdGFy Z2V0cworICAgICB3ZXJlIG9ic2VydmVkIGR1cmluZyBxdWVyeSBwbGFubmluZy4KKyAgICA8L3Bh cmE+CisgICA8L2xpc3RpdGVtPgorCisgICA8bGlzdGl0ZW0+CisgICAgPHBhcmE+CisgICAgIDxs aXRlcmFsPnBhcnRpYWxseSBtYXRjaGVkPC9saXRlcmFsPiBtZWFucyB0aGF0IHNvbWUgYnV0IG5v dCBhbGwgb2YgdGhlCisgICAgIHNwZWNpZmllZCBhZHZpY2UgdGFyZ2V0cyB3ZXJlIG9ic2VydmVk IGR1cmluZyBxdWVyeSBwbGFubmluZy4KKyAgICA8L3BhcmE+CisgICA8L2xpc3RpdGVtPgorCisg ICA8bGlzdGl0ZW0+CisgICAgPHBhcmE+CisgICAgIDxsaXRlcmFsPm5vdCBtYXRjaGVkPC9saXRl cmFsPiBtZWFucyB0aGF0IG5vbmUgb2YgdGhlCisgICAgIHNwZWNpZmllZCBhZHZpY2UgdGFyZ2V0 cyB3ZXJlIG9ic2VydmVkIGR1cmluZyBxdWVyeSBwbGFubmluZy4gVGhpcyBtYXkKKyAgICAgaGFw cGVuIGlmIHRoZSBhZHZpY2Ugc2ltcGx5IGRvZXNuJ3QgbWF0Y2ggdGhlIHF1ZXJ5LCBvciBpdCBt YXkKKyAgICAgb2NjdXIgaWYgdGhlIHJlbGV2YW50IHBvcnRpb24gb2YgdGhlIHF1ZXJ5IHdhcyBu b3QgcGxhbm5lZCwgcGVyaGFwcworICAgICBiZWNhdXNlIGl0IHdhcyBnYXRlZCBieSBhIGNvbmRp dGlvbiB0aGF0IHdhcyBzaW1wbGlmaWVkIHRvIGNvbnN0YW50IGZhbHNlLgorICAgIDwvcGFyYT4K KyAgIDwvbGlzdGl0ZW0+CisKKyAgIDxsaXN0aXRlbT4KKyAgICA8cGFyYT4KKyAgICAgPGxpdGVy YWw+aW5hcHBsaWNhYmxlPC9saXRlcmFsPiBtZWFucyB0aGF0IHRoZSBhZHZpY2UgdGFnIGNvdWxk IG5vdAorICAgICBiZSBhcHBsaWVkIHRvIHRoZSBhZHZpY2UgdGFyZ2V0cyBmb3Igc29tZSByZWFz b24uIEZvciBleGFtcGxlLCB0aGlzIHdpbGwKKyAgICAgaGFwcGVuIGlmIHRoZSB1c2Ugb2YgYSBu b25leGlzdGVudCBpbmRleCBpcyByZXF1ZXN0ZWQsIG9yIGlmIGFuIGF0dGVtcHQKKyAgICAgaXMg bWFkZSB0byBjb250cm9sIHNlbWlqb2luIHVuaXF1bmVzcyBmb3IgYSBub24tc2VtaWpvaW4uCisg ICAgPC9wYXJhPgorICAgPC9saXN0aXRlbT4KKworICAgPGxpc3RpdGVtPgorICAgIDxwYXJhPgor ICAgICA8bGl0ZXJhbD5jb25mbGljdGluZzwvbGl0ZXJhbD4gbWVhbnMgdGhhdCB0d28gb3IgbW9y ZSBwaWVjZXMgb2YgYWR2aWNlCisgICAgIHJlcXVlc3QgaW5jb21wYXRpYmxlIGJlaGF2aW9ycy4g Rm9yIGV4YW1wbGUsIGlmIHlvdSBhZHZpc2UgYSBzZXF1ZW50aWFsCisgICAgIHNjYW4gYW5kIGFu IGluZGV4IHNjYW4gZm9yIHRoZSBzYW1lIHRhYmxlLCBib3RoIHJlcXVlc3RzIHdpbGwgYmUgZmxh Z2dlZAorICAgICBhcyBjb25mbGljdGluZy4gVGhpcyBhbHNvIGNvbW1vbmx5IGhhcHBlbnMgaWYg am9pbiBtZXRob2QgYWR2aWNlIG9yCisgICAgIHNlbWlqb2luIHVuaXF1ZW5lc3MgYWR2aWNlIGlt cGxpZXMgYSBqb2luIG9yZGVyIGluY29tcGF0aWJsZSB3aXRoIHRoZQorICAgICBvbmUgZXhwbGlj aXRseSBzcGVjaWZpZWQ7IHNlZQorICAgICA8eHJlZiBsaW5rZW5kPSJwZ3BsYW5hZHZpY2Utam9p bi1tZXRob2QiIC8+LgorICAgIDwvcGFyYT4KKyAgIDwvbGlzdGl0ZW0+CisKKyAgIDxsaXN0aXRl bT4KKyAgICA8cGFyYT4KKyAgICAgPGxpdGVyYWw+ZmFpbGVkPC9saXRlcmFsPiBtZWFucyB0aGF0 IHF1ZXJ5IHBsYW4gZG9lcyBub3QgY29tcGx5IHdpdGgKKyAgICAgdGhlIGFkdmljZS4gVGhpcyBv bmx5IG9jY3VycyBmb3IgZW50cmllcyB0aGF0IGFyZSBhbHNvIHNob3duIGFzCisgICAgIDxsaXRl cmFsPm1hdGNoZWQ8L2xpdGVyYWw+LiBJdCBmcmVxdWVudGx5IG9jY3VycyBmb3IgZW50cmllcyB0 aGF0IGFyZQorICAgICBhbHNvIG1hcmtlZCBhcyA8bGl0ZXJhbD5jb25mbGljdGluZzwvbGl0ZXJh bD4gb3IKKyAgICAgPGxpdGVyYWw+aW5hcHBsaWNhYmxlPC9saXRlcmFsPi4gSG93ZXZlciwgaXQg Y2FuIGFsc28gb2NjdXIgd2hlbiB0aGUKKyAgICAgYWR2aWNlIGlzIHZhbGlkIGluc29mYXIgYXMg PGxpdGVyYWw+cGdfcGxhbl9hZHZpY2U8L2xpdGVyYWw+IGlzIGFibGUKKyAgICAgdG8gZGV0ZXJt aW5lLCBidXQgdGhlIHBsYW5uZXIgaXMgbm90IGFibGUgdG8gY29uc3RydWN0IGEgbGVnYWwKKyAg ICAgcGxhbiB0aGF0IGNhbiBjb21wbHkgd2l0aCB0aGUgYWR2aWNlLiBJdCBpcyBpbXBvcnRhbnQg dG8gbm90ZSB0aGF0IHRoZQorICAgICBzYW5pdHkgY2hlY2tzIHBlcmZvcm1lZCBieSA8bGl0ZXJh bD5wZ19wbGFuX2FkdmljZTwvbGl0ZXJhbD4gYXJlIGZhaXJseQorICAgICBzdXBlcmZpY2lhbCBh bmQgZm9jdXNlZCBtb3N0bHkgb24gbG9va2luZyBmb3IgbG9naWNhbCBpbmNvbnNpc3RlbmNpZXMg aW4KKyAgICAgdGhlIGFkdmljZSBzdHJpbmc7IG9ubHkgdGhlIHBsYW5uZXIga25vd3Mgd2hhdCB3 aWxsIGFjdHVhbGx5IHdvcmsuCisgICAgPC9wYXJhPgorICAgPC9saXN0aXRlbT4KKworICA8L2l0 ZW1pemVkbGlzdD4KKworICA8cGFyYT4KKyAgIEFsbCBhZHZpY2Ugc2hvdWxkIGJlIG1hcmtlZCBh cyBleGFjdGx5IG9uZSBvZiA8bGl0ZXJhbD5tYXRjaGVkPC9saXRlcmFsPiwKKyAgIDxsaXRlcmFs PnBhcnRpYWxseSBtYXRjaGVkPC9saXRlcmFsPiwgb3IgPGxpdGVyYWw+bm90IG1hdGNoZWQ8L2xp dGVyYWw+LgorICA8L3BhcmE+CisKKyA8L3NlY3QyPgorCisgPHNlY3QyIGlkPSJwZ3BsYW5hZHZp Y2UtY29sbGVjdG9yIj4KKyAgPHRpdGxlPkFkdmljZSBDb2xsZWN0b3JzPC90aXRsZT4KKworICA8 cGFyYT4KKyAgIDxsaXRlcmFsPnBnX3BsYW5fYWR2aWNlPC9saXRlcmFsPiBjYW4gYmUgY29uZmln dXJlZCB0byBhdXRvbWF0aWNhbGx5CisgICBnZW5lcmF0ZSBhZHZpY2UgZXZlcnkgdGltZSBhIHF1 ZXJ5IGlzIHBsYW5uZWQgYW5kIHN0b3JlIHRoZSBxdWVyeSBhbmQKKyAgIHRoZSBnZW5lcmF0ZWQg YWR2aWNlIHN0cmluZyBlaXRoZXIgaW4gbG9jYWwgb3Igc2hhcmVkIG1lbW9yeS4KKyAgPC9wYXJh PgorCisgIDxwYXJhPgorICAgVG8gZW5hYmxlIGEgY29sbGVjdG9yLCB5b3UgbXVzdCBmaXJzdCBz ZXQgYSBjb2xsZWN0aW9uIGxpbWl0LiBXaGVuIHRoZQorICAgbnVtYmVyIG9mIHF1ZXJpZXMgZm9y IHdoaWNoIGFkdmljZSBoYXMgYmVlbiBzdG9yZWQgZXhjZWVkcyB0aGUgY29sbGVjdGlvbgorICAg bGltaXQsIHRoZSBvbGRlc3QgcXVlcmllcyBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgYWR2aWNlIHdp bGwgYmUgZGlzY2FyZGVkLgorICAgVGhlbiwgeW91IG11c3QgYWRqdXN0IGEgc2VwYXJhdGUgc2V0 dGluZyB0byBhY3R1YWxseSBlbmFibGUgYWR2aWNlCisgICBjb2xsZWN0aW9uLiBGb3IgdGhlIGxv Y2FsIGNvbGxlY3Rvciwgc2V0IHRoZSBjb2xsZWN0aW9uIGxpbWl0IGJ5IGNvbmZpZ3VyaW5nCisg ICA8bGl0ZXJhbD5wZ19wbGFuX2FkdmljZS5sb2NhbF9jb2xsZWN0aW9uX2xpbWl0PC9saXRlcmFs PiB0byBhIHZhbHVlCisgICBncmVhdGVyIHRoYW4gemVybywgYW5kIHRoZW4gZW5hYmxlIGFkdmlj ZSBjb2xsZWN0aW9uIGJ5IHNldHRpbmcKKyAgIDxsaXRlcmFsPnBnX3BsYW5fYWR2aWNlLmxvY2Fs X2NvbGxlY3RvciA9IHRydWU8L2xpdGVyYWw+LiBGb3IgdGhlIHNoYXJlZAorICAgY29sbGVjdG9y LCB0aGUgcHJvY2VkdXJlIGlzIHRoZSBzYW1lLCBleGNlcHQgdGhhdCB0aGUgbmFtZXMgb2YgdGhl IHNldHRpbmdzCisgICBhcmUgPGxpdGVyYWw+cGdfcGxhbl9hZHZpY2Uuc2hhcmVkX2NvbGxlY3Rp b25fbGltaXQ8L2xpdGVyYWw+IGFuZAorICAgPGxpdGVyYWw+cGdfcGxhbl9hZHZpY2Uuc2hhcmVk X2NvbGxlY3RvcjwvbGl0ZXJhbD4uIE5vdGUgdGhhdCB0aGUgbG9jYWwKKyAgIGNvbGxlY3RvciBz dG9yZXMgcXVlcnkgdGV4dHMgYW5kIGFkdmljZSBzdHJpbmdzIGluIGJhY2tlbmQtbG9jYWwgbWVt b3J5LAorICAgYW5kIHRoZSBzaGFyZWQgY29sbGVjdG9yIGRvZXMgdGhlIHNhbWUgaW4gZHluYW1p YyBzaGFyZWQgbWVtb3J5LCBzbworICAgY29uZmlndXJpbmcgbGFyZ2UgbGltaXRzIG1heSByZXN1 bHQgaW4gY29uc2lkZXJhYmxlIG1lbW9yeSBjb25zdW1wdGlvbi4KKyAgPC9wYXJhPgorCisgIDxw YXJhPgorICAgT25jZSB0aGUgY29sbGVjdG9yIGlzIGVuYWJsZWQsIHlvdSBjYW4gcnVuIGFueSBx dWVyaWVzIGZvciB3aGljaCB5b3Ugd2lzaAorICAgdG8gc2VlIHRoZSBnZW5lcmF0ZWQgcGxhbiBh ZHZpY2UuIFRoZW4sIHlvdSBjYW4gZXhhbWluZSB3aGF0IGhhcyBiZWVuCisgICBjb2xsZWN0ZWQg dXNpbmcgd2hpY2hldmVyIG9mCisgICA8bGl0ZXJhbD5TRUxFQ1QgKiBGUk9NIHBnX2dldF9jb2xs ZWN0ZWRfbG9jYWxfYWR2aWNlKCk8L2xpdGVyYWw+IG9yCisgICA8bGl0ZXJhbD5TRUxFQ1QgKiBG Uk9NIHBnX2dldF9jb2xsZWN0ZWRfc2hhcmVkX2FkdmljZSgpPC9saXRlcmFsPgorICAgY29ycmVz cG9uZHMgdG8gdGhlIGNvbGxlY3RvciB5b3UgZW5hYmxlZC4gVG8gZGlzY2FyZCB0aGUgY29sbGVj dGVkIGFkdmljZQorICAgYW5kIHJlbGVhc2UgbWVtb3J5LCB5b3UgY2FuIGNhbGwKKyAgIDxsaXRl cmFsPnBnX2NsZWFyX2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UoKTwvbGl0ZXJhbD4KKyAgIG9yIDxs aXRlcmFsPnBnX2NsZWFyX2NvbGxlY3RlZF9zaGFyZWRfYWR2aWNlKCk8L2xpdGVyYWw+LgorICA8 L3BhcmE+CisKKyAgPHBhcmE+CisgICBJbiBhZGRpdGlvbiB0byB0aGUgcXVlcnkgdGV4dHMgYW4g YWR2aWNlIHN0cmluZ3MsIHRoZSBhZHZpY2UgY29sbGVjdG9ycworICAgd2lsbCBhbHNvIHN0b3Jl IHRoZSBPSUQgb2YgdGhlIHJvbGUgdGhhdCBjYXVzZWQgdGhlIHF1ZXJ5IHRvIGJlIHBsYW5uZWQs CisgICB0aGUgT0lEIG9mIHRoZSBkYXRhYmFzZSBpbiB3aGljaCB0aGUgcXVlcnkgd2FzIHBsYW5u ZWQsIHRoZSBxdWVyeSBJRCwKKyAgIGFuZCB0aGUgdGltZSBhdCB3aGljaCB0aGUgY29sbGVjdGlv biBvY2N1cnJlZC4gVGhpcyBtb2R1bGUgZG9lcyBub3QKKyAgIGF1dG9tYXRpY2FsbHkgZW5hYmxl IHF1ZXJ5IElEIGNvbXB1dGF0aW9uOyB0aGVyZWZvcmUsIGlmIHlvdSB3YW50IHRoZQorICAgcXVl cnkgSUQgdmFsdWUgdG8gYmUgcG9wdWxhdGVkIGluIGNvbGxlY3RlZCBhZHZpY2UsIGJlIHN1cmUg dG8gY29uZmlndXJlCisgICA8bGl0ZXJhbD5lbmFibGVfcXVlcnlfaWQgPSBvbjwvbGl0ZXJhbD4u IE90aGVyd2lzZSwgdGhlIHF1ZXJ5IElEIG1heQorICAgYWx3YXlzIHNob3cgYXMgPGxpdGVyYWw+ MDwvbGl0ZXJhbD4uCisgIDwvcGFyYT4KKworIDwvc2VjdDI+CisKKyA8c2VjdDIgaWQ9InBncGxh bmFkdmljZS1mdW5jdGlvbnMiPgorICA8dGl0bGU+RnVuY3Rpb25zPC90aXRsZT4KKworICA8cGFy YT4KKyAgIE5vdGUgdGhhdCB0aGVzZSBmdW5jdGlvbnMgd2lsbCBvbmx5IGJlIGF2YWlsYWJsZSBp ZiB0aGUKKyAgIDxsaXRlcmFsPnBnX3BsYW5fYWR2aWNlPC9saXRlcmFsPiBleHRlbnNpb24gaGFz IGJlZW4gaW5zdGFsbGVkIGluIHRoZQorICAgY3VycmVudCBkYXRhYmFzZSwgd2hpY2ggaXMgbm90 IG1hbmRhdG9yeSwgc2luY2UgbXVjaCBvZiB0aGUgZnVuY3Rpb25hbGl0eQorICAgb2YgdGhpcyBt b2R1bGUgY2FuIGJlIHVzZWQgd2l0aG91dCBpbnN0YWxsaW5nIHRoZSBleHRlbnNpb24uCisgIDwv cGFyYT4KKworICA8dmFyaWFibGVsaXN0PgorCisgICA8dmFybGlzdGVudHJ5PgorICAgIDx0ZXJt PgorICAgICA8ZnVuY3Rpb24+cGdfY2xlYXJfY29sbGVjdGVkX2xvY2FsX2FkdmljZSgpIHJldHVy bnMgdm9pZDwvZnVuY3Rpb24+CisgICAgIDxpbmRleHRlcm0+CisgICAgICA8cHJpbWFyeT5wZ19j bGVhcl9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlPC9wcmltYXJ5PgorICAgICA8L2luZGV4dGVybT4K KyAgICA8L3Rlcm0+CisKKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgUmVtb3Zl cyBhbGwgY29sbGVjdGVkIHF1ZXJ5IHRleHRzIGFuZCBhZHZpY2Ugc3RyaW5ncyBmcm9tIGJhY2tl bmQtbG9jYWwKKyAgICAgIG1lbW9yeS4KKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+Cisg ICA8L3Zhcmxpc3RlbnRyeT4KKworICAgPHZhcmxpc3RlbnRyeT4KKyAgICA8dGVybT4KKyAgICAg PGZ1bmN0aW9uPnBnX2dldF9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlKCkgcmV0dXJucyBzZXRvZiAo aWQgYmlnaW50LAorICAgICAgICB1c2VyaWQgb2lkLCBkYmlkIG9pZCwgcXVlcnlpZCBiaWdpbnQs IGNvbGxlY3Rpb25fdGltZSB0aW1lc3RhbXB0eiwKKyAgICAgICAgcXVlcnkgdGV4dCwgYWR2aWNl IHRleHQpPC9mdW5jdGlvbj4KKyAgICAgPGluZGV4dGVybT4KKyAgICAgIDxwcmltYXJ5PnBnX2dl dF9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlPC9wcmltYXJ5PgorICAgICA8L2luZGV4dGVybT4KKyAg ICA8L3Rlcm0+CisKKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgUmV0dXJucyBh bGwgcXVlcnkgdGV4dHMgYW5kIGFkdmljZSBzdHJpbmdzIHN0b3JlZCBpbiB0aGUgbG9jYWwKKyAg ICAgIDxsaW5rIGxpbmtlbmQ9InBncGxhbmFkdmljZS1jb2xsZWN0b3IiPmFkdmljZSBjb2xsZWN0 b3I8L2xpbms+LgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVu dHJ5PgorCisgICA8dmFybGlzdGVudHJ5PgorICAgIDx0ZXJtPgorICAgICA8ZnVuY3Rpb24+cGdf Y2xlYXJfY29sbGVjdGVkX3NoYXJlZF9hZHZpY2UoKSByZXR1cm5zIHZvaWQ8L2Z1bmN0aW9uPgor ICAgICA8aW5kZXh0ZXJtPgorICAgICAgPHByaW1hcnk+cGdfY2xlYXJfY29sbGVjdGVkX3NoYXJl ZF9hZHZpY2U8L3ByaW1hcnk+CisgICAgIDwvaW5kZXh0ZXJtPgorICAgIDwvdGVybT4KKworICAg IDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBSZW1vdmVzIGFsbCBjb2xsZWN0ZWQgcXVl cnkgdGV4dHMgYW5kIGFkdmljZSBzdHJpbmdzIGZyb20gc2hhcmVkCisgICAgICBtZW1vcnkuCisg ICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisKKyAgIDx2 YXJsaXN0ZW50cnk+CisgICAgPHRlcm0+CisgICAgIDxmdW5jdGlvbj5wZ19nZXRfY29sbGVjdGVk X3NoYXJlZF9hZHZpY2UoKSByZXR1cm5zIHNldG9mIChpZCBiaWdpbnQsCisgICAgICAgIHVzZXJp ZCBvaWQsIGRiaWQgb2lkLCBxdWVyeWlkIGJpZ2ludCwgY29sbGVjdGlvbl90aW1lIHRpbWVzdGFt cHR6LAorICAgICAgICBxdWVyeSB0ZXh0LCBhZHZpY2UgdGV4dCk8L2Z1bmN0aW9uPgorICAgICA8 aW5kZXh0ZXJtPgorICAgICAgPHByaW1hcnk+cGdfZ2V0X2NvbGxlY3RlZF9zaGFyZWRfYWR2aWNl PC9wcmltYXJ5PgorICAgICA8L2luZGV4dGVybT4KKyAgICA8L3Rlcm0+CisKKyAgICA8bGlzdGl0 ZW0+CisgICAgIDxwYXJhPgorICAgICAgUmV0dXJucyBhbGwgcXVlcnkgdGV4dHMgYW5kIGFkdmlj ZSBzdHJpbmdzIHN0b3JlZCBpbiB0aGUgc2hhcmVkCisgICAgICA8bGluayBsaW5rZW5kPSJwZ3Bs YW5hZHZpY2UtY29sbGVjdG9yIj5hZHZpY2UgY29sbGVjdG9yPC9saW5rPi4KKyAgICAgPC9wYXJh PgorICAgIDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRyeT4KKworICA8L3ZhcmlhYmxlbGlz dD4KKworIDwvc2VjdDI+CisKKyA8c2VjdDIgaWQ9InBncGxhbmFkdmljZS1jb25maWctcGFyYW1z Ij4KKyAgPHRpdGxlPkNvbmZpZ3VyYXRpb24gUGFyYW1ldGVyczwvdGl0bGU+CisKKyAgPHZhcmlh YmxlbGlzdD4KKworICAgPHZhcmxpc3RlbnRyeT4KKyAgICA8dGVybT4KKyAgICAgPHZhcm5hbWU+ cGdfcGxhbl9hZHZpY2UuYWR2aWNlPC92YXJuYW1lPiAoPHR5cGU+c3RyaW5nPC90eXBlPikKKyAg ICAgPGluZGV4dGVybT4KKyAgICAgIDxwcmltYXJ5Pjx2YXJuYW1lPnBnX3BsYW5fYWR2aWNlLmFk dmljZTwvdmFybmFtZT4gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXI8L3ByaW1hcnk+CisgICAgIDwv aW5kZXh0ZXJtPgorICAgIDwvdGVybT4KKworICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+Cisg ICAgICA8dmFybmFtZT5wZ19wbGFuX2FkdmljZS5hZHZpY2U8L3Zhcm5hbWU+IGlzIGFuIGFkdmlj ZSBzdHJpbmcgdG8gYmUKKyAgICAgIHVzZWQgZHVyaW5nIHF1ZXJ5IHBsYW5uaW5nLgorICAgICA8 L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCisgICA8dmFybGlz dGVudHJ5PgorICAgIDx0ZXJtPgorICAgICA8dmFybmFtZT5wZ19wbGFuX2FkdmljZS5hbHdheXNf ZXhwbGFpbl9zdXBwbGllZF9hZHZpY2U8L3Zhcm5hbWU+ICg8dHlwZT5ib29sZWFuPC90eXBlPikK KyAgICAgPGluZGV4dGVybT4KKyAgICAgIDxwcmltYXJ5Pjx2YXJuYW1lPnBnX3BsYW5fYWR2aWNl LmFsd2F5c19leHBsYWluX3N1cHBsaWVkX2FkdmljZSA8L3Zhcm5hbWU+IGNvbmZpZ3VyYXRpb24g cGFyYW1ldGVyPC9wcmltYXJ5PgorICAgICA8L2luZGV4dGVybT4KKyAgICA8L3Rlcm0+CisKKyAg ICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgPHZhcm5hbWU+cGdfcGxhbl9hZHZpY2Uu YWx3YXlzX2V4cGxhaW5fc3VwcGxpZWRfYWR2aWNlPC92YXJuYW1lPiBjYXVzZXMKKyAgICAgIDxs aXRlcmFsPkVYUExBSU48L2xpdGVyYWw+IHRvIGFsd2F5cyBzaG93IGFueSBzdXBwbGllZCBhZHZp Y2UgYW5kIHRoZQorICAgICAgYXNzb2NpYXRlZAorICAgICAgPGxpbmsgbGlua2VuZD0icGdwbGFu YWR2aWNlLWZlZWRiYWNrIj5hZHZpY2UgZmVlZGJhY2s8L2xpbms+LgorICAgICAgVGhlIGRlZmF1 bHQgdmFsdWUgaXMgPGxpdGVyYWw+dHJ1ZTwvbGl0ZXJhbD4uIElmIHNldCB0bworICAgICAgPGxp dGVyYWw+ZmFsc2U8L2xpdGVyYWw+LCB0aGlzIGluZm9ybWF0aW9uIHdpbGwgYmUgZGlzcGxheWVk IG9ubHkgd2hlbgorICAgICAgPGxpdGVyYWw+RVhQTEFJTiAoUExBTl9BRFZJQ0UpPC9saXRlcmFs PiBpcyB1c2VkLgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVu dHJ5PgorCisgICA8dmFybGlzdGVudHJ5PgorICAgIDx0ZXJtPgorICAgICA8dmFybmFtZT5wZ19w bGFuX2FkdmljZS5hbHdheXNfc3RvcmVfYWR2aWNlX2RldGFpbHM8L3Zhcm5hbWU+ICg8dHlwZT5i b29sZWFuPC90eXBlPikKKyAgICAgPGluZGV4dGVybT4KKyAgICAgIDxwcmltYXJ5Pjx2YXJuYW1l PnBnX3BsYW5fYWR2aWNlLmFsd2F5c19zdG9yZV9hZHZpY2VfZGV0YWlscyA8L3Zhcm5hbWU+IGNv bmZpZ3VyYXRpb24gcGFyYW1ldGVyPC9wcmltYXJ5PgorICAgICA8L2luZGV4dGVybT4KKyAgICA8 L3Rlcm0+CisKKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgPHZhcm5hbWU+cGdf cGxhbl9hZHZpY2UuYWx3YXlzX3N0b3JlX2FkdmljZV9kZXRhaWxzPC92YXJuYW1lPiBhbGxvd3MK KyAgICAgIDxsaXRlcmFsPkVYUExBSU48L2xpdGVyYWw+IHRvIHNob3cgZGV0YWlscyByZWxhdGVk IHRvIHBsYW4gYWR2aWNlIGV2ZW4KKyAgICAgIHdoZW4gcHJlcGFyZWQgcXVlcmllcyBhcmUgdXNl ZC4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzCisgICAgICA8bGl0ZXJhbD5mYWxzZTwvbGl0ZXJhbD4u ICBXaGVuIHBsYW5uaW5nIGEgcHJlcGFyZWQgcXVlcnksIGl0IGlzIG5vdAorICAgICAgcG9zc2li bGUgdG8ga25vdyB3aGV0aGVyIDxsaXRlcmFsPkVYUExBSU48L2xpdGVyYWw+IHdpbGwgbGF0ZXIg YmUgdXNlZCwKKyAgICAgIHNvIGJ5IGRlZmF1bHQsIHRvIHJlZHVjZSBvdmVyaGVhZCwgPGxpdGVy YWw+cGdfcGxhbl9hZHZpY2U8L2xpdGVyYWw+CisgICAgICB3aWxsIG5vdCBnZW5lcmF0ZSBwbGFu IGFkdmljZSBvciBmZWVkYmFjayBvbiBzdXBwbGllZCBhZHZpY2UuIFRoaXMgbWVhbnMKKyAgICAg IHRoYXQgaWYgPGxpdGVyYWw+RVhQTEFJTiBFWEVDVVRFPC9saXRlcmFsPiBpcyB1c2VkIG9uIHRo ZSBwcmVwYXJlZCBxdWVyeSwKKyAgICAgIGl0IHdpbGwgbm90IGJlIGFibGUgdG8gc2hvdyB0aGlz IGluZm9ybWF0aW9uLiBDaGFuZ2luZyB0aGlzIHNldHRpbmcgdG8KKyAgICAgIDxsaXRlcmFsPnRy dWU8L2xpdGVyYWw+IGF2b2lkcyB0aGlzIHByb2JsZW0sIGJ1dCBhZGRzIGFkZGl0aW9uYWwKKyAg ICAgIG92ZXJoZWFkLiBJdCBpcyBwcm9iYWJseSBhIGdvb2QgaWRlYSB0byBlbmFibGUgdGhpcyBv cHRpb24gb25seSBpbgorICAgICAgc2Vzc2lvbnMgd2hlcmUgaXQgaXMgbmVlZGVkLCByYXRoZXIg dGhhbiBvbiBhIHN5c3RlbS13aWRlIGJhc2lzLgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRl bT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCisgICA8dmFybGlzdGVudHJ5PgorICAgIDx0ZXJtPgor ICAgICA8dmFybmFtZT5wZ19wbGFuX2FkdmljZS5mZWVkYmFja193YXJuaW5nczwvdmFybmFtZT4g KDx0eXBlPmJvb2xlYW48L3R5cGU+KQorICAgICA8aW5kZXh0ZXJtPgorICAgICAgPHByaW1hcnk+ PHZhcm5hbWU+cGdfcGxhbl9hZHZpY2UuZmVlZGJhY2tfd2FybmluZ3M8L3Zhcm5hbWU+IGNvbmZp Z3VyYXRpb24gcGFyYW1ldGVyPC9wcmltYXJ5PgorICAgICA8L2luZGV4dGVybT4KKyAgICA8L3Rl cm0+CisKKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgV2hlbiBzZXQgdG8gdHJ1 ZSwgPHZhcm5hbWU+cGdfcGxhbl9hZHZpY2UuZmVlZGJhY2tfd2FybmluZ3M8L3Zhcm5hbWU+Cisg ICAgICBlbWl0cyBhIHdhcm5pbmcgd2hlbmV2ZXIgc3VwcGxpZWQgcGxhbiBhZHZpY2UgaXMgbm90 IHN1Y2Nlc3NmdWxseQorICAgICAgZW5mb3JjZWQuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxsaXRl cmFsPmZhbHNlPC9saXRlcmFsPi4KKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8 L3Zhcmxpc3RlbnRyeT4KKworICAgPHZhcmxpc3RlbnRyeT4KKyAgICA8dGVybT4KKyAgICAgPHZh cm5hbWU+cGdfcGxhbl9hZHZpY2UubG9jYWxfY29sbGVjdG9yPC92YXJuYW1lPiAoPHR5cGU+Ym9v bGVhbjwvdHlwZT4pCisgICAgIDxpbmRleHRlcm0+CisgICAgICA8cHJpbWFyeT48dmFybmFtZT5w Z19wbGFuX2FkdmljZS5sb2NhbF9jb2xsZWN0b3I8L3Zhcm5hbWU+IGNvbmZpZ3VyYXRpb24gcGFy YW1ldGVyPC9wcmltYXJ5PgorICAgICA8L2luZGV4dGVybT4KKyAgICA8L3Rlcm0+CisKKyAgICA8 bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgPHZhcm5hbWU+cGdfcGxhbl9hZHZpY2UubG9j YWxfY29sbGVjdG9yPC92YXJuYW1lPiBlbmFibGVzIHRoZQorICAgICAgbG9jYWwgPGxpbmsgbGlu a2VuZD0icGdwbGFuYWR2aWNlLWNvbGxlY3RvciI+YWR2aWNlIGNvbGxlY3RvcjwvbGluaz4uCisg ICAgICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8bGl0ZXJhbD5mYWxzZTwvbGl0ZXJhbD4uCisgICAg IDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisKKyAgIDx2YXJs aXN0ZW50cnk+CisgICAgPHRlcm0+CisgICAgIDx2YXJuYW1lPnBnX3BsYW5fYWR2aWNlLmxvY2Fs X2NvbGxlY3Rpb25fbGltaXQ8L3Zhcm5hbWU+ICg8dHlwZT5pbnRlZ2VyPC90eXBlPikKKyAgICAg PGluZGV4dGVybT4KKyAgICAgIDxwcmltYXJ5Pjx2YXJuYW1lPnBnX3BsYW5fYWR2aWNlLmxvY2Fs X2NvbGxlY3Rpb25fbGltaXQ8L3Zhcm5hbWU+IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyPC9wcmlt YXJ5PgorICAgICA8L2luZGV4dGVybT4KKyAgICA8L3Rlcm0+CisKKyAgICA8bGlzdGl0ZW0+Cisg ICAgIDxwYXJhPgorICAgICAgPHZhcm5hbWU+cGdfcGxhbl9hZHZpY2UubG9jYWxfY29sbGVjdGlv bl9saW1pdDwvdmFybmFtZT4gc2V0cyB0aGUKKyAgICAgIG1heGltdW0gbnVtYmVyIG9mIHF1ZXJ5 IHRleHRzIGFuZCBhZHZpY2Ugc3RyaW5ncyByZXRhaW5lZCBieSB0aGUKKyAgICAgIGxvY2FsIDxs aW5rIGxpbmtlbmQ9InBncGxhbmFkdmljZS1jb2xsZWN0b3IiPmFkdmljZSBjb2xsZWN0b3I8L2xp bms+LgorICAgICAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGxpdGVyYWw+MDwvbGl0ZXJhbD4uCisg ICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisKKyAgIDx2 YXJsaXN0ZW50cnk+CisgICAgPHRlcm0+CisgICAgIDx2YXJuYW1lPnBnX3BsYW5fYWR2aWNlLnNo YXJlZF9jb2xsZWN0b3I8L3Zhcm5hbWU+ICg8dHlwZT5ib29sZWFuPC90eXBlPikKKyAgICAgPGlu ZGV4dGVybT4KKyAgICAgIDxwcmltYXJ5Pjx2YXJuYW1lPnBnX3BsYW5fYWR2aWNlLnNoYXJlZF9j b2xsZWN0b3I8L3Zhcm5hbWU+IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyPC9wcmltYXJ5PgorICAg ICA8L2luZGV4dGVybT4KKyAgICA8L3Rlcm0+CisKKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJh PgorICAgICAgPHZhcm5hbWU+cGdfcGxhbl9hZHZpY2Uuc2hhcmVkX2NvbGxlY3RvcjwvdmFybmFt ZT4gZW5hYmxlcyB0aGUKKyAgICAgIHNoYXJlZCA8bGluayBsaW5rZW5kPSJwZ3BsYW5hZHZpY2Ut Y29sbGVjdG9yIj5hZHZpY2UgY29sbGVjdG9yPC9saW5rPi4KKyAgICAgIFRoZSBkZWZhdWx0IHZh bHVlIGlzIDxsaXRlcmFsPmZhbHNlPC9saXRlcmFsPi4gIE9ubHkgc3VwZXJ1c2VycyBhbmQgdXNl cnMKKyAgICAgIHdpdGggdGhlIGFwcHJvcHJpYXRlIDxsaXRlcmFsPlNFVDwvbGl0ZXJhbD4gcHJp dmlsZWdlIGNhbiBjaGFuZ2UgdGhpcworICAgICAgc2V0dGluZy4KKyAgICAgPC9wYXJhPgorICAg IDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgPHZhcmxpc3RlbnRyeT4KKyAg ICA8dGVybT4KKyAgICAgPHZhcm5hbWU+cGdfcGxhbl9hZHZpY2Uuc2hhcmVkX2NvbGxlY3Rpb25f bGltaXQ8L3Zhcm5hbWU+ICg8dHlwZT5pbnRlZ2VyPC90eXBlPikKKyAgICAgPGluZGV4dGVybT4K KyAgICAgIDxwcmltYXJ5Pjx2YXJuYW1lPnBnX3BsYW5fYWR2aWNlLnNoYXJlZF9jb2xsZWN0aW9u X2xpbWl0PC92YXJuYW1lPiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcjwvcHJpbWFyeT4KKyAgICAg PC9pbmRleHRlcm0+CisgICAgPC90ZXJtPgorCisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4K KyAgICAgIDx2YXJuYW1lPnBnX3BsYW5fYWR2aWNlLnNoYXJlZF9jb2xsZWN0aW9uX2xpbWl0PC92 YXJuYW1lPiBzZXRzIHRoZQorICAgICAgbWF4aW11bSBudW1iZXIgb2YgcXVlcnkgdGV4dHMgYW5k IGFkdmljZSBzdHJpbmdzIHJldGFpbmVkIGJ5IHRoZQorICAgICAgc2hhcmVkIDxsaW5rIGxpbmtl bmQ9InBncGxhbmFkdmljZS1jb2xsZWN0b3IiPmFkdmljZSBjb2xsZWN0b3I8L2xpbms+LgorICAg ICAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGxpdGVyYWw+MDwvbGl0ZXJhbD4uICBPbmx5IHN1cGVy dXNlcnMgYW5kIHVzZXJzCisgICAgICB3aXRoIHRoZSBhcHByb3ByaWF0ZSA8bGl0ZXJhbD5TRVQ8 L2xpdGVyYWw+IHByaXZpbGVnZSBjYW4gY2hhbmdlIHRoaXMKKyAgICAgIHNldHRpbmcuCisgICAg IDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisKKyAgIDx2YXJs aXN0ZW50cnk+CisgICAgPHRlcm0+CisgICAgIDx2YXJuYW1lPnBnX3BsYW5fYWR2aWNlLnRyYWNl X21hc2s8L3Zhcm5hbWU+ICg8dHlwZT5ib29sZWFuPC90eXBlPikKKyAgICAgPGluZGV4dGVybT4K KyAgICAgIDxwcmltYXJ5Pjx2YXJuYW1lPnBnX3BsYW5fYWR2aWNlLnRyYWNlX21hc2s8L3Zhcm5h bWU+IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyPC9wcmltYXJ5PgorICAgICA8L2luZGV4dGVybT4K KyAgICA8L3Rlcm0+CisKKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgV2hlbiA8 dmFybmFtZT5wZ19wbGFuX2FkdmljZS50cmFjZV9tYXNrPC92YXJuYW1lPiBpcworICAgICAgPGxp dGVyYWw+dHJ1ZTwvbGl0ZXJhbD4sIDxsaXRlcmFsPnBnX3BsYW5fYWR2aWNlPC9saXRlcmFsPiB3 aWxsIHByaW50CisgICAgICBtZXNzYWdlcyBkdXJpbmcgcXVlcnkgcGxhbm5pbmcgZWFjaCB0aW1l IHRoYXQKKyAgICAgIDxsaXRlcmFsPnBnX3BsYW5fYWR2aWNlPC9saXRlcmFsPiBhbHRlcnMgdGhl IG1hc2sgb2YgYWxsb3dhYmxlIHF1ZXJ5CisgICAgICBwbGFuIHR5cGVzIGluIHJlc3BvbnNlIHRv IHN1cHBsaWVkIHBsYW4gYWR2aWNlLiBUaGUgZGVmYXVsdCB2YWx1ZXMgaXMKKyAgICAgIDxsaXRl cmFsPmZhbHNlPC9saXRlcmFsPi4gVGhlIG1lc3NhZ2VzIHByaW50ZWQgYnkgdGhpcyBzZXR0aW5n IGFyZSBub3QKKyAgICAgIGV4Y2VwdGVkIHRvIGJlIHVzZWZ1bCBleGNlcHQgZm9yIHB1cnBvc2Vz IG9mIGRlYnVnZ2luZyB0aGlzIG1vZHVsZS4KKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+ CisgICA8L3Zhcmxpc3RlbnRyeT4KKworICA8L3ZhcmlhYmxlbGlzdD4KKworIDwvc2VjdDI+CisK KyA8c2VjdDIgaWQ9InBncGxhbmFkdmljZS1hdXRob3IiPgorICA8dGl0bGU+QXV0aG9yPC90aXRs ZT4KKworICA8cGFyYT4KKyAgIFJvYmVydCBIYWFzIDxlbWFpbD5yaGFhc0Bwb3N0Z3Jlc3FsLm9y ZzwvZW1haWw+CisgIDwvcGFyYT4KKyA8L3NlY3QyPgorCis8L3NlY3QxPgpkaWZmIC0tZ2l0IGEv c3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlw ZWRlZnMubGlzdAppbmRleCAzOWM3NjY5MWM4Ni4uNjc2YjE5ZTc2YmYgMTAwNjQ0Ci0tLSBhL3Ny Yy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVudC90 eXBlZGVmcy5saXN0CkBAIC0zOTgxLDYgKzM5ODEsNDUgQEAgcGdfdXVpZF90CiBwZ193Y2hhcgog cGdfd2NoYXJfdGJsCiBwZ3BfYXJtb3JfaGVhZGVyc19zdGF0ZQorcGdwYV9jb2xsZWN0ZWRfYWR2 aWNlCitwZ3BhX2FkdmljZV9pdGVtCitwZ3BhX2FkdmljZV90YWdfdHlwZQorcGdwYV9hZHZpY2Vf dGFyZ2V0CitwZ3BhX2lkZW50aWZpZXIKK3BncGFfaW5kZXhfdGFyZ2V0CitwZ3BhX2luZGV4X3R5 cGUKK3BncGFfaXRtX3R5cGUKK3BncGFfam9fb3V0Y29tZQorcGdwYV9qb2luX2NsYXNzCitwZ3Bh X2pvaW5fbWVtYmVyCitwZ3BhX2pvaW5fc3RhdGUKK3BncGFfam9pbl9zdHJhdGVneQorcGdwYV9q b2luX3Vucm9sbGVyCitwZ3BhX2xvY2FsX2FkdmljZQorcGdwYV9sb2NhbF9hZHZpY2VfY2h1bmsK K3BncGFfb3V0cHV0X2NvbnRleHQKK3BncGFfcGxhbl93YWxrZXJfY29udGV4dAorcGdwYV9wbGFu bmVyX3N0YXRlCitwZ3BhX3FmX3R5cGUKK3BncGFfcXVlcnlfZmVhdHVyZQorcGdwYV9yaV9jaGVj a2VyCitwZ3BhX3JpX2NoZWNrZXJfa2V5CitwZ3BhX3NjYW4KK3BncGFfc2Nhbl9zdHJhdGVneQor cGdwYV9zaGFyZWRfYWR2aWNlCitwZ3BhX3NoYXJlZF9hZHZpY2VfY2h1bmsKK3BncGFfc2hhcmVk X3N0YXRlCitwZ3BhX3NqX3VuaXF1ZV9yZWwKK3BncGFfdGFyZ2V0X3R5cGUKK3BncGFfdHJvdmUK K3BncGFfdHJvdmVfZW50cnkKK3BncGFfdHJvdmVfZW50cnlfZWxlbWVudAorcGdwYV90cm92ZV9l bnRyeV9oYXNoCitwZ3BhX3Ryb3ZlX2VudHJ5X2tleQorcGdwYV90cm92ZV9sb29rdXBfdHlwZQor cGdwYV90cm92ZV9yZXN1bHQKK3BncGFfdHJvdmVfc2xpY2UKK3BncGFfdW5yb2xsZWRfam9pbgog cGdzb2NrZXQKIHBnc3FsX3RoaW5nX3QKIHBnc3NFbnRyeQotLSAKMi41MS4wCgo= --00000000000096d31c064a804400--