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 1vmEVV-009A4o-0T for pgpool-hackers@arkaria.postgresql.org; Sat, 31 Jan 2026 17:11:37 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vmEVR-008o8o-0h for pgpool-hackers@arkaria.postgresql.org; Sat, 31 Jan 2026 17:11:34 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vmEVQ-008o8g-2g for pgpool-hackers@lists.postgresql.org; Sat, 31 Jan 2026 17:11:33 +0000 Received: from mail-yx1-xb12c.google.com ([2607:f8b0:4864:20::b12c]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1vmEVM-00000000OJa-46zX for pgpool-hackers@lists.postgresql.org; Sat, 31 Jan 2026 17:11:33 +0000 Received: by mail-yx1-xb12c.google.com with SMTP id 956f58d0204a3-6481bd173c0so2758661d50.2 for ; Sat, 31 Jan 2026 09:11:28 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1769879487; cv=none; d=google.com; s=arc-20240605; b=Wfdjb65qXdrYNtQt/VJITzjWCrL4LYA0TfBVqsgtrn2UGb34E9pCeRlzD33Kn0QbwA hnRPUr11svY1fqH4DpU3x8W0guDGW8nb5bg/9/TomgFdsFQXI9U8dOJme0fxm8ohKy3n yiMWWOLmOHMD/f40Zm5oi8ygGpynE8KJwPa4e2QbjId1x75S6VF2yJcO9Uy1GyrLKCJ5 Rpz12WJ9m3F0dlOn8PcsYoWgI828sC6sxDdO8L8hb+RGd2rBpjfL6uYIHaQi1YfNl3m0 mzj6GRDfK4hY0SvCz1xVbAEH71JVhlfMnGE19AYKOIVGkFXeUifp6xfgqWaTZbkC4u0P zC/w== 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=dE3SQAczYYB49O+GETNU7UBNA1rxRTB+9vGtHbuZl3A=; fh=m3oiE62fRN5J1XaE+5vpHZRIgCyFefxVI0mFw3d8yxA=; b=aZqME8k06MAASrhRlHyHfem8+6wKpDACxnH8ZoL8bCXwGsCZnpwnaMog0KDFeuJoxi XO9FL7m68x4wRFkNKdV2tBzfBUllpPX+HP/j5Ktdy2wN/nEkUYqvJoJJYENmFc37Nck0 AnNgMe+iydvmq1qbr1OmZ3bFKa+hfbI69ZRR+5DWsmYG6YH/AYH1SIC+kj6ygyW5Roe4 KMM7pJQ6bZ+XOzzQV1fdJaDed5ElKxNgeG5vs7nLy+tYcC20SHKfNU7kJeqeo0LR5UvE Hd4FnMGjiEo5VHku1SYZaC45NbZ48i17fmSbQoPHk1dnWIYUDvOA8CGqZqitqLQk2YTZ f+Hw==; 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=tailorbrands.com; s=google; t=1769879487; x=1770484287; 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=dE3SQAczYYB49O+GETNU7UBNA1rxRTB+9vGtHbuZl3A=; b=EPkmINB2CiWav4m/BCk7LPOEFRiVZaE9oHzH1aqSNo0rtZYozpKtQMK7+viMuMzJ56 m/1kPFgDYKBHbt7WWSaaoL5dcxe8lbxD8g09p54FYPz7xTzhDxN89ky3BQtTStXsRD94 TtZRrQVMDEzhMD+NSz1bZ0v8msrKLbI7ECoANUalhi/IfqtVfh3g5fdLj4oCypt8nVGO zEbQ5WWcasCdEkzAWHwxPsTOwQl3CoI3Ds7fFiB9OOacyW6z6PYLOqZegtBjux4JvjDE d33zRdoUFaZC5rVV3Dq/TgPUdU1TnCUTW4vs8knVIsUxsIrxxca/Tivrna9upcSWGghG ScnQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769879487; x=1770484287; 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=dE3SQAczYYB49O+GETNU7UBNA1rxRTB+9vGtHbuZl3A=; b=FyeFK8KWgTIeqEUGoJfJaJTSuj1cN/8TAwwasj2WQecLCbuyMx5nnzK1YYI+EmYRiL 0LAUmHAue44QWfFx+ejfrqOcTonyT8SVx2zWOuFNBMi8F2Wn3ZI4kq5VRTLiAfIPSaIj ZJ1s7E6enJ83CC2k2fgRMYLuUf8MUV6pE2Ix8zejp/uZc2gEwIVJ7YENeV77ycdrtS2j HX4B6ThgImURgmEd4nx0CbcXx92PzR/HFxUZ5NAIgeQzRQNLcZMPuznDS/gMy13Aa1jt J1VdfvlqstGQFoEy1QxF1ly0Vs7EGS1yx7ip2RFPP2n9MxnAOXm4Nrx1IvOdpYLziW/0 /mVw== X-Gm-Message-State: AOJu0YzEIY3OxYhykUlPaC3yqYnVG1iGATI02TJEmGoPExHzXNV0+D9Y 5hkStYCLxaF2JZfE+GCKMGzZc7ypgi5k8yla8NOpiZrk3FtHMcF9OGy+BImuE7+IbYbprjsddzb jtDxOki+Uu4CE+CL+cMghhCaL+5Ag4a4OF4/tvp7LaCpZ+7nyfI5hsWX8Yg== X-Gm-Gg: AZuq6aKL4140QF/GvTja54Dqnuw4y9ygsZrUimnxN3GbGu0AgGPAM39Ju3D6Zj2R1ay fhHdCnaVJ8mmArzu8Kk08K6VyBnPZhPgM2Xp4+jUnM6fJk4D67F8J1Sn1MW4jb7nlZHFeMWZGXo 1XzKko51wmZLxM6TeQs6pLWV1GXAcsySvUFO4p3/V5/8a5EqArn2jz3WhTcaULnBDxFC+0+xSRQ nonUW5Tr9XUZYeQ+zVGlXVPMKk9aa695UFsPTDTf7OZSd10lMH6X8gQSRNWAXnPkXpimwz9LXeH fepL6zFWVR6XGN4mHDPoIX+auYyS3QylCal0ftaiQqBVbgf0Yr7p03bzsH8UqetlO2q2bq9KEzA ijTaCoJ3yGdgvDEYAFDvaRIt991yb9lYiHBdWn2bqw4ViC/3yBPwu3bfj7O4= X-Received: by 2002:a05:690e:144d:b0:648:ff21:93b5 with SMTP id 956f58d0204a3-649a83cad9fmr5438558d50.24.1769879486702; Sat, 31 Jan 2026 09:11:26 -0800 (PST) MIME-Version: 1.0 References: <20260128.140840.463288103359200425.ishii@postgresql.org> <20260129.172810.828658334363427861.ishii@postgresql.org> <20260130.170950.551399957723794225.ishii@postgresql.org> In-Reply-To: <20260130.170950.551399957723794225.ishii@postgresql.org> From: Nadav Shatz Date: Sat, 31 Jan 2026 19:11:14 +0200 X-Gm-Features: AZwV_QhoLM5h7G9gFHtLknjX3-4elmn1QN_KXuUM561y_KhdxKRmQFqiHjfvtp8 Message-ID: Subject: Re: Proposal: Recent mutated table tracking in memory To: Tatsuo Ishii Cc: pgpool-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="0000000000001a0d7f0649b22e98" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000001a0d7f0649b22e98 Content-Type: multipart/alternative; boundary="0000000000001a0d7d0649b22e96" --0000000000001a0d7d0649b22e96 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Thank you for the comments! I agree with all of them. Let me know what you think of the changes and new naming. Please see attached another version of the patch. On Fri, Jan 30, 2026 at 10:10=E2=80=AFAM Tatsuo Ishii wrote: > > yes indeed, please find attached. > > Thanks. Here some comments on the patch: > > - It seems you use a table name (and schema) for a key to identify the > TableMutationEntry and other objects. I think you should use table > oids for the key because the same table name could exists in > different schema. Moreover, if the database is different from the > database when the map entry was created, a map look up could return > incorrect result. In summary the key should be table oid and > database oid (which is already done by query cache subsystem). > > - In the patch spin lock primitives are introduced. Why can't we use > semaphore instead? A spin lock uses busy loop, which could increase > the system load if the duration of locking becomes longer. > > - What would happen if the leader watchdog fails and other watchdog > node take the place of the leader role? > > - pool_memory_map_get_ttl() and pool_memory_map_get_stats() are > defined but are not used anywhere. Why do you have them? > > - I think "memory_map" is a too generic name. Can we use more specific > name for the feature? > > Best regards, > -- > Tatsuo Ishii > SRA OSS K.K. > English: http://www.sraoss.co.jp/index_en/ > Japanese:http://www.sraoss.co.jp > --=20 Nadav Shatz Tailor Brands | CTO --0000000000001a0d7d0649b22e96 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Thank you for the comments!

I agree wit= h all of them. Let me know what you think of the changes and new naming.

Please see attached another version of the patch.

On Fri, Jan 30, 2026 at 10:10=E2=80=AFAM Tatsuo Ishii <ishii@postgresql.org>= ; wrote:
> ye= s indeed, please find attached.

Thanks. Here some comments on the patch:

- It seems you use a table name (and schema) for a key to identify the
=C2=A0 TableMutationEntry and other objects. I think you should use table =C2=A0 oids for the key because the same table name could exists in
=C2=A0 different schema. Moreover, if the database is different from the =C2=A0 database when the map entry was created, a map look up could return<= br> =C2=A0 incorrect result. In summary the key should be table oid and
=C2=A0 database oid (which is already done by query cache subsystem).

- In the patch spin lock primitives are introduced. Why can't we use =C2=A0 semaphore instead? A spin lock uses busy loop, which could increase<= br> =C2=A0 the system load if the duration of locking becomes longer.

- What would happen if the leader watchdog fails and other watchdog
=C2=A0 node take the place of the leader role?

- pool_memory_map_get_ttl() and pool_memory_map_get_stats() are
=C2=A0 defined but are not used anywhere. Why do you have them?

- I think "memory_map" is a too generic name. Can we use more spe= cific
=C2=A0 name for the feature?

Best regards,
--
Tatsuo Ishii
SRA OSS K.K.
English: http://www.sraoss.co.jp/index_en/
Japanese:http://www.sraoss.co.jp


--
Nadav Shatz
<= font color=3D"#000000">Tailor Brands=C2=A0| CTO
--0000000000001a0d7d0649b22e96-- --0000000000001a0d7f0649b22e98 Content-Type: application/octet-stream; name="mutated_table.patch" Content-Disposition: attachment; filename="mutated_table.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_ml2kjhke0 RnJvbSA0MDNlZDQ2ZjBkMmIzMzg1OGMwNWEyNWQ3NGJlMmIwMjdkYjdkMjFiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBOYWRhdiBTaGF0eiA8bmFkYXZAdGFpbG9yYnJhbmRzLmNvbT4K RGF0ZTogVHVlLCA2IEphbiAyMDI2IDEyOjQxOjUwICswMjAwClN1YmplY3Q6IFtQQVRDSF0gRmVh dHVyZTogYWRkIGluLW1lbW9yeSB0YWJsZSB0cmFja2luZyB0byBwcmV2ZW50IHN0YWxlIHJlYWRz CiBmcm9tIHJlcGxpY2FzCk1JTUUtVmVyc2lvbjogMS4wCkNvbnRlbnQtVHlwZTogdGV4dC9wbGFp bjsgY2hhcnNldD1VVEYtOApDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CgpJbXBsZW1l bnQgIm1lbW9yeSBtYXAiIGZlYXR1cmUgdGhhdCB0cmFja3MgcmVjZW50bHktd3JpdHRlbiBkYXRh YmFzZQp0YWJsZXMgaW4gc2hhcmVkIG1lbW9yeSB0byBwcmV2ZW50IHN0YWxlIHJlYWRzIGR1cmlu ZyByZXBsaWNhdGlvbiBsYWcuCldoZW4gYSB3cml0ZSAoSU5TRVJUL1VQREFURS9ERUxFVEUpIG9j Y3VycyBvbiBhIHRhYmxlLCB0aGF0IHRhYmxlIGlzCm1hcmtlZCBhcyAiZGlydHkiIGZvciBhIGNv bmZpZ3VyYWJsZSBUVEwgcGVyaW9kLiBBbnkgU0VMRUNUIG9uIGEgZGlydHkKdGFibGUgd2l0aGlu IHRoZSBUVEwgd2luZG93IGlzIHJvdXRlZCB0byBwcmltYXJ5IGluc3RlYWQgb2YgcmVwbGljYS4K CktleSBmZWF0dXJlczoKLSBTaGFyZWQgbWVtb3J5IGhhc2ggdGFibGUgZm9yIHRyYWNraW5nIHRh YmxlIG11dGF0aW9ucyB3aXRoIFRUTAotIFF1ZXJ5IHBhcnNlIGNhY2hlIHdpdGggTFJVIGV2aWN0 aW9uIGZvciBwZXJmb3JtYW5jZQotIENvbGQgc3RhcnQgcHJvdGVjdGlvbiAocm91dGVzIGFsbCBx dWVyaWVzIHRvIHByaW1hcnkgaW5pdGlhbGx5KQotIEF1dG9tYXRpYyBUVEwgY2FsY3VsYXRpb246 IHJlcGxpY2F0aW9uX2RlbGF5IMOXIGNvbmZpZ3VyYWJsZSBmYWN0b3IKLSBQZXItdGFibGUgc3Rh bGVuZXNzIHRyYWNraW5nIHdpdGggbWljcm9zZWNvbmQgcHJlY2lzaW9uCgpOZXcgY29uZmlndXJh dGlvbiBwYXJhbWV0ZXJzOgotIG1lbW9yeV9tYXBfZW5hYmxlZDogRW5hYmxlL2Rpc2FibGUgdGhl IGZlYXR1cmUgKGRlZmF1bHQ6IG9mZikKLSBtZW1vcnlfbWFwX3R0bF9mYWN0b3I6IFRUTCBtdWx0 aXBsaWVyIGZvciByZXBsaWNhdGlvbiBkZWxheSAoZGVmYXVsdDogNS4wKQotIG1lbW9yeV9tYXBf Y29sZF9zdGFydF9kdXJhdGlvbjogQ29sZCBzdGFydCBwZXJpb2QgaW4gbXMgKGRlZmF1bHQ6IDIw MDApCi0gbWVtb3J5X21hcF90YWJsZV9idWNrZXRzOiBIYXNoIGJ1Y2tldHMgZm9yIHRhYmxlIG1h cCAoZGVmYXVsdDogMTAyNCkKLSBtZW1vcnlfbWFwX3RhYmxlX3NpemU6IE1heCB0cmFja2VkIHRh YmxlcyAoZGVmYXVsdDogMjA0OCkKLSBtZW1vcnlfbWFwX3F1ZXJ5X2J1Y2tldHM6IEhhc2ggYnVj a2V0cyBmb3IgcXVlcnkgY2FjaGUgKGRlZmF1bHQ6IDIwNDgpCi0gbWVtb3J5X21hcF9xdWVyeV9j YWNoZV9zaXplOiBNYXggY2FjaGVkIHF1ZXJpZXMgKGRlZmF1bHQ6IDEwMDAwKQoKZGlmZiAtLWdp dCBhL2RvYy9zcmMvc2dtbC9sb2FkYmFsYW5jZS5zZ21sIGIvZG9jL3NyYy9zZ21sL2xvYWRiYWxh bmNlLnNnbWwKaW5kZXggZWUxOWZhYmViYWIyMjEwY2Q0YWJlNTlhNzExYTAzNmFjMGFjODk0My4u ZGNlOGRlYzE5OTM3MWUzYTI0ZDkyYmFhYWQ2NjQ3NzU3YjdlZGY1ZiAxMDA2NDQKLS0tIGEvZG9j L3NyYy9zZ21sL2xvYWRiYWxhbmNlLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2xvYWRiYWxhbmNl LnNnbWwKQEAgLTExOTMsNCArMTE5MywyMTQgQEAgZG1sX2FkYXB0aXZlX29iamVjdF9yZWxhdGlv bnNoaXBfbGlzdCA9ICd0YWJsZV8xOnRhYmxlXzInCiAKICAgPC92YXJpYWJsZWxpc3Q+CiAgPC9z ZWN0Mj4KKworIDxzZWN0MiBpZD0icnVudGltZS1jb25maWctdGFibGUtbXV0YXRpb24tbWFwIj4K KyAgPHRpdGxlPlRhYmxlIE11dGF0aW9uIE1hcCBDb25maWd1cmF0aW9uIChMYWdsZXNzIFJlcGxp Y2EgUmVhZHMpPC90aXRsZT4KKworICA8cGFyYT4KKyAgIFRoZXNlIHBhcmFtZXRlcnMgY29uZmln dXJlIHRoZSB0YWJsZSBtdXRhdGlvbiBtYXAgZmVhdHVyZSwgd2hpY2ggdHJhY2tzIHJlY2VudGx5 IHdyaXR0ZW4gdGFibGVzCisgICB0byBwcmV2ZW50IHN0YWxlIHJlYWRzIGZyb20gcmVwbGljYSBu b2RlcyBkdXJpbmcgcmVwbGljYXRpb24gbGFnLiBUaGlzIGltcGxlbWVudHMgdGhlCisgICAibGFn bGVzcyIgYXJjaGl0ZWN0dXJlIHBhdHRlcm4gZm9yIGRpc3RyaWJ1dGVkIHN5c3RlbXMgd2l0aCBy ZWFkIHJlcGxpY2FzLgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBXaGVuIGEgdGFibGUgaXMg bW9kaWZpZWQgKElOU0VSVC9VUERBVEUvREVMRVRFKSwgaXQgaXMgbWFya2VkIGFzICJzdGFsZSIg Zm9yIGEgVFRMIHBlcmlvZAorICAgKDxsaXRlcmFsPnJlcGxpY2F0aW9uX2RlbGF5ICogdGFibGVf bXV0YXRpb25fbWFwX3R0bF9mYWN0b3I8L2xpdGVyYWw+KS4gQW55IFNFTEVDVCBxdWVyaWVzIG9u IHN0YWxlIHRhYmxlcyBhcmUgcm91dGVkCisgICB0byB0aGUgcHJpbWFyeSBub2RlIGluc3RlYWQg b2YgcmVwbGljYXMsIGVuc3VyaW5nIHJlYWQtYWZ0ZXItd3JpdGUgY29uc2lzdGVuY3kuCisgIDwv cGFyYT4KKworICA8cGFyYT4KKyAgIFRoaXMgZmVhdHVyZSByZXF1aXJlcyA8eHJlZiBsaW5rZW5k PSJndWMtcmVwbGljYXRpb24tZGVsYXktc291cmNlLWNtZCI+IHRvIGJlIGNvbmZpZ3VyZWQKKyAg IGZvciBtb25pdG9yaW5nIHJlcGxpY2F0aW9uIGRlbGF5IGZyb20gcmVwbGljYXMuCisgIDwvcGFy YT4KKworICA8d2FybmluZz4KKyAgIDxwYXJhPgorICAgIEVuYWJsaW5nIHRoZSB0YWJsZSBtdXRh dGlvbiBtYXAgZmVhdHVyZSBpbmNyZWFzZXMgc2hhcmVkIG1lbW9yeSBjb25zdW1wdGlvbi4gV2l0 aCBkZWZhdWx0IHNldHRpbmdzLAorICAgIHRoZSBmZWF0dXJlIHJlcXVpcmVzIGFwcHJveGltYXRl bHkgNi40IE1CIG9mIHNoYXJlZCBtZW1vcnkgKDAuMSBNQiBmb3IgdGFibGUgdHJhY2tpbmcgKyA2 LjMgTUIgZm9yIHF1ZXJ5IGNhY2hlKS4KKyAgICBNZW1vcnkgdXNhZ2Ugc2NhbGVzIHdpdGggY29u ZmlndXJhdGlvbiBwYXJhbWV0ZXJzOgorICAgPC9wYXJhPgorICAgPGl0ZW1pemVkbGlzdD4KKyAg ICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgVGFibGUgdHJhY2tpbmc6IDxsaXRlcmFs PnRhYmxlX211dGF0aW9uX21hcF90YWJsZV9zaXplICogNDAgYnl0ZXM8L2xpdGVyYWw+IChkZWZh dWx0OiAyMDQ4ICogNDAgPSB+ODAgS0IpCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgor ICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBRdWVyeSBjYWNoZTogPGxpdGVyYWw+ dGFibGVfbXV0YXRpb25fbWFwX3F1ZXJ5X2NhY2hlX3NpemUgKiA2NDAgYnl0ZXM8L2xpdGVyYWw+ IChkZWZhdWx0OiAxMDAwMCAqIDY0MCA9IH42LjMgTUIpCisgICAgIDwvcGFyYT4KKyAgICA8L2xp c3RpdGVtPgorICAgPC9pdGVtaXplZGxpc3Q+CisgICA8cGFyYT4KKyAgICBGb3IgaGlnaC10cmFm ZmljIHN5c3RlbXMgd2l0aCBsYXJnZSBjYWNoZSBzaXplcyAoZS5nLiwgPGxpdGVyYWw+dGFibGVf bXV0YXRpb25fbWFwX3F1ZXJ5X2NhY2hlX3NpemUgPSAxMDAwMDA8L2xpdGVyYWw+KSwKKyAgICBt ZW1vcnkgdXNhZ2UgY2FuIHJlYWNoIDY0IE1CIG9yIG1vcmUuIENvbnNpZGVyIHlvdXIgc3lzdGVt J3MgYXZhaWxhYmxlIHNoYXJlZCBtZW1vcnkgd2hlbiBlbmFibGluZyB0aGlzIGZlYXR1cmUuCisg ICA8L3BhcmE+CisgIDwvd2FybmluZz4KKworICA8dmFyaWFibGVsaXN0PgorCisgICA8dmFybGlz dGVudHJ5IGlkPSJndWMtdGFibGUtbXV0YXRpb24tbWFwLWVuYWJsZWQiIHhyZWZsYWJlbD0idGFi bGVfbXV0YXRpb25fbWFwX2VuYWJsZWQiPgorICAgIDx0ZXJtPjx2YXJuYW1lPnRhYmxlX211dGF0 aW9uX21hcF9lbmFibGVkPC92YXJuYW1lPiAoPHR5cGU+Ym9vbGVhbjwvdHlwZT4pCisgICAgIDxp bmRleHRlcm0+CisgICAgICA8cHJpbWFyeT48dmFybmFtZT50YWJsZV9tdXRhdGlvbl9tYXBfZW5h YmxlZDwvdmFybmFtZT4gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXI8L3ByaW1hcnk+CisgICAgIDwv aW5kZXh0ZXJtPgorICAgIDwvdGVybT4KKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAg ICAgRW5hYmxlcyBpbi1tZW1vcnkgdHJhY2tpbmcgb2YgcmVjZW50bHkgd3JpdHRlbiB0YWJsZXMu IFdoZW4gZW5hYmxlZCwgdGFibGVzIGFyZSBtYXJrZWQKKyAgICAgIGFzIHN0YWxlIGFmdGVyIHdy aXRlIG9wZXJhdGlvbnMsIGFuZCByZWFkcyBhcmUgcm91dGVkIHRvIHByaW1hcnkgdW50aWwgdGhl IFRUTCBleHBpcmVzLgorICAgICA8L3BhcmE+CisgICAgIDxwYXJhPgorICAgICAgVGhpcyBwYXJh bWV0ZXIgY2FuIGJlIGNoYW5nZWQgYnkgcmVsb2FkaW5nIHRoZSA8cHJvZHVjdG5hbWU+UGdwb29s LUlJPC8+IGNvbmZpZ3VyYXRpb25zLgorICAgICAgRGVmYXVsdCBpcyA8bGl0ZXJhbD5vZmY8L2xp dGVyYWw+LgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5 PgorCisgICA8dmFybGlzdGVudHJ5IGlkPSJndWMtdGFibGUtbXV0YXRpb24tbWFwLXR0bC1mYWN0 b3IiIHhyZWZsYWJlbD0idGFibGVfbXV0YXRpb25fbWFwX3R0bF9mYWN0b3IiPgorICAgIDx0ZXJt Pjx2YXJuYW1lPnRhYmxlX211dGF0aW9uX21hcF90dGxfZmFjdG9yPC92YXJuYW1lPiAoPHR5cGU+ ZmxvYXRpbmcgcG9pbnQ8L3R5cGU+KQorICAgICA8aW5kZXh0ZXJtPgorICAgICAgPHByaW1hcnk+ PHZhcm5hbWU+dGFibGVfbXV0YXRpb25fbWFwX3R0bF9mYWN0b3I8L3Zhcm5hbWU+IGNvbmZpZ3Vy YXRpb24gcGFyYW1ldGVyPC9wcmltYXJ5PgorICAgICA8L2luZGV4dGVybT4KKyAgICA8L3Rlcm0+ CisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIE11bHRpcGxpZXIgZm9yIGNhbGN1 bGF0aW5nIHRoZSBUVEw6IDxsaXRlcmFsPlRUTCA9IHJlcGxpY2F0aW9uX2RlbGF5ICogdGFibGVf bXV0YXRpb25fbWFwX3R0bF9mYWN0b3I8L2xpdGVyYWw+LgorICAgICAgSGlnaGVyIHZhbHVlcyBw cm92aWRlIG1vcmUgc2FmZXR5IG1hcmdpbiBidXQgbWF5IHJlZHVjZSByZWFkIHJlcGxpY2EgdXRp bGl6YXRpb24uCisgICAgIDwvcGFyYT4KKyAgICAgPHBhcmE+CisgICAgICBWYWxpZCByYW5nZTog MS4wLTEwMC4wLiBEZWZhdWx0IGlzIDxsaXRlcmFsPjUuMDwvbGl0ZXJhbD4uCisgICAgICBUaGlz IHBhcmFtZXRlciBjYW4gYmUgY2hhbmdlZCBieSByZWxvYWRpbmcgdGhlIDxwcm9kdWN0bmFtZT5Q Z3Bvb2wtSUk8Lz4gY29uZmlndXJhdGlvbnMuCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVt PgorICAgPC92YXJsaXN0ZW50cnk+CisKKyAgIDx2YXJsaXN0ZW50cnkgaWQ9Imd1Yy10YWJsZS1t dXRhdGlvbi1tYXAtY29sZC1zdGFydC1kdXJhdGlvbiIgeHJlZmxhYmVsPSJ0YWJsZV9tdXRhdGlv bl9tYXBfY29sZF9zdGFydF9kdXJhdGlvbiI+CisgICAgPHRlcm0+PHZhcm5hbWU+dGFibGVfbXV0 YXRpb25fbWFwX2NvbGRfc3RhcnRfZHVyYXRpb248L3Zhcm5hbWU+ICg8dHlwZT5pbnRlZ2VyPC90 eXBlPikKKyAgICAgPGluZGV4dGVybT4KKyAgICAgIDxwcmltYXJ5Pjx2YXJuYW1lPnRhYmxlX211 dGF0aW9uX21hcF9jb2xkX3N0YXJ0X2R1cmF0aW9uPC92YXJuYW1lPiBjb25maWd1cmF0aW9uIHBh cmFtZXRlcjwvcHJpbWFyeT4KKyAgICAgPC9pbmRleHRlcm0+CisgICAgPC90ZXJtPgorICAgIDxs aXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBEdXJhdGlvbiBpbiBtaWxsaXNlY29uZHMgdG8g cm91dGUgYWxsIHF1ZXJpZXMgdG8gcHJpbWFyeSBhZnRlciBhIGNoaWxkIHByb2Nlc3Mgc3RhcnRz LgorICAgICAgVGhpcyBwcmV2ZW50cyBzdGFsZSByZWFkcyB3aGVuIGEgbmV3IGNvbm5lY3Rpb24g aXMgZXN0YWJsaXNoZWQgYmVmb3JlIHRoZSB0YWJsZSBtdXRhdGlvbiBtYXAKKyAgICAgIGlzIHBv cHVsYXRlZCB3aXRoIHJlY2VudCB3cml0ZSBoaXN0b3J5LgorICAgICA8L3BhcmE+CisgICAgIDxw YXJhPgorICAgICAgV2hlbiB3YXRjaGRvZyBpcyBlbmFibGVkIGFuZCB0aGUgbG9jYWwgbm9kZSBi ZWNvbWVzIHRoZSBsZWFkZXIsIFBncG9vbC1JSSBhbHNvIHRyaWdnZXJzIGEKKyAgICAgIGdsb2Jh bCBjb2xkIHN0YXJ0IGZvciB0aGlzIGR1cmF0aW9uIHRvIGF2b2lkIHN0YWxlIHJlYWRzIGFmdGVy IGxlYWRlcnNoaXAgY2hhbmdlcy4KKyAgICAgPC9wYXJhPgorICAgICA8cGFyYT4KKyAgICAgIFZh bGlkIHJhbmdlOiAwLTYwMDAwIG1zLiBEZWZhdWx0IGlzIDxsaXRlcmFsPjIwMDA8L2xpdGVyYWw+ ICgyIHNlY29uZHMpLgorICAgICAgU2V0IHRvIDAgdG8gZGlzYWJsZSBjb2xkIHN0YXJ0IGJlaGF2 aW9yLgorICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGNoYW5nZWQgYnkgcmVsb2FkaW5nIHRo ZSA8cHJvZHVjdG5hbWU+UGdwb29sLUlJPC8+IGNvbmZpZ3VyYXRpb25zLgorICAgICA8L3BhcmE+ CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCisgICA8dmFybGlzdGVudHJ5 IGlkPSJndWMtdGFibGUtbXV0YXRpb24tbWFwLXRhYmxlLWJ1Y2tldHMiIHhyZWZsYWJlbD0idGFi bGVfbXV0YXRpb25fbWFwX3RhYmxlX2J1Y2tldHMiPgorICAgIDx0ZXJtPjx2YXJuYW1lPnRhYmxl X211dGF0aW9uX21hcF90YWJsZV9idWNrZXRzPC92YXJuYW1lPiAoPHR5cGU+aW50ZWdlcjwvdHlw ZT4pCisgICAgIDxpbmRleHRlcm0+CisgICAgICA8cHJpbWFyeT48dmFybmFtZT50YWJsZV9tdXRh dGlvbl9tYXBfdGFibGVfYnVja2V0czwvdmFybmFtZT4gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXI8 L3ByaW1hcnk+CisgICAgIDwvaW5kZXh0ZXJtPgorICAgIDwvdGVybT4KKyAgICA8bGlzdGl0ZW0+ CisgICAgIDxwYXJhPgorICAgICAgTnVtYmVyIG9mIGhhc2ggYnVja2V0cyBmb3IgdGhlIHRhYmxl IG11dGF0aW9uIHRyYWNraW5nIGhhc2ggdGFibGUuCisgICAgICBIaWdoZXIgdmFsdWVzIHJlZHVj ZSBoYXNoIGNvbGxpc2lvbnMgYW5kIGltcHJvdmUgbG9va3VwIHBlcmZvcm1hbmNlLgorICAgICA8 L3BhcmE+CisgICAgIDxwYXJhPgorICAgICAgVmFsaWQgcmFuZ2U6IDY0LTY1NTM2LiBEZWZhdWx0 IGlzIDxsaXRlcmFsPjEwMjQ8L2xpdGVyYWw+LgorICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIG9u bHkgYmUgc2V0IGF0IHNlcnZlciBzdGFydC4KKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+ CisgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgPHZhcmxpc3RlbnRyeSBpZD0iZ3VjLXRhYmxlLW11 dGF0aW9uLW1hcC10YWJsZS1zaXplIiB4cmVmbGFiZWw9InRhYmxlX211dGF0aW9uX21hcF90YWJs ZV9zaXplIj4KKyAgICA8dGVybT48dmFybmFtZT50YWJsZV9tdXRhdGlvbl9tYXBfdGFibGVfc2l6 ZTwvdmFybmFtZT4gKDx0eXBlPmludGVnZXI8L3R5cGU+KQorICAgICA8aW5kZXh0ZXJtPgorICAg ICAgPHByaW1hcnk+PHZhcm5hbWU+dGFibGVfbXV0YXRpb25fbWFwX3RhYmxlX3NpemU8L3Zhcm5h bWU+IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyPC9wcmltYXJ5PgorICAgICA8L2luZGV4dGVybT4K KyAgICA8L3Rlcm0+CisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIE1heGltdW0g bnVtYmVyIG9mIHRhYmxlcyB0aGF0IGNhbiBiZSB0cmFja2VkIHNpbXVsdGFuZW91c2x5IGluIHRo ZSB0YWJsZSBtdXRhdGlvbiBtYXAuCisgICAgICBXaGVuIGZ1bGwsIG9sZGVzdCBlbnRyaWVzIGFy ZSBldmljdGVkIHVzaW5nIGEgc2ltcGxlIGV2aWN0aW9uIHN0cmF0ZWd5LgorICAgICA8L3BhcmE+ CisgICAgIDxwYXJhPgorICAgICAgVmFsaWQgcmFuZ2U6IDEyOC0xMzEwNzIuIERlZmF1bHQgaXMg PGxpdGVyYWw+MjA0ODwvbGl0ZXJhbD4uCisgICAgICBNZW1vcnkgdXNhZ2U6IGFwcHJveGltYXRl bHkgNDAgYnl0ZXMgcGVyIGVudHJ5LgorICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIG9ubHkgYmUg c2V0IGF0IHNlcnZlciBzdGFydC4KKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8 L3Zhcmxpc3RlbnRyeT4KKworICAgPHZhcmxpc3RlbnRyeSBpZD0iZ3VjLXRhYmxlLW11dGF0aW9u LW1hcC1xdWVyeS1idWNrZXRzIiB4cmVmbGFiZWw9InRhYmxlX211dGF0aW9uX21hcF9xdWVyeV9i dWNrZXRzIj4KKyAgICA8dGVybT48dmFybmFtZT50YWJsZV9tdXRhdGlvbl9tYXBfcXVlcnlfYnVj a2V0czwvdmFybmFtZT4gKDx0eXBlPmludGVnZXI8L3R5cGU+KQorICAgICA8aW5kZXh0ZXJtPgor ICAgICAgPHByaW1hcnk+PHZhcm5hbWU+dGFibGVfbXV0YXRpb25fbWFwX3F1ZXJ5X2J1Y2tldHM8 L3Zhcm5hbWU+IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyPC9wcmltYXJ5PgorICAgICA8L2luZGV4 dGVybT4KKyAgICA8L3Rlcm0+CisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIE51 bWJlciBvZiBoYXNoIGJ1Y2tldHMgZm9yIHRoZSBxdWVyeSBwYXJzZSBjYWNoZS4gVGhlIGNhY2hl IHN0b3JlcyBub3JtYWxpemVkCisgICAgICBxdWVyeSBzdHJpbmdzIG1hcHBlZCB0byB0aGVpciB0 YWJsZSBkZXBlbmRlbmNpZXMgdG8gYXZvaWQgcmVwZWF0ZWQgcGFyc2luZy4KKyAgICAgPC9wYXJh PgorICAgICA8cGFyYT4KKyAgICAgIFZhbGlkIHJhbmdlOiA2NC02NTUzNi4gRGVmYXVsdCBpcyA8 bGl0ZXJhbD4yMDQ4PC9saXRlcmFsPi4KKyAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBvbmx5IGJl IHNldCBhdCBzZXJ2ZXIgc3RhcnQuCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAg PC92YXJsaXN0ZW50cnk+CisKKyAgIDx2YXJsaXN0ZW50cnkgaWQ9Imd1Yy10YWJsZS1tdXRhdGlv bi1tYXAtcXVlcnktY2FjaGUtc2l6ZSIgeHJlZmxhYmVsPSJ0YWJsZV9tdXRhdGlvbl9tYXBfcXVl cnlfY2FjaGVfc2l6ZSI+CisgICAgPHRlcm0+PHZhcm5hbWU+dGFibGVfbXV0YXRpb25fbWFwX3F1 ZXJ5X2NhY2hlX3NpemU8L3Zhcm5hbWU+ICg8dHlwZT5pbnRlZ2VyPC90eXBlPikKKyAgICAgPGlu ZGV4dGVybT4KKyAgICAgIDxwcmltYXJ5Pjx2YXJuYW1lPnRhYmxlX211dGF0aW9uX21hcF9xdWVy eV9jYWNoZV9zaXplPC92YXJuYW1lPiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcjwvcHJpbWFyeT4K KyAgICAgPC9pbmRleHRlcm0+CisgICAgPC90ZXJtPgorICAgIDxsaXN0aXRlbT4KKyAgICAgPHBh cmE+CisgICAgICBNYXhpbXVtIG51bWJlciBvZiBxdWVyeSBwYXJzZSByZXN1bHRzIHRvIGNhY2hl LiBVc2VzIExSVSBldmljdGlvbiB3aGVuIGZ1bGwuCisgICAgICBMYXJnZXIgY2FjaGVzIHJlZHVj ZSBwYXJzaW5nIG92ZXJoZWFkIGJ1dCBjb25zdW1lIG1vcmUgc2hhcmVkIG1lbW9yeS4KKyAgICAg PC9wYXJhPgorICAgICA8cGFyYT4KKyAgICAgIFZhbGlkIHJhbmdlOiAxMDAtMTAwMDAwMC4gRGVm YXVsdCBpcyA8bGl0ZXJhbD4xMDAwMDwvbGl0ZXJhbD4uCisgICAgICBNZW1vcnkgdXNhZ2U6IGFw cHJveGltYXRlbHkgNjQwIGJ5dGVzIHBlciBlbnRyeSAofjYuMyBNQiBmb3IgZGVmYXVsdCwgfjY0 IE1CIGZvciAxMDAwMDAgZW50cmllcykuCisgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gb25seSBi ZSBzZXQgYXQgc2VydmVyIHN0YXJ0LgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAg IDwvdmFybGlzdGVudHJ5PgorCisgIDwvdmFyaWFibGVsaXN0PgorCisgIDxzZWN0MyBpZD0icnVu dGltZS1jb25maWctdGFibGUtbXV0YXRpb24tbWFwLWV4YW1wbGUiPgorICAgPHRpdGxlPlRhYmxl IE11dGF0aW9uIE1hcCBDb25maWd1cmF0aW9uIEV4YW1wbGU8L3RpdGxlPgorICAgPHBhcmE+Cisg ICAgVG8gZW5hYmxlIHRhYmxlIG11dGF0aW9uIG1hcCB3aXRoIHJlcGxpY2F0aW9uIGRlbGF5IG1v bml0b3Jpbmc6CisgICA8L3BhcmE+CisgICA8cHJvZ3JhbWxpc3Rpbmc+CisjIEVuYWJsZSB0YWJs ZSBtdXRhdGlvbiBtYXAgZmVhdHVyZQordGFibGVfbXV0YXRpb25fbWFwX2VuYWJsZWQgPSBvbgor dGFibGVfbXV0YXRpb25fbWFwX3R0bF9mYWN0b3IgPSA1LjAKK3RhYmxlX211dGF0aW9uX21hcF9j b2xkX3N0YXJ0X2R1cmF0aW9uID0gMjAwMAorCisjIENvbmZpZ3VyZSBleHRlcm5hbCByZXBsaWNh dGlvbiBkZWxheSBtb25pdG9yaW5nCityZXBsaWNhdGlvbl9kZWxheV9zb3VyY2VfY21kID0gJy9w YXRoL3RvL2dldC1yZXBsaWNhdGlvbi1kZWxheS5zaCcKK3JlcGxpY2F0aW9uX2RlbGF5X3NvdXJj ZV90aW1lb3V0ID0gMTAKKworIyBBZGp1c3QgY2FjaGUgc2l6ZXMgYmFzZWQgb24gd29ya2xvYWQg KGluY3JlYXNlcyBtZW1vcnkgdXNhZ2UpCit0YWJsZV9tdXRhdGlvbl9tYXBfdGFibGVfc2l6ZSA9 IDQwOTYgICAgICAjIFRyYWNrIHVwIHRvIDQwOTYgdGFibGVzICh+MTYwIEtCKQordGFibGVfbXV0 YXRpb25fbWFwX3F1ZXJ5X2NhY2hlX3NpemUgPSA1MDAwMCAgIyBDYWNoZSA1MGsgcXVlcmllcyAo fjMxIE1CKQorICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgIDxwYXJhPgorICAgIFRvdGFsIHNoYXJl ZCBtZW1vcnkgcmVxdWlyZWQgZm9yIGFib3ZlIGNvbmZpZ3VyYXRpb246IGFwcHJveGltYXRlbHkg MzEuMiBNQiAoMzEgTUIgcXVlcnkgY2FjaGUgKyAwLjIgTUIgdGFibGUgbWFwICsgb3ZlcmhlYWQp LgorICAgIERlZmF1bHQgY29uZmlndXJhdGlvbiAoMTAwMDAgcXVlcnkgY2FjaGUgZW50cmllcywg MjA0OCB0YWJsZXMpIHJlcXVpcmVzIGFwcHJveGltYXRlbHkgNi40IE1CLgorICAgPC9wYXJhPgor ICA8L3NlY3QzPgorCisgPC9zZWN0Mj4KKwogPC9zZWN0MT4KZGlmZiAtLWdpdCBhL3NyYy9NYWtl ZmlsZS5hbSBiL3NyYy9NYWtlZmlsZS5hbQppbmRleCA0Njc4YWI1MzA1NWU4MjhhMzdiNjQ3Nzgw MTY0MGFmZjE3ZmY4NGE3Li5mYzY5YmI5OGM4OTA3ZDIzODU1ODM3Y2VmYWFkMGE5NzJiNGUyMTcx IDEwMDY0NAotLS0gYS9zcmMvTWFrZWZpbGUuYW0KKysrIGIvc3JjL01ha2VmaWxlLmFtCkBAIC0z NSw2ICszNSw3IEBAIHBncG9vbF9TT1VSQ0VTID0gbWFpbi9tYWluLmMgXAogCXJld3JpdGUvcG9v bF90aW1lc3RhbXAuYyBcCiAJcmV3cml0ZS9wb29sX2xvYmouYyBcCiAJdXRpbHMvcG9vbF9zZWxl Y3Rfd2Fsa2VyLmMgXAorCXV0aWxzL3Bvb2xfdGFibGVfbXV0YXRpb25fbWFwLmMgXAogCXV0aWxz L3N0cmxjcHkuYyBcCiAJdXRpbHMvcHNwcmludGYuYyBcCiAJdXRpbHMvcG9vbF9wYXJhbXMuYyBc CmRpZmYgLS1naXQgYS9zcmMvY29uZmlnL3Bvb2xfY29uZmlnX3ZhcmlhYmxlcy5jIGIvc3JjL2Nv bmZpZy9wb29sX2NvbmZpZ192YXJpYWJsZXMuYwppbmRleCA2OGFiYjdmNDFjYjk2ZDg1NmM4MjRh MTQ4ODQyNzQ4YmZiN2E0ZDEyLi4wOTkxOTFhZjc2MjljMGNhMTQ1NjI4ZTlhOWU5YWM5MmM0YmIy ZjZlIDEwMDY0NAotLS0gYS9zcmMvY29uZmlnL3Bvb2xfY29uZmlnX3ZhcmlhYmxlcy5jCisrKyBi L3NyYy9jb25maWcvcG9vbF9jb25maWdfdmFyaWFibGVzLmMKQEAgLTc4Myw2ICs3ODMsMTYgQEAg c3RhdGljIHN0cnVjdCBjb25maWdfYm9vbCBDb25maWd1cmVOYW1lc0Jvb2xbXSA9CiAJCU5VTEws IE5VTEwsIE5VTEwKIAl9LAogCisJeworCQl7InRhYmxlX211dGF0aW9uX21hcF9lbmFibGVkIiwg Q0ZHQ1hUX1JFTE9BRCwgTE9BRF9CQUxBTkNFX0NPTkZJRywKKwkJCSJFbmFibGUgaW4tbWVtb3J5 IHRyYWNraW5nIG9mIHJlY2VudGx5IHdyaXR0ZW4gdGFibGVzIHRvIGF2b2lkIHN0YWxlIHJlYWRz IGZyb20gcmVwbGljYXMiLAorCQkJQ09ORklHX1ZBUl9UWVBFX0JPT0wsIGZhbHNlLCAwCisJCX0s CisJCSZnX3Bvb2xfY29uZmlnLnRhYmxlX211dGF0aW9uX21hcF9lbmFibGVkLAorCQlmYWxzZSwK KwkJTlVMTCwgTlVMTCwgTlVMTAorCX0sCisKIAl7CiAJCXsiYXV0b19mYWlsYmFjayIsIENGR0NY VF9SRUxPQUQsIEZBSUxPVkVSX0NPTkZJRywKIAkJCSJFbmFibGVzIG5vZGVzIGF1dG9tYXRpY2Fs bHkgcmVhdHRhY2gsIHdoZW4gZGV0YWNoZWQgbm9kZSBjb250aW51ZSBzdHJlYW1pbmcgcmVwbGlj YXRpb24uIiwKQEAgLTE3NTcsNiArMTc2NywxNyBAQCBzdGF0aWMgc3RydWN0IGNvbmZpZ19pbnRf YXJyYXkgQ29uZmlndXJlTmFtZXNJbnRBcnJheVtdID0KIAogc3RhdGljIHN0cnVjdCBjb25maWdf ZG91YmxlIENvbmZpZ3VyZU5hbWVzRG91YmxlW10gPQogeworCXsKKwkJeyJ0YWJsZV9tdXRhdGlv bl9tYXBfdHRsX2ZhY3RvciIsIENGR0NYVF9SRUxPQUQsIExPQURfQkFMQU5DRV9DT05GSUcsCisJ CQkiVFRMIG11bHRpcGxpZXIgZm9yIHRhYmxlIG11dGF0aW9uIG1hcCAoVFRMID0gcmVwbGljYXRp b25fZGVsYXkgKiBmYWN0b3IpIiwKKwkJCUNPTkZJR19WQVJfVFlQRV9ET1VCTEUsIGZhbHNlLCAw CisJCX0sCisJCSZnX3Bvb2xfY29uZmlnLnRhYmxlX211dGF0aW9uX21hcF90dGxfZmFjdG9yLAor CQk1LjAsCQkJCQkvKiBib290IHZhbHVlOiA1eCByZXBsaWNhdGlvbiBkZWxheSAqLworCQkxLjAs IDEwMC4wLAkJCQkvKiBtaW4sIG1heCAqLworCQlOVUxMLCBOVUxMLCBOVUxMCisJfSwKKwogCS8q IEVuZC1vZi1saXN0IG1hcmtlciAqLwogCUVNUFRZX0NPTkZJR19ET1VCTEUKIH07CkBAIC0yMzU1 LDYgKzIzNzYsNjEgQEAgc3RhdGljIHN0cnVjdCBjb25maWdfaW50IENvbmZpZ3VyZU5hbWVzSW50 W10gPQogCQlOVUxMLCBOVUxMLCBOVUxMCiAJfSwKIAorCXsKKwkJeyJ0YWJsZV9tdXRhdGlvbl9t YXBfY29sZF9zdGFydF9kdXJhdGlvbiIsIENGR0NYVF9SRUxPQUQsIExPQURfQkFMQU5DRV9DT05G SUcsCisJCQkiRHVyYXRpb24gaW4gbWlsbGlzZWNvbmRzIHRvIGZvcmNlIHF1ZXJpZXMgdG8gcHJp bWFyeSBhZnRlciBjaGlsZCBwcm9jZXNzIHN0YXJ0cy4iLAorCQkJQ09ORklHX1ZBUl9UWVBFX0lO VCwgZmFsc2UsIEdVQ19VTklUX01TCisJCX0sCisJCSZnX3Bvb2xfY29uZmlnLnRhYmxlX211dGF0 aW9uX21hcF9jb2xkX3N0YXJ0X2R1cmF0aW9uLAorCQkyMDAwLAkJCQkJLyogMiBzZWNvbmRzICov CisJCTAsIDYwMDAwLAkJCQkvKiAwIHRvIDYwIHNlY29uZHMgKi8KKwkJTlVMTCwgTlVMTCwgTlVM TAorCX0sCisKKwl7CisJCXsidGFibGVfbXV0YXRpb25fbWFwX3RhYmxlX2J1Y2tldHMiLCBDRkdD WFRfSU5JVCwgTE9BRF9CQUxBTkNFX0NPTkZJRywKKwkJCSJOdW1iZXIgb2YgaGFzaCBidWNrZXRz IGZvciB0YWJsZSBtdXRhdGlvbiBtYXAuIiwKKwkJCUNPTkZJR19WQVJfVFlQRV9JTlQsIGZhbHNl LCAwCisJCX0sCisJCSZnX3Bvb2xfY29uZmlnLnRhYmxlX211dGF0aW9uX21hcF90YWJsZV9idWNr ZXRzLAorCQkxMDI0LAorCQk2NCwgNjU1MzYsCisJCU5VTEwsIE5VTEwsIE5VTEwKKwl9LAorCisJ eworCQl7InRhYmxlX211dGF0aW9uX21hcF90YWJsZV9zaXplIiwgQ0ZHQ1hUX0lOSVQsIExPQURf QkFMQU5DRV9DT05GSUcsCisJCQkiTWF4aW11bSBudW1iZXIgb2YgZW50cmllcyBpbiB0YWJsZSBt dXRhdGlvbiBtYXAuIiwKKwkJCUNPTkZJR19WQVJfVFlQRV9JTlQsIGZhbHNlLCAwCisJCX0sCisJ CSZnX3Bvb2xfY29uZmlnLnRhYmxlX211dGF0aW9uX21hcF90YWJsZV9zaXplLAorCQkyMDQ4LAor CQkxMjgsIDEzMTA3MiwKKwkJTlVMTCwgTlVMTCwgTlVMTAorCX0sCisKKwl7CisJCXsidGFibGVf bXV0YXRpb25fbWFwX3F1ZXJ5X2J1Y2tldHMiLCBDRkdDWFRfSU5JVCwgTE9BRF9CQUxBTkNFX0NP TkZJRywKKwkJCSJOdW1iZXIgb2YgaGFzaCBidWNrZXRzIGZvciBxdWVyeSBwYXJzZSBjYWNoZS4i LAorCQkJQ09ORklHX1ZBUl9UWVBFX0lOVCwgZmFsc2UsIDAKKwkJfSwKKwkJJmdfcG9vbF9jb25m aWcudGFibGVfbXV0YXRpb25fbWFwX3F1ZXJ5X2J1Y2tldHMsCisJCTIwNDgsCisJCTY0LCA2NTUz NiwKKwkJTlVMTCwgTlVMTCwgTlVMTAorCX0sCisKKwl7CisJCXsidGFibGVfbXV0YXRpb25fbWFw X3F1ZXJ5X2NhY2hlX3NpemUiLCBDRkdDWFRfSU5JVCwgTE9BRF9CQUxBTkNFX0NPTkZJRywKKwkJ CSJNYXhpbXVtIG51bWJlciBvZiBlbnRyaWVzIGluIHF1ZXJ5IHBhcnNlIGNhY2hlLiIsCisJCQlD T05GSUdfVkFSX1RZUEVfSU5ULCBmYWxzZSwgMAorCQl9LAorCQkmZ19wb29sX2NvbmZpZy50YWJs ZV9tdXRhdGlvbl9tYXBfcXVlcnlfY2FjaGVfc2l6ZSwKKwkJMTAwMDAsCisJCTEwMCwgMTAwMDAw MCwKKwkJTlVMTCwgTlVMTCwgTlVMTAorCX0sCisKIAkvKiBFbmQtb2YtbGlzdCBtYXJrZXIgKi8K IAlFTVBUWV9DT05GSUdfSU5UCiB9OwpkaWZmIC0tZ2l0IGEvc3JjL2NvbnRleHQvcG9vbF9xdWVy eV9jb250ZXh0LmMgYi9zcmMvY29udGV4dC9wb29sX3F1ZXJ5X2NvbnRleHQuYwppbmRleCA3Y2Y5 ODEzZWI3ZDU4Njc4YmM4NmEwYWFhMzhiZDNjNjQ0NWI2Njg3Li4yZGJiZWU4YWJjZThkYWZmNmE5 OGJmOGYyMDJiZGMxMGJmMzI0MDA2IDEwMDY0NAotLS0gYS9zcmMvY29udGV4dC9wb29sX3F1ZXJ5 X2NvbnRleHQuYworKysgYi9zcmMvY29udGV4dC9wb29sX3F1ZXJ5X2NvbnRleHQuYwpAQCAtMjks NiArMjksNyBAQAogI2luY2x1ZGUgInV0aWxzL3N0YXRpc3RpY3MuaCIKICNpbmNsdWRlICJ1dGls cy9wb29sX3NlbGVjdF93YWxrZXIuaCIKICNpbmNsdWRlICJ1dGlscy9wb29sX3N0cmVhbS5oIgor I2luY2x1ZGUgInV0aWxzL3Bvb2xfdGFibGVfbXV0YXRpb25fbWFwLmgiCiAjaW5jbHVkZSAiY29u dGV4dC9wb29sX3Nlc3Npb25fY29udGV4dC5oIgogI2luY2x1ZGUgImNvbnRleHQvcG9vbF9xdWVy eV9jb250ZXh0LmgiCiAjaW5jbHVkZSAicGFyc2VyL25vZGVzLmgiCkBAIC0yMDEwLDYgKzIwMTEs MTkgQEAgd2hlcmVfdG9fc2VuZF9tYWluX3JlcGxpY2EoUE9PTF9RVUVSWV9DT05URVhUICpxdWVy eV9jb250ZXh0LCBjaGFyICpxdWVyeSwgTm9kZQogCWlmIChkZXN0ID09IFBPT0xfUFJJTUFSWSkK IAl7CiAJCXBvb2xfc2V0X25vZGVfdG9fYmVfc2VudChxdWVyeV9jb250ZXh0LCBQUklNQVJZX05P REVfSUQpOworCisJCS8qCisJCSAqIFJlc29sdmUgdGFibGUgYW5kIGRhdGFiYXNlIE9JRHMgbm93 IHRvIHBvcHVsYXRlIHJlbGNhY2hlLgorCQkgKiBUaGlzIGF2b2lkcyBwb3RlbnRpYWwgaGFuZ3Mg aW4gQ29tbWFuZENvbXBsZXRlIHdoZXJlIHdlIHNob3VsZG4ndAorCQkgKiBiZSBydW5uaW5nIG5l dyBxdWVyaWVzIGFnYWluc3QgdGhlIGJhY2tlbmQuCisJCSAqLworCQlpZiAocG9vbF9jb25maWct PnRhYmxlX211dGF0aW9uX21hcF9lbmFibGVkICYmCisJCQkoSXNBKG5vZGUsIEluc2VydFN0bXQp IHx8IElzQShub2RlLCBVcGRhdGVTdG10KSB8fCBJc0Eobm9kZSwgRGVsZXRlU3RtdCkpKQorCQl7 CisJCQlpbnQgKm9pZHM7CisJCQlwb29sX2V4dHJhY3RfdGFibGVfb2lkcyhub2RlLCAmb2lkcyk7 CisJCQlwb29sX3RhYmxlX211dGF0aW9uX21hcF9nZXRfZGF0YWJhc2Vfb2lkKCk7CisJCX0KIAl9 CiAJLyogU2hvdWxkIGJlIHNlbnQgdG8gYm90aCBwcmltYXJ5IGFuZCBzdGFuZGJ5PyAqLwogCWVs c2UgaWYgKGRlc3QgPT0gUE9PTF9CT1RIKQpAQCAtMjEzOSw2ICsyMTUzLDEwNyBAQCB3aGVyZV90 b19zZW5kX21haW5fcmVwbGljYShQT09MX1FVRVJZX0NPTlRFWFQgKnF1ZXJ5X2NvbnRleHQsIGNo YXIgKnF1ZXJ5LCBOb2RlCiAJCQkJewogCQkJCQlwb29sX3NldF9ub2RlX3RvX2JlX3NlbnQocXVl cnlfY29udGV4dCwgUFJJTUFSWV9OT0RFX0lEKTsKIAkJCQl9CisJCQkJLyoKKwkJCQkgKiBDaGVj ayB0YWJsZSBtdXRhdGlvbiBtYXAgZm9yIHJlY2VudGx5IHdyaXR0ZW4gdGFibGVzLgorCQkJCSAq IElmIGluIGNvbGQgc3RhcnQgb3IgYW55IHRhYmxlIHdhcyByZWNlbnRseSB3cml0dGVuLAorCQkJ CSAqIHJvdXRlIHRvIHByaW1hcnkgdG8gYXZvaWQgc3RhbGUgcmVhZHMuCisJCQkJICovCisJCQkJ ZWxzZSBpZiAocG9vbF9jb25maWctPnRhYmxlX211dGF0aW9uX21hcF9lbmFibGVkKQorCQkJCXsK KwkJCQkJYm9vbAkJZm9yY2VfcHJpbWFyeSA9IGZhbHNlOworCisJCQkJCS8qIER1cmluZyBjb2xk IHN0YXJ0LCByb3V0ZSBldmVyeXRoaW5nIHRvIHByaW1hcnkgKi8KKwkJCQkJaWYgKHBvb2xfdGFi bGVfbXV0YXRpb25fbWFwX2luX2NvbGRfc3RhcnQoKSkKKwkJCQkJeworCQkJCQkJZXJlcG9ydChE RUJVRzEsCisJCQkJCQkJCShlcnJtc2coImNvdWxkIG5vdCBsb2FkIGJhbGFuY2UgYmVjYXVzZSBv ZiB0YWJsZSBtdXRhdGlvbiBtYXAgY29sZCBzdGFydCIpLAorCQkJCQkJCQkgZXJyZGV0YWlsKCJk ZXN0aW5hdGlvbiA9IFBSSU1BUlkgZm9yIHF1ZXJ5PSBcIiVzXCIiLCBxdWVyeSkpKTsKKwkJCQkJ CWZvcmNlX3ByaW1hcnkgPSB0cnVlOworCQkJCQl9CisJCQkJCWVsc2UKKwkJCQkJeworCQkJCQkv KiBFeHRyYWN0IHRhYmxlIG9pZHMgYW5kIGNoZWNrIGlmIGFueSBhcmUgc3RhbGUgKi8KKwkJCQkJ U2VsZWN0Q29udGV4dCBjdHg7CisJCQkJCWludAkJCWRib2lkOworCQkJCQlpbnQJCQludW1fb2lk czsKKwkJCQkJaW50CQkJaTsKKworCQkJCQltZW1zZXQoJmN0eCwgMCwgc2l6ZW9mKGN0eCkpOwor CQkJCQludW1fb2lkcyA9IHBvb2xfZXh0cmFjdF90YWJsZV9vaWRzX2Zyb21fc2VsZWN0X3N0bXQo bm9kZSwgJmN0eCk7CisJCQkJCWlmIChudW1fb2lkcyA+IDApCisJCQkJCXsKKwkJCQkJCWRib2lk ID0gcG9vbF90YWJsZV9tdXRhdGlvbl9tYXBfZ2V0X2RhdGFiYXNlX29pZCgpOworCisJCQkJCQlp ZiAoZGJvaWQgPD0gMCkKKwkJCQkJCXsKKwkJCQkJCQllcmVwb3J0KERFQlVHMSwKKwkJCQkJCQkJ CShlcnJtc2coImNvdWxkIG5vdCBsb2FkIGJhbGFuY2UgYmVjYXVzZSBkYXRhYmFzZSBvaWQgd2Fz IHVuYXZhaWxhYmxlIiksCisJCQkJCQkJCQkgZXJyZGV0YWlsKCJkZXN0aW5hdGlvbiA9IFBSSU1B UlkgZm9yIHF1ZXJ5PSBcIiVzXCIiLCBxdWVyeSkpKTsKKwkJCQkJCQlmb3JjZV9wcmltYXJ5ID0g dHJ1ZTsKKwkJCQkJCX0KKwkJCQkJCWVsc2UKKwkJCQkJCXsKKwkJCQkJCQlmb3IgKGkgPSAwOyBp IDwgbnVtX29pZHM7IGkrKykKKwkJCQkJCQl7CisJCQkJCQkJCWlmIChwb29sX3RhYmxlX211dGF0 aW9uX21hcF90YWJsZV9pc19zdGFsZShjdHgudGFibGVfb2lkc1tpXSwgZGJvaWQpKQorCQkJCQkJ CQl7CisJCQkJCQkJCQllcmVwb3J0KERFQlVHMSwKKwkJCQkJCQkJCQkJKGVycm1zZygiY291bGQg bm90IGxvYWQgYmFsYW5jZSBiZWNhdXNlIHRhYmxlIFwiJXNcIiB3YXMgcmVjZW50bHkgd3JpdHRl biIsCisJCQkJCQkJCQkJCQkJY3R4LnRhYmxlX25hbWVzW2ldKSwKKwkJCQkJCQkJCQkJIGVycmRl dGFpbCgiZGVzdGluYXRpb24gPSBQUklNQVJZIGZvciBxdWVyeT0gXCIlc1wiIiwgcXVlcnkpKSk7 CisJCQkJCQkJCQlmb3JjZV9wcmltYXJ5ID0gdHJ1ZTsKKwkJCQkJCQkJCWJyZWFrOworCQkJCQkJ CQl9CisJCQkJCQkJfQorCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCisJCQkJCWlmIChmb3JjZV9w cmltYXJ5KQorCQkJCQl7CisJCQkJCQlwb29sX3NldF9ub2RlX3RvX2JlX3NlbnQocXVlcnlfY29u dGV4dCwgUFJJTUFSWV9OT0RFX0lEKTsKKwkJCQkJfQorCQkJCQllbHNlCisJCQkJCXsKKwkJCQkJ CS8qIFByb2NlZWQgd2l0aCBsb2FkIGJhbGFuY2luZyAqLworCQkJCQkJaWYgKHBvb2xfY29uZmln LT5zdGF0ZW1lbnRfbGV2ZWxfbG9hZF9iYWxhbmNlKQorCQkJCQkJeworCQkJCQkJCXNlc3Npb25f Y29udGV4dC0+bG9hZF9iYWxhbmNlX25vZGVfaWQgPSBzZWxlY3RfbG9hZF9iYWxhbmNpbmdfbm9k ZSgpOworCQkJCQkJfQorCisJCQkJCQkvKgorCQkJCQkJICogQXMgc3RyZWFtaW5nIHJlcGxpY2F0 aW9uIGRlbGF5IGlzIHRvbyBtdWNoLCBpZgorCQkJCQkJICogcHJlZmVyX2xvd2VyX2RlbGF5X3N0 YW5kYnkgaXMgdHJ1ZSB0aGVuIGVsZWN0IG5ldyBsb2FkCisJCQkJCQkgKiBiYWxhbmNlIG5vZGUg d2hpY2ggaXMgbG93ZXN0IGRlbGF5ZWQsIGZhbHNlIHRoZW4gc2VuZAorCQkJCQkJICogdG8gdGhl IHByaW1hcnkuCisJCQkJCQkgKi8KKwkJCQkJCWlmIChTVFJFQU0gJiYgY2hlY2tfcmVwbGljYXRp b25fZGVsYXkoc2Vzc2lvbl9jb250ZXh0LT5sb2FkX2JhbGFuY2Vfbm9kZV9pZCkpCisJCQkJCQl7 CisJCQkJCQkJZXJlcG9ydChERUJVRzEsCisJCQkJCQkJCQkoZXJybXNnKCJjb3VsZCBub3QgbG9h ZCBiYWxhbmNlIGJlY2F1c2Ugb2YgdG9vIG11Y2ggcmVwbGljYXRpb24gZGVsYXkiKSwKKwkJCQkJ CQkJCSBlcnJkZXRhaWwoImRlc3RpbmF0aW9uID0gJWQgZm9yIHF1ZXJ5PSBcIiVzXCIiLCBkZXN0 LCBxdWVyeSkpKTsKKworCQkJCQkJCWlmIChwb29sX2NvbmZpZy0+cHJlZmVyX2xvd2VyX2RlbGF5 X3N0YW5kYnkpCisJCQkJCQkJeworCQkJCQkJCQlpbnQJCQluZXdfbG9hZF9iYWxhbmNpbmdfbm9k ZSA9IHNlbGVjdF9sb2FkX2JhbGFuY2luZ19ub2RlKCk7CisKKwkJCQkJCQkJc2Vzc2lvbl9jb250 ZXh0LT5sb2FkX2JhbGFuY2Vfbm9kZV9pZCA9IG5ld19sb2FkX2JhbGFuY2luZ19ub2RlOworCQkJ CQkJCQlzZXNzaW9uX2NvbnRleHQtPnF1ZXJ5X2NvbnRleHQtPmxvYWRfYmFsYW5jZV9ub2RlX2lk ID0gc2Vzc2lvbl9jb250ZXh0LT5sb2FkX2JhbGFuY2Vfbm9kZV9pZDsKKwkJCQkJCQkJcG9vbF9z ZXRfbm9kZV90b19iZV9zZW50KHF1ZXJ5X2NvbnRleHQsIHNlc3Npb25fY29udGV4dC0+cXVlcnlf Y29udGV4dC0+bG9hZF9iYWxhbmNlX25vZGVfaWQpOworCQkJCQkJCX0KKwkJCQkJCQllbHNlCisJ CQkJCQkJeworCQkJCQkJCQlwb29sX3NldF9ub2RlX3RvX2JlX3NlbnQocXVlcnlfY29udGV4dCwg UFJJTUFSWV9OT0RFX0lEKTsKKwkJCQkJCQl9CisJCQkJCQl9CisJCQkJCQllbHNlCisJCQkJCQl7 CisJCQkJCQkJc2Vzc2lvbl9jb250ZXh0LT5xdWVyeV9jb250ZXh0LT5sb2FkX2JhbGFuY2Vfbm9k ZV9pZCA9IHNlc3Npb25fY29udGV4dC0+bG9hZF9iYWxhbmNlX25vZGVfaWQ7CisJCQkJCQkJcG9v bF9zZXRfbm9kZV90b19iZV9zZW50KHF1ZXJ5X2NvbnRleHQsCisJCQkJCQkJCQkJCQkJIHNlc3Np b25fY29udGV4dC0+cXVlcnlfY29udGV4dC0+bG9hZF9iYWxhbmNlX25vZGVfaWQpOworCQkJCQkJ fQorCQkJCQl9CisJCQkJfQogCQkJCWVsc2UKIAkJCQl7CiAJCQkJCWlmIChwb29sX2NvbmZpZy0+ c3RhdGVtZW50X2xldmVsX2xvYWRfYmFsYW5jZSkKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3Bv b2wuaCBiL3NyYy9pbmNsdWRlL3Bvb2wuaAppbmRleCBlYTZmODdlMTIwYWY4NjZiOGVkM2ExNTc5 MGQ5ZDhhOGUwMDlmZTkxLi5jMGQ4MTcwYThkNmMyM2FmZGFhMWUzMGRjZjdjNGJkNGQ4OGU3ZWRk IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9wb29sLmgKKysrIGIvc3JjL2luY2x1ZGUvcG9vbC5o CkBAIC00MjQsNyArNDI0LDcgQEAgdHlwZWRlZiBlbnVtCiAjZGVmaW5lIE1pbih4LCB5KQkJKCh4 KSA8ICh5KSA/ICh4KSA6ICh5KSkKIAogCi0jZGVmaW5lIE1BWF9OVU1fU0VNQVBIT1JFUwkJOAor I2RlZmluZSBNQVhfTlVNX1NFTUFQSE9SRVMJCTEwCiAjZGVmaW5lIENPTk5fQ09VTlRFUl9TRU0J CTAKICNkZWZpbmUgUkVRVUVTVF9JTkZPX1NFTQkJMQogI2RlZmluZSBRVUVSWV9DQUNIRV9TVEFU U19TRU0JMgpAQCAtNDM0LDYgKzQzNCw4IEBAIHR5cGVkZWYgZW51bQogI2RlZmluZSBGT0xMT1df UFJJTUFSWV9TRU0JCTYKICNkZWZpbmUgTUFJTl9FWElUX0hBTkRMRVJfU0VNCTcJLyogdXNlZCBp biBleGl0X2hhbmRlciBpbiBwZ3Bvb2wgbWFpbgogCQkJCQkJCQkJICogcHJvY2VzcyAqLworI2Rl ZmluZSBUQUJMRV9NVVRBVElPTl9NQVBfVEFCTEVfU0VNCTgKKyNkZWZpbmUgVEFCTEVfTVVUQVRJ T05fTUFQX1FVRVJZX1NFTQk5CiAjZGVmaW5lIE1BWF9SRVFVRVNUX1FVRVVFX1NJWkUJMTAKIAog I2RlZmluZSBNQVhfU0VDX1dBSVRfRk9SX0NMVVNURVJfVFJBTlNBQ1RJT04gMTAgLyogdGltZSBp biBzZWNvbmRzIHRvIGtlZXAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3Bvb2xfY29uZmlnLmgg Yi9zcmMvaW5jbHVkZS9wb29sX2NvbmZpZy5oCmluZGV4IDc0MWRlNmNjNWZjMzM2OGY4MTNkNmI2 ZWZhNjhlYjdmOGE3OTUwNmIuLmU2YzcyNzgyM2RlZGVlZGQwMjI1NDIwYjY2YmU4MzgyZjViYjgz ZmUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3Bvb2xfY29uZmlnLmgKKysrIGIvc3JjL2luY2x1 ZGUvcG9vbF9jb25maWcuaApAQCAtMzY1LDYgKzM2NSwxNiBAQCB0eXBlZGVmIHN0cnVjdAogCQkJ CQkJCQkJICogcmVwbGljYXRpb24gY2hlY2sgKi8KIAljaGFyCSAgICpyZXBsaWNhdGlvbl9kZWxh eV9zb3VyY2VfY21kOwkvKiBleHRlcm5hbCBjb21tYW5kIGZvciByZXBsaWNhdGlvbiBkZWxheSAq LwogCWludAkJCXJlcGxpY2F0aW9uX2RlbGF5X3NvdXJjZV90aW1lb3V0OwkvKiB0aW1lb3V0IGZv ciBleHRlcm5hbCBjb21tYW5kIGluIHNlY29uZHMgKi8KKworCS8qIFRhYmxlIG11dGF0aW9uIG1h cCBjb25maWd1cmF0aW9uIGZvciB0cmFja2luZyByZWNlbnRseSB3cml0dGVuIHRhYmxlcyAqLwor CWJvb2wJCXRhYmxlX211dGF0aW9uX21hcF9lbmFibGVkOwkJCS8qIEVuYWJsZSBpbi1tZW1vcnkg dGFibGUgdHJhY2tpbmcgKi8KKwlkb3VibGUJCXRhYmxlX211dGF0aW9uX21hcF90dGxfZmFjdG9y OwkJLyogVFRMIG11bHRpcGxpZXIgZm9yIHJlcGxpY2F0aW9uIGRlbGF5ICovCisJaW50CQkJdGFi bGVfbXV0YXRpb25fbWFwX2NvbGRfc3RhcnRfZHVyYXRpb247CS8qIENvbGQgc3RhcnQgZHVyYXRp b24gaW4gbXMgKi8KKwlpbnQJCQl0YWJsZV9tdXRhdGlvbl9tYXBfdGFibGVfYnVja2V0czsJLyog TnVtYmVyIG9mIGhhc2ggYnVja2V0cyBmb3IgdGFibGUgbWFwICovCisJaW50CQkJdGFibGVfbXV0 YXRpb25fbWFwX3RhYmxlX3NpemU7CQkvKiBNYXggZW50cmllcyBpbiB0YWJsZSBtYXAgKi8KKwlp bnQJCQl0YWJsZV9tdXRhdGlvbl9tYXBfcXVlcnlfYnVja2V0czsJLyogTnVtYmVyIG9mIGhhc2gg YnVja2V0cyBmb3IgcXVlcnkgY2FjaGUgKi8KKwlpbnQJCQl0YWJsZV9tdXRhdGlvbl9tYXBfcXVl cnlfY2FjaGVfc2l6ZTsJLyogTWF4IGVudHJpZXMgaW4gcXVlcnkgY2FjaGUgKi8KKwogCWNoYXIJ ICAgKmZhaWxvdmVyX2NvbW1hbmQ7CS8qIGV4ZWN1dGUgY29tbWFuZCB3aGVuIGZhaWxvdmVyIGhh cHBlbnMgKi8KIAljaGFyCSAgICpmb2xsb3dfcHJpbWFyeV9jb21tYW5kOyAvKiBleGVjdXRlIGNv bW1hbmQgd2hlbiBmYWlsb3ZlciBpcwogCQkJCQkJCQkJCSAqIGVuZGVkICovCmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS91dGlscy9wb29sX3RhYmxlX211dGF0aW9uX21hcC5oIGIvc3JjL2luY2x1 ZGUvdXRpbHMvcG9vbF90YWJsZV9tdXRhdGlvbl9tYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40Yzk2Y2I5MDg1 MTA3YTI2ODJiZTI5NDhiODNmODM4MzVmZTU1NWM4Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2lu Y2x1ZGUvdXRpbHMvcG9vbF90YWJsZV9tdXRhdGlvbl9tYXAuaApAQCAtMCwwICsxLDIzNyBAQAor LyogLSotcGdzcWwtYy0qLSAqLworLyoKKyAqIHBncG9vbDogYSBsYW5ndWFnZSBpbmRlcGVuZGVu dCBjb25uZWN0aW9uIHBvb2wgc2VydmVyIGZvciBQb3N0Z3JlU1FMCisgKiB3cml0dGVuIGJ5IFRh dHN1byBJc2hpaQorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMy0yMDI2CVBnUG9vbCBHbG9iYWwg RGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5 LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZAorICogaXRzIGRvY3VtZW50YXRpb24g Zm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBpcyBoZXJlYnkKKyAqIGdyYW50ZWQsIHBy b3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbAorICog Y29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1p c3Npb24KKyAqIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLCBhbmQg dGhhdCB0aGUgbmFtZSBvZiB0aGUKKyAqIGF1dGhvciBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2lu ZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0bworICogZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0 d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yCisgKiBwZXJtaXNzaW9uLiBUaGUg YXV0aG9yIG1ha2VzIG5vIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUKKyAqIHN1aXRhYmlsaXR5 IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzCisg KiBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKgorICogcG9vbF90 YWJsZV9tdXRhdGlvbl9tYXAuaDogSW4tbWVtb3J5IHRyYWNraW5nIG9mIHJlY2VudGx5IHdyaXR0 ZW4gdGFibGVzCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gYXZvaWQgc3RhbGUg cmVhZHMgZnJvbSByZXBsaWNhcyBkdXJpbmcgcmVwbGljYXRpb24gbGFnCisgKi8KKworI2lmbmRl ZiBQT09MX1RBQkxFX01VVEFUSU9OX01BUF9ICisjZGVmaW5lIFBPT0xfVEFCTEVfTVVUQVRJT05f TUFQX0gKKworI2luY2x1ZGUgInBvb2wuaCIKKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorCisvKgor ICogTWF4aW11bSB0YWJsZSBuYW1lIGxlbmd0aCBpbmNsdWRpbmcgc2NoZW1hOiAic2NoZW1hIi4i dGFibGUiCisgKiBVc2luZyBOQU1FREFUQUxFTiAqIDIgKyA0IGZvciBxdW90ZXMgYW5kIGRvdAor ICovCisjZGVmaW5lIFRBQkxFX01VVEFUSU9OX01BUF9UQUJMRV9OQU1FX0xFTgkoTkFNRURBVEFM RU4gKiAyICsgNCkKKworLyoKKyAqIE1heGltdW0gbnVtYmVyIG9mIHRhYmxlcyB3ZSB0cmFjayBw ZXIgcXVlcnkKKyAqLworI2RlZmluZSBUQUJMRV9NVVRBVElPTl9NQVBfTUFYX1RBQkxFU19QRVJf UVVFUlkJOAorCisvKgorICogSW52YWxpZCBpbmRleCBtYXJrZXIgZm9yIGxpbmtlZCBsaXN0cwor ICovCisjZGVmaW5lIFRBQkxFX01VVEFUSU9OX01BUF9JTlZBTElEX0lOREVYCSgtMSkKKworLyoK KyAqIERlZmF1bHQgVFRMIGluIG1pY3Jvc2Vjb25kcyAoMTAwbXMpIHVzZWQgd2hlbiByZXBsaWNh dGlvbiBkZWxheSBpcyB1bmtub3duCisgKi8KKyNkZWZpbmUgVEFCTEVfTVVUQVRJT05fTUFQX0RF RkFVTFRfVFRMX1VTCSgxMDAgKiAxMDAwKQorCisvKgorICogRW50cnkgaW4gdGhlIHRhYmxlIG11 dGF0aW9uIGhhc2ggdGFibGUgKGtleWVkIGJ5IHRhYmxlL2RhdGFiYXNlIG9pZHMpCisgKi8KK3R5 cGVkZWYgc3RydWN0IFRhYmxlTXV0YXRpb25FbnRyeQoreworCWludAkJCXRhYmxlX29pZDsJCQkJ LyogVGFibGUgb2lkICovCisJaW50CQkJZGJvaWQ7CQkJCQkvKiBEYXRhYmFzZSBvaWQgKi8KKwlz dHJ1Y3QgdGltZXZhbCBsYXN0X3dyaXRlX3RpbWU7CQkvKiBXaGVuIHRoZSB0YWJsZSB3YXMgbGFz dCB3cml0dGVuICovCisJdWludDMyCQloYXNoOwkJCQkJLyogUHJlLWNvbXB1dGVkIGhhc2ggdmFs dWUgKi8KKwlpbnQJCQluZXh0OwkJCQkJLyogTmV4dCBlbnRyeSBpbiBjb2xsaXNpb24gY2hhaW4g KC0xIGlmIG5vbmUpICovCisJYm9vbAkJaW5fdXNlOwkJCQkJLyogSXMgdGhpcyBlbnRyeSBpbiB1 c2U/ICovCit9IFRhYmxlTXV0YXRpb25FbnRyeTsKKworLyoKKyAqIEhlYWRlciBmb3IgdGhlIHRh YmxlIG11dGF0aW9uIGhhc2ggdGFibGUgaW4gc2hhcmVkIG1lbW9yeQorICovCit0eXBlZGVmIHN0 cnVjdCBUYWJsZU11dGF0aW9uSGFzaFRhYmxlCit7CisJaW50CQkJbnVtX2J1Y2tldHM7CQkvKiBO dW1iZXIgb2YgaGFzaCBidWNrZXRzICovCisJaW50CQkJbWF4X2VudHJpZXM7CQkvKiBNYXhpbXVt IGVudHJpZXMgYWxsb3dlZCAqLworCWludAkJCW51bV9lbnRyaWVzOwkJLyogQ3VycmVudCBudW1i ZXIgb2YgZW50cmllcyAqLworCWludAkJCWZyZWVfbGlzdF9oZWFkOwkJLyogSGVhZCBvZiBmcmVl IGVudHJ5IGxpc3QgKi8KKwkvKiBGbGV4aWJsZSBhcnJheSBtZW1iZXJzIGZvbGxvdyBpbiBzaGFy ZWQgbWVtb3J5OgorCSAqIGludCBidWNrZXRzW251bV9idWNrZXRzXTsKKwkgKiBUYWJsZU11dGF0 aW9uRW50cnkgZW50cmllc1ttYXhfZW50cmllc107CisJICovCit9IFRhYmxlTXV0YXRpb25IYXNo VGFibGU7CisKKy8qCisgKiBFbnRyeSBpbiB0aGUgcXVlcnkgcGFyc2UgY2FjaGUKKyAqLwordHlw ZWRlZiBzdHJ1Y3QgUXVlcnlQYXJzZUVudHJ5Cit7CisJdWludDY0CQlxdWVyeV9oYXNoOwkJCS8q IEhhc2ggb2Ygbm9ybWFsaXplZCBxdWVyeSAqLworCWJvb2wJCWlzX3dyaXRlOwkJCS8qIFRydWUg aWYgSU5TRVJUL1VQREFURS9ERUxFVEUgKi8KKwlpbnQJCQludW1fdGFibGVzOwkJCS8qIE51bWJl ciBvZiB0YWJsZXMgaW4gcXVlcnkgKi8KKwljaGFyCQl0YWJsZV9uYW1lc1tUQUJMRV9NVVRBVElP Tl9NQVBfTUFYX1RBQkxFU19QRVJfUVVFUlldW1RBQkxFX01VVEFUSU9OX01BUF9UQUJMRV9OQU1F X0xFTl07CisJaW50CQkJbmV4dDsJCQkJLyogTmV4dCBlbnRyeSBpbiBjb2xsaXNpb24gY2hhaW4g Ki8KKwlpbnQJCQlscnVfcHJldjsJCQkvKiBQcmV2aW91cyBpbiBMUlUgbGlzdCAqLworCWludAkJ CWxydV9uZXh0OwkJCS8qIE5leHQgaW4gTFJVIGxpc3QgKi8KKwlib29sCQlpbl91c2U7CQkJCS8q IElzIHRoaXMgZW50cnkgaW4gdXNlPyAqLworfSBRdWVyeVBhcnNlRW50cnk7CisKKy8qCisgKiBI ZWFkZXIgZm9yIHRoZSBxdWVyeSBwYXJzZSBjYWNoZSBpbiBzaGFyZWQgbWVtb3J5CisgKi8KK3R5 cGVkZWYgc3RydWN0IFF1ZXJ5UGFyc2VDYWNoZQoreworCWludAkJCW51bV9idWNrZXRzOwkJLyog TnVtYmVyIG9mIGhhc2ggYnVja2V0cyAqLworCWludAkJCW1heF9lbnRyaWVzOwkJLyogTWF4aW11 bSBlbnRyaWVzIGFsbG93ZWQgKi8KKwlpbnQJCQludW1fZW50cmllczsJCS8qIEN1cnJlbnQgbnVt YmVyIG9mIGVudHJpZXMgKi8KKwlpbnQJCQlmcmVlX2xpc3RfaGVhZDsJCS8qIEhlYWQgb2YgZnJl ZSBlbnRyeSBsaXN0ICovCisJaW50CQkJbHJ1X2hlYWQ7CQkJLyogTW9zdCByZWNlbnRseSB1c2Vk ICovCisJaW50CQkJbHJ1X3RhaWw7CQkJLyogTGVhc3QgcmVjZW50bHkgdXNlZCAqLworCS8qIEZs ZXhpYmxlIGFycmF5IG1lbWJlcnMgZm9sbG93IGluIHNoYXJlZCBtZW1vcnk6CisJICogaW50IGJ1 Y2tldHNbbnVtX2J1Y2tldHNdOworCSAqIFF1ZXJ5UGFyc2VFbnRyeSBlbnRyaWVzW21heF9lbnRy aWVzXTsKKwkgKi8KK30gUXVlcnlQYXJzZUNhY2hlOworCisvKgorICogR2xvYmFsIHN0YXRlIGZv ciB0YWJsZSBtdXRhdGlvbiBtYXAgZmVhdHVyZQorICovCit0eXBlZGVmIHN0cnVjdCBUYWJsZU11 dGF0aW9uTWFwU3RhdGUKK3sKKwlib29sCQlpbml0aWFsaXplZDsJCQkvKiBIYXMgc2hhcmVkIG1l bW9yeSBiZWVuIGluaXRpYWxpemVkPyAqLworCXVpbnQ2NAkJY3VycmVudF90dGxfdXM7CQkJLyog Q3VycmVudCBUVEwgaW4gbWljcm9zZWNvbmRzICovCisJc3RydWN0IHRpbWV2YWwgdHRsX2xhc3Rf dXBkYXRlZDsJLyogV2hlbiBUVEwgd2FzIGxhc3QgdXBkYXRlZCAqLworCXN0cnVjdCB0aW1ldmFs IGxhc3RfY2xlYW51cF90aW1lOwkvKiBXaGVuIGxhc3QgZXhwaXJlZCBjbGVhbnVwIHJhbiAqLwor CXN0cnVjdCB0aW1ldmFsIGdsb2JhbF9jb2xkX3N0YXJ0X3VudGlsOwkvKiBHbG9iYWwgY29sZCBz dGFydCBlbmQgdGltZSAqLworCXZvbGF0aWxlIHVpbnQzMiBzdGF0c19xdWVyaWVzX2NoZWNrZWQ7 CS8qIE51bWJlciBvZiBxdWVyaWVzIGNoZWNrZWQgKi8KKwl2b2xhdGlsZSB1aW50MzIgc3RhdHNf Zm9yY2VkX3ByaW1hcnk7CQkvKiBRdWVyaWVzIGZvcmNlZCB0byBwcmltYXJ5ICovCisJdm9sYXRp bGUgdWludDMyIHN0YXRzX2FsbG93ZWRfcmVwbGljYTsJLyogUXVlcmllcyBhbGxvd2VkIHRvIHJl cGxpY2EgKi8KK30gVGFibGVNdXRhdGlvbk1hcFN0YXRlOworCisvKgorICogTWFpbiBzaGFyZWQg bWVtb3J5IHN0cnVjdHVyZSBjb250YWluaW5nIGFsbCBjb21wb25lbnRzCisgKi8KK3R5cGVkZWYg c3RydWN0IFRhYmxlTXV0YXRpb25NYXBTaG1lbQoreworCVRhYmxlTXV0YXRpb25NYXBTdGF0ZQlz dGF0ZTsKKwlUYWJsZU11dGF0aW9uSGFzaFRhYmxlCSp0YWJsZV9tYXA7CisJUXVlcnlQYXJzZUNh Y2hlCQkqcXVlcnlfY2FjaGU7Cit9IFRhYmxlTXV0YXRpb25NYXBTaG1lbTsKKworLyogLS0tLS0t LS0tLS0tLS0tLQorICogUHVibGljIEFQSSBmdW5jdGlvbnMKKyAqIC0tLS0tLS0tLS0tLS0tLS0K KyAqLworCisvKgorICogSW5pdGlhbGl6ZSBzaGFyZWQgbWVtb3J5IHN0cnVjdHVyZXMgZm9yIHRh YmxlIG11dGF0aW9uIG1hcC4KKyAqIENhbGxlZCBmcm9tIHBncG9vbF9tYWluLmMgYWZ0ZXIgcG9v bF9pbml0X3Bvb2xfaW5mbygpLgorICovCitleHRlcm4gdm9pZCBwb29sX3RhYmxlX211dGF0aW9u X21hcF9pbml0KHZvaWQpOworCisvKgorICogSW5pdGlhbGl6ZSBwZXItY2hpbGQgcHJvY2VzcyBz dGF0ZSBmb3IgdGFibGUgbXV0YXRpb24gbWFwLgorICogQ2FsbGVkIGZyb20gY2hpbGQuYyB3aGVu IGEgbmV3IGNoaWxkIHByb2Nlc3Mgc3RhcnRzLgorICogU2V0cyB1cCBjb2xkIHN0YXJ0IHRyYWNr aW5nLgorICovCitleHRlcm4gdm9pZCBwb29sX3RhYmxlX211dGF0aW9uX21hcF9jaGlsZF9pbml0 KHZvaWQpOworCisvKgorICogQ2hlY2sgaWYgdGhlIGNoaWxkIHByb2Nlc3MgaXMgaW4gY29sZCBz dGFydCBwZXJpb2QuCisgKiBEdXJpbmcgY29sZCBzdGFydCwgYWxsIHF1ZXJpZXMgYXJlIHJvdXRl ZCB0byBwcmltYXJ5LgorICogUmV0dXJucyB0cnVlIGlmIGluIGNvbGQgc3RhcnQsIGZhbHNlIG90 aGVyd2lzZS4KKyAqLworZXh0ZXJuIGJvb2wgcG9vbF90YWJsZV9tdXRhdGlvbl9tYXBfaW5fY29s ZF9zdGFydCh2b2lkKTsKKworLyoKKyAqIFRyaWdnZXIgYSBnbG9iYWwgY29sZCBzdGFydCBwZXJp b2QgZm9yIGFsbCBwcm9jZXNzZXMuCisgKiBVc2VkIGFmdGVyIHdhdGNoZG9nIGxlYWRlciBjaGFu Z2UgdG8gYXZvaWQgc3RhbGUgcmVhZHMuCisgKi8KK2V4dGVybiB2b2lkIHBvb2xfdGFibGVfbXV0 YXRpb25fbWFwX3RyaWdnZXJfZ2xvYmFsX2NvbGRfc3RhcnQodm9pZCk7CisKKy8qCisgKiBHZXQg b2lkIG9mIGN1cnJlbnQgZGF0YWJhc2UuCisgKi8KK2V4dGVybiBpbnQgcG9vbF90YWJsZV9tdXRh dGlvbl9tYXBfZ2V0X2RhdGFiYXNlX29pZCh2b2lkKTsKKworLyoKKyAqIENoZWNrIGlmIGEgdGFi bGUgd2FzIHJlY2VudGx5IHdyaXR0ZW4gdG8gKGlzICJzdGFsZSIpLgorICogSWYgc3RhbGUsIHJl YWRzIGZyb20gdGhpcyB0YWJsZSBzaG91bGQgZ28gdG8gcHJpbWFyeS4KKyAqIFJldHVybnMgdHJ1 ZSBpZiB0YWJsZSBpcyBzdGFsZSAocmVjZW50bHkgd3JpdHRlbiksIGZhbHNlIG90aGVyd2lzZS4K KyAqLworZXh0ZXJuIGJvb2wgcG9vbF90YWJsZV9tdXRhdGlvbl9tYXBfdGFibGVfaXNfc3RhbGUo aW50IHRhYmxlX29pZCwgaW50IGRib2lkKTsKKworLyoKKyAqIE1hcmsgdGFibGVzIGFzIHJlY2Vu dGx5IHdyaXR0ZW4uCisgKiBDYWxsZWQgYWZ0ZXIgSU5TRVJUL1VQREFURS9ERUxFVEUgcXVlcmll cyBjb21wbGV0ZS4KKyAqIHRhYmxlX29pZHM6IGFycmF5IG9mIHRhYmxlIG9pZHMKKyAqIG51bV90 YWJsZXM6IG51bWJlciBvZiB0YWJsZXMgaW4gYXJyYXkKKyAqIGRib2lkOiBkYXRhYmFzZSBvaWQK KyAqLworZXh0ZXJuIHZvaWQgcG9vbF90YWJsZV9tdXRhdGlvbl9tYXBfbWFya190YWJsZXNfd3Jp dHRlbihjb25zdCBpbnQgKnRhYmxlX29pZHMsIGludCBudW1fdGFibGVzLCBpbnQgZGJvaWQpOwor CisvKgorICogQ29udmVuaWVuY2UgZnVuY3Rpb24gdG8gbWFyayBhIHNpbmdsZSB0YWJsZSBhcyB3 cml0dGVuLgorICogdGFibGVfb2lkOiB0YWJsZSBvaWQKKyAqIGRib2lkOiBkYXRhYmFzZSBvaWQK KyAqLworZXh0ZXJuIHZvaWQgcG9vbF90YWJsZV9tdXRhdGlvbl9tYXBfbWFya190YWJsZV93cml0 dGVuKGludCB0YWJsZV9vaWQsIGludCBkYm9pZCk7CisKKy8qCisgKiBVcGRhdGUgdGhlIFRUTCBi YXNlZCBvbiBjdXJyZW50IHJlcGxpY2F0aW9uIGRlbGF5LgorICogQ2FsbGVkIGZyb20gcG9vbF93 b3JrZXJfY2hpbGQuYyB3aGVuIHJlcGxpY2F0aW9uIGRlbGF5IGlzIHVwZGF0ZWQuCisgKiBkZWxh eV91czogcmVwbGljYXRpb24gZGVsYXkgaW4gbWljcm9zZWNvbmRzCisgKi8KK2V4dGVybiB2b2lk IHBvb2xfdGFibGVfbXV0YXRpb25fbWFwX3VwZGF0ZV90dGwodWludDY0IGRlbGF5X3VzKTsKKwor LyoKKyAqIExvb2sgdXAgY2FjaGVkIHBhcnNlIHJlc3VsdCBmb3IgYSBxdWVyeS4KKyAqIGhhc2g6 IGhhc2ggb2Ygbm9ybWFsaXplZCBxdWVyeQorICogaXNfd3JpdGU6IG91dHB1dCAtIHRydWUgaWYg cXVlcnkgaXMgYSB3cml0ZQorICogdGFibGVfbmFtZXM6IG91dHB1dCAtIGFycmF5IHRvIGZpbGwg d2l0aCB0YWJsZSBuYW1lcworICogbnVtX3RhYmxlczogb3V0cHV0IC0gbnVtYmVyIG9mIHRhYmxl cyBmb3VuZAorICogUmV0dXJucyB0cnVlIGlmIGZvdW5kIGluIGNhY2hlLCBmYWxzZSBvdGhlcndp c2UuCisgKi8KK2V4dGVybiBib29sIHBvb2xfdGFibGVfbXV0YXRpb25fbWFwX2dldF9jYWNoZWRf cGFyc2UodWludDY0IGhhc2gsIGJvb2wgKmlzX3dyaXRlLAorCQkJCQkJCQkJCQkgY2hhciB0YWJs ZV9uYW1lc1tdW1RBQkxFX01VVEFUSU9OX01BUF9UQUJMRV9OQU1FX0xFTl0sCisJCQkJCQkJCQkJ CSBpbnQgKm51bV90YWJsZXMpOworCisvKgorICogQ2FjaGUgYSBwYXJzZSByZXN1bHQgZm9yIGEg cXVlcnkuCisgKiBoYXNoOiBoYXNoIG9mIG5vcm1hbGl6ZWQgcXVlcnkKKyAqIGlzX3dyaXRlOiB0 cnVlIGlmIHF1ZXJ5IGlzIGEgd3JpdGUKKyAqIHRhYmxlX25hbWVzOiBhcnJheSBvZiB0YWJsZSBu YW1lcworICogbnVtX3RhYmxlczogbnVtYmVyIG9mIHRhYmxlcworICovCitleHRlcm4gdm9pZCBw b29sX3RhYmxlX211dGF0aW9uX21hcF9jYWNoZV9wYXJzZSh1aW50NjQgaGFzaCwgYm9vbCBpc193 cml0ZSwKKwkJCQkJCQkJCQljb25zdCBjaGFyIHRhYmxlX25hbWVzW11bVEFCTEVfTVVUQVRJT05f TUFQX1RBQkxFX05BTUVfTEVOXSwKKwkJCQkJCQkJCQlpbnQgbnVtX3RhYmxlcyk7CisKKy8qCisg KiBOb3JtYWxpemUgYSBxdWVyeSBhbmQgY29tcHV0ZSBpdHMgaGFzaC4KKyAqIFN0cmlwcyBjb21t ZW50cywgbm9ybWFsaXplcyB3aGl0ZXNwYWNlIGFuZCBsaXRlcmFscy4KKyAqIHF1ZXJ5OiBpbnB1 dCBTUUwgcXVlcnkgc3RyaW5nCisgKiBSZXR1cm5zOiA2NC1iaXQgaGFzaCBvZiBub3JtYWxpemVk IHF1ZXJ5CisgKi8KK2V4dGVybiB1aW50NjQgcG9vbF90YWJsZV9tdXRhdGlvbl9tYXBfbm9ybWFs aXplX2FuZF9oYXNoKGNvbnN0IGNoYXIgKnF1ZXJ5KTsKKworLyoKKyAqIENhbGN1bGF0ZSByZXF1 aXJlZCBzaGFyZWQgbWVtb3J5IHNpemUgZm9yIHRhYmxlIG11dGF0aW9uIG1hcC4KKyAqLworZXh0 ZXJuIFNpemUgcG9vbF90YWJsZV9tdXRhdGlvbl9tYXBfc2htZW1fc2l6ZSh2b2lkKTsKKworI2Vu ZGlmIC8qIFBPT0xfVEFCTEVfTVVUQVRJT05fTUFQX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9tYWlu L3BncG9vbF9tYWluLmMgYi9zcmMvbWFpbi9wZ3Bvb2xfbWFpbi5jCmluZGV4IGZhMDVlMTVlN2Fj NDM1ZTA3MjI5ODA2M2Y5MThjNzBhYTRlNTY4MGMuLjg3ZGMyYzRmMDlhNjJlMWNkNjgwYjgwMjA5 NzVlM2VjZjA4MTNlYzAgMTAwNjQ0Ci0tLSBhL3NyYy9tYWluL3BncG9vbF9tYWluLmMKKysrIGIv c3JjL21haW4vcGdwb29sX21haW4uYwpAQCAtNTcsNiArNTcsNyBAQAogI2luY2x1ZGUgImF1dGgv cG9vbF9wYXNzd2QuaCIKICNpbmNsdWRlICJhdXRoL3Bvb2xfaGJhLmgiCiAjaW5jbHVkZSAicXVl cnlfY2FjaGUvcG9vbF9tZW1xY2FjaGUuaCIKKyNpbmNsdWRlICJ1dGlscy9wb29sX3RhYmxlX211 dGF0aW9uX21hcC5oIgogI2luY2x1ZGUgIndhdGNoZG9nL3dkX2ludGVybmFsX2NvbW1hbmRzLmgi CiAjaW5jbHVkZSAid2F0Y2hkb2cvd2RfbGlmZWNoZWNrLmgiCiAjaW5jbHVkZSAid2F0Y2hkb2cv d2F0Y2hkb2cuaCIKQEAgLTE0ODUsMTEgKzE0ODYsMTQgQEAgc2lndXNyMV9pbnRlcnJ1cHRfcHJv Y2Vzc29yKHZvaWQpCiAKIAlpZiAodXNlcjFTaWduYWxTbG90LT5zaWduYWxGbGFnc1tTSUdfV0FU Q0hET0dfU1RBVEVfQ0hBTkdFRF0pCiAJeworCQlXRF9TVEFURVMJd2Rfc3RhdGU7CisKIAkJZXJl cG9ydChMT0csCiAJCQkJKGVycm1zZygiUGdwb29sLUlJIHBhcmVudCBwcm9jZXNzIHJlY2VpdmVk IHdhdGNoZG9nIHN0YXRlIGNoYW5nZSBzaWduYWwgZnJvbSB3YXRjaGRvZyIpKSk7CiAKIAkJdXNl cjFTaWduYWxTbG90LT5zaWduYWxGbGFnc1tTSUdfV0FUQ0hET0dfU1RBVEVfQ0hBTkdFRF0gPSBm YWxzZTsKLQkJaWYgKHdkX2ludGVybmFsX2dldF93YXRjaGRvZ19sb2NhbF9ub2RlX3N0YXRlKCkg PT0gV0RfU1RBTkRCWSkKKwkJd2Rfc3RhdGUgPSB3ZF9pbnRlcm5hbF9nZXRfd2F0Y2hkb2dfbG9j YWxfbm9kZV9zdGF0ZSgpOworCQlpZiAod2Rfc3RhdGUgPT0gV0RfU1RBTkRCWSkKIAkJewogCQkJ ZXJlcG9ydChMT0csCiAJCQkJCShlcnJtc2coIndlIGhhdmUgam9pbmVkIHRoZSB3YXRjaGRvZyBj bHVzdGVyIGFzIFNUQU5EQlkgbm9kZSIpLApAQCAtMTUwMyw2ICsxNTA3LDEwIEBAIHNpZ3VzcjFf aW50ZXJydXB0X3Byb2Nlc3Nvcih2b2lkKQogCQkJICovCiAJCQlwb29sX3JlbGVhc2VfZm9sbG93 X3ByaW1hcnlfbG9jayh0cnVlKTsKIAkJfQorCQllbHNlIGlmICh3ZF9zdGF0ZSA9PSBXRF9DT09S RElOQVRPUiAmJiBwb29sX2NvbmZpZy0+dGFibGVfbXV0YXRpb25fbWFwX2VuYWJsZWQpCisJCXsK KwkJCXBvb2xfdGFibGVfbXV0YXRpb25fbWFwX3RyaWdnZXJfZ2xvYmFsX2NvbGRfc3RhcnQoKTsK KwkJfQogCX0KIAlpZiAodXNlcjFTaWduYWxTbG90LT5zaWduYWxGbGFnc1tTSUdfRkFJTE9WRVJf SU5URVJSVVBUXSkKIAl7CkBAIC0zMDY4LDYgKzMwNzYsMTIgQEAgaW5pdGlhbGl6ZV9zaGFyZWRf bWVtX29iamVjdHMoYm9vbCBjbGVhcl9tZW1jYWNoZV9vaWRtYXBzKQogCQllbG9nKERFQlVHMSwg IndhdGNoZG9nOiAlenUgYnl0ZXMgcmVxdWVzdGVkIGZvciBzaGFyZWQgbWVtb3J5IiwgTUFYQUxJ R04od2RfaXBjX2dldF9zaGFyZWRfbWVtX3NpemUoKSkpOwogCX0KIAorCWlmIChwb29sX2NvbmZp Zy0+dGFibGVfbXV0YXRpb25fbWFwX2VuYWJsZWQpCisJeworCQlzaXplICs9IE1BWEFMSUdOKHBv b2xfdGFibGVfbXV0YXRpb25fbWFwX3NobWVtX3NpemUoKSk7CisJCWVsb2coREVCVUcxLCAidGFi bGVfbXV0YXRpb25fbWFwOiAlenUgYnl0ZXMgcmVxdWVzdGVkIGZvciBzaGFyZWQgbWVtb3J5Iiwg TUFYQUxJR04ocG9vbF90YWJsZV9tdXRhdGlvbl9tYXBfc2htZW1fc2l6ZSgpKSk7CisJfQorCiAJ aW5pdGlhbGl6ZV9zaGFyZWRfbWVtb3J5X21haW5fc2VnbWVudChzaXplKTsKIAogCS8qIE1vdmUg dGhlIGJhY2tlbmQgZGVzY3JpcHRvcnMgdG8gc2hhcmVkIG1lbW9yeSAqLwpAQCAtMzE4NCw2ICsz MTk4LDEyIEBAIGluaXRpYWxpemVfc2hhcmVkX21lbV9vYmplY3RzKGJvb2wgY2xlYXJfbWVtY2Fj aGVfb2lkbWFwcykKIAkJd2RfaXBjX2luaXRpYWxpemVfZGF0YSgpOwogCX0KIAorCS8qIEluaXRp YWxpemUgdGFibGUgbXV0YXRpb24gbWFwIGZvciB0cmFja2luZyByZWNlbnRseSB3cml0dGVuIHRh YmxlcyAqLworCWlmIChwb29sX2NvbmZpZy0+dGFibGVfbXV0YXRpb25fbWFwX2VuYWJsZWQpCisJ eworCQlwb29sX3RhYmxlX211dGF0aW9uX21hcF9pbml0KCk7CisJfQorCiB9CiAKIC8qCmRpZmYg LS1naXQgYS9zcmMvcHJvdG9jb2wvQ29tbWFuZENvbXBsZXRlLmMgYi9zcmMvcHJvdG9jb2wvQ29t bWFuZENvbXBsZXRlLmMKaW5kZXggYTNiOGYwZWExOTRmZmVjYzc5ZTU4NTY2YmU4MDU2MmE0NmVi NzVhYi4uMmRlNDY3NDk2MTk0ZGQyMTk0MzdlYjM3MjFiYTlkOGM4Zjk5OWJiNiAxMDA2NDQKLS0t IGEvc3JjL3Byb3RvY29sL0NvbW1hbmRDb21wbGV0ZS5jCisrKyBiL3NyYy9wcm90b2NvbC9Db21t YW5kQ29tcGxldGUuYwpAQCAtMzgsNiArMzgsOCBAQAogI2luY2x1ZGUgInV0aWxzL3BhbGxvYy5o IgogI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCiAjaW5jbHVkZSAidXRpbHMvcG9vbF9zdHJl YW0uaCIKKyNpbmNsdWRlICJ1dGlscy9wb29sX3RhYmxlX211dGF0aW9uX21hcC5oIgorI2luY2x1 ZGUgInV0aWxzL3Bvb2xfc2VsZWN0X3dhbGtlci5oIgogCiBzdGF0aWMgaW50CWV4dHJhY3RfbnR1 cGxlcyhjaGFyICptZXNzYWdlKTsKIHN0YXRpYyBQT09MX1NUQVRVUyBoYW5kbGVfbWlzbWF0Y2hf dHVwbGVzKFBPT0xfQ09OTkVDVElPTiAqZnJvbnRlbmQsIFBPT0xfQ09OTkVDVElPTl9QT09MICpi YWNrZW5kLCBjaGFyICpwYWNrZXQsIGludCBwYWNrZXRsZW4sIGJvb2wgY29tbWFuZF9jb21wbGV0 ZSk7CkBAIC0zMDQsNiArMzA2LDQ1IEBAIGhhbmRsZV9xdWVyeV9jb250ZXh0KFBPT0xfQ09OTkVD VElPTl9QT09MICpiYWNrZW5kKQogCiAJbm9kZSA9IHNlc3Npb25fY29udGV4dC0+cXVlcnlfY29u dGV4dC0+cGFyc2VfdHJlZTsKIAorCS8qCisJICogVHJhY2sgdGFibGUgd3JpdGVzIGZvciB0YWJs ZSBtdXRhdGlvbiBtYXAgZmVhdHVyZS4KKwkgKiBNYXJrIHRhYmxlcyBhcyB3cml0dGVuIHdoZW4g SU5TRVJUL1VQREFURS9ERUxFVEUgY29tcGxldGVzLgorCSAqLworCWlmIChwb29sX2NvbmZpZy0+ dGFibGVfbXV0YXRpb25fbWFwX2VuYWJsZWQpCisJeworCQljaGFyCSAgICp0YWJsZV9uYW1lID0g TlVMTDsKKwkJaW50CQkJdGFibGVfb2lkID0gMDsKKwkJaW50CQkJZGJvaWQgPSAwOworCisJCWlm IChJc0Eobm9kZSwgSW5zZXJ0U3RtdCkpCisJCXsKKwkJCUluc2VydFN0bXQgKnN0bXQgPSAoSW5z ZXJ0U3RtdCAqKSBub2RlOworCQkJdGFibGVfbmFtZSA9IG1ha2VfdGFibGVfbmFtZV9mcm9tX3Jh bmdldmFyKHN0bXQtPnJlbGF0aW9uKTsKKwkJfQorCQllbHNlIGlmIChJc0Eobm9kZSwgVXBkYXRl U3RtdCkpCisJCXsKKwkJCVVwZGF0ZVN0bXQgKnN0bXQgPSAoVXBkYXRlU3RtdCAqKSBub2RlOwor CQkJdGFibGVfbmFtZSA9IG1ha2VfdGFibGVfbmFtZV9mcm9tX3JhbmdldmFyKHN0bXQtPnJlbGF0 aW9uKTsKKwkJfQorCQllbHNlIGlmIChJc0Eobm9kZSwgRGVsZXRlU3RtdCkpCisJCXsKKwkJCURl bGV0ZVN0bXQgKnN0bXQgPSAoRGVsZXRlU3RtdCAqKSBub2RlOworCQkJdGFibGVfbmFtZSA9IG1h a2VfdGFibGVfbmFtZV9mcm9tX3JhbmdldmFyKHN0bXQtPnJlbGF0aW9uKTsKKwkJfQorCisJCWlm ICh0YWJsZV9uYW1lICE9IE5VTEwpCisJCXsKKwkJCXRhYmxlX29pZCA9IHBvb2xfdGFibGVfbmFt ZV90b19vaWQodGFibGVfbmFtZSk7CisJCQlkYm9pZCA9IHBvb2xfdGFibGVfbXV0YXRpb25fbWFw X2dldF9kYXRhYmFzZV9vaWQoKTsKKwkJCWlmICh0YWJsZV9vaWQgPiAwICYmIGRib2lkID4gMCkK KwkJCXsKKwkJCQlwb29sX3RhYmxlX211dGF0aW9uX21hcF9tYXJrX3RhYmxlX3dyaXR0ZW4odGFi bGVfb2lkLCBkYm9pZCk7CisJCQkJZXJlcG9ydChERUJVRzEsCisJCQkJCQkoZXJybXNnKCJ0YWJs ZV9tdXRhdGlvbl9tYXA6IG1hcmtlZCB0YWJsZSBcIiVzXCIgYXMgd3JpdHRlbiIsIHRhYmxlX25h bWUpKSk7CisJCQl9CisJCX0KKwl9CisKIAlpZiAoSXNBKG5vZGUsIFByZXBhcmVTdG10KSkKIAl7 CiAJCWlmIChzZXNzaW9uX2NvbnRleHQtPnVuY29tcGxldGVkX21lc3NhZ2UpCmRpZmYgLS1naXQg YS9zcmMvcHJvdG9jb2wvY2hpbGQuYyBiL3NyYy9wcm90b2NvbC9jaGlsZC5jCmluZGV4IGMzNGYw NTcyODFiZTYyZmVhZjM5ZGIxYmI2MDUwNjJmNTZkYzM5OGMuLjI2ZDdjZjFkMWE2NzY4YzEwOTg1 MGE0M2I1NzM3MzE0MWY5ZjdlYWYgMTAwNjQ0Ci0tLSBhL3NyYy9wcm90b2NvbC9jaGlsZC5jCisr KyBiL3NyYy9wcm90b2NvbC9jaGlsZC5jCkBAIC01Nyw2ICs1Nyw3IEBACiAjaW5jbHVkZSAidXRp bHMvZWxvZy5oIgogI2luY2x1ZGUgInV0aWxzL3BzX3N0YXR1cy5oIgogI2luY2x1ZGUgInV0aWxz L3RpbWVzdGFtcC5oIgorI2luY2x1ZGUgInV0aWxzL3Bvb2xfdGFibGVfbXV0YXRpb25fbWFwLmgi CiAKICNpbmNsdWRlICJjb250ZXh0L3Bvb2xfcHJvY2Vzc19jb250ZXh0LmgiCiAjaW5jbHVkZSAi Y29udGV4dC9wb29sX3Nlc3Npb25fY29udGV4dC5oIgpAQCAtMjEzLDYgKzIxNCwxMiBAQCBkb19j aGlsZChpbnQgKmZkcykKIAkvKiBJbml0aWFsaXplIHBlciBwcm9jZXNzIGNvbnRleHQgKi8KIAlw b29sX2luaXRfcHJvY2Vzc19jb250ZXh0KCk7CiAKKwkvKiBJbml0aWFsaXplIHRhYmxlIG11dGF0 aW9uIG1hcCBjaGlsZCBzdGF0ZSBmb3IgY29sZCBzdGFydCB0cmFja2luZyAqLworCWlmIChwb29s X2NvbmZpZy0+dGFibGVfbXV0YXRpb25fbWFwX2VuYWJsZWQpCisJeworCQlwb29sX3RhYmxlX211 dGF0aW9uX21hcF9jaGlsZF9pbml0KCk7CisJfQorCiAJLyogaW5pdGlhbGl6ZSBjb25uZWN0aW9u IHBvb2wgKi8KIAlpZiAocG9vbF9pbml0X2NwKCkpCiAJewpkaWZmIC0tZ2l0IGEvc3JjL3NhbXBs ZS9wZ3Bvb2wuY29uZi5zYW1wbGUtc3RyZWFtIGIvc3JjL3NhbXBsZS9wZ3Bvb2wuY29uZi5zYW1w bGUtc3RyZWFtCmluZGV4IDQ1NGZkYjllNWQxZmQ2NTQzN2I2YTY3ZjEyYWI2MjY1OGVhMDhmNDku LjQ2MDUyYmFkMzdiYmQxZjRhZmZlYzhlMDhlNWNlY2QzZDQ5MDM5NzYgMTAwNjQ0Ci0tLSBhL3Ny Yy9zYW1wbGUvcGdwb29sLmNvbmYuc2FtcGxlLXN0cmVhbQorKysgYi9zcmMvc2FtcGxlL3BncG9v bC5jb25mLnNhbXBsZS1zdHJlYW0KQEAgLTQ5OSw2ICs0OTksNTEgQEAgYmFja2VuZF9jbHVzdGVy aW5nX21vZGUgPSBzdHJlYW1pbmdfcmVwbGljYXRpb24KICNzdGF0ZW1lbnRfbGV2ZWxfbG9hZF9i YWxhbmNlID0gb2ZmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgRW5hYmxl cyBzdGF0ZW1lbnQgbGV2ZWwgbG9hZCBiYWxhbmNpbmcKIAorIyAtIFRhYmxlIE11dGF0aW9uIE1h cCAoTGFnbGVzcyBSZWFkIFJlcGxpY2EpIC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIyBXQVJOSU5HOiBFbmFibGluZyB0aGlzIGZlYXR1cmUgaW5jcmVhc2VzIHNoYXJlZCBt ZW1vcnkgdXNhZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBEZWZhdWx0 IHNldHRpbmdzIHJlcXVpcmUgfjYuNCBNQiBzaGFyZWQgbWVtb3J5CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICMgKDAuMSBNQiB0YWJsZSB0cmFja2luZyArIDYuMyBNQiBxdWVy eSBjYWNoZSkKKworI3RhYmxlX211dGF0aW9uX21hcF9lbmFibGVkID0gb2ZmCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICMgRW5hYmxlIGluLW1lbW9yeSB0cmFja2luZyBvZiBy ZWNlbnRseSB3cml0dGVuIHRhYmxlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAjIHRvIHByZXZlbnQgc3RhbGUgcmVhZHMgZnJvbSByZXBsaWNhcyBkdXJpbmcgcmVwbGljYXRp b24gbGFnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgKGNoYW5nZSByZXF1 aXJlcyByZWxvYWQpCisKKyN0YWJsZV9tdXRhdGlvbl9tYXBfdHRsX2ZhY3RvciA9IDUuMAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFRUTCBtdWx0aXBsaWVyOiBUVEwgPSBy ZXBsaWNhdGlvbl9kZWxheSAqIGZhY3RvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAjIEhpZ2hlciB2YWx1ZXMgcHJvdmlkZSBtb3JlIHNhZmV0eSBtYXJnaW4KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBSYW5nZTogMS4wLTEwMC4wIChkZWZhdWx0OiA1 LjApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgKGNoYW5nZSByZXF1aXJl cyByZWxvYWQpCisKKyN0YWJsZV9tdXRhdGlvbl9tYXBfY29sZF9zdGFydF9kdXJhdGlvbiA9IDIw MDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBEdXJhdGlvbiBpbiBtaWxs aXNlY29uZHMgdG8gcm91dGUgYWxsIHF1ZXJpZXMgdG8gcHJpbWFyeQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAjIGFmdGVyIGNoaWxkIHByb2Nlc3Mgc3RhcnRzIChjb2xkIHN0 YXJ0IHBlcmlvZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBSYW5nZTog MC02MDAwMCBtcyAoZGVmYXVsdDogMjAwMCBtcyA9IDIgc2Vjb25kcykKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIyBTZXQgdG8gMCB0byBkaXNhYmxlIGNvbGQgc3RhcnQgYmVo YXZpb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAoY2hhbmdlIHJlcXVp cmVzIHJlbG9hZCkKKworI3RhYmxlX211dGF0aW9uX21hcF90YWJsZV9idWNrZXRzID0gMTAyNAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIE51bWJlciBvZiBoYXNoIGJ1Y2tl dHMgZm9yIHRhYmxlIG11dGF0aW9uIHRyYWNraW5nCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICMgSGlnaGVyIHZhbHVlcyByZWR1Y2UgaGFzaCBjb2xsaXNpb25zCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgUmFuZ2U6IDY0LTY1NTM2IChkZWZhdWx0OiAx MDI0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIChjaGFuZ2UgcmVxdWly ZXMgcmVzdGFydCkKKworI3RhYmxlX211dGF0aW9uX21hcF90YWJsZV9zaXplID0gMjA0OAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIE1heGltdW0gbnVtYmVyIG9mIHRhYmxl cyB0byB0cmFjayBzaW11bHRhbmVvdXNseQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAjIFJhbmdlOiAxMjgtMTMxMDcyIChkZWZhdWx0OiAyMDQ4KQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAjIChjaGFuZ2UgcmVxdWlyZXMgcmVzdGFydCkKKworI3RhYmxl X211dGF0aW9uX21hcF9xdWVyeV9idWNrZXRzID0gMjA0OAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAjIE51bWJlciBvZiBoYXNoIGJ1Y2tldHMgZm9yIHF1ZXJ5IHBhcnNlIGNh Y2hlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgUmFuZ2U6IDY0LTY1NTM2 IChkZWZhdWx0OiAyMDQ4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIChj aGFuZ2UgcmVxdWlyZXMgcmVzdGFydCkKKworI3RhYmxlX211dGF0aW9uX21hcF9xdWVyeV9jYWNo ZV9zaXplID0gMTAwMDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBNYXhp bXVtIG51bWJlciBvZiBxdWVyeSBwYXJzZSByZXN1bHRzIHRvIGNhY2hlCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICMgUmFuZ2U6IDEwMC0xMDAwMDAwIChkZWZhdWx0OiAxMDAw MCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBNZW1vcnkgdXNhZ2U6IH42 NDAgYnl0ZXMgcGVyIGVudHJ5ICh+Ni4zIE1CIGRlZmF1bHQsIH42NCBNQiBmb3IgMTAwMDAwKQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIChjaGFuZ2UgcmVxdWlyZXMgcmVz dGFydCkKKwogIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBTVFJFQU1JTkcgUkVQTElDQVRJT04g TU9ERQogIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvc3JjL3N0cmVhbWluZ19y ZXBsaWNhdGlvbi9wb29sX3dvcmtlcl9jaGlsZC5jIGIvc3JjL3N0cmVhbWluZ19yZXBsaWNhdGlv bi9wb29sX3dvcmtlcl9jaGlsZC5jCmluZGV4IDMxMWI2Mzg2NThlNjZlYmI1NjE2MmFkOWZhNDM5 MjMxNWIyZGY2NGUuLjM4YmQyMTdiZTE5NzJhZjU3ZjgwYzI2YzhkNzI2YWFkNzA0ZDU2YmQgMTAw NjQ0Ci0tLSBhL3NyYy9zdHJlYW1pbmdfcmVwbGljYXRpb24vcG9vbF93b3JrZXJfY2hpbGQuYwor KysgYi9zcmMvc3RyZWFtaW5nX3JlcGxpY2F0aW9uL3Bvb2xfd29ya2VyX2NoaWxkLmMKQEAgLTU4 LDYgKzU4LDcgQEAKICNpbmNsdWRlICJ1dGlscy9wb29sX2lwLmgiCiAjaW5jbHVkZSAidXRpbHMv cHNfc3RhdHVzLmgiCiAjaW5jbHVkZSAidXRpbHMvcG9vbF9zdHJlYW0uaCIKKyNpbmNsdWRlICJ1 dGlscy9wb29sX3RhYmxlX211dGF0aW9uX21hcC5oIgogCiAjaW5jbHVkZSAiY29udGV4dC9wb29s X3Byb2Nlc3NfY29udGV4dC5oIgogI2luY2x1ZGUgImNvbnRleHQvcG9vbF9zZXNzaW9uX2NvbnRl eHQuaCIKQEAgLTY5NSw2ICs2OTYsNyBAQCBjaGVja19yZXBsaWNhdGlvbl90aW1lX2xhZ193aXRo X2NtZCh2b2lkKQogCWRvdWJsZQkJZGVsYXlfbXM7CiAJdWludDY0CQlkZWxheTsKIAl1aW50NjQJ CWRlbGF5X3RocmVzaG9sZF9ieV90aW1lOworCXVpbnQ2NAkJbWF4X2RlbGF5X3VzID0gMDsJLyog VHJhY2sgbWF4aW11bSBkZWxheSBmb3IgdGFibGUgbXV0YXRpb24gbWFwICovCiAJaW50CQkJdG9r ZW5fY291bnQgPSAwOwogCWludAkJCXByaW1hcnlfbm9kZV9pZDsKIAlpbnQJCQlzYXZlX2Vycm5v OwpAQCAtMTAwMyw2ICsxMDA1LDEwIEBAIGNoZWNrX3JlcGxpY2F0aW9uX3RpbWVfbGFnX3dpdGhf Y21kKHZvaWQpCiAJCQlia2luZm8tPnN0YW5kYnlfZGVsYXkgPSBkZWxheTsKIAkJCWJraW5mby0+ c3RhbmRieV9kZWxheV9ieV90aW1lID0gdHJ1ZTsKIAorCQkJLyogVHJhY2sgbWF4aW11bSBkZWxh eSBmb3IgdGFibGUgbXV0YXRpb24gbWFwIFRUTCBjYWxjdWxhdGlvbiAqLworCQkJaWYgKGRlbGF5 ID4gbWF4X2RlbGF5X3VzKQorCQkJCW1heF9kZWxheV91cyA9IGRlbGF5OworCiAJCQkvKgogCQkJ ICogTG9nIGRlbGF5IGlmIG5lY2Vzc2FyeS4gdGhyZXNob2xkIGlzIGluIG1pbGxpc2Vjb25kcywg Y29udmVydAogCQkJICogdG8gbWljcm9zZWNvbmRzLgpAQCAtMTAyMSw2ICsxMDI3LDEwIEBAIGNo ZWNrX3JlcGxpY2F0aW9uX3RpbWVfbGFnX3dpdGhfY21kKHZvaWQpCiAJCQl0b2tlbiA9IHN0cnRv a19yKE5VTEwsICIgXHRcbiIsICZzYXZlcHRyKTsKIAkJfQogCisJCS8qIFVwZGF0ZSB0YWJsZSBt dXRhdGlvbiBtYXAgVFRMIGJhc2VkIG9uIG1heGltdW0gb2JzZXJ2ZWQgZGVsYXkgKi8KKwkJaWYg KHBvb2xfY29uZmlnLT50YWJsZV9tdXRhdGlvbl9tYXBfZW5hYmxlZCAmJiBtYXhfZGVsYXlfdXMg PiAwKQorCQkJcG9vbF90YWJsZV9tdXRhdGlvbl9tYXBfdXBkYXRlX3R0bChtYXhfZGVsYXlfdXMp OworCiAJfQogCVBHX0NBVENIKCk7CiAJewpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzc2lv bi90ZXN0cy8wNDUudGFibGVfbXV0YXRpb25fbWFwL3Rlc3Quc2ggYi9zcmMvdGVzdC9yZWdyZXNz aW9uL3Rlc3RzLzA0NS50YWJsZV9tdXRhdGlvbl9tYXAvdGVzdC5zaApuZXcgZmlsZSBtb2RlIDEw MDc1NQppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lMGYy MjllZTg4YTcwZTQ2NDNkZjE3NDVhNmU2OTkyYjg2NzM1NGFlCi0tLSAvZGV2L251bGwKKysrIGIv c3JjL3Rlc3QvcmVncmVzc2lvbi90ZXN0cy8wNDUudGFibGVfbXV0YXRpb25fbWFwL3Rlc3Quc2gK QEAgLTAsMCArMSwyMjggQEAKKyMhL3Vzci9iaW4vZW52IGJhc2gKKyMtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIHRl c3Qgc2NyaXB0IGZvciB0YWJsZSBtdXRhdGlvbiBtYXAgZmVhdHVyZSAoaW4tbWVtb3J5IHRhYmxl IHRyYWNraW5nKS4KKyMgVGVzdHMgcm91dGluZyBvZiBxdWVyaWVzIGJhc2VkIG9uIHJlY2VudGx5 IHdyaXR0ZW4gdGFibGVzLgorIworc291cmNlICRURVNUTElCUworVEVTVERJUj10ZXN0ZGlyCitQ U1FMPSRQR0JJTi9wc3FsCitQU1FMT1BUUz0iLWEgLXEgLVgiCitQR1BPT0xCSU49JFBHUE9PTF9J TlNUQUxMX0RJUi9iaW4KK2V4cG9ydCBQR0RBVEFCQVNFPXRlc3QKKworIyBPbmx5IHJ1biBpbiBz dHJlYW1pbmcgcmVwbGljYXRpb24gbW9kZSBzaW5jZSB0aGF0J3MgdGhlIHRhcmdldCB1c2UgY2Fz ZQorZm9yIG1vZGUgaW4gcworZG8KKyAgICBybSAtZnIgJFRFU1RESVIKKyAgICBta2RpciAkVEVT VERJUgorICAgIGNkICRURVNURElSCisKKyAgICAjIENyZWF0ZSB0ZXN0IGVudmlyb25tZW50IHdp dGggMiBub2RlcworICAgIGVjaG8gLW4gImNyZWF0aW5nIHRlc3QgZW52aXJvbm1lbnQuLi4iCisg ICAgJFBHUE9PTF9TRVRVUCAtbSAkbW9kZSAtbiAyIHx8IGV4aXQgMQorICAgIGVjaG8gImRvbmUu IgorCisgICAgc291cmNlIC4vYmFzaHJjLnBvcnRzCisKKyAgICAjIENvbmZpZ3VyZSB0YWJsZSBt dXRhdGlvbiBtYXAgZmVhdHVyZQorICAgIGVjaG8gInRhYmxlX211dGF0aW9uX21hcF9lbmFibGVk ID0gb24iID4+IGV0Yy9wZ3Bvb2wuY29uZgorICAgIGVjaG8gInRhYmxlX211dGF0aW9uX21hcF90 dGxfZmFjdG9yID0gNS4wIiA+PiBldGMvcGdwb29sLmNvbmYKKyAgICBlY2hvICJ0YWJsZV9tdXRh dGlvbl9tYXBfY29sZF9zdGFydF9kdXJhdGlvbiA9IDIwMDAiID4+IGV0Yy9wZ3Bvb2wuY29uZgor CisgICAgIyBDb25maWd1cmUgd2VpZ2h0cyBzbyB3ZSBjYW4gZGlzdGluZ3Vpc2ggcm91dGluZwor ICAgICMgQmFja2VuZCAwIChwcmltYXJ5KSB3ZWlnaHQ9MCwgQmFja2VuZCAxIChzdGFuZGJ5KSB3 ZWlnaHQ9MQorICAgICMgVGhpcyBtZWFucyBsb2FkIGJhbGFuY2VkIHF1ZXJpZXMgZ28gdG8gbm9k ZSAxIGJ5IGRlZmF1bHQKKyAgICBlY2hvICJiYWNrZW5kX3dlaWdodDAgPSAwIiA+PiBldGMvcGdw b29sLmNvbmYKKyAgICBlY2hvICJiYWNrZW5kX3dlaWdodDEgPSAxIiA+PiBldGMvcGdwb29sLmNv bmYKKworICAgICMgRW5hYmxlIGRlYnVnIGxvZ2dpbmcgdG8gc2VlIHJvdXRpbmcgZGVjaXNpb25z CisgICAgZWNobyAibG9nX21pbl9tZXNzYWdlcyA9IGRlYnVnMSIgPj4gZXRjL3BncG9vbC5jb25m CisKKyAgICAuL3N0YXJ0YWxsCisKKyAgICBleHBvcnQgUEdQT1JUPSRQR1BPT0xfUE9SVAorCisg ICAgd2FpdF9mb3JfcGdwb29sX3N0YXJ0dXAKKworICAgICMgQ3JlYXRlIHRlc3QgdGFibGVzCisg ICAgJFBTUUwgdGVzdCA8PEVPRgorQ1JFQVRFIFRBQkxFIHQxKGkgSU5URUdFUik7CitDUkVBVEUg VEFCTEUgdDIoaSBJTlRFR0VSKTsKK0NSRUFURSBUQUJMRSB0MyhpIElOVEVHRVIpOworRU9GCisK KyAgICBlY2hvICI9PT0gVGVzdCAxOiBDb2xkIFN0YXJ0IFJvdXRpbmcgPT09IgorICAgICMgRHVy aW5nIGNvbGQgc3RhcnQsIGFsbCBxdWVyaWVzIHNob3VsZCBnbyB0byBwcmltYXJ5CisgICAgIyBS ZXN0YXJ0IHBncG9vbCB0byB0cmlnZ2VyIGNvbGQgc3RhcnQKKyAgICAuL3NodXRkb3duYWxsCisg ICAgLi9zdGFydGFsbAorICAgIHdhaXRfZm9yX3BncG9vbF9zdGFydHVwCisKKyAgICAjIEltbWVk aWF0ZWx5IHF1ZXJ5IC0gc2hvdWxkIGdvIHRvIHByaW1hcnkgZHVlIHRvIGNvbGQgc3RhcnQKKyAg ICAkUFNRTCB0ZXN0IC1jICJTRUxFQ1QgJ2NvbGRfc3RhcnRfdGVzdCcgYXMgbWFya2VyLCAqIEZS T00gdDE7IiA+IC9kZXYvbnVsbCAyPiYxCisKKyAgICAjIENoZWNrIGxvZyBmb3IgY29sZCBzdGFy dCBtZXNzYWdlCisgICAgaWYgZ3JlcCAtcSAiY291bGQgbm90IGxvYWQgYmFsYW5jZSBiZWNhdXNl IG9mIHRhYmxlIG11dGF0aW9uIG1hcCBjb2xkIHN0YXJ0IiBsb2cvcGdwb29sLmxvZzsgdGhlbgor ICAgICAgICBlY2hvICJUZXN0IDEgUEFTU0VEOiBDb2xkIHN0YXJ0IHJvdXRpbmcgd29ya3MiCisg ICAgZWxzZQorICAgICAgICBlY2hvICJUZXN0IDEgRkFJTEVEOiBDb2xkIHN0YXJ0IHJvdXRpbmcg bm90IGRldGVjdGVkIgorICAgICAgICAuL3NodXRkb3duYWxsCisgICAgICAgIGV4aXQgMQorICAg IGZpCisKKyAgICBlY2hvICI9PT0gVGVzdCAyOiBXYWl0IGZvciBjb2xkIHN0YXJ0IHRvIGVuZCA9 PT0iCisgICAgIyBXYWl0IGZvciBjb2xkIHN0YXJ0IHBlcmlvZCB0byBlbmQgKDIgc2Vjb25kcykK KyAgICBzbGVlcCAzCisKKyAgICAjIENsZWFyIHRoZSBsb2cKKyAgICA+IGxvZy9wZ3Bvb2wubG9n CisKKyAgICAjIE5vdyBhIGNsZWFuIHRhYmxlIHF1ZXJ5IHNob3VsZCBsb2FkIGJhbGFuY2UgKGdv IHRvIG5vZGUgMSkKKyAgICAkUFNRTCB0ZXN0IC1jICJTRUxFQ1QgJ2FmdGVyX2NvbGRfc3RhcnQn IGFzIG1hcmtlciwgKiBGUk9NIHQzOyIgPiAvZGV2L251bGwgMj4mMQorCisgICAgIyBBZnRlciBj b2xkIHN0YXJ0LCBxdWVyaWVzIHRvIGNsZWFuIHRhYmxlcyBzaG91bGQgbG9hZCBiYWxhbmNlCisg ICAgIyBDaGVjayB0aGF0IGl0IGRpZCBOT1QgZ2V0IGZvcmNlZCB0byBwcmltYXJ5IGR1ZSB0byB0 YWJsZSBtdXRhdGlvbiBtYXAKKyAgICBpZiBncmVwIC1xICJjb3VsZCBub3QgbG9hZCBiYWxhbmNl IGJlY2F1c2Ugb2YgdGFibGUgbXV0YXRpb24gbWFwIGNvbGQgc3RhcnQiIGxvZy9wZ3Bvb2wubG9n OyB0aGVuCisgICAgICAgIGVjaG8gIlRlc3QgMiBGQUlMRUQ6IFN0aWxsIGluIGNvbGQgc3RhcnQg YWZ0ZXIgd2FpdGluZyIKKyAgICAgICAgLi9zaHV0ZG93bmFsbAorICAgICAgICBleGl0IDEKKyAg ICBmaQorICAgIGVjaG8gIlRlc3QgMiBQQVNTRUQ6IENvbGQgc3RhcnQgZW5kZWQgY29ycmVjdGx5 IgorCisgICAgZWNobyAiPT09IFRlc3QgMzogV3JpdGUtdGhlbi1SZWFkIFJvdXRpbmcgPT09Igor ICAgICMgQ2xlYXIgdGhlIGxvZworICAgID4gbG9nL3BncG9vbC5sb2cKKworICAgICMgV3JpdGUg dG8gdDEKKyAgICAkUFNRTCB0ZXN0IC1jICJJTlNFUlQgSU5UTyB0MSBWQUxVRVMgKDEpOyIgPiAv ZGV2L251bGwgMj4mMQorCisgICAgIyBJbW1lZGlhdGVseSByZWFkIGZyb20gdDEgLSBzaG91bGQg Z28gdG8gcHJpbWFyeSBkdWUgdG8gcmVjZW50IHdyaXRlCisgICAgJFBTUUwgdGVzdCAtYyAiU0VM RUNUICd3cml0ZV9yZWFkX3Rlc3QnIGFzIG1hcmtlciwgKiBGUk9NIHQxOyIgPiAvZGV2L251bGwg Mj4mMQorCisgICAgIyBDaGVjayBsb2cgZm9yIHRhYmxlIHN0YWxlbmVzcyBtZXNzYWdlCisgICAg aWYgZ3JlcCAtcSAiY291bGQgbm90IGxvYWQgYmFsYW5jZSBiZWNhdXNlIHRhYmxlLip3YXMgcmVj ZW50bHkgd3JpdHRlbiIgbG9nL3BncG9vbC5sb2c7IHRoZW4KKyAgICAgICAgZWNobyAiVGVzdCAz IFBBU1NFRDogV3JpdGUtdGhlbi1yZWFkIHJvdXRpbmcgd29ya3MiCisgICAgZWxzZQorICAgICAg ICBlY2hvICJUZXN0IDMgRkFJTEVEOiBUYWJsZSBzdGFsZW5lc3Mgbm90IGRldGVjdGVkIGFmdGVy IHdyaXRlIgorICAgICAgICAjIFNob3cgcmVsZXZhbnQgbG9nIGVudHJpZXMgZm9yIGRlYnVnZ2lu ZworICAgICAgICBncmVwIC1pICJ0YWJsZV9tdXRhdGlvbl9tYXAiIGxvZy9wZ3Bvb2wubG9nIHwg dGFpbCAtMjAKKyAgICAgICAgLi9zaHV0ZG93bmFsbAorICAgICAgICBleGl0IDEKKyAgICBmaQor CisgICAgZWNobyAiPT09IFRlc3QgNDogQ2xlYW4gVGFibGUgU3RpbGwgTG9hZCBCYWxhbmNlcyA9 PT0iCisgICAgIyBDbGVhciB0aGUgbG9nCisgICAgPiBsb2cvcGdwb29sLmxvZworCisgICAgIyBS ZWFkIGZyb20gdDIgKG5ldmVyIHdyaXR0ZW4gdG8pIC0gc2hvdWxkIGxvYWQgYmFsYW5jZQorICAg ICRQU1FMIHRlc3QgLWMgIlNFTEVDVCAnY2xlYW5fdGFibGVfdGVzdCcgYXMgbWFya2VyLCAqIEZS T00gdDI7IiA+IC9kZXYvbnVsbCAyPiYxCisKKyAgICAjIFNob3VsZCBOT1Qgc2VlIHRhYmxlIG11 dGF0aW9uIG1hcCBibG9ja2luZyBtZXNzYWdlIGZvciB0MgorICAgIGlmIGdyZXAgLXEgImNvdWxk IG5vdCBsb2FkIGJhbGFuY2UgYmVjYXVzZSB0YWJsZS4qdDIuKndhcyByZWNlbnRseSB3cml0dGVu IiBsb2cvcGdwb29sLmxvZzsgdGhlbgorICAgICAgICBlY2hvICJUZXN0IDQgRkFJTEVEOiBDbGVh biB0YWJsZSBpbmNvcnJlY3RseSBtYXJrZWQgYXMgc3RhbGUiCisgICAgICAgIC4vc2h1dGRvd25h bGwKKyAgICAgICAgZXhpdCAxCisgICAgZmkKKyAgICBlY2hvICJUZXN0IDQgUEFTU0VEOiBDbGVh biB0YWJsZXMgc3RpbGwgbG9hZCBiYWxhbmNlIgorCisgICAgZWNobyAiPT09IFRlc3QgNTogVVBE QVRFIE1hcmtzIFRhYmxlIGFzIFN0YWxlID09PSIKKyAgICAjIENsZWFyIHRoZSBsb2cKKyAgICA+ IGxvZy9wZ3Bvb2wubG9nCisKKyAgICAjIFVwZGF0ZSB0MgorICAgICRQU1FMIHRlc3QgLWMgIlVQ REFURSB0MiBTRVQgaSA9IDk5OSBXSEVSRSBpID0gMDsiID4gL2Rldi9udWxsIDI+JjEKKworICAg ICMgSW1tZWRpYXRlbHkgcmVhZCBmcm9tIHQyIC0gc2hvdWxkIGdvIHRvIHByaW1hcnkKKyAgICAk UFNRTCB0ZXN0IC1jICJTRUxFQ1QgJ3VwZGF0ZV90ZXN0JyBhcyBtYXJrZXIsICogRlJPTSB0Mjsi ID4gL2Rldi9udWxsIDI+JjEKKworICAgIGlmIGdyZXAgLXEgImNvdWxkIG5vdCBsb2FkIGJhbGFu Y2UgYmVjYXVzZSB0YWJsZS4qd2FzIHJlY2VudGx5IHdyaXR0ZW4iIGxvZy9wZ3Bvb2wubG9nOyB0 aGVuCisgICAgICAgIGVjaG8gIlRlc3QgNSBQQVNTRUQ6IFVQREFURSBtYXJrcyB0YWJsZSBhcyBz dGFsZSIKKyAgICBlbHNlCisgICAgICAgIGVjaG8gIlRlc3QgNSBGQUlMRUQ6IFVQREFURSBkaWQg bm90IG1hcmsgdGFibGUgYXMgc3RhbGUiCisgICAgICAgIC4vc2h1dGRvd25hbGwKKyAgICAgICAg ZXhpdCAxCisgICAgZmkKKworICAgIGVjaG8gIj09PSBUZXN0IDY6IERFTEVURSBNYXJrcyBUYWJs ZSBhcyBTdGFsZSA9PT0iCisgICAgIyBDbGVhciB0aGUgbG9nCisgICAgPiBsb2cvcGdwb29sLmxv ZworCisgICAgIyBEZWxldGUgZnJvbSB0MworICAgICRQU1FMIHRlc3QgLWMgIkRFTEVURSBGUk9N IHQzIFdIRVJFIGkgPSAwOyIgPiAvZGV2L251bGwgMj4mMQorCisgICAgIyBJbW1lZGlhdGVseSBy ZWFkIGZyb20gdDMgLSBzaG91bGQgZ28gdG8gcHJpbWFyeQorICAgICRQU1FMIHRlc3QgLWMgIlNF TEVDVCAnZGVsZXRlX3Rlc3QnIGFzIG1hcmtlciwgKiBGUk9NIHQzOyIgPiAvZGV2L251bGwgMj4m MQorCisgICAgaWYgZ3JlcCAtcSAiY291bGQgbm90IGxvYWQgYmFsYW5jZSBiZWNhdXNlIHRhYmxl Lip3YXMgcmVjZW50bHkgd3JpdHRlbiIgbG9nL3BncG9vbC5sb2c7IHRoZW4KKyAgICAgICAgZWNo byAiVGVzdCA2IFBBU1NFRDogREVMRVRFIG1hcmtzIHRhYmxlIGFzIHN0YWxlIgorICAgIGVsc2UK KyAgICAgICAgZWNobyAiVGVzdCA2IEZBSUxFRDogREVMRVRFIGRpZCBub3QgbWFyayB0YWJsZSBh cyBzdGFsZSIKKyAgICAgICAgLi9zaHV0ZG93bmFsbAorICAgICAgICBleGl0IDEKKyAgICBmaQor CisgICAgZWNobyAiPT09IFRlc3QgNzogTXVsdGktVGFibGUgUXVlcnkgd2l0aCBPbmUgU3RhbGUg VGFibGUgPT09IgorICAgICMgQ2xlYXIgdGhlIGxvZworICAgID4gbG9nL3BncG9vbC5sb2cKKwor ICAgICMgQ3JlYXRlIGEgbmV3IGNsZWFuIHRhYmxlCisgICAgJFBTUUwgdGVzdCAtYyAiQ1JFQVRF IFRBQkxFIHQ0KGkgSU5URUdFUik7IiA+IC9kZXYvbnVsbCAyPiYxCisKKyAgICAjIFdhaXQgYSBi aXQgZm9yIFRUTCB0byBleHBpcmUgb24gb3RoZXIgdGFibGVzIGlmIGZhY3RvciBpcyBsb3cKKyAg ICBzbGVlcCAxCisKKyAgICAjIFdyaXRlIHRvIHQxIG9ubHkKKyAgICAkUFNRTCB0ZXN0IC1jICJJ TlNFUlQgSU5UTyB0MSBWQUxVRVMgKDEwMCk7IiA+IC9kZXYvbnVsbCAyPiYxCisKKyAgICAjIFF1 ZXJ5IGpvaW5pbmcgdDEgYW5kIHQ0IC0gc2hvdWxkIGdvIHRvIHByaW1hcnkgYmVjYXVzZSB0MSBp cyBzdGFsZQorICAgICRQU1FMIHRlc3QgLWMgIlNFTEVDVCAnbXVsdGlfdGFibGVfdGVzdCcgYXMg bWFya2VyIEZST00gdDEsIHQ0OyIgPiAvZGV2L251bGwgMj4mMQorCisgICAgaWYgZ3JlcCAtcSAi Y291bGQgbm90IGxvYWQgYmFsYW5jZSBiZWNhdXNlIHRhYmxlLip0MS4qd2FzIHJlY2VudGx5IHdy aXR0ZW4iIGxvZy9wZ3Bvb2wubG9nOyB0aGVuCisgICAgICAgIGVjaG8gIlRlc3QgNyBQQVNTRUQ6 IE11bHRpLXRhYmxlIHF1ZXJ5IHJvdXRlcyB0byBwcmltYXJ5IHdoZW4gb25lIHRhYmxlIGlzIHN0 YWxlIgorICAgIGVsc2UKKyAgICAgICAgZWNobyAiVGVzdCA3IEZBSUxFRDogTXVsdGktdGFibGUg c3RhbGVuZXNzIG5vdCBkZXRlY3RlZCIKKyAgICAgICAgLi9zaHV0ZG93bmFsbAorICAgICAgICBl eGl0IDEKKyAgICBmaQorCisgICAgZWNobyAiPT09IFRlc3QgODogRGlmZmVyZW50IERhdGFiYXNl cyB3aXRoIFNhbWUgVGFibGUgTmFtZSA9PT0iCisgICAgIyBDcmVhdGUgYW5vdGhlciBkYXRhYmFz ZSBhbmQgYSB0YWJsZSB3aXRoIHRoZSBzYW1lIG5hbWUKKyAgICAkUFNRTCB0ZXN0IC1jICJDUkVB VEUgREFUQUJBU0UgdGVzdDI7IiA+IC9kZXYvbnVsbCAyPiYxCisgICAgJFBTUUwgdGVzdDIgLWMg IkNSRUFURSBUQUJMRSB0MShpIElOVEVHRVIpOyIgPiAvZGV2L251bGwgMj4mMQorCisgICAgIyBX YWl0IGZvciBUVEwgdG8gZXhwaXJlCisgICAgc2xlZXAgMQorCisgICAgIyBXcml0ZSB0byB0MSBp biAndGVzdCcgZGF0YWJhc2UKKyAgICAkUFNRTCB0ZXN0IC1jICJJTlNFUlQgSU5UTyB0MSBWQUxV RVMgKDUwMCk7IiA+IC9kZXYvbnVsbCAyPiYxCisKKyAgICAjIFJlYWQgZnJvbSB0MSBpbiAndGVz dDInIGRhdGFiYXNlIC0gc2hvdWxkIGxvYWQgYmFsYW5jZSAoTm9kZSAxKQorICAgICMgYmVjYXVz ZSBpdCdzIGEgZGlmZmVyZW50IGRhdGFiYXNlLCBldmVuIGlmIHRhYmxlIG5hbWUgaXMgc2FtZQor ICAgID4gbG9nL3BncG9vbC5sb2cKKyAgICAkUFNRTCB0ZXN0MiAtYyAiU0VMRUNUICdkaWZmX2Ri X3Rlc3QnIGFzIG1hcmtlciwgKiBGUk9NIHQxOyIgPiAvZGV2L251bGwgMj4mMQorCisgICAgaWYg Z3JlcCAtcSAiY291bGQgbm90IGxvYWQgYmFsYW5jZSBiZWNhdXNlIHRhYmxlLip0MS4qd2FzIHJl Y2VudGx5IHdyaXR0ZW4iIGxvZy9wZ3Bvb2wubG9nOyB0aGVuCisgICAgICAgIGVjaG8gIlRlc3Qg OCBGQUlMRUQ6IFRhYmxlIG1hcmtlZCBhcyBzdGFsZSBpbiB3cm9uZyBkYXRhYmFzZSIKKyAgICAg ICAgLi9zaHV0ZG93bmFsbAorICAgICAgICBleGl0IDEKKyAgICBmaQorCisgICAgIyBSZWFkIGZy b20gdDEgaW4gJ3Rlc3QnIGRhdGFiYXNlIC0gc2hvdWxkIGdvIHRvIHByaW1hcnkKKyAgICAkUFNR TCB0ZXN0IC1jICJTRUxFQ1QgJ3NhbWVfZGJfdGVzdCcgYXMgbWFya2VyLCAqIEZST00gdDE7IiA+ IC9kZXYvbnVsbCAyPiYxCisgICAgaWYgZ3JlcCAtcSAiY291bGQgbm90IGxvYWQgYmFsYW5jZSBi ZWNhdXNlIHRhYmxlLip0MS4qd2FzIHJlY2VudGx5IHdyaXR0ZW4iIGxvZy9wZ3Bvb2wubG9nOyB0 aGVuCisgICAgICAgIGVjaG8gIlRlc3QgOCBQQVNTRUQ6IENvcnJlY3RseSBkaXN0aW5ndWlzaGVz IGJldHdlZW4gZGF0YWJhc2VzIgorICAgIGVsc2UKKyAgICAgICAgZWNobyAiVGVzdCA4IEZBSUxF RDogVGFibGUgc3RhbGVuZXNzIG5vdCBkZXRlY3RlZCBpbiBjb3JyZWN0IGRhdGFiYXNlIgorICAg ICAgICAuL3NodXRkb3duYWxsCisgICAgICAgIGV4aXQgMQorICAgIGZpCisKKyAgICBlY2hvICIi CisgICAgZWNobyAiPT09IEFsbCBUYWJsZSBNdXRhdGlvbiBNYXAgVGVzdHMgUEFTU0VEID09PSIK KworICAgIC4vc2h1dGRvd25hbGwKKworICAgIGNkIC4uCitkb25lCisKK2V4aXQgMApkaWZmIC0t Z2l0IGEvc3JjL3V0aWxzL3Bvb2xfdGFibGVfbXV0YXRpb25fbWFwLmMgYi9zcmMvdXRpbHMvcG9v bF90YWJsZV9tdXRhdGlvbl9tYXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zMDBjMjMwYWQxOGFhMjIwNGEwOTk3 NGQxM2VjZjhlODk1OGZmMzZmCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3V0aWxzL3Bvb2xfdGFi bGVfbXV0YXRpb25fbWFwLmMKQEAgLTAsMCArMSwxMTY2IEBACisvKiAtKi1wZ3NxbC1jLSotICov CisvKgorICogcGdwb29sOiBhIGxhbmd1YWdlIGluZGVwZW5kZW50IGNvbm5lY3Rpb24gcG9vbCBz ZXJ2ZXIgZm9yIFBvc3RncmVTUUwKKyAqIHdyaXR0ZW4gYnkgVGF0c3VvIElzaGlpCisgKgorICog Q29weXJpZ2h0IChjKSAyMDAzLTIwMjYJUGdQb29sIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAor ICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRo aXMgc29mdHdhcmUgYW5kCisgKiBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5k IHdpdGhvdXQgZmVlIGlzIGhlcmVieQorICogZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJv dmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsCisgKiBjb3BpZXMgYW5kIHRoYXQgYm90 aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbgorICogbm90aWNlIGFw cGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIHRo ZQorICogYXV0aG9yIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0 YWluaW5nIHRvCisgKiBkaXN0cmlidXRpb24gb2YgdGhlIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm aWMsIHdyaXR0ZW4gcHJpb3IKKyAqIHBlcm1pc3Npb24uIFRoZSBhdXRob3IgbWFrZXMgbm8gcmVw cmVzZW50YXRpb25zIGFib3V0IHRoZQorICogc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBm b3IgYW55IHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMKKyAqIGlzIiB3aXRob3V0IGV4cHJl c3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqCisgKiBwb29sX3RhYmxlX211dGF0aW9uX21hcC5j OiBJbi1tZW1vcnkgdHJhY2tpbmcgb2YgcmVjZW50bHkgd3JpdHRlbiB0YWJsZXMKKyAqICAgICAg ICAgICAgICAgICAgICB0byBhdm9pZCBzdGFsZSByZWFkcyBmcm9tIHJlcGxpY2FzIGR1cmluZyBy ZXBsaWNhdGlvbiBsYWcKKyAqCisgKiBCYXNlZCBvbiB0aGUgImxhZ2xlc3MiIGFyY2hpdGVjdHVy ZSBmcm9tIFRhaWxvciBCcmFuZHM6CisgKiBodHRwczovL21lZGl1bS5jb20vdGFpbG9yLXRlY2gv dXNpbmctZGF0YWJhc2UtcmVhZC1yZXBsaWNhcy1pbi1kaXN0cmlidXRlZC1zeXN0ZW1zLWQ4MGVh ZjZiYmY4YQorICovCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4K KyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisjaW5jbHVkZSAi cG9vbC5oIgorI2luY2x1ZGUgInBvb2xfY29uZmlnLmgiCisjaW5jbHVkZSAiY29udGV4dC9wb29s X3Nlc3Npb25fY29udGV4dC5oIgorI2luY2x1ZGUgInV0aWxzL3Bvb2xfdGFibGVfbXV0YXRpb25f bWFwLmgiCisjaW5jbHVkZSAidXRpbHMvZWxvZy5oIgorI2luY2x1ZGUgInV0aWxzL3Bvb2xfaXBj LmgiCisjaW5jbHVkZSAidXRpbHMvcGFsbG9jLmgiCisjaW5jbHVkZSAidXRpbHMvcG9vbF9yZWxj YWNoZS5oIgorCisjZGVmaW5lIERBVEFCQVNFX1RPX09JRF9RVUVSWSAiU0VMRUNUIG9pZCBGUk9N IHBnX2NhdGFsb2cucGdfZGF0YWJhc2UgV0hFUkUgZGF0bmFtZSA9ICclcyciCisKKy8qIC0tLS0t LS0tLS0tLS0tLS0KKyAqIExvY2FsIHZhcmlhYmxlcworICogLS0tLS0tLS0tLS0tLS0tLQorICov CisKKy8qIFBvaW50ZXIgdG8gc2hhcmVkIG1lbW9yeSBzdHJ1Y3R1cmUgKi8KK3N0YXRpYyBUYWJs ZU11dGF0aW9uTWFwU2htZW0gKnRhYmxlX211dGF0aW9uX21hcF9zaG1lbSA9IE5VTEw7CisKKy8q IFBlci1wcm9jZXNzIGNvbGQgc3RhcnQgdHJhY2tpbmcgKG5vdCBpbiBzaGFyZWQgbWVtb3J5KSAq Lworc3RhdGljIHN0cnVjdCB0aW1ldmFsIHByb2Nlc3Nfc3RhcnRfdGltZTsKK3N0YXRpYyBib29s IGNvbGRfc3RhcnRfaW5pdGlhbGl6ZWQgPSBmYWxzZTsKKworLyogLS0tLS0tLS0tLS0tLS0tLQor ICogSGVscGVyIG1hY3JvcyBmb3IgYWNjZXNzaW5nIGZsZXhpYmxlIGFycmF5cyBpbiBzaGFyZWQg bWVtb3J5CisgKiAtLS0tLS0tLS0tLS0tLS0tCisgKi8KKworLyogR2V0IHBvaW50ZXIgdG8gYnVj a2V0IGFycmF5IGluIHRhYmxlIG1hcCAqLworI2RlZmluZSBUQUJMRV9NQVBfQlVDS0VUUyhtYXAp IFwKKwkoKGludCAqKSgoY2hhciAqKShtYXApICsgc2l6ZW9mKFRhYmxlTXV0YXRpb25IYXNoVGFi bGUpKSkKKworLyogR2V0IHBvaW50ZXIgdG8gZW50cnkgYXJyYXkgaW4gdGFibGUgbWFwICovCisj ZGVmaW5lIFRBQkxFX01BUF9FTlRSSUVTKG1hcCkgXAorCSgoVGFibGVNdXRhdGlvbkVudHJ5ICop KChjaGFyICopKG1hcCkgKyBzaXplb2YoVGFibGVNdXRhdGlvbkhhc2hUYWJsZSkgKyBcCisJCQkJ CQkJKG1hcCktPm51bV9idWNrZXRzICogc2l6ZW9mKGludCkpKQorCisvKiBHZXQgcG9pbnRlciB0 byBidWNrZXQgYXJyYXkgaW4gcXVlcnkgY2FjaGUgKi8KKyNkZWZpbmUgUVVFUllfQ0FDSEVfQlVD S0VUUyhjYWNoZSkgXAorCSgoaW50ICopKChjaGFyICopKGNhY2hlKSArIHNpemVvZihRdWVyeVBh cnNlQ2FjaGUpKSkKKworLyogR2V0IHBvaW50ZXIgdG8gZW50cnkgYXJyYXkgaW4gcXVlcnkgY2Fj aGUgKi8KKyNkZWZpbmUgUVVFUllfQ0FDSEVfRU5UUklFUyhjYWNoZSkgXAorCSgoUXVlcnlQYXJz ZUVudHJ5ICopKChjaGFyICopKGNhY2hlKSArIHNpemVvZihRdWVyeVBhcnNlQ2FjaGUpICsgXAor CQkJCQkJIChjYWNoZSktPm51bV9idWNrZXRzICogc2l6ZW9mKGludCkpKQorCisvKiAtLS0tLS0t LS0tLS0tLS0tCisgKiBTZW1hcGhvcmUgbG9jayBoZWxwZXJzCisgKiAtLS0tLS0tLS0tLS0tLS0t CisgKi8KKworc3RhdGljIGlubGluZSB2b2lkCit0YWJsZV9tYXBfbG9jayh2b2lkKQoreworCXBv b2xfc2VtYXBob3JlX2xvY2soVEFCTEVfTVVUQVRJT05fTUFQX1RBQkxFX1NFTSk7Cit9CisKK3N0 YXRpYyBpbmxpbmUgdm9pZAordGFibGVfbWFwX3VubG9jayh2b2lkKQoreworCXBvb2xfc2VtYXBo b3JlX3VubG9jayhUQUJMRV9NVVRBVElPTl9NQVBfVEFCTEVfU0VNKTsKK30KKworc3RhdGljIGlu bGluZSB2b2lkCitxdWVyeV9jYWNoZV9sb2NrKHZvaWQpCit7CisJcG9vbF9zZW1hcGhvcmVfbG9j ayhUQUJMRV9NVVRBVElPTl9NQVBfUVVFUllfU0VNKTsKK30KKworc3RhdGljIGlubGluZSB2b2lk CitxdWVyeV9jYWNoZV91bmxvY2sodm9pZCkKK3sKKwlwb29sX3NlbWFwaG9yZV91bmxvY2soVEFC TEVfTVVUQVRJT05fTUFQX1FVRVJZX1NFTSk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0KKyAq IEhhc2ggZnVuY3Rpb25zCisgKiAtLS0tLS0tLS0tLS0tLS0tCisgKi8KKworLyoKKyAqIEZOVi0x YSBoYXNoIGZvciB0YWJsZS9kYXRhYmFzZSBvaWQgcGFpcgorICovCitzdGF0aWMgdWludDMyCitm bnYxYV9oYXNoX3RhYmxlX2tleShpbnQgdGFibGVfb2lkLCBpbnQgZGJvaWQpCit7CisJdWludDMy IGhhc2ggPSAyMTY2MTM2MjYxdTsgIC8qIEZOViBvZmZzZXQgYmFzaXMgKi8KKwl1aW50MzIgZGF0 YVsyXTsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpieXRlczsKKwlzaXplX3QgaTsKKworCWRhdGFb MF0gPSAodWludDMyKSB0YWJsZV9vaWQ7CisJZGF0YVsxXSA9ICh1aW50MzIpIGRib2lkOworCWJ5 dGVzID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgZGF0YTsKKworCWZvciAoaSA9IDA7IGkgPCBz aXplb2YoZGF0YSk7IGkrKykKKwl7CisJCWhhc2ggXj0gYnl0ZXNbaV07CisJCWhhc2ggKj0gMTY3 Nzc2MTl1OyAgLyogRk5WIHByaW1lICovCisJfQorCisJcmV0dXJuIGhhc2g7Cit9CisKKy8qCisg KiBGTlYtMWEgaGFzaCBmb3IgNjQtYml0IHZhbHVlCisgKi8KK3N0YXRpYyB1aW50NjQKK2ZudjFh X2hhc2hfNjQoY29uc3QgY2hhciAqc3RyLCBzaXplX3QgbGVuKQoreworCXVpbnQ2NCBoYXNoID0g MTQ2OTU5ODEwMzkzNDY2NTYwMzdVTEw7ICAvKiBGTlYgb2Zmc2V0IGJhc2lzIGZvciA2NC1iaXQg Ki8KKwlzaXplX3QgaTsKKworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKKwl7CisJCWhhc2gg Xj0gKHVpbnQ4KXN0cltpXTsKKwkJaGFzaCAqPSAxMDk5NTExNjI4MjExVUxMOyAgLyogRk5WIHBy aW1lIGZvciA2NC1iaXQgKi8KKwl9CisKKwlyZXR1cm4gaGFzaDsKK30KKworLyogLS0tLS0tLS0t LS0tLS0tLQorICogVGltZSB1dGlsaXRpZXMKKyAqIC0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisv KgorICogR2V0IGVsYXBzZWQgdGltZSBpbiBtaWNyb3NlY29uZHMgYmV0d2VlbiB0d28gdGltZXZh bHMKKyAqLworc3RhdGljIGludDY0CitlbGFwc2VkX3VzKHN0cnVjdCB0aW1ldmFsICpzdGFydCwg c3RydWN0IHRpbWV2YWwgKmVuZCkKK3sKKwlyZXR1cm4gKChpbnQ2NCkoZW5kLT50dl9zZWMgLSBz dGFydC0+dHZfc2VjKSAqIDEwMDAwMDApICsKKwkJICAgKGVuZC0+dHZfdXNlYyAtIHN0YXJ0LT50 dl91c2VjKTsKK30KKworLyoKKyAqIEdldCBjdXJyZW50IHRpbWUKKyAqLworc3RhdGljIHZvaWQK K2dldF9jdXJyZW50X3RpbWUoc3RydWN0IHRpbWV2YWwgKnR2KQoreworCWdldHRpbWVvZmRheSh0 diwgTlVMTCk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0KKyAqIERhdGFiYXNlIG9pZCBsb29r dXAKKyAqIC0tLS0tLS0tLS0tLS0tLS0KKyAqLworCitzdGF0aWMgaW50Cit0YWJsZV9tdXRhdGlv bl9tYXBfZ2V0X2RhdGFiYXNlX29pZF9pbnRlcm5hbCh2b2lkKQoreworCWludAkJCW9pZCA9IDA7 CisJc3RhdGljIFBPT0xfUkVMQ0FDSEUgKnJlbGNhY2hlOworCVBPT0xfQ09OTkVDVElPTl9QT09M ICpiYWNrZW5kOworCisJYmFja2VuZCA9IHBvb2xfZ2V0X3Nlc3Npb25fY29udGV4dChmYWxzZSkt PmJhY2tlbmQ7CisJaWYgKGJhY2tlbmQgPT0gTlVMTCB8fCBNQUlOX0NPTk5FQ1RJT04oYmFja2Vu ZCkgPT0gTlVMTCB8fCBNQUlOX0NPTk5FQ1RJT04oYmFja2VuZCktPnNwID09IE5VTEwpCisJCXJl dHVybiBvaWQ7CisKKwlpZiAoIXJlbGNhY2hlKQorCXsKKwkJcmVsY2FjaGUgPSBwb29sX2NyZWF0 ZV9yZWxjYWNoZShwb29sX2NvbmZpZy0+cmVsY2FjaGVfc2l6ZSwKKwkJCQkJCQkJCQlEQVRBQkFT RV9UT19PSURfUVVFUlksCisJCQkJCQkJCQkJaW50X3JlZ2lzdGVyX2Z1bmMsCisJCQkJCQkJCQkJ aW50X3VucmVnaXN0ZXJfZnVuYywKKwkJCQkJCQkJCQlmYWxzZSk7CisJCWlmIChyZWxjYWNoZSA9 PSBOVUxMKQorCQl7CisJCQllcmVwb3J0KExPRywKKwkJCQkJKGVycm1zZygidGFibGVfbXV0YXRp b25fbWFwOiBlcnJvciBjcmVhdGluZyByZWxjYWNoZSB3aGlsZSBnZXR0aW5nIGRhdGFiYXNlIE9J RCIpKSk7CisJCQlyZXR1cm4gb2lkOworCQl9CisJfQorCisJb2lkID0gKGludCkgKGludHB0cl90 KSBwb29sX3NlYXJjaF9yZWxjYWNoZShyZWxjYWNoZSwgYmFja2VuZCwKKwkJCQkJCQkJCQkJCU1B SU5fQ09OTkVDVElPTihiYWNrZW5kKS0+c3AtPmRhdGFiYXNlKTsKKwlyZXR1cm4gb2lkOworfQor CitpbnQKK3Bvb2xfdGFibGVfbXV0YXRpb25fbWFwX2dldF9kYXRhYmFzZV9vaWQodm9pZCkKK3sK KwlyZXR1cm4gdGFibGVfbXV0YXRpb25fbWFwX2dldF9kYXRhYmFzZV9vaWRfaW50ZXJuYWwoKTsK K30KKworLyogLS0tLS0tLS0tLS0tLS0tLQorICogVGFibGUgbXV0YXRpb24gaGFzaCB0YWJsZSBv cGVyYXRpb25zCisgKiAtLS0tLS0tLS0tLS0tLS0tCisgKi8KKworLyoKKyAqIEluaXRpYWxpemUg dGFibGUgbXV0YXRpb24gaGFzaCB0YWJsZQorICovCitzdGF0aWMgdm9pZAordGFibGVfbWFwX2lu aXQoVGFibGVNdXRhdGlvbkhhc2hUYWJsZSAqbWFwLCBpbnQgbnVtX2J1Y2tldHMsIGludCBtYXhf ZW50cmllcykKK3sKKwlpbnQgKmJ1Y2tldHM7CisJVGFibGVNdXRhdGlvbkVudHJ5ICplbnRyaWVz OworCWludCBpOworCisJbWFwLT5udW1fYnVja2V0cyA9IG51bV9idWNrZXRzOworCW1hcC0+bWF4 X2VudHJpZXMgPSBtYXhfZW50cmllczsKKwltYXAtPm51bV9lbnRyaWVzID0gMDsKKwltYXAtPmZy ZWVfbGlzdF9oZWFkID0gMDsKKworCWJ1Y2tldHMgPSBUQUJMRV9NQVBfQlVDS0VUUyhtYXApOwor CWVudHJpZXMgPSBUQUJMRV9NQVBfRU5UUklFUyhtYXApOworCisJLyogSW5pdGlhbGl6ZSBhbGwg YnVja2V0cyB0byBlbXB0eSAqLworCWZvciAoaSA9IDA7IGkgPCBudW1fYnVja2V0czsgaSsrKQor CQlidWNrZXRzW2ldID0gVEFCTEVfTVVUQVRJT05fTUFQX0lOVkFMSURfSU5ERVg7CisKKwkvKiBJ bml0aWFsaXplIGZyZWUgbGlzdCAtIGNoYWluIGFsbCBlbnRyaWVzICovCisJZm9yIChpID0gMDsg aSA8IG1heF9lbnRyaWVzOyBpKyspCisJeworCQllbnRyaWVzW2ldLmluX3VzZSA9IGZhbHNlOwor CQllbnRyaWVzW2ldLm5leHQgPSAoaSA8IG1heF9lbnRyaWVzIC0gMSkgPyBpICsgMSA6IFRBQkxF X01VVEFUSU9OX01BUF9JTlZBTElEX0lOREVYOworCX0KKworCWVyZXBvcnQoREVCVUcxLAorCQkJ KGVycm1zZygidGFibGVfbXV0YXRpb25fbWFwOiBpbml0aWFsaXplZCB0YWJsZSBtYXAgd2l0aCAl ZCBidWNrZXRzLCAlZCBtYXggZW50cmllcyIsCisJCQkJCW51bV9idWNrZXRzLCBtYXhfZW50cmll cykpKTsKK30KKworLyoKKyAqIEFsbG9jYXRlIGFuIGVudHJ5IGZyb20gdGhlIGZyZWUgbGlzdAor ICovCitzdGF0aWMgaW50Cit0YWJsZV9tYXBfYWxsb2NfZW50cnkoVGFibGVNdXRhdGlvbkhhc2hU YWJsZSAqbWFwKQoreworCVRhYmxlTXV0YXRpb25FbnRyeSAqZW50cmllcyA9IFRBQkxFX01BUF9F TlRSSUVTKG1hcCk7CisJaW50IGlkeDsKKworCWlmIChtYXAtPmZyZWVfbGlzdF9oZWFkID09IFRB QkxFX01VVEFUSU9OX01BUF9JTlZBTElEX0lOREVYKQorCQlyZXR1cm4gVEFCTEVfTVVUQVRJT05f TUFQX0lOVkFMSURfSU5ERVg7CisKKwlpZHggPSBtYXAtPmZyZWVfbGlzdF9oZWFkOworCW1hcC0+ ZnJlZV9saXN0X2hlYWQgPSBlbnRyaWVzW2lkeF0ubmV4dDsKKwllbnRyaWVzW2lkeF0uaW5fdXNl ID0gdHJ1ZTsKKwllbnRyaWVzW2lkeF0ubmV4dCA9IFRBQkxFX01VVEFUSU9OX01BUF9JTlZBTElE X0lOREVYOworCW1hcC0+bnVtX2VudHJpZXMrKzsKKworCXJldHVybiBpZHg7Cit9CisKKy8qCisg KiBGcmVlIGFuIGVudHJ5IGJhY2sgdG8gdGhlIGZyZWUgbGlzdAorICovCitzdGF0aWMgdm9pZAor dGFibGVfbWFwX2ZyZWVfZW50cnkoVGFibGVNdXRhdGlvbkhhc2hUYWJsZSAqbWFwLCBpbnQgaWR4 KQoreworCVRhYmxlTXV0YXRpb25FbnRyeSAqZW50cmllcyA9IFRBQkxFX01BUF9FTlRSSUVTKG1h cCk7CisKKwllbnRyaWVzW2lkeF0uaW5fdXNlID0gZmFsc2U7CisJZW50cmllc1tpZHhdLm5leHQg PSBtYXAtPmZyZWVfbGlzdF9oZWFkOworCW1hcC0+ZnJlZV9saXN0X2hlYWQgPSBpZHg7CisJbWFw LT5udW1fZW50cmllcy0tOworfQorCisvKgorICogTG9vayB1cCBhIHRhYmxlIGluIHRoZSBoYXNo IHRhYmxlCisgKiBSZXR1cm5zIGVudHJ5IGluZGV4IG9yIFRBQkxFX01VVEFUSU9OX01BUF9JTlZB TElEX0lOREVYIGlmIG5vdCBmb3VuZAorICogTXVzdCBiZSBjYWxsZWQgd2l0aCBsb2NrIGhlbGQK KyAqLworc3RhdGljIGludAordGFibGVfbWFwX2xvb2t1cChUYWJsZU11dGF0aW9uSGFzaFRhYmxl ICptYXAsIGludCB0YWJsZV9vaWQsIGludCBkYm9pZCwgdWludDMyIGhhc2gpCit7CisJaW50ICpi dWNrZXRzID0gVEFCTEVfTUFQX0JVQ0tFVFMobWFwKTsKKwlUYWJsZU11dGF0aW9uRW50cnkgKmVu dHJpZXMgPSBUQUJMRV9NQVBfRU5UUklFUyhtYXApOworCWludCBidWNrZXQgPSBoYXNoICUgbWFw LT5udW1fYnVja2V0czsKKwlpbnQgaWR4ID0gYnVja2V0c1tidWNrZXRdOworCisJd2hpbGUgKGlk eCAhPSBUQUJMRV9NVVRBVElPTl9NQVBfSU5WQUxJRF9JTkRFWCkKKwl7CisJCWlmIChlbnRyaWVz W2lkeF0uaGFzaCA9PSBoYXNoICYmCisJCQllbnRyaWVzW2lkeF0udGFibGVfb2lkID09IHRhYmxl X29pZCAmJgorCQkJZW50cmllc1tpZHhdLmRib2lkID09IGRib2lkKQorCQl7CisJCQlyZXR1cm4g aWR4OworCQl9CisJCWlkeCA9IGVudHJpZXNbaWR4XS5uZXh0OworCX0KKworCXJldHVybiBUQUJM RV9NVVRBVElPTl9NQVBfSU5WQUxJRF9JTkRFWDsKK30KKworLyoKKyAqIEluc2VydCBvciB1cGRh dGUgYSB0YWJsZSBlbnRyeQorICogTXVzdCBiZSBjYWxsZWQgd2l0aCBsb2NrIGhlbGQKKyAqLwor c3RhdGljIHZvaWQKK3RhYmxlX21hcF9pbnNlcnQoVGFibGVNdXRhdGlvbkhhc2hUYWJsZSAqbWFw LCBpbnQgdGFibGVfb2lkLCBpbnQgZGJvaWQsCisJCQkJIHVpbnQzMiBoYXNoLCBzdHJ1Y3QgdGlt ZXZhbCAqd3JpdGVfdGltZSkKK3sKKwlpbnQgKmJ1Y2tldHMgPSBUQUJMRV9NQVBfQlVDS0VUUyht YXApOworCVRhYmxlTXV0YXRpb25FbnRyeSAqZW50cmllcyA9IFRBQkxFX01BUF9FTlRSSUVTKG1h cCk7CisJaW50IGJ1Y2tldCA9IGhhc2ggJSBtYXAtPm51bV9idWNrZXRzOworCWludCBpZHg7CisK KwkvKiBDaGVjayBpZiBlbnRyeSBhbHJlYWR5IGV4aXN0cyAqLworCWlkeCA9IHRhYmxlX21hcF9s b29rdXAobWFwLCB0YWJsZV9vaWQsIGRib2lkLCBoYXNoKTsKKwlpZiAoaWR4ICE9IFRBQkxFX01V VEFUSU9OX01BUF9JTlZBTElEX0lOREVYKQorCXsKKwkJLyogVXBkYXRlIGV4aXN0aW5nIGVudHJ5 ICovCisJCWVudHJpZXNbaWR4XS5sYXN0X3dyaXRlX3RpbWUgPSAqd3JpdGVfdGltZTsKKwkJcmV0 dXJuOworCX0KKworCS8qIEFsbG9jYXRlIG5ldyBlbnRyeSAqLworCWlkeCA9IHRhYmxlX21hcF9h bGxvY19lbnRyeShtYXApOworCWlmIChpZHggPT0gVEFCTEVfTVVUQVRJT05fTUFQX0lOVkFMSURf SU5ERVgpCisJeworCQlpbnQgYjsKKwkJLyogVGFibGUgaXMgZnVsbCAtIGV2aWN0IGFuIGVudHJ5 ICovCisJCS8qIEZvciBzaW1wbGljaXR5LCBqdXN0IHVzZSB0aGUgZmlyc3QgZW50cnkgaW4gZmly c3Qgbm9uLWVtcHR5IGJ1Y2tldCAqLworCQlmb3IgKGIgPSAwOyBiIDwgbWFwLT5udW1fYnVja2V0 czsgYisrKQorCQl7CisJCQlpZiAoYnVja2V0c1tiXSAhPSBUQUJMRV9NVVRBVElPTl9NQVBfSU5W QUxJRF9JTkRFWCkKKwkJCXsKKwkJCQlpbnQgdmljdGltID0gYnVja2V0c1tiXTsKKwkJCQlidWNr ZXRzW2JdID0gZW50cmllc1t2aWN0aW1dLm5leHQ7CisJCQkJdGFibGVfbWFwX2ZyZWVfZW50cnko bWFwLCB2aWN0aW0pOworCQkJCWlkeCA9IHRhYmxlX21hcF9hbGxvY19lbnRyeShtYXApOworCQkJ CWJyZWFrOworCQkJfQorCQl9CisKKwkJaWYgKGlkeCA9PSBUQUJMRV9NVVRBVElPTl9NQVBfSU5W QUxJRF9JTkRFWCkKKwkJeworCQkJZXJlcG9ydChXQVJOSU5HLAorCQkJCQkoZXJybXNnKCJ0YWJs ZV9tdXRhdGlvbl9tYXA6IGZhaWxlZCB0byBhbGxvY2F0ZSBlbnRyeSBmb3IgdGFibGUgb2lkICVk IChkYm9pZCAlZCkiLAorCQkJCQkJCXRhYmxlX29pZCwgZGJvaWQpKSk7CisJCQlyZXR1cm47CisJ CX0KKwl9CisKKwkvKiBJbml0aWFsaXplIG5ldyBlbnRyeSAqLworCWVudHJpZXNbaWR4XS50YWJs ZV9vaWQgPSB0YWJsZV9vaWQ7CisJZW50cmllc1tpZHhdLmRib2lkID0gZGJvaWQ7CisJZW50cmll c1tpZHhdLmhhc2ggPSBoYXNoOworCWVudHJpZXNbaWR4XS5sYXN0X3dyaXRlX3RpbWUgPSAqd3Jp dGVfdGltZTsKKworCS8qIEluc2VydCBhdCBoZWFkIG9mIGJ1Y2tldCBjaGFpbiAqLworCWVudHJp ZXNbaWR4XS5uZXh0ID0gYnVja2V0c1tidWNrZXRdOworCWJ1Y2tldHNbYnVja2V0XSA9IGlkeDsK KworCWVyZXBvcnQoREVCVUcyLAorCQkJKGVycm1zZygidGFibGVfbXV0YXRpb25fbWFwOiBtYXJr ZWQgdGFibGUgb2lkICVkIChkYm9pZCAlZCkgYXMgd3JpdHRlbiIsCisJCQkJCXRhYmxlX29pZCwg ZGJvaWQpKSk7Cit9CisKKy8qCisgKiBSZW1vdmUgZXhwaXJlZCBlbnRyaWVzIGZyb20gdGhlIHRh YmxlIG1hcAorICogTXVzdCBiZSBjYWxsZWQgd2l0aCBsb2NrIGhlbGQKKyAqLworc3RhdGljIHZv aWQKK3RhYmxlX21hcF9jbGVhbnVwX2V4cGlyZWQoVGFibGVNdXRhdGlvbkhhc2hUYWJsZSAqbWFw LCB1aW50NjQgdHRsX3VzKQoreworCWludCAqYnVja2V0cyA9IFRBQkxFX01BUF9CVUNLRVRTKG1h cCk7CisJVGFibGVNdXRhdGlvbkVudHJ5ICplbnRyaWVzID0gVEFCTEVfTUFQX0VOVFJJRVMobWFw KTsKKwlzdHJ1Y3QgdGltZXZhbCBub3c7CisJaW50IHJlbW92ZWQgPSAwOworCWludCBiOworCisJ Z2V0X2N1cnJlbnRfdGltZSgmbm93KTsKKworCWZvciAoYiA9IDA7IGIgPCBtYXAtPm51bV9idWNr ZXRzOyBiKyspCisJeworCQlpbnQgKnByZXZfcHRyID0gJmJ1Y2tldHNbYl07CisJCWludCBpZHgg PSBidWNrZXRzW2JdOworCisJCXdoaWxlIChpZHggIT0gVEFCTEVfTVVUQVRJT05fTUFQX0lOVkFM SURfSU5ERVgpCisJCXsKKwkJCWludDY0IGVsYXBzZWQgPSBlbGFwc2VkX3VzKCZlbnRyaWVzW2lk eF0ubGFzdF93cml0ZV90aW1lLCAmbm93KTsKKworCQkJaWYgKGVsYXBzZWQgPiAoaW50NjQpdHRs X3VzKQorCQkJeworCQkJCS8qIEVudHJ5IGhhcyBleHBpcmVkIC0gcmVtb3ZlIGl0ICovCisJCQkJ aW50IG5leHQgPSBlbnRyaWVzW2lkeF0ubmV4dDsKKwkJCQkqcHJldl9wdHIgPSBuZXh0OworCQkJ CXRhYmxlX21hcF9mcmVlX2VudHJ5KG1hcCwgaWR4KTsKKwkJCQlpZHggPSBuZXh0OworCQkJCXJl bW92ZWQrKzsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlwcmV2X3B0ciA9ICZlbnRyaWVzW2lk eF0ubmV4dDsKKwkJCQlpZHggPSBlbnRyaWVzW2lkeF0ubmV4dDsKKwkJCX0KKwkJfQorCX0KKwor CWlmIChyZW1vdmVkID4gMCkKKwl7CisJCWVyZXBvcnQoREVCVUcxLAorCQkJCShlcnJtc2coInRh YmxlX211dGF0aW9uX21hcDogY2xlYW5lZCB1cCAlZCBleHBpcmVkIHRhYmxlIGVudHJpZXMiLCBy ZW1vdmVkKSkpOworCX0KK30KKworLyogLS0tLS0tLS0tLS0tLS0tLQorICogUXVlcnkgcGFyc2Ug Y2FjaGUgb3BlcmF0aW9ucworICogLS0tLS0tLS0tLS0tLS0tLQorICovCisKKy8qCisgKiBJbml0 aWFsaXplIHF1ZXJ5IHBhcnNlIGNhY2hlCisgKi8KK3N0YXRpYyB2b2lkCitxdWVyeV9jYWNoZV9p bml0KFF1ZXJ5UGFyc2VDYWNoZSAqY2FjaGUsIGludCBudW1fYnVja2V0cywgaW50IG1heF9lbnRy aWVzKQoreworCWludCAqYnVja2V0czsKKwlRdWVyeVBhcnNlRW50cnkgKmVudHJpZXM7CisJaW50 IGk7CisKKwljYWNoZS0+bnVtX2J1Y2tldHMgPSBudW1fYnVja2V0czsKKwljYWNoZS0+bWF4X2Vu dHJpZXMgPSBtYXhfZW50cmllczsKKwljYWNoZS0+bnVtX2VudHJpZXMgPSAwOworCWNhY2hlLT5m cmVlX2xpc3RfaGVhZCA9IDA7CisJY2FjaGUtPmxydV9oZWFkID0gVEFCTEVfTVVUQVRJT05fTUFQ X0lOVkFMSURfSU5ERVg7CisJY2FjaGUtPmxydV90YWlsID0gVEFCTEVfTVVUQVRJT05fTUFQX0lO VkFMSURfSU5ERVg7CisKKwlidWNrZXRzID0gUVVFUllfQ0FDSEVfQlVDS0VUUyhjYWNoZSk7CisJ ZW50cmllcyA9IFFVRVJZX0NBQ0hFX0VOVFJJRVMoY2FjaGUpOworCisJLyogSW5pdGlhbGl6ZSBh bGwgYnVja2V0cyB0byBlbXB0eSAqLworCWZvciAoaSA9IDA7IGkgPCBudW1fYnVja2V0czsgaSsr KQorCQlidWNrZXRzW2ldID0gVEFCTEVfTVVUQVRJT05fTUFQX0lOVkFMSURfSU5ERVg7CisKKwkv KiBJbml0aWFsaXplIGZyZWUgbGlzdCAqLworCWZvciAoaSA9IDA7IGkgPCBtYXhfZW50cmllczsg aSsrKQorCXsKKwkJZW50cmllc1tpXS5pbl91c2UgPSBmYWxzZTsKKwkJZW50cmllc1tpXS5uZXh0 ID0gKGkgPCBtYXhfZW50cmllcyAtIDEpID8gaSArIDEgOiBUQUJMRV9NVVRBVElPTl9NQVBfSU5W QUxJRF9JTkRFWDsKKwkJZW50cmllc1tpXS5scnVfcHJldiA9IFRBQkxFX01VVEFUSU9OX01BUF9J TlZBTElEX0lOREVYOworCQllbnRyaWVzW2ldLmxydV9uZXh0ID0gVEFCTEVfTVVUQVRJT05fTUFQ X0lOVkFMSURfSU5ERVg7CisJfQorCisJZXJlcG9ydChERUJVRzEsCisJCQkoZXJybXNnKCJ0YWJs ZV9tdXRhdGlvbl9tYXA6IGluaXRpYWxpemVkIHF1ZXJ5IGNhY2hlIHdpdGggJWQgYnVja2V0cywg JWQgbWF4IGVudHJpZXMiLAorCQkJCQludW1fYnVja2V0cywgbWF4X2VudHJpZXMpKSk7Cit9CisK Ky8qCisgKiBNb3ZlIGVudHJ5IHRvIGZyb250IG9mIExSVSBsaXN0IChtb3N0IHJlY2VudGx5IHVz ZWQpCisgKi8KK3N0YXRpYyB2b2lkCitxdWVyeV9jYWNoZV9scnVfdG91Y2goUXVlcnlQYXJzZUNh Y2hlICpjYWNoZSwgaW50IGlkeCkKK3sKKwlRdWVyeVBhcnNlRW50cnkgKmVudHJpZXMgPSBRVUVS WV9DQUNIRV9FTlRSSUVTKGNhY2hlKTsKKworCS8qIEFscmVhZHkgYXQgaGVhZD8gKi8KKwlpZiAo Y2FjaGUtPmxydV9oZWFkID09IGlkeCkKKwkJcmV0dXJuOworCisJLyogUmVtb3ZlIGZyb20gY3Vy cmVudCBwb3NpdGlvbiAqLworCWlmIChlbnRyaWVzW2lkeF0ubHJ1X3ByZXYgIT0gVEFCTEVfTVVU QVRJT05fTUFQX0lOVkFMSURfSU5ERVgpCisJCWVudHJpZXNbZW50cmllc1tpZHhdLmxydV9wcmV2 XS5scnVfbmV4dCA9IGVudHJpZXNbaWR4XS5scnVfbmV4dDsKKwlpZiAoZW50cmllc1tpZHhdLmxy dV9uZXh0ICE9IFRBQkxFX01VVEFUSU9OX01BUF9JTlZBTElEX0lOREVYKQorCQllbnRyaWVzW2Vu dHJpZXNbaWR4XS5scnVfbmV4dF0ubHJ1X3ByZXYgPSBlbnRyaWVzW2lkeF0ubHJ1X3ByZXY7CisJ aWYgKGNhY2hlLT5scnVfdGFpbCA9PSBpZHgpCisJCWNhY2hlLT5scnVfdGFpbCA9IGVudHJpZXNb aWR4XS5scnVfcHJldjsKKworCS8qIEluc2VydCBhdCBoZWFkICovCisJZW50cmllc1tpZHhdLmxy dV9wcmV2ID0gVEFCTEVfTVVUQVRJT05fTUFQX0lOVkFMSURfSU5ERVg7CisJZW50cmllc1tpZHhd LmxydV9uZXh0ID0gY2FjaGUtPmxydV9oZWFkOworCWlmIChjYWNoZS0+bHJ1X2hlYWQgIT0gVEFC TEVfTVVUQVRJT05fTUFQX0lOVkFMSURfSU5ERVgpCisJCWVudHJpZXNbY2FjaGUtPmxydV9oZWFk XS5scnVfcHJldiA9IGlkeDsKKwljYWNoZS0+bHJ1X2hlYWQgPSBpZHg7CisJaWYgKGNhY2hlLT5s cnVfdGFpbCA9PSBUQUJMRV9NVVRBVElPTl9NQVBfSU5WQUxJRF9JTkRFWCkKKwkJY2FjaGUtPmxy dV90YWlsID0gaWR4OworfQorCisvKgorICogQWRkIGVudHJ5IHRvIExSVSBsaXN0IChhdCBoZWFk KQorICovCitzdGF0aWMgdm9pZAorcXVlcnlfY2FjaGVfbHJ1X2FkZChRdWVyeVBhcnNlQ2FjaGUg KmNhY2hlLCBpbnQgaWR4KQoreworCVF1ZXJ5UGFyc2VFbnRyeSAqZW50cmllcyA9IFFVRVJZX0NB Q0hFX0VOVFJJRVMoY2FjaGUpOworCisJZW50cmllc1tpZHhdLmxydV9wcmV2ID0gVEFCTEVfTVVU QVRJT05fTUFQX0lOVkFMSURfSU5ERVg7CisJZW50cmllc1tpZHhdLmxydV9uZXh0ID0gY2FjaGUt PmxydV9oZWFkOworCisJaWYgKGNhY2hlLT5scnVfaGVhZCAhPSBUQUJMRV9NVVRBVElPTl9NQVBf SU5WQUxJRF9JTkRFWCkKKwkJZW50cmllc1tjYWNoZS0+bHJ1X2hlYWRdLmxydV9wcmV2ID0gaWR4 OworCisJY2FjaGUtPmxydV9oZWFkID0gaWR4OworCisJaWYgKGNhY2hlLT5scnVfdGFpbCA9PSBU QUJMRV9NVVRBVElPTl9NQVBfSU5WQUxJRF9JTkRFWCkKKwkJY2FjaGUtPmxydV90YWlsID0gaWR4 OworfQorCisvKgorICogUmVtb3ZlIGVudHJ5IGZyb20gTFJVIGxpc3QKKyAqLworc3RhdGljIHZv aWQKK3F1ZXJ5X2NhY2hlX2xydV9yZW1vdmUoUXVlcnlQYXJzZUNhY2hlICpjYWNoZSwgaW50IGlk eCkKK3sKKwlRdWVyeVBhcnNlRW50cnkgKmVudHJpZXMgPSBRVUVSWV9DQUNIRV9FTlRSSUVTKGNh Y2hlKTsKKworCWlmIChlbnRyaWVzW2lkeF0ubHJ1X3ByZXYgIT0gVEFCTEVfTVVUQVRJT05fTUFQ X0lOVkFMSURfSU5ERVgpCisJCWVudHJpZXNbZW50cmllc1tpZHhdLmxydV9wcmV2XS5scnVfbmV4 dCA9IGVudHJpZXNbaWR4XS5scnVfbmV4dDsKKwllbHNlCisJCWNhY2hlLT5scnVfaGVhZCA9IGVu dHJpZXNbaWR4XS5scnVfbmV4dDsKKworCWlmIChlbnRyaWVzW2lkeF0ubHJ1X25leHQgIT0gVEFC TEVfTVVUQVRJT05fTUFQX0lOVkFMSURfSU5ERVgpCisJCWVudHJpZXNbZW50cmllc1tpZHhdLmxy dV9uZXh0XS5scnVfcHJldiA9IGVudHJpZXNbaWR4XS5scnVfcHJldjsKKwllbHNlCisJCWNhY2hl LT5scnVfdGFpbCA9IGVudHJpZXNbaWR4XS5scnVfcHJldjsKKworCWVudHJpZXNbaWR4XS5scnVf cHJldiA9IFRBQkxFX01VVEFUSU9OX01BUF9JTlZBTElEX0lOREVYOworCWVudHJpZXNbaWR4XS5s cnVfbmV4dCA9IFRBQkxFX01VVEFUSU9OX01BUF9JTlZBTElEX0lOREVYOworfQorCisvKgorICog QWxsb2NhdGUgZW50cnkgZnJvbSBmcmVlIGxpc3QsIGV2aWN0aW5nIExSVSBpZiBuZWNlc3NhcnkK KyAqLworc3RhdGljIGludAorcXVlcnlfY2FjaGVfYWxsb2NfZW50cnkoUXVlcnlQYXJzZUNhY2hl ICpjYWNoZSkKK3sKKwlRdWVyeVBhcnNlRW50cnkgKmVudHJpZXMgPSBRVUVSWV9DQUNIRV9FTlRS SUVTKGNhY2hlKTsKKwlpbnQgKmJ1Y2tldHMgPSBRVUVSWV9DQUNIRV9CVUNLRVRTKGNhY2hlKTsK KwlpbnQgaWR4OworCisJaWYgKGNhY2hlLT5mcmVlX2xpc3RfaGVhZCAhPSBUQUJMRV9NVVRBVElP Tl9NQVBfSU5WQUxJRF9JTkRFWCkKKwl7CisJCWlkeCA9IGNhY2hlLT5mcmVlX2xpc3RfaGVhZDsK KwkJY2FjaGUtPmZyZWVfbGlzdF9oZWFkID0gZW50cmllc1tpZHhdLm5leHQ7CisJCWVudHJpZXNb aWR4XS5pbl91c2UgPSB0cnVlOworCQllbnRyaWVzW2lkeF0ubmV4dCA9IFRBQkxFX01VVEFUSU9O X01BUF9JTlZBTElEX0lOREVYOworCQljYWNoZS0+bnVtX2VudHJpZXMrKzsKKwkJcmV0dXJuIGlk eDsKKwl9CisKKwkvKiBObyBmcmVlIGVudHJpZXMgLSBldmljdCBMUlUgKi8KKwlpZiAoY2FjaGUt PmxydV90YWlsID09IFRBQkxFX01VVEFUSU9OX01BUF9JTlZBTElEX0lOREVYKQorCQlyZXR1cm4g VEFCTEVfTVVUQVRJT05fTUFQX0lOVkFMSURfSU5ERVg7CisKKwlpZHggPSBjYWNoZS0+bHJ1X3Rh aWw7CisKKwkvKiBSZW1vdmUgZnJvbSBoYXNoIGJ1Y2tldCAqLworCWludCBidWNrZXQgPSBlbnRy aWVzW2lkeF0ucXVlcnlfaGFzaCAlIGNhY2hlLT5udW1fYnVja2V0czsKKwlpbnQgKnByZXZfcHRy ID0gJmJ1Y2tldHNbYnVja2V0XTsKKwlpbnQgY3VyciA9IGJ1Y2tldHNbYnVja2V0XTsKKworCXdo aWxlIChjdXJyICE9IFRBQkxFX01VVEFUSU9OX01BUF9JTlZBTElEX0lOREVYKQorCXsKKwkJaWYg KGN1cnIgPT0gaWR4KQorCQl7CisJCQkqcHJldl9wdHIgPSBlbnRyaWVzW2N1cnJdLm5leHQ7CisJ CQlicmVhazsKKwkJfQorCQlwcmV2X3B0ciA9ICZlbnRyaWVzW2N1cnJdLm5leHQ7CisJCWN1cnIg PSBlbnRyaWVzW2N1cnJdLm5leHQ7CisJfQorCisJLyogUmVtb3ZlIGZyb20gTFJVIGxpc3QgKi8K KwlxdWVyeV9jYWNoZV9scnVfcmVtb3ZlKGNhY2hlLCBpZHgpOworCisJLyogUmVpbml0aWFsaXpl IGVudHJ5ICovCisJZW50cmllc1tpZHhdLmluX3VzZSA9IHRydWU7CisJZW50cmllc1tpZHhdLm5l eHQgPSBUQUJMRV9NVVRBVElPTl9NQVBfSU5WQUxJRF9JTkRFWDsKKworCXJldHVybiBpZHg7Cit9 CisKKy8qCisgKiBMb29rIHVwIGEgcXVlcnkgaW4gdGhlIGNhY2hlCisgKi8KK3N0YXRpYyBpbnQK K3F1ZXJ5X2NhY2hlX2xvb2t1cChRdWVyeVBhcnNlQ2FjaGUgKmNhY2hlLCB1aW50NjQgaGFzaCkK K3sKKwlpbnQgKmJ1Y2tldHMgPSBRVUVSWV9DQUNIRV9CVUNLRVRTKGNhY2hlKTsKKwlRdWVyeVBh cnNlRW50cnkgKmVudHJpZXMgPSBRVUVSWV9DQUNIRV9FTlRSSUVTKGNhY2hlKTsKKwlpbnQgYnVj a2V0ID0gaGFzaCAlIGNhY2hlLT5udW1fYnVja2V0czsKKwlpbnQgaWR4ID0gYnVja2V0c1tidWNr ZXRdOworCisJd2hpbGUgKGlkeCAhPSBUQUJMRV9NVVRBVElPTl9NQVBfSU5WQUxJRF9JTkRFWCkK Kwl7CisJCWlmIChlbnRyaWVzW2lkeF0ucXVlcnlfaGFzaCA9PSBoYXNoKQorCQkJcmV0dXJuIGlk eDsKKwkJaWR4ID0gZW50cmllc1tpZHhdLm5leHQ7CisJfQorCisJcmV0dXJuIFRBQkxFX01VVEFU SU9OX01BUF9JTlZBTElEX0lOREVYOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tCisgKiBRdWVy eSBub3JtYWxpemF0aW9uCisgKiAtLS0tLS0tLS0tLS0tLS0tCisgKi8KKworLyoKKyAqIFNpbXBs ZSBxdWVyeSBub3JtYWxpemF0aW9uOgorICogLSBTdHJpcCBjb21tZW50cyAoLS0gc3R5bGUgYW5k IEMtc3R5bGUgYmxvY2sgY29tbWVudHMpCisgKiAtIENvbGxhcHNlIHdoaXRlc3BhY2UKKyAqIC0g Q29udmVydCB0byBsb3dlcmNhc2UgKGV4Y2VwdCBpbnNpZGUgc3RyaW5ncykKKyAqIC0gUmVwbGFj ZSBsaXRlcmFsIHZhbHVlcyB3aXRoIHBsYWNlaG9sZGVycworICoKKyAqIFRoaXMgaXMgYSBzaW1w bGlmaWVkIHZlcnNpb24gLSBwZ3Bvb2wyIGFscmVhZHkgZG9lcyB0aGlzIGVsc2V3aGVyZSwKKyAq IGJ1dCB3ZSBuZWVkIGEgc3RhbmRhbG9uZSB2ZXJzaW9uIGZvciB0aGUgdGFibGUgbXV0YXRpb24g bWFwIGZlYXR1cmUuCisgKi8KK3N0YXRpYyBzaXplX3QKK25vcm1hbGl6ZV9xdWVyeShjb25zdCBj aGFyICpxdWVyeSwgY2hhciAqb3V0cHV0LCBzaXplX3Qgb3V0cHV0X3NpemUpCit7CisJY29uc3Qg Y2hhciAqc3JjID0gcXVlcnk7CisJY2hhciAqZHN0ID0gb3V0cHV0OworCWNoYXIgKmRzdF9lbmQg PSBvdXRwdXQgKyBvdXRwdXRfc2l6ZSAtIDE7CisJYm9vbCBpbl9zdHJpbmcgPSBmYWxzZTsKKwlj aGFyIHN0cmluZ19jaGFyID0gMDsKKwlib29sIGxhc3Rfd2FzX3NwYWNlID0gdHJ1ZTsgIC8qIFN0 YXJ0IHRydWUgdG8gc2tpcCBsZWFkaW5nIHNwYWNlICovCisKKwl3aGlsZSAoKnNyYyAmJiBkc3Qg PCBkc3RfZW5kKQorCXsKKwkJLyogSGFuZGxlIHN0cmluZyBsaXRlcmFscyAqLworCQlpZiAoaW5f c3RyaW5nKQorCQl7CisJCQlpZiAoKnNyYyA9PSBzdHJpbmdfY2hhcikKKwkJCXsKKwkJCQlpZiAo KihzcmMgKyAxKSA9PSBzdHJpbmdfY2hhcikKKwkJCQl7CisJCQkJCS8qIEVzY2FwZWQgcXVvdGUg Ki8KKwkJCQkJc3JjICs9IDI7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQlpbl9zdHJpbmcg PSBmYWxzZTsKKwkJCQkqZHN0KysgPSAnJCc7ICAvKiBSZXBsYWNlIHN0cmluZyBjb250ZW50IHdp dGggcGxhY2Vob2xkZXIgKi8KKwkJCX0KKwkJCXNyYysrOworCQkJY29udGludWU7CisJCX0KKwor CQkvKiBDaGVjayBmb3Igc3RyaW5nIHN0YXJ0ICovCisJCWlmICgqc3JjID09ICdcJycgfHwgKnNy YyA9PSAnIicpCisJCXsKKwkJCWluX3N0cmluZyA9IHRydWU7CisJCQlzdHJpbmdfY2hhciA9ICpz cmM7CisJCQlzcmMrKzsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogSGFuZGxlIHNpbmdsZS1s aW5lIGNvbW1lbnRzICovCisJCWlmICgqc3JjID09ICctJyAmJiAqKHNyYyArIDEpID09ICctJykK KwkJeworCQkJd2hpbGUgKCpzcmMgJiYgKnNyYyAhPSAnXG4nKQorCQkJCXNyYysrOworCQkJY29u dGludWU7CisJCX0KKworCQkvKiBIYW5kbGUgbXVsdGktbGluZSBjb21tZW50cyAqLworCQlpZiAo KnNyYyA9PSAnLycgJiYgKihzcmMgKyAxKSA9PSAnKicpCisJCXsKKwkJCXNyYyArPSAyOworCQkJ d2hpbGUgKCpzcmMgJiYgISgqc3JjID09ICcqJyAmJiAqKHNyYyArIDEpID09ICcvJykpCisJCQkJ c3JjKys7CisJCQlpZiAoKnNyYykKKwkJCQlzcmMgKz0gMjsKKwkJCWNvbnRpbnVlOworCQl9CisK KwkJLyogSGFuZGxlIHdoaXRlc3BhY2UgKi8KKwkJaWYgKCpzcmMgPT0gJyAnIHx8ICpzcmMgPT0g J1x0JyB8fCAqc3JjID09ICdcbicgfHwgKnNyYyA9PSAnXHInKQorCQl7CisJCQlpZiAoIWxhc3Rf d2FzX3NwYWNlKQorCQkJeworCQkJCSpkc3QrKyA9ICcgJzsKKwkJCQlsYXN0X3dhc19zcGFjZSA9 IHRydWU7CisJCQl9CisJCQlzcmMrKzsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogSGFuZGxl IG51bWJlcnMgLSByZXBsYWNlIHdpdGggcGxhY2Vob2xkZXIgKi8KKwkJaWYgKCgqc3JjID49ICcw JyAmJiAqc3JjIDw9ICc5JykgfHwKKwkJCSgqc3JjID09ICcuJyAmJiAqKHNyYyArIDEpID49ICcw JyAmJiAqKHNyYyArIDEpIDw9ICc5JykpCisJCXsKKwkJCXdoaWxlICgqc3JjICYmICgoKnNyYyA+ PSAnMCcgJiYgKnNyYyA8PSAnOScpIHx8ICpzcmMgPT0gJy4nKSkKKwkJCQlzcmMrKzsKKwkJCWlm ICghbGFzdF93YXNfc3BhY2UgJiYgZHN0ID4gb3V0cHV0ICYmICooZHN0IC0gMSkgIT0gJyQnKQor CQkJCSpkc3QrKyA9ICckJzsKKwkJCWxhc3Rfd2FzX3NwYWNlID0gZmFsc2U7CisJCQljb250aW51 ZTsKKwkJfQorCisJCS8qIFJlZ3VsYXIgY2hhcmFjdGVyIC0gY29udmVydCB0byBsb3dlcmNhc2Ug Ki8KKwkJaWYgKCpzcmMgPj0gJ0EnICYmICpzcmMgPD0gJ1onKQorCQkJKmRzdCsrID0gKnNyYyAr IDMyOworCQllbHNlCisJCQkqZHN0KysgPSAqc3JjOworCisJCWxhc3Rfd2FzX3NwYWNlID0gZmFs c2U7CisJCXNyYysrOworCX0KKworCS8qIFJlbW92ZSB0cmFpbGluZyBzcGFjZSAqLworCWlmIChk c3QgPiBvdXRwdXQgJiYgKihkc3QgLSAxKSA9PSAnICcpCisJCWRzdC0tOworCisJKmRzdCA9ICdc MCc7CisJcmV0dXJuIGRzdCAtIG91dHB1dDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLQorICog UHVibGljIEFQSSBpbXBsZW1lbnRhdGlvbgorICogLS0tLS0tLS0tLS0tLS0tLQorICovCisKK1Np emUKK3Bvb2xfdGFibGVfbXV0YXRpb25fbWFwX3NobWVtX3NpemUodm9pZCkKK3sKKwlTaXplIHNp emUgPSAwOworCWludCB0YWJsZV9idWNrZXRzID0gcG9vbF9jb25maWctPnRhYmxlX211dGF0aW9u X21hcF90YWJsZV9idWNrZXRzOworCWludCB0YWJsZV9zaXplID0gcG9vbF9jb25maWctPnRhYmxl X211dGF0aW9uX21hcF90YWJsZV9zaXplOworCWludCBxdWVyeV9idWNrZXRzID0gcG9vbF9jb25m aWctPnRhYmxlX211dGF0aW9uX21hcF9xdWVyeV9idWNrZXRzOworCWludCBxdWVyeV9jYWNoZV9z aXplID0gcG9vbF9jb25maWctPnRhYmxlX211dGF0aW9uX21hcF9xdWVyeV9jYWNoZV9zaXplOwor CisJLyogTWFpbiBzdHJ1Y3R1cmUgKi8KKwlzaXplICs9IHNpemVvZihUYWJsZU11dGF0aW9uTWFw U2htZW0pOworCisJLyogVGFibGUgbXV0YXRpb24gaGFzaCB0YWJsZSAqLworCXNpemUgKz0gc2l6 ZW9mKFRhYmxlTXV0YXRpb25IYXNoVGFibGUpOworCXNpemUgKz0gdGFibGVfYnVja2V0cyAqIHNp emVvZihpbnQpOyAgLyogYnVja2V0cyBhcnJheSAqLworCXNpemUgKz0gdGFibGVfc2l6ZSAqIHNp emVvZihUYWJsZU11dGF0aW9uRW50cnkpOyAgLyogZW50cmllcyBhcnJheSAqLworCisJLyogUXVl cnkgcGFyc2UgY2FjaGUgKi8KKwlzaXplICs9IHNpemVvZihRdWVyeVBhcnNlQ2FjaGUpOworCXNp emUgKz0gcXVlcnlfYnVja2V0cyAqIHNpemVvZihpbnQpOyAgLyogYnVja2V0cyBhcnJheSAqLwor CXNpemUgKz0gcXVlcnlfY2FjaGVfc2l6ZSAqIHNpemVvZihRdWVyeVBhcnNlRW50cnkpOyAgLyog ZW50cmllcyBhcnJheSAqLworCisJcmV0dXJuIHNpemU7Cit9CisKK3ZvaWQKK3Bvb2xfdGFibGVf bXV0YXRpb25fbWFwX2luaXQodm9pZCkKK3sKKyNpZm5kZWYgUE9PTF9QUklWQVRFCisJU2l6ZSBz aG1lbV9zaXplOworCWNoYXIgKnNobWVtX3B0cjsKKworCWlmICghcG9vbF9jb25maWctPnRhYmxl X211dGF0aW9uX21hcF9lbmFibGVkKQorCXsKKwkJZXJlcG9ydChERUJVRzEsCisJCQkJKGVycm1z ZygidGFibGVfbXV0YXRpb25fbWFwOiBmZWF0dXJlIGRpc2FibGVkIikpKTsKKwkJcmV0dXJuOwor CX0KKworCXNobWVtX3NpemUgPSBwb29sX3RhYmxlX211dGF0aW9uX21hcF9zaG1lbV9zaXplKCk7 CisKKwkvKgorCSAqIEFsbG9jYXRlIGZyb20gdGhlIG1haW4gc2hhcmVkIG1lbW9yeSBzZWdtZW50 LgorCSAqIE1lbW9yeSBpcyBhbHJlYWR5IHplcm9lZCBieSBpbml0aWFsaXplX3NoYXJlZF9tZW1v cnlfbWFpbl9zZWdtZW50KCkuCisJICovCisJc2htZW1fcHRyID0gcG9vbF9zaGFyZWRfbWVtb3J5 X3NlZ21lbnRfZ2V0X2NodW5rKHNobWVtX3NpemUpOworCWlmIChzaG1lbV9wdHIgPT0gTlVMTCkK Kwl7CisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycm1zZygidGFibGVfbXV0YXRpb25fbWFwOiBm YWlsZWQgdG8gYWxsb2NhdGUgJXp1IGJ5dGVzIG9mIHNoYXJlZCBtZW1vcnkiLAorCQkJCQkJc2ht ZW1fc2l6ZSkpKTsKKwkJcmV0dXJuOworCX0KKworCS8qIFNldCB1cCBwb2ludGVycyB0byBzdHJ1 Y3R1cmVzIHdpdGhpbiBzaGFyZWQgbWVtb3J5ICovCisJdGFibGVfbXV0YXRpb25fbWFwX3NobWVt ID0gKFRhYmxlTXV0YXRpb25NYXBTaG1lbSAqKXNobWVtX3B0cjsKKwlzaG1lbV9wdHIgKz0gc2l6 ZW9mKFRhYmxlTXV0YXRpb25NYXBTaG1lbSk7CisKKwl0YWJsZV9tdXRhdGlvbl9tYXBfc2htZW0t PnRhYmxlX21hcCA9IChUYWJsZU11dGF0aW9uSGFzaFRhYmxlICopc2htZW1fcHRyOworCXNobWVt X3B0ciArPSBzaXplb2YoVGFibGVNdXRhdGlvbkhhc2hUYWJsZSk7CisJc2htZW1fcHRyICs9IHBv b2xfY29uZmlnLT50YWJsZV9tdXRhdGlvbl9tYXBfdGFibGVfYnVja2V0cyAqIHNpemVvZihpbnQp OworCXNobWVtX3B0ciArPSBwb29sX2NvbmZpZy0+dGFibGVfbXV0YXRpb25fbWFwX3RhYmxlX3Np emUgKiBzaXplb2YoVGFibGVNdXRhdGlvbkVudHJ5KTsKKworCXRhYmxlX211dGF0aW9uX21hcF9z aG1lbS0+cXVlcnlfY2FjaGUgPSAoUXVlcnlQYXJzZUNhY2hlICopc2htZW1fcHRyOworCisJLyog SW5pdGlhbGl6ZSBzdHJ1Y3R1cmVzICovCisJdGFibGVfbWFwX2luaXQodGFibGVfbXV0YXRpb25f bWFwX3NobWVtLT50YWJsZV9tYXAsCisJCQkJICAgcG9vbF9jb25maWctPnRhYmxlX211dGF0aW9u X21hcF90YWJsZV9idWNrZXRzLAorCQkJCSAgIHBvb2xfY29uZmlnLT50YWJsZV9tdXRhdGlvbl9t YXBfdGFibGVfc2l6ZSk7CisKKwlxdWVyeV9jYWNoZV9pbml0KHRhYmxlX211dGF0aW9uX21hcF9z aG1lbS0+cXVlcnlfY2FjaGUsCisJCQkJCSBwb29sX2NvbmZpZy0+dGFibGVfbXV0YXRpb25fbWFw X3F1ZXJ5X2J1Y2tldHMsCisJCQkJCSBwb29sX2NvbmZpZy0+dGFibGVfbXV0YXRpb25fbWFwX3F1 ZXJ5X2NhY2hlX3NpemUpOworCisJLyogSW5pdGlhbGl6ZSBnbG9iYWwgc3RhdGUgKi8KKwl0YWJs ZV9tdXRhdGlvbl9tYXBfc2htZW0tPnN0YXRlLmluaXRpYWxpemVkID0gdHJ1ZTsKKwl0YWJsZV9t dXRhdGlvbl9tYXBfc2htZW0tPnN0YXRlLmN1cnJlbnRfdHRsX3VzID0gVEFCTEVfTVVUQVRJT05f TUFQX0RFRkFVTFRfVFRMX1VTOworCWdldF9jdXJyZW50X3RpbWUoJnRhYmxlX211dGF0aW9uX21h cF9zaG1lbS0+c3RhdGUudHRsX2xhc3RfdXBkYXRlZCk7CisJZ2V0X2N1cnJlbnRfdGltZSgmdGFi bGVfbXV0YXRpb25fbWFwX3NobWVtLT5zdGF0ZS5sYXN0X2NsZWFudXBfdGltZSk7CisJdGFibGVf bXV0YXRpb25fbWFwX3NobWVtLT5zdGF0ZS5nbG9iYWxfY29sZF9zdGFydF91bnRpbC50dl9zZWMg PSAwOworCXRhYmxlX211dGF0aW9uX21hcF9zaG1lbS0+c3RhdGUuZ2xvYmFsX2NvbGRfc3RhcnRf dW50aWwudHZfdXNlYyA9IDA7CisJdGFibGVfbXV0YXRpb25fbWFwX3NobWVtLT5zdGF0ZS5zdGF0 c19xdWVyaWVzX2NoZWNrZWQgPSAwOworCXRhYmxlX211dGF0aW9uX21hcF9zaG1lbS0+c3RhdGUu c3RhdHNfZm9yY2VkX3ByaW1hcnkgPSAwOworCXRhYmxlX211dGF0aW9uX21hcF9zaG1lbS0+c3Rh dGUuc3RhdHNfYWxsb3dlZF9yZXBsaWNhID0gMDsKKworCWVyZXBvcnQoTE9HLAorCQkJKGVycm1z ZygidGFibGVfbXV0YXRpb25fbWFwOiBpbml0aWFsaXplZCB3aXRoICV6dSBieXRlcyBzaGFyZWQg bWVtb3J5IiwKKwkJCQkJc2htZW1fc2l6ZSkpKTsKKyNlbmRpZgorfQorCit2b2lkCitwb29sX3Rh YmxlX211dGF0aW9uX21hcF9jaGlsZF9pbml0KHZvaWQpCit7CisJaWYgKCFwb29sX2NvbmZpZy0+ dGFibGVfbXV0YXRpb25fbWFwX2VuYWJsZWQgfHwgdGFibGVfbXV0YXRpb25fbWFwX3NobWVtID09 IE5VTEwpCisJCXJldHVybjsKKworCWdldF9jdXJyZW50X3RpbWUoJnByb2Nlc3Nfc3RhcnRfdGlt ZSk7CisJY29sZF9zdGFydF9pbml0aWFsaXplZCA9IHRydWU7CisKKwllcmVwb3J0KERFQlVHMSwK KwkJCShlcnJtc2coInRhYmxlX211dGF0aW9uX21hcDogY2hpbGQgaW5pdGlhbGl6ZWQsIGNvbGQg c3RhcnQgcGVyaW9kICVkIG1zIiwKKwkJCQkJcG9vbF9jb25maWctPnRhYmxlX211dGF0aW9uX21h cF9jb2xkX3N0YXJ0X2R1cmF0aW9uKSkpOworfQorCitib29sCitwb29sX3RhYmxlX211dGF0aW9u X21hcF9pbl9jb2xkX3N0YXJ0KHZvaWQpCit7CisJc3RydWN0IHRpbWV2YWwgbm93OworCWludDY0 IGVsYXBzZWRfbXM7CisKKwlpZiAoIXBvb2xfY29uZmlnLT50YWJsZV9tdXRhdGlvbl9tYXBfZW5h YmxlZCB8fCB0YWJsZV9tdXRhdGlvbl9tYXBfc2htZW0gPT0gTlVMTCkKKwkJcmV0dXJuIGZhbHNl OworCisJaWYgKHBvb2xfY29uZmlnLT50YWJsZV9tdXRhdGlvbl9tYXBfY29sZF9zdGFydF9kdXJh dGlvbiA8PSAwKQorCQlyZXR1cm4gZmFsc2U7CisKKwlnZXRfY3VycmVudF90aW1lKCZub3cpOwor CisJaWYgKHRhYmxlX211dGF0aW9uX21hcF9zaG1lbS0+c3RhdGUuZ2xvYmFsX2NvbGRfc3RhcnRf dW50aWwudHZfc2VjICE9IDAgJiYKKwkJZWxhcHNlZF91cygmbm93LCAmdGFibGVfbXV0YXRpb25f bWFwX3NobWVtLT5zdGF0ZS5nbG9iYWxfY29sZF9zdGFydF91bnRpbCkgPiAwKQorCXsKKwkJcmV0 dXJuIHRydWU7CisJfQorCisJaWYgKCFjb2xkX3N0YXJ0X2luaXRpYWxpemVkKQorCQlyZXR1cm4g ZmFsc2U7CisKKwllbGFwc2VkX21zID0gZWxhcHNlZF91cygmcHJvY2Vzc19zdGFydF90aW1lLCAm bm93KSAvIDEwMDA7CisKKwlpZiAoZWxhcHNlZF9tcyA8IHBvb2xfY29uZmlnLT50YWJsZV9tdXRh dGlvbl9tYXBfY29sZF9zdGFydF9kdXJhdGlvbikKKwl7CisJCWVyZXBvcnQoREVCVUcyLAorCQkJ CShlcnJtc2coInRhYmxlX211dGF0aW9uX21hcDogaW4gY29sZCBzdGFydCAoJWxkLyVkIG1zKSIs CisJCQkJCQkobG9uZyllbGFwc2VkX21zLCBwb29sX2NvbmZpZy0+dGFibGVfbXV0YXRpb25fbWFw X2NvbGRfc3RhcnRfZHVyYXRpb24pKSk7CisJCXJldHVybiB0cnVlOworCX0KKworCXJldHVybiBm YWxzZTsKK30KKwordm9pZAorcG9vbF90YWJsZV9tdXRhdGlvbl9tYXBfdHJpZ2dlcl9nbG9iYWxf Y29sZF9zdGFydCh2b2lkKQoreworCXN0cnVjdCB0aW1ldmFsIG5vdzsKKwlpbnQgZHVyYXRpb25f bXM7CisKKwlpZiAoIXBvb2xfY29uZmlnLT50YWJsZV9tdXRhdGlvbl9tYXBfZW5hYmxlZCB8fCB0 YWJsZV9tdXRhdGlvbl9tYXBfc2htZW0gPT0gTlVMTCkKKwkJcmV0dXJuOworCisJZHVyYXRpb25f bXMgPSBwb29sX2NvbmZpZy0+dGFibGVfbXV0YXRpb25fbWFwX2NvbGRfc3RhcnRfZHVyYXRpb247 CisJaWYgKGR1cmF0aW9uX21zIDw9IDApCisJCXJldHVybjsKKworCWdldF9jdXJyZW50X3RpbWUo Jm5vdyk7CisJdGFibGVfbXV0YXRpb25fbWFwX3NobWVtLT5zdGF0ZS5nbG9iYWxfY29sZF9zdGFy dF91bnRpbCA9IG5vdzsKKwl0YWJsZV9tdXRhdGlvbl9tYXBfc2htZW0tPnN0YXRlLmdsb2JhbF9j b2xkX3N0YXJ0X3VudGlsLnR2X3NlYyArPSBkdXJhdGlvbl9tcyAvIDEwMDA7CisJdGFibGVfbXV0 YXRpb25fbWFwX3NobWVtLT5zdGF0ZS5nbG9iYWxfY29sZF9zdGFydF91bnRpbC50dl91c2VjICs9 IChkdXJhdGlvbl9tcyAlIDEwMDApICogMTAwMDsKKwlpZiAodGFibGVfbXV0YXRpb25fbWFwX3No bWVtLT5zdGF0ZS5nbG9iYWxfY29sZF9zdGFydF91bnRpbC50dl91c2VjID49IDEwMDAwMDApCisJ eworCQl0YWJsZV9tdXRhdGlvbl9tYXBfc2htZW0tPnN0YXRlLmdsb2JhbF9jb2xkX3N0YXJ0X3Vu dGlsLnR2X3NlYyArPQorCQkJdGFibGVfbXV0YXRpb25fbWFwX3NobWVtLT5zdGF0ZS5nbG9iYWxf Y29sZF9zdGFydF91bnRpbC50dl91c2VjIC8gMTAwMDAwMDsKKwkJdGFibGVfbXV0YXRpb25fbWFw X3NobWVtLT5zdGF0ZS5nbG9iYWxfY29sZF9zdGFydF91bnRpbC50dl91c2VjICU9CisJCQkxMDAw MDAwOworCX0KKworCWVyZXBvcnQoTE9HLAorCQkJKGVycm1zZygidGFibGVfbXV0YXRpb25fbWFw OiBlbnRlcmluZyBnbG9iYWwgY29sZCBzdGFydCBmb3IgJWQgbXMiLAorCQkJCQlkdXJhdGlvbl9t cykpKTsKK30KKworYm9vbAorcG9vbF90YWJsZV9tdXRhdGlvbl9tYXBfdGFibGVfaXNfc3RhbGUo aW50IHRhYmxlX29pZCwgaW50IGRib2lkKQoreworCVRhYmxlTXV0YXRpb25IYXNoVGFibGUgKm1h cDsKKwlzdHJ1Y3QgdGltZXZhbCBub3c7CisJdWludDY0IHR0bF91czsKKwl1aW50MzIgaGFzaDsK KwlpbnQgaWR4OworCWJvb2wgaXNfc3RhbGUgPSBmYWxzZTsKKworCWlmICghcG9vbF9jb25maWct PnRhYmxlX211dGF0aW9uX21hcF9lbmFibGVkIHx8IHRhYmxlX211dGF0aW9uX21hcF9zaG1lbSA9 PSBOVUxMKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAodGFibGVfb2lkIDw9IDAgfHwgZGJvaWQg PD0gMCkKKwl7CisJCWlzX3N0YWxlID0gdHJ1ZTsKKwkJZ290byB1cGRhdGVfc3RhdHM7CisJfQor CisJbWFwID0gdGFibGVfbXV0YXRpb25fbWFwX3NobWVtLT50YWJsZV9tYXA7CisJaGFzaCA9IGZu djFhX2hhc2hfdGFibGVfa2V5KHRhYmxlX29pZCwgZGJvaWQpOworCisJdGFibGVfbWFwX2xvY2so KTsKKworCWlkeCA9IHRhYmxlX21hcF9sb29rdXAobWFwLCB0YWJsZV9vaWQsIGRib2lkLCBoYXNo KTsKKwlpZiAoaWR4ICE9IFRBQkxFX01VVEFUSU9OX01BUF9JTlZBTElEX0lOREVYKQorCXsKKwkJ VGFibGVNdXRhdGlvbkVudHJ5ICplbnRyaWVzID0gVEFCTEVfTUFQX0VOVFJJRVMobWFwKTsKKwkJ Z2V0X2N1cnJlbnRfdGltZSgmbm93KTsKKwkJdHRsX3VzID0gdGFibGVfbXV0YXRpb25fbWFwX3No bWVtLT5zdGF0ZS5jdXJyZW50X3R0bF91czsKKworCQlpbnQ2NCBlbGFwc2VkID0gZWxhcHNlZF91 cygmZW50cmllc1tpZHhdLmxhc3Rfd3JpdGVfdGltZSwgJm5vdyk7CisJCWlzX3N0YWxlID0gKGVs YXBzZWQgPCAoaW50NjQpdHRsX3VzKTsKKworCQllcmVwb3J0KERFQlVHMiwKKwkJCQkoZXJybXNn KCJ0YWJsZV9tdXRhdGlvbl9tYXA6IHRhYmxlIG9pZCAlZCAoZGJvaWQgJWQpIGVsYXBzZWQ9JWxk IHVzLCB0dGw9JWx1IHVzLCBzdGFsZT0lZCIsCisJCQkJCQl0YWJsZV9vaWQsIGRib2lkLCAobG9u ZyllbGFwc2VkLCAodW5zaWduZWQgbG9uZyl0dGxfdXMsIGlzX3N0YWxlKSkpOworCX0KKworCXRh YmxlX21hcF91bmxvY2soKTsKKwordXBkYXRlX3N0YXRzOgorCS8qIFVwZGF0ZSBzdGF0aXN0aWNz ICovCisJX19zeW5jX2ZldGNoX2FuZF9hZGQoJnRhYmxlX211dGF0aW9uX21hcF9zaG1lbS0+c3Rh dGUuc3RhdHNfcXVlcmllc19jaGVja2VkLCAxKTsKKwlpZiAoaXNfc3RhbGUpCisJCV9fc3luY19m ZXRjaF9hbmRfYWRkKCZ0YWJsZV9tdXRhdGlvbl9tYXBfc2htZW0tPnN0YXRlLnN0YXRzX2ZvcmNl ZF9wcmltYXJ5LCAxKTsKKwllbHNlCisJCV9fc3luY19mZXRjaF9hbmRfYWRkKCZ0YWJsZV9tdXRh dGlvbl9tYXBfc2htZW0tPnN0YXRlLnN0YXRzX2FsbG93ZWRfcmVwbGljYSwgMSk7CisKKwlyZXR1 cm4gaXNfc3RhbGU7Cit9CisKK3ZvaWQKK3Bvb2xfdGFibGVfbXV0YXRpb25fbWFwX21hcmtfdGFi bGVzX3dyaXR0ZW4oY29uc3QgaW50ICp0YWJsZV9vaWRzLCBpbnQgbnVtX3RhYmxlcywgaW50IGRi b2lkKQoreworCVRhYmxlTXV0YXRpb25IYXNoVGFibGUgKm1hcDsKKwlzdHJ1Y3QgdGltZXZhbCBu b3c7CisJaW50IGk7CisKKwlpZiAoIXBvb2xfY29uZmlnLT50YWJsZV9tdXRhdGlvbl9tYXBfZW5h YmxlZCB8fCB0YWJsZV9tdXRhdGlvbl9tYXBfc2htZW0gPT0gTlVMTCkKKwkJcmV0dXJuOworCisJ aWYgKG51bV90YWJsZXMgPD0gMCB8fCB0YWJsZV9vaWRzID09IE5VTEwgfHwgZGJvaWQgPD0gMCkK KwkJcmV0dXJuOworCisJbWFwID0gdGFibGVfbXV0YXRpb25fbWFwX3NobWVtLT50YWJsZV9tYXA7 CisJZ2V0X2N1cnJlbnRfdGltZSgmbm93KTsKKworCXRhYmxlX21hcF9sb2NrKCk7CisKKwkvKiBQ ZXJpb2RpY2FsbHkgY2xlYW4gdXAgZXhwaXJlZCBlbnRyaWVzICovCisJaWYgKG1hcC0+bnVtX2Vu dHJpZXMgPiBtYXAtPm1heF9lbnRyaWVzICogMyAvIDQpCisJeworCQkvKiBMaW1pdCBjbGVhbnVw IGZyZXF1ZW5jeSB0byBhdm9pZCBPKE4pIHNjYW4gb24gZXZlcnkgd3JpdGUgKi8KKwkJLyogMTAw bXMgaW50ZXJ2YWwgKi8KKwkJaWYgKGVsYXBzZWRfdXMoJnRhYmxlX211dGF0aW9uX21hcF9zaG1l bS0+c3RhdGUubGFzdF9jbGVhbnVwX3RpbWUsICZub3cpID4gMTAwMDAwKQorCQl7CisJCQl0YWJs ZV9tYXBfY2xlYW51cF9leHBpcmVkKG1hcCwgdGFibGVfbXV0YXRpb25fbWFwX3NobWVtLT5zdGF0 ZS5jdXJyZW50X3R0bF91cyk7CisJCQl0YWJsZV9tdXRhdGlvbl9tYXBfc2htZW0tPnN0YXRlLmxh c3RfY2xlYW51cF90aW1lID0gbm93OworCQl9CisJfQorCisJZm9yIChpID0gMDsgaSA8IG51bV90 YWJsZXM7IGkrKykKKwl7CisJCXVpbnQzMiBoYXNoOworCQlpbnQgdGFibGVfb2lkID0gdGFibGVf b2lkc1tpXTsKKworCQlpZiAodGFibGVfb2lkID4gMCkKKwkJeworCQkJaGFzaCA9IGZudjFhX2hh c2hfdGFibGVfa2V5KHRhYmxlX29pZCwgZGJvaWQpOworCQkJdGFibGVfbWFwX2luc2VydChtYXAs IHRhYmxlX29pZCwgZGJvaWQsIGhhc2gsICZub3cpOworCQl9CisJfQorCisJdGFibGVfbWFwX3Vu bG9jaygpOworfQorCisvKgorICogQ29udmVuaWVuY2UgZnVuY3Rpb24gdG8gbWFyayBhIHNpbmds ZSB0YWJsZSBhcyB3cml0dGVuCisgKi8KK3ZvaWQKK3Bvb2xfdGFibGVfbXV0YXRpb25fbWFwX21h cmtfdGFibGVfd3JpdHRlbihpbnQgdGFibGVfb2lkLCBpbnQgZGJvaWQpCit7CisJaWYgKHRhYmxl X29pZCA+IDAgJiYgZGJvaWQgPiAwKQorCXsKKwkJY29uc3QgaW50IHRhYmxlc1sxXSA9IHsgdGFi bGVfb2lkIH07CisJCXBvb2xfdGFibGVfbXV0YXRpb25fbWFwX21hcmtfdGFibGVzX3dyaXR0ZW4o dGFibGVzLCAxLCBkYm9pZCk7CisJfQorfQorCit2b2lkCitwb29sX3RhYmxlX211dGF0aW9uX21h cF91cGRhdGVfdHRsKHVpbnQ2NCBkZWxheV91cykKK3sKKwl1aW50NjQgbmV3X3R0bDsKKworCWlm ICghcG9vbF9jb25maWctPnRhYmxlX211dGF0aW9uX21hcF9lbmFibGVkIHx8IHRhYmxlX211dGF0 aW9uX21hcF9zaG1lbSA9PSBOVUxMKQorCQlyZXR1cm47CisKKwkvKiBDYWxjdWxhdGUgbmV3IFRU TDogZGVsYXkgKiBmYWN0b3IsIHdpdGggbWluaW11bSBvZiBkZWZhdWx0IFRUTCAqLworCW5ld190 dGwgPSAodWludDY0KShkZWxheV91cyAqIHBvb2xfY29uZmlnLT50YWJsZV9tdXRhdGlvbl9tYXBf dHRsX2ZhY3Rvcik7CisJaWYgKG5ld190dGwgPCBUQUJMRV9NVVRBVElPTl9NQVBfREVGQVVMVF9U VExfVVMpCisJCW5ld190dGwgPSBUQUJMRV9NVVRBVElPTl9NQVBfREVGQVVMVF9UVExfVVM7CisK KwkvKiBNYXhpbXVtIFRUTCBvZiAxIGhvdXIgKi8KKwlpZiAobmV3X3R0bCA+IDM2MDBVTEwgKiAx MDAwMDAwVUxMKQorCQluZXdfdHRsID0gMzYwMFVMTCAqIDEwMDAwMDBVTEw7CisKKwl0YWJsZV9t dXRhdGlvbl9tYXBfc2htZW0tPnN0YXRlLmN1cnJlbnRfdHRsX3VzID0gbmV3X3R0bDsKKwlnZXRf Y3VycmVudF90aW1lKCZ0YWJsZV9tdXRhdGlvbl9tYXBfc2htZW0tPnN0YXRlLnR0bF9sYXN0X3Vw ZGF0ZWQpOworCisJZXJlcG9ydChERUJVRzEsCisJCQkoZXJybXNnKCJ0YWJsZV9tdXRhdGlvbl9t YXA6IHVwZGF0ZWQgVFRMIHRvICVsdSB1cyAoZGVsYXk9JWx1IHVzLCBmYWN0b3I9JS4xZikiLAor CQkJCQkodW5zaWduZWQgbG9uZyluZXdfdHRsLCAodW5zaWduZWQgbG9uZylkZWxheV91cywKKwkJ CQkJcG9vbF9jb25maWctPnRhYmxlX211dGF0aW9uX21hcF90dGxfZmFjdG9yKSkpOworfQorCiti b29sCitwb29sX3RhYmxlX211dGF0aW9uX21hcF9nZXRfY2FjaGVkX3BhcnNlKHVpbnQ2NCBoYXNo LCBib29sICppc193cml0ZSwKKwkJCQkJCQkJIGNoYXIgdGFibGVfbmFtZXNbXVtUQUJMRV9NVVRB VElPTl9NQVBfVEFCTEVfTkFNRV9MRU5dLAorCQkJCQkJCQkgaW50ICpudW1fdGFibGVzKQorewor CVF1ZXJ5UGFyc2VDYWNoZSAqY2FjaGU7CisJaW50IGlkeDsKKwlib29sIGZvdW5kID0gZmFsc2U7 CisKKwlpZiAoIXBvb2xfY29uZmlnLT50YWJsZV9tdXRhdGlvbl9tYXBfZW5hYmxlZCB8fCB0YWJs ZV9tdXRhdGlvbl9tYXBfc2htZW0gPT0gTlVMTCkKKwkJcmV0dXJuIGZhbHNlOworCisJY2FjaGUg PSB0YWJsZV9tdXRhdGlvbl9tYXBfc2htZW0tPnF1ZXJ5X2NhY2hlOworCisJcXVlcnlfY2FjaGVf bG9jaygpOworCisJaWR4ID0gcXVlcnlfY2FjaGVfbG9va3VwKGNhY2hlLCBoYXNoKTsKKwlpZiAo aWR4ICE9IFRBQkxFX01VVEFUSU9OX01BUF9JTlZBTElEX0lOREVYKQorCXsKKwkJUXVlcnlQYXJz ZUVudHJ5ICplbnRyaWVzID0gUVVFUllfQ0FDSEVfRU5UUklFUyhjYWNoZSk7CisJCWludCBpOwor CisJCSppc193cml0ZSA9IGVudHJpZXNbaWR4XS5pc193cml0ZTsKKwkJKm51bV90YWJsZXMgPSBl bnRyaWVzW2lkeF0ubnVtX3RhYmxlczsKKworCQlmb3IgKGkgPSAwOyBpIDwgZW50cmllc1tpZHhd Lm51bV90YWJsZXMgJiYgaSA8IFRBQkxFX01VVEFUSU9OX01BUF9NQVhfVEFCTEVTX1BFUl9RVUVS WTsgaSsrKQorCQl7CisJCQlzdHJsY3B5KHRhYmxlX25hbWVzW2ldLCBlbnRyaWVzW2lkeF0udGFi bGVfbmFtZXNbaV0sIFRBQkxFX01VVEFUSU9OX01BUF9UQUJMRV9OQU1FX0xFTik7CisJCX0KKwor CQkvKiBNb3ZlIHRvIGZyb250IG9mIExSVSAqLworCQlxdWVyeV9jYWNoZV9scnVfdG91Y2goY2Fj aGUsIGlkeCk7CisJCWZvdW5kID0gdHJ1ZTsKKwl9CisKKwlxdWVyeV9jYWNoZV91bmxvY2soKTsK KworCXJldHVybiBmb3VuZDsKK30KKwordm9pZAorcG9vbF90YWJsZV9tdXRhdGlvbl9tYXBfY2Fj aGVfcGFyc2UodWludDY0IGhhc2gsIGJvb2wgaXNfd3JpdGUsCisJCQkJCQkJY29uc3QgY2hhciB0 YWJsZV9uYW1lc1tdW1RBQkxFX01VVEFUSU9OX01BUF9UQUJMRV9OQU1FX0xFTl0sCisJCQkJCQkJ aW50IG51bV90YWJsZXMpCit7CisJUXVlcnlQYXJzZUNhY2hlICpjYWNoZTsKKwlpbnQgKmJ1Y2tl dHM7CisJUXVlcnlQYXJzZUVudHJ5ICplbnRyaWVzOworCWludCBpZHg7CisJaW50IGJ1Y2tldDsK KworCWlmICghcG9vbF9jb25maWctPnRhYmxlX211dGF0aW9uX21hcF9lbmFibGVkIHx8IHRhYmxl X211dGF0aW9uX21hcF9zaG1lbSA9PSBOVUxMKQorCQlyZXR1cm47CisKKwljYWNoZSA9IHRhYmxl X211dGF0aW9uX21hcF9zaG1lbS0+cXVlcnlfY2FjaGU7CisKKwlxdWVyeV9jYWNoZV9sb2NrKCk7 CisKKwkvKiBDaGVjayBpZiBhbHJlYWR5IGV4aXN0cyAqLworCWlkeCA9IHF1ZXJ5X2NhY2hlX2xv b2t1cChjYWNoZSwgaGFzaCk7CisJaWYgKGlkeCAhPSBUQUJMRV9NVVRBVElPTl9NQVBfSU5WQUxJ RF9JTkRFWCkKKwl7CisJCXF1ZXJ5X2NhY2hlX3VubG9jaygpOworCQlyZXR1cm47CisJfQorCisJ LyogQWxsb2NhdGUgbmV3IGVudHJ5IChtYXkgZXZpY3QgTFJVKSAqLworCWlkeCA9IHF1ZXJ5X2Nh Y2hlX2FsbG9jX2VudHJ5KGNhY2hlKTsKKwlpZiAoaWR4ID09IFRBQkxFX01VVEFUSU9OX01BUF9J TlZBTElEX0lOREVYKQorCXsKKwkJcXVlcnlfY2FjaGVfdW5sb2NrKCk7CisJCWVyZXBvcnQoV0FS TklORywKKwkJCQkoZXJybXNnKCJ0YWJsZV9tdXRhdGlvbl9tYXA6IGZhaWxlZCB0byBhbGxvY2F0 ZSBxdWVyeSBjYWNoZSBlbnRyeSIpKSk7CisJCXJldHVybjsKKwl9CisKKwllbnRyaWVzID0gUVVF UllfQ0FDSEVfRU5UUklFUyhjYWNoZSk7CisJYnVja2V0cyA9IFFVRVJZX0NBQ0hFX0JVQ0tFVFMo Y2FjaGUpOworCisJLyogRmlsbCBpbiBlbnRyeSAqLworCWVudHJpZXNbaWR4XS5xdWVyeV9oYXNo ID0gaGFzaDsKKwllbnRyaWVzW2lkeF0uaXNfd3JpdGUgPSBpc193cml0ZTsKKwllbnRyaWVzW2lk eF0ubnVtX3RhYmxlcyA9IChudW1fdGFibGVzID4gVEFCTEVfTVVUQVRJT05fTUFQX01BWF9UQUJM RVNfUEVSX1FVRVJZKSA/CisJCQkJCQkJICBUQUJMRV9NVVRBVElPTl9NQVBfTUFYX1RBQkxFU19Q RVJfUVVFUlkgOiBudW1fdGFibGVzOworCisJeworCQlpbnQgaTsKKwkJZm9yIChpID0gMDsgaSA8 IGVudHJpZXNbaWR4XS5udW1fdGFibGVzOyBpKyspCisJCXsKKwkJCXN0cmxjcHkoZW50cmllc1tp ZHhdLnRhYmxlX25hbWVzW2ldLCB0YWJsZV9uYW1lc1tpXSwgVEFCTEVfTVVUQVRJT05fTUFQX1RB QkxFX05BTUVfTEVOKTsKKwkJfQorCX0KKworCS8qIEluc2VydCBpbnRvIGhhc2ggYnVja2V0ICov CisJYnVja2V0ID0gaGFzaCAlIGNhY2hlLT5udW1fYnVja2V0czsKKwllbnRyaWVzW2lkeF0ubmV4 dCA9IGJ1Y2tldHNbYnVja2V0XTsKKwlidWNrZXRzW2J1Y2tldF0gPSBpZHg7CisKKwkvKiBBZGQg dG8gTFJVIGxpc3QgKi8KKwlxdWVyeV9jYWNoZV9scnVfYWRkKGNhY2hlLCBpZHgpOworCisJcXVl cnlfY2FjaGVfdW5sb2NrKCk7Cit9CisKK3VpbnQ2NAorcG9vbF90YWJsZV9tdXRhdGlvbl9tYXBf bm9ybWFsaXplX2FuZF9oYXNoKGNvbnN0IGNoYXIgKnF1ZXJ5KQoreworCWNoYXIgbm9ybWFsaXpl ZFs4MTkyXTsKKwlzaXplX3QgbGVuOworCisJaWYgKHF1ZXJ5ID09IE5VTEwgfHwgcXVlcnlbMF0g PT0gJ1wwJykKKwkJcmV0dXJuIDA7CisKKwlsZW4gPSBub3JtYWxpemVfcXVlcnkocXVlcnksIG5v cm1hbGl6ZWQsIHNpemVvZihub3JtYWxpemVkKSk7CisJaWYgKGxlbiA9PSAwKQorCQlyZXR1cm4g MDsKKworCXJldHVybiBmbnYxYV9oYXNoXzY0KG5vcm1hbGl6ZWQsIGxlbik7Cit9Ci0tIAoyLjUy LjAKCg== --0000000000001a0d7f0649b22e98--