Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pCISG-0003M8-Fs for pgsql-hackers@arkaria.postgresql.org; Mon, 02 Jan 2023 10:54:09 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1pCISD-000832-ON for pgsql-hackers@arkaria.postgresql.org; Mon, 02 Jan 2023 10:54:05 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pCISC-00082s-Gr for pgsql-hackers@lists.postgresql.org; Mon, 02 Jan 2023 10:54:05 +0000 Received: from mail-oi1-x233.google.com ([2607:f8b0:4864:20::233]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1pCIS9-0006uK-OW for pgsql-hackers@lists.postgresql.org; Mon, 02 Jan 2023 10:54:03 +0000 Received: by mail-oi1-x233.google.com with SMTP id v70so24689802oie.3 for ; Mon, 02 Jan 2023 02:54:01 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=MeQJ5AuXV+HvCUwXKDT7njEm75G/E600Yal5WYmt6ag=; b=H74jhiPugr6HXYUoBPjmoKkKlgKn/h2FyfMYC4tGdF0pO1NzmnYhNJqgVd9WJPvf8A JQfV++rn+3NWn5tHtc2+yPTUlBEqVondBy6nlesgzGdtBgSNoazsZwRH9TeSrwtU4GiE RcGrd8R8snNhAIGl5FFAGnQqHV/lW/OEaC4p48Ac9ziQ2i8ZYy3mQ5F7j9cTMEYmXM1i A/CCpTwS21JOoMw9yZ5tygbqwCIE7qlcb6jSKWTuOYNQ9dh8jPUcf/FveFGyQwBxsUZ+ Ujvnm7Jj4xwdItM+KfWILfAumfwJ7tAV24621wlBzaAwQ7k1sqQfF7vK8Q9R6SMEhGpk caOA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=MeQJ5AuXV+HvCUwXKDT7njEm75G/E600Yal5WYmt6ag=; b=qr7Ni07p+5jsgP+Hz+cIq1M65/SHPmqwhDeD7AAaECAgPSHZspw2Ke3evGRKUOcvh7 mioqqaqcP9JBDIcBF5wovfJESJzMFHdI5oDBEJkm/cIry5+sEKIAkO6hjyPCnHkOcEiZ gCeKOIe+0Fck0VpnMpkh1iDgXO/b1kJ4e64qq0dZVFgfd1NCZ6wEdUMgczCi9mTWxvqM KScUyUV0u1CG7pJOaXy18iyT50ezzTtcAzw4q+qRp73/+IGxD1b1RaoPW7kEmMLM0+LU cIheUNiI6b4Yfhh1onVQyiYSmEsN70W2MMnbXJdiTSi3zGVlbEb6z/Z6yvKAIvbPJ5zq tOfw== X-Gm-Message-State: AFqh2krC5rz4B98F4S6dfO7g7+qDG3eK2IGI/jtYwAIdVmbSp8wUwito lRC2PwSCFFR7WjwA8MRZew4tw7QmAs3pxcl6WnU= X-Google-Smtp-Source: AMrXdXt7t7fcmmNgvLoPEUd20f5U5qOWvaDj04U6sYYf/fOGuCOxPFCmFqps3D+D1h+YtFsKIgfTelWtkTDnBL88X2w= X-Received: by 2002:a54:4404:0:b0:35a:8ab0:70f0 with SMTP id k4-20020a544404000000b0035a8ab070f0mr2210491oiw.272.1672656840953; Mon, 02 Jan 2023 02:54:00 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: Amit Kapila Date: Mon, 2 Jan 2023 16:23:49 +0530 Message-ID: Subject: Re: Perform streaming logical transactions by background workers and parallel apply To: "wangw.fnst@fujitsu.com" Cc: "houzj.fnst@fujitsu.com" , Peter Smith , Masahiko Sawada , Dilip Kumar , "shiy.fnst@fujitsu.com" , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000d641c805f145c4bf" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000d641c805f145c4bf Content-Type: text/plain; charset="UTF-8" On Fri, Dec 30, 2022 at 3:55 PM wangw.fnst@fujitsu.com wrote: > > I've checked it and it looks good to me. > Rebased the other patches and ran the pgident for the patch set. > > Attach the new patch set. > I have added a few DEBUG messages and changed a few comments in the 0001 patch. With that v71-0001* looks good to me and I'll commit it later this week (by Thursday or Friday) unless there are any major comments or objections. -- With Regards, Amit Kapila. --000000000000d641c805f145c4bf Content-Type: application/octet-stream; name="v71-0001-Perform-apply-of-large-transactions-by-parallel-.patch" Content-Disposition: attachment; filename="v71-0001-Perform-apply-of-large-transactions-by-parallel-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lceny3tm0 RnJvbSA5YTYzZDNlMjcyMzRmMTI1NzQzZWEzYjEyNjdjMDg5ZjU0M2UxMTE4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAiaG91emouZm5zdCIgPGhvdXpqLmZuc3RAY24uZnVqaXRzdS5j b20+CkRhdGU6IFdlZCwgMjAgQXByIDIwMjIgMTY6NDU6MDcgKzA4MDAKU3ViamVjdDogW1BBVENI IHY3MSAxLzJdIFBlcmZvcm0gYXBwbHkgb2YgbGFyZ2UgdHJhbnNhY3Rpb25zIGJ5IHBhcmFsbGVs CiB3b3JrZXJzLgoKQ3VycmVudGx5LCBmb3IgbGFyZ2UgdHJhbnNhY3Rpb25zLCB0aGUgcHVibGlz aGVyIHNlbmRzIHRoZSBkYXRhIGluCm11bHRpcGxlIHN0cmVhbXMgKGNoYW5nZXMgZGl2aWRlZCBp bnRvIGNodW5rcyBkZXBlbmRpbmcgdXBvbgpsb2dpY2FsX2RlY29kaW5nX3dvcmtfbWVtKSwgYW5k IHRoZW4gb24gdGhlIHN1YnNjcmliZXItc2lkZSwgdGhlIGFwcGx5CndvcmtlciB3cml0ZXMgdGhl IGNoYW5nZXMgaW50byB0ZW1wb3JhcnkgZmlsZXMgYW5kIG9uY2UgaXQgcmVjZWl2ZXMgdGhlCmNv bW1pdCwgaXQgcmVhZHMgZnJvbSB0aG9zZSBmaWxlcyBhbmQgYXBwbGllcyB0aGUgZW50aXJlIHRy YW5zYWN0aW9uLiBUbwppbXByb3ZlIHRoZSBwZXJmb3JtYW5jZSBvZiBzdWNoIHRyYW5zYWN0aW9u cywgd2UgY2FuIGluc3RlYWQgYWxsb3cgdGhlbSB0bwpiZSBhcHBsaWVkIHZpYSBwYXJhbGxlbCB3 b3JrZXJzLgoKSW4gdGhpcyBhcHByb2FjaCwgd2UgYXNzaWduIGEgbmV3IHBhcmFsbGVsIGFwcGx5 IHdvcmtlciAoaWYgYXZhaWxhYmxlKSBhcwpzb29uIGFzIHRoZSB4YWN0J3MgZmlyc3Qgc3RyZWFt IGlzIHJlY2VpdmVkIGFuZCB0aGUgbGVhZGVyIGFwcGx5IHdvcmtlcgp3aWxsIHNlbmQgY2hhbmdl cyB0byB0aGlzIG5ldyB3b3JrZXIgdmlhIHNoYXJlZCBtZW1vcnkuIFRoZSBwYXJhbGxlbCBhcHBs eQp3b3JrZXIgd2lsbCBkaXJlY3RseSBhcHBseSB0aGUgY2hhbmdlIGluc3RlYWQgb2Ygd3JpdGlu ZyBpdCB0byB0ZW1wb3JhcnkKZmlsZXMuIEhvd2V2ZXIsIGlmIHRoZSBsZWFkZXIgYXBwbHkgd29y a2VyIHRpbWVzIG91dCB3aGlsZSBhdHRlbXB0aW5nIHRvCnNlbmQgYSBtZXNzYWdlIHRvIHRoZSBw YXJhbGxlbCBhcHBseSB3b3JrZXIsIGl0IHdpbGwgc3dpdGNoIHRvCiJwYXJ0aWFsIHNlcmlhbGl6 ZSIgbW9kZSAtICBpbiB0aGlzIG1vZGUsIHRoZSBsZWFkZXIgc2VyaWFsaXplcyBhbGwKcmVtYWlu aW5nIGNoYW5nZXMgdG8gYSBmaWxlIGFuZCBub3RpZmllcyB0aGUgcGFyYWxsZWwgYXBwbHkgd29y a2VycyB0bwpyZWFkIGFuZCBhcHBseSB0aGVtIGF0IHRoZSBlbmQgb2YgdGhlIHRyYW5zYWN0aW9u LiBXZSB1c2UgYSBub24tYmxvY2tpbmcKd2F5IHRvIHNlbmQgdGhlIG1lc3NhZ2VzIGZyb20gdGhl IGxlYWRlciBhcHBseSB3b3JrZXIgdG8gdGhlIHBhcmFsbGVsCmFwcGx5IHRvIGF2b2lkIGRlYWRs b2Nrcy4gV2Uga2VlcCB0aGlzIHBhcmFsbGVsIGFwcGx5IGFzc2lnbmVkIHRpbGwgdGhlCnRyYW5z YWN0aW9uIGNvbW1pdCBpcyByZWNlaXZlZCBhbmQgYWxzbyB3YWl0IGZvciB0aGUgd29ya2VyIHRv IGZpbmlzaCBhdApjb21taXQuIFRoaXMgcHJlc2VydmVzIGNvbW1pdCBvcmRlcmluZyBhbmQgYXZv aWQgd3JpdGluZyB0byBhbmQgcmVhZGluZwpmcm9tIGZpbGVzIGluIG1vc3QgY2FzZXMuIFdlIHN0 aWxsIG5lZWQgdG8gc3BpbGwgaWYgdGhlcmUgaXMgbm8gd29ya2VyCmF2YWlsYWJsZS4KClRoaXMg cGF0Y2ggYWxzbyBleHRlbmRzIHRoZSBTVUJTQ1JJUFRJT04gJ3N0cmVhbWluZycgcGFyYW1ldGVy IHNvIHRoYXQgdGhlCnVzZXIgY2FuIGNvbnRyb2wgd2hldGhlciB0byBhcHBseSB0aGUgc3RyZWFt aW5nIHRyYW5zYWN0aW9uIGluIGEgcGFyYWxsZWwKYXBwbHkgd29ya2VyIG9yIHNwaWxsIHRoZSBj aGFuZ2UgdG8gZGlzay4gVGhlIHVzZXIgY2FuIHNldCB0aGUgc3RyZWFtaW5nCnBhcmFtZXRlciB0 byAnb24vb2ZmJywgb3IgJ3BhcmFsbGVsJy4gVGhlIHBhcmFtZXRlciB2YWx1ZSAncGFyYWxsZWwn IG1lYW5zCnRoZSBzdHJlYW1pbmcgd2lsbCBiZSBhcHBsaWVkIHZpYSBhIHBhcmFsbGVsIGFwcGx5 IHdvcmtlciwgaWYgYXZhaWxhYmxlLgpUaGUgcGFyYW1ldGVyIHZhbHVlICdvbicgbWVhbnMgdGhl IHN0cmVhbWluZyB0cmFuc2FjdGlvbiB3aWxsIGJlIHNwaWxsZWQKdG8gZGlzay4gVGhlIGRlZmF1 bHQgdmFsdWUgaXMgJ29mZicgKHNhbWUgYXMgY3VycmVudCBiZWhhdmlvdXIpLgoKSW4gYWRkaXRp b24sIHRoZSBwYXRjaCBleHRlbmRzIHRoZSBsb2dpY2FsIHJlcGxpY2F0aW9uIFNUUkVBTV9BQk9S VAptZXNzYWdlIHNvIHRoYXQgYWJvcnRfbHNuIGFuZCBhYm9ydF90aW1lIGNhbiBhbHNvIGJlIHNl bnQgd2hpY2ggY2FuIGJlCnVzZWQgdG8gdXBkYXRlIHRoZSByZXBsaWNhdGlvbiBvcmlnaW4gaW4g cGFyYWxsZWwgYXBwbHkgd29ya2VyIHdoZW4gdGhlCnN0cmVhbWluZyB0cmFuc2FjdGlvbiBpcyBh Ym9ydGVkLiBCZWNhdXNlIHRoaXMgbWVzc2FnZSBleHRlbnNpb24gaXMgbmVlZGVkCnRvIHN1cHBv cnQgcGFyYWxsZWwgc3RyZWFtaW5nLCBwYXJhbGxlbCBzdHJlYW1pbmcgaXMgbm90IHN1cHBvcnRl ZCBmb3IKcHVibGljYXRpb25zIG9uIHNlcnZlcnMgPCBQRzE2LgoKTm90ZTogU2luY2UgdGhlIGZp ZWxkICdzdWJzdHJlYW0nIG9mIGNhdGFsb2cgJ3BnX3N1YnNjcmlwdGlvbicgaGFzIGJlZW4KZXhw YW5kZWQsIHdlIG5lZWQgYnVtcCBjYXRhbG9nIHZlcnNpb24uCgpBdXRob3I6IEhvdSBaaGlqaWUs IFdhbmcgd2VpLCBBbWl0IEthcGlsYSB3aXRoIGRlc2lnbiBpbnB1dHMgZnJvbSBTYXdhZGEgTWFz YWhpa28KUmV2aWV3ZWQtYnk6IFNhd2FkYSBNYXNhaGlrbywgUGV0ZXIgU21pdGgsIFNoaSB5dSwg RGlsaXAgS3VtYXIsIEt1cm9kYSBIYXlhdG8KRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMv bS9DQUE0ZUsxK3d5TjZ6cGFIVWtDTG9yRVdOeDc1TUcweGhNd2NGaHZqcW0yS1VSWkVBR3dAbWFp bC5nbWFpbC5jb20KLS0tCiBkb2Mvc3JjL3NnbWwvY2F0YWxvZ3Muc2dtbCAgICAgICAgICAgICAg ICAgICAgfCAgIDExICstCiBkb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwgICAgICAgICAgICAgICAg ICAgICAgfCAgIDI4ICstCiBkb2Mvc3JjL3NnbWwvbG9naWNhbC1yZXBsaWNhdGlvbi5zZ21sICAg ICAgICAgfCAgIDIyICstCiBkb2Mvc3JjL3NnbWwvbW9uaXRvcmluZy5zZ21sICAgICAgICAgICAg ICAgICAgfCAgICA1ICsKIGRvYy9zcmMvc2dtbC9wcm90b2NvbC5zZ21sICAgICAgICAgICAgICAg ICAgICB8ICAgMjkgKy0KIGRvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3N1YnNjcmlwdGlvbi5zZ21s ICAgICB8ICAgMjQgKy0KIGRvYy9zcmMvc2dtbC9zeXN0ZW0tdmlld3Muc2dtbCAgICAgICAgICAg ICAgICB8ICAgIDUgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hhY3QuYyAgICAgICAg ICAgICB8ICAgMjQgKy0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3N1YnNjcmlwdGlvbmNtZHMuYyAg ICAgICB8ICAgNjcgKy0KIHNyYy9iYWNrZW5kL2xpYnBxL3BxbXEuYyAgICAgICAgICAgICAgICAg ICAgICB8ICAgMTggKy0KIHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYmd3b3JrZXIuYyAgICAgICAg ICAgICB8ICAgIDMgKwogc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9pbnRlcnJ1cHQuYyAgICAgICAg ICAgIHwgICAgNSArLQogLi4uL2xpYnBxd2FscmVjZWl2ZXIvbGlicHF3YWxyZWNlaXZlci5jICAg ICAgIHwgICAgNiArLQogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9NYWtlZmlsZSAg ICAgIHwgICAgMSArCiAuLi4vcmVwbGljYXRpb24vbG9naWNhbC9hcHBseXBhcmFsbGVsd29ya2Vy LmMgfCAxNjE5ICsrKysrKysrKysrKysrKysrCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL2RlY29kZS5jICAgICAgfCAgICA1ICstCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL2xhdW5jaGVyLmMgICAgfCAgMjIwICsrLQogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9n aWNhbC9tZXNvbi5idWlsZCAgIHwgICAgMSArCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL29yaWdpbi5jICAgICAgfCAgIDI2ICstCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL3Byb3RvLmMgICAgICAgfCAgIDM3ICstCiAuLi4vcmVwbGljYXRpb24vbG9naWNhbC9yZW9y ZGVyYnVmZmVyLmMgICAgICAgfCAgICA1ICstCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL3RhYmxlc3luYy5jICAgfCAgIDI1ICstCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL3dvcmtlci5jICAgICAgfCAxMzgwICsrKysrKysrKysrLS0tCiBzcmMvYmFja2VuZC9yZXBs aWNhdGlvbi9wZ291dHB1dC9wZ291dHB1dC5jICAgfCAgIDIyICstCiBzcmMvYmFja2VuZC9zdG9y YWdlL2lwYy9wcm9jc2lnbmFsLmMgICAgICAgICAgfCAgICA0ICsKIHNyYy9iYWNrZW5kL3N0b3Jh Z2UvbG1nci9sbWdyLmMgICAgICAgICAgICAgICB8ICAgNDYgKwogc3JjL2JhY2tlbmQvdGNvcC9w b3N0Z3Jlcy5jICAgICAgICAgICAgICAgICAgIHwgICAgMyArCiBzcmMvYmFja2VuZC91dGlscy9h Y3Rpdml0eS93YWl0X2V2ZW50LmMgICAgICAgfCAgICA2ICsKIHNyYy9iYWNrZW5kL3V0aWxzL2Fk dC9sb2NrZnVuY3MuYyAgICAgICAgICAgICB8ICAgIDUgKy0KIHNyYy9iYWNrZW5kL3V0aWxzL21p c2MvZ3VjX3RhYmxlcy5jICAgICAgICAgICB8ICAgMTIgKwogc3JjL2JhY2tlbmQvdXRpbHMvbWlz Yy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlIHwgICAgMSArCiBzcmMvYmluL3BnX2R1bXAvcGdfZHVt cC5jICAgICAgICAgICAgICAgICAgICAgfCAgICA2ICstCiBzcmMvYmluL3BzcWwvZGVzY3JpYmUu YyAgICAgICAgICAgICAgICAgICAgICAgfCAgIDIxICstCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3Bn X3N1YnNjcmlwdGlvbi5oICAgICAgICAgfCAgIDIxICstCiBzcmMvaW5jbHVkZS9jb21tYW5kcy9z dWJzY3JpcHRpb25jbWRzLmggICAgICAgfCAgICAyICsKIHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9u L2xvZ2ljYWxsYXVuY2hlci5oICAgICB8ICAgIDEgKwogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24v bG9naWNhbHByb3RvLmggICAgICAgIHwgICAyOCArLQogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24v bG9naWNhbHdvcmtlci5oICAgICAgIHwgICAgOCArCiBzcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9v cmlnaW4uaCAgICAgICAgICAgICAgfCAgICAyICstCiBzcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9w Z291dHB1dC5oICAgICAgICAgICAgfCAgICAyICstCiBzcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9y ZW9yZGVyYnVmZmVyLmggICAgICAgfCAgICA0ICstCiBzcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi93 YWxyZWNlaXZlci5oICAgICAgICAgfCAgICAyICstCiBzcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi93 b3JrZXJfaW50ZXJuYWwuaCAgICAgfCAgMjI3ICsrLQogc3JjL2luY2x1ZGUvc3RvcmFnZS9sbWdy LmggICAgICAgICAgICAgICAgICAgIHwgICAgNSArCiBzcmMvaW5jbHVkZS9zdG9yYWdlL2xvY2su aCAgICAgICAgICAgICAgICAgICAgfCAgIDE3ICstCiBzcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2Nz aWduYWwuaCAgICAgICAgICAgICAgfCAgICAxICsKIHNyYy9pbmNsdWRlL3V0aWxzL3dhaXRfZXZl bnQuaCAgICAgICAgICAgICAgICB8ICAgIDIgKwogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9z dWJzY3JpcHRpb24ub3V0ICAgIHwgICA0NiArLQogc3JjL3Rlc3QvcmVncmVzcy9zcWwvc3Vic2Ny aXB0aW9uLnNxbCAgICAgICAgIHwgICAgNiArLQogc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDE1 X3N0cmVhbS5wbCAgICAgICAgIHwgIDI3NCArKy0KIHNyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAx Nl9zdHJlYW1fc3VieGFjdC5wbCB8ICAxMzAgKy0KIHNyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAx N19zdHJlYW1fZGRsLnBsICAgICB8ICAgIDMgKwogLi4uL3QvMDE4X3N0cmVhbV9zdWJ4YWN0X2Fi b3J0LnBsICAgICAgICAgICAgIHwgIDIyMCArKy0KIC4uLi90LzAxOV9zdHJlYW1fc3VieGFjdF9k ZGxfYWJvcnQucGwgICAgICAgICB8ICAgIDMgKwogLi4uL3N1YnNjcmlwdGlvbi90LzAyMl90d29w aGFzZV9jYXNjYWRlLnBsICAgIHwgICAgMiArCiAuLi4vc3Vic2NyaXB0aW9uL3QvMDIzX3R3b3Bo YXNlX3N0cmVhbS5wbCAgICAgfCAgNTIzICsrKy0tLQogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVk ZWZzLmxpc3QgICAgICAgICAgICAgIHwgICAgNyArCiA1NyBmaWxlcyBjaGFuZ2VkLCA0NDcwIGlu c2VydGlvbnMoKyksIDc1OCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmFj a2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2FwcGx5cGFyYWxsZWx3b3JrZXIuYwoKZGlmZiAtLWdp dCBhL2RvYy9zcmMvc2dtbC9jYXRhbG9ncy5zZ21sIGIvZG9jL3NyYy9zZ21sL2NhdGFsb2dzLnNn bWwKaW5kZXggOTMxNmI4MTFhYy4uYzFlNDA0ODA1NCAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21s L2NhdGFsb2dzLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2NhdGFsb2dzLnNnbWwKQEAgLTc5MTMs MTEgKzc5MTMsMTYgQEAgU0NSQU0tU0hBLTI1NiQ8cmVwbGFjZWFibGU+Jmx0O2l0ZXJhdGlvbiBj b3VudCZndDs8L3JlcGxhY2VhYmxlPjo8cmVwbGFjZWFibGU+JmwKIAogICAgICA8cm93PgogICAg ICAgPGVudHJ5IHJvbGU9ImNhdGFsb2dfdGFibGVfZW50cnkiPjxwYXJhIHJvbGU9ImNvbHVtbl9k ZWZpbml0aW9uIj4KLSAgICAgICA8c3RydWN0ZmllbGQ+c3Vic3RyZWFtPC9zdHJ1Y3RmaWVsZD4g PHR5cGU+Ym9vbDwvdHlwZT4KKyAgICAgICA8c3RydWN0ZmllbGQ+c3Vic3RyZWFtPC9zdHJ1Y3Rm aWVsZD4gPHR5cGU+Y2hhcjwvdHlwZT4KICAgICAgIDwvcGFyYT4KICAgICAgIDxwYXJhPgotICAg ICAgIElmIHRydWUsIHRoZSBzdWJzY3JpcHRpb24gd2lsbCBhbGxvdyBzdHJlYW1pbmcgb2YgaW4t cHJvZ3Jlc3MKLSAgICAgICB0cmFuc2FjdGlvbnMKKyAgICAgICBDb250cm9scyBob3cgdG8gaGFu ZGxlIHRoZSBzdHJlYW1pbmcgb2YgaW4tcHJvZ3Jlc3MgdHJhbnNhY3Rpb25zOgorICAgICAgIDxs aXRlcmFsPmY8L2xpdGVyYWw+ID0gZGlzYWxsb3cgc3RyZWFtaW5nIG9mIGluLXByb2dyZXNzIHRy YW5zYWN0aW9ucywKKyAgICAgICA8bGl0ZXJhbD50PC9saXRlcmFsPiA9IHNwaWxsIHRoZSBjaGFu Z2VzIG9mIGluLXByb2dyZXNzIHRyYW5zYWN0aW9ucyB0bworICAgICAgIGRpc2sgYW5kIGFwcGx5 IGF0IG9uY2UgYWZ0ZXIgdGhlIHRyYW5zYWN0aW9uIGlzIGNvbW1pdHRlZCBvbiB0aGUKKyAgICAg ICBwdWJsaXNoZXIgYW5kIHJlY2VpdmVkIGJ5IHRoZSBzdWJzY3JpYmVyLAorICAgICAgIDxsaXRl cmFsPnA8L2xpdGVyYWw+ID0gYXBwbHkgY2hhbmdlcyBkaXJlY3RseSB1c2luZyBhIHBhcmFsbGVs IGFwcGx5CisgICAgICAgd29ya2VyIGlmIGF2YWlsYWJsZSAoc2FtZSBhcyAndCcgaWYgbm8gd29y a2VyIGlzIGF2YWlsYWJsZSkKICAgICAgIDwvcGFyYT48L2VudHJ5PgogICAgICA8L3Jvdz4KIApk aWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sIGIvZG9jL3NyYy9zZ21sL2NvbmZp Zy5zZ21sCmluZGV4IDA1YjM4NjJkMDkuLmEzM2E5MzU3MGIgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMv c2dtbC9jb25maWcuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwKQEAgLTQ5Njgs NyArNDk2OCw4IEBAIEFOWSA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+bnVtX3N5bmM8 L3JlcGxhY2VhYmxlPiAoIDxyZXBsYWNlYWJsZSBjbGFzcz0iCiAgICAgICA8bGlzdGl0ZW0+CiAg ICAgICAgPHBhcmE+CiAgICAgICAgIFNwZWNpZmllcyBtYXhpbXVtIG51bWJlciBvZiBsb2dpY2Fs IHJlcGxpY2F0aW9uIHdvcmtlcnMuIFRoaXMgaW5jbHVkZXMKLSAgICAgICAgYm90aCBhcHBseSB3 b3JrZXJzIGFuZCB0YWJsZSBzeW5jaHJvbml6YXRpb24gd29ya2Vycy4KKyAgICAgICAgbGVhZGVy IGFwcGx5IHdvcmtlcnMsIHBhcmFsbGVsIGFwcGx5IHdvcmtlcnMsIGFuZCB0YWJsZSBzeW5jaHJv bml6YXRpb24KKyAgICAgICAgd29ya2Vycy4KICAgICAgICA8L3BhcmE+CiAgICAgICAgPHBhcmE+ CiAgICAgICAgIExvZ2ljYWwgcmVwbGljYXRpb24gd29ya2VycyBhcmUgdGFrZW4gZnJvbSB0aGUg cG9vbCBkZWZpbmVkIGJ5CkBAIC01MDA4LDYgKzUwMDksMzEgQEAgQU5ZIDxyZXBsYWNlYWJsZSBj bGFzcz0icGFyYW1ldGVyIj5udW1fc3luYzwvcmVwbGFjZWFibGU+ICggPHJlcGxhY2VhYmxlIGNs YXNzPSIKICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgIDwvdmFybGlzdGVudHJ5PgogCisgICAgIDx2 YXJsaXN0ZW50cnkgaWQ9Imd1Yy1tYXgtcGFyYWxsZWwtYXBwbHktd29ya2Vycy1wZXItc3Vic2Ny aXB0aW9uIiB4cmVmbGFiZWw9Im1heF9wYXJhbGxlbF9hcHBseV93b3JrZXJzX3Blcl9zdWJzY3Jp cHRpb24iPgorICAgICAgPHRlcm0+PHZhcm5hbWU+bWF4X3BhcmFsbGVsX2FwcGx5X3dvcmtlcnNf cGVyX3N1YnNjcmlwdGlvbjwvdmFybmFtZT4gKDx0eXBlPmludGVnZXI8L3R5cGU+KQorICAgICAg PGluZGV4dGVybT4KKyAgICAgICA8cHJpbWFyeT48dmFybmFtZT5tYXhfcGFyYWxsZWxfYXBwbHlf d29ya2Vyc19wZXJfc3Vic2NyaXB0aW9uPC92YXJuYW1lPiBjb25maWd1cmF0aW9uIHBhcmFtZXRl cjwvcHJpbWFyeT4KKyAgICAgIDwvaW5kZXh0ZXJtPgorICAgICAgPC90ZXJtPgorICAgICAgPGxp c3RpdGVtPgorICAgICAgIDxwYXJhPgorICAgICAgICBNYXhpbXVtIG51bWJlciBvZiBwYXJhbGxl bCBhcHBseSB3b3JrZXJzIHBlciBzdWJzY3JpcHRpb24uIFRoaXMKKyAgICAgICAgcGFyYW1ldGVy IGNvbnRyb2xzIHRoZSBhbW91bnQgb2YgcGFyYWxsZWxpc20gZm9yIHN0cmVhbWluZyBvZgorICAg ICAgICBpbi1wcm9ncmVzcyB0cmFuc2FjdGlvbnMgd2l0aCBzdWJzY3JpcHRpb24gcGFyYW1ldGVy CisgICAgICAgIDxsaXRlcmFsPnN0cmVhbWluZyA9IHBhcmFsbGVsPC9saXRlcmFsPi4KKyAgICAg ICA8L3BhcmE+CisgICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBwYXJhbGxlbCBhcHBseSB3b3Jr ZXJzIGFyZSB0YWtlbiBmcm9tIHRoZSBwb29sIGRlZmluZWQgYnkKKyAgICAgICAgPHZhcm5hbWU+ bWF4X2xvZ2ljYWxfcmVwbGljYXRpb25fd29ya2VyczwvdmFybmFtZT4uCisgICAgICAgPC9wYXJh PgorICAgICAgIDxwYXJhPgorICAgICAgICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAyLiBUaGlzIHBh cmFtZXRlciBjYW4gb25seSBiZSBzZXQgaW4gdGhlCisgICAgICAgIDxmaWxlbmFtZT5wb3N0Z3Jl c3FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIG9yIG9uIHRoZSBzZXJ2ZXIgY29tbWFuZAorICAgICAg ICBsaW5lLgorICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgIDwvdmFybGlz dGVudHJ5PgorCiAgICAgIDwvdmFyaWFibGVsaXN0PgogICAgIDwvc2VjdDI+CiAKZGlmZiAtLWdp dCBhL2RvYy9zcmMvc2dtbC9sb2dpY2FsLXJlcGxpY2F0aW9uLnNnbWwgYi9kb2Mvc3JjL3NnbWwv bG9naWNhbC1yZXBsaWNhdGlvbi5zZ21sCmluZGV4IDdiOWJiMDBlNWEuLjU0ZjQ4YmU4N2YgMTAw NjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9sb2dpY2FsLXJlcGxpY2F0aW9uLnNnbWwKKysrIGIvZG9j L3NyYy9zZ21sL2xvZ2ljYWwtcmVwbGljYXRpb24uc2dtbApAQCAtMTUwMSw2ICsxNTAxLDE2IEBA IENPTlRFWFQ6ICBwcm9jZXNzaW5nIHJlbW90ZSBkYXRhIGZvciByZXBsaWNhdGlvbiBvcmlnaW4g InBnXzE2Mzk1IiBkdXJpbmcgIklOU0VSCiAgICBtaWdodCBub3QgdmlvbGF0ZSBhbnkgY29uc3Ry YWludC4gIFRoaXMgY2FuIGVhc2lseSBtYWtlIHRoZSBzdWJzY3JpYmVyCiAgICBpbmNvbnNpc3Rl bnQuCiAgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIFdoZW4gdGhlIHN0cmVhbWluZyBtb2RlIGlz IDxsaXRlcmFsPnBhcmFsbGVsPC9saXRlcmFsPiwgdGhlIGZpbmlzaCBMU04gb2YKKyAgIGZhaWxl ZCB0cmFuc2FjdGlvbnMgbWF5IG5vdCBiZSBsb2dnZWQuIEluIHRoYXQgY2FzZSwgaXQgbWF5IGJl IG5lY2Vzc2FyeSB0bworICAgY2hhbmdlIHRoZSBzdHJlYW1pbmcgbW9kZSB0byA8bGl0ZXJhbD5v bjwvbGl0ZXJhbD4gb3IgPGxpdGVyYWw+b2ZmPC9saXRlcmFsPiBhbmQKKyAgIGNhdXNlIHRoZSBz YW1lIGNvbmZsaWN0cyBhZ2FpbiBzbyB0aGUgZmluaXNoIExTTiBvZiB0aGUgZmFpbGVkIHRyYW5z YWN0aW9uIHdpbGwKKyAgIGJlIHdyaXR0ZW4gdG8gdGhlIHNlcnZlciBsb2cuIEZvciB0aGUgdXNh Z2Ugb2YgZmluaXNoIExTTiwgcGxlYXNlIHJlZmVyIHRvIDxsaW5rCisgICBsaW5rZW5kPSJzcWwt YWx0ZXJzdWJzY3JpcHRpb24iPjxjb21tYW5kPkFMVEVSIFNVQlNDUklQVElPTiAuLi4KKyAgIFNL SVA8L2NvbW1hbmQ+PC9saW5rPi4KKyAgPC9wYXJhPgogIDwvc2VjdDE+CiAKICA8c2VjdDEgaWQ9 ImxvZ2ljYWwtcmVwbGljYXRpb24tcmVzdHJpY3Rpb25zIj4KQEAgLTE4MDksOCArMTgxOSw5IEBA IENPTlRFWFQ6ICBwcm9jZXNzaW5nIHJlbW90ZSBkYXRhIGZvciByZXBsaWNhdGlvbiBvcmlnaW4g InBnXzE2Mzk1IiBkdXJpbmcgIklOU0VSCiAKICAgIDxwYXJhPgogICAgIDxsaW5rIGxpbmtlbmQ9 Imd1Yy1tYXgtbG9naWNhbC1yZXBsaWNhdGlvbi13b3JrZXJzIj48dmFybmFtZT5tYXhfbG9naWNh bF9yZXBsaWNhdGlvbl93b3JrZXJzPC92YXJuYW1lPjwvbGluaz4KLSAgICBtdXN0IGJlIHNldCB0 byBhdCBsZWFzdCB0aGUgbnVtYmVyIG9mIHN1YnNjcmlwdGlvbnMgKGZvciBhcHBseSB3b3JrZXJz KSwgcGx1cwotICAgIHNvbWUgcmVzZXJ2ZSBmb3IgdGhlIHRhYmxlIHN5bmNocm9uaXphdGlvbiB3 b3JrZXJzLgorICAgIG11c3QgYmUgc2V0IHRvIGF0IGxlYXN0IHRoZSBudW1iZXIgb2Ygc3Vic2Ny aXB0aW9ucyAoZm9yIGxlYWRlciBhcHBseQorICAgIHdvcmtlcnMpLCBwbHVzIHNvbWUgcmVzZXJ2 ZSBmb3IgdGhlIHRhYmxlIHN5bmNocm9uaXphdGlvbiB3b3JrZXJzIGFuZAorICAgIHBhcmFsbGVs IGFwcGx5IHdvcmtlcnMuCiAgICA8L3BhcmE+CiAKICAgIDxwYXJhPgpAQCAtMTgyNyw2ICsxODM4 LDEzIEBAIENPTlRFWFQ6ICBwcm9jZXNzaW5nIHJlbW90ZSBkYXRhIGZvciByZXBsaWNhdGlvbiBv cmlnaW4gInBnXzE2Mzk1IiBkdXJpbmcgIklOU0VSCiAgICAgIHN1YnNjcmlwdGlvbiBpbml0aWFs aXphdGlvbiBvciB3aGVuIG5ldyB0YWJsZXMgYXJlIGFkZGVkLgogICAgPC9wYXJhPgogCisgICA8 cGFyYT4KKyAgICA8bGluayBsaW5rZW5kPSJndWMtbWF4LXBhcmFsbGVsLWFwcGx5LXdvcmtlcnMt cGVyLXN1YnNjcmlwdGlvbiI+PHZhcm5hbWU+bWF4X3BhcmFsbGVsX2FwcGx5X3dvcmtlcnNfcGVy X3N1YnNjcmlwdGlvbjwvdmFybmFtZT48L2xpbms+CisgICAgIGNvbnRyb2xzIHRoZSBhbW91bnQg b2YgcGFyYWxsZWxpc20gZm9yIHN0cmVhbWluZyBvZiBpbi1wcm9ncmVzcworICAgICB0cmFuc2Fj dGlvbnMgd2l0aCBzdWJzY3JpcHRpb24gcGFyYW1ldGVyCisgICAgIDxsaXRlcmFsPnN0cmVhbWlu ZyA9IHBhcmFsbGVsPC9saXRlcmFsPi4KKyAgIDwvcGFyYT4KKwogICAgPHBhcmE+CiAgICAgTG9n aWNhbCByZXBsaWNhdGlvbiB3b3JrZXJzIGFyZSBhbHNvIGFmZmVjdGVkIGJ5CiAgICAgPGxpbmsg bGlua2VuZD0iZ3VjLXdhbC1yZWNlaXZlci10aW1lb3V0Ij48dmFybmFtZT53YWxfcmVjZWl2ZXJf dGltZW91dDwvdmFybmFtZT48L2xpbms+LApkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL21vbml0 b3Jpbmcuc2dtbCBiL2RvYy9zcmMvc2dtbC9tb25pdG9yaW5nLnNnbWwKaW5kZXggMzYzYjE4M2U1 Zi4uZWFmZWVhZGY0NyAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL21vbml0b3Jpbmcuc2dtbAor KysgYi9kb2Mvc3JjL3NnbWwvbW9uaXRvcmluZy5zZ21sCkBAIC0xODUxLDYgKzE4NTEsMTEgQEAg cG9zdGdyZXMgICAyNzA5MyAgMC4wICAwLjAgIDMwMDk2ICAyNzUyID8gICAgICAgIFNzICAgMTE6 MzQgICAwOjAwIHBvc3RncmVzOiBzZXIKICAgICAgIDxlbnRyeT48bGl0ZXJhbD5hZHZpc29yeTwv bGl0ZXJhbD48L2VudHJ5PgogICAgICAgPGVudHJ5PldhaXRpbmcgdG8gYWNxdWlyZSBhbiBhZHZp c29yeSB1c2VyIGxvY2suPC9lbnRyeT4KICAgICAgPC9yb3c+CisgICAgIDxyb3c+CisgICAgICA8 ZW50cnk+PGxpdGVyYWw+YXBwbHl0cmFuc2FjdGlvbjwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAg PGVudHJ5PldhaXRpbmcgdG8gYWNxdWlyZSBhIGxvY2sgb24gYSByZW1vdGUgdHJhbnNhY3Rpb24g YmVpbmcgYXBwbGllZAorICAgICAgYnkgYSBsb2dpY2FsIHJlcGxpY2F0aW9uIHN1YnNjcmliZXIu PC9lbnRyeT4KKyAgICAgPC9yb3c+CiAgICAgIDxyb3c+CiAgICAgICA8ZW50cnk+PGxpdGVyYWw+ ZXh0ZW5kPC9saXRlcmFsPjwvZW50cnk+CiAgICAgICA8ZW50cnk+V2FpdGluZyB0byBleHRlbmQg YSByZWxhdGlvbi48L2VudHJ5PgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3Byb3RvY29sLnNn bWwgYi9kb2Mvc3JjL3NnbWwvcHJvdG9jb2wuc2dtbAppbmRleCAwMzMxMmUwN2UyLi40MzllZjY3 NWYzIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcHJvdG9jb2wuc2dtbAorKysgYi9kb2Mvc3Jj L3NnbWwvcHJvdG9jb2wuc2dtbApAQCAtMzEwMyw3ICszMTAzLDcgQEAgcHNxbCAiZGJuYW1lPXBv c3RncmVzIHJlcGxpY2F0aW9uPWRhdGFiYXNlIiAtYyAiSURFTlRJRllfU1lTVEVNOyIKICAgICAg PGxpc3RpdGVtPgogICAgICAgPHBhcmE+CiAgICAgICAgUHJvdG9jb2wgdmVyc2lvbi4gQ3VycmVu dGx5IHZlcnNpb25zIDxsaXRlcmFsPjE8L2xpdGVyYWw+LCA8bGl0ZXJhbD4yPC9saXRlcmFsPiwK LSAgICAgICBhbmQgPGxpdGVyYWw+MzwvbGl0ZXJhbD4gYXJlIHN1cHBvcnRlZC4KKyAgICAgICA8 bGl0ZXJhbD4zPC9saXRlcmFsPiwgYW5kIDxsaXRlcmFsPjQ8L2xpdGVyYWw+IGFyZSBzdXBwb3J0 ZWQuCiAgICAgICA8L3BhcmE+CiAgICAgICA8cGFyYT4KICAgICAgICBWZXJzaW9uIDxsaXRlcmFs PjI8L2xpdGVyYWw+IGlzIHN1cHBvcnRlZCBvbmx5IGZvciBzZXJ2ZXIgdmVyc2lvbiAxNApAQCAt MzExMyw2ICszMTEzLDExIEBAIHBzcWwgImRibmFtZT1wb3N0Z3JlcyByZXBsaWNhdGlvbj1kYXRh YmFzZSIgLWMgIklERU5USUZZX1NZU1RFTTsiCiAgICAgICAgVmVyc2lvbiA8bGl0ZXJhbD4zPC9s aXRlcmFsPiBpcyBzdXBwb3J0ZWQgb25seSBmb3Igc2VydmVyIHZlcnNpb24gMTUKICAgICAgICBh bmQgYWJvdmUsIGFuZCBpdCBhbGxvd3Mgc3RyZWFtaW5nIG9mIHR3by1waGFzZSBjb21taXRzLgog ICAgICAgPC9wYXJhPgorICAgICAgPHBhcmE+CisgICAgICAgVmVyc2lvbiA8bGl0ZXJhbD40PC9s aXRlcmFsPiBpcyBzdXBwb3J0ZWQgb25seSBmb3Igc2VydmVyIHZlcnNpb24gMTYKKyAgICAgICBh bmQgYWJvdmUsIGFuZCBpdCBhbGxvd3Mgc3RyZWFtcyBvZiBsYXJnZSBpbi1wcm9ncmVzcyB0cmFu c2FjdGlvbnMgdG8KKyAgICAgICBiZSBhcHBsaWVkIGluIHBhcmFsbGVsLgorICAgICAgPC9wYXJh PgogICAgICA8L2xpc3RpdGVtPgogICAgIDwvdmFybGlzdGVudHJ5PgogCkBAIC02ODgzLDYgKzY4 ODgsMjggQEAgcHNxbCAiZGJuYW1lPXBvc3RncmVzIHJlcGxpY2F0aW9uPWRhdGFiYXNlIiAtYyAi SURFTlRJRllfU1lTVEVNOyIKICAgICAgICAgPC9wYXJhPgogICAgICAgIDwvbGlzdGl0ZW0+CiAg ICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICA8dGVy bT5JbnQ2NCAoWExvZ1JlY1B0cik8L3Rlcm0+CisgICAgICAgPGxpc3RpdGVtPgorICAgICAgICA8 cGFyYT4KKyAgICAgICAgIFRoZSBMU04gb2YgdGhlIGFib3J0LiBUaGlzIGZpZWxkIGlzIGF2YWls YWJsZSBzaW5jZSBwcm90b2NvbCB2ZXJzaW9uCisgICAgICAgICA0LgorICAgICAgICA8L3BhcmE+ CisgICAgICAgPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgICA8dmFy bGlzdGVudHJ5PgorICAgICAgIDx0ZXJtPkludDY0IChUaW1lc3RhbXBUeik8L3Rlcm0+CisgICAg ICAgPGxpc3RpdGVtPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgIEFib3J0IHRpbWVzdGFtcCBv ZiB0aGUgdHJhbnNhY3Rpb24uIFRoZSB2YWx1ZSBpcyBpbiBudW1iZXIKKyAgICAgICAgIG9mIG1p Y3Jvc2Vjb25kcyBzaW5jZSBQb3N0Z3JlU1FMIGVwb2NoICgyMDAwLTAxLTAxKS4gVGhpcyBmaWVs ZCBpcworICAgICAgICAgYXZhaWxhYmxlIHNpbmNlIHByb3RvY29sIHZlcnNpb24gNC4KKyAgICAg ICAgPC9wYXJhPgorICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKwog ICAgICA8L3ZhcmlhYmxlbGlzdD4KICAgICA8L2xpc3RpdGVtPgogICAgPC92YXJsaXN0ZW50cnk+ CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV9zdWJzY3JpcHRpb24uc2dtbCBi L2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3N1YnNjcmlwdGlvbi5zZ21sCmluZGV4IGY5YTE3NzYz ODAuLmYxNzNhMDkwMzcgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3N1YnNj cmlwdGlvbi5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3N1YnNjcmlwdGlvbi5z Z21sCkBAIC0yMjgsMTMgKzIyOCwyOSBAQCBDUkVBVEUgU1VCU0NSSVBUSU9OIDxyZXBsYWNlYWJs ZSBjbGFzcz0icGFyYW1ldGVyIj5zdWJzY3JpcHRpb25fbmFtZTwvcmVwbGFjZWFibAogICAgICAg IDwvdmFybGlzdGVudHJ5PgogCiAgICAgICAgPHZhcmxpc3RlbnRyeT4KLSAgICAgICAgPHRlcm0+ PGxpdGVyYWw+c3RyZWFtaW5nPC9saXRlcmFsPiAoPHR5cGU+Ym9vbGVhbjwvdHlwZT4pPC90ZXJt PgorICAgICAgICA8dGVybT48bGl0ZXJhbD5zdHJlYW1pbmc8L2xpdGVyYWw+ICg8dHlwZT5lbnVt PC90eXBlPik8L3Rlcm0+CiAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgIDxwYXJhPgogICAg ICAgICAgIFNwZWNpZmllcyB3aGV0aGVyIHRvIGVuYWJsZSBzdHJlYW1pbmcgb2YgaW4tcHJvZ3Jl c3MgdHJhbnNhY3Rpb25zCi0gICAgICAgICAgZm9yIHRoaXMgc3Vic2NyaXB0aW9uLiAgQnkgZGVm YXVsdCwgYWxsIHRyYW5zYWN0aW9ucwotICAgICAgICAgIGFyZSBmdWxseSBkZWNvZGVkIG9uIHRo ZSBwdWJsaXNoZXIgYW5kIG9ubHkgdGhlbiBzZW50IHRvIHRoZQotICAgICAgICAgIHN1YnNjcmli ZXIgYXMgYSB3aG9sZS4KKyAgICAgICAgICBmb3IgdGhpcyBzdWJzY3JpcHRpb24uICBUaGUgZGVm YXVsdCB2YWx1ZSBpcyA8bGl0ZXJhbD5vZmY8L2xpdGVyYWw+LAorICAgICAgICAgIG1lYW5pbmcg YWxsIHRyYW5zYWN0aW9ucyBhcmUgZnVsbHkgZGVjb2RlZCBvbiB0aGUgcHVibGlzaGVyIGFuZCBv bmx5CisgICAgICAgICAgdGhlbiBzZW50IHRvIHRoZSBzdWJzY3JpYmVyIGFzIGEgd2hvbGUuCisg ICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgIDxwYXJhPgorICAgICAgICAgIElmIHNldCB0byA8 bGl0ZXJhbD5vbjwvbGl0ZXJhbD4sIHRoZSBpbmNvbWluZyBjaGFuZ2VzIGFyZSB3cml0dGVuIHRv CisgICAgICAgICAgdGVtcG9yYXJ5IGZpbGVzIGFuZCB0aGVuIGFwcGxpZWQgb25seSBhZnRlciB0 aGUgdHJhbnNhY3Rpb24gaXMKKyAgICAgICAgICBjb21taXR0ZWQgb24gdGhlIHB1Ymxpc2hlciBh bmQgcmVjZWl2ZWQgYnkgdGhlIHN1YnNjcmliZXIuCisgICAgICAgICA8L3BhcmE+CisKKyAgICAg ICAgIDxwYXJhPgorICAgICAgICAgIElmIHNldCB0byA8bGl0ZXJhbD5wYXJhbGxlbDwvbGl0ZXJh bD4sIGluY29taW5nIGNoYW5nZXMgYXJlIGRpcmVjdGx5CisgICAgICAgICAgYXBwbGllZCB2aWEg b25lIG9mIHRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXJzLCBpZiBhdmFpbGFibGUuIElmIG5vCisg ICAgICAgICAgcGFyYWxsZWwgYXBwbHkgd29ya2VyIGlzIGZyZWUgdG8gaGFuZGxlIHN0cmVhbWlu ZyB0cmFuc2FjdGlvbnMgdGhlbgorICAgICAgICAgIHRoZSBjaGFuZ2VzIGFyZSB3cml0dGVuIHRv IHRlbXBvcmFyeSBmaWxlcyBhbmQgYXBwbGllZCBhZnRlciB0aGUKKyAgICAgICAgICB0cmFuc2Fj dGlvbiBpcyBjb21taXR0ZWQuIE5vdGUgdGhhdCBpZiBhbiBlcnJvciBoYXBwZW5zIGluIGEKKyAg ICAgICAgICBwYXJhbGxlbCBhcHBseSB3b3JrZXIsIHRoZSBmaW5pc2ggTFNOIG9mIHRoZSByZW1v dGUgdHJhbnNhY3Rpb24KKyAgICAgICAgICBtaWdodCBub3QgYmUgcmVwb3J0ZWQgaW4gdGhlIHNl cnZlciBsb2cuCiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAg PC92YXJsaXN0ZW50cnk+CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvc3lzdGVtLXZpZXdzLnNn bWwgYi9kb2Mvc3JjL3NnbWwvc3lzdGVtLXZpZXdzLnNnbWwKaW5kZXggMTQzYWU1YjdiYi4uODQy OGVlNzg2NyAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3N5c3RlbS12aWV3cy5zZ21sCisrKyBi L2RvYy9zcmMvc2dtbC9zeXN0ZW0tdmlld3Muc2dtbApAQCAtMTM3OSw4ICsxMzc5LDkgQEAKICAg ICAgICA8bGl0ZXJhbD52aXJ0dWFseGlkPC9saXRlcmFsPiwKICAgICAgICA8bGl0ZXJhbD5zcGVj dG9rZW48L2xpdGVyYWw+LAogICAgICAgIDxsaXRlcmFsPm9iamVjdDwvbGl0ZXJhbD4sCi0gICAg ICAgPGxpdGVyYWw+dXNlcmxvY2s8L2xpdGVyYWw+LCBvcgotICAgICAgIDxsaXRlcmFsPmFkdmlz b3J5PC9saXRlcmFsPi4KKyAgICAgICA8bGl0ZXJhbD51c2VybG9jazwvbGl0ZXJhbD4sCisgICAg ICAgPGxpdGVyYWw+YWR2aXNvcnk8L2xpdGVyYWw+LCBvcgorICAgICAgIDxsaXRlcmFsPmFwcGx5 dHJhbnNhY3Rpb248L2xpdGVyYWw+LgogICAgICAgIChTZWUgYWxzbyA8eHJlZiBsaW5rZW5kPSJ3 YWl0LWV2ZW50LWxvY2stdGFibGUiLz4uKQogICAgICAgPC9wYXJhPjwvZW50cnk+CiAgICAgIDwv cm93PgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGFjdC5jIGIvc3Jj L2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGFjdC5jCmluZGV4IGI3YzdmZDlmMDAuLmQwZDljODY0 NDggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hhY3QuYworKysgYi9z cmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94YWN0LmMKQEAgLTE3MTIsNiArMTcxMiw3IEBAIFJl Y29yZFRyYW5zYWN0aW9uQWJvcnQoYm9vbCBpc1N1YlhhY3QpCiAJaW50CQkJbmNoaWxkcmVuOwog CVRyYW5zYWN0aW9uSWQgKmNoaWxkcmVuOwogCVRpbWVzdGFtcFR6IHhhY3RfdGltZTsKKwlib29s CQlyZXBsb3JpZ2luOwogCiAJLyoKIAkgKiBJZiB3ZSBoYXZlbid0IGJlZW4gYXNzaWduZWQgYW4g WElELCBub2JvZHkgd2lsbCBjYXJlIHdoZXRoZXIgd2UgYWJvcnRlZApAQCAtMTc0Miw2ICsxNzQz LDEzIEBAIFJlY29yZFRyYW5zYWN0aW9uQWJvcnQoYm9vbCBpc1N1YlhhY3QpCiAJCWVsb2coUEFO SUMsICJjYW5ub3QgYWJvcnQgdHJhbnNhY3Rpb24gJXUsIGl0IHdhcyBhbHJlYWR5IGNvbW1pdHRl ZCIsCiAJCQkgeGlkKTsKIAorCS8qCisJICogQXJlIHdlIHVzaW5nIHRoZSByZXBsaWNhdGlvbiBv cmlnaW5zIGZlYXR1cmU/ICBPciwgaW4gb3RoZXIgd29yZHMsIGFyZQorCSAqIHdlIHJlcGxheWlu ZyByZW1vdGUgYWN0aW9ucz8KKwkgKi8KKwlyZXBsb3JpZ2luID0gKHJlcGxvcmlnaW5fc2Vzc2lv bl9vcmlnaW4gIT0gSW52YWxpZFJlcE9yaWdpbklkICYmCisJCQkJICByZXBsb3JpZ2luX3Nlc3Np b25fb3JpZ2luICE9IERvTm90UmVwbGljYXRlSWQpOworCiAJLyogRmV0Y2ggdGhlIGRhdGEgd2Ug bmVlZCBmb3IgdGhlIGFib3J0IHJlY29yZCAqLwogCW5yZWxzID0gc21nckdldFBlbmRpbmdEZWxl dGVzKGZhbHNlLCAmcmVscyk7CiAJbmNoaWxkcmVuID0geGFjdEdldENvbW1pdHRlZENoaWxkcmVu KCZjaGlsZHJlbik7CkBAIC0xNzY1LDYgKzE3NzMsMTEgQEAgUmVjb3JkVHJhbnNhY3Rpb25BYm9y dChib29sIGlzU3ViWGFjdCkKIAkJCQkJICAgTXlYYWN0RmxhZ3MsIEludmFsaWRUcmFuc2FjdGlv bklkLAogCQkJCQkgICBOVUxMKTsKIAorCWlmIChyZXBsb3JpZ2luKQorCQkvKiBNb3ZlIExTTnMg Zm9yd2FyZCBmb3IgdGhpcyByZXBsaWNhdGlvbiBvcmlnaW4gKi8KKwkJcmVwbG9yaWdpbl9zZXNz aW9uX2FkdmFuY2UocmVwbG9yaWdpbl9zZXNzaW9uX29yaWdpbl9sc24sCisJCQkJCQkJCSAgIFhh Y3RMYXN0UmVjRW5kKTsKKwogCS8qCiAJICogUmVwb3J0IHRoZSBsYXRlc3QgYXN5bmMgYWJvcnQg TFNOLCBzbyB0aGF0IHRoZSBXQUwgd3JpdGVyIGtub3dzIHRvCiAJICogZmx1c2ggdGhpcyBhYm9y dC4gVGhlcmUncyBub3RoaW5nIHRvIGJlIGdhaW5lZCBieSBkZWxheWluZyB0aGlzLCBzaW5jZQpA QCAtNTg2NywxMSArNTg4MCwxMCBAQCBYYWN0TG9nQWJvcnRSZWNvcmQoVGltZXN0YW1wVHogYWJv cnRfdGltZSwKIAl9CiAKIAkvKgotCSAqIER1bXAgdHJhbnNhY3Rpb24gb3JpZ2luIGluZm9ybWF0 aW9uIG9ubHkgZm9yIGFib3J0IHByZXBhcmVkLiBXZSBuZWVkCi0JICogdGhpcyBkdXJpbmcgcmVj b3ZlcnkgdG8gdXBkYXRlIHRoZSByZXBsaWNhdGlvbiBvcmlnaW4gcHJvZ3Jlc3MuCisJICogRHVt cCB0cmFuc2FjdGlvbiBvcmlnaW4gaW5mb3JtYXRpb24uIFdlIG5lZWQgdGhpcyBkdXJpbmcgcmVj b3ZlcnkgdG8KKwkgKiB1cGRhdGUgdGhlIHJlcGxpY2F0aW9uIG9yaWdpbiBwcm9ncmVzcy4KIAkg Ki8KLQlpZiAoKHJlcGxvcmlnaW5fc2Vzc2lvbl9vcmlnaW4gIT0gSW52YWxpZFJlcE9yaWdpbklk KSAmJgotCQlUcmFuc2FjdGlvbklkSXNWYWxpZCh0d29waGFzZV94aWQpKQorCWlmIChyZXBsb3Jp Z2luX3Nlc3Npb25fb3JpZ2luICE9IEludmFsaWRSZXBPcmlnaW5JZCkKIAl7CiAJCXhsX3hpbmZv LnhpbmZvIHw9IFhBQ1RfWElORk9fSEFTX09SSUdJTjsKIApAQCAtNTkyOCw4ICs1OTQwLDggQEAg WGFjdExvZ0Fib3J0UmVjb3JkKFRpbWVzdGFtcFR6IGFib3J0X3RpbWUsCiAJaWYgKHhsX3hpbmZv LnhpbmZvICYgWEFDVF9YSU5GT19IQVNfT1JJR0lOKQogCQlYTG9nUmVnaXN0ZXJEYXRhKChjaGFy ICopICgmeGxfb3JpZ2luKSwgc2l6ZW9mKHhsX3hhY3Rfb3JpZ2luKSk7CiAKLQlpZiAoVHJhbnNh Y3Rpb25JZElzVmFsaWQodHdvcGhhc2VfeGlkKSkKLQkJWExvZ1NldFJlY29yZEZsYWdzKFhMT0df SU5DTFVERV9PUklHSU4pOworCS8qIEluY2x1ZGUgdGhlIHJlcGxpY2F0aW9uIG9yaWdpbiAqLwor CVhMb2dTZXRSZWNvcmRGbGFncyhYTE9HX0lOQ0xVREVfT1JJR0lOKTsKIAogCXJldHVybiBYTG9n SW5zZXJ0KFJNX1hBQ1RfSUQsIGluZm8pOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29t bWFuZHMvc3Vic2NyaXB0aW9uY21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvc3Vic2NyaXB0 aW9uY21kcy5jCmluZGV4IGQ2NzM1NTdlYTQuLjkzODJlNjE5ZTkgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2NvbW1hbmRzL3N1YnNjcmlwdGlvbmNtZHMuYworKysgYi9zcmMvYmFja2VuZC9jb21t YW5kcy9zdWJzY3JpcHRpb25jbWRzLmMKQEAgLTg0LDcgKzg0LDcgQEAgdHlwZWRlZiBzdHJ1Y3Qg U3ViT3B0cwogCWJvb2wJCWNvcHlfZGF0YTsKIAlib29sCQlyZWZyZXNoOwogCWJvb2wJCWJpbmFy eTsKLQlib29sCQlzdHJlYW1pbmc7CisJY2hhcgkJc3RyZWFtaW5nOwogCWJvb2wJCXR3b3BoYXNl OwogCWJvb2wJCWRpc2FibGVvbmVycjsKIAljaGFyCSAgICpvcmlnaW47CkBAIC0xMzgsNyArMTM4 LDcgQEAgcGFyc2Vfc3Vic2NyaXB0aW9uX29wdGlvbnMoUGFyc2VTdGF0ZSAqcHN0YXRlLCBMaXN0 ICpzdG10X29wdGlvbnMsCiAJaWYgKElzU2V0KHN1cHBvcnRlZF9vcHRzLCBTVUJPUFRfQklOQVJZ KSkKIAkJb3B0cy0+YmluYXJ5ID0gZmFsc2U7CiAJaWYgKElzU2V0KHN1cHBvcnRlZF9vcHRzLCBT VUJPUFRfU1RSRUFNSU5HKSkKLQkJb3B0cy0+c3RyZWFtaW5nID0gZmFsc2U7CisJCW9wdHMtPnN0 cmVhbWluZyA9IExPR0lDQUxSRVBfU1RSRUFNX09GRjsKIAlpZiAoSXNTZXQoc3VwcG9ydGVkX29w dHMsIFNVQk9QVF9UV09QSEFTRV9DT01NSVQpKQogCQlvcHRzLT50d29waGFzZSA9IGZhbHNlOwog CWlmIChJc1NldChzdXBwb3J0ZWRfb3B0cywgU1VCT1BUX0RJU0FCTEVfT05fRVJSKSkKQEAgLTI0 MSw3ICsyNDEsNyBAQCBwYXJzZV9zdWJzY3JpcHRpb25fb3B0aW9ucyhQYXJzZVN0YXRlICpwc3Rh dGUsIExpc3QgKnN0bXRfb3B0aW9ucywKIAkJCQllcnJvckNvbmZsaWN0aW5nRGVmRWxlbShkZWZl bCwgcHN0YXRlKTsKIAogCQkJb3B0cy0+c3BlY2lmaWVkX29wdHMgfD0gU1VCT1BUX1NUUkVBTUlO RzsKLQkJCW9wdHMtPnN0cmVhbWluZyA9IGRlZkdldEJvb2xlYW4oZGVmZWwpOworCQkJb3B0cy0+ c3RyZWFtaW5nID0gZGVmR2V0U3RyZWFtaW5nTW9kZShkZWZlbCk7CiAJCX0KIAkJZWxzZSBpZiAo c3RyY21wKGRlZmVsLT5kZWZuYW1lLCAidHdvX3BoYXNlIikgPT0gMCkKIAkJewpAQCAtNjI5LDcg KzYyOSw3IEBAIENyZWF0ZVN1YnNjcmlwdGlvbihQYXJzZVN0YXRlICpwc3RhdGUsIENyZWF0ZVN1 YnNjcmlwdGlvblN0bXQgKnN0bXQsCiAJdmFsdWVzW0FudW1fcGdfc3Vic2NyaXB0aW9uX3N1Ym93 bmVyIC0gMV0gPSBPYmplY3RJZEdldERhdHVtKG93bmVyKTsKIAl2YWx1ZXNbQW51bV9wZ19zdWJz Y3JpcHRpb25fc3ViZW5hYmxlZCAtIDFdID0gQm9vbEdldERhdHVtKG9wdHMuZW5hYmxlZCk7CiAJ dmFsdWVzW0FudW1fcGdfc3Vic2NyaXB0aW9uX3N1YmJpbmFyeSAtIDFdID0gQm9vbEdldERhdHVt KG9wdHMuYmluYXJ5KTsKLQl2YWx1ZXNbQW51bV9wZ19zdWJzY3JpcHRpb25fc3Vic3RyZWFtIC0g MV0gPSBCb29sR2V0RGF0dW0ob3B0cy5zdHJlYW1pbmcpOworCXZhbHVlc1tBbnVtX3BnX3N1YnNj cmlwdGlvbl9zdWJzdHJlYW0gLSAxXSA9IENoYXJHZXREYXR1bShvcHRzLnN0cmVhbWluZyk7CiAJ dmFsdWVzW0FudW1fcGdfc3Vic2NyaXB0aW9uX3N1YnR3b3BoYXNlc3RhdGUgLSAxXSA9CiAJCUNo YXJHZXREYXR1bShvcHRzLnR3b3BoYXNlID8KIAkJCQkJIExPR0lDQUxSRVBfVFdPUEhBU0VfU1RB VEVfUEVORElORyA6CkBAIC0xMDk4LDcgKzEwOTgsNyBAQCBBbHRlclN1YnNjcmlwdGlvbihQYXJz ZVN0YXRlICpwc3RhdGUsIEFsdGVyU3Vic2NyaXB0aW9uU3RtdCAqc3RtdCwKIAkJCQlpZiAoSXNT ZXQob3B0cy5zcGVjaWZpZWRfb3B0cywgU1VCT1BUX1NUUkVBTUlORykpCiAJCQkJewogCQkJCQl2 YWx1ZXNbQW51bV9wZ19zdWJzY3JpcHRpb25fc3Vic3RyZWFtIC0gMV0gPQotCQkJCQkJQm9vbEdl dERhdHVtKG9wdHMuc3RyZWFtaW5nKTsKKwkJCQkJCUNoYXJHZXREYXR1bShvcHRzLnN0cmVhbWlu Zyk7CiAJCQkJCXJlcGxhY2VzW0FudW1fcGdfc3Vic2NyaXB0aW9uX3N1YnN0cmVhbSAtIDFdID0g dHJ1ZTsKIAkJCQl9CiAKQEAgLTIxMjIsMyArMjEyMiw2MCBAQCBtZXJnZV9wdWJsaWNhdGlvbnMo TGlzdCAqb2xkcHVibGlzdCwgTGlzdCAqbmV3cHVibGlzdCwgYm9vbCBhZGRwdWIsIGNvbnN0IGNo YXIgKgogCiAJcmV0dXJuIG9sZHB1Ymxpc3Q7CiB9CisKKy8qCisgKiBFeHRyYWN0IHRoZSBzdHJl YW1pbmcgbW9kZSB2YWx1ZSBmcm9tIGEgRGVmRWxlbS4gIFRoaXMgaXMgbGlrZQorICogZGVmR2V0 Qm9vbGVhbigpIGJ1dCBhbHNvIGFjY2VwdHMgdGhlIHNwZWNpYWwgdmFsdWUgb2YgInBhcmFsbGVs Ii4KKyAqLworY2hhcgorZGVmR2V0U3RyZWFtaW5nTW9kZShEZWZFbGVtICpkZWYpCit7CisJLyoK KwkgKiBJZiBubyBwYXJhbWV0ZXIgdmFsdWUgZ2l2ZW4sIGFzc3VtZSAidHJ1ZSIgaXMgbWVhbnQu CisJICovCisJaWYgKCFkZWYtPmFyZykKKwkJcmV0dXJuIExPR0lDQUxSRVBfU1RSRUFNX09OOwor CisJLyoKKwkgKiBBbGxvdyAwLCAxLCAiZmFsc2UiLCAidHJ1ZSIsICJvZmYiLCAib24iIG9yICJw YXJhbGxlbCIuCisJICovCisJc3dpdGNoIChub2RlVGFnKGRlZi0+YXJnKSkKKwl7CisJCWNhc2Ug VF9JbnRlZ2VyOgorCQkJc3dpdGNoIChpbnRWYWwoZGVmLT5hcmcpKQorCQkJeworCQkJCWNhc2Ug MDoKKwkJCQkJcmV0dXJuIExPR0lDQUxSRVBfU1RSRUFNX09GRjsKKwkJCQljYXNlIDE6CisJCQkJ CXJldHVybiBMT0dJQ0FMUkVQX1NUUkVBTV9PTjsKKwkJCQlkZWZhdWx0OgorCQkJCQkvKiBvdGhl cndpc2UsIGVycm9yIG91dCBiZWxvdyAqLworCQkJCQlicmVhazsKKwkJCX0KKwkJCWJyZWFrOwor CQlkZWZhdWx0OgorCQkJeworCQkJCWNoYXIJICAgKnN2YWwgPSBkZWZHZXRTdHJpbmcoZGVmKTsK KworCQkJCS8qCisJCQkJICogVGhlIHNldCBvZiBzdHJpbmdzIGFjY2VwdGVkIGhlcmUgc2hvdWxk IG1hdGNoIHVwIHdpdGggdGhlCisJCQkJICogZ3JhbW1hcidzIG9wdF9ib29sZWFuX29yX3N0cmlu ZyBwcm9kdWN0aW9uLgorCQkJCSAqLworCQkJCWlmIChwZ19zdHJjYXNlY21wKHN2YWwsICJmYWxz ZSIpID09IDAgfHwKKwkJCQkJcGdfc3RyY2FzZWNtcChzdmFsLCAib2ZmIikgPT0gMCkKKwkJCQkJ cmV0dXJuIExPR0lDQUxSRVBfU1RSRUFNX09GRjsKKwkJCQlpZiAocGdfc3RyY2FzZWNtcChzdmFs LCAidHJ1ZSIpID09IDAgfHwKKwkJCQkJcGdfc3RyY2FzZWNtcChzdmFsLCAib24iKSA9PSAwKQor CQkJCQlyZXR1cm4gTE9HSUNBTFJFUF9TVFJFQU1fT047CisJCQkJaWYgKHBnX3N0cmNhc2VjbXAo c3ZhbCwgInBhcmFsbGVsIikgPT0gMCkKKwkJCQkJcmV0dXJuIExPR0lDQUxSRVBfU1RSRUFNX1BB UkFMTEVMOworCQkJfQorCQkJYnJlYWs7CisJfQorCisJZXJlcG9ydChFUlJPUiwKKwkJCShlcnJj b2RlKEVSUkNPREVfU1lOVEFYX0VSUk9SKSwKKwkJCSBlcnJtc2coIiVzIHJlcXVpcmVzIGEgQm9v bGVhbiB2YWx1ZSBvciBcInBhcmFsbGVsXCIiLAorCQkJCQlkZWYtPmRlZm5hbWUpKSk7CisJcmV0 dXJuIExPR0lDQUxSRVBfU1RSRUFNX09GRjsJLyoga2VlcCBjb21waWxlciBxdWlldCAqLworfQpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvbGlicHEvcHFtcS5jIGIvc3JjL2JhY2tlbmQvbGlicHEv cHFtcS5jCmluZGV4IDRkMDQxNWUzNzkuLjYzOTg0NWZkODAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2xpYnBxL3BxbXEuYworKysgYi9zcmMvYmFja2VuZC9saWJwcS9wcW1xLmMKQEAgLTEzLDEx ICsxMywxMyBAQAogCiAjaW5jbHVkZSAicG9zdGdyZXMuaCIKIAorI2luY2x1ZGUgImFjY2Vzcy9w YXJhbGxlbC5oIgogI2luY2x1ZGUgImxpYnBxL2xpYnBxLmgiCiAjaW5jbHVkZSAibGlicHEvcHFm b3JtYXQuaCIKICNpbmNsdWRlICJsaWJwcS9wcW1xLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgi CiAjaW5jbHVkZSAicGdzdGF0LmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24vbG9naWNhbHdvcmtl ci5oIgogI2luY2x1ZGUgInRjb3AvdGNvcHByb3QuaCIKICNpbmNsdWRlICJ1dGlscy9idWlsdGlu cy5oIgogCkBAIC0xNjIsOSArMTY0LDE5IEBAIG1xX3B1dG1lc3NhZ2UoY2hhciBtc2d0eXBlLCBj b25zdCBjaGFyICpzLCBzaXplX3QgbGVuKQogCQlyZXN1bHQgPSBzaG1fbXFfc2VuZHYocHFfbXFf aGFuZGxlLCBpb3YsIDIsIHRydWUsIHRydWUpOwogCiAJCWlmIChwcV9tcV9wYXJhbGxlbF9sZWFk ZXJfcGlkICE9IDApCi0JCQlTZW5kUHJvY1NpZ25hbChwcV9tcV9wYXJhbGxlbF9sZWFkZXJfcGlk LAotCQkJCQkJICAgUFJPQ1NJR19QQVJBTExFTF9NRVNTQUdFLAotCQkJCQkJICAgcHFfbXFfcGFy YWxsZWxfbGVhZGVyX2JhY2tlbmRfaWQpOworCQl7CisJCQlpZiAoSXNMb2dpY2FsUGFyYWxsZWxB cHBseVdvcmtlcigpKQorCQkJCVNlbmRQcm9jU2lnbmFsKHBxX21xX3BhcmFsbGVsX2xlYWRlcl9w aWQsCisJCQkJCQkJICAgUFJPQ1NJR19QQVJBTExFTF9BUFBMWV9NRVNTQUdFLAorCQkJCQkJCSAg IHBxX21xX3BhcmFsbGVsX2xlYWRlcl9iYWNrZW5kX2lkKTsKKwkJCWVsc2UKKwkJCXsKKwkJCQlB c3NlcnQoSXNQYXJhbGxlbFdvcmtlcigpKTsKKwkJCQlTZW5kUHJvY1NpZ25hbChwcV9tcV9wYXJh bGxlbF9sZWFkZXJfcGlkLAorCQkJCQkJCSAgIFBST0NTSUdfUEFSQUxMRUxfTUVTU0FHRSwKKwkJ CQkJCQkgICBwcV9tcV9wYXJhbGxlbF9sZWFkZXJfYmFja2VuZF9pZCk7CisJCQl9CisJCX0KIAog CQlpZiAocmVzdWx0ICE9IFNITV9NUV9XT1VMRF9CTE9DSykKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9iZ3dvcmtlci5jIGIvc3JjL2JhY2tlbmQvcG9zdG1h c3Rlci9iZ3dvcmtlci5jCmluZGV4IDBkNzJkZTI0YjAuLjJkZmE5YWI1MjIgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYmd3b3JrZXIuYworKysgYi9zcmMvYmFja2VuZC9wb3N0 bWFzdGVyL2Jnd29ya2VyLmMKQEAgLTEyOCw2ICsxMjgsOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0 CiAJfSwKIAl7CiAJCSJBcHBseVdvcmtlck1haW4iLCBBcHBseVdvcmtlck1haW4KKwl9LAorCXsK KwkJIlBhcmFsbGVsQXBwbHlXb3JrZXJNYWluIiwgUGFyYWxsZWxBcHBseVdvcmtlck1haW4KIAl9 CiB9OwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2ludGVycnVwdC5jIGIv c3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9pbnRlcnJ1cHQuYwppbmRleCAxYWVkMmUyZTk5Li5lNjQw MjlmYWM0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2ludGVycnVwdC5jCisr KyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvaW50ZXJydXB0LmMKQEAgLTk4LDggKzk4LDkgQEAg U2lnbmFsSGFuZGxlckZvckNyYXNoRXhpdChTSUdOQUxfQVJHUykKICAqIHNodXQgZG93biBhbmQg ZXhpdC4KICAqCiAgKiBUeXBpY2FsbHksIHRoaXMgaGFuZGxlciB3b3VsZCBiZSB1c2VkIGZvciBT SUdURVJNLCBidXQgc29tZSBwcm9jZXNzZXMgdXNlCi0gKiBvdGhlciBzaWduYWxzLiBJbiBwYXJ0 aWN1bGFyLCB0aGUgY2hlY2twb2ludGVyIGV4aXRzIG9uIFNJR1VTUjIsIGFuZCB0aGUKLSAqIFdB TCB3cml0ZXIgZXhpdHMgb24gZWl0aGVyIFNJR0lOVCBvciBTSUdURVJNLgorICogb3RoZXIgc2ln bmFscy4gSW4gcGFydGljdWxhciwgdGhlIGNoZWNrcG9pbnRlciBleGl0cyBvbiBTSUdVU1IyLCBh bmQgdGhlIFdBTAorICogd3JpdGVyIGFuZCB0aGUgbG9naWNhbCByZXBsaWNhdGlvbiBwYXJhbGxl bCBhcHBseSB3b3JrZXIgZXhpdHMgb24gZWl0aGVyCisgKiBTSUdJTlQgb3IgU0lHVEVSTS4KICAq CiAgKiBTaHV0ZG93blJlcXVlc3RQZW5kaW5nIHNob3VsZCBiZSBjaGVja2VkIGF0IGEgY29udmVu aWVudCBwbGFjZSB3aXRoaW4gdGhlCiAgKiBtYWluIGxvb3AsIG9yIGVsc2UgdGhlIG1haW4gbG9v cCBzaG91bGQgY2FsbCBIYW5kbGVNYWluTG9vcEludGVycnVwdHMuCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9yZXBsaWNhdGlvbi9saWJwcXdhbHJlY2VpdmVyL2xpYnBxd2FscmVjZWl2ZXIuYyBi L3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xpYnBxd2FscmVjZWl2ZXIvbGlicHF3YWxyZWNlaXZl ci5jCmluZGV4IDdmNjk3YjBmMjkuLjIyNWRhODFmMmUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L3JlcGxpY2F0aW9uL2xpYnBxd2FscmVjZWl2ZXIvbGlicHF3YWxyZWNlaXZlci5jCisrKyBiL3Ny Yy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xpYnBxd2FscmVjZWl2ZXIvbGlicHF3YWxyZWNlaXZlci5j CkBAIC00NDMsOSArNDQzLDkgQEAgbGlicHFyY3Zfc3RhcnRzdHJlYW1pbmcoV2FsUmVjZWl2ZXJD b25uICpjb25uLAogCQlhcHBlbmRTdHJpbmdJbmZvKCZjbWQsICJwcm90b192ZXJzaW9uICcldSci LAogCQkJCQkJIG9wdGlvbnMtPnByb3RvLmxvZ2ljYWwucHJvdG9fdmVyc2lvbik7CiAKLQkJaWYg KG9wdGlvbnMtPnByb3RvLmxvZ2ljYWwuc3RyZWFtaW5nICYmCi0JCQlQUXNlcnZlclZlcnNpb24o Y29ubi0+c3RyZWFtQ29ubikgPj0gMTQwMDAwKQotCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygm Y21kLCAiLCBzdHJlYW1pbmcgJ29uJyIpOworCQlpZiAob3B0aW9ucy0+cHJvdG8ubG9naWNhbC5z dHJlYW1pbmdfc3RyKQorCQkJYXBwZW5kU3RyaW5nSW5mbygmY21kLCAiLCBzdHJlYW1pbmcgJyVz JyIsCisJCQkJCQkJIG9wdGlvbnMtPnByb3RvLmxvZ2ljYWwuc3RyZWFtaW5nX3N0cik7CiAKIAkJ aWYgKG9wdGlvbnMtPnByb3RvLmxvZ2ljYWwudHdvcGhhc2UgJiYKIAkJCVBRc2VydmVyVmVyc2lv bihjb25uLT5zdHJlYW1Db25uKSA+PSAxNTAwMDApCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9y ZXBsaWNhdGlvbi9sb2dpY2FsL01ha2VmaWxlIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9n aWNhbC9NYWtlZmlsZQppbmRleCBjNGUyZmRlYjcxLi4yZGMyNWUzN2JiIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL01ha2VmaWxlCisrKyBiL3NyYy9iYWNrZW5k L3JlcGxpY2F0aW9uL2xvZ2ljYWwvTWFrZWZpbGUKQEAgLTE1LDYgKzE1LDcgQEAgaW5jbHVkZSAk KHRvcF9idWlsZGRpcikvc3JjL01ha2VmaWxlLmdsb2JhbAogb3ZlcnJpZGUgQ1BQRkxBR1MgOj0g LUkkKHNyY2RpcikgJChDUFBGTEFHUykKIAogT0JKUyA9IFwKKwlhcHBseXBhcmFsbGVsd29ya2Vy Lm8gXAogCWRlY29kZS5vIFwKIAlsYXVuY2hlci5vIFwKIAlsb2dpY2FsLm8gXApkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9hcHBseXBhcmFsbGVsd29ya2VyLmMg Yi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2FwcGx5cGFyYWxsZWx3b3JrZXIuYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi43MDM5ODNmMjc4Ci0tLSAvZGV2 L251bGwKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9hcHBseXBhcmFsbGVs d29ya2VyLmMKQEAgLTAsMCArMSwxNjE5IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIGFwcGx5 cGFyYWxsZWx3b3JrZXIuYworICoJICAgU3VwcG9ydCByb3V0aW5lcyBmb3IgYXBwbHlpbmcgeGFj dCBieSBwYXJhbGxlbCBhcHBseSB3b3JrZXIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMjIsIFBv c3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICogSURFTlRJRklDQVRJT04K KyAqCSAgc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9hcHBseXBhcmFsbGVsd29ya2Vy LmMKKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGNvZGUgdG8gbGF1bmNoLCBzZXQgdXAs IGFuZCB0ZWFyZG93biBhIHBhcmFsbGVsIGFwcGx5CisgKiB3b3JrZXIgd2hpY2ggcmVjZWl2ZXMg dGhlIGNoYW5nZXMgZnJvbSB0aGUgbGVhZGVyIHdvcmtlciBhbmQgaW52b2tlcyByb3V0aW5lcwor ICogdG8gYXBwbHkgdGhvc2Ugb24gdGhlIHN1YnNjcmliZXIgZGF0YWJhc2UuIEFkZGl0aW9uYWxs eSwgdGhpcyBmaWxlIGNvbnRhaW5zCisgKiByb3V0aW5lcyB0aGF0IGFyZSBpbnRlbmRlZCB0byBz dXBwb3J0IHNldHRpbmcgdXAsIHVzaW5nLCBhbmQgdGVhcmluZyBkb3duIGEKKyAqIFBhcmFsbGVs QXBwbHlXb3JrZXJJbmZvIHdoaWNoIGlzIHJlcXVpcmVkIHNvIHRoZSBsZWFkZXIgd29ya2VyIGFu ZCBwYXJhbGxlbAorICogYXBwbHkgd29ya2VycyBjYW4gY29tbXVuaWNhdGUgd2l0aCBlYWNoIG90 aGVyLgorICoKKyAqIFRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXJzIGFyZSBhc3NpZ25lZCAoaWYg YXZhaWxhYmxlKSBhcyBzb29uIGFzIHhhY3QncworICogZmlyc3Qgc3RyZWFtIGlzIHJlY2VpdmVk IGZvciBzdWJzY3JpcHRpb25zIHRoYXQgaGF2ZSBzZXQgdGhlaXIgJ3N0cmVhbWluZycKKyAqIG9w dGlvbiBhcyBwYXJhbGxlbC4gVGhlIGxlYWRlciBhcHBseSB3b3JrZXIgd2lsbCBzZW5kIGNoYW5n ZXMgdG8gdGhpcyBuZXcKKyAqIHdvcmtlciB2aWEgc2hhcmVkIG1lbW9yeS4gV2Uga2VlcCB0aGlz IHdvcmtlciBhc3NpZ25lZCB0aWxsIHRoZSB0cmFuc2FjdGlvbgorICogY29tbWl0IGlzIHJlY2Vp dmVkIGFuZCBhbHNvIHdhaXQgZm9yIHRoZSB3b3JrZXIgdG8gZmluaXNoIGF0IGNvbW1pdC4gVGhp cworICogcHJlc2VydmVzIGNvbW1pdCBvcmRlcmluZyBhbmQgYXZvaWQgZmlsZSBJL08gaW4gbW9z dCBjYXNlcywgYWx0aG91Z2ggd2UKKyAqIHN0aWxsIG5lZWQgdG8gc3BpbGwgdG8gYSBmaWxlIGlm IHRoZXJlIGlzIG5vIHdvcmtlciBhdmFpbGFibGUuIFNlZSBjb21tZW50cworICogYXRvcCBsb2dp Y2FsL3dvcmtlciB0byBrbm93IG1vcmUgYWJvdXQgc3RyZWFtZWQgeGFjdHMgd2hvc2UgY2hhbmdl cyBhcmUKKyAqIHNwaWxsZWQgdG8gZGlzay4gSXQgaXMgaW1wb3J0YW50IHRvIG1haW50YWluIGNv bW1pdCBvcmRlciB0byBhdm9pZCBmYWlsdXJlcworICogZHVlIHRvOiAoYSkgdHJhbnNhY3Rpb24g ZGVwZW5kZW5jaWVzIC0gc2F5IGlmIHdlIGluc2VydCBhIHJvdyBpbiB0aGUgZmlyc3QKKyAqIHRy YW5zYWN0aW9uIGFuZCB1cGRhdGUgaXQgaW4gdGhlIHNlY29uZCB0cmFuc2FjdGlvbiBvbiBwdWJs aXNoZXIgdGhlbgorICogYWxsb3dpbmcgdGhlIHN1YnNjcmliZXIgdG8gYXBwbHkgYm90aCBpbiBw YXJhbGxlbCBjYW4gbGVhZCB0byBmYWlsdXJlIGluIHRoZQorICogdXBkYXRlOyAoYikgZGVhZGxv Y2tzIC0gYWxsb3dpbmcgdHJhbnNhY3Rpb25zIHRoYXQgdXBkYXRlIHRoZSBzYW1lIHNldCBvZgor ICogcm93cy90YWJsZXMgaW4gdGhlIG9wcG9zaXRlIG9yZGVyIHRvIGJlIGFwcGxpZWQgaW4gcGFy YWxsZWwgY2FuIGxlYWQgdG8KKyAqIGRlYWRsb2Nrcy4KKyAqCisgKiBBIHdvcmtlciBwb29sIGlz IHVzZWQgdG8gYXZvaWQgcmVzdGFydGluZyB3b3JrZXJzIGZvciBlYWNoIHN0cmVhbWluZworICog dHJhbnNhY3Rpb24uIFdlIG1haW50YWluIGVhY2ggd29ya2VyJ3MgaW5mb3JtYXRpb24gKFBhcmFs bGVsQXBwbHlXb3JrZXJJbmZvKQorICogaW4gdGhlIFBhcmFsbGVsQXBwbHlXb3JrZXJQb29sLiBB ZnRlciBzdWNjZXNzZnVsbHkgbGF1bmNoaW5nIGEgbmV3IHdvcmtlciwKKyAqIGl0cyBpbmZvcm1h dGlvbiBpcyBhZGRlZCB0byB0aGUgUGFyYWxsZWxBcHBseVdvcmtlclBvb2wuIE9uY2UgdGhlIHdv cmtlcgorICogZmluaXNoZXMgYXBwbHlpbmcgdGhlIHRyYW5zYWN0aW9uLCBpdCBpcyBtYXJrZWQg YXMgYXZhaWxhYmxlIGZvciByZS11c2UuCisgKiBOb3csIGJlZm9yZSBzdGFydGluZyBhIG5ldyB3 b3JrZXIgdG8gYXBwbHkgdGhlIHN0cmVhbWluZyB0cmFuc2FjdGlvbiwgd2UKKyAqIGNoZWNrIHRo ZSBsaXN0IGZvciBhbnkgYXZhaWxhYmxlIHdvcmtlci4gTm90ZSB0aGF0IHdlIHJldGFpbiBhIG1h eGltdW0gb2YKKyAqIGhhbGYgdGhlIG1heF9wYXJhbGxlbF9hcHBseV93b3JrZXJzX3Blcl9zdWJz Y3JpcHRpb24gd29ya2VycyBpbiB0aGUgcG9vbCBhbmQKKyAqIGFmdGVyIHRoYXQsIHdlIHNpbXBs eSBleGl0IHRoZSB3b3JrZXIgYWZ0ZXIgYXBwbHlpbmcgdGhlIHRyYW5zYWN0aW9uLgorICoKKyAq IFhYWCBUaGlzIHdvcmtlciBwb29sIHRocmVzaG9sZCBpcyBhcmJpdHJhcnkgYW5kIHdlIGNhbiBw cm92aWRlIGEgR1VDCisgKiB2YXJpYWJsZSBmb3IgdGhpcyBpbiB0aGUgZnV0dXJlIGlmIHJlcXVp cmVkLgorICoKKyAqIFRoZSBsZWFkZXIgYXBwbHkgd29ya2VyIHdpbGwgY3JlYXRlIGEgc2VwYXJh dGUgZHluYW1pYyBzaGFyZWQgbWVtb3J5IHNlZ21lbnQKKyAqIHdoZW4gZWFjaCBwYXJhbGxlbCBh cHBseSB3b3JrZXIgc3RhcnRzLiBUaGUgcmVhc29uIGZvciB0aGlzIGRlc2lnbiBpcyB0aGF0Cisg KiB3ZSBjYW5ub3QgcHJlZGljdCBob3cgbWFueSB3b3JrZXJzIHdpbGwgYmUgbmVlZGVkLiBJdCBt YXkgYmUgcG9zc2libGUgdG8KKyAqIGFsbG9jYXRlIGVub3VnaCBzaGFyZWQgbWVtb3J5IGluIG9u ZSBzZWdtZW50IGJhc2VkIG9uIHRoZSBtYXhpbXVtIG51bWJlciBvZgorICogcGFyYWxsZWwgYXBw bHkgd29ya2VycyAobWF4X3BhcmFsbGVsX2FwcGx5X3dvcmtlcnNfcGVyX3N1YnNjcmlwdGlvbiks IGJ1dAorICogdGhpcyB3b3VsZCB3YXN0ZSBtZW1vcnkgaWYgbm8gcHJvY2VzcyBpcyBhY3R1YWxs eSBzdGFydGVkLgorICoKKyAqIFRoZSBkeW5hbWljIHNoYXJlZCBtZW1vcnkgc2VnbWVudCBjb250 YWluczogKGEpIGEgc2htX21xIHRoYXQgaXMgdXNlZCB0bworICogc2VuZCBjaGFuZ2VzIGluIHRo ZSB0cmFuc2FjdGlvbiBmcm9tIGxlYWRlciBhcHBseSB3b3JrZXIgdG8gcGFyYWxsZWwgYXBwbHkK KyAqIHdvcmtlcjsgKGIpIGFub3RoZXIgc2htX21xIHRoYXQgaXMgdXNlZCB0byBzZW5kIGVycm9y cyAoYW5kIG90aGVyIG1lc3NhZ2VzCisgKiByZXBvcnRlZCB2aWEgZWxvZy9lcmVwb3J0KSBmcm9t IHRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgdG8gbGVhZGVyIGFwcGx5CisgKiB3b3JrZXI7IChj KSBuZWNlc3NhcnkgaW5mb3JtYXRpb24gdG8gYmUgc2hhcmVkIGFtb25nIHBhcmFsbGVsIGFwcGx5 IHdvcmtlcnMKKyAqIGFuZCB0aGUgbGVhZGVyIGFwcGx5IHdvcmtlciAoaS5lLiBtZW1iZXJzIG9m IFBhcmFsbGVsQXBwbHlXb3JrZXJTaGFyZWQpLgorICoKKyAqIExvY2tpbmcgQ29uc2lkZXJhdGlv bnMKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFNpbmNlIHRoZSBkYXRhYmFzZSBzdHJ1 Y3R1cmUgKHNjaGVtYSBvZiBzdWJzY3JpcHRpb24gdGFibGVzLCBjb25zdHJhaW50cywKKyAqIGV0 Yy4pIG9mIHRoZSBwdWJsaXNoZXIgYW5kIHN1YnNjcmliZXIgY291bGQgYmUgZGlmZmVyZW50LCBh cHBseWluZworICogdHJhbnNhY3Rpb25zIGluIHBhcmFsbGVsIG1vZGUgb24gdGhlIHN1YnNjcmli ZXIgc2lkZSBjYW4gY2F1c2Ugc29tZQorICogZGVhZGxvY2tzIHRoYXQgZG8gbm90IG9jY3VyIG9u IHRoZSBwdWJsaXNoZXIgc2lkZS4gVGhpcyBjYW4gaGFwcGVuIGV2ZW4KKyAqIHdpdGhvdXQgcGFy YWxsZWwgbW9kZSB3aGVuIHRoZXJlIGFyZSBjb25jdXJyZW50IG9wZXJhdGlvbnMgb24gdGhlCisg KiBzdWJzY3JpYmVyLiBJbiBvcmRlciB0byBkZXRlY3QgdGhlIGRlYWRsb2NrcyBhbW9uZyBsZWFk ZXIgKExBKSBhbmQgcGFyYWxsZWwKKyAqIGFwcGx5IChQQSkgd29ya2Vycywgd2UgdXNlZCBsbWdy IGxvY2tzIHdoZW4gdGhlIFBBIHdhaXRzIGZvciB0aGUgbmV4dCBzdHJlYW0KKyAqIChzZXQgb2Yg Y2hhbmdlcykgYW5kIExBIHdhaXRzIGZvciBQQSB0byBmaW5pc2ggdGhlIHRyYW5zYWN0aW9uLiBB biBhbHRlcm5hdGl2ZQorICogYXBwcm9hY2ggY291bGQgYmUgdG8gbm90IGFsbG93IHBhcmFsbGVs aXNtIHdoZW4gdGhlIHNjaGVtYSBvZiB0YWJsZXMgaXMKKyAqIGRpZmZlcmVudCBiZXR3ZWVuIHRo ZSBwdWJsaXNoZXIgYW5kIHN1YnNjcmliZXIgYnV0IHRoYXQgd291bGQgYmUgdG9vCisgKiByZXN0 cmljdGl2ZSBhbmQgd291bGQgcmVxdWlyZSB0aGUgcHVibGlzaGVyIHRvIHNlbmQgbXVjaCBtb3Jl IGluZm9ybWF0aW9uCisgKiB0aGFuIGl0IGlzIGN1cnJlbnRseSBzZW5kaW5nLgorICoKKyAqIENv bnNpZGVyIGEgY2FzZSB3aGVyZSB0aGUgc3Vic2NyaWJlZCB0YWJsZSBkb2VzIG5vdCBoYXZlIGEg dW5pcXVlIGtleSBvbiB0aGUKKyAqIHB1Ymxpc2hlciBhbmQgaGFzIGEgdW5pcXVlIGtleSBvbiB0 aGUgc3Vic2NyaWJlci4gVGhlIGRlYWRsb2NrIGNhbiBoYXBwZW4gaW4KKyAqIHRoZSBmb2xsb3dp bmcgd2F5czoKKyAqCisgKiAxKSBEZWFkbG9jayBiZXR3ZWVuIHRoZSBsZWFkZXIgYXBwbHkgd29y a2VyIGFuZCBhIHBhcmFsbGVsIGFwcGx5IHdvcmtlcgorICoKKyAqIENvbnNpZGVyIHRoYXQgdGhl IHBhcmFsbGVsIGFwcGx5IHdvcmtlciAoUEEpIGlzIGV4ZWN1dGluZyBUWC0xIGFuZCB0aGUKKyAq IGxlYWRlciBhcHBseSB3b3JrZXIgKExBKSBpcyBleGVjdXRpbmcgVFgtMiBjb25jdXJyZW50bHkg b24gdGhlIHN1YnNjcmliZXIuCisgKiBOb3csIExBIGlzIHdhaXRpbmcgZm9yIFBBIGJlY2F1c2Ug b2YgdGhlIHVuaXF1ZSBrZXkgY29uc3RyYWludCBvZiB0aGUKKyAqIHN1YnNjcmliZWQgdGFibGUg d2hpbGUgUEEgaXMgd2FpdGluZyBmb3IgTEEgdG8gc2VuZCB0aGUgbmV4dCBzdHJlYW0gb2YKKyAq IGNoYW5nZXMgb3IgdHJhbnNhY3Rpb24gZmluaXNoIGNvbW1hbmQgbWVzc2FnZS4KKyAqCisgKiBJ biBvcmRlciBmb3IgbG1nciB0byBkZXRlY3QgdGhpcywgd2UgaGF2ZSBMQSBhY3F1aXJlIGEgc2Vz c2lvbiBsb2NrIG9uIHRoZQorICogcmVtb3RlIHRyYW5zYWN0aW9uIChieSBwYV9sb2NrX3N0cmVh bSgpKSBhbmQgaGF2ZSBQQSB3YWl0IG9uIHRoZSBsb2NrIGJlZm9yZQorICogdHJ5aW5nIHRvIHJl Y2VpdmUgdGhlIG5leHQgc3RyZWFtIG9mIGNoYW5nZXMuIFNwZWNpZmljYWxseSwgTEEgd2lsbCBh Y3F1aXJlCisgKiB0aGUgbG9jayBpbiBBY2Nlc3NFeGNsdXNpdmUgbW9kZSBiZWZvcmUgc2VuZGlu ZyB0aGUgU1RSRUFNX1NUT1AgYW5kIHdpbGwKKyAqIHJlbGVhc2UgaXQgaWYgYWxyZWFkeSBhY3F1 aXJlZCBhZnRlciBzZW5kaW5nIHRoZSBTVFJFQU1fU1RBUlQsIFNUUkVBTV9BQk9SVAorICogKGZv ciB0b3BsZXZlbCB0cmFuc2FjdGlvbiksIFNUUkVBTV9QUkVQQVJFLCBhbmQgU1RSRUFNX0NPTU1J VC4gVGhlIFBBIHdpbGwKKyAqIGFjcXVpcmUgdGhlIGxvY2sgaW4gQWNjZXNzU2hhcmUgbW9kZSBh ZnRlciBwcm9jZXNzaW5nIFNUUkVBTV9TVE9QIGFuZAorICogU1RSRUFNX0FCT1JUIChmb3Igc3Vi dHJhbnNhY3Rpb24pIGFuZCB0aGVuIHJlbGVhc2UgdGhlIGxvY2sgaW1tZWRpYXRlbHkKKyAqIGFm dGVyIGFjcXVpcmluZyBpdC4KKyAqCisgKiBUaGUgbG9jayBncmFwaCBmb3IgdGhlIGFib3ZlIGV4 YW1wbGUgd2lsbCBsb29rIGFzIGZvbGxvd3M6CisgKiBMQSAod2FpdGluZyB0byBhY3F1aXJlIHRo ZSBsb2NrIG9uIHRoZSB1bmlxdWUgaW5kZXgpIC0+IFBBICh3YWl0aW5nIHRvCisgKiBhY3F1aXJl IHRoZSBzdHJlYW0gbG9jaykgLT4gTEEKKyAqCisgKiBUaGlzIHdheSwgd2hlbiBQQSBpcyB3YWl0 aW5nIGZvciBMQSBmb3IgdGhlIG5leHQgc3RyZWFtIG9mIGNoYW5nZXMsIHdlIGNhbgorICogaGF2 ZSBhIHdhaXQtZWRnZSBmcm9tIFBBIHRvIExBIGluIGxtZ3IsIHdoaWNoIHdpbGwgbWFrZSB1cyBk ZXRlY3QgdGhlCisgKiBkZWFkbG9jayBiZXR3ZWVuIExBIGFuZCBQQS4KKyAqCisgKiAyKSBEZWFk bG9jayBiZXR3ZWVuIHRoZSBsZWFkZXIgYXBwbHkgd29ya2VyIGFuZCBwYXJhbGxlbCBhcHBseSB3 b3JrZXJzCisgKgorICogVGhpcyBzY2VuYXJpbyBpcyBzaW1pbGFyIHRvIHRoZSBmaXJzdCBjYXNl IGJ1dCBUWC0xIGFuZCBUWC0yIGFyZSBleGVjdXRlZCBieQorICogdHdvIHBhcmFsbGVsIGFwcGx5 IHdvcmtlcnMgKFBBLTEgYW5kIFBBLTIgcmVzcGVjdGl2ZWx5KS4gSW4gdGhpcyBzY2VuYXJpbywK KyAqIFBBLTIgaXMgd2FpdGluZyBmb3IgUEEtMSB0byBjb21wbGV0ZSBpdHMgdHJhbnNhY3Rpb24g d2hpbGUgUEEtMSBpcyB3YWl0aW5nCisgKiBmb3Igc3Vic2VxdWVudCBpbnB1dCBmcm9tIExBLiBB bHNvLCBMQSBpcyB3YWl0aW5nIGZvciBQQS0yIHRvIGNvbXBsZXRlIGl0cworICogdHJhbnNhY3Rp b24gaW4gb3JkZXIgdG8gcHJlc2VydmUgdGhlIGNvbW1pdCBvcmRlci4gVGhlcmUgaXMgYSBkZWFk bG9jayBhbW9uZworICogdGhlIHRocmVlIHByb2Nlc3Nlcy4KKyAqCisgKiBJbiBvcmRlciBmb3Ig bG1nciB0byBkZXRlY3QgdGhpcywgd2UgaGF2ZSBQQSBhY3F1aXJlIGEgc2Vzc2lvbiBsb2NrICh0 aGlzIGlzCisgKiBhIGRpZmZlcmVudCBsb2NrIHRoYW4gcmVmZXJyZWQgaW4gdGhlIHByZXZpb3Vz IGNhc2UsIHNlZQorICogcGFfbG9ja190cmFuc2FjdGlvbigpKSBvbiB0aGUgdHJhbnNhY3Rpb24g YmVpbmcgYXBwbGllZCBhbmQgaGF2ZSBMQSB3YWl0IG9uCisgKiB0aGUgbG9jayBiZWZvcmUgcHJv Y2VlZGluZyBpbiB0aGUgdHJhbnNhY3Rpb24gZmluaXNoIGNvbW1hbmRzLiBTcGVjaWZpY2FsbHks CisgKiBQQSB3aWxsIGFjcXVpcmUgdGhpcyBsb2NrIGluIEFjY2Vzc0V4Y2x1c2l2ZSBtb2RlIGJl Zm9yZSBleGVjdXRpbmcgdGhlIGZpcnN0CisgKiBtZXNzYWdlIG9mIHRoZSB0cmFuc2FjdGlvbiBh bmQgcmVsZWFzZSBpdCBhdCB0aGUgeGFjdCBlbmQuIExBIHdpbGwgYWNxdWlyZQorICogdGhpcyBs b2NrIGluIEFjY2Vzc1NoYXJlIG1vZGUgYXQgdHJhbnNhY3Rpb24gZmluaXNoIGNvbW1hbmRzCisg KiAoU1RSRUFNX0NPTU1JVCBhbmQgU1RSRUFNX1BSRVBBUkUpIGFuZCByZWxlYXNlIGl0IGltbWVk aWF0ZWx5LgorICoKKyAqIFRoZSBsb2NrIGdyYXBoIGZvciB0aGUgYWJvdmUgZXhhbXBsZSB3aWxs IGxvb2sgYXMgZm9sbG93czoKKyAqIExBICh3YWl0aW5nIHRvIGFjcXVpcmUgdGhlIHRyYW5zYWN0 aW9uIGxvY2spIC0+IFBBLTIgKHdhaXRpbmcgdG8gYWNxdWlyZSB0aGUKKyAqIGxvY2sgZHVlIHRv IHVuaXF1ZSBpbmRleCBjb25zdHJhaW50KSAtPiBQQS0xICh3YWl0aW5nIHRvIGFjcXVpcmUgdGhl IHN0cmVhbQorICogbG9jaykgLT4gTEEKKyAqCisgKiBUaGlzIHdheSB3aGVuIExBIGlzIHdhaXRp bmcgdG8gZmluaXNoIHRoZSB0cmFuc2FjdGlvbiBlbmQgY29tbWFuZCB0byBwcmVzZXJ2ZQorICog dGhlIGNvbW1pdCBvcmRlciwgd2Ugd2lsbCBiZSBhYmxlIHRvIGRldGVjdCBkZWFkbG9jaywgaWYg YW55LgorICoKKyAqIE9uZSBtaWdodCB0aGluayB3ZSBjYW4gdXNlIFhhY3RMb2NrVGFibGVXYWl0 KCksIGJ1dCBYYWN0TG9ja1RhYmxlV2FpdCgpCisgKiBjb25zaWRlcnMgUFJFUEFSRUQgVFJBTlNB Q1RJT04gYXMgc3RpbGwgaW4gcHJvZ3Jlc3Mgd2hpY2ggbWVhbnMgdGhlIGxvY2sKKyAqIHdvbid0 IGJlIHJlbGVhc2VkIGV2ZW4gYWZ0ZXIgdGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtlciBoYXMgcHJl cGFyZWQgdGhlCisgKiB0cmFuc2FjdGlvbi4KKyAqCisgKiAzKSBEZWFkbG9jayB3aGVuIHRoZSBz aG1fbXEgYnVmZmVyIGlzIGZ1bGwKKyAqCisgKiBJbiB0aGUgcHJldmlvdXMgc2NlbmFyaW8gKGll LiBQQS0xIGFuZCBQQS0yIGFyZSBleGVjdXRpbmcgdHJhbnNhY3Rpb25zCisgKiBjb25jdXJyZW50 bHkpLCBpZiB0aGUgc2htX21xIGJ1ZmZlciBiZXR3ZWVuIExBIGFuZCBQQS0yIGlzIGZ1bGwsIExB IGhhcyB0bworICogd2FpdCB0byBzZW5kIG1lc3NhZ2VzLCBhbmQgdGhpcyB3YWl0IGRvZXNuJ3Qg YXBwZWFyIGluIGxtZ3IuCisgKgorICogVG8gYXZvaWQgdGhpcyB3YWl0LCB3ZSB1c2UgYSBub24t YmxvY2tpbmcgd3JpdGUgYW5kIHdhaXQgd2l0aCBhIHRpbWVvdXQuIElmCisgKiB0aGUgdGltZW91 dCBpcyBleGNlZWRlZCwgdGhlIExBIHdpbGwgc2VyaWFsaXplIGFsbCB0aGUgcGVuZGluZyBtZXNz YWdlcyB0bworICogYSBmaWxlIGFuZCBpbmRpY2F0ZSBQQS0yIHRoYXQgaXQgbmVlZHMgdG8gcmVh ZCB0aGF0IGZpbGUgZm9yIHRoZSByZW1haW5pbmcKKyAqIG1lc3NhZ2VzLiBUaGVuIExBIHdpbGwg c3RhcnQgd2FpdGluZyBmb3IgY29tbWl0IGFzIGluIHRoZSBwcmV2aW91cyBjYXNlCisgKiB3aGlj aCB3aWxsIGRldGVjdCBkZWFkbG9jayBpZiBhbnkuIFNlZSBwYV9zZW5kX2RhdGEoKSBhbmQKKyAq IGVudW0gVHJhbnNBcHBseUFjdGlvbi4KKyAqCisgKiA0KSBMb2NrIHR5cGVzCisgKgorICogQm90 aCB0aGUgc3RyZWFtIGxvY2sgYW5kIHRoZSB0cmFuc2FjdGlvbiBsb2NrIG1lbnRpb25lZCBhYm92 ZSBhcmUKKyAqIHNlc3Npb24tbGV2ZWwgbG9ja3MgYmVjYXVzZSBib3RoIGxvY2tzIGNvdWxkIGJl IGFjcXVpcmVkIG91dHNpZGUgdGhlCisgKiB0cmFuc2FjdGlvbiwgYW5kIHRoZSBzdHJlYW0gbG9j ayBpbiB0aGUgbGVhZGVyIG5lZWRzIHRvIHBlcnNpc3QgYWNyb3NzCisgKiB0cmFuc2FjdGlvbiBi b3VuZGFyaWVzIGkuZS4gdW50aWwgdGhlIGVuZCBvZiB0aGUgc3RyZWFtaW5nIHRyYW5zYWN0aW9u LgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNp bmNsdWRlICJsaWJwcS9wcWZvcm1hdC5oIgorI2luY2x1ZGUgImxpYnBxL3BxbXEuaCIKKyNpbmNs dWRlICJwZ3N0YXQuaCIKKyNpbmNsdWRlICJwb3N0bWFzdGVyL2ludGVycnVwdC5oIgorI2luY2x1 ZGUgInJlcGxpY2F0aW9uL2xvZ2ljYWxsYXVuY2hlci5oIgorI2luY2x1ZGUgInJlcGxpY2F0aW9u L2xvZ2ljYWx3b3JrZXIuaCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9vcmlnaW4uaCIKKyNpbmNs dWRlICJyZXBsaWNhdGlvbi93b3JrZXJfaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJzdG9yYWdlL2lw Yy5oIgorI2luY2x1ZGUgInN0b3JhZ2UvbG1nci5oIgorI2luY2x1ZGUgInRjb3AvdGNvcHByb3Qu aCIKKyNpbmNsdWRlICJ1dGlscy9pbnZhbC5oIgorI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgi CisjaW5jbHVkZSAidXRpbHMvc3lzY2FjaGUuaCIKKworI2RlZmluZSBQR19MT0dJQ0FMX0FQUExZ X1NITV9NQUdJQyAweDc4N2NhMDY3CisKKy8qCisgKiBEU00ga2V5cyBmb3IgcGFyYWxsZWwgYXBw bHkgd29ya2VyLiBVbmxpa2Ugb3RoZXIgcGFyYWxsZWwgZXhlY3V0aW9uIGNvZGUsCisgKiBzaW5j ZSB3ZSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IERTTSBrZXlzIGNvbmZsaWN0aW5nIHdpdGgg cGxhbl9ub2RlX2lkIHdlCisgKiBjYW4gdXNlIHNtYWxsIGludGVnZXJzLgorICovCisjZGVmaW5l IFBBUkFMTEVMX0FQUExZX0tFWV9TSEFSRUQJCTEKKyNkZWZpbmUgUEFSQUxMRUxfQVBQTFlfS0VZ X01RCQkJMgorI2RlZmluZSBQQVJBTExFTF9BUFBMWV9LRVlfRVJST1JfUVVFVUUJMworCisvKiBR dWV1ZSBzaXplIG9mIERTTSwgMTYgTUIgZm9yIG5vdy4gKi8KKyNkZWZpbmUgRFNNX1FVRVVFX1NJ WkUJKDE2ICogMTAyNCAqIDEwMjQpCisKKy8qCisgKiBFcnJvciBxdWV1ZSBzaXplIG9mIERTTS4g SXQgaXMgZGVzaXJhYmxlIHRvIG1ha2UgaXQgbGFyZ2UgZW5vdWdoIHRoYXQgYQorICogdHlwaWNh bCBFcnJvclJlc3BvbnNlIGNhbiBiZSBzZW50IHdpdGhvdXQgYmxvY2tpbmcuIFRoYXQgd2F5LCBh IHdvcmtlciB0aGF0CisgKiBlcnJvcnMgb3V0IGNhbiB3cml0ZSB0aGUgd2hvbGUgbWVzc2FnZSBp bnRvIHRoZSBxdWV1ZSBhbmQgdGVybWluYXRlIHdpdGhvdXQKKyAqIHdhaXRpbmcgZm9yIHRoZSB1 c2VyIGJhY2tlbmQuCisgKi8KKyNkZWZpbmUgRFNNX0VSUk9SX1FVRVVFX1NJWkUJCQkoMTYgKiAx MDI0KQorCisvKgorICogVGhlcmUgYXJlIHRocmVlIGZpZWxkcyBpbiBlYWNoIG1lc3NhZ2UgcmVj ZWl2ZWQgYnkgdGhlIHBhcmFsbGVsIGFwcGx5CisgKiB3b3JrZXI6IHN0YXJ0X2xzbiwgZW5kX2xz biBhbmQgc2VuZF90aW1lLiBCZWNhdXNlIHdlIGhhdmUgdXBkYXRlZCB0aGVzZQorICogc3RhdGlz dGljcyBpbiB0aGUgbGVhZGVyIGFwcGx5IHdvcmtlciwgd2UgY2FuIGlnbm9yZSB0aGVzZSBmaWVs ZHMgaW4gdGhlCisgKiBwYXJhbGxlbCBhcHBseSB3b3JrZXIgKHNlZSBmdW5jdGlvbiBMb2dpY2Fs UmVwQXBwbHlMb29wKS4KKyAqLworI2RlZmluZSBTSVpFX1NUQVRTX01FU1NBR0UgKDIgKiBzaXpl b2YoWExvZ1JlY1B0cikgKyBzaXplb2YoVGltZXN0YW1wVHopKQorCisvKgorICogVGhlIHR5cGUg b2Ygc2Vzc2lvbi1sZXZlbCBsb2NrIG9uIGEgdHJhbnNhY3Rpb24gYmVpbmcgYXBwbGllZCBvbiBh IGxvZ2ljYWwKKyAqIHJlcGxpY2F0aW9uIHN1YnNjcmliZXIuCisgKi8KKyNkZWZpbmUgUEFSQUxM RUxfQVBQTFlfTE9DS19TVFJFQU0JMAorI2RlZmluZSBQQVJBTExFTF9BUFBMWV9MT0NLX1hBQ1QJ MQorCisvKgorICogSGFzaCB0YWJsZSBlbnRyeSB0byBtYXAgeGlkIHRvIHRoZSBwYXJhbGxlbCBh cHBseSB3b3JrZXIgc3RhdGUuCisgKi8KK3R5cGVkZWYgc3RydWN0IFBhcmFsbGVsQXBwbHlXb3Jr ZXJFbnRyeQoreworCVRyYW5zYWN0aW9uSWQgeGlkOwkJCS8qIEhhc2gga2V5IC0tIG11c3QgYmUg Zmlyc3QgKi8KKwlQYXJhbGxlbEFwcGx5V29ya2VySW5mbyAqd2luZm87Cit9IFBhcmFsbGVsQXBw bHlXb3JrZXJFbnRyeTsKKworLyoKKyAqIEEgaGFzaCB0YWJsZSB1c2VkIHRvIGNhY2hlIHRoZSBz dGF0ZSBvZiBzdHJlYW1pbmcgdHJhbnNhY3Rpb25zIGJlaW5nIGFwcGxpZWQKKyAqIGJ5IHRoZSBw YXJhbGxlbCBhcHBseSB3b3JrZXJzLgorICovCitzdGF0aWMgSFRBQiAqUGFyYWxsZWxBcHBseVR4 bkhhc2ggPSBOVUxMOworCisvKgorKiBBIGxpc3QgKHBvb2wpIG9mIGFjdGl2ZSBwYXJhbGxlbCBh cHBseSB3b3JrZXJzLiBUaGUgaW5mb3JtYXRpb24gZm9yCisqIHRoZSBuZXcgd29ya2VyIGlzIGFk ZGVkIHRvIHRoZSBsaXN0IGFmdGVyIHN1Y2Nlc3NmdWxseSBsYXVuY2hpbmcgaXQuIFRoZQorKiBs aXN0IGVudHJ5IGlzIHJlbW92ZWQgaWYgdGhlcmUgYXJlIGFscmVhZHkgZW5vdWdoIHdvcmtlcnMg aW4gdGhlIHdvcmtlcgorKiBwb29sIGF0IHRoZSBlbmQgb2YgdGhlIHRyYW5zYWN0aW9uLiBGb3Ig bW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgd29ya2VyCisqIHBvb2wsIHNlZSBjb21tZW50cyBh dG9wIHRoaXMgZmlsZS4KKyAqLworc3RhdGljIExpc3QgKlBhcmFsbGVsQXBwbHlXb3JrZXJQb29s ID0gTklMOworCisvKgorICogSW5mb3JtYXRpb24gc2hhcmVkIGJldHdlZW4gbGVhZGVyIGFwcGx5 IHdvcmtlciBhbmQgcGFyYWxsZWwgYXBwbHkgd29ya2VyLgorICovCitQYXJhbGxlbEFwcGx5V29y a2VyU2hhcmVkICpNeVBhcmFsbGVsU2hhcmVkID0gTlVMTDsKKworLyoKKyAqIElzIHRoZXJlIGEg bWVzc2FnZSBzZW50IGJ5IGEgcGFyYWxsZWwgYXBwbHkgd29ya2VyIHRoYXQgdGhlIGxlYWRlciBh cHBseQorICogd29ya2VyIG5lZWRzIHRvIHJlY2VpdmU/CisgKi8KK3ZvbGF0aWxlIHNpZ19hdG9t aWNfdCBQYXJhbGxlbEFwcGx5TWVzc2FnZVBlbmRpbmcgPSBmYWxzZTsKKworLyoKKyAqIENhY2hl IHRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgaW5mb3JtYXRpb24gcmVxdWlyZWQgZm9yIGFwcGx5 aW5nIHRoZQorICogY3VycmVudCBzdHJlYW1pbmcgdHJhbnNhY3Rpb24uIEl0IGlzIHVzZWQgdG8g c2F2ZSB0aGUgY29zdCBvZiBzZWFyY2hpbmcgdGhlCisgKiBoYXNoIHRhYmxlIHdoZW4gYXBwbHlp bmcgdGhlIGNoYW5nZXMgYmV0d2VlbiBTVFJFQU1fU1RBUlQgYW5kIFNUUkVBTV9TVE9QLgorICov CitzdGF0aWMgUGFyYWxsZWxBcHBseVdvcmtlckluZm8gKnN0cmVhbV9hcHBseV93b3JrZXIgPSBO VUxMOworCisvKiBBIGxpc3QgdG8gbWFpbnRhaW4gc3VidHJhbnNhY3Rpb25zLCBpZiBhbnkuICov CitzdGF0aWMgTGlzdCAqc3VieGFjdGxpc3QgPSBOSUw7CisKK3N0YXRpYyB2b2lkIHBhX2ZyZWVf d29ya2VyX2luZm8oUGFyYWxsZWxBcHBseVdvcmtlckluZm8gKndpbmZvKTsKK3N0YXRpYyBQYXJh bGxlbFRyYW5zU3RhdGUgcGFfZ2V0X3hhY3Rfc3RhdGUoUGFyYWxsZWxBcHBseVdvcmtlclNoYXJl ZCAqd3NoYXJlZCk7CitzdGF0aWMgUGFydGlhbEZpbGVTZXRTdGF0ZSBwYV9nZXRfZmlsZXNldF9z dGF0ZSh2b2lkKTsKKworLyoKKyAqIFJldHVybnMgdHJ1ZSBpZiBpdCBpcyBPSyB0byBzdGFydCBh IHBhcmFsbGVsIGFwcGx5IHdvcmtlciwgZmFsc2Ugb3RoZXJ3aXNlLgorICovCitzdGF0aWMgYm9v bAorcGFfY2FuX3N0YXJ0KFRyYW5zYWN0aW9uSWQgeGlkKQoreworCUFzc2VydChUcmFuc2FjdGlv bklkSXNWYWxpZCh4aWQpKTsKKworCS8qIE9ubHkgbGVhZGVyIGFwcGx5IHdvcmtlcnMgY2FuIHN0 YXJ0IHBhcmFsbGVsIGFwcGx5IHdvcmtlcnMuICovCisJaWYgKCFhbV9sZWFkZXJfYXBwbHlfd29y a2VyKCkpCisJCXJldHVybiBmYWxzZTsKKworCS8qCisJICogSXQgaXMgZ29vZCB0byBjaGVjayBm b3IgYW55IGNoYW5nZSBpbiB0aGUgc3Vic2NyaXB0aW9uIHBhcmFtZXRlciB0bworCSAqIGF2b2lk IHRoZSBjYXNlIHdoZXJlIGZvciBhIHZlcnkgbG9uZyB0aW1lIHRoZSBjaGFuZ2UgZG9lc24ndCBn ZXQKKwkgKiByZWZsZWN0ZWQuIFRoaXMgY2FuIGhhcHBlbiB3aGVuIHRoZXJlIGlzIGEgY29uc3Rh bnQgZmxvdyBvZiBzdHJlYW1pbmcKKwkgKiB0cmFuc2FjdGlvbnMgdGhhdCBhcmUgaGFuZGxlZCBi eSBwYXJhbGxlbCBhcHBseSB3b3JrZXJzLgorCSAqCisJICogSXQgaXMgYmV0dGVyIHRvIGRvIGl0 IGJlZm9yZSB0aGUgYmVsb3cgY2hlY2tzIHNvIHRoYXQgdGhlIGxhdGVzdCB2YWx1ZXMKKwkgKiBv ZiBzdWJzY3JpcHRpb24gY2FuIGJlIHVzZWQgZm9yIHRoZSBjaGVja3MuCisJICovCisJbWF5YmVf cmVyZWFkX3N1YnNjcmlwdGlvbigpOworCisJLyoKKwkgKiBEb24ndCBzdGFydCBhIG5ldyBwYXJh bGxlbCBhcHBseSB3b3JrZXIgaWYgdGhlIHN1YnNjcmlwdGlvbiBpcyBub3QKKwkgKiB1c2luZyBw YXJhbGxlbCBzdHJlYW1pbmcgbW9kZSwgb3IgaWYgdGhlIHB1Ymxpc2hlciBkb2VzIG5vdCBzdXBw b3J0CisJICogcGFyYWxsZWwgYXBwbHkuCisJICovCisJaWYgKCFNeUxvZ2ljYWxSZXBXb3JrZXIt PnBhcmFsbGVsX2FwcGx5KQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKgorCSAqIERvbid0IHN0YXJ0 IGEgbmV3IHBhcmFsbGVsIHdvcmtlciBpZiB1c2VyIGhhcyBzZXQgc2tpcGxzbiBhcyBpdCdzCisJ ICogcG9zc2libGUgdGhhdCB0aGV5IHdhbnQgdG8gc2tpcCB0aGUgc3RyZWFtaW5nIHRyYW5zYWN0 aW9uLiBGb3IKKwkgKiBzdHJlYW1pbmcgdHJhbnNhY3Rpb25zLCB3ZSBuZWVkIHRvIHNlcmlhbGl6 ZSB0aGUgdHJhbnNhY3Rpb24gdG8gYSBmaWxlCisJICogc28gdGhhdCB3ZSBjYW4gZ2V0IHRoZSBs YXN0IExTTiBvZiB0aGUgdHJhbnNhY3Rpb24gdG8ganVkZ2Ugd2hldGhlciB0bworCSAqIHNraXAg YmVmb3JlIHN0YXJ0aW5nIHRvIGFwcGx5IHRoZSBjaGFuZ2UuCisJICovCisJaWYgKCFYTG9nUmVj UHRySXNJbnZhbGlkKE15U3Vic2NyaXB0aW9uLT5za2lwbHNuKSkKKwkJcmV0dXJuIGZhbHNlOwor CisJLyoKKwkgKiBGb3Igc3RyZWFtaW5nIHRyYW5zYWN0aW9ucyB0aGF0IGFyZSBiZWluZyBhcHBs aWVkIHVzaW5nIGEgcGFyYWxsZWwKKwkgKiBhcHBseSB3b3JrZXIsIHdlIGNhbm5vdCBkZWNpZGUg d2hldGhlciB0byBhcHBseSB0aGUgY2hhbmdlIGZvciBhCisJICogcmVsYXRpb24gdGhhdCBpcyBu b3QgaW4gdGhlIFJFQURZIHN0YXRlIChzZWUKKwkgKiBzaG91bGRfYXBwbHlfY2hhbmdlc19mb3Jf cmVsKSBhcyB3ZSB3b24ndCBrbm93IHJlbW90ZV9maW5hbF9sc24gYnkgdGhhdAorCSAqIHRpbWUu IFNvLCB3ZSBkb24ndCBzdGFydCB0aGUgbmV3IHBhcmFsbGVsIGFwcGx5IHdvcmtlciBpbiB0aGlz IGNhc2UuCisJICovCisJaWYgKCFBbGxUYWJsZXN5bmNzUmVhZHkoKSkKKwkJcmV0dXJuIGZhbHNl OworCisJcmV0dXJuIHRydWU7Cit9CisKKy8qCisgKiBTZXQgdXAgYSBkeW5hbWljIHNoYXJlZCBt ZW1vcnkgc2VnbWVudC4KKyAqCisgKiBXZSBzZXQgdXAgYSBjb250cm9sIHJlZ2lvbiB0aGF0IGNv bnRhaW5zIGEgZml4ZWQtc2l6ZSB3b3JrZXIgaW5mbworICogKFBhcmFsbGVsQXBwbHlXb3JrZXJT aGFyZWQpLCBhIG1lc3NhZ2UgcXVldWUsIGFuZCBhbiBlcnJvciBxdWV1ZS4KKyAqCisgKiBSZXR1 cm5zIHRydWUgb24gc3VjY2VzcywgZmFsc2Ugb24gZmFpbHVyZS4KKyAqLworc3RhdGljIGJvb2wK K3BhX3NldHVwX2RzbShQYXJhbGxlbEFwcGx5V29ya2VySW5mbyAqd2luZm8pCit7CisJc2htX3Rv Y19lc3RpbWF0b3IgZTsKKwlTaXplCQlzZWdzaXplOworCWRzbV9zZWdtZW50ICpzZWc7CisJc2ht X3RvYyAgICAqdG9jOworCVBhcmFsbGVsQXBwbHlXb3JrZXJTaGFyZWQgKnNoYXJlZDsKKwlzaG1f bXEJICAgKm1xOworCVNpemUJCXF1ZXVlX3NpemUgPSBEU01fUVVFVUVfU0laRTsKKwlTaXplCQll cnJvcl9xdWV1ZV9zaXplID0gRFNNX0VSUk9SX1FVRVVFX1NJWkU7CisKKwkvKgorCSAqIEVzdGlt YXRlIGhvdyBtdWNoIHNoYXJlZCBtZW1vcnkgd2UgbmVlZC4KKwkgKgorCSAqIEJlY2F1c2UgdGhl IFRPQyBtYWNoaW5lcnkgbWF5IGNob29zZSB0byBpbnNlcnQgcGFkZGluZyBvZiBvZGRseS1zaXpl ZAorCSAqIHJlcXVlc3RzLCB3ZSBtdXN0IGVzdGltYXRlIGVhY2ggY2h1bmsgc2VwYXJhdGVseS4K KwkgKgorCSAqIFdlIG5lZWQgb25lIGtleSB0byByZWdpc3RlciB0aGUgbG9jYXRpb24gb2YgdGhl IGhlYWRlciwgYW5kIHR3byBvdGhlcgorCSAqIGtleXMgdG8gdHJhY2sgdGhlIGxvY2F0aW9ucyBv ZiB0aGUgbWVzc2FnZSBxdWV1ZSBhbmQgdGhlIGVycm9yIG1lc3NhZ2UKKwkgKiBxdWV1ZS4KKwkg Ki8KKwlzaG1fdG9jX2luaXRpYWxpemVfZXN0aW1hdG9yKCZlKTsKKwlzaG1fdG9jX2VzdGltYXRl X2NodW5rKCZlLCBzaXplb2YoUGFyYWxsZWxBcHBseVdvcmtlclNoYXJlZCkpOworCXNobV90b2Nf ZXN0aW1hdGVfY2h1bmsoJmUsIHF1ZXVlX3NpemUpOworCXNobV90b2NfZXN0aW1hdGVfY2h1bmso JmUsIGVycm9yX3F1ZXVlX3NpemUpOworCisJc2htX3RvY19lc3RpbWF0ZV9rZXlzKCZlLCAzKTsK KwlzZWdzaXplID0gc2htX3RvY19lc3RpbWF0ZSgmZSk7CisKKwkvKiBDcmVhdGUgdGhlIHNoYXJl ZCBtZW1vcnkgc2VnbWVudCBhbmQgZXN0YWJsaXNoIGEgdGFibGUgb2YgY29udGVudHMuICovCisJ c2VnID0gZHNtX2NyZWF0ZShzaG1fdG9jX2VzdGltYXRlKCZlKSwgMCk7CisJaWYgKCFzZWcpCisJ CXJldHVybiBmYWxzZTsKKworCXRvYyA9IHNobV90b2NfY3JlYXRlKFBHX0xPR0lDQUxfQVBQTFlf U0hNX01BR0lDLCBkc21fc2VnbWVudF9hZGRyZXNzKHNlZyksCisJCQkJCQkgc2Vnc2l6ZSk7CisK KwkvKiBTZXQgdXAgdGhlIGhlYWRlciByZWdpb24uICovCisJc2hhcmVkID0gc2htX3RvY19hbGxv Y2F0ZSh0b2MsIHNpemVvZihQYXJhbGxlbEFwcGx5V29ya2VyU2hhcmVkKSk7CisJU3BpbkxvY2tJ bml0KCZzaGFyZWQtPm11dGV4KTsKKworCXNoYXJlZC0+eGFjdF9zdGF0ZSA9IFBBUkFMTEVMX1RS QU5TX1VOS05PV047CisJcGdfYXRvbWljX2luaXRfdTMyKCYoc2hhcmVkLT5wZW5kaW5nX3N0cmVh bV9jb3VudCksIDApOworCXNoYXJlZC0+bGFzdF9jb21taXRfZW5kID0gSW52YWxpZFhMb2dSZWNQ dHI7CisJc2hhcmVkLT5maWxlc2V0X3N0YXRlID0gRlNfRU1QVFk7CisKKwlzaG1fdG9jX2luc2Vy dCh0b2MsIFBBUkFMTEVMX0FQUExZX0tFWV9TSEFSRUQsIHNoYXJlZCk7CisKKwkvKiBTZXQgdXAg bWVzc2FnZSBxdWV1ZSBmb3IgdGhlIHdvcmtlci4gKi8KKwltcSA9IHNobV9tcV9jcmVhdGUoc2ht X3RvY19hbGxvY2F0ZSh0b2MsIHF1ZXVlX3NpemUpLCBxdWV1ZV9zaXplKTsKKwlzaG1fdG9jX2lu c2VydCh0b2MsIFBBUkFMTEVMX0FQUExZX0tFWV9NUSwgbXEpOworCXNobV9tcV9zZXRfc2VuZGVy KG1xLCBNeVByb2MpOworCisJLyogQXR0YWNoIHRoZSBxdWV1ZS4gKi8KKwl3aW5mby0+bXFfaGFu ZGxlID0gc2htX21xX2F0dGFjaChtcSwgc2VnLCBOVUxMKTsKKworCS8qIFNldCB1cCBlcnJvciBx dWV1ZSBmb3IgdGhlIHdvcmtlci4gKi8KKwltcSA9IHNobV9tcV9jcmVhdGUoc2htX3RvY19hbGxv Y2F0ZSh0b2MsIGVycm9yX3F1ZXVlX3NpemUpLAorCQkJCQkgICBlcnJvcl9xdWV1ZV9zaXplKTsK KwlzaG1fdG9jX2luc2VydCh0b2MsIFBBUkFMTEVMX0FQUExZX0tFWV9FUlJPUl9RVUVVRSwgbXEp OworCXNobV9tcV9zZXRfcmVjZWl2ZXIobXEsIE15UHJvYyk7CisKKwkvKiBBdHRhY2ggdGhlIHF1 ZXVlLiAqLworCXdpbmZvLT5lcnJvcl9tcV9oYW5kbGUgPSBzaG1fbXFfYXR0YWNoKG1xLCBzZWcs IE5VTEwpOworCisJLyogUmV0dXJuIHJlc3VsdHMgdG8gY2FsbGVyLiAqLworCXdpbmZvLT5kc21f c2VnID0gc2VnOworCXdpbmZvLT5zaGFyZWQgPSBzaGFyZWQ7CisKKwlyZXR1cm4gdHJ1ZTsKK30K KworLyoKKyAqIFRyeSB0byBnZXQgYSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgZnJvbSB0aGUgcG9v bC4gSWYgbm9uZSBpcyBhdmFpbGFibGUgdGhlbgorICogc3RhcnQgYSBuZXcgb25lLgorICovCitz dGF0aWMgUGFyYWxsZWxBcHBseVdvcmtlckluZm8gKgorcGFfbGF1bmNoX3BhcmFsbGVsX3dvcmtl cih2b2lkKQoreworCU1lbW9yeUNvbnRleHQgb2xkY29udGV4dDsKKwlib29sCQlsYXVuY2hlZDsK KwlQYXJhbGxlbEFwcGx5V29ya2VySW5mbyAqd2luZm87CisJTGlzdENlbGwgICAqbGM7CisKKwkv KiBUcnkgdG8gZ2V0IGFuIGF2YWlsYWJsZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgZnJvbSB0aGUg d29ya2VyIHBvb2wuICovCisJZm9yZWFjaChsYywgUGFyYWxsZWxBcHBseVdvcmtlclBvb2wpCisJ eworCQl3aW5mbyA9IChQYXJhbGxlbEFwcGx5V29ya2VySW5mbyAqKSBsZmlyc3QobGMpOworCisJ CWlmICghd2luZm8tPmluX3VzZSkKKwkJCXJldHVybiB3aW5mbzsKKwl9CisKKwkvKgorCSAqIFN0 YXJ0IGEgbmV3IHBhcmFsbGVsIGFwcGx5IHdvcmtlci4KKwkgKgorCSAqIFRoZSB3b3JrZXIgaW5m byBjYW4gYmUgdXNlZCBmb3IgdGhlIGxpZmV0aW1lIG9mIHRoZSB3b3JrZXIgcHJvY2Vzcywgc28K KwkgKiBjcmVhdGUgaXQgaW4gYSBwZXJtYW5lbnQgY29udGV4dC4KKwkgKi8KKwlvbGRjb250ZXh0 ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKEFwcGx5Q29udGV4dCk7CisKKwl3aW5mbyA9IChQYXJh bGxlbEFwcGx5V29ya2VySW5mbyAqKSBwYWxsb2MwKHNpemVvZihQYXJhbGxlbEFwcGx5V29ya2Vy SW5mbykpOworCisJLyogU2V0dXAgc2hhcmVkIG1lbW9yeS4gKi8KKwlpZiAoIXBhX3NldHVwX2Rz bSh3aW5mbykpCisJeworCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CisJCXBm cmVlKHdpbmZvKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJbGF1bmNoZWQgPSBsb2dpY2FscmVw X3dvcmtlcl9sYXVuY2goTXlMb2dpY2FsUmVwV29ya2VyLT5kYmlkLAorCQkJCQkJCQkJCU15U3Vi c2NyaXB0aW9uLT5vaWQsCisJCQkJCQkJCQkJTXlTdWJzY3JpcHRpb24tPm5hbWUsCisJCQkJCQkJ CQkJTXlMb2dpY2FsUmVwV29ya2VyLT51c2VyaWQsCisJCQkJCQkJCQkJSW52YWxpZE9pZCwKKwkJ CQkJCQkJCQlkc21fc2VnbWVudF9oYW5kbGUod2luZm8tPmRzbV9zZWcpKTsKKworCWlmIChsYXVu Y2hlZCkKKwl7CisJCVBhcmFsbGVsQXBwbHlXb3JrZXJQb29sID0gbGFwcGVuZChQYXJhbGxlbEFw cGx5V29ya2VyUG9vbCwgd2luZm8pOworCX0KKwllbHNlCisJeworCQlwYV9mcmVlX3dvcmtlcl9p bmZvKHdpbmZvKTsKKwkJd2luZm8gPSBOVUxMOworCX0KKworCU1lbW9yeUNvbnRleHRTd2l0Y2hU byhvbGRjb250ZXh0KTsKKworCXJldHVybiB3aW5mbzsKK30KKworLyoKKyAqIEFsbG9jYXRlIGEg cGFyYWxsZWwgYXBwbHkgd29ya2VyIHRoYXQgd2lsbCBiZSB1c2VkIGZvciB0aGUgc3BlY2lmaWVk IHhpZC4KKyAqCisgKiBXZSBmaXJzdCB0cnkgdG8gZ2V0IGFuIGF2YWlsYWJsZSB3b3JrZXIgZnJv bSB0aGUgcG9vbCwgaWYgYW55IGFuZCB0aGVuIHRyeQorICogdG8gbGF1bmNoIGEgbmV3IHdvcmtl ci4gT24gc3VjY2Vzc2Z1bCBhbGxvY2F0aW9uLCByZW1lbWJlciB0aGUgd29ya2VyCisgKiBpbmZv cm1hdGlvbiBpbiB0aGUgaGFzaCB0YWJsZSBzbyB0aGF0IHdlIGNhbiBnZXQgaXQgbGF0ZXIgZm9y IHByb2Nlc3NpbmcgdGhlCisgKiBzdHJlYW1pbmcgY2hhbmdlcy4KKyAqLwordm9pZAorcGFfYWxs b2NhdGVfd29ya2VyKFRyYW5zYWN0aW9uSWQgeGlkKQoreworCWJvb2wJCWZvdW5kOworCVBhcmFs bGVsQXBwbHlXb3JrZXJJbmZvICp3aW5mbyA9IE5VTEw7CisJUGFyYWxsZWxBcHBseVdvcmtlckVu dHJ5ICplbnRyeTsKKworCWlmICghcGFfY2FuX3N0YXJ0KHhpZCkpCisJCXJldHVybjsKKworCS8q IEZpcnN0IHRpbWUgdGhyb3VnaCwgaW5pdGlhbGl6ZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgc3Rh dGUgaGFzaHRhYmxlLiAqLworCWlmICghUGFyYWxsZWxBcHBseVR4bkhhc2gpCisJeworCQlIQVNI Q1RMCQljdGw7CisKKwkJTWVtU2V0KCZjdGwsIDAsIHNpemVvZihjdGwpKTsKKwkJY3RsLmtleXNp emUgPSBzaXplb2YoVHJhbnNhY3Rpb25JZCk7CisJCWN0bC5lbnRyeXNpemUgPSBzaXplb2YoUGFy YWxsZWxBcHBseVdvcmtlckVudHJ5KTsKKwkJY3RsLmhjeHQgPSBBcHBseUNvbnRleHQ7CisKKwkJ UGFyYWxsZWxBcHBseVR4bkhhc2ggPSBoYXNoX2NyZWF0ZSgibG9naWNhbCByZXBsaWNhdGlvbiBw YXJhbGxlbCBhcHBseSB3b3JrZXJzIGhhc2giLAorCQkJCQkJCQkJCSAgIDE2LCAmY3RsLAorCQkJ CQkJCQkJCSAgIEhBU0hfRUxFTSB8IEhBU0hfQkxPQlMgfCBIQVNIX0NPTlRFWFQpOworCX0KKwor CXdpbmZvID0gcGFfbGF1bmNoX3BhcmFsbGVsX3dvcmtlcigpOworCWlmICghd2luZm8pCisJCXJl dHVybjsKKworCS8qIENyZWF0ZSBhbiBlbnRyeSBmb3IgdGhlIHJlcXVlc3RlZCB0cmFuc2FjdGlv bi4gKi8KKwllbnRyeSA9IGhhc2hfc2VhcmNoKFBhcmFsbGVsQXBwbHlUeG5IYXNoLCAmeGlkLCBI QVNIX0VOVEVSLCAmZm91bmQpOworCWlmIChmb3VuZCkKKwkJZWxvZyhFUlJPUiwgImhhc2ggdGFi bGUgY29ycnVwdGVkIik7CisKKwkvKiBVcGRhdGUgdGhlIHRyYW5zYWN0aW9uIGluZm9ybWF0aW9u IGluIHNoYXJlZCBtZW1vcnkuICovCisJU3BpbkxvY2tBY3F1aXJlKCZ3aW5mby0+c2hhcmVkLT5t dXRleCk7CisJd2luZm8tPnNoYXJlZC0+eGFjdF9zdGF0ZSA9IFBBUkFMTEVMX1RSQU5TX1VOS05P V047CisJd2luZm8tPnNoYXJlZC0+eGlkID0geGlkOworCVNwaW5Mb2NrUmVsZWFzZSgmd2luZm8t PnNoYXJlZC0+bXV0ZXgpOworCisJd2luZm8tPmluX3VzZSA9IHRydWU7CisJd2luZm8tPnNlcmlh bGl6ZV9jaGFuZ2VzID0gZmFsc2U7CisJZW50cnktPndpbmZvID0gd2luZm87CisJZW50cnktPnhp ZCA9IHhpZDsKK30KKworLyoKKyAqIEZpbmQgdGhlIGFzc2lnbmVkIHdvcmtlciBmb3IgdGhlIGdp dmVuIHRyYW5zYWN0aW9uLCBpZiBhbnkuCisgKi8KK1BhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICoK K3BhX2ZpbmRfd29ya2VyKFRyYW5zYWN0aW9uSWQgeGlkKQoreworCWJvb2wJCWZvdW5kOworCVBh cmFsbGVsQXBwbHlXb3JrZXJFbnRyeSAqZW50cnk7CisKKwlpZiAoIVRyYW5zYWN0aW9uSWRJc1Zh bGlkKHhpZCkpCisJCXJldHVybiBOVUxMOworCisJaWYgKCFQYXJhbGxlbEFwcGx5VHhuSGFzaCkK KwkJcmV0dXJuIE5VTEw7CisKKwkvKiBSZXR1cm4gdGhlIGNhY2hlZCBwYXJhbGxlbCBhcHBseSB3 b3JrZXIgaWYgdmFsaWQuICovCisJaWYgKHN0cmVhbV9hcHBseV93b3JrZXIpCisJCXJldHVybiBz dHJlYW1fYXBwbHlfd29ya2VyOworCisJLyogRmluZCBhbiBlbnRyeSBmb3IgdGhlIHJlcXVlc3Rl ZCB0cmFuc2FjdGlvbi4gKi8KKwllbnRyeSA9IGhhc2hfc2VhcmNoKFBhcmFsbGVsQXBwbHlUeG5I YXNoLCAmeGlkLCBIQVNIX0ZJTkQsICZmb3VuZCk7CisJaWYgKGZvdW5kKQorCXsKKwkJLyogVGhl IHdvcmtlciBtdXN0IG5vdCBoYXZlIGV4aXRlZC4gICovCisJCUFzc2VydChlbnRyeS0+d2luZm8t PmluX3VzZSk7CisJCXJldHVybiBlbnRyeS0+d2luZm87CisJfQorCisJcmV0dXJuIE5VTEw7Cit9 CisKKy8qCisgKiBNYWtlcyB0aGUgd29ya2VyIGF2YWlsYWJsZSBmb3IgcmV1c2UuCisgKgorICog VGhpcyByZW1vdmVzIHRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgZW50cnkgZnJvbSB0aGUgaGFz aCB0YWJsZSBzbyB0aGF0IGl0CisgKiBjYW4ndCBiZSB1c2VkLiBJZiB0aGVyZSBhcmUgZW5vdWdo IHdvcmtlcnMgaW4gdGhlIHBvb2wsIGl0IHN0b3BzIHRoZSB3b3JrZXIKKyAqIGFuZCBmcmVlcyB0 aGUgY29ycmVzcG9uZGluZyBpbmZvLiBPdGhlcndpc2UgaXQganVzdCBtYXJrcyB0aGUgd29ya2Vy IGFzCisgKiBhdmFpbGFibGUgZm9yIHJldXNlLgorICoKKyAqIEZvciBtb3JlIGluZm9ybWF0aW9u IGFib3V0IHRoZSB3b3JrZXIgcG9vbCwgc2VlIGNvbW1lbnRzIGF0b3AgdGhpcyBmaWxlLgorICov CitzdGF0aWMgdm9pZAorcGFfZnJlZV93b3JrZXIoUGFyYWxsZWxBcHBseVdvcmtlckluZm8gKndp bmZvKQoreworCUFzc2VydCghYW1fcGFyYWxsZWxfYXBwbHlfd29ya2VyKCkpOworCUFzc2VydCh3 aW5mby0+aW5fdXNlKTsKKwlBc3NlcnQocGFfZ2V0X3hhY3Rfc3RhdGUod2luZm8tPnNoYXJlZCkg PT0gUEFSQUxMRUxfVFJBTlNfRklOSVNIRUQpOworCisJaWYgKCFoYXNoX3NlYXJjaChQYXJhbGxl bEFwcGx5VHhuSGFzaCwgJndpbmZvLT5zaGFyZWQtPnhpZCwgSEFTSF9SRU1PVkUsIE5VTEwpKQor CQllbG9nKEVSUk9SLCAiaGFzaCB0YWJsZSBjb3JydXB0ZWQiKTsKKworCS8qCisJICogU3RvcCB0 aGUgd29ya2VyIGlmIHRoZXJlIGFyZSBlbm91Z2ggd29ya2VycyBpbiB0aGUgcG9vbC4KKwkgKgor CSAqIFhYWCBBZGRpdGlvbmFsbHksIHdlIGFsc28gc3RvcCB0aGUgd29ya2VyIGlmIHRoZSBsZWFk ZXIgYXBwbHkgd29ya2VyCisJICogc2VyaWFsaXplIHBhcnQgb2YgdGhlIHRyYW5zYWN0aW9uIGRh dGEgZHVlIHRvIGEgc2VuZCB0aW1lb3V0LiBUaGlzIGlzCisJICogYmVjYXVzZSB0aGUgbWVzc2Fn ZSBjb3VsZCBiZSBwYXJ0aWFsbHkgd3JpdHRlbiB0byB0aGUgcXVldWUgYW5kIHRoZXJlCisJICog aXMgbm8gd2F5IHRvIGNsZWFuIHRoZSBxdWV1ZSBvdGhlciB0aGFuIHJlc2VuZGluZyB0aGUgbWVz c2FnZSB1bnRpbCBpdAorCSAqIHN1Y2NlZWRzLiBJbnN0ZWFkIG9mIHRyeWluZyB0byBzZW5kIHRo ZSBkYXRhIHdoaWNoIGFueXdheSB3b3VsZCBoYXZlCisJICogYmVlbiBzZXJpYWxpemVkIGFuZCB0 aGVuIGxldHRpbmcgdGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtlciBkZWFsIHdpdGgKKwkgKiB0aGUg c3B1cmlvdXMgbWVzc2FnZSwgd2Ugc3RvcCB0aGUgd29ya2VyLgorCSAqLworCWlmICh3aW5mby0+ c2VyaWFsaXplX2NoYW5nZXMgfHwKKwkJbGlzdF9sZW5ndGgoUGFyYWxsZWxBcHBseVdvcmtlclBv b2wpID4KKwkJKG1heF9wYXJhbGxlbF9hcHBseV93b3JrZXJzX3Blcl9zdWJzY3JpcHRpb24gLyAy KSkKKwl7CisJCWludAkJCXNsb3Rfbm87CisJCXVpbnQxNgkJZ2VuZXJhdGlvbjsKKworCQlTcGlu TG9ja0FjcXVpcmUoJndpbmZvLT5zaGFyZWQtPm11dGV4KTsKKwkJZ2VuZXJhdGlvbiA9IHdpbmZv LT5zaGFyZWQtPmxvZ2ljYWxyZXBfd29ya2VyX2dlbmVyYXRpb247CisJCXNsb3Rfbm8gPSB3aW5m by0+c2hhcmVkLT5sb2dpY2FscmVwX3dvcmtlcl9zbG90X25vOworCQlTcGluTG9ja1JlbGVhc2Uo JndpbmZvLT5zaGFyZWQtPm11dGV4KTsKKworCQlsb2dpY2FscmVwX3BhX3dvcmtlcl9zdG9wKHNs b3Rfbm8sIGdlbmVyYXRpb24pOworCisJCXBhX2ZyZWVfd29ya2VyX2luZm8od2luZm8pOworCisJ CXJldHVybjsKKwl9CisKKwl3aW5mby0+aW5fdXNlID0gZmFsc2U7CisJd2luZm8tPnNlcmlhbGl6 ZV9jaGFuZ2VzID0gZmFsc2U7Cit9CisKKy8qCisgKiBGcmVlIHRoZSBwYXJhbGxlbCBhcHBseSB3 b3JrZXIgaW5mb3JtYXRpb24gYW5kIHVubGluayB0aGUgZmlsZXMgd2l0aAorICogc2VyaWFsaXpl ZCBjaGFuZ2VzIGlmIGFueS4KKyAqLworc3RhdGljIHZvaWQKK3BhX2ZyZWVfd29ya2VyX2luZm8o UGFyYWxsZWxBcHBseVdvcmtlckluZm8gKndpbmZvKQoreworCUFzc2VydCh3aW5mbyk7CisKKwlp ZiAod2luZm8tPm1xX2hhbmRsZSkKKwkJc2htX21xX2RldGFjaCh3aW5mby0+bXFfaGFuZGxlKTsK KworCWlmICh3aW5mby0+ZXJyb3JfbXFfaGFuZGxlKQorCQlzaG1fbXFfZGV0YWNoKHdpbmZvLT5l cnJvcl9tcV9oYW5kbGUpOworCisJLyogVW5saW5rIHRoZSBmaWxlcyB3aXRoIHNlcmlhbGl6ZWQg Y2hhbmdlcy4gKi8KKwlpZiAod2luZm8tPnNlcmlhbGl6ZV9jaGFuZ2VzKQorCQlzdHJlYW1fY2xl YW51cF9maWxlcyhNeUxvZ2ljYWxSZXBXb3JrZXItPnN1YmlkLCB3aW5mby0+c2hhcmVkLT54aWQp OworCisJaWYgKHdpbmZvLT5kc21fc2VnKQorCQlkc21fZGV0YWNoKHdpbmZvLT5kc21fc2VnKTsK KworCS8qIFJlbW92ZSBmcm9tIHRoZSB3b3JrZXIgcG9vbC4gKi8KKwlQYXJhbGxlbEFwcGx5V29y a2VyUG9vbCA9IGxpc3RfZGVsZXRlX3B0cihQYXJhbGxlbEFwcGx5V29ya2VyUG9vbCwgd2luZm8p OworCisJcGZyZWUod2luZm8pOworfQorCisvKgorICogRGV0YWNoIHRoZSBlcnJvciBxdWV1ZSBm b3IgYWxsIHBhcmFsbGVsIGFwcGx5IHdvcmtlcnMuCisgKi8KK3ZvaWQKK3BhX2RldGFjaF9hbGxf ZXJyb3JfbXEodm9pZCkKK3sKKwlMaXN0Q2VsbCAgICpsYzsKKworCWZvcmVhY2gobGMsIFBhcmFs bGVsQXBwbHlXb3JrZXJQb29sKQorCXsKKwkJUGFyYWxsZWxBcHBseVdvcmtlckluZm8gKndpbmZv ID0gKFBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICopIGxmaXJzdChsYyk7CisKKwkJc2htX21xX2Rl dGFjaCh3aW5mby0+ZXJyb3JfbXFfaGFuZGxlKTsKKwkJd2luZm8tPmVycm9yX21xX2hhbmRsZSA9 IE5VTEw7CisJfQorfQorCisvKgorICogQ2hlY2sgaWYgdGhlcmUgYXJlIGFueSBwZW5kaW5nIHNw b29sZWQgbWVzc2FnZXMuCisgKi8KK3N0YXRpYyBib29sCitwYV9oYXNfc3Bvb2xlZF9tZXNzYWdl X3BlbmRpbmcoKQoreworCVBhcnRpYWxGaWxlU2V0U3RhdGUgZmlsZXNldF9zdGF0ZTsKKworCWZp bGVzZXRfc3RhdGUgPSBwYV9nZXRfZmlsZXNldF9zdGF0ZSgpOworCisJcmV0dXJuIChmaWxlc2V0 X3N0YXRlICE9IEZTX0VNUFRZKTsKK30KKworLyoKKyAqIFJlcGxheSB0aGUgc3Bvb2xlZCBtZXNz YWdlcyBvbmNlIHRoZSBsZWFkZXIgYXBwbHkgd29ya2VyIGhhcyBmaW5pc2hlZAorICogc2VyaWFs aXppbmcgY2hhbmdlcyB0byB0aGUgZmlsZS4KKyAqLworc3RhdGljIHZvaWQKK3BhX3Nwb29sZWRf bWVzc2FnZXModm9pZCkKK3sKKwlQYXJ0aWFsRmlsZVNldFN0YXRlIGZpbGVzZXRfc3RhdGU7CisK KwlmaWxlc2V0X3N0YXRlID0gcGFfZ2V0X2ZpbGVzZXRfc3RhdGUoKTsKKworCS8qCisJICogSWYg dGhlIGxlYWRlciBhcHBseSB3b3JrZXIgaXMgYnVzeSBzZXJpYWxpemluZyB0aGUgcGFydGlhbCBj aGFuZ2VzIHRoZW4KKwkgKiBhY3F1aXJlIHRoZSBzdHJlYW0gbG9jayBub3cgYW5kIHdhaXQgZm9y IHRoZSBsZWFkZXIgd29ya2VyIHRvIGZpbmlzaAorCSAqIHNlcmlhbGl6aW5nIHRoZSBjaGFuZ2Vz LiBPdGhlcndpc2UsIHRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgd29uJ3QgZ2V0CisJICogYSBj aGFuY2UgdG8gcmVjZWl2ZSBhIFNUUkVBTV9TVE9QIChhbmQgYWNxdWlyZSB0aGUgc3RyZWFtIGxv Y2spIHVudGlsCisJICogdGhlIGxlYWRlciBoYWQgc2VyaWFsaXplZCBhbGwgY2hhbmdlcyB3aGlj aCBjYW4gbGVhZCB0byB1bmRldGVjdGVkCisJICogZGVhZGxvY2suCisJICoKKwkgKiBOb3RlIHRo YXQgdGhlIGZpbGVzZXQgc3RhdGUgY2FuIGJlIEZTX1NFUklBTElaRV9ET05FIG9uY2UgdGhlIGxl YWRlcgorCSAqIHdvcmtlciBoYXMgZmluaXNoZWQgc2VyaWFsaXppbmcgdGhlIGNoYW5nZXMuCisJ ICovCisJaWYgKGZpbGVzZXRfc3RhdGUgPT0gRlNfU0VSSUFMSVpFX0lOX1BST0dSRVNTKQorCXsK KwkJcGFfbG9ja19zdHJlYW0oTXlQYXJhbGxlbFNoYXJlZC0+eGlkLCBBY2Nlc3NTaGFyZUxvY2sp OworCQlwYV91bmxvY2tfc3RyZWFtKE15UGFyYWxsZWxTaGFyZWQtPnhpZCwgQWNjZXNzU2hhcmVM b2NrKTsKKworCQlmaWxlc2V0X3N0YXRlID0gcGFfZ2V0X2ZpbGVzZXRfc3RhdGUoKTsKKwl9CisK KwkvKgorCSAqIFdlIGNhbm5vdCByZWFkIHRoZSBmaWxlIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBs ZWFkZXIgaGFzIHNlcmlhbGl6ZWQgYWxsCisJICogY2hhbmdlcyB0byB0aGUgZmlsZSBiZWNhdXNl IHRoZXJlIG1heSBzdGlsbCBiZSBtZXNzYWdlcyBpbiB0aGUgbWVtb3J5CisJICogcXVldWUuIFdl IHdpbGwgYXBwbHkgYWxsIHNwb29sZWQgbWVzc2FnZXMgdGhlIG5leHQgdGltZSB3ZSBjYWxsIHRo aXMKKwkgKiBmdW5jdGlvbiBhbmQgdGhhdCB3aWxsIGVuc3VyZSB0aGVyZSBhcmUgbm8gbWVzc2Fn ZXMgbGVmdCBpbiB0aGUgbWVtb3J5CisJICogcXVldWUuCisJICovCisJaWYgKGZpbGVzZXRfc3Rh dGUgPT0gRlNfU0VSSUFMSVpFX0RPTkUpCisJeworCQlwYV9zZXRfZmlsZXNldF9zdGF0ZShNeVBh cmFsbGVsU2hhcmVkLCBGU19SRUFEWSk7CisJfQorCWVsc2UgaWYgKGZpbGVzZXRfc3RhdGUgPT0g RlNfUkVBRFkpCisJeworCQlhcHBseV9zcG9vbGVkX21lc3NhZ2VzKCZNeVBhcmFsbGVsU2hhcmVk LT5maWxlc2V0LAorCQkJCQkJCSAgIE15UGFyYWxsZWxTaGFyZWQtPnhpZCwKKwkJCQkJCQkgICBJ bnZhbGlkWExvZ1JlY1B0cik7CisJCXBhX3NldF9maWxlc2V0X3N0YXRlKE15UGFyYWxsZWxTaGFy ZWQsIEZTX0VNUFRZKTsKKwl9Cit9CisKKy8qCisgKiBJbnRlcnJ1cHQgaGFuZGxlciBmb3IgbWFp biBsb29wIG9mIHBhcmFsbGVsIGFwcGx5IHdvcmtlci4KKyAqLworc3RhdGljIHZvaWQKK1Byb2Nl c3NQYXJhbGxlbEFwcGx5SW50ZXJydXB0cyh2b2lkKQoreworCUNIRUNLX0ZPUl9JTlRFUlJVUFRT KCk7CisKKwlpZiAoU2h1dGRvd25SZXF1ZXN0UGVuZGluZykKKwl7CisJCWVyZXBvcnQoTE9HLAor CQkJCShlcnJtc2coImxvZ2ljYWwgcmVwbGljYXRpb24gcGFyYWxsZWwgYXBwbHkgd29ya2VyIGZv ciBzdWJzY3JpcHRpb24gXCIlc1wiIGhhcyBmaW5pc2hlZCIsCisJCQkJCQlNeVN1YnNjcmlwdGlv bi0+bmFtZSkpKTsKKworCQlwcm9jX2V4aXQoMCk7CisJfQorCisJaWYgKENvbmZpZ1JlbG9hZFBl bmRpbmcpCisJeworCQlDb25maWdSZWxvYWRQZW5kaW5nID0gZmFsc2U7CisJCVByb2Nlc3NDb25m aWdGaWxlKFBHQ19TSUdIVVApOworCX0KK30KKworLyogUGFyYWxsZWwgYXBwbHkgd29ya2VyIG1h aW4gbG9vcC4gKi8KK3N0YXRpYyB2b2lkCitMb2dpY2FsUGFyYWxsZWxBcHBseUxvb3Aoc2htX21x X2hhbmRsZSAqbXFoKQoreworCXNobV9tcV9yZXN1bHQgc2htcV9yZXM7CisJRXJyb3JDb250ZXh0 Q2FsbGJhY2sgZXJyY2FsbGJhY2s7CisJTWVtb3J5Q29udGV4dCBvbGRjeHQgPSBDdXJyZW50TWVt b3J5Q29udGV4dDsKKworCS8qCisJICogSW5pdCB0aGUgQXBwbHlNZXNzYWdlQ29udGV4dCB3aGlj aCB3ZSBjbGVhbiB1cCBhZnRlciBlYWNoIHJlcGxpY2F0aW9uCisJICogcHJvdG9jb2wgbWVzc2Fn ZS4KKwkgKi8KKwlBcHBseU1lc3NhZ2VDb250ZXh0ID0gQWxsb2NTZXRDb250ZXh0Q3JlYXRlKEFw cGx5Q29udGV4dCwKKwkJCQkJCQkJCQkJCSJBcHBseU1lc3NhZ2VDb250ZXh0IiwKKwkJCQkJCQkJ CQkJCUFMTE9DU0VUX0RFRkFVTFRfU0laRVMpOworCisJLyoKKwkgKiBQdXNoIGFwcGx5IGVycm9y IGNvbnRleHQgY2FsbGJhY2suIEZpZWxkcyB3aWxsIGJlIGZpbGxlZCB3aGlsZSBhcHBseWluZwor CSAqIGEgY2hhbmdlLgorCSAqLworCWVycmNhbGxiYWNrLmNhbGxiYWNrID0gYXBwbHlfZXJyb3Jf Y2FsbGJhY2s7CisJZXJyY2FsbGJhY2sucHJldmlvdXMgPSBlcnJvcl9jb250ZXh0X3N0YWNrOwor CWVycm9yX2NvbnRleHRfc3RhY2sgPSAmZXJyY2FsbGJhY2s7CisKKwlmb3IgKDs7KQorCXsKKwkJ dm9pZAkgICAqZGF0YTsKKwkJU2l6ZQkJbGVuOworCisJCVByb2Nlc3NQYXJhbGxlbEFwcGx5SW50 ZXJydXB0cygpOworCisJCS8qIEVuc3VyZSB3ZSBhcmUgcmVhZGluZyB0aGUgZGF0YSBpbnRvIG91 ciBtZW1vcnkgY29udGV4dC4gKi8KKwkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKEFwcGx5TWVzc2Fn ZUNvbnRleHQpOworCisJCXNobXFfcmVzID0gc2htX21xX3JlY2VpdmUobXFoLCAmbGVuLCAmZGF0 YSwgdHJ1ZSk7CisKKwkJaWYgKHNobXFfcmVzID09IFNITV9NUV9TVUNDRVNTKQorCQl7CisJCQlT dHJpbmdJbmZvRGF0YSBzOworCQkJaW50CQkJYzsKKworCQkJaWYgKGxlbiA9PSAwKQorCQkJCWVs b2coRVJST1IsICJpbnZhbGlkIG1lc3NhZ2UgbGVuZ3RoIik7CisKKwkJCXMuY3Vyc29yID0gMDsK KwkJCXMubWF4bGVuID0gLTE7CisJCQlzLmRhdGEgPSAoY2hhciAqKSBkYXRhOworCQkJcy5sZW4g PSBsZW47CisKKwkJCS8qCisJCQkgKiBUaGUgZmlyc3QgYnl0ZSBvZiBtZXNzYWdlcyBzZW50IGZy b20gbGVhZGVyIGFwcGx5IHdvcmtlciB0bworCQkJICogcGFyYWxsZWwgYXBwbHkgd29ya2VycyBj YW4gb25seSBiZSAndycuCisJCQkgKi8KKwkJCWMgPSBwcV9nZXRtc2dieXRlKCZzKTsKKwkJCWlm IChjICE9ICd3JykKKwkJCQllbG9nKEVSUk9SLCAidW5leHBlY3RlZCBtZXNzYWdlIFwiJWNcIiIs IGMpOworCisJCQkvKgorCQkJICogSWdub3JlIHN0YXRpc3RpY3MgZmllbGRzIHRoYXQgaGF2ZSBi ZWVuIHVwZGF0ZWQgYnkgdGhlIGxlYWRlcgorCQkJICogYXBwbHkgd29ya2VyLgorCQkJICoKKwkJ CSAqIFhYWCBXZSBjYW4gYXZvaWQgc2VuZGluZyB0aGUgc3RhdGlzdGljcyBmaWVsZHMgZnJvbSB0 aGUgbGVhZGVyCisJCQkgKiBhcHBseSB3b3JrZXIgYnV0IGZvciB0aGF0LCBpdCBuZWVkcyB0byBy ZWJ1aWxkIHRoZSBlbnRpcmUKKwkJCSAqIG1lc3NhZ2UgYnkgcmVtb3ZpbmcgdGhlc2UgZmllbGRz IHdoaWNoIGNvdWxkIGJlIG1vcmUgd29yayB0aGFuCisJCQkgKiBzaW1wbHkgaWdub3JpbmcgdGhl c2UgZmllbGRzIGluIHRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIuCisJCQkgKi8KKwkJCXMuY3Vy c29yICs9IFNJWkVfU1RBVFNfTUVTU0FHRTsKKworCQkJYXBwbHlfZGlzcGF0Y2goJnMpOworCQl9 CisJCWVsc2UgaWYgKHNobXFfcmVzID09IFNITV9NUV9XT1VMRF9CTE9DSykKKwkJeworCQkJLyog UmVwbGF5IHRoZSBjaGFuZ2VzIGZyb20gdGhlIGZpbGUsIGlmIGFueS4gKi8KKwkJCWlmIChwYV9o YXNfc3Bvb2xlZF9tZXNzYWdlX3BlbmRpbmcoKSkKKwkJCXsKKwkJCQlwYV9zcG9vbGVkX21lc3Nh Z2VzKCk7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJaW50CQkJcmM7CisKKwkJCQkvKiBXYWl0 IGZvciBtb3JlIHdvcmsuICovCisJCQkJcmMgPSBXYWl0TGF0Y2goTXlMYXRjaCwKKwkJCQkJCQkg ICBXTF9MQVRDSF9TRVQgfCBXTF9USU1FT1VUIHwgV0xfRVhJVF9PTl9QTV9ERUFUSCwKKwkJCQkJ CQkgICAxMDAwTCwKKwkJCQkJCQkgICBXQUlUX0VWRU5UX0xPR0lDQUxfUEFSQUxMRUxfQVBQTFlf TUFJTik7CisKKwkJCQlpZiAocmMgJiBXTF9MQVRDSF9TRVQpCisJCQkJCVJlc2V0TGF0Y2goTXlM YXRjaCk7CisJCQl9CisJCX0KKwkJZWxzZQorCQl7CisJCQlBc3NlcnQoc2htcV9yZXMgPT0gU0hN X01RX0RFVEFDSEVEKTsKKworCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09E RV9PQkpFQ1RfTk9UX0lOX1BSRVJFUVVJU0lURV9TVEFURSksCisJCQkJCSBlcnJtc2coImxvc3Qg Y29ubmVjdGlvbiB0byB0aGUgbG9naWNhbCByZXBsaWNhdGlvbiBhcHBseSB3b3JrZXIiKSkpOwor CQl9CisKKwkJTWVtb3J5Q29udGV4dFJlc2V0KEFwcGx5TWVzc2FnZUNvbnRleHQpOworCQlNZW1v cnlDb250ZXh0U3dpdGNoVG8ob2xkY3h0KTsKKwl9CisKKwkvKiBQb3AgdGhlIGVycm9yIGNvbnRl eHQgc3RhY2suICovCisJZXJyb3JfY29udGV4dF9zdGFjayA9IGVycmNhbGxiYWNrLnByZXZpb3Vz OworCisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGN4dCk7Cit9CisKKy8qCisgKiBNYWtlIHN1 cmUgdGhlIGxlYWRlciBhcHBseSB3b3JrZXIgdHJpZXMgdG8gcmVhZCBmcm9tIG91ciBlcnJvciBx dWV1ZSBvbmUgbW9yZQorICogdGltZS4gVGhpcyBndWFyZHMgYWdhaW5zdCB0aGUgY2FzZSB3aGVy ZSB3ZSBleGl0IHVuY2xlYW5seSB3aXRob3V0IHNlbmRpbmcKKyAqIGFuIEVycm9yUmVzcG9uc2Us IGZvciBleGFtcGxlIGJlY2F1c2Ugc29tZSBjb2RlIGNhbGxzIHByb2NfZXhpdCBkaXJlY3RseS4K KyAqLworc3RhdGljIHZvaWQKK3BhX3NodXRkb3duKGludCBjb2RlLCBEYXR1bSBhcmcpCit7CisJ U2VuZFByb2NTaWduYWwoTXlMb2dpY2FsUmVwV29ya2VyLT5hcHBseV9sZWFkZXJfcGlkLAorCQkJ CSAgIFBST0NTSUdfUEFSQUxMRUxfQVBQTFlfTUVTU0FHRSwKKwkJCQkgICBJbnZhbGlkQmFja2Vu ZElkKTsKKworCWRzbV9kZXRhY2goKGRzbV9zZWdtZW50ICopIERhdHVtR2V0UG9pbnRlcihhcmcp KTsKK30KKworLyoKKyAqIFBhcmFsbGVsIGFwcGx5IHdvcmtlciBlbnRyeSBwb2ludC4KKyAqLwor dm9pZAorUGFyYWxsZWxBcHBseVdvcmtlck1haW4oRGF0dW0gbWFpbl9hcmcpCit7CisJUGFyYWxs ZWxBcHBseVdvcmtlclNoYXJlZCAqc2hhcmVkOworCWRzbV9oYW5kbGUJaGFuZGxlOworCWRzbV9z ZWdtZW50ICpzZWc7CisJc2htX3RvYyAgICAqdG9jOworCXNobV9tcQkgICAqbXE7CisJc2htX21x X2hhbmRsZSAqbXFoOworCXNobV9tcV9oYW5kbGUgKmVycm9yX21xaDsKKwlSZXBPcmlnaW5JZCBv cmlnaW5pZDsKKwlpbnQJCQl3b3JrZXJfc2xvdCA9IERhdHVtR2V0SW50MzIobWFpbl9hcmcpOwor CWNoYXIJCW9yaWdpbm5hbWVbTkFNRURBVEFMRU5dOworCisJLyogU2V0dXAgc2lnbmFsIGhhbmRs aW5nLiAqLworCXBxc2lnbmFsKFNJR0hVUCwgU2lnbmFsSGFuZGxlckZvckNvbmZpZ1JlbG9hZCk7 CisJcHFzaWduYWwoU0lHSU5ULCBTaWduYWxIYW5kbGVyRm9yU2h1dGRvd25SZXF1ZXN0KTsKKwlw cXNpZ25hbChTSUdURVJNLCBkaWUpOworCUJhY2tncm91bmRXb3JrZXJVbmJsb2NrU2lnbmFscygp OworCisJLyoKKwkgKiBBdHRhY2ggdG8gdGhlIGR5bmFtaWMgc2hhcmVkIG1lbW9yeSBzZWdtZW50 IGZvciB0aGUgcGFyYWxsZWwgYXBwbHksIGFuZAorCSAqIGZpbmQgaXRzIHRhYmxlIG9mIGNvbnRl bnRzLgorCSAqCisJICogTGlrZSBwYXJhbGxlbCBxdWVyeSwgd2UgZG9uJ3QgbmVlZCByZXNvdXJj ZSBvd25lciBieSB0aGlzIHRpbWUuIFNlZQorCSAqIFBhcmFsbGVsV29ya2VyTWFpbi4KKwkgKi8K KwltZW1jcHkoJmhhbmRsZSwgTXlCZ3dvcmtlckVudHJ5LT5iZ3dfZXh0cmEsIHNpemVvZihkc21f aGFuZGxlKSk7CisJc2VnID0gZHNtX2F0dGFjaChoYW5kbGUpOworCWlmICghc2VnKQorCQllcmVw b3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfT0JKRUNUX05PVF9JTl9QUkVSRVFVSVNJ VEVfU1RBVEUpLAorCQkJCSBlcnJtc2coInVuYWJsZSB0byBtYXAgZHluYW1pYyBzaGFyZWQgbWVt b3J5IHNlZ21lbnQiKSkpOworCisJdG9jID0gc2htX3RvY19hdHRhY2goUEdfTE9HSUNBTF9BUFBM WV9TSE1fTUFHSUMsIGRzbV9zZWdtZW50X2FkZHJlc3Moc2VnKSk7CisJaWYgKCF0b2MpCisJCWVy ZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9PQkpFQ1RfTk9UX0lOX1BSRVJFUVVJ U0lURV9TVEFURSksCisJCQkJIGVycm1zZygiYmFkIG1hZ2ljIG51bWJlciBpbiBkeW5hbWljIHNo YXJlZCBtZW1vcnkgc2VnbWVudCIpKSk7CisKKwliZWZvcmVfc2htZW1fZXhpdChwYV9zaHV0ZG93 biwgUG9pbnRlckdldERhdHVtKHNlZykpOworCisJLyogTG9vayB1cCB0aGUgc2hhcmVkIGluZm9y bWF0aW9uLiAqLworCXNoYXJlZCA9IHNobV90b2NfbG9va3VwKHRvYywgUEFSQUxMRUxfQVBQTFlf S0VZX1NIQVJFRCwgZmFsc2UpOworCU15UGFyYWxsZWxTaGFyZWQgPSBzaGFyZWQ7CisKKwkvKgor CSAqIEF0dGFjaCB0byB0aGUgbWVzc2FnZSBxdWV1ZS4KKwkgKi8KKwltcSA9IHNobV90b2NfbG9v a3VwKHRvYywgUEFSQUxMRUxfQVBQTFlfS0VZX01RLCBmYWxzZSk7CisJc2htX21xX3NldF9yZWNl aXZlcihtcSwgTXlQcm9jKTsKKwltcWggPSBzaG1fbXFfYXR0YWNoKG1xLCBzZWcsIE5VTEwpOwor CisJLyoKKwkgKiBQcmltYXJ5IGluaXRpYWxpemF0aW9uIGlzIGNvbXBsZXRlLiBOb3csIHdlIGNh biBhdHRhY2ggdG8gb3VyIHNsb3QuCisJICogVGhpcyBpcyB0byBlbnN1cmUgdGhhdCB0aGUgbGVh ZGVyIGFwcGx5IHdvcmtlciBkb2VzIG5vdCB3cml0ZSBkYXRhIHRvCisJICogdGhlIHVuaW5pdGlh bGl6ZWQgbWVtb3J5IHF1ZXVlLgorCSAqLworCWxvZ2ljYWxyZXBfd29ya2VyX2F0dGFjaCh3b3Jr ZXJfc2xvdCk7CisKKwlTcGluTG9ja0FjcXVpcmUoJk15UGFyYWxsZWxTaGFyZWQtPm11dGV4KTsK KwlNeVBhcmFsbGVsU2hhcmVkLT5sb2dpY2FscmVwX3dvcmtlcl9nZW5lcmF0aW9uID0gTXlMb2dp Y2FsUmVwV29ya2VyLT5nZW5lcmF0aW9uOworCU15UGFyYWxsZWxTaGFyZWQtPmxvZ2ljYWxyZXBf d29ya2VyX3Nsb3Rfbm8gPSB3b3JrZXJfc2xvdDsKKwlTcGluTG9ja1JlbGVhc2UoJk15UGFyYWxs ZWxTaGFyZWQtPm11dGV4KTsKKworCS8qCisJICogQXR0YWNoIHRvIHRoZSBlcnJvciBxdWV1ZS4K KwkgKi8KKwltcSA9IHNobV90b2NfbG9va3VwKHRvYywgUEFSQUxMRUxfQVBQTFlfS0VZX0VSUk9S X1FVRVVFLCBmYWxzZSk7CisJc2htX21xX3NldF9zZW5kZXIobXEsIE15UHJvYyk7CisJZXJyb3Jf bXFoID0gc2htX21xX2F0dGFjaChtcSwgc2VnLCBOVUxMKTsKKworCXBxX3JlZGlyZWN0X3RvX3No bV9tcShzZWcsIGVycm9yX21xaCk7CisJcHFfc2V0X3BhcmFsbGVsX2xlYWRlcihNeUxvZ2ljYWxS ZXBXb3JrZXItPmFwcGx5X2xlYWRlcl9waWQsCisJCQkJCQkgICBJbnZhbGlkQmFja2VuZElkKTsK KworCU15TG9naWNhbFJlcFdvcmtlci0+bGFzdF9zZW5kX3RpbWUgPSBNeUxvZ2ljYWxSZXBXb3Jr ZXItPmxhc3RfcmVjdl90aW1lID0KKwkJTXlMb2dpY2FsUmVwV29ya2VyLT5yZXBseV90aW1lID0g MDsKKworCUluaXRpYWxpemVBcHBseVdvcmtlcigpOworCisJLyogU2V0dXAgcmVwbGljYXRpb24g b3JpZ2luIHRyYWNraW5nLiAqLworCVN0YXJ0VHJhbnNhY3Rpb25Db21tYW5kKCk7CisJUmVwbGlj YXRpb25PcmlnaW5OYW1lRm9yTG9naWNhbFJlcChNeVN1YnNjcmlwdGlvbi0+b2lkLCBJbnZhbGlk T2lkLAorCQkJCQkJCQkJICAgb3JpZ2lubmFtZSwgc2l6ZW9mKG9yaWdpbm5hbWUpKTsKKwlvcmln aW5pZCA9IHJlcGxvcmlnaW5fYnlfbmFtZShvcmlnaW5uYW1lLCBmYWxzZSk7CisKKwkvKgorCSAq IFRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgZG9lc24ndCBuZWVkIHRvIG1vbm9wb2xpemUgdGhp cyByZXBsaWNhdGlvbgorCSAqIG9yaWdpbiB3aGljaCB3YXMgYWxyZWFkeSBhY3F1aXJlZCBieSBp dHMgbGVhZGVyIHByb2Nlc3MuCisJICovCisJcmVwbG9yaWdpbl9zZXNzaW9uX3NldHVwKG9yaWdp bmlkLCBNeUxvZ2ljYWxSZXBXb3JrZXItPmFwcGx5X2xlYWRlcl9waWQpOworCXJlcGxvcmlnaW5f c2Vzc2lvbl9vcmlnaW4gPSBvcmlnaW5pZDsKKwlDb21taXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsK KworCS8qCisJICogU2V0dXAgY2FsbGJhY2sgZm9yIHN5c2NhY2hlIHNvIHRoYXQgd2Uga25vdyB3 aGVuIHNvbWV0aGluZyBjaGFuZ2VzIGluCisJICogdGhlIHN1YnNjcmlwdGlvbiByZWxhdGlvbiBz dGF0ZS4KKwkgKi8KKwlDYWNoZVJlZ2lzdGVyU3lzY2FjaGVDYWxsYmFjayhTVUJTQ1JJUFRJT05S RUxNQVAsCisJCQkJCQkJCSAgaW52YWxpZGF0ZV9zeW5jaW5nX3RhYmxlX3N0YXRlcywKKwkJCQkJ CQkJICAoRGF0dW0pIDApOworCisJc2V0X2FwcGx5X2Vycm9yX2NvbnRleHRfb3JpZ2luKG9yaWdp bm5hbWUpOworCisJTG9naWNhbFBhcmFsbGVsQXBwbHlMb29wKG1xaCk7CisKKwkvKgorCSAqIFRo ZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgbXVzdCBub3QgZ2V0IGhlcmUgYmVjYXVzZSB0aGUgcGFy YWxsZWwgYXBwbHkKKwkgKiB3b3JrZXIgd2lsbCBvbmx5IHN0b3Agd2hlbiBpdCByZWNlaXZlcyBh IFNJR1RFUk0gb3IgU0lHSU5UIGZyb20gdGhlCisJICogbGVhZGVyLCBvciB3aGVuIHRoZXJlIHRo ZXJlIGlzIGFuIGVycm9yLiBOb25lIG9mIHRoZXNlIGNhc2VzIHdpbGwgYWxsb3cKKwkgKiB0aGUg Y29kZSB0byByZWFjaCBoZXJlLgorCSAqLworCUFzc2VydChmYWxzZSk7Cit9CisKKy8qCisgKiBI YW5kbGUgcmVjZWlwdCBvZiBhbiBpbnRlcnJ1cHQgaW5kaWNhdGluZyBhIHBhcmFsbGVsIGFwcGx5 IHdvcmtlciBtZXNzYWdlLgorICoKKyAqIE5vdGU6IHRoaXMgaXMgY2FsbGVkIHdpdGhpbiBhIHNp Z25hbCBoYW5kbGVyISBBbGwgd2UgY2FuIGRvIGlzIHNldCBhIGZsYWcKKyAqIHRoYXQgd2lsbCBj YXVzZSB0aGUgbmV4dCBDSEVDS19GT1JfSU5URVJSVVBUUygpIHRvIGludm9rZQorICogSGFuZGxl UGFyYWxsZWxBcHBseU1lc3NhZ2VzKCkuCisgKi8KK3ZvaWQKK0hhbmRsZVBhcmFsbGVsQXBwbHlN ZXNzYWdlSW50ZXJydXB0KHZvaWQpCit7CisJSW50ZXJydXB0UGVuZGluZyA9IHRydWU7CisJUGFy YWxsZWxBcHBseU1lc3NhZ2VQZW5kaW5nID0gdHJ1ZTsKKwlTZXRMYXRjaChNeUxhdGNoKTsKK30K KworLyoKKyAqIEhhbmRsZSBhIHNpbmdsZSBwcm90b2NvbCBtZXNzYWdlIHJlY2VpdmVkIGZyb20g YSBzaW5nbGUgcGFyYWxsZWwgYXBwbHkKKyAqIHdvcmtlci4KKyAqLworc3RhdGljIHZvaWQKK0hh bmRsZVBhcmFsbGVsQXBwbHlNZXNzYWdlKFBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICp3aW5mbywg U3RyaW5nSW5mbyBtc2cpCit7CisJY2hhcgkJbXNndHlwZTsKKworCW1zZ3R5cGUgPSBwcV9nZXRt c2dieXRlKG1zZyk7CisKKwlzd2l0Y2ggKG1zZ3R5cGUpCisJeworCQljYXNlICdFJzoJCQkJLyog RXJyb3JSZXNwb25zZSAqLworCQkJeworCQkJCUVycm9yRGF0YQllZGF0YTsKKworCQkJCS8qIFBh cnNlIEVycm9yUmVzcG9uc2UuICovCisJCQkJcHFfcGFyc2VfZXJyb3Jub3RpY2UobXNnLCAmZWRh dGEpOworCisJCQkJLyoKKwkJCQkgKiBJZiBkZXNpcmVkLCBhZGQgYSBjb250ZXh0IGxpbmUgdG8g c2hvdyB0aGF0IHRoaXMgaXMgYQorCQkJCSAqIG1lc3NhZ2UgcHJvcGFnYXRlZCBmcm9tIGEgcGFy YWxsZWwgYXBwbHkgd29ya2VyLiBPdGhlcndpc2UsCisJCQkJICogaXQgY2FuIHNvbWV0aW1lcyBi ZSBjb25mdXNpbmcgdG8gdW5kZXJzdGFuZCB3aGF0IGFjdHVhbGx5CisJCQkJICogaGFwcGVuZWQu CisJCQkJICovCisJCQkJaWYgKGVkYXRhLmNvbnRleHQpCisJCQkJCWVkYXRhLmNvbnRleHQgPSBw c3ByaW50ZigiJXNcbiVzIiwgZWRhdGEuY29udGV4dCwKKwkJCQkJCQkJCQkJIF8oImxvZ2ljYWwg cmVwbGljYXRpb24gcGFyYWxsZWwgYXBwbHkgd29ya2VyIikpOworCQkJCWVsc2UKKwkJCQkJZWRh dGEuY29udGV4dCA9IHBzdHJkdXAoXygibG9naWNhbCByZXBsaWNhdGlvbiBwYXJhbGxlbCBhcHBs eSB3b3JrZXIiKSk7CisKKwkJCQkvKgorCQkJCSAqIENvbnRleHQgYmV5b25kIHRoYXQgc2hvdWxk IHVzZSB0aGUgZXJyb3IgY29udGV4dCBjYWxsYmFja3MKKwkJCQkgKiB0aGF0IHdlcmUgaW4gZWZm ZWN0IGluIExvZ2ljYWxSZXBBcHBseUxvb3AoKS4KKwkJCQkgKi8KKwkJCQllcnJvcl9jb250ZXh0 X3N0YWNrID0gYXBwbHlfZXJyb3JfY29udGV4dF9zdGFjazsKKworCQkJCS8qCisJCQkJICogVGhl IGFjdHVhbCBlcnJvciBtdXN0IGhhdmUgYmVlbiByZXBvcnRlZCBieSB0aGUgcGFyYWxsZWwKKwkJ CQkgKiBhcHBseSB3b3JrZXIuCisJCQkJICovCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShl cnJjb2RlKEVSUkNPREVfT0JKRUNUX05PVF9JTl9QUkVSRVFVSVNJVEVfU1RBVEUpLAorCQkJCQkJ IGVycm1zZygibG9naWNhbCByZXBsaWNhdGlvbiBwYXJhbGxlbCBhcHBseSB3b3JrZXIgZXhpdGVk IGR1ZSB0byBlcnJvciIpLAorCQkJCQkJIGVycmNvbnRleHQoIiVzIiwgZWRhdGEuY29udGV4dCkp KTsKKwkJCX0KKworCQkJLyoKKwkJCSAqIERvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcgYWJvdXQg Tm90aWNlUmVzcG9uc2UgYW5kCisJCQkgKiBOb3RpZnlSZXNwb25zZSBhcyB0aGUgbG9naWNhbCBy ZXBsaWNhdGlvbiB3b3JrZXIgZG9lc24ndCBuZWVkCisJCQkgKiB0byBzZW5kIG1lc3NhZ2VzIHRv IHRoZSBjbGllbnQuCisJCQkgKi8KKwkJY2FzZSAnTic6CisJCWNhc2UgJ0EnOgorCQkJYnJlYWs7 CisKKwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQgbWVzc2FnZSB0eXBl IHJlY2VpdmVkIGZyb20gbG9naWNhbCByZXBsaWNhdGlvbiBwYXJhbGxlbCBhcHBseSB3b3JrZXI6 ICVjIChtZXNzYWdlIGxlbmd0aCAlZCBieXRlcykiLAorCQkJCSBtc2d0eXBlLCBtc2ctPmxlbik7 CisJfQorfQorCisvKgorICogSGFuZGxlIGFueSBxdWV1ZWQgcHJvdG9jb2wgbWVzc2FnZXMgcmVj ZWl2ZWQgZnJvbSBwYXJhbGxlbCBhcHBseSB3b3JrZXJzLgorICovCit2b2lkCitIYW5kbGVQYXJh bGxlbEFwcGx5TWVzc2FnZXModm9pZCkKK3sKKwlMaXN0Q2VsbCAgICpsYzsKKwlNZW1vcnlDb250 ZXh0IG9sZGNvbnRleHQ7CisKKwlzdGF0aWMgTWVtb3J5Q29udGV4dCBocGFtX2NvbnRleHQgPSBO VUxMOworCisJLyoKKwkgKiBUaGlzIGlzIGludm9rZWQgZnJvbSBQcm9jZXNzSW50ZXJydXB0cygp LCBhbmQgc2luY2Ugc29tZSBvZiB0aGUKKwkgKiBmdW5jdGlvbnMgaXQgY2FsbHMgY29udGFpbiBD SEVDS19GT1JfSU5URVJSVVBUUygpLCB0aGVyZSBpcyBhIHBvdGVudGlhbAorCSAqIGZvciByZWN1 cnNpdmUgY2FsbHMgaWYgbW9yZSBzaWduYWxzIGFyZSByZWNlaXZlZCB3aGlsZSB0aGlzIHJ1bnMu IEl0J3MKKwkgKiB1bmNsZWFyIHRoYXQgcmVjdXJzaXZlIGVudHJ5IHdvdWxkIGJlIHNhZmUsIGFu ZCBpdCBkb2Vzbid0IHNlZW0gdXNlZnVsCisJICogZXZlbiBpZiBpdCBpcyBzYWZlLCBzbyBsZXQn cyBibG9jayBpbnRlcnJ1cHRzIHVudGlsIGRvbmUuCisJICovCisJSE9MRF9JTlRFUlJVUFRTKCk7 CisKKwkvKgorCSAqIE1vcmVvdmVyLCBDdXJyZW50TWVtb3J5Q29udGV4dCBtaWdodCBiZSBwb2lu dGluZyBhbG1vc3QgYW55d2hlcmUuIFdlCisJICogZG9uJ3Qgd2FudCB0byByaXNrIGxlYWtpbmcg ZGF0YSBpbnRvIGxvbmctbGl2ZWQgY29udGV4dHMsIHNvIGxldCdzIGRvCisJICogb3VyIHdvcmsg aGVyZSBpbiBhIHByaXZhdGUgY29udGV4dCB0aGF0IHdlIGNhbiByZXNldCBvbiBlYWNoIHVzZS4K KwkgKi8KKwlpZiAoIWhwYW1fY29udGV4dCkJCQkvKiBmaXJzdCB0aW1lIHRocm91Z2g/ICovCisJ CWhwYW1fY29udGV4dCA9IEFsbG9jU2V0Q29udGV4dENyZWF0ZShUb3BNZW1vcnlDb250ZXh0LAor CQkJCQkJCQkJCQkgIkhhbmRsZVBhcmFsbGVsQXBwbHlNZXNzYWdlcyIsCisJCQkJCQkJCQkJCSBB TExPQ1NFVF9ERUZBVUxUX1NJWkVTKTsKKwllbHNlCisJCU1lbW9yeUNvbnRleHRSZXNldChocGFt X2NvbnRleHQpOworCisJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhocGFtX2Nv bnRleHQpOworCisJUGFyYWxsZWxBcHBseU1lc3NhZ2VQZW5kaW5nID0gZmFsc2U7CisKKwlmb3Jl YWNoKGxjLCBQYXJhbGxlbEFwcGx5V29ya2VyUG9vbCkKKwl7CisJCXNobV9tcV9yZXN1bHQgcmVz OworCQlTaXplCQluYnl0ZXM7CisJCXZvaWQJICAgKmRhdGE7CisJCVBhcmFsbGVsQXBwbHlXb3Jr ZXJJbmZvICp3aW5mbyA9IChQYXJhbGxlbEFwcGx5V29ya2VySW5mbyAqKSBsZmlyc3QobGMpOwor CisJCS8qCisJCSAqIFRoZSBsZWFkZXIgd2lsbCBkZXRhY2ggZnJvbSB0aGUgZXJyb3IgcXVldWUg YW5kIHNldCBpdCB0byBOVUxMCisJCSAqIGJlZm9yZSBwcmVwYXJpbmcgdG8gc3RvcCBhbGwgcGFy YWxsZWwgYXBwbHkgd29ya2Vycywgc28gd2UgZG9uJ3QKKwkJICogbmVlZCB0byBoYW5kbGUgZXJy b3IgbWVzc2FnZXMgYW55bW9yZS4gU2VlCisJCSAqIGxvZ2ljYWxyZXBfd29ya2VyX2RldGFjaC4K KwkJICovCisJCWlmICghd2luZm8tPmVycm9yX21xX2hhbmRsZSkKKwkJCWNvbnRpbnVlOworCisJ CXJlcyA9IHNobV9tcV9yZWNlaXZlKHdpbmZvLT5lcnJvcl9tcV9oYW5kbGUsICZuYnl0ZXMsICZk YXRhLCB0cnVlKTsKKworCQlpZiAocmVzID09IFNITV9NUV9XT1VMRF9CTE9DSykKKwkJCWNvbnRp bnVlOworCQllbHNlIGlmIChyZXMgPT0gU0hNX01RX1NVQ0NFU1MpCisJCXsKKwkJCVN0cmluZ0lu Zm9EYXRhIG1zZzsKKworCQkJaW5pdFN0cmluZ0luZm8oJm1zZyk7CisJCQlhcHBlbmRCaW5hcnlT dHJpbmdJbmZvKCZtc2csIGRhdGEsIG5ieXRlcyk7CisJCQlIYW5kbGVQYXJhbGxlbEFwcGx5TWVz c2FnZSh3aW5mbywgJm1zZyk7CisJCQlwZnJlZShtc2cuZGF0YSk7CisJCX0KKwkJZWxzZQorCQkJ ZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9PQkpFQ1RfTk9UX0lOX1BSRVJF UVVJU0lURV9TVEFURSksCisJCQkJCSBlcnJtc2coImxvc3QgY29ubmVjdGlvbiB0byB0aGUgbG9n aWNhbCByZXBsaWNhdGlvbiBwYXJhbGxlbCBhcHBseSB3b3JrZXIiKSkpOworCX0KKworCU1lbW9y eUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKKworCS8qIE1pZ2h0IGFzIHdlbGwgY2xlYXIg dGhlIGNvbnRleHQgb24gb3VyIHdheSBvdXQgKi8KKwlNZW1vcnlDb250ZXh0UmVzZXQoaHBhbV9j b250ZXh0KTsKKworCVJFU1VNRV9JTlRFUlJVUFRTKCk7Cit9CisKKy8qCisgKiBTZW5kIHRoZSBk YXRhIHRvIHRoZSBzcGVjaWZpZWQgcGFyYWxsZWwgYXBwbHkgd29ya2VyIHZpYSBzaGFyZWQtbWVt b3J5CisgKiBxdWV1ZS4KKyAqCisgKiBSZXR1cm4gZmFsc2UgaWYgdGhlIGF0dGVtcHQgdG8gc2Vu ZCBkYXRhIHZpYSBzaGFyZWQgbWVtb3J5IHRpbWVzIG91dCwgdHJ1ZQorICogb3RoZXJ3aXNlLgor ICovCitib29sCitwYV9zZW5kX2RhdGEoUGFyYWxsZWxBcHBseVdvcmtlckluZm8gKndpbmZvLCBT aXplIG5ieXRlcywgY29uc3Qgdm9pZCAqZGF0YSkKK3sKKwlpbnQJCQlyYzsKKwlzaG1fbXFfcmVz dWx0IHJlc3VsdDsKKwlUaW1lc3RhbXBUeiBzdGFydFRpbWUgPSAwOworCisJQXNzZXJ0KCFJc1Ry YW5zYWN0aW9uU3RhdGUoKSk7CisJQXNzZXJ0KCF3aW5mby0+c2VyaWFsaXplX2NoYW5nZXMpOwor CisvKgorICogVGhpcyB0aW1lb3V0IGlzIGEgYml0IGFyYml0cmFyeSBidXQgdGVzdGluZyByZXZl YWxlZCB0aGF0IGl0IGlzIHN1ZmZpY2llbnQKKyAqIHRvIHNlbmQgdGhlIG1lc3NhZ2UgdW5sZXNz IHRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgaXMgd2FpdGluZyBvbiBzb21lCisgKiBsb2NrIG9y IHRoZXJlIGlzIGEgc2VyaW91cyByZXNvdXJjZSBjcnVuY2guIFNlZSB0aGUgY29tbWVudHMgYXRv cCB0aGlzIGZpbGUKKyAqIHRvIGtub3cgd2h5IHdlIGFyZSB1c2luZyBhIG5vbi1ibG9ja2luZyB3 YXkgdG8gc2VuZCB0aGUgbWVzc2FnZS4KKyAqLworI2RlZmluZSBTSE1fU0VORF9SRVRSWV9JTlRF UlZBTF9NUyAxMDAwCisjZGVmaW5lIFNITV9TRU5EX1RJTUVPVVRfTVMJCSgxMDAwMCAtIFNITV9T RU5EX1JFVFJZX0lOVEVSVkFMX01TKQorCisJZm9yICg7OykKKwl7CisJCXJlc3VsdCA9IHNobV9t cV9zZW5kKHdpbmZvLT5tcV9oYW5kbGUsIG5ieXRlcywgZGF0YSwgdHJ1ZSwgdHJ1ZSk7CisKKwkJ aWYgKHJlc3VsdCA9PSBTSE1fTVFfU1VDQ0VTUykKKwkJCXJldHVybiB0cnVlOworCQllbHNlIGlm IChyZXN1bHQgPT0gU0hNX01RX0RFVEFDSEVEKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVy cmNvZGUoRVJSQ09ERV9PQkpFQ1RfTk9UX0lOX1BSRVJFUVVJU0lURV9TVEFURSksCisJCQkJCSBl cnJtc2coImNvdWxkIG5vdCBzZW5kIGRhdGEgdG8gc2hhcmVkLW1lbW9yeSBxdWV1ZSIpKSk7CisK KwkJQXNzZXJ0KHJlc3VsdCA9PSBTSE1fTVFfV09VTERfQkxPQ0spOworCisJCS8qIFdhaXQgYmVm b3JlIHJldHJ5aW5nLiAqLworCQlyYyA9IFdhaXRMYXRjaChNeUxhdGNoLAorCQkJCQkgICBXTF9M QVRDSF9TRVQgfCBXTF9USU1FT1VUIHwgV0xfRVhJVF9PTl9QTV9ERUFUSCwKKwkJCQkJICAgU0hN X1NFTkRfUkVUUllfSU5URVJWQUxfTVMsCisJCQkJCSAgIFdBSVRfRVZFTlRfTE9HSUNBTF9QQVJB TExFTF9BUFBMWV9TVEFURV9DSEFOR0UpOworCisJCWlmIChyYyAmIFdMX0xBVENIX1NFVCkKKwkJ eworCQkJUmVzZXRMYXRjaChNeUxhdGNoKTsKKwkJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CisJ CX0KKworCQlpZiAoc3RhcnRUaW1lID09IDApCisJCQlzdGFydFRpbWUgPSBHZXRDdXJyZW50VGlt ZXN0YW1wKCk7CisJCWVsc2UgaWYgKFRpbWVzdGFtcERpZmZlcmVuY2VFeGNlZWRzKHN0YXJ0VGlt ZSwgR2V0Q3VycmVudFRpbWVzdGFtcCgpLAorCQkJCQkJCQkJCQlTSE1fU0VORF9USU1FT1VUX01T KSkKKwkJeworCQkJZXJlcG9ydChMT0csCisJCQkJCShlcnJtc2coImxvZ2ljYWwgcmVwbGljYXRp b24gYXBwbHkgd29ya2VyIHdpbGwgc2VyaWFsaXplIHRoZSByZW1haW5pbmcgY2hhbmdlcyBvZiBy ZW1vdGUgdHJhbnNhY3Rpb24gJXUgdG8gYSBmaWxlIiwKKwkJCQkJCQl3aW5mby0+c2hhcmVkLT54 aWQpKSk7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwl9Cit9CisKKy8qCisgKiBTd2l0Y2ggdG8g UEFSVElBTF9TRVJJQUxJWkUgbW9kZSBmb3IgdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24gLS0gdGhp cyBtZWFucworICogdGhhdCB0aGUgY3VycmVudCBkYXRhIGFuZCBhbnkgc3Vic2VxdWVudCBkYXRh IGZvciB0aGlzIHRyYW5zYWN0aW9uIHdpbGwgYmUKKyAqIHNlcmlhbGl6ZWQgdG8gYSBmaWxlLiBU aGlzIGlzIGRvbmUgdG8gcHJldmVudCBwb3NzaWJsZSBkZWFkbG9ja3Mgd2l0aAorICogYW5vdGhl ciBwYXJhbGxlbCBhcHBseSB3b3JrZXIgKHJlZmVyIHRvIHRoZSBjb21tZW50cyBhdG9wIHRoaXMg ZmlsZSkuCisgKi8KK3ZvaWQKK3BhX3N3aXRjaF90b19wYXJ0aWFsX3NlcmlhbGl6ZShQYXJhbGxl bEFwcGx5V29ya2VySW5mbyAqd2luZm8sCisJCQkJCQkJICAgYm9vbCBzdHJlYW1fbG9ja2VkKQor eworCS8qCisJICogVGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtlciBjb3VsZCBiZSBzdHVjayBmb3Ig c29tZSByZWFzb24gKHNheSB3YWl0aW5nCisJICogb24gc29tZSBsb2NrIGJ5IG90aGVyIGJhY2tl bmQpLCBzbyBzdG9wIHRyeWluZyB0byBzZW5kIGRhdGEgZGlyZWN0bHkgdG8KKwkgKiBpdCBhbmQg c3RhcnQgc2VyaWFsaXppbmcgZGF0YSB0byB0aGUgZmlsZSBpbnN0ZWFkLgorCSAqLworCXdpbmZv LT5zZXJpYWxpemVfY2hhbmdlcyA9IHRydWU7CisKKwkvKiBJbml0aWFsaXplIHRoZSBzdHJlYW0g ZmlsZXNldC4gKi8KKwlzdHJlYW1fc3RhcnRfaW50ZXJuYWwod2luZm8tPnNoYXJlZC0+eGlkLCB0 cnVlKTsKKworCS8qCisJICogQWNxdWlyZXMgdGhlIHN0cmVhbSBsb2NrIGlmIG5vdCBhbHJlYWR5 IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBwYXJhbGxlbAorCSAqIGFwcGx5IHdvcmtlciB3aWxsIHdh aXQgZm9yIHRoZSBsZWFkZXIgdG8gcmVsZWFzZSB0aGUgc3RyZWFtIGxvY2sgdW50aWwKKwkgKiB0 aGUgZW5kIG9mIHRoZSB0cmFuc2FjdGlvbi4KKwkgKi8KKwlpZiAoIXN0cmVhbV9sb2NrZWQpCisJ CXBhX2xvY2tfc3RyZWFtKHdpbmZvLT5zaGFyZWQtPnhpZCwgQWNjZXNzRXhjbHVzaXZlTG9jayk7 CisKKwlwYV9zZXRfZmlsZXNldF9zdGF0ZSh3aW5mby0+c2hhcmVkLCBGU19TRVJJQUxJWkVfSU5f UFJPR1JFU1MpOworfQorCisvKgorICogV2FpdCB1bnRpbCB0aGUgcGFyYWxsZWwgYXBwbHkgd29y a2VyJ3MgdHJhbnNhY3Rpb24gc3RhdGUgaGFzIHJlYWNoZWQgb3IKKyAqIGV4Y2VlZGVkIHRoZSBn aXZlbiB4YWN0X3N0YXRlLgorICovCitzdGF0aWMgdm9pZAorcGFfd2FpdF9mb3JfeGFjdF9zdGF0 ZShQYXJhbGxlbEFwcGx5V29ya2VySW5mbyAqd2luZm8sCisJCQkJCSAgIFBhcmFsbGVsVHJhbnNT dGF0ZSB4YWN0X3N0YXRlKQoreworCWZvciAoOzspCisJeworCQkvKgorCQkgKiBTdG9wIGlmIHRo ZSB0cmFuc2FjdGlvbiBzdGF0ZSBoYXMgcmVhY2hlZCBvciBleGNlZWRlZCB0aGUgZ2l2ZW4KKwkJ ICogeGFjdF9zdGF0ZS4KKwkJICovCisJCWlmIChwYV9nZXRfeGFjdF9zdGF0ZSh3aW5mby0+c2hh cmVkKSA+PSB4YWN0X3N0YXRlKQorCQkJYnJlYWs7CisKKwkJLyogV2FpdCB0byBiZSBzaWduYWxs ZWQuICovCisJCSh2b2lkKSBXYWl0TGF0Y2goTXlMYXRjaCwKKwkJCQkJCSBXTF9MQVRDSF9TRVQg fCBXTF9USU1FT1VUIHwgV0xfRVhJVF9PTl9QTV9ERUFUSCwKKwkJCQkJCSAxMEwsCisJCQkJCQkg V0FJVF9FVkVOVF9MT0dJQ0FMX1BBUkFMTEVMX0FQUExZX1NUQVRFX0NIQU5HRSk7CisKKwkJLyog UmVzZXQgdGhlIGxhdGNoIHNvIHdlIGRvbid0IHNwaW4uICovCisJCVJlc2V0TGF0Y2goTXlMYXRj aCk7CisKKwkJLyogQW4gaW50ZXJydXB0IG1heSBoYXZlIG9jY3VycmVkIHdoaWxlIHdlIHdlcmUg d2FpdGluZy4gKi8KKwkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKKwl9Cit9CisKKy8qCisgKiBX YWl0IHVudGlsIHRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIncyB0cmFuc2FjdGlvbiBmaW5pc2hl cy4KKyAqLworc3RhdGljIHZvaWQKK3BhX3dhaXRfZm9yX3hhY3RfZmluaXNoKFBhcmFsbGVsQXBw bHlXb3JrZXJJbmZvICp3aW5mbykKK3sKKwkvKgorCSAqIFdhaXQgdW50aWwgdGhlIHBhcmFsbGVs IGFwcGx5IHdvcmtlciBzZXQgdGhlIHN0YXRlIHRvCisJICogUEFSQUxMRUxfVFJBTlNfU1RBUlRF RCB3aGljaCBtZWFucyBpdCBoYXMgYWNxdWlyZWQgdGhlIHRyYW5zYWN0aW9uCisJICogbG9jay4g VGhpcyBpcyB0byBwcmV2ZW50IGxlYWRlciBhcHBseSB3b3JrZXIgZnJvbSBhY3F1aXJpbmcgdGhl CisJICogdHJhbnNhY3Rpb24gbG9jayBlYXJsaWVyIHRoYW4gdGhlIHBhcmFsbGVsIGFwcGx5IHdv cmtlci4KKwkgKi8KKwlwYV93YWl0X2Zvcl94YWN0X3N0YXRlKHdpbmZvLCBQQVJBTExFTF9UUkFO U19TVEFSVEVEKTsKKworCS8qCisJICogV2FpdCBmb3IgdGhlIHRyYW5zYWN0aW9uIGxvY2sgdG8g YmUgcmVsZWFzZWQuIFRoaXMgaXMgcmVxdWlyZWQgdG8KKwkgKiBkZXRlY3QgZGVhZGxvY2sgYW1v bmcgbGVhZGVyIGFuZCBwYXJhbGxlbCBhcHBseSB3b3JrZXJzLiBSZWZlciB0byB0aGUKKwkgKiBj b21tZW50cyBhdG9wIHRoaXMgZmlsZS4KKwkgKi8KKwlwYV9sb2NrX3RyYW5zYWN0aW9uKHdpbmZv LT5zaGFyZWQtPnhpZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlwYV91bmxvY2tfdHJhbnNhY3Rpb24o d2luZm8tPnNoYXJlZC0+eGlkLCBBY2Nlc3NTaGFyZUxvY2spOworCisJLyoKKwkgKiBDaGVjayBp ZiB0aGUgc3RhdGUgYmVjb21lcyBQQVJBTExFTF9UUkFOU19GSU5JU0hFRCBpbiBjYXNlIHRoZSBw YXJhbGxlbAorCSAqIGFwcGx5IHdvcmtlciBmYWlsZWQgd2hpbGUgYXBwbHlpbmcgY2hhbmdlcyBj YXVzaW5nIHRoZSBsb2NrIHRvIGJlCisJICogcmVsZWFzZWQuCisJICovCisJaWYgKHBhX2dldF94 YWN0X3N0YXRlKHdpbmZvLT5zaGFyZWQpICE9IFBBUkFMTEVMX1RSQU5TX0ZJTklTSEVEKQorCQll cmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfT0JKRUNUX05PVF9JTl9QUkVSRVFV SVNJVEVfU1RBVEUpLAorCQkJCSBlcnJtc2coImxvc3QgY29ubmVjdGlvbiB0byB0aGUgbG9naWNh bCByZXBsaWNhdGlvbiBwYXJhbGxlbCBhcHBseSB3b3JrZXIiKSkpOworfQorCisvKgorICogU2V0 IHRoZSB0cmFuc2FjdGlvbiBzdGF0ZSBmb3IgYSBnaXZlbiBwYXJhbGxlbCBhcHBseSB3b3JrZXIu CisgKi8KK3ZvaWQKK3BhX3NldF94YWN0X3N0YXRlKFBhcmFsbGVsQXBwbHlXb3JrZXJTaGFyZWQg KndzaGFyZWQsCisJCQkJICBQYXJhbGxlbFRyYW5zU3RhdGUgeGFjdF9zdGF0ZSkKK3sKKwlTcGlu TG9ja0FjcXVpcmUoJndzaGFyZWQtPm11dGV4KTsKKwl3c2hhcmVkLT54YWN0X3N0YXRlID0geGFj dF9zdGF0ZTsKKwlTcGluTG9ja1JlbGVhc2UoJndzaGFyZWQtPm11dGV4KTsKK30KKworLyoKKyAq IEdldCB0aGUgdHJhbnNhY3Rpb24gc3RhdGUgZm9yIGEgZ2l2ZW4gcGFyYWxsZWwgYXBwbHkgd29y a2VyLgorICovCitzdGF0aWMgUGFyYWxsZWxUcmFuc1N0YXRlCitwYV9nZXRfeGFjdF9zdGF0ZShQ YXJhbGxlbEFwcGx5V29ya2VyU2hhcmVkICp3c2hhcmVkKQoreworCVBhcmFsbGVsVHJhbnNTdGF0 ZSB4YWN0X3N0YXRlOworCisJU3BpbkxvY2tBY3F1aXJlKCZ3c2hhcmVkLT5tdXRleCk7CisJeGFj dF9zdGF0ZSA9IHdzaGFyZWQtPnhhY3Rfc3RhdGU7CisJU3BpbkxvY2tSZWxlYXNlKCZ3c2hhcmVk LT5tdXRleCk7CisKKwlyZXR1cm4geGFjdF9zdGF0ZTsKK30KKworLyoKKyAqIENhY2hlIHRoZSBw YXJhbGxlbCBhcHBseSB3b3JrZXIgaW5mb3JtYXRpb24uCisgKi8KK3ZvaWQKK3BhX3NldF9zdHJl YW1fYXBwbHlfd29ya2VyKFBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICp3aW5mbykKK3sKKwlzdHJl YW1fYXBwbHlfd29ya2VyID0gd2luZm87Cit9CisKKy8qCisgKiBGb3JtIGEgdW5pcXVlIHNhdmVw b2ludCBuYW1lIGZvciB0aGUgc3RyZWFtaW5nIHRyYW5zYWN0aW9uLgorICoKKyAqIE5vdGUgdGhh dCBkaWZmZXJlbnQgc3Vic2NyaXB0aW9ucyBmb3IgcHVibGljYXRpb25zIG9uIGRpZmZlcmVudCBu b2RlcyBjYW4KKyAqIHJlY2VpdmUgc2FtZSByZW1vdGUgeGlkLCBzbyB3ZSBuZWVkIHRvIHVzZSBz dWJzY3JpcHRpb24gaWQgYWxvbmcgd2l0aCBpdC4KKyAqCisgKiBSZXR1cm4gdGhlIG5hbWUgaW4g dGhlIHN1cHBsaWVkIGJ1ZmZlci4KKyAqLworc3RhdGljIHZvaWQKK3BhX3NhdmVwb2ludF9uYW1l KE9pZCBzdWJvaWQsIFRyYW5zYWN0aW9uSWQgeGlkLCBjaGFyICpzcG5hbWUsIFNpemUgc3pzcCkK K3sKKwlzbnByaW50ZihzcG5hbWUsIHN6c3AsICJwZ19zcF8ldV8ldSIsIHN1Ym9pZCwgeGlkKTsK K30KKworLyoKKyAqIERlZmluZSBhIHNhdmVwb2ludCBmb3IgYSBzdWJ4YWN0IGluIHBhcmFsbGVs IGFwcGx5IHdvcmtlciBpZiBuZWVkZWQuCisgKgorICogVGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtl ciBjYW4gZmlndXJlIG91dCBpZiBhIG5ldyBzdWJ0cmFuc2FjdGlvbiB3YXMKKyAqIHN0YXJ0ZWQg YnkgY2hlY2tpbmcgaWYgdGhlIG5ldyBjaGFuZ2UgYXJyaXZlZCB3aXRoIGEgZGlmZmVyZW50IHhp ZC4gSW4gdGhhdAorICogY2FzZSBkZWZpbmUgYSBuYW1lZCBzYXZlcG9pbnQsIHNvIHRoYXQgd2Ug YXJlIGFibGUgdG8gcm9sbGJhY2sgdG8gaXQKKyAqIGlmIHJlcXVpcmVkLgorICovCit2b2lkCitw YV9zdGFydF9zdWJ0cmFucyhUcmFuc2FjdGlvbklkIGN1cnJlbnRfeGlkLCBUcmFuc2FjdGlvbklk IHRvcF94aWQpCit7CisJaWYgKGN1cnJlbnRfeGlkICE9IHRvcF94aWQgJiYKKwkJIWxpc3RfbWVt YmVyX3hpZChzdWJ4YWN0bGlzdCwgY3VycmVudF94aWQpKQorCXsKKwkJTWVtb3J5Q29udGV4dCBv bGRjdHg7CisJCWNoYXIJCXNwbmFtZVtOQU1FREFUQUxFTl07CisKKwkJcGFfc2F2ZXBvaW50X25h bWUoTXlTdWJzY3JpcHRpb24tPm9pZCwgY3VycmVudF94aWQsCisJCQkJCQkgIHNwbmFtZSwgc2l6 ZW9mKHNwbmFtZSkpOworCisJCWVsb2coREVCVUcxLCAiZGVmaW5pbmcgc2F2ZXBvaW50ICVzIGlu IGxvZ2ljYWwgcmVwbGljYXRpb24gcGFyYWxsZWwgYXBwbHkgd29ya2VyIiwgc3BuYW1lKTsKKwor CQkvKiBXZSBtdXN0IGJlIGluIHRyYW5zYWN0aW9uIGJsb2NrIHRvIGRlZmluZSB0aGUgU0FWRVBP SU5ULiAqLworCQlpZiAoIUlzVHJhbnNhY3Rpb25CbG9jaygpKQorCQl7CisJCQlpZiAoIUlzVHJh bnNhY3Rpb25TdGF0ZSgpKQorCQkJCVN0YXJ0VHJhbnNhY3Rpb25Db21tYW5kKCk7CisKKwkJCUJl Z2luVHJhbnNhY3Rpb25CbG9jaygpOworCQkJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7CisJ CX0KKworCQlEZWZpbmVTYXZlcG9pbnQoc3BuYW1lKTsKKworCQkvKgorCQkgKiBDb21taXRUcmFu c2FjdGlvbkNvbW1hbmQgaXMgbmVlZGVkIHRvIHN0YXJ0IGEgc3VidHJhbnNhY3Rpb24gYWZ0ZXIK KwkJICogaXNzdWluZyBhIFNBVkVQT0lOVCBpbnNpZGUgYSB0cmFuc2FjdGlvbiBibG9jayAoc2Vl CisJCSAqIFN0YXJ0U3ViVHJhbnNhY3Rpb24oKSkuCisJCSAqLworCQlDb21taXRUcmFuc2FjdGlv bkNvbW1hbmQoKTsKKworCQlvbGRjdHggPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oVG9wVHJhbnNh Y3Rpb25Db250ZXh0KTsKKwkJc3VieGFjdGxpc3QgPSBsYXBwZW5kX3hpZChzdWJ4YWN0bGlzdCwg Y3VycmVudF94aWQpOworCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY3R4KTsKKwl9Cit9CisK Ky8qIFJlc2V0IHRoZSBsaXN0IHRoYXQgbWFpbnRhaW5zIHN1YnRyYW5zYWN0aW9ucy4gKi8KK3Zv aWQKK3BhX3Jlc2V0X3N1YnRyYW5zKHZvaWQpCit7CisJLyoKKwkgKiBXZSBkb24ndCBuZWVkIHRv IGZyZWUgdGhpcyBleHBsaWNpdGx5IGFzIHRoZSBhbGxvY2F0ZWQgbWVtb3J5IHdpbGwgYmUKKwkg KiBmcmVlZCBhdCB0aGUgdHJhbnNhY3Rpb24gZW5kLgorCSAqLworCXN1YnhhY3RsaXN0ID0gTklM OworfQorCisvKgorICogSGFuZGxlIFNUUkVBTSBBQk9SVCBtZXNzYWdlIHdoZW4gdGhlIHRyYW5z YWN0aW9uIHdhcyBhcHBsaWVkIGluIGEgcGFyYWxsZWwKKyAqIGFwcGx5IHdvcmtlci4KKyAqLwor dm9pZAorcGFfc3RyZWFtX2Fib3J0KExvZ2ljYWxSZXBTdHJlYW1BYm9ydERhdGEgKmFib3J0X2Rh dGEpCit7CisJVHJhbnNhY3Rpb25JZCB4aWQgPSBhYm9ydF9kYXRhLT54aWQ7CisJVHJhbnNhY3Rp b25JZCBzdWJ4aWQgPSBhYm9ydF9kYXRhLT5zdWJ4aWQ7CisKKwkvKgorCSAqIFVwZGF0ZSBvcmln aW4gc3RhdGUgc28gd2UgY2FuIHJlc3RhcnQgc3RyZWFtaW5nIGZyb20gY29ycmVjdCBwb3NpdGlv bgorCSAqIGluIGNhc2Ugb2YgY3Jhc2guCisJICovCisJcmVwbG9yaWdpbl9zZXNzaW9uX29yaWdp bl9sc24gPSBhYm9ydF9kYXRhLT5hYm9ydF9sc247CisJcmVwbG9yaWdpbl9zZXNzaW9uX29yaWdp bl90aW1lc3RhbXAgPSBhYm9ydF9kYXRhLT5hYm9ydF90aW1lOworCisJLyoKKwkgKiBJZiB0aGUg dHdvIFhJRHMgYXJlIHRoZSBzYW1lLCBpdCdzIGluIGZhY3QgYWJvcnQgb2YgdG9wbGV2ZWwgeGFj dCwgc28KKwkgKiBqdXN0IGZyZWUgdGhlIHN1YnhhY3RsaXN0LgorCSAqLworCWlmIChzdWJ4aWQg PT0geGlkKQorCXsKKwkJcGFfc2V0X3hhY3Rfc3RhdGUoTXlQYXJhbGxlbFNoYXJlZCwgUEFSQUxM RUxfVFJBTlNfRklOSVNIRUQpOworCisJCS8qCisJCSAqIFJlbGVhc2UgdGhlIGxvY2sgYXMgd2Ug bWlnaHQgYmUgcHJvY2Vzc2luZyBhbiBlbXB0eSBzdHJlYW1pbmcKKwkJICogdHJhbnNhY3Rpb24g aW4gd2hpY2ggY2FzZSB0aGUgbG9jayB3b24ndCBiZSByZWxlYXNlZCBkdXJpbmcKKwkJICogdHJh bnNhY3Rpb24gcm9sbGJhY2suCisJCSAqLworCQlwYV91bmxvY2tfdHJhbnNhY3Rpb24oeGlkLCBB Y2Nlc3NFeGNsdXNpdmVMb2NrKTsKKworCQlBYm9ydEN1cnJlbnRUcmFuc2FjdGlvbigpOworCisJ CWlmIChJc1RyYW5zYWN0aW9uQmxvY2soKSkKKwkJeworCQkJRW5kVHJhbnNhY3Rpb25CbG9jayhm YWxzZSk7CisJCQlDb21taXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKKwkJfQorCisJCXBhX3Jlc2V0 X3N1YnRyYW5zKCk7CisKKwkJcGdzdGF0X3JlcG9ydF9hY3Rpdml0eShTVEFURV9JRExFLCBOVUxM KTsKKwl9CisJZWxzZQorCXsKKwkJLyogT0ssIHNvIGl0J3MgYSBzdWJ4YWN0LiBSb2xsYmFjayB0 byB0aGUgc2F2ZXBvaW50LiAqLworCQlpbnQJCQlpOworCQljaGFyCQlzcG5hbWVbTkFNRURBVEFM RU5dOworCisJCXBhX3NhdmVwb2ludF9uYW1lKE15U3Vic2NyaXB0aW9uLT5vaWQsIHN1YnhpZCwg c3BuYW1lLCBzaXplb2Yoc3BuYW1lKSk7CisKKwkJZWxvZyhERUJVRzEsICJyb2xsaW5nIGJhY2sg dG8gc2F2ZXBvaW50ICVzIGluIGxvZ2ljYWwgcmVwbGljYXRpb24gcGFyYWxsZWwgYXBwbHkgd29y a2VyIiwgc3BuYW1lKTsKKworCQkvKgorCQkgKiBTZWFyY2ggdGhlIHN1YnhhY3RsaXN0LCBkZXRl cm1pbmUgdGhlIG9mZnNldCB0cmFja2VkIGZvciB0aGUKKwkJICogc3VieGFjdCwgYW5kIHRydW5j YXRlIHRoZSBsaXN0LgorCQkgKgorCQkgKiBOb3RlIHRoYXQgZm9yIGFuIGVtcHR5IHN1Yi10cmFu c2FjdGlvbiB3ZSB3b24ndCBmaW5kIHRoZSBzdWJ4aWQKKwkJICogaGVyZS4KKwkJICovCisJCWZv ciAoaSA9IGxpc3RfbGVuZ3RoKHN1YnhhY3RsaXN0KSAtIDE7IGkgPj0gMDsgaS0tKQorCQl7CisJ CQlUcmFuc2FjdGlvbklkIHhpZF90bXAgPSBsZmlyc3RfeGlkKGxpc3RfbnRoX2NlbGwoc3VieGFj dGxpc3QsIGkpKTsKKworCQkJaWYgKHhpZF90bXAgPT0gc3VieGlkKQorCQkJeworCQkJCVJvbGxi YWNrVG9TYXZlcG9pbnQoc3BuYW1lKTsKKwkJCQlDb21taXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsK KwkJCQlzdWJ4YWN0bGlzdCA9IGxpc3RfdHJ1bmNhdGUoc3VieGFjdGxpc3QsIGkpOworCQkJCWJy ZWFrOworCQkJfQorCQl9CisJfQorfQorCisvKgorICogU2V0IHRoZSBmaWxlc2V0IHN0YXRlIGZv ciBhIHBhcnRpY3VsYXIgcGFyYWxsZWwgYXBwbHkgd29ya2VyLiBUaGUgZmlsZXNldAorICogd2ls bCBiZSBzZXQgb25jZSB0aGUgbGVhZGVyIHdvcmtlciBzZXJpYWxpemVkIGFsbCBjaGFuZ2VzIHRv IHRoZSBmaWxlCisgKiBzbyB0aGF0IGl0IGNhbiBiZSB1c2VkIGJ5IHBhcmFsbGVsIGFwcGx5IHdv cmtlci4KKyAqLwordm9pZAorcGFfc2V0X2ZpbGVzZXRfc3RhdGUoUGFyYWxsZWxBcHBseVdvcmtl clNoYXJlZCAqd3NoYXJlZCwKKwkJCQkJIFBhcnRpYWxGaWxlU2V0U3RhdGUgZmlsZXNldF9zdGF0 ZSkKK3sKKwlTcGluTG9ja0FjcXVpcmUoJndzaGFyZWQtPm11dGV4KTsKKwl3c2hhcmVkLT5maWxl c2V0X3N0YXRlID0gZmlsZXNldF9zdGF0ZTsKKworCWlmIChmaWxlc2V0X3N0YXRlID09IEZTX1NF UklBTElaRV9ET05FKQorCXsKKwkJQXNzZXJ0KGFtX2xlYWRlcl9hcHBseV93b3JrZXIoKSk7CisJ CUFzc2VydChNeUxvZ2ljYWxSZXBXb3JrZXItPnN0cmVhbV9maWxlc2V0KTsKKwkJd3NoYXJlZC0+ ZmlsZXNldCA9ICpNeUxvZ2ljYWxSZXBXb3JrZXItPnN0cmVhbV9maWxlc2V0OworCX0KKworCVNw aW5Mb2NrUmVsZWFzZSgmd3NoYXJlZC0+bXV0ZXgpOworfQorCisvKgorICogR2V0IHRoZSBmaWxl c2V0IHN0YXRlIGZvciB0aGUgY3VycmVudCBwYXJhbGxlbCBhcHBseSB3b3JrZXIuCisgKi8KK3N0 YXRpYyBQYXJ0aWFsRmlsZVNldFN0YXRlCitwYV9nZXRfZmlsZXNldF9zdGF0ZSh2b2lkKQorewor CVBhcnRpYWxGaWxlU2V0U3RhdGUgZmlsZXNldF9zdGF0ZTsKKworCUFzc2VydChhbV9wYXJhbGxl bF9hcHBseV93b3JrZXIoKSk7CisKKwlTcGluTG9ja0FjcXVpcmUoJk15UGFyYWxsZWxTaGFyZWQt Pm11dGV4KTsKKwlmaWxlc2V0X3N0YXRlID0gTXlQYXJhbGxlbFNoYXJlZC0+ZmlsZXNldF9zdGF0 ZTsKKwlTcGluTG9ja1JlbGVhc2UoJk15UGFyYWxsZWxTaGFyZWQtPm11dGV4KTsKKworCXJldHVy biBmaWxlc2V0X3N0YXRlOworfQorCisvKgorICogSGVscGVyIGZ1bmN0aW9ucyB0byBhY3F1aXJl IGFuZCByZWxlYXNlIGEgbG9jayBmb3IgZWFjaCBzdHJlYW0gYmxvY2suCisgKgorICogU2V0IGxv Y2t0YWdfZmllbGQ0IHRvIFBBUkFMTEVMX0FQUExZX0xPQ0tfU1RSRUFNIHRvIGluZGljYXRlIHRo YXQgaXQncyBhCisgKiBzdHJlYW0gbG9jay4KKyAqCisgKiBSZWZlciB0byB0aGUgY29tbWVudHMg YXRvcCB0aGlzIGZpbGUgdG8gc2VlIGhvdyB0aGUgc3RyZWFtIGxvY2sgaXMgdXNlZC4KKyAqLwor dm9pZAorcGFfbG9ja19zdHJlYW0oVHJhbnNhY3Rpb25JZCB4aWQsIExPQ0tNT0RFIGxvY2ttb2Rl KQoreworCUxvY2tBcHBseVRyYW5zYWN0aW9uRm9yU2Vzc2lvbihNeUxvZ2ljYWxSZXBXb3JrZXIt PnN1YmlkLCB4aWQsCisJCQkJCQkJCSAgIFBBUkFMTEVMX0FQUExZX0xPQ0tfU1RSRUFNLCBsb2Nr bW9kZSk7Cit9CisKK3ZvaWQKK3BhX3VubG9ja19zdHJlYW0oVHJhbnNhY3Rpb25JZCB4aWQsIExP Q0tNT0RFIGxvY2ttb2RlKQoreworCVVubG9ja0FwcGx5VHJhbnNhY3Rpb25Gb3JTZXNzaW9uKE15 TG9naWNhbFJlcFdvcmtlci0+c3ViaWQsIHhpZCwKKwkJCQkJCQkJCSBQQVJBTExFTF9BUFBMWV9M T0NLX1NUUkVBTSwgbG9ja21vZGUpOworfQorCisvKgorICogSGVscGVyIGZ1bmN0aW9ucyB0byBh Y3F1aXJlIGFuZCByZWxlYXNlIGEgbG9jayBmb3IgZWFjaCBsb2NhbCB0cmFuc2FjdGlvbgorICog YXBwbHkuCisgKgorICogU2V0IGxvY2t0YWdfZmllbGQ0IHRvIFBBUkFMTEVMX0FQUExZX0xPQ0tf WEFDVCB0byBpbmRpY2F0ZSB0aGF0IGl0J3MgYQorICogdHJhbnNhY3Rpb24gbG9jay4KKyAqCisg KiBOb3RlIHRoYXQgYWxsIHRoZSBjYWxsZXJzIG11c3QgcGFzcyBhIHJlbW90ZSB0cmFuc2FjdGlv biBJRCBpbnN0ZWFkIG9mIGEKKyAqIGxvY2FsIHRyYW5zYWN0aW9uIElEIGFzIHhpZC4gVGhpcyBp cyBiZWNhdXNlIHRoZSBsb2NhbCB0cmFuc2FjdGlvbiBJRCB3aWxsCisgKiBvbmx5IGJlIGFzc2ln bmVkIHdoaWxlIGFwcGx5aW5nIHRoZSBmaXJzdCBjaGFuZ2UgaW4gdGhlIHBhcmFsbGVsIGFwcGx5 IGJ1dAorICogaXQncyBwb3NzaWJsZSB0aGF0IHRoZSBmaXJzdCBjaGFuZ2UgaW4gdGhlIHBhcmFs bGVsIGFwcGx5IHdvcmtlciBpcyBibG9ja2VkCisgKiBieSBhIGNvbmN1cnJlbnRseSBleGVjdXRp bmcgdHJhbnNhY3Rpb24gaW4gYW5vdGhlciBwYXJhbGxlbCBhcHBseSB3b3JrZXIuIFdlCisgKiBj YW4gb25seSBjb21tdW5pY2F0ZSB0aGUgbG9jYWwgdHJhbnNhY3Rpb24gaWQgdG8gdGhlIGxlYWRl ciBhZnRlciBhcHBseWluZworICogdGhlIGZpcnN0IGNoYW5nZSBzbyBpdCB3b24ndCBiZSBhYmxl IHRvIHdhaXQgYWZ0ZXIgc2VuZGluZyB0aGUgeGFjdCBmaW5pc2gKKyAqIGNvbW1hbmQgdXNpbmcg dGhpcyBsb2NrLgorICoKKyAqIFJlZmVyIHRvIHRoZSBjb21tZW50cyBhdG9wIHRoaXMgZmlsZSB0 byBzZWUgaG93IHRoZSB0cmFuc2FjdGlvbiBsb2NrIGlzCisgKiB1c2VkLgorICovCit2b2lkCitw YV9sb2NrX3RyYW5zYWN0aW9uKFRyYW5zYWN0aW9uSWQgeGlkLCBMT0NLTU9ERSBsb2NrbW9kZSkK K3sKKwlMb2NrQXBwbHlUcmFuc2FjdGlvbkZvclNlc3Npb24oTXlMb2dpY2FsUmVwV29ya2VyLT5z dWJpZCwgeGlkLAorCQkJCQkJCQkgICBQQVJBTExFTF9BUFBMWV9MT0NLX1hBQ1QsIGxvY2ttb2Rl KTsKK30KKwordm9pZAorcGFfdW5sb2NrX3RyYW5zYWN0aW9uKFRyYW5zYWN0aW9uSWQgeGlkLCBM T0NLTU9ERSBsb2NrbW9kZSkKK3sKKwlVbmxvY2tBcHBseVRyYW5zYWN0aW9uRm9yU2Vzc2lvbihN eUxvZ2ljYWxSZXBXb3JrZXItPnN1YmlkLCB4aWQsCisJCQkJCQkJCQkgUEFSQUxMRUxfQVBQTFlf TE9DS19YQUNULCBsb2NrbW9kZSk7Cit9CisKKy8qCisgKiBEZWNyZW1lbnQgdGhlIG51bWJlciBv ZiBwZW5kaW5nIHN0cmVhbWluZyBibG9ja3MgYW5kIHdhaXQgb24gdGhlIHN0cmVhbSBsb2NrCisg KiBpZiB0aGVyZSBpcyBubyBwZW5kaW5nIGJsb2NrIGF2YWlsYWJsZS4KKyAqLwordm9pZAorcGFf ZGVjcl9hbmRfd2FpdF9zdHJlYW1fYmxvY2sodm9pZCkKK3sKKwlBc3NlcnQoYW1fcGFyYWxsZWxf YXBwbHlfd29ya2VyKCkpOworCisJLyoKKwkgKiBJdCBpcyBvbmx5IHBvc3NpYmxlIHRvIG5vdCBo YXZlIGFueSBwZW5kaW5nIHN0cmVhbSBjaHVua3Mgd2hlbiB3ZSBhcmUKKwkgKiBhcHBseWluZyBz cG9vbGVkIG1lc3NhZ2VzLgorCSAqLworCWlmIChwZ19hdG9taWNfcmVhZF91MzIoJk15UGFyYWxs ZWxTaGFyZWQtPnBlbmRpbmdfc3RyZWFtX2NvdW50KSA9PSAwKQorCXsKKwkJaWYgKHBhX2hhc19z cG9vbGVkX21lc3NhZ2VfcGVuZGluZygpKQorCQkJcmV0dXJuOworCisJCWVsb2coRVJST1IsICJp bnZhbGlkIHBlbmRpbmcgc3RyZWFtaW5nIGNodW5rIDAiKTsKKwl9CisKKwlpZiAocGdfYXRvbWlj X3N1Yl9mZXRjaF91MzIoJk15UGFyYWxsZWxTaGFyZWQtPnBlbmRpbmdfc3RyZWFtX2NvdW50LCAx KSA9PSAwKQorCXsKKwkJcGFfbG9ja19zdHJlYW0oTXlQYXJhbGxlbFNoYXJlZC0+eGlkLCBBY2Nl c3NTaGFyZUxvY2spOworCQlwYV91bmxvY2tfc3RyZWFtKE15UGFyYWxsZWxTaGFyZWQtPnhpZCwg QWNjZXNzU2hhcmVMb2NrKTsKKwl9Cit9CisKKy8qCisgKiBGaW5pc2ggcHJvY2Vzc2luZyB0aGUg c3RyZWFtaW5nIHRyYW5zYWN0aW9uIGluIHRoZSBsZWFkZXIgYXBwbHkgd29ya2VyLgorICovCit2 b2lkCitwYV94YWN0X2ZpbmlzaChQYXJhbGxlbEFwcGx5V29ya2VySW5mbyAqd2luZm8sIFhMb2dS ZWNQdHIgcmVtb3RlX2xzbikKK3sKKwlBc3NlcnQoYW1fbGVhZGVyX2FwcGx5X3dvcmtlcigpKTsK KworCS8qCisJICogVW5sb2NrIHRoZSBzaGFyZWQgb2JqZWN0IGxvY2sgc28gdGhhdCBwYXJhbGxl bCBhcHBseSB3b3JrZXIgY2FuCisJICogY29udGludWUgdG8gcmVjZWl2ZSBhbmQgYXBwbHkgY2hh bmdlcy4KKwkgKi8KKwlwYV91bmxvY2tfc3RyZWFtKHdpbmZvLT5zaGFyZWQtPnhpZCwgQWNjZXNz RXhjbHVzaXZlTG9jayk7CisKKwkvKgorCSAqIFdhaXQgZm9yIHRoYXQgd29ya2VyIHRvIGZpbmlz aC4gVGhpcyBpcyBuZWNlc3NhcnkgdG8gbWFpbnRhaW4gY29tbWl0CisJICogb3JkZXIgd2hpY2gg YXZvaWRzIGZhaWx1cmVzIGR1ZSB0byB0cmFuc2FjdGlvbiBkZXBlbmRlbmNpZXMgYW5kCisJICog ZGVhZGxvY2tzLgorCSAqLworCXBhX3dhaXRfZm9yX3hhY3RfZmluaXNoKHdpbmZvKTsKKworCWlm ICghWExvZ1JlY1B0cklzSW52YWxpZChyZW1vdGVfbHNuKSkKKwkJc3RvcmVfZmx1c2hfcG9zaXRp b24ocmVtb3RlX2xzbiwgd2luZm8tPnNoYXJlZC0+bGFzdF9jb21taXRfZW5kKTsKKworCXBhX2Zy ZWVfd29ya2VyKHdpbmZvKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L2xvZ2ljYWwvZGVjb2RlLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RlY29k ZS5jCmluZGV4IDJjYzBhYzllYjAuLjMzZmRiZGM2NzMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGVjb2RlLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vbG9naWNhbC9kZWNvZGUuYwpAQCAtODIyLDEwICs4MjIsMTEgQEAgRGVjb2RlQWJvcnQoTG9n aWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBYTG9nUmVjb3JkQnVmZmVyICpidWYsCiAJCWZvciAo aSA9IDA7IGkgPCBwYXJzZWQtPm5zdWJ4YWN0czsgaSsrKQogCQl7CiAJCQlSZW9yZGVyQnVmZmVy QWJvcnQoY3R4LT5yZW9yZGVyLCBwYXJzZWQtPnN1YnhhY3RzW2ldLAotCQkJCQkJCSAgIGJ1Zi0+ cmVjb3JkLT5FbmRSZWNQdHIpOworCQkJCQkJCSAgIGJ1Zi0+cmVjb3JkLT5FbmRSZWNQdHIsIGFi b3J0X3RpbWUpOwogCQl9CiAKLQkJUmVvcmRlckJ1ZmZlckFib3J0KGN0eC0+cmVvcmRlciwgeGlk LCBidWYtPnJlY29yZC0+RW5kUmVjUHRyKTsKKwkJUmVvcmRlckJ1ZmZlckFib3J0KGN0eC0+cmVv cmRlciwgeGlkLCBidWYtPnJlY29yZC0+RW5kUmVjUHRyLAorCQkJCQkJICAgYWJvcnRfdGltZSk7 CiAJfQogCiAJLyogdXBkYXRlIHRoZSBkZWNvZGluZyBzdGF0cyAqLwpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9sYXVuY2hlci5jIGIvc3JjL2JhY2tlbmQvcmVw bGljYXRpb24vbG9naWNhbC9sYXVuY2hlci5jCmluZGV4IDczNTk0YzY5OGEuLmJhOTU0YWMyYTIg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbGF1bmNoZXIuYwor KysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2xhdW5jaGVyLmMKQEAgLTU1LDYg KzU1LDcgQEAKIC8qIEdVQyB2YXJpYWJsZXMgKi8KIGludAkJCW1heF9sb2dpY2FsX3JlcGxpY2F0 aW9uX3dvcmtlcnMgPSA0OwogaW50CQkJbWF4X3N5bmNfd29ya2Vyc19wZXJfc3Vic2NyaXB0aW9u ID0gMjsKK2ludAkJCW1heF9wYXJhbGxlbF9hcHBseV93b3JrZXJzX3Blcl9zdWJzY3JpcHRpb24g PSAyOwogCiBMb2dpY2FsUmVwV29ya2VyICpNeUxvZ2ljYWxSZXBXb3JrZXIgPSBOVUxMOwogCkBA IC03NCw2ICs3NSw3IEBAIHN0YXRpYyB2b2lkIGxvZ2ljYWxyZXBfbGF1bmNoZXJfb25leGl0KGlu dCBjb2RlLCBEYXR1bSBhcmcpOwogc3RhdGljIHZvaWQgbG9naWNhbHJlcF93b3JrZXJfb25leGl0 KGludCBjb2RlLCBEYXR1bSBhcmcpOwogc3RhdGljIHZvaWQgbG9naWNhbHJlcF93b3JrZXJfZGV0 YWNoKHZvaWQpOwogc3RhdGljIHZvaWQgbG9naWNhbHJlcF93b3JrZXJfY2xlYW51cChMb2dpY2Fs UmVwV29ya2VyICp3b3JrZXIpOworc3RhdGljIGludAlsb2dpY2FscmVwX3BhX3dvcmtlcl9jb3Vu dChPaWQgc3ViaWQpOwogCiBzdGF0aWMgYm9vbCBvbl9jb21taXRfbGF1bmNoZXJfd2FrZXVwID0g ZmFsc2U7CiAKQEAgLTE1Miw4ICsxNTQsMTAgQEAgZ2V0X3N1YnNjcmlwdGlvbl9saXN0KHZvaWQp CiAgKgogICogVGhpcyBpcyBvbmx5IG5lZWRlZCBmb3IgY2xlYW5pbmcgdXAgdGhlIHNoYXJlZCBt ZW1vcnkgaW4gY2FzZSB0aGUgd29ya2VyCiAgKiBmYWlscyB0byBhdHRhY2guCisgKgorICogUmV0 dXJucyB3aGV0aGVyIHRoZSBhdHRhY2ggd2FzIHN1Y2Nlc3NmdWwuCiAgKi8KLXN0YXRpYyB2b2lk CitzdGF0aWMgYm9vbAogV2FpdEZvclJlcGxpY2F0aW9uV29ya2VyQXR0YWNoKExvZ2ljYWxSZXBX b3JrZXIgKndvcmtlciwKIAkJCQkJCQkgICB1aW50MTYgZ2VuZXJhdGlvbiwKIAkJCQkJCQkgICBC YWNrZ3JvdW5kV29ya2VySGFuZGxlICpoYW5kbGUpCkBAIC0xNjksMTEgKzE3MywxMSBAQCBXYWl0 Rm9yUmVwbGljYXRpb25Xb3JrZXJBdHRhY2goTG9naWNhbFJlcFdvcmtlciAqd29ya2VyLAogCiAJ CUxXTG9ja0FjcXVpcmUoTG9naWNhbFJlcFdvcmtlckxvY2ssIExXX1NIQVJFRCk7CiAKLQkJLyog V29ya2VyIGVpdGhlciBkaWVkIG9yIGhhcyBzdGFydGVkOyBubyBuZWVkIHRvIGRvIGFueXRoaW5n LiAqLworCQkvKiBXb3JrZXIgZWl0aGVyIGRpZWQgb3IgaGFzIHN0YXJ0ZWQuIFJldHVybiBmYWxz ZSBpZiBkaWVkLiAqLwogCQlpZiAoIXdvcmtlci0+aW5fdXNlIHx8IHdvcmtlci0+cHJvYykKIAkJ ewogCQkJTFdMb2NrUmVsZWFzZShMb2dpY2FsUmVwV29ya2VyTG9jayk7Ci0JCQlyZXR1cm47CisJ CQlyZXR1cm4gd29ya2VyLT5pbl91c2U7CiAJCX0KIAogCQlMV0xvY2tSZWxlYXNlKExvZ2ljYWxS ZXBXb3JrZXJMb2NrKTsKQEAgLTE4OCw3ICsxOTIsNyBAQCBXYWl0Rm9yUmVwbGljYXRpb25Xb3Jr ZXJBdHRhY2goTG9naWNhbFJlcFdvcmtlciAqd29ya2VyLAogCQkJaWYgKGdlbmVyYXRpb24gPT0g d29ya2VyLT5nZW5lcmF0aW9uKQogCQkJCWxvZ2ljYWxyZXBfd29ya2VyX2NsZWFudXAod29ya2Vy KTsKIAkJCUxXTG9ja1JlbGVhc2UoTG9naWNhbFJlcFdvcmtlckxvY2spOwotCQkJcmV0dXJuOwor CQkJcmV0dXJuIGZhbHNlOwogCQl9CiAKIAkJLyoKQEAgLTIxMCw2ICsyMTQsOCBAQCBXYWl0Rm9y UmVwbGljYXRpb25Xb3JrZXJBdHRhY2goTG9naWNhbFJlcFdvcmtlciAqd29ya2VyLAogLyoKICAq IFdhbGtzIHRoZSB3b3JrZXJzIGFycmF5IGFuZCBzZWFyY2hlcyBmb3Igb25lIHRoYXQgbWF0Y2hl cyBnaXZlbgogICogc3Vic2NyaXB0aW9uIGlkIGFuZCByZWxpZC4KKyAqCisgKiBXZSBhcmUgb25s eSBpbnRlcmVzdGVkIGluIHRoZSBsZWFkZXIgYXBwbHkgd29ya2VyIG9yIHRhYmxlIHN5bmMgd29y a2VyLgogICovCiBMb2dpY2FsUmVwV29ya2VyICoKIGxvZ2ljYWxyZXBfd29ya2VyX2ZpbmQoT2lk IHN1YmlkLCBPaWQgcmVsaWQsIGJvb2wgb25seV9ydW5uaW5nKQpAQCAtMjI0LDYgKzIzMCwxMCBA QCBsb2dpY2FscmVwX3dvcmtlcl9maW5kKE9pZCBzdWJpZCwgT2lkIHJlbGlkLCBib29sIG9ubHlf cnVubmluZykKIAl7CiAJCUxvZ2ljYWxSZXBXb3JrZXIgKncgPSAmTG9naWNhbFJlcEN0eC0+d29y a2Vyc1tpXTsKIAorCQkvKiBTa2lwIHBhcmFsbGVsIGFwcGx5IHdvcmtlcnMuICovCisJCWlmIChp c1BhcmFsbGVsQXBwbHlXb3JrZXIodykpCisJCQljb250aW51ZTsKKwogCQlpZiAody0+aW5fdXNl ICYmIHctPnN1YmlkID09IHN1YmlkICYmIHctPnJlbGlkID09IHJlbGlkICYmCiAJCQkoIW9ubHlf cnVubmluZyB8fCB3LT5wcm9jKSkKIAkJewpAQCAtMjYwLDExICsyNzAsMTMgQEAgbG9naWNhbHJl cF93b3JrZXJzX2ZpbmQoT2lkIHN1YmlkLCBib29sIG9ubHlfcnVubmluZykKIH0KIAogLyoKLSAq IFN0YXJ0IG5ldyBhcHBseSBiYWNrZ3JvdW5kIHdvcmtlciwgaWYgcG9zc2libGUuCisgKiBTdGFy dCBuZXcgbG9naWNhbCByZXBsaWNhdGlvbiBiYWNrZ3JvdW5kIHdvcmtlciwgaWYgcG9zc2libGUu CisgKgorICogUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3MsIGZhbHNlIG9uIGZhaWx1cmUuCiAgKi8K LXZvaWQKK2Jvb2wKIGxvZ2ljYWxyZXBfd29ya2VyX2xhdW5jaChPaWQgZGJpZCwgT2lkIHN1Ymlk LCBjb25zdCBjaGFyICpzdWJuYW1lLCBPaWQgdXNlcmlkLAotCQkJCQkJIE9pZCByZWxpZCkKKwkJ CQkJCSBPaWQgcmVsaWQsIGRzbV9oYW5kbGUgc3Vid29ya2VyX2RzbSkKIHsKIAlCYWNrZ3JvdW5k V29ya2VyIGJndzsKIAlCYWNrZ3JvdW5kV29ya2VySGFuZGxlICpiZ3dfaGFuZGxlOwpAQCAtMjcz LDcgKzI4NSwxMiBAQCBsb2dpY2FscmVwX3dvcmtlcl9sYXVuY2goT2lkIGRiaWQsIE9pZCBzdWJp ZCwgY29uc3QgY2hhciAqc3VibmFtZSwgT2lkIHVzZXJpZCwKIAlpbnQJCQlzbG90ID0gMDsKIAlM b2dpY2FsUmVwV29ya2VyICp3b3JrZXIgPSBOVUxMOwogCWludAkJCW5zeW5jd29ya2VyczsKKwlp bnQJCQlucGFyYWxsZWxhcHBseXdvcmtlcnM7CiAJVGltZXN0YW1wVHogbm93OworCWJvb2wJCWlz X3BhcmFsbGVsX2FwcGx5X3dvcmtlciA9IChzdWJ3b3JrZXJfZHNtICE9IERTTV9IQU5ETEVfSU5W QUxJRCk7CisKKwkvKiBTYW5pdHkgY2hlY2sgLSB0YWJsZXN5bmMgd29ya2VyIGNhbm5vdCBiZSBh IHN1YndvcmtlciAqLworCUFzc2VydCghKGlzX3BhcmFsbGVsX2FwcGx5X3dvcmtlciAmJiBPaWRJ c1ZhbGlkKHJlbGlkKSkpOwogCiAJZXJlcG9ydChERUJVRzEsCiAJCQkoZXJybXNnX2ludGVybmFs KCJzdGFydGluZyBsb2dpY2FsIHJlcGxpY2F0aW9uIHdvcmtlciBmb3Igc3Vic2NyaXB0aW9uIFwi JXNcIiIsCkBAIC0zNTEsNyArMzY4LDIwIEBAIHJldHJ5OgogCWlmIChPaWRJc1ZhbGlkKHJlbGlk KSAmJiBuc3luY3dvcmtlcnMgPj0gbWF4X3N5bmNfd29ya2Vyc19wZXJfc3Vic2NyaXB0aW9uKQog CXsKIAkJTFdMb2NrUmVsZWFzZShMb2dpY2FsUmVwV29ya2VyTG9jayk7Ci0JCXJldHVybjsKKwkJ cmV0dXJuIGZhbHNlOworCX0KKworCW5wYXJhbGxlbGFwcGx5d29ya2VycyA9IGxvZ2ljYWxyZXBf cGFfd29ya2VyX2NvdW50KHN1YmlkKTsKKworCS8qCisJICogUmV0dXJuIGZhbHNlIGlmIHRoZSBu dW1iZXIgb2YgcGFyYWxsZWwgYXBwbHkgd29ya2VycyByZWFjaGVkIHRoZSBsaW1pdAorCSAqIHBl ciBzdWJzY3JpcHRpb24uCisJICovCisJaWYgKGlzX3BhcmFsbGVsX2FwcGx5X3dvcmtlciAmJgor CQlucGFyYWxsZWxhcHBseXdvcmtlcnMgPj0gbWF4X3BhcmFsbGVsX2FwcGx5X3dvcmtlcnNfcGVy X3N1YnNjcmlwdGlvbikKKwl7CisJCUxXTG9ja1JlbGVhc2UoTG9naWNhbFJlcFdvcmtlckxvY2sp OworCQlyZXR1cm4gZmFsc2U7CiAJfQogCiAJLyoKQEAgLTM2NSw3ICszOTUsNyBAQCByZXRyeToK IAkJCQkoZXJyY29kZShFUlJDT0RFX0NPTkZJR1VSQVRJT05fTElNSVRfRVhDRUVERUQpLAogCQkJ CSBlcnJtc2coIm91dCBvZiBsb2dpY2FsIHJlcGxpY2F0aW9uIHdvcmtlciBzbG90cyIpLAogCQkJ CSBlcnJoaW50KCJZb3UgbWlnaHQgbmVlZCB0byBpbmNyZWFzZSBtYXhfbG9naWNhbF9yZXBsaWNh dGlvbl93b3JrZXJzLiIpKSk7Ci0JCXJldHVybjsKKwkJcmV0dXJuIGZhbHNlOwogCX0KIAogCS8q IFByZXBhcmUgdGhlIHdvcmtlciBzbG90LiAqLwpAQCAtMzgwLDYgKzQxMCw4IEBAIHJldHJ5Ogog CXdvcmtlci0+cmVsc3RhdGUgPSBTVUJSRUxfU1RBVEVfVU5LTk9XTjsKIAl3b3JrZXItPnJlbHN0 YXRlX2xzbiA9IEludmFsaWRYTG9nUmVjUHRyOwogCXdvcmtlci0+c3RyZWFtX2ZpbGVzZXQgPSBO VUxMOworCXdvcmtlci0+YXBwbHlfbGVhZGVyX3BpZCA9IGlzX3BhcmFsbGVsX2FwcGx5X3dvcmtl ciA/IE15UHJvY1BpZCA6IEludmFsaWRQaWQ7CisJd29ya2VyLT5wYXJhbGxlbF9hcHBseSA9IGlz X3BhcmFsbGVsX2FwcGx5X3dvcmtlcjsKIAl3b3JrZXItPmxhc3RfbHNuID0gSW52YWxpZFhMb2dS ZWNQdHI7CiAJVElNRVNUQU1QX05PQkVHSU4od29ya2VyLT5sYXN0X3NlbmRfdGltZSk7CiAJVElN RVNUQU1QX05PQkVHSU4od29ya2VyLT5sYXN0X3JlY3ZfdGltZSk7CkBAIC0zOTcsMTkgKzQyOSwz NCBAQCByZXRyeToKIAkJQkdXT1JLRVJfQkFDS0VORF9EQVRBQkFTRV9DT05ORUNUSU9OOwogCWJn dy5iZ3dfc3RhcnRfdGltZSA9IEJnV29ya2VyU3RhcnRfUmVjb3ZlcnlGaW5pc2hlZDsKIAlzbnBy aW50ZihiZ3cuYmd3X2xpYnJhcnlfbmFtZSwgQkdXX01BWExFTiwgInBvc3RncmVzIik7Ci0Jc25w cmludGYoYmd3LmJnd19mdW5jdGlvbl9uYW1lLCBCR1dfTUFYTEVOLCAiQXBwbHlXb3JrZXJNYWlu Iik7CisKKwlpZiAoaXNfcGFyYWxsZWxfYXBwbHlfd29ya2VyKQorCQlzbnByaW50ZihiZ3cuYmd3 X2Z1bmN0aW9uX25hbWUsIEJHV19NQVhMRU4sICJQYXJhbGxlbEFwcGx5V29ya2VyTWFpbiIpOwor CWVsc2UKKwkJc25wcmludGYoYmd3LmJnd19mdW5jdGlvbl9uYW1lLCBCR1dfTUFYTEVOLCAiQXBw bHlXb3JrZXJNYWluIik7CisKIAlpZiAoT2lkSXNWYWxpZChyZWxpZCkpCiAJCXNucHJpbnRmKGJn dy5iZ3dfbmFtZSwgQkdXX01BWExFTiwKIAkJCQkgImxvZ2ljYWwgcmVwbGljYXRpb24gd29ya2Vy IGZvciBzdWJzY3JpcHRpb24gJXUgc3luYyAldSIsIHN1YmlkLCByZWxpZCk7CisJZWxzZSBpZiAo aXNfcGFyYWxsZWxfYXBwbHlfd29ya2VyKQorCQlzbnByaW50ZihiZ3cuYmd3X25hbWUsIEJHV19N QVhMRU4sCisJCQkJICJsb2dpY2FsIHJlcGxpY2F0aW9uIHBhcmFsbGVsIGFwcGx5IHdvcmtlciBm b3Igc3Vic2NyaXB0aW9uICV1Iiwgc3ViaWQpOwogCWVsc2UKIAkJc25wcmludGYoYmd3LmJnd19u YW1lLCBCR1dfTUFYTEVOLAotCQkJCSAibG9naWNhbCByZXBsaWNhdGlvbiB3b3JrZXIgZm9yIHN1 YnNjcmlwdGlvbiAldSIsIHN1YmlkKTsKLQlzbnByaW50ZihiZ3cuYmd3X3R5cGUsIEJHV19NQVhM RU4sICJsb2dpY2FsIHJlcGxpY2F0aW9uIHdvcmtlciIpOworCQkJCSAibG9naWNhbCByZXBsaWNh dGlvbiBhcHBseSB3b3JrZXIgZm9yIHN1YnNjcmlwdGlvbiAldSIsIHN1YmlkKTsKKworCWlmIChp c19wYXJhbGxlbF9hcHBseV93b3JrZXIpCisJCXNucHJpbnRmKGJndy5iZ3dfdHlwZSwgQkdXX01B WExFTiwgImxvZ2ljYWwgcmVwbGljYXRpb24gcGFyYWxsZWwgd29ya2VyIik7CisJZWxzZQorCQlz bnByaW50ZihiZ3cuYmd3X3R5cGUsIEJHV19NQVhMRU4sICJsb2dpY2FsIHJlcGxpY2F0aW9uIHdv cmtlciIpOwogCiAJYmd3LmJnd19yZXN0YXJ0X3RpbWUgPSBCR1dfTkVWRVJfUkVTVEFSVDsKIAli Z3cuYmd3X25vdGlmeV9waWQgPSBNeVByb2NQaWQ7CiAJYmd3LmJnd19tYWluX2FyZyA9IEludDMy R2V0RGF0dW0oc2xvdCk7CiAKKwlpZiAoaXNfcGFyYWxsZWxfYXBwbHlfd29ya2VyKQorCQltZW1j cHkoYmd3LmJnd19leHRyYSwgJnN1Yndvcmtlcl9kc20sIHNpemVvZihkc21faGFuZGxlKSk7CisK IAlpZiAoIVJlZ2lzdGVyRHluYW1pY0JhY2tncm91bmRXb3JrZXIoJmJndywgJmJnd19oYW5kbGUp KQogCXsKIAkJLyogRmFpbGVkIHRvIHN0YXJ0IHdvcmtlciwgc28gY2xlYW4gdXAgdGhlIHdvcmtl ciBzbG90LiAqLwpAQCAtNDIyLDMzICs0NjksMjMgQEAgcmV0cnk6CiAJCQkJKGVycmNvZGUoRVJS Q09ERV9DT05GSUdVUkFUSU9OX0xJTUlUX0VYQ0VFREVEKSwKIAkJCQkgZXJybXNnKCJvdXQgb2Yg YmFja2dyb3VuZCB3b3JrZXIgc2xvdHMiKSwKIAkJCQkgZXJyaGludCgiWW91IG1pZ2h0IG5lZWQg dG8gaW5jcmVhc2UgbWF4X3dvcmtlcl9wcm9jZXNzZXMuIikpKTsKLQkJcmV0dXJuOworCQlyZXR1 cm4gZmFsc2U7CiAJfQogCiAJLyogTm93IHdhaXQgdW50aWwgaXQgYXR0YWNoZXMuICovCi0JV2Fp dEZvclJlcGxpY2F0aW9uV29ya2VyQXR0YWNoKHdvcmtlciwgZ2VuZXJhdGlvbiwgYmd3X2hhbmRs ZSk7CisJcmV0dXJuIFdhaXRGb3JSZXBsaWNhdGlvbldvcmtlckF0dGFjaCh3b3JrZXIsIGdlbmVy YXRpb24sIGJnd19oYW5kbGUpOwogfQogCiAvKgotICogU3RvcCB0aGUgbG9naWNhbCByZXBsaWNh dGlvbiB3b3JrZXIgZm9yIHN1YmlkL3JlbGlkLCBpZiBhbnksIGFuZCB3YWl0IHVudGlsCi0gKiBp dCBkZXRhY2hlcyBmcm9tIHRoZSBzbG90LgorICogSW50ZXJuYWwgZnVuY3Rpb24gdG8gc3RvcCB0 aGUgd29ya2VyIGFuZCB3YWl0IHVudGlsIGl0IGRldGFjaGVzIGZyb20gdGhlCisgKiBzbG90Lgog ICovCi12b2lkCi1sb2dpY2FscmVwX3dvcmtlcl9zdG9wKE9pZCBzdWJpZCwgT2lkIHJlbGlkKQor c3RhdGljIHZvaWQKK2xvZ2ljYWxyZXBfd29ya2VyX3N0b3BfaW50ZXJuYWwoTG9naWNhbFJlcFdv cmtlciAqd29ya2VyLCBpbnQgc2lnbm8pCiB7Ci0JTG9naWNhbFJlcFdvcmtlciAqd29ya2VyOwog CXVpbnQxNgkJZ2VuZXJhdGlvbjsKIAotCUxXTG9ja0FjcXVpcmUoTG9naWNhbFJlcFdvcmtlckxv Y2ssIExXX1NIQVJFRCk7Ci0KLQl3b3JrZXIgPSBsb2dpY2FscmVwX3dvcmtlcl9maW5kKHN1Ymlk LCByZWxpZCwgZmFsc2UpOwotCi0JLyogTm8gd29ya2VyLCBub3RoaW5nIHRvIGRvLiAqLwotCWlm ICghd29ya2VyKQotCXsKLQkJTFdMb2NrUmVsZWFzZShMb2dpY2FsUmVwV29ya2VyTG9jayk7Ci0J CXJldHVybjsKLQl9CisJQXNzZXJ0KExXTG9ja0hlbGRCeU1lSW5Nb2RlKExvZ2ljYWxSZXBXb3Jr ZXJMb2NrLCBMV19TSEFSRUQpKTsKIAogCS8qCiAJICogUmVtZW1iZXIgd2hpY2ggZ2VuZXJhdGlv biB3YXMgb3VyIHdvcmtlciBzbyB3ZSBjYW4gY2hlY2sgaWYgd2hhdCB3ZSBzZWUKQEAgLTQ4Niwx MCArNTIzLDcgQEAgbG9naWNhbHJlcF93b3JrZXJfc3RvcChPaWQgc3ViaWQsIE9pZCByZWxpZCkK IAkJICogZGlmZmVyZW50LCBtZWFuaW5nIHRoYXQgYSBkaWZmZXJlbnQgd29ya2VyIGhhcyB0YWtl biB0aGUgc2xvdC4KIAkJICovCiAJCWlmICghd29ya2VyLT5pbl91c2UgfHwgd29ya2VyLT5nZW5l cmF0aW9uICE9IGdlbmVyYXRpb24pCi0JCXsKLQkJCUxXTG9ja1JlbGVhc2UoTG9naWNhbFJlcFdv cmtlckxvY2spOwogCQkJcmV0dXJuOwotCQl9CiAKIAkJLyogV29ya2VyIGhhcyBhc3NpZ25lZCBw cm9jLCBzbyBpdCBoYXMgc3RhcnRlZC4gKi8KIAkJaWYgKHdvcmtlci0+cHJvYykKQEAgLTQ5Nyw3 ICs1MzEsNyBAQCBsb2dpY2FscmVwX3dvcmtlcl9zdG9wKE9pZCBzdWJpZCwgT2lkIHJlbGlkKQog CX0KIAogCS8qIE5vdyB0ZXJtaW5hdGUgdGhlIHdvcmtlciAuLi4gKi8KLQlraWxsKHdvcmtlci0+ cHJvYy0+cGlkLCBTSUdURVJNKTsKKwlraWxsKHdvcmtlci0+cHJvYy0+cGlkLCBzaWdubyk7CiAK IAkvKiAuLi4gYW5kIHdhaXQgZm9yIGl0IHRvIGRpZS4gKi8KIAlmb3IgKDs7KQpAQCAtNTIzLDYg KzU1Nyw1MyBAQCBsb2dpY2FscmVwX3dvcmtlcl9zdG9wKE9pZCBzdWJpZCwgT2lkIHJlbGlkKQog CiAJCUxXTG9ja0FjcXVpcmUoTG9naWNhbFJlcFdvcmtlckxvY2ssIExXX1NIQVJFRCk7CiAJfQor fQorCisvKgorICogU3RvcCB0aGUgbG9naWNhbCByZXBsaWNhdGlvbiB3b3JrZXIgZm9yIHN1Ymlk L3JlbGlkLCBpZiBhbnkuCisgKi8KK3ZvaWQKK2xvZ2ljYWxyZXBfd29ya2VyX3N0b3AoT2lkIHN1 YmlkLCBPaWQgcmVsaWQpCit7CisJTG9naWNhbFJlcFdvcmtlciAqd29ya2VyOworCisJTFdMb2Nr QWNxdWlyZShMb2dpY2FsUmVwV29ya2VyTG9jaywgTFdfU0hBUkVEKTsKKworCXdvcmtlciA9IGxv Z2ljYWxyZXBfd29ya2VyX2ZpbmQoc3ViaWQsIHJlbGlkLCBmYWxzZSk7CisKKwlpZiAod29ya2Vy KQorCXsKKwkJQXNzZXJ0KCFpc1BhcmFsbGVsQXBwbHlXb3JrZXIod29ya2VyKSk7CisJCWxvZ2lj YWxyZXBfd29ya2VyX3N0b3BfaW50ZXJuYWwod29ya2VyLCBTSUdURVJNKTsKKwl9CisKKwlMV0xv Y2tSZWxlYXNlKExvZ2ljYWxSZXBXb3JrZXJMb2NrKTsKK30KKworLyoKKyAqIFN0b3AgdGhlIGxv Z2ljYWwgcmVwbGljYXRpb24gcGFyYWxsZWwgYXBwbHkgd29ya2VyIGNvcnJlc3BvbmRpbmcgdG8g dGhlCisgKiBpbnB1dCBzbG90IG51bWJlci4KKyAqCisgKiBOb2RlIHRoYXQgdGhlIGZ1bmN0aW9u IHNlbmRzIFNJR0lOVCBpbnN0ZWFkIG9mIFNJR1RFUk0gdG8gdGhlIHBhcmFsbGVsIGFwcGx5Cisg KiB3b3JrZXIgc28gdGhhdCB0aGUgd29ya2VyIGV4aXRzIGNsZWFubHkuCisgKi8KK3ZvaWQKK2xv Z2ljYWxyZXBfcGFfd29ya2VyX3N0b3AoaW50IHNsb3Rfbm8sIHVpbnQxNiBnZW5lcmF0aW9uKQor eworCUxvZ2ljYWxSZXBXb3JrZXIgKndvcmtlcjsKKworCUFzc2VydChzbG90X25vID49IDAgJiYg c2xvdF9ubyA8IG1heF9sb2dpY2FsX3JlcGxpY2F0aW9uX3dvcmtlcnMpOworCisJTFdMb2NrQWNx dWlyZShMb2dpY2FsUmVwV29ya2VyTG9jaywgTFdfU0hBUkVEKTsKKworCXdvcmtlciA9ICZMb2dp Y2FsUmVwQ3R4LT53b3JrZXJzW3Nsb3Rfbm9dOworCUFzc2VydChpc1BhcmFsbGVsQXBwbHlXb3Jr ZXIod29ya2VyKSk7CisKKwkvKgorCSAqIE9ubHkgc3RvcCB0aGUgd29ya2VyIGlmIHRoZSBnZW5l cmF0aW9uIG1hdGNoZXMgYW5kIHRoZSB3b3JrZXIgaXMgYWxpdmUuCisJICovCisJaWYgKHdvcmtl ci0+Z2VuZXJhdGlvbiA9PSBnZW5lcmF0aW9uICYmIHdvcmtlci0+cHJvYykKKwkJbG9naWNhbHJl cF93b3JrZXJfc3RvcF9pbnRlcm5hbCh3b3JrZXIsIFNJR0lOVCk7CiAKIAlMV0xvY2tSZWxlYXNl KExvZ2ljYWxSZXBXb3JrZXJMb2NrKTsKIH0KQEAgLTU5NSwxMSArNjc2LDQwIEBAIGxvZ2ljYWxy ZXBfd29ya2VyX2F0dGFjaChpbnQgc2xvdCkKIH0KIAogLyoKLSAqIERldGFjaCB0aGUgd29ya2Vy IChjbGVhbnMgdXAgdGhlIHdvcmtlciBpbmZvKS4KKyAqIFN0b3AgdGhlIHBhcmFsbGVsIGFwcGx5 IHdvcmtlcnMgaWYgYW55LCBhbmQgZGV0YWNoIHRoZSBsZWFkZXIgYXBwbHkgd29ya2VyCisgKiAo Y2xlYW5zIHVwIHRoZSB3b3JrZXIgaW5mbykuCiAgKi8KIHN0YXRpYyB2b2lkCiBsb2dpY2FscmVw X3dvcmtlcl9kZXRhY2godm9pZCkKIHsKKwkvKiBTdG9wIHRoZSBwYXJhbGxlbCBhcHBseSB3b3Jr ZXJzLiAqLworCWlmIChhbV9sZWFkZXJfYXBwbHlfd29ya2VyKCkpCisJeworCQlMaXN0CSAgICp3 b3JrZXJzOworCQlMaXN0Q2VsbCAgICpsYzsKKworCQkvKgorCQkgKiBEZXRhY2ggZnJvbSB0aGUg ZXJyb3JfbXFfaGFuZGxlIGZvciBhbGwgcGFyYWxsZWwgYXBwbHkgd29ya2VycworCQkgKiBiZWZv cmUgdGVybWluYXRpbmcgdGhlbS4gVGhpcyBwcmV2ZW50cyB0aGUgbGVhZGVyIGFwcGx5IHdvcmtl ciBmcm9tCisJCSAqIHJlY2VpdmluZyB0aGUgd29ya2VyIHRlcm1pbmF0aW9uIG1lc3NhZ2UgYW5k IHNlbmRpbmcgaXQgdG8gbG9ncworCQkgKiB3aGVuIHRoZSBzYW1lIGlzIGFscmVhZHkgZG9uZSBi eSB0aGUgcGFyYWxsZWwgd29ya2VyLgorCQkgKi8KKwkJcGFfZGV0YWNoX2FsbF9lcnJvcl9tcSgp OworCisJCUxXTG9ja0FjcXVpcmUoTG9naWNhbFJlcFdvcmtlckxvY2ssIExXX1NIQVJFRCk7CisK KwkJd29ya2VycyA9IGxvZ2ljYWxyZXBfd29ya2Vyc19maW5kKE15TG9naWNhbFJlcFdvcmtlci0+ c3ViaWQsIHRydWUpOworCQlmb3JlYWNoKGxjLCB3b3JrZXJzKQorCQl7CisJCQlMb2dpY2FsUmVw V29ya2VyICp3ID0gKExvZ2ljYWxSZXBXb3JrZXIgKikgbGZpcnN0KGxjKTsKKworCQkJaWYgKGlz UGFyYWxsZWxBcHBseVdvcmtlcih3KSkKKwkJCQlsb2dpY2FscmVwX3dvcmtlcl9zdG9wX2ludGVy bmFsKHcsIFNJR1RFUk0pOworCQl9CisKKwkJTFdMb2NrUmVsZWFzZShMb2dpY2FsUmVwV29ya2Vy TG9jayk7CisJfQorCiAJLyogQmxvY2sgY29uY3VycmVudCBhY2Nlc3MuICovCiAJTFdMb2NrQWNx dWlyZShMb2dpY2FsUmVwV29ya2VyTG9jaywgTFdfRVhDTFVTSVZFKTsKIApAQCAtNjIyLDYgKzcz Miw4IEBAIGxvZ2ljYWxyZXBfd29ya2VyX2NsZWFudXAoTG9naWNhbFJlcFdvcmtlciAqd29ya2Vy KQogCXdvcmtlci0+dXNlcmlkID0gSW52YWxpZE9pZDsKIAl3b3JrZXItPnN1YmlkID0gSW52YWxp ZE9pZDsKIAl3b3JrZXItPnJlbGlkID0gSW52YWxpZE9pZDsKKwl3b3JrZXItPmFwcGx5X2xlYWRl cl9waWQgPSBJbnZhbGlkUGlkOworCXdvcmtlci0+cGFyYWxsZWxfYXBwbHkgPSBmYWxzZTsKIH0K IAogLyoKQEAgLTY1Myw2ICs3NjUsMTMgQEAgbG9naWNhbHJlcF93b3JrZXJfb25leGl0KGludCBj b2RlLCBEYXR1bSBhcmcpCiAJaWYgKE15TG9naWNhbFJlcFdvcmtlci0+c3RyZWFtX2ZpbGVzZXQg IT0gTlVMTCkKIAkJRmlsZVNldERlbGV0ZUFsbChNeUxvZ2ljYWxSZXBXb3JrZXItPnN0cmVhbV9m aWxlc2V0KTsKIAorCS8qCisJICogU2Vzc2lvbiBsZXZlbCBsb2NrcyBtYXkgYmUgYWNxdWlyZWQg b3V0c2lkZSBvZiBhIHRyYW5zYWN0aW9uIGluCisJICogcGFyYWxsZWwgYXBwbHkgbW9kZSBhbmQg d2lsbCBub3QgYmUgcmVsZWFzZWQgd2hlbiB0aGUgd29ya2VyCisJICogdGVybWluYXRlcywgc28g bWFudWFsbHkgcmVsZWFzZSBhbGwgbG9ja3MgYmVmb3JlIHRoZSB3b3JrZXIgZXhpdHMuCisJICov CisJTG9ja1JlbGVhc2VBbGwoREVGQVVMVF9MT0NLTUVUSE9ELCB0cnVlKTsKKwogCUFwcGx5TGF1 bmNoZXJXYWtldXAoKTsKIH0KIApAQCAtNjgwLDYgKzc5OSwzMyBAQCBsb2dpY2FscmVwX3N5bmNf d29ya2VyX2NvdW50KE9pZCBzdWJpZCkKIAlyZXR1cm4gcmVzOwogfQogCisvKgorICogQ291bnQg dGhlIG51bWJlciBvZiByZWdpc3RlcmVkIChidXQgbm90IG5lY2Vzc2FyaWx5IHJ1bm5pbmcpIHBh cmFsbGVsIGFwcGx5CisgKiB3b3JrZXJzIGZvciBhIHN1YnNjcmlwdGlvbi4KKyAqLworc3RhdGlj IGludAorbG9naWNhbHJlcF9wYV93b3JrZXJfY291bnQoT2lkIHN1YmlkKQoreworCWludAkJCWk7 CisJaW50CQkJcmVzID0gMDsKKworCUFzc2VydChMV0xvY2tIZWxkQnlNZShMb2dpY2FsUmVwV29y a2VyTG9jaykpOworCisJLyoKKwkgKiBTY2FuIGFsbCBhdHRhY2hlZCBwYXJhbGxlbCBhcHBseSB3 b3JrZXJzLCBvbmx5IGNvdW50aW5nIHRob3NlIHdoaWNoCisJICogaGF2ZSB0aGUgZ2l2ZW4gc3Vi c2NyaXB0aW9uIGlkLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBtYXhfbG9naWNhbF9yZXBsaWNh dGlvbl93b3JrZXJzOyBpKyspCisJeworCQlMb2dpY2FsUmVwV29ya2VyICp3ID0gJkxvZ2ljYWxS ZXBDdHgtPndvcmtlcnNbaV07CisKKwkJaWYgKHctPnN1YmlkID09IHN1YmlkICYmIGlzUGFyYWxs ZWxBcHBseVdvcmtlcih3KSkKKwkJCXJlcysrOworCX0KKworCXJldHVybiByZXM7Cit9CisKIC8q CiAgKiBBcHBseUxhdW5jaGVyU2htZW1TaXplCiAgKgkJQ29tcHV0ZSBzcGFjZSBuZWVkZWQgZm9y IHJlcGxpY2F0aW9uIGxhdW5jaGVyIHNoYXJlZCBtZW1vcnkKQEAgLTg2OSw3ICsxMDE1LDcgQEAg QXBwbHlMYXVuY2hlck1haW4oRGF0dW0gbWFpbl9hcmcpCiAJCQkJCXdhaXRfdGltZSA9IHdhbF9y ZXRyaWV2ZV9yZXRyeV9pbnRlcnZhbDsKIAogCQkJCQlsb2dpY2FscmVwX3dvcmtlcl9sYXVuY2go c3ViLT5kYmlkLCBzdWItPm9pZCwgc3ViLT5uYW1lLAotCQkJCQkJCQkJCQkgc3ViLT5vd25lciwg SW52YWxpZE9pZCk7CisJCQkJCQkJCQkJCSBzdWItPm93bmVyLCBJbnZhbGlkT2lkLCBEU01fSEFO RExFX0lOVkFMSUQpOwogCQkJCX0KIAkJCX0KIApAQCAtOTUyLDYgKzEwOTgsMTAgQEAgcGdfc3Rh dF9nZXRfc3Vic2NyaXB0aW9uKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCWlmIChPaWRJc1ZhbGlkKHN1 YmlkKSAmJiB3b3JrZXIuc3ViaWQgIT0gc3ViaWQpCiAJCQljb250aW51ZTsKIAorCQkvKiBTa2lw IGlmIHRoaXMgaXMgYSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgKi8KKwkJaWYgKGlzUGFyYWxsZWxB cHBseVdvcmtlcigmd29ya2VyKSkKKwkJCWNvbnRpbnVlOworCiAJCXdvcmtlcl9waWQgPSB3b3Jr ZXIucHJvYy0+cGlkOwogCiAJCXZhbHVlc1swXSA9IE9iamVjdElkR2V0RGF0dW0od29ya2VyLnN1 YmlkKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbWVzb24u YnVpbGQgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL21lc29uLmJ1aWxkCmluZGV4 IDFiOWYwNzJlZGMuLmI3OGJmYmExMGMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0 aW9uL2xvZ2ljYWwvbWVzb24uYnVpbGQKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9n aWNhbC9tZXNvbi5idWlsZApAQCAtMSw2ICsxLDcgQEAKICMgQ29weXJpZ2h0IChjKSAyMDIyLCBQ b3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAogCiBiYWNrZW5kX3NvdXJjZXMgKz0g ZmlsZXMoCisgICdhcHBseXBhcmFsbGVsd29ya2VyLmMnLAogICAnZGVjb2RlLmMnLAogICAnbGF1 bmNoZXIuYycsCiAgICdsb2dpY2FsLmMnLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGlj YXRpb24vbG9naWNhbC9vcmlnaW4uYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwv b3JpZ2luLmMKaW5kZXggZjEzNGU0NDg3OC4uOGIwODM3ODY2NSAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9vcmlnaW4uYworKysgYi9zcmMvYmFja2VuZC9yZXBs aWNhdGlvbi9sb2dpY2FsL29yaWdpbi5jCkBAIC0xMDc1LDEyICsxMDc1LDIwIEBAIFJlcGxpY2F0 aW9uT3JpZ2luRXhpdENsZWFudXAoaW50IGNvZGUsIERhdHVtIGFyZykKICAqIGFycmF5IGRvZXNu J3QgaGF2ZSB0byBiZSBzZWFyY2hlZCB3aGVuIGNhbGxpbmcKICAqIHJlcGxvcmlnaW5fc2Vzc2lv bl9hZHZhbmNlKCkuCiAgKgotICogT2J2aW91c2x5IG9ubHkgb25lIHN1Y2ggY2FjaGVkIG9yaWdp biBjYW4gZXhpc3QgcGVyIHByb2Nlc3MgYW5kIHRoZSBjdXJyZW50Ci0gKiBjYWNoZWQgdmFsdWUg Y2FuIG9ubHkgYmUgc2V0IGFnYWluIGFmdGVyIHRoZSBwcmV2aW91cyB2YWx1ZSBpcyB0b3JuIGRv d24KLSAqIHdpdGggcmVwbG9yaWdpbl9zZXNzaW9uX3Jlc2V0KCkuCisgKiBOb3JtYWxseSBvbmx5 IG9uZSBzdWNoIGNhY2hlZCBvcmlnaW4gY2FuIGV4aXN0IHBlciBwcm9jZXNzIHNvIHRoZSBjYWNo ZWQKKyAqIHZhbHVlIGNhbiBvbmx5IGJlIHNldCBhZ2FpbiBhZnRlciB0aGUgcHJldmlvdXMgdmFs dWUgaXMgdG9ybiBkb3duIHdpdGgKKyAqIHJlcGxvcmlnaW5fc2Vzc2lvbl9yZXNldCgpLiBGb3Ig dGhpcyBub3JtYWwgY2FzZSBwYXNzIGFjcXVpcmVkX2J5ID0gMAorICogKG1lYW5pbmcgdGhlIHNs b3QgaXMgbm90IGFsbG93ZWQgdG8gYmUgYWxyZWFkeSBhY3F1aXJlZCBieSBhbm90aGVyIHByb2Nl c3MpLgorICoKKyAqIEhvd2V2ZXIsIHNvbWV0aW1lcyBtdWx0aXBsZSBwcm9jZXNzZXMgY2FuIHNh ZmVseSByZS11c2UgdGhlIHNhbWUgb3JpZ2luIHNsb3QKKyAqIChmb3IgZXhhbXBsZSwgbXVsdGlw bGUgcGFyYWxsZWwgYXBwbHkgcHJvY2Vzc2VzIGNhbiBzYWZlbHkgdXNlIHRoZSBzYW1lCisgKiBv cmlnaW4sIHByb3ZpZGVkIHRoZXkgbWFpbnRhaW4gY29tbWl0IG9yZGVyIGJ5IGFsbG93aW5nIG9u bHkgb25lIHByb2Nlc3MgdG8KKyAqIGNvbW1pdCBhdCBhIHRpbWUpLiBGb3IgdGhpcyBjYXNlIHRo ZSBmaXJzdCBwcm9jZXNzIG11c3QgcGFzcyBhY3F1aXJlZF9ieSA9CisgKiAwLCBhbmQgdGhlbiB0 aGUgb3RoZXIgcHJvY2Vzc2VzIHNoYXJpbmcgdGhhdCBzYW1lIG9yaWdpbiBjYW4gcGFzcworICog YWNxdWlyZWRfYnkgPSBQSUQgb2YgdGhlIGZpcnN0IHByb2Nlc3MuCiAgKi8KIHZvaWQKLXJlcGxv cmlnaW5fc2Vzc2lvbl9zZXR1cChSZXBPcmlnaW5JZCBub2RlKQorcmVwbG9yaWdpbl9zZXNzaW9u X3NldHVwKFJlcE9yaWdpbklkIG5vZGUsIGludCBhY3F1aXJlZF9ieSkKIHsKIAlzdGF0aWMgYm9v bCByZWdpc3RlcmVkX2NsZWFudXA7CiAJaW50CQkJaTsKQEAgLTExMjIsNyArMTEzMCw3IEBAIHJl cGxvcmlnaW5fc2Vzc2lvbl9zZXR1cChSZXBPcmlnaW5JZCBub2RlKQogCQlpZiAoY3Vyc3RhdGUt PnJvaWRlbnQgIT0gbm9kZSkKIAkJCWNvbnRpbnVlOwogCi0JCWVsc2UgaWYgKGN1cnN0YXRlLT5h Y3F1aXJlZF9ieSAhPSAwKQorCQllbHNlIGlmIChjdXJzdGF0ZS0+YWNxdWlyZWRfYnkgIT0gMCAm JiBhY3F1aXJlZF9ieSA9PSAwKQogCQl7CiAJCQllcmVwb3J0KEVSUk9SLAogCQkJCQkoZXJyY29k ZShFUlJDT0RFX09CSkVDVF9JTl9VU0UpLApAQCAtMTE1Myw3ICsxMTYxLDExIEBAIHJlcGxvcmln aW5fc2Vzc2lvbl9zZXR1cChSZXBPcmlnaW5JZCBub2RlKQogCiAJQXNzZXJ0KHNlc3Npb25fcmVw bGljYXRpb25fc3RhdGUtPnJvaWRlbnQgIT0gSW52YWxpZFJlcE9yaWdpbklkKTsKIAotCXNlc3Np b25fcmVwbGljYXRpb25fc3RhdGUtPmFjcXVpcmVkX2J5ID0gTXlQcm9jUGlkOworCWlmIChhY3F1 aXJlZF9ieSA9PSAwKQorCQlzZXNzaW9uX3JlcGxpY2F0aW9uX3N0YXRlLT5hY3F1aXJlZF9ieSA9 IE15UHJvY1BpZDsKKwllbHNlIGlmIChzZXNzaW9uX3JlcGxpY2F0aW9uX3N0YXRlLT5hY3F1aXJl ZF9ieSAhPSBhY3F1aXJlZF9ieSkKKwkJZWxvZyhFUlJPUiwgImNvdWxkIG5vdCBmaW5kIHJlcGxp Y2F0aW9uIHN0YXRlIHNsb3QgZm9yIHJlcGxpY2F0aW9uIG9yaWdpbiB3aXRoIE9JRCAldSB3aGlj aCB3YXMgYWNxdWlyZWQgYnkgJWQiLAorCQkJIG5vZGUsIGFjcXVpcmVkX2J5KTsKIAogCUxXTG9j a1JlbGVhc2UoUmVwbGljYXRpb25PcmlnaW5Mb2NrKTsKIApAQCAtMTMzNyw3ICsxMzQ5LDcgQEAg cGdfcmVwbGljYXRpb25fb3JpZ2luX3Nlc3Npb25fc2V0dXAoUEdfRlVOQ1RJT05fQVJHUykKIAog CW5hbWUgPSB0ZXh0X3RvX2NzdHJpbmcoKHRleHQgKikgRGF0dW1HZXRQb2ludGVyKFBHX0dFVEFS R19EQVRVTSgwKSkpOwogCW9yaWdpbiA9IHJlcGxvcmlnaW5fYnlfbmFtZShuYW1lLCBmYWxzZSk7 Ci0JcmVwbG9yaWdpbl9zZXNzaW9uX3NldHVwKG9yaWdpbik7CisJcmVwbG9yaWdpbl9zZXNzaW9u X3NldHVwKG9yaWdpbiwgMCk7CiAKIAlyZXBsb3JpZ2luX3Nlc3Npb25fb3JpZ2luID0gb3JpZ2lu OwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Byb3RvLmMg Yi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Byb3RvLmMKaW5kZXggZjVmMmJjMjRk OC4uNzIzYmE0NjY5YiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNh bC9wcm90by5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcHJvdG8uYwpA QCAtMTE2NCwxMCArMTE2NCwxNCBAQCBsb2dpY2FscmVwX3JlYWRfc3RyZWFtX2NvbW1pdChTdHJp bmdJbmZvIGluLCBMb2dpY2FsUmVwQ29tbWl0RGF0YSAqY29tbWl0X2RhdGEpCiAvKgogICogV3Jp dGUgU1RSRUFNIEFCT1JUIHRvIHRoZSBvdXRwdXQgc3RyZWFtLiBOb3RlIHRoYXQgeGlkIGFuZCBz dWJ4aWQgd2lsbCBiZQogICogc2FtZSBmb3IgdGhlIHRvcC1sZXZlbCB0cmFuc2FjdGlvbiBhYm9y dC4KKyAqCisgKiBJZiB3cml0ZV9hYm9ydF9pbmZvIGlzIHRydWUsIHNlbmQgdGhlIGFib3J0X2xz biBhbmQgYWJvcnRfdGltZSBmaWVsZHMsCisgKiBvdGhlcndpc2UgZG9uJ3QuCiAgKi8KIHZvaWQK IGxvZ2ljYWxyZXBfd3JpdGVfc3RyZWFtX2Fib3J0KFN0cmluZ0luZm8gb3V0LCBUcmFuc2FjdGlv bklkIHhpZCwKLQkJCQkJCQkgIFRyYW5zYWN0aW9uSWQgc3VieGlkKQorCQkJCQkJCSAgVHJhbnNh Y3Rpb25JZCBzdWJ4aWQsIFhMb2dSZWNQdHIgYWJvcnRfbHNuLAorCQkJCQkJCSAgVGltZXN0YW1w VHogYWJvcnRfdGltZSwgYm9vbCB3cml0ZV9hYm9ydF9pbmZvKQogewogCXBxX3NlbmRieXRlKG91 dCwgTE9HSUNBTF9SRVBfTVNHX1NUUkVBTV9BQk9SVCk7CiAKQEAgLTExNzYsMTkgKzExODAsNDAg QEAgbG9naWNhbHJlcF93cml0ZV9zdHJlYW1fYWJvcnQoU3RyaW5nSW5mbyBvdXQsIFRyYW5zYWN0 aW9uSWQgeGlkLAogCS8qIHRyYW5zYWN0aW9uIElEICovCiAJcHFfc2VuZGludDMyKG91dCwgeGlk KTsKIAlwcV9zZW5kaW50MzIob3V0LCBzdWJ4aWQpOworCisJaWYgKHdyaXRlX2Fib3J0X2luZm8p CisJeworCQlwcV9zZW5kaW50NjQob3V0LCBhYm9ydF9sc24pOworCQlwcV9zZW5kaW50NjQob3V0 LCBhYm9ydF90aW1lKTsKKwl9CiB9CiAKIC8qCiAgKiBSZWFkIFNUUkVBTSBBQk9SVCBmcm9tIHRo ZSBvdXRwdXQgc3RyZWFtLgorICoKKyAqIElmIHJlYWRfYWJvcnRfaW5mbyBpcyB0cnVlLCByZWFk IHRoZSBhYm9ydF9sc24gYW5kIGFib3J0X3RpbWUgZmllbGRzLAorICogb3RoZXJ3aXNlIGRvbid0 LgogICovCiB2b2lkCi1sb2dpY2FscmVwX3JlYWRfc3RyZWFtX2Fib3J0KFN0cmluZ0luZm8gaW4s IFRyYW5zYWN0aW9uSWQgKnhpZCwKLQkJCQkJCQkgVHJhbnNhY3Rpb25JZCAqc3VieGlkKQorbG9n aWNhbHJlcF9yZWFkX3N0cmVhbV9hYm9ydChTdHJpbmdJbmZvIGluLAorCQkJCQkJCSBMb2dpY2Fs UmVwU3RyZWFtQWJvcnREYXRhICphYm9ydF9kYXRhLAorCQkJCQkJCSBib29sIHJlYWRfYWJvcnRf aW5mbykKIHsKLQlBc3NlcnQoeGlkICYmIHN1YnhpZCk7CisJQXNzZXJ0KGFib3J0X2RhdGEpOwor CisJYWJvcnRfZGF0YS0+eGlkID0gcHFfZ2V0bXNnaW50KGluLCA0KTsKKwlhYm9ydF9kYXRhLT5z dWJ4aWQgPSBwcV9nZXRtc2dpbnQoaW4sIDQpOwogCi0JKnhpZCA9IHBxX2dldG1zZ2ludChpbiwg NCk7Ci0JKnN1YnhpZCA9IHBxX2dldG1zZ2ludChpbiwgNCk7CisJaWYgKHJlYWRfYWJvcnRfaW5m bykKKwl7CisJCWFib3J0X2RhdGEtPmFib3J0X2xzbiA9IHBxX2dldG1zZ2ludDY0KGluKTsKKwkJ YWJvcnRfZGF0YS0+YWJvcnRfdGltZSA9IHBxX2dldG1zZ2ludDY0KGluKTsKKwl9CisJZWxzZQor CXsKKwkJYWJvcnRfZGF0YS0+YWJvcnRfbHNuID0gSW52YWxpZFhMb2dSZWNQdHI7CisJCWFib3J0 X2RhdGEtPmFib3J0X3RpbWUgPSAwOworCX0KIH0KIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVvcmRlcmJ1ZmZlci5jIGIvc3JjL2JhY2tlbmQvcmVw bGljYXRpb24vbG9naWNhbC9yZW9yZGVyYnVmZmVyLmMKaW5kZXggOTIyMDRiZDljZC4uYmVjODkz ZGEwOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9yZW9yZGVy YnVmZmVyLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9yZW9yZGVyYnVm ZmVyLmMKQEAgLTI4NzMsNyArMjg3Myw4IEBAIFJlb3JkZXJCdWZmZXJGaW5pc2hQcmVwYXJlZChS ZW9yZGVyQnVmZmVyICpyYiwgVHJhbnNhY3Rpb25JZCB4aWQsCiAgKiBkaXNrLgogICovCiB2b2lk Ci1SZW9yZGVyQnVmZmVyQWJvcnQoUmVvcmRlckJ1ZmZlciAqcmIsIFRyYW5zYWN0aW9uSWQgeGlk LCBYTG9nUmVjUHRyIGxzbikKK1Jlb3JkZXJCdWZmZXJBYm9ydChSZW9yZGVyQnVmZmVyICpyYiwg VHJhbnNhY3Rpb25JZCB4aWQsIFhMb2dSZWNQdHIgbHNuLAorCQkJCSAgIFRpbWVzdGFtcFR6IGFi b3J0X3RpbWUpCiB7CiAJUmVvcmRlckJ1ZmZlclRYTiAqdHhuOwogCkBAIC0yODg0LDYgKzI4ODUs OCBAQCBSZW9yZGVyQnVmZmVyQWJvcnQoUmVvcmRlckJ1ZmZlciAqcmIsIFRyYW5zYWN0aW9uSWQg eGlkLCBYTG9nUmVjUHRyIGxzbikKIAlpZiAodHhuID09IE5VTEwpCiAJCXJldHVybjsKIAorCXR4 bi0+eGFjdF90aW1lLmFib3J0X3RpbWUgPSBhYm9ydF90aW1lOworCiAJLyogRm9yIHN0cmVhbWVk IHRyYW5zYWN0aW9ucyBub3RpZnkgdGhlIHJlbW90ZSBub2RlIGFib3V0IHRoZSBhYm9ydC4gKi8K IAlpZiAocmJ0eG5faXNfc3RyZWFtZWQodHhuKSkKIAl7CmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3RhYmxlc3luYy5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vbG9naWNhbC90YWJsZXN5bmMuYwppbmRleCA5NGU4MTNhYzUzLi5lZjBmZTEzYzE0IDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3RhYmxlc3luYy5jCisrKyBi L3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvdGFibGVzeW5jLmMKQEAgLTE0LDcgKzE0 LDcgQEAKICAqCSAgVGhlIGluaXRpYWwgZGF0YSBzeW5jaHJvbml6YXRpb24gaXMgZG9uZSBzZXBh cmF0ZWx5IGZvciBlYWNoIHRhYmxlLAogICoJICBpbiBhIHNlcGFyYXRlIGFwcGx5IHdvcmtlciB0 aGF0IG9ubHkgZmV0Y2hlcyB0aGUgaW5pdGlhbCBzbmFwc2hvdCBkYXRhCiAgKgkgIGZyb20gdGhl IHB1Ymxpc2hlciBhbmQgdGhlbiBzeW5jaHJvbml6ZXMgdGhlIHBvc2l0aW9uIGluIHRoZSBzdHJl YW0gd2l0aAotICoJICB0aGUgbWFpbiBhcHBseSB3b3JrZXIuCisgKgkgIHRoZSBsZWFkZXIgYXBw bHkgd29ya2VyLgogICoKICAqCSAgVGhlcmUgYXJlIHNldmVyYWwgcmVhc29ucyBmb3IgZG9pbmcg dGhlIHN5bmNocm9uaXphdGlvbiB0aGlzIHdheToKICAqCSAgIC0gSXQgYWxsb3dzIHVzIHRvIHBh cmFsbGVsaXplIHRoZSBpbml0aWFsIGRhdGEgc3luY2hyb25pemF0aW9uCkBAIC0xNTMsNyArMTUz LDcgQEAgZmluaXNoX3N5bmNfd29ya2VyKHZvaWQpCiAJCQkJCWdldF9yZWxfbmFtZShNeUxvZ2lj YWxSZXBXb3JrZXItPnJlbGlkKSkpKTsKIAlDb21taXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKIAot CS8qIEZpbmQgdGhlIG1haW4gYXBwbHkgd29ya2VyIGFuZCBzaWduYWwgaXQuICovCisJLyogRmlu ZCB0aGUgbGVhZGVyIGFwcGx5IHdvcmtlciBhbmQgc2lnbmFsIGl0LiAqLwogCWxvZ2ljYWxyZXBf d29ya2VyX3dha2V1cChNeUxvZ2ljYWxSZXBXb3JrZXItPnN1YmlkLCBJbnZhbGlkT2lkKTsKIAog CS8qIFN0b3AgZ3JhY2VmdWxseSAqLwpAQCAtNjA5LDcgKzYwOSw4IEBAIHByb2Nlc3Nfc3luY2lu Z190YWJsZXNfZm9yX2FwcGx5KFhMb2dSZWNQdHIgY3VycmVudF9sc24pCiAJCQkJCQkJCQkJCQkg TXlTdWJzY3JpcHRpb24tPm9pZCwKIAkJCQkJCQkJCQkJCSBNeVN1YnNjcmlwdGlvbi0+bmFtZSwK IAkJCQkJCQkJCQkJCSBNeUxvZ2ljYWxSZXBXb3JrZXItPnVzZXJpZCwKLQkJCQkJCQkJCQkJCSBy c3RhdGUtPnJlbGlkKTsKKwkJCQkJCQkJCQkJCSByc3RhdGUtPnJlbGlkLAorCQkJCQkJCQkJCQkJ IERTTV9IQU5ETEVfSU5WQUxJRCk7CiAJCQkJCQloZW50cnktPmxhc3Rfc3RhcnRfdGltZSA9IG5v dzsKIAkJCQkJfQogCQkJCX0KQEAgLTYzMCw2ICs2MzEsMTQgQEAgcHJvY2Vzc19zeW5jaW5nX3Rh Ymxlc19mb3JfYXBwbHkoWExvZ1JlY1B0ciBjdXJyZW50X2xzbikKIHZvaWQKIHByb2Nlc3Nfc3lu Y2luZ190YWJsZXMoWExvZ1JlY1B0ciBjdXJyZW50X2xzbikKIHsKKwkvKgorCSAqIFNraXAgZm9y IHBhcmFsbGVsIGFwcGx5IHdvcmtlcnMgYmVjYXVzZSB0aGV5IG9ubHkgb3BlcmF0ZSBvbiB0YWJs ZXMKKwkgKiB0aGF0IGFyZSBpbiBhIFJFQURZIHN0YXRlLiBTZWUgcGFfY2FuX3N0YXJ0KCkgYW5k CisJICogc2hvdWxkX2FwcGx5X2NoYW5nZXNfZm9yX3JlbCgpLgorCSAqLworCWlmIChhbV9wYXJh bGxlbF9hcHBseV93b3JrZXIoKSkKKwkJcmV0dXJuOworCiAJaWYgKGFtX3RhYmxlc3luY193b3Jr ZXIoKSkKIAkJcHJvY2Vzc19zeW5jaW5nX3RhYmxlc19mb3Jfc3luYyhjdXJyZW50X2xzbik7CiAJ ZWxzZQpAQCAtMTI0Nyw3ICsxMjU2LDcgQEAgTG9naWNhbFJlcFN5bmNUYWJsZVN0YXJ0KFhMb2dS ZWNQdHIgKm9yaWdpbl9zdGFydHBvcykKIAogCS8qCiAJICogSGVyZSB3ZSB1c2UgdGhlIHNsb3Qg bmFtZSBpbnN0ZWFkIG9mIHRoZSBzdWJzY3JpcHRpb24gbmFtZSBhcyB0aGUKLQkgKiBhcHBsaWNh dGlvbl9uYW1lLCBzbyB0aGF0IGl0IGlzIGRpZmZlcmVudCBmcm9tIHRoZSBtYWluIGFwcGx5IHdv cmtlciwKKwkgKiBhcHBsaWNhdGlvbl9uYW1lLCBzbyB0aGF0IGl0IGlzIGRpZmZlcmVudCBmcm9t IHRoZSBsZWFkZXIgYXBwbHkgd29ya2VyLAogCSAqIHNvIHRoYXQgc3luY2hyb25vdXMgcmVwbGlj YXRpb24gY2FuIGRpc3Rpbmd1aXNoIHRoZW0uCiAJICovCiAJTG9nUmVwV29ya2VyV2FsUmN2Q29u biA9CkBAIC0xMjk1LDcgKzEzMDQsNyBAQCBMb2dpY2FsUmVwU3luY1RhYmxlU3RhcnQoWExvZ1Jl Y1B0ciAqb3JpZ2luX3N0YXJ0cG9zKQogCQkgKiB0aW1lIHRoaXMgdGFibGVzeW5jIHdhcyBsYXVu Y2hlZC4KIAkJICovCiAJCW9yaWdpbmlkID0gcmVwbG9yaWdpbl9ieV9uYW1lKG9yaWdpbm5hbWUs IGZhbHNlKTsKLQkJcmVwbG9yaWdpbl9zZXNzaW9uX3NldHVwKG9yaWdpbmlkKTsKKwkJcmVwbG9y aWdpbl9zZXNzaW9uX3NldHVwKG9yaWdpbmlkLCAwKTsKIAkJcmVwbG9yaWdpbl9zZXNzaW9uX29y aWdpbiA9IG9yaWdpbmlkOwogCQkqb3JpZ2luX3N0YXJ0cG9zID0gcmVwbG9yaWdpbl9zZXNzaW9u X2dldF9wcm9ncmVzcyhmYWxzZSk7CiAKQEAgLTE0MDYsNyArMTQxNSw3IEBAIExvZ2ljYWxSZXBT eW5jVGFibGVTdGFydChYTG9nUmVjUHRyICpvcmlnaW5fc3RhcnRwb3MpCiAJCQkJCQkgICB0cnVl IC8qIGdvIGJhY2t3YXJkICovICwgdHJ1ZSAvKiBXQUwgbG9nICovICk7CiAJCVVubG9ja1JlbGF0 aW9uT2lkKFJlcGxpY2F0aW9uT3JpZ2luUmVsYXRpb25JZCwgUm93RXhjbHVzaXZlTG9jayk7CiAK LQkJcmVwbG9yaWdpbl9zZXNzaW9uX3NldHVwKG9yaWdpbmlkKTsKKwkJcmVwbG9yaWdpbl9zZXNz aW9uX3NldHVwKG9yaWdpbmlkLCAwKTsKIAkJcmVwbG9yaWdpbl9zZXNzaW9uX29yaWdpbiA9IG9y aWdpbmlkOwogCX0KIAllbHNlCkBAIC0xNDYxLDggKzE0NzAsOCBAQCBjb3B5X3RhYmxlX2RvbmU6 CiAJU3BpbkxvY2tSZWxlYXNlKCZNeUxvZ2ljYWxSZXBXb3JrZXItPnJlbG11dGV4KTsKIAogCS8q Ci0JICogRmluYWxseSwgd2FpdCB1bnRpbCB0aGUgbWFpbiBhcHBseSB3b3JrZXIgdGVsbHMgdXMg dG8gY2F0Y2ggdXAgYW5kIHRoZW4KLQkgKiByZXR1cm4gdG8gbGV0IExvZ2ljYWxSZXBBcHBseUxv b3AgZG8gaXQuCisJICogRmluYWxseSwgd2FpdCB1bnRpbCB0aGUgbGVhZGVyIGFwcGx5IHdvcmtl ciB0ZWxscyB1cyB0byBjYXRjaCB1cCBhbmQKKwkgKiB0aGVuIHJldHVybiB0byBsZXQgTG9naWNh bFJlcEFwcGx5TG9vcCBkbyBpdC4KIAkgKi8KIAl3YWl0X2Zvcl93b3JrZXJfc3RhdGVfY2hhbmdl KFNVQlJFTF9TVEFURV9DQVRDSFVQKTsKIAlyZXR1cm4gc2xvdG5hbWU7CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5jIGIvc3JjL2JhY2tlbmQvcmVw bGljYXRpb24vbG9naWNhbC93b3JrZXIuYwppbmRleCA5Njc3MmU0ZDczLi4zZGQ5ZTQzYzI4IDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5jCisrKyBi L3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMKQEAgLTIyLDggKzIyLDEy IEBACiAgKiBTVFJFQU1FRCBUUkFOU0FDVElPTlMKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQog ICogU3RyZWFtZWQgdHJhbnNhY3Rpb25zIChsYXJnZSB0cmFuc2FjdGlvbnMgZXhjZWVkaW5nIGEg bWVtb3J5IGxpbWl0IG9uIHRoZQotICogdXBzdHJlYW0pIGFyZSBub3QgYXBwbGllZCBpbW1lZGlh dGVseSwgYnV0IGluc3RlYWQsIHRoZSBkYXRhIGlzIHdyaXR0ZW4KLSAqIHRvIHRlbXBvcmFyeSBm aWxlcyBhbmQgdGhlbiBhcHBsaWVkIGF0IG9uY2Ugd2hlbiB0aGUgZmluYWwgY29tbWl0IGFycml2 ZXMuCisgKiB1cHN0cmVhbSkgYXJlIGFwcGxpZWQgdXNpbmcgb25lIG9mIHR3byBhcHByb2FjaGVz OgorICoKKyAqIDEpIFdyaXRlIHRvIHRlbXBvcmFyeSBmaWxlcyBhbmQgYXBwbHkgd2hlbiB0aGUg ZmluYWwgY29tbWl0IGFycml2ZXMKKyAqCisgKiBUaGlzIGFwcHJvYWNoIGlzIHVzZWQgd2hlbiB0 aGUgdXNlciBoYXMgc2V0IHRoZSBzdWJzY3JpcHRpb24ncyBzdHJlYW1pbmcKKyAqIG9wdGlvbiBh cyBvbi4KICAqCiAgKiBVbmxpa2UgdGhlIHJlZ3VsYXIgKG5vbi1zdHJlYW1lZCkgY2FzZSwgaGFu ZGxpbmcgc3RyZWFtZWQgdHJhbnNhY3Rpb25zIGhhcwogICogdG8gaGFuZGxlIGFib3J0cyBvZiBi b3RoIHRoZSB0b3BsZXZlbCB0cmFuc2FjdGlvbiBhbmQgc3VidHJhbnNhY3Rpb25zLiBUaGlzCkBA IC01MCw2ICs1NCwxMiBAQAogICogdGhlIGZpbGUgd2UgZGVzaXJlZCBhY3Jvc3MgbXVsdGlwbGUg c3RyZWFtLW9wZW4gY2FsbHMgZm9yIHRoZSBzYW1lCiAgKiB0cmFuc2FjdGlvbi4KICAqCisgKiAy KSBQYXJhbGxlbCBhcHBseSB3b3JrZXJzLgorICoKKyAqIFRoaXMgYXBwcm9hY2ggaXMgdXNlZCB3 aGVuIHRoZSB1c2VyIGhhcyBzZXQgdGhlIHN1YnNjcmlwdGlvbidzIHN0cmVhbWluZworICogb3B0 aW9uIGFzIHBhcmFsbGVsLiBTZWUgbG9naWNhbC9hcHBseXBhcmFsbGVsd29ya2VyLmMgZm9yIGlu Zm9ybWF0aW9uIGFib3V0CisgKiB0aGlzIGFwcHJvYWNoLgorICoKICAqIFRXT19QSEFTRSBUUkFO U0FDVElPTlMKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIFR3byBwaGFzZSB0cmFuc2Fj dGlvbnMgYXJlIHJlcGxheWVkIGF0IHByZXBhcmUgYW5kIHRoZW4gY29tbWl0dGVkIG9yCkBAIC0y MzMsNyArMjQzLDUyIEBAIHR5cGVkZWYgc3RydWN0IEFwcGx5RXJyb3JDYWxsYmFja0FyZwogCWNo YXIJICAgKm9yaWdpbl9uYW1lOwogfSBBcHBseUVycm9yQ2FsbGJhY2tBcmc7CiAKLXN0YXRpYyBB cHBseUVycm9yQ2FsbGJhY2tBcmcgYXBwbHlfZXJyb3JfY2FsbGJhY2tfYXJnID0KKy8qCisgKiBU aGUgYWN0aW9uIHRvIGJlIHRha2VuIGZvciB0aGUgY2hhbmdlcyBpbiB0aGUgdHJhbnNhY3Rpb24u CisgKgorICogVFJBTlNfTEVBREVSX0FQUExZOgorICogVGhpcyBhY3Rpb24gbWVhbnMgdGhhdCB3 ZSBhcmUgaW4gdGhlIGxlYWRlciBhcHBseSB3b3JrZXIgYW5kIGNoYW5nZXMgb2YgdGhlCisgKiB0 cmFuc2FjdGlvbiBhcmUgYXBwbGllZCBkaXJlY3RseSBieSB0aGUgd29ya2VyLgorICoKKyAqIFRS QU5TX0xFQURFUl9TRVJJQUxJWkU6CisgKiBUaGlzIGFjdGlvbiBtZWFucyB0aGF0IHdlIGFyZSBp biB0aGUgbGVhZGVyIGFwcGx5IHdvcmtlciBvciB0YWJsZSBzeW5jCisgKiB3b3JrZXIuIENoYW5n ZXMgYXJlIHdyaXR0ZW4gdG8gdGVtcG9yYXJ5IGZpbGVzIGFuZCB0aGVuIGFwcGxpZWQgd2hlbiB0 aGUKKyAqIGZpbmFsIGNvbW1pdCBhcnJpdmVzLgorICoKKyAqIFRSQU5TX0xFQURFUl9TRU5EX1RP X1BBUkFMTEVMOgorICogVGhpcyBhY3Rpb24gbWVhbnMgdGhhdCB3ZSBhcmUgaW4gdGhlIGxlYWRl ciBhcHBseSB3b3JrZXIgYW5kIG5lZWQgdG8gc2VuZAorICogdGhlIGNoYW5nZXMgdG8gdGhlIHBh cmFsbGVsIGFwcGx5IHdvcmtlci4KKyAqCisgKiBUUkFOU19MRUFERVJfUEFSVElBTF9TRVJJQUxJ WkU6CisgKiBUaGlzIGFjdGlvbiBtZWFucyB0aGF0IHdlIGFyZSBpbiB0aGUgbGVhZGVyIGFwcGx5 IHdvcmtlciBhbmQgaGF2ZSBzZW50IHNvbWUKKyAqIGNoYW5nZXMgZGlyZWN0bHkgdG8gdGhlIHBh cmFsbGVsIGFwcGx5IHdvcmtlciBhbmQgdGhlIHJlbWFpbmluZyBjaGFuZ2VzIGFyZQorICogc2Vy aWFsaXplZCB0byBhIGZpbGUsIGR1ZSB0byB0aW1lb3V0IHdoaWxlIHNlbmRpbmcgZGF0YS4gVGhl IHBhcmFsbGVsIGFwcGx5CisgKiB3b3JrZXIgd2lsbCBhcHBseSB0aGVzZSBzZXJpYWxpemVkIGNo YW5nZXMgd2hlbiB0aGUgZmluYWwgY29tbWl0IGFycml2ZXMuCisgKgorICogV2UgY2FuJ3QgdXNl IFRSQU5TX0xFQURFUl9TRVJJQUxJWkUgZm9yIHRoaXMgY2FzZSBiZWNhdXNlLCBpbiBhZGRpdGlv biB0bworICogc2VyaWFsaXppbmcgY2hhbmdlcywgdGhlIGxlYWRlciB3b3JrZXIgYWxzbyBuZWVk cyB0byBzZXJpYWxpemUgdGhlCisgKiBTVFJFQU1fWFhYIG1lc3NhZ2UgdG8gYSBmaWxlLCBhbmQg d2FpdCBmb3IgdGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtlciB0bworICogZmluaXNoIHRoZSB0cmFu c2FjdGlvbiB3aGVuIHByb2Nlc3NpbmcgdGhlIHRyYW5zYWN0aW9uIGZpbmlzaCBjb21tYW5kLiBT bworICogdGhpcyBuZXcgYWN0aW9uIHdhcyBpbnRyb2R1Y2VkIHRvIGtlZXAgdGhlIGNvZGUgYW5k IGxvZ2ljIGNsZWFyLgorICoKKyAqIFRSQU5TX1BBUkFMTEVMX0FQUExZOgorICogVGhpcyBhY3Rp b24gbWVhbnMgdGhhdCB3ZSBhcmUgaW4gdGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtlciBhbmQgY2hh bmdlcyBvZgorICogdGhlIHRyYW5zYWN0aW9uIGFyZSBhcHBsaWVkIGRpcmVjdGx5IGJ5IHRoZSB3 b3JrZXIuCisgKi8KK3R5cGVkZWYgZW51bQoreworCS8qIFRoZSBhY3Rpb24gZm9yIG5vbi1zdHJl YW1pbmcgdHJhbnNhY3Rpb25zLiAqLworCVRSQU5TX0xFQURFUl9BUFBMWSwKKworCS8qIEFjdGlv bnMgZm9yIHN0cmVhbWluZyB0cmFuc2FjdGlvbnMuICovCisJVFJBTlNfTEVBREVSX1NFUklBTEla RSwKKwlUUkFOU19MRUFERVJfU0VORF9UT19QQVJBTExFTCwKKwlUUkFOU19MRUFERVJfUEFSVElB TF9TRVJJQUxJWkUsCisJVFJBTlNfUEFSQUxMRUxfQVBQTFkKK30gVHJhbnNBcHBseUFjdGlvbjsK KworLyogZXJyY29udGV4dCB0cmFja2VyICovCitBcHBseUVycm9yQ2FsbGJhY2tBcmcgYXBwbHlf ZXJyb3JfY2FsbGJhY2tfYXJnID0KIHsKIAkuY29tbWFuZCA9IDAsCiAJLnJlbCA9IE5VTEwsCkBA IC0yNDMsNyArMjk4LDkgQEAgc3RhdGljIEFwcGx5RXJyb3JDYWxsYmFja0FyZyBhcHBseV9lcnJv cl9jYWxsYmFja19hcmcgPQogCS5vcmlnaW5fbmFtZSA9IE5VTEwsCiB9OwogCi1zdGF0aWMgTWVt b3J5Q29udGV4dCBBcHBseU1lc3NhZ2VDb250ZXh0ID0gTlVMTDsKK0Vycm9yQ29udGV4dENhbGxi YWNrICphcHBseV9lcnJvcl9jb250ZXh0X3N0YWNrID0gTlVMTDsKKworTWVtb3J5Q29udGV4dCBB cHBseU1lc3NhZ2VDb250ZXh0ID0gTlVMTDsKIE1lbW9yeUNvbnRleHQgQXBwbHlDb250ZXh0ID0g TlVMTDsKIAogLyogcGVyIHN0cmVhbSBjb250ZXh0IGZvciBzdHJlYW1pbmcgdHJhbnNhY3Rpb25z ICovCkBAIC0yNjIsMTcgKzMxOSwyNiBAQCBzdGF0aWMgYm9vbCBpbl9zdHJlYW1lZF90cmFuc2Fj dGlvbiA9IGZhbHNlOwogCiBzdGF0aWMgVHJhbnNhY3Rpb25JZCBzdHJlYW1feGlkID0gSW52YWxp ZFRyYW5zYWN0aW9uSWQ7CiAKKy8qCisgKiBUaGUgbnVtYmVyIG9mIGNoYW5nZXMgYXBwbGllZCBi eSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgZHVyaW5nIG9uZSBzdHJlYW1pbmcKKyAqIGJsb2NrLgor ICovCitzdGF0aWMgdWludDMyIHBhcmFsbGVsX3N0cmVhbV9uY2hhbmdlcyA9IDA7CisKIC8qCiAg KiBXZSBlbmFibGUgc2tpcHBpbmcgYWxsIGRhdGEgbW9kaWZpY2F0aW9uIGNoYW5nZXMgKElOU0VS VCwgVVBEQVRFLCBldGMuKSBmb3IKICAqIHRoZSBzdWJzY3JpcHRpb24gaWYgdGhlIHJlbW90ZSB0 cmFuc2FjdGlvbidzIGZpbmlzaCBMU04gbWF0Y2hlcyB0aGUgc3Vic2tpcGxzbi4KICAqIE9uY2Ug d2Ugc3RhcnQgc2tpcHBpbmcgY2hhbmdlcywgd2UgZG9uJ3Qgc3RvcCBpdCB1bnRpbCB3ZSBza2lw IGFsbCBjaGFuZ2VzIG9mCiAgKiB0aGUgdHJhbnNhY3Rpb24gZXZlbiBpZiBwZ19zdWJzY3JpcHRp b24gaXMgdXBkYXRlZCBhbmQgTXlTdWJzY3JpcHRpb24tPnNraXBsc24KLSAqIGdldHMgY2hhbmdl ZCBvciByZXNldCBkdXJpbmcgdGhhdC4gQWxzbywgaW4gc3RyZWFtaW5nIHRyYW5zYWN0aW9uIGNh c2VzLCB3ZQotICogZG9uJ3Qgc2tpcCByZWNlaXZpbmcgYW5kIHNwb29saW5nIHRoZSBjaGFuZ2Vz IHNpbmNlIHdlIGRlY2lkZSB3aGV0aGVyIG9yIG5vdAorICogZ2V0cyBjaGFuZ2VkIG9yIHJlc2V0 IGR1cmluZyB0aGF0LiBBbHNvLCBpbiBzdHJlYW1pbmcgdHJhbnNhY3Rpb24gY2FzZXMgKHN0cmVh bWluZyA9IG9uKSwKKyAqIHdlIGRvbid0IHNraXAgcmVjZWl2aW5nIGFuZCBzcG9vbGluZyB0aGUg Y2hhbmdlcyBzaW5jZSB3ZSBkZWNpZGUgd2hldGhlciBvciBub3QKICAqIHRvIHNraXAgYXBwbHlp bmcgdGhlIGNoYW5nZXMgd2hlbiBzdGFydGluZyB0byBhcHBseSBjaGFuZ2VzLiBUaGUgc3Vic2tp cGxzbiBpcwogICogY2xlYXJlZCBhZnRlciBzdWNjZXNzZnVsbHkgc2tpcHBpbmcgdGhlIHRyYW5z YWN0aW9uIG9yIGFwcGx5aW5nIG5vbi1lbXB0eQogICogdHJhbnNhY3Rpb24uIFRoZSBsYXR0ZXIg cHJldmVudHMgdGhlIG1pc3Rha2VubHkgc3BlY2lmaWVkIHN1YnNraXBsc24gZnJvbQotICogYmVp bmcgbGVmdC4KKyAqIGJlaW5nIGxlZnQuIE5vdGUgdGhhdCB3ZSBjYW5ub3Qgc2tpcCB0aGUgc3Ry ZWFtaW5nIHRyYW5zYWN0aW9ucyB3aGVuIHVzaW5nCisgKiBwYXJhbGxlbCBhcHBseSB3b3JrZXJz IGJlY2F1c2Ugd2UgY2Fubm90IGdldCB0aGUgZmluaXNoIExTTiBiZWZvcmUgYXBwbHlpbmcKKyAq IHRoZSBjaGFuZ2VzLiBTbywgd2UgZG9uJ3Qgc3RhcnQgcGFyYWxsZWwgYXBwbHkgd29ya2VyIHdo ZW4gZmluaXNoIExTTiBpcyBzZXQKKyAqIGJ5IHRoZSB1c2VyLgogICovCiBzdGF0aWMgWExvZ1Jl Y1B0ciBza2lwX3hhY3RfZmluaXNoX2xzbiA9IEludmFsaWRYTG9nUmVjUHRyOwogI2RlZmluZSBp c19za2lwcGluZ19jaGFuZ2VzKCkgKHVubGlrZWx5KCFYTG9nUmVjUHRySXNJbnZhbGlkKHNraXBf eGFjdF9maW5pc2hfbHNuKSkpCkBAIC0zMTIsMjMgKzM3OCwxNiBAQCBzdGF0aWMgaW5saW5lIHZv aWQgY2xlYW51cF9zdWJ4YWN0X2luZm8odm9pZCk7CiAvKgogICogU2VyaWFsaXplIGFuZCBkZXNl cmlhbGl6ZSBjaGFuZ2VzIGZvciBhIHRvcGxldmVsIHRyYW5zYWN0aW9uLgogICovCi1zdGF0aWMg dm9pZCBzdHJlYW1fY2xlYW51cF9maWxlcyhPaWQgc3ViaWQsIFRyYW5zYWN0aW9uSWQgeGlkKTsK IHN0YXRpYyB2b2lkIHN0cmVhbV9vcGVuX2ZpbGUoT2lkIHN1YmlkLCBUcmFuc2FjdGlvbklkIHhp ZCwKIAkJCQkJCQkgYm9vbCBmaXJzdF9zZWdtZW50KTsKIHN0YXRpYyB2b2lkIHN0cmVhbV93cml0 ZV9jaGFuZ2UoY2hhciBhY3Rpb24sIFN0cmluZ0luZm8gcyk7CitzdGF0aWMgdm9pZCBzdHJlYW1f b3Blbl9hbmRfd3JpdGVfY2hhbmdlKFRyYW5zYWN0aW9uSWQgeGlkLCBjaGFyIGFjdGlvbiwgU3Ry aW5nSW5mbyBzKTsKIHN0YXRpYyB2b2lkIHN0cmVhbV9jbG9zZV9maWxlKHZvaWQpOwogCiBzdGF0 aWMgdm9pZCBzZW5kX2ZlZWRiYWNrKFhMb2dSZWNQdHIgcmVjdnBvcywgYm9vbCBmb3JjZSwgYm9v bCByZXF1ZXN0UmVwbHkpOwogCi1zdGF0aWMgdm9pZCBzdG9yZV9mbHVzaF9wb3NpdGlvbihYTG9n UmVjUHRyIHJlbW90ZV9sc24pOwotCi1zdGF0aWMgdm9pZCBtYXliZV9yZXJlYWRfc3Vic2NyaXB0 aW9uKHZvaWQpOwotCiBzdGF0aWMgdm9pZCBEaXNhYmxlU3Vic2NyaXB0aW9uQW5kRXhpdCh2b2lk KTsKIAotLyogcHJvdG90eXBlIG5lZWRlZCBiZWNhdXNlIG9mIHN0cmVhbV9jb21taXQgKi8KLXN0 YXRpYyB2b2lkIGFwcGx5X2Rpc3BhdGNoKFN0cmluZ0luZm8gcyk7Ci0KIHN0YXRpYyB2b2lkIGFw cGx5X2hhbmRsZV9jb21taXRfaW50ZXJuYWwoTG9naWNhbFJlcENvbW1pdERhdGEgKmNvbW1pdF9k YXRhKTsKIHN0YXRpYyB2b2lkIGFwcGx5X2hhbmRsZV9pbnNlcnRfaW50ZXJuYWwoQXBwbHlFeGVj dXRpb25EYXRhICplZGF0YSwKIAkJCQkJCQkJCQkgUmVzdWx0UmVsSW5mbyAqcmVsaW5mbywKQEAg LTM1MiwxOSArNDExLDMyIEBAIHN0YXRpYyB2b2lkIGFwcGx5X2hhbmRsZV90dXBsZV9yb3V0aW5n KEFwcGx5RXhlY3V0aW9uRGF0YSAqZWRhdGEsCiAvKiBDb21wdXRlIEdJRCBmb3IgdHdvX3BoYXNl IHRyYW5zYWN0aW9ucyAqLwogc3RhdGljIHZvaWQgVHdvUGhhc2VUcmFuc2FjdGlvbkdpZChPaWQg c3ViaWQsIFRyYW5zYWN0aW9uSWQgeGlkLCBjaGFyICpnaWQsIGludCBzemdpZCk7CiAKLS8qIENv bW1vbiBzdHJlYW1pbmcgZnVuY3Rpb24gdG8gYXBwbHkgYWxsIHRoZSBzcG9vbGVkIG1lc3NhZ2Vz ICovCi1zdGF0aWMgdm9pZCBhcHBseV9zcG9vbGVkX21lc3NhZ2VzKFRyYW5zYWN0aW9uSWQgeGlk LCBYTG9nUmVjUHRyIGxzbik7Ci0KIC8qIEZ1bmN0aW9ucyBmb3Igc2tpcHBpbmcgY2hhbmdlcyAq Lwogc3RhdGljIHZvaWQgbWF5YmVfc3RhcnRfc2tpcHBpbmdfY2hhbmdlcyhYTG9nUmVjUHRyIGZp bmlzaF9sc24pOwogc3RhdGljIHZvaWQgc3RvcF9za2lwcGluZ19jaGFuZ2VzKHZvaWQpOwogc3Rh dGljIHZvaWQgY2xlYXJfc3Vic2NyaXB0aW9uX3NraXBfbHNuKFhMb2dSZWNQdHIgZmluaXNoX2xz bik7CiAKIC8qIEZ1bmN0aW9ucyBmb3IgYXBwbHkgZXJyb3IgY2FsbGJhY2sgKi8KLXN0YXRpYyB2 b2lkIGFwcGx5X2Vycm9yX2NhbGxiYWNrKHZvaWQgKmFyZyk7CiBzdGF0aWMgaW5saW5lIHZvaWQg c2V0X2FwcGx5X2Vycm9yX2NvbnRleHRfeGFjdChUcmFuc2FjdGlvbklkIHhpZCwgWExvZ1JlY1B0 ciBsc24pOwogc3RhdGljIGlubGluZSB2b2lkIHJlc2V0X2FwcGx5X2Vycm9yX2NvbnRleHRfaW5m byh2b2lkKTsKIAorc3RhdGljIFRyYW5zQXBwbHlBY3Rpb24gZ2V0X3RyYW5zYWN0aW9uX2FwcGx5 X2FjdGlvbihUcmFuc2FjdGlvbklkIHhpZCwKKwkJCQkJCQkJCQkJCQkgUGFyYWxsZWxBcHBseVdv cmtlckluZm8gKip3aW5mbyk7CisKKy8qCisgKiBSZXR1cm4gdGhlIG5hbWUgb2YgdGhlIGxvZ2lj YWwgcmVwbGljYXRpb24gd29ya2VyLgorICovCitzdGF0aWMgY29uc3QgY2hhciAqCitnZXRfd29y a2VyX25hbWUodm9pZCkKK3sKKwlpZiAoYW1fdGFibGVzeW5jX3dvcmtlcigpKQorCQlyZXR1cm4g XygibG9naWNhbCByZXBsaWNhdGlvbiB0YWJsZSBzeW5jaHJvbml6YXRpb24gd29ya2VyIik7CisJ ZWxzZSBpZiAoYW1fcGFyYWxsZWxfYXBwbHlfd29ya2VyKCkpCisJCXJldHVybiBfKCJsb2dpY2Fs IHJlcGxpY2F0aW9uIHBhcmFsbGVsIGFwcGx5IHdvcmtlciIpOworCWVsc2UKKwkJcmV0dXJuIF8o ImxvZ2ljYWwgcmVwbGljYXRpb24gYXBwbHkgd29ya2VyIik7Cit9CisKIC8qCiAgKiBGb3JtIHRo ZSBvcmlnaW4gbmFtZSBmb3IgdGhlIHN1YnNjcmlwdGlvbi4KICAqCkBAIC0zOTQsMTkgKzQ2Niw0 MyBAQCBSZXBsaWNhdGlvbk9yaWdpbk5hbWVGb3JMb2dpY2FsUmVwKE9pZCBzdWJvaWQsIE9pZCBy ZWxpZCwKICAqCiAgKiBUaGlzIGlzIG1haW5seSBuZWVkZWQgZm9yIGluaXRpYWwgcmVsYXRpb24g ZGF0YSBzeW5jIGFzIHRoYXQgcnVucyBpbgogICogc2VwYXJhdGUgd29ya2VyIHByb2Nlc3MgcnVu bmluZyBpbiBwYXJhbGxlbCBhbmQgd2UgbmVlZCBzb21lIHdheSB0byBza2lwCi0gKiBjaGFuZ2Vz IGNvbWluZyB0byB0aGUgbWFpbiBhcHBseSB3b3JrZXIgZHVyaW5nIHRoZSBzeW5jIG9mIGEgdGFi bGUuCisgKiBjaGFuZ2VzIGNvbWluZyB0byB0aGUgbGVhZGVyIGFwcGx5IHdvcmtlciBkdXJpbmcg dGhlIHN5bmMgb2YgYSB0YWJsZS4KICAqCiAgKiBOb3RlIHdlIG5lZWQgdG8gZG8gc21hbGxlciBv ciBlcXVhbHMgY29tcGFyaXNvbiBmb3IgU1lOQ0RPTkUgc3RhdGUgYmVjYXVzZQogICogaXQgbWln aHQgaG9sZCBwb3NpdGlvbiBvZiBlbmQgb2YgaW5pdGlhbCBzbG90IGNvbnNpc3RlbnQgcG9pbnQg V0FMCiAgKiByZWNvcmQgKyAxIChpZSBzdGFydCBvZiBuZXh0IHJlY29yZCkgYW5kIG5leHQgcmVj b3JkIGNhbiBiZSBDT01NSVQgb2YKICAqIHRyYW5zYWN0aW9uIHdlIGFyZSBub3cgcHJvY2Vzc2lu ZyAod2hpY2ggaXMgd2hhdCB3ZSBzZXQgcmVtb3RlX2ZpbmFsX2xzbgogICogdG8gaW4gYXBwbHlf aGFuZGxlX2JlZ2luKS4KKyAqCisgKiBOb3RlIHRoYXQgZm9yIHN0cmVhbWluZyB0cmFuc2FjdGlv bnMgdGhhdCBhcmUgYmVpbmcgYXBwbGllZCBpbiB0aGUgcGFyYWxsZWwKKyAqIGFwcGx5IHdvcmtl ciwgd2UgZGlzYWxsb3cgYXBwbHlpbmcgY2hhbmdlcyBpZiB0aGUgdGFyZ2V0IHRhYmxlIGluIHRo ZQorICogc3Vic2NyaXB0aW9uIGlzIG5vdCBpbiB0aGUgUkVBRFkgc3RhdGUsIGJlY2F1c2Ugd2Ug Y2Fubm90IGRlY2lkZSB3aGV0aGVyIHRvCisgKiBhcHBseSB0aGUgY2hhbmdlIGFzIHdlIHdvbid0 IGtub3cgcmVtb3RlX2ZpbmFsX2xzbiBieSB0aGF0IHRpbWUuCisgKgorICogV2UgYWxyZWFkeSBj aGVja2VkIHRoaXMgaW4gcGFfY2FuX3N0YXJ0KCkgYmVmb3JlIGFzc2lnbmluZyB0aGUKKyAqIHN0 cmVhbWluZyB0cmFuc2FjdGlvbiB0byB0aGUgcGFyYWxsZWwgd29ya2VyLCBidXQgaXQgYWxzbyBu ZWVkcyB0byBiZQorICogY2hlY2tlZCBoZXJlIGJlY2F1c2UgaWYgdGhlIHVzZXIgZXhlY3V0ZXMg QUxURVIgU1VCU0NSSVBUSU9OIC4uLiBSRUZSRVNICisgKiBQVUJMSUNBVElPTiBpbiBwYXJhbGxl bCwgdGhlIG5ldyB0YWJsZSBjYW4gYmUgYWRkZWQgdG8gcGdfc3Vic2NyaXB0aW9uX3JlbAorICog d2hpbGUgYXBwbHlpbmcgdGhpcyB0cmFuc2FjdGlvbi4KICAqLwogc3RhdGljIGJvb2wKIHNob3Vs ZF9hcHBseV9jaGFuZ2VzX2Zvcl9yZWwoTG9naWNhbFJlcFJlbE1hcEVudHJ5ICpyZWwpCiB7CiAJ aWYgKGFtX3RhYmxlc3luY193b3JrZXIoKSkKIAkJcmV0dXJuIE15TG9naWNhbFJlcFdvcmtlci0+ cmVsaWQgPT0gcmVsLT5sb2NhbHJlbG9pZDsKKwllbHNlIGlmIChhbV9wYXJhbGxlbF9hcHBseV93 b3JrZXIoKSkKKwl7CisJCS8qIFdlIGRvbid0IHN5bmNocm9uaXplIHJlbCdzIHRoYXQgYXJlIGlu IHVua25vd24gc3RhdGUuICovCisJCWlmIChyZWwtPnN0YXRlICE9IFNVQlJFTF9TVEFURV9SRUFE WSAmJgorCQkJcmVsLT5zdGF0ZSAhPSBTVUJSRUxfU1RBVEVfVU5LTk9XTikKKwkJCWVyZXBvcnQo RVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfT0JKRUNUX05PVF9JTl9QUkVSRVFVSVNJVEVf U1RBVEUpLAorCQkJCQkgZXJybXNnKCJsb2dpY2FsIHJlcGxpY2F0aW9uIHBhcmFsbGVsIGFwcGx5 IHdvcmtlciBmb3Igc3Vic2NyaXB0aW9uIFwiJXNcIiB3aWxsIHN0b3AiLAorCQkJCQkJCU15U3Vi c2NyaXB0aW9uLT5uYW1lKSwKKwkJCQkJIGVycmRldGFpbCgiQ2Fubm90IGhhbmRsZSBzdHJlYW1l ZCByZXBsaWNhdGlvbiB0cmFuc2FjdGlvbnMgdXNpbmcgcGFyYWxsZWwgYXBwbHkgd29ya2VycyB1 bnRpbCBhbGwgdGFibGVzIGhhdmUgYmVlbiBzeW5jaHJvbml6ZWQuIikpKTsKKworCQlyZXR1cm4g cmVsLT5zdGF0ZSA9PSBTVUJSRUxfU1RBVEVfUkVBRFk7CisJfQogCWVsc2UKIAkJcmV0dXJuIChy ZWwtPnN0YXRlID09IFNVQlJFTF9TVEFURV9SRUFEWSB8fAogCQkJCShyZWwtPnN0YXRlID09IFNV QlJFTF9TVEFURV9TWU5DRE9ORSAmJgpAQCAtNDUyLDQzICs1NDgsMTEwIEBAIGVuZF9yZXBsaWNh dGlvbl9zdGVwKHZvaWQpCiB9CiAKIC8qCi0gKiBIYW5kbGUgc3RyZWFtZWQgdHJhbnNhY3Rpb25z LgorICogSGFuZGxlIHN0cmVhbWVkIHRyYW5zYWN0aW9ucyBmb3IgYm90aCB0aGUgbGVhZGVyIGFw cGx5IHdvcmtlciBhbmQgdGhlCisgKiBwYXJhbGxlbCBhcHBseSB3b3JrZXJzLgorICoKKyAqIElu IHRoZSBzdHJlYW1pbmcgY2FzZSAocmVjZWl2aW5nIGEgYmxvY2sgb2YgdGhlIHN0cmVhbWVkIHRy YW5zYWN0aW9uKSwgZm9yCisgKiBzZXJpYWxpemUgbW9kZSwgc2ltcGx5IHJlZGlyZWN0IGl0IHRv IGEgZmlsZSBmb3IgdGhlIHByb3BlciB0b3BsZXZlbAorICogdHJhbnNhY3Rpb24sIGFuZCBmb3Ig cGFyYWxsZWwgbW9kZSwgdGhlIGxlYWRlciBhcHBseSB3b3JrZXIgd2lsbCBzZW5kIHRoZQorICog Y2hhbmdlcyB0byBwYXJhbGxlbCBhcHBseSB3b3JrZXJzIGFuZCB0aGUgcGFyYWxsZWwgYXBwbHkg d29ya2VyIHdpbGwgZGVmaW5lCisgKiBzYXZlcG9pbnRzIGlmIG5lZWRlZC4gKExPR0lDQUxfUkVQ X01TR19SRUxBVElPTiBvciBMT0dJQ0FMX1JFUF9NU0dfVFlQRQorICogbWVzc2FnZXMgd2lsbCBi ZSBhcHBsaWVkIGJ5IGJvdGggbGVhZGVyIGFwcGx5IHdvcmtlciBhbmQgcGFyYWxsZWwgYXBwbHkK KyAqIHdvcmtlcnMpLgogICoKLSAqIElmIGluIHN0cmVhbWluZyBtb2RlIChyZWNlaXZpbmcgYSBi bG9jayBvZiBzdHJlYW1lZCB0cmFuc2FjdGlvbiksIHdlCi0gKiBzaW1wbHkgcmVkaXJlY3QgaXQg dG8gYSBmaWxlIGZvciB0aGUgcHJvcGVyIHRvcGxldmVsIHRyYW5zYWN0aW9uLgorICogUmV0dXJu cyB0cnVlIGZvciBzdHJlYW1lZCB0cmFuc2FjdGlvbnMgKHdoZW4gdGhlIGNoYW5nZSBpcyBlaXRo ZXIgc2VyaWFsaXplZAorICogdG8gZmlsZSBvciBzZW50IHRvIHBhcmFsbGVsIGFwcGx5IHdvcmtl ciksIGZhbHNlIG90aGVyd2lzZSAocmVndWxhciBtb2RlIG9yCisgKiBuZWVkcyB0byBiZSBwcm9j ZXNzZWQgYnkgcGFyYWxsZWwgYXBwbHkgd29ya2VyKS4KICAqCi0gKiBSZXR1cm5zIHRydWUgZm9y IHN0cmVhbWVkIHRyYW5zYWN0aW9ucywgZmFsc2Ugb3RoZXJ3aXNlIChyZWd1bGFyIG1vZGUpLgor ICogRXhjZXB0aW9uOiBJZiB0aGUgbWVzc2FnZSBiZWluZyBwcm9jZXNzZWQgaXMgTE9HSUNBTF9S RVBfTVNHX1JFTEFUSU9OCisgKiBvciBMT0dJQ0FMX1JFUF9NU0dfVFlQRSwgcmV0dXJuIGZhbHNl IGV2ZW4gaWYgdGhlIG1lc3NhZ2UgbmVlZHMgdG8gYmUgc2VudAorICogdG8gYSBwYXJhbGxlbCBh cHBseSB3b3JrZXIuCiAgKi8KIHN0YXRpYyBib29sCiBoYW5kbGVfc3RyZWFtZWRfdHJhbnNhY3Rp b24oTG9naWNhbFJlcE1zZ1R5cGUgYWN0aW9uLCBTdHJpbmdJbmZvIHMpCiB7Ci0JVHJhbnNhY3Rp b25JZCB4aWQ7CisJVHJhbnNhY3Rpb25JZCBjdXJyZW50X3hpZDsKKwlQYXJhbGxlbEFwcGx5V29y a2VySW5mbyAqd2luZm87CisJVHJhbnNBcHBseUFjdGlvbiBhcHBseV9hY3Rpb247CisJU3RyaW5n SW5mb0RhdGEgb3JpZ2luYWxfbXNnOworCisJYXBwbHlfYWN0aW9uID0gZ2V0X3RyYW5zYWN0aW9u X2FwcGx5X2FjdGlvbihzdHJlYW1feGlkLCAmd2luZm8pOwogCiAJLyogbm90IGluIHN0cmVhbWlu ZyBtb2RlICovCi0JaWYgKCFpbl9zdHJlYW1lZF90cmFuc2FjdGlvbikKKwlpZiAoYXBwbHlfYWN0 aW9uID09IFRSQU5TX0xFQURFUl9BUFBMWSkKIAkJcmV0dXJuIGZhbHNlOwogCi0JQXNzZXJ0KHN0 cmVhbV9mZCAhPSBOVUxMKTsKIAlBc3NlcnQoVHJhbnNhY3Rpb25JZElzVmFsaWQoc3RyZWFtX3hp ZCkpOwogCisJLyoKKwkgKiBUaGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyIG5lZWRzIHRoZSB4aWQg aW4gdGhpcyBtZXNzYWdlIHRvIGRlY2lkZQorCSAqIHdoZXRoZXIgdG8gZGVmaW5lIGEgc2F2ZXBv aW50LCBzbyBzYXZlIHRoZSBvcmlnaW5hbCBtZXNzYWdlIHRoYXQgaGFzCisJICogbm90IG1vdmVk IHRoZSBjdXJzb3IgYWZ0ZXIgdGhlIHhpZC4gV2Ugd2lsbCBzZXJpYWxpemUgdGhpcyBtZXNzYWdl IHRvIGEKKwkgKiBmaWxlIGluIFBBUlRJQUxfU0VSSUFMSVpFIG1vZGUuCisJICovCisJb3JpZ2lu YWxfbXNnID0gKnM7CisKIAkvKgogCSAqIFdlIHNob3VsZCBoYXZlIHJlY2VpdmVkIFhJRCBvZiB0 aGUgc3VieGFjdCBhcyB0aGUgZmlyc3QgcGFydCBvZiB0aGUKIAkgKiBtZXNzYWdlLCBzbyBleHRy YWN0IGl0LgogCSAqLwotCXhpZCA9IHBxX2dldG1zZ2ludChzLCA0KTsKKwljdXJyZW50X3hpZCA9 IHBxX2dldG1zZ2ludChzLCA0KTsKIAotCWlmICghVHJhbnNhY3Rpb25JZElzVmFsaWQoeGlkKSkK KwlpZiAoIVRyYW5zYWN0aW9uSWRJc1ZhbGlkKGN1cnJlbnRfeGlkKSkKIAkJZXJlcG9ydChFUlJP UiwKIAkJCQkoZXJyY29kZShFUlJDT0RFX1BST1RPQ09MX1ZJT0xBVElPTiksCiAJCQkJIGVycm1z Z19pbnRlcm5hbCgiaW52YWxpZCB0cmFuc2FjdGlvbiBJRCBpbiBzdHJlYW1lZCByZXBsaWNhdGlv biB0cmFuc2FjdGlvbiIpKSk7CiAKLQkvKiBBZGQgdGhlIG5ldyBzdWJ4YWN0IHRvIHRoZSBhcnJh eSAodW5sZXNzIGFscmVhZHkgdGhlcmUpLiAqLwotCXN1YnhhY3RfaW5mb19hZGQoeGlkKTsKKwlz d2l0Y2ggKGFwcGx5X2FjdGlvbikKKwl7CisJCWNhc2UgVFJBTlNfTEVBREVSX1NFUklBTElaRToK KwkJCUFzc2VydChzdHJlYW1fZmQpOwogCi0JLyogd3JpdGUgdGhlIGNoYW5nZSB0byB0aGUgY3Vy cmVudCBmaWxlICovCi0Jc3RyZWFtX3dyaXRlX2NoYW5nZShhY3Rpb24sIHMpOworCQkJLyogQWRk IHRoZSBuZXcgc3VieGFjdCB0byB0aGUgYXJyYXkgKHVubGVzcyBhbHJlYWR5IHRoZXJlKS4gKi8K KwkJCXN1YnhhY3RfaW5mb19hZGQoY3VycmVudF94aWQpOworCisJCQkvKiBXcml0ZSB0aGUgY2hh bmdlIHRvIHRoZSBjdXJyZW50IGZpbGUgKi8KKwkJCXN0cmVhbV93cml0ZV9jaGFuZ2UoYWN0aW9u LCBzKTsKKwkJCXJldHVybiB0cnVlOworCisJCWNhc2UgVFJBTlNfTEVBREVSX1NFTkRfVE9fUEFS QUxMRUw6CisJCQlBc3NlcnQod2luZm8pOworCisJCQkvKgorCQkJICogWFhYIFRoZSBwdWJsaXNo ZXIgc2lkZSBkb2Vzbid0IGFsd2F5cyBzZW5kIHJlbGF0aW9uL3R5cGUgdXBkYXRlCisJCQkgKiBt ZXNzYWdlcyBhZnRlciB0aGUgc3RyZWFtaW5nIHRyYW5zYWN0aW9uLCBzbyBhbHNvIHVwZGF0ZSB0 aGUKKwkJCSAqIHJlbGF0aW9uL3R5cGUgaW4gbGVhZGVyIGFwcGx5IHdvcmtlci4gU2VlIGZ1bmN0 aW9uCisJCQkgKiBjbGVhbnVwX3JlbF9zeW5jX2NhY2hlLgorCQkJICovCisJCQlpZiAocGFfc2Vu ZF9kYXRhKHdpbmZvLCBzLT5sZW4sIHMtPmRhdGEpKQorCQkJCXJldHVybiAoYWN0aW9uICE9IExP R0lDQUxfUkVQX01TR19SRUxBVElPTiAmJgorCQkJCQkJYWN0aW9uICE9IExPR0lDQUxfUkVQX01T R19UWVBFKTsKKworCQkJLyoKKwkJCSAqIFN3aXRjaCB0byBzZXJpYWxpemUgbW9kZSB3aGVuIHdl IGFyZSBub3QgYWJsZSB0byBzZW5kIHRoZSBjaGFuZ2UKKwkJCSAqIHRvIHBhcmFsbGVsIGFwcGx5 IHdvcmtlci4KKwkJCSAqLworCQkJcGFfc3dpdGNoX3RvX3BhcnRpYWxfc2VyaWFsaXplKHdpbmZv LCBmYWxzZSk7CisKKwkJCS8qIGZhbGwgdGhyb3VnaCAqLworCQljYXNlIFRSQU5TX0xFQURFUl9Q QVJUSUFMX1NFUklBTElaRToKKwkJCXN0cmVhbV93cml0ZV9jaGFuZ2UoYWN0aW9uLCAmb3JpZ2lu YWxfbXNnKTsKIAotCXJldHVybiB0cnVlOworCQkJLyogU2FtZSByZWFzb24gYXMgVFJBTlNfTEVB REVSX1NFTkRfVE9fUEFSQUxMRUwgY2FzZS4gKi8KKwkJCXJldHVybiAoYWN0aW9uICE9IExPR0lD QUxfUkVQX01TR19SRUxBVElPTiAmJgorCQkJCQlhY3Rpb24gIT0gTE9HSUNBTF9SRVBfTVNHX1RZ UEUpOworCisJCWNhc2UgVFJBTlNfUEFSQUxMRUxfQVBQTFk6CisJCQlwYXJhbGxlbF9zdHJlYW1f bmNoYW5nZXMgKz0gMTsKKworCQkJLyogRGVmaW5lIGEgc2F2ZXBvaW50IGZvciBhIHN1YnhhY3Qg aWYgbmVlZGVkLiAqLworCQkJcGFfc3RhcnRfc3VidHJhbnMoY3VycmVudF94aWQsIHN0cmVhbV94 aWQpOworCQkJcmV0dXJuIGZhbHNlOworCisJCWRlZmF1bHQ6CisJCQlBc3NlcnQoZmFsc2UpOwor CQkJcmV0dXJuIGZhbHNlOwkJLyogc2lsZW5jZSBjb21waWxlciB3YXJuaW5nICovCisJfQogfQog CiAvKgpAQCAtOTI2LDggKzEwODksMTEgQEAgYXBwbHlfaGFuZGxlX3ByZXBhcmVfaW50ZXJuYWwo TG9naWNhbFJlcFByZXBhcmVkVHhuRGF0YSAqcHJlcGFyZV9kYXRhKQogCSAqIEJlZ2luVHJhbnNh Y3Rpb25CbG9jayBpcyBuZWNlc3NhcnkgdG8gYmFsYW5jZSB0aGUgRW5kVHJhbnNhY3Rpb25CbG9j awogCSAqIGNhbGxlZCB3aXRoaW4gdGhlIFByZXBhcmVUcmFuc2FjdGlvbkJsb2NrIGJlbG93Lgog CSAqLwotCUJlZ2luVHJhbnNhY3Rpb25CbG9jaygpOwotCUNvbW1pdFRyYW5zYWN0aW9uQ29tbWFu ZCgpOyAvKiBDb21wbGV0ZXMgdGhlIHByZWNlZGluZyBCZWdpbiBjb21tYW5kLiAqLworCWlmICgh SXNUcmFuc2FjdGlvbkJsb2NrKCkpCisJeworCQlCZWdpblRyYW5zYWN0aW9uQmxvY2soKTsKKwkJ Q29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7IC8qIENvbXBsZXRlcyB0aGUgcHJlY2VkaW5nIEJl Z2luIGNvbW1hbmQuICovCisJfQogCiAJLyoKIAkgKiBVcGRhdGUgb3JpZ2luIHN0YXRlIHNvIHdl IGNhbiByZXN0YXJ0IHN0cmVhbWluZyBmcm9tIGNvcnJlY3QgcG9zaXRpb24KQEAgLTk3NCw3ICsx MTQwLDcgQEAgYXBwbHlfaGFuZGxlX3ByZXBhcmUoU3RyaW5nSW5mbyBzKQogCUNvbW1pdFRyYW5z YWN0aW9uQ29tbWFuZCgpOwogCXBnc3RhdF9yZXBvcnRfc3RhdChmYWxzZSk7CiAKLQlzdG9yZV9m bHVzaF9wb3NpdGlvbihwcmVwYXJlX2RhdGEuZW5kX2xzbik7CisJc3RvcmVfZmx1c2hfcG9zaXRp b24ocHJlcGFyZV9kYXRhLmVuZF9sc24sIFhhY3RMYXN0Q29tbWl0RW5kKTsKIAogCWluX3JlbW90 ZV90cmFuc2FjdGlvbiA9IGZhbHNlOwogCkBAIC05OTYsNiArMTE2MiwxMiBAQCBhcHBseV9oYW5k bGVfcHJlcGFyZShTdHJpbmdJbmZvIHMpCiAKIC8qCiAgKiBIYW5kbGUgYSBDT01NSVQgUFJFUEFS RUQgb2YgYSBwcmV2aW91c2x5IFBSRVBBUkVEIHRyYW5zYWN0aW9uLgorICoKKyAqIE5vdGUgdGhh dCB3ZSBkb24ndCBuZWVkIHRvIHdhaXQgaGVyZSBpZiB0aGUgdHJhbnNhY3Rpb24gd2FzIHByZXBh cmVkIGluIGEKKyAqIHBhcmFsbGVsIGFwcGx5IHdvcmtlci4gSW4gdGhhdCBjYXNlLCB3ZSBoYXZl IGFscmVhZHkgd2FpdGVkIGZvciB0aGUgcHJlcGFyZQorICogdG8gZmluaXNoIGluIGFwcGx5X2hh bmRsZV9zdHJlYW1fcHJlcGFyZSgpIHdoaWNoIHdpbGwgZW5zdXJlIGFsbCB0aGUKKyAqIG9wZXJh dGlvbnMgaW4gdGhhdCB0cmFuc2FjdGlvbiBoYXZlIGhhcHBlbmVkIGluIHRoZSBzdWJzY3JpYmVy LCBzbyBubworICogY29uY3VycmVudCB0cmFuc2FjdGlvbiBjYW4gY2F1c2UgZGVhZGxvY2sgb3Ig dHJhbnNhY3Rpb24gZGVwZW5kZW5jeSBpc3N1ZXMuCiAgKi8KIHN0YXRpYyB2b2lkCiBhcHBseV9o YW5kbGVfY29tbWl0X3ByZXBhcmVkKFN0cmluZ0luZm8gcykKQEAgLTEwMjUsNyArMTE5Nyw3IEBA IGFwcGx5X2hhbmRsZV9jb21taXRfcHJlcGFyZWQoU3RyaW5nSW5mbyBzKQogCUNvbW1pdFRyYW5z YWN0aW9uQ29tbWFuZCgpOwogCXBnc3RhdF9yZXBvcnRfc3RhdChmYWxzZSk7CiAKLQlzdG9yZV9m bHVzaF9wb3NpdGlvbihwcmVwYXJlX2RhdGEuZW5kX2xzbik7CisJc3RvcmVfZmx1c2hfcG9zaXRp b24ocHJlcGFyZV9kYXRhLmVuZF9sc24sIFhhY3RMYXN0Q29tbWl0RW5kKTsKIAlpbl9yZW1vdGVf dHJhbnNhY3Rpb24gPSBmYWxzZTsKIAogCS8qIFByb2Nlc3MgYW55IHRhYmxlcyB0aGF0IGFyZSBi ZWluZyBzeW5jaHJvbml6ZWQgaW4gcGFyYWxsZWwuICovCkBAIC0xMDM5LDYgKzEyMTEsMTIgQEAg YXBwbHlfaGFuZGxlX2NvbW1pdF9wcmVwYXJlZChTdHJpbmdJbmZvIHMpCiAKIC8qCiAgKiBIYW5k bGUgYSBST0xMQkFDSyBQUkVQQVJFRCBvZiBhIHByZXZpb3VzbHkgUFJFUEFSRUQgVFJBTlNBQ1RJ T04uCisgKgorICogTm90ZSB0aGF0IHdlIGRvbid0IG5lZWQgdG8gd2FpdCBoZXJlIGlmIHRoZSB0 cmFuc2FjdGlvbiB3YXMgcHJlcGFyZWQgaW4gYQorICogcGFyYWxsZWwgYXBwbHkgd29ya2VyLiBJ biB0aGF0IGNhc2UsIHdlIGhhdmUgYWxyZWFkeSB3YWl0ZWQgZm9yIHRoZSBwcmVwYXJlCisgKiB0 byBmaW5pc2ggaW4gYXBwbHlfaGFuZGxlX3N0cmVhbV9wcmVwYXJlKCkgd2hpY2ggd2lsbCBlbnN1 cmUgYWxsIHRoZQorICogb3BlcmF0aW9ucyBpbiB0aGF0IHRyYW5zYWN0aW9uIGhhdmUgaGFwcGVu ZWQgaW4gdGhlIHN1YnNjcmliZXIsIHNvIG5vCisgKiBjb25jdXJyZW50IHRyYW5zYWN0aW9uIGNh biBjYXVzZSBkZWFkbG9jayBvciB0cmFuc2FjdGlvbiBkZXBlbmRlbmN5IGlzc3Vlcy4KICAqLwog c3RhdGljIHZvaWQKIGFwcGx5X2hhbmRsZV9yb2xsYmFja19wcmVwYXJlZChTdHJpbmdJbmZvIHMp CkBAIC0xMDgwLDcgKzEyNTgsNyBAQCBhcHBseV9oYW5kbGVfcm9sbGJhY2tfcHJlcGFyZWQoU3Ry aW5nSW5mbyBzKQogCiAJcGdzdGF0X3JlcG9ydF9zdGF0KGZhbHNlKTsKIAotCXN0b3JlX2ZsdXNo X3Bvc2l0aW9uKHJvbGxiYWNrX2RhdGEucm9sbGJhY2tfZW5kX2xzbik7CisJc3RvcmVfZmx1c2hf cG9zaXRpb24ocm9sbGJhY2tfZGF0YS5yb2xsYmFja19lbmRfbHNuLCBYYWN0TGFzdENvbW1pdEVu ZCk7CiAJaW5fcmVtb3RlX3RyYW5zYWN0aW9uID0gZmFsc2U7CiAKIAkvKiBQcm9jZXNzIGFueSB0 YWJsZXMgdGhhdCBhcmUgYmVpbmcgc3luY2hyb25pemVkIGluIHBhcmFsbGVsLiAqLwpAQCAtMTA5 MiwxNSArMTI3MCwxNiBAQCBhcHBseV9oYW5kbGVfcm9sbGJhY2tfcHJlcGFyZWQoU3RyaW5nSW5m byBzKQogCiAvKgogICogSGFuZGxlIFNUUkVBTSBQUkVQQVJFLgotICoKLSAqIExvZ2ljIGlzIGlu IHR3byBwYXJ0czoKLSAqIDEuIFJlcGxheSBhbGwgdGhlIHNwb29sZWQgb3BlcmF0aW9ucwotICog Mi4gTWFyayB0aGUgdHJhbnNhY3Rpb24gYXMgcHJlcGFyZWQKICAqLwogc3RhdGljIHZvaWQKIGFw cGx5X2hhbmRsZV9zdHJlYW1fcHJlcGFyZShTdHJpbmdJbmZvIHMpCiB7CiAJTG9naWNhbFJlcFBy ZXBhcmVkVHhuRGF0YSBwcmVwYXJlX2RhdGE7CisJUGFyYWxsZWxBcHBseVdvcmtlckluZm8gKndp bmZvOworCVRyYW5zQXBwbHlBY3Rpb24gYXBwbHlfYWN0aW9uOworCisJLyogU2F2ZSB0aGUgbWVz c2FnZSBiZWZvcmUgaXQgaXMgY29uc3VtZWQuICovCisJU3RyaW5nSW5mb0RhdGEgb3JpZ2luYWxf bXNnID0gKnM7CiAKIAlpZiAoaW5fc3RyZWFtZWRfdHJhbnNhY3Rpb24pCiAJCWVyZXBvcnQoRVJS T1IsCkBAIC0xMTE2LDI0ICsxMjk1LDk4IEBAIGFwcGx5X2hhbmRsZV9zdHJlYW1fcHJlcGFyZShT dHJpbmdJbmZvIHMpCiAJbG9naWNhbHJlcF9yZWFkX3N0cmVhbV9wcmVwYXJlKHMsICZwcmVwYXJl X2RhdGEpOwogCXNldF9hcHBseV9lcnJvcl9jb250ZXh0X3hhY3QocHJlcGFyZV9kYXRhLnhpZCwg cHJlcGFyZV9kYXRhLnByZXBhcmVfbHNuKTsKIAotCWVsb2coREVCVUcxLCAicmVjZWl2ZWQgcHJl cGFyZSBmb3Igc3RyZWFtZWQgdHJhbnNhY3Rpb24gJXUiLCBwcmVwYXJlX2RhdGEueGlkKTsKKwlh cHBseV9hY3Rpb24gPSBnZXRfdHJhbnNhY3Rpb25fYXBwbHlfYWN0aW9uKHByZXBhcmVfZGF0YS54 aWQsICZ3aW5mbyk7CiAKLQkvKiBSZXBsYXkgYWxsIHRoZSBzcG9vbGVkIG9wZXJhdGlvbnMuICov Ci0JYXBwbHlfc3Bvb2xlZF9tZXNzYWdlcyhwcmVwYXJlX2RhdGEueGlkLCBwcmVwYXJlX2RhdGEu cHJlcGFyZV9sc24pOworCXN3aXRjaCAoYXBwbHlfYWN0aW9uKQorCXsKKwkJY2FzZSBUUkFOU19M RUFERVJfU0VSSUFMSVpFOgogCi0JLyogTWFyayB0aGUgdHJhbnNhY3Rpb24gYXMgcHJlcGFyZWQu ICovCi0JYXBwbHlfaGFuZGxlX3ByZXBhcmVfaW50ZXJuYWwoJnByZXBhcmVfZGF0YSk7CisJCQkv KgorCQkJICogVGhlIHRyYW5zYWN0aW9uIGhhcyBiZWVuIHNlcmlhbGl6ZWQgdG8gZmlsZSwgc28g cmVwbGF5IGFsbCB0aGUKKwkJCSAqIHNwb29sZWQgb3BlcmF0aW9ucy4KKwkJCSAqLworCQkJYXBw bHlfc3Bvb2xlZF9tZXNzYWdlcyhNeUxvZ2ljYWxSZXBXb3JrZXItPnN0cmVhbV9maWxlc2V0LAor CQkJCQkJCQkgICBwcmVwYXJlX2RhdGEueGlkLCBwcmVwYXJlX2RhdGEucHJlcGFyZV9sc24pOwog Ci0JQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7CisJCQkvKiBNYXJrIHRoZSB0cmFuc2FjdGlv biBhcyBwcmVwYXJlZC4gKi8KKwkJCWFwcGx5X2hhbmRsZV9wcmVwYXJlX2ludGVybmFsKCZwcmVw YXJlX2RhdGEpOwogCi0JcGdzdGF0X3JlcG9ydF9zdGF0KGZhbHNlKTsKKwkJCUNvbW1pdFRyYW5z YWN0aW9uQ29tbWFuZCgpOwogCi0Jc3RvcmVfZmx1c2hfcG9zaXRpb24ocHJlcGFyZV9kYXRhLmVu ZF9sc24pOworCQkJc3RvcmVfZmx1c2hfcG9zaXRpb24ocHJlcGFyZV9kYXRhLmVuZF9sc24sIFhh Y3RMYXN0Q29tbWl0RW5kKTsKIAotCWluX3JlbW90ZV90cmFuc2FjdGlvbiA9IGZhbHNlOworCQkJ aW5fcmVtb3RlX3RyYW5zYWN0aW9uID0gZmFsc2U7CisKKwkJCS8qIFVubGluayB0aGUgZmlsZXMg d2l0aCBzZXJpYWxpemVkIGNoYW5nZXMgYW5kIHN1YnhhY3QgaW5mby4gKi8KKwkJCXN0cmVhbV9j bGVhbnVwX2ZpbGVzKE15TG9naWNhbFJlcFdvcmtlci0+c3ViaWQsIHByZXBhcmVfZGF0YS54aWQp OworCisJCQllbG9nKERFQlVHMSwgImZpbmlzaGVkIHByb2Nlc3NpbmcgdGhlIFNUUkVBTSBQUkVQ QVJFIGNvbW1hbmQiKTsKKwkJCWJyZWFrOwogCi0JLyogdW5saW5rIHRoZSBmaWxlcyB3aXRoIHNl cmlhbGl6ZWQgY2hhbmdlcyBhbmQgc3VieGFjdCBpbmZvLiAqLwotCXN0cmVhbV9jbGVhbnVwX2Zp bGVzKE15TG9naWNhbFJlcFdvcmtlci0+c3ViaWQsIHByZXBhcmVfZGF0YS54aWQpOworCQljYXNl IFRSQU5TX0xFQURFUl9TRU5EX1RPX1BBUkFMTEVMOgorCQkJQXNzZXJ0KHdpbmZvKTsKKworCQkJ aWYgKHBhX3NlbmRfZGF0YSh3aW5mbywgcy0+bGVuLCBzLT5kYXRhKSkKKwkJCXsKKwkJCQkvKiBG aW5pc2ggcHJvY2Vzc2luZyB0aGUgc3RyZWFtaW5nIHRyYW5zYWN0aW9uLiAqLworCQkJCXBhX3hh Y3RfZmluaXNoKHdpbmZvLCBwcmVwYXJlX2RhdGEuZW5kX2xzbik7CisJCQkJYnJlYWs7CisJCQl9 CisKKwkJCS8qCisJCQkgKiBTd2l0Y2ggdG8gc2VyaWFsaXplIG1vZGUgd2hlbiB3ZSBhcmUgbm90 IGFibGUgdG8gc2VuZCB0aGUgY2hhbmdlCisJCQkgKiB0byBwYXJhbGxlbCBhcHBseSB3b3JrZXIu CisJCQkgKi8KKwkJCXBhX3N3aXRjaF90b19wYXJ0aWFsX3NlcmlhbGl6ZSh3aW5mbywgdHJ1ZSk7 CisKKwkJCS8qIGZhbGwgdGhyb3VnaCAqLworCQljYXNlIFRSQU5TX0xFQURFUl9QQVJUSUFMX1NF UklBTElaRToKKwkJCUFzc2VydCh3aW5mbyk7CisKKwkJCXN0cmVhbV9vcGVuX2FuZF93cml0ZV9j aGFuZ2UocHJlcGFyZV9kYXRhLnhpZCwKKwkJCQkJCQkJCQkgTE9HSUNBTF9SRVBfTVNHX1NUUkVB TV9QUkVQQVJFLAorCQkJCQkJCQkJCSAmb3JpZ2luYWxfbXNnKTsKKworCQkJcGFfc2V0X2ZpbGVz ZXRfc3RhdGUod2luZm8tPnNoYXJlZCwgRlNfU0VSSUFMSVpFX0RPTkUpOworCisJCQkvKiBGaW5p c2ggcHJvY2Vzc2luZyB0aGUgc3RyZWFtaW5nIHRyYW5zYWN0aW9uLiAqLworCQkJcGFfeGFjdF9m aW5pc2god2luZm8sIHByZXBhcmVfZGF0YS5lbmRfbHNuKTsKKwkJCWJyZWFrOworCisJCWNhc2Ug VFJBTlNfUEFSQUxMRUxfQVBQTFk6CisKKwkJCS8qCisJCQkgKiBJZiB0aGUgcGFyYWxsZWwgYXBw bHkgd29ya2VyIGlzIGFwcGx5aW5nIHNwb29sZWQgbWVzc2FnZXMgdGhlbgorCQkJICogY2xvc2Ug dGhlIGZpbGUgYmVmb3JlIHByZXBhcmluZy4KKwkJCSAqLworCQkJaWYgKHN0cmVhbV9mZCkKKwkJ CQlzdHJlYW1fY2xvc2VfZmlsZSgpOworCisJCQliZWdpbl9yZXBsaWNhdGlvbl9zdGVwKCk7CisK KwkJCS8qIE1hcmsgdGhlIHRyYW5zYWN0aW9uIGFzIHByZXBhcmVkLiAqLworCQkJYXBwbHlfaGFu ZGxlX3ByZXBhcmVfaW50ZXJuYWwoJnByZXBhcmVfZGF0YSk7CisKKwkJCWVuZF9yZXBsaWNhdGlv bl9zdGVwKCk7CisKKwkJCUNvbW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgpOworCisJCQlNeVBhcmFs bGVsU2hhcmVkLT5sYXN0X2NvbW1pdF9lbmQgPSBYYWN0TGFzdENvbW1pdEVuZDsKKworCQkJcGFf c2V0X3hhY3Rfc3RhdGUoTXlQYXJhbGxlbFNoYXJlZCwgUEFSQUxMRUxfVFJBTlNfRklOSVNIRUQp OworCQkJcGFfdW5sb2NrX3RyYW5zYWN0aW9uKE15UGFyYWxsZWxTaGFyZWQtPnhpZCwgQWNjZXNz RXhjbHVzaXZlTG9jayk7CisKKwkJCXBhX3Jlc2V0X3N1YnRyYW5zKCk7CisKKwkJCWVsb2coREVC VUcxLCAiZmluaXNoZWQgcHJvY2Vzc2luZyB0aGUgU1RSRUFNIFBSRVBBUkUgY29tbWFuZCIpOwor CQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCUFzc2VydChmYWxzZSk7CisJCQlicmVhazsKKwl9 CisKKwlwZ3N0YXRfcmVwb3J0X3N0YXQoZmFsc2UpOwogCiAJLyogUHJvY2VzcyBhbnkgdGFibGVz IHRoYXQgYXJlIGJlaW5nIHN5bmNocm9uaXplZCBpbiBwYXJhbGxlbC4gKi8KIAlwcm9jZXNzX3N5 bmNpbmdfdGFibGVzKHByZXBhcmVfZGF0YS5lbmRfbHNuKTsKQEAgLTExNzAsNiArMTQyMyw0NyBA QCBhcHBseV9oYW5kbGVfb3JpZ2luKFN0cmluZ0luZm8gcykKIAkJCQkgZXJybXNnX2ludGVybmFs KCJPUklHSU4gbWVzc2FnZSBzZW50IG91dCBvZiBvcmRlciIpKSk7CiB9CiAKKy8qCisgKiBJbml0 aWFsaXplIGZpbGVzZXQgKGlmIG5vdCBhbHJlYWR5IGRvbmUpLgorICoKKyAqIENyZWF0ZSBhIG5l dyBmaWxlIHdoZW4gZmlyc3Rfc2VnbWVudCBpcyB0cnVlLCBvdGhlcndpc2Ugb3BlbiB0aGUgZXhp c3RpbmcKKyAqIGZpbGUuCisgKi8KK3ZvaWQKK3N0cmVhbV9zdGFydF9pbnRlcm5hbChUcmFuc2Fj dGlvbklkIHhpZCwgYm9vbCBmaXJzdF9zZWdtZW50KQoreworCWJlZ2luX3JlcGxpY2F0aW9uX3N0 ZXAoKTsKKworCS8qCisJICogSW5pdGlhbGl6ZSB0aGUgd29ya2VyJ3Mgc3RyZWFtX2ZpbGVzZXQg aWYgd2UgaGF2ZW4ndCB5ZXQuIFRoaXMgd2lsbCBiZQorCSAqIHVzZWQgZm9yIHRoZSBlbnRpcmUg ZHVyYXRpb24gb2YgdGhlIHdvcmtlciBzbyBjcmVhdGUgaXQgaW4gYSBwZXJtYW5lbnQKKwkgKiBj b250ZXh0LiBXZSBjcmVhdGUgdGhpcyBvbiB0aGUgdmVyeSBmaXJzdCBzdHJlYW1pbmcgbWVzc2Fn ZSBmcm9tIGFueQorCSAqIHRyYW5zYWN0aW9uIGFuZCB0aGVuIHVzZSBpdCBmb3IgdGhpcyBhbmQg b3RoZXIgc3RyZWFtaW5nIHRyYW5zYWN0aW9ucy4KKwkgKiBOb3csIHdlIGNvdWxkIGNyZWF0ZSBh IGZpbGVzZXQgYXQgdGhlIHN0YXJ0IG9mIHRoZSB3b3JrZXIgYXMgd2VsbCBidXQKKwkgKiB0aGVu IHdlIHdvbid0IGJlIHN1cmUgdGhhdCBpdCB3aWxsIGV2ZXIgYmUgdXNlZC4KKwkgKi8KKwlpZiAo IU15TG9naWNhbFJlcFdvcmtlci0+c3RyZWFtX2ZpbGVzZXQpCisJeworCQlNZW1vcnlDb250ZXh0 IG9sZGN0eDsKKworCQlvbGRjdHggPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oQXBwbHlDb250ZXh0 KTsKKworCQlNeUxvZ2ljYWxSZXBXb3JrZXItPnN0cmVhbV9maWxlc2V0ID0gcGFsbG9jKHNpemVv ZihGaWxlU2V0KSk7CisJCUZpbGVTZXRJbml0KE15TG9naWNhbFJlcFdvcmtlci0+c3RyZWFtX2Zp bGVzZXQpOworCisJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjdHgpOworCX0KKworCS8qIE9w ZW4gdGhlIHNwb29sIGZpbGUgZm9yIHRoaXMgdHJhbnNhY3Rpb24uICovCisJc3RyZWFtX29wZW5f ZmlsZShNeUxvZ2ljYWxSZXBXb3JrZXItPnN1YmlkLCB4aWQsIGZpcnN0X3NlZ21lbnQpOworCisJ LyogSWYgdGhpcyBpcyBub3QgdGhlIGZpcnN0IHNlZ21lbnQsIG9wZW4gZXhpc3Rpbmcgc3VieGFj dCBmaWxlLiAqLworCWlmICghZmlyc3Rfc2VnbWVudCkKKwkJc3VieGFjdF9pbmZvX3JlYWQoTXlM b2dpY2FsUmVwV29ya2VyLT5zdWJpZCwgeGlkKTsKKworCWVuZF9yZXBsaWNhdGlvbl9zdGVwKCk7 Cit9CisKIC8qCiAgKiBIYW5kbGUgU1RSRUFNIFNUQVJUIG1lc3NhZ2UuCiAgKi8KQEAgLTExNzcs MjEgKzE0NzEsMTcgQEAgc3RhdGljIHZvaWQKIGFwcGx5X2hhbmRsZV9zdHJlYW1fc3RhcnQoU3Ry aW5nSW5mbyBzKQogewogCWJvb2wJCWZpcnN0X3NlZ21lbnQ7CisJUGFyYWxsZWxBcHBseVdvcmtl ckluZm8gKndpbmZvOworCVRyYW5zQXBwbHlBY3Rpb24gYXBwbHlfYWN0aW9uOworCisJLyogU2F2 ZSB0aGUgbWVzc2FnZSBiZWZvcmUgaXQgaXMgY29uc3VtZWQuICovCisJU3RyaW5nSW5mb0RhdGEg b3JpZ2luYWxfbXNnID0gKnM7CiAKIAlpZiAoaW5fc3RyZWFtZWRfdHJhbnNhY3Rpb24pCiAJCWVy ZXBvcnQoRVJST1IsCiAJCQkJKGVycmNvZGUoRVJSQ09ERV9QUk9UT0NPTF9WSU9MQVRJT04pLAog CQkJCSBlcnJtc2dfaW50ZXJuYWwoImR1cGxpY2F0ZSBTVFJFQU0gU1RBUlQgbWVzc2FnZSIpKSk7 CiAKLQkvKgotCSAqIFN0YXJ0IGEgdHJhbnNhY3Rpb24gb24gc3RyZWFtIHN0YXJ0LCB0aGlzIHRy YW5zYWN0aW9uIHdpbGwgYmUgY29tbWl0dGVkCi0JICogb24gdGhlIHN0cmVhbSBzdG9wIHVubGVz cyBpdCBpcyBhIHRhYmxlc3luYyB3b3JrZXIgaW4gd2hpY2ggY2FzZSBpdAotCSAqIHdpbGwgYmUg Y29tbWl0dGVkIGFmdGVyIHByb2Nlc3NpbmcgYWxsIHRoZSBtZXNzYWdlcy4gV2UgbmVlZCB0aGUK LQkgKiB0cmFuc2FjdGlvbiBmb3IgaGFuZGxpbmcgdGhlIGJ1ZmZpbGUsIHVzZWQgZm9yIHNlcmlh bGl6aW5nIHRoZQotCSAqIHN0cmVhbWluZyBkYXRhIGFuZCBzdWJ4YWN0IGluZm8uCi0JICovCi0J YmVnaW5fcmVwbGljYXRpb25fc3RlcCgpOwotCiAJLyogbm90aWZ5IGhhbmRsZSBtZXRob2RzIHdl J3JlIHByb2Nlc3NpbmcgYSByZW1vdGUgdHJhbnNhY3Rpb24gKi8KIAlpbl9zdHJlYW1lZF90cmFu c2FjdGlvbiA9IHRydWU7CiAKQEAgLTEyMDUsNTQgKzE0OTUsMTEzIEBAIGFwcGx5X2hhbmRsZV9z dHJlYW1fc3RhcnQoU3RyaW5nSW5mbyBzKQogCiAJc2V0X2FwcGx5X2Vycm9yX2NvbnRleHRfeGFj dChzdHJlYW1feGlkLCBJbnZhbGlkWExvZ1JlY1B0cik7CiAKLQkvKgotCSAqIEluaXRpYWxpemUg dGhlIHdvcmtlcidzIHN0cmVhbV9maWxlc2V0IGlmIHdlIGhhdmVuJ3QgeWV0LiBUaGlzIHdpbGwg YmUKLQkgKiB1c2VkIGZvciB0aGUgZW50aXJlIGR1cmF0aW9uIG9mIHRoZSB3b3JrZXIgc28gY3Jl YXRlIGl0IGluIGEgcGVybWFuZW50Ci0JICogY29udGV4dC4gV2UgY3JlYXRlIHRoaXMgb24gdGhl IHZlcnkgZmlyc3Qgc3RyZWFtaW5nIG1lc3NhZ2UgZnJvbSBhbnkKLQkgKiB0cmFuc2FjdGlvbiBh bmQgdGhlbiB1c2UgaXQgZm9yIHRoaXMgYW5kIG90aGVyIHN0cmVhbWluZyB0cmFuc2FjdGlvbnMu Ci0JICogTm93LCB3ZSBjb3VsZCBjcmVhdGUgYSBmaWxlc2V0IGF0IHRoZSBzdGFydCBvZiB0aGUg d29ya2VyIGFzIHdlbGwgYnV0Ci0JICogdGhlbiB3ZSB3b24ndCBiZSBzdXJlIHRoYXQgaXQgd2ls bCBldmVyIGJlIHVzZWQuCi0JICovCi0JaWYgKE15TG9naWNhbFJlcFdvcmtlci0+c3RyZWFtX2Zp bGVzZXQgPT0gTlVMTCkKKwkvKiBUcnkgdG8gYWxsb2NhdGUgYSB3b3JrZXIgZm9yIHRoZSBzdHJl YW1pbmcgdHJhbnNhY3Rpb24uICovCisJaWYgKGZpcnN0X3NlZ21lbnQpCisJCXBhX2FsbG9jYXRl X3dvcmtlcihzdHJlYW1feGlkKTsKKworCWFwcGx5X2FjdGlvbiA9IGdldF90cmFuc2FjdGlvbl9h cHBseV9hY3Rpb24oc3RyZWFtX3hpZCwgJndpbmZvKTsKKworCXN3aXRjaCAoYXBwbHlfYWN0aW9u KQogCXsKLQkJTWVtb3J5Q29udGV4dCBvbGRjdHg7CisJCWNhc2UgVFJBTlNfTEVBREVSX1NFUklB TElaRToKIAotCQlvbGRjdHggPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oQXBwbHlDb250ZXh0KTsK KwkJCS8qCisJCQkgKiBGdW5jdGlvbiBzdHJlYW1fc3RhcnRfaW50ZXJuYWwgc3RhcnRzIGEgdHJh bnNhY3Rpb24uIFRoaXMKKwkJCSAqIHRyYW5zYWN0aW9uIHdpbGwgYmUgY29tbWl0dGVkIG9uIHRo ZSBzdHJlYW0gc3RvcCB1bmxlc3MgaXQgaXMgYQorCQkJICogdGFibGVzeW5jIHdvcmtlciBpbiB3 aGljaCBjYXNlIGl0IHdpbGwgYmUgY29tbWl0dGVkIGFmdGVyCisJCQkgKiBwcm9jZXNzaW5nIGFs bCB0aGUgbWVzc2FnZXMuIFdlIG5lZWQgdGhpcyB0cmFuc2FjdGlvbiBmb3IKKwkJCSAqIGhhbmRs aW5nIHRoZSBCdWZGaWxlLCB1c2VkIGZvciBzZXJpYWxpemluZyB0aGUgc3RyZWFtaW5nIGRhdGEK KwkJCSAqIGFuZCBzdWJ4YWN0IGluZm8uCisJCQkgKi8KKwkJCXN0cmVhbV9zdGFydF9pbnRlcm5h bChzdHJlYW1feGlkLCBmaXJzdF9zZWdtZW50KTsKKwkJCWJyZWFrOwogCi0JCU15TG9naWNhbFJl cFdvcmtlci0+c3RyZWFtX2ZpbGVzZXQgPSBwYWxsb2Moc2l6ZW9mKEZpbGVTZXQpKTsKLQkJRmls ZVNldEluaXQoTXlMb2dpY2FsUmVwV29ya2VyLT5zdHJlYW1fZmlsZXNldCk7CisJCWNhc2UgVFJB TlNfTEVBREVSX1NFTkRfVE9fUEFSQUxMRUw6CisJCQlBc3NlcnQod2luZm8pOwogCi0JCU1lbW9y eUNvbnRleHRTd2l0Y2hUbyhvbGRjdHgpOwotCX0KKwkJCS8qCisJCQkgKiBPbmNlIHdlIHN0YXJ0 IHNlcmlhbGl6aW5nIHRoZSBjaGFuZ2VzLCB0aGUgcGFyYWxsZWwgYXBwbHkKKwkJCSAqIHdvcmtl ciB3aWxsIHdhaXQgZm9yIHRoZSBsZWFkZXIgdG8gcmVsZWFzZSB0aGUgc3RyZWFtIGxvY2sKKwkJ CSAqIHVudGlsIHRoZSBlbmQgb2YgdGhlIHRyYW5zYWN0aW9uLiBTbywgd2UgZG9uJ3QgbmVlZCB0 byByZWxlYXNlCisJCQkgKiB0aGUgbG9jayBvciBpbmNyZW1lbnQgdGhlIHN0cmVhbSBjb3VudCBp biB0aGF0IGNhc2UuCisJCQkgKi8KKwkJCWlmIChwYV9zZW5kX2RhdGEod2luZm8sIHMtPmxlbiwg cy0+ZGF0YSkpCisJCQl7CisJCQkJLyoKKwkJCQkgKiBVbmxvY2sgdGhlIHNoYXJlZCBvYmplY3Qg bG9jayBzbyB0aGF0IHRoZSBwYXJhbGxlbCBhcHBseQorCQkJCSAqIHdvcmtlciBjYW4gY29udGlu dWUgdG8gcmVjZWl2ZSBjaGFuZ2VzLgorCQkJCSAqLworCQkJCWlmICghZmlyc3Rfc2VnbWVudCkK KwkJCQkJcGFfdW5sb2NrX3N0cmVhbSh3aW5mby0+c2hhcmVkLT54aWQsIEFjY2Vzc0V4Y2x1c2l2 ZUxvY2spOwogCi0JLyogb3BlbiB0aGUgc3Bvb2wgZmlsZSBmb3IgdGhpcyB0cmFuc2FjdGlvbiAq LwotCXN0cmVhbV9vcGVuX2ZpbGUoTXlMb2dpY2FsUmVwV29ya2VyLT5zdWJpZCwgc3RyZWFtX3hp ZCwgZmlyc3Rfc2VnbWVudCk7CisJCQkJLyoKKwkJCQkgKiBJbmNyZW1lbnQgdGhlIG51bWJlciBv ZiBzdHJlYW1pbmcgYmxvY2tzIHdhaXRpbmcgdG8gYmUKKwkJCQkgKiBwcm9jZXNzZWQgYnkgcGFy YWxsZWwgYXBwbHkgd29ya2VyLgorCQkJCSAqLworCQkJCXBnX2F0b21pY19hZGRfZmV0Y2hfdTMy KCZ3aW5mby0+c2hhcmVkLT5wZW5kaW5nX3N0cmVhbV9jb3VudCwgMSk7CiAKLQkvKiBpZiB0aGlz IGlzIG5vdCB0aGUgZmlyc3Qgc2VnbWVudCwgb3BlbiBleGlzdGluZyBzdWJ4YWN0IGZpbGUgKi8K LQlpZiAoIWZpcnN0X3NlZ21lbnQpCi0JCXN1YnhhY3RfaW5mb19yZWFkKE15TG9naWNhbFJlcFdv cmtlci0+c3ViaWQsIHN0cmVhbV94aWQpOworCQkJCS8qIENhY2hlIHRoZSBwYXJhbGxlbCBhcHBs eSB3b3JrZXIgZm9yIHRoaXMgdHJhbnNhY3Rpb24uICovCisJCQkJcGFfc2V0X3N0cmVhbV9hcHBs eV93b3JrZXIod2luZm8pOworCQkJCWJyZWFrOworCQkJfQogCi0JcGdzdGF0X3JlcG9ydF9hY3Rp dml0eShTVEFURV9SVU5OSU5HLCBOVUxMKTsKKwkJCS8qCisJCQkgKiBTd2l0Y2ggdG8gc2VyaWFs aXplIG1vZGUgd2hlbiB3ZSBhcmUgbm90IGFibGUgdG8gc2VuZCB0aGUgY2hhbmdlCisJCQkgKiB0 byBwYXJhbGxlbCBhcHBseSB3b3JrZXIuCisJCQkgKi8KKwkJCXBhX3N3aXRjaF90b19wYXJ0aWFs X3NlcmlhbGl6ZSh3aW5mbywgIWZpcnN0X3NlZ21lbnQpOwogCi0JZW5kX3JlcGxpY2F0aW9uX3N0 ZXAoKTsKKwkJCS8qIGZhbGwgdGhyb3VnaCAqLworCQljYXNlIFRSQU5TX0xFQURFUl9QQVJUSUFM X1NFUklBTElaRToKKwkJCUFzc2VydCh3aW5mbyk7CisKKwkJCS8qCisJCQkgKiBPcGVuIHRoZSBz cG9vbCBmaWxlIHVubGVzcyBpdCB3YXMgYWxyZWFkeSBvcGVuZWQgd2hlbiBzd2l0Y2hpbmcKKwkJ CSAqIHRvIHNlcmlhbGl6ZSBtb2RlLiBUaGUgdHJhbnNhY3Rpb24gc3RhcnRlZCBpbgorCQkJICog c3RyZWFtX3N0YXJ0X2ludGVybmFsIHdpbGwgYmUgY29tbWl0dGVkIG9uIHRoZSBzdHJlYW0gc3Rv cC4KKwkJCSAqLworCQkJaWYgKGFwcGx5X2FjdGlvbiAhPSBUUkFOU19MRUFERVJfU0VORF9UT19Q QVJBTExFTCkKKwkJCQlzdHJlYW1fc3RhcnRfaW50ZXJuYWwoc3RyZWFtX3hpZCwgZmlyc3Rfc2Vn bWVudCk7CisKKwkJCXN0cmVhbV93cml0ZV9jaGFuZ2UoTE9HSUNBTF9SRVBfTVNHX1NUUkVBTV9T VEFSVCwgJm9yaWdpbmFsX21zZyk7CisKKwkJCS8qIENhY2hlIHRoZSBwYXJhbGxlbCBhcHBseSB3 b3JrZXIgZm9yIHRoaXMgdHJhbnNhY3Rpb24uICovCisJCQlwYV9zZXRfc3RyZWFtX2FwcGx5X3dv cmtlcih3aW5mbyk7CisJCQlicmVhazsKKworCQljYXNlIFRSQU5TX1BBUkFMTEVMX0FQUExZOgor CQkJaWYgKGZpcnN0X3NlZ21lbnQpCisJCQl7CisJCQkJLyogSG9sZCB0aGUgbG9jayB1bnRpbCB0 aGUgZW5kIG9mIHRoZSB0cmFuc2FjdGlvbi4gKi8KKwkJCQlwYV9sb2NrX3RyYW5zYWN0aW9uKE15 UGFyYWxsZWxTaGFyZWQtPnhpZCwgQWNjZXNzRXhjbHVzaXZlTG9jayk7CisJCQkJcGFfc2V0X3hh Y3Rfc3RhdGUoTXlQYXJhbGxlbFNoYXJlZCwgUEFSQUxMRUxfVFJBTlNfU1RBUlRFRCk7CisJCQl9 CisKKwkJCXBhcmFsbGVsX3N0cmVhbV9uY2hhbmdlcyA9IDA7CisJCQlicmVhazsKKworCQlkZWZh dWx0OgorCQkJQXNzZXJ0KGZhbHNlKTsKKwkJCWJyZWFrOworCX0KKworCXBnc3RhdF9yZXBvcnRf YWN0aXZpdHkoU1RBVEVfUlVOTklORywgTlVMTCk7CiB9CiAKIC8qCi0gKiBIYW5kbGUgU1RSRUFN IFNUT1AgbWVzc2FnZS4KKyAqIFVwZGF0ZSB0aGUgaW5mb3JtYXRpb24gYWJvdXQgc3VieGFjdHMg YW5kIGNsb3NlIHRoZSBmaWxlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxl ZCB3aGVuIHRoZSBzdHJlYW1fc3RhcnRfaW50ZXJuYWwgZnVuY3Rpb24gaGFzCisgKiBiZWVuIGNh bGxlZC4KICAqLwotc3RhdGljIHZvaWQKLWFwcGx5X2hhbmRsZV9zdHJlYW1fc3RvcChTdHJpbmdJ bmZvIHMpCit2b2lkCitzdHJlYW1fc3RvcF9pbnRlcm5hbChUcmFuc2FjdGlvbklkIHhpZCkKIHsK LQlpZiAoIWluX3N0cmVhbWVkX3RyYW5zYWN0aW9uKQotCQllcmVwb3J0KEVSUk9SLAotCQkJCShl cnJjb2RlKEVSUkNPREVfUFJPVE9DT0xfVklPTEFUSU9OKSwKLQkJCQkgZXJybXNnX2ludGVybmFs KCJTVFJFQU0gU1RPUCBtZXNzYWdlIHdpdGhvdXQgU1RSRUFNIFNUQVJUIikpKTsKLQogCS8qCi0J ICogQ2xvc2UgdGhlIGZpbGUgd2l0aCBzZXJpYWxpemVkIGNoYW5nZXMsIGFuZCBzZXJpYWxpemUg aW5mb3JtYXRpb24gYWJvdXQKLQkgKiBzdWJ4YWN0cyBmb3IgdGhlIHRvcGxldmVsIHRyYW5zYWN0 aW9uLgorCSAqIFNlcmlhbGl6ZSBpbmZvcm1hdGlvbiBhYm91dCBzdWJ4YWN0cyBmb3IgdGhlIHRv cGxldmVsIHRyYW5zYWN0aW9uLCB0aGVuCisJICogY2xvc2UgdGhlIHN0cmVhbSBtZXNzYWdlcyBz cG9vbCBmaWxlLgogCSAqLwotCXN1YnhhY3RfaW5mb193cml0ZShNeUxvZ2ljYWxSZXBXb3JrZXIt PnN1YmlkLCBzdHJlYW1feGlkKTsKKwlzdWJ4YWN0X2luZm9fd3JpdGUoTXlMb2dpY2FsUmVwV29y a2VyLT5zdWJpZCwgeGlkKTsKIAlzdHJlYW1fY2xvc2VfZmlsZSgpOwogCiAJLyogV2UgbXVzdCBi ZSBpbiBhIHZhbGlkIHRyYW5zYWN0aW9uIHN0YXRlICovCkBAIC0xMjYxLDQwICsxNjEwLDEyNCBA QCBhcHBseV9oYW5kbGVfc3RyZWFtX3N0b3AoU3RyaW5nSW5mbyBzKQogCS8qIENvbW1pdCB0aGUg cGVyLXN0cmVhbSB0cmFuc2FjdGlvbiAqLwogCUNvbW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgpOwog Ci0JaW5fc3RyZWFtZWRfdHJhbnNhY3Rpb24gPSBmYWxzZTsKLQogCS8qIFJlc2V0IHBlci1zdHJl YW0gY29udGV4dCAqLwogCU1lbW9yeUNvbnRleHRSZXNldChMb2dpY2FsU3RyZWFtaW5nQ29udGV4 dCk7Ci0KLQlwZ3N0YXRfcmVwb3J0X2FjdGl2aXR5KFNUQVRFX0lETEUsIE5VTEwpOwotCXJlc2V0 X2FwcGx5X2Vycm9yX2NvbnRleHRfaW5mbygpOwogfQogCiAvKgotICogSGFuZGxlIFNUUkVBTSBh Ym9ydCBtZXNzYWdlLgorICogSGFuZGxlIFNUUkVBTSBTVE9QIG1lc3NhZ2UuCiAgKi8KIHN0YXRp YyB2b2lkCi1hcHBseV9oYW5kbGVfc3RyZWFtX2Fib3J0KFN0cmluZ0luZm8gcykKK2FwcGx5X2hh bmRsZV9zdHJlYW1fc3RvcChTdHJpbmdJbmZvIHMpCiB7Ci0JVHJhbnNhY3Rpb25JZCB4aWQ7Ci0J VHJhbnNhY3Rpb25JZCBzdWJ4aWQ7CisJUGFyYWxsZWxBcHBseVdvcmtlckluZm8gKndpbmZvOwor CVRyYW5zQXBwbHlBY3Rpb24gYXBwbHlfYWN0aW9uOwogCi0JaWYgKGluX3N0cmVhbWVkX3RyYW5z YWN0aW9uKQorCWlmICghaW5fc3RyZWFtZWRfdHJhbnNhY3Rpb24pCiAJCWVyZXBvcnQoRVJST1Is CiAJCQkJKGVycmNvZGUoRVJSQ09ERV9QUk9UT0NPTF9WSU9MQVRJT04pLAotCQkJCSBlcnJtc2df aW50ZXJuYWwoIlNUUkVBTSBBQk9SVCBtZXNzYWdlIHdpdGhvdXQgU1RSRUFNIFNUT1AiKSkpOwor CQkJCSBlcnJtc2dfaW50ZXJuYWwoIlNUUkVBTSBTVE9QIG1lc3NhZ2Ugd2l0aG91dCBTVFJFQU0g U1RBUlQiKSkpOworCisJYXBwbHlfYWN0aW9uID0gZ2V0X3RyYW5zYWN0aW9uX2FwcGx5X2FjdGlv bihzdHJlYW1feGlkLCAmd2luZm8pOworCisJc3dpdGNoIChhcHBseV9hY3Rpb24pCisJeworCQlj YXNlIFRSQU5TX0xFQURFUl9TRVJJQUxJWkU6CisJCQlzdHJlYW1fc3RvcF9pbnRlcm5hbChzdHJl YW1feGlkKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVFJBTlNfTEVBREVSX1NFTkRfVE9fUEFSQUxM RUw6CisJCQlBc3NlcnQod2luZm8pOworCisJCQkvKgorCQkJICogTG9jayBiZWZvcmUgc2VuZGlu ZyB0aGUgU1RSRUFNX1NUT1AgbWVzc2FnZSBzbyB0aGF0IHRoZSBsZWFkZXIKKwkJCSAqIGNhbiBo b2xkIHRoZSBsb2NrIGZpcnN0IGFuZCB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyIHdpbGwgd2Fp dAorCQkJICogZm9yIGxlYWRlciB0byByZWxlYXNlIHRoZSBsb2NrLiBTZWUgTG9ja2luZyBDb25z aWRlcmF0aW9ucyBhdG9wCisJCQkgKiBhcHBseXBhcmFsbGVsd29ya2VyLmMuCisJCQkgKi8KKwkJ CXBhX2xvY2tfc3RyZWFtKHdpbmZvLT5zaGFyZWQtPnhpZCwgQWNjZXNzRXhjbHVzaXZlTG9jayk7 CisKKwkJCWlmIChwYV9zZW5kX2RhdGEod2luZm8sIHMtPmxlbiwgcy0+ZGF0YSkpCisJCQl7CisJ CQkJcGFfc2V0X3N0cmVhbV9hcHBseV93b3JrZXIoTlVMTCk7CisJCQkJYnJlYWs7CisJCQl9CisK KwkJCS8qCisJCQkgKiBTd2l0Y2ggdG8gc2VyaWFsaXplIG1vZGUgd2hlbiB3ZSBhcmUgbm90IGFi bGUgdG8gc2VuZCB0aGUgY2hhbmdlCisJCQkgKiB0byBwYXJhbGxlbCBhcHBseSB3b3JrZXIuCisJ CQkgKi8KKwkJCXBhX3N3aXRjaF90b19wYXJ0aWFsX3NlcmlhbGl6ZSh3aW5mbywgdHJ1ZSk7CisK KwkJCS8qIGZhbGwgdGhyb3VnaCAqLworCQljYXNlIFRSQU5TX0xFQURFUl9QQVJUSUFMX1NFUklB TElaRToKKwkJCXN0cmVhbV93cml0ZV9jaGFuZ2UoTE9HSUNBTF9SRVBfTVNHX1NUUkVBTV9TVE9Q LCBzKTsKKwkJCXN0cmVhbV9zdG9wX2ludGVybmFsKHN0cmVhbV94aWQpOworCQkJcGFfc2V0X3N0 cmVhbV9hcHBseV93b3JrZXIoTlVMTCk7CisJCQlicmVhazsKKworCQljYXNlIFRSQU5TX1BBUkFM TEVMX0FQUExZOgorCQkJZWxvZyhERUJVRzEsICJhcHBsaWVkICV1IGNoYW5nZXMgaW4gdGhlIHN0 cmVhbWluZyBjaHVuayIsCisJCQkJIHBhcmFsbGVsX3N0cmVhbV9uY2hhbmdlcyk7CisKKwkJCS8q CisJCQkgKiBCeSB0aGUgdGltZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgaXMgcHJvY2Vzc2luZyB0 aGUgY2hhbmdlcyBpbgorCQkJICogdGhlIGN1cnJlbnQgc3RyZWFtaW5nIGJsb2NrLCB0aGUgbGVh ZGVyIGFwcGx5IHdvcmtlciBtYXkgaGF2ZQorCQkJICogc2VudCBtdWx0aXBsZSBzdHJlYW1pbmcg YmxvY2tzLiBUaGlzIGNhbiBsZWFkIHRvIHBhcmFsbGVsIGFwcGx5CisJCQkgKiB3b3JrZXIgc3Rh cnQgd2FpdGluZyBldmVuIHdoZW4gdGhlcmUgYXJlIG1vcmUgY2h1bmsgb2Ygc3RyZWFtcworCQkJ ICogaW4gdGhlIHF1ZXVlLiBTbywgdHJ5IHRvIGxvY2sgb25seSBpZiB0aGVyZSBpcyBubyBtZXNz YWdlIGxlZnQKKwkJCSAqIGluIHRoZSBxdWV1ZS4gU2VlIExvY2tpbmcgQ29uc2lkZXJhdGlvbnMg YXRvcAorCQkJICogYXBwbHlwYXJhbGxlbHdvcmtlci5jLgorCQkJICoKKwkJCSAqIE5vdGUgdGhh dCBoZXJlIHdlIGhhdmUgYSByYWNlIGNvbmRpdGlvbiB3aGVyZSB3ZSBjYW4gc3RhcnQKKwkJCSAq IHdhaXRpbmcgZXZlbiB3aGVuIHRoZXJlIGFyZSBwZW5kaW5nIHN0cmVhbWluZyBjaHVua3MuIFRo aXMgY2FuCisJCQkgKiBoYXBwZW4gaWYgdGhlIGxlYWRlciBzZW5kcyBhbm90aGVyIHN0cmVhbWlu ZyBibG9jayBhbmQgYWNxdWlyZXMKKwkJCSAqIHRoZSBzdHJlYW0gbG9jayBhZ2FpbiBhZnRlciB0 aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyIGNoZWNrcworCQkJICogdGhhdCB0aGVyZSBpcyBubyBw ZW5kaW5nIHN0cmVhbWluZyBibG9jayBhbmQgYmVmb3JlIGl0IGFjdHVhbGx5CisJCQkgKiBzdGFy dHMgd2FpdGluZyBvbiBhIGxvY2suIFdlIGNhbiBoYW5kbGUgdGhpcyBjYXNlIGJ5IG5vdAorCQkJ ICogYWxsb3dpbmcgdGhlIGxlYWRlciB0byBpbmNyZW1lbnQgdGhlIHN0cmVhbSBibG9jayBjb3Vu dCBkdXJpbmcKKwkJCSAqIHRoZSB0aW1lIHBhcmFsbGVsIGFwcGx5IHdvcmtlciBhY3F1aXJlcyB0 aGUgbG9jayBidXQgaXQgaXMgbm90CisJCQkgKiBjbGVhciB3aGV0aGVyIHRoYXQgaXMgd29ydGgg dGhlIGNvbXBsZXhpdHkuCisJCQkgKgorCQkJICogTm93LCBpZiB0aGlzIG1pc3NlZCBjaHVuayBj b250YWlucyByb2xsYmFjayB0byBzYXZlcG9pbnQsIHRoZW4KKwkJCSAqIHRoZXJlIGlzIGEgcmlz ayBvZiBkZWFkbG9jayB3aGljaCBwcm9iYWJseSBzaG91bGRuJ3QgaGFwcGVuCisJCQkgKiBhZnRl ciByZXN0YXJ0LgorCQkJICovCisJCQlwYV9kZWNyX2FuZF93YWl0X3N0cmVhbV9ibG9jaygpOwor CQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCUFzc2VydChmYWxzZSk7CisJCQlicmVhazsKKwl9 CisKKwlpbl9zdHJlYW1lZF90cmFuc2FjdGlvbiA9IGZhbHNlOworCisJLyoKKwkgKiBUaGUgcGFy YWxsZWwgYXBwbHkgd29ya2VyIGNvdWxkIGJlIGluIGEgdHJhbnNhY3Rpb24gaW4gd2hpY2ggY2Fz ZSB3ZQorCSAqIG5lZWQgdG8gcmVwb3J0IHRoZSBzdGF0ZSBhcyBTVEFURV9JRExFSU5UUkFOU0FD VElPTi4KKwkgKi8KKwlpZiAoSXNUcmFuc2FjdGlvbk9yVHJhbnNhY3Rpb25CbG9jaygpKQorCQlw Z3N0YXRfcmVwb3J0X2FjdGl2aXR5KFNUQVRFX0lETEVJTlRSQU5TQUNUSU9OLCBOVUxMKTsKKwll bHNlCisJCXBnc3RhdF9yZXBvcnRfYWN0aXZpdHkoU1RBVEVfSURMRSwgTlVMTCk7CiAKLQlsb2dp Y2FscmVwX3JlYWRfc3RyZWFtX2Fib3J0KHMsICZ4aWQsICZzdWJ4aWQpOworCXJlc2V0X2FwcGx5 X2Vycm9yX2NvbnRleHRfaW5mbygpOworfQogCisvKgorICogSGVscGVyIGZ1bmN0aW9uIHRvIGhh bmRsZSBTVFJFQU0gQUJPUlQgbWVzc2FnZSB3aGVuIHRoZSB0cmFuc2FjdGlvbiB3YXMKKyAqIHNl cmlhbGl6ZWQgdG8gZmlsZS4KKyAqLworc3RhdGljIHZvaWQKK3N0cmVhbV9hYm9ydF9pbnRlcm5h bChUcmFuc2FjdGlvbklkIHhpZCwgVHJhbnNhY3Rpb25JZCBzdWJ4aWQpCit7CiAJLyoKIAkgKiBJ ZiB0aGUgdHdvIFhJRHMgYXJlIHRoZSBzYW1lLCBpdCdzIGluIGZhY3QgYWJvcnQgb2YgdG9wbGV2 ZWwgeGFjdCwgc28KIAkgKiBqdXN0IGRlbGV0ZSB0aGUgZmlsZXMgd2l0aCBzZXJpYWxpemVkIGlu Zm8uCiAJICovCiAJaWYgKHhpZCA9PSBzdWJ4aWQpCi0JewotCQlzZXRfYXBwbHlfZXJyb3JfY29u dGV4dF94YWN0KHhpZCwgSW52YWxpZFhMb2dSZWNQdHIpOwogCQlzdHJlYW1fY2xlYW51cF9maWxl cyhNeUxvZ2ljYWxSZXBXb3JrZXItPnN1YmlkLCB4aWQpOwotCX0KIAllbHNlCiAJewogCQkvKgpA QCAtMTMxOCw4ICsxNzUxLDYgQEAgYXBwbHlfaGFuZGxlX3N0cmVhbV9hYm9ydChTdHJpbmdJbmZv IHMpCiAJCWJvb2wJCWZvdW5kID0gZmFsc2U7CiAJCWNoYXIJCXBhdGhbTUFYUEdQQVRIXTsKIAot CQlzZXRfYXBwbHlfZXJyb3JfY29udGV4dF94YWN0KHN1YnhpZCwgSW52YWxpZFhMb2dSZWNQdHIp OwotCiAJCXN1YmlkeCA9IC0xOwogCQliZWdpbl9yZXBsaWNhdGlvbl9zdGVwKCk7CiAJCXN1Ynhh Y3RfaW5mb19yZWFkKE15TG9naWNhbFJlcFdvcmtlci0+c3ViaWQsIHhpZCk7CkBAIC0xMzQ0LDQ3 ICsxNzc1LDIzNyBAQCBhcHBseV9oYW5kbGVfc3RyZWFtX2Fib3J0KFN0cmluZ0luZm8gcykKIAkJ CWNsZWFudXBfc3VieGFjdF9pbmZvKCk7CiAJCQllbmRfcmVwbGljYXRpb25fc3RlcCgpOwogCQkJ Q29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7Ci0JCQlyZXNldF9hcHBseV9lcnJvcl9jb250ZXh0 X2luZm8oKTsKIAkJCXJldHVybjsKIAkJfQogCi0JCS8qIG9wZW4gdGhlIGNoYW5nZXMgZmlsZSAq LwotCQljaGFuZ2VzX2ZpbGVuYW1lKHBhdGgsIE15TG9naWNhbFJlcFdvcmtlci0+c3ViaWQsIHhp ZCk7Ci0JCWZkID0gQnVmRmlsZU9wZW5GaWxlU2V0KE15TG9naWNhbFJlcFdvcmtlci0+c3RyZWFt X2ZpbGVzZXQsIHBhdGgsCi0JCQkJCQkJCU9fUkRXUiwgZmFsc2UpOworCQkvKiBvcGVuIHRoZSBj aGFuZ2VzIGZpbGUgKi8KKwkJY2hhbmdlc19maWxlbmFtZShwYXRoLCBNeUxvZ2ljYWxSZXBXb3Jr ZXItPnN1YmlkLCB4aWQpOworCQlmZCA9IEJ1ZkZpbGVPcGVuRmlsZVNldChNeUxvZ2ljYWxSZXBX b3JrZXItPnN0cmVhbV9maWxlc2V0LCBwYXRoLAorCQkJCQkJCQlPX1JEV1IsIGZhbHNlKTsKKwor CQkvKiBPSywgdHJ1bmNhdGUgdGhlIGZpbGUgYXQgdGhlIHJpZ2h0IG9mZnNldCAqLworCQlCdWZG aWxlVHJ1bmNhdGVGaWxlU2V0KGZkLCBzdWJ4YWN0X2RhdGEuc3VieGFjdHNbc3ViaWR4XS5maWxl bm8sCisJCQkJCQkJICAgc3VieGFjdF9kYXRhLnN1YnhhY3RzW3N1YmlkeF0ub2Zmc2V0KTsKKwkJ QnVmRmlsZUNsb3NlKGZkKTsKKworCQkvKiBkaXNjYXJkIHRoZSBzdWJ4YWN0cyBhZGRlZCBsYXRl ciAqLworCQlzdWJ4YWN0X2RhdGEubnN1YnhhY3RzID0gc3ViaWR4OworCisJCS8qIHdyaXRlIHRo ZSB1cGRhdGVkIHN1YnhhY3QgbGlzdCAqLworCQlzdWJ4YWN0X2luZm9fd3JpdGUoTXlMb2dpY2Fs UmVwV29ya2VyLT5zdWJpZCwgeGlkKTsKKworCQllbmRfcmVwbGljYXRpb25fc3RlcCgpOworCQlD b21taXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKKwl9Cit9CisKKy8qCisgKiBIYW5kbGUgU1RSRUFN IEFCT1JUIG1lc3NhZ2UuCisgKi8KK3N0YXRpYyB2b2lkCithcHBseV9oYW5kbGVfc3RyZWFtX2Fi b3J0KFN0cmluZ0luZm8gcykKK3sKKwlUcmFuc2FjdGlvbklkIHhpZDsKKwlUcmFuc2FjdGlvbklk IHN1YnhpZDsKKwlMb2dpY2FsUmVwU3RyZWFtQWJvcnREYXRhIGFib3J0X2RhdGE7CisJUGFyYWxs ZWxBcHBseVdvcmtlckluZm8gKndpbmZvOworCVRyYW5zQXBwbHlBY3Rpb24gYXBwbHlfYWN0aW9u OworCisJLyogU2F2ZSB0aGUgbWVzc2FnZSBiZWZvcmUgaXQgaXMgY29uc3VtZWQuICovCisJU3Ry aW5nSW5mb0RhdGEgb3JpZ2luYWxfbXNnID0gKnM7CisJYm9vbAkJdG9wbGV2ZWxfeGFjdDsKKwor CWlmIChpbl9zdHJlYW1lZF90cmFuc2FjdGlvbikKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJy Y29kZShFUlJDT0RFX1BST1RPQ09MX1ZJT0xBVElPTiksCisJCQkJIGVycm1zZ19pbnRlcm5hbCgi U1RSRUFNIEFCT1JUIG1lc3NhZ2Ugd2l0aG91dCBTVFJFQU0gU1RPUCIpKSk7CisKKwkvKiBXZSBy ZWNlaXZlIGFib3J0IGluZm9ybWF0aW9uIG9ubHkgd2hlbiB3ZSBjYW4gYXBwbHkgaW4gcGFyYWxs ZWwuICovCisJbG9naWNhbHJlcF9yZWFkX3N0cmVhbV9hYm9ydChzLCAmYWJvcnRfZGF0YSwKKwkJ CQkJCQkJIE15TG9naWNhbFJlcFdvcmtlci0+cGFyYWxsZWxfYXBwbHkpOworCisJeGlkID0gYWJv cnRfZGF0YS54aWQ7CisJc3VieGlkID0gYWJvcnRfZGF0YS5zdWJ4aWQ7CisJdG9wbGV2ZWxfeGFj dCA9ICh4aWQgPT0gc3VieGlkKTsKKworCXNldF9hcHBseV9lcnJvcl9jb250ZXh0X3hhY3Qoc3Vi eGlkLCBhYm9ydF9kYXRhLmFib3J0X2xzbik7CisKKwlhcHBseV9hY3Rpb24gPSBnZXRfdHJhbnNh Y3Rpb25fYXBwbHlfYWN0aW9uKHhpZCwgJndpbmZvKTsKKworCXN3aXRjaCAoYXBwbHlfYWN0aW9u KQorCXsKKwkJY2FzZSBUUkFOU19MRUFERVJfU0VSSUFMSVpFOgorCisJCQkvKgorCQkJICogV2Ug YXJlIGluIHRoZSBsZWFkZXIgYXBwbHkgd29ya2VyIGFuZCB0aGUgdHJhbnNhY3Rpb24gaGFzIGJl ZW4KKwkJCSAqIHNlcmlhbGl6ZWQgdG8gZmlsZS4KKwkJCSAqLworCQkJc3RyZWFtX2Fib3J0X2lu dGVybmFsKHhpZCwgc3VieGlkKTsKKworCQkJZWxvZyhERUJVRzEsICJmaW5pc2hlZCBwcm9jZXNz aW5nIHRoZSBTVFJFQU0gQUJPUlQgY29tbWFuZCIpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUUkFO U19MRUFERVJfU0VORF9UT19QQVJBTExFTDoKKwkJCUFzc2VydCh3aW5mbyk7CisKKwkJCS8qCisJ CQkgKiBGb3IgdGhlIGNhc2Ugb2YgYWJvcnRpbmcgdGhlIHN1YnRyYW5zYWN0aW9uLCB3ZSBpbmNy ZW1lbnQgdGhlCisJCQkgKiBudW1iZXIgb2Ygc3RyZWFtaW5nIGJsb2NrcyBhbmQgdGFrZSB0aGUg bG9jayBhZ2FpbiBiZWZvcmUKKwkJCSAqIHNlbmRpbmcgdGhlIFNUUkVBTV9BQk9SVCB0byBlbnN1 cmUgdGhhdCB0aGUgcGFyYWxsZWwgYXBwbHkKKwkJCSAqIHdvcmtlciB3aWxsIHdhaXQgb24gdGhl IGxvY2sgZm9yIHRoZSBuZXh0IHNldCBvZiBjaGFuZ2VzIGFmdGVyCisJCQkgKiBwcm9jZXNzaW5n IHRoZSBTVFJFQU1fQUJPUlQgbWVzc2FnZSBpZiBpdCBpcyBub3QgYWxyZWFkeQorCQkJICogd2Fp dGluZyBmb3IgU1RSRUFNX1NUT1AgbWVzc2FnZS4KKwkJCSAqCisJCQkgKiBJdCBpcyBpbXBvcnRh bnQgdG8gcGVyZm9ybSB0aGlzIGxvY2tpbmcgYmVmb3JlIHNlbmRpbmcgdGhlCisJCQkgKiBTVFJF QU1fQUJPUlQgbWVzc2FnZSBzbyB0aGF0IHRoZSBsZWFkZXIgY2FuIGhvbGQgdGhlIGxvY2sgZmly c3QKKwkJCSAqIGFuZCB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyIHdpbGwgd2FpdCBmb3IgdGhl IGxlYWRlciB0bworCQkJICogcmVsZWFzZSB0aGUgbG9jay4gVGhpcyBpcyB0aGUgc2FtZSBhcyB3 aGF0IHdlIGRvIGluCisJCQkgKiBhcHBseV9oYW5kbGVfc3RyZWFtX3N0b3AuIFNlZSBMb2NraW5n IENvbnNpZGVyYXRpb25zIGF0b3AKKwkJCSAqIGFwcGx5cGFyYWxsZWx3b3JrZXIuYy4KKwkJCSAq LworCQkJaWYgKCF0b3BsZXZlbF94YWN0KQorCQkJeworCQkJCXBhX3VubG9ja19zdHJlYW0oeGlk LCBBY2Nlc3NFeGNsdXNpdmVMb2NrKTsKKwkJCQlwZ19hdG9taWNfYWRkX2ZldGNoX3UzMigmd2lu Zm8tPnNoYXJlZC0+cGVuZGluZ19zdHJlYW1fY291bnQsIDEpOworCQkJCXBhX2xvY2tfc3RyZWFt KHhpZCwgQWNjZXNzRXhjbHVzaXZlTG9jayk7CisJCQl9CisKKwkJCWlmIChwYV9zZW5kX2RhdGEo d2luZm8sIHMtPmxlbiwgcy0+ZGF0YSkpCisJCQl7CisJCQkJLyoKKwkJCQkgKiBVbmxpa2UgU1RS RUFNX0NPTU1JVCBhbmQgU1RSRUFNX1BSRVBBUkUsIHdlIGRvbid0IG5lZWQgdG8KKwkJCQkgKiB3 YWl0IGhlcmUgZm9yIHRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgdG8gZmluaXNoIGFzIHRoYXQK KwkJCQkgKiBpcyBub3QgcmVxdWlyZWQgdG8gbWFpbnRhaW4gdGhlIGNvbW1pdCBvcmRlciBhbmQg d29uJ3QgaGF2ZQorCQkJCSAqIHRoZSByaXNrIG9mIGZhaWx1cmVzIGR1ZSB0byB0cmFuc2FjdGlv biBkZXBlbmRlbmNpZXMgYW5kCisJCQkJICogZGVhZGxvY2tzLiBIb3dldmVyLCBpdCBpcyBwb3Nz aWJsZSB0aGF0IGJlZm9yZSB0aGUgcGFyYWxsZWwKKwkJCQkgKiB3b3JrZXIgZmluaXNoZXMgYW5k IHdlIGNsZWFyIHRoZSB3b3JrZXIgaW5mbywgdGhlIHhpZAorCQkJCSAqIHdyYXBhcm91bmQgaGFw cGVucyBvbiB0aGUgdXBzdHJlYW0gYW5kIGEgbmV3IHRyYW5zYWN0aW9uCisJCQkJICogd2l0aCB0 aGUgc2FtZSB4aWQgY2FuIGFwcGVhciBhbmQgdGhhdCBjYW4gbGVhZCB0byBkdXBsaWNhdGUKKwkJ CQkgKiBlbnRyaWVzIGluIFBhcmFsbGVsQXBwbHlUeG5IYXNoLiBZZXQgYW5vdGhlciBwcm9ibGVt IGNvdWxkCisJCQkJICogYmUgdGhhdCB3ZSBtYXkgaGF2ZSBzZXJpYWxpemVkIHRoZSBjaGFuZ2Vz IGluIHBhcnRpYWwKKwkJCQkgKiBzZXJpYWxpemUgbW9kZSBhbmQgdGhlIGZpbGUgY29udGFpbmlu ZyB4YWN0IGNoYW5nZXMgbWF5CisJCQkJICogYWxyZWFkeSBleGlzdCwgYW5kIGFmdGVyIHhpZCB3 cmFwYXJvdW5kIHRyeWluZyB0byBjcmVhdGUKKwkJCQkgKiB0aGUgZmlsZSBmb3IgdGhlIHNhbWUg eGlkIGNhbiBsZWFkIHRvIGFuIGVycm9yLiBUbyBhdm9pZAorCQkJCSAqIHRoZXNlIHByb2JsZW1z LCB3ZSBkZWNpZGUgdG8gd2FpdCBmb3IgdGhlIGFib3J0cyB0byBmaW5pc2guCisJCQkJICoKKwkJ CQkgKiBOb3RlLCBpdCBpcyBva2F5IHRvIG5vdCB1cGRhdGUgdGhlIGZsdXNoIGxvY2F0aW9uIHBv c2l0aW9uCisJCQkJICogZm9yIGFib3J0cyBhcyBpbiB3b3JzdCBjYXNlIHRoYXQgbWVhbnMgc3Vj aCBhIHRyYW5zYWN0aW9uCisJCQkJICogd29uJ3QgYmUgc2VudCBhZ2FpbiBhZnRlciByZXN0YXJ0 LgorCQkJCSAqLworCQkJCWlmICh0b3BsZXZlbF94YWN0KQorCQkJCQlwYV94YWN0X2ZpbmlzaCh3 aW5mbywgSW52YWxpZFhMb2dSZWNQdHIpOworCisJCQkJYnJlYWs7CisJCQl9CisKKwkJCS8qCisJ CQkgKiBTd2l0Y2ggdG8gc2VyaWFsaXplIG1vZGUgd2hlbiB3ZSBhcmUgbm90IGFibGUgdG8gc2Vu ZCB0aGUgY2hhbmdlCisJCQkgKiB0byBwYXJhbGxlbCBhcHBseSB3b3JrZXIuCisJCQkgKi8KKwkJ CXBhX3N3aXRjaF90b19wYXJ0aWFsX3NlcmlhbGl6ZSh3aW5mbywgdHJ1ZSk7CisKKwkJCS8qIGZh bGwgdGhyb3VnaCAqLworCQljYXNlIFRSQU5TX0xFQURFUl9QQVJUSUFMX1NFUklBTElaRToKKwkJ CUFzc2VydCh3aW5mbyk7CisKKwkJCS8qCisJCQkgKiBQYXJhbGxlbCBhcHBseSB3b3JrZXIgbWln aHQgaGF2ZSBhcHBsaWVkIHNvbWUgY2hhbmdlcywgc28gd3JpdGUKKwkJCSAqIHRoZSBTVFJFQU1f QUJPUlQgbWVzc2FnZSBzbyB0aGF0IGl0IGNhbiByb2xsYmFjayB0aGUKKwkJCSAqIHN1YnRyYW5z YWN0aW9uIGlmIG5lZWRlZC4KKwkJCSAqLworCQkJc3RyZWFtX29wZW5fYW5kX3dyaXRlX2NoYW5n ZSh4aWQsIExPR0lDQUxfUkVQX01TR19TVFJFQU1fQUJPUlQsCisJCQkJCQkJCQkJICZvcmlnaW5h bF9tc2cpOworCisJCQlpZiAodG9wbGV2ZWxfeGFjdCkKKwkJCXsKKwkJCQlwYV9zZXRfZmlsZXNl dF9zdGF0ZSh3aW5mby0+c2hhcmVkLCBGU19TRVJJQUxJWkVfRE9ORSk7CisJCQkJcGFfeGFjdF9m aW5pc2god2luZm8sIEludmFsaWRYTG9nUmVjUHRyKTsKKwkJCX0KKwkJCWJyZWFrOworCisJCWNh c2UgVFJBTlNfUEFSQUxMRUxfQVBQTFk6CisKKwkJCS8qCisJCQkgKiBJZiB0aGUgcGFyYWxsZWwg YXBwbHkgd29ya2VyIGlzIGFwcGx5aW5nIHNwb29sZWQgbWVzc2FnZXMgdGhlbgorCQkJICogY2xv c2UgdGhlIGZpbGUgYmVmb3JlIGFib3J0aW5nLgorCQkJICovCisJCQlpZiAodG9wbGV2ZWxfeGFj dCAmJiBzdHJlYW1fZmQpCisJCQkJc3RyZWFtX2Nsb3NlX2ZpbGUoKTsKKworCQkJcGFfc3RyZWFt X2Fib3J0KCZhYm9ydF9kYXRhKTsKKworCQkJLyoKKwkJCSAqIFdlIG5lZWQgdG8gd2FpdCBhZnRl ciBwcm9jZXNzaW5nIHJvbGxiYWNrIHRvIHNhdmVwb2ludCBmb3IgdGhlCisJCQkgKiBuZXh0IHNl dCBvZiBjaGFuZ2VzLgorCQkJICoKKwkJCSAqIFdlIGhhdmUgYSByYWNlIGNvbmRpdGlvbiBoZXJl IGR1ZSB0byB3aGljaCB3ZSBjYW4gc3RhcnQgd2FpdGluZworCQkJICogaGVyZSB3aGVuIHRoZXJl IGFyZSBtb3JlIGNodW5rIG9mIHN0cmVhbXMgaW4gdGhlIHF1ZXVlLiBTZWUKKwkJCSAqIGFwcGx5 X2hhbmRsZV9zdHJlYW1fc3RvcC4KKwkJCSAqLworCQkJaWYgKCF0b3BsZXZlbF94YWN0KQorCQkJ CXBhX2RlY3JfYW5kX3dhaXRfc3RyZWFtX2Jsb2NrKCk7CisKKwkJCWVsb2coREVCVUcxLCAiZmlu aXNoZWQgcHJvY2Vzc2luZyB0aGUgU1RSRUFNIEFCT1JUIGNvbW1hbmQiKTsKKwkJCWJyZWFrOwor CisJCWRlZmF1bHQ6CisJCQlBc3NlcnQoZmFsc2UpOworCQkJYnJlYWs7CisJfQorCisJcmVzZXRf YXBwbHlfZXJyb3JfY29udGV4dF9pbmZvKCk7Cit9CisKKy8qCisgKiBFbnN1cmUgdGhhdCB0aGUg cGFzc2VkIGxvY2F0aW9uIGlzIGZpbGVzZXQncyBlbmQuCisgKi8KK3N0YXRpYyB2b2lkCitlbnN1 cmVfbGFzdF9tZXNzYWdlKEZpbGVTZXQgKnN0cmVhbV9maWxlc2V0LCBUcmFuc2FjdGlvbklkIHhp ZCwgaW50IGZpbGVubywKKwkJCQkJb2ZmX3Qgb2Zmc2V0KQoreworCWNoYXIJCXBhdGhbTUFYUEdQ QVRIXTsKKwlCdWZGaWxlICAgICpmZDsKKwlpbnQJCQlsYXN0X2ZpbGVubzsKKwlvZmZfdAkJbGFz dF9vZmZzZXQ7CisKKwlBc3NlcnQoIUlzVHJhbnNhY3Rpb25TdGF0ZSgpKTsKIAotCQkvKiBPSywg dHJ1bmNhdGUgdGhlIGZpbGUgYXQgdGhlIHJpZ2h0IG9mZnNldCAqLwotCQlCdWZGaWxlVHJ1bmNh dGVGaWxlU2V0KGZkLCBzdWJ4YWN0X2RhdGEuc3VieGFjdHNbc3ViaWR4XS5maWxlbm8sCi0JCQkJ CQkJICAgc3VieGFjdF9kYXRhLnN1YnhhY3RzW3N1YmlkeF0ub2Zmc2V0KTsKLQkJQnVmRmlsZUNs b3NlKGZkKTsKKwliZWdpbl9yZXBsaWNhdGlvbl9zdGVwKCk7CiAKLQkJLyogZGlzY2FyZCB0aGUg c3VieGFjdHMgYWRkZWQgbGF0ZXIgKi8KLQkJc3VieGFjdF9kYXRhLm5zdWJ4YWN0cyA9IHN1Ymlk eDsKKwljaGFuZ2VzX2ZpbGVuYW1lKHBhdGgsIE15TG9naWNhbFJlcFdvcmtlci0+c3ViaWQsIHhp ZCk7CiAKLQkJLyogd3JpdGUgdGhlIHVwZGF0ZWQgc3VieGFjdCBsaXN0ICovCi0JCXN1YnhhY3Rf aW5mb193cml0ZShNeUxvZ2ljYWxSZXBXb3JrZXItPnN1YmlkLCB4aWQpOworCWZkID0gQnVmRmls ZU9wZW5GaWxlU2V0KHN0cmVhbV9maWxlc2V0LCBwYXRoLCBPX1JET05MWSwgZmFsc2UpOwogCi0J CWVuZF9yZXBsaWNhdGlvbl9zdGVwKCk7Ci0JCUNvbW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgpOwot CX0KKwlCdWZGaWxlU2VlayhmZCwgMCwgMCwgU0VFS19FTkQpOworCUJ1ZkZpbGVUZWxsKGZkLCAm bGFzdF9maWxlbm8sICZsYXN0X29mZnNldCk7CiAKLQlyZXNldF9hcHBseV9lcnJvcl9jb250ZXh0 X2luZm8oKTsKKwlCdWZGaWxlQ2xvc2UoZmQpOworCisJZW5kX3JlcGxpY2F0aW9uX3N0ZXAoKTsK KworCWlmIChsYXN0X2ZpbGVubyAhPSBmaWxlbm8gfHwgbGFzdF9vZmZzZXQgIT0gb2Zmc2V0KQor CQllbG9nKEVSUk9SLCAidW5leHBlY3RlZCBtZXNzYWdlIGxlZnQgaW4gc3RyZWFtaW5nIHRyYW5z YWN0aW9uJ3MgY2hhbmdlcyBmaWxlIFwiJXNcIiIsCisJCQkgcGF0aCk7CiB9CiAKIC8qCiAgKiBD b21tb24gc3Bvb2xmaWxlIHByb2Nlc3NpbmcuCiAgKi8KLXN0YXRpYyB2b2lkCi1hcHBseV9zcG9v bGVkX21lc3NhZ2VzKFRyYW5zYWN0aW9uSWQgeGlkLCBYTG9nUmVjUHRyIGxzbikKK3ZvaWQKK2Fw cGx5X3Nwb29sZWRfbWVzc2FnZXMoRmlsZVNldCAqc3RyZWFtX2ZpbGVzZXQsIFRyYW5zYWN0aW9u SWQgeGlkLAorCQkJCQkgICBYTG9nUmVjUHRyIGxzbikKIHsKIAlTdHJpbmdJbmZvRGF0YSBzMjsK IAlpbnQJCQluY2hhbmdlczsKIAljaGFyCQlwYXRoW01BWFBHUEFUSF07CiAJY2hhcgkgICAqYnVm ZmVyID0gTlVMTDsKIAlNZW1vcnlDb250ZXh0IG9sZGN4dDsKLQlCdWZGaWxlICAgICpmZDsKKwlS ZXNvdXJjZU93bmVyIG9sZG93bmVyOworCWludAkJCWZpbGVubzsKKwlvZmZfdAkJb2Zmc2V0Owog Ci0JbWF5YmVfc3RhcnRfc2tpcHBpbmdfY2hhbmdlcyhsc24pOworCWlmICghYW1fcGFyYWxsZWxf YXBwbHlfd29ya2VyKCkpCisJCW1heWJlX3N0YXJ0X3NraXBwaW5nX2NoYW5nZXMobHNuKTsKIAog CS8qIE1ha2Ugc3VyZSB3ZSBoYXZlIGFuIG9wZW4gdHJhbnNhY3Rpb24gKi8KIAliZWdpbl9yZXBs aWNhdGlvbl9zdGVwKCk7CkBAIC0xNDAwLDggKzIwMjEsMTYgQEAgYXBwbHlfc3Bvb2xlZF9tZXNz YWdlcyhUcmFuc2FjdGlvbklkIHhpZCwgWExvZ1JlY1B0ciBsc24pCiAJY2hhbmdlc19maWxlbmFt ZShwYXRoLCBNeUxvZ2ljYWxSZXBXb3JrZXItPnN1YmlkLCB4aWQpOwogCWVsb2coREVCVUcxLCAi cmVwbGF5aW5nIGNoYW5nZXMgZnJvbSBmaWxlIFwiJXNcIiIsIHBhdGgpOwogCi0JZmQgPSBCdWZG aWxlT3BlbkZpbGVTZXQoTXlMb2dpY2FsUmVwV29ya2VyLT5zdHJlYW1fZmlsZXNldCwgcGF0aCwg T19SRE9OTFksCi0JCQkJCQkJZmFsc2UpOworCS8qCisJICogTWFrZSBzdXJlIHRoZSBmaWxlIGlz IG93bmVkIGJ5IHRoZSB0b3BsZXZlbCB0cmFuc2FjdGlvbiBzbyB0aGF0IHRoZQorCSAqIGZpbGUg d2lsbCBub3QgYmUgYWNjaWRlbnRhbGx5IGNsb3NlZCB3aGVuIGFib3J0aW5nIGEgc3VidHJhbnNh Y3Rpb24uCisJICovCisJb2xkb3duZXIgPSBDdXJyZW50UmVzb3VyY2VPd25lcjsKKwlDdXJyZW50 UmVzb3VyY2VPd25lciA9IFRvcFRyYW5zYWN0aW9uUmVzb3VyY2VPd25lcjsKKworCXN0cmVhbV9m ZCA9IEJ1ZkZpbGVPcGVuRmlsZVNldChzdHJlYW1fZmlsZXNldCwgcGF0aCwgT19SRE9OTFksIGZh bHNlKTsKKworCUN1cnJlbnRSZXNvdXJjZU93bmVyID0gb2xkb3duZXI7CiAKIAlidWZmZXIgPSBw YWxsb2MoQkxDS1NaKTsKIAlpbml0U3RyaW5nSW5mbygmczIpOwpAQCAtMTQzMiw3ICsyMDYxLDcg QEAgYXBwbHlfc3Bvb2xlZF9tZXNzYWdlcyhUcmFuc2FjdGlvbklkIHhpZCwgWExvZ1JlY1B0ciBs c24pCiAJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CiAKIAkJLyogcmVhZCBsZW5ndGggb2YgdGhl IG9uLWRpc2sgcmVjb3JkICovCi0JCW5ieXRlcyA9IEJ1ZkZpbGVSZWFkKGZkLCAmbGVuLCBzaXpl b2YobGVuKSk7CisJCW5ieXRlcyA9IEJ1ZkZpbGVSZWFkKHN0cmVhbV9mZCwgJmxlbiwgc2l6ZW9m KGxlbikpOwogCiAJCS8qIGhhdmUgd2UgcmVhY2hlZCBlbmQgb2YgdGhlIGZpbGU/ICovCiAJCWlm IChuYnl0ZXMgPT0gMCkKQEAgLTE0NTMsMTIgKzIwODIsMTQgQEAgYXBwbHlfc3Bvb2xlZF9tZXNz YWdlcyhUcmFuc2FjdGlvbklkIHhpZCwgWExvZ1JlY1B0ciBsc24pCiAJCWJ1ZmZlciA9IHJlcGFs bG9jKGJ1ZmZlciwgbGVuKTsKIAogCQkvKiBhbmQgZmluYWxseSByZWFkIHRoZSBkYXRhIGludG8g dGhlIGJ1ZmZlciAqLwotCQlpZiAoQnVmRmlsZVJlYWQoZmQsIGJ1ZmZlciwgbGVuKSAhPSBsZW4p CisJCWlmIChCdWZGaWxlUmVhZChzdHJlYW1fZmQsIGJ1ZmZlciwgbGVuKSAhPSBsZW4pCiAJCQll cmVwb3J0KEVSUk9SLAogCQkJCQkoZXJyY29kZV9mb3JfZmlsZV9hY2Nlc3MoKSwKIAkJCQkJIGVy cm1zZygiY291bGQgbm90IHJlYWQgZnJvbSBzdHJlYW1pbmcgdHJhbnNhY3Rpb24ncyBjaGFuZ2Vz IGZpbGUgXCIlc1wiOiAlbSIsCiAJCQkJCQkJcGF0aCkpKTsKIAorCQlCdWZGaWxlVGVsbChzdHJl YW1fZmQsICZmaWxlbm8sICZvZmZzZXQpOworCiAJCS8qIGNvcHkgdGhlIGJ1ZmZlciB0byB0aGUg c3RyaW5naW5mbyBhbmQgY2FsbCBhcHBseV9kaXNwYXRjaCAqLwogCQlyZXNldFN0cmluZ0luZm8o JnMyKTsKIAkJYXBwZW5kQmluYXJ5U3RyaW5nSW5mbygmczIsIGJ1ZmZlciwgbGVuKTsKQEAgLTE0 NzQsMTUgKzIxMDUsMjQgQEAgYXBwbHlfc3Bvb2xlZF9tZXNzYWdlcyhUcmFuc2FjdGlvbklkIHhp ZCwgWExvZ1JlY1B0ciBsc24pCiAKIAkJbmNoYW5nZXMrKzsKIAorCQkvKgorCQkgKiBJdCBpcyBw b3NzaWJsZSB0aGUgZmlsZSBoYXMgYmVlbiBjbG9zZWQgYmVjYXVzZSB3ZSBoYXZlIHByb2Nlc3Nl ZAorCQkgKiB0aGUgdHJhbnNhY3Rpb24gZW5kIG1lc3NhZ2UgbGlrZSBzdHJlYW1fY29tbWl0IGlu IHdoaWNoIGNhc2UgdGhhdAorCQkgKiBtdXN0IGJlIHRoZSBsYXN0IG1lc3NhZ2UuCisJCSAqLwor CQlpZiAoIXN0cmVhbV9mZCkKKwkJeworCQkJZW5zdXJlX2xhc3RfbWVzc2FnZShzdHJlYW1fZmls ZXNldCwgeGlkLCBmaWxlbm8sIG9mZnNldCk7CisJCQlicmVhazsKKwkJfQorCiAJCWlmIChuY2hh bmdlcyAlIDEwMDAgPT0gMCkKIAkJCWVsb2coREVCVUcxLCAicmVwbGF5ZWQgJWQgY2hhbmdlcyBm cm9tIGZpbGUgXCIlc1wiIiwKIAkJCQkgbmNoYW5nZXMsIHBhdGgpOwogCX0KIAotCUJ1ZkZpbGVD bG9zZShmZCk7Ci0KLQlwZnJlZShidWZmZXIpOwotCXBmcmVlKHMyLmRhdGEpOworCWlmIChzdHJl YW1fZmQpCisJCXN0cmVhbV9jbG9zZV9maWxlKCk7CiAKIAllbG9nKERFQlVHMSwgInJlcGxheWVk ICVkIChhbGwpIGNoYW5nZXMgZnJvbSBmaWxlIFwiJXNcIiIsCiAJCSBuY2hhbmdlcywgcGF0aCk7 CkBAIC0xNDk4LDYgKzIxMzgsMTEgQEAgYXBwbHlfaGFuZGxlX3N0cmVhbV9jb21taXQoU3RyaW5n SW5mbyBzKQogewogCVRyYW5zYWN0aW9uSWQgeGlkOwogCUxvZ2ljYWxSZXBDb21taXREYXRhIGNv bW1pdF9kYXRhOworCVBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICp3aW5mbzsKKwlUcmFuc0FwcGx5 QWN0aW9uIGFwcGx5X2FjdGlvbjsKKworCS8qIFNhdmUgdGhlIG1lc3NhZ2UgYmVmb3JlIGl0IGlz IGNvbnN1bWVkLiAqLworCVN0cmluZ0luZm9EYXRhIG9yaWdpbmFsX21zZyA9ICpzOwogCiAJaWYg KGluX3N0cmVhbWVkX3RyYW5zYWN0aW9uKQogCQllcmVwb3J0KEVSUk9SLApAQCAtMTUwNywxNCAr MjE1Miw4NSBAQCBhcHBseV9oYW5kbGVfc3RyZWFtX2NvbW1pdChTdHJpbmdJbmZvIHMpCiAJeGlk ID0gbG9naWNhbHJlcF9yZWFkX3N0cmVhbV9jb21taXQocywgJmNvbW1pdF9kYXRhKTsKIAlzZXRf YXBwbHlfZXJyb3JfY29udGV4dF94YWN0KHhpZCwgY29tbWl0X2RhdGEuY29tbWl0X2xzbik7CiAK LQllbG9nKERFQlVHMSwgInJlY2VpdmVkIGNvbW1pdCBmb3Igc3RyZWFtZWQgdHJhbnNhY3Rpb24g JXUiLCB4aWQpOworCWFwcGx5X2FjdGlvbiA9IGdldF90cmFuc2FjdGlvbl9hcHBseV9hY3Rpb24o eGlkLCAmd2luZm8pOwogCi0JYXBwbHlfc3Bvb2xlZF9tZXNzYWdlcyh4aWQsIGNvbW1pdF9kYXRh LmNvbW1pdF9sc24pOworCXN3aXRjaCAoYXBwbHlfYWN0aW9uKQorCXsKKwkJY2FzZSBUUkFOU19M RUFERVJfU0VSSUFMSVpFOgogCi0JYXBwbHlfaGFuZGxlX2NvbW1pdF9pbnRlcm5hbCgmY29tbWl0 X2RhdGEpOworCQkJLyoKKwkJCSAqIFRoZSB0cmFuc2FjdGlvbiBoYXMgYmVlbiBzZXJpYWxpemVk IHRvIGZpbGUsIHNvIHJlcGxheSBhbGwgdGhlCisJCQkgKiBzcG9vbGVkIG9wZXJhdGlvbnMuCisJ CQkgKi8KKwkJCWFwcGx5X3Nwb29sZWRfbWVzc2FnZXMoTXlMb2dpY2FsUmVwV29ya2VyLT5zdHJl YW1fZmlsZXNldCwgeGlkLAorCQkJCQkJCQkgICBjb21taXRfZGF0YS5jb21taXRfbHNuKTsKKwor CQkJYXBwbHlfaGFuZGxlX2NvbW1pdF9pbnRlcm5hbCgmY29tbWl0X2RhdGEpOworCisJCQkvKiBV bmxpbmsgdGhlIGZpbGVzIHdpdGggc2VyaWFsaXplZCBjaGFuZ2VzIGFuZCBzdWJ4YWN0IGluZm8u ICovCisJCQlzdHJlYW1fY2xlYW51cF9maWxlcyhNeUxvZ2ljYWxSZXBXb3JrZXItPnN1YmlkLCB4 aWQpOworCisJCQllbG9nKERFQlVHMSwgImZpbmlzaGVkIHByb2Nlc3NpbmcgdGhlIFNUUkVBTSBD T01NSVQgY29tbWFuZCIpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUUkFOU19MRUFERVJfU0VORF9U T19QQVJBTExFTDoKKwkJCUFzc2VydCh3aW5mbyk7CisKKwkJCWlmIChwYV9zZW5kX2RhdGEod2lu Zm8sIHMtPmxlbiwgcy0+ZGF0YSkpCisJCQl7CisJCQkJLyogRmluaXNoIHByb2Nlc3NpbmcgdGhl IHN0cmVhbWluZyB0cmFuc2FjdGlvbi4gKi8KKwkJCQlwYV94YWN0X2ZpbmlzaCh3aW5mbywgY29t bWl0X2RhdGEuZW5kX2xzbik7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCS8qCisJCQkgKiBTd2l0 Y2ggdG8gc2VyaWFsaXplIG1vZGUgd2hlbiB3ZSBhcmUgbm90IGFibGUgdG8gc2VuZCB0aGUgY2hh bmdlCisJCQkgKiB0byBwYXJhbGxlbCBhcHBseSB3b3JrZXIuCisJCQkgKi8KKwkJCXBhX3N3aXRj aF90b19wYXJ0aWFsX3NlcmlhbGl6ZSh3aW5mbywgdHJ1ZSk7CisKKwkJCS8qIGZhbGwgdGhyb3Vn aCAqLworCQljYXNlIFRSQU5TX0xFQURFUl9QQVJUSUFMX1NFUklBTElaRToKKwkJCUFzc2VydCh3 aW5mbyk7CisKKwkJCXN0cmVhbV9vcGVuX2FuZF93cml0ZV9jaGFuZ2UoeGlkLCBMT0dJQ0FMX1JF UF9NU0dfU1RSRUFNX0NPTU1JVCwKKwkJCQkJCQkJCQkgJm9yaWdpbmFsX21zZyk7CisKKwkJCXBh X3NldF9maWxlc2V0X3N0YXRlKHdpbmZvLT5zaGFyZWQsIEZTX1NFUklBTElaRV9ET05FKTsKIAot CS8qIHVubGluayB0aGUgZmlsZXMgd2l0aCBzZXJpYWxpemVkIGNoYW5nZXMgYW5kIHN1YnhhY3Qg aW5mbyAqLwotCXN0cmVhbV9jbGVhbnVwX2ZpbGVzKE15TG9naWNhbFJlcFdvcmtlci0+c3ViaWQs IHhpZCk7CisJCQkvKiBGaW5pc2ggcHJvY2Vzc2luZyB0aGUgc3RyZWFtaW5nIHRyYW5zYWN0aW9u LiAqLworCQkJcGFfeGFjdF9maW5pc2god2luZm8sIGNvbW1pdF9kYXRhLmVuZF9sc24pOworCQkJ YnJlYWs7CisKKwkJY2FzZSBUUkFOU19QQVJBTExFTF9BUFBMWToKKworCQkJLyoKKwkJCSAqIElm IHRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgaXMgYXBwbHlpbmcgc3Bvb2xlZCBtZXNzYWdlcyB0 aGVuCisJCQkgKiBjbG9zZSB0aGUgZmlsZSBiZWZvcmUgY29tbWl0dGluZy4KKwkJCSAqLworCQkJ aWYgKHN0cmVhbV9mZCkKKwkJCQlzdHJlYW1fY2xvc2VfZmlsZSgpOworCisJCQlhcHBseV9oYW5k bGVfY29tbWl0X2ludGVybmFsKCZjb21taXRfZGF0YSk7CisKKwkJCU15UGFyYWxsZWxTaGFyZWQt Pmxhc3RfY29tbWl0X2VuZCA9IFhhY3RMYXN0Q29tbWl0RW5kOworCisJCQkvKgorCQkJICogSXQg aXMgaW1wb3J0YW50IHRvIHNldCB0aGUgdHJhbnNhY3Rpb24gc3RhdGUgYXMgZmluaXNoZWQgYmVm b3JlCisJCQkgKiByZWxlYXNpbmcgdGhlIGxvY2suIFNlZSBwYV93YWl0X2Zvcl94YWN0X2Zpbmlz aC4KKwkJCSAqLworCQkJcGFfc2V0X3hhY3Rfc3RhdGUoTXlQYXJhbGxlbFNoYXJlZCwgUEFSQUxM RUxfVFJBTlNfRklOSVNIRUQpOworCQkJcGFfdW5sb2NrX3RyYW5zYWN0aW9uKHhpZCwgQWNjZXNz RXhjbHVzaXZlTG9jayk7CisKKwkJCXBhX3Jlc2V0X3N1YnRyYW5zKCk7CisKKwkJCWVsb2coREVC VUcxLCAiZmluaXNoZWQgcHJvY2Vzc2luZyB0aGUgU1RSRUFNIENPTU1JVCBjb21tYW5kIik7CisJ CQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJQXNzZXJ0KGZhbHNlKTsKKwkJCWJyZWFrOworCX0K IAogCS8qIFByb2Nlc3MgYW55IHRhYmxlcyB0aGF0IGFyZSBiZWluZyBzeW5jaHJvbml6ZWQgaW4g cGFyYWxsZWwuICovCiAJcHJvY2Vzc19zeW5jaW5nX3RhYmxlcyhjb21taXRfZGF0YS5lbmRfbHNu KTsKQEAgLTE1NTgsOSArMjI3NCwxNiBAQCBhcHBseV9oYW5kbGVfY29tbWl0X2ludGVybmFsKExv Z2ljYWxSZXBDb21taXREYXRhICpjb21taXRfZGF0YSkKIAkJcmVwbG9yaWdpbl9zZXNzaW9uX29y aWdpbl90aW1lc3RhbXAgPSBjb21taXRfZGF0YS0+Y29tbWl0dGltZTsKIAogCQlDb21taXRUcmFu c2FjdGlvbkNvbW1hbmQoKTsKKworCQlpZiAoSXNUcmFuc2FjdGlvbkJsb2NrKCkpCisJCXsKKwkJ CUVuZFRyYW5zYWN0aW9uQmxvY2soZmFsc2UpOworCQkJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5k KCk7CisJCX0KKwogCQlwZ3N0YXRfcmVwb3J0X3N0YXQoZmFsc2UpOwogCi0JCXN0b3JlX2ZsdXNo X3Bvc2l0aW9uKGNvbW1pdF9kYXRhLT5lbmRfbHNuKTsKKwkJc3RvcmVfZmx1c2hfcG9zaXRpb24o Y29tbWl0X2RhdGEtPmVuZF9sc24sIFhhY3RMYXN0Q29tbWl0RW5kKTsKIAl9CiAJZWxzZQogCXsK QEAgLTI1MTEsNyArMzIzNCw3IEBAIGFwcGx5X2hhbmRsZV90cnVuY2F0ZShTdHJpbmdJbmZvIHMp CiAvKgogICogTG9naWNhbCByZXBsaWNhdGlvbiBwcm90b2NvbCBtZXNzYWdlIGRpc3BhdGNoZXIu CiAgKi8KLXN0YXRpYyB2b2lkCit2b2lkCiBhcHBseV9kaXNwYXRjaChTdHJpbmdJbmZvIHMpCiB7 CiAJTG9naWNhbFJlcE1zZ1R5cGUgYWN0aW9uID0gcHFfZ2V0bXNnYnl0ZShzKTsKQEAgLTI2NzUs MTcgKzMzOTgsMjQgQEAgZ2V0X2ZsdXNoX3Bvc2l0aW9uKFhMb2dSZWNQdHIgKndyaXRlLCBYTG9n UmVjUHRyICpmbHVzaCwKIC8qCiAgKiBTdG9yZSBjdXJyZW50IHJlbW90ZS9sb2NhbCBsc24gcGFp ciBpbiB0aGUgdHJhY2tpbmcgbGlzdC4KICAqLwotc3RhdGljIHZvaWQKLXN0b3JlX2ZsdXNoX3Bv c2l0aW9uKFhMb2dSZWNQdHIgcmVtb3RlX2xzbikKK3ZvaWQKK3N0b3JlX2ZsdXNoX3Bvc2l0aW9u KFhMb2dSZWNQdHIgcmVtb3RlX2xzbiwgWExvZ1JlY1B0ciBsb2NhbF9sc24pCiB7CiAJRmx1c2hQ b3NpdGlvbiAqZmx1c2hwb3M7CiAKKwkvKgorCSAqIFNraXAgZm9yIHBhcmFsbGVsIGFwcGx5IHdv cmtlcnMsIGJlY2F1c2UgdGhlIGxzbl9tYXBwaW5nIGlzIG1haW50YWluZWQKKwkgKiBieSB0aGUg bGVhZGVyIGFwcGx5IHdvcmtlci4KKwkgKi8KKwlpZiAoYW1fcGFyYWxsZWxfYXBwbHlfd29ya2Vy KCkpCisJCXJldHVybjsKKwogCS8qIE5lZWQgdG8gZG8gdGhpcyBpbiBwZXJtYW5lbnQgY29udGV4 dCAqLwogCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhBcHBseUNvbnRleHQpOwogCiAJLyogVHJhY2sg Y29tbWl0IGxzbiAgKi8KIAlmbHVzaHBvcyA9IChGbHVzaFBvc2l0aW9uICopIHBhbGxvYyhzaXpl b2YoRmx1c2hQb3NpdGlvbikpOwotCWZsdXNocG9zLT5sb2NhbF9lbmQgPSBYYWN0TGFzdENvbW1p dEVuZDsKKwlmbHVzaHBvcy0+bG9jYWxfZW5kID0gbG9jYWxfbHNuOwogCWZsdXNocG9zLT5yZW1v dGVfZW5kID0gcmVtb3RlX2xzbjsKIAogCWRsaXN0X3B1c2hfdGFpbCgmbHNuX21hcHBpbmcsICZm bHVzaHBvcy0+bm9kZSk7CkBAIC0yNzQ0LDYgKzM0NzQsNyBAQCBMb2dpY2FsUmVwQXBwbHlMb29w KFhMb2dSZWNQdHIgbGFzdF9yZWNlaXZlZCkKIAllcnJjYWxsYmFjay5jYWxsYmFjayA9IGFwcGx5 X2Vycm9yX2NhbGxiYWNrOwogCWVycmNhbGxiYWNrLnByZXZpb3VzID0gZXJyb3JfY29udGV4dF9z dGFjazsKIAllcnJvcl9jb250ZXh0X3N0YWNrID0gJmVycmNhbGxiYWNrOworCWFwcGx5X2Vycm9y X2NvbnRleHRfc3RhY2sgPSBlcnJvcl9jb250ZXh0X3N0YWNrOwogCiAJLyogVGhpcyBvdXRlciBs b29wIGl0ZXJhdGVzIG9uY2UgcGVyIHdhaXQuICovCiAJZm9yICg7OykKQEAgLTI5NTgsNiArMzY4 OSw3IEBAIExvZ2ljYWxSZXBBcHBseUxvb3AoWExvZ1JlY1B0ciBsYXN0X3JlY2VpdmVkKQogCiAJ LyogUG9wIHRoZSBlcnJvciBjb250ZXh0IHN0YWNrICovCiAJZXJyb3JfY29udGV4dF9zdGFjayA9 IGVycmNhbGxiYWNrLnByZXZpb3VzOworCWFwcGx5X2Vycm9yX2NvbnRleHRfc3RhY2sgPSBlcnJv cl9jb250ZXh0X3N0YWNrOwogCiAJLyogQWxsIGRvbmUgKi8KIAl3YWxyY3ZfZW5kc3RyZWFtaW5n KExvZ1JlcFdvcmtlcldhbFJjdkNvbm4sICZ0bGkpOwpAQCAtMzA1Niw5ICszNzg4LDMxIEBAIHNl bmRfZmVlZGJhY2soWExvZ1JlY1B0ciByZWN2cG9zLCBib29sIGZvcmNlLCBib29sIHJlcXVlc3RS ZXBseSkKIH0KIAogLyoKLSAqIFJlcmVhZCBzdWJzY3JpcHRpb24gaW5mbyBpZiBuZWVkZWQuIE1v c3QgY2hhbmdlcyB3aWxsIGJlIGV4aXQuCisgKiBFeGl0IHJvdXRpbmUgZm9yIGFwcGx5IHdvcmtl cnMgZHVlIHRvIHN1YnNjcmlwdGlvbiBwYXJhbWV0ZXIgY2hhbmdlcy4KICAqLwogc3RhdGljIHZv aWQKK2FwcGx5X3dvcmtlcl9leGl0KHZvaWQpCit7CisJaWYgKGFtX3BhcmFsbGVsX2FwcGx5X3dv cmtlcigpKQorCXsKKwkJLyoKKwkJICogRG9uJ3Qgc3RvcCB0aGUgcGFyYWxsZWwgYXBwbHkgd29y a2VyIGFzIHRoZSBsZWFkZXIgd2lsbCBkZXRlY3QgdGhlCisJCSAqIHN1YnNjcmlwdGlvbiBwYXJh bWV0ZXIgY2hhbmdlIGFuZCByZXN0YXJ0IGxvZ2ljYWwgcmVwbGljYXRpb24gbGF0ZXIKKwkJICog YW55d2F5LiBUaGlzIGFsc28gcHJldmVudHMgdGhlIGxlYWRlciBmcm9tIHJlcG9ydGluZyBlcnJv cnMgd2hlbgorCQkgKiB0cnlpbmcgdG8gY29tbXVuaWNhdGUgd2l0aCBhIHN0b3BwZWQgcGFyYWxs ZWwgYXBwbHkgd29ya2VyLCB3aGljaAorCQkgKiB3b3VsZCBhY2NpZGVudGFsbHkgZGlzYWJsZSBz dWJzY3JpcHRpb25zIGlmIGRpc2FibGVfb25fZXJyb3Igd2FzCisJCSAqIHNldC4KKwkJICovCisJ CXJldHVybjsKKwl9CisKKwlwcm9jX2V4aXQoMCk7Cit9CisKKy8qCisgKiBSZXJlYWQgc3Vic2Ny aXB0aW9uIGluZm8gaWYgbmVlZGVkLiBNb3N0IGNoYW5nZXMgd2lsbCBiZSBleGl0LgorICovCit2 b2lkCiBtYXliZV9yZXJlYWRfc3Vic2NyaXB0aW9uKHZvaWQpCiB7CiAJTWVtb3J5Q29udGV4dCBv bGRjdHg7CkBAIC0zMDg4LDkgKzM4NDIsOSBAQCBtYXliZV9yZXJlYWRfc3Vic2NyaXB0aW9uKHZv aWQpCiAJaWYgKCFuZXdzdWIpCiAJewogCQllcmVwb3J0KExPRywKLQkJCQkoZXJybXNnKCJsb2dp Y2FsIHJlcGxpY2F0aW9uIGFwcGx5IHdvcmtlciBmb3Igc3Vic2NyaXB0aW9uIFwiJXNcIiB3aWxs ICIKLQkJCQkJCSJzdG9wIGJlY2F1c2UgdGhlIHN1YnNjcmlwdGlvbiB3YXMgcmVtb3ZlZCIsCi0J CQkJCQlNeVN1YnNjcmlwdGlvbi0+bmFtZSkpKTsKKwkJLyogdHJhbnNsYXRvcjogZmlyc3QgJXMg aXMgdGhlIG5hbWUgb2YgbG9naWNhbCByZXBsaWNhdGlvbiB3b3JrZXIgKi8KKwkJCQkoZXJybXNn KCIlcyBmb3Igc3Vic2NyaXB0aW9uIFwiJXNcIiB3aWxsIHN0b3AgYmVjYXVzZSB0aGUgc3Vic2Ny aXB0aW9uIHdhcyByZW1vdmVkIiwKKwkJCQkJCWdldF93b3JrZXJfbmFtZSgpLCBNeVN1YnNjcmlw dGlvbi0+bmFtZSkpKTsKIAogCQlwcm9jX2V4aXQoMCk7CiAJfQpAQCAtMzA5OSwxMSArMzg1Mywx MSBAQCBtYXliZV9yZXJlYWRfc3Vic2NyaXB0aW9uKHZvaWQpCiAJaWYgKCFuZXdzdWItPmVuYWJs ZWQpCiAJewogCQllcmVwb3J0KExPRywKLQkJCQkoZXJybXNnKCJsb2dpY2FsIHJlcGxpY2F0aW9u IGFwcGx5IHdvcmtlciBmb3Igc3Vic2NyaXB0aW9uIFwiJXNcIiB3aWxsICIKLQkJCQkJCSJzdG9w IGJlY2F1c2UgdGhlIHN1YnNjcmlwdGlvbiB3YXMgZGlzYWJsZWQiLAotCQkJCQkJTXlTdWJzY3Jp cHRpb24tPm5hbWUpKSk7CisJCS8qIHRyYW5zbGF0b3I6IGZpcnN0ICVzIGlzIHRoZSBuYW1lIG9m IGxvZ2ljYWwgcmVwbGljYXRpb24gd29ya2VyICovCisJCQkJKGVycm1zZygiJXMgZm9yIHN1YnNj cmlwdGlvbiBcIiVzXCIgd2lsbCBzdG9wIGJlY2F1c2UgdGhlIHN1YnNjcmlwdGlvbiB3YXMgZGlz YWJsZWQiLAorCQkJCQkJZ2V0X3dvcmtlcl9uYW1lKCksIE15U3Vic2NyaXB0aW9uLT5uYW1lKSkp OwogCi0JCXByb2NfZXhpdCgwKTsKKwkJYXBwbHlfd29ya2VyX2V4aXQoKTsKIAl9CiAKIAkvKiAh c2xvdG5hbWUgc2hvdWxkIG5ldmVyIGhhcHBlbiB3aGVuIGVuYWJsZWQgaXMgdHJ1ZS4gKi8KQEAg LTMxMTQsNyArMzg2OCwxMCBAQCBtYXliZV9yZXJlYWRfc3Vic2NyaXB0aW9uKHZvaWQpCiAKIAkv KgogCSAqIEV4aXQgaWYgYW55IHBhcmFtZXRlciB0aGF0IGFmZmVjdHMgdGhlIHJlbW90ZSBjb25u ZWN0aW9uIHdhcyBjaGFuZ2VkLgotCSAqIFRoZSBsYXVuY2hlciB3aWxsIHN0YXJ0IGEgbmV3IHdv cmtlci4KKwkgKiBUaGUgbGF1bmNoZXIgd2lsbCBzdGFydCBhIG5ldyB3b3JrZXIgYnV0IG5vdGUg dGhhdCB0aGUgcGFyYWxsZWwgYXBwbHkKKwkgKiB3b3JrZXIgd29uJ3QgcmVzdGFydCBpZiB0aGUg c3RyZWFtaW5nIG9wdGlvbidzIHZhbHVlIGlzIGNoYW5nZWQgZnJvbQorCSAqICdwYXJhbGxlbCcg dG8gYW55IG90aGVyIHZhbHVlIG9yIHRoZSBzZXJ2ZXIgZGVjaWRlcyBub3QgdG8gc3RyZWFtIHRo ZQorCSAqIGluLXByb2dyZXNzIHRyYW5zYWN0aW9uLgogCSAqLwogCWlmIChzdHJjbXAobmV3c3Vi LT5jb25uaW5mbywgTXlTdWJzY3JpcHRpb24tPmNvbm5pbmZvKSAhPSAwIHx8CiAJCXN0cmNtcChu ZXdzdWItPm5hbWUsIE15U3Vic2NyaXB0aW9uLT5uYW1lKSAhPSAwIHx8CkBAIC0zMTI1LDExICsz ODgyLDE3IEBAIG1heWJlX3JlcmVhZF9zdWJzY3JpcHRpb24odm9pZCkKIAkJbmV3c3ViLT5vd25l ciAhPSBNeVN1YnNjcmlwdGlvbi0+b3duZXIgfHwKIAkJIWVxdWFsKG5ld3N1Yi0+cHVibGljYXRp b25zLCBNeVN1YnNjcmlwdGlvbi0+cHVibGljYXRpb25zKSkKIAl7Ci0JCWVyZXBvcnQoTE9HLAot CQkJCShlcnJtc2coImxvZ2ljYWwgcmVwbGljYXRpb24gYXBwbHkgd29ya2VyIGZvciBzdWJzY3Jp cHRpb24gXCIlc1wiIHdpbGwgcmVzdGFydCBiZWNhdXNlIG9mIGEgcGFyYW1ldGVyIGNoYW5nZSIs Ci0JCQkJCQlNeVN1YnNjcmlwdGlvbi0+bmFtZSkpKTsKKwkJaWYgKGFtX3BhcmFsbGVsX2FwcGx5 X3dvcmtlcigpKQorCQkJZXJlcG9ydChMT0csCisJCQkJCShlcnJtc2coImxvZ2ljYWwgcmVwbGlj YXRpb24gcGFyYWxsZWwgYXBwbHkgd29ya2VyIGZvciBzdWJzY3JpcHRpb24gXCIlc1wiIHdpbGwg c3RvcCBiZWNhdXNlIG9mIGEgcGFyYW1ldGVyIGNoYW5nZSIsCisJCQkJCQkJTXlTdWJzY3JpcHRp b24tPm5hbWUpKSk7CisJCWVsc2UKKwkJCWVyZXBvcnQoTE9HLAorCQkJLyogdHJhbnNsYXRvcjog Zmlyc3QgJXMgaXMgdGhlIG5hbWUgb2YgbG9naWNhbCByZXBsaWNhdGlvbiB3b3JrZXIgKi8KKwkJ CQkJKGVycm1zZygiJXMgZm9yIHN1YnNjcmlwdGlvbiBcIiVzXCIgd2lsbCByZXN0YXJ0IGJlY2F1 c2Ugb2YgYSBwYXJhbWV0ZXIgY2hhbmdlIiwKKwkJCQkJCQlnZXRfd29ya2VyX25hbWUoKSwgTXlT dWJzY3JpcHRpb24tPm5hbWUpKSk7CiAKLQkJcHJvY19leGl0KDApOworCQlhcHBseV93b3JrZXJf ZXhpdCgpOwogCX0KIAogCS8qIENoZWNrIGZvciBvdGhlciBjaGFuZ2VzIHRoYXQgc2hvdWxkIG5l dmVyIGhhcHBlbiB0b28uICovCkBAIC0zMzgxLDcgKzQxNDQsNyBAQCBjaGFuZ2VzX2ZpbGVuYW1l KGNoYXIgKnBhdGgsIE9pZCBzdWJpZCwgVHJhbnNhY3Rpb25JZCB4aWQpCiAgKiB0b3BsZXZlbCB0 cmFuc2FjdGlvbi4gRWFjaCBzdWJzY3JpcHRpb24gaGFzIGEgc2VwYXJhdGUgc2V0IG9mIGZpbGVz CiAgKiBmb3IgYW55IHRvcGxldmVsIHRyYW5zYWN0aW9uLgogICovCi1zdGF0aWMgdm9pZAordm9p ZAogc3RyZWFtX2NsZWFudXBfZmlsZXMoT2lkIHN1YmlkLCBUcmFuc2FjdGlvbklkIHhpZCkKIHsK IAljaGFyCQlwYXRoW01BWFBHUEFUSF07CkBAIC0zNDA0LDkgKzQxNjcsNiBAQCBzdHJlYW1fY2xl YW51cF9maWxlcyhPaWQgc3ViaWQsIFRyYW5zYWN0aW9uSWQgeGlkKQogICogYnkgc3RyZWFtX3hp ZCAoZ2xvYmFsIHZhcmlhYmxlKS4gSWYgaXQncyB0aGUgZmlyc3QgY2h1bmsgb2Ygc3RyZWFtZWQK ICAqIGNoYW5nZXMgZm9yIHRoaXMgdHJhbnNhY3Rpb24sIGNyZWF0ZSB0aGUgYnVmZmlsZSwgb3Ro ZXJ3aXNlIG9wZW4gdGhlCiAgKiBwcmV2aW91c2x5IGNyZWF0ZWQgZmlsZS4KLSAqCi0gKiBUaGlz IGNhbiBvbmx5IGJlIGNhbGxlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgInN0cmVhbWluZyIgYmxv Y2ssIGkuZS4KLSAqIGJldHdlZW4gc3RyZWFtX3N0YXJ0L3N0cmVhbV9zdG9wIG1lc3NhZ2VzIGZy b20gdGhlIHVwc3RyZWFtLgogICovCiBzdGF0aWMgdm9pZAogc3RyZWFtX29wZW5fZmlsZShPaWQg c3ViaWQsIFRyYW5zYWN0aW9uSWQgeGlkLCBib29sIGZpcnN0X3NlZ21lbnQpCkBAIC0zNDE0LDcg KzQxNzQsNiBAQCBzdHJlYW1fb3Blbl9maWxlKE9pZCBzdWJpZCwgVHJhbnNhY3Rpb25JZCB4aWQs IGJvb2wgZmlyc3Rfc2VnbWVudCkKIAljaGFyCQlwYXRoW01BWFBHUEFUSF07CiAJTWVtb3J5Q29u dGV4dCBvbGRjeHQ7CiAKLQlBc3NlcnQoaW5fc3RyZWFtZWRfdHJhbnNhY3Rpb24pOwogCUFzc2Vy dChPaWRJc1ZhbGlkKHN1YmlkKSk7CiAJQXNzZXJ0KFRyYW5zYWN0aW9uSWRJc1ZhbGlkKHhpZCkp OwogCUFzc2VydChzdHJlYW1fZmQgPT0gTlVMTCk7CkBAIC0zNDUzLDE1ICs0MjEyLDEwIEBAIHN0 cmVhbV9vcGVuX2ZpbGUoT2lkIHN1YmlkLCBUcmFuc2FjdGlvbklkIHhpZCwgYm9vbCBmaXJzdF9z ZWdtZW50KQogLyoKICAqIHN0cmVhbV9jbG9zZV9maWxlCiAgKgkgIENsb3NlIHRoZSBjdXJyZW50 bHkgb3BlbiBmaWxlIHdpdGggc3RyZWFtZWQgY2hhbmdlcy4KLSAqCi0gKiBUaGlzIGNhbiBvbmx5 IGJlIGNhbGxlZCBhdCB0aGUgZW5kIG9mIGEgc3RyZWFtaW5nIGJsb2NrLCBpLmUuIGF0IHN0cmVh bV9zdG9wCi0gKiBtZXNzYWdlIGZyb20gdGhlIHVwc3RyZWFtLgogICovCiBzdGF0aWMgdm9pZAog c3RyZWFtX2Nsb3NlX2ZpbGUodm9pZCkKIHsKLQlBc3NlcnQoaW5fc3RyZWFtZWRfdHJhbnNhY3Rp b24pOwotCUFzc2VydChUcmFuc2FjdGlvbklkSXNWYWxpZChzdHJlYW1feGlkKSk7CiAJQXNzZXJ0 KHN0cmVhbV9mZCAhPSBOVUxMKTsKIAogCUJ1ZkZpbGVDbG9zZShzdHJlYW1fZmQpOwpAQCAtMzQ4 Myw4ICs0MjM3LDYgQEAgc3RyZWFtX3dyaXRlX2NoYW5nZShjaGFyIGFjdGlvbiwgU3RyaW5nSW5m byBzKQogewogCWludAkJCWxlbjsKIAotCUFzc2VydChpbl9zdHJlYW1lZF90cmFuc2FjdGlvbik7 Ci0JQXNzZXJ0KFRyYW5zYWN0aW9uSWRJc1ZhbGlkKHN0cmVhbV94aWQpKTsKIAlBc3NlcnQoc3Ry ZWFtX2ZkICE9IE5VTEwpOwogCiAJLyogdG90YWwgb24tZGlzayBzaXplLCBpbmNsdWRpbmcgdGhl IGFjdGlvbiB0eXBlIGNoYXJhY3RlciAqLwpAQCAtMzUwMiw2ICs0MjU0LDI2IEBAIHN0cmVhbV93 cml0ZV9jaGFuZ2UoY2hhciBhY3Rpb24sIFN0cmluZ0luZm8gcykKIAlCdWZGaWxlV3JpdGUoc3Ry ZWFtX2ZkLCAmcy0+ZGF0YVtzLT5jdXJzb3JdLCBsZW4pOwogfQogCisvKgorICogc3RyZWFtX29w ZW5fYW5kX3dyaXRlX2NoYW5nZQorICoJICBTZXJpYWxpemUgYSBtZXNzYWdlIHRvIGEgZmlsZSBm b3IgdGhlIGdpdmVuIHRyYW5zYWN0aW9uLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgc2ltaWxh ciB0byBzdHJlYW1fd3JpdGVfY2hhbmdlIGV4Y2VwdCB0aGF0IGl0IHdpbGwgb3BlbiB0aGUKKyAq IHRhcmdldCBmaWxlIGlmIG5vdCBhbHJlYWR5IGJlZm9yZSB3cml0aW5nIHRoZSBtZXNzYWdlIGFu ZCBjbG9zZSB0aGUgZmlsZSBhdAorICogdGhlIGVuZC4KKyAqLworc3RhdGljIHZvaWQKK3N0cmVh bV9vcGVuX2FuZF93cml0ZV9jaGFuZ2UoVHJhbnNhY3Rpb25JZCB4aWQsIGNoYXIgYWN0aW9uLCBT dHJpbmdJbmZvIHMpCit7CisJQXNzZXJ0KCFpbl9zdHJlYW1lZF90cmFuc2FjdGlvbik7CisKKwlp ZiAoIXN0cmVhbV9mZCkKKwkJc3RyZWFtX3N0YXJ0X2ludGVybmFsKHhpZCwgZmFsc2UpOworCisJ c3RyZWFtX3dyaXRlX2NoYW5nZShhY3Rpb24sIHMpOworCXN0cmVhbV9zdG9wX2ludGVybmFsKHhp ZCk7Cit9CisKIC8qCiAgKiBDbGVhbnVwIHRoZSBtZW1vcnkgZm9yIHN1YnhhY3RzIGFuZCByZXNl dCB0aGUgcmVsYXRlZCB2YXJpYWJsZXMuCiAgKi8KQEAgLTM2MTMsMzcgKzQzODUsMTYgQEAgc3Rh cnRfYXBwbHkoWExvZ1JlY1B0ciBvcmlnaW5fc3RhcnRwb3MpCiAJUEdfRU5EX1RSWSgpOwogfQog Ci0vKiBMb2dpY2FsIFJlcGxpY2F0aW9uIEFwcGx5IHdvcmtlciBlbnRyeSBwb2ludCAqLworLyoK KyAqIENvbW1vbiBpbml0aWFsaXphdGlvbiBmb3IgbGVhZGVyIGFwcGx5IHdvcmtlciBhbmQgcGFy YWxsZWwgYXBwbHkgd29ya2VyLgorICoKKyAqIEluaXRpYWxpemUgdGhlIGRhdGFiYXNlIGNvbm5l Y3Rpb24sIGluLW1lbW9yeSBzdWJzY3JpcHRpb24gYW5kIG5lY2Vzc2FyeQorICogY29uZmlnIG9w dGlvbnMuCisgKi8KIHZvaWQKLUFwcGx5V29ya2VyTWFpbihEYXR1bSBtYWluX2FyZykKK0luaXRp YWxpemVBcHBseVdvcmtlcih2b2lkKQogewotCWludAkJCXdvcmtlcl9zbG90ID0gRGF0dW1HZXRJ bnQzMihtYWluX2FyZyk7CiAJTWVtb3J5Q29udGV4dCBvbGRjdHg7Ci0JY2hhcgkJb3JpZ2lubmFt ZVtOQU1FREFUQUxFTl07Ci0JWExvZ1JlY1B0cglvcmlnaW5fc3RhcnRwb3MgPSBJbnZhbGlkWExv Z1JlY1B0cjsKLQljaGFyCSAgICpteXNsb3RuYW1lID0gTlVMTDsKLQlXYWxSY3ZTdHJlYW1PcHRp b25zIG9wdGlvbnM7Ci0JaW50CQkJc2VydmVyX3ZlcnNpb247Ci0KLQkvKiBBdHRhY2ggdG8gc2xv dCAqLwotCWxvZ2ljYWxyZXBfd29ya2VyX2F0dGFjaCh3b3JrZXJfc2xvdCk7Ci0KLQkvKiBTZXR1 cCBzaWduYWwgaGFuZGxpbmcgKi8KLQlwcXNpZ25hbChTSUdIVVAsIFNpZ25hbEhhbmRsZXJGb3JD b25maWdSZWxvYWQpOwotCXBxc2lnbmFsKFNJR1RFUk0sIGRpZSk7Ci0JQmFja2dyb3VuZFdvcmtl clVuYmxvY2tTaWduYWxzKCk7Ci0KLQkvKgotCSAqIFdlIGRvbid0IGN1cnJlbnRseSBuZWVkIGFu eSBSZXNvdXJjZU93bmVyIGluIGEgd2FscmVjZWl2ZXIgcHJvY2VzcywgYnV0Ci0JICogaWYgd2Ug ZGlkLCB3ZSBjb3VsZCBjYWxsIENyZWF0ZUF1eFByb2Nlc3NSZXNvdXJjZU93bmVyIGhlcmUuCi0J ICovCi0KLQkvKiBJbml0aWFsaXNlIHN0YXRzIHRvIGEgc2FuaXNoIHZhbHVlICovCi0JTXlMb2dp Y2FsUmVwV29ya2VyLT5sYXN0X3NlbmRfdGltZSA9IE15TG9naWNhbFJlcFdvcmtlci0+bGFzdF9y ZWN2X3RpbWUgPQotCQlNeUxvZ2ljYWxSZXBXb3JrZXItPnJlcGx5X3RpbWUgPSBHZXRDdXJyZW50 VGltZXN0YW1wKCk7Ci0KLQkvKiBMb2FkIHRoZSBsaWJwcS1zcGVjaWZpYyBmdW5jdGlvbnMgKi8K LQlsb2FkX2ZpbGUoImxpYnBxd2FscmVjZWl2ZXIiLCBmYWxzZSk7CiAKIAkvKiBSdW4gYXMgcmVw bGljYSBzZXNzaW9uIHJlcGxpY2F0aW9uIHJvbGUuICovCiAJU2V0Q29uZmlnT3B0aW9uKCJzZXNz aW9uX3JlcGxpY2F0aW9uX3JvbGUiLCAicmVwbGljYSIsCkBAIC0zNjcxLDkgKzQ0MjIsMTAgQEAg QXBwbHlXb3JrZXJNYWluKERhdHVtIG1haW5fYXJnKQogCWlmICghTXlTdWJzY3JpcHRpb24pCiAJ ewogCQllcmVwb3J0KExPRywKLQkJCQkoZXJybXNnKCJsb2dpY2FsIHJlcGxpY2F0aW9uIGFwcGx5 IHdvcmtlciBmb3Igc3Vic2NyaXB0aW9uICV1IHdpbGwgbm90ICIKLQkJCQkJCSJzdGFydCBiZWNh dXNlIHRoZSBzdWJzY3JpcHRpb24gd2FzIHJlbW92ZWQgZHVyaW5nIHN0YXJ0dXAiLAotCQkJCQkJ TXlMb2dpY2FsUmVwV29ya2VyLT5zdWJpZCkpKTsKKwkJLyogdHJhbnNsYXRvcjogJXMgaXMgdGhl IG5hbWUgb2YgbG9naWNhbCByZXBsaWNhdGlvbiB3b3JrZXIgKi8KKwkJCQkoZXJybXNnKCIlcyBm b3Igc3Vic2NyaXB0aW9uICV1IHdpbGwgbm90IHN0YXJ0IGJlY2F1c2UgdGhlIHN1YnNjcmlwdGlv biB3YXMgcmVtb3ZlZCBkdXJpbmcgc3RhcnR1cCIsCisJCQkJCQlnZXRfd29ya2VyX25hbWUoKSwg TXlMb2dpY2FsUmVwV29ya2VyLT5zdWJpZCkpKTsKKwogCQlwcm9jX2V4aXQoMCk7CiAJfQogCkBA IC0zNjgzLDExICs0NDM1LDExIEBAIEFwcGx5V29ya2VyTWFpbihEYXR1bSBtYWluX2FyZykKIAlp ZiAoIU15U3Vic2NyaXB0aW9uLT5lbmFibGVkKQogCXsKIAkJZXJlcG9ydChMT0csCi0JCQkJKGVy cm1zZygibG9naWNhbCByZXBsaWNhdGlvbiBhcHBseSB3b3JrZXIgZm9yIHN1YnNjcmlwdGlvbiBc IiVzXCIgd2lsbCBub3QgIgotCQkJCQkJInN0YXJ0IGJlY2F1c2UgdGhlIHN1YnNjcmlwdGlvbiB3 YXMgZGlzYWJsZWQgZHVyaW5nIHN0YXJ0dXAiLAotCQkJCQkJTXlTdWJzY3JpcHRpb24tPm5hbWUp KSk7CisJCS8qIHRyYW5zbGF0b3I6IGZpcnN0ICVzIGlzIHRoZSBuYW1lIG9mIGxvZ2ljYWwgcmVw bGljYXRpb24gd29ya2VyICovCisJCQkJKGVycm1zZygiJXMgZm9yIHN1YnNjcmlwdGlvbiBcIiVz XCIgd2lsbCBub3Qgc3RhcnQgYmVjYXVzZSB0aGUgc3Vic2NyaXB0aW9uIHdhcyBkaXNhYmxlZCBk dXJpbmcgc3RhcnR1cCIsCisJCQkJCQlnZXRfd29ya2VyX25hbWUoKSwgTXlTdWJzY3JpcHRpb24t Pm5hbWUpKSk7CiAKLQkJcHJvY19leGl0KDApOworCQlhcHBseV93b3JrZXJfZXhpdCgpOwogCX0K IAogCS8qIFNldHVwIHN5bmNocm9ub3VzIGNvbW1pdCBhY2NvcmRpbmcgdG8gdGhlIHVzZXIncyB3 aXNoZXMgKi8KQEAgLTM3MDIsMTMgKzQ0NTQsNDkgQEAgQXBwbHlXb3JrZXJNYWluKERhdHVtIG1h aW5fYXJnKQogCWlmIChhbV90YWJsZXN5bmNfd29ya2VyKCkpCiAJCWVyZXBvcnQoTE9HLAogCQkJ CShlcnJtc2coImxvZ2ljYWwgcmVwbGljYXRpb24gdGFibGUgc3luY2hyb25pemF0aW9uIHdvcmtl ciBmb3Igc3Vic2NyaXB0aW9uIFwiJXNcIiwgdGFibGUgXCIlc1wiIGhhcyBzdGFydGVkIiwKLQkJ CQkJCU15U3Vic2NyaXB0aW9uLT5uYW1lLCBnZXRfcmVsX25hbWUoTXlMb2dpY2FsUmVwV29ya2Vy LT5yZWxpZCkpKSk7CisJCQkJCQlNeVN1YnNjcmlwdGlvbi0+bmFtZSwKKwkJCQkJCWdldF9yZWxf bmFtZShNeUxvZ2ljYWxSZXBXb3JrZXItPnJlbGlkKSkpKTsKIAllbHNlCiAJCWVyZXBvcnQoTE9H LAotCQkJCShlcnJtc2coImxvZ2ljYWwgcmVwbGljYXRpb24gYXBwbHkgd29ya2VyIGZvciBzdWJz Y3JpcHRpb24gXCIlc1wiIGhhcyBzdGFydGVkIiwKLQkJCQkJCU15U3Vic2NyaXB0aW9uLT5uYW1l KSkpOworCQkvKiB0cmFuc2xhdG9yOiBmaXJzdCAlcyBpcyB0aGUgbmFtZSBvZiBsb2dpY2FsIHJl cGxpY2F0aW9uIHdvcmtlciAqLworCQkJCShlcnJtc2coIiVzIGZvciBzdWJzY3JpcHRpb24gXCIl c1wiIGhhcyBzdGFydGVkIiwKKwkJCQkJCWdldF93b3JrZXJfbmFtZSgpLCBNeVN1YnNjcmlwdGlv bi0+bmFtZSkpKTsKIAogCUNvbW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgpOworfQorCisvKiBMb2dp Y2FsIFJlcGxpY2F0aW9uIEFwcGx5IHdvcmtlciBlbnRyeSBwb2ludCAqLwordm9pZAorQXBwbHlX b3JrZXJNYWluKERhdHVtIG1haW5fYXJnKQoreworCWludAkJCXdvcmtlcl9zbG90ID0gRGF0dW1H ZXRJbnQzMihtYWluX2FyZyk7CisJY2hhcgkJb3JpZ2lubmFtZVtOQU1FREFUQUxFTl07CisJWExv Z1JlY1B0cglvcmlnaW5fc3RhcnRwb3MgPSBJbnZhbGlkWExvZ1JlY1B0cjsKKwljaGFyCSAgICpt eXNsb3RuYW1lID0gTlVMTDsKKwlXYWxSY3ZTdHJlYW1PcHRpb25zIG9wdGlvbnM7CisJaW50CQkJ c2VydmVyX3ZlcnNpb247CisKKwkvKiBBdHRhY2ggdG8gc2xvdCAqLworCWxvZ2ljYWxyZXBfd29y a2VyX2F0dGFjaCh3b3JrZXJfc2xvdCk7CisKKwkvKiBTZXR1cCBzaWduYWwgaGFuZGxpbmcgKi8K KwlwcXNpZ25hbChTSUdIVVAsIFNpZ25hbEhhbmRsZXJGb3JDb25maWdSZWxvYWQpOworCXBxc2ln bmFsKFNJR1RFUk0sIGRpZSk7CisJQmFja2dyb3VuZFdvcmtlclVuYmxvY2tTaWduYWxzKCk7CisK KwkvKgorCSAqIFdlIGRvbid0IGN1cnJlbnRseSBuZWVkIGFueSBSZXNvdXJjZU93bmVyIGluIGEg d2FscmVjZWl2ZXIgcHJvY2VzcywgYnV0CisJICogaWYgd2UgZGlkLCB3ZSBjb3VsZCBjYWxsIENy ZWF0ZUF1eFByb2Nlc3NSZXNvdXJjZU93bmVyIGhlcmUuCisJICovCisKKwkvKiBJbml0aWFsaXNl IHN0YXRzIHRvIGEgc2FuaXNoIHZhbHVlICovCisJTXlMb2dpY2FsUmVwV29ya2VyLT5sYXN0X3Nl bmRfdGltZSA9IE15TG9naWNhbFJlcFdvcmtlci0+bGFzdF9yZWN2X3RpbWUgPQorCQlNeUxvZ2lj YWxSZXBXb3JrZXItPnJlcGx5X3RpbWUgPSBHZXRDdXJyZW50VGltZXN0YW1wKCk7CisKKwkvKiBM b2FkIHRoZSBsaWJwcS1zcGVjaWZpYyBmdW5jdGlvbnMgKi8KKwlsb2FkX2ZpbGUoImxpYnBxd2Fs cmVjZWl2ZXIiLCBmYWxzZSk7CisKKwlJbml0aWFsaXplQXBwbHlXb3JrZXIoKTsKIAogCS8qIENv bm5lY3QgdG8gdGhlIG9yaWdpbiBhbmQgc3RhcnQgdGhlIHJlcGxpY2F0aW9uLiAqLwogCWVsb2co REVCVUcxLCAiY29ubmVjdGluZyB0byBwdWJsaXNoZXIgdXNpbmcgY29ubmVjdGlvbiBzdHJpbmcg XCIlc1wiIiwKQEAgLTM3MTgsMjAgKzQ1MDYsMTUgQEAgQXBwbHlXb3JrZXJNYWluKERhdHVtIG1h aW5fYXJnKQogCXsKIAkJc3RhcnRfdGFibGVfc3luYygmb3JpZ2luX3N0YXJ0cG9zLCAmbXlzbG90 bmFtZSk7CiAKLQkJLyoKLQkJICogQWxsb2NhdGUgdGhlIG9yaWdpbiBuYW1lIGluIGxvbmctbGl2 ZWQgY29udGV4dCBmb3IgZXJyb3IgY29udGV4dAotCQkgKiBtZXNzYWdlLgotCQkgKi8KIAkJUmVw bGljYXRpb25PcmlnaW5OYW1lRm9yTG9naWNhbFJlcChNeVN1YnNjcmlwdGlvbi0+b2lkLAogCQkJ CQkJCQkJCSAgIE15TG9naWNhbFJlcFdvcmtlci0+cmVsaWQsCiAJCQkJCQkJCQkJICAgb3JpZ2lu bmFtZSwKIAkJCQkJCQkJCQkgICBzaXplb2Yob3JpZ2lubmFtZSkpOwotCQlhcHBseV9lcnJvcl9j YWxsYmFja19hcmcub3JpZ2luX25hbWUgPSBNZW1vcnlDb250ZXh0U3RyZHVwKEFwcGx5Q29udGV4 dCwKLQkJCQkJCQkJCQkJCQkJCQkgICBvcmlnaW5uYW1lKTsKKwkJc2V0X2FwcGx5X2Vycm9yX2Nv bnRleHRfb3JpZ2luKG9yaWdpbm5hbWUpOwogCX0KIAllbHNlCiAJewotCQkvKiBUaGlzIGlzIG1h aW4gYXBwbHkgd29ya2VyICovCisJCS8qIFRoaXMgaXMgdGhlIGxlYWRlciBhcHBseSB3b3JrZXIg Ki8KIAkJUmVwT3JpZ2luSWQgb3JpZ2luaWQ7CiAJCVRpbWVMaW5lSUQJc3RhcnRwb2ludFRMSTsK IAkJY2hhcgkgICAqZXJyOwpAQCAtMzc1NSw3ICs0NTM4LDcgQEAgQXBwbHlXb3JrZXJNYWluKERh dHVtIG1haW5fYXJnKQogCQlvcmlnaW5pZCA9IHJlcGxvcmlnaW5fYnlfbmFtZShvcmlnaW5uYW1l LCB0cnVlKTsKIAkJaWYgKCFPaWRJc1ZhbGlkKG9yaWdpbmlkKSkKIAkJCW9yaWdpbmlkID0gcmVw bG9yaWdpbl9jcmVhdGUob3JpZ2lubmFtZSk7Ci0JCXJlcGxvcmlnaW5fc2Vzc2lvbl9zZXR1cChv cmlnaW5pZCk7CisJCXJlcGxvcmlnaW5fc2Vzc2lvbl9zZXR1cChvcmlnaW5pZCwgMCk7CiAJCXJl cGxvcmlnaW5fc2Vzc2lvbl9vcmlnaW4gPSBvcmlnaW5pZDsKIAkJb3JpZ2luX3N0YXJ0cG9zID0g cmVwbG9yaWdpbl9zZXNzaW9uX2dldF9wcm9ncmVzcyhmYWxzZSk7CiAJCUNvbW1pdFRyYW5zYWN0 aW9uQ29tbWFuZCgpOwpAQCAtMzc3MywxMiArNDU1Niw3IEBAIEFwcGx5V29ya2VyTWFpbihEYXR1 bSBtYWluX2FyZykKIAkJICovCiAJCSh2b2lkKSB3YWxyY3ZfaWRlbnRpZnlfc3lzdGVtKExvZ1Jl cFdvcmtlcldhbFJjdkNvbm4sICZzdGFydHBvaW50VExJKTsKIAotCQkvKgotCQkgKiBBbGxvY2F0 ZSB0aGUgb3JpZ2luIG5hbWUgaW4gbG9uZy1saXZlZCBjb250ZXh0IGZvciBlcnJvciBjb250ZXh0 Ci0JCSAqIG1lc3NhZ2UuCi0JCSAqLwotCQlhcHBseV9lcnJvcl9jYWxsYmFja19hcmcub3JpZ2lu X25hbWUgPSBNZW1vcnlDb250ZXh0U3RyZHVwKEFwcGx5Q29udGV4dCwKLQkJCQkJCQkJCQkJCQkJ CQkgICBvcmlnaW5uYW1lKTsKKwkJc2V0X2FwcGx5X2Vycm9yX2NvbnRleHRfb3JpZ2luKG9yaWdp bm5hbWUpOwogCX0KIAogCS8qCkBAIC0zNzk2LDEzICs0NTc0LDM2IEBAIEFwcGx5V29ya2VyTWFp bihEYXR1bSBtYWluX2FyZykKIAogCXNlcnZlcl92ZXJzaW9uID0gd2FscmN2X3NlcnZlcl92ZXJz aW9uKExvZ1JlcFdvcmtlcldhbFJjdkNvbm4pOwogCW9wdGlvbnMucHJvdG8ubG9naWNhbC5wcm90 b192ZXJzaW9uID0KKwkJc2VydmVyX3ZlcnNpb24gPj0gMTYwMDAwID8gTE9HSUNBTFJFUF9QUk9U T19TVFJFQU1fUEFSQUxMRUxfVkVSU0lPTl9OVU0gOgogCQlzZXJ2ZXJfdmVyc2lvbiA+PSAxNTAw MDAgPyBMT0dJQ0FMUkVQX1BST1RPX1RXT1BIQVNFX1ZFUlNJT05fTlVNIDoKIAkJc2VydmVyX3Zl cnNpb24gPj0gMTQwMDAwID8gTE9HSUNBTFJFUF9QUk9UT19TVFJFQU1fVkVSU0lPTl9OVU0gOgog CQlMT0dJQ0FMUkVQX1BST1RPX1ZFUlNJT05fTlVNOwogCiAJb3B0aW9ucy5wcm90by5sb2dpY2Fs LnB1YmxpY2F0aW9uX25hbWVzID0gTXlTdWJzY3JpcHRpb24tPnB1YmxpY2F0aW9uczsKIAlvcHRp b25zLnByb3RvLmxvZ2ljYWwuYmluYXJ5ID0gTXlTdWJzY3JpcHRpb24tPmJpbmFyeTsKLQlvcHRp b25zLnByb3RvLmxvZ2ljYWwuc3RyZWFtaW5nID0gTXlTdWJzY3JpcHRpb24tPnN0cmVhbTsKKwor CS8qCisJICogQXNzaWduIHRoZSBhcHByb3ByaWF0ZSBvcHRpb24gdmFsdWUgZm9yIHN0cmVhbWlu ZyBvcHRpb24gYWNjb3JkaW5nIHRvCisJICogdGhlICdzdHJlYW1pbmcnIG1vZGUgYW5kIHRoZSBw dWJsaXNoZXIncyBhYmlsaXR5IHRvIHN1cHBvcnQgdGhhdCBtb2RlLgorCSAqLworCWlmIChzZXJ2 ZXJfdmVyc2lvbiA+PSAxNjAwMDAgJiYKKwkJTXlTdWJzY3JpcHRpb24tPnN0cmVhbSA9PSBMT0dJ Q0FMUkVQX1NUUkVBTV9QQVJBTExFTCkKKwl7CisJCW9wdGlvbnMucHJvdG8ubG9naWNhbC5zdHJl YW1pbmdfc3RyID0gInBhcmFsbGVsIjsKKwkJTXlMb2dpY2FsUmVwV29ya2VyLT5wYXJhbGxlbF9h cHBseSA9IHRydWU7CisJfQorCWVsc2UgaWYgKHNlcnZlcl92ZXJzaW9uID49IDE0MDAwMCAmJgor CQkJIE15U3Vic2NyaXB0aW9uLT5zdHJlYW0gIT0gTE9HSUNBTFJFUF9TVFJFQU1fT0ZGKQorCXsK KwkJb3B0aW9ucy5wcm90by5sb2dpY2FsLnN0cmVhbWluZ19zdHIgPSAib24iOworCQlNeUxvZ2lj YWxSZXBXb3JrZXItPnBhcmFsbGVsX2FwcGx5ID0gZmFsc2U7CisJfQorCWVsc2UKKwl7CisJCW9w dGlvbnMucHJvdG8ubG9naWNhbC5zdHJlYW1pbmdfc3RyID0gTlVMTDsKKwkJTXlMb2dpY2FsUmVw V29ya2VyLT5wYXJhbGxlbF9hcHBseSA9IGZhbHNlOworCX0KKwogCW9wdGlvbnMucHJvdG8ubG9n aWNhbC50d29waGFzZSA9IGZhbHNlOwogCW9wdGlvbnMucHJvdG8ubG9naWNhbC5vcmlnaW4gPSBw c3RyZHVwKE15U3Vic2NyaXB0aW9uLT5vcmlnaW4pOwogCkBAIC0zODk5LDYgKzQ3MDAsMTUgQEAg SXNMb2dpY2FsV29ya2VyKHZvaWQpCiAJcmV0dXJuIE15TG9naWNhbFJlcFdvcmtlciAhPSBOVUxM OwogfQogCisvKgorICogSXMgY3VycmVudCBwcm9jZXNzIGEgbG9naWNhbCByZXBsaWNhdGlvbiBw YXJhbGxlbCBhcHBseSB3b3JrZXI/CisgKi8KK2Jvb2wKK0lzTG9naWNhbFBhcmFsbGVsQXBwbHlX b3JrZXIodm9pZCkKK3sKKwlyZXR1cm4gSXNMb2dpY2FsV29ya2VyKCkgJiYgYW1fcGFyYWxsZWxf YXBwbHlfd29ya2VyKCk7Cit9CisKIC8qCiAgKiBTdGFydCBza2lwcGluZyBjaGFuZ2VzIG9mIHRo ZSB0cmFuc2FjdGlvbiBpZiB0aGUgZ2l2ZW4gTFNOIG1hdGNoZXMgdGhlCiAgKiBMU04gc3BlY2lm aWVkIGJ5IHN1YnNjcmlwdGlvbidzIHNraXBsc24uCkBAIC0zOTYxLDcgKzQ3NzEsNyBAQCBjbGVh cl9zdWJzY3JpcHRpb25fc2tpcF9sc24oWExvZ1JlY1B0ciBmaW5pc2hfbHNuKQogCVhMb2dSZWNQ dHIJbXlza2lwbHNuID0gTXlTdWJzY3JpcHRpb24tPnNraXBsc247CiAJYm9vbAkJc3RhcnRlZF90 eCA9IGZhbHNlOwogCi0JaWYgKGxpa2VseShYTG9nUmVjUHRySXNJbnZhbGlkKG15c2tpcGxzbikp KQorCWlmIChsaWtlbHkoWExvZ1JlY1B0cklzSW52YWxpZChteXNraXBsc24pKSB8fCBhbV9wYXJh bGxlbF9hcHBseV93b3JrZXIoKSkKIAkJcmV0dXJuOwogCiAJaWYgKCFJc1RyYW5zYWN0aW9uU3Rh dGUoKSkKQEAgLTQwMzMsNyArNDg0Myw3IEBAIGNsZWFyX3N1YnNjcmlwdGlvbl9za2lwX2xzbihY TG9nUmVjUHRyIGZpbmlzaF9sc24pCiB9CiAKIC8qIEVycm9yIGNhbGxiYWNrIHRvIGdpdmUgbW9y ZSBjb250ZXh0IGluZm8gYWJvdXQgdGhlIGNoYW5nZSBiZWluZyBhcHBsaWVkICovCi1zdGF0aWMg dm9pZAordm9pZAogYXBwbHlfZXJyb3JfY2FsbGJhY2sodm9pZCAqYXJnKQogewogCUFwcGx5RXJy b3JDYWxsYmFja0FyZyAqZXJyYXJnID0gJmFwcGx5X2Vycm9yX2NhbGxiYWNrX2FyZzsKQEAgLTQw NjEsMjMgKzQ4NzEsNDcgQEAgYXBwbHlfZXJyb3JfY2FsbGJhY2sodm9pZCAqYXJnKQogCQkJCQkg ICBlcnJhcmctPnJlbW90ZV94aWQsCiAJCQkJCSAgIExTTl9GT1JNQVRfQVJHUyhlcnJhcmctPmZp bmlzaF9sc24pKTsKIAl9Ci0JZWxzZSBpZiAoZXJyYXJnLT5yZW1vdGVfYXR0bnVtIDwgMCkKLQkJ ZXJyY29udGV4dCgicHJvY2Vzc2luZyByZW1vdGUgZGF0YSBmb3IgcmVwbGljYXRpb24gb3JpZ2lu IFwiJXNcIiBkdXJpbmcgbWVzc2FnZSB0eXBlIFwiJXNcIiBmb3IgcmVwbGljYXRpb24gdGFyZ2V0 IHJlbGF0aW9uIFwiJXMuJXNcIiBpbiB0cmFuc2FjdGlvbiAldSwgZmluaXNoZWQgYXQgJVgvJVgi LAotCQkJCSAgIGVycmFyZy0+b3JpZ2luX25hbWUsCi0JCQkJICAgbG9naWNhbHJlcF9tZXNzYWdl X3R5cGUoZXJyYXJnLT5jb21tYW5kKSwKLQkJCQkgICBlcnJhcmctPnJlbC0+cmVtb3RlcmVsLm5z cG5hbWUsCi0JCQkJICAgZXJyYXJnLT5yZWwtPnJlbW90ZXJlbC5yZWxuYW1lLAotCQkJCSAgIGVy cmFyZy0+cmVtb3RlX3hpZCwKLQkJCQkgICBMU05fRk9STUFUX0FSR1MoZXJyYXJnLT5maW5pc2hf bHNuKSk7CiAJZWxzZQotCQllcnJjb250ZXh0KCJwcm9jZXNzaW5nIHJlbW90ZSBkYXRhIGZvciBy ZXBsaWNhdGlvbiBvcmlnaW4gXCIlc1wiIGR1cmluZyBtZXNzYWdlIHR5cGUgXCIlc1wiIGZvciBy ZXBsaWNhdGlvbiB0YXJnZXQgcmVsYXRpb24gXCIlcy4lc1wiIGNvbHVtbiBcIiVzXCIgaW4gdHJh bnNhY3Rpb24gJXUsIGZpbmlzaGVkIGF0ICVYLyVYIiwKLQkJCQkgICBlcnJhcmctPm9yaWdpbl9u YW1lLAotCQkJCSAgIGxvZ2ljYWxyZXBfbWVzc2FnZV90eXBlKGVycmFyZy0+Y29tbWFuZCksCi0J CQkJICAgZXJyYXJnLT5yZWwtPnJlbW90ZXJlbC5uc3BuYW1lLAotCQkJCSAgIGVycmFyZy0+cmVs LT5yZW1vdGVyZWwucmVsbmFtZSwKLQkJCQkgICBlcnJhcmctPnJlbC0+cmVtb3RlcmVsLmF0dG5h bWVzW2VycmFyZy0+cmVtb3RlX2F0dG51bV0sCi0JCQkJICAgZXJyYXJnLT5yZW1vdGVfeGlkLAot CQkJCSAgIExTTl9GT1JNQVRfQVJHUyhlcnJhcmctPmZpbmlzaF9sc24pKTsKKwl7CisJCWlmIChl cnJhcmctPnJlbW90ZV9hdHRudW0gPCAwKQorCQl7CisJCQlpZiAoWExvZ1JlY1B0cklzSW52YWxp ZChlcnJhcmctPmZpbmlzaF9sc24pKQorCQkJCWVycmNvbnRleHQoInByb2Nlc3NpbmcgcmVtb3Rl IGRhdGEgZm9yIHJlcGxpY2F0aW9uIG9yaWdpbiBcIiVzXCIgZHVyaW5nIG1lc3NhZ2UgdHlwZSBc IiVzXCIgZm9yIHJlcGxpY2F0aW9uIHRhcmdldCByZWxhdGlvbiBcIiVzLiVzXCIgaW4gdHJhbnNh Y3Rpb24gJXUiLAorCQkJCQkJICAgZXJyYXJnLT5vcmlnaW5fbmFtZSwKKwkJCQkJCSAgIGxvZ2lj YWxyZXBfbWVzc2FnZV90eXBlKGVycmFyZy0+Y29tbWFuZCksCisJCQkJCQkgICBlcnJhcmctPnJl bC0+cmVtb3RlcmVsLm5zcG5hbWUsCisJCQkJCQkgICBlcnJhcmctPnJlbC0+cmVtb3RlcmVsLnJl bG5hbWUsCisJCQkJCQkgICBlcnJhcmctPnJlbW90ZV94aWQpOworCQkJZWxzZQorCQkJCWVycmNv bnRleHQoInByb2Nlc3NpbmcgcmVtb3RlIGRhdGEgZm9yIHJlcGxpY2F0aW9uIG9yaWdpbiBcIiVz XCIgZHVyaW5nIG1lc3NhZ2UgdHlwZSBcIiVzXCIgZm9yIHJlcGxpY2F0aW9uIHRhcmdldCByZWxh dGlvbiBcIiVzLiVzXCIgaW4gdHJhbnNhY3Rpb24gJXUsIGZpbmlzaGVkIGF0ICVYLyVYIiwKKwkJ CQkJCSAgIGVycmFyZy0+b3JpZ2luX25hbWUsCisJCQkJCQkgICBsb2dpY2FscmVwX21lc3NhZ2Vf dHlwZShlcnJhcmctPmNvbW1hbmQpLAorCQkJCQkJICAgZXJyYXJnLT5yZWwtPnJlbW90ZXJlbC5u c3BuYW1lLAorCQkJCQkJICAgZXJyYXJnLT5yZWwtPnJlbW90ZXJlbC5yZWxuYW1lLAorCQkJCQkJ ICAgZXJyYXJnLT5yZW1vdGVfeGlkLAorCQkJCQkJICAgTFNOX0ZPUk1BVF9BUkdTKGVycmFyZy0+ ZmluaXNoX2xzbikpOworCQl9CisJCWVsc2UKKwkJeworCQkJaWYgKFhMb2dSZWNQdHJJc0ludmFs aWQoZXJyYXJnLT5maW5pc2hfbHNuKSkKKwkJCQllcnJjb250ZXh0KCJwcm9jZXNzaW5nIHJlbW90 ZSBkYXRhIGZvciByZXBsaWNhdGlvbiBvcmlnaW4gXCIlc1wiIGR1cmluZyBtZXNzYWdlIHR5cGUg XCIlc1wiIGZvciByZXBsaWNhdGlvbiB0YXJnZXQgcmVsYXRpb24gXCIlcy4lc1wiIGNvbHVtbiBc IiVzXCIgaW4gdHJhbnNhY3Rpb24gJXUiLAorCQkJCQkJICAgZXJyYXJnLT5vcmlnaW5fbmFtZSwK KwkJCQkJCSAgIGxvZ2ljYWxyZXBfbWVzc2FnZV90eXBlKGVycmFyZy0+Y29tbWFuZCksCisJCQkJ CQkgICBlcnJhcmctPnJlbC0+cmVtb3RlcmVsLm5zcG5hbWUsCisJCQkJCQkgICBlcnJhcmctPnJl bC0+cmVtb3RlcmVsLnJlbG5hbWUsCisJCQkJCQkgICBlcnJhcmctPnJlbC0+cmVtb3RlcmVsLmF0 dG5hbWVzW2VycmFyZy0+cmVtb3RlX2F0dG51bV0sCisJCQkJCQkgICBlcnJhcmctPnJlbW90ZV94 aWQpOworCQkJZWxzZQorCQkJCWVycmNvbnRleHQoInByb2Nlc3NpbmcgcmVtb3RlIGRhdGEgZm9y IHJlcGxpY2F0aW9uIG9yaWdpbiBcIiVzXCIgZHVyaW5nIG1lc3NhZ2UgdHlwZSBcIiVzXCIgZm9y IHJlcGxpY2F0aW9uIHRhcmdldCByZWxhdGlvbiBcIiVzLiVzXCIgY29sdW1uIFwiJXNcIiBpbiB0 cmFuc2FjdGlvbiAldSwgZmluaXNoZWQgYXQgJVgvJVgiLAorCQkJCQkJICAgZXJyYXJnLT5vcmln aW5fbmFtZSwKKwkJCQkJCSAgIGxvZ2ljYWxyZXBfbWVzc2FnZV90eXBlKGVycmFyZy0+Y29tbWFu ZCksCisJCQkJCQkgICBlcnJhcmctPnJlbC0+cmVtb3RlcmVsLm5zcG5hbWUsCisJCQkJCQkgICBl cnJhcmctPnJlbC0+cmVtb3RlcmVsLnJlbG5hbWUsCisJCQkJCQkgICBlcnJhcmctPnJlbC0+cmVt b3RlcmVsLmF0dG5hbWVzW2VycmFyZy0+cmVtb3RlX2F0dG51bV0sCisJCQkJCQkgICBlcnJhcmct PnJlbW90ZV94aWQsCisJCQkJCQkgICBMU05fRk9STUFUX0FSR1MoZXJyYXJnLT5maW5pc2hfbHNu KSk7CisJCX0KKwl9CiB9CiAKIC8qIFNldCB0cmFuc2FjdGlvbiBpbmZvcm1hdGlvbiBvZiBhcHBs eSBlcnJvciBjYWxsYmFjayAqLwpAQCAtNDA5NywzICs0OTMxLDUzIEBAIHJlc2V0X2FwcGx5X2Vy cm9yX2NvbnRleHRfaW5mbyh2b2lkKQogCWFwcGx5X2Vycm9yX2NhbGxiYWNrX2FyZy5yZW1vdGVf YXR0bnVtID0gLTE7CiAJc2V0X2FwcGx5X2Vycm9yX2NvbnRleHRfeGFjdChJbnZhbGlkVHJhbnNh Y3Rpb25JZCwgSW52YWxpZFhMb2dSZWNQdHIpOwogfQorCisvKgorICogQWxsb2NhdGUgdGhlIG9y aWdpbiBuYW1lIGluIGxvbmctbGl2ZWQgY29udGV4dCBmb3IgZXJyb3IgY29udGV4dCBtZXNzYWdl LgorICovCit2b2lkCitzZXRfYXBwbHlfZXJyb3JfY29udGV4dF9vcmlnaW4oY2hhciAqb3JpZ2lu bmFtZSkKK3sKKwlhcHBseV9lcnJvcl9jYWxsYmFja19hcmcub3JpZ2luX25hbWUgPSBNZW1vcnlD b250ZXh0U3RyZHVwKEFwcGx5Q29udGV4dCwKKwkJCQkJCQkJCQkJCQkJCSAgIG9yaWdpbm5hbWUp OworfQorCisvKgorICogUmV0dXJuIHRoZSBhY3Rpb24gdG8gYmUgdGFrZW4gZm9yIHRoZSBnaXZl biB0cmFuc2FjdGlvbi4gKndpbmZvIGlzCisgKiBhc3NpZ25lZCB0byB0aGUgZGVzdGluYXRpb24g cGFyYWxsZWwgd29ya2VyIGluZm8gd2hlbiB0aGUgbGVhZGVyIGFwcGx5CisgKiB3b3JrZXIgaGFz IHRvIHBhc3MgYWxsIHRoZSB0cmFuc2FjdGlvbidzIGNoYW5nZXMgdG8gdGhlIHBhcmFsbGVsIGFw cGx5CisgKiB3b3JrZXIuCisgKi8KK3N0YXRpYyBUcmFuc0FwcGx5QWN0aW9uCitnZXRfdHJhbnNh Y3Rpb25fYXBwbHlfYWN0aW9uKFRyYW5zYWN0aW9uSWQgeGlkLCBQYXJhbGxlbEFwcGx5V29ya2Vy SW5mbyAqKndpbmZvKQoreworCSp3aW5mbyA9IE5VTEw7CisKKwlpZiAoYW1fcGFyYWxsZWxfYXBw bHlfd29ya2VyKCkpCisJeworCQlyZXR1cm4gVFJBTlNfUEFSQUxMRUxfQVBQTFk7CisJfQorCWVs c2UgaWYgKGluX3JlbW90ZV90cmFuc2FjdGlvbikKKwl7CisJCXJldHVybiBUUkFOU19MRUFERVJf QVBQTFk7CisJfQorCisJLyoKKwkgKiBDaGVjayBpZiB3ZSBhcmUgcHJvY2Vzc2luZyB0aGlzIHRy YW5zYWN0aW9uIHVzaW5nIGEgcGFyYWxsZWwgYXBwbHkKKwkgKiB3b3JrZXIuCisJICovCisJKndp bmZvID0gcGFfZmluZF93b3JrZXIoeGlkKTsKKworCWlmICghKndpbmZvKQorCXsKKwkJcmV0dXJu IFRSQU5TX0xFQURFUl9TRVJJQUxJWkU7CisJfQorCWVsc2UgaWYgKCgqd2luZm8pLT5zZXJpYWxp emVfY2hhbmdlcykKKwl7CisJCXJldHVybiBUUkFOU19MRUFERVJfUEFSVElBTF9TRVJJQUxJWkU7 CisJfQorCWVsc2UKKwl7CisJCXJldHVybiBUUkFOU19MRUFERVJfU0VORF9UT19QQVJBTExFTDsK Kwl9Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9wZ291dHB1dC9wZ291 dHB1dC5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcGdvdXRwdXQvcGdvdXRwdXQuYwppbmRl eCBjYTQ2ZmJhM2FmLi40MGM0NGJiN2U5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNh dGlvbi9wZ291dHB1dC9wZ291dHB1dC5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Bn b3V0cHV0L3Bnb3V0cHV0LmMKQEAgLTE4LDYgKzE4LDcgQEAKICNpbmNsdWRlICJjYXRhbG9nL3Bn X3B1YmxpY2F0aW9uX3JlbC5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfc3Vic2NyaXB0aW9uLmgi CiAjaW5jbHVkZSAiY29tbWFuZHMvZGVmcmVtLmgiCisjaW5jbHVkZSAiY29tbWFuZHMvc3Vic2Ny aXB0aW9uY21kcy5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWN1dG9yLmgiCiAjaW5jbHVkZSAi Zm1nci5oIgogI2luY2x1ZGUgIm5vZGVzL21ha2VmdW5jcy5oIgpAQCAtMjkwLDcgKzI5MSw3IEBA IHBhcnNlX291dHB1dF9wYXJhbWV0ZXJzKExpc3QgKm9wdGlvbnMsIFBHT3V0cHV0RGF0YSAqZGF0 YSkKIAlib29sCQlvcmlnaW5fb3B0aW9uX2dpdmVuID0gZmFsc2U7CiAKIAlkYXRhLT5iaW5hcnkg PSBmYWxzZTsKLQlkYXRhLT5zdHJlYW1pbmcgPSBmYWxzZTsKKwlkYXRhLT5zdHJlYW1pbmcgPSBM T0dJQ0FMUkVQX1NUUkVBTV9PRkY7CiAJZGF0YS0+bWVzc2FnZXMgPSBmYWxzZTsKIAlkYXRhLT50 d29fcGhhc2UgPSBmYWxzZTsKIApAQCAtMzY5LDcgKzM3MCw3IEBAIHBhcnNlX291dHB1dF9wYXJh bWV0ZXJzKExpc3QgKm9wdGlvbnMsIFBHT3V0cHV0RGF0YSAqZGF0YSkKIAkJCQkJCSBlcnJtc2co ImNvbmZsaWN0aW5nIG9yIHJlZHVuZGFudCBvcHRpb25zIikpKTsKIAkJCXN0cmVhbWluZ19naXZl biA9IHRydWU7CiAKLQkJCWRhdGEtPnN0cmVhbWluZyA9IGRlZkdldEJvb2xlYW4oZGVmZWwpOwor CQkJZGF0YS0+c3RyZWFtaW5nID0gZGVmR2V0U3RyZWFtaW5nTW9kZShkZWZlbCk7CiAJCX0KIAkJ ZWxzZSBpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAidHdvX3BoYXNlIikgPT0gMCkKIAkJewpA QCAtNDYxLDEzICs0NjIsMjAgQEAgcGdvdXRwdXRfc3RhcnR1cChMb2dpY2FsRGVjb2RpbmdDb250 ZXh0ICpjdHgsIE91dHB1dFBsdWdpbk9wdGlvbnMgKm9wdCwKIAkJICogd2Ugb25seSBhbGxvdyBp dCB3aXRoIHN1ZmZpY2llbnQgdmVyc2lvbiBvZiB0aGUgcHJvdG9jb2wsIGFuZCB3aGVuCiAJCSAq IHRoZSBvdXRwdXQgcGx1Z2luIHN1cHBvcnRzIGl0LgogCQkgKi8KLQkJaWYgKCFkYXRhLT5zdHJl YW1pbmcpCisJCWlmIChkYXRhLT5zdHJlYW1pbmcgPT0gTE9HSUNBTFJFUF9TVFJFQU1fT0ZGKQog CQkJY3R4LT5zdHJlYW1pbmcgPSBmYWxzZTsKLQkJZWxzZSBpZiAoZGF0YS0+cHJvdG9jb2xfdmVy c2lvbiA8IExPR0lDQUxSRVBfUFJPVE9fU1RSRUFNX1ZFUlNJT05fTlVNKQorCQllbHNlIGlmIChk YXRhLT5zdHJlYW1pbmcgPT0gTE9HSUNBTFJFUF9TVFJFQU1fT04gJiYKKwkJCQkgZGF0YS0+cHJv dG9jb2xfdmVyc2lvbiA8IExPR0lDQUxSRVBfUFJPVE9fU1RSRUFNX1ZFUlNJT05fTlVNKQogCQkJ ZXJlcG9ydChFUlJPUiwKIAkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9W QUxVRSksCiAJCQkJCSBlcnJtc2coInJlcXVlc3RlZCBwcm90b192ZXJzaW9uPSVkIGRvZXMgbm90 IHN1cHBvcnQgc3RyZWFtaW5nLCBuZWVkICVkIG9yIGhpZ2hlciIsCiAJCQkJCQkJZGF0YS0+cHJv dG9jb2xfdmVyc2lvbiwgTE9HSUNBTFJFUF9QUk9UT19TVFJFQU1fVkVSU0lPTl9OVU0pKSk7CisJ CWVsc2UgaWYgKGRhdGEtPnN0cmVhbWluZyA9PSBMT0dJQ0FMUkVQX1NUUkVBTV9QQVJBTExFTCAm JgorCQkJCSBkYXRhLT5wcm90b2NvbF92ZXJzaW9uIDwgTE9HSUNBTFJFUF9QUk9UT19TVFJFQU1f UEFSQUxMRUxfVkVSU0lPTl9OVU0pCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShF UlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJIGVycm1zZygicmVxdWVzdGVk IHByb3RvX3ZlcnNpb249JWQgZG9lcyBub3Qgc3VwcG9ydCBwYXJhbGxlbCBzdHJlYW1pbmcsIG5l ZWQgJWQgb3IgaGlnaGVyIiwKKwkJCQkJCQlkYXRhLT5wcm90b2NvbF92ZXJzaW9uLCBMT0dJQ0FM UkVQX1BST1RPX1NUUkVBTV9QQVJBTExFTF9WRVJTSU9OX05VTSkpKTsKIAkJZWxzZSBpZiAoIWN0 eC0+c3RyZWFtaW5nKQogCQkJZXJlcG9ydChFUlJPUiwKIAkJCQkJKGVycmNvZGUoRVJSQ09ERV9J TlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCkBAIC0xODQxLDYgKzE4NDksOCBAQCBwZ291dHB1dF9z dHJlYW1fYWJvcnQoc3RydWN0IExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwKIAkJCQkJICBY TG9nUmVjUHRyIGFib3J0X2xzbikKIHsKIAlSZW9yZGVyQnVmZmVyVFhOICp0b3B0eG47CisJUEdP dXRwdXREYXRhICpkYXRhID0gKFBHT3V0cHV0RGF0YSAqKSBjdHgtPm91dHB1dF9wbHVnaW5fcHJp dmF0ZTsKKwlib29sCQl3cml0ZV9hYm9ydF9pbmZvID0gKGRhdGEtPnN0cmVhbWluZyA9PSBMT0dJ Q0FMUkVQX1NUUkVBTV9QQVJBTExFTCk7CiAKIAkvKgogCSAqIFRoZSBhYm9ydCBzaG91bGQgaGFw cGVuIG91dHNpZGUgc3RyZWFtaW5nIGJsb2NrLCBldmVuIGZvciBzdHJlYW1lZApAQCAtMTg1NCw3 ICsxODY0LDkgQEAgcGdvdXRwdXRfc3RyZWFtX2Fib3J0KHN0cnVjdCBMb2dpY2FsRGVjb2RpbmdD b250ZXh0ICpjdHgsCiAJQXNzZXJ0KHJidHhuX2lzX3N0cmVhbWVkKHRvcHR4bikpOwogCiAJT3V0 cHV0UGx1Z2luUHJlcGFyZVdyaXRlKGN0eCwgdHJ1ZSk7Ci0JbG9naWNhbHJlcF93cml0ZV9zdHJl YW1fYWJvcnQoY3R4LT5vdXQsIHRvcHR4bi0+eGlkLCB0eG4tPnhpZCk7CisJbG9naWNhbHJlcF93 cml0ZV9zdHJlYW1fYWJvcnQoY3R4LT5vdXQsIHRvcHR4bi0+eGlkLCB0eG4tPnhpZCwgYWJvcnRf bHNuLAorCQkJCQkJCQkgIHR4bi0+eGFjdF90aW1lLmFib3J0X3RpbWUsIHdyaXRlX2Fib3J0X2lu Zm8pOworCiAJT3V0cHV0UGx1Z2luV3JpdGUoY3R4LCB0cnVlKTsKIAogCWNsZWFudXBfcmVsX3N5 bmNfY2FjaGUodG9wdHhuLT54aWQsIGZhbHNlKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0 b3JhZ2UvaXBjL3Byb2NzaWduYWwuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3Byb2NzaWdu YWwuYwppbmRleCA3NzY3NjU3ZjI3Li43YzAwOWQ1MjVhIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9zdG9yYWdlL2lwYy9wcm9jc2lnbmFsLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMv cHJvY3NpZ25hbC5jCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSAiY29tbWFuZHMvYXN5bmMu aCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKKyNpbmNsdWRl ICJyZXBsaWNhdGlvbi9sb2dpY2Fsd29ya2VyLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vd2Fs c2VuZGVyLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9jb25kaXRpb25fdmFyaWFibGUuaCIKICNpbmNs dWRlICJzdG9yYWdlL2lwYy5oIgpAQCAtNjU3LDYgKzY1OCw5IEBAIHByb2NzaWduYWxfc2lndXNy MV9oYW5kbGVyKFNJR05BTF9BUkdTKQogCWlmIChDaGVja1Byb2NTaWduYWwoUFJPQ1NJR19MT0df TUVNT1JZX0NPTlRFWFQpKQogCQlIYW5kbGVMb2dNZW1vcnlDb250ZXh0SW50ZXJydXB0KCk7CiAK KwlpZiAoQ2hlY2tQcm9jU2lnbmFsKFBST0NTSUdfUEFSQUxMRUxfQVBQTFlfTUVTU0FHRSkpCisJ CUhhbmRsZVBhcmFsbGVsQXBwbHlNZXNzYWdlSW50ZXJydXB0KCk7CisKIAlpZiAoQ2hlY2tQcm9j U2lnbmFsKFBST0NTSUdfUkVDT1ZFUllfQ09ORkxJQ1RfREFUQUJBU0UpKQogCQlSZWNvdmVyeUNv bmZsaWN0SW50ZXJydXB0KFBST0NTSUdfUkVDT1ZFUllfQ09ORkxJQ1RfREFUQUJBU0UpOwogCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvbG1nci5jIGIvc3JjL2JhY2tlbmQv c3RvcmFnZS9sbWdyL2xtZ3IuYwppbmRleCAxMDQzMDY4YmFjLi4yZjE3MWY1NTI4IDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvbG1nci5jCisrKyBiL3NyYy9iYWNrZW5kL3N0 b3JhZ2UvbG1nci9sbWdyLmMKQEAgLTExMTcsNiArMTExNyw0NSBAQCBVbmxvY2tTaGFyZWRPYmpl Y3RGb3JTZXNzaW9uKE9pZCBjbGFzc2lkLCBPaWQgb2JqaWQsIHVpbnQxNiBvYmpzdWJpZCwKIAlM b2NrUmVsZWFzZSgmdGFnLCBsb2NrbW9kZSwgdHJ1ZSk7CiB9CiAKKy8qCisgKgkJTG9ja0FwcGx5 VHJhbnNhY3Rpb25Gb3JTZXNzaW9uCisgKgorICogT2J0YWluIGEgc2Vzc2lvbi1sZXZlbCBsb2Nr IG9uIGEgdHJhbnNhY3Rpb24gYmVpbmcgYXBwbGllZCBvbiBhIGxvZ2ljYWwKKyAqIHJlcGxpY2F0 aW9uIHN1YnNjcmliZXIuIFNlZSBMb2NrUmVsYXRpb25JZEZvclNlc3Npb24gZm9yIG5vdGVzIGFi b3V0CisgKiBzZXNzaW9uLWxldmVsIGxvY2tzLgorICovCit2b2lkCitMb2NrQXBwbHlUcmFuc2Fj dGlvbkZvclNlc3Npb24oT2lkIHN1Ym9pZCwgVHJhbnNhY3Rpb25JZCB4aWQsIHVpbnQxNiBvYmpp ZCwKKwkJCQkJCQkgICBMT0NLTU9ERSBsb2NrbW9kZSkKK3sKKwlMT0NLVEFHCQl0YWc7CisKKwlT RVRfTE9DS1RBR19BUFBMWV9UUkFOU0FDVElPTih0YWcsCisJCQkJCQkJCSAgTXlEYXRhYmFzZUlk LAorCQkJCQkJCQkgIHN1Ym9pZCwKKwkJCQkJCQkJICB4aWQsCisJCQkJCQkJCSAgb2JqaWQpOwor CisJKHZvaWQpIExvY2tBY3F1aXJlKCZ0YWcsIGxvY2ttb2RlLCB0cnVlLCBmYWxzZSk7Cit9CisK Ky8qCisgKgkJVW5sb2NrQXBwbHlUcmFuc2FjdGlvbkZvclNlc3Npb24KKyAqLwordm9pZAorVW5s b2NrQXBwbHlUcmFuc2FjdGlvbkZvclNlc3Npb24oT2lkIHN1Ym9pZCwgVHJhbnNhY3Rpb25JZCB4 aWQsIHVpbnQxNiBvYmppZCwKKwkJCQkJCQkJIExPQ0tNT0RFIGxvY2ttb2RlKQoreworCUxPQ0tU QUcJCXRhZzsKKworCVNFVF9MT0NLVEFHX0FQUExZX1RSQU5TQUNUSU9OKHRhZywKKwkJCQkJCQkJ ICBNeURhdGFiYXNlSWQsCisJCQkJCQkJCSAgc3Vib2lkLAorCQkJCQkJCQkgIHhpZCwKKwkJCQkJ CQkJICBvYmppZCk7CisKKwlMb2NrUmVsZWFzZSgmdGFnLCBsb2NrbW9kZSwgdHJ1ZSk7Cit9CiAK IC8qCiAgKiBBcHBlbmQgYSBkZXNjcmlwdGlvbiBvZiBhIGxvY2thYmxlIG9iamVjdCB0byBidWYu CkBAIC0xMjAyLDYgKzEyNDEsMTMgQEAgRGVzY3JpYmVMb2NrVGFnKFN0cmluZ0luZm8gYnVmLCBj b25zdCBMT0NLVEFHICp0YWcpCiAJCQkJCQkJIHRhZy0+bG9ja3RhZ19maWVsZDMsCiAJCQkJCQkJ IHRhZy0+bG9ja3RhZ19maWVsZDQpOwogCQkJYnJlYWs7CisJCWNhc2UgTE9DS1RBR19BUFBMWV9U UkFOU0FDVElPTjoKKwkJCWFwcGVuZFN0cmluZ0luZm8oYnVmLAorCQkJCQkJCSBfKCJyZW1vdGUg dHJhbnNhY3Rpb24gJXUgb2Ygc3Vic2NyaXB0aW9uICV1IG9mIGRhdGFiYXNlICV1IiksCisJCQkJ CQkJIHRhZy0+bG9ja3RhZ19maWVsZDMsCisJCQkJCQkJIHRhZy0+bG9ja3RhZ19maWVsZDIsCisJ CQkJCQkJIHRhZy0+bG9ja3RhZ19maWVsZDEpOworCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlh cHBlbmRTdHJpbmdJbmZvKGJ1ZiwKIAkJCQkJCQkgXygidW5yZWNvZ25pemVkIGxvY2t0YWcgdHlw ZSAlZCIpLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jIGIvc3JjL2Jh Y2tlbmQvdGNvcC9wb3N0Z3Jlcy5jCmluZGV4IDAxZDI2NGI1YWIuLmQ1Mjk1YzQ1ZmEgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMuYworKysgYi9zcmMvYmFja2VuZC90Y29w L3Bvc3RncmVzLmMKQEAgLTMzOTEsNiArMzM5MSw5IEBAIFByb2Nlc3NJbnRlcnJ1cHRzKHZvaWQp CiAKIAlpZiAoTG9nTWVtb3J5Q29udGV4dFBlbmRpbmcpCiAJCVByb2Nlc3NMb2dNZW1vcnlDb250 ZXh0SW50ZXJydXB0KCk7CisKKwlpZiAoUGFyYWxsZWxBcHBseU1lc3NhZ2VQZW5kaW5nKQorCQlI YW5kbGVQYXJhbGxlbEFwcGx5TWVzc2FnZXMoKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL3V0aWxzL2FjdGl2aXR5L3dhaXRfZXZlbnQuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2Fj dGl2aXR5L3dhaXRfZXZlbnQuYwppbmRleCBiMmFiZDc1ZGRiLi4xZmFiNDVlNzQwIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS93YWl0X2V2ZW50LmMKKysrIGIvc3JjL2Jh Y2tlbmQvdXRpbHMvYWN0aXZpdHkvd2FpdF9ldmVudC5jCkBAIC0yMzAsNiArMjMwLDkgQEAgcGdz dGF0X2dldF93YWl0X2FjdGl2aXR5KFdhaXRFdmVudEFjdGl2aXR5IHcpCiAJCWNhc2UgV0FJVF9F VkVOVF9MT0dJQ0FMX0xBVU5DSEVSX01BSU46CiAJCQlldmVudF9uYW1lID0gIkxvZ2ljYWxMYXVu Y2hlck1haW4iOwogCQkJYnJlYWs7CisJCWNhc2UgV0FJVF9FVkVOVF9MT0dJQ0FMX1BBUkFMTEVM X0FQUExZX01BSU46CisJCQlldmVudF9uYW1lID0gIkxvZ2ljYWxQYXJhbGxlbEFwcGx5TWFpbiI7 CisJCQlicmVhazsKIAkJY2FzZSBXQUlUX0VWRU5UX1JFQ09WRVJZX1dBTF9TVFJFQU06CiAJCQll dmVudF9uYW1lID0gIlJlY292ZXJ5V2FsU3RyZWFtIjsKIAkJCWJyZWFrOwpAQCAtMzg4LDYgKzM5 MSw5IEBAIHBnc3RhdF9nZXRfd2FpdF9pcGMoV2FpdEV2ZW50SVBDIHcpCiAJCWNhc2UgV0FJVF9F VkVOVF9IQVNIX0dST1dfQlVDS0VUU19SRUlOU0VSVDoKIAkJCWV2ZW50X25hbWUgPSAiSGFzaEdy b3dCdWNrZXRzUmVpbnNlcnQiOwogCQkJYnJlYWs7CisJCWNhc2UgV0FJVF9FVkVOVF9MT0dJQ0FM X1BBUkFMTEVMX0FQUExZX1NUQVRFX0NIQU5HRToKKwkJCWV2ZW50X25hbWUgPSAiTG9naWNhbFBh cmFsbGVsQXBwbHlTdGF0ZUNoYW5nZSI7CisJCQlicmVhazsKIAkJY2FzZSBXQUlUX0VWRU5UX0xP R0lDQUxfU1lOQ19EQVRBOgogCQkJZXZlbnRfbmFtZSA9ICJMb2dpY2FsU3luY0RhdGEiOwogCQkJ YnJlYWs7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvbG9ja2Z1bmNzLmMgYi9z cmMvYmFja2VuZC91dGlscy9hZHQvbG9ja2Z1bmNzLmMKaW5kZXggZjliMzI0ZWZlYy4uM2JmMDQ4 MzFmMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2xvY2tmdW5jcy5jCisrKyBi L3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9sb2NrZnVuY3MuYwpAQCAtMzcsMTAgKzM3LDExIEBAIGNv bnN0IGNoYXIgKmNvbnN0IExvY2tUYWdUeXBlTmFtZXNbXSA9IHsKIAkic3BlY3Rva2VuIiwKIAki b2JqZWN0IiwKIAkidXNlcmxvY2siLAotCSJhZHZpc29yeSIKKwkiYWR2aXNvcnkiLAorCSJhcHBs eXRyYW5zYWN0aW9uIgogfTsKIAotU3RhdGljQXNzZXJ0RGVjbChsZW5ndGhvZihMb2NrVGFnVHlw ZU5hbWVzKSA9PSAoTE9DS1RBR19BRFZJU09SWSArIDEpLAorU3RhdGljQXNzZXJ0RGVjbChsZW5n dGhvZihMb2NrVGFnVHlwZU5hbWVzKSA9PSAoTE9DS1RBR19MQVNUX1RZUEUgKyAxKSwKIAkJCQkg ImFycmF5IGxlbmd0aCBtaXNtYXRjaCIpOwogCiAvKiBUaGlzIG11c3QgbWF0Y2ggZW51bSBQcmVk aWNhdGVMb2NrVGFyZ2V0VHlwZSAocHJlZGljYXRlX2ludGVybmFscy5oKSAqLwpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMgYi9zcmMvYmFja2VuZC91dGls cy9taXNjL2d1Y190YWJsZXMuYwppbmRleCBhMzdjOWY5ODQ0Li42MmI3ZjU3ZTYzIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMuYworKysgYi9zcmMvYmFja2Vu ZC91dGlscy9taXNjL2d1Y190YWJsZXMuYwpAQCAtMzAwMiw2ICszMDAyLDE4IEBAIHN0cnVjdCBj b25maWdfaW50IENvbmZpZ3VyZU5hbWVzSW50W10gPQogCQlOVUxMLCBOVUxMLCBOVUxMCiAJfSwK IAorCXsKKwkJeyJtYXhfcGFyYWxsZWxfYXBwbHlfd29ya2Vyc19wZXJfc3Vic2NyaXB0aW9uIiwK KwkJCVBHQ19TSUdIVVAsCisJCQlSRVBMSUNBVElPTl9TVUJTQ1JJQkVSUywKKwkJCWdldHRleHRf bm9vcCgiTWF4aW11bSBudW1iZXIgb2YgcGFyYWxsZWwgYXBwbHkgd29ya2VycyBwZXIgc3Vic2Ny aXB0aW9uLiIpLAorCQkJTlVMTCwKKwkJfSwKKwkJJm1heF9wYXJhbGxlbF9hcHBseV93b3JrZXJz X3Blcl9zdWJzY3JpcHRpb24sCisJCTIsIDAsIE1BWF9QQVJBTExFTF9XT1JLRVJfTElNSVQsCisJ CU5VTEwsIE5VTEwsIE5VTEwKKwl9LAorCiAJewogCQl7ImxvZ19yb3RhdGlvbl9hZ2UiLCBQR0Nf U0lHSFVQLCBMT0dHSU5HX1dIRVJFLAogCQkJZ2V0dGV4dF9ub29wKCJTZXRzIHRoZSBhbW91bnQg b2YgdGltZSB0byB3YWl0IGJlZm9yZSBmb3JjaW5nICIKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZSBiL3NyYy9iYWNrZW5kL3V0aWxzL21p c2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZQppbmRleCA1YWZkZWIwNGRlLi5jMmFkYTkyMDU0IDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUK KysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlCkBAIC0z NTksNiArMzU5LDcgQEAKICNtYXhfbG9naWNhbF9yZXBsaWNhdGlvbl93b3JrZXJzID0gNAkjIHRh a2VuIGZyb20gbWF4X3dvcmtlcl9wcm9jZXNzZXMKIAkJCQkJIyAoY2hhbmdlIHJlcXVpcmVzIHJl c3RhcnQpCiAjbWF4X3N5bmNfd29ya2Vyc19wZXJfc3Vic2NyaXB0aW9uID0gMgkjIHRha2VuIGZy b20gbWF4X2xvZ2ljYWxfcmVwbGljYXRpb25fd29ya2VycworI21heF9wYXJhbGxlbF9hcHBseV93 b3JrZXJzX3Blcl9zdWJzY3JpcHRpb24gPSAyCSMgdGFrZW4gZnJvbSBtYXhfbG9naWNhbF9yZXBs aWNhdGlvbl93b3JrZXJzCiAKIAogIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEv c3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMKaW5k ZXggNDRkOTU3YzAzOC4uZjQ1NGIzMWM1OCAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3Bn X2R1bXAuYworKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jCkBAIC00NTMzLDcgKzQ1MzMs NyBAQCBnZXRTdWJzY3JpcHRpb25zKEFyY2hpdmUgKmZvdXQpCiAJaWYgKGZvdXQtPnJlbW90ZVZl cnNpb24gPj0gMTQwMDAwKQogCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwgIiBzLnN1YnN0 cmVhbSxcbiIpOwogCWVsc2UKLQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksICIgZmFsc2Ug QVMgc3Vic3RyZWFtLFxuIik7CisJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHF1ZXJ5LCAiICdmJyBB UyBzdWJzdHJlYW0sXG4iKTsKIAogCWlmIChmb3V0LT5yZW1vdGVWZXJzaW9uID49IDE1MDAwMCkK IAkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksCkBAIC00NjcwLDggKzQ2NzAsMTAgQEAgZHVt cFN1YnNjcmlwdGlvbihBcmNoaXZlICpmb3V0LCBjb25zdCBTdWJzY3JpcHRpb25JbmZvICpzdWJp bmZvKQogCWlmIChzdHJjbXAoc3ViaW5mby0+c3ViYmluYXJ5LCAidCIpID09IDApCiAJCWFwcGVu ZFBRRXhwQnVmZmVyU3RyKHF1ZXJ5LCAiLCBiaW5hcnkgPSB0cnVlIik7CiAKLQlpZiAoc3RyY21w KHN1YmluZm8tPnN1YnN0cmVhbSwgImYiKSAhPSAwKQorCWlmIChzdHJjbXAoc3ViaW5mby0+c3Vi c3RyZWFtLCAidCIpID09IDApCiAJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHF1ZXJ5LCAiLCBzdHJl YW1pbmcgPSBvbiIpOworCWVsc2UgaWYgKHN0cmNtcChzdWJpbmZvLT5zdWJzdHJlYW0sICJwIikg PT0gMCkKKwkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksICIsIHN0cmVhbWluZyA9IHBhcmFs bGVsIik7CiAKIAlpZiAoc3RyY21wKHN1YmluZm8tPnN1YnR3b3BoYXNlc3RhdGUsIHR3b19waGFz ZV9kaXNhYmxlZCkgIT0gMCkKIAkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksICIsIHR3b19w aGFzZSA9IG9uIik7CmRpZmYgLS1naXQgYS9zcmMvYmluL3BzcWwvZGVzY3JpYmUuYyBiL3NyYy9i aW4vcHNxbC9kZXNjcmliZS5jCmluZGV4IGRmMTY2MzY1ZTguLjI2NWIyOGQ5MGMgMTAwNjQ0Ci0t LSBhL3NyYy9iaW4vcHNxbC9kZXNjcmliZS5jCisrKyBiL3NyYy9iaW4vcHNxbC9kZXNjcmliZS5j CkBAIC02NTAyLDExICs2NTAyLDI0IEBAIGRlc2NyaWJlU3Vic2NyaXB0aW9ucyhjb25zdCBjaGFy ICpwYXR0ZXJuLCBib29sIHZlcmJvc2UpCiAJewogCQkvKiBCaW5hcnkgbW9kZSBhbmQgc3RyZWFt aW5nIGFyZSBvbmx5IHN1cHBvcnRlZCBpbiB2MTQgYW5kIGhpZ2hlciAqLwogCQlpZiAocHNldC5z dmVyc2lvbiA+PSAxNDAwMDApCisJCXsKIAkJCWFwcGVuZFBRRXhwQnVmZmVyKCZidWYsCi0JCQkJ CQkJICAiLCBzdWJiaW5hcnkgQVMgXCIlc1wiXG4iCi0JCQkJCQkJICAiLCBzdWJzdHJlYW0gQVMg XCIlc1wiXG4iLAotCQkJCQkJCSAgZ2V0dGV4dF9ub29wKCJCaW5hcnkiKSwKLQkJCQkJCQkgIGdl dHRleHRfbm9vcCgiU3RyZWFtaW5nIikpOworCQkJCQkJCSAgIiwgc3ViYmluYXJ5IEFTIFwiJXNc IlxuIiwKKwkJCQkJCQkgIGdldHRleHRfbm9vcCgiQmluYXJ5IikpOworCisJCQlpZiAocHNldC5z dmVyc2lvbiA+PSAxNjAwMDApCisJCQkJYXBwZW5kUFFFeHBCdWZmZXIoJmJ1ZiwKKwkJCQkJCQkJ ICAiLCAoQ0FTRSBzdWJzdHJlYW1cbiIKKwkJCQkJCQkJICAiICAgIFdIRU4gJ2YnIFRIRU4gJ29m ZidcbiIKKwkJCQkJCQkJICAiICAgIFdIRU4gJ3QnIFRIRU4gJ29uJ1xuIgorCQkJCQkJCQkgICIg ICAgV0hFTiAncCcgVEhFTiAncGFyYWxsZWwnXG4iCisJCQkJCQkJCSAgIiAgIEVORCkgQVMgXCIl c1wiXG4iLAorCQkJCQkJCQkgIGdldHRleHRfbm9vcCgiU3RyZWFtaW5nIikpOworCQkJZWxzZQor CQkJCWFwcGVuZFBRRXhwQnVmZmVyKCZidWYsCisJCQkJCQkJCSAgIiwgc3Vic3RyZWFtIEFTIFwi JXNcIlxuIiwKKwkJCQkJCQkJICBnZXR0ZXh0X25vb3AoIlN0cmVhbWluZyIpKTsKKwkJfQogCiAJ CS8qIFR3b19waGFzZSBhbmQgZGlzYWJsZV9vbl9lcnJvciBhcmUgb25seSBzdXBwb3J0ZWQgaW4g djE1IGFuZCBoaWdoZXIgKi8KIAkJaWYgKHBzZXQuc3ZlcnNpb24gPj0gMTUwMDAwKQpkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19zdWJzY3JpcHRpb24uaCBiL3NyYy9pbmNsdWRl L2NhdGFsb2cvcGdfc3Vic2NyaXB0aW9uLmgKaW5kZXggN2I5ODcxNGYzMC4uNWI5ZTVhMzk5YSAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19zdWJzY3JpcHRpb24uaAorKysgYi9z cmMvaW5jbHVkZS9jYXRhbG9nL3BnX3N1YnNjcmlwdGlvbi5oCkBAIC04MCw3ICs4MCw4IEBAIENB VEFMT0cocGdfc3Vic2NyaXB0aW9uLDYxMDAsU3Vic2NyaXB0aW9uUmVsYXRpb25JZCkgQktJX1NI QVJFRF9SRUxBVElPTiBCS0lfUk9XCiAJYm9vbAkJc3ViYmluYXJ5OwkJLyogVHJ1ZSBpZiB0aGUg c3Vic2NyaXB0aW9uIHdhbnRzIHRoZQogCQkJCQkJCQkgKiBwdWJsaXNoZXIgdG8gc2VuZCBkYXRh IGluIGJpbmFyeSAqLwogCi0JYm9vbAkJc3Vic3RyZWFtOwkJLyogU3RyZWFtIGluLXByb2dyZXNz IHRyYW5zYWN0aW9ucy4gKi8KKwljaGFyCQlzdWJzdHJlYW07CQkvKiBTdHJlYW0gaW4tcHJvZ3Jl c3MgdHJhbnNhY3Rpb25zLiBTZWUKKwkJCQkJCQkJICogU1VCU1RSRUFNX3h4eCBjb25zdGFudHMu ICovCiAKIAljaGFyCQlzdWJ0d29waGFzZXN0YXRlOwkvKiBTdHJlYW0gdHdvLXBoYXNlIHRyYW5z YWN0aW9ucyAqLwogCkBAIC0xMjQsNyArMTI1LDggQEAgdHlwZWRlZiBzdHJ1Y3QgU3Vic2NyaXB0 aW9uCiAJYm9vbAkJZW5hYmxlZDsJCS8qIEluZGljYXRlcyBpZiB0aGUgc3Vic2NyaXB0aW9uIGlz IGVuYWJsZWQgKi8KIAlib29sCQliaW5hcnk7CQkJLyogSW5kaWNhdGVzIGlmIHRoZSBzdWJzY3Jp cHRpb24gd2FudHMgZGF0YSBpbgogCQkJCQkJCQkgKiBiaW5hcnkgZm9ybWF0ICovCi0JYm9vbAkJ c3RyZWFtOwkJCS8qIEFsbG93IHN0cmVhbWluZyBpbi1wcm9ncmVzcyB0cmFuc2FjdGlvbnMuICov CisJY2hhcgkJc3RyZWFtOwkJCS8qIEFsbG93IHN0cmVhbWluZyBpbi1wcm9ncmVzcyB0cmFuc2Fj dGlvbnMuCisJCQkJCQkJCSAqIFNlZSBTVUJTVFJFQU1feHh4IGNvbnN0YW50cy4gKi8KIAljaGFy CQl0d29waGFzZXN0YXRlOwkvKiBBbGxvdyBzdHJlYW1pbmcgdHdvLXBoYXNlIHRyYW5zYWN0aW9u cyAqLwogCWJvb2wJCWRpc2FibGVvbmVycjsJLyogSW5kaWNhdGVzIGlmIHRoZSBzdWJzY3JpcHRp b24gc2hvdWxkIGJlCiAJCQkJCQkJCSAqIGF1dG9tYXRpY2FsbHkgZGlzYWJsZWQgaWYgYSB3b3Jr ZXIgZXJyb3IKQEAgLTEzNyw2ICsxMzksMjEgQEAgdHlwZWRlZiBzdHJ1Y3QgU3Vic2NyaXB0aW9u CiAJCQkJCQkJCSAqIHNwZWNpZmllZCBvcmlnaW4gKi8KIH0gU3Vic2NyaXB0aW9uOwogCisvKiBE aXNhbGxvdyBzdHJlYW1pbmcgaW4tcHJvZ3Jlc3MgdHJhbnNhY3Rpb25zLiAqLworI2RlZmluZSBM T0dJQ0FMUkVQX1NUUkVBTV9PRkYgJ2YnCisKKy8qCisgKiBTdHJlYW1pbmcgaW4tcHJvZ3Jlc3Mg dHJhbnNhY3Rpb25zIGFyZSB3cml0dGVuIHRvIGEgdGVtcG9yYXJ5IGZpbGUgYW5kCisgKiBhcHBs aWVkIG9ubHkgYWZ0ZXIgdGhlIHRyYW5zYWN0aW9uIGlzIGNvbW1pdHRlZCBvbiB1cHN0cmVhbS4K KyAqLworI2RlZmluZSBMT0dJQ0FMUkVQX1NUUkVBTV9PTiAndCcKKworLyoKKyAqIFN0cmVhbWlu ZyBpbi1wcm9ncmVzcyB0cmFuc2FjdGlvbnMgYXJlIGFwcGxpZWQgaW1tZWRpYXRlbHkgdmlhIGEg cGFyYWxsZWwKKyAqIGFwcGx5IHdvcmtlci4KKyAqLworI2RlZmluZSBMT0dJQ0FMUkVQX1NUUkVB TV9QQVJBTExFTCAncCcKKwogZXh0ZXJuIFN1YnNjcmlwdGlvbiAqR2V0U3Vic2NyaXB0aW9uKE9p ZCBzdWJpZCwgYm9vbCBtaXNzaW5nX29rKTsKIGV4dGVybiB2b2lkIEZyZWVTdWJzY3JpcHRpb24o U3Vic2NyaXB0aW9uICpzdWIpOwogZXh0ZXJuIHZvaWQgRGlzYWJsZVN1YnNjcmlwdGlvbihPaWQg c3ViaWQpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvc3Vic2NyaXB0aW9uY21k cy5oIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvc3Vic2NyaXB0aW9uY21kcy5oCmluZGV4IDJjYmU3 ZDdiNjUuLjc3OTQ3NGY1NjUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3N1YnNj cmlwdGlvbmNtZHMuaAorKysgYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9zdWJzY3JpcHRpb25jbWRz LmgKQEAgLTI2LDQgKzI2LDYgQEAgZXh0ZXJuIHZvaWQgRHJvcFN1YnNjcmlwdGlvbihEcm9wU3Vi c2NyaXB0aW9uU3RtdCAqc3RtdCwgYm9vbCBpc1RvcExldmVsKTsKIGV4dGVybiBPYmplY3RBZGRy ZXNzIEFsdGVyU3Vic2NyaXB0aW9uT3duZXIoY29uc3QgY2hhciAqbmFtZSwgT2lkIG5ld093bmVy SWQpOwogZXh0ZXJuIHZvaWQgQWx0ZXJTdWJzY3JpcHRpb25Pd25lcl9vaWQoT2lkIHN1YmlkLCBP aWQgbmV3T3duZXJJZCk7CiAKK2V4dGVybiBjaGFyIGRlZkdldFN0cmVhbWluZ01vZGUoRGVmRWxl bSAqZGVmKTsKKwogI2VuZGlmCQkJCQkJCS8qIFNVQlNDUklQVElPTkNNRFNfSCAqLwpkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbGxhdW5jaGVyLmggYi9zcmMvaW5j bHVkZS9yZXBsaWNhdGlvbi9sb2dpY2FsbGF1bmNoZXIuaAppbmRleCBmMWUyODIxZTI1Li5kNTEz ZWY1MzNhIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dpY2FsbGF1bmNo ZXIuaAorKysgYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dpY2FsbGF1bmNoZXIuaApAQCAt MTQsNiArMTQsNyBAQAogCiBleHRlcm4gUEdETExJTVBPUlQgaW50IG1heF9sb2dpY2FsX3JlcGxp Y2F0aW9uX3dvcmtlcnM7CiBleHRlcm4gUEdETExJTVBPUlQgaW50IG1heF9zeW5jX3dvcmtlcnNf cGVyX3N1YnNjcmlwdGlvbjsKK2V4dGVybiBQR0RMTElNUE9SVCBpbnQgbWF4X3BhcmFsbGVsX2Fw cGx5X3dvcmtlcnNfcGVyX3N1YnNjcmlwdGlvbjsKIAogZXh0ZXJuIHZvaWQgQXBwbHlMYXVuY2hl clJlZ2lzdGVyKHZvaWQpOwogZXh0ZXJuIHZvaWQgQXBwbHlMYXVuY2hlck1haW4oRGF0dW0gbWFp bl9hcmcpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbHByb3Rv LmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dpY2FscHJvdG8uaAppbmRleCAxZWI3ZGRh NTI5Li40ZmEyYmQzN2RlIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dp Y2FscHJvdG8uaAorKysgYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dpY2FscHJvdG8uaApA QCAtMzIsMTIgKzMyLDE3IEBACiAgKgogICogTE9HSUNBTFJFUF9QUk9UT19UV09QSEFTRV9WRVJT SU9OX05VTSBpcyB0aGUgbWluaW11bSBwcm90b2NvbCB2ZXJzaW9uIHdpdGgKICAqIHN1cHBvcnQg Zm9yIHR3by1waGFzZSBjb21taXQgZGVjb2RpbmcgKGF0IHByZXBhcmUgdGltZSkuIEludHJvZHVj ZWQgaW4gUEcxNS4KKyAqCisgKiBMT0dJQ0FMUkVQX1BST1RPX1NUUkVBTV9QQVJBTExFTF9WRVJT SU9OX05VTSBpcyB0aGUgbWluaW11bSBwcm90b2NvbCB2ZXJzaW9uCisgKiB3aGVyZSB3ZSBzdXBw b3J0IGFwcGx5aW5nIGxhcmdlIHN0cmVhbWluZyB0cmFuc2FjdGlvbnMgaW4gcGFyYWxsZWwuCisg KiBJbnRyb2R1Y2VkIGluIFBHMTYuCiAgKi8KICNkZWZpbmUgTE9HSUNBTFJFUF9QUk9UT19NSU5f VkVSU0lPTl9OVU0gMQogI2RlZmluZSBMT0dJQ0FMUkVQX1BST1RPX1ZFUlNJT05fTlVNIDEKICNk ZWZpbmUgTE9HSUNBTFJFUF9QUk9UT19TVFJFQU1fVkVSU0lPTl9OVU0gMgogI2RlZmluZSBMT0dJ Q0FMUkVQX1BST1RPX1RXT1BIQVNFX1ZFUlNJT05fTlVNIDMKLSNkZWZpbmUgTE9HSUNBTFJFUF9Q Uk9UT19NQVhfVkVSU0lPTl9OVU0gTE9HSUNBTFJFUF9QUk9UT19UV09QSEFTRV9WRVJTSU9OX05V TQorI2RlZmluZSBMT0dJQ0FMUkVQX1BST1RPX1NUUkVBTV9QQVJBTExFTF9WRVJTSU9OX05VTSA0 CisjZGVmaW5lIExPR0lDQUxSRVBfUFJPVE9fTUFYX1ZFUlNJT05fTlVNIExPR0lDQUxSRVBfUFJP VE9fU1RSRUFNX1BBUkFMTEVMX1ZFUlNJT05fTlVNCiAKIC8qCiAgKiBMb2dpY2FsIG1lc3NhZ2Ug dHlwZXMKQEAgLTE3NSw2ICsxODAsMTcgQEAgdHlwZWRlZiBzdHJ1Y3QgTG9naWNhbFJlcFJvbGxi YWNrUHJlcGFyZWRUeG5EYXRhCiAJY2hhcgkJZ2lkW0dJRFNJWkVdOwogfSBMb2dpY2FsUmVwUm9s bGJhY2tQcmVwYXJlZFR4bkRhdGE7CiAKKy8qCisgKiBUcmFuc2FjdGlvbiBwcm90b2NvbCBpbmZv cm1hdGlvbiBmb3Igc3RyZWFtIGFib3J0LgorICovCit0eXBlZGVmIHN0cnVjdCBMb2dpY2FsUmVw U3RyZWFtQWJvcnREYXRhCit7CisJVHJhbnNhY3Rpb25JZCB4aWQ7CisJVHJhbnNhY3Rpb25JZCBz dWJ4aWQ7CisJWExvZ1JlY1B0cglhYm9ydF9sc247CisJVGltZXN0YW1wVHogYWJvcnRfdGltZTsK K30gTG9naWNhbFJlcFN0cmVhbUFib3J0RGF0YTsKKwogZXh0ZXJuIHZvaWQgbG9naWNhbHJlcF93 cml0ZV9iZWdpbihTdHJpbmdJbmZvIG91dCwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuKTsKIGV4dGVy biB2b2lkIGxvZ2ljYWxyZXBfcmVhZF9iZWdpbihTdHJpbmdJbmZvIGluLAogCQkJCQkJCQkgIExv Z2ljYWxSZXBCZWdpbkRhdGEgKmJlZ2luX2RhdGEpOwpAQCAtMjQ2LDkgKzI2MiwxMyBAQCBleHRl cm4gdm9pZCBsb2dpY2FscmVwX3dyaXRlX3N0cmVhbV9jb21taXQoU3RyaW5nSW5mbyBvdXQsIFJl b3JkZXJCdWZmZXJUWE4gKnR4bgogZXh0ZXJuIFRyYW5zYWN0aW9uSWQgbG9naWNhbHJlcF9yZWFk X3N0cmVhbV9jb21taXQoU3RyaW5nSW5mbyBpbiwKIAkJCQkJCQkJCQkJCSAgIExvZ2ljYWxSZXBD b21taXREYXRhICpjb21taXRfZGF0YSk7CiBleHRlcm4gdm9pZCBsb2dpY2FscmVwX3dyaXRlX3N0 cmVhbV9hYm9ydChTdHJpbmdJbmZvIG91dCwgVHJhbnNhY3Rpb25JZCB4aWQsCi0JCQkJCQkJCQkJ ICBUcmFuc2FjdGlvbklkIHN1YnhpZCk7Ci1leHRlcm4gdm9pZCBsb2dpY2FscmVwX3JlYWRfc3Ry ZWFtX2Fib3J0KFN0cmluZ0luZm8gaW4sIFRyYW5zYWN0aW9uSWQgKnhpZCwKLQkJCQkJCQkJCQkg VHJhbnNhY3Rpb25JZCAqc3VieGlkKTsKKwkJCQkJCQkJCQkgIFRyYW5zYWN0aW9uSWQgc3VieGlk LAorCQkJCQkJCQkJCSAgWExvZ1JlY1B0ciBhYm9ydF9sc24sCisJCQkJCQkJCQkJICBUaW1lc3Rh bXBUeiBhYm9ydF90aW1lLAorCQkJCQkJCQkJCSAgYm9vbCB3cml0ZV9hYm9ydF9pbmZvKTsKK2V4 dGVybiB2b2lkIGxvZ2ljYWxyZXBfcmVhZF9zdHJlYW1fYWJvcnQoU3RyaW5nSW5mbyBpbiwKKwkJ CQkJCQkJCQkgTG9naWNhbFJlcFN0cmVhbUFib3J0RGF0YSAqYWJvcnRfZGF0YSwKKwkJCQkJCQkJ CQkgYm9vbCByZWFkX2Fib3J0X2luZm8pOwogZXh0ZXJuIGNoYXIgKmxvZ2ljYWxyZXBfbWVzc2Fn ZV90eXBlKExvZ2ljYWxSZXBNc2dUeXBlIGFjdGlvbik7CiAKICNlbmRpZgkJCQkJCQkvKiBMT0dJ Q0FMX1BST1RPX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2lj YWx3b3JrZXIuaCBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWx3b3JrZXIuaAppbmRl eCBjZDFiNmU4YWZjLi5kYzY4Y2Q4OWM4IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBsaWNh dGlvbi9sb2dpY2Fsd29ya2VyLmgKKysrIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNh bHdvcmtlci5oCkBAIC0xMiw4ICsxMiwxNiBAQAogI2lmbmRlZiBMT0dJQ0FMV09SS0VSX0gKICNk ZWZpbmUgTE9HSUNBTFdPUktFUl9ICiAKKyNpbmNsdWRlIDxzaWduYWwuaD4KKworZXh0ZXJuIFBH RExMSU1QT1JUIHZvbGF0aWxlIHNpZ19hdG9taWNfdCBQYXJhbGxlbEFwcGx5TWVzc2FnZVBlbmRp bmc7CisKIGV4dGVybiB2b2lkIEFwcGx5V29ya2VyTWFpbihEYXR1bSBtYWluX2FyZyk7CitleHRl cm4gdm9pZCBQYXJhbGxlbEFwcGx5V29ya2VyTWFpbihEYXR1bSBtYWluX2FyZyk7CiAKIGV4dGVy biBib29sIElzTG9naWNhbFdvcmtlcih2b2lkKTsKK2V4dGVybiBib29sIElzTG9naWNhbFBhcmFs bGVsQXBwbHlXb3JrZXIodm9pZCk7CitleHRlcm4gdm9pZCBIYW5kbGVQYXJhbGxlbEFwcGx5TWVz c2FnZUludGVycnVwdCh2b2lkKTsKK2V4dGVybiB2b2lkIEhhbmRsZVBhcmFsbGVsQXBwbHlNZXNz YWdlcyh2b2lkKTsKIAogI2VuZGlmCQkJCQkJCS8qIExPR0lDQUxXT1JLRVJfSCAqLwpkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vb3JpZ2luLmggYi9zcmMvaW5jbHVkZS9yZXBs aWNhdGlvbi9vcmlnaW4uaAppbmRleCAyYTUwZDEwYjUyLi5jN2IxYWRmZmY1IDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9vcmlnaW4uaAorKysgYi9zcmMvaW5jbHVkZS9yZXBs aWNhdGlvbi9vcmlnaW4uaApAQCAtNTMsNyArNTMsNyBAQCBleHRlcm4gWExvZ1JlY1B0ciByZXBs b3JpZ2luX2dldF9wcm9ncmVzcyhSZXBPcmlnaW5JZCBub2RlLCBib29sIGZsdXNoKTsKIAogZXh0 ZXJuIHZvaWQgcmVwbG9yaWdpbl9zZXNzaW9uX2FkdmFuY2UoWExvZ1JlY1B0ciByZW1vdGVfY29t bWl0LAogCQkJCQkJCQkJICAgWExvZ1JlY1B0ciBsb2NhbF9jb21taXQpOwotZXh0ZXJuIHZvaWQg cmVwbG9yaWdpbl9zZXNzaW9uX3NldHVwKFJlcE9yaWdpbklkIG5vZGUpOworZXh0ZXJuIHZvaWQg cmVwbG9yaWdpbl9zZXNzaW9uX3NldHVwKFJlcE9yaWdpbklkIG5vZGUsIGludCBhY3F1aXJlZF9i eSk7CiBleHRlcm4gdm9pZCByZXBsb3JpZ2luX3Nlc3Npb25fcmVzZXQodm9pZCk7CiBleHRlcm4g WExvZ1JlY1B0ciByZXBsb3JpZ2luX3Nlc3Npb25fZ2V0X3Byb2dyZXNzKGJvb2wgZmx1c2gpOwog CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9wZ291dHB1dC5oIGIvc3JjL2lu Y2x1ZGUvcmVwbGljYXRpb24vcGdvdXRwdXQuaAppbmRleCAwMjAyNzU1MGUyLi4zYzMwZGE4MjA1 IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9wZ291dHB1dC5oCisrKyBiL3Ny Yy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Bnb3V0cHV0LmgKQEAgLTI2LDcgKzI2LDcgQEAgdHlwZWRl ZiBzdHJ1Y3QgUEdPdXRwdXREYXRhCiAJTGlzdAkgICAqcHVibGljYXRpb25fbmFtZXM7CiAJTGlz dAkgICAqcHVibGljYXRpb25zOwogCWJvb2wJCWJpbmFyeTsKLQlib29sCQlzdHJlYW1pbmc7CisJ Y2hhcgkJc3RyZWFtaW5nOwogCWJvb2wJCW1lc3NhZ2VzOwogCWJvb2wJCXR3b19waGFzZTsKIAlj aGFyCSAgICpvcmlnaW47CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9yZW9y ZGVyYnVmZmVyLmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9yZW9yZGVyYnVmZmVyLmgKaW5k ZXggYjI3YTQzNjE4YS4uZDY3YmRiZmI3NSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVwbGlj YXRpb24vcmVvcmRlcmJ1ZmZlci5oCisrKyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Jlb3Jk ZXJidWZmZXIuaApAQCAtMzE2LDYgKzMxNiw3IEBAIHR5cGVkZWYgc3RydWN0IFJlb3JkZXJCdWZm ZXJUWE4KIAl7CiAJCVRpbWVzdGFtcFR6IGNvbW1pdF90aW1lOwogCQlUaW1lc3RhbXBUeiBwcmVw YXJlX3RpbWU7CisJCVRpbWVzdGFtcFR6IGFib3J0X3RpbWU7CiAJfQkJCXhhY3RfdGltZTsKIAog CS8qCkBAIC02NzgsNyArNjc5LDggQEAgZXh0ZXJuIHZvaWQgUmVvcmRlckJ1ZmZlckFzc2lnbkNo aWxkKFJlb3JkZXJCdWZmZXIgKnJiLCBUcmFuc2FjdGlvbklkIHhpZCwKIGV4dGVybiB2b2lkIFJl b3JkZXJCdWZmZXJDb21taXRDaGlsZChSZW9yZGVyQnVmZmVyICpyYiwgVHJhbnNhY3Rpb25JZCB4 aWQsCiAJCQkJCQkJCQkgVHJhbnNhY3Rpb25JZCBzdWJ4aWQsIFhMb2dSZWNQdHIgY29tbWl0X2xz biwKIAkJCQkJCQkJCSBYTG9nUmVjUHRyIGVuZF9sc24pOwotZXh0ZXJuIHZvaWQgUmVvcmRlckJ1 ZmZlckFib3J0KFJlb3JkZXJCdWZmZXIgKnJiLCBUcmFuc2FjdGlvbklkIHhpZCwgWExvZ1JlY1B0 ciBsc24pOworZXh0ZXJuIHZvaWQgUmVvcmRlckJ1ZmZlckFib3J0KFJlb3JkZXJCdWZmZXIgKnJi LCBUcmFuc2FjdGlvbklkIHhpZCwgWExvZ1JlY1B0ciBsc24sCisJCQkJCQkJICAgVGltZXN0YW1w VHogYWJvcnRfdGltZSk7CiBleHRlcm4gdm9pZCBSZW9yZGVyQnVmZmVyQWJvcnRPbGQoUmVvcmRl ckJ1ZmZlciAqcmIsIFRyYW5zYWN0aW9uSWQgb2xkZXN0UnVubmluZ1hpZCk7CiBleHRlcm4gdm9p ZCBSZW9yZGVyQnVmZmVyRm9yZ2V0KFJlb3JkZXJCdWZmZXIgKnJiLCBUcmFuc2FjdGlvbklkIHhp ZCwgWExvZ1JlY1B0ciBsc24pOwogZXh0ZXJuIHZvaWQgUmVvcmRlckJ1ZmZlckludmFsaWRhdGUo UmVvcmRlckJ1ZmZlciAqcmIsIFRyYW5zYWN0aW9uSWQgeGlkLCBYTG9nUmVjUHRyIGxzbik7CmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi93YWxyZWNlaXZlci5oIGIvc3JjL2lu Y2x1ZGUvcmVwbGljYXRpb24vd2FscmVjZWl2ZXIuaAppbmRleCA5MzM5ZjI5MzAzLi4wYzhiYmRk YWJlIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi93YWxyZWNlaXZlci5oCisr KyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3dhbHJlY2VpdmVyLmgKQEAgLTE4Miw3ICsxODIs NyBAQCB0eXBlZGVmIHN0cnVjdAogCQkJdWludDMyCQlwcm90b192ZXJzaW9uOwkvKiBMb2dpY2Fs IHByb3RvY29sIHZlcnNpb24gKi8KIAkJCUxpc3QJICAgKnB1YmxpY2F0aW9uX25hbWVzOwkvKiBT dHJpbmcgbGlzdCBvZiBwdWJsaWNhdGlvbnMgKi8KIAkJCWJvb2wJCWJpbmFyeTsgLyogQXNrIHB1 Ymxpc2hlciB0byB1c2UgYmluYXJ5ICovCi0JCQlib29sCQlzdHJlYW1pbmc7CS8qIFN0cmVhbWlu ZyBvZiBsYXJnZSB0cmFuc2FjdGlvbnMgKi8KKwkJCWNoYXIJICAgKnN0cmVhbWluZ19zdHI7CS8q IFN0cmVhbWluZyBvZiBsYXJnZSB0cmFuc2FjdGlvbnMgKi8KIAkJCWJvb2wJCXR3b3BoYXNlOwkv KiBTdHJlYW1pbmcgb2YgdHdvLXBoYXNlIHRyYW5zYWN0aW9ucyBhdAogCQkJCQkJCQkJICogcHJl cGFyZSB0aW1lICovCiAJCQljaGFyCSAgICpvcmlnaW47IC8qIE9ubHkgcHVibGlzaCBkYXRhIG9y aWdpbmF0aW5nIGZyb20gdGhlCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi93 b3JrZXJfaW50ZXJuYWwuaCBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3dvcmtlcl9pbnRlcm5h bC5oCmluZGV4IDJiNzExNGZmNmQuLmQwY2I5YjYwODkgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRl L3JlcGxpY2F0aW9uL3dvcmtlcl9pbnRlcm5hbC5oCisrKyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0 aW9uL3dvcmtlcl9pbnRlcm5hbC5oCkBAIC0xNyw4ICsxNywxMyBAQAogI2luY2x1ZGUgImFjY2Vz cy94bG9nZGVmcy5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfc3Vic2NyaXB0aW9uLmgiCiAjaW5j bHVkZSAiZGF0YXR5cGUvdGltZXN0YW1wLmgiCisjaW5jbHVkZSAibWlzY2FkbWluLmgiCisjaW5j bHVkZSAicmVwbGljYXRpb24vbG9naWNhbHJlbGF0aW9uLmgiCisjaW5jbHVkZSAic3RvcmFnZS9i dWZmaWxlLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9maWxlc2V0LmgiCiAjaW5jbHVkZSAic3RvcmFn ZS9sb2NrLmgiCisjaW5jbHVkZSAic3RvcmFnZS9zaG1fbXEuaCIKKyNpbmNsdWRlICJzdG9yYWdl L3NobV90b2MuaCIKICNpbmNsdWRlICJzdG9yYWdlL3NwaW4uaCIKIAogCkBAIC01MywxMyArNTgs MjQgQEAgdHlwZWRlZiBzdHJ1Y3QgTG9naWNhbFJlcFdvcmtlcgogCiAJLyoKIAkgKiBVc2VkIHRv IGNyZWF0ZSB0aGUgY2hhbmdlcyBhbmQgc3VieGFjdCBmaWxlcyBmb3IgdGhlIHN0cmVhbWluZwot CSAqIHRyYW5zYWN0aW9ucy4gIFVwb24gdGhlIGFycml2YWwgb2YgdGhlIGZpcnN0IHN0cmVhbWlu ZyB0cmFuc2FjdGlvbiwgdGhlCi0JICogZmlsZXNldCB3aWxsIGJlIGluaXRpYWxpemVkLCBhbmQg aXQgd2lsbCBiZSBkZWxldGVkIHdoZW4gdGhlIHdvcmtlcgotCSAqIGV4aXRzLiAgVW5kZXIgdGhp cywgc2VwYXJhdGUgYnVmZmlsZXMgd291bGQgYmUgY3JlYXRlZCBmb3IgZWFjaAotCSAqIHRyYW5z YWN0aW9uIHdoaWNoIHdpbGwgYmUgZGVsZXRlZCBhZnRlciB0aGUgdHJhbnNhY3Rpb24gaXMgZmlu aXNoZWQuCisJICogdHJhbnNhY3Rpb25zLiAgVXBvbiB0aGUgYXJyaXZhbCBvZiB0aGUgZmlyc3Qg c3RyZWFtaW5nIHRyYW5zYWN0aW9uIG9yCisJICogd2hlbiB0aGUgZmlyc3QtdGltZSBsZWFkZXIg YXBwbHkgd29ya2VyIHRpbWVzIG91dCB3aGlsZSBzZW5kaW5nIGNoYW5nZXMKKwkgKiB0byB0aGUg cGFyYWxsZWwgYXBwbHkgd29ya2VyLCB0aGUgZmlsZXNldCB3aWxsIGJlIGluaXRpYWxpemVkLCBh bmQgaXQKKwkgKiB3aWxsIGJlIGRlbGV0ZWQgd2hlbiB0aGUgd29ya2VyIGV4aXRzLiAgVW5kZXIg dGhpcywgc2VwYXJhdGUgYnVmZmlsZXMKKwkgKiB3b3VsZCBiZSBjcmVhdGVkIGZvciBlYWNoIHRy YW5zYWN0aW9uIHdoaWNoIHdpbGwgYmUgZGVsZXRlZCBhZnRlciB0aGUKKwkgKiB0cmFuc2FjdGlv biBpcyBmaW5pc2hlZC4KIAkgKi8KIAlGaWxlU2V0ICAgICpzdHJlYW1fZmlsZXNldDsKIAorCS8q CisJICogUElEIG9mIGxlYWRlciBhcHBseSB3b3JrZXIgaWYgdGhpcyBzbG90IGlzIHVzZWQgZm9y IGEgcGFyYWxsZWwgYXBwbHkKKwkgKiB3b3JrZXIsIEludmFsaWRQaWQgb3RoZXJ3aXNlLgorCSAq LworCXBpZF90CQlhcHBseV9sZWFkZXJfcGlkOworCisJLyogSW5kaWNhdGVzIHdoZXRoZXIgYXBw bHkgY2FuIGJlIHBlcmZvcm1lZCBpbiBwYXJhbGxlbC4gKi8KKwlib29sCQlwYXJhbGxlbF9hcHBs eTsKKwogCS8qIFN0YXRzLiAqLwogCVhMb2dSZWNQdHIJbGFzdF9sc247CiAJVGltZXN0YW1wVHog bGFzdF9zZW5kX3RpbWU7CkBAIC02OCw5ICs4NCwxMzggQEAgdHlwZWRlZiBzdHJ1Y3QgTG9naWNh bFJlcFdvcmtlcgogCVRpbWVzdGFtcFR6IHJlcGx5X3RpbWU7CiB9IExvZ2ljYWxSZXBXb3JrZXI7 CiAKKy8qCisgKiBTdGF0ZSBvZiB0aGUgdHJhbnNhY3Rpb24gaW4gcGFyYWxsZWwgYXBwbHkgd29y a2VyLgorICoKKyAqIFRoZSBlbnVtIHZhbHVlcyBtdXN0IGhhdmUgdGhlIHNhbWUgb3JkZXIgYXMg dGhlIHRyYW5zYWN0aW9uIHN0YXRlCisgKiB0cmFuc2l0aW9ucy4KKyAqLwordHlwZWRlZiBlbnVt IFBhcmFsbGVsVHJhbnNTdGF0ZQoreworCVBBUkFMTEVMX1RSQU5TX1VOS05PV04sCisJUEFSQUxM RUxfVFJBTlNfU1RBUlRFRCwKKwlQQVJBTExFTF9UUkFOU19GSU5JU0hFRAorfSBQYXJhbGxlbFRy YW5zU3RhdGU7CisKKy8qCisgKiBTdGF0ZSBvZiBmaWxlc2V0IHVzZWQgdG8gY29tbXVuaWNhdGUg Y2hhbmdlcyBmcm9tIGxlYWRlciB0byBwYXJhbGxlbAorICogYXBwbHkgd29ya2VyLgorICoKKyAq IEZTX0VNUFRZIGluZGljYXRlcyBhbiBpbml0aWFsIHN0YXRlIHdoZXJlIHRoZSBsZWFkZXIgZG9l c24ndCBuZWVkIHRvIHVzZQorICogdGhlIGZpbGUgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgcGFy YWxsZWwgYXBwbHkgd29ya2VyLgorICoKKyAqIEZTX1NFUklBTElaRV9JTl9QUk9HUkVTUyBpbmRp Y2F0ZXMgdGhhdCB0aGUgbGVhZGVyIGlzIHNlcmlhbGl6aW5nIGNoYW5nZXMKKyAqIHRvIHRoZSBm aWxlLgorICoKKyAqIEZTX1NFUklBTElaRV9ET05FIGluZGljYXRlcyB0aGF0IHRoZSBsZWFkZXIg aGFzIHNlcmlhbGl6ZWQgYWxsIGNoYW5nZXMgdG8KKyAqIHRoZSBmaWxlLgorICoKKyAqIEZTX1JF QURZIGluZGljYXRlcyB0aGF0IGl0IGlzIG5vdyBvayBmb3IgYSBwYXJhbGxlbCBhcHBseSB3b3Jr ZXIgdG8KKyAqIHJlYWQgdGhlIGZpbGUuCisgKi8KK3R5cGVkZWYgZW51bSBQYXJ0aWFsRmlsZVNl dFN0YXRlCit7CisJRlNfRU1QVFksCisJRlNfU0VSSUFMSVpFX0lOX1BST0dSRVNTLAorCUZTX1NF UklBTElaRV9ET05FLAorCUZTX1JFQURZCit9IFBhcnRpYWxGaWxlU2V0U3RhdGU7CisKKy8qCisg KiBTdHJ1Y3QgZm9yIHNoYXJpbmcgaW5mb3JtYXRpb24gYmV0d2VlbiBsZWFkZXIgYXBwbHkgd29y a2VyIGFuZCBwYXJhbGxlbAorICogYXBwbHkgd29ya2Vycy4KKyAqLwordHlwZWRlZiBzdHJ1Y3Qg UGFyYWxsZWxBcHBseVdvcmtlclNoYXJlZAoreworCXNsb2NrX3QJCW11dGV4OworCisJVHJhbnNh Y3Rpb25JZCB4aWQ7CisKKwkvKgorCSAqIFN0YXRlIHVzZWQgdG8gZW5zdXJlIGNvbW1pdCBvcmRl cmluZy4KKwkgKgorCSAqIFRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgd2lsbCBzZXQgaXQgdG8g UEFSQUxMRUxfVFJBTlNfRklOSVNIRUQgYWZ0ZXIKKwkgKiBoYW5kbGluZyB0aGUgdHJhbnNhY3Rp b24gZmluaXNoIGNvbW1hbmRzIHdoaWxlIHRoZSBhcHBseSBsZWFkZXIgd2lsbAorCSAqIHdhaXQg Zm9yIGl0IHRvIGJlY29tZSBQQVJBTExFTF9UUkFOU19GSU5JU0hFRCBiZWZvcmUgcHJvY2VlZGlu ZyBpbgorCSAqIHRyYW5zYWN0aW9uIGZpbmlzaCBjb21tYW5kcyAoZS5nLiBTVFJFQU1fQ09NTUlU L1NUUkVBTV9QUkVQQVJFLworCSAqIFNUUkVBTV9BQk9SVCkuCisJICovCisJUGFyYWxsZWxUcmFu c1N0YXRlIHhhY3Rfc3RhdGU7CisKKwkvKiBJbmZvcm1hdGlvbiBmcm9tIHRoZSBjb3JyZXNwb25k aW5nIExvZ2ljYWxSZXBXb3JrZXIgc2xvdC4gKi8KKwl1aW50MTYJCWxvZ2ljYWxyZXBfd29ya2Vy X2dlbmVyYXRpb247CisJaW50CQkJbG9naWNhbHJlcF93b3JrZXJfc2xvdF9ubzsKKworCS8qCisJ ICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlcmUgYXJlIHBlbmRpbmcgc3RyZWFtaW5nIGJsb2NrcyBp biB0aGUgcXVldWUuIFRoZQorCSAqIHBhcmFsbGVsIGFwcGx5IHdvcmtlciB3aWxsIGNoZWNrIGl0 IGJlZm9yZSBzdGFydGluZyB0byB3YWl0LgorCSAqLworCXBnX2F0b21pY191aW50MzIgcGVuZGlu Z19zdHJlYW1fY291bnQ7CisKKwkvKgorCSAqIFhhY3RMYXN0Q29tbWl0RW5kIGZyb20gdGhlIHBh cmFsbGVsIGFwcGx5IHdvcmtlci4gVGhpcyBpcyByZXF1aXJlZCBieQorCSAqIHRoZSBsZWFkZXIg d29ya2VyIHNvIGl0IGNhbiB1cGRhdGUgdGhlIGxzbl9tYXBwaW5ncy4KKwkgKi8KKwlYTG9nUmVj UHRyCWxhc3RfY29tbWl0X2VuZDsKKworCS8qCisJICogQWZ0ZXIgZW50ZXJpbmcgUEFSVElBTF9T RVJJQUxJWkUgbW9kZSwgdGhlIGxlYWRlciBhcHBseSB3b3JrZXIgd2lsbAorCSAqIHNlcmlhbGl6 ZSBjaGFuZ2VzIHRvIHRoZSBmaWxlLCBhbmQgc2hhcmUgdGhlIGZpbGVzZXQgd2l0aCB0aGUgcGFy YWxsZWwKKwkgKiBhcHBseSB3b3JrZXIgd2hlbiBwcm9jZXNzaW5nIHRoZSB0cmFuc2FjdGlvbiBm aW5pc2ggY29tbWFuZC4gVGhlbiB0aGUKKwkgKiBwYXJhbGxlbCBhcHBseSB3b3JrZXIgd2lsbCBh cHBseSBhbGwgdGhlIHNwb29sZWQgbWVzc2FnZXMuCisJICoKKwkgKiBGaWxlU2V0IGlzIHVzZWQg aGVyZSBpbnN0ZWFkIG9mIFNoYXJlZEZpbGVTZXQgYmVjYXVzZSB3ZSBuZWVkIGl0IHRvCisJICog c3Vydml2ZSBhZnRlciByZWxlYXNpbmcgdGhlIHNoYXJlZCBtZW1vcnkgc28gdGhhdCB0aGUgbGVh ZGVyIGFwcGx5CisJICogd29ya2VyIGNhbiByZS11c2UgdGhlIHNhbWUgZmlsZXNldCBmb3IgdGhl IG5leHQgc3RyZWFtaW5nIHRyYW5zYWN0aW9uLgorCSAqLworCVBhcnRpYWxGaWxlU2V0U3RhdGUg ZmlsZXNldF9zdGF0ZTsKKwlGaWxlU2V0CQlmaWxlc2V0OworfSBQYXJhbGxlbEFwcGx5V29ya2Vy U2hhcmVkOworCisvKgorICogSW5mb3JtYXRpb24gd2hpY2ggaXMgdXNlZCB0byBtYW5hZ2UgdGhl IHBhcmFsbGVsIGFwcGx5IHdvcmtlci4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgUGFyYWxsZWxBcHBs eVdvcmtlckluZm8KK3sKKwkvKgorCSAqIFRoaXMgcXVldWUgaXMgdXNlZCB0byBzZW5kIGNoYW5n ZXMgZnJvbSB0aGUgbGVhZGVyIGFwcGx5IHdvcmtlciB0byB0aGUKKwkgKiBwYXJhbGxlbCBhcHBs eSB3b3JrZXIuCisJICovCisJc2htX21xX2hhbmRsZSAqbXFfaGFuZGxlOworCisJLyoKKwkgKiBU aGlzIHF1ZXVlIGlzIHVzZWQgdG8gdHJhbnNmZXIgZXJyb3IgbWVzc2FnZXMgZnJvbSB0aGUgcGFy YWxsZWwgYXBwbHkKKwkgKiB3b3JrZXIgdG8gdGhlIGxlYWRlciBhcHBseSB3b3JrZXIuCisJICov CisJc2htX21xX2hhbmRsZSAqZXJyb3JfbXFfaGFuZGxlOworCisJZHNtX3NlZ21lbnQgKmRzbV9z ZWc7CisKKwkvKgorCSAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBsZWFkZXIgYXBwbHkgd29ya2Vy IG5lZWRzIHRvIHNlcmlhbGl6ZSB0aGUKKwkgKiByZW1haW5pbmcgY2hhbmdlcyB0byBhIGZpbGUg ZHVlIHRvIHRpbWVvdXQgd2hlbiBhdHRlbXB0aW5nIHRvIHNlbmQgZGF0YQorCSAqIHRvIHRoZSBw YXJhbGxlbCBhcHBseSB3b3JrZXIgdmlhIHNoYXJlZCBtZW1vcnkuCisJICovCisJYm9vbAkJc2Vy aWFsaXplX2NoYW5nZXM7CisKKwkvKgorCSAqIFRydWUgaWYgdGhlIHdvcmtlciBpcyBiZWluZyB1 c2VkIHRvIHByb2Nlc3MgYSBwYXJhbGxlbCBhcHBseQorCSAqIHRyYW5zYWN0aW9uLiBGYWxzZSBp bmRpY2F0ZXMgdGhpcyB3b3JrZXIgaXMgYXZhaWxhYmxlIGZvciByZS11c2UuCisJICovCisJYm9v bAkJaW5fdXNlOworCisJUGFyYWxsZWxBcHBseVdvcmtlclNoYXJlZCAqc2hhcmVkOworfSBQYXJh bGxlbEFwcGx5V29ya2VySW5mbzsKKwogLyogTWFpbiBtZW1vcnkgY29udGV4dCBmb3IgYXBwbHkg d29ya2VyLiBQZXJtYW5lbnQgZHVyaW5nIHdvcmtlciBsaWZldGltZS4gKi8KIGV4dGVybiBQR0RM TElNUE9SVCBNZW1vcnlDb250ZXh0IEFwcGx5Q29udGV4dDsKIAorZXh0ZXJuIFBHRExMSU1QT1JU IE1lbW9yeUNvbnRleHQgQXBwbHlNZXNzYWdlQ29udGV4dDsKKworZXh0ZXJuIFBHRExMSU1QT1JU IEVycm9yQ29udGV4dENhbGxiYWNrICphcHBseV9lcnJvcl9jb250ZXh0X3N0YWNrOworCitleHRl cm4gUEdETExJTVBPUlQgUGFyYWxsZWxBcHBseVdvcmtlclNoYXJlZCAqTXlQYXJhbGxlbFNoYXJl ZDsKKwogLyogbGlicHFyZWNlaXZlciBjb25uZWN0aW9uICovCiBleHRlcm4gUEdETExJTVBPUlQg c3RydWN0IFdhbFJlY2VpdmVyQ29ubiAqTG9nUmVwV29ya2VyV2FsUmN2Q29ubjsKIApAQCAtODQs OSArMjI5LDExIEBAIGV4dGVybiB2b2lkIGxvZ2ljYWxyZXBfd29ya2VyX2F0dGFjaChpbnQgc2xv dCk7CiBleHRlcm4gTG9naWNhbFJlcFdvcmtlciAqbG9naWNhbHJlcF93b3JrZXJfZmluZChPaWQg c3ViaWQsIE9pZCByZWxpZCwKIAkJCQkJCQkJCQkJCWJvb2wgb25seV9ydW5uaW5nKTsKIGV4dGVy biBMaXN0ICpsb2dpY2FscmVwX3dvcmtlcnNfZmluZChPaWQgc3ViaWQsIGJvb2wgb25seV9ydW5u aW5nKTsKLWV4dGVybiB2b2lkIGxvZ2ljYWxyZXBfd29ya2VyX2xhdW5jaChPaWQgZGJpZCwgT2lk IHN1YmlkLCBjb25zdCBjaGFyICpzdWJuYW1lLAotCQkJCQkJCQkJIE9pZCB1c2VyaWQsIE9pZCBy ZWxpZCk7CitleHRlcm4gYm9vbCBsb2dpY2FscmVwX3dvcmtlcl9sYXVuY2goT2lkIGRiaWQsIE9p ZCBzdWJpZCwgY29uc3QgY2hhciAqc3VibmFtZSwKKwkJCQkJCQkJCSBPaWQgdXNlcmlkLCBPaWQg cmVsaWQsCisJCQkJCQkJCQkgZHNtX2hhbmRsZSBzdWJ3b3JrZXJfZHNtKTsKIGV4dGVybiB2b2lk IGxvZ2ljYWxyZXBfd29ya2VyX3N0b3AoT2lkIHN1YmlkLCBPaWQgcmVsaWQpOworZXh0ZXJuIHZv aWQgbG9naWNhbHJlcF9wYV93b3JrZXJfc3RvcChpbnQgc2xvdF9ubywgdWludDE2IGdlbmVyYXRp b24pOwogZXh0ZXJuIHZvaWQgbG9naWNhbHJlcF93b3JrZXJfd2FrZXVwKE9pZCBzdWJpZCwgT2lk IHJlbGlkKTsKIGV4dGVybiB2b2lkIGxvZ2ljYWxyZXBfd29ya2VyX3dha2V1cF9wdHIoTG9naWNh bFJlcFdvcmtlciAqd29ya2VyKTsKIApAQCAtMTAzLDEwICsyNTAsNzggQEAgZXh0ZXJuIHZvaWQg cHJvY2Vzc19zeW5jaW5nX3RhYmxlcyhYTG9nUmVjUHRyIGN1cnJlbnRfbHNuKTsKIGV4dGVybiB2 b2lkIGludmFsaWRhdGVfc3luY2luZ190YWJsZV9zdGF0ZXMoRGF0dW0gYXJnLCBpbnQgY2FjaGVp ZCwKIAkJCQkJCQkJCQkJdWludDMyIGhhc2h2YWx1ZSk7CiAKK2V4dGVybiB2b2lkIHN0cmVhbV9z dGFydF9pbnRlcm5hbChUcmFuc2FjdGlvbklkIHhpZCwgYm9vbCBmaXJzdF9zZWdtZW50KTsKK2V4 dGVybiB2b2lkIHN0cmVhbV9zdG9wX2ludGVybmFsKFRyYW5zYWN0aW9uSWQgeGlkKTsKKworLyog Q29tbW9uIHN0cmVhbWluZyBmdW5jdGlvbiB0byBhcHBseSBhbGwgdGhlIHNwb29sZWQgbWVzc2Fn ZXMgKi8KK2V4dGVybiB2b2lkIGFwcGx5X3Nwb29sZWRfbWVzc2FnZXMoRmlsZVNldCAqc3RyZWFt X2ZpbGVzZXQsIFRyYW5zYWN0aW9uSWQgeGlkLAorCQkJCQkJCQkgICBYTG9nUmVjUHRyIGxzbik7 CisKK2V4dGVybiB2b2lkIGFwcGx5X2Rpc3BhdGNoKFN0cmluZ0luZm8gcyk7CisKK2V4dGVybiB2 b2lkIG1heWJlX3JlcmVhZF9zdWJzY3JpcHRpb24odm9pZCk7CisKK2V4dGVybiB2b2lkIHN0cmVh bV9jbGVhbnVwX2ZpbGVzKE9pZCBzdWJpZCwgVHJhbnNhY3Rpb25JZCB4aWQpOworCitleHRlcm4g dm9pZCBJbml0aWFsaXplQXBwbHlXb3JrZXIodm9pZCk7CisKK2V4dGVybiB2b2lkIHN0b3JlX2Zs dXNoX3Bvc2l0aW9uKFhMb2dSZWNQdHIgcmVtb3RlX2xzbiwgWExvZ1JlY1B0ciBsb2NhbF9sc24p OworCisvKiBGdW5jdGlvbiBmb3IgYXBwbHkgZXJyb3IgY2FsbGJhY2sgKi8KK2V4dGVybiB2b2lk IGFwcGx5X2Vycm9yX2NhbGxiYWNrKHZvaWQgKmFyZyk7CitleHRlcm4gdm9pZCBzZXRfYXBwbHlf ZXJyb3JfY29udGV4dF9vcmlnaW4oY2hhciAqb3JpZ2lubmFtZSk7CisKKy8qIFBhcmFsbGVsIGFw cGx5IHdvcmtlciBzZXR1cCBhbmQgaW50ZXJhY3Rpb25zICovCitleHRlcm4gdm9pZCBwYV9hbGxv Y2F0ZV93b3JrZXIoVHJhbnNhY3Rpb25JZCB4aWQpOworZXh0ZXJuIFBhcmFsbGVsQXBwbHlXb3Jr ZXJJbmZvICpwYV9maW5kX3dvcmtlcihUcmFuc2FjdGlvbklkIHhpZCk7CitleHRlcm4gdm9pZCBw YV9kZXRhY2hfYWxsX2Vycm9yX21xKHZvaWQpOworCitleHRlcm4gYm9vbCBwYV9zZW5kX2RhdGEo UGFyYWxsZWxBcHBseVdvcmtlckluZm8gKndpbmZvLCBTaXplIG5ieXRlcywKKwkJCQkJCSBjb25z dCB2b2lkICpkYXRhKTsKK2V4dGVybiB2b2lkIHBhX3N3aXRjaF90b19wYXJ0aWFsX3NlcmlhbGl6 ZShQYXJhbGxlbEFwcGx5V29ya2VySW5mbyAqd2luZm8sCisJCQkJCQkJCQkJICAgYm9vbCBzdHJl YW1fbG9ja2VkKTsKKworZXh0ZXJuIHZvaWQgcGFfc2V0X3hhY3Rfc3RhdGUoUGFyYWxsZWxBcHBs eVdvcmtlclNoYXJlZCAqd3NoYXJlZCwKKwkJCQkJCQkgIFBhcmFsbGVsVHJhbnNTdGF0ZSBpbl94 YWN0KTsKK2V4dGVybiB2b2lkIHBhX3NldF9zdHJlYW1fYXBwbHlfd29ya2VyKFBhcmFsbGVsQXBw bHlXb3JrZXJJbmZvICp3aW5mbyk7CisKK2V4dGVybiB2b2lkIHBhX3N0YXJ0X3N1YnRyYW5zKFRy YW5zYWN0aW9uSWQgY3VycmVudF94aWQsCisJCQkJCQkJICBUcmFuc2FjdGlvbklkIHRvcF94aWQp OworZXh0ZXJuIHZvaWQgcGFfcmVzZXRfc3VidHJhbnModm9pZCk7CitleHRlcm4gdm9pZCBwYV9z dHJlYW1fYWJvcnQoTG9naWNhbFJlcFN0cmVhbUFib3J0RGF0YSAqYWJvcnRfZGF0YSk7CitleHRl cm4gdm9pZCBwYV9zZXRfZmlsZXNldF9zdGF0ZShQYXJhbGxlbEFwcGx5V29ya2VyU2hhcmVkICp3 c2hhcmVkLAorCQkJCQkJCQkgUGFydGlhbEZpbGVTZXRTdGF0ZSBmaWxlc2V0X3N0YXRlKTsKKwor ZXh0ZXJuIHZvaWQgcGFfbG9ja19zdHJlYW0oVHJhbnNhY3Rpb25JZCB4aWQsIExPQ0tNT0RFIGxv Y2ttb2RlKTsKK2V4dGVybiB2b2lkIHBhX3VubG9ja19zdHJlYW0oVHJhbnNhY3Rpb25JZCB4aWQs IExPQ0tNT0RFIGxvY2ttb2RlKTsKKworZXh0ZXJuIHZvaWQgcGFfbG9ja190cmFuc2FjdGlvbihU cmFuc2FjdGlvbklkIHhpZCwgTE9DS01PREUgbG9ja21vZGUpOworZXh0ZXJuIHZvaWQgcGFfdW5s b2NrX3RyYW5zYWN0aW9uKFRyYW5zYWN0aW9uSWQgeGlkLCBMT0NLTU9ERSBsb2NrbW9kZSk7CisK K2V4dGVybiB2b2lkIHBhX2RlY3JfYW5kX3dhaXRfc3RyZWFtX2Jsb2NrKHZvaWQpOworCitleHRl cm4gdm9pZCBwYV94YWN0X2ZpbmlzaChQYXJhbGxlbEFwcGx5V29ya2VySW5mbyAqd2luZm8sCisJ CQkJCQkgICBYTG9nUmVjUHRyIHJlbW90ZV9sc24pOworCisjZGVmaW5lIGlzUGFyYWxsZWxBcHBs eVdvcmtlcih3b3JrZXIpICgod29ya2VyKS0+YXBwbHlfbGVhZGVyX3BpZCAhPSBJbnZhbGlkUGlk KQorCiBzdGF0aWMgaW5saW5lIGJvb2wKIGFtX3RhYmxlc3luY193b3JrZXIodm9pZCkKIHsKIAly ZXR1cm4gT2lkSXNWYWxpZChNeUxvZ2ljYWxSZXBXb3JrZXItPnJlbGlkKTsKIH0KIAorc3RhdGlj IGlubGluZSBib29sCithbV9sZWFkZXJfYXBwbHlfd29ya2VyKHZvaWQpCit7CisJcmV0dXJuICgh YW1fdGFibGVzeW5jX3dvcmtlcigpICYmCisJCQkhaXNQYXJhbGxlbEFwcGx5V29ya2VyKE15TG9n aWNhbFJlcFdvcmtlcikpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wKK2FtX3BhcmFsbGVsX2Fw cGx5X3dvcmtlcih2b2lkKQoreworCXJldHVybiBpc1BhcmFsbGVsQXBwbHlXb3JrZXIoTXlMb2dp Y2FsUmVwV29ya2VyKTsKK30KKwogI2VuZGlmCQkJCQkJCS8qIFdPUktFUl9JTlRFUk5BTF9IICov CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2xtZ3IuaCBiL3NyYy9pbmNsdWRlL3N0 b3JhZ2UvbG1nci5oCmluZGV4IGJlMWQyYzk5YTkuLjVhM2JkMDNiYTUgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbmNsdWRlL3N0b3JhZ2UvbG1nci5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvbG1nci5o CkBAIC0xMDcsNiArMTA3LDExIEBAIGV4dGVybiB2b2lkIExvY2tTaGFyZWRPYmplY3RGb3JTZXNz aW9uKE9pZCBjbGFzc2lkLCBPaWQgb2JqaWQsIHVpbnQxNiBvYmpzdWJpZCwKIGV4dGVybiB2b2lk IFVubG9ja1NoYXJlZE9iamVjdEZvclNlc3Npb24oT2lkIGNsYXNzaWQsIE9pZCBvYmppZCwgdWlu dDE2IG9ianN1YmlkLAogCQkJCQkJCQkJCSBMT0NLTU9ERSBsb2NrbW9kZSk7CiAKK2V4dGVybiB2 b2lkIExvY2tBcHBseVRyYW5zYWN0aW9uRm9yU2Vzc2lvbihPaWQgc3Vib2lkLCBUcmFuc2FjdGlv bklkIHhpZCwgdWludDE2IG9iamlkLAorCQkJCQkJCQkJCSAgIExPQ0tNT0RFIGxvY2ttb2RlKTsK K2V4dGVybiB2b2lkIFVubG9ja0FwcGx5VHJhbnNhY3Rpb25Gb3JTZXNzaW9uKE9pZCBzdWJvaWQs IFRyYW5zYWN0aW9uSWQgeGlkLCB1aW50MTYgb2JqaWQsCisJCQkJCQkJCQkJCSBMT0NLTU9ERSBs b2NrbW9kZSk7CisKIC8qIERlc2NyaWJlIGEgbG9ja3RhZyBmb3IgZXJyb3IgbWVzc2FnZXMgKi8K IGV4dGVybiB2b2lkIERlc2NyaWJlTG9ja1RhZyhTdHJpbmdJbmZvIGJ1ZiwgY29uc3QgTE9DS1RB RyAqdGFnKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9sb2NrLmggYi9zcmMv aW5jbHVkZS9zdG9yYWdlL2xvY2suaAppbmRleCBlNGUxNDk1YjI0Li43NzY2MTIzYTdiIDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2xvY2suaAorKysgYi9zcmMvaW5jbHVkZS9zdG9y YWdlL2xvY2suaApAQCAtMTQ5LDEwICsxNDksMTIgQEAgdHlwZWRlZiBlbnVtIExvY2tUYWdUeXBl CiAJTE9DS1RBR19TUEVDVUxBVElWRV9UT0tFTiwJLyogc3BlY3VsYXRpdmUgaW5zZXJ0aW9uIFhp ZCBhbmQgdG9rZW4gKi8KIAlMT0NLVEFHX09CSkVDVCwJCQkJLyogbm9uLXJlbGF0aW9uIGRhdGFi YXNlIG9iamVjdCAqLwogCUxPQ0tUQUdfVVNFUkxPQ0ssCQkJLyogcmVzZXJ2ZWQgZm9yIG9sZCBj b250cmliL3VzZXJsb2NrIGNvZGUgKi8KLQlMT0NLVEFHX0FEVklTT1JZCQkJLyogYWR2aXNvcnkg dXNlciBsb2NrcyAqLworCUxPQ0tUQUdfQURWSVNPUlksCQkJLyogYWR2aXNvcnkgdXNlciBsb2Nr cyAqLworCUxPQ0tUQUdfQVBQTFlfVFJBTlNBQ1RJT04JLyogdHJhbnNhY3Rpb24gYmVpbmcgYXBw bGllZCBvbiBhIGxvZ2ljYWwKKwkJCQkJCQkJICogcmVwbGljYXRpb24gc3Vic2NyaWJlciAqLwog fSBMb2NrVGFnVHlwZTsKIAotI2RlZmluZSBMT0NLVEFHX0xBU1RfVFlQRQlMT0NLVEFHX0FEVklT T1JZCisjZGVmaW5lIExPQ0tUQUdfTEFTVF9UWVBFCUxPQ0tUQUdfQVBQTFlfVFJBTlNBQ1RJT04K IAogZXh0ZXJuIFBHRExMSU1QT1JUIGNvbnN0IGNoYXIgKmNvbnN0IExvY2tUYWdUeXBlTmFtZXNb XTsKIApAQCAtMjc4LDYgKzI4MCwxNyBAQCB0eXBlZGVmIHN0cnVjdCBMT0NLVEFHCiAJIChsb2Nr dGFnKS5sb2NrdGFnX3R5cGUgPSBMT0NLVEFHX0FEVklTT1JZLCBcCiAJIChsb2NrdGFnKS5sb2Nr dGFnX2xvY2ttZXRob2RpZCA9IFVTRVJfTE9DS01FVEhPRCkKIAorLyoKKyAqIElEIGluZm8gZm9y IGEgcmVtb3RlIHRyYW5zYWN0aW9uIG9uIGEgbG9naWNhbCByZXBsaWNhdGlvbiBzdWJzY3JpYmVy IGlzOiBEQgorICogT0lEICsgU1VCU0NSSVBUSU9OIE9JRCArIFRSQU5TQUNUSU9OIElEICsgT0JK SUQKKyAqLworI2RlZmluZSBTRVRfTE9DS1RBR19BUFBMWV9UUkFOU0FDVElPTihsb2NrdGFnLGRi b2lkLHN1Ym9pZCx4aWQsb2JqaWQpIFwKKwkoKGxvY2t0YWcpLmxvY2t0YWdfZmllbGQxID0gKGRi b2lkKSwgXAorCSAobG9ja3RhZykubG9ja3RhZ19maWVsZDIgPSAoc3Vib2lkKSwgXAorCSAobG9j a3RhZykubG9ja3RhZ19maWVsZDMgPSAoeGlkKSwgXAorCSAobG9ja3RhZykubG9ja3RhZ19maWVs ZDQgPSAob2JqaWQpLCBcCisJIChsb2NrdGFnKS5sb2NrdGFnX3R5cGUgPSBMT0NLVEFHX0FQUExZ X1RSQU5TQUNUSU9OLCBcCisJIChsb2NrdGFnKS5sb2NrdGFnX2xvY2ttZXRob2RpZCA9IERFRkFV TFRfTE9DS01FVEhPRCkKIAogLyoKICAqIFBlci1sb2NrZWQtb2JqZWN0IGxvY2sgaW5mb3JtYXRp b246CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2NzaWduYWwuaCBiL3NyYy9p bmNsdWRlL3N0b3JhZ2UvcHJvY3NpZ25hbC5oCmluZGV4IGVlNjM2OTAwZjMuLjkzYTUxZjQyNTQg MTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvY3NpZ25hbC5oCisrKyBiL3NyYy9p bmNsdWRlL3N0b3JhZ2UvcHJvY3NpZ25hbC5oCkBAIC0zNSw2ICszNSw3IEBAIHR5cGVkZWYgZW51 bQogCVBST0NTSUdfV0FMU05EX0lOSVRfU1RPUFBJTkcsCS8qIGFzayB3YWxzZW5kZXJzIHRvIHBy ZXBhcmUgZm9yIHNodXRkb3duICAqLwogCVBST0NTSUdfQkFSUklFUiwJCQkvKiBnbG9iYWwgYmFy cmllciBpbnRlcnJ1cHQgICovCiAJUFJPQ1NJR19MT0dfTUVNT1JZX0NPTlRFWFQsIC8qIGFzayBi YWNrZW5kIHRvIGxvZyB0aGUgbWVtb3J5IGNvbnRleHRzICovCisJUFJPQ1NJR19QQVJBTExFTF9B UFBMWV9NRVNTQUdFLCAvKiBNZXNzYWdlIGZyb20gcGFyYWxsZWwgYXBwbHkgd29ya2VycyAqLwog CiAJLyogUmVjb3ZlcnkgY29uZmxpY3QgcmVhc29ucyAqLwogCVBST0NTSUdfUkVDT1ZFUllfQ09O RkxJQ1RfREFUQUJBU0UsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy93YWl0X2V2ZW50 LmggYi9zcmMvaW5jbHVkZS91dGlscy93YWl0X2V2ZW50LmgKaW5kZXggMGIyMTAwYmU0YS4uNzYz ZmJlYWRmYiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvd2FpdF9ldmVudC5oCisrKyBi L3NyYy9pbmNsdWRlL3V0aWxzL3dhaXRfZXZlbnQuaApAQCAtNDIsNiArNDIsNyBAQCB0eXBlZGVm IGVudW0KIAlXQUlUX0VWRU5UX0NIRUNLUE9JTlRFUl9NQUlOLAogCVdBSVRfRVZFTlRfTE9HSUNB TF9BUFBMWV9NQUlOLAogCVdBSVRfRVZFTlRfTE9HSUNBTF9MQVVOQ0hFUl9NQUlOLAorCVdBSVRf RVZFTlRfTE9HSUNBTF9QQVJBTExFTF9BUFBMWV9NQUlOLAogCVdBSVRfRVZFTlRfUkVDT1ZFUllf V0FMX1NUUkVBTSwKIAlXQUlUX0VWRU5UX1NZU0xPR0dFUl9NQUlOLAogCVdBSVRfRVZFTlRfV0FM X1JFQ0VJVkVSX01BSU4sCkBAIC0xMDUsNiArMTA2LDcgQEAgdHlwZWRlZiBlbnVtCiAJV0FJVF9F VkVOVF9IQVNIX0dST1dfQlVDS0VUU19BTExPQ0FURSwKIAlXQUlUX0VWRU5UX0hBU0hfR1JPV19C VUNLRVRTX0VMRUNULAogCVdBSVRfRVZFTlRfSEFTSF9HUk9XX0JVQ0tFVFNfUkVJTlNFUlQsCisJ V0FJVF9FVkVOVF9MT0dJQ0FMX1BBUkFMTEVMX0FQUExZX1NUQVRFX0NIQU5HRSwKIAlXQUlUX0VW RU5UX0xPR0lDQUxfU1lOQ19EQVRBLAogCVdBSVRfRVZFTlRfTE9HSUNBTF9TWU5DX1NUQVRFX0NI QU5HRSwKIAlXQUlUX0VWRU5UX01RX0lOVEVSTkFMLApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC9zdWJzY3JpcHRpb24ub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3Rl ZC9zdWJzY3JpcHRpb24ub3V0CmluZGV4IGMxM2QyMThkY2YuLjFlZDZmNGMzOWMgMTAwNjQ0Ci0t LSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3Vic2NyaXB0aW9uLm91dAorKysgYi9zcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N1YnNjcmlwdGlvbi5vdXQKQEAgLTExNyw3ICsxMTcsNyBA QCBISU5UOiAgVG8gaW5pdGlhdGUgcmVwbGljYXRpb24sIHlvdSBtdXN0IG1hbnVhbGx5IGNyZWF0 ZSB0aGUgcmVwbGljYXRpb24gc2xvdCwgZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBMaXN0IG9mIHN1YnNjcmlwdGlvbnMKICAgICAgICBOYW1lICAgICAgIHwgICAgICAgICAgIE93 bmVyICAgICAgICAgICB8IEVuYWJsZWQgfCBQdWJsaWNhdGlvbiB8IEJpbmFyeSB8IFN0cmVhbWlu ZyB8IFR3by1waGFzZSBjb21taXQgfCBEaXNhYmxlIG9uIGVycm9yIHwgT3JpZ2luIHwgU3luY2hy b25vdXMgY29tbWl0IHwgICAgICAgICAgQ29ubmluZm8gICAgICAgICAgIHwgU2tpcCBMU04gCiAt LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfdGVzdHN1YjQgfCByZWdyZXNz X3N1YnNjcmlwdGlvbl91c2VyIHwgZiAgICAgICB8IHt0ZXN0cHVifSAgIHwgZiAgICAgIHwgZiAg ICAgICAgIHwgZCAgICAgICAgICAgICAgICB8IGYgICAgICAgICAgICAgICAgfCBub25lICAgfCBv ZmYgICAgICAgICAgICAgICAgfCBkYm5hbWU9cmVncmVzc19kb2Vzbm90ZXhpc3QgfCAwLzAKKyBy ZWdyZXNzX3Rlc3RzdWI0IHwgcmVncmVzc19zdWJzY3JpcHRpb25fdXNlciB8IGYgICAgICAgfCB7 dGVzdHB1Yn0gICB8IGYgICAgICB8IG9mZiAgICAgICB8IGQgICAgICAgICAgICAgICAgfCBmICAg ICAgICAgICAgICAgIHwgbm9uZSAgIHwgb2ZmICAgICAgICAgICAgICAgIHwgZGJuYW1lPXJlZ3Jl c3NfZG9lc25vdGV4aXN0IHwgMC8wCiAoMSByb3cpCiAKIEFMVEVSIFNVQlNDUklQVElPTiByZWdy ZXNzX3Rlc3RzdWI0IFNFVCAob3JpZ2luID0gYW55KTsKQEAgLTEyNSw3ICsxMjUsNyBAQCBBTFRF UiBTVUJTQ1JJUFRJT04gcmVncmVzc190ZXN0c3ViNCBTRVQgKG9yaWdpbiA9IGFueSk7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2Ygc3Vic2NyaXB0aW9ucwogICAgICAg IE5hbWUgICAgICAgfCAgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgRW5hYmxlZCB8IFB1Ymxp Y2F0aW9uIHwgQmluYXJ5IHwgU3RyZWFtaW5nIHwgVHdvLXBoYXNlIGNvbW1pdCB8IERpc2FibGUg b24gZXJyb3IgfCBPcmlnaW4gfCBTeW5jaHJvbm91cyBjb21taXQgfCAgICAgICAgICBDb25uaW5m byAgICAgICAgICAgfCBTa2lwIExTTiAKIC0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0g cmVncmVzc190ZXN0c3ViNCB8IHJlZ3Jlc3Nfc3Vic2NyaXB0aW9uX3VzZXIgfCBmICAgICAgIHwg e3Rlc3RwdWJ9ICAgfCBmICAgICAgfCBmICAgICAgICAgfCBkICAgICAgICAgICAgICAgIHwgZiAg ICAgICAgICAgICAgICB8IGFueSAgICB8IG9mZiAgICAgICAgICAgICAgICB8IGRibmFtZT1yZWdy ZXNzX2RvZXNub3RleGlzdCB8IDAvMAorIHJlZ3Jlc3NfdGVzdHN1YjQgfCByZWdyZXNzX3N1YnNj cmlwdGlvbl91c2VyIHwgZiAgICAgICB8IHt0ZXN0cHVifSAgIHwgZiAgICAgIHwgb2ZmICAgICAg IHwgZCAgICAgICAgICAgICAgICB8IGYgICAgICAgICAgICAgICAgfCBhbnkgICAgfCBvZmYgICAg ICAgICAgICAgICAgfCBkYm5hbWU9cmVncmVzc19kb2Vzbm90ZXhpc3QgfCAwLzAKICgxIHJvdykK IAogRFJPUCBTVUJTQ1JJUFRJT04gcmVncmVzc190ZXN0c3ViMzsKQEAgLTEzOCw3ICsxMzgsNyBA QCBFUlJPUjogIGludmFsaWQgY29ubmVjdGlvbiBzdHJpbmcgc3ludGF4OiBtaXNzaW5nICI9IiBh ZnRlciAiZm9vYmFyIiBpbiBjb25uZWN0aQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBMaXN0IG9mIHN1YnNjcmlwdGlvbnMKICAgICAgIE5hbWUgICAgICAgfCAgICAgICAgICAgT3du ZXIgICAgICAgICAgIHwgRW5hYmxlZCB8IFB1YmxpY2F0aW9uIHwgQmluYXJ5IHwgU3RyZWFtaW5n IHwgVHdvLXBoYXNlIGNvbW1pdCB8IERpc2FibGUgb24gZXJyb3IgfCBPcmlnaW4gfCBTeW5jaHJv bm91cyBjb21taXQgfCAgICAgICAgICBDb25uaW5mbyAgICAgICAgICAgfCBTa2lwIExTTiAKIC0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3Rlc3RzdWIgfCByZWdyZXNzX3N1 YnNjcmlwdGlvbl91c2VyIHwgZiAgICAgICB8IHt0ZXN0cHVifSAgIHwgZiAgICAgIHwgZiAgICAg ICAgIHwgZCAgICAgICAgICAgICAgICB8IGYgICAgICAgICAgICAgICAgfCBhbnkgICAgfCBvZmYg ICAgICAgICAgICAgICAgfCBkYm5hbWU9cmVncmVzc19kb2Vzbm90ZXhpc3QgfCAwLzAKKyByZWdy ZXNzX3Rlc3RzdWIgfCByZWdyZXNzX3N1YnNjcmlwdGlvbl91c2VyIHwgZiAgICAgICB8IHt0ZXN0 cHVifSAgIHwgZiAgICAgIHwgb2ZmICAgICAgIHwgZCAgICAgICAgICAgICAgICB8IGYgICAgICAg ICAgICAgICAgfCBhbnkgICAgfCBvZmYgICAgICAgICAgICAgICAgfCBkYm5hbWU9cmVncmVzc19k b2Vzbm90ZXhpc3QgfCAwLzAKICgxIHJvdykKIAogQUxURVIgU1VCU0NSSVBUSU9OIHJlZ3Jlc3Nf dGVzdHN1YiBTRVQgUFVCTElDQVRJT04gdGVzdHB1YjIsIHRlc3RwdWIzIFdJVEggKHJlZnJlc2gg PSBmYWxzZSk7CkBAIC0xNTgsNyArMTU4LDcgQEAgQUxURVIgU1VCU0NSSVBUSU9OIHJlZ3Jlc3Nf dGVzdHN1YiBTS0lQIChsc24gPSAnMC8xMjM0NScpOwogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgTGlzdCBvZiBzdWJzY3JpcHRpb25zCiAgICAgICBOYW1lICAgICAgIHwgICAg ICAgICAgIE93bmVyICAgICAgICAgICB8IEVuYWJsZWQgfCAgICAgUHVibGljYXRpb24gICAgIHwg QmluYXJ5IHwgU3RyZWFtaW5nIHwgVHdvLXBoYXNlIGNvbW1pdCB8IERpc2FibGUgb24gZXJyb3Ig fCBPcmlnaW4gfCBTeW5jaHJvbm91cyBjb21taXQgfCAgICAgICAgICAgQ29ubmluZm8gICAgICAg ICAgIHwgU2tpcCBMU04gCiAtLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0g cmVncmVzc190ZXN0c3ViIHwgcmVncmVzc19zdWJzY3JpcHRpb25fdXNlciB8IGYgICAgICAgfCB7 dGVzdHB1YjIsdGVzdHB1YjN9IHwgZiAgICAgIHwgZiAgICAgICAgIHwgZCAgICAgICAgICAgICAg ICB8IGYgICAgICAgICAgICAgICAgfCBhbnkgICAgfCBvZmYgICAgICAgICAgICAgICAgfCBkYm5h bWU9cmVncmVzc19kb2Vzbm90ZXhpc3QyIHwgMC8xMjM0NQorIHJlZ3Jlc3NfdGVzdHN1YiB8IHJl Z3Jlc3Nfc3Vic2NyaXB0aW9uX3VzZXIgfCBmICAgICAgIHwge3Rlc3RwdWIyLHRlc3RwdWIzfSB8 IGYgICAgICB8IG9mZiAgICAgICB8IGQgICAgICAgICAgICAgICAgfCBmICAgICAgICAgICAgICAg IHwgYW55ICAgIHwgb2ZmICAgICAgICAgICAgICAgIHwgZGJuYW1lPXJlZ3Jlc3NfZG9lc25vdGV4 aXN0MiB8IDAvMTIzNDUKICgxIHJvdykKIAogLS0gb2sgLSB3aXRoIGxzbiA9IE5PTkUKQEAgLTE3 MCw3ICsxNzAsNyBAQCBFUlJPUjogIGludmFsaWQgV0FMIGxvY2F0aW9uIChMU04pOiAwLzAKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2Ygc3Vic2NyaXB0aW9ucwog ICAgICAgTmFtZSAgICAgICB8ICAgICAgICAgICBPd25lciAgICAgICAgICAgfCBFbmFibGVkIHwg ICAgIFB1YmxpY2F0aW9uICAgICB8IEJpbmFyeSB8IFN0cmVhbWluZyB8IFR3by1waGFzZSBjb21t aXQgfCBEaXNhYmxlIG9uIGVycm9yIHwgT3JpZ2luIHwgU3luY2hyb25vdXMgY29tbWl0IHwgICAg ICAgICAgIENvbm5pbmZvICAgICAgICAgICB8IFNraXAgTFNOIAogLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfdGVzdHN1YiB8IHJlZ3Jlc3Nfc3Vic2NyaXB0 aW9uX3VzZXIgfCBmICAgICAgIHwge3Rlc3RwdWIyLHRlc3RwdWIzfSB8IGYgICAgICB8IGYgICAg ICAgICB8IGQgICAgICAgICAgICAgICAgfCBmICAgICAgICAgICAgICAgIHwgYW55ICAgIHwgb2Zm ICAgICAgICAgICAgICAgIHwgZGJuYW1lPXJlZ3Jlc3NfZG9lc25vdGV4aXN0MiB8IDAvMAorIHJl Z3Jlc3NfdGVzdHN1YiB8IHJlZ3Jlc3Nfc3Vic2NyaXB0aW9uX3VzZXIgfCBmICAgICAgIHwge3Rl c3RwdWIyLHRlc3RwdWIzfSB8IGYgICAgICB8IG9mZiAgICAgICB8IGQgICAgICAgICAgICAgICAg fCBmICAgICAgICAgICAgICAgIHwgYW55ICAgIHwgb2ZmICAgICAgICAgICAgICAgIHwgZGJuYW1l PXJlZ3Jlc3NfZG9lc25vdGV4aXN0MiB8IDAvMAogKDEgcm93KQogCiBCRUdJTjsKQEAgLTIwNSw3 ICsyMDUsNyBAQCBISU5UOiAgQXZhaWxhYmxlIHZhbHVlczogbG9jYWwsIHJlbW90ZV93cml0ZSwg cmVtb3RlX2FwcGx5LCBvbiwgb2ZmLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBMaXN0IG9mIHN1YnNjcmlwdGlvbnMKICAgICAgICAgTmFtZSAgICAgICAgIHwgICAgICAg ICAgIE93bmVyICAgICAgICAgICB8IEVuYWJsZWQgfCAgICAgUHVibGljYXRpb24gICAgIHwgQmlu YXJ5IHwgU3RyZWFtaW5nIHwgVHdvLXBoYXNlIGNvbW1pdCB8IERpc2FibGUgb24gZXJyb3IgfCBP cmlnaW4gfCBTeW5jaHJvbm91cyBjb21taXQgfCAgICAgICAgICAgQ29ubmluZm8gICAgICAgICAg IHwgU2tpcCBMU04gCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQot IHJlZ3Jlc3NfdGVzdHN1Yl9mb28gfCByZWdyZXNzX3N1YnNjcmlwdGlvbl91c2VyIHwgZiAgICAg ICB8IHt0ZXN0cHViMix0ZXN0cHViM30gfCBmICAgICAgfCBmICAgICAgICAgfCBkICAgICAgICAg ICAgICAgIHwgZiAgICAgICAgICAgICAgICB8IGFueSAgICB8IGxvY2FsICAgICAgICAgICAgICB8 IGRibmFtZT1yZWdyZXNzX2RvZXNub3RleGlzdDIgfCAwLzAKKyByZWdyZXNzX3Rlc3RzdWJfZm9v IHwgcmVncmVzc19zdWJzY3JpcHRpb25fdXNlciB8IGYgICAgICAgfCB7dGVzdHB1YjIsdGVzdHB1 YjN9IHwgZiAgICAgIHwgb2ZmICAgICAgIHwgZCAgICAgICAgICAgICAgICB8IGYgICAgICAgICAg ICAgICAgfCBhbnkgICAgfCBsb2NhbCAgICAgICAgICAgICAgfCBkYm5hbWU9cmVncmVzc19kb2Vz bm90ZXhpc3QyIHwgMC8wCiAoMSByb3cpCiAKIC0tIHJlbmFtZSBiYWNrIHRvIGtlZXAgdGhlIHJl c3Qgc2ltcGxlCkBAIC0yNDIsNyArMjQyLDcgQEAgSElOVDogIFRvIGluaXRpYXRlIHJlcGxpY2F0 aW9uLCB5b3UgbXVzdCBtYW51YWxseSBjcmVhdGUgdGhlIHJlcGxpY2F0aW9uIHNsb3QsIGUKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBzdWJzY3JpcHRpb25zCiAgICAg ICBOYW1lICAgICAgIHwgICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEVuYWJsZWQgfCBQdWJs aWNhdGlvbiB8IEJpbmFyeSB8IFN0cmVhbWluZyB8IFR3by1waGFzZSBjb21taXQgfCBEaXNhYmxl IG9uIGVycm9yIHwgT3JpZ2luIHwgU3luY2hyb25vdXMgY29tbWl0IHwgICAgICAgICAgQ29ubmlu Zm8gICAgICAgICAgIHwgU2tpcCBMU04gCiAtLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0g cmVncmVzc190ZXN0c3ViIHwgcmVncmVzc19zdWJzY3JpcHRpb25fdXNlciB8IGYgICAgICAgfCB7 dGVzdHB1Yn0gICB8IHQgICAgICB8IGYgICAgICAgICB8IGQgICAgICAgICAgICAgICAgfCBmICAg ICAgICAgICAgICAgIHwgYW55ICAgIHwgb2ZmICAgICAgICAgICAgICAgIHwgZGJuYW1lPXJlZ3Jl c3NfZG9lc25vdGV4aXN0IHwgMC8wCisgcmVncmVzc190ZXN0c3ViIHwgcmVncmVzc19zdWJzY3Jp cHRpb25fdXNlciB8IGYgICAgICAgfCB7dGVzdHB1Yn0gICB8IHQgICAgICB8IG9mZiAgICAgICB8 IGQgICAgICAgICAgICAgICAgfCBmICAgICAgICAgICAgICAgIHwgYW55ICAgIHwgb2ZmICAgICAg ICAgICAgICAgIHwgZGJuYW1lPXJlZ3Jlc3NfZG9lc25vdGV4aXN0IHwgMC8wCiAoMSByb3cpCiAK IEFMVEVSIFNVQlNDUklQVElPTiByZWdyZXNzX3Rlc3RzdWIgU0VUIChiaW5hcnkgPSBmYWxzZSk7 CkBAIC0yNTEsMTMgKzI1MSwxMyBAQCBBTFRFUiBTVUJTQ1JJUFRJT04gcmVncmVzc190ZXN0c3Vi IFNFVCAoc2xvdF9uYW1lID0gTk9ORSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IExpc3Qgb2Ygc3Vic2NyaXB0aW9ucwogICAgICAgTmFtZSAgICAgICB8ICAgICAgICAgICBPd25l ciAgICAgICAgICAgfCBFbmFibGVkIHwgUHVibGljYXRpb24gfCBCaW5hcnkgfCBTdHJlYW1pbmcg fCBUd28tcGhhc2UgY29tbWl0IHwgRGlzYWJsZSBvbiBlcnJvciB8IE9yaWdpbiB8IFN5bmNocm9u b3VzIGNvbW1pdCB8ICAgICAgICAgIENvbm5pbmZvICAgICAgICAgICB8IFNraXAgTFNOIAogLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfdGVzdHN1YiB8IHJlZ3Jlc3Nfc3Vi c2NyaXB0aW9uX3VzZXIgfCBmICAgICAgIHwge3Rlc3RwdWJ9ICAgfCBmICAgICAgfCBmICAgICAg ICAgfCBkICAgICAgICAgICAgICAgIHwgZiAgICAgICAgICAgICAgICB8IGFueSAgICB8IG9mZiAg ICAgICAgICAgICAgICB8IGRibmFtZT1yZWdyZXNzX2RvZXNub3RleGlzdCB8IDAvMAorIHJlZ3Jl c3NfdGVzdHN1YiB8IHJlZ3Jlc3Nfc3Vic2NyaXB0aW9uX3VzZXIgfCBmICAgICAgIHwge3Rlc3Rw dWJ9ICAgfCBmICAgICAgfCBvZmYgICAgICAgfCBkICAgICAgICAgICAgICAgIHwgZiAgICAgICAg ICAgICAgICB8IGFueSAgICB8IG9mZiAgICAgICAgICAgICAgICB8IGRibmFtZT1yZWdyZXNzX2Rv ZXNub3RleGlzdCB8IDAvMAogKDEgcm93KQogCiBEUk9QIFNVQlNDUklQVElPTiByZWdyZXNzX3Rl c3RzdWI7Ci0tLSBmYWlsIC0gc3RyZWFtaW5nIG11c3QgYmUgYm9vbGVhbgorLS0gZmFpbCAtIHN0 cmVhbWluZyBtdXN0IGJlIGJvb2xlYW4gb3IgJ3BhcmFsbGVsJwogQ1JFQVRFIFNVQlNDUklQVElP TiByZWdyZXNzX3Rlc3RzdWIgQ09OTkVDVElPTiAnZGJuYW1lPXJlZ3Jlc3NfZG9lc25vdGV4aXN0 JyBQVUJMSUNBVElPTiB0ZXN0cHViIFdJVEggKGNvbm5lY3QgPSBmYWxzZSwgc3RyZWFtaW5nID0g Zm9vKTsKLUVSUk9SOiAgc3RyZWFtaW5nIHJlcXVpcmVzIGEgQm9vbGVhbiB2YWx1ZQorRVJST1I6 ICBzdHJlYW1pbmcgcmVxdWlyZXMgYSBCb29sZWFuIHZhbHVlIG9yICJwYXJhbGxlbCIKIC0tIG5v dyBpdCB3b3JrcwogQ1JFQVRFIFNVQlNDUklQVElPTiByZWdyZXNzX3Rlc3RzdWIgQ09OTkVDVElP TiAnZGJuYW1lPXJlZ3Jlc3NfZG9lc25vdGV4aXN0JyBQVUJMSUNBVElPTiB0ZXN0cHViIFdJVEgg KGNvbm5lY3QgPSBmYWxzZSwgc3RyZWFtaW5nID0gdHJ1ZSk7CiBXQVJOSU5HOiAgc3Vic2NyaXB0 aW9uIHdhcyBjcmVhdGVkLCBidXQgaXMgbm90IGNvbm5lY3RlZApAQCAtMjY2LDcgKzI2NiwxNSBA QCBISU5UOiAgVG8gaW5pdGlhdGUgcmVwbGljYXRpb24sIHlvdSBtdXN0IG1hbnVhbGx5IGNyZWF0 ZSB0aGUgcmVwbGljYXRpb24gc2xvdCwgZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBMaXN0IG9mIHN1YnNjcmlwdGlvbnMKICAgICAgIE5hbWUgICAgICAgfCAgICAgICAgICAgT3du ZXIgICAgICAgICAgIHwgRW5hYmxlZCB8IFB1YmxpY2F0aW9uIHwgQmluYXJ5IHwgU3RyZWFtaW5n IHwgVHdvLXBoYXNlIGNvbW1pdCB8IERpc2FibGUgb24gZXJyb3IgfCBPcmlnaW4gfCBTeW5jaHJv bm91cyBjb21taXQgfCAgICAgICAgICBDb25uaW5mbyAgICAgICAgICAgfCBTa2lwIExTTiAKIC0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3Rlc3RzdWIgfCByZWdyZXNzX3N1 YnNjcmlwdGlvbl91c2VyIHwgZiAgICAgICB8IHt0ZXN0cHVifSAgIHwgZiAgICAgIHwgdCAgICAg ICAgIHwgZCAgICAgICAgICAgICAgICB8IGYgICAgICAgICAgICAgICAgfCBhbnkgICAgfCBvZmYg ICAgICAgICAgICAgICAgfCBkYm5hbWU9cmVncmVzc19kb2Vzbm90ZXhpc3QgfCAwLzAKKyByZWdy ZXNzX3Rlc3RzdWIgfCByZWdyZXNzX3N1YnNjcmlwdGlvbl91c2VyIHwgZiAgICAgICB8IHt0ZXN0 cHVifSAgIHwgZiAgICAgIHwgb24gICAgICAgIHwgZCAgICAgICAgICAgICAgICB8IGYgICAgICAg ICAgICAgICAgfCBhbnkgICAgfCBvZmYgICAgICAgICAgICAgICAgfCBkYm5hbWU9cmVncmVzc19k b2Vzbm90ZXhpc3QgfCAwLzAKKygxIHJvdykKKworQUxURVIgU1VCU0NSSVBUSU9OIHJlZ3Jlc3Nf dGVzdHN1YiBTRVQgKHN0cmVhbWluZyA9IHBhcmFsbGVsKTsKK1xkUnMrCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIExpc3Qgb2Ygc3Vic2NyaXB0aW9ucworICAgICAgTmFtZSAgICAg ICB8ICAgICAgICAgICBPd25lciAgICAgICAgICAgfCBFbmFibGVkIHwgUHVibGljYXRpb24gfCBC aW5hcnkgfCBTdHJlYW1pbmcgfCBUd28tcGhhc2UgY29tbWl0IHwgRGlzYWJsZSBvbiBlcnJvciB8 IE9yaWdpbiB8IFN5bmNocm9ub3VzIGNvbW1pdCB8ICAgICAgICAgIENvbm5pbmZvICAgICAgICAg ICB8IFNraXAgTFNOIAorLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfdGVz dHN1YiB8IHJlZ3Jlc3Nfc3Vic2NyaXB0aW9uX3VzZXIgfCBmICAgICAgIHwge3Rlc3RwdWJ9ICAg fCBmICAgICAgfCBwYXJhbGxlbCAgfCBkICAgICAgICAgICAgICAgIHwgZiAgICAgICAgICAgICAg ICB8IGFueSAgICB8IG9mZiAgICAgICAgICAgICAgICB8IGRibmFtZT1yZWdyZXNzX2RvZXNub3Rl eGlzdCB8IDAvMAogKDEgcm93KQogCiBBTFRFUiBTVUJTQ1JJUFRJT04gcmVncmVzc190ZXN0c3Vi IFNFVCAoc3RyZWFtaW5nID0gZmFsc2UpOwpAQCAtMjc1LDcgKzI4Myw3IEBAIEFMVEVSIFNVQlND UklQVElPTiByZWdyZXNzX3Rlc3RzdWIgU0VUIChzbG90X25hbWUgPSBOT05FKTsKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBzdWJzY3JpcHRpb25zCiAgICAgICBOYW1l ICAgICAgIHwgICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEVuYWJsZWQgfCBQdWJsaWNhdGlv biB8IEJpbmFyeSB8IFN0cmVhbWluZyB8IFR3by1waGFzZSBjb21taXQgfCBEaXNhYmxlIG9uIGVy cm9yIHwgT3JpZ2luIHwgU3luY2hyb25vdXMgY29tbWl0IHwgICAgICAgICAgQ29ubmluZm8gICAg ICAgICAgIHwgU2tpcCBMU04gCiAtLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVz c190ZXN0c3ViIHwgcmVncmVzc19zdWJzY3JpcHRpb25fdXNlciB8IGYgICAgICAgfCB7dGVzdHB1 Yn0gICB8IGYgICAgICB8IGYgICAgICAgICB8IGQgICAgICAgICAgICAgICAgfCBmICAgICAgICAg ICAgICAgIHwgYW55ICAgIHwgb2ZmICAgICAgICAgICAgICAgIHwgZGJuYW1lPXJlZ3Jlc3NfZG9l c25vdGV4aXN0IHwgMC8wCisgcmVncmVzc190ZXN0c3ViIHwgcmVncmVzc19zdWJzY3JpcHRpb25f dXNlciB8IGYgICAgICAgfCB7dGVzdHB1Yn0gICB8IGYgICAgICB8IG9mZiAgICAgICB8IGQgICAg ICAgICAgICAgICAgfCBmICAgICAgICAgICAgICAgIHwgYW55ICAgIHwgb2ZmICAgICAgICAgICAg ICAgIHwgZGJuYW1lPXJlZ3Jlc3NfZG9lc25vdGV4aXN0IHwgMC8wCiAoMSByb3cpCiAKIC0tIGZh aWwgLSBwdWJsaWNhdGlvbiBhbHJlYWR5IGV4aXN0cwpAQCAtMjkzLDcgKzMwMSw3IEBAIEVSUk9S OiAgcHVibGljYXRpb24gInRlc3RwdWIxIiBpcyBhbHJlYWR5IGluIHN1YnNjcmlwdGlvbiAicmVn cmVzc190ZXN0c3ViIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExp c3Qgb2Ygc3Vic2NyaXB0aW9ucwogICAgICAgTmFtZSAgICAgICB8ICAgICAgICAgICBPd25lciAg ICAgICAgICAgfCBFbmFibGVkIHwgICAgICAgICBQdWJsaWNhdGlvbiAgICAgICAgIHwgQmluYXJ5 IHwgU3RyZWFtaW5nIHwgVHdvLXBoYXNlIGNvbW1pdCB8IERpc2FibGUgb24gZXJyb3IgfCBPcmln aW4gfCBTeW5jaHJvbm91cyBjb21taXQgfCAgICAgICAgICBDb25uaW5mbyAgICAgICAgICAgfCBT a2lwIExTTiAKIC0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0g cmVncmVzc190ZXN0c3ViIHwgcmVncmVzc19zdWJzY3JpcHRpb25fdXNlciB8IGYgICAgICAgfCB7 dGVzdHB1Yix0ZXN0cHViMSx0ZXN0cHViMn0gfCBmICAgICAgfCBmICAgICAgICAgfCBkICAgICAg ICAgICAgICAgIHwgZiAgICAgICAgICAgICAgICB8IGFueSAgICB8IG9mZiAgICAgICAgICAgICAg ICB8IGRibmFtZT1yZWdyZXNzX2RvZXNub3RleGlzdCB8IDAvMAorIHJlZ3Jlc3NfdGVzdHN1YiB8 IHJlZ3Jlc3Nfc3Vic2NyaXB0aW9uX3VzZXIgfCBmICAgICAgIHwge3Rlc3RwdWIsdGVzdHB1YjEs dGVzdHB1YjJ9IHwgZiAgICAgIHwgb2ZmICAgICAgIHwgZCAgICAgICAgICAgICAgICB8IGYgICAg ICAgICAgICAgICAgfCBhbnkgICAgfCBvZmYgICAgICAgICAgICAgICAgfCBkYm5hbWU9cmVncmVz c19kb2Vzbm90ZXhpc3QgfCAwLzAKICgxIHJvdykKIAogLS0gZmFpbCAtIHB1YmxpY2F0aW9uIHVz ZWQgbW9yZSB0aGVuIG9uY2UKQEAgLTMxMSw3ICszMTksNyBAQCBBTFRFUiBTVUJTQ1JJUFRJT04g cmVncmVzc190ZXN0c3ViIERST1AgUFVCTElDQVRJT04gdGVzdHB1YjEsIHRlc3RwdWIyIFdJVEgg KHJlZgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHN1YnNjcmlwdGlv bnMKICAgICAgIE5hbWUgICAgICAgfCAgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgRW5hYmxl ZCB8IFB1YmxpY2F0aW9uIHwgQmluYXJ5IHwgU3RyZWFtaW5nIHwgVHdvLXBoYXNlIGNvbW1pdCB8 IERpc2FibGUgb24gZXJyb3IgfCBPcmlnaW4gfCBTeW5jaHJvbm91cyBjb21taXQgfCAgICAgICAg ICBDb25uaW5mbyAgICAgICAgICAgfCBTa2lwIExTTiAKIC0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLSst LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0KLSByZWdyZXNzX3Rlc3RzdWIgfCByZWdyZXNzX3N1YnNjcmlwdGlvbl91c2VyIHwgZiAg ICAgICB8IHt0ZXN0cHVifSAgIHwgZiAgICAgIHwgZiAgICAgICAgIHwgZCAgICAgICAgICAgICAg ICB8IGYgICAgICAgICAgICAgICAgfCBhbnkgICAgfCBvZmYgICAgICAgICAgICAgICAgfCBkYm5h bWU9cmVncmVzc19kb2Vzbm90ZXhpc3QgfCAwLzAKKyByZWdyZXNzX3Rlc3RzdWIgfCByZWdyZXNz X3N1YnNjcmlwdGlvbl91c2VyIHwgZiAgICAgICB8IHt0ZXN0cHVifSAgIHwgZiAgICAgIHwgb2Zm ICAgICAgIHwgZCAgICAgICAgICAgICAgICB8IGYgICAgICAgICAgICAgICAgfCBhbnkgICAgfCBv ZmYgICAgICAgICAgICAgICAgfCBkYm5hbWU9cmVncmVzc19kb2Vzbm90ZXhpc3QgfCAwLzAKICgx IHJvdykKIAogRFJPUCBTVUJTQ1JJUFRJT04gcmVncmVzc190ZXN0c3ViOwpAQCAtMzUwLDcgKzM1 OCw3IEBAIEhJTlQ6ICBUbyBpbml0aWF0ZSByZXBsaWNhdGlvbiwgeW91IG11c3QgbWFudWFsbHkg Y3JlYXRlIHRoZSByZXBsaWNhdGlvbiBzbG90LCBlCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIExpc3Qgb2Ygc3Vic2NyaXB0aW9ucwogICAgICAgTmFtZSAgICAgICB8ICAgICAgICAg ICBPd25lciAgICAgICAgICAgfCBFbmFibGVkIHwgUHVibGljYXRpb24gfCBCaW5hcnkgfCBTdHJl YW1pbmcgfCBUd28tcGhhc2UgY29tbWl0IHwgRGlzYWJsZSBvbiBlcnJvciB8IE9yaWdpbiB8IFN5 bmNocm9ub3VzIGNvbW1pdCB8ICAgICAgICAgIENvbm5pbmZvICAgICAgICAgICB8IFNraXAgTFNO IAogLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfdGVzdHN1YiB8IHJlZ3Jl c3Nfc3Vic2NyaXB0aW9uX3VzZXIgfCBmICAgICAgIHwge3Rlc3RwdWJ9ICAgfCBmICAgICAgfCBm ICAgICAgICAgfCBwICAgICAgICAgICAgICAgIHwgZiAgICAgICAgICAgICAgICB8IGFueSAgICB8 IG9mZiAgICAgICAgICAgICAgICB8IGRibmFtZT1yZWdyZXNzX2RvZXNub3RleGlzdCB8IDAvMAor IHJlZ3Jlc3NfdGVzdHN1YiB8IHJlZ3Jlc3Nfc3Vic2NyaXB0aW9uX3VzZXIgfCBmICAgICAgIHwg e3Rlc3RwdWJ9ICAgfCBmICAgICAgfCBvZmYgICAgICAgfCBwICAgICAgICAgICAgICAgIHwgZiAg ICAgICAgICAgICAgICB8IGFueSAgICB8IG9mZiAgICAgICAgICAgICAgICB8IGRibmFtZT1yZWdy ZXNzX2RvZXNub3RleGlzdCB8IDAvMAogKDEgcm93KQogCiAtLWZhaWwgLSBhbHRlciBvZiB0d29f cGhhc2Ugb3B0aW9uIG5vdCBzdXBwb3J0ZWQuCkBAIC0zNjIsNyArMzcwLDcgQEAgQUxURVIgU1VC U0NSSVBUSU9OIHJlZ3Jlc3NfdGVzdHN1YiBTRVQgKHN0cmVhbWluZyA9IHRydWUpOwogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHN1YnNjcmlwdGlvbnMKICAgICAgIE5h bWUgICAgICAgfCAgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgRW5hYmxlZCB8IFB1YmxpY2F0 aW9uIHwgQmluYXJ5IHwgU3RyZWFtaW5nIHwgVHdvLXBoYXNlIGNvbW1pdCB8IERpc2FibGUgb24g ZXJyb3IgfCBPcmlnaW4gfCBTeW5jaHJvbm91cyBjb21taXQgfCAgICAgICAgICBDb25uaW5mbyAg ICAgICAgICAgfCBTa2lwIExTTiAKIC0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdy ZXNzX3Rlc3RzdWIgfCByZWdyZXNzX3N1YnNjcmlwdGlvbl91c2VyIHwgZiAgICAgICB8IHt0ZXN0 cHVifSAgIHwgZiAgICAgIHwgdCAgICAgICAgIHwgcCAgICAgICAgICAgICAgICB8IGYgICAgICAg ICAgICAgICAgfCBhbnkgICAgfCBvZmYgICAgICAgICAgICAgICAgfCBkYm5hbWU9cmVncmVzc19k b2Vzbm90ZXhpc3QgfCAwLzAKKyByZWdyZXNzX3Rlc3RzdWIgfCByZWdyZXNzX3N1YnNjcmlwdGlv bl91c2VyIHwgZiAgICAgICB8IHt0ZXN0cHVifSAgIHwgZiAgICAgIHwgb24gICAgICAgIHwgcCAg ICAgICAgICAgICAgICB8IGYgICAgICAgICAgICAgICAgfCBhbnkgICAgfCBvZmYgICAgICAgICAg ICAgICAgfCBkYm5hbWU9cmVncmVzc19kb2Vzbm90ZXhpc3QgfCAwLzAKICgxIHJvdykKIAogQUxU RVIgU1VCU0NSSVBUSU9OIHJlZ3Jlc3NfdGVzdHN1YiBTRVQgKHNsb3RfbmFtZSA9IE5PTkUpOwpA QCAtMzc1LDcgKzM4Myw3IEBAIEhJTlQ6ICBUbyBpbml0aWF0ZSByZXBsaWNhdGlvbiwgeW91IG11 c3QgbWFudWFsbHkgY3JlYXRlIHRoZSByZXBsaWNhdGlvbiBzbG90LCBlCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIExpc3Qgb2Ygc3Vic2NyaXB0aW9ucwogICAgICAgTmFtZSAgICAg ICB8ICAgICAgICAgICBPd25lciAgICAgICAgICAgfCBFbmFibGVkIHwgUHVibGljYXRpb24gfCBC aW5hcnkgfCBTdHJlYW1pbmcgfCBUd28tcGhhc2UgY29tbWl0IHwgRGlzYWJsZSBvbiBlcnJvciB8 IE9yaWdpbiB8IFN5bmNocm9ub3VzIGNvbW1pdCB8ICAgICAgICAgIENvbm5pbmZvICAgICAgICAg ICB8IFNraXAgTFNOIAogLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfdGVz dHN1YiB8IHJlZ3Jlc3Nfc3Vic2NyaXB0aW9uX3VzZXIgfCBmICAgICAgIHwge3Rlc3RwdWJ9ICAg fCBmICAgICAgfCB0ICAgICAgICAgfCBwICAgICAgICAgICAgICAgIHwgZiAgICAgICAgICAgICAg ICB8IGFueSAgICB8IG9mZiAgICAgICAgICAgICAgICB8IGRibmFtZT1yZWdyZXNzX2RvZXNub3Rl eGlzdCB8IDAvMAorIHJlZ3Jlc3NfdGVzdHN1YiB8IHJlZ3Jlc3Nfc3Vic2NyaXB0aW9uX3VzZXIg fCBmICAgICAgIHwge3Rlc3RwdWJ9ICAgfCBmICAgICAgfCBvbiAgICAgICAgfCBwICAgICAgICAg ICAgICAgIHwgZiAgICAgICAgICAgICAgICB8IGFueSAgICB8IG9mZiAgICAgICAgICAgICAgICB8 IGRibmFtZT1yZWdyZXNzX2RvZXNub3RleGlzdCB8IDAvMAogKDEgcm93KQogCiBBTFRFUiBTVUJT Q1JJUFRJT04gcmVncmVzc190ZXN0c3ViIFNFVCAoc2xvdF9uYW1lID0gTk9ORSk7CkBAIC0zOTEs NyArMzk5LDcgQEAgSElOVDogIFRvIGluaXRpYXRlIHJlcGxpY2F0aW9uLCB5b3UgbXVzdCBtYW51 YWxseSBjcmVhdGUgdGhlIHJlcGxpY2F0aW9uIHNsb3QsIGUKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgTGlzdCBvZiBzdWJzY3JpcHRpb25zCiAgICAgICBOYW1lICAgICAgIHwgICAg ICAgICAgIE93bmVyICAgICAgICAgICB8IEVuYWJsZWQgfCBQdWJsaWNhdGlvbiB8IEJpbmFyeSB8 IFN0cmVhbWluZyB8IFR3by1waGFzZSBjb21taXQgfCBEaXNhYmxlIG9uIGVycm9yIHwgT3JpZ2lu IHwgU3luY2hyb25vdXMgY29tbWl0IHwgICAgICAgICAgQ29ubmluZm8gICAgICAgICAgIHwgU2tp cCBMU04gCiAtLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc190ZXN0c3ViIHwg cmVncmVzc19zdWJzY3JpcHRpb25fdXNlciB8IGYgICAgICAgfCB7dGVzdHB1Yn0gICB8IGYgICAg ICB8IGYgICAgICAgICB8IGQgICAgICAgICAgICAgICAgfCBmICAgICAgICAgICAgICAgIHwgYW55 ICAgIHwgb2ZmICAgICAgICAgICAgICAgIHwgZGJuYW1lPXJlZ3Jlc3NfZG9lc25vdGV4aXN0IHwg MC8wCisgcmVncmVzc190ZXN0c3ViIHwgcmVncmVzc19zdWJzY3JpcHRpb25fdXNlciB8IGYgICAg ICAgfCB7dGVzdHB1Yn0gICB8IGYgICAgICB8IG9mZiAgICAgICB8IGQgICAgICAgICAgICAgICAg fCBmICAgICAgICAgICAgICAgIHwgYW55ICAgIHwgb2ZmICAgICAgICAgICAgICAgIHwgZGJuYW1l PXJlZ3Jlc3NfZG9lc25vdGV4aXN0IHwgMC8wCiAoMSByb3cpCiAKIEFMVEVSIFNVQlNDUklQVElP TiByZWdyZXNzX3Rlc3RzdWIgU0VUIChkaXNhYmxlX29uX2Vycm9yID0gdHJ1ZSk7CkBAIC0zOTks NyArNDA3LDcgQEAgQUxURVIgU1VCU0NSSVBUSU9OIHJlZ3Jlc3NfdGVzdHN1YiBTRVQgKGRpc2Fi bGVfb25fZXJyb3IgPSB0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlz dCBvZiBzdWJzY3JpcHRpb25zCiAgICAgICBOYW1lICAgICAgIHwgICAgICAgICAgIE93bmVyICAg ICAgICAgICB8IEVuYWJsZWQgfCBQdWJsaWNhdGlvbiB8IEJpbmFyeSB8IFN0cmVhbWluZyB8IFR3 by1waGFzZSBjb21taXQgfCBEaXNhYmxlIG9uIGVycm9yIHwgT3JpZ2luIHwgU3luY2hyb25vdXMg Y29tbWl0IHwgICAgICAgICAgQ29ubmluZm8gICAgICAgICAgIHwgU2tpcCBMU04gCiAtLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc190ZXN0c3ViIHwgcmVncmVzc19zdWJzY3Jp cHRpb25fdXNlciB8IGYgICAgICAgfCB7dGVzdHB1Yn0gICB8IGYgICAgICB8IGYgICAgICAgICB8 IGQgICAgICAgICAgICAgICAgfCB0ICAgICAgICAgICAgICAgIHwgYW55ICAgIHwgb2ZmICAgICAg ICAgICAgICAgIHwgZGJuYW1lPXJlZ3Jlc3NfZG9lc25vdGV4aXN0IHwgMC8wCisgcmVncmVzc190 ZXN0c3ViIHwgcmVncmVzc19zdWJzY3JpcHRpb25fdXNlciB8IGYgICAgICAgfCB7dGVzdHB1Yn0g ICB8IGYgICAgICB8IG9mZiAgICAgICB8IGQgICAgICAgICAgICAgICAgfCB0ICAgICAgICAgICAg ICAgIHwgYW55ICAgIHwgb2ZmICAgICAgICAgICAgICAgIHwgZGJuYW1lPXJlZ3Jlc3NfZG9lc25v dGV4aXN0IHwgMC8wCiAoMSByb3cpCiAKIEFMVEVSIFNVQlNDUklQVElPTiByZWdyZXNzX3Rlc3Rz dWIgU0VUIChzbG90X25hbWUgPSBOT05FKTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mv c3FsL3N1YnNjcmlwdGlvbi5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9zdWJzY3JpcHRpb24u c3FsCmluZGV4IGVhZWFkZThjY2UuLjc5OTFhYmZlOGYgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3Jl Z3Jlc3Mvc3FsL3N1YnNjcmlwdGlvbi5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvc3Vi c2NyaXB0aW9uLnNxbApAQCAtMTY3LDcgKzE2Nyw3IEBAIEFMVEVSIFNVQlNDUklQVElPTiByZWdy ZXNzX3Rlc3RzdWIgU0VUIChzbG90X25hbWUgPSBOT05FKTsKIAogRFJPUCBTVUJTQ1JJUFRJT04g cmVncmVzc190ZXN0c3ViOwogCi0tLSBmYWlsIC0gc3RyZWFtaW5nIG11c3QgYmUgYm9vbGVhbgor LS0gZmFpbCAtIHN0cmVhbWluZyBtdXN0IGJlIGJvb2xlYW4gb3IgJ3BhcmFsbGVsJwogQ1JFQVRF IFNVQlNDUklQVElPTiByZWdyZXNzX3Rlc3RzdWIgQ09OTkVDVElPTiAnZGJuYW1lPXJlZ3Jlc3Nf ZG9lc25vdGV4aXN0JyBQVUJMSUNBVElPTiB0ZXN0cHViIFdJVEggKGNvbm5lY3QgPSBmYWxzZSwg c3RyZWFtaW5nID0gZm9vKTsKIAogLS0gbm93IGl0IHdvcmtzCkBAIC0xNzUsNiArMTc1LDEwIEBA IENSRUFURSBTVUJTQ1JJUFRJT04gcmVncmVzc190ZXN0c3ViIENPTk5FQ1RJT04gJ2RibmFtZT1y ZWdyZXNzX2RvZXNub3RleGlzdCcgUFVCCiAKIFxkUnMrCiAKK0FMVEVSIFNVQlNDUklQVElPTiBy ZWdyZXNzX3Rlc3RzdWIgU0VUIChzdHJlYW1pbmcgPSBwYXJhbGxlbCk7CisKK1xkUnMrCisKIEFM VEVSIFNVQlNDUklQVElPTiByZWdyZXNzX3Rlc3RzdWIgU0VUIChzdHJlYW1pbmcgPSBmYWxzZSk7 CiBBTFRFUiBTVUJTQ1JJUFRJT04gcmVncmVzc190ZXN0c3ViIFNFVCAoc2xvdF9uYW1lID0gTk9O RSk7CiAKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAxNV9zdHJlYW0ucGwg Yi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMTVfc3RyZWFtLnBsCmluZGV4IGNiYWEzMjdlNDQu LjAxZjIwNWQyYmYgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAxNV9zdHJl YW0ucGwKKysrIGIvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDE1X3N0cmVhbS5wbApAQCAtOCw2 ICs4LDEyOCBAQCB1c2UgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsKIHVzZSBQb3N0Z3JlU1FM OjpUZXN0OjpVdGlsczsKIHVzZSBUZXN0OjpNb3JlOwogCisjIENoZWNrIHRoYXQgdGhlIHBhcmFs bGVsIGFwcGx5IHdvcmtlciBoYXMgZmluaXNoZWQgYXBwbHlpbmcgdGhlIHN0cmVhbWluZworIyB0 cmFuc2FjdGlvbi4KK3N1YiBjaGVja19wYXJhbGxlbF9sb2cKK3sKKwlteSAoJG5vZGVfc3Vic2Ny aWJlciwgJG9mZnNldCwgJGlzX3BhcmFsbGVsLCAkdHlwZSkgPSBAXzsKKworCWlmICgkaXNfcGFy YWxsZWwpCisJeworCQkkbm9kZV9zdWJzY3JpYmVyLT53YWl0X2Zvcl9sb2coCisJCQlxci9ERUJV RzogKCBbQS1aMC05XSs6KT8gZmluaXNoZWQgcHJvY2Vzc2luZyB0aGUgU1RSRUFNICR0eXBlIGNv bW1hbmQvLAorCQkJJG9mZnNldCk7CisJfQorfQorCisjIENvbW1vbiB0ZXN0IHN0ZXBzIGZvciBi b3RoIHRoZSBzdHJlYW1pbmc9b24gYW5kIHN0cmVhbWluZz1wYXJhbGxlbCBjYXNlcy4KK3N1YiB0 ZXN0X3N0cmVhbWluZworeworCW15ICgkbm9kZV9wdWJsaXNoZXIsICRub2RlX3N1YnNjcmliZXIs ICRhcHBuYW1lLCAkaXNfcGFyYWxsZWwpID0gQF87CisKKwkjIEludGVybGVhdmUgYSBwYWlyIG9m IHRyYW5zYWN0aW9ucywgZWFjaCBleGNlZWRpbmcgdGhlIDY0a0IgbGltaXQuCisJbXkgJGluICA9 ICcnOworCW15ICRvdXQgPSAnJzsKKworCW15ICRvZmZzZXQgPSAwOworCisJbXkgJHRpbWVyID0g SVBDOjpSdW46OnRpbWVvdXQoJFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOjp0aW1lb3V0X2RlZmF1 bHQpOworCisJbXkgJGggPSAkbm9kZV9wdWJsaXNoZXItPmJhY2tncm91bmRfcHNxbCgncG9zdGdy ZXMnLCBcJGluLCBcJG91dCwgJHRpbWVyLAorCQlvbl9lcnJvcl9zdG9wID0+IDApOworCisJIyBD aGVjayB0aGUgc3Vic2NyaWJlciBsb2cgZnJvbSBub3cgb24uCisJJG9mZnNldCA9IC1zICRub2Rl X3N1YnNjcmliZXItPmxvZ2ZpbGU7CisKKwkkaW4gLj0gcXsKKwlCRUdJTjsKKwlJTlNFUlQgSU5U TyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDMs IDUwMDApIHMoaSk7CisJVVBEQVRFIHRlc3RfdGFiIFNFVCBiID0gbWQ1KGIpIFdIRVJFIG1vZChh LDIpID0gMDsKKwlERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBtb2QoYSwzKSA9IDA7CisJfTsK KwkkaC0+cHVtcF9uYjsKKworCSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAorCQkncG9zdGdy ZXMnLCBxeworCUJFR0lOOworCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6 dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoNTAwMSwgOTk5OSkgcyhpKTsKKwlERUxFVEUgRlJP TSB0ZXN0X3RhYiBXSEVSRSBhID4gNTAwMDsKKwlDT01NSVQ7CisJfSk7CisKKwkkaW4gLj0gcXsK KwlDT01NSVQ7CisJXHEKKwl9OworCSRoLT5maW5pc2g7ICAgICMgZXJyb3JzIG1ha2UgdGhlIG5l eHQgdGVzdCBmYWlsLCBzbyBpZ25vcmUgdGhlbSBoZXJlCisKKwkkbm9kZV9wdWJsaXNoZXItPndh aXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOworCisJY2hlY2tfcGFyYWxsZWxfbG9nKCRub2RlX3N1 YnNjcmliZXIsICRvZmZzZXQsICRpc19wYXJhbGxlbCwgJ0NPTU1JVCcpOworCisJbXkgJHJlc3Vs dCA9CisJICAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIlNFTEVD VCBjb3VudCgqKSwgY291bnQoYyksIGNvdW50KGQgPSA5OTkpIEZST00gdGVzdF90YWIiKTsKKwlp cygkcmVzdWx0LCBxcSgzMzM0fDMzMzR8MzMzNCksCisJCSdjaGVjayBleHRyYSBjb2x1bW5zIGNv bnRhaW4gbG9jYWwgZGVmYXVsdHMnKTsKKworCSMgVGVzdCB0aGUgc3RyZWFtaW5nIGluIGJpbmFy eSBtb2RlCisJJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJBTFRF UiBTVUJTQ1JJUFRJT04gdGFwX3N1YiBTRVQgKGJpbmFyeSA9IG9uKSIpOworCisJIyBDaGVjayB0 aGUgc3Vic2NyaWJlciBsb2cgZnJvbSBub3cgb24uCisJJG9mZnNldCA9IC1zICRub2RlX3N1YnNj cmliZXItPmxvZ2ZpbGU7CisKKwkjIEluc2VydCwgdXBkYXRlIGFuZCBkZWxldGUgZW5vdWdoIHJv d3MgdG8gZXhjZWVkIHRoZSA2NGtCIGxpbWl0LgorCSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KAorCQkncG9zdGdyZXMnLCBxeworCUJFR0lOOworCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVD VCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoNTAwMSwgMTAwMDApIHMoaSk7 CisJVVBEQVRFIHRlc3RfdGFiIFNFVCBiID0gbWQ1KGIpIFdIRVJFIG1vZChhLDIpID0gMDsKKwlE RUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBtb2QoYSwzKSA9IDA7CisJQ09NTUlUOworCX0pOwor CisJJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKKworCWNoZWNr X3BhcmFsbGVsX2xvZygkbm9kZV9zdWJzY3JpYmVyLCAkb2Zmc2V0LCAkaXNfcGFyYWxsZWwsICdD T01NSVQnKTsKKworCSRyZXN1bHQgPQorCSAgJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsCisJCSJTRUxFQ1QgY291bnQoKiksIGNvdW50KGMpLCBjb3VudChkID0gOTk5KSBG Uk9NIHRlc3RfdGFiIik7CisJaXMoJHJlc3VsdCwgcXEoNjY2N3w2NjY3fDY2NjcpLAorCQknY2hl Y2sgZXh0cmEgY29sdW1ucyBjb250YWluIGxvY2FsIGRlZmF1bHRzJyk7CisKKwkjIENoYW5nZSB0 aGUgbG9jYWwgdmFsdWVzIG9mIHRoZSBleHRyYSBjb2x1bW5zIG9uIHRoZSBzdWJzY3JpYmVyLAor CSMgdXBkYXRlIHB1Ymxpc2hlciwgYW5kIGNoZWNrIHRoYXQgc3Vic2NyaWJlciByZXRhaW5zIHRo ZSBleHBlY3RlZAorCSMgdmFsdWVzLiBUaGlzIGlzIHRvIGVuc3VyZSB0aGF0IG5vbi1zdHJlYW1p bmcgdHJhbnNhY3Rpb25zIGJlaGF2ZQorCSMgcHJvcGVybHkgYWZ0ZXIgYSBzdHJlYW1pbmcgdHJh bnNhY3Rpb24uCisJJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJV UERBVEUgdGVzdF90YWIgU0VUIGMgPSAnZXBvY2gnOjp0aW1lc3RhbXB0eiArIDk4NzY1NDMyMSAq IGludGVydmFsICcxcyciCisJKTsKKworCSMgQ2hlY2sgdGhlIHN1YnNjcmliZXIgbG9nIGZyb20g bm93IG9uLgorCSRvZmZzZXQgPSAtcyAkbm9kZV9zdWJzY3JpYmVyLT5sb2dmaWxlOworCisJJG5v ZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIlVQREFURSB0ZXN0X3RhYiBT RVQgYiA9IG1kNShhOjp0ZXh0KSIpOworCisJJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRj aHVwKCRhcHBuYW1lKTsKKworCWNoZWNrX3BhcmFsbGVsX2xvZygkbm9kZV9zdWJzY3JpYmVyLCAk b2Zmc2V0LCAkaXNfcGFyYWxsZWwsICdDT01NSVQnKTsKKworCSRyZXN1bHQgPSAkbm9kZV9zdWJz Y3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIlNFTEVDVCBjb3VudCgqKSwgY291bnQo ZXh0cmFjdChlcG9jaCBmcm9tIGMpID0gOTg3NjU0MzIxKSwgY291bnQoZCA9IDk5OSkgRlJPTSB0 ZXN0X3RhYiIKKwkpOworCWlzKCRyZXN1bHQsIHFxKDY2Njd8NjY2N3w2NjY3KSwKKwkJJ2NoZWNr IGV4dHJhIGNvbHVtbnMgY29udGFpbiBsb2NhbGx5IGNoYW5nZWQgZGF0YScpOworCisJIyBDbGVh bnVwIHRoZSB0ZXN0IGRhdGEKKwkkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LAorCQkiREVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgKGEgPiAyKSIpOworCSRub2RlX3B1Ymxp c2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7Cit9CisKICMgQ3JlYXRlIHB1Ymxpc2hl ciBub2RlCiBteSAkbm9kZV9wdWJsaXNoZXIgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5u ZXcoJ3B1Ymxpc2hlcicpOwogJG5vZGVfcHVibGlzaGVyLT5pbml0KGFsbG93c19zdHJlYW1pbmcg PT4gJ2xvZ2ljYWwnKTsKQEAgLTI2LDE3ICsxNDgsMjcgQEAgJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywKICRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs CiAJIklOU0VSVCBJTlRPIHRlc3RfdGFiIFZBTFVFUyAoMSwgJ2ZvbycpLCAoMiwgJ2JhcicpIik7 CiAKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUg dGVzdF90YWJfMiAoYSBpbnQpIik7CisKICMgU2V0dXAgc3RydWN0dXJlIG9uIHN1YnNjcmliZXIK ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAogCSJDUkVBVEUgVEFCTEUg dGVzdF90YWIgKGEgaW50IHByaW1hcnkga2V5LCBiIHRleHQsIGMgdGltZXN0YW1wdHogREVGQVVM VCBub3coKSwgZCBiaWdpbnQgREVGQVVMVCA5OTkpIgogKTsKIAorJG5vZGVfc3Vic2NyaWJlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdGVzdF90YWJfMiAoYSBpbnQpIik7 Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFVOSVFV RSBJTkRFWCBpZHhfdGFiIG9uIHRlc3RfdGFiXzIoYSkiKTsKKwogIyBTZXR1cCBsb2dpY2FsIHJl cGxpY2F0aW9uCiBteSAkcHVibGlzaGVyX2Nvbm5zdHIgPSAkbm9kZV9wdWJsaXNoZXItPmNvbm5z dHIgLiAnIGRibmFtZT1wb3N0Z3Jlcyc7CiAkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLAotCSJDUkVBVEUgUFVCTElDQVRJT04gdGFwX3B1YiBGT1IgVEFCTEUgdGVzdF90YWIi KTsKKwkiQ1JFQVRFIFBVQkxJQ0FUSU9OIHRhcF9wdWIgRk9SIFRBQkxFIHRlc3RfdGFiLCB0ZXN0 X3RhYl8yIik7CiAKIG15ICRhcHBuYW1lID0gJ3RhcF9zdWInOworCisjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIworIyBUZXN0IHVzaW5nIHN0cmVhbWluZyBtb2RlICdvbicKKyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywKIAkiQ1JFQVRFIFNVQlNDUklQVElPTiB0YXBfc3ViIENPTk5FQ1RJT04gJyRw dWJsaXNoZXJfY29ubnN0ciBhcHBsaWNhdGlvbl9uYW1lPSRhcHBuYW1lJyBQVUJMSUNBVElPTiB0 YXBfcHViIFdJVEggKHN0cmVhbWluZyA9IG9uKSIKICk7CkBAIC00OSw2ICsxODEsNDMgQEAgbXkg JHJlc3VsdCA9CiAJIlNFTEVDVCBjb3VudCgqKSwgY291bnQoYyksIGNvdW50KGQgPSA5OTkpIEZS T00gdGVzdF90YWIiKTsKIGlzKCRyZXN1bHQsIHFxKDJ8MnwyKSwgJ2NoZWNrIGluaXRpYWwgZGF0 YSB3YXMgY29waWVkIHRvIHN1YnNjcmliZXInKTsKIAordGVzdF9zdHJlYW1pbmcoJG5vZGVfcHVi bGlzaGVyLCAkbm9kZV9zdWJzY3JpYmVyLCAkYXBwbmFtZSwgMCk7CisKKyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFRlc3QgdXNpbmcgc3RyZWFtaW5nIG1vZGUgJ3Bh cmFsbGVsJworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK215ICRvbGRw aWQgPSAkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgcGlk IEZST00gcGdfc3RhdF9yZXBsaWNhdGlvbiBXSEVSRSBhcHBsaWNhdGlvbl9uYW1lID0gJyRhcHBu YW1lJyBBTkQgc3RhdGUgPSAnc3RyZWFtaW5nJzsiCispOworCiskbm9kZV9zdWJzY3JpYmVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQUxURVIgU1VCU0NSSVBUSU9OIHRhcF9zdWIgU0VUKHN0 cmVhbWluZyA9IHBhcmFsbGVsLCBiaW5hcnkgPSBvZmYpIik7CisKKyRub2RlX3B1Ymxpc2hlci0+ cG9sbF9xdWVyeV91bnRpbCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgcGlkICE9ICRvbGRwaWQgRlJP TSBwZ19zdGF0X3JlcGxpY2F0aW9uIFdIRVJFIGFwcGxpY2F0aW9uX25hbWUgPSAnJGFwcG5hbWUn IEFORCBzdGF0ZSA9ICdzdHJlYW1pbmcnOyIKKyAgKQorICBvciBkaWUKKyAgIlRpbWVkIG91dCB3 aGlsZSB3YWl0aW5nIGZvciBhcHBseSB0byByZXN0YXJ0IGFmdGVyIGNoYW5naW5nIFNVQlNDUklQ VElPTiI7CisKKyMgV2UgbmVlZCB0byBjaGVjayBERUJVRyBsb2dzIHRvIGVuc3VyZSB0aGF0IHRo ZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgaGFzCisjIGFwcGxpZWQgdGhlIHRyYW5zYWN0aW9uLiBT bywgYnVtcCB1cCB0aGUgbG9nIHZlcmJvc2l0eS4KKyRub2RlX3N1YnNjcmliZXItPmFwcGVuZF9j b25mKCdwb3N0Z3Jlc3FsLmNvbmYnLCAibG9nX21pbl9tZXNzYWdlcyA9IGRlYnVnMSIpOworJG5v ZGVfc3Vic2NyaWJlci0+cmVsb2FkOworCisjIFJ1biBhIHF1ZXJ5IHRvIG1ha2Ugc3VyZSB0aGF0 IHRoZSByZWxvYWQgaGFzIHRha2VuIGVmZmVjdC4KKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCBxe1NFTEVDVCAxfSk7CisKK3Rlc3Rfc3RyZWFtaW5nKCRub2RlX3B1Ymxp c2hlciwgJG5vZGVfc3Vic2NyaWJlciwgJGFwcG5hbWUsIDEpOworCisjIFRlc3QgdGhhdCB0aGUg ZGVhZGxvY2sgaXMgZGV0ZWN0ZWQgYW1vbmcgdGhlIGxlYWRlciBhbmQgcGFyYWxsZWwgYXBwbHkK KyMgd29ya2Vycy4KKworJG5vZGVfc3Vic2NyaWJlci0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwu Y29uZicsICJkZWFkbG9ja190aW1lb3V0ID0gMTBtcyIpOworJG5vZGVfc3Vic2NyaWJlci0+cmVs b2FkOworCisjIFJ1biBhIHF1ZXJ5IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSByZWxvYWQgaGFzIHRh a2VuIGVmZmVjdC4KKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxe1NF TEVDVCAxfSk7CisKICMgSW50ZXJsZWF2ZSBhIHBhaXIgb2YgdHJhbnNhY3Rpb25zLCBlYWNoIGV4 Y2VlZGluZyB0aGUgNjRrQiBsaW1pdC4KIG15ICRpbiAgPSAnJzsKIG15ICRvdXQgPSAnJzsKQEAg LTU4LDczICsyMjcsOTAgQEAgbXkgJHRpbWVyID0gSVBDOjpSdW46OnRpbWVvdXQoJFBvc3RncmVT UUw6OlRlc3Q6OlV0aWxzOjp0aW1lb3V0X2RlZmF1bHQpOwogbXkgJGggPSAkbm9kZV9wdWJsaXNo ZXItPmJhY2tncm91bmRfcHNxbCgncG9zdGdyZXMnLCBcJGluLCBcJG91dCwgJHRpbWVyLAogCW9u X2Vycm9yX3N0b3AgPT4gMCk7CiAKKyMgQ29uZmlybSBpZiBhIGRlYWRsb2NrIGJldHdlZW4gdGhl IGxlYWRlciBhcHBseSB3b3JrZXIgYW5kIHRoZSBwYXJhbGxlbCBhcHBseQorIyB3b3JrZXIgY2Fu IGJlIGRldGVjdGVkLgorCitteSAkb2Zmc2V0ID0gLXMgJG5vZGVfc3Vic2NyaWJlci0+bG9nZmls ZTsKKwogJGluIC49IHF7CiBCRUdJTjsKLUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBt ZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMywgNTAwMCkgcyhpKTsKLVVQREFURSB0 ZXN0X3RhYiBTRVQgYiA9IG1kNShiKSBXSEVSRSBtb2QoYSwyKSA9IDA7Ci1ERUxFVEUgRlJPTSB0 ZXN0X3RhYiBXSEVSRSBtb2QoYSwzKSA9IDA7CitJTlNFUlQgSU5UTyB0ZXN0X3RhYl8yIFNFTEVD VCBpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDUwMDApIHMoaSk7CiB9OwogJGgtPnB1bXBfbmI7 CiAKLSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAotCSdwb3N0Z3JlcycsIHF7Ci1CRUdJTjsK LUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0 ZV9zZXJpZXMoNTAwMSwgOTk5OSkgcyhpKTsKLURFTEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIGEg PiA1MDAwOwotQ09NTUlUOwotfSk7CisjIEVuc3VyZSB0aGF0IHRoZSBwYXJhbGxlbCBhcHBseSB3 b3JrZXIgZXhlY3V0ZXMgdGhlIGluc2VydCBjb21tYW5kIGJlZm9yZSB0aGUKKyMgbGVhZGVyIHdv cmtlci4KKyRub2RlX3N1YnNjcmliZXItPndhaXRfZm9yX2xvZygKKwlxci9ERUJVRzogKCBbQS1a MC05XSs6KT8gYXBwbGllZCBbMC05XSsgY2hhbmdlcyBpbiB0aGUgc3RyZWFtaW5nIGNodW5rLywK Kwkkb2Zmc2V0KTsKKworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklO U0VSVCBJTlRPIHRlc3RfdGFiXzIgdmFsdWVzKDEpIik7CiAKICRpbiAuPSBxewogQ09NTUlUOwog XHEKIH07Ci0kaC0+ZmluaXNoOyAgICAjIGVycm9ycyBtYWtlIHRoZSBuZXh0IHRlc3QgZmFpbCwg c28gaWdub3JlIHRoZW0gaGVyZQorJGgtPmZpbmlzaDsKIAorJG5vZGVfc3Vic2NyaWJlci0+d2Fp dF9mb3JfbG9nKHFyL0VSUk9SOiAoIFtBLVowLTldKzopPyBkZWFkbG9jayBkZXRlY3RlZC8sCisJ JG9mZnNldCk7CisKKyMgSW4gb3JkZXIgZm9yIHRoZSB0d28gdHJhbnNhY3Rpb25zIHRvIGJlIGNv bXBsZXRlZCBub3JtYWxseSB3aXRob3V0IGNhdXNpbmcKKyMgY29uZmxpY3RzIGR1ZSB0byB0aGUg dW5pcXVlIGluZGV4LCB3ZSB0ZW1wb3JhcmlseSBkcm9wIGl0LgorJG5vZGVfc3Vic2NyaWJlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIElOREVYIGlkeF90YWIiKTsKKworIyBXYWl0IGZv ciB0aGlzIHN0cmVhbWluZyB0cmFuc2FjdGlvbiB0byBiZSBhcHBsaWVkIGluIHRoZSBhcHBseSB3 b3JrZXIuCiAkbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOwogCiAk cmVzdWx0ID0KLSAgJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIlNF TEVDVCBjb3VudCgqKSwgY291bnQoYyksIGNvdW50KGQgPSA5OTkpIEZST00gdGVzdF90YWIiKTsK LWlzKCRyZXN1bHQsIHFxKDMzMzR8MzMzNHwzMzM0KSwgJ2NoZWNrIGV4dHJhIGNvbHVtbnMgY29u dGFpbiBsb2NhbCBkZWZhdWx0cycpOworICAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBGUk9NIHRlc3RfdGFiXzIiKTsKK2lzKCRyZXN1bHQs IHFxKDUwMDEpLCAnZGF0YSByZXBsaWNhdGVkIHRvIHN1YnNjcmliZXIgYWZ0ZXIgZHJvcHBpbmcg aW5kZXgnKTsKIAotIyBUZXN0IHRoZSBzdHJlYW1pbmcgaW4gYmluYXJ5IG1vZGUKKyMgQ2xlYW4g dXAgdGVzdCBkYXRhIGZyb20gdGhlIGVudmlyb25tZW50LgorJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgIlRSVU5DQVRFIFRBQkxFIHRlc3RfdGFiXzIiKTsKKyRub2RlX3B1 Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7CiAkbm9kZV9zdWJzY3JpYmVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiQUxURVIgU1VCU0NSSVBUSU9OIHRhcF9zdWIgU0VUIChi aW5hcnkgPSBvbikiKTsKKwkiQ1JFQVRFIFVOSVFVRSBJTkRFWCBpZHhfdGFiIG9uIHRlc3RfdGFi XzIoYSkiKTsKIAotIyBJbnNlcnQsIHVwZGF0ZSBhbmQgZGVsZXRlIGVub3VnaCByb3dzIHRvIGV4 Y2VlZCB0aGUgNjRrQiBsaW1pdC4KLSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAotCSdwb3N0 Z3JlcycsIHF7Ci1CRUdJTjsKLUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6 dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoNTAwMSwgMTAwMDApIHMoaSk7Ci1VUERBVEUgdGVz dF90YWIgU0VUIGIgPSBtZDUoYikgV0hFUkUgbW9kKGEsMikgPSAwOwotREVMRVRFIEZST00gdGVz dF90YWIgV0hFUkUgbW9kKGEsMykgPSAwOwotQ09NTUlUOwotfSk7CisjIENvbmZpcm0gaWYgYSBk ZWFkbG9jayBiZXR3ZWVuIHR3byBwYXJhbGxlbCBhcHBseSB3b3JrZXJzIGNhbiBiZSBkZXRlY3Rl ZC4KIAotJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKKyMgQ2hl Y2sgdGhlIHN1YnNjcmliZXIgbG9nIGZyb20gbm93IG9uLgorJG9mZnNldCA9IC1zICRub2RlX3N1 YnNjcmliZXItPmxvZ2ZpbGU7CiAKLSRyZXN1bHQgPQotICAkbm9kZV9zdWJzY3JpYmVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywKLQkiU0VMRUNUIGNvdW50KCopLCBjb3VudChjKSwgY291bnQoZCA9 IDk5OSkgRlJPTSB0ZXN0X3RhYiIpOwotaXMoJHJlc3VsdCwgcXEoNjY2N3w2NjY3fDY2NjcpLCAn Y2hlY2sgZXh0cmEgY29sdW1ucyBjb250YWluIGxvY2FsIGRlZmF1bHRzJyk7CiskaW4gLj0gcXsK K0JFR0lOOworSU5TRVJUIElOVE8gdGVzdF90YWJfMiBTRUxFQ1QgaSBGUk9NIGdlbmVyYXRlX3Nl cmllcygxLCA1MDAwKSBzKGkpOworfTsKKyRoLT5wdW1wX25iOworCisjIEVuc3VyZSB0aGF0IHRo ZSBmaXJzdCBwYXJhbGxlbCBhcHBseSB3b3JrZXIgZXhlY3V0ZXMgdGhlIGluc2VydCBjb21tYW5k CisjIGJlZm9yZSB0aGUgc2Vjb25kIG9uZS4KKyRub2RlX3N1YnNjcmliZXItPndhaXRfZm9yX2xv ZygKKwlxci9ERUJVRzogKCBbQS1aMC05XSs6KT8gYXBwbGllZCBbMC05XSsgY2hhbmdlcyBpbiB0 aGUgc3RyZWFtaW5nIGNodW5rLywKKwkkb2Zmc2V0KTsKIAotIyBDaGFuZ2UgdGhlIGxvY2FsIHZh bHVlcyBvZiB0aGUgZXh0cmEgY29sdW1ucyBvbiB0aGUgc3Vic2NyaWJlciwKLSMgdXBkYXRlIHB1 Ymxpc2hlciwgYW5kIGNoZWNrIHRoYXQgc3Vic2NyaWJlciByZXRhaW5zIHRoZSBleHBlY3RlZAot IyB2YWx1ZXMuIFRoaXMgaXMgdG8gZW5zdXJlIHRoYXQgbm9uLXN0cmVhbWluZyB0cmFuc2FjdGlv bnMgYmVoYXZlCi0jIHByb3Blcmx5IGFmdGVyIGEgc3RyZWFtaW5nIHRyYW5zYWN0aW9uLgotJG5v ZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIlVQREFURSB0ZXN0X3RhYiBT RVQgYyA9ICdlcG9jaCc6OnRpbWVzdGFtcHR6ICsgOTg3NjU0MzIxICogaW50ZXJ2YWwgJzFzJyIK LSk7CiAkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJVUERBVEUgdGVz dF90YWIgU0VUIGIgPSBtZDUoYTo6dGV4dCkiKTsKKwkiSU5TRVJUIElOVE8gdGVzdF90YWJfMiBT RUxFQ1QgaSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCA1MDAwKSBzKGkpIik7CiAKKyRpbiAuPSBx eworQ09NTUlUOworXHEKK307CiskaC0+ZmluaXNoOworCiskbm9kZV9zdWJzY3JpYmVyLT53YWl0 X2Zvcl9sb2cocXIvRVJST1I6ICggW0EtWjAtOV0rOik/IGRlYWRsb2NrIGRldGVjdGVkLywKKwkk b2Zmc2V0KTsKKworIyBJbiBvcmRlciBmb3IgdGhlIHR3byB0cmFuc2FjdGlvbnMgdG8gYmUgY29t cGxldGVkIG5vcm1hbGx5IHdpdGhvdXQgY2F1c2luZworIyBjb25mbGljdHMgZHVlIHRvIHRoZSB1 bmlxdWUgaW5kZXgsIHdlIHRlbXBvcmFyaWx5IGRyb3AgaXQuCiskbm9kZV9zdWJzY3JpYmVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgSU5ERVggaWR4X3RhYiIpOworCisjIFdhaXQgZm9y IHRoaXMgc3RyZWFtaW5nIHRyYW5zYWN0aW9uIHRvIGJlIGFwcGxpZWQgaW4gdGhlIGFwcGx5IHdv cmtlci4KICRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7CiAKLSRy ZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiU0VMRUNU IGNvdW50KCopLCBjb3VudChleHRyYWN0KGVwb2NoIGZyb20gYykgPSA5ODc2NTQzMjEpLCBjb3Vu dChkID0gOTk5KSBGUk9NIHRlc3RfdGFiIgotKTsKLWlzKCRyZXN1bHQsIHFxKDY2Njd8NjY2N3w2 NjY3KSwKLQknY2hlY2sgZXh0cmEgY29sdW1ucyBjb250YWluIGxvY2FsbHkgY2hhbmdlZCBkYXRh Jyk7CiskcmVzdWx0ID0KKyAgJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJTRUxFQ1QgY291bnQoKikgRlJPTSB0ZXN0X3RhYl8yIik7CitpcygkcmVzdWx0LCBxcSgxMDAw MCksICdkYXRhIHJlcGxpY2F0ZWQgdG8gc3Vic2NyaWJlciBhZnRlciBkcm9wcGluZyBpbmRleCcp OwogCiAkbm9kZV9zdWJzY3JpYmVyLT5zdG9wOwogJG5vZGVfcHVibGlzaGVyLT5zdG9wOwpkaWZm IC0tZ2l0IGEvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDE2X3N0cmVhbV9zdWJ4YWN0LnBsIGIv c3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDE2X3N0cmVhbV9zdWJ4YWN0LnBsCmluZGV4IGRiMjlm MDg5YTAuLjdlMzc0ZjY4N2IgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAx Nl9zdHJlYW1fc3VieGFjdC5wbAorKysgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMTZfc3Ry ZWFtX3N1YnhhY3QucGwKQEAgLTgsNiArOCw3MyBAQCB1c2UgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1 c3RlcjsKIHVzZSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczsKIHVzZSBUZXN0OjpNb3JlOwogCisj IENoZWNrIHRoYXQgdGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtlciBoYXMgZmluaXNoZWQgYXBwbHlp bmcgdGhlIHN0cmVhbWluZworIyB0cmFuc2FjdGlvbi4KK3N1YiBjaGVja19wYXJhbGxlbF9sb2cK K3sKKwlteSAoJG5vZGVfc3Vic2NyaWJlciwgJG9mZnNldCwgJGlzX3BhcmFsbGVsLCAkdHlwZSkg PSBAXzsKKworCWlmICgkaXNfcGFyYWxsZWwpCisJeworCQkkbm9kZV9zdWJzY3JpYmVyLT53YWl0 X2Zvcl9sb2coCisJCQlxci9ERUJVRzogKCBbQS1aMC05XSs6KT8gZmluaXNoZWQgcHJvY2Vzc2lu ZyB0aGUgU1RSRUFNICR0eXBlIGNvbW1hbmQvLAorCQkJJG9mZnNldCk7CisJfQorfQorCisjIENv bW1vbiB0ZXN0IHN0ZXBzIGZvciBib3RoIHRoZSBzdHJlYW1pbmc9b24gYW5kIHN0cmVhbWluZz1w YXJhbGxlbCBjYXNlcy4KK3N1YiB0ZXN0X3N0cmVhbWluZworeworCW15ICgkbm9kZV9wdWJsaXNo ZXIsICRub2RlX3N1YnNjcmliZXIsICRhcHBuYW1lLCAkaXNfcGFyYWxsZWwpID0gQF87CisKKwlt eSAkb2Zmc2V0ID0gMDsKKworCSMgQ2hlY2sgdGhlIHN1YnNjcmliZXIgbG9nIGZyb20gbm93IG9u LgorCSRvZmZzZXQgPSAtcyAkbm9kZV9zdWJzY3JpYmVyLT5sb2dmaWxlOworCisJIyBJbnNlcnQs IHVwZGF0ZSBhbmQgZGVsZXRlIHNvbWUgcm93cy4KKwkkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgKKwkJJ3Bvc3RncmVzJywgcXsKKwlCRUdJTjsKKwlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxF Q1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDMsIDUpIHMoaSk7CisJVVBE QVRFIHRlc3RfdGFiIFNFVCBiID0gbWQ1KGIpIFdIRVJFIG1vZChhLDIpID0gMDsKKwlERUxFVEUg RlJPTSB0ZXN0X3RhYiBXSEVSRSBtb2QoYSwzKSA9IDA7CisJU0FWRVBPSU5UIHMxOworCUlOU0VS VCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJp ZXMoNiwgOCkgcyhpKTsKKwlVUERBVEUgdGVzdF90YWIgU0VUIGIgPSBtZDUoYikgV0hFUkUgbW9k KGEsMikgPSAwOworCURFTEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIG1vZChhLDMpID0gMDsKKwlT QVZFUE9JTlQgczI7CisJSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0 KSBGUk9NIGdlbmVyYXRlX3Nlcmllcyg5LCAxMSkgcyhpKTsKKwlVUERBVEUgdGVzdF90YWIgU0VU IGIgPSBtZDUoYikgV0hFUkUgbW9kKGEsMikgPSAwOworCURFTEVURSBGUk9NIHRlc3RfdGFiIFdI RVJFIG1vZChhLDMpID0gMDsKKwlTQVZFUE9JTlQgczM7CisJSU5TRVJUIElOVE8gdGVzdF90YWIg U0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3NlcmllcygxMiwgMTQpIHMoaSk7 CisJVVBEQVRFIHRlc3RfdGFiIFNFVCBiID0gbWQ1KGIpIFdIRVJFIG1vZChhLDIpID0gMDsKKwlE RUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBtb2QoYSwzKSA9IDA7CisJU0FWRVBPSU5UIHM0Owor CUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0 ZV9zZXJpZXMoMTUsIDE3KSBzKGkpOworCVVQREFURSB0ZXN0X3RhYiBTRVQgYiA9IG1kNShiKSBX SEVSRSBtb2QoYSwyKSA9IDA7CisJREVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgbW9kKGEsMykg PSAwOworCUNPTU1JVDsKKwl9KTsKKworCSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1 cCgkYXBwbmFtZSk7CisKKwljaGVja19wYXJhbGxlbF9sb2coJG5vZGVfc3Vic2NyaWJlciwgJG9m ZnNldCwgJGlzX3BhcmFsbGVsLCAnQ09NTUlUJyk7CisKKwlteSAkcmVzdWx0ID0KKwkgICRub2Rl X3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiU0VMRUNUIGNvdW50KCopLCBj b3VudChjKSwgY291bnQoZCA9IDk5OSkgRlJPTSB0ZXN0X3RhYiIpOworCWlzKCRyZXN1bHQsIHFx KDEyfDEyfDEyKSwKKwkJJ2NoZWNrIGRhdGEgd2FzIGNvcGllZCB0byBzdWJzY3JpYmVyIGluIHN0 cmVhbWluZyBtb2RlIGFuZCBleHRyYSBjb2x1bW5zIGNvbnRhaW4gbG9jYWwgZGVmYXVsdHMnCisJ KTsKKworCSMgQ2xlYW51cCB0aGUgdGVzdCBkYXRhCisJJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywKKwkJIkRFTEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIChhID4gMikiKTsK Kwkkbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOworfQorCiAjIENy ZWF0ZSBwdWJsaXNoZXIgbm9kZQogbXkgJG5vZGVfcHVibGlzaGVyID0gUG9zdGdyZVNRTDo6VGVz dDo6Q2x1c3Rlci0+bmV3KCdwdWJsaXNoZXInKTsKICRub2RlX3B1Ymxpc2hlci0+aW5pdChhbGxv d3Nfc3RyZWFtaW5nID0+ICdsb2dpY2FsJyk7CkBAIC0zNyw2ICsxMDQsMTAgQEAgJG5vZGVfcHVi bGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKIAkiQ1JFQVRFIFBVQkxJQ0FUSU9OIHRhcF9w dWIgRk9SIFRBQkxFIHRlc3RfdGFiIik7CiAKIG15ICRhcHBuYW1lID0gJ3RhcF9zdWInOworCisj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBUZXN0IHVzaW5nIHN0cmVhbWluZyBt b2RlICdvbicKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAkbm9kZV9zdWJzY3Jp YmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKIAkiQ1JFQVRFIFNVQlNDUklQVElPTiB0YXBfc3Vi IENPTk5FQ1RJT04gJyRwdWJsaXNoZXJfY29ubnN0ciBhcHBsaWNhdGlvbl9uYW1lPSRhcHBuYW1l JyBQVUJMSUNBVElPTiB0YXBfcHViIFdJVEggKHN0cmVhbWluZyA9IG9uKSIKICk7CkBAIC00OSw0 MSArMTIwLDM0IEBAIG15ICRyZXN1bHQgPQogCSJTRUxFQ1QgY291bnQoKiksIGNvdW50KGMpLCBj b3VudChkID0gOTk5KSBGUk9NIHRlc3RfdGFiIik7CiBpcygkcmVzdWx0LCBxcSgyfDJ8MiksICdj aGVjayBpbml0aWFsIGRhdGEgd2FzIGNvcGllZCB0byBzdWJzY3JpYmVyJyk7CiAKLSMgSW5zZXJ0 LCB1cGRhdGUgYW5kIGRlbGV0ZSBzb21lIHJvd3MuCi0kbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgKLQkncG9zdGdyZXMnLCBxewotQkVHSU47Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1Qg aSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDMsIDUpIHMoaSk7Ci1VUERBVEUg dGVzdF90YWIgU0VUIGIgPSBtZDUoYikgV0hFUkUgbW9kKGEsMikgPSAwOwotREVMRVRFIEZST00g dGVzdF90YWIgV0hFUkUgbW9kKGEsMykgPSAwOwotU0FWRVBPSU5UIHMxOwotSU5TRVJUIElOVE8g dGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3Nlcmllcyg2LCA4 KSBzKGkpOwotVVBEQVRFIHRlc3RfdGFiIFNFVCBiID0gbWQ1KGIpIFdIRVJFIG1vZChhLDIpID0g MDsKLURFTEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIG1vZChhLDMpID0gMDsKLVNBVkVQT0lOVCBz MjsKLUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5l cmF0ZV9zZXJpZXMoOSwgMTEpIHMoaSk7Ci1VUERBVEUgdGVzdF90YWIgU0VUIGIgPSBtZDUoYikg V0hFUkUgbW9kKGEsMikgPSAwOwotREVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgbW9kKGEsMykg PSAwOwotU0FWRVBPSU5UIHMzOwotSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShp Ojp0ZXh0KSBGUk9NIGdlbmVyYXRlX3NlcmllcygxMiwgMTQpIHMoaSk7Ci1VUERBVEUgdGVzdF90 YWIgU0VUIGIgPSBtZDUoYikgV0hFUkUgbW9kKGEsMikgPSAwOwotREVMRVRFIEZST00gdGVzdF90 YWIgV0hFUkUgbW9kKGEsMykgPSAwOwotU0FWRVBPSU5UIHM0OwotSU5TRVJUIElOVE8gdGVzdF90 YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3NlcmllcygxNSwgMTcpIHMo aSk7Ci1VUERBVEUgdGVzdF90YWIgU0VUIGIgPSBtZDUoYikgV0hFUkUgbW9kKGEsMikgPSAwOwot REVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgbW9kKGEsMykgPSAwOwotQ09NTUlUOwotfSk7Ci0K LSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7Ci0KLSRyZXN1bHQg PQotICAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiU0VMRUNUIGNv dW50KCopLCBjb3VudChjKSwgY291bnQoZCA9IDk5OSkgRlJPTSB0ZXN0X3RhYiIpOwotaXMoJHJl c3VsdCwgcXEoMTJ8MTJ8MTIpLAotCSdjaGVjayBkYXRhIHdhcyBjb3BpZWQgdG8gc3Vic2NyaWJl ciBpbiBzdHJlYW1pbmcgbW9kZSBhbmQgZXh0cmEgY29sdW1ucyBjb250YWluIGxvY2FsIGRlZmF1 bHRzJwordGVzdF9zdHJlYW1pbmcoJG5vZGVfcHVibGlzaGVyLCAkbm9kZV9zdWJzY3JpYmVyLCAk YXBwbmFtZSwgMCk7CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisj IFRlc3QgdXNpbmcgc3RyZWFtaW5nIG1vZGUgJ3BhcmFsbGVsJworIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMKK215ICRvbGRwaWQgPSAkbm9kZV9wdWJsaXNoZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgcGlkIEZST00gcGdfc3RhdF9yZXBsaWNhdGlvbiBX SEVSRSBhcHBsaWNhdGlvbl9uYW1lID0gJyRhcHBuYW1lJyBBTkQgc3RhdGUgPSAnc3RyZWFtaW5n JzsiCiApOwogCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQUxU RVIgU1VCU0NSSVBUSU9OIHRhcF9zdWIgU0VUKHN0cmVhbWluZyA9IHBhcmFsbGVsKSIpOworCisk bm9kZV9wdWJsaXNoZXItPnBvbGxfcXVlcnlfdW50aWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUIHBp ZCAhPSAkb2xkcGlkIEZST00gcGdfc3RhdF9yZXBsaWNhdGlvbiBXSEVSRSBhcHBsaWNhdGlvbl9u YW1lID0gJyRhcHBuYW1lJyBBTkQgc3RhdGUgPSAnc3RyZWFtaW5nJzsiCisgICkKKyAgb3IgZGll CisgICJUaW1lZCBvdXQgd2hpbGUgd2FpdGluZyBmb3IgYXBwbHkgdG8gcmVzdGFydCBhZnRlciBj aGFuZ2luZyBTVUJTQ1JJUFRJT04iOworCisjIFdlIG5lZWQgdG8gY2hlY2sgREVCVUcgbG9ncyB0 byBlbnN1cmUgdGhhdCB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyIGhhcworIyBhcHBsaWVkIHRo ZSB0cmFuc2FjdGlvbi4gU28sIGJ1bXAgdXAgdGhlIGxvZyB2ZXJib3NpdHkuCiskbm9kZV9zdWJz Y3JpYmVyLT5hcHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25mJywgImxvZ19taW5fbWVzc2FnZXMg PSBkZWJ1ZzEiKTsKKyRub2RlX3N1YnNjcmliZXItPnJlbG9hZDsKKworIyBSdW4gYSBxdWVyeSB0 byBtYWtlIHN1cmUgdGhhdCB0aGUgcmVsb2FkIGhhcyB0YWtlbiBlZmZlY3QuCiskbm9kZV9zdWJz Y3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXtTRUxFQ1QgMX0pOworCit0ZXN0X3N0cmVh bWluZygkbm9kZV9wdWJsaXNoZXIsICRub2RlX3N1YnNjcmliZXIsICRhcHBuYW1lLCAxKTsKKwog JG5vZGVfc3Vic2NyaWJlci0+c3RvcDsKICRub2RlX3B1Ymxpc2hlci0+c3RvcDsKIApkaWZmIC0t Z2l0IGEvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDE3X3N0cmVhbV9kZGwucGwgYi9zcmMvdGVz dC9zdWJzY3JpcHRpb24vdC8wMTdfc3RyZWFtX2RkbC5wbAppbmRleCA4NjZmMTUxMmU0Li5mYjAz YjcwOGI0IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMTdfc3RyZWFtX2Rk bC5wbAorKysgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMTdfc3RyZWFtX2RkbC5wbApAQCAt Miw2ICsyLDkgQEAKICMgQ29weXJpZ2h0IChjKSAyMDIxLTIwMjIsIFBvc3RncmVTUUwgR2xvYmFs IERldmVsb3BtZW50IEdyb3VwCiAKICMgVGVzdCBzdHJlYW1pbmcgb2YgbGFyZ2UgdHJhbnNhY3Rp b24gd2l0aCBEREwgYW5kIHN1YnRyYW5zYWN0aW9ucworIworIyBUaGlzIGZpbGUgaXMgbWFpbmx5 IHRvIHRlc3QgdGhlIERETC9ETUwgaW50ZXJhY3Rpb24gb2YgdGhlIHB1Ymxpc2hlciBzaWRlLAor IyBzbyB3ZSBkaWRuJ3QgYWRkIGEgcGFyYWxsZWwgYXBwbHkgdmVyc2lvbiBmb3IgdGhlIHRlc3Rz IGluIHRoaXMgZmlsZS4KIHVzZSBzdHJpY3Q7CiB1c2Ugd2FybmluZ3M7CiB1c2UgUG9zdGdyZVNR TDo6VGVzdDo6Q2x1c3RlcjsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAx OF9zdHJlYW1fc3VieGFjdF9hYm9ydC5wbCBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAxOF9z dHJlYW1fc3VieGFjdF9hYm9ydC5wbAppbmRleCAxNDU4YzNhMGZjLi4yNDQyODEzMWY3IDEwMDY0 NAotLS0gYS9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMThfc3RyZWFtX3N1YnhhY3RfYWJvcnQu cGwKKysrIGIvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDE4X3N0cmVhbV9zdWJ4YWN0X2Fib3J0 LnBsCkBAIC04LDYgKzgsMTI0IEBAIHVzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwogdXNl IFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOwogdXNlIFRlc3Q6Ok1vcmU7CiAKKyMgQ2hlY2sgdGhh dCB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyIGhhcyBmaW5pc2hlZCBhcHBseWluZyB0aGUgc3Ry ZWFtaW5nCisjIHRyYW5zYWN0aW9uLgorc3ViIGNoZWNrX3BhcmFsbGVsX2xvZworeworCW15ICgk bm9kZV9zdWJzY3JpYmVyLCAkb2Zmc2V0LCAkaXNfcGFyYWxsZWwsICR0eXBlKSA9IEBfOworCisJ aWYgKCRpc19wYXJhbGxlbCkKKwl7CisJCSRub2RlX3N1YnNjcmliZXItPndhaXRfZm9yX2xvZygK KwkJCXFyL0RFQlVHOiAoIFtBLVowLTldKzopPyBmaW5pc2hlZCBwcm9jZXNzaW5nIHRoZSBTVFJF QU0gJHR5cGUgY29tbWFuZC8sCisJCQkkb2Zmc2V0KTsKKwl9Cit9CisKKyMgQ29tbW9uIHRlc3Qg c3RlcHMgZm9yIGJvdGggdGhlIHN0cmVhbWluZz1vbiBhbmQgc3RyZWFtaW5nPXBhcmFsbGVsIGNh c2VzLgorc3ViIHRlc3Rfc3RyZWFtaW5nCit7CisJbXkgKCRub2RlX3B1Ymxpc2hlciwgJG5vZGVf c3Vic2NyaWJlciwgJGFwcG5hbWUsICRpc19wYXJhbGxlbCkgPSBAXzsKKworCW15ICRvZmZzZXQg PSAwOworCisJIyBDaGVjayB0aGUgc3Vic2NyaWJlciBsb2cgZnJvbSBub3cgb24uCisJJG9mZnNl dCA9IC1zICRub2RlX3N1YnNjcmliZXItPmxvZ2ZpbGU7CisKKwkjIHN0cmVhbWVkIHRyYW5zYWN0 aW9uIHdpdGggRERMLCBETUwgYW5kIFJPTExCQUNLcworCSRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKAorCQkncG9zdGdyZXMnLCBxeworCUJFR0lOOworCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFZB TFVFUyAoMywgbWQ1KDM6OnRleHQpKTsKKwlTQVZFUE9JTlQgczE7CisJSU5TRVJUIElOVE8gdGVz dF90YWIgVkFMVUVTICg0LCBtZDUoNDo6dGV4dCkpOworCVNBVkVQT0lOVCBzMjsKKwlJTlNFUlQg SU5UTyB0ZXN0X3RhYiBWQUxVRVMgKDUsIG1kNSg1Ojp0ZXh0KSk7CisJU0FWRVBPSU5UIHMzOwor CUlOU0VSVCBJTlRPIHRlc3RfdGFiIFZBTFVFUyAoNiwgbWQ1KDY6OnRleHQpKTsKKwlST0xMQkFD SyBUTyBzMjsKKwlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBWQUxVRVMgKDcsIG1kNSg3Ojp0ZXh0KSk7 CisJUk9MTEJBQ0sgVE8gczE7CisJSU5TRVJUIElOVE8gdGVzdF90YWIgVkFMVUVTICg4LCBtZDUo ODo6dGV4dCkpOworCVNBVkVQT0lOVCBzNDsKKwlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBWQUxVRVMg KDksIG1kNSg5Ojp0ZXh0KSk7CisJU0FWRVBPSU5UIHM1OworCUlOU0VSVCBJTlRPIHRlc3RfdGFi IFZBTFVFUyAoMTAsIG1kNSgxMDo6dGV4dCkpOworCUNPTU1JVDsKKwl9KTsKKworCSRub2RlX3B1 Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7CisKKwljaGVja19wYXJhbGxlbF9s b2coJG5vZGVfc3Vic2NyaWJlciwgJG9mZnNldCwgJGlzX3BhcmFsbGVsLCAnQ09NTUlUJyk7CisK KwlteSAkcmVzdWx0ID0KKwkgICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LAorCQkiU0VMRUNUIGNvdW50KCopLCBjb3VudChjKSBGUk9NIHRlc3RfdGFiIik7CisJaXMoJHJl c3VsdCwgcXEoNnwwKSwKKwkJJ2NoZWNrIHJvbGxiYWNrIHRvIHNhdmVwb2ludCB3YXMgcmVmbGVj dGVkIG9uIHN1YnNjcmliZXIgYW5kIGV4dHJhIGNvbHVtbnMgY29udGFpbiBsb2NhbCBkZWZhdWx0 cycKKwkpOworCisJIyBDaGVjayB0aGUgc3Vic2NyaWJlciBsb2cgZnJvbSBub3cgb24uCisJJG9m ZnNldCA9IC1zICRub2RlX3N1YnNjcmliZXItPmxvZ2ZpbGU7CisKKwkjIHN0cmVhbWVkIHRyYW5z YWN0aW9uIHdpdGggc3Vic2NyaWJlciByZWNlaXZpbmcgb3V0IG9mIG9yZGVyCisJIyBzdWJ0cmFu c2FjdGlvbiBST0xMQkFDS3MKKwkkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgKKwkJJ3Bvc3Rn cmVzJywgcXsKKwlCRUdJTjsKKwlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBWQUxVRVMgKDExLCBtZDUo MTE6OnRleHQpKTsKKwlTQVZFUE9JTlQgczE7CisJSU5TRVJUIElOVE8gdGVzdF90YWIgVkFMVUVT ICgxMiwgbWQ1KDEyOjp0ZXh0KSk7CisJU0FWRVBPSU5UIHMyOworCUlOU0VSVCBJTlRPIHRlc3Rf dGFiIFZBTFVFUyAoMTMsIG1kNSgxMzo6dGV4dCkpOworCVNBVkVQT0lOVCBzMzsKKwlJTlNFUlQg SU5UTyB0ZXN0X3RhYiBWQUxVRVMgKDE0LCBtZDUoMTQ6OnRleHQpKTsKKwlSRUxFQVNFIHMyOwor CUlOU0VSVCBJTlRPIHRlc3RfdGFiIFZBTFVFUyAoMTUsIG1kNSgxNTo6dGV4dCkpOworCVJPTExC QUNLIFRPIHMxOworCUNPTU1JVDsKKwl9KTsKKworCSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3Jf Y2F0Y2h1cCgkYXBwbmFtZSk7CisKKwljaGVja19wYXJhbGxlbF9sb2coJG5vZGVfc3Vic2NyaWJl ciwgJG9mZnNldCwgJGlzX3BhcmFsbGVsLCAnQ09NTUlUJyk7CisKKwkkcmVzdWx0ID0KKwkgICRu b2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiU0VMRUNUIGNvdW50KCop LCBjb3VudChjKSBGUk9NIHRlc3RfdGFiIik7CisJaXMoJHJlc3VsdCwgcXEoN3wwKSwKKwkJJ2No ZWNrIHJvbGxiYWNrIHRvIHNhdmVwb2ludCB3YXMgcmVmbGVjdGVkIG9uIHN1YnNjcmliZXInKTsK KworCSMgQ2hlY2sgdGhlIHN1YnNjcmliZXIgbG9nIGZyb20gbm93IG9uLgorCSRvZmZzZXQgPSAt cyAkbm9kZV9zdWJzY3JpYmVyLT5sb2dmaWxlOworCisJIyBzdHJlYW1lZCB0cmFuc2FjdGlvbiB3 aXRoIHN1YnNjcmliZXIgcmVjZWl2aW5nIHJvbGxiYWNrCisJJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoCisJCSdwb3N0Z3JlcycsIHF7CisJQkVHSU47CisJSU5TRVJUIElOVE8gdGVzdF90YWIg VkFMVUVTICgxNiwgbWQ1KDE2Ojp0ZXh0KSk7CisJU0FWRVBPSU5UIHMxOworCUlOU0VSVCBJTlRP IHRlc3RfdGFiIFZBTFVFUyAoMTcsIG1kNSgxNzo6dGV4dCkpOworCVNBVkVQT0lOVCBzMjsKKwlJ TlNFUlQgSU5UTyB0ZXN0X3RhYiBWQUxVRVMgKDE4LCBtZDUoMTg6OnRleHQpKTsKKwlST0xMQkFD SzsKKwl9KTsKKworCSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7 CisKKwljaGVja19wYXJhbGxlbF9sb2coJG5vZGVfc3Vic2NyaWJlciwgJG9mZnNldCwgJGlzX3Bh cmFsbGVsLCAnQUJPUlQnKTsKKworCSRyZXN1bHQgPQorCSAgJG5vZGVfc3Vic2NyaWJlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJTRUxFQ1QgY291bnQoKiksIGNvdW50KGMpIEZST00gdGVz dF90YWIiKTsKKwlpcygkcmVzdWx0LCBxcSg3fDApLCAnY2hlY2sgcm9sbGJhY2sgd2FzIHJlZmxl Y3RlZCBvbiBzdWJzY3JpYmVyJyk7CisKKwkjIENsZWFudXAgdGhlIHRlc3QgZGF0YQorCSRub2Rl X3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJERUxFVEUgRlJPTSB0ZXN0X3Rh YiBXSEVSRSAoYSA+IDIpIik7CisJJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRh cHBuYW1lKTsKK30KKwogIyBDcmVhdGUgcHVibGlzaGVyIG5vZGUKIG15ICRub2RlX3B1Ymxpc2hl ciA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygncHVibGlzaGVyJyk7CiAkbm9kZV9w dWJsaXNoZXItPmluaXQoYWxsb3dzX3N0cmVhbWluZyA9PiAnbG9naWNhbCcpOwpAQCAtMzYsNiAr MTU0LDEwIEBAICRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCiAJIkNSRUFU RSBQVUJMSUNBVElPTiB0YXBfcHViIEZPUiBUQUJMRSB0ZXN0X3RhYiIpOwogCiBteSAkYXBwbmFt ZSA9ICd0YXBfc3ViJzsKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgVGVz dCB1c2luZyBzdHJlYW1pbmcgbW9kZSAnb24nCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIwogJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCiAJIkNSRUFURSBT VUJTQ1JJUFRJT04gdGFwX3N1YiBDT05ORUNUSU9OICckcHVibGlzaGVyX2Nvbm5zdHIgYXBwbGlj YXRpb25fbmFtZT0kYXBwbmFtZScgUFVCTElDQVRJT04gdGFwX3B1YiBXSVRIIChzdHJlYW1pbmcg PSBvbikiCiApOwpAQCAtNDgsODEgKzE3MCwzMyBAQCBteSAkcmVzdWx0ID0KIAkiU0VMRUNUIGNv dW50KCopLCBjb3VudChjKSBGUk9NIHRlc3RfdGFiIik7CiBpcygkcmVzdWx0LCBxcSgyfDApLCAn Y2hlY2sgaW5pdGlhbCBkYXRhIHdhcyBjb3BpZWQgdG8gc3Vic2NyaWJlcicpOwogCi0jIHN0cmVh bWVkIHRyYW5zYWN0aW9uIHdpdGggRERMLCBETUwgYW5kIFJPTExCQUNLcwotJG5vZGVfcHVibGlz aGVyLT5zYWZlX3BzcWwoCi0JJ3Bvc3RncmVzJywgcXsKLUJFR0lOOwotSU5TRVJUIElOVE8gdGVz dF90YWIgVkFMVUVTICgzLCBtZDUoMzo6dGV4dCkpOwotU0FWRVBPSU5UIHMxOwotSU5TRVJUIElO VE8gdGVzdF90YWIgVkFMVUVTICg0LCBtZDUoNDo6dGV4dCkpOwotU0FWRVBPSU5UIHMyOwotSU5T RVJUIElOVE8gdGVzdF90YWIgVkFMVUVTICg1LCBtZDUoNTo6dGV4dCkpOwotU0FWRVBPSU5UIHMz OwotSU5TRVJUIElOVE8gdGVzdF90YWIgVkFMVUVTICg2LCBtZDUoNjo6dGV4dCkpOwotUk9MTEJB Q0sgVE8gczI7Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBWQUxVRVMgKDcsIG1kNSg3Ojp0ZXh0KSk7 Ci1ST0xMQkFDSyBUTyBzMTsKLUlOU0VSVCBJTlRPIHRlc3RfdGFiIFZBTFVFUyAoOCwgbWQ1KDg6 OnRleHQpKTsKLVNBVkVQT0lOVCBzNDsKLUlOU0VSVCBJTlRPIHRlc3RfdGFiIFZBTFVFUyAoOSwg bWQ1KDk6OnRleHQpKTsKLVNBVkVQT0lOVCBzNTsKLUlOU0VSVCBJTlRPIHRlc3RfdGFiIFZBTFVF UyAoMTAsIG1kNSgxMDo6dGV4dCkpOwotQ09NTUlUOwotfSk7Ci0KLSRub2RlX3B1Ymxpc2hlci0+ d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7Ci0KLSRyZXN1bHQgPQotICAkbm9kZV9zdWJzY3Jp YmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiU0VMRUNUIGNvdW50KCopLCBjb3VudChjKSBG Uk9NIHRlc3RfdGFiIik7Ci1pcygkcmVzdWx0LCBxcSg2fDApLAotCSdjaGVjayByb2xsYmFjayB0 byBzYXZlcG9pbnQgd2FzIHJlZmxlY3RlZCBvbiBzdWJzY3JpYmVyIGFuZCBleHRyYSBjb2x1bW5z IGNvbnRhaW4gbG9jYWwgZGVmYXVsdHMnCit0ZXN0X3N0cmVhbWluZygkbm9kZV9wdWJsaXNoZXIs ICRub2RlX3N1YnNjcmliZXIsICRhcHBuYW1lLCAwKTsKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMKKyMgVGVzdCB1c2luZyBzdHJlYW1pbmcgbW9kZSAncGFyYWxsZWwn CisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworbXkgJG9sZHBpZCA9ICRu b2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCBwaWQgRlJPTSBw Z19zdGF0X3JlcGxpY2F0aW9uIFdIRVJFIGFwcGxpY2F0aW9uX25hbWUgPSAnJGFwcG5hbWUnIEFO RCBzdGF0ZSA9ICdzdHJlYW1pbmcnOyIKICk7CiAKLSMgc3RyZWFtZWQgdHJhbnNhY3Rpb24gd2l0 aCBzdWJzY3JpYmVyIHJlY2VpdmluZyBvdXQgb2Ygb3JkZXIgc3VidHJhbnNhY3Rpb24KLSMgUk9M TEJBQ0tzCi0kbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgKLQkncG9zdGdyZXMnLCBxewotQkVH SU47Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBWQUxVRVMgKDExLCBtZDUoMTE6OnRleHQpKTsKLVNB VkVQT0lOVCBzMTsKLUlOU0VSVCBJTlRPIHRlc3RfdGFiIFZBTFVFUyAoMTIsIG1kNSgxMjo6dGV4 dCkpOwotU0FWRVBPSU5UIHMyOwotSU5TRVJUIElOVE8gdGVzdF90YWIgVkFMVUVTICgxMywgbWQ1 KDEzOjp0ZXh0KSk7Ci1TQVZFUE9JTlQgczM7Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBWQUxVRVMg KDE0LCBtZDUoMTQ6OnRleHQpKTsKLVJFTEVBU0UgczI7Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBW QUxVRVMgKDE1LCBtZDUoMTU6OnRleHQpKTsKLVJPTExCQUNLIFRPIHMxOwotQ09NTUlUOwotfSk7 Ci0KLSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7Ci0KLSRyZXN1 bHQgPQotICAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiU0VMRUNU IGNvdW50KCopLCBjb3VudChjKSBGUk9NIHRlc3RfdGFiIik7Ci1pcygkcmVzdWx0LCBxcSg3fDAp LAotCSdjaGVjayByb2xsYmFjayB0byBzYXZlcG9pbnQgd2FzIHJlZmxlY3RlZCBvbiBzdWJzY3Jp YmVyJyk7Ci0KLSMgc3RyZWFtZWQgdHJhbnNhY3Rpb24gd2l0aCBzdWJzY3JpYmVyIHJlY2Vpdmlu ZyByb2xsYmFjawotJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCi0JJ3Bvc3RncmVzJywgcXsK LUJFR0lOOwotSU5TRVJUIElOVE8gdGVzdF90YWIgVkFMVUVTICgxNiwgbWQ1KDE2Ojp0ZXh0KSk7 Ci1TQVZFUE9JTlQgczE7Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBWQUxVRVMgKDE3LCBtZDUoMTc6 OnRleHQpKTsKLVNBVkVQT0lOVCBzMjsKLUlOU0VSVCBJTlRPIHRlc3RfdGFiIFZBTFVFUyAoMTgs IG1kNSgxODo6dGV4dCkpOwotUk9MTEJBQ0s7Ci19KTsKLQotJG5vZGVfcHVibGlzaGVyLT53YWl0 X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKLQotJHJlc3VsdCA9Ci0gICRub2RlX3N1YnNjcmliZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJTRUxFQ1QgY291bnQoKiksIGNvdW50KGMpIEZST00g dGVzdF90YWIiKTsKLWlzKCRyZXN1bHQsIHFxKDd8MCksICdjaGVjayByb2xsYmFjayB3YXMgcmVm bGVjdGVkIG9uIHN1YnNjcmliZXInKTsKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLAorCSJBTFRFUiBTVUJTQ1JJUFRJT04gdGFwX3N1YiBTRVQoc3RyZWFtaW5nID0gcGFy YWxsZWwpIik7CisKKyRub2RlX3B1Ymxpc2hlci0+cG9sbF9xdWVyeV91bnRpbCgncG9zdGdyZXMn LAorCSJTRUxFQ1QgcGlkICE9ICRvbGRwaWQgRlJPTSBwZ19zdGF0X3JlcGxpY2F0aW9uIFdIRVJF IGFwcGxpY2F0aW9uX25hbWUgPSAnJGFwcG5hbWUnIEFORCBzdGF0ZSA9ICdzdHJlYW1pbmcnOyIK KyAgKQorICBvciBkaWUKKyAgIlRpbWVkIG91dCB3aGlsZSB3YWl0aW5nIGZvciBhcHBseSB0byBy ZXN0YXJ0IGFmdGVyIGNoYW5naW5nIFNVQlNDUklQVElPTiI7CisKKyMgV2UgbmVlZCB0byBjaGVj ayBERUJVRyBsb2dzIHRvIGVuc3VyZSB0aGF0IHRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgaGFz CisjIGFwcGxpZWQgdGhlIHRyYW5zYWN0aW9uLiBTbywgYnVtcCB1cCB0aGUgbG9nIHZlcmJvc2l0 eS4KKyRub2RlX3N1YnNjcmliZXItPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLCAibG9n X21pbl9tZXNzYWdlcyA9IGRlYnVnMSIpOworJG5vZGVfc3Vic2NyaWJlci0+cmVsb2FkOworCisj IFJ1biBhIHF1ZXJ5IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSByZWxvYWQgaGFzIHRha2VuIGVmZmVj dC4KKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxe1NFTEVDVCAxfSk7 CisKK3Rlc3Rfc3RyZWFtaW5nKCRub2RlX3B1Ymxpc2hlciwgJG5vZGVfc3Vic2NyaWJlciwgJGFw cG5hbWUsIDEpOwogCiAkbm9kZV9zdWJzY3JpYmVyLT5zdG9wOwogJG5vZGVfcHVibGlzaGVyLT5z dG9wOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDE5X3N0cmVhbV9zdWJ4 YWN0X2RkbF9hYm9ydC5wbCBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAxOV9zdHJlYW1fc3Vi eGFjdF9kZGxfYWJvcnQucGwKaW5kZXggYzY3MTljMWFmOC4uMzUzZTgyNmE5MyAxMDA2NDQKLS0t IGEvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDE5X3N0cmVhbV9zdWJ4YWN0X2RkbF9hYm9ydC5w bAorKysgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMTlfc3RyZWFtX3N1YnhhY3RfZGRsX2Fi b3J0LnBsCkBAIC0zLDYgKzMsOSBAQAogCiAjIFRlc3Qgc3RyZWFtaW5nIG9mIHRyYW5zYWN0aW9u IHdpdGggc3VidHJhbnNhY3Rpb25zLCBERExzLCBETUxzLCBhbmQKICMgcm9sbGJhY2tzCisjCisj IFRoaXMgZmlsZSBpcyBtYWlubHkgdG8gdGVzdCB0aGUgRERML0RNTCBpbnRlcmFjdGlvbiBvZiB0 aGUgcHVibGlzaGVyIHNpZGUsCisjIHNvIHdlIGRpZG4ndCBhZGQgYSBwYXJhbGxlbCBhcHBseSB2 ZXJzaW9uIGZvciB0aGUgdGVzdHMgaW4gdGhpcyBmaWxlLgogdXNlIHN0cmljdDsKIHVzZSB3YXJu aW5nczsKIHVzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwpkaWZmIC0tZ2l0IGEvc3JjL3Rl c3Qvc3Vic2NyaXB0aW9uL3QvMDIyX3R3b3BoYXNlX2Nhc2NhZGUucGwgYi9zcmMvdGVzdC9zdWJz Y3JpcHRpb24vdC8wMjJfdHdvcGhhc2VfY2FzY2FkZS5wbAppbmRleCA3YTc5N2YzN2JhLi40MTAy YWNjZTkyIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMjJfdHdvcGhhc2Vf Y2FzY2FkZS5wbAorKysgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMjJfdHdvcGhhc2VfY2Fz Y2FkZS5wbApAQCAtNSw2ICs1LDggQEAKICMKICMgSW5jbHVkZXMgdGVzdHMgZm9yIG9wdGlvbnMg MlBDIChub3Qtc3RyZWFtaW5nKSBhbmQgYWxzbyBmb3IgMlBDIChzdHJlYW1pbmcpLgogIworIyBU d28tcGhhc2UgYW5kIHBhcmFsbGVsIGFwcGx5IHdpbGwgYmUgdGVzdGVkIGluIDAyM190d29waGFz ZV9zdHJlYW0sIHNvIHdlCisjIGRpZG4ndCBhZGQgYSBwYXJhbGxlbCBhcHBseSB2ZXJzaW9uIGZv ciB0aGUgdGVzdHMgaW4gdGhpcyBmaWxlLgogdXNlIHN0cmljdDsKIHVzZSB3YXJuaW5nczsKIHVz ZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qvc3Vic2Ny aXB0aW9uL3QvMDIzX3R3b3BoYXNlX3N0cmVhbS5wbCBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90 LzAyM190d29waGFzZV9zdHJlYW0ucGwKaW5kZXggYTE5MTEyOWI5ZC4uZDU2ZjJiN2MzZSAxMDA2 NDQKLS0tIGEvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDIzX3R3b3BoYXNlX3N0cmVhbS5wbAor KysgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMjNfdHdvcGhhc2Vfc3RyZWFtLnBsCkBAIC04 LDYgKzgsMjg3IEBAIHVzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwogdXNlIFBvc3RncmVT UUw6OlRlc3Q6OlV0aWxzOwogdXNlIFRlc3Q6Ok1vcmU7CiAKKyMgQ2hlY2sgdGhhdCB0aGUgcGFy YWxsZWwgYXBwbHkgd29ya2VyIGhhcyBmaW5pc2hlZCBhcHBseWluZyB0aGUgc3RyZWFtaW5nCisj IHRyYW5zYWN0aW9uLgorc3ViIGNoZWNrX3BhcmFsbGVsX2xvZworeworCW15ICgkbm9kZV9zdWJz Y3JpYmVyLCAkb2Zmc2V0LCAkaXNfcGFyYWxsZWwsICR0eXBlKSA9IEBfOworCisJaWYgKCRpc19w YXJhbGxlbCkKKwl7CisJCSRub2RlX3N1YnNjcmliZXItPndhaXRfZm9yX2xvZygKKwkJCXFyL0RF QlVHOiAoIFtBLVowLTldKzopPyBmaW5pc2hlZCBwcm9jZXNzaW5nIHRoZSBTVFJFQU0gJHR5cGUg Y29tbWFuZC8sCisJCQkkb2Zmc2V0KTsKKwl9Cit9CisKKyMgQ29tbW9uIHRlc3Qgc3RlcHMgZm9y IGJvdGggdGhlIHN0cmVhbWluZz1vbiBhbmQgc3RyZWFtaW5nPXBhcmFsbGVsIGNhc2VzLgorc3Vi IHRlc3Rfc3RyZWFtaW5nCit7CisJbXkgKCRub2RlX3B1Ymxpc2hlciwgJG5vZGVfc3Vic2NyaWJl ciwgJGFwcG5hbWUsICRpc19wYXJhbGxlbCkgPSBAXzsKKworCW15ICRvZmZzZXQgPSAwOworCisJ IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCSMgVGVzdCAyUEMgUFJFUEFSRSAvIENP TU1JVCBQUkVQQVJFRC4KKwkjIDEuIERhdGEgaXMgc3RyZWFtZWQgYXMgYSAyUEMgdHJhbnNhY3Rp b24uCisJIyAyLiBUaGVuIGRvIGNvbW1pdCBwcmVwYXJlZC4KKwkjCisJIyBFeHBlY3QgYWxsIGRh dGEgaXMgcmVwbGljYXRlZCBvbiBzdWJzY3JpYmVyIHNpZGUgYWZ0ZXIgdGhlIGNvbW1pdC4KKwkj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwkjIENoZWNrIHRoZSBzdWJzY3JpYmVy IGxvZyBmcm9tIG5vdyBvbi4KKwkkb2Zmc2V0ID0gLXMgJG5vZGVfc3Vic2NyaWJlci0+bG9nZmls ZTsKKworCSMgY2hlY2sgdGhhdCAyUEMgZ2V0cyByZXBsaWNhdGVkIHRvIHN1YnNjcmliZXIKKwkj IEluc2VydCwgdXBkYXRlIGFuZCBkZWxldGUgc29tZSByb3dzLgorCSRub2RlX3B1Ymxpc2hlci0+ c2FmZV9wc3FsKAorCQkncG9zdGdyZXMnLCBxeworCQlCRUdJTjsKKwkJSU5TRVJUIElOVE8gdGVz dF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3NlcmllcygzLCA1KSBz KGkpOworCQlVUERBVEUgdGVzdF90YWIgU0VUIGIgPSBtZDUoYikgV0hFUkUgbW9kKGEsMikgPSAw OworCQlERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBtb2QoYSwzKSA9IDA7CisJCVBSRVBBUkUg VFJBTlNBQ1RJT04gJ3Rlc3RfcHJlcGFyZWRfdGFiJzt9KTsKKworCSRub2RlX3B1Ymxpc2hlci0+ d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7CisKKwljaGVja19wYXJhbGxlbF9sb2coJG5vZGVf c3Vic2NyaWJlciwgJG9mZnNldCwgJGlzX3BhcmFsbGVsLCAnUFJFUEFSRScpOworCisJIyBjaGVj ayB0aGF0IHRyYW5zYWN0aW9uIGlzIGluIHByZXBhcmVkIHN0YXRlIG9uIHN1YnNjcmliZXIKKwlt eSAkcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJT RUxFQ1QgY291bnQoKikgRlJPTSBwZ19wcmVwYXJlZF94YWN0czsiKTsKKwlpcygkcmVzdWx0LCBx cSgxKSwgJ3RyYW5zYWN0aW9uIGlzIHByZXBhcmVkIG9uIHN1YnNjcmliZXInKTsKKworCSMgMlBD IHRyYW5zYWN0aW9uIGdldHMgY29tbWl0dGVkCisJJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywKKwkJIkNPTU1JVCBQUkVQQVJFRCAndGVzdF9wcmVwYXJlZF90YWInOyIpOwor CisJJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKKworCSMgY2hl Y2sgdGhhdCB0cmFuc2FjdGlvbiBpcyBjb21taXR0ZWQgb24gc3Vic2NyaWJlcgorCSRyZXN1bHQg PSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIlNFTEVDVCBjb3Vu dCgqKSwgY291bnQoYyksIGNvdW50KGQgPSA5OTkpIEZST00gdGVzdF90YWIiKTsKKwlpcygkcmVz dWx0LCBxcSg0fDR8NCksCisJCSdSb3dzIGluc2VydGVkIGJ5IDJQQyBoYXZlIGNvbW1pdHRlZCBv biBzdWJzY3JpYmVyLCBhbmQgZXh0cmEgY29sdW1ucyBjb250YWluIGxvY2FsIGRlZmF1bHRzJwor CSk7CisJJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAor CQkiU0VMRUNUIGNvdW50KCopIEZST00gcGdfcHJlcGFyZWRfeGFjdHM7Iik7CisJaXMoJHJlc3Vs dCwgcXEoMCksICd0cmFuc2FjdGlvbiBpcyBjb21taXR0ZWQgb24gc3Vic2NyaWJlcicpOworCisJ IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCSMgVGVzdCAyUEMgUFJFUEFSRSAvIFJP TExCQUNLIFBSRVBBUkVELgorCSMgMS4gVGFibGUgaXMgZGVsZXRlZCBiYWNrIHRvIDIgcm93cyB3 aGljaCBhcmUgcmVwbGljYXRlZCBvbiBzdWJzY3JpYmVyLgorCSMgMi4gRGF0YSBpcyBzdHJlYW1l ZCB1c2luZyAyUEMuCisJIyAzLiBEbyByb2xsYmFjayBwcmVwYXJlZC4KKwkjCisJIyBFeHBlY3Qg ZGF0YSByb2xscyBiYWNrIGxlYXZpbmcgb25seSB0aGUgb3JpZ2luYWwgMiByb3dzLgorCSMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCSMgRmlyc3QsIGRlbGV0ZSB0aGUgZGF0YSBl eGNlcHQgZm9yIDIgcm93cyAod2lsbCBiZSByZXBsaWNhdGVkKQorCSRub2RlX3B1Ymxpc2hlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBhID4g MjsiKTsKKworCSMgQ2hlY2sgdGhlIHN1YnNjcmliZXIgbG9nIGZyb20gbm93IG9uLgorCSRvZmZz ZXQgPSAtcyAkbm9kZV9zdWJzY3JpYmVyLT5sb2dmaWxlOworCisJIyBUaGVuIGluc2VydCwgdXBk YXRlIGFuZCBkZWxldGUgc29tZSByb3dzLgorCSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAor CQkncG9zdGdyZXMnLCBxeworCQlCRUdJTjsKKwkJSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNU IGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3NlcmllcygzLCA1KSBzKGkpOworCQlVUERB VEUgdGVzdF90YWIgU0VUIGIgPSBtZDUoYikgV0hFUkUgbW9kKGEsMikgPSAwOworCQlERUxFVEUg RlJPTSB0ZXN0X3RhYiBXSEVSRSBtb2QoYSwzKSA9IDA7CisJCVBSRVBBUkUgVFJBTlNBQ1RJT04g J3Rlc3RfcHJlcGFyZWRfdGFiJzt9KTsKKworCSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0 Y2h1cCgkYXBwbmFtZSk7CisKKwljaGVja19wYXJhbGxlbF9sb2coJG5vZGVfc3Vic2NyaWJlciwg JG9mZnNldCwgJGlzX3BhcmFsbGVsLCAnUFJFUEFSRScpOworCisJIyBjaGVjayB0aGF0IHRyYW5z YWN0aW9uIGlzIGluIHByZXBhcmVkIHN0YXRlIG9uIHN1YnNjcmliZXIKKwkkcmVzdWx0ID0gJG5v ZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJTRUxFQ1QgY291bnQoKikg RlJPTSBwZ19wcmVwYXJlZF94YWN0czsiKTsKKwlpcygkcmVzdWx0LCBxcSgxKSwgJ3RyYW5zYWN0 aW9uIGlzIHByZXBhcmVkIG9uIHN1YnNjcmliZXInKTsKKworCSMgMlBDIHRyYW5zYWN0aW9uIGdl dHMgYWJvcnRlZAorCSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJS T0xMQkFDSyBQUkVQQVJFRCAndGVzdF9wcmVwYXJlZF90YWInOyIpOworCisJJG5vZGVfcHVibGlz aGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKKworCSMgY2hlY2sgdGhhdCB0cmFuc2Fj dGlvbiBpcyBhYm9ydGVkIG9uIHN1YnNjcmliZXIKKwkkcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJTRUxFQ1QgY291bnQoKiksIGNvdW50KGMpLCBj b3VudChkID0gOTk5KSBGUk9NIHRlc3RfdGFiIik7CisJaXMoJHJlc3VsdCwgcXEoMnwyfDIpLAor CQknUm93cyBpbnNlcnRlZCBieSAyUEMgYXJlIHJvbGxlZCBiYWNrLCBsZWF2aW5nIG9ubHkgdGhl IG9yaWdpbmFsIDIgcm93cycKKwkpOworCisJJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiU0VMRUNUIGNvdW50KCopIEZST00gcGdfcHJlcGFyZWRf eGFjdHM7Iik7CisJaXMoJHJlc3VsdCwgcXEoMCksICd0cmFuc2FjdGlvbiBpcyBhYm9ydGVkIG9u IHN1YnNjcmliZXInKTsKKworCSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwkjIENo ZWNrIHRoYXQgMlBDIENPTU1JVCBQUkVQQVJFRCBpcyBkZWNvZGVkIHByb3Blcmx5IG9uIGNyYXNo IHJlc3RhcnQuCisJIyAxLiBpbnNlcnQsIHVwZGF0ZSBhbmQgZGVsZXRlIHNvbWUgcm93cy4KKwkj IDIuIFRoZW4gc2VydmVyIGNyYXNoZXMgYmVmb3JlIHRoZSAyUEMgdHJhbnNhY3Rpb24gaXMgY29t bWl0dGVkLgorCSMgMy4gQWZ0ZXIgc2VydmVycyBhcmUgcmVzdGFydGVkIHRoZSBwZW5kaW5nIHRy YW5zYWN0aW9uIGlzIGNvbW1pdHRlZC4KKwkjCisJIyBFeHBlY3QgYWxsIGRhdGEgaXMgcmVwbGlj YXRlZCBvbiBzdWJzY3JpYmVyIHNpZGUgYWZ0ZXIgdGhlIGNvbW1pdC4KKwkjIE5vdGU6IGJvdGgg cHVibGlzaGVyIGFuZCBzdWJzY3JpYmVyIGRvIGNyYXNoL3Jlc3RhcnQuCisJIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIworCisJIyBDaGVjayB0aGUgc3Vic2NyaWJlciBsb2cgZnJvbSBu b3cgb24uCisJJG9mZnNldCA9IC1zICRub2RlX3N1YnNjcmliZXItPmxvZ2ZpbGU7CisKKwkkbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgKKwkJJ3Bvc3RncmVzJywgcXsKKwkJQkVHSU47CisJCUlO U0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9z ZXJpZXMoMywgNSkgcyhpKTsKKwkJVVBEQVRFIHRlc3RfdGFiIFNFVCBiID0gbWQ1KGIpIFdIRVJF IG1vZChhLDIpID0gMDsKKwkJREVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgbW9kKGEsMykgPSAw OworCQlQUkVQQVJFIFRSQU5TQUNUSU9OICd0ZXN0X3ByZXBhcmVkX3RhYic7fSk7CisKKwkkbm9k ZV9zdWJzY3JpYmVyLT5zdG9wKCdpbW1lZGlhdGUnKTsKKwkkbm9kZV9wdWJsaXNoZXItPnN0b3Ao J2ltbWVkaWF0ZScpOworCisJJG5vZGVfcHVibGlzaGVyLT5zdGFydDsKKwkkbm9kZV9zdWJzY3Jp YmVyLT5zdGFydDsKKworCWNoZWNrX3BhcmFsbGVsX2xvZygkbm9kZV9zdWJzY3JpYmVyLCAkb2Zm c2V0LCAkaXNfcGFyYWxsZWwsICdQUkVQQVJFJyk7CisKKwkjIGNvbW1pdCBwb3N0IHRoZSByZXN0 YXJ0CisJJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIkNPTU1JVCBQ UkVQQVJFRCAndGVzdF9wcmVwYXJlZF90YWInOyIpOworCSRub2RlX3B1Ymxpc2hlci0+d2FpdF9m b3JfY2F0Y2h1cCgkYXBwbmFtZSk7CisKKwkjIGNoZWNrIGluc2VydHMgYXJlIHZpc2libGUKKwkk cmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJTRUxF Q1QgY291bnQoKiksIGNvdW50KGMpLCBjb3VudChkID0gOTk5KSBGUk9NIHRlc3RfdGFiIik7CisJ aXMoJHJlc3VsdCwgcXEoNHw0fDQpLAorCQknUm93cyBpbnNlcnRlZCBieSAyUEMgaGF2ZSBjb21t aXR0ZWQgb24gc3Vic2NyaWJlciwgYW5kIGV4dHJhIGNvbHVtbnMgY29udGFpbiBsb2NhbCBkZWZh dWx0cycKKwkpOworCisJIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCSMgRG8gSU5T RVJUIGFmdGVyIHRoZSBQUkVQQVJFIGJ1dCBiZWZvcmUgUk9MTEJBQ0sgUFJFUEFSRUQuCisJIyAx LiBUYWJsZSBpcyBkZWxldGVkIGJhY2sgdG8gMiByb3dzIHdoaWNoIGFyZSByZXBsaWNhdGVkIG9u IHN1YnNjcmliZXIuCisJIyAyLiBEYXRhIGlzIHN0cmVhbWVkIHVzaW5nIDJQQy4KKwkjIDMuIEEg c2luZ2xlIHJvdyBJTlNFUlQgaXMgZG9uZSB3aGljaCBpcyBhZnRlciB0aGUgUFJFUEFSRS4KKwkj IDQuIFRoZW4gZG8gYSBST0xMQkFDSyBQUkVQQVJFRC4KKwkjCisJIyBFeHBlY3QgdGhlIDJQQyBk YXRhIHJvbGxzIGJhY2sgbGVhdmluZyBvbmx5IDMgcm93cyBvbiB0aGUgc3Vic2NyaWJlcgorCSMg KHRoZSBvcmlnaW5hbCAyICsgaW5zZXJ0ZWQgMSkuCisJIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIworCisJIyBGaXJzdCwgZGVsZXRlIHRoZSBkYXRhIGV4Y2VwdCBmb3IgMiByb3dzICh3 aWxsIGJlIHJlcGxpY2F0ZWQpCisJJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywKKwkJIkRFTEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIGEgPiAyOyIpOworCisJIyBDaGVjayB0 aGUgc3Vic2NyaWJlciBsb2cgZnJvbSBub3cgb24uCisJJG9mZnNldCA9IC1zICRub2RlX3N1YnNj cmliZXItPmxvZ2ZpbGU7CisKKwkjIFRoZW4gaW5zZXJ0LCB1cGRhdGUgYW5kIGRlbGV0ZSBzb21l IHJvd3MuCisJJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCisJCSdwb3N0Z3JlcycsIHF7CisJ CUJFR0lOOworCQlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZS T00gZ2VuZXJhdGVfc2VyaWVzKDMsIDUpIHMoaSk7CisJCVVQREFURSB0ZXN0X3RhYiBTRVQgYiA9 IG1kNShiKSBXSEVSRSBtb2QoYSwyKSA9IDA7CisJCURFTEVURSBGUk9NIHRlc3RfdGFiIFdIRVJF IG1vZChhLDMpID0gMDsKKwkJUFJFUEFSRSBUUkFOU0FDVElPTiAndGVzdF9wcmVwYXJlZF90YWIn O30pOworCisJJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKKwor CWNoZWNrX3BhcmFsbGVsX2xvZygkbm9kZV9zdWJzY3JpYmVyLCAkb2Zmc2V0LCAkaXNfcGFyYWxs ZWwsICdQUkVQQVJFJyk7CisKKwkjIGNoZWNrIHRoYXQgdHJhbnNhY3Rpb24gaXMgaW4gcHJlcGFy ZWQgc3RhdGUgb24gc3Vic2NyaWJlcgorCSRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywKKwkJIlNFTEVDVCBjb3VudCgqKSBGUk9NIHBnX3ByZXBhcmVkX3hh Y3RzOyIpOworCWlzKCRyZXN1bHQsIHFxKDEpLCAndHJhbnNhY3Rpb24gaXMgcHJlcGFyZWQgb24g c3Vic2NyaWJlcicpOworCisJIyBJbnNlcnQgYSBkaWZmZXJlbnQgcmVjb3JkIChub3cgd2UgYXJl IG91dHNpZGUgb2YgdGhlIDJQQyB0cmFuc2FjdGlvbikKKwkjIE5vdGU6IHRoZSAyUEMgdHJhbnNh Y3Rpb24gc3RpbGwgaG9sZHMgcm93IGxvY2tzIHNvIG1ha2Ugc3VyZSB0aGlzIGluc2VydCBpcyBm b3IgYSBzZXBhcmF0ZSBwcmltYXJ5IGtleQorCSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsCisJCSJJTlNFUlQgSU5UTyB0ZXN0X3RhYiBWQUxVRVMgKDk5OTk5LCAnZm9vYmFy JykiKTsKKworCSMgMlBDIHRyYW5zYWN0aW9uIGdldHMgYWJvcnRlZAorCSRub2RlX3B1Ymxpc2hl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJST0xMQkFDSyBQUkVQQVJFRCAndGVzdF9wcmVw YXJlZF90YWInOyIpOworCisJJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBu YW1lKTsKKworCSMgY2hlY2sgdGhhdCB0cmFuc2FjdGlvbiBpcyBhYm9ydGVkIG9uIHN1YnNjcmli ZXIsCisJIyBidXQgdGhlIGV4dHJhIElOU0VSVCBvdXRzaWRlIG9mIHRoZSAyUEMgc3RpbGwgd2Fz IHJlcGxpY2F0ZWQKKwkkcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsCisJCSJTRUxFQ1QgY291bnQoKiksIGNvdW50KGMpLCBjb3VudChkID0gOTk5KSBGUk9N IHRlc3RfdGFiIik7CisJaXMoJHJlc3VsdCwgcXEoM3wzfDMpLAorCQknY2hlY2sgdGhlIG91dHNp ZGUgaW5zZXJ0IHdhcyBjb3BpZWQgdG8gc3Vic2NyaWJlcicpOworCisJJHJlc3VsdCA9ICRub2Rl X3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiU0VMRUNUIGNvdW50KCopIEZS T00gcGdfcHJlcGFyZWRfeGFjdHM7Iik7CisJaXMoJHJlc3VsdCwgcXEoMCksICd0cmFuc2FjdGlv biBpcyBhYm9ydGVkIG9uIHN1YnNjcmliZXInKTsKKworCSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMKKwkjIERvIElOU0VSVCBhZnRlciB0aGUgUFJFUEFSRSBidXQgYmVmb3JlIENPTU1J VCBQUkVQQVJFRC4KKwkjIDEuIFRhYmxlIGlzIGRlbGV0ZWQgYmFjayB0byAyIHJvd3Mgd2hpY2gg YXJlIHJlcGxpY2F0ZWQgb24gc3Vic2NyaWJlci4KKwkjIDIuIERhdGEgaXMgc3RyZWFtZWQgdXNp bmcgMlBDLgorCSMgMy4gQSBzaW5nbGUgcm93IElOU0VSVCBpcyBkb25lIHdoaWNoIGlzIGFmdGVy IHRoZSBQUkVQQVJFLgorCSMgNC4gVGhlbiBkbyBhIENPTU1JVCBQUkVQQVJFRC4KKwkjCisJIyBF eHBlY3QgMlBDIGRhdGEgKyB0aGUgZXh0cmEgcm93IGFyZSBvbiB0aGUgc3Vic2NyaWJlcgorCSMg KHRoZSAzMzM0ICsgaW5zZXJ0ZWQgMSA9IDMzMzUpLgorCSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMKKworCSMgRmlyc3QsIGRlbGV0ZSB0aGUgZGF0YSBleGNlcHQgZm9yIDIgcm93cyAo d2lsbCBiZSByZXBsaWNhdGVkKQorCSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsCisJCSJERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBhID4gMjsiKTsKKworCSMgQ2hlY2sg dGhlIHN1YnNjcmliZXIgbG9nIGZyb20gbm93IG9uLgorCSRvZmZzZXQgPSAtcyAkbm9kZV9zdWJz Y3JpYmVyLT5sb2dmaWxlOworCisJIyBUaGVuIGluc2VydCwgdXBkYXRlIGFuZCBkZWxldGUgc29t ZSByb3dzLgorCSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAorCQkncG9zdGdyZXMnLCBxewor CQlCRUdJTjsKKwkJSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBG Uk9NIGdlbmVyYXRlX3NlcmllcygzLCA1KSBzKGkpOworCQlVUERBVEUgdGVzdF90YWIgU0VUIGIg PSBtZDUoYikgV0hFUkUgbW9kKGEsMikgPSAwOworCQlERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVS RSBtb2QoYSwzKSA9IDA7CisJCVBSRVBBUkUgVFJBTlNBQ1RJT04gJ3Rlc3RfcHJlcGFyZWRfdGFi Jzt9KTsKKworCSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7CisK KwljaGVja19wYXJhbGxlbF9sb2coJG5vZGVfc3Vic2NyaWJlciwgJG9mZnNldCwgJGlzX3BhcmFs bGVsLCAnUFJFUEFSRScpOworCisJIyBjaGVjayB0aGF0IHRyYW5zYWN0aW9uIGlzIGluIHByZXBh cmVkIHN0YXRlIG9uIHN1YnNjcmliZXIKKwkkcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJTRUxFQ1QgY291bnQoKikgRlJPTSBwZ19wcmVwYXJlZF94 YWN0czsiKTsKKwlpcygkcmVzdWx0LCBxcSgxKSwgJ3RyYW5zYWN0aW9uIGlzIHByZXBhcmVkIG9u IHN1YnNjcmliZXInKTsKKworCSMgSW5zZXJ0IGEgZGlmZmVyZW50IHJlY29yZCAobm93IHdlIGFy ZSBvdXRzaWRlIG9mIHRoZSAyUEMgdHJhbnNhY3Rpb24pCisJIyBOb3RlOiB0aGUgMlBDIHRyYW5z YWN0aW9uIHN0aWxsIGhvbGRzIHJvdyBsb2NrcyBzbyBtYWtlIHN1cmUgdGhpcyBpbnNlcnQgaXMg Zm9yIGEgc2VwYXJhcmUgcHJpbWFyeSBrZXkKKwkkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLAorCQkiSU5TRVJUIElOVE8gdGVzdF90YWIgVkFMVUVTICg5OTk5OSwgJ2Zvb2Jh cicpIik7CisKKwkjIDJQQyB0cmFuc2FjdGlvbiBnZXRzIGNvbW1pdHRlZAorCSRub2RlX3B1Ymxp c2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJDT01NSVQgUFJFUEFSRUQgJ3Rlc3RfcHJl cGFyZWRfdGFiJzsiKTsKKworCSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBw bmFtZSk7CisKKwkjIGNoZWNrIHRoYXQgdHJhbnNhY3Rpb24gaXMgY29tbWl0dGVkIG9uIHN1YnNj cmliZXIKKwkkcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs CisJCSJTRUxFQ1QgY291bnQoKiksIGNvdW50KGMpLCBjb3VudChkID0gOTk5KSBGUk9NIHRlc3Rf dGFiIik7CisJaXMoJHJlc3VsdCwgcXEoNXw1fDUpLAorCQknUm93cyBpbnNlcnRlZCBieSAyUEMg KGFzIHdlbGwgYXMgb3V0c2lkZSBpbnNlcnQpIGhhdmUgY29tbWl0dGVkIG9uIHN1YnNjcmliZXIs IGFuZCBleHRyYSBjb2x1bW5zIGNvbnRhaW4gbG9jYWwgZGVmYXVsdHMnCisJKTsKKworCSRyZXN1 bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIlNFTEVDVCBj b3VudCgqKSBGUk9NIHBnX3ByZXBhcmVkX3hhY3RzOyIpOworCWlzKCRyZXN1bHQsIHFxKDApLCAn dHJhbnNhY3Rpb24gaXMgY29tbWl0dGVkIG9uIHN1YnNjcmliZXInKTsKKworCSMgQ2xlYW51cCB0 aGUgdGVzdCBkYXRhCisJJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJ IkRFTEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIGEgPiAyOyIpOworCSRub2RlX3B1Ymxpc2hlci0+ d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7Cit9CisKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMKICMgU2V0dXAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKQEAgLTQ4 LDYgKzMyOSwxMCBAQCAkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAogCSJD UkVBVEUgUFVCTElDQVRJT04gdGFwX3B1YiBGT1IgVEFCTEUgdGVzdF90YWIiKTsKIAogbXkgJGFw cG5hbWUgPSAndGFwX3N1Yic7CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisj IFRlc3QgdXNpbmcgc3RyZWFtaW5nIG1vZGUgJ29uJworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMKICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgKIAkncG9zdGdyZXMnLCAiCiAJ Q1JFQVRFIFNVQlNDUklQVElPTiB0YXBfc3ViCkBAIC02NCwyMzYgKzM0OSwzOCBAQCBteSAkdHdv cGhhc2VfcXVlcnkgPQogJG5vZGVfc3Vic2NyaWJlci0+cG9sbF9xdWVyeV91bnRpbCgncG9zdGdy ZXMnLCAkdHdvcGhhc2VfcXVlcnkpCiAgIG9yIGRpZSAiVGltZWQgb3V0IHdoaWxlIHdhaXRpbmcg Zm9yIHN1YnNjcmliZXIgdG8gZW5hYmxlIHR3b3BoYXNlIjsKIAotIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIwogIyBDaGVjayBpbml0aWFsIGRhdGEgd2FzIGNvcGllZCB0byBzdWJzY3Jp YmVyCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiBteSAkcmVzdWx0ID0gJG5vZGVf c3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCiAJIlNFTEVDVCBjb3VudCgqKSwgY291 bnQoYyksIGNvdW50KGQgPSA5OTkpIEZST00gdGVzdF90YWIiKTsKIGlzKCRyZXN1bHQsIHFxKDJ8 MnwyKSwgJ2NoZWNrIGluaXRpYWwgZGF0YSB3YXMgY29waWVkIHRvIHN1YnNjcmliZXInKTsKIAot IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBUZXN0IDJQQyBQUkVQQVJFIC8gQ09N TUlUIFBSRVBBUkVELgotIyAxLiBEYXRhIGlzIHN0cmVhbWVkIGFzIGEgMlBDIHRyYW5zYWN0aW9u LgotIyAyLiBUaGVuIGRvIGNvbW1pdCBwcmVwYXJlZC4KLSMKLSMgRXhwZWN0IGFsbCBkYXRhIGlz IHJlcGxpY2F0ZWQgb24gc3Vic2NyaWJlciBzaWRlIGFmdGVyIHRoZSBjb21taXQuCi0jIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMgY2hlY2sgdGhhdCAyUEMgZ2V0cyByZXBsaWNh dGVkIHRvIHN1YnNjcmliZXIKLSMgSW5zZXJ0LCB1cGRhdGUgYW5kIGRlbGV0ZSBzb21lIHJvd3Mu Ci0kbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgKLQkncG9zdGdyZXMnLCBxewotCUJFR0lOOwot CUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0 ZV9zZXJpZXMoMywgNSkgcyhpKTsKLQlVUERBVEUgdGVzdF90YWIgU0VUIGIgPSBtZDUoYikgV0hF UkUgbW9kKGEsMikgPSAwOwotCURFTEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIG1vZChhLDMpID0g MDsKLQlQUkVQQVJFIFRSQU5TQUNUSU9OICd0ZXN0X3ByZXBhcmVkX3RhYic7fSk7Ci0KLSRub2Rl X3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7Ci0KLSMgY2hlY2sgdGhhdCB0 cmFuc2FjdGlvbiBpcyBpbiBwcmVwYXJlZCBzdGF0ZSBvbiBzdWJzY3JpYmVyCi0kcmVzdWx0ID0g JG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIlNFTEVDVCBjb3VudCgq KSBGUk9NIHBnX3ByZXBhcmVkX3hhY3RzOyIpOwotaXMoJHJlc3VsdCwgcXEoMSksICd0cmFuc2Fj dGlvbiBpcyBwcmVwYXJlZCBvbiBzdWJzY3JpYmVyJyk7Ci0KLSMgMlBDIHRyYW5zYWN0aW9uIGdl dHMgY29tbWl0dGVkCi0kbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJD T01NSVQgUFJFUEFSRUQgJ3Rlc3RfcHJlcGFyZWRfdGFiJzsiKTsKLQotJG5vZGVfcHVibGlzaGVy LT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKK3Rlc3Rfc3RyZWFtaW5nKCRub2RlX3B1Ymxp c2hlciwgJG5vZGVfc3Vic2NyaWJlciwgJGFwcG5hbWUsIDApOwogCi0jIGNoZWNrIHRoYXQgdHJh bnNhY3Rpb24gaXMgY29tbWl0dGVkIG9uIHN1YnNjcmliZXIKLSRyZXN1bHQgPSAkbm9kZV9zdWJz Y3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiU0VMRUNUIGNvdW50KCopLCBjb3VudChj KSwgY291bnQoZCA9IDk5OSkgRlJPTSB0ZXN0X3RhYiIpOwotaXMoJHJlc3VsdCwgcXEoNHw0fDQp LAotCSdSb3dzIGluc2VydGVkIGJ5IDJQQyBoYXZlIGNvbW1pdHRlZCBvbiBzdWJzY3JpYmVyLCBh bmQgZXh0cmEgY29sdW1ucyBjb250YWluIGxvY2FsIGRlZmF1bHRzJworIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgVGVzdCB1c2luZyBzdHJlYW1pbmcgbW9kZSAncGFy YWxsZWwnCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworbXkgJG9sZHBp ZCA9ICRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCBwaWQg RlJPTSBwZ19zdGF0X3JlcGxpY2F0aW9uIFdIRVJFIGFwcGxpY2F0aW9uX25hbWUgPSAnJGFwcG5h bWUnIEFORCBzdGF0ZSA9ICdzdHJlYW1pbmcnOyIKICk7Ci0kcmVzdWx0ID0gJG5vZGVfc3Vic2Ny aWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIlNFTEVDVCBjb3VudCgqKSBGUk9NIHBnX3By ZXBhcmVkX3hhY3RzOyIpOwotaXMoJHJlc3VsdCwgcXEoMCksICd0cmFuc2FjdGlvbiBpcyBjb21t aXR0ZWQgb24gc3Vic2NyaWJlcicpOwotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj Ci0jIFRlc3QgMlBDIFBSRVBBUkUgLyBST0xMQkFDSyBQUkVQQVJFRC4KLSMgMS4gVGFibGUgaXMg ZGVsZXRlZCBiYWNrIHRvIDIgcm93cyB3aGljaCBhcmUgcmVwbGljYXRlZCBvbiBzdWJzY3JpYmVy LgotIyAyLiBEYXRhIGlzIHN0cmVhbWVkIHVzaW5nIDJQQy4KLSMgMy4gRG8gcm9sbGJhY2sgcHJl cGFyZWQuCi0jCi0jIEV4cGVjdCBkYXRhIHJvbGxzIGJhY2sgbGVhdmluZyBvbmx5IHRoZSBvcmln aW5hbCAyIHJvd3MuCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMgRmlyc3Qs IGRlbGV0ZSB0aGUgZGF0YSBleGNlcHQgZm9yIDIgcm93cyAod2lsbCBiZSByZXBsaWNhdGVkKQot JG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRFTEVURSBGUk9NIHRlc3Rf dGFiIFdIRVJFIGEgPiAyOyIpOwotCi0jIFRoZW4gaW5zZXJ0LCB1cGRhdGUgYW5kIGRlbGV0ZSBz b21lIHJvd3MuCi0kbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgKLQkncG9zdGdyZXMnLCBxewot CUJFR0lOOwotCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJP TSBnZW5lcmF0ZV9zZXJpZXMoMywgNSkgcyhpKTsKLQlVUERBVEUgdGVzdF90YWIgU0VUIGIgPSBt ZDUoYikgV0hFUkUgbW9kKGEsMikgPSAwOwotCURFTEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIG1v ZChhLDMpID0gMDsKLQlQUkVQQVJFIFRSQU5TQUNUSU9OICd0ZXN0X3ByZXBhcmVkX3RhYic7fSk7 Ci0KLSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7Ci0KLSMgY2hl Y2sgdGhhdCB0cmFuc2FjdGlvbiBpcyBpbiBwcmVwYXJlZCBzdGF0ZSBvbiBzdWJzY3JpYmVyCi0k cmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIlNFTEVD VCBjb3VudCgqKSBGUk9NIHBnX3ByZXBhcmVkX3hhY3RzOyIpOwotaXMoJHJlc3VsdCwgcXEoMSks ICd0cmFuc2FjdGlvbiBpcyBwcmVwYXJlZCBvbiBzdWJzY3JpYmVyJyk7Ci0KLSMgMlBDIHRyYW5z YWN0aW9uIGdldHMgYWJvcnRlZAotJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywKLQkiUk9MTEJBQ0sgUFJFUEFSRUQgJ3Rlc3RfcHJlcGFyZWRfdGFiJzsiKTsKLQotJG5vZGVf cHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKLQotIyBjaGVjayB0aGF0IHRy YW5zYWN0aW9uIGlzIGFib3J0ZWQgb24gc3Vic2NyaWJlcgotJHJlc3VsdCA9ICRub2RlX3N1YnNj cmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJTRUxFQ1QgY291bnQoKiksIGNvdW50KGMp LCBjb3VudChkID0gOTk5KSBGUk9NIHRlc3RfdGFiIik7Ci1pcygkcmVzdWx0LCBxcSgyfDJ8Miks Ci0JJ1Jvd3MgaW5zZXJ0ZWQgYnkgMlBDIGFyZSByb2xsZWQgYmFjaywgbGVhdmluZyBvbmx5IHRo ZSBvcmlnaW5hbCAyIHJvd3MnKTsKLQotJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLAotCSJTRUxFQ1QgY291bnQoKikgRlJPTSBwZ19wcmVwYXJlZF94YWN0 czsiKTsKLWlzKCRyZXN1bHQsIHFxKDApLCAndHJhbnNhY3Rpb24gaXMgYWJvcnRlZCBvbiBzdWJz Y3JpYmVyJyk7Ci0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ2hlY2sgdGhh dCAyUEMgQ09NTUlUIFBSRVBBUkVEIGlzIGRlY29kZWQgcHJvcGVybHkgb24gY3Jhc2ggcmVzdGFy dC4KLSMgMS4gaW5zZXJ0LCB1cGRhdGUgYW5kIGRlbGV0ZSBzb21lIHJvd3MuCi0jIDIuIFRoZW4g c2VydmVyIGNyYXNoZXMgYmVmb3JlIHRoZSAyUEMgdHJhbnNhY3Rpb24gaXMgY29tbWl0dGVkLgot IyAzLiBBZnRlciBzZXJ2ZXJzIGFyZSByZXN0YXJ0ZWQgdGhlIHBlbmRpbmcgdHJhbnNhY3Rpb24g aXMgY29tbWl0dGVkLgotIwotIyBFeHBlY3QgYWxsIGRhdGEgaXMgcmVwbGljYXRlZCBvbiBzdWJz Y3JpYmVyIHNpZGUgYWZ0ZXIgdGhlIGNvbW1pdC4KLSMgTm90ZTogYm90aCBwdWJsaXNoZXIgYW5k IHN1YnNjcmliZXIgZG8gY3Jhc2gvcmVzdGFydC4KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMKLQotJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCi0JJ3Bvc3RncmVzJywgcXsKLQlC RUdJTjsKLQlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00g Z2VuZXJhdGVfc2VyaWVzKDMsIDUpIHMoaSk7Ci0JVVBEQVRFIHRlc3RfdGFiIFNFVCBiID0gbWQ1 KGIpIFdIRVJFIG1vZChhLDIpID0gMDsKLQlERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBtb2Qo YSwzKSA9IDA7Ci0JUFJFUEFSRSBUUkFOU0FDVElPTiAndGVzdF9wcmVwYXJlZF90YWInO30pOwot Ci0kbm9kZV9zdWJzY3JpYmVyLT5zdG9wKCdpbW1lZGlhdGUnKTsKLSRub2RlX3B1Ymxpc2hlci0+ c3RvcCgnaW1tZWRpYXRlJyk7Ci0KLSRub2RlX3B1Ymxpc2hlci0+c3RhcnQ7Ci0kbm9kZV9zdWJz Y3JpYmVyLT5zdGFydDsKIAotIyBjb21taXQgcG9zdCB0aGUgcmVzdGFydAotJG5vZGVfcHVibGlz aGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiQ09NTUlUIFBSRVBBUkVEICd0ZXN0X3ByZXBh cmVkX3RhYic7Iik7Ci0kbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUp OwotCi0jIGNoZWNrIGluc2VydHMgYXJlIHZpc2libGUKLSRyZXN1bHQgPSAkbm9kZV9zdWJzY3Jp YmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiU0VMRUNUIGNvdW50KCopLCBjb3VudChjKSwg Y291bnQoZCA9IDk5OSkgRlJPTSB0ZXN0X3RhYiIpOwotaXMoJHJlc3VsdCwgcXEoNHw0fDQpLAot CSdSb3dzIGluc2VydGVkIGJ5IDJQQyBoYXZlIGNvbW1pdHRlZCBvbiBzdWJzY3JpYmVyLCBhbmQg ZXh0cmEgY29sdW1ucyBjb250YWluIGxvY2FsIGRlZmF1bHRzJwotKTsKLQotIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIwotIyBEbyBJTlNFUlQgYWZ0ZXIgdGhlIFBSRVBBUkUgYnV0IGJl Zm9yZSBST0xMQkFDSyBQUkVQQVJFRC4KLSMgMS4gVGFibGUgaXMgZGVsZXRlZCBiYWNrIHRvIDIg cm93cyB3aGljaCBhcmUgcmVwbGljYXRlZCBvbiBzdWJzY3JpYmVyLgotIyAyLiBEYXRhIGlzIHN0 cmVhbWVkIHVzaW5nIDJQQy4KLSMgMy4gQSBzaW5nbGUgcm93IElOU0VSVCBpcyBkb25lIHdoaWNo IGlzIGFmdGVyIHRoZSBQUkVQQVJFLgotIyA0LiBUaGVuIGRvIGEgUk9MTEJBQ0sgUFJFUEFSRUQu Ci0jCi0jIEV4cGVjdCB0aGUgMlBDIGRhdGEgcm9sbHMgYmFjayBsZWF2aW5nIG9ubHkgMyByb3dz IG9uIHRoZSBzdWJzY3JpYmVyCi0jICh0aGUgb3JpZ2luYWwgMiArIGluc2VydGVkIDEpLgotIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jIEZpcnN0LCBkZWxldGUgdGhlIGRhdGEg ZXhjZXB0IGZvciAyIHJvd3MgKHdpbGwgYmUgcmVwbGljYXRlZCkKLSRub2RlX3B1Ymxpc2hlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBhID4gMjsi KTsKLQotIyBUaGVuIGluc2VydCwgdXBkYXRlIGFuZCBkZWxldGUgc29tZSByb3dzLgotJG5vZGVf cHVibGlzaGVyLT5zYWZlX3BzcWwoCi0JJ3Bvc3RncmVzJywgcXsKLQlCRUdJTjsKLQlJTlNFUlQg SU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVz KDMsIDUpIHMoaSk7Ci0JVVBEQVRFIHRlc3RfdGFiIFNFVCBiID0gbWQ1KGIpIFdIRVJFIG1vZChh LDIpID0gMDsKLQlERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBtb2QoYSwzKSA9IDA7Ci0JUFJF UEFSRSBUUkFOU0FDVElPTiAndGVzdF9wcmVwYXJlZF90YWInO30pOwotCi0kbm9kZV9wdWJsaXNo ZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOwotCi0jIGNoZWNrIHRoYXQgdHJhbnNhY3Rp b24gaXMgaW4gcHJlcGFyZWQgc3RhdGUgb24gc3Vic2NyaWJlcgotJHJlc3VsdCA9ICRub2RlX3N1 YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJTRUxFQ1QgY291bnQoKikgRlJPTSBw Z19wcmVwYXJlZF94YWN0czsiKTsKLWlzKCRyZXN1bHQsIHFxKDEpLCAndHJhbnNhY3Rpb24gaXMg cHJlcGFyZWQgb24gc3Vic2NyaWJlcicpOwotCi0jIEluc2VydCBhIGRpZmZlcmVudCByZWNvcmQg KG5vdyB3ZSBhcmUgb3V0c2lkZSBvZiB0aGUgMlBDIHRyYW5zYWN0aW9uKQotIyBOb3RlOiB0aGUg MlBDIHRyYW5zYWN0aW9uIHN0aWxsIGhvbGRzIHJvdyBsb2NrcyBzbyBtYWtlIHN1cmUgdGhpcyBp bnNlcnQgaXMgZm9yIGEgc2VwYXJhdGUgcHJpbWFyeSBrZXkKLSRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsCi0JIklOU0VSVCBJTlRPIHRlc3RfdGFiIFZBTFVFUyAoOTk5OTks ICdmb29iYXInKSIpOwotCi0jIDJQQyB0cmFuc2FjdGlvbiBnZXRzIGFib3J0ZWQKLSRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIlJPTExCQUNLIFBSRVBBUkVEICd0ZXN0 X3ByZXBhcmVkX3RhYic7Iik7Ci0KLSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgk YXBwbmFtZSk7Ci0KLSMgY2hlY2sgdGhhdCB0cmFuc2FjdGlvbiBpcyBhYm9ydGVkIG9uIHN1YnNj cmliZXIsCi0jIGJ1dCB0aGUgZXh0cmEgSU5TRVJUIG91dHNpZGUgb2YgdGhlIDJQQyBzdGlsbCB3 YXMgcmVwbGljYXRlZAotJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLAotCSJTRUxFQ1QgY291bnQoKiksIGNvdW50KGMpLCBjb3VudChkID0gOTk5KSBGUk9N IHRlc3RfdGFiIik7Ci1pcygkcmVzdWx0LCBxcSgzfDN8MyksICdjaGVjayB0aGUgb3V0c2lkZSBp bnNlcnQgd2FzIGNvcGllZCB0byBzdWJzY3JpYmVyJyk7Ci0KLSRyZXN1bHQgPSAkbm9kZV9zdWJz Y3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiU0VMRUNUIGNvdW50KCopIEZST00gcGdf cHJlcGFyZWRfeGFjdHM7Iik7Ci1pcygkcmVzdWx0LCBxcSgwKSwgJ3RyYW5zYWN0aW9uIGlzIGFi b3J0ZWQgb24gc3Vic2NyaWJlcicpOwotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj Ci0jIERvIElOU0VSVCBhZnRlciB0aGUgUFJFUEFSRSBidXQgYmVmb3JlIENPTU1JVCBQUkVQQVJF RC4KLSMgMS4gVGFibGUgaXMgZGVsZXRlZCBiYWNrIHRvIDIgcm93cyB3aGljaCBhcmUgcmVwbGlj YXRlZCBvbiBzdWJzY3JpYmVyLgotIyAyLiBEYXRhIGlzIHN0cmVhbWVkIHVzaW5nIDJQQy4KLSMg My4gQSBzaW5nbGUgcm93IElOU0VSVCBpcyBkb25lIHdoaWNoIGlzIGFmdGVyIHRoZSBQUkVQQVJF LgotIyA0LiBUaGVuIGRvIGEgQ09NTUlUIFBSRVBBUkVELgotIwotIyBFeHBlY3QgMlBDIGRhdGEg KyB0aGUgZXh0cmEgcm93IGFyZSBvbiB0aGUgc3Vic2NyaWJlcgotIyAodGhlIDMzMzQgKyBpbnNl cnRlZCAxID0gMzMzNSkuCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMgRmly c3QsIGRlbGV0ZSB0aGUgZGF0YSBleGNlcHQgZm9yIDIgcm93cyAod2lsbCBiZSByZXBsaWNhdGVk KQotJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRFTEVURSBGUk9NIHRl c3RfdGFiIFdIRVJFIGEgPiAyOyIpOwotCi0jIFRoZW4gaW5zZXJ0LCB1cGRhdGUgYW5kIGRlbGV0 ZSBzb21lIHJvd3MuCi0kbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgKLQkncG9zdGdyZXMnLCBx ewotCUJFR0lOOwotCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkg RlJPTSBnZW5lcmF0ZV9zZXJpZXMoMywgNSkgcyhpKTsKLQlVUERBVEUgdGVzdF90YWIgU0VUIGIg PSBtZDUoYikgV0hFUkUgbW9kKGEsMikgPSAwOwotCURFTEVURSBGUk9NIHRlc3RfdGFiIFdIRVJF IG1vZChhLDMpID0gMDsKLQlQUkVQQVJFIFRSQU5TQUNUSU9OICd0ZXN0X3ByZXBhcmVkX3RhYic7 fSk7Ci0KLSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7Ci0KLSMg Y2hlY2sgdGhhdCB0cmFuc2FjdGlvbiBpcyBpbiBwcmVwYXJlZCBzdGF0ZSBvbiBzdWJzY3JpYmVy Ci0kcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIlNF TEVDVCBjb3VudCgqKSBGUk9NIHBnX3ByZXBhcmVkX3hhY3RzOyIpOwotaXMoJHJlc3VsdCwgcXEo MSksICd0cmFuc2FjdGlvbiBpcyBwcmVwYXJlZCBvbiBzdWJzY3JpYmVyJyk7Ciskbm9kZV9zdWJz Y3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQUxURVIgU1VCU0NSSVBUSU9OIHRhcF9z dWIgU0VUKHN0cmVhbWluZyA9IHBhcmFsbGVsKSIpOwogCi0jIEluc2VydCBhIGRpZmZlcmVudCBy ZWNvcmQgKG5vdyB3ZSBhcmUgb3V0c2lkZSBvZiB0aGUgMlBDIHRyYW5zYWN0aW9uKQotIyBOb3Rl OiB0aGUgMlBDIHRyYW5zYWN0aW9uIHN0aWxsIGhvbGRzIHJvdyBsb2NrcyBzbyBtYWtlIHN1cmUg dGhpcyBpbnNlcnQgaXMgZm9yIGEgc2VwYXJhcmUgcHJpbWFyeSBrZXkKLSRub2RlX3B1Ymxpc2hl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIklOU0VSVCBJTlRPIHRlc3RfdGFiIFZBTFVFUyAo OTk5OTksICdmb29iYXInKSIpOworJG5vZGVfcHVibGlzaGVyLT5wb2xsX3F1ZXJ5X3VudGlsKCdw b3N0Z3JlcycsCisJIlNFTEVDVCBwaWQgIT0gJG9sZHBpZCBGUk9NIHBnX3N0YXRfcmVwbGljYXRp b24gV0hFUkUgYXBwbGljYXRpb25fbmFtZSA9ICckYXBwbmFtZScgQU5EIHN0YXRlID0gJ3N0cmVh bWluZyc7IgorICApCisgIG9yIGRpZQorICAiVGltZWQgb3V0IHdoaWxlIHdhaXRpbmcgZm9yIGFw cGx5IHRvIHJlc3RhcnQgYWZ0ZXIgY2hhbmdpbmcgU1VCU0NSSVBUSU9OIjsKIAotIyAyUEMgdHJh bnNhY3Rpb24gZ2V0cyBjb21taXR0ZWQKLSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsCi0JIkNPTU1JVCBQUkVQQVJFRCAndGVzdF9wcmVwYXJlZF90YWInOyIpOworIyBXZSBu ZWVkIHRvIGNoZWNrIERFQlVHIGxvZ3MgdG8gZW5zdXJlIHRoYXQgdGhlIHBhcmFsbGVsIGFwcGx5 IHdvcmtlciBoYXMKKyMgYXBwbGllZCB0aGUgdHJhbnNhY3Rpb24uIFNvLCBidW1wIHVwIHRoZSBs b2cgdmVyYm9zaXR5LgorJG5vZGVfc3Vic2NyaWJlci0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwu Y29uZicsICJsb2dfbWluX21lc3NhZ2VzID0gZGVidWcxIik7Ciskbm9kZV9zdWJzY3JpYmVyLT5y ZWxvYWQ7CiAKLSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7Cisj IFJ1biBhIHF1ZXJ5IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSByZWxvYWQgaGFzIHRha2VuIGVmZmVj dC4KKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxe1NFTEVDVCAxfSk7 CiAKLSMgY2hlY2sgdGhhdCB0cmFuc2FjdGlvbiBpcyBjb21taXR0ZWQgb24gc3Vic2NyaWJlcgot JHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJTRUxF Q1QgY291bnQoKiksIGNvdW50KGMpLCBjb3VudChkID0gOTk5KSBGUk9NIHRlc3RfdGFiIik7Ci1p cygkcmVzdWx0LCBxcSg1fDV8NSksCi0JJ1Jvd3MgaW5zZXJ0ZWQgYnkgMlBDIChhcyB3ZWxsIGFz IG91dHNpZGUgaW5zZXJ0KSBoYXZlIGNvbW1pdHRlZCBvbiBzdWJzY3JpYmVyLCBhbmQgZXh0cmEg Y29sdW1ucyBjb250YWluIGxvY2FsIGRlZmF1bHRzJwotKTsKLQotJHJlc3VsdCA9ICRub2RlX3N1 YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJTRUxFQ1QgY291bnQoKikgRlJPTSBw Z19wcmVwYXJlZF94YWN0czsiKTsKLWlzKCRyZXN1bHQsIHFxKDApLCAndHJhbnNhY3Rpb24gaXMg Y29tbWl0dGVkIG9uIHN1YnNjcmliZXInKTsKK3Rlc3Rfc3RyZWFtaW5nKCRub2RlX3B1Ymxpc2hl ciwgJG5vZGVfc3Vic2NyaWJlciwgJGFwcG5hbWUsIDEpOwogCiAjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjCiAjIGNoZWNrIGFsbCB0aGUgY2xlYW51cApkaWZmIC0tZ2l0IGEvc3JjL3Rv b2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMu bGlzdAppbmRleCA1MGQ4NmNiMDFiLi4yM2JhZmVjNWY3IDEwMDY0NAotLS0gYS9zcmMvdG9vbHMv cGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMu bGlzdApAQCAtMTQ3Myw2ICsxNDczLDcgQEAgTG9naWNhbFJlcFJlbElkCiBMb2dpY2FsUmVwUmVs TWFwRW50cnkKIExvZ2ljYWxSZXBSZWxhdGlvbgogTG9naWNhbFJlcFJvbGxiYWNrUHJlcGFyZWRU eG5EYXRhCitMb2dpY2FsUmVwU3RyZWFtQWJvcnREYXRhCiBMb2dpY2FsUmVwVHVwbGVEYXRhCiBM b2dpY2FsUmVwVHlwCiBMb2dpY2FsUmVwV29ya2VyCkBAIC0xODc2LDYgKzE4NzcsOSBAQCBQYWdl WExvZ1JlY1B0cgogUGFnZXRhYmxlRW50cnkKIFBhaXJzCiBQYXJhbGxlbEFwcGVuZFN0YXRlCitQ YXJhbGxlbEFwcGx5V29ya2VyRW50cnkKK1BhcmFsbGVsQXBwbHlXb3JrZXJJbmZvCitQYXJhbGxl bEFwcGx5V29ya2VyU2hhcmVkCiBQYXJhbGxlbEJpdG1hcEhlYXBTdGF0ZQogUGFyYWxsZWxCbG9j a1RhYmxlU2NhbkRlc2MKIFBhcmFsbGVsQmxvY2tUYWJsZVNjYW5Xb3JrZXIKQEAgLTE4OTUsNiAr MTg5OSw3IEBAIFBhcmFsbGVsU2xvdFJlc3VsdEhhbmRsZXIKIFBhcmFsbGVsU3RhdGUKIFBhcmFs bGVsVGFibGVTY2FuRGVzYwogUGFyYWxsZWxUYWJsZVNjYW5EZXNjRGF0YQorUGFyYWxsZWxUcmFu c1N0YXRlCiBQYXJhbGxlbFZhY3V1bVN0YXRlCiBQYXJhbGxlbFdvcmtlckNvbnRleHQKIFBhcmFs bGVsV29ya2VySW5mbwpAQCAtMTkyNCw2ICsxOTI5LDcgQEAgUGFyc2VyU3RhdGUKIFBhcnRDbGF1 c2VJbmZvCiBQYXJ0Q2xhdXNlTWF0Y2hTdGF0dXMKIFBhcnRDbGF1c2VUYXJnZXQKK1BhcnRpYWxG aWxlU2V0U3RhdGUKIFBhcnRpdGlvbkJvdW5kSW5mbwogUGFydGl0aW9uQm91bmRJbmZvRGF0YQog UGFydGl0aW9uQm91bmRTcGVjCkBAIC0yNzc0LDYgKzI3ODAsNyBAQCBUb2NFbnRyeQogVG9rZW5B dXhEYXRhCiBUb2tlbml6ZWRBdXRoTGluZQogVHJhY2tJdGVtCitUcmFuc0FwcGx5QWN0aW9uCiBU cmFuc0ludmFsaWRhdGlvbkluZm8KIFRyYW5zU3RhdGUKIFRyYW5zYWN0aW9uSWQKLS0gCjIuMjgu MC53aW5kb3dzLjEKCg== --000000000000d641c805f145c4bf Content-Type: application/octet-stream; name="v71-0002-Add-GUC-stream_serialize_threshold-and-test-seri.patch" Content-Disposition: attachment; filename="v71-0002-Add-GUC-stream_serialize_threshold-and-test-seri.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lceny7041 RnJvbSA5NWM0YjNlMThmMDkxMGRlYzRiMTJkOThlYmU2OWQ2MGJhYzY2NzIxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IEthcGlsYSA8YWthcGlsYUBwb3N0Z3Jlc3FsLm9yZz4K RGF0ZTogTW9uLCAyIEphbiAyMDIzIDE1OjM3OjI1ICswNTMwClN1YmplY3Q6IFtQQVRDSCB2NzEg Mi8yXSBBZGQgR1VDIHN0cmVhbV9zZXJpYWxpemVfdGhyZXNob2xkIGFuZCB0ZXN0CiBzZXJpYWxp emluZyBtZXNzYWdlcyB0byBkaXNrLgoKLS0tCiBkb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwgICAg ICAgICAgICAgICAgICAgICAgfCAgMzIgKysrKwogLi4uL3JlcGxpY2F0aW9uL2xvZ2ljYWwvYXBw bHlwYXJhbGxlbHdvcmtlci5jIHwgIDEyICsrCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL3dvcmtlci5jICAgICAgfCAgIDkgKysKIHNyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3Rh Ymxlcy5jICAgICAgICAgICB8ICAxNCArKwogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vd29ya2Vy X2ludGVybmFsLmggICAgIHwgICA0ICsKIHNyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAxNV9zdHJl YW0ucGwgICAgICAgICB8IDE0NCArKysrKysrKysrKysrKysrKy0KIDYgZmlsZXMgY2hhbmdlZCwg MjEyIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9z Z21sL2NvbmZpZy5zZ21sIGIvZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sCmluZGV4IGEzM2E5MzU3 MGIuLjY2OWJhYmY3ZWIgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9jb25maWcuc2dtbAorKysg Yi9kb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwKQEAgLTExNjUwLDYgKzExNjUwLDM4IEBAIExPRzog IENsZWFuVXBMb2NrOiBkZWxldGluZzogbG9jaygweGI3YWNkODQ0KSBpZCgyNDY4OCwyNDY5Niww LDAsMCwxKQogICAgICAgPC9saXN0aXRlbT4KICAgICAgPC92YXJsaXN0ZW50cnk+CiAKKyAgICAg PHZhcmxpc3RlbnRyeSBpZD0iZ3VjLXN0cmVhbS1zZXJpYWxpemUtdGhyZXNob2xkIiB4cmVmbGFi ZWw9InN0cmVhbV9zZXJpYWxpemVfdGhyZXNob2xkIj4KKyAgICAgIDx0ZXJtPjx2YXJuYW1lPnN0 cmVhbV9zZXJpYWxpemVfdGhyZXNob2xkPC92YXJuYW1lPiAoPHR5cGU+aW50ZWdlcjwvdHlwZT4p CisgICAgICA8aW5kZXh0ZXJtPgorICAgICAgIDxwcmltYXJ5Pjx2YXJuYW1lPnN0cmVhbV9zZXJp YWxpemVfdGhyZXNob2xkPC92YXJuYW1lPiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcjwvcHJpbWFy eT4KKyAgICAgIDwvaW5kZXh0ZXJtPgorICAgICAgPC90ZXJtPgorICAgICAgPGxpc3RpdGVtPgor ICAgICAgIDxwYXJhPgorICAgICAgICBGb3JjZXMgdGhlIGxlYWRlciBhcHBseSB3b3JrZXIgdG8g c2VyaWFsaXplIG1lc3NhZ2VzIHRvIGZpbGVzIGFmdGVyCisgICAgICAgIHNlbmRpbmcgc3BlY2lm aWVkIGFtb3VudCBvZiBzdHJlYW1pbmcgY2h1bmtzIHRvIHRoZSBwYXJhbGxlbCBhcHBseQorICAg ICAgICB3b3JrZXIuIFNldHRpbmcgdGhpcyB0byB6ZXJvIHNlcmlhbGl6ZSBhbGwgbWVzc2FnZXMu IEEgdmFsdWUgb2YKKyAgICAgICAgPGxpdGVyYWw+LTE8L2xpdGVyYWw+ICh0aGUgZGVmYXVsdCkg ZGlzYWJsZXMgdGhpcyBmZWF0dXJlLiBUaGlzIGlzCisgICAgICAgIGludGVuZGVkIHRvIHRlc3Qg c2VyaWFsaXphdGlvbiB0byBmaWxlcyB3aXRoCisgICAgICAgIDxsaXRlcmFsPnN0cmVhbWluZyA9 IHBhcmFsbGVsPC9saXRlcmFsPi4KKyAgICAgICA8L3BhcmE+CisKKyAgICAgICA8cGFyYT4KKyAg ICAgICAgV2hlbiBsb2dpY2FsIHJlcGxpY2F0aW9uIHN1YnNjcmlwdGlvbiA8bGl0ZXJhbD5zdHJl YW1pbmc8L2xpdGVyYWw+CisgICAgICAgIHBhcmFtZXRlciBpcyBzZXQgdG8gPGxpdGVyYWw+cGFy YWxsZWw8L2xpdGVyYWw+LCB0aGUgbGVhZGVyIGFwcGx5IHdvcmtlcgorICAgICAgICBzZW5kcyBt ZXNzYWdlcyB0byBwYXJhbGxlbCB3b3JrZXJzIHdpdGggYSB0aW1lb3V0LiBCeSBkZWZhdWx0LCB0 aGUKKyAgICAgICAgbGVhZGVyIGFwcGx5IHdvcmtlciB3aWxsIHNlcmlhbGl6ZSB0aGUgcmVtYWlu aW5nIG1lc3NhZ2VzIHRvIGZpbGVzIGlmCisgICAgICAgIHRoZSB0aW1lb3V0IGlzIGV4Y2VlZGVk LiBJZiB0aGlzIG9wdGlvbiBpcyBzZXQgdG8gYW55IHZhbHVlIG90aGVyIHRoYW4KKyAgICAgICAg PGxpdGVyYWw+LTE8L2xpdGVyYWw+LCBzZXJpYWxpemUgdG8gZmlsZXMgZXZlbiB3aXRob3V0IHRp bWVvdXQuCisgICAgICAgPC9wYXJhPgorCisgICAgICAgPHBhcmE+CisgICAgICAgIFRoaXMgcGFy YW1ldGVyIGNhbiBvbmx5IGJlIHNldCBpbiB0aGUgPGZpbGVuYW1lPnBvc3RncmVzcWwuY29uZjwv ZmlsZW5hbWU+CisgICAgICAgIGZpbGUgb3Igb24gdGhlIHNlcnZlciBjb21tYW5kIGxpbmUuCisg ICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgPC92YXJsaXN0ZW50cnk+CisK ICAgICA8L3ZhcmlhYmxlbGlzdD4KICAgPC9zZWN0MT4KICAgPHNlY3QxIGlkPSJydW50aW1lLWNv bmZpZy1zaG9ydCI+CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2Fs L2FwcGx5cGFyYWxsZWx3b3JrZXIuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwv YXBwbHlwYXJhbGxlbHdvcmtlci5jCmluZGV4IDcwMzk4M2YyNzguLjA2YTc4NGRlM2YgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvYXBwbHlwYXJhbGxlbHdvcmtl ci5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvYXBwbHlwYXJhbGxlbHdv cmtlci5jCkBAIC0yNTQsNiArMjU0LDkgQEAgc3RhdGljIFBhcmFsbGVsQXBwbHlXb3JrZXJJbmZv ICpzdHJlYW1fYXBwbHlfd29ya2VyID0gTlVMTDsKIC8qIEEgbGlzdCB0byBtYWludGFpbiBzdWJ0 cmFuc2FjdGlvbnMsIGlmIGFueS4gKi8KIHN0YXRpYyBMaXN0ICpzdWJ4YWN0bGlzdCA9IE5JTDsK IAorLyogR1VDIHZhcmlhYmxlICovCitpbnQJCQlzdHJlYW1fc2VyaWFsaXplX3RocmVzaG9sZCA9 IC0xOworCiBzdGF0aWMgdm9pZCBwYV9mcmVlX3dvcmtlcl9pbmZvKFBhcmFsbGVsQXBwbHlXb3Jr ZXJJbmZvICp3aW5mbyk7CiBzdGF0aWMgUGFyYWxsZWxUcmFuc1N0YXRlIHBhX2dldF94YWN0X3N0 YXRlKFBhcmFsbGVsQXBwbHlXb3JrZXJTaGFyZWQgKndzaGFyZWQpOwogc3RhdGljIFBhcnRpYWxG aWxlU2V0U3RhdGUgcGFfZ2V0X2ZpbGVzZXRfc3RhdGUodm9pZCk7CkBAIC0xMTQzLDYgKzExNDYs MTUgQEAgcGFfc2VuZF9kYXRhKFBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICp3aW5mbywgU2l6ZSBu Ynl0ZXMsIGNvbnN0IHZvaWQgKmRhdGEpCiAJQXNzZXJ0KCFJc1RyYW5zYWN0aW9uU3RhdGUoKSk7 CiAJQXNzZXJ0KCF3aW5mby0+c2VyaWFsaXplX2NoYW5nZXMpOwogCisJLyogRm9yY2UgdG8gc2Vy aWFsaXplIG1lc3NhZ2VzIGlmIHN0cmVhbV9zZXJpYWxpemVfdGhyZXNob2xkIGlzIHJlYWNoZWQu ICovCisJaWYgKHN0cmVhbV9zZXJpYWxpemVfdGhyZXNob2xkICE9IC0xICYmCisJCShzdHJlYW1f c2VyaWFsaXplX3RocmVzaG9sZCA9PSAwIHx8CisJCSBzdHJlYW1fc2VyaWFsaXplX3RocmVzaG9s ZCA8IHBhcmFsbGVsX3N0cmVhbV9uY2h1bmtzKSkKKwl7CisJCXBhcmFsbGVsX3N0cmVhbV9uY2h1 bmtzID0gMDsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwogLyoKICAqIFRoaXMgdGltZW91dCBpcyBh IGJpdCBhcmJpdHJhcnkgYnV0IHRlc3RpbmcgcmV2ZWFsZWQgdGhhdCBpdCBpcyBzdWZmaWNpZW50 CiAgKiB0byBzZW5kIHRoZSBtZXNzYWdlIHVubGVzcyB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2Vy IGlzIHdhaXRpbmcgb24gc29tZQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24v bG9naWNhbC93b3JrZXIuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2Vy LmMKaW5kZXggM2RkOWU0M2MyOC4uYTg0NmZhNDhjMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv cmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlv bi9sb2dpY2FsL3dvcmtlci5jCkBAIC0zMjUsNiArMzI1LDEyIEBAIHN0YXRpYyBUcmFuc2FjdGlv bklkIHN0cmVhbV94aWQgPSBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKICAqLwogc3RhdGljIHVpbnQz MiBwYXJhbGxlbF9zdHJlYW1fbmNoYW5nZXMgPSAwOwogCisvKgorICogVGhlIG51bWJlciBvZiBz dHJlYW1pbmcgY2h1bmtzIHNlbnQgYnkgbGVhZGVyIGFwcGx5IHdvcmtlciBkdXJpbmcgb25lCisg KiBzdHJlYW1lZCB0cmFuc2FjdGlvbi4gVGhpcyBpcyBvbmx5IHVzZWQgd2hlbiBzdHJlYW1fc2Vy aWFsaXplX3RocmVzaG9sZCA+IDAuCisgKi8KK3VpbnQzMgkJcGFyYWxsZWxfc3RyZWFtX25jaHVu a3MgPSAwOworCiAvKgogICogV2UgZW5hYmxlIHNraXBwaW5nIGFsbCBkYXRhIG1vZGlmaWNhdGlv biBjaGFuZ2VzIChJTlNFUlQsIFVQREFURSwgZXRjLikgZm9yCiAgKiB0aGUgc3Vic2NyaXB0aW9u IGlmIHRoZSByZW1vdGUgdHJhbnNhY3Rpb24ncyBmaW5pc2ggTFNOIG1hdGNoZXMgdGhlIHN1YnNr aXBsc24uCkBAIC0xNTE5LDYgKzE1MjUsOSBAQCBhcHBseV9oYW5kbGVfc3RyZWFtX3N0YXJ0KFN0 cmluZ0luZm8gcykKIAkJY2FzZSBUUkFOU19MRUFERVJfU0VORF9UT19QQVJBTExFTDoKIAkJCUFz c2VydCh3aW5mbyk7CiAKKwkJCWlmIChzdHJlYW1fc2VyaWFsaXplX3RocmVzaG9sZCA+IDApCisJ CQkJcGFyYWxsZWxfc3RyZWFtX25jaHVua3MrKzsKKwogCQkJLyoKIAkJCSAqIE9uY2Ugd2Ugc3Rh cnQgc2VyaWFsaXppbmcgdGhlIGNoYW5nZXMsIHRoZSBwYXJhbGxlbCBhcHBseQogCQkJICogd29y a2VyIHdpbGwgd2FpdCBmb3IgdGhlIGxlYWRlciB0byByZWxlYXNlIHRoZSBzdHJlYW0gbG9jawpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMgYi9zcmMvYmFj a2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMuYwppbmRleCA2MmI3ZjU3ZTYzLi4zNWU3YmZiYmE2 IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMuYworKysgYi9z cmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMuYwpAQCAtNjEsNiArNjEsNyBAQAogI2lu Y2x1ZGUgInJlcGxpY2F0aW9uL2xvZ2ljYWxsYXVuY2hlci5oIgogI2luY2x1ZGUgInJlcGxpY2F0 aW9uL3Nsb3QuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9zeW5jcmVwLmgiCisjaW5jbHVkZSAi cmVwbGljYXRpb24vd29ya2VyX2ludGVybmFsLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9idWZtZ3Iu aCIKICNpbmNsdWRlICJzdG9yYWdlL2xhcmdlX29iamVjdC5oIgogI2luY2x1ZGUgInN0b3JhZ2Uv cGdfc2htZW0uaCIKQEAgLTMwMTQsNiArMzAxNSwxOSBAQCBzdHJ1Y3QgY29uZmlnX2ludCBDb25m aWd1cmVOYW1lc0ludFtdID0KIAkJTlVMTCwgTlVMTCwgTlVMTAogCX0sCiAKKwl7CisJCXsic3Ry ZWFtX3NlcmlhbGl6ZV90aHJlc2hvbGQiLCBQR0NfU0lHSFVQLCBERVZFTE9QRVJfT1BUSU9OUywK KwkJCWdldHRleHRfbm9vcCgiRm9yY2VzIHRoZSBsZWFkZXIgYXBwbHkgd29ya2VyIHRvIHNlcmlh bGl6ZSBtZXNzYWdlcyAiCisJCQkJCQkgInRvIGZpbGVzIGFmdGVyIHNlbmRpbmcgc3BlY2lmaWVk IGFtb3VudCBvZiBzdHJlYW1pbmcgIgorCQkJCQkJICJjaHVua3MgaW4gc3RyZWFtaW5nIHBhcmFs bGVsIG1vZGUuIiksCisJCQlnZXR0ZXh0X25vb3AoIkEgdmFsdWUgb2YgLTEgZGlzYWJsZXMgdGhp cyBmZWF0dXJlLiIpLAorCQkJR1VDX05PVF9JTl9TQU1QTEUKKwkJfSwKKwkJJnN0cmVhbV9zZXJp YWxpemVfdGhyZXNob2xkLAorCQktMSwgLTEsIElOVF9NQVgsCisJCU5VTEwsIE5VTEwsIE5VTEwK Kwl9LAorCiAJewogCQl7ImxvZ19yb3RhdGlvbl9hZ2UiLCBQR0NfU0lHSFVQLCBMT0dHSU5HX1dI RVJFLAogCQkJZ2V0dGV4dF9ub29wKCJTZXRzIHRoZSBhbW91bnQgb2YgdGltZSB0byB3YWl0IGJl Zm9yZSBmb3JjaW5nICIKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3dvcmtl cl9pbnRlcm5hbC5oIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vd29ya2VyX2ludGVybmFsLmgK aW5kZXggZDBjYjliNjA4OS4uOWI1YTdhY2E0ZiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVw bGljYXRpb24vd29ya2VyX2ludGVybmFsLmgKKysrIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24v d29ya2VyX2ludGVybmFsLmgKQEAgLTIyNSw2ICsyMjUsMTAgQEAgZXh0ZXJuIFBHRExMSU1QT1JU IExvZ2ljYWxSZXBXb3JrZXIgKk15TG9naWNhbFJlcFdvcmtlcjsKIAogZXh0ZXJuIFBHRExMSU1Q T1JUIGJvb2wgaW5fcmVtb3RlX3RyYW5zYWN0aW9uOwogCitleHRlcm4gUEdETExJTVBPUlQgaW50 IHN0cmVhbV9zZXJpYWxpemVfdGhyZXNob2xkOworCitleHRlcm4gUEdETExJTVBPUlQgdWludDMy IHBhcmFsbGVsX3N0cmVhbV9uY2h1bmtzOworCiBleHRlcm4gdm9pZCBsb2dpY2FscmVwX3dvcmtl cl9hdHRhY2goaW50IHNsb3QpOwogZXh0ZXJuIExvZ2ljYWxSZXBXb3JrZXIgKmxvZ2ljYWxyZXBf d29ya2VyX2ZpbmQoT2lkIHN1YmlkLCBPaWQgcmVsaWQsCiAJCQkJCQkJCQkJCQlib29sIG9ubHlf cnVubmluZyk7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMTVfc3RyZWFt LnBsIGIvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDE1X3N0cmVhbS5wbAppbmRleCAwMWYyMDVk MmJmLi4zNDQxYjQ3MDc3IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMTVf c3RyZWFtLnBsCisrKyBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAxNV9zdHJlYW0ucGwKQEAg LTEzMywxMyArMTMzLDIwIEBAIHN1YiB0ZXN0X3N0cmVhbWluZwogIyBDcmVhdGUgcHVibGlzaGVy IG5vZGUKIG15ICRub2RlX3B1Ymxpc2hlciA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5l dygncHVibGlzaGVyJyk7CiAkbm9kZV9wdWJsaXNoZXItPmluaXQoYWxsb3dzX3N0cmVhbWluZyA9 PiAnbG9naWNhbCcpOwotJG5vZGVfcHVibGlzaGVyLT5hcHBlbmRfY29uZigncG9zdGdyZXNxbC5j b25mJywKLQknbG9naWNhbF9kZWNvZGluZ193b3JrX21lbSA9IDY0a0InKTsKKyRub2RlX3B1Ymxp c2hlci0+YXBwZW5kX2NvbmYoCisJJ3Bvc3RncmVzcWwuY29uZicsIHFxKAorbWF4X3ByZXBhcmVk X3RyYW5zYWN0aW9ucyA9IDEwCitsb2dpY2FsX2RlY29kaW5nX3dvcmtfbWVtID0gNjRrQgorKSk7 CiAkbm9kZV9wdWJsaXNoZXItPnN0YXJ0OwogCiAjIENyZWF0ZSBzdWJzY3JpYmVyIG5vZGUKIG15 ICRub2RlX3N1YnNjcmliZXIgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ3N1YnNj cmliZXInKTsKICRub2RlX3N1YnNjcmliZXItPmluaXQoYWxsb3dzX3N0cmVhbWluZyA9PiAnbG9n aWNhbCcpOworJG5vZGVfc3Vic2NyaWJlci0+YXBwZW5kX2NvbmYoCisJJ3Bvc3RncmVzcWwuY29u ZicsIHFxKAorbWF4X3ByZXBhcmVkX3RyYW5zYWN0aW9ucyA9IDEwCispKTsKICRub2RlX3N1YnNj cmliZXItPnN0YXJ0OwogCiAjIENyZWF0ZSBzb21lIHByZWV4aXN0aW5nIGNvbnRlbnQgb24gcHVi bGlzaGVyCkBAIC0xNzAsNyArMTc3LDcgQEAgbXkgJGFwcG5hbWUgPSAndGFwX3N1Yic7CiAjIFRl c3QgdXNpbmcgc3RyZWFtaW5nIG1vZGUgJ29uJwogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMKICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJDUkVBVEUg U1VCU0NSSVBUSU9OIHRhcF9zdWIgQ09OTkVDVElPTiAnJHB1Ymxpc2hlcl9jb25uc3RyIGFwcGxp Y2F0aW9uX25hbWU9JGFwcG5hbWUnIFBVQkxJQ0FUSU9OIHRhcF9wdWIgV0lUSCAoc3RyZWFtaW5n ID0gb24pIgorCSJDUkVBVEUgU1VCU0NSSVBUSU9OIHRhcF9zdWIgQ09OTkVDVElPTiAnJHB1Ymxp c2hlcl9jb25uc3RyIGFwcGxpY2F0aW9uX25hbWU9JGFwcG5hbWUnIFBVQkxJQ0FUSU9OIHRhcF9w dWIgV0lUSCAoc3RyZWFtaW5nID0gb24sIHR3b19waGFzZSA9IG9uKSIKICk7CiAKICMgV2FpdCBm b3IgaW5pdGlhbCB0YWJsZSBzeW5jIHRvIGZpbmlzaApAQCAtMzEyLDYgKzMxOSwxMzcgQEAgJHJl c3VsdCA9CiAgICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNU IGNvdW50KCopIEZST00gdGVzdF90YWJfMiIpOwogaXMoJHJlc3VsdCwgcXEoMTAwMDApLCAnZGF0 YSByZXBsaWNhdGVkIHRvIHN1YnNjcmliZXIgYWZ0ZXIgZHJvcHBpbmcgaW5kZXgnKTsKIAorIyBD bGVhbiB1cCB0ZXN0IGRhdGEgZnJvbSB0aGUgZW52aXJvbm1lbnQuCiskbm9kZV9wdWJsaXNoZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiVFJVTkNBVEUgVEFCTEUgdGVzdF90YWJfMiIpOworJG5v ZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKKworIyBUZXN0IHNlcmlh bGl6aW5nIG1lc3NhZ2VzIHRvIGRpc2sKKworIyBTZXQgc3RyZWFtX3NlcmlhbGl6ZV90aHJlc2hv bGQgdG8gemVybywgc28gdGhlIG1lc3NhZ2VzIHdpbGwgYmUgc2VyaWFsaXplZCB0byBkaXNrLgor JG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJJ0FMVEVSIFNZU1RFTSBT RVQgc3RyZWFtX3NlcmlhbGl6ZV90aHJlc2hvbGQgPSAwOycpOworJG5vZGVfc3Vic2NyaWJlci0+ cmVsb2FkOworCisjIFJ1biBhIHF1ZXJ5IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSByZWxvYWQgaGFz IHRha2VuIGVmZmVjdC4KKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBx e1NFTEVDVCAxfSk7CisKKyMgU2VyaWFsaXplIHRoZSBDT01NSVQgdHJhbnNhY3Rpb24uCisjIENo ZWNrIHRoZSBzdWJzY3JpYmVyIGxvZyBmcm9tIG5vdyBvbi4KKyRvZmZzZXQgPSAtcyAkbm9kZV9z dWJzY3JpYmVyLT5sb2dmaWxlOworCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLAorCSJJTlNFUlQgSU5UTyB0ZXN0X3RhYl8yIFNFTEVDVCBpIEZST00gZ2VuZXJhdGVfc2Vy aWVzKDEsIDUwMDApIHMoaSkiKTsKKworIyBFbnN1cmUgdGhhdCB0aGUgbWVzc2FnZXMgYXJlIHNl cmlhbGl6ZWQuCiskbm9kZV9zdWJzY3JpYmVyLT53YWl0X2Zvcl9sb2coCisJcXIvREVCVUc6ICgg W0EtWjAtOV0rOik/IG9wZW5pbmcgZmlsZSAiLipcLmNoYW5nZXMiIGZvciBzdHJlYW1lZCBjaGFu Z2VzLywKKwkkb2Zmc2V0KTsKKworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRh cHBuYW1lKTsKKworIyBDaGVjayB0aGF0IHRyYW5zYWN0aW9uIGlzIGNvbW1pdHRlZCBvbiBzdWJz Y3JpYmVyCiskcmVzdWx0ID0KKyAgJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJTRUxFQ1QgY291bnQoKikgRlJPTSB0ZXN0X3RhYl8yIik7CitpcygkcmVzdWx0LCBxcSg1 MDAwKSwKKwknZGF0YSByZXBsaWNhdGVkIHRvIHN1YnNjcmliZXIgYnkgc2VyaWFsaXppbmcgbWVz c2FnZXMgdG8gZGlzaycpOworCisjIENsZWFuIHVwIHRlc3QgZGF0YSBmcm9tIHRoZSBlbnZpcm9u bWVudC4KKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJUUlVOQ0FURSBU QUJMRSB0ZXN0X3RhYl8yIik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFw cG5hbWUpOworCisjIFNlcmlhbGl6ZSB0aGUgUFJFUEFSRSB0cmFuc2FjdGlvbi4KKyMgQ2hlY2sg dGhlIHN1YnNjcmliZXIgbG9nIGZyb20gbm93IG9uLgorJG9mZnNldCA9IC1zICRub2RlX3N1YnNj cmliZXItPmxvZ2ZpbGU7CisKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAorCSdwb3N0Z3Jl cycsIHF7CisJQkVHSU47CisJSU5TRVJUIElOVE8gdGVzdF90YWJfMiBTRUxFQ1QgaSBGUk9NIGdl bmVyYXRlX3NlcmllcygxLCA1MDAwKSBzKGkpOworCVBSRVBBUkUgVFJBTlNBQ1RJT04gJ3hhY3Qn OworCX0pOworCisjIEVuc3VyZSB0aGF0IHRoZSBtZXNzYWdlcyBhcmUgc2VyaWFsaXplZC4KKyRu b2RlX3N1YnNjcmliZXItPndhaXRfZm9yX2xvZygKKwlxci9ERUJVRzogKCBbQS1aMC05XSs6KT8g b3BlbmluZyBmaWxlICIuKlwuY2hhbmdlcyIgZm9yIHN0cmVhbWVkIGNoYW5nZXMvLAorCSRvZmZz ZXQpOworCiskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOworCisj IENoZWNrIHRoYXQgdHJhbnNhY3Rpb24gaXMgaW4gcHJlcGFyZWQgc3RhdGUgb24gc3Vic2NyaWJl cgorJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJT RUxFQ1QgY291bnQoKikgRlJPTSBwZ19wcmVwYXJlZF94YWN0czsiKTsKK2lzKCRyZXN1bHQsIHFx KDEpLCAndHJhbnNhY3Rpb24gaXMgcHJlcGFyZWQgb24gc3Vic2NyaWJlcicpOworCisjIENoZWNr IHRoYXQgMlBDIGdldHMgY29tbWl0dGVkIG9uIHN1YnNjcmliZXIKKyRub2RlX3B1Ymxpc2hlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDT01NSVQgUFJFUEFSRUQgJ3hhY3QnOyIpOworCiskbm9k ZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOworCisjIENoZWNrIHRoYXQg dHJhbnNhY3Rpb24gaXMgY29tbWl0dGVkIG9uIHN1YnNjcmliZXIKKyRyZXN1bHQgPQorICAkbm9k ZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBGUk9N IHRlc3RfdGFiXzIiKTsKK2lzKCRyZXN1bHQsIHFxKDUwMDApLAorCSdkYXRhIHJlcGxpY2F0ZWQg dG8gc3Vic2NyaWJlciBieSBzZXJpYWxpemluZyBtZXNzYWdlcyB0byBkaXNrJyk7CisKKyMgQ2xl YW4gdXAgdGVzdCBkYXRhIGZyb20gdGhlIGVudmlyb25tZW50LgorJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIlRSVU5DQVRFIFRBQkxFIHRlc3RfdGFiXzIiKTsKKyRub2Rl X3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7CisKKyMgU2VyaWFsaXplIHRo ZSBBQk9SVCB0b3AtdHJhbnNhY3Rpb24uCisjIENoZWNrIHRoZSBzdWJzY3JpYmVyIGxvZyBmcm9t IG5vdyBvbi4KKyRvZmZzZXQgPSAtcyAkbm9kZV9zdWJzY3JpYmVyLT5sb2dmaWxlOworCiskbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgKKwkncG9zdGdyZXMnLCBxeworCUJFR0lOOworCUlOU0VS VCBJTlRPIHRlc3RfdGFiXzIgU0VMRUNUIGkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgNTAwMCkg cyhpKTsKKwlST0xMQkFDSzsKKwl9KTsKKworIyBFbnN1cmUgdGhhdCB0aGUgbWVzc2FnZXMgYXJl IHNlcmlhbGl6ZWQuCiskbm9kZV9zdWJzY3JpYmVyLT53YWl0X2Zvcl9sb2coCisJcXIvREVCVUc6 ICggW0EtWjAtOV0rOik/IG9wZW5pbmcgZmlsZSAiLipcLmNoYW5nZXMiIGZvciBzdHJlYW1lZCBj aGFuZ2VzLywKKwkkb2Zmc2V0KTsKKworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVw KCRhcHBuYW1lKTsKKworIyBDaGVjayB0aGF0IHRyYW5zYWN0aW9uIGlzIGFib3J0ZWQgb24gc3Vi c2NyaWJlcgorJHJlc3VsdCA9CisgICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCAiU0VMRUNUIGNvdW50KCopIEZST00gdGVzdF90YWJfMiIpOworaXMoJHJlc3VsdCwgcXEo MCksCisJJ2RhdGEgcmVwbGljYXRlZCB0byBzdWJzY3JpYmVyIGJ5IHNlcmlhbGl6aW5nIG1lc3Nh Z2VzIHRvIGRpc2snKTsKKworIyBDbGVhbiB1cCB0ZXN0IGRhdGEgZnJvbSB0aGUgZW52aXJvbm1l bnQuCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiVFJVTkNBVEUgVEFC TEUgdGVzdF90YWJfMiIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBu YW1lKTsKKworIyBTZXJpYWxpemUgdGhlIEFCT1JUIHN1Yi10cmFuc2FjdGlvbi4KKyMgQ2hlY2sg dGhlIHN1YnNjcmliZXIgbG9nIGZyb20gbm93IG9uLgorJG9mZnNldCA9IC1zICRub2RlX3N1YnNj cmliZXItPmxvZ2ZpbGU7CisKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAorCSdwb3N0Z3Jl cycsIHF7CisJQkVHSU47CisJSU5TRVJUIElOVE8gdGVzdF90YWJfMiBTRUxFQ1QgaSBGUk9NIGdl bmVyYXRlX3NlcmllcygxLCA1MDAwKSBzKGkpOworCVNBVkVQT0lOVCBzcDsKKwlJTlNFUlQgSU5U TyB0ZXN0X3RhYl8yIFNFTEVDVCBpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDUwMDEsIDEwMDAwKSBz KGkpOworCVJPTExCQUNLIFRPIHNwOworCUNPTU1JVDsKKwl9KTsKKworIyBFbnN1cmUgdGhhdCB0 aGUgbWVzc2FnZXMgYXJlIHNlcmlhbGl6ZWQuCiskbm9kZV9zdWJzY3JpYmVyLT53YWl0X2Zvcl9s b2coCisJcXIvREVCVUc6ICggW0EtWjAtOV0rOik/IG9wZW5pbmcgZmlsZSAiLipcLmNoYW5nZXMi IGZvciBzdHJlYW1lZCBjaGFuZ2VzLywKKwkkb2Zmc2V0KTsKKworJG5vZGVfcHVibGlzaGVyLT53 YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKKworIyBDaGVjayB0aGF0IG9ubHkgc3ViLXRyYW5z YWN0aW9uIGlzIGFib3J0ZWQgb24gc3Vic2NyaWJlci4KKyRyZXN1bHQgPQorICAkbm9kZV9zdWJz Y3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBGUk9NIHRlc3Rf dGFiXzIiKTsKK2lzKCRyZXN1bHQsIHFxKDUwMDApLAorCSdkYXRhIHJlcGxpY2F0ZWQgdG8gc3Vi c2NyaWJlciBieSBzZXJpYWxpemluZyBtZXNzYWdlcyB0byBkaXNrJyk7CisKICRub2RlX3N1YnNj cmliZXItPnN0b3A7CiAkbm9kZV9wdWJsaXNoZXItPnN0b3A7CiAKLS0gCjIuMjguMC53aW5kb3dz LjEKCg== --000000000000d641c805f145c4bf--